GS-EntBase: Initial documentation for info_hint.
This commit is contained in:
parent
6c895d73b7
commit
b275275652
|
@ -10,6 +10,8 @@ shared/NSVehicle.h
|
||||||
server/info_null.qc
|
server/info_null.qc
|
||||||
server/info_notnull.qc
|
server/info_notnull.qc
|
||||||
server/info_intermission.qc
|
server/info_intermission.qc
|
||||||
|
server/info_node.qc
|
||||||
|
server/info_hint.qc
|
||||||
server/button_target.qc
|
server/button_target.qc
|
||||||
server/cycler.qc
|
server/cycler.qc
|
||||||
server/cycler_sprite.qc
|
server/cycler_sprite.qc
|
||||||
|
|
|
@ -0,0 +1,252 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2022 Vera Visions LLC.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*QUAKED info_hint (0 0 0) (-8 -8 -8) (8 8 8) x x x x x x x x x x x x x x x x HINTSF_ALLOWJUMPUP
|
||||||
|
Helper entity for the AI routines. Defines where to go for
|
||||||
|
sensible defense/offensive or other hints.
|
||||||
|
|
||||||
|
-------- KEYS --------
|
||||||
|
"targetname" : Name
|
||||||
|
"hinttype" : Hint type, this controls this hints' purpose. See notes
|
||||||
|
"hintactivity" : Associated animation activity. Once an NPC goes to this node they'll play it
|
||||||
|
"nodeFOV" : Field of view of the node. You'll probably want to set a sensible angle too.
|
||||||
|
"StartHintDisabled" : Whether or not to 'hide' the hint on start, requiring activation to work.
|
||||||
|
"Group" : Hint group definition. Some NPCs are set up to only look for their specific group.
|
||||||
|
"IgnoreFacing" : Whether or not we need to ignore the angle (?), see notes.
|
||||||
|
"MinimumState" : The minimum AI state required to use this hint, see notes.
|
||||||
|
"MaximumState" : The maximum AI state allowed to use this hint, see notes.
|
||||||
|
|
||||||
|
-------- SPAWNFLAGS --------
|
||||||
|
HINTSF_ALLOWJUMPUP : Allow the AI to 'jump' up this node.
|
||||||
|
|
||||||
|
-------- NOTES --------
|
||||||
|
The 'hinttype' field can be one of these integer values:
|
||||||
|
|
||||||
|
HINT_NONE = 0
|
||||||
|
HINT_WORLD_WINDOW = 2
|
||||||
|
HINT_WORLD_WORK_POSITION = 12
|
||||||
|
HINT_WORLD_VISUALLY_INTERESTING = 13
|
||||||
|
HINT_WORLD_VISUALLY_INTERESTING_DONT_AIM = 14
|
||||||
|
HINT_WORLD_INHIBIT_COMBINE_MINES = 15
|
||||||
|
HINT_WORLD_VISUALLY_INTERESTING_STEALTH = 16
|
||||||
|
HINT_TACTICAL_COVER_MED = 100
|
||||||
|
HINT_TACTICAL_COVER_LOW = 101
|
||||||
|
HINT_TACTICAL_WASTESCANNER = 102
|
||||||
|
HINT_TACTICAL_PINCH = 103
|
||||||
|
HINT_TACTICAL_GUARD_POINT = 104
|
||||||
|
HINT_TACTICAL_ENEMY_DISADVANTAGED = 105
|
||||||
|
HINT_HEALTH_KIT = 106
|
||||||
|
HINT_ANTLION_BURROW_POINT = 400
|
||||||
|
HINT_ANTLION_THUMPER_FLEE_POINT = 401
|
||||||
|
HINT_HEADCRAB_BURROW_POINT = 450
|
||||||
|
HINT_CROW_FLYTO_POINT = 700
|
||||||
|
HINT_CROW_PERCH_POINT = 701
|
||||||
|
HINT_FOLLOW_WAIT_POINT = 900
|
||||||
|
HINT_JUMP_OVERRIDE = 901
|
||||||
|
HINT_PLAYER_SQUAD_TRANSITON_POINT = 902
|
||||||
|
HINT_NPC_EXIT_POINT = 903
|
||||||
|
HINT_STRIDER_NODE = 904
|
||||||
|
HINT_PLAYER_ALLY_MOVE_AWAY_DEST = 950
|
||||||
|
HINT_PLAYER_ALLY_FEAR_DEST = 951
|
||||||
|
HINT_WORLD_MACHINERY = 1000
|
||||||
|
HINT_WORLD_BLINKING_LIGHT = 1001
|
||||||
|
HINT_WORLD_HUMAN_BLOOD = 1002
|
||||||
|
HINT_WORLD_ALIEN_BLOOD = 1003
|
||||||
|
|
||||||
|
The 'IgnoreFacing' field can be one of 3 values:
|
||||||
|
|
||||||
|
IGNORE_NO = 0
|
||||||
|
IGNORE_YES = 1
|
||||||
|
IGNORE_DEFAULT = 2
|
||||||
|
|
||||||
|
The 'MinimumState' and 'MaximumState' field can be one of 3 values:
|
||||||
|
|
||||||
|
AISTATE_IDLE = 0
|
||||||
|
AISTATE_ALERT = 1
|
||||||
|
AISTATE_COMBAT = 2
|
||||||
|
|
||||||
|
-------- TRIVIA --------
|
||||||
|
This entity was introduced in Half-Life 2 (2004).
|
||||||
|
|
||||||
|
Some functionality of this entity was meant to be part of `info_node` in the original Half-Life (1998).
|
||||||
|
However, that was never completed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* hint types taken from https://developer.valvesoftware.com/wiki/Hint_nodes#Hint */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HINT_NONE = 0,
|
||||||
|
HINT_WORLD_WINDOW = 2,
|
||||||
|
HINT_WORLD_WORK_POSITION = 12,
|
||||||
|
HINT_WORLD_VISUALLY_INTERESTING = 13,
|
||||||
|
HINT_WORLD_VISUALLY_INTERESTING_DONT_AIM = 14,
|
||||||
|
HINT_WORLD_INHIBIT_COMBINE_MINES = 15,
|
||||||
|
HINT_WORLD_VISUALLY_INTERESTING_STEALTH = 16,
|
||||||
|
HINT_TACTICAL_COVER_MED = 100,
|
||||||
|
HINT_TACTICAL_COVER_LOW = 101,
|
||||||
|
HINT_TACTICAL_WASTESCANNER = 102,
|
||||||
|
HINT_TACTICAL_PINCH = 103,
|
||||||
|
HINT_TACTICAL_GUARD_POINT = 104,
|
||||||
|
HINT_TACTICAL_ENEMY_DISADVANTAGED = 105,
|
||||||
|
HINT_HEALTH_KIT = 106,
|
||||||
|
HINT_ANTLION_BURROW_POINT = 400,
|
||||||
|
HINT_ANTLION_THUMPER_FLEE_POINT = 401,
|
||||||
|
HINT_HEADCRAB_BURROW_POINT = 450,
|
||||||
|
HINT_CROW_FLYTO_POINT = 700,
|
||||||
|
HINT_CROW_PERCH_POINT = 701,
|
||||||
|
HINT_FOLLOW_WAIT_POINT = 900,
|
||||||
|
HINT_JUMP_OVERRIDE = 901,
|
||||||
|
HINT_PLAYER_SQUAD_TRANSITON_POINT = 902,
|
||||||
|
HINT_NPC_EXIT_POINT = 903,
|
||||||
|
HINT_STRIDER_NODE = 904,
|
||||||
|
HINT_PLAYER_ALLY_MOVE_AWAY_DEST = 950,
|
||||||
|
HINT_PLAYER_ALLY_FEAR_DEST = 951,
|
||||||
|
HINT_WORLD_MACHINERY = 1000,
|
||||||
|
HINT_WORLD_BLINKING_LIGHT = 1001,
|
||||||
|
HINT_WORLD_HUMAN_BLOOD = 1002,
|
||||||
|
HINT_WORLD_ALIEN_BLOOD = 1003,
|
||||||
|
} hinttype_e;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
IGNORE_NO,
|
||||||
|
IGNORE_YES,
|
||||||
|
IGNORE_DEFAULT
|
||||||
|
} ignorefacing_e;
|
||||||
|
|
||||||
|
/* TODO: Make this match NSMonster more */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
AISTATE_IDLE,
|
||||||
|
AISTATE_ALERT,
|
||||||
|
AISTATE_COMBAT
|
||||||
|
} aistate_e;
|
||||||
|
|
||||||
|
#define HINTSF_ALLOWJUMPUP 65536
|
||||||
|
|
||||||
|
class
|
||||||
|
info_hint:NSPointTrigger
|
||||||
|
{
|
||||||
|
hinttype_e m_hintType;
|
||||||
|
string m_strHintActivity;
|
||||||
|
float m_flNodeFOV;
|
||||||
|
bool m_bStartDisabled;
|
||||||
|
string m_strHintGroup;
|
||||||
|
ignorefacing_e m_ignoreFacing;
|
||||||
|
aistate_e m_minState;
|
||||||
|
aistate_e m_maxState;
|
||||||
|
|
||||||
|
void(void) info_hint;
|
||||||
|
|
||||||
|
/* overrides */
|
||||||
|
virtual void(float) Save;
|
||||||
|
virtual void(string,string) Restore;
|
||||||
|
virtual void(string, string) SpawnKey;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
info_hint::Save(float handle)
|
||||||
|
{
|
||||||
|
SaveFloat(handle, "m_hintType", m_hintType);
|
||||||
|
SaveString(handle, "m_strHintActivity", m_strHintActivity);
|
||||||
|
SaveFloat(handle, "m_flNodeFOV", m_flNodeFOV);
|
||||||
|
SaveBool(handle, "m_bStartDisabled", m_bStartDisabled);
|
||||||
|
SaveString(handle, "m_strHintGroup", m_strHintGroup);
|
||||||
|
SaveFloat(handle, "m_ignoreFacing", m_ignoreFacing);
|
||||||
|
SaveFloat(handle, "m_minState", m_minState);
|
||||||
|
SaveFloat(handle, "m_maxState", m_maxState);
|
||||||
|
super::Save(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
info_hint::Restore(string strKey, string strValue)
|
||||||
|
{
|
||||||
|
switch (strKey) {
|
||||||
|
case "m_hintType":
|
||||||
|
m_hintType = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
|
case "m_strHintActivity":
|
||||||
|
m_strHintActivity = ReadString(strValue);
|
||||||
|
break;
|
||||||
|
case "m_flNodeFOV":
|
||||||
|
m_flNodeFOV = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
|
case "m_bStartDisabled":
|
||||||
|
m_bStartDisabled = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
|
case "m_strHintGroup":
|
||||||
|
m_strHintGroup = ReadString(strValue);
|
||||||
|
break;
|
||||||
|
case "m_ignoreFacing":
|
||||||
|
m_ignoreFacing = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
|
case "m_minState":
|
||||||
|
m_minState = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
|
case "m_maxState":
|
||||||
|
m_maxState = ReadFloat(strValue);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super::Restore(strKey, strValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
info_hint::SpawnKey(string strKey, string strValue)
|
||||||
|
{
|
||||||
|
switch (strKey) {
|
||||||
|
case "hinttype":
|
||||||
|
m_hintType = stof(strValue);
|
||||||
|
break;
|
||||||
|
case "hintactivity":
|
||||||
|
m_strHintActivity = strValue;
|
||||||
|
break;
|
||||||
|
case "nodeFOV":
|
||||||
|
m_flNodeFOV = stof(strValue);
|
||||||
|
break;
|
||||||
|
case "StartHintDisabled":
|
||||||
|
m_bStartDisabled = stof(strValue) == 1 ? true : false;
|
||||||
|
break;
|
||||||
|
case "Group":
|
||||||
|
m_strHintGroup = strValue;
|
||||||
|
break;
|
||||||
|
case "IgnoreFacing":
|
||||||
|
m_ignoreFacing = stof(strValue);
|
||||||
|
break;
|
||||||
|
case "MinimumState":
|
||||||
|
m_minState = stof(strValue);
|
||||||
|
break;
|
||||||
|
case "MaximumState":
|
||||||
|
m_maxState = stof(strValue);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
super::SpawnKey(strKey, strValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
info_hint::info_hint(void)
|
||||||
|
{
|
||||||
|
m_hintType = HINT_NONE;
|
||||||
|
m_strHintActivity = __NULL__;
|
||||||
|
m_flNodeFOV = 360;
|
||||||
|
m_bStartDisabled = false;
|
||||||
|
m_strHintGroup = __NULL__;
|
||||||
|
m_ignoreFacing = IGNORE_DEFAULT;
|
||||||
|
m_minState = AISTATE_IDLE;
|
||||||
|
m_maxState = AISTATE_COMBAT;
|
||||||
|
};
|
|
@ -22,4 +22,6 @@ It's a node, helping monsters navigate on the ground.
|
||||||
|
|
||||||
-------- TRIVIA --------
|
-------- TRIVIA --------
|
||||||
This entity was introduced in Half-Life (1998).
|
This entity was introduced in Half-Life (1998).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
CLASSEXPORT(info_node, info_notnull)
|
|
@ -74,7 +74,6 @@ of the entity, keep that in mind.
|
||||||
This entity was introduced in Quake (1996).
|
This entity was introduced in Quake (1996).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CLASSEXPORT(info_node, info_notnull)
|
|
||||||
CLASSEXPORT(info_target, info_notnull)
|
CLASSEXPORT(info_target, info_notnull)
|
||||||
CLASSEXPORT(env_sound, info_notnull)
|
CLASSEXPORT(env_sound, info_notnull)
|
||||||
CLASSEXPORT(env_sun, info_notnull)
|
CLASSEXPORT(env_sun, info_notnull)
|
||||||
|
|
Loading…
Reference in New Issue