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.
102 lines
3.2 KiB
Plaintext
102 lines
3.2 KiB
Plaintext
/** @file psi_pow_psirev
|
||
|
||
Psionic Revivify
|
||
|
||
Psychometabolism (Healing) [Good]
|
||
Level: Egoist 5
|
||
Manifesting Time: 1 standard action
|
||
Range: Touch
|
||
Target: Dead creature touched
|
||
Duration: Instantaneous
|
||
Saving Throw: None
|
||
Power Resistance: No
|
||
Power Points: 9, XP
|
||
Metapsionics: None
|
||
|
||
Psionic revivify lets a manifester reconnect a corpse’s psyche with its
|
||
body, restoring life to a recently deceased creature.
|
||
|
||
This power functions like the raise dead spell, except that the affected
|
||
creature receives no level loss, no Constitution loss, and no loss of
|
||
powers.
|
||
|
||
The creature has -1 hit points (but is stable) after being restored to life.
|
||
|
||
XP Cost: 200 XP.
|
||
|
||
@author Stratovarius
|
||
@date Created: May 17, 2005
|
||
@date Modified: Jul 3, 2006
|
||
*/
|
||
|
||
#include "psi_inc_psifunc"
|
||
#include "psi_inc_pwresist"
|
||
#include "psi_spellhook"
|
||
#include "prc_sp_func"
|
||
|
||
int DoPower(object oManifester, object oTarget, struct manifestation manif)
|
||
{
|
||
effect eResurrect = EffectResurrection();
|
||
effect eVis = EffectVisualEffect(VFX_IMP_RAISE_DEAD);
|
||
|
||
// Make sure the target is in fact dead
|
||
if(GetIsDead(oTarget))
|
||
{
|
||
// Let the AI know - Special handling
|
||
PRCSignalSpellEvent(oTarget, FALSE, SPELL_RAISE_DEAD, oManifester);
|
||
|
||
// Apply effects
|
||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oTarget));
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eResurrect, oTarget);
|
||
|
||
// Pay the XP cost
|
||
SetXP(oManifester, GetXP(oManifester) - 200);
|
||
|
||
// Do special stuff
|
||
ExecuteScript("prc_pw_raisedead", oManifester);
|
||
if(GetPRCSwitch(PRC_PW_DEATH_TRACKING) && GetIsPC(oTarget))
|
||
SetPersistantLocalInt(oTarget, "persist_dead", FALSE);
|
||
|
||
// [Good] descriptor causes an alignent shift
|
||
//SPGoodShift(oManifester);
|
||
}// end if - Deadness check
|
||
|
||
return TRUE; //Held charge is used if at least 1 touch from twinned power hits
|
||
}
|
||
|
||
void main()
|
||
{
|
||
if(!PsiPrePowerCastCode()) return;
|
||
object oManifester = OBJECT_SELF;
|
||
object oTarget = PRCGetSpellTargetObject();
|
||
struct manifestation manif;
|
||
int nEvent = GetLocalInt(oManifester, PRC_SPELL_EVENT); //use bitwise & to extract flags
|
||
if(!nEvent) //normal cast
|
||
{
|
||
manif =
|
||
EvaluateManifestation(oManifester, oTarget,
|
||
PowerAugmentationProfile(),
|
||
METAPSIONIC_NONE
|
||
);
|
||
|
||
if(manif.bCanManifest)
|
||
{
|
||
if(GetLocalInt(oManifester, PRC_SPELL_HOLD) && oManifester == oTarget)
|
||
{ //holding the charge, manifesting power on self
|
||
SetLocalSpellVariables(oManifester, 1); //change 1 to number of charges
|
||
SetLocalManifestation(oManifester, PRC_POWER_HOLD_MANIFESTATION, manif);
|
||
return;
|
||
}
|
||
DoPower(oManifester, oTarget, manif);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(nEvent & PRC_SPELL_EVENT_ATTACK)
|
||
{
|
||
manif = GetLocalManifestation(oManifester, PRC_POWER_HOLD_MANIFESTATION);
|
||
if(DoPower(oManifester, oTarget, manif))
|
||
DecrementSpellCharges(oManifester);
|
||
}
|
||
}
|
||
} |