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.
126 lines
4.9 KiB
Plaintext
126 lines
4.9 KiB
Plaintext
//:://////////////////////////////////////////////
|
||
//:: Power: Dissolving Weapon
|
||
//:: psi_pow_disswpn
|
||
//:://////////////////////////////////////////////
|
||
/** @file
|
||
|
||
Dissolving Weapon
|
||
|
||
Psychometabolism [Acid]
|
||
Level: Psychic warrior 2
|
||
Manifesting Time: 1 standard action
|
||
Range: Personal
|
||
Target: One held weapon; see text
|
||
Duration: Instantaneous
|
||
Saving Throw: None
|
||
Power Resistance: No
|
||
Power Points: 3
|
||
Metapsionics: Empower, Maximize, Twin
|
||
|
||
Your weapon is corrosive, and sizzling moisture visibly oozes from it.
|
||
You deal 4d6 points of acid damage to any creature or object you touch
|
||
with your successful melee attack. Your weapon is charged with acid until
|
||
you make a successful attack.
|
||
|
||
Augment: For every 2 additional power points you spend, this power’s damage
|
||
increases by 1d6 points.
|
||
|
||
|
||
@author Ornedan
|
||
@date Created - 2005.01.19
|
||
*/
|
||
//:://////////////////////////////////////////////
|
||
//:://////////////////////////////////////////////
|
||
|
||
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_ITEM_ONHIT)
|
||
{
|
||
if (!PsiPrePowerCastCode()){ return; }
|
||
object oManifester = OBJECT_SELF;
|
||
object oWeapon = IPGetTargetedOrEquippedMeleeWeapon();
|
||
|
||
// Validity check
|
||
if(!GetIsObjectValid(oWeapon))
|
||
{
|
||
FloatingTextStrRefOnCreature(83615, oManifester); // Item must be weapon or creature holding a weapon
|
||
return;
|
||
}
|
||
|
||
struct manifestation manif =
|
||
EvaluateManifestation(oManifester, OBJECT_INVALID,
|
||
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
|
||
2, PRC_UNLIMITED_AUGMENTATION
|
||
),
|
||
METAPSIONIC_EMPOWER | METAPSIONIC_MAXIMIZE | METAPSIONIC_TWIN
|
||
);
|
||
|
||
if(manif.bCanManifest)
|
||
{
|
||
int nNumberOfDice = 4 + manif.nTimesAugOptUsed_1;
|
||
int nDieSize = 6;
|
||
int nDamage;
|
||
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_NATURE);
|
||
object oPossessor = GetItemPossessor(oWeapon);
|
||
|
||
/* Apply the VFX to whatever is wielding the target */
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPossessor);
|
||
|
||
// Create the damages array if it doesn't already exist
|
||
if(!array_exists(oWeapon, "PRC_Power_DissolvingWeapon_Damages"))
|
||
array_create(oWeapon, "PRC_Power_DissolvingWeapon_Damages");
|
||
|
||
// Handle Twin Power
|
||
int nRepeats = manif.bTwin ? 2 : 1;
|
||
for(; nRepeats > 0; nRepeats--)
|
||
{
|
||
// Roll the damage here and store it on the weapon
|
||
nDamage = MetaPsionicsDamage(manif, nDieSize, nNumberOfDice, 0, 0, TRUE, FALSE);
|
||
array_set_int(oWeapon, "PRC_Power_DissolvingWeapon_Damages",
|
||
array_get_size(oWeapon, "PRC_Power_DissolvingWeapon_Damages"),
|
||
nDamage
|
||
);
|
||
}
|
||
|
||
// Hook to the item's OnHit
|
||
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "psi_pow_disswpn", TRUE, FALSE);
|
||
|
||
/* Add the onhit spell to the weapon */
|
||
IPSafeAddItemProperty(oWeapon, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||
}// end if - Successfull manifestation
|
||
}// end if - Running manifestation
|
||
else
|
||
{
|
||
object oManifester = OBJECT_SELF;
|
||
object oWeapon = GetSpellCastItem();
|
||
object oTarget = PRCGetSpellTargetObject();
|
||
|
||
int nDamage = array_get_int(oWeapon, "PRC_Power_DissolvingWeapon_Damages",
|
||
array_get_size(oWeapon, "PRC_Power_DissolvingWeapon_Damages") - 1
|
||
);
|
||
nDamage = GetTargetSpecificChangesToDamage(oTarget, oManifester, nDamage, TRUE, TRUE);
|
||
|
||
effect eDamage = EffectDamage(nDamage, DAMAGE_TYPE_ACID);
|
||
effect eLink = EffectLinkEffects(eDamage, EffectVisualEffect(VFX_IMP_ACID_L));
|
||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||
|
||
// Remove the damage value from the array
|
||
int nNewSize = array_get_size(oWeapon, "PRC_Power_DissolvingWeapon_Damages") - 1;
|
||
if(nNewSize > 0)
|
||
array_shrink(oWeapon, "PRC_Power_DissolvingWeapon_Damages", nNewSize);
|
||
else
|
||
{
|
||
array_delete(oWeapon, "PRC_Power_DissolvingWeapon_Damages");
|
||
RemoveEventScript(oWeapon, EVENT_ITEM_ONHIT, "psi_pow_disswpn", TRUE, FALSE);
|
||
}
|
||
}// end else - Running OnHit
|
||
}
|