cMusicManager

This commit is contained in:
Sergeanur 2020-02-06 19:35:24 +02:00
parent f1863676bb
commit a3e5ccde47
10 changed files with 1024 additions and 322 deletions

View File

@ -337,6 +337,7 @@ public:
uint32 GetFrameCounter() const { return m_nTimeOfRecentCrime; } uint32 GetFrameCounter() const { return m_nTimeOfRecentCrime; }
float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; } float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; }
int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[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" // "Should" be in alphabetic order, except "getXTalkSfx"
void AddDetailsToRequestedOrderList(uint8 sample); /// ok (check once more) void AddDetailsToRequestedOrderList(uint8 sample); /// ok (check once more)

View File

@ -301,7 +301,7 @@ cDMAudio::ClearMissionAudio(void)
AudioManager.ClearMissionAudio(); AudioManager.ClearMissionAudio();
} }
int32 uint8
cDMAudio::GetRadioInCar(void) cDMAudio::GetRadioInCar(void)
{ {
return MusicManager.GetRadioInCar(); return MusicManager.GetRadioInCar();

View File

@ -253,7 +253,7 @@ public:
bool IsMissionAudioSampleFinished(void); bool IsMissionAudioSampleFinished(void);
void ClearMissionAudio(void); void ClearMissionAudio(void);
int32 GetRadioInCar(void); uint8 GetRadioInCar(void);
void SetRadioInCar(uint32 radio); void SetRadioInCar(uint32 radio);
void SetRadioChannel(int8 radio, int32 pos); void SetRadioChannel(int8 radio, int32 pos);
}; };

View File

