Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files
Merge branch 'master' of https://github.com/GTAmodding/re3
  • Loading branch information
theR4K committed Nov 1, 2020
2 parents f5f9b8b + 30d1cbf commit 076fc24e862873ab76269ebb3b00c3ef23e77ae3
Showing with 2,263 additions and 793 deletions.
  1. +1 −1 .appveyor.yml
  2. BIN gamefiles/TEXT/american.gxt
  3. +11 −3 premake5.lua
  4. +23 −52 src/audio/AudioLogic.cpp
  5. +5 −0 src/audio/AudioManager.cpp
  6. +2 −2 src/audio/AudioManager.h
  7. +2 −27 src/audio/DMAudio.cpp
  8. +1 −3 src/audio/DMAudio.h
  9. +1 −1 src/audio/MusicManager.cpp
  10. +10 −10 src/audio/PoliceRadio.cpp
  11. +74 −60 src/audio/oal/channel.cpp
  12. +9 −9 src/audio/oal/channel.h
  13. +10 −10 src/audio/oal/stream.cpp
  14. +5 −5 src/audio/sampman.h
  15. +1 −1 src/audio/sampman_miles.cpp
  16. +691 −160 src/audio/sampman_oal.cpp
  17. +2 −2 src/control/Darkel.cpp
  18. +1 −1 src/control/Garages.cpp
  19. +39 −28 src/control/Pickups.cpp
  20. +2 −3 src/control/Pickups.h
  21. +1 −1 src/control/RoadBlocks.cpp
  22. +9 −5 src/control/Script.cpp
  23. +2 −0 src/core/CdStreamPosix.cpp
  24. +408 −0 src/core/ControllerConfig.cpp
  25. +344 −0 src/core/FileLoader.cpp
  26. +7 −5 src/core/Frontend.cpp
  27. +29 −9 src/core/Game.cpp
  28. +4 −4 src/core/Pad.cpp
  29. +30 −70 src/core/Radar.cpp
  30. +11 −5 src/core/Radar.h
  31. +8 −0 src/core/TempColModels.cpp
  32. +9 −9 src/core/World.cpp
  33. +24 −4 src/core/config.h
  34. +12 −44 src/core/main.cpp
  35. +2 −0 src/core/main.h
  36. +39 −5 src/core/re3.cpp
  37. +8 −1 src/core/timebars.h
  38. +2 −1 src/entities/Entity.h
  39. +13 −13 src/entities/Physical.cpp
  40. +4 −1 src/extras/custompipes.cpp
  41. +3 −0 src/extras/custompipes.h
  42. +18 −0 src/extras/custompipes_d3d9.cpp
  43. +17 −0 src/extras/custompipes_gl.cpp
  44. +8 −0 src/math/Vector.h
  45. +8 −0 src/modelinfo/BaseModelInfo.h
  46. +12 −5 src/modelinfo/ClumpModelInfo.cpp
  47. +14 −32 src/modelinfo/PedModelInfo.cpp
  48. +8 −8 src/objects/Object.cpp
  49. +38 −40 src/peds/Ped.cpp
  50. +1 −1 src/peds/Population.cpp
  51. +2 −2 src/render/Credits.cpp
  52. +6 −2 src/render/Glass.cpp
  53. +31 −31 src/render/Hud.cpp
  54. +7 −6 src/render/Hud.h
  55. +2 −2 src/render/Particle.cpp
  56. +30 −1 src/render/Renderer.cpp
  57. +1 −1 src/render/SpecialFX.cpp
  58. +2 −2 src/render/WaterCannon.cpp
  59. +1 −1 src/render/Weather.cpp
  60. +39 −6 src/rw/RwHelper.cpp
  61. +2 −0 src/rw/RwHelper.h
  62. +9 −0 src/rw/VisibilityPlugins.cpp
  63. +22 −21 src/skel/crossplatform.cpp
  64. +11 −7 src/skel/glfw/glfw.cpp
  65. +15 −3 src/skel/win/win.cpp
  66. +28 −42 src/text/Messages.cpp
  67. +5 −5 src/vehicles/Automobile.cpp
  68. +1 −1 src/vehicles/Boat.cpp
  69. +2 −2 src/vehicles/CarGen.cpp
  70. +1 −1 src/vehicles/Heli.cpp
  71. +3 −3 src/weapons/BulletInfo.cpp
  72. +18 −10 src/weapons/Weapon.cpp
  73. +39 −0 utils/gxt/american.txt
  74. +1 −1 vendor/librw
  75. +1 −1 vendor/ogg
  76. +1 −1 vendor/opusfile
