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.
132 lines
4.9 KiB
Plaintext
132 lines
4.9 KiB
Plaintext
/*
|
||
----------------
|
||
Compression
|
||
|
||
psi_pow_compress
|
||
----------------
|
||
|
||
4/12/05 by Stratovarius
|
||
*/ /** @file
|
||
|
||
Compression
|
||
|
||
Psychometabolism
|
||
Level: Psychic warrior 1
|
||
Manifesting Time: 1 standard action
|
||
Range: Personal
|
||
Target: You
|
||
Duration: 1 round/level
|
||
Power Points: 1
|
||
Metapsionics: Extend
|
||
|
||
This power causes instant diminution, halving your height, length, and width
|
||
and dividing your weight by 8. This decrease changes your size category to
|
||
the next smaller one. You gain a +2 size bonus to Dexterity, a -2 size
|
||
penalty to Strength (to a minimum effective Strength score of 1), a +1 size
|
||
bonus on attack rolls, and a +1 size bonus to Armor Class due to your
|
||
reduced size. This power doesn’t change your speed.
|
||
|
||
Multiple effects that reduce size do not stack, which means (among other
|
||
things) that you can’t use a second manifestation of this power to further
|
||
reduce yourself.
|
||
|
||
Augment: You can augment this power in one or more of the following ways.
|
||
1. If you spend 6 additional power points, this power decreases your size by
|
||
two size categories. You gain a +4 size bonus to Dexterity, a -4 size
|
||
penalty to Strength (to a minimum effective Strength score of 1), a +2
|
||
size bonus on attack rolls, and a +2 size bonus to Armor Class due to
|
||
your reduced size.
|
||
2. If you spend 2 additional power points, this power’s duration is 1 minute
|
||
per level rather than 1 round per level.
|
||
*/
|
||
|
||
#include "psi_inc_psifunc"
|
||
#include "psi_inc_pwresist"
|
||
#include "psi_spellhook"
|
||
#include "prc_inc_function"
|
||
|
||
void DispelMonitor(object oManifester, object oTarget, int nSpellID, int nBeatsRemaining);
|
||
|
||
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,
|
||
6, 1,
|
||
2, 1
|
||
),
|
||
METAPSIONIC_EXTEND
|
||
);
|
||
|
||
if(manif.bCanManifest)
|
||
{
|
||
int nCategories = 1 + manif.nTimesAugOptUsed_1;
|
||
effect eLink = EffectAttackIncrease(nCategories);
|
||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_SANCTUARY));
|
||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE));
|
||
eLink = EffectLinkEffects(eLink, EffectAbilityIncrease(ABILITY_DEXTERITY, 2 * nCategories));
|
||
eLink = EffectLinkEffects(eLink, EffectAbilityDecrease(ABILITY_STRENGTH, 2 * nCategories));
|
||
eLink = EffectLinkEffects(eLink, EffectACIncrease(nCategories));
|
||
|
||
float fDuration = (manif.nTimesAugOptUsed_2 == 1 ? 60.0f : 6.0f) * manif.nManifesterLevel;
|
||
if(manif.bExtend) fDuration *= 2;
|
||
|
||
// Fail to do anything if the target is already under the effects of Compression
|
||
if(GetLocalInt(oTarget, "PRC_Power_Compression_SizeReduction"))
|
||
{
|
||
// "Target is already under effect of the Compression power!"
|
||
FloatingTextStrRefOnCreature(16826654, oManifester, FALSE);
|
||
return;
|
||
}
|
||
|
||
// Apply effects
|
||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, manif.nSpellID, manif.nManifesterLevel);
|
||
|
||
// Set local int for PRCGetCreatureSize()
|
||
SetLocalInt(oTarget, "PRC_Power_Compression_SizeReduction", nCategories);
|
||
|
||
// Size has changed, evaluate PrC feats again
|
||
EvalPRCFeats(oTarget);
|
||
|
||
// Start power end monitor HB
|
||
DelayCommand(6.0f, DispelMonitor(oManifester, oTarget, manif.nSpellID, FloatToInt(fDuration) / 6));
|
||
}// end if - Successfull manifestation
|
||
}
|
||
|
||
void DispelMonitor(object oManifester, object oTarget, int nSpellID, int nBeatsRemaining)
|
||
{
|
||
// Has the power ended since the last beat, or does the duration run out now
|
||
if((--nBeatsRemaining == 0) ||
|
||
PRCGetDelayedSpellEffectsExpired(nSpellID, oTarget, oManifester)
|
||
)
|
||
{
|
||
if(DEBUG) DoDebug("psi_pow_compress: Power expired, clearing");
|
||
|
||
// Clear the marker
|
||
DeleteLocalInt(oTarget, "PRC_Power_Compression_SizeReduction");
|
||
|
||
// Size has changed, evaluate PrC feats again
|
||
EvalPRCFeats(oTarget);
|
||
}
|
||
else
|
||
DelayCommand(6.0f, DispelMonitor(oManifester, oTarget, nSpellID, nBeatsRemaining));
|
||
}
|