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

80 lines
3.2 KiB
Plaintext

/////////////////////////////////////////////////
// Magma Burst: On Heartbeat
// tm_s0_epMagmaBuB.nss
//-----------------------------------------------
// Created By: Nron Ksr
// Created On: 03/12/2004
// Description: Initial explosion (20d8) reflex save, then AoE of lava (10d8),
// fort save. If more then 5 rnds in the cloud cumulative, you turn to stone
// as the lava hardens (fort save).
/////////////////////////////////////////////////
// Last Updated: 03/15/2004, Nron Ksr
/////////////////////////////////////////////////
#include "inc_epicspells"
void main()
{
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oAoE = OBJECT_SELF;
object oCaster = GetAreaOfEffectCreator();
if(!GetIsObjectValid(oCaster))
{
DestroyObject(oAoE);
return;
}
//Declare major variables
int nDamage;
effect eDam;
float fDelay;
//Declare and assign personal impact visual effect.
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
object oTarget = GetFirstInPersistentObject(oAoE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
//Declare the spell shape, size and the location.
while(GetIsObjectValid(oTarget))
{
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster))
{
fDelay = PRCGetRandomDelay(0.5, 2.0);
//Roll damage.
nDamage = d8(10);
//Adjust damage for Fort Save: How does one avoid lava and not leave the area?
// Flying, I guess: To bad NWN doesn't have a "Z" Axis. :D
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetEpicSpellSaveDC(oCaster, oTarget, SPELL_EPIC_MAGMA_B) , // B- ch to nDC
SAVING_THROW_TYPE_FIRE, oCaster))
{
// Apply effects to the currently selected target.
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
else
{
nDamage = nDamage / 2;
if(GetHasMettle(oTarget, SAVING_THROW_FORT))
// This script does nothing if it has Mettle, bail
nDamage = 0;
eDam = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
}
int nMagmaBurstCounter = GetLocalInt(oTarget, "MagmaBurst");
if(nMagmaBurstCounter >= 1)
{
int nCounterIncrease = nMagmaBurstCounter +1;
SetLocalInt(oTarget, "MagmaBurst", nCounterIncrease);
if(nCounterIncrease >= 5)
PRCDoPetrification(GetTotalCastingLevel(oCaster), oAoE, oTarget, PRCGetSpellId(), GetEpicSpellSaveDC(oCaster, oTarget));
}
}
//Select the next target within the spell shape.
oTarget = GetNextInPersistentObject(oAoE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
PRCSetSchool();
}