summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-02-06 18:35:24 +0100
committerSergeanur <s.anureev@yandex.ua>2020-02-07 01:30:00 +0100
commita3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be (patch)
tree99a4472def01f9b417cd4d31d76875dc32a80218
parentCullZone fix (diff)
downloadre3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.tar
re3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.tar.gz
re3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.tar.bz2
re3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.tar.lz
re3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.tar.xz
re3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.tar.zst
re3-a3e5ccde474297ab7c3fb509dcb08c4fc2f9c7be.zip
Diffstat (limited to '')
-rw-r--r--src/audio/AudioManager.h1
-rw-r--r--src/audio/DMAudio.cpp2
-rw-r--r--src/audio/DMAudio.h2
-rw-r--r--src/audio/MusicManager.cpp831
-rw-r--r--src/audio/MusicManager.h64
-rw-r--r--src/audio/audio_enums.h400
-rw-r--r--src/core/Camera.h1
-rw-r--r--src/core/ControllerConfig.h2
-rw-r--r--src/core/World.cpp5
-rw-r--r--src/skel/win/win.cpp2
10 files changed, 1006 insertions, 304 deletions
diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h
index f48a0b38..bd34c800 100644
--- a/src/audio/AudioManager.h
+++ b/src/audio/AudioManager.h
@@ -337,6 +337,7 @@ public:
uint32 GetFrameCounter() const { return m_nTimeOfRecentCrime; }
float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; }
int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[idx]; }
+ bool IsMissionAudioPlaying() const { return m_sMissionAudio.m_bPlayStatus == 1; }
// "Should" be in alphabetic order, except "getXTalkSfx"
void AddDetailsToRequestedOrderList(uint8 sample); /// ok (check once more)
diff --git a/src/audio/DMAudio.cpp b/src/audio/DMAudio.cpp
index 25b20179..a01c85ae 100644
--- a/src/audio/DMAudio.cpp
+++ b/src/audio/DMAudio.cpp
@@ -301,7 +301,7 @@ cDMAudio::ClearMissionAudio(void)
AudioManager.ClearMissionAudio();
}
-int32
+uint8
cDMAudio::GetRadioInCar(void)
{
return MusicManager.GetRadioInCar();
diff --git a/src/audio/DMAudio.h b/src/audio/DMAudio.h
index a6910b58..125263f0 100644
--- a/src/audio/DMAudio.h
+++ b/src/audio/DMAudio.h
@@ -253,7 +253,7 @@ public:
bool IsMissionAudioSampleFinished(void);
void ClearMissionAudio(void);
- int32 GetRadioInCar(void);
+ uint8 GetRadioInCar(void);
void SetRadioInCar(uint32 radio);
void SetRadioChannel(int8 radio, int32 pos);
};
diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp
index 1d059a46..5b94514b 100644
--- a/src/audio/MusicManager.cpp
+++ b/src/audio/MusicManager.cpp
@@ -1,5 +1,8 @@
#include "common.h"
+#include <time.h>
#include "MusicManager.h"
+#include "AudioManager.h"
+#include "ControllerConfig.h"
#include "Camera.h"
#include "Font.h"
#include "Hud.h"
@@ -15,35 +18,51 @@ cMusicManager &MusicManager = *(cMusicManager *)0x8F3964;
int32 &gNumRetunePresses = *(int32 *)0x650B80;
wchar *pCurrentStation = (wchar *)0x650B9C;
uint8 &cDisplay = *(uint8 *)0x650BA1;
+int32 &gRetuneCounter = *(int32*)0x650B84;
+bool& bHasStarted = *(bool*)0x650B7C;
+
+cMusicManager::cMusicManager()
+{
+ m_bIsInitialised = false;
+ m_bDisabled = false;
+ m_nMusicMode = MUSICMODE_DISABLED;
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ m_nPreviousStreamedSound = NO_STREAMED_SOUND;
+ m_bFrontendTrackFinished = false;
+ m_bPlayInFrontend = false;
+ m_bSetNextStation = false;
+ m_nAnnouncement = NO_STREAMED_SOUND;
+ m_bPreviousPlayerInCar = false;
+ m_bPlayerInCar = false;
+ m_bAnnouncementInProgress = false;
+ m_bDontServiceAmbienceTrack = false;
+ bHasStarted = false;
+}
bool
cMusicManager::PlayerInCar()
{
if(!FindPlayerVehicle())
return false;
- else {
- int32 State = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_nPedState;
- if(State == PED_DRAG_FROM_CAR || State == PED_EXIT_CAR || State == PED_ARRESTED)
- return false;
+ int32 State = FindPlayerPed()->m_nPedState;
- switch(FindPlayerVehicle()->m_modelIndex) {
- case MI_FIRETRUCK:
- case MI_AMBULAN:
- case MI_MRWHOOP:
- case MI_PREDATOR:
- case MI_TRAIN:
- case MI_SPEEDER:
- case MI_REEFER:
- case MI_GHOST: return false;
- default: return true;
- }
+ if(State == PED_DRAG_FROM_CAR || State == PED_EXIT_CAR || State == PED_ARRESTED)
+ return false;
+
+ switch(FindPlayerVehicle()->m_modelIndex) {
+ case MI_FIRETRUCK:
+ case MI_AMBULAN:
+ case MI_MRWHOOP:
+ case MI_PREDATOR:
+ case MI_TRAIN:
+ case MI_SPEEDER:
+ case MI_REEFER:
+ case MI_GHOST: return false;
+ default: return true;
}
}
-#if 0
-WRAPPER void cMusicManager::DisplayRadioStationName(void) { EAXJMP(0x57E6D0); }
-#else
void
cMusicManager::DisplayRadioStationName()
{
@@ -51,13 +70,13 @@ cMusicManager::DisplayRadioStationName()
int8 gStreamedSound;
int8 gRetuneCounter;
- if(!CTimer::GetIsPaused() && !TheCamera.m_WideScreenOn && cMusicManager::PlayerInCar() &&
+ if(!CTimer::GetIsPaused() && !TheCamera.m_WideScreenOn && PlayerInCar() &&
!CReplay::IsPlayingBack()) {
- if(MusicManager.m_bPlayerInCar && !MusicManager.m_bPreviousPlayerInCar)
+ if(m_bPlayerInCar && !m_bPreviousPlayerInCar)
pCurrentStation = nil;
if(SampleManager.IsMP3RadioChannelAvailable()) {
- gStreamedSound = MusicManager.m_nCurrentStreamedSound;
+ gStreamedSound = m_nCurrentStreamedSound;
if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT ||
gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) {
@@ -74,15 +93,15 @@ cMusicManager::DisplayRadioStationName()
if(pRetune == POLICE_RADIO) {
pRetune = RADIO_OFF;
} else if(pRetune > POLICE_RADIO) {
- pRetune = pRetune - 11;
+ pRetune = pRetune - RADIO_OFF;
}
} else {
- gStreamedSound = MusicManager.m_nCurrentStreamedSound;
+ gStreamedSound = m_nCurrentStreamedSound;
pRetune = gNumRetunePresses + gStreamedSound;
if(pRetune >= USERTRACK) {
gRetuneCounter = gNumRetunePresses;
- pRetune = MusicManager.m_nCurrentStreamedSound;
+ pRetune = m_nCurrentStreamedSound;
if(gStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
pRetune = RADIO_OFF;
@@ -119,13 +138,13 @@ cMusicManager::DisplayRadioStationName()
if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; }
if(string && pCurrentStation != string ||
- MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER &&
- MusicManager.m_nPreviousStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER) {
+ m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER &&
+ m_nPreviousStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER) {
pCurrentStation = string;
cDisplay = 60;
} else {
- if(!cDisplay) return;
- --cDisplay;
+ if(cDisplay == 0) return;
+ cDisplay--;
}
CFont::SetJustifyOff();
@@ -147,97 +166,769 @@ cMusicManager::DisplayRadioStationName()
CFont::DrawFonts();
}
}
-#endif
-WRAPPER
-void
+bool
cMusicManager::Initialise()
{
- EAXJMP(0x57CF70);
+ int pos;
+
+ if (!IsInitialised()) {
+ time_t timevalue = time(0);
+ if (timevalue == -1) {
+ pos = AudioManager.GetRandomNumber(0);
+ } else {
+ tm *pTm = localtime(&timevalue);
+ if (pTm->tm_sec == 0)
+ pTm->tm_sec = AudioManager.GetRandomNumber(0);
+ if (pTm->tm_min == 0)
+ pTm->tm_min = AudioManager.GetRandomNumber(1);
+ if (pTm->tm_hour == 0)
+ pTm->tm_hour = AudioManager.GetRandomNumber(2);
+ if (pTm->tm_mday == 0)
+ pTm->tm_mday = AudioManager.GetRandomNumber(3);
+ if (pTm->tm_mon == 0)
+ pTm->tm_mon = AudioManager.GetRandomNumber(4);
+ if (pTm->tm_year == 0)
+ pTm->tm_year = AudioManager.GetRandomNumber(3);
+ if (pTm->tm_wday == 0)
+ pTm->tm_wday = AudioManager.GetRandomNumber(2);
+ pos = pTm->tm_yday
+ * pTm->tm_wday
+ * pTm->tm_year
+ * pTm->tm_mon
+ * pTm->tm_mday
+ * pTm->tm_hour * pTm->tm_hour
+ * pTm->tm_min * pTm->tm_min
+ * pTm->tm_sec * pTm->tm_sec * pTm->tm_sec * pTm->tm_sec;
+ }
+
+ for (int i = 0; i < TOTAL_STREAMED_SOUNDS; i++) {
+ m_aTracks[i].m_nLength = SampleManager.GetStreamedFileLength(i);
+ m_aTracks[i].m_nPosition = pos * AudioManager.GetRandomNumber(i % 5) % m_aTracks[i].m_nLength;
+ m_aTracks[i].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+
+ m_bResetTimers = false;
+ m_nResetTime = 0;
+ m_nTimer = m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
+ m_bDoTrackService = false;
+ m_bIgnoreTimeDelay = false;
+ m_bRadioSetByScript = false;
+ m_nRadioStation = HEAD_RADIO;
+ m_nRadioPosition = -1;
+ m_nRadioInCar = NO_STREAMED_SOUND;
+ gNumRetunePresses = 0;
+ gRetuneCounter = 0;
+ m_bIsInitialised = true;
+ }
+ return m_bIsInitialised;
}
-WRAPPER
void
cMusicManager::Terminate()
{
- EAXJMP(0x57D140);
+ if (!IsInitialised()) return;
+
+ if (SampleManager.IsStreamPlaying(0)) {
+ SampleManager.StopStreamedFile(0);
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ m_nPreviousStreamedSound = NO_STREAMED_SOUND;
+ }
+ m_bIsInitialised = false;
+}
+
+void
+cMusicManager::ChangeMusicMode(uint8 mode)
+{
+ if (!IsInitialised()) return;
+
+ uint8 mode2;
+ switch (mode)
+ {
+ case MUSICMODE_FRONTEND: mode2 = MUSICMODE_FRONTEND; break;
+ case MUSICMODE_GAME: mode2 = MUSICMODE_GAME; break;
+ case MUSICMODE_CUTSCENE: mode2 = MUSICMODE_CUTSCENE; break;
+ case MUSICMODE_DISABLE: mode2 = MUSICMODE_DISABLED; break;
+ default: return;
+ }
+
+ if (mode2 != m_nMusicMode || mode == MUSICMODE_FRONTEND && mode2 == MUSICMODE_FRONTEND) {
+ switch (mode)
+ {
+ case MUSICMODE_FRONTEND:
+ case MUSICMODE_GAME:
+ case MUSICMODE_CUTSCENE:
+ case MUSICMODE_DISABLED:
+ if (SampleManager.IsStreamPlaying(0)) {
+ if (m_nCurrentStreamedSound < TOTAL_STREAMED_SOUNDS) {
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+ SampleManager.StopStreamedFile(0);
+ }
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ m_nPreviousStreamedSound = NO_STREAMED_SOUND;
+ m_bFrontendTrackFinished = false;
+ m_bPlayInFrontend = false;
+ m_bSetNextStation = false;
+ m_bPreviousPlayerInCar = false;
+ m_bPlayerInCar = false;
+ m_bAnnouncementInProgress = false;
+ m_nTimer = m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
+ m_bDoTrackService = false;
+ m_bIgnoreTimeDelay = true;
+ m_bDontServiceAmbienceTrack = false;
+ m_nMusicMode = mode2;
+ break;
+ default: return;
+ }
+ }
+}
+
+uint8
+cMusicManager::GetRadioInCar(void)
+{
+ if (!m_bIsInitialised) return HEAD_RADIO;
+ if (PlayerInCar()) {
+ CVehicle *veh = FindPlayerVehicle();
+ if (veh != nil){
+ if (UsesPoliceRadio(veh)) {
+ if (m_nRadioInCar == NO_STREAMED_SOUND || CReplay::IsPlayingBack() && AudioManager.m_bUserPause)
+ return POLICE_RADIO;
+ return m_nRadioInCar;
+ } else return veh->m_nRadioStation;
+ }
+ }
+
+ if (m_nRadioInCar == NO_STREAMED_SOUND || CReplay::IsPlayingBack() && AudioManager.m_bUserPause)
+ return RADIO_OFF;
+ return m_nRadioInCar;
}
-WRAPPER
void
-cMusicManager::ChangeMusicMode(int32 mode)
+cMusicManager::SetRadioInCar(uint32 station)
{
- EAXJMP(0x57D310);
+ if (m_bIsInitialised) {
+ if (!PlayerInCar()) {
+ m_nRadioInCar = station;
+ return;
+ }
+ CVehicle *veh = FindPlayerVehicle();
+ if (veh == nil) return;
+ if (UsesPoliceRadio(veh))
+ m_nRadioInCar = station;
+ else
+ veh->m_nRadioStation = station;
+ }
+}
+
+void
+cMusicManager::SetRadioChannelByScript(uint8 station, int32 pos)
+{
+ if (m_bIsInitialised && station < RADIO_OFF) {
+ m_bRadioSetByScript = true;
+ m_nRadioStation = station;
+ m_nRadioPosition = pos == -1 ? -1 : pos % m_aTracks[station].m_nLength;
+ }
+}
+
+
+void
+cMusicManager::ResetMusicAfterReload()
+{
+ m_bRadioSetByScript = false;
+ m_nRadioStation = 0;
+ m_nRadioPosition = -1;
+ m_nAnnouncement = NO_STREAMED_SOUND;
+ m_bAnnouncementInProgress = false;
+ m_bSetNextStation = false;
+ gRetuneCounter = 0;
+ gNumRetunePresses = 0;
+}
+
+
+void
+cMusicManager::ResetTimers(int32 time)
+{
+ m_bResetTimers = true;
+ m_nResetTime = time;
+}
+
+void
+cMusicManager::Service()
+{
+ if (m_bResetTimers) {
+ m_bResetTimers = false;
+ m_nLastTrackServiceTime = m_nResetTime;
+ }
+
+ if (!m_bIsInitialised || m_bDisabled) return;
+
+ if (m_nMusicMode == MUSICMODE_CUTSCENE) {
+ SampleManager.SetStreamedVolumeAndPan(AudioManager.maxVolume, 63, 1, 0);
+ return;
+ }
+
+ m_nTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (m_nTimer > (m_nLastTrackServiceTime + 2000) || m_bIgnoreTimeDelay) {
+ m_bIgnoreTimeDelay = false;
+ m_bDoTrackService = true;
+ m_nLastTrackServiceTime = m_nTimer;
+ } else m_bDoTrackService = false;
+
+ if (m_nCurrentStreamedSound == NO_STREAMED_SOUND && SampleManager.IsStreamPlaying(0))
+ SampleManager.StopStreamedFile(0);
+ else switch (m_nMusicMode) {
+ case MUSICMODE_FRONTEND: ServiceFrontEndMode(); break;
+ case MUSICMODE_GAME: ServiceGameMode(); break;
+ }
+}
+
+void
+cMusicManager::ServiceFrontEndMode()
+{
+ if (m_nCurrentStreamedSound < TOTAL_STREAMED_SOUNDS) {
+ if (m_bFrontendTrackFinished) {
+ if (!SampleManager.IsStreamPlaying(0)) {
+ switch (m_nCurrentStreamedSound)
+ {
+ case STREAMED_SOUND_MISSION_COMPLETED:
+ if (!AudioManager.m_bUserPause)
+ ChangeMusicMode(MUSICMODE_GAME);
+ break;
+ case STREAMED_SOUND_GAME_COMPLETED:
+ ChangeMusicMode(MUSICMODE_GAME);
+ break;
+ default:
+ break;
+ }
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ m_nPreviousStreamedSound = NO_STREAMED_SOUND;
+ }
+ } else if (bHasStarted) {
+ if (!SampleManager.IsStreamPlaying(0))
+ SampleManager.StartStreamedFile(m_nCurrentStreamedSound, 0, 0);
+ } else {
+ SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
+ if (!SampleManager.StartStreamedFile(m_nCurrentStreamedSound, m_nCurrentStreamedSound < STREAMED_SOUND_RADIO_POLICE ? GetTrackStartPos(m_nCurrentStreamedSound) : 0, 0))
+ return;
+ SampleManager.SetStreamedVolumeAndPan(100, 63, 0, 0);
+ if (m_bPlayInFrontend) bHasStarted = true;
+ else m_bFrontendTrackFinished = true;
+ }
+ }
+ if (SampleManager.IsStreamPlaying(0))
+ SampleManager.SetStreamedVolumeAndPan((CPad::GetPad(0)->bDisplayNoControllerMessage || CPad::GetPad(0)->bObsoleteControllerMessage) ? 0 : 100, 63, 0, 0);
+}
+
+void
+cMusicManager::ServiceGameMode()
+{
+ bool bRadioOff = false;
+ static int8 nFramesSinceCutsceneEnded = -1;
+
+ m_bPreviousPlayerInCar = m_bPlayerInCar;
+ m_bPlayerInCar = PlayerInCar();
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ if (m_bPlayerInCar) {
+ if (FindPlayerPed() != nil
+ && !FindPlayerPed()->DyingOrDead()
+ && CPad::GetPad(0)->ChangeStationJustDown()
+ && !CReplay::IsPlayingBack()
+ && FindPlayerVehicle() != nil
+ && !UsesPoliceRadio(FindPlayerVehicle())) {
+ gRetuneCounter = 30;
+ gNumRetunePresses++;
+ AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f);
+ if (SampleManager.IsMP3RadioChannelAvailable()) {
+ if (gNumRetunePresses > RADIO_OFF)
+ gNumRetunePresses -= RADIO_OFF;
+ }
+ }
+ } else {
+ nFramesSinceCutsceneEnded = -1;
+ }
+
+ if (AudioManager.m_bPreviousUserPause)
+ m_bPreviousPlayerInCar = false;
+ if (!m_bPlayerInCar) {
+ if (m_bPreviousPlayerInCar) {
+ if (m_nCurrentStreamedSound != STREAMED_SOUND_RADIO_POLICE)
+ m_nRadioInCar = m_nCurrentStreamedSound;
+ }
+ ServiceAmbience();
+ return;
+ }
+
+ if (m_bPreviousPlayerInCar) {
+ if (m_nAnnouncement < TOTAL_STREAMED_SOUNDS
+ && (m_nCurrentStreamedSound < STREAMED_SOUND_CITY_AMBIENT || m_bAnnouncementInProgress)
+ && ServiceAnnouncement())
+ {
+ if (m_bAnnouncementInProgress) {
+ m_bSetNextStation = false;
+ return;
+ }
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = GetCarTuning();
+ }
+ if (SampleManager.IsMP3RadioChannelAvailable()
+ && m_nCurrentStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER
+ && ControlsManager.GetIsKeyboardKeyJustDown(rsF9))
+ {
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = STREAMED_SOUND_RADIO_MP3_PLAYER;
+ if (FindPlayerVehicle() != nil)
+ FindPlayerVehicle()->m_nRadioStation = STREAMED_SOUND_RADIO_MP3_PLAYER;
+ AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f);
+ gRetuneCounter = 0;
+ gNumRetunePresses = 0;
+ m_bSetNextStation = false;
+ }
+ if (gNumRetunePresses) {
+ if (gRetuneCounter != 0) gRetuneCounter--;
+ else m_bSetNextStation = true;
+ }
+ if (gRetuneCounter)
+ AudioManager.DoPoliceRadioCrackle();
+ if (m_bSetNextStation) {
+ m_bSetNextStation = false;
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = GetNextCarTuning();
+ if (m_nCurrentStreamedSound == STREAMED_SOUND_CITY_AMBIENT || m_nCurrentStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
+ bRadioOff = true;
+
+ if (m_nPreviousStreamedSound == STREAMED_SOUND_CITY_AMBIENT || m_nPreviousStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
+ AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 0.0f);
+ }
+ if (m_nCurrentStreamedSound < STREAMED_SOUND_CITY_AMBIENT) {
+ if (ChangeRadioChannel()) {
+ ServiceTrack();
+ } else {
+ m_bPlayerInCar = false;
+ if (FindPlayerVehicle())
+ FindPlayerVehicle()->m_nRadioStation = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ }
+ if (CTimer::GetIsSlowMotionActive()) {
+ if (TheCamera.pTargetEntity != nil) {
+ float dist = (TheCamera.pTargetEntity->GetPosition() - TheCamera.GetPosition()).MagnitudeSqr();
+ if (dist >= 3025.0f) {
+ SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
+ } else if (dist >= 100.0f) {
+ int8 volume = ((45.0f - (Sqrt(dist) - 10.0f)) / 45.0f * 100.0f);
+ int8 pan;
+ if (AudioManager.IsMissionAudioPlaying())
+ volume /= 4;
+ if (volume != 0) {
+ CVector trVec;
+ AudioManager.TranslateEntity(&TheCamera.pTargetEntity->GetPosition(), &trVec);
+ pan = AudioManager.ComputePan(55.0f, &trVec);
+ } else {
+ pan = 0;
+ }
+ if (gRetuneCounter)
+ volume /= 4;
+ SampleManager.SetStreamedVolumeAndPan(volume, pan, 0, 0);
+ } else if (AudioManager.IsMissionAudioPlaying()) {
+ SampleManager.SetStreamedVolumeAndPan(25, 63, 0, 0);
+ } else if (gRetuneCounter) {
+ SampleManager.SetStreamedVolumeAndPan(25, 63, 0, 0);
+ } else {
+ SampleManager.SetStreamedVolumeAndPan(100, 63, 0, 0);
+ }
+ }
+ } else if (AudioManager.IsMissionAudioPlaying()) {
+ SampleManager.SetStreamedVolumeAndPan(25, 63, 0, 0);
+ nFramesSinceCutsceneEnded = 0;
+ } else {
+ int8 volume;
+ if (nFramesSinceCutsceneEnded == -1) {
+ volume = 100;
+ } else if (nFramesSinceCutsceneEnded >= 20) {
+ if (nFramesSinceCutsceneEnded >= 40) {
+ nFramesSinceCutsceneEnded = -1;
+ volume = 100;
+ } else {
+ volume = 3 * (nFramesSinceCutsceneEnded - 20) + 25;
+ nFramesSinceCutsceneEnded++;
+ }
+ } else {
+ nFramesSinceCutsceneEnded++;
+ volume = 25;
+ }
+ if (gRetuneCounter) volume /= 4;
+ SampleManager.SetStreamedVolumeAndPan(volume, 63, 0, 0);
+ }
+ return;
+ }
+ if (bRadioOff) {
+ m_nCurrentStreamedSound = m_nPreviousStreamedSound;
+ if (FindPlayerVehicle() != nil)
+ FindPlayerVehicle()->m_nRadioStation = RADIO_OFF;
+ AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_NO_RADIO, 0.0f);
+ }
+ ServiceAmbience();
+ return;
+ }
+ if (m_bRadioSetByScript) {
+ if (UsesPoliceRadio(FindPlayerVehicle())) {
+ m_nCurrentStreamedSound = STREAMED_SOUND_RADIO_POLICE;
+ } else {
+ m_nCurrentStreamedSound = m_nRadioStation;
+ if (FindPlayerVehicle()->m_nRadioStation == m_nCurrentStreamedSound) {
+ m_nPreviousStreamedSound = NO_STREAMED_SOUND;
+ SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
+ SampleManager.StopStreamedFile(0);
+ }
+ if (m_nRadioPosition != -1) {
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = m_nRadioPosition;
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+ }
+ } else {
+ m_nCurrentStreamedSound = GetCarTuning();
+ }
+ if (m_nCurrentStreamedSound >= RADIO_OFF) {
+ ServiceAmbience();
+ return;
+ }
+ if (ChangeRadioChannel()) {
+ if (m_bRadioSetByScript) {
+ m_bRadioSetByScript = false;
+ FindPlayerVehicle()->m_nRadioStation = m_nCurrentStreamedSound;
+ }
+ } else {
+ m_bPlayerInCar = false;
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ }
}
-WRAPPER
void
cMusicManager::StopFrontEndTrack()
{
- EAXJMP(0x57E3D0);
+ if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_FRONTEND && m_nCurrentStreamedSound != NO_STREAMED_SOUND) {
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ SampleManager.StopStreamedFile(0);
+ m_nPreviousStreamedSound = NO_STREAMED_SOUND;
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ }
}
-WRAPPER void
-cMusicManager::PlayAnnouncement(uint8)
+void
+cMusicManager::PlayAnnouncement(uint8 announcement)
{
- EAXJMP(0x57E430);
+ if (IsInitialised() && !m_bDisabled && !m_bAnnouncementInProgress)
+ m_nAnnouncement = announcement;
}
-WRAPPER void
-cMusicManager::PlayFrontEndTrack(uint8, uint8)
+void
+cMusicManager::PlayFrontEndTrack(uint8 track, uint8 bPlayInFrontend)
{
- EAXJMP(0x57E2E0);
+ if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS) {
+ if (m_nMusicMode == MUSICMODE_GAME) {
+ if (m_nCurrentStreamedSound != NO_STREAMED_SOUND) {
+ if (m_bAnnouncementInProgress) {
+ m_nAnnouncement = NO_STREAMED_SOUND;
+ m_bAnnouncementInProgress = false;
+ }
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+ SampleManager.StopStreamedFile(0);
+ } else if (m_nMusicMode == MUSICMODE_FRONTEND) {
+ if (m_nCurrentStreamedSound != NO_STREAMED_SOUND) {
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+ SampleManager.StopStreamedFile(0);
+ }
+
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = track;
+ m_bPlayInFrontend = !!bPlayInFrontend;
+ m_bFrontendTrackFinished = false;
+ m_bDoTrackService = true;
+ bHasStarted = false;
+ if (m_nCurrentStreamedSound < STREAMED_SOUND_RADIO_POLICE) {
+ gRetuneCounter = 0;
+ gNumRetunePresses = 0;
+ }
+ }
}
-WRAPPER void
-cMusicManager::PreloadCutSceneMusic(uint8)
+void
+cMusicManager::PreloadCutSceneMusic(uint8 track)
{
- EAXJMP(0x57E210);
+ if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS && m_nMusicMode == MUSICMODE_CUTSCENE) {
+ AudioManager.ResetPoliceRadio();
+ while (SampleManager.IsStreamPlaying(0))
+ SampleManager.StopStreamedFile(0);
+ SampleManager.PreloadStreamedFile(track, 0);
+ SampleManager.SetStreamedVolumeAndPan(AudioManager.maxVolume, 63, 1, 0);
+ m_nCurrentStreamedSound = track;
+ }
}
-WRAPPER void
+void
cMusicManager::PlayPreloadedCutSceneMusic(void)
{
- EAXJMP(0x57E290);
+ if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE)
+ SampleManager.StartPreloadedStreamedFile(0);
}
-WRAPPER void
+void
cMusicManager::StopCutSceneMusic(void)
{
- EAXJMP(0x57E2B0);
+ if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE) {
+ SampleManager.StopStreamedFile(0);
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ }
}
-WRAPPER int32
-cMusicManager::GetRadioInCar(void)
+uint32
+cMusicManager::GetTrackStartPos(uint8 track)
{
- EAXJMP(0x57D1D0);
+ uint32 result;
+ uint32 timer = m_aTracks[track].m_nLastPosCheckTimer;
+ if (CTimer::GetTimeInMillisecondsPauseMode() <= timer) {
+ result = m_aTracks[track].m_nPosition;
+ m_aTracks[track].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ } else
+ result = min(CTimer::GetTimeInMillisecondsPauseMode() - timer, 90000) + m_aTracks[track].m_nPosition;
+
+ if (result > m_aTracks[track].m_nLength) result %= m_aTracks[track].m_nLength;
+ return result;
}
-WRAPPER void
-cMusicManager::SetRadioInCar(uint32)
+
+bool
+cMusicManager::UsesPoliceRadio(CVehicle *veh)
{
- EAXJMP(0x57D2C0);
+ switch (veh->GetModelIndex())
+ {
+ case MI_FBICAR:
+ case MI_POLICE:
+ case MI_ENFORCER:
+ case MI_PREDATOR:
+ case MI_RHINO:
+ case MI_BARRACKS:
+ return true;
+ }
+ return false;
}
-WRAPPER void
-cMusicManager::SetRadioChannelByScript(uint8, int32)
+void
+cMusicManager::ServiceAmbience()
{
- EAXJMP(0x57D180);
+ uint8 volume;
+
+ if (m_bAnnouncementInProgress) {
+ m_nAnnouncement = NO_STREAMED_SOUND;
+ m_bAnnouncementInProgress = false;
+ }
+ if (m_nCurrentStreamedSound < STREAMED_SOUND_CITY_AMBIENT) {
+ if (SampleManager.IsStreamPlaying(0)) {
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ SampleManager.StopStreamedFile(0);
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ return;
+ }
+ m_nCurrentStreamedSound = STREAMED_SOUND_CITY_AMBIENT;
+ }
+ if (CWorld::Players[CWorld::PlayerInFocus].m_WBState != WBSTATE_PLAYING && !SampleManager.IsStreamPlaying(0)) {
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ return;
+ }
+
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = TheCamera.DistanceToWater <= 45.0f ? STREAMED_SOUND_WATER_AMBIENT : STREAMED_SOUND_CITY_AMBIENT;
+
+ if (m_nCurrentStreamedSound == m_nPreviousStreamedSound) {
+ ComputeAmbienceVol(false, volume);
+ SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0);
+ if (m_bDontServiceAmbienceTrack) {
+ if (SampleManager.IsStreamPlaying(0))
+ m_bDontServiceAmbienceTrack = false;
+ } else ServiceTrack();
+ } else {
+ if (m_nPreviousStreamedSound < TOTAL_STREAMED_SOUNDS) {
+ m_aTracks[m_nPreviousStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nPreviousStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ SampleManager.StopStreamedFile(0);
+ }
+ uint32 pos = GetTrackStartPos(m_nCurrentStreamedSound);
+ SampleManager.SetStreamedVolumeAndPan(0, 63, 1, 0);
+ if (SampleManager.StartStreamedFile(m_nCurrentStreamedSound, pos, 0)) {
+ ComputeAmbienceVol(true, volume);
+ SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0);
+ m_bDontServiceAmbienceTrack = true;
+ } else
+ m_nCurrentStreamedSound = NO_STREAMED_SOUND;
+ }
}
-WRAPPER
void
-cMusicManager::ResetMusicAfterReload()
+cMusicManager::ComputeAmbienceVol(uint8 reset, uint8 &outVolume)
{
- EAXJMP(0x57CF30);
+ static float fVol = 0.0f;
+
+ if (reset)
+ fVol = 0.0f;
+ else if (fVol < 60.0f)
+ fVol += 1.0f;
+
+ if (TheCamera.DistanceToWater > 70.0f)
+ outVolume = fVol;
+ else if (TheCamera.DistanceToWater > 45.0f)
+ outVolume = (TheCamera.DistanceToWater - 45.0f) / 25.0f * fVol;
+ else if (TheCamera.DistanceToWater > 20.0f)
+ outVolume = (45.0f - TheCamera.DistanceToWater) / 25.0f * fVol;
+ else
+ outVolume = fVol;
}
-WRAPPER
-void cMusicManager::ResetTimers(int32) { EAXJMP(0x57D420); }
-
-WRAPPER
void
-cMusicManager::Service()
+cMusicManager::ServiceTrack()
{
- EAXJMP(0x57D440);
+ if (m_bDoTrackService) {
+ if (!SampleManager.IsStreamPlaying(0))
+ SampleManager.StartStreamedFile(m_nCurrentStreamedSound, 0, 0);
+ }
}
+
+bool
+cMusicManager::ServiceAnnouncement()
+{
+ static int8 cCheck = 0;
+ if (m_bAnnouncementInProgress) {
+ if (!SampleManager.IsStreamPlaying(0)) {
+ m_nAnnouncement = NO_STREAMED_SOUND;
+ m_bAnnouncementInProgress = false;
+ }
+ return true;
+ }
+
+ if (++cCheck >= 30) {
+ cCheck = 0;
+ int pos = SampleManager.GetStreamedFilePosition(0);
+ if (SampleManager.IsStreamPlaying(0)) {
+ if (m_nCurrentStreamedSound != NO_STREAMED_SOUND) {
+ m_aTracks[m_nCurrentStreamedSound].m_nPosition = pos;
+ m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ SampleManager.StopStreamedFile(0);
+ }
+ }
+
+ SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
+ if (SampleManager.StartStreamedFile(m_nAnnouncement, 0, 0)) {
+ SampleManager.SetStreamedVolumeAndPan(AudioManager.IsMissionAudioPlaying() ? 25 : 100, 63, 0, 0);
+ m_bAnnouncementInProgress = true;
+ m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nCurrentStreamedSound = m_nAnnouncement;
+ return true;
+ }
+
+ if (cCheck != 0) cCheck--;
+ else cCheck = 30;
+ return false;
+ }
+
+ return false;
+}
+
+uint8
+cMusicManager::GetCarTuning()
+{
+ CVehicle *veh = FindPlayerVehicle();
+ if (veh == nil) return RADIO_OFF;
+ if (UsesPoliceRadio(veh)) return POLICE_RADIO;
+ if (veh->m_nRadioStation == USERTRACK && !SampleManager.IsMP3RadioChannelAvailable())
+ veh->m_nRadioStation = AudioManager.GetRandomNumber(2) % USERTRACK;
+ return veh->m_nRadioStation;
+}
+
+uint8
+cMusicManager::GetNextCarTuning()
+{
+ CVehicle *veh = FindPlayerVehicle();
+ if (veh == nil) return RADIO_OFF;
+ if (UsesPoliceRadio(veh)) return POLICE_RADIO;
+ if (gNumRetunePresses != 0) {
+ if (SampleManager.IsMP3RadioChannelAvailable()) {
+ if (veh->m_nRadioStation == RADIO_OFF)
+ veh->m_nRadioStation = POLICE_RADIO;
+ veh->m_nRadioStation += gNumRetunePresses;
+ if (veh->m_nRadioStation == POLICE_RADIO)
+ veh->m_nRadioStation = RADIO_OFF;
+ else if (veh->m_nRadioStation > POLICE_RADIO)
+ veh->m_nRadioStation -= RADIO_OFF;
+ } else if (gNumRetunePresses + veh->m_nRadioStation >= USERTRACK) {
+ while (gNumRetunePresses) {
+ if (veh->m_nRadioStation == RADIO_OFF)
+ veh->m_nRadioStation = HEAD_RADIO;
+ else if (veh->m_nRadioStation < USERTRACK)
+ ++veh->m_nRadioStation;
+
+ if (veh->m_nRadioStation == USERTRACK)
+ veh->m_nRadioStation = RADIO_OFF;
+ --gNumRetunePresses;
+ }
+ } else
+ veh->m_nRadioStation += gNumRetunePresses;
+ gNumRetunePresses = 0;
+ }
+ return veh->m_nRadioStation;
+}
+
+bool
+cMusicManager::ChangeRadioChannel()
+{
+ if (m_nCurrentStreamedSound != m_nPreviousStreamedSound) {
+ if (m_nPreviousStreamedSound < TOTAL_STREAMED_SOUNDS) {
+ m_aTracks[m_nPreviousStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nPreviousStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
+ SampleManager.StopStreamedFile(0);
+ }
+ if (SampleManager.IsStreamPlaying(0))
+ return false;
+ if (!SampleManager.StartStreamedFile(m_nCurrentStreamedSound, GetTrackStartPos(m_nCurrentStreamedSound), 0))
+ return false;
+ SampleManager.SetStreamedVolumeAndPan(AudioManager.IsMissionAudioPlaying() ? 25 : 100, 63, 0, 0);
+ }
+ return true;
+}
+
+STARTPATCHES
+InjectHook(0x57E4B0, &cMusicManager::PlayerInCar, PATCH_JUMP);
+InjectHook(0x57E6D0, &cMusicManager::DisplayRadioStationName, PATCH_JUMP);
+InjectHook(0x57CF70, &cMusicManager::Initialise, PATCH_JUMP);
+InjectHook(0x57D140, &cMusicManager::Terminate, PATCH_JUMP);
+InjectHook(0x57D1D0, &cMusicManager::GetRadioInCar, PATCH_JUMP);
+InjectHook(0x57D2C0, &cMusicManager::SetRadioInCar, PATCH_JUMP);
+InjectHook(0x57D180, &cMusicManager::SetRadioChannelByScript, PATCH_JUMP);
+InjectHook(0x57CF30, &cMusicManager::ResetMusicAfterReload, PATCH_JUMP);
+InjectHook(0x57E6A0, &cMusicManager::UsesPoliceRadio, PATCH_JUMP);
+InjectHook(0x57D310, &cMusicManager::ChangeMusicMode, PATCH_JUMP);
+InjectHook(0x57D420, &cMusicManager::ResetTimers, PATCH_JUMP);
+InjectHook(0x57D440, &cMusicManager::Service, PATCH_JUMP);
+InjectHook(0x57D530, &cMusicManager::ServiceFrontEndMode, PATCH_JUMP);
+InjectHook(0x57E3D0, &cMusicManager::StopFrontEndTrack, PATCH_JUMP);
+InjectHook(0x57E430, &cMusicManager::PlayAnnouncement, PATCH_JUMP);
+InjectHook(0x57E2E0, &cMusicManager::PlayFrontEndTrack, PATCH_JUMP);
+InjectHook(0x57E210, &cMusicManager::PreloadCutSceneMusic, PATCH_JUMP);
+InjectHook(0x57E290, &cMusicManager::PlayPreloadedCutSceneMusic, PATCH_JUMP);
+InjectHook(0x57E2B0, &cMusicManager::StopCutSceneMusic, PATCH_JUMP);
+InjectHook(0x57E450, &cMusicManager::GetTrackStartPos, PATCH_JUMP);
+InjectHook(0x57D690, &cMusicManager::ServiceGameMode, PATCH_JUMP);
+InjectHook(0x57DCB0, &cMusicManager::ServiceAmbience, PATCH_JUMP);
+InjectHook(0x57DEA0, &cMusicManager::ComputeAmbienceVol, PATCH_JUMP);
+InjectHook(0x57E100, &cMusicManager::ServiceTrack, PATCH_JUMP);
+InjectHook(0x57DFC0, &cMusicManager::ServiceAnnouncement, PATCH_JUMP);
+InjectHook(0x57E530, &cMusicManager::GetCarTuning, PATCH_JUMP);
+InjectHook(0x57E5A0, &cMusicManager::GetNextCarTuning, PATCH_JUMP);
+InjectHook(0x57E130, &cMusicManager::ChangeRadioChannel, PATCH_JUMP);
+ENDPATCHES \ No newline at end of file
diff --git a/src/audio/MusicManager.h b/src/audio/MusicManager.h
index 709fe56a..5c255069 100644
--- a/src/audio/MusicManager.h
+++ b/src/audio/MusicManager.h
@@ -2,7 +2,7 @@
#include "audio_enums.h"
-class tMP3Sample
+class tStreamedSample
{
public:
uint32 m_nLength;
@@ -10,52 +10,46 @@ public:
uint32 m_nLastPosCheckTimer;
};
+class CVehicle;
+
class cMusicManager
{
public:
bool m_bIsInitialised;
- uint8 field_1;
+ bool m_bDisabled;
uint8 m_nMusicMode;
uint8 m_nCurrentStreamedSound;
uint8 m_nPreviousStreamedSound;
- uint8 field_5;
- uint8 field_6;
- uint8 field_7;
- bool m_bAnnouncement;
+ bool m_bFrontendTrackFinished;
+ bool m_bPlayInFrontend;
+ bool m_bSetNextStation;
+ uint8 m_nAnnouncement;
bool m_bPreviousPlayerInCar;
bool m_bPlayerInCar;
bool m_bAnnouncementInProgress;
- tMP3Sample m_asMP3Samples[TOTAL_STREAMED_SOUNDS];
- uint8 field_2364;
- uint8 field_2365;
- uint8 field_2366;
- uint8 field_2367;
- uint32 field_2368;
- uint32 field_2372;
- uint32 field_2376;
- uint8 field_2380;
- uint8 field_2381;
- uint8 field_2382;
+ tStreamedSample m_aTracks[TOTAL_STREAMED_SOUNDS];
+ bool m_bResetTimers;
+ uint32 m_nResetTime;
+ uint32 m_nLastTrackServiceTime;
+ uint32 m_nTimer;
+ bool m_bDoTrackService;
+ bool m_bIgnoreTimeDelay;
+ bool m_bDontServiceAmbienceTrack;
bool m_bRadioSetByScript;
uint8 m_nRadioStation;
- uint8 field_2385;
- uint8 field_2386;
- uint8 field_2387;
- uint32 m_nRadioPosition;
- bool m_bRadioInCar;
- uint8 field_2393;
- uint8 field_2394;
- uint8 field_2395;
+ int32 m_nRadioPosition;
+ uint8 m_nRadioInCar;
public:
+ cMusicManager();
bool IsInitialised() { return m_bIsInitialised; }
uint32 GetMusicMode() { return m_nMusicMode; }
uint8 GetCurrentTrack() { return m_nCurrentStreamedSound; }
- void Initialise();
+ bool Initialise();
void Terminate();
- void ChangeMusicMode(int32 mode);
+ void ChangeMusicMode(uint8 mode);
void StopFrontEndTrack();
bool PlayerInCar();
@@ -66,7 +60,7 @@ public:
void PreloadCutSceneMusic(uint8);
void PlayPreloadedCutSceneMusic(void);
void StopCutSceneMusic(void);
- int32 GetRadioInCar(void);
+ uint8 GetRadioInCar(void);
void SetRadioInCar(uint32);
void SetRadioChannelByScript(uint8, int32);
@@ -74,6 +68,20 @@ public:
void ResetTimers(int32);
void Service();
+ void ServiceFrontEndMode();
+ void ServiceGameMode();
+ void ServiceAmbience();
+ void ServiceTrack();
+
+ bool UsesPoliceRadio(CVehicle *veh);
+ uint32 GetTrackStartPos(uint8);
+
+ void ComputeAmbienceVol(uint8 reset, uint8& outVolume);
+ bool ServiceAnnouncement();
+
+ uint8 GetCarTuning();
+ uint8 GetNextCarTuning();
+ bool ChangeRadioChannel();
};
static_assert(sizeof(cMusicManager) == 0x95C, "cMusicManager: error");
diff --git a/src/audio/audio_enums.h b/src/audio/audio_enums.h
index 86f9f87f..8136ff66 100644
--- a/src/audio/audio_enums.h
+++ b/src/audio/audio_enums.h
@@ -21,210 +21,210 @@ enum eMusicMode
MUSICMODE_FRONTEND = 0,
MUSICMODE_GAME,
MUSICMODE_CUTSCENE,
- MUSICMODE_OFF,
- MUSICMODE_4,
+ MUSICMODE_DISABLE,
+ MUSICMODE_DISABLED,
};
enum eStreamedSounds
{
- STREAMED_SOUND_RADIO_HEAD = 0,
- STREAMED_SOUND_RADIO_CLASSIC = 1,
- STREAMED_SOUND_RADIO_KJAH = 2,
- STREAMED_SOUND_RADIO_RISE = 3,
- STREAMED_SOUND_RADIO_LIPS = 4,
- STREAMED_SOUND_RADIO_GAME = 5,
- STREAMED_SOUND_RADIO_MSX = 6,
- STREAMED_SOUND_RADIO_FLASH = 7,
- STREAMED_SOUND_RADIO_CHAT = 8,
- STREAMED_SOUND_RADIO_MP3_PLAYER = 9,
- STREAMED_SOUND_RADIO_POLICE = 10,
- STREAMED_SOUND_CITY_AMBIENT = 11,
- STREAMED_SOUND_WATER_AMBIENT = 12,
- STREAMED_SOUND_ANNOUNCE_COMMERCIAL_OPEN = 13,
- STREAMED_SOUND_ANNOUNCE_SUBURBAN_OPEN = 14,
- STREAMED_SOUND_NEWS_INTRO = 15,
- STREAMED_SOUND_BANK_INTRO = 16,
- STREAMED_SOUND_CUTSCENE_LUIGI1_LG = 17,
- STREAMED_SOUND_CUTSCENE_LUIGI2_DSB = 18,
- STREAMED_SOUND_CUTSCENE_LUIGI3_DM = 19,
- STREAMED_SOUND_CUTSCENE_LUIGI4_PAP = 20,
- STREAMED_SOUND_CUTSCENE_LUIGI5_TFB = 21,
- STREAMED_SOUND_CUTSCENE_JOEY0_DM2 = 22,
- STREAMED_SOUND_CUTSCENE_JOEY1_LFL = 23,
- STREAMED_SOUND_CUTSCENE_JOEY2_KCL = 24,
- STREAMED_SOUND_CUTSCENE_JOEY3_VH = 25,
- STREAMED_SOUND_CUTSCENE_JOEY4_ETH = 26,
- STREAMED_SOUND_CUTSCENE_JOEY5_DST = 27,
- STREAMED_SOUND_CUTSCENE_JOEY6_TBJ = 28,
- STREAMED_SOUND_CUTSCENE_TONI1_TOL = 29,
- STREAMED_SOUND_CUTSCENE_TONI2_TPU = 30,
- STREAMED_SOUND_CUTSCENE_TONI3_MAS = 31,
- STREAMED_SOUND_CUTSCENE_TONI4_TAT = 32,
- STREAMED_SOUND_CUTSCENE_TONI5_BF = 33,
- STREAMED_SOUND_CUTSCENE_SAL0_MAS = 34,
- STREAMED_SOUND_CUTSCENE_SAL1_PF = 35,
- STREAMED_SOUND_CUTSCENE_SAL2_CTG = 36,
- STREAMED_SOUND_CUTSCENE_SAL3_RTC = 37,
- STREAMED_SOUND_CUTSCENE_SAL5_LRQ = 38,
- STREAMED_SOUND_CUTSCENE_SAL4_BDBA = 39,
- STREAMED_SOUND_CUTSCENE_SAL4_BDBB = 40,
- STREAMED_SOUND_CUTSCENE_SAL2_CTG2 = 41,
- STREAMED_SOUND_CUTSCENE_SAL4_BDBD = 42,
- STREAMED_SOUND_CUTSCENE_SAL5_LRQB = 43,
- STREAMED_SOUND_CUTSCENE_SAL5_LRQC = 44,
- STREAMED_SOUND_CUTSCENE_ASUKA_1_SSO = 45,
- STREAMED_SOUND_CUTSCENE_ASUKA_2_PP = 46,
- STREAMED_SOUND_CUTSCENE_ASUKA_3_SS = 47,
- STREAMED_SOUND_CUTSCENE_ASUKA_4_PDR = 48,
- STREAMED_SOUND_CUTSCENE_ASUKA_5_K2FT = 49,
- STREAMED_SOUND_CUTSCENE_KENJI1_KBO = 50,
- STREAMED_SOUND_CUTSCENE_KENJI2_GIS = 51,
- STREAMED_SOUND_CUTSCENE_KENJI3_DS = 52,
- STREAMED_SOUND_CUTSCENE_KENJI4_SHI = 53,
- STREAMED_SOUND_CUTSCENE_KENJI5_SD = 54,
- STREAMED_SOUND_CUTSCENE_RAY0_PDR2 = 55,
- STREAMED_SOUND_CUTSCENE_RAY1_SW = 56,
- STREAMED_SOUND_CUTSCENE_RAY2_AP = 57,
- STREAMED_SOUND_CUTSCENE_RAY3_ED = 58,
- STREAMED_SOUND_CUTSCENE_RAY4_GF = 59,
- STREAMED_SOUND_CUTSCENE_RAY5_PB = 60,
- STREAMED_SOUND_CUTSCENE_RAY6_MM = 61,
- STREAMED_SOUND_CUTSCENE_DONALD1_STOG = 62,
- STREAMED_SOUND_CUTSCENE_DONALD2_KK = 63,
- STREAMED_SOUND_CUTSCENE_DONALD3_ADO = 64,
- STREAMED_SOUND_CUTSCENE_DONALD5_ES = 65,
- STREAMED_SOUND_CUTSCENE_DONALD7_MLD = 66,
- STREAMED_SOUND_CUTSCENE_DONALD4_GTA = 67,
- STREAMED_SOUND_CUTSCENE_DONALD4_GTA2 = 68,
- STREAMED_SOUND_CUTSCENE_DONALD6_STS = 69,
- STREAMED_SOUND_CUTSCENE_ASUKA6_BAIT = 70,
- STREAMED_SOUND_CUTSCENE_ASUKA7_ETG = 71,
- STREAMED_SOUND_CUTSCENE_ASUKA8_PS = 72,
- STREAMED_SOUND_CUTSCENE_ASUKA9_ASD = 73,
- STREAMED_SOUND_CUTSCENE_KENJI4_SHI2 = 74,
- STREAMED_SOUND_CUTSCENE_CATALINA1_TEX = 75,
- STREAMED_SOUND_CUTSCENE_ELBURRO1_PH1 = 76,
- STREAMED_SOUND_CUTSCENE_ELBURRO2_PH2 = 77,
- STREAMED_SOUND_CUTSCENE_ELBURRO3_PH3 = 78,
- STREAMED_SOUND_CUTSCENE_ELBURRO4_PH4 = 79,
- STREAMED_SOUND_CUTSCENE_YARDIE_PH1 = 80,
- STREAMED_SOUND_CUTSCENE_YARDIE_PH2 = 81,
- STREAMED_SOUND_CUTSCENE_YARDIE_PH3 = 82,
- STREAMED_SOUND_CUTSCENE_YARDIE_PH4 = 83,
- STREAMED_SOUND_CUTSCENE_HOODS_PH1 = 84,
- STREAMED_SOUND_CUTSCENE_HOODS_PH2 = 85,
- STREAMED_SOUND_CUTSCENE_HOODS_PH3 = 86,
- STREAMED_SOUND_CUTSCENE_HOODS_PH4 = 87,
- STREAMED_SOUND_CUTSCENE_HOODS_PH5 = 88,
- STREAMED_SOUND_CUTSCENE_MARTY_PH1 = 89,
- STREAMED_SOUND_CUTSCENE_MARTY_PH2 = 90,
- STREAMED_SOUND_CUTSCENE_MARTY_PH3 = 91,
- STREAMED_SOUND_CUTSCENE_MARTY_PH4 = 92,
- STREAMED_SOUND_MISSION_COMPLETED = 93,
- STREAMED_SOUND_GAME_COMPLETED = 94,
- STREAMED_SOUND_MISSION_LIB_A1 = 95,
- STREAMED_SOUND_MISSION_LIB_A2 = 96,
- STREAMED_SOUND_MISSION_LIB_A = 97,
- STREAMED_SOUND_MISSION_LIB_B = 98,
- STREAMED_SOUND_MISSION_LIB_C = 99,
- STREAMED_SOUND_MISSION_LIB_D = 100,
- STREAMED_SOUND_MISSION_L2_A = 101,
- STREAMED_SOUND_MISSION_J4T_1 = 102,
- STREAMED_SOUND_MISSION_J4T_2 = 103,
- STREAMED_SOUND_MISSION_J4T_3 = 104,
- STREAMED_SOUND_MISSION_J4T_4 = 105,
- STREAMED_SOUND_MISSION_J4_A = 106,
- STREAMED_SOUND_MISSION_J4_B = 107,
- STREAMED_SOUND_MISSION_J4_C = 108,
- STREAMED_SOUND_MISSION_J4_D = 109,
- STREAMED_SOUND_MISSION_J4_E = 110,
- STREAMED_SOUND_MISSION_J4_F = 111,
- STREAMED_SOUND_MISSION_J6_1 = 112,
- STREAMED_SOUND_MISSION_J6_A = 113,
- STREAMED_SOUND_MISSION_J6_B = 114,
- STREAMED_SOUND_MISSION_J6_C = 115,
- STREAMED_SOUND_MISSION_J6_D = 116,
- STREAMED_SOUND_MISSION_T4_A = 117,
- STREAMED_SOUND_MISSION_S1_A = 118,
- STREAMED_SOUND_MISSION_S1_A1 = 119,
- STREAMED_SOUND_MISSION_S1_B = 120,
- STREAMED_SOUND_MISSION_S1_C = 121,
- STREAMED_SOUND_MISSION_S1_C1 = 122,
- STREAMED_SOUND_MISSION_S1_D = 123,
- STREAMED_SOUND_MISSION_S1_E = 124,
- STREAMED_SOUND_MISSION_S1_F = 125,
- STREAMED_SOUND_MISSION_S1_G = 126,
- STREAMED_SOUND_MISSION_S1_H = 127,
- STREAMED_SOUND_MISSION_S1_I = 128,
- STREAMED_SOUND_MISSION_S1_J = 129,
- STREAMED_SOUND_MISSION_S1_K = 130,
- STREAMED_SOUND_MISSION_S1_L = 131,
- STREAMED_SOUND_MISSION_S3_A = 132,
- STREAMED_SOUND_MISSION_S3_B = 133,
- STREAMED_SOUND_MISSION_EL3_A = 134,
- STREAMED_SOUND_MISSION_MF1_A = 135,
- STREAMED_SOUND_MISSION_MF2_A = 136,
- STREAMED_SOUND_MISSION_MF3_A = 137,
- STREAMED_SOUND_MISSION_MF3_B = 138,
- STREAMED_SOUND_MISSION_MF3_B1 = 139,
- STREAMED_SOUND_MISSION_MF3_C = 140,
- STREAMED_SOUND_MISSION_MF4_A = 141,
- STREAMED_SOUND_MISSION_MF4_B = 142,
- STREAMED_SOUND_MISSION_MF4_C = 143,
- STREAMED_SOUND_MISSION_A1_A = 144,
- STREAMED_SOUND_MISSION_A3_A = 145,
- STREAMED_SOUND_MISSION_A5_A = 146,
- STREAMED_SOUND_MISSION_A4_A = 147,
- STREAMED_SOUND_MISSION_A4_B = 148,
- STREAMED_SOUND_MISSION_A4_C = 149,
- STREAMED_SOUND_MISSION_A4_D = 150,
- STREAMED_SOUND_MISSION_K1_A = 151,
- STREAMED_SOUND_MISSION_K3_A = 152,
- STREAMED_SOUND_MISSION_R1_A = 153,
- STREAMED_SOUND_MISSION_R2_A = 154,
- STREAMED_SOUND_MISSION_R2_B = 155,
- STREAMED_SOUND_MISSION_R2_C = 156,
- STREAMED_SOUND_MISSION_R2_D = 157,
- STREAMED_SOUND_MISSION_R2_E = 158,
- STREAMED_SOUND_MISSION_R2_F = 159,
- STREAMED_SOUND_MISSION_R2_G = 160,
- STREAMED_SOUND_MISSION_R2_H = 161,
- STREAMED_SOUND_MISSION_R5_A = 162,
- STREAMED_SOUND_MISSION_R6_A = 163,
- STREAMED_SOUND_MISSION_R6_A1 = 164,
- STREAMED_SOUND_MISSION_R6_B = 165,
- STREAMED_SOUND_MISSION_LO2_A = 166,
- STREAMED_SOUND_MISSION_LO6_A = 167,
- STREAMED_SOUND_MISSION_YD2_A = 168,
- STREAMED_SOUND_MISSION_YD2_B = 169,
- STREAMED_SOUND_MISSION_YD2_C = 170,
- STREAMED_SOUND_MISSION_YD2_C1 = 171,
- STREAMED_SOUND_MISSION_YD2_D = 172,
- STREAMED_SOUND_MISSION_YD2_E = 173,
- STREAMED_SOUND_MISSION_YD2_F = 174,
- STREAMED_SOUND_MISSION_YD2_G = 175,
- STREAMED_SOUND_MISSION_YD2_H = 176,
- STREAMED_SOUND_MISSION_YD2_ASS = 177,
- STREAMED_SOUND_MISSION_YD2_OK = 178,
- STREAMED_SOUND_MISSION_H5_A = 179,
- STREAMED_SOUND_MISSION_H5_B = 180,
- STREAMED_SOUND_MISSION_H5_C = 181,
- STREAMED_SOUND_MISSION_AMMU_A = 182,
- STREAMED_SOUND_MISSION_AMMU_B = 183,
- STREAMED_SOUND_MISSION_AMMU_C = 184,
- STREAMED_SOUND_MISSION_DOOR_1 = 185,
- STREAMED_SOUND_MISSION_DOOR_2 = 186,
- STREAMED_SOUND_MISSION_DOOR_3 = 187,
- STREAMED_SOUND_MISSION_DOOR_4 = 188,
- STREAMED_SOUND_MISSION_DOOR_5 = 189,
- STREAMED_SOUND_MISSION_DOOR_6 = 190,
- STREAMED_SOUND_MISSION_T3_A = 191,
- STREAMED_SOUND_MISSION_T3_B = 192,
- STREAMED_SOUND_MISSION_T3_C = 193,
- STREAMED_SOUND_MISSION_K1_B = 194,
- STREAMED_SOUND_MISSION_CAT1 = 195,
- TOTAL_STREAMED_SOUNDS = 196,
- NO_STREAMED_SOUND = 197,
+ STREAMED_SOUND_RADIO_HEAD,
+ STREAMED_SOUND_RADIO_CLASSIC,
+ STREAMED_SOUND_RADIO_KJAH,
+ STREAMED_SOUND_RADIO_RISE,
+ STREAMED_SOUND_RADIO_LIPS,
+ STREAMED_SOUND_RADIO_GAME,
+ STREAMED_SOUND_RADIO_MSX,
+ STREAMED_SOUND_RADIO_FLASH,
+ STREAMED_SOUND_RADIO_CHAT,
+ STREAMED_SOUND_RADIO_MP3_PLAYER,
+ STREAMED_SOUND_RADIO_POLICE,
+ STREAMED_SOUND_CITY_AMBIENT,
+ STREAMED_SOUND_WATER_AMBIENT,
+ STREAMED_SOUND_ANNOUNCE_COMMERCIAL_OPEN,
+ STREAMED_SOUND_ANNOUNCE_SUBURBAN_OPEN,
+ STREAMED_SOUND_NEWS_INTRO,
+ STREAMED_SOUND_BANK_INTRO,
+ STREAMED_SOUND_CUTSCENE_LUIGI1_LG,
+ STREAMED_SOUND_CUTSCENE_LUIGI2_DSB,
+ STREAMED_SOUND_CUTSCENE_LUIGI3_DM,
+ STREAMED_SOUND_CUTSCENE_LUIGI4_PAP,
+ STREAMED_SOUND_CUTSCENE_LUIGI5_TFB,
+ STREAMED_SOUND_CUTSCENE_JOEY0_DM2,
+ STREAMED_SOUND_CUTSCENE_JOEY1_LFL,
+ STREAMED_SOUND_CUTSCENE_JOEY2_KCL,
+ STREAMED_SOUND_CUTSCENE_JOEY3_VH,
+ STREAMED_SOUND_CUTSCENE_JOEY4_ETH,
+ STREAMED_SOUND_CUTSCENE_JOEY5_DST,
+ STREAMED_SOUND_CUTSCENE_JOEY6_TBJ,
+ STREAMED_SOUND_CUTSCENE_TONI1_TOL,
+ STREAMED_SOUND_CUTSCENE_TONI2_TPU,
+ STREAMED_SOUND_CUTSCENE_TONI3_MAS,
+ STREAMED_SOUND_CUTSCENE_TONI4_TAT,
+ STREAMED_SOUND_CUTSCENE_TONI5_BF,
+ STREAMED_SOUND_CUTSCENE_SAL0_MAS,
+ STREAMED_SOUND_CUTSCENE_SAL1_PF,
+ STREAMED_SOUND_CUTSCENE_SAL2_CTG,
+ STREAMED_SOUND_CUTSCENE_SAL3_RTC,
+ STREAMED_SOUND_CUTSCENE_SAL5_LRQ,
+ STREAMED_SOUND_CUTSCENE_SAL4_BDBA,
+ STREAMED_SOUND_CUTSCENE_SAL4_BDBB,
+ STREAMED_SOUND_CUTSCENE_SAL2_CTG2,
+ STREAMED_SOUND_CUTSCENE_SAL4_BDBD,
+ STREAMED_SOUND_CUTSCENE_SAL5_LRQB,
+ STREAMED_SOUND_CUTSCENE_SAL5_LRQC,
+ STREAMED_SOUND_CUTSCENE_ASUKA_1_SSO,
+ STREAMED_SOUND_CUTSCENE_ASUKA_2_PP,
+ STREAMED_SOUND_CUTSCENE_ASUKA_3_SS,
+ STREAMED_SOUND_CUTSCENE_ASUKA_4_PDR,
+ STREAMED_SOUND_CUTSCENE_ASUKA_5_K2FT,
+ STREAMED_SOUND_CUTSCENE_KENJI1_KBO,
+ STREAMED_SOUND_CUTSCENE_KENJI2_GIS,
+ STREAMED_SOUND_CUTSCENE_KENJI3_DS,
+ STREAMED_SOUND_CUTSCENE_KENJI4_SHI,
+ STREAMED_SOUND_CUTSCENE_KENJI5_SD,
+ STREAMED_SOUND_CUTSCENE_RAY0_PDR2,
+ STREAMED_SOUND_CUTSCENE_RAY1_SW,
+ STREAMED_SOUND_CUTSCENE_RAY2_AP,
+ STREAMED_SOUND_CUTSCENE_RAY3_ED,
+ STREAMED_SOUND_CUTSCENE_RAY4_GF,
+ STREAMED_SOUND_CUTSCENE_RAY5_PB,
+ STREAMED_SOUND_CUTSCENE_RAY6_MM,
+ STREAMED_SOUND_CUTSCENE_DONALD1_STOG,
+ STREAMED_SOUND_CUTSCENE_DONALD2_KK,
+ STREAMED_SOUND_CUTSCENE_DONALD3_ADO,
+ STREAMED_SOUND_CUTSCENE_DONALD5_ES,
+ STREAMED_SOUND_CUTSCENE_DONALD7_MLD,
+ STREAMED_SOUND_CUTSCENE_DONALD4_GTA,
+ STREAMED_SOUND_CUTSCENE_DONALD4_GTA2,
+ STREAMED_SOUND_CUTSCENE_DONALD6_STS,
+ STREAMED_SOUND_CUTSCENE_ASUKA6_BAIT,
+ STREAMED_SOUND_CUTSCENE_ASUKA7_ETG,
+ STREAMED_SOUND_CUTSCENE_ASUKA8_PS,
+ STREAMED_SOUND_CUTSCENE_ASUKA9_ASD,
+ STREAMED_SOUND_CUTSCENE_KENJI4_SHI2,
+ STREAMED_SOUND_CUTSCENE_CATALINA1_TEX,
+ STREAMED_SOUND_CUTSCENE_ELBURRO1_PH1,
+ STREAMED_SOUND_CUTSCENE_ELBURRO2_PH2,
+ STREAMED_SOUND_CUTSCENE_ELBURRO3_PH3,
+ STREAMED_SOUND_CUTSCENE_ELBURRO4_PH4,
+ STREAMED_SOUND_CUTSCENE_YARDIE_PH1,
+ STREAMED_SOUND_CUTSCENE_YARDIE_PH2,
+ STREAMED_SOUND_CUTSCENE_YARDIE_PH3,
+ STREAMED_SOUND_CUTSCENE_YARDIE_PH4,
+ STREAMED_SOUND_CUTSCENE_HOODS_PH1,
+ STREAMED_SOUND_CUTSCENE_HOODS_PH2,
+ STREAMED_SOUND_CUTSCENE_HOODS_PH3,
+ STREAMED_SOUND_CUTSCENE_HOODS_PH4,
+ STREAMED_SOUND_CUTSCENE_HOODS_PH5,
+ STREAMED_SOUND_CUTSCENE_MARTY_PH1,
+ STREAMED_SOUND_CUTSCENE_MARTY_PH2,
+ STREAMED_SOUND_CUTSCENE_MARTY_PH3,
+ STREAMED_SOUND_CUTSCENE_MARTY_PH4,
+ STREAMED_SOUND_MISSION_COMPLETED,
+ STREAMED_SOUND_GAME_COMPLETED,
+ STREAMED_SOUND_MISSION_LIB_A1,
+ STREAMED_SOUND_MISSION_LIB_A2,
+ STREAMED_SOUND_MISSION_LIB_A,
+ STREAMED_SOUND_MISSION_LIB_B,
+ STREAMED_SOUND_MISSION_LIB_C,
+ STREAMED_SOUND_MISSION_LIB_D,
+ STREAMED_SOUND_MISSION_L2_A,
+ STREAMED_SOUND_MISSION_J4T_1,
+ STREAMED_SOUND_MISSION_J4T_2,
+ STREAMED_SOUND_MISSION_J4T_3,
+ STREAMED_SOUND_MISSION_J4T_4,
+ STREAMED_SOUND_MISSION_J4_A,
+ STREAMED_SOUND_MISSION_J4_B,
+ STREAMED_SOUND_MISSION_J4_C,
+ STREAMED_SOUND_MISSION_J4_D,
+ STREAMED_SOUND_MISSION_J4_E,
+ STREAMED_SOUND_MISSION_J4_F,
+ STREAMED_SOUND_MISSION_J6_1,
+ STREAMED_SOUND_MISSION_J6_A,
+ STREAMED_SOUND_MISSION_J6_B,
+ STREAMED_SOUND_MISSION_J6_C,
+ STREAMED_SOUND_MISSION_J6_D,
+ STREAMED_SOUND_MISSION_T4_A,
+ STREAMED_SOUND_MISSION_S1_A,
+ STREAMED_SOUND_MISSION_S1_A1,
+ STREAMED_SOUND_MISSION_S1_B,
+ STREAMED_SOUND_MISSION_S1_C,
+ STREAMED_SOUND_MISSION_S1_C1,
+ STREAMED_SOUND_MISSION_S1_D,
+ STREAMED_SOUND_MISSION_S1_E,
+ STREAMED_SOUND_MISSION_S1_F,
+ STREAMED_SOUND_MISSION_S1_G,
+ STREAMED_SOUND_MISSION_S1_H,
+ STREAMED_SOUND_MISSION_S1_I,
+ STREAMED_SOUND_MISSION_S1_J,
+ STREAMED_SOUND_MISSION_S1_K,
+ STREAMED_SOUND_MISSION_S1_L,
+ STREAMED_SOUND_MISSION_S3_A,
+ STREAMED_SOUND_MISSION_S3_B,
+ STREAMED_SOUND_MISSION_EL3_A,
+ STREAMED_SOUND_MISSION_MF1_A,
+ STREAMED_SOUND_MISSION_MF2_A,
+ STREAMED_SOUND_MISSION_MF3_A,
+ STREAMED_SOUND_MISSION_MF3_B,
+ STREAMED_SOUND_MISSION_MF3_B1,
+ STREAMED_SOUND_MISSION_MF3_C,
+ STREAMED_SOUND_MISSION_MF4_A,
+ STREAMED_SOUND_MISSION_MF4_B,
+ STREAMED_SOUND_MISSION_MF4_C,
+ STREAMED_SOUND_MISSION_A1_A,
+ STREAMED_SOUND_MISSION_A3_A,
+ STREAMED_SOUND_MISSION_A5_A,
+ STREAMED_SOUND_MISSION_A4_A,
+ STREAMED_SOUND_MISSION_A4_B,
+ STREAMED_SOUND_MISSION_A4_C,
+ STREAMED_SOUND_MISSION_A4_D,
+ STREAMED_SOUND_MISSION_K1_A,
+ STREAMED_SOUND_MISSION_K3_A,
+ STREAMED_SOUND_MISSION_R1_A,
+ STREAMED_SOUND_MISSION_R2_A,
+ STREAMED_SOUND_MISSION_R2_B,
+ STREAMED_SOUND_MISSION_R2_C,
+ STREAMED_SOUND_MISSION_R2_D,
+ STREAMED_SOUND_MISSION_R2_E,
+ STREAMED_SOUND_MISSION_R2_F,
+ STREAMED_SOUND_MISSION_R2_G,
+ STREAMED_SOUND_MISSION_R2_H,
+ STREAMED_SOUND_MISSION_R5_A,
+ STREAMED_SOUND_MISSION_R6_A,
+ STREAMED_SOUND_MISSION_R6_A1,
+ STREAMED_SOUND_MISSION_R6_B,
+ STREAMED_SOUND_MISSION_LO2_A,
+ STREAMED_SOUND_MISSION_LO6_A,
+ STREAMED_SOUND_MISSION_YD2_A,
+ STREAMED_SOUND_MISSION_YD2_B,
+ STREAMED_SOUND_MISSION_YD2_C,
+ STREAMED_SOUND_MISSION_YD2_C1,
+ STREAMED_SOUND_MISSION_YD2_D,
+ STREAMED_SOUND_MISSION_YD2_E,
+ STREAMED_SOUND_MISSION_YD2_F,
+ STREAMED_SOUND_MISSION_YD2_G,
+ STREAMED_SOUND_MISSION_YD2_H,
+ STREAMED_SOUND_MISSION_YD2_ASS,
+ STREAMED_SOUND_MISSION_YD2_OK,
+ STREAMED_SOUND_MISSION_H5_A,
+ STREAMED_SOUND_MISSION_H5_B,
+ STREAMED_SOUND_MISSION_H5_C,
+ STREAMED_SOUND_MISSION_AMMU_A,
+ STREAMED_SOUND_MISSION_AMMU_B,
+ STREAMED_SOUND_MISSION_AMMU_C,
+ STREAMED_SOUND_MISSION_DOOR_1,
+ STREAMED_SOUND_MISSION_DOOR_2,
+ STREAMED_SOUND_MISSION_DOOR_3,
+ STREAMED_SOUND_MISSION_DOOR_4,
+ STREAMED_SOUND_MISSION_DOOR_5,
+ STREAMED_SOUND_MISSION_DOOR_6,
+ STREAMED_SOUND_MISSION_T3_A,
+ STREAMED_SOUND_MISSION_T3_B,
+ STREAMED_SOUND_MISSION_T3_C,
+ STREAMED_SOUND_MISSION_K1_B,
+ STREAMED_SOUND_MISSION_CAT1,
+ TOTAL_STREAMED_SOUNDS,
+ NO_STREAMED_SOUND,
};
enum AudioEntityHandle {
diff --git a/src/core/Camera.h b/src/core/Camera.h
index 3e67903f..6b631ee2 100644
--- a/src/core/Camera.h
+++ b/src/core/Camera.h
@@ -515,6 +515,7 @@ int m_iModeObbeCamIsInForCar;
void dtor(void) { this->CCamera::~CCamera(); }
};
+static_assert(offsetof(CCamera, DistanceToWater) == 0xe4, "CCamera: error");
static_assert(offsetof(CCamera, m_WideScreenOn) == 0x70, "CCamera: error");
static_assert(offsetof(CCamera, WorldViewerBeingUsed) == 0x75, "CCamera: error");
static_assert(offsetof(CCamera, m_uiNumberOfTrainCamNodes) == 0x84, "CCamera: error");
diff --git a/src/core/ControllerConfig.h b/src/core/ControllerConfig.h
index e04f9583..458e457c 100644
--- a/src/core/ControllerConfig.h
+++ b/src/core/ControllerConfig.h
@@ -116,6 +116,8 @@ public:
#ifdef __DINPUT_INCLUDED__
DIJOYSTATE2 m_OldState;
DIJOYSTATE2 m_NewState;
+#else
+ uint8 ___padd[0x110 * 2];
#endif
wchar m_aActionNames[MAX_CONTROLLERACTIONS][ACTIONNAME_LENGTH];
bool m_aButtonStates[MAX_BUTTONS];
diff --git a/src/core/World.cpp b/src/core/World.cpp
index 0b389e42..c914b647 100644
--- a/src/core/World.cpp
+++ b/src/core/World.cpp
@@ -864,10 +864,9 @@ CVehicle*
FindPlayerVehicle(void)
{
CPlayerPed *ped = FindPlayerPed();
- if(ped->InVehicle())
+ if(ped && ped->InVehicle())
return ped->m_pMyVehicle;
- else
- return nil;
+ return nil;
}
CVehicle*
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index 2492c2de..337055c5 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -2134,7 +2134,7 @@ _WinMain(HINSTANCE instance,
CPad::ResetCheats();
CPad::StopPadsShaking();
- DMAudio.ChangeMusicMode(MUSICMODE_OFF);
+ DMAudio.ChangeMusicMode(MUSICMODE_DISABLE);
CTimer::Stop();