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.
123 lines
4.4 KiB
Plaintext
123 lines
4.4 KiB
Plaintext
/*
|
|
----------------
|
|
Deathmark
|
|
|
|
tob_dw_dthmrk
|
|
----------------
|
|
|
|
15/07/07 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Deathmark
|
|
|
|
Desert Wind (Strike) [Fire]
|
|
Level: Swordsage 3
|
|
Initiation Action: 1 Standard Action
|
|
Range: Melee Attack
|
|
Target: One Creature
|
|
Area: Variable.
|
|
Saving Throw: Reflex half, see text.
|
|
|
|
As your weapon strikes your foe, his body convulses as waves of flame run down
|
|
your blade into his body. The fire causes him to briefly glow with a brilliant
|
|
internal fire before the flames erupt from his body in a terrible explosion.
|
|
|
|
When you strike your foe, all creatures in the area (see table below) take 6d6 fire damage,
|
|
Reflex save for half. You are immune to this effect.
|
|
This maneuver is a supernatural maneuver.
|
|
|
|
Size Radius
|
|
Small or Less 5'
|
|
Medium 10'
|
|
Large 20'
|
|
Huge 30'
|
|
Gargantuan 40'
|
|
Colossal 50'
|
|
*/
|
|
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
|
|
float DoDeathmarkArea(object oTarget)
|
|
{
|
|
float fDist = 0.0;
|
|
int nSize = PRCGetCreatureSize(oTarget);
|
|
if (nSize == CREATURE_SIZE_SMALL || nSize == CREATURE_SIZE_TINY || nSize == CREATURE_SIZE_FINE || nSize == CREATURE_SIZE_DIMINUTIVE)
|
|
fDist = 5.0;
|
|
else if (nSize == CREATURE_SIZE_MEDIUM)
|
|
fDist = 10.0;
|
|
else if (nSize == CREATURE_SIZE_LARGE)
|
|
fDist = 20.0;
|
|
else if (nSize == CREATURE_SIZE_HUGE)
|
|
fDist = 30.0;
|
|
else if (nSize == CREATURE_SIZE_GARGANTUAN)
|
|
fDist = 40.0;
|
|
else if (nSize == CREATURE_SIZE_COLOSSAL)
|
|
fDist = 50.0;
|
|
|
|
return fDist;
|
|
}
|
|
|
|
void Deathmark(object oInitiator, object oTarget)
|
|
{
|
|
if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
|
|
{
|
|
location lTarget = GetLocation(oTarget);
|
|
float fDist = DoDeathmarkArea(oTarget);
|
|
//FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator);
|
|
int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
|
|
|
//Get the first target in the radius around the caster
|
|
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(fDist), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
//FloatingTextStringOnCreature("Deathmark First Target "+GetName(oTarget), oInitiator);
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
//FloatingTextStringOnCreature("Deathmark Target is Valid "+GetName(oTarget), oInitiator);
|
|
if(oTarget != oInitiator)
|
|
{
|
|
//FloatingTextStringOnCreature("Deathmark Target isn't Initiator", oInitiator);
|
|
SignalEvent(oTarget, EventSpellCastAt(oInitiator, GetSpellId()));
|
|
int nDamage = d6(6);
|
|
if (GetLocalInt(oInitiator, "DesertFire")) nDamage += d6();
|
|
//Run the damage through the various reflex save and evasion feats
|
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
|
if(nDamage > 0)
|
|
{
|
|
//FloatingTextStringOnCreature("Deathmark Burning", oInitiator);
|
|
effect eFire = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
|
|
// Apply effects to the currently selected target.
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
}
|
|
}
|
|
//Get the next target in the specified area around the caster
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fDist), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
|
}
|
|
}
|
|
}
|
|
|
|
void TOBAttack(object oTarget, object oInitiator)
|
|
{
|
|
//FloatingTextStringOnCreature("Deathmark TOBAttack", oInitiator);
|
|
effect eNone;
|
|
PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Deathmark Hit", "Deathmark Miss");
|
|
Deathmark(oInitiator, oTarget);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
if (!PreManeuverCastCode())
|
|
{
|
|
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
object oInitiator = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
|
|
|
if(move.bCanManeuver)
|
|
{
|
|
DelayCommand(0.0, TOBAttack(oTarget, oInitiator));
|
|
}
|
|
} |