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.
128 lines
3.8 KiB
128 lines
3.8 KiB
#ifndef ASW_MARINE_SPEECH_H |
|
#define ASW_MARINE_SPEECH_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "baseentity.h" |
|
#include "asw_marine_profile.h" |
|
|
|
class CASW_Marine; |
|
|
|
#define ASW_NUM_CONVERSATIONS 21 |
|
|
|
// conversations |
|
enum |
|
{ |
|
CONV_NONE, // 0 |
|
CONV_SYNUP, // 1 |
|
CONV_CRASH_COMPLAIN, // 2 |
|
CONV_MEDIC_COMPLAIN, // 3 |
|
CONV_HEALING_CRASH, // 4 |
|
CONV_TEQUILA, // 5 |
|
CONV_CRASH_IDLE, // 6 |
|
CONV_SERIOUS_INJURY, // 7 |
|
CONV_STILL_BREATHING, // 8 |
|
CONV_SARGE_IDLE,// 9 |
|
CONV_BIG_ALIEN,// 10 |
|
CONV_AUTOGUN,// 11 |
|
CONV_WOLFE_BEST,// 12 |
|
CONV_SARGE_JAEGER_CONV1,// 13 |
|
CONV_SARGE_JAEGER_CONV2,// 14 |
|
CONV_WILDCAT_KILL,// 15 |
|
CONV_WOLFE_KILL,// 16 |
|
CONV_COMPLIMENT_JAEGER, // 17 |
|
CONV_COMPLIMENT_SARGE, // 18 |
|
CONV_COMPLIMENT_WOLFE, // 19 |
|
CONV_COMPLIMENT_WILDCAT, // 20 |
|
}; |
|
|
|
// timer types to set when we play a chatter |
|
enum |
|
{ |
|
ASW_CHATTER_TIMER_TEAM, |
|
ASW_CHATTER_TIMER_PERSONAL, |
|
ASW_CHATTER_TIMER_NONE |
|
}; |
|
|
|
class CASW_Queued_Speech |
|
{ |
|
public: |
|
int iChatterType; |
|
float fPlayTime; |
|
float fMaxPlayTime; |
|
CHandle<CBasePlayer> hOnlyForPlayer; |
|
}; |
|
|
|
// This class triggers marine speech upon certain events |
|
|
|
class CASW_MarineSpeech |
|
{ |
|
public: |
|
CASW_MarineSpeech(CASW_Marine *pMarine); |
|
virtual ~CASW_MarineSpeech(); |
|
|
|
void Precache(); |
|
|
|
// NOTE: chatter functions return true if the speech played, or if the speech was skipped because the random % chance of playing meant it shouldn't play this time |
|
// they will return false if the speech failed to play for other reasons (someone else was talking, no live marine, etc.) |
|
|
|
// player has requested a chatter to be played, we allow some to be played for comms/taunts/flavour |
|
bool ClientRequestChatter(int iChatterType, int iSubChatter=-1); |
|
|
|
// play a chatter from the marine's profile |
|
bool Chatter(int iChatterType, int iSubChatter=-1, CBasePlayer* pOnlyForPlayer=NULL); |
|
|
|
// this will play the chatter even if someone else is talking, but won't interrupt ourselves |
|
bool PersonalChatter(int iChatterType); |
|
|
|
// this will play the chatter even if someone else is talking and will even interrupt ourselves |
|
bool ForceChatter(int iChatterType, int iTimerType); |
|
|
|
// translates chatter type based on things going on in-game (i.e. selection chatter into injured selection if the marine is low on health) |
|
bool TranslateChatter(int &iChatterType, CASW_Marine_Profile *pProfile); |
|
|
|
float GetTeamChatterTime(); |
|
float GetIncomingChatterTime(); |
|
void SetTeamChatterTime(float f); |
|
void SetIncomingChatterTime(float f); |
|
|
|
void SetPersonalChatterTime(float f); |
|
float GetPersonalChatterTime() { return m_fPersonalChatterTime; } |
|
|
|
bool FindDirectionalHoldingChatter(int &iChatterType); |
|
|
|
// queue up a chatter line to be played at a certain time |
|
void QueueChatter(int iChatterType, float fPlayTime, float fMaxPlayTime, CBasePlayer *pOnlyForPlayer=NULL); |
|
|
|
// check if any queued speech needs to be played |
|
void Update(); |
|
|
|
static int s_CurrentConversation; |
|
static int s_CurrentConversationChatterStage; |
|
static CHandle<CASW_Marine> s_hCurrentActor; |
|
static CHandle<CASW_Marine> s_hActor1; |
|
static CHandle<CASW_Marine> s_hActor2; |
|
static int s_iCurrentConvLine; |
|
static void StopConversation(); |
|
static bool StartConversation(int iConversation, CASW_Marine *pMarine, CASW_Marine *pSecondMarine = NULL); |
|
|
|
// has wildcat killed more aliens? |
|
bool GetWildcatAhead(); |
|
|
|
// checks when a marine last fired to see if it's okay to do calm conversations |
|
bool AllowCalmConversations(int iConversation); |
|
|
|
protected: |
|
// plays the specified sound on the marine and sets the next chatter time to just after that |
|
void InternalPlayChatter(CASW_Marine* pMarine, const char* szSoundName, int iSetTimer = ASW_CHATTER_TIMER_TEAM, int iChatterType=-1, int iSubChatter=-1, CBasePlayer *pOnlyForPlayer=NULL); |
|
|
|
CASW_Marine* m_pMarine; |
|
float m_fPersonalChatterTime; |
|
|
|
float m_fFriendlyFireTime; |
|
|
|
CUtlVector<CASW_Queued_Speech> m_SpeechQueue; |
|
}; |
|
|
|
#endif /* ASW_MARINE_SPEECH_H */
|
|
|