# 9. Multiplayer Modding

# Getting Starting

This chapter contains all the necessary information for playing and optimizing multiplayer mods.

# How to Play Multiplayer Mods

<p class="callout info">See [Commands (CMD)](https://wiki.eternalmods.com/books/3-command-console/page/commands-cmd) before proceeding.</p>

### How to Play

- How to Install Mods (general guide): [https://wiki.eternalmods.com/books/1-how-to-install-mods/page/how-to-install-mods-doom-eternal](https://wiki.eternalmods.com/books/1-how-to-install-mods/page/how-to-install-mods-doom-eternal "https://wiki.eternalmods.com/books/1-how-to-install-mods/page/how-to-install-mods-doom-eternal")
- Get the latest version of the Eternal Mod Injector.  
    Windows (Steam): [https://gamebanana.com/tools/download/7475](https://gamebanana.com/tools/download/7475 "https://gamebanana.com/tools/download/7475")  
    Linux (Steam): [https://github.com/leveste/EternalBasher/releases](https://github.com/leveste/EternalBasher/releases "https://github.com/leveste/EternalBasher/releases")
- All players should have the same multiplayer-related mods installed (most addons are client-sided and not every player needs to have them installed). If a player has different or extra mods installed, their game may de-sync and crash. Texture, Model, String, &amp; Audio mods should be unaffected. Everything in the "Overrides" folder must be removed if it exists.
- A player (the host) should create a private lobby and invite a friend or two (the clients). The host invite players by selecting the **Social Menu** ( **P** ) and finding their friend or favorite profiles.  
    *Some multiplayer mods only require 2 players, the mod author should specify this.*
- Once all players are ready, the host should execute one of the `<strong>loadDevMenuOption</strong>` commands in the console provided by the mod author. Alternatively, players may ready-up with mods that require 3 players such BATTLEMODE &amp; [**INVASION**](https://www.nexusmods.com/doometernal/mods/1103)**.** Some mods require the host to execute `<strong>net_gameserver_enable 0</strong>` before starting a game.  
    *Press the **Grave Accent** ( **`** ) key to open the console. Copy the **loadDevMenuOption** command and use **CTRL + V** to paste it into the console, then press **ENTER**. All players will now be loaded into the map.*
- Here is an example of a command to load into a multiplayer map: `<strong>loadDevMenuOption devmenuoption/pvp 0 1</strong>`   
    *This command will load the Forsaken map from BATTLEMODE. A mod author can change the index of this command.*

You can learn more about loading into BATTLEMODE maps here: [https://wiki.eternalmods.com/books/3-developer-console/page/load-battlemode-maps](https://wiki.eternalmods.com/books/3-developer-console/page/load-battlemode-maps "https://wiki.eternalmods.com/books/3-developer-console/page/load-battlemode-maps")  
Multiplayer modding guides: [https://wiki.eternalmods.com/books/9-multiplayer-modding](https://wiki.eternalmods.com/books/9-multiplayer-modding "https://wiki.eternalmods.com/books/9-multiplayer-modding")

# Network Issues

### Game Issues

- Players cannot access dossier to see the mini-map or change their runes.
- Take Back rune &amp; Extra Lives do not work.
- Time-affecting runes and weapons will de-sync clients.
- Barrels may not explode properly. This is due to making them Network Replicated and treating them as a loot drop, which prevents idProp2 entities from crashing the game for clients.

### Host Issues

- Non-network replicated actions triggered by the host will not active for clients.
- Player Outlines and Nametags are invisible to the host. Outlines can be visible if they are static (do not disappear/reappear when breaking line of sight).
- Secondary Fire weapon projectile &amp; hitscan attacks are invisible &amp; inaudible to clients. Damage SFX can be added to damage decls for PvP modes so clients can hear the weapon if they are hit by one.

### Client Issues

- Chaingun Energy Shield weapon mod crashes the game.
- Ice Bomb equipment lags the game.
- Health/Armor for Blood crystal upgrades do not work.
- Certain Runes do not work consistently. Notably, time-affecting runes.
- Punchables and Shootables offer no visual feedback.
- [Entity Offsets](https://wiki.eternalmods.com/books/9-multiplayer-modding/page/network-replication) will shift AI closer to the world origin (0, 0, 0) by 0.6%.
- Chainsaw fuel pickups cannot be picked-up after a client has already picked-up 2 of them in the same map. [Fuel pickups can be modified into give ammo triggers to oust this issue.](https://wiki.eternalmods.com/books/9-multiplayer-modding/page/chainsaw-pickups)
- Armored Barons crash the game when they strike a player with their mace attack &amp; their armor does not appear.
- Blood Maykrs will not disable their shield when vulnerable even though they can be damaged and killed during the window.
- Cursed Prowlers can be killed and locked-onto when a client is cursed. [The curse effect can be changed so the host and clients may undergo a similar experience.](https://wiki.eternalmods.com/books/9-multiplayer-modding/page/cursed-prowlers)
- Tyrants will crash the game when they walk. [The walking behavior can be disabled to oust this issue.](https://wiki.eternalmods.com/books/9-multiplayer-modding/page/tyrants)
- Cueballs will not launch themselves when killed and may not explode. [They can immediately explode in place so the host and clients will see the same effect.](https://wiki.eternalmods.com/books/9-multiplayer-modding/page/cueballs)
- Spirits can only be targeted and killed by the host.
- Tentacles cannot be chainsawed.

# Network Replication

### About  


- Most entities have either **networkReplicated = false;** or **networkReplicated = true;** near the top of the entity outside the edit field. They determine how entities are broadcasted to clients, but they often create many visual issues or crashes when set to true.
- For example: a network replicated door obstacle will have a positioning offset that is located at a slightly incorrect location for clients. The effect is greater the farther away the entity is from 0, 0, 0 or the world origin. This applies to every network replicated entity but the effects are gradually more noticeable from further distances.
- Network replicated entities located beyond the coordinates of **x = 800, y = 800, z = 200** will be unplayable for clients.

[![NetworkReplicationOffsets.jpg](https://wiki.eternalmods.com/uploads/images/gallery/2023-08/scaled-1680-/networkreplicationoffsets.jpg)](https://wiki.eternalmods.com/uploads/images/gallery/2023-08/networkreplicationoffsets.jpg)

<p class="callout warning">Entity offsets are roughly 0.6% closer to the coordinates of 0, 0, 0 for clients. The host does not experience this issue.</p>

<p class="callout success">There are ways to work around entity offsets (see [Entities](https://wiki.eternalmods.com/books/9-multiplayer-modding/chapter/entities)). As of the current versions of modded multiplayer, only the AI suffer from entity offsets.  
</p>

### Maps with Non-Noticeable Offsets (xy &lt; 300, z &lt; 100)  


- All 9 BATTLEMODE maps
- Fortress of Doom
- Cultist Base
- Doom Hunter Base  
    *Intro Tram &amp; Boss Stage2 arenas have tolerable offsets*
- Super Gore Nest
- Arc Complex
- Taras Nabad  
    Flooded &amp; Crucible arenas have tolerable offsets
- The Blood Swamps  
    *Left-side arenas have tolerable offsets*
- The Dark Lord  
    *Stage1 &amp; Stage3 arenas have unplayable offsets*

### Maps with Tolerable Offsets (xy &lt; 800, z &lt; 200)

- Hell on Earth *Barge &amp; Citadel areas have unplayable offsets*
- Sentinel Prime
- Nekravol I
- Urdak  
    *Yellow Control Tower has borderline unplayable offsets*
- Final Sin
- The Holt  
    *Possessed Tyrant arena &amp; onward have unplayable offsets*
- Reclaimed Earth  
    *Entire map has borderline unplayable offsets*

### Maps with Unplayable Offsets (xy &gt; 800, z &gt; 200)


- Exultia  
    *Sentinel section has tolerable offsets*
- Mars Core
- Nekravol II
- UAC Atlantica Facility  
    *Intro arena to Red Key arena have tolerable offsets*
- The World Spear  
    *Intro Village section has tolerable offsets*
- Immora

# Useful Commands

### Optimization

- `<strong>restartMapWithLobby</strong>`  
    Can be executed by the host to restart the entire map for all players in the party.
- `<strong>exitShellLobby</strong>`  
    Can be execute by the host to leave the match and retain all players within their party, so long as the clients do not select ACCEPT in the warning menu.
- `<strong>disconnect</strong>`  
    Can be executed by clients to leave the match and stay in the party, so long as the clients do not select ACCEPT in the warning menu.
- `<strong>g_havokHeapLimitMB 200</strong>`  
    Can be executed by any player to increase the havok limit (how much geo can do things simultaneously) which may prevent some crashes.
- `<strong>net_maxRate 100</strong>`  
    Can be executed by any player to increase the network rate which may decrease latency.

### Development  


- `<strong>pvp_skipReadyUp 1</strong>`  
    Can be executed by the host to bypass the "waiting for players" event on map start. Leaving this enabled with other players may create issues for clients.
- `<strong>pvp_skipReadyUp 0</strong>`  
    Can be executed by the host to enable the "waiting for players" event.
- `<strong>ai_faction_overrideEmotion_ai 0</strong>`  
    Can be executed by the host to stop all AI from attacking much like the "notarget" command.
- `<strong>ai_faction_overrideEmotion_ai -1</strong>`  
    Can be executed by the host to enable normal AI aggression towards players and other AI.
- `<strong>warning_disable all<br></br></strong>`Can be executed by any player to disable the barrage of warnings in the console.
- `<strong>warning_enable all</strong>`  
    Can be executed by any player to enable all warnings. Restarting the game will also enable all warnings.

### Auto-Executing Commands on Game Launch

- You can input commands as a new line into the **candidate.cfg** file within the **DOOMEternal\\base** folder to auto-execute them when the game launches. Below is an example of DOOMEternal's installation file path for Windows.  
    `<strong>C:\Program Files (x86)\Steam\steamapps\common\DOOMEternal\base\candidate.cfg</strong>`
- The **candidate.cfg** file can execute other config files with the `<strong>exec NameOfFile.cfg</strong>` command added as a new line.

### See Also

- [Commands (CMD)](https://wiki.eternalmods.com/books/3-command-console/page/commands-cmd)
- [Console Variables (CVAR)](https://wiki.eternalmods.com/books/3-command-console/page/console-variables-cvar)

# Decls

This chapter contains required and recommended changes to decl files.

# Playable Slayers

#### Replace Archvile actorModifier to Slayer

##### gameresources\_patch1\\generated\\decls\\actormodifier\\actormodifier\\pvp\\demon\\archvile.decl

```
{
	edit = {
		displayName = "#str_decl_actormodifier_become_slayer_name_GHOST53519";
		description = "#str_decl_actormodifier_become_slayer_desc_GHOST53520";
		entityDef = "player";
		pvpNormalUpgrades = "slayer/normal_upgrades";
		pvpPowerUpgrades = "slayer/normal_upgrades";
		uiSlot = "SLOT_DEMON";
		uiIcon = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud";
		uiIconAlt = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud_dead";
		uiIconLarge = "art/ui/pvp_playericons/ico_pvp_players_doomguy";
		playableCharacter = "slayer";
		pvpTutorialCvarValue = 4;
	}
}
```

#### Slayer entityDef

##### gameresources\_patch1\\generated\\decls\\entitydef\\player.decl

```
{
	class = "idPlayer";
	networkReplicated = true;
	disableAIPooling = false;
	editorVars {
		rotatable = false;
		showOrientation = false;
		showFixedBox = false;
		skipRenderModelInEditor = false;
		showInRenderMode = false;
		placeable = false;
		color = ( 1, 1, 1, 1 );
		size = ( 0, 0, 0 );
		originOffset = ( 0, 0, 0 );
		material = "";
		translucent = false;
		editorName = "";
		description = "";
	}
	edit = {
		automapPropertiesDecl = "player";
		flags = {
			takedamage = true;
			skipRenderModelReplication = true;
		}
		renderModelInfo = {
			model = "md6def/characters/humans/male/base/doom_marine_3p.md6";
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
			lightRigDecl = "player/doom_marine_3p";
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = {
				x = 1;
				y = 1;
				z = 1;
			}
			numSides = 6;
		}
		validPlayerKillRecipient = true;
		killerNames = {
			num = 1;
			item[0] = "#str_decl_damage_self_inflicted_GHOST81048";
		}
		targetingDecl = "player/default";
		fxDecl = "player/player";
		forcedAdditionalSphereContents = "CONTENTS_AIAWARE";
		actorConstants = {
			perception = {
				eyeOffset = {
					z = 1.63800001;
				}
				crouchedEyeOffset = {
					z = 0.610000014;
				}
			}
			actorSounds = {
				sndFootsteps = "play_md6_editor_footstep";
			}
			footstepEffectTable = "impacteffect/footsteps/player";
			footstepEffectTable_Sprint = "impacteffect/footsteps/player_sprint";
			footstepEffectTable_SlowWalk = "impacteffect/footsteps/player_slowwalk";
			footstepEffectTable_CrouchWalk = "impacteffect/footsteps/player_slowwalk";
			footstepEffectTable_Landing = "impacteffect/landings/player";
			footstepEffectTable_HeavyLanding = "impacteffect/landings/player_heavy";
			wallClimbEffectTable_AttachToWall_Left = "impacteffect/wall climb/wall_climb_attach";
			wallClimbEffectTable_AttachToWall_Right = "impacteffect/wall climb/wall_climb_attach_righthand";
			wallClimbEffectTable_JumpOffWall = "impacteffect/wall climb/wall_climb_jump_off_wall";
			wallClimbEffectTable_ClimbMoving_Left = "impacteffect/wall climb/wall_climb";
			wallClimbEffectTable_ClimbMoving_Right = "impacteffect/wall climb/wall_climb";
			monkeyBarEffectTable_Start = "impacteffect/monkey bar/monkey_bar_on";
			monkeyBarEffectTable_Stop = "impacteffect/monkey bar/monkey_bar_off";
			weaponFolyForImpactList = {
				num = 7;
				item[0] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/chaingun";
					weaponForFoly = "weapon/player/chaingun";
				}
				item[1] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/shotgun";
					weaponForFoly = "weapon/player/shotgun";
				}
				item[2] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/super_shotgun";
					weaponForFoly = "weapon/player/double_barrel";
				}
				item[3] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/plasma";
					weaponForFoly = "weapon/player/plasma_rifle";
				}
				item[4] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/heavy_cannon";
					weaponForFoly = "weapon/player/heavy_cannon";
				}
				item[5] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/rocket_launcher";
					weaponForFoly = "weapon/player/rocket_launcher";
				}
				item[6] = {
					weaponFolyTable = "impacteffect/weapon_foley_player/gauss";
					weaponForFoly = "weapon/player/gauss_rifle";
				}
			}
			footstepEvents = "footstepevents/default";
			waterInteraction = {
				emissionRate = 0.100000001;
			}
		}
		afProperties = {
			articulatedFigure = "human/doom_marine_3p";
		}
		actorEditable = {
			entityDamageComponent = {
				entityDamage = "entitydamage/player";
			}
			radiusDamageJoints = {
				num = 4;
				item[0] = "head_part01_md";
				item[1] = "spine_part04_md";
				item[2] = "leg_lower_rt";
				item[3] = "leg_lower_lf";
			}
		}
		factionName = "player";
		startingInventory = {
			num = 11;
			item[0] = {
				inventoryDecl = "weapon/player/shotgun";
			}
			item[1] = {
				inventoryDecl = "weapon/player/rocket_launcher";
			}
			item[2] = {
				inventoryDecl = "weapon/player/chaingun";
			}
			item[3] = {
				inventoryDecl = "weapon/player/double_barrel";
			}
			item[4] = {
				inventoryDecl = "weapon/player/heavy_cannon";
			}
			item[5] = {
				inventoryDecl = "weapon/player/gauss_rifle";
			}
			item[6] = {
				inventoryDecl = "weapon/player/plasma_rifle";
			}
			item[7] = {
				inventoryDecl = "weapon/player/chainsaw";
			}
			item[8] = {
				inventoryDecl = "abilities/environmentsuit";
			}
			item[9] = {
				inventoryDecl = "abilities/grapplegloves";
			}
			item[10] = {
				inventoryDecl = "jumpboots/base";
			}
		}
		masterWeaponList = {
			num = 9;
			item[0] = "weapon/player/shotgun";
			item[1] = "weapon/player/double_barrel";
			item[2] = "weapon/player/heavy_cannon";
			item[3] = "weapon/player/chaingun";
			item[4] = "weapon/player/plasma_rifle";
			item[5] = "weapon/player/gauss_rifle";
			item[6] = "weapon/player/rocket_launcher";
			item[7] = "weapon/player/bfg";
			item[8] = "weapon/player/chainsaw";
		}
		walkIKDecl = "walkik/human_player";
		inventory = {
			conversionTable = "base";
			autoConvertSimpleItems = true;
			autoConvertComplexItems = true;
		}
		playerAdditiveHandsAnims = {
			additiveCrouch = "additive/crouch";
			additiveUnCrouch = "additive/uncrouch";
		}
		thirdPersonBodyDefault = "player_tp_body_praetor";
		thirdPersonBodyPraetor = "player_tp_body_praetor";
		playableCharacter = "slayer";
		handsModelDefault = "md6def/player/human/base/praetor.md6";
		handsModelPraetor = "md6def/player/human/base/praetor.md6";
		handsModelDefault_D1 = "md6def/player/human/base/praetor_d1.md6";
		handsModelPraetor_D1 = "md6def/player/human/base/praetor_d1.md6";
		handsModelDefaultShowHideMeshInfo = {
			meshesToHide = {
				num = 1;
				item[0] = "body";
			}
			meshesToShow = {
				num = 1;
				item[0] = "arms";
			}
		}
		handsModelPraetorShowHideMeshInfo = {
			meshesToHide = {
				num = 1;
				item[0] = "body";
			}
			meshesToShow = {
				num = 2;
				item[0] = "arm_MESH";
				item[1] = "knife_base_MESH";
			}
		}
		handsModelDefault_D1ShowHideMeshInfo = {
			meshesToHide = {
				num = 1;
				item[0] = "body";
			}
			meshesToShow = {
				num = 1;
				item[0] = "arms";
			}
		}
		handsModelPraetor_D1ShowHideMeshInfo = {
			meshesToHide = {
				num = 1;
				item[0] = "body";
			}
			meshesToShow = {
				num = 2;
				item[0] = "arm_MESH";
				item[1] = "knife_base_MESH";
			}
		}
		thirdPersonModelDefaultShowHideMeshInfo = {
			meshesToHide = {
				num = 1;
				item[0] = "launcher_low_base";
			}
		}
		handsAnimWeb = "animweb/player/fp_hands";
		handsAnimWeb_D1 = "animweb/player/fp_hands_d1";
		handsFX = "player/fp_hands";
		helmetModel = "md6def/player/human/base/helmet.md6";
		normalBFG = "weapon/player/bfg";
		hiddenBFG = "weapon/player/unmaykr";
		weaponAutoSelectPriorityList = {
			num = 8;
			item[0] = "weapon/player/shotgun";
			item[1] = "weapon/player/heavy_cannon";
			item[2] = "weapon/player/plasma_rifle";
			item[3] = "weapon/player/chaingun";
			item[4] = "weapon/player/double_barrel";
			item[5] = "weapon/player/gauss_rifle";
			item[6] = "weapon/player/rocket_launcher";
			item[7] = "weapon/player/chainsaw";
		}
		handsHitReactionData = {
			animWebDecl = "animweb/player/fp_hands_hit_reactions";
			defaultAnimWebSubWeb = "default";
			defaultAnimWebState = "idle";
			reactions = {
				num = 13;
				item[0] = {
					name = "generic_1";
					animWebState = "generic_1";
					descriptor = {
						anglePerturbDegs = 45;
					}
				}
				item[1] = {
					name = "generic_2";
					animWebState = "generic_2";
					descriptor = {
						anglePerturbDegs = 45;
					}
				}
				item[2] = {
					name = "melee_1";
					animWebState = "melee_1";
					descriptor = {
						type = "HANDSHITREACTION_MELEE";
						allowWeaponAlphaOverride = false;
					}
				}
				item[3] = {
					name = "melee_2";
					animWebState = "melee_2";
					descriptor = {
						type = "HANDSHITREACTION_MELEE";
						allowWeaponAlphaOverride = false;
					}
				}
				item[4] = {
					name = "explosive_1";
					animWebState = "explosive_1";
					descriptor = {
						type = "HANDSHITREACTION_EXPLOSIVE";
						anglePerturbDegs = 45;
						strengthTable = "player/handsanimation/hitdirection/explosive";
						allowWeaponAlphaOverride = false;
					}
				}
				item[5] = {
					name = "explosive_2";
					animWebState = "explosive_2";
					descriptor = {
						type = "HANDSHITREACTION_EXPLOSIVE";
						anglePerturbDegs = 45;
						strengthTable = "player/handsanimation/hitdirection/explosive";
						allowWeaponAlphaOverride = false;
					}
				}
				item[6] = {
					name = "fire_1";
					animWebState = "fire_1";
					descriptor = {
						type = "HANDSHITREACTION_FIRE";
						anglePerturbDegs = 45;
						allowWeaponAlphaOverride = false;
					}
				}
				item[7] = {
					name = "fire_2";
					animWebState = "fire_2";
					descriptor = {
						type = "HANDSHITREACTION_FIRE";
						anglePerturbDegs = 45;
						allowWeaponAlphaOverride = false;
					}
				}
				item[8] = {
					name = "pushed";
					animWebState = "pushed";
					impactReaction = "pushed_impact";
					descriptor = {
						type = "HANDSHITREACTION_PUSHED";
						anglePerturbDegs = 45;
						allowWeaponAlphaOverride = false;
						movementGraph = "player/handsanimation/hitdirection/pushed";
					}
				}
				item[9] = {
					name = "pushed_impact";
					animWebState = "pushed_impact";
					descriptor = {
						type = "HANDSHITREACTION_NONE";
						allowWeaponAlphaOverride = false;
					}
				}
				item[10] = {
					name = "lunge";
					animWebState = "pushed";
					impactReaction = "lunge_impact";
					descriptor = {
						type = "HANDSHITREACTION_LUNGE";
						allowWeaponAlphaOverride = false;
						movementGraph = "player/handsanimation/hitdirection/pushed";
					}
				}
				item[11] = {
					name = "lunge_impact";
					animWebState = "pushed_impact";
					descriptor = {
						type = "HANDSHITREACTION_NONE";
						allowWeaponAlphaOverride = false;
					}
				}
				item[12] = {
					name = "shotgunner_knockback";
					descriptor = {
						type = "HANDSHITREACTION_SHOTGUNNER_KNOCKBACK";
						allowWeaponAlphaOverride = false;
						movementGraph = "player/handsanimation/hitdirection/shotgunner_knockback";
					}
				}
			}
		}
		playerBodyReactionData = {
			tpBodyDefaultPath = "player/tp_body/default/idle";
			reactionsBase = {
				num = 34;
				item[0] = {
					name = "blastLarge";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useAlive = true;
					useDead = true;
					throwsPlayer = true;
					dontUseInWater = true;
					enable = false;
					rangeMax = 4.76300001;
					state_start = {
						name = "blastLarge start";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blastLargeFall";
					}
					state_impactGround = {
						name = "blastLarge land";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blastLargeLand";
					}
					state_impactGroundDead = {
						name = "blastLarge landDead";
						tpBodyDestPath = "player/tp_body/blast/blastLargeLandDead";
						tpBodyViaPath = "player/tp_body/blast/blastLargeLandDead_into";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[1] = {
					name = "blastLarge2";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useAlive = true;
					useDead = true;
					throwsPlayer = true;
					dontUseInWater = true;
					enable = false;
					rangeMax = 4.76300001;
					state_start = {
						name = "blastLarge2 start";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blastLargeFall";
					}
					state_impactGround = {
						name = "blastLarge2 land";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blastLargeLand2";
					}
					state_impactGroundDead = {
						name = "blastLarge2 landDead";
						tpBodyDestPath = "player/tp_body/blast/blastLargeLandDead";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[2] = {
					name = "blastSmall";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useAlive = true;
					dontUseInWater = true;
					enable = false;
					rangeMax = 9.52500057;
					state_start = {
						name = "blastSmall start";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blastSmallFall";
					}
					state_impactGround = {
						name = "blastSmall_land";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blastSmallLand";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[3] = {
					name = "blastSmall2";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useAlive = true;
					dontUseInWater = true;
					enable = false;
					rangeMax = 9.52500057;
					state_start = {
						name = "blast";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/blast";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[4] = {
					name = "death_generic";
					type = "PLAYER_BODY_REACTION_DEATH";
					useAlive = true;
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					state_start = {
						name = "death_generic";
						tpBodyDestPath = "player/tp_body/deaths/death_generic";
						tpBodyViaPath = "player/tp_body/deaths/death_generic_into";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
					reactionAlignToDir = false;
				}
				item[5] = {
					name = "deadBlast";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useDead = true;
					throwsPlayer = true;
					dontUseInWater = true;
					enable = false;
					state_start = {
						name = "deadBlastLarge start";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/blast/deadblastLargeFall";
					}
					state_impactGround = {
						name = "deadblastLarge land";
						tpBodyDestPath = "player/tp_body/blast/deadblastlargeland";
						tpBodyViaPath = "player/tp_body/blast/deadblastlargeland_into";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[6] = {
					name = "fallDeath";
					type = "PLAYER_BODY_REACTION_FALL";
					useDead = true;
					offGroundOnly = true;
					dontUseInWater = true;
					state_start = {
						name = "fallDeath";
						tpBodyDestPath = "player/tp_body/fall/fallDeath";
						tpBodyViaPath = "player/tp_body/fall/fallDeath_into";
					}
					reactionNumVariations = 6;
					reactionAlignToDir = false;
				}
				item[7] = {
					name = "poisonGasDeath";
					type = "PLAYER_BODY_REACTION_POISON_GAS";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					enable = false;
					state_start = {
						name = "poisonGasDeath";
						tpBodyDestPath = "player/tp_body/poisonGas/poisonGasDeath";
						tpBodyViaPath = "player/tp_body/poisonGas/poisonGasDeath_into";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
					reactionAlignToDir = false;
				}
				item[8] = {
					name = "damage/stumble";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useAlive = true;
					useDead = true;
					throwsPlayer = true;
					dontUseInWater = true;
					enable = false;
					rangeMin = 4.76300001;
					rangeMax = 9.52500057;
					state_start = {
						name = "stumble start";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/base/damage/stumble";
					}
					state_impactGround = {
						name = "blastLarge land";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/base/damage/stumble_land";
					}
					state_impactGroundDead = {
						name = "stumble death";
						tpBodyDestPath = "player/tp_body/base/damage/knockdown_dead_idle";
						tpBodyViaPath = "player/tp_body/base/damage/knockdown_dead_into";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[9] = {
					name = "damage/knockdown";
					type = "PLAYER_BODY_REACTION_EXPLOSIVE";
					useAlive = true;
					useDead = true;
					throwsPlayer = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					rangeMax = 2.43799996;
					state_start = {
						name = "knockdown start";
						tpBodyDestPath = "player/tp_body/base/default/idle";
						tpBodyViaPath = "player/tp_body/base/damage/knockdown";
					}
					state_impactGround = {
						name = "knockdown land";
						tpBodyDestPath = "player/tp_body/base/default/idle";
						tpBodyViaPath = "player/tp_body/base/damage/knockdown_land";
					}
					state_impactGroundDead = {
						name = "knockdown death";
						tpBodyDestPath = "player/tp_body/base/damage/knockdown_dead_idle";
					}
					reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4";
				}
				item[10] = {
					name = "groundPound";
					type = "PLAYER_BODY_REACTION_GROUND_POUND";
					useAlive = true;
					throwsPlayer = true;
					dontUseInWater = true;
					enable = false;
					state_start = {
						name = "groundPound start";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/groundPound/groundPound";
					}
					reactionAlignToDir = false;
					inhibitView = false;
					pitchConstraintDegs = 89;
					yawConstraintDegs = 45;
				}
				item[11] = {
					name = "heavyLanding";
					type = "PLAYER_BODY_REACTION_HEAVY_LANDING";
					useAlive = true;
					dontUseInWater = true;
					enable = false;
					state_start = {
						name = "heavyLanding";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/land/land_heavy";
					}
					reactionAlignToDir = false;
				}
				item[12] = {
					name = "fireDeath";
					type = "PLAYER_BODY_REACTION_FIRE";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "fireDeath";
						tpBodyDestPath = "player/tp_body/deaths/death_fire";
					}
					reactionAlignToDir = false;
				}
				item[13] = {
					name = "gibDeath";
					type = "PLAYER_BODY_REACTION_GIB";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "blastDeath";
						tpBodyDestPath = "player/tp_body/deaths/death_blast";
					}
					reactionAlignToDir = false;
				}
				item[14] = {
					name = "gibDeathEasterEgg";
					type = "PLAYER_BODY_REACTION_GIB";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					chanceToOccur = 0;
					enable = false;
					state_start = {
						name = "blastDeathEasterEgg";
						tpBodyDestPath = "player/tp_body/deaths/death_blast_easter_egg";
					}
					reactionAlignToDir = false;
				}
				item[15] = {
					name = "death_gib_lite";
					type = "PLAYER_BODY_REACTION_GIB_LITE";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "blastDeathLite";
						tpBodyDestPath = "player/tp_body/deaths/death_gib_lite";
					}
					reactionAlignToDir = false;
				}
				item[16] = {
					name = "gibFalling";
					type = "PLAYER_BODY_REACTION_GIB_FALLING";
					useDead = true;
					offGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "gibFalling";
						tpBodyDestPath = "player/tp_body/deaths/death_air_blast";
					}
					reactionAlignToDir = false;
				}
				item[17] = {
					name = "massiveMeleeHitDeath";
					type = "PLAYER_BODY_REACTION_MASSIVE_MELEE_HIT";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "massiveMeleeHitDeath";
						tpBodyDestPath = "player/tp_body/deaths/death_massive_melee_hit";
					}
					reactionAlignToDir = false;
					clipCameraMovement = false;
				}
				item[18] = {
					name = "sliceVerticalDeath";
					type = "PLAYER_BODY_REACTION_SLICE_VERTICAL";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "sliceVerticalDeath";
						tpBodyDestPath = "player/tp_body/deaths/death_slice_vertical";
					}
					reactionAlignToDir = false;
				}
				item[19] = {
					name = "sliceHorizontalDeath";
					type = "PLAYER_BODY_REACTION_SLICE_HORIZONTAL";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "sliceHorizontalDeath";
						tpBodyDestPath = "player/tp_body/deaths/death_slice_horizontal";
					}
					reactionAlignToDir = false;
				}
				item[20] = {
					name = "death_lava";
					type = "PLAYER_BODY_REACTION_DEATH_LAVA";
					useDead = true;
					enable = false;
					state_start = {
						name = "death_lava";
						tpBodyDestPath = "player/tp_body/deaths/death_lava";
					}
					reactionAlignToDir = false;
				}
				item[21] = {
					name = "death_lava_2";
					type = "PLAYER_BODY_REACTION_DEATH_LAVA";
					useDead = true;
					state_start = {
						name = "death_lava_2";
						tpBodyDestPath = "player/tp_body/deaths/death_lava_2";
					}
					reactionAlignToDir = false;
				}
				item[22] = {
					name = "airDeath";
					type = "PLAYER_BODY_REACTION_DEATH";
					useDead = true;
					offGroundOnly = true;
					needsPhysics = true;
					state_start = {
						name = "airDeath loop";
						tpBodyDestPath = "player/tp_body/deaths/death_air_loop";
						tpBodyViaPath = "player/tp_body/deaths/death_air_into";
					}
					state_impactGround = {
						name = "airDeath impact";
						tpBodyDestPath = "player/tp_body/deaths/death_air_impact";
					}
					reactionAlignToDir = false;
				}
				item[23] = {
					name = "landSlam";
					type = "PLAYER_BODY_REACTION_LAND_SLAM";
					useAlive = true;
					dontUseInWater = true;
					state_start = {
						name = "landSlam";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/land/land_slam";
					}
					reactionAlignToDir = false;
				}
				item[24] = {
					name = "landSlamAlt";
					type = "PLAYER_BODY_REACTION_LAND_SLAM_ALT";
					useAlive = true;
					dontUseInWater = true;
					state_start = {
						name = "landSlamAlt";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/land/land_slam_2019";
					}
					reactionAlignToDir = false;
				}
				item[25] = {
					name = "returnFromHell";
					type = "PLAYER_BODY_REACTION_RETURN_FROM_HELL";
					useAlive = true;
					dontUseInWater = true;
					enable = false;
					state_start = {
						name = "landSlam";
						tpBodyDestPath = "player/tp_body/default/idle";
						tpBodyViaPath = "player/tp_body/return_from_hell/return_from_hell";
					}
					reactionAlignToDir = false;
				}
				item[26] = {
					name = "death_electricity";
					type = "PLAYER_BODY_REACTION_ELECTRICAL";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_electricity";
						tpBodyDestPath = "player/tp_body/deaths/death_electricity";
					}
					reactionAlignToDir = false;
				}
				item[27] = {
					name = "death_bite";
					type = "PLAYER_BODY_REACTION_DEATH_BITE";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					enable = false;
					state_start = {
						name = "death_bite";
						tpBodyDestPath = "player/tp_body/deaths/death_bite";
					}
					reactionAlignToDir = false;
				}
				item[28] = {
					name = "death_acid";
					type = "PLAYER_BODY_REACTION_ACID";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_acid";
						tpBodyDestPath = "player/tp_body/deaths/death_acid";
					}
					reactionAlignToDir = false;
				}
				item[29] = {
					name = "death_decapitation";
					type = "PLAYER_BODY_REACTION_DEATH_DECAPITATION";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_decapitation";
						tpBodyDestPath = "player/tp_body/base/deaths/death_decapitation";
					}
					reactionAlignToDir = false;
				}
				item[30] = {
					name = "death_run_over";
					type = "PLAYER_BODY_REACTION_DEATH_RUN_OVER";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_run_over";
						tpBodyDestPath = "player/tp_body/deaths/death_run_over";
					}
					reactionAlignToDir = false;
				}
				item[31] = {
					name = "death_hole_in_chest";
					type = "PLAYER_BODY_REACTION_DEATH_HOLE_IN_CHEST";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_hole_in_chest";
						tpBodyDestPath = "player/tp_body/deaths/death_hole_in_chest";
					}
					reactionAlignToDir = false;
				}
				item[32] = {
					name = "death_argent_arcs";
					type = "PLAYER_BODY_REACTION_DEATH_ARGENT_ARCS";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_argent_arcs";
						tpBodyDestPath = "player/tp_body/deaths/death_argent_arcs";
					}
					reactionAlignToDir = false;
				}
				item[33] = {
					name = "death_xenon";
					type = "PLAYER_BODY_REACTION_DEATH_XENON";
					useDead = true;
					onGroundOnly = true;
					dontUseInWater = true;
					needsPhysics = true;
					enable = false;
					state_start = {
						name = "death_xenon";
						tpBodyDestPath = "player/tp_body/deaths/death_xenon";
					}
					reactionAlignToDir = false;
				}
			}
		}
		ignoreDirectionalDamageInPVP = true;
		weaponTargetingHighlightDecl = "highlight_outline";
		highlightLOSBoxDecl = "highlight_los_slayer";
		allowsSlayerHighlight = true;
		doom5Melee = {
			doomBladeDecl = "weapon/player/doomblade";
			meleeIntervalMS = 500;
			meleeProjectile_Forward = "projectile/player/melee_d5_forward";
			meleeProjectile_PowerStrike = "projectile/player/melee_d5_power_strike";
			hitAnimRateScale = 0.75;
			damageForwardForMeleeLevel = {
				num = 3;
				item[0] = "damage/player/melee_d5_forward";
				item[1] = "damage/player/melee_d5_forward_2";
				item[2] = "damage/player/melee_d5_forward_3";
			}
			areaEffectDelayMS = 200;
			powerStrikeLevels = {
				num = 1;
				item[0] = {
					chargeLevel = 60;
					chargeLevelSound = "play_power_strike_ready_full";
					damageDecl = "damage/player/melee_d5_power_strike";
					areaEffectDecl = "projectile_ent/player/melee_d5_power_strike_aoe";
				}
			}
			powerStrikeChargeLevelSoundInterval = 500;
		}
		syncMelee = {
			syncGroups = {
				num = 1;
				item[0] = {
					syncInteractions = {
						num = 1;
						item[0] = "syncdeath/playerdeath/imp/front_armrip";
					}
				}
			}
			thirdPersonRemoteInstigatorStatusEffect = "statuseffect/pvp/slayer/presentation_gk_invulnerability";
			useLights = true;
			defaultLightParms = {
				lightDef = "light/sync_point";
				offset = {
					z = 0.952000022;
				}
				fadeInSec = 0.5;
				fadeOutSec = 0.5;
			}
			soundParms = {
				startSound = "play_glory_kill_duck";
				endSound = "play_glory_kill_off";
				startSoundBerserk = "play_berserk_kill_duck";
				endSoundBerserk = "play_berserk_kill_off";
				startSoundCrucible = "play_berserk_kill_duck";
				endSoundCrucible = "play_berserk_kill_off";
				fadeInSec = 0.5;
				fadeOutSec = 0.5;
			}
		}
		minWeaponPoints = 7;
		minPraetorTokens = 6;
		resetCheckpointDeathsWhenShown = false;
		resetLevelDeathsWhenShown = false;
		numDeathsPerCheckpoint = 99999999;
		weaponPointTutorial = "tutorialevent/ingame_tutorial/spend_your_points_wp";
		praetorTokenTutorial = "tutorialevent/ingame_tutorial/spend_your_points_pt";
		weaponAndPraetorTutorial = "tutorialevent/ingame_tutorial/spend_your_points_wp_pt";
		progressionTutorialCodex = "codex/tutorials/progression";
		marauderKilledPlayerTutorial = "tutorialevent/ingame_tutorial/weak_point_marauder_death";
		tyrantCrucibleDef = "cineractive/e2m2_base/tyrant_crucible_hammer/tyrant_crucible_hammer_sync";
		archvileSyncDef = "cineractive/hammer_trailer/archvile_hammer_sync";
		tcamViewShake = "advancedscreenviewshake/trailercam_shake";
		uiResources = {
			dossierSuitBackground = "dossier/suit_background";
			emberVideo = "dossier/ember";
			dossierForegroundVideo = "dossier/foreground";
			mainObjectiveVideo = "video/main_objective";
			eolVideo = "dossier/ashforeground";
			grenadeArrow = "textures/guis/hud/interior_damage/indicator_n";
			grenadeIcon = "textures/guis/hud/interior_damage/d_grenade";
		}
		waterValues = "slayer";
		dashItemDecl = "ability_dash";
		dodgeStats = {
			initialSpeedDuration = 0.0700000003;
			middleDuration = 0.0799999982;
			slowDownDuration = 0.100000001;
			initialVerticalSpeed = 0.0949999988;
			viewRollScalar = 4;
		}
		breadCrumbs = {
			ribbonSplinePath = "spline/path";
			ribbonEffect = "breadcrumb";
			ribbonSamples = 50;
			ribbonInitialHeight = 0.381000012;
		}
		dashboard = {
			radMeter = {
				decay = {
					decayRate = 1;
				}
				radShieldItemDecl = "map_objects/rad_shield_damage_decreases_shield";
				radShieldItemDecl2 = "map_objects/rad_shield_time_decreases_shield";
				radShieldRechargeItemDecl = "map_objects/rad_suit_refill_shield";
				hazardInfoList = {
					num = 4;
					item[0] = {
						declDamage = "damage/hazard/slime";
						noDamageTimeWithRadMS = 500;
						meterDecreasePerDamage = 0.100000001;
					}
					item[1] = {
						declDamage = "damage/hazard/water_toxic";
						noDamageTimeWithRadMS = 500;
						meterDecreasePerDamage = 0.0599999987;
					}
					item[2] = {
						declDamage = "damage/hazard/slime_sac";
						noDamageTimeWithRadMS = 500;
						meterDecreasePerDamage = 0.0500000007;
					}
					item[3] = {
						declDamage = "damage/hazard/poison_bog";
						noDamageTimeWithRadMS = 500;
						meterDecreasePerDamage = 0.0799999982;
					}
				}
				fxDecl = "player/hazmat_shield";
				startHazardSoundDecl = "play_rad_suit_lp";
				stopHazardSoundDecl = "play_rad_suit_off";
				meter25PercentSoundDecl = "play_rad_suit_low_warning_loop";
				uiMeterScale = 100;
			}
			dashMeter = {
				maxValue = 100;
				maxValueSound = "play_dash_recharge";
				playMaxValueSoundOnInit = false;
				pipMetering = {
					maxNumPips = 2;
				}
				deathBonus = 0;
				maxValueSoundRechargedFromEmpty = "play_dash_recharge_double";
			}
			powerStrikeMeter = {
				maxValue = 100;
				maxValueSound = "play_power_strike_ready_full";
				regeneration = {
					regenRate = 10;
				}
				debugBar = {
					x = 0.800000012;
					y = 0.800000012;
					width = 0.100000001;
					height = 0.00749999983;
					frameColor = {
						x = 0;
						y = 0;
					}
					barColor = {
						x = 0.75;
						y = 0.75;
						z = 0.75;
					}
				}
			}
			judgementMeter = {
				maxValue = 3;
				maxValueSound = "play_power_strike_ready_full";
				pipMetering = {
					maxNumPips = 3;
				}
				regeneration = {
					regenRate = 0.699999988;
				}
				debugBar = {
					x = 0.800000012;
					y = 0.75;
					width = 0.150000006;
					height = 0.0199999996;
					frameColor = {
						x = 0;
						y = 0;
						w = 0.75;
					}
					barColor = {
						x = 0.75;
						y = 0.75;
						z = 0.75;
						w = 0.75;
					}
				}
				decayKillPips = 10;
				decayKillDemonCosts = {
					num = 6;
					item[0] = {
						monsterType = "AI_MONSTER_CUEBALL";
						value = 0;
					}
					item[1] = {
						monsterType = "AI_MONSTER_TENTACLE";
						value = 1;
					}
					item[2] = {
						monsterType = "AI_MONSTER_ZOMBIE_TIER_1 AI_MONSTER_ZOMBIE_TIER_3 AI_MONSTER_IMP AI_MONSTER_STONE_IMP AI_MONSTER_GARGOYLE AI_MONSTER_HELL_SOLDIER AI_MONSTER_SHOTGUN_SOLDIER AI_MONSTER_LOSTSOUL AI_MONSTER_MARAUDER_WOLF";
						value = 1;
					}
					item[3] = {
						monsterType = "AI_MONSTER_ZOMBIE_MAYKR AI_MONSTER_PROWLER AI_MONSTER_CURSED_PROWLER AI_MONSTER_CARCASS";
						value = 1;
					}
					item[4] = {
						monsterType = "AI_MONSTER_HELLKNIGHT AI_MONSTER_DREADKNIGHT AI_MONSTER_PINKY AI_MONSTER_SPECTRE AI_MONSTER_CACODEMON AI_MONSTER_PAIN_ELEMENTAL AI_MONSTER_MANCUBUS AI_MONSTER_CYBER_MANCUBUS AI_MONSTER_ARACHNOTRON AI_MONSTER_REVENANT AI_MONSTER_WHIPLASH AI_MONSTER_BLOOD_ANGEL";
						value = 1;
					}
					item[5] = {
						monsterType = "AI_MONSTER_DOOM_HUNTER AI_MONSTER_MARAUDER AI_MONSTER_BARON AI_MONSTER_TYRANT AI_MONSTER_ARCHVILE";
						value = 1;
					}
				}
				useDecayKillDemonCosts = true;
				regenRequiresInactive = true;
			}
			oxygenMeter = {
				regeneration = {
					regenRate = 2;
				}
				oxygenSuitItemDecl = "map_objects/dive_suit_damage_decreases_oxygen";
				oxygenSuitRechargeItemDecl = "map_objects/dive_suit_refill_oxygen";
				hazardInfoList = {
					num = 4;
					item[0] = {
						declDamage = "damage/hazard/water_deep";
						noDamageTimeWithSuitMS = 600;
						meterDecreasePerDamage = 0.0500000007;
					}
					item[1] = {
						declDamage = "damage/hazard/water_deep_increased";
						noDamageTimeWithSuitMS = 500;
						meterDecreasePerDamage = 0.100000001;
					}
					item[2] = {
						declDamage = "damage/hazard/water_toxic";
						noDamageTimeWithSuitMS = 500;
						meterDecreasePerDamage = 0.0500000007;
					}
					item[3] = {
						declDamage = "damage/hazard/water_toxic_increased";
						noDamageTimeWithSuitMS = 500;
						meterDecreasePerDamage = 0.0500000007;
					}
				}
				fxDecl = "player/hazmat_shield";
				meter25PercentSoundDecl = "play_rad_suit_low_warning_loop";
				uiMeterScale = 100;
				oxygenRegenDelay = {
					value = 2;
				}
			}
			notificationManager = {
				notificationDefs = {
					num = 88;
					item[0] = "hud/codex";
					item[1] = "hud/keycard";
					item[2] = "hud/objective_update";
					item[3] = "hud/objective_complete";
					item[4] = "hud/mod_acquired";
					item[5] = "hud/rune_acquired";
					item[6] = "hud/praetor_acquired";
					item[7] = "hud/weapon_point";
					item[8] = "hud/collectible_acquired";
					item[9] = "hud/argentupgrade_acquired";
					item[10] = "hud/callouts/generic_callout";
					item[11] = "hud/callouts/round_timer_callout";
					item[12] = "hud/callouts/ally_used_card";
					item[13] = "hud/callouts/enemy_used_card";
					item[14] = "hud/callouts/match_defeat";
					item[15] = "hud/callouts/match_victory";
					item[17] = "hud/callouts/round_start";
					item[18] = "hud/weapon_broken";
					item[19] = "hud/invasion/incoming_invader";
					item[20] = "hud/fast_travel";
					item[21] = "hud/sentinel_armor_activated";
					item[22] = "hud/sentinel_armor_deactivated";
					item[23] = "hud/extra_life_activated";
					item[24] = "hud/extra_life_acquired";
					item[25] = "hud/secret_found";
					item[26] = "hud/combat_point";
					item[27] = "hud/bounty_complete";
					item[28] = "hud/keycard";
					item[29] = "hud/slayer_key";
					item[30] = "hud/slayer_gate";
					item[31] = "hud/mission_challenge_update";
					item[32] = "hud/mission_challenge_complete";
					item[33] = "hud/slayer_encounter";
					item[34] = "hud/weapon_mastery_challenge_update";
					item[35] = "hud/sentinel_battery_acquired";
					item[36] = "hud/slayer_battery";
					item[37] = "hud/automap";
					item[38] = "hud/event/mission_complete";
					item[39] = "hud/event/boss_complete";
					item[40] = "hud/event/invasion_complete";
					item[41] = "hud/event/master_level_complete";
					item[42] = "hud/event/pvp_match_complete";
					item[43] = "hud/rune_upgrade_token_acquired";
					item[44] = "hud/bounty_spawned";
					item[45] = "hud/secret_hint";
					item[46] = "hud/checkpoint";
					item[47] = "hud/weapon_mastery";
					item[48] = "hud/hint";
					item[49] = "hud/inventory_acquired";
					item[50] = "hud/rad_suit_acquired";
					item[51] = "hud/equipment_pickup_acquired";
					item[52] = "hud/objective_show_last";
					item[53] = "hud/milestone_complete";
					item[54] = "hud/season_level_up";
					item[55] = "hud/slayer_gate_e3";
					item[56] = "hud/weapon_points";
					item[57] = "hud/level_up";
					item[58] = "hud/secret_encounter_found";
					item[59] = "hud/milestone_complete_silent";
					item[60] = "hud/upgrade_reminder";
					item[61] = "hud/secret_encounter_failed";
					item[62] = "hud/secret_encounter_complete";
					item[63] = "hud/weapon_mastery_challenge_complete";
					item[64] = "hud/upgrade_reminder_praetor";
					item[65] = "hud/objective_pinned";
					item[66] = "hud/mission_challenge_intro";
					item[67] = "hud/gold_boss_start";
					item[68] = "hud/gold_boss_defeated";
					item[69] = "hud/extra_life_encounter_complete";
					item[70] = "hud/extra_life_encounter_failed";
					item[71] = "hud/extra_life_encounter_found";
					item[72] = "hud/master_level_start";
					item[73] = "hud/slayer_encounter_no_points";
					item[74] = "hud/extra_lifed_maxed";
					item[75] = "hud/extra_life_acquired_2";
					item[76] = "hud/extra_life_acquired_3";
					item[77] = "hud/dive_suit_acquired";
					item[78] = "hud/secret_encounter_dlc_complete";
					item[79] = "hud/secret_encounter_dlc_complete_skin_progress";
					item[80] = "hud/secret_encounter_dlc_complete_skin_unlocked";
					item[81] = "hud/support_rune_acquired";
					item[82] = "hud/player_cursed";
					item[83] = "hud/horde/timed_bounty_start";
					item[84] = "hud/horde/timed_bounty_completed";
					item[85] = "hud/horde/timed_bounty_failed";
					item[86] = "hud/horde/state_share_win";
					item[87] = "hud/horde/state_share_lose";
				}
			}
			weaponManager = {
				masterAllWeapons = "campaign/master_all_weapons";
				requiredMasteredWeapons = {
					num = 8;
					item[0] = "campaign/master_ballista";
					item[1] = "campaign/master_chaingun";
					item[2] = "campaign/master_combat_shotgun";
					item[3] = "campaign/master_heavy_cannon";
					item[4] = "campaign/master_plasma_rifle";
					item[5] = "campaign/master_rocket_launcher";
					item[6] = "campaign/master_super_shotgun";
				}
				dossierOrderWeaponList = {
					num = 9;
					item[0] = "weapon/player/shotgun";
					item[1] = "weapon/player/heavy_cannon";
					item[2] = "weapon/player/plasma_rifle";
					item[3] = "weapon/player/rocket_launcher";
					item[4] = "weapon/player/double_barrel";
					item[5] = "weapon/player/gauss_rifle";
					item[6] = "weapon/player/chaingun";
					item[7] = "weapon/player/bfg";
					item[8] = "weapon/player/unmaykr";
				}
			}
			runeManager = {
				masterRuneList = {
					num = 9;
					item[0] = "perk/player/runes/glory_kill_speed";
					item[1] = "perk/player/runes/glory_kill_dash";
					item[2] = "perk/player/runes/speed_boost_on_glory_kill";
					item[3] = "perk/player/runes/double_jump_air_control";
					item[4] = "perk/player/runes/modify_enemy_stagger_duration";
					item[5] = "perk/player/runes/activate_focus_on_death_blow";
					item[6] = "perk/player/runes/target_strike";
					item[7] = "perk/player/runes/decrease_equipment_recharge";
					item[8] = "perk/player/runes/blood_punch_loot_on_damage";
				}
				runePerkGroup = "perkgroups/runes";
				supportRunePerkGroup = "perkgroups/support_runes";
				runeSlotReq = {
					ptr = {
						ptr[0] = 1;
						ptr[1] = 2;
						ptr[2] = 3;
					}
				}
			}
			suitManager = {
				masterSuitGroup = "perkgroups/suit";
				fundamentals = {
					display = "#str_praetor_fundamentals";
					description = "#str_praetor_fundamentals_desc";
					iconMaterial = "art/ui/dossier/icons/preator_suit/category/fundamentals";
					suitUpgrades = {
						num = 4;
						item[0] = "perk/player/suit/fundamentals/ledge_grab_speed";
						item[1] = "perk/player/suit/fundamentals/weapon_change_speed";
						item[2] = "perk/player/suit/dash/dash_regen_delay";
						item[3] = "perk/player/suit/dash/dash_gk_restore_dash";
					}
				}
				extermination = {
					index = 1;
					display = "#str_praetor_extermination";
					description = "#str_praetor_extermination_desc";
					iconMaterial = "art/ui/dossier/icons/preator_suit/category/extermination";
					suitUpgrades = {
						num = 4;
						item[0] = "perk/player/equipment/frag_reduce_cooldown";
						item[1] = "perk/player/equipment/frag_concussive_blast";
						item[2] = "perk/player/equipment/frag_max_capacity";
						item[3] = "perk/player/equipment/frag_cluster_bombs";
					}
				}
				selfPreservation = {
					index = 2;
					display = "#str_praetor_self_preservation";
					description = "#str_praetor_self_preservation_desc";
					iconMaterial = "art/ui/dossier/icons/preator_suit/category/self_preservation";
					suitUpgrades = {
						num = 4;
						item[0] = "perk/player/suit/self_preservation/reduce_hazard_damage";
						item[1] = "perk/player/suit/self_preservation/reduce_self_weapon_damage";
						item[2] = "perk/player/suit/extermination/barrels_respawn";
						item[3] = "perk/player/suit/extermination/barrels_drop_ammo";
					}
				}
				powerups = {
					index = 3;
					display = "#str_praetor_powerups";
					description = "#str_praetor_powerups_desc";
					iconMaterial = "art/ui/dossier/icons/preator_suit/category/powerups";
					suitUpgrades = {
						num = 4;
						item[0] = "perk/player/equipment/ice_reduce_cooldown";
						item[1] = "perk/player/equipment/ice_extend_duration";
						item[2] = "perk/player/equipment/ice_health_drops";
						item[3] = "perk/player/equipment/ice_melee_shatter";
					}
				}
				exploration = {
					index = 4;
					display = "#str_praetor_exploration";
					description = "#str_praetor_exploration_desc";
					iconMaterial = "art/ui/dossier/icons/preator_suit/category/navigation";
					suitUpgrades = {
						num = 4;
						item[0] = "perk/player/suit/exploration/automap_shows_map_station";
						item[1] = "perk/player/suit/exploration/automap_shows_progression_items";
						item[2] = "perk/player/suit/exploration/automap_increased_fog_radius";
						item[3] = "perk/player/suit/exploration/dossier_shows_progression_items";
					}
				}
				dash = {
					index = 5;
					display = "#str_praetor_dash";
					description = "#str_praetor_dash_desc";
					iconMaterial = "art/ui/dossier/icons/preator_suit/category/dash";
					suitUpgrades = {
						num = 4;
						item[0] = "perk/player/suit/self_preservation/reduce_hazard_damage";
						item[1] = "perk/player/suit/self_preservation/reduce_self_weapon_damage";
						item[2] = "perk/player/suit/extermination/barrels_respawn";
						item[3] = "perk/player/suit/extermination/barrels_drop_ammo";
					}
				}
				argentCellPerkGroup = "perkgroups/argent_cell";
				suitPerkGroup = "perkgroups/suit";
				cheatcode = "CHEAT_CODE_TYPE_QUAKECON_MODE";
				allAcqTutorial = "tutorialevent/ingame_tutorial/quakecon_mode";
			}
			unlockableManager = {
				missionChallenges = "missionchallenge/main";
				milestones = "milestonelist/main";
			}
			statManager = {
				explorationHintOptions = {
					num = 3;
					item[0] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_CHALLENGES_COMPLETED";
								value = 0;
								operation = "RULE_OPERATION_EQUALS";
							}
						}
						resultDataDecl = "hint/gameplay/mission_challenge";
					}
					item[1] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_SECRETS_FOUND";
								secondStat = "STAT_SECRETS";
								secondStatDuration = "DUR_LEVEL";
								value = 50;
								operation = "RULE_OPERATION_LESS_THAN_PERCENTAGE";
							}
						}
						bonusRules = {
							num = 1;
							item[0] = {
								stat = "STAT_SECRETS_FOUND";
								secondStat = "STAT_SECRETS";
								secondStatDuration = "DUR_LEVEL";
								value = 25;
								operation = "RULE_OPERATION_LESS_THAN_PERCENTAGE";
							}
						}
						resultDataDecl = "hint/exploration/secrets";
					}
					item[2] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_SLAYER_GATE_USED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_EQUALS";
							}
						}
						resultDataDecl = "hint/exploration/slayer_gate";
					}
				}
				combatHintOptions = {
					num = 25;
					item[0] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_REVENANT_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/revenant";
					}
					item[1] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_HELL_MARINE_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/soldier_blaster";
					}
					item[2] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_PINKY_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/pinky";
					}
					item[3] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_BARON_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/baron";
					}
					item[4] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_CACODEMON_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/cacodemon";
					}
					item[5] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_MANCUBUS_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/mancubus_fire";
					}
					item[6] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_LOST_SOUL_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/lost_soul";
					}
					item[7] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_HELL_SHOTGUNNER_KILLED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/soldier_shield";
					}
					item[8] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_SHOTGUN_DAMAGE";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/shotgun";
					}
					item[9] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_DBL_SHOTGUN_DAMAGE";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/double_barrel";
					}
					item[10] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_ASS_RIFLE_DAMAGE";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/heavy_cannon";
					}
					item[11] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_PLASM_RIFLE_DAMAGE";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/plasma_rifle";
					}
					item[12] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_ROCKET_LAUNCHER_KILLS";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/rocket_launcher";
					}
					item[13] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_CHAINGUN_KILLS";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/chaingun";
					}
					item[14] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_GAUSS_KILLS";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/gauss_rifle";
					}
					item[15] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_BFG_KILLS";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/bfg";
					}
					item[16] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_WEAPON_CHAINSAW_KILLS";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/chainsaw";
					}
					item[17] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_SHOTGUN_FULL_AUTO_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/shotgun_full_auto";
					}
					item[18] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_SHOTGUN_STICKY_BOMB_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/shotgun_pop_rockets";
					}
					item[19] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_HAR_SCOPE_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/heavy_cannon_bolt_action";
					}
					item[20] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_HAR_MICROMISSILE_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/heavy_cannon_burst_detonate";
					}
					item[21] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_CHAINGUN_TURRET_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/chaingun_turret";
					}
					item[22] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_PLASMA_HEATWAVE_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/plasma_rifle_aoe";
					}
					item[23] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_ROCKET_LAUNCHER_DETONATE_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/rocket_launcher_detonate";
					}
					item[24] = {
						requiredRules = {
							num = 1;
							item[0] = {
								stat = "STAT_ROCKET_LAUNCHER_LOCKON_EARNED";
								statDuration = "DUR_GAME";
								value = 0;
								operation = "RULE_OPERATION_GREATER_THAN_VALUE";
							}
						}
						resultDataDecl = "hint/combat/rocket_launcher_lock_mod";
					}
				}
			}
			collectibleManager = {
				collectibleGroupUIData = "collectiblecategorydata";
			}
			uiWalkthroughManager = {
				walkthroughTutorials = {
					praetorSuitTutorial = "uiwalkthrough_praetorsuit";
					modBotTutorial = "uiwalkthrough_modbot";
					argentCellTutorial = "uiwalkthrough_argentcell";
					runeTutorial = "uiwalkthrough_runes";
					runeTutorialInteractState = "used_rune";
					supportRuneTutorial = "uiwalkthrough_supportrunes";
				}
			}
			soundPackManager = {
				soundPacks = {
					num = 1;
					item[0] = "classic_doomguy_sounds";
				}
			}
			scoreManager = {
				rubric = "horde";
			}
			violenceKillEvents = {
				num = 18;
				item[0] = "violenceevent/weapon_mastery/shotgun/full_auto_kill_pinky";
				item[1] = "violenceevent/weapon_mastery/rocket_launcher/lock_on_kill_prowler";
				item[2] = "violenceevent/weapon_mastery/heavy_cannon/piercing_bolt_headshot";
				item[3] = "violenceevent/weapon_mastery/ballista/arbalest_kill_cacodemons";
				item[4] = "violenceevent/weapon_mastery/ballista/destroyer_kill_n_in_one_shot";
				item[5] = "violenceevent/weapon_mastery/chaingun/mobile_turret_kill_n_in_one_deployment";
				item[6] = "violenceevent/weapon_mastery/plasma_rifle/heat_blast_kill_n_in_one_shot";
				item[7] = "violenceevent/mission_challenge/bfg_kill_doom_hunter";
				item[8] = "violenceevent/mission_challenge/chapel_of_ghouls";
				item[9] = "violenceevent/mission_challenge/balls_to_the_wall";
				item[10] = "violenceevent/mission_challenge/master_of_puppets";
				item[11] = "violenceevent/weapon_mastery/plasma_rifle/microwave_kill_n_in_one_shot";
				item[12] = "violenceevent/mission_challenge/bonded_by_blood";
				item[13] = "violenceevent/mission_challenge/external_combustion";
				item[14] = "violenceevent/mission_challenge/hammer_smashed_face";
				item[15] = "violenceevent/mission_challenge/kill_n_demons_with_one_frag";
				item[16] = "violenceevent/mission_challenge/angel_of_death";
				item[17] = "violenceevent/pvp/timeout";
			}
			violenceHitEvents = {
				num = 8;
				item[0] = "violenceevent/weapon_mastery/heavy_cannon/micro_missle_kill_n_demons";
				item[1] = "violenceevent/mission_challenge/through_the_fire_and_flames";
				item[2] = "violenceevent/dash_into_pinky";
				item[3] = "violenceevent/pvp/fire_starter";
				item[4] = "violenceevent/pvp/ignition";
				item[5] = "violenceevent/pvp/wolf_master";
				item[6] = "violenceevent/pvp/dodge_this";
				item[7] = "violenceevent/pvp/punch_drunk";
			}
		}
		playerProps = "player/default";
		playerMechanicLedgeGrab = {
			animAliases = {
				ledgePullUp = "ledgeGrab/ledgePullUp";
				ledgePullUpMantle = "ledgeGrab/ledgePullUpMantle";
				ledgePullUpRounded = "ledgeGrab/ledgePullUpRounded";
				ledgePullUpMantleRounded = "ledgeGrab/ledgePullUpMantleRounded";
				ledgePullUpAngled = "ledgeGrab/ledgePullUpAngled";
				ledgePullUpMantleAngled = "ledgeGrab/ledgePullUpMantleAngled";
				ledgeClimbUp = "ledgeGrab/ledgeClimbUp";
				ledgeClimbUpMantle = "ledgeGrab/ledgeClimbUpMantle";
				railingPullUp = "ledgeGrab/railingPullUp";
				railingPullUpMantle = "ledgeGrab/railingPullUpMantle";
			}
			thirdPersonAnimIndex = {
				ledgePullUpMantle = 1;
				ledgePullUpMantleRounded = 1;
				ledgePullUpMantleAngled = 1;
				ledgeClimbUp = 4;
				ledgeClimbUpMantle = 5;
				railingPullUp = 2;
				railingPullUpMantle = 3;
			}
		}
		playerMechanicWallGrab = {
			initiateMaxAngle = 115;
			maxDeltaYaw = 115;
			constrainedViewAnglesRate = 250;
			speedNormal = 12.3820009;
			speedSprint = 12.3820009;
			speedDismountPerp = 5.71500015;
			speedDismountUp = 5.90500021;
			speedDismountFwd = 9.52500057;
			sound_mount = "player/foley/wallgrab/player_foley_wallgrab_mount";
			sound_move = "player/foley/wallgrab/player_foley_wallgrab_move";
			sound_dismount = "player/foley/wallgrab/player_foley_wallgrab_dismount";
		}
		playerMechanicWallClimb = {
			anims = {
				climb_up_cycle_right = "wall_climb/climb_up_cycle_right";
				climb_up_cycle_left = "wall_climb/climb_up_cycle_left";
				climb_down_cycle_right = "wall_climb/climb_down_cycle_right";
				climb_down_cycle_left = "wall_climb/climb_down_cycle_left";
				climb_right_cycle = "wall_climb/climb_right_cycle";
				climb_left_cycle = "wall_climb/climb_left_cycle";
				climb_into_up_right = "wall_climb/climb_up_into_right";
				climb_into_up_left = "wall_climb/climb_up_into_left";
				climb_into_down_right = "wall_climb/climb_down_into_right";
				climb_into_down_left = "wall_climb/climb_down_into_left";
				climb_into_right = "wall_climb/climb_right_into";
				climb_into_left = "wall_climb/climb_left_into";
				climb_out_up_right = "wall_climb/climb_up_out_right";
				climb_out_up_left = "wall_climb/climb_up_out_left";
				climb_out_down_right = "wall_climb/climb_down_out_right";
				climb_out_down_left = "wall_climb/climb_down_out_left";
				climb_out_right = "wall_climb/climb_right_out";
				climb_out_left = "wall_climb/climb_left_out";
				climb_out_right_mid = "wall_climb/climb_left_out_mid";
				climb_out_left_mid = "wall_climb/climb_right_out_mid";
				idle = "wall_climb/idle";
				to_pointing = "wall_climb/climb_to_pointing";
				from_pointing = "wall_climb/climb_from_pointing";
				mount_air = "wall_climb/mount_air";
				mount_ground = "wall_climb/mount_ground";
				look_left = "wall_climb/look_left";
				look_left_up_45 = "wall_climb/look_left_up_45";
				look_left_up_90 = "wall_climb/look_left_up_90";
				look_right = "wall_climb/look_right";
				look_right_up_45 = "wall_climb/look_right_up_45";
				look_right_up_90 = "wall_climb/look_right_up_90";
				look_right_idle = "wall_climb/look_right_idle";
				look_left_idle = "wall_climb/look_left_idle";
			}
			globalTraceDistance = 10;
			viewPitchTable = "wall_climb_view_pitch";
			verticalMoveTable = "wall_climb_slowmove";
			horizontalMoveTable = "wall_climb_horizontalmove";
			attachToWallSoundDecl = "play_climb_hit";
			jumpOffWallSoundDecl = "play_climb_off";
			removeHandFromWallSoundDecl = "play_climb_hand";
			attachHandToWallSoundDecl = "play_climb_hand_wall";
			distanceToWallToActivate = 7.5;
			startMoveDelaySec = 0;
			slowMoveDelayBetweenSec = 0;
			initialMovementDelaySec = 0.300000012;
			maxDeltaYawViewAngle = 220;
			goalSpeedVerticalAccelRate = 3;
			goalSpeedHorizontalAccelRate = 5;
			goalSpeedVerticalJumpAccelRate = 5;
			goalSpeedHorizontalJumpAccelRate = 5;
			goalSpeedVerticalDecelRate = 5;
			goalSpeedHorizontalDecelRate = 5;
			jumpToWallSpeed = 40;
			overdriveDecl = "statuseffect/overdrive";
			wallClimbText = "#str_climb_wall";
		}
		playerMechanicGorillaBarJump = {
			swingAnimation = "monkeyBar/grab";
			maxLookAngleFromBar = 90;
			screenShakeDecl = "advancedscreenviewshake/monkey_bar";
		}
		playerMechanicInteract = {
			animData = {
				interactAnimDatas = {
					num = 3;
					item[0] = {
						type = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_GENERIC";
					}
					item[1] = {
						type = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_SENTINEL_CRYSTAL";
						animIndex = 1;
					}
					item[2] = {
						type = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_BUTTON";
						animIndex = 2;
						outroAnimIndex = 1;
					}
				}
			}
			statusEffect = "statuseffect/invasion/slayer/interact_invulnerability";
		}
		playerAbilityFuelRate = 3;
		playerHealth = {
			components = {
				components[0] = {
					regenInterval = {
						value = 0.0299999993;
					}
					regenDelay = {
						value = 12;
					}
				}
				components[1] = {
					max = {
						defaultValue = 50;
					}
					drainLimit = 50;
					starting = {
						defaultValue = 0;
					}
					regenInterval = {
						value = 0.0299999993;
					}
					regenDelay = {
						value = 12;
					}
				}
			}
		}
		energyShellDecl = "pickup/energy_shell";
		energyShellDeclMP = "pickup/energy_shell_mp";
		playerHealthRTPC = "player_health";
		soundResetStates = {
			num = 3;
			item[0] = "swimming/none";
			item[1] = "cinematic/none";
			item[2] = "curse/none";
		}
		goreComponent = {
			goreContainer = "player";
		}
		damageScaleTableComponent = {
			list = {
				num = 7;
				item[0] = {
					declDamage = "damage/special/ability_dash";
					declTable = "player/damage_volume_test";
				}
				item[1] = {
					declDamage = "damage/hazard/bio";
					declTable = "player/bio_hazard_damage";
				}
				item[2] = {
					declDamage = "damage/hazard/lava";
					declTable = "player/lava_hazard_damage";
				}
				item[3] = {
					declDamage = "damage/hazard/slime";
					declTable = "player/slime_hazard_damage";
					resetTableOnExitTimeMS = 2000;
				}
				item[4] = {
					declDamage = "damage/hazard/water_toxic";
					declTable = "player/slime_hazard_damage";
					resetTableOnExitTimeMS = 2000;
				}
				item[5] = {
					declDamage = "damage/hazard/slime_sac";
					declTable = "player/slime_sac_hazard_damage";
					resetTableOnExitTimeMS = 2000;
				}
				item[6] = {
					declDamage = "damage/hazard/poison_bog";
					declTable = "player/poison_bog_hazard_damage";
					resetTableOnExitTimeMS = 2000;
				}
			}
		}
		playerHud = {
			declHUD = "default";
		}
		playerDemoHud = {
			declHUD = "demo";
		}
		demonPlayerHud = {
			declHUD = "demon";
		}
		bodyAnimWeb = "animweb/player/doom_marine_3p";
		suffocationDamage = "damage/base/suffocation";
		waterBoostScaleMax = 4.75;
		waterBoostSound = "play_swish_frantic";
		playerRevive = "play_player_revive";
		doubleJumpSound = "play_double_jump";
		audioLogComponent = {
			stories = {
				num = 1;
				item[0] = "dev_story/attack_of_the_jeff";
			}
		}
		screenFXDecl = "player/screen_damage";
		playerAimEventDecl = "base/misc/playeraim";
		playerInteractionEventDecl = "base/misc/playerinteraction";
		bodyEventDecl = "base/misc/body";
		thirdPersonFXDecl = "player/tp_body";
		combatEncounterScoringDecl = "base";
		nightmareMarkerDef = "interact/nightmaremarker/public";
		nightmareMarkerDefFriends = "interact/nightmaremarker/public";
		nightmareMarkerDefBestRun = "interact/nightmaremarker/furthest";
		nightmareMarkerDefPublic = "interact/nightmaremarker/public";
		maxNumMarkersLvl = 30;
		gamePauseSound = "play_game_pause";
		gameUnpauseSound = "play_game_resume";
		slayerInvasionData = "default";
		weaponFists = "weapon/player/fists";
		weaponFistsBerserk = "weapon/player/fists_berserk";
		weaponFistsDoom5Melee = "weapon/player/fists_doom5melee";
		weaponFistsSwim = "weapon/player/fists_swim";
		weaponPointingArm = "weapon/player/pointing_arm";
		weaponCrucible = "weapon/player/crucible";
		equipmentLauncherLeftDecl = "equipmentlauncher/equipmentlauncherleft";
		equipmentLauncherRightDecl = "equipmentlauncher/equipmentlauncherright";
		weaponFlameBelchLeft = "weapon/player/equipment_flame_belch";
		weaponFlameBelchRight = "weapon/player/equipment_flame_belch_right";
		weaponChainsaw = "weapon/player/chainsaw";
		weaponPlasma = "weapon/player/plasma_rifle";
		weaponChaingun = "weapon/player/chaingun";
		weaponHammer = "weapon/player/hammer";
		guiInfo = {
			icon = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud";
			iconAlt = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud_dead";
		}
		lockonData = {
			lockon_acquiringSound = "play_revenant_lock_warning";
			lockon_lockedSound = "play_demonplayer_missileslocked";
			lockon_broken = "play_rocket_lockon_break_alert";
		}
		friendlyRepulsorRadius = 0.25;
		enemyRepulsorRadius = 0.25;
		controlRespawnedFromDeath = true;
		canRespawn = true;
	}
}
```

# Playable Demons

### Info

- entityDef decl locations for each demon:`<strong>gameresources_patch1\generated\decls\entitydef\player\demonplayer_archvile.decl</strong><strong>gameresources_patch1\generated\decls\entitydef\player\demonplayer_dreadknight.decl</strong><strong>gameresources_patch1\generated\decls\entitydef\player\demonplayer_painelemental.decl</strong><strong>gameresources_patch1\generated\decls\entitydef\player\demonplayer_revenant.declgameresources_patch1\generated\decls\entitydef\player\demonplayer_mancubus.declgameresources_patch2\generated\decls\entitydef\player\demonplayer_marauder.decl</strong>`
- Damage decl locations for each demon:  
    **`gameresources_patch1\generated\decls\damage\damage\demonplayer\pvp\archvile`**  
    **`gameresources_patch1\generated\decls\damage\damage\demonplayer\pvp\mancubus`**  
    **`gameresources_patch1\generated\decls\damage\damage\demonplayer\pvp\revenant`**  
    **`gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\archvile`**  
    **`gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\mancubus`**  
    **`gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\marauder`**  
    **`gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\painelemental`**  
    **`gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\revenant`**  
    **`pvp_laser_patch1\generated\decls\damage\damage\demonplayer\pvp\dreadknight`**  
    **`warehouse_patch1\generated\decls\damage\damage\demonplayer\pvp\marauder`**

<p class="callout warning">Most of the Dread Knight's damage decls are located in each of the **\_patch1** Battlemode resources, except pvp\_sideswipe (Stronghold). The Dread Knight's berserk damage decls are located in **warehouse\_patch1**.</p>

### Co-op

- Set **pvpPlayerDamageScale** &amp; **demonPlayerDamageScale** to 0 for all damage decls.
- Set **demonPlayerCanActivate** to **true** for all **idTrigger** &amp; **idEncounterTrigger\_Commit** entities.
- Set **demonPlayersPassThrough** to **false** for all **idInteractable\_Obstacle** entities.

### Invasion

- Set **demonPlayersPassThrough** to **false** for any **idInteractable\_Obstacle** or **idMover** entities that should be walled-off for all players.
- Set **demonPlayersPassThrough** to **true** &amp; **allowDemonplayerProjectilePassThrough** to **false** for all "combat barrier" entities. These are the **idDynamicEntity** and would include either **mystical\_combat\_barrier.lwo** / **gameplay\_energyBarrier\_a.lwo** / **gameplay\_energyBarrier\_b.lwo** as the clipmodel.

# Projectiles

##### gameresources\\generated\\decls\\projectile\\projectile\\player\\chaingun\_turret.decl

<p class="callout info">Add the following to fix the Mobile Turret infinite sound loop bug.</p>

```
{
	inherit = "projectile/base/bullet";
	edit = {
		fireSoundStart = "play_pistol_hand_cannon_fire"; // fireSoundLoopStart & fireSoundStop are replaced
		impactEffectTable = "impacteffect/projectiles/weapons/chaingun";
		damageDecl = "damage/firearm/chaingun_turret";
		spawnCount = 4;
		impactEffectSpawnCount = 1;
		tracerInfo = {
			tracerMtr = NULL;
			doRandomTracers = true;
			randomTracerType = "TRACERRANDOM_VARIABLE";
			randomTracerNum = 2;
			tracerLength = 2.477;
			sndTracer = "projectile/mp_bullet_passby";
			ribbon2Decls = {
				num = 3;
				item[0] = {
					ribbonDecl = "chaingun_tracer_base";
					offset = {
						x = -0.324999988;
					}
					thirdPersonOffset = {
						x = -0.324999988;
					}
				}
				item[1] = {
					ribbonDecl = "chaingun_tracer_base_90";
					offset = {
						x = -0.324999988;
					}
					thirdPersonOffset = {
						x = -0.324999988;
					}
				}
				item[2] = {
					ribbonDecl = "chaingun_tracer_base_solid";
				}
			}
		}
	}
}
```

##### gameresources\\generated\\decls\\projectile\\projectile\\player\\double\_barrel\_flame\_meat\_hook.decl

<p class="callout info">Add the following to enable a flame FX for the host player whenever they use the Meathook.</p>

```
{
	inherit = "projectile/player/double_barrel_meat_hook";
	edit = {
		fireSoundStart = "play_wpn_shotgun_double_meathook_master_fire";
		fxDecl = "weapon/meathook/meathook_projectile_mastery";
		notHitscanInfo = {
			entityDef = "projectile_ent/throwable/player/flaming_meat_hook";
			clientAuthoritative = false; // set to false
		}
		projectilePlaysFireSound = true; // set to true
	}
}
```

##### gameresources\\generated\\decls\\projectile\\projectile\\player\\shotgun\_pop\_rocket.decl

<p class="callout info">Add the following to fix some network issues with Sticky Bombs.</p>

```
{
	inherit = "projectile/player/assault_rifle_assaultrifle_secondary";
	edit = {
		fireSoundStart = "play_shotgun_pop_rocket_fire";
		impactEffectTable = "impacteffect/projectiles/weapons/shotgun_poprocket";
		fxDecl = "weapon/combat_shotgun/sticky_bomb_projectile";
		notHitscanInfo = {
			entityDef = "projectile_ent/player/shotgun_pop_rocket";
			physicsProperties = {
				bounciness = 0;
				actorClipRadius = 0.400000006;
			}
			explodeSound = "play_sticky_bomb_explosion";
			flySound = "play_rocket_fly_loop";
			whizBySound = "play_sfx_rocket_passby";
			whizByDist = 5.71500015;
			isRetrievable = false;
			clientAuthoritative = true; // set to true
			adjustFireAngle = -4;
			grenadeInfo = {
				minDetonationDelay = 500;
				maxDetonationDelay = 500;
				countDownOnThrow = false;
				bouncesBeforeDetonationTimerStart = 1;
				warningSound = "play_cs_sticky_bomb_timer_1_mono";
				minSpeed = 52.3880043;
				maxSpeed = 52.3880043;
				useSimplePhysics = false;
			}
			swallowInfo = {
				canBeSwallowed = true;
				explodeDamageDelayMS = 1500;
				swallowStat = "STAT_WEAKPOINT_CACODEMON_MOUTH";
			}
		}
		damageDecl = "damage/firearm/pop_rocket";
		splashDamageDecl = "damage/firearm/pop_rocket_splash";
		splashDoesntIgnoreDirectHitTarget = true;
		projectilePlaysFireSound = true;
	}
}
```

# Damage

##### gameresources\_patch2\\generated\\decls\\damage\\damage\\firearm\\chaingun.decl

<p class="callout info">Apply changes to any desired damage decl.</p>

```
{
	edit = {
		damageParms = {
			weaponDamageType = "PLAYER_WEAPON_CHAINGUN";
			bulletPenetrationData = {
				demonPlayerBlocksPenetration = true;
			}
			damageName = "chaingun";
			damageSource = "DAMAGESRC_BULLET";
			aiDamageMitigation = {
				num = 2;
				item[0] = {
					monsterType = "AI_MONSTER_ICON_OF_SIN AI_MONSTER_MAYKR_ANGEL";
					maxDamage = -1;
					damageScalar = 0.600000024;
				}
				item[1] = {
					monsterType = "AI_MONSTER_SAMUEL_BOSS";
					maxDamage = -1;
					damageScalar = 0.439999998;
				}
			}
			damageSoundWhenLocalDemonPlayerIsHit = "play_bullet_damage_demon";
			knocksOffArmor = false;
			damageIcon = "textures/guis/hud/damage_icons/slayer/weapon/weapon_chaingun";
			declGoreBehavior = "gorebehavior/firearm/chaingun";
			skillshotHighlightInfo = {
				fadeTime = 300;
				color = {
					r = 1;
					a = 1;
				}
			}
		}
		maxDamage = {
			defaultValue = 20;
		}
		minDamage = {
			defaultValue = 20;
		}
		pvpPlayerDamageScale = 0.5; // slayer damage scale, set to 0 for co-op
		demonPlayerDamageScale = 0.5; // overrall demon player damage scale, set to 0 for co-op
        demonPlayerDamageMitigation = { // remove for co-op
			num = 6;
			item[0] = {
				monsterType = "AI_MONSTER_PLAYER_ARCHVILE";
				damageScalar = {
					defaultValue = 0.75; // 75% on PC
					branchPairs = {
						num = 1;
						item[0] = {
							branchKey = "CONTROLLERPAD_DECL";
							branchResult = 0.75; // 75% damage on console
						}
					}
				}
			}
			item[1] = {
				monsterType = "AI_MONSTER_PLAYER_MANCUBUS";
				damageScalar = {
					defaultValue = 0.75;
					branchPairs = {
						num = 1;
						item[0] = {
							branchKey = "CONTROLLERPAD_DECL";
							branchResult = 0.75;
						}
					}
				}
			}
			item[2] = {
				monsterType = "AI_MONSTER_PLAYER_MARAUDER";
				damageScalar = {
					defaultValue = 0.75;
					branchPairs = {
						num = 1;
						item[0] = {
							branchKey = "CONTROLLERPAD_DECL";
							branchResult = 0.75;
						}
					}
				}
			}
			item[3] = {
				monsterType = "AI_MONSTER_PLAYER_PAIN_ELEMENTAL";
				damageScalar = {
					defaultValue = 0.75;
					branchPairs = {
						num = 1;
						item[0] = {
							branchKey = "CONTROLLERPAD_DECL";
							branchResult = 0.75;
						}
					}
				}
			}
			item[4] = {
				monsterType = "AI_MONSTER_PLAYER_REVENANT";
				damageScalar = {
					defaultValue = 0.75;
					branchPairs = {
						num = 1;
						item[0] = {
							branchKey = "CONTROLLERPAD_DECL";
							branchResult = 0.75;
						}
					}
				}
			}
			item[5] = {
				monsterType = "AI_MONSTER_PLAYER_DREADKNIGHT";
				damageScalar = {
					defaultValue = 0.75;
					branchPairs = {
						num = 1;
						item[0] = {
							branchKey = "CONTROLLERPAD_DECL";
							branchResult = 0.75;
						}
					}
				}
			}
		}
	}
}
```

# Chainsaw

##### gameresources\\generated\\decls\\damage\\damage\\melee\\sync\_kill\_chainsaw.decl

<p class="callout info">Chainsaw will automatically give the player ammo instead of dropping ammo loot drops.</p>

```
{
	inherit = "damage/melee/sync_kill";
	edit = {
		damageParms = {
			weaponDamageType = "PLAYER_WEAPON_CHAINSAW";
			damageName = "sync_kill_chainsaw";
			damageTypes = "DAMAGETYPE_HEALTH DAMAGETYPE_SYNC";
			damageSource = "DAMAGESRC_CHAINSAW";
			killStat = "STAT_WEAPON_CHAINSAW_KILLS";
			declGoreBehavior = "gorebehavior/firearm/chainsaw";
			ammoReturnOnDeath = {
				num = 4;
				item[0] = {
					giveItemOverTime = {
						decl = "ammo/sharedammopool/shells";
						count = 15;
					}
					aiType = "AI_MONSTER_ZOMBIE_TIER_1 AI_MONSTER_ZOMBIE_TIER_3 AI_MONSTER_ZOMBIE_MAYKR AI_MONSTER_IMP AI_MONSTER_GARGOYLE AI_MONSTER_PROWLER AI_MONSTER_HELL_SOLDIER AI_MONSTER_SHOTGUN_SOLDIER AI_MONSTER_CARCASS AI_MONSTER_LOSTSOUL AI_MONSTER_HELLKNIGHT AI_MONSTER_DREADKNIGHT AI_MONSTER_PINKY AI_MONSTER_SPECTRE AI_MONSTER_CACODEMON AI_MONSTER_PAIN_ELEMENTAL AI_MONSTER_MANCUBUS AI_MONSTER_CYBER_MANCUBUS AI_MONSTER_ARACHNOTRON AI_MONSTER_REVENANT AI_MONSTER_WHIPLASH AI_MONSTER_DOOM_HUNTER AI_MONSTER_MARAUDER AI_MONSTER_MARAUDER_WOLF AI_MONSTER_BARON AI_MONSTER_TYRANT AI_MONSTER_ARCHVILE AI_MONSTER_CUEBALL AI_MONSTER_BUFF_POD AI_MONSTER_TENTACLE AI_MONSTER_GLADIATOR AI_MONSTER_ICON_OF_SIN AI_MONSTER_MAYKR_ANGEL AI_MONSTER_ZOMBIE_T1_SCREECHER AI_MONSTER_STONE_IMP AI_MONSTER_CURSED_PROWLER AI_MONSTER_CHAINGUN_SOLDIER AI_MONSTER_BLOOD_ANGEL AI_MONSTER_ARMORED_BARON AI_MONSTER_SUPER_TENTACLE AI_MONSTER_SPIRIT AI_MONSTER_TURRET AI_MONSTER_DEMONIC_TROOPER AI_MONSTER_SAMUEL_BOSS AI_MONSTER_DARKLORD_BOSS";
				}
				item[1] = {
					giveItemOverTime = {
						decl = "ammo/sharedammopool/bullets";
						count = 90;
					}
					aiType = "AI_MONSTER_ZOMBIE_TIER_1 AI_MONSTER_ZOMBIE_TIER_3 AI_MONSTER_ZOMBIE_MAYKR AI_MONSTER_IMP AI_MONSTER_GARGOYLE AI_MONSTER_PROWLER AI_MONSTER_HELL_SOLDIER AI_MONSTER_SHOTGUN_SOLDIER AI_MONSTER_CARCASS AI_MONSTER_LOSTSOUL AI_MONSTER_HELLKNIGHT AI_MONSTER_DREADKNIGHT AI_MONSTER_PINKY AI_MONSTER_SPECTRE AI_MONSTER_CACODEMON AI_MONSTER_PAIN_ELEMENTAL AI_MONSTER_MANCUBUS AI_MONSTER_CYBER_MANCUBUS AI_MONSTER_ARACHNOTRON AI_MONSTER_REVENANT AI_MONSTER_WHIPLASH AI_MONSTER_DOOM_HUNTER AI_MONSTER_MARAUDER AI_MONSTER_MARAUDER_WOLF AI_MONSTER_BARON AI_MONSTER_TYRANT AI_MONSTER_ARCHVILE AI_MONSTER_CUEBALL AI_MONSTER_BUFF_POD AI_MONSTER_TENTACLE AI_MONSTER_GLADIATOR AI_MONSTER_ICON_OF_SIN AI_MONSTER_MAYKR_ANGEL AI_MONSTER_ZOMBIE_T1_SCREECHER AI_MONSTER_STONE_IMP AI_MONSTER_CURSED_PROWLER AI_MONSTER_CHAINGUN_SOLDIER AI_MONSTER_BLOOD_ANGEL AI_MONSTER_ARMORED_BARON AI_MONSTER_SUPER_TENTACLE AI_MONSTER_SPIRIT AI_MONSTER_TURRET AI_MONSTER_DEMONIC_TROOPER AI_MONSTER_SAMUEL_BOSS AI_MONSTER_DARKLORD_BOSS";
				}
				item[2] = {
					giveItemOverTime = {
						decl = "ammo/sharedammopool/cells";
						count = 135;
					}
					aiType = "AI_MONSTER_ZOMBIE_TIER_1 AI_MONSTER_ZOMBIE_TIER_3 AI_MONSTER_ZOMBIE_MAYKR AI_MONSTER_IMP AI_MONSTER_GARGOYLE AI_MONSTER_PROWLER AI_MONSTER_HELL_SOLDIER AI_MONSTER_SHOTGUN_SOLDIER AI_MONSTER_CARCASS AI_MONSTER_LOSTSOUL AI_MONSTER_HELLKNIGHT AI_MONSTER_DREADKNIGHT AI_MONSTER_PINKY AI_MONSTER_SPECTRE AI_MONSTER_CACODEMON AI_MONSTER_PAIN_ELEMENTAL AI_MONSTER_MANCUBUS AI_MONSTER_CYBER_MANCUBUS AI_MONSTER_ARACHNOTRON AI_MONSTER_REVENANT AI_MONSTER_WHIPLASH AI_MONSTER_DOOM_HUNTER AI_MONSTER_MARAUDER AI_MONSTER_MARAUDER_WOLF AI_MONSTER_BARON AI_MONSTER_TYRANT AI_MONSTER_ARCHVILE AI_MONSTER_CUEBALL AI_MONSTER_BUFF_POD AI_MONSTER_TENTACLE AI_MONSTER_GLADIATOR AI_MONSTER_ICON_OF_SIN AI_MONSTER_MAYKR_ANGEL AI_MONSTER_ZOMBIE_T1_SCREECHER AI_MONSTER_STONE_IMP AI_MONSTER_CURSED_PROWLER AI_MONSTER_CHAINGUN_SOLDIER AI_MONSTER_BLOOD_ANGEL AI_MONSTER_ARMORED_BARON AI_MONSTER_SUPER_TENTACLE AI_MONSTER_SPIRIT AI_MONSTER_TURRET AI_MONSTER_DEMONIC_TROOPER AI_MONSTER_SAMUEL_BOSS AI_MONSTER_DARKLORD_BOSS";
				}
				item[3] = {
					giveItemOverTime = {
						decl = "ammo/sharedammopool/rockets";
						count = 6;
					}
					aiType = "AI_MONSTER_ZOMBIE_TIER_1 AI_MONSTER_ZOMBIE_TIER_3 AI_MONSTER_ZOMBIE_MAYKR AI_MONSTER_IMP AI_MONSTER_GARGOYLE AI_MONSTER_PROWLER AI_MONSTER_HELL_SOLDIER AI_MONSTER_SHOTGUN_SOLDIER AI_MONSTER_CARCASS AI_MONSTER_LOSTSOUL AI_MONSTER_HELLKNIGHT AI_MONSTER_DREADKNIGHT AI_MONSTER_PINKY AI_MONSTER_SPECTRE AI_MONSTER_CACODEMON AI_MONSTER_PAIN_ELEMENTAL AI_MONSTER_MANCUBUS AI_MONSTER_CYBER_MANCUBUS AI_MONSTER_ARACHNOTRON AI_MONSTER_REVENANT AI_MONSTER_WHIPLASH AI_MONSTER_DOOM_HUNTER AI_MONSTER_MARAUDER AI_MONSTER_MARAUDER_WOLF AI_MONSTER_BARON AI_MONSTER_TYRANT AI_MONSTER_ARCHVILE AI_MONSTER_CUEBALL AI_MONSTER_BUFF_POD AI_MONSTER_TENTACLE AI_MONSTER_GLADIATOR AI_MONSTER_ICON_OF_SIN AI_MONSTER_MAYKR_ANGEL AI_MONSTER_ZOMBIE_T1_SCREECHER AI_MONSTER_STONE_IMP AI_MONSTER_CURSED_PROWLER AI_MONSTER_CHAINGUN_SOLDIER AI_MONSTER_BLOOD_ANGEL AI_MONSTER_ARMORED_BARON AI_MONSTER_SUPER_TENTACLE AI_MONSTER_SPIRIT AI_MONSTER_TURRET AI_MONSTER_DEMONIC_TROOPER AI_MONSTER_SAMUEL_BOSS AI_MONSTER_DARKLORD_BOSS";
				}
			}
		}
	}
}
```

# Lootdrops

<p class="callout info">The lootdropcomponent decls would need to be adjusted.</p>

##### gameresources\_patch1\\generated\\decls\\lootdropcomponent\\ai\\default\_ambient.decl

```
{
	inherit = "ai/default";
	edit = {
		droppableItems = {
			num = 28;
			item[0] = "lootdrop/health/health_low_kill";
			item[1] = "lootdrop/health/health_low_gk";
			item[2] = NULL;
			item[3] = NULL;
			item[4] = NULL;
			item[5] = NULL;
			item[6] = NULL;
			item[7] = NULL;
			item[8] = NULL;
			item[9] = NULL;
			item[10] = "lootdrop/health/health_low_crucible";
			item[11] = "lootdrop/health/health_med_crucible";
			item[12] = "lootdrop/health/health_high_crucible";
			item[13] = "lootdrop/extra_life/extra_life_refund";
			item[14] = "lootdrop/ammo/hammer/weakpoint_drop";
			item[15] = "lootdrop/ammo/hammer/headshot_drop";
			item[16] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam";
			item[17] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam";
			item[18] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam";
			item[19] = "lootdrop/ammo/shotgun/shells_hammer_slam";
			item[20] = "lootdrop/armor/hammer_slam";
			item[21] = "lootdrop/health/health_hammer_slam";
			item[22] = "lootdrop/armor/hammer_slam_upgraded";
			item[23] = "lootdrop/health/health_hammer_slam_upgraded";
			item[24] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam_upgraded";
			item[25] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam_upgraded";
			item[26] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam_upgraded";
			item[27] = "lootdrop/ammo/shotgun/shells_hammer_slam_upgraded";
		}
		onlyDropOnce = true;
	}
}
```

##### gameresources\_patch1\\generated\\decls\\lootdropcomponent\\ai\\default\_fodder.decl

```
{
	inherit = "ai/default";
	edit = {
		droppableItems = {
			num = 30;
			item[0] = "lootdrop/health/health_low_kill";
			item[1] = "lootdrop/health/health_low_gk";
			item[2] = NULL;
			item[3] = NULL;
			item[4] = NULL;
			item[5] = NULL;
			item[6] = NULL;
			item[7] = NULL;
			item[8] = NULL;
			item[9] = NULL;
			item[10] = "lootdrop/health/blood_punch_splash";
			item[11] = "lootdrop/ammo/shotgun/shells_full_auto_giveback_fodder";
			item[12] = "lootdrop/health/health_low_crucible";
			item[13] = "lootdrop/health/health_med_crucible";
			item[14] = "lootdrop/health/health_high_crucible";
			item[15] = "lootdrop/extra_life/extra_life_refund";
			item[16] = "lootdrop/ammo/hammer/weakpoint_drop";
			item[17] = "lootdrop/ammo/hammer/headshot_drop";
			item[18] = "lootdrop/ammo/shotgun/shells_hammer_slam";
			item[19] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam";
			item[20] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam";
			item[21] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam";
			item[22] = "lootdrop/armor/hammer_slam";
			item[23] = "lootdrop/health/health_hammer_slam";
			item[24] = "lootdrop/armor/hammer_slam_upgraded";
			item[25] = "lootdrop/health/health_hammer_slam_upgraded";
			item[26] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam_upgraded";
			item[27] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam_upgraded";
			item[28] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam_upgraded";
			item[29] = "lootdrop/ammo/shotgun/shells_hammer_slam_upgraded";
		}
		onlyDropOnce = true;
	}
}
```

##### gameresources\_patch1\\generated\\decls\\lootdropcomponent\\ai\\default\_heavy.decl

```
{
	inherit = "ai/default";
	edit = {
		droppableItems = {
			num = 30;
			item[0] = NULL;
			item[1] = NULL;
			item[2] = NULL;
			item[3] = NULL;
			item[4] = "lootdrop/health/health_high_kill";
			item[5] = "lootdrop/health/health_low_gk";
			item[6] = NULL;
			item[7] = NULL;
			item[8] = NULL;
			item[9] = NULL;
			item[10] = "lootdrop/health/blood_punch_splash";
			item[11] = "lootdrop/ammo/shotgun/shells_full_auto_giveback_heavy";
			item[12] = "lootdrop/health/health_low_heavy_crucible";
			item[13] = "lootdrop/health/health_med_heavy_crucible";
			item[14] = "lootdrop/health/health_high_crucible";
			item[15] = "lootdrop/extra_life/extra_life_refund";
			item[16] = "lootdrop/ammo/hammer/weakpoint_drop";
			item[17] = "lootdrop/ammo/hammer/headshot_drop";
			item[18] = "lootdrop/ammo/shotgun/shells_hammer_slam";
			item[19] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam";
			item[20] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam";
			item[21] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam";
			item[22] = "lootdrop/armor/hammer_slam";
			item[23] = "lootdrop/health/health_hammer_slam";
			item[24] = "lootdrop/armor/hammer_slam_upgraded";
			item[25] = "lootdrop/health/health_hammer_slam_upgraded";
			item[26] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam_upgraded";
			item[27] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam_upgraded";
			item[28] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam_upgraded";
			item[29] = "lootdrop/ammo/shotgun/shells_hammer_slam_upgraded";
		}
		onlyDropOnce = true;
	}
}
```

##### gameresources\_patch1\\generated\\decls\\lootdropcomponent\\ai\\default\_superheavy.decl

```
{
	inherit = "ai/default";
	edit = {
		droppableItems = {
			num = 28;
			item[0] = NULL;
			item[1] = "lootdrop/health/health_low_kill";
			item[2] = "lootdrop/health/health_low_gk";
			item[3] = NULL;
			item[4] = NULL;
			item[5] = NULL;
			item[6] = NULL;
			item[7] = "lootdrop/health/blood_punch_splash";
			item[8] = "lootdrop/ammo/shotgun/shells_full_auto_giveback_superheavy";
			item[9] = "lootdrop/health/health_superheavy_kill";
			item[10] = "lootdrop/health/health_low_heavy_crucible";
			item[11] = "lootdrop/health/health_med_heavy_crucible";
			item[12] = "lootdrop/health/health_high_crucible";
			item[13] = "lootdrop/extra_life/extra_life_refund";
			item[14] = "lootdrop/ammo/hammer/weakpoint_drop";
			item[15] = "lootdrop/ammo/hammer/headshot_drop";
			item[16] = "lootdrop/ammo/shotgun/shells_hammer_slam";
			item[17] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam";
			item[18] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam";
			item[19] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam";
			item[20] = "lootdrop/armor/hammer_slam";
			item[21] = "lootdrop/health/health_hammer_slam";
			item[22] = "lootdrop/armor/hammer_slam_upgraded";
			item[23] = "lootdrop/health/health_hammer_slam_upgraded";
			item[24] = "lootdrop/ammo/heavy_cannon/bullets_hammer_slam_upgraded";
			item[25] = "lootdrop/ammo/plasma_rifle/cells_hammer_slam_upgraded";
			item[26] = "lootdrop/ammo/rocket_launcher/rockets_hammer_slam_upgraded";
			item[27] = "lootdrop/ammo/shotgun/shells_hammer_slam_upgraded";
		}
		onlyDropOnce = true;
	}
}
```

# RenderParms

##### gameresources\_patch1\\generated\\decls\\fx\\player\\tp\_body.decl

<p class="callout info">Green render highlight for Slayer vs Slayer.</p>

```
			item[85] = {
                name = "highlight_tint";
                group = "highlight";
                type = "FX_RENDERPARM";
				startCondition = {
					num = 74;
					item[0] = "FX_NONE";
					item[1] = "FX_PICKUP_HEALTH_SMALL";
					item[2] = "FX_PICKUP_HEALTH_MEDIUM";
					item[3] = "FX_PICKUP_HEALTH_LARGE";
					item[4] = "FX_PICKUP_ARMOR_SMALL";
					item[5] = "FX_PICKUP_ARMOR_MEDIUM";
					item[6] = "FX_PICKUP_ARMOR_LARGE";
					item[7] = "FX_PLAYER_STATUS1_START";
					item[8] = "FX_PLAYER_STATUS1_STOP";
					item[9] = "FX_PLAYER_STATUS2_START";
					item[10] = "FX_PLAYER_STATUS2_STOP";
					item[11] = "FX_PLAYER_STATUS2_ALT_1_START";
					item[12] = "FX_PLAYER_STATUS2_ALT_2_START";
					item[13] = "FX_PLAYER_STATUS2_ALT_3_START";
					item[14] = "FX_PLAYER_STATUS3_START";
					item[15] = "FX_PLAYER_STATUS3_STOP";
					item[16] = "FX_PLAYER_STATUS4_START";
					item[17] = "FX_PLAYER_STATUS4_STOP";
					item[18] = "FX_PLAYER_STATUS5_START";
					item[19] = "FX_PLAYER_STATUS5_STOP";
					item[20] = "FX_ZIPLINE_SPEED_SLOW";
					item[21] = "FX_ZIPLINE_SPEED_SLOW_REVERSE";
					item[22] = "FX_ZIPLINE_SPEED_MED";
					item[23] = "FX_ZIPLINE_SPEED_MED_REVERSE";
					item[24] = "FX_ZIPLINE_SPEED_FAST";
					item[25] = "FX_ZIPLINE_SPEED_FAST_REVERSE";
					item[26] = "FX_GLORY_SAVAGERY_START";
					item[27] = "FX_GLORY_SAVAGERY_START_THIRD";
					item[28] = "FX_GLORY_SAVAGERY_START_END_THIRD";
					item[29] = "FX_GLORY_SAVAGERY_AOE_START_END_THIRD";
					item[30] = "FX_GLORY_SAVAGERY_AOE_LOW_HEALTH_START_END_THIRD";
					item[31] = "FX_SAVING_THROW_START";
					item[32] = "FX_RUNE_BLOOD_FUELED";
					item[33] = "FX_RUNE_SEEK_DESTROY";
					item[34] = "FX_PROP_PICKUP";
					item[35] = "FX_VEH_START_BOOST";
					item[36] = "FX_CINEMATIC_MP_20";
					item[37] = "FX_DOUBLE_JUMP_THIRD_PERSON";
					item[38] = "FX_DASH_ACTIVATED";
					item[39] = "FX_CINEMATIC_MP_1";
					item[40] = "FX_CINEMATIC_MP_2";
					item[41] = "FX_CINEMATIC_MP_4";
					item[42] = "FX_CINEMATIC_MP_5";
					item[43] = "FX_CINEMATIC_MP_6";
					item[44] = "FX_CINEMATIC_MP_7";
					item[45] = "FX_CINEMATIC_MP_8";
					item[46] = "FX_CINEMATIC_MP_9";
					item[47] = "FX_CINEMATIC_MP_18";
					item[48] = "FX_CINEMATIC_MP_19";
					item[49] = "FX_CINEMATIC_MP_20";
					item[50] = "FX_CINEMATIC_1";
					item[51] = "FX_CINEMATIC_2";
					item[52] = "FX_CINEMATIC_3";
					item[53] = "FX_CINEMATIC_4";
					item[54] = "FX_CINEMATIC_5";
					item[55] = "FX_CINEMATIC_7";
					item[56] = "FX_CINEMATIC_8";
					item[57] = "FX_CINEMATIC_9";
					item[58] = "FX_CINEMATIC_10";
					item[59] = "FX_CINEMATIC_13";
					item[60] = "FX_CINEMATIC_14";
					item[61] = "FX_CINEMATIC_15";
					item[62] = "FX_CINEMATIC_16";
					item[63] = "FX_CINEMATIC_17";
					item[64] = "FX_CINEMATIC_18";
					item[65] = "FX_CINEMATIC_19";
					item[66] = "FX_CINEMATIC_20";
					item[67] = "FX_START_DAMAGE_LEVEL_1";
					item[68] = "FX_START_DAMAGE_LEVEL_2";
					item[69] = "FX_START_DAMAGE_LEVEL_4";
					item[70] = "FX_BURN_1_START";
					item[71] = "FX_BURN_2_START";
					item[72] = "FX_PLAYER_MOVEMENT_LANDED";
					item[73] = "FX_EXPLOSIVE_ARMED";
				}
				renderParmParms = {
					declRenderParm = "highlightfillcolor";
					color = {
						r = 0;
						g = 0.8;
						b = 0;
						a = 0.5;
					}
				}
			}
