PRC8/nwn/nwnprc/trunk/newspellbook/tob_dpst_awstdrg.nss
Jaysyn904 8a034b0da0 2025/05/25 Update
Updated all ToB maneuvers with saves to respect Blade Meditation.
Added HasBladeMeditationForDiscipline()
Expanded Witchborn Binder for epic progression.
Fixed a few bugs around Vile Martial strike.
Echo Spell shouldn't target self or items.
Muckdweller should have a -6 STR.
Added new Vile Martial feats to GetVileFeats().
Grappling something now removes invisibility.
Started on Power Attack NUI.
Starmantle shouldn't stack.
Factotum & Shadow Thief of Amn require UMD checks for scroll casting.
2025-05-25 16:16:36 -04:00

63 lines
1.9 KiB
Plaintext

/*
----------------
Awaken the Stone Dragon
tob_dpst_awstdrg
----------------
27/01/08 by Stratovarius
*/ /** @file
Awaken the Stone Dragon
Deepstone Sentinel level 5
The ground ripples and rolls, crashing your foes to the ground, battered and sore.
Once per encounter, you may cause a small earthquake, dealing 12d6 damage to all foes within
60 feet. Those who succeed at a Reflex save remain standing and take 6d6 damage.
*/
#include "tob_inc_tobfunc"
#include "tob_movehook"
////#include "prc_alterations"
void main()
{
object oInitiator = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
if(GetLocalInt(oInitiator, "DPST_Awaken_Stone_Dragon_Expended"))
{
FloatingTextStringOnCreature("*Awaken the Stone Dragon Already Expended*", oInitiator, FALSE);
return;
}
// Mark ability used this encounter
SetLocalInt(oInitiator, "DPST_Awaken_Stone_Dragon_Expended", TRUE);
object oProneTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), GetLocation(oInitiator));
while(GetIsObjectValid(oProneTarget))
{
// Enemy check
if (GetIsEnemy(oProneTarget, oInitiator))
{
int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_STRENGTH, oInitiator);
int nBladeMed = HasBladeMeditationForDiscipline(oInitiator, GetDisciplineByManeuver(PRCGetSpellId()));
if (nBladeMed)
{
nDC += 1;
}
// Save check
if (!PRCMySavingThrow(SAVING_THROW_WILL, oProneTarget, nDC))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectKnockdown()), oProneTarget, 6.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(12)), oProneTarget);
}
else //Succeed
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(6)), oProneTarget);
}
oProneTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), GetLocation(oInitiator));
}
}