1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444
|
/*
* Copyright (C) Volition, Inc. 1999. All rights reserved.
*
* All source code herein is the property of Volition, Inc. You may not sell
* or otherwise commercially exploit the source or things you created based on the
* source.
*
*/
#ifndef __GAMESND_H__
#define __GAMESND_H__
#include "sound/sound.h"
#include "utils/id.h"
/**
* symbolic names for misc. game sounds.
*
* The order here must match the order in sounds.tbl
*
* INSTRUCTIONS FOR ADDING A NEW SOUND:
* Add interface (ie non-gameplay) sounds to the end of the interface list of sounds.
* Add gameplay sounds to the correct portion of the gameplay sounds section (ie Misc, Weapons, or Ship).
*
* Then add a symbolic name to the appropriate position in the enum below
* and add an entry to sounds.tbl. If there is no .wav file for the sound yet, specify sound_hook.wav in sounds.tbl.
*/
enum class GameSounds {
MISSILE_TRACKING = 0, //!< Missle tracking to acquire a lock (looped)
MISSILE_LOCK = 1, //!< Missle lock (non-looping)
PRIMARY_CYCLE = 2, //!< cycle primary weapon
SECONDARY_CYCLE = 3, //!< cycle secondary weapon
ENGINE = 4, //!< engine sound (as heard in cockpit)
CARGO_REVEAL = 5, //!< cargo revealed
DEATH_ROLL = 6, //!< ship death roll
SHIP_EXPLODE_1 = 7, //!< ship explosion 1
TARGET_ACQUIRE = 8, //!< target acquried
ENERGY_ADJUST = 9, //!< energy level change success
ENERGY_ADJUST_FAIL = 10, //!< energy level change fail
ENERGY_TRANS = 11, //!< energy transfer success
ENERGY_TRANS_FAIL = 12, //!< energy transfer fail
FULL_THROTTLE = 13, //!< set full throttle
ZERO_THROTTLE = 14, //!< set zero throttle
THROTTLE_UP = 15, //!< set 1/3 or 2/3 throttle (up)
THROTTLE_DOWN = 16, //!< set 1/3 or 2/3 throttle (down)
DOCK_APPROACH = 17, //!< dock approach retros
DOCK_ATTACH = 18, //!< dock attach
DOCK_DETACH = 19, //!< dock detach
DOCK_DEPART = 20, //!< dock depart retros
ABURN_ENGAGE = 21, //!< afterburner engage
ABURN_LOOP = 22, //!< afterburner burn sound (looped)
VAPORIZED = 23, //!< Destroyed by a beam (vaporized)
ABURN_FAIL = 24, //!< afterburner fail (no fuel when aburn pressed)
HEATLOCK_WARN = 25, //!< heat-seeker launch warning
OUT_OF_MISSLES = 26, //!< tried to fire a missle when none are left
OUT_OF_WEAPON_ENERGY = 27, //!< tried to fire lasers when not enough energy left
TARGET_FAIL = 28, //!< target fail sound (i.e. press targeting key, but nothing happens)
SQUADMSGING_ON = 29, //!< squadmate message menu appears
SQUADMSGING_OFF = 30, //!< squadmate message menu disappears
DEBRIS = 31, //!< debris sound (persistant, looping)
SUBSYS_DIE_1 = 32, //!< subsystem gets destroyed on player ship
MISSILE_START_LOAD = 33, //!< missle start load (during rearm/repair)
MISSILE_LOAD = 34, //!< missle load (during rearm/repair)
SHIP_REPAIR = 35, //!< ship is being repaired (during rearm/repair)
PLAYER_HIT_LASER = 36, //!< player ship is hit by laser fire
PLAYER_HIT_MISSILE = 37, //!< player ship is hit by missile
CMEASURE_CYCLE = 38, //!< countermeasure cycle
SHIELD_HIT = 39, //!< shield hit
SHIELD_HIT_YOU = 40, //!< player shield is hit
GAME_MOUSE_CLICK = 41, //!< mouse click
ASPECTLOCK_WARN = 42, //!< aspect launch warning
SHIELD_XFER_OK = 43, //!< shield quadrant transfer successful
ENGINE_WASH = 44, //!< Engine wash (looped)
WARP_IN = 45, //!< warp hole opening up for arriving
WARP_OUT = 46, //!< warp hole opening up for departing (Same as warp in for now)
PLAYER_WARP_FAIL = 47, //!< player warp has failed
STATIC = 48, //!< hud gauge static
SHIP_EXPLODE_2 = 49, //!< ship explosion 2
PLAYER_WARP_OUT = 50, //!< ship is warping out in 3rd person
SHIP_SHIP_HEAVY = 51, //!< heavy ship-ship collide sound
SHIP_SHIP_LIGHT = 52, //!< light ship-ship collide sound
SHIP_SHIP_SHIELD = 53, //!< shield ship-ship collide overlay sound
THREAT_FLASH = 54, //!< missile threat indicator flashes
PROXIMITY_WARNING = 55, //!< proximity warning (heat seeker)
PROXIMITY_ASPECT_WARNING = 56, //!< proximity warning (aspect)
DIRECTIVE_COMPLETE = 57, //!< directive complete
SUBSYS_EXPLODE = 58, //!< other ship subsystem destroyed
CAPSHIP_EXPLODE = 59, //!< captial ship explosion
CAPSHIP_SUBSYS_EXPLODE = 60, //!< captial ship subsystem destroyed
LARGESHIP_WARPOUT = 61, //!< large ship warps out
ASTEROID_EXPLODE_LARGE = 62, //!< large asteroid blows up
ASTEROID_EXPLODE_SMALL = 63, //!< small asteroid blows up
CUE_VOICE = 64, //!< sound to indicate voice is about to start
END_VOICE = 65, //!< sound to indicate voice has ended
CARGO_SCAN = 66, //!< cargo scanning (looped)
WEAPON_FLYBY = 67, //!< weapon flyby sound
ASTEROID = 68, //!< asteroid sound (persistant, looped)
CAPITAL_WARP_IN = 69, //!< capital warp hole opening
CAPITAL_WARP_OUT = 70, //!< capital warp hole closing
ENGINE_LOOP_LARGE = 71, //!< LARGE engine ambient
SUBSPACE_LEFT_CHANNEL = 72, //!< subspace ambient sound (left channel) (looped)
SUBSPACE_RIGHT_CHANNEL = 73, //!< subspace ambient sound (right channel) (looped)
MISSILE_EVADED_POPUP = 74, //!< "evaded" HUD popup
ENGINE_LOOP_HUGE = 75, //!< HUGE engine ambient
//Weapons section
LIGHT_LASER_FIRE = 76, //!< SD-4 Sidearm laser fired
LIGHT_LASER_IMPACT = 77, //!< DR-2 Scalpel fired
HVY_LASER_FIRE = 78, //!< Flail II fired
HVY_LASER_IMPACT = 79, //!< Prometheus R laser fired
MASSDRV_FIRED = 80, //!< Prometheus S laser fired
MASSDRV_IMPACT = 81, //!< GTW-66 Newton Cannon fired
FLAIL_FIRED = 82, //!< UD-8 Kayser Laser fired
FLAIL_IMPACT = 83, //!< GTW-19 Circe laser fired
NEUTRON_FLUX_FIRED = 84, //!< GTW-83 Lich laser fired
NEUTRON_FLUX_IMPACT = 85, //!< Laser impact
DEBUG_LASER_FIRED = 86, //!< Subach-HLV Vasudan laser
ROCKEYE_FIRED = 87, //!< rockeye missile launch
MISSILE_IMPACT1 = 88, //!< missile impact 1
MAG_MISSILE_LAUNCH = 89, //!< mag pulse missile launch
FURY_MISSILE_LAUNCH = 90, //!< fury missile launch
SHRIKE_MISSILE_LAUNCH = 91, //!< shrike missile launch
ANGEL_MISSILE_LAUNCH = 92, //!< angel fire missile launch
CLUSTER_MISSILE_LAUNCH = 93, //!< cluster bomb launch
CLUSTERB_MISSILE_LAUNCH = 94, //!< cluster baby bomb launch
STILETTO_MISSILE_LAUNCH = 95, //!< stiletto bomb launch
TSUNAMI_MISSILE_LAUNCH = 96, //!< tsunami bomb launch
HARBINGER_MISSILE_LAUNCH = 97, //!< harbinger bomb launch
MEGAWOKKA_MISSILE_LAUNCH = 98, //!< mega wokka launch
CMEASURE1_LAUNCH = 99, //!< countermeasure 1 launch
SHIVAN_LIGHT_LASER_FIRE = 100,//!< Shivan light laser
SHOCKWAVE_EXPLODE = 101,//!< shockwave ignition
SWARM_MISSILE_LAUNCH = 102,//!< swarm missile sound
UNDEFINED_103 = 103,//!< Shivan heavy laser
UNDEFINED_104 = 104,//!< Vasudan SuperCap engine
UNDEFINED_105 = 105,//!< Shivan SuperCap engine
UNDEFINED_106 = 106,//!< Terran SuperCap engine
UNDEFINED_107 = 107,//!< Vasudan light laser fired
UNDEFINED_108 = 108,//!< Shivan heavy laser
SHOCKWAVE_IMPACT = 109,//!< shockwave impact
UNDEFINED_110 = 110,//!< TERRAN TURRET 1
UNDEFINED_111 = 111,//!< TERRAN TURRET 2
UNDEFINED_112 = 112,//!< VASUDAN TURRET 1
UNDEFINED_113 = 113,//!< VASUDAN TURRET 2
UNDEFINED_114 = 114,//!< SHIVAN TURRET 1
TARG_LASER_LOOP = 115,//!< targeting laser loop sound
FLAK_FIRE = 116,//!< Flak Gun Launch
SHIELD_BREAKER = 117,//!< Flak Gun Impact
EMP_MISSILE = 118,//!< EMP Missle
AUTOCANNON_LOOP = 119,//!< Escape Pod Drone
AUTOCANNON_SHOT = 120,//!< Beam Hit 1
BEAM_LOOP = 121,//!< beam loop
BEAM_UP = 122,//!< beam power up
BEAM_DOWN = 123,//!< beam power down
BEAM_SHOT = 124,//!< Beam shot 1
BEAM_VAPORIZE = 125,//!< Beam shot 2
//Ship Engine Sounds section
TERRAN_FIGHTER_ENG = 126,//!< Terran fighter engine
TERRAN_BOMBER_ENG = 127,//!< Terran bomber engine
TERRAN_CAPITAL_ENG = 128,//!< Terran cruiser engine
SPECIESB_FIGHTER_ENG = 129,//!< Vasudan fighter engine
SPECIESB_BOMBER_ENG = 130,//!< Vasudan bomber engine
SPECIESB_CAPITAL_ENG = 131,//!< Vasudan cruiser engine
SHIVAN_FIGHTER_ENG = 132,//!< Shivan fighter engine
SHIVAN_BOMBER_ENG = 133,//!< Shivan bomber engine
SHIVAN_CAPITAL_ENG = 134,//!< Shivan cruiser engine
REPAIR_SHIP_ENG = 135,//!< Repair ship beacon/engine sound
UNDEFINED_136 = 136,//!< Terran capital engine
UNDEFINED_137 = 137,//!< Vasudan capital engine
UNDEFINED_138 = 138,//!< Shivan capital engine
// Electrical arc sound fx on the debris pieces
DEBRIS_ARC_01 = 139,//!< 0.10 second spark sound effect
DEBRIS_ARC_02 = 140,//!< 0.25 second spark sound effect
DEBRIS_ARC_03 = 141,//!< 0.50 second spark sound effect
DEBRIS_ARC_04 = 142,//!< 0.75 second spark sound effect
DEBRIS_ARC_05 = 143,//!< 1.00 second spark sound effect
// Beam Sounds
UNDEFINED_144 = 144,//!< LTerSlash beam loop
UNDEFINED_145 = 145,//!< TerSlash beam loop
UNDEFINED_146 = 146,//!< SGreen beam loop
UNDEFINED_147 = 147,//!< BGreen beem loop
UNDEFINED_148 = 148,//!< BFGreen been loop
UNDEFINED_149 = 149,//!< Antifighter beam loop
UNDEFINED_150 = 150,//!< 1 sec warm up
UNDEFINED_151 = 151,//!< 1.5 sec warm up
UNDEFINED_152 = 152,//!< 2.5 sec warm up
UNDEFINED_153 = 153,//!< 3 sec warm up
UNDEFINED_154 = 154,//!< 3.5 sec warm up
UNDEFINED_155 = 155,//!< 5 sec warm up
UNDEFINED_156 = 156,//!< LTerSlash warm down
UNDEFINED_157 = 157,//!< TerSlash warm down
UNDEFINED_158 = 158,//!< SGreen warm down
UNDEFINED_159 = 159,//!< BGreen warm down
UNDEFINED_160 = 160,//!< BFGreen warm down
UNDEFINED_161 = 161,//!< T_AntiFtr warm down
COPILOT = 162,//!< copilot (SCP)
UNDEFINED_163 = 163,//!< (Empty in Retail)
UNDEFINED_164 = 164,//!< (Empty in Retail)
UNDEFINED_165 = 165,//!< (Empty in Retail)
UNDEFINED_166 = 166,//!< (Empty in Retail)
UNDEFINED_167 = 167,//!< (Empty in Retail)
UNDEFINED_168 = 168,//!< (Empty in Retail)
UNDEFINED_169 = 169,//!< (Empty in Retail)
UNDEFINED_170 = 170,//!< (Empty in Retail)
UNDEFINED_171 = 171,//!< (Empty in Retail)
UNDEFINED_172 = 172,//!< (Empty in Retail)
SUPERNOVA_1 = 173,//!< SuperNova (distant)
SUPERNOVA_2 = 174,//!< SuperNova (shockwave)
UNDEFINED_175 = 175,//!< Shivan large engine
UNDEFINED_176 = 176,//!< Shivan large engine
UNDEFINED_177 = 177,//!< SRed beam loop
UNDEFINED_178 = 178,//!< LRed beam loop
UNDEFINED_179 = 179,//!< Antifighter beam loop
LIGHTNING_1 = 180,//!< Thunder 1 sound in neblua
LIGHTNING_2 = 181,//!< Thunder 2 sound in neblua
UNDEFINED_182 = 182,//!< 1 sec warm up
UNDEFINED_183 = 183,//!< 1.5 sec warm up
UNDEFINED_184 = 184,//!< 3 sec warm up
UNDEFINED_185 = 185,//!< Shivan Commnode
UNDEFINED_186 = 186,//!< Volition PirateShip
UNDEFINED_187 = 187,//!< SRed warm down
UNDEFINED_188 = 188,//!< LRed warm down
UNDEFINED_189 = 189,//!< AntiFtr warm down
UNDEFINED_190 = 190,//!< Instellation 1
UNDEFINED_191 = 191,//!< Instellation 2
UNDEFINED_192 = 192,//!< (Undefined in Retail)
UNDEFINED_193 = 193,//!< (Undefined in Retail)
UNDEFINED_194 = 194,//!< (Undefined in Retail)
UNDEFINED_195 = 195,//!< (Undefined in Retail)
UNDEFINED_196 = 196,//!< (Undefined in Retail)
UNDEFINED_197 = 197,//!< (Undefined in Retail)
UNDEFINED_198 = 198,//!< (Undefined in Retail)
UNDEFINED_199 = 199,//!< (Undefined in Retail)
BALLISTIC_START_LOAD = 200,//!< (SCP)
BALLISTIC_LOAD = 201,//!< (SCP)
// NOTE: If any other indexes become reserved, be sure to update gamesnd_is_reserved_game_index()
/**
* Keep this below all defined enum values
*/
MIN_GAME_SOUNDS = 202
};
/**
* Interface sounds
*/
enum class InterfaceSounds {
IFACE_MOUSE_CLICK =0, //!< mouse click
ICON_PICKUP =1, //!< pick up a ship icon (Empty in Retail)
ICON_DROP_ON_WING =2, //!< drop a ship icon on a wing slot
ICON_DROP =3, //!< drop a ship icon back to the list
SCREEN_MODE_PRESSED =4, //!< press briefing, ship selection or weapons bar (top-left)
SWITCH_SCREENS =5, //!< Switching to a new screen, but not commit
HELP_PRESSED =6, //!< help pressed
COMMIT_PRESSED =7, //!< commit pressed
PREV_NEXT_PRESSED =8, //!< prev/next pressed
SCROLL =9, //!< scroll pressed (and scroll)
GENERAL_FAIL =10,//!< general failure sound for any event
SHIP_ICON_CHANGE =11,//!< ship animation starts (ie text and ship first appear)
MAIN_HALL_AMBIENT =12,//!< ambient sound for the Terran main hall (looping)
BTN_SLIDE =13,//!< ambient sound for the Vasudan main hall (looping)
BRIEF_STAGE_CHG =14,//!< brief stage change
BRIEF_STAGE_CHG_FAIL =15,//!< brief stage change fail
BRIEF_ICON_SELECT =16,//!< selet brief icon
USER_OVER =17,//!< user_over (mouse over a control)
USER_SELECT =18,//!< user_click (mouse selects a control)
RESET_PRESSED =19,//!< reset (or similar button) pressed
BRIEF_TEXT_WIPE =20,//!< briefing text wipe
VASUDAN_PA_1 =21,//!< main hall - elevator
WEAPON_ANIM_START =22,//!< weapon animation starts
MAIN_HALL_DOOR_OPEN =23,//!< door in main hall opens
MAIN_HALL_DOOR_CLOSE =24,//!< door in main hall closes
GLOW_OPEN =25,//!< glow in main hall opens
VASUDAN_PA_2 =26,//!< main hall - crane 1
AMBIENT_MENU =27,//!< ambient sound for menus off the main hall (looping)
POPUP_APPEAR =28,//!< popup dialog box appeared
POPUP_DISAPPEAR =29,//!< popup dialog box goes away
VOICE_SLIDER_CLIP =30,//!< voice clip played when volume slider changes
VASUDAN_PA_3 =31,//!< main hall - crane 2
MAIN_HALL_GET_PEPSI =32,//!< main hall options - mouse on
MAIN_HALL_LIFT_UP =33,//!< main hall options - mouse off
MAIN_HALL_WELD1 =34,//!< main hall tech room - mouse on
MAIN_HALL_WELD2 =35,//!< main hall tech room - mouse off
MAIN_HALL_WELD3 =36,//!< main hall exit open
MAIN_HALL_WELD4 =37,//!< main hall exit close
MAIN_HALL_INT1 =38,//!< main hall random intercom 1
MAIN_HALL_INT2 =39,//!< main hall random intercom 2
MAIN_HALL_INT3 =40,//!< main hall random intercom 3
ICON_HIGHLIGHT =41,//!< spinning highlight in briefing
BRIEFING_STATIC =42,//!< static in a briefing stage cut
MAIN_HALL2_CRANE1_1 =43,//!< main hall campaign - mouse on
MAIN_HALL2_CRANE1_2 =44,//!< main hall campaign - mouse off
MAIN_HALL2_CRANE2_1 =45,//!< vasudan hall - hatch open
MAIN_HALL2_CRANE2_2 =46,//!< vasudan hall - hatch close
MAIN_HALL2_CAR1 =47,//!< vasudan hall - roll open
MAIN_HALL2_CAR2 =48,//!< vasudan hall - roll close
MAIN_HALL2_INT1 =49,//!< vasudan hall - lift up
MAIN_HALL2_INT2 =50,//!< vasudan hall - lift down
MAIN_HALL2_INT3 =51,//!< vasudan hall - glow on
INTERFACE_UNDEFINED_52 =52,//!< vasudan hall - glow off
INTERFACE_UNDEFINED_53 =53,//!< vasudan hall - skiff loop
INTERFACE_UNDEFINED_54 =54,//!< vasudan hall - screen on
INTERFACE_UNDEFINED_55 =55,//!< vasudan hall - screen off
INTERFACE_UNDEFINED_56 =56,//!< vasudan hall - vasudan greeting
INTERFACE_UNDEFINED_57 =57,//!< vasudan hall - vasudan bye
INTERFACE_UNDEFINED_58 =58,//!< vasudan hall - vasudan pa 1
INTERFACE_UNDEFINED_59 =59,//!< vasudan hall - vasudan pa 2
INTERFACE_UNDEFINED_60 =60,//!< vasudan hall - vasudan pa 3
VASUDAN_BUP =61,//!< bup bup bup-bup bup bup
INTERFACE_UNDEFINED_62 =62,//!< thankyou
INTERFACE_UNDEFINED_63 =63,//!< vasudan hall - exit open
INTERFACE_UNDEFINED_64 =64,//!< vasudan hall - exit close
// NOTE: If any other indexes become reserved, be sure to update gamesnd_is_reserved_interface_index()
/**
* Keep this below all defined enum values
*/
MIN_INTERFACE_SOUNDS =70 //!< MIN_INTERFACE_SOUNDS
};
// These two id types are defined as subclasses so that type safe implicit conversions are possible from the predefined
// sound enum values
struct gamesnd_id_tag{};
/**
* @brief A game sound handle type
*
* This allows implicit conversions from the GameSounds enum class.
*/
class gamesnd_id : public util::ID<gamesnd_id_tag, int, -1> {
public:
/*implicit*/ gamesnd_id(GameSounds snd) : util::ID<gamesnd_id_tag, int, -1>(static_cast<int>(snd)) {}
explicit gamesnd_id(int val) : ID(val) {
}
gamesnd_id() {
}
};
struct interface_snd_tag{};
/**
* @brief A interface sound handle type
*
* This allows implicit conversions from the InterfaceSounds enum class.
*/
class interface_snd_id : public util::ID<interface_snd_tag, int, -1> {
public:
/*implicit*/ interface_snd_id(InterfaceSounds snd) : util::ID<interface_snd_tag, int, -1>(static_cast<int>(snd)) {}
interface_snd_id() {
}
explicit interface_snd_id(int val) : ID(val) {
}
};
bool gamesnd_is_reserved_game_index(int index);
bool gamesnd_is_reserved_interface_index(int index);
void gamesnd_parse_soundstbl(bool first_stage); // Loads in general game sounds from sounds.tbl
void gamesnd_close(); // close out gamesnd... only call from game_shutdown()!
void gamesnd_load_gameplay_sounds();
void gamesnd_unload_gameplay_sounds();
void gamesnd_load_interface_sounds();
void gamesnd_unload_interface_sounds();
void gamesnd_preload_common_sounds();
void gamesnd_load_gameplay_sounds();
void gamesnd_unload_gameplay_sounds();
void gamesnd_play_iface(interface_snd_id n);
void gamesnd_play_error_beep();
gamesnd_id gamesnd_get_by_name(const char* name);
interface_snd_id gamesnd_get_by_iface_name(const char* name);
gamesnd_id gamesnd_get_by_tbl_index(int index);
interface_snd_id gamesnd_get_by_iface_tbl_index(int index);
// This should handle NO_SOUND just fine since it doesn't directly access lowlevel code
// Does all parsing for a sound. Returns true if a sound was successfully parsed.
bool parse_game_sound(const char* tag, gamesnd_id* idx_dest);
gamesnd_id parse_game_sound_inline();
void parse_iface_sound(const char* tag, interface_snd_id* idx_dest);
void parse_iface_sound_list(const char* tag, SCP_vector<interface_snd_id>& destination, const char* object_name, bool scp_list = false);
// this is a callback, so it needs to be a real function
void common_play_highlight_sound();
/**
* @brief Gets a pointer to the game sound with the specified handle
* @param handle The sound handle
* @return The game sound handle
*/
game_snd* gamesnd_get_game_sound(gamesnd_id handle);
/**
* @brief Gets a pointer to the interface sound with the specified handle
* @param handle The sound handle
* @return The interface sound handle
*/
game_snd* gamesnd_get_interface_sound(interface_snd_id handle);
/**
* @brief Checks if the given sound handle is a valid game sound handle
* @param sound The handle to check
* @return @c true if the handle is valid
*/
bool gamesnd_game_sound_valid(gamesnd_id sound);
/**
* @brief Checks if the given sound handle can be loaded
*/
bool gamesnd_game_sound_try_load(gamesnd_id sound);
/**
* @brief Checks if the given sound handle is a valid interface sound handle
* @param sound The handle to check
* @return @c true if the handle is valid
*/
bool gamesnd_interface_sound_valid(interface_snd_id sound);
/**
* @brief Determines the maximum time this game sound may take to be played.
*
* @details Use this instead of snd_get_duration since a game sound may have multiple sounds with different durations.
* This function also accounts for pitch changes which also changes the length of a sound.
*
* @param gs The game sound to check
* @return The length of the sound in milliseconds
*/
float gamesnd_get_max_duration(game_snd* gs);
/**
* @brief Chooses a sound entry for the specified game sound according to the rules specified by the game data
*
* @warning The returned pointer is temporary and may not be valid forever. Do no store this pointer anywhere!
*
* @param gs The game sound to choose the entry from
* @return The chosen entry
*/
game_snd_entry* gamesnd_choose_entry(game_snd* gs);
#endif
|