[saco] Implement CAudio class member functions

Implements:
* `CAudio::GetRadioStation()`
* `CAudio::StartRadio(...)`
* `CAudio::GetRadioVolume()`
* `CAudio::StopOutdoorAmbienceTrack()`
* `CAudio::SetOutdoorAmbienceTrack(...)`
* `CAudio::PlaySound(...)`
* `CAudio::IsOutdoorAmbienceTrackDisabled()`
This commit is contained in:
RD42 2024-02-26 23:40:36 +08:00
parent f398b9c82c
commit ab608ee0ef
3 changed files with 90 additions and 23 deletions

View File

@ -1,36 +1,98 @@
#include "audio.h"
void CAudio::GetRadioStation()
//-----------------------------------------------------------
int CAudio::GetRadioStation()
{
// TODO: CAudio::sub_100A2210 100A2210
int iRadioStation = 0;
_asm mov ecx, 0x8CB6F8
_asm xor eax, eax
_asm mov al, [ecx+233]
_asm mov iRadioStation, eax
if(iRadioStation <= 12) return iRadioStation;
return -1;
}
void CAudio::StartRadio()
//-----------------------------------------------------------
void CAudio::StartRadio(int iStation)
{
// TODO: CAudio::sub_100A2240 100A2240
_asm push 0
_asm push iStation
_asm mov ecx, 0xB6BC90
_asm mov edx, 0x507DC0
_asm call edx
}
void CAudio::GetRadioVolume()
//-----------------------------------------------------------
float CAudio::GetRadioVolume()
{
// TODO: CAudio::sub_100A2280 100A2280
return *(float*)0xB5FCC8;
}
//-----------------------------------------------------------
void CAudio::StopOutdoorAmbienceTrack()
{
// TODO: CAudio::sub_100A2290 100A2290
_asm mov ecx, 0x8AC15C
_asm mov edx, 0x4D6D60
_asm call edx
}
void CAudio::SetOutdoorAmbienceTrack()
//-----------------------------------------------------------
void CAudio::SetOutdoorAmbienceTrack(int iTrack)
{
// TODO: CAudio::sub_100A22A0 100A22A0
_asm push iTrack
_asm mov ecx, 0x8AC15C
_asm mov edx, 0x4D6D50
_asm call edx
}
void CAudio::Play()
//-----------------------------------------------------------
void CAudio::PlaySound(int iSound, float fX, float fY, float fZ)
{
// TODO: CAudio::sub_100A22C0 100A22C0
if(iSound == 0)
{
if(field_0) {
ScriptCommand(&unload_wav, 1);
field_0 = iSound;
}
StopOutdoorAmbienceTrack();
field_4 = false;
}
else if(iSound == 1)
{
field_4 = true;
}
else if(iSound < 1000)
{
SetOutdoorAmbienceTrack(iSound);
}
else if(iSound < 2000)
{
ScriptCommand(&unload_wav, 1);
ScriptCommand(&load_wav, 1, iSound);
ScriptCommand(&set_wav_at_location, 1, fX, fY, fZ);
field_0 = 1;
}
else
{
ScriptCommand(&play_sound, fX, fY, fZ, iSound);
}
}
void CAudio::IsOutdoorAmbienceTrackDisabled()
//-----------------------------------------------------------
bool CAudio::IsOutdoorAmbienceTrackDisabled()
{
// TODO: CAudio::sub_100A23A0 100A23A0
}
return field_4;
}
//-----------------------------------------------------------

View File

@ -8,16 +8,15 @@ public:
char field_4;
CAudio() {
// TODO: CAudio::CAudio()
field_0 = 0;
field_4 = 0;
}
};
void GetRadioStation();
void StartRadio();
void GetRadioVolume();
int GetRadioStation();
void StartRadio(int iStation);
float GetRadioVolume();
void StopOutdoorAmbienceTrack();
void SetOutdoorAmbienceTrack();
void Play();
void IsOutdoorAmbienceTrackDisabled();
void SetOutdoorAmbienceTrack(int iTrack);
void PlaySound(int iSound, float fX, float fY, float fZ);
bool IsOutdoorAmbienceTrackDisabled();
};

View File

@ -39,6 +39,8 @@ const SCRIPT_COMMAND create_icon_marker_sphere = { 0x02A7, "fffiv" };
const SCRIPT_COMMAND set_actor_can_be_decapitated = { 0x0446, "ii" };
const SCRIPT_COMMAND play_sound = { 0x018c, "fffi" };
const SCRIPT_COMMAND enable_train_traffic = { 0x06d7, "i" };
const SCRIPT_COMMAND refresh_streaming_at = { 0x04E4, "ff" };
@ -60,7 +62,11 @@ const SCRIPT_COMMAND lock_camera_position = { 0x930, "i" };
const SCRIPT_COMMAND create_marker_at = { 0x2A8, "fffiv" };
const SCRIPT_COMMAND load_wav = { 0x3CF, "ii" };
const SCRIPT_COMMAND is_wav_loaded = { 0x3D0, "i" };
const SCRIPT_COMMAND play_wav = { 0x3D1, "i" };
const SCRIPT_COMMAND unload_wav = { 0x40D, "i" };
const SCRIPT_COMMAND set_wav_at_location = { 0x3D7, "ifff" };