forked from Jaysyn/PRC8
Updated Vow of Poverty. Added Sanctify Ki Strike, Holy Strike, Fist of Heavens, Vow of Abstinence, Vow of Chastity & Gift of Faith. (@fenac). Turned off the Taunt & Parry skills. Re-disabled AC & save bonuses from Tumble & Spellcraft. Updated min() & max() to PRCmin() & PRCmax() to not conflict with similarly named NUI adjacent functions. Set Point Blank Shot to 30' per PnP. Added icon for Chosen of Evil. Started work on Hidden Talent. Created Psionics function cheatsheet. Updated release archive.
133 lines
4.7 KiB
Plaintext
133 lines
4.7 KiB
Plaintext
/*
|
|
----------------
|
|
Psychic Reformation
|
|
|
|
psi_pow_psyref
|
|
----------------
|
|
|
|
25/3/05 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Psychic Reformation
|
|
|
|
Telepathy [Mind-Affecting]
|
|
Level: Psion/wilder 4
|
|
Manifesting Time: 1 standard action
|
|
Range: Close (25 ft. + 5 ft./2 levels)
|
|
Target: One creature
|
|
Duration: Instantaneous
|
|
Saving Throw: None
|
|
Power Resistance: No
|
|
Power Points: 7, XP; see text
|
|
Metapsionics: None
|
|
|
|
When this power is manifested, the subject can choose to make again all the
|
|
decisions related to the latest level it has gained.
|
|
|
|
The subject can undo decisions of these sorts that were made at lower
|
|
levels, if both the subject and the manifester agree to pay the necessary XP
|
|
before this power is manifested (see below).
|
|
|
|
XP Cost: This power costs 50 XP to manifest to reformat choices made when
|
|
the character reached her current level. For each additional previous level
|
|
into which the revision reaches, the power costs an additional 50 XP. The
|
|
manifester and subject split all XP costs evenly.
|
|
|
|
Augmentation: For every additional power point you spend, the revision
|
|
reaches one level further. The XP cost is accordingly
|
|
increased, as specified above.
|
|
|
|
|
|
Implementation Note: This power may optionally be nerfed via a switch,
|
|
changing it's behaviour to only allow reselection of
|
|
psionic powers gained in the reformed levels.
|
|
*/
|
|
|
|
#include "psi_inc_psifunc"
|
|
#include "psi_inc_pwresist"
|
|
#include "psi_spellhook"
|
|
#include "prc_alterations"
|
|
|
|
/// Determines how long to wait before restoring the target's XP value
|
|
const float XP_RESTORE_DELAY = 1.0f;
|
|
|
|
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,
|
|
1, PRC_UNLIMITED_AUGMENTATION
|
|
),
|
|
METAPSIONIC_EXTEND
|
|
);
|
|
|
|
if(manif.bCanManifest)
|
|
{
|
|
int nLevels = 1 + manif.nTimesAugOptUsed_1;
|
|
int nOrigXP = GetXP(oTarget);
|
|
int nOrigHD = GetHitDice(oTarget);
|
|
int nTargetHD = PRCMax(1, nOrigHD - nLevels);
|
|
int nXPCost = nLevels *
|
|
(GetPRCSwitch(PRC_PSI_PSYCHIC_REFORMATION_NERF) == 2 ?
|
|
25 : // If nerf is set, the XP cost may also be reduced to 25 per level
|
|
50 // Default is 50 per level
|
|
);
|
|
|
|
// Targeting restrictions. Reforming your opponent mid-battle would be quite nasty, so you only get to do it to allies :P
|
|
if(oTarget == oManifester ||
|
|
GetIsFriend(oTarget)
|
|
)
|
|
{
|
|
// Check whether a behaviour changing switch has been set
|
|
if(!GetPRCSwitch(PRC_PSI_PSYCHIC_REFORMATION_NERF))
|
|
{
|
|
// Level the target down
|
|
SetXP(oTarget, ((nTargetHD * (nTargetHD - 1)) / 2) * 1000);
|
|
|
|
// Schedule the OnLevelDown virtual event to be run right away
|
|
SetLocalInt(oTarget, "PRC_OnLevelDown_OldLevel", nOrigHD);
|
|
DelayCommand(0.0f, ExecuteScript("prc_onleveldown", oTarget));
|
|
}// end if - Default behaviour
|
|
else
|
|
{
|
|
// Nerfed - Only remove powers known tied to the reformed levels
|
|
int i = nOrigHD;
|
|
for(; i > nTargetHD; i--)
|
|
RemovePowersKnownOnLevel(oTarget, i);
|
|
}// end else - Only reform powers
|
|
|
|
// Level reduction is immediate, so restore XP right away to avoid mess with HB detecting level loss
|
|
if(oManifester == oTarget)
|
|
{
|
|
// Targeted self, pay full cost
|
|
SetXP(oTarget, nOrigXP - nXPCost);
|
|
}
|
|
else
|
|
{
|
|
// Targeted other, manifester pays half
|
|
SetXP(oManifester, GetXP(oManifester) - (nXPCost / 2));
|
|
// Target pays other half
|
|
SetXP(oTarget, nOrigXP - (nXPCost / 2));
|
|
}
|
|
}// end if - Targeting restrictions
|
|
}// end if - Successfull manifestation
|
|
}
|