Implement ProcessGarages + small cleanup
This commit is contained in:
parent
3b8a177470
commit
7c425ac4ac
@ -325,7 +325,7 @@ cAudioManager::AddReflectionsToRequestedQueue()
|
||||
int32 noise;
|
||||
uint8 emittingVolume = (m_sQueueSample.m_bVolume >> 1) + (m_sQueueSample.m_bVolume >> 3);
|
||||
|
||||
for(uint32 i = 0; i < 5; i++) {
|
||||
for(uint32 i = 0; i < ARRAY_SIZE(m_afReflectionsDistances); i++) {
|
||||
reflectionDistance = m_afReflectionsDistances[i];
|
||||
if(reflectionDistance > 0.0f && reflectionDistance < 100.f &&
|
||||
reflectionDistance < m_sQueueSample.m_fSoundIntensity) {
|
||||
@ -563,7 +563,7 @@ cAudioManager::CreateEntity(int32 type, void *entity)
|
||||
if(!m_bIsInitialised) return AEHANDLE_ERROR_NOAUDIOSYS;
|
||||
if(!entity) return AEHANDLE_ERROR_NOENTITY;
|
||||
if(type >= TOTAL_AUDIO_TYPES) return AEHANDLE_ERROR_BADAUDIOTYPE;
|
||||
for(uint32 i = 0; i < 200; i++) {
|
||||
for(uint32 i = 0; i < ARRAY_SIZE(m_asAudioEntities); i++) {
|
||||
if(!m_asAudioEntities[i].m_bIsUsed) {
|
||||
m_asAudioEntities[i].m_bIsUsed = true;
|
||||
m_asAudioEntities[i].m_bStatus = 0;
|
||||
@ -587,7 +587,7 @@ cAudioManager::DestroyAllGameCreatedEntities()
|
||||
cAudioScriptObject *entity;
|
||||
|
||||
if(m_bIsInitialised) {
|
||||
for(uint32 i = 0; i < 200; i++) {
|
||||
for(uint32 i = 0; i < ARRAY_SIZE(m_asAudioEntities); i++) {
|
||||
if(m_asAudioEntities[i].m_bIsUsed) {
|
||||
switch(m_asAudioEntities[i].m_nType) {
|
||||
case AUDIOTYPE_PHYSICAL:
|
||||
@ -632,7 +632,7 @@ cAudioManager::DestroyEntity(int32 id)
|
||||
void
|
||||
cAudioManager::DoJumboVolOffset() const
|
||||
{
|
||||
if(!(m_nTimeOfRecentCrime % (m_anRandomTable[0] % 6 + 3))) jumboVolOffset = m_anRandomTable[1] % 60;
|
||||
if(!(m_FrameCounter % (m_anRandomTable[0] % 6 + 3))) jumboVolOffset = m_anRandomTable[1] % 60;
|
||||
}
|
||||
|
||||
uint32
|
||||
@ -2188,7 +2188,7 @@ cAudioManager::GetGenericFemaleTalkSfx(int16 sound)
|
||||
void
|
||||
cAudioManager::GenerateIntegerRandomNumberTable()
|
||||
{
|
||||
for(int32 i = 0; i < 5; i++) { m_anRandomTable[i] = rand(); }
|
||||
for(int32 i = 0; i < ARRAY_SIZE(m_anRandomTable); i++) { m_anRandomTable[i] = rand(); }
|
||||
}
|
||||
|
||||
char *
|
||||
@ -3829,11 +3829,11 @@ cAudioManager::ProcessFrontEnd()
|
||||
}
|
||||
|
||||
if(processedPickup) {
|
||||
if(m_nTimeOfRecentCrime <= cPickupNextFrame) continue;
|
||||
cPickupNextFrame = m_nTimeOfRecentCrime + 5;
|
||||
if(m_FrameCounter <= cPickupNextFrame) continue;
|
||||
cPickupNextFrame = m_FrameCounter + 5;
|
||||
} else if(processedMission) {
|
||||
if(m_nTimeOfRecentCrime <= cPartMisComNextFrame) continue;
|
||||
cPartMisComNextFrame = m_nTimeOfRecentCrime + 5;
|
||||
if(m_FrameCounter <= cPartMisComNextFrame) continue;
|
||||
cPartMisComNextFrame = m_FrameCounter + 5;
|
||||
}
|
||||
|
||||
sample = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i];
|
||||
@ -3874,11 +3874,311 @@ cAudioManager::ProcessFrontEnd()
|
||||
}
|
||||
}
|
||||
|
||||
WRAPPER
|
||||
void
|
||||
cAudioManager::ProcessGarages()
|
||||
{
|
||||
EAXJMP(0x578C20);
|
||||
CEntity *entity;
|
||||
eGarageState state;
|
||||
uint32 sampleIndex;
|
||||
uint8 j;
|
||||
float distSquared;
|
||||
bool distCalculated;
|
||||
|
||||
static uint8 iSound = 32;
|
||||
|
||||
for(uint32 i = 0; i < CGarages::NumGarages; ++i) {
|
||||
if(CGarages::Garages[i].m_eGarageType == GARAGE_NONE) continue;
|
||||
entity = CGarages::Garages[i].m_pDoor1;
|
||||
if(!entity) continue;
|
||||
m_sQueueSample.m_vecPos = entity->GetPosition();
|
||||
distCalculated = false;
|
||||
distSquared = GetDistanceSquared(&m_sQueueSample.m_vecPos);
|
||||
if(distSquared < 6400.f) {
|
||||
state = CGarages::Garages[i].m_eGarageState;
|
||||
if(state == GS_OPENING || state == GS_CLOSING || state == GS_AFTERDROPOFF) {
|
||||
CalculateDistance(distCalculated, distSquared);
|
||||
m_sQueueSample.m_bVolume = ComputeVolume(90u, 80.f, m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_bVolume) {
|
||||
if(CGarages::Garages[i].m_eGarageType == GARAGE_CRUSHER) {
|
||||
if(CGarages::Garages[i].m_eGarageState == GS_AFTERDROPOFF) {
|
||||
if(!(m_FrameCounter & 1)) {
|
||||
for(j = 0;
|
||||
j < m_asAudioEntities[m_sQueueSample.m_nEntityIndex]
|
||||
.m_AudioEvents;
|
||||
++j) {
|
||||
switch(m_asAudioEntities[m_sQueueSample
|
||||
.m_nEntityIndex]
|
||||
.m_awAudioEvent[j]) {
|
||||
case SOUND_GARAGE_DOOR_CLOSED:
|
||||
case SOUND_GARAGE_DOOR_OPENED:
|
||||
if(distSquared < 6400.f) {
|
||||
CalculateDistance(
|
||||
distCalculated,
|
||||
distSquared);
|
||||
m_sQueueSample
|
||||
.m_bVolume = ComputeVolume(
|
||||
60, 80.f,
|
||||
m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_bVolume) {
|
||||
if(CGarages::Garages[i]
|
||||
.m_eGarageType ==
|
||||
GARAGE_CRUSHER) {
|
||||
m_sQueueSample
|
||||
.m_nSampleIndex =
|
||||
SFX_COL_CAR_PANEL_2;
|
||||
m_sQueueSample
|
||||
.m_nFrequency =
|
||||
6735;
|
||||
} else if(
|
||||
m_asAudioEntities
|
||||
[m_sQueueSample
|
||||
.m_nEntityIndex]
|
||||
.m_awAudioEvent
|
||||
[j] ==
|
||||
69) {
|
||||
m_sQueueSample
|
||||
.m_nSampleIndex =
|
||||
SFX_COL_CAR_PANEL_2;
|
||||
m_sQueueSample
|
||||
.m_nFrequency =
|
||||
22000;
|
||||
} else {
|
||||
m_sQueueSample
|
||||
.m_nSampleIndex =
|
||||
SFX_COL_GARAGE_DOOR_1;
|
||||
m_sQueueSample
|
||||
.m_nFrequency =
|
||||
18000;
|
||||
}
|
||||
m_sQueueSample
|
||||
.m_bBankIndex = 0;
|
||||
m_sQueueSample
|
||||
.field_16 = 4;
|
||||
m_sQueueSample
|
||||
.m_bEmittingVolume =
|
||||
60;
|
||||
m_sQueueSample
|
||||
.field_48 = 0.0;
|
||||
m_sQueueSample
|
||||
.m_fSoundIntensity =
|
||||
80.0f;
|
||||
m_sQueueSample
|
||||
.field_16 = 4;
|
||||
m_sQueueSample
|
||||
.m_bReverbFlag = 1;
|
||||
//m_sQueueSample
|
||||
// .m_bReverbFlag = 1;
|
||||
m_sQueueSample
|
||||
.m_bIsDistant = 0;
|
||||
m_sQueueSample
|
||||
.field_56 = 1;
|
||||
m_sQueueSample
|
||||
.m_nLoopCount = 1;
|
||||
m_sQueueSample
|
||||
.m_nLoopStart = 0;
|
||||
m_sQueueSample
|
||||
.m_nLoopEnd = -1;
|
||||
m_sQueueSample
|
||||
.m_counter =
|
||||
iSound++;
|
||||
if(iSound < 32)
|
||||
iSound = 32;
|
||||
m_sQueueSample
|
||||
.m_bRequireReflection =
|
||||
1;
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: continue;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if(m_anRandomTable[1] & 1) {
|
||||
sampleIndex = m_anRandomTable[2] % 5u + SFX_COL_CAR_1;
|
||||
} else {
|
||||
sampleIndex =
|
||||
m_anRandomTable[2] % 6u + SFX_COL_CAR_PANEL_1;
|
||||
}
|
||||
m_sQueueSample.m_nSampleIndex = sampleIndex;
|
||||
m_sQueueSample.m_nFrequency =
|
||||
SampleManager.GetSampleBaseFrequency(
|
||||
m_sQueueSample.m_nSampleIndex) >>
|
||||
1;
|
||||
m_sQueueSample.m_nFrequency +=
|
||||
RandomDisplacement((int32)m_sQueueSample.m_nFrequency >> 4);
|
||||
m_sQueueSample.m_nLoopCount = 1;
|
||||
m_sQueueSample.field_56 = 1;
|
||||
m_sQueueSample.m_counter = iSound++;
|
||||
if(iSound < 32u) iSound = 32;
|
||||
m_sQueueSample.m_bBankIndex = 0;
|
||||
m_sQueueSample.m_bIsDistant = 0;
|
||||
m_sQueueSample.field_16 = 3;
|
||||
m_sQueueSample.m_bEmittingVolume = 90;
|
||||
m_sQueueSample.m_nLoopStart =
|
||||
SampleManager.GetSampleLoopStartOffset(
|
||||
m_sQueueSample.m_nSampleIndex);
|
||||
m_sQueueSample.m_nLoopEnd =
|
||||
SampleManager.GetSampleLoopEndOffset(
|
||||
m_sQueueSample.m_nSampleIndex);
|
||||
m_sQueueSample.field_48 = 2.0;
|
||||
m_sQueueSample.m_fSoundIntensity = 80.0f;
|
||||
m_sQueueSample.m_bReverbFlag = 1;
|
||||
m_sQueueSample.m_bRequireReflection = 0;
|
||||
AddSampleToRequestedQueue();
|
||||
for(j = 0; j < m_asAudioEntities[m_sQueueSample.m_nEntityIndex]
|
||||
.m_AudioEvents;
|
||||
++j) {
|
||||
switch(m_asAudioEntities[m_sQueueSample.m_nEntityIndex]
|
||||
.m_awAudioEvent[j]) {
|
||||
case SOUND_GARAGE_DOOR_CLOSED:
|
||||
case SOUND_GARAGE_DOOR_OPENED:
|
||||
if(distSquared < 6400.f) {
|
||||
CalculateDistance(distCalculated,
|
||||
distSquared);
|
||||
m_sQueueSample.m_bVolume =
|
||||
ComputeVolume(
|
||||
60, 80.f,
|
||||
m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_bVolume) {
|
||||
if(CGarages::Garages[i]
|
||||
.m_eGarageType ==
|
||||
GARAGE_CRUSHER) {
|
||||
m_sQueueSample
|
||||
.m_nSampleIndex =
|
||||
SFX_COL_CAR_PANEL_2;
|
||||
m_sQueueSample
|
||||
.m_nFrequency =
|
||||
6735;
|
||||
} else if(
|
||||
m_asAudioEntities
|
||||
[m_sQueueSample
|
||||
.m_nEntityIndex]
|
||||
.m_awAudioEvent
|
||||
[j] == 69) {
|
||||
m_sQueueSample
|
||||
.m_nSampleIndex =
|
||||
SFX_COL_CAR_PANEL_2;
|
||||
m_sQueueSample
|
||||
.m_nFrequency =
|
||||
22000;
|
||||
} else {
|
||||
m_sQueueSample
|
||||
.m_nSampleIndex =
|
||||
SFX_COL_GARAGE_DOOR_1;
|
||||
m_sQueueSample
|
||||
.m_nFrequency =
|
||||
18000;
|
||||
}
|
||||
m_sQueueSample.m_bBankIndex = 0;
|
||||
m_sQueueSample.field_16 = 4;
|
||||
m_sQueueSample
|
||||
.m_bEmittingVolume = 60;
|
||||
m_sQueueSample.field_48 = 0.0;
|
||||
m_sQueueSample
|
||||
.m_fSoundIntensity = 80.0f;
|
||||
m_sQueueSample.field_16 = 4;
|
||||
m_sQueueSample.m_bReverbFlag =
|
||||
1;
|
||||
//m_sQueueSample.m_bReverbFlag =
|
||||
// 1;
|
||||
m_sQueueSample.m_bIsDistant = 0;
|
||||
m_sQueueSample.field_56 = 1;
|
||||
m_sQueueSample.m_nLoopCount = 1;
|
||||
m_sQueueSample.m_nLoopStart = 0;
|
||||
m_sQueueSample.m_nLoopEnd = -1;
|
||||
m_sQueueSample.m_counter =
|
||||
iSound++;
|
||||
if(iSound < 32) iSound = 32;
|
||||
m_sQueueSample
|
||||
.m_bRequireReflection = 1;
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: continue;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
m_sQueueSample.m_nSampleIndex = SFX_FISHING_BOAT_IDLE;
|
||||
m_sQueueSample.m_nFrequency = 6543;
|
||||
} else {
|
||||
m_sQueueSample.m_nSampleIndex = SFX_GARAGE_DOOR_LOOP;
|
||||
m_sQueueSample.m_nFrequency = 13961;
|
||||
}
|
||||
m_sQueueSample.m_counter = i;
|
||||
m_sQueueSample.m_nLoopCount = 0;
|
||||
m_sQueueSample.field_76 = 3;
|
||||
m_sQueueSample.field_56 = 0;
|
||||
m_sQueueSample.m_bBankIndex = 0;
|
||||
m_sQueueSample.m_bIsDistant = 0;
|
||||
m_sQueueSample.field_16 = 3;
|
||||
m_sQueueSample.m_bEmittingVolume = 90;
|
||||
m_sQueueSample.m_nLoopStart =
|
||||
SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex);
|
||||
m_sQueueSample.m_nLoopEnd =
|
||||
SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex);
|
||||
m_sQueueSample.field_48 = 2.0;
|
||||
m_sQueueSample.m_fSoundIntensity = 80.0f;
|
||||
m_sQueueSample.m_bReverbFlag = 1;
|
||||
m_sQueueSample.m_bRequireReflection = 0;
|
||||
AddSampleToRequestedQueue();
|
||||
for(j = 0; j < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents;
|
||||
++j) {
|
||||
switch(m_asAudioEntities[m_sQueueSample.m_nEntityIndex]
|
||||
.m_awAudioEvent[j]) {
|
||||
case SOUND_GARAGE_DOOR_CLOSED:
|
||||
case SOUND_GARAGE_DOOR_OPENED:
|
||||
if(distSquared < 6400.f) {
|
||||
CalculateDistance(distCalculated, distSquared);
|
||||
m_sQueueSample.m_bVolume =
|
||||
ComputeVolume(60, 80.f, m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_bVolume) {
|
||||
if(CGarages::Garages[i].m_eGarageType ==
|
||||
GARAGE_CRUSHER) {
|
||||
m_sQueueSample.m_nSampleIndex =
|
||||
SFX_COL_CAR_PANEL_2;
|
||||
m_sQueueSample.m_nFrequency = 6735;
|
||||
} else if(m_asAudioEntities[m_sQueueSample
|
||||
.m_nEntityIndex]
|
||||
.m_awAudioEvent[j] == 69) {
|
||||
m_sQueueSample.m_nSampleIndex =
|
||||
SFX_COL_CAR_PANEL_2;
|
||||
m_sQueueSample.m_nFrequency = 22000;
|
||||
} else {
|
||||
m_sQueueSample.m_nSampleIndex =
|
||||
SFX_COL_GARAGE_DOOR_1;
|
||||
m_sQueueSample.m_nFrequency = 18000;
|
||||
}
|
||||
m_sQueueSample.m_bBankIndex = 0;
|
||||
m_sQueueSample.field_16 = 4;
|
||||
m_sQueueSample.m_bEmittingVolume = 60;
|
||||
m_sQueueSample.field_48 = 0.0;
|
||||
m_sQueueSample.m_fSoundIntensity = 80.0f;
|
||||
m_sQueueSample.field_16 = 4;
|
||||
m_sQueueSample.m_bReverbFlag = 1;
|
||||
//m_sQueueSample.m_bReverbFlag = 1;
|
||||
m_sQueueSample.m_bIsDistant = 0;
|
||||
m_sQueueSample.field_56 = 1;
|
||||
m_sQueueSample.m_nLoopCount = 1;
|
||||
m_sQueueSample.m_nLoopStart = 0;
|
||||
m_sQueueSample.m_nLoopEnd = -1;
|
||||
m_sQueueSample.m_counter = iSound++;
|
||||
if(iSound < 32) iSound = 32;
|
||||
m_sQueueSample.m_bRequireReflection = 1;
|
||||
AddSampleToRequestedQueue();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default: continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct tHelicopterSampleData {
|
||||
@ -3902,7 +4202,7 @@ cAudioManager::ProcessHelicopter(cVehicleParams *params)
|
||||
|
||||
CalculateDistance(params->m_bDistanceCalculated, params->m_fDistance);
|
||||
heli = (CHeli *)params->m_pVehicle;
|
||||
for(uint32 i = 0; i < 3; i++) {
|
||||
for(uint32 i = 0; i < ARRAY_SIZE(gHeliSfxRanges); i++) {
|
||||
MaxDist = gHeliSfxRanges[i].m_fMaxDistance;
|
||||
dist = m_sQueueSample.m_fDistance;
|
||||
if(dist >= MaxDist) return true;
|
||||
@ -6290,7 +6590,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams *params, CAutomobile *
|
||||
|
||||
if(transmission->nDriveType == '4') {
|
||||
wheelInUseCounter = 0;
|
||||
for (uint8 i = 0; i < 4; i++){
|
||||
for (uint8 i = 0; i < ARRAY_SIZE(automobile->m_aWheelState); i++){
|
||||
if(automobile->m_aWheelState[i]) ++wheelInUseCounter;
|
||||
}
|
||||
if(wheelInUseCounter > 2) lostTraction = 1;
|
||||
@ -6521,7 +6821,7 @@ cAudioManager::ProcessPoliceCellBeatingScriptObject(uint8 sound)
|
||||
distSquared = GetDistanceSquared(&m_sQueueSample.m_vecPos);
|
||||
if(distSquared < maxDist) {
|
||||
m_sQueueSample.m_fDistance = sqrt(distSquared);
|
||||
if(m_nTimeOfRecentCrime & 1)
|
||||
if(m_FrameCounter & 1)
|
||||
sampleIndex = (m_anRandomTable[1] & 3) + SFX_FIGHT_1;
|
||||
else
|
||||
sampleIndex = (m_anRandomTable[3] & 1) + SFX_BAT_HIT_LEFT;
|
||||
@ -6672,7 +6972,7 @@ cAudioManager::ProcessProjectiles()
|
||||
uint8 emittingVol;
|
||||
float maxDist;
|
||||
|
||||
for(int32 i = 0; i < 32; i++) {
|
||||
for(int32 i = 0; i < NUM_PROJECTILES; i++) {
|
||||
if(CProjectileInfo::GetProjectileInfo(i)->m_bInUse) {
|
||||
switch(CProjectileInfo::GetProjectileInfo(i)->m_eWeaponType) {
|
||||
case WEAPONTYPE_ROCKETLAUNCHER:
|
||||
@ -6921,7 +7221,7 @@ cAudioManager::ProcessShopScriptObject(uint8 sound)
|
||||
}
|
||||
distSquared = GetDistanceSquared(&m_sQueueSample.m_vecPos);
|
||||
if(distSquared < maxDist) {
|
||||
m_sQueueSample.m_fDistance = sqrt(distSquared);
|
||||
m_sQueueSample.m_fDistance = Sqrt(distSquared);
|
||||
m_sQueueSample.m_bVolume =
|
||||
ComputeVolume(30, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_bVolume) {
|
||||
@ -7162,7 +7462,7 @@ cAudioManager::ProcessVehicleDoors(cVehicleParams *params)
|
||||
|
||||
automobile = (CAutomobile *)params->m_pVehicle;
|
||||
CalculateDistance(params->m_bDistanceCalculated, params->m_fDistance);
|
||||
for(int32 i = 0; i < 6; i++) {
|
||||
for(int32 i = 0; i < ARRAY_SIZE(automobile->Doors); i++) {
|
||||
if(automobile->Damage.GetDoorStatus(i) == 2) {
|
||||
doorState = automobile->Doors[i].m_nDoorState;
|
||||
if(doorState == 1 || doorState == 2) {
|
||||
@ -7247,7 +7547,7 @@ cAudioManager::ProcessVehicleHorn(cVehicleParams *params)
|
||||
if(automobile->m_nCarHornTimer > 44) automobile->m_nCarHornTimer = 44;
|
||||
if(automobile->m_nCarHornTimer == 44)
|
||||
automobile->field_22D =
|
||||
(LOBYTE(m_nTimeOfRecentCrime) + LOBYTE(m_sQueueSample.m_nEntityIndex)) & 7;
|
||||
(LOBYTE(m_FrameCounter) + LOBYTE(m_sQueueSample.m_nEntityIndex)) & 7;
|
||||
if(hornPatternsArray[automobile->field_22D][44 - automobile->m_nCarHornTimer]) {
|
||||
CalculateDistance(params->m_bDistanceCalculated, params->m_fDistance);
|
||||
m_sQueueSample.m_bVolume = ComputeVolume(80, 40.f, m_sQueueSample.m_fDistance);
|
||||
@ -7441,7 +7741,7 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams *params)
|
||||
automobile = (CAutomobile *)params->m_pVehicle;
|
||||
if(!automobile->m_nWheelsOnGround) return;
|
||||
CalculateDistance(params->m_bDistanceCalculated, params->m_fDistance);
|
||||
for(int32 i = 0; i < 4; i++) {
|
||||
for(int32 i = 0; i < ARRAY_SIZE(automobile->m_aWheelState); i++) {
|
||||
if(!automobile->m_aWheelState[i] || automobile->Damage.GetWheelStatus(i) == WHEEL_STATUS_MISSING)
|
||||
continue;
|
||||
transmission = params->m_pTransmission;
|
||||
@ -7525,7 +7825,7 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams *params)
|
||||
|
||||
void cAudioManager::ProcessWaterCannon(int32)
|
||||
{
|
||||
for(int32 i = 0; i < 3; i++) {
|
||||
for(int32 i = 0; i < NUM_WATERCANNONS; i++) {
|
||||
if(aCannons[i].m_nId) {
|
||||
m_sQueueSample.m_vecPos = aCannons[0].m_avecPos[aCannons[i].m_wIndex];
|
||||
float distSquared = GetDistanceSquared(&m_sQueueSample.m_vecPos);
|
||||
@ -7807,8 +8107,8 @@ cAudioManager::ServiceSoundEffects()
|
||||
uint32 timeOfRecentCrime;
|
||||
cAudioScriptObject *object;
|
||||
|
||||
timeOfRecentCrime = m_nTimeOfRecentCrime;
|
||||
++m_nTimeOfRecentCrime;
|
||||
timeOfRecentCrime = m_FrameCounter;
|
||||
++m_FrameCounter;
|
||||
if(timeOfRecentCrime % 5)
|
||||
field_2 = 0;
|
||||
else
|
||||
@ -7927,7 +8227,7 @@ cAudioManager::SetupJumboEngineSound(uint8 vol, int32 freq)
|
||||
{
|
||||
if(m_sQueueSample.m_fDistance >= 180.f) return 0;
|
||||
|
||||
uint8 emittingVol = vol - gJumboVolOffsetPercentage % 50;
|
||||
uint8 emittingVol = vol - gJumboVolOffsetPercentage / 100;
|
||||
m_sQueueSample.m_bVolume = ComputeVolume(emittingVol, 180.f, m_sQueueSample.m_fDistance);
|
||||
if(m_sQueueSample.m_bVolume) {
|
||||
m_sQueueSample.m_counter = 3;
|
||||
@ -8206,7 +8506,7 @@ cAudioManager::Terminate()
|
||||
m_nScriptObjectEntityTotal = 0;
|
||||
PreTerminateGameSpecificShutdown();
|
||||
|
||||
for(uint32 i = 0; i < 2; i++) {
|
||||
for(uint32 i = 0; i < DIGITALCHANNELS; i++) {
|
||||
if(SampleManager.IsSampleBankLoaded(i)) SampleManager.UnloadSampleBank(i);
|
||||
}
|
||||
|
||||
@ -8248,11 +8548,11 @@ cAudioManager::UpdateReflections()
|
||||
CColPoint colpoint;
|
||||
CEntity *ent;
|
||||
|
||||
if(m_nTimeOfRecentCrime & 7) {
|
||||
if(((uint8)m_nTimeOfRecentCrime + 1) & 7) {
|
||||
if(((uint8)m_nTimeOfRecentCrime + 2) & 7) {
|
||||
if(((uint8)m_nTimeOfRecentCrime + 3) & 7) {
|
||||
if(!(((uint8)m_nTimeOfRecentCrime + 4) & 7)) {
|
||||
if(m_FrameCounter & 7) {
|
||||
if(((uint8)m_FrameCounter + 1) & 7) {
|
||||
if(((uint8)m_FrameCounter + 2) & 7) {
|
||||
if(((uint8)m_FrameCounter + 3) & 7) {
|
||||
if(!(((uint8)m_FrameCounter + 4) & 7)) {
|
||||
m_avecReflectionsPos[4] = camPos;
|
||||
m_avecReflectionsPos[4].z += 50.f;
|
||||
if(CWorld::ProcessVerticalLine(
|
||||
|
@ -331,10 +331,10 @@ public:
|
||||
uint8 m_bUserPause;
|
||||
uint8 m_bPreviousUserPause;
|
||||
uint8 field_19195; // time?
|
||||
uint32 m_nTimeOfRecentCrime;
|
||||
uint32 m_FrameCounter;
|
||||
|
||||
// getters
|
||||
uint32 GetFrameCounter() const { return m_nTimeOfRecentCrime; }
|
||||
uint32 GetFrameCounter() const { return m_FrameCounter; }
|
||||
float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; }
|
||||
int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[idx]; }
|
||||
bool IsMissionAudioPlaying() const { return m_sMissionAudio.m_bPlayStatus == 1; }
|
||||
@ -508,7 +508,7 @@ public:
|
||||
void ProcessFireHydrant(); /// ok
|
||||
void ProcessFires(int32 entity); /// ok
|
||||
void ProcessFrontEnd(); /// ok
|
||||
void ProcessGarages(); // todo requires CGarages::aGarages
|
||||
void ProcessGarages(); /// ok
|
||||
bool ProcessHelicopter(cVehicleParams *params); /// ok
|
||||
void ProcessHomeScriptObject(uint8 sound); /// ok
|
||||
void ProcessJumbo(cVehicleParams *); /// ok
|
||||
|
@ -91,7 +91,7 @@ cAudioManager::InitialisePoliceRadio()
|
||||
SampleManager.SetChannelReverbFlag(policeChannel, 0);
|
||||
gSpecialSuspectLastSeenReport = false;
|
||||
for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++)
|
||||
gMinTimeToNextReport[i] = m_nTimeOfRecentCrime;
|
||||
gMinTimeToNextReport[i] = m_FrameCounter;
|
||||
}
|
||||
|
||||
void
|
||||
@ -670,7 +670,7 @@ cAudioManager::ReportCrime(int32 type, const CVector *pos)
|
||||
{
|
||||
int32 lastCrime = ARRAY_SIZE(m_sPoliceRadioQueue.crimes);
|
||||
if (m_bIsInitialised && MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE && FindPlayerPed()->m_pWanted->m_nWantedLevel > 0 &&
|
||||
(type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_nTimeOfRecentCrime >= gMinTimeToNextReport[type]) {
|
||||
(type > CRIME_NONE || type < NUM_CRIME_TYPES) && m_FrameCounter >= gMinTimeToNextReport[type]) {
|
||||
for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) {
|
||||
if (m_sPoliceRadioQueue.crimes[i].type) {
|
||||
if (m_sPoliceRadioQueue.crimes[i].type == type) {
|
||||
@ -687,7 +687,7 @@ cAudioManager::ReportCrime(int32 type, const CVector *pos)
|
||||
m_sPoliceRadioQueue.crimes[lastCrime].type = type;
|
||||
m_sPoliceRadioQueue.crimes[lastCrime].position = *pos;
|
||||
m_sPoliceRadioQueue.crimes[lastCrime].timer = 0;
|
||||
gMinTimeToNextReport[type] = m_nTimeOfRecentCrime + 500;
|
||||
gMinTimeToNextReport[type] = m_FrameCounter + 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
enum Config {
|
||||
NUMCDIMAGES = 12, // gta3.img duplicates (not used on PC)
|
||||
MAX_CDIMAGES = 8, // additional cdimages
|
||||
NUMCDIMAGES = 12, // gta3.img duplicates (not used on PC)
|
||||
MAX_CDIMAGES = 8, // additional cdimages
|
||||
MAX_CDCHANNELS = 5,
|
||||
|
||||
MODELINFOSIZE = 5500,
|
||||
@ -20,15 +20,15 @@ enum Config {
|
||||
XTRACOMPSMODELSIZE = 2,
|
||||
TWODFXSIZE = 2000,
|
||||
|
||||
MAXVEHICLESLOADED = 50, // 70 on mobile
|
||||
MAXVEHICLESLOADED = 50, // 70 on mobile
|
||||
|
||||
NUMOBJECTINFO = 168, // object.dat
|
||||
|
||||
// Pool sizes
|
||||
NUMPTRNODES = 30000, // 26000 on PS2
|
||||
NUMENTRYINFOS = 5400, // 3200 on PS2
|
||||
NUMPEDS = 140, // 90 on PS2
|
||||
NUMVEHICLES = 110, // 70 on PS2
|
||||
NUMPEDS = 140, // 90 on PS2
|
||||
NUMVEHICLES = 110, // 70 on PS2
|
||||
NUMBUILDINGS = 5500, // 4915 on PS2
|
||||
NUMTREADABLES = 1214,
|
||||
NUMOBJECTS = 450,
|
||||
@ -92,6 +92,8 @@ enum Config {
|
||||
NUM_GARAGES = 32,
|
||||
NUM_PROJECTILES = 32,
|
||||
|
||||
NUM_WATERCANNONS = 3,
|
||||
|
||||
NUMPEDROUTES = 200,
|
||||
NUMPHONES = 50,
|
||||
NUMPEDGROUPS = 31,
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include "patcher.h"
|
||||
#include "WaterCannon.h"
|
||||
|
||||
CWaterCannon* aCannons = (CWaterCannon*)0x8F2CA8;
|
||||
CWaterCannon (&aCannons)[NUM_WATERCANNONS] = *(CWaterCannon(*)[NUM_WATERCANNONS])*(uintptr*)0x8F2CA8;
|
||||
|
||||
WRAPPER void CWaterCannons::Update(void) { EAXJMP(0x522510); }
|
||||
WRAPPER void CWaterCannons::UpdateOne(uint32 id, CVector *pos, CVector *dir) { EAXJMP(0x522470); }
|
||||
|
@ -22,4 +22,5 @@ public:
|
||||
static void Render(void);
|
||||
};
|
||||
|
||||
extern CWaterCannon *aCannons;
|
||||
extern CWaterCannon (&aCannons)[NUM_WATERCANNONS];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user