mirror of
https://github.com/w23/xash3d-fwgs
synced 2024-12-15 13:41:33 +01:00
5e0a0765ce
The `.editorconfig` file in this repo is configured to trim all trailing whitespace regardless of whether the line is modified. Trims all trailing whitespace in the repository to make the codebase easier to work with in editors that respect `.editorconfig`. `git blame` becomes less useful on these lines but it already isn't very useful. Commands: ``` find . -type f -name '*.h' -exec sed --in-place 's/[[:space:]]\+$//' {} \+ find . -type f -name '*.c' -exec sed --in-place 's/[[:space:]]\+$//' {} \+ ```
206 lines
7.4 KiB
C
206 lines
7.4 KiB
C
//---------------------------------------------------------------------------
|
|
//
|
|
// 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_
|