9. Multiplayer Modding

Information for playing and creating multiplayer mods such as modded Battlemode, Slayer vs Slayer, Co-op, and Invasion.

Getting Starting

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

Getting Starting

How to Play Multiplayer Mods

See Commands (CMD) before proceeding.

How to Play

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

Getting Starting

Network Issues

Game Issues

Host Issues

Client Issues

Getting Starting

Network Replication

About

NetworkReplicationOffsets.jpg

Entity offsets are roughly 0.6% closer to the coordinates of 0, 0, 0 for clients. The host does not experience this issue.

There are ways to work around entity offsets (see Entities). As of the current versions of modded multiplayer, only the AI suffer from entity offsets.

Maps with Non-Noticeable Offsets (xy < 300, z < 100)

Maps with Tolerable Offsets (xy < 800, z < 200)

Maps with Unplayable Offsets (xy > 800, z > 200)

Getting Starting

Useful Commands

Optimization

Development

Auto-Executing Commands on Game Launch

See Also

Decls

This chapter contains required and recommended changes to decl files.

Decls

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;
	}
}
Decls

Playable Demons

Info

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.

Co-op

Invasion

Decls

Projectiles

gameresources\generated\decls\projectile\projectile\player\chaingun_turret.decl

Add the following to fix the Mobile Turret infinite sound loop bug.

{
	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

Add the following to enable a flame FX for the host player whenever they use the Meathook.

{
	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

Add the following to fix some network issues with Sticky Bombs.

{
	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;
	}
}
Decls

Damage

gameresources_patch2\generated\decls\damage\damage\firearm\chaingun.decl

Apply changes to any desired damage decl.

{
	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;
						}
					}
				}
			}
		}
	}
}
Decls

Chainsaw

gameresources\generated\decls\damage\damage\melee\sync_kill_chainsaw.decl

Chainsaw will automatically give the player ammo instead of dropping ammo loot drops.

{
	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";
				}
			}
		}
	}
}
Decls

Lootdrops

The lootdropcomponent decls would need to be adjusted.

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;
	}
}
Decls

RenderParms

gameresources_patch1\generated\decls\fx\player\tp_body.decl

Green render highlight for Slayer vs Slayer.

			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

Purple render highlight for Invasion.

			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;
					}
				}
			}
Decls

FX

All of these changes reduce lag for client players.

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 = "";
				}
			}
Decls

Cursed Prowlers

e5m1_spear_patch2\generated\decls\aicomponent_prototypes\aicomponent\prowler_cursed.decl

Some of the curse effects do not apply to clients. This decl change will make it consistent for both host and client.

{
	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";
		}
	}
}
Decls

Screechers

e5m1_spear\generated\decls\md6def\md6def\characters\monsters\zombie_tier1\base\zombie_tier1_berserk.md6.decl

Additional FxConditions must trigger

		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
			}
		}

.

Decls

Tyrants

e5m1_spear\generated\decls\aimovementgraph\tyrant.decl

Tyrants should not be able to walk because that causes clients to crash.

{
	edit = {
	}
}
Decls

Cueballs

gameresources\generated\decls\md6def\md6def\characters\monsters\zombie_cueball\base\zombie_cueball.md6.decl

Cueballs should instantly explode on death.

		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"
			}
		}
Decls

Bullet Casing Collision

gameresources_patch1\generated\decls\md6def\md6def\objects\weapons\heavy\chaingun.md6.decl

Bullet casings should not spawn because they have collision with the hitscan tracers.

		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
			}
		}
Decls

Sync Melee

gameresources_patch1\generated\decls\entitydef\syncmelee\pinky_3p.decl

Pinky Spectres need to be added as a third-person participant.

{
	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

Riot Soldiers need to be added as a third-person participant.

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

Entities

This chapter contains required and recommended changes to entities.

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;
	}
}
}
Entities

Pickups

Pickup

For non-respawning pickups, only use the idProp2/idMover entities.

idProp2

Remove the bindInfo if this is a self-respawning pickup.

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

Optional, but will fix the entity offset for the pickup. However, the pickup's spawn orientation will revert to its default value.

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
	}
}
}
Entities

Chainsaw Pickups

Info

Chainsaw fuel pickups cannot be picked-up after a client has already picked-up 2 of them in the same map.

This method will give ALL Slayers +1 fuel pickup when one Slayer tries to pickup a fuel canister.

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

A separate relay entity must exist once to activate the sound effect & give fuel ammo command.

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
	}
}
}
Entities

Resetting Encounter Managers

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.

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

This entity will always activate so long as the entityDef name is unchanged.

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";
		}
	}
}
}
Entities

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";
	}
}
}
Entities

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;
	}
}
}
Entities

Shootables

Shootable

Disable network replication

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;
	}
}
}
Entities

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;
	}
}
}
Entities

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;
			}
		}
	}
}
}
Entities

Teleporters

Timeline

The timeline is only required for teleporter cooldowns.

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;
				}
			}
		}
	}
}
}
Entities

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;
	}
}
}
Entities

Gorilla Bars

Entity

Disable network replication.

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;
		}
	}
}
}
Entities

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;
		}
	}
}
}

Command details