```

##### gameresources\_patch1\\generated\\decls\\fx\\demon\_player\\archvile\\archvile.decl

<p class="callout info">Purple render highlight for Invasion.</p>

```
			item[84] = {
                name = "highlight_tint";
                group = "highlight";
                type = "FX_RENDERPARM";
				startCondition = {
					num = 11;
					item[0] = "FX_NONE";
					item[1] = "FX_PICKUP_HEALTH_SMALL";
					item[2] = "FX_PICKUP_HEALTH_MEDIUM";
					item[3] = "FX_PICKUP_HEALTH_LARGE";
					item[4] = "FX_PLAYER_STATUS1_STOP";
					item[5] = "FX_PLAYER_STATUS2_STOP";
					item[6] = "FX_PLAYER_STATUS3_STOP";
					item[7] = "FX_PLAYER_STATUS4_STOP";
					item[8] = "FX_PLAYER_STATUS5_STOP";
					item[9] = "FX_ZIPLINE_SPEED_FAST_REVERSE";
					item[10] = "FX_MAN_ON_FIRE";
				}
				renderParmParms = {
					declRenderParm = "highlightfillcolor";
					color = {
						r = 0.8;
						g = 0;
						b = 1;
						a = 0.1;
					}
				}
			}
```

# FX

<p class="callout info">All of these changes reduce lag for client players.</p>

##### gameresources\\generated\\decls\\fx\\weapon\\gauss\_cannon\\projectile\_destroyer.decl

```
			item[10] = {
				name = "rock_debris";
				group = "explosion";
				type = "FX_DESTRUCTIBLE";
				startCondition = {
					num = 7;
					item[0] = "FX_PROJECTILE_EXPLODE_DIRT";
					item[1] = "FX_PROJECTILE_EXPLODE_PLASTIC";
					item[2] = "FX_PROJECTILE_EXPLODE_WOOD";
					item[3] = "FX_PROJECTILE_EXPLODE_STONE";
					item[4] = "FX_PROJECTILE_EXPLODE_METAL";
					item[5] = "FX_PROJECTILE_EXPLODE_DEFAULT";
					item[6] = "FX_PROJECTILE_EXPLODE_ASPHALT";
				}
				stopCondition = {
					num = 1;
					item[0] = "FX_NONE";
				}
				rotationType = "FX_ROT_EXPLICIT_ANGLES";
				destructibleParms = {
					destructible = "";
				}
			}
