1 /* 2 * Copyright (C) Volition, Inc. 1999. All rights reserved. 3 * 4 * All source code herein is the property of Volition, Inc. You may not sell 5 * or otherwise commercially exploit the source or things you created based on the 6 * source. 7 * 8 */ 9 10 11 12 13 #ifndef __EVENT_MUSIC_H__ 14 #define __EVENT_MUSIC_H__ 15 16 #include "globalincs/globals.h" 17 #include "globalincs/pstypes.h" 18 19 // Identifies songs in the Soundtrack_filenames[] structure. The order matches up with 20 // what is in Pattern_info and music.tbl. Do not modify without properly inputting to 21 //Pattern_info and New_pattern_order 22 #define SONG_NRML_1 0 // Normal Song 1 23 #define SONG_NRML_2 1 // Normal Song 2 - for FS1 24 #define SONG_NRML_3 2 // Normal Song 3 - for FS1 25 #define SONG_AARV_1 3 // Allied Arrival 1 26 #define SONG_AARV_2 4 // Allied Arrival 2 27 #define SONG_EARV_1 5 // Enemy Arrival 1 28 #define SONG_EARV_2 6 // Enemy Arrival 2 29 #define SONG_BTTL_1 7 // Battle Song 1 30 #define SONG_BTTL_2 8 // Battle Song 2 31 #define SONG_BTTL_3 9 // Battle Song 3 32 #define SONG_FAIL_1 10 // Goal Failed 33 #define SONG_VICT_1 11 // Victory Song 1 34 #define SONG_VICT_2 12 // Victory Song 2 35 #define SONG_DEAD_1 13 // Death Song 1 36 37 #define MAX_PATTERNS 14 38 39 // if player targets a hostile ship at less than this range, switch to battle track 40 #define BATTLE_START_MIN_TARGET_DIST 500 41 42 extern int Event_Music_battle_started; // flag that will tell us if we've started a battle in the current mission 43 extern int Event_music_enabled; 44 extern float Default_music_volume; // range is 0->1 45 extern float Master_event_music_volume; // range is 0->1 46 47 48 ///////////////////////////////////////////////////////////////////////////// 49 // Used to track what briefing and debriefing music is played for the mission 50 ///////////////////////////////////////////////////////////////////////////// 51 #define NUM_SCORES 5 52 #define SCORE_BRIEFING 0 53 #define SCORE_DEBRIEF_SUCCESS 1 54 #define SCORE_DEBRIEF_AVERAGE 2 55 #define SCORE_DEBRIEF_FAIL 3 56 #define SCORE_FICTION_VIEWER 4 57 extern int Mission_music[NUM_SCORES]; // indicies into Spooled_music[] 58 ///////////////////////////////////////////////////////////////////////////// 59 60 extern int Current_soundtrack_num; // index into Soundtracks[] 61 62 63 // menu music storage 64 typedef struct menu_music { 65 int flags; 66 char name[NAME_LENGTH]; // name music is known by 67 char filename[MAX_FILENAME_LEN]; // name music is stored on disk as 68 } menu_music; 69 70 #define MAX_SPOOLED_MUSIC 50 // max number of briefing/mainhall/credits tracks 71 72 // Goober5000 - spooled music flags 73 #define SMF_VALID (1 << 0) 74 75 extern menu_music Spooled_music[MAX_SPOOLED_MUSIC]; 76 extern int Num_music_files; 77 78 79 // event music soundtrack storage 80 typedef struct tagSOUNDTRACK_INFO { 81 int flags; 82 int num_patterns; 83 char name[NAME_LENGTH]; 84 char pattern_fnames[MAX_PATTERNS][MAX_FILENAME_LEN]; 85 } SOUNDTRACK_INFO; 86 87 #define MAX_SOUNDTRACKS 30 // max number of battle tracks 88 89 // Goober5000 - event music flags 90 #define EMF_VALID (1 << 0) 91 #define EMF_ALLIED_ARRIVAL_OVERLAY (1 << 1) 92 #define EMF_CYCLE_FS1 (1 << 2) 93 94 extern SOUNDTRACK_INFO Soundtracks[MAX_SOUNDTRACKS]; 95 extern int Num_soundtracks; 96 97 98 void event_music_init(); 99 void event_music_close(); 100 void event_music_level_start(int force_soundtrack = -1); 101 void event_music_level_close(); 102 void event_music_do_frame(); 103 void event_music_disable(); 104 void event_music_enable(); 105 void event_music_set_volume_all(float volume); 106 void event_music_parse_musictbl(const char *filename); 107 void event_music_change_pattern(int new_pattern); 108 int event_music_return_current_pattern(); 109 void event_music_first_pattern(); 110 int event_music_battle_start(); 111 int event_music_enemy_arrival(); 112 int event_music_friendly_arrival(); 113 void event_music_arrival(int team); 114 int event_music_primary_goals_met(); 115 int event_music_primary_goal_failed(); 116 int event_music_player_death(); 117 void event_music_start_default(); 118 void event_music_get_info(char *outbuf); 119 void event_music_get_soundtrack_name(char *outbuf); 120 int event_music_next_soundtrack(int delta); 121 void event_sexp_change_soundtrack(const char *name); 122 void event_music_set_soundtrack(const char *name); 123 void event_music_set_score(int score_index, const char *name); 124 int event_music_get_soundtrack_index(const char *name); 125 int event_music_get_spooled_music_index(const char *name); 126 int event_music_get_spooled_music_index(const SCP_string& name); 127 void event_music_reset_choices(); 128 int event_music_player_respawn(); 129 int event_music_player_respawn_as_observer(); 130 void event_music_hostile_ship_destroyed(); 131 132 /** 133 * @brief Sets the master music volume to the specified value 134 * @param volume The new music volume value. Must be in the range [0, 1]. 135 */ 136 void event_music_set_volume(float volume); 137 138 #endif /* __EVENT_MUSIC_H__ */ 139