Entities

A description of various entities that shape the level.

Entities List (Doom Eternal)

An incomplete list of known entity classes in Doom Eternal:

idAASObstacle
idAASReachability
idAbnormalPlayerMetrics
idActionNode
idActor
idActorAmbientFilter
idActorWorkNode
idAFEntity_Corpse
idAFEntity_Dummy
idAFEntity_Generic
idAFEntity_GetUpTest
idAI2
idAIAASHint
idAICombatHint
idAICombatHint_SuppressionFirePoint
idAIDeathVolume
idAIDebugCamera
idAIHint
idAIHintGroup
idAIInteraction
idAIMapMarkupEntity
idAISearchHintAnimation
idAISearchHintAuto
idAISearchHintGroup
idAITest
idAITest_Rotation
idAlignedEntity
idAmbientNodeExclusionArea
idAmbientNodeGenerationArea
idAmbientTriggerModifier_SetAITypes
idAnimated
idAnimated_AnimWeb
idAnimated_AnimWeb_Samuel
idAnimated_ThreatSensor
idAnimatedAttachment
idAnimatedAttachment_AF
idAnimatedEntity
idAnimatedInteractable
idAnimatedSimple_AnimSys
idAnimatedSimple_Faust
idAnimCamera
idAnimNode
idAnnouncementManager
idArchvileTemplate
idAutomapMapGroupRevealEntity
idAutomapSectionRevealTrigger
idBarricade
idBasePropSpawner
idBFG_Geyser
idBfgBurn
idBillboard
idBloatedEntity
idBossInfo
idBotActionEntity
idBotActionEntity_Info
idBotActionEntity_Info_POI
idBotActionEntity_Info_RoamGoal
idBotActionEntity_Usable
idBotPathNodeEntity
idBreakable
idBreakablePlatform
idBuildArea
idCamera
idCameraView
idCampaignInvaderStart
idCaptureFrames
idCinematicCamera
idCollectibleEntity
idCollisionExclusionVolume
idCollisionStreamArea
idCombatGrouping
idCombatVolume
idCoopStartingInventory
idCrusher
idCyberdemonMissileShooter
idDamageableAttachment
idDeathmatchPlayerStart
idDebrisEntity
idDecalEntity
idDecalEntity_Coop
idDemonPlayer
idDemonPlayer_Arachnotron
idDemonPlayer_Archvile
idDemonPlayer_Baron
idDemonPlayer_Cacodemon
idDemonPlayer_Mancubus
idDemonPlayer_Marauder
idDemonPlayer_PainElemental
idDemonPlayer_Pinky
idDemonPlayer_Prowler
idDemonPlayer_Revenant
idDemonPlayer_Summoner
idDemonPlayerStart
idDestroyableProp
idDestructible
idDestructibleManager
idDynamicEntity
idDynamicEntity_Damageable
idDynamicVisibilityBlocker
idEditorModelEntity
idElectricBoltEmitter
idEncounterAmbientAudio
idEncounterGroupMgr
idEncounterManager
idEncounterModifier_Reset
idEncounterModifier_SetEnabledState
idEncounterModifier_SetNextScriptIndex
idEncounterTrigger_AmbientAIAudio
idEncounterTrigger_Commit
idEncounterTrigger_Exit
idEncounterTrigger_OverrideCombatGrouping
idEncounterTrigger_PreCombat
idEncounterTrigger_RaiseUserFlag
idEncounterVolume_ValidCover
idEnergyShell
idEngineEntity
idEntity
idEntityCamera
idEntityFx
idEntityFxRandom
idEnvArea
idEnvironmentalDamage_Hurt_Trigger
idEnvironmentalDamage_Point
idEnvironmentalDamage_PointManager_Trigger
idEscapePod
idExtraLifeTeleportLocation
idFlightVolumeTraversalSpline
idFreeCamera
idFreeDbgCam
idFuncRotate
idFuncShadowCaster
idFuncSwing
idGameChallenge
idGameChallenge_CampaignSinglePlayer
idGameChallenge_Horde
idGameChallenge_PVP
idGameChallenge_PVPTutorial
idGameChallenge_Shell
idGeomCacheEntity
idGladiatorShield
idGoreEntity
idGuiEntity
idGuiEntity_Cinematic
idGuiEntity_Text
idHeightmapVolumeEntity
idHighlightBehavior
idHighlightBehavior_Augment
idInfluenceSpawnSettings
idInfo
idInfo_BounceDestination
idInfo_DoorTraversalChain
idInfo_FastTravel
idInfo_SpawnConditionProxy
idInfo_TeleportDestination
idInfo_TraversalBase
idInfo_TraversalChain
idInfo_TraversalPoint
idInfo_Trigger_Facing_Target
idInfo_UniversalTraversal
idInfoAAS
idInfoAmbient
idInfoBounds
idInfoCloudShot
idInfoCover
idInfoCoverExposed
idInfoDebugMarker
idInfoExportHint
idInfoFlightVolumeEntrance
idInfoFocus
idInfoGoalPosition
idInfoLevelFadeIn
idInfoLookTarget
idInfoLookTargetGroup
idInfoOrbit
idInfoPath
idInfoPlayerHud
idInfoRoam
idInfoRuler
idInfoSpawnPoint
idInfoSplineChild
idInfoStandPoint
idInfoTexLod
idInfoTraversal
idInfoTraversal_Bot
idInfoTraversal_Ultimate
idInfoTraversalEndPoint
idInfoWaitForButtonAfterLoad
idInteractable
idInteractable_Automap
idInteractable_BatterySocket
idInteractable_Challenge_Shrine
idInteractable_CollectibleViewer
idInteractable_CurrencyExchange
idInteractable_Doom
idInteractable_EliteGuard
idInteractable_EliteGuard_Coop
idInteractable_GiveItems
idInteractable_GoreBud
idInteractable_GoreNest
idInteractable_HighlightSelector
idInteractable_JukeBox
idInteractable_LootCrate
idInteractable_LootDrop
idInteractable_Minigame
idInteractable_Moveable
idInteractable_NightmareMarker
idInteractable_Obstacle
idInteractable_Respec
idInteractable_Rune
idInteractable_Shooter
idInteractable_SlayerGate
idInteractable_SlayerGate_Coop
idInteractable_SonicBoost
idInteractable_Tutorial
idInteractable_VegaTraining
idInteractable_WeaponModBot
idInteractable_WorldCache
idInteractionCamera
idInvasionAreaManager
idInvasionBlocker
idInventoryStorage
idIOS_MeteorCrater
idItemPropSpawner
idJostleAnimated
idJostleSpring
idJostleSwivel
idLensFlare
idLight
idLogicEntity
idLowGravityMover
idMidnightCutscene
idMover
idMoverModifier
idMultiplayerTrigger
idMusicEntity
idNetworkedEntityFx
idNetworkedParticleEmitter
idNetworkLight
idObjective_Relay
idOverTheShoulderCamera
idParticleEmitter
idPathCorner
idPerceptionVolume
idPhotoModeCamera
idPieceEmitter
idPlayer
idPlayerStart
idPortalSurface
idPortalWorld
idPoseableEntity
idProjectile
idProjectile_AIHomingRocket
idProjectile_Auger
idProjectile_BfgArc
idProjectile_BfgBurn
idProjectile_CacoDemonRocket
idProjectile_CyberdemonSwarmMissile
idProjectile_DamageOverTime
idProjectile_Destroyer
idProjectile_EMP
idProjectile_Grenade
idProjectile_GrenadeFast
idProjectile_Mancubus_Smoke
idProjectile_MeatHook
idProjectile_Rocket
idProjectile_RollingFire
idProjectile_SiphonGrenade
idProjectile_SwarmMissile
idProjectile_SwarmMissile_V2
idProjectileShield
idProp
idProp_AIArmor
idProp_ArmorPickup
idProp_Breakable
idProp_BreakableLoot
idProp_ContinuallyUsed
idProp_Coop
idProp_Coop_Billboard
idProp_DemonCircle
idProp_ElectricArmor
idProp_Explosive
idProp_HealthPickup
idProp_Moveable
idProp_OnlineCollectible
idProp_Pickup
idProp_PlayableDemonCircle
idProp_Spawnable
idProp_Static
idProp_Usable
idProp_WeaponPickup
idProp_WeaponStatic
idProp2
idPurifyingBeam
idReferenceMap
idRegenArea
idResurrectionProxy
idRibbon2Emitter
idRiftBuildPosition
idRotatableCamera
idSlowMotionCamera
idSoundAreaEntity
idSoundBeamEntity
idSoundBoxEntity
idSoundEntity
idSoundPrefetchEntity
idSoundSphereEntity
idSoundSubtitlesEntity
idSoundTrigger
idSpawnArea
idSpawnNode
idSpawnNodeSplines
idSpawnPoint
idSpectacleCamera
idSpectatorCamera
idSpitfireCannon
idSplinePath
idSpringCamera
idStaticEntity
idStaticMultiGuiEntity
idStaticVisibilityBlocker
idStaticWaterEntity
idSummoningTemplate
idSyncEntity
idTarget
idTarget_ActionScript
idTarget_AdaptiveTickToggle
idTarget_AIEvent
idTarget_AIGlobalSettings
idTarget_AIProxy
idTarget_AmplitudeTrigger
idTarget_AnimWebChangeState
idTarget_AnimWebChangeStateVia
idTarget_AnimWebPause
idTarget_AnimWebUnpause
idTarget_ApplyExplosionImpulse
idTarget_ApplyImpulse
idTarget_Award_Adrenaline
idTarget_Award_RushAttack
idTarget_Break
idTarget_ChangeColor
idTarget_ChangeMaterial
idTarget_ChangeVolume_PlayerEnvOverride
idTarget_ClearFakeEnemy
idTarget_Codex
idTarget_CollisionDamage
idTarget_Command
idTarget_Conditional
idTarget_ConditionalAccessor
idTarget_Count
idTarget_Count_Random
idTarget_Credits
idTarget_CurrencyCheck
idTarget_Cvar
idTarget_Damage
idTarget_DeactivateStatusEffects
idTarget_DemonBountyAiTypes
idTarget_DevLoadoutSwap
idTarget_DisableEscMenu
idTarget_DisableInvasion
idTarget_Disconnect
idTarget_Disconnect_GoToScreen
idTarget_DormancyRadius
idTarget_DummyFire
idTarget_DynamicChallenge_End
idTarget_DynamicChallenge_FailChallenge
idTarget_DynamicChallenge_GiveBonus
idTarget_DynamicChallenge_PointTrigger
idTarget_DynamicChallenge_Start
idTarget_EnableAIEvent
idTarget_EnableGroup
idTarget_EnableTarget
idTarget_EncounterChallenge
idTarget_EndInvasion
idTarget_EndOfCampaign
idTarget_Enemy
idTarget_EquipItem
idTarget_FadeComplete
idTarget_FakeEnemy
idTarget_FastTravelInhibit
idTarget_FastTravelUnlock
idTarget_FireWeapon
idTarget_FirstThinkActivate
idTarget_ForceDormancy
idTarget_ForceGroupRole
idTarget_GameChallengeGameOver
idTarget_GameStateIntInc
idTarget_GameStateIntSet
idTarget_GeomCacheStreamer
idTarget_GiveItems
idTarget_GiveWeaponUpgradePoints
idTarget_GroupExpression
idTarget_GroupMessage
idTarget_GUICommand
idTarget_Hide
idTarget_HideHands
idTarget_InteractionAction
idTarget_Intro
idTarget_InventoryCheck
idTarget_LayerStateChange
idTarget_LevelTransition
idTarget_LightController
idTarget_MakeActivatable
idTarget_MapGroupUnlock
idTarget_Melee
idTarget_ModifyGroup
idTarget_ModifyTraversalClass
idTarget_Notification
idTarget_Objective_Complete
idTarget_Objective_Give
idTarget_Objective_HideEntities
idTarget_Objective_Replace
idTarget_Objective_Triggered
idTarget_Path
idTarget_Perk
idTarget_Ping
idTarget_PlayerCheckpoint
idTarget_PlayerInvulnerability
idTarget_PlayerModifier
idTarget_PlayerStatModifier
idTarget_PlayerStatus
idTarget_PlayerViewEffect
idTarget_PlayerWhiplash
idTarget_PlayVoiceOver
idTarget_PodiumSpawn
idTarget_POI
idTarget_Print
idTarget_RandomImpulse
idTarget_Remove
idTarget_RemoveItems
idTarget_RemoveSaveGate
idTarget_Secret
idTarget_SetGroupCombatStage
idTarget_SetInEncounterGroup
idTarget_SetSpawnSpot
idTarget_ShakeTrigger
idTarget_Show
idTarget_ShowGui
idTarget_ShowHands
idTarget_Snap_Objective
idTarget_SoundDuck
idTarget_Spawn
idTarget_Spawn_Parent
idTarget_Spawn_Target
idTarget_StartSoundShader
idTarget_Subtitle
idTarget_SwapFaction
idTarget_SwapNavMesh
idTarget_Teleport
idTarget_TestPlayerState
idTarget_Timeline
idTarget_Timer
idTarget_TutorialGui
idTarget_UnlockUltraNightmare
idTarget_ViewPos
idTarget_VisibilityController
idTargetSpawnGroup
idTeamCapturePoint
idTeleporterPad
idTendrilEye
idTest_MetaData_Bounds
idTest_MetaData_Circle
idTest_MetaData_Cylinder
idTest_MetaData_Cylinder2
idTest_MetaData_Fov
idTest_MetaData_FovPitch
idTest_MetaData_FovYaw
idTest_MetaData_Line
idTest_MetaData_Model
idTest_MetaData_MoveableSpheres
idTest_MetaData_Plane
idTest_MetaData_SectorPitch
idTest_MetaData_SectorYaw
idTest_MetaData_String
idTest_MetaData_Target
idTest_MetaData_WebPath
idTest_Sector
idTestEntity
idTestModel2
idTexlodNodeGenerationArea
idToucher
idTrailerCamera
idTrigger
idTrigger_AIInteraction
idTrigger_BouncePad
idTrigger_ChallengeBoundry
idTrigger_Damage
idTrigger_DemonDamageOutModifier
idTrigger_Dormancy
idTrigger_DummyFire
idTrigger_DynamicHurt
idTrigger_EnergyField
idTrigger_Facing
idTrigger_ForcePlayerBodyReactionOnce
idTrigger_GorillaBar
idTrigger_Hurt
idTrigger_InvasionAreaEnter
idTrigger_InvasionAreaExit
idTrigger_ModPlayerVelocity
idTrigger_MovementModifier
idTrigger_Multiplayer
idTrigger_Push
idTrigger_RemoveEntities
idTrigger_RemoveInventoryItems
idTrigger_Repulsor
idTrigger_SonicBoom
idTrigger_StatDrivenEvent
idTrigger_TakeDamage
idTrigger_Teleporter
idTrigger_Teleporter_Fade
idTrigger_TestPlayerState
idTrigger_VisibilityController
idTrigger_VoiceCommunication
idTriggerToucher
idTurret
idUmbraVisibilityContributionVolume
idUmbraVolume
idUtilityCamera
idVolume
idVolume_Blocking
idVolume_ControlPointSpawnInfluence
idVolume_CustomLedgeGrab
idVolume_Damage
idVolume_DamageOverTime
idVolume_DemonicBait
idVolume_DemonicPossession
idVolume_DeployedLaser
idVolume_DoomGravity
idVolume_EmpField
idVolume_Flight
idVolume_FlightObstacle
idVolume_ForceDormant
idVolume_Gravity
idVolume_Invasion
idVolume_InvasionInhibit
idVolume_InvasionSpawnZone
idVolume_KillDownedInjured
idVolume_LightRigModifier
idVolume_LocationCalling
idVolume_MancubusFlamethrower
idVolume_MancubusSteam
idVolume_MancubusSteamFX
idVolume_MatterBallWarp
idVolume_OliviasGuardFight_DangerZone
idVolume_PlacedFlightVolume
idVolume_PlasmaPuddle
idVolume_PlasmaPuddleFX
idVolume_PlayerBodyReaction
idVolume_PlayerEnvOverride
idVolume_PlayerUseProxy
idVolume_PlayerViewEffect
idVolume_RevivePlayer
idVolume_RunCycleHint
idVolume_RuneHint
idVolume_SecretHint
idVolume_Siphon
idVolume_SpaceWarp
idVolume_Stairs
idVolume_StatusEffect
idVolume_StealthField
idVolume_StreamTreeMarkup
idVolume_ToggleableDamageOverTime
idVolume_TogglePlayerBodyReaction
idVolume_TraversalGen
idVolume_Trigger
idVolume_VisualImpairment
idWaterEntity
idWaveShield
idWeaponEntity
idWorldClipBounds
idWorldspawn
jakesDevWidget

idAI2

An entity for AI/NPCs, usually demons.

idAI2 can be individually placed throughout a map, or more preferably, spawned with an idTarget_Spawn. The exact ai type of the idAI2 can be checked by looking at the inherit parameter.

Usage

This is an example of a Hell Soldier AI.

idAI2 entities can greatly vary based on the AI.

