diff --git a/base.fgd b/base.fgd index 54d5ac0..1165708 100644 --- a/base.fgd +++ b/base.fgd @@ -2,11 +2,32 @@ // // Purpose: General game definition file (.fgd) // +// This is the Mapbase version of the base FGD. +// Much of this conent only works in Mapbase. +// //============================================================================= @mapsize(-16384, 16384) + + +@AutoVisGroup = "Entities" +[ + "Cubemaps" + [ + "env_cubemap" + ] + "Soundscapes" + [ + "env_soundscape" + "env_soundscape_proxy" + "env_soundscape_triggerable" + "trigger_soundscape" + ] +] + + //------------------------------------------------------------------------- // // Base Classes @@ -17,6 +38,8 @@ [ angles(angle) : "Pitch Yaw Roll (Y Z X)" : "0 0 0" : "This entity's orientation in the world. Pitch is rotation around the Y axis, " + "yaw is the rotation around the Z axis, roll is the rotation around the X axis." + + input SetLocalAngles(vector) : "Set this entity's angles." ] @BaseClass = Origin @@ -24,11 +47,26 @@ origin(origin) : "Origin (X Y Z)" : : "The position of this entity's center in the world. Rotating entities typically rotate around their origin." ] -@BaseClass = Studiomodel +// Designed to be used on both NPCs and entities deriving from Studiomodel. +@BaseClass = StudiomodelBase +[ + // Inputs + input Skin(integer) : "Changes the model skin to the specified number." + input SetModel(string) : "Sets this entity's model. Must include 'models/' as well as the extension." + input CreateSeparateRagdoll(void) : "Creates a separate serverside ragdoll at this entity's origin." + input CreateSeparateRagdollClient(void) : "Creates a separate clientside ragdoll at this entity's origin." + + // Outputs + output OnIgnite(void) : "Fires when this object catches fire." + output OnServerRagdoll(ehandle) : "Fires when this object becomes/creates a serverside ragdoll. Passes the ragdoll." +] + +@BaseClass base(StudiomodelBase) = Studiomodel [ model(studio) : "World Model" skin(integer) : "Skin" : 0 : "Some models have multiple versions of their textures, called skins. Set this to a number other than 0 to use that skin instead of the default." modelscale(float) : "Model Scale" : "1.0" : "A multiplier for the size of the model." + SetBodyGroup(integer) : "Bodygroup" : : "Sets this model's bodygroup (from 0 - n). You can do things like put headcrabs on zombie ragdolls by using '1' here, but it's probably best not to mess with it if you don't know what it is." disableshadows(choices) : "Disable Shadows" : 0 : "Used to disable dynamic shadows on this entity." = [ @@ -37,14 +75,11 @@ ] // Inputs - input Skin(integer) : "Changes the model skin to the specified number." - input DisableShadow(void) : "Turn shadow off." - input EnableShadow(void) : "Turn shadow on." + input DisableShadow(void) : "Turns shadow off." + input EnableShadow(void) : "Turns shadow on." input AlternativeSorting(bool) : "Used to attempt to fix sorting problems when rendering. True activates, false deactivates" input SetModelScale(string) : "Takes two values separated by a space. The first is the target model scale. The second value is the number of seconds the change in scale will be spread over." - - // Outputs - output OnIgnite(void) : "Fired when this object catches fire." + input SetBodyGroup(integer) : "Sets this model's body group (from 0 - n). You'd better know what you are doing!" ] @BaseClass = BasePlat @@ -61,28 +96,76 @@ // Inputs input Kill(void) : "Removes this entity from the world." input KillHierarchy(void) : "Removes this entity and all its children from the world." - input AddOutput(string) : "Adds an entity I/O connection to this entity. Format: ::::. Very dangerous, use with care." + input KillIfNotVisible(void) : "Removes this entity if it is not in the player's viewcone." + input KillWhenNotVisible(void) : "Removes this entity when it is not in the player's viewcone." + input AddOutput(string) : "Adds an entity I/O connection or a keyvalue to this entity. Format: ' ::::'. You could also use it on regular keyvalues: ' '. Very dangerous, use with care." + input ChangeVariable(string) : "Similar to AddOutput, except it changes an internal variable similar to logic_datadesc_accessor instead. Very dangerous, use with care." input FireUser1(void) : "Causes this entity's OnUser1 output to be fired." input FireUser2(void) : "Causes this entity's OnUser2 output to be fired." input FireUser3(void) : "Causes this entity's OnUser3 output to be fired." input FireUser4(void) : "Causes this entity's OnUser4 output to be fired." + + // Mapbase -- New User I + input PassUser1(string) : "Causes this entity's OutUser1 output to be fired. Can pass any parameter." + input PassUser2(string) : "Causes this entity's OutUser2 output to be fired. Can pass any parameter." + input PassUser3(string) : "Causes this entity's OutUser3 output to be fired. Can pass any parameter." + input PassUser4(string) : "Causes this entity's OutUser4 output to be fired. Can pass any parameter." + + input FireRandomUser(void) : "Fires OnUser1, OnUser2, OnUser3, or OnUser4 with a 25% chance of each." + input PassRandomUser(string) : "Fires OutUser1, OutUser2, OutUser3, or OutUser4 with a 25% chance of each. Can pass any parameter." + + // Mapbase -- BaseEntity I/O + input FireOutput(string) : "Fires the named output on this entity. Format: '::::' (OnDeath:hl3cardgame:gaben). Everything beyond the output name is optional." + input RemoveOutput(string) : "Removes all instances of the named output on this entity. Wildcards are supported, meaning you could just pass '*' to wipe all outputs from this entity." + input AcceptInput(string) : "Fires the named input on this entity. Format: '::::' (SetTarget:cheese). Everything beyond the input name is optional. Mind the fact this is arranged differently from FireOutput, having the parameter right after the input name." + input CancelPending(void) : "Cancels any events fired by this entity that are currently pending in the I/O event queue." + + input SetLocalOrigin(vector) : "Sets this entity's origin in the map." + input SetLocalVelocity(vector) : "Sets this entity's current velocity." + input SetLocalAngularVelocity(vector) : "Sets this entity's current angular velocity." + + input AddSpawnFlags(integer) : "Adds spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD." + input RemoveSpawnFlags(integer) : "Removes spawnflag(s) to this entity. Many spawnflags have their respective numbers suffixed in this FGD." + + input SetHealth(integer) : "Sets this entity's health." + input AddHealth(integer) : "Adds to this entity's health." + input RemoveHealth(integer) : "Removes from this entity's health." + + input SetMaxHealth(integer) : "Sets this entity's max health." + + input SetTarget(target_destination) : "Sets this entity's target. This is specific to certain entities, particularly logic entities that involve a target." + input SetOwnerEntity(target_destination) : "Sets this entity's owner entity. This has nothing to do with parenting and has more to do with collision and kill credits." + + input SetThinkNull(void) : "Sets this entity's general think function to null. Behavior varies from entity to entity.." + + input Use(void) : "More or less replicates the player interacting with an entity. (+USE)" + + output OnKilled(void) : "Fires when this entity is removed with the 'Kill' input." // Outputs - output OnUser1(void) : "Fired in response to FireUser1 input." - output OnUser2(void) : "Fired in response to FireUser2 input." - output OnUser3(void) : "Fired in response to FireUser3 input." - output OnUser4(void) : "Fired in response to FireUser4 input." + output OnUser1(void) : "Fires in response to FireUser1 input." + output OnUser2(void) : "Fires in response to FireUser2 input." + output OnUser3(void) : "Fires in response to FireUser3 input." + output OnUser4(void) : "Fires in response to FireUser4 input." + + // Mapbase -- New User O + output OutUser1(string) : "Fires in response to PassUser1 input. Can pass any parameter." + output OutUser2(string) : "Fires in response to PassUser2 input. Can pass any parameter." + output OutUser3(string) : "Fires in response to PassUser3 input. Can pass any parameter." + output OutUser4(string) : "Fires in response to PassUser4 input. Can pass any parameter." ] @BaseClass = Parentname [ - parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent." + parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent. Use the format '', '' to parent to a specific attachment point." // Inputs - input SetParent(string) : "Changes the entity's parent in the movement hierarchy." + input SetParent(target_destination) : "Changes the entity's parent in the movement hierarchy." input SetParentAttachment(string) : "Change this entity to attach to a specific attachment point on its parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment." input SetParentAttachmentMaintainOffset(string) : "Change this entity to attach to a specific attachment point on it's parent. Entities must be parented before being sent this input. The parameter passed in should be the name of the attachment. The entity will maintain it's position relative to the parent at the time it is attached." input ClearParent(void) : "Removes this entity from the the movement hierarchy, leaving it free to move independently." + + input FreeChildren(void) : "Unparents all entities parented to this entity in a movement hierarchy." ] @BaseClass = BaseBrush @@ -101,8 +184,8 @@ ] // Inputs - input Enable(void) : "Enable this entity." - input Disable(void) : "Disable this entity." + input Enable(void) : "Enables this entity." + input Disable(void) : "Disables this entity." ] @BaseClass = RenderFxChoices @@ -140,13 +223,13 @@ 1 : "Yes" ] - input DisableShadow(void) : "Turn shadow off." - input EnableShadow(void) : "Turn shadow on." + input DisableShadow(void) : "Turns shadow off." + input EnableShadow(void) : "Turns shadow on." ] @BaseClass base(RenderFxChoices) = RenderFields [ - rendermode(choices) : "Render Mode" : 0 : "Used to set a non-standard rendering mode on this entity. See also 'FX Amount' and 'FX Color'." = + rendermode(choices) : "Render Mode" : 0 : "Used to set a non-standard rendering mode on this entity. See also 'FX Amount' and 'FX Color'. Most of these are only used by sprites." = [ 0: "Normal" 1: "Color" @@ -160,6 +243,17 @@ ] renderamt(integer) : "FX Amount (0 - 255)" : 255 : "The FX amount is used by the selected Render Mode." rendercolor(color255) : "FX Color (R G B)" : "255 255 255" : "The FX color is used by the selected Render Mode." + + viewhideflags(choices) : "View ID nodraw" : 0 : "This keyvalue can control whether an entity should only draw on things like monitors or mirrors, or the opposite. The code for this is { m_iViewHideFlags & (1 << CurrentViewID()) } and supports any combination of view IDs." = + [ + 0 : "Draw normally" + 193 : "Hide in main view (player's eyes)" // VIEW_MAIN + VIEW_INTRO_CAMERA + VIEW_SHADOW_DEPTH_TEXTURE + 36 : "Hide in cameras" // VIEW_MONITOR + VIEW_INTRO_PLAYER + 24 : "Hide in mirrors/water" // VIEW_REFLECTION + VIEW_REFRACTION + 60 : "Hide in cameras and mirrors/water" // VIEW_MONITOR + VIEW_INTRO_PLAYER + VIEW_REFLECTION + VIEW_REFRACTION + 2 : "Hide in 3D skybox" // VIEW_3DSKY + 128 : "Hide projected texture shadows" // VIEW_SHADOW_DEPTH_TEXTURE + ] disablereceiveshadows(choices) : "Disable Receiving Shadows" : 0 = [ @@ -167,8 +261,21 @@ 1 : "Yes" ] - input Alpha(integer) : "Set the sprite's alpha (0 - 255)." - input Color(color255) : "Set the sprite's color (R G B)." + input Alpha(integer) : "Sets the sprite's alpha (0 - 255)." + input Color(color255) : "Sets the sprite's color (R G B)." + + input SetRenderMode(integer) : "Sets this entity's render mode." + input SetRenderFX(integer) : "Sets this entity's render FX." + input SetViewHideFlags(integer) : "Sets this entity's view ID nodraw flags (takes raw flag combination)." + input AddEffects(integer) : "Adds an entity effect." + input RemoveEffects(integer) : "Removes an entity effect." + input EnableDraw(void) : "Draws an entity if it is not drawn. Equivalent to RemoveEffects > 32." + input DisableDraw(void) : "Undraws an entity if it is drawn. Equivalent to AddEffects > 32." + input AddEFlags(integer) : "Adds an entity flag. NOTE: Entity flags are not the spawn flags you see in Hammer. Use AddSpawnFlags to add spawnflags." + input RemoveEFlags(integer) : "Removes an entity flag. NOTE: Entity flags are not the spawn flags you see in Hammer. Use RemoveSpawnFlags to remove spawnflags." + + // This is the closest I could get without putting this in Targetname, as most entities that use collision groups usually use render fields as well + input SetCollisionGroup(integer) : "Sets this entity's collision group." ] @@ -229,7 +336,7 @@ spawnflags(flags) = [ - 1 : "Set Initial State" : 0 + 1 : "[1] Set Initial State" : 0 ] // Inputs @@ -242,13 +349,13 @@ input GetCounter(void) : "Causes the Counter output to be fired, passing the current counter value for this global." // Outputs - output Counter(integer) : "Fired in response to the GetCounter input, passing the current value of the counter." + output OutCounter(integer) : "Fired in response to the GetCounter input, passing the current value of the counter." ] @BaseClass = DamageFilter -[ - damagefilter(target_destination) : "Damage Filter" : "" : "Name of the filter entity that controls which entities can damage us." - input SetDamageFilter(string) : "Sets the entity to use as damage filter. Pass in an empty string to clear the damage filter." +[ + damagefilter(filterclass) : "Damage Filter" : "" : "Name of the filter entity that controls which entities can damage us." + input SetDamageFilter(target_destination) : "Sets the entity to use as damage filter. Pass in an empty string to clear the damage filter." ] @BaseClass = ResponseContext @@ -300,12 +407,12 @@ [ spawnflags(flags) = [ - 1 : "Only Break on Trigger" : 0 - 2 : "Break on Touch" : 0 - 4 : "Break on Pressure" : 0 - 512: "Break immediately on Physics" : 0 - 1024: "Don't take physics damage" : 0 - 2048: "Don't allow bullet penetration": 0 + 1 : "[1] Only Break on Trigger" : 0 + 2 : "[2] Break on Touch" : 0 + 4 : "[4] Break on Pressure" : 0 + 512: "[512] Break immediately on Physics" : 0 + 1024: "[1024] Don't take physics damage" : 0 + 2048: "[2048] Don't allow bullet penetration": 0 ] propdata(choices) : "Prop Data" : 0 : "Set to the best approximation of the size and material of this entity's brushes. If set, it will override this entity's health and damage taken from various weapons. See the propdata.txt file in the scripts directory of your MOD to get a detailed list of what each entry specifies." = @@ -409,18 +516,42 @@ [ spawnflags(flags) = [ - 16 : "Break on Touch" : 0 - 32 : "Break on Pressure" : 0 + 16 : "[16] Break on Touch" : 0 + 32 : "[32] Break on Pressure" : 0 ] pressuredelay(float) : "Pressure Delay" : 0 : "Delay, in seconds, after 'broken' by pressure before breaking apart (allows for sound to play before breaking apart)." + + // Inputs + input SetInteraction(integer) : "Adds an interaction to this entity." + input RemoveInteraction(integer) : "Removes an interaction from this entity." ] -@BaseClass base(Targetname, Angles, RenderFields, DamageFilter, ResponseContext, Shadow) color(0 200 200) = BaseNPC +// Fields shared by both NPCs and players. +@BaseClass = CombatCharacterFields +[ + input HolsterWeapon(void) : "Forces the NPC/player to holster their weapon. Ignored if the NPC is scripting, if the NPC's weapon is already holstered, or if the NPC doesn't use weapons." + input HolsterAndDestroyWeapon(void) : "Identical to HolsterWeapon, except the weapon is destroyed once it has been holstered and concealed." + input UnholsterWeapon(string) : "Forces the NPC/player to draw their weapon. Ignored if the NPC is scripting, if the NPC's weapon is already drawn, or if the NPC doesn't use weapons. You can specify to unholster a specific weapon if they have it in their inventory." + input SwitchToWeapon(string) : "Causes the NPC/player to instantly switch to the specified weapon. If they do not have the specified weapon in their inventory, it will be created." + + input PickupWeaponInstant(target_destination) : "Instantly picks up the specified weapon. This refers to a weapon entity in the world, not a weapon classname." + input SetRelationship(target_destination) : "Changes this NPC/player's relationship with another entity or class. Format: " + input SetBloodColor(integer) : "Changes this entity's blood color based on the internal enum in shareddefs.h." + + output OnWeaponEquip(void) : "Fires when this NPC/player acquires a weapon through any means, including spawn equipment. Passes the weapon as the activator." + output OnWeaponDrop(void) : "Fires when this NPC/player drops a weapon, including when they die." + + output OnKilledNPC(ehandle) : "Fires when we kill a NPC. Passes the victim." + output OnKilledPlayer(ehandle) : "Fires when we kill a player. Passes the killed player." + output OnHealthChanged(float) : "Fired when the health of this entity changes, passing the new value of health as a percentage of max health, from [0..1]." +] + +@BaseClass base(Targetname, Parentname, Angles, RenderFields, DamageFilter, ResponseContext, Shadow, CombatCharacterFields, StudiomodelBase) color(0 200 200) = BaseNPC [ target(target_destination) : "Target Path Corner" : : "If set, the name of a path corner entity that this NPC will walk to, after spawning." - squadname(String) : "Squad Name" : : "NPCs that are in the same squad (i.e. have matching squad names) will share information about enemies, and will take turns attacking and covering each other." - hintgroup(String) : "Hint Group" : "" : "Hint groups are used by NPCs to restrict their hint-node searching to a subset of the map's hint nodes. Only hint nodes with matching hint group names will be considered by this NPC." - hintlimiting(choices) : "Hint Limit Nav" : 0 : "Limits NPC to using specified hint group for navigation requests, but does not limit local navigation." = + squadname(String) : "Squad Name" : : "NPCs that are in the same squad (i.e. have matching squad names) will share information about enemies, take turns attacking and covering each other, etc. Squads work differently from NPC to NPC and some don't support them by default." + hintgroup(String) : "Hint Group" : "" : "Hint groups are used by NPCs to restrict their hint searching to a subset of the map's hint nodes. Only hint nodes with matching hint group names will be considered by this NPC." + hintlimiting(choices) : "Hint Limit Nav" : 0 : "Limits NPC to using its specified hint group for navigation requests, but does not limit local navigation." = [ 0 : "No" 1 : "Yes" @@ -428,19 +559,19 @@ spawnflags(Flags) = [ - 1 : "Wait Till Seen" : 0 - 2 : "Gag (No IDLE sounds until angry)" : 0 - 4 : "Fall to ground (unchecked means *teleport* to ground)" : 1 - 8 : "Drop Healthkit" : 0 - 16 : "Efficient - Don't acquire enemies or avoid obstacles" : 0 - 128: "Wait For Script" : 0 - 256: "Long Visibility/Shoot" : 0 - 512: "Fade Corpse" : 1 - 1024: "Think outside PVS" : 0 - 2048: "Template NPC (used by npc_maker, will not spawn)" : 0 - 4096: "Do Alternate collision for this NPC (player avoidance)" : 0 - 8192: "Don't drop weapons" : 0 - 16384 : "Ignore player push (dont give way to player)" : 0 + 1 : "[1] Wait Till Seen (No sensing until player sees me)" : 0 + 2 : "[2] Gag (No IDLE sounds until angry)" : 0 + 4 : "[4] Fall to ground (unchecked means *teleport* to ground)" : 1 + 8 : "[8] Drop Healthkit (drops health vial on death)" : 0 + 16 : "[16] Efficient - Don't acquire enemies or avoid obstacles" : 0 + 128 : "[128] Wait For Script" : 0 + 256 : "[256] Long Visibility/Shoot" : 0 + 512 : "[512] Fade Corpse" : 1 + 1024 : "[1024] Think outside PVS (allows AI to stay active outside of combat and PVS)" : 0 + 2048 : "[2048] Template NPC (used by npc_maker, will not spawn)" : 0 + 4096 : "[4096] Do Alternate collision for this NPC (player avoidance)" : 0 + 8192 : "[8192] Don't drop weapons" : 0 + 16384 : "[16384] Ignore player push (dont give way to player)" : 0 ] //initialidle(string) : "Initial Idle Activity" :: "Activity the NPC should use to idle until becomes alert" @@ -461,7 +592,7 @@ 1 : "Yes" ] - enemyfilter(target_destination) : "Enemy Filter" : "" : "Filter by which to filter potential enemies" + enemyfilter(filterclass) : "Enemy Filter" : "" : "Filter by which to filter potential enemies" ignoreunseenenemies(choices) : "Ignore unseen enemies" : 0 : "Prefer visible enemies, regardless of distance or relationship priority" = [ @@ -470,6 +601,42 @@ ] physdamagescale(float) : "Physics Impact Damage Scale" : "1.0" : "Scales damage energy when this character is hit by a physics object. With a value of 0 the NPC will take no damage from physics." + + FriendlyFireOverride(choices) : "Friendly fire override" : 2 : "Overrides whether friendly fire is allowed on this NPC or not. 'Disabled' makes this NPC immune to damage from its allies. 'Enabled' makes this NPC vulnerable to damage from its allies, including players. 'Default' uses the NPC's settings and won't change anything." = + [ + 0 : "Disabled" + 1 : "Enabled" + 2 : "Default (No override)" + ] + + SetDynamicInteractions(choices) : "Dynamic interactions enabled" : 2 : "Episodic only. Enables or disables dynamic interactions on this NPC, if it has them. If set to Default, only dynamic interactions from the original episodes (Alyx, vorts, etc.) will be enabled. If set to Yes, dynamic interactions introduced with Mapbase will be enabled as well. If set to No, this NPC will never perform dynamic interactions." = + [ + 0 : "No" + 1 : "Yes" + 2 : "Default (No override)" + ] + + SetProficiencyOverride(choices) : "Proficiency override" : -1 : "Overrides this NPC's weapon proficiency." = + [ + -1 : "Default (No override)" + 0 : "Poor" + 1 : "Average" + 2 : "Good" + 3 : "Very Good" + 4 : "Perfect" + ] + + SetForceServerRagdoll(choices) : "Force server ragdoll" : 0 : "Forces this NPC to turn into a serverside prop_ragdoll instead of a clientside ragdoll when it dies." = + [ + 0 : "No" + 1 : "Yes" + ] + + SpawnWithStartScripting(choices) : "Spawn with StartScripting" : 0 : "Spawns the NPC in the StartScripting state." = + [ + 0 : "No" + 1 : "Yes" + ] // Outputs output OnDamaged(void) : "Fired when this NPC takes damage." @@ -489,14 +656,18 @@ output OnDenyCommanderUse(void) : "Fired when this NPC has refused to join the player's squad." output OnSleep(void) : "Fired when this NPC enters a sleep state." output OnWake(void) : "Fired when this NPC comes out of a sleep state." + output OnHolsterWeapon(string) : "Fired when the NPC holsters a weapon. Passes the weapon." + output OnUnholsterWeapon(string) : "Fired when the NPC unholsters a weapon. Passes the weapon." output OnForcedInteractionStarted(void) : "Fired when the NPC starts a forced interaction." output OnForcedInteractionAborted(void) : "Fired when the NPC aborts a forced interaction for some reason (target NPC died, couldn't be pathed to, etc)" - output OnForcedInteractionFinished(void) : "NPCs in actbusies can no longer perform dynamic interactions." + output OnForcedInteractionFinished(void) : "Fired when the NPC successfully finishes a forced interaction." + output OnItemPickup(void) : "Fires when a NPC picks up an item, e.g. a citizen picking up a health kit or a scripted item picked up in response to PickupItem." + output OnStateChange(integer) : "Fires when a NPC's state changes, outputting the new state. (1 = Idle, 2 = Alert, 3 = Combat...)" // Inputs - input SetRelationship(string) : "Changes this entity's relationship with another entity or class. Format: " - input SetEnemyFilter(string) : "Changes this NPC's enemy filter to the named filter." + input SetEnemyFilter(target_destination) : "Changes this NPC's enemy filter to the named filter." input SetHealth(integer) : "Set this NPC's health." + input SetHealthFraction(float) : "Sets the NPC's health as a fraction of its max health." input SetBodyGroup(integer) : "HACK: Sets this NPC's body group (from 0 - n). You'd better know what you are doing!" input physdamagescale(float) : "Sets the value that scales damage energy when this character is hit by a physics object. NOTE: 0 means this feature is disabled for backwards compatibility." input Ignite(void) : "Ignite, burst into flames" @@ -508,16 +679,35 @@ input StopScripting(void) : "Exit scripting state." input SetSquad(string) : "Set the name of this NPC's squad. It will be removed from any existing squad automatically. Leaving the parameter blank will remove the NPC from any existing squad." input Wake(void) : "Wakes up the NPC if it is sleeping." - input ForgetEntity(string) : "Clears out the NPC's knowledge of a named entity." + input ForgetEntity(target_destination) : "Clears out the NPC's knowledge of a named entity." input GagEnable(void) : "Turn on the NPC Gag flag. NPC won't speak outside of choreographed scenes." input GagDisable(void) : "Turn off the NPC Gag flag." input IgnoreDangerSounds(float) : "Ignore danger sounds for the specified number of seconds." - input HolsterWeapon(void) : "Force the NPC to holster their weapon. Ignored if the NPC is scripting, if the NPC's weapon is already holstered, or if the NPC doesn't use weapons." - input HolsterAndDestroyWeapon(void) : "Identical to HolsterWeapon, except the weapon is destroyed once it has been holstered and concealed." - input UnholsterWeapon(void) : "Force the NPC to draw their weapon. Ignored if the NPC is scripting, if the NPC's weapon is already drawn, or if the NPC doesn't use weapons." - input ForceInteractionWithNPC(string) : "Force the NPC to use a dynamic interaction with another NPC. Parameter format: " - input UpdateEnemyMemory(string) : "Update (or Create) this NPC's memory of an enemy and its location" + input ForceInteractionWithNPC(target_destination) : "Force the NPC to use a dynamic interaction with another NPC. Parameter format: " + input UpdateEnemyMemory(target_destination) : "Update (or Create) this NPC's memory of an enemy and its location" input BecomeRagdoll(void) : "This NPC will instantly become a ragdoll with ZERO force (just go limp). OnDeath, OnHalfHealth, etc. Outputs will **NOT** BE FIRED." + + input SetMoveType(integer) : "Sets this NPC's movetype." + input AddCapabilities(integer) : "Adds capabilities to this NPC." + input RemoveCapabilities(integer) : "Removes capabilities from this NPC." + input SetCondition(integer) : "Sets a condition. Can use a condition's string ID or its integer." + input RemoveCondition(integer) : "Removes a condition. Can use a condition's string ID or its integer." + + input GiveWeapon(string) : "Gives the NPC a weapon of the specified class name. They will drop their current weapon if it is not holstered." + input GiveWeaponHolstered(string) : "Puts the weapon of the specified class name in the NPC's inventory. If they do not have a weapon equipped, they will unholster it when given the 'UnholsterWeapon' input or when they see an enemy." + input DropWeapon(string) : "Forces the NPC to drop its current weapon in front of it. No animation will play." + input ChangeWeapon(string) : "Causes the NPC to change to the specified weapon. They will holster their current weapon and unholster the specified weapon, creating it if they don't already have it." + input PickupWeapon(target_destination) : "Causes the NPC to seek and pick up the specified weapon." + input PickupItem(target_destination) : "Causes the NPC to seek and pick up the specified item." + + input SetFriendlyFire(integer) : "Overrides our friendly fire. 0 = No friendly fire, 1 = Friendly fire enabled, 2 = Default (No override)" + input SetDynamicInteractions(integer) : "Sets whether we could use dynamic interactions. 0 = Disabled, 1 = Enabled, 2 = Default." + input SetProficiencyOverride(integer) : "Sets our weapon's proficiency. Use integer." + input SetForceServerRagdoll(bool) : "Sets whether we should be a serverside ragdoll when we die." + + input SetThinkNPC(float) : "Sets this entity's general think function to CallNPCThink. This is only necessary if it was disabled by SetThinkNull before." + + input SetHintGroup(string) : "Sets this NPC's hint group." ] @PointClass base(Targetname, Parentname, Angles) iconsprite("editor/info_target.vmt") = info_npc_spawn_destination : @@ -541,10 +731,10 @@ spawnflags(Flags) = [ // Only in npc__maker, npc_template_maker uses flag from template NPC - 16 : "Fade Corpse" : 0 - 32 : "Infinite Children" : 0 - 64 : "Do Not Drop" : 0 - 128 : "Don't Spawn While Visible" : 0 + 16 : "[16] Fade Corpse" : 0 + 32 : "[32] Infinite Children" : 0 + 64 : "[64] Do Not Drop" : 0 + 128 : "[128] Don't Spawn While Visible" : 0 ] MaxNPCCount(integer) : "Num. of NPCs" : 1 : "Number of NPCs that will spawn before this spawner is exhausted." @@ -573,8 +763,8 @@ [ spawnflags(Flags) = [ - 256 : "Always use radius spawn" : 0 - 512 : "Don't preload template models" : 0 + 256 : "[256] Always use radius spawn" : 0 + 512 : "[512] Don't preload template models" : 0 ] TemplateName(target_destination) : "Name of template NPC" : "" : "Template NPC that this maker should be creating clones of." @@ -601,7 +791,7 @@ input SpawnNPCInRadius(void) : "Spawn an NPC somewhere within the maker's radius." input SpawnNPCInLine(void) : "Spawn an NPC somewhere within a line behind the maker." input SpawnMultiple(integer) : "Spawn multiple NPCs (uses destination group, else radius)." - input ChangeDestinationGroup(string) : "Switch to a different set of Destination entities." + input ChangeDestinationGroup(target_destination) : "Switch to a different set of Destination entities." input SetMinimumSpawnDistance(integer) : "Set the minimum spawn distance from player to destination node." ] @@ -609,6 +799,12 @@ [ InitialSpeed(string) : "Initial Speed" : "0" : "Sets the helicopter's desired speed that it should try to reach as soon as it's spawned." target(target_destination) : "Target path_track" : : "(Optional) The name of a path_track entity that this NPC will fly to after spawning." + + AllowsAnyDamage(Choices) : "Allows any damage" : 0 : "Allows this NPC to take any amount of any type of damage, including bullet or melee damage. This is supposed to allow this NPC to be taken down in a previously impossible way and should be used with an actual damage filter." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs input MoveTopSpeed(void) : "The helicopter will immediately move at top speed toward its current goal, or in its current orientation if it's on top of its goal." @@ -629,11 +825,24 @@ [ // AWAIT INPUT will make the helicopter spawn disabled, awaiting // the "Activate" input to start acting. - 32 : "No Rotorwash" : 0 - 64 : "Await Input" : 0 + 32 : "[32] No Rotorwash" : 0 + 64 : "[64] Await Input" : 0 ] ] +@NPCClass base(BaseHelicopter, Studiomodel) studioprop() = npc_helicopter_custom : "A custom helicopter. It can't attack. Aww..." +[ + model(studio) : "World Model" : "models/combine_helicopter.mdl" : "Should probably still have the right attachments." + + MaxSpeed(float) : "Max Speed" : "1056" : "The helicopter's maximum speed." + //MaxFiringSpeed(float) : "Max Firing Speed" : "" : "The helicopter's maximum firing speed...you know, if it could DO THAT!" + + Acceleration(float) : "Acceleration" : "5.0" : "The helicopter's acceleration rate." + + RotorSound(sound) : "Rotor Sound" : "NPC_AttackHelicopter.Rotors" : "The helicopter's looping rotor sound. Supports Game Sounds and direct filenames." + RotorBlast(sound) : "Rotor Blast" : "NPC_AttackHelicopter.RotorBlast" : "The helicopter's rotor blast sound, which plays when the helicopter is pushing away physics objects under it. Supports Game Sounds and direct filenames." +] + @BaseClass color(0 255 0) = PlayerClass [] @BaseClass color(180 10 180) = Light @@ -680,7 +889,7 @@ [ spawnflags(flags) = [ - 65536: "Allow jump up" : 0 + 65536: "[65536] Allow jump up" : 0 ] hinttype(choices) : "Hint" : 0 = @@ -696,11 +905,11 @@ 100: "Crouch Cover Medium" 101: "Crouch Cover Low" - 102: "Waste Scanner Spawn" + //102: "Waste Scanner Spawn" 103: "Entrance / Exit Pinch" // 104: "Guard Point" 105: "Enemy Disadvantage Point" - 106: "Health Kit" + //106: "Health Kit" 400: "Antlion: Burrow Point" 401: "Antlion: Thumper Flee Point" @@ -708,8 +917,8 @@ 450: "Headcrab: Burrow Point" 451: "Headcrab: Exit Pod Point" - 500: "Roller: Patrol Point" - 501: "Roller: Cleanup Spot" + //500: "Roller: Patrol Point" + //501: "Roller: Cleanup Spot" 700: "Crow: Fly to point" 701: "Crow: Perch point" @@ -721,7 +930,7 @@ 904: "Strider node" 950: "Player Ally: Push away destination" - 951: "PLayer Ally: Fear withdrawal destination" + 951: "Player Ally: Fear withdrawal destination" 1000: "HL1 World: Machinery" 1001: "HL1 World: Blinking Light" @@ -749,9 +958,9 @@ 1 : "Yes" ] - Group(string) : "Hint Group" : "" : "If specified, gives the hint a specific group name. Useful for hint nodes that need to be logically grouped together. NPCs may also refuse to use hint nodes that don't match their hint group." + Group(string) : "Hint Group" : "" : "If specified, gives the hint a specific group name. NPCs may refuse to use hint nodes that don't match their hint group. Also useful for hints that need to be logically grouped together. Wildcards are supported." - TargetNode(node_dest) : "Target node" : -1 : "The node ID of an associated target node, if any." + TargetNode(node_dest) : "Target node" : -1 : "The node ID of an associated target node, if any. This can be used if the hint node acts as a path_corner, or for overriding jumping permission." IgnoreFacing(choices) : "Ignore Facing" : 2 : "Don't pay attention to the facing of the node. May not apply to a given hint type." = [ @@ -777,23 +986,26 @@ // Inputs input EnableHint(void) : "Enable hint." input DisableHint(void) : "Disable hint." + + input SetHintGroup(string) : "Sets this hint's group." ] @BaseClass base(Targetname, Parentname, Origin, EnableDisable, Global) = TriggerOnce [ spawnflags(flags) = [ - 1: "Clients" : 1 - 2: "NPCs" : 0 - 4: "Pushables": 0 - 8: "Physics Objects" : 0 - 16: "Only player ally NPCs" : 0 - 32: "Only clients in vehicles" : 0 - 64: "Everything (not including physics debris)" : 0 - 512: "Only clients *not* in vehicles" : 0 - 1024: "Physics debris" : 0 - 2048: "Only NPCs in vehicles (respects player ally flag)" : 0 - 4096: "Disallow Bots" : 0 + 1: "[1] Clients" : 1 + 2: "[2] NPCs" : 0 + 4: "[4] Pushables": 0 + 8: "[8] Physics Objects" : 0 + 8192: "[8192] Items (weapons, items, projectiles)" : 0 + 16: "[16] Only player ally NPCs" : 0 + 32: "[32] Only clients in vehicles" : 0 + 64: "[64] Everything (not including physics debris)" : 0 + 512: "[512] Only clients *not* in vehicles" : 0 + 1024: "[1024] Physics debris" : 0 + 2048: "[2048] Only NPCs in vehicles (respects player ally flag)" : 0 + 4096: "[4096] Disallow Bots" : 0 ] filtername(filterclass) : "Filter Name" : : "Filter to use to see if activator triggers me. See filter_activator_name for more explanation." @@ -807,6 +1019,13 @@ @BaseClass base(Targetname, Parentname, Origin, EnableDisable, TriggerOnce) = Trigger [ + // Inputs + input TouchTest(void) : "Tests if the trigger is being touched and fires an output based on whether the value is true or false." + + // Outputs + output OnTouching(void) : "Fired when the TestTouch input is true (something is touching the trigger.)" + output OnNotTouching(void) : "Fired when the TestTouch input is not true (nothing is touching the trigger.)" + output OnStartTouchAll(void) : "Fired when an entity starts touching this trigger, and no other entities are touching it. Only entities that passed this trigger's filters are considered." output OnEndTouch(void) : "Fired when an entity stops touching this trigger. Only entities that passed this trigger's filters will cause this output to fire." output OnEndTouchAll(void) : "Fires when an entity stops touching this trigger, and no other entities are touching it. Only entities that passed this trigger's filters are considered." @@ -909,9 +1128,16 @@ radius(string) : "Max Audible Distance" : "1250" : "Maximum distance at which this sound is audible." spawnflags(flags) = [ - 1: "Play everywhere" : 0 - 16:"Start Silent": 1 - 32:"Is NOT Looped": 1 + 1 : "[1] Play everywhere" : 0 + 16 : "[16] Start Silent": 1 + 32 : "[32] Is NOT Looped": 1 + ] + soundflags(choices) :"Sound Flags" : 0 : "Additional options for your sound." = + [ + 0: "None" + 128: "[128] Pause when game is paused" + 256: "[256] Ignore phonemes (no lip-syncing)" + 1024: "[1024] Don't overwrite existing sound on channel (untested)" ] SourceEntityName(target_destination) : "SourceEntityName" : : "If an entity is specified, sound will come from this named entity instead of the location of ambient_generic." @@ -923,12 +1149,14 @@ input Volume(integer) : "Sets the sound volume, expressed as a range from 0 to 10, where 10 is the loudest." input FadeIn(integer) : "Fades the sound up to full volume over a specified number of seconds, with a range from 0 to 100 seconds." input FadeOut(integer) : "Fades the sound to silence over a specified number of seconds, with a range from 0 to 100 seconds." + input SetSound(string) : "Sets the sound this ambient_generic should play." ] -@SolidClass base(Targetname) sphere(DisappearDist) = func_lod : +@SolidClass base(Targetname) sphere(DisappearDist) sphere(DisappearMaxDist) = func_lod : "Brush-built model that fades out over a specified distance. Useful for creating world detail that doesn't need to be drawn far away, for performance reasons." [ - DisappearDist(integer) : "Disappear Distance" : 2000 : "Distance at which these brushes should fade out." + DisappearDist(integer) : "Disappear Distance" : 2000 : "Distance at which these brushes should start to fade out." + DisappearMaxDist(integer) : "Maximum Disappear Distance" : 0 : "If specified, this would be distance at which these brushes should fade out completely. If 0, it will combine the regular disappear distance with the value stored in the 'lod_TransitionDist' convar, which is 800 by default." Solid(choices) : "Solid" : 0 : "Set whether or not these brushes should collide with other entities." = [ 0: "Solid" @@ -948,7 +1176,7 @@ spawnflags(flags) = [ - 1: "Allow Suit Zoom" : 0 + 1: "[1] Allow Suit Zoom" : 0 ] ] @@ -1017,8 +1245,8 @@ spawnflags(flags) = [ - 1: "Automatically find water surface (place entity above water)" : 0 - 2: "Diminish with depth (diminished completely in 10 feet of water)" : 1 + 1: "[1] Automatically find water surface (place entity above water)" : 0 + 2: "[2] Diminish with depth (diminished completely in 10 feet of water)" : 1 ] ] @@ -1034,7 +1262,7 @@ 1 : "Yes" ] - PSName(string) : "Particle System Entity" : "" : "Set this to the name of the env_smokestack that you want this light to affect." + PSName(target_destination) : "Particle System Entity" : "" : "Set this to the name of the env_smokestack that you want this light to affect." ] @PointClass base(Targetname, Angles) color(255 0 0) = env_sun : @@ -1098,7 +1326,7 @@ input SetMaxPiecesDX8(integer) : "Set the max gib count under DX8." ] -@PointClass base(Parentname, Targetname, Angles) color(255 128 0) studio("models/editor/axis_helper_thick.mdl") = env_lightglow : +@PointClass base(Parentname, Targetname, Angles, EnableDisable) color(255 128 0) studio("models/editor/axis_helper_thick.mdl") sphere(MinDist) sphere(MaxDist) = env_lightglow : "An entity that puts an additive glow in the world, mostly used over light sources." [ rendercolor(color255) : "Color (R G B)" : "255 255 255" @@ -1115,14 +1343,14 @@ spawnflags(flags) = [ - 1: "Visible only from front" : 0 + 1: "[1] Visible only from front" : 0 ] ] -@PointClass base(Parentname, Angles) color(255 255 255) = env_smokestack : +@PointClass base(Targetname, Parentname, Angles) color(255 255 255) = env_smokestack : "An entity that spits out a constant stream of smoke. See particlezoo.vmf for sample usage. You can place up to two env_particlelight entities near the smoke stack to add ambient light to its particles." [ - targetname(target_source) : "Name" : : "The name that other entities refer to this entity by." + //targetname(target_source) : "Name" : : "The name that other entities refer to this entity by." InitialState(choices) : "Initial State" : 0 = [ @@ -1162,9 +1390,11 @@ [ spawnflags(flags) = [ - 1: "Fade From" : 0 - 2: "Modulate" : 0 - 8: "Stay Out" : 0 + 1: "[1] Fade From" : 0 + 2: "[2] Modulate" : 0 + 4: "[4] Triggering player only" : 0 + 8: "[8] Stay Out" : 0 + 16: "[16] Don't purge other active fades" : 0 ] duration(string) : "Duration (seconds)" : "2" : "The time that it will take to fade the screen in or out." holdtime(string) : "Hold Fade (seconds)" : "0" : "The time to hold the faded in/out state." @@ -1213,12 +1443,14 @@ "An entity that controls the HDR tonemapping for the player. Think of it as a method of controlling the exposure of the player's eyes." [ // Inputs - input SetTonemapScale(void) : "Set the player's tonemap scale. It should be a value between 0 and 2, where 0 is the eyes fully closed, 1 is use the unchanged autoexposure (default), and 2 is the eye fully wide open." + input SetTonemapScale(float) : "Set the player's tonemap scale. It should be a value between 0 and 2, where 0 is the eyes fully closed, 1 is use the unchanged autoexposure (default), and 2 is the eye fully wide open." input BlendTonemapScale(string) : "Blend from the player's current tonemap scale to a new one. The parameter syntax is as follows: . For example: '0.5 10' would blend from the current tonemap scale to 0.5 over a period of 10 seconds. Tonemap scale is a value between 0 and 2, where 0 is the eyes fully closed, 1 is use the unchanged autoexposure (default), and 2 is the eye fully wide open." input UseDefaultAutoExposure(void) : "Revert to using the default tonemap auto exposure." + input UseDefaultBloomScale(void) : "Reverts to using the default bloom scale." input SetAutoExposureMin(float) : "Set a custom tonemap auto exposure minimum." input SetAutoExposureMax(float) : "Set a custom tonemap auto exposure maximum." input SetBloomScale(float) : "Set a custom bloom scale." + input SetBloomScaleRange(string) : "Sets a range for the bloom scale. First number is the maximum, second number is the minimum." input SetTonemapRate(float) : "Set the rate for autoexposure adjustment." ] @@ -1229,7 +1461,7 @@ [ spawnflags(flags) = [ - 1: "Fake Ladder" : 0 + 1: "[1] Fake Ladder" : 0 ] point0(vector) : "Start" : : "Ladder end point." @@ -1244,6 +1476,8 @@ // Inputs input Enable(void) : "Enable this ladder." input Disable(void) : "Disable this ladder." + input ForcePlayerOn(void) : "Forces the player onto this ladder, no matter what." + input CheckPlayerOn(void) : "Acts like the player just +USEd this ladder, taking distance and obstructions into account." output OnPlayerGotOnLadder(void) : "Fired whenever a player gets on this ladder." output OnPlayerGotOffLadder(void) : "Fired whenever a player gets off this ladder." @@ -1270,6 +1504,13 @@ target(target_destination) : "LadderName" : : "If multiple ladders are near multiple endpoints, use this to stop them from interfering with each other." ] +@SolidClass = func_ladder : + "Ladder. Players will be able to freely along this brush, as if it was a ladder. If you are using a model prop " + + "for the visual representation of the ladder in the map, apply the toolsinvisibleladder material to the " + + "func_ladder brush." +[ +] + @SolidClass base(Targetname) color(0 128 255) = func_areaportalwindow : "An entity that can be used to optimize the visibility in a map. If you seal off an area with them, when the viewer moves the specified distance away from them, they will go opaque and the parts inside the area will not be drawn. The 'target' brush model should enclose the func_areaportal window so no parts of it are culled by the window. If you use the optional foreground brush model, then it should enclose the 'target' brush model." [ @@ -1295,6 +1536,14 @@ "A brush entity that's considered solid to vphysics." [ filtername(filterclass) : "Filter Name" : : "Filter to use to see if activator collides with me. See filter_activator_name for more explanation. Allow means 'Allow to Block' for this entity." + + input SetFilter(target_destination) : "Sets the filter used by this entity." +] + +@SolidClass base(Targetname, Parentname, EnableDisable) = func_clip_client : + "A brush entity that's considered solid to clientside ragdolls and other clientside objects." +[ + input Toggle(void) : "Toggles this entity." ] @SolidClass base(Targetname, Parentname, Origin, RenderFields, Global, Inputfilter, EnableDisable, Shadow) = func_brush : @@ -1302,7 +1551,7 @@ [ spawnflags(flags) = [ - 2: "Ignore player +USE" : 1 + 2: "[2] Ignore player +USE" : 1 ] _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." @@ -1312,7 +1561,7 @@ 1 : "Never Solid" 2 : "Always Solid" ] - excludednpc(string) : "NPC class excluded from collisions" : "" : "If an NPC classname is specified here, NPCs of that type won't collide with these brushes. In Episodic, you may also specify an individual entity's name." + excludednpc(target_name_or_class) : "NPC class excluded from collisions" : "" : "If an NPC classname is specified here, NPCs of that type won't collide with these brushes. In Episodic, you may also specify an individual entity's name." invert_exclusion(choices) : "Invert NPC class exclusion" : 0 : "If set, then the excluded NPC class will consider this brush solid, and all other NPC classes will consider it non-solid." = [ 0 : "No" @@ -1331,7 +1580,7 @@ ] input Alpha(integer) : "Sets the brush's alpha value." - input SetExcluded( string ) : "Change the NPC class excluded from collisions" + input SetExcluded( target_destination ) : "Change the NPC class excluded from collisions" input SetInvert( integer ) : "Set the state of invversion for NPC class exclusion (0 or 1)" ] @@ -1409,7 +1658,7 @@ [ spawnflags(flags) = [ - 1: "Not Solid" : 0 + 1: "[1] Not Solid" : 0 ] model(studio) : "Model" skin(integer) : "Skin" : 0 : "Some models have multiple versions of their textures, called skins. Set this to a number other than 0 to use that skin instead of the default." @@ -1440,14 +1689,14 @@ spawnflags(Flags) = [ - 1 : "Repeatable" : 0 + 1 : "[1] Repeatable" : 0 ] // Inputs input Shoot(void) : "Force the gibshooter to create and shoot a gib." ] -@PointClass base(Targetname, Parentname, RenderFxChoices) size(-4 -4 -4, 4 4 4) line(255 255 255, targetname, LightningStart, targetname, LightningEnd) = env_beam : +@PointClass base(Targetname, RenderFxChoices) size(-4 -4 -4, 4 4 4) line(255 255 255, targetname, LightningStart, targetname, LightningEnd) = env_beam : "An entity that creates a visible beam between two points. The points can be attached to entities to make the beam move around." [ renderamt(integer) : "Brightness (1 - 255)" : 100 @@ -1470,16 +1719,16 @@ spawnflags(flags) = [ - 1 : "Start On" : 0 - 2 : "Toggle" : 0 - 4 : "Random Strike" : 0 - 8 : "Ring" : 0 - 16: "StartSparks" : 0 - 32: "EndSparks" : 0 - 64: "Decal End" : 0 - 128: "Shade Start" : 0 - 256: "Shade End" : 0 - 512: "Taper Out" : 0 + 1 : "[1] Start On" : 0 + 2 : "[2] Toggle" : 0 + 4 : "[4] Random Strike" : 0 + 8 : "[8] Ring (non-functional)" : 0 + 16: "[16] StartSparks" : 0 + 32: "[32] EndSparks" : 0 + 64: "[64] Decal End" : 0 + 128: "[128] Shade Start" : 0 + 256: "[256] Shade End" : 0 + 512: "[512] Taper Out" : 0 ] TouchType(choices) : "Touch Type (tripwire)" : 0 : "If you want the beam to fire an output when touched by entities, choose the entity type here." = @@ -1506,6 +1755,9 @@ input Amplitude(float) : "Set the amplitude of beam noise (0 - 255)." input ScrollSpeed(float) : "Set the scroll speed in units per second (0 - 100)." input Width(float) : "Set the width of the beam, in pixels." + input Noise(float) : "Set the noise of the beam, in pixels." + input SetStartEntity(target_destination) : "Sets the start entity." + input SetEndEntity(target_destination) : "Sets the end entity." // Outputs output OnTouchedByEntity(void) : "Fired when an entity touches the beam. Only fired if the entity passes the 'Touch Type' choice." @@ -1546,18 +1798,24 @@ spawnflags(Flags) = [ - 1 : "Start On" : 0 - 2 : "Toggle" : 0 + 1 : "[1] Start On" : 0 + 2 : "[2] Toggle" : 0 ] ] @PointClass base(Targetname, Parentname) size(-16 -16 -16, 16 16 16) = env_funnel : - "HL1 Legacy: Large Portal Funnel" + "The suck-in effect from the HL1 Resonance Cascade sequence." [ spawnflags(flags) = [ - 1: "Reverse" : 0 + 1 : "[1] Reverse (repel particles instead of suck in)" : 0 + 2 : "[2] Don't remove after use (allows repeat)" : 0 ] + + //Sprite(sprite) : "Sprite" : "sprites/flare6.vmt" : "The sprite to use for each particle." + + // Inputs + input Activate(void) : "Activates the effect." ] @PointClass base(Targetname, Parentname) size(-16 -16 -16, 16 16 16) color(255 0 0) = env_blood : @@ -1572,14 +1830,14 @@ amount(string) : "Amount of blood (damage to simulate)" : "100" spawnflags(flags) = [ - 1: "Random Direction" : 0 - 2: "Blood Stream" : 0 - 4: "On Player" : 0 - 8: "Spray decals" : 0 + 1: "[1] Random Direction" : 0 + 2: "[2] Blood Stream" : 0 + 4: "[4] On Player" : 0 + 8: "[8] Spray decals" : 0 // dvs: support these flags - //16: "Cloud" : 0 - //32: "Drops" : 0 - //64: "Gore" : 0 + //16: "[16] Cloud" : 0 + //32: "[32] Drops" : 0 + //64: "[64] Gore" : 0 ] // Inputs @@ -1594,7 +1852,7 @@ current(integer) : "Speed of Current" : 0 : "The speed of the water current in the volume, used to move the bubbles." spawnflags(Flags) = [ - 1 : "Start Off" : 0 + 1 : "[1] Start Off" : 0 ] // Inputs @@ -1606,7 +1864,7 @@ input SetCurrent(integer) : "Sets current speed in inches per second." ] -@PointClass base(Targetname, Parentname) iconsprite("editor/env_explosion.vmt") = env_explosion : +@PointClass base(Targetname, Parentname) iconsprite("editor/env_explosion.vmt") sphere(iRadiusOverride) = env_explosion : "An entity that creates an explosion at its origin." [ iMagnitude(Integer) : "Magnitude" : 100 : "The amount of damage done by the explosion." @@ -1621,27 +1879,28 @@ ] spawnflags(flags) = [ - 1: "No Damage" : 0 - 2: "Repeatable" : 0 - 4: "No Fireball" : 0 - 8: "No Smoke" : 0 - 16: "No Decal" : 0 - 32: "No Sparks" : 0 - 64: "No Sound" : 0 - 128: "Random Orientation" : 0 - 256: "No Fireball Smoke" : 0 - 512: "No particles" : 0 - 1024: "No DLights" : 0 - 2048: "Don't clamp Min" : 0 - 4096: "Don't clamp Max" : 0 - 8192: "Damage above surface only" : 0 - 16384: "Generic damage" : 0 + 1: "[1] No Damage" : 0 + 2: "[2] Repeatable" : 0 + 4: "[4] No Fireball" : 0 + 8: "[8] No Smoke" : 0 + 16: "[16] No Decal" : 0 + 32: "[32] No Sparks" : 0 + 64: "[64] No Sound" : 0 + 128: "[128] Random Orientation" : 0 + 256: "[256] No Fireball Smoke" : 0 + 512: "[512] No particles" : 0 + 1024: "[1024] No DLights" : 0 + 2048: "[2048] Don't clamp Min" : 0 + 4096: "[4096] Don't clamp Max" : 0 + 8192: "[8192] Damage above surface only" : 0 + 16384: "[16384] Generic damage" : 0 ] ignoredEntity(target_destination) : "Ignored Entity" : : "Do not harm or affect the named entity." // Inputs input Explode(void) : "Triggers the explosion." + input SetIgnoredEntity(target_destination) : "Sets the ignored entity." ] @PointClass base(Targetname, Parentname) color(200 50 0) size(-8 -8 -8, 8 8 8) = env_smoketrail : @@ -1674,36 +1933,37 @@ spawnflags(flags) = [ - 1 : "No Damage - Only Force" : 1 - 2 : "Push players" : 0 - 4 : "Push radially - not as a sphere" : 0 - 8 : "Test LOS before pushing" : 0 - 16 : "Disorient player if pushed" : 0 + 1 : "[1] No Damage - Only Force" : 1 + 2 : "[2] Push players" : 0 + 4 : "[4] Push radially - not as a sphere" : 0 + 8 : "[8] Test LOS before pushing" : 0 + 16 : "[16] Disorient player if pushed" : 0 ] inner_radius(float) : "Inner radius" : "0" : "If not zero, the LOS is calculated from a point intersecting this sphere." // Inputs - input Explode(void) : "Trigger the explosion." + input Explode(void) : "Triggers the explosion." + input ExplodeAndRemove(void) : "Triggers the explosion and then removes the entity." // Outputs output OnPushedPlayer(void) : "Fires when the player is pushed by the explosion." ] -@PointClass base(Targetname, Parentname) line(255 255 255, targetname, directionentityname) iconsprite("editor/env_physexplosion.vmt") = env_physimpact : +@PointClass base(Targetname, Parentname, Angles) line(255 255 255, targetname, directionentityname) iconsprite("editor/env_physexplosion.vmt") = env_physimpact : "An entity that will cause a physics impact on another entity." [ - angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0" : "Direction to project the impact." + //angles(string) : "Pitch Yaw Roll (Y Z X)" : "0 0 0" : "Direction to project the impact." magnitude(integer) : "Magnitude" : 100 : "Strength of the impact." distance(integer) : "Distance" : 0 : "How far to project the impact (if 0 uses a default value)." directionentityname(target_destination) : "Point to Entity" : "" : "If set, 'Distance' and Angle settings are ignored and the direction and distance to the target entity will be used." spawnflags(flags) = [ - 1: "No fall-off" : 0 - 2: "Infinite Length" : 0 - 4: "Ignore Mass" : 0 - 8: "Ignore Surface Normal When Applying Force" : 1 + 1: "[1] No fall-off" : 0 + 2: "[2] Infinite Length" : 0 + 4: "[4] Ignore Mass" : 0 + 8: "[8] Ignore Surface Normal When Applying Force" : 1 ] // Inputs @@ -1754,14 +2014,14 @@ ] spawnflags(flags) = [ - 1: "Infinite Duration" : 0 - 2: "Smokeless" : 0 - 4: "Start On" : 0 - 8: "Start Full" : 0 - 16: "Don't drop" : 0 - 32: "No glow" : 0 - 128: "Delete when out" : 0 - 256: "Visible from above" : 0 + 1: "[1] Infinite Duration" : 0 + 2: "[2] Smokeless" : 0 + 4: "[4] Start On" : 0 + 8: "[8] Start Full" : 0 + 16: "[16] Don't drop" : 0 + 32: "[32] No glow" : 0 + 128: "[128] Delete when out" : 0 + 256: "[256] Visible from above" : 0 ] ignitionpoint(float) : "Ignition Point" : 32 : "Amount of heat 'damage' to take before this flame should ignite." @@ -1782,7 +2042,7 @@ [ spawnflags(flags) = [ - 1: "Start On" : 0 + 1: "[1] Start On" : 0 ] fireradius(float) : "Radius" : 128 : "The radius around this entity in which to provide heat." @@ -1798,7 +2058,8 @@ [ spawnflags(flags) = [ - 1: "Start On" : 1 + 1: "[1] Start On" : 1 + 2: "[2] Accepts flares for heat" : 0 ] fireradius(float) : "Radius" : 128 : "The radius around this entity in which to detect heat changes." @@ -1842,7 +2103,7 @@ input StartFogTransition(void) : "Start fog transition." // Starting fog parameters for the level. These are selectable per LOD. - fogenable(choices) : "Fog Enable" : 0 = + fogenable(choices) : "Fog Enable" : 1 : "Determines whether this controller should be enabled by default." = [ 0 : "No" 1 : "Yes" @@ -1870,7 +2131,7 @@ spawnflags(flags) = [ - 1 : "Master (Has priority if multiple env_fog_controllers exist)" : 0 + 1 : "[1] Master (Has priority if multiple env_fog_controllers exist)" : 0 ] ] @@ -1879,7 +2140,7 @@ [ spawnflags(flags) = [ - 1 : "Emissive" : 0 + 1 : "[1] Emissive" : 0 ] InitialState(choices) : "Initial State" : 0 = @@ -1937,16 +2198,20 @@ ] spawnflags(flags) = [ - 1 : "Start On" : 0 - 16: "StartSparks" : 0 - 32: "EndSparks" : 0 - 64: "Decal End" : 0 + 1 : "[1] Start On" : 0 + 16: "[16] StartSparks" : 0 + 32: "[32] EndSparks" : 0 + 64: "[64] Decal End" : 0 ] // Inputs input TurnOn(void) : "Turns the laser on." input TurnOff(void) : "Turns the laser off." input Toggle(void) : "Toggles the laser between on and off." + input SetTarget(target_destination) : "Sets the laser's target." + + // Outputs + output OnTouchedByEntity(void) : "Fired when an entity touches the laser. Please note this fires for each frame the entity is touching, unlike env_beam." ] @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = env_message : @@ -1955,8 +2220,8 @@ message(string) : "Message Text" spawnflags(flags) = [ - 1: "Play Once" : 0 - 2: "All Clients" : 0 + 1: "[1] Play Once" : 0 + 2: "[2] All Clients" : 0 ] messagesound(sound) : "Sound Effect" : "" : "When the message is shown, this sound effect will be played, originating from this entity." messagevolume(string) : "Volume 0-10" : "10" : "Volume of the sound effect." @@ -1980,7 +2245,7 @@ [ spawnflags(flags) = [ - 1: "All Players" : 0 + 1: "[1] All Players" : 0 ] message(string) : "Hint Text (localized)" : "" : "This should be set to match the desired HUD hint entry in the hl2\resource\valve_english.txt." @@ -1988,6 +2253,7 @@ // Inputs input ShowHudHint(void) : "Shows the hint message." input HideHudHint(void) : "Hides the hint message." + input SetHudHint(string) : "Sets the hint message." ] @PointClass sphere() iconsprite("editor/env_shake.vmt") base(Targetname, Parentname) = env_shake : @@ -1995,13 +2261,13 @@ [ spawnflags(flags) = [ - 1: "GlobalShake" : 0 - //2: "Disrupt player control" : 0 // doesn't work - 4: "In Air" : 0 // shakes objects even if they are not onground - 8: "Physics" : 0 // shakes physically as well as the camera - 16: "Ropes" : 0 // shakes ropes too. - 32: "DON'T shake view (for shaking ropes or physics only)" : 0 - 64: "DON'T Rumble Controller" : 0 + 1: "[1] GlobalShake" : 0 + //2: "[2] Disrupt player control" : 0 // doesn't work + 4: "[4] In Air" : 0 // shakes objects even if they are not onground + 8: "[8] Physics" : 0 // shakes physically as well as the camera + 16: "[16] Ropes" : 0 // shakes ropes too. + 32: "[32] DON'T shake view (for shaking ropes or physics only)" : 0 + 64: "[64] DON'T Rumble Controller" : 0 ] amplitude(float) : "Amplitude (0-16)" : "4" : "The amount of noise in the screen shake. Should be a range between 0 and 16." @@ -2021,8 +2287,8 @@ [ spawnflags(flags) = [ - 1: "Punch all players (ignore radius)" : 0 - 2: "Punch players in the air" : 0 + 1: "[1] Punch all players (ignore radius)" : 0 + 2: "[2] Punch players in the air" : 0 ] punchangle(angle) : "Punch angles" : "0 0 90" : "The punch angles to apply." @@ -2067,8 +2333,8 @@ spawnflags(flags) = [ - 2 : "On fire" : 0 - 4 : "strict remove after lifetime" : 0 + 2 : "[2] On fire" : 0 + 4 : "[4] strict remove after lifetime" : 0 ] nogibshadows(choices) :"Disable Shadows on Gibs" : 0 = @@ -2106,13 +2372,57 @@ spawnflags(flags) = [ - 2 : "On fire" : 0 + 2 : "[2] On fire" : 0 ] rotortime(float) : "Time Under Rotor" : "1" : "The average time it has to be under the rotor before it shoots a gib." rotortimevariance(float) : "Time variance" : "0.3" : "The random amount to vary the time it has to be under the rotor before it shoots a gib." ] +@PointClass base(Targetname, Parentname, Angles) iconsprite("editor/env_shooter.vmt") = env_break_shooter : + "An entity that shoots func_breakable gibs." +[ + angles(angle) : "Gib Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the gibs will fly." + + model(choices) : "Model" : "WoodChunks" : "Thing(s) to shoot out. The choices only matter when the model type is Breakable Chunks. If a specific model is needed, enter its file path. If a point_template is needed, enter the point_template's name." = + [ + "WoodChunks" : "WoodChunks" + "GlassChunks" : "GlassChunks" + "MetalChunks" : "MetalChunks" + "ConcreteChunks" : "ConcreteChunks" + //"ComputerGibs" : "ComputerGibs" + //"CeilingTile" : "CeilingTile" + //"FleshGibs" : "FleshGibs" + //"WebGibs" : "WebGibs" + ] + + modeltype(choices) :"Model Type" : 0 : "The type of model to use." = + [ + 0: "Breakable Chunks" + 1: "Specific Model" + 2: "point_template" + ] + + SetCount(integer) : "Gib Count" : 15 : "Number of gibs to create." + SetDelay(float) : "Delay" : "0.0" : "Delay until gibs are shot." + SetGibSize(vector) : "Gib Size" : "0 0 0" : "The size of each gib." + SetGibSpeed(float) : "Gib Speed" : "200" : "The speed of each gib." + SetRandomization(integer) : "Randomization" : 100 : "The gib direction randomization factor." + SetLifetime(float) : "Lifetime" : "5" : "The lifetime of each gib." + SetGibFlags(integer) : "Gib Flags" : 0 : "The flags for each gib." + + // Inputs + input Shoot(void) : "Shoots the gibs." + + input SetCount(integer) : "Sets the number of gibs to create." + input SetDelay(float) : "Sets the delay until gibs are shot." + input SetGibSize(vector) : "Sets the size of each gib." + input SetGibSpeed(float) : "Sets the speed of each gib." + input SetRandomization(integer) : "Sets the gib direction randomization factor." + input SetLifetime(float) : "Sets the lifetime of each gib." + input SetGibFlags(integer) : "Sets the flags for each gib." +] + @PointClass base(Targetname,Parentname) sphere() iconsprite("editor/env_soundscape.vmt") = env_soundscape_proxy : "An entity that acts like a soundscape but gets all of its sound parameters from another env_soundscape entity." [ @@ -2177,10 +2487,10 @@ spawnflags(flags) = [ - 64: "Start ON" : 0 - 128: "Glow" : 0 - 256: "Silent" : 0 - 512: "Directional" : 0 + 64: "[64] Start ON" : 0 + 128: "[128] Glow" : 0 + 256: "[256] Silent" : 0 + 512: "[512] Directional" : 0 ] // Inputs @@ -2195,11 +2505,11 @@ [ framerate(string) : "Framerate" : "10.0" : "Rate at which the sprite should animate, if at all." model(sprite) : "Sprite Name" : "sprites/glow01.spr" : "Material of the sprite to be drawn." - scale(string) : "Scale" : "" : "Scale multiplier of the sprite." + scale(string) : "Scale" : "0.25" : "Scale multiplier of the sprite." spawnflags(flags) = [ - 1: "Start on" : 0 - 2: "Play Once" : 0 + 1: "[1] Start on" : 0 + 2: "[2] Play Once" : 0 ] GlowProxySize(float) : "Size of Glow Proxy Geometry." : "2.0" : "Size of the glow to be rendered for visibility testing. Must be larger than the distance from the sprite center to empty space. So if this glow is inside geometry (like a light bulb), set this value to be bigger than the bulb's radius. Any time a sphere of this radius would be visible (poking through any nearby geometry), the glow will be rendered." @@ -2224,8 +2534,8 @@ scale(string) : "Scale" : "" : "Scale multiplier of the sprite." spawnflags(flags) = [ - 1: "Start on" : 0 - 2: "Play Once" : 0 + 1: "[1] Start on" : 0 + 2: "[2] Play Once" : 0 ] GlowProxySize(float) : "Size of Glow Proxy Geometry." : "2.0" : "Size of the glow to be rendered for visibility testing. Must be larger than the distance from the sprite center to empty space. So if this glow is inside geometry (like a light bulb), set this value to be bigger than the bulb's radius. Any time a sphere of this radius would be visible (poking through any nearby geometry), the glow will be rendered." @@ -2243,8 +2553,8 @@ ] -@PointClass base(Targetname, Angles) iconsprite("editor/env_wind.vmt") = env_wind : - "An entity to control wind in the map. Partially functional." +@PointClass base(Targetname, Angles) iconsprite("editor/env_wind.vmt") sphere(windradius) sphere(windradiusinner) = env_wind : + "An entity to control wind in the map." [ //gustsound(sound) : "Gust Sound Filename" : "" : "Sound to be played to simulate the gusting wind." minwind(integer) : "Min normal speed" : 20 : "Minimum speed of the wind while idling." @@ -2260,13 +2570,27 @@ gustdirchange(integer) : "Max gust dir change (degrees)" : 20 : "Maximum amount that the wind's direction changes due to a gust." + windradius(float) : "Radius" : "-1" : "The radius in which this env_wind should simulate wind. -1 = everywhere" + windradiusinner(float) : "Inner Radius" : "0" : "The inner-radius for the env_wind, which enables varying intensities at certain distances. 0 = no inner radius" + output OnGustStart(void) : "Fired when a wind gust begins." output OnGustEnd(void) : "Fired when a wind gust ends." ] -@PointClass base(Angles) size(-16 -16 -16, 16 16 16) color(0 0 255) = sky_camera : +// We can't add a new sprite because the "scale" keyvalue makes it huge +@PointClass base(Targetname, Parentname, Angles) size(-16 -16 -16, 16 16 16) studio("models/editor/axis_helper.mdl") color(0 0 255) = sky_camera : "An entity used to control the 3D Skybox. Its origin is used to determine the 3D Skybox's position relative to the map. Place this entity, in the 3D Skybox, at the point where the origin of the map should be." [ + parentname(target_destination) : "Parent" : : "The name of the entity to move with. NOTE: sky_camera's position is normally only updated on spawn. Fire the ForceUpdate or StartUpdating inputs to update the sky_camera's position! You might also want to enable Use Angles for Sky." + + spawnflags(flags) = + [ + 1: "[1] Master (takes priority if multiple sky_cameras exist)" : 0 + 2: "[2] Continuously update position (for moving sky_cameras)" : 0 + ] + + skycolor(color255) : "Sky Color" : "255 255 255 0" : "Causes the skybox to use a solid color instead of the sky texture specified in worldspawn. Blended alpha is unfortunately not supported, but an alpha of '0' disables the effect and any alpha greater than that (e.g. 255) enables the effect." + scale(integer) : "3D Skybox scale" : 16 : "Scale of the skybox." fogenable(choices) : "Fog Enable" : 0 = [ @@ -2283,11 +2607,37 @@ 0 : "No" 1 : "Yes" ] + use_angles_for_sky(choices) : "Use Angles for Sky" : 0 : "Uses angles for actual skybox rotation, as if the world were tilted on this entity's axis." = + [ + 0 : "No" + 1 : "Yes" + ] fogcolor(color255) : "Primary Fog Color" : "255 255 255" fogcolor2(color255) : "Secondary Fog Color" : "255 255 255" fogdir(string) : "Primary Fog Dir" : "1 0 0" fogstart(string) : "Fog Start" : "500.0" : "Distance at which the skybox fog should start." fogend(string) : "Fog End" : "2000.0" : "Distance at which the skybox fog should be fully opaque." + fogmaxdensity(float) : "Fog Max Density [0..1]" : "1" + + farz(float) : "Far Z Clip Plane" : "0" : "Clips the sky." + + // Inputs + input ForceUpdate(void) : "Forces the 3D skybox to update with this sky_camera's position." + input StartUpdating(void) : "Begins per-tick skybox updating, which is needed if you want this sky_camera to move." + input StopUpdating(void) : "Ends per-tick skybox updating if it was enabled before." + + input ActivateSkybox(void) : "Makes this sky_camera the active skybox." + input DeactivateSkybox(void) : "Stops making this sky_camera the active skybox if it is currently the active skybox, which causes the sky to clear." + + input SetFogStartDist(float) : "Sets the fog start distance." + input SetFogEndDist(float) : "Sets the fog end distance." + input TurnOnFog(void) : "Turns the fog on." + input TurnOffFog(void) : "Turns the fog off." + input SetFogColor(color255) : "Sets the primary fog color." + input SetFogColorSecondary(color255) : "Sets the secondary fog color." + input SetFarZ(integer): "Sets the far clip plane distance." + + input SetSkyColor(color255) : "Sets the sky color." ] @BaseClass base(Targetname, ResponseContext) = BaseSpeaker @@ -2296,16 +2646,22 @@ delaymax(string) : "Max Delay Between Announcements" : "135" spawnflags(flags) = [ - 1: "Start Silent" : 0 - 2: "Play Everywhere" : 0 + 1: "[1] Start Silent" : 0 + 2: "[2] Play Everywhere" : 0 ] rulescript(string) : "Context rule script" : "" : "Script file containing rules for playing appropriate sounds." concept(string) : "Concept name" : "" : "High level concept name used as primary search key." + + target(target_destination) : "Speaker entity" : "" : "All responses, including scenes, will be redirected to this entity if specified. Use the SetTarget input to change mid-game." // Inputs input TurnOn(void) : "Turn on the random announcements." input TurnOff(void) : "Turn off the random announcements." input Toggle(void) : "Toggle the random announcements off and on." + input SetTarget(target_destination) : "Sets the speaker target." + + // Outputs + output OnSpeak(string) : "Fires each time this env_speaker speaks, passing its selected response (scene path, sound name, etc.) as the parameter." ] //------------------------------------------------------------------------- @@ -2326,10 +2682,11 @@ ] @PointClass base(Targetname) iconsprite("editor/game_end.vmt") = game_end : - "An entity that ends a multiplayer game." + "An entity that ends a game." [ - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." input EndGame(void) : "End the multiplayer game." + input EndGameSP(string) : "End the SP game. String could be a game-specific context." ] @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = game_player_equip : @@ -2337,9 +2694,9 @@ [ spawnflags(flags) = [ - 1: "Use Only" : 0 + 1: "[1] Use Only" : 0 ] - master(string) : "Team Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + //master(target_destination) : "Team Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." ] @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = game_player_team : @@ -2347,12 +2704,12 @@ [ spawnflags(flags) = [ - 1 : "Remove On fire" : 0 - 2 : "Kill Player" : 0 - 4 : "Gib Player" : 0 + 1 : "[1] Remove On fire" : 0 + 2 : "[2] Kill Player" : 0 + 4 : "[4] Gib Player" : 0 ] - target(string) : "game_team_master to use" - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + target(target_destination) : "game_team_master to use" + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." ] @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = game_score : @@ -2360,12 +2717,12 @@ [ spawnflags(flags) = [ - 1: "Allow Negative" : 0 - 2: "Team Points" : 0 + 1: "[1] Allow Negative" : 0 + 2: "[2] Team Points" : 0 ] points(integer) : "Points to add (+/-)" : 1 - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." // Inputs input ApplyScore(void) : "Add score to player." @@ -2376,10 +2733,10 @@ [ spawnflags(flags) = [ - 1: "All Players" : 0 + 1: "[1] All Players" : 0 ] - message(string) : "Message Text" : "" : "Message to display onscreen." + message(string) : "Message Text" : "" : "Message to display onscreen. Use '/n' for newlines." x(string) : "X (0 - 1.0 = left to right) (-1 centers)" : "-1" : "Horizontal position on the player's screens to draw the text. The value should be between 0 and 1, where 0 is the far left of the screen and 1 is the far right. -1 centers the text." y(string) : "Y (0 - 1.0 = top to bottom) (-1 centers)" : "-1" : "Vertical position on the player's screens to draw the text. The value should be between 0 and 1, where 0 is the top of the screen and 1 is the bottom. -1 centers the text." effect(Choices) : "Text Effect" : 0 = @@ -2401,10 +2758,35 @@ 3 : "Channel 3" 4 : "Channel 4" ] - master(string) : "Master" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + master(target_destination) : "Master" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." // Inputs input Display(void) : "Display the message text." + input SetText(string) : "Sets the message text." +] + +@PointClass base(Targetname) iconsprite("editor/game_metadata.vmt") = game_metadata : + "An entity that provides metadata for things like Discord." +[ + spawnflags(flags) = + [ + 1: "[1] Update Steam" : 1 + 2: "[2] Update Discord" : 1 + ] + + SetRPCState(string) : "RPC State" : "" : "Sets the 'state' that should be reported to rich presence clients like Discord. Shows the mod's name from gameinfo.txt by default." + SetRPCDetails(string) : "RPC Details" : "" : "Sets the 'details' that should be reported to rich presence clients like Discord. Shows the map being played by default." + + input SetRPCState(string) : "Sets the RPC state." + input SetRPCDetails(string) : "Sets the RPC details." +] + +@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = skybox_swapper : + "An entity that swaps skybox textures." +[ + SkyboxName(string) : "Sky Name" : "" : "The name of the sky texture to change to." + + input Trigger(void) : "Causes the current sky texture to change to the one specified in this entity." ] @PointClass base(Parentname, Angles) size(-2 -2 -2, 2 2 2) = point_enable_motion_fixup : @@ -2412,12 +2794,12 @@ [ ] -@PointClass base(Targetname, Parentname) size(-8 -8 -8, 8 8 8) = point_message : +@PointClass base(Targetname, Parentname) size(-8 -8 -8, 8 8 8) sphere(radius) = point_message : "An entity that displays a text message in the world, at its origin." [ spawnflags(flags) = [ - 1: "Start Disabled" : 0 + 1: "[1] Start Disabled" : 0 ] message(string) : "Entity Message" @@ -2431,6 +2813,13 @@ // Inputs input Enable(void) : "Start displaying the message text, if the player is within the message radius." input Disable(void) : "Stop displaying the message text." + input SetMessage(string) : "Sets the message's text." +] + +@PointClass base(point_message) size(-8 -8 -8, 8 8 8) sphere(radius) = point_message_localized : + "A variant of point_message that allows localized text and newline to be used." +[ + message(string) : "Localized Entity Message" : : "The message displayed by this entity. Use '/n' for newline." ] @PointClass base(Targetname, Parentname, RenderFields, Angles, DXLevelChoice) studio("models/editor/cone_helper.mdl") = point_spotlight : @@ -2439,8 +2828,8 @@ [ spawnflags(Flags) = [ - 1 : "Start On" : 1 - 2 : "No Dynamic Light" : 1 + 1 : "[1] Start On" : 1 + 2 : "[2] No Dynamic Light" : 1 ] spotlightlength(integer) : "Spotlight Length" : 500 : "Length of the spotlight beam." @@ -2461,7 +2850,7 @@ @PointClass base(Targetname, Parentname) size(-8 -8 -8, 8 8 8) = point_tesla : "An entity that creates tesla lightning arcs around its origin." [ - m_SourceEntityName(string) : "Source Entity" : "" : "If specified, tesla lightning will originate from the specified entity. Otherwise, they originate from this entity." + m_SourceEntityName(target_destination) : "Source Entity" : "" : "If specified, tesla lightning will originate from the specified entity. Otherwise, they originate from this entity." m_SoundName(string) : "Sound Name" : "DoSpark" : "Sound to be played whenever lightning is created." texture(sprite) : "Sprite Name" : "sprites/physbeam.vmt" : "Material to use for the tesla lightning beams." @@ -2488,14 +2877,14 @@ input DoSpark(void) : "Force a single arc." ] -@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = point_clientcommand : +@PointClass base(Targetname) iconsprite("editor/clientcommand.vmt") = point_clientcommand : "An entity that issues commands to the client console, as if it was typed in by the player (if activator is a player, or the local player in single player)." [ // Inputs input Command(string) : "Command to execute." ] -@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = point_servercommand : +@PointClass base(Targetname) iconsprite("editor/servercommand.vmt") = point_servercommand : "An entity that issues commands to the server console." [ // Inputs @@ -2514,15 +2903,15 @@ input Save(void) : "Saves bonus map data." ] -@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = game_ui : +@PointClass base(Targetname) iconsprite("editor/game_ui.vmt") = game_ui : "An entity used to override player input when the player is looking at it." [ spawnflags(flags) = [ - 32 : "Freeze Player" : 1 - 64 : "Hide Weapon" : 1 - 128 : "+Use Deactivates" : 1 - 256 : "Jump Deactivates" : 1 + 32 : "[32] Freeze Player" : 1 + 64 : "[64] Hide Weapon" : 1 + 128 : "[128] +Use Deactivates" : 1 + 256 : "[256] Jump Deactivates" : 1 ] FieldOfView(float) : "FieldOfView" : "-1.0" : "The amount of tolerance in the view checking when determining whether the player's input is still under control. 1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions. If the player isn't within the tolerance, the player regains control." @@ -2530,16 +2919,27 @@ // Inputs input Deactivate(void) : "Return Player Control." input Activate(string) : "Take Player Control." + + input GetButtons(void) : "Fires OutButtons with the player's current button flags." // Outputs output PlayerOn(void) : "Fired whenever this entity starts controlling the player's input." output PlayerOff(void) : "Fired whenever this entity stops controlling the player's input." + + output OutButtons(integer) : "Outputs the player's current button flags when they are requested by the GetButtons input." + output PressedMoveLeft(void) : "Fired whenever the player presses the moveleft key." output PressedMoveRight(void) : "Fired whenever the player presses the moveright key." output PressedForward(void) : "Fired whenever the player presses the forward key." output PressedBack(void) : "Fired whenever the player presses the backward key." output PressedAttack(void) : "Fired whenever the player presses the attack key." output PressedAttack2(void) : "Fired whenever the player presses the secondary attack key." + output PressedAttack3(void) : "Fired whenever the player presses the tertiary attack key." + output PressedUse(void) : "Fired whenever the player presses the use key." + output PressedJump(void) : "Fired whenever the player presses the jump key." + output PressedCrouch(void) : "Fired whenever the player presses the crouch key." + output PressedSprint(void) : "Fired whenever the player presses the sprint key." + output PressedReload(void) : "Fired whenever the player presses the reload key." output UnpressedMoveLeft(void) : "Fired whenever the player releases the moveleft key." output UnpressedMoveRight(void) : "Fired whenever the player releases the moveright key." @@ -2547,6 +2947,12 @@ output UnpressedBack(void) : "Fired whenever the player releases the backward key." output UnpressedAttack(void) : "Fired whenever the player releases the attack key." output UnpressedAttack2(void) : "Fired whenever the player releases the secondary attack key." + output UnpressedAttack3(void) : "Fired whenever the player releases the tertiary attack key." + output UnpressedUse(void) : "Fired whenever the player releases the use key." + output UnpressedJump(void) : "Fired whenever the player releases the jump key." + output UnpressedCrouch(void) : "Fired whenever the player releases the crouch key." + output UnpressedSprint(void) : "Fired whenever the player releases the sprint key." + output UnpressedReload(void) : "Fired whenever the player releases the reload key." output XAxis(string) : "An output that fires whenever the X axis of the player's input changes. i.e. -1 when the player has moveleft key down, 1 when the player has moveright key down, and 0 if neither." output YAxis(string) : "An output that fires whenever the Y axis of the player's input changes. i.e. -1 when the player has backward key down, 1 when the player has forward key down, and 0 if neither." @@ -2554,6 +2960,61 @@ output Attack2Axis(string) : "An output that fires whenever the state of the player's secondary attack key changes. i.e. 1 when the player has the secondary attack key down, 0 otherwise." ] +@PointClass base(Targetname) = point_entity_finder : + "An entity that will find an entity and pass it along as the !Caller with the OutEntity output. Requires using !Caller as the parameter on the input." +[ + filtername(filterclass) : "Filter Name" : : "Filter to use to narrow set of findable entities. See filter_activator_name for more explanation." + referencename(target_destination) : "Reference Entity" : "" : "Name of the entity to use when evaluating criteria. For example, when using 'Nearest', this is the entity that distance will be measured from. If left blank will use the point_entity_finder." + + Method(choices) : "Search Method" : "0" = + [ + 0 : "Nearest" + 1 : "Farthest" + 2 : "Random" + ] + + // Inputs + input FindEntity(void) : "Find an entity that meets the specified criteria. Will fire OutEntity if found and pass the entity as !Caller." + + // Outputs + output OnFoundEntity(void) : "Fired when FindEntity is input and an entity was found. Passes the found entity as !Caller." +] + +@PointClass base(Targetname) sphere(radius) = point_advanced_finder : + "An enhanced entity finder that finds entities that pass a filter and fires OnFoundEntity for each of them." +[ + // + // This used to have an actual limit, 64, but now we've moved to a different model that has no limit. + // "The number of entities that can be found by this finder. 0 = No limit. Cannot exceed 64 when firing mode isn't none or output delay is greater than zero." + // + SearchFilter(filterclass) : "Filter Name" : : "The filter to use that finds what entit(ies) we're looking for." + SearchPoint(target_destination) : "Search Point" : "" : "This is the entity in which distance and radius is measured from. Leave blank to use the finder itself." + radius(float) : "Radius" : "0.0" : "The radius in which entities can be found. Leave 0 for infinite." + NumberOfEntities(integer) : "Max Results" : 0 : "The number of entities that can be found by this finder. 0 = No limit." + OutputDelay(float) : "Output Delay" : "0.0" : "OnFoundEntity fires once for each entity every X number of seconds. Deleted/killed/removed entities will not be skipped and a chain cannot be canceled, even if the finder is removed. Look into a more manual alternative if you do not want these side effects. Leave 0 for no delay." + + Method(choices) : "Search Method" : "0" = + [ + -1 : "None (first in ent list)" + 0 : "Nearest" + 1 : "Farthest" + 2 : "Random" + ] + + // Inputs + input BeginSearch(void) : "Begins finding entities with all of the current options." + input SetSearchFilter(target_destination) : "Sets the search filter." + input SetSearchPoint(target_destination) : "Sets the search point." + input SetRadius(float) : "Sets the search radius." + input SetMaxResults(integer) : "Sets the maximum entities that could be found by this finder." + input SetOutputDelay(float) : "Sets the delay in between outputs." + input SetFiringMethod(integer) : "Sets the search method." + + // Outputs + output OnFoundEntity(ehandle) : "Fires for each entity found, passing it as the parameter and the activator." + output OnSearchFailed(void) : "Fired when this finder couldn't find any entities." +] + @SolidClass base(Targetname, Parentname) = game_zone_player : "An entity used to count the number of players within a zone." [ @@ -2591,7 +3052,7 @@ // A decal to be applied to a prop or the world using specified origin and orientation and radius, uses an orientation angle and a radius to determine // ray to cast for projection -@PointClass base(Angles,Targetname) decal() studio("models/editor/axis_helper_thick.mdl") = info_projecteddecal : +@PointClass base(Angles, Targetname, Parentname) decal() studio("models/editor/axis_helper_thick.mdl") = info_projecteddecal : "An entity that projects a decal onto the world (or props). If the decal has no target name, it will immediately apply itself when "+ "the level is loaded. If it has a name specified, it won't apply until it receives the 'Activate' input." [ @@ -2617,7 +3078,7 @@ [ spawnflags(flags) = [ - 1: "Master (Has priority if multiple info_player_starts exist)" : 0 + 1: "[1] Master (Has priority if multiple info_player_starts exist)" : 0 ] ] @@ -2668,11 +3129,16 @@ [ ] -@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = info_null : +@PointClass base(Targetname) color(255 255 255) size(-8 -8 -8, 8 8 8) = info_null : "An entity that's immediately removed on spawning. Useful as a spotlight target." [ ] +@SolidClass base(Targetname) color(255 255 255) = func_null : + "A brush entity that's immediately removed upon spawning. Useful for invisible brush lights." +[ +] + @PointClass base(Targetname, Parentname, Angles) iconsprite("editor/info_target.vmt") = info_target : "An entity that does nothing. Very useful as a positioning entity for other entities to refer to (i.e. the endpoint of an env_beam)" [ @@ -2770,8 +3236,9 @@ cpoint7_parent(integer) : "Control Point 7's Parent" : 0 : "If set and nonzero, control point 7 of the effect will use this point for its parent." // Inputs - input Start(void) : "Tell the particle system to start emitting." - input Stop(void) : "Tell the particle system to stop emitting." + input Start(void) : "Tells the particle system to start emitting." + input Stop(void) : "Tells the particle system to stop emitting." + input DestroyImmediately(void) : "Makes the particle system stop emitting and remove its existing particles immediately." ] @@ -2782,13 +3249,17 @@ axis(vecline) : "Bar Magnet Axis" radius(float) : "Effective Radius" : "512" : "Radius in which ragdolls are affected around this entity's origin." force(float) : "Force" : "5000" : "Magnetic force to apply to ragdolls within the radius. Expressed as kilograms per inch per second. So a force of 1000 will add 10 inches/second to a 100kg man. It will add 100 inches per second to a 10kg headcrab." + BoneTarget(string) : "Bone Target" : : "Targets a specific bone to apply the force to. (e.g. ValveBiped.Bip01_R_Foot)" - target(string) : "Entity to affect" : "" : "If specified, the phys_ragdollmagnet will only affect the target entity." + target(target_destination) : "Entity to affect" : "" : "If specified, the phys_ragdollmagnet will only affect the target entity." spawnflags( Flags ) = [ 2 : "Bar Magnet (use axis helper)" : 0 ] + + // Outputs + output OnUsed(vector) : "Fires when this magnet is used by a ragdoll. Passes the ragdoll's original force + the force this magnet has applied." ] @PointClass base(Targetname) iconsprite("editor/info_lighting.vmt") = info_lighting : @@ -2816,16 +3287,16 @@ [ spawnflags(Flags) = [ - 1 : "Force human permission" : 0 - 2 : "Force small_centered permission" : 0 - 4 : "Force wide_human permission" : 0 - 8 : "Force tiny permissiont" : 0 - 16 : "Force wide_short permission" : 0 - 32 : "Force medium permission" : 0 - 64 : "Force tiny_centered permission" : 0 - 128 : "Force large permission" : 0 - 256 : "Force large_centered permission" : 0 - 512 : "Keep editor position" : 0 + 1 : "[1] Force human permission" : 0 + 2 : "[2] Force small_centered permission" : 0 + 4 : "[4] Force wide_human permission" : 0 + 8 : "[8] Force tiny permissiont" : 0 + 16 : "[16] Force wide_short permission" : 0 + 32 : "[32] Force medium permission" : 0 + 64 : "[64] Force tiny_centered permission" : 0 + 128 : "[128] Force large permission" : 0 + 256 : "[256] Force large_centered permission" : 0 + 512 : "[512] Keep editor position" : 0 ] ] @@ -2862,13 +3333,14 @@ nodeheight(integer) : "NodeHeight" : 0 ] -@PointClass base(Targetname, Angles, HintNode) studio("models/editor/node_hint.mdl") color(255 255 255) = info_hint : +@PointClass base(Targetname, Angles, HintNode) studio("models/editor/node_hint.mdl") color(255 255 255) frustum(nodeFOV,-1,128,250 250 250,-1) = info_hint : "A hint that is not used for navigation. They don't go into the nodegraph, nor do they fall to the ground. Use these to provide " + "some spatial context for NPCs, such as 'look here if you can't find the player' or 'throw rocks at this spot'." [ ] -@PointClass base(Targetname) color(220 180 0) size(-8 -8 -8, 8 8 8) line(255 255 255, nodeid, StartNode, nodeid, EndNode) = info_node_link : +// size(-8 -8 -8, 8 8 8) +@PointClass base(Targetname) color(220 180 0) iconsprite("editor/info_node_link.vmt") line(255 255 255, nodeid, StartNode, nodeid, EndNode) = info_node_link : "A dynamic connection between two navigation nodes. You specify the node IDs of the start and end nodes, and then you can use entity I/O " + "to turn on and off the connection. This could be used to create or destroy a connection in the nodegraph because of some event in your map " + "(a bridge being created/destroyed, etc)." @@ -2888,8 +3360,8 @@ 4 : "Fly" 8 : "Climb" ] - AllowUse(string) : "Allow Pass When Off" : : "Entity or class to allow passage even when node is off" - InvertAllow(choices) : "Invert exclusion rules" : 0 : "Allowed entity is the only entity NOT allowed when this is set to 'yes'" = + AllowUse(target_name_or_class) : "Allow Pass When Off" : : "Entity or class to allow passage even when node is off" + InvertAllow(choices) : "Invert exclusion rules" : 0 : "Allowed entity is the only entity NOT allowed when this is set to 'yes'. The link must still be disabled for exclusion rules to apply." = [ 0 : "No" 1 : "Yes" @@ -2914,6 +3386,48 @@ input TurnOff(void) : "Turn the link off." ] +@PointClass base(info_node_link) color(220 180 0) iconsprite("editor/info_node_link.vmt") line(255 255 255, nodeid, StartNode, nodeid, EndNode) = info_node_link_oneway : + "A variant of info_node_link that only works from one direction. " + + "Navigation requests from the start node to the end node will always pass, but requests from the end node to the start node will not be allowed. " + + "If the link is disabled, the link will work from neither direction. Exclusion rules still apply and excluded NPCs will be able to cross from the opposite direction." +[ + StartNode(node_dest) : "Start node ID" : : "The node ID that will always be allowed to pass." + EndNode(node_dest) : "End node ID" : : "The node ID that will not be allowed to pass unless the NPC follows exclusion rules." + + AllowUse(target_name_or_class) : "Allow Pass When Off" : : "Entity or class to allow passage regardless of which node they're coming from." + + Usage(choices) : "Usage" : 0 : "Causes the link to use slightly different behavior." = + [ + 0 : "Enabled is one-way, disabled turns off link" + 1 : "Enabled is two-way, disabled is one-way" + ] +] + +@PointClass base(info_node_link) color(220 180 0) iconsprite("editor/info_node_link.vmt") line(255 255 255, nodeid, StartNode, nodeid, EndNode) = info_node_link_filtered : + "A variant of info_node_link that uses an entity filter. " + + "Only entities that pass the specified filter can use this link. While disabled, the filter is disregarded and filtering is handed to the regular exclusion rules." +[ + damagefilter(filterclass) : "Link Filter" : "" : "Name of the filter entity that controls which entities can use this link." + + Usage(choices) : "Usage" : 0 : "Causes the link to use slightly different behavior." = + [ + 0 : "Enabled uses filter, disabled hands to exclusion rules" + 1 : "Enabled is free-to-use, disabled uses filter" + ] + + // Inputs + input SetLinkFilter(target_destination) : "Sets the link's filter." +] + +@PointClass base(info_node_link) color(220 180 0) iconsprite("editor/info_node_link.vmt") line(255 255 255, nodeid, StartNode, nodeid, EndNode) = info_node_link_logic : + "A variant of info_node_link that fires outputs when a NPC tries to use it. " + + "Otherwise functions identically to a regular info_node_link." +[ + // Outputs + output OnUsageAccepted(void) : "Fires when a NPC uses this link after meeting all of the requirements." + output OnUsageAcceptedWhileDisabled(void) : "Fires when a NPC that meets all of the requirements tries to use this link, but it's disabled." +] + @PointClass wirebox(mins, maxs) base(Targetname) = info_node_link_controller : "An entity that controls all connections between nodes that intersect the controller's volume. "+ "This allows for mass enabling/disabling of all node connections through a volume." @@ -2933,7 +3447,7 @@ 1 : "Yes" ] - AllowUse(string) : "Allow Pass When Off" : : "Entity or class to allow passage even when node is off" + AllowUse(target_name_or_class) : "Allow Pass When Off" : : "Entity or class to allow passage even when node is off" InvertAllow(choices) : "Invert exclusion rules" : 0 : "Allowed entity is the only entity NOT allowed when this is set to 'yes'" = [ 0 : "No" @@ -2943,10 +3457,18 @@ // Inputs input TurnOn(void) : "Turn the link on." input TurnOff(void) : "Turn the link off." - input SetAllowed(string) : "Change the allowed pass when off" + input SetAllowed(target_destination) : "Change the allowed pass when off" input SetInvert(integer) : "Change the invert exclusion rule" ] +@PointClass wirebox(mins, maxs) base(info_node_link_controller) = info_template_link_controller : + "An entity that controls all connections between nodes that intersect the controller's volume. "+ + "This allows for mass enabling/disabling of all node connections through a volume.\n\n"+ + "NOTE: Due to the way this works, using info_node_link_logic may cause several identical instances of the outputs to be fired instead of one. One way to remedy this by passing your action through a relay with fast refire disabled." +[ + ReferenceTemplate(target_destination) : "Reference Template" : : "The point_template whose first template would be used as a reference for all of this controller's links. The first template MUST be info_node_link or an entity derived from it, like info_node_link_filtered." +] + @PointClass sphere(radius) base(Targetname, Parentname) = info_radial_link_controller : "This entity automatically severs node connections that pass through its radius. If it moves, it will restore those connections." [ @@ -2968,7 +3490,7 @@ "An invisible omnidirectional lightsource." [ target(target_destination) : "Entity To Point At" : : "The name of an entity in the map that the spotlight will point at. This will override the spotlight's angles." - spawnflags(Flags) = [ 1 : "Initially dark" : 0 ] + spawnflags(Flags) = [ 1 : "[1] Initially dark" : 0 ] _distance(integer) : "Maximum Distance" : 0 : "This is the distance that light is allowed to cast, in inches." ] @@ -3026,10 +3548,10 @@ ] spawnflags(Flags) = [ - 1 : "Do not light world (better perf)" : 0 - 2 : "Do not light models" : 0 - 4 : "Add Displacement Alpha" : 0 - 8 : "Subtract Displacement Alpha" : 0 + 1 : "[1] Do not light world (better perf)" : 0 + 2 : "[2] Do not light models" : 0 + 4 : "[4] Add Displacement Alpha" : 0 + 8 : "[8] Subtract Displacement Alpha" : 0 ] // Inputs @@ -3051,10 +3573,10 @@ // Shadow control //------------------------------------------------------------------------- -@PointClass base(Targetname) iconsprite("editor/shadow_control.vmt") = shadow_control : +@PointClass base(Targetname, Angles) iconsprite("editor/shadow_control.vmt") = shadow_control : "An entity to control the shadows in the map." [ - angles(string) : "Pitch Yaw Roll (Y Z X)" : "80 30 0" : "This is the shadow direction. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, and roll is the rotation around the X axis." + angles(angle) : "Pitch Yaw Roll (Y Z X)" : "80 30 0" : "This is the shadow direction. Pitch is rotation around the Y axis, yaw is the rotation around the Z axis, and roll is the rotation around the X axis." color(color255) : "Shadow Color" : "128 128 128" : "This is the color of the shadows." distance(float) : "Maximum Distance" : 75 : "This is the maximum distance the shadow is allowed to cast, in inches." @@ -3063,13 +3585,20 @@ 0 : "No" 1 : "Yes" ] + + enableshadowsfromlocallights(Choices) : "Enable Local Light Shadows" : 0 : "Enables RTT dynamic shadow angles, which cause shadows to face away from the nearest light source instead of always using this entity's direction. This is a new feature and the original Half-Life 2 had no dynamic shadow angles. Leave this off if they are not desired." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs input color(color255) : "Set the shadow color." input direction(vector) : "Set the shadow direction." input SetDistance(float) : "Set the maximum shadow cast distance." input SetAngles(string) : "Set the shadow direction." - input SetShadowsDisabled(integer) : "Set shadows disabled state." + input SetShadowsDisabled(bool) : "Set shadows disabled state." + input SetShadowsFromLocalLightsEnabled(bool) : "Toggles shadows from local lights." ] @@ -3137,13 +3666,15 @@ ] ] -@SolidClass base(Targetname, Parentname, Origin, RenderFields) = func_movelinear : +@SolidClass base(Targetname, Origin, RenderFields) = func_movelinear : "A brush entity that moves linearly along a given distance, in a given direction." [ + parentname(target_destination) : "Parent" : : "The name of this entity's parent in the movement hierarchy. Entities with parents move with their parent. Please don't use any parenting inputs with func_movelinear." + movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the brushes will move, when told to." spawnflags(flags) = [ - 8 : "Not Solid" : 0 + 8 : "[8] Not Solid" : 0 ] startposition(float) : "Start Position" : 0 : "Position of brush when spawned. The range is a value between 0.0 and 1.0, where 0 is the starting position and 1 is the starting position + (move direction * move distance)." @@ -3194,16 +3725,16 @@ volume(integer) : "Volume (10 = loudest)" : 10 : "The volume of the rotation sound." spawnflags(flags) = [ - 1 : "Start ON" : 0 - 2 : "Reverse Direction" : 0 - 4 : "X Axis" : 0 - 8 : "Y Axis" : 0 - 16: "Acc/Dcc" : 0 - 32: "Fan Pain" : 0 - 64: "Not Solid" : 0 - 128: "Small Sound Radius" : 0 - 256: "Medium Sound Radius" : 0 - 512: "Large Sound Radius" : 1 + 1 : "[1] Start ON" : 0 + 2 : "[2] Reverse Direction" : 0 + 4 : "[4] X Axis" : 0 + 8 : "[8] Y Axis" : 0 + 16: "[16] Acc/Dcc" : 0 + 32: "[32] Fan Pain" : 0 + 64: "[64] Not Solid" : 0 + 128: "[128] Small Sound Radius" : 0 + 256: "[256] Medium Sound Radius" : 0 + 512: "[512] Large Sound Radius" : 1 ] _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." dmg(integer) : "Blocking Damage" : 0 : "Damage done to any entity that blocks the rotation, per frame." @@ -3230,9 +3761,9 @@ [ spawnflags(Flags) = [ - 1: "Toggle" : 1 - 64: "X Axis" : 0 - 128: "Y Axis" : 0 + 1: "[1] Toggle" : 1 + 64: "[64] X Axis" : 0 + 128: "[128] Y Axis" : 0 ] noise1(sound) : "Movement Sound" : : "The sound to play when the brush moves." noise2(sound) : "Stop Sound" : : "The sound to play when the brush stops moving." @@ -3269,11 +3800,11 @@ // Ropes and Cables // //------------------------------------------------------------------------- -@BaseClass base(DXLevelChoice) = RopeKeyFrame +@BaseClass base(DXLevelChoice, DamageFilter) = RopeKeyFrame [ spawnflags(Flags) = [ - 1 : "Auto Resize" : 0 + 1 : "[1] Auto Resize" : 0 ] Slack(integer) : "Slack" : 25 : "How much extra length the rope has (by default it has the length between its two endpoints in the editor)." @@ -3321,8 +3852,11 @@ input SetScrollSpeed(float) : "Set the speed at which the texture scrolls." input SetForce(string) : "Apply a force instantaneously to the rope. The parameter should be a vector containing the force to be applied (X Y Z)." input Break(void) : "Break the rope, if it's marked to do so." + + // Outputs + output OnBreak(void) : "Fires when this rope breaks." - NoWind(choices) : "Disable Wind" : 0 : "When set to Yes, the rope will no longer act as though it's being affected by wind." = + UseWind(choices) : "Use Wind" : 0 : "When set to Yes, the rope will act as though it's being affected by wind." = [ 0 : "No" 1 : "Yes" @@ -3375,9 +3909,9 @@ [ movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "Specifies the direction of motion to move when the button is used." speed(integer) : "Speed" : 5 : "The speed that the button moves, in inches per second." - health(integer) : "Health (Obsolete)" : 0 : "Legacy method of specifying whether or not the button can be shot to activate it. Use the 'Damage Activates' spawnflag instead." + //health(integer) : "Health (Obsolete)" : 0 : "Legacy method of specifying whether or not the button can be shot to activate it. Use the 'Damage Activates' spawnflag instead." lip(integer) : "Lip" : 0 : "The amount, in inches, of the button to leave sticking out of the wall it recedes into when pressed. Negative values make the button recede even further into the wall." - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be pressed." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be pressed." sounds(choices) : "Sounds" : 0 = [ 0: "None (Silent)" @@ -3428,13 +3962,13 @@ wait(integer) : "Delay Before Reset (-1 stay)" : 3 : "Amount of time, in seconds, after the button has been pressed before it returns to the starting position. Once it has returned, it can be used again. If the value is set to -1, the button never returns." spawnflags(flags) = [ - 1: "Don't move" : 0 - 32: "Toggle" : 0 - 256: "Touch Activates": 0 - 512: "Damage Activates": 0 - 1024: "Use Activates" : 1 - 2048: "Starts locked" : 0 - 4096: "Sparks" : 0 + 1: "[1] Don't move" : 0 + 32: "[32] Toggle" : 0 + 256: "[256] Touch Activates": 0 + 512: "[512] Damage Activates": 0 + 1024: "[1024] Use Activates" : 1 + 2048: "[2048] Starts locked" : 0 + 4096: "[4096] Sparks" : 0 ] locked_sound(choices) : "Locked Sound" : 0 : "Sound played when the player tries to use the button, and fails because it's locked." = [ @@ -3445,7 +3979,7 @@ 11: "Buzz Off" 12: "Latch Locked" ] - unlocked_sound(choices) : "Unlocked Sound" : 0 : "Sound played when the button is unlocked." = + unlocked_sound(choices) : "Unlocked Sound" : 0 : "Sound to play when the button is door...Err--Sound played when the button is unlocked." = [ 0: "None" 1: "Big zap & Warmup" @@ -3491,9 +4025,9 @@ @SolidClass base(Targetname, Parentname, Origin, Angles, Global, Button, EnableDisable) = func_rot_button : "A brush entity that's designed to be used for a rotating player-useable button. When used by the player, it rotates to a pressed position." [ - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be used." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be used." speed(integer) : "Speed" : 50 : "The speed that the button rotates, in degrees per second." - health(integer) : "Health (Obsolete)" : 0 : "Legacy method of specifying whether or not the button can be shot to activate it. Use the 'Damage Activates' spawnflag instead." + //health(integer) : "Health (Obsolete)" : 0 : "Legacy method of specifying whether or not the button can be shot to activate it. Use the 'Damage Activates' spawnflag instead." sounds(choices) : "Sounds" : 21 = [ 0: "None (Silent)" @@ -3508,15 +4042,15 @@ // TODO: move spawnflags into Button base class? spawnflags(flags) = [ - 1 : "Not solid" : 0 - 2 : "Reverse Dir" : 0 - 32: "Toggle" : 0 - 64: "X Axis" : 0 - 128: "Y Axis" : 0 - 256: "Touch Activates": 0 - 512: "Damage Activates": 0 - 1024: "Use Activates": 0 - 2048: "Starts locked" : 0 + 1 : "[1] Not solid" : 0 + 2 : "[2] Reverse Dir" : 0 + 32: "[32] Toggle" : 0 + 64: "[64] X Axis" : 0 + 128: "[128] Y Axis" : 0 + 256: "[256] Touch Activates": 0 + 512: "[512] Damage Activates": 0 + 1024: "[1024] Use Activates": 0 + 2048: "[2048] Starts locked" : 0 ] _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." ] @@ -3525,7 +4059,7 @@ "A brush entity that's designed to be used for rotating wheels, where the player can rotate them to arbitrary positions before stopping." [ speed(integer) : "Speed (deg/sec)" : 50 : "The amount, in degrees, that the wheel turns per second." - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be used." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be used." sounds(choices) : "Sounds" : 0 = [ 0: "None" @@ -3548,13 +4082,13 @@ returnspeed(integer) : "Auto-return speed" : 0 : "If the 'Toggle' spawnflag is not set, the speed at which the wheel auto-returns when left alone, in degrees per second." spawnflags(flags) = [ - 1: "Not Solid" : 1 - 32: "Toggle (Disable Auto Return)" : 1 - 64: "X Axis" : 0 - 128: "Y Axis" : 0 - 1024: "Use Activates" : 1 - 2048: "Starts locked" : 0 - 8192: "Jiggle when used while locked" : 0 + 1: "[1] Not Solid" : 1 + 32: "[32] Toggle (Disable Auto Return)" : 1 + 64: "[64] X Axis" : 0 + 128: "[128] Y Axis" : 0 + 1024: "[1024] Use Activates" : 1 + 2048: "[2048] Starts locked" : 0 + 8192: "[8192] Jiggle when used while locked" : 0 ] _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." startposition(float) : "Start Position" : 0 : "Postion when spawned. The value is a range between 0.0 and 1.0, where 0 is the unrotated position and 1 is the rotated position + 'Distance'." @@ -3594,7 +4128,7 @@ @BaseClass base(Targetname, Parentname, RenderFields, Global, Shadow) = Door [ speed(integer) : "Speed" : 100 : "The speed at which the door moves." - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be used." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this button cannot be used." noise1(sound) : "Start Sound" : : "Sound to play when the door starts moving." noise2(sound) : "Stop Sound" : : "Sound to play when the door stops moving." startclosesound(sound) : "Start Close Sound" : : "(Optional) Sound to play when the door starts closing." @@ -3613,7 +4147,7 @@ 1 : "Yes" ] - message(string) : "Message If Triggered" // NEEDHELP: Looks like this was removed + //message(string) : "Message If Triggered" // NEEDHELP: Looks like this was removed health(integer) : "Health (shoot open)" : 0 // NEEDHELP: Looks like this was removed locked_sound(sound) : "Locked Sound" : : "Sound played when the player tries to use the door, and fails because it's locked." @@ -3627,41 +4161,41 @@ spawnflags(flags) = [ - 1 : "Starts Open - OBSOLETE, use 'Spawn Position' key instead" : 0 - 4 : "Non-solid to Player" : 0 - 8: "Passable" : 0 - 32: "Toggle" : 0 - 256:"Use Opens" : 0 - 512: "NPCs Can't" : 0 - 1024: "Touch Opens" : 1 - 2048: "Starts locked" : 0 - 4096: "Door Silent" : 0 + //1 : "[1] Starts Open - OBSOLETE, use 'Spawn Position' key instead" : 0 + 4 : "[4] Non-solid to Player" : 0 + 8: "[8] Passable" : 0 + 32: "[32] Toggle" : 0 + 256:"[256] Use Opens" : 0 + 512: "[512] NPCs Can't" : 0 + 1024: "[1024] Touch Opens" : 1 + 2048: "[2048] Starts locked" : 0 + 4096: "[4096] Door Silent" : 0 ] - locked_sentence(choices) : "Locked Sentence" : 0 : "A sentence played when the player tries to use the door, and fails because it's locked." = - [ - 0: "None" - 1: "Gen. Access Denied" - 2: "Security Lockout" - 3: "Blast Door" - 4: "Fire Door" - 5: "Chemical Door" - 6: "Radiation Door" - 7: "Gen. Containment" - 8: "Maintenance Door" - 9: "Broken Shut Door" - ] - unlocked_sentence(choices) : "Unlocked Sentence" : 0 : "A sentence played when the door is unlocked." = - [ - 0: "None" - 1: "Gen. Access Granted" - 2: "Security Disengaged" - 3: "Blast Door" - 4: "Fire Door" - 5: "Chemical Door" - 6: "Radiation Door" - 7: "Gen. Containment" - 8: "Maintenance area" - ] + //locked_sentence(choices) : "Locked Sentence" : 0 : "A sentence played when the player tries to use the door, and fails because it's locked." = + //[ + // 0: "None" + // 1: "Gen. Access Denied" + // 2: "Security Lockout" + // 3: "Blast Door" + // 4: "Fire Door" + // 5: "Chemical Door" + // 6: "Radiation Door" + // 7: "Gen. Containment" + // 8: "Maintenance Door" + // 9: "Broken Shut Door" + //] + //unlocked_sentence(choices) : "Unlocked Sentence" : 0 : "A sentence played when the door is unlocked." = + //[ + // 0: "None" + // 1: "Gen. Access Granted" + // 2: "Security Disengaged" + // 3: "Blast Door" + // 4: "Fire Door" + // 5: "Chemical Door" + // 6: "Radiation Door" + // 7: "Gen. Containment" + // 8: "Maintenance area" + //] _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." loopmovesound(choices) : "Loop Moving Sound?" : 0 : "If set to true, the door's 'Start Sound' will be continually looped until the door finishes moving." = [ @@ -3702,11 +4236,11 @@ [ spawnflags(flags) = [ - 2 : "Reverse Dir" : 0 - 16: "One-way" : 0 - 64: "X Axis" : 0 - 128: "Y Axis" : 0 - 65536: "New func_door +USE rules (NOT for prop_doors!!)" : 0 + 2 : "[2] Reverse Dir" : 0 + 16: "[16] One-way" : 0 + 64: "[64] X Axis" : 0 + 128: "[128] Y Axis" : 0 + 65536: "[65536] New func_door +USE rules (NOT for prop_doors!!)" : 0 ] distance(integer) : "Distance" : 90 : "The amount, in degrees, that the button should rotate when it's pressed." @@ -3720,6 +4254,12 @@ @PointClass base(Targetname, Parentname, Angles, Global, Studiomodel) studioprop() = prop_door_rotating : "An entity used to place a door in the world." [ + disableshadows(choices) : "Disable Shadows" : 1 : "Used to disable dynamic shadows on this entity." = + [ + 0 : "No" + 1 : "Yes" + ] + slavename(target_destination) : "Slave Name" : : "The name of any doors that should be slaved to this door (i.e. should open when this one opens, and close when this one closes)." hardware(choices) : "Hardware Type" : 1 = [ @@ -3746,7 +4286,7 @@ soundmoveoverride(sound) : "Moving Sound" : : "Sound played when the door starts to move." returndelay(integer) : "Delay Before close (-1 stay open)" : -1 : "Amount of time, in seconds, after the door has opened before it closes. If the value is set to -1, the door never closes itself." dmg(integer) : "Damage Inflicted When Blocked" : 0 : "Amount of damage done to entities that block the movement of this door, per frame." - health(integer) : "Health (0 = Unbreakable)" : 0 // NEEDHELP: Doesn't look like this is hooked up anymore? + health(integer) : "Health (0 = Unbreakable)" : 0 soundlockedoverride(sound) : "Locked Sound" : : "Sound played when the player tries to open the door, and fails because it's locked." soundunlockedoverride(sound) : "Unlocked Sound" : : "Sound played when the door is unlocked." @@ -3758,13 +4298,13 @@ spawnflags(flags) = [ - 1 : "Starts Open" : 0 - //512: "NPCs Can't" : 0 - 2048: "Starts locked" : 0 - 4096: "Door silent (No sound, and does not alert NPCs)" : 0 - 8192: "Use closes" : 1 - 16384 : "Door silent to NPCS (Does not alert NPCs)" : 0 - 32768 : "Ignore player +USE" : 0 + 256 : "[256] Start with collision disabled" : 0 + 512: "[512] NPCs Can't" : 0 + 2048: "[2048] Starts locked" : 0 + 4096: "[4096] Door silent (No sound, and does not alert NPCs)" : 0 + 8192: "[8192] Use closes" : 1 + 16384 : "[16384] Door silent to NPCS (Does not alert NPCs)" : 0 + 32768 : "[32768] Ignore player +USE" : 0 ] opendir(choices) : "Open Direction" : 0 : "Force the door to open only forwards or only backwards. Both directions is the standard door behavior." = @@ -3773,6 +4313,15 @@ 1 : "Open Forward Only" 2 : "Open Backward Only" ] + + //breaktype(choices) : "Break Type" : 0 : "If this door is breakable or it receives the 'Break' input, what should it do?" = + //[ + // 0 : "Break normally" + // 1 : "Turn into prop_physics" + // 2 : "Turn into prop_physics and hinge" + //] + + //DoorFilter(filterclass) : "NPC Filter" : "" : "An optional filter that can control which NPCs are allowed to pass through this door." // Outputs output OnClose(void) : "Fired when the door is told to close." @@ -3787,13 +4336,18 @@ // Inputs input Open(void) : "Open the door, if it is not fully open." - input OpenAwayFrom(string) : "Open the door away from the specified entity." + input OpenAwayFrom(target_destination) : "Open the door away from the specified entity." input Close(void) : "Close the door, if it is not fully closed." input Toggle(void) : "Toggle the door between open and closed." input Lock(void) : "Lock the door." input Unlock(void) : "Unlock the door." input SetRotationDistance(float) : "Set the distance (in degrees) between Open and Closed." input SetSpeed(float) : "Set the speed at which the door rotates. 100 is default." + + input AllowPlayerUse(void) : "Allows players to use the door. This just disables the 'Ignore player +USE' spawnflag." + input DisallowPlayerUse(void) : "Prevents players from using the door. This just enables the 'Ignore player +USE' spawnflag." + + input SetDoorFilter(target_destination) : "Sets the entity to use as the NPC filter. Pass in an empty string to clear the NPC filter." ] @@ -3848,13 +4402,13 @@ input TurnOff(void) : "Turn off." ] -@SolidClass base(Targetname, BModelParticleSpawner) = func_dustmotes : +@SolidClass base(Targetname, BModelParticleSpawner) sphere(DistMax) = func_dustmotes : "A brush entity that spawns sparkling dust motes within its volume." [ SizeMin(string) : "Minimum Particle Size" : 10 SizeMax(string) : "Maximum Particle Size" : 20 - Alpha(integer) : "Alpha" : 255 + Alpha(integer) : "Alpha" : 255 : "Transparency of the particles. 0 means they will be invisible and 255 means they will be opaque." ] @SolidClass base( Targetname ) = func_smokevolume : @@ -3862,7 +4416,7 @@ [ spawnflags(flags) = [ - 1 : "Emissive" : 0 + 1 : "[1] Emissive" : 0 ] Color1(color255) : "Particle Color1 (R G B)" : "255 255 255" @@ -3882,10 +4436,10 @@ input SetDensity(float) : "Set the particle density. It should be a range from 0 to 1." ] -@SolidClass base( Targetname, BModelParticleSpawner ) = func_dustcloud : +@SolidClass base( Targetname, BModelParticleSpawner ) sphere(DistMax) = func_dustcloud : "A brush entity that spawns a translucent dust cloud within its volume." [ - Alpha(integer) : "Alpha" : 30 + Alpha(integer) : "Alpha" : 30 : "Transparency of the particles. 0 means that they are invisible, 255 means opaque." SizeMin(string) : "Minimum Particle Size" : 100 SizeMax(string) : "Maximum Particle Size" : 200 @@ -3940,7 +4494,7 @@ [ spawnflags(Flags) = [ - 1 : "Remove on fire" : 1 + 1 : "[1] Remove on fire" : 1 ] globalstate(choices) : "Global State to Read" : : "If set, this specifies a global state to check before firing. The OnMapSpawn output will only fire if the global state is set." = @@ -3975,25 +4529,38 @@ target(target_destination) : "Entity to Look At" : : "Name of the entity that the camera should point at and track while active." targetattachment(string) : "Target Attachment Name" : : "If set, the camera will focus on the specified attachment on the 'Entity to Look At'." wait(integer) : "Hold Time" : 10 : "The amount of time the camera should control the player's view for, after which it deactivates itself. If the camera should stay active until told to deactive, set the 'Infinite Hold Time' spawnflag." - moveto(target_destination) : "Path Corner" : : "The first path corner in a track that the camera should move along once it's activated. If not specified, the camera won't move." + moveto(target_destination) : "Path Corner" : : "The first path corner in a track that the camera should move along once it's activated. If not specified, the camera won't move. This can actually be literally any entity, but don't worry about that." interpolatepositiontoplayer(choices) : "Interpolate Position To Player" : 0 : "Gradually interpolate player's position to here on start. (Episodic only)" = [ 0 : "No" 1 : "Yes" ] + spawnflags(flags) = [ - 1: "Start At Player" : 1 - 2: "Follow Player" : 1 - 4: "Freeze Player" : 0 - 8: "Infinite Hold Time" : 0 - 16:"Snap to goal angles" : 0 - 32:"Make Player non-solid" : 0 - 64:"Interruptable by Player" : 0 + 1: "[1] Start At Player" : 1 + 2: "[2] Follow Player" : 1 + 4: "[4] Freeze Player" : 0 + 8: "[8] Infinite Hold Time" : 0 + 16:"[16] Snap to goal angles" : 0 + 32:"[32] Make Player non-solid" : 0 + 64:"[64] Interruptable by Player" : 0 + 128:"[128] Set FOV" : 0 + 256:"[256] Allow fixed behavior (can move without look target, removal stops softlock, etc.)" : 1 ] + speed(string) : "Initial Speed" : "0" : "The starting speed that the camera moves at, if it's on a path track." acceleration(string) : "Acceleration units/sec^2" : "500" : "The speed at which the camera accelerates to path corner's desired speeds." deceleration(string) : "Stop Deceleration units/sec^2" : "500" : "The speed at which the camera decelerates to path corner's desired speeds." + + fov(float) : "FOV" : "90" : "The player's FOV when using this camera. Be sure to have the 'Set FOV' spawnflag enabled if you want to use this." + fov_rate(float) : "FOV rate" : "0" : "How quickly the FOV should be set. Be sure to have the 'Set FOV' spawnflag enabled if you want to use this." + + DontSetPlayerView(choices) : "Don't set player view" : 0 : "Prevents this point_viewcontrol from actually controlling the player's view. FOV, player-affecting spawnflags, etc. may still happen." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs input Enable(void) : "Enable the point_viewcontrol, and start controlling the player's view." @@ -4001,12 +4568,13 @@ // Outputs output OnEndFollow(void) : "Fired when the point_viewcontrol deactivates, due to the Disable input being received, the Entity to Look At being destroyed, or the Hold Time expiring." + output OnStartFollow(void) : "Fired when the point_viewcontrol activates, usually due to the Enable input being received." ] @PointClass base(Targetname) = point_posecontroller : "An entity that controls a pose parameter of a prop and cycles the pose clientside." [ - PropName(string) : "Prop Name" : : "Name of the prop to control." + PropName(target_destination) : "Prop Name" : : "Name of the prop to control." PoseParameterName(string) : "Pose Parameter Name" : : "Name of the pose parameter to control." PoseValue(float) : "Pose Parameter Value" : "0.0" : "Normalized value for the pose parameter from 0.0 and 1.0 (maps to min and max range)." InterpolationTime(float) : "Interpolation Time" : "0.0" : "Number of seconds (0.0 to 10.0) for client to match absolue pose values." @@ -4048,20 +4616,23 @@ "If the input value is greater than the compare value, the OnGreaterThan output is fired with the input value." [ // Keys - InitialValue(integer) : "Initial value" : : "Initial value for the input value." - CompareValue(integer) : "Compare value" : : "The value to compare against." + InitialValue(string) : "Initial value" : : "Initial value for the input value." + CompareValue(string) : "Compare value" : : "The value to compare against." // Inputs - input SetValue(float) : "Set the value that will be compared against the compare value." - input SetValueCompare(float) : "Set the value that will be compared against the compare value and performs the comparison." - input SetCompareValue(float) : "Set the compare value." - input Compare(void) : "Force a compare of the input value with the compare value." + input SetValue(string) : "Sets the value that will be compared against the compare value." + input SetValueCompare(string) : "Sets the value that will be compared against the compare value and performs the comparison." + input SetCompareValue(string) : "Sets the compare value." + input SetCompareValueCompare(string) : "Sets the compare value and performs the comparison." + input Compare(void) : "Forces a compare of the input value with the compare value." // Outputs - output OnLessThan(float) : "Fired when the input value is less than the compare value. Sends the input value as data." - output OnEqualTo(float) : "Fired when the input value is equal to the compare value. Sends the input value as data." - output OnNotEqualTo(float) : "Fired when the input value is different from the compare value. Sends the input value as data." - output OnGreaterThan(float) : "Fired when the input value is greater than the compare value. Sends the input value as data." + output OnLessThan(string) : "Fired when the input value is less than the compare value. Sends the input value as data." + output OnEqualTo(string) : "Fired when the input value is equal to the compare value. Sends the input value as data." + output OnNotEqualTo(string) : "Fired when the input value is different from the compare value. Sends the input value as data." + output OnGreaterThan(string) : "Fired when the input value is greater than the compare value. Sends the input value as data." + output OnGreaterThanOrEqualTo(string) : "Fired when the input value is greater than or equal to the compare value. Sends the input value as data." + output OnLessThanOrEqualTo(string) : "Fired when the input value is greater than or equal to the compare value. Sends the input value as data." ] @PointClass base(Targetname) iconsprite("editor/logic_branch.vmt") = logic_branch : @@ -4079,8 +4650,8 @@ input Test(void) : "Test the input value and fire OnTrue or OnFalse based on the value." // Outputs - output OnTrue(bool) : "Fired when the input value is true (nonzero)." - output OnFalse(bool) : "Fired when the input value is false (zero)." + output OnTrue(void) : "Fired when the input value is true (nonzero)." + output OnFalse(void) : "Fired when the input value is false (zero)." ] @@ -4122,6 +4693,12 @@ "PickRandom input. One of the OnCase outputs that is connected to another entity will " + "be picked at random and fired." [ + MultipleCasesAllowed(choices) : "Multiple case hits allowed" : 0 : "If an input value matches a given case, are we allowed to test the rest of the cases or should we stop there? Don't worry about this if you're only using this entity for PickRandom." = + [ + 0 : "No" + 1 : "Yes" + ] + Case01(string) : "Case 01" Case02(string) : "Case 02" Case03(string) : "Case 03" @@ -4161,29 +4738,92 @@ output OnCase14(void) : "Fired when the input value equals the Case14 value." output OnCase15(void) : "Fired when the input value equals the Case15 value." output OnCase16(void) : "Fired when the input value equals the Case16 value." - output OnDefault(void) : "Fired when the input value does not equal any of the Case values." + output OnDefault(string) : "Fired when the input value does not equal any of the Case values. Passes the input value." + output OnUsed(string) : "Fired when an input value is received, regardless of whether it matches a case. Passes the input value." ] -// NEEDHELP: Unused in HL2, not clear what it's useful for. +// Original Comment >>> NEEDHELP: Unused in HL2, not clear what it's useful for. +// +// Apparently, this entity's usefulness was called into question at some point by Valve programmers. +// Either way, I've changed it a lot, so this may (or may not) be useful now. @PointClass base(Targetname) iconsprite("editor/logic_multicompare.vmt") = logic_multicompare : "Compares a set of inputs to each other. If they are all the same, fires an OnEqual output. " + - "If any are different, fires the OnNotEqual output." + "If any are different, fires the OnNotEqual output." + + "There is currently no way to remove inputs." [ - // keys - IntegerValue(integer) : "Integer Value (optional)" - ShouldComparetoValue(choices) : "Should use Integer Value" : 0 = + // Keys + IntegerValue(string) : "Reference Value (optional)" : : "The value all inputs are compared to if ''Should use Reference Value'' is enabled." + ShouldComparetoValue(choices) : "Should use Reference Value" : 0 : "If enabled, all inputs are compared to the reference value. If not enabled, they are instead compared to the last input added." = [ 0 : "No" 1 : "Yes" ] // Inputs - input InputValue(integer) : "Input value" - input CompareValues(void) : "Compares the values and fires appropriate outputs" + input InputValue(string) : "Adds a value to our set of inputs and fires CompareValues automatically, comparing existing inputs to this one if set to do so." + input InputValueNoFire(string) : "Adds a value to our set of inputs without firing CompareValues." + input SetReferenceValue(string) : "Sets our reference value." + input CompareValues(void) : "Compares the values and fires appropriate outputs." // Outputs - output OnEqual(void) : "Fires if the values are equal" - output OnNotEqual(void) : "Fires if the values are not equal" + output OnEqual(string) : "Fires if the compared value is equal to all of our inputs. Passes the compared value." + output OnNotEqual(string) : "Fires if the compared value is equal to all of our inputs. Passes the violator." +] + +// Mapbase - Taken directly from Portal 2 base FGD. +@PointClass base(Targetname, EnableDisable) iconsprite("editor/logic_random_outputs.vmt") = logic_random_outputs : + "A message forwarder. Fires up to eight separate outputs, each with a different chance of firing." +[ + spawnflags(flags) = + [ + 1: "[1] Only trigger once" : 0 + 2: "[2] Allow fast retrigger" : 0 + ] + OnTriggerChance1(float) : "OnTrigger1 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger1 output firing when this entity is triggered." + OnTriggerChance2(float) : "OnTrigger2 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger2 output firing when this entity is triggered." + OnTriggerChance3(float) : "OnTrigger3 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger3 output firing when this entity is triggered." + OnTriggerChance4(float) : "OnTrigger4 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger4 output firing when this entity is triggered." + OnTriggerChance5(float) : "OnTrigger5 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger5 output firing when this entity is triggered." + OnTriggerChance6(float) : "OnTrigger6 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger6 output firing when this entity is triggered." + OnTriggerChance7(float) : "OnTrigger7 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger7 output firing when this entity is triggered." + OnTriggerChance8(float) : "OnTrigger8 Chance" : "1.0" : "Chance (from 0 to 1) of the OnTrigger8 output firing when this entity is triggered." + + // Inputs + input Trigger(void) : "Trigger this entity, causing its OnTrigger outputs to fire if it is enabled." + input Toggle(void) : "Toggle this entity between enabled and disabled." + //input CancelPending(void) : "Cancel any events fired by this entity that are currently pending in the I/O event queue." + + // Outputs + output OnSpawn(void) : "Fired when this entity is spawned. If this entity is set to only trigger once, it will "+ + "delete itself after firing this output." + output OnTrigger1(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger2(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger3(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger4(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger5(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger6(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger7(void) : "This output has a chance to fire when the entity is triggered." + output OnTrigger8(void) : "This output has a chance to fire when the entity is triggered." +] + +@PointClass base(Targetname, EnableDisable) size(-8 -8 -8, 8 8 8) = logic_register_activator : + "Stores an entity and sends messages with it as the activator\n" + + "Useful for keeping track of entities with mangled names due " + + "to template spawners and instances." +[ + // Inputs + input Toggle(void) : "Toggle between enabled and disabled." + input FireRegisteredAsActivator1(void) : "Start a message from this entity using the matching OnRegisteredActivating - but the activator is the registered entity." + input FireRegisteredAsActivator2(void) : "Start a message from this entity using the matching OnRegisteredActivating - but the activator is the registered entity." + input FireRegisteredAsActivator3(void) : "Start a message from this entity using the matching OnRegisteredActivating - but the activator is the registered entity." + input FireRegisteredAsActivator4(void) : "Start a message from this entity using the matching OnRegisteredActivating - but the activator is the registered entity." + input RegisterEntity(target_destination) : "Stores an entity to later be used as an activator." + + // Outputs + output OnRegisteredActivate1(void) : "Fired to send a message using the registered as the activator." + output OnRegisteredActivate2(void) : "Fired to send a message using the registered as the activator." + output OnRegisteredActivate3(void) : "Fired to send a message using the registered as the activator." + output OnRegisteredActivate4(void) : "Fired to send a message using the registered as the activator." ] @PointClass base(Targetname, EnableDisable) iconsprite("editor/logic_relay.vmt") = logic_relay : @@ -4195,20 +4835,55 @@ [ spawnflags(flags) = [ - 1: "Only trigger once" : 0 - 2: "Allow fast retrigger" : 0 + 1: "[1] Only trigger once" : 0 + 2: "[2] Allow fast retrigger" : 0 ] // Inputs - input Trigger(void) : "Trigger the relay, causing its OnTrigger output to fire if it is enabled." + input Trigger(void) : "Triggers the relay, causing its OnTrigger output to fire if it is enabled." + input TriggerWithParameter(string) : "Triggers the relay with a parameter, causing its OnTriggerParameter output to fire if it is enabled." input Toggle(void) : "Toggle the relay between enabled and disabled." - input CancelPending(void) : "Cancel any events fired by this relay that are currently pending in the I/O event queue." + //input CancelPending(void) : "Cancel any events fired by this relay that are currently pending in the I/O event queue." + input EnableRefire(void) : "If fast retrigger is disabled, the relay will not be able to fire again until its most delayed output has been fired. "+ + "This input allows the relay to fire again early if it is in this state." // Outputs output OnSpawn(void) : "Fired when the relay is spawned. If the relay is set to only trigger once, it will "+ "delete itself after firing this output." output OnTrigger(void) : "Fired when the relay is triggered. If the relay is set to only trigger once, it will "+ "delete itself after firing this output." + output OnTriggerParameter(string) : "Fired when the relay is triggered with a parameter. If the relay is set to only trigger once, it will "+ + "delete itself after firing this output." +] + +@PointClass base(Targetname, EnableDisable) iconsprite("editor/logic_relay_queue.vmt") = logic_relay_queue : + "A special variant of logic_relay designed to queue trigger inputs. " + + "If the relay is still handling its I/O connections after being triggered, additional Trigger inputs will be queued and automatically fire when the relay is able to be re-fired. Activator, output ID, and parameter are all kept and saved. " + + "Inputs are added to the queue each time Trigger or TriggerWithParameter are received while the relay is disabled or still handling its current I/O connections. The first one in the queue will trigger the moment an opportunity becomes available and the next one in the queue will wait for that one.\n\n" + + "This is useful for when you don't want something to happen multiple times at once, but don't want to discard further requests either." +[ + SetMaxQueueItems(integer) : "Maximum Items" : 3 : "The maximum number of Trigger and TriggerWithParameter inputs allowed in the queue. Any others received while this value is full will be discarded. Keep in mind this does not count the I/O chain currently being handled." + + DontQueueWhenDisabled(choices) : "Don't queue when disabled" : 0 : "Prevents the relay from queuing inputs when disabled. This means inputs will only be queued when enabled and still handling its current I/O connections." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input Trigger(void) : "Triggers the relay, causing its OnTrigger output to fire if it is enabled." + input TriggerWithParameter(string) : "Triggers the relay with a parameter, causing its OnTriggerParameter output to fire if it is enabled." + input Toggle(void) : "Toggle the relay between enabled and disabled." + //input CancelPending(void) : "Cancel any events fired by this relay that are currently pending in the I/O event queue." + input EnableRefire(void) : "If fast retrigger is disabled, the relay will not be able to fire again until its most delayed output has been fired. "+ + "This input allows the relay to fire again early if it is in this state." + + input ClearQueue(void) : "Clears the input queue." + input SetMaxQueueItems(integer) : "Sets the maximum queue items." + + // Outputs + output OnTrigger(void) : "Fired when the relay is triggered." + output OnTriggerParameter(string) : "Fired when the relay is triggered with a parameter." ] @PointClass base(Targetname, EnableDisable) iconsprite("editor/logic_timer.vmt") = logic_timer : @@ -4218,7 +4893,7 @@ // Keys spawnflags(flags) = [ - 1 : "Oscillator (alternates between OnTimerHigh and OnTimerLow outputs)" : 0 + 1 : "[1] Oscillator (alternates between OnTimerHigh and OnTimerLow outputs)" : 0 ] UseRandomTime(choices) : "Use Random Time" : 0 = @@ -4314,26 +4989,44 @@ 57 : "8 LOUDSPEAKER, ECHO" 58 : "9 SPEAKER SMALL" 59 : "10 SPEAKER TINY" + + // A few unmarked DSP presets added with Mapbase + 32 : "32 EXPLOSION MUFFLE 1" + 33 : "33 EXPLOSION MUFFLE 2" + 34 : "34 EXPLOSION MUFFLE 3" + 35 : "35 EXPLOSION RING 1" + 36 : "36 EXPLOSION RING 2" + 37 : "37 EXPLOSION RING 3" + 38 : "38 ''EXPLOSION RING'' 4" + 44 : "44 Test 1 (High Pitch)" + 45 : "45 Test 2 (Low Pitch)" + 46 : "46 Test 3 (Silence?)" + 47 : "47 Test 4 (Distort)" + 48 : "48 Test 5 (Long Wobble)" + 49 : "49 Test 6 (Silence?)" ] spawnflags(flags) = [ - 1 : "Hears combat sounds" : 1 - 2 : "Hears world sounds" : 1 - 4 : "Hears player sounds" : 1 - 8 : "Hears bullet impacts" : 1 - 16: "Swallows sounds routed through speakers" : 0 - 32: "Hears explosions" : 0 - 64: "Ignores non-attenuated sounds" : 0 + 1 : "[1] Hears combat sounds" : 1 + 2 : "[2] Hears world sounds" : 1 + 4 : "[4] Hears player sounds" : 1 + 8 : "[8] Hears bullet impacts" : 1 + 16: "[16] Swallows sounds routed through speakers" : 0 + 32: "[32] Hears explosions" : 0 + 64: "[64] Ignores non-attenuated sounds" : 0 ] Sensitivity(float) : "Sensitivity (0 - 10)" : 1 : "Microphone sensitivity, 0=deaf, 1=default, 10=extremely sensitive). Only applicable in Measuring mode." SmoothFactor(float) : "Smoothing (0 - 1)" : 0 : "Smoothing factor, 0=no smoothing, 1=maximum smoothing). Only applicable in Measuring mode." MaxRange(float) : "Maximum hearing range (0=infinite)" : 240 : "Sounds beyond this range won't be heard, irrelevant of attenuation. "+ "WARNING: setting this to zero (or a value > 1024) when the microphone is in Speaker mode can be very bad for performance!!" + + landmark(target_destination) : "Local Destination Landmark" : : "If specified, then sounds offset from the speaker by their initial offset from this landmark. Only applicable in Speaker mode." // Inputs - input SetSpeakerName(string) : "Set the microphone to output through a different speaker entity." + input SetSpeakerName(target_destination) : "Set the microphone to output through a different speaker entity." + input SetDSPPreset(integer) : "Sets our DSP preset." // Outputs output SoundLevel(float) : "Fired in Measuring mode whenever the sound level changes." @@ -4346,8 +5039,8 @@ [ spawnflags(flags) = [ - 1 : "Ignore out of range input values" : 1 - 2 : "Clamp output to output range" : 2 + 1 : "[1] Ignore out of range input values" : 1 + 2 : "[2] Clamp output to output range" : 2 ] in1(integer) : "Minimum Valid Input Value" : 0 : "Input values below this value will be ignored." @@ -4367,7 +5060,7 @@ [ spawnflags(flags) = [ - 1 : "Ignore out of range input values" : 1 + 1 : "[1] Ignore out of range input values" : 1 ] inmin(integer) : "Minimum Valid Input Value" : 0 : "Input values below this value will be ignored." @@ -4403,12 +5096,55 @@ input SetHitMax(integer): "Set the upper bound of the counter and fire the OutValue output with the current value." input SetHitMin(integer): "Set the lower bound of the counter and fire the OutValue output with the current value." input GetValue(void): "Causes the counter fire its OnGetValue output with the current value of the counter. Used for polling the counter when you don't want constant updates from the OutValue output." + input SetMaxValueNoFire(integer): "Set the upper bound of the counter without firing any outputs." + input SetMinValueNoFire(integer): "Set the lower bound of the counter without firing any outputs." // Outputs output OutValue(integer) : "Fired when the counter value changes." output OnHitMin(void) : "Fired when the counter value meets or goes below the min value. The counter must go back above the min value before the output will fire again." output OnHitMax(void) : "Fired when the counter value meets or exceeds the max value. The counter must go below the max value before the output will fire again." output OnGetValue(integer) : "Fired in response to the GetValue input. Used for polling the counter when you don't want constant updates from the OutValue output." + output OnChangedFromMin(void) : "Fired when the counter value changes from the minimum value." + output OnChangedFromMax(void) : "Fired when the counter value changes from the maximum value." +] + +@PointClass base(Targetname, EnableDisable, math_counter) iconsprite("editor/math_counter_advanced.vmt") = math_counter_advanced : + "A special version of math_counter with the ability to perform advanced calculations. " + + "Otherwise functions identically to math_counter." +[ + // Keys + PreserveValue(choices) : "Preserve Value?" : 0 : "If set to 'Yes', calculations will fire OutValue with the resulting value, but the actual value stored in this entity will stay the same, allowing future calculations to use a constant value. If you want to change the value, you must use SetValueNoFire to set the counter's value or the PreserveValue input to toggle this feature. This also disables min/max functionality." = + [ + 0 : "No" + 1 : "Yes" + ] + + AlwaysOutputAsInt(choices) : "Always Output As Int" : 0 : "If set to 'Yes', the stored value (and OutValue) will always be rounded to an integer before firing." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input PreserveValue(bool): "Sets whether this counter's value should be preserved after calculations. 1 = Yes, 0 = No" + input AlwaysOutputAsInt(bool): "Sets whether this counter's value should always output as an integer. 1 = Yes, 0 = No" + + input SetValueToPi(void) : "Sets the counter's value to 3.14159265358979323846 and fires the OutValue output with it." + + input SquareRoot(void) : "Calculates the square root of the counter's current value. Fires the OutValue output with the result." + input Power(integer) : "Raises the power of the counter's current value to this value. Fires the OutValue output with the result." + + input Round(integer) : "Rounds the counter's current value to the specified number place. For example, rounding 256 to 100 will round it to 300 and rounding 256 to 10 will round it to 260. Use 0 to round decimals to integers. Fires the OutValue output with the result." + input Floor(integer) : "Floors, or rounds down, the counter's current value to the specified number place. Fires the OutValue output with the result." + input Ceil(integer) : "Ceils, or rounds up, the counter's current value to the specified number place. Fires the OutValue output with the result." + input Trunc(integer) : "Truncates, or rounds toward zero, the counter's current value to the specified number place. Fires the OutValue output with the result." + + input Sin(void) : "Applies sine to the counter's current value. Fires the OutValue output with the result." + input Cos(void) : "Applies cosine to the counter's current value. Fires the OutValue output with the result." + input Tan(void) : "Applies tangent to the counter's current value. Fires the OutValue output with the result." + + input RandomInt(string) : "Generates a random integer between the specified bounds. Format = 'lowerbound upperbound', like '22 65'. Fires the OutValue output with the result." + input RandomFloat(string) : "Generates a random float between the specified bounds. Format = 'lowerbound upperbound', like '22.5 48.721'. Fires the OutValue output with the result." ] @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = logic_lineto : @@ -4424,10 +5160,10 @@ @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = logic_navigation : "An entity that is used to set navigation properties on other entities. Useful to make NPCs ignore physics props in their way that they can easily push." [ - target(target_destination) : "Navigation Entity" : "Name of the entity to set navigation properties on." + target(target_destination) : "Navigation Entity" : : "Name of the entity to set navigation properties on." spawnflags(flags) = [ - 1 : "Start On" : 1 + 1 : "[1] Start On" : 1 ] navprop(choices) : "Nav Property" : "Ignore" = [ @@ -4440,8 +5176,9 @@ input Toggle(void) : "Toggle on/off." ] -@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = logic_autosave : - "An entity that is used to force an autosave." +@PointClass base(Targetname) iconsprite("editor/logic_autosave.vmt") = logic_autosave : + "An entity that is used to force an autosave." + + "Can be used multiple times." [ NewLevelUnit(choices) : "Force New Level Unit" : 0 : "If set, the save will discard any savedata from previous levels, for the purpose of keeping savegame filesizes down. Can only be safely used if there is no way for the player to return to previous levels." = [ @@ -4483,8 +5220,8 @@ [ spawnflags(flags) = [ - 1 : "Don't remove template entities" : 0 - 2 : "Preserve entity names (Don't do name fixup)" : 1 + 1 : "[1] Don't remove template entities" : 0 + 2 : "[2] Preserve entity names (Don't do name fixup)" : 1 ] Template01(target_destination) : "Template 1" @@ -4505,10 +5242,12 @@ Template16(target_destination) : "Template 16" // Inputs - input ForceSpawn(void) : "Spawn an instance of the template at the original position." + input ForceSpawn(void) : "Spawns an instance of the template at the original position." + input ForceSpawnRandomTemplate(void) : "Spawns one of this entity's templates at its original position." // Outputs output OnEntitySpawned(void) : "Fired after spawning an instance of this template." + output OutSpawnedEntity(ehandle) : "Fired for each entity spawned by this template, passing said entity as the parameter and activator." ] @PointClass base(Targetname,Parentname,Angles) = env_entity_maker : @@ -4517,11 +5256,11 @@ [ spawnflags(Flags) = [ - 1 : "Enable AutoSpawn (will spawn whenever there's room)" : 0 - 2 : "AutoSpawn: Wait for entity destruction" : 0 - 4 : "AutoSpawn: Even if the player is looking" : 0 - 8 : "ForceSpawn: Only if there's room" : 0 - 16 : "ForceSpawn: Only if the player isn't looking" : 0 + 1 : "[1] Enable AutoSpawn (will spawn whenever there's room)" : 0 + 2 : "[2] AutoSpawn: Wait for entity destruction" : 0 + 4 : "[4] AutoSpawn: Even if the player is looking" : 0 + 8 : "[8] ForceSpawn: Only if there's room" : 0 + 16 : "[16] ForceSpawn: Only if the player isn't looking" : 0 ] EntityTemplate(target_destination) : "Point_template To Spawn" : "" : "Name of the point_template to spawn here." @@ -4537,11 +5276,921 @@ // Inputs input ForceSpawn(void) : "Spawn an instance of the template at this origin and angle." - input ForceSpawnAtEntityOrigin(target_destination) : "Spawn an instance of the template that the same origin and angle as the specified entity (specify by targetname in parameters)" + input ForceSpawnAtEntityOrigin(target_destination) : "Spawns an instance of the template that has the same origin and angles as the specified entity." + input ForceSpawnAtEntityCenter(target_destination) : "Spawns an instance of the template at the specified entity's world space center and angles." + input ForceSpawnAtPosition(vector) : "Spawn an instance of the template at the specified position (has env_entity_maker's angles)" // Outputs output OnEntitySpawned(void) : "Fired when an instance of the entity template has been spawned." output OnEntityFailedSpawn(void) : "Fired when a ForceSpawn input failed to spawn the template, either due to lack of space or being in player's view, depending on the spawnflags." + output OutSpawnedEntity(ehandle) : "Fired for each entity spawned by this template, passing said entity as the parameter and activator." +] + +// =========================================== +// Mapbase logic entities start here +// =========================================== + +@PointClass base(Targetname) iconsprite("editor/logic_skill.vmt") = logic_skill : + "Fires various inputs and outputs related to difficulty levels. " + + "You can use this entity to figure out what difficulty the player is using." +[ + ListenForSkillChange(choices) : "Listen for skill changes?" : 1 : "If enabled, this entity will fire the 'OnSkillChanged' output every time the difficulty is changed. This can also be toggled during the game with inputs." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input Test(void) : "Test the skill level and fire an input based on the returning value." + input StartListening(void) : "Starts listening for difficulty level changes." + input StopListening(void) : "Stops listening for difficulty level changes." + + // Outputs + output OnSkillChanged(void) : "Fired when the difficulty is changed." + output OnEasy(void) : "Fired when the tested difficulty is on Easy." + output OnNormal(void) : "Fired when the tested difficulty is on Normal." + output OnHard(void) : "Fired when the tested difficulty is on Hard." +] + +@PointClass base(Targetname) iconsprite("editor/logic_console.vmt") = logic_console : + "Sends messages to the console. Not to be confused with point_clientcommand or point_servercommand." +[ + // Keys + SetDevLvl(integer) : "Developer Level" : 1 : "What level developer messages should appear at." + SetMsgColor(color255) : "Message Color" : "210 250 255 255" : "The color of standard messages." + SetWarningColor(color255) : "Warning Color" : "255 210 210 255" : "The color of warning messages." + + SetNewLineNotAuto(choices) : "Don't automatically append \n?" : 0 : "Prevents this logic_console from automatically appending a new line each time it prints." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input SendMsg(string) : "Sends a message to the console." + input SendWarning(string) : "Sends a message to the console in red text." + input SendDevMsg(string) : "Sends a message to the console that can only be viewed in developer mode." + input SendDevWarning(string) : "Sends a red-colored message to the console that can only be viewed in developer mode." + input SetDevLvl(integer) : "Sets the level developer messages should appear at." + input SetMsgColor(color255) : "Sets the color of standard messages." + input SetWarningColor(color255) : "Sets the color of warning messages." + input SetNewLineNotAuto(bool) : "Enables or disables this logic_console's ability to append \n to each message." + input NewLine(void) : "Manually sends \n." + input DevNewLine(void) : "Manually sends \n in the specified developer level." + input ClearConsole(void) : "Clears the console of all output." + + // No way, you wacko! + //input SendError(string) : "Crashes the player's game and gives the parameter as an error message. Please handle with care." +] + +@PointClass base(Targetname) iconsprite("editor/logic_convar.vmt") = logic_convar : + "A powerful entity that can read the specified ConVar's value. " + + "It functions similarly to a logic_branch, except you could also output the value directly. " + + "Due to theoretical abuse, players have the option to disable logic_ConVar usage on a map. " + + "Use the 'OnDenied' output to prevent any issues from players who have disabled logic_ConVar." +[ + // Keys + SetConVar(string) : "ConVar" : : "The ConVar to read. Can be serverside or clientside(?)" + SetTestValue(string) : "Compare value" : : "The value to compare with the ConVar's value during comparisons. You could use <, !=, etc. at the beginning similar to a Response System criterion." + + // Inputs + input SetConVar(string) : "Sets the ConVar whose variable will be retrieved." + input SetTestValue(string) : "Sets the value that will be compared with the ConVar variable during comparisons." + input GetValue(void) : "Retrieves the ConVar's value, firing OutValue with its value." + input Test(void) : "Compares the ConVar's value with the compare value." + + // Outputs + output OnTrue(void) : "Fired when a comparison is true." + output OnFalse(void) : "Fired when a comparison is false." + output OutValue(string) : "Fired with the GetValue input. Passes the ConVar's current value." + output OnDenied(void) : "Fires when the ConVar is requested and logic_convar is not allowed by the server." +] + +@PointClass base(Targetname) iconsprite("editor/logic_format.vmt") = logic_format : + "Formats a line of text akin to C# String.Format.\n" + + "As curly brackets cannot be used in the help window, please see Mapbase documentation for clear instructions." + //"For example, take the following values:\n\n" + + //"Input Value: 'A {0} there and a \{1\} {1} there\n" + + //"Parameter 0: 'poot'\n" + + //"Parameter 1: 'doot'\n" + + //"\n" + + //"The 'GetFormattedString' input will create the following text:\n\n" + + //"'A poot poot there and a doot doot there'\n\n" + + //"This will be sent out via the OutFormattedValue output." +[ + // Keys + SetInputValue(string) : "Input Value" : : "The input value. Should contain {0}, {1}, etc, which will be replaced by the parameters and then output as OutFormattedValue." + SetParameter0(string) : "Parameter 0" : : "Will replace all instances of {0} in the input value." + SetParameter1(string) : "Parameter 1" : : "Will replace all instances of {1} in the input value." + SetParameter2(string) : "Parameter 2" : : "Will replace all instances of {2} in the input value." + SetParameter3(string) : "Parameter 3" : : "Will replace all instances of {3} in the input value." + SetParameter4(string) : "Parameter 4" : : "Will replace all instances of {4} in the input value." + SetParameter5(string) : "Parameter 5" : : "Will replace all instances of {5} in the input value." + SetParameter6(string) : "Parameter 6" : : "Will replace all instances of {6} in the input value." + SetParameter7(string) : "Parameter 7" : : "Will replace all instances of {7} in the input value." + SetBackupParameter(string) : "Backup Parameter" : : "If an invalid parameter is used (e.g. null parameter or asks for a parameter beyond {7}), then this will be used instead. Otherwise just uses ''." + + // Inputs + input GetFormattedValue(void) : "Fires OutFormattedValue, which passes the formatted input value." + input SetInputValue(string) : "Sets the input value. Should contain {0}, {1}, etc. enclosed by curly brackets, which will be replaced by the parameters and then output as OutFormattedValue." + input SetParameter0(string) : "Sets the text that will replace all instances of {0}." + input SetParameter1(string) : "Sets the text that will replace all instances of {1}." + input SetParameter2(string) : "Sets the text that will replace all instances of {2}." + input SetParameter3(string) : "Sets the text that will replace all instances of {3}." + input SetParameter4(string) : "Sets the text that will replace all instances of {4}." + input SetParameter5(string) : "Sets the text that will replace all instances of {5}." + input SetParameter6(string) : "Sets the text that will replace all instances of {6}." + input SetParameter7(string) : "Sets the text that will replace all instances of {7}." + input SetBackupParameter(string) : "Sets the text that will replace all invalid parameters." + + // Outputs + output OutFormattedValue(string) : "Fired when the formatted value is requested. Outputs the formatted value." +] + +@PointClass base(Targetname) iconsprite("editor/logic_keyfield.vmt") = logic_keyfield : + "A logic entity that could read an entity's keyfields. " + + "Use the target and key name options if you want to store a specific target and/or keyvalue. " + + "Use the 'Test' input to look for the key within the target's datadesc. " + + "The 'OutValue' output will fire with the keyfield's value if it is found." + + "\n\nPlease note that some keyvalues do not work with this entity. (most do though, so don't worry about it)" +[ + // Keys + target(target_destination) : "Target Entity" : : "The entity with the key to measure." + keyname(string) : "Key Name" : : "The name of the key to measure." + + // Inputs + input Test(void) : "Gets the stored key's value from stored target." + input TestKey(string) : "Tests the specified key against the target instead of using the stored key. Does not change the stored key." + input TestTarget(target_destination) : "Tests the specified target against the key instead of using the stored target. Does not change the stored target." + input SetKey(string) : "Sets the key to measure." + input SetValue(string) : "Sets the stored target's stored key value to the specified string." + input SetTarget(target_destination) : "Sets the target entity." + + // Outputs + output OutValue(string) : "Fires when a keyfield is found. Passes its value." + output OnFailed(void) : "Fires when this entity fails to find the specified keyfield." +] + +@PointClass base(Targetname) iconsprite("editor/logic_datadesc_accessor.vmt") = logic_datadesc_accessor : + "A logic entity that could read or write any field in an entity's data description, keyvalue or not, based on its internal name. It otherwise functions identically to logic_keyfield.\n\n" + + "You'd better know what you're doing." +[ + // Keys + target(target_destination) : "Target Entity" : : "The entity whose data description will be measured." + keyname(string) : "Element Name" : : "The internal name (e.g. m_iName) of the field to measure. Use the ''ent_info_datatable'' command followed by an entity's class name to see all of their fields." + + // Inputs + input Test(void) : "Gets the stored field's value from stored target." + input TestKey(string) : "Tests the specified field against the target instead of using the stored field. Does not change the stored field." + input TestTarget(target_destination) : "Tests the specified target against the field instead of using the stored target. Does not change the stored target." + input SetKey(string) : "Sets the field to measure." + input SetValue(string) : "Sets the stored target's stored field to the specified string." + input SetTarget(target_destination) : "Sets the target entity." + + // Outputs + output OutValue(string) : "Fires when a field is found. Passes its value." + output OnFailed(void) : "Fires when this entity fails to find the specified field." +] + +@PointClass base(Targetname) iconsprite("editor/math_clamp.vmt") = math_clamp : + "Clamps a value between two values. Supports integers, floats, and vectors." +[ + // Keys + SetMax(string) : "Max" : : "The maximum value. Can be an integer, a float, or a vector." + SetMin(string) : "Min" : : "The minimum value. Can be an integer, a float, or a vector." + + // Inputs + input ClampValue(string) : "Clamps the specified value. Can be an integer, a float, or a vector." + input SetMax(string) : "Sets the max value. Can be an integer, a float, or a vector." + input SetMin(string) : "Sets the max value. Can be an integer, a float, or a vector." + + // Outputs + output OutValue(string) : "Outputs the clamped value." + output OnBeforeMin(string) : "Fires when a clamped value was before the minimum value. Outputs the clamped value." + output OnBeyondMax(string) : "Fires when a clamped value was beyond the maximum value. Outputs the clamped value." +] + +@PointClass base(Targetname, EnableDisable) iconsprite("editor/math_bits.vmt") = math_bits : + "A math_counter variant that specializes in bitwise operations." +[ + // Keys + startvalue(integer) : "Initial Value" : 0 : "The bits this entity should start with." + + // Inputs + input Add(integer) : "Adds bit(s) to this entity's value and fires the OutValue output with the result." + input Subtract(integer): "Subtracts bit(s) to this entity's value and fires the OutValue output with the result." + input ShiftLeft(integer): "Shifts this entity's value to the left by the specified number and fires the OutValue output with the result." + input ShiftRight(integer): "Shifts this entity's value to the right by the specified number and fires the OutValue output with the result." + input SetValue(integer): "Changes this entity's value and fires the OutValue output with the result." + input SetValueNoFire(integer): "Changes this entity's value without firing any outputs." + input GetValue(void): "Causes this entity to fire its OnGetValue output with its current bits. Used for polling the current bits when you don't want constant updates from the OutValue output." + input ContainsBits(integer): "Tests whether this entity's current value contains at least one of the specified bit(s)." + input ContainsAllBits(integer): "Tests whether this entity's current value contains all of the specified bit(s)." + + // Outputs + output OutValue(integer) : "Fired when the value changes." + output OnGetValue(integer) : "Fired in response to the GetValue input. Used for polling the current bits when you don't want constant updates from the OutValue output." + output OnTrue(void) : "Fired by ContainsBits when the current value contains the specified bit." + output OnFalse(void) : "Fired by ContainsBits when the current value does not contain the specified bit." +] + +@PointClass base(Targetname, EnableDisable) iconsprite("editor/math_vector.vmt") = math_vector : + "A math_counter variant that specializes in vector operations." +[ + // Keys + startvalue(vector) : "Initial Value" : "0 0 0" : "The vector this entity shuold start with." + + // Inputs + input Add(vector) : "Adds a vector to this entity's current value and fires the OutValue output with the result." + input Divide(vector): "Divides a vector from this entity's current value and fire the OutValue output with the result." + input Multiply(vector): "Multiplies a vector from this entity's current value and fires the OutValue output with the result." + input SetValue(vector): "Sets this entity's current vector to a new value and fires the OutValue output with the result." + input SetValueNoFire(vector): "Sets this entity's current vector to a new value without firing any outputs." + input Subtract(vector): "Subtracts a vector from this entity's current value and fires the OutValue output with the result." + input GetValue(void): "Causes this entity to fire its OnGetValue output with its current vector. Used for polling the counter when you don't want constant updates from the OutValue output." + + input Normalize(void): "Normalizes this entity's vector and fires the OutValue output with the result." + + input SetX(float) : "Sets this entity's X coordinate." + input SetY(float) : "Sets this entity's Y coordinate." + input SetZ(float) : "Sets this entity's Z coordinate." + input GetX(void) : "Gets this entity's X coordinate." + input GetY(void) : "Gets this entity's Y coordinate." + input GetZ(void) : "Gets this entity's Z coordinate." + input AddX(float) : "Adds to this entity's X coordinate." + input AddY(float) : "Adds to this entity's Y coordinate." + input AddZ(float) : "Adds to this entity's Z coordinate." + input SubtractX(float) : "Subtracts from this entity's X coordinate." + input SubtractY(float) : "Subtracts from this entity's Y coordinate." + input SubtractZ(float) : "Subtracts from this entity's Z coordinate." + + // Outputs + output OutValue(vector) : "Fired when the value changes." + output OutX(float) : "Fired when the value changes, passing the resulting X coordinate." + output OutY(float) : "Fired when the value changes, passing the resulting Y coordinate." + output OutZ(float) : "Fired when the value changes, passing the resulting Z coordinate." + + output OnGetValue(vector) : "Fired in response to the GetValue input. Used for polling this entity's current value when you don't want constant updates from the OutValue output." + output OnGetX(float) : "Fired in response to the GetX input." + output OnGetY(float) : "Fired in response to the GetY input." + output OnGetZ(float) : "Fired in response to the GetZ input." +] + +@PointClass base(Targetname, EnableDisable) iconsprite("editor/math_mod.vmt") = math_mod : + "A lightweight entity that performs simple calculations on the fly without needing a complicated I/O chain. "+ + "This is useful for values that are outputted on a per-frame basis and might not work with a math_counter chain." +[ + // Keys + startvalue(string) : "Mod Value" : "0" : "The value that is applied to input values." + + SetOperator(choices) : "Operator" : 43 : "What calculation to perform with the mod value. (input value _ mod value)" = + [ + 43 : "Addition" + 45 : "Subtraction" + 42 : "Multiplication" + 47 : "Division" + ] + + // Inputs + input SetMod(string) : "Sets the mod value." + input ModInt(integer) : "Applies modification to the specified integer." + input ModFloat(float) : "Applies modification to the specified float." + input ModVector(vector) : "Applies modification to the specified vector." + input SetOperator(string): "Sets the operator. Use +, -, *, or / to choose addition, subtraction, multiplication, or division respectively." + + // Outputs + output OutInt(integer) : "Outputs the modified integer." + output OutFloat(float) : "Outputs the modified float." + output OutVector(vector) : "Outputs the modified vector." +] + +@PointClass base(Targetname, EnableDisable) size(-8 -8 -8, 8 8 8) = logic_modelinfo : + "Gets and outputs some model information from an entity." +[ + target(target_destination) : "Target" : "" : "The entity whose model will be evaluated." + + // Inputs + input SetTarget(target_destination) : "Sets this entity's target." + input GetNumSkins(void) : "Gets the number of skins on the target entity." + input LookupSequence(string) : "Looks up the specified sequence on the target entity." + + // Outputs + output OutNumSkins(integer) : "Outputs number of skins." + output OnHasSequence(integer) : "Fires when the target has the sequence requested. Outputs the sequence's index." + output OnLacksSequence(void) : "Fires when the target does not have the sequence requested." +] + +@PointClass base(Targetname, EnableDisable) size(-8 -8 -8, 8 8 8) = game_globalvars : + "Outputs a few global variables when requested." +[ + // Inputs + input GetCurtime(void) : "Gets curtime." + input GetFrameCount(void) : "Gets frame count." + input GetFrametime(void) : "Gets frame time." + input GetTickCount(void) : "Gets tick count." + input GetIntervalPerTick(void) : "Gets interval per tick." + + // Outputs + output OutCurtime(float) : "Outputs curtime." + output OutFrameCount(integer) : "Outputs frame count." + output OutFrametime(float) : "Outputs frame time." + output OutTickCount(integer) : "Outputs tick count." + output OutIntervalPerTick(integer) : "Outputs interval per tick." +] + +@PointClass base(Targetname) iconsprite("editor/logic_entity_position.vmt") = logic_entity_position : + "Outputs an entity's position. Prediction operations can be performed as well." +[ + target(target_destination) : "Target" : "" : "Who's position should be measured? Use the SetTarget input to change mid-game." + PositionType(choices) : "Position Type" : 0 : "What position should be measured." = + [ + 0 : "Origin (default)" + 1 : "Local Origin" + 2 : "Worldspace Center" + 3 : "Eyes" + 4 : "Ears" + 5 : "Attachment (use parameter keyvalue)" + ] + PositionParameter(string) : "Position Type Parameter" : "" : "If using an attachment's position, enter the name of the attachment here." + + // Inputs + input GetPosition(void) : "Gets the target's position." + input SetPosition(vector) : "Sets the target's position. Using the default 'Origin' will set absolute origin while using 'Local Origin' will set local origin." + input PredictPosition(float) : "Predicts what position the target will be at in the specified number of seconds." + + // Outputs + output OutPosition(vector) : "Outputs the position." +] + +@PointClass base(Targetname) iconsprite("editor/logic_context_accessor.vmt") = logic_context_accessor : + "A logic entity that could read an entity's response contexts. " + + "Use the target and context name keyvalues if you want to store a specific target and/or context. " + + "Use the 'Test' input to look for the context on the target. " + + "The 'OutValue' output will fire with the context's value if it is found." +[ + // Keys + target(target_destination) : "Target Entity" : : "The entity with the context to measure." + context(string) : "Context Name" : : "The name of the context to measure." + + // Inputs + input Test(void) : "Gets the stored context's value from stored target." + input TestContext(string) : "Tests the specified context against the target instead of using the stored context. Does not change the stored context." + input TestTarget(target_destination) : "Tests the specified target against the context instead of using the stored target. Does not change the stored target." + input SetContext(string) : "Sets the context to measure." + input SetValue(string) : "Sets the stored target's stored context value to the specified string." + input SetTarget(target_destination) : "Sets the target entity." + + // Outputs + output OutValue(string) : "Fires when a context is found. Passes its value." + output OnFailed(void) : "Fires when this entity fails to find the specified context." +] + +@PointClass base(Targetname, EnableDisable) iconsprite("editor/math_lightpattern.vmt") = math_lightpattern : + "A logic entity that attempts to replicate light patterns that can be used on named lights.\n\n" + + "WARNING: This is currently out of sync with default light patterns. TODO: Fix that!" +[ + // Keys + style(Choices) : "Appearance" : "" : "Which preset pattern to use." = + [ + "" : "None" + 0 : "Normal" + 10: "Fluorescent flicker" + 2 : "Slow, strong pulse" + 11: "Slow pulse, noblack" + 5 : "Gentle pulse" + 1 : "Flicker A" + 6 : "Flicker B" + 3 : "Candle A" + 7 : "Candle B" + 8 : "Candle C" + 4 : "Fast strobe" + 9 : "Slow strobe" + ] + + pattern(string) : "Custom Appearance" : : "A custom pattern to use. a = fully dark, z = fully bright. This should always contain lowercase letters for light patterns. Uppercase letters or other types of characters won't work with actual light patterns. (although they shouldn't break the whole entity either)" + + PatternSpeed(float) : "Pattern Speed" : "0.1" : "The speed of the pattern." + + // Inputs + input SetStyle(integer) : "Sets the pattern from the style presets." + input SetPattern(string) : "Sets the pattern directly." + input Enable(void) : "Enables this entity." + input Disable(void) : "Disables this entity." + input Toggle(void) : "Toggles this entity." + + // Outputs + output OutValue(float) : "Outputs with a brightness equivalent to the current letter." + output OutLetter(string) : "Outputs with the current letter itself." + output OnLightOn(void) : "Fires when the current letter is equivalnt to 'on' (greater than a)." + output OnLightOff(void) : "Fires when the current letter is equivalent to 'off' (equal to a)." +] + +@PointClass base(Targetname) iconsprite("editor/logic_sequence.vmt") = logic_sequence : + "Coordinates a sequence out of up to 16 preset values. If the input value matches " + + "the sequence's current case value, an output is fired and (by default) the sequence increments to the next case.\n\n" + + "This is intended for things like passwords in keypads, which usually demand a specific combination of numbers." +[ + InitialCase(integer) : "Initial Case" : 1 : "Which case to start on, meaning inputs will initially compare with this case. Uses the case's index. (e.g. 4 for Case 04)" + + StartDisabled(choices) : "Start Disabled" : 0 : "If this entity is disabled, it will not accept any case tests. It will still accept other inputs, like SetSequenceIndex." = + [ + 0 : "No" + 1 : "Yes" + ] + + Case01(string) : "Case 01" + Case02(string) : "Case 02" + Case03(string) : "Case 03" + Case04(string) : "Case 04" + Case05(string) : "Case 05" + Case06(string) : "Case 06" + Case07(string) : "Case 07" + Case08(string) : "Case 08" + Case09(string) : "Case 09" + Case10(string) : "Case 10" + Case11(string) : "Case 11" + Case12(string) : "Case 12" + Case13(string) : "Case 13" + Case14(string) : "Case 14" + Case15(string) : "Case 15" + Case16(string) : "Case 16" + + DontIncrementOnPass(choices) : "Suppress auto increment" : 0 : "Prevents automatically incrementing the sequence each time a case passes." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input Enable(void) : "Enables this entity." + input Disable(void) : "Disables this entity." + input Toggle(void) : "Toggles whether this entity is disabled." + input InValue(string) : "Tests the input value against the current case." + input SetCurrentCase(integer) : "Sets the sequence's current case. This will fire OutCurCase." + input SetCurrentCaseNoFire(integer) : "Sets the sequence's current case without firing OutCurCase." + input IncrementSequence(integer) : "Increments the current case by the specified number. (1 if blank)" + input ResetSequence(void) : "Resets the sequence to Case 01." + + // Outputs + output OutCurCase(integer) : "Fires each time the sequence's current case value changes, e.g. when it's incremented by a passing case." + output OnCasePass(string) : "Fires when a case is matched, passing the input value." + output OnCaseFail(string) : "Fires when a case fails, passing the input value." + output OnSequenceComplete(string) : "Fires when the last case is matched and sequence is complete." +] + +@PointClass base(Targetname) iconsprite("editor/math_generate.vmt") = math_generate : + "Continuously generates numbers using various generation modes based on material proxies." +[ + // Keys + StartDisabled(choices) : "Start Disabled" : 1 = + [ + 0 : "No" + 1 : "Yes" + ] + + GenerateType(choices) : "Generation Type" : 1 = + [ + 0 : "Sine Wave (param 1 = time offset, param 2 = sine period)" + 1 : "Linear Ramp (param 1 = rate)" + 2 : "Uniform Noise" + 3 : "Gaussian Noise (param 1 = mean, param 2 = half width)" + 4 : "Exponential (param 1 = scale, param 2 = offset)" + ] + + InitialValue(float) : "Initial Value" : 0 : "Starting value for the math_generate." + SetHitMin(float) : "Minimum Legal Value" : 0 : "Minimum legal value for generation." + SetHitMax(float) : "Maximum Legal Value" : 1 : "Maximum legal value for generation." + + SetParam1(float) : "Parameter 1" : 0 : "Multi-purpose parameter #1 for the generation algorithms to use for their own needs." + SetParam2(float) : "Parameter 2" : 0 : "Multi-purpose parameter #2 for the generation algorithms to use for their own needs." + + // Inputs + input SetValue(float): "Sets the math_generate to a new value and fires the OutValue output with the result, performing all generation from that value." + input SetValueNoFire(float): "Sets the math_generate to a new value without firing any outputs." + input SetGenerateType(integer) : "Sets the type of generation this math_generate should perform." + + input Enable(void) : "Enables this entity." + input Disable(void) : "Disables this entity." + input Toggle(void) : "Toggles whether this entity is disabled." + + // Outputs + output OutValue(string) : "Fires each tick while generation is active, passing the value continuously generated by the math_generate." +] + +// + +@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = point_ragdollboogie : + "An entity that makes ragdolls dance." +[ + spawnflags(flags) = + [ + 65536: "[65536] Electrical" : 1 + 131072: "[131072] Narrow arcs (must be electrical)" : 0 + ] + + target(target_destination) : "Boogie target(s)" : : "The one(s) that must boogie. prop_ragdolls have no hassle, but NPCs will have to break them elbows and become prop_ragdolls themselves (a.k.a. die) in order to boogie." + StartTime(float) : "Start time" : "0" : "How long after we've received the 'Activate' input should ragdolls boogie?" + BoogieLength(float) : "Boogie length" : "5.0" : "How long should the boogie last?" + Magnitude(float) : "Magnitude" : "150" : "How intense is the boogie?" + + // Inputs + input Activate(void) : "Makes the targets dance." + input Deactivate(void) : "Makes the targets stop dancing, if they're still dancing." + input SetTarget(target_destination) : "Sets the ragdoll(s) to target." + input BoogieTarget(target_destination) : "Boogies specific target(s) without using or modifying our target field." +] + +@BaseClass = DamageTypes +[ + damagetype(choices) : "Damage Type" : 0 : "The type(s) of damage associated with this entity." = + [ + 0 : "[0] GENERIC/None" + 1 : "[1] CRUSH" + 2 : "[2] BULLET" + 4 : "[4] SLASH" + 8 : "[8] BURN" + //16 : "[16] FREEZE" // This does not appear to exist. + 16 : "[16] VEHICLE" + 32 : "[32] FALL" + 64 : "[64] BLAST" + 128 : "[128] CLUB" + 256 : "[256] SHOCK" + 512 : "[512] SONIC" + 1024 : "[1024] ENERGYBEAM" + 16384: "[16384] DROWN" + 32768 : "[32768] PARALYSE" + 65536 : "[65536] NERVEGAS" + 131072 : "[131072] POISON" + 262144 : "[262144] RADIATION" + 524288 : "[524288] DROWNRECOVER" + 1048576 : "[1048576] ACID" + 2097152 : "[2097152] SLOWBURN" + //4194304 : "[4194304] SLOWFREEZE" // This does not appear to exist. + 4194304 : "[4194304] REMOVENORAGDOLL" + 16777216 : "[16777216] PLASMA" + 33554432 : "[33554432] AIRBOAT (gun)" + 67108864 : "[67108864] DISSOLVE" + 134217728 : "[134217728] BLAST_SURFACE" + 268435456 : "[268435456] DIRECT" + 536870912 : "[536870912] BUCKSHOT" + ] + + damagepresets(choices) : "Damage Presets" : 0 : "User-friendly 'presets' based on combined damage types. This is accompanied by the damage type and damage or, if they are specified." = + [ + 0 : "None" + 268435464 : "[268435464] Ignite Damage (BURN + DIRECT)" + 134217792 : "[134217792] All Blast Types (BLAST + BLAST_SURFACE)" + ] + + damageor(choices) : "Damage Or" : 0 : "Optional flags that can accompany the damage type." = + [ + 0 : "None" + 2048 : "[2048] PREVENT_PHYSICS_FORCE (no physics force)" + 4096 : "[4096] NEVERGIB (no gibs)" + 8192 : "[8192] ALWAYSGIB (always gib if possible)" + 4194304 : "[4194304] REMOVENORAGDOLL (no ragdoll on death)" + 134217728 : "[134217728] BLAST_SURFACE (no damage underwater)" + 268435456 : "[268435456] DIRECT (With burn, NPCs treat as being on fire)" + ] +] + +// So we can arrange the DamageTypes base class in point_damageinfo +@BaseClass = PointDamageInfoInit +[ + Target(target_destination) : "Target/Victim" : : "The entit(ies) that will take all of this damage. This is optional if you're only using the 'ApplyDamageToEntity' input." + Inflictor(target_destination) : "Inflictor" : : "The entity that actually supposedly dealt the damage. This isn't supposed to be the attacker as much as it's supposed to be their weapon or a projectile from their weapon." + Attacker(target_destination) : "Attacker" : : "The entity that the damage is credited to." + Weapon(target_destination) : "Weapon" : : "The weapon that did the damage. This is usually used when the inflictor would already be used for something else. For example, when the inflictor is a rocket, this would be the RPG." + + MaxEnts(integer) : "Maximum Victims" : 1 : "When ApplyDamage is called, how many entities that match the target's description should be victimized? Use 0 for no limit." + + Damage(integer) : "Damage" : 0 : "How much damage to inflict." + MaxDamage(integer) : "Max Damage" : : "Function not fully understood, likely something related to multidamage" + //DamageBonus(integer) : "Damage Bonus" : : "" // No references found, likely unused + DamageBonus(integer) : "Damage Bonus" : : "" +] + +@PointClass base(Targetname, PointDamageInfoInit, DamageTypes) iconsprite("editor/point_damageinfo.vmt") = point_damageinfo : + "Applies damage with as precise control possible." +[ + // Keys + DamageCustom(integer) : "Damage Custom" : : "Function not fully understood, likely something related to multiplayer" + MaxDamage(integer) : "Max Damage" : : "Function not fully understood, likely something related to multidamage" + //DamageBonus(integer) : "Damage Bonus" : : "" // No references found, likely unused + //DamageStats(integer) : "Damage Stats" : : "" // No references found, likely unused + ForceFriendlyFire(choices) : "Force Friendly Fire" : 0 : "Disregards friendly fire safechecks and applies the damage regardless of the attacker's relationship to the victim." = + [ + 0 : "No" + 1 : "Yes" + ] + SuppressDeathSound(choices) : "Suppress Death Sound" : 0 : "Attempts to suppress the target entity's death sound." = + [ + 0 : "No" + 1 : "Yes" + ] + DamageForce(vector) : "Damage Force" : "0 0 0" : "The force to apply when the damage is applied." + DamagePosition(vector) : "Damage Position" : "0 0 0" : "What position the damage took place." + ReportedPosition(vector) : "Reported Position" : "0 0 0" : "I have no idea what this does." + + // Inputs + input SetInflictor(target_destination) : "Sets the inflictor." + input SetAttacker(target_destination) : "Sets the attacker." + input SetWeapon(target_destination) : "Sets the weapon." + input SetDamage(integer) : "Sets the damage." + input SetMaxDamage(integer) : "Sets the max damage." + //input SetDamageBonus(integer) : "Sets the damage bonus." + input SetDamageType(integer) : "Sets the damage type." + input SetDamageCustom(integer) : "Sets the damage custom." + //input SetDamageStats(integer) : "Sets the damage stats." + input SetForceFriendlyFire(bool) : "Sets force friendly fire." + input SetAmmoType(integer) : "Sets the ammo type." + input SetDamageForce(vector) : "Sets the damage force." + input SetDamagePosition(vector) : "Sets the damage position." + input SetReportedPosition(vector) : "Sets the reported position." + input ApplyDamage(void) : "Applies damage." + input ApplyDamageToEntity(target_destination) : "Applies damage to a specific entity." + + // Outputs + output OnApplyDamage(void) : "Fires for every entity that takes our damage, using that as the activator." + output OnApplyDeath(void) : "Fires for every entity that dies from our damage, using that as the activator." +] + +@PointClass base(Targetname) iconsprite("editor/point_entity_replace.vmt") = point_entity_replace : + "An entity that replaces." +[ + Target(target_destination) : "Entity to be replaced" : : "The entity that should be replaced. This is optional if you're only using the 'ReplaceEntity' input." + ReplacementEntity(target_destination) : "Replacement Entity" : : "The entity that should serve as the replacement." + ReplacementType(choices) : "Replacement Type" : 0 : "What IS the replacement entity?" = + [ + 0 : "Specific Entity (teleports directly)" + 1 : "Classname (creates new entity)" + 2 : "Template (target is point_template, uses contents)" + 3 : "Template Relative (same as Template, keeps entities' relative position)" + 4 : "Random Template (target is point_template, uses random template)" + 5 : "Random Template Relative (same as Random Template, keeps entity's relative position)" + ] + ReplacementLocation(choices) : "Replacement Location" : 0 : "Where should the replacement entit(ies) be teleported to?" = + [ + 0 : "Target Origin" + 1 : "Target Center (WorldSpaceCenter)" + ] + + RemoveOriginalEntity(choices) : "Remove original entity" : 1 : "Removes the entity being replaced." = + [ + 0 : "No" + 1 : "Yes" + ] + + TakeTargetname(choices) : "Take Targetname" : 0 : "Causes the replacement entity to take the target's name." = + [ + 0 : "No" + 1 : "Yes" + ] + + TakeParent(choices) : "Take Parent" : 0 : "Causes the replacement entity to take the target's current parent as well as its children." = + [ + 0 : "No" + 1 : "Yes" + ] + + TakeOwner(choices) : "Take Owner" : 0 : "Causes the replacement entity to take the target's owner." = + [ + 0 : "No" + 1 : "Yes" + ] + + TakeModelStuff(choices) : "Take Model Stuff" : 0 : "Causes the replacement entity to take the target's model stuff, including render fields and animation data." = + [ + 0 : "No" + 1 : "Yes" + ] + + OtherStuff(string) : "Other Fields" : : "Specific variables that should transfer. Uses internal field names (e.g. ''m_bBoolean''), not keyvalues. This is really delicate, so be careful." + + TargetIsCaller(choices) : "Fire outputs with original entity as caller" : 0 : "If enabled, OnReplace will fire with the original entity as the caller instead of this." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input Replace(void) : "Replaces the target entity with the replacement entity." + input ReplaceEntity(target_destination) : "Replaces the specified entity with the replacement entity." + input SetTarget(target_destination) : "Sets the entity to be replaced." + input SetReplacementEntity(target_destination) : "Sets the entity to replace the target." + + // Outputs + output OnReplace(ehandle) : "Fires for each replacement we undergo, passing the replacement entity as the activator and parameter. The caller can be the replaced entity or this entity depending on this entity's settings." +] + +// TODO: TASK SUPPORT +@PointClass base(Targetname, EnableDisable) iconsprite("editor/ai_monitor.vmt") = ai_monitor : + "Monitors NPCs for conditions and schedules. " + + "You can use this entity to either watch an entity for conditions/schedules or test whether they have them. "+ + "TODO: Task support." +[ + StartDisabled(choices) : "Start Disabled" : 1 = + [ + 0 : "No" + 1 : "Yes" + ] + + Target(target_destination) : "Target NPC(s)" : : "The NPCs that should be monitored." + MaxEnts(integer) : "Maximum Targets" : 1 : "How many NPCs we're allowed to monitor. Each one will fire outputs. 0 = no limit." + SetMonitorInterval(float) : "Monitor Interval" : "0.25" : "The amount of time in between monitor checks. Use 0 to monitor each tick." + SetCooldownTime(float) : "Cooldown Time" : "1.0" : "Whenever a monitor check succeeds, how long should this entity wait before checking again? Use -1 to disable cooldown." + + CooldownAt(choices) : "Cooldown upon first success" : 0 : "While actively monitoring, engage cooldown as soon as a NPC fulfills any of the evaluators instead of checking the other NPCs and letting them fire outputs as well." = + [ + 0 : "No" + 1 : "Yes" + ] + + ConditionsSimple(choices) : "Condition" : 0 : "Which condition to monitor. Use 'Conditions (advanced)' to use conditions outside of this list or use multiple conditions." = + [ + 0 : "None" + 4 : "No ammo" + 10 : "See enemy" + 13 : "Enemy occluded" + 15 : "Have enemy LOS" + 20 : "Repeated damage" + 28 : "Enemy facing me" + 29 : "Behind enemy" + 31 : "Enemy unreachable" + 51 : "Hear thumper" + ] + Conditions(string) : "Conditions (advanced)" : : "Allows you to specify exactly which conditions to monitor, either by their actual integer ID or their string name. Separate multiple conditions with colons: 'COND_BEHIND_ENEMY:COND_ENEMY_OCCLUDED:11'" + + Schedules(string) : "Schedules (advanced)" : : "Allows you to specify exactly which schedules to monitor, either by their actual integer ID or their string name. Separate multiple schedules with colons: 'SCHED_INVESTIGATE_SOUND:SCHED_COMBAT_FACE:14'" + TranslateSchedules(choices) : "Translate shcedules" : 0 : "Translates schedules based on each NPC's behavior each time they're checked. This depends on how the NPC remaps that schedule, which may be either their own version of it or something completely different that may not be desirable. The performance impact of this setting is not known." = + [ + 0 : "No" + 1 : "Yes" + ] + + HintsSimple(choices) : "Hint Node" : 0 : "Which hint to monitor. Use 'Hints (advanced)' to use conditions outside of this list or use multiple hints." = + [ + 0 : "None" + 100: "Crouch Cover Medium" + 101: "Crouch Cover Low" + 103: "Entrance / Exit Pinch" + 104: "Guard Point" + 105: "Enemy Disadvantage Point" + 900: "Follower: Wait point" + 950: "Player Ally: Push away destination" + 951: "Player Ally: Fear withdrawal destination" + ] + Hints(string) : "Hint Nodes (advanced)" : : "Allows you to specify exactly which hints to monitor by their integer ID. Separate multiple hints with colons: '100:101:104'" + + HintDistance(float) : "Hint Distance" : "32.0" : "The maximum distance a NPC must be from their current hint node before we are allowed to check." + + // Inputs + input SetTarget(target_destination) : "Sets the NPC(s) to be monitored." + input UpdateActors(void) : "Updates the NPCs." + input Test(void) : "Tests all of the current NPCs. This entity does not have to be enabled to do this." + input TestNPC(target_destination) : "Tests the specified NPC. This entity does not have to be enabled to do this." + + input GetConditionName(integer) : "Looks up the specified condition ID and outputs its name through OutConditionName." + input GetScheduleName(integer) : "Looks up the specified schedule ID and outputs its name through OutScheduleName." + + input SetCondition(integer) : "Adds a condition." + input ClearCondition(integer) : "Removes a condition." + input ClearAllConditions(void) : "Removes all conditions." + input SetSchedule(integer) : "Sets a schedule." + input ClearSchedule(integer) : "Removes a schedule." + input ClearAllSchedules(void) : "Removes all schedules." + input SetHint(integer) : "Sets a hint." + input ClearHint(integer) : "Removes a hint." + input ClearAllHints(void) : "Removes all hints." + + // Outputs + output OutConditionName(string) : "Fires each time a condition is evaluated or a condition name is requested, outputting its actual name from its ID." + output OutScheduleName(string) : "Fires each time a schedule is evaluated or a schedule name is requested, outputting its actual name from its ID." + output OnNPCHasCondition(integer) : "Fires when a NPC has one of the conditions. Outputs the condition ID and uses the NPC as the activator. This fires for each condition on each NPC." + output OnNPCLacksCondition(integer) : "Fires when a NPC does not have one of the conditions. Outputs the condition ID and uses the NPC as the activator. This fires for each condition on each NPC." + output OnNPCRunningSchedule(integer) : "Fires when a NPC is running any of the schedules. Outputs the schedule ID and uses the NPC as the activator. This fires for each schedule on each NPC." + output OnNPCUsingHint(integer) : "Fires when a NPC is using any of the hints. Outputs the hint ID and uses the NPC as the activator. This fires for each hint on each NPC." + output OnNPCNotUsingHint(integer) : "Fires when a NPC is not using any of the hints. Outputs the hint ID and uses the NPC as the activator. This fires for each hint on each NPC." +] + +@PointClass base(Targetname) = point_copy_size : + "Copies the size of one entity to another." +[ + Source(target_destination) : "Size source" : : "The entity whose size would be measured and copied from." + Target(target_destination) : "Resize target" : : "The entity that will receive the copied size." + + SetScale(float) : "Scale" : "1" : "Multiplies the source's size by this number. Useful for bullseyes." + + // Inputs + input SetTarget(target_destination) : "Sets the resize target." + input SetSource(target_destination) : "Sets the size source." + input CopySize(void) : "Copies the source's size to the target." + input CopySizeToEntity(target_destination) : "Copies the source's size to the specified entity." + input CopySizeFromEntity(target_destination) : "Copies the specified entity's size to the target." + + // Outputs + output OnCopy(void) : "Fires each time the size is successfully copied with the target as the activator." +] + +@PointClass base(Targetname, EnableDisable) = ai_weaponmodifier : + "Modifies a NPC's weapon shot regulation." +[ + Target(target_destination) : "Target(s)" : : "The NPC(s) that will be modified by default." + + BurstInterval(string) : "Burst Interval" : "0.1:0.25" : "The range for a random amount of time the should pass between each shot in a burst. Format: 'min:max'" + RestInterval(string) : "Rest Interval" : "0.25:1.25" : "The range for a random amount of time the should pass between bursts. Format: 'min:max'" + BurstShotCountRange(string) : "Burst Shot Count Range" : "2:5" : "The range for a random amount of shots that should be fired in a bursts. Format: 'min:max'" + //BurstShotsRemaining(string) : "Burst Shots Remaining" : "2" : "How many shots are left in the current burst." + + // Inputs + input EnableOnNPC(target_destination) : "Applies weapon modification to a specific NPC." + input DisableOnNPC(target_destination) : "Stops applying weapon modification to a specific NPC." + + input SetBurstInterval(string) : "Sets the burst interval. Follows the same format as the keyvalue." + input SetRestInterval(string) : "Sets the rest interval. Follows the same format as the keyvalue." + input SetBurstShotCountRange(string) : "Sets the burst shot count range. Follows the same format as the keyvalue." + input SetBurstShotsRemaining(integer) : "Sets how many shots are left in the current burst." + + input EnableShooting(void) : "Enables shooting if it was disabled." + input DisableShooting(void) : "Disables shooting." + input FireNoEarlierThan(float) : "Causes the NPC to stop firing for this amount of time." + input Reset(bool) : "Causes the shot regulator to reset. If 1 is passed, the NPC will immediately start firing instead of waiting for the next burst interval." +] + +@PointClass base(Targetname) = env_closecaption : + "Sends a CC token via the 'Send' input. Unfortunately, this does not allow you to make your own and you can only use existing ones." +[ + flags(choices) : "Flags" : 0 : "Flags." = + [ + 1 : "Warn if missing" + 2 : "From player" + 4 : "Male" + 8 : "Female" + ] + + duration(float) : "Duration" : "2.5" : "The duration of the CC." + + // Inputs + input Send(string) : "Sends a CC." +] + +@PointClass base(Targetname) iconsprite("editor/logic_externaldata.vmt") = logic_externaldata : + "Saves and reads keyvalue data from %mapname%_externaldata.txt. Useful for when you want to read and write data across multiple playthroughs." +[ + Target(string) : "Block" : "!self" : "The key whose subkeys should be read from/written to. Using '!self' just uses this entity's name as the block name." + + SaveEachChange(choices) : "Save after each change" : 1 : "Saves each change without having to use the 'Save' input." = + [ + 0 : "No" + 1 : "Yes" + ] + + ReloadBeforeEachAction(choices) : "Reload file before each action" : 0 : "Reloads the file before each change this entity makes. This is mostly useful when there is a possibility that the file could change by other means which could be overwritten, like another logic_externaldata somewhere." = + [ + 0 : "No" + 1 : "Yes" + ] + + Mapname(string) : "Map Name" : : "logic_externaldata normally uses ''%mapname%_externaldata.txt'', but you could override the map name here to create/access external data intended for other maps. You could also just use this to write to additional external data files whether they're intended for another map or not." + + // Inputs + input WriteKeyValue(string) : "Writes the specified keyvalue. If the keyvalue already exists, it will be overwritten. If not, it will be created. Format is ' ', like AddOutput. (Spaces after the first will still be incorporated into the value)" + input RemoveKeyValue(string) : "Removes the specified key." + input ReadKey(string) : "Reads the specified key, firing OutValue with its value." + input SetBlock(string) : "Sets the block of keyvalues the logic_externaldata reads from. Using !activator or !caller uses their respective entity names." + input Save(void) : "Saves to %mapname%_externaldata.txt." + input Reload(void) : "Reloads %mapname%_externaldata.txt." + + // Outputs + output OutValue(string) : "Fires each time a key is read from. Passes the value." +] + +@PointClass base(Targetname, Parentname, Angles) iconsprite("editor/point_projectile.vmt") = point_projectile : + "An entity that fires projectiles." +[ + Target(pointentityclass) : "Projectile Classname" : "crossbow_bolt" : "The classname of the projectile." + Owner(target_destination) : "Owner Entity" : : "The projectile's owner entity, or whoever kills will be credited to." + Damage(float) : "Damage" : "100.0" : "The damage of the projectile." + Speed(float) : "Speed" : "1500" : "How fast the projectile should move." + + FireFromOwner(choices) : "Fire From Owner" : 0 : "Fires the projectile from the owner entity's origin instead of our own." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input Fire(void) : "Fires a projectile with our current angles." + input FireAtEntity(target_destination) : "Fires a projectile at a specific entity." + input FireAtPosition(vector) : "Fires a projectile at a specific position." + + input SetDamage(float) : "Sets the projectile's damage." + input SetOwnerEntity(target_destination) : "Sets the owner." + input SetSpeed(float) : "Sets the projectile's starting speed." + input SetProjectileClass(string) : "Sets the class of the projectile to spawn." + + // Outputs + output OnFire(ehandle) : "Fires each time a projectile is fired, passing the projectile as the activator. The owner entity is the caller if it exists." ] @@ -4559,15 +6208,28 @@ 0 : "Allow entities that match criteria" 1 : "Disallow entities that match criteria" ] + + PassCallerWhenTested(choices) : "Pass caller when tested" : 0 : "When tested with TestActivator or TestEntity, this causes the OnPass and OnFail outputs to use either this filter as the caller or the entity that called the test as the caller." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs - input TestActivator(void) : "Test the activator against the filter and fires OnPass or OnFail output." + input TestActivator(void) : "Tests the activator against the filter and fires the OnPass or OnFail output." + input TestEntity(target_destination) : "Tests the target entity against the specified entity and fires the OnPass or OnFail output." + input SetField(string) : "Sets this filter's primary test criteria. (e.g. the name to test against the activator)" // Outputs output OnPass(void) : "Fired in response to TestActivator input if the activator passes the filter." output OnFail(void) : "Fired in response to TestActivator input if the activator fails to pass the filter." ] +@FilterClass base(BaseFilter) iconsprite("editor/filter_generic.vmt") = filter_base : + "A filter that literally just passes as true every single time. Useful for when you...uh...want to pass something as true every single time?" +[ +] + @FilterClass base(BaseFilter) iconsprite("editor/filter_multiple.vmt") = filter_multi : "A filter that tests the activator against multiple filters. This allows you to build more complex filters, such as"+ "'Allow anyone on Team 1 who is also class engineer', or 'Allow everyone except classes npc_zombie and npc_headcrab'." @@ -4617,33 +6279,48 @@ "all entities EXCEPT those whose mass is greater than the given float will pass the filter." ] -@FilterClass base(BaseFilter) = filter_damage_type : +@FilterClass base(BaseFilter, DamageTypes) = filter_damage_type : "A damage filter that filters by the type of damage inflicted. This can only be used as a damage filter, not as an activator filter." [ - damagetype(choices) : "Damage type" : 64 : "The damage type to filter by. If the filter mode is Allow, only damage types that "+ - "match will pass the filter. If the filter mode is Disallow, all damage types EXCEPT those who match will pass the filter." = + filtertype(choices) : "Logic Type" : 1 : "Most of these are only relevant if more than one damage type is a factor." = [ - 0 : "GENERIC" - 1 : "CRUSH" - 2 : "BULLET" - 4 : "SLASH" - 8 : "BURN" - 16 : "FREEZE" - 32 : "FALL" - 64 : "BLAST" - 128 : "CLUB" - 256 : "SHOCK" - 512 : "SONIC" - 1024 : "ENERGYBEAM" - 16384: "DROWN" - 32768 : "PARALYSE" - 65536 : "NERVEGAS" - 131072 : "POISON" - 262144 : "RADIATION" - 524288 : "DROWNRECOVER" - 1048576 : "CHEMICAL" - 2097152 : "SLOWBURN" - 4194304 : "SLOWFREEZE" + 0 : "EQUAL TO (input and damage type must be equal)" + 1 : "AND (input must contain all bits in damage type)" + 2 : "OR (input must contain any bit in damage type)" + ] + + damagetype(choices) : "Damage Type" : 0 : "The type(s) of damage associated with this entity." = + [ + 0 : "[0] GENERIC" + 1 : "[1] CRUSH" + 2 : "[2] BULLET" + 4 : "[4] SLASH" + 8 : "[8] BURN" + //16 : "[16] FREEZE" // This does not appear to exist. + 16 : "[16] VEHICLE" + 32 : "[32] FALL" + 64 : "[64] BLAST" + 128 : "[128] CLUB" + 256 : "[256] SHOCK" + 512 : "[512] SONIC" + 1024 : "[1024] ENERGYBEAM" + 16384: "[16384] DROWN" + 32768 : "[32768] PARALYSE" + 65536 : "[65536] NERVEGAS" + 131072 : "[131072] POISON" + 262144 : "[262144] RADIATION" + 524288 : "[524288] DROWNRECOVER" + 1048576 : "[1048576] ACID" + 2097152 : "[2097152] SLOWBURN" + //4194304 : "[4194304] SLOWFREEZE" // This does not appear to exist. + 4194304 : "[4194304] REMOVENORAGDOLL" + 16777216 : "[16777216] PLASMA" + 33554432 : "[33554432] AIRBOAT (gun)" + 67108864 : "[67108864] DISSOLVE" + 134217728 : "[134217728] BLAST_SURFACE" + 268435456 : "[268435456] DIRECT" + 536870912 : "[536870912] BUCKSHOT" + 268435464 : "Ignite Damage (BURN + DIRECT) [268435464]" ] ] @@ -4664,10 +6341,339 @@ spawnflags(Flags) = [ - 1 : "Do not lose target if already aquired but filter failed." : 0 + 1 : "[1] Do not lose target if already aquired but filter failed." : 0 ] ] +@FilterClass base(BaseFilter) iconsprite("editor/filter_model.vmt") = filter_activator_model : + "A filter that filters by the model of the activator." +[ + filtermodel(studio) : "Filter Model" : : "The model to filter by. If the filter mode is Allow, only entities whose "+ + "model matches the given string will pass the filter. If the filter mode is Disallow, "+ + "all entities EXCEPT those whose model matches the given string will pass the filter." + + skin(string) : "Skin" : -1 : "Some models have multiple versions of their textures, called skins. Use this if you want to filter by skins as well. If you want any skin to be allowed, be sure to leave this at -1! It might automatically change when you choose a model." +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_context.vmt") = filter_activator_context : + "A filter that filters by the response contexts of the activator." +[ + ResponseContext(string) : "Filter Context" : : "The context(s) to filter by. Syntax is 'key:value,key:value'. "+ + "Values in this field can use wilcards. For example, if this filter contains 'lastname:*', it will pass any entity with the context 'lastname', regardless of its value. "+ + "Wildcards do not apply to context names and you cannot define the same context multiple times, but inputs like AddContext or RemoveContext can be used to add to the filter context." + + any(choices) : "Pass if entity has any of these contexts" : 0 : "Should this filter only pass if the entity contains all of these contexts or can it pass if the entity has at least one of them?" = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input AddContext(string) : "Adds a context to this fitler's list of response contexts. The format should be 'key:value'." + input RemoveContext(string) : "Remove a context from this filter's list of response contexts. The name should match the 'key' of a previously added context." + input ClearContext(void) : "Removes all contexts in this filter's list of response contexts." +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_generic2.vmt") = filter_activator_squad : + "A filter that filters by the squad of the activator." +[ + filtername(string) : "Filter Squad" : : "The squad name to filter by. If the filter mode is Allow, only entities who are "+ + "in the squad of the given string will pass the filter. If the filter mode is Disallow, "+ + "all entities EXCEPT those who are in the squad of the given string will pass the filter." + + allowsilentmembers(choices) : "Allow Silent Members" : 1 : "Allows silent squad members to pass the filter. Silent squad members are enemy finders and vital allies in player_squad." = + [ + 0 : "No" + 1 : "Yes" + ] +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_generic2.vmt") = filter_activator_hintgroup : + "A filter that filters by the hintgroup of the activator." +[ + filtername(string) : "Filter Hintgroup" : : "The hintgroup to filter by. If the filter mode is Allow, only entities who have "+ + "the given hintgroup will pass the filter. If the filter mode is Disallow, "+ + "all entities EXCEPT those who have the given hintgroup will pass the filter." + + hintlimiting(choices) : "Hint Limit Nav" : 2 : "If set to Yes, only entities who are limiting navigation to their hintgroup will be allowed. "+ + "If set to No, only entities who are *not* limiting navigation to their hintgroup will be allowed. "+ + "If set to Don't Care, entities will pass regardless of the their navigational limits as long as they match the hintgroup."= + [ + 0 : "No" + 1 : "Yes" + 2 : "Don't Care" + ] +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_keyfield.vmt") = filter_activator_keyfield : + "A filter that filters by the activator's keyfields." +[ + keyname(string) : "Key" : : "The key name to filter by. Please note that certain keyvalues, particularly "+ + "targetnames and base values related to clientside rendering (e.g. render mode), cannot be found by this filter." + + value(string) : "Value (Optional)" : : "The key value to filter by. If empty, the filter will pass if the entity just has the keyfield." +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_relationship.vmt") = filter_activator_relationship : + "A filter that filters by the activator's relationship with another entity. Please note that any entity incapable of supporting relationships is automatically passed if this filter is set to 'Neutral'." +[ + target(target_destination) : "Subject" : : "The entity whose relationships we should test with. If empty, the entity using the filter will be used." + + rank(string) : "Priority" : : "The priority the subject should have with the target. If empty, priority will be disregarded." + disposition(choices) : "Disposition" : 3 : "What relationship the subject should have with the activator." = + [ + 1 : "Hate" + 2 : "Fear" + 3 : "Like" + 4 : "Neutral" + ] + + inverttarget(choices) : "Invert Subject" : 0 : "Should we use the activator's relationship to the subject instead?" = + [ + 0 : "No" + 1 : "Yes" + ] + + Reciprocal(choices) : "Reciprocal" : 0 : "Should we only pass if both entities have the same relationship with each other? Makes 'Invert Subject' useless." = + [ + 0 : "No" + 1 : "Yes" + ] +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_classify.vmt") = filter_activator_classify : + "A filter that filters by the Class_T of the activator." +[ + filterclassify(choices) : "Filter Classify" : 0 : "The class to filter by. If the filter mode is Allow, only entities whose "+ + "class matches the given class will pass the class filter. If the filter mode is Disallow, "+ + "all entities EXCEPT those whose class matches the given class will pass the class filter." = + [ + 0 : "CLASS_NONE" + 1 : "CLASS_PLAYER" + 2 : "CLASS_PLAYER_ALLY (Citizens)" + 3 : "CLASS_PLAYER_ALLY_VITAL (Alyx, Dr. Kleiner, GameEndAlly vorts, etc.)" + 4 : "CLASS_ANTLION" + 5 : "CLASS_BARNACLE" + 6 : "CLASS_BULLSEYE (npc_bullseyes)" + 7 : "CLASS_CITIZEN_PASSIVE (pre-criminal citizens)" + //8 : "CLASS_CITIZEN_REBEL (Unused)" + 9 : "CLASS_COMBINE (Soldiers, turrets, etc.)" + 10 : "CLASS_COMBINE_GUNSHIP (Gunships, helicopters, dropships)" + //11 : "CLASS_CONSCRIPT (Unused)" + 12 : "CLASS_HEADCRAB" + 13 : "CLASS_MANHACK" + 14 : "CLASS_METROPOLICE" + //15 : "CLASS_MILITARY (Unused)" + 16 : "CLASS_SCANNER" + 17 : "CLASS_STALKER" + 18 : "CLASS_VORTIGAUNT (Non-vital vortigaunts only)" + 19 : "CLASS_ZOMBIE" + 20 : "CLASS_PROTOSNIPER (npc_snipers)" + 21 : "CLASS_MISSILE" + 22 : "CLASS_FLARE" + 23 : "CLASS_EARTH_FAUNA (crows, seagulls, etc.)" + 24 : "CLASS_HACKED_ROLLERMINE" + 25 : "CLASS_COMBINE_HUNTER" + ] +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_involume.vmt") = filter_activator_involume : + "A filter that tests whether the activator is within a volume." +[ + target(target_destination) : "Volume" : : "The volume to be tested with. This filter passes if the activator is within this volume. Intended to be a brush entity. (e.g. a trigger)" + + tester(target_destination) : "Volume Tester" : "!activator" : "Who should be in the volume for the filter to pass?" +] + +@FilterClass base(BaseFilter) iconsprite("editor/filter_generic.vmt") = filter_activator_surfacedata : + "A filter that tests the activator's surface data." +[ + filtersurfaceprop(choices) : "Surface" : : "The surface to test with." = + [ + "metal" : "Metal" + "metalgrate" : "Metal Grate" + "metalvent" : "Metal Vent" + ] + + SurfaceType(choices) : "Type" : 1 : "What to actually filter by." = + [ + 0 : "Surface Prop" + 1 : "Game Material" + ] +] + +//------------------------------------------------------------------------- +//------------------------------------------------------------------------- + +@BaseClass base(BaseFilter) = BaseRedirectFilter +[ + damagefilter(filterclass) : "Target Filter" : "" : "The filter to pass to. You can also use the 'SetField' input." + input SetField(target_destination) : "Sets the filter to pass to." +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_redirect.vmt") = filter_redirect_inflictor : + "A filter that passes the inflictor of damage (e.g. the crossbow bolt instead of the crossbow user) to a separate filter." +[ +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_redirect.vmt") = filter_redirect_weapon : + "A filter that passes the activator's weapon OR the weapon causing damage to a separate filter, depending on what this filter is filtering." +[ +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_redirect.vmt") = filter_redirect_owner : + "A filter that passes the activator's owner entity to a separate filter." +[ +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_damage_transfer.vmt") = filter_damage_transfer : + "Whenever an entity using this as a damage filter takes damage, that damage is transferred to another entity. The entity using this filter will not take the damage unless a secondary filter is specified and passed or caller damage is allowed. All damage information including force, type, attacker, etc. should be retained during the transfer and it obeys the target entity's own damage filters." +[ + target(target_destination) : "Transfer Target" : "" : "The name of the entity/entities that will receive the damage. Please note that this complies with their own damage filters." + input SetTarget(target_destination) : "Sets the transfer target." + + AdjustDamagePosition(choices) : "Adjust Damage Position" : 0 : "Adjusts the damage position to be relative to the target entity." = + [ + 0 : "No" + 1 : "Yes" + ] + + MaxEntities(integer) : "Max Entities" : 1 : "The maximum number of entities matching the criteria who can be damaged. 0 = no limit. (0 is actually changed to 2048 internally, but don't worry about that)" + + CallerDamageAllowed(choices) : "Caller Damage Allowed" : 0 : "Sets whether the caller using this filter is allowed to take the transferred damage as well." = + [ + 0 : "No" + 1 : "Yes" + ] + + damagefilter(filterclass) : "Secondary Filter" : "" : "A secondary filter that can be used for certain things. See the Secondary Filter Mode for different ways you can use this. This is optional." + SecondaryFilterMode(choices) : "Secondary Filter Mode" : 0 : "How should the secondary filter be used?" = + [ + 0 : "Must pass to damage caller (if damage is allowed)" + 1 : "Must pass to transfer damage to targets" + 2 : "Each transfer target must pass" + ] + + input SetField(target_destination) : "Sets the secondary filter." +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_blood_control.vmt") = filter_blood_control : + "A filter that controls the blood an entity emits. Must be used as a damage filter to work properly." +[ + BloodDisabled(choices) : "Blood Disabled" : 0 : "Sets whether blood shouldn't be produced by damage. Overrides the secondary filter, if any." = + [ + 0 : "No" + 1 : "Yes" + ] + + damagefilter(filterclass) : "Secondary Filter" : "" : "An optional secondary filter that can be used for either whose damage could produce blood or as a real damage filter for whether any damage should be taken at all." + SecondaryFilterMode(choices) : "Secondary filter is damage filter" : 0 : "Sets whether the secondary filter should be treated as a redirected damage filter (must pass to take actual damage) instead of just permitting blood." = + [ + 0 : "No" + 1 : "Yes" + ] + + input SetField(target_destination) : "Sets the secondary filter." + + input DisableBlood(void) : "Disables blood." + input EnableBlood(void) : "Enables blood if it was previously disabled." +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_damage_mod.vmt") = filter_damage_mod : + "A filter that modifies damage taken by an entity." +[ + SetDamageMultiplier(float) : "Damage Multiplier" : "1.0" : "Multiplies the damage by this scale." + SetDamageAddend(float) : "Damage Addend" : "0" : "Adds to or subtracts the damage by this number. This is done after the damage is multiplied by the damage scale." + + NewAttacker(string) : "New Attacker" : : "If specified, the damage will be credited to this entity instead of the original attacker." + NewInflictor(string) : "New Inflictor" : : "If specified, the damage's inflictor will be changed to this entity instead of the original inflictor." + NewWeapon(string) : "New Weapon" : : "If specified, the damage's weapon will be changed to this entity instead of the original weapon." + + damagefilter(filterclass) : "Secondary Filter" : "" : "An optional secondary filter that can be used for either whose damage could be modified or as a real damage filter for whether any damage should be taken at all." + SecondaryFilterMode(choices) : "Secondary Filter Mode" : 0 : "Sets whether the secondary filter should be treated as a redirected damage filter (must pass to take actual damage) instead of just permitting modification." = + [ + 0 : "Must pass to damage caller (and therefore mod damage)" + 1 : "Must pass to modify damage (others use the original damage)" + 2 : "Attackers must pass to modify damage" + ] + + input SetDamageMultiplier(float) : "Sets the damage multiplier." + input SetDamageAddend(float) : "Sets the damage addend." + + input SetNewAttacker(target_destination) : "Sets the new attacker." + input SetNewInflictor(target_destination) : "Sets the new inflictor." + input SetNewWeapon(target_destination) : "Sets the new weapon." + + input SetField(target_destination) : "Sets the secondary filter." +] + +@FilterClass base(BaseRedirectFilter) iconsprite("editor/filter_damage_logic.vmt") = filter_damage_logic : + "A filter that fires outputs based on received damage information." +[ + damagefilter(filterclass) : "Secondary Filter" : "" : "An optional secondary filter that can be used as an actual damage filter, which damage to operate with, etc." + SecondaryFilterMode(choices) : "Secondary Filter Mode" : 0 : "Sets how the secondary filter should be treated." = + [ + 0 : "Use as a regular damage filter; must pass to fire outputs" + 1 : "Use as a regular damage filter, but fire outputs even if it fails" + 2 : "Use only to permit outputs, failed damage is dealt anyway" + ] + + input SetField(target_destination) : "Sets the secondary filter." + + // Outputs + output OutInflictor(ehandle) : "Outputs the damage inflictor." + output OutAttacker(ehandle) : "Outputs the damage attacker." + output OutWeapon(ehandle) : "Outputs the damage weapon." + + output OutDamage(float) : "Outputs the damage." + output OutMaxDamage(float) : "Outputs the max damage." + output OutBaseDamage(float) : "Outputs the base damage." + + output OutDamageType(integer) : "Outputs the damage type." + output OutDamageCustom(integer) : "Outputs the damage custom." + output OutDamageStats(integer) : "Outputs the damage stats." + output OutAmmoType(integer) : "Outputs the ammo type." + + output OutDamageForce(vector) : "Outputs the damage force." + output OutDamagePosition(vector) : "Outputs the damage position." + + output OutForceFriendlyFire(bool) : "Outputs whether the damage info forces friendly fire." +] + +//------------------------------------------------------------------------- +// +//------------------------------------------------------------------------- + +@PointClass base(Targetname) iconsprite("editor/mapbase_manifest.vmt") color(239 163 14) = mapbase_manifest : "Mounts additional manifest files" +[ + // Keys + target(string) : "Manifest File" : : "The manifest file to load. Keep in mind ''maps/%mapname%_manifest.txt'' is always loaded automatically without this entity." + + spawnflags(Flags) = + [ + 1 : "[1] Start Activated" : 1 + ] + + // Inputs + input Activate(void) : "Loads the manifest file if it hasn't been loaded already." +] + +// Was mapbase_convar_mod +@PointClass base(Targetname) iconsprite("editor/convar_mod.vmt") color(239 163 14) = game_convar_mod : "Mods cvars" +[ + // Keys + target(string) : "ConVars" : "" : "The convars to modify. Multiple cvars can be modded with ';', e.g. 'host_timescale 0.25; npc_alyx_interact_manhacks 1'" + + spawnflags(Flags) = + [ + 1 : "[1] Start Activated" : 1 + ] + + // Inputs + input Activate(void) : "Begins modding the cvars." + input Deactivate(void) : "Stops modding the cvars." +] + //------------------------------------------------------------------------- // // Point Entities @@ -4684,7 +6690,7 @@ spawnflags(Flags) = [ - 1 : "Use target entity's angles (NOT position)" : 0 + 1 : "[1] Use target entity's angles (NOT position)" : 0 ] // Inputs @@ -4754,7 +6760,7 @@ spawnflags(Flags) = [ - 1 : "Test the distance as measured along the axis specified by our direction." : 0 + 1 : "[1] Test the distance as measured along the axis specified by our direction." : 0 ] // Inputs @@ -4773,48 +6779,23 @@ target(target_destination) : "Entity To Teleport" : : "Name of the entity that will be teleported." spawnflags(flags) = [ - 1 : "Teleport Home" : 0 - 2 : "Into Duck (episodic)" : 0 + 1 : "[1] Teleport Home" : 0 + 2 : "[2] Into Duck (episodic)" : 0 ] // Inputs input Teleport(void) : "Teleport the target entity." ] -@PointClass base(Targetname) sphere(DamageRadius) = point_hurt : +@PointClass base(Targetname, Parentname, DamageTypes) sphere(DamageRadius) = point_hurt : "An entity that does damage to all entities in a radius around itself, with a specified delay." + "If 'Target Entity' is specified, the damage is only done to that entity." [ - DamageTarget(string) : "Target Entity" : "" : "If specified, only this entity will take damage. Otherwise, all entities within the Radius will take damage." + DamageTarget(target_destination) : "Target Entity" : "" : "If specified, only this entity will take damage. Otherwise, all entities within the Radius will take damage." DamageRadius(float) : "Radius" : 256 : "All entities within this radius of this entity will take damage. If a 'Target Entity' is specified, only that entity will take damage." Damage(integer) : "Damage" : 5 : "Damage done to all affected entities each time this entity fires." DamageDelay(float) : "Delay" : 1 : "Delay between refires, in seconds." - - DamageType(choices) : "Damage Type" : 0 : "Type of damage to inflict on entities damaged." = - [ - 0 : "GENERIC" - 1 : "CRUSH" - 2 : "BULLET" - 4 : "SLASH" - 8 : "BURN" - 16 : "FREEZE" - 32 : "FALL" - 64 : "BLAST" - 128 : "CLUB" - 256 : "SHOCK" - 512 : "SONIC" - 1024 : "ENERGYBEAM" - 16384: "DROWN" - 32768 : "PARALYSE" - 65536 : "NERVEGAS" - 131072 : "POISON" - 262144 : "RADIATION" - 524288 : "DROWNRECOVER" - 1048576 : "CHEMICAL" - 2097152 : "SLOWBURN" - 4194304 : "SLOWFREEZE" - ] // Inputs input Hurt(void) : "Force a single fire, damaging either the Target Entity or all entities within the radius." @@ -4850,18 +6831,18 @@ _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." spawnflags(flags) = [ - 4096 : "Start Asleep" : 0 - 8192 : "Ignore +USE for Pickup" : 0 - 16384 : "Debris - Don't collide with the player or other debris" : 0 - 32768 : "Motion Disabled" : 0 - 65536 : "Use Preferred Carry Angles" : 0 - 131072: "Enable motion on Physcannon grab" : 0 - 262144: "Not affected by rotor wash" : 0 - 524288: "Generate output on +USE " : 1 - 1048576 : "Physgun can ALWAYS pick up. No matter what." : 0 - 2097152 : "Physgun is NOT allowed to pick this up." : 0 - 4194304 : "Physgun is NOT allowed to punt this object." : 0 - 8388608: "Prevent motion enable on player bump" : 0 + 4096 : "[4096] Start Asleep" : 0 + 8192 : "[8192] Ignore +USE for Pickup" : 0 + 16384 : "[16384] Debris - Don't collide with the player or other debris" : 0 + 32768 : "[32768] Motion Disabled" : 0 + 65536 : "[65536] Use Preferred Carry Angles" : 0 + 131072: "[131072] Enable motion on Physcannon grab" : 0 + 262144: "[262144] Not affected by rotor wash" : 0 + 524288: "[524288] Generate output on +USE " : 1 + 1048576 : "[1048576] Physgun can ALWAYS pick up. No matter what." : 0 + 2097152 : "[2097152] Physgun is NOT allowed to pick this up." : 0 + 4194304 : "[4194304] Physgun is NOT allowed to punt this object." : 0 + 8388608: "[8388608] Prevent motion enable on player bump" : 0 ] Damagetype(choices) : "Impact Damage Type" : 0 = @@ -4888,6 +6869,7 @@ input EnableMotion(void) : "Enable physics motion/collision response." input DisableMotion(void) : "Disable physics motion/collision response." input ForceDrop(void) : "If this object is being carried by a player, with the physgun or +USE, force it to be dropped." + input SetDebris(bool) : "Sets whether this brush is debris." // Outputs output OnDamaged(void) : "Fired when this entity is damaged." @@ -4904,11 +6886,11 @@ [ spawnflags(flags) = [ - 1: "No Collision until break" : 0 + 1: "[1] No Collision until break" : 0 // 2 is defined independently by subclasses, do not reuse - 4: "Start inactive" : 0 - 8: "Change mass to keep stable attachment to world" : 0 - 16: "Do not connect entities until turned on" : 0 + 4: "[4] Start inactive" : 0 + 8: "[8] Change mass to keep stable attachment to world" : 0 + 16: "[16] Do not connect entities until turned on" : 0 ] attach1(target_destination) : "Entity 1" : "" attach2(target_destination) : "Entity 2" : "" @@ -4939,7 +6921,7 @@ [ spawnflags(flags) = [ - 1: "Start inactive" : 0 + 1: "[1] Start inactive" : 0 ] attach1(target_destination) : "Target Entity" : "" : "The entity to align to the desired angles." @@ -4956,24 +6938,24 @@ model(studio) : "World model" : "models/fire_equipment/w_weldtank.mdl" spawnflags(flags) = [ - 1 : "Start Asleep" : 0 - 2 : "Explodes" : 1 + 1 : "[1] Start Asleep" : 0 + 2 : "[2] Explodes" : 1 ] - expdamage(string) : "Explosion Damage" : "200.0" : "The amount of damage done by the explosion created when the cannister blows up." - expradius(string) : "Explosion Radius" : "250.0" : "The radius of the explosion to create when the cannister blows up." + expdamage(string) : "Explosion Damage" : "128.0" : "The amount of damage done by the explosion created when the cannister blows up." + expradius(string) : "Explosion Radius" : "256.0" : "The radius of the explosion to create when the cannister blows up." health(integer) : "Health" : 25 : "The amount of damage the cannister takes before exploding." thrust(string) : "Thrust" : "3000.0" : "When the cap has been blown off, and the escaping gas is thrusting the cannister about, this is the amount of thrust generated." fuel(string) : "Fuel Seconds" : "12.0" : "The amount of time that gas leaks from the cannister before being considered empty." rendercolor(color255) : "Smoke Color (R G B)" : "255 255 255" renderamt(integer) : "Smoke Alpha (0 - 255)" : 128 - gassound(sound) : "Thruster Sound" : "ambient/objects/cannister_loop.wav" : "The sound played when the gas is escaping from the cannister." + gassound(sound) : "Thruster Sound" : "TODO_REPLACE_WITH_SOUNDSCRIPT_FOR_MAPBASE_PLEASE" : "The sound played when the gas is escaping from the cannister." // Inputs - input Activate(string) : "Start gas escaping from the cannister." - input Deactivate(string) : "Stop gas escaping from the cannister." - input Explode(string) : "Force the cannister to explode." + input Activate(void) : "Start gas escaping from the cannister." + input Deactivate(void) : "Stop gas escaping from the cannister." + input Explode(void) : "Force the cannister to explode." input Wake(void) : "Wakes up the cannister, if it is sleeping." // Outputs @@ -5003,7 +6985,7 @@ [ spawnflags(flags) = [ - 1 : "Force only on stretch" : 0 + 1 : "[1] Force only on stretch" : 0 ] attach1(target_destination) : "Entity 1" : "" @@ -5037,18 +7019,18 @@ //// Episodic only -- for now. - minSoundThreshold(float) : "Minimum Sound Velocity" : "6" : "When travelling below this many units/sec, will not play any sound." - maxSoundThreshold(float) : "Full Sound Velocity" : "80" : "When travelling at this speed or above, will play sound at full volume." - slidesoundfwd(sound) : "Travel sound (forward)" : "" : "Play this sound when travelling forward on helper axis" - slidesoundback(sound) : "Travel sound (backward)" : "" : "Play this sound when travelling backward on helper axis" + minSoundThreshold(float) : "Minimum Sound Velocity" : "6" : "Episodic only. When travelling below this many units/sec, will not play any sound." + maxSoundThreshold(float) : "Full Sound Velocity" : "80" : "Episodic only. When travelling at this speed or above, will play sound at full volume." + slidesoundfwd(sound) : "Travel sound (forward)" : "" : "Episodic only. Play this sound when travelling forward on helper axis" + slidesoundback(sound) : "Travel sound (backward)" : "" : "Episodic only. Play this sound when travelling backward on helper axis" - reversalsoundthresholdSmall(float) : "Reversal sound threshold (small)" : "0" : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the small reversal sound." - reversalsoundthresholdMedium(float) : "Reversal sound threshold (medium)" : "0" : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the medium reversal sound." - reversalsoundthresholdLarge(float) : "Reversal sound threshold (large)" : "0" : "When accelerating by more than this many units/sec^2 opposite to direction of travel, play the large reversal sound." + reversalsoundthresholdSmall(float) : "Reversal sound threshold (small)" : "0" : "Episodic only. When accelerating by more than this many units/sec^2 opposite to direction of travel, play the small reversal sound." + reversalsoundthresholdMedium(float) : "Reversal sound threshold (medium)" : "0" : "Episodic only. When accelerating by more than this many units/sec^2 opposite to direction of travel, play the medium reversal sound." + reversalsoundthresholdLarge(float) : "Reversal sound threshold (large)" : "0" : "Episodic only. When accelerating by more than this many units/sec^2 opposite to direction of travel, play the large reversal sound." - reversalsoundSmall(sound) : "Reversal sound (small)" : "" : "Play this sound when making a hard reverse over the small threshold but less than medium" - reversalsoundMedium(sound) : "Reversal sound (medium)" : "" : "Play this sound when making a hard reverse over the medium threshold but less than large" - reversalsoundLarge(sound) : "Reversal sound (large)" : "" : "Play this sound when making a hard reverse over the large threshold" + reversalsoundSmall(sound) : "Reversal sound (small)" : "" : "Episodic only. Play this sound when making a hard reverse over the small threshold but less than medium" + reversalsoundMedium(sound) : "Reversal sound (medium)" : "" : "Episodic only. Play this sound when making a hard reverse over the medium threshold but less than large" + reversalsoundLarge(sound) : "Reversal sound (large)" : "" : "Episodic only. Play this sound when making a hard reverse over the large threshold" ] @PointClass base(TwoObjectPhysics) iconsprite("editor/phys_ballsocket.vmt") = phys_ballsocket : @@ -5073,8 +7055,8 @@ position2(vecline) : "Pulley Position 2" : : "The position of the pulley for Entity 2. The pulley for Entity 1 is the origin of this constraint entity. Entity 1 is always suspended from pulley point 1, and Entity 2 is always suspended from pulley point 2." spawnflags(flags) = [ - 1: "No Collision until break" : 1 - 2: "Keep Rigid" : 0 + 1: "[1] No Collision until break" : 1 + 2: "[2] Keep Rigid" : 0 ] ] @@ -5083,8 +7065,8 @@ [ spawnflags(flags) = [ - 1: "No Collision until break" : 1 - 2: "Limit Endpoints" : 0 + 1: "[1] No Collision until break" : 1 + 2: "[2] Limit Endpoints" : 0 ] slideaxis(vecline) : "Sliding Axis" slidefriction(float) : "Friction" : "0" : "Resistance/friction in the constraint" @@ -5118,8 +7100,8 @@ attachpoint(vecline) : "Attached object 2 point" : "The position the rope attaches to object 2" spawnflags(flags) = [ - 1: "No Collision until break" : 1 - 2: "Keep Rigid" : 0 + 1: "[1] No Collision until break" : 1 + 2: "[2] Keep Rigid" : 0 ] ] @@ -5128,8 +7110,8 @@ [ spawnflags(flags) = [ - 1: "No Collision until break" : 1 - 2: "Only limit rotation (free movement)" : 0 + 1: "[1] No Collision until break" : 1 + 2: "[2] Only limit rotation (free movement)" : 0 ] xmin(float) : "X axis min limit" : "-90" : "-180 min and 180 max = no constraint on this axis." @@ -5148,18 +7130,25 @@ [ spawnflags(flags) = [ - 1: "Convert Asleep" : 0 - 2: "Convert As Debris" : 0 + 1: "[1] Convert Asleep" : 0 + 2: "[2] Convert As Debris" : 0 ] target(target_destination) : "Entity to convert" : : "Name of the entity that will be converted to a physics object when the ConvertTarget input is fired." - swapmodel(string) : "Model Swap Entity" + swapmodel(target_destination) : "Model Swap Entity" massoverride(float) : "Mass Override" : "0" : "Sets the mass when the object(s) are converted (0 means auto-calculate)" + + SetConversionType(choices) : "Conversion Type" : 0 : "How this phys_convert should convert objects." = + [ + 0 : "Simple (simple_physics_prop, simple_physics_brush)" + 1 : "Conventional (prop_physics, func_physbox)" + ] // Outputs output OnConvert(void) : "Fires after the conversion has taken place." // Inputs input ConvertTarget(void) : "Converts this entity's target to a physically simulated object." + input SetConversionType(integer) : "Sets this entity's conversion type. 0 = Simple, 1 = Conventional" ] @BaseClass base(Targetname) = ForceController @@ -5167,15 +7156,15 @@ spawnflags(flags) = [ // Thrust is on by default (will turn off in forcetime) - 1: "Start On" : 0 + 1: "[1] Start On" : 0 // Apply linear force (if off, torque only) - 2: "Apply Force" : 1 + 2: "[2] Apply Force" : 1 // Apply rotational force (torque - if off, linear only) - 4: "Apply Torque" : 1 + 4: "[4] Apply Torque" : 1 // Maintain local relationship with the attached object - 8: "Orient Locally" : 1 + 8: "[8] Orient Locally" : 1 // Impulse is independent of object's mass (impulse is acceleration NOT force) - 16: "Ignore Mass" : 0 + 16: "[16] Ignore Mass" : 0 ] attach1(target_destination) : "Attached Object" : "" : "Object to apply the force to." @@ -5186,7 +7175,7 @@ input Scale(string) : "Set Force Scale" ] -@PointClass base(Angles, ForceController) = phys_thruster : +@PointClass base(ForceController, Angles) = phys_thruster : "An entity used to apply constant acceleration to a physics object. "+ "The force and torque is calculated using the position and direction of the thruster as an impulse. So moving those off the object's center "+ "will cause torque as well. Torque can be removed by unchecking the 'apply torque' flag. The position of the thruster can be forced to be "+ @@ -5195,7 +7184,7 @@ spawnflags(flags) = [ // Put the thrust at the object center - 32: "Ignore Pos" : 0 + 32: "[32] Ignore Pos" : 0 ] force(string) : "Force" : "0" : "Force (will be integrated, units are force kg*in/s^2)" @@ -5220,13 +7209,13 @@ spawnflags(flags) = [ // starts on by default - 1: "Start On" : 1 + 1: "[1] Start On" : 1 // Disable world collisions on hinges - 2: "No world collision" : 0 + 2: "[2] No world collision" : 0 // motor also acts as a hinge constraining the object to this axis - 4: "Hinge Object" : 1 + 4: "[4] Hinge Object" : 1 // Maintain local relationship with the attached object (NOT WORKING YET) -// 8: "Orient Locally" : 1 +// 8: "[8] Orient Locally" : 1 ] attach1(target_destination) : "Attached Object" : "" : "Object to apply the force to" @@ -5241,11 +7230,12 @@ [ spawnflags(flags) = [ - 1 : "Start Asleep" : 0 - 2 : "Motion Disabled" : 0 - 4 : "Suck On Touch" : 0 - 8 : "Allow Attached Rotation" : 0 - 16: "Coast jeep pickup hack" : 0 + 1 : "[1] Start Asleep" : 0 + 2 : "[2] Motion Disabled" : 0 + 4 : "[4] Suck On Touch" : 0 + 8 : "[8] Allow Attached Rotation" : 0 + 16: "[16] Coast jeep pickup hack" : 0 + 32: "[32] Prevent player pickup" : 0 ] forcelimit(float) : "Force Limit to Break (lbs)" : "0" : "The amount of force necessary to break a stuck object off the magnet. A way of calculating this is to set it to the mass of an object that would break this constraint if it were resting on the magnet." @@ -5339,8 +7329,9 @@ spawnflags(flags) = [ - 64 : "Use Hitboxes for Renderbox" : 0 - 256 : "Start with collision disabled" : 0 + 64 : "[64] Use Hitboxes for Renderbox" : 0 + 128 : "[128] No VPhysics (must start with collisions disabled)" : 0 + 256 : "[256] Start with collision disabled" : 0 ] DefaultAnim(string) : "Default Animation" : "" : "The name of the idle animation that this prop will revert to whenever it finishes a random or forced animation." @@ -5361,14 +7352,15 @@ ] // Inputs - input SetAnimation(string) : "Force the prop to play an animation. The parameter should be the name of the animation." - input SetDefaultAnimation(string) : "Set the Default Animation to the one specified in the parameter." - input SetPlaybackRate(float) : "Set the playback rate for the animation." - input SetBodyGroup(integer) : "Set the visible bodygroup, by index." - input TurnOn(void) : "Make the prop visible." - input TurnOff(void) : "Make the prop invisible." - input EnableCollision(void) : "Enable collision on the prop." - input DisableCollision(void) : "Disable collision on the prop." + input SetAnimation(string) : "Forces the prop to play an animation. The parameter should be the name of the animation." + input SetDefaultAnimation(string) : "Sets the Default Animation to the one specified in the parameter." + input SetPlaybackRate(float) : "Sets the playback rate for the current animation." + input SetCycle(float) : "Sets the cycle the current animation." + input SetBodyGroup(integer) : "Sets the visible bodygroup, by index." + input TurnOn(void) : "Makes the prop visible." + input TurnOff(void) : "Makes the prop invisible." + input EnableCollision(void) : "Enables collision on the prop." + input DisableCollision(void) : "Disables collision on the prop." // Outputs output OnAnimationBegun(void) : "Fired whenever a new animation has begun playing." @@ -5407,18 +7399,21 @@ [ spawnflags(flags) = [ - 1 : "Start Asleep" : 0 - 2 : "Don't take physics damage" : 0 - 4 : "Debris - Don't collide with the player or other debris" : 0 - 8 : "Motion Disabled" : 0 - 64 : "Enable motion on Physcannon grab" : 0 - 128 : "Not affected by rotor wash" : 0 - 256 : "Generate output on +USE " : 1 - 512 : "Prevent pickup" : 0 - 1024: "Prevent motion enable on player bump" : 0 - 4096: "Debris with trigger interaction" : 0 - 8192: "Force server-side (Multiplayer only)" : 0 - 1048576: "Physgun can ALWAYS pick up. No matter what." : 0 + 1 : "[1] Start Asleep" : 0 + 2 : "[2] Don't take physics damage" : 0 + 4 : "[4] Debris - Don't collide with the player or other debris" : 0 + 8 : "[8] Motion Disabled" : 0 + 64 : "[64] Enable motion on Physcannon grab" : 0 + 128 : "[128] Not affected by rotor wash" : 0 + 256 : "[256] Generate output on +USE " : 1 + 512 : "[512] Prevent pickup" : 0 + 1024: "[1024] Prevent motion enable on player bump" : 0 + 4096: "[4096] Debris with trigger interaction" : 0 + 8192: "[8192] Force server-side (Multiplayer only)" : 0 + 16384: "[16384] Radius pickup (easer to pickup)" : 0 + 1048576: "[1048576] Physgun can ALWAYS pick up. No matter what." : 0 + 2097152: "[2097152] No collisions" : 0 + 8388608: "[8388608] Zombies can't swat" : 0 ] minhealthdmg(integer) : "Min Damage to Hurt" : 0 : "The prop will ignore any damage events if the damage is less than this amount." @@ -5456,6 +7451,7 @@ input DisableDamageForces(void) : "Damaging the entity does *not* apply physics forces to it." input EnablePuntSound(void) : "Allow this prop to play its own sound when punted" input DisablePuntSound(void) : "Prevent this prop from playing its own sound when punted" + input SetDebris(bool) : "Sets whether this prop is debris." // Outputs output OnMotionEnabled(void) : "Fired when motion is enabled on this prop, either via 'Health Level to Override Motion' or from the EnableMotion input." @@ -5471,9 +7467,29 @@ @PointClass base(BasePropPhysics) studioprop() sphere(fademindist) sphere(fademaxdist) = prop_physics_override : "A prop that physically simulates as a single rigid body. It can be constrained to other physics objects using hinges "+ - "or other constraints. It can also be configured to break when it takes enough damage. Health can be overridden on this version." + "or other constraints. It can also be configured to break when it takes enough damage. Props not meant to be used with prop_physics (dynamic or static props) can be used with this and it can also override health or interactions." [ - health(integer) : "Health" : 0 : "Number of points of damage to take before breaking. 0 means don't break." + health(integer) : "Health" : 0 : "Number of points of damage to take before breaking. 0 means don't break. Use -1 to use default health, which could be 0 depending on the model." + + InitialInteractions(choices) : "Interaction Override" : "" : "Overrides this prop's default interactions. If you want to combine them, enter each number with a space or comma in between. (e.g. '1 5 7')" = + [ + "": "None" + "0": "0 : When punted: Stick to world (sawblades)" + "1": "1 : When punted: Break on impact (explosive barrels)" + "2": "2 : When punted: Paint surfaces (paint cans)" + "3": "3 : When punted: Impale (harpoons)" + "4": "4 : When punted: Don't spin" + "5": "5 : When punted: Spin on Z axis (sawblades, propellers)" + "6": "6 : When broken: Gas explosion (propane tanks, gas cans)" + "7": "7 : When punted: No damage on impact" + "8": "8 : Fire: Flammable" + "9": "9 : Fire: Explosive resistant (only ignites from nearby explosions, no damage, e.g. explosive barrels)" + "10": "10 : Fire: Ignite on half health (explosive barrels)" + //"11": "11 : Flare" // This is what prop_flare is for + "12": "12 : Allow player to hold directly overhead" + ] + + preferredcarryangles(angle) : "Preferred Player-carry Angles" : "0" : "The angle which the object should orient to when the player picks it up with the physgun or +USE. Overrides the prop's own QC carry angles if it has any. '0' doesn't override the carry angles." // Inputs input Ignite(void) : "Ignite, burst into flames." @@ -5509,20 +7525,27 @@ ] ] -@PointClass base(Angles, Targetname, Studiomodel, DXLevelChoice, BaseFadeProp, EnableDisable) sphere(fademindist) sphere(fademaxdist) studioprop() = prop_ragdoll : +@PointClass base(BasePropPhysics, RenderFields) studioprop() sphere(radius) = prop_sphere : "Creates a perfect sphere." +[ + radius(float) : "Radius" : 12 : "" +] + +@PointClass base(Angles, Targetname, Studiomodel, DXLevelChoice, BaseFadeProp, EnableDisable, RenderFields) sphere(fademindist) sphere(fademaxdist) studioprop() = prop_ragdoll : "A prop that physically simulates and can be articulated with internal joints. The joint constraints are part of the physics model." [ spawnflags(flags) = [ - 4 : "Debris - Don't collide with the player or other debris" : 1 - 8192 : "Allow Dissolve" : 0 - 16384 : "Motion Disabled" : 0 - 32768 : "Allow stretch" : 0 - 65536 : "Start asleep" : 0 + 4 : "[4] Debris - Don't collide with the player or other debris" : 1 + 8192 : "[8192] Allow Dissolve" : 0 + 16384 : "[16384] Motion Disabled" : 0 + 32768 : "[32768] Allow stretch" : 0 + 65536 : "[65536] Start asleep" : 0 ] angleOverride(string) : "Override Animation" : "" : "Filled in by the engine via wc_update_entity, do not edit by hand except to clear." input StartRagdollBoogie(void) : "Begins ragdoll boogie effect. Parameter override = number of seconds to boogie." + input Wake(void) : "Wakes up this physics object, if it is sleeping." + input Sleep(void) : "Puts this physics object to sleep. It will wake if given the Wake input, or if force is applied to it. Note that physics objects go to sleep automatically after coming to rest for a while, so you don't really need to use this." input EnableMotion(void) : "Enable physics motion/collision response." input DisableMotion(void) : "Disable physics motion/collision response." input FadeAndRemove(float) : "Fade out then remove (kill) self. Parameter override = duration of fade" @@ -5543,6 +7566,26 @@ input Detach(string) : "Detach from the Target Entity and become invisible. The ornament can be re-attached with the SetAttached input." ] +@PointClass base(Targetname, Angles, Studiomodel) studioprop() = simple_physics_prop : + "A simple physics prop with no unique properties. Model-based entities converted by phys_convert are turned into this entity. See prop_physics for more options." +[ + spawnflags(flags) = + [ + 1 : "[1] Start Asleep" : 0 + 4 : "[4] Debris - Don't collide with the player or other debris" : 0 + ] +] + +@SolidClass base(Targetname) = simple_physics_brush : + "A simple physics brush with no unique properties. Brush-based entities converted by phys_convert are turned into this entity. See func_physbox for more options." +[ + spawnflags(flags) = + [ + 4096 : "[4096] Start Asleep" : 0 + 16384 : "[16384] Debris - Don't collide with the player or other debris" : 0 + ] +] + //------------------------------------------------------------------------- // // Solid Entities @@ -5570,6 +7613,23 @@ input Toggle(void) : "Toggle the open/closed state of the portal." ] +@SolidClass base(func_areaportal) color(0 255 255) = func_areaportal_oneway : "An areaportal that is only open when viewed from one direction." +[ + origin_(origin) readonly : "Origin" : : "Point from which the areaportal's location is determined (they are a special case and cannot use the normal value). Read-only." + group(string) : "One-way group" : : "Optimisation: oneway portals in the same group share a single closed/open state. Use this, for example, on walls full of one-way windows." + onewayfacing(angle) : "Open direction" : "0 0 0" : "The portal will be open when the player is within 90 degrees of this direction." + avoidpop(choices) : "Avoid latency pop" : 0 : "Enable this if it becomes noticeable that the portal stays closed momentarily after the player walks past it. The portal will open 80 units in advance." = + [ + 0 : "No" + 1 : "Yes" + ] + + input DisableOneWay(void) : "Disable the one-way behaviour of the portal." + input EnableOneWay(void) : "Enable the one-way behaviour of the portal." + input ToggleOneWay(void) : "Toggle the one-way behaviour of the portal." + input InvertOneWay(void) : "Flip the one-way direction." +] + @SolidClass base(Targetname) color(0 255 255) = func_occluder : "A occluder brush used to manage dynamic visibility in maps. Occluders are used to dynamically " + "determine what things are behind them, to prevent trying to draw them at all." @@ -5601,8 +7661,8 @@ [ spawnflags(Flags) = [ - 1 : "Physics damage decals" : 0 - 2 : "Take damage from held objects" : 0 + 1 : "[1] Physics damage decals" : 0 + 2 : "[2] Take damage from held objects" : 0 ] health(integer) : "Health" : 5 : "The amount of damage the surface takes before breaking." fragility(integer) : "Fragility" : 100 : "If the 'Surface Type' is set to Glass, this value sets how fragile the glass pieces are after the surface has been broken." @@ -5622,8 +7682,8 @@ movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction conveyor moves." spawnflags(flags) = [ - 1 : "No Push" : 0 - 2 : "Not Solid" : 0 + 1 : "[1] No Push" : 0 + 2 : "[2] Not Solid" : 0 ] speed(string) : "Conveyor Speed" : "100" _minlight(string) : "Minimum Light Level" : : "The minimum level of ambient light that hits this brush." @@ -5670,7 +7730,7 @@ [ spawnflags(flags) = [ - 1 : "Starts Invisible" : 0 + 1 : "[1] Starts Invisible" : 0 ] // Inputs @@ -5683,8 +7743,8 @@ //[ // spawnflags(flags) = // [ -// 1 : "Starts Open" : 0 -// 256:"Use Only" : 0 +// 1 : "[1] Starts Open" : 0 +// 256:"[256] Use Only" : 0 // ] // movedir(angle) : "Move Direction (Pitch Yaw Roll)" : "0 0 0" : "The direction the water will move when it is told to 'Open'." // WaveHeight(string) : "Wave Height" : "3.0" @@ -5760,12 +7820,12 @@ height(integer) : "Travel Altitude" : 0 : "The vertical height above the track that the train moves. Negative values moves the train below." spawnflags(flags) = [ - 1: "Auto Activate train" : 0 - 2: "Relink track" : 0 - 8: "Start at Bottom" : 0 - 16: "Rotate Only" : 0 - 64: "X Axis" : 0 - 128: "Y Axis" : 0 + 1: "[1] Auto Activate train" : 0 + 2: "[2] Relink track" : 0 + 8: "[8] Start at Bottom" : 0 + 16: "[16] Rotate Only" : 0 + 64: "[64] X Axis" : 0 + 128: "[128] Y Axis" : 0 ] rotation(integer) : "Spin amount" : 0 : "The amount this platform should rotate as it moves, in degrees." train(target_destination) : "Train to Switch" // NEEDHELP @@ -5778,13 +7838,13 @@ [ spawnflags(flags) = [ - 1 : "No Pitch (X-rot)" : 0 - 2 : "No User Control" : 0 - 8 : "Passable" : 0 - 16 : "Fixed Orientation" : 0 - 128 : "HL1 Train" : 0 - 256 : "Use max speed for pitch shifting move sound" : 0 - 512 : "Is unblockable by player" : 0 + 1 : "[1] No Pitch (X-rot)" : 0 + 2 : "[2] No User Control" : 0 + 8 : "[8] Passable" : 0 + 16 : "[16] Fixed Orientation" : 0 + 128 : "[128] HL1 Train" : 0 + 256 : "[256] Use max speed for pitch shifting move sound" : 0 + 512 : "[512] Is unblockable by player" : 0 ] target(target_destination) : "First Stop Target" : "" : "The name of the first path_track in the train's path. The train " + @@ -5880,7 +7940,7 @@ ManualDecelSpeed(float) : "Manual Decel Speed" : 0 : "Units per second to decelerate to target speed." input SetSpeedDirAccel(float) : "Accel/Decel to the specified speed, as a ratio of max speed. Negative values reverse the direction [-1, 1]" - input TeleportToPathTrack(string) : "Teleport train to the designated path track." + input TeleportToPathTrack(target_destination) : "Teleport train to the designated path track." input SetSpeedForwardModifier(float) : "Applies the given modifier to all forward speeds. [0, 1]" ] @@ -5922,13 +7982,13 @@ [ spawnflags(Flags) = [ - 1: "Disabled" : 0 - 2: "Fire once" : 0 - 4: "Branch Reverse" : 0 - 8: "Disable train" : 0 - 16: "Teleport to THIS path track" : 0 - 32: "Part of an uphill path" : 0 - 64: "Part of a downhill path" : 0 + 1: "[1] Disabled" : 0 + 2: "[2] Fire once" : 0 + 4: "[4] Branch Reverse" : 0 + 8: "[8] Disable train" : 0 + 16: "[16] Teleport to THIS path track" : 0 + 32: "[32] Part of an uphill path" : 0 + 64: "[64] Part of a downhill path" : 0 ] target(target_destination) : "Next Stop Target" : : "The next path_track in the path." @@ -5979,7 +8039,7 @@ @SolidClass base(Targetname) = trigger_autosave : "A trigger volume that autosaves when the player touches it." [ - master(string) : "Master" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + master(target_destination) : "Master" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." NewLevelUnit(choices) : "Force New Level Unit" : 0 : "If set, the save will discard any savedata from previous levels, for the purpose of keeping savegame filesizes down. Can only be safely used if there is no way for the player to return to previous levels." = [ 0 : "No" @@ -6004,8 +8064,8 @@ landmark(target_destination) : "Landmark Name" spawnflags(flags) = [ - 2: "Disable Touch" : 0 - 4: "To Previous Chapter" : 0 + 2: "[2] Disable Touch" : 0 + 4: "[4] To Previous Chapter" : 0 ] // Inputs @@ -6026,10 +8086,10 @@ [ spawnflags(flags) = [ - // Remove this after maps fixed up: - 16: "(OBSOLETE, Uncheck me)" : 0 - 128: "Disable auto player movement" : 1 - 2048: "Auto-duck while in trigger" : 0 + 128: "[128] Disable auto player movement" : 1 + 2048: "[2048] Auto-duck while in trigger" : 0 + 4096: "[4096] Auto-walk while in trigger" : 0 + 8192: "[8192] Disable jump while in trigger" : 0 ] ] @@ -6043,36 +8103,12 @@ soundscape(target_source) : "Soundscape" ] -@SolidClass base(Trigger, Targetname) = trigger_hurt : +@SolidClass base(Trigger, Targetname, DamageTypes) = trigger_hurt : "A trigger volume that damages entities that touch it." [ - master(string) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." + //master(target_destination) : "Master (Obsolete)" : : "Legacy support: The name of a master entity. If the master hasn't been activated, this entity will not activate." damage(integer) : "Damage" : 10 : "The amount of damage done to entities that touch this trigger. The damage is done every half-second. See also 'Damage Model' for extra details on how damage can be dealt." damagecap(integer) : "Damage Cap" : 20 : "Maximum damage dealt per second. This field is only used if you select the Doubling w/Forgiveness damage model, via the spawnflag." - damagetype(choices) : "Damage Type" : 0 = - [ - 0 : "GENERIC" - 1 : "CRUSH" - 2 : "BULLET" - 4 : "SLASH" - 8 : "BURN" - 16 : "FREEZE" - 32 : "FALL" - 64 : "BLAST" - 128 : "CLUB" - 256 : "SHOCK" - 512 : "SONIC" - 1024 : "ENERGYBEAM" - 16384: "DROWN" - 32768 : "PARALYSE" - 65536 : "NERVEGAS" - 131072 : "POISON" - 262144 : "RADIATION" - 524288 : "DROWNRECOVER" - 1048576 : "CHEMICAL" - 2097152 : "SLOWBURN" - 4194304 : "SLOWFREEZE" - ] damagemodel(choices) : "Damage Model" : 0 : "How damage is dealt. Normal always does the specified amount of damage each half second. Doubling starts with the specified amount and doubles it each time it hurts the toucher. Forgiveness means that if the toucher gets out of the trigger the damage will reset to the specified value. Good for making triggers that are deadly over time without having to cause massive damage on each touch." = [ @@ -6086,6 +8122,8 @@ 1 : "Yes" ] + hurtrate(float) : "Hurt Rate" : "0.5" : "Touchers will be hurt every X seconds while in this trigger_hurt." + // Inputs input SetDamage(float) : "Set a new amount of damage for this trigger." @@ -6107,14 +8145,10 @@ [ wait(integer) : "Delay Before Reset" : 1 : "Amount of time, in seconds, after the trigger_multiple has triggered before it can be triggered again. If set to -1, it will never trigger again (in which case you should just use a trigger_once)." - // Inputs - input TouchTest(void) : "Tests if the trigger is being touched and fires an output based on whether the value is true or false." - + // Touch test stuff is now on all trigger entities. // Outputs output OnTrigger(void) : "Fired whenever the trigger is activated." - output OnTouching(void) : "Fired when the TestTouch input is true (something is touching the trigger.)" - output OnNotTouching(void) : "Fired when the TestTouch input is not true (nothing is touching the trigger.)" ] @SolidClass base(TriggerOnce) = trigger_once : @@ -6134,14 +8168,20 @@ [ spawnflags(flags) = [ - 128: "Fire Once" : 1 - 256: "Use Velocity instead of facing" : 0 + 128: "[128] Fire Once" : 1 + 256: "[256] Use Velocity instead of facing" : 0 ] target(target_destination) : "Look Target" : : "The name of the entity to be looked at." LookTime(string) : "LookTime" : "0.5" : "The time, in seconds, that the player must look the target before firing the output. Resets if player leaves trigger, or looks outside the Field of View threshold." FieldOfView(string) : "FieldOfView" : "0.9" : "How close the player has to be looking at the target. 1.0 = straight ahead\n 0.0 = +/- 90 degrees\n -1.0 = all directions)." Timeout(float) : "Timeout" : "0" : "The time, in seconds, to wait after player enters the trigger before firing the OnTimeout output, 0 = never." + + UseLOS(choices) : "Require LOS" : 0 : "If enabled, the player must have full LOS to the target entity in order to count as ''looking''." = + [ + 0 : "No" + 1 : "Yes" + ] // Output output OnTrigger(void) : "Fired when the trigger is activated." @@ -6155,8 +8195,8 @@ spawnflags(flags) = [ - 128: "Once Only" : 0 - 256: "Affects Ladders (Half-Life 2)" : 0 + 128: "[128] Once Only" : 0 + 256: "[256] Affects Ladders (Half-Life 2)" : 0 ] speed(integer) : "Speed of Push" : 40 : "The speed at which to push entities away, in inches / second." @@ -6215,10 +8255,25 @@ landmark(target_destination) : "Local Destination Landmark" : : "If specified, then teleported entities are offset from the target by their initial offset from the landmark." spawnflags(flags) = [ - 32: "Preserve angles even when a local landmark is not specified" : 0 + 32: "[32] Preserve angles even when a local landmark is not specified" : 0 + + // Reckless... + 64: "[64] Everything (not including physics debris)" : 0 + 512: "[512] Only clients *not* in vehicles" : 0 + 1024: "[1024] Physics debris" : 0 + 2048: "[2048] Only NPCs in vehicles (respects player ally flag)" : 0 + 4096: "[4096] Disallow Bots" : 0 ] ] +@SolidClass base(Trigger) = trigger_teleport_relative : + "A trigger volume that teleports entities that touch it to their current position relative to the given offset. "+ + "Their angles stay the same, but velocity is reset. "+ + "Use trigger_teleport for more complicated teleporting operations." +[ + teleportoffset(vector) : "Teleport Offset" : "0 0 0" : "The offset." +] + @SolidClass base(Targetname) = trigger_transition : "A volume that's used to control which entities go through the level transition. Create one or more trigger_transitions and "+ "give them the same name as the changelevel landmark. Any entities within the trigger_transition(s) will go to the next map."+ @@ -6226,11 +8281,21 @@ [ ] -@SolidClass base(Targetname) = trigger_serverragdoll : +@SolidClass base(TriggerOnce) = trigger_serverragdoll : "A volume that forces any NPC inside it to create a server side ragdoll instead of a client one." [ ] +@SolidClass base(TriggerOnce) = trigger_fall : + "A trigger that causes the player to die the moment they touch the ground as long as they are inside of this volume." +[ + StayLethal(choices) : "Stay Lethal" : 0 : "Causes players who touch this trigger to be marked for death by fall damage even after they leave the volume." = + [ + 0 : "No" + 1 : "Yes" + ] +] + @@ -6287,7 +8352,86 @@ PointCamera(target_destination) : "Camera Name" : : "The name of a point_camera entity in the map that the material should be rendered from." // Inputs - input SetCamera(string) : "Set the camera to use. The parameter should be the name of a point_camera entity in the map." + input SetCamera(target_destination) : "Set the camera to use. The parameter should be the name of a point_camera entity in the map." +] + + +//------------------------------------------------------------------------- +// Used to listen to events called from code +//------------------------------------------------------------------------- + +@PointClass base(Targetname) = logic_eventlistener : + "An entity that can listen to events fired from code and fire " + + "an output when it happens." +[ + EventName(string) : "Event Name" : "" : "The name of the event that you want to listen for." + + StartDisabled(choices) : "Start Disabled" : 0 = + [ + 0 : "No" + 1 : "Yes" + ] + + //TeamNum(choices) : "Team Number" : -1 : "If set, will only fire its output if the event is generated from someone of the specified team." = + //[ + // -1 : "Don't care" + // 1 : "Team 1" + // 2 : "Team 2 (ORANGE)" + // 3 : "Team 3 (BLUE)" + //] + + // Inputs + input Enable(void) : "Enables this entity." + input Disable(void) : "Disables this entity." + input Toggle(void) : "Toggles this entity." + + // Outputs + output OnEventFired(void) : "Fires when the event has been detected." +] + +@PointClass base(logic_eventlistener) = point_event : + "An entity that can listen to events fired from code and fire " + + "an output when it happens." +[ + EventName(string) : "Event Name" : "" : "The names of the events that you want to listen for. Separated by colon. (e.g. player_hurt:game_init)" + + KeyName01(string) : "Key Name 01" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName02(string) : "Key Name 02" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName03(string) : "Key Name 03" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName04(string) : "Key Name 04" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName05(string) : "Key Name 05" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName06(string) : "Key Name 06" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName07(string) : "Key Name 07" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + KeyName08(string) : "Key Name 08" : "" : "A keyvalue name to search for in detected events. If an event contains this key, then this entity will fire its respective OutValue output with the value." + + StartDisabled(choices) : "Start Disabled" : 0 = + [ + 0 : "No" + 1 : "Yes" + ] + + //TeamNum(choices) : "Team Number" : -1 : "If set, will only fire its output if the event is generated from someone of the specified team." = + //[ + // -1 : "Don't care" + // 1 : "Team 1" + // 2 : "Team 2 (ORANGE)" + // 3 : "Team 3 (BLUE)" + //] + + // Inputs + input SetAllEvents(string) : "Sets all events using the keyvalue's : format. Pass nothing to clear all events." + input AddEvent(string) : "Adds an event to this entity." + + // Outputs + output OutEventName(string) : "Outputs the detected event's name in case this entity is listening for multiple events." + output OutValue01(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue02(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue03(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue04(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue05(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue06(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue07(string) : "Passes the value found in its respective keyname when an event is fired." + output OutValue08(string) : "Passes the value found in its respective keyname when an event is fired." ] @@ -6303,21 +8447,120 @@ MeasureReference(target_destination) : "Measure Reference" : "" : "The movement of Entity to Measure will be measured relative to this entity." Target(target_destination) : "Entity to Move" : "" : "This entity will be moved to mimic the motions of Entity to Measure." TargetReference(target_destination) : "Movement Reference" : "" : "The Entity to Move will move relative to this entity." - TargetScale(float) : "Movement scale" : "1" : "A scale to divide the measured movements by, before applying those movements to the Entity to Move. 1 = target entity moves as much as the measured entity, 2 = target entity moves half as far as the measured entity, and 0.5 = target entity moves twice as far as the measured entity." + TargetScale(float) : "Movement scale" : "1" : "A scale to *divide* the measured movements by before applying those movements to the Entity to Move. 1 = target entity moves as much as the measured entity, 2 = target entity moves half as far as the measured entity, and 0.5 = target entity moves twice as far as the measured entity." + ShouldOutputPosition(choices) : "Fire position outputs" : 0 : "Allows OutPosition and OutAngles to be fired with the resulting position while this entity is active. Does not apply to the GetPosition input." = + [ + 0 : "No" + 1 : "Yes" + ] MeasureType(choices) : "Measurement Type" : 0 = [ 0 : "Position" 1 : "Eye position" + 2 : "Attachment point" + //3 : "Aim position" + ] + + spawnflags(Flags) = + [ + 1 : "[1] Ignore X" : 0 + 2 : "[2] Ignore Y" : 0 + 4 : "[4] Ignore Z" : 0 + 8 : "[8] Use 'Ignore' flags for origin instead of angles" : 0 + 16 : "[16] Use new teleportation rules (smoother movement)" : 1 + ] + + MeasureAttachment(string) : "Measurement Attachment" : "" : "Only useful for the ''Attachment point'' measurement type. This attachment should be on the Entity to Measure and measurements will correspond to its position and angles." + + // Inputs + input SetMeasureTarget(target_destination) : "Set the Entity to Measure, whose movement should be measured." + input SetMeasureReference(target_destination) : "Set the Measure Reference entity." + input SetTarget(target_destination) : "Set the Entity to Move, which will be moved to mimic the measured entity." + input SetTargetReference(target_destination) : "Set the Movement Reference entity." + input SetTargetScale(float) : "Set the scale to divide the measured movements by." + input SetMeasureType(integer) : "Sets the measurement type." + input SetMeasureAttachment(string) : "Sets the measurement attachment." + input ShouldOutputPosition(bool) : "Sets whether we are allowed to fire position outputs while this entity is active." + input GetPosition(void) : "Initiates a single measurement with the current settings, only firing OutPosition and OutAngles without moving anything. (it doesn't need a target to be available)\n"+ + "This input ignores the 'Fire position outputs' keyvalue and instead repurposes it to modify who the outputs' activator should be.\n"+ + "If 'Fire position outputs' is enabled, the target will be used as the activator if it is available.\n"+ + "If 'Fire position outputs' is disabled, the activator that fired GetPosition will be used instead." + input Enable(void) : "Enable the logic_measure_movement." + input Disable(void) : "Disable the logic_measure_movement." + + // Outputs + output OutPosition(vector) : "Outputs the resulting position when allowed." + output OutAngles(vector) : "Outputs the resulting angles when allowed." +] + +@PointClass base(logic_measure_movement) = logic_mirror_movement : + "An entity that can measure the direction of an entity relative to another entity " + + "and apply the position the entity is looking at to a third entity." +[ + MeasureTarget(target_destination) : "Entity to Measure" : "" : "Entity whose movement you want to measure. (Remote target)" + MeasureReference(target_destination) : "Measure Reference" : "" : "The movement of Entity to Measure will be mirrored relative to this entity. (Mirror relative)" + Target(target_destination) : "Entity to Move" : "" : "This entity will be mirrored across the motions of Entity to Measure. (Movement target)" + TargetReference(target_destination) : "Movement Reference" : "" : "The Entity to Move will be mirrored relative to this entity. (Mirror target)" +] + +@PointClass base(logic_measure_movement, Angles) sphere(TraceDistance) = logic_measure_direction : + "An entity that can measure the direction of an entity relative to another entity " + + "and apply the position the entity is looking at to a third entity." +[ + MeasureTarget(target_destination) : "Entity to Measure" : "" : "Entity whose direction you want to measure." + MeasureReference(target_destination) : "Measure Reference" : "" : "The direction of Entity to Measure will be measured from this entity." + Target(target_destination) : "Entity to Move" : "" : "This entity will be moved in the direction of the Entity to Measure." + TargetReference(target_destination) : "Movement Reference" : "" : "The Entity to Move will move relative to this entity." + TargetScale(float) : "Trace scale" : "1" : "A scale to *divide* the distance between the Entity to Measure and the trace's endpoint by before applying those movements to the Entity to Move. 1 = target entity moves to the end of the trace, 2 = target entity moves to the middle of the trace (half as far), and 0.5 = target entity moves twice as far as the trace." + MeasureType(choices) : "Measurement Type" : 0 : "How should the direction be measured?" = + [ + 0 : "Angles" + 1 : "Eye angles" + 2 : "Attachment point angles" + //3 : "Aim angles" + ] + + TraceDistance(float) : "Trace distance" : "8192" : "The maximum distance that the trace can go. 0 = no limit." + Mask(choices) : "Trace Mask" : 1174421507 : "How the measurement tracing should act in regards to what it should collide with." = + [ + 33570827 : "MASK_SOLID (Anything solid)" + 33636363 : "MASK_PLAYERSOLID (Anything solid + player clip)" + 33701899 : "MASK_NPCSOLID (Anything solid + NPC clip)" + 16432 : "MASK_WATER (Water volumes)" + 16513 : "MASK_OPAQUE (Anything opaque, e.g. windows)" + 16449 : "MASK_BLOCKLOS (Anything that blocks line of sight)" + 1174421507 : "MASK_SHOT (Anything that would be hit by a bullet)" + ] + + CollisionGroup(choices) : "Collision Group" : 0 : "The collision group the measurement tracing should use." = + [ + 0 : "None" + ] + + damagefilter(filterclass) : "Trace Filter" : "" : "A filter to use for tracing." + HitIfPassed(choices) : "Trace Filter behavior" : 0 : "What the filter should actually be used for." = + [ + 0 : "If pass, don't hit" + 1 : "If pass, hit" + ] + + TraceTargetReference(choices) : "Additional trace from movement reference" : 0 : "Initiates another trace from the Movement Reference using the existing properties and adjusts the position to its end point. Only use this if the Movement Reference is different from the Measure Reference." = + [ + 0 : "No" + 1 : "Yes" ] // Inputs - input SetMeasureTarget(string) : "Set the Entity to Measure, whose movement should be measured." - input SetMeasureReference(string) : "Set the Measure Reference entity." - input Target(string) : "Set the Entity to Move, which will be moved to mimic the measured entity." - input SetTargetReference(string) : "Set the Movement Reference entity." + input SetMeasureTarget(target_destination) : "Set the Entity to Measure, whose movement should be measured." + input SetMeasureReference(target_destination) : "Set the Measure Reference entity." + input SetTarget(target_destination) : "Set the Entity to Move, which will be moved to mimic the measured entity." + input SetTargetReference(target_destination) : "Set the Movement Reference entity." input SetTargetScale(float) : "Set the scale to divide the measured movements by." - input Enable(void) : "Enable the logic_measure_movement." - input Disable(void) : "Disable the logic_measure_movement." + input SetMeasureType(integer) : "Sets the measurement type." + input SetMeasureAttachment(string) : "Sets the measurement attachment." + input Enable(void) : "Enable the logic_measure_direction." + input Disable(void) : "Disable the logic_measure_direction." + input SetTraceFilter(target_destination) : "Sets the entity to use as the trace filter. Pass in an empty string to clear the trace filter." ] @@ -6334,9 +8577,11 @@ input EnablePlayerCollision(void) : "Enable collisions against the player." ] -@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = env_credits : +@PointClass base(Targetname) iconsprite("editor/env_credits.vmt") = env_credits : "An entity to control the rolling credits." [ + CreditsFile(string) : "Custom Credits File" : : "Allows a custom credits file to be loaded instead of the default 'scripts/credits.txt'." + // Inputs input RollCredits(void) : "Start the intro credits rolling." input RollOutroCredits(void) : "Start the outro credits rolling." @@ -6369,19 +8614,75 @@ @PointClass base(Angles) studioprop("models/editor/camera.mdl") = point_devshot_camera : "An entity used by the -makedevshots system, which automatically takes screenshots at the position of every devshot camera in the level." [ - cameraname(string) : "Camera Name" : "" : "Used as the name of the directory to store screenshots from this camera. Must be unique within the level." + cameraname(target_destination) : "Camera Name" : "" : "Used as the name of the directory to store screenshots from this camera. Must be unique within the level." FOV(integer) : "Camera FOV" : 75 : "FOV of this camera." ] -@PointClass base(Targetname, DamageFilter) size(-8 -8 -8, 8 8 8) = logic_playerproxy : +// These are I/O/KV on the player itself. They're exposed through logic_playerproxy as it now passes unknown inputs and KV to the player. +@BaseClass base(CombatCharacterFields) = PlayerProxyPlayer +[ + // Inputs + input SetBodyGroup(integer) : "HACK: Sets this player's body group (from 0 - n). You'd better know what you are doing!" + input Ignite(void) : "Ignite, burst into flames" + input IgniteLifetime(float) : "Ignite, with a parameter lifetime." + input IgniteNumHitboxFires(integer) : "Ignite, with a parameter number of hitbox fires." + input IgniteHitboxFireScale(float) : "Ignite, with a parameter hitbox fire scale." + + input GiveWeapon(string) : "Gives the player a weapon of the specified class name." + input DropWeapon(string) : "Causes the player to drop its current weapon in front of it." + + input AddArmor(integer) : "Adds to the player's current armor value. Total armor cannot exceed 100 unless a different value is set in logic_playerproxy." + input RemoveArmor(integer) : "Removes from the player's current armor value." + input SetArmor(integer) : "Sets the player's current armor value. Cannot exceed 100 unless a different value is set in logic_playerproxy." + + input AddAuxPower(float) : "Adds to the player's current aux power. Total power cannot exceed 100." + input RemoveAuxPower(float) : "Removes from the player's current aux power. Total power cannot exceed 100." + input SetAuxPower(float) : "Sets the player's current aux power. Total power cannot exceed 100." + + input TurnFlashlightOn(void) : "Turns the player's flashlight on." + input TurnFlashlightOff(void) : "Turns the player's flashlight off." + + input SquadForceSummon(void) : "Forces the player's squad to be resummoned." + input SquadForceGoTo(target_destination) : "Forces the player's squad to go to a specific point or entity." + + input EnableGeigerCounter(void) : "Allows the player's geiger counter to respond to radiation if it was prevented before." + input DisableGeigerCounter(void) : "Prevents the player's geiger counter from responding to radiation." + + input ShowSquadHUD(void) : "Shows the player's squad status HUD if it was hidden before." + input HideSquadHUD(void) : "Hides the player's squad status HUD." + + input SetHUDVisibility(bool) : "Sets whether the HUD should be disabled. Also disables most forms of weapon switching." + input SetSuppressAttacks(bool) : "Sets whether attacks should be suppressed." +] + +@PointClass base(Targetname, DamageFilter, PlayerProxyPlayer) iconsprite("editor/logic_playerproxy.vmt") = logic_playerproxy : "An entity that is used to relay inputs/ouputs to the player and back to the world." [ + SetMaxInputArmor(integer) : "Max Input Armor" : 100 : "Sets the maximum armor a player can receive from the AddArmor, RemoveArmor, and SetArmor inputs. This does NOT override how much armor a player can receive overall!" + + ResponseContext(string) : "Response Contexts" : "" : "Response system context(s) for the player. Format should be: 'key:value,key2:value2,etc'. Using inputs like AddContext on this player proxy will not carry it over to the player and should be done on the '!player' entity instead." + + HideSquadHUD(choices) : "Hide squad HUD" : 0 : "Hides the player's squad status HUD above the ammo display." = + [ + 0 : "No" + 1 : "Yes" + ] + + HandsVM(studio) : "Hands Viewmodel" : : "Custom hands viewmodel." + HandsVMSkin(string) : "Hands Viewmodel Skin" : : "Skin for the custom hands viewmodel." + // Outputs output OnFlashlightOn(float) : "Fired when the player turns on his flashlight. This output has the value of how much energy the player had when this happened [0..1]." output OnFlashlightOff(float) : "Fired when the player turns off his flashlight. This output has the value of how much energy the player had when this happened [0..1]." input RequestPlayerHealth(void) : "Requests the current player's health from the proxy. This will fire the PlayerHealth output with the value." - output PlayerHealth(integer) : "The player's current health value." + input RequestPlayerArmor(void) : "Requests the current player's armor from the proxy. This will fire the PlayerArmor output with the value." + input RequestPlayerAuxPower(void) : "Requests the current player's auxiliary power from the proxy. This will fire the PlayerAuxPower output with the value." + input RequestPlayerFlashBattery(void) : "Requests the current player's current flashlight battery from the proxy. This will fire the PlayerFlashBattery output with the value.\n\nNOTE: If legacy flashlight is enabled (aux power flashlight), this will return the player's current auxiliary power." + output PlayerHealth(integer) : "The player's current health value, fired in response to RequestPlayerHealth." + output PlayerArmor(integer) : "The player's current armor value, fired in response to RequestPlayerArmor." + output PlayerAuxPower(float) : "The player's current auxiliary power value, fired in response to RequestPlayerArmor." + output PlayerFlashBattery(float) : "The player's current flashlight battery percentage, fired in response to RequestPlayerFlashBattery." output PlayerMissedAR2AltFire(void) : "Player fired an AR2 combine ball that didn't kill any enemies." input SetFlashlightSlowDrain(void) : "Puts the player's flashlight in slow-power-drain mode (for Episodic darkness)" @@ -6393,13 +8694,21 @@ output PlayerHasAmmo(void) : "Fired by request if the player has any ammo." output PlayerHasNoAmmo(void) : "Fired by request if the player doesn't have any ammo." + input GetAmmoOnWeapon(string) : "Requests the amount of ammo on the specified weapon, if the player has it. Fires OnGetAmmo with the amount. This has a few quirks:\n\nFires with secondary ammo if the classname starts with '@' at the beginning. (e.g. @weapon_smg1)\nUses the player's active weapon if the parameter is null. Use '@' to get secondary ammo on the active weapon.\nDoes not fire if the player does not have the specified weapon." + output OnGetAmmo(integer) : "Fires in response to GetAmmoOnWeapon with the weapon's ammo amount." + + output OnSquadMemberKilled(void) : "Fires when a member of the player's squad dies. Fires with this member as the activator." + output PlayerDied(void) : "Fires when the player dies." + output PlayerDamaged(void) : "Fires when the player is damaged." input LowerWeapon(void) : "Lowers the players weapon." input EnableCappedPhysicsDamage(void) : "Cause player to take less damage from physics objects, and never more than 30 points from any individual strike." input DisableCappedPhysicsDamage(void) : "Undo effects of EnableCappedPhysicsDamage" - input SetLocatorTargetEntity(string) : "Set the entity that the HUD locator should track. (Usually a vehicle)" + input SetLocatorTargetEntity(target_destination) : "Set the entity that the HUD locator should track. (Usually a vehicle)" + + input SetMaxInputArmor(integer) : "Sets the maximum armor value that could be set by armor inputs." ] @@ -6422,21 +8731,32 @@ ] ] -// lightprop("models/editor/spot.mdl") <---- use this once the orientation is unfucked -@PointClass base(Targetname, Parentname, Angles) size(-2 -2 -2, 2 2 2) frustum(lightfov,nearz,farz,lightcolor,-1) = env_projectedtexture : +// +// ASW-based Projected Texture +// +@PointClass base(Targetname, Parentname, Angles) studio("models/editor/cone_projected_helper.mdl") frustum(lightfov,nearz,farz,lightcolor,-1) = env_projectedtexture : "Projected texture entity." [ spawnflags(flags) = [ 1 : "Enabled" : 1 + 2 : "Always Update (moving light)" : 0 ] - target(target_destination) : "target" : : "target" - lightfov(float) : "FOV" : "90.0" : "FOV" - nearz(float) : "NearZ" : "4.0" : "Near Z for projected texture" - farz(float) : "FarZ" : "750.0" : "Far Z for projected texture" + target(target_destination) : "Target" : : "The entity will rotate to point at this target. Make sure you check the 'Always Update' flag if you set this." - enableshadows(Choices) : "Enable Shadows" : 0 : "Enables/disables shadows from this projected texture." = + dontfollowtarget(Choices) : "Don't Follow Target" : 0 : "Prevents this entity from trying to point at its target, if it has one. Intended for when you want to use 'Light Only Target' without the entity trying to point to it." = + [ + 0 : "No" + 1 : "Yes" + ] + + lightfov(float) : "FOV" : "90.0" : "The field of view cone/pyramid at which the texture is projected. Can also be interpreted as 'size'." + lighthorfov(float) : "Horizontal FOV" : "0" : "The horizontal FOV value. This allows the projected texture to use rectangular dimensions, but it causes shadow glitches and is usually not preferable unless shadows are disabled. Leave this at 0 if you want to keep this the same as the regular FOV value." + nearz(float) : "NearZ" : "4.0" : "Objects closer than this will not receive the light from the projection. (Warning: Hard falloff, model lighting inconsistent)" + farz(float) : "FarZ" : "750.0" : "Objects beyond this distance will not receive the light from the projection. The projection fades out as it approaches this distance." + + enableshadows(Choices) : "Enable Shadows" : 1 : "Enables/disables shadows from this projected texture." = [ 0 : "No" 1 : "Yes" @@ -6446,6 +8766,7 @@ 0 : "Low" 1 : "High" ] + lightonlytarget(Choices) : "Light Only Target" : 0 : "Limit flashlight effect to only effect target entity." = [ 0 : "No" @@ -6456,13 +8777,91 @@ 0 : "No" 1 : "Yes" ] - lightcolor(color255) : "Light Color" : "255 255 255 200" : "Light Color RGB-Intensity" - cameraspace(integer) : "Camera Space" : 0 : "Angles are interpreted as being relative to camera." + + brightnessscale(float) : "Brightness Scale" : "1.0" : "The light color's brightness scale." + + lightcolor(color255) : "Light Color" : "255 255 255 200" : "The color of the projected texture. Format is RGB-Intensity, like a light entity. Intensity can only range from 0 to 255, so use the Brightness Scale keyvalue to make the projected texture brighter than 255." + colortransitiontime(float) : "Color Transition Time" : "0" : "Amount of time it takes for a color or brightness change to occur. 0 = instant" + cameraspace(Choices) : "Camera Space" : 0 : "Angles are interpreted as being relative to camera." = + [ + 0 : "No" + 1 : "Yes" + ] + + texturename(material) : "Texture Name" : "effects/flashlight001" + textureframe(integer) : "Texture Frame" : 0 : "Sets the frame of the projected texture. Only relevant if the texture is animated/has multiple frames." + + alwaysdraw(Choices) : "Always Draw" : 0 : "Always draws the projected texture, regardless of whether the player can see its frustum. Use this for projected textures that can be seen on monitors or in the skybox." = + [ + 0 : "No" + 1 : "Yes" + ] + + ProjectedTextureVersion(integer) readonly : "Projected Texture Version" : 1 : "(Don't change). Differentiates between projected textures built before/outside of Mapbase and projected textures using new features." // Inputs - input TurnOn(void) : "Turn on the texture" - input TurnOff(void) : "Turn off the texture" - input SetFOV(float) : "Set FOV" + input TurnOn(void) : "Turns on the texture" + input TurnOff(void) : "Turns off the texture" + input AlwaysUpdateOn(void) : "Turns on per frame updating (for moving lights)" + input AlwaysUpdateOff(void) : "Turns off per frame updating (for moving lights)" + input FOV(float) : "Sets the FOV." + input VerFOV(float) : "Sets the vertical FOV." + input HorFOV(float) : "Sets the horizontal FOV." + input SpotlightTexture(string) : "Sets the spotlight texture" + input SetSpotlightFrame(string) : "Sets the spotlight texture frame" + input EnableShadows(bool) : "Set the if shadows are enabled" + input LightColor(color255) : "Change the light color" + input SetBrightness(float) : "Sets brightness." + input SetColorTransitionTime(float) : "Sets the color transition time." + input SetNearZ(float) : "Sets NearZ." + input SetFarZ(float) : "Sets FarZ." + input AlwaysDrawOn(void) : "Turns off BBox culling (for skybox or monitor lights)" + input AlwaysDrawOff(void) : "Turns on BBox culling if it was off before" + input StopFollowingTarget(void) : "Causes this entity to stop following the target, if it has one" + input StartFollowingTarget(void) : "Causes this entity to start following the target if it was set to not follow it before" +] + +@PointClass base(Targetname, Angles, EnableDisable) iconsprite("editor/env_global_light.vmt") = env_global_light : + "An orthographic projected texture that follows the player. Sorry, I don't have the original FGD documentation here." +[ + distance(float) : "Distance" : "10000" : "Height above the player where the projection originates from." + fov(float) : "FOV" : "5.0" : "This is the field of view that the sunlight casts in. Use lower values to simulate a more distant sun and sharper shadows." + nearz(float) : "NearZ" : "512" : "Distance from the player where the near Z plane is. Anything closer to the projection origin" + northoffset(float) : "North Offset" : "200" : "This offsets the from the player position where the sun is attached. (???)" + + eastoffset(float) : "X Offset" : "0" : "X/East offset the from the player position." + forwardoffset(float) : "Y Offset" : "0" : "Y/Forward offset the from the player position." + + orthosize(float) : "Ortho Size" : "1000.0" : "The env_global_light's 'size', or how much ground it covers." + + enableshadows(Choices) : "Enable Shadows" : 1 : "Enables shadows. If shadows are disabled, light may appear to go through objects. Disabling shadows may be ideal for lower-detail environments due to being less expensive." = + [ + 0 : "No" + 1 : "Yes" + ] + + lightcolor(color255) : "Light Color" : "255 255 255 200" : "RGBA color of the sunlight. Intensity can only range from 0 to 255, so use the Brightness Scale keyvalue to make the sunlight brighter than 255." + colortransitiontime(float) : "Color Transition Time" : "0" : "Amount of time it takes for a color or brightness change to occur. 0 = instant" + + brightnessscale(float) : "Brightness Scale" : "1.0" : "The light color's brightness scale." + + texturename(material) : "Texture Name" : "effects/flashlight001" + textureframe(integer) : "Texture Frame" : 0 : "Sets the frame of the env_global_light. Only relevant if the texture is animated/has multiple frames." + + // Inputs + input SetFOV(float) : "Set the field of view the sun casts." + input SetTexture(string) : "Set the texture cookie of the sunlight." + input EnableShadows(bool) : "Set whether shadow maps are enabled" + input LightColor(color255) : "Set the light color." + input SetBrightness(float) : "Sets brightness." + input SetColorTransitionTime(float) : "Sets the color transition time." + input SetAngles(string) : "Set the sun direction." + input SetDistance(float) : "Set the distance of the sun." + input SetNearZDistance(float) : "Set the near z distance." + input SetNorthOffset(float) : "Sets the north offset." + input SetXOffset(float) : "Sets the X offset." + input SetYOffset(float) : "Sets the Y offset." + input SetOrthoSize(float) : "Sets the light's size." ] @@ -6491,7 +8890,7 @@ animationtarget(target_source) : "Animation target" : "" attachmentname(string) : "Target attachment point name" : "" - input SetAnimationTarget(string) : "Set the animation target to use. An empty string will disable the puppet." + input SetAnimationTarget(target_destination) : "Set the animation target to use. An empty string will disable the puppet." ] @PointClass base(Origin, Targetname, EnableDisable) size(-2 -2 -2, 2 2 2) color(0 255 0) = point_gamestats_counter : "Generic game statistics counter." @@ -6544,3 +8943,12 @@ parm9(instance_parm) : "Parm" : : "This is a parameter. It goes in the form of $variable type." parm10(instance_parm) : "Parm" : : "This is a parameter. It goes in the form of $variable type." ] + +@SolidClass base(Trigger) = trigger_apply_impulse : + "A trigger that adds impulse to touching entities." +[ + impulse_dir(angle) : "Impulse Direction (Pitch Yaw Roll)" : "0 0 0" : "Angles indicating the direction to push touching entities." + force(float) : "Impulse Force" : "300" : "" + + input ApplyImpulse(void) : "Apply impulse to touching entities" +] diff --git a/halflife2.fgd b/halflife2.fgd index bf2512d..318c629 100644 --- a/halflife2.fgd +++ b/halflife2.fgd @@ -2,6 +2,9 @@ // // Purpose: Half-Life 2 game definition file (.fgd) // +// This is the Mapbase version of the Half-Life 2 FGD. +// Much of this conent only works in Mapbase. +// //============================================================================= @include "base.fgd" @@ -13,8 +16,8 @@ //------------------------------------------------------------------------- @BaseClass base(BaseNPC) = TalkNPC [ - UseSentence(string) : "Use Sentence" - UnUseSentence(string) : "Un-Use Sentence" + //UseSentence(string) : "Use Sentence" + //UnUseSentence(string) : "Un-Use Sentence" DontUseSpeechSemaphore(choices) : "Don't Use Speech Semaphore" : 0 : "Friendly NPCs are not allowed to speak if another friendly NPC is speaking. In some cases we don't want speaking NPCs to prevent other NPCs from speaking (for instance, if there is a friendly NPC speaking for a long time on a monitor). To make this NPC not prevent other NPCs from talking, make it not grab the semaphore when it speaks." = [ @@ -25,7 +28,31 @@ input SpeakResponseConcept(string) : "Speak the specified response concept." ] -@BaseClass base(BaseNPC) = PlayerCompanion +@BaseClass = GrenadeUser +[ + // Most grenade users shouldn't use grenades by default, override this in derived classes if otherwise + NumGrenades(choices) : "Number of Grenades" : "0" = + [ + "0" : "None" + "1" : "1" + "2" : "2" + "3" : "3" + "4" : "4" + "5" : "5" + "999999" : "Unlimited" + ] + + // Inputs + input ThrowGrenadeAtTarget(target_destination) : "Throws a grenade at the specified target." + + input SetGrenades(integer) : "Sets the number of grenades we have." + input AddGrenades(integer) : "Adds to the number of grenades we have. Use a negative number to remove grenades." + + output OnThrowGrenade(ehandle) : "Fires when we throw a grenade. Passes the grenade." + output OnOutOfGrenades(ehandle) : "Fires when we run out of grenades. Passes our last grenade, if there is one." +] + +@BaseClass base(GrenadeUser) = PlayerCompanion [ input OutsideTransition(void) : "Use this input to teleport the NPC to a hintnode with the Player Squad Transition Point hint type." input EnableAlwaysTransition(void) : "Enable the 'always transition' behavior" @@ -34,6 +61,15 @@ input EnableSpeakWhileScripting(void) : "Allow this NPC to speak responses while in a scripted sequence or while StartScripting is active." input DisableSpeakWhileScripting(void) : "Cancels this NPC's ability to speak responses while in a scripted sequence or while StartScripting is active if it was previously enabled by EnableSpeakWhileScripting." + input SetGrenadeCapabilities(integer) : "Sets this NPC's grenade capabilities." + SetGrenadeCapabilities(choices) : "Grenade capabilities" : "None" : "Controls this NPC's capability to throw grenades or use their weapon's secondary ability (energy balls/SMG grenades)." = + [ + 0 : "None" + 1 : "Grenades" + 2 : "Alt-firing" + 3 : "Grenades + Alt-firing" + ] + AlwaysTransition(choices) : "Always transition" : "No" : "If yes, this NPC will always teleport to a Player Squad Transition Point if they're not within the trigger_transition volume." = [ 0 : "No" @@ -57,8 +93,6 @@ input EnableWeaponPickup(void) : "Enable Weapon Pickup" input DisableWeaponPickup(void) : "Disable Weapon Pickup" - - input GiveWeapon(string) : "Gives the NPC a weapon of the specified entity name." input SetReadinessPanic(void) : "Set readiness to panic state (Special)" input SetReadinessLow(void) : "Set readiness to calmest state (Bored)" @@ -66,12 +100,12 @@ input SetReadinessHigh(void) : "Set readiness to highest. (Combat imminent)" input LockReadiness(float) : "Lock readiness at current setting for x seconds -1 = forever, 0 = unlock now" - input ClearAllOutputs(void) : "Obliterate every output that this NPC has." + input ClearAllOutputs(void) : "Obliterates every output that this NPC has." - output OnWeaponPickup(void) : "Fires when this NPC picks a weapon off the ground or a gun rack." + output OnWeaponPickup(void) : "Fires when this NPC picks up a weapon off the ground or a gun rack." ] -@BaseClass base(BaseNPC ) = RappelNPC +@BaseClass = RappelNPC [ waitingtorappel(choices) : "Waiting to Rappel?" : "No" : "If yes, this NPC spawns suspended in air and awaits a BeginRappel input. It will then spawn a zipline and slide down. When it hits the ground, NPC will cut away the line and try to move forward a few feet to make room for the next NPC. The NPC will not attempt to clear its landing space if it cannot do so by taking a few steps forward" = [ @@ -88,19 +122,27 @@ @BaseClass = AlyxInteractable [ - // Outputs - output OnAlyxStartedInteraction(void) : "Fired when Alyx begins to interact with this entity." - output OnAlyxFinishedInteraction(void) : "Fired when Alyx has finished interacting with this entity." + Hacked(choices) : "Start Hacked" : "No" : "Makes this NPC start as if Alyx had hacked it. This causes the NPC to switch sides and might give it a different color." = + [ + 0 : "No" + 1 : "Yes" + ] - input InteractivePowerDown(void) : "Shutdown this target." + // Outputs + output OnAlyxStartedInteraction(void) : "Fires when Alyx begins to interact with this entity." + output OnAlyxFinishedInteraction(void) : "Fires when Alyx has finished interacting with this entity." + output OnHacked(void) : "Fires when this entity is hacked, either by Alyx or through the 'Hack' input." + + input InteractivePowerDown(void) : "Shuts down this target." + input Hack(void) : "Hacks this entity as if Alyx interacted with it." ] @BaseClass base(Targetname, Origin, Angles, Global) = CombineBallSpawners [ spawnflags(Flags) = [ - 4096 : "Start inactive" : 1 - 8192 : "Combine power supply" : 0 + 4096 : "[4096] Start inactive" : 1 + 8192 : "[8192] Combine power supply" : 0 ] ballcount(integer) : "Ball count" : 3 : "This is how many balls will be bouncing around inside the spawner" @@ -175,17 +217,17 @@ output OnLastBallGrabbed(void) : "Fired when the last combine ball is grabbed from the field by a mega physcannon" ] -@PointClass base(CombineBallSpawners) = point_combine_ball_launcher : +@PointClass base(CombineBallSpawners, Parentname) = point_combine_ball_launcher : "Launches Combine balls." [ launchconenoise(float) : "Noise to launch direction" : "0.0" : "Noise in degrees added to the launch direction." - bullseyename(string) : "Name of bullseye" : "" : "If you select the Attach Bullseye spawnflag, you may specify a name here which will be given to the bullseye." + bullseyename(target_destination) : "Name of bullseye" : "" : "If you select the Attach Bullseye spawnflag, you may specify a name here which will be given to the bullseye." maxballbounces(integer) : "Max number of bounces" : 8 : "Maximum number of bounces the balls are allowed to do before they are removed." spawnflags(Flags) = [ - 1 : "Attach Bullseye" : 0 - 2 : "Balls should collide against player" : 0 + 1 : "[1] Attach Bullseye" : 0 + 2 : "[2] Balls should collide against player" : 0 ] // Inputs @@ -194,13 +236,13 @@ @NPCClass base(BaseNPC) studio("models/combine_soldier.mdl") = npc_blob : "Blob" [ - input FormPathShape(string) : "Tells the group to go distribute themselves along a shape defined by path corner entities" + input FormPathShape(target_destination) : "Tells the group to go distribute themselves along a shape defined by path corner entities" input SetRadius(float) : "Force the group to change the radius (density)" ] -@NPCClass base(BaseNPC) studio("models/Weapons/w_grenade.mdl") = npc_grenade_frag : "Hand Grenade" +@NPCClass base(Targetname) studio("models/Weapons/w_grenade.mdl") = npc_grenade_frag : "Hand Grenade" [ input SetTimer(float) : "This input makes the grenade live, and specifies how many seconds before it explodes." ] @@ -216,9 +258,9 @@ [ spawnflags(Flags) = [ - 32 : "Always Become Angry On New Enemy" : 1 - 64 : "Ignore Enemies (Scripted Targets Only)" : 0 - 128 : "Start Inactive" : 0 + 32 : "[32] Always Become Angry On New Enemy" : 1 + 64 : "[64] Ignore Enemies (Scripted Targets Only)" : 0 + 128 : "[128] Start Inactive" : 0 ] innerradius(integer) : "Inner radius" : 300 : "The camera will only lock onto enemies that are within the inner radius." @@ -231,8 +273,8 @@ input Disable(void) : "Disables the camera. If open, the camera closes." input Enable(void) : "Enables the camera. If closed, the camera opens." input Toggle(void) : "Toggle - If open, close. If closed, open." - input SetDefaultTargetEntity(string) : "Sets the entity for the camera to track when it has nothing better to track, by name." - input SetTargetEntity(string) : "Sets the entity for the camera to track now, by name." + input SetDefaultTargetEntity(target_destination) : "Sets the entity for the camera to track when it has nothing better to track, by name." + input SetTargetEntity(target_destination) : "Sets the entity for the camera to track now, by name." input SetAngry(void) : "Causes the camera to become angry as if it has seen something upsetting." input SetIdle(void) : "Causes the camera to calm down if it is angry." @@ -241,7 +283,7 @@ ] -@PointClass base(BaseNPC, Parentname, AlyxInteractable) studio( "models/combine_turrets/ground_turret.mdl" ) = npc_turret_ground : "Combine ground turret" +@PointClass base(BaseNPC, Parentname) studio( "models/combine_turrets/ground_turret.mdl" ) = npc_turret_ground : "Combine ground turret" [ input Enable(void) : "Turn turret on." input Disable(void) : "Turn turret off." @@ -253,38 +295,65 @@ [ spawnflags(Flags) = [ - 32 : "Autostart" : 1 - 64 : "Start Inactive" : 0 - 128 : "Never Retire" : 0 - 256 : "Out of Ammo" : 0 + 32 : "[32] Autostart" : 1 + 64 : "[64] Start Inactive" : 0 + 128 : "[128] Never Retire" : 0 + 256 : "[256] Out of Ammo" : 0 + 1024 : "[1024] No Light Sprite" : 0 ] - minhealthdmg(integer) : "Min req'd damage for hurting turret" : 0 + minhealthdmg(integer) : "Min req'd damage for hurting turret" : 0 + + health(integer) : "Health" : 100 : "Health was 1000 in the original Half-Life 2." + + FieldOfView(float) : "FieldOfView" : "0.0" : "The ceiling turret's viewcone. (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)" // Inputs input Enable(void) : "If closed, open." input Disable(void) : "If open, close." input Toggle(void) : "Toggle - If open, close. If closed, open." + input DepleteAmmo(void) : "Depletes all the ammo from a turret, causing it to dry-fire." + input RestoreAmmo(void) : "Restores ammo to a turret, allowing it to fire live rounds again." + input CreateSprite(void) : "Creates the turret's light sprite if it was previously destroyed." + input DestroySprite(void) : "Destroys the turret's light sprite." + input FieldOfView(float) : "Sets this turret's field of view." // Outputs output OnDeploy(void) : "Turret is becoming active and dangerous." output OnRetire(void) : "Turret is becoming inactive and harmless." - output OnTipped(void) : "Turret has been tipped over and is inactive." +] + +@PointClass base(npc_turret_ceiling) studio( "models/props_lab/labturret_npc.mdl" ) = npc_turret_lab : "Eli's Lab Turret" +[ + FieldOfView(float) : "FieldOfView" : "-0.5" : "The ceiling turret's viewcone. (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)" + + ManualArmYaw(choices) : "Static Arm" : "No" : "Prevents the arm from moving." = + [ + 0 : "No" + 1 : "Yes" + ] + + Mirrored(choices) : "Mirrored" : "No" : "'Mirrors' the turret, which changes certain animations." = + [ + 0 : "No" + 1 : "Yes" + ] ] -@PointClass base(Targetname, Angles) studio( "models/combine_turrets/floor_turret.mdl" ) = npc_turret_floor : "Combine Floor Turret" +@PointClass base(Targetname, Angles, AlyxInteractable) studio( "models/combine_turrets/floor_turret.mdl" ) = npc_turret_floor : "Combine Floor Turret" [ spawnflags(Flags) = [ - 32 : "Autostart" : 0 - 64 : "Start Inactive" : 0 - 128 : "Fast Retire" : 0 - 256 : "Out of Ammo" : 0 - 512 : "Citizen modified (Friendly)" : 0 + 32 : "[32] Autostart" : 1 + 64 : "[64] Start Inactive" : 0 + 128 : "[128] Fast Retire" : 0 + 256 : "[256] Out of Ammo" : 0 + 512 : "[512] Citizen modified (Friendly)" : 0 + 1024 : "[1024] No Light Sprite" : 0 ] - SkinNumber(integer) : "Skin Number" : 0 : "Which skin to use for this turret. Set to 0 to select randomly." + skin(integer) : "Skin Number" : 0 : "Which skin to use for this turret. If a citizen turret, set to 0 to select randomly." // Inputs input Toggle(void) : "Toggle - If open, close. If closed, open." @@ -292,6 +361,8 @@ input Disable(void) : "Disable the turret." input DepleteAmmo(void) : "Depletes all the ammo from a turret, causing it to dry-fire." input RestoreAmmo(void) : "Restores ammo to a turret, allowing it to fire live rounds again." + input CreateSprite(void) : "Creates the turret's light sprite if it was previously destroyed." + input DestroySprite(void) : "Destroys the turret's light sprite." input SelfDestruct(void) : "Causes the turret to warn and then explode." // Outputs @@ -308,12 +379,12 @@ spawnflags(Flags) = [ - 65536 : "Start Inactive" : 1 + 65536 : "[65536] Start Inactive" : 1 ] input StartFiring(void) : "Tell the driver to attack nearby enemies with the vehicle's weaponry (if any)" input StopFiring(void) : "Tell the driver to stop attacking nearby enemies with the vehicle's weaponry." - input GotoPathCorner(string) : "Tell the driver to go to a specific path corner and continue from there." + input GotoPathCorner(target_destination) : "Tell the driver to go to a specific path corner and continue from there." ] @NPCClass base(VehicleDriverNPC) studio("models/roller.mdl") = npc_vehicledriver : @@ -334,8 +405,8 @@ releasepause(float) : "Pause time before dropping a ForceDrop specified object." : 0 // Inputs - input ForcePickup(string) : "Force the driver to pickup the specified entity (by targetname)" - input ForceDrop(string) : "Force the driver to drop the currently held object at the specified entity's location." + input ForcePickup(target_destination) : "Force the driver to pickup the specified entity (by targetname)" + input ForceDrop(target_destination) : "Force the driver to drop the currently held object at the specified entity's location." // Outputs output OnPickedUpObject(void) : "Fired when the ForcePickup specified object has been picked up." @@ -348,8 +419,8 @@ [ spawnflags(Flags) = [ - 65536 : "No Rocket Attacks" : 0 - 131072 : "No Gun Attacks" : 0 + 65536 : "[65536] No Rocket Attacks" : 0 + 131072 : "[131072] No Gun Attacks" : 0 ] drivermaxspeed(float) : "Maxspeed (percentage of vehicle's maxspeed)." : 1 @@ -369,8 +440,8 @@ [ spawnflags(Flags) = [ - 65536 : "Friendly" : 0 - 131072 : "Use prop_physics collision rules" : 0 + 65536 : "[65536] Friendly" : 0 + 131072 : "[131072] Use prop_physics collision rules" : 0 ] startburied(choices) : "Start Buried" : "No" = @@ -396,8 +467,10 @@ [ ] -@NPCClass base(BaseNPC) studio("models/combine_soldier.mdl") = npc_sniper : "Sniper" +@NPCClass base(BaseNPC) studio() = npc_sniper : "Sniper" [ + model(studio) : "Model" : "models/combine_soldier.mdl" : "The model of this sniper. Can be seen when the sniper dies." + radius(integer) : "Patience Radius" : 0 : "Sniper will hold fire until the target is within this radius. After that, sniper will always attack, even if the target retreats outside of this radius" misses(integer) : "Initial Misses" : 0 : "How many times to miss a target on purpose before beginning to fire accurately." beambrightness(integer) : "Beam Brightness (0 to 255)" : 100 : "How bright the laser sight beam should be. (0 - 255)" @@ -406,9 +479,12 @@ 0 : "No" 1 : "Yes" ] + + BeamName(material) : "Beam Texture" : "effects/bluelaser1.vmt" : "The texture that should be used by the sniper's laser beam. Be sure to put '.vmt' at the end!" + BeamColor(color255) : "Beam Color" : "0 100 255" : "The color that should be used by the sniper's laser beam." - shielddistance(float) : "Bullet shield distance" : 64 : "Obsolete" - shieldradius(float) : "Bullet shield radius" : 48 : "Obsolete" + //shielddistance(float) : "Bullet shield distance" : 64 : "Obsolete" + //shieldradius(float) : "Bullet shield radius" : 48 : "Obsolete" PaintInterval(float): "Paint interval" : 1 : "Sniper will keep a target painted for this many seconds before shooting. 'Faster Shooting' sniper flag multiplies this by 0.75." PaintIntervalVariance(float): "Paint interval variance" : "0.75" : "When shooting at NPCs, a random number between 0 and this is added to PaintInterval for every shot." @@ -418,8 +494,8 @@ input EnableSniper(void) : "Enable Shooting" input DisableSniper(void) : "Disable Shooting" input SetDecoyRadius(integer) : "Set Decoy Radius" - input SweepTarget(string) : "Sweep a Target" - input SweepTargetHighestPriority(string) : "Drop everything and sweep this target!" + input SweepTarget(target_destination) : "Sweep a Target" + input SweepTargetHighestPriority(target_destination) : "Drop everything and sweep this target!" input SweepGroupRandomly(string) : "Randomly Sweep a Group" input StopSweeping(void) : "Stop any target sweeping operation started by entity I/O" input ProtectTarget(target_destination) : "Protect the specified enemy. The sniper will attempt to shoot the enemy nearest the protect target at all times." @@ -430,12 +506,13 @@ spawnflags(Flags) = [ - 65536 : "Hidden" : 0 - 131072 : "Laser Viewcone" : 0 - 262144 : "No Corpse" : 0 - 524288 : "Start Disabled" : 0 - 1048576 : "Faster shooting (Episodic)" : 0 - 2097152 : "No sweep away from target (Episodic)" : 0 + 65536 : "[65536] Hidden" : 1 + 131072 : "[131072] Laser Viewcone" : 0 + 262144 : "[262144] No Corpse" : 0 + 524288 : "[524288] Start Disabled" : 0 + 1048576 : "[1048576] Faster shooting (Episodic)" : 0 + 2097152 : "[2097152] No sweep away from target (Episodic)" : 0 + 4194304 : "[4194304] Die on fire" : 0 ] ] @@ -450,6 +527,8 @@ 1 : "Magnussen RDU Beacon" 2 : "Dog" 3 : "Ally Installation" + 4 : "Enemy" + 5 : "Large Enemy (striders)" ] mode(choices) : "Mode" : 0 = @@ -470,15 +549,15 @@ groupname(string) : "Group Name" spawnflags(Flags) = [ - 1 : "Shoot Me" : 0 - 2 : "No Interruptions" : 0 - // 4 : "Snap Shot" : 0 OBSOLETE NOW but don't overwrite, in case some levels need legacy support. - 8 : "Resume if Interrupted" : 0 - 16: "Snap to me" : 0 + 1 : "[1] Shoot Me" : 0 + 2 : "[2] No Interruptions" : 0 + // 4 : "[4] Snap Shot" : 0 OBSOLETE NOW but don't overwrite, in case some levels need legacy support. + 8 : "[8] Resume if Interrupted" : 0 + 16: "[16] Snap to me" : 0 ] ] -@PointClass base(Targetname, Angles) studio() = prop_thumper : "Thumper" +@PointClass base(Targetname, Angles, Studiomodel) studio() sphere(dustscale) sphere(EffectRadius) = prop_thumper : "Thumper" [ model(studio) : "World model" : "models/props_combine/CombineThumper002.mdl" @@ -507,9 +586,9 @@ spawnflags(Flags) = [ - 65536 : "Burrow when eluded" : 0 - 131072 : "Use Ground Checks" : 0 - 262144 : "Worker Type" : 0 + 65536 : "[65536] Burrow when eluded" : 0 + 131072 : "[131072] Use Ground Checks" : 0 + 262144 : "[262144] Worker Type" : 0 ] radius(integer) : "Alert Radius" : 256 @@ -530,7 +609,8 @@ input Unburrow(void) : "Unburrow from the ground" input Burrow(void) : "Burrow into the ground" input BurrowAway(void) : "Burrow into the ground and remove the antlion" - input FightToPosition(string) : "Fight to position" + input FightToPosition(target_destination) : "Fight to reach the specified entity." + input StopFightToPosition(target_destination) : "Stop fighting to reach a position, if it currently is." input EnableJump(void) : "Allow non-navigational jumping" input DisableJump(void) : "Disallow non-navigational jumping" input IgnoreBugbait(void) : "Ignore bugbait" @@ -545,8 +625,8 @@ [ spawnflags(Flags) = [ - 65536 : "Create server-side ragdoll on death" : 0 - 131072 : "Use inside footsteps" : 0 + 65536 : "[65536] Create server-side ragdoll on death" : 0 + 131072 : "[131072] Use inside footsteps" : 0 ] startburrowed(choices) : "Start Burrowed" : "No" = @@ -573,18 +653,18 @@ 1 : "Yes" ] - shovetargets(string) : "Shove Targets" : "" + shovetargets(target_destination) : "Shove Targets" : "" : "All entities of this name will be considered shove targets." // Inputs input Unburrow(void) : "Unburrow from the ground" - input SetShoveTarget(string) : "Sets a shove target to attack" - input SetChargeTarget(string) : "Sets a charge target to attack. Parameters are the name of the entity to start at and the name of the entity to charge towards, separated by a space (i.e. start target)" + input SetShoveTarget(target_destination) : "Sets a shove target to attack" + input SetChargeTarget(target_destination) : "Sets a charge target to attack. Parameters are the name of the entity to start at and the name of the entity to charge towards, separated by a space (i.e. start target)" input ClearChargeTarget(void) : "Clear the charge target" input SetCoverFromAttack(integer) : "Sets whether or not the creature will protect itself from attacks" input Ragdoll(void) : "Causes the antlion guard to die, regardless of health" input EnableBark(void) : "Allow the antlion guard to try and summon antlions" input DisableBark(void) : "Stop the antlion guard from trying to summon antlions" - input InvestigateHint(string) : "Sniff around at a hint group until told otherwise" + input InvestigateHint(target_destination) : "Sniff around at a hint group until told otherwise" input StopInvestigating(void) : "Stop trying to sniff out the player" input EnablePreferPhysicsAttack(void) : "Prefer to use physics attacks if at all possible, even when inside a cavern." @@ -597,10 +677,9 @@ output OnSummon(void) : "Antlion guard is attempting to summon antlions" ] - -@NPCClass base(BaseNPC) studio("models/crow.mdl") = npc_crow : "Crow" +@BaseClass base(BaseNPC) = BaseBird [ - input FlyAway( string ) : "Forces the crow to fly to the nearest crow flyto hint node." + input FlyAway( target_destination ) : "Forces the crow to fly to the nearest crow flyto hint node." deaf(choices) : "Deaf?" : 0 = [ @@ -609,26 +688,16 @@ ] ] -@NPCClass base(BaseNPC) studio("models/seagull.mdl") = npc_seagull : "Seagull" +@NPCClass base(BaseBird) studio("models/crow.mdl") = npc_crow : "Crow" [ - input FlyAway( string ) : "Forces the seagull to fly to the nearest crow flyto hint node." - - deaf(choices) : "Deaf?" : 0 = - [ - 0 : "No." - 1 : "Yes. Ignore sounds." - ] ] -@NPCClass base(BaseNPC) studio("models/pigeon.mdl") = npc_pigeon : "Pigeon" +@NPCClass base(BaseBird) studio("models/seagull.mdl") = npc_seagull : "Seagull" [ - input FlyAway( string ) : "Forces the pigeon to fly to the nearest crow flyto hint node." +] - deaf(choices) : "Deaf?" : 0 = - [ - 0 : "No." - 1 : "Yes. Ignore sounds." - ] +@NPCClass base(BaseBird) studio("models/pigeon.mdl") = npc_pigeon : "Pigeon" +[ ] @NPCClass base(BaseNPC) studio("models/ichthyosaur.mdl") = npc_ichthyosaur : "Ichthyosaur. Not fully functional" @@ -645,13 +714,15 @@ spawnflags(flags) = [ - 65536 : "Start hidden" : 0 - 131072 : "Start hanging from ceiling" : 0 + 65536 : "[65536] Start hidden" : 0 + 131072 : "[131072] Start hanging from ceiling" : 0 ] input StartHangingFromCeiling(void) : "Start hanging from ceiling." input DropFromCeiling(void) : "Drop if hanging from ceiling." + + output OnLeap(void) : "Fires when the headcrab leaps at an enemy." ] @NPCClass base(BaseHeadcrab, Parentname) studio("models/Headcrabclassic.mdl") = npc_headcrab : "Headcrab" @@ -668,31 +739,43 @@ [ BeamPower(choices) : "Beam Power" : "Low" = [ - 0 : "Low" - 1 : "Medium" - 2 : "High" + 0 : "Low" + 1 : "Medium" + 2 : "High" + ] + + Aggression(choices) : "Start Aggressive" : 0 : "Controls whether this stalker starts aggressive to the player and their allies without having to be provoked first." = + [ + 0 : "No" + 1 : "Yes" + ] + + Bleed(choices) : "Bleed" : 1 : "Allows this stalker to bleed upon taking bleedable damage. They bleed saline." = + [ + 0 : "No" + 1 : "Yes" ] ] -@NPCClass base(Parentname, BaseNPC) iconsprite("editor/bullseye.vmt") color(255 0 0) = npc_bullseye : "Bullseye" +@NPCClass base(Parentname, BaseNPC) iconsprite("editor/bullseye.vmt") color(255 0 0) sphere(mindist) = npc_bullseye : "Bullseye" [ // Unlike other NPCs level designers are allowed to set the health on bullseyes health(Integer) : "Health" : 35 minangle(string) : "Minimum Angle" : "360" : "Angle from the bullseye required for bullseye to be a valid enemy" - mindist(string) : "Minimum Distance" : "0" : "Distance from the bullseye required for bullseye to be a valid enemy" + mindist(float) : "Minimum Distance" : "0" : "Distance from the bullseye required for bullseye to be a valid enemy" autoaimradius(float) : "Autoaim Radius" : "0" : "Radius of autoaim influence. Use ent_autoaim to visualize." spawnflags(Flags) = [ - 65536 : "Not Solid" : 0 - 131072 : "Take No Damage" : 0 - 262144 : "Enemy Damage Only" : 0 - 524288 : "Bleed" : 0 - 1048576 : "Perfect Accuracy" : 0 - 2097152 : "Collide against physics objects (Creates VPhysics Shadow)" : 0 + 65536 : "[65536] Not Solid" : 0 + 131072 : "[131072] Take No Damage" : 0 + 262144 : "[262144] Enemy Damage Only" : 0 + 524288 : "[524288] Bleed" : 0 + 1048576 : "[1048576] Perfect Accuracy" : 0 + 2097152 : "[2097152] Collide against physics objects (Creates VPhysics Shadow)" : 0 ] output OnTargeted(void) : "Fires when targeted" output OnReleased(void) : "Fires when no longer targeted" @@ -703,12 +786,12 @@ [ spawnflags(flags) = [ - 65536 : "Check Visibility" : 1 - 131072 : "APC Visibility checks" : 0 - 262144 : "Short memory" : 0 - 524288 : "Can be an enemy" : 0 + 65536 : "[65536] Check Visibility" : 1 + 131072 : "[131072] APC Visibility checks" : 0 + 262144 : "[262144] Short memory" : 0 + 524288 : "[524288] Can be an enemy" : 0 ] - FieldOfView(string) : "FieldOfView" : "0.2" : "How far to look (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)" + FieldOfView(float) : "FieldOfView" : "0.2" : "The enemy finder's viewcone. (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)" MinSearchDist(integer) : "Min Search Dist" : 0 MaxSearchDist(integer) : "Max Search Dist" : 2048 @@ -723,6 +806,36 @@ 0 : "No" 1 : "Yes" ] + + SetClassify(choices) : "Classify" : 0 : "Allows this npc_enemyfinder to simulate a NPC's Class_T. Useful for relationships." = + [ + 0 : "None" + 1 : "CLASS_PLAYER" + 2 : "CLASS_PLAYER_ALLY (Citizens)" + 3 : "CLASS_PLAYER_ALLY_VITAL (Alyx, Dr. Kleiner, GameEndAlly vorts, etc.)" + 4 : "CLASS_ANTLION" + 5 : "CLASS_BARNACLE" + 6 : "CLASS_BULLSEYE (npc_bullseyes)" + 7 : "CLASS_CITIZEN_PASSIVE (pre-criminal citizens)" + //8 : "CLASS_CITIZEN_REBEL (Unused)" + 9 : "CLASS_COMBINE (Soldiers, turrets, etc.)" + 10 : "CLASS_COMBINE_GUNSHIP (Gunships, helicopters, dropships)" + //11 : "CLASS_CONSCRIPT (Unused)" + 12 : "CLASS_HEADCRAB" + 13 : "CLASS_MANHACK" + 14 : "CLASS_METROPOLICE" + //15 : "CLASS_MILITARY (Unused)" + 16 : "CLASS_SCANNER" + 17 : "CLASS_STALKER" + 18 : "CLASS_VORTIGAUNT (Non-vital vortigaunts only)" + 19 : "CLASS_ZOMBIE" + 20 : "CLASS_PROTOSNIPER (npc_snipers)" + 21 : "CLASS_MISSILE" + 22 : "CLASS_FLARE" + 23 : "CLASS_EARTH_FAUNA (crows, seagulls, etc.)" + 24 : "CLASS_HACKED_ROLLERMINE" + 25 : "CLASS_COMBINE_HUNTER" + ] // Inputs input TurnOn(void) : "Turn on: Look for enemies" @@ -736,10 +849,10 @@ [ spawnflags(flags) = [ - 65536 : "Check Visibility" : 1 - 131072 : "APC Visibility checks" : 0 - 262144 : "Short memory" : 0 - 524288 : "Can be an enemy" : 0 + 65536 : "[65536] Check Visibility" : 1 + 131072 : "[131072] APC Visibility checks" : 0 + 262144 : "[262144] Short memory" : 0 + 524288 : "[524288] Can be an enemy" : 0 ] FieldOfView(string) : "FieldOfView" : "0.2" : "How far to look (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)" MinSearchDist(integer) : "Min Search Dist" : 0 @@ -770,20 +883,21 @@ -@NPCClass base(BaseNPC,Parentname, TalkNPC, PlayerCompanion ) studio() = npc_citizen : "Citizen" +@NPCClass base(TalkNPC, PlayerCompanion, RappelNPC) studio() = npc_citizen : "Citizen" [ spawnflags(Flags) = [ - 65536 : "Follow player on spawn" : 0 - 131072 : "Medic" : 0 - 262144 : "Random Head" : 1 - 524288 : "Ammo Resupplier" : 0 - 1048576 : "Not Commandable" : 0 - 2097152 : "Don't use Speech Semaphore - OBSOLETE" : 0 - 4194304 : "Random male head" : 0 - 8388608 : "Random female head" : 0 - 16777216 : "Use RenderBox in ActBusies" : 0 + 65536 : "[65536] Follow player on spawn" : 0 + 131072 : "[131072] Medic" : 0 + 262144 : "[262144] Random Head" : 1 + 524288 : "[524288] Ammo Resupplier" : 0 + 1048576 : "[1048576] Not Commandable" : 0 + //2097152 : "[2097152] Don't use Speech Semaphore - OBSOLETE" : 0 + 4194304 : "[4194304] Random male head" : 0 + 8388608 : "[8388608] Random female head" : 0 + 16777216 : "[16777216] Use RenderBox in ActBusies" : 0 + 33554432 : "[33554432] Player can +USE and +WALK (Alt + E) to toggle squad (disables automatically joining)" : 0 ] additionalequipment(choices) : "Weapons" : "0" = @@ -793,8 +907,11 @@ "weapon_stunstick" : "Stun Stick" "weapon_crowbar" : "Crow Bar" "weapon_shotgun" : "Shotgun" - "weapon_beerbottle" : "Beer Bottle" - "weapon_beerbottle2" : "Beer Bottle2" + "weapon_pistol" : "Pistol" + "weapon_357" : "357" + "weapon_crossbow" : "Crossbow" + //"weapon_beerbottle" : "Beer Bottle" + //"weapon_beerbottle2" : "Beer Bottle2" "weapon_rpg" : "RPG" "0" : "Nothing" ] @@ -849,7 +966,7 @@ "models/humans/group01/female_06.mdl" : "Female 5" "models/humans/group01/female_07.mdl" : "Female 6" "models/humans/male_cheaple.mdl" : "Cheaple Male 1" - "models/odessa.mdl" : "Odessa. DO NOT USE." + "models/odessa.mdl" : "Odessa (Must Be Unique)" ] ExpressionOverride(string) : "Facial expression override" @@ -867,6 +984,18 @@ ] denycommandconcept(string) : "Deny command speech concept" : "" : "If you want your citizens to squad with the player but not obey commands the player gives to move the squad, put a concept here and this citizen will speak the concept instead of obeying the order." + + SetTossMedkits(choices) : "Toss medkits?" : 0 : "Episodic only. Griggs in Half-Life 2: Episode Two uses experimental code that allows him to toss medkits at the player from a distance. This activates that code on this NPC if it is a medic. Does not work with ammo resuppliers." = + [ + 0 : "No" + 1 : "Yes" + ] + + AlternateAiming(choices) : "Alternate aiming animations" : 0 : "Causes this citizen to use readiness aiming animations with a SMG, AR2, or shotgun. When running or walking while aiming/shooting, they will hold their weapon around their upper-chest instead of from their hip." = + [ + 0 : "No" + 1 : "Yes" + ] //Inputs input RemoveFromPlayerSquad(void) : "Remove from player squad, instantly." @@ -874,11 +1003,13 @@ input StartPatrolling(void) : "Patrol whenever I'm idle or alert." input StopPatrolling(void) : "Stop patrolling when I'm idle or alert." - input SetCommandable(void) : "Make a previously uncommandable citizen commandable" + input SetCommandable(void) : "Makes a previously uncommandable citizen commandable" + input SetUnCommandable(void) : "Makes a previously commandable citizen uncommandable" input SetMedicOn(void) : "Set the medic flag on. Will not change the model or skin of the citizen." input SetMedicOff(void) : "Set the medic flag off. Will not change the model or skin of the citizen." input SetAmmoResupplierOn(void) : "Set the ammo-resupplier flag on. Will not change the model or skin of the citizen." input SetAmmoResupplierOff(void) : "Set the ammo-resupplier flag off. Will not change the model or skin of the citizen." + input SetTossMedkits(bool) : "Sets whether this NPC can toss medkits." // Outputs output OnJoinedPlayerSquad(void) : "Fires when joins player squad" @@ -886,7 +1017,32 @@ output OnFollowOrder(void) : "Fires when ordered to follow player" output OnStationOrder(void) : "Fires when ordered to a location by player" output OnPlayerUse(void) : "Fires when a player +USEs the citizen" - output OnNavFailBlocked(void) : "Fires when this Citizen's movement fails because he/she is blocked." + output OnNavFailBlocked(void) : "Fires when this citizen's movement fails because he/she is blocked." + + output OnHealedNPC(void) : "Fires when this citizen heals a NPC." + output OnHealedPlayer(void) : "Fires when this citizen heals a player." + output OnTossMedkit(ehandle) : "Fires when a medkit is tossed. Passes the medkit." + output OnGiveAmmo(void) : "Fires when ammo is given to the player." +] + +@SolidClass base(Targetname, Parentname, Origin, EnableDisable, Global) = func_commandredirect : + "A brush entity that redirects the player's squad commands. Also functions as a limited trigger for the player AND their squad members." +[ + target(target_destination) : "Target" : "" : "Redirects command goals to this entity's origin. If blank, doesn't affect the goal. If -1, cancels the command entirely." + reponly(choices) : "Squad Representative Only" : 0 : "If enabled, only fires OutAlly for the player's squad's representative." = + [ + 0 : "No, fire OutAlly for all members" + 1 : "Yes, only fire OutAlly for the representative" + ] + + // Outputs + output OnCommandGoal(vector) : "Fires when a player's command goal falls within this brush. Passes the goal's position." + output OutAlly(ehandle) : "Fires for each ally in the player's squad whenever this brush detects a command goal. Fires before the actual order is sent. Useful for adding a response context to TLK_COMMANDED." + + output OnStartTouch(void) : "Fired when a player or a member of the player's squad starts touching this brush." + output OnStartTouchAll(void) : "Fired when a player or a member of the player's squad starts touching this brush, and no other member is touching it." + output OnEndTouch(void) : "Fired when a player or a member of the player's squad stops touching this trigger." + output OnEndTouchAll(void) : "Fires when a player or a member of the player's squad stops touching this trigger, and no other members are touching it." ] @NPCClass base(BaseNPC) studio("models/Barney.mdl") = npc_fisherman : "Fisherman" @@ -895,7 +1051,7 @@ input SetExpressionOverride(string) : "Set facial expression override" ] -@NPCClass base(TalkNPC, BaseNPC, PlayerCompanion) studio("models/Barney.mdl") = npc_barney : "Barney" +@NPCClass base(TalkNPC, PlayerCompanion) studio("models/Barney.mdl") = npc_barney : "Barney" [ additionalequipment(choices) : "Weapons" : "weapon_pistol" = [ @@ -914,24 +1070,25 @@ output OnPlayerUse(void) : "Fires when a player +USEs Barney" ] -@BaseClass base(BaseNPC, RappelNPC) = BaseCombine +@BaseClass base(BaseNPC, RappelNPC, GrenadeUser) = BaseCombine [ additionalequipment(choices) : "Weapons" : "weapon_smg1" = [ "weapon_ar2" : "AR2" "weapon_shotgun" : "Shotgun" + //"weapon_stunstick" : "Stun Stick" "weapon_smg1" : "SMG1" - "weapon_stunstick" : "Stun Stick" + "weapon_rpg" : "RPG" "0" : "Nothing" ] spawnflags(Flags) = [ - 65536 : "Start LookOff" : 0 - 131072 : "Don't drop grenades" : 0 - 262144 : "Don't drop ar2 alt fire (elite only) " : 0 + 65536 : "[65536] Start LookOff" : 0 + 131072 : "[131072] Don't drop grenades" : 0 + 262144 : "[262144] Don't drop ar2 alt fire (elite only) " : 0 ] - + NumGrenades(choices) : "Number of Grenades" : "5" = [ "0" : "None" @@ -942,25 +1099,39 @@ "5" : "5" "999999" : "Unlimited" ] + + UnderthrowGrenades(choices) : "Underthrow Grenades" : "0" : "If enabled, this soldier will 'underthrow' their grenades with ACT_SPECIAL_ATTACK1, which looks a lot more like the HL1 grunt animation. This includes grenades thrown during regular behavior and grenades forced with ThrowGrenadeAtTarget." = + [ + "0" : "No" + "1" : "Yes" + ] + + SetAlternateCapable(choices) : "Alternate Capable" : "0" : "Makes the soldier capable of using both grenades AND energy balls at the same time, regardless of their elite status." = + [ + "0" : "No" + "1" : "Yes" + ] // Inputs input LookOn(void) : "Look normally" input LookOff(void) : "Don't look for myself, use other squad member's eyes" input StartPatrolling(void) : "Patrol whenever I'm idle or alert." input StopPatrolling(void) : "Stop patrolling when I'm idle or alert." - input ThrowGrenadeAtTarget(target_destination) : "Throw a grenade at the specified target." + input SetElite(bool) : "Sets whether we are an elite. Model will not change, but grenades will transform into energy balls or vice versa." + input UnderthrowGrenades(bool) : "Sets whether we should underthrow our grenades." + input SetAlternateCapable(bool) : "Sets whether the soldier is capable of using both grenades and energy balls at the same time." ] -@NPCClass base(BaseCombine) studio("models/Combine_Soldier.mdl") = npc_combine_s : "Combine Soldier" +@NPCClass base(BaseCombine) studio() = npc_combine_s : "Combine Soldier" [ - input Assault(string) : "Start an assault. Parameter passed in should be the name of the rally point." - - model(choices) : "Model" : "models/combine_soldier.mdl" : "Regular Soldier" = + model(choices) : "Model" : "models/combine_soldier.mdl" : "Sets this soldier's model." = [ "models/combine_soldier.mdl" : "Regular Soldier" "models/combine_soldier_prisonguard.mdl" : "Nova Prospekt Soldier" "models/combine_super_soldier.mdl" : "Elite Soldier" + "models/combine_soldirt.mdl" : "Dirty Soldier/EP2 Soldier" + "models/combine_super_soldirt.mdl" : "Dirty Elite Soldier/EP2 Elite" ] tacticalvariant(choices) : "Tactical Variant" : "0" = @@ -968,6 +1139,7 @@ "0" : "Normal Tactics" "1" : "Pressure the enemy (Keep advancing)" "2" : "Pressure until within 30ft, then normal" + "3" : "Grenade Happy" ] usemarch(choices) : "Walk Easy" : "0" : "When true, will use a variety of more casual walking animations instead of the standard walk. For use in crowds. WARNING: this animation only has a north component. For use under very special circumstances only." = @@ -975,15 +1147,18 @@ "0" : "No" "2" : "Yes" ] + + input Assault(target_destination) : "Start an assault. Parameter passed in should be the name of the rally point." + input SetTacticalVariant(integer) : "Sets this soldier's tactical variant based on integer value." ] -@PointClass base(Parentname, BaseNPC) studio("models/junk/w_traffcone.mdl") = npc_launcher : "Launcher" +@PointClass base(Parentname, BaseNPC) size( -4 -16 -16, 4 16 16 ) studio("models/weapons/w_rocket_launcher.mdl") = npc_launcher : "Launcher" [ spawnflags(Flags) = [ - 65536 : "Check LOS" : 1 + 65536 : "[65536] Check LOS" : 1 ] StartOn(choices) : "Start On" : 0 = @@ -991,9 +1166,12 @@ 0: "Off" 1: "On" ] - MissileModel(studio) : "Missile Model" : "models/Weapons/wscanner_grenade.mdl" + + OwnerEntity(target_destination) : "Owner Entity" : : "The entity that should 'own' the missiles, or receive credit/not collide with them." + + MissileModel(studio) : "Missile Model" : "models/weapons/w_missile.mdl" LaunchSound(sound) : "Launch Sound" : "npc/waste_scanner/grenade_fire.wav" - FlySound(sound) : "Fly Sound": "ambient/objects/machine2.wav" + FlySound(sound) : "Fly Sound": "Missile.Accelerate" SmokeTrail(choices) : "Smoke Trail" : 1 = [ @@ -1025,13 +1203,14 @@ // Outputs output OnLaunch(void) : "Fires when missile is launched" + output OutMissile(ehandle) : "Passes each missile launched" // Inputs input TurnOn(void) : "Turn on Launcher" input TurnOff(void) : "Turn off Launcher" input LOSCheckOn(void) : "Start checking line of sight before firing" input LOSCheckOff(void) : "Stop checking line of sight before firing" - input SetEnemyEntity(string) : "Set entity I should attack. Ignores visibility. (output from other entity only)" + input SetEnemyEntity(target_destination) : "Set entity I should attack. Ignores visibility. (output from other entity only)" input ClearEnemyEntity(void) : "Clear set enemy enemy" input FireOnce(void) : "Fire Once (if have enemy)" ] @@ -1046,7 +1225,7 @@ input FollowStrider(target_destination) : "Sets the name of the strider that this hunter should follow." input SetMinigunTime(float) : "Time to shoot at any set minigun target." - input SetMinigunTarget(string) : "Hunter will shoot minigun at the named target." + input SetMinigunTarget(target_destination) : "Hunter will shoot minigun at the named target." input DisableShooting(void) : "Forces the hunter to be melee-only." input EnableShooting(void) : "Allows the hunter to use range attacks or melee attacks." @@ -1064,7 +1243,7 @@ input DisableCrouchWalk(void) : "UNUSED: Prevents the hunter from crouch walking." input EnableCrouchWalk(void) : "UNUSED: Allows the hunter to crouch walk." - input UseSiegeTargets(string) : "Pass in the name of info_targets to shoot at when I can't shoot at the player." + input UseSiegeTargets(target_destination) : "Pass in the name of info_targets to shoot at when I can't shoot at the player." ] @@ -1079,13 +1258,13 @@ [ model(studio) : "World model" : "models/advisor.mdl" - levitationarea(string) : "Levitation Area" : "" : "Trigger volume inside which levitated objects reside" + levitationarea(target_destination) : "Levitation Area" : "" : "Trigger volume inside which levitated objects reside" levitategoal_bottom(target_destination) : "Levitation Goal Bottom" : "" : "Objects will levitate at least this high" levitategoal_top(target_destination) : "Levitation Goal Top" : "" : "Objects will levitate at least this high" - staging_ent_names(string) : "Staging Position Names" : "" : "All entities with this name will be considered staging positions for the throw behavior." - priority_grab_name(string) : "Priority Name For Grabbing" : "" : "If any entities named this are present, the advisor will preferentially pick them up for throwing at the player." + staging_ent_names(target_destination) : "Staging Position Names" : "" : "All entities with this name will be considered staging positions for the throw behavior." + priority_grab_name(target_destination) : "Priority Name For Grabbing" : "" : "If any entities named this are present, the advisor will preferentially pick them up for throwing at the player." @@ -1095,11 +1274,11 @@ output OnHealthIsNow(integer) : "When I am damaged, my hitpoints thereafter" input SetThrowRate(float) : "Advisor will throw an object once per this many seconds (plus a little more)" - input WrenchImmediate(string) : "Advisor will immediately start levitating all objects with this name" + input WrenchImmediate(target_destination) : "Advisor will immediately start levitating all objects with this name" input SetStagingNum(integer): "Advisor will stage this many objects at once, then barrage the player." - input PinPlayer(string) : "Advisor will wrench the player to this point in the air. Use a null param to let go." - input BeamOn(string) : "Start a psychic-TK effect beam from the advisor to the specified object. You must remember to turn it off later." - input BeamOff(string) : "Turn off a psychic-TK effect beam from the advisor to the specified object." + input PinPlayer(target_destination) : "Advisor will wrench the player to this point in the air. Use a null param to let go." + input BeamOn(target_destination) : "Start a psychic-TK effect beam from the advisor to the specified object. You must remember to turn it off later." + input BeamOff(target_destination) : "Turn off a psychic-TK effect beam from the advisor to the specified object." input ELightOn(void) : "Turn on an entity light at my location. Please remember to turn this off." input ELightOff(void) : "Turn off my entity light." @@ -1145,33 +1324,40 @@ 1 : "Normal collision detection." ] - shootsound(choices) : "Shoot Sound" : "Weapon_AR2.NPC_Single" : "Gunfire sound to make" = - [ - "Weapon_AR2.NPC_Single" : "AR2" - "Weapon_SMG1.NPC_Single" : "SMG1" - ] + shootsound(sound) : "Shoot Sound" : "Weapon_AR2.NPC_Single" : "Gunfire sound to make" //= + //[ + // "Weapon_AR2.NPC_Single" : "AR2" + // "Weapon_SMG1.NPC_Single" : "SMG1" + //] tracertype(choices) : "Tracer" : "AR2TRACER" : "Type of tracer to display" = [ "Tracer" : "Default" "AR2TRACER" : "AR2" + "" : "None" ] + + input FireBurst(integer) : "Fires a burst with the specified number of shots, regardless of the entity's current state, the maximum and minimum burst numbers, or any bursts currently being executed by this entity." + input SetTarget(target_destination) : "Sets the target to shoot at." + + // Outputs + output OnFire(void) : "Fires for each bullet fired by this entity." ] -@PointClass base(Parentname,Angles,Targetname) sphere(DamageRadius) studio("models/props_combine/headcrabcannister01b.mdl") = env_headcrabcanister : "Headcrab canister" +@PointClass base(Targetname,Parentname,Angles) sphere(DamageRadius) studio("models/props_combine/headcrabcannister01b.mdl") = env_headcrabcanister : "Headcrab canister" [ spawnflags(Flags) = [ - 1 : "No Impact Sound" : 0 - 2 : "No Launch Sound" : 0 - 4096 : "Start Impacted" : 0 - 8192 : "Land at initial position" : 0 - 16384 : "Wait for input to open" : 0 - 32768 : "Wait for input to spawn headcrabs" : 0 - 65536 : "No smoke" : 0 - 131072 : "No shake" : 0 - 262144 : "Remove on impact" : 0 - 524288 : "No impact effects" : 0 + 1 : "[1] No Impact Sound" : 0 + 2 : "[2] No Launch Sound" : 0 + 4096 : "[4096] Start Impacted" : 0 + 8192 : "[8192] Land at initial position" : 0 + 16384 : "[16384] Wait for input to open" : 0 + 32768 : "[32768] Wait for input to spawn headcrabs" : 0 + 65536 : "[65536] No smoke" : 0 + 131072 : "[131072] No shake" : 0 + 262144 : "[262144] Remove on impact" : 0 + 524288 : "[524288] No impact effects" : 0 ] HeadcrabType(choices) : "Which headcrab to spawn?" : 0 = [ @@ -1196,14 +1382,16 @@ input OpenCanister(void) : "Opens the canister (must be called after the OnImpacted output is fired)" input SpawnHeadcrabs(void) : "Spawns headcrabs (must be called after the OnImpacted output is fired and after OpenCanister is triggered, if the Wait for Input to open spawnflag is checked.)" input StopSmoke(void) : "Stops the smoke if it's on" + input StopHissing(void) : "Stops post-impact hissing." // Outputs - output OnLaunched(string) : "Fired when the canister is launched" + output OnLaunched(string) : "Fires when the canister is launched" output OnImpacted(void) : "Fires when canister hits the ground" output OnOpened(void) : "Fires when canister has finished opening" + output OnCrab(ehandle) : "Fires for each headcrab that comes out of this canister" ] -@NPCClass base(BaseNPC, TalkNPC, PlayerCompanion) studio() = npc_vortigaunt : "Vortigaunt" +@NPCClass base(TalkNPC, PlayerCompanion) studio() = npc_vortigaunt : "Vortigaunt" [ model(studio) : "World model" : "models/vortigaunt.mdl" @@ -1222,8 +1410,8 @@ // Inputs input EnableArmorRecharge(void) : "Allow armor recharging on players" input DisableArmorRecharge(void) : "Do not allow armor recharging on players" - input ExtractBugbait(string) : "Causes the vortigaunt to extract bugbait from the named target passed in." - input ChargeTarget(string) : "Force the vortigaunt to charge the named target." + input ExtractBugbait(target_destination) : "Causes the vortigaunt to extract bugbait from the named target passed in." + input ChargeTarget(target_destination) : "Force the vortigaunt to charge the named target." input EnableHealthRegeneration(void) : "Allow the vortigaunt to start regenerating his health over time, like vital allies." input DisableHealthRegeneration(void) : "Stop the vortigaunt from regenerating his health. (Default behavior)" input TurnBlue(bool) : "If true, turn blue. If false, turn green. (Episodic)." @@ -1238,40 +1426,40 @@ output OnPlayerUse(void) : "Fires when a player +USEs the vortigaunt." ] -@NPCClass base(BaseNPC) = npc_spotlight : "Spotlight" -[ - spawnflags(Flags) = - [ - 65536 : "Start Track On" : 1 - 131072 : "Start Light On" : 1 - 262144 : "No Dynamic Light" : 0 - 524288 : "Never Move" : 0 - ] - - health(Integer) : "Health" : 100 - YawRange(integer) : "YawRange" : 90 - PitchMin(integer) : "PitchMin" : 35 - PitchMax(integer) : "PitchMax" : 50 - IdleSpeed(integer) : "IdleSpeed" : 2 - AlertSpeed(integer) : "AlertSpeed" : 5 - spotlightlength(integer) : "SpotlightLength" : 500 - spotlightwidth(integer) : "SpotlightWidth" : 50 - rendercolor(color255) : "Color (R G B)" : "255 255 255" - - // Inputs - input LightOn(void) : "LightOn" - input LightOff(void) : "LightOff" - input TrackOn(void) : "TrackOn" - input TrackOff(void) : "TrackOff" - - // Outputs - output OnAlert(void) : "Fires when the spotlight alerted by sound" - output DetectedEnemy(string) : "Outputs enemy entity when spotlight finds and starts tracking enemy" - output LostEnemy(string) : "Outputs enemy entity when spotlight loses enemy that it's tracking, if enemy still exists" - output SquadDetectedEnemy(string) : "Outputs enemy entity when squad finds and starts tracking enemy" - output SquadLostEnemy(string) : "Outputs enemy entity when squad loses enemy that it's tracking, if entity still exists" - output LightPosition(string) : "Position of the end of the spotlight beam" -] +//@NPCClass base(BaseNPC) = npc_spotlight : "Spotlight" +//[ +// spawnflags(Flags) = +// [ +// 65536 : "[65536] Start Track On" : 1 +// 131072 : "[131072] Start Light On" : 1 +// 262144 : "[262144] No Dynamic Light" : 0 +// 524288 : "[524288] Never Move" : 0 +// ] +// +// health(Integer) : "Health" : 100 +// YawRange(integer) : "YawRange" : 90 +// PitchMin(integer) : "PitchMin" : 35 +// PitchMax(integer) : "PitchMax" : 50 +// IdleSpeed(integer) : "IdleSpeed" : 2 +// AlertSpeed(integer) : "AlertSpeed" : 5 +// spotlightlength(integer) : "SpotlightLength" : 500 +// spotlightwidth(integer) : "SpotlightWidth" : 50 +// rendercolor(color255) : "Color (R G B)" : "255 255 255" +// +// // Inputs +// input LightOn(void) : "LightOn" +// input LightOff(void) : "LightOff" +// input TrackOn(void) : "TrackOn" +// input TrackOff(void) : "TrackOff" +// +// // Outputs +// output OnAlert(void) : "Fires when the spotlight alerted by sound" +// output DetectedEnemy(string) : "Outputs enemy entity when spotlight finds and starts tracking enemy" +// output LostEnemy(string) : "Outputs enemy entity when spotlight loses enemy that it's tracking, if enemy still exists" +// output SquadDetectedEnemy(string) : "Outputs enemy entity when squad finds and starts tracking enemy" +// output SquadLostEnemy(string) : "Outputs enemy entity when squad loses enemy that it's tracking, if entity still exists" +// output LightPosition(string) : "Position of the end of the spotlight beam" +//] @NPCClass base(BaseNPC) studio() = npc_strider : "Strider" [ @@ -1280,19 +1468,21 @@ "models/combine_strider.mdl" : "Standard strider" "models/combine_strider_vsdog.mdl" : "The Strider that fights Dog" ] + + stompfilter(filterclass) : "Stomp Filter" : : "Which entities am I allowed to stomp? Don't forget to use the 'Can Stomp Player' spawnflag as well." spawnflags(Flags) = [ - 65536 : "Can Stomp Player" : 0 - 131072 : "Minimal damage taken from NPCs (1 point per missile)" : 0 + 65536 : "[65536] Can Stomp Player" : 0 + 131072 : "[131072] Minimal damage taken from NPCs (1 point per missile)" : 0 ] //Inputs input SetMinigunTime(float) : "Time to shoot at any set minigun target" - input SetMinigunTarget(string) : "Strider will shoot minigun at this" + input SetMinigunTarget(target_destination) : "Strider will shoot minigun at this" input DisableMinigun(void) : "Disables the minigun until further notice by the EnableMinigun input." input EnableMinigun(void) : "Enables the minigun if it was disabled by the DisableMinigun input." - input SetCannonTarget(string) : "Strider will shoot cannon at this" + input SetCannonTarget(target_destination) : "Strider will shoot cannon at this" input FlickRagdoll(void) : "Strider will flick anyone he's skewered" input StartPatrol(void) : "Start patrolling back and forth along the current track." @@ -1305,7 +1495,7 @@ input DisableCrouchWalk(void) input EnableCrouchWalk(void) - input SetTargetPath(string) : "Set a path for the strider to patrol. The strider will first move to the closest point on the path" + input SetTargetPath(target_destination) : "Set a path for the strider to patrol. The strider will first move to the closest point on the path" input ClearTargetPath(void) : "Clear the strider patrol path" input EnableAggressiveBehavior(void) : "Use aggressive behavior. Fire faster, more frequently" @@ -1316,10 +1506,12 @@ input DisableCrouch(void) : "Prevent the Strider from crouching" input DisableMoveToLOS(void) : "Prevent the Strider from seeking Line of Sight to target. (Hold position)" - input DisableCollisionWith(string) : "Disable collision with a given object." - input EnableCollisionWith(string) : "Reenable collision with a given object." + input DisableCollisionWith(target_destination) : "Disable collision with a given object." + input EnableCollisionWith(target_destination) : "Reenable collision with a given object." input ScaleGroundSpeed(float) : "Scale the movement speed of the strider" + + input SetStompFilter(target_destination) : "Sets the strider's stomp filter." disablephysics(choices) : "Disable physics (reduce CPU)" : 0 = [ @@ -1328,12 +1520,31 @@ ] ] +@PointClass base(Targetname, Parentname) iconsprite("editor/concussiveblast.vmt") sphere(radius) = concussiveblast : + "A special, space-warping explosion that damages/dissolves entities in the specified radius. " + + "Striders use this in their warp cannons." +[ + damage(float) : "Damage" : 200 : "The amount of damage done by the explosion." + radius(float) : "Radius" : 256 : "The radius in which the explosion can damage entities." + magnitude(string) : "Shockwave Magnitude" : "1.0" : "Multiplier for how far the shockwave should go. Does nothing to the radius or damage. 2.5 = Strider Cannon" + soundname(sound) : "Sound" : "" : "Sound to make when we explode." + + spawnflags(flags) = + [ + 1: "[1] Repeatable" : 0 + ] + + // Inputs + input Explode(void) : "Triggers the explosion." + input ExplodeWithMagnitude(float) : "Triggers the explosion with the specified magnitude." +] + @NPCClass base(BaseNPC, BaseFadeProp) studio("models/Barnacle.mdl") sphere(fademindist) sphere(fademaxdist) = npc_barnacle : "Barnacle" [ spawnflags(Flags) = [ - 65536 : "Cheap death" : 0 - 131072 : "Ambush Mode" : 0 + 65536 : "[65536] Cheap death" : 0 + 131072 : "[131072] Ambush Mode" : 0 ] RestDist(float) : "Rest Distance" : 16 : "Distance above the ground that the tongue should lie when the barnacle is at rest" @@ -1349,6 +1560,13 @@ @NPCClass base(BaseHelicopter) studio("models/gunship.mdl" ) = npc_combinegunship : "Combine Gunship" [ + HealthIncrements(integer) : "Health Increments" : 0 : "The number of times this gunship must be damaged before dying. This value is multiplied by 0.5 on Easy and 1.5 on Hard. 0 = the value stored in sk_gunship_health_increments (default 5)." + + CanGroundAttack(choices) : "Can use ground attack automatically" : 0 : "Allows this gunship to use its belly cannon automatically during combat." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs input OmniscientOn(void) : "Gunship knows target's location even when target is out of sight or behind cover" @@ -1362,7 +1580,7 @@ input EnableGroundAttack( void ) : "Allow the gunship to use its ground attack" input DisableGroundAttack( void ) : "Don't allow the gunship to use its ground attack" - input DoGroundAttack( string ) : "Causes the gunship to execute its ground attack" + input DoGroundAttack( target_destination ) : "Causes the gunship to execute its ground attack. Pass an entity for the gunship to attack the specified entity, otherwise it will do it at its current position." input BecomeInvulnerable( void ): "Stops the gunship from taking damage, but still makes sounds effects" input BecomeVulnerable( void ): "Makes the gunship act normally to damage" @@ -1379,7 +1597,8 @@ spawnflags(Flags) = [ - 4096 : "No ground attack" : 0 + //4096 : "[4096] No ground attack" : 0 + 8192 : "[8192] Use chopper model (Lost Coast chopper)" : 0 ] ] @@ -1397,7 +1616,7 @@ [ spawnflags(Flags) = [ - 32768 : "Wait for input before dropoff" : 0 + 32768 : "[32768] Wait for input before dropoff" : 0 ] LandTarget(target_destination) : "Land target name" @@ -1425,6 +1644,12 @@ 0 : "No" 1 : "Yes" ] + + DontEmitDanger(Choices) : "Don't emit danger on dropoff" : 0 : "Prevents this dropship from emitting danger sounds when it's dropping off soldiers." = + [ + 0 : "No" + 1 : "Yes" + ] CrateType(Choices) : "Crate Type" : 2 = [ @@ -1435,6 +1660,12 @@ 1 : "Soldier Crate" 2 : "None" ] + + AllowsAnyDamage(Choices) : "Allows any damage (to container)" : 0 : "Allows this dropship's container (if it's a soldier crate) to take any amount of any type of damage, including bullet or melee damage. This is supposed to allow dropship containers to be taken down in previously impossible ways and should be used with an actual damage filter." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs input LandLeaveCrate(integer) : "Land, drop soldiers, and leave the crate behind. Specify the number of troops to drop off in the parameter." @@ -1442,9 +1673,10 @@ input DropMines(integer) : "Drop Rollermines. Specify the number of mines to drop in the parameter." input DropStrider(void) : "Drop the Strider you're carrying. Now." input DropAPC(void) : "Drop the APC you're carrying. Now." + input DropCargo(void) : "Drop whatever the hell you're carrying. Now." input Hover(target_destination) : "Hover over a named target entity until told to fly to a path." - input Pickup(string) : "Pickup an entity." - input SetLandTarget(string) : "Set my land target name." + input Pickup(target_destination) : "Pick up that entity." + input SetLandTarget(target_destination) : "Set my land target name." input SetGunRange(float) : "Set my crate gun's range." input EnableRotorSound(void) : "Turns on rotor sounds" @@ -1462,23 +1694,29 @@ ] -@NPCClass base(BaseHelicopter) studio("models/combine_helicopter.mdl" ) = npc_helicopter : "Helicopter" +@NPCClass base(BaseHelicopter, Studiomodel) studioprop() = npc_helicopter : "Helicopter" [ + model(studio) : "World Model" : "models/combine_helicopter.mdl" : "This model should have the right attachments." + + health(integer) : "Health" : 0 : "Overrides this helicopter's health. 0 = default npc_helicopter health (5600)." + spawnflags(Flags) = [ - 65536 : "Loud rotor wash sound" : 0 - 131072 : "Electrical drone" : 0 - 262144 : "Helicopter lights" : 0 - 524288 : "Ignore avoid spheres+boxes" : 0 - 1048576 : "More aggressive attacks" : 0 - 2097152 : "Cast long shadow" : 0 + 65536 : "[65536] Loud rotor wash sound" : 0 + 131072 : "[131072] Electrical drone" : 0 + 262144 : "[262144] Helicopter lights" : 0 + 524288 : "[524288] Ignore avoid spheres+boxes" : 0 + 1048576 : "[1048576] More aggressive attacks" : 0 + 2097152 : "[2097152] Cast long shadow" : 0 ] InitialSpeed(string) : "Initial Speed" : "0" GracePeriod(float) : "Grace Period" : "2.0" : "Time in seconds the helicopter has to see the player before he starts shooting" PatrolSpeed(float) : "Patrol Speed" : "0" : "Speed at which the helicopter moves if he has no enemy." + + FieldOfView(float) : "Field of View" : "-1.0" : "The helicoter's viewcone. (1.0 = straight ahead, 0.0 = +/- 90 degrees, -1.0 = all directions)" - noncombat(choices) : "Non-combat (Do not precache gibs)" : "No" = + noncombat(choices) : "Non-combat (Do not precache gibs)" : "No" : "If enabled, this helicopter will not precache stuff that would only be seen in combat, like mines or gibs. Even damaging the helicopter in this state can crash the game, so you might want to use a damage filter too." = [ 0 : "No" 1 : "Yes" @@ -1527,13 +1765,14 @@ // Outputs output OnHealthChanged(integer) : "Fires when the helicopter health changes. The integer is the percentage of health the chopper has from 0-100." output OnShotDown(void) : "Fires the instant the helicopter is killed" + output OutBomb(ehandle) : "Fires for each bomb dropped." ] @PointClass base(Targetname, Parentname) studio("models/combine_helicopter/helicopter_bomb01.mdl") = grenade_helicopter : "Helicopter bomb" [ spawnflags(Flags) = [ - 65536 : "Is a dud" : 0 + 65536 : "[65536] Is a dud" : 0 ] // Inputs @@ -1548,7 +1787,7 @@ [ spawnflags(Flags) = [ - 65536 : "Avoid the sphere above and below" : 0 + 65536 : "[65536] Avoid the sphere above and below" : 0 ] radius(float) : "Radius" : 128 ] @@ -1557,7 +1796,7 @@ [ spawnflags(Flags) = [ - 65536 : "Avoid the box above and below" : 0 + 65536 : "[65536] Avoid the box above and below" : 0 ] ] @@ -1565,30 +1804,87 @@ [ ] -@NPCClass base(BaseNPC) studio("models/Zombie/fast.mdl") = npc_fastzombie : "Fast Zombie" +// npc_BaseZombie stuff +@BaseClass base(BaseNPC) = BaseZombie [ - input AttachToVehicle(string) : "Attach to a specified vehicle entity" + Headless(choices) : "Headcrab-less" : "No" : "Toggles whether this zombie should have a headcrab on their head. They usually should." = + [ + 0 : "No" + 1 : "Yes" + ] + + spawnflags(Flags) = + [ + 32768 : "[32768] Never turn into a torso" : 0 + ] + + output OnSwattedProp(ehandle) : "Fires when this NPC swats a prop, passing the prop as the activator and parameter." ] -@NPCClass base(BaseNPC) studio("models/Zombie/Fast_torso.mdl") = npc_fastzombie_torso : "Fast Zombie Torso" +@NPCClass base(BaseZombie) studio("models/Zombie/fast.mdl") = npc_fastzombie : "Fast Zombie" +[ + input AttachToVehicle(target_destination) : "Attach to a specified vehicle entity" +] + +@NPCClass base(BaseZombie) studio("models/Zombie/Fast_torso.mdl") = npc_fastzombie_torso : "Fast Zombie Torso" [ ] -@NPCClass base(BaseNPC) studio("models/Zombie/Classic.mdl") = npc_zombie : "Zombie" +@NPCClass base(BaseZombie) studio("models/Zombie/Classic.mdl") = npc_zombie : "Zombie" [ ] -@NPCClass base(BaseNPC) studio("models/Zombie/Classic_torso.mdl") = npc_zombie_torso : "Zombie Torso" +@NPCClass base(BaseZombie) studio("models/Zombie/Classic_torso.mdl") = npc_zombie_torso : "Zombie Torso" [ ] -@NPCClass base(BaseNPC) studio("models/Zombie/zombie_soldier.mdl") = npc_zombine : "Combine Soldier Zombie" +// CUSTOM ZOMBIES +// ------------------ +@NPCClass base(npc_zombie, Studiomodel) studio() = npc_zombie_custom : "Custom Zombie" [ + health(integer) : "Health" : 0 : "Overrides this zombie's health. 0 = default npc_zombie health." + + model(studio) : "Model" : "models/Zombie/Classic.mdl" : "The zombie's model." + + LegsModel(studio) : "Legs Model" : "models/zombie/classic_legs.mdl" : "The model to use for legs. You can leave this blank if you enable the 'No Torso' spawnflag." + TorsoModel(studio) : "Torso Model" : "models/zombie/classic_torso.mdl" : "The model to use for torso. You can leave this blank if you enable the 'No Torso' spawnflag." + HeadcrabClassname(npcclass) : "Headcrab Classname" : "npc_headcrab" : "The NPC that should be used as the 'headcrab'. You can leave this blank if the zombie is marked as headcrab-less." + HeadcrabModel(studio) : "Headcrab Model" : "models/headcrabclassic.mdl" : "The model that should be used for 'headcrab' ragdolls. You can leave this blank if the zombie is marked as headcrab-less." +] + +@NPCClass base(npc_zombie_torso, Studiomodel) studio() = npc_zombie_custom_torso : "Custom Zombie Torso" +[ + health(integer) : "Health" : 0 : "Overrides this zombie's health. 0 = default npc_zombie health." + + model(studio) : "Model" : "models/Zombie/Classic_torso.mdl" : "The zombie's model." + + HeadcrabClassname(pointentityclass) : "Headcrab Classname" : "npc_headcrab" : "The NPC that should be used as the 'headcrab'. You can leave this blank if the zombie is marked as headcrab-less." + HeadcrabModel(studio) : "Headcrab Model" : "models/headcrabclassic.mdl" : "The model that should be used for 'headcrab' ragdolls. You can leave this blank if the zombie is marked as headcrab-less." +] +// ------------------ + +@NPCClass base(BaseZombie) studio("models/Zombie/zombie_soldier.mdl") = npc_zombine : "Combine Soldier Zombie" +[ + NumGrenades(choices) : "Number of Grenades" : "1" : "The number of grenades this zombine can pull out." = + [ + "0" : "None" + "1" : "1" + "2" : "2" + "3" : "3" + "4" : "4" + "5" : "5" + "999999" : "Unlimited" + ] + + // Inputs input StartSprint(void) : "Forces the zombine to sprint." input PullGrenade(void) : "Forces the zombine to pull a grenade." + + // Outputs + output OnPullGrenade(ehandle) : "Fires when the zombine pulls a grenade. Passes the grenade." ] -@NPCClass base(BaseNPC) studio("models/Zombie/Poison.mdl") = npc_poisonzombie : +@NPCClass base(BaseZombie) studio("models/Zombie/Poison.mdl") = npc_poisonzombie : "A bloated, disgusting, fluid-spurting zombie created by a poison headcrab." [ crabcount(choices) : "Crabs in nest" : 3 = @@ -1603,8 +1899,8 @@ [ spawnflags(Flags) = [ - 65536 : "No Dynamic Light" : 0 - 131072: "Strider Scout Scanner" : 0 + 65536 : "[65536] No Dynamic Light" : 0 + 131072: "[131072] Strider Scout Scanner" : 0 ] spotlightlength(integer) : "SpotlightLength" : 500 @@ -1633,18 +1929,30 @@ 0 : "No" 1 : "Yes" ] + + DisablePhotos(choices) : "Never take photos" : 0 : "Prevents this scanner from ever taking photos. It may still chase and inspect, but it will never actually take any pictures or flashes." = + [ + 0 : "No" + 1 : "Yes" + ] + // Inputs input DisableSpotlight(void) : "DisableSpotlight" - input InspectTargetPhoto(string) : "Tells the scanner to photograph the given entity, named by classname or by target name. !activator or !player works here also." - input InspectTargetSpotlight(string) : "Tells the scanner to spotlight the given entity, named by classname or by target name. !activator or !player works here also." + input InspectTargetPhoto(target_destination) : "Tells the scanner to photograph the given entity, named by classname or by target name. !activator or !player works here also." + input InspectTargetSpotlight(target_destination) : "Tells the scanner to spotlight the given entity, named by classname or by target name. !activator or !player works here also." input InputSetFlightSpeed(integer) : "Sets the flight speed of the scanner" input InputShouldInspect(integer) : "Set whether should inspect or not" - input SetFollowTarget(string) : "Set target to follow until told otherwise" + input SetFollowTarget(target_destination) : "Set target to follow until told otherwise" input ClearFollowTarget(void) : "Stop following our target" input SetDistanceOverride(float) : "Override the distance the scanner will attempt to keep between inspection targets and itself" - input DeployMine(void) : "Drop landmine (if carrying one)" - input EquipMine(void) : "Equip with landmine" + // The FGD definitions have been moved to npc_clawscanner, but just the FGD definitions. + // You could still use Deploy/EquipMine on a npc_cscanner and it will still work. + //input DeployMine(void) : "Drop landmine (if carrying one)" + //input EquipMine(void) : "Equip with landmine" + + input DisablePhotos(void) : "Disables this scanner's ability to take photos." + input EnablePhotos(void) : "Enables this scanner's ability to take photos if it was previously disabled." // Outputs output OnPhotographPlayer(void) : "Fired any time the scanner takes a picture of the player." @@ -1652,66 +1960,20 @@ ] -@NPCClass base(BaseNPC) studio("models/shield_scanner.mdl") = npc_clawscanner : "Claw Scanner" +@NPCClass base(BaseNPC, npc_cscanner) studio("models/shield_scanner.mdl") = npc_clawscanner : "Claw Scanner" [ - spawnflags(Flags) = - [ - 65536 : "No Dynamic Light" : 0 - 131072: "Strider Scout Scanner" : 0 - ] - - spotlightlength(integer) : "SpotlightLength" : 500 - spotlightwidth(integer) : "SpotlightWidth" : 50 - - spotlightdisabled(choices) : "SpotlightDisabled" : 0 = - [ - 0 : "No" - 1 : "Yes" - ] - - ShouldInspect(choices) : "Should inspect" : 1 = - [ - 0 : "No" - 1 : "Yes" - ] - - OnlyInspectPlayers(choices) : "Only Inspect Players" : 0 = - [ - 0 : "No" - 1 : "Yes" - ] - - NeverInspectPlayers(choices) : "Never Inspect Players" : 0 = - [ - 0 : "No" - 1 : "Yes" - ] - // Inputs - input DisableSpotlight(void) : "DisableSpotlight" - input InspectTargetPhoto(string) : "Tells the scanner to photograph the given entity, named by classname or by target name. !activator or !player works here also." - input InspectTargetSpotlight(string) : "Tells the scanner to spotlight the given entity, named by classname or by target name. !activator or !player works here also." - input InputSetFlightSpeed(integer) : "Sets the flight speed of the scanner" - input InputShouldInspect(integer) : "Set whether should inspect or not" - input SetFollowTarget(string) : "Set target to follow until told otherwise" - input ClearFollowTarget(void) : "Stop following our target" - input SetDistanceOverride(float) : "Override the distance the scanner will attempt to keep between inspection targets and itself" - input DeployMine(void) : "Drop landmine (if carrying one)" input EquipMine(void) : "Equip with landmine" - - // Outputs - output OnPhotographPlayer(void) : "Fired any time the scanner takes a picture of the player." - output OnPhotographNPC(void) : "Fired any time the scanner takes a picture of an NPC." ] @NPCClass base(BaseNPC,AlyxInteractable) studio("models/manhack.mdl") = npc_manhack : "Manhack" [ spawnflags(Flags) = [ - 65536 : "Start packed up (folded and engine off)" : 0 - 131072 : "Don't use any damage effects" : 0 - 262144 : "Use Air Nodes" : 0 - 1048576 : "No Danger Sounds" : 0 + 65536 : "[65536] Start packed up (folded and engine off)" : 0 + 131072 : "[131072] Don't use any damage effects" : 0 + 262144 : "[262144] Use Air Nodes" : 0 + 1048576 : "[1048576] No Danger Sounds" : 0 ] input DisableSwarm(void) : "Disable the manhack swarm behavior." @@ -1729,14 +1991,20 @@ ] -@NPCClass base(BaseNPC,RappelNPC) studio("models/Police.mdl") = npc_metropolice : "MetroPolice" +@NPCClass base(BaseNPC,RappelNPC,GrenadeUser) studio() = npc_metropolice : "MetroPolice" [ + model(studio) : "Model" : "models/police.mdl" : "The model of this npc_metropolice. Keep in mind this overrides the 'Efficient' spawnflag which sets the model to police_cheaple.mdl." + additionalequipment(choices) : "Weapons" : "weapon_pistol" = [ "weapon_pistol" : "Pistol" "weapon_smg1" : "SMG1" "weapon_stunstick" : "Stun Stick" + "weapon_crowbar" : "Crowbar" + "weapon_ar2" : "AR2" "weapon_shotgun" : "Shotgun" + "weapon_357" : "357" + "weapon_rpg" : "RPG" "0" : "Nothing" ] @@ -1755,25 +2023,34 @@ spawnflags(Flags) = [ - 131072 : "Simple cops" : 0 - 262144 : "Rappel (UNCHECK THIS IF IT IS CHECKED!)" : 0 - 524288 : "Always stitch" : 0 - 1048576 : "No chatter" : 0 - 2097152 : "Arrest enemies" : 0 - 4194304 : "No far stitching" : 0 - 8388608 : "Prevent manhack toss" : 0 - 16777216: "Allowed to respond to thrown objects" : 0 - 33554432: "Mid-range attacks (halfway between normal + long-range)" : 0 + 131072 : "[131072] Simple cops" : 0 + //262144 : "[262144] Rappel (UNCHECK THIS IF IT IS CHECKED!)" : 0 + 524288 : "[524288] Always stitch" : 0 + 1048576 : "[1048576] No chatter" : 0 + 2097152 : "[2097152] Arrest enemies" : 0 + 4194304 : "[4194304] No far stitching" : 0 + 8388608 : "[8388608] Prevent manhack toss" : 0 + 16777216: "[16777216] Allowed to respond to thrown objects" : 0 + 33554432: "[33554432] Mid-range attacks (halfway between normal + long-range)" : 0 ] // Inputs - input EnableManhackToss(void) : "Enables manhack toss (which had been disabled by the spawnflag)" - input SetPoliceGoal(string) : "Causes the NPC to police the area defined by an ai_goal_police" + input DisableManhackToss(void) : "Disables manhack toss" + input EnableManhackToss(void) : "Enables manhack toss (which had been disabled by the spawnflag or input)" + input SetPoliceGoal(target_destination) : "Causes the NPC to be assigned to the specified ai_goal_police. Pass no parameter to clear the goal." input ActivateBaton(void) : "Set the baton to active" + input AdministerJustice(void) : "Orders this NPC to administer justice to the player as if they hit this NPC with a can or something. If this NPC cannot respond, it will look for another npc_metropolice to do it." + input SetWarnings(integer) : "Sets the number of warnings this NPC has given to the player." + input AddWarnings(integer) : "Adds to the number of warnings this NPC has given to the player." + input DeployManhack(void) : "Deploys a manhack immediately if one is available." + input AddManhacks(integer) : "Adds to the number of manhacks this NPC has available." + input SetManhacks(integer) : "Sets the number of manhacks this NPC has available." // Outputs output OnStunnedPlayer(void) : "Fires when the player is hit by a stunstick by this NPC." output OnCupCopped(void) : "Fires if the player hits me with the cupcop can. ONLY use for x360 achievement." + output OnHitByPhysicsObject(ehandle) : "Fired when the player hits this NPC with any prop. Passes the thrower as the activator and the prop as the parameter." + output OutManhack(ehandle) : "Fired the moment when this NPC spawns a manhack. Passes the manhack." ] @NPCClass base(BaseNPC) studio("models/Synth.mdl") = npc_crabsynth : "Crab Synth" @@ -1788,10 +2065,10 @@ "weapon_smg1" : "SMG1" "weapon_ar2" : "AR2" "weapon_stunstick" : "Stun Stick" - "weapon_crowbar" : "Crow Bar" + "weapon_crowbar" : "Crowbar" "weapon_shotgun" : "Shotgun" - "weapon_beerbottle" : "Beer Bottle" - "weapon_beerbottle2" : "Beer Bottle2" + //"weapon_beerbottle" : "Beer Bottle" + //"weapon_beerbottle2" : "Beer Bottle2" "weapon_rpg" : "RPG" "0" : "Nothing" ] @@ -1808,7 +2085,7 @@ ] -@NPCClass base(TalkNPC,Parentname, PlayerCompanion) studio() = npc_alyx : "Alyx" +@NPCClass base(TalkNPC, Parentname, PlayerCompanion) studio() = npc_alyx : "Alyx" [ model(studio) : "World model" : "models/alyx.mdl" @@ -1816,6 +2093,9 @@ [ "weapon_alyxgun" : "Alyx Gun" "weapon_shotgun" : "Shotgun" + "weapon_pistol" : "Pistol" + "weapon_smg1" : "SMG1" + "weapon_ar2" : "AR2" "0" : "Nothing" ] @@ -1836,7 +2116,7 @@ input AllowInteraction(void) : "Allow Alyx's 'hacking' AI to run." input DisallowInteraction(void) : "Disallow Alyx's 'hacking' AI." input AllowDarknessSpeech(bool) : "Enables or disables Alyx's darkness speech ('where are you', etc)." - input SetAnimLockedEntity(string) : "Sets Alyx to take her animation and cycle position from another entity." + input SetAnimLockedEntity(target_destination) : "Sets Alyx to take her animation and cycle position from another entity." input ClearAnimLockedEntity(void) : "Stops Alyx from taking her animation locking from another character." input GiveEMP(bool): "Gives or removes the EMP tool." @@ -1845,8 +2125,8 @@ output OnPlayerUse(void) : "Fires when a player +USEs Alyx." // Vehicle entry/exit input (ultimately will reside in TalkNPC) - input EnterVehicle(string) : "Make Alyx enter the vehicle specified by name." - input EnterVehicleImmediately(string) : "Make Alyx enter the vehicle specified by name immediately via teleportation." + input EnterVehicle(target_destination) : "Make Alyx enter the vehicle specified by name." + input EnterVehicleImmediately(target_destination) : "Make Alyx enter the vehicle specified by name immediately via teleportation." input ExitVehicle(void) : "Make Alyx exit the vehicle she's in." input CancelEnterVehicle(void) : "Stops Alyx from trying to enter the vehicle if she's outside of it." @@ -1912,7 +2192,7 @@ spawnflags(Flags) = [ - 65536 : "Ignore speech semaphore" : 0 + 65536 : "[65536] Ignore speech semaphore" : 0 ] ] @@ -1927,14 +2207,14 @@ @NPCClass base(BaseNPC) studio("models/dog.mdl") = npc_dog : "d0g" [ //Inputs - input SetPickupTarget(string) : "Sets the target entity for dog to pickup." - input StartCatchThrowBehavior(string) : "Tells d0g to start playing with the player. You can pass in the name of the object you want him to play with otherwise he'll find the closes phys_object." - input StopCatchThrowBehavior(string) : "Stop the catch and throw behavior." + input SetPickupTarget(target_destination) : "Sets the target entity for dog to pickup." + input StartCatchThrowBehavior(target_destination) : "Tells d0g to start playing with the player. You can pass in the name of the object you want him to play with otherwise he'll find the closes phys_object." + input StopCatchThrowBehavior(void) : "Stop the catch and throw behavior." input PlayerPickupObject(void) : "Tells d0g the physgun just picked up an object." input StartWaitAndCatch(void) : "Tells d0g to wait for the player to throw an object at him." input StopWaitAndCatch(void) : "Tells d0g to stop waiting for the player." input SetThrowArcModifier(float) : "Used to pass in a modifier for d0g's object flight arc." - input SetThrowTarget(string) : "Set d0g's throw target (pass in !player if you want the player)" + input SetThrowTarget(target_destination) : "Set d0g's throw target (pass in !player if you want the player)" input TurnBoneFollowersOff(void) : "Turn dog's bone followers off" input TurnBoneFollowersOn(void) : "Turn dog's bone followers on" @@ -1944,14 +2224,12 @@ output OnDogCatch(void) : "Fires when dog catches an object." ] -@PointClass base(BaseNPC, RenderFields, Shadow) studio() = monster_generic : "Generic Script NPC" +@PointClass base(Studiomodel, BaseNPC, RenderFields, Shadow) studio() = monster_generic : "Generic Script NPC" [ spawnflags(Flags) = [ - 65536 : "Not solid" : 0 + 65536 : "[65536] Not solid" : 0 ] - model(studio) : "Model" - body(Integer) : "Body" : 0 ] @@ -1967,6 +2245,36 @@ "MEDIUM_HULL" : "Medium" "LARGE_HULL" : "Large" ] + + SetClassify(choices) : "Classify" : 0 : "Simulate this class. Useful for relationships." = + [ + 0 : "CLASS_NONE" + 1 : "CLASS_PLAYER" + 2 : "CLASS_PLAYER_ALLY (Citizens)" + 3 : "CLASS_PLAYER_ALLY_VITAL (Alyx, Dr. Kleiner, GameEndAlly vorts, etc.)" + 4 : "CLASS_ANTLION" + 5 : "CLASS_BARNACLE" + 6 : "CLASS_BULLSEYE (npc_bullseyes)" + 7 : "CLASS_CITIZEN_PASSIVE (pre-criminal citizens)" + //8 : "CLASS_CITIZEN_REBEL (Unused)" + 9 : "CLASS_COMBINE (Soldiers, turrets, etc.)" + 10 : "CLASS_COMBINE_GUNSHIP (Gunships, helicopters, dropships)" + //11 : "CLASS_CONSCRIPT (Unused)" + 12 : "CLASS_HEADCRAB" + 13 : "CLASS_MANHACK" + 14 : "CLASS_METROPOLICE" + //15 : "CLASS_MILITARY (Unused)" + 16 : "CLASS_SCANNER" + 17 : "CLASS_STALKER" + 18 : "CLASS_VORTIGAUNT (Non-vital vortigaunts only)" + 19 : "CLASS_ZOMBIE" + 20 : "CLASS_PROTOSNIPER (npc_snipers)" + 21 : "CLASS_MISSILE" + 22 : "CLASS_FLARE" + 23 : "CLASS_EARTH_FAUNA (crows, seagulls, etc.)" + 24 : "CLASS_HACKED_ROLLERMINE" + 25 : "CLASS_COMBINE_HUNTER" + ] ] @PointClass base(BaseNPC, RenderFields, Shadow) studio() = cycler_actor : "Actor Cycler" @@ -1981,11 +2289,11 @@ [ spawnflags(Flags) = [ - 16 : "Fade Corpse" : 0 + 16 : "[16] Fade Corpse" : 0 ] NPCType(npcclass) : "Class name of spawned NPC" - NPCTargetname(string) : "Childrens' Name" + NPCTargetname(target_source) : "Childrens' Name" NPCSquadname(string) : "Childrens' Squad Name" NPCHintGroup(string) : "Childrens' Hint Group" @@ -1997,6 +2305,7 @@ "weapon_smg1" : "SMG1" "weapon_stunstick" : "Stun Stick" "weapon_annabelle" :"Grigori's Shotgun" + "weapon_rpg" : "RPG" "0" : "Nothing" ] ] @@ -2005,19 +2314,19 @@ [ spawnflags(Flags) = [ - 1024 : "Random spawn node" : 0 - 2048 : "Try to spawn close to the current target" : 0 - 4096 : "Pick a random fight target" : 0 - 8192 : "Try to play blocked effects near the player" : 0 + 1024 : "[1024] Random spawn node" : 0 + 2048 : "[2048] Try to spawn close to the current target" : 0 + 4096 : "[4096] Pick a random fight target" : 0 + 8192 : "[8192] Try to play blocked effects near the player" : 0 ] TemplateName(target_destination) : "Name of template NPC" spawngroup(string) : "Spawn on Hint Group" : "" : "If specified, children will spawn on a hint node from this group, nearest the target." spawnradius(float) : "Spawn radius" : 512 : "Target must be within this distance of any node in the hint group specified above. If the target is outside the radius, no NPC will spawn." - spawntarget(string): "Spawn target" : "" : "Targetname of the entity to try and spawn near." - fighttarget(string): "Fight target" : "" : "Targetname of an entity used as a goal for the children to fight to." - followtarget(string): "Follow target" : "" : "Targetname of an entity used as a goal for the children to follow." + spawntarget(target_destination): "Spawn target" : "" : "Targetname of the entity to try and spawn near." + fighttarget(target_destination): "Fight target" : "" : "Targetname of an entity used as a goal for the children to fight to." + followtarget(target_destination): "Follow target" : "" : "Targetname of an entity used as a goal for the children to follow." vehicledistance(float): "Vehicle Spawn Distance" : "1" : "This is a modifier of the current spawn distance. Spawn distance on a vehicle is based on speed, so this is just a modifier for it." workerspawnrate(float): "Random Worker Spawn Rate" : "0" : "Percentage chance that a spawned antlion will be a worker. (0 = no chance, 1 = 100% chance)" @@ -2033,16 +2342,16 @@ pool_regen_time(float) : "Pool regen time." : 0 : "Time interval between pool regeneration ticks." // Inputs - input SetFightTarget(string) : "Sets the target entity for children to fight to." + input SetFightTarget(target_destination) : "Sets the target entity for children to fight to." input ClearFightTarget(void) : "Clears the fight target goal for this spawner." - input SetFollowTarget(string) : "Sets the target entity for children to follow." + input SetFollowTarget(target_destination) : "Sets the target entity for children to follow." input ClearFollowTarget(void) : "Clears the follow target goal for this spawner." input SetSpawnRadius(float) : "Sets the Spawn Radius." input AddToPool(integer) : "Add the number of antlions specified in the parameter to the pool." input SetMaxPool(integer) : "Set the maximum number of antlions allowed in the pool at any time. Setting it to 0 turns off the pool behavior." input SetPoolRegenAmount(integer) : "Set the number of antlions added to the pool every time it regenerates." input SetPoolRegenTime(float) : "Set the time interval between pool regeneration ticks." - input ChangeDestinationGroup(string) : "Change the spawn group for this spawner." + input ChangeDestinationGroup(target_destination) : "Change the spawn group for this spawner." // Outputs output OnAllBlocked(void) : "Fires when all the hint nodes are blocked." @@ -2129,10 +2438,12 @@ input BeginSequence(void) : "Summons an NPC to act out the scripted sequence." input MoveToPosition(void) : "Summons an NPC to the script location. They will play their scripted idle (or ACT_IDLE if none is specified) until BeginSequence is triggered." input CancelSequence(void) : "Stops the scripted sequence. If fired after a sequence starts, this input will not take effect until the NPC finishes playing the scripted action animation." + input SetTarget(target_destination) : "Sets the target NPC." // Outputs output OnBeginSequence(void) : "Fires when the action animation begins playing." output OnEndSequence(void) : "Fires when the action animation completes." + output OnPostIdleEndSequence(void) : "Fires when the post-idle animation completes." output OnCancelSequence(void) : "Fires when the sequence is cancelled." output OnCancelFailedSequence(void) : "Fires when the sequence is cancelled without ever playing (OnCancelSequence will also fire)." output OnScriptEvent01(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 1 } in the QC." @@ -2145,15 +2456,16 @@ output OnScriptEvent08(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 8 } in the QC." ] +// color(255 0 255) @PointClass sphere() iconsprite("editor/scripted_sentence.vmt") base(Targetname) = scripted_sentence : "Scripted Sentence" [ spawnflags(Flags) = [ - 1 : "Fire Once" : 1 - 2 : "Followers Only" : 0 - 4 : "Interrupt Speech" : 1 - 8 : "Concurrent" : 0 - 16 : "Speak to Activator" : 1 + 1 : "[1] Fire Once" : 1 + 2 : "[2] Followers Only" : 0 + 4 : "[4] Interrupt Speech" : 1 + 8 : "[8] Concurrent" : 0 + 16 : "[16] Speak to Activator" : 1 ] sentence(string) : "Sentence Name" : "" @@ -2205,6 +2517,24 @@ output LeaveTarget(void) : "Fires when NPC leaves this target" ] +@PointClass base(Targetname) iconsprite("editor/scripted_sound.vmt") = scripted_sound : "Makes a target entity emit a sound directly, which allows lip syncing, interruption from death or other lines, etc. at the cost of most forms of control. Not exclusive to NPCs." +[ + message(sound) : "Sound Name" : : "The sound to play. Supports Game Sounds and direct filenames." + target(target_destination) : "Target Entity" : : "The entity that should play the sound." + + GrabAll(choices) : "Grab All" : 0 : "Makes all entities play the sound instead of just one." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input PlaySound(void) : "Starts the sound." + input PlaySoundOnEntity(target_destination) : "Plays the sound on the specified entity." + input StopSound(void) : "Stops the sound if it is playing." + input SetSound(string) : "Sets the sound." +] + @PointClass base(Targetname) iconsprite("editor/ai_relationship.vmt") sphere() = ai_relationship : "AI Relationship - Sets relationships between groups of NPCs in the AI." [ @@ -2237,8 +2567,101 @@ spawnflags(flags) = [ - 1 : "Notify subject of target's location" : 0 - 2 : "Notify target of subject's location" : 0 + 1 : "[1] Notify subject of target's location" : 0 + 2 : "[2] Notify target of subject's location" : 0 + ] + + // Inputs + input ApplyRelationship(void) : "Apply relationship changes. This will change all Subject entities' relationships to all Target entities. \n\nIMPORTANT: Once you ApplyRelationships, this entity is then 'ALWAYS ON' until you send a Disable input or RevertRelationship input. During the time this entity is 'ON', any entities that spawn who match the Subject or Target names will be affected. \n\nIMPORTANT: Unpredictable results may occur when two ai_relationship entities refer to the same set or subset of target or subject entities. This situation should be avoided." + + input RevertRelationship(void) : "Revert relationship changes. This will return the relationship to what it was at the time the ApplyRelationship input was called (or when this ai_relationship was spawned if StartActive is set)." + input RevertToDefaultRelationship(void) : "Revert relationship changes to the default relationship, which may have changed since this ai_relationship was applied. This returns control of the entity relationship to the code." +] + +@PointClass base(Targetname) iconsprite("editor/ai_relationship.vmt") sphere() = ai_relationship_classify : + "AI Relationship - Sets relationships between entire classify classes in the AI." +[ + subject(choices) : "Subject(s)" : 0 : "This is the NPC class whose disposition will change." = + [ + 0 : "CLASS_NONE" + 1 : "CLASS_PLAYER" + 2 : "CLASS_PLAYER_ALLY (Citizens)" + 3 : "CLASS_PLAYER_ALLY_VITAL (Alyx, Dr. Kleiner, GameEndAlly vorts, etc.)" + 4 : "CLASS_ANTLION" + 5 : "CLASS_BARNACLE" + 6 : "CLASS_BULLSEYE (npc_bullseyes)" + 7 : "CLASS_CITIZEN_PASSIVE (pre-criminal citizens)" + //8 : "CLASS_CITIZEN_REBEL (Unused)" + 9 : "CLASS_COMBINE (Soldiers, turrets, etc.)" + 10 : "CLASS_COMBINE_GUNSHIP (Gunships, helicopters, dropships)" + //11 : "CLASS_CONSCRIPT (Unused)" + 12 : "CLASS_HEADCRAB" + 13 : "CLASS_MANHACK" + 14 : "CLASS_METROPOLICE" + //15 : "CLASS_MILITARY (Unused)" + 16 : "CLASS_SCANNER" + 17 : "CLASS_STALKER" + 18 : "CLASS_VORTIGAUNT (Non-vital vortigaunts only)" + 19 : "CLASS_ZOMBIE" + 20 : "CLASS_PROTOSNIPER (npc_snipers)" + 21 : "CLASS_MISSILE" + 22 : "CLASS_FLARE" + 23 : "CLASS_EARTH_FAUNA (crows, seagulls, etc.)" + 24 : "CLASS_HACKED_ROLLERMINE" + 25 : "CLASS_COMBINE_HUNTER" + ] + target(choices) : "Target(s)" : 0 : "This is the NPC class about whom the Subject class will change their disposition." = + [ + 0 : "CLASS_NONE" + 1 : "CLASS_PLAYER" + 2 : "CLASS_PLAYER_ALLY (Citizens)" + 3 : "CLASS_PLAYER_ALLY_VITAL (Alyx, Dr. Kleiner, GameEndAlly vorts, etc.)" + 4 : "CLASS_ANTLION" + 5 : "CLASS_BARNACLE" + 6 : "CLASS_BULLSEYE (npc_bullseyes)" + 7 : "CLASS_CITIZEN_PASSIVE (pre-criminal citizens)" + //8 : "CLASS_CITIZEN_REBEL (Unused)" + 9 : "CLASS_COMBINE (Soldiers, turrets, etc.)" + 10 : "CLASS_COMBINE_GUNSHIP (Gunships, helicopters, dropships)" + //11 : "CLASS_CONSCRIPT (Unused)" + 12 : "CLASS_HEADCRAB" + 13 : "CLASS_MANHACK" + 14 : "CLASS_METROPOLICE" + //15 : "CLASS_MILITARY (Unused)" + 16 : "CLASS_SCANNER" + 17 : "CLASS_STALKER" + 18 : "CLASS_VORTIGAUNT (Non-vital vortigaunts only)" + 19 : "CLASS_ZOMBIE" + 20 : "CLASS_PROTOSNIPER (npc_snipers)" + 21 : "CLASS_MISSILE" + 22 : "CLASS_FLARE" + 23 : "CLASS_EARTH_FAUNA (crows, seagulls, etc.)" + 24 : "CLASS_HACKED_ROLLERMINE" + 25 : "CLASS_COMBINE_HUNTER" + ] + disposition(choices) : "Disposition" : 3 : "Choose the way the subject class should feel about the target class" = + [ + // These MUST match the enum in the code! (basecombatcharacter.h) + 1 : "Hate" + 2 : "Fear" + 3 : "Like" + 4 : "Neutral" + ] + + radius(float) : "Radius for subject" : 0 + + rank(integer) : "Disposition Priority" : 0 : "How much the subject class should Like/Hate/Fear the target class. Higher priority = stronger feeling." + + StartActive(choices) : "Start Active" : 0 = + [ + 0 : "No" + 1 : "Yes" + ] + + Reciprocal(choices) : "Reciprocal" : 0 : "Set this to YES to have the new relationship mirrored by the target class." = + [ + 0 : "No" + 1 : "Yes" ] // Inputs @@ -2275,10 +2698,10 @@ output OnZeroMedicAllies(void) : "Fires when there are no more allies" ] -@BaseClass base(Targetname) = LeadGoalBase +@BaseClass base(Targetname, Angles) = LeadGoalBase [ actor(target_name_or_class) : "Actor(s) to affect" - goal(string) : "Target Entity" + goal(target_destination) : "Target Entity" WaitPointName(target_destination) : "Point to wait at if the target's not visible" WaitDistance(float) : "Wait until player gets this close" LeadDistance(float) : "Lead Distance" : "64" : "The player is considered to be lagging if he's beyond this distance. The Actor will consider retrieving when the player is 4x 'Lead Distance' away." @@ -2333,14 +2756,15 @@ // Spawnflags spawnflags(Flags) = [ - 1 : "No def success" : 0 - 2 : "No def failure" : 0 - 4 : "Use goal facing" : 1 + 1 : "[1] No def success" : 0 + 2 : "[2] No def failure" : 0 + 4 : "[4] Use goal facing" : 1 ] // Inputs input Activate( void ) : "Begin the leading behavior" input Deactivate( void ) : "Stop the leading behavior" + input UpdateActors( void ) : "Forces an update on this goal's actors." input SetSuccess( void ) : "Notify success of leading" input SetFailure( void ) : "Notify failure of leading" @@ -2365,14 +2789,16 @@ @PointClass base(LeadGoalBase) iconsprite("editor/ai_goal_lead.vmt") = ai_goal_lead_weapon : "AI Goal Lead (Weapon). A version of the ai_goal_lead entity that requires the player to have the specified weapon before the Actor(s) will lead the player to their target." [ - WeaponName(choices) : "Weapon" : "weapon_bugbait" = - [ - "weapon_bugbait" : "Bugbait" - "weapon_smg1" : "SMG1" - "weapon_ar2" : "AR2" - ] + WeaponName(pointentityclass) : "Weapon" : "weapon_bugbait" : "The weapon the player must have in order for the actor to begin leading. If the entity times out, this weapon will silently be given to the player automatically." //= + //[ + // "weapon_bugbait" : "Bugbait" + // "weapon_smg1" : "SMG1" + // "weapon_ar2" : "AR2" + //] + + TimeoutTime(float) : "Timeout Time" : "60.0" : "How long after the ai_goal_lead_weapon is activated should it time out and just give the player the weapon? Enter 0 to use no timeout." - MissingWeaponConceptModifier(string) : "Missing weapon concept modifier" + MissingWeaponConceptModifier(string) : "Missing weapon concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_MISSINGWEAPON' concept is spoken." SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = [ @@ -2384,7 +2810,7 @@ @BaseClass base(Targetname) = FollowGoal [ actor(target_name_or_class) : "Actor(s) to affect" - goal(string) : "Target Entity" : : "The name of the entity to follow. If blank, and the actor likes the player, then defaults to player" + goal(target_destination) : "Target Entity" : : "The name of the entity to follow. If blank, and the actor likes the player, then defaults to player" SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = [ @@ -2409,14 +2835,19 @@ [ 0 : "Close circle" 1 : "Wide circle" + 2 : "Antlion" + 3 : "Commander" + 4 : "Tight circle" 5 : "Medium circle" 6 : "Sidekick" + 7 : "Hunter" 8 : "Vortigaunt" ] // Inputs input Activate( void ) : "Begin the follow behavior" input Deactivate( void ) : "Cease the follow behavior" + input UpdateActors( void ) : "Forces an update on this goal's actors." ] @PointClass base(FollowGoal) iconsprite("editor/ai_goal_follow.vmt") = ai_goal_follow : "AI Goal Follow" @@ -2432,10 +2863,10 @@ // Spawnflags spawnflags(Flags) = [ - 1 : "Use parent's orientation" : 0 + 1 : "[1] Use parent's orientation" : 0 ] - actor(target_name_or_class) : "Actor(s) or squad to affect" + actor(target_name_or_class) : "Actor(s) or squad to affect" : "*" : "Wildcards are supported." Active(choices) : "Active" : 0 = [ @@ -2457,7 +2888,7 @@ @PointClass base(Targetname) iconsprite("editor/ai_goal_standoff.vmt") = ai_goal_standoff : "AI Goal Standoff" [ actor(target_name_or_class) : "Actor(s) to affect" -// goal(string) : "Target Entity (self by default) [NOT IMPLEMENTED]" +// goal(target_destination) : "Target Entity (self by default) [NOT IMPLEMENTED]" SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = [ @@ -2486,7 +2917,7 @@ 3 : "High" 4 : "Very High" // Custom agression disabled - // 100 : "Custom" + 5 : "Custom" ] PlayerBattleline(choices) : "Player battleline" : 1 : "Player defines a battle line, applies to allies only" = @@ -2508,20 +2939,21 @@ ] // Custom aggression -// CustomCoverOnReload(choices) : "Custom: Take cover to reload" : 1 = -// [ -// 0 : "No" -// 1 : "Yes" -// ] -// CustomMinTimeShots(float) : "Custom: Min time wait to shoot" : 2 : "Minimum duration of time after a burst of shooting before trying again" -// CustomMaxTimeShots(float) : "Custom: Max time wait to shoot" : 4 : "Minimum duration of time after a burst of shooting before trying again" -// CustomMinShots(integer) : "Custom: Min shots in a burst" : 1 -// CustomMaxShots(integer) : "Custom: Max shots in a burst" : 4 -// CustomOddsCover(integer) : "Custom: Odds cover on damage" : 25 : "If damaged, the chances react by taking immediate cover" + CustomCoverOnReload(choices) : "Custom: Take cover to reload" : 1 = + [ + 0 : "No" + 1 : "Yes" + ] + CustomMinTimeShots(float) : "Custom: Min time wait to shoot" : 2 : "Minimum duration of time after a burst of shooting before trying again" + CustomMaxTimeShots(float) : "Custom: Max time wait to shoot" : 4 : "Minimum duration of time after a burst of shooting before trying again" + CustomMinShots(integer) : "Custom: Min shots in a burst" : 1 + CustomMaxShots(integer) : "Custom: Max shots in a burst" : 4 + CustomOddsCover(integer) : "Custom: Odds cover on damage" : 25 : "If damaged, the chances react by taking immediate cover" // Inputs input Activate( void ) : "Begin contesting position" input Deactivate( void ) : "Cease contesting position" + input UpdateActors( void ) : "Forces an update on this goal's actors." input SetAggressiveness(integer) : "Set aggressiveness" ] @@ -2529,12 +2961,12 @@ [ spawnflags(Flags) = [ - 2 : "Knock-out target past crossing plane" : 0 - 4 : "Do not leave post" : 0 + 2 : "[2] Knock-out target past crossing plane" : 0 + 4 : "[4] Do not leave post" : 0 ] policeradius(float) : "Radius" : 512 : "Radius to police" - policetarget(string) : "Target" : "" : "Target to police" + policetarget(target_destination) : "Target" : "" : "Target to police" // Inputs input EnableKnockOut(void) : "Tells the goal to make the active policing NPC knock out its target" @@ -2604,7 +3036,7 @@ spawnflags(Flags) = [ - 1 : "Clear this point upon arrival, UNCONDITIONALLY" : 0 + 1 : "[1] Clear this point upon arrival, UNCONDITIONALLY" : 0 ] forcecrouch(choices) : "Force Crouch" : 0 : "NPCs using this assault point are forced into crouching while holding it." = @@ -2697,26 +3129,31 @@ 0 : "No" 1 : "Yes" ] + + NextBusy(string) : "NPC Cooldown Time" : "0,0" : "NPCs that leave this actbusy won't actbusy on their own again until this cooldown expires. This is for when an ai_goal_actbusy only gets NPCs to act busy with Activate, not any of the 'Force' inputs. The cooldown would be a random decimal in between the first number and the second number. Leaving both at 0 will cause ai_actbusy_search_time and ai_actbusy_search_time*2 to be used instead, which is default behavior." // Inputs input Activate( void ) : "Begin acting busy" input Deactivate( void ) : "Cease acting busy" input SetBusySearchRange( float ) : "Update the busy search range for all actors." - input ForceNPCToActBusy( string ) : "Force an NPC to act busy. Takes parameters, separated by spaces: . If no hint node targetname is specified, it'll search for a random one. If no max time is specified, it'll use the default. Specifying 0 as the max time will make the NPC act busy until disturbed. If the optional teleport parameter is specified, the NPC will teleport to the act busy point. A custom move animation can be specified by prepending $ to the name of it. i.e. $ACT_RUN will make the NPC Run. Sequence names can be used instead of activities." - input ForceThisNPCToActBusy( string ) : "Force an NPC outputted from another entity to act busy. (only usable from an output that specifies an entity)" - input ForceThisNPCToLeave( string ) : "Force an NPC outputted from another entity to find a HINT_NPC_EXIT_POINT hintnode and vanish." + input ForceNPCToActBusy( target_destination ) : "Force an NPC to act busy. Takes parameters, separated by spaces: . If no hint node targetname is specified, it'll search for a random one. If no max time is specified, it'll use the default. Specifying 0 as the max time will make the NPC act busy until disturbed. If the optional teleport parameter is specified, the NPC will teleport to the act busy point. A custom move animation can be specified by prepending $ to the name of it. i.e. $ACT_RUN will make the NPC Run. Sequence names can be used instead of activities." + input ForceThisNPCToActBusy( target_destination ) : "Forces the specified NPC to act busy. This is designed for when a NPC outputted from another entity has to act busy." + input ForceThisNPCToLeave( target_destination ) : "Forces the specified NPC to find a HINT_NPC_EXIT_POINT hintnode and vanish. This is designed for when a NPC outputted from another entity has to leave." + input ForceThisNPCToStopBusy( target_destination ) : "Forces the specified NPC to stop acting busy. This is useful when an ai_goal_actbusy controls several NPCs and you only want one of them to stop." // Outputs - output OnNPCStartedBusy(string) : "Fired when an NPC targeted by this goal starts an ActBusy animation." - output OnNPCFinishedBusy(string) : "Fired when an NPC targeted by this goal finishes an ActBusy." - output OnNPCLeft(string) : "Fired when an NPC target by this goal finishes a forced Leave." + output OnNPCStartedBusy(ehandle) : "Fired when an NPC targeted by this goal starts an ActBusy animation." + output OnNPCFinishedBusy(ehandle) : "Fired when an NPC targeted by this goal finishes an ActBusy." + output OnNPCMovingToBusy(ehandle) : "Fired when an NPC targeted by this goal starts moving to an ActBusy." + output OnNPCAbortedMoveTo(ehandle) : "Fired when an NPC targeted by this goal aborts moving to an ActBusy, possibly due to interruptions, etc." + output OnNPCLeft(ehandle) : "Fired when an NPC target by this goal finishes a forced Leave." ] @PointClass base(BaseActBusy) = ai_goal_actbusy : "AI Goal Act Busy" [ seeentity(target_name_or_class) : "Sight Entity" : "" : "The Sight Entity (if you provide one) is an entity that will leave the current ActBusy if the Actor playing the ActBusy loses sight of it for the amount of time specified in 'Sight Entity Timeout'. THIS MAY ONLY BE A TARGET NAME. NO CLASSNAMES." - seeentitytimeout(string) : "Sight Entity Timeout" : "1" : "If you provide a Sight Entity, the Actor will leave the current ActBusy if the Actor has lost sight of Sight Entity for this many seconds." + seeentitytimeout(float) : "Sight Entity Timeout" : "1" : "If you provide a Sight Entity, the Actor will leave the current ActBusy if the Actor has lost sight of Sight Entity for this many seconds." sightmethod(choices) : "Sight Enemy Method" : 0 : "The method to use to determine whether the Sight enemy is visible." = [ @@ -2740,6 +3177,7 @@ 1 : "Yes (Only for Combat Actbusy)" ] + output OnNPCStartedLeavingBusy(ehandle) : "Fired right when an NPC targeted by this goal begins to stop acting busy, which would be right as they play their exit animation." output OnNPCLostSeeEntity(void) : "Fired when the NPC loses sight of the see entity (if one is specified)." output OnNPCSeeEnemy(void) : "Fired when this NPC leaves his actbusy because of sighting an enemy." ] @@ -2780,15 +3218,37 @@ input MoveQueueUp(void) : "Force the queue to move up, sending the front-most NPC out of the queue." // Outputs - output OnQueueMoved(float) : "Fired when the queue moves. Outputs the number of NPCs left in the queue." - output OnNPCStartedLeavingQueue(string) : "Fired when the NPC at the head of the queue starts to leave. The activator is the NPC, and the string is the name of the NPC." - output OnNPCLeftQueue(string) : "Fired when the NPC at the head of the queue leaves. The activator is the NPC, and the string is the name of the NPC." + output OnQueueMoved(integer) : "Fired when the queue moves. Outputs the number of NPCs left in the queue." + output OnNPCStartedLeavingQueue(ehandle) : "Fired when the NPC at the head of the queue starts to leave. The activator is the NPC, and the string is the name of the NPC." + output OnNPCLeftQueue(ehandle) : "Fired when the NPC at the head of the queue leaves. The activator is the NPC, and the string is the name of the NPC." +] + +@PointClass base(Targetname) iconsprite("editor/ai_goal_fear.vmt") = ai_goal_fear : + "AI Goal Fear\n\n" + + "Allows player allies to use fear withdrawal points and other fear behavior otherwise unique with npc_hunters. " + + "Citizens will still engage in fear behavior with npc_hunters, but this allows them to use it with other NPCs." + +[ + actor(target_name_or_class) : "Actor(s) to affect" : "" : "NPC(s) that should engage in fear behavior." + target(target_destination) : "Fear Target" : "" : "Target to fear. Only applies whenever the actors' relationship to the target is D_FR. Supports wildcards and can be a classname or an entity name." + + StartActive(choices) : "Start Active" : 0 = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input Activate(void) : "Begin modifying fear behavior" + input Deactivate(void) : "Cease modifying fear behavior" + + // Outputs + output OnArrivedAtNode(void) : "Fires when we arrive at a fear withdrawal node. The node is the activator and the NPC is the caller." ] @PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = ai_changetarget : "Change Target" [ target(target_destination) : "Target entity" : : "Name of entity whose target will be changed." - m_iszNewTarget(string) : "New Target" + m_iszNewTarget(target_destination) : "New Target" // Inputs input Kill( void ) : "Removes this entity from the world" @@ -2809,7 +3269,7 @@ 1 : "Classname" 2 : "Old Hint Group" ] - SearchName(string) : "Name to search for" + SearchName(target_destination) : "Name to search for" NewHintGroup(string) : "New Hint Group" Radius(string) : "Search Radius" : "0.0" : "Radius to search (0 for all of map)" hintlimiting(choices) : "Hint Limit Nav" : 0 : "Limits NPC to using specified hint group for navigation requests, does not limit local navigation." = @@ -2817,8 +3277,13 @@ 0 : "No" 1 : "Yes" ] - - input Kill( void ) : "Removes this entity from the world" + + changehints(choices) : "Change info_(node)_hints" : 0 : "Changes the hintgroups of info_hints, info_node_hints, etc. as well." = + [ + 0 : "No" + 1 : "Yes" + ] + input Activate( void ) : "Change the Hint Group" ] @@ -2836,6 +3301,7 @@ MinimumState(choices) : "Minimum state" : 1 = [ + 0 : "Don't care" 1 : "Idle" 2 : "Alert" 3 : "Combat" @@ -2843,6 +3309,7 @@ MaximumState(choices) : "Maximum state" : 3 = [ + 9 : "Don't care" 1 : "Idle" 2 : "Alert" 3 : "Combat" @@ -2936,12 +3403,13 @@ spawnflags(Flags) = [ - 1 : "Fire outputs with the Actor as Activator" : 0 + 1 : "[1] Fire outputs with the Actor as Activator" : 0 ] // Inputs input Enable(void) : "Enable this entity" input Disable(void) : "Disable this entity" + input SatisfyConditions(void) : "Forces the conditions to be satisfied." // Outputs output OnConditionsSatisfied(void) : "Fires when AI conditions satisfied" @@ -2966,15 +3434,17 @@ [ spawnflags(Flags) = [ - 4 : "Repeatable" : 0 - 8 : "Leave Corpse" : 0 - 16 : "Start on Spawn" : 0 - 32: "No Interruptions" : 0 - 64: "Override AI" : 0 - 128: "Don't Teleport NPC On End" : 0 - 256: "Loop in Post Idle" : 0 - 512: "Priority Script" : 0 - 4096: "Allow actor death" : 0 + 4 : "[4] Repeatable" : 0 + 8 : "[8] Leave Corpse" : 0 + 16 : "[16] Start on Spawn" : 0 + 32: "[32] No Interruptions" : 1 + 64: "[64] Override AI" : 1 + 128: "[128] Don't Teleport NPC On End" : 0 + 256: "[256] Loop in Post Idle" : 0 + 512: "[512] Priority Script" : 0 + 1024 : "[1024] Search Cyclically" : 0 + 2048 : "[2048] Don't Complain" : 0 + 4096: "[4096] Allow actor death without stopping scene" : 0 ] @@ -2986,6 +3456,7 @@ ] +// line(255 0 255, targetname, goalent) @PointClass base(Targetname) sphere(m_flRadius) color(255 0 255) iconsprite("editor/aiscripted_schedule") = aiscripted_schedule : "Issues a command to an NPC without taking the NPC out of its AI. This does not seize control of the NPC as " + "a scripted_sequence does" @@ -3001,9 +3472,9 @@ spawnflags(Flags) = [ - 4 : "Repeatable" : 1 - 1024 : "Search Cyclically" : 0 - 2048 : "Don't Complain" : 0 + 4 : "[4] Repeatable" : 1 + 1024 : "[1024] Search Cyclically" : 0 + 2048 : "[2048] Don't Complain" : 0 ] forcestate(choices) : "AI state to set" : 0 = @@ -3037,6 +3508,9 @@ // Inputs input StartSchedule(void) : "Starts the scripted schedule. This will first locate an NPC that " + "matches the given target, then tell the NPC to run the specified schedule." + input StopSchedule(void) : "Stops the scripted schedule if it is running. This will first locate an NPC that " + + "matches the given target, then tell the NPC to stop this schedule if it is running." + input SetTarget(target_destination) : "Sets the target NPC." ] @PointClass base(Targetname) = ai_citizen_response_system : @@ -3069,7 +3543,7 @@ spawnflags(flags) = [ - 8192 : "Citadel recharger" : 0 + 8192 : "[8192] Citadel recharger" : 0 ] // Inputs @@ -3097,9 +3571,9 @@ [ spawnflags(flags) = [ - 8192 : "LookDoor Threshold" : 0 - 16384 : "LookDoor Invert" : 0 - 32768 : "LookDoor From Open" : 0 + 8192 : "[8192] LookDoor Threshold" : 0 + 16384 : "[16384] LookDoor Invert" : 0 + 32768 : "[32768] LookDoor From Open" : 0 ] ProximityDistance(string) : "Proximity Distance" : "0.0" : "If non-zero, proximity range over which door will move" @@ -3123,7 +3597,63 @@ // //------------------------------------------------------------------------- -@PointClass base(EnvGlobal) size(-8 -8 -8, 8 8 8) = env_global : +@PointClass base(Targetname) iconsprite("editor/hl2_gamerules.vmt") color(239 163 14) = hl2_gamerules : "Proxy entity for HL2 Gamerules" +[ + DefaultCitizenType(choices) : "Default Citizen Type" : 0 : "Overrides the default citizen type." = + [ + 0 : "None" + 1 : "Downtrodden" + 2 : "Refugee" + 3 : "Rebel" + 4 : "Unique" + ] + + // Friendly fire is just a global state now. + //GlobalFriendlyFire(choices) : "Global Friendly Fire Override" : 2 : "Forces friendly fire or friendly fire prevention on all NPCs." = + //[ + // 0 : "Disable friendly fire on all NPCs" + // 1 : "Enable friendly fire on all NPCs" + // 2 : "N/A" + //] + + //SetEpisodic(choices) : "Episodic" : 2 : "Undefined behavior." = + //[ + // 0 : "No" + // 1 : "Yes" + // 2 : "Default" + //] + + SetPlayerSquadAutosummon(choices) : "Player Squad Autosummon Allowed" : 1 : "Sets whether citizens are allowed to automatically follow the player again when they're at a command point and left alone for a while." = + [ + 0 : "No" + 1 : "Yes" + ] + + SetLegacyFlashlight(choices) : "Legacy Flashlight" : : "Sets whether the EP2 flashlight or the original flashlight from HL2 and Episode One should be used. 'No' means use the EP2 version, 'Yes' means use the original flashlight, and 'Default' doesn't change anything. This is pretty much only relevant to the Episodic version." = + [ + "" : "Default" + 0 : "No" + 1 : "Yes" + ] + + SetStunstickPickupBehavior(choices) : "Stunstick Pickup Behavior" : 0 : "Controls how stunsticks should react to being touched by the player." = + [ + 0 : "Only apply energy and disappear (default)" + 1 : "Allow pickup, apply energy if already owned" + 2 : "Don't apply energy and don't allow pickup" + 3 : "Allow pickup, but never apply energy" + ] + + //input EpisodicOn(void) : "Turns on Episodic mode." + //input EpisodicOff(void) : "Turns off Episodic mode." + //input SetFriendlyFire(integer) : "Sets the global friendly fire override." + input DefaultCitizenType(integer) : "Sets the default citizen type." + input SetPlayerSquadAutosummon(bool) : "Sets player squad autosummon." + input SetLegacyFlashlight(bool) : "Sets legacy flashlight." + input SetStunstickPickupBehavior(bool) : "Sets stunstick pickup behavior." +] + +@PointClass base(EnvGlobal) iconsprite("editor/env_global.vmt") = env_global : "An entity to control a game-specific global states." [ globalstate(choices) : "Global State to Set" = @@ -3140,9 +3670,26 @@ "ep2_alyx_injured" : "Episode 2: Alyx injured" "ep_alyx_darknessmode" : "Episodic: Alyx darkness mode" "hunters_to_run_over" : "Ep2 Counter: Hunters to run over before they dodge" + "friendly_fire_override" : "Mapbase: Friendly fire override (on = enabled, off = disabled, dead = no override)" + "antlion_noinstakill" : "Mapbase: Antlion-to-soldier insta-kill disabled" ] ] +@PointClass base(Targetname, EnableDisable) sphere(SetRadius) = point_radiation_source : "Radiation source that trips the player's geiger counter. Does no actual damage." +[ + SetRadius(float): "Radius" : "0" : "Only affects the geiger counter if the player is within this radius. 0 = no radius, use intensity only" + SetIntensity(float): "Intensity" : "1.0" : "The intensity of the radiation source. Cannot be 0." + + TestPVS(choices) : "Test PVS" : 1 : "Tests whether the player is in this entity's PVS before attempting to update." = + [ + 0 : "No" + 1 : "Yes" + ] + + input Enable(void) : "Enable" + input Disable(void) : "Disable" +] + //------------------------------------------------------------------------- // // Tanks @@ -3152,21 +3699,23 @@ [ spawnflags(flags) = [ - 1 : "Active" : 0 - 16: "Only Direct" : 0 - 32: "Controllable" : 0 - 64: "Damage Kick" : 0 - 1024: "NPC Controllable" : 0 - 2048: "NPC Set Controller" : 0 - 4096: "Allow friendlies to hit player" : 0 - 32768: "Non-solid." : 0 - 131072: "Perfect accuracy every 3rd shot at player" : 0 + 1 : "[1] Start Active" : 1 + 16 : "[16] Only Direct" : 0 + 32 : "[32] Controllable" : 1 + 64 : "[64] Damage Kick" : 0 + 256 : "[256] Aiming Assistance (Player Only)" : 0 + 1024 : "[1024] NPC Controllable" : 0 + 2048 : "[2048] NPC Set Controller (uninterruptible)" : 0 + 4096 : "[4096] Allow friendlies to hit player" : 0 + 8192: "[8192] Ignore range when making viewcone checks" : 0 + 32768 : "[32768] Non-solid." : 0 + 131072 : "[131072] Perfect accuracy every 3rd shot at player" : 0 ] control_volume(target_destination) : "Control Volume" : "" : "Name of a trigger the specifies the volume in which a player must be to control this tank." // Mainly for use with 1009 team settings (game_team_master) - master(string) : "(Team) Master" + master(target_destination) : "(Team) Master" yawrate(string) : "Yaw rate" : "30" yawrange(string) : "Yaw range" : "180" @@ -3177,9 +3726,9 @@ barrel(string) : "Barrel Length" : "0" barrely(string) : "Barrel Horizontal" : "0" barrelz(string) : "Barrel Vertical" : "0" - spritesmoke(sprite) : "Smoke Sprite" : "" - spriteflash(sprite) : "Flash Sprite" : "" - spritescale(string) : "Sprite scale" : "1" + spritesmoke(sprite) : "Smoke Sprite" : "" : "A specific sprite to use for the muzzle's smoke effect." + spriteflash(sprite) : "Flash Sprite" : "" : "A specific sprite to use for the muzzle's flash effect." + spritescale(string) : "Sprite scale" : "1" : "The scale for smoke and flash sprites." rotatestartsound(sound) : "Rotate Start Sound" : "" rotatesound(sound) : "Rotate Loop Sound" : "" rotatestopsound(sound) : "Rotate Stop Sound" : "" @@ -3219,13 +3768,35 @@ playergraceperiod(float) : "Post-NPC Attack Grace Period" : "0" : "If specified, NPC's manning this func tank won't fire at the player, after firing at a non-player, for this amount of time." ignoregraceupto(float) : "Ignore Grace Upto" : "768" : "The player grace period is ignored if the player's under this distance from the func_tank." playerlocktimebeforefire(float) : "Player Lock Time" : "0" : "The tank must have the player as a target for this amount of time before it's allowed to fire." - - effecthandling(choices) : "Effect Handling" : 0 = + + ShouldFindNPCs(choices) : "Automatically search for NPCs" : 1 : "If controllable by NPCs, sets whether we should automatically search for NPCs to use this func_tank or just wait for the player to set it. Identical to StartFindingNPCs and StopFindingNPCs." = [ - 0 : "Use Individual Settings." + 0 : "No" + 1 : "Yes" + ] + + effecthandling(choices) : "Effect Handling" : 0 : "Special effect handling that influences sound and muzzle effects. Individual settings can override parts of it." = + [ + 0 : "None" 1 : "AR2" 2 : "Combine Cannon" ] + + TraceFilter(filterclass) : "Trace Filter" : "" : "Entities that pass this filter will be ignored by this func_tank while it's aiming." + + DontHitController(choices) : "Don't hit controller" : 1 : "If enabled, bullets will not hit whoever is controlling this func_tank." = + [ + 0 : "No" + 1 : "Yes" + ] + + ControllerGlued(choices) : "NPC controller glued" : 0 : "If enabled, NPCs that mount this func_tank will disregard certain conditions that cause it to dismount automatically, like damage from behind or enemies getting beyond reach. They will still dismount for things like grenades." = + [ + 0 : "No" + 1 : "Yes" + ] + + PlayerBBoxDist(float) : "Player Crosshair Trace Offset" : "24" : "When a func_tank wants to aim at the player's crosshair, it draws a line to the point they're looking at. The line should start this many units ahead to avoid colliding with the player or any nearby objects. Decreasing the value is only recommended if 'Dont Hit Controller' is enabled." // Inputs input Activate(void) : "Turn the tank on" @@ -3234,10 +3805,12 @@ input SetDamage(string) : "Set the Damage Per Bullet" input SetTargetPosition(string) : "World position that I should aim at" input SetTargetDir(vector) : "Direction to aim at." - input SetTargetEntityName(string) : "Name of entity I should follow/attack" - input SetTargetEntity(string) : "Entity I should follow/attack (output from other entity only)" + input SetTargetEntityName(target_destination) : "Name of entity I should follow/attack" + input SetTargetEntity(target_destination) : "Entity I should follow/attack (output from other entity only)" input ClearTargetEntity(void) : "Clear the entity I should be attacking." - input FindNPCToManTank(string) : "Find a nearby NPC to man this func_tank." + input FindNPCToManTank(target_destination) : "Find a nearby NPC to man this func_tank." + input TeleportNPCToManTank(target_destination) : "Teleports the specified NPC to man this func_tank. The parameter cannot be blank and the chosen NPC will man the tank instantly." + input ForceNPCToManTank(target_destination) : "Forces the specified NPC to snap to manning this func_tank, regardless of the NPC's current position. They will still turn to face it." input StartFindingNPCs(void) : "Start searching for NPCs to man this func_tank." input StopFindingNPCs(void) : "Stop searching for NPCs to man this func_tank." input ForceNPCOff(void) : "Force the NPC manning this func_tank (if any) to leave." @@ -3245,8 +3818,8 @@ // Outputs output OnFire(void) : "Fires when the tank fires its bullets" - output OnAquireTarget(void) : "Fires when target is newly in range and can be shot" - output OnLoseTarget(void) : "Fires when when target goes out of range" + output OnAquireTarget(string) : "Fires when target is newly in range and can be shot, passes target" + output OnLoseTarget(string) : "Fires when when target goes out of range, passes target" output OnAmmoDepleted(void) : "Fires when tank runs out of ammo" output OnGotController(void) : "Fires when an NPC starts to control this tank. Players do NOT fire this input." output OnLostController(void) : "Fires when the NPC controller of the tank stops controlling it. Players do NOT fire this input." @@ -3255,6 +3828,12 @@ output OnReadyToFire(void) : "Fires once when the tank is done waiting to fire between rounds" ] +// Only some classes use this +@BaseClass = TankShootSound +[ + shootsound(sound) : "Shoot Sound" : "" : "Plays a specific sound to use each time this tank fires." +] + // dvs: FIXME: put this back once we have an episodic FGD //@SolidClass base(BaseTank) = func_tank : "Brush Gun Turret" @@ -3270,14 +3849,14 @@ // // spawnflags(flags) = // [ -// 8192: "Ignore range when making viewcone checks" : 0 -// 256 : "Aiming Assistance (Player Only)" : 0 +// 8192: "[8192] Ignore range when making viewcone checks" : 0 +// 256 : "[256] Aiming Assistance (Player Only)" : 0 // ] //] // dvs: FIXME: move into an episodic FGD -@SolidClass base(BaseTank) = func_tank : "Brush Gun Turret" +@SolidClass base(BaseTank, TankShootSound) = func_tank : "Brush Gun Turret" [ ammotype(choices) : "Ammo type" : "" = [ @@ -3285,13 +3864,8 @@ "Pistol" : "Pistol" "SMG1" : "SMG1" "AR2" : "AR2" - "CombineHeavyCannon" : "Combine Heavy Cannon" - ] - - spawnflags(flags) = - [ - 8192: "Ignore range when making viewcone checks" : 0 - 256 : "Aiming Assistance (Player Only)" : 0 + "CombineHeavyCannon" : "Combine Heavy Cannon (Episodic only)" + "StriderMinigun" : "Strider Minigun" ] ] @@ -3318,9 +3892,30 @@ rocketspeed(float) : "Projectile speed" : 800 : "Speed the rocket will travel at." ] -@SolidClass base(BaseTank) = func_tankairboatgun : "Airboat Gun Turret" +@SolidClass base(BaseTank, TankShootSound) = func_tankairboatgun : "Airboat Gun Turret" [ - airboat_gun_model(target_destination) : "Name of a prop_dynamic which is the airboat gun model" + firespread(choices) : "Bullet accuracy" : -1 = + [ + -1: "Original (slightly smaller than medium cone)" + 0: "Perfect Shot" + 1: "Small cone" + 2: "Medium cone" + 3: "Large cone" + 4: "Extra-large cone" + ] + + heavy_shot_spread(choices) : "Heavy shot accuracy" : 0 : "The accuracy for each 'heavy' shot, which fires at a specified interval." = + [ + 0: "Perfect Shot" + 1: "Small cone" + 2: "Medium cone" + 3: "Large cone" + 4: "Extra-large cone" + ] + + heavy_shot_interval(float) : "Heavy shot interval" : "0.2" : "The interval between each 'heavy' shot, which carries higher knockback and, by default, perfect accuracy. The vast majority of bullets that hit the enemy are these 'heavy' shots." + + airboat_gun_model(target_destination) : "Airboat gun model (Obsolete)" : : "You can do everything and more with the parent now, so you'd be better off using regular func_tank parent behavior than this. It is still functional for legacy support." ] @SolidClass base(BaseTank) = func_tankapcrocket : "APC Rocket Turret" @@ -3332,15 +3927,22 @@ ] -@SolidClass base(BaseTank) = func_tankmortar : "Brush Mortar Turret" +@SolidClass base(BaseTank) sphere(radius) = func_tankmortar : "Brush Mortar Turret" [ iMagnitude(Integer) : "Explosion Magnitude" : 100 firedelay(string) : "Shell travel time" : 2 : "How long after the turret fires before the shell impacts" firestartsound(sound) : "Firing start sound" : "" : "Sound of the mortar firing" - fireendsound(sound) : "Firing end sound" : "" + //fireendsound(sound) : "Firing end sound" : "" incomingsound(sound) : "Incoming Shell Sound" : "" : "Sound of the shell falling on the target" warningtime(float) : "Incoming warning time" : "1" : "How long before the shell impacts to play the warning sound" firevariance(float) : "Fire time variance" : "0" : "How much variability to add to fire rate (time +-)" + radius(float) : "Explosion Radius" : "0" : "The radius of each shell's explosion. Reflected in its effects as well as its damage. 0 = Default (350)" + + trace_mask(choices) : "Trace Mask" : 16395 : "The mask to use for when the mortar is tracing attacks from above. Good for when you want the mortar to hit NPCs like striders." = + [ + 16395: "MASK_SOLID_BRUSHONLY (Default)" + 100679691: "MASK_SHOT_HULL (hits NPCs)" + ] input FireAtWill(void) : "Allow tank to fire next shot as soon as ready." ] @@ -3350,8 +3952,10 @@ barrel_volume(target_destination) : "Barrel Volume" : "" : "Name of a trigger the specifies the volume in which cannisters must be placed." ] -@SolidClass base(BaseTank) = func_tank_combine_cannon : "Combine sentry cannon" +@SolidClass base(BaseTank, TankShootSound) = func_tank_combine_cannon : "Combine sentry cannon" [ + firerate(string) : "Rate of Fire" : "1.5" + ammotype(choices) : "Ammo type" : "" = [ "" : "None" @@ -3360,6 +3964,12 @@ "AR2" : "AR2" "CombineHeavyCannon" : "Combine Heavy Cannon" ] + + ControllableVersion(choices) : "Controllable Version" : 0 : "Enables a tweaked version of func_tank_combine_cannon that is designed to be controlled by players and NPCs." = + [ + 0 : "No" + 1 : "Yes" + ] input DisableHarrass(void) : "Disable the cannon tracking an unseen player" input EnableHarrass(void) : "Allow the cannon to track and pester a player who is hiding (DEFAULT)" @@ -3367,6 +3977,20 @@ output OnShotAtPlayer(void) : "Fired everytime the cannon shoots at the player" ] +@SolidClass base(BaseTank, TankShootSound) = func_tanklogic : + "A special kind of turret designed to fire outputs instead of bullets, functioning solely through the I/O system." +[ + ShootsThroughWater(choices) : "Shoots through water" : 0 : "If enabled, this func_tanklogic will be allowed to trace through water. (as opposed to just hitting the surface)" = + [ + 0 : "No" + 1 : "Yes" + ] + + output OnFire_BarrelPos(vector) : "Fires each time this func_tank would fire a bullet. Passes the barrel's current position." + output OnFire_ShootPos(vector) : "Fires each time this func_tank would fire a bullet. Passes the position which said bullet would hit, spread applied." + output OnFire_FirstEnt(ehandle) : "Fires each time this func_tank would fire a bullet. Passes the first entity that would be hit, if any." +] + //------------------------------------------------------------------------- // @@ -3386,8 +4010,18 @@ spawnflags(Flags) = [ - 1 : "Start Constrained" : 0 + 1 : "[1] Start constrained" : 0 + 2 : "[2] Deny player pickup (reserve for NPC)" : 0 + 4 : "[4] Not puntable by Gravity Gun" : 0 + 8 : "[8] Deny NPC pickup (reserve for player)" : 0 ] + + // Inputs + input EnablePlayerPickup(void) : "Enables player pickup if it was previously disabled." + input DisablePlayerPickup(void) : "Disables player pickup if it was previously enabled." + input EnableNPCPickup(void) : "Enables NPC pickup if it was previously disabled." + input DisableNPCPickup(void) : "Disables NPC pickup if it was previously enabled." + input BreakConstraint(void) : "Breaks the constraint on this item if it started constrained." ] @PointClass base(Item) studio("models/items/healthkit.mdl") = item_dynamic_resupply : "A dynamic item. When the player enters the PVS of this entity, " + @@ -3400,10 +4034,10 @@ [ spawnflags(Flags) = [ - 1 : "Use Master's values" : 1 - 2 : "Is Master" : 0 - 8 : "Fallback to Health Vial" : 0 - 16 : "Alternate master" : 0 + 1 : "[1] Use Master's values" : 1 + 2 : "[2] Is Master" : 0 + 8 : "[8] Fallback to Health Vial" : 0 + 16 : "[16] Alternate master" : 0 ] DesiredHealth(float) : "Desired Health Ratio" : "1" : "A ratio from 0 to 1. Attempt to fill the player up to this percentage of his max health." @@ -3425,11 +4059,11 @@ ] @PointClass base(Item) studio("models/items/boxsrounds.mdl")= item_ammo_pistol : "Box of Pistol ammo" [] -@PointClass base(Item) studio("models/items/largeBoxSRounds.mdl")= item_ammo_pistol_large : "Large Box of Pistol ammo" [] +@PointClass base(Item) studio("models/items/BoxSRounds.mdl")= item_ammo_pistol_large : "Large Box of Pistol ammo" [] @PointClass base(Item) studio("models/items/BoxMRounds.mdl")= item_ammo_smg1 : "Box of SMG1 ammo" [] -@PointClass base(Item) studio("models/items/LargeBoxMRounds.mdl")= item_ammo_smg1_large : "Large Box of SMG1 ammo" [] -@PointClass base(Item) studio("models/items/BoxBRounds.mdl")= item_ammo_ar2 : "Box of AR2 ammo" [] -@PointClass base(Item) studio("models/items/LargeBoxBRounds.mdl")= item_ammo_ar2_large : "Large Box of AR2 ammo" [] +@PointClass base(Item) studio("models/items/BoxMRounds.mdl")= item_ammo_smg1_large : "Large Box of SMG1 ammo" [] +@PointClass base(Item) studio("models/items/combine_rifle_cartridge01.mdl")= item_ammo_ar2 : "Box of AR2 ammo" [] +@PointClass base(Item) studio("models/items/combine_rifle_cartridge01.mdl")= item_ammo_ar2_large : "Large Box of AR2 ammo" [] @PointClass base(Item) studio("models/items/357ammo.mdl")= item_ammo_357 : "Box of 357 ammo" [] @PointClass base(Item) studio("models/items/357ammobox.mdl")= item_ammo_357_large : "Large Box of 357 ammo" [] @PointClass base(Item) studio("models/items/CrossbowRounds.mdl")= item_ammo_crossbow : "Box of Crossbow ammo" [] @@ -3444,11 +4078,11 @@ [ spawnflags(Flags) = [ - 1 : "Short Logon" : 0 + 1 : "[1] Short Logon (now stops hands)" : 0 ] ] -@PointClass base(Targetname, Angles, BaseFadeProp) studio("models/items/ammocrate_rockets.mdl") = item_ammo_crate : "Ammo Crate" +@PointClass base(Targetname, Parentname, Angles, BaseFadeProp) studio("models/items/ammocrate_rockets.mdl") = item_ammo_crate : "Ammo Crate" [ AmmoType(choices) : "Ammo Type" : 0 = [ @@ -3458,22 +4092,28 @@ 3 : "RPG Rounds" 4 : "Buckshot" 5 : "Grenades" - 6 : "357" - 7 : "XBowBolt" - 8 : "AR2 Alt-Fire Round" - 9 : "SMG Alt-Fire grenade" + 6 : "357 Magnum" + 7 : "Crossbow" + 8 : "AR2 Alt-Fire Balls" + 9 : "SMG Alt-Fire Grenades" + 10 : "S.L.A.M." + 11 : "Empty" ] // Inputs input Kill(void) : "Remove the ammo crate" output OnUsed(void) : "Fires when +used by the player." + output OnAmmoTaken(void) : "Fires the instant ammo is taken from this crate." ] -@PointClass base(BasePropPhysics, Targetname, Angles, DamageFilter, BaseFadeProp) studio("models/items/item_item_crate.mdl") = item_item_crate : "Item Crate" +@PointClass base(BasePropPhysics, Targetname, Angles, DamageFilter, BaseFadeProp) studioprop() = item_item_crate : "Item Crate" // studio("models/items/item_item_crate.mdl") [ + model(studio) : "Model" : "models/items/item_item_crate.mdl" : "The model of this item_item_crate. Only works when this crate's appearance is set to use a custom model." + CrateType(choices) : "Crate Contains" : 0 = [ 0 : "Contains specified item" + 1 : "Contains point_template (use specific resupply)" ] @@ -3481,11 +4121,12 @@ [ 0 : "Default Appearance" 1 : "Radar Beacon Crate" + 2 : "Custom Model (use model keyvalue)" ] - ItemClass(pointentityclass) : "Item Type" : "item_dynamic_resupply" : "Class name of the entity to spawn when the crate is broken" + ItemClass(pointentityclass) : "Item Type" : "item_dynamic_resupply" : "Class name of the entity to spawn when the crate is broken." ItemCount(integer) : "Item Count" : 1 : "Number of items to emit upon breakage" - SpecificResupply(target_destination) : "Specific resupply" : "" : "If item type is item_dynamic_resupply, specify a specific one to use instead of the master" + SpecificResupply(target_destination) : "Specific resupply/Target template" : "" : "If item type is item_dynamic_resupply, specify a specific one to use instead of the master. If the crate contains a point_template, this is required to specify which point_template to spawn." // Inputs input Kill(void) : "Remove the item crate" @@ -3499,38 +4140,66 @@ output OnHealthChanged(float) : "Fires when the health of this breakable changes, passing the new value of health as a percentage of max health, from [0..1]." output OnCacheInteraction(void) : "This output fires when the player proves they have 'found' this crate. Fires on: Picked up by +USE, Picked up by Physcannon, Punted by Physcannon, Broken." + + output OnItem(ehandle) : "Fires for each item spawned by this crate." ] +//@PointClass base(item_item_crate) studioprop() = item_item_crate_custom : "Identical to item_item_crate, except a 'Model' keyvalue is added for convenience when using a custom model." + +// "Its classname is changed back to item_item_crate upon spawning and this entity is only necessary when using the 'Custom Model' crate appearance." +//[ +// model(studio) : "Model" : "models/items/item_item_crate.mdl" : "The model of this item_item_crate. Only works when this crate's appearance is set to use a custom model." +//] + @PointClass base(Targetname, Angles, BaseFadeProp) studio( "models/props_combine/health_charger001.mdl" ) = item_healthcharger : "Health Charger" [ // dmdelay(integer) : "Deathmatch recharge delay" : 0 _minlight(string) : "Minimum light level" + + Charge(integer) : "Juice" : 0 : "Overrides the amount of suit power this charger contains. Use 0 for the default charge, which is usually the maximum juice. Use -1 if you want the charger to start empty." + MaxCharge(integer) : "Max Juice" : 0 : "Overrides the maximum suit power this charger contains. Use 0 for the default charge, 75." + SetIncrementValue(integer) : "Increment Health" : 0 : "How much charge should be given each 'increment', or each tenth-of-a-second interval in which the player is given health while using this charger. Juice is also decreased accordingly. Use 0 for the default increment, 1." + + // Inputs + input Recharge(void) : "Recharge to full" + input SetCharge(integer) : "Sets the *maximum* charge, refilling the charger in the process." + input SetChargeNoMax(float) : "Sets the charger's current juice without doing anything with the maximum." + input SetIncrementValue(integer) : "Sets the charger's increment value." // Outputs - output OutRemainingHealth(float) : "Remaining Health." - output OnPlayerUse(void) : "Fired when the player +USEs the charger." + output OutRemainingHealth(float) : "Outputs this charger's remaining health while used." + output OnHalfEmpty(void) : "Half-Empty" + output OnEmpty(void) : "Empty" + output OnFull(void) : "Recharged to full." + output OnPlayerUse(void) : "Fired when the player +USEs this charger." ] @PointClass base(Targetname, Angles, BaseFadeProp) studio( "models/props_combine/suit_charger001.mdl" ) = item_suitcharger : "Battery recharger" [ // dmdelay(integer) : "Deathmatch recharge delay" : 0 _minlight(string) : "Minimum light level" + + Charge(integer) : "Juice" : 0 : "Overrides the amount of suit power this charger contains. Use 0 for the maximum juice. (which is normally 75) Use -1 if you want the charger to start empty." + MaxCharge(integer) : "Max Juice" : 0 : "Overrides the maximum suit power this charger contains. Use 0 for the default charge, which varies based on this entity's spawnflags. (Normal = 75, Citadel = 500, Kleiner = 25)" + SetIncrementValue(integer) : "Increment Armor" : 0 : "How much charge should be given each 'increment', or each tenth-of-a-second interval in which the player is given suit armor while using this charger. Juice is also decreased accordingly. Use 0 for the default increment. (Normal = 1, Citadel = 10)" spawnflags(flags) = [ - 8192 : "Citadel recharger" : 0 - 16384 : "Kleiner's recharger" : 0 + 8192 : "[8192] Citadel recharger" : 0 + 16384 : "[16384] Kleiner's recharger" : 0 ] // Inputs input Recharge(void) : "Recharge to full" + input SetCharge(integer) : "Sets the *maximum* charge, refilling the charger in the process." + input SetChargeNoMax(float) : "Sets the charger's current juice without doing anything with the maximum." + input SetIncrementValue(integer) : "Sets the charger's increment value." // Outputs - output OutRemainingCharge(float) : "Remaining Charge." + output OutRemainingCharge(float) : "Outputs this charger's remaining juice while used." output OnHalfEmpty(void) : "Half-Empty" output OnEmpty(void) : "Empty" output OnFull(void) : "Recharged to full." - output OnPlayerUse(void) : "Fired when the player +USEs the charger." + output OnPlayerUse(void) : "Fired when the player +USEs this charger." ] //------------------------------------------------------------------------- @@ -3542,15 +4211,33 @@ [ spawnflags(Flags) = [ - 1 : "Start constrained" : 0 - 2 : "Deny player pickup (reserve for NPC)" : 0 - 4 : "Not puntable by Gravity Gun" : 0 + 1 : "[1] Start constrained" : 0 + 2 : "[2] Deny player pickup (reserve for NPC)" : 0 + 4 : "[4] Not puntable by Gravity Gun" : 0 + 8 : "[8] Deny NPC pickup (reserve for player)" : 0 + 16 : "[16] Preserve ammo values when picked up" : 0 ] + + SetAmmo1(integer) : "Ammo 1 Override" : 0 : "Overrides the amount of primary ammo this weapon has. Be sure to set 'Preserve ammo values when picked up' for this to be maintained upon pickup." + SetAmmo2(integer) : "Ammo 2 Override" : 0 : "Overrides the amount of secondary ammo this weapon has. Be sure to set 'Preserve ammo values when picked up' for this to be maintained upon pickup." + + // Inputs + input EnablePlayerPickup(void) : "Enables player pickup if it was previously disabled." + input DisablePlayerPickup(void) : "Disables player pickup if it was previously enabled." + input EnableNPCPickup(void) : "Enables NPC pickup if it was previously disabled." + input DisableNPCPickup(void) : "Disables NPC pickup if it was previously enabled." + input BreakConstraint(void) : "Breaks the constraint on this weapon if it started constrained." + input SetAmmo1(integer) : "Sets the amount of primary ammo stored in this weapon." + input SetAmmo2(integer) : "Sets the amount of secondary ammo stored in this weapon." + input ForcePrimaryFire(void) : "Forces the weapon to fire its primary attack." + input ForceSecondaryFire(void) : "Forces the weapon to fire its secondary attack. Whether or not it actually fires a secondary attack depends on the weapon and who owns it." + // Outputs output OnPlayerUse(void) : "Fires when the player +uses this weapon" output OnPlayerPickup(void) : "Fires when the player picks up this weapon" output OnNPCPickup(void) : "Fires when an NPC picks up this weapon" output OnCacheInteraction(void) : "Fires when the player 'proves' they've found this weapon. Fires on: Player Touch, +USE pickup, Physcannon pickup, Physcannon punt." + output OnDropped(void) : "Fires when the weapon is dropped by a NPC or player, either through death or from picking up a different weapon." fademindist(float) : "Start Fade Dist/Pixels" : -1 : "Distance at which the prop starts to fade (<0 = use fademaxdist). If 'Screen Space Fade' is selected, this represents the number of pixels wide covered by the prop when it starts to fade." fademaxdist(float) : "End Fade Dist/Pixels" : 0 : "Maximum distance at which the prop is visible (0 = don't fade out). If 'Screen Space Fade' is selected, this represents the *minimum* number of pixels wide covered by the prop when it fades." @@ -3558,20 +4245,39 @@ " This scale factor gives you some control over the fade. Using 0 here turns off the forcible fades." + ] -@PointClass base(Weapon) studio("models/weapons/w_crowbar.mdl") = weapon_crowbar : "Crowbar" [] -@PointClass base(Weapon) studio("models/weapons/w_stunbaton.mdl") = weapon_stunstick : "StunStick" [] -@PointClass base(Weapon) studio("models/weapons/w_pistol.mdl") = weapon_pistol : "Pistol" [] -@PointClass base(Weapon) studio("models/weapons/w_irifle.mdl") = weapon_ar2 : "Assault Rifle 2" [] -@PointClass base(Weapon) studio("models/weapons/w_rocket_launcher.mdl") = weapon_rpg : "Missile Launcher" [] -@PointClass base(Weapon) studio("models/weapons/w_smg1.mdl") = weapon_smg1 : "SMG1" [] -@PointClass base(Weapon) studio("models/weapons/w_357.mdl") = weapon_357 : "357" [] -@PointClass base(Weapon) studio("models/weapons/w_crossbow.mdl") = weapon_crossbow : "Crossbow" [] -@PointClass base(Weapon) studio("models/weapons/w_shotgun.mdl") = weapon_shotgun : "Shotgun" [] -@PointClass base(Weapon) studio("models/weapons/w_grenade.mdl") = weapon_frag : "Frag Grenade" [] -@PointClass base(Weapon) studio("models/weapons/w_physics.mdl") = weapon_physcannon : "Physics Cannon" [] -@PointClass base(Weapon) studio("models/spore.mdl") = weapon_bugbait: "Bug bait" [] -@PointClass base(Weapon) studio("models/weapons/W_Alyx_Gun.mdl") = weapon_alyxgun: "Alyx Gun" [] -@PointClass base(Weapon) studio("models/weapons/W_annabelle.mdl") = weapon_annabelle: "Annabelle (Grigori)" [] +@PointClass base(Weapon) studio("models/weapons/w_crowbar.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_crowbar : "Crowbar" [] +@PointClass base(Weapon) studio("models/weapons/w_stunbaton.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_stunstick : "StunStick" [] +@PointClass base(Weapon) studio("models/weapons/w_pistol.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_pistol : "Pistol" [] +@PointClass base(Weapon) studio("models/weapons/w_irifle.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_ar2 : "Assault Rifle 2" [] +@PointClass base(Weapon) studio("models/weapons/w_rocket_launcher.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_rpg : "Missile Launcher" [] +@PointClass base(Weapon) studio("models/weapons/w_smg1.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_smg1 : "SMG1" [] +@PointClass base(Weapon) studio("models/weapons/w_357.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_357 : "357" [] +@PointClass base(Weapon) studio("models/weapons/w_crossbow.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_crossbow : "Crossbow" [] +@PointClass base(Weapon) studio("models/weapons/w_shotgun.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_shotgun : "Shotgun" [] +@PointClass base(Weapon) studio("models/weapons/w_grenade.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_frag : "Frag Grenade" [] +@PointClass base(Weapon) studio("models/weapons/w_physics.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_physcannon : "Physics Cannon" [] +@PointClass base(Weapon) studio("models/weapons/w_bugbait.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_bugbait: "Bug bait" [] +@PointClass base(Weapon) studio("models/weapons/W_Alyx_Gun.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_alyxgun: "Alyx Gun" [] +@PointClass base(Weapon) studio("models/weapons/W_annabelle.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_annabelle: "Annabelle (Grigori)" [] +@PointClass base(Weapon) studio("models/weapons/w_slam.mdl") sphere(fademindist) sphere(fademaxdist) = weapon_slam: "A tripmine/satchel hybrid from HL2:MP.\n\nCome on and slam, and welcome to the jam!\nCome on and slam, if you wanna jam!" [] + +@PointClass base(Targetname, Parentname, Angles, RenderFields, DamageFilter) studio( "models/weapons/w_slam.mdl" ) sphere(DmgRadius) = npc_tripmine : "S.L.A.M. Tripmine" +[ + PowerUpTime(float) : "Power Up Time" : "2.0" : "How much time this tripmine takes to power up after being activated." + Damage(float) : "Damage" : "150" : "The amount of damage this tripmine can deal." + DmgRadius(float) : "Damage Radius" : "200" : "The radius in which this tripmine can damage." + + spawnflags(flags) = + [ + 1 : "[1] Start inactive" : 0 + ] + + // Inputs + input Activate(void) : "Recharge to full" + + // Outputs + output OnExplode(void) : "Fires when this tripmine explodes." +] @SolidClass base(Trigger) = trigger_rpgfire : @@ -3586,7 +4292,7 @@ [ spawnflags(Flags) = [ - 4096 : "Can move (through hierarchical attachment)" : 0 + 4096 : "[4096] Can move (through hierarchical attachment)" : 0 ] StartDisabled(choices) : "Start Disabled" : 0 = @@ -3646,9 +4352,9 @@ spawnflags(Flags) = [ - 1: "Do not call antlions to position" : 0 - 2: "Don't activate on thrown bugbait splashes" : 0 - 4: "Don't activate on squeezed bugbait" : 0 + 1: "[1] Do not call antlions to position" : 0 + 2: "[2] Don't activate on thrown bugbait splashes" : 0 + 4: "[4] Don't activate on squeezed bugbait" : 0 ] radius(integer) : "Sensor Radius" : 512 @@ -3662,24 +4368,13 @@ output OnBaited(void) : "Fires when bugbait lands within a radius of the sensor" ] -@PointClass base(Weapon) = weapon_brickbat : "Brickbat" -[ - BrickbatType(choices) : "BrickbatType" : "Rock" = - [ - 0 : "Rock" - 1 : "Beer Bottle" - 2 : "Headcrab" - 3 : "Cremator Head" - ] -] - @PointClass base(Targetname, Angles) size(16 16 16) line(255 255 255, targetname, target) color(247 181 82) = path_corner : "Generic path point" [ spawnflags(Flags) = [ - 1: "Wait for retrigger" : 0 - 2: "Teleport to THIS path_corner" : 0 + 1: "[1] Wait for retrigger" : 0 + 2: "[2] Teleport to THIS path_corner" : 0 ] target(target_destination) : "Next stop target" wait(integer) : "Wait here (secs)" : 0 @@ -3687,7 +4382,7 @@ yaw_speed(integer) : "New Train rot. Speed" : 0 // Inputs - input SetNextPathCorner(string) : "Sets next pathcorner" + input SetNextPathCorner(target_destination) : "Sets next pathcorner" // Outputs output OnPass(void) : "Fires when a path follower passes this point" @@ -3729,18 +4424,22 @@ [ spawnflags(Flags) = [ - 1: "Suppress weapons" : 0 - 2: "Suppress HUD" : 0 - 4: "Suppress jump" : 0 - 8: "Suppress duck" : 0 - 16: "Suppress use" : 0 - 32: "Suppress sprint" : 0 - 64: "Suppress attack" : 0 - 128: "Suppress zoom" : 0 + 1: "[1] Suppress weapons" : 0 + 2: "[2] Suppress HUD" : 0 + 4: "[4] Suppress jump" : 0 + 8: "[8] Suppress duck" : 0 + 16: "[16] Suppress use" : 0 + 32: "[32] Suppress sprint" : 0 + 64: "[64] Suppress attack" : 0 + 128: "[128] Suppress zoom" : 0 + 256: "[256] Don't suppress flashlight" : 0 ] // Inputs - input ModifySpeed(float) : "Modifies player speed by X ammount." + input ModifySpeed(float) : "Modifies player speed by X ammount. Use 1.0 to reset." + + input Enable(void) : "Enables the spawnflag abilities without actually modifying the player's speed." + input Disable(void) : "Disables the spawnflag abilities without actually modifying the player's speed." ] @@ -3786,6 +4485,18 @@ input InterjectResponse(string) : "Finds an actor who can respond to the specified concept string while the scene continues playing" input StopWaitingForActor(void) : "Stop waiting on an actor to stop talking." + + // Unmarked inputs + input Trigger(integer) : "Fires the OnTrigger output of the specified number." + + input SetTarget1(target_destination) : "Sets this target to the specified entity." + input SetTarget2(target_destination) : "Sets this target to the specified entity." + input SetTarget3(target_destination) : "Sets this target to the specified entity." + input SetTarget4(target_destination) : "Sets this target to the specified entity." + input SetTarget5(target_destination) : "Sets this target to the specified entity." + input SetTarget6(target_destination) : "Sets this target to the specified entity." + input SetTarget7(target_destination) : "Sets this target to the specified entity." + input SetTarget8(target_destination) : "Sets this target to the specified entity." // Outputs output OnStart(void) : "The scene has started" @@ -3871,7 +4582,11 @@ 64: "Meat" 128: "Garbage" 256: "Thumper" + 512: "Bugbait" + 1024: "Physics Danger" + 2048: "Sniper Danger (only scares sniper)" 4096: "Move Away - Most NPCs will clear the radius of this sound when heard." + 8192: "Player Vehicle" 16384 : "Readiness - Low" 32768 : "Readiness - Medium" 65536 : "Readiness - High" @@ -3880,11 +4595,19 @@ soundcontext(choices) : "Additional sound context (optional)" : 0 : "Optional settings specifying such things as who can or cannot hear the sound." = [ 0 : "Select one" - 8388608 : "Only Combine hear" - 67108864 : "Combine cannot hear" + 1048576 : "From sniper" + 2097152 : "Gunfire (use with combat sound type)" + 4194304 : "Mortar (pending explosion)" + 8388608 : "Only Combine can hear" + 67108864 : "Combine cannot can hear" + 16777216 : "React to source (face sound owner)" + 33554432 : "Explosion (use with combat sound type)" + 134217728 : "Danger approach (run if see sound owner, turn to face if not)" + 268435456 : "Only allies can hear" ] locationproxy(target_destination) : "Location Proxy" : "" : "The name of an entity to use as a proxy to determine the location at which to make the sound. If you specify an entity here, the sound will be made at that entity's location (!player included)" + target(target_destination) : "Sound Owner" : "" : "An optional entity to use that the sound doesn't emit from, but is specified as the 'owner'. This is needed for certain sound contexts and other miscellaneous stuff. If not specified, the ai_sound will be used as the owner." ] @@ -3892,30 +4615,43 @@ [ spawnflags(Flags) = [ - 1 : "Ignore solid" : 0 + 1 : "[1] Ignore solid" : 0 ] input DoEffect(Void) : "Make a rotor puff" ] -@PointClass size( -4 -4 -4, 4 4 4 ) base(Targetname, Parentname) studio("models/props_combine/combine_mine01.mdl") = combine_mine : "Combine Land Mine" +@PointClass base(Targetname, Parentname, Angles, BaseFadeProp) sphere(fademindist) sphere(fademaxdist) studio("models/props_combine/combine_mine01.mdl") = combine_mine : "A bouncing Combine mine. Mapbase adds a few new I/O/KV, but probably not enough." [ bounce(choices) : "Bounce" : 1 : "Whether the mine should bounce up in the air before exploding." = [ 0: "No" 1: "Yes" ] + + ExplosionDelay(float) : "Delay" : "0.5" : "The delay after being triggered before this mine bounces, or before it explodes if bouncing is disabled. Does not apply to the cavern type." - LockSilently(choices) : "Lock Silently" : 1 : "If yes, mine plays no sound when clamps close" = + LockSilently(choices) : "Lock Silently" : 1 : "Prevents the mine from making any clamping sound when it plants itself for the first time, after which it makes sound again." = [ 0: "No" 1: "Yes" ] - StartDisarmed(choices) : "Start Disarmed" : 0 : "If yes, mine begins dormant." = + // Still kept in for legacy support, but otherwise deprecated + //StartDisarmed(choices) : "Start Disarmed" : 0 : "If yes, mine begins dormant." = + //[ + // 0 : "No" + // 1 : "Yes" + //] + + InitialState(choices) : "Initial State" : 0 : "The initial state of this mine." = [ - 0 : "No" - 1 : "Yes" + 0 : "Deploying" + 1 : "Disarmed" + 2 : "Captive (locked in physgun)" + 3 : "Planted" + 4 : "Triggered (bounce, explode on touch)" + 5 : "Physgun Launch (no bounce, explode on touch)" ] Modification(choices): "Citizen modified" : 0 : "'Normal' is default Combine behavior. 'Cavern' detonates earlier in its jump, and has a different default skin." = @@ -3923,12 +4659,32 @@ 0 : "Normal" 1 : "Cavern" ] + + Friendly(choices): "Start Friendly" : 0 : "Makes this combine_mine friendly, as if it was placed by the player." = + [ + 0 : "No" + 1 : "Yes" + ] + + enemyfilter(filterclass) : "Enemy Filter" : : "Makes this combine_mine target specific NPCs as enemies. It will also use its default targets unless ''Filter Exclusive'' is enabled." + friendfilter(filterclass) : "Friend Filter" : : "Makes this combine_mine target specific NPCs as friends. It will also use its default targets unless ''Filter Exclusive'' is enabled." + FilterExclusive(choices): "Filter Exclusive" : 0 : "If enabled, the filters will be the exclusive factor in determining whether a mine is friendly or hostile towards a target. Entities that pass neither filter will be ignored by the mine." = + [ + 0 : "No" + 1 : "Yes" + ] // Inputs input Disarm(void) : "Disarm this mine (open hooks and shut off) if not placed by player." + input Bounce(void) : "Causes this mine to instantly bounce straight up into the air." + input BounceAtTarget(target_destination) : "Causes this mine to bounce at the specified entity, regardless of distance." + input SetEnemyFilter(target_destination) : "Changes this mine's enemy filter to the named filter." + input SetFriendFilter(target_destination) : "Changes this mine's friend filter to the named filter." // Outputs - output OnPulledUp(void) : "Fires when this mine is uprooted with physgun" + output OnPulledUp(void) : "Fires when this mine is uprooted with a physgun." + output OnTriggered(void) : "Fires when this mine is triggered by an enemy." + output OnExplode(void) : "Fires when this mine actually explodes." ] @PointClass size( -4 -4 -4, 4 4 4 ) base(Targetname, Parentname) = env_ar2explosion : @@ -3952,10 +4708,10 @@ spawnflags(Flags) = [ - 1 : "No DLight" : 0 - 2 : "No Smoke" : 0 - 4 : "Infinite" : 0 - 8 : "Start off" : 0 + 1 : "[1] No DLight" : 0 + 2 : "[2] No Smoke" : 0 + 4 : "[4] Infinite" : 0 + 8 : "[8] Start off" : 0 ] input Start(float) : "Starts the flare burning. The flare will burn for the specified number of seconds (0 = infinite)." @@ -3997,7 +4753,7 @@ spawnflags(flags) = [ - 1: "Instant" : 0 + 1: "[1] Instant" : 0 ] ] @@ -4170,14 +4926,13 @@ // Camera/monitor entities // //------------------------------------------------------------------------- -@PointClass base(Parentname, Angles) studioprop("models/editor/camera.mdl") = point_camera : "Camera" +@PointClass base(Targetname, Parentname, Angles) studioprop("models/editor/camera.mdl") = point_camera : "Camera" [ spawnflags(Flags) = [ - 1 : "Start Off" : 0 + 1 : "[1] Start Off" : 0 ] - targetname(target_source) : "Name" : : "The name that other entities refer to this entity by." FOV(float) : "FOV" : 90 : "Field of view in degrees" // resolution(float) : "resolution" : 256 : "width/height of the render target for the camera" UseScreenAspectRatio(choices) : "Screen Aspect Ratio" : 0 = @@ -4194,12 +4949,39 @@ fogStart(float) : "Fog Start" : 2048 : "The near fog plane." fogEnd(float) : "Fog End" : 4096 : "The far fog/clipping plane." fogMaxDensity(float) : "Fog Max Density [0..1]" : 1 : "The maximum fog density. 0=no fog, 1=full fog." + + SkyMode(choices) : "Sky Mode" : 2 : "How to draw the sky through this point_camera." = + [ + 2 : "Draw sky texture" + 1 : "Draw 3D skybox" + ] // Inputs input ChangeFOV(string) : "Changes camera's FOV over time" input SetOnAndTurnOthersOff(void) : "Turn the camera on, and turn all other cameras off." input SetOn(void) : "Turn the camera on." input SetOff(void) : "Turn the camera off." + input SetSkyMode(void) : "Sets the sky mode. NOTE: 2 = draw sky texture, 1 = draw 3D skybox!" +] + +@PointClass base(point_camera) studioprop("models/editor/camera.mdl") = point_camera_ortho : "Orthographic Camera" +[ + Ortho0(float) : "Ortho Top" : 100 : "The ortho's top dimension. Will be FOV if 0." + Ortho1(float) : "Ortho Bottom" : 0 : "The ortho's bottom dimension. Will be a negative version of the top if 0." + Ortho2(float) : "Ortho Left" : 0 : "The ortho's left dimension. Will be the top if 0." + Ortho3(float) : "Ortho Right" : 0 : "The ortho's right dimension. Will be a negative version of the left if 0." + IsOrtho(choices) : "Ortho Enabled" : 1 : "Sets whether this camera is orthographic. This is for when you want to toggle ortho mode via input." = + [ + 0 : "No" + 1 : "Yes" + ] + + // Inputs + input SetOrthoEnabled(bool) : "Changes camera's FOV over time" + input SetOrthoTop(string) : "Changes the top ortho over time" + input SetOrthoBottom(string) : "Changes the bottom ortho over time" + input SetOrthoLeft(string) : "Changes the left ortho over time" + input SetOrthoRight(string) : "Changes the right ortho over time" ] @SolidClass base(func_brush) = func_monitor : @@ -4211,7 +4993,7 @@ input Toggle(void) : "Toggle - If on, turn off, if off, turn on." input Enable(void) : "Enable." input Disable(void) : "Disable." - input SetCamera(string) : "Sets the camera to use for this monitor. Takes the name of a point_camera entity in the map." + input SetCamera(target_destination) : "Sets the camera to use for this monitor. Takes the name of a point_camera entity in the map." ] @SolidClass base(func_brush) = func_bulletshield : @@ -4260,9 +5042,16 @@ output AttackAxis(string) : "State of attack button [0,1]" output Attack2Axis(string) : "State of attack2 button [0,1]" + output OnPlayerUse(void) : "Fires when the player interacts with this entity." + // Inputs input HandBrakeOn(void) : "Turns the handbrake on" input HandBrakeOff(void): "Releases the handbrake" + + input EnterVehicle(void) : "Forces the activator (or player) into the vehicle." + input EnterVehicleImmediate(void) : "Forces the activator (or player) into the vehicle without enter/exit animations." + input ExitVehicle(void) : "Boots the driver out of the vehicle." + input ExitVehicleImmediate(void) : "Immediately boots the driver out of the vehicle with no animations." ] @PointClass base(BaseVehicle) studioprop() = prop_vehicle : @@ -4274,7 +5063,7 @@ spawnflags(flags) = [ - 1 : "Always Think (Run physics every frame)" : 0 + 1 : "[1] Always Think (Run physics every frame)" : 0 ] ] @@ -4288,7 +5077,7 @@ [ spawnflags(flags) = [ - 1 : "Active" : 0 + 1 : "[1] Active" : 0 ] yawrate(string) : "Yaw rate" : "30" @@ -4300,7 +5089,7 @@ rotatestopsound(sound) : "Rotate Stop Sound" : "" minRange(string) : "Minmum target range" : "0" maxRange(string) : "Maximum target range" : "0" - targetentityname(string) : "Name of entity I should follow/attack" : "" + targetentityname(target_destination) : "Name of entity I should follow/attack" : "" // Inputs input Activate(void) : "Turn the APC rockets on" @@ -4313,6 +5102,14 @@ @PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_apc : "APC with mounted guns, can only be driven by a vehicle driver or a npc_apcdriver." [ + model(studio) : "World model" : "models/combine_apc.mdl" + + VehicleLocked(choices) : "Start locked" : 1 : "APCs cannot be properly controlled by players, at least not by default. It's best to keep this locked." = + [ + 0 : "No" + 1 : "Yes" + ] + missilehint(target_destination) : "Missile Hint Target" : "" : "Name of one or more info_apc_missile_hint entities to use to determine what to hit." //Inputs @@ -4336,9 +5133,13 @@ @PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_jeep : "Driveable studiomodel jeep." [ + model(studio) : "World model" : "models/buggy.mdl" : "Use jalopy.mdl if you're using Episodic. If you want to use the original HL2 buggy in Episodic, use prop_vehicle_jeep_old." + input StartRemoveTauCannon(void) : "Start the tau removal sequence." input FinishRemoveTauCannon(void) : "Finish the tau removal sequence." + input EnableGun(bool) : "Enables or disables the jeep's tau cannon and associated crosshair." + // FIXME: These will move into episodic input LockEntrance( void ) : "Stops NPC's from entering the vehicle until unlocked." input UnlockEntrance( void ) : "Allows NPC's to enter the vehicle." @@ -4362,10 +5163,22 @@ 0 : "No" 1 : "Yes" ] + + NoHazardLights(choices) : "No Hazard Lights" : 0 : "Stops the jalopy's hazard lights from turning on and flashing when the player exits the vehicle." = + [ + 0 : "No" + 1 : "Yes" + ] spawnflags(Flags) = [ - 1 : "HUD Locator Precache" : 0 + 1 : "[1] HUD Locator Precache" : 0 + ] + + EnableGun(choices) : "Has Gun" : 0 : "Whether the jeep's tau cannon is enabled or disabled." = + [ + 0 : "No" + 1 : "Yes" ] @@ -4376,6 +5189,18 @@ output OnHostileExitedVehicle(void) : "Hostile has exited the vehicle." ] +@PointClass base(BaseDriveableVehicle) studioprop() = prop_vehicle_jeep_old : + "A way to access the original HL2 jeep in Episodic. Just use prop_vehicle_jeep if you're using the original HL2 version." +[ + model(studio) : "World model" : "models/buggy.mdl" + + input StartRemoveTauCannon(void) : "Start the tau removal sequence." + input FinishRemoveTauCannon(void) : "Finish the tau removal sequence." + + input DisablePhysGun(void) : "Disable physgun interactions with the jeep." + input EnablePhysGun(void) : "Enable physgun interactions with the jeep (default)." +] + @PointClass base(BaseDriveableVehicle) studioprop() = vehicle_viewcontroller : "Vehicle hack to control player view" [ @@ -4428,6 +5253,29 @@ output OnClose(void) : "Fired when the pod too closed to enter." ] +//@PointClass size( -4 -4 -4, 4 4 4 ) base(Targetname, Parentname) = env_vehiclecrosshair : +// "Vehicle crosshair replica. Uses its own origin and angles. Parent to a func_tank or something." +//[ +// //TargetVehicle(target_destination) : "Target vehicle" +// +// StartDisabled(choices) : "Start Disabled" : 1 = +// [ +// 0 : "No" +// 1 : "Yes" +// ] +// +// input TurnOn(void) : "Turns on the crosshair." +// input TurnOff(void) : "Turns off the crosshair." +// input UnableToFire(bool) : "Toggles whether the crosshair should show up as red, or unable to fire." +//] + +@PointClass size( -4 -4 -4, 4 4 4 ) base(Targetname) = env_starfield : "Starfield effect" +[ + input TurnOn(void) : "Turn on" + input TurnOff(void) : "Turn off" + input SetDensity(float) : "Set the density of the starfield. It's a multiplier, so 1 is the default." +] + @PointClass base(BaseSpeaker) iconsprite("editor/ambient_generic.vmt") = env_speaker : "Announcement Speaker" [ @@ -4451,7 +5299,7 @@ // Inputs input Activate(void) : "Take control of the player's view and start blending the two scenes." input Deactivate(void) : "Stop controlling the view." - input SetCameraViewEntity(string) : "Set the viewpoint to blend with the player's viewpoint." + input SetCameraViewEntity(target_destination) : "Set the viewpoint to blend with the player's viewpoint." input SetBlendMode(integer) : "Set the blending mode to use." input SetFOV(integer) : "Set the fov for the second camera." input SetNextFOV(integer) : "Set the FOV to blend to over time. Follow this with a SetFOVBlendTime input to start the fov blend." @@ -4460,12 +5308,26 @@ input SetNextBlendTime(float) : "Set the amount of time it should take to blend to the next mode, and start blending." input FadeTo(string) : "Fade to a specific alpha amount of an amount of time. Parameters: " input SetFadeColor(string) : "Set the fade color. Parameters: " + input SetDrawSky(bool) : "Sets whether the skybox should be drawn." + input SetDrawSky2(bool) : "Sets whether the skybox should be drawn in the second view." alternatefovchange(choices) : "Match env_zoom's FOV transition" : 0 : "Whether the script should match env_zoom's FOV transition." = [ 0 : "No" 1 : "Yes" ] + + DrawSky(choices) : "Draw skybox" : 0 : "Allows the skybox to be drawn while the script_intro is active. Drawing the skybox *might* break the VortWarp shader used by the transcending vortigaunts in EP1/EP2." = + [ + 0 : "No" + 1 : "Yes" + ] + + DrawSky2(choices) : "Draw skybox in camera view" : 0 : "Allows the skybox to be drawn in the second view. Otherwise draws a solid white background." = + [ + 0 : "No" + 1 : "Yes" + ] ] //------------------------------------------------------------------------- @@ -4478,8 +5340,8 @@ [ spawnflags(Flags) = [ - 1 : "No small particles" : 0 - 2 : "Start on" : 0 + 1 : "[1] No small particles" : 0 + 2 : "[2] Start on" : 0 ] scale(float) : "Scale" : 1 : "Scale of the effect. 1 is the default size, 2 is twice that, etc." @@ -4504,7 +5366,7 @@ input StartCharge(float) : "Start charging the effect over specified number of seconds." input StartDischarge(void) : "Start discharging the effect over specified number of seconds." input Stop(float) : "Stops the effect at any point." - input SetTargetEnt(string) : "Sets the target entity for the effect." + input SetTargetEnt(target_destination) : "Sets the target entity for the effect." ] @@ -4572,7 +5434,7 @@ @PointClass base(Targetname) = env_entity_dissolver: "Entity Dissolver" [ - input Dissolve(string) : "Dissolve target, if no target is passed it'll use the target specified in the target field." + input Dissolve(target_destination) : "Dissolve target, if no target is passed it'll use the target specified in the target field." target(target_destination) : "Target to Dissolve" : "" : "Targetname of the entity you want to dissolve." magnitude(integer) : "Magnitude" : 250 : "How strongly to push away from the center." @@ -4601,15 +5463,29 @@ input SetScaleZ(vector) : "Scales the prop in one Axis. Params: