PRC8/nwn/nwnprc/trunk/epicspellscripts/ss_ep_maspenguin.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

100 lines
4.8 KiB
Plaintext

//:://////////////////////////////////////////////
//:: FileName: "ss_ep_maspenguin"
/* Purpose: Mass Penguin - turns all creatures in the target area into
penguins!
*/
//:://////////////////////////////////////////////
//:: Created By: Boneshank
//:: Last Updated On: March 12, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "pnp_shft_poly"
#include "inc_epicspells"
#include "prc_compan_inc"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
if (!X2PreSpellCastCode())
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
return;
}
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_MASSPEN))
{
float fDelay;
int nDuration = 20;
effect eExplode = EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION);
effect eDuration = EffectVisualEffect(VFX_DUR_PIXIEDUST);
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect ePolymorph = EffectPolymorph(POLYMORPH_TYPE_PENGUIN, TRUE);
effect eLink = EffectLinkEffects(eDuration, ePolymorph);
location lTarget = PRCGetSpellTargetLocation();
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eDuration,
lTarget, 10.0);
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_LARGE, lTarget);
// Cycle through the targets within the spell shape
// until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if (oTarget != OBJECT_SELF)
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF,
PRCGetSpellId()));
fDelay = PRCGetRandomDelay(1.5, 2.5);
if(!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF), fDelay) && PRCGetIsAliveCreature(oTarget))
{
if(PRCGetCreatureSize(oTarget) == CREATURE_SIZE_TINY ||
PRCGetCreatureSize(oTarget) == CREATURE_SIZE_SMALL ||
PRCGetCreatureSize(oTarget) == CREATURE_SIZE_MEDIUM)
{
// Targets all get a Fortitude saving throw
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget),
SAVING_THROW_TYPE_SPELL, OBJECT_SELF, fDelay))
{
//this command will make shore that polymorph plays nice with the shifter
ShifterCheck(oTarget);
//companion has multi-sized penguins :)
if(GetPRCSwitch(MARKER_PRC_COMPANION))
{
int nRandom = d100();
if(nRandom < 25)
ePolymorph = EffectPolymorph(POLYMORPH_TYPE_PENGUIN, TRUE);
else if(nRandom < 40)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_150, TRUE);
else if(nRandom < 55)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_200, TRUE);
else if(nRandom < 70)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_300, TRUE);
else if(nRandom < 85)
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_400, TRUE);
else
ePolymorph = EffectPolymorph(PRC_COMP_POLYMORPH_TYPE_PENGUIN_500, TRUE);
eLink = EffectLinkEffects(eDuration, ePolymorph);
}
// Apply effects to the currently selected target.
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_TEMPORARY, eLink, oTarget,
HoursToSeconds(nDuration), TRUE, -1, GetTotalCastingLevel(OBJECT_SELF)));
DelayCommand(fDelay, SPApplyEffectToObject
(DURATION_TYPE_INSTANT, eVis, oTarget));
}
}
}
}
//Select the next target within the spell shape.
oTarget = GetNextObjectInShape(SHAPE_SPHERE,
RADIUS_SIZE_LARGE, lTarget);
}
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}