entity {
	layers {
		"spawn_target_layer"
	}
	entityDef example_ai_soldier_eternal {
	inherit = "ai/fodder/soldier_blaster";
	class = "idAI2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = { // See "struct idAI2 : public idActor"
		highlightDecl = "glorykill_highlight";
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 0.600000024;
				y = 0.600000024;
				z = 1.829;
			}
		}
		dormancy = {
			delay = 30;
			distance = 19.5070019;
		}
		spawn_statIncreases = { // Increase these stats on spawn
			num = 1;
			item[0] = {
				stat = "STAT_AI_SPAWNED";
				increase = 1;
			}
		}
		targetingDecl = "characters/soldier_blaster"; // Targeting Decl ( defines specific aim assist / AR target points )
		actorConstants = { // See "struct idActor::idActorConstant"
			perception = {
				eyeOffset = { // offset of eye relative to physics origin {{ units = m }}
					z = 1.71500003;
				}
				crouchedEyeOffset = { // eye offset when crouched {{ units = m }}
					z = 1.06700003;
				}
			}
			actorSounds = {
				sndFootsteps = "footsteps/hellified_soldier/hs_footstep";
				sndRagdollStart = "play_hell_soldier_death_short";
			}
			footstepEffectTable = "impacteffect/footsteps/ai_soldier";
			footstepEvents = "footstepevents/default";
			painInfo = {
				decayDelay = 1000; // delay for the decay, in game ticks.
				bucketMaxValue = 400; // the max value for the leaky bucket
				decayRate = -20; // the decay rate for the bucket
			}
			bulletPenetrationData = {
				energyCostToPenetrate = 10; // costs this much penetration energy to penetrate this actor
				damageScaleToPenetrate = 0.75; // bullet damage is scaled by this amount after penetrating
			}
			footstepEffectTable_Sprint = "impacteffect/footsteps/ai_soldier_sprint";
			footstepEffectTable_SlowWalk = "impacteffect/footsteps/ai_soldier";
			footstepEffectTable_CrouchWalk = "impacteffect/footsteps/ai_soldier";
			footstepEffectTable_Landing = "impacteffect/footsteps/ai_soldier_landing";
			footstepEffectTable_HeavyLanding = "impacteffect/footsteps/ai_soldier_landing";
			ledgeGrabEffectTable = "impacteffect/footsteps/ai_soldier";
			ledgeGrabEffectTable_Heavy = "impacteffect/footsteps/ai_soldier";
			ledgeGrabEffectTable_Friendly = "impacteffect/footsteps/ai_soldier";
			ledgeGrabEffectTable_FriendlyHeavy = "impacteffect/footsteps/ai_soldier";
		}
		actorEditable = { // See "struct idActor::idActorEditable"
			entityDamageComponent = { // names of joint groups, their associated damage scale, and armor level
				entityDamage = "entitydamage/ai/soldier_blaster/base";
			}
			injuredStates = { // defines parameters of each injured state, see "struct idInjuredState"
				num = 1;
				item[0] = {
					name = "not_injured";
					damageGroupMaxGoreLevels = {
						num = 6;
						item[0] = {
							damageGroupName = "head";
							maxGoreLevel = "GORELEVEL_TATTERED";
						}
						item[1] = {
							damageGroupName = "chest";
							maxGoreLevel = "GORELEVEL_TATTERED";
						}
						item[2] = {
							damageGroupName = "right_arm";
							maxGoreLevel = "GORELEVEL_TATTERED";
						}
						item[3] = {
							damageGroupName = "left_arm";
							maxGoreLevel = "GORELEVEL_TATTERED";
						}
						item[4] = {
							damageGroupName = "right_leg";
							maxGoreLevel = "GORELEVEL_TATTERED";
						}
						item[5] = {
							damageGroupName = "left_leg";
							maxGoreLevel = "GORELEVEL_TATTERED";
						}
					}
					allowIK = true; // true if AI uses IK in this injured state
					canUseAllTraversalsWhileInjured = true; // true if AI can use all traversals in this injured state
					canUseDownTraversalsWhileInjured = true; // true if AI can use down traversals in this injured state
				}
			}
			radiusDamageJoints = { // names of joints to trace to for radius damage tests
				num = 6;
				item[0] = "head_part01_md";
				item[1] = "spine_part01_md";
				item[2] = "arm_hand_lf";
				item[3] = "arm_hand_rt";
				item[4] = "leg_lower_lf";
				item[5] = "leg_lower_rt";
			}
		}
		factionName = "blaster";
		mass = 18.1439991; // mass of the actor {{ units = kg }}
		lootable = false;
		lootDropComponent = { // lootdrop decl for campaign
			lootDropDataDecl = "ai/default_fodder";
		}
		pvpLootDropComponent = { // lootdrop decl for Battlemode
			lootDropDataDecl = "ai/default_fodder_pvp";
		}
		aiConstants = { // See "struct idAI2::idAIConstant"
			components = {
				ptr = {
					ptr[12] = {
						componentDecl = "aicomponent/pathmanager/base";
					}
					ptr[14] = {
						componentDecl = "aicomponent/attack/base";
					}
					ptr[9] = {
						componentDecl = "aicomponent/positionawareness/soldier_blaster/base";
					}
					ptr[10] = {
						componentDecl = "aicomponent/extendedsense/soldier_blaster/base";
					}
					ptr[11] = {
						componentDecl = "aicomponent/transientfocus/soldier_blaster/base";
					}
					ptr[13] = {
						componentDecl = "aicomponent/soldier_blaster";
					}
				}
			}
			syncMelee = { // See "struct idSyncAttack"
				msAfterAttackBeforeCanSync = 250; // how long after a regular attack before a sync attack can be performed
				syncMeleeEntityDefs = { // entityDef decls for syncmelee
					num = 2;
					item[0] = "syncmelee/soldier_blaster";
					item[1] = "syncmelee/soldier_blaster_3p";
				}
				syncGroups = { // See "struct idSyncAttack"
					num = 1;
					item[0] = {
						syncGroupName = "";
						syncInteractions = { // syncInteraction decls
							num = 19;
							item[0] = "syncdeath/playervsai/soldier_blaster/right_upper";
							item[1] = "syncdeath/playervsai/soldier_blaster/left_upper";
							item[2] = "syncdeath/playervsai/soldier_blaster/front_upper";
							item[3] = "syncdeath/playervsai/soldier_blaster/front_head";
							item[4] = "syncdeath/playervsai/soldier_blaster/left_lower";
							item[5] = "syncdeath/playervsai/soldier_blaster/above_back";
							item[6] = "syncdeath/playervsai/soldier_blaster/above_front";
							item[7] = "syncdeath/playervsai/soldier_blaster/front_rightarm";
							item[8] = "syncdeath/playervsai/soldier_blaster/front_leftarm";
							item[9] = "syncdeath/playervsai/soldier_blaster/berserk/berserk_above_front";
							item[10] = "syncdeath/playervsai/soldier_blaster/chainsaw/cut_back";
							item[11] = "syncdeath/playervsai/soldier_blaster/back_lower";
							item[12] = "syncdeath/playervsai/soldier_blaster/chainsaw/cut_front";
							item[13] = "syncdeath/playervsai/soldier_blaster/berserk/berserk_front_upper";
							item[14] = "syncdeath/playervsai/soldier_blaster/right_lower";
							item[15] = "syncdeath/playervsai/soldier_blaster/back_upper";
							item[16] = "syncdeath/playervsai/soldier_blaster/crucbile/crucible_front";
							item[17] = "syncdeath/playervsai/soldier_blaster/crucbile/crucible_back";
							item[18] = "syncdeath/playervsai/soldier_blaster/front_lower";
						}
					}
				}
				alwaysAllowChainsawGloryKill = true; // if true then always allow chainsaw glory kills without needing stagger states or other such things
			}
			aiDeathStat = "STAT_HELL_MARINE_KILLED"; // what stat to increase on death of this ai
			positioningParms = { // parms used to control major positioning in behaviour finite state machine
				num = 2;
				item[0] = "soldier_blaster/plasma";
				item[1] = "soldier_blaster/plasma_object";
			}
			aiDeathCodex = "codex/hell/demon_soldier_blaster"; // what codex to give the player when this ai dies
		}
		aiEditable = { // See "struct idAIEditable"
			perception = { // See "struct idAIPerception"
				actorPerceptionRadius = 39; // max radius at which AI can perceive other actors {{ units = m }}
				obstaclePerceptionRadius = 78; // max radius at which AI can perceive obstacles {{ units = m }}
				closePerceptionRadius = 5; // max radius .... for close FOV {{ units = m }}
				eventPerceptionRadius = 39; // max radius at which AI will perceive any events {{ units = m }}
				senseUpdatesOnNonEnemies = false; // if true, AI will skip all worldstate updates for non-enemies
			}
			useTouchComponent = true;
			death = { // See "struct idAIEditable::idAIDeath"
				ignoreDamageType = "DAMAGETYPE_EMP"; // entity will not take any damage from any damage decl that ANDs with this value
				fadeOutAfterDeathDelay_Seconds = { // delay burn-away fx until at least after this much time ( 0 uses default, negative implies never )
					value = 3;
				}
				removeAfterFadeOutDelay_Seconds = { // remove the entity this long after burn away fx start
					value = 3;
				}
				canBecomeInjured = false; // if true, AI can become injured and use injured runs and idles
				explosionDecl = "ai/default";
				declTwitchPain = "twitchpain/soldier_blaster";
				deathAnim = ""; // animation to force on death
				trigger = ""; // idEntity to trigger on death
				triggerGloryKill = ""; // idEntity to trigger on death by glory kill
				triggerNonGloryKill = ""; // idEntity to trigger on death by normal kill
				onlyDieByGK = false; // true if the AI will only die as a result of receiving sync damage (glory killed)
			}
			movement = { // See "struct idAIEditable::idAIMovement"
				wanderRadius = 19.5070019; // how far an AI can randomly wander from its spawn position {{ units = m }}
				useTraversalClassA = true; // if true, can use class A traversals
			}
			cover = { // See "struct idAIEditable::idAICoverInfo"
				coverRadius = 19.5070019; // max radius at which the AI will check for cover {{ units = m }}
			}
			behaviors = { // See "struct idAIBehaviors"
				decl = "behaviors/soldier_blaster/soldier_blaster"; // the behavior typeinfo decl this behavior uses.
				declBehaviorEvents = "behaviorevents/default"; // AI events
				attackGraph = "ai/soldier_blaster"; // available attacks
			}
			vsAIDamageMask = "HEALTH"; // damageCategoryMask_t; how to process damage taken from other AI
			spawnSettings = { // Refer to "struct idAIEditable::idAISpawn"
				entranceAnimPath = "animweb/characters/monsters/soldier_blaster/spawn/teleport_entrance"; // initial animation to play specified via animref if entranceAnim not given
				spawnFXEntityDef = "fx/spawn_in_fodder"; // entity def for fx to use when spawned with AIOVERRIDE_TELEPORT
				initialState = "AIOVERRIDE_TELEPORT"; // initial valye for aiStateOverride_t; can be overwritten in the spawn target
				teleportDelayMS = 750; // How long it takes to spawn in when using AIOVERRIDE_TELEPORT
				chanceMissingArmor = { // See "struct idAIEditable::idAIMissingArmor"
					num = 0;
					item[0] = {
						damageGroup = "head"; // damage group whose armour may or may not be there
						missingChance = 100; // 0-100 % chance that armour is missing
					}
				}
			}
			demonTeamInfo = {
				canHostLostSouls = true;
			}
			staggerEnabled = true; // Set to false to disable staggering
		}
		aiHealth = { // Refer to "struct idHealthT < aiHealthComponent_t , AI_HEALTH_MAX , AI_HEALTH_HITPOINTS >"
			components = {
				components[1] = {
					max = 0; // Max regen allowed
					regenInterval = { // interval, in seconds, between regen updates.
						value = 0;
					}
				}
				components[0] = {
					max = 400; // Max HP allowed
					starting = 400; // HP when spawned
				}
			}
		}
		goreComponent = { // See "struct idGoreComponent"
			goreContainer = "ai/fodder/soldier"; // gore component decl
		}
		afProperties = { // See "struct idAnimator_AF : public idAnimator_Base"
			impactEffectTable = "impacteffect/ragdoll/ragdoll_fodder"; // impact table for sound and particles
			articulatedFigure = "characters/monsters/soldier_blaster_auto"; // the articulated figure decl to use
		}
		renderModelInfo = {
			model = "md6def/characters/monsters/soldier_blaster/base/soldier_blaster.md6"; // md6def decl to use
			lightRigDecl = "soldier_blaster/soldier_blaster_default";
			materialRemap = { // Use to replace the textures on a per entity basis
				num = 0;
			}
		}
		fxDecl = "character/hellified_soldier_blaster/hellified_soldier_blaster"; // fx decl for this entity
		startingInventory = { // See "struct idInventoryAttachmentDef"
			num = 2;
			item[0] = {
				startSlot = "EQUIPPED"; // startingSlot_t; EQUIPPED, HOLSTERED, or BACKPACK
				inventoryDecl = "weapon/ai/soldier_blaster/plasma"; // inventory decl for this attachment
			}
			item[1] = {
				showHolstered = false; // if true, attach and show the item when it's holstered
				inventoryDecl = "weapon/ai/soldier_blaster/plasma_slug";
			}
		}
		walkIKDecl = "walkik/biped_base";
		killerNames = { // What to string display when killed by this entity
			num = 1;
			item[0] = "#str_decl_demoncard_summon_fodder_blaster_soldier_name_GHOST53375";
		}
		spawnPosition = { // Spawn position does not really matter
			x = 1;
			y = 1;
			z = 1;
		}
		flags = {
			hide = true;
		}
	}
}
}

idArchvileTemplate

An entity to control what ai types an Archvile can summon.

Usage

entity {
	entityDef example_archvile_template {
	class = "idArchvileTemplate";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		summonList = { // List of ai types to spawn
			aiSpawnTypeList = {
				num = 10;
				item[0] = "ENCOUNTER_SPAWN_PROWLER";
				item[1] = "ENCOUNTER_SPAWN_HELL_KNIGHT";
				item[2] = "ENCOUNTER_SPAWN_MANCUBUS";
				item[3] = "ENCOUNTER_SPAWN_REVENANT";
				item[4] = "ENCOUNTER_SPAWN_CARCASS";
				item[5] = "ENCOUNTER_SPAWN_DREAD_KNIGHT";
				item[6] = "ENCOUNTER_SPAWN_CACODEMON";
				item[7] = "ENCOUNTER_SPAWN_PAIN_ELEMENTAL";
				item[8] = "ENCOUNTER_SPAWN_CYBER_MANCUBUS";
				item[9] = "ENCOUNTER_SPAWN_ARACHNOTRON";
			}
		}
		spawnPosition = {
			x = 0;
			y = 0;
			z = 0;
		}
	}
}
}

See Also

 

idDestructible

An entity that can be destroyed by certain actions.

Breakable Concrete Wall

entity {
	entityDef game_destructible_e2m1_nest_breakable_concrete_wall_1 {
	inherit = "destructible/e2m1_nest/breakable_concrete_wall";
	class = "idDestructible";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		whenToSave = "SGT_CHECKPOINT";
		flags = {
			skipRenderModelReplication = true;
		}
		soundOffset = {
			z = 1.5;
		}
		renderModelInfo = {
			emissiveColor = {
				r = 0;
				b = 0;
				g = 0;
				a = 0;
			}
			emissiveScale = 6;
			model = "art/kit/hell_earth/walls/crack_concrete_a_whole.lwo";
			scale = {
				x = 0.699999988;
				y = 0.699999988;
				z = 0.699999988;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 7;
				y = 0.5;
				z = 7;
			}
			numSides = 6;
			offset = {
				y = 0.25;
			}
		}
		soundOcclusionBypass = true;
		targetingDecl = "destructible_wall";
		fxDecl = "gameplay/invasion/demon_door";
		destructible = {
			idleCommands = {
				num = 1;
				item[0] = {
					time = 10000;
					command = "IDLE_COMMAND_BECOME_STATIC";
				}
			}
			decl = "destructible/e2m1_nest/breakable_concrete_wall";
		}
		effectiveDamageTypes = {
			num = 5;
			item[0] = "damage/player/melee_d5_forward";
			item[1] = "damage/player/melee_d5_blood_punch";
			item[2] = "damage/special/ability_dash";
			item[3] = "damage/player/crucible";
			item[4] = "damage/firearm/melee_d5_crucible_projectile";
		}
		meleeOnDash = true;
		dissolveDistance = 20;
		demonPlayerRenderModel = "art/kit/hell_earth/walls/crack_concrete_a_demon.lwo";
		umbraSoundBlocking = "CAN_BLOCK";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		targets = {
			num = 1;
			item[0] = "game_target_secret_1"; // targets a secret
		}
		dormancy = {
			playerDistance = 20;
			playerRearwardDistance = 20;
			allowDistanceDormancy = false;
			allowDormancy = true;
			allowPvsDormancy = false;
		}
		disableTargetsOnReload = true;
	}
}
}

idDynamicEntity

An entity that consists of various objects not connected to the level geometry.

Usage

entity {
	entityDef example_func_dynamic {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Be sure to set its spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = { // Be sure to set its rotation
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
				}
			}
		}
		flags = {
			hide = false; // Set to true to hide the object
		}
		renderModelInfo = { // The visible model
			model = ""; // If set to NULL, then the object will be invisible
		}
		clipModelInfo = { // The physical dimensions
			clipModelName = ""; // If set to NULL, then you can move right through the object 
		}
	}
}
}

Example

This is an example of an energy barrier that would commonly be used to lock the player in an arena.

entity {
	entityDef example_energy_barrier {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Be sure to set its spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = { // Be sure to set its rotation
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
				}
			}
		}
		flags = {
			hide = false;
		}
		renderModelInfo = {
			model = "art/gameplay/gameplay_energyBarrier_a.lwo";
			scale = {
				x = 1.2;
				y = 1.2;
				z = 1.2;
			}
		}
		clipModelInfo = {
			clipModelName = "art/gameplay/gameplay_energyBarrier_b.lwo";
		}
	}
}
}

Simply activating the entity can toggle its hide flag.

See Also

activateTarget

idTarget_Count (Relays)

idEncounterManager

An entity that scripts the encounters. This is what is used to spawn in demons.

Usage

entity {
	entityDef example_encounter_manager {
	inherit = "encounter/manager";
	class = "idEncounterManager";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		enableAIHighlightOnFinish = true;
		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 = {
			x = 1;
			y = 1;
			z = 1;
		}
		combatRatingScale = "COMBAT_RATING_SCALE_IGNORE"; // Progress reward for Demonic Corruption Meter (set to none)
		ignoreTelemetry = true;
		encounterComponent = {
			entityEvents = {
				num = 1;
				item[0] = {
					entity = "example_encounter_manager";
					events = {
						num = 0; // eventCalls go here
					}
				}
			}
		}
		commitTriggers = {
			num = 0;
		}
		exitTriggers = {
			num = 0;
		}
		userFlagTriggers = {
			num = 0;
		}
	}
}
}

In the aiTypeDefAssignments line, the "actorpopulation/default/default_no_bosses" define what demons can spawn in the encounter.
DLC1 aiTypeDefAssignments would look like "actorpopulation/default/dlc1" and DLC2 would look like "actorpopulation/default/dlc2"

commitTriggers show what volume trigger would activate the encounter.

exitTriggers show what volume trigger would turn off the encounter.

userFlagTriggers show what Flag Triggers are enabled for the encounter.

Example

Encounter managers can be quite long, but this example displays a very simple encounter.

Here's a rundown of what it does chronologically:

1. Sets music to be light
2. Spawns a Hell Knight
3. Waits for 2 seconds
4. Spawns a Cacodemon
5. Continuously maintains 4 Imps at a time
6. Makes the AI aware of the player
7. Waits for 0 AI with the "main_combat" string to remain (which is the Hell Knight and Cacodemon)
8. Sets music to be heavy
9. Spawns a Baron of Hell
10. Waits for 0 AI with the "main_combat" string to remain (which is the Baron)
11. Stops all AI from respawning (which are the Imps)
12. Forces all remaining AI to charge towards you
13. Waits for 0 AI to remain
14. Sets music to be ambient

