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

177 lines
6.7 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name All Will Be Dust
//:: Spell FileName XXX_S_AllWillBeD
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Transmutation
Level: Sor/Wiz 8
Components: V, S, F
Casting Time: 1 standard action
Range: Medium (20M)
Target: One object or corporeal creature
Duration: Concentration, up to 3 rounds
Saving Throw: Fortitude partial
Spell Resistance: Yes
Source: Various (weenie)
This spell inflicts the damage of eons upon a target, wearing it down in a
couple of rounds. First, the target is hasted for three rounds, with no save.
Additionally, it suffers increasing amounts of damage: it takes 8d8 damage
on the first round, 10d8 on the second, and 12d8 on the third. Each round it
can save for half damage. If this damage would kill the target, bringing an
NPC or object to 0 hit points, it is disintegrated (as the disintegrate
spell), leaving behind only a trace of fine dust.
The damage only happens, as with the haste, as long as the caster leave the
spell to complete concentration - noting normal concentration rules for
casting spells applies.
The damage inflicted is of no particular type or energy - it is a purely the
"wear and tear" that would eventually be inflicted by the passage of time,
only the spell speeds this process up into three rounds; during that time,
the target shows signs of aging and visibly decomposes. If they do not die,
the visible decomposition is not permament and life returns to their body
after a few seconds.
Note that the target's normal lifespan is of no importance, the spell is
equally effective on mortals, immortals, constructs, undead, or objects.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
As it says.
To do the effects, and stuff, we fire up secondary spells, not normally
castable, and which take 3 seconds to cast, and 3 more to conjure.
Will need testing!
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "SMP_INC_SPELLS"
void main()
{
// Check what spell was cast. Was it 1 (Original) 2 or 3?
int nSpellId = GetSpellId();
// Define a few other things
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
// The value which needs to be present for round 2 and 3. Reset on round 1
string sLocalVar = "SMP_AWBD" + ObjectToString(oCaster);
int nTargetValue = GetLocalInt(oTarget, sLocalVar);
// Delete the local too, just in case
DeleteLocalInt(oTarget, sLocalVar);
// Declare damage and effects
int nDam;
effect eVis = EffectVisualEffect(SMP_VFX_IMP_ALL_WILL_BE_DUST);
effect eHaste = SMP_CreateHasteEffect();
effect eHasteVis = EffectVisualEffect(VFX_IMP_HASTE);
// Things that depend on which "Dust" it is.
int nSpellSaveDC, nMetaMagic;
if(nSpellId == SMP_SPELL_ALL_WILL_BE_DUST_ROUND2)
{
// Need to have the correct integer on the target
if(nTargetValue == 2)
{
// Do haste
SMP_ApplyDurationAndVFX(oTarget, eHasteVis, eHaste, 6.0);
// Get save DC and metamagic
nSpellSaveDC = GetLocalInt(oCaster, "SMP_SPELL_CAST_SPELL_SAVEDC" + IntToString(SMP_SPELL_ALL_WILL_BE_DUST));
nMetaMagic = GetLocalInt(oCaster, "SMP_SPELL_CAST_SPELL_METAMAGIC" + IntToString(SMP_SPELL_ALL_WILL_BE_DUST));
// Damage - 10d8
nDam = SMP_MaximizeOrEmpower(8, 10, nMetaMagic);
// Fortitude save for half
nDam = SMP_GetAdjustedDamage(SAVING_THROW_FORT, nDam, oTarget, nSpellSaveDC);
// Do damage
if(nDam > 0)
{
// Do disintegrate damage
SMP_DisintegrateDamage(oTarget, eVis, nDam);
}
// Do next round damage/concentration
// Set local, then action
// Integer == What it should be NEXT time this script is called.
SetLocalInt(oTarget, sLocalVar, 3);
// Do the casting action
ClearAllActions();
ActionCastSpellAtObject(SMP_SPELL_ALL_WILL_BE_DUST_ROUND3, oTarget, METAMAGIC_NONE, TRUE);
}
}
else if(nSpellId == SMP_SPELL_ALL_WILL_BE_DUST_ROUND3)
{
// Need to have the correct integer on the target
if(nTargetValue == 2)
{
// Do haste
SMP_ApplyDurationAndVFX(oTarget, eHasteVis, eHaste, 6.0);
// Get save DC and metamagic
nSpellSaveDC = GetLocalInt(oCaster, "SMP_SPELL_CAST_SPELL_SAVEDC" + IntToString(SMP_SPELL_ALL_WILL_BE_DUST));
nMetaMagic = GetLocalInt(oCaster, "SMP_SPELL_CAST_SPELL_METAMAGIC" + IntToString(SMP_SPELL_ALL_WILL_BE_DUST));
// Damage - 12d8
nDam = SMP_MaximizeOrEmpower(8, 12, nMetaMagic);
// Fortitude save for half
nDam = SMP_GetAdjustedDamage(SAVING_THROW_FORT, nDam, oTarget, nSpellSaveDC);
// Do damage
if(nDam > 0)
{
// Do disintegrate damage
SMP_DisintegrateDamage(oTarget, eVis, nDam);
}
}
}
else //if(nSpellId == SMP_SPELL_ALL_WILL_BE_DUST)// Original/New by default.
{
// Spell hook check
if(!SMP_SpellHookCheck(SMP_SPELL_ALL_WILL_BE_DUST)) return;
// Do everything as if it was a normal impact spell.
// IE: First, resisting the spell
if(!SMP_SpellResistanceCheck(oCaster, oTarget))
{
// Get save DC and metamagic
nSpellSaveDC = SMP_GetSpellSaveDC();
nMetaMagic = SMP_GetMetaMagicFeat();
// Do haste
SMP_ApplyDurationAndVFX(oTarget, eHasteVis, eHaste, 6.0);
// Damage - 8d8
nDam = SMP_MaximizeOrEmpower(8, 10, nMetaMagic);
// Fortitude save for half
nDam = SMP_GetAdjustedDamage(SAVING_THROW_FORT, nDam, oTarget, nSpellSaveDC);
// Do damage
if(nDam > 0)
{
// Do disintegrate damage
SMP_DisintegrateDamage(oTarget, eVis, nDam);
}
// Do next round damage/concentration
// Set local, then action
// Integer == What it should be NEXT time this script is called.
SetLocalInt(oTarget, sLocalVar, 2);
// Do the casting action
ClearAllActions();
ActionCastSpellAtObject(SMP_SPELL_ALL_WILL_BE_DUST_ROUND2, oTarget, METAMAGIC_NONE, TRUE);
}
}
}