```

##### gameresources\\generated\\decls\\fx\\weapon\\gauss\_cannon\\projectile\_destroyer\_charge\_level\_3.decl

```
			item[0] = {
				name = "rock_debris";
				group = "explosion";
				type = "FX_DESTRUCTIBLE";
				color = {
					y = 0.13013652;
					z = 0.0273208916;
				}
				startCondition = {
					num = 7;
					item[0] = "FX_PROJECTILE_EXPLODE_DIRT";
					item[1] = "FX_PROJECTILE_EXPLODE_PLASTIC";
					item[2] = "FX_PROJECTILE_EXPLODE_WOOD";
					item[3] = "FX_PROJECTILE_EXPLODE_STONE";
					item[4] = "FX_PROJECTILE_EXPLODE_METAL";
					item[5] = "FX_PROJECTILE_EXPLODE_DEFAULT";
					item[6] = "FX_PROJECTILE_EXPLODE_ASPHALT";
				}
				stopCondition = {
					num = 1;
					item[0] = "FX_NONE";
				}
				rotationType = "FX_ROT_EXPLICIT_ANGLES";
				destructibleParms = {
					destructible = "";
				}
			}
			item[1] = {
				name = "explosion_shake";
				group = "explosion";
				type = "FX_SCREEN_SHAKE";
				duration = 3;
				fadeStartDistance = 1.90499997;
				distance = 9.52500057;
				color = {
					y = 0.13013652;
					z = 0.0273208916;
				}
				startCondition = {
					num = 1;
					item[0] = "FX_PROJECTILE_EXPLODE";
				}
				stopCondition = {
					num = 1;
					item[0] = "FX_NONE";
				}
				screenShakeParms = {
					advancedShakeDecl = "advancedscreenviewshake/loadout/adv_shake_l";
				}
			}
			item[2] = {
				name = "explosion_piece";
				group = "explosion";
				type = "FX_PARTICLE";
				duration = 1000;
				looping = true;
				color = {
					y = 0.13013652;
					z = 0.0273208916;
				}
				startCondition = {
					num = 1;
					item[0] = "FX_PROJECTILE_EXPLODE_PIECE_1";
				}
				stopCondition = {
					num = 1;
					item[0] = "FX_NONE";
				}
				originType = "FX_ORG_TRACK_POS";
				rotationType = "FX_ROT_TRACK_AXIS";
				particleParms = {
					declPrt = "";
				}
			}
