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.
96 lines
3.3 KiB
Plaintext
96 lines
3.3 KiB
Plaintext
/** @file psi_pow_repdam
|
|
|
|
Psionic Repair Damage
|
|
|
|
Metacreativity
|
|
Level: Shaper 2
|
|
Manifesting Time: 1 standard action
|
|
Range: Touch
|
|
Target: Construct touched
|
|
Duration: Instantaneous
|
|
Saving Throw: None
|
|
Power Resistance: No
|
|
Power Points: 3
|
|
Metapsionics: Empower, Maximize, Twin
|
|
|
|
When laying your hands upon a construct that has at least 1 hit point
|
|
remaining, you reknit its structure to repair damage it has taken. The power
|
|
repairs 3d8 points of damage +1 point per manifester level. Constructs that
|
|
are immune to psionics or magic cannot be repaired in this fashion.
|
|
|
|
Augment: For every 2 additional power points you spend, this power repairs
|
|
an additional 1d8 points of damage.
|
|
|
|
@author Stratovarius
|
|
@date Created: April 9, 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)
|
|
{
|
|
int nNumberOfDice = 3 + manif.nTimesAugOptUsed_1;
|
|
int nDieSize = 8;
|
|
int nHeal;
|
|
effect eHeal, eHealVis = EffectVisualEffect(VFX_IMP_HEALING_L);
|
|
|
|
// Check that the target is, in fact, a construct
|
|
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_CONSTRUCT)
|
|
{
|
|
// Handle Twin Power
|
|
int nRepeats = manif.bTwin ? 2 : 1;
|
|
for(; nRepeats > 0; nRepeats--)
|
|
{
|
|
nHeal = MetaPsionicsDamage(manif, nDieSize, nNumberOfDice, manif.nManifesterLevel, 0, FALSE, FALSE);
|
|
eHeal = EffectHeal(nHeal);
|
|
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHealVis, oTarget);
|
|
}// end for - Twin Power
|
|
}// end if - Target is a construct
|
|
|
|
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(PRC_NO_GENERIC_AUGMENTS,
|
|
2, PRC_UNLIMITED_AUGMENTATION
|
|
),
|
|
METAPSIONIC_EMPOWER | METAPSIONIC_MAXIMIZE | METAPSIONIC_TWIN
|
|
);
|
|
|
|
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);
|
|
}
|
|
}
|
|
} |