entity {
	entityDef example_encounter_manager {
	inherit = "encounter/manager";
	class = "idEncounterManager";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		enableAIHighlightOnFinish = true;
		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 = {
			x = 1;
			y = 1;
			z = 1;
		}
		combatRatingScale = "COMBAT_RATING_SCALE_IGNORE";
		ignoreTelemetry = true;
		encounterComponent = {
			entityEvents = {
				num = 1;
				item[0] = {
					entity = "example_encounter_manager";
					events = {
						num = 14;
						item[0] = {
							eventCall = {
								eventDef = "setMusicState";
								args = {
									num = 3;
									item[0] = {
										entity = "musicentity_1";
									}
									item[1] = {
										decl = {
											soundstate = "music_ghost_states/main_light";
										}
									}
									item[2] = {
										string = "Light Music";
									}
								}
							}
						}
						item[1] = {
							eventCall = {
								eventDef = "spawnSingleAI";
								args = {
									num = 3;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_HELL_KNIGHT";
									}
									item[1] = {
										entity = "example_spawn_1";
									}
									item[2] = {
										string = "main_combat";
									}
								}
							}
						}
						item[2] = {
							eventCall = {
								eventDef = "wait";
								args = {
									num = 2;
									item[0] = {
										float = 2;
									}
									item[1] = {
										bool = false;
									}
								}
							}
						}
						item[3] = {
							eventCall = {
								eventDef = "spawnSingleAI";
								args = {
									num = 3;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_CACODEMON";
									}
									item[1] = {
										entity = "example_spawn_2";
									}
									item[2] = {
										string = "main_combat";
									}
								}
							}
						}
						item[4] = {
							eventCall = {
								eventDef = "maintainAICount";
								args = {
									num = 8;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_IMP";
									}
									item[1] = {
										int = 4;
									}
									item[2] = {
										int = -1;
									}
									item[3] = {
										float = 2;
									}
									item[4] = {
										int = 3;
									}
									item[5] = {
										entity = "example_spawn_group";
									}
									item[6] = {
										string = "fodder";
									}
									item[7] = {
										float = 6;
									}
								}
							}
						}
						item[5] = {
							eventCall = {
								eventDef = "makeAIAwareOfPlayer";
								args = {
									num = 4;
									item[0] = {
										bool = true;
									}
									item[1] = {
										bool = true;
									}
									item[2] = {
										string = "";
									}
									item[3] = {
										bool = false;
									}
								}
							}
						}
						item[6] = {
							eventCall = {
								eventDef = "waitAIRemaining";
								args = {
									num = 4;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_ANY";
									}
									item[1] = {
										int = 0;
									}
									item[2] = {
										string = "main_combat";
									}
									item[3] = {
										bool = false;
									}
								}
							}
						}
						item[7] = {
							eventCall = {
								eventDef = "setMusicState";
								args = {
									num = 3;
									item[0] = {
										entity = "musicentity_1";
									}
									item[1] = {
										decl = {
											soundstate = "music_ghost_states/main_heavy";
										}
									}
									item[2] = {
										string = "Heavy Music";
									}
								}
							}
						}
						item[8] = {
							eventCall = {
								eventDef = "spawnSingleAI";
								args = {
									num = 3;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_BARON";
									}
									item[1] = {
										entity = "example_spawn_3";
									}
									item[2] = {
										string = "main_combat";
									}
								}
							}
						}
						item[9] = {
							eventCall = {
								eventDef = "waitAIRemaining";
								args = {
									num = 4;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_ANY";
									}
									item[1] = {
										int = 0;
									}
									item[2] = {
										string = "main_combat";
									}
									item[3] = {
										bool = false;
									}
								}
							}
						}
						item[10] = {
							eventCall = {
								eventDef = "stopMaintainingAICount";
								args = {
									num = 2;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_ANY";
									}
									item[1] = {
										string = "";
									}
								}
							}
						}
						item[11] = {
							eventCall = {
								eventDef = "forceChargeOnAllAI";
								args = {
									num = 0;
								}
							}
						}
						item[12] = {
							eventCall = {
								eventDef = "waitAIRemaining";
								args = {
									num = 4;
									item[0] = {
										eEncounterSpawnType_t = "ENCOUNTER_SPAWN_ANY";
									}
									item[1] = {
										int = 0;
									}
									item[2] = {
										string = "";
									}
									item[3] = {
										bool = false;
									}
								}
							}
						}
						item[13] = {
							eventCall = {
								eventDef = "setMusicState";
								args = {
									num = 3;
									item[0] = {
										entity = "musicentity_1";
									}
									item[1] = {
										decl = {
											soundstate = "music_ghost_states/main_ambient";
										}
									}
									item[2] = {
										string = "Ambient Music";
									}
								}
							}
						}
					}
				}
			}
		}
		commitTriggers = {
			num = 1;
			item[0] = "example_encounter_trigger_commit";
		}
		exitTriggers = {
			num = 1;
			item[0] = "example_encounter_trigger_exit";
		}
		userFlagTriggers = {
			num = 1;
			item[0] = "example_encounter_user_flag_trigger";
		}
	}
}
}

idEncounterTrigger_Commit

An entity used to trigger an encounter manager

Usage

entity {
	entityDef example_trigger_commit {
	inherit = "encounter/trigger/commit";
	class = "idEncounterTrigger_Commit";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		triggerOnce = false;
		spawnPosition = { // Be sure to set spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = { // Be sure to set trigger dimensions
			clipModelName = NULL;
		}
	}
}
}

Simply entering the trigger's volume will trigger the encounter manager if it has this entity added to it in the commitTriggers section.

See Also

idEncounterManager

idEncounterTrigger_Exit

 

idEncounterTrigger_Exit

An entity used to end an encounter manager

Usage

entity {
	entityDef example_trigger_exit {
	inherit = "encounter/trigger/exit";
	class = "idEncounterTrigger_Exit";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		triggerOnce = false;
		spawnPosition = { // Be sure to set spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = { // Be sure to set trigger dimensions
			clipModelName = NULL;
		}
		soundOcclusionBypass = true;
		forceAIToFlee = true; // Set to true if you want all AI to despawn once this is triggered
	}
}
}

Simply entering the trigger's volume will abruptly end the encounter manager if it has this entity added to it in the exitTriggers section.

Be sure to use exit triggers to despawn remaining AI when scripting brand new encounters.

See Also

idEncounterManager

idEncounterTrigger_Commit

idEncounterTrigger_RaiseUserFlag

An entity used to trigger (raise a flag) for encounters.

Usage

entity {
	entityDef example_user_flag {
	inherit = "encounter/trigger/user_flag";
	class = "idEncounterTrigger_RaiseUserFlag";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		triggerOnce = false;
		spawnPosition = { // Be sure to set spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = { // Be sure to set trigger dimensions
			clipModelName = NULL;
		}
		userFlag = "User_Flag"; // Flag Name
	}
}
}

Flag Triggers can activate when entering a certain section of the map or when activateTarget for the entity is used.
This is useful if you want to activate Energy Barriers to lock you in an arena, or if you need to enter a section of the arena for the encounter to progress.

If you only plan on triggering the User Flag through activateTarget, then clipModel dimensions would not be needed.

waitForEventFlag is the eventCall that this entity signals.

The Encounter Manager must contain the idEncounterTrigger_RaiseUserFlag entity for it to recognize the flag name.

idEntityFx

An entity that will play FX.

Usage

entity {
	layers {
		"game/pvp/slayer_team" // give the FX a layer
	}
	instanceId = 4206901337; // give the FX an instance ID so it can easily be attached to a timeline.
	originalName = "left_func_fx_slayer_portal_1";
	entityDef invasion_left_func_fx_slayer_portal_1_4206901337 { // use the entityDef when targeting this entity
	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 = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = { // spawn orientation requires all 3 mat
			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;
				}
			}
		}
		fxEffect = "gameplay/invasion/teleporter_flat_demon"; // the FX used
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

idEnvironmentalDamage_Hurt_Trigger

An entity that deals damage when entering its volume. Essentially the damaging part of a hazard.

Usage

entity {
	entityDef example_hurt_trigger {
	inherit = "envhazard/volume/electrical_blue";
	class = "idEnvironmentalDamage_Hurt_Trigger";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		killerNames = {
			num = 1;
			item[0] = ""; // What to string display when killed by this entity
		}
		envDamageType = "ENVIRONMENTAL_DAMAGE_NUM";
		envDamage = ""; // Uses a damage decl that will define how much damage is caused
		envDamageInterval = 500; // How often the hazard will damage you in milliseconds
		envWarningInterval = 500;
		spawnPosition = { // Be sure to set its spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = { // Be sure to set its rotation
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
				}
			}
		}
		renderModelInfo = { // The hazard would normally be invisible
			model = NULL;
		}
		clipModelInfo = {
			type = ""; // Defines what kind of shape it is
			size = { // Be sure to set its scale
				x = 1;
				y = 1;
				z = 1;
			}
			clipModelName = NULL;
		}
	}
}
}

Example

This example is an electric floor hazard.

entity {
	entityDef example_electric_hazard {
	inherit = "envhazard/volume/electrical_blue";
	class = "idEnvironmentalDamage_Hurt_Trigger";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		killerNames = {
			num = 1;
			item[0] = "#str_decl_damage_hazard_electrical_GHOST53193";
		}
		demonPlayerCanActivate = true;
		deadAiCanActivate = false;
		envDamageType = "ENVIRONMENTAL_DAMAGE_NUM";
		envDamage = "damage/hazard/electrical_bluefx";
		envDamageInterval = 500;
		envWarningInterval = 500;
		spawnPosition = { // Be sure to set its spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = { // Be sure to set its rotation
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
				}
			}
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = {
				x = 10;
				y = 10;
				z = 1;
			}
			clipModelName = NULL;
		}
	}
}
}

Hurt triggers are usually invisible so you should add a particle entity on it to convey its physical dimensions.

See Also

idParticleEmitter

idGameChallenge

An entity that determines the game mode for the level. Only one idGameChallenge entity can exist per entities file.

idGameChallenge_CampaignSinglePlayer

entity {
	entityDef gameplay_info_game_challenge_campaign_1 {
	inherit = "info/game_challenge/campaign";
	class = "idGameChallenge_CampaignSinglePlayer";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		networkSerializeTransforms = false;
		hostileTeamColor = {
			r = 1;
			g = 1;
			b = 0;
		}
		actorModifierListDecl = "actormodifiers_invasion";
		botGameManagerType = "BOT_GAME_MANAGER_TYPE_COOP";
		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";
		}
		gcGameEventCallouts = {
			lootBlockedCallout = "invasion/slayer_loot_blocked";
			demonCriticalHealth = "invasion/demon_critical_health";
			demonCriticalRecovery = "invasion/demon_health_recovery";
			demonRespawn = "invasion/demon_spawned";
			slayerCriticalHealth = "invasion/slayer_critical_health";
			slayerCriticalRecovery = "invasion/slayer_health_recovery";
		}
		hitConfirmSoundsInfo = "default";
		availableDemonCardDecks = {
			num = 1;
			item[0] = "demoncarddeck/invasion/deck_1";
		}
		invasionDemonOptions = {
			num = 5;
			item[0] = {
				actorModifierDecl = "actormodifier/invasion/demon/archvile";
				demonCardDeckDecl = "demoncarddeck/invasion/archvile/invasion_deck_1";
			}
			item[1] = {
				actorModifierDecl = "actormodifier/invasion/demon/mancubus";
				demonCardDeckDecl = "demoncarddeck/invasion/mancubus/invasion_deck_1";
			}
			item[2] = {
				actorModifierDecl = "actormodifier/invasion/demon/marauder";
				demonCardDeckDecl = "demoncarddeck/invasion/marauder/invasion_deck_1";
			}
			item[3] = {
				actorModifierDecl = "actormodifier/invasion/demon/painelemental";
				demonCardDeckDecl = "demoncarddeck/invasion/painelemental/invasion_deck_1";
			}
			item[4] = {
				actorModifierDecl = "actormodifier/invasion/demon/revenant";
				demonCardDeckDecl = "demoncarddeck/invasion/revenant/invasion_deck_1";
			}
		}
		globalAIsettings = "default";
		desummonKillDamage = "damage/hazard/pvp_round_kill";
		slayerHighlightDecl = "invasion/slayer_view_demon_outline";
		demonHighlightDecl = "invasion/demon_view_slayer_outline";
		teammateHighlightDecl = "invasion/demon_view_teammate_outline";
		demonSpawnTargetEntity = "online/summon_target";
		demonSpawnTargetEntityOneHit = "online/summon_target_onehit";
		demonDisguiseHideFXEntity = "online/invasion/fx/hide_fx";
		demonDisguiseRevealFXEntity = "online/invasion/fx/reveal_fx";
		demonBecomingGhostFXEntity = "online/invasion/fx/become_ghost_fx";
		demonPosessionFXEntity = "online/invasion/fx/posession";
		demonPossessionShootableEntity = "online/invasion/possession_shootable_target";
		demonPossessionTouchDamage = "damage/special/disguisetouch";
		spawnTimer = 15000;
		playerSpawnDef = "player";
		invasionCallouts = {
			demonDisguiseRevealed = "invasion/demon_disguise_revealed";
			slayerInvasionStart = "invasion/demon_player_joined";
			slayerInvasionPartyStart = "invasion/demon_party_joined";
			slayerVictory = "invasion/slayer_victory";
			demonVictory = "invasion/demon_victory";
			noWinnerEnd = "invasion/invasion_ended";
			noInteractionEnd = "invasion/invasion_ended";
			threeDemonLivesRemaining = "invasion/three_demon_lives_left";
			twoDemonLivesRemaining = "invasion/two_demon_lives_left";
			oneDemonLifeRemaining = "invasion/one_demon_life_left";
			demonKilled = "invasion/demon_killed";
			threeSlayerLivesRemaining = "invasion/three_slayer_lives_left";
			twoSlayerLivesRemaining = "invasion/two_slayer_lives_left";
			oneSlayerLifeRemaining = "invasion/one_slayer_life_left";
			slayerKilled = "invasion/slayer_killed";
			invasionEndingSoon = "invasion/invasion_ending_soon";
		}
		invasionSettings = "default";
		sentinelArmorDecl = "sentinel_armor";
		extraLifeDecl = "extra_life";
		OnslaughtInfiniteCheat = "statuseffect/onslaught_infinite";
		OverdriveInfiniteCheat = "statuseffect/overdrive_infinite";
		BerserkInfiniteCheat = "statuseffect/berserk_infinite";
		flameBelchEquipmentDecl = "weapon/player/equipment_flame_belch";
		throwableIceEquipmentDecl = "throwable/player/ice_bomb";
		throwableFragEquipmentDecl = "throwable/player/frag_grenade";
		equipmentLauncherDecl = "equipmentlauncher/equipmentlauncherleft";
		quakeConModeSettings = "quakeconmodesettings";
		extraLifeLayerName_None = "game/sp/extralives/extralives_none";
		extraLifeLayerName_Some = "game/sp/extralives/extralives_some";
		extraLifeLayerName_Many = "game/sp/extralives/extralives_many";
		demonicCorruptionDecl = "e3m4_boss";
		playerInventoryItems = {
			num = 112;
			item[0] = "abilities/blood_punch";
			item[1] = "abilities/environmentsuit";
			item[2] = "abilities/grapplegloves";
			item[3] = "argent/ammo_upgrade";
			item[4] = "argent/armor_upgrade";
			item[5] = "argent/health_upgrade";
			item[6] = "collectible/albums/album_01";
			item[7] = "collectible/albums/album_02";
			item[8] = "collectible/albums/album_03";
			item[9] = "collectible/albums/album_04";
			item[10] = "collectible/albums/album_05";
			item[11] = "collectible/albums/album_06";
			item[12] = "collectible/albums/album_07";
			item[13] = "collectible/albums/album_08";
			item[14] = "collectible/albums/album_09";
			item[15] = "collectible/albums/album_10";
			item[16] = "collectible/albums/album_11";
			item[17] = "collectible/albums/album_12";
			item[18] = "collectible/albums/album_13";
			item[19] = "collectible/albums/album_14";
			item[20] = "collectible/albums/album_15";
			item[21] = "collectible/albums/album_16";
			item[22] = "collectible/cheats/infinite_ammo";
			item[23] = "collectible/cheats/infinite_berserk";
			item[24] = "collectible/cheats/infinite_extra_lives";
			item[25] = "collectible/cheats/infinite_onslaught";
			item[26] = "collectible/cheats/infinite_overdrive";
			item[27] = "collectible/cheats/instant_stagger_mode";
			item[28] = "collectible/cheats/party_mode";
			item[29] = "collectible/cheats/silver_bullet_mode";
			item[30] = "collectible/toys/doom_slayer";
			item[31] = "collectible/toys/dreadknight";
			item[32] = "collectible/toys/gargoyle";
			item[33] = "collectible/toys/gladiator";
			item[34] = "collectible/toys/hellknight";
			item[35] = "collectible/toys/icon_of_sin";
			item[36] = "collectible/toys/imp";
			item[37] = "collectible/toys/khan_maykr";
			item[38] = "collectible/toys/lost_soul";
			item[39] = "collectible/toys/mancubus_fire";
			item[40] = "collectible/toys/mancubus_goo";
			item[41] = "collectible/toys/marauder";
			item[42] = "collectible/toys/maykr_drone";
			item[43] = "collectible/toys/pain_elemental";
			item[44] = "collectible/toys/pinky";
			item[45] = "collectible/toys/pinky_spectre";
			item[46] = "collectible/toys/prowler";
			item[47] = "collectible/toys/revenant";
			item[48] = "collectible/toys/soldier_blaster";
			item[49] = "collectible/toys/soldier_shield";
			item[50] = "collectible/toys/tyrant";
			item[51] = "collectible/toys/whiplash";
			item[52] = "collectible/toys/zombie_tier_1";
			item[53] = "collectible/toys/zombie_tier_3";
			item[54] = "equipment/flame_belch";
			item[55] = "equipment/frag_grenade";
			item[56] = "equipment/ice_bomb";
			item[57] = "map_objects/rad_shield_damage_decreases_shield";
			item[58] = "map_objects/rad_suit_refill_shield";
			item[59] = "map_objects/suit_upgrade_points";
			item[60] = "map_objects/keycard/cultist";
			item[61] = "map_objects/keycard/hell_flesh_blue";
			item[62] = "map_objects/keycard/hell_flesh_red";
			item[63] = "map_objects/keycard/hell_flesh_yellow";
			item[64] = "map_objects/keycard/mech_battery";
			item[65] = "map_objects/keycard/slayer_key";
			item[66] = "map_objects/keycard/uac_blue";
			item[67] = "map_objects/keycard/uac_red";
			item[68] = "map_objects/keycard/uac_yellow";
			item[69] = "jumpboots/base";
			item[70] = "sentinel_armor";
			item[71] = "throwable/player/frag_grenade";
			item[72] = "throwable/player/ice_bomb";
			item[73] = "weapon/player/bfg";
			item[74] = "weapon/player/chaingun";
			item[75] = "weapon/player/chaingun_energy_shell";
			item[76] = "weapon/player/chaingun_energy_shell_primary";
			item[77] = "weapon/player/chaingun_turret_primary";
			item[78] = "weapon/player/chaingun_turret_secondary";
			item[79] = "weapon/player/chainsaw";
			item[80] = "weapon/player/crucible";
			item[81] = "weapon/player/doomblade";
			item[82] = "weapon/player/double_barrel";
			item[83] = "weapon/player/double_barrel_meat_hook";
			item[84] = "weapon/player/double_barrel_primary_lockon";
			item[85] = "weapon/player/equipment_flame_belch";
			item[86] = "weapon/player/fists";
			item[87] = "weapon/player/fists_berserk";
			item[88] = "weapon/player/fists_doom5melee";
			item[89] = "weapon/player/fists_swim";
			item[90] = "weapon/player/gauss_rifle";
			item[91] = "weapon/player/gauss_rifle_ballista";
			item[92] = "weapon/player/gauss_rifle_destroyer";
			item[93] = "weapon/player/heavy_cannon";
			item[94] = "weapon/player/heavy_cannon_bolt_action";
			item[95] = "weapon/player/heavy_cannon_burst_detonate";
			item[96] = "weapon/player/heavy_cannon_burst_detonate_faster_recharge";
			item[97] = "weapon/player/heavy_cannon_burst_detonate_mastery";
			item[98] = "weapon/player/plasma_rifle";
			item[99] = "weapon/player/plasma_rifle_secondary_aoe";
			item[100] = "weapon/player/plasma_rifle_secondary_aoe_mastery_primary_supercharge";
			item[101] = "weapon/player/plasma_rifle_secondary_microwave";
			item[102] = "weapon/player/pointing_arm";
			item[103] = "weapon/player/rocket_launcher";
			item[104] = "weapon/player/rocket_launcher_detonate";
			item[105] = "weapon/player/rocket_launcher_lock_mod";
			item[106] = "weapon/player/rocket_launcher_lock_mod_mastery";
			item[107] = "weapon/player/shotgun";
			item[108] = "weapon/player/shotgun_secondary_full_auto";
			item[109] = "weapon/player/shotgun_secondary_pop_rockets";
			item[110] = "weapon/player/shotgun_secondary_pop_rockets_mastery";
			item[111] = "weapon/player/unmaykr";
		}
		playerPerks = {
			num = 112;
			item[0] = "perk/player/argent/ammo_capacity_0";
			item[1] = "perk/player/argent/ammo_capacity_1";
			item[2] = "perk/player/argent/ammo_capacity_2";
			item[3] = "perk/player/argent/ammo_capacity_3";
			item[4] = "perk/player/argent/armor_capacity_0";
			item[5] = "perk/player/argent/armor_capacity_1";
			item[6] = "perk/player/argent/armor_capacity_2";
			item[7] = "perk/player/argent/armor_capacity_3";
			item[8] = "perk/player/argent/health_capacity_0";
			item[9] = "perk/player/argent/health_capacity_1";
			item[10] = "perk/player/argent/health_capacity_2";
			item[11] = "perk/player/argent/health_capacity_3";
			item[12] = "perk/player/blood_punch/base";
			item[13] = "perk/player/blood_punch/ai_charge_rate";
			item[14] = "perk/player/blood_punch/area_of_effect";
			item[15] = "perk/player/blood_punch/max_charges";
			item[16] = "perk/player/runes/glory_kill_speed";
			item[17] = "perk/player/runes/glory_kill_dash";
			item[18] = "perk/player/runes/speed_boost_on_glory_kill";
			item[19] = "perk/player/runes/double_jump_air_control";
			item[20] = "perk/player/runes/modify_enemy_stagger_duration";
			item[21] = "perk/player/runes/activate_focus_on_death_blow";
			item[22] = "perk/player/runes/target_strike";
			item[23] = "perk/player/runes/decrease_equipment_recharge";
			item[24] = "perk/player/runes/blood_punch_loot_on_damage";
			item[25] = "perk/player/suit/self_preservation/reduce_hazard_damage";
			item[26] = "perk/player/suit/self_preservation/reduce_self_weapon_damage";
			item[27] = "perk/player/suit/extermination/barrels_respawn";
			item[28] = "perk/player/suit/extermination/barrels_drop_ammo";
			item[29] = "perk/player/equipment/frag_base";
			item[30] = "perk/player/equipment/frag_reduce_cooldown";
			item[31] = "perk/player/equipment/frag_concussive_blast";
			item[32] = "perk/player/equipment/frag_cluster_bombs";
			item[33] = "perk/player/equipment/frag_max_capacity";
			item[34] = "perk/player/equipment/ice_base";
			item[35] = "perk/player/equipment/ice_reduce_cooldown";
			item[36] = "perk/player/equipment/ice_extend_duration";
			item[37] = "perk/player/equipment/ice_health_drops";
			item[38] = "perk/player/equipment/ice_melee_shatter";
			item[39] = "perk/player/suit/fundamentals/ledge_grab_speed";
			item[40] = "perk/player/suit/fundamentals/weapon_change_speed";
			item[41] = "perk/player/suit/dash/dash_regen_delay";
			item[42] = "perk/player/suit/dash/dash_gk_restore_dash";
			item[43] = "perk/player/suit/exploration/automap_shows_map_station";
			item[44] = "perk/player/suit/exploration/automap_shows_progression_items";
			item[45] = "perk/player/suit/exploration/automap_increased_fog_radius";
			item[46] = "perk/player/suit/exploration/dossier_shows_progression_items";
			item[47] = "perk/player/equipment/flame_reduce_cooldown";
			item[48] = "perk/player/suit/fundamentals/increase_pickup_radius";
			item[49] = "perk/player/equipment/flame_extend_duration";
			item[50] = "perk/player/suit/self_preservation/overhealth";
			item[51] = "perk/player/equipment/flame_more_loot";
			item[52] = "perk/player/suit/self_preservation/overarmor";
			item[53] = "perk/player/weapons/chaingun/turret";
			item[54] = "perk/player/weapons/chaingun/turret_faster_equip";
			item[55] = "perk/player/weapons/chaingun/turret_faster_movement";
			item[56] = "perk/player/weapons/chaingun/turret_mastery";
			item[57] = "perk/player/weapons/chaingun/energy_shell";
			item[58] = "perk/player/weapons/chaingun/energy_shell_faster_recharge";
			item[59] = "perk/player/weapons/chaingun/energy_shell_dash_smash";
			item[60] = "perk/player/weapons/chaingun/energy_shell_mastery";
			item[61] = "perk/player/weapons/chainsaw/default";
			item[62] = "perk/player/weapons/bfg/firemode_charge";
			item[63] = "perk/player/weapons/bfg/shape_sphere";
			item[64] = "perk/player/weapons/bfg/element_arc";
			item[65] = "perk/player/weapons/crucible/base";
			item[66] = "perk/player/weapons/doomblade/level_1";
			item[67] = "perk/player/weapons/double_barrel/meat_hook";
			item[68] = "perk/player/weapons/double_barrel/meat_hook_faster_reload";
			item[69] = "perk/player/weapons/double_barrel/default_faster_reload";
			item[70] = "perk/player/weapons/double_barrel/meat_hook_mastery";
			item[71] = "perk/player/weapons/gauss_cannon/ballista";
			item[72] = "perk/player/weapons/gauss_cannon/ballista_movement";
			item[73] = "perk/player/weapons/gauss_cannon/ballista_larger_explosion";
			item[74] = "perk/player/weapons/gauss_cannon/ballista_mastery";
			item[75] = "perk/player/weapons/gauss_cannon/destroyer";
			item[76] = "perk/player/weapons/gauss_cannon/destroyer_charge_levels_aoe";
			item[77] = "perk/player/weapons/gauss_cannon/destroyer_faster_charge_and_recovery";
			item[78] = "perk/player/weapons/gauss_cannon/destroyer_charge_levels";
			item[79] = "perk/player/weapons/heavy_cannon/bolt_action";
			item[80] = "perk/player/weapons/heavy_cannon/bolt_action_faster_movement";
			item[81] = "perk/player/weapons/heavy_cannon/bolt_action_faster_reload";
			item[82] = "perk/player/weapons/heavy_cannon/bolt_action_mastery_upgrades";
			item[83] = "perk/player/weapons/heavy_cannon/burst_detonate";
			item[84] = "perk/player/weapons/heavy_cannon/burst_detonate_faster_recharge";
			item[85] = "perk/player/weapons/heavy_cannon/burst_detonate_faster_charge";
			item[86] = "perk/player/weapons/heavy_cannon/burst_detonate_primary_charge";
			item[87] = "perk/player/weapons/heavy_cannon/burst_detonate_mastery";
			item[88] = "perk/player/weapons/plasma_rifle/secondary_aoe_no_primary_delay";
			item[89] = "perk/player/weapons/plasma_rifle/secondary_aoe_faster_charge";
			item[90] = "perk/player/weapons/plasma_rifle/secondary_aoe_mastery";
			item[91] = "perk/player/weapons/plasma_rifle/secondary_microwave_faster_charge";
			item[92] = "perk/player/weapons/plasma_rifle/secondary_microwave_max_range";
			item[93] = "perk/player/weapons/plasma_rifle/secondary_microwave_mastery";
			item[94] = "perk/player/weapons/rocket_launcher/detonate";
			item[95] = "perk/player/weapons/rocket_launcher/detonate_proximity_flare";
			item[96] = "perk/player/weapons/rocket_launcher/detonate_concussive";
			item[97] = "perk/player/weapons/rocket_launcher/detonate_explosive_array_horizontal";
			item[98] = "perk/player/weapons/rocket_launcher/lockon_faster_recovery";
			item[99] = "perk/player/weapons/rocket_launcher/lockon_decrease_lock_time";
			item[100] = "perk/player/weapons/rocket_launcher/lockon_mastery";
			item[101] = "perk/player/weapons/shotgun/pop_rocket";
			item[102] = "perk/player/weapons/shotgun/pop_rocket_faster_recharge";
			item[103] = "perk/player/weapons/shotgun/pop_rocket_larger_explosion";
			item[104] = "perk/player/weapons/shotgun/pop_rocket_more_bombs";
			item[105] = "perk/player/weapons/shotgun/secondary_full_auto";
			item[106] = "perk/player/weapons/shotgun/secondary_full_auto_faster_recovery";
			item[107] = "perk/player/weapons/shotgun/secondary_full_auto_faster_charge";
			item[108] = "perk/player/weapons/shotgun/secondary_full_auto_increased_movement_speed";
			item[109] = "perk/player/weapons/shotgun/secondary_full_auto_ammo_giveback";
			item[110] = "perk/player/weapons/unmaykr/firemode_change";
			item[111] = "perk/player/e3_tutorial/flame_reduce_cooldown_e3_tutorial";
		}
		spawnPosition = { // spawn position is not important
			x = 1;
            y = 1;
            z = 1;
		}
		disabledCheats = {
			num = 1;
			item[0] = "CHEAT_CODE_TYPE_POWERUP_INFINITE_DURATION_BERSERK";
		}
		aiSpawnPoolDecl = "maps/game/sp/e3m4_boss"; // change this depending on the level used
	}
}
}