```

##### gameresources\\generated\\decls\\fx\\weapon\\plasma\_rifle\\plasma\_rifle\_microwave\_3rd.decl

```
			item[1] = {
				name = "muzzle_flash_primary";
				group = "fire_microwave";
				type = "FX_PARTICLE";
				duration = 500;
				fadeOutTime = 500;
				color = {
					x = 0.0451862141;
					y = 0.254152179;
				}
				tagNames = {
					num = 1;
					item[0] = "fx_muzzle_z_barrel";
				}
				startCondition = {
					num = 1;
					item[0] = "";
				}
				stopCondition = {
					num = 1;
					item[0] = "";
				}
				originType = "FX_ORG_TRACK_POS";
				rotationType = "FX_ROT_TRACK_AXIS";
				particleParms = {
					declPrt = "";
				}
			}
```

# Cursed Prowlers

##### e5m1\_spear\_patch2\\generated\\decls\\aicomponent\_prototypes\\aicomponent\\prowler\_cursed.decl

<p class="callout info">Some of the curse effects do not apply to clients. This decl change will make it consistent for both host and client.</p>

```
{
	edit = {
		curseArmorInfo = {
			armorBuffModifiers = {
				className = "idEntityModifier_Berserk";
				object = {
					durationInSeconds = {
						minRange = -1;
						maxRange = -1;
					}
					damageTakenScale = 1;
					goreDamageScale = 1;
					disabledPainTypes = "BF_PAIN_STAGGER BF_PAIN_STAGGER_VULNERABLE";
					buffOverrides = {
						num = 10;
						item[0] = {
							damageDecls = "player_power_direct";
							damageTakenScale = 4;
							goreDamageScale = 1;
						}
						item[1] = {
							damageDecls = "player_power_aoe";
							painTakenScale = 0;
							goreDamageScale = 0;
							disabledPainTypes = "BF_PAIN_FALTER_LIGHT BF_PAIN_FALTER BF_PAIN_PUSHBACK BF_PAIN_STAGGER";
						}
						item[2] = {
							damageDecls = "equip_flamebelch";
							damageTakenScale = 1;
						}
						item[3] = {
							damageDecls = "player_melee";
							disabledPainTypes = "BF_PAIN_FALTER_LIGHT BF_PAIN_FALTER BF_PAIN_PUSHBACK BF_PAIN_MELEE_D5_FORWARD_REACT BF_PAIN_MELEE_D5_LEFT_REACT BF_PAIN_MELEE_D5_RIGHT_REACT BF_PAIN_MELEE_D5_UPPERCUT_REACT BF_PAIN_STAGGER";
						}
						item[4] = {
							damageDecls = "mod_rocketlauncher_remotedetonate_all";
							disabledPainTypes = "BF_PAIN_FALTER_LIGHT BF_PAIN_FALTER BF_PAIN_PUSHBACK BF_PAIN_STAGGER";
						}
						item[5] = {
							damageDecls = "mod_plasmagun_heatblast";
							disabledPainTypes = "BF_PAIN_FALTER_LIGHT BF_PAIN_FALTER BF_PAIN_PUSHBACK BF_PAIN_STAGGER";
						}
						item[6] = {
							damageDecls = "equip_frag_direct";
							disabledPainTypes = "BF_PAIN_FALTER_LIGHT BF_PAIN_FALTER BF_PAIN_PUSHBACK BF_PAIN_STAGGER";
						}
						item[7] = {
							damageDecls = "equip_frag_splash";
							disabledPainTypes = "BF_PAIN_FALTER BF_PAIN_PUSHBACK";
						}
						item[8] = {
							damageDecls = "player_hammer";
							disabledPainTypes = "BF_PAIN_FALTER BF_PAIN_PUSHBACK";
						}
						item[9] = {
							damageDecls = "crushers";
							damageTakenScale = 1;
							disabledPainTypes = "BF_PAIN_FALTER BF_PAIN_PUSHBACK";
						}
					}
				}
			}
			armorDisableFlags = "DISABLE_SYNC_KILLS";
			curseAppliedTranscode = "TRANSCODE_SHOULD_RETREAT";
			retreatMemoryKey = "wants_retreat";
		}
	}
}
```

# Screechers

##### e5m1\_spear\\generated\\decls\\md6def\\md6def\\characters\\monsters\\zombie\_tier1\\base\\zombie\_tier1\_berserk.md6.decl

<p class="callout info">Additional FxConditions must trigger</p>

```
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_back/head_v1.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_02.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_03.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_04.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_06.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_07.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_08.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_09.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_10.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_11.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_12.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_13.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_14.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_15.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_16.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_17.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_18.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_19.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_20.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_21.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_22.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_23.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/lower_body_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/lower_body_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/lower_body_inplace_02.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/upper_body_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/upper_body_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/chest_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/chest_in_place_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/gut_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/gut_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_arm_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_arm_in_place_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_leg_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_leg_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_arm_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_arm_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_leg_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_leg_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/upper_body.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/lower_body_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/lower_body_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/upper_body_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/upper_body_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/lower_body_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/lower_body_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/upper_body_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/upper_body_inplace_01.md6anim" {
			event "ae_applyBuffModifiers" {
				frame 1.0000
				row 17
			}
			event "ae_soundNoSkip" {
				frame 1.0000
				row 18
				soundevent ""
			}
			event "ae_startFX" {
				frame 1.0000
				row 19
				fxCondition_t FX_CINEMATIC_20
			}
			event "ae_soundNoSkip" {
				frame 0.0235
				row 1
				soundevent "play_zombie_alert_screech"
			}
			event "ae_startFX" {
				frame 0.0000
				row 0
				fxCondition_t FX_CINEMATIC_MP_1
			}
			event "ae_stopFX" {
				frame 45.0000
				row 3
				fxCondition_t FX_START_DEATH_1
			}
		}
