123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- #ifdef PRECOMPILEDHEADERS
- #include "TileEngine All.h"
- #else
- #include "stdio.h"
- #include "sgp.h"
- #include "Ambient types.h"
- #include "fileman.h"
- #include "environment.h"
- #include "Sound Control.h"
- #include "Game Events.h"
- #endif
- AMBIENTDATA_STRUCT gAmbData[ MAX_AMBIENT_SOUNDS ];
- INT16 gsNumAmbData = 0;
- UINT8 gubCurrentSteadyStateAmbience = SSA_NONE;
- UINT8 gubCurrentSteadyStateSound = 0;
- UINT32 guiCurrentSteadyStateSoundHandle = NO_SAMPLE;
- STEADY_STATE_AMBIENCE gSteadyStateAmbientTable[ NUM_STEADY_STATE_AMBIENCES ] =
- {
- // NONE
- "",
- "",
- "",
- "",
- // NIGHT
- "",
- "",
- "",
- "",
- // COUNTRYSIZE
- // DAY
- "SOUNDS\\SSA\\insects Day 01.wav",
- "",
- "",
- "",
- // NIGHT
- "SOUNDS\\SSA\\night_crickets_01D.wav",
- "SOUNDS\\SSA\\night_crickets_01B.wav",
- "SOUNDS\\SSA\\night_crickets_01C.wav",
- "SOUNDS\\SSA\\night_crickets_01A.wav",
- // NEAR WATER
- // DAY
- "SOUNDS\\SSA\\swamp_day_01a.wav",
- "SOUNDS\\SSA\\swamp_day_01b.wav",
- "SOUNDS\\SSA\\swamp_day_01c.wav",
- "SOUNDS\\SSA\\swamp_day_01d.wav",
- //NIGHT
- "SOUNDS\\SSA\\marsh_at_night_01a.wav",
- "SOUNDS\\SSA\\marsh_at_night_01b.wav",
- "SOUNDS\\SSA\\marsh_at_night_01c.wav",
- "SOUNDS\\SSA\\marsh_at_night_01d.wav",
- //INWATER
- //DAY
- "SOUNDS\\SSA\\middle_of_water_01d.wav",
- "SOUNDS\\SSA\\middle_of_water_01c.wav",
- "SOUNDS\\SSA\\middle_of_water_01b.wav",
- "SOUNDS\\SSA\\middle_of_water_01a.wav",
- // night
- "SOUNDS\\SSA\\middle_of_water_01d.wav",
- "SOUNDS\\SSA\\middle_of_water_01c.wav",
- "SOUNDS\\SSA\\middle_of_water_01b.wav",
- "SOUNDS\\SSA\\middle_of_water_01a.wav",
- // HEAVY FOREST
- // day
- "SOUNDS\\SSA\\JUNGLE_DAY_01a.wav",
- "SOUNDS\\SSA\\JUNGLE_DAY_01b.wav",
- "SOUNDS\\SSA\\JUNGLE_DAY_01c.wav",
- "SOUNDS\\SSA\\JUNGLE_DAY_01d.wav",
- // night
- "SOUNDS\\SSA\\night_crickets_03a.wav",
- "SOUNDS\\SSA\\night_crickets_03b.wav",
- "SOUNDS\\SSA\\night_crickets_03c.wav",
- "SOUNDS\\SSA\\night_crickets_03d.wav",
- // PINE FOREST
- // DAY
- "SOUNDS\\SSA\\pine_forest_01a.wav",
- "SOUNDS\\SSA\\pine_forest_01b.wav",
- "SOUNDS\\SSA\\pine_forest_01c.wav",
- "SOUNDS\\SSA\\pine_forest_01d.wav",
- // NIGHT
- "SOUNDS\\SSA\\night_crickets_02a.wav",
- "SOUNDS\\SSA\\night_crickets_02b.wav",
- "SOUNDS\\SSA\\night_crickets_02c.wav",
- "SOUNDS\\SSA\\night_crickets_02d.wav",
- // ABANDANDED
- // DAY
- "SOUNDS\\SSA\\metal_wind_01a.wav",
- "SOUNDS\\SSA\\metal_wind_01b.wav",
- "SOUNDS\\SSA\\metal_wind_01c.wav",
- "SOUNDS\\SSA\\metal_wind_01d.wav",
- // NIGHT
- "SOUNDS\\SSA\\night_insects_01a.wav",
- "SOUNDS\\SSA\\night_insects_01b.wav",
- "SOUNDS\\SSA\\night_insects_01c.wav",
- "SOUNDS\\SSA\\night_insects_01d.wav",
- // AIRPORT
- // DAY
- "SOUNDS\\SSA\\rotating radar dish.wav",
- "",
- "",
- "",
- // NIGHT
- "SOUNDS\\SSA\\rotating radar dish.wav",
- "",
- "",
- "",
- // WASTE LAND
- // DAY
- "SOUNDS\\SSA\\gentle_wind.wav",
- "",
- "",
- "",
- // NIGHT
- "SOUNDS\\SSA\\insects_at_night_04.wav",
- "",
- "",
- "",
- // UNDERGROUND
- // DAY
- "SOUNDS\\SSA\\low ominous ambience.wav",
- "",
- "",
- "",
- // NIGHT
- "SOUNDS\\SSA\\low ominous ambience.wav",
- "",
- "",
- "",
- // OCEAN
- // DAY
- "SOUNDS\\SSA\\sea_01a.wav",
- "SOUNDS\\SSA\\sea_01b.wav",
- "SOUNDS\\SSA\\sea_01c.wav",
- "SOUNDS\\SSA\\sea_01d.wav",
- // NIGHT
- "SOUNDS\\SSA\\ocean_waves_01a.wav",
- "SOUNDS\\SSA\\ocean_waves_01b.wav",
- "SOUNDS\\SSA\\ocean_waves_01c.wav",
- "SOUNDS\\SSA\\ocean_waves_01d.wav",
- };
- BOOLEAN LoadAmbientControlFile( UINT8 ubAmbientID )
- {
- SGPFILENAME zFilename;
- HWFILE hFile;
- INT32 cnt;
- // BUILD FILENAME
- sprintf( zFilename, "AMBIENT\\%d.bad", ubAmbientID );
- // OPEN, LOAD
- hFile = FileOpen( zFilename, FILE_ACCESS_READ, FALSE);
- if ( !hFile )
- {
- return( FALSE );
- }
- // READ #
- if( !FileRead( hFile, &gsNumAmbData, sizeof( INT16 ), NULL ) )
- {
- return( FALSE );
- }
- // LOOP FOR OTHERS
- for ( cnt = 0; cnt < gsNumAmbData; cnt++ )
- {
- if( !FileRead( hFile, &(gAmbData[ cnt ]), sizeof( AMBIENTDATA_STRUCT ), NULL ) )
- {
- return( FALSE );
- }
- sprintf( zFilename, "AMBIENT\\%s", gAmbData[ cnt ].zFilename );
- strcpy( gAmbData[ cnt ].zFilename, zFilename );
- }
- FileClose( hFile );
- return( TRUE );
- }
- void GetAmbientDataPtr( AMBIENTDATA_STRUCT **ppAmbData, UINT16 *pusNumData )
- {
- *ppAmbData = gAmbData;
- *pusNumData = gsNumAmbData;
- }
- void StopAmbients( )
- {
- SoundStopAllRandom( );
- }
- void HandleNewSectorAmbience( UINT8 ubAmbientID )
- {
- // OK, we could have just loaded a sector, erase all ambient sounds from queue, shutdown all ambient groupings
- SoundStopAllRandom( );
- DeleteAllStrategicEventsOfType( EVENT_AMBIENT );
- if( !gfBasement && !gfCaves )
- {
- if( LoadAmbientControlFile( ubAmbientID ) )
- {
- // OK, load them up!
- BuildDayAmbientSounds( );
- }
- else
- {
- DebugMsg(TOPIC_JA2, DBG_LEVEL_0, String("Cannot load Ambient data for tileset" ) );
- }
- }
- }
- void DeleteAllAmbients()
- {
- // JA2Gold: it seems that ambient sounds don't get unloaded when we exit a sector!?
- SoundStopAllRandom();
- DeleteAllStrategicEventsOfType( EVENT_AMBIENT );
- }
- UINT32 SetupNewAmbientSound( UINT32 uiAmbientID )
- {
- RANDOMPARMS rpParms;
- memset(&rpParms, 0xff, sizeof(RANDOMPARMS));
- rpParms.uiTimeMin = gAmbData[ uiAmbientID ].uiMinTime;
- rpParms.uiTimeMax = gAmbData[ uiAmbientID ].uiMaxTime;
- rpParms.uiVolMin = CalculateSoundEffectsVolume( gAmbData[ uiAmbientID ].uiVol );
- rpParms.uiVolMax = CalculateSoundEffectsVolume( gAmbData[ uiAmbientID ].uiVol );
- rpParms.uiPriority = GROUP_AMBIENT;
- return SoundPlayRandom( gAmbData[ uiAmbientID ].zFilename, &rpParms );
- }
- UINT32 StartSteadyStateAmbient( UINT32 ubVolume, UINT32 ubLoops)
- {
- SOUNDPARMS spParms;
- memset(&spParms, 0xff, sizeof(SOUNDPARMS));
- spParms.uiVolume = CalculateSoundEffectsVolume( ubVolume );
- spParms.uiLoop = ubLoops;
- spParms.uiPriority=GROUP_AMBIENT;
- return(SoundPlay( gSteadyStateAmbientTable[ gubCurrentSteadyStateAmbience ].zSoundNames[ gubCurrentSteadyStateSound ], &spParms ) );
- }
- BOOLEAN SetSteadyStateAmbience( UINT8 ubAmbience )
- {
- BOOLEAN fInNight = FALSE;
- INT32 cnt;
- UINT8 ubNumSounds = 0;
- UINT8 ubChosenSound;
- // Stop all ambients...
- if ( guiCurrentSteadyStateSoundHandle != NO_SAMPLE )
- {
- SoundStop( guiCurrentSteadyStateSoundHandle );
- guiCurrentSteadyStateSoundHandle = NO_SAMPLE;
- }
- // Determine what time of day we are in ( day/night)
- if( gubEnvLightValue >= LIGHT_DUSK_CUTOFF)
- {
- fInNight = TRUE;
- }
- // loop through listing to get num sounds...
- for ( cnt = ( fInNight * 4 ); cnt < ( NUM_SOUNDS_PER_TIMEFRAME / 2 ); cnt++ )
- {
- if ( gSteadyStateAmbientTable[ ubAmbience ].zSoundNames[ cnt ][ 0 ] == 0 )
- {
- break;
- }
-
- ubNumSounds++;
- }
- if ( ubNumSounds == 0 )
- {
- return( FALSE );
- }
- // Pick one
- ubChosenSound = (UINT8) Random( ubNumSounds );
- // Set!
- gubCurrentSteadyStateAmbience = ubAmbience;
- gubCurrentSteadyStateSound = ubChosenSound;
- guiCurrentSteadyStateSoundHandle = StartSteadyStateAmbient( LOWVOLUME, 0 );
- return( TRUE );
- }
|