# Eternal - 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/eternal-command-console/page/commands-cmd) before proceeding.</p>

<p class="callout warning">When starting DOOM Eternal from the launcher on Steam, launch the main version of DOOM Eternal, and *not* "Play DOOM Eternal with Mods". The latter specifically refers to the official idMods format and bears no relevance to the community mod injector format. This will run a separate version of the game that does not support multiplayer.</p>

### How to Play

- How to Install Mods (general guide): [https://wiki.eternalmods.com/books/eternal-how-to-install-mods/page/how-to-install-mods-doom-eternal](https://wiki.eternalmods.com/books/eternal-how-to-install-mods/page/how-to-install-mods-doom-eternal "https://wiki.eternalmods.com/books/eternal-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 select a map in the lobby menu to instantly load all players into the map. Alternatively, players may ready-up with mods that require 3 players such BATTLEMODE &amp; [**INVASION**](https://www.nexusmods.com/doometernal/mods/1103)**.**
- The host may execute a console command to load into a map for testing purposes. Here is an example of a command to load into a multiplayer map: `<strong>loadDevMenuOption devmenuoption/pvp 7 1</strong>`   
    *This command will load the Torment map from BATTLEMODE.*

You can learn more about loading into BATTLEMODE maps here: [https://wiki.eternalmods.com/books/eternal-command-console/page/load-battlemode-maps](https://wiki.eternalmods.com/books/eternal-command-console/page/load-battlemode-maps "https://wiki.eternalmods.com/books/eternal-command-console/page/load-battlemode-maps")  
Multiplayer modding guides: [https://wiki.eternalmods.com/books/eternal-multiplayer-modding](https://wiki.eternalmods.com/books/eternal-multiplayer-modding "https://wiki.eternalmods.com/books/eternal-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/eternal-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/eternal-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/eternal-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/eternal-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/eternal-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/eternal-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
- All Slayer Gate arenas

# 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/eternal-command-console/page/commands-cmd)
- [Console Variables (CVAR)](https://wiki.eternalmods.com/books/eternal-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";
	}
}
```

# Lobby map list

##### gameresources\_patch2\\generated\\decls\\pvpmapselectinfolist\\casualbattlearenamaplist.decl

<p class="callout info">The list of maps selectable in the lobby menu.</p>

```
{
	edit = {
		mapSelectList = {
			num = 9;
			item[0] = {
				mapName = "maps/game/pvp/pvp_laser/pvp_laser.map";
				mapInfo = "game/pvp/pvp_laser/pvp_laser";
			}
			item[1] = {
				mapName = "maps/game/pvp/pvp_deathvalley/pvp_deathvalley.map";
				mapInfo = "game/pvp/pvp_deathvalley/pvp_deathvalley";
			}
			item[2] = {
				mapName = "maps/game/pvp/pvp_inferno/pvp_inferno.map";
				mapInfo = "game/pvp/pvp_inferno/pvp_inferno";
			}
			item[3] = {
				mapName = "maps/game/pvp/pvp_thunder/pvp_thunder.map";
				mapInfo = "game/pvp/pvp_thunder/pvp_thunder";
			}
			item[4] = {
				mapName = "maps/game/pvp/pvp_zap/pvp_zap.map";
				mapInfo = "game/pvp/pvp_zap/pvp_zap";
			}
			item[5] = {
				mapName = "maps/game/pvp/pvp_bronco/pvp_bronco.map";
				mapInfo = "game/pvp/pvp_bronco/pvp_bronco";
			}
			item[6] = {
				mapName = "maps/game/pvp/pvp_shrapnel/pvp_shrapnel.map";
				mapInfo = "game/pvp/pvp_shrapnel/pvp_shrapnel";
			}
			item[7] = {
				mapName = "maps/game/pvp/pvp_darkmetal/pvp_darkmetal.map";
				mapInfo = "game/pvp/pvp_darkmetal/pvp_darkmetal";
			}
			item[8] = {
				mapName = "maps/game/pvp/pvp_sideswipe/pvp_sideswipe.map";
				mapInfo = "game/pvp/pvp_sideswipe/pvp_sideswipe";
			}
		}
	}
}
```

# Interactable switch fix.

##### e5m1\_spear/generated/decls/entitydef/trigger/interact/use\_panel.decl  


<p class="callout info">Add the **clientCanActivate = true;** line so that client slayers may activate switches.</p>

```
{
	class = "idTrigger";
	networkReplicated = false;
	edit = {
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 1.5;
				y = 1;
				z = 2;
			}
			offset = {
				x = 1.1;
			}
			ignoreUnfixCollisionOffsetBug = true;
		}
		triggerOnce = false;
		clientCanActivate = true;
	}
}
```

# 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

# GUI Map loading in 2 player mods.

#### Starting a 2 player game with the GUI

A DOOM Eternal mod can be optimized for 2 players. However, the ready up system will only work with 3 players in the lobby, so an alternative method of loading the maps is needed. The **loaddevmenuoption** console command can forcefully load a multiplayer mod even with 1 or 2 players. Since many players will not want to enter commands, this guide will outline a more convenient graphical method.

### Modifying the lobby menu to set a cvar.

HUD and menu modding in DOOM Eternal is very limited. While executing commands from a SWF is not known to be possible, there is an ActionScript function in Eternal's flash interpreter for setting Console Variables. Here's how to do this with Free Flash Decompiler:

- Open **swf/hud/menus/battle\_arena/lobby\_options.swf** as extracted from idStudio, or downloaded from a template version with the code for you.
- In the objects menu, navigate to scripts, item\_19.
- Click "Edit ActionScript" to enable the code editor
- Scroll down to **public function item\_19()** and ensure that **39,this.frame40,** is present in **addFrameScript** to ensure that the code gets executed. Some Flash editing software may add this automatically, but ffdec seems to not do this. **1,this.frame2,** and **77,this.frame78,** will also be needed for the two-column code.
- Add the following frame41 code block if it's not already present. Add the maps present in your mod, and give them a number to be used in the logic entity step later on in this guide.
- You may also wish to add the code blocks for frames 2 and 78. This code will split your map list into two columns, which may be optional or mandatory depending on how many maps are in your mod. If a mod contains too many levels, the list could get cut off the screen, so this code will make much better use of the available space. The line of code **this.wrapIndex = 8;** defines how many levels should be listed in the left columnm, with 0 being the first entry. So if, for example, you wanted the left column to contain only all 9 Battlemode maps, you would set this value to 8.
- Click Save in the code editor to apply the code, then click save on the ribbon menu to save the entire SWF file. A separate guide is linked below for using modded SWFs with the mod injector.

## Mandatory - code for cvar output.

```
internal function frame41() : *
      {
         if(this.label.txtVal.text == "Forsaken")
         {
            setCVarInteger("g_demonSelect",1);
         }
         if(this.label.txtVal.text == "Penance")
         {
            setCVarInteger("g_demonSelect",2);
         }
         if(this.label.txtVal.text == "Tundra")
         {
            setCVarInteger("g_demonSelect",3);
         }
	}
