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.
		
			
				
	
	
		
			123 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
|    ----------------
 | |
|    Deathmark
 | |
| 
 | |
|    tob_dw_dthmrk
 | |
|    ----------------
 | |
| 
 | |
|    15/07/07 by Stratovarius
 | |
| */ /** @file
 | |
| 
 | |
|     Deathmark
 | |
| 
 | |
|     Desert Wind (Strike) [Fire]
 | |
|     Level: Swordsage 3
 | |
|     Initiation Action: 1 Standard Action
 | |
|     Range: Melee Attack
 | |
|     Target: One Creature
 | |
|     Area: Variable.
 | |
|     Saving Throw: Reflex half, see text.
 | |
| 
 | |
|     As your weapon strikes your foe, his body convulses as waves of flame run down
 | |
|     your blade into his body. The fire causes him to briefly glow with a brilliant
 | |
|     internal fire before the flames erupt from his body in a terrible explosion.
 | |
|     
 | |
|     When you strike your foe, all creatures in the area (see table below) take 6d6 fire damage,
 | |
|     Reflex save for half. You are immune to this effect.
 | |
|     This maneuver is a supernatural maneuver.
 | |
|     
 | |
|     Size        Radius
 | |
|     Small or Less   5'
 | |
|     Medium      10'
 | |
|     Large       20'
 | |
|     Huge        30'
 | |
|     Gargantuan      40'
 | |
|     Colossal        50'
 | |
| */
 | |
| 
 | |
| #include "tob_inc_move"
 | |
| #include "tob_movehook"
 | |
| 
 | |
| float DoDeathmarkArea(object oTarget)
 | |
| {
 | |
|     float fDist = 0.0;
 | |
|     int nSize = PRCGetCreatureSize(oTarget);
 | |
|     if (nSize == CREATURE_SIZE_SMALL || nSize == CREATURE_SIZE_TINY || nSize == CREATURE_SIZE_FINE || nSize == CREATURE_SIZE_DIMINUTIVE)
 | |
|         fDist = 5.0;
 | |
|     else if (nSize == CREATURE_SIZE_MEDIUM)
 | |
|         fDist = 10.0;
 | |
|     else if (nSize == CREATURE_SIZE_LARGE)
 | |
|         fDist = 20.0;
 | |
|     else if (nSize == CREATURE_SIZE_HUGE)
 | |
|         fDist = 30.0;
 | |
|     else if (nSize == CREATURE_SIZE_GARGANTUAN)
 | |
|         fDist = 40.0;
 | |
|     else if (nSize == CREATURE_SIZE_COLOSSAL)
 | |
|         fDist = 50.0;
 | |
|         
 | |
|     return fDist;
 | |
| }
 | |
| 
 | |
| void Deathmark(object oInitiator, object oTarget)
 | |
| {
 | |
|     if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
 | |
|     {
 | |
|         location lTarget = GetLocation(oTarget);
 | |
|         float fDist = DoDeathmarkArea(oTarget);
 | |
|         //FloatingTextStringOnCreature("Deathmark Area "+FloatToString(fDist), oInitiator);
 | |
|         int nDC = 13 + GetAbilityModifier(ABILITY_WISDOM, oInitiator);
 | |
|         effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
 | |
| 
 | |
|         //Get the first target in the radius around the caster
 | |
|         oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(fDist), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
 | |
|         //FloatingTextStringOnCreature("Deathmark First Target "+GetName(oTarget), oInitiator);
 | |
|         while(GetIsObjectValid(oTarget))
 | |
|         {
 | |
|             //FloatingTextStringOnCreature("Deathmark Target is Valid "+GetName(oTarget), oInitiator);
 | |
|             if(oTarget != oInitiator)
 | |
|             {
 | |
|                 //FloatingTextStringOnCreature("Deathmark Target isn't Initiator", oInitiator);
 | |
|                 SignalEvent(oTarget, EventSpellCastAt(oInitiator, GetSpellId()));
 | |
|                 int nDamage = d6(6);
 | |
|                 if (GetLocalInt(oInitiator, "DesertFire")) nDamage += d6();
 | |
|                 //Run the damage through the various reflex save and evasion feats
 | |
|                 nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
 | |
|                 if(nDamage > 0)
 | |
|                 {
 | |
|                     //FloatingTextStringOnCreature("Deathmark Burning", oInitiator);
 | |
|                     effect eFire = EffectDamage(nDamage, DAMAGE_TYPE_FIRE);
 | |
|                     // Apply effects to the currently selected target. 
 | |
|                     SPApplyEffectToObject(DURATION_TYPE_INSTANT, eFire, oTarget);
 | |
|                     ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
 | |
|                 }
 | |
|             }
 | |
|         //Get the next target in the specified area around the caster
 | |
|         oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fDist), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| void TOBAttack(object oTarget, object oInitiator)
 | |
| {
 | |
|     //FloatingTextStringOnCreature("Deathmark TOBAttack", oInitiator);
 | |
|     effect eNone;
 | |
|     PerformAttack(oTarget, oInitiator, eNone, 0.0, 0, 0, 0, "Deathmark Hit", "Deathmark Miss");
 | |
|     Deathmark(oInitiator, oTarget);
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if (!PreManeuverCastCode())
 | |
|     {
 | |
|         // If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
 | |
|         return;
 | |
|     }
 | |
|     object oInitiator    = OBJECT_SELF;
 | |
|     object oTarget       = PRCGetSpellTargetObject();
 | |
|     struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
 | |
| 
 | |
|     if(move.bCanManeuver)
 | |
|     {
 | |
|         DelayCommand(0.0, TOBAttack(oTarget, oInitiator));
 | |
|     }
 | |
| } |