39 #define DEFAULT_MSG_TIMEOUT             (8 * 1000)              // number of seconds * 1000 to get milliseconds 
   40 #define MSG_KEY_EAT_TIME                        (300) 
  111 #define MAX_MENU_ITEMS          50                              // max number of items in the menu 
  112 #define MAX_MENU_DISPLAY        10                              // max number that can be displayed 
  131 #define MAX_KEYS_NO_SCROLL      10 
  132 #define MAX_KEYS_USED           12              // maximum number of keys used for the messaging system 
  139 int keys_used[] = {     
KEY_1, 
KEY_2, 
KEY_3, 
KEY_4, 
KEY_5, 
KEY_6, 
KEY_7, 
KEY_8, 
KEY_9, 
KEY_0,
 
  147 #define NUM_COMM_ORDER_TYPES                    6 
  149 #define TYPE_SHIP_ITEM                                  0 
  150 #define TYPE_WING_ITEM                                  1 
  151 #define TYPE_ALL_FIGHTERS_ITEM                  2 
  152 #define TYPE_REINFORCEMENT_ITEM                 3 
  153 #define TYPE_REPAIR_REARM_ITEM                  4 
  154 #define TYPE_REPAIR_REARM_ABORT_ITEM    5 
  198         const char *temp_comm_order_types[] =
 
  202                 XSTR(
"All Fighters", 295),
 
  203                 XSTR(
"Reinforcements", 296),
 
  204                 XSTR(
"Rearm/Repair Subsys", 297),
 
  205                 XSTR(
"Abort Rearm", 298)
 
  215                 strcpy_s(Comm_orders[i].
name, 
XSTR(Sexp_comm_orders[i].name, Sexp_comm_orders[i].xstring));
 
  216                 Comm_orders[
i].
item = Sexp_comm_orders[
i].
item;
 
  227                 if (Comm_orders[i].item == item)
 
  228                         return Comm_orders[
i].
name;
 
  336         Assertion(shipp != 
nullptr, 
"hud_squadmsg_ship_valid() was passed a null shipp pointer; get a coder!\n");
 
  397                 Assertion(shipp->
objnum != -1, 
"hud_squadmsg_count_ships() discovered that ship #%d ('%s') has an objnum of -1. Since the ship was retrieved from its object number (%d), this should be impossible; get a coder!\n", objp->
instance, shipp->
ship_name, so->
objnum);
 
  453                 if (
Ships[ship_num].orders_accepted == 0)
 
  503                 if ( j < MAX_STARTING_WINGS )
 
  555         return num_keys_used;
 
  562         int i, key_found, num_keys_used;
 
  570                         for (i = 0; i < num_keys_used; i++ ) {
 
  580         for (i = 0; i < num_keys_used; i++ ) {
 
  605         int k, 
i, num_keys_used;
 
  620         for ( i = 0; i < num_keys_used; i++ ) {
 
  673         int multi_player_num;
 
  674         int multi_player_team; 
 
  680                 multi_player_num = -1;
 
  681                 multi_player_team = -1;
 
  685                 Assert(multi_player_num != -1);
 
  686                 if (multi_player_num != -1) {
 
  690                         multi_player_team = -1;
 
  701                         if ( robjnum != -1 ) {
 
  706                                 if ( robjnum != -1) {
 
  807         int target_objnum, 
i;
 
  817                         if ( Comm_orders[i].item == order )
 
  820                 Assert( i < NUM_COMM_ORDER_ITEMS );
 
  831         if ( target_objnum == -1 ) {
 
  835         objp = &
Objects[target_objnum];
 
  925         if ( player_num != -1 )
 
  958                 shipp = &
Ships[shipnum];
 
  961                 if ( shipp->
team != ordering_shipp->
team )
 
  974                 if ( 
Wings[i].current_count > 0 ) {
 
 1046 #define OVERRIDE_PROTECT_SHIP_TYPE      (SIF_FIGHTER|SIF_BOMBER|SIF_FREIGHTER|SIF_TRANSPORT) 
 1056         int ai_mode, ai_submode;                                        
 
 1057         char *target_shipname;                                          
 
 1059         int target_team, ship_team;                             
 
 1060         ship *ordering_shipp;
 
 1062         int special_index = -1;
 
 1063         int message_team_filter = -1;
 
 1080         ai_submode = -1234567;
 
 1083         if ( player_num != -1 ){
 
 1085                 message_team_filter = Net_players[player_num].p_info.team; 
 
 1099                 target_shipname = NULL;
 
 1113                 switch ( command ) {                                                                    
 
 1116                                 Assert( target_shipname );
 
 1117                                 Assert( ship_team != target_team );
 
 1135                         Assert( target_shipname );
 
 1136                         Assert( ship_team != target_team );
 
 1149                         Assert( target_shipname );
 
 1150                         Assert( ship_team != target_team );
 
 1163                         Assert( target_shipname );
 
 1164                         Assert( ship_team != target_team );
 
 1175                         special_index = ai_submode; 
 
 1180                         Assert( target_shipname );
 
 1181                         Assert( ship_team != target_team );
 
 1200                         Assert( target_shipname );
 
 1201                         Assert( ship_team == target_team );
 
 1209                         Assert( target_shipname );
 
 1210                         Assert( ship_team != target_team );
 
 1219                         target_shipname = ordering_shipp->
ship_name;
 
 1227                         target_shipname = ordering_shipp->
ship_name;
 
 1239                         target_shipname = NULL;
 
 1283                                 target_shipname = ordering_shipp->
ship_name;
 
 1300                         Assert(ai_submode != -1234567);
 
 1327         return send_message;
 
 1339         int ai_mode, ai_submode;                                        
 
 1340         char *target_shipname;                                          
 
 1342         int target_team, wing_team;                             
 
 1343         ship *ordering_shipp;
 
 1345         int special_index = -1;
 
 1346         int message_team_filter = -1;
 
 1363         ai_submode = -1234567;
 
 1366         if ( player_num != -1 ) {
 
 1368                 message_team_filter = Net_players[player_num].p_info.team; 
 
 1384                 target_shipname = NULL;
 
 1400                 switch ( command ) {                                                                    
 
 1403                                 Assert( target_shipname );
 
 1404                                 Assert( wing_team != target_team );
 
 1423                         Assert( target_shipname );
 
 1424                         Assert( wing_team != target_team );
 
 1432                         Assert( target_shipname );
 
 1433                         Assert( wing_team != target_team );
 
 1441                         Assert( target_shipname );
 
 1442                         Assert( wing_team != target_team );
 
 1448                         special_index = ai_submode; 
 
 1454                         Assert( target_shipname );
 
 1455                         Assert( wing_team == target_team );
 
 1463                         Assert( target_shipname );
 
 1464                         Assert( wing_team != target_team );
 
 1473                         target_shipname = ordering_shipp->
ship_name;
 
 1481                         target_shipname = ordering_shipp->
ship_name;
 
 1493                         target_shipname = NULL;
 
 1517                         Assert(ai_submode != -1234567);
 
 1541         if ( send_message ) {
 
 1548                 if(ship_num == -1 && (
Game_mode & GM_MULTIPLAYER)){
 
 1556                 if ( ship_num != -1 ) {
 
 1562         return message_sent;
 
 1598                         if ( p_objp != NULL ) {
 
 1635                         MsgItems[i].active = 0;
 
 1831         if ( i == Num_wings ) {
 
 1904                                 if ( p_objp != NULL ) {
 
 1961         int i, orders, default_orders;
 
 1974                 orders = default_orders;
 
 1982                 if ( default_orders & Comm_orders[i].item ) {
 
 1988                         if ( orders & Comm_orders[i].item )
 
 2005                                 int partial_accept, all_accept;                 
 
 2007                                 all_accept = Comm_orders[
i].
item;
 
 2024                                 if ( !all_accept ) {
 
 2026                                         if ( partial_accept ) {
 
 2061         int default_orders, 
i, orders, shipnum;
 
 2072                 default_orders |= orders;
 
 2078         Assertion(shipnum >= 0, 
"Special ship (%d) for wing '%s' has a negative ship_index (%d). This should not happen; get a coder!\n", wingp->
special_ship, wingp->
name, shipnum);
 
 2083                 if ( default_orders & Comm_orders[i].item ) {
 
 2091                         if ( orders & Comm_orders[i].item )
 
 2166         Squadmsg_history.clear();
 
 2395         if (!strcmp(name, 
"All Fighters")) {
 
 2405         Squadmsg_history.push_back(*latest_order); 
 
 2406         delete latest_order;
 
 2418         else if (order_source == -1) {
 
 2430         if (strcmp(to, 
"<all fighters>")) {
 
 2435         if (target_name != NULL) {
 
 2446                         order = Comm_orders[
i].
item;
 
 2451                 if (!
stricmp(order_name, 
"Attack my target"))
 
 2454                         order = Comm_orders[
i].
item;
 
 2459         for (i = 0; i < (
int)Squadmsg_history.size(); i++) {
 
 2460                 if (Squadmsg_history[i].order == order) {
 
 2461                         if (ship_or_wing == Squadmsg_history[i].order_to) {
 
 2463                                         if ((!timestamp) || (Squadmsg_history[
i].order_time + 
i2f(timestamp) >= 
Missiontime) ) {        
 
 2466                                                         if ((
source != -1) && (Squadmsg_history[
i].order_from != 
source)) {
 
 2473                                                         if (special_argument == NULL) {
 
 2485                                                         if (Squadmsg_history[i].special_index != subsys_index) {
 
 2584         bool draw_bright = 
false;
 
 2632         int bx, 
by, sx, sy, 
i, nitems, none_valid, messaging_allowed;
 
 2664         sy = 
position[1] + Item_start_offsets[1];
 
 2671         messaging_allowed = 1;
 
 2674                 messaging_allowed = 0;
 
 2677         for ( i = 0; i < nitems; i++ ) {
 
 2751         if ( messaging_allowed ) {
 
virtual void initialize()
 
char Parse_names[MAX_SHIPS+MAX_WINGS][NAME_LENGTH]
 
#define MESSAGE_PRIORITY_NORMAL
 
#define REARM_REPAIR_ME_ITEM
 
#define SHIP_GET_UNSILENCED
 
#define SQUAD_MSG_REINFORCEMENT
 
int timestamp(int delta_ms)
 
#define MULTIPLAYER_CLIENT
 
#define MESSAGE_REARM_ON_WAY
 
#define SM_MODE_ALL_FIGHTERS
 
model_subsystem * system_info
 
weapon Weapons[MAX_WEAPONS]
 
int hud_squadmsg_get_total_keys()
 
int ai_abort_rearm_request(object *requester_objp)
 
#define LOG_PLAYER_CALLED_FOR_REARM
 
void initBitmaps(char *fname_top, char *fname_middle, char *fname_bottom)
 
void initPgDnOffsets(int x, int y)
 
void mission_log_add_entry(int type, char *pname, char *sname, int info_index)
 
int is_instructor(object *objp)
 
#define PROTECT_TARGET_ITEM
 
GLfloat GLfloat GLfloat GLfloat h
 
void hud_squadmsg_rearm_shortcut()
 
weapon_info Weapon_info[MAX_WEAPON_TYPES]
 
SCP_vector< game_snd > Snds
 
mmode_item MsgItems[MAX_MENU_ITEMS]
 
int hud_query_order_issued(char *to, char *order_name, char *target_name, int timestamp, char *from, char *special_argument)
 
struct key_store key_store
 
GLsizei const GLfloat * value
 
void ai_add_ship_goal_player(int type, int mode, int submode, char *shipname, ai_info *aip)
 
#define SF2_NO_SUBSPACE_DRIVE
 
void ai_add_wing_goal_player(int type, int mode, int submode, char *shipname, int wingnum)
 
void setGaugeColor(int bright_index=-4)
 
void hud_squadmsg_call_reinforcement(int reinforcement_num, int player_num)
 
#define SQUADMSG_HISTORY_ADD_ENTRY
 
#define NUM_COMM_ORDER_ITEMS
 
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
void hud_init_squadmsg(void)
 
LOCAL int Msg_mode_timestamp
 
#define GR_NUM_RESOLUTIONS
 
int hud_squadmsg_send_wing_command(int wingnum, int command, int send_message, int update_history, int player_num)
 
general failure sound for any event 
 
#define AI_GOAL_STAY_NEAR_SHIP
 
#define STAY_NEAR_TARGET_ITEM
 
#define AI_GOAL_CHASE_ANY
 
#define WF_RESET_REINFORCEMENT
 
void hud_squadmsg_do_mode(int mode)
 
#define NETPLAYER_IS_OBSERVER(player)
 
#define STAY_NEAR_ME_ITEM
 
LOCAL int Msg_eat_key_timestamp
 
#define MAX_KEYED_TARGETS
 
#define CAPTURE_TARGET_ITEM
 
#define SHIP_INDEX(shipp)
 
void hud_squadmsg_type_select()
 
ai_info Ai_info[MAX_AI_INFO]
 
#define Assertion(expr, msg,...)                                                                        
 
#define END_OF_LIST(head)
 
#define AI_GOAL_DISARM_SHIP
 
ship_subsys * targeted_subsys
 
void initBottomBgOffset(int offset)
 
GLenum GLuint GLenum GLsizei const GLchar * message
 
int Menu_pgup_coords[GR_NUM_RESOLUTIONS][2]
 
#define MESSAGE_ALL_FIGHTERS
 
#define ENEMY_TARGET_MESSAGES
 
#define DEFAULT_MSG_TIMEOUT
 
#define HUD_OBJECT_SQUAD_MSG
 
void HUD_sourced_printf(int source, const char *format,...)
 
ship_subsys_info subsys_info[SUBSYSTEM_MAX]
 
#define TYPE_REPAIR_REARM_ABORT_ITEM
 
int multi_msg_eval_wing_squadmsg(int wingnum, int command, ai_info *aif, int player_num)
 
int bm_load_animation(const char *real_filename, int *nframes, int *fps, int *keyframe, int can_drop_frames, int dir_type)
Loads a bitmap sequance so we can draw with it. 
 
int Mbox_item_h[GR_NUM_RESOLUTIONS]
 
#define AIG_TYPE_PLAYER_SHIP
 
int hud_support_find_closest(int objnum)
Locate the closest support ship which is trying to dock with player. 
 
reinforcements Reinforcements[MAX_REINFORCEMENTS]
 
#define SM_MODE_WING_SELECT
 
#define DISARM_TARGET_ITEM
 
void hud_squadmsg_page_down()
 
int hud_squadmsg_wing_valid(wing *wingp)
 
#define IGNORE_TARGET_ITEM
 
int key_down_count(int scancode)
 
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
 
#define DEPART_AT_DOCK_BAY
 
key_store key_save[MAX_KEYS_USED]
 
#define ATTACK_TARGET_ITEM
 
p_object * mission_parse_get_arrival_ship(const char *name)
Returns the parse object on the ship arrival list associated with the given name. ...
 
void initItemHeight(int h)
 
void hud_squadmsg_wing_select()
 
int ship_get_reinforcement_team(int r_index)
 
void render(float frametime)
 
#define ENGAGE_ENEMY_ITEM
 
#define TYPE_REINFORCEMENT_ITEM
 
bool hud_squadmsg_exist_fighters()
 
squadmate message menu disappears 
 
SCP_vector< squadmsg_history > Squadmsg_history
 
void hud_squadmsg_ship_command()
 
#define WF_WING_DEPARTING
 
#define MAX_STARTING_WINGS
 
void hud_squadmsg_msg_all_fighters()
 
void send_player_order_packet(int type, int index, int cmd)
 
void hud_add_issued_order(char *name, int order)
 
void hud_squadmsg_send_to_all_fighters(int command, int player_num)
 
#define TYPE_REPAIR_REARM_ITEM
 
void hud_enemymsg_toggle()
 
#define HUD_SOURCE_HIDDEN
 
#define MESSAGE_DISABLE_TARGET
 
sexp_com_order Sexp_comm_orders[]
 
int snd_play(game_snd *gs, float pan, float vol_scale, int priority, bool is_voice_msg)
 
void initItemStartOffsets(int x, int y)
 
int Mbox_top_coords[GR_NUM_RESOLUTIONS][2]
 
#define FRIENDLY_TARGET_MESSAGES
 
#define AIG_TYPE_PLAYER_WING
 
#define DISABLE_TARGET_ITEM
 
LOCAL int Msg_target_objnum
 
float aggregate_current_hits
 
struct squadmsg_history squadmsg_history
 
int ship_get_random_ship_in_wing(int wingnum, int flags, float max_dist, int get_first)
 
void hud_squadmsg_repair_rearm_abort(int toggle_state, object *obj)
 
int multi_msg_eval_ship_squadmsg(int shipnum, int command, ai_info *aif, int player_num)
 
#define OVERRIDE_PROTECT_SHIP_TYPE
 
#define AIF_AWAITING_REPAIR
 
void renderString(int x, int y, const char *str)
 
#define SM_MODE_REPAIR_REARM
 
#define AI_GOAL_IGNORE_NEW
 
bool ship_useful_for_departure(int shipnum, int path_mask)
 
GLint GLint GLint GLint GLint x
 
object Objects[MAX_OBJECTS]
 
void initMiddleFrameStartOffsetY(int y)
 
#define SQUADMSG_HISTORY_NO_UPDATE
 
int hud_disabled()
Checks if HUD disabled. 
 
comm_order Comm_orders[NUM_COMM_ORDER_ITEMS]
 
int get_parse_name_index(const char *name)
 
const char * XSTR(const char *str, int index)
 
#define WF_DEPARTURE_ORDERED
 
int mission_is_repair_scheduled(object *objp)
 
#define SM_MODE_TYPE_SELECT
 
void hud_init_comm_orders()
 
int is_support_allowed(object *objp, bool do_simple_check)
 
bool end_string_at_first_hash_symbol(char *src)
 
#define SM_MODE_WING_COMMAND
 
int hud_squadmsg_read_key(int k)
 
#define P_SF_REINFORCEMENT
 
int hud_communications_state(ship *sp)
 
void hud_squadmsg_start()
 
#define SM_MODE_SHIP_SELECT
 
void initPgUpOffsets(int x, int y)
 
void hud_squadmsg_shortcut(int command)
 
int wing_name_lookup(const char *name, int ignore_count)
 
#define SF2_NO_BUILTIN_MESSAGES
 
int Starting_wings[MAX_STARTING_WINGS]
 
#define SM_MODE_REPAIR_REARM_ABORT
 
#define AIF_BEING_REPAIRED
 
#define MAX_KEYS_NO_SCROLL
 
int hud_squadmsg_is_target_order_valid(int order, int find_order, ai_info *aip=NULL)
 
GLuint const GLchar * name
 
int hud_squadmsg_send_ship_command(int shipnum, int command, int send_message, int update_history, int player_num)
 
int Mbox_bmap_coords[GR_NUM_RESOLUTIONS][2]
 
#define SM_MODE_REINFORCEMENTS
 
void initHeaderOffsets(int x, int y)
 
char Squad_msg_title[256]
 
void startFlashPageScroll(int duration=1400)
 
int ai_issue_rearm_request(object *requester_objp)
 
#define LOG_PLAYER_CALLED_FOR_REINFORCEMENT
 
int hud_squadmsg_do_frame()
 
char Comm_order_types[NUM_COMM_ORDER_TYPES][NAME_LENGTH]
 
#define AI_GOAL_KEEP_SAFE_DISTANCE
 
float frand()
Return random value in range 0.0..1.0- (1.0- means the closest number less than 1.0) 
 
int hud_squadmsg_can_rearm(ship *shipp)
 
#define AI_GOAL_DISABLE_SHIP
 
void bm_page_in_aabitmap(int bitmapnum, int nframes)
Marks a texture as being used for this level, and is anti-aliased. 
 
#define KEEP_SAFE_DIST_ITEM
 
struct mmode_item mmode_item
 
#define MESSAGE_REARM_WARP
 
void hud_squadmsg_repair_rearm(int toggle_state, object *objp)
 
int Menu_pgdn_coords[GR_NUM_RESOLUTIONS][2]
 
#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)
 
int hud_squadmsg_hotkey_select(int k)
 
LOCAL ship_subsys * Msg_targeted_subsys
 
void hud_squadmsg_save_keys(int do_scroll)
 
char subobj_name[MAX_NAME_LEN]
 
void hud_squadmsg_wing_command()
 
#define SF_DEPARTURE_ORDERED
 
#define MULTIPLAYER_MASTER
 
void HUD_reset_clip()
Like gr_reset_clip() only it accounts for HUD jittering. 
 
ubyte keyd_pressed[NUM_KEYS]
 
SCP_vector< ship_info > Ship_info
 
#define AI_GOAL_CHASE_WEAPON
 
#define MESSAGE_DISARM_TARGET
 
void gamesnd_play_error_beep()
 
#define timestamp_elapsed(stamp)
 
int ship_get_default_orders_accepted(ship_info *sip)
 
#define TYPE_ALL_FIGHTERS_ITEM
 
GLsizei GLsizei GLuint * obj
 
int hud_squadmsg_count_ships(int add_to_menu)
 
#define TBOX_FLASH_INTERVAL
 
void renderPrintf(int x, int y, const char *format,...)
 
int hud_squadmsg_enemies_present()
 
#define STI_AI_ACCEPT_PLAYER_ORDERS
 
int hud_squadmsg_count_wings(int add_to_menu)
 
int Item_start_offsets[2]
 
GLsizei GLsizei GLchar * source
 
int hud_squadmsg_get_key()
 
GLuint GLdouble GLdouble GLint GLint order
 
void hud_update_last_order(char *target, int order_source, int special_index)
 
#define MESSAGE_ATTACK_TARGET
 
int ship_index[MAX_SHIPS_PER_WING]
 
#define NUM_COMM_ORDER_TYPES
 
#define SQUADMSG_HISTORY_UPDATE
 
int ship_get_subsys_index(ship *sp, char *ss_name, int error_bypass)
 
squadmate message menu appears 
 
htarget_list keyed_targets[MAX_KEYED_TARGETS]
 
void hud_squadmsg_ship_select()
 
#define DISABLE_SUBSYSTEM_ITEM
 
int ship_name_lookup(const char *name, int inc_players)
 
bool maybeFlashPageScroll(bool flash_fast=false)
 
int multi_can_message(net_player *p)
 
#define ABORT_REARM_REPAIR_ITEM
 
int Middle_frame_start_offset_y
 
void gamesnd_play_iface(int n)
 
#define AI_GOAL_DESTROY_SUBSYSTEM
 
int Mbox_item_xoffset[GR_NUM_RESOLUTIONS]
 
void hud_squadmsg_page_up()
 
#define WIF3_FIGHTER_INTERCEPTABLE
 
int hud_disabled_except_messages()
Like hud_disabled(), except messages are still drawn. 
 
int multi_find_player_by_object(object *objp)
 
net_player Net_players[MAX_PLAYERS]
 
#define PLAYER_FLAGS_MSG_MODE
 
void hud_squadmsg_toggle()
 
#define AI_GOAL_FORM_ON_WING
 
char ship_name[NAME_LENGTH]
 
int hud_squadmsg_ship_order_valid(int shipnum, int order)
 
SCP_vector< ship_type_info > Ship_types
 
void player_set_next_all_alone_msg_timestamp()
 
#define SM_MODE_SHIP_COMMAND
 
#define MESSAGE_NO_TARGET
 
char * comm_order_get_text(int item)
 
bool hud_squadmsg_ship_valid(ship *shipp, object *objp)
 
int hud_squadmsg_reinforcements_available(int team)
 
void hud_squadmsg_reinforcement_select()
 
#define MESSAGE_TIME_SOON
 
hud_frames Mbox_gauge[NUM_MBOX_FRAMES]
 
void renderBitmap(int x, int y)
 
void initItemOffsetX(int x)