summaryrefslogtreecommitdiffstats
path: root/src/audio
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/DMAudio.h171
-rw-r--r--src/audio/MusicManager.cpp132
-rw-r--r--src/audio/MusicManager.h264
-rw-r--r--src/audio/SampleManager.cpp9
-rw-r--r--src/audio/SampleManager.h11
5 files changed, 585 insertions, 2 deletions
diff --git a/src/audio/DMAudio.h b/src/audio/DMAudio.h
index 91a3ff0f..1b18c28c 100644
--- a/src/audio/DMAudio.h
+++ b/src/audio/DMAudio.h
@@ -1,5 +1,176 @@
#pragma once
+enum eSound {
+ SOUND_CAR_DOOR_CLOSE_BONNET = 0,
+ SOUND_CAR_DOOR_CLOSE_BUMPER = 1,
+ SOUND_CAR_DOOR_CLOSE_FRONT_LEFT = 2,
+ SOUND_CAR_DOOR_CLOSE_FRONT_RIGHT = 3,
+ SOUND_CAR_DOOR_CLOSE_BACK_LEFT = 4,
+ SOUND_CAR_DOOR_CLOSE_BACK_RIGHT = 5,
+ SOUND_CAR_DOOR_OPEN_BONNET = 6,
+ SOUND_CAR_DOOR_OPEN_BUMPER = 7,
+ SOUND_CAR_DOOR_OPEN_FRONT_LEFT = 8,
+ SOUND_CAR_DOOR_OPEN_FRONT_RIGHT = 9,
+ SOUND_CAR_DOOR_OPEN_BACK_LEFT = 10,
+ SOUND_CAR_DOOR_OPEN_BACK_RIGHT = 11,
+ SOUND_CAR_WINDSHIELD_CRACK = 12,
+ SOUND_CAR_JUMP = 13,
+ SOUND_E = 14,
+ SOUND_F = 15,
+ SOUND_CAR_ENGINE_START = 16,
+ SOUND_CAR_LIGHT_BREAK = 17,
+ SOUND_CAR_HYDRALIC_1 = 18,
+ SOUND_CAR_HYDRALIC_2 = 19,
+ SOUND_CAR_HYDRALIC_3 = 20,
+ SOUND_CAR_JERK = 21,
+ SOUND_CAR_SPLASH = 22,
+ SOUND_17 = 23,
+ SOUND_18 = 24,
+ SOUND_19 = 25,
+ SOUND_CAR_TANK_TURRET_ROTATE = 26,
+ SOUND_CAR_BOMB_TICK = 27,
+ SOUND_PLANE_ON_GROUND = 28,
+ SOUND_STEP_START = 29,
+ SOUND_STEP_END = 30,
+ SOUND_FALL_LAND = 31,
+ SOUND_FALL_COLLAPSE = 32,
+ SOUND_21 = 33,
+ SOUND_22 = 34,
+ SOUND_23 = 35,
+ SOUND_24 = 36,
+ SOUND_25 = 37,
+ SOUND_26 = 38,
+ SOUND_WEAPON_PUNCH_ATTACK = 39,
+ SOUND_28 = 40,
+ SOUND_29 = 41,
+ SOUND_2A = 42,
+ SOUND_2B = 43,
+ SOUND_2C = 44,
+ SOUND_2D = 45,
+ SOUND_WEAPON_BAT_ATTACK = 46,
+ SOUND_WEAPON_SHOT_FIRED = 47,
+ SOUND_WEAPON_RELOAD = 48,
+ SOUND_31 = 49,
+ SOUND_32 = 50,
+ SOUND_33 = 51,
+ SOUND_WEAPON_FLAMETHROWER_FIRE = 52,
+ SOUND_WEAPON_SNIPER_SHOT_NO_ZOOM = 53,
+ SOUND_WEAPON_ROCKET_SHOT_NO_ZOOM = 54,
+ SOUND_WEAPON_HIT_PED = 55,
+ SOUND_WEAPON_HIT_VEHICLE = 56,
+ SOUND_GARAGE_NO_MONEY = 57,
+ SOUND_GARAGE_BAD_VEHICLE = 58,
+ SOUND_GARAGE_OPENING = 59,
+ SOUND_3C = 60,
+ SOUND_GARAGE_BOMB1_SET = 61,
+ SOUND_GARAGE_BOMB2_SET = 62,
+ SOUND_GARAGE_BOMB3_SET = 63,
+ SOUND_40 = 64,
+ SOUND_41 = 65,
+ SOUND_GARAGE_VEHICLE_DECLINED = 66,
+ SOUND_GARAGE_VEHICLE_ACCEPTED = 67,
+ SOUND_GARAGE_DOOR_CLOSED = 68,
+ SOUND_GARAGE_DOOR_OPENED = 69,
+ SOUND_CRANE_PICKUP = 70,
+ SOUND_PICKUP_WEAPON_BOUGHT = 71,
+ SOUND_PICKUP_WEAPON = 72,
+ SOUND_PICKUP_HEALTH = 73,
+ SOUND_4A = 74,
+ SOUND_4B = 75,
+ SOUND_PICKUP_ADRENALINE = 76,
+ SOUND_PICKUP_ARMOUR = 77,
+ SOUND_PICKUP_BONUS = 78,
+ SOUND_PICKUP_MONEY = 79,
+ SOUND_PICKUP_HIDDEN_PACKAGE = 80,
+ SOUND_PICKUP_PACMAN_PILL = 81,
+ SOUND_PICKUP_PACMAN_PACKAGE = 82,
+ SOUND_PICKUP_FLOAT_PACKAGE = 83,
+ SOUND_BOMB_TIMED_ACTIVATED = 84,
+ SOUND_55 = 85,
+ SOUND_BOMB_ONIGNITION_ACTIVATED = 86,
+ SOUND_BOMB_TICK = 87,
+ SOUND_RAMPAGE_START = 88,
+ SOUND_RAMPAGE_ONGOING = 89,
+ SOUND_RAMPAGE_PASSED = 90,
+ SOUND_RAMPAGE_FAILED = 91,
+ SOUND_RAMPAGE_KILL = 92,
+ SOUND_RAMPAGE_CAR_BLOWN = 93,
+ SOUND_EVIDENCE_PICKUP = 94,
+ SOUND_UNLOAD_GOLD = 95,
+ SOUND_PAGER = 96,
+ SOUND_PED_DEATH = 97,
+ SOUND_PED_DAMAGE = 98,
+ SOUND_PED_63 = 99,
+ SOUND_PED_LAND = 100,
+ SOUND_PED_BULLET_HIT = 101,
+ SOUND_PED_BOMBER = 102,
+ SOUND_PED_BURNING = 103,
+ SOUND_PED_ARREST_FBI = 104,
+ SOUND_PED_ARREST_SWAT = 105,
+ SOUND_PED_ARREST_COP = 106,
+ SOUND_PED_HELI_PLAYER_FOUND = 107,
+ SOUND_PED_HANDS_UP = 108,
+ SOUND_PED_HANDS_COWER = 109,
+ SOUND_PED_FLEE_SPRINT = 110,
+ SOUND_PED_CAR_JACKING = 111,
+ SOUND_PED_MUGGING = 112,
+ SOUND_PED_CAR_JACKED = 113,
+ SOUND_PED_ROBBED = 114,
+ SOUND_PED_TAXI_WAIT = 115,
+ SOUND_PED_ATTACK = 116,
+ SOUND_PED_DEFEND = 117,
+ SOUND_PED_PURSUIT_ARMY = 118,
+ SOUND_PED_PURSUIT_FBI = 119,
+ SOUND_PED_PURSUIT_SWAT = 120,
+ SOUND_PED_PURSUIT_COP = 121,
+ SOUND_PED_HEALING = 122,
+ SOUND_PED_7B = 123,
+ SOUND_PED_LEAVE_VEHICLE = 124,
+ SOUND_PED_EVADE = 125,
+ SOUND_PED_FLEE_RUN = 126,
+ SOUND_PED_CAR_COLLISION = 127,
+ SOUND_PED_SOLICIT = 128,
+ SOUND_PED_EXTINGUISHING_FIRE = 129,
+ SOUND_PED_WAIT_DOUBLEBACK = 130,
+ SOUND_PED_CHAT_SEXY = 131,
+ SOUND_PED_CHAT_EVENT = 132,
+ SOUND_PED_CHAT = 133,
+ SOUND_PED_BODYCAST_HIT = 134,
+ SOUND_PED_TAXI_CALL = 135,
+ SOUND_INJURED_PED_MALE_OUCH = 136,
+ SOUND_INJURED_PED_FEMALE = 137,
+ SOUND_8A = 138,
+ SOUND_RACE_START_3 = 139,
+ SOUND_RACE_START_2 = 140,
+ SOUND_RACE_START_1 = 141,
+ SOUND_RACE_START_GO = 142,
+ SOUND_SPLASH = 143,
+ SOUND_WATER_FALL = 144,
+ SOUND_SPLATTER = 145,
+ SOUND_CAR_PED_COLLISION = 146,
+ SOUND_CLOCK_TICK = 147,
+ SOUND_PART_MISSION_COMPLETE = 148,
+ SOUND_FRONTEND_MENU_STARTING = 149,
+ SOUND_FRONTEND_MENU_COMPLETED = 150,
+ SOUND_FRONTEND_MENU_DENIED = 151,
+ SOUND_FRONTEND_MENU_SUCCESS = 152,
+ SOUND_FRONTEND_EXIT = 153,
+ SOUND_9A = 154,
+ SOUND_9B = 155,
+ SOUND_FRONTEND_AUDIO_TEST = 156,
+ SOUND_FRONTEND_FAIL = 157,
+ SOUND_FRONTEND_NO_RADIO = 158,
+ SOUND_FRONTEND_RADIO_CHANGE = 159,
+ SOUND_A0 = 160,
+ SOUND_AMMUNATION_WELCOME_1 = 161,
+ SOUND_AMMUNATION_WELCOME_2 = 162,
+ SOUND_AMMUNATION_WELCOME_3 = 163,
+ SOUND_LIGHTNING = 164,
+ SOUND_A5 = 165,
+ SOUND_TOTAL_SOUNDS = 166,
+ SOUND_TOTAL_PED_SOUNDS = 167,
+};
+
class CEntity;
class cDMAudio
diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp
index 0e6870de..d3f14b0a 100644
--- a/src/audio/MusicManager.cpp
+++ b/src/audio/MusicManager.cpp
@@ -1,7 +1,137 @@
#include "common.h"
#include "patcher.h"
#include "MusicManager.h"
+#include "Font.h"
+#include "Hud.h"
+#include "Text.h"
+#include "Timer.h"
+#include "Camera.h"
+#include "World.h"
+#include "ModelIndices.h"
+#include "SampleManager.h"
cMusicManager &MusicManager = *(cMusicManager*)0x8F3964;
+int &gNumRetunePresses = *(int*)0x650B80;
+int &gRetuneCounter = *(int*)0x650B84;
-WRAPPER void cMusicManager::DisplayRadioStationName(void) { EAXJMP(0x57E6D0); }
+//WRAPPER void cMusicManager::DisplayRadioStationName(void) { EAXJMP(0x57E6D0); }
+
+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;
+
+ int16 Model = FindPlayerVehicle()->m_modelIndex;
+ 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;
+ }
+ }
+}
+
+void cMusicManager::DisplayRadioStationName() {
+ wchar* RadioName = nullptr;
+ uint32 RadioStation = gNumRetunePresses + MusicManager.m_nCurrentStreamedSound;
+
+ switch (RadioStation) {
+ case HEAD_RADIO:
+ RadioName = TheText.Get("FEA_FM0");
+ break;
+ case DOUBLE_CLEF:
+ RadioName = TheText.Get("FEA_FM1");
+ break;
+ case JAH_RADIO:
+ RadioName = TheText.Get("FEA_FM2");
+ break;
+ case RISE_FM:
+ RadioName = TheText.Get("FEA_FM3");
+ break;
+ case LIPS_106:
+ RadioName = TheText.Get("FEA_FM4");
+ break;
+ case GAME_FM:
+ RadioName = TheText.Get("FEA_FM5");
+ break;
+ case MSX_FM:
+ RadioName = TheText.Get("FEA_FM6");
+ break;
+ case FLASHBACK:
+ RadioName = TheText.Get("FEA_FM7");
+ break;
+ case CHATTERBOX:
+ RadioName = TheText.Get("FEA_FM8");
+ break;
+ case USERTRACK:
+ RadioName = TheText.Get("FEA_FM9");
+ break;
+ default:
+ RadioName = nullptr;
+ break;
+ }
+
+ CFont::SetJustifyOff();
+ CFont::SetBackgroundOff();
+ CFont::SetScale(SCREEN_STRETCH_X(0.8f), SCREEN_STRETCH_Y(1.35f));
+ CFont::SetPropOn();
+ CFont::SetFontStyle(FONT_HEADING);
+ CFont::SetCentreOn();
+ CFont::SetCentreSize(SCREEN_STRETCH_X(640.0f));;
+
+ static int32 nTime = 0;
+ if (!CTimer::GetIsPaused() && !TheCamera.m_WideScreenOn && MusicManager.PlayerInCar()) {
+ if (gNumRetunePresses || (MusicManager.m_bPlayerInCar && !MusicManager.m_bPreviousPlayerInCar))
+ nTime = CTimer::GetTimeInMilliseconds() + 2000;
+
+ if (CTimer::GetTimeInMilliseconds() < nTime) {
+ if (RadioStation) {
+ if (MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_WATER_AMBIENT ||
+ MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_POLICE ||
+ MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_WATER_AMBIENT ||
+ MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_CITY_AMBIENT)
+ RadioStation = RADIO_OFF;
+ else {
+ if (RadioStation > HEAD_RADIO) {
+ if (cSampleManager.IsMP3RadioChannelAvailable()) {
+ if (RadioStation > USERTRACK)
+ RadioStation = RADIO_OFF;
+ }
+ else {
+ if (RadioStation > CHATTERBOX)
+ RadioStation = RADIO_OFF;
+ }
+ }
+ else {
+ RadioStation = RADIO_OFF;
+ }
+ }
+ }
+
+ if (RadioName) {
+ CFont::SetColor(CRGBA(0, 0, 0, 255));
+
+ CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_STRETCH_Y(23.0f), RadioName);
+
+ if (gNumRetunePresses)
+ CFont::SetColor(CRGBA(102, 133, 143, 255));
+ else
+ CFont::SetColor(CRGBA(147, 196, 211, 255));
+
+ CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_STRETCH_Y(22.0f), RadioName);
+ CFont::DrawFonts();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/audio/MusicManager.h b/src/audio/MusicManager.h
index 42cc879d..7932ca31 100644
--- a/src/audio/MusicManager.h
+++ b/src/audio/MusicManager.h
@@ -1,8 +1,270 @@
#pragma once
+enum eRadioStation {
+ HEAD_RADIO,
+ DOUBLE_CLEF,
+ JAH_RADIO,
+ RISE_FM,
+ LIPS_106,
+ GAME_FM,
+ MSX_FM,
+ FLASHBACK,
+ CHATTERBOX,
+ USERTRACK,
+ POLICE_RADIO,
+ RADIO_OFF,
+};
+
+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,
+};
+
+class tMP3Sample {
+public:
+ uint32 m_nLength;
+ uint32 m_nPosition;
+ uint32 m_nLastPosCheckTimer;
+};
+
class cMusicManager
{
public:
- void DisplayRadioStationName(void);
+ Bool m_bIsInitialised;
+ uint8 field_1;
+ uint8 m_nMusicMode;
+ uint8 m_nCurrentStreamedSound;
+ uint8 m_nPreviousStreamedSound;
+ uint8 field_5;
+ uint8 field_6;
+ uint8 field_7;
+ Bool m_bAnnouncement;
+ Bool m_bPreviousPlayerInCar;
+ Bool m_bPlayerInCar;
+ Bool m_bAnnouncementInProgress;
+ tMP3Sample m_asMP3Samples[196];
+ 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;
+ 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;
+
+public:
+ bool PlayerInCar();
+ void DisplayRadioStationName();
};
+
+static_assert(sizeof(cMusicManager) == 0x95C, "cMusicManager: error");
+
extern cMusicManager &MusicManager;
diff --git a/src/audio/SampleManager.cpp b/src/audio/SampleManager.cpp
new file mode 100644
index 00000000..2319baec
--- /dev/null
+++ b/src/audio/SampleManager.cpp
@@ -0,0 +1,9 @@
+#include "common.h"
+#include "SampleManager.h"
+
+CSampleManager &cSampleManager = *(CSampleManager *)0x7341E0;
+uint32 &CSampleManager::nNumOfMp3Files = *(uint32*)0x95CC00;
+
+bool CSampleManager::IsMP3RadioChannelAvailable() {
+ return nNumOfMp3Files != 0;
+}
diff --git a/src/audio/SampleManager.h b/src/audio/SampleManager.h
new file mode 100644
index 00000000..b8bd2011
--- /dev/null
+++ b/src/audio/SampleManager.h
@@ -0,0 +1,11 @@
+#pragma once
+
+class CSampleManager {
+public:
+ static uint32 &nNumOfMp3Files;
+
+public:
+ bool IsMP3RadioChannelAvailable();
+};
+
+extern CSampleManager &cSampleManager; \ No newline at end of file