You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
406 lines
13 KiB
406 lines
13 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
//=============================================================================//
|
||
|
|
||
|
#ifndef TFC_MAPITEMS_H
|
||
|
#define TFC_MAPITEMS_H
|
||
|
#ifdef _WIN32
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#include "tfc_shareddefs.h"
|
||
|
|
||
|
|
||
|
class CTFCPlayer;
|
||
|
|
||
|
|
||
|
/*==================================================*/
|
||
|
/* CTF Support defines */
|
||
|
/*==================================================*/
|
||
|
#define CTF_FLAG1 1
|
||
|
#define CTF_FLAG2 2
|
||
|
#define CTF_DROPOFF1 3
|
||
|
#define CTF_DROPOFF2 4
|
||
|
#define CTF_SCORE1 5
|
||
|
#define CTF_SCORE2 6
|
||
|
|
||
|
|
||
|
// Defines for GoalItem Removing from Player Methods
|
||
|
#define GI_DROP_PLAYERDEATH 0 // Dropped by a dying player
|
||
|
#define GI_DROP_REMOVEGOAL 1 // Removed by a Goal
|
||
|
#define GI_DROP_PLAYERDROP 2 // Dropped by a player
|
||
|
|
||
|
|
||
|
// Defines for methods of GoalItem returning
|
||
|
#define GI_RET_DROP_DEAD 0 // Dropped by a dead player
|
||
|
#define GI_RET_DROP_LIVING 1 // Dropped by a living player
|
||
|
#define GI_RET_GOAL 2 // Returned by a Goal
|
||
|
#define GI_RET_TIME 3 // Returned due to timeout
|
||
|
|
||
|
|
||
|
// Defines for Goal States
|
||
|
#define TFGS_ACTIVE 1
|
||
|
#define TFGS_INACTIVE 2
|
||
|
#define TFGS_REMOVED 3
|
||
|
#define TFGS_DELAYED 4
|
||
|
|
||
|
|
||
|
// Defines for Goal Result types : goal_result
|
||
|
#define TFGR_SINGLE 1 // Goal can only be activated once
|
||
|
#define TFGR_ADD_BONUSES 2 // Any Goals activated by this one give their bonuses
|
||
|
#define TFGR_ENDGAME 4 // Goal fires Intermission, displays scores, and ends level
|
||
|
#define TFGR_NO_ITEM_RESULTS 8 // GoalItems given by this Goal don't do results
|
||
|
#define TFGR_REMOVE_DISGUISE 16 // Prevent/Remove undercover from any Spy
|
||
|
#define TFGR_FORCE_RESPAWN 32 // Forces the player to teleport to a respawn point
|
||
|
#define TFGR_DESTROY_BUILDINGS 64 // Destroys this player's buildings, if anys
|
||
|
|
||
|
|
||
|
// Defines for Goal Item types, : goal_activation (in items)
|
||
|
#define TFGI_GLOW 1 // Players carrying this GoalItem will glow
|
||
|
#define TFGI_SLOW 2 // Players carrying this GoalItem will move at half-speed
|
||
|
#define TFGI_DROP 4 // Players dying with this item will drop it
|
||
|
#define TFGI_RETURN_DROP 8 // Return if a player with it dies
|
||
|
#define TFGI_RETURN_GOAL 16 // Return if a player with it has it removed by a goal's activation
|
||
|
#define TFGI_RETURN_REMOVE 32 // Return if it is removed by TFGI_REMOVE
|
||
|
#define TFGI_REVERSE_AP 64 // Only pickup if the player _doesn't_ match AP Details
|
||
|
#define TFGI_REMOVE 128 // Remove if left untouched for 2 minutes after being dropped
|
||
|
#define TFGI_KEEP 256 // Players keep this item even when they die
|
||
|
#define TFGI_ITEMGLOWS 512 // Item glows when on the ground
|
||
|
#define TFGI_DONTREMOVERES 1024 // Don't remove results when the item is removed
|
||
|
#define TFGI_DROPTOGROUND 2048 // Drop To Ground when spawning
|
||
|
#define TFGI_CANBEDROPPED 4096 // Can be voluntarily dropped by players
|
||
|
#define TFGI_SOLID 8192 // Is solid... blocks bullets, etc
|
||
|
|
||
|
|
||
|
// For all these defines, see the tfortmap.txt that came with the zip
|
||
|
// for complete descriptions.
|
||
|
// Defines for Goal Activation types : goal_activation (in goals)
|
||
|
#define TFGA_TOUCH 1 // Activated when touched
|
||
|
#define TFGA_TOUCH_DETPACK 2 // Activated when touched by a detpack explosion
|
||
|
#define TFGA_REVERSE_AP 4 // Activated when AP details are _not_ met
|
||
|
#define TFGA_SPANNER 8 // Activated when hit by an engineer's spanner
|
||
|
#define TFGA_DROPTOGROUND 2048 // Drop to Ground when spawning
|
||
|
|
||
|
|
||
|
// Defines for Goal Effects types : goal_effect
|
||
|
#define TFGE_AP 1 // AP is affected. Default.
|
||
|
#define TFGE_AP_TEAM 2 // All of the AP's team.
|
||
|
#define TFGE_NOT_AP_TEAM 4 // All except AP's team.
|
||
|
#define TFGE_NOT_AP 8 // All except AP.
|
||
|
#define TFGE_WALL 16 // If set, walls stop the Radius effects
|
||
|
#define TFGE_SAME_ENVIRONMENT 32 // If set, players in a different environment to the Goal are not affected
|
||
|
#define TFGE_TIMER_CHECK_AP 64 // If set, Timer Goals check their critera for all players fitting their effects
|
||
|
|
||
|
|
||
|
class CTFBaseItem : public CBaseAnimating
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
bool CheckExistence();
|
||
|
|
||
|
|
||
|
public:
|
||
|
|
||
|
int group_no;
|
||
|
int goal_no;
|
||
|
int goal_state; // TFGS_
|
||
|
// Goal/Timer/GoalItem/Trigger existence checking
|
||
|
int ex_skill_min; // Exists when the skill is >= this value
|
||
|
int ex_skill_max; // Exists when the skill is <= this value
|
||
|
string_t teamcheck; // TeamCheck entity that should be checked
|
||
|
};
|
||
|
|
||
|
|
||
|
class CTFGoal : public CTFBaseItem
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS( CTFGoal, CBaseAnimating );
|
||
|
DECLARE_DATADESC();
|
||
|
|
||
|
void Spawn( void );
|
||
|
void StartGoal( void );
|
||
|
void PlaceGoal( void );
|
||
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||
|
void tfgoal_touch( CBaseEntity *pOther );
|
||
|
|
||
|
void DelayedResult();
|
||
|
|
||
|
Class_T Classify ( void ) { return CLASS_TFGOAL; }
|
||
|
|
||
|
void SetObjectCollisionBox( void );
|
||
|
|
||
|
void tfgoal_timer_tick();
|
||
|
void DoRespawn();
|
||
|
|
||
|
|
||
|
public:
|
||
|
//TFCTODO: lots of these variables need to be put in the FGD file.
|
||
|
int goal_effects; // TFGE_
|
||
|
int goal_result; // TFGR_
|
||
|
|
||
|
int playerclass; // One of the PC_ defines.
|
||
|
|
||
|
float t_length; // Goal Criteria radius check
|
||
|
|
||
|
// NOTE: In CTFGoal, these are overridden to mean: if they're not zero, then this goal only
|
||
|
// affects players...
|
||
|
int maxammo_shells; // ... with that team number
|
||
|
int maxammo_nails; // ... without that team number
|
||
|
|
||
|
int ammo_shells;
|
||
|
int ammo_nails;
|
||
|
int ammo_rockets;
|
||
|
int ammo_cells;
|
||
|
int ammo_medikit;
|
||
|
int ammo_detpack;
|
||
|
int no_grenades_1;
|
||
|
int no_grenades_2;
|
||
|
|
||
|
// Replacement_Model Stuff
|
||
|
string_t replacement_model;
|
||
|
int replacement_model_body;
|
||
|
int replacement_model_skin;
|
||
|
int replacement_model_flags;
|
||
|
|
||
|
// Item Displaying details
|
||
|
int display_item_status[4]; // Goal displays the status of these items
|
||
|
string_t team_str_home; // Displayed when the item is at home base
|
||
|
string_t team_str_moved; // Displayed when the item has been moved
|
||
|
string_t team_str_carried; // Displayed when the item is being carried
|
||
|
string_t non_team_str_home; // Displayed when the item is at home base
|
||
|
string_t non_team_str_moved; // Displayed when the item has been moved
|
||
|
string_t non_team_str_carried; // Displayed when the item is being carried
|
||
|
|
||
|
float invincible_finished;
|
||
|
float invisible_finished;
|
||
|
float super_damage_finished;
|
||
|
float radsuit_finished;
|
||
|
|
||
|
int lives;
|
||
|
int frags;
|
||
|
float wait;
|
||
|
|
||
|
float search_time; // Timer goal delay
|
||
|
int item_list; // Used to keep track of which goalitems are
|
||
|
// affecting the player at any time.
|
||
|
// GoalItems use it to keep track of their own
|
||
|
// mask to apply to a player's item_list
|
||
|
|
||
|
float drop_time; // Time spent untouched before item return
|
||
|
float armortype;
|
||
|
int armorvalue;
|
||
|
int armorclass; // Type of armor being worn;
|
||
|
|
||
|
int count; // Change teamscores
|
||
|
|
||
|
// Goal Size
|
||
|
Vector goal_min;
|
||
|
Vector goal_max;
|
||
|
|
||
|
bool m_bAddBonuses;
|
||
|
|
||
|
int items;
|
||
|
int items_allowed;
|
||
|
|
||
|
int else_goal;
|
||
|
int if_goal_is_active;
|
||
|
int if_goal_is_inactive;
|
||
|
int if_goal_is_removed;
|
||
|
int if_group_is_active;
|
||
|
int if_group_is_inactive;
|
||
|
int if_group_is_removed;
|
||
|
|
||
|
int speed_reduction;
|
||
|
|
||
|
int return_item_no;
|
||
|
int if_item_has_moved;
|
||
|
int if_item_hasnt_moved;
|
||
|
|
||
|
int has_item_from_group;
|
||
|
int hasnt_item_from_group;
|
||
|
|
||
|
int goal_activation;
|
||
|
int delay_time;
|
||
|
int weapon;
|
||
|
string_t owned_by_teamcheck;
|
||
|
int owned_by;
|
||
|
string_t noise;
|
||
|
|
||
|
// Spawnpoint behaviour
|
||
|
int remove_spawnpoint;
|
||
|
int restore_spawnpoint;
|
||
|
int remove_spawngroup;
|
||
|
int restore_spawngroup;
|
||
|
|
||
|
// These are the old centerprinting methods.
|
||
|
// They now print using the large fancy text
|
||
|
string_t broadcast; // Centerprinted to all, overridden by the next two
|
||
|
string_t team_broadcast; // Centerprinted to AP's team members, but not the AP
|
||
|
string_t non_team_broadcast; // Centerprinted to non AP's team members
|
||
|
string_t owners_team_broadcast; // Centerprinted to the members of the team that own the Goal/Item
|
||
|
string_t non_owners_team_broadcast; // Centerprinted to the members of the team that don't own the Goal/Item
|
||
|
string_t team_drop; // Centerprinted to item owners team
|
||
|
string_t non_team_drop; // Centerprinted to everone not on item owners team
|
||
|
|
||
|
// These are new fields that print the old fashioned centerprint method
|
||
|
string_t org_broadcast; // Centerprinted to all, overridden by the next two
|
||
|
string_t org_team_broadcast; // Centerprinted to AP's team members, but not the AP
|
||
|
string_t org_non_team_broadcast; // Centerprinted to non AP's team members
|
||
|
string_t org_owners_team_broadcast; // Centerprinted to the members of the team that own the Goal/Item
|
||
|
string_t org_non_owners_team_broadcast; // Centerprinted to the members of the team that don't own the Goal/Item
|
||
|
string_t org_team_drop; // Centerprinted to item owners team
|
||
|
string_t org_non_team_drop; // Centerprinted to everone not on item owners team
|
||
|
string_t org_message; // Centerprinted to the AP upon activation
|
||
|
string_t org_noise3;
|
||
|
string_t org_noise4;
|
||
|
// These still print the old centerprint fashion
|
||
|
string_t netname_broadcast; // same as above, prepended by AP netname and bprinted
|
||
|
string_t netname_team_broadcast; // same as above, prepended by AP netname and bprinted
|
||
|
string_t netname_non_team_broadcast; // same as above, prepended by AP netname and bprinted
|
||
|
string_t netname_owners_team_broadcast; // same as above, prepended by AP netname and bprinted
|
||
|
string_t netname_team_drop; // same as above, prepended by AP netname and bprinted
|
||
|
string_t netname_non_team_drop; // same as above, prepended by AP netname and bprinted
|
||
|
string_t speak; // VOX Spoken to Everyone
|
||
|
string_t AP_speak; // VOX Spoken the AP
|
||
|
string_t team_speak; // VOX Spoken to AP's team_members, including the AP
|
||
|
string_t non_team_speak; // VOX Spoken to non AP's team_members
|
||
|
string_t owners_team_speak; // VOX Spoken to members of the team that own this Goal
|
||
|
string_t non_owners_team_speak; // VOX Spoken to everyone bit the members of the team that own this Goal
|
||
|
|
||
|
float m_flEndRoundTime;
|
||
|
string_t m_iszEndRoundMsg_Team1_Win;
|
||
|
string_t m_iszEndRoundMsg_Team2_Win;
|
||
|
string_t m_iszEndRoundMsg_Team3_Win;
|
||
|
string_t m_iszEndRoundMsg_Team4_Win;
|
||
|
string_t m_iszEndRoundMsg_Team1_Lose;
|
||
|
string_t m_iszEndRoundMsg_Team2_Lose;
|
||
|
string_t m_iszEndRoundMsg_Team3_Lose;
|
||
|
string_t m_iszEndRoundMsg_Team4_Lose;
|
||
|
string_t m_iszEndRoundMsg_Team1;
|
||
|
string_t m_iszEndRoundMsg_Team2;
|
||
|
string_t m_iszEndRoundMsg_Team3;
|
||
|
string_t m_iszEndRoundMsg_Team4;
|
||
|
string_t m_iszEndRoundMsg_OwnedBy;
|
||
|
string_t m_iszEndRoundMsg_NonOwnedBy;
|
||
|
|
||
|
int all_active;
|
||
|
int last_impulse; // The previous impulse command from this player
|
||
|
|
||
|
int activate_goal_no;
|
||
|
int inactivate_goal_no;
|
||
|
int remove_goal_no;
|
||
|
int restore_goal_no;
|
||
|
int activate_group_no;
|
||
|
int inactivate_group_no;
|
||
|
int remove_group_no;
|
||
|
int restore_group_no;
|
||
|
|
||
|
BOOL do_triggerwork; // Overrides for trigger handling in TF Goals
|
||
|
string_t killtarget; // Remove ents with this target
|
||
|
string_t target;
|
||
|
|
||
|
string_t message;
|
||
|
|
||
|
// Score increases
|
||
|
int increase_team[4]; // Increase the scores of teams
|
||
|
int increase_team_owned_by; // Increase the score of the team that owns this entity
|
||
|
|
||
|
EHANDLE enemy;
|
||
|
|
||
|
Vector oldorigin;
|
||
|
int axhitme; // Remove item from AP
|
||
|
|
||
|
int remove_item_group;
|
||
|
};
|
||
|
|
||
|
|
||
|
class CTFGoalItem : public CTFGoal
|
||
|
{
|
||
|
public:
|
||
|
void Spawn( void );
|
||
|
void StartItem( void );
|
||
|
void PlaceItem( void );
|
||
|
|
||
|
Class_T Classify ( void ) { return CLASS_TFGOAL_ITEM; }
|
||
|
|
||
|
void item_tfgoal_touch( CBaseEntity *pOther );
|
||
|
void tfgoalitem_droptouch();
|
||
|
void tfgoalitem_dropthink();
|
||
|
void tfgoalitem_remove();
|
||
|
|
||
|
void DoDrop( Vector vecOrigin );
|
||
|
|
||
|
|
||
|
public:
|
||
|
|
||
|
float m_flDroppedAt;
|
||
|
|
||
|
float speed;
|
||
|
int speed_reduction;
|
||
|
|
||
|
float distance;
|
||
|
float pain_finished;
|
||
|
float attack_finished;
|
||
|
|
||
|
Vector redrop_origin; // Original drop position
|
||
|
int redrop_count; // Number of time's we redropped.
|
||
|
};
|
||
|
|
||
|
|
||
|
class CTFTimerGoal : public CTFGoal
|
||
|
{
|
||
|
public:
|
||
|
void Spawn( void );
|
||
|
|
||
|
Class_T Classify ( void ) { return CLASS_TFGOAL_TIMER; }
|
||
|
};
|
||
|
|
||
|
|
||
|
class CTFSpawn : public CTFBaseItem
|
||
|
{
|
||
|
public:
|
||
|
void Spawn( void );
|
||
|
void Activate( void );
|
||
|
Class_T Classify ( void ) { return CLASS_TFSPAWN; }
|
||
|
BOOL CheckTeam( int iTeamNo );
|
||
|
|
||
|
EHANDLE m_pTeamCheck;
|
||
|
};
|
||
|
|
||
|
|
||
|
class CBaseDelay : public CTFGoal
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS( CBaseDelay, CTFGoal );
|
||
|
|
||
|
void SUB_UseTargets( CBaseEntity *pActivator, USE_TYPE useType, float value );
|
||
|
void KeyValue( KeyValueData *pkvd );
|
||
|
void DelayThink( void );
|
||
|
virtual bool KeyValue( const char *szKeyName, const char *szValue );
|
||
|
|
||
|
public:
|
||
|
float m_flDelay;
|
||
|
string_t m_iszKillTarget;
|
||
|
int button;
|
||
|
};
|
||
|
|
||
|
|
||
|
class CTeamCheck : public CBaseDelay
|
||
|
{
|
||
|
public:
|
||
|
void Spawn( void );
|
||
|
void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
|
||
|
BOOL TeamMatches( int iTeam );
|
||
|
};
|
||
|
|
||
|
|
||
|
// Global functions.
|
||
|
CTFGoalItem* Finditem(int ino);
|
||
|
void DisplayItemStatus(CTFGoal *Goal, CTFCPlayer *Player, CTFGoalItem *Item);
|
||
|
|
||
|
|
||
|
#endif // TFC_MAPITEMS_H
|