```

.

# Tyrants

##### e5m1\_spear\\generated\\decls\\aimovementgraph\\tyrant.decl

<p class="callout info">Tyrants should not be able to walk because that causes clients to crash.</p>

```
{
	edit = {
	}
}
```

# Cueballs

##### gameresources\\generated\\decls\\md6def\\md6def\\characters\\monsters\\zombie\_cueball\\base\\zombie\_cueball.md6.decl

<p class="callout info">Cueballs should instantly explode on death.</p>

```
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_02.md6anim" {
			event "ae_goreEnableByName" {
				frame 4.7773
				row 3
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 9.5611
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_03.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0000
				row 4
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_04.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_06.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_07.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_08.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_09.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_10.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_11.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_12.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_13.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_14.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_15.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_16.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_17.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_18.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_19.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_20.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_21.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_22.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_front/head_23.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9593
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/moving_forward/hit_back/head_v1.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 4
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/burn/burn_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 5
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/burn/burn_02.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 3
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_02.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_03.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_04.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_05.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_06.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_back_07.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_forward_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_left_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_left_02.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_right_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_right_02.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/melee/forced_right_03.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/lower_body_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.1319
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/lower_body_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0000
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0084
				row 4
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/lower_body_inplace_02.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0431
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/upper_body_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0181
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_back/upper_body_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.1154
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/chest_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0273
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/chest_in_place_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0660
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/fall_cycle_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 0
				locked 0
				string "full_body"
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/gut_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0570
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/gut_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0996
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_arm_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.1506
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_arm_in_place_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 0.9798
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_leg_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.1107
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/left_leg_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0445
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_arm_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.2033
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_arm_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.2044
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_leg_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0672
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/right_leg_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0552
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_front/upper_body.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0677
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/lower_body_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0997
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/lower_body_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0498
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/upper_body_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.1645
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_left/upper_body_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.2243
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/lower_body_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.2042
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/lower_body_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.2755
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/upper_body_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.1280
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
		anim "md6/characters/monsters/zombie_tier1/base/motion/death/stationary/hit_right/upper_body_inplace_01.md6anim" {
			event "ae_goreEnableByName" {
				frame 0.0010
				row 2
				locked 0
				string "full_body"
			}
			event "ae_startRagdoll" {
				frame 1.0916
				row 3
				locked 0
				int 0
				int 0
				int 0
			}
			event "ae_detonateSelf" {
				frame 0.5000
				row 1
				locked 0
				explosion ""
			}
			event "ae_radiusDamage" {
				frame 0.0000
				row 1
				locked 0
				damage "damage/ai/zombie/cueball"
				string "full_body"
			}
		}
```

# Bullet Casing Collision

##### gameresources\_patch1\\generated\\decls\\md6def\\md6def\\objects\\weapons\\heavy\\chaingun.md6.decl

<p class="callout info">Bullet casings should not spawn because they have collision with the hitscan tracers.</p>

```
		anim "md6/objects/weapons/heavy/chaingun/motion/player/human/base/core/shootstate_into.md6anim" {
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 0.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 4.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 8.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 12.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 16.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 20.0000
				row 0
			}
		}
		anim "md6/objects/weapons/heavy/chaingun/motion/player/human/base/core/shootstate_01.md6anim" {
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 0.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 4.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 8.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 12.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 16.0000
				row 0
			}
			event "ae_fireWeaponRightPrimaryOnly" {
				frame 20.0000
				row 0
			}
		}
		anim "md6/objects/weapons/heavy/chaingun/motion/player/human/base/core/turretmode_shootstate_01.md6anim" {
			event "ae_fireWeaponRightSecondaryOnly" {
				frame 0.0000
				row 0
			}
			event "ae_fireWeaponRightSecondaryOnly" {
				frame 4.0000
				row 0
			}
			event "ae_fireWeaponRightSecondaryOnly" {
				frame 8.0000
				row 0
			}
			event "ae_fireWeaponRightSecondaryOnly" {
				frame 12.0000
				row 0
			}
			event "ae_fireWeaponRightSecondaryOnly" {
				frame 16.0000
				row 0
			}
			event "ae_fireWeaponRightSecondaryOnly" {
				frame 20.0000
				row 0
			}
		}