@@ -47,7 +47,7 @@ deploy:
publish: true
on:
branch: master
APPVEYOR_REPO_TAG: false
APPVEYOR_REPO_TAG: true

cache:
- "%GLEW_FILE%"
BIN +404 Bytes (100%) gamefiles/TEXT/american.gxt
Binary file not shown.
@@ -19,6 +19,11 @@ newoption {
default = "vendor/glfw-3.3.2.bin.WIN32",
}

newoption {
trigger = "with-asan",
description = "Build with address sanitizer"
}

newoption {
trigger = "with-librw",
description = "Build and use librw from this solution"
@@ -60,6 +65,11 @@ workspace "re3"
symbols "Full"
staticruntime "off"

if _OPTIONS["with-asan"] then
buildoptions { "-fsanitize=address -g3 -fno-omit-frame-pointer" }
linkoptions { "-fsanitize=address" }
end

filter { "system:windows" }
platforms {
"win-x86-RW33_d3d8-mss",
@@ -330,14 +340,12 @@ project "re3"
links { "rw" }

filter "platforms:*d3d9*"
defines { "USE_D3D9" }
links { "d3d9" }

filter "platforms:*x86*d3d*"
includedirs { "sdk/dx8sdk/include" }
libdirs { "sdk/dx8sdk/lib" }

filter "platforms:*amd64*d3d9*"
defines { "USE_D3D9" }

filter "platforms:win-x86*gl3_glfw*"
libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") }
@@ -1,4 +1,4 @@
#include "common.h"
#include "common.h"

#include "AudioManager.h"
#include "audio_enums.h"
@@ -4107,14 +4107,13 @@ cAudioManager::GetArmyTalkSfx(int16 sound)
PedState pedState;
static uint32 lastSfx = NO_SAMPLE;

switch (sound) {
switch(sound) {
case SOUND_PED_PURSUIT_ARMY:
pedState = FindPlayerPed()->m_nPedState;
if (pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE)
return NO_SAMPLE;
if(pedState == PED_ARRESTED || pedState == PED_DEAD || pedState == PED_DIE) return NO_SAMPLE;
GetPhrase(&sfx, &lastSfx, SFX_ARMY_VOICE_1_CHASE_1, 15);
default:
return GetGenericMaleTalkSfx(sound);
break;
default: return GetGenericMaleTalkSfx(sound);
}

return (SFX_ARMY_VOICE_2_CHASE_1 - SFX_ARMY_VOICE_1_CHASE_1) * (m_sQueueSample.m_nEntityIndex % 2) + sfx;
@@ -4602,32 +4601,16 @@ cAudioManager::GetBlackProjectMaleTalkSfx(int16 sound, int32 model)
uint32 sfx;
static uint32 lastSfx = NO_SAMPLE;

switch (sound) {
case SOUND_PED_HANDS_UP:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_GUN_COOL_1, 3);
break;
case SOUND_PED_CAR_JACKED:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_CARJACKED_1, 2);
break;
case SOUND_PED_ROBBED:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_MUGGED_1, 2);
break;
case SOUND_PED_ATTACK:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_FIGHT_1, 6);
break;
case SOUND_PED_EVADE:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_DODGE_1, 5);
break;
case SOUND_PED_ANNOYED_DRIVER:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_DRIVER_ABUSE_1, 7);
break;
case SOUND_PED_CHAT_SEXY:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_EYING_1, 3);
break;
case SOUND_PED_CHAT:
GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_CHAT_1, 6);
default:
return GetGenericMaleTalkSfx(sound);
switch(sound) {
case SOUND_PED_HANDS_UP: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_GUN_COOL_1, 3); break;
case SOUND_PED_CAR_JACKED: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_CARJACKED_1, 2); break;
case SOUND_PED_ROBBED: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_MUGGED_1, 2); break;
case SOUND_PED_ATTACK: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_FIGHT_1, 6); break;
case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_DODGE_1, 5); break;
case SOUND_PED_ANNOYED_DRIVER: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_DRIVER_ABUSE_1, 7); break;
case SOUND_PED_CHAT_SEXY: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_EYING_1, 3); break;
case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, SFX_BLACK_PROJECT_MALE_VOICE_1_CHAT_1, 6); break;
default: return GetGenericMaleTalkSfx(sound);
}

if (model == MI_P_MAN2)
@@ -4641,26 +4624,14 @@ cAudioManager::GetWhiteFatMaleTalkSfx(int16 sound)
uint32 sfx;
static uint32 lastSfx = NO_SAMPLE;

