/** @file psi_pow_powres Power Resistance Clairsentience Level: Psion/wilder 5 Manifesting Time: 1 standard action Range: Touch Target: Creature touched Duration: 1 min./level Saving Throw: None Power Resistance: No Power Points: 9 Metapsionics: Extend The creature gains power resistance equal to 12 + your manifester level. @author Stratovarius @date Created: Feb 23, 2004 @date Modified: Jul 3, 2005 */ #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 nSR = 12 + manif.nManifesterLevel; effect eLink = EffectSpellResistanceIncrease(nSR); eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE)); eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE)); effect eVis = EffectVisualEffect(VFX_IMP_MAGIC_PROTECTION); float fDuration = 60.0f * manif.nManifesterLevel; if(manif.bExtend) fDuration *= 2; SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, -1, manif.nManifesterLevel); SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget); 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(), METAPSIONIC_EXTEND ); 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); } } }