@ -1,5 +1,8 @@
#include "common.h" #include "common.h"
#include <time.h>
#include "MusicManager.h" #include "MusicManager.h"
#include "AudioManager.h"
#include "ControllerConfig.h"
#include "Camera.h" #include "Camera.h"
#include "Font.h" #include "Font.h"
#include "Hud.h" #include "Hud.h"
@ -15,14 +18,34 @@ cMusicManager &MusicManager = *(cMusicManager *)0x8F3964;
int32 &gNumRetunePresses = *(int32 *)0x650B80; int32 &gNumRetunePresses = *(int32 *)0x650B80;
wchar *pCurrentStation = (wchar *)0x650B9C; wchar *pCurrentStation = (wchar *)0x650B9C;
uint8 &cDisplay = *(uint8 *)0x650BA1; 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 bool
cMusicManager::PlayerInCar() cMusicManager::PlayerInCar()
{ {
if(!FindPlayerVehicle()) if(!FindPlayerVehicle())
return false; return false;
else {
int32 State = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_nPedState; int32 State = FindPlayerPed()->m_nPedState;
if(State == PED_DRAG_FROM_CAR || State == PED_EXIT_CAR || State == PED_ARRESTED) if(State == PED_DRAG_FROM_CAR || State == PED_EXIT_CAR || State == PED_ARRESTED)
return false; return false;
@ -39,11 +62,7 @@ cMusicManager::PlayerInCar()
default: return true; default: return true;
} }
} }
}
#if 0
WRAPPER void cMusicManager::DisplayRadioStationName(void) { EAXJMP(0x57E6D0); }
#else
void void
cMusicManager::DisplayRadioStationName() cMusicManager::DisplayRadioStationName()
{ {
@ -51,13 +70,13 @@ cMusicManager::DisplayRadioStationName()
int8 gStreamedSound; int8 gStreamedSound;
int8 gRetuneCounter; int8 gRetuneCounter;
if(!CTimer::GetIsPaused() && !TheCamera.m_WideScreenOn && cMusicManager::PlayerInCar() && if(!CTimer::GetIsPaused() && !TheCamera.m_WideScreenOn && PlayerInCar() &&
!CReplay::IsPlayingBack()) { !CReplay::IsPlayingBack()) {
if(MusicManager.m_bPlayerInCar && !MusicManager.m_bPreviousPlayerInCar) if(m_bPlayerInCar && !m_bPreviousPlayerInCar)
pCurrentStation = nil; pCurrentStation = nil;
if(SampleManager.IsMP3RadioChannelAvailable()) { if(SampleManager.IsMP3RadioChannelAvailable()) {
gStreamedSound = MusicManager.m_nCurrentStreamedSound; gStreamedSound = m_nCurrentStreamedSound;
if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT || if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT ||
gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) {
@ -74,15 +93,15 @@ cMusicManager::DisplayRadioStationName()
if(pRetune == POLICE_RADIO) { if(pRetune == POLICE_RADIO) {
pRetune = RADIO_OFF; pRetune = RADIO_OFF;
} else if(pRetune > POLICE_RADIO) { } else if(pRetune > POLICE_RADIO) {
pRetune = pRetune - 11; pRetune = pRetune - RADIO_OFF;
} }
} else { } else {
gStreamedSound = MusicManager.m_nCurrentStreamedSound; gStreamedSound = m_nCurrentStreamedSound;
pRetune = gNumRetunePresses + gStreamedSound; pRetune = gNumRetunePresses + gStreamedSound;
if(pRetune >= USERTRACK) { if(pRetune >= USERTRACK) {
gRetuneCounter = gNumRetunePresses; gRetuneCounter = gNumRetunePresses;
pRetune = MusicManager.m_nCurrentStreamedSound; pRetune = m_nCurrentStreamedSound;
if(gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) if(gStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
pRetune = RADIO_OFF; pRetune = RADIO_OFF;
@ -119,13 +138,13 @@ cMusicManager::DisplayRadioStationName()
if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; } if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; }
if(string && pCurrentStation != string || if(string && pCurrentStation != string ||
MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER && m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER &&
MusicManager.m_nPreviousStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER) { m_nPreviousStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER) {
pCurrentStation = string; pCurrentStation = string;
cDisplay = 60; cDisplay = 60;
} else { } else {
if(!cDisplay) return; if(cDisplay == 0) return;
--cDisplay; cDisplay--;
} }
CFont::SetJustifyOff(); CFont::SetJustifyOff();
@ -147,97 +166,769 @@ cMusicManager::DisplayRadioStationName()
CFont::DrawFonts(); CFont::DrawFonts();
} }
} }
#endif
WRAPPER bool
void
cMusicManager::Initialise() 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 void
cMusicManager::Terminate() 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;
} }
WRAPPER
void void
cMusicManager::ChangeMusicMode(int32 mode) cMusicManager::ChangeMusicMode(uint8 mode)
{ {
EAXJMP(0x57D310); 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;
} }
WRAPPER if (mode2 != m_nMusicMode || mode == MUSICMODE_FRONTEND && mode2 == MUSICMODE_FRONTEND) {
void switch (mode)
cMusicManager::StopFrontEndTrack()
{ {
EAXJMP(0x57E3D0); 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;
}
}
} }
WRAPPER void uint8
cMusicManager::PlayAnnouncement(uint8)
{
EAXJMP(0x57E430);
}
WRAPPER void
cMusicManager::PlayFrontEndTrack(uint8, uint8)
{
EAXJMP(0x57E2E0);
}
WRAPPER void
cMusicManager::PreloadCutSceneMusic(uint8)
{
EAXJMP(0x57E210);
}
WRAPPER void
cMusicManager::PlayPreloadedCutSceneMusic(void)
{
EAXJMP(0x57E290);
}
WRAPPER void
cMusicManager::StopCutSceneMusic(void)
{
EAXJMP(0x57E2B0);
}
WRAPPER int32
cMusicManager::GetRadioInCar(void) cMusicManager::GetRadioInCar(void)
{ {
EAXJMP(0x57D1D0); 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;
}
} }
WRAPPER void if (m_nRadioInCar == NO_STREAMED_SOUND || CReplay::IsPlayingBack() && AudioManager.m_bUserPause)
cMusicManager::SetRadioInCar(uint32) return RADIO_OFF;
return m_nRadioInCar;
}
void
cMusicManager::SetRadioInCar(uint32 station)
{ {
EAXJMP(0x57D2C0); 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;
}
} }
WRAPPER void void
cMusicManager::SetRadioChannelByScript(uint8, int32) cMusicManager::SetRadioChannelByScript(uint8 station, int32 pos)
{ {
EAXJMP(0x57D180); if (m_bIsInitialised && station < RADIO_OFF) {
m_bRadioSetByScript = true;
m_nRadioStation = station;
m_nRadioPosition = pos == -1 ? -1 : pos % m_aTracks[station].m_nLength;
}
} }
WRAPPER
void void
cMusicManager::ResetMusicAfterReload() cMusicManager::ResetMusicAfterReload()
{ {
EAXJMP(0x57CF30); m_bRadioSetByScript = false;
m_nRadioStation = 0;
m_nRadioPosition = -1;
m_nAnnouncement = NO_STREAMED_SOUND;
m_bAnnouncementInProgress = false;
m_bSetNextStation = false;
gRetuneCounter = 0;
gNumRetunePresses = 0;
} }
WRAPPER
void cMusicManager::ResetTimers(int32) { EAXJMP(0x57D420); }
WRAPPER void
cMusicManager::ResetTimers(int32 time)
{
m_bResetTimers = true;
m_nResetTime = time;
}
void void
cMusicManager::Service() cMusicManager::Service()
{ {
EAXJMP(0x57D440); 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;
}
}
void
cMusicManager::StopFrontEndTrack()
{
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;
}
}
void
cMusicManager::PlayAnnouncement(uint8 announcement)
{
if (IsInitialised() && !m_bDisabled && !m_bAnnouncementInProgress)
m_nAnnouncement = announcement;
}
void
cMusicManager::PlayFrontEndTrack(uint8 track, uint8 bPlayInFrontend)
{
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;
}
}
}
void
cMusicManager::PreloadCutSceneMusic(uint8 track)
{
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;
}
}
void
cMusicManager::PlayPreloadedCutSceneMusic(void)
{
if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE)
SampleManager.StartPreloadedStreamedFile(0);
}
void
cMusicManager::StopCutSceneMusic(void)
{
if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE) {
SampleManager.StopStreamedFile(0);
m_nCurrentStreamedSound = NO_STREAMED_SOUND;
}
}
uint32
cMusicManager::GetTrackStartPos(uint8 track)
{
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;
}
bool
cMusicManager::UsesPoliceRadio(CVehicle *veh)
{
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;
}
void
cMusicManager::ServiceAmbience()
{
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;
}
}
void
cMusicManager::ComputeAmbienceVol(uint8 reset, uint8 &outVolume)
{
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;
}
void
cMusicManager::ServiceTrack()
{
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

View File

@ -2,7 +2,7 @@
#include "audio_enums.h" #include "audio_enums.h"
class tMP3Sample class tStreamedSample
{ {
public: public:
uint32 m_nLength; uint32 m_nLength;
@ -10,52 +10,46 @@ public:
uint32 m_nLastPosCheckTimer; uint32 m_nLastPosCheckTimer;
}; };
class CVehicle;
class cMusicManager class cMusicManager
{ {
public: public:
bool m_bIsInitialised; bool m_bIsInitialised;
uint8 field_1; bool m_bDisabled;
uint8 m_nMusicMode; uint8 m_nMusicMode;
uint8 m_nCurrentStreamedSound; uint8 m_nCurrentStreamedSound;
uint8 m_nPreviousStreamedSound; uint8 m_nPreviousStreamedSound;
uint8 field_5; bool m_bFrontendTrackFinished;
uint8 field_6; bool m_bPlayInFrontend;
uint8 field_7; bool m_bSetNextStation;
bool m_bAnnouncement; uint8 m_nAnnouncement;
bool m_bPreviousPlayerInCar; bool m_bPreviousPlayerInCar;
bool m_bPlayerInCar; bool m_bPlayerInCar;
bool m_bAnnouncementInProgress; bool m_bAnnouncementInProgress;
tMP3Sample m_asMP3Samples[TOTAL_STREAMED_SOUNDS]; tStreamedSample m_aTracks[TOTAL_STREAMED_SOUNDS];
uint8 field_2364; bool m_bResetTimers;
uint8 field_2365; uint32 m_nResetTime;
uint8 field_2366; uint32 m_nLastTrackServiceTime;
uint8 field_2367; uint32 m_nTimer;
uint32 field_2368; bool m_bDoTrackService;
uint32 field_2372; bool m_bIgnoreTimeDelay;
uint32 field_2376; bool m_bDontServiceAmbienceTrack;
uint8 field_2380;
uint8 field_2381;
uint8 field_2382;
bool m_bRadioSetByScript; bool m_bRadioSetByScript;
uint8 m_nRadioStation; uint8 m_nRadioStation;
uint8 field_2385; int32 m_nRadioPosition;
uint8 field_2386; uint8 m_nRadioInCar;
uint8 field_2387;
uint32 m_nRadioPosition;
bool m_bRadioInCar;
uint8 field_2393;
uint8 field_2394;
uint8 field_2395;
public: public:
cMusicManager();
bool IsInitialised() { return m_bIsInitialised; } bool IsInitialised() { return m_bIsInitialised; }
uint32 GetMusicMode() { return m_nMusicMode; } uint32 GetMusicMode() { return m_nMusicMode; }
uint8 GetCurrentTrack() { return m_nCurrentStreamedSound; } uint8 GetCurrentTrack() { return m_nCurrentStreamedSound; }
void Initialise(); bool Initialise();
void Terminate(); void Terminate();
void ChangeMusicMode(int32 mode); void ChangeMusicMode(uint8 mode);
void StopFrontEndTrack(); void StopFrontEndTrack();
bool PlayerInCar(); bool PlayerInCar();
@ -66,7 +60,7 @@ public:
void PreloadCutSceneMusic(uint8); void PreloadCutSceneMusic(uint8);
void PlayPreloadedCutSceneMusic(void); void PlayPreloadedCutSceneMusic(void);
void StopCutSceneMusic(void); void StopCutSceneMusic(void);
int32 GetRadioInCar(void); uint8 GetRadioInCar(void);
void SetRadioInCar(uint32); void SetRadioInCar(uint32);
void SetRadioChannelByScript(uint8, int32); void SetRadioChannelByScript(uint8, int32);
@ -74,6 +68,20 @@ public:
void ResetTimers(int32); void ResetTimers(int32);
void Service(); 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"); static_assert(sizeof(cMusicManager) == 0x95C, "cMusicManager: error");

View File

@ -21,210 +21,210 @@ enum eMusicMode
MUSICMODE_FRONTEND = 0, MUSICMODE_FRONTEND = 0,
MUSICMODE_GAME, MUSICMODE_GAME,
MUSICMODE_CUTSCENE, MUSICMODE_CUTSCENE,
MUSICMODE_OFF, MUSICMODE_DISABLE,
MUSICMODE_4, MUSICMODE_DISABLED,
}; };
enum eStreamedSounds enum eStreamedSounds
{ {
STREAMED_SOUND_RADIO_HEAD = 0, STREAMED_SOUND_RADIO_HEAD,
STREAMED_SOUND_RADIO_CLASSIC = 1, STREAMED_SOUND_RADIO_CLASSIC,
STREAMED_SOUND_RADIO_KJAH = 2, STREAMED_SOUND_RADIO_KJAH,
STREAMED_SOUND_RADIO_RISE = 3, STREAMED_SOUND_RADIO_RISE,
STREAMED_SOUND_RADIO_LIPS = 4, STREAMED_SOUND_RADIO_LIPS,
STREAMED_SOUND_RADIO_GAME = 5, STREAMED_SOUND_RADIO_GAME,
STREAMED_SOUND_RADIO_MSX = 6, STREAMED_SOUND_RADIO_MSX,
STREAMED_SOUND_RADIO_FLASH = 7, STREAMED_SOUND_RADIO_FLASH,
STREAMED_SOUND_RADIO_CHAT = 8, STREAMED_SOUND_RADIO_CHAT,
STREAMED_SOUND_RADIO_MP3_PLAYER = 9, STREAMED_SOUND_RADIO_MP3_PLAYER,
STREAMED_SOUND_RADIO_POLICE = 10, STREAMED_SOUND_RADIO_POLICE,
STREAMED_SOUND_CITY_AMBIENT = 11, STREAMED_SOUND_CITY_AMBIENT,
STREAMED_SOUND_WATER_AMBIENT = 12, STREAMED_SOUND_WATER_AMBIENT,
STREAMED_SOUND_ANNOUNCE_COMMERCIAL_OPEN = 13, STREAMED_SOUND_ANNOUNCE_COMMERCIAL_OPEN,
STREAMED_SOUND_ANNOUNCE_SUBURBAN_OPEN = 14, STREAMED_SOUND_ANNOUNCE_SUBURBAN_OPEN,
STREAMED_SOUND_NEWS_INTRO = 15, STREAMED_SOUND_NEWS_INTRO,
STREAMED_SOUND_BANK_INTRO = 16, STREAMED_SOUND_BANK_INTRO,
STREAMED_SOUND_CUTSCENE_LUIGI1_LG = 17, STREAMED_SOUND_CUTSCENE_LUIGI1_LG,
STREAMED_SOUND_CUTSCENE_LUIGI2_DSB = 18, STREAMED_SOUND_CUTSCENE_LUIGI2_DSB,
STREAMED_SOUND_CUTSCENE_LUIGI3_DM = 19, STREAMED_SOUND_CUTSCENE_LUIGI3_DM,
STREAMED_SOUND_CUTSCENE_LUIGI4_PAP = 20, STREAMED_SOUND_CUTSCENE_LUIGI4_PAP,
STREAMED_SOUND_CUTSCENE_LUIGI5_TFB = 21, STREAMED_SOUND_CUTSCENE_LUIGI5_TFB,
STREAMED_SOUND_CUTSCENE_JOEY0_DM2 = 22, STREAMED_SOUND_CUTSCENE_JOEY0_DM2,
STREAMED_SOUND_CUTSCENE_JOEY1_LFL = 23, STREAMED_SOUND_CUTSCENE_JOEY1_LFL,
STREAMED_SOUND_CUTSCENE_JOEY2_KCL = 24, STREAMED_SOUND_CUTSCENE_JOEY2_KCL,
STREAMED_SOUND_CUTSCENE_JOEY3_VH = 25, STREAMED_SOUND_CUTSCENE_JOEY3_VH,
STREAMED_SOUND_CUTSCENE_JOEY4_ETH = 26, STREAMED_SOUND_CUTSCENE_JOEY4_ETH,
STREAMED_SOUND_CUTSCENE_JOEY5_DST = 27, STREAMED_SOUND_CUTSCENE_JOEY5_DST,
STREAMED_SOUND_CUTSCENE_JOEY6_TBJ = 28, STREAMED_SOUND_CUTSCENE_JOEY6_TBJ,
STREAMED_SOUND_CUTSCENE_TONI1_TOL = 29, STREAMED_SOUND_CUTSCENE_TONI1_TOL,
STREAMED_SOUND_CUTSCENE_TONI2_TPU = 30, STREAMED_SOUND_CUTSCENE_TONI2_TPU,
STREAMED_SOUND_CUTSCENE_TONI3_MAS = 31, STREAMED_SOUND_CUTSCENE_TONI3_MAS,
STREAMED_SOUND_CUTSCENE_TONI4_TAT = 32, STREAMED_SOUND_CUTSCENE_TONI4_TAT,
STREAMED_SOUND_CUTSCENE_TONI5_BF = 33, STREAMED_SOUND_CUTSCENE_TONI5_BF,
STREAMED_SOUND_CUTSCENE_SAL0_MAS = 34, STREAMED_SOUND_CUTSCENE_SAL0_MAS,
STREAMED_SOUND_CUTSCENE_SAL1_PF = 35, STREAMED_SOUND_CUTSCENE_SAL1_PF,
STREAMED_SOUND_CUTSCENE_SAL2_CTG = 36, STREAMED_SOUND_CUTSCENE_SAL2_CTG,
STREAMED_SOUND_CUTSCENE_SAL3_RTC = 37, STREAMED_SOUND_CUTSCENE_SAL3_RTC,
STREAMED_SOUND_CUTSCENE_SAL5_LRQ = 38, STREAMED_SOUND_CUTSCENE_SAL5_LRQ,
STREAMED_SOUND_CUTSCENE_SAL4_BDBA = 39, STREAMED_SOUND_CUTSCENE_SAL4_BDBA,
STREAMED_SOUND_CUTSCENE_SAL4_BDBB = 40, STREAMED_SOUND_CUTSCENE_SAL4_BDBB,
STREAMED_SOUND_CUTSCENE_SAL2_CTG2 = 41, STREAMED_SOUND_CUTSCENE_SAL2_CTG2,
STREAMED_SOUND_CUTSCENE_SAL4_BDBD = 42, STREAMED_SOUND_CUTSCENE_SAL4_BDBD,
STREAMED_SOUND_CUTSCENE_SAL5_LRQB = 43, STREAMED_SOUND_CUTSCENE_SAL5_LRQB,
STREAMED_SOUND_CUTSCENE_SAL5_LRQC = 44, STREAMED_SOUND_CUTSCENE_SAL5_LRQC,
STREAMED_SOUND_CUTSCENE_ASUKA_1_SSO = 45, STREAMED_SOUND_CUTSCENE_ASUKA_1_SSO,
STREAMED_SOUND_CUTSCENE_ASUKA_2_PP = 46, STREAMED_SOUND_CUTSCENE_ASUKA_2_PP,
STREAMED_SOUND_CUTSCENE_ASUKA_3_SS = 47, STREAMED_SOUND_CUTSCENE_ASUKA_3_SS,
STREAMED_SOUND_CUTSCENE_ASUKA_4_PDR = 48, STREAMED_SOUND_CUTSCENE_ASUKA_4_PDR,
STREAMED_SOUND_CUTSCENE_ASUKA_5_K2FT = 49, STREAMED_SOUND_CUTSCENE_ASUKA_5_K2FT,
STREAMED_SOUND_CUTSCENE_KENJI1_KBO = 50, STREAMED_SOUND_CUTSCENE_KENJI1_KBO,
STREAMED_SOUND_CUTSCENE_KENJI2_GIS = 51, STREAMED_SOUND_CUTSCENE_KENJI2_GIS,
STREAMED_SOUND_CUTSCENE_KENJI3_DS = 52, STREAMED_SOUND_CUTSCENE_KENJI3_DS,
STREAMED_SOUND_CUTSCENE_KENJI4_SHI = 53, STREAMED_SOUND_CUTSCENE_KENJI4_SHI,
STREAMED_SOUND_CUTSCENE_KENJI5_SD = 54, STREAMED_SOUND_CUTSCENE_KENJI5_SD,
STREAMED_SOUND_CUTSCENE_RAY0_PDR2 = 55, STREAMED_SOUND_CUTSCENE_RAY0_PDR2,
STREAMED_SOUND_CUTSCENE_RAY1_SW = 56, STREAMED_SOUND_CUTSCENE_RAY1_SW,
STREAMED_SOUND_CUTSCENE_RAY2_AP = 57, STREAMED_SOUND_CUTSCENE_RAY2_AP,
STREAMED_SOUND_CUTSCENE_RAY3_ED = 58, STREAMED_SOUND_CUTSCENE_RAY3_ED,
STREAMED_SOUND_CUTSCENE_RAY4_GF = 59, STREAMED_SOUND_CUTSCENE_RAY4_GF,
STREAMED_SOUND_CUTSCENE_RAY5_PB = 60, STREAMED_SOUND_CUTSCENE_RAY5_PB,
STREAMED_SOUND_CUTSCENE_RAY6_MM = 61, STREAMED_SOUND_CUTSCENE_RAY6_MM,
STREAMED_SOUND_CUTSCENE_DONALD1_STOG = 62, STREAMED_SOUND_CUTSCENE_DONALD1_STOG,
STREAMED_SOUND_CUTSCENE_DONALD2_KK = 63, STREAMED_SOUND_CUTSCENE_DONALD2_KK,
STREAMED_SOUND_CUTSCENE_DONALD3_ADO = 64, STREAMED_SOUND_CUTSCENE_DONALD3_ADO,
STREAMED_SOUND_CUTSCENE_DONALD5_ES = 65, STREAMED_SOUND_CUTSCENE_DONALD5_ES,
STREAMED_SOUND_CUTSCENE_DONALD7_MLD = 66, STREAMED_SOUND_CUTSCENE_DONALD7_MLD,
STREAMED_SOUND_CUTSCENE_DONALD4_GTA = 67, STREAMED_SOUND_CUTSCENE_DONALD4_GTA,
STREAMED_SOUND_CUTSCENE_DONALD4_GTA2 = 68, STREAMED_SOUND_CUTSCENE_DONALD4_GTA2,
STREAMED_SOUND_CUTSCENE_DONALD6_STS = 69, STREAMED_SOUND_CUTSCENE_DONALD6_STS,
STREAMED_SOUND_CUTSCENE_ASUKA6_BAIT = 70, STREAMED_SOUND_CUTSCENE_ASUKA6_BAIT,
STREAMED_SOUND_CUTSCENE_ASUKA7_ETG = 71, STREAMED_SOUND_CUTSCENE_ASUKA7_ETG,
STREAMED_SOUND_CUTSCENE_ASUKA8_PS = 72, STREAMED_SOUND_CUTSCENE_ASUKA8_PS,
STREAMED_SOUND_CUTSCENE_ASUKA9_ASD = 73, STREAMED_SOUND_CUTSCENE_ASUKA9_ASD,
STREAMED_SOUND_CUTSCENE_KENJI4_SHI2 = 74, STREAMED_SOUND_CUTSCENE_KENJI4_SHI2,
STREAMED_SOUND_CUTSCENE_CATALINA1_TEX = 75, STREAMED_SOUND_CUTSCENE_CATALINA1_TEX,
STREAMED_SOUND_CUTSCENE_ELBURRO1_PH1 = 76, STREAMED_SOUND_CUTSCENE_ELBURRO1_PH1,
STREAMED_SOUND_CUTSCENE_ELBURRO2_PH2 = 77, STREAMED_SOUND_CUTSCENE_ELBURRO2_PH2,
STREAMED_SOUND_CUTSCENE_ELBURRO3_PH3 = 78, STREAMED_SOUND_CUTSCENE_ELBURRO3_PH3,
STREAMED_SOUND_CUTSCENE_ELBURRO4_PH4 = 79, STREAMED_SOUND_CUTSCENE_ELBURRO4_PH4,
STREAMED_SOUND_CUTSCENE_YARDIE_PH1 = 80, STREAMED_SOUND_CUTSCENE_YARDIE_PH1,
STREAMED_SOUND_CUTSCENE_YARDIE_PH2 = 81, STREAMED_SOUND_CUTSCENE_YARDIE_PH2,
STREAMED_SOUND_CUTSCENE_YARDIE_PH3 = 82, STREAMED_SOUND_CUTSCENE_YARDIE_PH3,
STREAMED_SOUND_CUTSCENE_YARDIE_PH4 = 83, STREAMED_SOUND_CUTSCENE_YARDIE_PH4,
STREAMED_SOUND_CUTSCENE_HOODS_PH1 = 84, STREAMED_SOUND_CUTSCENE_HOODS_PH1,
STREAMED_SOUND_CUTSCENE_HOODS_PH2 = 85, STREAMED_SOUND_CUTSCENE_HOODS_PH2,
STREAMED_SOUND_CUTSCENE_HOODS_PH3 = 86, STREAMED_SOUND_CUTSCENE_HOODS_PH3,
STREAMED_SOUND_CUTSCENE_HOODS_PH4 = 87, STREAMED_SOUND_CUTSCENE_HOODS_PH4,
STREAMED_SOUND_CUTSCENE_HOODS_PH5 = 88, STREAMED_SOUND_CUTSCENE_HOODS_PH5,
STREAMED_SOUND_CUTSCENE_MARTY_PH1 = 89, STREAMED_SOUND_CUTSCENE_MARTY_PH1,
STREAMED_SOUND_CUTSCENE_MARTY_PH2 = 90, STREAMED_SOUND_CUTSCENE_MARTY_PH2,
STREAMED_SOUND_CUTSCENE_MARTY_PH3 = 91, STREAMED_SOUND_CUTSCENE_MARTY_PH3,
STREAMED_SOUND_CUTSCENE_MARTY_PH4 = 92, STREAMED_SOUND_CUTSCENE_MARTY_PH4,
STREAMED_SOUND_MISSION_COMPLETED = 93, STREAMED_SOUND_MISSION_COMPLETED,
STREAMED_SOUND_GAME_COMPLETED = 94, STREAMED_SOUND_GAME_COMPLETED,
STREAMED_SOUND_MISSION_LIB_A1 = 95, STREAMED_SOUND_MISSION_LIB_A1,
STREAMED_SOUND_MISSION_LIB_A2 = 96, STREAMED_SOUND_MISSION_LIB_A2,
STREAMED_SOUND_MISSION_LIB_A = 97, STREAMED_SOUND_MISSION_LIB_A,
STREAMED_SOUND_MISSION_LIB_B = 98, STREAMED_SOUND_MISSION_LIB_B,
STREAMED_SOUND_MISSION_LIB_C = 99, STREAMED_SOUND_MISSION_LIB_C,
STREAMED_SOUND_MISSION_LIB_D = 100, STREAMED_SOUND_MISSION_LIB_D,
STREAMED_SOUND_MISSION_L2_A = 101, STREAMED_SOUND_MISSION_L2_A,
STREAMED_SOUND_MISSION_J4T_1 = 102, STREAMED_SOUND_MISSION_J4T_1,
STREAMED_SOUND_MISSION_J4T_2 = 103, STREAMED_SOUND_MISSION_J4T_2,
STREAMED_SOUND_MISSION_J4T_3 = 104, STREAMED_SOUND_MISSION_J4T_3,
STREAMED_SOUND_MISSION_J4T_4 = 105, STREAMED_SOUND_MISSION_J4T_4,
STREAMED_SOUND_MISSION_J4_A = 106, STREAMED_SOUND_MISSION_J4_A,
STREAMED_SOUND_MISSION_J4_B = 107, STREAMED_SOUND_MISSION_J4_B,
STREAMED_SOUND_MISSION_J4_C = 108, STREAMED_SOUND_MISSION_J4_C,
STREAMED_SOUND_MISSION_J4_D = 109, STREAMED_SOUND_MISSION_J4_D,
STREAMED_SOUND_MISSION_J4_E = 110, STREAMED_SOUND_MISSION_J4_E,
STREAMED_SOUND_MISSION_J4_F = 111, STREAMED_SOUND_MISSION_J4_F,
STREAMED_SOUND_MISSION_J6_1 = 112, STREAMED_SOUND_MISSION_J6_1,
STREAMED_SOUND_MISSION_J6_A = 113, STREAMED_SOUND_MISSION_J6_A,
STREAMED_SOUND_MISSION_J6_B = 114, STREAMED_SOUND_MISSION_J6_B,
STREAMED_SOUND_MISSION_J6_C = 115, STREAMED_SOUND_MISSION_J6_C,
STREAMED_SOUND_MISSION_J6_D = 116, STREAMED_SOUND_MISSION_J6_D,
STREAMED_SOUND_MISSION_T4_A = 117, STREAMED_SOUND_MISSION_T4_A,
STREAMED_SOUND_MISSION_S1_A = 118, STREAMED_SOUND_MISSION_S1_A,
STREAMED_SOUND_MISSION_S1_A1 = 119, STREAMED_SOUND_MISSION_S1_A1,
STREAMED_SOUND_MISSION_S1_B = 120, STREAMED_SOUND_MISSION_S1_B,
STREAMED_SOUND_MISSION_S1_C = 121, STREAMED_SOUND_MISSION_S1_C,
STREAMED_SOUND_MISSION_S1_C1 = 122, STREAMED_SOUND_MISSION_S1_C1,
STREAMED_SOUND_MISSION_S1_D = 123, STREAMED_SOUND_MISSION_S1_D,
STREAMED_SOUND_MISSION_S1_E = 124, STREAMED_SOUND_MISSION_S1_E,
STREAMED_SOUND_MISSION_S1_F = 125, STREAMED_SOUND_MISSION_S1_F,
STREAMED_SOUND_MISSION_S1_G = 126, STREAMED_SOUND_MISSION_S1_G,
STREAMED_SOUND_MISSION_S1_H = 127, STREAMED_SOUND_MISSION_S1_H,
STREAMED_SOUND_MISSION_S1_I = 128, STREAMED_SOUND_MISSION_S1_I,
STREAMED_SOUND_MISSION_S1_J = 129, STREAMED_SOUND_MISSION_S1_J,
STREAMED_SOUND_MISSION_S1_K = 130, STREAMED_SOUND_MISSION_S1_K,
STREAMED_SOUND_MISSION_S1_L = 131, STREAMED_SOUND_MISSION_S1_L,
STREAMED_SOUND_MISSION_S3_A = 132, STREAMED_SOUND_MISSION_S3_A,
STREAMED_SOUND_MISSION_S3_B = 133, STREAMED_SOUND_MISSION_S3_B,
STREAMED_SOUND_MISSION_EL3_A = 134, STREAMED_SOUND_MISSION_EL3_A,
STREAMED_SOUND_MISSION_MF1_A = 135, STREAMED_SOUND_MISSION_MF1_A,
STREAMED_SOUND_MISSION_MF2_A = 136, STREAMED_SOUND_MISSION_MF2_A,
STREAMED_SOUND_MISSION_MF3_A = 137, STREAMED_SOUND_MISSION_MF3_A,
STREAMED_SOUND_MISSION_MF3_B = 138, STREAMED_SOUND_MISSION_MF3_B,
STREAMED_SOUND_MISSION_MF3_B1 = 139, STREAMED_SOUND_MISSION_MF3_B1,
STREAMED_SOUND_MISSION_MF3_C = 140, STREAMED_SOUND_MISSION_MF3_C,
STREAMED_SOUND_MISSION_MF4_A = 141, STREAMED_SOUND_MISSION_MF4_A,
STREAMED_SOUND_MISSION_MF4_B = 142, STREAMED_SOUND_MISSION_MF4_B,
STREAMED_SOUND_MISSION_MF4_C = 143, STREAMED_SOUND_MISSION_MF4_C,
STREAMED_SOUND_MISSION_A1_A = 144, STREAMED_SOUND_MISSION_A1_A,
STREAMED_SOUND_MISSION_A3_A = 145, STREAMED_SOUND_MISSION_A3_A,
STREAMED_SOUND_MISSION_A5_A = 146, STREAMED_SOUND_MISSION_A5_A,
STREAMED_SOUND_MISSION_A4_A = 147, STREAMED_SOUND_MISSION_A4_A,
STREAMED_SOUND_MISSION_A4_B = 148, STREAMED_SOUND_MISSION_A4_B,
STREAMED_SOUND_MISSION_A4_C = 149, STREAMED_SOUND_MISSION_A4_C,
STREAMED_SOUND_MISSION_A4_D = 150, STREAMED_SOUND_MISSION_A4_D,
STREAMED_SOUND_MISSION_K1_A = 151, STREAMED_SOUND_MISSION_K1_A,
STREAMED_SOUND_MISSION_K3_A = 152, STREAMED_SOUND_MISSION_K3_A,
STREAMED_SOUND_MISSION_R1_A = 153, STREAMED_SOUND_MISSION_R1_A,
STREAMED_SOUND_MISSION_R2_A = 154, STREAMED_SOUND_MISSION_R2_A,
STREAMED_SOUND_MISSION_R2_B = 155, STREAMED_SOUND_MISSION_R2_B,
STREAMED_SOUND_MISSION_R2_C = 156, STREAMED_SOUND_MISSION_R2_C,
STREAMED_SOUND_MISSION_R2_D = 157, STREAMED_SOUND_MISSION_R2_D,
STREAMED_SOUND_MISSION_R2_E = 158, STREAMED_SOUND_MISSION_R2_E,
STREAMED_SOUND_MISSION_R2_F = 159, STREAMED_SOUND_MISSION_R2_F,
STREAMED_SOUND_MISSION_R2_G = 160, STREAMED_SOUND_MISSION_R2_G,
STREAMED_SOUND_MISSION_R2_H = 161, STREAMED_SOUND_MISSION_R2_H,
STREAMED_SOUND_MISSION_R5_A = 162, STREAMED_SOUND_MISSION_R5_A,
STREAMED_SOUND_MISSION_R6_A = 163, STREAMED_SOUND_MISSION_R6_A,
STREAMED_SOUND_MISSION_R6_A1 = 164, STREAMED_SOUND_MISSION_R6_A1,
STREAMED_SOUND_MISSION_R6_B = 165, STREAMED_SOUND_MISSION_R6_B,
STREAMED_SOUND_MISSION_LO2_A = 166, STREAMED_SOUND_MISSION_LO2_A,
STREAMED_SOUND_MISSION_LO6_A = 167, STREAMED_SOUND_MISSION_LO6_A,
STREAMED_SOUND_MISSION_YD2_A = 168, STREAMED_SOUND_MISSION_YD2_A,
STREAMED_SOUND_MISSION_YD2_B = 169, STREAMED_SOUND_MISSION_YD2_B,
STREAMED_SOUND_MISSION_YD2_C = 170, STREAMED_SOUND_MISSION_YD2_C,
STREAMED_SOUND_MISSION_YD2_C1 = 171, STREAMED_SOUND_MISSION_YD2_C1,
STREAMED_SOUND_MISSION_YD2_D = 172, STREAMED_SOUND_MISSION_YD2_D,
STREAMED_SOUND_MISSION_YD2_E = 173, STREAMED_SOUND_MISSION_YD2_E,
STREAMED_SOUND_MISSION_YD2_F = 174, STREAMED_SOUND_MISSION_YD2_F,
STREAMED_SOUND_MISSION_YD2_G = 175, STREAMED_SOUND_MISSION_YD2_G,
STREAMED_SOUND_MISSION_YD2_H = 176, STREAMED_SOUND_MISSION_YD2_H,
STREAMED_SOUND_MISSION_YD2_ASS = 177, STREAMED_SOUND_MISSION_YD2_ASS,
STREAMED_SOUND_MISSION_YD2_OK = 178, STREAMED_SOUND_MISSION_YD2_OK,
STREAMED_SOUND_MISSION_H5_A = 179, STREAMED_SOUND_MISSION_H5_A,
STREAMED_SOUND_MISSION_H5_B = 180, STREAMED_SOUND_MISSION_H5_B,
STREAMED_SOUND_MISSION_H5_C = 181, STREAMED_SOUND_MISSION_H5_C,
STREAMED_SOUND_MISSION_AMMU_A = 182, STREAMED_SOUND_MISSION_AMMU_A,
STREAMED_SOUND_MISSION_AMMU_B = 183, STREAMED_SOUND_MISSION_AMMU_B,
STREAMED_SOUND_MISSION_AMMU_C = 184, STREAMED_SOUND_MISSION_AMMU_C,
STREAMED_SOUND_MISSION_DOOR_1 = 185, STREAMED_SOUND_MISSION_DOOR_1,
STREAMED_SOUND_MISSION_DOOR_2 = 186, STREAMED_SOUND_MISSION_DOOR_2,
STREAMED_SOUND_MISSION_DOOR_3 = 187, STREAMED_SOUND_MISSION_DOOR_3,
STREAMED_SOUND_MISSION_DOOR_4 = 188, STREAMED_SOUND_MISSION_DOOR_4,
STREAMED_SOUND_MISSION_DOOR_5 = 189, STREAMED_SOUND_MISSION_DOOR_5,
STREAMED_SOUND_MISSION_DOOR_6 = 190, STREAMED_SOUND_MISSION_DOOR_6,
STREAMED_SOUND_MISSION_T3_A = 191, STREAMED_SOUND_MISSION_T3_A,
STREAMED_SOUND_MISSION_T3_B = 192, STREAMED_SOUND_MISSION_T3_B,
STREAMED_SOUND_MISSION_T3_C = 193, STREAMED_SOUND_MISSION_T3_C,
STREAMED_SOUND_MISSION_K1_B = 194, STREAMED_SOUND_MISSION_K1_B,
STREAMED_SOUND_MISSION_CAT1 = 195, STREAMED_SOUND_MISSION_CAT1,
TOTAL_STREAMED_SOUNDS = 196, TOTAL_STREAMED_SOUNDS,
NO_STREAMED_SOUND = 197, NO_STREAMED_SOUND,
}; };
enum AudioEntityHandle { enum AudioEntityHandle {

View File

@ -515,6 +515,7 @@ int m_iModeObbeCamIsInForCar;
void dtor(void) { this->CCamera::~CCamera(); } 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, m_WideScreenOn) == 0x70, "CCamera: error");
static_assert(offsetof(CCamera, WorldViewerBeingUsed) == 0x75, "CCamera: error"); static_assert(offsetof(CCamera, WorldViewerBeingUsed) == 0x75, "CCamera: error");
static_assert(offsetof(CCamera, m_uiNumberOfTrainCamNodes) == 0x84, "CCamera: error"); static_assert(offsetof(CCamera, m_uiNumberOfTrainCamNodes) == 0x84, "CCamera: error");

View File

@ -116,6 +116,8 @@ public:
#ifdef __DINPUT_INCLUDED__ #ifdef __DINPUT_INCLUDED__
DIJOYSTATE2 m_OldState; DIJOYSTATE2 m_OldState;
DIJOYSTATE2 m_NewState; DIJOYSTATE2 m_NewState;
#else
uint8 ___padd[0x110 * 2];
#endif #endif
wchar m_aActionNames[MAX_CONTROLLERACTIONS][ACTIONNAME_LENGTH]; wchar m_aActionNames[MAX_CONTROLLERACTIONS][ACTIONNAME_LENGTH];
bool m_aButtonStates[MAX_BUTTONS]; bool m_aButtonStates[MAX_BUTTONS];

View File

@ -864,9 +864,8 @@ CVehicle*
FindPlayerVehicle(void) FindPlayerVehicle(void)
{ {
CPlayerPed *ped = FindPlayerPed(); CPlayerPed *ped = FindPlayerPed();
if(ped->InVehicle()) if(ped && ped->InVehicle())
return ped->m_pMyVehicle; return ped->m_pMyVehicle;
else
return nil; return nil;
} }

View File

@ -2134,7 +2134,7 @@ _WinMain(HINSTANCE instance,
CPad::ResetCheats(); CPad::ResetCheats();
CPad::StopPadsShaking(); CPad::StopPadsShaking();
DMAudio.ChangeMusicMode(MUSICMODE_OFF); DMAudio.ChangeMusicMode(MUSICMODE_DISABLE);
CTimer::Stop(); CTimer::Stop();