Half-Life Source.fgd: Difference between revisions
Jump to navigation
Jump to search
Tip:Select the beginning of the line (usually the "//" comment) by clicking it, scroll down then hold ⇧ Shift, and click at the end of the line to select all.
m (comment spelling; NOTE: ts2do, was "interruptability" misspelled intentionally?) |
mNo edit summary |
||
(47 intermediate revisions by 16 users not shown) | |||
Line 1: | Line 1: | ||
{{ | {{merge|[[Half-Life Source.fgd (2023)]]}} | ||
< | Unofficial [[FGD]] for {{hls|4}} and {{hldms|4}}. | ||
== FGD == | |||
{{textfile|fgd}} | |||
{{codeblock|src=hls.fgd|lang=fgd|<!-- | |||
--><nowiki>//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. ======= | |||
// | // | ||
// Purpose: Half-Life: Source & Half-Life Deathmatch: Source game definition file (.fgd) by ts2do | // Purpose: Half-Life: Source & Half-Life Deathmatch: Source game definition file (.fgd) by ts2do | ||
// Updated by Dmx6 October 2007, by SiPlus June 2011, and by BlackShadow 2018 | |||
// | // | ||
//============================================================================= | //============================================================================= | ||
Line 45: | Line 51: | ||
] | ] | ||
@SolidClass base(Breakable, RenderFields) = func_pushable : "Pushable object" | |||
[ | |||
size(choices) : "Hull Size" : 0 = | |||
[ | |||
0: "Point size" | |||
1: "Player size" | |||
2: "Big Size" | |||
3: "Player duck" | |||
] | |||
spawnflags(flags) = | |||
[ | |||
128: "Breakable" : 0 | |||
] | |||
friction(integer) : "Friction (0-400)" : 50 | |||
buoyancy(integer) : "Buoyancy" : 20 | |||
_minlight(string) : "Minimum light level" | |||
] | |||
@SolidClass = func_ladder : | @SolidClass = func_ladder : | ||
"Ladder. Players will be able to freely move along this brush, as if it was a ladder. If you are using a model prop " + | "Ladder. Players will be able to freely move along this brush, as if it was a ladder. If you are using a model prop " + | ||
Line 50: | Line 73: | ||
"func_ladder brush." | "func_ladder brush." | ||
[ | [ | ||
] | |||
@SolidClass base(Targetname,Origin) = func_mortar_field : "Mortar field" | |||
[ | |||
m_fControl(choices) : "Position" : 0 : "Random: will fire anywhere in bounds. "+ | |||
"Above activator: will fire above or below entity activated the mortar. "+ | |||
"X/Y Controller: position set by momentary_rot_buttons (tactical map)." = | |||
[ | |||
0 : "Random" | |||
1 : "Above activator" | |||
2 : "X/Y Controller" | |||
] | |||
m_flSpread(integer) : "Spread" : 0 : "Spread of fire" | |||
m_iCount(integer) : "Count" : 1 : "Count of mortar shells" | |||
m_iszXController(target_destination) : "X Controller" : "" : "momentary_rot_button controlling X location" | |||
m_iszYController(target_destination) : "Y Controller" : "" : "momentary_rot_button controlling Y location" | |||
input Trigger(void) : "Trigger" | |||
] | ] | ||
Line 180: | Line 220: | ||
] | ] | ||
] | ] | ||
@PointClass base(Targetname) color(255 128 0) = multi_manager : "MultiTarget Manager" | @PointClass iconsprite("editor/multi_manager.vmt") base(Targetname) color(255 128 0) = multi_manager : "MultiTarget Manager" | ||
[ | [ | ||
spawnflags(Flags) = | spawnflags(Flags) = | ||
Line 186: | Line 226: | ||
1 : "multithreaded" : 0 | 1 : "multithreaded" : 0 | ||
] | ] | ||
input Trigger(void) : "Trigger the manager." | |||
output OnTrigger(void) : "Fired when the manager is triggered." | |||
] | ] | ||
@PointClass base(Targetname) color(128 255 128) = multisource : "Multisource" | @PointClass iconsprite("editor/multisource.vmt") base(Targetname) color(128 255 128) = multisource : "Multisource" | ||
[ | [ | ||
target(target_destination) : "Target" | target(target_destination) : "Target" | ||
Line 330: | Line 372: | ||
] | ] | ||
] | ] | ||
@ | @PointClass base(Targetname,RenderFields,Angles) studio("models/barney.mdl") = monster_barney_dead : "Dead Barney" | ||
[ | [ | ||
pose(Choices) : "Pose" : 0 = | |||
[ | [ | ||
0 : " | 0 : "On back" | ||
1 : " | 1 : "On side" | ||
2 : "On stomach" | |||
] | ] | ||
] | |||
@PointClass base(Targetname,RenderFields,Angles) studio("models/player.mdl") = monster_hevsuit_dead : "Dead HEV" | |||
[ | |||
pose(Choices) : "Pose" : 0 = | |||
[ | [ | ||
0 : "On back" | |||
1 : "Seated" | |||
2 : "On stomach" | |||
3 : "On table" | |||
] | ] | ||
] | ] | ||
@NPCClass base( | @NPCClass base(Targetname,RenderFields,Angles) studio("models/scientist.mdl") = monster_scientist_dead : "Dead Scientist" | ||
[ | [ | ||
body(Choices) : "Body" : -1 = | |||
[ | |||
-1 : "Random" | |||
0 : "Glasses" | |||
1 : "Einstein" | |||
2 : "Luther" | |||
3 : "Slick" | |||
] | |||
pose(Choices) : "Pose" : 0 = | |||
[ | [ | ||
1 : " | 0 : "On back" | ||
1 : "On stomach" | |||
2 : "Sitting" | |||
3 : "Hanging" | |||
4 : "Table 1" | |||
5 : "Table 2" | |||
6 : "Table 3" | |||
] | ] | ||
] | ] | ||
@ | @NPCClass base(BaseNPC) studio("models/miniturret.mdl") = monster_miniturret : "Mini Auto Turret" | ||
[ | [ | ||
orientation(Choices) : "Orientation" : 0 = | |||
[ | |||
0 : "Floor Mount" | |||
1 : "Ceiling Mount" | |||
] | |||
spawnflags(Flags) = | spawnflags(Flags) = | ||
[ | [ | ||
32 : "Autostart" : 0 | |||
64 : "Start Inactive" : 0 | |||
] | ] | ||
] | ] | ||
@NPCClass base(BaseNPC) studio("models/turret.mdl") = monster_turret : "Auto Turret" | |||
@ | |||
[ | [ | ||
orientation(Choices) : "Orientation" : 0 = | |||
[ | |||
0 : "Floor Mount" | |||
1 : "Ceiling Mount" | |||
] | |||
spawnflags(Flags) = | |||
[ | [ | ||
32 : "Autostart" : 0 | |||
64 : "Start Inactive" : 0 | |||
] | ] | ||
] | ] | ||
@NPCClass base(BaseNPC) studio("models/nihilanth.mdl") = monster_nihilanth : "Nihilanth" [] | |||
@ | @NPCClass base(BaseNPC) studio() = monster_furniture : "Monster Furniture" | ||
[ | [ | ||
model(studio) : " | model(studio) : "model" | ||
] | ] | ||
@NPCClass base(BaseNPC) studio("models/roach.mdl") = monster_cockroach : "Cockroach" [] | |||
@PointClass base(Angles, | @PointClass base(Targetname, RenderFields, Angles) studio("models/light.mdl") = xen_plantlight : "Xen Plant Light" [] | ||
@PointClass base(Targetname, RenderFields, Angles) studio("models/hair.mdl") = xen_hair : "Xen Hair" | |||
[ | |||
spawnflags(Flags) = | |||
[ | |||
1 : "Sync Movement" : 0 | |||
] | |||
] | |||
@PointClass base(Targetname, RenderFields, Angles) studio("models/tree.mdl") = xen_tree : "Xen Tree" [] | |||
@PointClass base(Targetname, RenderFields, Angles) studio("models/fungus(small).mdl") = xen_spore_small : "Xen Spore (small)" [] | |||
@PointClass base(Targetname, RenderFields, Angles) studio("models/fungus.mdl") = xen_spore_medium : "Xen Spore (medium)" [] | |||
@PointClass base(Targetname, RenderFields, Angles) studio("models/fungus_large.mdl") = xen_spore_large : "Xen Spore (large)" [] | |||
@NPCClass base(BaseNPC) studio("models/scientist.mdl") = monster_scientist : "Scientist" | |||
[ | |||
body(Choices) : "Body" : -1 = | |||
[ | |||
-1 : "Random" | |||
0 : "Glasses" | |||
1 : "Einstein" | |||
2 : "Luther" | |||
3 : "Slick" | |||
] | |||
] | |||
@PointClass base(BaseNPC, RenderFields, Shadow) studio() = monster_generic : "Generic Script NPC" | |||
[ | [ | ||
spawnflags(Flags) = | spawnflags(Flags) = | ||
[ | [ | ||
65536 : "Not solid" : 0 | |||
] | ] | ||
model(studio) : "Model" | |||
body(Integer) : "Body" : 0 | |||
] | |||
@PointClass base(BaseNPC, Parentname, RenderFields, Shadow) studio() = generic_actor : "Generic Actor NPC" | |||
[ | |||
model(studio) : "Model" | |||
hull_name(choices) : "Hull type" : "Human" = | |||
[ | |||
"HUMAN_HULL" : "Human" | |||
"WIDE_HUMAN_HULL" : "Wide" | |||
"TINY_HULL" : "Tiny" | |||
"MEDIUM_HULL" : "Medium" | |||
"LARGE_HULL" : "Large" | |||
] | |||
] | ] | ||
@ | @PointClass base(BaseNPC, RenderFields, Shadow) studio() = cycler_actor : "Actor Cycler" | ||
[ | [ | ||
model(studio) : "Model" | |||
Sentence(string) : "Sentence Group" : "" | |||
input Alpha(integer) : "Set Alpha Value" | |||
input | |||
] | ] | ||
@PointClass base(Angles, BaseNPCMaker) iconsprite("editor/npc_maker.vmt") = monstermaker : "NPC Maker" | |||
@ | |||
[ | [ | ||
target(string) : "Target On Release" | |||
monstertype(string) : "Monster Type" | |||
netname(string) : "Childrens' Name" | |||
spawnflags(Flags) = | |||
[ | [ | ||
1 : "Start ON" : 0 | |||
// 2 : "PVS On/Off" : 0 // not implemented | |||
4 : "Cyclic" : 0 | |||
8 : "MonsterClip" : 0 | |||
4 : " | |||
] | ] | ||
// | // how many monsters the monstermaker can create (-1 = unlimited) | ||
monstercount(integer) : "Number of Monsters" : -1 | |||
// if delay is -1, new monster will be made when last monster dies. | |||
// else, delay is how often (seconds) a new monster will be dookied out. | |||
delay(string) : "Frequency" : "5" | |||
// | // maximum number of live children allowed at one time. (New ones will not be made until one dies) | ||
// -1 no limit | |||
m_imaxlivechildren(integer) : "Max live children" : 5 | |||
] | ] | ||
//------------------------------------------------------------------------- | |||
// | |||
// Player Control Entities | |||
// | |||
//------------------------------------------------------------------------- | |||
@ | @BaseClass base(Targetname) size(-10 -10 -10, 10 10 10) color(255 0 255) = player_control | ||
[ | [ | ||
// Inputs | |||
input Activate(void) : "Turns on" | |||
input Deactivate(void) : "Turns off" | |||
input SetThrust(string) : "Set Thrust" | |||
input SetSideThrust(string) : "Set Side Thrust" | |||
] | |||
//------------------------------------------------------------------------- | |||
// | |||
// Scripted Events | |||
// | |||
//------------------------------------------------------------------------- | |||
@BaseClass base(Targetname, Parentname, Angles) color(255 0 255) sphere(m_flRadius) = BaseScripted | |||
@ | |||
[ | [ | ||
m_iszEntity(target_destination) : "Target NPC" : : "The name or class name (such as 'npc_zombie') of an NPC to use for this script." | |||
m_iszIdle(string) : "Pre Action Idle Animation" : "" : "The name of the sequence (such as 'idle01') or activity (such as 'ACT_IDLE') to play before the action animation if the NPC must wait for the script to be triggered. Use 'Start on Spawn' flag or MoveToPosition input to play this idle animation." | |||
m_iszEntry(string) : "Entry Animation" : "" : "The name of the sequence (such as 'reload02') or activity (such as 'ACT_RELOAD') to play when the sequence starts, before transitioning to play the main action sequence." | |||
m_iszPlay(string) : "Action Animation" : "" : "The name of the main sequence (such as 'reload02') or activity (such as 'ACT_RELOAD') to play." | |||
m_iszPostIdle(string) : "Post Action Idle Animation" : "" : "The name of the sequence (such as 'idle01') or activity (such as 'ACT_IDLE') to play after the action animation." | |||
m_iszCustomMove(string) : "Custom Move Animation" : "" : "Used in conjunction with the 'Custom movement' setting for the 'Move to Position' property, specifies the sequence (such as 'crouch_run01') or activity (such as 'ACT_RUN') to use while moving to the scripted position." | |||
m_bLoopActionSequence(Choices) : "Loop Action Animation?" : 0 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
m_bSynchPostIdles(Choices) : "Synch Post Idles?" : 0 = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
1 : "Yes" | 1 : "Yes" | ||
] | ] | ||
m_flRadius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere." | m_flRadius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere." | ||
m_flRepeat(integer) : "Repeat Rate ms" : 0 | |||
m_fMoveTo(Choices) : "Move to Position" : 1 = | |||
[ | |||
0 : "No" | |||
1 : "Walk" | |||
2 : "Run" | |||
3 : "Custom movement" | |||
4 : "Instantaneous" | |||
5 : "No - Turn to Face" | |||
] | |||
m_iszNextScript(target_destination) : "Next Script" : : "The name of the script to run immediately after this script completes. The NPC will not return to AI between the two scripts." | |||
m_bIgnoreGravity(choices) : "Ignore Gravity on NPC during script" : 0 : "If this is set to 'Yes', the NPC will not be subject to gravity while playing this script." = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
m_bDisableNPCCollisions(choices) : "Disable NPC collisions during script" : 0 : "Useful for when NPCs playing scripts must interpenetrate while riding on trains, elevators, etc. This only disables collisions between the NPCs in the script and must be enabled on BOTH scripted_sequences." = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
// Inputs | // Inputs | ||
input | input BeginSequence(void) : "Summons an NPC to act out the scripted sequence." | ||
input | 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." | |||
// Outputs | // Outputs | ||
output | output OnBeginSequence(void) : "Fires when the action animation begins playing." | ||
output | output OnEndSequence(void) : "Fires when the action 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." | |||
output OnScriptEvent02(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 2 } in the QC." | |||
output OnScriptEvent03(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 3 } in the QC." | |||
output OnScriptEvent04(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 4 } in the QC." | |||
output OnScriptEvent05(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 5 } in the QC." | |||
output OnScriptEvent06(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 6 } in the QC." | |||
output OnScriptEvent07(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 7 } in the QC." | |||
output OnScriptEvent08(void) : "Fires when a 'trigger' anim event occurs while playing the script. Use { event 1003 framenum 8 } in the QC." | |||
] | ] | ||
@PointClass sphere() iconsprite("editor/scripted_sentence.vmt") base(Targetname) = scripted_sentence : "Scripted Sentence" | |||
@ | |||
[ | [ | ||
spawnflags(Flags) = | |||
[ | [ | ||
" | 1 : "Fire Once" : 1 | ||
"1" : " | 2 : "Followers Only" : 0 | ||
4 : "Interrupt Speech" : 1 | |||
8 : "Concurrent" : 0 | |||
16 : "Speak to Activator" : 1 | |||
] | ] | ||
sentence(string) : "Sentence Name" : "" | |||
entity(string) : "Speaker Type" | |||
delay(string) : "Additional Sentence Time" : "0" | |||
radius(integer) : "Search Radius" : 512 | |||
refire(string) : "Delay Before Refire" : "3" | |||
listener(string) : "Listener Type" | |||
volume(string) : "Volume 0-10" : "10" | |||
attenuation(Choices) : "Sound Radius" : 0 = | |||
[ | [ | ||
0 : " | 0 : "Small Radius" | ||
1 : " | 1 : "Medium Radius" | ||
2 : "Large Radius" | |||
3 : "Play Everywhere" | |||
2 : " | |||
] | ] | ||
// Inputs | // Inputs | ||
input | input BeginSentence(void) : "Starts the scripted sentence." | ||
// Outputs | // Outputs | ||
output | output OnBeginSentence(void) : "Fires when the sentence begins" | ||
output | output OnEndSentence(void) : "Fires when the sentence ends" | ||
] | ] | ||
@PointClass base( | @PointClass base(Targetname, Parentname) iconsprite("editor/info_target.vmt") = scripted_target : "Scripted Target" | ||
[ | [ | ||
StartDisabled(choices) : "Start Disabled" : 1 = | |||
[ | [ | ||
0 : " | 0 : "No" | ||
1 : " | 1 : "Yes" | ||
] | |||
] | |||
m_iszEntity(npcclass) : "Target NPC" | |||
m_flRadius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere." | |||
MoveSpeed(integer) : "Move Speed" : 5 // How quickly should target move between scripted targets | |||
PauseDuration(integer) : "Pause Duration" : 0 // How long should target pause at scripted target | |||
EffectDuration(integer) : "Effect Duration" : 2 // How long should any associated effect last | |||
target(target_destination) : "Next Target" // Next scripted target | |||
// Inputs | |||
input Enable(void) : "Enable this entity" | |||
input Disable(void) : "Disable this entity" | |||
// Outputs | |||
output AtTarget(void) : "Fires when NPC reaches this target" | |||
output LeaveTarget(void) : "Fires when NPC leaves this target" | |||
] | ] | ||
@PointClass base(Targetname) iconsprite("editor/ | @PointClass base(Targetname) iconsprite("editor/ai_relationship.vmt") sphere() = ai_relationship : | ||
"AI Relationship - Sets relationships between groups of NPCs in the AI." | |||
[ | [ | ||
subject(target_name_or_class) : "Subject(s)" : "" : "This is the NPC(s) whose disposition will change. May be a targetname or a classname." | |||
target(target_name_or_class) : "Target(s)" : "" : "This is the NPC(s) about whom the Subject(s) will change their disposition. May be a tarGetname or a classname." | |||
disposition(choices) : "Disposition" : 3 : "Choose the way the Subject(s) should feel about the Target(s)" = | |||
[ | |||
// 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(s) should Like/Hate/Fear the Target(s). Higher priority = stronger feeling." | |||
StartActive(choices) : "Start Active" : 0 = | StartActive(choices) : "Start Active" : 0 = | ||
Line 636: | Line 694: | ||
] | ] | ||
Reciprocal(choices) : "Reciprocal" : 0 : "Set this to YES to have the new relationship mirrored by Target" = | |||
[ | [ | ||
0 : "No" | |||
1 : "Yes" | |||
] | ] | ||
spawnflags(flags) = | |||
[ | [ | ||
1 : "Notify subject of target's location" : 0 | |||
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) = ai_ally_manager : "AI Ally Manager" | |||
[ | |||
maxallies(integer) : "Maximum number of allies" : 5 | |||
maxmedics(integer) : "Maximum number of medics" : 1 | |||
// Inputs | // Inputs | ||
input | input SetMaxAllies(integer) : "Set maximum number of allies" | ||
input SetMaxMedics(integer) : "Set maximum number of medic allies" | |||
input Replenish(void) : "Replenish player allies" | |||
// Outputs | |||
output SpawnMedicAlly(void) : "Spawn Medic Ally" | |||
output SpawnAlly0(void) : "Spawn Ally 0" | |||
output SpawnAlly1(void) : "Spawn Ally 1" | |||
output SpawnAlly2(void) : "Spawn Ally 2" | |||
output SpawnAlly3(void) : "Spawn Ally 3" | |||
output SpawnAlly4(void) : "Spawn Ally 4" | |||
output SpawnAlly5(void) : "Spawn Ally 5" | |||
output SpawnAlly6(void) : "Spawn Ally 6" | |||
output SpawnAlly7(void) : "Spawn Ally 7" | |||
output SpawnAlly8(void) : "Spawn Ally 8" | |||
output SpawnAlly9(void) : "Spawn Ally 9" | |||
output OnZeroAllies(void) : "Fires when there are no more allies" | |||
output OnZeroMedicAllies(void) : "Fires when there are no more allies" | |||
] | ] | ||
@ | @BaseClass base(Targetname) = LeadGoalBase | ||
[ | |||
actor(target_name_or_class) : "Actor(s) to affect" | |||
goal(string) : "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." | |||
RetrieveDistance(float) : "Retrieve Distance" : "96" : "The distance from the player that the NPC should return to when retrieving a lagging player. Must be between ('Lead Distance' + 24) and ('Lead Distance' * 4) to avoid the leader ping-ponging." | |||
SuccessDistance(float) : "Success Distance" : "0" : "The distance from the player (to the NPC) that the player must be within for the Lead to succeed, once the NPC has reached the goal. If set to 0, it'll use the lead distance instead (for legacy support)." | |||
Run(choices) : "Run instead of Walk" : "0" = | |||
[ | [ | ||
1 : " | "0" : "No" | ||
"1" : "Yes" | |||
] | ] | ||
Retrieve(choices) : "Retrieve player?" : 1 = | |||
[ | |||
0 : "No, just idle and wait" | |||
1 : "Yes, move to retrieve" | |||
] | |||
ComingBackWaitForSpeak(choices) : "Before Coming Back, Wait for speech?" : 1 = | |||
[ | |||
0 : "No, come back while speaking" | |||
1 : "Yes, wait for speech to finish" | |||
] | |||
RetrieveWaitForSpeak(choices) : "On Retrieve, Wait for speech?" : 1 = | |||
[ | |||
0 : "No, start leading while speaking" | |||
1 : "Yes, wait for speech to finish" | |||
] | |||
DontSpeakStart(choices) : "Speak start greeting?" : 0 = | |||
[ | |||
0 : "Yes, speak the start greeting" | |||
1 : "No, don't speak the greeting" | |||
] | |||
LeadDuringCombat(choices) : "Lead during combat?" : 0 = | |||
[ | |||
0 : "No. Stop to fight, resume leading when safe." | |||
1 : "Yes, lead while fighting." | |||
] | |||
GagLeader(choices) : "Gag Leader?" : 0 = | |||
[ | [ | ||
0 : "No" | 0 : "No. Speak lead concepts normally, respecting other lead speech settings." | ||
1 : "Yes" | 1 : "Yes, don't speak any lead concepts at all, overriding all other lead speech settings." | ||
] | ] | ||
AttractPlayerConceptModifier(string) : "Attract player concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_ATTRACTPLAYER' concept is spoken." | |||
WaitOverConceptModifier(string) : "Player wait over concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_WAITOVER' concept is spoken." | |||
ArrivalConceptModifier(string) : "Arrival concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_ARRIVAL' concept is spoken." | |||
PostArrivalConceptModifier(string) : "Post-arrival concepts modifier" | |||
SuccessConceptModifier(string) : "Success concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_SUCCESS' concept is spoken." | |||
FailureConceptModifier(string) : "Failure concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'lead_fail' concept is spoken." | |||
ComingBackConceptModifier(string) : "Coming Back concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_RETRIEVE' concept is spoken. Spoken as the NPC starts returning to the player to retrieve him." | |||
RetrieveConceptModifier(string) : "Retrieve concept modifier" : "" : "Appended to the keyvalues passed into the response rules when the 'TLK_LEAD_COMINGBACK' concept is spoken. Spoken when NPC has finally reached the player to retrieve him." | |||
// Spawnflags | |||
spawnflags(Flags) = | |||
[ | [ | ||
0 : "No" | 1 : "No def success" : 0 | ||
2 : "No def failure" : 0 | |||
4 : "Use goal facing" : 1 | |||
] | ] | ||
// Inputs | // Inputs | ||
input Activate(void) | input Activate( void ) : "Begin the leading behavior" | ||
input Deactivate(void) | input Deactivate( void ) : "Stop the leading behavior" | ||
input SetSuccess( void ) : "Notify success of leading" | |||
input SetFailure( void ) : "Notify failure of leading" | |||
// Outputs | |||
output OnArrival( void ) : "Fires when NPC reaches the lead point" | |||
output OnArrivalDone( void ) : "Fires when NPC has played out any arrival speech" | |||
output OnSuccess( void ) : "Fires when NPC achieves the goal" | |||
output OnFailure( void ) : "Fires when NPC fails to achieves the goal" | |||
output OnDone( void ) : "Fires when NPC completes behavior (any post-success or fail acting is complete)" | |||
] | ] | ||
@PointClass base( | @PointClass base(LeadGoalBase) iconsprite("editor/ai_goal_lead.vmt") = ai_goal_lead : "AI Goal Lead" | ||
[ | [ | ||
SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | ||
[ | [ | ||
0 : "Entity Name" | 0 : "Entity Name" | ||
1 : "Classname" | 1 : "Classname" | ||
] | ] | ||
] | |||
@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" | |||
] | ] | ||
MissingWeaponConceptModifier(string) : "Missing weapon concept modifier" | |||
SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | |||
[ | [ | ||
0 : " | 0 : "Entity Name" | ||
1 : " | 1 : "Classname" | ||
] | |||
] | |||
@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" | |||
SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | |||
[ | [ | ||
0 : " | 0 : "Entity Name" | ||
1 : " | 1 : "Classname" | ||
] | |||
] | |||
StartActive(choices) : "Start Active" : 0 = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
Line 723: | Line 863: | ||
] | ] | ||
MaximumState(choices) : "Maximum state" : 1 = | |||
[ | [ | ||
1 : "Idle" | |||
2 : "Alert" | |||
3 : "Combat" | |||
] | ] | ||
Formation(choices) : "Formation" : 0 = | |||
[ | [ | ||
0 : " | 0 : "Close circle" | ||
1 : " | 1 : "Wide circle" | ||
5 : "Medium circle" | |||
6 : "Sidekick" | |||
8 : "Vortigaunt" | |||
] | ] | ||
// Inputs | // Inputs | ||
input Activate( void ) : "Begin | input Activate( void ) : "Begin the follow behavior" | ||
input Deactivate( void ) : "Cease | input Deactivate( void ) : "Cease the follow behavior" | ||
] | ] | ||
@PointClass base( | @PointClass base(FollowGoal) iconsprite("editor/ai_goal_follow.vmt") = ai_goal_follow : "AI Goal Follow" | ||
[ | [ | ||
] | |||
@PointClass base(FollowGoal) iconsprite("editor/ai_goal_follow.vmt") = ai_goal_injured_follow : "AI Goal Injured Follow" | |||
[ | |||
] | ] | ||
@PointClass base(Targetname, Parentname | @PointClass size( -4 -4 -4, 4 4 4 ) base(Targetname, Angles, Parentname) studio("models/pigeon.mdl") = ai_battle_line : "Battle line" | ||
[ | |||
[ | // Spawnflags | ||
spawnflags(Flags) = | |||
[ | [ | ||
1 : "Use parent's orientation" : 0 | |||
] | ] | ||
actor(target_name_or_class) : "Actor(s) or squad to affect" | |||
Active(choices) : "Active" : 0 = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
Line 781: | Line 908: | ||
] | ] | ||
Strict(choices) : "Strict" : 1 : "Player orders can override, applies to allies only" = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
Line 787: | Line 914: | ||
] | ] | ||
// Inputs | |||
input Activate(void) | |||
input Deactivate(void) | |||
// Inputs | |||
input | |||
input | |||
] | ] | ||
@PointClass base(Targetname) = | @PointClass base(Targetname) iconsprite("editor/ai_goal_standoff.vmt") = ai_goal_standoff : "AI Goal Standoff" | ||
[ | [ | ||
actor(target_name_or_class) : "Actor(s) to affect | actor(target_name_or_class) : "Actor(s) to affect" | ||
// goal(string) : "Target Entity (self by default) [NOT IMPLEMENTED]" | |||
SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | ||
Line 819: | Line 936: | ||
] | ] | ||
HintGroupChangeReaction(Choices) : "Reaction to tactical change" : 1 : "What to do if leader moves, threat is neutralized, hint group changes, etc" = | |||
[ | [ | ||
0 : "Move when ready (default AI)" | |||
1 : "Move when seek cover" | |||
2 : "Move immediately" | |||
] | ] | ||
Aggressiveness(Choices) : "Aggressiveness" : 2 = | |||
[ | |||
0 : "Very low" | |||
1 : "Low" | |||
] | 2 : "Medium" | ||
3 : "High" | |||
4 : "Very High" | |||
// Custom agression disabled | |||
// 100 : "Custom" | |||
] | |||
PlayerBattleline(choices) : "Player battleline" : 1 : "Player defines a battle line, applies to allies only" = | |||
[ | [ | ||
0 : "No" | |||
1 : "Yes" | |||
] | |||
StayAtCover(choices) : "Stay at cover location" : 0 : "When have suitable cover, don't change it (disables advancing to battle line)" = | |||
[ | |||
0 : "No" | |||
] | 1 : "Yes" | ||
] | |||
AbandonIfEnemyHides(choices) : "Abandon if enemies hide" : 0 : "If no enemy detected recently, stop the standoff" = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
Line 859: | Line 972: | ||
] | ] | ||
input | // Custom aggression | ||
input | // 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 SetAggressiveness(integer) : "Set aggressiveness" | |||
] | ] | ||
@PointClass base(Targetname, Parentname, Angles) sphere(policeradius) iconsprite("editor/ai_goal_police.vmt") = ai_goal_police : "AI Goal Police" | |||
[ | |||
spawnflags(Flags) = | |||
[ | |||
2 : "Knock-out target past crossing plane" : 0 | |||
4 : "Do not leave post" : 0 | |||
] | |||
policeradius(float) : "Radius" : 512 : "Radius to police" | |||
policetarget(string) : "Target" : "" : "Target to police" | |||
// Inputs | |||
input EnableKnockOut(void) : "Tells the goal to make the active policing NPC knock out its target" | |||
input DisableKnockOut(void) : "Stop the active policing NPC from trying to knock out its target" | |||
@PointClass base(Targetname) = | // Outputs | ||
output OnFirstWarning(void) : "Fires the first time a policing cop warns a target" | |||
output OnSecondWarning(void) : "Fires the second time a policing cop warns a target" | |||
output OnLastWarning(void) : "Fires when a policing cop warns a target for the last time" | |||
output OnSupressingTarget(void) : "Fires when a policing cop starts to suppress (ie. beat) a target" | |||
output OnKnockOut(void) : "Fires when a target has been knocked out" | |||
] | |||
@PointClass base(Targetname, Parentname, Angles) iconsprite("editor/assault_rally.vmt") line(255 255 255, targetname, assaultpoint) = assault_rallypoint : | |||
"(Assault) rally point" | |||
[ | [ | ||
assaultpoint(target_destination) : "Assault Point" : "" : "Location to move to as assault begins" | |||
assaultdelay(float) : "Assault Delay" : 0 : "How long to wait after cue is given before assault begins." | |||
rallysequence(string) : "Rally Sequence" : "" : "Override the NPC's wait activity by entering a sequence name." | |||
priority(integer) : "Priority" : 1 : "Higher priority rally points get selected first." | |||
forcecrouch(choices) : "Force Crouch" : 0 : "NPCs using this assault point are forced into crouching while holding it." = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
Line 875: | Line 1,027: | ||
] | ] | ||
urgent(choices) : "Urgent" : 0 : "If true, NPCs will consider movement to this rally point as Urgent Navigation." = | |||
[ | [ | ||
0 : "No" | |||
1 : "Yes" | |||
] | ] | ||
output OnArrival(void) : "Fires when the NPC reaches this rally point" | |||
[ | ] | ||
@PointClass base(Targetname, Parentname, Angles) iconsprite("editor/assault_point.vmt") line(255 255 255, targetname, nextassaultpoint) = assault_assaultpoint : | |||
"(Assault) assault point" | |||
[ | |||
assaultgroup(string) : "Assault Hint Group" : "" : "NPC's movements are constrained to this hint group once assault has begun" | |||
nextassaultpoint(target_destination) : "Next assault point (optional)" | |||
assaulttimeout(float) : "Assault time out" : "3.0" : "This point is cleared when no enemies are seen for this long (seconds)" | |||
clearoncontact(choices) : "Clear on contact with enemies" : 0 : "If you come in contact with enemies while approaching the assault point, clear our assault point" = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
1 : "Yes" | 1 : "Yes" | ||
] | ] | ||
allowdiversion(choices) : "Allow diversion" : 0 : "If you come in contact with enemies while approaching the assault point, divert to kill them. Resume the assault once contact is lost." = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
1 : "Yes" | 1 : "Yes" | ||
] | ] | ||
allowdiversionradius(float) : "Diversion Proximity" : 0 : "If Allow Diversion is set, NPC will only divert from assault to attack an enemy that is within this distance of the assault point. 0 = No limit." | |||
nevertimeout(choices) : "Never Timeout" : 0 : "If set, the assault never ends for NPCs assaulting this point. Useful for forcing NPCs back to a point." = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
1 : "Yes" | 1 : "Yes" | ||
] | ] | ||
strict(choices) : "Strict?" : 0 = | |||
[ | [ | ||
0 : "No" | 0 : "No, NPC may move from point to attack" | ||
1 : "Yes | 1 : "Yes, NPC may not move to attack" | ||
] | ] | ||
spawnflags(Flags) = | |||
[ | [ | ||
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." = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
1 : "Yes" | 1 : "Yes" | ||
] | ] | ||
urgent(choices) : "Urgent" : 0 : "If true, NPCs will consider movement to this assault point as Urgent Navigation." = | |||
[ | [ | ||
0 : "No" | 0 : "No" | ||
1 : "Yes" | 1 : "Yes" | ||
] | ] | ||
assaulttolerance(choices) : "Attack Tolerance" : 36 : "How far this NPC may move from the assault point to try to attack an enemy." = | |||
[ | |||
36 : "Tight (3ft)" | |||
72 : "Medium (6ft)" | |||
120 : "Large (10ft)" | |||
] | |||
// Inputs | // Inputs | ||
input | input SetClearOnContact(integer) : "Set the clear on contact flag. NPCs who spot enemies while running to the assault point, or while waiting at it, will immediately Clear it." | ||
input | input SetAllowDiversion(integer) : "Set the allow diversion flag. NPCs who spot enemies whil running to the assault point, or while waiting on it, will divert away (leave Assault mode) to deal with the enemies. Upon losing enemies, they'll go back to Assault mode, and return to this assault point." | ||
input SetForceClear(integer) : "Set the Force Clear flag. NPCs who are currently running to the assault point will Clear it immediately. NPCs who acquire it in the future will Clear it automatically." | |||
// Outputs | // Outputs | ||
output | output OnArrival(void) : "Fires when the NPC reaches this assault point" | ||
output | output OnAssaultClear(void) : "Fires when this assault point is cleared of enemies" | ||
] | ] | ||
@PointClass base(BaseScripted, Angles, DXLevelChoice) studio("models/editor/scriptedsequence.mdl") sphere(m_flRadius) = scripted_sequence : | @PointClass base(Targetname) = ai_goal_assault : | ||
"Grabs an NPC and makes them play a specified set of animations. The NPC can be told to move to the scripted sequence position or can "+ | "AI Goal Assault" | ||
"be told to play the script wherever they currently are. "+ | [ | ||
"Multiple scripted sequences of the same name will frame-synchronize in the action animation once all the actors have moved to position. "+ | actor(target_name_or_class) : "Actor(s) to affect" : "" : "NPC's that should perform this assault" | ||
"This allows tight interaction between actors (one actor grabbing another, hitting them, etc.) The flow is as follows:\n\n"+ | rallypoint(target_destination) : "Rally Point Set" : "" : "Root name of rally points for this assault. Use an asterisk '*' after the root name to match all with the same root." | ||
"1) Move to position using the specified movement animation. If 'Move to Position' is set to NONE, skip to step 2.\n"+ | |||
"2) If forced to wait for another actor to move to position, play the pre-action idle animation, otherwise skip to step 3. If there is no pre-action idle specified, ACT_IDLE is used.\n"+ | SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | ||
"3) Fire the OnBeginSequence output.\n"+ | [ | ||
"4) Play the action animation. If no action animation is specified, skip to step 5.\n"+ | 0 : "Entity Name" | ||
"5) Play the post-action idle animation. If none is specified, skip to step 6. If the 'Loop in Post Idle' spawnflag is set, keep playing the post-action idle until the script is | 1 : "Classname" | ||
"6) Fire the OnEndSequence output.\n"+ | ] | ||
"7) If a next script to play is specified, hand the NPC to the next script and repeat this process for that script.\n\n"+ | |||
"The MoveToPosition input runs steps 1 and 2, then waits while playing the pre-action idle animation until the BeginSequence input is received." | StartActive(choices) : "Start Active" : 0 = | ||
[ | [ | ||
spawnflags(Flags) = | 0 : "No" | ||
1 : "Yes" | |||
] | |||
AssaultCue(choices) : "Assault Cue" : 1 = | |||
[ | |||
1 : "Entity System Input" | |||
2 : "Gunfire" | |||
3 : "Don't wait for a cue." | |||
] | |||
RallySelectMethod(choices) : "Rally Point Selection Method" : 0 = | |||
[ | |||
0 : "Priority, Distance (default)" | |||
1 : "Random" | |||
] | |||
// Inputs | |||
input Activate( void ) : "Begin the assault behavior" | |||
input Deactivate( void ) : "Cease the assault behavior" | |||
input BeginAssault( void ) : "Begin assault phase" | |||
] | |||
@BaseClass base(Targetname) = BaseActBusy | |||
[ | |||
actor(target_name_or_class) : "Actor(s) to affect" : "" : "NPC's that should act busy" | |||
StartActive(choices) : "Start Active" : 0 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
SearchType(choices) : "Search Type" : 0 : "How to search for the entities using the targetname." = | |||
[ | |||
0 : "Entity Name" | |||
1 : "Classname" | |||
] | |||
busysearchrange(float) : "Search Range for Busy Hints" : 2048 | |||
visibleonly(choices) : "Visible Busy Hints Only" : 0 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
// 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: <Targetname> <hint node targetname> <optional:teleport> <optional:$customactivityorsequence> <maximum time to actbusy>. 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." | |||
// 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." | |||
] | |||
@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." | |||
sightmethod(choices) : "Sight Enemy Method" : 0 : "The method to use to determine whether the Sight enemy is visible." = | |||
[ | |||
0 : "Default. LOS -and- Viewcone" | |||
1 : "LOS Only. Disregard Viewcone" | |||
] | |||
type(choices) : "Actbusy Type" : 0 = | |||
[ | |||
0 : "Default (Standard)" | |||
1 : "Combat" | |||
] | |||
safezone(target_destination) : "Combat Safe Zone" : "" : "Only for combat actbusy. Lets you specify a volume which is the 'safe zone'. The Combat ActBusy will cancel if any enemies are seen in the safe zone." | |||
allowteleport(choices) : "Allow actor to teleport?" : 0 = | |||
[ | |||
0 : "No" | |||
1 : "Yes (Only for Combat Actbusy)" | |||
] | |||
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." | |||
] | |||
@PointClass base(BaseActBusy) = ai_goal_actbusy_queue : "AI Goal Act Busy Queue" | |||
[ | |||
node_exit(target_destination) : "Exit Node" : "" : "The name of the node the first NPC in the queue should move to when he leaves the head of the queue." | |||
node01(target_destination) : "Node 1" : "" : "The name of the first actbusy hint node in the queue." | |||
node02(target_destination) : "Node 2" : "" : "The name of the second actbusy hint node in the queue." | |||
node03(target_destination) : "Node 3" : "" : "The name of the third actbusy hint node in the queue." | |||
node04(target_destination) : "Node 4" : "" : "The name of the fourth actbusy hint node in the queue." | |||
node05(target_destination) : "Node 5" : "" : "The name of the fifth actbusy hint node in the queue." | |||
node06(target_destination) : "Node 6" : "" : "The name of the sixth actbusy hint node in the queue." | |||
node07(target_destination) : "Node 7" : "" : "The name of the seventh actbusy hint node in the queue." | |||
node08(target_destination) : "Node 8" : "" : "The name of the eighth actbusy hint node in the queue." | |||
node09(target_destination) : "Node 9" : "" : "The name of the ninth actbusy hint node in the queue." | |||
node10(target_destination) : "Node 10" : "" : "The name of the tenth actbusy hint node in the queue." | |||
node11(target_destination) : "Node 11" : "" : "The name of the eleventh actbusy hint node in the queue." | |||
node12(target_destination) : "Node 12" : "" : "The name of the twelfth actbusy hint node in the queue." | |||
node13(target_destination) : "Node 13" : "" : "The name of the thirteenth actbusy hint node in the queue." | |||
node14(target_destination) : "Node 14" : "" : "The name of the fourteenth actbusy hint node in the queue." | |||
node15(target_destination) : "Node 15" : "" : "The name of the fifteenth actbusy hint node in the queue." | |||
node16(target_destination) : "Node 16" : "" : "The name of the sixteenth actbusy hint node in the queue." | |||
node17(target_destination) : "Node 17" : "" : "The name of the seventeenth actbusy hint node in the queue." | |||
node18(target_destination) : "Node 18" : "" : "The name of the eighteenth actbusy hint node in the queue." | |||
node19(target_destination) : "Node 19" : "" : "The name of the nineteenth actbusy hint node in the queue." | |||
node20(target_destination) : "Node 20" : "" : "The name of the twentieth actbusy hint node in the queue." | |||
mustreachfront(choices) : "Must Reach Front" : 0 : "If true, NPCs much reach the front node in the queue before they're allowed to leave the queue." = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
// Inputs | |||
input PlayerStartedBlocking(float) : "Tell the queue manager that the player has started blocking a spot in the queue." | |||
input PlayerStoppedBlocking(float) : "Tell the queue manager that the player has stopped blocking a spot in the queue." | |||
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." | |||
] | |||
@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" | |||
// Inputs | |||
input Kill( void ) : "Removes this entity from the world" | |||
input Activate( void ) : "Changes the entities target" | |||
] | |||
@PointClass base(Targetname) size(-8 -8 -8, 8 8 8) = ai_npc_eventresponsesystem : "An entity that allows you to generate events for nearby friendly NPCs to respond to." | |||
[ | |||
input TriggerResponseEvent(string) : "Fire an NPC Response Event. The parameter should match the response rules concept that any nearby friendly NPCs will try to speak." | |||
input ForceTriggerResponseEvent(string) : "Fire an NPC Response Event, and force the first available NPC to speak the response (breaking them out of any scene they're in). The parameter should match the response rules concept that any nearby friendly NPCs will try to speak." | |||
input ForceTriggerResponseEventNoCancel(string) : "Fire an NPC Response Event, and force the first available NPC to speak the response (but don't break them out of any scene they're in). The parameter should match the response rules concept that any nearby friendly NPCs will try to speak." | |||
] | |||
@PointClass base(Targetname) sphere(Radius) size(-8 -8 -8, 8 8 8) = ai_changehintgroup : "Change Hint Group" | |||
[ | |||
SearchType(choices) : "Search Type" : 0 : "How to search for the entities to change." = | |||
[ | |||
0 : "Entity Name" | |||
1 : "Classname" | |||
2 : "Old Hint Group" | |||
] | |||
SearchName(string) : "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." = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
input Kill( void ) : "Removes this entity from the world" | |||
input Activate( void ) : "Change the Hint Group" | |||
] | |||
@PointClass base(Targetname) = ai_script_conditions : "AI Script Conditions" | |||
[ | |||
Actor(target_destination) : "Actor" : : "NPC Target" | |||
StartDisabled(choices) : "Start Disabled" : 1 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
MinimumState(choices) : "Minimum state" : 1 = | |||
[ | |||
1 : "Idle" | |||
2 : "Alert" | |||
3 : "Combat" | |||
] | |||
MaximumState(choices) : "Maximum state" : 3 = | |||
[ | |||
1 : "Idle" | |||
2 : "Alert" | |||
3 : "Combat" | |||
] | |||
ScriptStatus(choices) : "Actor is running a script?" : 2 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
RequiredTime(float) : "Required Time" : 0 : "Duration of time that all the conditions must be true" | |||
MinTimeout(float) : "Minimum time out" : 0 : "Minimum time before OnConditionsTimeout is fired. 0 = never expire." | |||
MaxTimeout(float) : "Maximum time out" : 0 : "Maximum time before OnConditionsTimeout is fired. 0 = ignore (If you don't specify a Maximum timeout, conditions will time out at exactly Minimum Time Out. If you DO specify a Maximum time out, timeout will occur randomly between Minimum and Maximum time out values.)" | |||
ActorSeePlayer(choices) : "Actor Sees Player" : 2 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
PlayerActorProximity(float) : "Player distance" : 0 : "The distance the player must/must not be to the actor. Negative values for NOT, 0 for ignore." | |||
PlayerActorFOV(float) : "Player FOV for Actor " : 360 : "Specify angle of view cone in degrees. Negative value = NOT" | |||
PlayerActorFOVTrueCone(choices ) : "Play FOV to Actor is a true view cone" : 0 : "Player's view cone is evaluated as a true cone, not pie slice " = | |||
[ | |||
0 : "No - Tall pie slice" | |||
1 : "Yes - True view cone" | |||
] | |||
PlayerActorLOS(choices) : "Player has LOS to Actor" : 2 : "Checks that the player has clear Line of Sight to the Actor" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
target(target_destination) : "Target (Optional)" : : "Optional entity to include in conditions" | |||
ActorSeeTarget(choices) : "Actor Sees Target" : 2 = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
ActorTargetProximity(float) : "Target distance" : 0 : "The distance the actor must/must not be to the Target. Negative values for NOT, 0 for ignore." | |||
PlayerTargetProximity(float) : "Player distance from Target" : 0 : "The distance the player must/must not be to the Target. Negative values for NOT, 0 for ignore." | |||
PlayerTargetFOV(float) : "Player FOV for Target" : 360 : "Specify angle of view cone in degrees. Negative value = NOT" | |||
PlayerTargetFOVTrueCone(choices ) : "Play FOV to Target is a true view cone" : 0 : "Player's view cone is evaluated as a true cone, not pie slice " = | |||
[ | |||
0 : "No - Tall pie slice" | |||
1 : "Yes - True view cone" | |||
] | |||
PlayerTargetLOS(choices) : "Player has LOS to Target" : 2 : "Checks that the player has clear Line of Sight to the Target" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
PlayerBlockingActor(choices) : "Player blocking Actor" : 2 : "Checks that the player is blocking the Actor's path" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
ActorInPVS(choices) : "Actor in Player's PVS" : 2 : "Checks that the actor is in the player's PVS" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
ActorInVehicle(choices) : "Actor in a vehicle" : 2 : "Checks the actor's state in a vehicle" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
PlayerInVehicle(choices) : "Player in a vehicle" : 2 : "Checks the player's state in a vehicle" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
2 : "Don't care" | |||
] | |||
spawnflags(Flags) = | |||
[ | |||
1 : "Fire outputs with the Actor as Activator" : 0 | |||
] | |||
// Inputs | |||
input Enable(void) : "Enable this entity" | |||
input Disable(void) : "Disable this entity" | |||
// Outputs | |||
output OnConditionsSatisfied(void) : "Fires when AI conditions satisfied" | |||
output OnConditionsTimeout(void) : "Fires when AI conditions timed out" | |||
output NoValidActor(void) : "Fires if/when there are no matching actors in the map." | |||
] | |||
@PointClass base(BaseScripted, Angles, DXLevelChoice) studio("models/editor/scriptedsequence.mdl") sphere(m_flRadius) = scripted_sequence : | |||
"Grabs an NPC and makes them play a specified set of animations. The NPC can be told to move to the scripted sequence position or can "+ | |||
"be told to play the script wherever they currently are. "+ | |||
"Multiple scripted sequences of the same name will frame-synchronize in the action animation once all the actors have moved to position. "+ | |||
"This allows tight interaction between actors (one actor grabbing another, hitting them, etc.) The flow is as follows:\n\n"+ | |||
"1) Move to position using the specified movement animation. If 'Move to Position' is set to NONE, skip to step 2.\n"+ | |||
"2) If forced to wait for another actor to move to position, play the pre-action idle animation, otherwise skip to step 3. If there is no pre-action idle specified, ACT_IDLE is used.\n"+ | |||
"3) Fire the OnBeginSequence output.\n"+ | |||
"4) Play the action animation. If no action animation is specified, skip to step 5.\n"+ | |||
"5) Play the post-action idle animation. If none is specified, skip to step 6. If the 'Loop in Post Idle' spawnflag is set, keep playing the post-action idle until the script is cancelled. If no post-action idle animation is specified, ACT_IDLE is used.\n"+ | |||
"6) Fire the OnEndSequence output.\n"+ | |||
"7) If a next script to play is specified, hand the NPC to the next script and repeat this process for that script.\n\n"+ | |||
"The MoveToPosition input runs steps 1 and 2, then waits while playing the pre-action idle animation until the BeginSequence input is received.\n\n"+ | |||
"If the sequence has motion extraction in it, set the 'Don't Teleport NPC On End' spawnflag." | |||
[ | |||
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 | |||
] | |||
onplayerdeath(choices) : "On player death" : 0 : "What should this entity do if the player dies" = | |||
[ | |||
0 : "Do Nothing" | |||
1 : "Cancel Script and return to AI" | |||
] | |||
] | |||
@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" | |||
[ | |||
m_iszEntity(target_destination) : "Target NPC" : : "The name or classname of an NPC to use." | |||
m_flRadius(integer) : "Search Radius (0=everywhere)" : 0 : "Radius to search within for an NPC to use. 0 searches everywhere." | |||
graball(choices) : "All in radius" : 0: "Whether to grab all matching NPCs in the specified radius, instead of just one" = | |||
[ | |||
0 : "No" | |||
1 : "Yes" | |||
] | |||
spawnflags(Flags) = | |||
[ | |||
4 : "Repeatable" : 1 | |||
1024 : "Search Cyclically" : 0 | |||
2048 : "Don't Complain" : 0 | |||
] | |||
forcestate(choices) : "AI state to set" : 0 = | |||
[ | [ | ||
0 : "<None>" | |||
1 : "Set state to IDLE" | |||
2 : "Set state to ALERT" | |||
3 : "Set state to COMBAT" | |||
] | ] | ||
schedule(choices) : "Schedule to run" : 1 = | |||
[ | |||
schedule(choices) : "Schedule to run" : 1 = | |||
[ | |||
0 : "<None>" | 0 : "<None>" | ||
1 : "Walk to Goal Entity" | 1 : "Walk to Goal Entity" | ||
Line 1,030: | Line 1,490: | ||
] | ] | ||
interruptability(choices) : "Interruptability" : 0 = | |||
[ | [ | ||
0 : "General" | 0 : "General" | ||
Line 1,044: | Line 1,504: | ||
] | ] | ||
@PointClass base(Targetname) = ai_citizen_response_system : | |||
"If placed in the level, will manage citizens responses to player's actions." | |||
[ | |||
// Inputs | |||
input ResponseVitalNPC(void) : "Fire the VitalNPC Died response." | |||
] | |||
//------------------------------------------------------------------------- | //------------------------------------------------------------------------- | ||
// | // | ||
Line 1,311: | Line 1,777: | ||
@PointClass base(Item) studio("models/w_9mmclip.mdl") = ammo_9mmclip : "9mm Pistol Ammo" [] | @PointClass base(Item) studio("models/w_9mmclip.mdl") = ammo_9mmclip : "9mm Pistol Ammo" [] | ||
@PointClass base(Item) studio("models/w_9mmclip.mdl") = ammo_glockclip : "9mm Pistol Ammo" [] | |||
@PointClass base(Item) studio("models/w_9mmARclip.mdl")= ammo_9mmAR : "9mm Assault Rifle Ammo" [] | @PointClass base(Item) studio("models/w_9mmARclip.mdl")= ammo_9mmAR : "9mm Assault Rifle Ammo" [] | ||
@PointClass base(Item) studio("models/w_chainammo.mdl") = ammo_9mmbox : "box of 200 9mm shells" [] | @PointClass base(Item) studio("models/w_chainammo.mdl") = ammo_9mmbox : "box of 200 9mm shells" [] | ||
Line 1,320: | Line 1,787: | ||
@PointClass base(Item) studio("models/w_crossbow_clip.mdl") = ammo_crossbow : "Crossbow Ammo" [] | @PointClass base(Item) studio("models/w_crossbow_clip.mdl") = ammo_crossbow : "Crossbow Ammo" [] | ||
@PointClass base(Item) studio("models/w_battery.mdl") = item_battery : "HEV battery" [] | @PointClass base(Item) studio("models/w_battery.mdl") = item_battery : "HEV battery" [] | ||
@PointClass base(Item) studio("models/w_longjump.mdl") = item_longjump : "Long Jump Item" [] | |||
@PointClass base(Item) studio("models/w_medkit.mdl") = item_healthkit : "Health Kit" [] | @PointClass base(Item) studio("models/w_medkit.mdl") = item_healthkit : "Health Kit" [] | ||
@PointClass base(Item) studio("models/w_suit.mdl") = item_suit : "HEV Suit" | @PointClass base(Item) studio("models/can.mdl") = item_sodacan : "Soda Can" | ||
[ | |||
skin(choices) : "Beverage Type" : 0 = | |||
[ | |||
0 : "Coca-Cola" | |||
1 : "Sprite" | |||
2 : "Diet Coke" | |||
3 : "Orange" | |||
4 : "Surge" | |||
5 : "Moxie" | |||
] | |||
] | |||
@PointClass base(Targetname, Angles) size(-4 -4 -4, 4 4 4) = env_beverage : "Beverage Dispenser" | |||
[ | |||
health(integer) : "Capacity" : 10 | |||
skin(choices) : "Beverage Type" : 0 = | |||
[ | |||
0 : "Coca-Cola" | |||
1 : "Sprite" | |||
2 : "Diet Coke" | |||
3 : "Orange" | |||
4 : "Surge" | |||
5 : "Moxie" | |||
6 : "Random" | |||
] | |||
input Activate(void) : "Activate" | |||
] | |||
@PointClass base(Item) studio("models/w_suit.mdl") = item_suit : "HEV Suit" | |||
[ | [ | ||
spawnflags(Flags) = | spawnflags(Flags) = | ||
Line 1,363: | Line 1,858: | ||
@PointClass base(Weapon) studio("models/w_egon.mdl") = weapon_egon : "Egon Gun" [] | @PointClass base(Weapon) studio("models/w_egon.mdl") = weapon_egon : "Egon Gun" [] | ||
@PointClass base(Weapon) studio("models/w_tripmine.mdl") = weapon_tripmine : "Tripmine Ammo" [] | @PointClass base(Weapon) studio("models/w_tripmine.mdl") = weapon_tripmine : "Tripmine Ammo" [] | ||
@PointClass base(Targetname,RenderFields,Angles) studio("models/w_tripmine.mdl") = monster_tripmine : "Active Tripmine" | |||
[ | |||
spawnflags(Flags) = | |||
[ | |||
1 : "Instant On" : 1 | |||
] | |||
] | |||
@PointClass base(Weapon) studio("models/w_satchel.mdl") = weapon_satchel : "Satchel Charge Ammo" [] | @PointClass base(Weapon) studio("models/w_satchel.mdl") = weapon_satchel : "Satchel Charge Ammo" [] | ||
@PointClass base(Weapon) studio("models/w_grenade.mdl") = weapon_handgrenade : "Handgrenade Ammo" [] | @PointClass base(Weapon) studio("models/w_grenade.mdl") = weapon_handgrenade : "Handgrenade Ammo" [] | ||
@PointClass base(Weapon) studio("models/w_SQKNEST.mdl") = weapon_snark : "Squeak Grenade" [] | @PointClass base(Weapon) studio("models/w_SQKNEST.mdl") = weapon_snark : "Squeak Grenade" [] | ||
@PointClass base(Weapon) studio("models/w_hgun.mdl") = weapon_hornetgun : "Hornet Gun" [] | @PointClass base(Weapon) studio("models/w_hgun.mdl") = weapon_hornetgun : "Hornet Gun" [] | ||
@PointClass studio("models/ | @PointClass studio("models/w_weaponbox.mdl") = weaponbox : "Weapon/Ammo Container" [] | ||
@PointClass base(Weapon) = world_items : "World Items" | @PointClass base(Weapon) = world_items : "World Items" | ||
Line 1,548: | Line 2,050: | ||
2 : "Toggle" | 2 : "Toggle" | ||
] | ] | ||
output OnTrigger(void) | |||
] | ] | ||
Line 1,605: | Line 2,108: | ||
2: "USE Only" : 0 | 2: "USE Only" : 0 | ||
] | ] | ||
input ChangeLevel(void) : "Cause the level change. Use this when triggering the level change with a button, etc." | |||
output OnChangeLevel(void) : "Fired when the level changes." | |||
] | ] | ||
Line 1,611: | Line 2,116: | ||
m_iszNewTarget(string) : "New Target" | m_iszNewTarget(string) : "New Target" | ||
] | ] | ||
@SolidClass base(Trigger, Targetname) = trigger_counter : "Trigger counter" | |||
[ | [ | ||
spawnflags(flags) = | spawnflags(flags) = | ||
Line 1,647: | Line 2,152: | ||
2: "Toggle" | 2: "Toggle" | ||
] | ] | ||
input Trigger(void) : "Trigger the relay." | |||
output OnTrigger(void) : "Fired when the relay is triggered." | |||
] | ] | ||
@SolidClass base(Targetname) = trigger_transition : "Trigger: Select Transition Area" [] | @SolidClass base(Targetname) = trigger_transition : "Trigger: Select Transition Area" [] | ||
Line 1,925: | Line 2,432: | ||
@PointClass base(Targetname) = phys_constraintsystem : "Used to manage a group of interacting constraints and keep them stable." | @PointClass base(Targetname) = phys_constraintsystem : "Used to manage a group of interacting constraints and keep them stable." | ||
[ | [ | ||
]</ | ] | ||
</nowiki>}} | |||
[[Category:Level Design]] | |||
[[Category:Custom FGDs]] | |||
[[Category:Source 1 FGDs]] | |||
[[Category: Half-Life: Source]] | |||
[[Category: Half-Life Deathmatch: Source]] |
Latest revision as of 23:34, 17 September 2024

It has been suggested that this article or section be merged with Half-Life Source.fgd (2023). (Discuss)
Unofficial FGD for Half-Life: Source and
Half-Life Deathmatch: Source.
FGD
- This is a FGD (Forge Game Data) file used to define all of the entities of a game for a map editor (such as Hammer).
To add a FGD file to the map editor, copy the following text into a text editor such as Windows Notepad,Notepad++ or
Visual Studio Code, and save it with "save as type" being "all files" and .fgd appended to the file name. Then open your map editor and add the FGD to your game configuration (Example for HL:S).