```

# Sync Melee

##### gameresources\_patch1\\generated\\decls\\entitydef\\syncmelee\\pinky\_3p.decl

<p class="callout info">Pinky Spectres need to be added as a third-person participant.</p>

```
{
	inherit = "syncmelee/base";
	editorVars {
		placeable = false;
	}
	edit = {
		renderModelInfo = {
			model = "md6def/objects/syncentities/3p_syncentity11.md6";
		}
		syncAnim = "animweb/syncmelee/pinky_3p/null/null";
		animWeb = "animweb/syncmelee/pinky_3p";
		thirdPersonParticipants = {
			num = 6;
			item[0] = {
				instance = "";
				entityDef = "player";
				attachJointName = "attach00";
				target = "";
				spawnAction = "SPAWN_NEVER";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_instigator";
			}
			item[1] = {
				instance = "";
				entityDef = "objects/gore/gorekit/gorekit";
				attachJointName = "attach02";
				target = "";
				spawnAction = "SPAWN_IF_HAS_ANIMATION";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_helper";
				type = "HELPER";
			}
			item[2] = {
				instance = "";
				entityDef = "ai/heavy/pinky";
				attachJointName = "attach01";
				target = "";
				spawnAction = "SPAWN_NEVER";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				type = "TARGET";
				animSetName = "thirdPerson_target";
			}
			item[3] = {
				instance = "";
				entityDef = "objects/weapons/melee/chainsaw_3p";
				attachJointName = "attach03";
				target = "";
				spawnAction = "SPAWN_IF_HAS_ANIMATION";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND_AND_HIDE";
				clearWhenFinished = true;
				animSetName = "thirdPerson_helper";
				type = "HELPER";
			}
			item[4] = {
				instance = "";
				entityDef = "objects/weapons/melee/crucible_3p";
				attachJointName = "attach04";
				target = "";
				spawnAction = "SPAWN_IF_HAS_ANIMATION";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND_AND_HIDE";
				clearWhenFinished = true;
				animSetName = "thirdPerson_helper";
				type = "HELPER";
			}
			item[5] = {
				instance = "";
				entityDef = "ai/heavy/pinky_spectre";
				attachJointName = "attach01";
				target = "";
				spawnAction = "SPAWN_NEVER";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				type = "TARGET";
				animSetName = "thirdPerson_target";
			}
		}
		firstPersonModelOverride = "objects/syncentities/syncentity11.md6";
		thirdPersonSyncEntityAnimSetName = "thirdPerson";
		thirdPersonFallbackAnim = "animweb/syncmelee/pinky_3p/kill_front_head";
	}
}
```

##### gameresources\_patch1\\generated\\decls\\entitydef\\syncmelee\\soldier\_blaster\_3p.decl

<p class="callout info">Riot Soldiers need to be added as a third-person participant.</p>

```
{
	inherit = "syncmelee/base";
	editorVars {
		placeable = false;
	}
	edit = {
		renderModelInfo = {
			model = "md6def/objects/syncentities/3p_syncentity11.md6";
		}
		syncAnim = "animweb/syncmelee/soldier_blaster_3p/null/null";
		animWeb = "animweb/syncmelee/soldier_blaster_3p";
		thirdPersonParticipants = {
			num = 7;
			item[0] = {
				instance = "";
				entityDef = "player";
				attachJointName = "attach00";
				target = "";
				spawnAction = "SPAWN_NEVER";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_instigator";
			}
			item[1] = {
				instance = "";
				entityDef = "objects/gore/gorekit/gorekit";
				attachJointName = "attach02";
				target = "";
				spawnAction = "SPAWN_IF_HAS_ANIMATION";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_helper";
				type = "HELPER";
			}
			item[2] = {
				instance = "";
				entityDef = "ai/fodder/soldier_blaster";
				attachJointName = "attach01";
				target = "";
				spawnAction = "SPAWN_NEVER";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				type = "TARGET";
				animSetName = "thirdPerson_target";
			}
			item[3] = {
				instance = "";
				entityDef = "ai/fodder/soldier_shield";
				attachJointName = "attach01";
				target = "";
				spawnAction = "SPAWN_NEVER";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_target";
				type = "TARGET";
			}
			item[4] = {
				instance = "";
				entityDef = "objects/weapons/melee/chainsaw_3p";
				attachJointName = "attach03";
				target = "";
				spawnAction = "SPAWN_IF_HAS_ANIMATION";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_helper";
				type = "HELPER";
			}
			item[5] = {
				instance = "";
				entityDef = "objects/weapons/melee/crucible_3p";
				attachJointName = "attach04";
				target = "";
				spawnAction = "SPAWN_IF_HAS_ANIMATION";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND_AND_HIDE";
				clearWhenFinished = true;
				animSetName = "thirdPerson_helper";
				type = "HELPER";
			}
			item[6] = {
				instance = "";
				entityDef = "ai/fodder/soldier_chaingun";
				attachJointName = "attach01";
				target = "";
				spawnAction = "SPAWN_NEVER";
				showAction = "SHOW_WITH_ANIM";
				attachAction = "ATTACH_SIMULATE_BIND";
				finishAction = "FINISHACTION_UNBIND";
				clearWhenFinished = true;
				animSetName = "thirdPerson_target";
				type = "TARGET";
			}
		}
		firstPersonModelOverride = "objects/syncentities/syncentity11.md6";
		thirdPersonSyncEntityAnimSetName = "thirdPerson";
		thirdPersonFallbackAnim = "animweb/syncmelee/soldier_blaster_3p/kill_front_upper";
	}
}
```

# Entities

This chapter contains required and recommended changes to entities.

# Game Challenges

### Co-op  


```
entity {
	entityDef coop_game_challenge {
	inherit = "info/game_challenge/battlearena";
	class = "idGameChallenge_PVP";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		networkSerializeTransforms = false;
		modeFlags = {
			allowRespawning = true;
			allowBulletPenetration = false;
		}
		difficultySettings = {
			playerIncomingDamageScale = "campaign/playerincomingdamage";
			aiIncomingDamageScale = "campaign/aiincomingdamage";
			healthPickupScale = "campaign/healthpickup";
			armorPickupScale = "campaign/armorpickup";
			ammoPickupScale = "campaign/ammopickup";
			bfgAmmoPickupScale = "campaign/bfgammopickup";
			healthDropScale = "campaign/healthdrop";
			armorDropScale = "campaign/armordrop";
			ammoDropScale = "campaign/ammodrop";
			bfgAmmoDropScale = "campaign/bfgammodrop";
		}
		scoreLimit = 99;
		numLives = 0;
		numRounds = 99;
		actorModifierListDecl = "actormodifiers_pvp";
		gcGameEventCallouts = {
			slayerPowerWeapon = "pvp/combat_events/slayer_power_weapon";
			demonSummonedCallout = "pvp/combat_events/general_card_event";
			demonEffectCallout = "pvp/combat_events/general_card_event";
			demonEffectStatusTimer = "pvp/status_timers/demon_effect";
			demonQuickUse1Callout = "pvp/combat_events/general_card_event";
			demonQuickUse2Callout = "pvp/combat_events/general_card_event";
			damageBoostCallout = "pvp/combat_events/general_card_event";
			damageBoostStatusTimer = "pvp/status_timers/timer_damage_boost";
			hasteCallout = "pvp/combat_events/general_card_event";
			hasteStatusTimer = "pvp/status_timers/timer_haste";
			mitigationCallout = "pvp/combat_events/general_card_event";
			mitigationStatusTimer = "pvp/status_timers/timer_damage_mitigation";
			invulnerableCallout = "pvp/combat_events/general_card_event";
			invulnerableStatusTimer = "pvp/status_timers/timer_invulnerable";
			berserkCallout = "pvp/combat_events/general_card_event";
			berserkStatusTimer = "pvp/status_timers/timer_berserk";
			regenCallout = "pvp/combat_events/general_card_event";
			regenStatusTimer = "pvp/status_timers/timer_regeneration";
			lootBlockedCallout = "pvp/voiced/loot_blocked";
			lootBlockedStatusTimer = "pvp/status_timers/timer_loot_blocked";
			extraLifeCallout = "pvp/combat_events/general_card_event";
			demonCriticalHealth = "";
			demonCriticalRecovery = "pvp/voiced/demon_healed";
			slayerCriticalHealth = "pvp/voiced/slayer_health_critical";
			everyoneCritical = "main_heavy";
		}
		hitConfirmSoundsInfo = "default";
		characterStatusEventText = {
			invulnerableText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45053";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			toughenedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45054";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			vulnerableText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45055";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			strengthenedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45056";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			hastedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45057";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			slowedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45058";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			berserkingText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45059";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			lootBlockedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45060";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
		}
		aiSpawnPoolDecl = "maps/game/pvp/battlemode";
		enableBrinkOfDeath = true;
		desummonKillDamage = "damage/hazard/pvp_round_kill";
		slayerHighlightDecl = "pvp/demon_view_slayer_outline";
		demonHighlightDecl = "pvp/demon_view_slayer_outline";
		teammateHighlightDecl = "pvp/demon_view_slayer_outline";
		slayerHighlightLOSBoxDecl = "highlight_los_slayer";
		demonSpawnTargetEntity = "online/summon_target";
		demonSpawnTargetEntityOneHit = "online/summon_target_onehit";
		playerSpawnDef = "player";
		teamSuperSettings = {
			damageFactorAI = 9.99999975e-05;
			tickFactor = 0.00329999998;
		}
		playerAlwaysFullBodyGibs = true;
		maxPlayersPerTeam = {
			ptr = {
				ptr[0] = 1;
				ptr[1] = 2;
			}
		}
		demonOutlineColor = {
			g = 0.501960993;
		}
		demonAllyOutlineColor = {
			r = 1;
			g = 0.501960993;
			b = 0;
		}
		fillColorDemonSees = {
			r = 0.199999988;
			g = 0.199999988;
			b = 0.199999988;
			a = 0.850000024;
		}
		fillColorSlayerSees = {
			r = 0.199999988;
			g = 0.199999988;
			b = 0.199999988;
			a = 0.850000024;
		}
		fillColorHitFlash = {
			g = 0;
			b = 0;
			a = 0.501960993;
		}
		slayerHighlightOptions = {
			allyDemon = "EHM_ALWAYS";
			enemyDemon = "EHM_ALWAYS";
			allySlayer = "EHM_ALWAYS";
			enemySlayer = "EHM_ALWAYS";
		}
		demonHighlightOptions = {
			allyDemon = "EHM_ALWAYS";
			enemyDemon = "EHM_ALWAYS";
			allySlayer = "EHM_ALWAYS";
			enemySlayer = "EHM_ALWAYS";
		}
		raceToStyle = true;
		pvpGameEventCallouts = {
			roundOne = "";
			roundTwo = "";
			roundThree = "";
			roundFour = "";
			roundFinal = "";
			preMatchFiveSecondsRemaining = "";
			preMatchFourSecondsRemaining = "";
			preMatchThreeSecondsRemaining = "";
			preMatchTwoSecondsRemaining = "";
			preMatchOneSecondRemaining = "";
			roundStart = "";
			finalRound = "";
			demonsRoundLost = "";
			slayerRoundLost = "";
			slayerKilled = "pvp/voiced/slayer_killed";
			demonKilled = "pvp/voiced/slayer_killed";
			demonsKilled = "pvp/voiced/slayer_killed";
			slayerVictory = "";
			demonVictory = "";
			demonRespawningSoon = "";
			respawnFiveSecondsRemaining = "";
			respawnFourSecondsRemaining = "";
			respawnThreeSecondsRemaining = "";
			respawnTwoSecondsRemaining = "";
			respawnOneSecondRemaining = "";
			demonRespawned = "pvp/voiced/demon_resurrected";
			delayDuringSync = {
				num = 1;
				item[0] = "pvp/voiced/slayer_killed";
			}
		}
		jockeyTimeDuration = {
			value = 0;
		}
		roundCalloutTimeDuration = {
			value = 0.1;
		}
		roundStartCalloutDelaySec = {
			value = 0;
		}
		roundEndCalloutDelaySec = {
			value = 0;
		}
		upgradeUIDelaySec = {
			value = 0;
		}
		upgradeUIDuration = {
			value = 0;
		}
		matchEndCalloutDelaySec = {
			value = 0;
		}
		matchEndResultsDelaySec = {
			value = 0;
		}
		pvpProgressionScoringDecl = "battle_arena";
		pvpLifecycleManager = {
			podiumAvatarEntDefs = {
				num = 7;
				item[0] = "podiums/avatars/archvile";
				item[1] = "podiums/avatars/doom_marine";
				item[2] = "podiums/avatars/mancubus";
				item[3] = "podiums/avatars/pain_elemental";
				item[4] = "podiums/avatars/revenant";
				item[5] = "podiums/avatars/marauder";
				item[6] = "podiums/avatars/dreadknight";
			}
			podiumLayers = {
				num = 1;
				item[0] = "game/pvp/podium_stage";
			}
			slayerPodiumEntities = "pvp_match_slayer_podium_";
			demonPodiumEntities = "pvp_match_demon_podium_slot_";
			characterAnimBlendMS = 0;
			playerAppearSound = "play_pvp_staging_spawnin";
		}
		slayerPVPLoadoutDecl = "pvploadout/default";
		demonPVPLoadoutDecl = "pvpdemonloadout/default";
		respawnTimeSec = {
			branchPairs = {
				num = 1;
				item[0] = {
					branchKey = "CONTROLLERPAD_DECL";
					branchResult = {
						value = 0.1;
					}
				}
			}
		}
		respawnTimeCapSec = {
			defaultValue = {
				value = 0.1;
			}
			branchPairs = {
				num = 1;
				item[0] = {
					branchKey = "CONTROLLERPAD_DECL";
					branchResult = {
						value = 0.1;
					}
				}
			}
		}
		respawnStatusEffects = {
			num = 0;
		}
		idealRespawnDistanceFromSlayer = 0;
		slayerLayersToActivate = {
			num = 1;
			item[0] = "game/pvp/slayer_team";
		}
		demonLayersToActivate = {
			num = 1;
			item[0] = "game/pvp/demon_team";
		}
		layersToDeactivate = {
			num = 1;
			item[0] = "game/pvp/permanently_hidden";
		}
		musicWinState = "music_ghost_states/pvp_lose";
		musicLoseState = "music_ghost_states/pvp_lose";
		musicHealthCriticalState = "music_ghost_states/main_heavy";
		closeCallHealthThreshold = 50;
		clutchThreshold = 5;
		comebackThreshold = 3;
		surpriseTimeLimit = {
			value = 3;
		}
		surviveThreshold = 4;
		requiredPlayerCount = 2;
		respawnHealthScalar = 0.5;
		powerUpgradeRound = 99;
		soundOcclusionBypass = false;
		gameDifficulty = "DIFFICULTY_NIGHTMARE";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
	}
}
}

