35 #define MAX_TRAINING_MESSAGE_LINES              10 
   36 #define TRAINING_MESSAGE_WINDOW_WIDTH   266 
   37 #define TRAINING_LINE_WIDTH                     250  // width in pixels of actual text 
   38 #define TRAINING_TIMING                                 150  // milliseconds per character to display messages 
   39 #define TRAINING_TIMING_BASE                    1000  // Minimum milliseconds to display any message 
   40 #define TRAINING_OBJ_WND_WIDTH          170     // number of pixels wide window is. 
   41 #define TRAINING_OBJ_LINE_WIDTH         150     // number of pixels wide text can be 
   42 #define TRAINING_OBJ_LINES                              50              // number of lines to track in objective list 
   43 #define TRAINING_OBJ_DISPLAY_LINES      5               // only display this many lines on screen max 
   44 #define MAX_TRAINING_MESSAGE_MODS                       20 
   45 #define TRAINING_MESSAGE_QUEUE_MAX                      40 
   47 #define TRAINING_OBJ_STATUS_UNKNOWN             (1 << 28)       // directive status is unknown 
   48 #define TRAINING_OBJ_STATUS_KNOWN               (1 << 29)       // directive status is known (satisfied or failed) 
   49 #define TRAINING_OBJ_LINES_KEY                  (1 << 30)       // flag indicating line describes the key associated with objective 
   50 #define TRAINING_OBJ_LINES_EVENT_STATUS_MASK (TRAINING_OBJ_STATUS_KNOWN | TRAINING_OBJ_STATUS_UNKNOWN) 
   52 #define TRAINING_OBJ_LINES_MASK(n)      (Training_obj_lines[n] & 0xffff) 
   54 #define TMMOD_NORMAL    0 
  111 #define NUM_DIRECTIVE_GAUGES                    3 
  113 static int Directive_frames_loaded = 0;
 
  115 #define DIRECTIVE_H                                             9 
  116 #define DIRECTIVE_X                                             5 
  117 #define NUM_DIRECTIVE_COORDS                    3 
  118 #define DIRECTIVE_COORDS_TOP                    0 
  119 #define DIRECTIVE_COORDS_MIDDLE         1 
  120 #define DIRECTIVE_COORDS_TITLE          2 
  227         char buf[256], *second_line;
 
  254         for (i=0; i<
end; i++) {
 
  302                 Assert( second_line != buf );
 
  358                 Training_message_queue[i].special_message = NULL;
 
  361         Directive_frames_loaded = 1;
 
  396 #define MIN_SATISFIED_TIME              5 
  397 #define MIN_FAILED_TIME                 7 
  414         int num_offset_events = 0;
 
  415         for (i=0; i<
offset; i++) {
 
  446         if (num_offset_events == 0) {
 
  480         int slot_idx, unkn_vis, last_directive;
 
  482         for (i=0; i<num_offset_events; i++) {
 
  485                 for (unkn_vis=offset-1; unkn_vis>=0; unkn_vis--) {
 
  503                 for (
int j=slot_idx; j>0; j--) {
 
  525         int i, event_idx, event_status;
 
  541                                 if (i == Training_obj_num_lines) {
 
  548                                                 Training_obj_num_lines--;
 
  566                                                 if (i == Training_obj_num_lines) {
 
  573                                                                 Training_obj_num_lines--;
 
  581                                                 if (i < Training_obj_num_lines) {
 
  582                                                         for (; i<Training_obj_num_lines - 1; i++) {
 
  585                                                         Training_obj_num_lines--;
 
  617                 if (Training_message_queue[i].special_message != NULL)
 
  619                         vm_free(Training_message_queue[i].special_message);
 
  648         char temp[40], *toke1, *toke2, *ptr;
 
  652         toke1 = strchr(text, 
'$');
 
  653         toke2 = strchr(text, 
'#');
 
  654         while (toke1 || toke2) {  
 
  655                 if (!toke2 || (toke1 && (toke1 < toke2))) {  
 
  656                         strncpy(buf, text, toke1 - text + 1);  
 
  657                         buf += toke1 - text + 1;
 
  660                         toke2 = strchr(text, 
'$');
 
  661                         if (!toke2 || ((toke2 - text) == 0))  
 
  665                         if ( ((toke2 - text) < 0) || ((toke2 - text) >= (
ptr_s)
sizeof(temp)) ) {
 
  668                                 strncpy(temp, text, toke2 - text);  
 
  669                                 temp[toke2 - text] = 0;  
 
  675                                                                 XSTR( 
"Warning\nYou have no control bound to the action \"%s\".  You must do so before you can continue with your training.", 426),
 
  694                         strncpy(buf, text, toke2 - text + 1);  
 
  695                         buf += toke2 - text + 1;
 
  698                         toke1 = strchr(text, 
'#');
 
  699                         if (!toke1 || ((toke1 - text) == 0))  
 
  703                         if ( ((toke1 - text) < 0) || ((toke1 - text) >= (
ptr_s)
sizeof(temp)) ) {
 
  706                                 strncpy(temp, text, toke1 - text);  
 
  707                                 temp[toke1 - text] = 0;  
 
  718                 toke1 = strchr(text, 
'$');
 
  719                 toke2 = strchr(text, 
'#');
 
  792                                 nprintf((
"Warning", 
"Cannot load message wave: %s.  Will not play\n", 
Message_waves[index].name));
 
  831         if (special_message == NULL)
 
  873                         if (m >= Num_messages)
 
  905         if (Training_message_queue[idx].special_message != NULL)
 
  907                 vm_free(Training_message_queue[idx].special_message);
 
  913                 Training_message_queue[j - 1] = Training_message_queue[j];
 
  916         Training_message_queue_count--;
 
  934         if ( iship_num != -1 )  
 
 1062                 y = 
position[1] + i * height + height / 2 + 1;
 
 1072                                 mode = Training_message_mods[count++].
mode;
 
 1110                         Training_message_mods[
count].
pos = dest;
 
 1118                         Training_message_mods[
count].
pos = dest;
 
 1128                 Training_message_mods[
count].
pos = NULL;
 
int timestamp(int delta_ms)
 
training_message_mods Training_message_mods[MAX_TRAINING_MESSAGE_MODS]
 
#define PLAYER_FLAGS_MATCH_TARGET
 
void message_training_update_frame()
 
GLfloat GLfloat GLfloat GLfloat h
 
#define NUM_DIRECTIVE_GAUGES
 
int Training_message_timestamp
 
int snd_load(game_snd *gs, int allow_hardware_load)
 
void message_training_setup(int m, int length, char *special_message)
 
void training_mission_shutdown()
 
int message_play_training_voice(int index)
 
void setGaugeColor(int bright_index=-4)
 
int Training_message_method
 
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
 
int Training_line_lengths[MAX_TRAINING_MESSAGE_LINES]
 
int text_start_offsets[2]
 
#define GR_NUM_RESOLUTIONS
 
#define PLAYER_FLAGS_LINK_PRIMARY
 
void initMaxLineWidth(int w)
 
char * translate_key(char *key)
 
void initBottomBgOffset(int offset)
 
#define CONTROL_CONFIG_XSTR
 
const char * Training_lines[MAX_TRAINING_MESSAGE_LINES]
 
int snd_is_playing(int sig)
 
hud_frames directives_bottom
 
int Training_obj_window_coords[GR_NUM_RESOLUTIONS][2]
 
#define TRAINING_MESSAGE_WINDOW_WIDTH
 
void sort_training_objectives()
 
void training_process_message(char *message)
 
void gr_set_screen_scale(int w, int h, int zoom_w, int zoom_h, int max_w, int max_h, int center_w, int center_h, bool force_stretch)
 
#define PLAYER_FLAGS_AUTO_TARGETING
 
GLenum GLuint GLenum GLsizei const GLchar * message
 
void gr_set_color_fast(color *dst)
 
void training_check_objectives()
 
hud_frames directives_top
 
shader Training_msg_glass
 
#define HUD_DIRECTIVES_VIEW
 
char Training_voice_filename[NAME_LENGTH]
 
GLenum GLuint GLenum GLsizei const GLchar * buf
 
void training_mission_page_in()
 
SCP_vector< message_extra > Message_waves
 
int Training_obj_num_lines
 
#define PLAYER_FLAGS_AUTO_MATCH_SPEED
 
char filename[MAX_FILENAME_LEN]
 
config_item Control_config[]
Stores the keyboard configuration. 
 
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 audiostream_is_playing(int i)
 
int Training_context_goal_waypoint
 
SCP_vector< MMessage > Messages
 
#define TRAINING_MESSAGE_QUEUE_MAX
 
GLdouble GLdouble GLdouble r
 
#define TRAINING_OBJ_LINES
 
void audiostream_stop(int i, int rewind, int paused)
 
#define TRAINING_OBJ_LINES_KEY
 
#define HUD_OBJECT_TRAINING_MESSAGES
 
#define TRAINING_LINE_WIDTH
 
void render(float frametime)
 
#define strnicmp(s1, s2, n)
 
mission_event Mission_events[MAX_MISSION_EVENTS]
 
#define TRAINING_TIMING_BASE
 
void message_translate_tokens(char *buf, char *text)
 
sprintf(buf,"(%f,%f,%f)", v3->xyz.x, v3->xyz.y, v3->xyz.z)
 
void gr_shade(int x, int y, int w, int h, int resize_mode)
 
#define TRAINING_OBJ_STATUS_UNKNOWN
 
void initMiddleFrameOffsetY(int y)
 
int comp_training_lines_by_born_on_date(const void *m1, const void *m2)
 
int split_str(const char *src, int max_pixel_w, int *n_chars, const char **p_str, int max_lines, char ignore_char)
 
int Training_voice_handle
 
void insertion_sort(void *array_base, size_t array_size, size_t element_size, int(*fncompare)(const void *, const void *))
 
void message_training_queue(char *text, int timestamp, int length)
 
#define TRAINING_OBJ_DISPLAY_LINES
 
void renderString(int x, int y, const char *str)
 
#define HUD_SOURCE_TRAINING
 
GLint GLint GLint GLint GLint x
 
int hud_disabled()
Checks if HUD disabled. 
 
void message_training_remove_from_queue(int idx)
 
#define TRAINING_OBJ_LINES_MASK(n)
 
int Training_message_visible
 
void message_training_queue_check()
 
#define TRAINING_MESSAGE_LENGTH
 
const char * XSTR(const char *str, int index)
 
int Training_message_queue_count
 
training_message_queue Training_message_queue[TRAINING_MESSAGE_QUEUE_MAX]
 
int Training_obj_lines[TRAINING_OBJ_LINES]
 
GLuint const GLchar * name
 
#define MISSION_TYPE_TRAINING
 
bool sexp_replace_variable_names_with_values(char *text, int max_len)
 
void initTextStartOffsets(int x, int y)
 
void audiostream_close_file(int i, int fade)
 
int middle_frame_offset_y
 
void HUD_add_to_scrollback(const char *text, int source)
 
void initHeaderOffsets(int x, int y)
 
void initTextHeight(int h)
 
GLint GLsizei GLsizei height
 
GLubyte GLubyte GLubyte GLubyte w
 
void bm_page_in_aabitmap(int bitmapnum, int nframes)
Marks a texture as being used for this level, and is anti-aliased. 
 
void gr_get_string_size(int *w, int *h, const char *text, int len=9999)
 
int Training_message_window_coords[GR_NUM_RESOLUTIONS][2]
 
char * split_str_once(char *src, int max_pixel_w)
 
char * translate_message_token(char *str)
 
void gr_reset_screen_scale()
 
void initBitmaps(char *fname_top, char *fname_middle, char *fname_bottom)
 
#define timestamp_elapsed(stamp)
 
void audiostream_play(int i, float volume, int looping)
 
void renderPrintf(int x, int y, const char *format,...)
 
GLenum GLuint GLenum GLsizei length
 
int Training_bind_warning
 
#define HUD_OBJECT_DIRECTIVES
 
int audiostream_open(const char *filename, int type)
 
#define MAX_TRAINING_MESSAGE_LINES
 
#define MIN_SATISFIED_TIME
 
int ship_name_lookup(const char *name, int inc_players)
 
hud_frames directives_middle
 
#define TRAINING_OBJ_LINES_EVENT_STATUS_MASK
 
int cfclose(CFILE *cfile)
 
void gr_set_shader(shader *shade)
 
int hud_disabled_except_messages()
Like hud_disabled(), except messages are still drawn. 
 
#define MAX_TRAINING_MESSAGE_MODS
 
void render(float frametime)
 
char Training_buf[TRAINING_MESSAGE_LENGTH]
 
void gameseq_post_event(int event)
 
#define TRAINING_OBJ_STATUS_KNOWN
 
HudGaugeTrainingMessages()
 
void training_mission_init()
 
#define PLAYER_FLAGS_MSG_MODE
 
int cfilelength(CFILE *cfile)
 
float Master_voice_volume
 
#define PLAYER_FLAGS_LINK_SECONDARY
 
int mission_get_event_status(int event)
 
int snd_play_raw(int soundnum, float pan, float vol_scale, int priority)
 
void renderBitmap(int x, int y)