Eternal - 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. How to Play Multiplayer Mods See Commands (CMD) before proceeding. When starting DOOM Eternal from the launcher on Steam, launch the main version of DOOM Eternal, and not "Play DOOM Eternal with Mods". The latter specifically refers to the official idMods format and bears no relevance to the community mod injector format. This will run a separate version of the game that does not support multiplayer. How to Play How to Install Mods (general guide): https://wiki.eternalmods.com/books/eternal-how-to-install-mods/page/how-to-install-mods-doom-eternal Get the latest version of the Eternal Mod Injector. Windows (Steam): https://gamebanana.com/tools/download/7475 Linux (Steam): https://github.com/leveste/EternalBasher/releases All players should have the same multiplayer-related mods installed (most addons are client-sided and not every player needs to have them installed). If a player has different or extra mods installed, their game may de-sync and crash. Texture, Model, String, & Audio mods should be unaffected. Everything in the "Overrides" folder must be removed if it exists. A player (the host) should create a private lobby and invite a friend or two (the clients). The host invite players by selecting the Social Menu ( P ) and finding their friend or favorite profiles. Some multiplayer mods only require 2 players, the mod author should specify this. Once all players are ready, the host should select a map in the lobby menu to instantly load all players into the map. Alternatively, players may ready-up with mods that require 3 players such BATTLEMODE & INVASION. The host may execute a console command to load into a map for testing purposes. Here is an example of a command to load into a multiplayer map: loadDevMenuOption devmenuoption/pvp 7 1 This command will load the Torment map from BATTLEMODE. You can learn more about loading into BATTLEMODE maps here: https://wiki.eternalmods.com/books/eternal-command-console/page/load-battlemode-maps Multiplayer modding guides: https://wiki.eternalmods.com/books/eternal-multiplayer-modding Network Issues Game Issues Players cannot access dossier to see the mini-map or change their runes. Take Back rune & Extra Lives do not work. Time-affecting runes and weapons will de-sync clients. Barrels may not explode properly. This is due to making them Network Replicated and treating them as a loot drop, which prevents idProp2 entities from crashing the game for clients. Host Issues Non-network replicated actions triggered by the host will not active for clients. Player Outlines and Nametags are invisible to the host. Outlines can be visible if they are static (do not disappear/reappear when breaking line of sight). Secondary Fire weapon projectile & hitscan attacks are invisible & inaudible to clients. Damage SFX can be added to damage decls for PvP modes so clients can hear the weapon if they are hit by one. Client Issues Chaingun Energy Shield weapon mod crashes the game. Ice Bomb equipment lags the game. Health/Armor for Blood crystal upgrades do not work. Certain Runes do not work consistently. Notably, time-affecting runes. Punchables and Shootables offer no visual feedback. Entity Offsets will shift AI closer to the world origin (0, 0, 0) by 0.6%. Chainsaw fuel pickups cannot be picked-up after a client has already picked-up 2 of them in the same map. Fuel pickups can be modified into give ammo triggers to oust this issue. Armored Barons crash the game when they strike a player with their mace attack & their armor does not appear. Blood Maykrs will not disable their shield when vulnerable even though they can be damaged and killed during the window. Cursed Prowlers can be killed and locked-onto when a client is cursed. The curse effect can be changed so the host and clients may undergo a similar experience. Tyrants will crash the game when they walk. The walking behavior can be disabled to oust this issue. Cueballs will not launch themselves when killed and may not explode. They can immediately explode in place so the host and clients will see the same effect. Spirits can only be targeted and killed by the host. Tentacles cannot be chainsawed. Network Replication About Most entities have either networkReplicated = false; or networkReplicated = true; near the top of the entity outside the edit field. They determine how entities are broadcasted to clients, but they often create many visual issues or crashes when set to true. For example: a network replicated door obstacle will have a positioning offset that is located at a slightly incorrect location for clients. The effect is greater the farther away the entity is from 0, 0, 0 or the world origin. This applies to every network replicated entity but the effects are gradually more noticeable from further distances. Network replicated entities located beyond the coordinates of x = 800, y = 800, z = 200 will be unplayable for clients. 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) All 9 BATTLEMODE maps Fortress of Doom Cultist Base Doom Hunter Base Intro Tram & Boss Stage2 arenas have tolerable offsets Super Gore Nest Arc Complex Taras Nabad Flooded & Crucible arenas have tolerable offsets The Blood Swamps Left-side arenas have tolerable offsets The Dark Lord Stage1 & Stage3 arenas have unplayable offsets Maps with Tolerable Offsets (xy < 800, z < 200) Hell on Earth Barge & Citadel areas have unplayable offsets Sentinel Prime Nekravol I Urdak Yellow Control Tower has borderline unplayable offsets Final Sin The Holt Possessed Tyrant arena & onward have unplayable offsets Reclaimed Earth Entire map has borderline unplayable offsets Maps with Unplayable Offsets (xy > 800, z > 200) Exultia Sentinel section has tolerable offsets Mars Core Nekravol II UAC Atlantica Facility Intro arena to Red Key arena have tolerable offsets The World Spear Intro Village section has tolerable offsets Immora All Slayer Gate arenas Useful Commands Optimization restartMapWithLobby Can be executed by the host to restart the entire map for all players in the party. exitShellLobby Can be execute by the host to leave the match and retain all players within their party, so long as the clients do not select ACCEPT in the warning menu. disconnect Can be executed by clients to leave the match and stay in the party, so long as the clients do not select ACCEPT in the warning menu. g_havokHeapLimitMB 200 Can be executed by any player to increase the havok limit (how much geo can do things simultaneously) which may prevent some crashes. net_maxRate 100 Can be executed by any player to increase the network rate which may decrease latency. com_adaptiveTickMaxHz 120 Can be executed by any player to cap their frame limit to 120 FPS. This has proven to mitigate random crashes. Development pvp_skipReadyUp 1 Can be executed by the host to bypass the "waiting for players" event on map start. Leaving this enabled with other players may create issues for clients. pvp_skipReadyUp 0 Can be executed by the host to enable the "waiting for players" event. ai_faction_overrideEmotion_ai 0 Can be executed by the host to stop all AI from attacking much like the "notarget" command. ai_faction_overrideEmotion_ai -1 Can be executed by the host to enable normal AI aggression towards players and other AI. warning_disable all Can be executed by any player to disable the barrage of warnings in the console. warning_enable all Can be executed by any player to enable all warnings. Restarting the game will also enable all warnings. Auto-Executing Commands on Game Launch You can input commands as a new line into the candidate.cfg file within the DOOMEternal\base folder to auto-execute them when the game launches. Below is an example of DOOMEternal's installation file path for Windows. C:\Program Files (x86)\Steam\steamapps\common\DOOMEternal\base\candidate.cfg The candidate.cfg file can execute other config files with the exec NameOfFile.cfg command added as a new line. See Also Commands (CMD) Console Variables (CVAR) Decls This chapter contains required and recommended changes to decl files. Playable Slayers Replace Archvile actorModifier to Slayer gameresources_patch1\generated\decls\actormodifier\actormodifier\pvp\demon\archvile.decl { edit = { displayName = "#str_decl_actormodifier_become_slayer_name_GHOST53519"; description = "#str_decl_actormodifier_become_slayer_desc_GHOST53520"; entityDef = "player"; pvpNormalUpgrades = "slayer/normal_upgrades"; pvpPowerUpgrades = "slayer/normal_upgrades"; uiSlot = "SLOT_DEMON"; uiIcon = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud"; uiIconAlt = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud_dead"; uiIconLarge = "art/ui/pvp_playericons/ico_pvp_players_doomguy"; playableCharacter = "slayer"; pvpTutorialCvarValue = 4; } } Slayer entityDef gameresources_patch1\generated\decls\entitydef\player.decl { class = "idPlayer"; networkReplicated = true; disableAIPooling = false; editorVars { rotatable = false; showOrientation = false; showFixedBox = false; skipRenderModelInEditor = false; showInRenderMode = false; placeable = false; color = ( 1, 1, 1, 1 ); size = ( 0, 0, 0 ); originOffset = ( 0, 0, 0 ); material = ""; translucent = false; editorName = ""; description = ""; } edit = { automapPropertiesDecl = "player"; flags = { takedamage = true; skipRenderModelReplication = true; } renderModelInfo = { model = "md6def/characters/humans/male/base/doom_marine_3p.md6"; scale = { x = 1; y = 1; z = 1; } lightRigDecl = "player/doom_marine_3p"; } clipModelInfo = { type = "CLIPMODEL_CYLINDER"; size = { x = 1; y = 1; z = 1; } numSides = 6; } validPlayerKillRecipient = true; killerNames = { num = 1; item[0] = "#str_decl_damage_self_inflicted_GHOST81048"; } targetingDecl = "player/default"; fxDecl = "player/player"; forcedAdditionalSphereContents = "CONTENTS_AIAWARE"; actorConstants = { perception = { eyeOffset = { z = 1.63800001; } crouchedEyeOffset = { z = 0.610000014; } } actorSounds = { sndFootsteps = "play_md6_editor_footstep"; } footstepEffectTable = "impacteffect/footsteps/player"; footstepEffectTable_Sprint = "impacteffect/footsteps/player_sprint"; footstepEffectTable_SlowWalk = "impacteffect/footsteps/player_slowwalk"; footstepEffectTable_CrouchWalk = "impacteffect/footsteps/player_slowwalk"; footstepEffectTable_Landing = "impacteffect/landings/player"; footstepEffectTable_HeavyLanding = "impacteffect/landings/player_heavy"; wallClimbEffectTable_AttachToWall_Left = "impacteffect/wall climb/wall_climb_attach"; wallClimbEffectTable_AttachToWall_Right = "impacteffect/wall climb/wall_climb_attach_righthand"; wallClimbEffectTable_JumpOffWall = "impacteffect/wall climb/wall_climb_jump_off_wall"; wallClimbEffectTable_ClimbMoving_Left = "impacteffect/wall climb/wall_climb"; wallClimbEffectTable_ClimbMoving_Right = "impacteffect/wall climb/wall_climb"; monkeyBarEffectTable_Start = "impacteffect/monkey bar/monkey_bar_on"; monkeyBarEffectTable_Stop = "impacteffect/monkey bar/monkey_bar_off"; weaponFolyForImpactList = { num = 7; item[0] = { weaponFolyTable = "impacteffect/weapon_foley_player/chaingun"; weaponForFoly = "weapon/player/chaingun"; } item[1] = { weaponFolyTable = "impacteffect/weapon_foley_player/shotgun"; weaponForFoly = "weapon/player/shotgun"; } item[2] = { weaponFolyTable = "impacteffect/weapon_foley_player/super_shotgun"; weaponForFoly = "weapon/player/double_barrel"; } item[3] = { weaponFolyTable = "impacteffect/weapon_foley_player/plasma"; weaponForFoly = "weapon/player/plasma_rifle"; } item[4] = { weaponFolyTable = "impacteffect/weapon_foley_player/heavy_cannon"; weaponForFoly = "weapon/player/heavy_cannon"; } item[5] = { weaponFolyTable = "impacteffect/weapon_foley_player/rocket_launcher"; weaponForFoly = "weapon/player/rocket_launcher"; } item[6] = { weaponFolyTable = "impacteffect/weapon_foley_player/gauss"; weaponForFoly = "weapon/player/gauss_rifle"; } } footstepEvents = "footstepevents/default"; waterInteraction = { emissionRate = 0.100000001; } } afProperties = { articulatedFigure = "human/doom_marine_3p"; } actorEditable = { entityDamageComponent = { entityDamage = "entitydamage/player"; } radiusDamageJoints = { num = 4; item[0] = "head_part01_md"; item[1] = "spine_part04_md"; item[2] = "leg_lower_rt"; item[3] = "leg_lower_lf"; } } factionName = "player"; startingInventory = { num = 11; item[0] = { inventoryDecl = "weapon/player/shotgun"; } item[1] = { inventoryDecl = "weapon/player/rocket_launcher"; } item[2] = { inventoryDecl = "weapon/player/chaingun"; } item[3] = { inventoryDecl = "weapon/player/double_barrel"; } item[4] = { inventoryDecl = "weapon/player/heavy_cannon"; } item[5] = { inventoryDecl = "weapon/player/gauss_rifle"; } item[6] = { inventoryDecl = "weapon/player/plasma_rifle"; } item[7] = { inventoryDecl = "weapon/player/chainsaw"; } item[8] = { inventoryDecl = "abilities/environmentsuit"; } item[9] = { inventoryDecl = "abilities/grapplegloves"; } item[10] = { inventoryDecl = "jumpboots/base"; } } masterWeaponList = { num = 9; item[0] = "weapon/player/shotgun"; item[1] = "weapon/player/double_barrel"; item[2] = "weapon/player/heavy_cannon"; item[3] = "weapon/player/chaingun"; item[4] = "weapon/player/plasma_rifle"; item[5] = "weapon/player/gauss_rifle"; item[6] = "weapon/player/rocket_launcher"; item[7] = "weapon/player/bfg"; item[8] = "weapon/player/chainsaw"; } walkIKDecl = "walkik/human_player"; inventory = { conversionTable = "base"; autoConvertSimpleItems = true; autoConvertComplexItems = true; } playerAdditiveHandsAnims = { additiveCrouch = "additive/crouch"; additiveUnCrouch = "additive/uncrouch"; } thirdPersonBodyDefault = "player_tp_body_praetor"; thirdPersonBodyPraetor = "player_tp_body_praetor"; playableCharacter = "slayer"; handsModelDefault = "md6def/player/human/base/praetor.md6"; handsModelPraetor = "md6def/player/human/base/praetor.md6"; handsModelDefault_D1 = "md6def/player/human/base/praetor_d1.md6"; handsModelPraetor_D1 = "md6def/player/human/base/praetor_d1.md6"; handsModelDefaultShowHideMeshInfo = { meshesToHide = { num = 1; item[0] = "body"; } meshesToShow = { num = 1; item[0] = "arms"; } } handsModelPraetorShowHideMeshInfo = { meshesToHide = { num = 1; item[0] = "body"; } meshesToShow = { num = 2; item[0] = "arm_MESH"; item[1] = "knife_base_MESH"; } } handsModelDefault_D1ShowHideMeshInfo = { meshesToHide = { num = 1; item[0] = "body"; } meshesToShow = { num = 1; item[0] = "arms"; } } handsModelPraetor_D1ShowHideMeshInfo = { meshesToHide = { num = 1; item[0] = "body"; } meshesToShow = { num = 2; item[0] = "arm_MESH"; item[1] = "knife_base_MESH"; } } thirdPersonModelDefaultShowHideMeshInfo = { meshesToHide = { num = 1; item[0] = "launcher_low_base"; } } handsAnimWeb = "animweb/player/fp_hands"; handsAnimWeb_D1 = "animweb/player/fp_hands_d1"; handsFX = "player/fp_hands"; helmetModel = "md6def/player/human/base/helmet.md6"; normalBFG = "weapon/player/bfg"; hiddenBFG = "weapon/player/unmaykr"; weaponAutoSelectPriorityList = { num = 8; item[0] = "weapon/player/shotgun"; item[1] = "weapon/player/heavy_cannon"; item[2] = "weapon/player/plasma_rifle"; item[3] = "weapon/player/chaingun"; item[4] = "weapon/player/double_barrel"; item[5] = "weapon/player/gauss_rifle"; item[6] = "weapon/player/rocket_launcher"; item[7] = "weapon/player/chainsaw"; } handsHitReactionData = { animWebDecl = "animweb/player/fp_hands_hit_reactions"; defaultAnimWebSubWeb = "default"; defaultAnimWebState = "idle"; reactions = { num = 13; item[0] = { name = "generic_1"; animWebState = "generic_1"; descriptor = { anglePerturbDegs = 45; } } item[1] = { name = "generic_2"; animWebState = "generic_2"; descriptor = { anglePerturbDegs = 45; } } item[2] = { name = "melee_1"; animWebState = "melee_1"; descriptor = { type = "HANDSHITREACTION_MELEE"; allowWeaponAlphaOverride = false; } } item[3] = { name = "melee_2"; animWebState = "melee_2"; descriptor = { type = "HANDSHITREACTION_MELEE"; allowWeaponAlphaOverride = false; } } item[4] = { name = "explosive_1"; animWebState = "explosive_1"; descriptor = { type = "HANDSHITREACTION_EXPLOSIVE"; anglePerturbDegs = 45; strengthTable = "player/handsanimation/hitdirection/explosive"; allowWeaponAlphaOverride = false; } } item[5] = { name = "explosive_2"; animWebState = "explosive_2"; descriptor = { type = "HANDSHITREACTION_EXPLOSIVE"; anglePerturbDegs = 45; strengthTable = "player/handsanimation/hitdirection/explosive"; allowWeaponAlphaOverride = false; } } item[6] = { name = "fire_1"; animWebState = "fire_1"; descriptor = { type = "HANDSHITREACTION_FIRE"; anglePerturbDegs = 45; allowWeaponAlphaOverride = false; } } item[7] = { name = "fire_2"; animWebState = "fire_2"; descriptor = { type = "HANDSHITREACTION_FIRE"; anglePerturbDegs = 45; allowWeaponAlphaOverride = false; } } item[8] = { name = "pushed"; animWebState = "pushed"; impactReaction = "pushed_impact"; descriptor = { type = "HANDSHITREACTION_PUSHED"; anglePerturbDegs = 45; allowWeaponAlphaOverride = false; movementGraph = "player/handsanimation/hitdirection/pushed"; } } item[9] = { name = "pushed_impact"; animWebState = "pushed_impact"; descriptor = { type = "HANDSHITREACTION_NONE"; allowWeaponAlphaOverride = false; } } item[10] = { name = "lunge"; animWebState = "pushed"; impactReaction = "lunge_impact"; descriptor = { type = "HANDSHITREACTION_LUNGE"; allowWeaponAlphaOverride = false; movementGraph = "player/handsanimation/hitdirection/pushed"; } } item[11] = { name = "lunge_impact"; animWebState = "pushed_impact"; descriptor = { type = "HANDSHITREACTION_NONE"; allowWeaponAlphaOverride = false; } } item[12] = { name = "shotgunner_knockback"; descriptor = { type = "HANDSHITREACTION_SHOTGUNNER_KNOCKBACK"; allowWeaponAlphaOverride = false; movementGraph = "player/handsanimation/hitdirection/shotgunner_knockback"; } } } } playerBodyReactionData = { tpBodyDefaultPath = "player/tp_body/default/idle"; reactionsBase = { num = 34; item[0] = { name = "blastLarge"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useAlive = true; useDead = true; throwsPlayer = true; dontUseInWater = true; enable = false; rangeMax = 4.76300001; state_start = { name = "blastLarge start"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blastLargeFall"; } state_impactGround = { name = "blastLarge land"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blastLargeLand"; } state_impactGroundDead = { name = "blastLarge landDead"; tpBodyDestPath = "player/tp_body/blast/blastLargeLandDead"; tpBodyViaPath = "player/tp_body/blast/blastLargeLandDead_into"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[1] = { name = "blastLarge2"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useAlive = true; useDead = true; throwsPlayer = true; dontUseInWater = true; enable = false; rangeMax = 4.76300001; state_start = { name = "blastLarge2 start"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blastLargeFall"; } state_impactGround = { name = "blastLarge2 land"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blastLargeLand2"; } state_impactGroundDead = { name = "blastLarge2 landDead"; tpBodyDestPath = "player/tp_body/blast/blastLargeLandDead"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[2] = { name = "blastSmall"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useAlive = true; dontUseInWater = true; enable = false; rangeMax = 9.52500057; state_start = { name = "blastSmall start"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blastSmallFall"; } state_impactGround = { name = "blastSmall_land"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blastSmallLand"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[3] = { name = "blastSmall2"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useAlive = true; dontUseInWater = true; enable = false; rangeMax = 9.52500057; state_start = { name = "blast"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/blast"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[4] = { name = "death_generic"; type = "PLAYER_BODY_REACTION_DEATH"; useAlive = true; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; state_start = { name = "death_generic"; tpBodyDestPath = "player/tp_body/deaths/death_generic"; tpBodyViaPath = "player/tp_body/deaths/death_generic_into"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; reactionAlignToDir = false; } item[5] = { name = "deadBlast"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useDead = true; throwsPlayer = true; dontUseInWater = true; enable = false; state_start = { name = "deadBlastLarge start"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/blast/deadblastLargeFall"; } state_impactGround = { name = "deadblastLarge land"; tpBodyDestPath = "player/tp_body/blast/deadblastlargeland"; tpBodyViaPath = "player/tp_body/blast/deadblastlargeland_into"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[6] = { name = "fallDeath"; type = "PLAYER_BODY_REACTION_FALL"; useDead = true; offGroundOnly = true; dontUseInWater = true; state_start = { name = "fallDeath"; tpBodyDestPath = "player/tp_body/fall/fallDeath"; tpBodyViaPath = "player/tp_body/fall/fallDeath_into"; } reactionNumVariations = 6; reactionAlignToDir = false; } item[7] = { name = "poisonGasDeath"; type = "PLAYER_BODY_REACTION_POISON_GAS"; useDead = true; onGroundOnly = true; dontUseInWater = true; enable = false; state_start = { name = "poisonGasDeath"; tpBodyDestPath = "player/tp_body/poisonGas/poisonGasDeath"; tpBodyViaPath = "player/tp_body/poisonGas/poisonGasDeath_into"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; reactionAlignToDir = false; } item[8] = { name = "damage/stumble"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useAlive = true; useDead = true; throwsPlayer = true; dontUseInWater = true; enable = false; rangeMin = 4.76300001; rangeMax = 9.52500057; state_start = { name = "stumble start"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/base/damage/stumble"; } state_impactGround = { name = "blastLarge land"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/base/damage/stumble_land"; } state_impactGroundDead = { name = "stumble death"; tpBodyDestPath = "player/tp_body/base/damage/knockdown_dead_idle"; tpBodyViaPath = "player/tp_body/base/damage/knockdown_dead_into"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[9] = { name = "damage/knockdown"; type = "PLAYER_BODY_REACTION_EXPLOSIVE"; useAlive = true; useDead = true; throwsPlayer = true; dontUseInWater = true; needsPhysics = true; enable = false; rangeMax = 2.43799996; state_start = { name = "knockdown start"; tpBodyDestPath = "player/tp_body/base/default/idle"; tpBodyViaPath = "player/tp_body/base/damage/knockdown"; } state_impactGround = { name = "knockdown land"; tpBodyDestPath = "player/tp_body/base/default/idle"; tpBodyViaPath = "player/tp_body/base/damage/knockdown_land"; } state_impactGroundDead = { name = "knockdown death"; tpBodyDestPath = "player/tp_body/base/damage/knockdown_dead_idle"; } reactionNumDirs = "PLAYER_BODY_REACTION_NUMDIRS_4"; } item[10] = { name = "groundPound"; type = "PLAYER_BODY_REACTION_GROUND_POUND"; useAlive = true; throwsPlayer = true; dontUseInWater = true; enable = false; state_start = { name = "groundPound start"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/groundPound/groundPound"; } reactionAlignToDir = false; inhibitView = false; pitchConstraintDegs = 89; yawConstraintDegs = 45; } item[11] = { name = "heavyLanding"; type = "PLAYER_BODY_REACTION_HEAVY_LANDING"; useAlive = true; dontUseInWater = true; enable = false; state_start = { name = "heavyLanding"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/land/land_heavy"; } reactionAlignToDir = false; } item[12] = { name = "fireDeath"; type = "PLAYER_BODY_REACTION_FIRE"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "fireDeath"; tpBodyDestPath = "player/tp_body/deaths/death_fire"; } reactionAlignToDir = false; } item[13] = { name = "gibDeath"; type = "PLAYER_BODY_REACTION_GIB"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "blastDeath"; tpBodyDestPath = "player/tp_body/deaths/death_blast"; } reactionAlignToDir = false; } item[14] = { name = "gibDeathEasterEgg"; type = "PLAYER_BODY_REACTION_GIB"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; chanceToOccur = 0; enable = false; state_start = { name = "blastDeathEasterEgg"; tpBodyDestPath = "player/tp_body/deaths/death_blast_easter_egg"; } reactionAlignToDir = false; } item[15] = { name = "death_gib_lite"; type = "PLAYER_BODY_REACTION_GIB_LITE"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "blastDeathLite"; tpBodyDestPath = "player/tp_body/deaths/death_gib_lite"; } reactionAlignToDir = false; } item[16] = { name = "gibFalling"; type = "PLAYER_BODY_REACTION_GIB_FALLING"; useDead = true; offGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "gibFalling"; tpBodyDestPath = "player/tp_body/deaths/death_air_blast"; } reactionAlignToDir = false; } item[17] = { name = "massiveMeleeHitDeath"; type = "PLAYER_BODY_REACTION_MASSIVE_MELEE_HIT"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "massiveMeleeHitDeath"; tpBodyDestPath = "player/tp_body/deaths/death_massive_melee_hit"; } reactionAlignToDir = false; clipCameraMovement = false; } item[18] = { name = "sliceVerticalDeath"; type = "PLAYER_BODY_REACTION_SLICE_VERTICAL"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "sliceVerticalDeath"; tpBodyDestPath = "player/tp_body/deaths/death_slice_vertical"; } reactionAlignToDir = false; } item[19] = { name = "sliceHorizontalDeath"; type = "PLAYER_BODY_REACTION_SLICE_HORIZONTAL"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "sliceHorizontalDeath"; tpBodyDestPath = "player/tp_body/deaths/death_slice_horizontal"; } reactionAlignToDir = false; } item[20] = { name = "death_lava"; type = "PLAYER_BODY_REACTION_DEATH_LAVA"; useDead = true; enable = false; state_start = { name = "death_lava"; tpBodyDestPath = "player/tp_body/deaths/death_lava"; } reactionAlignToDir = false; } item[21] = { name = "death_lava_2"; type = "PLAYER_BODY_REACTION_DEATH_LAVA"; useDead = true; state_start = { name = "death_lava_2"; tpBodyDestPath = "player/tp_body/deaths/death_lava_2"; } reactionAlignToDir = false; } item[22] = { name = "airDeath"; type = "PLAYER_BODY_REACTION_DEATH"; useDead = true; offGroundOnly = true; needsPhysics = true; state_start = { name = "airDeath loop"; tpBodyDestPath = "player/tp_body/deaths/death_air_loop"; tpBodyViaPath = "player/tp_body/deaths/death_air_into"; } state_impactGround = { name = "airDeath impact"; tpBodyDestPath = "player/tp_body/deaths/death_air_impact"; } reactionAlignToDir = false; } item[23] = { name = "landSlam"; type = "PLAYER_BODY_REACTION_LAND_SLAM"; useAlive = true; dontUseInWater = true; state_start = { name = "landSlam"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/land/land_slam"; } reactionAlignToDir = false; } item[24] = { name = "landSlamAlt"; type = "PLAYER_BODY_REACTION_LAND_SLAM_ALT"; useAlive = true; dontUseInWater = true; state_start = { name = "landSlamAlt"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/land/land_slam_2019"; } reactionAlignToDir = false; } item[25] = { name = "returnFromHell"; type = "PLAYER_BODY_REACTION_RETURN_FROM_HELL"; useAlive = true; dontUseInWater = true; enable = false; state_start = { name = "landSlam"; tpBodyDestPath = "player/tp_body/default/idle"; tpBodyViaPath = "player/tp_body/return_from_hell/return_from_hell"; } reactionAlignToDir = false; } item[26] = { name = "death_electricity"; type = "PLAYER_BODY_REACTION_ELECTRICAL"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_electricity"; tpBodyDestPath = "player/tp_body/deaths/death_electricity"; } reactionAlignToDir = false; } item[27] = { name = "death_bite"; type = "PLAYER_BODY_REACTION_DEATH_BITE"; useDead = true; onGroundOnly = true; dontUseInWater = true; enable = false; state_start = { name = "death_bite"; tpBodyDestPath = "player/tp_body/deaths/death_bite"; } reactionAlignToDir = false; } item[28] = { name = "death_acid"; type = "PLAYER_BODY_REACTION_ACID"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_acid"; tpBodyDestPath = "player/tp_body/deaths/death_acid"; } reactionAlignToDir = false; } item[29] = { name = "death_decapitation"; type = "PLAYER_BODY_REACTION_DEATH_DECAPITATION"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_decapitation"; tpBodyDestPath = "player/tp_body/base/deaths/death_decapitation"; } reactionAlignToDir = false; } item[30] = { name = "death_run_over"; type = "PLAYER_BODY_REACTION_DEATH_RUN_OVER"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_run_over"; tpBodyDestPath = "player/tp_body/deaths/death_run_over"; } reactionAlignToDir = false; } item[31] = { name = "death_hole_in_chest"; type = "PLAYER_BODY_REACTION_DEATH_HOLE_IN_CHEST"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_hole_in_chest"; tpBodyDestPath = "player/tp_body/deaths/death_hole_in_chest"; } reactionAlignToDir = false; } item[32] = { name = "death_argent_arcs"; type = "PLAYER_BODY_REACTION_DEATH_ARGENT_ARCS"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_argent_arcs"; tpBodyDestPath = "player/tp_body/deaths/death_argent_arcs"; } reactionAlignToDir = false; } item[33] = { name = "death_xenon"; type = "PLAYER_BODY_REACTION_DEATH_XENON"; useDead = true; onGroundOnly = true; dontUseInWater = true; needsPhysics = true; enable = false; state_start = { name = "death_xenon"; tpBodyDestPath = "player/tp_body/deaths/death_xenon"; } reactionAlignToDir = false; } } } ignoreDirectionalDamageInPVP = true; weaponTargetingHighlightDecl = "highlight_outline"; highlightLOSBoxDecl = "highlight_los_slayer"; allowsSlayerHighlight = true; doom5Melee = { doomBladeDecl = "weapon/player/doomblade"; meleeIntervalMS = 500; meleeProjectile_Forward = "projectile/player/melee_d5_forward"; meleeProjectile_PowerStrike = "projectile/player/melee_d5_power_strike"; hitAnimRateScale = 0.75; damageForwardForMeleeLevel = { num = 3; item[0] = "damage/player/melee_d5_forward"; item[1] = "damage/player/melee_d5_forward_2"; item[2] = "damage/player/melee_d5_forward_3"; } areaEffectDelayMS = 200; powerStrikeLevels = { num = 1; item[0] = { chargeLevel = 60; chargeLevelSound = "play_power_strike_ready_full"; damageDecl = "damage/player/melee_d5_power_strike"; areaEffectDecl = "projectile_ent/player/melee_d5_power_strike_aoe"; } } powerStrikeChargeLevelSoundInterval = 500; } syncMelee = { syncGroups = { num = 1; item[0] = { syncInteractions = { num = 1; item[0] = "syncdeath/playerdeath/imp/front_armrip"; } } } thirdPersonRemoteInstigatorStatusEffect = "statuseffect/pvp/slayer/presentation_gk_invulnerability"; useLights = true; defaultLightParms = { lightDef = "light/sync_point"; offset = { z = 0.952000022; } fadeInSec = 0.5; fadeOutSec = 0.5; } soundParms = { startSound = "play_glory_kill_duck"; endSound = "play_glory_kill_off"; startSoundBerserk = "play_berserk_kill_duck"; endSoundBerserk = "play_berserk_kill_off"; startSoundCrucible = "play_berserk_kill_duck"; endSoundCrucible = "play_berserk_kill_off"; fadeInSec = 0.5; fadeOutSec = 0.5; } } minWeaponPoints = 7; minPraetorTokens = 6; resetCheckpointDeathsWhenShown = false; resetLevelDeathsWhenShown = false; numDeathsPerCheckpoint = 99999999; weaponPointTutorial = "tutorialevent/ingame_tutorial/spend_your_points_wp"; praetorTokenTutorial = "tutorialevent/ingame_tutorial/spend_your_points_pt"; weaponAndPraetorTutorial = "tutorialevent/ingame_tutorial/spend_your_points_wp_pt"; progressionTutorialCodex = "codex/tutorials/progression"; marauderKilledPlayerTutorial = "tutorialevent/ingame_tutorial/weak_point_marauder_death"; tyrantCrucibleDef = "cineractive/e2m2_base/tyrant_crucible_hammer/tyrant_crucible_hammer_sync"; archvileSyncDef = "cineractive/hammer_trailer/archvile_hammer_sync"; tcamViewShake = "advancedscreenviewshake/trailercam_shake"; uiResources = { dossierSuitBackground = "dossier/suit_background"; emberVideo = "dossier/ember"; dossierForegroundVideo = "dossier/foreground"; mainObjectiveVideo = "video/main_objective"; eolVideo = "dossier/ashforeground"; grenadeArrow = "textures/guis/hud/interior_damage/indicator_n"; grenadeIcon = "textures/guis/hud/interior_damage/d_grenade"; } waterValues = "slayer"; dashItemDecl = "ability_dash"; dodgeStats = { initialSpeedDuration = 0.0700000003; middleDuration = 0.0799999982; slowDownDuration = 0.100000001; initialVerticalSpeed = 0.0949999988; viewRollScalar = 4; } breadCrumbs = { ribbonSplinePath = "spline/path"; ribbonEffect = "breadcrumb"; ribbonSamples = 50; ribbonInitialHeight = 0.381000012; } dashboard = { radMeter = { decay = { decayRate = 1; } radShieldItemDecl = "map_objects/rad_shield_damage_decreases_shield"; radShieldItemDecl2 = "map_objects/rad_shield_time_decreases_shield"; radShieldRechargeItemDecl = "map_objects/rad_suit_refill_shield"; hazardInfoList = { num = 4; item[0] = { declDamage = "damage/hazard/slime"; noDamageTimeWithRadMS = 500; meterDecreasePerDamage = 0.100000001; } item[1] = { declDamage = "damage/hazard/water_toxic"; noDamageTimeWithRadMS = 500; meterDecreasePerDamage = 0.0599999987; } item[2] = { declDamage = "damage/hazard/slime_sac"; noDamageTimeWithRadMS = 500; meterDecreasePerDamage = 0.0500000007; } item[3] = { declDamage = "damage/hazard/poison_bog"; noDamageTimeWithRadMS = 500; meterDecreasePerDamage = 0.0799999982; } } fxDecl = "player/hazmat_shield"; startHazardSoundDecl = "play_rad_suit_lp"; stopHazardSoundDecl = "play_rad_suit_off"; meter25PercentSoundDecl = "play_rad_suit_low_warning_loop"; uiMeterScale = 100; } dashMeter = { maxValue = 100; maxValueSound = "play_dash_recharge"; playMaxValueSoundOnInit = false; pipMetering = { maxNumPips = 2; } deathBonus = 0; maxValueSoundRechargedFromEmpty = "play_dash_recharge_double"; } powerStrikeMeter = { maxValue = 100; maxValueSound = "play_power_strike_ready_full"; regeneration = { regenRate = 10; } debugBar = { x = 0.800000012; y = 0.800000012; width = 0.100000001; height = 0.00749999983; frameColor = { x = 0; y = 0; } barColor = { x = 0.75; y = 0.75; z = 0.75; } } } judgementMeter = { maxValue = 3; maxValueSound = "play_power_strike_ready_full"; pipMetering = { maxNumPips = 3; } regeneration = { regenRate = 0.699999988; } debugBar = { x = 0.800000012; y = 0.75; width = 0.150000006; height = 0.0199999996; frameColor = { x = 0; y = 0; w = 0.75; } barColor = { x = 0.75; y = 0.75; z = 0.75; w = 0.75; } } decayKillPips = 10; decayKillDemonCosts = { num = 6; item[0] = { monsterType = "AI_MONSTER_CUEBALL"; value = 0; } item[1] = { monsterType = "AI_MONSTER_TENTACLE"; value = 1; } item[2] = { monsterType = "AI_MONSTER_ZOMBIE_TIER_1 AI_MONSTER_ZOMBIE_TIER_3 AI_MONSTER_IMP AI_MONSTER_STONE_IMP AI_MONSTER_GARGOYLE AI_MONSTER_HELL_SOLDIER AI_MONSTER_SHOTGUN_SOLDIER AI_MONSTER_LOSTSOUL AI_MONSTER_MARAUDER_WOLF"; value = 1; } item[3] = { monsterType = "AI_MONSTER_ZOMBIE_MAYKR AI_MONSTER_PROWLER AI_MONSTER_CURSED_PROWLER AI_MONSTER_CARCASS"; value = 1; } item[4] = { monsterType = "AI_MONSTER_HELLKNIGHT AI_MONSTER_DREADKNIGHT AI_MONSTER_PINKY AI_MONSTER_SPECTRE AI_MONSTER_CACODEMON AI_MONSTER_PAIN_ELEMENTAL AI_MONSTER_MANCUBUS AI_MONSTER_CYBER_MANCUBUS AI_MONSTER_ARACHNOTRON AI_MONSTER_REVENANT AI_MONSTER_WHIPLASH AI_MONSTER_BLOOD_ANGEL"; value = 1; } item[5] = { monsterType = "AI_MONSTER_DOOM_HUNTER AI_MONSTER_MARAUDER AI_MONSTER_BARON AI_MONSTER_TYRANT AI_MONSTER_ARCHVILE"; value = 1; } } useDecayKillDemonCosts = true; regenRequiresInactive = true; } oxygenMeter = { regeneration = { regenRate = 2; } oxygenSuitItemDecl = "map_objects/dive_suit_damage_decreases_oxygen"; oxygenSuitRechargeItemDecl = "map_objects/dive_suit_refill_oxygen"; hazardInfoList = { num = 4; item[0] = { declDamage = "damage/hazard/water_deep"; noDamageTimeWithSuitMS = 600; meterDecreasePerDamage = 0.0500000007; } item[1] = { declDamage = "damage/hazard/water_deep_increased"; noDamageTimeWithSuitMS = 500; meterDecreasePerDamage = 0.100000001; } item[2] = { declDamage = "damage/hazard/water_toxic"; noDamageTimeWithSuitMS = 500; meterDecreasePerDamage = 0.0500000007; } item[3] = { declDamage = "damage/hazard/water_toxic_increased"; noDamageTimeWithSuitMS = 500; meterDecreasePerDamage = 0.0500000007; } } fxDecl = "player/hazmat_shield"; meter25PercentSoundDecl = "play_rad_suit_low_warning_loop"; uiMeterScale = 100; oxygenRegenDelay = { value = 2; } } notificationManager = { notificationDefs = { num = 88; item[0] = "hud/codex"; item[1] = "hud/keycard"; item[2] = "hud/objective_update"; item[3] = "hud/objective_complete"; item[4] = "hud/mod_acquired"; item[5] = "hud/rune_acquired"; item[6] = "hud/praetor_acquired"; item[7] = "hud/weapon_point"; item[8] = "hud/collectible_acquired"; item[9] = "hud/argentupgrade_acquired"; item[10] = "hud/callouts/generic_callout"; item[11] = "hud/callouts/round_timer_callout"; item[12] = "hud/callouts/ally_used_card"; item[13] = "hud/callouts/enemy_used_card"; item[14] = "hud/callouts/match_defeat"; item[15] = "hud/callouts/match_victory"; item[17] = "hud/callouts/round_start"; item[18] = "hud/weapon_broken"; item[19] = "hud/invasion/incoming_invader"; item[20] = "hud/fast_travel"; item[21] = "hud/sentinel_armor_activated"; item[22] = "hud/sentinel_armor_deactivated"; item[23] = "hud/extra_life_activated"; item[24] = "hud/extra_life_acquired"; item[25] = "hud/secret_found"; item[26] = "hud/combat_point"; item[27] = "hud/bounty_complete"; item[28] = "hud/keycard"; item[29] = "hud/slayer_key"; item[30] = "hud/slayer_gate"; item[31] = "hud/mission_challenge_update"; item[32] = "hud/mission_challenge_complete"; item[33] = "hud/slayer_encounter"; item[34] = "hud/weapon_mastery_challenge_update"; item[35] = "hud/sentinel_battery_acquired"; item[36] = "hud/slayer_battery"; item[37] = "hud/automap"; item[38] = "hud/event/mission_complete"; item[39] = "hud/event/boss_complete"; item[40] = "hud/event/invasion_complete"; item[41] = "hud/event/master_level_complete"; item[42] = "hud/event/pvp_match_complete"; item[43] = "hud/rune_upgrade_token_acquired"; item[44] = "hud/bounty_spawned"; item[45] = "hud/secret_hint"; item[46] = "hud/checkpoint"; item[47] = "hud/weapon_mastery"; item[48] = "hud/hint"; item[49] = "hud/inventory_acquired"; item[50] = "hud/rad_suit_acquired"; item[51] = "hud/equipment_pickup_acquired"; item[52] = "hud/objective_show_last"; item[53] = "hud/milestone_complete"; item[54] = "hud/season_level_up"; item[55] = "hud/slayer_gate_e3"; item[56] = "hud/weapon_points"; item[57] = "hud/level_up"; item[58] = "hud/secret_encounter_found"; item[59] = "hud/milestone_complete_silent"; item[60] = "hud/upgrade_reminder"; item[61] = "hud/secret_encounter_failed"; item[62] = "hud/secret_encounter_complete"; item[63] = "hud/weapon_mastery_challenge_complete"; item[64] = "hud/upgrade_reminder_praetor"; item[65] = "hud/objective_pinned"; item[66] = "hud/mission_challenge_intro"; item[67] = "hud/gold_boss_start"; item[68] = "hud/gold_boss_defeated"; item[69] = "hud/extra_life_encounter_complete"; item[70] = "hud/extra_life_encounter_failed"; item[71] = "hud/extra_life_encounter_found"; item[72] = "hud/master_level_start"; item[73] = "hud/slayer_encounter_no_points"; item[74] = "hud/extra_lifed_maxed"; item[75] = "hud/extra_life_acquired_2"; item[76] = "hud/extra_life_acquired_3"; item[77] = "hud/dive_suit_acquired"; item[78] = "hud/secret_encounter_dlc_complete"; item[79] = "hud/secret_encounter_dlc_complete_skin_progress"; item[80] = "hud/secret_encounter_dlc_complete_skin_unlocked"; item[81] = "hud/support_rune_acquired"; item[82] = "hud/player_cursed"; item[83] = "hud/horde/timed_bounty_start"; item[84] = "hud/horde/timed_bounty_completed"; item[85] = "hud/horde/timed_bounty_failed"; item[86] = "hud/horde/state_share_win"; item[87] = "hud/horde/state_share_lose"; } } weaponManager = { masterAllWeapons = "campaign/master_all_weapons"; requiredMasteredWeapons = { num = 8; item[0] = "campaign/master_ballista"; item[1] = "campaign/master_chaingun"; item[2] = "campaign/master_combat_shotgun"; item[3] = "campaign/master_heavy_cannon"; item[4] = "campaign/master_plasma_rifle"; item[5] = "campaign/master_rocket_launcher"; item[6] = "campaign/master_super_shotgun"; } dossierOrderWeaponList = { num = 9; item[0] = "weapon/player/shotgun"; item[1] = "weapon/player/heavy_cannon"; item[2] = "weapon/player/plasma_rifle"; item[3] = "weapon/player/rocket_launcher"; item[4] = "weapon/player/double_barrel"; item[5] = "weapon/player/gauss_rifle"; item[6] = "weapon/player/chaingun"; item[7] = "weapon/player/bfg"; item[8] = "weapon/player/unmaykr"; } } runeManager = { masterRuneList = { num = 9; item[0] = "perk/player/runes/glory_kill_speed"; item[1] = "perk/player/runes/glory_kill_dash"; item[2] = "perk/player/runes/speed_boost_on_glory_kill"; item[3] = "perk/player/runes/double_jump_air_control"; item[4] = "perk/player/runes/modify_enemy_stagger_duration"; item[5] = "perk/player/runes/activate_focus_on_death_blow"; item[6] = "perk/player/runes/target_strike"; item[7] = "perk/player/runes/decrease_equipment_recharge"; item[8] = "perk/player/runes/blood_punch_loot_on_damage"; } runePerkGroup = "perkgroups/runes"; supportRunePerkGroup = "perkgroups/support_runes"; runeSlotReq = { ptr = { ptr[0] = 1; ptr[1] = 2; ptr[2] = 3; } } } suitManager = { masterSuitGroup = "perkgroups/suit"; fundamentals = { display = "#str_praetor_fundamentals"; description = "#str_praetor_fundamentals_desc"; iconMaterial = "art/ui/dossier/icons/preator_suit/category/fundamentals"; suitUpgrades = { num = 4; item[0] = "perk/player/suit/fundamentals/ledge_grab_speed"; item[1] = "perk/player/suit/fundamentals/weapon_change_speed"; item[2] = "perk/player/suit/dash/dash_regen_delay"; item[3] = "perk/player/suit/dash/dash_gk_restore_dash"; } } extermination = { index = 1; display = "#str_praetor_extermination"; description = "#str_praetor_extermination_desc"; iconMaterial = "art/ui/dossier/icons/preator_suit/category/extermination"; suitUpgrades = { num = 4; item[0] = "perk/player/equipment/frag_reduce_cooldown"; item[1] = "perk/player/equipment/frag_concussive_blast"; item[2] = "perk/player/equipment/frag_max_capacity"; item[3] = "perk/player/equipment/frag_cluster_bombs"; } } selfPreservation = { index = 2; display = "#str_praetor_self_preservation"; description = "#str_praetor_self_preservation_desc"; iconMaterial = "art/ui/dossier/icons/preator_suit/category/self_preservation"; suitUpgrades = { num = 4; item[0] = "perk/player/suit/self_preservation/reduce_hazard_damage"; item[1] = "perk/player/suit/self_preservation/reduce_self_weapon_damage"; item[2] = "perk/player/suit/extermination/barrels_respawn"; item[3] = "perk/player/suit/extermination/barrels_drop_ammo"; } } powerups = { index = 3; display = "#str_praetor_powerups"; description = "#str_praetor_powerups_desc"; iconMaterial = "art/ui/dossier/icons/preator_suit/category/powerups"; suitUpgrades = { num = 4; item[0] = "perk/player/equipment/ice_reduce_cooldown"; item[1] = "perk/player/equipment/ice_extend_duration"; item[2] = "perk/player/equipment/ice_health_drops"; item[3] = "perk/player/equipment/ice_melee_shatter"; } } exploration = { index = 4; display = "#str_praetor_exploration"; description = "#str_praetor_exploration_desc"; iconMaterial = "art/ui/dossier/icons/preator_suit/category/navigation"; suitUpgrades = { num = 4; item[0] = "perk/player/suit/exploration/automap_shows_map_station"; item[1] = "perk/player/suit/exploration/automap_shows_progression_items"; item[2] = "perk/player/suit/exploration/automap_increased_fog_radius"; item[3] = "perk/player/suit/exploration/dossier_shows_progression_items"; } } dash = { index = 5; display = "#str_praetor_dash"; description = "#str_praetor_dash_desc"; iconMaterial = "art/ui/dossier/icons/preator_suit/category/dash"; suitUpgrades = { num = 4; item[0] = "perk/player/suit/self_preservation/reduce_hazard_damage"; item[1] = "perk/player/suit/self_preservation/reduce_self_weapon_damage"; item[2] = "perk/player/suit/extermination/barrels_respawn"; item[3] = "perk/player/suit/extermination/barrels_drop_ammo"; } } argentCellPerkGroup = "perkgroups/argent_cell"; suitPerkGroup = "perkgroups/suit"; cheatcode = "CHEAT_CODE_TYPE_QUAKECON_MODE"; allAcqTutorial = "tutorialevent/ingame_tutorial/quakecon_mode"; } unlockableManager = { missionChallenges = "missionchallenge/main"; milestones = "milestonelist/main"; } statManager = { explorationHintOptions = { num = 3; item[0] = { requiredRules = { num = 1; item[0] = { stat = "STAT_CHALLENGES_COMPLETED"; value = 0; operation = "RULE_OPERATION_EQUALS"; } } resultDataDecl = "hint/gameplay/mission_challenge"; } item[1] = { requiredRules = { num = 1; item[0] = { stat = "STAT_SECRETS_FOUND"; secondStat = "STAT_SECRETS"; secondStatDuration = "DUR_LEVEL"; value = 50; operation = "RULE_OPERATION_LESS_THAN_PERCENTAGE"; } } bonusRules = { num = 1; item[0] = { stat = "STAT_SECRETS_FOUND"; secondStat = "STAT_SECRETS"; secondStatDuration = "DUR_LEVEL"; value = 25; operation = "RULE_OPERATION_LESS_THAN_PERCENTAGE"; } } resultDataDecl = "hint/exploration/secrets"; } item[2] = { requiredRules = { num = 1; item[0] = { stat = "STAT_SLAYER_GATE_USED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_EQUALS"; } } resultDataDecl = "hint/exploration/slayer_gate"; } } combatHintOptions = { num = 25; item[0] = { requiredRules = { num = 1; item[0] = { stat = "STAT_REVENANT_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/revenant"; } item[1] = { requiredRules = { num = 1; item[0] = { stat = "STAT_HELL_MARINE_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/soldier_blaster"; } item[2] = { requiredRules = { num = 1; item[0] = { stat = "STAT_PINKY_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/pinky"; } item[3] = { requiredRules = { num = 1; item[0] = { stat = "STAT_BARON_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/baron"; } item[4] = { requiredRules = { num = 1; item[0] = { stat = "STAT_CACODEMON_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/cacodemon"; } item[5] = { requiredRules = { num = 1; item[0] = { stat = "STAT_MANCUBUS_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/mancubus_fire"; } item[6] = { requiredRules = { num = 1; item[0] = { stat = "STAT_LOST_SOUL_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/lost_soul"; } item[7] = { requiredRules = { num = 1; item[0] = { stat = "STAT_HELL_SHOTGUNNER_KILLED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/soldier_shield"; } item[8] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_SHOTGUN_DAMAGE"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/shotgun"; } item[9] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_DBL_SHOTGUN_DAMAGE"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/double_barrel"; } item[10] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_ASS_RIFLE_DAMAGE"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/heavy_cannon"; } item[11] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_PLASM_RIFLE_DAMAGE"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/plasma_rifle"; } item[12] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_ROCKET_LAUNCHER_KILLS"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/rocket_launcher"; } item[13] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_CHAINGUN_KILLS"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/chaingun"; } item[14] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_GAUSS_KILLS"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/gauss_rifle"; } item[15] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_BFG_KILLS"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/bfg"; } item[16] = { requiredRules = { num = 1; item[0] = { stat = "STAT_WEAPON_CHAINSAW_KILLS"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/chainsaw"; } item[17] = { requiredRules = { num = 1; item[0] = { stat = "STAT_SHOTGUN_FULL_AUTO_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/shotgun_full_auto"; } item[18] = { requiredRules = { num = 1; item[0] = { stat = "STAT_SHOTGUN_STICKY_BOMB_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/shotgun_pop_rockets"; } item[19] = { requiredRules = { num = 1; item[0] = { stat = "STAT_HAR_SCOPE_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/heavy_cannon_bolt_action"; } item[20] = { requiredRules = { num = 1; item[0] = { stat = "STAT_HAR_MICROMISSILE_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/heavy_cannon_burst_detonate"; } item[21] = { requiredRules = { num = 1; item[0] = { stat = "STAT_CHAINGUN_TURRET_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/chaingun_turret"; } item[22] = { requiredRules = { num = 1; item[0] = { stat = "STAT_PLASMA_HEATWAVE_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/plasma_rifle_aoe"; } item[23] = { requiredRules = { num = 1; item[0] = { stat = "STAT_ROCKET_LAUNCHER_DETONATE_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/rocket_launcher_detonate"; } item[24] = { requiredRules = { num = 1; item[0] = { stat = "STAT_ROCKET_LAUNCHER_LOCKON_EARNED"; statDuration = "DUR_GAME"; value = 0; operation = "RULE_OPERATION_GREATER_THAN_VALUE"; } } resultDataDecl = "hint/combat/rocket_launcher_lock_mod"; } } } collectibleManager = { collectibleGroupUIData = "collectiblecategorydata"; } uiWalkthroughManager = { walkthroughTutorials = { praetorSuitTutorial = "uiwalkthrough_praetorsuit"; modBotTutorial = "uiwalkthrough_modbot"; argentCellTutorial = "uiwalkthrough_argentcell"; runeTutorial = "uiwalkthrough_runes"; runeTutorialInteractState = "used_rune"; supportRuneTutorial = "uiwalkthrough_supportrunes"; } } soundPackManager = { soundPacks = { num = 1; item[0] = "classic_doomguy_sounds"; } } scoreManager = { rubric = "horde"; } violenceKillEvents = { num = 18; item[0] = "violenceevent/weapon_mastery/shotgun/full_auto_kill_pinky"; item[1] = "violenceevent/weapon_mastery/rocket_launcher/lock_on_kill_prowler"; item[2] = "violenceevent/weapon_mastery/heavy_cannon/piercing_bolt_headshot"; item[3] = "violenceevent/weapon_mastery/ballista/arbalest_kill_cacodemons"; item[4] = "violenceevent/weapon_mastery/ballista/destroyer_kill_n_in_one_shot"; item[5] = "violenceevent/weapon_mastery/chaingun/mobile_turret_kill_n_in_one_deployment"; item[6] = "violenceevent/weapon_mastery/plasma_rifle/heat_blast_kill_n_in_one_shot"; item[7] = "violenceevent/mission_challenge/bfg_kill_doom_hunter"; item[8] = "violenceevent/mission_challenge/chapel_of_ghouls"; item[9] = "violenceevent/mission_challenge/balls_to_the_wall"; item[10] = "violenceevent/mission_challenge/master_of_puppets"; item[11] = "violenceevent/weapon_mastery/plasma_rifle/microwave_kill_n_in_one_shot"; item[12] = "violenceevent/mission_challenge/bonded_by_blood"; item[13] = "violenceevent/mission_challenge/external_combustion"; item[14] = "violenceevent/mission_challenge/hammer_smashed_face"; item[15] = "violenceevent/mission_challenge/kill_n_demons_with_one_frag"; item[16] = "violenceevent/mission_challenge/angel_of_death"; item[17] = "violenceevent/pvp/timeout"; } violenceHitEvents = { num = 8; item[0] = "violenceevent/weapon_mastery/heavy_cannon/micro_missle_kill_n_demons"; item[1] = "violenceevent/mission_challenge/through_the_fire_and_flames"; item[2] = "violenceevent/dash_into_pinky"; item[3] = "violenceevent/pvp/fire_starter"; item[4] = "violenceevent/pvp/ignition"; item[5] = "violenceevent/pvp/wolf_master"; item[6] = "violenceevent/pvp/dodge_this"; item[7] = "violenceevent/pvp/punch_drunk"; } } playerProps = "player/default"; playerMechanicLedgeGrab = { animAliases = { ledgePullUp = "ledgeGrab/ledgePullUp"; ledgePullUpMantle = "ledgeGrab/ledgePullUpMantle"; ledgePullUpRounded = "ledgeGrab/ledgePullUpRounded"; ledgePullUpMantleRounded = "ledgeGrab/ledgePullUpMantleRounded"; ledgePullUpAngled = "ledgeGrab/ledgePullUpAngled"; ledgePullUpMantleAngled = "ledgeGrab/ledgePullUpMantleAngled"; ledgeClimbUp = "ledgeGrab/ledgeClimbUp"; ledgeClimbUpMantle = "ledgeGrab/ledgeClimbUpMantle"; railingPullUp = "ledgeGrab/railingPullUp"; railingPullUpMantle = "ledgeGrab/railingPullUpMantle"; } thirdPersonAnimIndex = { ledgePullUpMantle = 1; ledgePullUpMantleRounded = 1; ledgePullUpMantleAngled = 1; ledgeClimbUp = 4; ledgeClimbUpMantle = 5; railingPullUp = 2; railingPullUpMantle = 3; } } playerMechanicWallGrab = { initiateMaxAngle = 115; maxDeltaYaw = 115; constrainedViewAnglesRate = 250; speedNormal = 12.3820009; speedSprint = 12.3820009; speedDismountPerp = 5.71500015; speedDismountUp = 5.90500021; speedDismountFwd = 9.52500057; sound_mount = "player/foley/wallgrab/player_foley_wallgrab_mount"; sound_move = "player/foley/wallgrab/player_foley_wallgrab_move"; sound_dismount = "player/foley/wallgrab/player_foley_wallgrab_dismount"; } playerMechanicWallClimb = { anims = { climb_up_cycle_right = "wall_climb/climb_up_cycle_right"; climb_up_cycle_left = "wall_climb/climb_up_cycle_left"; climb_down_cycle_right = "wall_climb/climb_down_cycle_right"; climb_down_cycle_left = "wall_climb/climb_down_cycle_left"; climb_right_cycle = "wall_climb/climb_right_cycle"; climb_left_cycle = "wall_climb/climb_left_cycle"; climb_into_up_right = "wall_climb/climb_up_into_right"; climb_into_up_left = "wall_climb/climb_up_into_left"; climb_into_down_right = "wall_climb/climb_down_into_right"; climb_into_down_left = "wall_climb/climb_down_into_left"; climb_into_right = "wall_climb/climb_right_into"; climb_into_left = "wall_climb/climb_left_into"; climb_out_up_right = "wall_climb/climb_up_out_right"; climb_out_up_left = "wall_climb/climb_up_out_left"; climb_out_down_right = "wall_climb/climb_down_out_right"; climb_out_down_left = "wall_climb/climb_down_out_left"; climb_out_right = "wall_climb/climb_right_out"; climb_out_left = "wall_climb/climb_left_out"; climb_out_right_mid = "wall_climb/climb_left_out_mid"; climb_out_left_mid = "wall_climb/climb_right_out_mid"; idle = "wall_climb/idle"; to_pointing = "wall_climb/climb_to_pointing"; from_pointing = "wall_climb/climb_from_pointing"; mount_air = "wall_climb/mount_air"; mount_ground = "wall_climb/mount_ground"; look_left = "wall_climb/look_left"; look_left_up_45 = "wall_climb/look_left_up_45"; look_left_up_90 = "wall_climb/look_left_up_90"; look_right = "wall_climb/look_right"; look_right_up_45 = "wall_climb/look_right_up_45"; look_right_up_90 = "wall_climb/look_right_up_90"; look_right_idle = "wall_climb/look_right_idle"; look_left_idle = "wall_climb/look_left_idle"; } globalTraceDistance = 10; viewPitchTable = "wall_climb_view_pitch"; verticalMoveTable = "wall_climb_slowmove"; horizontalMoveTable = "wall_climb_horizontalmove"; attachToWallSoundDecl = "play_climb_hit"; jumpOffWallSoundDecl = "play_climb_off"; removeHandFromWallSoundDecl = "play_climb_hand"; attachHandToWallSoundDecl = "play_climb_hand_wall"; distanceToWallToActivate = 7.5; startMoveDelaySec = 0; slowMoveDelayBetweenSec = 0; initialMovementDelaySec = 0.300000012; maxDeltaYawViewAngle = 220; goalSpeedVerticalAccelRate = 3; goalSpeedHorizontalAccelRate = 5; goalSpeedVerticalJumpAccelRate = 5; goalSpeedHorizontalJumpAccelRate = 5; goalSpeedVerticalDecelRate = 5; goalSpeedHorizontalDecelRate = 5; jumpToWallSpeed = 40; overdriveDecl = "statuseffect/overdrive"; wallClimbText = "#str_climb_wall"; } playerMechanicGorillaBarJump = { swingAnimation = "monkeyBar/grab"; maxLookAngleFromBar = 90; screenShakeDecl = "advancedscreenviewshake/monkey_bar"; } playerMechanicInteract = { animData = { interactAnimDatas = { num = 3; item[0] = { type = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_GENERIC"; } item[1] = { type = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_SENTINEL_CRYSTAL"; animIndex = 1; } item[2] = { type = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_BUTTON"; animIndex = 2; outroAnimIndex = 1; } } } statusEffect = "statuseffect/invasion/slayer/interact_invulnerability"; } playerAbilityFuelRate = 3; playerHealth = { components = { components[0] = { regenInterval = { value = 0.0299999993; } regenDelay = { value = 12; } } components[1] = { max = { defaultValue = 50; } drainLimit = 50; starting = { defaultValue = 0; } regenInterval = { value = 0.0299999993; } regenDelay = { value = 12; } } } } energyShellDecl = "pickup/energy_shell"; energyShellDeclMP = "pickup/energy_shell_mp"; playerHealthRTPC = "player_health"; soundResetStates = { num = 3; item[0] = "swimming/none"; item[1] = "cinematic/none"; item[2] = "curse/none"; } goreComponent = { goreContainer = "player"; } damageScaleTableComponent = { list = { num = 7; item[0] = { declDamage = "damage/special/ability_dash"; declTable = "player/damage_volume_test"; } item[1] = { declDamage = "damage/hazard/bio"; declTable = "player/bio_hazard_damage"; } item[2] = { declDamage = "damage/hazard/lava"; declTable = "player/lava_hazard_damage"; } item[3] = { declDamage = "damage/hazard/slime"; declTable = "player/slime_hazard_damage"; resetTableOnExitTimeMS = 2000; } item[4] = { declDamage = "damage/hazard/water_toxic"; declTable = "player/slime_hazard_damage"; resetTableOnExitTimeMS = 2000; } item[5] = { declDamage = "damage/hazard/slime_sac"; declTable = "player/slime_sac_hazard_damage"; resetTableOnExitTimeMS = 2000; } item[6] = { declDamage = "damage/hazard/poison_bog"; declTable = "player/poison_bog_hazard_damage"; resetTableOnExitTimeMS = 2000; } } } playerHud = { declHUD = "default"; } playerDemoHud = { declHUD = "demo"; } demonPlayerHud = { declHUD = "demon"; } bodyAnimWeb = "animweb/player/doom_marine_3p"; suffocationDamage = "damage/base/suffocation"; waterBoostScaleMax = 4.75; waterBoostSound = "play_swish_frantic"; playerRevive = "play_player_revive"; doubleJumpSound = "play_double_jump"; audioLogComponent = { stories = { num = 1; item[0] = "dev_story/attack_of_the_jeff"; } } screenFXDecl = "player/screen_damage"; playerAimEventDecl = "base/misc/playeraim"; playerInteractionEventDecl = "base/misc/playerinteraction"; bodyEventDecl = "base/misc/body"; thirdPersonFXDecl = "player/tp_body"; combatEncounterScoringDecl = "base"; nightmareMarkerDef = "interact/nightmaremarker/public"; nightmareMarkerDefFriends = "interact/nightmaremarker/public"; nightmareMarkerDefBestRun = "interact/nightmaremarker/furthest"; nightmareMarkerDefPublic = "interact/nightmaremarker/public"; maxNumMarkersLvl = 30; gamePauseSound = "play_game_pause"; gameUnpauseSound = "play_game_resume"; slayerInvasionData = "default"; weaponFists = "weapon/player/fists"; weaponFistsBerserk = "weapon/player/fists_berserk"; weaponFistsDoom5Melee = "weapon/player/fists_doom5melee"; weaponFistsSwim = "weapon/player/fists_swim"; weaponPointingArm = "weapon/player/pointing_arm"; weaponCrucible = "weapon/player/crucible"; equipmentLauncherLeftDecl = "equipmentlauncher/equipmentlauncherleft"; equipmentLauncherRightDecl = "equipmentlauncher/equipmentlauncherright"; weaponFlameBelchLeft = "weapon/player/equipment_flame_belch"; weaponFlameBelchRight = "weapon/player/equipment_flame_belch_right"; weaponChainsaw = "weapon/player/chainsaw"; weaponPlasma = "weapon/player/plasma_rifle"; weaponChaingun = "weapon/player/chaingun"; weaponHammer = "weapon/player/hammer"; guiInfo = { icon = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud"; iconAlt = "art/ui/pvp_playericons/ico_pvp_players_doomguy_hud_dead"; } lockonData = { lockon_acquiringSound = "play_revenant_lock_warning"; lockon_lockedSound = "play_demonplayer_missileslocked"; lockon_broken = "play_rocket_lockon_break_alert"; } friendlyRepulsorRadius = 0.25; enemyRepulsorRadius = 0.25; controlRespawnedFromDeath = true; canRespawn = true; } } Playable Demons Info entityDef decl locations for each demon: gameresources_patch1\generated\decls\entitydef\player\demonplayer_archvile.decl gameresources_patch1\generated\decls\entitydef\player\demonplayer_dreadknight.decl gameresources_patch1\generated\decls\entitydef\player\demonplayer_painelemental.decl gameresources_patch1\generated\decls\entitydef\player\demonplayer_revenant.decl gameresources_patch1\generated\decls\entitydef\player\demonplayer_mancubus.decl gameresources_patch2\generated\decls\entitydef\player\demonplayer_marauder.decl Damage decl locations for each demon: gameresources_patch1\generated\decls\damage\damage\demonplayer\pvp\archvile gameresources_patch1\generated\decls\damage\damage\demonplayer\pvp\mancubus gameresources_patch1\generated\decls\damage\damage\demonplayer\pvp\revenant gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\archvile gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\mancubus gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\marauder gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\painelemental gameresources_patch2\generated\decls\damage\damage\demonplayer\pvp\revenant pvp_laser_patch1\generated\decls\damage\damage\demonplayer\pvp\dreadknight warehouse_patch1\generated\decls\damage\damage\demonplayer\pvp\marauder 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 Set pvpPlayerDamageScale & demonPlayerDamageScale to 0 for all damage decls. Set demonPlayerCanActivate to true for all idTrigger & idEncounterTrigger_Commit entities. Set demonPlayersPassThrough to false for all idInteractable_Obstacle entities. Invasion Set demonPlayersPassThrough to false for any idInteractable_Obstacle or idMover entities that should be walled-off for all players. Set demonPlayersPassThrough to true & allowDemonplayerProjectilePassThrough to false for all "combat barrier" entities. These are the idDynamicEntity and would include either mystical_combat_barrier.lwo / gameplay_energyBarrier_a.lwo / gameplay_energyBarrier_b.lwo as the clipmodel. Projectiles gameresources\generated\decls\projectile\projectile\player\chaingun_turret.decl 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; } } 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; } } } } } } } 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"; } } } } } 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; } } 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; } } } 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 = ""; } } 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"; } } } 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 } } . Tyrants e5m1_spear\generated\decls\aimovementgraph\tyrant.decl Tyrants should not be able to walk because that causes clients to crash. { edit = { } } 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" } } 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 } } 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"; } } Lobby map list gameresources_patch2\generated\decls\pvpmapselectinfolist\casualbattlearenamaplist.decl The list of maps selectable in the lobby menu. { edit = { mapSelectList = { num = 9; item[0] = { mapName = "maps/game/pvp/pvp_laser/pvp_laser.map"; mapInfo = "game/pvp/pvp_laser/pvp_laser"; } item[1] = { mapName = "maps/game/pvp/pvp_deathvalley/pvp_deathvalley.map"; mapInfo = "game/pvp/pvp_deathvalley/pvp_deathvalley"; } item[2] = { mapName = "maps/game/pvp/pvp_inferno/pvp_inferno.map"; mapInfo = "game/pvp/pvp_inferno/pvp_inferno"; } item[3] = { mapName = "maps/game/pvp/pvp_thunder/pvp_thunder.map"; mapInfo = "game/pvp/pvp_thunder/pvp_thunder"; } item[4] = { mapName = "maps/game/pvp/pvp_zap/pvp_zap.map"; mapInfo = "game/pvp/pvp_zap/pvp_zap"; } item[5] = { mapName = "maps/game/pvp/pvp_bronco/pvp_bronco.map"; mapInfo = "game/pvp/pvp_bronco/pvp_bronco"; } item[6] = { mapName = "maps/game/pvp/pvp_shrapnel/pvp_shrapnel.map"; mapInfo = "game/pvp/pvp_shrapnel/pvp_shrapnel"; } item[7] = { mapName = "maps/game/pvp/pvp_darkmetal/pvp_darkmetal.map"; mapInfo = "game/pvp/pvp_darkmetal/pvp_darkmetal"; } item[8] = { mapName = "maps/game/pvp/pvp_sideswipe/pvp_sideswipe.map"; mapInfo = "game/pvp/pvp_sideswipe/pvp_sideswipe"; } } } } Interactable switch fix. e5m1_spear/generated/decls/entitydef/trigger/interact/use_panel.decl Add the clientCanActivate = true; line so that client slayers may activate switches. { class = "idTrigger"; networkReplicated = false; edit = { clipModelInfo = { type = "CLIPMODEL_BOX"; size = { x = 1.5; y = 1; z = 2; } offset = { x = 1.1; } ignoreUnfixCollisionOffsetBug = true; } triggerOnce = false; clientCanActivate = true; } } Entities This chapter contains required and recommended changes to entities. Game Challenges Co-op entity { entityDef coop_game_challenge { inherit = "info/game_challenge/battlearena"; class = "idGameChallenge_PVP"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = true; disableAIPooling = false; edit = { networkSerializeTransforms = false; modeFlags = { allowRespawning = true; allowBulletPenetration = false; } difficultySettings = { playerIncomingDamageScale = "campaign/playerincomingdamage"; aiIncomingDamageScale = "campaign/aiincomingdamage"; healthPickupScale = "campaign/healthpickup"; armorPickupScale = "campaign/armorpickup"; ammoPickupScale = "campaign/ammopickup"; bfgAmmoPickupScale = "campaign/bfgammopickup"; healthDropScale = "campaign/healthdrop"; armorDropScale = "campaign/armordrop"; ammoDropScale = "campaign/ammodrop"; bfgAmmoDropScale = "campaign/bfgammodrop"; } scoreLimit = 99; numLives = 0; numRounds = 99; actorModifierListDecl = "actormodifiers_pvp"; gcGameEventCallouts = { slayerPowerWeapon = "pvp/combat_events/slayer_power_weapon"; demonSummonedCallout = "pvp/combat_events/general_card_event"; demonEffectCallout = "pvp/combat_events/general_card_event"; demonEffectStatusTimer = "pvp/status_timers/demon_effect"; demonQuickUse1Callout = "pvp/combat_events/general_card_event"; demonQuickUse2Callout = "pvp/combat_events/general_card_event"; damageBoostCallout = "pvp/combat_events/general_card_event"; damageBoostStatusTimer = "pvp/status_timers/timer_damage_boost"; hasteCallout = "pvp/combat_events/general_card_event"; hasteStatusTimer = "pvp/status_timers/timer_haste"; mitigationCallout = "pvp/combat_events/general_card_event"; mitigationStatusTimer = "pvp/status_timers/timer_damage_mitigation"; invulnerableCallout = "pvp/combat_events/general_card_event"; invulnerableStatusTimer = "pvp/status_timers/timer_invulnerable"; berserkCallout = "pvp/combat_events/general_card_event"; berserkStatusTimer = "pvp/status_timers/timer_berserk"; regenCallout = "pvp/combat_events/general_card_event"; regenStatusTimer = "pvp/status_timers/timer_regeneration"; lootBlockedCallout = "pvp/voiced/loot_blocked"; lootBlockedStatusTimer = "pvp/status_timers/timer_loot_blocked"; extraLifeCallout = "pvp/combat_events/general_card_event"; demonCriticalHealth = ""; demonCriticalRecovery = "pvp/voiced/demon_healed"; slayerCriticalHealth = "pvp/voiced/slayer_health_critical"; everyoneCritical = "main_heavy"; } hitConfirmSoundsInfo = "default"; characterStatusEventText = { invulnerableText = { textId = "#str_decl_powerup_statuseffect_GHOST45053"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } toughenedText = { textId = "#str_decl_powerup_statuseffect_GHOST45054"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } vulnerableText = { textId = "#str_decl_powerup_statuseffect_GHOST45055"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } strengthenedText = { textId = "#str_decl_powerup_statuseffect_GHOST45056"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } hastedText = { textId = "#str_decl_powerup_statuseffect_GHOST45057"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } slowedText = { textId = "#str_decl_powerup_statuseffect_GHOST45058"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } berserkingText = { textId = "#str_decl_powerup_statuseffect_GHOST45059"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } lootBlockedText = { textId = "#str_decl_powerup_statuseffect_GHOST45060"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } } aiSpawnPoolDecl = "maps/game/pvp/battlemode"; enableBrinkOfDeath = true; desummonKillDamage = "damage/hazard/pvp_round_kill"; slayerHighlightDecl = "pvp/demon_view_slayer_outline"; demonHighlightDecl = "pvp/demon_view_slayer_outline"; teammateHighlightDecl = "pvp/demon_view_slayer_outline"; slayerHighlightLOSBoxDecl = "highlight_los_slayer"; demonSpawnTargetEntity = "online/summon_target"; demonSpawnTargetEntityOneHit = "online/summon_target_onehit"; playerSpawnDef = "player"; teamSuperSettings = { damageFactorAI = 9.99999975e-05; tickFactor = 0.00329999998; } playerAlwaysFullBodyGibs = true; maxPlayersPerTeam = { ptr = { ptr[0] = 1; ptr[1] = 2; } } demonOutlineColor = { g = 0.501960993; } demonAllyOutlineColor = { r = 1; g = 0.501960993; b = 0; } fillColorDemonSees = { r = 0.199999988; g = 0.199999988; b = 0.199999988; a = 0.850000024; } fillColorSlayerSees = { r = 0.199999988; g = 0.199999988; b = 0.199999988; a = 0.850000024; } fillColorHitFlash = { g = 0; b = 0; a = 0.501960993; } slayerHighlightOptions = { allyDemon = "EHM_ALWAYS"; enemyDemon = "EHM_ALWAYS"; allySlayer = "EHM_ALWAYS"; enemySlayer = "EHM_ALWAYS"; } demonHighlightOptions = { allyDemon = "EHM_ALWAYS"; enemyDemon = "EHM_ALWAYS"; allySlayer = "EHM_ALWAYS"; enemySlayer = "EHM_ALWAYS"; } raceToStyle = true; pvpGameEventCallouts = { roundOne = ""; roundTwo = ""; roundThree = ""; roundFour = ""; roundFinal = ""; preMatchFiveSecondsRemaining = ""; preMatchFourSecondsRemaining = ""; preMatchThreeSecondsRemaining = ""; preMatchTwoSecondsRemaining = ""; preMatchOneSecondRemaining = ""; roundStart = ""; finalRound = ""; demonsRoundLost = ""; slayerRoundLost = ""; slayerKilled = "pvp/voiced/slayer_killed"; demonKilled = "pvp/voiced/slayer_killed"; demonsKilled = "pvp/voiced/slayer_killed"; slayerVictory = ""; demonVictory = ""; demonRespawningSoon = ""; respawnFiveSecondsRemaining = ""; respawnFourSecondsRemaining = ""; respawnThreeSecondsRemaining = ""; respawnTwoSecondsRemaining = ""; respawnOneSecondRemaining = ""; demonRespawned = "pvp/voiced/demon_resurrected"; delayDuringSync = { num = 1; item[0] = "pvp/voiced/slayer_killed"; } } jockeyTimeDuration = { value = 0; } roundCalloutTimeDuration = { value = 0.1; } roundStartCalloutDelaySec = { value = 0; } roundEndCalloutDelaySec = { value = 0; } upgradeUIDelaySec = { value = 0; } upgradeUIDuration = { value = 0; } matchEndCalloutDelaySec = { value = 0; } matchEndResultsDelaySec = { value = 0; } pvpProgressionScoringDecl = "battle_arena"; pvpLifecycleManager = { podiumAvatarEntDefs = { num = 7; item[0] = "podiums/avatars/archvile"; item[1] = "podiums/avatars/doom_marine"; item[2] = "podiums/avatars/mancubus"; item[3] = "podiums/avatars/pain_elemental"; item[4] = "podiums/avatars/revenant"; item[5] = "podiums/avatars/marauder"; item[6] = "podiums/avatars/dreadknight"; } podiumLayers = { num = 1; item[0] = "game/pvp/podium_stage"; } slayerPodiumEntities = "pvp_match_slayer_podium_"; demonPodiumEntities = "pvp_match_demon_podium_slot_"; characterAnimBlendMS = 0; playerAppearSound = "play_pvp_staging_spawnin"; } slayerPVPLoadoutDecl = "pvploadout/default"; demonPVPLoadoutDecl = "pvpdemonloadout/default"; respawnTimeSec = { branchPairs = { num = 1; item[0] = { branchKey = "CONTROLLERPAD_DECL"; branchResult = { value = 0.1; } } } } respawnTimeCapSec = { defaultValue = { value = 0.1; } branchPairs = { num = 1; item[0] = { branchKey = "CONTROLLERPAD_DECL"; branchResult = { value = 0.1; } } } } respawnStatusEffects = { num = 0; } idealRespawnDistanceFromSlayer = 0; slayerLayersToActivate = { num = 1; item[0] = "game/pvp/slayer_team"; } demonLayersToActivate = { num = 1; item[0] = "game/pvp/demon_team"; } layersToDeactivate = { num = 1; item[0] = "game/pvp/permanently_hidden"; } musicWinState = "music_ghost_states/pvp_lose"; musicLoseState = "music_ghost_states/pvp_lose"; musicHealthCriticalState = "music_ghost_states/main_heavy"; closeCallHealthThreshold = 50; clutchThreshold = 5; comebackThreshold = 3; surpriseTimeLimit = { value = 3; } surviveThreshold = 4; requiredPlayerCount = 2; respawnHealthScalar = 0.5; powerUpgradeRound = 99; soundOcclusionBypass = false; gameDifficulty = "DIFFICULTY_NIGHTMARE"; spawnPosition = { x = 1; y = 1; z = 1; } } } } Slayer vs Slayer entity { entityDef deathmatch_game_challenge { inherit = "info/game_challenge/battlearena"; class = "idGameChallenge_PVP"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = true; disableAIPooling = false; edit = { networkSerializeTransforms = false; modeFlags = { allowRespawning = true; allowBulletPenetration = false; } scoreLimit = 3; numLives = 0; numRounds = 5; actorModifierListDecl = "actormodifiers_pvp"; gcGameEventCallouts = { slayerPowerWeapon = "pvp/combat_events/slayer_power_weapon"; demonSummonedCallout = "pvp/combat_events/general_card_event"; demonEffectCallout = "pvp/combat_events/general_card_event"; demonEffectStatusTimer = "pvp/status_timers/demon_effect"; demonQuickUse1Callout = "pvp/combat_events/general_card_event"; demonQuickUse2Callout = "pvp/combat_events/general_card_event"; damageBoostCallout = "pvp/combat_events/general_card_event"; damageBoostStatusTimer = "pvp/status_timers/timer_damage_boost"; hasteCallout = "pvp/combat_events/general_card_event"; hasteStatusTimer = "pvp/status_timers/timer_haste"; mitigationCallout = "pvp/combat_events/general_card_event"; mitigationStatusTimer = "pvp/status_timers/timer_damage_mitigation"; invulnerableCallout = "pvp/combat_events/general_card_event"; invulnerableStatusTimer = "pvp/status_timers/timer_invulnerable"; berserkCallout = "pvp/combat_events/general_card_event"; berserkStatusTimer = "pvp/status_timers/timer_berserk"; regenCallout = "pvp/combat_events/general_card_event"; regenStatusTimer = "pvp/status_timers/timer_regeneration"; lootBlockedCallout = "pvp/voiced/loot_blocked"; lootBlockedStatusTimer = "pvp/status_timers/timer_loot_blocked"; extraLifeCallout = "pvp/combat_events/general_card_event"; demonCriticalHealth = "pvp/voiced/demon_health_critical"; demonCriticalRecovery = "pvp/voiced/demon_healed"; slayerCriticalHealth = "pvp/voiced/slayer_health_critical"; } hitConfirmSoundsInfo = "default"; characterStatusEventText = { invulnerableText = { textId = "#str_decl_powerup_statuseffect_GHOST45053"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } toughenedText = { textId = "#str_decl_powerup_statuseffect_GHOST45054"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } vulnerableText = { textId = "#str_decl_powerup_statuseffect_GHOST45055"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } strengthenedText = { textId = "#str_decl_powerup_statuseffect_GHOST45056"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } hastedText = { textId = "#str_decl_powerup_statuseffect_GHOST45057"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } slowedText = { textId = "#str_decl_powerup_statuseffect_GHOST45058"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } berserkingText = { textId = "#str_decl_powerup_statuseffect_GHOST45059"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } lootBlockedText = { textId = "#str_decl_powerup_statuseffect_GHOST45060"; color = { r = 0.87450999; g = 0.87450999; b = 0.87450999; } } } aiSpawnPoolDecl = "maps/game/pvp/battlemode"; enableBrinkOfDeath = false; desummonKillDamage = "damage/hazard/pvp_round_kill"; slayerHighlightDecl = "pvp/slayer_view_demon_outline"; demonHighlightDecl = "pvp/demon_view_teammate_outline"; teammateHighlightDecl = "pvp/demon_view_teammate_outline"; slayerHighlightLOSBoxDecl = "highlight_los_slayer"; demonSpawnTargetEntity = "online/summon_target"; demonSpawnTargetEntityOneHit = "online/summon_target_onehit"; playerSpawnDef = "player"; teamSuperSettings = { damageFactorAI = 9.99999975e-05; tickFactor = 0.00329999998; } playerAlwaysFullBodyGibs = true; maxPlayersPerTeam = { ptr = { ptr[0] = 1; ptr[1] = 2; } } demonOutlineColor = { g = 0.501960993; } demonAllyOutlineColor = { r = 1; g = 0.501960993; b = 0; } fillColorDemonSees = { r = 0.199999988; g = 0.199999988; b = 0.199999988; a = 0.850000024; } fillColorSlayerSees = { r = 0.199999988; g = 0.199999988; b = 0.199999988; a = 0.850000024; } fillColorHitFlash = { g = 0; b = 0; a = 0.501960993; } slayerHighlightOptions = { allyDemon = "EHM_NONE"; enemyDemon = "EHM_NONE"; allySlayer = "EHM_ALWAYS"; enemySlayer = "EHM_NONE"; } demonHighlightOptions = { allyDemon = "EHM_ALWAYS"; enemyDemon = "EHM_ALWAYS"; allySlayer = "EHM_ALWAYS"; enemySlayer = "EHM_ALWAYS"; } raceToStyle = true; pvpGameEventCallouts = { roundOne = "pvp/voiced/round_one"; roundTwo = "pvp/voiced/round_two"; roundThree = "pvp/voiced/round_three"; roundFour = "pvp/voiced/round_four"; roundFinal = "pvp/voiced/final_round"; preMatchFiveSecondsRemaining = "pvp/chimes/five"; preMatchFourSecondsRemaining = "pvp/chimes/four"; preMatchThreeSecondsRemaining = "pvp/chimes/three"; preMatchTwoSecondsRemaining = "pvp/chimes/two"; preMatchOneSecondRemaining = "pvp/chimes/one"; roundStart = "pvp/voiced/fight"; finalRound = "pvp/voiced/final_round"; demonsRoundLost = "pvp/voiced/demons_round_lost"; slayerRoundLost = "pvp/voiced/slayer_round_lost"; slayerKilled = "pvp/voiced/slayer_killed"; demonKilled = ""; demonsKilled = "pvp/voiced/demons_killed"; slayerVictory = "pvp/voiced/slayer_won_the_match"; demonVictory = "pvp/voiced/demons_won_the_match"; demonRespawningSoon = "pvp/voiced/demon_resurrecting_soon"; respawnFiveSecondsRemaining = "pvp/chimes/resurrect_five"; respawnFourSecondsRemaining = "pvp/chimes/resurrect_four"; respawnThreeSecondsRemaining = "pvp/chimes/resurrect_three"; respawnTwoSecondsRemaining = "pvp/chimes/resurrect_two"; respawnOneSecondRemaining = "pvp/chimes/resurrect_one"; demonRespawned = "pvp/voiced/demon_resurrected"; delayDuringSync = { num = 3; item[0] = "pvp/voiced/slayer_killed"; item[1] = "pvp/voiced/demons_won_the_match"; item[2] = "pvp/voiced/slayer_round_lost"; } } jockeyTimeDuration = { value = 5; } roundCalloutTimeDuration = { value = 3; } roundStartCalloutDelaySec = { value = 2; } upgradeUIDelaySec = { value = 0; } matchEndCalloutDelaySec = { value = 0; } matchEndResultsDelaySec = { value = 0; } pvpProgressionScoringDecl = "battle_arena"; pvpLifecycleManager = { podiumAvatarEntDefs = { num = 7; item[0] = "podiums/avatars/archvile"; item[1] = "podiums/avatars/doom_marine"; item[2] = "podiums/avatars/mancubus"; item[3] = "podiums/avatars/pain_elemental"; item[4] = "podiums/avatars/revenant"; item[5] = "podiums/avatars/marauder"; item[6] = "podiums/avatars/dreadknight"; } podiumLayers = { num = 1; item[0] = "game/pvp/podium_stage"; } slayerPodiumEntities = "pvp_match_slayer_podium_"; demonPodiumEntities = "pvp_match_demon_podium_slot_"; characterAnimBlendMS = 0; playerAppearSound = "play_pvp_staging_spawnin"; } slayerPVPLoadoutDecl = "pvploadout/default"; demonPVPLoadoutDecl = "pvpdemonloadout/default"; respawnTimeSec = { branchPairs = { num = 1; item[0] = { branchKey = "CONTROLLERPAD_DECL"; branchResult = { value = 0; } } } } respawnTimeCapSec = { defaultValue = { value = 0; } branchPairs = { num = 1; item[0] = { branchKey = "CONTROLLERPAD_DECL"; branchResult = { value = 0; } } } } respawnStatusEffects = { num = 0; } idealRespawnDistanceFromSlayer = 100; slayerLayersToActivate = { num = 1; item[0] = "game/pvp/slayer_team"; } demonLayersToActivate = { num = 1; item[0] = "game/pvp/demon_team"; } layersToDeactivate = { num = 1; item[0] = "game/pvp/permanently_hidden"; } musicWinState = "music_ghost_states/pvp_win"; musicLoseState = "music_ghost_states/pvp_lose"; closeCallHealthThreshold = 50; clutchThreshold = 5; comebackThreshold = 3; surpriseTimeLimit = { value = 3; } surviveThreshold = 4; requiredPlayerCount = 2; soundOcclusionBypass = false; } } } Pickups Pickup 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 } } } 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 } } } 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"; } } } } Music Event Call item[0] = { eventCall = { eventDef = "activateTarget"; args = { num = 2; item[0] = { entity = "heavy_music_timeline_1"; } item[1] = { string = "activate heavy music"; } } } } Entities entity { entityDef heavy_music_timeline_1 { inherit = "target/timeline"; class = "idTarget_Timeline"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = true; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; spawnPosition = { x = 1; y = 1; z = 1; } componentTimeLine = { entityEvents = { num = 1; item[0] = { entity = "heavy_music_relay_1"; events = { num = 2; item[0] = { eventTime = 250; eventCall = { eventDef = "activate"; args = { num = 1; item[0] = { entity = ""; } } } } } } } } allowOnClients = true; allowClientsToStart = true; renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } entity { entityDef heavy_music_relay_1 { inherit = "target/relay"; class = "idTarget_Count"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; count = 1; spawnPosition = { x = 1; y = 1; z = 1; } targets = { num = 1; item[0] = "heavy_music_1"; } repeat = true; } } } entity { entityDef heavy_music_1 { inherit = "sound/musicentity"; class = "idMusicEntity"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { spawnPosition = { x = 1; y = 1; z = 1; } initialState = "music_ghost_states/main_heavy"; initialSwitchGroup = "music_ghost_switch"; initialSwitchState = "doom_hunter_music"; } } } Doors Door entity { entityDef interact_doors_cultist_wide_01_1 { inherit = "interact/doors/cultist_wide_01"; class = "idInteractable_Obstacle"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { soundOffset = { z = 1.5; } whenToSave = "SGT_CHECKPOINT"; flags = { skipRenderModelReplication = true; } dormancy = { distance = 100; playerDistance = 120; playerRearwardDistance = 80; } fxDecl = "gameplay/invasion/demon_door"; interaction = { initalState = "interactables/door/normal/locked"; interactionGraph = "interactables/door"; stateData = { num = 1; item[0] = { stateName = "interactables/door/normal/locked"; } } transitionData = { num = 12; item[0] = { transitionName = "needs_key_To_unlocked_open"; additionalWaitMs = 1000; playSoundOnTransition = "play_doomhunter_widedoor_open_unlocked"; } item[1] = { transitionName = "unlocked_To_unlocked_open"; playSoundOnTransition = "play_doomhunter_widedoor_open"; } item[2] = { transitionName = "unlocked_open_To_unlocked"; playSoundOnTransition = "play_doomhunter_widedoor_close"; } item[3] = { transitionName = "locked_To_locked_open"; playSoundOnTransition = "play_doomhunter_widedoor_open"; } item[4] = { transitionName = "locked_open_To_locked"; playSoundOnTransition = "play_doomhunter_widedoor_close"; } item[5] = { transitionName = "unlocked_open_To_locked"; playSoundOnTransition = "play_doomhunter_widedoor_close"; } item[6] = { transitionName = "locked_To_locked_fail"; } item[7] = { transitionName = "needs_key_To_needs_key_failed"; } item[8] = { transitionName = "locked_To_unlocked"; } item[9] = { transitionName = "unlocked_To_locked"; } item[10] = { transitionName = "start_locked_To_locked"; } item[11] = { transitionName = "locked_To_stay_open"; } } animWebDecl = "animweb/interact/doors/cultist_wide_01"; } touchData = { retouchDelaySec = 0.5; triggerDef = "trigger/interact/cultist_wide_01_square"; } stateColors = { num = 8; item[0] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_red"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_red"; } } state = "start_locked"; } item[1] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_red"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_red"; } } state = "activate_to_unlock"; } item[2] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_red"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_red"; } } state = "locked"; } item[3] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_red"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_red"; } } state = "needs_key"; } item[4] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_green"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_blue"; } } state = "unlocked"; } item[5] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_green"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_blue"; } } state = "locked_open"; } item[6] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_green"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_blue"; } } state = "unlocked_open"; } item[7] = { colorScale = 5; materialSwapList = { num = 2; item[0] = { from = "art/tile/glow/doorglow_a"; to = "art/tile/glow/doorglow_green"; } item[1] = { from = "art/tile/glow/doorglow_b"; to = "art/tile/glow/doorglow_blue"; } } state = "stay_open"; } } collisionPieces = { num = 4; item[0] = { meshName = "collision"; jointName = "collision_joint"; } item[1] = { meshName = "collision1"; jointName = "collision1_joint"; } item[2] = { meshName = "collision2"; jointName = "collision2_joint"; } item[3] = { meshName = "collision3"; jointName = "collision3_joint"; } } blockerBoundsExpandDists = { x = 0.100000001; y = 1; z = 0.100000001; } stateObstacleData = { num = 16; item[0] = { statePath = "interactables/door/normal/activate_to_unlock"; obstacleReachability = true; } item[1] = { statePath = "interactables/door/normal/locked"; obstacleReachability = true; } item[2] = { statePath = "interactables/door/normal/locked_fail"; obstacleReachability = true; } item[3] = { statePath = "interactables/door/normal/locked_open"; } item[4] = { statePath = "interactables/door/normal/needs_key"; obstacleReachability = true; } item[5] = { statePath = "interactables/door/normal/needs_key_failed"; obstacleReachability = true; } item[6] = { statePath = "interactables/door/normal/start_locked"; obstacleReachability = true; } item[7] = { statePath = "interactables/door/normal/stay_open"; } item[8] = { statePath = "interactables/door/normal/unlocked"; } item[9] = { statePath = "interactables/door/normal/unlocked_open"; } item[10] = { statePath = "interactables/door/oneWay/oneWay_closed"; obstacleReachability = true; } item[11] = { statePath = "interactables/door/oneWay/oneWay_lock_fail"; obstacleReachability = true; } item[12] = { statePath = "interactables/door/oneWay/oneWay_locked"; obstacleReachability = true; } item[13] = { statePath = "interactables/door/oneWay/oneWay_open"; } item[14] = { statePath = "interactables/door/oneWay/oneWay_open_fail"; obstacleReachability = true; } item[15] = { statePath = "interactables/door/oneWay/oneWay_opened"; } } dissolveDistance = 20; renderModelInfo = { model = "md6def/objects/doors/cultist_wide_door_01/cultist_wide_door_01.md6"; } guiData = { swfFile = "swf/worldgui/guientity/1_interact_lock_default.swf"; scale = 0.0850000009; initialCommands = { num = 1; item[0] = { commandType = "SPRITE_HIDE"; } } positionOffset = { x = 8; z = 25; } } umbraVisBlocking = "CAN_BLOCK"; umbraSoundBlocking = "CAN_BLOCK"; demonPlayerRenderModel = "art/objects/door/demon/cultist_wideDoor_01_demon.lwo"; spawnPosition = { x = -11.11; y = -11.11; z = -11.11; } demonPlayersPassThrough = false; } } } Open entity { entityDef interact_doors_cultist_wide_01_1_open { inherit = "target/interact_action_door"; class = "idTarget_InteractionAction"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { renderModelInfo = { materialRemap = { num = 1; item[0] = { to = "art/tile/common/nodraw"; } } } actionFilter = "interactionAction/door"; spawnPosition = { x = -11.11; y = -11.11; z = -11.11; } targets = { num = 1; item[0] = "interact_doors_cultist_wide_01_1"; } action = "IA_DOOR_OPEN"; } } } Replication entity { entityDef interact_doors_cultist_wide_01_1_timeline { inherit = "target/timeline"; class = "idTarget_Timeline"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = true; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; spawnPosition = { x = 1; y = 1; z = 1; } componentTimeLine = { entityEvents = { num = 2; item[0] = { entity = "interact_doors_cultist_wide_01_1_relay"; events = { num = 1; item[0] = { eventTime = 250; eventCall = { eventDef = "activate"; args = { num = 1; item[0] = { entity = ""; } } } } } } item[1] = { entity = "interact_doors_cultist_wide_01_1_remove"; events = { num = 1; item[0] = { eventTime = 2500; eventCall = { eventDef = "activate"; args = { num = 1; item[0] = { entity = ""; } } } } } } } } allowClientsToStart = true; renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } entity { entityDef interact_doors_cultist_wide_01_1_relay { inherit = "target/relay"; class = "idTarget_Count"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; count = 1; spawnPosition = { x = 1; y = 1; z = 1; } targets = { num = 1; item[0] = "interact_doors_cultist_wide_01_1_open"; } repeat = true; } } } entity { entityDef interact_doors_cultist_wide_01_1_remove { inherit = "target/remove"; class = "idTarget_Remove"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; count = 1; spawnPosition = { x = 1; y = 1; z = 1; } targets = { num = 1; item[0] = "interact_doors_cultist_wide_01_1"; } repeat = true; } } } Shootables Shootable 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; } } } Breakable Walls Breakable Wall entity { entityDef destructible_mall_wall_b_1 { inherit = "destructible/e2m1_nest/mall_wall_b"; class = "idDestructible"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { whenToSave = "SGT_CHECKPOINT"; flags = { skipRenderModelReplication = true; } soundOffset = { z = 1.5; } renderModelInfo = { emissiveColor = { r = 0; b = 0.0470587984; } emissiveScale = 6; model = "art/kit/hell_earth/walls/crack_mall_b_whole.lwo"; acceptsDecals = true; } clipModelInfo = { type = "CLIPMODEL_BOX"; size = { x = 7.19999981; y = 1; z = 7.0999999; } numSides = 6; } soundOcclusionBypass = true; targetingDecl = NULL; fxDecl = "gameplay/invasion/demon_door"; destructible = { idleCommands = { num = 1; item[0] = { time = 10000; command = "IDLE_COMMAND_BECOME_STATIC"; } } decl = "destructible/e2m1_nest/mall_wall_b"; } effectiveDamageTypes = { num = 1; item[0] = "damage/special/no_damage"; } meleeOnDash = false; dissolveDistance = 20; demonPlayerRenderModel = "art/kit/hell_earth/walls/crack_mall_a_demon.lwo"; umbraVisBlocking = "CAN_BLOCK"; umbraSoundBlocking = "CAN_BLOCK"; spawnPosition = { x = -11.11; y = -11.11; z = -11.11; } dormancy = { playerDistance = 20; playerRearwardDistance = 20; allowDistanceDormancy = false; allowDormancy = true; allowPvsDormancy = false; } targets = { num = 1; item[0] = "destructible_mall_wall_b_1_timeline"; } demonPlayersPassThrough = false; } } } Replication entity { entityDef destructible_mall_wall_b_1_timeline { inherit = "target/timeline"; class = "idTarget_Timeline"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = true; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; spawnPosition = { x = 1; y = 1; z = 1; } componentTimeLine = { entityEvents = { num = 1; item[0] = { entity = "destructible_mall_wall_b_1_relay"; events = { num = 1; item[0] = { eventTime = 250; eventCall = { eventDef = "activate"; args = { num = 1; item[0] = { entity = ""; } } } } } } } } allowClientsToStart = true; renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } entity { entityDef destructible_mall_wall_b_1_relay { inherit = "target/relay"; class = "idTarget_Count"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; count = 1; spawnPosition = { x = 1; y = 1; z = 1; } targets = { num = 1; item[0] = "destructible_mall_wall_b_1"; } repeat = false; } } } Bounce Pads Dynamic Entity (Backer) entity { entityDef invasion_bouncepad_back_1 { inherit = "func/dynamic"; class = "idDynamicEntity"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { spawnPosition = { // Set the position roughly -0.2 (on the z axis) behind the emitter FX x = -11.11; y = -11.11; z = -11.11; } spawnOrientation = { // Backer should be laying on the ground mat = { mat[0] = { x = 0.707107; y = -0.707107; z = 0; } mat[1] = { x = 0.707107; y = 0.707107; z = 0; } mat[2] = { x = 0; y = 0; z = 1; } } } renderModelInfo = { model = "art/kit/hell/bridge/bridge_archPillar_a_divider.lwo"; scale = { // Do not change the scale, it will break collision x = 0.66; y = 0.66; z = 0.5; } } clipModelInfo = { clipModelName = "art/kit/hell/bridge/bridge_archPillar_a_divider.lwo"; // Adds collision } } } } Emitter FX (Slayer Team) entity { layers { "game/pvp/slayer_team" // Only the Slayer can see this FX } entityDef invasion_bouncepad_fx_slayer_1 { inherit = "func/fx"; class = "idEntityFx"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { canBecomeDormant = true; } dormancy = { delay = 5; distance = 78.029007; } spawnPosition = { // Position should be identical to the FX on the demon team x = -11.11; y = -11.11; z = -11.11; } fxEffect = "gameplay/invasion/bounce_pad_slayer"; // Emitter is red spawnOrientation = { // Orientation should not be changed mat = { mat[0] = { x = 1; y = 0; z = 0; } mat[1] = { x = 0; y = 1; z = 0; } mat[2] = { x = 0; y = 0; z = 1; } } } renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } Emitter FX (Demon Team) entity { layers { "game/pvp/demon_team" // Only Demon Players can see this FX } entityDef invasion_bouncepad_fx_slayer_1 { inherit = "func/fx"; class = "idEntityFx"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { canBecomeDormant = true; } dormancy = { delay = 5; distance = 78.029007; } spawnPosition = { // Position should be identical to the FX on the slayer team x = -11.11; y = -11.11; z = -11.11; } automapPropertiesDecl = "invasion_bounce_demon"; fxEffect = "gameplay/invasion/bounce_pad_demon"; // Emitter is purple spawnOrientation = { // Orientation should not be changed mat = { mat[0] = { x = 1; y = 0; z = 0; } mat[1] = { x = 0; y = 1; z = 0; } mat[2] = { x = 0; y = 0; z = 1; } } } renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } Bouncepad entity { entityDef invasion_bouncepad_from_1 { inherit = "trigger/bounce_pad"; class = "idTrigger_BouncePad"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { canBecomeDormant = true; } launchFX = "fx/bounce_pad/basic"; spawnPosition = { // Position should be roughtly +1 (z axis) above the FX x = -11.11; y = -11.11; z = -11.11; } renderModelInfo = { model = NULL; scale = { x = 1; y = 1; z = 1; } } clipModelInfo = { clipModelName = "maps/game/sp/e1m3_cult/e1m3_cult/invasion_x_bouncepad_from_1"; size = { x = 1.5; y = 1.5; z = 1; } } playerCanActivate = false; // Slayer cannot activate demonPlayerCanActivate = true; // Demon players can activate destination = "invasion_bouncepad_dest_1"; // Fly to this destination when activated launchSpeed = 32; // Speed demons will fly upwards } } } Destination entity { layers { "game/pvp/demon_team" // Only demon players can be launched } entityDef invasion_bouncepad_dest_1 { inherit = "info/bounce_destination"; class = "idInfo_BounceDestination"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { spawnPosition = { // Increase z axis position close to the destination x = -11.11; y = -11.11; z = -11.11; } spawnOrientation = { // Orientation does not matter mat = { mat[0] = { x = 1; y = 0; z = 0; } mat[1] = { x = 0; y = 1; z = 0; } mat[2] = { x = 0; y = 0; z = 1; } } } renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } Teleporters Timeline 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; } } } } } } Triggers Trigger entity { entityDef trigger_volume_1 { inherit = "trigger/trigger"; class = "idTrigger"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { demonPlayerCanActivate = true; removeFlag = "RMV_CHECKPOINT_ALLOW_MS"; spawnPosition = { x = -11.11; y = -11.11; z = -11.11; } renderModelInfo = { model = NULL; scale = { x = 1; y = 1; z = 1; } } clipModelInfo = { type = "CLIPMODEL_BOX"; size = { x = 5; y = 5; z = 5; } } targets = { num = 1; item[0] = "trigger_volume_1_timeline"; } wait = 0; triggerOnce = true; } } } Replication entity { entityDef trigger_volume_1_timeline { inherit = "target/timeline"; class = "idTarget_Timeline"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = true; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; spawnPosition = { x = 1; y = 1; z = 1; } componentTimeLine = { entityEvents = { num = 1; item[0] = { entity = "trigger_volume_1_relay"; events = { num = 1; item[0] = { eventTime = 250; eventCall = { eventDef = "activate"; args = { num = 1; item[0] = { entity = ""; } } } } } } } } allowClientsToStart = true; renderModelInfo = { scale = { x = 1; y = 1; z = 1; } } } } } entity { entityDef trigger_volume_1_relay { inherit = "target/relay"; class = "idTarget_Count"; expandInheritance = false; poolCount = 0; poolGranularity = 2; networkReplicated = false; disableAIPooling = false; edit = { flags = { noFlood = true; } networkSerializeTransforms = false; count = 1; spawnPosition = { x = 1; y = 1; z = 1; } targets = { num = 1; item[0] = "something_to_activate"; } repeat = true; } } } Gorilla Bars Entity 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; } } } } 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 pvp_lobby_showFullMapList 1 - Shows entire map list if non PVP maps are added net_gameserver_enable 0 - Enables local hosting net_maxRate 100 - Reduces likelihood of crashes g_havokHeapLimitMB 200 - Reduces likelihood of crashes g_damageScaleAItoDP 4 - Multiplies AI damage to Demon Players by x4 (x2 more than Nightmare difficulty, remove for Invasion/SVS) g_damageScaleSlayertoSlayer 0 - Slayers cannot damage other Slayers (remove for Invasion/SVS) g_damageScaleSlayertoDP 0 - Slayers cannot damage other Demon Players (remove for Invasion/SVS) g_damageScaleDPtoSlayer 0 - Demon Players cannot damage other Slayers (remove for Invasion/SVS) pm_disableWalkingOnTheEdgeOfLedge 0 - Movement is no longer negated when moving off a ledge warning_disable general - Removes warning spam in the console warning_disable anim - Removes warning spam in the console GUI Map loading in 2 player mods. Starting a 2 player game with the GUI A DOOM Eternal mod can be optimized for 2 players. However, the ready up system will only work with 3 players in the lobby, so an alternative method of loading the maps is needed. The loaddevmenuoption console command can forcefully load a multiplayer mod even with 1 or 2 players. Since many players will not want to enter commands, this guide will outline a more convenient graphical method. Modifying the lobby menu to set a cvar. HUD and menu modding in DOOM Eternal is very limited. While executing commands from a SWF is not known to be possible, there is an ActionScript function in Eternal's flash interpreter for setting Console Variables. Here's how to do this with Free Flash Decompiler: Open swf/hud/menus/battle_arena/lobby_options.swf as extracted from idStudio, or downloaded from a template version with the code for you. In the objects menu, navigate to scripts, item_19. Click "Edit ActionScript" to enable the code editor Scroll down to public function item_19() and ensure that 39,this.frame40, is present in addFrameScript to ensure that the code gets executed. Some Flash editing software may add this automatically, but ffdec seems to not do this. 1,this.frame2, and 77,this.frame78, will also be needed for the two-column code. Add the following frame41 code block if it's not already present. Add the maps present in your mod, and give them a number to be used in the logic entity step later on in this guide. You may also wish to add the code blocks for frames 2 and 78. This code will split your map list into two columns, which may be optional or mandatory depending on how many maps are in your mod. If a mod contains too many levels, the list could get cut off the screen, so this code will make much better use of the available space. The line of code this.wrapIndex = 8; defines how many levels should be listed in the left columnm, with 0 being the first entry. So if, for example, you wanted the left column to contain only all 9 Battlemode maps, you would set this value to 8. Click Save in the code editor to apply the code, then click save on the ribbon menu to save the entire SWF file. A separate guide is linked below for using modded SWFs with the mod injector. Mandatory - code for cvar output. internal function frame41() : * { if(this.label.txtVal.text == "Forsaken") { setCVarInteger("g_demonSelect",1); } if(this.label.txtVal.text == "Penance") { setCVarInteger("g_demonSelect",2); } if(this.label.txtVal.text == "Tundra") { setCVarInteger("g_demonSelect",3); } } The code will detect the string's contents, not the identifier. Either modify the strings referenced by the map info decls such that the maps have the same name consistently across localizations, or add individual translations to the ActionScript code. If you neglect this step, the code will not be effective for players that run the game in a language other than the one your multiplayer mod was tested with. g_demonSelect was chosen because it does not have an impact on anything in the game engine, it appears to have only been added to be checked by the logic entity in the demon tutorial, which a player is not likely to enter while a multiplayer mod is installed. Optional - code to split the map list into two columns. internal function frame2() : * { this.itemIndex = strReplace(this.name,"item","") * 1; this.wrapIndex = 8; if(this.itemIndex > this.wrapIndex) { if(this.x == 0) { this.x = 900; this.y -= 110 * (this.wrapIndex + 1); } } } internal function frame78() : * { this.itemIndex = strReplace(this.name,"item","") * 1; this.wrapIndex = 8; if(this.itemIndex > this.wrapIndex) { if(this.x == 0) { this.x = 900; this.y -= 110 * (this.wrapIndex + 1); } } } Editing the Logic Entity. In the shell entities file, add an idTarget_Command entity for each map to load using the loaddevmenuoption command. You should also add an idTarget_Command executing any variables that optimize your mod if you have not done so already. Append g_demonSelect 0 to it such that a map loading command does not get executed prematurely when the players exit a map back to the lobby menu. In the logic entity editor, add the following nodes to execute these command entities: A getConsoleVariable node to retrieve the integer value of g_demonSelect set through the SWF code outlined earlier. A begin node that connects to an activate entities node to trigger your aforementioned console command entity containing your mod's optimizations. The logic entity has not been tested without the delay node, but the delay is probably necessary to prevent the game from locking up because the logic entity is intentionally looped indefinetely. It's recommend to set this to around 500 milliseconds or so for optimization while keeping the map selection responsive. The node activating your optimization command entity should trigger this node. An integer switch function: this is what actually acts upon the demon select cvar. It should be triggered by the delay node. Make sure that the 0 option loops back to the delay node, so that the check can keep running until the player selects an option. activate entity nodes to connect to each individual case, each listing an idTarget_Command entity for loading a map. Optional - add a "random map" entry. If your mod contains several levels, you can add options for selecting a random map, just for fun. In the logic entity editor's properties dialog, add a variable of the type Entity/List, and add all the target command entities. If desired, you can add multiple variables, for example, a separate option that picks only the Battlemode maps. Add your node for each custom variable you added. Connect your custom variable node to a get random entity node, then connect it's entity pin to another activate entity node, which is triggered by the corresponding integer that was added for the random option. See also SWF modding