Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
100 lines
3.4 KiB
Plaintext
100 lines
3.4 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Disintegrate
|
|
//:: Spell FileName PHS_S_Disinteg
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
20M range, ray (ranged attack) and SR applies. Damage is 2d6 damage a caster
|
|
level to 40d6, NPC's reduced to 0 or less HP are destroyed. A fort save
|
|
makes the damage only 5d6, same rules for disintegration for NPC's
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Uses new green ray :-D
|
|
|
|
Only NPC's are destroyed utterly by the ray (using cutseen invsibility,
|
|
and damage, then destruction of body).
|
|
|
|
Objects of the NPC's are placed randomly around (if droppable).
|
|
|
|
Only affects destroyable things. Damage is in magical. Should bypass all
|
|
reductions. (I hope!)
|
|
|
|
The second script does the destroying of NPCs, as it is much easier to
|
|
ExecuteScript rather then assign command (which won't work on a dead person!)
|
|
|
|
It will:
|
|
- Set destroyable status (OBJECT_SELF)
|
|
- Create a dust thingy, move inventory.
|
|
- Destroy self.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell hook check.
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_DISINTEGRATE)) return;
|
|
|
|
// Declare major Variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget = GetSpellTargetObject();
|
|
location lTarget = GetLocation(oTarget);
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
int nDam;
|
|
|
|
// Do touch attack
|
|
int nTouch = PHS_SpellTouchAttack(PHS_TOUCH_RANGED, oTarget, TRUE);
|
|
|
|
// Do beam effect hit/miss
|
|
PHS_ApplyTouchBeam(oTarget, VFX_BEAM_DISINTEGRATE, nTouch);
|
|
|
|
// 2x x level, up to 40 (IE 20 caster levels)
|
|
int nDice = PHS_LimitInteger(nCasterLevel * 2, 40);
|
|
|
|
// Declare effects
|
|
effect eVis = EffectVisualEffect(PHS_VFX_IMP_DISINTEGRATION);
|
|
|
|
// Signal event spell cast at
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_DISINTEGRATE);
|
|
|
|
// Touch attack
|
|
if(nTouch)
|
|
{
|
|
// If it is a special thing only Disintegrate can be destroyed by, we
|
|
// check it here
|
|
if(GetTag(oTarget) == PHS_CREATURE_TAG_MAGES_SWORD)
|
|
{
|
|
// Removing all the effects will dispel it or remove it next heartbeat.
|
|
PHS_RemoveAllEffects(oTarget);
|
|
}
|
|
// Reaction type and Destroyable check
|
|
else if(!GetIsReactionTypeFriendly(oTarget) &&
|
|
PHS_CanCreatureBeDestroyed(oTarget))
|
|
{
|
|
// Spell resistance and immunity
|
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
|
|
{
|
|
// Check fortitude save.
|
|
if(PHS_SavingThrow(SAVING_THROW_FORT, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oCaster))
|
|
{
|
|
// Only 5d6 damage
|
|
nDam = PHS_MaximizeOrEmpower(6, 5, nMetaMagic, 0, nTouch);
|
|
}
|
|
else
|
|
{
|
|
// Maximum damage
|
|
nDam = PHS_MaximizeOrEmpower(6, nDice, nMetaMagic, 0, nTouch);
|
|
}
|
|
|
|
// Use new function
|
|
PHS_DisintegrateDamage(oTarget, eVis, nDam);
|
|
}
|
|
}
|
|
}
|
|
}
|