51         {
"Arrive Enemy",                        100,    -1,             0}, 
 
   52         {
"Attack Target",                       100,    -1,             0}, 
 
   53         {
"Beta Arrived",                        100,    -1,             0}, 
 
   54         {
"Check 6",                                     100,    2,              6000}, 
 
   55         {
"Engage",                                      100,    -1,             0}, 
 
   56         {
"Gamma Arrived",                       100,    -1,             0}, 
 
   57         {
"Help",                                        100,    10,             60000}, 
 
   58         {
"Praise",                                      100,    10,             60000}, 
 
   59         {
"Backup",                                      100,    -1,             0}, 
 
   60         {
"Ignore Target",                       100,    -1,             0}, 
 
   62         {
"Oops 1",                                      100,    -1,             0}, 
 
   63         {
"Permission",                          100,    -1,             0},             
 
   64         {
"Stray",                                       100,    -1,             0},                     
 
   65         {
"Depart",                                      100,    -1,             0}, 
 
   67         {
"Rearm on Way",                        100,    -1,             0}, 
 
   68         {
"On way",                                      100,    -1,             0}, 
 
   69         {
"Rearm warping in",            100,    -1,             0}, 
 
   70         {
"No Target",                           100,    -1,             0}, 
 
   71         {
"Docking Start",                       100,    -1,             0},             
 
   72         {
"Repair Done",                         100,    -1,             0}, 
 
   73         {
"Repair Aborted",                      100,    -1,             0}, 
 
   74         {
"Traitor",                                     100,    -1,             0}, 
 
   75         {
"Rearm",                                       100,    -1,             0}, 
 
   76         {
"Disable Target",                      100,    -1,             0}, 
 
   77         {
"Disarm Target",                       100,    -1,             0}, 
 
   78         {
"Player Dead",                         100,    -1,             0}, 
 
   79         {
"Death",                                       50,             10,             60000}, 
 
   80         {
"Support Killed",                      100,    -1,             0}, 
 
   81         {
"All Clear",                           100,    -1,             0},                     
 
   82         {
"All Alone",                           100,    -1,             0}, 
 
   83         {
"Repair",                                      100,    -1,             0}, 
 
   84         {
"Delta Arrived",                       100,    -1,             0}, 
 
   85         {
"Epsilon Arrived",                     100,    -1,             0}, 
 
   86         {
"Instructor Hit",                      100,    -1,             0}, 
 
   87         {
"Instructor Attack",           100,    -1,             0}, 
 
   88         {
"Stray Warning",                       100,    -1,             0}, 
 
   89         {
"Stray Warning Final",         100,    -1,             0}, 
 
   90         {
"AWACS at 75",                         100,    -1,             0}, 
 
   91         {
"AWACS at 25",                         100,    -1,             0}, 
 
   92         {
"Praise Self",                         10,             4,              60000}, 
 
   93         {
"High Praise",                         100,    -1,             0}, 
 
   94         {
"Rearm Primaries",                     100,    -1,             0}, 
 
   95         {
"Primaries Low",                       100,    -1,             0}, 
 
  109 #define MAX_PLAYING_MESSAGES            2 
  111 #define MAX_WINGMAN_HEADS                       2 
  112 #define MAX_COMMAND_HEADS                       3 
  115 #define HEAD_PREFIX_STRING                      "head-" 
  116 #define COMMAND_HEAD_PREFIX             "head-cm1" 
  117 #define COMMAND_WAVE_PREFIX             "TC_" 
  118 #define SUPPORT_NAME                                    "Support" 
  144 #define MQF_CONVERT_TO_COMMAND          (1<<0)                  // convert this queued message to terran command 
  145 #define MQF_CHECK_ALIVE                                 (1<<1)                  // check for the existence of who_from before sending 
  161 #define MAX_MESSAGE_Q                           30 
  162 #define MAX_MESSAGE_LIFE                        F1_0*30         // After being queued for 30 seconds, don't play it 
  163 #define DEFAULT_MESSAGE_LENGTH  3000                    // default number of milliseconds to display message indicator on hud 
  167 #define MESSAGE_IMMEDIATE_TIMESTAMP             1000            // immediate messages must play within 1 second 
  168 #define MESSAGE_SOON_TIMESTAMP                  5000            // "soon" messages must play within 5 seconds 
  169 #define MESSAGE_ANYTIME_TIMESTAMP               -1                      // anytime timestamps are invalid 
  194 static int Message_wave_muted;
 
  195 static int Message_wave_duration;
 
  196 static int Next_mute_time;
 
  198 #define MAX_DISTORT_PATTERNS    2 
  199 #define MAX_DISTORT_LEVELS              6 
  202         {0.20f, 0.20f, 0.20f, 0.20f, 0.20f, 0.20f},
 
  203         {0.10f, 0.20f, 0.25f, 0.25f, 0.05f, 0.15f}
 
  206 static int Distort_num;         
 
  207 static int Distort_next;        
 
  224 static void persona_parse_close()
 
  226         if (Personas != NULL) {
 
  239         static bool done_at_exit = 
false;
 
  240         if ( !done_at_exit ) {
 
  241                 atexit( persona_parse_close );
 
  248         if (Personas == NULL)
 
  275         if ( i == MAX_PERSONA_TYPES )
 
  298                 stuff_boolean(&Personas[Num_personas].substitute_missing_messages);
 
  317         for ( i = 0; i < (
int)Message_avis.size(); i++ ) {
 
  328         Message_avis.push_back(extra); 
 
  330         return ((
int)Message_avis.size() - 1);
 
  341         for ( i = 0; i < (
int)Message_waves.size(); i++ ) {
 
  349         Message_waves.push_back(extra);
 
  351         return ((
int)Message_waves.size() - 1);
 
  394                         WarningEx(
LOCATION, 
"Unknown persona in message %s in messages.tbl -- %s\n", msg.
name, persona_name );
 
  409                 if (importing_from_fsm && !
strnicmp(avi_name, 
"Head-TP1", 8))
 
  441                         if (iter->compare(buf) == 0) {
 
  442                                 msg.
mood = iter - Builtin_moods.begin();
 
  450                         Warning(
LOCATION, 
"Message.tbl has an entry for mood type %s, but this mood is not in the #Moods section of the table.", buf.c_str()); 
 
  464                                 if (!
stricmp(iter->c_str(), parsed_moods->c_str())) {
 
  473                                 Warning(
LOCATION, 
"Message.tbl has an entry for exclude mood type %s, but this mood is not in the #Moods section of the table.", parsed_moods->c_str()); 
 
  479         Messages.push_back(msg); 
 
  485         int i, max_count, min_delay, occurrence_chance;  
 
  486         int builtin_type = -1; 
 
  492                 if (!strcmp(name, Builtin_messages[i].name)) {
 
  498         if (builtin_type == -1) {
 
  499                 Warning(
LOCATION, 
"Unknown Builtin Message Type Detected. Type : %s not supported", name);
 
  505                 if ((occurrence_chance >= 0) && (occurrence_chance <= 100)) {
 
  512                 if (max_count > -2) {
 
  513                         Builtin_messages[builtin_type].
max_count = max_count;
 
  519                 if (min_delay > -1) {
 
  520                         Builtin_messages[builtin_type].
min_delay = min_delay;
 
  534                 Builtin_moods.push_back(buf);
 
  545         Messages.reserve(500);
 
  546         Message_waves.reserve(300);
 
  547         Message_avis.reserve(30);
 
  555         char *pVawacs25 = strstr(
Mp, 
"Vawacs25.wav");
 
  558                 char *pAwacs75 = strstr(pVawacs25, 
"Awacs75.wav");
 
  563                         for (i = 1; i < (pAwacs75 - pVawacs25) - 1; i++)
 
  564                                 pVawacs25[i] = pVawacs25[i+1];
 
  577         Builtin_moods.push_back(
"Default");
 
  605                         if (!(
stricmp(Messages[i].
name, Builtin_messages[j].name))) {
 
  614         generic_message_filenames.clear();
 
  615         generic_message_filenames.push_back(
"none");
 
  616         generic_message_filenames.push_back(
"cuevoice");
 
  617         generic_message_filenames.push_back(
"emptymsg");
 
  618         generic_message_filenames.push_back(
"generic");
 
  619         generic_message_filenames.push_back(
"msgstart");
 
  631                         char *ptr = strchr(filename, 
'.');
 
  634                                 Warning(
LOCATION, 
"Simulated speech override file '%s' was provided with no extension!", filename);
 
  641                                 Warning(
LOCATION, 
"Simulated speech override file '%s' was provided with an extension other than .wav or .ogg!", filename);
 
  649                         generic_message_filenames.push_back(filename);
 
  660         static int table_read = 0;
 
  672                         mprintf((
"TABLES: Unable to parse '%s'!  Error message = %s.\n", 
"messages.tbl", e.what()));
 
  706                 Message_waves[
i].num = -1;
 
  716                 Playing_messages[
i].
wave = -1;
 
  717                 Playing_messages[
i].
id = -1;
 
  728         Message_wave_muted = 0;
 
  733         Message_avis.erase((Message_avis.begin()+
Num_builtin_avis), Message_avis.end()); 
 
  734         Message_waves.erase((Message_waves.begin()+
Num_builtin_waves), Message_waves.end());
 
  757         mprintf((
"Unloading in mission messages\n"));
 
  768                 if ( Message_waves[i].
num != -1 ){
 
  783                 if (MessageQ[i].special_message != NULL)
 
  785                         vm_free(MessageQ[i].special_message);
 
  795         if (Personas != NULL) {
 
  840                 if ( Playing_messages[i].play_anim) {
 
  845                         if ( (Playing_messages[i].wave != -1 ) && 
snd_is_playing(Playing_messages[i].wave) ){
 
  846                                 snd_stop( Playing_messages[i].wave );
 
  854                 Num_messages_playing = 0;
 
  869         if ( Playing_messages[message_num].play_anim) {
 
  870                 Playing_messages[message_num].
play_anim = 
false;
 
  873         if ( (Playing_messages[message_num].wave != -1 ) && 
snd_is_playing(Playing_messages[message_num].wave) )
 
  874                 snd_stop( Playing_messages[message_num].wave );
 
  876         Playing_messages[message_num].
shipnum = -1;
 
  894         if ( i == Num_messages_playing ){
 
  907                 if ( (Playing_messages[i].
id < 
Num_builtin_messages) && (Playing_messages[i].builtin_type == builtin_type) ){
 
  927         if ( i == Num_messages_playing ){
 
  936 #define MESSAGE_GET_HIGHEST             1 
  937 #define MESSAGE_GET_LOWEST                      2 
  952                 } 
else if ( (which == 
MESSAGE_GET_LOWEST) && (Playing_messages[i].priority < priority) ){
 
  995         Assertion(index >= 0, 
"Invalid index passed!");
 
  997         if ( Message_waves[index].
num >= 0) {
 
 1002                 Message_waves[
index].num = -1;
 
 1010         if (Message_waves[index].
num == -1)
 
 1011                 nprintf((
"messaging", 
"Cannot load message wave: %s.  Will not play\n", Message_waves[index].
name));
 
 1020         strcpy_s(truncated_filename, filename);
 
 1021         char *ptr = strchr(truncated_filename, 
'.');
 
 1024         if ((ptr == NULL) || (
stricmp(ptr, 
".ogg") && 
stricmp(ptr, 
".wav")))
 
 1031         for (
unsigned int i = 0; 
i < generic_message_filenames.size(); 
i++)
 
 1033                 if (!
stricmp(generic_message_filenames[
i].c_str(), truncated_filename))
 
 1064                         Message_waves[
index].num = -1;                                  
 
 1068                         p = strchr(filename, 
'_' );
 
 1070                                 mprintf((
"Cannot convert %s to terran command wave -- find Sandeep or Allender\n", Message_waves[index].name));
 
 1078                         strcpy_s( filename, new_filename );
 
 1083                 if ( Message_waves[index].
num == -1 ) {
 
 1105         float   wave_time, anim_time;
 
 1116         wave_time = time/1000.0f;
 
 1120         if ( wave_time >= (anim_time) ) {
 
 1128                 int num_frames_extra;
 
 1129                 num_frames_extra = 
fl2i(fps * (anim_time - wave_time) + 0.5
f);
 
 1130                 if ( num_frames_extra > 0 ) {
 
 1131                         start_frame=rand()%num_frames_extra;
 
 1135         if ( start_frame < 0 ) {
 
 1152         int                             is_death_scream=0, persona_index=-1, rand_index=0;
 
 1172         p = strchr(ani_name, 
'.');                      
 
 1185                 int subhead_selected = 
FALSE;
 
 1197                 if (persona_index >= 0)
 
 1203                                         is_death_scream = 1;
 
 1208                                 sprintf(ani_name, 
"%s%c", temp, 
'a'+rand_index);
 
 1209                                 subhead_selected = 
TRUE;
 
 1214                                 if ( !
strnicmp(ani_name, 
"Head-TP", 7) || !
strnicmp(ani_name, 
"Head-VP", 7) ) {
 
 1215                                         mprintf((
"message '%s' incorrectly assigns a command/largeship persona to a wingman animation!\n", m->
name));
 
 1222                                 sprintf(ani_name, 
"%s%c", temp, 
'a'+rand_index);
 
 1223                                 subhead_selected = 
TRUE;
 
 1225                                 mprintf((
"message '%s' uses an unrecognized persona type\n", m->
name));
 
 1229                 if (!subhead_selected) {
 
 1233                         sprintf(ani_name, 
"%s%c", temp, 
'a'+rand_index);
 
 1234                         mprintf((
"message '%s' with invalid head.  Fix by assigning persona to the message.\n", m->
name));
 
 1236                 nprintf((
"Messaging", 
"playing head %s for %s\n", ani_name, q->
who_from));
 
 1244                 nprintf((
"Messaging", 
"clearing headani data due to name mismatch: (%s) (%s)\n",
 
 1254                 nprintf ((
"messaging", 
"Cannot load message avi %s.  Will not play.\n", ani_name));
 
 1263                         nprintf((
"messaging", 
"killing off any currently playing head animations\n"));
 
 1288         bool builtinMessage = 
false; 
 
 1289         object* sender = NULL;
 
 1303                         int ani_done, wave_done, j;
 
 1306                         if ( Playing_messages[i].play_anim )
 
 1312                         if ( (Playing_messages[i].wave != -1) && (
snd_time_remaining(Playing_messages[i].wave) > 250) )
 
 1320                         if ( (Playing_messages[i].wave != -1) && wave_done ) {
 
 1338                         if ( Playing_messages[i].shipnum != -1 ) {
 
 1342                                         shipnum = Playing_messages[
i].
shipnum;
 
 1360                                 nprintf((
"messaging", 
"Message %d is done playing\n", i));
 
 1367                                 nprintf((
"messaging", 
"Collapsing playing message stack\n"));
 
 1369                                         Playing_messages[j-1] = Playing_messages[j];
 
 1384                         nprintf((
"messaging", 
"Message %s didn't play because it didn't fit into time window.\n", Messages[q->
message_num].name));
 
 1405                 if((MessageQ[idx].min_delay_stamp == -1) || 
timestamp_elapsed(MessageQ[idx].min_delay_stamp)){
 
 1423                 memcpy(&temp, &MessageQ[found], 
sizeof(
message_q));
 
 1426                 for(idx=found; idx>0; idx--){
 
 1427                         memcpy(&MessageQ[idx], &MessageQ[idx-1], 
sizeof(
message_q));
 
 1431                 memcpy(&MessageQ[0], &temp, 
sizeof(
message_q));
 
 1457                         nprintf((
"messaging", 
"Killing all currently playing messages to play unique message\n"));
 
 1468                                         nprintf((
"messaging", 
"Killing all currently playing messages to play high priority builtin\n"));
 
 1475                                         nprintf((
"messaging", 
"playing builtin message (overlap) because priorities match\n"));
 
 1483                                         nprintf((
"messaging", 
"Killing low priority unique messages to play code message\n"));
 
 1512                         if ( (Playing_messages[i].shipnum != -1) && (Playing_messages[i].shipnum == 
Message_shipnum) ){
 
 1527         Message_wave_duration = 0;
 
 1588         if ( !
stricmp(who_from, 
"<none>") ) {
 
 1623         if ( message_num < 0 ) 
return;
 
 1634                         if ( (MessageQ[i].message_num == message_num) && (MessageQ[i].builtin_type == builtin_type) )
 
 1642                 mprintf((
"Message queue already full. Message will not be added!\n"));                                                                          
 
 1655         m_persona = Messages[message_num].persona_index;
 
 1666         strcpy_s(MessageQ[i].who_from, who_from);
 
 1669         if (MessageQ[i].special_message != NULL)
 
 1672                 vm_free(MessageQ[i].special_message);
 
 1690         if ( (m_persona != -1) && (Personas[m_persona].
flags & PERSONA_FLAG_WINGMAN) ) {
 
 1691                 if ( !strstr(who_from, 
".wav") ) {
 
 1717         int i = 0, ship_type, 
count;
 
 1721         if ( shipp != NULL ) {
 
 1755                         if ( Personas[i].
flags & persona_needed)
 
 1776                         i = (rand() % 
count);
 
 1807                 mprintf((
"Filtering bogus mission message!\n"));
 
 1817                 if(Messages[
id].multi_team < 0){
 
 1828                         mprintf((
"Filtering team-based mission message!\n"));
 
 1856                                 who_from = (
char *)data;
 
 1859                                 int m_persona, ship_index;
 
 1863                                 m_persona = Messages[
i].persona_index;
 
 1864                                 if ( m_persona == -1 ) {
 
 1865                                         mprintf((
"Warning:  Message %s has no persona assigned.\n", Messages[i].name));
 
 1873                                 if ( ship_index == -1 ) {
 
 1884                                 shipp = (
ship *)data;
 
 1888                                 who_from = 
"<none>";
 
 1907         nprintf ((
"messaging", 
"Couldn't find message id %s to send to player!\n", 
id ));
 
 1910 #define BUILTIN_MATCHES_TYPE                                    0 
 1911 #define BUILTIN_MATCHES_SPECIES                                 1 
 1912 #define BUILTIN_MATCHES_PERSONA_CHECK_MOOD              2 
 1913 #define BUILTIN_MATCHES_PERSONA_EXCLUDED                3 
 1914 #define BUILTIN_MATCHES_PERSONA                                 4 
 1915 #define BUILTIN_MATCHES_PERSONA_MOOD                    5 
 1927         int i, persona_index = -1, persona_species = -1, message_index = -1, random_selection = -1;
 
 1929         int num_matching_builtins = 0;
 
 1931         int best_match = -1;
 
 1974                 if ( persona_index == -1 )
 
 1975                         nprintf((
"messaging", 
"Couldn't find persona for %s\n", shipp->
ship_name ));    
 
 1985         if (persona_index >= 0) {
 
 1986                 persona_species = Personas[persona_index].
species;
 
 1993                 if ( !
stricmp(Messages[i].name, name) ) {
 
 1999                         if ( (persona_species >= 0) && (Personas[Messages[i].persona_index].species == persona_species) ) {
 
 2006                         if ( (persona_index >= 0) && (Messages[i].persona_index == persona_index) ) {
 
 2013                                 for (
SCP_vector<int>::iterator iter = Messages[i].excluded_moods.begin(); iter != Messages[
i].excluded_moods.end(); ++iter) {
 
 2031                                 num_matching_builtins++;
 
 2036                                 num_matching_builtins = 1;
 
 2040                         matching_builtins.push_back(current_builtin); 
 
 2044         switch (best_match) {
 
 2046                         nprintf((
"MESSAGING", 
"Couldn't find builtin message %s for persona %d with a none excluded mood\n", Builtin_messages[type].name, persona_index));
 
 2047                         if (!Personas[persona_index].substitute_missing_messages) {
 
 2048                                 nprintf((
"MESSAGING", 
"Persona does not allow substitution, skipping message."));
 
 2052                                 nprintf((
"MESSAGING", 
"using an excluded message for this persona\n"));
 
 2055                         nprintf((
"MESSAGING", 
"Couldn't find builtin message %s for persona %d\n", Builtin_messages[type].name, persona_index));
 
 2056                         if (!Personas[persona_index].substitute_missing_messages) {
 
 2057                                 nprintf((
"MESSAGING", 
"Persona does not allow substitution, skipping message."));
 
 2061                                 nprintf((
"MESSAGING", 
"using a message for any persona of that species\n"));
 
 2064                         nprintf((
"MESSAGING", 
"Couldn't find builtin message %s for persona %d\n", Builtin_messages[type].name, persona_index));
 
 2065                         if (!Personas[persona_index].substitute_missing_messages) {
 
 2066                                 nprintf((
"MESSAGING", 
"Persona does not allow substitution, skipping message."));
 
 2070                                 nprintf((
"MESSAGING", 
"looking for message for any persona of any species\n"));
 
 2073                         Error(
LOCATION, 
"Couldn't find any builtin message of type %d\n", type);
 
 2079         random_selection = (
int)(
rand32() % num_matching_builtins) + 1; 
 
 2082         for (i = 0; i < (
int)matching_builtins.size(); i++) {
 
 2083                 if (matching_builtins[i].type_of_match == best_match) {
 
 2085                         if (random_selection == 0) {
 
 2086                                 message_index = matching_builtins[
i].message_index;
 
 2092         Assertion (random_selection == 0, 
"unable to randomly select built in message correctly, still have %d selections left", random_selection); 
 
 2130                 if(multi_target == -1){
 
 2158                 if ( !
stricmp(Personas[i].name, name) )
 
 2182                 Assert(Playing_messages[i].wave >= 0 );
 
 2187                         was_muted = Message_wave_muted;
 
 2189                                 Next_mute_time = 
fl2i(Distort_patterns[Distort_num][Distort_next++] * Message_wave_duration);
 
 2193                                 Message_wave_muted ^= 1;
 
 2196                         if ( Message_wave_muted ) {
 
 2219         int i, j, 
len, run, curr_offset, voice_duration, next_distort;
 
 2226         if ( Message_wave_duration == 0 ) {
 
 2227                 next_distort = 5+
myrand()%5;
 
 2228                 for ( i = 0; i < 
len; i++ ) {
 
 2229                         if ( i == next_distort ) {
 
 2233                                 for ( j = 0; j < run; j++) {
 
 2238                                 next_distort = i + (5+
myrand()%5);
 
 2244         voice_duration = Message_wave_duration;
 
 2250         while (voice_duration > 0) {
 
 2251                 run = 
fl2i(Distort_patterns[Distort_num][Distort_next] * len);
 
 2252                 if (Distort_next & 1) {
 
 2253                         for ( i = curr_offset; i < 
MIN(len, curr_offset+run); i++ ) {
 
 2254                                 if ( text[i] != 
' ' ) 
 
 2264                 voice_duration -= 
fl2i(Distort_patterns[Distort_num][Distort_next]*Message_wave_duration);
 
 2280                 if(Playing_messages[i].play_anim)
 
 2292         mprintf((
"Paging in mission messages\n"));
 
 2298         char *sound_filename;
 
 2301                 if (Messages[i].wave_info.index != -1) {
 
 2302                         sound_filename = Message_waves[Messages[
i].wave_info.index].name;
 
 2320         Messages.push_back(msg);
 
 2330                 if (!strcmp(Messages[
i].name, name)) 
 
 2333                         Messages[
i].persona_index = persona_index;
 
 2334                         Messages[
i].multi_team = multi_team;
 
 2336                         Messages[
i].avi_info.index = -1;
 
 2337                         Messages[
i].wave_info.index = -1;
 
 2343         return add_message(name, message, persona_index, multi_team);
 
 2356         if (other_shipnum < 0)
 
 2357                 return player_comm_state;
 
 2374                         return player_comm_state;
 
void message_queue_message(int message_num, int priority, int timing, char *who_from, int source, int group, int delay, int builtin_type)
 
#define MESSAGE_TIME_IMMEDIATE
 
int timestamp(int delta_ms)
 
#define MY_NET_PLAYER_NUM
 
#define MESSAGE_REARM_ON_WAY
 
SCP_vector< message_extra > Message_avis
 
void message_mission_close()
 
#define MISSION_FLAG_NO_BUILTIN_MSGS
 
int stuff_string_list(SCP_vector< SCP_string > &slp)
 
#define MESSAGE_SOURCE_NONE
 
#define BUILTIN_MATCHES_PERSONA_MOOD
 
int message_anim_is_playing()
 
message_q MessageQ[MAX_MESSAGE_Q]
 
int message_playing_builtin()
 
SCP_vector< game_snd > Snds
 
void message_maybe_distort()
 
int snd_load(game_snd *gs, int allow_hardware_load)
 
#define SHIP_GET_NO_PLAYERS
 
bool Full_color_head_anis
 
int required_string_one_of(int arg_count,...)
Checks for one of any of the given required strings. 
 
void training_mission_shutdown()
 
void message_parse(bool importing_from_fsm)
 
#define MESSAGE_SOURCE_WINGMAN
 
int gameseq_get_state(void)
 
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
int generic_anim_load(generic_anim *ga)
 
char message[MESSAGE_LENGTH]
 
void _cdecl void void _cdecl void _cdecl void _cdecl WarningEx(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
#define GR_NUM_RESOLUTIONS
 
#define PERSONA_FLAG_LARGE
 
#define MESSAGE_ANYTIME_TIMESTAMP
 
int hud_gauge_active(int gauge_index)
Determine if the specified HUD gauge should be displayed. 
 
int message_filter_multi(int id)
 
#define PERSONA_FLAG_COMMAND
 
#define BUILTIN_MATCHES_PERSONA_EXCLUDED
 
int snd_is_playing(int sig)
 
#define Assertion(expr, msg,...)                                                                        
 
int message_persona_name_lookup(char *name)
 
char who_from[NAME_LENGTH]
 
#define PERSONA_FLAG_WINGMAN
 
int comm_between_player_and_ship(int other_shipnum)
 
#define MESSAGE_HIGH_PRAISE
 
void message_calc_anim_start_frame(int time, generic_anim *ani, int reverse)
 
struct message_q message_q
 
GLenum GLuint GLenum GLsizei const GLchar * message
 
std::basic_string< char, std::char_traits< char >, std::allocator< char > > SCP_string
 
#define MAX_COMMAND_HEADS
 
#define MESSAGE_HAMMER_SWINE
 
void message_frequency_parse()
 
void HUD_sourced_printf(int source, const char *format,...)
 
int required_string_either(char *str1, char *str2)
Checks for one of two required strings. 
 
void send_mission_message_packet(int id, char *who_from, int priority, int timing, int source, int builtin_type, int multi_target, int multi_team_filter, int delay)
 
GLenum GLuint GLenum GLsizei const GLchar * buf
 
SCP_vector< message_extra > Message_waves
 
script_state Script_system("FS2_Open Scripting")
 
void generic_anim_unload(generic_anim *ga)
 
char filename[MAX_FILENAME_LEN]
 
iff_info Iff_info[MAX_IFFS]
 
#define COMMAND_WAVE_PREFIX
 
#define MAX_DISTORT_LEVELS
 
SCP_vector< MMessage > Messages
 
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
 
SCP_vector< SCP_string > generic_message_filenames
 
#define MAX_BUILTIN_MESSAGE_TYPES
 
#define MESSAGE_GET_LOWEST
 
#define MAX_PERSONA_TYPES
 
float Master_sound_volume
 
GLboolean GLboolean GLboolean GLboolean a
 
#define SF2_NO_DEATH_SCREAM
 
void message_kill_all(int kill_all)
 
#define BUILTIN_MATCHES_PERSONA_CHECK_MOOD
 
#define PERSONA_FLAG_SUPPORT
 
#define MAX_WINGMAN_HEADS
 
#define strnicmp(s1, s2, n)
 
#define SF2_HIDE_SHIP_NAME
 
int message_get_priority(int which)
 
void stuff_string(char *outstr, int type, int len, char *terminators)
 
#define MESSAGE_REARM_REQUEST
 
int ship_get_random_player_wing_ship(int flags, float max_dist, int persona_index, int get_first, int multi_team)
 
void message_translate_tokens(char *buf, char *text)
 
#define MESSAGE_SOURCE_SHIP
 
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
 
#define HEAD_PREFIX_STRING
 
union MissionMessage::@254 avi_info
 
int required_string(const char *pstr)
 
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
 
void message_mission_shutdown()
 
int optional_string(const char *pstr)
 
#define MESSAGE_GET_HIGHEST
 
bool message_play_wave(message_q *q)
 
#define PERSONA_FLAG_USED
 
void insertion_sort(void *array_base, size_t array_size, size_t element_size, int(*fncompare)(const void *, const void *))
 
void read_file_text(const char *filename, int mode, char *processed_text, char *raw_text)
 
void SetHookObject(char *name, object *objp)
 
void fsspeech_play(int type, const char *text)
 
int Valid_builtin_message_types[MAX_BUILTIN_MESSAGE_TYPES]
 
#define MESSAGE_PRIORITY_LOW
 
builtin_message Builtin_messages[]
 
void message_maybe_distort_text(char *text, int shipnum)
 
#define COMMAND_HEAD_PREFIX
 
int snd_get_duration(int snd_id)
 
object Objects[MAX_OBJECTS]
 
int message_playing_unique()
 
int hud_disabled()
Checks if HUD disabled. 
 
bool change_message(char *name, char *message, int persona_index, int multi_team)
 
void stuff_boolean(int *i, bool a_to_eol)
 
#define MAX_DISTORT_PATTERNS
 
void message_remove_from_queue(message_q *q)
 
bool end_string_at_first_hash_symbol(char *src)
 
#define MAX_PLAYING_MESSAGES
 
#define BUILTIN_MATCHES_SPECIES
 
int hud_communications_state(ship *sp)
 
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
#define SF2_NO_BUILTIN_MESSAGES
 
void reset_parse(char *text)
 
GLuint const GLchar * name
 
void hud_target_last_transmit_add(int ship_num)
 
union MissionMessage::@255 wave_info
 
int RunCondition(int condition, char format='\0', void *data=NULL, class object *objp=NULL, int more_data=0)
 
#define _strnicmp(s1, s2, n)
 
pmessage Playing_messages[MAX_PLAYING_MESSAGES]
 
#define vm_realloc(ptr, size)
 
char command_sender[NAME_LENGTH]
 
int multi_message_should_broadcast(int type)
 
bool sexp_replace_variable_names_with_values(char *text, int max_len)
 
GLboolean GLboolean GLboolean b
 
void message_kill_playing(int message_num)
 
#define MESSAGE_PRIORITY_HIGH
 
#define GENERIC_ANIM_DIRECTION_NOLOOP
 
bool add_message(char *name, char *message, int persona_index, int multi_team)
 
bool fsspeech_play_from(int type)
 
int HUD_team_get_source(int team)
 
GLdouble GLdouble GLdouble GLdouble q
 
int add_avi(char *avi_name)
 
#define MESSAGE_SOON_TIMESTAMP
 
#define MQF_CONVERT_TO_COMMAND
 
int message_queue_priority_compare(const void *a, const void *b)
 
struct matching_builtin matching_builtin
 
int snd_time_remaining(int handle)
 
void ship_scream(ship *sp)
 
#define HUD_SOURCE_TERRAN_CMD
 
#define MESSAGE_REARM_PRIMARIES
 
#define MESSAGE_TIME_ANYTIME
 
void message_send_builtin_to_player(int type, ship *shipp, int priority, int timing, int group, int delay, int multi_target, int multi_team_filter)
 
bool message_filename_is_generic(char *filename)
 
void generic_anim_init(generic_anim *ga)
 
bool substitute_missing_messages
 
int message_get_persona(ship *shipp)
 
void RemHookVars(unsigned int num,...)
 
#define MULTIPLAYER_MASTER
 
void message_send_unique_to_player(char *id, void *data, int m_source, int priority, int group, int delay)
 
void snd_set_volume(int sig, float volume)
 
SCP_vector< ship_info > Ship_info
 
GLenum GLsizei GLenum GLenum const GLvoid * data
 
#define MESSAGE_WINGMAN_SCREAM
 
#define timestamp_elapsed(stamp)
 
SCP_vector< species_info > Species_info
 
void SetHookVar(char *name, char format, void *data=NULL)
 
#define MISSION_FLAG_NO_BUILTIN_COMMAND
 
#define SF2_ALWAYS_DEATH_SCREAM
 
#define BUILTIN_MATCHES_TYPE
 
void hud_stuff_ship_class(char *ship_class_text, ship *shipp)
 
GLsizei GLsizei GLchar * source
 
void message_queue_process()
 
int Default_command_persona
 
#define IFFF_WING_NAME_HIDDEN
 
SCP_vector< SCP_string > Builtin_moods
 
char filename[MAX_FILENAME_LEN]
 
void message_play_anim(message_q *q)
 
int ship_name_lookup(const char *name, int inc_players)
 
SCP_vector< int > excluded_moods
 
#define SF_SHIP_HAS_SCREAMED
 
void hud_stuff_ship_callsign(char *ship_callsign_text, ship *shipp)
 
#define MESSAGE_SOURCE_SPECIAL
 
#define BUILTIN_MATCHES_PERSONA
 
#define MESSAGE_SOURCE_COMMAND
 
char * Persona_type_names[MAX_PERSONA_TYPES]
 
int message_playing_specific_builtin(int builtin_type)
 
int generic_anim_stream(generic_anim *ga)
 
int Head_coords[GR_NUM_RESOLUTIONS][2]
 
sound to indicate voice is about to start 
 
#define timestamp_valid(stamp)
 
void message_load_wave(int index, const char *filename)
 
char ship_name[NAME_LENGTH]
 
void message_mission_free_avi(int m_index)
 
int add_wave(const char *wave_name)
 
#define MESSAGE_TIME_SOON
 
void message_pagein_mission_messages()
 
void message_moods_parse()
 
int snd_play_raw(int soundnum, float pan, float vol_scale, int priority)
 
#define MESSAGE_IMMEDIATE_TIMESTAMP