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.
149 lines
6.5 KiB
Plaintext
149 lines
6.5 KiB
Plaintext
/*
|
||
----------------
|
||
Prevenom
|
||
|
||
psi_pow_prevnm
|
||
----------------
|
||
|
||
5/11/05 by Stratovarius
|
||
*/ /** @file
|
||
|
||
Prevenom
|
||
|
||
Psychometabolism (Creation)
|
||
Level: Psychic warrior 1
|
||
Manifesting Time: 1 standard action
|
||
Range: Personal
|
||
Target: You
|
||
Duration: 1 min./level or until discharged
|
||
Saving Throw: None and Fortitude negates; see text
|
||
Power Points: 1
|
||
Metapsionics: Extend, Twin
|
||
|
||
If you have a claw attack (either from an actual natural weapon or from an
|
||
effect such as claws of the beast), you can use this power to produce a mild
|
||
venom that coats one of your claws. On your next successful melee attack,
|
||
the venom deals 2 points of Constitution damage. A target struck by the
|
||
poison can make a Fortitude save (DC 10 + 1/2 your manifester level + your
|
||
key ability modifier) to negate the damage.
|
||
|
||
Augment: For every 6 additional power points you spend, this power’s
|
||
Constitution damage increases by 2 points.
|
||
*/
|
||
|
||
|
||
const int ERROR_CODE_5_FIX_AGAIN = 1;
|
||
#include "prc_alterations"
|
||
#include "prc_inc_spells"
|
||
#include "psi_inc_onhit"
|
||
#include "psi_inc_psifunc"
|
||
#include "psi_spellhook"
|
||
|
||
void main()
|
||
{
|
||
// Are we running the manifestation part or the onhit part?
|
||
if(GetRunningEvent() != EVENT_ONHIT)
|
||
{
|
||
if (!PsiPrePowerCastCode()){ return; }
|
||
|
||
object oManifester = OBJECT_SELF;
|
||
object oTarget = PRCGetSpellTargetObject();
|
||
struct manifestation manif =
|
||
EvaluateManifestation(oManifester, oTarget,
|
||
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
|
||
6, PRC_UNLIMITED_AUGMENTATION
|
||
),
|
||
METAPSIONIC_EXTEND | METAPSIONIC_TWIN);
|
||
|
||
if(manif.bCanManifest)
|
||
{
|
||
int nDamage = 2 + (2 * manif.nTimesAugOptUsed_1);
|
||
int nDC = 10
|
||
+ manif.nManifesterLevel / 2
|
||
+ GetAbilityModifier(GetAbilityOfClass(GetManifestingClass(oManifester)), oManifester);
|
||
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_NATURE);
|
||
object oLClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget);
|
||
object oRClaw = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget);
|
||
object oBite = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget);
|
||
float fDuration = 60.0f * manif.nManifesterLevel;
|
||
if(manif.bExtend) fDuration *= 2;
|
||
|
||
// Must have a natural attack
|
||
if(!(GetIsObjectValid(oLClaw) || GetIsObjectValid(oRClaw) || GetIsObjectValid(oBite)))
|
||
{
|
||
// "Target does not posses a natural attack!"
|
||
FloatingTextStrRefOnCreature(16826656, oManifester, FALSE);
|
||
return;
|
||
}
|
||
|
||
/* Apply the VFX to the target */
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||
|
||
// Create the values array if it doesn't already exist
|
||
if(!array_exists(oTarget, "PRC_Power_Prevenom_Values"))
|
||
array_create(oTarget, "PRC_Power_Prevenom_Values");
|
||
|
||
// Handle Twin Power
|
||
int nRepeats = manif.bTwin ? 2 : 1;
|
||
for(; nRepeats > 0; nRepeats--)
|
||
{
|
||
// Store the DC and the damage to be dealt on the creature
|
||
array_set_int(oTarget, "PRC_Power_Prevenom_Values",
|
||
array_get_size(oTarget, "PRC_Power_Prevenom_Values"),
|
||
(nDC << 16) | nDamage
|
||
);
|
||
}
|
||
|
||
// Hook to the weapons' OnHit
|
||
AddEventScript(oTarget, EVENT_ONHIT, "psi_pow_prevnm", TRUE, FALSE);
|
||
|
||
/* Add the onhit spell to the weapon */
|
||
IPSafeAddItemProperty(oLClaw, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||
IPSafeAddItemProperty(oRClaw, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||
IPSafeAddItemProperty(oBite, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||
}// end if - Successfull manifestation
|
||
}// end if - Running manifestation
|
||
else
|
||
{
|
||
object oManifester = OBJECT_SELF;
|
||
object oItem = GetSpellCastItem();
|
||
object oTarget = PRCGetSpellTargetObject();
|
||
|
||
// Make sure the event was triggered by a natural weapon
|
||
if(oItem == GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oManifester) ||
|
||
oItem == GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oManifester) ||
|
||
oItem == GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oManifester)
|
||
)
|
||
{
|
||
int nArraySize = array_get_size(oManifester, "PRC_Power_Prevenom_Values");
|
||
int nValue = array_get_int(oManifester, "PRC_Power_Prevenom_Values", nArraySize - 1);
|
||
int nDamage = nValue & 0x0000FFFF;
|
||
int nDC = (nValue >>> 16 ) & 0x0000FFFF;
|
||
|
||
// Target-specific damage adjustments
|
||
nDamage = GetTargetSpecificChangesToDamage(oTarget, oManifester, nDamage, FALSE, FALSE);
|
||
|
||
if(DEBUG) DoDebug("psi_pow_prevnm: OnHit: Damage = " + IntToString(nDamage) + "; DC = " + IntToString(nDC));
|
||
|
||
// First check for poison immunity, if not, make a fort save versus spells.
|
||
if(!GetIsImmune(oTarget, IMMUNITY_TYPE_POISON) &&
|
||
!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_POISON, oManifester))
|
||
{
|
||
//Apply the poison effect and VFX impact
|
||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget);
|
||
ApplyAbilityDamage(oTarget, ABILITY_CONSTITUTION, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0f);
|
||
}
|
||
|
||
// Remove the damage value from the array
|
||
nArraySize -= 1;
|
||
if(nArraySize > 0)
|
||
array_shrink(oManifester, "PRC_Power_Prevenom_Values", nArraySize);
|
||
else
|
||
{
|
||
array_delete(oManifester, "PRC_Power_Prevenom_Values");
|
||
RemoveEventScript(oManifester, EVENT_ONHIT, "psi_pow_prevnm", TRUE, FALSE);
|
||
}
|
||
}// end if - Triggered by a natural weapon
|
||
}// end else - Running OnHit
|
||
}
|