205 lines
7.4 KiB
205 lines
7.4 KiB
//--------------------------------------------------------------------------- |
|
// |
|
// S c r i p t e d S e q u e n c e s |
|
// |
|
//--------------------------------------------------------------------------- |
|
#ifndef _INCLUDE_SEQUENCE_H_ |
|
#define _INCLUDE_SEQUENCE_H_ |
|
|
|
|
|
#ifndef _DEF_BYTE_ |
|
//typedef unsigned char byte; |
|
#endif |
|
|
|
#ifndef CDLL_INT_H |
|
//--------------------------------------------------------------------------- |
|
// client_textmessage_t |
|
//--------------------------------------------------------------------------- |
|
typedef struct client_textmessage_s |
|
{ |
|
int effect; |
|
byte r1, g1, b1, a1; // 2 colors for effects |
|
byte r2, g2, b2, a2; |
|
float x; |
|
float y; |
|
float fadein; |
|
float fadeout; |
|
float holdtime; |
|
float fxtime; |
|
char *pName; |
|
char *pMessage; |
|
} client_textmessage_t; |
|
#endif |
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
// sequenceCommandEnum_e |
|
// |
|
// Enumerated sequence command types. |
|
//--------------------------------------------------------------------------- |
|
enum sequenceCommandEnum_ |
|
{ |
|
SEQUENCE_COMMAND_ERROR = -1, |
|
SEQUENCE_COMMAND_PAUSE = 0, |
|
SEQUENCE_COMMAND_FIRETARGETS, |
|
SEQUENCE_COMMAND_KILLTARGETS, |
|
SEQUENCE_COMMAND_TEXT, |
|
SEQUENCE_COMMAND_SOUND, |
|
SEQUENCE_COMMAND_GOSUB, |
|
SEQUENCE_COMMAND_SENTENCE, |
|
SEQUENCE_COMMAND_REPEAT, |
|
SEQUENCE_COMMAND_SETDEFAULTS, |
|
SEQUENCE_COMMAND_MODIFIER, |
|
SEQUENCE_COMMAND_POSTMODIFIER, |
|
SEQUENCE_COMMAND_NOOP, |
|
|
|
SEQUENCE_MODIFIER_EFFECT, |
|
SEQUENCE_MODIFIER_POSITION, |
|
SEQUENCE_MODIFIER_COLOR, |
|
SEQUENCE_MODIFIER_COLOR2, |
|
SEQUENCE_MODIFIER_FADEIN, |
|
SEQUENCE_MODIFIER_FADEOUT, |
|
SEQUENCE_MODIFIER_HOLDTIME, |
|
SEQUENCE_MODIFIER_FXTIME, |
|
SEQUENCE_MODIFIER_SPEAKER, |
|
SEQUENCE_MODIFIER_LISTENER, |
|
SEQUENCE_MODIFIER_TEXTCHANNEL, |
|
}; |
|
typedef enum sequenceCommandEnum_ sequenceCommandEnum_e; |
|
|
|
//-------------------------------------------------------------------------- |
|
// sequenceDefaultBits_e |
|
// |
|
// Enumerated list of possible modifiers for a command. This enumeration |
|
// is used in a bitarray controlling what modifiers are specified for a command. |
|
//--------------------------------------------------------------------------- |
|
enum sequenceModifierBits |
|
{ |
|
SEQUENCE_MODIFIER_EFFECT_BIT = (1 << 1), |
|
SEQUENCE_MODIFIER_POSITION_BIT = (1 << 2), |
|
SEQUENCE_MODIFIER_COLOR_BIT = (1 << 3), |
|
SEQUENCE_MODIFIER_COLOR2_BIT = (1 << 4), |
|
SEQUENCE_MODIFIER_FADEIN_BIT = (1 << 5), |
|
SEQUENCE_MODIFIER_FADEOUT_BIT = (1 << 6), |
|
SEQUENCE_MODIFIER_HOLDTIME_BIT = (1 << 7), |
|
SEQUENCE_MODIFIER_FXTIME_BIT = (1 << 8), |
|
SEQUENCE_MODIFIER_SPEAKER_BIT = (1 << 9), |
|
SEQUENCE_MODIFIER_LISTENER_BIT = (1 << 10), |
|
SEQUENCE_MODIFIER_TEXTCHANNEL_BIT = (1 << 11), |
|
}; |
|
typedef enum sequenceModifierBits sequenceModifierBits_e ; |
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
// sequenceCommandType_e |
|
// |
|
// Typeerated sequence command types. |
|
//--------------------------------------------------------------------------- |
|
enum sequenceCommandType_ |
|
{ |
|
SEQUENCE_TYPE_COMMAND, |
|
SEQUENCE_TYPE_MODIFIER, |
|
}; |
|
typedef enum sequenceCommandType_ sequenceCommandType_e; |
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
// sequenceCommandMapping_s |
|
// |
|
// A mapping of a command enumerated-value to its name. |
|
//--------------------------------------------------------------------------- |
|
typedef struct sequenceCommandMapping_ sequenceCommandMapping_s; |
|
struct sequenceCommandMapping_ |
|
{ |
|
sequenceCommandEnum_e commandEnum; |
|
const char* commandName; |
|
sequenceCommandType_e commandType; |
|
}; |
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
// sequenceCommandLine_s |
|
// |
|
// Structure representing a single command (usually 1 line) from a |
|
// .SEQ file entry. |
|
//--------------------------------------------------------------------------- |
|
typedef struct sequenceCommandLine_ sequenceCommandLine_s; |
|
struct sequenceCommandLine_ |
|
{ |
|
int commandType; // Specifies the type of command |
|
client_textmessage_t clientMessage; // Text HUD message struct |
|
char* speakerName; // Targetname of speaking entity |
|
char* listenerName; // Targetname of entity being spoken to |
|
char* soundFileName; // Name of sound file to play |
|
char* sentenceName; // Name of sentences.txt to play |
|
char* fireTargetNames; // List of targetnames to fire |
|
char* killTargetNames; // List of targetnames to remove |
|
float delay; // Seconds 'till next command |
|
int repeatCount; // If nonzero, reset execution pointer to top of block (N times, -1 = infinite) |
|
int textChannel; // Display channel on which text message is sent |
|
int modifierBitField; // Bit field to specify what clientmessage fields are valid |
|
sequenceCommandLine_s* nextCommandLine; // Next command (linked list) |
|
}; |
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
// sequenceEntry_s |
|
// |
|
// Structure representing a single command (usually 1 line) from a |
|
// .SEQ file entry. |
|
//--------------------------------------------------------------------------- |
|
typedef struct sequenceEntry_ sequenceEntry_s; |
|
struct sequenceEntry_ |
|
{ |
|
char* fileName; // Name of sequence file without .SEQ extension |
|
char* entryName; // Name of entry label in file |
|
sequenceCommandLine_s* firstCommand; // Linked list of commands in entry |
|
sequenceEntry_s* nextEntry; // Next loaded entry |
|
qboolean isGlobal; // Is entry retained over level transitions? |
|
}; |
|
|
|
|
|
|
|
//--------------------------------------------------------------------------- |
|
// sentenceEntry_s |
|
// Structure representing a single sentence of a group from a .SEQ |
|
// file entry. Sentences are identical to entries in sentences.txt, but |
|
// can be unique per level and are loaded/unloaded with the level. |
|
//--------------------------------------------------------------------------- |
|
typedef struct sentenceEntry_ sentenceEntry_s; |
|
struct sentenceEntry_ |
|
{ |
|
char* data; // sentence data (ie "We have hostiles" ) |
|
sentenceEntry_s* nextEntry; // Next loaded entry |
|
qboolean isGlobal; // Is entry retained over level transitions? |
|
unsigned int index; // this entry's position in the file. |
|
}; |
|
|
|
//-------------------------------------------------------------------------- |
|
// sentenceGroupEntry_s |
|
// Structure representing a group of sentences found in a .SEQ file. |
|
// A sentence group is defined by all sentences with the same name, ignoring |
|
// the number at the end of the sentence name. Groups enable a sentence |
|
// to be picked at random across a group. |
|
//-------------------------------------------------------------------------- |
|
typedef struct sentenceGroupEntry_ sentenceGroupEntry_s; |
|
struct sentenceGroupEntry_ |
|
{ |
|
char* groupName; // name of the group (ie CT_ALERT ) |
|
unsigned int numSentences; // number of sentences in group |
|
sentenceEntry_s* firstSentence; // head of linked list of sentences in group |
|
sentenceGroupEntry_s* nextEntry; // next loaded group |
|
}; |
|
|
|
//--------------------------------------------------------------------------- |
|
// Function declarations |
|
//--------------------------------------------------------------------------- |
|
sequenceEntry_s* Sequence_Get( const char* fileName, const char* entryName ); |
|
void Sequence_ParseFile( const char* fileName, qboolean isGlobal ); |
|
void Sequence_OnLevelLoad( const char* mapName ); |
|
sentenceEntry_s* Sequence_PickSentence( const char *groupName, int pickMethod, int *picked ); |
|
void Sequence_Init( void ); |
|
void Sequence_PurgeEntries( qboolean purgeGlobals ); |
|
sentenceEntry_s *Sequence_GetSentenceByIndex( unsigned int index ); |
|
|
|
#endif // _INCLUDE_SEQUENCE_H_
|
|
|