idGameChallenge_PVP

entity {
	entityDef game_info_game_challenge_battlearena_1 {
	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 = 9;
		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";
			everyoneCritical = "pvp_sudden_death";
		}
		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_slayer_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 = {
			enemyDemon = "EHM_ONLY_IN_VIEW";
		}
		demonHighlightOptions = {
			allyDemon = "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 = "pvp/voiced/demon_killed";
			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;
		}
		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 = 22;
					}
				}
			}
		}
		respawnTimeCapSec = {
			defaultValue = {
				value = 20;
			}
			branchPairs = {
				num = 1;
				item[0] = {
					branchKey = "CONTROLLERPAD_DECL";
					branchResult = {
						value = 22;
					}
				}
			}
		}
		respawnStatusEffects = {
			num = 2;
			item[0] = "statuseffect/pvp/demon_action/respawn_protection";
			item[1] = "statuseffect/pvp/demon_action/respawn_haste";
		}
		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";
		}
		musicFirstLoadedState = "music_ghost_states/pvp_lobby";
		musicIntroState = "music_ghost_states/pvp_lobby_player_ready";
		musicMatchState = "music_ghost_states/pvp_lobby_end";
		musicWinState = "music_ghost_states/pvp_win";
		musicLoseState = "music_ghost_states/pvp_lose";
		musicHealthCriticalState = "music_ghost_states/pvp_sudden_death";
		musicRoundWinState = "music_ghost_states/pvp_win_round";
		musicRoundLoseState = "music_ghost_states/pvp_lose_round";
		closeCallHealthThreshold = 50;
		clutchThreshold = 5;
		comebackThreshold = 3;
		surpriseTimeLimit = {
			value = 3;
		}
		surviveThreshold = 4;
		soundOcclusionBypass = true;
		spawnPosition = { // spawn position is not important
			x = 1;
			y = 1;
			z = 1;
		}
	}
}
}

idGuiEntity_Text

An entity that displays text in the world.

Example

entity {
	entityDef sample_text { // name of the entity
	inherit = "gui/text";
	class = "idGuiEntity_Text";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noknockback = false;
		}
		renderModelInfo = {
			model = "editors/models/gui_text.lwo";
			scale = { // size of the entity
				x = 10;
				y = 10;
				z = 10;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
		}
		swf = "swf/guientity/generic_text.swf";
		spawnPosition = { // location of where the entity will appear
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = { // direction the entity will face
			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;
				}
			}
		}
		dormancy = {
			allowDistanceDormancy = false;
			allowDormancy = false;
			allowPvsDormancy = false;
		}
		dynamicMoveActive = true;
		swfScale = 0.02; // size of the string
		bodyText = {
			text = "Sample Text"; // the string itself
		}
		headerText = { // Use if using generic_text.swf and without bodyText
			text = "Text\nWith\nLine\nBreaks"; // enter text here
			color = {
				r = 1;
				g = 1;
				b = 1;
			}
			relativeWidth = 1; // the width of the text relative to the swf (eg. generic_text = 1.0, generic_text_wide = 1.95)
			alignment = "SWF_ET_ALIGN_CENTER"; // Text alignment; SWF_ET_ALIGN_LEFT, SWF_ET_ALIGN_RIGHT, SWF_ET_ALIGN_CENTER, or SWF_ET_ALIGN_JUSTIFY
		}                                      
		billboard = true; // if true, the text entity will always face the player
	}
}
}

String customization applies to both BLANG files and idGuiEntity_Text entities.

See Also

idInteractable

An entity that is interactable with a melee input.

Some of these entities only work in specific resources.
You will need to pull assets from other levels if you want to use them in a level where they normally do not exist.

Skull Switch

entity {
	entityDef interact_use_panel_sentinel_skull_switch_1 {
	inherit = "interact/use_panel/sentinel_skull_switch";
	class = "idInteractable";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		whenToSave = "SGT_CHECKPOINT";
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 0.75;
				y = 1.20000005;
				z = 1.95000005;
			}
		}
		interaction = {
			initalState = "interactables/console/sentinel_skull_switch/sentinel_skull_idle";
			interactionGraph = "interactables/console";
			stateData = {
				num = 6;
				item[0] = {
					stateName = "interactables/console/sentinel_skull_switch/sentinel_skull_activate";
				}
				item[1] = {
					stateName = "interactables/console/sentinel_skull_switch/sentinel_skull_activate_repeat";
				}
				item[2] = {
					stateName = "interactables/console/sentinel_skull_switch/sentinel_skull_idle";
				}
				item[3] = {
					stateName = "interactables/console/sentinel_skull_switch/sentinel_skull_idle_repeat";
				}
				item[4] = {
					stateName = "interactables/console/sentinel_skull_switch/sentinel_skull_used";
				}
				item[5] = {
					stateName = "interactables/console/sentinel_skull_switch/sentinel_skull_used_repeat";
				}
			}
			transitionData = {
				num = 6;
				item[0] = {
					transitionName = "sentinel_skull_activate_To_sentinel_skull_idle";
					additionalWaitMs = 250;
				}
				item[1] = {
					transitionName = "sentinel_skull_activate_repeat_To_sentinel_skull_idle_repeat";
					additionalWaitMs = 250;
				}
				item[2] = {
					transitionName = "sentinel_skull_usable_To_sentinel_skull_used";
				}
				item[3] = {
					transitionName = "sentinel_skull_usable_repeat_To_sentinel_skull_used_repeat";
				}
				item[4] = {
					transitionName = "sentinel_skull_used_To_sentinel_skull_idle";
					additionalWaitMs = 250;
				}
				item[5] = {
					transitionName = "sentinel_skull_used_repeat_To_sentinel_skull_idle_repeat";
					additionalWaitMs = 2000;
				}
			}
			animWebDecl = "animweb/interact/skull_switch_sentinel/skull_switch_sentinel_interact";
		}
		touchData = {
			triggerDef = "trigger/interact/use_panel";
		}
		activateTargetsOnUse = false;
		stateColors = {
			num = 6;
			item[0] = {
				color = {
					g = 0.0588235036;
					b = 0.0588235036;
				}
				colorScale = 5;
				state = "sentinel_skull_activate";
			}
			item[1] = {
				color = {
					g = 0.0588235036;
					b = 0.0588235036;
				}
				colorScale = 5;
				state = "sentinel_skull_activate_repeat";
			}
			item[2] = {
				color = {
					r = 0.196078002;
					b = 0.0392156988;
				}
				colorScale = 5;
				state = "sentinel_skull_idle";
			}
			item[3] = {
				color = {
					r = 0.196078002;
					b = 0.0392156988;
				}
				colorScale = 5;
				state = "sentinel_skull_idle_repeat";
			}
			item[4] = {
				color = {
					r = 0;
					g = 0;
					b = 0;
				}
				colorScale = 0;
				state = "sentinel_skull_used";
			}
			item[5] = {
				color = {
					g = 0.0588235036;
					b = 0.0588235036;
				}
				colorScale = 5;
				state = "sentinel_skull_used_repeat";
			}
		}
		activateTargetsOnEndInteraction = true;
		thirdPersonInteractionData = {
			thirdPersonInteractionType = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_BUTTON";
		}
		renderModelInfo = {
			model = "md6def/objects/interact/skull_switch_sentinel/skull_switch_sentinel.md6";
		}
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		targets = { // activates these entities on interact
			num = 1;
			item[0] = "activate_something_1";
		}
	}
}
}

Weapon Mod Bot

entity {
	entityDef game_progress_mod_bot_1 {
	inherit = "progress/mod_bot";
	class = "idInteractable_WeaponModBot";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		soundOffset = {
			z = 1.29999995;
		}
		saveType = "SGS_GAME_DATA";
		automapPropertiesDecl = "mod_bot";
		renderModelInfo = {
			model = "md6def/objects/interact/mod_bot/mod_bot.md6";
			lightRigDecl = "mod_bot/mod_bot_default";
			contributesToLightProbeGen = false;
			materialRemapRT = {
				num = 3;
				item[0] = {
					from = "art/pickups/mod_bot/slayer_mod_bot_01";
					to = "art/pickups/mod_bot/slayer_mod_bot_01_rt";
				}
				item[1] = {
					from = "art/pickups/mod_bot/slayer_modbot_bag_01";
					to = "art/pickups/mod_bot/slayer_modbot_bag_01_rt";
				}
				item[2] = {
					from = "art/pickups/mod_bot/slayer_mod_bot_01_used";
					to = "art/pickups/mod_bot/slayer_mod_bot_01_used_rt";
				}
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = {
				x = 1.5;
				y = 1.5;
				z = 1;
			}
			offset = {
				z = 1.04999995;
			}
			numSides = 8;
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ITEMS_SPAWNED";
				increase = 1;
			}
		}
		fxDecl = "gameplay/mod_bot";
		interaction = {
			initalState = "interactables/progress/mod_bot/idle_mod";
			animWebDecl = "animweb/interact/mod_bot/mod_bot_interact";
			interactionGraph = "interactables/progress";
			stateData = {
				num = 4;
				item[0] = {
					stateName = "interactables/progress/mod_bot/activate_to_use";
				}
				item[1] = {
					stateName = "interactables/progress/mod_bot/idle_mod";
				}
				item[2] = {
					stateName = "interactables/progress/mod_bot/selection_mod";
				}
				item[3] = {
					stateName = "interactables/progress/mod_bot/used_mod";
					onEnterCodexEntry = "codex/tutorials/mod_station";
					hideMeshOnEnter = {
						num = 1;
						item[0] = "crate";
					}
				}
			}
		}
		touchData = {
			triggerDef = "trigger/interact/use_panel";
			triggerDefOffset = {
				x = 0.25;
			}
		}
		activateTargetsOnUse = false;
		stateColors = {
			num = 4;
			item[0] = {
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/pickups/mod_bot/slayer_mod_bot_01";
						to = "art/pickups/mod_bot/slayer_mod_bot_01_used";
					}
					item[1] = {
						from = "art/pickups/mod_bot/slayer_modbot_bag_01";
						to = "art/pickups/mod_bot/slayer_modbot_bag_01_used";
					}
				}
				state = "selection_mod";
			}
			item[1] = {
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/pickups/mod_bot/slayer_mod_bot_01_used";
						to = "art/pickups/mod_bot/slayer_mod_bot_01";
					}
					item[1] = {
						from = "art/pickups/mod_bot/slayer_modbot_bag_01_used";
						to = "art/pickups/mod_bot/slayer_modbot_bag_01";
					}
				}
				state = "idle_mod";
			}
			item[2] = {
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/pickups/mod_bot/slayer_mod_bot_01_used";
						to = "art/pickups/mod_bot/slayer_mod_bot_01";
					}
					item[1] = {
						from = "art/pickups/mod_bot/slayer_modbot_bag_01_used";
						to = "art/pickups/mod_bot/slayer_modbot_bag_01";
					}
				}
				state = "usable_mod";
			}
			item[3] = {
				materialSwapList = {
					num = 2;
					item[0] = {
						from = "art/pickups/mod_bot/slayer_mod_bot_01";
						to = "art/pickups/mod_bot/slayer_mod_bot_01_used";
					}
					item[1] = {
						from = "art/pickups/mod_bot/slayer_modbot_bag_01";
						to = "art/pickups/mod_bot/slayer_modbot_bag_01_used";
					}
				}
				state = "used_mod";
			}
		}
		activateTargetsOnEndInteraction = true;
		progressionCategory = "PROGRESSION_CATEGORY_MODBOT";
		removeForMasterLevels = true;
		thirdPersonInteractionData = {
			thirdPersonInteractionType = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_GENERIC";
			firstPersonSyncEntityForInteractionToPositionOnUse = "interact/mod_bot/mod_bot_sync";
			firstPersonSyncAnimWebPath = "animweb/interact/mod_bot/mod_bot_syncanimweb/autoSyncAnim/mod_bot";
		}
		userMustBeInTouchTrigger = true;
		useCodex = "codex/tutorials/mod_station";
		enterSound = "play_ui_mod_bot_entrance";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		dormancy = {
			allowDistanceDormancy = false;
			allowPvsDormancy = false;
		}
	}
}
}

