diff --git a/docs/progress.svg b/docs/progress.svg
index 1896eb72..209628c0 100644
--- a/docs/progress.svg
+++ b/docs/progress.svg
@@ -916,10 +916,10 @@
HRESULT __stdcall EnumDisplayModesCallback(LPDDSDESC lpDDSurfaceDesc, LPVOID lpContext);
bool __cdecl WinVidInit(void);
bool __cdecl WinVidGetDisplayAdapters(void);
-void __thiscall FlaggedStringDelete(STRING_FLAGGED *item);
-bool __cdecl EnumerateDisplayAdapters(DISPLAY_ADAPTER_LIST *displayAdapterList);
+void __thiscall FlaggedStringDelete(struct STRING_FLAGGED *item);
+bool __cdecl EnumerateDisplayAdapters(struct DISPLAY_ADAPTER_LIST *displayAdapterList);
BOOL __stdcall EnumDisplayAdaptersCallback(GUID *lpGUID, LPTSTR lpDriverDescription, LPTSTR lpDriverName, LPVOID lpContext);
-void __thiscall FlaggedStringsCreate(DISPLAY_ADAPTER *adapter);
+void __thiscall FlaggedStringsCreate(struct DISPLAY_ADAPTER *adapter);
bool __cdecl WinVidRegisterGameWindowClass(void);
LRESULT __stdcall WinVidGameWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
void __cdecl WinVidResizeGameWindow(HWND hWnd, int32_t edge, LPRECT rect);
@@ -949,7 +949,7 @@
bool __cdecl WinInputInit(void);
bool __cdecl DInputEnumDevices(JOYSTICK_LIST *joystickList);
BOOL __stdcall DInputEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef);
-void __thiscall FlaggedStringCreate(STRING_FLAGGED *item, DWORD dwSize);
+void __thiscall FlaggedStringCreate(struct STRING_FLAGGED *item, DWORD dwSize);
JOYSTICK_NODE *__cdecl GetJoystick(GUID *lpGuid);
void __cdecl DInputKeyboardCreate(void);
void __cdecl DInputKeyboardRelease(void);
@@ -1203,7 +1203,7 @@
void __cdecl S_CDStop(void);
BOOL __cdecl StartSyncedAudio(int32_t trackID);
DWORD __cdecl S_CDGetLoc(void);
-void __cdecl Music_SetVolume(uint32_t volume);
+void __cdecl Music_SetVolume(int32_t volume);
void __cdecl CopyBitmapPalette(RGB888 *srcPal, BYTE *srcBitmap, int32_t bitmapSize, RGB888 *destPal);
BYTE __cdecl FindNearestPaletteEntry(RGB888 *palette, int32_t red, int32_t green, int32_t blue, bool ignoreSysPalette);
void __cdecl SyncSurfacePalettes(void *srcData, int32_t width, int32_t height, int32_t srcPitch, RGB888 *srcPalette, void *dstData, int32_t dstPitch, RGB888 *dstPalette, bool preserveSysPalette);
@@ -1853,7 +1853,7 @@
void __cdecl EffectNewRoom(int16_t fx_num, int16_t room_num);
void __cdecl SE_AdvancedDlgUpdate(HWND hwndDlg);
int32_t __cdecl GetFrames(struct ITEM_INFO *item, int16_t *frmptr[], int32_t *rate);
-void __cdecl Music_SetVolume(uint32_t volume);
+void __cdecl Music_SetVolume(int32_t volume);
int16_t *__cdecl Output_InsertObjectGT4_ZBuffered(int16_t *obj_ptr, int32_t num, enum SORT_TYPE sort_type);
void __cdecl extra_as_sharkkill(struct ITEM_INFO *item, struct COLL_INFO *coll);
bool __cdecl GetRegistryGuidValue(LPCTSTR lpValueName, GUID *value, GUID *defaultValue);
@@ -2216,7 +2216,7 @@
void __cdecl BridgeTilt1Ceiling(struct ITEM_INFO *item, int32_t x, int32_t y, int32_t z, int32_t *height);
void __cdecl ReadSG(void *pointer, int32_t size);
void __cdecl WinVidSetGameWindowSize(int32_t width, int32_t height);
-void __thiscall FlaggedStringsCreate(DISPLAY_ADAPTER *adapter);
+void __thiscall FlaggedStringsCreate(struct DISPLAY_ADAPTER *adapter);
void __cdecl S_FadeInInventory(BOOL isFade);
void __cdecl S_DrawScreenLine(int32_t x, int32_t y, int32_t z, int32_t xLen, int32_t yLen, BYTE colorIdx, D3DCOLOR *gour, uint16_t flags);
void __cdecl HWR_GetPageHandles(void);
@@ -2347,7 +2347,7 @@
void __cdecl AssaultStop(struct ITEM_INFO *item);
int32_t __cdecl GF_DoFrontEndSequence(void);
bool __cdecl D3DCreate(void);
-void __thiscall FlaggedStringCreate(STRING_FLAGGED *item, DWORD dwSize);
+void __thiscall FlaggedStringCreate(struct STRING_FLAGGED *item, DWORD dwSize);
BOOL __cdecl S_SoundSampleIsPlaying(int32_t channel);
bool __cdecl InitTextures(void);
void __cdecl lara_col_slide(struct ITEM_INFO *item, struct COLL_INFO *coll);
@@ -2380,7 +2380,7 @@
void __cdecl ControlLaraExtra(int16_t item_num);
void __cdecl BridgeFlatCeiling(struct ITEM_INFO *item, int32_t x, int32_t y, int32_t z, int32_t *height);
int32_t __fastcall Math_Sin(int16_t angle);
-bool __cdecl EnumerateDisplayAdapters(DISPLAY_ADAPTER_LIST *displayAdapterList);
+bool __cdecl EnumerateDisplayAdapters(struct DISPLAY_ADAPTER_LIST *displayAdapterList);
void __cdecl DInputRelease(void);
bool __cdecl DSoundEnumerate(SOUND_ADAPTER_LIST *adapterList);
int32_t __fastcall Math_SinImpl(int16_t angle);
@@ -2424,7 +2424,7 @@
void __cdecl lara_col_stepleft(struct ITEM_INFO *item, struct COLL_INFO *coll);
void __cdecl lara_col_roll(struct ITEM_INFO *item, struct COLL_INFO *coll);
void __cdecl lara_col_swim(struct ITEM_INFO *item, struct COLL_INFO *coll);
-void __thiscall FlaggedStringDelete(STRING_FLAGGED *item);
+void __thiscall FlaggedStringDelete(struct STRING_FLAGGED *item);
void __cdecl WinVidFinish(void);
bool __cdecl S_IntroFMV(LPCTSTR fileName1, LPCTSTR fileName2);
LONG __cdecl DeleteRegistryValue(LPCTSTR lpValueName);
diff --git a/docs/progress.txt b/docs/progress.txt
index d89a08f0..5357a4cc 100644
--- a/docs/progress.txt
+++ b/docs/progress.txt
@@ -83,8 +83,8 @@ typedef struct DISPLAY_ADAPTER_NODE {
} DISPLAY_ADAPTER_NODE;
typedef struct DISPLAY_ADAPTER_LIST {
- struct DisplayAdapterNode_t *head;
- struct DisplayAdapterNode_t *tail;
+ struct DISPLAY_ADAPTER_NODE *head;
+ struct DISPLAY_ADAPTER_NODE *tail;
DWORD dwCount;
} DISPLAY_ADAPTER_LIST;
@@ -96,14 +96,14 @@ typedef struct SOUND_ADAPTER {
} SOUND_ADAPTER;
typedef struct SOUND_ADAPTER_NODE {
- struct SoundAdapterNode_t *next;
- struct SoundAdapterNode_t *previous;
+ struct SOUND_ADAPTER_NODE *next;
+ struct SOUND_ADAPTER_NODE *previous;
SOUND_ADAPTER body;
} SOUND_ADAPTER_NODE;
typedef struct SOUND_ADAPTER_LIST {
- struct SoundAdapterNode_t *head;
- struct SoundAdapterNode_t *tail;
+ struct SOUND_ADAPTER_NODE *head;
+ struct SOUND_ADAPTER_NODE *tail;
DWORD dwCount;
} SOUND_ADAPTER_LIST;
@@ -1800,10 +1800,10 @@ typedef struct CINE_FRAME {
00445A50 000003B1 -R HRESULT __stdcall EnumDisplayModesCallback(LPDDSDESC lpDDSurfaceDesc, LPVOID lpContext);
00445E10 00000040 -R bool __cdecl WinVidInit(void);
00445E50 000000AF -R bool __cdecl WinVidGetDisplayAdapters(void);
-00445F00 00000013 -R void __thiscall FlaggedStringDelete(STRING_FLAGGED *item);
-00445F20 0000001A -R bool __cdecl EnumerateDisplayAdapters(DISPLAY_ADAPTER_LIST *displayAdapterList);
+00445F00 00000013 -R void __thiscall FlaggedStringDelete(struct STRING_FLAGGED *item);
+00445F20 0000001A -R bool __cdecl EnumerateDisplayAdapters(struct DISPLAY_ADAPTER_LIST *displayAdapterList);
00445F40 000001BE -R BOOL __stdcall EnumDisplayAdaptersCallback(GUID *lpGUID, LPTSTR lpDriverDescription, LPTSTR lpDriverName, LPVOID lpContext);
-00446100 00000035 -R void __thiscall FlaggedStringsCreate(DISPLAY_ADAPTER *adapter);
+00446100 00000035 -R void __thiscall FlaggedStringsCreate(struct DISPLAY_ADAPTER *adapter);
00446140 0000006A -R bool __cdecl WinVidRegisterGameWindowClass(void);
004461B0 0000049F -R LRESULT __stdcall WinVidGameWindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
004467C0 000001C0 -R void __cdecl WinVidResizeGameWindow(HWND hWnd, int32_t edge, LPRECT rect);
@@ -1833,7 +1833,7 @@ typedef struct CINE_FRAME {
004473B0 0000007F -R bool __cdecl WinInputInit(void);
00447430 00000024 -R bool __cdecl DInputEnumDevices(JOYSTICK_LIST *joystickList);
00447460 000000E8 -R BOOL __stdcall DInputEnumDevicesCallback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef);
-00447550 0000001F -R void __thiscall FlaggedStringCreate(STRING_FLAGGED *item, DWORD dwSize);
+00447550 0000001F -R void __thiscall FlaggedStringCreate(struct STRING_FLAGGED *item, DWORD dwSize);
00447570 0000004E -R JOYSTICK_NODE *__cdecl GetJoystick(GUID *lpGuid);
004475C0 000000C9 -R void __cdecl DInputKeyboardCreate(void);
00447690 00000029 -R void __cdecl DInputKeyboardRelease(void);
@@ -2087,7 +2087,7 @@ typedef struct CINE_FRAME {
00455570 00000039 -R void __cdecl S_CDStop(void);
004555B0 00000084 -R BOOL __cdecl StartSyncedAudio(int32_t trackID);
00455640 00000061 -R DWORD __cdecl S_CDGetLoc(void);
-004556B0 00000092 * void __cdecl Music_SetVolume(uint32_t volume);
+004556B0 00000092 * void __cdecl Music_SetVolume(int32_t volume);
004557A0 00000137 -R void __cdecl CopyBitmapPalette(RGB888 *srcPal, BYTE *srcBitmap, int32_t bitmapSize, RGB888 *destPal);
004558E0 000000C8 -R BYTE __cdecl FindNearestPaletteEntry(RGB888 *palette, int32_t red, int32_t green, int32_t blue, bool ignoreSysPalette);
004559B0 000000AE -R void __cdecl SyncSurfacePalettes(void *srcData, int32_t width, int32_t height, int32_t srcPitch, RGB888 *srcPalette, void *dstData, int32_t dstPitch, RGB888 *dstPalette, bool preserveSysPalette);
@@ -2168,6 +2168,7 @@ typedef struct CINE_FRAME {
# + decompiled
# Offset Flags Declaration
+004640BC - int16_t g_CD_TrackID;
00465A60 - int16_t g_OptionMusicVolume;
00467DD0 + const int32_t g_AtanBaseTable[8];
00467DF0 + const int16_t g_AtanAngleTable[0x800];
@@ -2199,7 +2200,22 @@ typedef struct CINE_FRAME {
004D6B60 - float g_FltWinRight;
004D6BF8 - int32_t g_PhdWinRight;
004D778C - int32_t g_IsChunkyCamera;
+004D7F10 - HWND g_GameWindowHandle;
+004D8570 - DWORD g_SampleFreqs[256];
+004D8970 - struct SOUND_ADAPTER_LIST g_SoundAdapterList;
+004D8980 - LPDIRECTSOUNDBUFFER g_SampleBuffers[256];
+004D8D80 - uint8_t g_IsSoundEnabled;
+004D8D84 - LPDIRECTSOUND g_DSound;
+004D8D88 - int32_t g_ChannelSamples[32];
+004D8E08 - LPDIRECTSOUNDBUFFER g_ChannelBuffers[32];
+004D8E8C - struct SOUND_ADAPTER g_CurrentSoundAdapter;
+004D8EAC - struct SOUND_ADAPTER_NODE *g_PrimarySoundAdapter;
+0051BCC0 - struct APP_SETTINGS g_SavedAppSettings;
0051BD20 - char g_ErrorMessage[128];
+0051BDA8 - int32_t g_MasterVolume;
+0051BDAC - MCIDEVICEID g_MciDeviceID;
+0051BDB0 - int32_t g_CD_LoopTrack;
+0051E6C4 - int32_t g_SoundIsActive;
005206E0 - struct LARA_INFO g_Lara;
005207BC - struct ITEM_INFO *g_LaraItem;
0052618C - struct ROOM_INFO *g_Rooms;
diff --git a/src/global/funcs.h b/src/global/funcs.h
index 2f40ca2a..c8023a3d 100644
--- a/src/global/funcs.h
+++ b/src/global/funcs.h
@@ -814,10 +814,10 @@
#define EnumDisplayModesCallback ((HRESULT __stdcall (*)(LPDDSDESC lpDDSurfaceDesc, LPVOID lpContext))0x00445A50)
#define WinVidInit ((bool __cdecl (*)(void))0x00445E10)
#define WinVidGetDisplayAdapters ((bool __cdecl (*)(void))0x00445E50)
-#define FlaggedStringDelete ((void __thiscall (*)(STRING_FLAGGED *item))0x00445F00)
-#define EnumerateDisplayAdapters ((bool __cdecl (*)(DISPLAY_ADAPTER_LIST *displayAdapterList))0x00445F20)
+#define FlaggedStringDelete ((void __thiscall (*)(struct STRING_FLAGGED *item))0x00445F00)
+#define EnumerateDisplayAdapters ((bool __cdecl (*)(struct DISPLAY_ADAPTER_LIST *displayAdapterList))0x00445F20)
#define EnumDisplayAdaptersCallback ((BOOL __stdcall (*)(GUID *lpGUID, LPTSTR lpDriverDescription, LPTSTR lpDriverName, LPVOID lpContext))0x00445F40)
-#define FlaggedStringsCreate ((void __thiscall (*)(DISPLAY_ADAPTER *adapter))0x00446100)
+#define FlaggedStringsCreate ((void __thiscall (*)(struct DISPLAY_ADAPTER *adapter))0x00446100)
#define WinVidRegisterGameWindowClass ((bool __cdecl (*)(void))0x00446140)
#define WinVidGameWindowProc ((LRESULT __stdcall (*)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam))0x004461B0)
#define WinVidResizeGameWindow ((void __cdecl (*)(HWND hWnd, int32_t edge, LPRECT rect))0x004467C0)
@@ -840,7 +840,7 @@
#define WinInputInit ((bool __cdecl (*)(void))0x004473B0)
#define DInputEnumDevices ((bool __cdecl (*)(JOYSTICK_LIST *joystickList))0x00447430)
#define DInputEnumDevicesCallback ((BOOL __stdcall (*)(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef))0x00447460)
-#define FlaggedStringCreate ((void __thiscall (*)(STRING_FLAGGED *item, DWORD dwSize))0x00447550)
+#define FlaggedStringCreate ((void __thiscall (*)(struct STRING_FLAGGED *item, DWORD dwSize))0x00447550)
#define GetJoystick ((JOYSTICK_NODE *__cdecl (*)(GUID *lpGuid))0x00447570)
#define DInputKeyboardCreate ((void __cdecl (*)(void))0x004475C0)
#define DInputKeyboardRelease ((void __cdecl (*)(void))0x00447690)
@@ -1079,7 +1079,7 @@
#define S_CDStop ((void __cdecl (*)(void))0x00455570)
#define StartSyncedAudio ((BOOL __cdecl (*)(int32_t trackID))0x004555B0)
#define S_CDGetLoc ((DWORD __cdecl (*)(void))0x00455640)
-#define Music_SetVolume ((void __cdecl (*)(uint32_t volume))0x004556B0)
+#define Music_SetVolume ((void __cdecl (*)(int32_t volume))0x004556B0)
#define CopyBitmapPalette ((void __cdecl (*)(RGB888 *srcPal, BYTE *srcBitmap, int32_t bitmapSize, RGB888 *destPal))0x004557A0)
#define FindNearestPaletteEntry ((BYTE __cdecl (*)(RGB888 *palette, int32_t red, int32_t green, int32_t blue, bool ignoreSysPalette))0x004558E0)
#define SyncSurfacePalettes ((void __cdecl (*)(void *srcData, int32_t width, int32_t height, int32_t srcPitch, RGB888 *srcPalette, void *dstData, int32_t dstPitch, RGB888 *dstPalette, bool preserveSysPalette))0x004559B0)
diff --git a/src/global/vars.h b/src/global/vars.h
index e1543047..1ce4b37b 100644
--- a/src/global/vars.h
+++ b/src/global/vars.h
@@ -6,6 +6,7 @@
#include "inject_util.h"
// clang-format off
+#define g_CD_TrackID VAR_U_(0x004640BC, int16_t)
#define g_OptionMusicVolume VAR_U_(0x00465A60, int16_t)
#define g_ViewportAspectRatio VAR_I_(0x0046C304, float, 0.0f)
#define g_PhdWinTop VAR_U_(0x0046E310, int32_t)
@@ -34,7 +35,22 @@
#define g_FltWinRight VAR_U_(0x004D6B60, float)
#define g_PhdWinRight VAR_U_(0x004D6BF8, int32_t)
#define g_IsChunkyCamera VAR_U_(0x004D778C, int32_t)
+#define g_GameWindowHandle VAR_U_(0x004D7F10, HWND)
+#define g_SampleFreqs ARRAY_(0x004D8570, DWORD, [256])
+#define g_SoundAdapterList VAR_U_(0x004D8970, struct SOUND_ADAPTER_LIST)
+#define g_SampleBuffers ARRAY_(0x004D8980, LPDIRECTSOUNDBUFFER, [256])
+#define g_IsSoundEnabled VAR_U_(0x004D8D80, uint8_t)
+#define g_DSound VAR_U_(0x004D8D84, LPDIRECTSOUND)
+#define g_ChannelSamples ARRAY_(0x004D8D88, int32_t, [32])
+#define g_ChannelBuffers ARRAY_(0x004D8E08, LPDIRECTSOUNDBUFFER, [32])
+#define g_CurrentSoundAdapter VAR_U_(0x004D8E8C, struct SOUND_ADAPTER)
+#define g_PrimarySoundAdapter VAR_U_(0x004D8EAC, struct SOUND_ADAPTER_NODE *)
+#define g_SavedAppSettings VAR_U_(0x0051BCC0, struct APP_SETTINGS)
#define g_ErrorMessage ARRAY_(0x0051BD20, char, [128])
+#define g_MasterVolume VAR_U_(0x0051BDA8, int32_t)
+#define g_MciDeviceID VAR_U_(0x0051BDAC, MCIDEVICEID)
+#define g_CD_LoopTrack VAR_U_(0x0051BDB0, int32_t)
+#define g_SoundIsActive VAR_U_(0x0051E6C4, int32_t)
#define g_Lara VAR_U_(0x005206E0, struct LARA_INFO)
#define g_LaraItem VAR_U_(0x005207BC, struct ITEM_INFO *)
#define g_Rooms VAR_U_(0x0052618C, struct ROOM_INFO *)