mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
The parameter was STR8, a mutable char*, for a filename the function only
reads: it runs strstr over it and hands it to SoundPlay. environment.cpp picks
between two of them at runtime,
PlayJA2SampleFromFile( Chance( 50 ) ? "Sounds\\WATERSNAKE_ATTACK_01.WAV"
: "Sounds\\WATERSNAKE_ATTACK_02.WAV", ... );
and the conditional is a const char*, which STR8 has no room for. Literals
passed on their own are still accepted under the MSVC rules, which is why only
these two calls ever failed.
The cast at the call to SoundPlay was already written as (STR) and is left as
it is. SoundPlay, SoundPlayStreamed and SoundLoadSample below it all still
take STR, so making them const is a separate piece of work and a much larger
one; until then that cast is where const stops.
No call site changes. The (char*) cast at LuaInitNPCs.cpp:11640 is now
unnecessary but still valid, and is left for whoever next edits that line.
Verification:
ninja -C build parse # both environment.cpp sites gone
ninja -C build -k 0 # Release, four applications, green
ninja -C build-debug -k 0 # Debug, four applications, green
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
473 lines
8.4 KiB
C
473 lines
8.4 KiB
C
/*
|
|
* ChangeLog:
|
|
* 11.12.2005 Lesh changed balance settings
|
|
*/
|
|
#ifndef SOUND_CONTROL_H
|
|
#define SOUND_CONTROL_H
|
|
|
|
#include "Overhead Types.h"
|
|
|
|
// == Lesh modifications ======
|
|
#define FARLEFT 0
|
|
#define LEFTSIDE 96
|
|
#define MIDDLE 128
|
|
#define MIDDLEPAN 128
|
|
#define RIGHTSIDE 160
|
|
#define FARRIGHT 255
|
|
// == Lesh modifications ends =
|
|
|
|
#define LOWVOLUME 25
|
|
#define BTNVOLUME 40
|
|
#define MIDVOLUME 65
|
|
#define HIGHVOLUME 127
|
|
|
|
|
|
#define RATE_11025 0xffffffff
|
|
|
|
|
|
#define LOOPING 0
|
|
|
|
// sound group priorities (higher = more important)
|
|
#define GROUP_PLAYER 1000
|
|
#define GROUP_AMBIENT 0
|
|
|
|
|
|
#define MAX_SAMPLES 5000
|
|
|
|
|
|
// SOUNDS ENUMERATION
|
|
enum SoundDefines
|
|
{
|
|
MISS_1 = 0,
|
|
MISS_2,
|
|
MISS_3,
|
|
MISS_4,
|
|
MISS_5,
|
|
MISS_6,
|
|
MISS_7,
|
|
MISS_8,
|
|
MISS_G1,
|
|
MISS_G2,
|
|
MISS_KNIFE,
|
|
FALL_1,
|
|
FALL_2,
|
|
FALL_TO_GROUND_1,
|
|
FALL_TO_GROUND_2,
|
|
FALL_TO_GROUND_3,
|
|
HEAVY_FALL_1,
|
|
BODY_SPLAT_1,
|
|
GLASS_SHATTER1,
|
|
GLASS_SHATTER2,
|
|
DROPEN_1,
|
|
DROPEN_2,
|
|
DROPEN_3,
|
|
DRCLOSE_1,
|
|
DRCLOSE_2,
|
|
UNLOCK_DOOR_1,
|
|
KICKIN_DOOR,
|
|
BREAK_LOCK,
|
|
PICKING_LOCK,
|
|
|
|
GARAGE_DOOR_OPEN,
|
|
GARAGE_DOOR_CLOSE,
|
|
ELEVATOR_DOOR_OPEN,
|
|
ELEVATOR_DOOR_CLOSE,
|
|
HITECH_DOOR_OPEN,
|
|
HITECH_DOOR_CLOSE,
|
|
CURTAINS_OPEN,
|
|
CURTAINS_CLOSE,
|
|
METAL_DOOR_OPEN,
|
|
METAL_DOOR_CLOSE,
|
|
|
|
WALK_LEFT_OUT,
|
|
WALK_RIGHT_OUT,
|
|
WALK_LEFT_OUT2,
|
|
WALK_RIGHT_OUT2,
|
|
WALK_LEFT_IN,
|
|
WALK_RIGHT_IN,
|
|
WALK_LEFT_IN2,
|
|
WALK_RIGHT_IN2,
|
|
WALK_LEFT_ROAD,
|
|
WALK_RIGHT_ROAD,
|
|
WALK_LEFT_ROAD2,
|
|
WALK_RIGHT_ROAD2,
|
|
CRAWL_1,
|
|
CRAWL_2,
|
|
CRAWL_3,
|
|
CRAWL_4,
|
|
TARG_REFINE_BEEP,
|
|
ENDTURN_1,
|
|
HEADCR_1,
|
|
DOORCR_1,
|
|
HEADSPLAT_1,
|
|
BODY_EXPLODE_1,
|
|
EXPLOSION_1,
|
|
CROW_EXPLODE_1,
|
|
SMALL_EXPLODE_1,
|
|
HELI_1,
|
|
BULLET_IMPACT_1,
|
|
BULLET_IMPACT_2,
|
|
BULLET_IMPACT_3,
|
|
CREATURE_BATTLECRY_1,
|
|
ENTER_WATER_1,
|
|
ENTER_DEEP_WATER_1,
|
|
|
|
COW_HIT_SND,
|
|
COW_DIE_SND,
|
|
|
|
// ROCKET GUN COMPUTER VOICE...
|
|
RG_ID_IMPRINTED,
|
|
RG_ID_INVALID,
|
|
RG_TARGET_SELECTED,
|
|
|
|
// CAVE COLLAPSE
|
|
CAVE_COLLAPSE,
|
|
|
|
// AIR RAID SOUNDS...
|
|
S_RAID_WHISTLE,
|
|
S_RAID_AMBIENT,
|
|
S_RAID_DIVE,
|
|
S_RAID_TB_DIVE,
|
|
S_RAID_TB_BOMB,
|
|
|
|
// VEHICLE SOUNDS
|
|
S_VECH1_MOVE,
|
|
S_VECH1_ON,
|
|
S_VECH1_OFF,
|
|
S_VECH1_INTO,
|
|
|
|
S_DRYFIRE1,
|
|
|
|
// IMPACT SOUNDS
|
|
S_WOOD_IMPACT1,
|
|
S_WOOD_IMPACT2,
|
|
S_WOOD_IMPACT3,
|
|
S_PORCELAIN_IMPACT1,
|
|
S_RUBBER_IMPACT1,
|
|
S_STONE_IMPACT1,
|
|
S_WATER_IMPACT1,
|
|
S_VEG_IMPACT1,
|
|
S_METAL_IMPACT1,
|
|
S_METAL_IMPACT2,
|
|
S_METAL_IMPACT3,
|
|
|
|
S_SLAP_IMPACT,
|
|
|
|
// WEAPON RELOAD
|
|
S_RELOAD_REVOLVER,
|
|
S_RELOAD_PISTOL,
|
|
S_RELOAD_SMG,
|
|
S_RELOAD_RIFLE,
|
|
S_RELOAD_SHOTGUN,
|
|
S_RELOAD_LMG,
|
|
|
|
// WEAPON LOCKNLOAD
|
|
S_LNL_REVOLVER,
|
|
S_LNL_PISTOL,
|
|
S_LNL_SMG,
|
|
S_LNL_RIFLE,
|
|
S_LNL_SHOTGUN,
|
|
S_LNL_LMG,
|
|
|
|
//WEAPON SHOT SOUNDS
|
|
S_SMALL_ROCKET_LAUNCHER,
|
|
S_GLAUNCHER,
|
|
S_UNDER_GLAUNCHER,
|
|
S_ROCKET_LAUNCHER,
|
|
S_MORTAR_SHOT,
|
|
S_GLOCK17,
|
|
S_GLOCK18,
|
|
S_BERETTA92,
|
|
S_BERETTA93,
|
|
S_SWSPECIAL,
|
|
S_BARRACUDA,
|
|
S_DESERTEAGLE,
|
|
S_M1911,
|
|
S_MP5K,
|
|
S_MAC10,
|
|
S_THOMPSON,
|
|
S_COMMANDO,
|
|
S_MP53,
|
|
S_AKSU74,
|
|
S_P90,
|
|
S_TYPE85,
|
|
S_SKS,
|
|
S_DRAGUNOV,
|
|
S_M24,
|
|
S_AUG,
|
|
S_G41,
|
|
S_RUGERMINI,
|
|
S_C7,
|
|
S_FAMAS,
|
|
S_AK74,
|
|
S_AKM,
|
|
S_M14,
|
|
S_FNFAL,
|
|
S_G3A3,
|
|
S_G11,
|
|
S_M870,
|
|
S_SPAS,
|
|
S_CAWS,
|
|
S_FNMINI,
|
|
S_RPK74,
|
|
S_21E,
|
|
S_THROWKNIFE,
|
|
S_TANK_CANNON,
|
|
S_BURSTTYPE1,
|
|
S_AUTOMAG,
|
|
|
|
S_SILENCER_1,
|
|
S_SILENCER_2,
|
|
|
|
// SWOOSHES.
|
|
SWOOSH_1,
|
|
SWOOSH_2,
|
|
SWOOSH_3,
|
|
SWOOSH_4,
|
|
SWOOSH_5,
|
|
SWOOSH_6,
|
|
|
|
// CREATURE SOUNDS....
|
|
ACR_FALL_1,
|
|
ACR_STEP_1,
|
|
ACR_STEP_2,
|
|
ACR_SWIPE,
|
|
ACR_EATFLESH,
|
|
ACR_CRIPPLED,
|
|
ACR_DIE_PART1,
|
|
ACR_DIE_PART2,
|
|
ACR_LUNGE,
|
|
ACR_SMELL_THREAT,
|
|
ACR_SMEEL_PREY,
|
|
ACR_SPIT,
|
|
//BABY
|
|
BCR_DYING,
|
|
BCR_DRAGGING,
|
|
BCR_SHRIEK,
|
|
BCR_SPITTING,
|
|
// LARVAE
|
|
LCR_MOVEMENT,
|
|
LCR_RUPTURE,
|
|
// QUEEN
|
|
LQ_SHRIEK,
|
|
LQ_DYING,
|
|
LQ_ENRAGED_ATTACK,
|
|
LQ_RUPTURING,
|
|
LQ_CRIPPLED,
|
|
LQ_SMELLS_THREAT,
|
|
LQ_WHIP_ATTACK,
|
|
|
|
THROW_IMPACT_1,
|
|
THROW_IMPACT_2,
|
|
|
|
IDLE_SCRATCH,
|
|
IDLE_ARMPIT,
|
|
IDLE_BACKCRACK,
|
|
|
|
AUTORESOLVE_FINISHFX,
|
|
|
|
//Interface buttons, misc.
|
|
EMAIL_ALERT,
|
|
ENTERING_TEXT,
|
|
REMOVING_TEXT,
|
|
COMPUTER_BEEP2_IN,
|
|
COMPUTER_BEEP2_OUT,
|
|
COMPUTER_SWITCH1_IN,
|
|
COMPUTER_SWITCH1_OUT,
|
|
VSM_SWITCH1_IN,
|
|
VSM_SWITCH1_OUT,
|
|
VSM_SWITCH2_IN,
|
|
VSM_SWITCH2_OUT,
|
|
SM_SWITCH1_IN,
|
|
SM_SWITCH1_OUT,
|
|
SM_SWITCH2_IN,
|
|
SM_SWITCH2_OUT,
|
|
SM_SWITCH3_IN,
|
|
SM_SWITCH3_OUT,
|
|
BIG_SWITCH3_IN,
|
|
BIG_SWITCH3_OUT,
|
|
KLAXON_ALARM,
|
|
BOXING_BELL,
|
|
HELI_CRASH,
|
|
ATTACH_TO_GUN,
|
|
ATTACH_CERAMIC_PLATES,
|
|
ATTACH_DETONATOR,
|
|
|
|
GRAB_ROOF,
|
|
LAND_ON_ROOF,
|
|
|
|
UNSTEALTHY_OUTSIDE_1,
|
|
UNSTEALTHY_OUTSIDE_2,
|
|
UNSTEALTHY_INSIDE_1,
|
|
|
|
OPEN_DEFAULT_OPENABLE,
|
|
CLOSE_DEFAULT_OPENABLE,
|
|
|
|
FIRE_ON_MERC,
|
|
GLASS_CRACK,
|
|
SPIT_RICOCHET,
|
|
|
|
BLOODCAT_HIT_1,
|
|
BLOODCAT_DIE_1,
|
|
SLAP_1,
|
|
|
|
ROBOT_BEEP,
|
|
DOOR_ELECTRICITY,
|
|
SWIM_1,
|
|
SWIM_2,
|
|
KEY_FAILURE,
|
|
TARGET_OUT_OF_RANGE,
|
|
OPEN_STATUE,
|
|
USE_STATUE_REMOTE,
|
|
USE_WIRE_CUTTERS,
|
|
DRINK_CANTEEN_FEMALE,
|
|
BLOODCAT_ATTACK,
|
|
BLOODCAT_ROAR,
|
|
ROBOT_GREETING,
|
|
ROBOT_DEATH,
|
|
GAS_EXPLODE_1,
|
|
AIR_ESCAPING_1,
|
|
|
|
OPEN_DRAWER,
|
|
CLOSE_DRAWER,
|
|
OPEN_LOCKER,
|
|
CLOSE_LOCKER,
|
|
OPEN_WOODEN_BOX,
|
|
CLOSE_WOODEN_BOX,
|
|
ROBOT_STOP,
|
|
|
|
WATER_WALK1_IN,
|
|
WATER_WALK1_OUT,
|
|
WATER_WALK2_IN,
|
|
WATER_WALK2_OUT,
|
|
|
|
PRONE_UP_SOUND,
|
|
PRONE_DOWN_SOUND,
|
|
KNEEL_UP_SOUND,
|
|
KNEEL_DOWN_SOUND,
|
|
PICKING_SOMETHING_UP,
|
|
|
|
COW_FALL,
|
|
|
|
BLOODCAT_GROWL_1,
|
|
BLOODCAT_GROWL_2,
|
|
BLOODCAT_GROWL_3,
|
|
BLOODCAT_GROWL_4,
|
|
CREATURE_GAS_NOISE,
|
|
CREATURE_FALL_PART_2,
|
|
CREATURE_DISSOLVE_1,
|
|
QUEEN_AMBIENT_NOISE,
|
|
CREATURE_FALL,
|
|
CROW_PECKING_AT_FLESH,
|
|
CROW_FLYING_AWAY,
|
|
SLAP_2,
|
|
MORTAR_START,
|
|
MORTAR_WHISTLE,
|
|
MORTAR_LOAD,
|
|
|
|
TURRET_MOVE,
|
|
TURRET_STOP,
|
|
COW_FALL_2,
|
|
KNIFE_IMPACT,
|
|
EXPLOSION_ALT_BLAST_1,
|
|
EXPLOSION_BLAST_2,
|
|
DRINK_CANTEEN_MALE,
|
|
USE_X_RAY_MACHINE,
|
|
CATCH_OBJECT,
|
|
FENCE_OPEN,
|
|
|
|
//MADD MARKER
|
|
S_BARRETT,
|
|
S_VAL,
|
|
//BREAK_LIGHT_IGNITING,
|
|
|
|
NUM_SAMPLES,
|
|
POWER_GEN_FAN_SOUND = 5001 // This is a workaround to get the generator fan positional sound working in UB campaign.
|
|
// Had to special case it because sound effects have been externalized.
|
|
};
|
|
|
|
enum AmbientDefines
|
|
{
|
|
LIGHTNING_1 = 0,
|
|
LIGHTNING_2,
|
|
RAIN_1,
|
|
BIRD_1,
|
|
BIRD_2,
|
|
CRICKETS_1,
|
|
CRICKETS_2,
|
|
CRICKET_1,
|
|
CRICKET_2,
|
|
OWL_1,
|
|
OWL_2,
|
|
OWL_3,
|
|
NIGHT_BIRD_1,
|
|
NIGHT_BIRD_2,
|
|
WIND,
|
|
|
|
NUM_AMBIENTS
|
|
};
|
|
|
|
typedef void (*SOUND_STOP_CALLBACK)( void *pData );
|
|
|
|
|
|
extern UINT8 AmbientVols[NUM_AMBIENTS];
|
|
|
|
//extern char szSoundEffects[MAX_SAMPLES][255];
|
|
|
|
|
|
BOOLEAN InitJA2Sound( );
|
|
BOOLEAN ShutdownJA2Sound( );
|
|
UINT32 PlayJA2Sample( UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan );
|
|
UINT32 PlayJA2StreamingSample( UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan );
|
|
|
|
UINT32 PlayJA2SampleFromFile( const CHAR8* szFileName, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan );
|
|
UINT32 PlayWeaponSound(STR8 szFileName, UINT32 ubVolume, UINT32 uiPan);
|
|
UINT32 PlayJA2StreamingSampleFromFile( STR8 szFileName, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan, SOUND_STOP_CALLBACK EndsCallback );
|
|
|
|
UINT32 PlayJA2Ambient( UINT32 usNum, UINT32 ubVolume, UINT32 ubLoops);
|
|
UINT32 PlayJA2AmbientRandom(UINT32 usNum, UINT32 uiTimeMin, UINT32 uiTimeMax);
|
|
|
|
UINT32 PlaySoldierJA2Sample( SoldierID usID, UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan, BOOLEAN fCheck );
|
|
|
|
|
|
|
|
UINT32 GetSoundEffectsVolume( );
|
|
void SetSoundEffectsVolume( UINT32 uiNewVolume );
|
|
|
|
UINT32 GetSpeechVolume( );
|
|
void SetSpeechVolume( UINT32 uiNewVolume );
|
|
|
|
|
|
//Calculates a volume based on the current Speech Volume level
|
|
UINT32 CalculateSpeechVolume( UINT32 uiVolume );
|
|
|
|
|
|
//Calculates a volume based on the current Sound Effects Volume level
|
|
UINT32 CalculateSoundEffectsVolume( UINT32 uiVolume );
|
|
|
|
INT32 SoundDir( INT32 sGridNo );
|
|
INT32 SoundVolume( INT8 bInitialVolume, INT32 sGridNo );
|
|
|
|
// ATE: Warning! Use this sparingly! NOT very robust - can
|
|
// have only 1 delayed sound at a time, and uses the global custom
|
|
// timer, again, of which can only be one
|
|
void PlayDelayedJA2Sample( UINT32 uiDelay, UINT32 usNum, UINT32 usRate, UINT32 ubVolume, UINT32 ubLoops, UINT32 uiPan );
|
|
|
|
|
|
#define POSITION_SOUND_FROM_SOLDIER 0x00000001
|
|
#define POSITION_SOUND_STATIONATY_OBJECT 0x00000002
|
|
|
|
INT32 NewPositionSnd( INT32 sGridNo, UINT32 uiFlags, UINT32 uiData, UINT32 iSoundToPlay, UINT8 volume );
|
|
void DeletePositionSnd( INT32 iPositionSndIndex );
|
|
void SetPositionSndsActive( );
|
|
void SetPositionSndsInActive( );
|
|
void SetPositionSndsVolumeAndPanning( );
|
|
void SetPositionSndGridNo( INT32 iPositionSndIndex, INT32 sGridNo );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|