Rune Station

entity {
	entityDef pickups_progress_rune_1 {
	inherit = "progress/rune";
	class = "idInteractable_Rune";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		soundOffset = {
			z = 1;
		}
		saveType = "SGS_GAME_DATA";
		automapPropertiesDecl = "rune";
		renderModelInfo = {
			model = "md6def/objects/props/maykr_rune_interact/maykr_rune_interact.md6";
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = {
				x = 1.5;
				y = 1.75;
				z = 2.5;
			}
			offset = {
				x = -0.600000024;
			}
			numSides = 21;
		}
		dormancy = {
			playerDistance = 20;
		}
		fxDecl = "gameplay/rune_pickup";
		interaction = {
			initalState = "interactables/progress/rune/idle_rune";
			unuseableState = "interactables/progress/rune/used_rune";
			animWebDecl = "animweb/interact/rune/rune_interact";
			interactionGraph = "interactables/progress";
			stateData = {
				num = 3;
				item[0] = {
					stateName = "interactables/progress/rune/idle_rune";
				}
				item[1] = {
					stateName = "interactables/progress/rune/ready_rune";
				}
				item[2] = {
					stateName = "interactables/progress/rune/used_rune";
					markForGameUsed = true;
				}
			}
			transitionData = {
				num = 3;
				item[0] = {
					transitionName = "open_rune_To_ready_rune";
					playSoundOnTransition = "play_rune_interact_open";
				}
				item[1] = {
					transitionName = "closed_rune_To_waiting_rune";
					playSoundOnTransition = "play_rune_interact_close";
				}
				item[2] = {
					transitionName = "selection_rune_To_used_rune";
					playSoundOnTransition = "play_rune_pickup";
				}
			}
		}
		touchData = {
			triggerDef = "trigger/interact/progress_rune";
			retouchDelaySec = 250;
		}
		activateTargetsOnUse = false;
		onUseCodexEntry = "codex/tutorials/rune";
		stateColors = {
			num = 3;
			item[0] = {
				materialSwapList = {
					num = 1;
					item[0] = {
						from = "art/kit/maykr/prop/textures/maykr_rune_static";
						to = "art/kit/maykr/prop/textures/maykr_rune_interact_01";
					}
				}
				state = "ready_rune";
			}
			item[1] = {
				materialSwapList = {
					num = 1;
					item[0] = {
						from = "art/kit/maykr/prop/textures/maykr_rune_interact_01";
						to = "art/kit/maykr/prop/textures/maykr_rune_static";
					}
				}
				state = "selection_rune";
			}
			item[2] = {
				materialSwapList = {
					num = 1;
					item[0] = {
						from = "art/kit/maykr/prop/textures/maykr_rune_interact_01";
						to = "art/kit/maykr/prop/textures/maykr_rune_static";
					}
				}
				state = "used_rune";
			}
		}
		activateTargetsOnEndInteraction = true;
		progressionCategory = "PROGRESSION_CATEGORY_RUNE";
		removeForMasterLevels = true;
		thirdPersonInteractionData = {
			thirdPersonInteractionType = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_GENERIC";
			firstPersonSyncEntityForInteractionToPositionOnUse = "interact/rune/use_sync";
			firstPersonSyncAnimWebPath = "animweb/interact/rune/use_sync/use_sync/interact";
		}
		userMustBeInTouchTrigger = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
	}
}
}

Praetor Suit Token

entity {
	entityDef game_progress_praetor_token_1 {
	inherit = "progress/praetor_token";
	class = "idInteractable_GiveItems";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		soundOffset = {
			z = 2;
		}
		saveType = "SGS_GAME_DATA";
		automapPropertiesDecl = "praetor_token";
		renderModelInfo = {
			model = "md6def/objects/interact/praetor_suit_token/praetor_suit_token.md6";
			lightRigDecl = "soldier_blaster/soldier_blaster_default";
			materialRemap = {
				num = 6;
				item[0] = {
					from = "models/characters/sentinel_knight/sentinel_knight_arm_right";
					to = "models/characters/sentinel_knight/ghost/sentinel_knight_arm_right";
				}
				item[1] = {
					from = "models/characters/sentinel_knight/sentinel_knight_base";
					to = "models/characters/sentinel_knight/ghost/sentinel_knight_base";
				}
				item[2] = {
					from = "models/characters/sentinel_knight/sentinel_knight_base_arm";
					to = "models/characters/sentinel_knight/ghost/sentinel_knight_base_arm";
				}
				item[3] = {
					from = "models/characters/sentinel_knight/sentinel_knight_helmet";
					to = "models/characters/sentinel_knight/ghost/sentinel_knight_helmet";
				}
				item[4] = {
					from = "models/characters/sentinel_knight/sentinel_knight_leg_right";
					to = "models/characters/sentinel_knight/ghost/sentinel_knight_leg_right";
				}
				item[5] = {
					from = "models/characters/sentinel_knight/sentinel_knight_torso";
					to = "models/characters/sentinel_knight/ghost/sentinel_knight_torso";
				}
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_CONE";
			size = {
				x = 1.5;
				y = 1.5;
				z = 3;
			}
			numSides = 8;
		}
		dormancy = {
			playerDistance = 20;
			playerRearwardDistance = 30;
			allowDistanceDormancy = false;
			allowDormancy = false;
			allowPvsDormancy = false;
		}
		fxDecl = "gameplay/praetor_token_interact";
		interaction = {
			initalState = "interactables/progress/praetor/idle_praetor";
			animWebDecl = "animweb/interact/preator_suit_token/preator_suit_token_interact";
			interactionGraph = "interactables/progress";
			stateData = {
				num = 3;
				item[0] = {
					stateName = "interactables/progress/praetor/activate_praetor";
				}
				item[1] = {
					stateName = "interactables/progress/praetor/idle_praetor";
					playSoundOnEnter = "play_praetorsuittoken_loop";
				}
				item[2] = {
					stateName = "interactables/progress/praetor/used_praetor";
					stateStats = {
						num = 1;
						item[0] = {
							stat = "STAT_GAINED_FIRST_PRAETOR_TOKEN";
						}
					}
					removeCollisionOnEnter = true;
					hideMeshOnEnter = {
						num = 1;
						item[0] = "coin";
					}
				}
			}
			transitionData = {
				num = 1;
				item[0] = {
					transitionName = "usable_praetor_To_used_praetor";
					playSoundOnTransition = "stop_praetorsuittoken_loop";
				}
			}
		}
		touchData = {
			triggerDef = "trigger/interact/use_panel";
		}
		activateTargetsOnUse = false;
		onUseCodexEntry = "codex/tutorials/praetor_suit_perks";
		stateColors = {
			num = 1;
			item[0] = {
				materialSwapList = {
					num = 6;
					item[0] = {
						from = "models/characters/sentinel_knight/ghost/sentinel_knight_arm_right";
						to = "models/characters/sentinel_knight/ghost/sentinel_knight_arm_right_used";
					}
					item[1] = {
						from = "models/characters/sentinel_knight/ghost/sentinel_knight_base";
						to = "models/characters/sentinel_knight/ghost/sentinel_knight_base_used";
					}
					item[2] = {
						from = "models/characters/sentinel_knight/ghost/sentinel_knight_base_arm";
						to = "models/characters/sentinel_knight/ghost/sentinel_knight_base_arm_used";
					}
					item[3] = {
						from = "models/characters/sentinel_knight/ghost/sentinel_knight_helmet";
						to = "models/characters/sentinel_knight/ghost/sentinel_knight_helmet_used";
					}
					item[4] = {
						from = "models/characters/sentinel_knight/ghost/sentinel_knight_leg_right";
						to = "models/characters/sentinel_knight/ghost/sentinel_knight_leg_right_used";
					}
					item[5] = {
						from = "models/characters/sentinel_knight/ghost/sentinel_knight_torso";
						to = "models/characters/sentinel_knight/ghost/sentinel_knight_torso_used";
					}
				}
				state = "used_praetor";
			}
		}
		activateTargetsOnEndInteraction = true;
		progressionCategory = "PROGRESSION_CATEGORY_ELITE";
		useStat = "STAT_SUIT_PAGE_UNLOCKED";
		removeForMasterLevels = true;
		thirdPersonInteractionData = {
			thirdPersonInteractionType = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_GENERIC";
		}
		userMustBeInTouchTrigger = true;
		currencyList = {
			num = 1;
			item[0] = {
				currencyType = "CURRENCY_PRAETOR_UPGRADE";
			}
		}
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
	}
}
}

Argent Cell Crystal & Top Destructible

entity {
	entityDef game_progress_argent_cell_1 {
	inherit = "progress/argent_cell";
	class = "idInteractable_WorldCache";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		saveType = "SGS_GAME_DATA";
		automapPropertiesDecl = "argent_cell";
		renderModelInfo = {
			model = "md6def/objects/interact/argent_cell/argent_cell.md6";
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			contentsFilter = {
				monsterClip = false;
				moveableClip = false;
				shotClip = false;
				ikClip = false;
				opaqueClip = false;
				allTeamsShotClip = false;
			}
			size = {
				x = 1.25;
				y = 1.75;
				z = 2;
			}
			numSides = 8;
		}
		dormancy = {
			delay = 0;
			distance = 100;
			playerDistance = 120;
			playerRearwardDistance = 80;
			allowPvsDormancy = false;
		}
		fxDecl = "interact/argentcell/argent_cell_fx";
		interaction = {
			initalState = "interactables/progress/argent_cell/idle_argent";
			unuseableState = "interactables/progress/argent_cell/used_argent";
			animWebDecl = "animweb/interact/argent_cell/argent_cell_interact";
			interactionGraph = "interactables/progress";
			stateData = {
				num = 3;
				item[0] = {
					stateName = "interactables/progress/argent_cell/activate_argent";
					hideMeshOnEnter = {
						num = 1;
						item[0] = "destroyed__2_";
					}
				}
				item[1] = {
					stateName = "interactables/progress/argent_cell/idle_argent";
					hideMeshOnEnter = {
						num = 1;
						item[0] = "destroyed__2_";
					}
				}
				item[2] = {
					stateName = "interactables/progress/argent_cell/used_argent";
					onEnterCodexEntry = "codex/tutorials/argent_cell";
					markForGameUsed = true;
					hideMeshOnEnter = {
						num = 1;
						item[0] = "crystal__2_";
					}
					stateActivateList = {
						num = 1;
						item[0] = "game_destructible_interact_argent_cell_1_1313774949";
					}
				}
			}
		}
		touchData = {
			triggerDef = "trigger/interact/use_panel";
			triggerDefOffset = {
				x = 0.25;
			}
		}
		activateTargetsOnUse = false;
		stateColors = {
			num = 1;
			item[0] = {
				materialSwapList = {
					num = 4;
					item[0] = {
						from = "art/kit/sentinel/prop/argent_cell_bottom";
						to = "art/kit/sentinel/prop/argent_cell_bottom_used";
					}
					item[1] = {
						from = "art/kit/sentinel/prop/argent_cell_destroyed";
						to = "art/kit/sentinel/prop/argent_cell_destroyed_used";
					}
					item[2] = {
						from = "art/kit/sentinel/prop/argent_cell_bottom_secretpath";
						to = "art/kit/sentinel/prop/argent_cell_bottom_used";
					}
					item[3] = {
						from = "art/kit/sentinel/prop/argent_cell_destroyed_secretpath";
						to = "art/kit/sentinel/prop/argent_cell_destroyed_used";
					}
				}
				state = "used_argent";
			}
		}
		progressionCategory = "PROGRESSION_CATEGORY_ARGENT";
		useStat = "STAT_PROG_AMMO_HEALTH_ARMOR";
		removeForMasterLevels = true;
		secretMaterial = "art/objects/progression/temp_progression_items_secret";
		thirdPersonInteractionData = {
			thirdPersonInteractionType = "PLAYER_MECHANIC_THIRD_PERSON_INTERACT_TYPE_SENTINEL_CRYSTAL";
			thirdPersonSyncEntityForInteractionStartPositionOnUse = "interact/argent_cell/argent_cell_sync_3p";
			thirdPersonSyncAnimWebPathForStartPositionOnUse = "animweb/interact/argent_cell/argent_cell_3p/use_sync/interact";
		}
		userMustBeInTouchTrigger = true;
		spawnOrientation = {
			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;
				}
			}
		}
		targets = {
			num = 1;
			item[0] = "game_destructible_interact_argent_cell_1"; // removes the top part of the model
		}
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
	}
}
}
entity {
	entityDef game_destructible_interact_argent_cell_1 {
	inherit = "destructible/interact/argent_cell";
	class = "idDestructible";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		whenToSave = "SGT_NORMAL";
		flags = {
			skipRenderModelReplication = true;
		}
		saveType = "SGS_GAME_DATA";
		renderModelInfo = {
			model = "art/kit/sentinel/prop/argent_cell_top.lwo";
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			contentsFilter = {
				playerClip = false;
				monsterClip = false;
				ikClip = false;
				opaqueClip = false;
				allTeamsShotClip = false;
			}
			size = {
				x = 1;
				y = 1;
				z = 1;
			}
			offset = {
				z = 1.25;
			}
			numSides = 6;
		}
		destructible = {
			decl = "destructible/interact/argent_cell";
			idleCommands = {
				num = 1;
				item[0] = {
					time = 10000;
					command = "IDLE_COMMAND_BECOME_STATIC";
				}
			}
		}
		effectiveDamageTypes = {
			num = 1;
			item[0] = "damage/special/no_damage";
		}
		demonPlayersPassThrough = false;
		removeForMasterLevels = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			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;
				}
			}
		}
	}
}
}

idMover

An entity that can move around on pre-programmed paths, and also scripted to move around from timelines.

Note: This page was originally written by Chrispy. It was recovered from the now-deleted idTech 7 wiki, and copied here for preservation. This information may be incomplete and needs further details to expand upon it.

idMover Entity

Most of the things you see in the game that are moving are idMovers, except for ai, physics props, and a group of entity types may also move (idFuncSwing, idFuncRotate, etc) but in very limited ways.

Movers, like all entities, can have an arbitrary collisionmodel / rendermodel, or none at all. They can be used along with binding and the scripted movement events (moveTo) to create complex moving objects.

Within Movers you may define a scripted sequence of movements that will be executed when the mover is activated by another entity, or may activate immediately on spawn. The sequence can happen once, or loop.

Things you can do with idMover include:

  1. offsetOrientation - Rotate by Angles (roll, pitch,yaw)
  2. offsetDestination - Move by offset (X Y Z units from current position)
  3. destinationEntity(sp?) - Move to an entities current position.
  4. Activate a list of entities when a scripted movement starts, or ends.

idMusicEntity

Music Entities are used to play music in the level.

Usage

entity {
	entityDef sound_sound_musicentity_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_ambient"; // music state when level first loads
		initialSwitchGroup = "music_ghost_switch";
		initialSwitchState = "intro_music"; // level music
	}
}
}

> This Music Entity will play ambient music from Hell on Earth.


Not all Music Entities are structured the exact same way.
The music for Super Gore Nest, Mars Core, and the Hub have their usage shown below:

entity {
	entityDef sound_sound_musicentity_2 {
	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_ambient"; // music state when level first loads
		initialSwitchGroup = "music_ghost_switch";
		initialSwitchState = "supergorenest_music"; // level music
		secondarySwitchGroup = "supergorenest_music"; // should be the same as above
		initialSecondarySwitchState = "sgn_combat_suite_1"; // music variant
	}
}
}

> This Music Entity will play ambient music from Super Gore Nest's first music variation.

Notes:

The .entities file will play the bottom-most Music Entity when loading the level.
Use the setMusicState Event Call to shift the music to its ghost states (ambient, light, heavy, etc).
You can activate different music in the same level through activateTarget.

Music States Per Level:

Hell on Earth:
Switch State: intro_music
Ghost States: main_ambient, main_light, main_heavy, additional_reveal, cine_1, cine_2, cine_3

Exultia/Taras Nabad:
Switch State: slayer_city_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, cine_3, cine_4

Cultist Base:
Switch State: cultist_base_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2

Doom Hunter Base:
Switch State: doom_hunter_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, boss_phase1, boss_phase2, boss_vulnerable, cine_boss_intro, cine_boss_end

Super Gore Nest 1:
Switch State: supergorenest_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2
Secondary Switch: sgn_combat_suite_1

Super Gore Nest 2:
Switch State: supergorenest_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2
Secondary Switch: sgn_combat_suite_2

ARC Complex:
Switch State: samuelsbase_music
Ghost States: main_ambient, main_light, main_heavy

Phobos:
Switch State: mars_core_music
Ghost States: main_ambient, main_light, main_heavy, alt_ambient, alt_light, alt_heavy, cine_1, level_marscore_baron, escape_pod
Secondary Switch: phobos

Mars Core:
Switch State: mars_core_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, level_marscore_painelemental, stinger
Secondary Switch: space

Sentinel Prime:
Switch State: gladiator_music
Ghost States: cine_1, cine_2, cine_3, cine_4, boss_phase1, boss_phase2, boss_vulnerable, boss_end, additional_reveal, additional_levelstart

Nekravol:
Switch State: metal_hell_music
Ghost States: main_ambient, main_light, main_heavy

Urdak:
Switch State: maykr_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, cine_3, cine_4, boss_phase1, boss_phase2, boss_vulnerable, additional_reveal, additional_levelstart

Final Sin:
Switch State: icon_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, boss_phase1, boss_phase2, boss_vulnerable, boss_end, credits_start, credits_end

UAC Atlantica Facility:
Switch State: dlc1_oil_rig
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, cine_3, cine_6, stinger

The Blood Swamps:
Switch State: dlc1_hell_swamp_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, boss_phase1, boss_phase2

The Holt:
Switch State: dlc1_maykr_city_music
Ghost States: main_ambient, main_light, main_heavy, cine_3, cine_boss_intro, boss_phase1, boss_phase2, boss_phase3, boss_vulnerable, boss_end, credits_end

The World Spear:
Switch State: dlc_2_spear
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, cine_3, additional_levelstart, stinger

Reclaimed Earth:
Switch State: dlc2_overgrown_earth_music
Ghost States: main_ambient, main_light, main_heavy

Immora/The Dark Lord:
Switch State: dlc2_tech_hell_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2, cine_3, boss_phase1, boss_phase2, boss_phase3, boss_end, credits_start

Hub/BFG Division:
Switch State: hub_music
Ghost States: main_ambient, main_light, main_heavy, cine_1, cine_2
Secondary Switch: hub

Blood Harvester: (unused track)
Switch State: bloodharvester_music
Ghost States: main_ambient, main_light

BATTLEMODE Music: (pvp)
Switch State: pvp
Ghost States: main_ambient, pvp_lobby, pvp_lobby_end, pvp_lobby_player_ready, pvp_lose, pvp_win, pvp_sudden_death

Classic Music: (in Slayer Tutorial)
Switch State: tutorial_switch
Ghost States: main_ambient

idParticleEmitter

An entity that emits particles.

Usage

entity {
	entityDef example_particle_emitter {
	inherit = "func/emitter";
	class = "idParticleEmitter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		fadeIn = 0;
		fadeOut = 0;
		startOff = true;
		spawnPosition = { // Be sure to set its spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = { // Size and color of the particle
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
			color = {
				r = 1;
				g = 1;
				b = 1;
			}
			emissiveColor = {
				r = 1;
				g = 1;
				b = 1;
			}
			emissiveScale = 1;
		}
		particleSystem = ""; // Particle model
	}
}
}

