Further file organization
Further file organization
This commit is contained in:
187
nwn/nwnprc/trunk/smp/phs_s_baleflpoly.nss
Normal file
187
nwn/nwnprc/trunk/smp/phs_s_baleflpoly.nss
Normal file
@@ -0,0 +1,187 @@
|
||||
/*:://////////////////////////////////////////////
|
||||
//:: 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...
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user