Added missing audio ctors

This commit is contained in:
Sergeanur 2020-04-14 17:13:38 +03:00
parent 41d42a3e53
commit 9a7b833aa5
4 changed files with 65 additions and 28 deletions

View File

@ -10,6 +10,22 @@
const int CollisionSoundIntensity = 60;
cAudioCollisionManager::cAudioCollisionManager()
{
m_sQueue.m_pEntity1 = nil;
m_sQueue.m_pEntity2 = nil;
m_sQueue.m_bSurface1 = SURFACE_DEFAULT;
m_sQueue.m_bSurface2 = SURFACE_DEFAULT;
m_sQueue.m_fIntensity2 = 0.0f;
m_sQueue.m_fIntensity1 = 0.0f;
m_sQueue.m_vecPosition = CVector(0.0f, 0.0f, 0.0f);
for (int i = 0; i < NUMAUDIOCOLLISIONS; i++)
m_bIndicesTable[i] = NUMAUDIOCOLLISIONS;
m_bCollisionsInQueue = 0;
}
void
cAudioCollisionManager::AddCollisionToRequestedQueue()
{

View File

@ -29,8 +29,8 @@ public:
uint8 m_bCollisionsInQueue;
cAudioCollision m_sQueue;
// reversed all methods
void AddCollisionToRequestedQueue(); /// ok
cAudioCollisionManager();
void AddCollisionToRequestedQueue();
};
static_assert(sizeof(cAudioCollisionManager) == 852, "cAudioCollisionManager: error");

View File