Example

This example emits lightning on the ground. It would normally be used for electric floor hazards and would have a hurt trigger to go with it.

entity {
	entityDef example_electric_floor {
	inherit = "func/emitter";
	class = "idParticleEmitter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		fadeIn = 0;
		fadeOut = 0;
		startOff = true;
		spawnPosition = { // Be sure to set its spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			scale = {
				x = 1.3;
				y = 1.3;
				z = 1.3;
			}
			color = {
				r = 0.0549019873;
				g = 0.349020004;
				b = 0.690195978;
			}
			emissiveColor = {
				r = 0.082352899;
				g = 0.50980401;
			}
			emissiveScale = 4;
		}
		particleSystem = "map_e1m2_battle/lightning_water_crossroads2";
	}
}
}

See Also

idEnvironmentalDamage_Hurt_Trigger

idPlayerStart

An entity that defines the spawn position for players.

Single Player

entity {
	entityDef initial_player_start_1 {
	class = "idPlayerStart";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
        targets = {
			num = 1;
			item[0] = "some_post_checkpoint_relay"; // optional, trigger these entities when a checkpoint using this spawn is loaded.
		}

	}
}
}

Multiplayer - Slayer

entity {
	entityDef game_online_battle_arena_player_start_1 {
	class = "idPlayerStart";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		team = "TEAM_ONE";
        respawnOnly = false; // can slayer players respawn in this location
	}
}
}

Multiplayer - Demon

entity {
	entityDef game_online_battle_arena_demon_start_1 {
	class = "idDemonPlayerStart";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		team = "TEAM_TWO";
		respawnOnly = false; // can demon players respawn in this location
	}
}
}

idProp2

An entity that will spawn a pickup or barrel.

Health

entity {
	entityDef pickups_pickup_health_large_1 {
	inherit = "pickup/health/large";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			model = "art/pickups/health/health_pack_big_a.lwo";
			contributesToLightProbeGen = false;
			ignoreDesaturate = true;
			emissiveScale = 0.5;
			scale = {
				x = 1.75;
				y = 1.75;
				z = 1.75;
			}
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ITEMS_SPAWNED";
				increase = 1;
			}
		}
		equipOnPickup = true;
		lootStyle = "LOOT_TOUCH";
		triggerDef = "trigger/props/pickup";
		isStatic = true;
		canBePossessed = true;
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		difficultyScaleType = "DST_PICKUP";
		pickup_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_HEALTH_PICKUP";
				increase = 1;
			}
		}
		useableComponentDecl = "health/sp_health_large";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		dormancy = {
			playerDistance = 20;
			playerRearwardDistance = 20;
		}
	}
}
}

Armor

entity {
	entityDef pickups_pickup_armor_large_1 {
	inherit = "pickup/armor/large";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			model = "art/pickups/armor/pickup_armor_01.lwo";
			contributesToLightProbeGen = false;
			ignoreDesaturate = true;
			scale = {
				x = 2;
				y = 2;
				z = 2;
			}
			emissiveScale = 0.5;
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ITEMS_SPAWNED";
				increase = 1;
			}
		}
		equipOnPickup = true;
		lootStyle = "LOOT_TOUCH";
		triggerDef = "trigger/props/armor_large";
		isStatic = true;
		canBePossessed = true;
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		difficultyScaleType = "DST_PICKUP";
		pickup_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ARMOR_PICKUP";
				increase = 1;
			}
		}
		useableComponentDecl = "armor/sp_armor_50";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		dormancy = {
			playerDistance = 20;
			playerRearwardDistance = 20;
		}
	}
}
}

Ammo

entity {
	entityDef pickups_pickup_ammo_shells_1 {
	inherit = "pickup/ammo/shells";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			model = "art/pickups/ammo/ammo_shotgun_01.lwo";
			contributesToLightProbeGen = false;
			ignoreDesaturate = true;
			emissiveScale = 0.2;
			scale = {
				x = 1.39999998;
				y = 1.39999998;
				z = 1.39999998;
			}
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ITEMS_SPAWNED";
				increase = 1;
			}
		}
		equipOnPickup = false;
		lootStyle = "LOOT_TOUCH";
		triggerDef = "trigger/props/pickup";
		isStatic = false;
		canBePossessed = true;
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		flags = {
			canBecomeDormant = true;
		}
		fxDecl = "pickups/ammo_shotgun";
		difficultyScaleType = "DST_PICKUP";
		updateFX = true;
		pickup_statIncreases = {
			num = 2;
			item[0] = {
				stat = "STAT_AMMO_PICKUP";
				increase = 1;
			}
			item[1] = {
				stat = "STAT_PLACED_AMMO_PICKUP";
				increase = 1;
			}
		}
		useableComponentDecl = "propitem/ammo/shotgun_10";
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		dormancy = {
			playerDistance = 20;
			playerRearwardDistance = 20;
		}
	}
}
}

Extra Life

entity {
	layers {
		"game/sp/extralives/extralives_many" // the layer prevents it from spawning in Ultra Nightmare difficulty
	}
	entityDef pickups_pickup_extra_life_extra_life_1 {
	inherit = "pickup/extra_life/extra_life_1";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		whenToSave = "SGT_NORMAL";
		saveType = "SGS_GAME_DATA";
		removeFlag = "RMV_IMMEDIATE_ALLOW_MS";
		automapPropertiesDecl = "extra_life";
		renderModelInfo = {
			model = "art/pickups/extraLife.lwo";
			contributesToLightProbeGen = false;
			ignoreDesaturate = true;
			scale = {
				x = 1.75;
				y = 1.75;
				z = 1.75;
			}
			emissiveColor = {
				r = 0;
				b = 0.68235302;
			}
			emissiveScale = 1;
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
		}
		fxDecl = "pickups/ammo_extralife";
		physicsAttributes = "lootdrop/health";
		useableComponentDecl = "sp_extra_life_1";
		thinkComponentDecl = "bobthink";
		triggerDef = "trigger/props/pickup_large";
		updateFX = true;
		canBePossessed = true;
		sendNotableItemTelemetryEvent = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		flags = {
			canBecomeDormant = true;
			forcePhysicsUpdate = true;
			forceFXThink = true;
		}
		bindInfo = {
			bindParent = "movers_func_mover_1"; // bind it to an idMover
			bindOriented = true;
			lockLocalOffset = true;
		}
		dormancy = {
			playerDistance = 30;
			playerRearwardDistance = 30;
		}
	}
}
}

Barrel

entity {
	entityDef game_envhazard_barrels_red_1 {
	inherit = "envhazard/barrels/red";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		flags = {
			forcePhysicsUpdate = true;
			takedamage = true;
		}
		renderModelInfo = {
			model = "art/breakable/barrel/barrel_explode_a.lwo";
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			contentsFilter = {
				playerClip = false;
			}
			numSides = 10;
		}
		networkSerializeTransforms = true;
		killerNames = {
			num = 1;
			item[0] = "#str_decl_damage_hazard_explosive_barrel_GHOST53200";
		}
		fxDecl = "breakable/barrel_01";
		physicsAttributes = "barrels";
		isStatic = false;
		damageComponentDecl = "barrel/default";
		lootDrop = {
			lootDropDataDecl = "barrels/rune";
		}
		canBePossessed = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
	}
}
}

Key Card

entity {
	entityDef pickups_keycard_uac_red_1 {
	inherit = "pickup/keycard/uac_red";
	class = "idProp2";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			model = "art/pickups/keycard_pickup_r.lwo";
			contributesToLightProbeGen = false;
			materialRemap = {
				num = 1;
				item[0] = {
					from = "art/pickups/keycard_r";
					to = "art/pickups/keycard_r_dlc";
				}
			}
			emissiveColor = {
				g = 0.0333333015;
				b = 0;
			}
		}
		spawn_statIncreases = {
			num = 1;
			item[0] = {
				stat = "STAT_ITEMS_SPAWNED";
				increase = 1;
			}
		}
		equipOnPickup = true;
		lootStyle = "LOOT_TOUCH";
		triggerDef = "trigger/props/progression_small";
		isStatic = true;
		canBePossessed = true;
		whenToSave = "SGT_CHECKPOINT";
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		flags = {
			canBecomeDormant = true;
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
		}
		useableComponentDecl = "propitem/keycard/uac_red";
		thinkComponentDecl = "bob_rotate";
		sendNotableItemTelemetryEvent = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 1;
				}
				mat[1] = {
					x = -1;
					y = 0;
				}
			}
		}
		fxDecl = "dlc1/e4m1_rig/red_keycard";
	}
}
}

idProp_Coop

An entity that can create a physical obstruction for all players.

Usage

entity {
	entityDef prop_barrier_1 {
	class = "idProp_Coop";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			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 = {
			model = "art/gameplay/gameplay_energyBarrier_a.lwo"; // render model can be set to "NULL" to create an invisible barrier
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			clipModelName = NULL;
			type = "CLIPMODEL_BOX";
			size = {
				x = 1;
				y = 1;
				z = 1;
			}
			contentsFilter = {
				playerClip = false;
			}
			forceObstacle = true;
		}
		showOnStart = true;
		isSolid = true;
		forceContentSolidOnSpawn = true;
	}
}
}

idSoundEntity

Sound entities are used to broadcast sounds to a player.

Usage

entity {
	entityDef sound_buffpod_1 {
	inherit = "sound/soundentity";
	class = "idSoundEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		temporarySoundEvent = true; // if true, the sound effect will only play for its duration
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		soundOcclusionBypass = true; // if true, the sound effect plays with no barrier obstruction
		startEvents = {
			num = 1;
			item[0] = "play_ui_empowered_demon_incoming"; // the sound that will play
		}
		stopEvents = {
			num = 1;
			item[0] = "play_ui_empowered_demon_incoming"; // the sound that will stop, this makes it repeatable
		}
	}
}
}

See Also

idTarget_Command

An entity to trigger the specified console commands.

Usage

entity {
	entityDef example_target_command_eternal {
	class = "idTarget_Command";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		commandText = "give ammo; give armor; give health; judgementMeter_Set 3";
		spawnPosition = {
			x = 0;
			y = 0;
			z = 0;
		}
	}
}
}

 

idTarget_Count

An entity that is commonly used for relays.

As with most computing logic, relays wait for specified inputs before it can send its output.

Usage

entity {
	entityDef example_relay {
	inherit = "target/relay";
	class = "idTarget_Count";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = { // Spawn position does not matter
			x = 1;
			y = 1;
			z = 1;
		}
		targets = { // Entities that activate once the relay outputs
			num = 1;
			item[0] = "example_entity";
		}
		repeat = true; // If the relay is repeatable
		count = 1; // How many inputs this relay needs to output
		delay = 1; // Activation delay in seconds
	}
}
}

Relays are useful if you want to activate several entities at once, give a delay before the entities activate, or have an entity require multiple inputs before activating.

idTarget_DevLoadoutSwap

An entity that replaces the Slayer's current loadout with something else.

Usage

entity {
    entityDef devinvloadout_swap_1 {
    class = "idTarget_DevLoadoutSwap";
    expandInheritance = false;
    poolCount = 0;
    poolGranularity = 2;
    networkReplicated = false;
    disableAIPooling = false;
    edit = {
        flags = {
            noFlood = true;
        }
        networkSerializeTransforms = false;
        spawnPosition = { // spawn position is not important
            x = 1;
            y = 1;
            z = 1;
        }
        newDevloadout = "devinvloadout/dlc/e5m1_spear"; // replace loadout with e5m1_spear
        clearPrevInventory = true; // remove current inventory before replacing
        count = 1; // only needs to execute once
    }
}
}

See Also

idTarget_EnableTarget

An entity that either exclusively enables targets, or exclusively disables them, in contrast to other entity types that tend to simply trigger or toggle their targets.

entity {
	entityDef example_enable {
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		targets = {
			num = 1;
			item[0] = "exaple_target";
		}
	}
}
}

enableFlag:Defaults to true if omitted, set to false if you want to disable specified targets.

idTarget_FirstThinkActivate

An entity that will execute on map load.

Usage

entity {
	entityDef first_think_activate_1 {
	class = "idTarget_FirstThinkActivate";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnPosition = { // spawn position is not important
			x = 1;
			y = 1;
			z = 1;
		}
		targets = { // triggers these entities on first map load
			num = 1;
			item[0] = "sample_relay_1";
		}
	}
}
}

idTarget_LayerStateChange

An entity that can save the player's progress as a checkpoint and-as its name implies-manipulate layers.

Checkpoint

entity {
	entityDef checkpoint_target_change_layer_1 {
	class = "idTarget_LayerStateChange";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		activate_NextMapLoad = {
			num = 1;
			item[0] = "game/sp/e1m1_intro/cp_01";
		}
		checkpointName = "cp_01";
		playerSpawnSpot = "checkpoint_player_start_cp_01";
		saveCheckpoint = true;
	}
}
}

Checkpoint parameters

checkpointName: Define a checkpoint name.

If you attempt to load a save when no layer state change entity with checkpointName set to the value the game is expecting, it will crash to the desktop. If meathook is installed, a message box will appear telling you the missing checkpoint.

playerSpawnSpot: the idPlayerStart entity the player will spawn at when loading the checkpoint.

saveCheckpoint: whether or not to save a checkpoint. Defaults to true, so if you only want to manipulate layers when activated, then explicitly set this to false.

Layer Manipulation

Entities will only react to state changes applied to its first layer. You may notice entities in vanilla levels with multiple layers; this is pointless.

All layers in the game can be used in all levels.

activate_NextMapLoad: Wait until the player loads the checkpoint to activate this layer. This is typically used to activate checkpoint layers that are placed on idTarget_FirstThinkActivate entities that set the map up as if the player had progressed through it when a checkpoint is loaded.

activate_Immediately: Spawn all entities attached to the layers specified right away.

remove_Immediately: Completely remove any entities attached to these layers from the map.

These options are used to hide and show parts of the map as the player progresses through it for optimization. Improperly handling these layers can cause visual bugs, or degraded graphical performance. Usage is recommended only for advanced modders that are certain they have a specific reason to do so. (for example, you intend the player to progress through the map backwards what is traditionally expected)

hideRenderModels_Immediately: Make all entities and map geometry with these layers visible.

showRenderModels_Immediately: Make all entities and map geometry with these layers invisible.

dormant_Immediately: Suspends entities with these layers, meaning they don't have an effect on the world, player, and so on.

awake_Immediately: Resumes entities with these layers.

"NextMapLoad" variants of all layer state changes exist, however they are unused, with the exception of the aforementioned activate_NextMapLoad.

idTrigger_VisibilityController

For optimization, visibility controller entities activate layer changes as the player traverses the map. You probably should not touch these, this is listed here for completeness in the unlikely event you need to edit one.

entity {
	entityDef visibility_trigger_visibility_controller_trigger_34 {
	inherit = "trigger/visibility_controller_trigger";
	class = "idTrigger_VisibilityController";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		demonPlayerCanActivate = true;
		playerCanActivate = true;
		onlyLocalPlayerCanActivate = true;
		spawnPosition = {
			x = -15;
			y = 295;
			z = 15;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = "maps/game/sp/e3m1_slayer/e3m1_slayer/visibility_trigger_visibility_controller_trigger_34";
		}
		onActivateLayerChangeTarget = "visibility_target_change_layer_1_zone15_on";
	}
}
}

idTarget_Notification

An entity that creates a notification on player's screen when triggered.

Usage

entity {
	entityDef example_notification {
	class = "idTarget_Notification";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnPosition = {
			x = 0;
			y = 0;
			z = 0;
		}
		notificationType = "HUD_EVENT_PLAYER_NOTIFICATION"; // from list below or notificationType from generated/decls/notification/hud
		header = "#str_swf_notification_secret_found"; // headerText from generated/decls/notification/hud
		subtext = "#str_decl_callout_suit_sentinel_training_unlocked_GHOST82861"; // subText from generated/decls/notification/hud
		icon = "art/ui/dossier/icons/ico_extra_life_3up_on"; // icon from generated/decls/notification/hud
	}
}
}

notificationType list

