ef2gamesource/dlls/game/actorincludes.h
2015-04-29 22:34:44 +02:00

556 lines
14 KiB
C

//-----------------------------------------------------------------------------
//
// $Logfile:: /Code/DLLs/game/actorincludes.h $
// $Revision:: 84 $
// $Author:: Steven $
// $Date:: 10/13/03 8:53a $
//
// Copyright (C) 2001 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
//
//
// DESCRIPTION:
// Centralized repository for externs, defines, enums, and structs that are required
// by actor and all of actor's helper classes, like sensoryPerception, thinkStrategy, etc...
//
#ifndef __ACTORINCLUDES_H__
#define __ACTORINCLUDES_H__
//=========================================
// External Events
//=========================================
extern Event EV_Actor_Start;
extern Event EV_Actor_Dead;
extern Event EV_Actor_LookAt;
extern Event EV_Actor_TurnTo;
extern Event EV_Actor_BehaviorFinished;
extern Event EV_Actor_ControlLost;
extern Event EV_Actor_EndBehavior;
extern Event EV_Actor_EndHeadBehavior;
extern Event EV_Actor_EndEyeBehavior;
extern Event EV_Actor_NotifyBehavior;
extern Event EV_Actor_NotifyTorsoBehavior;
extern Event EV_Actor_NotifyHeadBehavior;
extern Event EV_Actor_NotifyEyeBehavior;
extern Event EV_Actor_FinishedMove;
extern Event EV_Actor_FinishedAnim;
extern Event EV_Actor_WalkTo;
extern Event EV_Actor_FallToDeath;
extern Event EV_Actor_RunTo;
extern Event EV_Actor_Anim;
extern Event EV_Actor_AttackFinished;
extern Event EV_Actor_Attack;
extern Event EV_Actor_AttackPlayer;
extern Event EV_Actor_AIOn;
extern Event EV_Actor_AIOff;
extern Event EV_Actor_AIDeaf;
extern Event EV_Actor_AIDumb;
extern Event EV_Actor_RespondTo;
extern Event EV_Actor_PermanentlyRespondTo;
extern Event EV_ActorIncomingProjectile;
extern Event EV_Anim_Done;
extern Event EV_ActorOnlyShootable;
extern Event EV_Actor_BounceOff;
extern Event EV_Actor_Push;
extern Event EV_Actor_Statemap;
extern Event EV_Actor_SetTargetable;
extern Event EV_Sentient_StopFire;
extern Event EV_Sentient_Attack;
extern Event EV_Actor_SetUseGravity;
extern Event EV_Actor_SetSimplifiedThink;
extern Event EV_Actor_SetStickToGround;
extern Event EV_Actor_SetMovementMode;
//========================================
// General Defines
//========================================
static const uint8_t MAX_ALIAS_NAME_LENGTH = 32;
static const float MAX_INACTIVE_TIME = 30.0f;
static const uint8_t DEFAULT_FOV = 150;
static const uint16_t DEFAULT_VISION_DISTANCE = 1536;
static const uint8_t MIN_SIGHT_DELAY = 2;
static const float RANDOM_SIGHT_DELAY = 1.5f;
static const uint8_t DEFAULT_INITIAL_HATE = 100;
static const float TURN_SPEED = 60.0f; //Used to be 25
static const float HELPER_NODE_MAX_DISTANCE = 96.0f;
static const float HELPER_NODE_ARRIVAL_DISTANCE = 24.0f;
static const float HACK_PATH_CHECK = 1.0f;
//========================================
// Stimuli types
//========================================
enum EStimuli
{
StimuliAll = -1,
StimuliNone,
StimuliSight = 1 << 0,
StimuliSound = 1 << 1,
StimuliPain = 1 << 2,
StimuliScript = 1 << 3
};
//========================================
// Bones used by actor
//========================================
enum EActorBoneTag
{
ActorMouthTag = 0,
ActorHeadTag = 1,
ActorTorsoTag = 2,
ActorLeyeTag = 3,
ActorReyeTag = 4
};
//========================================
// Dialog stuff
//========================================
static const uint8_t MAX_DIALOG_PARAMETERS_LENGTH = 100;
static const uint8_t MAX_DIALOG_PARM_LENGTH = 64;
static const uint8_t MAX_DIALOG_PARMS = 10;
static const uint8_t DIALOG_PARM_TYPE_NONE = 0;
static const uint8_t DIALOG_PARM_TYPE_PLAYERHAS = 1;
static const uint8_t DIALOG_PARM_TYPE_PLAYERHASNOT = 2;
static const uint8_t DIALOG_PARM_TYPE_HAS = 3;
static const uint8_t DIALOG_PARM_TYPE_HASNOT = 4;
static const uint8_t DIALOG_PARM_TYPE_DEPENDS = 5;
static const uint8_t DIALOG_PARM_TYPE_DEPENDSNOT = 6;
static const uint8_t DIALOG_PARM_TYPE_DEPENDSINT = 7;
static const uint8_t DIALOG_PARM_TYPE_CONTEXT_INITIATOR = 8;
static const uint8_t DIALOG_PARM_TYPE_CONTEXT_RESPONSE = 9;
//========================================
// State flags
//========================================
enum EStateFlag
{
StateFlagInPain = 1 << 0,
StateFlagMeleeHit = 1 << 1,
StateFlagTouched = 1 << 2,
StateFlagActivated = 1 << 3,
StateFlagUsed = 1 << 4,
StateFlagTwitch = 1 << 5,
StateFlagBlockedHit = 1 << 6,
StateFlagSmallPain = 1 << 7,
StateFlagOtherDied = 1 << 8,
StateFlagStuck = 1 << 9,
StateFlagNoPath = 1 << 10,
StateFlagTouchedByPlayer = 1 << 11,
StateFlagChangedWeapon = 1 << 12,
StateFlagDamageThresholdExceeded = 1 << 13,
StateFlagAttacked = 1 << 14,
StateFlagAttackedByPlayer = 1 << 15,
StateFlagShowPain = 1 << 16,
StateFlagInTheWay = 1 << 17,
StateFlagSteeringFailed = 1 << 18,
StateFlagBlockedByEntity = 1 << 19,
StateFlagEnemyProjectileClose = 1 << 20
};
//========================================
// Combat Subsystem Defines
//========================================
static const float DEFAULT_TRACE_INTERVAL = .05f;
static const float DEFAULT_PATH_TO_ENEMY_INTERVAL = .05f;
//========================================
// Actor modes
//========================================
enum EActorMode
{
ActorModeNone,
ActorModeIdle,
ActorModeAi,
ActorModeScript,
ActorModeTalk
};
//=======================================
// Pain types
//=======================================
enum EPainType
{
PainSmall,
PainBig
};
//========================================
// Save Flags
//========================================
#define SAVE_FLAG_NEW_ANIM (1<<0)
#define SAVE_FLAG_FORWARD_SPEED (1<<1)
#define SAVE_FLAG_BEHAVIOR (1<<2)
#define SAVE_FLAG_PATH (1<<3)
#define SAVE_FLAG_NOISE (1<<4)
#define SAVE_FLAG_SCRIPT_THREAD (1<<5)
#define SAVE_FLAG_ACTOR_THREAD (1<<6)
#define SAVE_FLAG_KILL_THREAD (1<<7)
#define SAVE_FLAG_STATE (1<<8)
#define SAVE_FLAG_IDLE_THREAD (1<<7)
#define SAVE_FLAG_PARTS (1<<10)
#define SAVE_FLAG_TRIGGER (1<<11)
#define SAVE_FLAG_STATE_FLAGS (1<<12)
#define SAVE_FLAG_COMMAND (1<<13)
#define SAVE_FLAG_STAGE (1<<14)
#define SAVE_FLAG_NUM_OF_SPAWNS (1<<15)
#define SAVE_FLAG_SPAWN_PARENT (1<<16)
#define SAVE_FLAG_DIALOG (1<<17)
#define SAVE_FLAG_SAVED_STUFF (1<<18)
#define SAVE_FLAG_LAST_ANIM_EVENT (1<<19)
#define SAVE_FLAG_PICKUP_ENT (1<<20)
#define SAVE_FLAG_PAIN (1<<21)
#define SAVE_FLAG_SPAWN_ITEMS (1<<22)
//=======================================
// Rage AI System
//=======================================
#define DEFAULT_EVALUATE_INTERVAL .05f // Was 10.0f
#define DEFAULT_SIGHT_BASED_HATE 5.0f
//=======================================
// Structures
//=======================================
//DialogParm_t -- Structure for Dialog Parameters
typedef struct
{
byte type;
char parm[MAX_DIALOG_PARM_LENGTH];
char parm2[MAX_DIALOG_PARM_LENGTH];
} DialogParm_t;
typedef enum
{
DIALOG_TYPE_NORMAL,
DIALOG_TYPE_RADIUS,
DIALOG_TYPE_GREETING,
DIALOG_TYPE_COMBAT,
DIALOG_TYPE_CONTEXT_INITIATOR,
DIALOG_TYPE_CONTEXT_RESPONSE
} DialogType_t;
//DialogNode_t -- Structure for Dialog Nodes
typedef struct DialogNode_s
{
char alias_name[MAX_ALIAS_NAME_LENGTH];
int random_flag;
int number_of_parms;
float random_percent;
DialogType_t dType;
DialogParm_t parms[MAX_DIALOG_PARMS];
struct DialogNode_s *next;
} DialogNode_t;
typedef struct
{
int entNum;
float time;
qboolean inLineOfSight;
} LineOfSight_t;
//HateListEntry_t -- Structure for the hate list
typedef struct
{
// Information that will need to be persistant, or accesses
// frequently should be placed in this structure
EntityPtr enemy; //Pointer to the entity
float lastSightTime; //Last time I tried to see this entity
float nextSightTime; //Next time I try and see this entity
qboolean canSee; //Can I see the enemy ( based on last time I tried )
float damageCaused; //total damage that entity has done to me
float hate; //how much hate I have for this entiy
float lastDistance;
} HateListEntry_t;
typedef struct
{
str packageName;
str stateFile;
} BehaviorPackageType_t;
// Helper Node Data
typedef struct
{
HelperNodePtr node;
int mask;
int nodeID;
} CurrentHelperNodeData_t;
typedef struct
{
HelperNodePtr node;
int mask;
int nodeID;
} IgnoreHelperNodeData_t;
// Follow Target Data
typedef struct
{
EntityPtr currentFollowTarget;
EntityPtr specifiedFollowTarget;
float maxRangeIdle;
float minRangeIdle;
float maxRangeCombat;
float minRangeCombat;
} FollowTargetData_t;
typedef struct
{
int packageIndex;
float currentScore;
float lastScore;
float lastTimeExecuted;
float priority;
} BehaviorPackageEntry_t;
typedef struct
{
int packageIndex;
float tendency;
float lastTendencyCheck;
} PackageTendency_t;
// We need to modify PackageTendency_t to do
// what struct is going to do, however, I'm 2 days from a
// milestone, so I'm not changing anything right now
typedef struct
{
str tendencyName;
float tendencyValue;
} Tendency_t;
// StateVar -- Structure for holding StateVars
typedef struct
{
str varName;
str varValue;
float varTime;
} StateVar;
// part_t -- Part stuff
typedef struct
{
EntityPtr ent;
unsigned int state_flags;
} part_t;
// threadlist_t -- A Key/Value pair for all the custom threading stuff we're doing
// we will eventually need to convert all those errant actor threads into this.
typedef struct
{
str threadType;
str threadName;
} threadlist_t;
//===========================================
// Enumerations
//===========================================
typedef enum
{
MOVEMENT_TYPE_NORMAL,
MOVEMENT_TYPE_ANIM
} MovementType_t;
//DialogMode_t -- Enumeration of Dialog Modes
typedef enum
{
DIALOG_MODE_ANXIOUS,
DIALOG_MODE_NORMAL,
DIALOG_MODE_IGNORE
} DialogMode_t;
// actortype_t -- Enumeration of possible actor types
typedef enum
{
IS_INANIMATE,
IS_MONSTER,
IS_ENEMY,
IS_CIVILIAN,
IS_FRIEND,
IS_ANIMAL,
IS_TEAMMATE,
NUM_ACTORTYPES
} actortype_t;
// targetType_t -- Enumeration of possible target types
typedef enum
{
ATTACK_ANY,
ATTACK_PLAYER_ONLY,
ATTACK_ACTORS_ONLY,
ATTACK_SCRIPTED_ONLY,
ATTACK_LEVEL_INTERACTION
} targetType_t;
typedef enum
{
DEBUG_NONE,
DEBUG_STATES_ONLY,
DEBUG_STATES_BEHAVIORS,
DEBUG_ALL,
MAX_DEBUG_TYPES
} stateDebugType_t;
typedef enum
{
TALK_TURNTO,
TALK_HEADWATCH,
TALK_IGNORE
} talkModeStates_t;
// actorflags -- Enumeration of Actor flags
typedef enum
{
ACTOR_FLAG_NOISE_HEARD,
ACTOR_FLAG_INVESTIGATING,
ACTOR_FLAG_DEATHGIB,
ACTOR_FLAG_DEATHFADE,
ACTOR_FLAG_NOCHATTER,
ACTOR_FLAG_INACTIVE,
ACTOR_FLAG_ANIM_DONE,
ACTOR_FLAG_STATE_DONE_TIME_VALID,
ACTOR_FLAG_MASTER_STATE_DONE_TIME_VALID,
ACTOR_FLAG_AI_ON,
ACTOR_FLAG_LAST_CANSEEENEMY,
ACTOR_FLAG_LAST_CANSEEENEMY_NOFOV,
ACTOR_FLAG_DIALOG_PLAYING,
ACTOR_FLAG_RADIUS_DIALOG_PLAYING,
ACTOR_FLAG_ALLOW_TALK,
ACTOR_FLAG_DAMAGE_ONCE_ON,
ACTOR_FLAG_DAMAGE_ONCE_DAMAGED,
ACTOR_FLAG_BOUNCE_OFF,
ACTOR_FLAG_NOTIFY_OTHERS_AT_DEATH,
ACTOR_FLAG_HAS_THING1,
ACTOR_FLAG_HAS_THING2,
ACTOR_FLAG_HAS_THING3,
ACTOR_FLAG_HAS_THING4,
ACTOR_FLAG_LAST_ATTACK_HIT,
ACTOR_FLAG_STARTED,
ACTOR_FLAG_ALLOW_HANGBACK,
ACTOR_FLAG_USE_GRAVITY,
ACTOR_FLAG_SPAWN_FAILED,
ACTOR_FLAG_FADING_OUT,
ACTOR_FLAG_DEATHSHRINK,
ACTOR_FLAG_DEATHSINK,
ACTOR_FLAG_STAYSOLID,
ACTOR_FLAG_STUNNED,
ACTOR_FLAG_ALLOW_FALL,
ACTOR_FLAG_FINISHED,
ACTOR_FLAG_IN_LIMBO,
ACTOR_FLAG_CAN_WALK_ON_OTHERS,
ACTOR_FLAG_PUSHABLE,
ACTOR_FLAG_LAST_TRY_TALK,
ACTOR_FLAG_TARGETABLE,
ACTOR_FLAG_IMMORTAL,
ACTOR_FLAG_TURNING_HEAD,
ACTOR_FLAG_MOVING_EYES,
ACTOR_FLAG_DIE_COMPLETELY,
ACTOR_FLAG_BLEED_AFTER_DEATH,
ACTOR_FLAG_IGNORE_STUCK_WARNING,
ACTOR_FLAG_IGNORE_OFF_GROUND_WARNING,
ACTOR_FLAG_ALLOWED_TO_KILL,
ACTOR_FLAG_TOUCH_TRIGGERS,
ACTOR_FLAG_IGNORE_WATER,
ACTOR_FLAG_NEVER_IGNORE_SOUNDS,
ACTOR_FLAG_SIMPLE_PATHFINDING,
ACTOR_FLAG_HAVE_MOVED,
ACTOR_FLAG_NO_PAIN_SOUNDS,
ACTOR_FLAG_UPDATE_BOSS_HEALTH,
ACTOR_FLAG_IGNORE_PAIN_FROM_ACTORS,
ACTOR_FLAG_DAMAGE_ALLOWED,
ACTOR_FLAG_AT_COVER_NODE,
ACTOR_FLAG_WAIT_FOR_NEW_ENEMY,
ACTOR_FLAG_TAKE_DAMAGE,
ACTOR_FLAG_USE_DAMAGESKINS,
ACTOR_FLAG_CAPTURED,
ACTOR_FLAG_TURRET_MODE,
ACTOR_FLAG_INCOMING_HITSCAN,
ACTOR_FLAG_RESPONDING_TO_HITSCAN,
ACTOR_FLAG_MELEE_HIT_WORLD,
ACTOR_FLAG_TORSO_ANIM_DONE,
ACTOR_FLAG_WEAPON_READY,
ACTOR_FLAG_DISABLED,
ACTOR_FLAG_IN_ALCOVE,
ACTOR_FLAG_IN_CONE_OF_FIRE,
ACTOR_FLAG_IN_PLAYER_CONE_OF_FIRE,
ACTOR_FLAG_PLAYER_IN_CALL_VOLUME,
ACTOR_FLAG_IN_CALL_VOLUME,
ACTOR_FLAG_OUT_OF_TORSO_RANGE,
ACTOR_FLAG_DUCKED,
ACTOR_FLAG_PRONE,
ACTOR_FLAG_SHOULD_BLINK,
ACTOR_FLAG_CRIPPLED,
ACTOR_FLAG_RETREATING,
ACTOR_FLAG_HIDDEN,
ACTOR_FLAG_FOLLOWING_IN_FORMATION,
ACTOR_FLAG_DISPLAYING_FAILURE_FX,
ACTOR_FLAG_GROUPMEMBER_INJURED,
ACTOR_FLAG_CAN_HEAL_OTHER,
ACTOR_FLAG_STRICTLY_FOLLOW_PATHS,
ACTOR_FLAG_POSTURE_ANIM_DONE,
ACTOR_FLAG_ATTACKING_ENEMY,
ACTOR_FLAG_UPDATE_HATE_WITH_ATTACKERS,
ACTOR_FLAG_LAST_CANSEEPLAYER,
ACTOR_FLAG_LAST_CANSEEPLAYER_NOFOV,
ACTOR_FLAG_MELEE_ALLOWED,
ACTOR_FLAG_PLAYING_DIALOG_ANIM,
ACTOR_FLAG_USING_HUD,
ACTOR_FLAG_FORCE_LIFEBAR,
ACTOR_FLAG_UPDATE_ACTION_LEVEL,
ACTOR_FLAG_CAN_CHANGE_ANIM,
ACTOR_FLAG_USE_FOLLOWRANGE_FOR_NODES,
ACTOR_FLAG_IMMEDIATE_ACTIVATE,
ACTOR_FLAG_CANNOT_DISINTEGRATE,
ACTOR_FLAG_CANNOT_USE,
ACTOR_FLAG_CANNOT_FREEZE,
ACTOR_FLAG_MAX
} ActorFlags;
typedef enum
{
NOTIFY_FLAG_DAMAGED,
NOTIFY_FLAG_KILLED,
NOTIFY_FLAG_SPOTTED_ENEMY,
NOTIFY_FLAG_MAX
} NotifyFlags;
typedef enum
{
MOVEMENT_STYLE_NONE,
MOVEMENT_STYLE_WALK,
MOVEMENT_STYLE_RUN,
MOVEMENT_STYLE_MAX
} MovementStyle;
//========================================
// Global Lists
//========================================
extern Container<Actor *> SleepList;
extern Container<Actor *> ActiveList;
extern Container<Sentient *> TeamMateList;
extern Container<BehaviorPackageType_t *> PackageList;
#endif /* __ACTORINCLUDES_H__ */