PRC8_fork/nwn/nwnprc/trunk/smp/xxx_s_vitaegrena.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

155 lines
5.6 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Vitae Grenade
//:: Spell FileName XXX_S_VitaeGren
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Transmutation
Level: Sor/Wiz 5
Components: V, S, F, M
Casting Time: 1 standard action
Range: Medium (20M)
Area: 6.67M-radius (20-ft) spread, centered on 1 target creature
Duration: Instantaneous
Saving Throw: Fortitude partial
Spell Resistance: Yes
Source: Various (Andvaranaut)
Upon casting this spell, a small vial of your own blood flies throught the
air towards a designated target, which it strikes unerringly. In flight,
the blood crystalizes and begins to become explosively unstable due to the
magical energies channelled into it. Upon impact, the vial and blood
crystals detonate, dealing 1d6 points of damage per 2 levels (to a maximum
of 10d6) to all within the area of effect. This is non-elemental damage, and
thus not subject to damage reduction from such spells as Protection from
Elements.
Additionally, all those unfortunate enough to be caught in the blast are
knocked prone and coated with a fine, dust-like coating of the blood - until
recently - contained within the vial. Unless completely washed off, by
resting, or after 24 hours, the blood begins to reek, and will give a -4
penalty to hide checks until the blood is removed.
A successful fortitude save halves the damage dealt by this spell, and
prevents the character from falling prone.
The focus and material component for this spell is a small vial of your own
blood (roughly 2hp worth).
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Perfectly fine.
Originally it was +4 to people tracking them, but I think -4 to hide checks
are just as fine.
That part isn't savable against. The proneness is, and the damage is.
Need blood effects (eeewww!)
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "SMP_INC_SPELLS"
void main()
{
// Spell Hook Check.
if(!SMP_SpellHookCheck(SMP_SPELL_VITAE_GRENADE)) return;
// Declare major variables
object oCaster = OBJECT_SELF;
object oTarget;
location lTarget = GetSpellTargetLocation();
int nCasterLevel = SMP_GetCasterLevel();
int nSpellSaveDC = SMP_GetSpellSaveDC();
int nMetaMagic = SMP_GetMetaMagicFeat();
int nDam;
float fDelay;
// Duration of blood
float fDurationBlood = HoursToSeconds(24);
// Duration of proneness
float fDurationProne = RoundsToSeconds(1);
// 2 HP damage
int nCurrentHP = GetCurrentHitPoints(oCaster);
// Need to do damage
if(nCurrentHP <= 2)
{
// Not enough HP
FloatingTextStringOnCreature("*You cannot draw enough blood to throw*", oCaster, FALSE);
return;
}
// Damage for HP
FloatingTextStringOnCreature("*You draw blood to throw*", oCaster, FALSE);
// Do the damage (2HP worth).
effect eDamage = EffectDamage(2);
SMP_ApplyInstant(oTarget, eDamage);
// Limit dice to 10d6, per 2 caster levels
int nDice = SMP_LimitInteger(nCasterLevel/2, 10);
// Declare Effects
effect eVis = EffectVisualEffect(VFX_COM_CHUNK_RED_LARGE);
effect eKnockdown = EffectKnockdown();
effect eHide = EffectSkillDecrease(SKILL_HIDE, 4);
// Apply AOE visual
effect eImpact = EffectVisualEffect(SMP_VFX_FNF_VITAE_GRENADE);
SMP_ApplyLocationVFX(lTarget, eImpact);
// Get all targets in a sphere, 6.67M radius, creature.
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 6.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
// Loop targets
while(GetIsObjectValid(oTarget))
{
// PvP Check
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
// Make sure they are not immune to spells
!SMP_TotalSpellImmunity(oTarget))
{
//Fire cast spell at event for the specified target
SMP_SignalSpellCastAt(oTarget, SMP_SPELL_VITAE_GRENADE);
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
// Spell resistance And immunity checking.
if(!SMP_SpellResistanceCheck(oCaster, oTarget, fDelay))
{
// Remove old hide penalties
SMP_RemoveSpecificEffectFromSpell(EFFECT_TYPE_SKILL_DECREASE, SMP_SPELL_VITAE_GRENADE, oTarget);
// Always apply the -4 to hide
DelayCommand(fDelay, SMP_ApplyDurationAndVFX(oTarget, eVis, eHide, fDurationBlood));
// Roll damage for each target
nDam = SMP_MaximizeOrEmpower(6, nDice, nMetaMagic);
// Fortitide save
if(SMP_SavingThrow(SAVING_THROW_FORT, oTarget, nSpellSaveDC))
{
// Half damage
nDam /= 2;
// No Proneness
}
else
{
// Proneness
DelayCommand(fDelay, SMP_ApplyDuration(oTarget, eKnockdown, fDurationProne));
}
// Apply effects to the currently selected target.
DelayCommand(fDelay, SMP_ApplyDamageToObject(oTarget, nDam, DAMAGE_TYPE_MAGICAL));
}
}
// Get Next Target
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 6.67, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}