HUD_NOTIFY_OBJECTIVE_UPDATE
HUD_NOTIFY_OBJECTIVE_COMPLETE
HUD_NOTIFY_OBJECTIVE_REPLACE
HUD_NOTIFY_OBJECTIVE_SHOW_LAST
HUD_NOTIFY_OBJECTIVE_PIN
HUD_NOTIFY_CODEX_RECIEVED
HUD_NOTIFY_CODEX_UPDATED
HUD_NOTIFY_INVENTORY_ACQUIRED
HUD_NOTIFY_RUNE_ACQUIRED
HUD_NOTIFY_RUNE_UPGRADE_TOKEN_ACQUIRED
HUD_NOTIFY_MOD_ACQUIRED
HUD_NOTIFY_PRAETOR_ACQUIRED
HUD_NOTIFY_SENTINEL_BATTERY_ACQUIRED
HUD_NOTIFY_EQUIPMENT_ACQUIRED
HUD_NOTIFY_ARGENTUPGRADE_ACQUIRED
HUD_NOTIFY_COLLECTIBLE_ACQUIRED
HUD_NOTIFY_FAST_TRAVEL_UNLOCKED
HUD_NOTIFY_CHECKPOINT
HUD_NOTIFY_GENERIC_CALLOUT
HUD_NOTIFY_ROUND_TIMER_CALLOUT
HUD_NOTIFY_ROUND_NUMBER_CALLOUT
HUD_NOTIFY_ROUND_LOSE_CALLOUT
HUD_NOTIFY_ROUND_WIN_CALLOUT
HUD_NOTIFY_ROUND_START_CALLOUT
HUD_NOTIFY_ENEMY_USED_CARD_CALLOUT
HUD_NOTIFY_ALLY_USED_CARD_CALLOUT
HUD_NOTIFY_MATCH_VICTORY_CALLOUT
HUD_NOTIFY_MATCH_DEFEAT_CALLOUT
HUD_NOTIFY_INVASION_CALLOUT
HUD_NOTIFY_INVASION_INCOMING
HUD_NOTIFY_CALLOUT_STATUS_TIMER
HUD_NOTIFY_CALLOUT_MAJOR_TIMER
HUD_NOTIFY_CALLOUT_MAJOR_ICON
HUD_NOTIFY_CALLOUT_INVASION_ICON
HUD_NOTIFY_SENTINEL_ARMOR_ACTIVATED
HUD_NOTIFY_SENTINEL_ARMOR_DEACTIVATED
HUD_NOTIFY_EXTRA_LIFE_ACTIVATED
HUD_NOTIFY_EXTRA_LIFE_ACQUIRED
HUD_NOTIFY_EXTRA_LIFE_ACQUIRED_2
HUD_NOTIFY_EXTRA_LIFE_ACQUIRED_3
HUD_NOTIFY_EXTRA_LIFE_MAXED
HUD_NOTIFY_CHEAT_CODE_ACQUIRED
HUD_NOTIFY_GAME_HINT
HUD_NOTIFY_SECRET_HINT
HUD_NOTIFY_SECRET_FOUND
HUD_NOTIFY_SECRET_ENCOUNTER_FOUND
HUD_NOTIFY_SECRET_ENCOUNTER_FAILED
HUD_NOTIFY_SECRET_ENCOUNTER_COMPLETE
HUD_NOTIFY_COMBAT_POINT
HUD_NOTIFY_WEAPON_MASTERY_ACQUIRED
HUD_NOTIFY_BOUNTY_COMPLETE
HUD_NOTIFY_BOUNTY_ACTIVE
HUD_NOTIFY_KEYCARD
HUD_NOTIFY_SLAYER_KEY
HUD_NOTIFY_SLAYER_GATE
HUD_NOTIFY_SLAYER_GATE_E3
HUD_NOTIFY_SLAYER_ENCOUNTER
HUD_NOTIFY_SLAYER_ENCOUNTER_NO_POINTS
HUD_NOTIFY_MISSION_CHALLENGE_INTRO
HUD_NOTIFY_MISSION_CHALLENGE_UPDATE
HUD_NOTIFY_MISSION_CHALLENGE_COMPLETE
HUD_NOTIFY_WEAPON_MASTERY_UPDATE
HUD_NOTIFY_WEAPON_MASTERY_COMPLETE
HUD_NOTIFY_WEAPON_BROKEN
HUD_NOTIFY_DOOM_EVENT_BOSS_COMPLETE
HUD_NOTIFY_DOOM_EVENT_MISSION_COMPLETE
HUD_NOTIFY_DOOM_EVENT_MASTER_LEVEL_COMPLETE
HUD_NOTIFY_DOOM_EVENT_INVASION_COMPLETE
HUD_NOTIFY_DOOM_EVENT_PVP_MATCH_COMPLETE
HUD_NOTIFY_MILESTONE_COMPLETED
HUD_NOTIFY_MILESTONE_COMPLETED_SILENT
HUD_NOTIFY_LEVEL_UP
HUD_NOTIFY_SEASON_LEVEL_UP
HUD_NOTIFY_LATER_IN_THE_MISISON_E3
HUD_NOTIFY_BUFF_POD_NEARBY
HUD_NOTIFY_UPGRADE_REMINDER_PRAETOR
HUD_NOTIFY_DOOM_EVENT_SKYBOX_UNLOCK
HUD_NOTIFY_UPGRADE_PERK
HUD_NOTIFY_ARGENT_BONUS
HUD_NOTIFY_MOD_POINT_ACQUIRED
HUD_NOTIFY_MULTIPLE_MOD_POINT_ACQUIRED
HUD_NOTIFY_AUTOMAP_REVEALED
HUD_NOTIFY_GOLD_BOSS_START
HUD_NOTIFY_GOLD_BOSS_DEFEATED
HUD_NOTIFY_EXTRA_LIFE_ENCOUNTER_FOUND
HUD_NOTIFY_EXTRA_LIFE_ENCOUNTER_FAILED
HUD_NOTIFY_EXTRA_LIFE_ENCOUNTER_COMPLETE
HUD_NOTIFY_SECRET_ENCOUNTER_DLC_COMPLETE
HUD_NOTIFY_SECRET_ENCOUNTER_DLC_COMPLETE_SKIN_PROGRESS
HUD_NOTIFY_SECRET_ENCOUNTER_DLC_COMPLETE_SKIN_UNLOCK
HUD_NOTIFY_RUNE_CRYSTALS_ACQUIRED
HUD_NOTIFY_MASTER_LEVEL_START
HUD_NOTIFY_SUPPORT_RUNE_ACQUIRED
HUD_NOTIFY_SCREECHER_KILLED
HUD_NOTIFY_PLAYER_CURSED
HUD_NOTIFY_HORDE_ROUND_START
HUD_NOTIFY_HORDE_ROUND_END
HUD_NOTIFY_HORDE_WAVE_START
HUD_NOTIFY_HORDE_WAVE_END
HUD_NOTIFY_HORDE_BOUNTY_START
HUD_NOTIFY_HORDE_BOUNTY_COMPLETE
HUD_NOTIFY_HORDE_BOUNTY_FAILED
HUD_NOTIFY_HORDE_STATE_SHARE_COMPLETE
HUD_NOTIFY_HORDE_STATE_SHARE_FAILED
HUD_NOTIFY_MAX

Not all notification types are working.

idTarget_Remove

An entity that will remove the listed entities when activated.

Usage

entity {
	entityDef example_target_remove_eternal {
	class = "idTarget_Remove";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnPosition = {
			x = 0;
			y = 0;
			z = 0;
		}
		targets = { // list of entities to remove
			num = 1;
			item[0] = "example_func_dynamic";
        }
	}
}
}


idTarget_Hide

An entity that will hide the listed entities when activated.

Note that not all entities can be hidden.

Usage

entity {
	entityDef example_target_hide_eternal {
	class = "idTarget_Hide";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnPosition = {
			x = 5;
			y = -105;
			z = -15;
		}
		targets = { // list of entities to hide
			num = 1;
			item[0] = "example_proxy";
		}
		reuseable = true; // if false, this target will be single use
	}
}
}

See Also

idTarget_Show

An entity that will show the listed entities when activated.

Usage

entity {
	entityDef example_target_show_eternal {
	class = "idTarget_Show";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		spawnPosition = {
			x = 13;
			y = -76;
			z = -5;
		}
		targets = {
			num = 1;
			item[0] = "func_dynamic_vista_example";
		}
		reuseable = true; // if false, this target will be single use
	}
}
}

See Also

idTarget_Spawn

An entity to spawn other entities. Primarily used for idAI2 entities.

It should be noted that most of these parameters can be excluded unless needed. An idTarget_Spawn can be simplified down to this, as an example, if all the player wishes to do is be able to spawn in demons with the teleport anim/fx and no other frills.

When copying vanilla spawn targets (rather than from this wiki) you may notice the entities to be spawned listed redundantly in under both "EntityDefs" and "Targets". The EntityDefs list is what you want. "Targets" does not do what you expect; it deletes listed entities on map load. This is not typically an issue because listed entities are attached to the inactive spawn_target_layer and therefore not spawned in the map initially, but in rare cases where a level would be set up otherwise, listing a target may cause issues.

Usage

entity {
	entityDef example_target_spawn_eternal {
	inherit = "target/spawn";
	class = "idTarget_Spawn";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = 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 = 0;
		}
		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 = "example_spawn_parent";
		disablePooling = false;
		spawnPosition = {
			x = 209.669998;
			y = -10.990000;
			z = -23.95;
		}
	}
}
}

Similarly, a spawn target can be simplified to the following example.

entity {
	entityDef ai_target_spawn_mod_1 {
	inherit = "target/spawn";
	class = "idTarget_Spawn";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		entityDefs = {
			num = 1;
			item[0] = {
				name = "example_ai_gargoyle_1";
			}
		}
		targetSpawnParent = "mod_master_spawn_parent";
		spawnEditable = {
			overwriteTraversalFlags = true;
			traversalClassFlags = "CLASS_A";
			combatHintClass = "CLASS_ALL";
			aiStateOverride = "AIOVERRIDE_TELEPORT";
		}
		spawnPosition = {
			x = 209.669998;
			y = -10.990000;
			z = -23.95;
		}
	}
}
}

Sometimes you might want an AI to spawn with an animation rather than through the generic teleportation effect.

This target spawn makes a Mancubus spawn in with its jump animation - like it is jumping from below a ledge.

entity {
	entityDef example_mancubus_traversal_spawn {
	inherit = "target/spawn";
	class = "idTarget_Spawn";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = 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 = "example_ai_heavy_mancubus_fire"; // Can only spawn Mancubi
		}
}
		conductorEntityAIType = "SPAWN_AI_TYPE_ANY";
		initialEntityDefs = {
			num = 0;
		}
		spawnEditable = {
			spawnAt = "";
			copyTargets = false;
			additionalTargets = {
				num = 0;
			}
			overwriteTraversalFlags = true;
			traversalClassFlags = "CLASS_A";
			combatHintClass = "CLASS_ALL";
			spawnAnim = "animweb/characters/monsters/mancubus_fire/traversal/jump_forward_500_up_500"; // Animation to use
			aiStateOverride = "AIOVERRIDE_PLAY_ENTRANCE_ANIMATION"; // Sets to play into animation instead of teleport
			initialTargetOverride = "";
		}
		portal = "";
		targetSpawnParent = "";
		disablePooling = false;
		spawnPosition = { // Be sure to set spawn position to where the AI's start position will be
			x = -69.55;
			y = 395.78;
			z = 102.83;
		}
		spawnOrientation = { // Be sure to set the spawn rotation
			mat = {
				mat[0] = {
					x = 0.99994820356;
					y = -0.0052357506938;
				}
				mat[1] = {
					x = 0.0052359499969;
					y = 0.99998629093;
				}
			}
		}
	}
}
}

The spawnAnim parameter varies in syntax based on what demon AI is being spawned.

idTarget_Spawn_Parent

An entity that idTargetSpawnGroup entities use to define what AI can spawn in its spawn group.

Usage

entity {
	entityDef example_target_spawn_group_parent {
	inherit = "encounter/spawn_group/parent";
	class = "idTarget_Spawn_Parent";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = 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 = { // List of demons that can be spawned
		num = 3;
		item[0] = {
			name = "game_ai_fodder_imp";
		}
		item[1] = {
			name = "game_ai_fodder_gargoyle";
		}
		item[2] = {
			name = "game_ai_fodder_soldier_blaster";
		}
}
		conductorEntityAIType = "SPAWN_AI_TYPE_ANY";
		initialEntityDefs = {
			num = 0;
		}
		spawnPosition = { // Spawn position does not matter
			x = 1;
			y = 1;
			z = 1;
		}
		targets = { // List of demons that can be spawned
			num = 3;
			item[0] = "game_ai_fodder_imp";
			item[1] = "game_ai_fodder_gargoyle";
			item[2] = "game_ai_fodder_soldier_blaster";
		}
	}
}
}

If the idTarget_Spawn entities in the idTargetSpawnGroup contains their own entityDefs, then those will override the spawn parent.

You would normally want all idTarget_Spawn entities in the idTargetSpawnGroup to have no idAI2 entities attached to them.

For the sake of organization, you might want to only use one idTarget_Spawn_Parent that contains every demon idAI2 for the entire level.

idTargetSpawnGroup

An entity used to group multiple idTarget_Spawn entities.

Target Spawn Groups are used for define what specific spawn positions can be used for eventCalls that spawn multiple AI at a time, such as: spawnAI, maintainAICount, staggeredAISpawn, etc.

Usage

entity {
	entityDef example_target_spawn_group {
	inherit = "encounter/spawn_group/zone";
	class = "idTargetSpawnGroup";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Spawn position does not matter
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = NULL;
		}
		spawners = { // List of idTarget_Spawns that the spawn group uses
			num = 3;
			item[0] = "example_target_spawn_1";
			item[1] = "example_target_spawn_2";
			item[2] = "example_target_spawn_3";
		}
		targetSpawnParent = "example_target_spawn_group_parent"; // Defines what AI can spawn in the group
	}
}
}

targetSpawnParent is optional but it is an entity used to define what AI the spawners can use.
However, if the idTarget_Spawn contains their own entityDefs, then those will override the spawn parent.

See Also

idTarget_Teleport

An entity to teleport the player to the specified location when used.

Usage

entity {
	entityDef example_target_teleport_eternal {
	class = "idTarget_Teleport";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 88.999733;
			y = -1079.00024;
			z = -83.75;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707106709;
					y = -0.707106829;
				}
				mat[1] = {
					x = 0.707106829;
					y = 0.707106709;
				}
			}
		}
		targetActivator = true;
	}
}
}

idTrigger_Teleporter_Fade

The idTrigger_Teleporter_Fade entity defines the location where the player can teleport from with the fade effect.

entity {
	entityDef trigger_teleport_fade_1 {
	inherit = "trigger/teleport_fade";
	class = "idTrigger_Teleporter_Fade";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		killerNames = {
			num = 1;
			item[0] = "#str_decl_damage_the_void_GHOST81052"; // damage name
		}
		demonPlayerCanActivate = true; // should a Demon player activate
		clientCanActivate = true;
		chooseAASDestination = false;
		conservePlayerSpeed = false;
		fadeOut = {
			fadeMS = 250; // fade out duration
			fadeSound = "play_stinger_falling_damage";
		}
		fadeIn = {
			fadeMS = 250; // fade in duration
		}
		fadeInDelayMS = 750;
		controlDelayMS = 250;
		damageDecl = "damage/triggerhurt/triggerhurt25"; // damage dealt
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = "maps/game/sp/e1m1_intro/e1m1_intro/trigger_teleport_fade_1";
		}
		dormancy = {
			allowDistanceDormancy = false;
			allowPvsDormancy = false;
		}
		destination = "falling_info_teleport_destination_1"; // destination entityDef
	}
}
}

See Also

idTarget_Timeline

An entity that plays multiple entities after a set amount of time between each event.

Usage

entity {
	layers {
		"game/pvp/slayer_team" // give the timeline a layer
	}
	instanceId = 4206901337; // look for the instance ID for some entities
	originalName = "target_timeline_portals";
	entityDef target_timeline_portals_4206901337 { // use the entityDef when targeting this entity
	inherit = "target/timeline";
	class = "idTarget_Timeline";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		networkSerializeTransforms = false;
		spawnPosition = { // spawn position is not important
			x = 1;
			y = 1;
			z = 1;
		}
		componentTimeLine = { // this timeline will trigger both events at the same time
			entityEvents = {
				num = 2;
				item[0] = {
					entity = "invasion_left_func_fx_slayer_portal_1_4206901337";
					events = {
						num = 2;
						item[0] = {
							eventCall = {
								eventDef = "hide"; // hide the left portal when the entity is used
								args = {
									num = 0;
								}
							}
						}
						item[1] = {
							eventTime = 5000;
							eventCall = {
								eventDef = "show"; // show the left portal after 5000 milliseconds
								args = {
									num = 0;
								}
							}
						}
					}
				}
				item[1] = {
					entity = "invasion_right_func_fx_slayer_portal_1_4206901337";
					events = {
						num = 2;
						item[0] = {
							eventCall = {
								eventDef = "hide"; // hide the right portal when the entity is used
								args = {
									num = 0;
								}
							}
						}
						item[1] = {
							eventTime = 5000;
							eventCall = {
								eventDef = "show"; // show the right portal after 5000 milliseconds
								args = {
									num = 0;
								}
							}
						}
					}
				}
			}
		}
		allowClientsToStart = true;
		shouldForceTimelineFinish = true;
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

idTarget_Timer

When activated, displays a countdown on the player's HUD.

idTarget_Timer

entity {
	entityDef example_countdown {
	class = "idTarget_Timer";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		dormancy = {
			allowPvsDormancy = false;
		}
		time = 20;
	}
}
}

time: the only mandatory argument. Measured in seconds.

Do not rely on the failTarget paramater to activate entities when the timer runs out. The targeted entity will not be activated if the player's HUD is disabled. Instead, use either a relay delay, or an encounter manager wait event call.

stopOnSecondActivate:if true, then only the first activation will set a countdown. The second activation will immediately set the countdown to 0. Any subsequent activation of this timer will have no effect. Defaults to false.


idTrigger

An entity that will trigger its listed targets when used.

Usage

entity {
	entityDef mod_trigger_1 {
	inherit = "trigger/trigger";
	class = "idTrigger";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		removeFlag = "RMV_NEVER";
		spawnPosition = {
			x = 1;
			z = 1;
			y = 1;
		}
		renderModelInfo = {
			model = NULL;
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			clipModelName = "";
			type = "CLIPMODEL_CYLINDER";
            size = {
                x = 1;
                y = 1;
                z = 1;
            }
		}
		targets = { // list of entities to be triggered
			num = 1;
			item[0] = "mod_target_1";
		}
		wait = 0; // Seconds to wait before this idTrigger can be retriggered.
		waitDelta = 0; // Additional seconds added to the wait value with each trigger. This is cumulative.
		waitMin = 0; // Minimum seconds the wait period can become if using waitDelta.
		waitMax = 0; // Maximum seconds the wait period can become if using waitDelta.
		delay = 0; // Delay, in seconds, between activating this idTrigger and when it activates its targets.
		triggerOnce = true; // If true, will only trigger its targets once.
		triggerFirst = true; // If true, this entity must be activate before it can be used.
		triggerOnEnter = true; // If true, it will only activate its targets when entering the trigger.
		triggerOnExit = false; // If true, it will only activate its targets when exiting the trigger.
		aiCanActivate = false; // If true, ai can activate this idTrigger.
		demonPlayerCanActivate = false; // If true, any demon players can activate.
		clientCanActivate = false; // If true, can be activated on client.
	}
}
}

The spawnPosition and clipModelInfo determine the physical location that the player has to walk into to activate the idTrigger. Alternatively, the idTrigger can also be activated by another entity or eventCall.

idTrigger_GorillaBar

An entity volume that allows Slayers to swing onto.

Metal A

entity {
	entityDef game_interact_vault_pipe_metal_a_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/tile/hell_earth/metal_monkey_bar";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/test/monkey_bar_a.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Metal B

entity {
	entityDef game_interact_vault_pipe_metal_b_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/kit/uac/arena/monkey_bar_b.lwo";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
			emissiveColor = {
				r = 0.215685993;
				g = 1;
				b = 0.281046003;
			}
			emissiveScale = 3;
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/test/monkey_bar_a.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Sentinel A

entity {
	entityDef game_interact_vault_pipe_sentinel_a_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/kit/gameplay/monkeyBar_sentinel_a.lwo";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/gameplay/monkeyBar_sentinel_a.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Sentinel C

entity {
	entityDef game_interact_vault_pipe_sentinel_c_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/kit/gameplay/monkeybar_sentinel_c.lwo";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/gameplay/monkeybar_sentinel_c.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Bone

entity {
	entityDef game_interact_vault_bone_1 {
	inherit = "interact/vault/bone";
	class = "idTrigger_GorillaBar";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		renderModelInfo = {
			model = "art/kit/gameplay/monkeybar_bone.lwo";
            materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/gameplay/monkeybar_bone.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Cultist

entity {
	entityDef game_interact_vault_bone_cultist_1 {
	inherit = "interact/vault/bone";
	class = "idTrigger_GorillaBar";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
		renderModelInfo = {
			model = "art/kit/gameplay/monkeyBar_cultist_a.lwo";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/gameplay/monkeyBar_cultist_a.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Maykr

entity {
	entityDef game_interact_vault_pipe_maykr_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/kit/maykr/interior/arena_navigation_a_swing.lwo";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
			emissiveColor = {
				r = 0.215685993;
				g = 1;
				b = 0.281046003;
			}
			emissiveScale = 6;
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/maykr/interior/arena_navigation_a_swing.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

PVP Lazer

entity {
	entityDef game_interact_vault_pipe_pvp_lazer_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/kit/gameplay/monkeyBar_pvpLazer_a.lwo";
			materialRemap = {
				num = 0;
			}
			scale = {
				x = 1;
				y = 1;
			}
			emissiveColor = {
				r = 0.0588235036;
				g = 0.294117987;
                b = 1;
			}
			emissiveScale = 4;
		}
		netRelevancyFlags = "";
		triggerOnce = false;
		triggerOnEnter = true;
		testForValidGrab = true;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.707107067;
					y = 0.707106471;
				}
				mat[1] = {
					x = -0.707106471;
					y = 0.707107067;
				}
			}
		}
		clipModelInfo = {
			clipModelName = "art/kit/gameplay/monkeyBar_pvpLazer_a.lwo";
		}
		forceUsingLeftAxisAsForward = false;
		soundOcclusionBypass = false;
	}
}
}

Some map entities use a materialRemap to remove the render model and instead apply it to a separate idDynamicEntity.

Some monkeybar render model assets are not present in certain levels.

idTrigger_BouncePad & idInfo_BounceDestination

Entities that propel a player to a target destination.

A bounce pad consists of either three or four entities:

Each map has specific models available for rendering a jump pad.

Hell Pad

entity {
	entityDef blood_swamps_trigger_bouncepad {
	inherit = "trigger/bounce_pad";
	class = "idTrigger_BouncePad";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		launchFX = "fx/bounce_pad/basic";
		spawnPosition = {
			x = -48.06;
			y = 307.64;
			z = 7.36;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = {
				x = 3;
				y = 3;
				z = 3;
			}
			numSides = 10;
			clipModelName = NULL;
		}
		destination = "blood_swamps_bounce_destination_3";
		launchSpeed = 27; //if the destination is too far away from the trigger, try increasing this.
		useLowArcInsteadOfHigh = true;
		triggerFirst = false;
	}
}
}
entity {
	entityDef blood_swamps_bounce_destination {
	inherit = "info/bounce_destination";
	class = "idInfo_BounceDestination";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = -44.92;
			y = 302.67;
			z = 14.35;
		}
	}
}
}
entity {
	entityDef blood_swamps_bouncepad_platform {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = -48.06;
			y = 307.64;
			z = 7.06;
		}
		renderModelInfo = {
			model = "art/kit/hell/medallion_pad_a.lwo$uvlayout_lightmap=1";
			scale = {
				x = 0.5;
				y = 0.5;
				z = 0.5;
			}
		}
		clipModelInfo = {
			contentsFilter = {
				playerClip = true;
			}
			clipModelName = "art/kit/hell/medallion_pad_a.lwo$uvlayout_lightmap=1";
		}
	}
}
}
entity {
	entityDef blood_swamps_bouncepad_emitter {
	inherit = "func/emitter";
	class = "idParticleEmitter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		fadeIn = 0;
		fadeOut = 0;
		spawnPosition = {
			x = -48.06;
			y = 307.64;
			z = 7.36;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.52760612965;
					y = -0.82817548513;
					z = -0.18909542263;
				}
				mat[1] = {
					x = 0.84339135885;
					y = 0.53729975224;
					z = 0;
				}
				mat[2] = {
					x = 0.10160092264;
					y = -0.15948145092;
					z = 0.98195868731;
				}
			}
		}
		renderModelInfo = {
			color = {
				r = 0.301961005;
				g = 0.650979996;
			}
			emissiveColor = {
				r = 0.301961005;
				g = 0.650979996;
			}
		}
		particleSystem = "gameplay/bounce_pad_hell_01";
	}
}
}

