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.
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));
|
|
}
|
|
} |