|
|
//========= 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
|