Further file organization
Further file organization
This commit is contained in:
73
nwn/nwnprc/trunk/newspellbook/tob_dw_slmdrchrg.nss
Normal file
73
nwn/nwnprc/trunk/newspellbook/tob_dw_slmdrchrg.nss
Normal file
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
----------------
|
||||
Salamander Charge
|
||||
|
||||
tob_dw_slmdrchrg.nss
|
||||
----------------
|
||||
|
||||
19/08/07 by Stratovarius
|
||||
*/ /** @file
|
||||
|
||||
Salamander Charge
|
||||
|
||||
Desert Wind (Strike) [Fire]
|
||||
Level: Swordsage 7
|
||||
Prerequisite: Three Desert Wind maneuvers
|
||||
Initiation Action: 1 Full-round action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: Instantaneous, see text
|
||||
|
||||
You spin and tumble about the battlefield, a wall of raging flame marking your steps.
|
||||
|
||||
You charge your foe. In the space across which you charge, a wall of fire appears, dealing 6d6 damage to all who enter.
|
||||
This wall lasts for 5 rounds.
|
||||
This is a supernatural maneuver.
|
||||
*/
|
||||
|
||||
#include "tob_inc_move"
|
||||
#include "tob_movehook"
|
||||
#include "prc_inc_combmove"
|
||||
|
||||
location FindLocation(object oTarget, object oInitiator);
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!PreManeuverCastCode())
|
||||
{
|
||||
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oInitiator = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
||||
|
||||
if(move.bCanManeuver)
|
||||
{
|
||||
// Yup, thats it.
|
||||
int nDamage;
|
||||
if (GetLocalInt(oInitiator, "DesertFire")) nDamage += d6();
|
||||
DoCharge(oInitiator, oTarget, TRUE, TRUE, nDamage);
|
||||
effect eAOE = EffectAreaOfEffect(AOE_PER_SALAMANDER_CHARGE);
|
||||
location lTarget = FindLocation(oTarget, oInitiator);
|
||||
// So you run over it first
|
||||
DelayCommand(3.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAOE, lTarget, 30.0));
|
||||
}
|
||||
}
|
||||
|
||||
location FindLocation(object oTarget, object oInitiator)
|
||||
{
|
||||
// Calculate location
|
||||
float fDistance = GetDistanceBetween(oTarget, oInitiator);
|
||||
location lInitiator = GetLocation(oInitiator);
|
||||
location lTargetOrigin = GetLocation(oTarget);
|
||||
vector vAngle = AngleToVector(GetRelativeAngleBetweenLocations(lInitiator, lTargetOrigin));
|
||||
vector vTargetOrigin = GetPosition(oTarget);
|
||||
// Half the distance
|
||||
vector vTarget = vTargetOrigin + (vAngle * (fDistance/2));
|
||||
|
||||
return lTargetOrigin = Location(GetArea(oTarget), vTarget, GetFacing(oTarget));
|
||||
}
|
Reference in New Issue
Block a user