Sentinel Pad

entity {
	entityDef world_spear_example_trigger_bounce_pad {
	inherit = "trigger/bounce_pad";
	class = "idTrigger_BouncePad";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		demonPlayerCanActivate = true;
		flags = {
			canBecomeDormant = true;
		}
		launchFX = "fx/bounce_pad/basic";
		spawnPosition = {
			x = 6.29999733;
			y = 179.149979;
			z = 11.1000032;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = "maps/game/dlc2/e5m1_spear/e5m1_spear/village_trigger_bounce_pad_17";
		}
		destination = "village_info_bounce_destination_17";
		launchSpeed = 18;
	}
}
}
entity {
	entityDef world_spear_example_func_emitter {
	inherit = "func/emitter";
	class = "idParticleEmitter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		fadeIn = 0;
		fadeOut = 0;
		spawnPosition = {
			x = 6.28446245;
			y = 179.249954;
			z = 9.95248413;
		}
		renderModelInfo = {
			color = {
				r = 0.301961005;
				g = 0.650979996;
			}
			emissiveColor = {
				r = 0.301961005;
				g = 0.650979996;
			}
		}
		particleSystem = "gameplay/bounce_pad_sentinel";
	}
}
}
entity {
	entityDef world_spear_example_info_bounce_destination {
	inherit = "info/bounce_destination";
	class = "idInfo_BounceDestination";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // these should be different from that of all the other entities in this example
			x = 17.3500271;
			y = 179.149948;
			z = 13.7500429;
		}
	}
}
}
entity {
	entityDef world_spear_example_hell_chunk_2_func_dynamic_906_799096957 {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = -18.8634968;
			y = 310.511993;
			z = -18.1249714;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[1] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[2] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/sentinel/sentinelSmallKit/sentinelSmallKit_jumpPad_b_1p5x1p5.lwo";
			emissiveColor = {
				r = 0;
				g = 0.647059023;
			}
			emissiveScale = 0.5;
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
			clipModelName = "art/maps/user/souders/mars_core/uac_jump_pad_bs.lwo";
		}
	}
}
}
entity {
	entityDef world_spear_example_chunk_1_func_dynamic {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = -18.8633633;
			y = 310.511993;
			z = -18.1230907;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[1] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[2] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/sentinel/sentinelSmallKit/sentinelSmallKit_jumpPad_b_glow_1p5x1p5.lwo";
			emissiveColor = {
				r = 0;
				g = 0.780391991;
			}
			emissiveScale = 1.5;
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
			clipModelName = "art/maps/user/souders/mars_core/uac_jump_pad_bs.lwo";
		}
	}
}
}
entity {
	entityDef world_spear_example_chunk_2_func_dynamic {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = -18.8635921;
			y = 310.511993;
			z = -18.1262989;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[1] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[2] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/sentinel/sentinelSmallKit/sentinelSmallKit_jumpPad_b_glow2_1p5x1p5.lwo";
			emissiveColor = {
				r = 0;
				g = 0.498039067;
			}
			emissiveScale = 1;
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
			clipModelName = "art/maps/user/souders/mars_core/uac_jump_pad_bs.lwo";
		}
	}
}
}
entity {
	entityDef world_spear_example_chunk_3_func_dynamic{
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = -18.8634968;
			y = 310.511993;
			z = -18.1249714;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[1] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[2] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/sentinel/sentinelSmallKit/sentinelSmallKit_jumpPad_b_glow3_1p5x1p5.lwo";
			emissiveColor = {
				r = 0;
				g = 0.882353008;
			}
			emissiveScale = 7;
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
			clipModelName = "art/maps/user/souders/mars_core/uac_jump_pad_bs.lwo";
		}
	}
}
}

Celestial Pad

A jump pad on the Urdak-themed BattleMode map, Celestial. In this case, multiple particle emitters are used, one visible to only the slayer, the other to only the demon team indicating that demon players cannot activate this. The cooldown of this jump pad is imposed by a logic entity, which is beyond the scope of this page.

entity {
	entityDef game_func_dynamic_3 {
	inherit = "func/dynamic";
	class = "idDynamicEntity";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 6.0999999;
			y = -14;
			z = -3.60000014;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = -0.999998212;
					y = -0.00189458777;
				}
				mat[1] = {
					x = 0.00189458777;
					y = -0.999998212;
				}
			}
		}
		renderModelInfo = {
			model = "art/kit/maykr/exterior/facade_pad_a_low.lwo";
			geoDecalMaterial = "art/tile/maykr/floats";
			geoDecalTint = {
				g = 0.756862938;
				b = 0.270588011;
			}
			scale = {
				x = 0.5;
				y = 0.5;
				z = 0.5;
			}
			colorScale = 6;
			emissiveColor = {
				r = 0.376471013;
				b = 0.878431022;
			}
			emissiveScale = 8;
		}
		clipModelInfo = {
			type = "CLIPMODEL_NONE";
			clipModelName = "art/kit/maykr/exterior/facade_pad_a_low.lwo";
		}
	}
}
}
entity {
	layers {
		"game/pvp/slayer_team"
	}
	entityDef game_gameplay_bounce_pad_uac_3 {
	inherit = "func/emitter";
	class = "idParticleEmitter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		fadeIn = 0;
		fadeOut = 0;
		spawnPosition = {
			x = 6.0999999;
			y = -13.6999979;
			z = -3.49999976;
		}
		spawnOrientation = {
			mat = {
				mat[1] = {
					y = 0.258819342;
					z = 0.965925753;
				}
				mat[2] = {
					y = -0.965925753;
					z = 0.258819342;
				}
			}
		}
		renderModelInfo = {
			color = {
				r = 0.376471013;
				b = 0.878431022;
			}
			emissiveColor = {
				r = 0.0784313753;
				g = 0.694117665;
			}
			emissiveScale = 3;
		}
		particleSystem = "gameplay/bounce_pad_uac";
	}
}
}
entity {
	layers {
		"game/pvp/demon_team"
	}
	entityDef game_gameplay_bounce_pad_uac_10 {
	inherit = "func/emitter";
	class = "idParticleEmitter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			canBecomeDormant = true;
		}
		dormancy = {
			delay = 5;
			distance = 78.029007;
		}
		fadeIn = 0;
		fadeOut = 0;
		spawnPosition = {
			x = 6.10000038;
			y = -13.6999998;
			z = -3.49999976;
		}
		spawnOrientation = {
			mat = {
				mat[1] = {
					y = 0.258819044;
					z = 0.965925813;
				}
				mat[2] = {
					y = -0.965925813;
					z = 0.258819044;
				}
			}
		}
		particleSystem = "gameplay/bounce_pad_uac_pvp_demon";
	}
}
}
entity {
	entityDef game_trigger_bounce_pad_3 {
	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 = {
			x = 6.0999999;
			y = -15.6999998;
			z = -3.20000005;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = "maps/game/pvp/pvp_bronco/pvp_bronco/game_trigger_bounce_pad_3";
		}
		triggerForAllClients = true;
		destination = "game_info_bounce_destination_2";
		failedTrajectoryBehavior = "FTB_TOWARDS_TARGET";
		launchSpeed = 25;
	}
}
}
entity {
	entityDef game_info_bounce_destination_2 {
	inherit = "info/bounce_destination";
	class = "idInfo_BounceDestination";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 5.99995661;
			y = -42.9999695;
			z = -2.79999995;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[1] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
				mat[2] = {
					x = 0.0;
					y = 0.0;
					z = 0.0;
				}
			}
		}
	}
}
}

idTrigger_Teleporter & idInfo_TeleportDestination

The idTrigger_Teleporter entity defines the location where the player can teleport from.

The idInfo_TeleportDestination entity defines the location and orientation where the idTrigger_Teleporter takes the player.

idTrigger_Teleporter

entity {
	entityDef invasion_tunnels_portal_from_1 {
	inherit = "trigger/teleporter";
	class = "idTrigger_Teleporter";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		clientCanActivate = true;
		fxExtraCondition = "FX_EXTRA_COND_MAX";
		sounds = {
			activated = "play_arena_teleporter_use";
		}
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			type = "CLIPMODEL_CYLINDER";
			size = { // find a fitting size based on the teleporter FX
				x = 1;
				y = 3;
				z = 2;
			}
			clipModelName = NULL;
		}
		dormancy = {
			playerDistance = 6;
			playerRearwardDistance = 6;
		}
		flags = {
			hide = false; // choose whether to initially hide the entity or not
		}
		playerCanActivate = true; // should a Slayer player activate
		demonPlayerCanActivate = false; // should a Demon player activate
		destination = "info_teleport_destination_1"; // destination entityDef
	}
}
}

idInfo_TeleportDestination

entity {
	entityDef info_teleport_destination_1 { // the idTrigger_Teleporter entity must contain the entityDef name as the destination.
	inherit = "info/teleport_destination";
	class = "idInfo_TeleportDestination";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
				}
				mat[1] = {
					x = 0;
					y = 1;
				}
			}
		}
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
	}
}
}

idTrigger_TakeDamage & idTarget_Melee

An either shootable or punchable trigger activated when it takes damage.

Assets for both of these types of entities will not be present in all levels. You may need to use assetsinfo to import a level that does, if you wish to use them in levels that originally did not have one.

Generic crosshair-shaped shootable trigger.

entity {
	entityDef example_shootable {
	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.528155386;
				y = 0.528155386;
				z = 0.528155386;
			}
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 3.5;
				y = 2;
				z = 3.5;
			}
			offset = {
				z = -0.899999976;
			}
		}
		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_";
		spawnPosition = {
			x = 69.040596;
			y = 231.581207;
			z = -79.0406036;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = 0;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 0;
				}
			}
		}
		targets = {
			num = 1;
			item[0] = "some_movable_gate";
		}
		dormancy = {
			allowDormancy = false;
			allowPvsDormancy = false;
		}
		keepAfterTriggerOnce = true;
	}
}
}

Cultist-themed shootable.

entity {
	entityDef example_cultist_base_shootable {
	inherit = "func/shootable";
	class = "idTrigger_TakeDamage";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		renderModelInfo = {
			model = "art/kit/cultist/prop/shootable_a.lwo";
			color = {
				r = 0.282353014;
				b = 0;
			}
			colorScale = 3;
			emissiveColor = {
				r = 0.282353014;
				b = 0;
			}
			emissiveScale = 2;
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			size = {
				x = 2.75;
				y = 1;
				z = 2.75;
			}
			offset = {
				z = -1.35000002;
			}
		}
		wait = 4;
		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_";
		spawnPosition = {
			y = 1;
			y = 146.950027;
			z = 6.25000095;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 0;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 0;
					y = 0;
					z = 0;
				}
				mat[2] = {
					x = 0;
					y = 0;
					z = 0;
				}
			}
		}
		targets = {
			num = 1;
			item[0] = "example_relay";
		}
		keepAfterTriggerOnce = true;
	}
}
}

Cultist punchable

entity {
	entityDef example_target_melee {
	inherit = "target/melee";
	class = "idTarget_Melee";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = true;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		takesDamageFromDamageTypes = "DAMAGETYPE_DASH";
		targetingDecl = "target_melee";
		spawnPosition = {
			x = 1;
		}
		renderModelInfo = {
			model = "art/kit/cultist/prop/punch_symbol.lwo";
			scale = {
				x = 0.984000;
				y = 0.984000;
				z = 0.984000;
			}
			emissiveScale = 6;
			customLodDistance1 = 50;
			customLodDistance2 = 100;
			customLodDistance3 = 125;
		}
		clipModelInfo = {
			type = "CLIPMODEL_BOX";
			contentsFilter = {
				playerClip = false;
			}
			size = {
				x = 2.20000005;
				y = 0.300000012;
				z = 2.20000005;
			}
			offset = {
				y = -0.300000012;
				z = -1.20000005;
			}
			clipModelName = "art/kit/gameplay/breakable_glow_a.lwo";
		}
		bindInfo = {
			bindParent = "game_punch_block_1847259846";
			bindOriented = true;
		}
		dormancy = {
			allowPvsDormancy = false;
		}
		removeOnDamage = false;
		fxDecl = "gameplay/pushable";
	}
}
}

idTrigger_Push

An entity that moves players inside of it.

 


entity {
    entityDef game_trigger_push_1 {
    class = "idTrigger_Push";
    expandInheritance = false;
    poolCount = 0;
    poolGranularity = 2;
    networkReplicated = false;
    disableAIPooling = false;
    edit = {
        removeFlag = "RMV_CHECKPOINT_ALLOW_MS";
        triggerOnce = false;
        pushForce = 8;
        clearExistingVelocity = true;
        constantVelocity = true;
        isActive = true;
        pushDirection = {
            x = 1;
            y = 0;
            z = 0;
        }
        renderModelInfo = {
            model = NULL;
        }
        clipModelInfo = {
            clipModelName = NULL;
            type = "CLIPMODEL_BOX";
            size = { // how large of an area the effect encompasses.
                x = 1;
                y = 1;
                z = 1;
            }
        }
        spawnPosition = {
            x = 88;
            y = 60;
            z = 18;
        }
        wait = 1;
        playerCanActivate = true; // whether or not to push a slayer.
        demonPlayerCanActivate = true;
        deadAiCanActivate = false;
    }
}
}

For a demonstration, a vanilla example can be seen by loading into a battlemode map as a demon and walking into a portal.

idTargetableProxyHandler & idTarget_SmartAIProxy

The idTargetableProxyHandler entity defines the render model and proxy list for Meathook Nodes.

The idTarget_SmartAIProxy entity defines the grapple position for Meathook Nodes.

Requires assets from either a TAG2 map, besides Dark Lord (e5m1_spear, e5m2_earth, e5m3_hell), or one of the last two Horde Mode maps (e6m2_earth_horde, e6m3_mcity_horde)

idTargetableProxyHandler

entity {
	entityDef meathook_node_handler_1 {
	inherit = "target/proxy_handler";
	class = "idTargetableProxyHandler";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		cooldownDuration = 5000; // defines the cooldown; scrubs set this to 0
		connectSound = "play_meat_hook_lock_in";
		ambientLoopSound = "play_meathook_sphere_amb_loop";
		oneSidedActiveModel = "art/kit/gameplay/meathook_traversal_a.lwo";
		oneSidedInactiveModel = "art/kit/gameplay/meathook_traversal_b.lwo";
		allSidedActiveModel = "art/kit/gameplay/meathook_traversal_c.lwo";
		allSidedInactiveModel = "art/kit/gameplay/meathook_traversal_d.lwo";
		oneSidedActiveFXModel = "art/kit/gameplay/meathook_traversal_a_rings.lwo";
		oneSidedInactiveFXModel = "art/kit/gameplay/meathook_traversal_b_rings.lwo";
		allSidedActiveFXModel = "art/kit/gameplay/meathook_traversal_c_rings.lwo";
		allSidedInactiveFXModel = "art/kit/gameplay/meathook_traversal_d_rings.lwo";
		renderModelInfo = {
			model = "art/kit/gameplay/meatHook_traversal_placeholder.lwo";
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		clipModelInfo = {
			clipModelName = "maps/prefabs/gameplay/meathook_target/target_proxy_handler_2";
		}
		proxyList = {
			num = 1;
			item[0] = {
				proxyEntity = "meathook_node_1"; // the idTarget_SmartAIProxy entity
				proxyTagName = "meathook_node_handler_1"; // this entity
			}
		}
		isOmnidirectional = true; // setting this to true makes the node appear on both sides
		spawnPosition = { // be sure to change the spawn position
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 1;
					y = 0;
					z = 0;
				}
			}
		}
	}
}
}

idTarget_SmartAIProxy

entity {
	entityDef meathook_node_1 {
	inherit = "target/ai_proxy_meathook";
	class = "idTarget_SmartAIProxy";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		flags = {
			noFlood = true;
		}
		targetingDecl = "target_aiproxy_meathook";
		distanceOverride = 25; // how far the Meathook connection is
		renderModelInfo = {
			scale = {
				x = 1;
				y = 1;
				z = 1;
			}
		}
		spawnPosition = { // make this identical to the idTargetableProxyHandler entity
			x = 1;
			y = 1;
			z = 1;
		}
		spawnOrientation = {
			mat = {
				mat[0] = {
					x = 1;
					y = 0;
					z = 0;
				}
				mat[1] = {
					x = 1;
					y = 0;
					z = 0;
				}
			}
		}
	}
}
}

idVolume_PlayerEnvOverride

An entity to overwrite the envSettings decl set by idWorldspawn when within the defined volume.

Usage

entity {
	entityDef volume_env_override_1 {
	inherit = "volume/env_override";
	class = "idVolume_PlayerEnvOverride";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		exitAfterTeleport = false;
		spawnPosition = {
			x = 1;
			y = 1;
			z = 1;
		}
		renderModelInfo = {
			model = NULL;
		}
		clipModelInfo = {
			clipModelName = "";
			type = "CLIPMODEL_CYLINDER";
            size = {
                x = 1;
                y = 1;
                z = 1;
            }
		}
		fadeInTime = 250;
		fadeOutTime = 250;
		startEnabled = false;
		allowToggleOnActivate = true;
		declEnv = "e3m1_slayer/e3m1_slayer_default_spectacle_water";
	}
}
}

 

idTarget_Codex

An entity to activate codex entries.

Usage

entity {
	entityDef example_codex_entity {
	class = "idTarget_Codex";
	expandInheritance = false;
	poolCount = 0;
	poolGranularity = 2;
	networkReplicated = false;
	disableAIPooling = false;
	edit = {
		spawnPosition = { // Spawn position does not really matter
			x = 1;
			y = 1;
			z = 1;
		}
		codexEntries = { // You can activate multiple codex entries here.
			num = 1;
			item[0] = "codex/hell/demon_imp"; // Codex to activate.
		}
	}
}
}