PRC8_fork/trunk/psionics/psi_pow_tempacc.nss
Jaysyn904 1662218bb4 Initial upload.
Adding base PRC 4.19a files to repository.
2022-10-07 13:51:24 -04:00

117 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
----------------
Temporal Acceleration
psi_pow_tempacc
----------------
27/3/05 by Stratovarius
*/ /** @file
Temporal Acceleration
Psychoportation
Level: Psion/wilder 6
Manifesting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round (in apparent time); see text
Power Points: 11
Metapsionics: Extend
You enter another time frame, speeding up so greatly that all other
creatures seem frozen, though they are actually still moving at normal
speed. You are free to act for 1 round of apparent time. You can manifest
powers, cast spells, move, or perform other types of actions.
When your temporal acceleration expires, you resume acting during your
current turn in the standard time frame. You are shaken for 1 round upon
your return to the standard time frame.
Manifesting this power is a swift action, like manifesting a quickened
power, and it counts toward the normal limit of one quickened power per
round.
Augment: For every 4 additional power points you spend, this powers
duration (in apparent time) increases by 1 round.
*/
#include "psi_inc_psifunc"
#include "psi_inc_pwresist"
#include "psi_spellhook"
#include "prc_inc_spells"
#include "inc_timestop"
void main()
{
/*
Spellcast Hook Code
Added 2004-11-02 by Stratovarius
If you want to make changes to all powers,
check psi_spellhook to find out more
*/
if (!PsiPrePowerCastCode())
{
// If code within the PrePowerCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oManifester = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
struct manifestation manif =
EvaluateManifestation(oManifester, oTarget,
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
4, PRC_UNLIMITED_AUGMENTATION
),
METAPSIONIC_EXTEND
);
if(manif.bCanManifest)
{
location lTarget = PRCGetSpellTargetLocation();
effect eImpact = EffectVisualEffect(VFX_FNF_TIME_STOP);
effect eDur = EffectVisualEffect(PSI_DUR_TEMPORAL_ACCELERATION);
effect eTStop = EffectTimeStop();
float fDuration = 6.0f * (1 + manif.nTimesAugOptUsed_1);
if(manif.bExtend) fDuration *= 2;
// Local timestop modifications
if(GetPRCSwitch(PRC_TIMESTOP_LOCAL))
{
eTStop = EffectAreaOfEffect(VFX_PER_NEW_TIMESTOP);
eTStop = EffectLinkEffects(eTStop, EffectEthereal());
if(GetPRCSwitch(PRC_TIMESTOP_NO_HOSTILE))
{
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_BULLETS, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_ARROWS, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_BOLTS, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oManifester), fDuration);
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyNoDamage(), GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oManifester), fDuration);
/*
DelayCommand(RoundsToSeconds(nDur), RemoveTimestopEquip());
string sSpellscript = PRCGetUserSpecificSpellScript();
DelayCommand(RoundsToSeconds(nDur), PRCSetUserSpecificSpellScript(sSpellscript));
PRCSetUserSpecificSpellScript("tsspellscript");
now in main spellhook */
}
}
// Let the AI know - Special handling
PRCSignalSpellEvent(oTarget, FALSE, SPELL_TIME_STOP, oManifester);
// Apply the VFX impact and effects
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, lTarget);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oManifester, fDuration);
// Delayed a bit to let the VFX start
DelayCommand(0.75f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTStop, oManifester, fDuration, TRUE, manif.nSpellID, manif.nManifesterLevel));
}// end if - Successfull manifestation
}