Added the following spells: Regenerate Light Wounds, Regenerate Moderate Wounds, Regenerate Serious Wounds, Regenerate Critical Wounds, Spirit Worm, Tortoise Shell, Speed of the Wind & Spiritual Weapon. Updated Force Missiles & Chasing Perfection. Updated Acid Fog to be more like pen & paper. Updated release archive.
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //::///////////////////////////////////////////////
 | |
| //:: Acid Fog: Heartbeat
 | |
| //:: NW_S0_AcidFogC.nss
 | |
| //:: Copyright (c) 2001 Bioware Corp.
 | |
| //:://////////////////////////////////////////////
 | |
| /*
 | |
|     All creatures within the AoE take 2d6 acid damage
 | |
|     per round and their movement is halved.
 | |
| 	
 | |
| */
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Created By: Preston Watamaniuk
 | |
| //:: Created On: May 17, 2001
 | |
| //:://////////////////////////////////////////////
 | |
| 
 | |
| 
 | |
| //:: modified by mr_bumpkin Dec 4, 2003
 | |
| 
 | |
| //:: This spell isn't supposed to have a saving throw.
 | |
| //:: modified by Jaysyn: 2024-08-25 14:41:58
 | |
| 
 | |
| #include "prc_inc_spells"
 | |
| #include "prc_add_spell_dc"
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     PRCSetSchool(SPELL_SCHOOL_CONJURATION);
 | |
| 
 | |
|     // When the caster is no longer there, all functions calling
 | |
|     // GetAreaOfEffectCreator will fail. Its better to remove the barrier then
 | |
|     object oCaster = GetAreaOfEffectCreator();
 | |
|     if(!GetIsObjectValid(oCaster))
 | |
|     {
 | |
|         DestroyObject(OBJECT_SELF);
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     //Declare major variables
 | |
|     int nMetaMagic = PRCGetMetaMagicFeat();
 | |
|     int nDamage = d6(2);
 | |
|     effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
 | |
| 
 | |
|     //Enter Metamagic conditions
 | |
|     if ((nMetaMagic & METAMAGIC_MAXIMIZE))
 | |
|         nDamage = 12;//Damage is at max
 | |
|     if ((nMetaMagic & METAMAGIC_EMPOWER))
 | |
|         nDamage = nDamage + (nDamage/2);
 | |
|                 // Acid Sheath adds +1 damage per die to acid descriptor spells
 | |
|                 if (GetHasDescriptor(SPELL_ACID_FOG, DESCRIPTOR_ACID) && GetHasSpellEffect(SPELL_MESTILS_ACID_SHEATH, oCaster))
 | |
|                 	nDamage += 2;         
 | |
| 	nDamage += SpellDamagePerDice(oCaster, 2);
 | |
|     int nPenetr = GetLocalInt(OBJECT_SELF, "X2_AoE_Caster_Level") + SPGetPenetr(oCaster);
 | |
| 
 | |
|     //Start cycling through the AOE Object for viable targets including doors and placable objects.
 | |
|     object oTarget = GetFirstInPersistentObject(OBJECT_SELF);
 | |
|     while(GetIsObjectValid(oTarget))
 | |
|     {
 | |
|         if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster))
 | |
|         {
 | |
|             int nDC = PRCGetSaveDC(oTarget, oCaster);
 | |
|             int nDamageType = GetLocalInt(OBJECT_SELF, "Acid_Fog_Damage");
 | |
|             int nSaveType = ChangedSaveType(nDamageType);
 | |
|             float fDelay = PRCGetRandomDelay(0.4, 1.2);
 | |
| 
 | |
|             //Fire cast spell at event for the affected target
 | |
|             SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_ACID_FOG));
 | |
|             //Spell resistance check
 | |
|             if(!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay))
 | |
|             {
 | |
|                 //Set the damage effect
 | |
|                 effect eDam = PRCEffectDamage(oTarget, nDamage, nDamageType);
 | |
| 
 | |
|                 DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
 | |
|                 DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
 | |
|                 PRCBonusDamage(oTarget);
 | |
|             }
 | |
|         }
 | |
|         //Get next target.
 | |
|         oTarget = GetNextInPersistentObject(OBJECT_SELF);
 | |
|     }
 | |
| 
 | |
|     PRCSetSchool();
 | |
| }
 |