switch (sound) {
case SOUND_PED_CAR_JACKED:
GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_CARJACKED_1, 3);
break;
case SOUND_PED_ROBBED:
GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_MUGGED_1, 3);
break;
case SOUND_PED_EVADE:
GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_DODGE_1, 9);
break;
case SOUND_PED_ANNOYED_DRIVER:
GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_DRIVER_ABUSE_1, 9);
break;
case SOUND_PED_WAIT_DOUBLEBACK:
GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_LOST_1, 2);
break;
case SOUND_PED_CHAT:
GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_CHAT_1, 9);
default:
return GetGenericMaleTalkSfx(sound);
switch(sound) {
case SOUND_PED_CAR_JACKED: GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_CARJACKED_1, 3); break;
case SOUND_PED_ROBBED: GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_MUGGED_1, 3); break;
case SOUND_PED_EVADE: GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_DODGE_1, 9); break;
case SOUND_PED_ANNOYED_DRIVER: GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_DRIVER_ABUSE_1, 9); break;
case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_LOST_1, 2); break;
case SOUND_PED_CHAT: GetPhrase(&sfx, &lastSfx, SFX_WHITE_FAT_MALE_VOICE_1_CHAT_1, 9); break;
default: return GetGenericMaleTalkSfx(sound);
}
return sfx;
}
@@ -321,8 +321,13 @@ cAudioManager::Get3DProviderName(uint8 id) const
{
if (!m_bIsInitialised)
return nil;
#ifdef AUDIO_OAL
id = clamp(id, 0, SampleManager.GetNum3DProvidersAvailable() - 1);
#else
// We don't want that either since it will crash the game, but skipping for now
if (id >= SampleManager.GetNum3DProvidersAvailable())
return nil;
#endif
return SampleManager.Get3DProviderName(id);
}

@@ -432,15 +432,15 @@ class cAudioManager
void ReleaseDigitalHandle() const;
void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2,
float collisionPower, float intensity2);
void ReportCrime(int32 crime, const CVector *pos);
void ReportCrime(eCrimeType crime, const CVector &pos);
void ResetAudioLogicTimers(uint32 timer);
void ResetPoliceRadio();
void ResetTimers(uint32 time);

void Service();
void ServiceCollisions();
void ServicePoliceRadio();
void ServicePoliceRadioChannel(int32 wantedLevel);
void ServicePoliceRadioChannel(uint8 wantedLevel);
void ServiceSoundEffects();
int8 SetCurrent3DProvider(uint8 which);
void SetDynamicAcousticModelingStatus(uint8 status);
@@ -5,9 +5,6 @@
#include "AudioManager.h"
#include "AudioScriptObject.h"
#include "sampman.h"
#include "Font.h"
#include "Text.h"
#include "crossplatform.h"

cDMAudio DMAudio;

@@ -113,28 +110,6 @@ cDMAudio::Get3DProviderName(uint8 id)
return AudioManager.Get3DProviderName(id);
}

int8 cDMAudio::AutoDetect3DProviders(void)
{
for ( int32 i = 0; i < GetNum3DProvidersAvailable(); i++ )
{
wchar buff[64];

char *name = Get3DProviderName(i);
AsciiToUnicode(name, buff);
char *providername = UnicodeToAscii(buff);
strupr(providername);
#if defined(AUDIO_MSS)
if ( !strcmp(providername, "MILES FAST 2D POSITIONAL AUDIO") )
return i;
#elif defined(AUDIO_OAL)
if ( !strcmp(providername, "OPENAL SOFT") )
return i;
#endif
}

return -1;
}

int8
cDMAudio::GetCurrent3DProviderIndex(void)
{
@@ -198,7 +173,7 @@ cDMAudio::IsAudioInitialised(void)
void
cDMAudio::ReportCrime(eCrimeType crime, const CVector &pos)
{
AudioManager.ReportCrime(crime, &pos);
AudioManager.ReportCrime(crime, pos);
}

int32
@@ -345,7 +320,7 @@ cDMAudio::SetRadioInCar(uint32 radio)
}

void
cDMAudio::SetRadioChannel(int8 radio, int32 pos)
cDMAudio::SetRadioChannel(uint8 radio, int32 pos)
{
MusicManager.SetRadioChannelByScript(radio, pos);
}
@@ -35,8 +35,6 @@ class cDMAudio
uint8 GetNum3DProvidersAvailable(void);
char *Get3DProviderName(uint8 id);

int8 AutoDetect3DProviders(void);

int8 GetCurrent3DProviderIndex(void);
int8 SetCurrent3DProvider(uint8 which);

@@ -86,6 +84,6 @@ class cDMAudio

uint8 GetRadioInCar(void);
void SetRadioInCar(uint32 radio);
void SetRadioChannel(int8 radio, int32 pos);
void SetRadioChannel(uint8 radio, int32 pos);
};
extern cDMAudio DMAudio;
@@ -161,7 +161,7 @@ cMusicManager::DisplayRadioStationName()
CFont::SetPropOn();
CFont::SetFontStyle(FONT_HEADING);
CFont::SetCentreOn();
CFont::SetCentreSize(SCREEN_STRETCH_X(DEFAULT_SCREEN_WIDTH));
CFont::SetCentreSize(SCREEN_SCALE_X(DEFAULT_SCREEN_WIDTH));
CFont::SetColor(CRGBA(0, 0, 0, 255));
CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f), SCREEN_SCALE_Y(22.0f) + SCREEN_SCALE_Y(2.0f), pCurrentStation);

@@ -91,7 +91,7 @@ cAudioManager::InitialisePoliceRadio()
m_sPoliceRadioQueue.policeChannelTimerSeconds = 0;
m_sPoliceRadioQueue.policeChannelCounterSeconds = 0;
for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++)
m_sPoliceRadioQueue.crimes[i].type = 0;
m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE;

SampleManager.SetChannelReverbFlag(policeChannel, 0);
gSpecialSuspectLastSeenReport = false;
@@ -154,16 +154,16 @@ cAudioManager::ServicePoliceRadio()

if(!m_bIsInitialised) return;

if(!m_nUserPause) {
if(m_nUserPause == 0) {
bool crimeReport = SetupCrimeReport();
#ifdef FIX_BUGS // Crash at 0x5fe6ef
if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted)
return;
#endif
wantedLevel = FindPlayerPed()->m_pWanted->m_nWantedLevel;
if(!crimeReport) {
if(wantedLevel) {
if(nLastSeen) {
if(wantedLevel != 0) {
if(nLastSeen != 0) {
--nLastSeen;
} else {
nLastSeen = m_anRandomTable[1] % 1000 + 2000;
@@ -176,7 +176,7 @@ cAudioManager::ServicePoliceRadio()
}

void
cAudioManager::ServicePoliceRadioChannel(int32 wantedLevel)
cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel)
{
bool processed = false;
uint32 sample;
@@ -189,7 +189,7 @@ cAudioManager::ServicePoliceRadioChannel(int32 wantedLevel)

if (!m_bIsInitialised) return;

if (m_nUserPause) {
if (m_nUserPause != 0) {
if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel);
if (g_nMissionAudioSfx != TOTAL_AUDIO_SAMPLES && bMissionAudioPhysicalPlayingStatus == 1 &&
SampleManager.IsStreamPlaying(1)) {
@@ -241,7 +241,7 @@ cAudioManager::ServicePoliceRadioChannel(int32 wantedLevel)
} else {
sample = TOTAL_AUDIO_SAMPLES;
}
if (!wantedLevel) {
if (wantedLevel == 0) {
if (gSpecialSuspectLastSeenReport) {
gSpecialSuspectLastSeenReport = 0;
} else if (((sample >= SFX_POLICE_RADIO_MESSAGE_NOISE_1) && (sample <= SFX_POLICE_RADIO_MESSAGE_NOISE_3)) || sample == TOTAL_AUDIO_SAMPLES) {
@@ -675,15 +675,15 @@ cAudioManager::SetupSuspectLastSeenReport()


void
cAudioManager::ReportCrime(int32 type, const CVector *pos)
cAudioManager::ReportCrime(eCrimeType 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_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) {
m_sPoliceRadioQueue.crimes[i].position = *pos;
m_sPoliceRadioQueue.crimes[i].position = pos;
m_sPoliceRadioQueue.crimes[i].timer = 0;
return;
}
@@ -694,7 +694,7 @@ cAudioManager::ReportCrime(int32 type, const CVector *pos)

if (lastCrime < ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) {
m_sPoliceRadioQueue.crimes[lastCrime].type = type;
m_sPoliceRadioQueue.crimes[lastCrime].position = *pos;
m_sPoliceRadioQueue.crimes[lastCrime].position = pos;
m_sPoliceRadioQueue.crimes[lastCrime].timer = 0;
gMinTimeToNextReport[type] = m_FrameCounter + 500;
}

0 comments on commit 076fc24

Please sign in to comment.