mittorn
7 years ago
12 changed files with 2605 additions and 18 deletions
@ -0,0 +1,205 @@ |
|||||||
|
//---------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// 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_
|
Loading…
Reference in new issue