Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
		
			
				
	
	
		
			141 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*
 | 
						||
   ----------------
 | 
						||
   Disable
 | 
						||
 | 
						||
   psi_pow_disable
 | 
						||
   ----------------
 | 
						||
 | 
						||
   29/10/04 by Stratovarius
 | 
						||
*/ /** @file
 | 
						||
 | 
						||
    Disable
 | 
						||
 | 
						||
    Telepathy (Compulsion) [Mind-Affecting]
 | 
						||
    Level: Psion/wilder 1
 | 
						||
    Manifesting Time: 1 standard action
 | 
						||
    Range: 20 ft.
 | 
						||
    Area: Cone-shaped emanation centered on you
 | 
						||
    Duration: 1 min./level
 | 
						||
    Saving Throw: Will negates
 | 
						||
    Power Resistance: Yes
 | 
						||
    Power Points: 1
 | 
						||
    Metapsionics: Extend, Twin, Widen
 | 
						||
 | 
						||
    You broadcast a mental compulsion that convinces one or more creatures of
 | 
						||
    4 Hit Dice or less that they are disabled. Creatures with the fewest HD are
 | 
						||
    affected first. Among creatures with equal Hit Dice, those who are closest
 | 
						||
    to the power’s point of origin are affected first. Hit Dice that are not
 | 
						||
    sufficient to affect a creature are wasted.
 | 
						||
    Creatures affected by this power believe that they have somehow been brought
 | 
						||
    to the brink of unconsciousness and must act accordingly.
 | 
						||
 | 
						||
    Augment: For every 2 additional power points you spend, this power’s range
 | 
						||
             increases by 5 feet and its save DC increases by 1.
 | 
						||
    In addition, for every additional power point you spend to increase the range and
 | 
						||
    the save DC, this power can affect targets that have Hit Dice equal to 4 + the
 | 
						||
    number of additional points.
 | 
						||
*/
 | 
						||
 | 
						||
#include "psi_inc_psifunc"
 | 
						||
#include "psi_inc_pwresist"
 | 
						||
#include "psi_spellhook"
 | 
						||
#include "prc_inc_spells"
 | 
						||
 | 
						||
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;
 | 
						||
    struct manifestation manif =
 | 
						||
        EvaluateManifestation(oManifester, OBJECT_INVALID,
 | 
						||
                              PowerAugmentationProfile(1,
 | 
						||
                                                       2, PRC_UNLIMITED_AUGMENTATION
 | 
						||
                                                       ),
 | 
						||
                              METAPSIONIC_EXTEND | METAPSIONIC_TWIN | METAPSIONIC_WIDEN
 | 
						||
                              );
 | 
						||
 | 
						||
    if(manif.bCanManifest)
 | 
						||
    {
 | 
						||
        int nDC         = GetManifesterDC(oManifester) + manif.nTimesAugOptUsed_1;
 | 
						||
        int nPen        = GetPsiPenetration(oManifester);
 | 
						||
        int nMaxHD      = 4 + manif.nTimesGenericAugUsed;
 | 
						||
        int nHDLeft     = nMaxHD;
 | 
						||
        int nTargetHD;
 | 
						||
        effect eLink    = EffectSlow();
 | 
						||
               eLink    = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE));
 | 
						||
               eLink    = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE));
 | 
						||
        effect eVis     = EffectVisualEffect(VFX_IMP_DAZED_S);
 | 
						||
        float fWidth    = EvaluateWidenPower(manif, FeetToMeters(20.0f + (5.0f * manif.nTimesAugOptUsed_1)));
 | 
						||
        float fDuration = 60.0f * manif.nManifesterLevel;
 | 
						||
        if(manif.bExtend) fDuration *= 2;
 | 
						||
 | 
						||
        // Determine potential targets
 | 
						||
        location lTarget = PRCGetSpellTargetLocation();
 | 
						||
        object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fWidth, lTarget, TRUE, OBJECT_TYPE_CREATURE);
 | 
						||
        while(GetIsObjectValid(oTarget))
 | 
						||
        {
 | 
						||
             if(oTarget != oManifester                    && // Not the manifester
 | 
						||
                spellsIsTarget(oTarget,                      // Game difficulty adjustment
 | 
						||
                               SPELL_TARGET_STANDARDHOSTILE,
 | 
						||
                               oManifester)
 | 
						||
                )
 | 
						||
            {
 | 
						||
                AddToTargetList(oTarget, oManifester, INSERTION_BIAS_HD, FALSE);
 | 
						||
            }// end if - target is valid for this
 | 
						||
            oTarget = MyNextObjectInShape(SHAPE_SPELLCONE, fWidth, lTarget, TRUE, OBJECT_TYPE_CREATURE);
 | 
						||
        }// end while - target list generation
 | 
						||
 | 
						||
        // Now get targets until out of affectable HD or out of targets
 | 
						||
        oTarget = GetTargetListHead(oManifester);
 | 
						||
        while(nHDLeft > 0 && GetIsObjectValid(oTarget))
 | 
						||
        {
 | 
						||
            nTargetHD = GetHitDice(oTarget);
 | 
						||
            if(!GetIsImmune(oTarget, IMMUNITY_TYPE_MIND_SPELLS) && // Check that the target has a mind to affect
 | 
						||
               nTargetHD <= nMaxHD                              && // It has low enough HD to be affectable at all
 | 
						||
               nTargetHD <= nHDLeft                                // There are enough affectable HD left to affect it
 | 
						||
               )
 | 
						||
            {
 | 
						||
                // Let the AI know
 | 
						||
                PRCSignalSpellEvent(oTarget, TRUE, manif.nSpellID, oManifester);
 | 
						||
 | 
						||
                // Handle Twin Power
 | 
						||
                int nRepeats = manif.bTwin ? 2 : 1;
 | 
						||
                for(; nRepeats > 0; nRepeats--)
 | 
						||
                {
 | 
						||
                    //Check for Power Resistance
 | 
						||
                    if(PRCMyResistPower(oManifester, oTarget, nPen))
 | 
						||
                    {
 | 
						||
                        // Will negates
 | 
						||
                        if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
 | 
						||
                        {
 | 
						||
                            //Apply VFX Impact and slow effect
 | 
						||
                            SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, manif.nSpellID, manif.nManifesterLevel);
 | 
						||
                            SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
 | 
						||
                        }// end if - Failed save
 | 
						||
                    }// end if - SR check
 | 
						||
                }// end for - Twin Power
 | 
						||
 | 
						||
                // Only remove from the HD pool if an attempt was made
 | 
						||
                nHDLeft -= nTargetHD;
 | 
						||
            }// end if - Target validity testing
 | 
						||
 | 
						||
            // Get next target, if any
 | 
						||
            oTarget = GetTargetListHead(oManifester);
 | 
						||
        }// end while - Target loop
 | 
						||
    }// end if - Successfull manifestation
 | 
						||
}
 |