```

### Slayer vs Slayer  


```
entity {
	entityDef deathmatch_game_challenge {
	inherit = "info/game_challenge/battlearena";
	class = "idGameChallenge_PVP";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		networkSerializeTransforms = false;
		modeFlags = {
			allowRespawning = true;
			allowBulletPenetration = false;
		}
		scoreLimit = 3;
		numLives = 0;
		numRounds = 5;
		actorModifierListDecl = "actormodifiers_pvp";
		gcGameEventCallouts = {
			slayerPowerWeapon = "pvp/combat_events/slayer_power_weapon";
			demonSummonedCallout = "pvp/combat_events/general_card_event";
			demonEffectCallout = "pvp/combat_events/general_card_event";
			demonEffectStatusTimer = "pvp/status_timers/demon_effect";
			demonQuickUse1Callout = "pvp/combat_events/general_card_event";
			demonQuickUse2Callout = "pvp/combat_events/general_card_event";
			damageBoostCallout = "pvp/combat_events/general_card_event";
			damageBoostStatusTimer = "pvp/status_timers/timer_damage_boost";
			hasteCallout = "pvp/combat_events/general_card_event";
			hasteStatusTimer = "pvp/status_timers/timer_haste";
			mitigationCallout = "pvp/combat_events/general_card_event";
			mitigationStatusTimer = "pvp/status_timers/timer_damage_mitigation";
			invulnerableCallout = "pvp/combat_events/general_card_event";
			invulnerableStatusTimer = "pvp/status_timers/timer_invulnerable";
			berserkCallout = "pvp/combat_events/general_card_event";
			berserkStatusTimer = "pvp/status_timers/timer_berserk";
			regenCallout = "pvp/combat_events/general_card_event";
			regenStatusTimer = "pvp/status_timers/timer_regeneration";
			lootBlockedCallout = "pvp/voiced/loot_blocked";
			lootBlockedStatusTimer = "pvp/status_timers/timer_loot_blocked";
			extraLifeCallout = "pvp/combat_events/general_card_event";
			demonCriticalHealth = "pvp/voiced/demon_health_critical";
			demonCriticalRecovery = "pvp/voiced/demon_healed";
			slayerCriticalHealth = "pvp/voiced/slayer_health_critical";
		}
		hitConfirmSoundsInfo = "default";
		characterStatusEventText = {
			invulnerableText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45053";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			toughenedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45054";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			vulnerableText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45055";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			strengthenedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45056";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			hastedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45057";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			slowedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45058";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			berserkingText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45059";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
			lootBlockedText = {
				textId = "#str_decl_powerup_statuseffect_GHOST45060";
				color = {
					r = 0.87450999;
					g = 0.87450999;
					b = 0.87450999;
				}
			}
		}
		aiSpawnPoolDecl = "maps/game/pvp/battlemode";
		enableBrinkOfDeath = false;
		desummonKillDamage = "damage/hazard/pvp_round_kill";
		slayerHighlightDecl = "pvp/slayer_view_demon_outline";
		demonHighlightDecl = "pvp/demon_view_teammate_outline";
		teammateHighlightDecl = "pvp/demon_view_teammate_outline";
		slayerHighlightLOSBoxDecl = "highlight_los_slayer";
		demonSpawnTargetEntity = "online/summon_target";
		demonSpawnTargetEntityOneHit = "online/summon_target_onehit";
		playerSpawnDef = "player";
		teamSuperSettings = {
			damageFactorAI = 9.99999975e-05;
			tickFactor = 0.00329999998;
		}
		playerAlwaysFullBodyGibs = true;
		maxPlayersPerTeam = {
			ptr = {
				ptr[0] = 1;
				ptr[1] = 2;
			}
		}
		demonOutlineColor = {
			g = 0.501960993;
		}
		demonAllyOutlineColor = {
			r = 1;
			g = 0.501960993;
			b = 0;
		}
		fillColorDemonSees = {
			r = 0.199999988;
			g = 0.199999988;
			b = 0.199999988;
			a = 0.850000024;
		}
		fillColorSlayerSees = {
			r = 0.199999988;
			g = 0.199999988;
			b = 0.199999988;
			a = 0.850000024;
		}
		fillColorHitFlash = {
			g = 0;
			b = 0;
			a = 0.501960993;
		}
		slayerHighlightOptions = {
			allyDemon = "EHM_NONE";
			enemyDemon = "EHM_NONE";
			allySlayer = "EHM_ALWAYS";
			enemySlayer = "EHM_NONE";
		}
		demonHighlightOptions = {
			allyDemon = "EHM_ALWAYS";
			enemyDemon = "EHM_ALWAYS";
			allySlayer = "EHM_ALWAYS";
			enemySlayer = "EHM_ALWAYS";
		}
		raceToStyle = true;
		pvpGameEventCallouts = {
			roundOne = "pvp/voiced/round_one";
			roundTwo = "pvp/voiced/round_two";
			roundThree = "pvp/voiced/round_three";
			roundFour = "pvp/voiced/round_four";
			roundFinal = "pvp/voiced/final_round";
			preMatchFiveSecondsRemaining = "pvp/chimes/five";
			preMatchFourSecondsRemaining = "pvp/chimes/four";
			preMatchThreeSecondsRemaining = "pvp/chimes/three";
			preMatchTwoSecondsRemaining = "pvp/chimes/two";
			preMatchOneSecondRemaining = "pvp/chimes/one";
			roundStart = "pvp/voiced/fight";
			finalRound = "pvp/voiced/final_round";
			demonsRoundLost = "pvp/voiced/demons_round_lost";
			slayerRoundLost = "pvp/voiced/slayer_round_lost";
			slayerKilled = "pvp/voiced/slayer_killed";
			demonKilled = "";
			demonsKilled = "pvp/voiced/demons_killed";
			slayerVictory = "pvp/voiced/slayer_won_the_match";
			demonVictory = "pvp/voiced/demons_won_the_match";
			demonRespawningSoon = "pvp/voiced/demon_resurrecting_soon";
			respawnFiveSecondsRemaining = "pvp/chimes/resurrect_five";
			respawnFourSecondsRemaining = "pvp/chimes/resurrect_four";
			respawnThreeSecondsRemaining = "pvp/chimes/resurrect_three";
			respawnTwoSecondsRemaining = "pvp/chimes/resurrect_two";
			respawnOneSecondRemaining = "pvp/chimes/resurrect_one";
			demonRespawned = "pvp/voiced/demon_resurrected";
			delayDuringSync = {
				num = 3;
				item[0] = "pvp/voiced/slayer_killed";
				item[1] = "pvp/voiced/demons_won_the_match";
				item[2] = "pvp/voiced/slayer_round_lost";
			}
		}
		jockeyTimeDuration = {
			value = 5;
		}
		roundCalloutTimeDuration = {
			value = 3;
		}
		roundStartCalloutDelaySec = {
			value = 2;
		}
		upgradeUIDelaySec = {
			value = 0;
		}
		matchEndCalloutDelaySec = {
			value = 0;
		}
		matchEndResultsDelaySec = {
			value = 0;
		}
		pvpProgressionScoringDecl = "battle_arena";
		pvpLifecycleManager = {
			podiumAvatarEntDefs = {
				num = 7;
				item[0] = "podiums/avatars/archvile";
				item[1] = "podiums/avatars/doom_marine";
				item[2] = "podiums/avatars/mancubus";
				item[3] = "podiums/avatars/pain_elemental";
				item[4] = "podiums/avatars/revenant";
				item[5] = "podiums/avatars/marauder";
				item[6] = "podiums/avatars/dreadknight";
			}
			podiumLayers = {
				num = 1;
				item[0] = "game/pvp/podium_stage";
			}
			slayerPodiumEntities = "pvp_match_slayer_podium_";
			demonPodiumEntities = "pvp_match_demon_podium_slot_";
			characterAnimBlendMS = 0;
			playerAppearSound = "play_pvp_staging_spawnin";
		}
		slayerPVPLoadoutDecl = "pvploadout/default";
		demonPVPLoadoutDecl = "pvpdemonloadout/default";
		respawnTimeSec = {
			branchPairs = {
				num = 1;
				item[0] = {
					branchKey = "CONTROLLERPAD_DECL";
					branchResult = {
						value = 0;
					}
				}
			}
		}
		respawnTimeCapSec = {
			defaultValue = {
				value = 0;
			}
			branchPairs = {
				num = 1;
				item[0] = {
					branchKey = "CONTROLLERPAD_DECL";
					branchResult = {
						value = 0;
					}
				}
			}
		}
		respawnStatusEffects = {
			num = 0;
		}
		idealRespawnDistanceFromSlayer = 100;
		slayerLayersToActivate = {
			num = 1;
			item[0] = "game/pvp/slayer_team";
		}
		demonLayersToActivate = {
			num = 1;
			item[0] = "game/pvp/demon_team";
		}
		layersToDeactivate = {
			num = 1;
			item[0] = "game/pvp/permanently_hidden";
		}
		musicWinState = "music_ghost_states/pvp_win";
		musicLoseState = "music_ghost_states/pvp_lose";
		closeCallHealthThreshold = 50;
		clutchThreshold = 5;
		comebackThreshold = 3;
		surpriseTimeLimit = {
			value = 3;
		}
		surviveThreshold = 4;
		requiredPlayerCount = 2;
		soundOcclusionBypass = false;
	}
}
}

```

# Pickups

### Pickup

<p class="callout info">For non-respawning pickups, only use the idProp2/idMover entities.</p>

#### idProp2

<p class="callout warning">Remove the **bindInfo** if this is a self-respawning pickup.</p>

```
entity {
	entityDef deathmatch_pickup_mega_health_1 {
	inherit = "pickup/health/large";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true; // Must be true
	disableAIPooling = false;
	edit = {
		bindInfo = { // remove if self-respawning pickup
			bindParent = "deathmatch_pickup_mega_health_1_offset_mover"; // fixes entity offset
		}
		renderModelInfo = {
			model = "art/pickups/health/megaHealth_head_a.lwo";
			contributesToLightProbeGen = false;
			noAmbient = true;
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
			emissiveColor = {
				r = 0;
				g = 0.913725019;
			}
			emissiveScale = 3;
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ITEMS_SPAWNED";
				increase = 1;
			}
		}
		equipOnPickup = true;
		lootStyle = "LOOT_TOUCH";
		triggerDef = "trigger/props/megahealth";
		isStatic = true;
		canBePossessed = true;
		fxDecl = "pickups/megahealth_head";
		useableComponentDecl = "mega_health";
		sound_spawn = "play_pickup_loop_05";
		sound_stop = "stop_pickup_loop_05";
		pickup_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_HEALTH_PICKUP";
				increase = 1;
			}
		}
		spawnPosition = { // Be sure to set the spawn position
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Be sure to set the spawn orientation
			mat = {
				mat[0] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = -1;
					z = 0;
				}
			}
		}
		targets = {
			num = 1;
			item[0] = "deathmatch_pickup_mega_health_1_respawn_relay"; // Activates relay to start respawn process
		}
		isLootDrop = true; // Must be true
	}
}
}

```

#### idMover

<p class="callout success">Optional, but will fix the entity offset for the pickup. However, the pickup's spawn orientation will revert to its default value.</p>

```
entity {
	entityDef deathmatch_pickup_mega_health_1_offset_mover {
	inherit = "func/mover";
	class = "idMover";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Be sure to set the spawn position
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // The spawn orientation does not matter
			mat = {
				mat[0] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = -1;
					z = 0;
				}
			}
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = NULL;
		}
	}
}
}
```

### Respawning Pickups  


#### Target Spawn

```
entity {
	entityDef deathmatch_pickup_mega_health_1_respawn {
	inherit = "target/spawn";
	class = "idTarget_Spawn";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnConditions = {
			maxCount = 0;
			reuseDelaySec = 0;
			doBoundsTest = false;
			boundsTestType = "BOUNDSTEST_NONE";
			fovCheck = 0;
			minDistance = 0;
			maxDistance = 0;
			neighborSpawnerDistance = -1;
			LOS_Test = "LOS_NONE";
			playerToTest = "PLAYER_SP";
			conditionProxy = "";
		}
		spawnEditableShared = {
			groupName = "";
			deathTrigger = "";
			coverRadius = 0;
			maxEnemyCoverDistance = 0;
		}
		entityDefs = {
		num = 1;
		item[0] = {
			name = "deathmatch_pickup_mega_health_1"; // Activates respawning pickup
		}
}
		conductorEntityAIType = "SPAWN_AI_TYPE_ANY";
		initialEntityDefs = {
			num = 0;
		}
		spawnEditable = {
			spawnAt = "";
			copyTargets = false;
			additionalTargets = {
				num = 0;
			}
			overwriteTraversalFlags = true;
			traversalClassFlags = "CLASS_A";
			combatHintClass = "CLASS_ALL";
			spawnAnim = "";
			aiStateOverride = "AIOVERRIDE_TELEPORT";
			initialTargetOverride = "";
		}
		portal = "";
		targetSpawnParent = "";
		disablePooling = false;
		spawnPosition = { // Be sure to set the spawn position
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Be sure to set the spawn orientation
			mat = {
				mat[0] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = -1;
					z = 0;
				}
			}
		}
	}
}
}

```

#### Relay

```
entity {
	entityDef deathmatch_pickup_mega_health_1_respawn_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1; // Activates on one count
		spawnPosition = { // Spawn position is not important
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "deathmatch_pickup_mega_health_1_respawn"; // Activates target spawn
		}
        delay = 15; // Must have a delay
		repeat = true; // Can activate again
	}
}
}

```

# Chainsaw Pickups

### Info

<p class="callout info">Chainsaw fuel pickups cannot be picked-up after a client has already picked-up 2 of them in the same map.</p>

<p class="callout warning">This method will give ALL Slayers +1 fuel pickup when one Slayer tries to pickup a fuel canister.</p>

#### idDynamicEntity

```
entity {
	entityDef coop_pickup_ammo_gas_1_fake {
	inherit = "func/dynamic";
	class = "idDynamicEntity"; // This is the fuel canister model
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Be sure to set the spawn position
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Be sure to set the spawn orientation
			mat = {
				mat[0] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = -1;
					z = 0;
				}
			}
		}
		renderModelInfo = {
			model = "art/pickups/ammo/ammo_chainsaw_01.lwo";
			contributesToLightProbeGen = false;
			ignoreDesaturate = true;
			emissiveScale = 0.2;
			scale = {
				x = 2;
				y = 2;
				z = 2;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
		}
		dormancy = {
			canBecomeDormant = true;
		}
	}
}
}
```

#### idTrigger

```
entity {
	entityDef coop_pickup_ammo_gas_1_trigger {
	inherit = "trigger/trigger";
	class = "idTrigger";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Set the spawn position to same as the idDynamicEntity
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 2;
				y = 2;
				z = 2;
			}
		}
		targets = {
			num = 1;
			item[0] = "coop_pickup_ammo_gas_1_fake_timeline"; // Targets the removal or respawn timeline
		}
		playerCanActivate = true;
		clientCanActivate = true;
		triggerForAllClients = true;
		triggerOnEnter = true;
		triggerOnce = true; // Set to false for respawning pickup
		wait = 0; // Add a wait timer for respawning pickup
	}
}
}
```

### Global SFX / Give Fuel

<p class="callout info">A separate relay entity must exist once to activate the sound effect &amp; give fuel ammo command.</p>

```
entity {
	entityDef multiplayer_chainsaw_refill_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 2;
			item[0] = "multiplayer_chainsaw_refill"; // Ammo refill
			item[1] = "multiplayer_chainsaw_refill_sfx"; // Sound effect
		}
		repeat = true; // Must be true
	}
}
}
```

```
entity {
	entityDef multiplayer_chainsaw_refill_sfx {
	inherit = "sound/soundentity";
	class = "idSoundEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		temporarySoundEvent = true;
		spawnPosition = { // The spawn position does not matter
			x = 1;
			y = 1;
			z = 1;
		}
		soundOcclusionBypass = true;
		startEvents = {
			num = 1;
			item[0] = "play_pickup_ammo_chainsaw";
		}
		stopEvents = {
			num = 1;
			item[0] = "play_pickup_ammo_chainsaw";
		}
	}
}
}
```

```
entity {
	entityDef multiplayer_chainsaw_refill {
	class = "idTarget_Command";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		commandText = "give ammo/sharedammopool/fuel"; // Be sure to set the ammo count to 1 for this decl
		spawnPosition = { // The spawn position does not matter
			x = 1;
			y = 1;
			z = 1;
		}
	}
}
}
```

### Removal Timeline / Relay

```
entity {
	entityDef coop_pickup_ammo_gas_1_fake_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true; // Must be true
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "coop_pickup_ammo_gas_1_fake_remove"; // Remove relay
					events = {
						num = 1;
						item[0] = {
							eventTime = 100;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
				item[1] = {
					entity = "multiplayer_chainsaw_refill_relay"; // SFX & give fuel relay
					events = {
						num = 1;
						item[0] = {
							eventTime = 100;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}
```

```
entity {
	entityDef coop_pickup_ammo_gas_1_fake_remove {
	inherit = "target/remove";
	class = "idTarget_Remove";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "coop_pickup_ammo_gas_1_fake"; // Removes the chainsaw canister model
		}
	}
}
}
```

### Respawn Timeline / Relay

```
entity {
	entityDef coop_pickup_ammo_gas_1_fake_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true; // Must be true
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "coop_pickup_ammo_gas_1_fake_relay"; // Respawn relay
					events = {
						num = 2;
						item[0] = {
							eventTime = 100;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
						item[1] = {
							eventTime = 30000; // Show fuel cansiter render model after 30 seconds
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
				item[1] = {
					entity = "multiplayer_chainsaw_refill_fuck_you_relay"; // SFX & give fuel relay
					events = {
						num = 1;
						item[0] = {
							eventTime = 100;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}
```

```
entity {
	entityDef coop_pickup_ammo_gas_1_fake_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "coop_pickup_ammo_gas_1_fake"; // Show/Hide fuel canister render model
		}
		repeat = true; // Must be true
	}
}
}
```

# Resetting Encounter Managers

<p class="callout info">If you want Encounter Managers to reset when a round ends (all players die on either team), you will need to setup a unique exit trigger for every **idEncounterManager** entity. The **round\_end** entity must target the exit trigger.</p>

#### idEncounterTrigger\_Exit

```
entity {
	entityDef multiplayer_reset_encounter_on_round_end {
	inherit = "encounter/trigger/exit";
	class = "idEncounterTrigger_Exit";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // The spawn position does not matter
			x = 0;
			y = 0;
			z = 0;
		}
		triggerOnce = false; // Must be false
		resetScriptOnExit = true; // Must be true
	}
}
}
```

#### round\_end

<p class="callout success">This entity will always activate so long as the entityDef name is unchanged.</p>

```
entity {
	entityDef round_end { // Do not change the entityDef name
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		count = 1;
		delay = 0;
		call = "";
		repeat = true; // Must be true
		checkLiveActivator = false;
		adjustFor16msFrames = false;
		selfActivateDelay = -1;
		waitInterval = 0;
		delayMin = -1;
		delayMax = -1;
		spawnPosition = { // The spawn position does not matter
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 2;
			item[0] = "multiplayer_reset_encounter_on_round_end"; // Exit trigger
			item[1] = "invasion_ambient_music_1_new"; // Recommended to target a new ambient music timeline
		}
	}
}
}
```

#### idEncounterManager

```
entity {
	entityDef coop_encounter_manager_test_1 {
	inherit = "encounter/manager";
	class = "idEncounterManager";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		enableAIHighlightOnFinish = false;
		disabledAITypeForHighlight = "AI_MONSTER_SPECTRE AI_MONSTER_BUFF_POD AI_MONSTER_TENTACLE";
		playerMetricDef = "encounter/player_metrics";
		chargeCombatGrouping = "encounter/combat_role/charge_command";
		aiTypeDefAssignments = "actorpopulation/default/default_no_bosses";
		spawnPosition = { // The spawn position does not matter
			x = 0;
			y = 0;
			z = 0;
		}
		combatRatingScale = "COMBAT_RATING_SCALE_IGNORE";
		encounterComponent = {
			entityEvents = {
				num = 1;
				item[0] = {
					entity = "coop_encounter_manager_test_1"; // Must match the entityDef name
					events = {
						num = 1;
						item[0] = {
							eventCall = {
								eventDef = "designerComment";
								args = {
									num = 2;
									item[0] = {
										string = "This is a test encounter";
									}
									item[1] = {
										bool = true;
									}
								}
							}
						}
					}
				}
			}
		}
		exitTriggers = {
			num = 1; // Must be present in addition to the encounter's normal exit trigger
			item[0] = "multiplayer_reset_encounter_on_round_end";
		}
	}
}
}
```

# Music

### Event Call

```
item[0] = {
	eventCall = {
		eventDef = "activateTarget";
		args = {
			num = 2;
			item[0] = {
				entity = "heavy_music_timeline_1";
			}
			item[1] = {
				string = "activate heavy music";
			}
		}
	}
}

```

### Entities

```
entity {
	entityDef heavy_music_timeline_1 {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 1;
				item[0] = {
					entity = "heavy_music_relay_1";
					events = {
						num = 2;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowOnClients = true;
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

```

```
entity {
	entityDef heavy_music_relay_1 {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "heavy_music_1";
		}
		repeat = true;
	}
}
}

```

```
entity {
	entityDef heavy_music_1 {
	inherit = "sound/musicentity";
	class = "idMusicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		initialState = "music_ghost_states/main_heavy";
		initialSwitchGroup = "music_ghost_switch";
		initialSwitchState = "doom_hunter_music";
	}
}
}

```

# Doors

### Door

```
entity {
	entityDef interact_doors_cultist_wide_01_1 {
	inherit = "interact/doors/cultist_wide_01";
	class = "idInteractable_Obstacle";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		soundOffset = {
			z = 1.5;
		}
		whenToSave = "SGT_CHECKPOINT";
		flags = {
			skipRenderModelReplication = true;
		}
		dormancy = {
			distance = 100;
			playerDistance = 120;
			playerRearwardDistance = 80;
		}
		fxDecl = "gameplay/invasion/demon_door";
		interaction = {
			initalState = "interactables/door/normal/locked";
			interactionGraph = "interactables/door";
			stateData = {
				num = 1;
				item[0] = {
					stateName = "interactables/door/normal/locked";
				}
			}
			transitionData = {
				num = 12;
				item[0] = {
					transitionName = "needs_key_To_unlocked_open";
					additionalWaitMs = 1000;
					playSoundOnTransition = "play_doomhunter_widedoor_open_unlocked";
				}
				item[1] = {
					transitionName = "unlocked_To_unlocked_open";
					playSoundOnTransition = "play_doomhunter_widedoor_open";
				}
				item[2] = {
					transitionName = "unlocked_open_To_unlocked";
					playSoundOnTransition = "play_doomhunter_widedoor_close";
				}
				item[3] = {
					transitionName = "locked_To_locked_open";
					playSoundOnTransition = "play_doomhunter_widedoor_open";
				}
				item[4] = {
					transitionName = "locked_open_To_locked";
					playSoundOnTransition = "play_doomhunter_widedoor_close";
				}
				item[5] = {
					transitionName = "unlocked_open_To_locked";
					playSoundOnTransition = "play_doomhunter_widedoor_close";
				}
				item[6] = {
					transitionName = "locked_To_locked_fail";
				}
				item[7] = {
					transitionName = "needs_key_To_needs_key_failed";
				}
				item[8] = {
					transitionName = "locked_To_unlocked";
				}
				item[9] = {
					transitionName = "unlocked_To_locked";
				}
				item[10] = {
					transitionName = "start_locked_To_locked";
				}
				item[11] = {
					transitionName = "locked_To_stay_open";
				}
			}
			animWebDecl = "animweb/interact/doors/cultist_wide_01";
		}
		touchData = {
			retouchDelaySec = 0.5;
			triggerDef = "trigger/interact/cultist_wide_01_square";
		}
		stateColors = {
			num = 8;
			item[0] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "start_locked";
			}
			item[1] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "activate_to_unlock";
			}
			item[2] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "locked";
			}
			item[3] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_red";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_red";
					}
				}
				state = "needs_key";
			}
			item[4] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "unlocked";
			}
			item[5] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "locked_open";
			}
			item[6] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "unlocked_open";
			}
			item[7] = {
				colorScale = 5;
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/tile/glow/doorglow_a";
						to = "art/tile/glow/doorglow_green";
					}
					item[1] = {
						from = "art/tile/glow/doorglow_b";
						to = "art/tile/glow/doorglow_blue";
					}
				}
				state = "stay_open";
			}
		}
		collisionPieces = {
			num = 4;
			item[0] = {
				meshName = "collision";
				jointName = "collision_joint";
			}
			item[1] = {
				meshName = "collision1";
				jointName = "collision1_joint";
			}
			item[2] = {
				meshName = "collision2";
				jointName = "collision2_joint";
			}
			item[3] = {
				meshName = "collision3";
				jointName = "collision3_joint";
			}
		}
		blockerBoundsExpandDists = {
			x = 0.100000001;
			y = 1;
			z = 0.100000001;
		}
		stateObstacleData = {
			num = 16;
			item[0] = {
				statePath = "interactables/door/normal/activate_to_unlock";
				obstacleReachability = true;
			}
			item[1] = {
				statePath = "interactables/door/normal/locked";
				obstacleReachability = true;
			}
			item[2] = {
				statePath = "interactables/door/normal/locked_fail";
				obstacleReachability = true;
			}
			item[3] = {
				statePath = "interactables/door/normal/locked_open";
			}
			item[4] = {
				statePath = "interactables/door/normal/needs_key";
				obstacleReachability = true;
			}
			item[5] = {
				statePath = "interactables/door/normal/needs_key_failed";
				obstacleReachability = true;
			}
			item[6] = {
				statePath = "interactables/door/normal/start_locked";
				obstacleReachability = true;
			}
			item[7] = {
				statePath = "interactables/door/normal/stay_open";
			}
			item[8] = {
				statePath = "interactables/door/normal/unlocked";
			}
			item[9] = {
				statePath = "interactables/door/normal/unlocked_open";
			}
			item[10] = {
				statePath = "interactables/door/oneWay/oneWay_closed";
				obstacleReachability = true;
			}
			item[11] = {
				statePath = "interactables/door/oneWay/oneWay_lock_fail";
				obstacleReachability = true;
			}
			item[12] = {
				statePath = "interactables/door/oneWay/oneWay_locked";
				obstacleReachability = true;
			}
			item[13] = {
				statePath = "interactables/door/oneWay/oneWay_open";
			}
			item[14] = {
				statePath = "interactables/door/oneWay/oneWay_open_fail";
				obstacleReachability = true;
			}
			item[15] = {
				statePath = "interactables/door/oneWay/oneWay_opened";
			}
		}
		dissolveDistance = 20;
		renderModelInfo = {
			model = "md6def/objects/doors/cultist_wide_door_01/cultist_wide_door_01.md6";
		}
		guiData = {
			swfFile = "swf/worldgui/guientity/1_interact_lock_default.swf";
			scale = 0.0850000009;
			initialCommands = {
				num = 1;
				item[0] = {
					commandType = "SPRITE_HIDE";
				}
			}
			positionOffset = {
				x = 8;
				z = 25;
			}
		}
		umbraVisBlocking = "CAN_BLOCK";
		umbraSoundBlocking = "CAN_BLOCK";
		demonPlayerRenderModel = "art/objects/door/demon/cultist_wideDoor_01_demon.lwo";
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		demonPlayersPassThrough = false;
	}
}
}

