PRC8_fork/nwn/nwnprc/trunk/smp/phs_spell_poison.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

135 lines
5.7 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Poison
//:: Spell FileName
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Necromancy
Level: Clr 4, Drd 3
Components: V, S, DF
Casting Time: 1 standard action
Range: Touch
Target: Living creature touched
Duration: Instantaneous; see text
Saving Throw: Fortitude negates; see text
Spell Resistance: Yes
Calling upon the venomous powers of natural predators, you infect the
subject with a horrible poison by making a successful melee touch attack.
The poison deals 1d10 points of Constitution damage immediately and another
1d10 points of Constitution damage 1 minute later. Each instance of damage
can be negated by a Fortitude save (DC 10 + 1/2 your caster level + your Wis
modifier).
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Not sure about the "minute later", ubt I think it is already like that for
all poisons.
Cirtainly needs testing - will a new poison.2da work?
Added values from PHS_POISON_SPELL_POISON_ENTRY_START upwards, DC 13 up to
DC 50.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
// DC13 Entry in the poisons.2da
const int PHS_POISON_SPELL_POISON_ENTRY_START = 101;
// Gets the 2da of the poison to use
int Get2daEntry(int nDC);
void main()
{
// Spell hook check
if(!PHS_SpellHookCheck(PHS_SPELL_POISON)) return;
// Declare Major Variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nMetaMagic = PHS_GetMetaMagicFeat();
int nCasterLevel = PHS_GetCasterLevel();
int nAbility = PHS_GetAppropriateAbilityBonus();
// Get the DC. 10 + Ability Modifier (Wisdom) + Half caster level
int nDC = 10 + PHS_LimitInteger(nCasterLevel/2) + nAbility;
if(nDC > 50) nDC = 50;
// Do touch attack
int nTouch = PHS_SpellTouchAttack(PHS_TOUCH_MELEE, oTarget, TRUE);
// Delcare Effects
effect ePoison = EffectPoison(Get2daEntry(nDC));
// Signal spell cast at event
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_POISON);
// Melee Touch attack
if(nTouch)
{
// PvP Check
if(!GetIsReactionTypeFriendly(oTarget))
{
// Spell resistance and immunity check
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
{
// Apply poison (permament)
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePoison, oTarget);
}
}
}
}
// Gets the 2da of the poison to use
int Get2daEntry(int nDC)
{
int nResult = PHS_POISON_SPELL_POISON_ENTRY_START;
switch(nDC)
{
case 50: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 37; break;
case 49: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 36; break;
case 48: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 35; break;
case 47: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 34; break;
case 46: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 33; break;
case 45: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 32; break;
case 44: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 31; break;
case 43: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 30; break;
case 42: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 29; break;
case 41: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 28; break;
case 40: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 27; break;
case 39: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 26; break;
case 38: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 25; break;
case 37: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 24; break;
case 36: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 23; break;
case 35: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 22; break;
case 34: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 21; break;
case 33: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 20; break;
case 32: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 19; break;
case 31: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 18; break;
case 30: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 17; break;
case 29: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 16; break;
case 28: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 15; break;
case 27: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 14; break;
case 26: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 13; break;
case 25: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 12; break;
case 24: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 11; break;
case 23: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 10; break;
case 22: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 9; break;
case 21: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 8; break;
case 20: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 7; break;
case 19: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 6; break;
case 18: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 5; break;
case 17: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 4; break;
case 16: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 3; break;
case 15: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 2; break;
case 14: nResult = PHS_POISON_SPELL_POISON_ENTRY_START + 1; break;
// Default to DC13
default: nResult = PHS_POISON_SPELL_POISON_ENTRY_START; break;
}
return nResult;
}