```

<p class="callout warning">The code will detect the string's contents, not the identifier. Either modify the strings referenced by the map info decls such that the maps have the same name consistently across localizations, or add individual translations to the ActionScript code. If you neglect this step, the code will not be effective for players that run the game in a language other than the one your multiplayer mod was tested with.</p>

<p class="callout success">**g\_demonSelect** was chosen because it does not have an impact on anything in the game engine, it appears to have only been added to be checked by the logic entity in the demon tutorial, which a player is not likely to enter while a multiplayer mod is installed.</p>

## Optional - code to split the map list into two columns.

```
      internal function frame2() : *
      {
         this.itemIndex = strReplace(this.name,"item","") * 1;
         this.wrapIndex = 8;
         if(this.itemIndex > this.wrapIndex)
         {
            if(this.x == 0)
            {
               this.x = 900;
               this.y -= 110 * (this.wrapIndex + 1);
            }
         }
      }
```

```
      internal function frame78() : *
      {
         this.itemIndex = strReplace(this.name,"item","") * 1;
         this.wrapIndex = 8;
         if(this.itemIndex > this.wrapIndex)
         {
            if(this.x == 0)
            {
               this.x = 900;
               this.y -= 110 * (this.wrapIndex + 1);
            }
         }
      }
```

### Editing the Logic Entity.

In the shell entities file, add an idTarget\_Command entity for each map to load using the **loaddevmenuoption** command. You should also add an [idTarget\_Command executing any variables that optimize your mod](https://wiki.eternalmods.com/books/eternal-multiplayer-modding/page/startup-commands) if you have not done so already. Append **g\_demonSelect 0** to it such that a map loading command does not get executed prematurely when the players exit a map back to the lobby menu. In the logic entity editor, add the following nodes to execute these command entities:

- A getConsoleVariable node to retrieve the integer value of **g\_demonSelect** set through the SWF code outlined earlier.
- A begin node that connects to an activate entities node to trigger your aforementioned console command entity containing your mod's optimizations.
- The logic entity has not been tested without the delay node, but the delay is probably necessary to prevent the game from locking up because the logic entity is intentionally looped indefinetely. It's recommend to set this to around 500 milliseconds or so for optimization while keeping the map selection responsive. The node activating your optimization command entity should trigger this node.
- An integer switch function: this is what actually acts upon the demon select cvar. It should be triggered by the delay node. Make sure that the 0 option loops back to the delay node, so that the check can keep running until the player selects an option.
- activate entity nodes to connect to each individual case, each listing an idTarget\_Command entity for loading a map.

## Optional - add a "random map" entry.

If your mod contains several levels, you can add options for selecting a random map, just for fun. In the logic entity editor's properties dialog, add a variable of the type **Entity/List**, and add all the target command entities. If desired, you can add multiple variables, for example, a separate option that picks only the Battlemode maps. Add your node for each custom variable you added. Connect your custom variable node to a get random entity node, then connect it's entity pin to another activate entity node, which is triggered by the corresponding integer that was added for the random option.

## See also

- [SWF modding](https://wiki.eternalmods.com/books/eternal-miscellaneous/page/swf-modding)