@ -39,7 +39,7 @@
#include "ZoneCull.h"
#include "sampman.h"
cAudioManager &AudioManager = *(cAudioManager *)0x880FC0;
cAudioManager AudioManager;
uint32 gPornNextTime; // = *(uint32*)0x6508A0;
uint32 gSawMillNextTime; // = *(uint32*)0x6508A4;
uint32 gShopNextTime; // = *(uint32*)0x6508A8;
@ -192,6 +192,19 @@ enum PLAY_STATUS : uint8 {
enum LOADING_STATUS : uint8 { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED = 1 };
cPedComments::cPedComments()
{
for (int i = 0; i < NUM_PED_COMMENTS_SLOTS; i++)
for (int j = 0; j < NUM_PED_COMMENTS_BANKS; j++) {
m_asPedComments[j][i].m_nProcess = -1;
m_nIndexMap[j][i] = NUM_PED_COMMENTS_SLOTS;
}
for (int i = 0; i < NUM_PED_COMMENTS_BANKS; i++)
m_nCommentsInBank[i] = 0;
m_nActiveBank = 0;
}
void
cPedComments::Add(tPedComment *com)
{
@ -322,9 +335,9 @@ cPedComments::Process()
cAudioManager::cAudioManager()
{
m_bIsInitialised = 0;
m_bIsInitialised = false;
field_1 = 1;
m_fSpeedOfSound = 6.8600001f;
m_fSpeedOfSound = 6.86f;
m_bTimeSpent = 50;
m_bActiveSamples = NUM_SOUNDS_SAMPLES_SLOTS;
m_bActiveSampleQueue = 1;
@ -350,7 +363,6 @@ cAudioManager::cAudioManager()
cAudioManager::~cAudioManager()
{
if(m_bIsInitialised) Terminate();
m_nScriptObjectEntityTotal = 0;
}
void
@ -711,7 +723,7 @@ cAudioManager::DestroyAllGameCreatedEntities()
}
}
}
m_nScriptObjectEntityTotal = 0;
m_sAudioScriptObjectManager.m_nScriptObjectEntityTotal = 0;
}
}
@ -2714,8 +2726,8 @@ cAudioManager::GenerateIntegerRandomNumberTable()
char *
cAudioManager::Get3DProviderName(uint8 id) const
{
if(!m_bIsInitialised) return 0;
if(id >= SampleManager.GetNum3DProvidersAvailable()) return 0;
if(!m_bIsInitialised) return nil;
if(id >= SampleManager.GetNum3DProvidersAvailable()) return nil;
return SampleManager.Get3DProviderName(id);
}
@ -3028,12 +3040,12 @@ cAudioManager::PlayOneShot(int32 index, int16 sound, float vol)
if(entity.m_bIsUsed) {
if(sound < SOUND_TOTAL_SOUNDS) {
if(entity.m_nType == AUDIOTYPE_SCRIPTOBJECT) {
if(m_nScriptObjectEntityTotal <
ARRAY_SIZE(m_anScriptObjectEntityIndices)) {
if(m_sAudioScriptObjectManager.m_nScriptObjectEntityTotal <
ARRAY_SIZE(m_sAudioScriptObjectManager.m_anScriptObjectEntityIndices)) {
entity.m_awAudioEvent[0] = sound;
entity.m_AudioEvents = 1;
m_anScriptObjectEntityIndices
[m_nScriptObjectEntityTotal++] = index;
m_sAudioScriptObjectManager.m_anScriptObjectEntityIndices
[m_sAudioScriptObjectManager.m_nScriptObjectEntityTotal++] = index;
}
} else {
int32 i = 0;
@ -9588,15 +9600,15 @@ cAudioManager::ServiceSoundEffects()
ProcessMissionAudio();
AdjustSamplesVolume();
ProcessActiveQueues();
for(int32 i = 0; i < m_nScriptObjectEntityTotal; ++i) {
for(int32 i = 0; i < m_sAudioScriptObjectManager.m_nScriptObjectEntityTotal; ++i) {
cAudioScriptObject *object =
(cAudioScriptObject *)m_asAudioEntities[m_anScriptObjectEntityIndices[i]]
(cAudioScriptObject *)m_asAudioEntities[m_sAudioScriptObjectManager.m_anScriptObjectEntityIndices[i]]
.m_pEntity;
delete object;
m_asAudioEntities[m_anScriptObjectEntityIndices[i]].m_pEntity = nil;
DestroyEntity(m_anScriptObjectEntityIndices[i]);
m_asAudioEntities[m_sAudioScriptObjectManager.m_anScriptObjectEntityIndices[i]].m_pEntity = nil;
DestroyEntity(m_sAudioScriptObjectManager.m_anScriptObjectEntityIndices[i]);
}
m_nScriptObjectEntityTotal = 0;
m_sAudioScriptObjectManager.m_nScriptObjectEntityTotal = 0;
}
int8
@ -9965,7 +9977,7 @@ cAudioManager::Terminate()
}
m_nAudioEntitiesTotal = 0;
m_nScriptObjectEntityTotal = 0;
m_sAudioScriptObjectManager.m_nScriptObjectEntityTotal = 0;
PreTerminateGameSpecificShutdown();
for(uint32 i = 0; i < DIGITALCHANNELS; i++) {
@ -9974,7 +9986,7 @@ cAudioManager::Terminate()
SampleManager.Terminate();
m_bIsInitialised = 0;
m_bIsInitialised = false;
PostTerminateGameSpecificShutdown();
}
}

View File

@ -197,7 +197,7 @@ public:
bool m_bIsUsed;
uint8 m_bStatus;
int16 m_awAudioEvent[NUM_AUDIOENTITY_EVENTS];
uint8 gap_18[2];
//uint8 gap_18[2];
float m_afVolume[NUM_AUDIOENTITY_EVENTS];
uint8 m_AudioEvents;
uint8 field_25[3];
@ -216,7 +216,6 @@ public:
float m_fDistance;
uint8 m_bVolume;
int8 m_nProcess;
uint8 gap_26[2]; // unused
// no methods
};
@ -230,9 +229,8 @@ public:
uint8 m_nIndexMap[NUM_PED_COMMENTS_BANKS][NUM_PED_COMMENTS_SLOTS];
uint8 m_nCommentsInBank[NUM_PED_COMMENTS_BANKS];
uint8 m_nActiveBank;
uint8 gap_1163[1]; // unused
// reversed all methods
cPedComments();
void Add(tPedComment *com);
void Process();
};
@ -246,7 +244,7 @@ class cMissionAudio
public:
CVector m_vecPos;
bool m_bPredefinedProperties;
uint8 gap_13[3]; // unused
//uint8 gap_13[3];
int m_nSampleIndex;
uint8 m_bLoadingStatus;
uint8 m_bPlayStatus;
@ -262,6 +260,18 @@ public:
static_assert(sizeof(cMissionAudio) == 32, "cMissionAudio: error");
// name made up
class cAudioScriptObjectManager
{
public:
int32 m_anScriptObjectEntityIndices[NUM_SCRIPT_MAX_ENTITIES];
int32 m_nScriptObjectEntityTotal;
cAudioScriptObjectManager() { m_nScriptObjectEntityTotal = 0; }
~cAudioScriptObjectManager() { m_nScriptObjectEntityTotal = 0; }
};
class cVehicleParams;
class CPlane;
class CVehicle;
@ -315,8 +325,7 @@ public:
int32 m_nAudioEntitiesTotal;
CVector m_avecReflectionsPos[NUM_AUDIO_REFLECTIONS];
float m_afReflectionsDistances[NUM_AUDIO_REFLECTIONS];
int32 m_anScriptObjectEntityIndices[NUM_SCRIPT_MAX_ENTITIES];
int32 m_nScriptObjectEntityTotal;
cAudioScriptObjectManager m_sAudioScriptObjectManager;
cPedComments m_sPedComments;
int32 m_nFireAudioEntity;
int32 m_nWaterCannonEntity;
@ -611,4 +620,4 @@ public:
static_assert(sizeof(cAudioManager) == 19220, "cAudioManager: error");
extern cAudioManager &AudioManager;
extern cAudioManager AudioManager;