PRC8/nwn/nwnprc/trunk/smp/phs_s_baleflpoly.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

188 lines
6.4 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Baleful Polymorph
//:: Spell FileName PHS_S_BaleflPoly
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Transmutation
Level: Drd 5, Sor/Wiz 5
Components: V, S
Casting Time: 1 standard action
Range: Close (8M)
Target: One creature
Duration: Permanent
Saving Throw: Fortitude negates, Will partial; see text
Spell Resistance: Yes
As polymorph, except that you change the subject into a Small or smaller
animal of no more than 1 HD. If this is cast at a non-party member, the target
recieves a +4 save bonus, for it being fatal.
Small animals include:
- Rat, Parrot, Seagull, Snake
If the spell succeeds, the subject must also make a Will save. If this
second save fails, the creature gains the new Wisdom, intelligence and
Charisma of the new form.
Even if the second save suceeds, the target is unable to cast spells, but
does retain its orignal hit dice and classes.
Shapechangers, Incorporeal or gaseous creatures are immune to being
polymorphed, and Shapeshifter classes can revert back to thier normal form
even if all the saves were failed, after one round.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Rating: 3: But requires polymorph entries. Toad and Rat will be 2 of them,
maybe more. It will be permament - ouch
Not too sure...hmm...
An enemy polymorph spell. Can change it and just make it an un-cancleable
polymorph (which can be dispelled) which is obivously quite powerful.
Shifters are immune to the cancle part.
- Rat
- Parrot
- Seagull
- Snake
Maybe:
- Toad (?)
//:://////////////////////////////////////////////
//:: Spell Turning Notes
//:://////////////////////////////////////////////
This does apply. After Spell Resistance is checked on the target (IE: If
they are naturally immune, especially via immunity to this specific spell)
we check for spell turning.
If it is sucessful, the caster makes the SR and save check against the
effect.
If they both have it, then it does as the rules say - % chance of being
the affected one.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
// Do effects of spell (here for Spell turning)
void DoBalefulEffects(object oTarget, int nPolymorph, int nSpellSaveDC, object oCaster = OBJECT_SELF);
void main()
{
// Spell Hook Check
if(!PHS_SpellHookCheck()) return;
// Declare major variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nSpellSaveDC = PHS_GetSpellSaveDC();
int nPolymorph = PHS_GetLocalConstant(oCaster, "PHS_BALEFUL_POLYMORPH_CHOICE");
int bLocked = TRUE;
// Default to Rat
if(nPolymorph == -1)
{
nPolymorph = 1;
}
// PvP
if(!GetIsReactionTypeFriendly(oTarget))
{
// Signal Spell cast at
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_BALEFUL_POLYMORPH, TRUE);
// Do a spell reistance check
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
{
// Spell turning!
int nSpellTurning = PHS_SpellTurningCheck(oCaster, oTarget, PHS_ArrayGetSpellLevel(PHS_SPELL_BALEFUL_POLYMORPH, GetLastSpellCastClass()));
// 1 = No effect
if(nSpellTurning == 1)
{
// Stop
return;
}
else if(nSpellTurning == 2)
{
// Affect the caster only, full power.
DoBalefulEffects(oCaster, nPolymorph, nSpellSaveDC);
}
else if(nSpellTurning == 3)
{
// Affects the caster OR the target, a % type thing. Set on local that can be
// retrieved. If damaging, part damage each. If not, % chance to affect either.
// Get the %. This one it is a chance of affecting us...
int nFraction = FloatToInt(GetLocalFloat(oCaster, PHS_SPELL_TURNING_FRACTION) * 100);
// Check
// - If the d100 is LESS then nFaction, it is GOOD for the target -
// thus we affect the caster. Else, affect the target normally.
if(d100() <= nFraction)
{
DoBalefulEffects(oCaster, nPolymorph, nSpellSaveDC);
}
else
{
DoBalefulEffects(oTarget, nPolymorph, nSpellSaveDC);
}
}
else //if(nSpellTurning == 4)
{
// 4 = Spell affects both people equally at full effect.
DoBalefulEffects(oCaster, nPolymorph, nSpellSaveDC);
DoBalefulEffects(oTarget, nPolymorph, nSpellSaveDC);
}
}
}
}
// Do effects of spell (here for Spell turning)
void DoBalefulEffects(object oTarget, int nPolymorph, int nSpellSaveDC, object oCaster = OBJECT_SELF)
{
int bContinue = TRUE;
if(oTarget == oCaster)
{
bContinue = PHS_SpellResistanceCheck(oCaster, oTarget);
}
if(bContinue)
{
// If they are not a friend (in the same faction) we take 4 away from the DC
if(!GetFactionEqual(oTarget))
{
nSpellSaveDC -= 4;
}
// They can auto cancle if they are a shapechanger.
int bLocked = (PHS_GetIsShapechangerSubtype(oTarget) == FALSE);
// Declare effects
effect eVis = EffectVisualEffect(PHS_VFX_IMP_BALEFUL_POLYMORPH);
effect ePolymorph = EffectPolymorph(nPolymorph, bLocked);
// Fortitude save negates
if(!PHS_SavingThrow(SAVING_THROW_FORT, oTarget, nSpellSaveDC))
{
// Gaseous and so on are polymorph immune
if(!PHS_ImmuneToPolymorph(oTarget))
{
// Apply polymorph effects
PHS_ApplyPolymorphPermanentAndVFX(oTarget, eVis, ePolymorph);
// If they fail a will save, we also apply penalties to thier
// Intelligence, will and Charisma.
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC))
{
// Penalties applied...somehow, on the hide probably...
}
}
}
}
}