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.
		
			
				
	
	
		
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
| 13/07/20 by Stratovarius
 | |
| 
 | |
| Black Labyrinth
 | |
| 
 | |
| Master, Shadowscape
 | |
| Level/School: 9th/Conjuration (Creation)
 | |
| Range: Personal
 | |
| Area: One area
 | |
| Duration: 12 hours/level
 | |
| Saving Throw: Will partial, see text
 | |
| Spell Resistance: No
 | |
| 
 | |
| The air blackens, the shadows of the alleys lengthen, and the wind shrieks as the Shadow and Material Planes collide.
 | |
| 
 | |
| Black labyrinth causes substantial disorientation within the area it affects. Direction and distance become impossible to determine, as the world itself bends and twists.
 | |
| 
 | |
| All attacks have a 50% miss chance.
 | |
| 
 | |
| Area effects with a source or target within the black labyrinth have a 20% chance of improper placement. If this occurs, the spell is centered 1d4 x 5 feet in a random direction from where the caster intended. 
 | |
| 
 | |
| All Search and Spot checks take a -10 penalty.
 | |
| 
 | |
| Any movement, from a 5-foot step to a full run and everything between, occurs in a random direction. A successful Will save negates this particular effect, but that save must be repeated for each round of movement.
 | |
| 
 | |
| Any teleportation effects with a destination inside the black labyrinth deposit their passengers 1d% x 5 feet from the intended destination. A teleport effect cast within the black labyrinth requires a successful Will save; 
 | |
| 
 | |
| When within your own black labyrinth, you are immune to the last two effects (movement and teleportation), but not the others. 
 | |
| */
 | |
| 
 | |
| #include "shd_inc_shdfunc"
 | |
| #include "shd_mysthook"
 | |
| 
 | |
| void DoLabyrinth(object oShadow, float fDur, int nDC, int nShadowcasterLevel, object oArea);
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if(!ShadPreMystCastCode()) return;
 | |
| 
 | |
|     object oShadow      = OBJECT_SELF;
 | |
|     object oTarget      = PRCGetSpellTargetObject();
 | |
|     struct mystery myst = EvaluateMystery(oShadow, oTarget, METASHADOW_EXTEND);
 | |
| 
 | |
|     if(myst.bCanMyst)
 | |
|     {
 | |
|         myst.fDur = HoursToSeconds(12) * myst.nShadowcasterLevel;
 | |
|         if(myst.bExtend) myst.fDur *= 2;   
 | |
|         int nDC = GetShadowcasterDC(oShadow);
 | |
|         
 | |
| 		DoLabyrinth(oShadow, myst.fDur, nDC, myst.nShadowcasterLevel, GetArea(oShadow));           
 | |
|     }
 | |
| }
 | |
| 
 | |
| void DoLabyrinth(object oShadow, float fDur, int nDC, int nShadowcasterLevel, object oArea)  
 | |
| {
 | |
|     SetLocalInt(oArea, "BlackLabyrinthTeleport", nDC);
 | |
|     DelayCommand(5.95, DeleteLocalInt(oArea, "BlackLabyrinthTeleport"));  
 | |
|     object oTarget = GetFirstObjectInArea(oArea);
 | |
|     while (oTarget != OBJECT_INVALID)
 | |
|     {
 | |
|         if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
 | |
|         {
 | |
|         	SetLocalInt(oTarget, "BlackLabyrinth", TRUE);
 | |
|         	DelayCommand(5.95, DeleteLocalInt(oTarget, "BlackLabyrinth"));
 | |
|         	effect eLink = EffectLinkEffects(EffectSkillDecrease(SKILL_SPOT, 10), EffectSkillDecrease(SKILL_SEARCH, 10));
 | |
|         	       eLink = EffectLinkEffects(eLink,  EffectMissChance(50));
 | |
|         	SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0, TRUE, -1, nShadowcasterLevel);
 | |
|         }
 | |
|         // Caster is immune to these effects
 | |
|         if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE && oTarget != oShadow)
 | |
|         {
 | |
|         	if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SPELL)) 
 | |
|         	{
 | |
|         		location lRandom = GenerateNewLocation(oTarget, FeetToMeters(5.0*d10()), IntToFloat(Random(360)), IntToFloat(Random(360))); 
 | |
|         		AssignCommand(oTarget, JumpToLocation(lRandom));
 | |
|         	}	
 | |
|         	SetLocalInt(oTarget, "BlackLabyrinthTeleport", nDC);
 | |
|         	DelayCommand(5.95, DeleteLocalInt(oTarget, "BlackLabyrinthTeleport"));        	
 | |
|         }        
 | |
|         
 | |
|         
 | |
|         oTarget = GetNextObjectInArea(oArea);
 | |
|     }
 | |
|     
 | |
|     if (fDur > 0.0) DelayCommand(6.0, DoLabyrinth(oShadow, fDur-6.0, nDC, nShadowcasterLevel, oArea));
 | |
| }       	 |