PRC8/nwn/nwnprc/trunk/newspellbook/tob_wtrn_whtrvnt.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

120 lines
4.7 KiB
Plaintext

/*
----------------
White Raven Tactics
tob_wtrn_whtrvnt.nss
----------------
18/08/07 by Stratovarius
*/ /** @file
White Raven Tactics
Iron Heart (Boost)
Level: Crusader 3, Warblade 3
Initiation Action: 1 Swift Action
Range: 10 ft.
Target: One ally
You can inspire your allies to astounding feats of martial prowess
With a few short orders, you cajole them into seizing the initiative
and driving back the enemy.
Your ally gets to go again this turn. You cannot target yourself with this maneuver.
*/
#include "tob_inc_move"
#include "tob_movehook"
//#include "prc_alterations"
//inc_vfx_const
// Needed for applying time stop effects directly to Initator & Target when PRC_TIMESTOP_LOCAL flag is set
//#include "inc_timestop"
void main()
{
if(!PreManeuverCastCode()) return;
object oInitiator = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
if(oInitiator == oTarget)
{
FloatingTextStringOnCreature("White Raven Tactics may not be used on yourself.", oInitiator, FALSE);
return;
}
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
float fDuration = RoundsToSeconds(1); // One Combat Round
if(move.bCanManeuver)
{
effect eTime;
// Create visual effect for the target
effect eVisTarget = EffectVisualEffect(PSI_DUR_TEMPORAL_ACCELERATION);
// Apply impact VFX (Impact must be done before global Timestop effect, or impact is frozen too)
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HASTE), oTarget);
// PRC_TIMESTOP_LOCAL (VFX_PER_NEW_TIMESTOP) alwasy applies its effects to all creatures except the *caster* (oInitiator),
// and the target passed into it via a local on the caster, so we need to manually freeze the Initiator and set the Target.
if(GetPRCSwitch(PRC_TIMESTOP_LOCAL))
{
//Create extraordinary Time Stop effect
eTime = ExtraordinaryEffect(EffectAreaOfEffect(VFX_PER_NEW_TIMESTOP));
// Link Ethereal and the duration visuals
eVisTarget = EffectLinkEffects(eVisTarget, EffectEthereal());
// Set a local object on the creator/Initator to make the Target exempt from the time stop effect
SetLocalObject(oInitiator, "PRC_WRT_TARGET", oTarget);
// Directly apply a temporary freeze to the Initator
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectLinkEffects(EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION), EffectCutsceneParalyze()), oInitiator, fDuration);
SetCommandable(FALSE, oInitiator); // If this does not prevent move recovery during the time stop round, then remove it
DelayCommand(fDuration, SetCommandable(TRUE, oInitiator));
// Not performing blank screen since, thematically, the effect is the Initator giving the Target orders, so teh initator shooudl be aware of what the target does
// Blank screen and delayed Blank screen removal could be placed here
// Apply area effect to initator instead of target, so it is not removed incorrectly
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTime, oInitiator, fDuration);
// Apply visual & Ethereal effects to the target
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisTarget, oTarget, fDuration);
// Apply the time stop impact VFX (Cannot be used with bioware time stop, since it freezes the VFX animation until the timestop is over)
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_TIME_STOP_DN_ORANGE), GetLocation(oInitiator));
//AssignCommand(oTarget,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVisTarget, oTarget, fDuration));
// Clean up
DelayCommand(fDuration, DeleteLocalObject(oInitiator, "PRC_WRT_TARGET"));
}
else
{
//Create extraordinary Time Stop effect
eTime = ExtraordinaryEffect(EffectTimeStop());
// Link up the visual effects
eTime = EffectLinkEffects(eTime, eVisTarget);
// Apply effect directly to target
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTime, oTarget, fDuration);
}
}
}
/*
// recolored time stop VFX
const int VFX_IMP_TIME_STOP_DN_SOUNDFX = 1049;
const int VFX_IMP_TIME_STOP_DN_RED = 1050;
const int VFX_IMP_TIME_STOP_DN_ORANGE = 1051;
const int VFX_IMP_TIME_STOP_DN_YELLOW = 1052;
const int VFX_IMP_TIME_STOP_DN_GREEN = 1053;
const int VFX_IMP_TIME_STOP_DN_BLUE = 1054;
const int VFX_IMP_TIME_STOP_DN_PURPLE = 1055;
const int VFX_IMP_TIME_STOP_DN_SILENT = 1056;
*/