// start playback of the red alert voice void red_alert_voice_play() { if ( !Briefing_voice_enabled ) { return; } if ( Red_alert_voice < 0 ) { // play simulated speech? if (fsspeech_play_from(FSSPEECH_FROM_BRIEFING)) { if (fsspeech_playing()) { return; } fsspeech_play(FSSPEECH_FROM_BRIEFING, Briefing->stages[0].text.c_str()); Red_alert_voice_started = 1; } } else { if (audiostream_is_playing(Red_alert_voice)) { return; } audiostream_play(Red_alert_voice, Master_voice_volume, 0); Red_alert_voice_started = 1; } }
void credits_start_music() { if (Credits_music_handle != -1) { if ( !audiostream_is_playing(Credits_music_handle) ){ audiostream_play(Credits_music_handle, Master_event_music_volume, 1); } } else { nprintf(("Warning", "Cannot play credits music\n")); } }
// pause a single audio stream, indentified by handle i. void audiostream_pause(int i) { if ( i == -1 ) return; Assert( i >= 0 && i < MAX_AUDIO_STREAMS ); if ( Audio_streams[i].status == ASF_FREE ) return; if ( audiostream_is_playing(i) == TRUE ) { audiostream_stop(i, 0, 1); } }
void message_training_update_frame() { int z; if ((Viewer_mode & (VM_EXTERNAL | VM_DEAD_VIEW | VM_WARP_CHASE | VM_PADLOCK_ANY ))) { return; } if ( hud_disabled() && !hud_disabled_except_messages()) { return; } Training_message_visible = 0; message_training_queue_check(); if (Training_failure){ return; } if (timestamp_elapsed(Training_message_timestamp) || !strlen(Training_buf)){ return; } // the code that preps the training message and counts the number of lines // has been moved to message_training_setup() if (Training_num_lines <= 0){ return; } Training_message_visible = 1; if ((Training_voice >= 0) && (Training_num_lines > 0) && !(Training_message_timestamp)) { if (Training_voice_type) z = audiostream_is_playing(Training_voice_handle); else z = snd_is_playing(Training_voice_handle); if (!z) Training_message_timestamp = timestamp(2000); // 2 second delay } Training_message_method = 0; }
int cmd_brief_check_stage_done() { if (!Voice_good_to_go) return 0; if (Cmd_brief_paused) return 0; if (Voice_ended_time && (timer_get_milliseconds() - Voice_ended_time >= 1000)) return 1; // check normal speech if (Briefing_voice_enabled && (Cmd_brief_last_voice >= 0)) { if (audiostream_is_playing(Cmd_brief_last_voice)) { return 0; } if (!Voice_ended_time) { Voice_ended_time = timer_get_milliseconds(); } return 0; } // check simulated speech if (Briefing_voice_enabled && (Cmd_brief_last_stage >= 0)) { if (fsspeech_playing()) { return 0; } if (!Voice_ended_time) { Voice_ended_time = timer_get_milliseconds(); } return 0; } // if we get here, there is no voice, so we simulate the time it would take instead if (!Voice_ended_time) Voice_ended_time = Voice_started_time + MAX(5000, Num_brief_text_lines[0] * 3500); return 0; }
// displays (renders) the training message to the screen void message_training_display() { char *str, buf[256]; int i, z, x, y, height, mode, count; Training_msg_visible = 0; message_training_que_check(); training_obj_display(); if (Training_failure){ return; } if (timestamp_elapsed(Training_msg_timestamp) || !strlen(Training_text)){ return; } message_translate_tokens(Training_buf, Training_text); training_process_msg(Training_text); Training_num_lines = split_str(Training_buf, TRAINING_LINE_WIDTH, Training_line_sizes, Training_lines, MAX_TRAINING_MSG_LINES); Assert(Training_num_lines > 0); for (i=0; i<Training_num_lines; i++) { Training_lines[i][Training_line_sizes[i]] = 0; drop_leading_white_space(Training_lines[i]); } if (Training_num_lines <= 0){ return; } height = gr_get_font_height(); gr_set_shader(&Training_msg_glass); gr_shade(Training_msg_window_coords[gr_screen.res][0], Training_msg_window_coords[gr_screen.res][1], TRAINING_MSG_WINDOW_WIDTH, Training_num_lines * height + height); gr_set_color_fast(&Color_bright_blue); mode = count = 0; Training_msg_visible = 1; for (i=0; i<Training_num_lines; i++) { // loop through all lines of message str = Training_lines[i]; z = 0; x = Training_msg_window_coords[gr_screen.res][0] + (TRAINING_MSG_WINDOW_WIDTH - TRAINING_LINE_WIDTH) / 2; y = Training_msg_window_coords[gr_screen.res][1] + i * height + height / 2 + 1; while (*str) { // loop through each character of each line if ((count < MAX_TRAINING_MSG_MODS) && (str == Training_msg_mods[count].pos)) { buf[z] = 0; gr_printf(x, y, buf); gr_get_string_size(&z, NULL, buf); x += z; z = 0; mode = Training_msg_mods[count++].mode; switch (mode) { case TMMOD_NORMAL: gr_set_color_fast(&Color_bright_blue); break; case TMMOD_BOLD: gr_set_color_fast(&Color_white); break; } } buf[z++] = *str++; } if (z) { buf[z] = 0; gr_printf(x, y, "%s", buf); } } Training_msg_method = 0; // if (Training_msg_method) { // char *msg = "Press a key to continue"; // gr_get_string_size(&i, NULL, msg); // gr_printf(TRAINING_MSG_WINDOW_X + TRAINING_MSG_WINDOW_WIDTH / 2 - i / 2, TRAINING_MSG_WINDOW_Y + (Training_num_lines + 2) * height, msg); // } if ((Training_voice >= 0) && (Training_num_lines > 0) && !(Training_msg_timestamp)) { if (Training_voice_type) z = audiostream_is_playing(Training_voice_handle); else z = snd_is_playing(Training_voice_handle); if (!z) Training_msg_timestamp = timestamp(2000); // 2 second delay } }