```

### Open

```
entity {
	entityDef interact_doors_cultist_wide_01_1_open {
	inherit = "target/interact_action_door";
	class = "idTarget_InteractionAction";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			materialRemap = {
				num = 1;
				item[0] = {
					to = "art/tile/common/nodraw";
				}
			}
		}
		actionFilter = "interactionAction/door";
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		targets = {
			num = 1;
			item[0] = "interact_doors_cultist_wide_01_1";
		}
		action = "IA_DOOR_OPEN";
	}
}
}

```

### Replication

```
entity {
	entityDef interact_doors_cultist_wide_01_1_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "interact_doors_cultist_wide_01_1_relay";
					events = {
						num = 1;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
				item[1] = {
					entity = "interact_doors_cultist_wide_01_1_remove";
					events = {
						num = 1;
						item[0] = {
							eventTime = 2500;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

```

```
entity {
	entityDef interact_doors_cultist_wide_01_1_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "interact_doors_cultist_wide_01_1_open";
		}
		repeat = true;
	}
}
}

```

```
entity {
	entityDef interact_doors_cultist_wide_01_1_remove {
	inherit = "target/remove";
	class = "idTarget_Remove";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "interact_doors_cultist_wide_01_1";
		}
		repeat = true;
	}
}
}

```

# Shootables

### Shootable

<p class="callout info">Disable network replication</p>

```
entity {
	entityDef funky_shootable_1 {
	inherit = "func/shootable";
	class = "idTrigger_TakeDamage";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			model = "art/kit/gameplay/breakable_glow_b.lwo";
			scale = {
				x = 0.25;
				y = 0.25;
				z = 0.25;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 1.5;
				y = 1.5;
				z = 1.5;
			}
		}
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = -1;
					z = 0;
				}
				mat[1] = {
					x = 1;
					y = 0;
					z = 0;
				}
			}
		}
		wait = 0;
		triggerOnce = true;
		triggerForAllClients = true;
		playerCanActivate = false;
		deadAiCanActivate = false;
		allowZeroDamage = true;
		soundActivated = "play_shootable_activate";
		soundReady = "play_shootable_reset";
		fxDecl = "gameplay/shootable";
		weaponDamageType = "PLAYER_WEAPON_SHOTGUN_ PLAYER_WEAPON_SHOTGUN_FULL_AUTO_ PLAYER_WEAPON_SHOTGUN_FULL_AUTO_MASTERY_ PLAYER_WEAPON_SHOTGUN_STICKY_BOMB_ PLAYER_WEAPON_DOUBLE_BARRELED_SHOTGUN_ PLAYER_WEAPON_PLASMA_ PLAYER_WEAPON_PLASMA_HEATWAVE_ PLAYER_WEAPON_PLASMA_SUPERCHARGE_ PLAYER_WEAPON_PLASMA_ICE_BOMB_ PLAYER_WEAPON_HAR_ PLAYER_WEAPON_HAR_SCOPE_ PLAYER_WEAPON_HAR_MICROMISSLE_ PLAYER_WEAPON_ROCKETLAUNCHER_ PLAYER_WEAPON_ROCKETLAUNCHER_DETONATE_ PLAYER_WEAPON_ROCKETLAUNCHER_LOCKON_ PLAYER_WEAPON_BALLISTA_ PLAYER_WEAPON_BALLISTA_ARBALEST_ PLAYER_WEAPON_BALLISTA_DESTROYER_ PLAYER_WEAPON_CHAINGUN_ PLAYER_WEAPON_CHAINGUN_TURRET_ PLAYER_WEAPON_CHAINGUN_GATLING_ PLAYER_WEAPON_MEAT_HOOK_NAPALM_ PLAYER_WEAPON_BFG_ PLAYER_WEAPON_FRAG_ PLAYER_WEAPON_FRAG_GRENADE_ PLAYER_WEAPON_FRAG_GRENADE_CLUSTER_ PLAYER_WEAPON_FLAME_BELCH_ PLAYER_WEAPON_FLAME_BELCH_NAPALM_ PLAYER_WEAPON_PISTOL_ PLAYER_WEAPON_PISTOL_HAND_CANNON_ PLAYER_WEAPON_UNMAYKR_ PLAYER_WEAPON_MICROWAVE_MOD_";
		targets = {
			num = 1;
			item[0] = "funky_shootable_1_timeline";
		}
		dormancy = {
			allowDormancy = false;
			allowPvsDormancy = false;
		}
		keepAfterTriggerOnce = true;
	}
}
}

```

### Replication

```
entity {
	entityDef funky_shootable_1_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "funky_shootable_1_relay";
					events = {
						num = 1;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
				item[1] = {
					entity = "funky_shootable_1_remove";
					events = {
						num = 1;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

```

```
entity {
	entityDef funky_shootable_1_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "something_to_activate";
		}
		dormancy = {
			allowPvsDormancy = false;
		}
		delay = 0;
	}
}
}

```

```
entity {
	entityDef funky_shootable_1_remove {
	inherit = "target/remove";
	class = "idTarget_Remove";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "funky_shootable_1";
		}
		dormancy = {
			allowPvsDormancy = false;
		}
		delay = 0;
	}
}
}

```

# Breakable Walls

### Breakable Wall

```
entity {
	entityDef destructible_mall_wall_b_1 {
	inherit = "destructible/e2m1_nest/mall_wall_b";
	class = "idDestructible";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		whenToSave = "SGT_CHECKPOINT";
		flags = {
			skipRenderModelReplication = true;
		}
		soundOffset = {
			z = 1.5;
		}
		renderModelInfo = {
			emissiveColor = {
				r = 0;
				b = 0.0470587984;
			}
			emissiveScale = 6;
			model = "art/kit/hell_earth/walls/crack_mall_b_whole.lwo";
			acceptsDecals = true;
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 7.19999981;
				y = 1;
				z = 7.0999999;
			}
			numSides = 6;
		}
		soundOcclusionBypass = true;
		targetingDecl = NULL;
		fxDecl = "gameplay/invasion/demon_door";
		destructible = {
			idleCommands = {
				num = 1;
				item[0] = {
					time = 10000;
					command = "IDLE_COMMAND_BECOME_STATIC";
				}
			}
			decl = "destructible/e2m1_nest/mall_wall_b";
		}
		effectiveDamageTypes = {
			num = 1;
			item[0] = "damage/special/no_damage";
		}
		meleeOnDash = false;
		dissolveDistance = 20;
		demonPlayerRenderModel = "art/kit/hell_earth/walls/crack_mall_a_demon.lwo";
		umbraVisBlocking = "CAN_BLOCK";
		umbraSoundBlocking = "CAN_BLOCK";
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		dormancy = {
			playerDistance = 20;
			playerRearwardDistance = 20;
			allowDistanceDormancy = false;
			allowDormancy = true;
			allowPvsDormancy = false;
		}
		targets = {
			num = 1;
			item[0] = "destructible_mall_wall_b_1_timeline";
		}
		demonPlayersPassThrough = false;
	}
}
}

```

### Replication

```
entity {
	entityDef destructible_mall_wall_b_1_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 1;
				item[0] = {
					entity = "destructible_mall_wall_b_1_relay";
					events = {
						num = 1;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

```

```
entity {
	entityDef destructible_mall_wall_b_1_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "destructible_mall_wall_b_1";
		}
		repeat = false;
	}
}
}

```

# Bounce Pads

#### Dynamic Entity (Backer)

```
entity {
	entityDef invasion_bouncepad_back_1 {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Set the position roughly -0.2 (on the z axis) behind the emitter FX
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Backer should be laying on the ground
			mat = {
				mat[0] = {
					x = 0.707107;
					y = -0.707107;
					z = 0;
				}
				mat[1] = {
					x = 0.707107;
					y = 0.707107;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/hell/bridge/bridge_archPillar_a_divider.lwo";
			scale = { // Do not change the scale, it will break collision
				x = 0.66;
				y = 0.66;
				z = 0.5;
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/hell/bridge/bridge_archPillar_a_divider.lwo"; // Adds collision
		}
	}
}
}
```

#### Emitter FX (Slayer Team)

```
entity {
	layers {
		"game/pvp/slayer_team" // Only the Slayer can see this FX
	}
	entityDef invasion_bouncepad_fx_slayer_1 {
	inherit = "func/fx";
	class = "idEntityFx";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		spawnPosition = { // Position should be identical to the FX on the demon team
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		fxEffect = "gameplay/invasion/bounce_pad_slayer"; // Emitter is red
		spawnOrientation = { // Orientation should not be changed
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}
```

#### Emitter FX (Demon Team)

```
entity {
	layers {
		"game/pvp/demon_team" // Only Demon Players can see this FX
	}
	entityDef invasion_bouncepad_fx_slayer_1 {
	inherit = "func/fx";
	class = "idEntityFx";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		spawnPosition = { // Position should be identical to the FX on the slayer team
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
        automapPropertiesDecl = "invasion_bounce_demon";
		fxEffect = "gameplay/invasion/bounce_pad_demon"; // Emitter is purple
		spawnOrientation = { // Orientation should not be changed
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}
```

#### Bouncepad

```
entity {
	entityDef invasion_bouncepad_from_1 {
	inherit = "trigger/bounce_pad";
	class = "idTrigger_BouncePad";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		launchFX = "fx/bounce_pad/basic";
		spawnPosition = { // Position should be roughtly +1 (z axis) above the FX
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		renderModelInfo = {
			model = NULL;
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			clipModelName = "maps/game/sp/e1m3_cult/e1m3_cult/invasion_x_bouncepad_from_1";
			size = {
				x = 1.5;
				y = 1.5;
				z = 1;
			}
		}
		playerCanActivate = false; // Slayer cannot activate
		demonPlayerCanActivate = true; // Demon players can activate
		destination = "invasion_bouncepad_dest_1"; // Fly to this destination when activated
		launchSpeed = 32; // Speed demons will fly upwards
	}
}
}
```

#### Destination

```
entity {
	layers {
		"game/pvp/demon_team" // Only demon players can be launched
	}
	entityDef invasion_bouncepad_dest_1 {
	inherit = "info/bounce_destination";
	class = "idInfo_BounceDestination";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Increase z axis position close to the destination
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Orientation does not matter
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}
```

# Teleporters

#### Timeline

<p class="callout info">The timeline is only required for teleporter cooldowns.</p>

```
entity {
	layers {
		"game/pvp/demon_team" // Applies only to Demon Players
	}
	entityDef invasion_portal_timeline_1 {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false so cooldown is not shared globally
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "invasion_portal_fx_demon_1";
					events = {
						num = 2;
						item[0] = {
							eventCall = {
								eventDef = "hide"; // Hide 1st effect upon activation
								args = {
									num = 0;
								}
							}
						}
						item[1] = {
							eventTime = 5000;
							eventCall = {
								eventDef = "show"; // Show 1st effect after 5 seconds
								args = {
									num = 0;
								}
							}
						}
					}
				}
				item[1] = {
					entity = "invasion_portal_fx_demon_2";
					events = {
						num = 2;
						item[0] = {
							eventCall = {
								eventDef = "hide"; // Hide 2nd effect upon activation
								args = {
									num = 0;
								}
							}
						}
						item[1] = {
							eventTime = 5000;
							eventCall = {
								eventDef = "show"; // Show 2nd effect after 5 seconds
								args = {
									num = 0;
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true; // Must be true
		shouldForceTimelineFinish = true; // Must be true
	}
}
}
```

#### Dynamic Entity (Backer)

```
entity {
	entityDef invasion_portal_back_1 {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Set the spawn position roughly -0.2 (on the x or y axis) behind the portal FX
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Backer should be standing upright
			mat = {
				mat[0] = {
					x = 0;
					y = 0;
					z = -1;
				}
				mat[1] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 1;
					z = 0;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/hell/bridge/bridge_archPillar_a_divider.lwo";
			scale = { // Do not change the scale, it will break collision
				x = 0.66;
				y = 0.66;
				z = 0.5;
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/hell/bridge/bridge_archPillar_a_divider.lwo"; // Adds collision
		}
	}
}
}
```

#### Portal FX (Slayer Team)

```
entity {
	layers {
		"game/pvp/slayer_team" // Only the Slayer can see this FX
	}
	entityDef invasion_portal_fx_slayer_1 {
	inherit = "func/fx";
	class = "idEntityFx";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		spawnPosition = { // Position should be identical to the FX on the demon team
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Orientation should be identical to the FX on the demon team
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
					z = 0;
				}
				mat[1] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		flags = {
			hide = false;
		}
		fxEffect = "gameplay/invasion/teleporter_flat_demon"; // FX is red
	}
}
}
```

#### Portal FX (Demon Team)

```
entity {
	layers {
		"game/pvp/demon_team" // Only Demon Players can see this FX
	}
	entityDef invasion_portal_fx_demon_1 {
	inherit = "func/fx";
	class = "idEntityFx";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		spawnPosition = { // Position should be identical to the FX on the slayer team
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Orientation should be identical to the FX on the slayer team
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
					z = 0;
				}
				mat[1] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		flags = {
			hide = false;
		}
		fxEffect = "gameplay/invasion/teleporter_flat_slayer"; // FX is blue
	}
}
}
```

#### Teleporter

```
entity {
	layers {
		"game/pvp/demon_team" // Only demon players can use the teleporter
	}
	entityDef invasion_portal_from_1 {
	inherit = "trigger/teleporter";
	class = "idTrigger_Teleporter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false; // Must be false so cooldown is not shared globally
	disableAIPooling = false;
	edit = {
		clientCanActivate = true; // Must be true
		fxExtraCondition = "FX_EXTRA_COND_MAX";
		sounds = {
			activated = "play_arena_teleporter_use";
		}
		spawnPosition = { // Position should be close to the idDynamicEntity backer
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = { // Scale based on portal size
				x = 1;
				y = 3;
				z = 2;
			}
			clipModelName = NULL;
		}
		targets = {
			num = 1;
			item[0] = "invasion_portal_timeline_1"; // Activate the timeline to show and hide FX
		}
		dormancy = {
			playerDistance = 6;
			playerRearwardDistance = 6;
		}
		flags = {
			hide = false;
		}
		wait = 5; // Deactivate both teleporters for 5 seconds
		playerCanActivate = false; // Slayer cannot activate
		demonPlayerCanActivate = true; // Demon players can activate
		otherTeleporter = "invasion_portal_from_2"; // Deactivate this teleporter
		destination = "invasion_portal_dest_1"; // Go to this destination when activated
	}
}
}
```

#### Destination

```
entity {
	entityDef invasion_portal_dest_1 {
	inherit = "info/teleport_destination";
	class = "idInfo_TeleportDestination";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Position should be just foward of the opposing idTrigger_Teleporter
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = { // Orientation should be identical to the opposing idEntityFx
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
					z = 0;
				}
				mat[1] = {
					x = -1;
					y = 0;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 1;
				}
			}
		}
	}
}
}
```

# Triggers

### Trigger

```
entity {
	entityDef trigger_volume_1 {
	inherit = "trigger/trigger";
	class = "idTrigger";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		demonPlayerCanActivate = true;
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		renderModelInfo = {
			model = NULL;
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 5;
				y = 5;
				z = 5;
			}
		}
		targets = {
			num = 1;
			item[0] = "trigger_volume_1_timeline";
		}
		wait = 0;
		triggerOnce = true;
	}
}
}

```

### Replication

```
entity {
	entityDef trigger_volume_1_timeline {
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = {
			entityEvents = {
				num = 1;
				item[0] = {
					entity = "trigger_volume_1_relay";
					events = {
						num = 1;
						item[0] = {
							eventTime = 250;
							eventCall = {
								eventDef = "activate";
								args = {
									num = 1;
									item[0] = {
										entity = "";
									}
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

```

```
entity {
	entityDef trigger_volume_1_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		count = 1;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		targets = {
			num = 1;
			item[0] = "something_to_activate";
		}
		repeat = true;
	}
}
}

```

# Gorilla Bars

### Entity  


<p class="callout info">Disable network replication.</p>

```
entity {
	entityDef game_interact_vault_pipe_1 {
	inherit = "interact/vault/pipe";
	class = "idTrigger_GorillaBar";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		renderModelInfo = {
			model = "art/test/monkey_bar_a.lwo";
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = -11.11;
			y = -11.11;
			z = -11.11;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/test/monkey_bar_a.lwo";
		}
		animOffsetAdjust = {
			x = -1;
		}
	}
}
}

```

# Startup Commands

#### Add this to "shell.entities" and trigger with a logic entity

```
entity {
	entityDef mapstart_commands {
	class = "idTarget_Command";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		commandText = "pvp_lobby_showFullMapList 1; net_gameserver_enable 0; net_maxRate 100; g_havokHeapLimitMB 200; g_damageScaleAItoDP 4; g_damageScaleSlayertoSlayer 0; g_damageScaleSlayertoDP 0; g_damageScaleDPtoSlayer 0; pm_disableWalkingOnTheEdgeOfLedge 0; warning_disable general; warning_disable anim";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
	}
}
}
```

<p class="callout info">Command details</p>

- **pvp\_lobby\_showFullMapList 1** - Shows entire map list if non PVP maps are added
- **net\_gameserver\_enable 0** - Enables local hosting
- **net\_maxRate 100** - Reduces likelihood of crashes
- **g\_havokHeapLimitMB 200** - Reduces likelihood of crashes
- **g\_damageScaleAItoDP 4** - Multiplies AI damage to Demon Players by x4 (x2 more than Nightmare difficulty, remove for Invasion/SVS)
- **g\_damageScaleSlayertoSlayer 0** - Slayers cannot damage other Slayers (remove for Invasion/SVS)
- **g\_damageScaleSlayertoDP 0** - Slayers cannot damage other Demon Players (remove for Invasion/SVS)
- **g\_damageScaleDPtoSlayer 0** - Demon Players cannot damage other Slayers (remove for Invasion/SVS)
- **pm\_disableWalkingOnTheEdgeOfLedge 0** - Movement is no longer negated when moving off a ledge
- **warning\_disable general** - Removes warning spam in the console
- **warning\_disable anim** - Removes warning spam in the console