diff --git a/.gitignore b/.gitignore index 896276a4..70bb8361 100644 --- a/.gitignore +++ b/.gitignore @@ -355,6 +355,7 @@ vendor/glfw-3.3.2.bin.WIN64/ sdk/ +codewarrior/reVC.mcp codewarrior/reVC_Data/ codewarrior/Release/ codewarrior/Debug/ diff --git a/README.md b/README.md index c603466f..4772190e 100644 --- a/README.md +++ b/README.md @@ -14,29 +14,29 @@ To build the channel edit `CHANNEL_BUILD := 0` to `CHANNEL_BUILD := 1` in the `M # Original README [![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmiami&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=miami) - + ## Intro In this repository you'll find the fully reversed source code for GTA III ([master](https://github.com/GTAmodding/re3/tree/master/) branch) and GTA VC ([miami](https://github.com/GTAmodding/re3/tree/miami/) branch). -It has been tested and works on Windows, Linux and FreeBSD, on x86, amd64, arm and arm64.\ +It has been tested and works on Windows, Linux, MacOS and FreeBSD, on x86, amd64, arm and arm64.\ Rendering is handled either by original RenderWare (D3D8) or the reimplementation [librw](https://github.com/aap/librw) (D3D9, OpenGL 2.1 or above, OpenGL ES 2.0 or above).\ Audio is done with MSS (using dlls from original GTA) or OpenAL. We cannot build for PS2 or Xbox yet. If you're interested in doing so, get in touch with us. -## How can I try it? +## Installation - reVC requires game assets to work, so you **must** own [a copy of GTA Vice City](https://store.steampowered.com/app/12110/Grand_Theft_Auto_Vice_City/). -- Build reVC or download the latest nightly build: +- Build reVC or download the latest build: - [Windows D3D9 MSS 32bit](https://nightly.link/GTAmodding/re3/workflows/reVC_msvc_x86/miami/reVC_Release_win-x86-librw_d3d9-mss.zip) - [Windows D3D9 64bit](https://nightly.link/GTAmodding/re3/workflows/reVC_msvc_amd64/miami/reVC_Release_win-amd64-librw_d3d9-oal.zip) - [Windows OpenGL 64bit](https://nightly.link/GTAmodding/re3/workflows/reVC_msvc_amd64/miami/reVC_Release_win-amd64-librw_gl3_glfw-oal.zip) - - [Linux 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/miami/ubuntu-latest-gl3.zip) - - [MacOS 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/miami/macos-latest-gl3.zip) -- Extract the downloaded zip over your GTA VC directory and run reVC. The zip includes the gamefiles and in case of OpenAL the required dlls. + - [Linux 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/miami/ubuntu-18.04-gl3.zip) + - [MacOS 64bit x86-64](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/miami/macos-latest-gl3.zip) +- Extract the downloaded zip over your GTA VC directory and run reVC. The zip includes the binary, updated and additional gamefiles and in case of OpenAL the required dlls. ## Screenshots @@ -120,6 +120,12 @@ conan build .. -if build -bf build -pf package ``` +
MacOS Premake + +For MacOS using premake, proceed: [Building on MacOS](https://github.com/GTAmodding/re3/wiki/Building-on-MacOS) + +
+
FreeBSD For FreeBSD using premake, proceed: [Building on FreeBSD](https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD) @@ -137,7 +143,7 @@ Microsoft recently discontinued its downloads of the DX9 SDK. You can download a **If you choose OpenAL on Windows** You must read [Running OpenAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows).
-> :information_source: premake has an `--lto` option if you want the project to be compiled with Link Time Optimization. +> :information_source: premake has an `--with-lto` option if you want the project to be compiled with Link Time Optimization. > :information_source: There are various settings in [config.h](https://github.com/GTAmodding/re3/tree/miami/src/core/config.h), you may want to take a look there. diff --git a/codewarrior/reVC.mcp b/codewarrior/reVC.mcp deleted file mode 100644 index 00b3fd74..00000000 Binary files a/codewarrior/reVC.mcp and /dev/null differ diff --git a/codewarrior/reVC.mcp.xml b/codewarrior/reVC.mcp.xml new file mode 100644 index 00000000..92638894 --- /dev/null +++ b/codewarrior/reVC.mcp.xml @@ -0,0 +1,16066 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]> + + + + + Debug + + + + UserSourceTrees + + + AlwaysSearchUserPathsfalse + InterpretDOSAndUnixPathstrue + RequireFrameworkStyleIncludesfalse + UserSearchPaths + + SearchPath + Path + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\animation + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\audio + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\buildings + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\collision + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\control + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\core + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\entities + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\math + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\modelinfo + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\objects + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\peds + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\render + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\rw + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\save + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\skel + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\text + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\vehicles + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\weapons + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\vendor\milessdk\lib + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\vendor\milessdk\include + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\dx8sdk\Lib + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\rwsdk\lib\d3d8\release + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\rwsdk\include\d3d8 + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\extras + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SystemSearchPaths + + SearchPath + Path..\sdk\rwsdk\include\d3d8 + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\dx8sdk\Include + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + PathWin32-x86 Support\Headers\ + PathFormatWindows + PathRootCodeWarrior + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + PathWin32-x86 Support\Libraries\ + PathFormatWindows + PathRootCodeWarrior + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + PathMSL + PathFormatWindows + PathRootCodeWarrior + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\audio\eax + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + + + MWRuntimeSettings_WorkingDirectory + MWRuntimeSettings_CommandLine + MWRuntimeSettings_HostApplication + Path + PathFormatGeneric + PathRootAbsolute + + MWRuntimeSettings_EnvVars + + + LinkerWin32 x86 Linker + PreLinker + PostLinker + TargetnameDebug + OutputDirectory + Path + PathFormatWindows + PathRootProject + + SaveEntriesUsingRelativePathsfalse + + + FileMappings + + FileTypeTEXT + FileExtension.c + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.c++ + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.cc + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.cp + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.cpp + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.def + Compiler + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.h + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMaketrue + + + FileTypeTEXT + FileExtension.p + CompilerMW Pascal x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.pas + CompilerMW Pascal x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.pch + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompiletrue + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.pch++ + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompiletrue + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.ppu + CompilerMW Pascal x86 + EditLanguage + Precompiletrue + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.rc + CompilerMW WinRC + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.res + CompilerWinRes Import + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileExtension.doc + Compiler + EditLanguage + Precompilefalse + Launchabletrue + ResourceFilefalse + IgnoredByMaketrue + + + FileExtension.lib + CompilerLib Import x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileExtension.obj + CompilerObj Import x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileExtension.res + CompilerWinRes Import + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + + + CacheModDatestrue + ActivateBrowsertrue + DumpBrowserInfofalse + CacheSubprojectstrue + UseThirdPartyDebuggerfalse + DebuggerAppPath + Path + PathFormatGeneric + PathRootAbsolute + + DebuggerCmdLineArgs + DebuggerWorkingDir + Path + PathFormatGeneric + PathRootAbsolute + + + + LogSystemMessagesfalse + AutoTargetDLLsfalse + StopAtWatchpointstrue + PauseWhileRunningfalse + PauseInterval5 + PauseUIFlags0 + AltExePath + Path + PathFormatGeneric + PathRootAbsolute + + StopAtTempBPOnLaunchtrue + CacheSymbolicstrue + TempBPFunctionNamemain + TempBPType0 + + + Enabledfalse + ConnectionName + DownloadPath + LaunchRemoteAppfalse + RemoteAppPath + + + OtherExecutables + + + CustomColor1 + Red0 + Green32767 + Blue0 + + CustomColor2 + Red0 + Green32767 + Blue0 + + CustomColor3 + Red0 + Green32767 + Blue0 + + CustomColor4 + Red0 + Green32767 + Blue0 + + + + MWCodeGen_X86_processorPentiumII + MWCodeGen_X86_alignmentbytes8 + MWCodeGen_X86_exceptionsZeroOverhead + MWCodeGen_X86_extinst_mmx0 + MWCodeGen_X86_extinst_3dnow0 + MWCodeGen_X86_use_mmx_3dnow_convention0 + MWCodeGen_X86_machinecodelisting0 + MWCodeGen_X86_intrinsics0 + MWCodeGen_X86_syminfo0 + MWCodeGen_X86_codeviewinfo1 + MWCodeGen_X86_extinst_cmov_fcomi0 + MWCodeGen_X86_extinst_sse0 + + + MWDebugger_X86_Exceptions + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + PDisasmX86_showHeaderstrue + PDisasmX86_showSymTabtrue + PDisasmX86_showCodetrue + PDisasmX86_showSourcefalse + PDisasmX86_showHextrue + PDisasmX86_showRelocationtrue + PDisasmX86_showCommentsfalse + PDisasmX86_showDebugfalse + PDisasmX86_showExceptionsfalse + PDisasmX86_showDatatrue + PDisasmX86_showRawfalse + PDisasmX86_verbosefalse + + + MWFrontEnd_C_cplusplus1 + MWFrontEnd_C_checkprotos0 + MWFrontEnd_C_arm0 + MWFrontEnd_C_trigraphs0 + MWFrontEnd_C_onlystdkeywords0 + MWFrontEnd_C_enumsalwaysint1 + MWFrontEnd_C_mpwpointerstyle0 + MWFrontEnd_C_prefixname + MWFrontEnd_C_ansistrict0 + MWFrontEnd_C_mpwcnewline0 + MWFrontEnd_C_wchar_type1 + MWFrontEnd_C_enableexceptions1 + MWFrontEnd_C_dontreusestrings0 + MWFrontEnd_C_poolstrings1 + MWFrontEnd_C_dontinline1 + MWFrontEnd_C_useRTTI1 + MWFrontEnd_C_multibyteaware1 + MWFrontEnd_C_unsignedchars0 + MWFrontEnd_C_autoinline0 + MWFrontEnd_C_booltruefalse1 + MWFrontEnd_C_direct_to_som0 + MWFrontEnd_C_som_env_check0 + MWFrontEnd_C_alwaysinline0 + MWFrontEnd_C_inlinelevel0 + MWFrontEnd_C_ecplusplus0 + MWFrontEnd_C_objective_c0 + MWFrontEnd_C_defer_codegen0 + + + MWLinker_X86_entrypointusageDefault + MWLinker_X86_entrypoint + MWLinker_X86_subsystemWinGUI + MWLinker_X86_subsysmajorid4 + MWLinker_X86_subsysminorid0 + MWLinker_X86_usrmajorid0 + MWLinker_X86_usrminorid0 + MWLinker_X86_commandfile + MWLinker_X86_generatemap0 + MWLinker_X86_linksym0 + MWLinker_X86_linkCV1 + + + MWProject_X86_typeApplication + MWProject_X86_outfileDebug\gta-vc.exe + MWProject_X86_baseaddress4194304 + MWProject_X86_maxstacksize1024 + MWProject_X86_minstacksize4 + MWProject_X86_size1024 + MWProject_X86_minsize4 + MWProject_X86_importlib + + + MWWarning_C_warn_illpragma0 + MWWarning_C_warn_emptydecl0 + MWWarning_C_warn_possunwant1 + MWWarning_C_warn_unusedvar1 + MWWarning_C_warn_unusedarg0 + MWWarning_C_warn_extracomma1 + MWWarning_C_pedantic0 + MWWarning_C_warningerrors0 + MWWarning_C_warn_hidevirtual1 + MWWarning_C_warn_implicitconv0 + MWWarning_C_warn_notinlined0 + MWWarning_C_warn_structclass0 + + + MWWinRC_prefixnameResourcePrefix.h + + + GlobalOptimizer_X86__optimizationlevelLevel0 + GlobalOptimizer_X86__optforSize + + + + Name + Comdlg32.lib + MacOS + Library + + + + Name + Gdi32.lib + MacOS + Library + + + + Name + Kernel32.lib + MacOS + Library + + + + Name + User32.lib + MacOS + Library + + + + Name + MSL_All_x86_D.lib + MacOS + Unknown + Debug + + + Name + mss32.lib + Windows + Library + Debug + + + Name + d3d8.lib + Windows + Library + Debug + + + Name + ddraw.lib + Windows + Library + Debug + + + Name + dxguid.lib + Windows + Library + Debug + + + Name + strmiids.lib + Windows + Library + Debug + + + Name + dinput8.lib + Windows + Library + Debug + + + Name + winmm.lib + Windows + Library + Debug + + + Name + rwcore.lib + Windows + Library + Debug + + + Name + rpworld.lib + Windows + Library + Debug + + + Name + rpmatfx.lib + Windows + Library + Debug + + + Name + rpskin.lib + Windows + Library + Debug + + + Name + rphanim.lib + Windows + Library + Debug + + + Name + rtbmp.lib + Windows + Library + Debug + + + Name + rtquat.lib + Windows + Library + Debug + + + Name + rtcharse.lib + Windows + Library + Debug + + + Name + ole32.lib + Windows + Library + Debug + + + Name + shell32.lib + Windows + Library + Debug + + + Name + uuid.lib + Windows + Library + Debug + + + Name + rtanim.lib + Windows + Library + Debug + + + Name + rpanisot.lib + Windows + Library + Debug + + + Name + AnimationId.h + Windows + Text + + + + Name + AnimBlendAssocGroup.cpp + Windows + Text + Debug + + + Name + AnimBlendAssocGroup.h + Windows + Text + + + + Name + AnimBlendAssociation.cpp + Windows + Text + Debug + + + Name + AnimBlendAssociation.h + Windows + Text + + + + Name + AnimBlendClumpData.cpp + Windows + Text + Debug + + + Name + AnimBlendClumpData.h + Windows + Text + + + + Name + AnimBlendHierarchy.cpp + Windows + Text + Debug + + + Name + AnimBlendHierarchy.h + Windows + Text + + + + Name + AnimBlendList.h + Windows + Text + + + + Name + AnimBlendNode.cpp + Windows + Text + Debug + + + Name + AnimBlendNode.h + Windows + Text + + + + Name + AnimBlendSequence.cpp + Windows + Text + Debug + + + Name + AnimBlendSequence.h + Windows + Text + + + + Name + AnimManager.cpp + Windows + Text + Debug + + + Name + AnimManager.h + Windows + Text + + + + Name + Bones.cpp + Windows + Text + Debug + + + Name + Bones.h + Windows + Text + + + + Name + CutsceneMgr.cpp + Windows + Text + Debug + + + Name + CutsceneMgr.h + Windows + Text + + + + Name + FrameUpdate.cpp + Windows + Text + Debug + + + Name + RpAnimBlend.cpp + Windows + Text + Debug + + + Name + RpAnimBlend.h + Windows + Text + + + + Name + audio_enums.h + Windows + Text + + + + Name + AudioCollision.cpp + Windows + Text + Debug + + + Name + AudioCollision.h + Windows + Text + + + + Name + AudioLogic.cpp + Windows + Text + + + + Name + AudioManager.cpp + Windows + Text + Debug + + + Name + AudioManager.h + Windows + Text + + + + Name + AudioSamples.h + Windows + Text + + + + Name + AudioScriptObject.cpp + Windows + Text + Debug + + + Name + AudioScriptObject.h + Windows + Text + + + + Name + DMAudio.cpp + Windows + Text + Debug + + + Name + DMAudio.h + Windows + Text + + + + Name + MusicManager.cpp + Windows + Text + Debug + + + Name + MusicManager.h + Windows + Text + + + + Name + PolRadio.cpp + Windows + Text + Debug + + + Name + PolRadio.h + Windows + Text + + + + Name + sampman.h + Windows + Text + + + + Name + sampman_miles.cpp + Windows + Text + Debug + + + Name + soundlist.h + Windows + Text + + + + Name + eax.h + Windows + Text + + + + Name + eax-util.cpp + Windows + Text + Debug + + + Name + eax-util.h + Windows + Text + + + + Name + Building.cpp + Windows + Text + Debug + + + Name + Building.h + Windows + Text + + + + Name + Solid.h + Windows + Text + + + + Name + Treadable.cpp + Windows + Text + Debug + + + Name + Treadable.h + Windows + Text + + + + Name + ColBox.cpp + Windows + Text + Debug + + + Name + ColBox.h + Windows + Text + + + + Name + ColLine.cpp + Windows + Text + Debug + + + Name + ColLine.h + Windows + Text + + + + Name + Collision.cpp + Windows + Text + Debug + + + Name + Collision.h + Windows + Text + + + + Name + ColModel.cpp + Windows + Text + Debug + + + Name + ColModel.h + Windows + Text + + + + Name + ColPoint.cpp + Windows + Text + Debug + + + Name + ColPoint.h + Windows + Text + + + + Name + ColSphere.cpp + Windows + Text + Debug + + + Name + ColSphere.h + Windows + Text + + + + Name + ColStore.cpp + Windows + Text + Debug + + + Name + ColStore.h + Windows + Text + + + + Name + ColTriangle.cpp + Windows + Text + Debug + + + Name + ColTriangle.h + Windows + Text + + + + Name + CompressedVector.h + Windows + Text + + + + Name + TempColModels.cpp + Windows + Text + Debug + + + Name + TempColModels.h + Windows + Text + + + + Name + VuCollision.cpp + Windows + Text + Debug + + + Name + VuCollision.h + Windows + Text + + + + Name + AutoPilot.cpp + Windows + Text + Debug + + + Name + AutoPilot.h + Windows + Text + + + + Name + Bridge.cpp + Windows + Text + Debug + + + Name + Bridge.h + Windows + Text + + + + Name + CarAI.cpp + Windows + Text + Debug + + + Name + CarAI.h + Windows + Text + + + + Name + CarCtrl.cpp + Windows + Text + Debug + + + Name + CarCtrl.h + Windows + Text + + + + Name + Curves.cpp + Windows + Text + Debug + + + Name + Curves.h + Windows + Text + + + + Name + Darkel.cpp + Windows + Text + Debug + + + Name + Darkel.h + Windows + Text + + + + Name + GameLogic.cpp + Windows + Text + Debug + + + Name + GameLogic.h + Windows + Text + + + + Name + Garages.cpp + Windows + Text + Debug + + + Name + Garages.h + Windows + Text + + + + Name + NameGrid.cpp + Windows + Text + Debug + + + Name + NameGrid.h + Windows + Text + + + + Name + OnscreenTimer.cpp + Windows + Text + Debug + + + Name + OnscreenTimer.h + Windows + Text + + + + Name + PathFind.cpp + Windows + Text + Debug + + + Name + PathFind.h + Windows + Text + + + + Name + Phones.cpp + Windows + Text + Debug + + + Name + Phones.h + Windows + Text + + + + Name + Pickups.cpp + Windows + Text + Debug + + + Name + Pickups.h + Windows + Text + + + + Name + PowerPoints.cpp + Windows + Text + Debug + + + Name + PowerPoints.h + Windows + Text + + + + Name + Record.cpp + Windows + Text + Debug + + + Name + Record.h + Windows + Text + + + + Name + Remote.cpp + Windows + Text + Debug + + + Name + Remote.h + Windows + Text + + + + Name + Replay.cpp + Windows + Text + Debug + + + Name + Replay.h + Windows + Text + + + + Name + Restart.cpp + Windows + Text + Debug + + + Name + Restart.h + Windows + Text + + + + Name + RoadBlocks.cpp + Windows + Text + Debug + + + Name + RoadBlocks.h + Windows + Text + + + + Name + SceneEdit.cpp + Windows + Text + Debug + + + Name + SceneEdit.h + Windows + Text + + + + Name + Script.cpp + Windows + Text + Debug + + + Name + Script.h + Windows + Text + + + + Name + Script2.cpp + Windows + Text + Debug + + + Name + Script3.cpp + Windows + Text + Debug + + + Name + Script4.cpp + Windows + Text + Debug + + + Name + Script5.cpp + Windows + Text + Debug + + + Name + Script6.cpp + Windows + Text + Debug + + + Name + Script7.cpp + Windows + Text + Debug + + + Name + Script8.cpp + Windows + Text + Debug + + + Name + ScriptCommands.h + Windows + Text + + + + Name + SetPieces.cpp + Windows + Text + Debug + + + Name + SetPieces.h + Windows + Text + + + + Name + TrafficLights.cpp + Windows + Text + Debug + + + Name + TrafficLights.h + Windows + Text + + + + Name + Accident.cpp + Windows + Text + Debug + + + Name + Accident.h + Windows + Text + + + + Name + AnimViewer.cpp + Windows + Text + Debug + + + Name + AnimViewer.h + Windows + Text + + + + Name + Cam.cpp + Windows + Text + Debug + + + Name + Camera.cpp + Windows + Text + Debug + + + Name + Camera.h + Windows + Text + + + + Name + CdStream.cpp + Windows + Text + Debug + + + Name + CdStream.h + Windows + Text + + + + Name + CdStreamPosix.cpp + Windows + Text + Debug + + + Name + Clock.cpp + Windows + Text + Debug + + + Name + Clock.h + Windows + Text + + + + Name + common.h + Windows + Text + + + + Name + config.h + Windows + Text + + + + Name + ControllerConfig.cpp + Windows + Text + Debug + + + Name + ControllerConfig.h + Windows + Text + + + + Name + Crime.h + Windows + Text + + + + Name + Debug.cpp + Windows + Text + Debug + + + Name + Debug.h + Windows + Text + + + + Name + Directory.cpp + Windows + Text + Debug + + + Name + Directory.h + Windows + Text + + + + Name + EventList.cpp + Windows + Text + Debug + + + Name + EventList.h + Windows + Text + + + + Name + FileLoader.cpp + Windows + Text + Debug + + + Name + FileLoader.h + Windows + Text + + + + Name + FileMgr.cpp + Windows + Text + Debug + + + Name + FileMgr.h + Windows + Text + + + + Name + Fire.cpp + Windows + Text + Debug + + + Name + Fire.h + Windows + Text + + + + Name + Frontend.cpp + Windows + Text + Debug + + + Name + Frontend.h + Windows + Text + + + + Name + Frontend_PS2.cpp + Windows + Text + Debug + + + Name + Frontend_PS2.h + Windows + Text + + + + Name + FrontEndControls.cpp + Windows + Text + Debug + + + Name + FrontEndControls.h + Windows + Text + + + + Name + FrontendTriggers.h + Windows + Text + + + + Name + Game.cpp + Windows + Text + Debug + + + Name + Game.h + Windows + Text + + + + Name + General.h + Windows + Text + + + + Name + IniFile.cpp + Windows + Text + Debug + + + Name + IniFile.h + Windows + Text + + + + Name + Lists.cpp + Windows + Text + Debug + + + Name + Lists.h + Windows + Text + + + + Name + main.cpp + Windows + Text + Debug + + + Name + main.h + Windows + Text + + + + Name + MenuScreens.cpp + Windows + Text + Debug + + + Name + MenuScreensCustom.cpp + Windows + Text + Debug + + + Name + obrstr.cpp + Windows + Text + Debug + + + Name + obrstr.h + Windows + Text + + + + Name + Pad.cpp + Windows + Text + Debug + + + Name + Pad.h + Windows + Text + + + + Name + Placeable.cpp + Windows + Text + Debug + + + Name + Placeable.h + Windows + Text + + + + Name + PlayerInfo.cpp + Windows + Text + Debug + + + Name + PlayerInfo.h + Windows + Text + + + + Name + Pools.cpp + Windows + Text + Debug + + + Name + Pools.h + Windows + Text + + + + Name + Profile.cpp + Windows + Text + Debug + + + Name + Profile.h + Windows + Text + + + + Name + Radar.cpp + Windows + Text + Debug + + + Name + Radar.h + Windows + Text + + + + Name + Range2D.cpp + Windows + Text + Debug + + + Name + Range2D.h + Windows + Text + + + + Name + Range3D.cpp + Windows + Text + Debug + + + Name + Range3D.h + Windows + Text + + + + Name + re3.cpp + Windows + Text + Debug + + + Name + References.cpp + Windows + Text + Debug + + + Name + References.h + Windows + Text + + + + Name + Ropes.cpp + Windows + Text + Debug + + + Name + Ropes.h + Windows + Text + + + + Name + Stats.cpp + Windows + Text + Debug + + + Name + Stats.h + Windows + Text + + + + Name + Streaming.cpp + Windows + Text + Debug + + + Name + Streaming.h + Windows + Text + + + + Name + SurfaceTable.cpp + Windows + Text + Debug + + + Name + SurfaceTable.h + Windows + Text + + + + Name + templates.h + Windows + Text + + + + Name + timebars.cpp + Windows + Text + Debug + + + Name + timebars.h + Windows + Text + + + + Name + Timer.cpp + Windows + Text + Debug + + + Name + Timer.h + Windows + Text + + + + Name + TimeStep.cpp + Windows + Text + Debug + + + Name + TimeStep.h + Windows + Text + + + + Name + User.cpp + Windows + Text + Debug + + + Name + User.h + Windows + Text + + + + Name + Wanted.cpp + Windows + Text + Debug + + + Name + Wanted.h + Windows + Text + + + + Name + World.cpp + Windows + Text + Debug + + + Name + World.h + Windows + Text + + + + Name + ZoneCull.cpp + Windows + Text + Debug + + + Name + ZoneCull.h + Windows + Text + + + + Name + Zones.cpp + Windows + Text + Debug + + + Name + Zones.h + Windows + Text + + + + Name + Dummy.cpp + Windows + Text + Debug + + + Name + Dummy.h + Windows + Text + + + + Name + Entity.cpp + Windows + Text + Debug + + + Name + Entity.h + Windows + Text + + + + Name + Physical.cpp + Windows + Text + Debug + + + Name + Physical.h + Windows + Text + + + + Name + math.cpp + Windows + Text + Debug + + + Name + maths.h + Windows + Text + + + + Name + Matrix.cpp + Windows + Text + Debug + + + Name + Matrix.h + Windows + Text + + + + Name + Quaternion.cpp + Windows + Text + Debug + + + Name + Quaternion.h + Windows + Text + + + + Name + Rect.cpp + Windows + Text + Debug + + + Name + Rect.h + Windows + Text + + + + Name + Vector.cpp + Windows + Text + Debug + + + Name + Vector.h + Windows + Text + + + + Name + Vector2D.h + Windows + Text + + + + Name + VuVector.h + Windows + Text + + + + Name + BaseModelInfo.cpp + Windows + Text + Debug + + + Name + BaseModelInfo.h + Windows + Text + + + + Name + ClumpModelInfo.cpp + Windows + Text + Debug + + + Name + ClumpModelInfo.h + Windows + Text + + + + Name + ModelIndices.cpp + Windows + Text + Debug + + + Name + ModelIndices.h + Windows + Text + + + + Name + ModelInfo.cpp + Windows + Text + Debug + + + Name + ModelInfo.h + Windows + Text + + + + Name + PedModelInfo.cpp + Windows + Text + Debug + + + Name + PedModelInfo.h + Windows + Text + + + + Name + SimpleModelInfo.cpp + Windows + Text + Debug + + + Name + SimpleModelInfo.h + Windows + Text + + + + Name + TimeModelInfo.cpp + Windows + Text + Debug + + + Name + TimeModelInfo.h + Windows + Text + + + + Name + VehicleModelInfo.cpp + Windows + Text + Debug + + + Name + VehicleModelInfo.h + Windows + Text + + + + Name + WeaponModelInfo.cpp + Windows + Text + Debug + + + Name + WeaponModelInfo.h + Windows + Text + + + + Name + CutsceneObject.cpp + Windows + Text + Debug + + + Name + CutsceneObject.h + Windows + Text + + + + Name + DummyObject.cpp + Windows + Text + Debug + + + Name + DummyObject.h + Windows + Text + + + + Name + Object.cpp + Windows + Text + Debug + + + Name + Object.h + Windows + Text + + + + Name + ObjectData.cpp + Windows + Text + Debug + + + Name + ObjectData.h + Windows + Text + + + + Name + ParticleObject.cpp + Windows + Text + Debug + + + Name + ParticleObject.h + Windows + Text + + + + Name + Projectile.cpp + Windows + Text + Debug + + + Name + Projectile.h + Windows + Text + + + + Name + Stinger.cpp + Windows + Text + Debug + + + Name + Stinger.h + Windows + Text + + + + Name + CivilianPed.cpp + Windows + Text + Debug + + + Name + CivilianPed.h + Windows + Text + + + + Name + CopPed.cpp + Windows + Text + Debug + + + Name + CopPed.h + Windows + Text + + + + Name + DummyPed.h + Windows + Text + + + + Name + EmergencyPed.cpp + Windows + Text + Debug + + + Name + EmergencyPed.h + Windows + Text + + + + Name + Gangs.cpp + Windows + Text + Debug + + + Name + Gangs.h + Windows + Text + + + + Name + Ped.cpp + Windows + Text + Debug + + + Name + Ped.h + Windows + Text + + + + Name + PedAI.cpp + Windows + Text + Debug + + + Name + PedAttractor.cpp + Windows + Text + Debug + + + Name + PedAttractor.h + Windows + Text + + + + Name + PedChat.cpp + Windows + Text + Debug + + + Name + PedDebug.cpp + Windows + Text + Debug + + + Name + PedFight.cpp + Windows + Text + Debug + + + Name + PedIK.cpp + Windows + Text + Debug + + + Name + PedIK.h + Windows + Text + + + + Name + PedPlacement.cpp + Windows + Text + Debug + + + Name + PedPlacement.h + Windows + Text + + + + Name + PedRoutes.cpp + Windows + Text + Debug + + + Name + PedRoutes.h + Windows + Text + + + + Name + PedType.cpp + Windows + Text + Debug + + + Name + PedType.h + Windows + Text + + + + Name + PlayerPed.cpp + Windows + Text + Debug + + + Name + PlayerPed.h + Windows + Text + + + + Name + Population.cpp + Windows + Text + Debug + + + Name + Population.h + Windows + Text + + + + Name + 2dEffect.h + Windows + Text + + + + Name + Antennas.cpp + Windows + Text + Debug + + + Name + Antennas.h + Windows + Text + + + + Name + Clouds.cpp + Windows + Text + Debug + + + Name + Clouds.h + Windows + Text + + + + Name + Console.cpp + Windows + Text + Debug + + + Name + Console.h + Windows + Text + + + + Name + Coronas.cpp + Windows + Text + Debug + + + Name + Coronas.h + Windows + Text + + + + Name + Credits.cpp + Windows + Text + Debug + + + Name + Credits.h + Windows + Text + + + + Name + CutsceneShadow.cpp + Windows + Text + Debug + + + Name + CutsceneShadow.h + Windows + Text + + + + Name + Draw.cpp + Windows + Text + Debug + + + Name + Draw.h + Windows + Text + + + + Name + Fluff.cpp + Windows + Text + Debug + + + Name + Fluff.h + Windows + Text + + + + Name + Font.cpp + Windows + Text + Debug + + + Name + Font.h + Windows + Text + + + + Name + Glass.cpp + Windows + Text + Debug + + + Name + Glass.h + Windows + Text + + + + Name + Hud.cpp + Windows + Text + Debug + + + Name + Hud.h + Windows + Text + + + + Name + Instance.cpp + Windows + Text + Debug + + + Name + Instance.h + Windows + Text + + + + Name + Lines.cpp + Windows + Text + Debug + + + Name + Lines.h + Windows + Text + + + + Name + MBlur.cpp + Windows + Text + Debug + + + Name + MBlur.h + Windows + Text + + + + Name + Occlusion.cpp + Windows + Text + Debug + + + Name + Occlusion.h + Windows + Text + + + + Name + Particle.cpp + Windows + Text + Debug + + + Name + Particle.h + Windows + Text + + + + Name + ParticleMgr.cpp + Windows + Text + Debug + + + Name + ParticleMgr.h + Windows + Text + + + + Name + ParticleType.h + Windows + Text + + + + Name + PlayerSkin.cpp + Windows + Text + Debug + + + Name + PlayerSkin.h + Windows + Text + + + + Name + PointLights.cpp + Windows + Text + Debug + + + Name + PointLights.h + Windows + Text + + + + Name + RenderBuffer.cpp + Windows + Text + Debug + + + Name + RenderBuffer.h + Windows + Text + + + + Name + Renderer.cpp + Windows + Text + Debug + + + Name + Renderer.h + Windows + Text + + + + Name + Rubbish.cpp + Windows + Text + Debug + + + Name + Rubbish.h + Windows + Text + + + + Name + ShadowCamera.cpp + Windows + Text + Debug + + + Name + ShadowCamera.h + Windows + Text + + + + Name + Shadows.cpp + Windows + Text + Debug + + + Name + Shadows.h + Windows + Text + + + + Name + Skidmarks.cpp + Windows + Text + Debug + + + Name + Skidmarks.h + Windows + Text + + + + Name + SpecialFX.cpp + Windows + Text + Debug + + + Name + SpecialFX.h + Windows + Text + + + + Name + Sprite.cpp + Windows + Text + Debug + + + Name + Sprite.h + Windows + Text + + + + Name + Sprite2d.cpp + Windows + Text + Debug + + + Name + Sprite2d.h + Windows + Text + + + + Name + TexList.cpp + Windows + Text + Debug + + + Name + TexList.h + Windows + Text + + + + Name + Timecycle.cpp + Windows + Text + Debug + + + Name + Timecycle.h + Windows + Text + + + + Name + VarConsole.cpp + Windows + Text + Debug + + + Name + VarConsole.h + Windows + Text + + + + Name + WaterCannon.cpp + Windows + Text + Debug + + + Name + WaterCannon.h + Windows + Text + + + + Name + WaterCreatures.cpp + Windows + Text + Debug + + + Name + WaterCreatures.h + Windows + Text + + + + Name + WaterLevel.cpp + Windows + Text + Debug + + + Name + WaterLevel.h + Windows + Text + + + + Name + Weather.cpp + Windows + Text + Debug + + + Name + Weather.h + Windows + Text + + + + Name + WindModifiers.cpp + Windows + Text + Debug + + + Name + WindModifiers.h + Windows + Text + + + + Name + ClumpRead.cpp + Windows + Text + Debug + + + Name + Lights.cpp + Windows + Text + Debug + + + Name + Lights.h + Windows + Text + + + + Name + MemoryHeap.cpp + Windows + Text + Debug + + + Name + MemoryHeap.h + Windows + Text + + + + Name + MemoryMgr.cpp + Windows + Text + Debug + + + Name + MemoryMgr.h + Windows + Text + + + + Name + NodeName.cpp + Windows + Text + Debug + + + Name + NodeName.h + Windows + Text + + + + Name + RwHelper.cpp + Windows + Text + Debug + + + Name + RwHelper.h + Windows + Text + + + + Name + RwMatFX.cpp + Windows + Text + Debug + + + Name + RwPS2AlphaTest.cpp + Windows + Text + Debug + + + Name + TexRead.cpp + Windows + Text + Debug + + + Name + TexturePools.cpp + Windows + Text + Debug + + + Name + TexturePools.h + Windows + Text + + + + Name + TxdStore.cpp + Windows + Text + Debug + + + Name + TxdStore.h + Windows + Text + + + + Name + VisibilityPlugins.cpp + Windows + Text + Debug + + + Name + VisibilityPlugins.h + Windows + Text + + + + Name + Date.cpp + Windows + Text + Debug + + + Name + Date.h + Windows + Text + + + + Name + GenericGameStorage.cpp + Windows + Text + Debug + + + Name + GenericGameStorage.h + Windows + Text + + + + Name + MemoryCard.cpp + Windows + Text + Debug + + + Name + MemoryCard.h + Windows + Text + + + + Name + PCSave.cpp + Windows + Text + Debug + + + Name + PCSave.h + Windows + Text + + + + Name + crossplatform.cpp + Windows + Text + Debug + + + Name + crossplatform.h + Windows + Text + + + + Name + events.cpp + Windows + Text + Debug + + + Name + events.h + Windows + Text + + + + Name + platform.h + Windows + Text + + + + Name + skeleton.cpp + Windows + Text + Debug + + + Name + skeleton.h + Windows + Text + + + + Name + resource.h + Windows + Text + + + + Name + win.cpp + Windows + Text + Debug + + + Name + win.h + Windows + Text + + + + Name + win.rc + Windows + Text + Debug + + + Name + Messages.cpp + Windows + Text + Debug + + + Name + Messages.h + Windows + Text + + + + Name + Pager.cpp + Windows + Text + Debug + + + Name + Pager.h + Windows + Text + + + + Name + Text.cpp + Windows + Text + Debug + + + Name + Text.h + Windows + Text + + + + Name + Automobile.cpp + Windows + Text + Debug + + + Name + Automobile.h + Windows + Text + + + + Name + Bike.cpp + Windows + Text + Debug + + + Name + Bike.h + Windows + Text + + + + Name + Boat.cpp + Windows + Text + Debug + + + Name + Boat.h + Windows + Text + + + + Name + CarGen.cpp + Windows + Text + Debug + + + Name + CarGen.h + Windows + Text + + + + Name + Cranes.cpp + Windows + Text + Debug + + + Name + Cranes.h + Windows + Text + + + + Name + DamageManager.cpp + Windows + Text + Debug + + + Name + DamageManager.h + Windows + Text + + + + Name + Door.cpp + Windows + Text + Debug + + + Name + Door.h + Windows + Text + + + + Name + Floater.cpp + Windows + Text + Debug + + + Name + Floater.h + Windows + Text + + + + Name + HandlingMgr.cpp + Windows + Text + Debug + + + Name + HandlingMgr.h + Windows + Text + + + + Name + Heli.cpp + Windows + Text + Debug + + + Name + Heli.h + Windows + Text + + + + Name + Plane.cpp + Windows + Text + Debug + + + Name + Plane.h + Windows + Text + + + + Name + Train.cpp + Windows + Text + Debug + + + Name + Train.h + Windows + Text + + + + Name + Transmission.cpp + Windows + Text + Debug + + + Name + Transmission.h + Windows + Text + + + + Name + Vehicle.cpp + Windows + Text + Debug + + + Name + Vehicle.h + Windows + Text + + + + Name + BulletInfo.cpp + Windows + Text + Debug + + + Name + BulletInfo.h + Windows + Text + + + + Name + Explosion.cpp + Windows + Text + Debug + + + Name + Explosion.h + Windows + Text + + + + Name + ProjectileInfo.cpp + Windows + Text + Debug + + + Name + ProjectileInfo.h + Windows + Text + + + + Name + ShotInfo.cpp + Windows + Text + Debug + + + Name + ShotInfo.h + Windows + Text + + + + Name + Weapon.cpp + Windows + Text + Debug + + + Name + Weapon.h + Windows + Text + + + + Name + WeaponEffects.cpp + Windows + Text + Debug + + + Name + WeaponEffects.h + Windows + Text + + + + Name + WeaponInfo.cpp + Windows + Text + Debug + + + Name + WeaponInfo.h + Windows + Text + + + + Name + WeaponType.h + Windows + Text + + + + + + Name + AnimationId.h + Windows + + + Name + AnimBlendAssocGroup.cpp + Windows + + + Name + AnimBlendAssocGroup.h + Windows + + + Name + AnimBlendAssociation.cpp + Windows + + + Name + AnimBlendAssociation.h + Windows + + + Name + AnimBlendClumpData.cpp + Windows + + + Name + AnimBlendClumpData.h + Windows + + + Name + AnimBlendHierarchy.cpp + Windows + + + Name + AnimBlendHierarchy.h + Windows + + + Name + AnimBlendList.h + Windows + + + Name + AnimBlendNode.cpp + Windows + + + Name + AnimBlendNode.h + Windows + + + Name + AnimBlendSequence.cpp + Windows + + + Name + AnimBlendSequence.h + Windows + + + Name + AnimManager.cpp + Windows + + + Name + AnimManager.h + Windows + + + Name + Bones.cpp + Windows + + + Name + Bones.h + Windows + + + Name + CutsceneMgr.cpp + Windows + + + Name + CutsceneMgr.h + Windows + + + Name + FrameUpdate.cpp + Windows + + + Name + RpAnimBlend.cpp + Windows + + + Name + RpAnimBlend.h + Windows + + + Name + audio_enums.h + Windows + + + Name + AudioCollision.cpp + Windows + + + Name + AudioCollision.h + Windows + + + Name + AudioLogic.cpp + Windows + + + Name + AudioManager.cpp + Windows + + + Name + AudioManager.h + Windows + + + Name + AudioSamples.h + Windows + + + Name + AudioScriptObject.cpp + Windows + + + Name + AudioScriptObject.h + Windows + + + Name + DMAudio.cpp + Windows + + + Name + DMAudio.h + Windows + + + Name + MusicManager.cpp + Windows + + + Name + MusicManager.h + Windows + + + Name + PolRadio.cpp + Windows + + + Name + PolRadio.h + Windows + + + Name + sampman.h + Windows + + + Name + sampman_miles.cpp + Windows + + + Name + soundlist.h + Windows + + + Name + eax.h + Windows + + + Name + eax-util.cpp + Windows + + + Name + eax-util.h + Windows + + + Name + Building.cpp + Windows + + + Name + Building.h + Windows + + + Name + Solid.h + Windows + + + Name + Treadable.cpp + Windows + + + Name + Treadable.h + Windows + + + Name + ColBox.cpp + Windows + + + Name + ColBox.h + Windows + + + Name + ColLine.cpp + Windows + + + Name + ColLine.h + Windows + + + Name + Collision.cpp + Windows + + + Name + Collision.h + Windows + + + Name + ColModel.cpp + Windows + + + Name + ColModel.h + Windows + + + Name + ColPoint.cpp + Windows + + + Name + ColPoint.h + Windows + + + Name + ColSphere.cpp + Windows + + + Name + ColSphere.h + Windows + + + Name + ColStore.cpp + Windows + + + Name + ColStore.h + Windows + + + Name + ColTriangle.cpp + Windows + + + Name + ColTriangle.h + Windows + + + Name + CompressedVector.h + Windows + + + Name + TempColModels.cpp + Windows + + + Name + TempColModels.h + Windows + + + Name + VuCollision.cpp + Windows + + + Name + VuCollision.h + Windows + + + Name + AutoPilot.cpp + Windows + + + Name + AutoPilot.h + Windows + + + Name + Bridge.cpp + Windows + + + Name + Bridge.h + Windows + + + Name + CarAI.cpp + Windows + + + Name + CarAI.h + Windows + + + Name + CarCtrl.cpp + Windows + + + Name + CarCtrl.h + Windows + + + Name + Curves.cpp + Windows + + + Name + Curves.h + Windows + + + Name + Darkel.cpp + Windows + + + Name + Darkel.h + Windows + + + Name + GameLogic.cpp + Windows + + + Name + GameLogic.h + Windows + + + Name + Garages.cpp + Windows + + + Name + Garages.h + Windows + + + Name + NameGrid.cpp + Windows + + + Name + NameGrid.h + Windows + + + Name + OnscreenTimer.cpp + Windows + + + Name + OnscreenTimer.h + Windows + + + Name + PathFind.cpp + Windows + + + Name + PathFind.h + Windows + + + Name + Phones.cpp + Windows + + + Name + Phones.h + Windows + + + Name + Pickups.cpp + Windows + + + Name + Pickups.h + Windows + + + Name + PowerPoints.cpp + Windows + + + Name + PowerPoints.h + Windows + + + Name + Record.cpp + Windows + + + Name + Record.h + Windows + + + Name + Remote.cpp + Windows + + + Name + Remote.h + Windows + + + Name + Replay.cpp + Windows + + + Name + Replay.h + Windows + + + Name + Restart.cpp + Windows + + + Name + Restart.h + Windows + + + Name + RoadBlocks.cpp + Windows + + + Name + RoadBlocks.h + Windows + + + Name + SceneEdit.cpp + Windows + + + Name + SceneEdit.h + Windows + + + Name + Script.cpp + Windows + + + Name + Script.h + Windows + + + Name + Script2.cpp + Windows + + + Name + Script3.cpp + Windows + + + Name + Script4.cpp + Windows + + + Name + Script5.cpp + Windows + + + Name + Script6.cpp + Windows + + + Name + Script7.cpp + Windows + + + Name + Script8.cpp + Windows + + + Name + ScriptCommands.h + Windows + + + Name + SetPieces.cpp + Windows + + + Name + SetPieces.h + Windows + + + Name + TrafficLights.cpp + Windows + + + Name + TrafficLights.h + Windows + + + Name + Accident.cpp + Windows + + + Name + Accident.h + Windows + + + Name + AnimViewer.cpp + Windows + + + Name + AnimViewer.h + Windows + + + Name + Cam.cpp + Windows + + + Name + Camera.cpp + Windows + + + Name + Camera.h + Windows + + + Name + CdStream.cpp + Windows + + + Name + CdStream.h + Windows + + + Name + CdStreamPosix.cpp + Windows + + + Name + Clock.cpp + Windows + + + Name + Clock.h + Windows + + + Name + common.h + Windows + + + Name + config.h + Windows + + + Name + ControllerConfig.cpp + Windows + + + Name + ControllerConfig.h + Windows + + + Name + Crime.h + Windows + + + Name + Debug.cpp + Windows + + + Name + Debug.h + Windows + + + Name + Directory.cpp + Windows + + + Name + Directory.h + Windows + + + Name + EventList.cpp + Windows + + + Name + EventList.h + Windows + + + Name + FileLoader.cpp + Windows + + + Name + FileLoader.h + Windows + + + Name + FileMgr.cpp + Windows + + + Name + FileMgr.h + Windows + + + Name + Fire.cpp + Windows + + + Name + Fire.h + Windows + + + Name + Frontend.cpp + Windows + + + Name + Frontend.h + Windows + + + Name + Frontend_PS2.cpp + Windows + + + Name + Frontend_PS2.h + Windows + + + Name + FrontEndControls.cpp + Windows + + + Name + FrontEndControls.h + Windows + + + Name + FrontendTriggers.h + Windows + + + Name + Game.cpp + Windows + + + Name + Game.h + Windows + + + Name + General.h + Windows + + + Name + IniFile.cpp + Windows + + + Name + IniFile.h + Windows + + + Name + Lists.cpp + Windows + + + Name + Lists.h + Windows + + + Name + main.cpp + Windows + + + Name + main.h + Windows + + + Name + MenuScreens.cpp + Windows + + + Name + MenuScreensCustom.cpp + Windows + + + Name + obrstr.cpp + Windows + + + Name + obrstr.h + Windows + + + Name + Pad.cpp + Windows + + + Name + Pad.h + Windows + + + Name + Placeable.cpp + Windows + + + Name + Placeable.h + Windows + + + Name + PlayerInfo.cpp + Windows + + + Name + PlayerInfo.h + Windows + + + Name + Pools.cpp + Windows + + + Name + Pools.h + Windows + + + Name + Profile.cpp + Windows + + + Name + Profile.h + Windows + + + Name + Radar.cpp + Windows + + + Name + Radar.h + Windows + + + Name + Range2D.cpp + Windows + + + Name + Range2D.h + Windows + + + Name + Range3D.cpp + Windows + + + Name + Range3D.h + Windows + + + Name + re3.cpp + Windows + + + Name + References.cpp + Windows + + + Name + References.h + Windows + + + Name + Ropes.cpp + Windows + + + Name + Ropes.h + Windows + + + Name + Stats.cpp + Windows + + + Name + Stats.h + Windows + + + Name + Streaming.cpp + Windows + + + Name + Streaming.h + Windows + + + Name + SurfaceTable.cpp + Windows + + + Name + SurfaceTable.h + Windows + + + Name + templates.h + Windows + + + Name + timebars.cpp + Windows + + + Name + timebars.h + Windows + + + Name + Timer.cpp + Windows + + + Name + Timer.h + Windows + + + Name + TimeStep.cpp + Windows + + + Name + TimeStep.h + Windows + + + Name + User.cpp + Windows + + + Name + User.h + Windows + + + Name + Wanted.cpp + Windows + + + Name + Wanted.h + Windows + + + Name + World.cpp + Windows + + + Name + World.h + Windows + + + Name + ZoneCull.cpp + Windows + + + Name + ZoneCull.h + Windows + + + Name + Zones.cpp + Windows + + + Name + Zones.h + Windows + + + Name + Dummy.cpp + Windows + + + Name + Dummy.h + Windows + + + Name + Entity.cpp + Windows + + + Name + Entity.h + Windows + + + Name + Physical.cpp + Windows + + + Name + Physical.h + Windows + + + Name + math.cpp + Windows + + + Name + maths.h + Windows + + + Name + Matrix.cpp + Windows + + + Name + Matrix.h + Windows + + + Name + Quaternion.cpp + Windows + + + Name + Quaternion.h + Windows + + + Name + Rect.cpp + Windows + + + Name + Rect.h + Windows + + + Name + Vector.cpp + Windows + + + Name + Vector.h + Windows + + + Name + Vector2D.h + Windows + + + Name + VuVector.h + Windows + + + Name + BaseModelInfo.cpp + Windows + + + Name + BaseModelInfo.h + Windows + + + Name + ClumpModelInfo.cpp + Windows + + + Name + ClumpModelInfo.h + Windows + + + Name + ModelIndices.cpp + Windows + + + Name + ModelIndices.h + Windows + + + Name + ModelInfo.cpp + Windows + + + Name + ModelInfo.h + Windows + + + Name + PedModelInfo.cpp + Windows + + + Name + PedModelInfo.h + Windows + + + Name + SimpleModelInfo.cpp + Windows + + + Name + SimpleModelInfo.h + Windows + + + Name + TimeModelInfo.cpp + Windows + + + Name + TimeModelInfo.h + Windows + + + Name + VehicleModelInfo.cpp + Windows + + + Name + VehicleModelInfo.h + Windows + + + Name + WeaponModelInfo.cpp + Windows + + + Name + WeaponModelInfo.h + Windows + + + Name + CutsceneObject.cpp + Windows + + + Name + CutsceneObject.h + Windows + + + Name + DummyObject.cpp + Windows + + + Name + DummyObject.h + Windows + + + Name + Object.cpp + Windows + + + Name + Object.h + Windows + + + Name + ObjectData.cpp + Windows + + + Name + ObjectData.h + Windows + + + Name + ParticleObject.cpp + Windows + + + Name + ParticleObject.h + Windows + + + Name + Projectile.cpp + Windows + + + Name + Projectile.h + Windows + + + Name + Stinger.cpp + Windows + + + Name + Stinger.h + Windows + + + Name + CivilianPed.cpp + Windows + + + Name + CivilianPed.h + Windows + + + Name + CopPed.cpp + Windows + + + Name + CopPed.h + Windows + + + Name + DummyPed.h + Windows + + + Name + EmergencyPed.cpp + Windows + + + Name + EmergencyPed.h + Windows + + + Name + Gangs.cpp + Windows + + + Name + Gangs.h + Windows + + + Name + Ped.cpp + Windows + + + Name + Ped.h + Windows + + + Name + PedAI.cpp + Windows + + + Name + PedAttractor.cpp + Windows + + + Name + PedAttractor.h + Windows + + + Name + PedChat.cpp + Windows + + + Name + PedDebug.cpp + Windows + + + Name + PedFight.cpp + Windows + + + Name + PedIK.cpp + Windows + + + Name + PedIK.h + Windows + + + Name + PedPlacement.cpp + Windows + + + Name + PedPlacement.h + Windows + + + Name + PedRoutes.cpp + Windows + + + Name + PedRoutes.h + Windows + + + Name + PedType.cpp + Windows + + + Name + PedType.h + Windows + + + Name + PlayerPed.cpp + Windows + + + Name + PlayerPed.h + Windows + + + Name + Population.cpp + Windows + + + Name + Population.h + Windows + + + Name + 2dEffect.h + Windows + + + Name + Antennas.cpp + Windows + + + Name + Antennas.h + Windows + + + Name + Clouds.cpp + Windows + + + Name + Clouds.h + Windows + + + Name + Console.cpp + Windows + + + Name + Console.h + Windows + + + Name + Coronas.cpp + Windows + + + Name + Coronas.h + Windows + + + Name + Credits.cpp + Windows + + + Name + Credits.h + Windows + + + Name + CutsceneShadow.cpp + Windows + + + Name + CutsceneShadow.h + Windows + + + Name + Draw.cpp + Windows + + + Name + Draw.h + Windows + + + Name + Fluff.cpp + Windows + + + Name + Fluff.h + Windows + + + Name + Font.cpp + Windows + + + Name + Font.h + Windows + + + Name + Glass.cpp + Windows + + + Name + Glass.h + Windows + + + Name + Hud.cpp + Windows + + + Name + Hud.h + Windows + + + Name + Instance.cpp + Windows + + + Name + Instance.h + Windows + + + Name + Lines.cpp + Windows + + + Name + Lines.h + Windows + + + Name + MBlur.cpp + Windows + + + Name + MBlur.h + Windows + + + Name + Occlusion.cpp + Windows + + + Name + Occlusion.h + Windows + + + Name + Particle.cpp + Windows + + + Name + Particle.h + Windows + + + Name + ParticleMgr.cpp + Windows + + + Name + ParticleMgr.h + Windows + + + Name + ParticleType.h + Windows + + + Name + PlayerSkin.cpp + Windows + + + Name + PlayerSkin.h + Windows + + + Name + PointLights.cpp + Windows + + + Name + PointLights.h + Windows + + + Name + RenderBuffer.cpp + Windows + + + Name + RenderBuffer.h + Windows + + + Name + Renderer.cpp + Windows + + + Name + Renderer.h + Windows + + + Name + Rubbish.cpp + Windows + + + Name + Rubbish.h + Windows + + + Name + ShadowCamera.cpp + Windows + + + Name + ShadowCamera.h + Windows + + + Name + Shadows.cpp + Windows + + + Name + Shadows.h + Windows + + + Name + Skidmarks.cpp + Windows + + + Name + Skidmarks.h + Windows + + + Name + SpecialFX.cpp + Windows + + + Name + SpecialFX.h + Windows + + + Name + Sprite.cpp + Windows + + + Name + Sprite.h + Windows + + + Name + Sprite2d.cpp + Windows + + + Name + Sprite2d.h + Windows + + + Name + TexList.cpp + Windows + + + Name + TexList.h + Windows + + + Name + Timecycle.cpp + Windows + + + Name + Timecycle.h + Windows + + + Name + VarConsole.cpp + Windows + + + Name + VarConsole.h + Windows + + + Name + WaterCannon.cpp + Windows + + + Name + WaterCannon.h + Windows + + + Name + WaterCreatures.cpp + Windows + + + Name + WaterCreatures.h + Windows + + + Name + WaterLevel.cpp + Windows + + + Name + WaterLevel.h + Windows + + + Name + Weather.cpp + Windows + + + Name + Weather.h + Windows + + + Name + WindModifiers.cpp + Windows + + + Name + WindModifiers.h + Windows + + + Name + ClumpRead.cpp + Windows + + + Name + Lights.cpp + Windows + + + Name + Lights.h + Windows + + + Name + MemoryHeap.cpp + Windows + + + Name + MemoryHeap.h + Windows + + + Name + MemoryMgr.cpp + Windows + + + Name + MemoryMgr.h + Windows + + + Name + NodeName.cpp + Windows + + + Name + NodeName.h + Windows + + + Name + RwHelper.cpp + Windows + + + Name + RwHelper.h + Windows + + + Name + RwMatFX.cpp + Windows + + + Name + RwPS2AlphaTest.cpp + Windows + + + Name + TexRead.cpp + Windows + + + Name + TexturePools.cpp + Windows + + + Name + TexturePools.h + Windows + + + Name + TxdStore.cpp + Windows + + + Name + TxdStore.h + Windows + + + Name + VisibilityPlugins.cpp + Windows + + + Name + VisibilityPlugins.h + Windows + + + Name + Date.cpp + Windows + + + Name + Date.h + Windows + + + Name + GenericGameStorage.cpp + Windows + + + Name + GenericGameStorage.h + Windows + + + Name + MemoryCard.cpp + Windows + + + Name + MemoryCard.h + Windows + + + Name + PCSave.cpp + Windows + + + Name + PCSave.h + Windows + + + Name + crossplatform.cpp + Windows + + + Name + crossplatform.h + Windows + + + Name + events.cpp + Windows + + + Name + events.h + Windows + + + Name + platform.h + Windows + + + Name + skeleton.cpp + Windows + + + Name + skeleton.h + Windows + + + Name + resource.h + Windows + + + Name + win.cpp + Windows + + + Name + win.h + Windows + + + Name + win.rc + Windows + + + Name + Messages.cpp + Windows + + + Name + Messages.h + Windows + + + Name + Pager.cpp + Windows + + + Name + Pager.h + Windows + + + Name + Text.cpp + Windows + + + Name + Text.h + Windows + + + Name + Automobile.cpp + Windows + + + Name + Automobile.h + Windows + + + Name + Bike.cpp + Windows + + + Name + Bike.h + Windows + + + Name + Boat.cpp + Windows + + + Name + Boat.h + Windows + + + Name + CarGen.cpp + Windows + + + Name + CarGen.h + Windows + + + Name + Cranes.cpp + Windows + + + Name + Cranes.h + Windows + + + Name + DamageManager.cpp + Windows + + + Name + DamageManager.h + Windows + + + Name + Door.cpp + Windows + + + Name + Door.h + Windows + + + Name + Floater.cpp + Windows + + + Name + Floater.h + Windows + + + Name + HandlingMgr.cpp + Windows + + + Name + HandlingMgr.h + Windows + + + Name + Heli.cpp + Windows + + + Name + Heli.h + Windows + + + Name + Plane.cpp + Windows + + + Name + Plane.h + Windows + + + Name + Train.cpp + Windows + + + Name + Train.h + Windows + + + Name + Transmission.cpp + Windows + + + Name + Transmission.h + Windows + + + Name + Vehicle.cpp + Windows + + + Name + Vehicle.h + Windows + + + Name + BulletInfo.cpp + Windows + + + Name + BulletInfo.h + Windows + + + Name + Explosion.cpp + Windows + + + Name + Explosion.h + Windows + + + Name + ProjectileInfo.cpp + Windows + + + Name + ProjectileInfo.h + Windows + + + Name + ShotInfo.cpp + Windows + + + Name + ShotInfo.h + Windows + + + Name + Weapon.cpp + Windows + + + Name + Weapon.h + Windows + + + Name + WeaponEffects.cpp + Windows + + + Name + WeaponEffects.h + Windows + + + Name + WeaponInfo.cpp + Windows + + + Name + WeaponInfo.h + Windows + + + Name + WeaponType.h + Windows + + + Name + mss32.lib + Windows + + + Name + d3d8.lib + Windows + + + Name + ddraw.lib + Windows + + + Name + dxguid.lib + Windows + + + Name + strmiids.lib + Windows + + + Name + dinput8.lib + Windows + + + Name + winmm.lib + Windows + + + Name + rwcore.lib + Windows + + + Name + rpworld.lib + Windows + + + Name + rpmatfx.lib + Windows + + + Name + rpskin.lib + Windows + + + Name + rphanim.lib + Windows + + + Name + rtbmp.lib + Windows + + + Name + rtquat.lib + Windows + + + Name + rtcharse.lib + Windows + + + Name + rtanim.lib + Windows + + + Name + rpanisot.lib + Windows + + + Name + MSL_All_x86_D.lib + MacOS + + + Name + Comdlg32.lib + MacOS + + + Name + Gdi32.lib + MacOS + + + Name + Kernel32.lib + MacOS + + + Name + User32.lib + MacOS + + + Name + ole32.lib + Windows + + + Name + shell32.lib + Windows + + + Name + uuid.lib + Windows + + + + + Release + + + + UserSourceTrees + + + AlwaysSearchUserPathsfalse + InterpretDOSAndUnixPathstrue + RequireFrameworkStyleIncludesfalse + UserSearchPaths + + SearchPath + Path + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\animation + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\audio + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\buildings + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\collision + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\control + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\core + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\entities + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\math + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\modelinfo + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\objects + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\peds + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\render + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\rw + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\save + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\skel + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\text + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\vehicles + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\weapons + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\vendor\milessdk\lib + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\vendor\milessdk\include + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\dx8sdk\Lib + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\rwsdk\lib\d3d8\release + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\rwsdk\include\d3d8 + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\extras + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SystemSearchPaths + + SearchPath + Path..\sdk\rwsdk\include\d3d8 + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\sdk\dx8sdk\Include + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + PathWin32-x86 Support\Headers\ + PathFormatWindows + PathRootCodeWarrior + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + PathWin32-x86 Support\Libraries\ + PathFormatWindows + PathRootCodeWarrior + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + PathMSL + PathFormatWindows + PathRootCodeWarrior + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + SearchPath + Path..\src\audio\eax + PathFormatWindows + PathRootProject + + Recursivetrue + FrameworkPathfalse + HostFlagsAll + + + + + MWRuntimeSettings_WorkingDirectory + MWRuntimeSettings_CommandLine + MWRuntimeSettings_HostApplication + Path + PathFormatGeneric + PathRootAbsolute + + MWRuntimeSettings_EnvVars + + + LinkerWin32 x86 Linker + PreLinker + PostLinker + TargetnameRelease + OutputDirectory + Path + PathFormatWindows + PathRootProject + + SaveEntriesUsingRelativePathsfalse + + + FileMappings + + FileTypeTEXT + FileExtension.c + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.c++ + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.cc + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.cp + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.cpp + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.def + Compiler + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.h + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMaketrue + + + FileTypeTEXT + FileExtension.p + CompilerMW Pascal x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.pas + CompilerMW Pascal x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.pch + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompiletrue + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.pch++ + CompilerMW C/C++ x86 + EditLanguageC/C++ + Precompiletrue + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.ppu + CompilerMW Pascal x86 + EditLanguage + Precompiletrue + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.rc + CompilerMW WinRC + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileTypeTEXT + FileExtension.res + CompilerWinRes Import + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileExtension.doc + Compiler + EditLanguage + Precompilefalse + Launchabletrue + ResourceFilefalse + IgnoredByMaketrue + + + FileExtension.lib + CompilerLib Import x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileExtension.obj + CompilerObj Import x86 + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + FileExtension.res + CompilerWinRes Import + EditLanguage + Precompilefalse + Launchablefalse + ResourceFilefalse + IgnoredByMakefalse + + + + + CacheModDatestrue + ActivateBrowserfalse + DumpBrowserInfofalse + CacheSubprojectstrue + UseThirdPartyDebuggerfalse + DebuggerAppPath + Path + PathFormatGeneric + PathRootAbsolute + + DebuggerCmdLineArgs + DebuggerWorkingDir + Path + PathFormatGeneric + PathRootAbsolute + + + + LogSystemMessagesfalse + AutoTargetDLLsfalse + StopAtWatchpointstrue + PauseWhileRunningfalse + PauseInterval5 + PauseUIFlags0 + AltExePath + Path + PathFormatGeneric + PathRootAbsolute + + StopAtTempBPOnLaunchtrue + CacheSymbolicstrue + TempBPFunctionNamemain + TempBPType0 + + + Enabledfalse + ConnectionName + DownloadPath + LaunchRemoteAppfalse + RemoteAppPath + + + OtherExecutables + + + CustomColor1 + Red0 + Green32767 + Blue0 + + CustomColor2 + Red0 + Green32767 + Blue0 + + CustomColor3 + Red0 + Green32767 + Blue0 + + CustomColor4 + Red0 + Green32767 + Blue0 + + + + MWCodeGen_X86_processorPentiumII + MWCodeGen_X86_alignmentbytes8 + MWCodeGen_X86_exceptionsZeroOverhead + MWCodeGen_X86_extinst_mmx0 + MWCodeGen_X86_extinst_3dnow0 + MWCodeGen_X86_use_mmx_3dnow_convention0 + MWCodeGen_X86_machinecodelisting0 + MWCodeGen_X86_intrinsics1 + MWCodeGen_X86_syminfo0 + MWCodeGen_X86_codeviewinfo1 + MWCodeGen_X86_extinst_cmov_fcomi0 + MWCodeGen_X86_extinst_sse0 + + + MWDebugger_X86_Exceptions + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + PDisasmX86_showHeaderstrue + PDisasmX86_showSymTabtrue + PDisasmX86_showCodetrue + PDisasmX86_showSourcefalse + PDisasmX86_showHextrue + PDisasmX86_showRelocationtrue + PDisasmX86_showCommentsfalse + PDisasmX86_showDebugfalse + PDisasmX86_showExceptionsfalse + PDisasmX86_showDatatrue + PDisasmX86_showRawfalse + PDisasmX86_verbosefalse + + + MWFrontEnd_C_cplusplus1 + MWFrontEnd_C_checkprotos0 + MWFrontEnd_C_arm0 + MWFrontEnd_C_trigraphs0 + MWFrontEnd_C_onlystdkeywords0 + MWFrontEnd_C_enumsalwaysint1 + MWFrontEnd_C_mpwpointerstyle0 + MWFrontEnd_C_prefixname + MWFrontEnd_C_ansistrict0 + MWFrontEnd_C_mpwcnewline0 + MWFrontEnd_C_wchar_type1 + MWFrontEnd_C_enableexceptions1 + MWFrontEnd_C_dontreusestrings0 + MWFrontEnd_C_poolstrings1 + MWFrontEnd_C_dontinline0 + MWFrontEnd_C_useRTTI1 + MWFrontEnd_C_multibyteaware1 + MWFrontEnd_C_unsignedchars0 + MWFrontEnd_C_autoinline1 + MWFrontEnd_C_booltruefalse1 + MWFrontEnd_C_direct_to_som0 + MWFrontEnd_C_som_env_check0 + MWFrontEnd_C_alwaysinline0 + MWFrontEnd_C_inlinelevel0 + MWFrontEnd_C_ecplusplus0 + MWFrontEnd_C_objective_c0 + MWFrontEnd_C_defer_codegen0 + + + MWLinker_X86_entrypointusageDefault + MWLinker_X86_entrypoint + MWLinker_X86_subsystemWinGUI + MWLinker_X86_subsysmajorid4 + MWLinker_X86_subsysminorid0 + MWLinker_X86_usrmajorid0 + MWLinker_X86_usrminorid0 + MWLinker_X86_commandfile + MWLinker_X86_generatemap0 + MWLinker_X86_linksym0 + MWLinker_X86_linkCV1 + + + MWProject_X86_typeApplication + MWProject_X86_outfileRelease\gta-vc.exe + MWProject_X86_baseaddress4194304 + MWProject_X86_maxstacksize1024 + MWProject_X86_minstacksize4 + MWProject_X86_size1024 + MWProject_X86_minsize4 + MWProject_X86_importlib + + + MWWarning_C_warn_illpragma0 + MWWarning_C_warn_emptydecl0 + MWWarning_C_warn_possunwant1 + MWWarning_C_warn_unusedvar1 + MWWarning_C_warn_unusedarg0 + MWWarning_C_warn_extracomma1 + MWWarning_C_pedantic0 + MWWarning_C_warningerrors0 + MWWarning_C_warn_hidevirtual1 + MWWarning_C_warn_implicitconv0 + MWWarning_C_warn_notinlined0 + MWWarning_C_warn_structclass0 + + + MWWinRC_prefixnameResourcePrefix.h + + + GlobalOptimizer_X86__optimizationlevelLevel4 + GlobalOptimizer_X86__optforSpeed + + + + Name + MSL_All_x86.lib + MacOS + Library + + + + Name + Comdlg32.lib + MacOS + Library + + + + Name + Gdi32.lib + MacOS + Library + + + + Name + Kernel32.lib + MacOS + Library + + + + Name + User32.lib + MacOS + Library + + + + Name + mss32.lib + Windows + Library + Debug + + + Name + d3d8.lib + Windows + Library + Debug + + + Name + ddraw.lib + Windows + Library + Debug + + + Name + dxguid.lib + Windows + Library + Debug + + + Name + strmiids.lib + Windows + Library + Debug + + + Name + dinput8.lib + Windows + Library + Debug + + + Name + winmm.lib + Windows + Library + Debug + + + Name + rwcore.lib + Windows + Library + Debug + + + Name + rpworld.lib + Windows + Library + Debug + + + Name + rpmatfx.lib + Windows + Library + Debug + + + Name + rpskin.lib + Windows + Library + Debug + + + Name + rphanim.lib + Windows + Library + Debug + + + Name + rtbmp.lib + Windows + Library + Debug + + + Name + rtquat.lib + Windows + Library + Debug + + + Name + rtcharse.lib + Windows + Library + Debug + + + Name + ole32.lib + Windows + Library + Debug + + + Name + shell32.lib + Windows + Library + Debug + + + Name + uuid.lib + Windows + Library + Debug + + + Name + rtanim.lib + Windows + Library + Debug + + + Name + rpanisot.lib + Windows + Library + Debug + + + Name + AnimationId.h + Windows + Text + + + + Name + AnimBlendAssocGroup.cpp + Windows + Text + Debug + + + Name + AnimBlendAssocGroup.h + Windows + Text + + + + Name + AnimBlendAssociation.cpp + Windows + Text + Debug + + + Name + AnimBlendAssociation.h + Windows + Text + + + + Name + AnimBlendClumpData.cpp + Windows + Text + Debug + + + Name + AnimBlendClumpData.h + Windows + Text + + + + Name + AnimBlendHierarchy.cpp + Windows + Text + Debug + + + Name + AnimBlendHierarchy.h + Windows + Text + + + + Name + AnimBlendList.h + Windows + Text + + + + Name + AnimBlendNode.cpp + Windows + Text + Debug + + + Name + AnimBlendNode.h + Windows + Text + + + + Name + AnimBlendSequence.cpp + Windows + Text + Debug + + + Name + AnimBlendSequence.h + Windows + Text + + + + Name + AnimManager.cpp + Windows + Text + Debug + + + Name + AnimManager.h + Windows + Text + + + + Name + Bones.cpp + Windows + Text + Debug + + + Name + Bones.h + Windows + Text + + + + Name + CutsceneMgr.cpp + Windows + Text + Debug + + + Name + CutsceneMgr.h + Windows + Text + + + + Name + FrameUpdate.cpp + Windows + Text + Debug + + + Name + RpAnimBlend.cpp + Windows + Text + Debug + + + Name + RpAnimBlend.h + Windows + Text + + + + Name + audio_enums.h + Windows + Text + + + + Name + AudioCollision.cpp + Windows + Text + Debug + + + Name + AudioCollision.h + Windows + Text + + + + Name + AudioLogic.cpp + Windows + Text + + + + Name + AudioManager.cpp + Windows + Text + Debug + + + Name + AudioManager.h + Windows + Text + + + + Name + AudioSamples.h + Windows + Text + + + + Name + AudioScriptObject.cpp + Windows + Text + Debug + + + Name + AudioScriptObject.h + Windows + Text + + + + Name + DMAudio.cpp + Windows + Text + Debug + + + Name + DMAudio.h + Windows + Text + + + + Name + MusicManager.cpp + Windows + Text + Debug + + + Name + MusicManager.h + Windows + Text + + + + Name + PolRadio.cpp + Windows + Text + Debug + + + Name + PolRadio.h + Windows + Text + + + + Name + sampman.h + Windows + Text + + + + Name + sampman_miles.cpp + Windows + Text + Debug + + + Name + soundlist.h + Windows + Text + + + + Name + eax.h + Windows + Text + + + + Name + eax-util.cpp + Windows + Text + Debug + + + Name + eax-util.h + Windows + Text + + + + Name + Building.cpp + Windows + Text + Debug + + + Name + Building.h + Windows + Text + + + + Name + Solid.h + Windows + Text + + + + Name + Treadable.cpp + Windows + Text + Debug + + + Name + Treadable.h + Windows + Text + + + + Name + ColBox.cpp + Windows + Text + Debug + + + Name + ColBox.h + Windows + Text + + + + Name + ColLine.cpp + Windows + Text + Debug + + + Name + ColLine.h + Windows + Text + + + + Name + Collision.cpp + Windows + Text + Debug + + + Name + Collision.h + Windows + Text + + + + Name + ColModel.cpp + Windows + Text + Debug + + + Name + ColModel.h + Windows + Text + + + + Name + ColPoint.cpp + Windows + Text + Debug + + + Name + ColPoint.h + Windows + Text + + + + Name + ColSphere.cpp + Windows + Text + Debug + + + Name + ColSphere.h + Windows + Text + + + + Name + ColStore.cpp + Windows + Text + Debug + + + Name + ColStore.h + Windows + Text + + + + Name + ColTriangle.cpp + Windows + Text + Debug + + + Name + ColTriangle.h + Windows + Text + + + + Name + CompressedVector.h + Windows + Text + + + + Name + TempColModels.cpp + Windows + Text + Debug + + + Name + TempColModels.h + Windows + Text + + + + Name + VuCollision.cpp + Windows + Text + Debug + + + Name + VuCollision.h + Windows + Text + + + + Name + AutoPilot.cpp + Windows + Text + Debug + + + Name + AutoPilot.h + Windows + Text + + + + Name + Bridge.cpp + Windows + Text + Debug + + + Name + Bridge.h + Windows + Text + + + + Name + CarAI.cpp + Windows + Text + Debug + + + Name + CarAI.h + Windows + Text + + + + Name + CarCtrl.cpp + Windows + Text + Debug + + + Name + CarCtrl.h + Windows + Text + + + + Name + Curves.cpp + Windows + Text + Debug + + + Name + Curves.h + Windows + Text + + + + Name + Darkel.cpp + Windows + Text + Debug + + + Name + Darkel.h + Windows + Text + + + + Name + GameLogic.cpp + Windows + Text + Debug + + + Name + GameLogic.h + Windows + Text + + + + Name + Garages.cpp + Windows + Text + Debug + + + Name + Garages.h + Windows + Text + + + + Name + NameGrid.cpp + Windows + Text + Debug + + + Name + NameGrid.h + Windows + Text + + + + Name + OnscreenTimer.cpp + Windows + Text + Debug + + + Name + OnscreenTimer.h + Windows + Text + + + + Name + PathFind.cpp + Windows + Text + Debug + + + Name + PathFind.h + Windows + Text + + + + Name + Phones.cpp + Windows + Text + Debug + + + Name + Phones.h + Windows + Text + + + + Name + Pickups.cpp + Windows + Text + Debug + + + Name + Pickups.h + Windows + Text + + + + Name + PowerPoints.cpp + Windows + Text + Debug + + + Name + PowerPoints.h + Windows + Text + + + + Name + Record.cpp + Windows + Text + Debug + + + Name + Record.h + Windows + Text + + + + Name + Remote.cpp + Windows + Text + Debug + + + Name + Remote.h + Windows + Text + + + + Name + Replay.cpp + Windows + Text + Debug + + + Name + Replay.h + Windows + Text + + + + Name + Restart.cpp + Windows + Text + Debug + + + Name + Restart.h + Windows + Text + + + + Name + RoadBlocks.cpp + Windows + Text + Debug + + + Name + RoadBlocks.h + Windows + Text + + + + Name + SceneEdit.cpp + Windows + Text + Debug + + + Name + SceneEdit.h + Windows + Text + + + + Name + Script.cpp + Windows + Text + Debug + + + Name + Script.h + Windows + Text + + + + Name + Script2.cpp + Windows + Text + Debug + + + Name + Script3.cpp + Windows + Text + Debug + + + Name + Script4.cpp + Windows + Text + Debug + + + Name + Script5.cpp + Windows + Text + Debug + + + Name + Script6.cpp + Windows + Text + Debug + + + Name + Script7.cpp + Windows + Text + Debug + + + Name + Script8.cpp + Windows + Text + Debug + + + Name + ScriptCommands.h + Windows + Text + + + + Name + SetPieces.cpp + Windows + Text + Debug + + + Name + SetPieces.h + Windows + Text + + + + Name + TrafficLights.cpp + Windows + Text + Debug + + + Name + TrafficLights.h + Windows + Text + + + + Name + Accident.cpp + Windows + Text + Debug + + + Name + Accident.h + Windows + Text + + + + Name + AnimViewer.cpp + Windows + Text + Debug + + + Name + AnimViewer.h + Windows + Text + + + + Name + Cam.cpp + Windows + Text + Debug + + + Name + Camera.cpp + Windows + Text + Debug + + + Name + Camera.h + Windows + Text + + + + Name + CdStream.cpp + Windows + Text + Debug + + + Name + CdStream.h + Windows + Text + + + + Name + CdStreamPosix.cpp + Windows + Text + Debug + + + Name + Clock.cpp + Windows + Text + Debug + + + Name + Clock.h + Windows + Text + + + + Name + common.h + Windows + Text + + + + Name + config.h + Windows + Text + + + + Name + ControllerConfig.cpp + Windows + Text + Debug + + + Name + ControllerConfig.h + Windows + Text + + + + Name + Crime.h + Windows + Text + + + + Name + Debug.cpp + Windows + Text + Debug + + + Name + Debug.h + Windows + Text + + + + Name + Directory.cpp + Windows + Text + Debug + + + Name + Directory.h + Windows + Text + + + + Name + EventList.cpp + Windows + Text + Debug + + + Name + EventList.h + Windows + Text + + + + Name + FileLoader.cpp + Windows + Text + Debug + + + Name + FileLoader.h + Windows + Text + + + + Name + FileMgr.cpp + Windows + Text + Debug + + + Name + FileMgr.h + Windows + Text + + + + Name + Fire.cpp + Windows + Text + Debug + + + Name + Fire.h + Windows + Text + + + + Name + Frontend.cpp + Windows + Text + Debug + + + Name + Frontend.h + Windows + Text + + + + Name + Frontend_PS2.cpp + Windows + Text + Debug + + + Name + Frontend_PS2.h + Windows + Text + + + + Name + FrontEndControls.cpp + Windows + Text + Debug + + + Name + FrontEndControls.h + Windows + Text + + + + Name + FrontendTriggers.h + Windows + Text + + + + Name + Game.cpp + Windows + Text + Debug + + + Name + Game.h + Windows + Text + + + + Name + General.h + Windows + Text + + + + Name + IniFile.cpp + Windows + Text + Debug + + + Name + IniFile.h + Windows + Text + + + + Name + Lists.cpp + Windows + Text + Debug + + + Name + Lists.h + Windows + Text + + + + Name + main.cpp + Windows + Text + Debug + + + Name + main.h + Windows + Text + + + + Name + MenuScreens.cpp + Windows + Text + Debug + + + Name + MenuScreensCustom.cpp + Windows + Text + Debug + + + Name + obrstr.cpp + Windows + Text + Debug + + + Name + obrstr.h + Windows + Text + + + + Name + Pad.cpp + Windows + Text + Debug + + + Name + Pad.h + Windows + Text + + + + Name + Placeable.cpp + Windows + Text + Debug + + + Name + Placeable.h + Windows + Text + + + + Name + PlayerInfo.cpp + Windows + Text + Debug + + + Name + PlayerInfo.h + Windows + Text + + + + Name + Pools.cpp + Windows + Text + Debug + + + Name + Pools.h + Windows + Text + + + + Name + Profile.cpp + Windows + Text + Debug + + + Name + Profile.h + Windows + Text + + + + Name + Radar.cpp + Windows + Text + Debug + + + Name + Radar.h + Windows + Text + + + + Name + Range2D.cpp + Windows + Text + Debug + + + Name + Range2D.h + Windows + Text + + + + Name + Range3D.cpp + Windows + Text + Debug + + + Name + Range3D.h + Windows + Text + + + + Name + re3.cpp + Windows + Text + Debug + + + Name + References.cpp + Windows + Text + Debug + + + Name + References.h + Windows + Text + + + + Name + Ropes.cpp + Windows + Text + Debug + + + Name + Ropes.h + Windows + Text + + + + Name + Stats.cpp + Windows + Text + Debug + + + Name + Stats.h + Windows + Text + + + + Name + Streaming.cpp + Windows + Text + Debug + + + Name + Streaming.h + Windows + Text + + + + Name + SurfaceTable.cpp + Windows + Text + Debug + + + Name + SurfaceTable.h + Windows + Text + + + + Name + templates.h + Windows + Text + + + + Name + timebars.cpp + Windows + Text + Debug + + + Name + timebars.h + Windows + Text + + + + Name + Timer.cpp + Windows + Text + Debug + + + Name + Timer.h + Windows + Text + + + + Name + TimeStep.cpp + Windows + Text + Debug + + + Name + TimeStep.h + Windows + Text + + + + Name + User.cpp + Windows + Text + Debug + + + Name + User.h + Windows + Text + + + + Name + Wanted.cpp + Windows + Text + Debug + + + Name + Wanted.h + Windows + Text + + + + Name + World.cpp + Windows + Text + Debug + + + Name + World.h + Windows + Text + + + + Name + ZoneCull.cpp + Windows + Text + Debug + + + Name + ZoneCull.h + Windows + Text + + + + Name + Zones.cpp + Windows + Text + Debug + + + Name + Zones.h + Windows + Text + + + + Name + Dummy.cpp + Windows + Text + Debug + + + Name + Dummy.h + Windows + Text + + + + Name + Entity.cpp + Windows + Text + Debug + + + Name + Entity.h + Windows + Text + + + + Name + Physical.cpp + Windows + Text + Debug + + + Name + Physical.h + Windows + Text + + + + Name + math.cpp + Windows + Text + Debug + + + Name + maths.h + Windows + Text + + + + Name + Matrix.cpp + Windows + Text + Debug + + + Name + Matrix.h + Windows + Text + + + + Name + Quaternion.cpp + Windows + Text + Debug + + + Name + Quaternion.h + Windows + Text + + + + Name + Rect.cpp + Windows + Text + Debug + + + Name + Rect.h + Windows + Text + + + + Name + Vector.cpp + Windows + Text + Debug + + + Name + Vector.h + Windows + Text + + + + Name + Vector2D.h + Windows + Text + + + + Name + VuVector.h + Windows + Text + + + + Name + BaseModelInfo.cpp + Windows + Text + Debug + + + Name + BaseModelInfo.h + Windows + Text + + + + Name + ClumpModelInfo.cpp + Windows + Text + Debug + + + Name + ClumpModelInfo.h + Windows + Text + + + + Name + ModelIndices.cpp + Windows + Text + Debug + + + Name + ModelIndices.h + Windows + Text + + + + Name + ModelInfo.cpp + Windows + Text + Debug + + + Name + ModelInfo.h + Windows + Text + + + + Name + PedModelInfo.cpp + Windows + Text + Debug + + + Name + PedModelInfo.h + Windows + Text + + + + Name + SimpleModelInfo.cpp + Windows + Text + Debug + + + Name + SimpleModelInfo.h + Windows + Text + + + + Name + TimeModelInfo.cpp + Windows + Text + Debug + + + Name + TimeModelInfo.h + Windows + Text + + + + Name + VehicleModelInfo.cpp + Windows + Text + Debug + + + Name + VehicleModelInfo.h + Windows + Text + + + + Name + WeaponModelInfo.cpp + Windows + Text + Debug + + + Name + WeaponModelInfo.h + Windows + Text + + + + Name + CutsceneObject.cpp + Windows + Text + Debug + + + Name + CutsceneObject.h + Windows + Text + + + + Name + DummyObject.cpp + Windows + Text + Debug + + + Name + DummyObject.h + Windows + Text + + + + Name + Object.cpp + Windows + Text + Debug + + + Name + Object.h + Windows + Text + + + + Name + ObjectData.cpp + Windows + Text + Debug + + + Name + ObjectData.h + Windows + Text + + + + Name + ParticleObject.cpp + Windows + Text + Debug + + + Name + ParticleObject.h + Windows + Text + + + + Name + Projectile.cpp + Windows + Text + Debug + + + Name + Projectile.h + Windows + Text + + + + Name + Stinger.cpp + Windows + Text + Debug + + + Name + Stinger.h + Windows + Text + + + + Name + CivilianPed.cpp + Windows + Text + Debug + + + Name + CivilianPed.h + Windows + Text + + + + Name + CopPed.cpp + Windows + Text + Debug + + + Name + CopPed.h + Windows + Text + + + + Name + DummyPed.h + Windows + Text + + + + Name + EmergencyPed.cpp + Windows + Text + Debug + + + Name + EmergencyPed.h + Windows + Text + + + + Name + Gangs.cpp + Windows + Text + Debug + + + Name + Gangs.h + Windows + Text + + + + Name + Ped.cpp + Windows + Text + Debug + + + Name + Ped.h + Windows + Text + + + + Name + PedAI.cpp + Windows + Text + Debug + + + Name + PedAttractor.cpp + Windows + Text + Debug + + + Name + PedAttractor.h + Windows + Text + + + + Name + PedChat.cpp + Windows + Text + Debug + + + Name + PedDebug.cpp + Windows + Text + Debug + + + Name + PedFight.cpp + Windows + Text + Debug + + + Name + PedIK.cpp + Windows + Text + Debug + + + Name + PedIK.h + Windows + Text + + + + Name + PedPlacement.cpp + Windows + Text + Debug + + + Name + PedPlacement.h + Windows + Text + + + + Name + PedRoutes.cpp + Windows + Text + Debug + + + Name + PedRoutes.h + Windows + Text + + + + Name + PedType.cpp + Windows + Text + Debug + + + Name + PedType.h + Windows + Text + + + + Name + PlayerPed.cpp + Windows + Text + Debug + + + Name + PlayerPed.h + Windows + Text + + + + Name + Population.cpp + Windows + Text + Debug + + + Name + Population.h + Windows + Text + + + + Name + 2dEffect.h + Windows + Text + + + + Name + Antennas.cpp + Windows + Text + Debug + + + Name + Antennas.h + Windows + Text + + + + Name + Clouds.cpp + Windows + Text + Debug + + + Name + Clouds.h + Windows + Text + + + + Name + Console.cpp + Windows + Text + Debug + + + Name + Console.h + Windows + Text + + + + Name + Coronas.cpp + Windows + Text + Debug + + + Name + Coronas.h + Windows + Text + + + + Name + Credits.cpp + Windows + Text + Debug + + + Name + Credits.h + Windows + Text + + + + Name + CutsceneShadow.cpp + Windows + Text + Debug + + + Name + CutsceneShadow.h + Windows + Text + + + + Name + Draw.cpp + Windows + Text + Debug + + + Name + Draw.h + Windows + Text + + + + Name + Fluff.cpp + Windows + Text + Debug + + + Name + Fluff.h + Windows + Text + + + + Name + Font.cpp + Windows + Text + Debug + + + Name + Font.h + Windows + Text + + + + Name + Glass.cpp + Windows + Text + Debug + + + Name + Glass.h + Windows + Text + + + + Name + Hud.cpp + Windows + Text + Debug + + + Name + Hud.h + Windows + Text + + + + Name + Instance.cpp + Windows + Text + Debug + + + Name + Instance.h + Windows + Text + + + + Name + Lines.cpp + Windows + Text + Debug + + + Name + Lines.h + Windows + Text + + + + Name + MBlur.cpp + Windows + Text + Debug + + + Name + MBlur.h + Windows + Text + + + + Name + Occlusion.cpp + Windows + Text + Debug + + + Name + Occlusion.h + Windows + Text + + + + Name + Particle.cpp + Windows + Text + Debug + + + Name + Particle.h + Windows + Text + + + + Name + ParticleMgr.cpp + Windows + Text + Debug + + + Name + ParticleMgr.h + Windows + Text + + + + Name + ParticleType.h + Windows + Text + + + + Name + PlayerSkin.cpp + Windows + Text + Debug + + + Name + PlayerSkin.h + Windows + Text + + + + Name + PointLights.cpp + Windows + Text + Debug + + + Name + PointLights.h + Windows + Text + + + + Name + RenderBuffer.cpp + Windows + Text + Debug + + + Name + RenderBuffer.h + Windows + Text + + + + Name + Renderer.cpp + Windows + Text + Debug + + + Name + Renderer.h + Windows + Text + + + + Name + Rubbish.cpp + Windows + Text + Debug + + + Name + Rubbish.h + Windows + Text + + + + Name + ShadowCamera.cpp + Windows + Text + Debug + + + Name + ShadowCamera.h + Windows + Text + + + + Name + Shadows.cpp + Windows + Text + Debug + + + Name + Shadows.h + Windows + Text + + + + Name + Skidmarks.cpp + Windows + Text + Debug + + + Name + Skidmarks.h + Windows + Text + + + + Name + SpecialFX.cpp + Windows + Text + Debug + + + Name + SpecialFX.h + Windows + Text + + + + Name + Sprite.cpp + Windows + Text + Debug + + + Name + Sprite.h + Windows + Text + + + + Name + Sprite2d.cpp + Windows + Text + Debug + + + Name + Sprite2d.h + Windows + Text + + + + Name + TexList.cpp + Windows + Text + Debug + + + Name + TexList.h + Windows + Text + + + + Name + Timecycle.cpp + Windows + Text + Debug + + + Name + Timecycle.h + Windows + Text + + + + Name + VarConsole.cpp + Windows + Text + Debug + + + Name + VarConsole.h + Windows + Text + + + + Name + WaterCannon.cpp + Windows + Text + Debug + + + Name + WaterCannon.h + Windows + Text + + + + Name + WaterCreatures.cpp + Windows + Text + Debug + + + Name + WaterCreatures.h + Windows + Text + + + + Name + WaterLevel.cpp + Windows + Text + Debug + + + Name + WaterLevel.h + Windows + Text + + + + Name + Weather.cpp + Windows + Text + Debug + + + Name + Weather.h + Windows + Text + + + + Name + WindModifiers.cpp + Windows + Text + Debug + + + Name + WindModifiers.h + Windows + Text + + + + Name + ClumpRead.cpp + Windows + Text + Debug + + + Name + Lights.cpp + Windows + Text + Debug + + + Name + Lights.h + Windows + Text + + + + Name + MemoryHeap.cpp + Windows + Text + Debug + + + Name + MemoryHeap.h + Windows + Text + + + + Name + MemoryMgr.cpp + Windows + Text + Debug + + + Name + MemoryMgr.h + Windows + Text + + + + Name + NodeName.cpp + Windows + Text + Debug + + + Name + NodeName.h + Windows + Text + + + + Name + RwHelper.cpp + Windows + Text + Debug + + + Name + RwHelper.h + Windows + Text + + + + Name + RwMatFX.cpp + Windows + Text + Debug + + + Name + RwPS2AlphaTest.cpp + Windows + Text + Debug + + + Name + TexRead.cpp + Windows + Text + Debug + + + Name + TexturePools.cpp + Windows + Text + Debug + + + Name + TexturePools.h + Windows + Text + + + + Name + TxdStore.cpp + Windows + Text + Debug + + + Name + TxdStore.h + Windows + Text + + + + Name + VisibilityPlugins.cpp + Windows + Text + Debug + + + Name + VisibilityPlugins.h + Windows + Text + + + + Name + Date.cpp + Windows + Text + Debug + + + Name + Date.h + Windows + Text + + + + Name + GenericGameStorage.cpp + Windows + Text + Debug + + + Name + GenericGameStorage.h + Windows + Text + + + + Name + MemoryCard.cpp + Windows + Text + Debug + + + Name + MemoryCard.h + Windows + Text + + + + Name + PCSave.cpp + Windows + Text + Debug + + + Name + PCSave.h + Windows + Text + + + + Name + crossplatform.cpp + Windows + Text + Debug + + + Name + crossplatform.h + Windows + Text + + + + Name + events.cpp + Windows + Text + Debug + + + Name + events.h + Windows + Text + + + + Name + platform.h + Windows + Text + + + + Name + skeleton.cpp + Windows + Text + Debug + + + Name + skeleton.h + Windows + Text + + + + Name + resource.h + Windows + Text + + + + Name + win.cpp + Windows + Text + Debug + + + Name + win.h + Windows + Text + + + + Name + win.rc + Windows + Text + Debug + + + Name + Messages.cpp + Windows + Text + Debug + + + Name + Messages.h + Windows + Text + + + + Name + Pager.cpp + Windows + Text + Debug + + + Name + Pager.h + Windows + Text + + + + Name + Text.cpp + Windows + Text + Debug + + + Name + Text.h + Windows + Text + + + + Name + Automobile.cpp + Windows + Text + Debug + + + Name + Automobile.h + Windows + Text + + + + Name + Bike.cpp + Windows + Text + Debug + + + Name + Bike.h + Windows + Text + + + + Name + Boat.cpp + Windows + Text + Debug + + + Name + Boat.h + Windows + Text + + + + Name + CarGen.cpp + Windows + Text + Debug + + + Name + CarGen.h + Windows + Text + + + + Name + Cranes.cpp + Windows + Text + Debug + + + Name + Cranes.h + Windows + Text + + + + Name + DamageManager.cpp + Windows + Text + Debug + + + Name + DamageManager.h + Windows + Text + + + + Name + Door.cpp + Windows + Text + Debug + + + Name + Door.h + Windows + Text + + + + Name + Floater.cpp + Windows + Text + Debug + + + Name + Floater.h + Windows + Text + + + + Name + HandlingMgr.cpp + Windows + Text + Debug + + + Name + HandlingMgr.h + Windows + Text + + + + Name + Heli.cpp + Windows + Text + Debug + + + Name + Heli.h + Windows + Text + + + + Name + Plane.cpp + Windows + Text + Debug + + + Name + Plane.h + Windows + Text + + + + Name + Train.cpp + Windows + Text + Debug + + + Name + Train.h + Windows + Text + + + + Name + Transmission.cpp + Windows + Text + Debug + + + Name + Transmission.h + Windows + Text + + + + Name + Vehicle.cpp + Windows + Text + Debug + + + Name + Vehicle.h + Windows + Text + + + + Name + BulletInfo.cpp + Windows + Text + Debug + + + Name + BulletInfo.h + Windows + Text + + + + Name + Explosion.cpp + Windows + Text + Debug + + + Name + Explosion.h + Windows + Text + + + + Name + ProjectileInfo.cpp + Windows + Text + Debug + + + Name + ProjectileInfo.h + Windows + Text + + + + Name + ShotInfo.cpp + Windows + Text + Debug + + + Name + ShotInfo.h + Windows + Text + + + + Name + Weapon.cpp + Windows + Text + Debug + + + Name + Weapon.h + Windows + Text + + + + Name + WeaponEffects.cpp + Windows + Text + Debug + + + Name + WeaponEffects.h + Windows + Text + + + + Name + WeaponInfo.cpp + Windows + Text + Debug + + + Name + WeaponInfo.h + Windows + Text + + + + Name + WeaponType.h + Windows + Text + + + + + + Name + AnimationId.h + Windows + + + Name + AnimBlendAssocGroup.cpp + Windows + + + Name + AnimBlendAssocGroup.h + Windows + + + Name + AnimBlendAssociation.cpp + Windows + + + Name + AnimBlendAssociation.h + Windows + + + Name + AnimBlendClumpData.cpp + Windows + + + Name + AnimBlendClumpData.h + Windows + + + Name + AnimBlendHierarchy.cpp + Windows + + + Name + AnimBlendHierarchy.h + Windows + + + Name + AnimBlendList.h + Windows + + + Name + AnimBlendNode.cpp + Windows + + + Name + AnimBlendNode.h + Windows + + + Name + AnimBlendSequence.cpp + Windows + + + Name + AnimBlendSequence.h + Windows + + + Name + AnimManager.cpp + Windows + + + Name + AnimManager.h + Windows + + + Name + Bones.cpp + Windows + + + Name + Bones.h + Windows + + + Name + CutsceneMgr.cpp + Windows + + + Name + CutsceneMgr.h + Windows + + + Name + FrameUpdate.cpp + Windows + + + Name + RpAnimBlend.cpp + Windows + + + Name + RpAnimBlend.h + Windows + + + Name + audio_enums.h + Windows + + + Name + AudioCollision.cpp + Windows + + + Name + AudioCollision.h + Windows + + + Name + AudioLogic.cpp + Windows + + + Name + AudioManager.cpp + Windows + + + Name + AudioManager.h + Windows + + + Name + AudioSamples.h + Windows + + + Name + AudioScriptObject.cpp + Windows + + + Name + AudioScriptObject.h + Windows + + + Name + DMAudio.cpp + Windows + + + Name + DMAudio.h + Windows + + + Name + MusicManager.cpp + Windows + + + Name + MusicManager.h + Windows + + + Name + PolRadio.cpp + Windows + + + Name + PolRadio.h + Windows + + + Name + sampman.h + Windows + + + Name + sampman_miles.cpp + Windows + + + Name + soundlist.h + Windows + + + Name + eax.h + Windows + + + Name + eax-util.cpp + Windows + + + Name + eax-util.h + Windows + + + Name + Building.cpp + Windows + + + Name + Building.h + Windows + + + Name + Solid.h + Windows + + + Name + Treadable.cpp + Windows + + + Name + Treadable.h + Windows + + + Name + ColBox.cpp + Windows + + + Name + ColBox.h + Windows + + + Name + ColLine.cpp + Windows + + + Name + ColLine.h + Windows + + + Name + Collision.cpp + Windows + + + Name + Collision.h + Windows + + + Name + ColModel.cpp + Windows + + + Name + ColModel.h + Windows + + + Name + ColPoint.cpp + Windows + + + Name + ColPoint.h + Windows + + + Name + ColSphere.cpp + Windows + + + Name + ColSphere.h + Windows + + + Name + ColStore.cpp + Windows + + + Name + ColStore.h + Windows + + + Name + ColTriangle.cpp + Windows + + + Name + ColTriangle.h + Windows + + + Name + CompressedVector.h + Windows + + + Name + TempColModels.cpp + Windows + + + Name + TempColModels.h + Windows + + + Name + VuCollision.cpp + Windows + + + Name + VuCollision.h + Windows + + + Name + AutoPilot.cpp + Windows + + + Name + AutoPilot.h + Windows + + + Name + Bridge.cpp + Windows + + + Name + Bridge.h + Windows + + + Name + CarAI.cpp + Windows + + + Name + CarAI.h + Windows + + + Name + CarCtrl.cpp + Windows + + + Name + CarCtrl.h + Windows + + + Name + Curves.cpp + Windows + + + Name + Curves.h + Windows + + + Name + Darkel.cpp + Windows + + + Name + Darkel.h + Windows + + + Name + GameLogic.cpp + Windows + + + Name + GameLogic.h + Windows + + + Name + Garages.cpp + Windows + + + Name + Garages.h + Windows + + + Name + NameGrid.cpp + Windows + + + Name + NameGrid.h + Windows + + + Name + OnscreenTimer.cpp + Windows + + + Name + OnscreenTimer.h + Windows + + + Name + PathFind.cpp + Windows + + + Name + PathFind.h + Windows + + + Name + Phones.cpp + Windows + + + Name + Phones.h + Windows + + + Name + Pickups.cpp + Windows + + + Name + Pickups.h + Windows + + + Name + PowerPoints.cpp + Windows + + + Name + PowerPoints.h + Windows + + + Name + Record.cpp + Windows + + + Name + Record.h + Windows + + + Name + Remote.cpp + Windows + + + Name + Remote.h + Windows + + + Name + Replay.cpp + Windows + + + Name + Replay.h + Windows + + + Name + Restart.cpp + Windows + + + Name + Restart.h + Windows + + + Name + RoadBlocks.cpp + Windows + + + Name + RoadBlocks.h + Windows + + + Name + SceneEdit.cpp + Windows + + + Name + SceneEdit.h + Windows + + + Name + Script.cpp + Windows + + + Name + Script.h + Windows + + + Name + Script2.cpp + Windows + + + Name + Script3.cpp + Windows + + + Name + Script4.cpp + Windows + + + Name + Script5.cpp + Windows + + + Name + Script6.cpp + Windows + + + Name + Script7.cpp + Windows + + + Name + Script8.cpp + Windows + + + Name + ScriptCommands.h + Windows + + + Name + SetPieces.cpp + Windows + + + Name + SetPieces.h + Windows + + + Name + TrafficLights.cpp + Windows + + + Name + TrafficLights.h + Windows + + + Name + Accident.cpp + Windows + + + Name + Accident.h + Windows + + + Name + AnimViewer.cpp + Windows + + + Name + AnimViewer.h + Windows + + + Name + Cam.cpp + Windows + + + Name + Camera.cpp + Windows + + + Name + Camera.h + Windows + + + Name + CdStream.cpp + Windows + + + Name + CdStream.h + Windows + + + Name + CdStreamPosix.cpp + Windows + + + Name + Clock.cpp + Windows + + + Name + Clock.h + Windows + + + Name + common.h + Windows + + + Name + config.h + Windows + + + Name + ControllerConfig.cpp + Windows + + + Name + ControllerConfig.h + Windows + + + Name + Crime.h + Windows + + + Name + Debug.cpp + Windows + + + Name + Debug.h + Windows + + + Name + Directory.cpp + Windows + + + Name + Directory.h + Windows + + + Name + EventList.cpp + Windows + + + Name + EventList.h + Windows + + + Name + FileLoader.cpp + Windows + + + Name + FileLoader.h + Windows + + + Name + FileMgr.cpp + Windows + + + Name + FileMgr.h + Windows + + + Name + Fire.cpp + Windows + + + Name + Fire.h + Windows + + + Name + Frontend.cpp + Windows + + + Name + Frontend.h + Windows + + + Name + Frontend_PS2.cpp + Windows + + + Name + Frontend_PS2.h + Windows + + + Name + FrontEndControls.cpp + Windows + + + Name + FrontEndControls.h + Windows + + + Name + FrontendTriggers.h + Windows + + + Name + Game.cpp + Windows + + + Name + Game.h + Windows + + + Name + General.h + Windows + + + Name + IniFile.cpp + Windows + + + Name + IniFile.h + Windows + + + Name + Lists.cpp + Windows + + + Name + Lists.h + Windows + + + Name + main.cpp + Windows + + + Name + main.h + Windows + + + Name + MenuScreens.cpp + Windows + + + Name + MenuScreensCustom.cpp + Windows + + + Name + obrstr.cpp + Windows + + + Name + obrstr.h + Windows + + + Name + Pad.cpp + Windows + + + Name + Pad.h + Windows + + + Name + Placeable.cpp + Windows + + + Name + Placeable.h + Windows + + + Name + PlayerInfo.cpp + Windows + + + Name + PlayerInfo.h + Windows + + + Name + Pools.cpp + Windows + + + Name + Pools.h + Windows + + + Name + Profile.cpp + Windows + + + Name + Profile.h + Windows + + + Name + Radar.cpp + Windows + + + Name + Radar.h + Windows + + + Name + Range2D.cpp + Windows + + + Name + Range2D.h + Windows + + + Name + Range3D.cpp + Windows + + + Name + Range3D.h + Windows + + + Name + re3.cpp + Windows + + + Name + References.cpp + Windows + + + Name + References.h + Windows + + + Name + Ropes.cpp + Windows + + + Name + Ropes.h + Windows + + + Name + Stats.cpp + Windows + + + Name + Stats.h + Windows + + + Name + Streaming.cpp + Windows + + + Name + Streaming.h + Windows + + + Name + SurfaceTable.cpp + Windows + + + Name + SurfaceTable.h + Windows + + + Name + templates.h + Windows + + + Name + timebars.cpp + Windows + + + Name + timebars.h + Windows + + + Name + Timer.cpp + Windows + + + Name + Timer.h + Windows + + + Name + TimeStep.cpp + Windows + + + Name + TimeStep.h + Windows + + + Name + User.cpp + Windows + + + Name + User.h + Windows + + + Name + Wanted.cpp + Windows + + + Name + Wanted.h + Windows + + + Name + World.cpp + Windows + + + Name + World.h + Windows + + + Name + ZoneCull.cpp + Windows + + + Name + ZoneCull.h + Windows + + + Name + Zones.cpp + Windows + + + Name + Zones.h + Windows + + + Name + Dummy.cpp + Windows + + + Name + Dummy.h + Windows + + + Name + Entity.cpp + Windows + + + Name + Entity.h + Windows + + + Name + Physical.cpp + Windows + + + Name + Physical.h + Windows + + + Name + math.cpp + Windows + + + Name + maths.h + Windows + + + Name + Matrix.cpp + Windows + + + Name + Matrix.h + Windows + + + Name + Quaternion.cpp + Windows + + + Name + Quaternion.h + Windows + + + Name + Rect.cpp + Windows + + + Name + Rect.h + Windows + + + Name + Vector.cpp + Windows + + + Name + Vector.h + Windows + + + Name + Vector2D.h + Windows + + + Name + VuVector.h + Windows + + + Name + BaseModelInfo.cpp + Windows + + + Name + BaseModelInfo.h + Windows + + + Name + ClumpModelInfo.cpp + Windows + + + Name + ClumpModelInfo.h + Windows + + + Name + ModelIndices.cpp + Windows + + + Name + ModelIndices.h + Windows + + + Name + ModelInfo.cpp + Windows + + + Name + ModelInfo.h + Windows + + + Name + PedModelInfo.cpp + Windows + + + Name + PedModelInfo.h + Windows + + + Name + SimpleModelInfo.cpp + Windows + + + Name + SimpleModelInfo.h + Windows + + + Name + TimeModelInfo.cpp + Windows + + + Name + TimeModelInfo.h + Windows + + + Name + VehicleModelInfo.cpp + Windows + + + Name + VehicleModelInfo.h + Windows + + + Name + WeaponModelInfo.cpp + Windows + + + Name + WeaponModelInfo.h + Windows + + + Name + CutsceneObject.cpp + Windows + + + Name + CutsceneObject.h + Windows + + + Name + DummyObject.cpp + Windows + + + Name + DummyObject.h + Windows + + + Name + Object.cpp + Windows + + + Name + Object.h + Windows + + + Name + ObjectData.cpp + Windows + + + Name + ObjectData.h + Windows + + + Name + ParticleObject.cpp + Windows + + + Name + ParticleObject.h + Windows + + + Name + Projectile.cpp + Windows + + + Name + Projectile.h + Windows + + + Name + Stinger.cpp + Windows + + + Name + Stinger.h + Windows + + + Name + CivilianPed.cpp + Windows + + + Name + CivilianPed.h + Windows + + + Name + CopPed.cpp + Windows + + + Name + CopPed.h + Windows + + + Name + DummyPed.h + Windows + + + Name + EmergencyPed.cpp + Windows + + + Name + EmergencyPed.h + Windows + + + Name + Gangs.cpp + Windows + + + Name + Gangs.h + Windows + + + Name + Ped.cpp + Windows + + + Name + Ped.h + Windows + + + Name + PedAI.cpp + Windows + + + Name + PedAttractor.cpp + Windows + + + Name + PedAttractor.h + Windows + + + Name + PedChat.cpp + Windows + + + Name + PedDebug.cpp + Windows + + + Name + PedFight.cpp + Windows + + + Name + PedIK.cpp + Windows + + + Name + PedIK.h + Windows + + + Name + PedPlacement.cpp + Windows + + + Name + PedPlacement.h + Windows + + + Name + PedRoutes.cpp + Windows + + + Name + PedRoutes.h + Windows + + + Name + PedType.cpp + Windows + + + Name + PedType.h + Windows + + + Name + PlayerPed.cpp + Windows + + + Name + PlayerPed.h + Windows + + + Name + Population.cpp + Windows + + + Name + Population.h + Windows + + + Name + 2dEffect.h + Windows + + + Name + Antennas.cpp + Windows + + + Name + Antennas.h + Windows + + + Name + Clouds.cpp + Windows + + + Name + Clouds.h + Windows + + + Name + Console.cpp + Windows + + + Name + Console.h + Windows + + + Name + Coronas.cpp + Windows + + + Name + Coronas.h + Windows + + + Name + Credits.cpp + Windows + + + Name + Credits.h + Windows + + + Name + CutsceneShadow.cpp + Windows + + + Name + CutsceneShadow.h + Windows + + + Name + Draw.cpp + Windows + + + Name + Draw.h + Windows + + + Name + Fluff.cpp + Windows + + + Name + Fluff.h + Windows + + + Name + Font.cpp + Windows + + + Name + Font.h + Windows + + + Name + Glass.cpp + Windows + + + Name + Glass.h + Windows + + + Name + Hud.cpp + Windows + + + Name + Hud.h + Windows + + + Name + Instance.cpp + Windows + + + Name + Instance.h + Windows + + + Name + Lines.cpp + Windows + + + Name + Lines.h + Windows + + + Name + MBlur.cpp + Windows + + + Name + MBlur.h + Windows + + + Name + Occlusion.cpp + Windows + + + Name + Occlusion.h + Windows + + + Name + Particle.cpp + Windows + + + Name + Particle.h + Windows + + + Name + ParticleMgr.cpp + Windows + + + Name + ParticleMgr.h + Windows + + + Name + ParticleType.h + Windows + + + Name + PlayerSkin.cpp + Windows + + + Name + PlayerSkin.h + Windows + + + Name + PointLights.cpp + Windows + + + Name + PointLights.h + Windows + + + Name + RenderBuffer.cpp + Windows + + + Name + RenderBuffer.h + Windows + + + Name + Renderer.cpp + Windows + + + Name + Renderer.h + Windows + + + Name + Rubbish.cpp + Windows + + + Name + Rubbish.h + Windows + + + Name + ShadowCamera.cpp + Windows + + + Name + ShadowCamera.h + Windows + + + Name + Shadows.cpp + Windows + + + Name + Shadows.h + Windows + + + Name + Skidmarks.cpp + Windows + + + Name + Skidmarks.h + Windows + + + Name + SpecialFX.cpp + Windows + + + Name + SpecialFX.h + Windows + + + Name + Sprite.cpp + Windows + + + Name + Sprite.h + Windows + + + Name + Sprite2d.cpp + Windows + + + Name + Sprite2d.h + Windows + + + Name + TexList.cpp + Windows + + + Name + TexList.h + Windows + + + Name + Timecycle.cpp + Windows + + + Name + Timecycle.h + Windows + + + Name + VarConsole.cpp + Windows + + + Name + VarConsole.h + Windows + + + Name + WaterCannon.cpp + Windows + + + Name + WaterCannon.h + Windows + + + Name + WaterCreatures.cpp + Windows + + + Name + WaterCreatures.h + Windows + + + Name + WaterLevel.cpp + Windows + + + Name + WaterLevel.h + Windows + + + Name + Weather.cpp + Windows + + + Name + Weather.h + Windows + + + Name + WindModifiers.cpp + Windows + + + Name + WindModifiers.h + Windows + + + Name + ClumpRead.cpp + Windows + + + Name + Lights.cpp + Windows + + + Name + Lights.h + Windows + + + Name + MemoryHeap.cpp + Windows + + + Name + MemoryHeap.h + Windows + + + Name + MemoryMgr.cpp + Windows + + + Name + MemoryMgr.h + Windows + + + Name + NodeName.cpp + Windows + + + Name + NodeName.h + Windows + + + Name + RwHelper.cpp + Windows + + + Name + RwHelper.h + Windows + + + Name + RwMatFX.cpp + Windows + + + Name + RwPS2AlphaTest.cpp + Windows + + + Name + TexRead.cpp + Windows + + + Name + TexturePools.cpp + Windows + + + Name + TexturePools.h + Windows + + + Name + TxdStore.cpp + Windows + + + Name + TxdStore.h + Windows + + + Name + VisibilityPlugins.cpp + Windows + + + Name + VisibilityPlugins.h + Windows + + + Name + Date.cpp + Windows + + + Name + Date.h + Windows + + + Name + GenericGameStorage.cpp + Windows + + + Name + GenericGameStorage.h + Windows + + + Name + MemoryCard.cpp + Windows + + + Name + MemoryCard.h + Windows + + + Name + PCSave.cpp + Windows + + + Name + PCSave.h + Windows + + + Name + crossplatform.cpp + Windows + + + Name + crossplatform.h + Windows + + + Name + events.cpp + Windows + + + Name + events.h + Windows + + + Name + platform.h + Windows + + + Name + skeleton.cpp + Windows + + + Name + skeleton.h + Windows + + + Name + resource.h + Windows + + + Name + win.cpp + Windows + + + Name + win.h + Windows + + + Name + win.rc + Windows + + + Name + Messages.cpp + Windows + + + Name + Messages.h + Windows + + + Name + Pager.cpp + Windows + + + Name + Pager.h + Windows + + + Name + Text.cpp + Windows + + + Name + Text.h + Windows + + + Name + Automobile.cpp + Windows + + + Name + Automobile.h + Windows + + + Name + Bike.cpp + Windows + + + Name + Bike.h + Windows + + + Name + Boat.cpp + Windows + + + Name + Boat.h + Windows + + + Name + CarGen.cpp + Windows + + + Name + CarGen.h + Windows + + + Name + Cranes.cpp + Windows + + + Name + Cranes.h + Windows + + + Name + DamageManager.cpp + Windows + + + Name + DamageManager.h + Windows + + + Name + Door.cpp + Windows + + + Name + Door.h + Windows + + + Name + Floater.cpp + Windows + + + Name + Floater.h + Windows + + + Name + HandlingMgr.cpp + Windows + + + Name + HandlingMgr.h + Windows + + + Name + Heli.cpp + Windows + + + Name + Heli.h + Windows + + + Name + Plane.cpp + Windows + + + Name + Plane.h + Windows + + + Name + Train.cpp + Windows + + + Name + Train.h + Windows + + + Name + Transmission.cpp + Windows + + + Name + Transmission.h + Windows + + + Name + Vehicle.cpp + Windows + + + Name + Vehicle.h + Windows + + + Name + BulletInfo.cpp + Windows + + + Name + BulletInfo.h + Windows + + + Name + Explosion.cpp + Windows + + + Name + Explosion.h + Windows + + + Name + ProjectileInfo.cpp + Windows + + + Name + ProjectileInfo.h + Windows + + + Name + ShotInfo.cpp + Windows + + + Name + ShotInfo.h + Windows + + + Name + Weapon.cpp + Windows + + + Name + Weapon.h + Windows + + + Name + WeaponEffects.cpp + Windows + + + Name + WeaponEffects.h + Windows + + + Name + WeaponInfo.cpp + Windows + + + Name + WeaponInfo.h + Windows + + + Name + WeaponType.h + Windows + + + Name + mss32.lib + Windows + + + Name + d3d8.lib + Windows + + + Name + ddraw.lib + Windows + + + Name + dxguid.lib + Windows + + + Name + strmiids.lib + Windows + + + Name + dinput8.lib + Windows + + + Name + winmm.lib + Windows + + + Name + rwcore.lib + Windows + + + Name + rpworld.lib + Windows + + + Name + rpmatfx.lib + Windows + + + Name + rpskin.lib + Windows + + + Name + rphanim.lib + Windows + + + Name + rtbmp.lib + Windows + + + Name + rtquat.lib + Windows + + + Name + rtcharse.lib + Windows + + + Name + rtanim.lib + Windows + + + Name + rpanisot.lib + Windows + + + Name + MSL_All_x86.lib + MacOS + + + Name + Comdlg32.lib + MacOS + + + Name + Gdi32.lib + MacOS + + + Name + Kernel32.lib + MacOS + + + Name + User32.lib + MacOS + + + Name + ole32.lib + Windows + + + Name + shell32.lib + Windows + + + Name + uuid.lib + Windows + + + + + + + Debug + Release + + + + animation + + Debug + Name + AnimationId.h + Windows + + + Debug + Name + AnimBlendAssocGroup.cpp + Windows + + + Debug + Name + AnimBlendAssocGroup.h + Windows + + + Debug + Name + AnimBlendAssociation.cpp + Windows + + + Debug + Name + AnimBlendAssociation.h + Windows + + + Debug + Name + AnimBlendClumpData.cpp + Windows + + + Debug + Name + AnimBlendClumpData.h + Windows + + + Debug + Name + AnimBlendHierarchy.cpp + Windows + + + Debug + Name + AnimBlendHierarchy.h + Windows + + + Debug + Name + AnimBlendList.h + Windows + + + Debug + Name + AnimBlendNode.cpp + Windows + + + Debug + Name + AnimBlendNode.h + Windows + + + Debug + Name + AnimBlendSequence.cpp + Windows + + + Debug + Name + AnimBlendSequence.h + Windows + + + Debug + Name + AnimManager.cpp + Windows + + + Debug + Name + AnimManager.h + Windows + + + Debug + Name + Bones.cpp + Windows + + + Debug + Name + Bones.h + Windows + + + Debug + Name + CutsceneMgr.cpp + Windows + + + Debug + Name + CutsceneMgr.h + Windows + + + Debug + Name + FrameUpdate.cpp + Windows + + + Debug + Name + RpAnimBlend.cpp + Windows + + + Debug + Name + RpAnimBlend.h + Windows + + + audio + + Debug + Name + audio_enums.h + Windows + + + Debug + Name + AudioCollision.cpp + Windows + + + Debug + Name + AudioCollision.h + Windows + + + Debug + Name + AudioLogic.cpp + Windows + + + Debug + Name + AudioManager.cpp + Windows + + + Debug + Name + AudioManager.h + Windows + + + Debug + Name + AudioSamples.h + Windows + + + Debug + Name + AudioScriptObject.cpp + Windows + + + Debug + Name + AudioScriptObject.h + Windows + + + Debug + Name + DMAudio.cpp + Windows + + + Debug + Name + DMAudio.h + Windows + + + Debug + Name + MusicManager.cpp + Windows + + + Debug + Name + MusicManager.h + Windows + + + Debug + Name + PolRadio.cpp + Windows + + + Debug + Name + PolRadio.h + Windows + + + Debug + Name + sampman.h + Windows + + + Debug + Name + sampman_miles.cpp + Windows + + + Debug + Name + soundlist.h + Windows + + + Debug + Name + eax.h + Windows + + + Debug + Name + eax-util.cpp + Windows + + + Debug + Name + eax-util.h + Windows + + + buildings + + Debug + Name + Building.cpp + Windows + + + Debug + Name + Building.h + Windows + + + Debug + Name + Solid.h + Windows + + + Debug + Name + Treadable.cpp + Windows + + + Debug + Name + Treadable.h + Windows + + + collision + + Debug + Name + ColBox.cpp + Windows + + + Debug + Name + ColBox.h + Windows + + + Debug + Name + ColLine.cpp + Windows + + + Debug + Name + ColLine.h + Windows + + + Debug + Name + Collision.cpp + Windows + + + Debug + Name + Collision.h + Windows + + + Debug + Name + ColModel.cpp + Windows + + + Debug + Name + ColModel.h + Windows + + + Debug + Name + ColPoint.cpp + Windows + + + Debug + Name + ColPoint.h + Windows + + + Debug + Name + ColSphere.cpp + Windows + + + Debug + Name + ColSphere.h + Windows + + + Debug + Name + ColStore.cpp + Windows + + + Debug + Name + ColStore.h + Windows + + + Debug + Name + ColTriangle.cpp + Windows + + + Debug + Name + ColTriangle.h + Windows + + + Debug + Name + CompressedVector.h + Windows + + + Debug + Name + TempColModels.cpp + Windows + + + Debug + Name + TempColModels.h + Windows + + + Debug + Name + VuCollision.cpp + Windows + + + Debug + Name + VuCollision.h + Windows + + + control + + Debug + Name + AutoPilot.cpp + Windows + + + Debug + Name + AutoPilot.h + Windows + + + Debug + Name + Bridge.cpp + Windows + + + Debug + Name + Bridge.h + Windows + + + Debug + Name + CarAI.cpp + Windows + + + Debug + Name + CarAI.h + Windows + + + Debug + Name + CarCtrl.cpp + Windows + + + Debug + Name + CarCtrl.h + Windows + + + Debug + Name + Curves.cpp + Windows + + + Debug + Name + Curves.h + Windows + + + Debug + Name + Darkel.cpp + Windows + + + Debug + Name + Darkel.h + Windows + + + Debug + Name + GameLogic.cpp + Windows + + + Debug + Name + GameLogic.h + Windows + + + Debug + Name + Garages.cpp + Windows + + + Debug + Name + Garages.h + Windows + + + Debug + Name + NameGrid.cpp + Windows + + + Debug + Name + NameGrid.h + Windows + + + Debug + Name + OnscreenTimer.cpp + Windows + + + Debug + Name + OnscreenTimer.h + Windows + + + Debug + Name + PathFind.cpp + Windows + + + Debug + Name + PathFind.h + Windows + + + Debug + Name + Phones.cpp + Windows + + + Debug + Name + Phones.h + Windows + + + Debug + Name + Pickups.cpp + Windows + + + Debug + Name + Pickups.h + Windows + + + Debug + Name + PowerPoints.cpp + Windows + + + Debug + Name + PowerPoints.h + Windows + + + Debug + Name + Record.cpp + Windows + + + Debug + Name + Record.h + Windows + + + Debug + Name + Remote.cpp + Windows + + + Debug + Name + Remote.h + Windows + + + Debug + Name + Replay.cpp + Windows + + + Debug + Name + Replay.h + Windows + + + Debug + Name + Restart.cpp + Windows + + + Debug + Name + Restart.h + Windows + + + Debug + Name + RoadBlocks.cpp + Windows + + + Debug + Name + RoadBlocks.h + Windows + + + Debug + Name + SceneEdit.cpp + Windows + + + Debug + Name + SceneEdit.h + Windows + + + Debug + Name + Script.cpp + Windows + + + Debug + Name + Script.h + Windows + + + Debug + Name + Script2.cpp + Windows + + + Debug + Name + Script3.cpp + Windows + + + Debug + Name + Script4.cpp + Windows + + + Debug + Name + Script5.cpp + Windows + + + Debug + Name + Script6.cpp + Windows + + + Debug + Name + Script7.cpp + Windows + + + Debug + Name + Script8.cpp + Windows + + + Debug + Name + ScriptCommands.h + Windows + + + Debug + Name + SetPieces.cpp + Windows + + + Debug + Name + SetPieces.h + Windows + + + Debug + Name + TrafficLights.cpp + Windows + + + Debug + Name + TrafficLights.h + Windows + + + core + + Debug + Name + Accident.cpp + Windows + + + Debug + Name + Accident.h + Windows + + + Debug + Name + AnimViewer.cpp + Windows + + + Debug + Name + AnimViewer.h + Windows + + + Debug + Name + Cam.cpp + Windows + + + Debug + Name + Camera.cpp + Windows + + + Debug + Name + Camera.h + Windows + + + Debug + Name + CdStream.cpp + Windows + + + Debug + Name + CdStream.h + Windows + + + Debug + Name + CdStreamPosix.cpp + Windows + + + Debug + Name + Clock.cpp + Windows + + + Debug + Name + Clock.h + Windows + + + Debug + Name + common.h + Windows + + + Debug + Name + config.h + Windows + + + Debug + Name + ControllerConfig.cpp + Windows + + + Debug + Name + ControllerConfig.h + Windows + + + Debug + Name + Crime.h + Windows + + + Debug + Name + Debug.cpp + Windows + + + Debug + Name + Debug.h + Windows + + + Debug + Name + Directory.cpp + Windows + + + Debug + Name + Directory.h + Windows + + + Debug + Name + EventList.cpp + Windows + + + Debug + Name + EventList.h + Windows + + + Debug + Name + FileLoader.cpp + Windows + + + Debug + Name + FileLoader.h + Windows + + + Debug + Name + FileMgr.cpp + Windows + + + Debug + Name + FileMgr.h + Windows + + + Debug + Name + Fire.cpp + Windows + + + Debug + Name + Fire.h + Windows + + + Debug + Name + Frontend.cpp + Windows + + + Debug + Name + Frontend.h + Windows + + + Debug + Name + Frontend_PS2.cpp + Windows + + + Debug + Name + Frontend_PS2.h + Windows + + + Debug + Name + FrontEndControls.cpp + Windows + + + Debug + Name + FrontEndControls.h + Windows + + + Debug + Name + FrontendTriggers.h + Windows + + + Debug + Name + Game.cpp + Windows + + + Debug + Name + Game.h + Windows + + + Debug + Name + General.h + Windows + + + Debug + Name + IniFile.cpp + Windows + + + Debug + Name + IniFile.h + Windows + + + Debug + Name + Lists.cpp + Windows + + + Debug + Name + Lists.h + Windows + + + Debug + Name + main.cpp + Windows + + + Debug + Name + main.h + Windows + + + Debug + Name + MenuScreens.cpp + Windows + + + Debug + Name + MenuScreensCustom.cpp + Windows + + + Debug + Name + obrstr.cpp + Windows + + + Debug + Name + obrstr.h + Windows + + + Debug + Name + Pad.cpp + Windows + + + Debug + Name + Pad.h + Windows + + + Debug + Name + Placeable.cpp + Windows + + + Debug + Name + Placeable.h + Windows + + + Debug + Name + PlayerInfo.cpp + Windows + + + Debug + Name + PlayerInfo.h + Windows + + + Debug + Name + Pools.cpp + Windows + + + Debug + Name + Pools.h + Windows + + + Debug + Name + Profile.cpp + Windows + + + Debug + Name + Profile.h + Windows + + + Debug + Name + Radar.cpp + Windows + + + Debug + Name + Radar.h + Windows + + + Debug + Name + Range2D.cpp + Windows + + + Debug + Name + Range2D.h + Windows + + + Debug + Name + Range3D.cpp + Windows + + + Debug + Name + Range3D.h + Windows + + + Debug + Name + re3.cpp + Windows + + + Debug + Name + References.cpp + Windows + + + Debug + Name + References.h + Windows + + + Debug + Name + Ropes.cpp + Windows + + + Debug + Name + Ropes.h + Windows + + + Debug + Name + Stats.cpp + Windows + + + Debug + Name + Stats.h + Windows + + + Debug + Name + Streaming.cpp + Windows + + + Debug + Name + Streaming.h + Windows + + + Debug + Name + SurfaceTable.cpp + Windows + + + Debug + Name + SurfaceTable.h + Windows + + + Debug + Name + templates.h + Windows + + + Debug + Name + timebars.cpp + Windows + + + Debug + Name + timebars.h + Windows + + + Debug + Name + Timer.cpp + Windows + + + Debug + Name + Timer.h + Windows + + + Debug + Name + TimeStep.cpp + Windows + + + Debug + Name + TimeStep.h + Windows + + + Debug + Name + User.cpp + Windows + + + Debug + Name + User.h + Windows + + + Debug + Name + Wanted.cpp + Windows + + + Debug + Name + Wanted.h + Windows + + + Debug + Name + World.cpp + Windows + + + Debug + Name + World.h + Windows + + + Debug + Name + ZoneCull.cpp + Windows + + + Debug + Name + ZoneCull.h + Windows + + + Debug + Name + Zones.cpp + Windows + + + Debug + Name + Zones.h + Windows + + + entities + + Debug + Name + Dummy.cpp + Windows + + + Debug + Name + Dummy.h + Windows + + + Debug + Name + Entity.cpp + Windows + + + Debug + Name + Entity.h + Windows + + + Debug + Name + Physical.cpp + Windows + + + Debug + Name + Physical.h + Windows + + + math + + Debug + Name + math.cpp + Windows + + + Debug + Name + maths.h + Windows + + + Debug + Name + Matrix.cpp + Windows + + + Debug + Name + Matrix.h + Windows + + + Debug + Name + Quaternion.cpp + Windows + + + Debug + Name + Quaternion.h + Windows + + + Debug + Name + Rect.cpp + Windows + + + Debug + Name + Rect.h + Windows + + + Debug + Name + Vector.cpp + Windows + + + Debug + Name + Vector.h + Windows + + + Debug + Name + Vector2D.h + Windows + + + Debug + Name + VuVector.h + Windows + + + modelinfo + + Debug + Name + BaseModelInfo.cpp + Windows + + + Debug + Name + BaseModelInfo.h + Windows + + + Debug + Name + ClumpModelInfo.cpp + Windows + + + Debug + Name + ClumpModelInfo.h + Windows + + + Debug + Name + ModelIndices.cpp + Windows + + + Debug + Name + ModelIndices.h + Windows + + + Debug + Name + ModelInfo.cpp + Windows + + + Debug + Name + ModelInfo.h + Windows + + + Debug + Name + PedModelInfo.cpp + Windows + + + Debug + Name + PedModelInfo.h + Windows + + + Debug + Name + SimpleModelInfo.cpp + Windows + + + Debug + Name + SimpleModelInfo.h + Windows + + + Debug + Name + TimeModelInfo.cpp + Windows + + + Debug + Name + TimeModelInfo.h + Windows + + + Debug + Name + VehicleModelInfo.cpp + Windows + + + Debug + Name + VehicleModelInfo.h + Windows + + + Debug + Name + WeaponModelInfo.cpp + Windows + + + Debug + Name + WeaponModelInfo.h + Windows + + + objects + + Debug + Name + CutsceneObject.cpp + Windows + + + Debug + Name + CutsceneObject.h + Windows + + + Debug + Name + DummyObject.cpp + Windows + + + Debug + Name + DummyObject.h + Windows + + + Debug + Name + Object.cpp + Windows + + + Debug + Name + Object.h + Windows + + + Debug + Name + ObjectData.cpp + Windows + + + Debug + Name + ObjectData.h + Windows + + + Debug + Name + ParticleObject.cpp + Windows + + + Debug + Name + ParticleObject.h + Windows + + + Debug + Name + Projectile.cpp + Windows + + + Debug + Name + Projectile.h + Windows + + + Debug + Name + Stinger.cpp + Windows + + + Debug + Name + Stinger.h + Windows + + + peds + + Debug + Name + CivilianPed.cpp + Windows + + + Debug + Name + CivilianPed.h + Windows + + + Debug + Name + CopPed.cpp + Windows + + + Debug + Name + CopPed.h + Windows + + + Debug + Name + DummyPed.h + Windows + + + Debug + Name + EmergencyPed.cpp + Windows + + + Debug + Name + EmergencyPed.h + Windows + + + Debug + Name + Gangs.cpp + Windows + + + Debug + Name + Gangs.h + Windows + + + Debug + Name + Ped.cpp + Windows + + + Debug + Name + Ped.h + Windows + + + Debug + Name + PedAI.cpp + Windows + + + Debug + Name + PedAttractor.cpp + Windows + + + Debug + Name + PedAttractor.h + Windows + + + Debug + Name + PedChat.cpp + Windows + + + Debug + Name + PedDebug.cpp + Windows + + + Debug + Name + PedFight.cpp + Windows + + + Debug + Name + PedIK.cpp + Windows + + + Debug + Name + PedIK.h + Windows + + + Debug + Name + PedPlacement.cpp + Windows + + + Debug + Name + PedPlacement.h + Windows + + + Debug + Name + PedRoutes.cpp + Windows + + + Debug + Name + PedRoutes.h + Windows + + + Debug + Name + PedType.cpp + Windows + + + Debug + Name + PedType.h + Windows + + + Debug + Name + PlayerPed.cpp + Windows + + + Debug + Name + PlayerPed.h + Windows + + + Debug + Name + Population.cpp + Windows + + + Debug + Name + Population.h + Windows + + + render + + Debug + Name + 2dEffect.h + Windows + + + Debug + Name + Antennas.cpp + Windows + + + Debug + Name + Antennas.h + Windows + + + Debug + Name + Clouds.cpp + Windows + + + Debug + Name + Clouds.h + Windows + + + Debug + Name + Console.cpp + Windows + + + Debug + Name + Console.h + Windows + + + Debug + Name + Coronas.cpp + Windows + + + Debug + Name + Coronas.h + Windows + + + Debug + Name + Credits.cpp + Windows + + + Debug + Name + Credits.h + Windows + + + Debug + Name + CutsceneShadow.cpp + Windows + + + Debug + Name + CutsceneShadow.h + Windows + + + Debug + Name + Draw.cpp + Windows + + + Debug + Name + Draw.h + Windows + + + Debug + Name + Fluff.cpp + Windows + + + Debug + Name + Fluff.h + Windows + + + Debug + Name + Font.cpp + Windows + + + Debug + Name + Font.h + Windows + + + Debug + Name + Glass.cpp + Windows + + + Debug + Name + Glass.h + Windows + + + Debug + Name + Hud.cpp + Windows + + + Debug + Name + Hud.h + Windows + + + Debug + Name + Instance.cpp + Windows + + + Debug + Name + Instance.h + Windows + + + Debug + Name + Lines.cpp + Windows + + + Debug + Name + Lines.h + Windows + + + Debug + Name + MBlur.cpp + Windows + + + Debug + Name + MBlur.h + Windows + + + Debug + Name + Occlusion.cpp + Windows + + + Debug + Name + Occlusion.h + Windows + + + Debug + Name + Particle.cpp + Windows + + + Debug + Name + Particle.h + Windows + + + Debug + Name + ParticleMgr.cpp + Windows + + + Debug + Name + ParticleMgr.h + Windows + + + Debug + Name + ParticleType.h + Windows + + + Debug + Name + PlayerSkin.cpp + Windows + + + Debug + Name + PlayerSkin.h + Windows + + + Debug + Name + PointLights.cpp + Windows + + + Debug + Name + PointLights.h + Windows + + + Debug + Name + RenderBuffer.cpp + Windows + + + Debug + Name + RenderBuffer.h + Windows + + + Debug + Name + Renderer.cpp + Windows + + + Debug + Name + Renderer.h + Windows + + + Debug + Name + Rubbish.cpp + Windows + + + Debug + Name + Rubbish.h + Windows + + + Debug + Name + ShadowCamera.cpp + Windows + + + Debug + Name + ShadowCamera.h + Windows + + + Debug + Name + Shadows.cpp + Windows + + + Debug + Name + Shadows.h + Windows + + + Debug + Name + Skidmarks.cpp + Windows + + + Debug + Name + Skidmarks.h + Windows + + + Debug + Name + SpecialFX.cpp + Windows + + + Debug + Name + SpecialFX.h + Windows + + + Debug + Name + Sprite.cpp + Windows + + + Debug + Name + Sprite.h + Windows + + + Debug + Name + Sprite2d.cpp + Windows + + + Debug + Name + Sprite2d.h + Windows + + + Debug + Name + TexList.cpp + Windows + + + Debug + Name + TexList.h + Windows + + + Debug + Name + Timecycle.cpp + Windows + + + Debug + Name + Timecycle.h + Windows + + + Debug + Name + VarConsole.cpp + Windows + + + Debug + Name + VarConsole.h + Windows + + + Debug + Name + WaterCannon.cpp + Windows + + + Debug + Name + WaterCannon.h + Windows + + + Debug + Name + WaterCreatures.cpp + Windows + + + Debug + Name + WaterCreatures.h + Windows + + + Debug + Name + WaterLevel.cpp + Windows + + + Debug + Name + WaterLevel.h + Windows + + + Debug + Name + Weather.cpp + Windows + + + Debug + Name + Weather.h + Windows + + + Debug + Name + WindModifiers.cpp + Windows + + + Debug + Name + WindModifiers.h + Windows + + + rw + + Debug + Name + ClumpRead.cpp + Windows + + + Debug + Name + Lights.cpp + Windows + + + Debug + Name + Lights.h + Windows + + + Debug + Name + MemoryHeap.cpp + Windows + + + Debug + Name + MemoryHeap.h + Windows + + + Debug + Name + MemoryMgr.cpp + Windows + + + Debug + Name + MemoryMgr.h + Windows + + + Debug + Name + NodeName.cpp + Windows + + + Debug + Name + NodeName.h + Windows + + + Debug + Name + RwHelper.cpp + Windows + + + Debug + Name + RwHelper.h + Windows + + + Debug + Name + RwMatFX.cpp + Windows + + + Debug + Name + RwPS2AlphaTest.cpp + Windows + + + Debug + Name + TexRead.cpp + Windows + + + Debug + Name + TexturePools.cpp + Windows + + + Debug + Name + TexturePools.h + Windows + + + Debug + Name + TxdStore.cpp + Windows + + + Debug + Name + TxdStore.h + Windows + + + Debug + Name + VisibilityPlugins.cpp + Windows + + + Debug + Name + VisibilityPlugins.h + Windows + + + save + + Debug + Name + Date.cpp + Windows + + + Debug + Name + Date.h + Windows + + + Debug + Name + GenericGameStorage.cpp + Windows + + + Debug + Name + GenericGameStorage.h + Windows + + + Debug + Name + MemoryCard.cpp + Windows + + + Debug + Name + MemoryCard.h + Windows + + + Debug + Name + PCSave.cpp + Windows + + + Debug + Name + PCSave.h + Windows + + + skel + + Debug + Name + crossplatform.cpp + Windows + + + Debug + Name + crossplatform.h + Windows + + + Debug + Name + events.cpp + Windows + + + Debug + Name + events.h + Windows + + + Debug + Name + platform.h + Windows + + + Debug + Name + skeleton.cpp + Windows + + + Debug + Name + skeleton.h + Windows + + + Debug + Name + resource.h + Windows + + + Debug + Name + win.cpp + Windows + + + Debug + Name + win.h + Windows + + + Debug + Name + win.rc + Windows + + + text + + Debug + Name + Messages.cpp + Windows + + + Debug + Name + Messages.h + Windows + + + Debug + Name + Pager.cpp + Windows + + + Debug + Name + Pager.h + Windows + + + Debug + Name + Text.cpp + Windows + + + Debug + Name + Text.h + Windows + + + vehicles + + Debug + Name + Automobile.cpp + Windows + + + Debug + Name + Automobile.h + Windows + + + Debug + Name + Bike.cpp + Windows + + + Debug + Name + Bike.h + Windows + + + Debug + Name + Boat.cpp + Windows + + + Debug + Name + Boat.h + Windows + + + Debug + Name + CarGen.cpp + Windows + + + Debug + Name + CarGen.h + Windows + + + Debug + Name + Cranes.cpp + Windows + + + Debug + Name + Cranes.h + Windows + + + Debug + Name + DamageManager.cpp + Windows + + + Debug + Name + DamageManager.h + Windows + + + Debug + Name + Door.cpp + Windows + + + Debug + Name + Door.h + Windows + + + Debug + Name + Floater.cpp + Windows + + + Debug + Name + Floater.h + Windows + + + Debug + Name + HandlingMgr.cpp + Windows + + + Debug + Name + HandlingMgr.h + Windows + + + Debug + Name + Heli.cpp + Windows + + + Debug + Name + Heli.h + Windows + + + Debug + Name + Plane.cpp + Windows + + + Debug + Name + Plane.h + Windows + + + Debug + Name + Train.cpp + Windows + + + Debug + Name + Train.h + Windows + + + Debug + Name + Transmission.cpp + Windows + + + Debug + Name + Transmission.h + Windows + + + Debug + Name + Vehicle.cpp + Windows + + + Debug + Name + Vehicle.h + Windows + + + weapons + + Debug + Name + BulletInfo.cpp + Windows + + + Debug + Name + BulletInfo.h + Windows + + + Debug + Name + Explosion.cpp + Windows + + + Debug + Name + Explosion.h + Windows + + + Debug + Name + ProjectileInfo.cpp + Windows + + + Debug + Name + ProjectileInfo.h + Windows + + + Debug + Name + ShotInfo.cpp + Windows + + + Debug + Name + ShotInfo.h + Windows + + + Debug + Name + Weapon.cpp + Windows + + + Debug + Name + Weapon.h + Windows + + + Debug + Name + WeaponEffects.cpp + Windows + + + Debug + Name + WeaponEffects.h + Windows + + + Debug + Name + WeaponInfo.cpp + Windows + + + Debug + Name + WeaponInfo.h + Windows + + + Debug + Name + WeaponType.h + Windows + + + RenderWare + + Debug + Name + rwcore.lib + Windows + + + Debug + Name + rpworld.lib + Windows + + + Debug + Name + rpmatfx.lib + Windows + + + Debug + Name + rpskin.lib + Windows + + + Debug + Name + rphanim.lib + Windows + + + Debug + Name + rtbmp.lib + Windows + + + Debug + Name + rtquat.lib + Windows + + + Debug + Name + rtcharse.lib + Windows + + + Debug + Name + rtanim.lib + Windows + + + Debug + Name + rpanisot.lib + Windows + + + DirectX + + Debug + Name + d3d8.lib + Windows + + + Debug + Name + ddraw.lib + Windows + + + Debug + Name + dxguid.lib + Windows + + + Debug + Name + strmiids.lib + Windows + + + Debug + Name + dinput8.lib + Windows + + + Miles + + Debug + Name + mss32.lib + Windows + + + MSL ANSI Libraries + + Debug + Name + MSL_All_x86_D.lib + MacOS + + + Release + Name + MSL_All_x86.lib + MacOS + + + Win32 SDK Libraries + + Debug + Name + Gdi32.lib + MacOS + + + Debug + Name + Kernel32.lib + MacOS + + + Debug + Name + User32.lib + MacOS + + + Debug + Name + Comdlg32.lib + MacOS + + + Debug + Name + winmm.lib + Windows + + + Debug + Name + ole32.lib + Windows + + + Debug + Name + shell32.lib + Windows + + + Debug + Name + uuid.lib + Windows + + + + + diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt index 4db81fc6..39895b0c 100644 Binary files a/gamefiles/TEXT/american.gxt and b/gamefiles/TEXT/american.gxt differ diff --git a/gamefiles/TEXT/french.gxt b/gamefiles/TEXT/french.gxt index 36f4225c..d2020651 100644 Binary files a/gamefiles/TEXT/french.gxt and b/gamefiles/TEXT/french.gxt differ diff --git a/gamefiles/TEXT/german.gxt b/gamefiles/TEXT/german.gxt index 772865db..f96f87d5 100644 Binary files a/gamefiles/TEXT/german.gxt and b/gamefiles/TEXT/german.gxt differ diff --git a/gamefiles/TEXT/italian.gxt b/gamefiles/TEXT/italian.gxt index fd087c0d..407da68d 100644 Binary files a/gamefiles/TEXT/italian.gxt and b/gamefiles/TEXT/italian.gxt differ diff --git a/gamefiles/TEXT/russian.gxt b/gamefiles/TEXT/russian.gxt new file mode 100644 index 00000000..375323ba Binary files /dev/null and b/gamefiles/TEXT/russian.gxt differ diff --git a/gamefiles/TEXT/spanish.gxt b/gamefiles/TEXT/spanish.gxt index 7a71144c..54773d07 100644 Binary files a/gamefiles/TEXT/spanish.gxt and b/gamefiles/TEXT/spanish.gxt differ diff --git a/gamefiles/models/fonts_r.txd b/gamefiles/models/fonts_r.txd new file mode 100644 index 00000000..b6d50ac2 Binary files /dev/null and b/gamefiles/models/fonts_r.txd differ diff --git a/gamefiles/models/particle.txd b/gamefiles/models/particle.txd index 4de9e4fd..b0c585f4 100644 Binary files a/gamefiles/models/particle.txd and b/gamefiles/models/particle.txd differ diff --git a/premake5.lua b/premake5.lua index ea1045f5..f1287011 100644 --- a/premake5.lua +++ b/premake5.lua @@ -28,8 +28,18 @@ newoption { } newoption { - trigger = "lto", - description = "Use link time optimization" + trigger = "with-lto", + description = "Build with link time optimization" +} + +newoption { + trigger = "no-git-hash", + description = "Don't print git commit hash into binary" +} + +newoption { + trigger = "no-full-paths", + description = "Don't print full paths into binary" } if(_OPTIONS["with-librw"]) then @@ -58,7 +68,7 @@ end workspace "reVC" language "C++" - configurations { "Debug", "Release", "Vanilla" } + configurations { "Debug", "Release" } startproject "reVC" location "build" symbols "Full" @@ -70,6 +80,7 @@ workspace "reVC" end filter { "system:windows" } + configurations { "Vanilla" } platforms { "win-x86-RW34_d3d8-mss", "win-x86-librw_d3d9-mss", @@ -96,7 +107,7 @@ workspace "reVC" "bsd-arm-librw_gl3_glfw-oal", "bsd-arm64-librw_gl3_glfw-oal" } - + filter { "system:macosx" } platforms { "macosx-arm64-librw_gl3_glfw-oal", @@ -105,64 +116,67 @@ workspace "reVC" filter "configurations:Debug" defines { "DEBUG" } - + filter "configurations:not Debug" defines { "NDEBUG" } optimize "Speed" - if(_OPTIONS["lto"]) then + if(_OPTIONS["with-lto"]) then flags { "LinkTimeOptimization" } end - filter "configurations:Vanilla" - defines { "VANILLA_DEFINES" } - filter { "platforms:win*" } system "windows" filter { "platforms:linux*" } system "linux" - + filter { "platforms:bsd*" } system "bsd" filter { "platforms:macosx*" } system "macosx" - + filter { "platforms:*x86*" } architecture "x86" - + filter { "platforms:*amd64*" } architecture "amd64" filter { "platforms:*arm*" } architecture "ARM" - - filter { "platforms:macosx-arm64-*" } + + filter { "platforms:macosx-arm64-*", "files:**.cpp"} buildoptions { "-target", "arm64-apple-macos11", "-std=gnu++14" } - filter { "platforms:macosx-amd64-*" } + filter { "platforms:macosx-arm64-*", "files:**.c"} + buildoptions { "-target", "arm64-apple-macos11" } + + filter { "platforms:macosx-amd64-*", "files:**.cpp"} buildoptions { "-target", "x86_64-apple-macos10.12", "-std=gnu++14" } + filter { "platforms:macosx-amd64-*", "files:**.c"} + buildoptions { "-target", "x86_64-apple-macos10.12" } + filter { "platforms:*librw_d3d9*" } defines { "RW_D3D9" } if(not _OPTIONS["with-librw"]) then libdirs { path.join(Librw, "lib/win-%{getarch(cfg.architecture)}-d3d9/%{cfg.buildcfg}") } end - + filter "platforms:*librw_gl3_glfw*" defines { "RW_GL3" } if(not _OPTIONS["with-librw"]) then libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") } end - + filter "platforms:*x86-librw_gl3_glfw*" includedirs { path.join(_OPTIONS["glfwdir32"], "include") } - + filter "platforms:*amd64-librw_gl3_glfw*" includedirs { path.join(_OPTIONS["glfwdir64"], "include") } filter {} - + function setpaths (gamepath, exepath) if (gamepath) then postbuildcommands { @@ -186,7 +200,7 @@ project "librw" files { path.join(Librw, "src/*.*") } files { path.join(Librw, "src/*/*.*") } files { path.join(Librw, "src/gl/*/*.*") } - + filter { "platforms:*x86*" } architecture "x86" @@ -202,16 +216,22 @@ project "librw" includedirs { "/usr/local/include" } libdirs { "/usr/local/lib" } - filter "platforms:macosx*" - -- Support MacPorts and Homebrew + -- Support MacPorts and Homebrew + filter "platforms:macosx-arm64-*" + includedirs { "/opt/local/include" } + includedirs {"/opt/homebrew/include" } + libdirs { "/opt/local/lib" } + libdirs { "/opt/homebrew/lib" } + + filter "platforms:macosx-amd64-*" includedirs { "/opt/local/include" } includedirs {"/usr/local/include" } libdirs { "/opt/local/lib" } libdirs { "/usr/local/lib" } - + filter "platforms:*gl3_glfw*" staticruntime "off" - + filter "platforms:*RW34*" flags { "ExcludeFromBuild" } filter {} @@ -253,7 +273,11 @@ project "reVC" files { addSrcFiles("src/vehicles") } files { addSrcFiles("src/weapons") } files { addSrcFiles("src/extras") } - files { "src/extras/GitSHA1.cpp" } -- this won't be in repo in first build + if(not _OPTIONS["no-git-hash"]) then + files { "src/extras/GitSHA1.cpp" } -- this won't be in repo in first build + else + removefiles { "src/extras/GitSHA1.cpp" } -- but it will be everytime after + end includedirs { "src" } includedirs { "src/animation" } @@ -278,18 +302,25 @@ project "reVC" includedirs { "src/vehicles" } includedirs { "src/weapons" } includedirs { "src/extras" } - + + if(not _OPTIONS["no-git-hash"]) then + defines { "USE_OUR_VERSIONING" } + end + if _OPTIONS["with-opus"] then includedirs { "vendor/ogg/include" } includedirs { "vendor/opus/include" } includedirs { "vendor/opusfile/include" } end + filter "configurations:Vanilla" + defines { "VANILLA_DEFINES" } + filter "platforms:*mss" defines { "AUDIO_MSS" } includedirs { "vendor/milessdk/include" } libdirs { "vendor/milessdk/lib" } - + if _OPTIONS["with-opus"] then filter "platforms:win*" libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" } @@ -298,7 +329,7 @@ project "reVC" filter {} defines { "AUDIO_OPUS" } end - + filter "platforms:*oal" defines { "AUDIO_OAL" } @@ -306,7 +337,7 @@ project "reVC" if(os.getenv("GTA_VC_RE_DIR")) then setpaths(os.getenv("GTA_VC_RE_DIR") .. "/", "%(cfg.buildtarget.name)") end - + filter "platforms:win*" files { addSrcFiles("src/skel/win") } includedirs { "src/skel/win" } @@ -314,44 +345,58 @@ project "reVC" linkoptions "/SAFESEH:NO" characterset ("MBCS") targetextension ".exe" + if(_OPTIONS["no-full-paths"]) then + usefullpaths "off" + linkoptions "/PDBALTPATH:%_PDB%" + end if(_OPTIONS["with-librw"]) then -- external librw is dynamic staticruntime "on" end - prebuildcommands { '"%{prj.location}..\\printHash.bat" "%{prj.location}..\\src\\extras\\GitSHA1.cpp"' } + if(not _OPTIONS["no-git-hash"]) then + prebuildcommands { '"%{prj.location}..\\printHash.bat" "%{prj.location}..\\src\\extras\\GitSHA1.cpp"' } + end filter "platforms:not win*" - prebuildcommands { '"%{prj.location}/../printHash.sh" "%{prj.location}/../src/extras/GitSHA1.cpp"' } + if(not _OPTIONS["no-git-hash"]) then + prebuildcommands { '"%{prj.location}/../printHash.sh" "%{prj.location}/../src/extras/GitSHA1.cpp"' } + end filter "platforms:win*glfw*" staticruntime "off" - + filter "platforms:win*oal" includedirs { "vendor/openal-soft/include" } includedirs { "vendor/libsndfile/include" } includedirs { "vendor/mpg123/include" } - + filter "platforms:win-x86*oal" libdirs { "vendor/mpg123/lib/Win32" } libdirs { "vendor/libsndfile/lib/Win32" } libdirs { "vendor/openal-soft/libs/Win32" } - + filter "platforms:win-amd64*oal" libdirs { "vendor/mpg123/lib/Win64" } libdirs { "vendor/libsndfile/lib/Win64" } libdirs { "vendor/openal-soft/libs/Win64" } filter "platforms:linux*oal" - links { "openal", "mpg123", "sndfile", "pthread" } - + links { "openal", "mpg123", "sndfile", "pthread", "X11" } + filter "platforms:bsd*oal" - links { "openal", "mpg123", "sndfile", "pthread" } + links { "openal", "mpg123", "sndfile", "pthread", "X11" } filter "platforms:macosx*oal" links { "openal", "mpg123", "sndfile", "pthread" } + + filter "platforms:macosx-arm64-*oal" + includedirs { "/opt/homebrew/opt/openal-soft/include" } + libdirs { "/opt/homebrew/opt/openal-soft/lib" } + + filter "platforms:macosx-amd64-*oal" includedirs { "/usr/local/opt/openal-soft/include" } libdirs { "/usr/local/opt/openal-soft/lib" } - + if _OPTIONS["with-opus"] then filter {} links { "libogg" } @@ -365,7 +410,7 @@ project "reVC" links { "rwcore", "rpworld", "rpmatfx", "rpskin", "rphanim", "rtbmp", "rtquat", "rtanim", "rtcharse", "rpanisot" } defines { "RWLIBS" } linkoptions "/SECTION:_rwcseg,ER!W /MERGE:_rwcseg=.text" - + filter "platforms:*librw*" defines { "LIBRW" } files { addSrcFiles("src/fakerw") } @@ -379,31 +424,39 @@ project "reVC" filter "platforms:*d3d9*" defines { "USE_D3D9" } links { "d3d9" } - + filter "platforms:*x86*d3d*" includedirs { "sdk/dx8sdk/include" } libdirs { "sdk/dx8sdk/lib" } - + filter "platforms:win-x86*gl3_glfw*" libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } links { "opengl32", "glfw3" } - + filter "platforms:win-amd64*gl3_glfw*" libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) } links { "opengl32", "glfw3" } filter "platforms:linux*gl3_glfw*" links { "GL", "glfw" } - + filter "platforms:bsd*gl3_glfw*" links { "GL", "glfw", "sysinfo" } includedirs { "/usr/local/include" } libdirs { "/usr/local/lib" } - filter "platforms:macosx*gl3_glfw*" + filter "platforms:macosx-arm64-*gl3_glfw*" links { "glfw" } linkoptions { "-framework OpenGL" } includedirs { "/opt/local/include" } - includedirs { "/usr/local/include" } + includedirs {"/opt/homebrew/include" } + libdirs { "/opt/local/lib" } + libdirs { "/opt/homebrew/lib" } + + filter "platforms:macosx-amd64-*gl3_glfw*" + links { "glfw" } + linkoptions { "-framework OpenGL" } + includedirs { "/opt/local/include" } + includedirs {"/usr/local/include" } libdirs { "/opt/local/lib" } libdirs { "/usr/local/lib" } diff --git a/printHash.sh b/printHash.sh index e7d6f018..213d9353 100755 --- a/printHash.sh +++ b/printHash.sh @@ -1,12 +1,14 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh +if [ -z "${1}" ] + then + printf "%s\n" "Input the path to the file for writing the commit hash to." + else + printf "%s" "#define GIT_SHA1 \"" > $1 -> $1 + if (command -v "git" >/dev/null) then + git rev-parse --short HEAD | tr -d '\n' >> $1 + fi -echo -n "#define GIT_SHA1 \"" > $1 - -if (command -v "git" >/dev/null) then -git rev-parse --short HEAD | tr -d '\n' >> $1 + printf "%s\n" "\"" >> $1 + printf "%s\n" "const char* g_GIT_SHA1 = GIT_SHA1;" >> $1 fi - -echo "\"" >> $1 -echo "const char* g_GIT_SHA1 = GIT_SHA1;" >> $1 \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6c8ab281..28090d7e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -50,6 +50,7 @@ if(LIBRW_PLATFORM_D3D9) endif() target_compile_definitions(${EXECUTABLE} PRIVATE CMAKE_BUILD) +target_compile_definitions(${EXECUTABLE} PRIVATE USE_OUR_VERSIONING) if(${PROJECT}_AUDIO STREQUAL "OAL") find_package(OpenAL REQUIRED) diff --git a/src/audio/AudioCollision.cpp b/src/audio/AudioCollision.cpp index 250cd18e..decb73e5 100644 --- a/src/audio/AudioCollision.cpp +++ b/src/audio/AudioCollision.cpp @@ -158,7 +158,7 @@ cAudioManager::SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollisio void cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter) { - bool distCalculated = false; + bool8 distCalculated = FALSE; if(col.m_fIntensity2 > 0.0016f) { uint8 emittingVol = SetLoopingCollisionRequestedSfxFreqAndGetVol(col); if(emittingVol) { @@ -168,20 +168,17 @@ cAudioManager::SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 coun m_sQueueSample.m_nCounter = counter; m_sQueueSample.m_vecPos = col.m_vecPosition; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 7; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = - SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = - SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = CollisionSoundIntensity; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -311,17 +308,16 @@ cAudioManager::SetUpOneShotCollisionSound(const cAudioCollision &col) if(counter >= 255) counter = 28; m_sQueueSample.m_vecPos = col.m_vecPosition; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 11; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = CollisionSoundIntensity; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -332,13 +328,12 @@ void cAudioManager::ServiceCollisions() { int i, j; - bool abRepeatedCollision1[NUMAUDIOCOLLISIONS]; - bool abRepeatedCollision2[NUMAUDIOCOLLISIONS]; + bool8 abRepeatedCollision1[NUMAUDIOCOLLISIONS]; + bool8 abRepeatedCollision2[NUMAUDIOCOLLISIONS]; m_sQueueSample.m_nEntityIndex = m_nCollisionEntity; - for (int i = 0; i < NUMAUDIOCOLLISIONS; i++) - abRepeatedCollision1[i] = abRepeatedCollision2[i] = false; + for (int i = 0; i < NUMAUDIOCOLLISIONS; i++) abRepeatedCollision1[i] = abRepeatedCollision2[i] = FALSE; for (i = 0; i < m_sCollisionManager.m_bCollisionsInQueue; i++) { for (j = 0; j < NUMAUDIOCOLLISIONS; j++) { @@ -348,8 +343,8 @@ cAudioManager::ServiceCollisions() && (m_sCollisionManager.m_asCollisions1[index].m_bSurface1 == m_sCollisionManager.m_asCollisions2[j].m_bSurface1) && (m_sCollisionManager.m_asCollisions1[index].m_bSurface2 == m_sCollisionManager.m_asCollisions2[j].m_bSurface2) ) { - abRepeatedCollision1[index] = true; - abRepeatedCollision2[j] = true; + abRepeatedCollision1[index] = TRUE; + abRepeatedCollision2[j] = TRUE; m_sCollisionManager.m_asCollisions1[index].m_nBaseVolume = ++m_sCollisionManager.m_asCollisions2[j].m_nBaseVolume; SetUpLoopingCollisionSound(m_sCollisionManager.m_asCollisions1[index], j); break; diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp index 7469f579..5ee5ddd1 100644 --- a/src/audio/AudioLogic.cpp +++ b/src/audio/AudioLogic.cpp @@ -43,9 +43,9 @@ #include "Script.h" #include "Wanted.h" -const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples); -const int policeChannel = channels + 1; -const int allChannels = channels + 2; +#ifndef GTA_PS2 +#define CHANNEL_PLAYER_VEHICLE_ENGINE m_nActiveSamples +#endif enum PLAY_STATUS { PLAY_STATUS_STOPPED = 0, PLAY_STATUS_PLAYING, PLAY_STATUS_FINISHED }; enum LOADING_STATUS { LOADING_STATUS_NOT_LOADED = 0, LOADING_STATUS_LOADED, LOADING_STATUS_FAILED }; @@ -123,62 +123,62 @@ cAudioManager::PostInitialiseGameSpecificSetup() { m_nFireAudioEntity = CreateEntity(AUDIOTYPE_FIRE, &gFireManager); if (m_nFireAudioEntity >= 0) - SetEntityStatus(m_nFireAudioEntity, true); + SetEntityStatus(m_nFireAudioEntity, TRUE); m_nCollisionEntity = CreateEntity(AUDIOTYPE_COLLISION, (void *)1); if (m_nCollisionEntity >= 0) - SetEntityStatus(m_nCollisionEntity, true); + SetEntityStatus(m_nCollisionEntity, TRUE); m_nFrontEndEntity = CreateEntity(AUDIOTYPE_FRONTEND, (void *)1); if (m_nFrontEndEntity >= 0) - SetEntityStatus(m_nFrontEndEntity, true); + SetEntityStatus(m_nFrontEndEntity, TRUE); m_nProjectileEntity = CreateEntity(AUDIOTYPE_PROJECTILE, (void *)1); if (m_nProjectileEntity >= 0) - SetEntityStatus(m_nProjectileEntity, true); + SetEntityStatus(m_nProjectileEntity, TRUE); m_nWaterCannonEntity = CreateEntity(AUDIOTYPE_WATERCANNON, (void *)1); if (m_nWaterCannonEntity >= 0) - SetEntityStatus(m_nWaterCannonEntity, true); + SetEntityStatus(m_nWaterCannonEntity, TRUE); m_nPoliceChannelEntity = CreateEntity(AUDIOTYPE_POLICERADIO, (void *)1); if (m_nPoliceChannelEntity >= 0) - SetEntityStatus(m_nPoliceChannelEntity, true); + SetEntityStatus(m_nPoliceChannelEntity, TRUE); #ifdef GTA_BRIDGE m_nBridgeEntity = CreateEntity(AUDIOTYPE_BRIDGE, (void*)1); if (m_nBridgeEntity >= 0) - SetEntityStatus(m_nBridgeEntity, true); + SetEntityStatus(m_nBridgeEntity, TRUE); #endif // GTA_BRIDGE m_nEscalatorEntity = CreateEntity(AUDIOTYPE_ESCALATOR, (void*)1); if (m_nEscalatorEntity >= 0) - SetEntityStatus(m_nEscalatorEntity, true); + SetEntityStatus(m_nEscalatorEntity, TRUE); m_nExtraSoundsEntity = CreateEntity(AUDIOTYPE_EXTRA_SOUNDS, (void*)1); if (m_nExtraSoundsEntity >= 0) - SetEntityStatus(m_nExtraSoundsEntity, true); + SetEntityStatus(m_nExtraSoundsEntity, TRUE); m_sMissionAudio.m_nSampleIndex[0] = NO_SAMPLE; m_sMissionAudio.m_nLoadingStatus[0] = LOADING_STATUS_NOT_LOADED; m_sMissionAudio.m_nPlayStatus[0] = PLAY_STATUS_STOPPED; - m_sMissionAudio.m_bIsPlaying[0] = false; - m_sMissionAudio.m_bIsPlayed[0] = false; - m_sMissionAudio.m_bPredefinedProperties[0] = true; + m_sMissionAudio.m_bIsPlaying[0] = FALSE; + m_sMissionAudio.m_bIsPlayed[0] = FALSE; + m_sMissionAudio.m_bPredefinedProperties[0] = TRUE; m_sMissionAudio.m_nMissionAudioCounter[0] = 0; - m_sMissionAudio.m_bIsMobile[0] = false; + m_sMissionAudio.m_bIsMobile[0] = FALSE; field_5538 = 127; m_sMissionAudio.m_nSampleIndex[1] = NO_SAMPLE; m_sMissionAudio.m_nLoadingStatus[1] = LOADING_STATUS_NOT_LOADED; m_sMissionAudio.m_nPlayStatus[1] = PLAY_STATUS_STOPPED; - m_sMissionAudio.m_bIsPlaying[1] = false; - m_sMissionAudio.m_bIsPlayed[1] = false; - m_sMissionAudio.m_bPredefinedProperties[1] = true; + m_sMissionAudio.m_bIsPlaying[1] = FALSE; + m_sMissionAudio.m_bIsPlayed[1] = FALSE; + m_sMissionAudio.m_bPredefinedProperties[1] = TRUE; m_sMissionAudio.m_nMissionAudioCounter[1] = 0; - m_sMissionAudio.m_bIsMobile[1] = false; + m_sMissionAudio.m_bIsMobile[1] = FALSE; field_5538 = 127; ResetAudioLogicTimers(CTimer::GetTimeInMilliseconds()); - m_bIsPlayerShutUp = false; + m_bIsPlayerShutUp = FALSE; m_nPlayerMood = PLAYER_MOOD_CALM; m_nPlayerMoodTimer = 0; } @@ -246,23 +246,25 @@ cAudioManager::ResetAudioLogicTimers(uint32 timer) } ClearMissionAudio(0); ClearMissionAudio(1); - SampleManager.StopChannel(policeChannel); + SampleManager.StopChannel(CHANNEL_POLICE_RADIO); } void cAudioManager::ProcessReverb() const { #ifdef FIX_BUGS - const uint32 numChannels = channels; + const uint32 numChannels = NUM_CHANNELS_GENERIC; #else - const uint32 numChannels = 28; + const uint32 numChannels = NUM_CHANNELS_GENERIC+1; #endif if (SampleManager.UpdateReverb() && m_bDynamicAcousticModelingStatus) { +#ifndef GTA_PS2 for (uint32 i = 0; i < numChannels; i++) { if (m_asActiveSamples[i].m_bReverbFlag) - SampleManager.SetChannelReverbFlag(i, true); + SampleManager.SetChannelReverbFlag(i, TRUE); } +#endif } } @@ -274,11 +276,11 @@ cAudioManager::GetDistanceSquared(const CVector &v) const } void -cAudioManager::CalculateDistance(bool &distCalculated, float dist) +cAudioManager::CalculateDistance(bool8 &distCalculated, float dist) { if (!distCalculated) { m_sQueueSample.m_fDistance = Sqrt(dist); - distCalculated = true; + distCalculated = TRUE; } } @@ -347,7 +349,7 @@ cAudioManager::ProcessSpecial() if (playerPed->m_audioEntityId >= 0 && m_asAudioEntities[playerPed->m_audioEntityId].m_bIsUsed) { if (playerPed->EnteringCar()) { if(!playerPed->bInVehicle && CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle == nil) - SampleManager.StopChannel(m_nActiveSamples); + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); } } } @@ -362,56 +364,56 @@ cAudioManager::ProcessEntity(int32 id) switch (m_asAudioEntities[id].m_nType) { case AUDIOTYPE_PHYSICAL: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessPhysical(id); } break; case AUDIOTYPE_EXPLOSION: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessExplosions(id); } break; case AUDIOTYPE_FIRE: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessFires(id); } break; case AUDIOTYPE_WEATHER: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; if(CGame::currArea == AREA_MAIN_MAP || CGame::currArea == AREA_EVERYWHERE) ProcessWeather(id); } break; /* case AUDIOTYPE_CRANE: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessCrane(); } break;*/ case AUDIOTYPE_SCRIPTOBJECT: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessScriptObject(id); } break; #ifdef GTA_BRIDGE case AUDIOTYPE_BRIDGE: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessBridge(); } break; #endif case AUDIOTYPE_FRONTEND: - m_sQueueSample.m_bReverbFlag = false; + m_sQueueSample.m_bReverbFlag = FALSE; ProcessFrontEnd(); break; case AUDIOTYPE_PROJECTILE: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessProjectiles(); } break; @@ -421,25 +423,25 @@ cAudioManager::ProcessEntity(int32 id) break; case AUDIOTYPE_FIREHYDRANT: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessFireHydrant(); } break; case AUDIOTYPE_WATERCANNON: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessWaterCannon(id); } break; case AUDIOTYPE_ESCALATOR: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessEscalators(); } break; case AUDIOTYPE_EXTRA_SOUNDS: if (!m_nUserPause) { - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; ProcessExtraSounds(); } break; @@ -719,25 +721,25 @@ const tVehicleSampleData aVehicleSettings[MAX_CARS] = { -bool bPlayerJustEnteredCar; +bool8 bPlayerJustEnteredCar; -const bool hornPatternsArray[8][44] = { - {false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false}, - {false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false}, - {false, false, true, true, true, true, true, true, true, true, true, true, false, false, false, false, true, true, true, true, true, false, - false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false}, - {false, false, true, true, true, true, true, false, false, true, true, true, true, true, false, false, false, true, true, true, true, true, - true, true, true, true, true, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false}, - {false, false, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}, - {false, false, true, true, true, false, false, false, true, true, true, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false}, - {false, false, true, true, true, true, false, false, false, false, true, true, true, false, false, true, true, true, false, false, true, true, - true, true, true, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, false, false}, - {false, false, true, true, true, true, false, false, true, true, true, true, true, false, false, false, true, true, true, true, true, true, - false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, false, false, false}, +const bool8 hornPatternsArray[8][44] = { + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, + FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, + TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, + FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, + TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, + FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, + TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE}, + {FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, + FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE}, }; void cAudioManager::ProcessVehicle(CVehicle* veh) @@ -756,7 +758,7 @@ void cAudioManager::ProcessVehicle(CVehicle* veh) || CGame::currArea == AREA_MALL || CGame::currArea == AREA_MAIN_MAP) { m_sQueueSample.m_vecPos = veh->GetPosition(); - params.m_bDistanceCalculated = false; + params.m_bDistanceCalculated = FALSE; params.m_pVehicle = veh; params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); params.m_pTransmission = veh->pHandling != nil ? &veh->pHandling->Transmission : nil; @@ -882,24 +884,23 @@ cAudioManager::ProcessRainOnVehicle(cVehicleParams& params) veh->m_bRainSamplesCounter = 68; m_sQueueSample.m_nSampleIndex = (m_anRandomTable[1] & 3) + SFX_CAR_RAIN_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 9; m_sQueueSample.m_nFrequency = m_anRandomTable[1] % 4000 + 28000; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bReverbFlag = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bReverbFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } } -bool +bool8 cAudioManager::ProcessReverseGear(cVehicleParams& params) { const int reverseGearIntensity = 30; @@ -909,10 +910,10 @@ cAudioManager::ProcessReverseGear(cVehicleParams& params) uint8 emittingVolume; if (params.m_fDistance >= SQR(reverseGearIntensity)) - return false; + return FALSE; automobile = (CAutomobile*)params.m_pVehicle; if (automobile->m_modelIndex == MI_CADDY) - return true; + return TRUE; if (automobile->bEngineOn && (automobile->m_fGasPedal < 0.0f || automobile->m_nCurrentGear == 0)) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); if (automobile->m_nDriveWheelsOnGround != 0) { @@ -935,23 +936,22 @@ cAudioManager::ProcessReverseGear(cVehicleParams& params) m_sQueueSample.m_nSampleIndex = SFX_REVERSE_GEAR; } m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nFrequency = (6000.0f * modificator) + 7000; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = reverseGearIntensity; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } void @@ -966,14 +966,14 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) int16 acceletateState; int16 brakeState; uint8 volume; - bool isPlayerVeh; - bool vehSlowdown; + bool8 isPlayerVeh; + bool8 vehSlowdown; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) return; if (FindPlayerVehicle() == params.m_pVehicle) - isPlayerVeh = true; + isPlayerVeh = TRUE; else #ifdef FIX_BUGS isPlayerVeh = CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle == params.m_pVehicle; @@ -989,8 +989,8 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) freq = 25000; } if (isPlayerVeh) { - volume = clamp2(volume, prevVolume, 7); - freq = clamp2(freq, prevFreq, 800); + volume = Clamp2(volume, prevVolume, 7); + freq = Clamp2(freq, prevFreq, 800); } if (volume > 0) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -999,19 +999,18 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) m_sQueueSample.m_nCounter = 2; m_sQueueSample.m_nSampleIndex = SFX_RC_REV; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = volume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_RC_REV); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_RC_REV); + SET_LOOP_OFFSETS(SFX_RC_REV) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -1030,17 +1029,17 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) if (acceletateState < brakeState) acceletateState = brakeState; if (acceletateState <= 0) { - vehSlowdown = true; + vehSlowdown = TRUE; volume = 127; freq = 18000; } else { - vehSlowdown = false; + vehSlowdown = FALSE; volume = Min(127, (127 * acceletateState / 255) * 3.0f * Abs(params.m_fVelocityChange)); freq = Min(22000, (8000 * acceletateState / 255 + 14000) * 3.0f * Abs(params.m_fVelocityChange)); } if (isPlayerVeh && !vehSlowdown) { - volume = clamp2(volume, prevVolume, 7); - freq = clamp2(freq, prevFreq, 800); + volume = Clamp2(volume, prevVolume, 7); + freq = Clamp2(freq, prevFreq, 800); } if (!vehSlowdown) #ifdef THIS_IS_STUPID @@ -1064,18 +1063,17 @@ cAudioManager::ProcessModelVehicle(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeDivider = 4; } m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = volume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -1096,7 +1094,7 @@ cAudioManager::ProcessModelHeliVehicle(cVehicleParams& params) static uint32 prevFreq = 22050; uint32 freq; - bool isPlayerVeh; + bool8 isPlayerVeh; int16 acceletateState; int16 brakeState; @@ -1104,7 +1102,7 @@ cAudioManager::ProcessModelHeliVehicle(cVehicleParams& params) return; if (FindPlayerVehicle() == params.m_pVehicle) - isPlayerVeh = true; + isPlayerVeh = TRUE; else #ifdef FIX_BUGS isPlayerVeh = CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle == params.m_pVehicle; @@ -1120,33 +1118,32 @@ cAudioManager::ProcessModelHeliVehicle(cVehicleParams& params) } if (acceletateState < brakeState) acceletateState = brakeState; - freq = clamp2(5 * acceletateState + 22050, prevFreq, 30); + freq = Clamp2(5 * acceletateState + 22050, prevFreq, 30); CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); m_sQueueSample.m_nVolume = ComputeVolume(70, SOUND_INTENSITY, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 2; m_sQueueSample.m_nSampleIndex = SFX_CAR_RC_HELI; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = 70; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_CAR_RC_HELI); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_CAR_RC_HELI); + SET_LOOP_OFFSETS(SFX_CAR_RC_HELI) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } if (isPlayerVeh) prevFreq = freq; } -bool +bool8 cAudioManager::ProcessVehicleRoadNoise(cVehicleParams& params) { const float SOUND_INTENSITY = 95.0f; @@ -1159,10 +1156,10 @@ cAudioManager::ProcessVehicleRoadNoise(cVehicleParams& params) uint8 wheelsOnGround; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; switch (params.m_VehicleType) { case VEHICLE_TYPE_CAR: wheelsOnGround = ((CAutomobile*)params.m_pVehicle)->m_nWheelsOnGround; @@ -1175,7 +1172,7 @@ cAudioManager::ProcessVehicleRoadNoise(cVehicleParams& params) break; } if (params.m_pTransmission == nil || wheelsOnGround == 0) - return true; + return TRUE; velocity = Abs(params.m_fVelocityChange); if (velocity > 0.0f) { @@ -1185,7 +1182,7 @@ cAudioManager::ProcessVehicleRoadNoise(cVehicleParams& params) if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; if (params.m_pVehicle->m_nSurfaceTouched == SURFACE_WATER) { m_sQueueSample.m_nSampleIndex = SFX_BOAT_WATER_LOOP; @@ -1199,22 +1196,21 @@ cAudioManager::ProcessVehicleRoadNoise(cVehicleParams& params) m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } -bool +bool8 cAudioManager::ProcessWetRoadNoise(cVehicleParams& params) { const float SOUND_INTENSITY = 30.0f; @@ -1227,7 +1223,7 @@ cAudioManager::ProcessWetRoadNoise(cVehicleParams& params) uint8 wheelsOnGround; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; switch (params.m_VehicleType) { case VEHICLE_TYPE_CAR: wheelsOnGround = ((CAutomobile*)params.m_pVehicle)->m_nWheelsOnGround; @@ -1240,7 +1236,7 @@ cAudioManager::ProcessWetRoadNoise(cVehicleParams& params) break; } if (params.m_pTransmission == nil || wheelsOnGround == 0) - return true; + return TRUE; velocity = Abs(params.m_fVelocityChange); if (velocity > 0.0f) { @@ -1252,26 +1248,25 @@ cAudioManager::ProcessWetRoadNoise(cVehicleParams& params) m_sQueueSample.m_nCounter = 1; m_sQueueSample.m_nSampleIndex = SFX_ROAD_NOISE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; multiplier = (m_sQueueSample.m_fDistance / SOUND_INTENSITY) * 0.5f; freq = SampleManager.GetSampleBaseFrequency(SFX_ROAD_NOISE); m_sQueueSample.m_nFrequency = freq + freq * multiplier; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } void @@ -1296,18 +1291,18 @@ cAudioManager::ProcessVehicleEngine(cVehicleParams& params) float relativeChange; float modificator; float traction; - bool isMoped; - bool caddyBool; + bool8 isMoped; + bool8 caddyBool; - isMoped = false; - caddyBool = false; + isMoped = FALSE; + caddyBool = FALSE; traction = 0.0f; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) return; playerVeh = FindPlayerVehicle(); veh = params.m_pVehicle; if (playerVeh == veh && veh->GetStatus() == STATUS_WRECKED) { - SampleManager.StopChannel(m_nActiveSamples); + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); return; } if (!veh->bEngineOn) @@ -1322,12 +1317,12 @@ cAudioManager::ProcessVehicleEngine(cVehicleParams& params) switch (veh->m_modelIndex) { case MI_PIZZABOY: case MI_FAGGIO: - isMoped = true; + isMoped = TRUE; currentGear = transmission->nNumberOfGears; break; case MI_CADDY: currentGear = transmission->nNumberOfGears; - caddyBool = true; + caddyBool = TRUE; break; default: currentGear = veh->m_nCurrentGear; @@ -1354,7 +1349,7 @@ cAudioManager::ProcessVehicleEngine(cVehicleParams& params) } if (wheelsOnGround != 0) { - if (!veh->bIsHandbrakeOn || isMoped && caddyBool) { //mb bug, bcs it's can't be true together + if (!veh->bIsHandbrakeOn || isMoped && caddyBool) { //mb bug, bcs it's can't be TRUE together if (veh->GetStatus() == STATUS_SIMPLE || isMoped || caddyBool) { traction = 0.0f; } else { @@ -1478,20 +1473,19 @@ cAudioManager::ProcessVehicleEngine(cVehicleParams& params) m_sQueueSample.m_nFrequency = freq + 20 * m_sQueueSample.m_nBankIndex % 100; } m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; if (m_sQueueSample.m_nSampleIndex == SFX_CAR_IDLE_5 || m_sQueueSample.m_nSampleIndex == SFX_CAR_REV_5) m_sQueueSample.m_nFrequency /= 2; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 8; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -1517,7 +1511,7 @@ void cAudioManager::PlayerJustGotInCar() const { if (m_bIsInitialised) - bPlayerJustEnteredCar = true; + bPlayerJustEnteredCar = TRUE; } void @@ -1527,7 +1521,7 @@ cAudioManager::PlayerJustLeftCar(void) const } void -cAudioManager::AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, uint8 counter, bool notLooping) +cAudioManager::AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, uint8 counter, bool8 notLooping) { m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, 50.f, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { @@ -1538,7 +1532,7 @@ cAudioManager::AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sampl #else m_sQueueSample.m_nBankIndex = SFX_BANK_0; #endif // GTA_PS2 - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nFrequency = freq; if (notLooping) { @@ -1548,13 +1542,12 @@ cAudioManager::AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sampl m_sQueueSample.m_nLoopCount = 1; } m_sQueueSample.m_nEmittingVolume = emittingVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 50.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -1569,19 +1562,18 @@ cAudioManager::ProcessCesna(cVehicleParams ¶ms) m_sQueueSample.m_nCounter = 52; m_sQueueSample.m_nSampleIndex = SFX_CESNA_IDLE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nFrequency = 12500; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nReleasingVolumeDivider = 8; m_sQueueSample.m_nEmittingVolume = 80; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = 200.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } if(params.m_fDistance < SQR(90)) { @@ -1590,19 +1582,18 @@ cAudioManager::ProcessCesna(cVehicleParams ¶ms) m_sQueueSample.m_nCounter = 2; m_sQueueSample.m_nSampleIndex = SFX_CESNA_REV; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nFrequency = 25000; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nReleasingVolumeDivider = 4; m_sQueueSample.m_nEmittingVolume = 80; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = 90.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -1639,41 +1630,41 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh float velocityChangeForAudio; float relativeVelocityChange; float time; - bool channelUsed; - bool lostTraction; - bool noGearBox; - bool stuckInSand; - bool processedAccelSampleStopped; - bool isMoped; + bool8 channelUsed; + bool8 lostTraction; + bool8 noGearBox; + bool8 stuckInSand; + bool8 processedAccelSampleStopped; + bool8 isMoped; static uint32 gearSoundStartTime = CTimer::GetTimeInMilliseconds(); static int32 nCruising = 0; static int16 LastAccel = 0; static uint8 CurrentPretendGear = 1; - static bool bLostTractionLastFrame = false; - static bool bHandbrakeOnLastFrame = false; - static bool bAccelSampleStopped = true; + static bool8 bLostTractionLastFrame = FALSE; + static bool8 bHandbrakeOnLastFrame = FALSE; + static bool8 bAccelSampleStopped = TRUE; - lostTraction = false; + lostTraction = FALSE; isMoped = params.m_pVehicle->m_modelIndex == MI_PIZZABOY || params.m_pVehicle->m_modelIndex == MI_FAGGIO; - processedAccelSampleStopped = false; + processedAccelSampleStopped = FALSE; if (bPlayerJustEnteredCar) { - bAccelSampleStopped = true; - bPlayerJustEnteredCar = false; + bAccelSampleStopped = TRUE; + bPlayerJustEnteredCar = FALSE; nCruising = 0; LastAccel = 0; - bLostTractionLastFrame = false; + bLostTractionLastFrame = FALSE; CurrentPretendGear = 1; - bHandbrakeOnLastFrame = false; + bHandbrakeOnLastFrame = FALSE; } if (CReplay::IsPlayingBack()) { - accelerateState = (255.0f * clamp(params.m_pVehicle->m_fGasPedal, 0.0f, 1.0f)); - brakeState = (255.0f * clamp(params.m_pVehicle->m_fBrakePedal, 0.0f, 1.0f)); + accelerateState = (255.0f * Clamp(params.m_pVehicle->m_fGasPedal, 0.0f, 1.0f)); + brakeState = (255.0f * Clamp(params.m_pVehicle->m_fBrakePedal, 0.0f, 1.0f)); } else { accelerateState = Pads[0].GetAccelerate(); brakeState = Pads[0].GetBrake(); } - channelUsed = SampleManager.GetChannelUsedFlag(m_nActiveSamples); + channelUsed = SampleManager.GetChannelUsedFlag(CHANNEL_PLAYER_VEHICLE_ENGINE); if (isMoped) { CurrentPretendGear = params.m_pTransmission->nNumberOfGears; currentGear = CurrentPretendGear; @@ -1720,26 +1711,26 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh ++wheelInUseCounter; } if (wheelInUseCounter > 2) - lostTraction = true; + lostTraction = TRUE; } break; case 'F': if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { if (wheelState[BIKEWHEEL_FRONT] != WHEEL_STATE_NORMAL) - lostTraction = true; + lostTraction = TRUE; } else { if ((wheelState[CARWHEEL_FRONT_LEFT] != WHEEL_STATE_NORMAL || wheelState[CARWHEEL_FRONT_RIGHT] != WHEEL_STATE_NORMAL) && (wheelState[CARWHEEL_REAR_LEFT] != WHEEL_STATE_NORMAL || wheelState[CARWHEEL_REAR_RIGHT] != WHEEL_STATE_NORMAL)) - lostTraction = true; + lostTraction = TRUE; } break; case 'R': if (params.m_VehicleType == VEHICLE_TYPE_BIKE) { if (wheelState[BIKEWHEEL_REAR] != WHEEL_STATE_NORMAL) - lostTraction = true; + lostTraction = TRUE; } else { if (wheelState[CARWHEEL_REAR_LEFT] != WHEEL_STATE_NORMAL || wheelState[CARWHEEL_REAR_RIGHT] != WHEEL_STATE_NORMAL) - lostTraction = true; + lostTraction = TRUE; } break; default: @@ -1761,7 +1752,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh gearSoundLength = 0; engineSoundType = aVehicleSettings[params.m_nIndex].m_nBank; soundOffset = 3 * (engineSoundType - CAR_SFX_BANKS_OFFSET); - noGearBox = false; + noGearBox = FALSE; switch (engineSoundType) { case SFX_BANK_PONTIAC: gearSoundLength = 2526; @@ -1806,7 +1797,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh gearSoundLength = 2410; break; default: - noGearBox = true; + noGearBox = TRUE; break; } if (!channelUsed || nCruising || noGearBox) { @@ -1814,12 +1805,12 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh } else { gearSoundLength -= 1000; if (CTimer::GetTimeInMilliseconds() - gearSoundStartTime > gearSoundLength) { - channelUsed = false; + channelUsed = FALSE; gearSoundStartTime = CTimer::GetTimeInMilliseconds(); } } relativeVelocityChange = 2.0f * params.m_fVelocityChange / params.m_pTransmission->fMaxVelocity; - accelerationMultipler = clamp(relativeVelocityChange, 0.0f, 1.0f); + accelerationMultipler = Clamp(relativeVelocityChange, 0.0f, 1.0f); gasPedalAudio = accelerationMultipler; switch (engineSoundType) { case SFX_BANK_MOPED: @@ -1837,8 +1828,8 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh if (accelerateState <= 0) { if (params.m_fVelocityChange < -0.001f) { if (channelUsed) { - SampleManager.StopChannel(m_nActiveSamples); - bAccelSampleStopped = true; + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); + bAccelSampleStopped = TRUE; } if (wheelsOnGround == 0 || params.m_pVehicle->bIsHandbrakeOn || lostTraction) gasPedalAudio = *gasPedalAudioPtr; @@ -1849,8 +1840,8 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh *gasPedalAudioPtr = Max(0.0f, gasPedalAudio); } else if (LastAccel > 0) { if (channelUsed) { - SampleManager.StopChannel(m_nActiveSamples); - bAccelSampleStopped = true; + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); + bAccelSampleStopped = TRUE; } nCruising = 0; if (wheelsOnGround == 0 @@ -1871,7 +1862,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh vol /= 4; if (engineSoundType == SFX_BANK_TRUCK) freq /= 2; - AddPlayerCarSample(vol, freq, soundOffset + SFX_CAR_FINGER_OFF_ACCEL_1, engineSoundType, 63, false); + AddPlayerCarSample(vol, freq, soundOffset + SFX_CAR_FINGER_OFF_ACCEL_1, engineSoundType, 63, FALSE); } } freq = (10000.f * gasPedalAudio) + 22050; @@ -1880,7 +1871,7 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh freq /= 2; if (params.m_pVehicle->bIsDrowning) vol /= 4; - AddPlayerCarSample(vol, freq, engineSoundType - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1, SFX_BANK_0, 52, true); + AddPlayerCarSample(vol, freq, engineSoundType - CAR_SFX_BANKS_OFFSET + SFX_CAR_IDLE_1, SFX_BANK_0, 52, TRUE); CurrentPretendGear = Max(1, currentGear); } @@ -1910,70 +1901,70 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh if (engineSoundType == SFX_BANK_TRUCK) freq /= 2; if (channelUsed) { - SampleManager.StopChannel(m_nActiveSamples); - bAccelSampleStopped = true; + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); + bAccelSampleStopped = TRUE; } if (params.m_pVehicle->bIsDrowning) vol /= 4; - AddPlayerCarSample(vol, freq, engineSoundType - CAR_SFX_BANKS_OFFSET + SFX_CAR_REV_1, SFX_BANK_0, 2, true); + AddPlayerCarSample(vol, freq, engineSoundType - CAR_SFX_BANKS_OFFSET + SFX_CAR_REV_1, SFX_BANK_0, 2, TRUE); } else { TranslateEntity(&m_sQueueSample.m_vecPos, &pos); if (bAccelSampleStopped) { if (CurrentPretendGear != 1 || currentGear != 2) CurrentPretendGear = Max(1, currentGear - 1); - processedAccelSampleStopped = true; - bAccelSampleStopped = false; + processedAccelSampleStopped = TRUE; + bAccelSampleStopped = FALSE; } if (channelUsed) { - SampleManager.SetChannelEmittingVolume(m_nActiveSamples, 120); - SampleManager.SetChannel3DPosition(m_nActiveSamples, pos.x, pos.y, pos.z); - SampleManager.SetChannel3DDistances(m_nActiveSamples, 50.0f, 12.5f); + SampleManager.SetChannelEmittingVolume(CHANNEL_PLAYER_VEHICLE_ENGINE, 120); + SampleManager.SetChannel3DPosition(CHANNEL_PLAYER_VEHICLE_ENGINE, pos.x, pos.y, pos.z); + SampleManager.SetChannel3DDistances(CHANNEL_PLAYER_VEHICLE_ENGINE, 50.0f, 12.5f); freq = (GearFreqAdj[CurrentPretendGear] + freqModifier + 22050) ; if (engineSoundType == SFX_BANK_TRUCK) freq /= 2; - SampleManager.SetChannelFrequency(m_nActiveSamples, freq); + SampleManager.SetChannelFrequency(CHANNEL_PLAYER_VEHICLE_ENGINE, freq); if (!channelUsed) { - SampleManager.SetChannelReverbFlag(m_nActiveSamples, m_bDynamicAcousticModelingStatus != false); - SampleManager.StartChannel(m_nActiveSamples); + SampleManager.SetChannelReverbFlag(CHANNEL_PLAYER_VEHICLE_ENGINE, m_bDynamicAcousticModelingStatus != FALSE); + SampleManager.StartChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); } } else if (processedAccelSampleStopped) { gearSoundStartTime = CTimer::GetTimeInMilliseconds(); - params.m_pVehicle->bAudioChangingGear = true; - if (!SampleManager.InitialiseChannel(m_nActiveSamples, soundOffset + SFX_CAR_ACCEL_1, SFX_BANK_0)) + params.m_pVehicle->bAudioChangingGear = TRUE; + if (!SampleManager.InitialiseChannel(CHANNEL_PLAYER_VEHICLE_ENGINE, soundOffset + SFX_CAR_ACCEL_1, SFX_BANK_0)) return; - SampleManager.SetChannelLoopCount(m_nActiveSamples, 1); - SampleManager.SetChannelLoopPoints(m_nActiveSamples, 0, -1); + SampleManager.SetChannelLoopCount(CHANNEL_PLAYER_VEHICLE_ENGINE, 1); + SampleManager.SetChannelLoopPoints(CHANNEL_PLAYER_VEHICLE_ENGINE, 0, -1); - SampleManager.SetChannelEmittingVolume(m_nActiveSamples, 120); - SampleManager.SetChannel3DPosition(m_nActiveSamples, pos.x, pos.y, pos.z); - SampleManager.SetChannel3DDistances(m_nActiveSamples, 50.0f, 12.5f); + SampleManager.SetChannelEmittingVolume(CHANNEL_PLAYER_VEHICLE_ENGINE, 120); + SampleManager.SetChannel3DPosition(CHANNEL_PLAYER_VEHICLE_ENGINE, pos.x, pos.y, pos.z); + SampleManager.SetChannel3DDistances(CHANNEL_PLAYER_VEHICLE_ENGINE, 50.0f, 12.5f); freq = (GearFreqAdj[CurrentPretendGear] + freqModifier + 22050); if (engineSoundType == SFX_BANK_TRUCK) freq /= 2; - SampleManager.SetChannelFrequency(m_nActiveSamples, freq); + SampleManager.SetChannelFrequency(CHANNEL_PLAYER_VEHICLE_ENGINE, freq); if (!channelUsed) { - SampleManager.SetChannelReverbFlag(m_nActiveSamples, m_bDynamicAcousticModelingStatus != false); - SampleManager.StartChannel(m_nActiveSamples); + SampleManager.SetChannelReverbFlag(CHANNEL_PLAYER_VEHICLE_ENGINE, m_bDynamicAcousticModelingStatus != FALSE); + SampleManager.StartChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); } } else if (CurrentPretendGear < params.m_pTransmission->nNumberOfGears - 1) { ++CurrentPretendGear; gearSoundStartTime = CTimer::GetTimeInMilliseconds(); - params.m_pVehicle->bAudioChangingGear = true; - if (!SampleManager.InitialiseChannel(m_nActiveSamples, soundOffset + SFX_CAR_ACCEL_1, SFX_BANK_0)) + params.m_pVehicle->bAudioChangingGear = TRUE; + if (!SampleManager.InitialiseChannel(CHANNEL_PLAYER_VEHICLE_ENGINE, soundOffset + SFX_CAR_ACCEL_1, SFX_BANK_0)) return; - SampleManager.SetChannelLoopCount(m_nActiveSamples, 1); - SampleManager.SetChannelLoopPoints(m_nActiveSamples, 0, -1); + SampleManager.SetChannelLoopCount(CHANNEL_PLAYER_VEHICLE_ENGINE, 1); + SampleManager.SetChannelLoopPoints(CHANNEL_PLAYER_VEHICLE_ENGINE, 0, -1); - SampleManager.SetChannelEmittingVolume(m_nActiveSamples, 120); - SampleManager.SetChannel3DPosition(m_nActiveSamples, pos.x, pos.y, pos.z); - SampleManager.SetChannel3DDistances(m_nActiveSamples, 50.0f, 12.5f); + SampleManager.SetChannelEmittingVolume(CHANNEL_PLAYER_VEHICLE_ENGINE, 120); + SampleManager.SetChannel3DPosition(CHANNEL_PLAYER_VEHICLE_ENGINE, pos.x, pos.y, pos.z); + SampleManager.SetChannel3DDistances(CHANNEL_PLAYER_VEHICLE_ENGINE, 50.0f, 12.5f); freq = (GearFreqAdj[CurrentPretendGear] + freqModifier + 22050); if (engineSoundType == SFX_BANK_TRUCK) freq /= 2; - SampleManager.SetChannelFrequency(m_nActiveSamples, freq); + SampleManager.SetChannelFrequency(CHANNEL_PLAYER_VEHICLE_ENGINE, freq); if (!channelUsed) { - SampleManager.SetChannelReverbFlag(m_nActiveSamples, m_bDynamicAcousticModelingStatus != false); - SampleManager.StartChannel(m_nActiveSamples); + SampleManager.SetChannelReverbFlag(CHANNEL_PLAYER_VEHICLE_ENGINE, m_bDynamicAcousticModelingStatus != FALSE); + SampleManager.StartChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); } } else { nCruising = 1; @@ -1982,8 +1973,8 @@ cAudioManager::ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh } } else { PlayCruising: - bAccelSampleStopped = true; - SampleManager.StopChannel(m_nActiveSamples); + bAccelSampleStopped = TRUE; + SampleManager.StopChannel(CHANNEL_PLAYER_VEHICLE_ENGINE); if (isMoped || accelerateState >= 150 && wheelsOnGround && brakeState <= 0 && !params.m_pVehicle->bIsHandbrakeOn && !lostTraction && currentGear >= params.m_pTransmission->nNumberOfGears - 1) { if (accelerateState >= 220 && params.m_fVelocityChange + 0.001f >= velocityChangeForAudio) { @@ -1995,7 +1986,7 @@ PlayCruising: freq = 27 * nCruising + freqModifier + 22050; if (engineSoundType == SFX_BANK_TRUCK) freq /= 2; - AddPlayerCarSample(120, freq, soundOffset + SFX_CAR_AFTER_ACCEL_1, engineSoundType, 64, true); + AddPlayerCarSample(120, freq, soundOffset + SFX_CAR_AFTER_ACCEL_1, engineSoundType, 64, TRUE); } else { nCruising = 0; } @@ -2007,7 +1998,7 @@ PlayCruising: return; } -bool +bool8 cAudioManager::ProcessVehicleSkidding(cVehicleParams& params) { const float SOUND_INTENSITY = 40.0f; @@ -2026,7 +2017,7 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams& params) float skidVal = 0.0f; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; switch (params.m_VehicleType) { case VEHICLE_TYPE_CAR: automobile = (CAutomobile*)params.m_pVehicle; @@ -2044,10 +2035,10 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams& params) break; default: debug("\n * AUDIOLOG: ProcessVehicleSkidding() Unsupported vehicle type %d * \n", params.m_VehicleType); - return true; + return TRUE; } if (wheelsOnGround == 0) - return true; + return TRUE; CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); for (int32 i = 0; i < numWheels; i++) { @@ -2089,7 +2080,7 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams& params) m_sQueueSample.m_nFrequency = 13000.f * skidVal + 35000.f; m_sQueueSample.m_nVolume /= 4; if (m_sQueueSample.m_nVolume == 0) - return true; + return TRUE; break; case SURFACE_GRAVEL: case SURFACE_MUD_DRY: @@ -2109,22 +2100,21 @@ cAudioManager::ProcessVehicleSkidding(cVehicleParams& params) } m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 8; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } float @@ -2173,7 +2163,7 @@ cAudioManager::GetVehicleNonDriveWheelSkidValue(CVehicle *veh, tWheelState wheel return Max(relativeVelChange, Min(1.0f, Abs(veh->m_vecTurnSpeed.z) * 20.0f)); } -bool +bool8 cAudioManager::ProcessVehicleHorn(cVehicleParams& params) { const float SOUND_INTENSITY = 40.0f; @@ -2182,17 +2172,17 @@ cAudioManager::ProcessVehicleHorn(cVehicleParams& params) uint8 volume; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; veh = params.m_pVehicle; if (veh->m_bSirenOrAlarm && UsesSirenSwitching(params)) - return true; + return TRUE; if (veh->m_modelIndex == MI_MRWHOOP) - return true; + return TRUE; if (veh->IsAlarmOn()) - return true; + return TRUE; if (veh->m_nCarHornTimer != 0) { if (veh->GetStatus() != STATUS_PLAYER) { @@ -2201,7 +2191,7 @@ cAudioManager::ProcessVehicleHorn(cVehicleParams& params) veh->m_nCarHornPattern = (m_FrameCounter + m_sQueueSample.m_nEntityIndex) & 7; if (!hornPatternsArray[veh->m_nCarHornPattern][44 - veh->m_nCarHornTimer]) - return true; + return TRUE; } CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -2211,7 +2201,7 @@ cAudioManager::ProcessVehicleHorn(cVehicleParams& params) m_sQueueSample.m_nCounter = 4; m_sQueueSample.m_nSampleIndex = aVehicleSettings[params.m_nIndex].m_nHornSample; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_nFrequency = aVehicleSettings[params.m_nIndex].m_nHornFrequency; m_sQueueSample.m_nLoopCount = 0; @@ -2220,35 +2210,34 @@ cAudioManager::ProcessVehicleHorn(cVehicleParams& params) #else m_sQueueSample.m_nEmittingVolume = 80; #endif - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 5.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } -bool +bool8 cAudioManager::UsesSiren(cVehicleParams& params) const { return params.m_pVehicle->UsesSiren(); } -bool +bool8 cAudioManager::UsesSirenSwitching(cVehicleParams& params) const { if (params.m_nIndex == FIRETRUK || params.m_nIndex == MRWHOOP) - return false; + return FALSE; return UsesSiren(params); } -bool +bool8 cAudioManager::ProcessVehicleSirenOrAlarm(cVehicleParams& params) { const float SOUND_INTENSITY = 110.0f; @@ -2257,18 +2246,18 @@ cAudioManager::ProcessVehicleSirenOrAlarm(cVehicleParams& params) uint8 volume; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; veh = params.m_pVehicle; if (!veh->m_bSirenOrAlarm && !veh->IsAlarmOn()) - return true; + return TRUE; if (veh->IsAlarmOn()) { if (CTimer::GetTimeInMilliseconds() > veh->m_nCarHornTimer) veh->m_nCarHornTimer = CTimer::GetTimeInMilliseconds() + 750; if (veh->m_nCarHornTimer < CTimer::GetTimeInMilliseconds() + 375) - return true; + return TRUE; } CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -2278,7 +2267,7 @@ cAudioManager::ProcessVehicleSirenOrAlarm(cVehicleParams& params) m_sQueueSample.m_nCounter = 5; if (UsesSiren(params)) { if (params.m_pVehicle->GetStatus() == STATUS_ABANDONED) - return true; + return TRUE; if (veh->m_nCarHornTimer != 0 && params.m_nIndex != FIRETRUK && params.m_nIndex != MRWHOOP) { m_sQueueSample.m_nSampleIndex = SFX_SIREN_FAST; if (params.m_nIndex == FBIRANCH) @@ -2298,30 +2287,29 @@ cAudioManager::ProcessVehicleSirenOrAlarm(cVehicleParams& params) m_sQueueSample.m_nFrequency = aVehicleSettings[params.m_nIndex].m_nHornFrequency; } m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = volume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 7.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } - return true; + return TRUE; } -bool +bool8 cAudioManager::UsesReverseWarning(int32 model) const { return model == LINERUN || model == FIRETRUK || model == BUS || model == COACH || model == PACKER || model == FLATBED; } -bool +bool8 cAudioManager::ProcessVehicleReverseWarning(cVehicleParams& params) { const float SOUND_INTENSITY = 50.0f; @@ -2330,7 +2318,7 @@ cAudioManager::ProcessVehicleReverseWarning(cVehicleParams& params) uint8 volume; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; if (veh->bEngineOn && veh->m_fGasPedal < 0.0f) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -2340,7 +2328,7 @@ cAudioManager::ProcessVehicleReverseWarning(cVehicleParams& params) m_sQueueSample.m_nCounter = 12; m_sQueueSample.m_nSampleIndex = SFX_REVERSE_WARNING; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_nFrequency = (100 * m_sQueueSample.m_nEntityIndex & 1023) + SampleManager.GetSampleBaseFrequency(SFX_REVERSE_WARNING); m_sQueueSample.m_nLoopCount = 0; @@ -2349,21 +2337,20 @@ cAudioManager::ProcessVehicleReverseWarning(cVehicleParams& params) #else m_sQueueSample.m_nEmittingVolume = 60; #endif - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } -bool +bool8 cAudioManager::ProcessVehicleDoors(cVehicleParams& params) { const float SOUND_INTENSITY = 40.0f; @@ -2374,7 +2361,7 @@ cAudioManager::ProcessVehicleDoors(cVehicleParams& params) float velocity; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; automobile = (CAutomobile *)params.m_pVehicle; CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -2391,27 +2378,26 @@ cAudioManager::ProcessVehicleDoors(cVehicleParams& params) m_sQueueSample.m_nSampleIndex = m_anRandomTable[1] % 6 + SFX_COL_CAR_PANEL_1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex) + RandomDisplacement(1000); m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 10; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 1.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; AddSampleToRequestedQueue(); } } } } } - return true; + return TRUE; } -bool +bool8 cAudioManager::ProcessAirBrakes(cVehicleParams& params) { const float SOUND_INTENSITY = 30.0f; @@ -2419,14 +2405,14 @@ cAudioManager::ProcessAirBrakes(cVehicleParams& params) uint8 volume; if (params.m_fDistance > SQR(SOUND_INTENSITY)) - return false; + return FALSE; automobile = (CAutomobile *)params.m_pVehicle; if (!automobile->bEngineOn) - return true; + return TRUE; if ((automobile->m_fVelocityChangeForAudio < 0.025f || params.m_fVelocityChange >= 0.025f) && (automobile->m_fVelocityChangeForAudio > -0.025f || params.m_fVelocityChange <= 0.025f)) - return true; + return TRUE; CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); volume = m_anRandomTable[0] % 10 + 70; @@ -2437,31 +2423,30 @@ cAudioManager::ProcessAirBrakes(cVehicleParams& params) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_AIR_BRAKES); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 10; m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.m_nEmittingVolume = volume; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } - return true; + return TRUE; } -bool +bool8 cAudioManager::HasAirBrakes(int32 model) const { return model == LINERUN || model == FIRETRUK || model == TRASH || model == BUS || model == BARRACKS || model == COACH || model == PACKER || model == FLATBED; } -bool +bool8 cAudioManager::ProcessEngineDamage(cVehicleParams& params) { const float SOUND_INTENSITY = 40.0f; @@ -2470,11 +2455,11 @@ cAudioManager::ProcessEngineDamage(cVehicleParams& params) uint8 emittingVolume; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; if (params.m_pVehicle->m_modelIndex == MI_CADDY) - return true; + return TRUE; if (params.m_pVehicle->GetStatus() == STATUS_WRECKED) - return true; + return TRUE; health = params.m_pVehicle->m_fHealth; if (health < 390.0f) { if (health < 250.0f) { @@ -2495,24 +2480,23 @@ cAudioManager::ProcessEngineDamage(cVehicleParams& params) if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 28; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } - return true; + return TRUE; } -bool +bool8 cAudioManager::ProcessCarBombTick(cVehicleParams& params) { const float SOUND_INTENSITY = 40.0f; @@ -2521,7 +2505,7 @@ cAudioManager::ProcessCarBombTick(cVehicleParams& params) uint8 bombType; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; if (params.m_pVehicle->bEngineOn) { switch (params.m_VehicleType) { case VEHICLE_TYPE_CAR: @@ -2532,7 +2516,7 @@ cAudioManager::ProcessCarBombTick(cVehicleParams& params) break; default: debug("\n * AUDIOLOG: ProcessCarBombTick() Unsupported vehicle type %d * \n", params.m_VehicleType); - return true; + return TRUE; break; } if (bombType == CARBOMB_TIMEDACTIVE) { @@ -2542,24 +2526,23 @@ cAudioManager::ProcessCarBombTick(cVehicleParams& params) m_sQueueSample.m_nCounter = 35; m_sQueueSample.m_nSampleIndex = SFX_COUNTDOWN; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_COUNTDOWN); m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = EMITTING_VOLUME; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } } - return true; + return TRUE; } void @@ -2569,15 +2552,15 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) uint8 emittingVol; float relVol; float vol; - bool noReflections; - bool isHeli; + bool8 noReflections; + bool8 isHeli; float maxDist; static uint8 GunIndex = 53; for (int i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents; i++) { - noReflections = false; - isHeli = false; - m_sQueueSample.m_bRequireReflection = false; + noReflections = FALSE; + isHeli = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; event = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i]; switch (event) { case SOUND_CAR_DOOR_CLOSE_BONNET: @@ -2620,7 +2603,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_CAR_DOOR_OPEN_BONNET: @@ -2660,7 +2643,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_CAR_WINDSHIELD_CRACK: { @@ -2735,7 +2718,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_CAR_LIGHT_BREAK: { @@ -2780,7 +2763,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_nReleasingVolumeDivider = 7; - noReflections = true; + noReflections = TRUE; maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[0] % 15 + 55; break; @@ -2865,7 +2848,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; emittingVol = (37.0f * vol * 625.0f / 24.0f) + 90; maxDist = SQR(SOUND_INTENSITY); - noReflections = true; + noReflections = TRUE; break; } case SOUND_CAR_BOMB_TICK: { @@ -2878,7 +2861,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVol = 60; break; } @@ -2960,8 +2943,8 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = true; - isHeli = true; + m_sQueueSample.m_bRequireReflection = TRUE; + isHeli = TRUE; break; default: { @@ -3014,7 +2997,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; } } @@ -3046,7 +3029,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVol = 50; maxDist = SQR(SOUND_INTENSITY); break; @@ -3060,7 +3043,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) } /* case SOUND_PED_BODYCAST_HIT: pedParams.m_pPed = nil; - pedParams.m_bDistanceCalculated = false; + pedParams.m_bDistanceCalculated = FALSE; pedParams.m_fDistance = 0.0f; pedParams.m_bDistanceCalculated = params.m_bDistanceCalculated; pedParams.m_fDistance = params.m_fDistance; @@ -3087,7 +3070,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; maxDist = SQR(SOUND_INTENSITY); - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVol = m_anRandomTable[4] % 20 + 90; break; } @@ -3105,7 +3088,7 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) maxDist = SQR(SOUND_INTENSITY); emittingVol = m_anRandomTable[4] % 20 + 55; CrunchOffset %= 2; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_CAR_PED_COLLISION: { @@ -3135,18 +3118,17 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) if (m_sQueueSample.m_nVolume != 0) { if (noReflections) { m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; } else { m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; } - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; if (isHeli) { if (0.2f * m_sQueueSample.m_fSoundIntensity > m_sQueueSample.m_fDistance) { - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nOffset = 0; #ifdef THIS_IS_STUPID goto AddSample; @@ -3157,14 +3139,14 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params) m_sQueueSample.m_nCounter = GunIndex++; if (GunIndex > 58) GunIndex = 53; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); continue; #endif } - isHeli = false; + isHeli = FALSE; } - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; #ifdef THIS_IS_STUPID AddSample: AddSampleToRequestedQueue(); @@ -3188,7 +3170,7 @@ AddSample: } #ifdef GTA_TRAIN -bool +bool8 cAudioManager::ProcessTrainNoise(cVehicleParams& params) { const float SOUND_INTENSITY = 300.0f; @@ -3198,7 +3180,7 @@ cAudioManager::ProcessTrainNoise(cVehicleParams& params) float speedMultipler; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) - return false; + return FALSE; if (params.m_fVelocityChange > 0.0f) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -3211,19 +3193,18 @@ cAudioManager::ProcessTrainNoise(cVehicleParams& params) m_sQueueSample.m_nCounter = 32; m_sQueueSample.m_nSampleIndex = SFX_TRAIN_FAR; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_TRAIN_FAR); m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3234,33 +3215,32 @@ cAudioManager::ProcessTrainNoise(cVehicleParams& params) m_sQueueSample.m_nCounter = 33; m_sQueueSample.m_nSampleIndex = SFX_TRAIN_NEAR; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_TRAIN_NEAR) + 100 * m_sQueueSample.m_nEntityIndex % 987; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } } - return true; + return TRUE; } #endif -bool +bool8 cAudioManager::ProcessBoatEngine(cVehicleParams& params) { CBoat *boat; float padRelativeAccerate; - bool isV12 = false; + bool8 isV12 = FALSE; static int32 LastFreq = 2000; static int8 LastVol = 0; @@ -3269,7 +3249,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) if (params.m_fDistance < SQR(intensity)) { boat = (CBoat *)params.m_pVehicle; if(boat->GetStatus() == STATUS_WRECKED) - return true; + return TRUE; float freqModificator; float volModificator; @@ -3291,7 +3271,7 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) case MI_JETMAX: freqModificator = 6000.0f; volModificator = 60.0f; - isV12 = true; + isV12 = TRUE; BaseFreq = 9000; BaseVol = 20; break; @@ -3309,18 +3289,18 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) BaseFreq = 1782; break; default: - return true; + return TRUE; } - bool bIsPlayerVeh; + bool8 bIsPlayerVeh; if(FindPlayerVehicle() == params.m_pVehicle) { float padAccelerate = Max(Pads[0].GetAccelerate(), Pads[0].GetBrake()); padRelativeAccerate = padAccelerate / 255.0f; - bIsPlayerVeh = true; + bIsPlayerVeh = TRUE; } else { padRelativeAccerate = Max(params.m_pVehicle->m_fGasPedal, params.m_pVehicle->m_fBrakePedal); - bIsPlayerVeh = false; + bIsPlayerVeh = FALSE; } int Freq = BaseFreq + (padRelativeAccerate * freqModificator); @@ -3358,18 +3338,17 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) else m_sQueueSample.m_nSampleIndex = SFX_BOAT_CRUISER_LOOP; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = Vol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = intensity; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3383,18 +3362,17 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) m_sQueueSample.m_nSampleIndex = SFX_FISHING_BOAT_IDLE; m_sQueueSample.m_nFrequency += (m_sQueueSample.m_nEntityIndex * 65536) % 1000; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = 80; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = intensity; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3402,12 +3380,12 @@ cAudioManager::ProcessBoatEngine(cVehicleParams& params) LastFreq = Freq; LastVol = Vol; } - return true; + return TRUE; } - return false; + return FALSE; } -bool +bool8 cAudioManager::ProcessBoatMovingOverWater(cVehicleParams& params) { float velocityChange; @@ -3415,11 +3393,11 @@ cAudioManager::ProcessBoatMovingOverWater(cVehicleParams& params) float multiplier; if (params.m_fDistance > SQR(50)) - return false; + return FALSE; velocityChange = Abs(params.m_fVelocityChange); if (velocityChange <= 0.0005f && ((CBoat*)params.m_pVehicle)->bBoatInWater) - return true; + return TRUE; velocityChange = Min(0.75f, velocityChange); multiplier = (velocityChange - 0.0005f) / (1499.0f / 2000.0f); @@ -3430,23 +3408,22 @@ cAudioManager::ProcessBoatMovingOverWater(cVehicleParams& params) m_sQueueSample.m_nCounter = 38; m_sQueueSample.m_nSampleIndex = SFX_BOAT_WATER_LOOP; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nFrequency = (6050.f * multiplier) + 16000; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = vol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = 50.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 6; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } - return true; + return TRUE; } void @@ -3466,12 +3443,12 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) float propellerSpeed; float freqModifier; //may be relate to angle with horison float cameraAngle; - bool distanceCalculatedOld; + bool8 distanceCalculatedOld; float distanceOld; CVector vecPosOld; float volumeModifier;//TODO find better name - bool hunterBool; + bool8 hunterBool; static uint32 freqFrontPrev = 14287; static uint32 freqPropellerPrev = 7143; @@ -3479,7 +3456,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) boat = nil; automobile = nil; - hunterBool = false; + hunterBool = FALSE; if (params.m_fDistance >= SQR(SOUND_INTENSITY)) return; @@ -3494,7 +3471,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) brakeState = veh->m_fBrakePedal * 255.0f; } freqModifier = Abs(veh->GetUp().y); - cameraAngle = (DotProduct(veh->m_matrix.GetForward(), TheCamera.GetForward()) + 1.0f) / 2.0f; + cameraAngle = (DotProduct(veh->GetMatrix().GetForward(), TheCamera.GetForward()) + 1.0f) / 2.0f; if (veh->m_modelIndex == MI_SKIMMER) { boat = (CBoat*)veh; propellerSpeed = boat->m_fMovingSpeed * 50.0f / 11.0f; @@ -3535,21 +3512,31 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); } - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } + + CVector backPropellerPos; + if (automobile != nil) + automobile->GetComponentWorldPosition(CAR_BOOT, backPropellerPos); + else if (params.m_VehicleType == VEHICLE_TYPE_HELI) +#ifdef FIX_BUGS + backPropellerPos = +#endif + params.m_pVehicle->GetMatrix() * CVector(0.0f, -10.0f, 0.0f); + else + backPropellerPos = m_sQueueSample.m_vecPos; if (params.m_fDistance >= SQR(140.0f)) return; @@ -3563,7 +3550,7 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) if (playerVeh == veh && (accelerateState > 0 || brakeState > 0) && freq < 1300)//unnesesary freqModifier alredy <= 1300 freq = 1300; if (veh->m_modelIndex == MI_HUNTER) - hunterBool = true; + hunterBool = TRUE; } @@ -3576,18 +3563,17 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) m_sQueueSample.m_nSampleIndex = SFX_HELI_APACHE_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = (volumeModifier + 1.0f) * 16000 + freq; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 140.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } else if (boat != nil) { m_sQueueSample.m_nSampleIndex = SFX_SEAPLANE_PRO1; @@ -3599,38 +3585,36 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) m_sQueueSample.m_nFrequency = 14287 + Min(1.0f, freqModifier) * 3713; if (propellerSpeed < 1.0f) m_sQueueSample.m_nFrequency = (propellerSpeed + 1.0f) * (m_sQueueSample.m_nFrequency / 2.0f); - m_sQueueSample.m_nFrequency = clamp2(m_sQueueSample.m_nFrequency, freqFrontPrev, 197); + m_sQueueSample.m_nFrequency = Clamp2(m_sQueueSample.m_nFrequency, freqFrontPrev, 197); freqFrontPrev = m_sQueueSample.m_nFrequency; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 140.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } else { m_sQueueSample.m_nSampleIndex = SFX_CAR_HELI_MAI; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = (volumeModifier + 1) * 16000 + freq; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 140.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3657,25 +3641,24 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) if (propellerSpeed < 1.0f) m_sQueueSample.m_nFrequency = (propellerSpeed + 1) * (m_sQueueSample.m_nFrequency / 2); - m_sQueueSample.m_nFrequency = clamp2(m_sQueueSample.m_nFrequency, freqPropellerPrev, 98); + m_sQueueSample.m_nFrequency = Clamp2(m_sQueueSample.m_nFrequency, freqPropellerPrev, 98); freqPropellerPrev = m_sQueueSample.m_nFrequency; } else { m_sQueueSample.m_nSampleIndex = SFX_CAR_HELI_MAI2; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = (volumeModifier + 1) * 16000 + freq; } - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 140.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } @@ -3698,18 +3681,17 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) } m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nCounter = 12; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 30.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 30; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3728,24 +3710,23 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) m_sQueueSample.m_nFrequency = 14287 + Min(1.0f, freqModifier) * 3713; if (propellerSpeed < 1.0f) m_sQueueSample.m_nFrequency = (propellerSpeed + 1) * (m_sQueueSample.m_nFrequency / 2.0f); - m_sQueueSample.m_nFrequency = clamp2(m_sQueueSample.m_nFrequency, freqSkimmerPrev, 197); + m_sQueueSample.m_nFrequency = Clamp2(m_sQueueSample.m_nFrequency, freqSkimmerPrev, 197); freqSkimmerPrev = m_sQueueSample.m_nFrequency; m_sQueueSample.m_nSampleIndex = SFX_SEAPLANE_PRO4; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = 12; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = propellerSpeed * 100.0f; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_SEAPLANE_PRO4); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_SEAPLANE_PRO4); + SET_LOOP_OFFSETS(SFX_SEAPLANE_PRO4) m_sQueueSample.m_fSpeedMultiplier = 5.0f; m_sQueueSample.m_fSoundIntensity = 20.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3754,13 +3735,9 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) vecPosOld = m_sQueueSample.m_vecPos; distanceCalculatedOld = params.m_bDistanceCalculated; distanceOld = params.m_fDistance; - - if (automobile != nil) - automobile->GetComponentWorldPosition(CAR_BOOT, m_sQueueSample.m_vecPos); - else if (params.m_VehicleType == VEHICLE_TYPE_HELI) - m_sQueueSample.m_vecPos = CVector(0.0f, -10.0f, 0.0f); //this is from android, but for real it's not used - params.m_bDistanceCalculated = false; + m_sQueueSample.m_vecPos = backPropellerPos; + params.m_bDistanceCalculated = FALSE; params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); if (params.m_fDistance < SQR(27.0f)) { CalculateDistance(params.m_bDistanceCalculated, params.m_fDistance); @@ -3768,20 +3745,19 @@ cAudioManager::ProcessCarHeli(cVehicleParams& params) if (m_sQueueSample.m_nVolume) { m_sQueueSample.m_nCounter = 2; m_sQueueSample.m_nSampleIndex = hunterBool ? SFX_HELI_APACHE_3 : SFX_CAR_HELI_REA; - m_sQueueSample.m_nBankIndex = 0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_nBankIndex = SFX_BANK_0; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = (volumeModifier + 1.0f) * 16000; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = volumeModifier * 25.0f; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 6.0f; m_sQueueSample.m_fSoundIntensity = 27.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3799,7 +3775,7 @@ cAudioManager::ProcessVehicleFlatTyre(cVehicleParams& params) CAutomobile* automobile; CBike* bike; - bool wheelBurst; + bool8 wheelBurst; uint8 emittingVol; float modifier; @@ -3810,19 +3786,19 @@ cAudioManager::ProcessVehicleFlatTyre(cVehicleParams& params) switch (params.m_VehicleType) { case VEHICLE_TYPE_CAR: automobile = (CAutomobile*)params.m_pVehicle; - wheelBurst = false; + wheelBurst = FALSE; for (int i = 0; i < 4; i++) if (automobile->Damage.GetWheelStatus(i) == WHEEL_STATUS_BURST && automobile->m_aWheelTimer[i] > 0.0f) - wheelBurst = true; + wheelBurst = TRUE; if (!wheelBurst) return; break; case VEHICLE_TYPE_BIKE: bike = (CBike*)params.m_pVehicle; - wheelBurst = false; + wheelBurst = FALSE; for(int i = 0; i < 2; i++) if (bike->m_wheelStatus[i] == WHEEL_STATUS_BURST && bike->m_aWheelTimer[i] > 0.0f) - wheelBurst = true; + wheelBurst = TRUE; if (!wheelBurst) return; break; @@ -3837,20 +3813,19 @@ cAudioManager::ProcessVehicleFlatTyre(cVehicleParams& params) if (m_sQueueSample.m_nVolume) { m_sQueueSample.m_nCounter = 95; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_nSampleIndex = SFX_TYRE_BURST_L; m_sQueueSample.m_nFrequency = (5500.0f * modifier) + 8000; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_TYRE_BURST_L); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_TYRE_BURST_L); + SET_LOOP_OFFSETS(SFX_TYRE_BURST_L) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -3989,12 +3964,12 @@ cAudioManager::ProcessJumboDecel(CPlane *plane) } } -bool +bool8 cAudioManager::SetupJumboTaxiSound(uint8 vol) { const float SOUND_INTENSITY = 180.0f; if (m_sQueueSample.m_fDistance >= SOUND_INTENSITY) - return false; + return FALSE; uint8 emittingVol = (vol / 2) + ((vol / 2) * m_sQueueSample.m_fDistance / SOUND_INTENSITY); @@ -4006,31 +3981,30 @@ cAudioManager::SetupJumboTaxiSound(uint8 vol) m_sQueueSample.m_nCounter = 1; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_TAXI; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = GetJumboTaxiFreq(); m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } - return true; + return TRUE; } -bool +bool8 cAudioManager::SetupJumboWhineSound(uint8 emittingVol, uint32 freq) { const float SOUND_INTENSITY = 170.0f; if (m_sQueueSample.m_fDistance >= SOUND_INTENSITY) - return false; + return FALSE; m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance); @@ -4038,30 +4012,29 @@ cAudioManager::SetupJumboWhineSound(uint8 emittingVol, uint32 freq) m_sQueueSample.m_nCounter = 2; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_WHINE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } - return true; + return TRUE; } -bool +bool8 cAudioManager::SetupJumboEngineSound(uint8 vol, uint32 freq) { const float SOUND_INTENSITY = 180.0f; if (m_sQueueSample.m_fDistance >= SOUND_INTENSITY) - return false; + return FALSE; uint8 emittingVol = vol - gJumboVolOffsetPercentage / 100; m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance); @@ -4069,29 +4042,28 @@ cAudioManager::SetupJumboEngineSound(uint8 vol, uint32 freq) m_sQueueSample.m_nCounter = 3; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_ENGINE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = freq; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 4; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } - return true; + return TRUE; } -bool +bool8 cAudioManager::SetupJumboFlySound(uint8 emittingVol) { const float SOUND_INTENSITY = 440.0f; - if(m_sQueueSample.m_fDistance >= SOUND_INTENSITY) return false; + if(m_sQueueSample.m_fDistance >= SOUND_INTENSITY) return FALSE; int32 vol = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance); m_sQueueSample.m_nVolume = vol; @@ -4099,30 +4071,29 @@ cAudioManager::SetupJumboFlySound(uint8 emittingVol) m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_DIST_FLY; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_JUMBO_DIST_FLY); m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; // todo port fix to re3 + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; // todo port fix to re3 AddSampleToRequestedQueue(); } - return true; + return TRUE; } -bool +bool8 cAudioManager::SetupJumboRumbleSound(uint8 emittingVol) { const float SOUND_INTENSITY = 240.0f; if (m_sQueueSample.m_fDistance >= SOUND_INTENSITY) - return false; + return FALSE; m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, SOUND_INTENSITY, m_sQueueSample.m_fDistance); @@ -4130,20 +4101,19 @@ cAudioManager::SetupJumboRumbleSound(uint8 emittingVol) m_sQueueSample.m_nCounter = 5; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_RUMBLE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_JUMBO_RUMBLE); m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 12; m_sQueueSample.m_nOffset = 0; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); m_sQueueSample.m_nCounter = 6; m_sQueueSample.m_nSampleIndex = SFX_JUMBO_RUMBLE; @@ -4151,7 +4121,7 @@ cAudioManager::SetupJumboRumbleSound(uint8 emittingVol) m_sQueueSample.m_nOffset = MAX_VOLUME; AddSampleToRequestedQueue(); } - return true; + return TRUE; } int32 @@ -4172,7 +4142,7 @@ cAudioManager::ProcessPed(CPhysical *ped) m_sQueueSample.m_vecPos = ped->GetPosition(); - params.m_bDistanceCalculated = false; + params.m_bDistanceCalculated = FALSE; params.m_pPed = (CPed *)ped; params.m_fDistance = GetDistanceSquared(m_sQueueSample.m_vecPos); ProcessPedOneShots(params); @@ -4186,9 +4156,9 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) CPed *ped = params.m_pPed; - bool narrowSoundRange; + bool8 narrowSoundRange; int16 sound; - bool stereo; + bool8 stereo; CWeapon *weapon; float maxDist = 0.f; // uninitialized variable @@ -4197,9 +4167,9 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) weapon = params.m_pPed->GetWeapon(); for (uint32 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents; i++) { - stereo = false; - narrowSoundRange = false; - m_sQueueSample.m_bRequireReflection = false; + stereo = FALSE; + narrowSoundRange = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; sound = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i]; switch (sound) { case SOUND_STEP_START: @@ -4273,12 +4243,11 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 20.0f; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SOUND_FALL_LAND: case SOUND_FALL_COLLAPSE: @@ -4301,12 +4270,11 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 30.0f; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SOUND_FIGHT_37: m_sQueueSample.m_nSampleIndex = SFX_FIGHT_1; @@ -4388,20 +4356,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) } m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound; - narrowSoundRange = true; + narrowSoundRange = TRUE; ++iSound; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 26 + 100; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SOUND_WEAPON_BAT_ATTACK: case SOUND_WEAPON_KNIFE_ATTACK: @@ -4434,7 +4401,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nSampleIndex = SFX_BAT_HIT_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = RandomDisplacement(2000) + 22000; - stereo = true; + stereo = TRUE; break; } } @@ -4445,26 +4412,29 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); } m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[2] % 20 + 100; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; } - case SOUND_WEAPON_CHAINSAW_ATTACK: + case SOUND_WEAPON_CHAINSAW_IDLE: if (FindVehicleOfPlayer()) continue; - m_sQueueSample.m_nSampleIndex = SFX_CAR_ACCEL_13; - m_sQueueSample.m_nBankIndex = SFX_BANK_0; // SFX_BANK_CAR_CHAINSAW + m_sQueueSample.m_nSampleIndex = SFX_CAR_CHAINSAW_IDLE; +#ifdef GTA_PS2 + m_sQueueSample.m_nBankIndex = SFX_BANK_CAR_CHAINSAW; +#else + m_sQueueSample.m_nBankIndex = SFX_BANK_0; +#endif m_sQueueSample.m_nCounter = 70; m_sQueueSample.m_nFrequency = 27000; m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4473,18 +4443,21 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) maxDist = SQR(50); m_sQueueSample.m_nLoopCount = 0; emittingVol = 100; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_CAR_ACCEL_13); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_CAR_ACCEL_13); + SET_LOOP_OFFSETS(SFX_CAR_CHAINSAW_IDLE) m_sQueueSample.m_nEmittingVolume = 100; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; break; - case SOUND_WEAPON_CHAINSAW_IDLE: + case SOUND_WEAPON_CHAINSAW_ATTACK: if (FindVehicleOfPlayer()) continue; - m_sQueueSample.m_nSampleIndex = SFX_CAR_AFTER_ACCEL_13; - m_sQueueSample.m_nBankIndex = SFX_BANK_0; // SFX_BANK_CAR_CHAINSAW + m_sQueueSample.m_nSampleIndex = SFX_CAR_CHAINSAW_ATTACK; +#ifdef GTA_PS2 + m_sQueueSample.m_nBankIndex = SFX_BANK_CAR_CHAINSAW; +#else + m_sQueueSample.m_nBankIndex = SFX_BANK_0; +#endif m_sQueueSample.m_nCounter = 68; m_sQueueSample.m_nFrequency = 27000; m_sQueueSample.m_nReleasingVolumeModificator = 2; @@ -4493,11 +4466,10 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 0; emittingVol = 100; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_CAR_AFTER_ACCEL_13); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_CAR_AFTER_ACCEL_13); + SET_LOOP_OFFSETS(SFX_CAR_CHAINSAW_ATTACK) m_sQueueSample.m_nEmittingVolume = 100; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; break; case SOUND_WEAPON_CHAINSAW_MADECONTACT: @@ -4505,8 +4477,12 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) continue; if ((int32)m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_afVolume[i] != ENTITY_TYPE_PED) ReportCollision(params.m_pPed, params.m_pPed, SURFACE_CAR, SURFACE_TARMAC, 0.0f, 0.09f); - m_sQueueSample.m_nSampleIndex = SFX_CAR_AFTER_ACCEL_13; - m_sQueueSample.m_nBankIndex = SFX_BANK_0; // SFX_BANK_CAR_CHAINSAW + m_sQueueSample.m_nSampleIndex = SFX_CAR_CHAINSAW_ATTACK; +#ifdef GTA_PS2 + m_sQueueSample.m_nBankIndex = SFX_BANK_CAR_CHAINSAW; +#else + m_sQueueSample.m_nBankIndex = SFX_BANK_0; +#endif m_sQueueSample.m_nCounter = 68; m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 22000; m_sQueueSample.m_nReleasingVolumeModificator = 2; @@ -4515,11 +4491,10 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 0; emittingVol = 100; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_CAR_AFTER_ACCEL_13); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_CAR_AFTER_ACCEL_13); + SET_LOOP_OFFSETS(SFX_CAR_CHAINSAW_ATTACK) m_sQueueSample.m_nEmittingVolume = 100; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 5; break; case SOUND_WEAPON_SHOT_FIRED: @@ -4532,7 +4507,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nSampleIndex = SFX_ROCKET_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_ROCKET_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 1; @@ -4540,20 +4515,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[0] % 20 + 80; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; + stereo = TRUE; break; case WEAPONTYPE_COLT45: m_sQueueSample.m_nSampleIndex = SFX_COLT45_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_COLT45_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4561,20 +4535,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[1] % 10 + 90; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; + stereo = TRUE; break; case WEAPONTYPE_PYTHON: m_sQueueSample.m_nSampleIndex = SFX_PYTHON_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_PYTHON_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4582,21 +4555,20 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = 127; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; + stereo = TRUE; break; case WEAPONTYPE_SHOTGUN: case WEAPONTYPE_STUBBY_SHOTGUN: m_sQueueSample.m_nSampleIndex = SFX_SHOTGUN_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_SHOTGUN_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4604,20 +4576,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[2] % 10 + 100; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; + stereo = TRUE; break; case WEAPONTYPE_SPAS12_SHOTGUN: m_sQueueSample.m_nSampleIndex = SFX_SPAS12_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_SPAS12_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4625,40 +4596,38 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[2] % 10 + 100; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; + stereo = TRUE; break; case WEAPONTYPE_TEC9: m_sQueueSample.m_nSampleIndex = SFX_TEC_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = RandomDisplacement(500) + 17000; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 15 + 70; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; case WEAPONTYPE_UZI: case WEAPONTYPE_MINIGUN: m_sQueueSample.m_nSampleIndex = SFX_UZI_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_UZI_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4666,38 +4635,36 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 15 + 70; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; case WEAPONTYPE_SILENCED_INGRAM: m_sQueueSample.m_nSampleIndex = SFX_TEC_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 34000; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 15 + 70; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; case WEAPONTYPE_MP5: m_sQueueSample.m_nSampleIndex = SFX_MP5_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_MP5_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4705,38 +4672,36 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 15 + 70; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; case WEAPONTYPE_M4: m_sQueueSample.m_nSampleIndex = SFX_RUGER_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 43150; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 15 + 90; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; case WEAPONTYPE_RUGER: m_sQueueSample.m_nSampleIndex = SFX_RUGER_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_RUGER_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4744,20 +4709,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[3] % 15 + 90; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; case WEAPONTYPE_SNIPERRIFLE: case WEAPONTYPE_LASERSCOPE: m_sQueueSample.m_nSampleIndex = SFX_SNIPER_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; if (weapon->m_eWeaponType == WEAPONTYPE_SNIPERRIFLE) m_sQueueSample.m_nFrequency = 25472; else @@ -4768,14 +4732,13 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[4] % 10 + 110; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; + stereo = TRUE; break; case WEAPONTYPE_FLAMETHROWER: m_sQueueSample.m_nSampleIndex = SFX_FLAMETHROWER_LEFT; @@ -4788,20 +4751,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 60.0f; maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_nEmittingVolume = 90; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 6; - stereo = true; + stereo = TRUE; break; case WEAPONTYPE_M60: case WEAPONTYPE_HELICANNON: m_sQueueSample.m_nSampleIndex = SFX_M60_LEFT; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_M60_LEFT); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -4809,13 +4771,12 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = 127; m_sQueueSample.m_nEmittingVolume = 127; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - stereo = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + stereo = TRUE; break; default: continue; @@ -4860,7 +4821,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) } emittingVol = 75; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency += RandomDisplacement(300); m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nReleasingVolumeModificator = 5; @@ -4868,12 +4829,11 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_nEmittingVolume = 75; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SOUND_WEAPON_AK47_BULLET_ECHO: { @@ -4905,7 +4865,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) } m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; switch (weaponType) { case WEAPONTYPE_TEC9: m_sQueueSample.m_nFrequency = 13000; @@ -4932,13 +4892,12 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 120.0f; maxDist = SQR(120); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[4] % 10 + 80; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_WEAPON_FLAMETHROWER_FIRE: @@ -4952,18 +4911,17 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 60.0f; maxDist = SQR(60); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = 70; m_sQueueSample.m_nEmittingVolume = 70; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; break; case SOUND_WEAPON_HIT_PED: m_sQueueSample.m_nSampleIndex = SFX_BULLET_PED; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_BULLET_PED); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 8); m_sQueueSample.m_nReleasingVolumeModificator = 7; @@ -4971,12 +4929,11 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 30.0f; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[0] % 20 + 90; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; break; case SOUND_SPLASH: if (m_FrameCounter <= iSplashFrame) @@ -4985,20 +4942,19 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nSampleIndex = SFX_SPLASH_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = RandomDisplacement(1400) + 20000; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = 40.0f; maxDist = SQR(40); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; + RESET_LOOP_OFFSETS emittingVol = m_anRandomTable[2] % 30 + 70; - m_sQueueSample.m_nLoopEnd = -1; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SOUND_MELEE_ATTACK_START: { @@ -5018,7 +4974,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) } m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound++; - narrowSoundRange = true; + narrowSoundRange = TRUE; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 3; @@ -5030,12 +4986,11 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) emittingVol = m_anRandomTable[2] % 20 + 70; maxDist = SQR(30); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_SKATING: @@ -5046,7 +5001,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_nSampleIndex = (m_anRandomTable[3] & 1) + SFX_SKATE_1; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nCounter = iSound; - stereo = true; + stereo = TRUE; ++iSound; m_sQueueSample.m_nFrequency = m_anRandomTable[1] % 1000 + 17000; if (param2 == 0) @@ -5056,13 +5011,12 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 20.0f; maxDist = SQR(20); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = (m_anRandomTable[2] % 20 + 70) * param1 / 127; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; } case SOUND_WEAPON_MINIGUN_ATTACK: @@ -5076,11 +5030,10 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) emittingVol = 127; maxDist = SQR(150); m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_MINIGUN_FIRE_LEFT); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_MINIGUN_FIRE_LEFT); + SET_LOOP_OFFSETS(SFX_MINIGUN_FIRE_LEFT) m_sQueueSample.m_nEmittingVolume = 127; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; break; case SOUND_WEAPON_MINIGUN_2: @@ -5094,11 +5047,10 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) emittingVol = 127.0f * m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_afVolume[i]; maxDist = SQR(150); m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_MINIGUN_FIRE_RIGHT); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_MINIGUN_FIRE_RIGHT); + SET_LOOP_OFFSETS(SFX_MINIGUN_FIRE_RIGHT) m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; break; case SOUND_WEAPON_MINIGUN_3: @@ -5111,13 +5063,12 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 150.0f; maxDist = SQR(150); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS emittingVol = 127; m_sQueueSample.m_nEmittingVolume = 127; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SOUND_SHIRT_WIND_FLAP: if (params.m_pPed->IsPlayer() && params.m_pPed->m_pMyVehicle) { @@ -5155,11 +5106,10 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) m_sQueueSample.m_fSoundIntensity = 15.0f; maxDist = SQR(15); m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; } } @@ -5177,13 +5127,13 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) if (m_sQueueSample.m_nVolume != 0) { if (stereo) { if (m_sQueueSample.m_fDistance < 0.2f * m_sQueueSample.m_fSoundIntensity) { - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nOffset = 0; } else { - stereo = false; + stereo = FALSE; } } - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; AddSampleToRequestedQueue(); if (stereo) { m_sQueueSample.m_nOffset = 127; @@ -5204,7 +5154,7 @@ cAudioManager::ProcessPedOneShots(cPedParams ¶ms) } void -cAudioManager::SetPedTalkingStatus(CPed *ped, uint8 status) +cAudioManager::SetPedTalkingStatus(CPed *ped, bool8 status) { if (ped != nil) ped->m_canTalk = status; @@ -5232,12 +5182,12 @@ cAudioManager::SetupPedComments(cPedParams ¶ms, uint16 sound) if(ped != nil) { if(!ped->m_canTalk) return; - m_bGenericSfx = false; + m_bGenericSfx = FALSE; pedComment.m_nSampleIndex = GetPedCommentSfx(ped, sound); if(pedComment.m_nSampleIndex == NO_SAMPLE) return; soundIntensity = 40.0f; } else { - m_bGenericSfx = true; + m_bGenericSfx = TRUE; switch(sound) { case SOUND_PED_HELI_PLAYER_FOUND: soundIntensity = 400.0f; @@ -5453,23 +5403,23 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) if(m_bIsPlayerShutUp) return NO_SAMPLE; switch(sound) { - case SOUND_PED_DEATH: return 9796; + case SOUND_PED_DEATH: return SFX_PLAYER_DEATH; case SOUND_PED_DAMAGE: - case SOUND_PED_BULLET_HIT: GetPhrase(sfx, ped->m_lastComment, 9815, 33); break; + case SOUND_PED_BULLET_HIT: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_HIT_BULLET_1, 33); break; case SOUND_PED_HIT: - case SOUND_PED_DEFEND: GetPhrase(sfx, ped->m_lastComment, 9883, 42); break; - case SOUND_PED_LAND: GetPhrase(sfx, ped->m_lastComment, 9848, 35); break; - case SOUND_PED_BURNING: GetPhrase(sfx, ped->m_lastComment, 9925, 16); break; + case SOUND_PED_DEFEND: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_HIT_FIST_1, 42); break; + case SOUND_PED_LAND: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_HIT_GROUND_1, 35); break; + case SOUND_PED_BURNING: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ON_FIRE_1, 16); break; case SOUND_PED_PLAYER_REACTTOCOP: switch(m_nPlayerMood) { case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8694, 38); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_BUSTED_1, 38); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9615, 20); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_BUSTED_1, 20); break; default: - GetPhrase(sfx, ped->m_lastComment, 9046, 22); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_BUSTED_1, 22); break; } break; @@ -5477,16 +5427,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(8); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9586, 29); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_SHOOT_1, 29); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 9007, 39); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_SHOOT_1, 39); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9787, 9); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_SHOOT_1, 9); break; default: - GetPhrase(sfx, ped->m_lastComment, 9322, 35); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_SHOOT_1, 35); break; } break; @@ -5495,16 +5445,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(8); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9561, 25); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_PULL_GUN_1, 25); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8937, 52); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_PULL_GUN_1, 52); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9758, 19); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_PULL_GUN_1, 19); break; default: - GetPhrase(sfx, ped->m_lastComment, 9275, 39); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_PULL_GUN_1, 39); break; } break; @@ -5513,16 +5463,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(4); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9483, 36); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_JACKING_1, 36); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8876, 43); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_JACKING_1, 43); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9706, 18); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_JACKING_1, 18); break; default: - GetPhrase(sfx, ped->m_lastComment, 9202, 40); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_JACKING_1, 40); break; } break; @@ -5531,16 +5481,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(8); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9519, 25); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_1, 25); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8919, 12); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_PICK_UP_CASH_1, 12); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9724, 23); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_PICK_UP_CASH_1, 23); break; default: - GetPhrase(sfx, ped->m_lastComment, 9242, 11); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_PICK_UP_CASH_1, 11); break; } break; @@ -5549,31 +5499,31 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(4); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9462, 21); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_JACKED_1, 21); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8843, 33); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_JACKED_1, 33); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9688, 18); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_JACKED_1, 18); break; default: - GetPhrase(sfx, ped->m_lastComment, 9178, 24); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_JACKED_1, 24); break; } break; } - case SOUND_PED_PLAYER_AFTERSEX: GetPhrase(sfx, ped->m_lastComment, 9797, 18); break; + case SOUND_PED_PLAYER_AFTERSEX: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_AFTERSEX_1, 18); break; case SOUND_PED_PLAYER_BEFORESEX: switch(m_nPlayerMood) { case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8989, 18); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_SEX_1, 18); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9777, 10); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_SEX_1, 10); break; default: - GetPhrase(sfx, ped->m_lastComment, 9314, 8); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_SEX_1, 8); break; } break; @@ -5581,13 +5531,13 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(4); switch(m_nPlayerMood) { case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8732, 9); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_CHASED_1, 9); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9635, 7); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_CHASED_1, 7); break; default: - GetPhrase(sfx, ped->m_lastComment, 9068, 20); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_CHASED_1, 20); break; } break; @@ -5596,16 +5546,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(4); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9401, 61); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_FIGHT_1, 61); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8782, 61); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_FIGHT_1, 61); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9661, 27); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_FIGHT_1, 27); break; default: - GetPhrase(sfx, ped->m_lastComment, 9131, 47); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_FIGHT_1, 47); break; } break; @@ -5616,16 +5566,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(4); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9357, 44); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_CRASH_1, 44); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8741, 41); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_CRASH_1, 41); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9642, 19); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_CRASH_1, 19); break; default: - GetPhrase(sfx, ped->m_lastComment, 9088, 43); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_CRASH_1, 43); break; } break; @@ -5634,16 +5584,16 @@ cAudioManager::GetPlayerTalkSfx(CPed *ped, int16 sound) cooldown_phrase(4); switch(m_nPlayerMood) { case PLAYER_MOOD_PISSED_OFF: - GetPhrase(sfx, ped->m_lastComment, 9544, 17); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_1, 17); break; case PLAYER_MOOD_ANGRY: - GetPhrase(sfx, ped->m_lastComment, 8931, 6); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_ANGRY_PICK_UP_HOOKER_1, 6); break; case PLAYER_MOOD_WISECRACKING: - GetPhrase(sfx, ped->m_lastComment, 9747, 11); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_1, 11); break; default: - GetPhrase(sfx, ped->m_lastComment, 9253, 22); + GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_CALM_PICK_UP_HOOKER_1, 22); break; } break; @@ -5659,33 +5609,38 @@ cAudioManager::GetCopTalkSfx(CPed *ped, int16 sound) uint32 sfx; PedState objective; switch(sound) { - case SOUND_PED_ARREST_COP: GetPhrase(sfx, ped->m_lastComment, 8469, 4); break; - case SOUND_PED_PULLOUTWEAPON: GetPhrase(sfx, ped->m_lastComment, 8473, 3); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 8500, 2); break; - case SOUND_PED_COP_UNK_129: GetPhrase(sfx, ped->m_lastComment, 8510, 4); break; - case SOUND_PED_COP_MANYCOPSAROUND: GetPhrase(sfx, ped->m_lastComment, 8508, 2); break; - case SOUND_PED_GUNAIMEDAT2: GetPhrase(sfx, ped->m_lastComment, 8498, 2); break; - case SOUND_PED_COP_ALONE: GetPhrase(sfx, ped->m_lastComment, 8504, 4); break; - case SOUND_PED_GUNAIMEDAT3: GetPhrase(sfx, ped->m_lastComment, 8485, 2); break; - case SOUND_PED_COP_REACTION: { + case SOUND_PED_ARREST_COP: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_ARREST_1, 4); break; + case SOUND_PED_PULLOUTWEAPON: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_PULLOUTWEAPON_1, 3); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_SAVED_1, 2); break; + case SOUND_PED_COP_TARGETING: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_COP_TARGETING_1, 4); break; + case SOUND_PED_COP_MANYCOPSAROUND: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_COP_MANYCOPSAROUND_1, 2); break; + case SOUND_PED_GUNAIMEDAT2: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_GUNAIMEDAT2_1, 2); break; + case SOUND_PED_COP_ALONE: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_COP_ALONE_1, 4); break; + case SOUND_PED_GUNAIMEDAT3: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_GUNAIMEDAT2_1, 2); break; + case SOUND_PED_COP_ASK_FOR_ID: { cooldown_phrase(4); - GetPhrase(sfx, ped->m_lastComment, 8502, 2); + GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_COP_ASK_FOR_ID_1, 2); break; } case SOUND_PED_COP_LITTLECOPSAROUND: objective = FindPlayerPed()->m_nPedState; if(objective == PED_ARRESTED || objective == PED_DEAD || objective == PED_DIE) return NO_SAMPLE; - GetPhrase(sfx, ped->m_lastComment, 8481, 4); + GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_COP_LITTLECOPSAROUND_1, 4); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 8494, 4); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8491, 3); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_FIGHT_1, 4); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_DODGE_1, 3); break; +#ifdef FIX_BUGS + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_CAR_CRASH_1, 4); break; +#endif case SOUND_PED_PED_COLLISION: - if(FindPlayerPed()->m_pWanted->GetWantedLevel() <= 0) return NO_SAMPLE; - GetPhrase(sfx, ped->m_lastComment, 8476, 5); + if(FindPlayerPed()->m_pWanted->GetWantedLevel() > 0) + GetPhrase(sfx, ped->m_lastComment, SFX_COP_VOICE_1_BUMP_1, 5); + else + return NO_SAMPLE; break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 45 * (m_sQueueSample.m_nEntityIndex % 5) + sfx; + return (SFX_COP_VOICE_2_ARREST_1 - SFX_COP_VOICE_1_ARREST_1) * (m_sQueueSample.m_nEntityIndex % 5) + sfx; } uint32 @@ -5693,12 +5648,12 @@ cAudioManager::GetSwatTalkSfx(CPed *ped, int16 sound) { uint32 sfx; switch(sound) { - case SOUND_PED_COP_HELIPILOTPHRASE: GetPhrase(sfx, ped->m_lastComment, 3285, 7); break; - case SOUND_PED_COP_UNK_129: GetPhrase(sfx, ped->m_lastComment, 3292, 4); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3282, 3); break; + case SOUND_PED_COP_HELIPILOTPHRASE: GetPhrase(sfx, ped->m_lastComment, SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_1, 7); break; + case SOUND_PED_COP_TARGETING: GetPhrase(sfx, ped->m_lastComment, SFX_SWAT_VOICE_1_COP_TARGETING_1, 4); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_SWAT_VOICE_1_DODGE_1, 3); break; default: return GetGenericMaleTalkSfx(ped, sound); } - sfx += 14 * (m_sQueueSample.m_nEntityIndex % 3); + sfx += (SFX_SWAT_VOICE_2_DODGE_1 - SFX_SWAT_VOICE_1_DODGE_1) * (m_sQueueSample.m_nEntityIndex % 3); return sfx; } @@ -5707,15 +5662,23 @@ cAudioManager::GetFBITalkSfx(CPed *ped, int16 sound) { uint32 sfx; switch(sound) { - case SOUND_PED_COP_UNK_129: GetPhrase(sfx, ped->m_lastComment, 3240u, 4u); break; - case SOUND_PED_COP_MANYCOPSAROUND: GetPhrase(sfx, ped->m_lastComment, 3237u, 3u); break; - case SOUND_PED_GUNAIMEDAT2: sfx = 3236; break; - case SOUND_PED_GUNAIMEDAT3: GetPhrase(sfx, ped->m_lastComment, 3228u, 4u); break; +#ifdef FIX_BUGS + case SOUND_PED_COP_TARGETING: GetPhrase(sfx, ped->m_lastComment, SFX_FBI_VOICE_1_COP_TARGETING_1, 6); break; +#else + case SOUND_PED_COP_TARGETING: GetPhrase(sfx, ped->m_lastComment, SFX_FBI_VOICE_1_COP_TARGETING_1, 4); break; +#endif + case SOUND_PED_COP_MANYCOPSAROUND: GetPhrase(sfx, ped->m_lastComment, SFX_FBI_VOICE_1_COP_MANYCOPSAROUND_1, 3); break; + case SOUND_PED_GUNAIMEDAT2: sfx = SFX_FBI_VOICE_1_GUNAIMEDAT2_1; break; + case SOUND_PED_GUNAIMEDAT3: GetPhrase(sfx, ped->m_lastComment, SFX_FBI_VOICE_1_GUNAIMEDAT3_1, 4); break; case SOUND_PED_CRASH_VEHICLE: - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3232u, 4u); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_FBI_VOICE_1_CAR_CRASH_1, 4); break; default: return GetGenericMaleTalkSfx(ped, sound); } +#ifdef FIX_BUGS + sfx += (SFX_FBI_VOICE_2_GUNAIMEDAT3_1 - SFX_FBI_VOICE_1_GUNAIMEDAT3_1) * (m_sQueueSample.m_nEntityIndex % 3); +#else sfx += 16 * (m_sQueueSample.m_nEntityIndex % 3); +#endif return sfx; } @@ -5730,12 +5693,12 @@ cAudioManager::GetMedicTalkSfx(CPed *ped, int16 sound) { uint32 sfx; switch(sound) { - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 3162, 6); break; - case SOUND_PED_HEALING: GetPhrase(sfx, ped->m_lastComment, 3178, 17); break; - case SOUND_PED_LEAVE_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 3168, 10); break; // SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_1 + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_MEDIC_VOICE_1_FIGHT_1, 6); break; + case SOUND_PED_HEALING: GetPhrase(sfx, ped->m_lastComment, SFX_MEDIC_VOICE_1_AT_VICTIM_1, 17); break; + case SOUND_PED_LEAVE_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } - sfx += 33 * (m_sQueueSample.m_nEntityIndex % 2); + sfx += (SFX_MEDIC_VOICE_2_FIGHT_1 - SFX_MEDIC_VOICE_1_FIGHT_1) * (m_sQueueSample.m_nEntityIndex % 2); return sfx; } @@ -5751,22 +5714,29 @@ cAudioManager::GetDefaultTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 2033, 12); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 2045, 12); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 2075, 4); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 2098, 4); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 2108, 5); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 2004, 16); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 1979, 19); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 2079, 19); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 2020, 13); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 1939, 15); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 1898, 16); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 2070, 5); break; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 1998, 6); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 2102, 6); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 1914, 25); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 1954, 25); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_GUN_PANIC_1, 12); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_JACKED_1, 12); break; +#ifdef FIX_BUGS + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_JACKING_1, 13); break; +#endif + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_MUGGED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_SAVED_1, 4); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_TAXI_1, 5); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_FIGHT_1, 16); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_DODGE_1, 19); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_RUN_1, 19); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_GENERIC_CRASH_1, 13); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_CAR_CRASH_1, 15); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_BLOCKED_1, 16); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_LOST_1, 5); break; +#ifdef FIX_BUGS + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_EYEING_1, 6); break; +#else + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_EYEING_1, 6); break; +#endif + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_SHOCKED_1, 6); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_BUMP_1, 25); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_DEFAULT_VOICE_CHAT_1, 25); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -5777,20 +5747,20 @@ cAudioManager::GetHFYSTTalkSfx(CPed *ped, int16 sound) { uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5736, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 5747, 4); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 5755, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5741, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5753, 2); break; - case SOUND_PED_TAXI_WAIT: return 5759; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5722, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5712, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5729, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5695, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5678, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5751, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5685, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5703, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_JACKING_1, 4); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_MUGGING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_MUGGED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_HFYST_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_BLOCKED_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYST_CHAT_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -5802,18 +5772,18 @@ cAudioManager::GetHFOSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 4382, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4388, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4398, 3); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 4401, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4363, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4353, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4371, 11); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4334, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 4313, 9); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 4396, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4322, 12); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4342, 11); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_GUN_COOL_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_MUGGED_1, 3); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_GENERIC_CRASH_1, 11); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_BLOCKED_1, 9); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_BUMP_1, 12); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOST_CHAT_1, 11); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -5825,16 +5795,16 @@ cAudioManager::GetHMYSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7961, 6); break; - case SOUND_PED_ACCIDENTREACTION1: return 7971; - case SOUND_PED_TAXI_WAIT: return 7974; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7946, 6); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7967, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7954, 7); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 7952, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7972, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7922, 13); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7935, 11); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_GUN_PANIC_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HMYST_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_HMYST_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_DODGE_1, 6); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_BUMP_1, 13); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYST_CHAT_1, 11); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -5846,20 +5816,20 @@ cAudioManager::GetHMOSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5820, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 5831, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5825, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5836, 2); break; - case SOUND_PED_TAXI_WAIT: return 5838; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5805, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5795, 9); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5813, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5777, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5760, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5834, 2); break; - case SOUND_PED_CHAT_SEXY: return 5804; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5767, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5784, 11); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_JACKING_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_MUGGED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_HMOST_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_DODGE_1, 9); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_BLOCKED_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: return SFX_HMOST_EYEING_1; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMOST_CHAT_1, 11); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -5871,19 +5841,19 @@ cAudioManager::GetHFYRITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6965, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6970, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6978, 4); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6986, 2); break; - case SOUND_PED_TAXI_WAIT: return 6991; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6948, 10); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6982, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6958, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6940, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6923, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 6976, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 6988, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6931, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_MUGGED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_HFYRI_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_DODGE_1, 10); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYRI_BUMP_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -5895,20 +5865,20 @@ cAudioManager::GetHFORITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7244, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7250, 9); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7261, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 7267; - case SOUND_PED_TAXI_WAIT: return 7270; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7229, 6); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7263, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7237, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7222, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 7206, 6); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 7259, 2); break; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 7235, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7268, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7212, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_JACKED_1, 9); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HFORI_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_HFORI_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_DODGE_1, 6); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_BLOCKED_1, 6); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFORI_BUMP_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -5920,17 +5890,17 @@ cAudioManager::GetHMYRITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5890, 7); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 5905, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5897, 8); break; - case SOUND_PED_ROBBED: return 5908; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5873, 5); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5864, 9); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5878, 12); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5856, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5839, 7); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5909, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5846, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_GUN_PANIC_1, 7); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_JACKING_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_JACKED_1, 8); break; + case SOUND_PED_ROBBED: return SFX_HMYRI_MUGGED_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_FIGHT_1, 5); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_DODGE_1, 9); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_GENERIC_CRASH_1, 12); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_BLOCKED_1, 7); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMYRI_BUMP_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -5943,18 +5913,18 @@ cAudioManager::GetHMORITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4454, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4459, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4469, 3); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 4478, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4436, 7); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 4472, 6); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4443, 11); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4422, 6); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 4403, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 4467, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4411, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4428, 8); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_MUGGED_1, 3); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_DODGE_1, 7); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_RUN_1, 6); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_GENERIC_CRASH_1, 11); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_CAR_CRASH_1, 6); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMORI_CHAT_1, 8); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -5966,16 +5936,19 @@ cAudioManager::GetHFYBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6897, 7); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6904, 7); break; - case SOUND_PED_TAXI_WAIT: return 6922; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6878, 11); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6889, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6862, 6); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 6911, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 6920, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6854, 8); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 6868, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_GUN_PANIC_1, 7); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_JACKED_1, 7); break; + case SOUND_PED_TAXI_WAIT: return SFX_HFYBE_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_DODGE_1, 11); break; +#ifdef FIX_BUGS // assumption + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_RUN_1, 7); break; +#endif + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_CAR_CRASH_1, 6); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_BUMP_1, 8); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBE_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -5987,19 +5960,19 @@ cAudioManager::GetHFOBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 1018, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 1023, 6); break; - case SOUND_PED_ACCIDENTREACTION1: return 1035; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 1038, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 1006, 7); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 1031, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 1013, 5); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 990, 6); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 973, 6); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 1029, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 1036, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 979, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 996, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_JACKED_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HFOBE_SAVED_1; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_DODGE_1, 7); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_GENERIC_CRASH_1, 5); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_CAR_CRASH_1, 6); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_BLOCKED_1, 6); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOBE_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6011,20 +5984,20 @@ cAudioManager::GetHMYBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4892, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4902, 12); break; - case SOUND_PED_ACCIDENTREACTION1: return 4917; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 4898, 4); break; - case SOUND_PED_TAXI_WAIT: return 4920; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4874, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4862, 7); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4882, 10); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4845, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 4914, 3); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4869, 5); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 4918, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4835, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4852, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_JACKED_1, 12); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HMYBE_SAVED_1; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_INNOCENT_1, 4); break; + case SOUND_PED_TAXI_WAIT: return SFX_HMYBE_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_DODGE_1, 7); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_GENERIC_CRASH_1, 10); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_CAR_CRASH_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_LOST_1, 3); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_EYEING_1, 5); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYBE_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6036,13 +6009,13 @@ cAudioManager::GetHMOBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4703, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4709, 6); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 4706, 3); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4690, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 4672, 10); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4699, 4); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4682, 8); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_GUN_PANIC_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_JACKED_1, 6); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_INNOCENT_1, 3); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_DODGE_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_BLOCKED_1, 10); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_EYEING_1, 4); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMOBE_BUMP_1, 8); break; default: return GetGenericMaleTalkSfx(ped, sound); } @@ -6056,19 +6029,19 @@ cAudioManager::GetHFYBUTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4771, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 4782, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4776, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4787, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 4789; - case SOUND_PED_TAXI_WAIT: return 4790; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4752, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4742, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4759, 12); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4734, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 4715, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 4785, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4723, 11); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_JACKING_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HFYBU_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_HFYBU_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_GENERIC_CRASH_1, 12); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYBU_BUMP_1, 11); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6080,14 +6053,18 @@ cAudioManager::GetHFYMDTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6014, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6019, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6021, 3); break; - case SOUND_PED_TAXI_WAIT: return 8231; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 6005, 9); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5997, 8); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 6024, 15); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5988, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_GUN_PANIC_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_SAVED_1, 3); break; +#ifdef FIX_BUGS + case SOUND_PED_TAXI_WAIT: return SFX_HFYMD_TAXI_1; +#else + case SOUND_PED_TAXI_WAIT: return SFX_BFOBE_TAXI_1; +#endif + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_FIGHT_1, 9); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_DODGE_1, 8); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_SOLICIT_1, 15); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYMD_BUMP_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6099,14 +6076,18 @@ cAudioManager::GetHFYCGTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4808, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4813, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 4819; - case SOUND_PED_TAXI_WAIT: return 8231; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4800, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 4815, 4); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 4820, 14); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4791, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HFYCG_GUN_PANIC_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYCG_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HFYCG_SAVED_1; +#ifdef FIX_BUGS + case SOUND_PED_TAXI_WAIT: return SFX_HFYCG_TAXI_1; +#else + case SOUND_PED_TAXI_WAIT: return SFX_BFOBE_TAXI_1; +#endif + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYCG_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HFYCG_RUN_1, 4); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYCG_SOLICIT_1, 14); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYCG_BUMP_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6118,17 +6099,17 @@ cAudioManager::GetHFYPRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5964, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5970, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5972; - case SOUND_PED_PLAYER_BEFORESEX: GetPhrase(sfx, ped->m_lastComment, 5956, 8); break; - case SOUND_PED_TAXI_WAIT: return 5987; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5946, 10); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5934, 9); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 5973, 14); break; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 5943, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5912, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5922, 12); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_GUN_COOL_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HFYPR_SAVED_1; + case SOUND_PED_PLAYER_BEFORESEX: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_FUCKING_1, 8); break; + case SOUND_PED_TAXI_WAIT: return SFX_HFYPR_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_FIGHT_1, 10); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_DODGE_1, 9); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_SOLICIT_1, 14); break; + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_EYEING_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HFYPR_CHAT_1, 12); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6140,15 +6121,15 @@ cAudioManager::GetHFOTRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 4660, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4665, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 4667; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 4670, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4654, 6); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4646, 8); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 4668, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4623, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4634, 12); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_GUN_COOL_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_HFOTR_SAVED_1; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_FIGHT_1, 6); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_DODGE_1, 8); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HFOTR_CHAT_1, 12); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6160,15 +6141,15 @@ cAudioManager::GetHMOTRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 4515, 6); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 4521, 2); break; - case SOUND_PED_TAXI_WAIT: return 4534; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4508, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4497, 11); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 4526, 8); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 4523, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4480, 8); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4488, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_GUN_COOL_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_HMOTR_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_DODGE_1, 11); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_SOLICIT_1, 8); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_BUMP_1, 8); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMOTR_CHAT_1, 9); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6180,21 +6161,21 @@ cAudioManager::GetHMYAPTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4591, 7); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 4605, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4598, 7); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4611, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 4619, 2); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 4621, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4573, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 4613, 6); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4585, 6); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4555, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 4535, 9); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 4609, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4582, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4544, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4564, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_GUN_PANIC_1, 7); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_JACKED_1, 7); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_RUN_1, 6); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_GENERIC_CRASH_1, 6); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_BLOCKED_1, 9); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_EYEING_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMYAP_CHAT_1, 9); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6206,16 +6187,16 @@ cAudioManager::GetHMOCATalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 3506, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 3521, 11); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 3511, 10); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 3532, 7); break; - case SOUND_PED_TAXI_WAIT: return 3541; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 3539, 2); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3486, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3478, 8); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 3504, 2); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3494, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_JACKING_1, 11); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_JACKED_1, 10); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_MUGGED_1, 7); break; + case SOUND_PED_TAXI_WAIT: return SFX_HMOCA_TAXI_1; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_RUN_1, 2); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_BLOCKED_1, 8); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_EYEING_1, 2); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HMOCA_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6227,26 +6208,27 @@ cAudioManager::GetBMODKTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6831, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6838, 9); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6847, 2); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 6835, 3); break; - case SOUND_PED_TAXI_WAIT: return 6853; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6817, 7); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6849, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6824, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6794, 10); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6776, 8); break; - case SOUND_PED_147: - GetPhrase(sfx, ped->m_lastComment, 6805, 11); + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_GUN_PANIC_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_JACKED_1, 9); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_MUGGED_1, 2); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_INNOCENT_1, 3); break; + case SOUND_PED_TAXI_WAIT: return SFX_BMODK_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_DODGE_1, 7); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_CAR_CRASH_1, 10); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_BLOCKED_1, 8); break; + case SOUND_PED_147: // this is some cut behaviour, the guy was selling something + GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_UNK_147_1, 11); + // what is this? some sort of censorship? switch(sfx) { - case 6809: - case 6810: - case 6811: GetPhrase(sfx, ped->m_lastComment, 6805, 4); break; + case SFX_BMODK_UNK_147_5: + case SFX_BMODK_UNK_147_6: + case SFX_BMODK_UNK_147_7: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_UNK_147_1, 4); break; default: break; } break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6784, 10); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMODK_BUMP_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6258,20 +6240,20 @@ cAudioManager::GetBMYCRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 6578, 6); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 6594, 12); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 6609, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6588, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6606, 3); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6615, 2); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 6584, 4); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 6563, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6553, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6571, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6544, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6521, 12); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 6561, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6533, 11); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_GUN_COOL_1, 6); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_JACKING_1, 12); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_MUGGING_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_MUGGED_1, 3); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_SAVED_1, 2); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_INNOCENT_1, 4); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_BLOCKED_1, 12); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYCR_BUMP_1, 11); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6283,19 +6265,19 @@ cAudioManager::GetBFYSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7184, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7188, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7195, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 7203, 2); break; - case SOUND_PED_TAXI_WAIT: return 7205; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7167, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7197, 6); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7176, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7149, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 7132, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 7193, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7140, 9); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7158, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_GUN_PANIC_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_BFYST_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_RUN_1, 6); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_BUMP_1, 9); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYST_CHAT_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6307,19 +6289,19 @@ cAudioManager::GetBFOSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7046, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7051, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7061, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 7067, 2); break; - case SOUND_PED_TAXI_WAIT: return 7069; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7027, 11); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7063, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7038, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7009, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6992, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 7059, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6999, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7017, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_BFOST_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_DODGE_1, 11); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_BLOCKED_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BFOST_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6331,19 +6313,23 @@ cAudioManager::GetBMYSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 6413, 6); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 6427, 4); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 6433, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6419, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6431, 2); break; - case SOUND_PED_TAXI_WAIT: return 6437; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 6400, 6); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6392, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6406, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6371, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6352, 8); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6360, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 6380, 12); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_GUN_COOL_1, 6); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_JACKING_1, 4); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_MUGGING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_MUGGED_1, 2); break; +#ifdef FIX_BUGS + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_TAXI_1, 2); break; +#else + case SOUND_PED_TAXI_WAIT: return SFX_BMYST_TAXI_1; +#endif + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_FIGHT_1, 6); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_BLOCKED_1, 8); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYST_CHAT_1, 12); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6355,18 +6341,18 @@ cAudioManager::GetBMOSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4292, 9); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4307, 4); break; - case SOUND_PED_ACCIDENTREACTION1: return 4311; - case SOUND_PED_TAXI_WAIT: return 4312; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4272, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4258, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4279, 13); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4232, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 4301, 6); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4266, 6); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4215, 17); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4240, 18); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_GUN_PANIC_1, 9); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_MUGGED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BMOST_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_BMOST_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_GENERIC_CRASH_1, 13); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_CAR_CRASH_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_LOST_1, 6); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_EYEING_1, 6); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_BUMP_1, 17); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BMOST_CHAT_1, 18); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6378,21 +6364,21 @@ cAudioManager::GetBFYRITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6161, 4); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 6173, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6165, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6179, 3); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6188, 2); break; - case SOUND_PED_TAXI_WAIT: return 6194; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6143, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6182, 6); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6154, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6135, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6117, 9); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 6177, 2); break; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 6151, 3); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 6190, 4); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6126, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_GUN_PANIC_1, 4); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_MUGGED_1, 3); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_BFYRI_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_RUN_1, 6); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_BLOCKED_1, 9); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_EYEING_1, 3); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_SHOCKED_1, 4); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFYRI_BUMP_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6404,19 +6390,19 @@ cAudioManager::GetBFORITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7110, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7115, 4); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7121, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 7127; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 7130, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7094, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7123, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7103, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7087, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 7070, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 7119, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7128, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7078, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_JACKED_1, 4); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BFORI_SAVED_1; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFORI_BUMP_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6429,20 +6415,20 @@ cAudioManager::GetBMYRITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5430, 7); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5437, 4); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5443, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5449; - case SOUND_PED_TAXI_WAIT: return 5453; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5414, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 5445, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5423, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5407, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5394, 6); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5441, 2); break; - case SOUND_PED_CHAT_SEXY: return 5422; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5450, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5400, 7); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_GUN_PANIC_1, 7); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_JACKED_1, 4); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BMYRI_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_BMYRI_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_BLOCKED_1, 6); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: return SFX_BMYRI_EYEING_1; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYRI_BUMP_1, 7); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6454,20 +6440,28 @@ cAudioManager::GetBFYBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 6255, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6261, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6273, 5); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6284, 2); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 6290, 3); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6233, 10); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6278, 6); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6247, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6207, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6195, 12); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 6269, 4); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 6243, 4); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 6286, 4); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 6217, 16); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_GUN_COOL_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_MUGGED_1, 5); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_TAXI_1, 3); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_DODGE_1, 10); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_RUN_1, 6); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_GENERIC_CRASH_1, 8); break; +#ifdef FIX_BUGS + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_CAR_CRASH_1, 10); break; +#else + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_CAR_CRASH_1, 8); break; +#endif + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_BLOCKED_1, 12); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_LOST_1, 4); break; +#ifdef FIX_BUGS + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_EYEING_1, 4); break; +#else + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_EYEING_1, 4); break; +#endif + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_SHOCKED_1, 4); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYBE_CHAT_1, 16); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6479,21 +6473,21 @@ cAudioManager::GetBMYBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 956, 4); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 966, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 960, 6); break; - case SOUND_PED_ROBBED: return 970; - case SOUND_PED_ACCIDENTREACTION1: return 971; - case SOUND_PED_TAXI_WAIT: return 972; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 940, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 928, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 948, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 910, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 892, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: return 969; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 938, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 900, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 918, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_GUN_COOL_1, 4); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_JACKING_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_JACKED_1, 6); break; + case SOUND_PED_ROBBED: return SFX_BMYBE_MUGGED_1; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BMYBE_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_BMYBE_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: return SFX_BMYBE_LOST_1; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBE_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6502,22 +6496,21 @@ cAudioManager::GetBMYBETalkSfx(CPed *ped, int16 sound) uint32 cAudioManager::GetBFOBETalkSfx(CPed *ped, int16 sound) { - uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 8213, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 8223, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 8218, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 8227, 2); break; - case SOUND_PED_TAXI_WAIT: return 8231; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8197, 9); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 8206, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 8182, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 8166, 8); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 8229, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 8174, 8); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 8189, 8); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_MUGGED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_BFOBE_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_DODGE_1, 9); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_BLOCKED_1, 8); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_BUMP_1, 8); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BFOBE_CHAT_1, 8); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6529,18 +6522,18 @@ cAudioManager::GetBMOBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7611, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7616, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7622, 4); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 7626, 3); break; - case SOUND_PED_TAXI_WAIT: return 7632; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 7594, 10); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7583, 11); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7604, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7564, 9); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7629, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7559, 5); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7573, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_MUGGED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_SAVED_1, 3); break; + case SOUND_PED_TAXI_WAIT: return SFX_BMOBE_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_FIGHT_1, 10); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_DODGE_1, 11); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_CAR_CRASH_1, 9); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_BUMP_1, 5); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BMOBE_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6552,20 +6545,20 @@ cAudioManager::GetBMYBUTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5500, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5507, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5513, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5515; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 5505, 2); break; - case SOUND_PED_TAXI_WAIT: return 5518; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5488, 5); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5476, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5493, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5469, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5454, 8); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 5486, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5516, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5462, 7); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BMYBU_SAVED_1; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_INNOCENT_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_BMYBU_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_FIGHT_1, 5); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_BLOCKED_1, 8); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBU_BUMP_1, 7); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6577,17 +6570,17 @@ cAudioManager::GetBFYPRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5369, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5374, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5376; - case SOUND_PED_PLAYER_BEFORESEX: GetPhrase(sfx, ped->m_lastComment, 5362, 7); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 5392, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5355, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5348, 7); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 5379, 13); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5377, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5324, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5335, 13); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_GUN_COOL_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BFYPR_SAVED_1; + case SOUND_PED_PLAYER_BEFORESEX: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_FUCKING_1, 7); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_DODGE_1, 7); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_SOLICIT_1, 13); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BFYPR_CHAT_1, 13); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6599,17 +6592,17 @@ cAudioManager::GetBFOTRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5232, 6); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 5240, 3); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5238, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5243; - case SOUND_PED_TAXI_WAIT: return 5252; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5226, 6); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5217, 9); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 5247, 5); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5244, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5192, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5202, 15); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_GUN_COOL_1, 6); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_MUGGING_1, 3); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BFOTR_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_BFOTR_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_FIGHT_1, 6); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_DODGE_1, 9); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_SOLICIT_1, 5); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BFOTR_CHAT_1, 15); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6621,16 +6614,16 @@ cAudioManager::GetBMOTRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 6327, 5); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6343, 1); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 6332, 4); break; - case SOUND_PED_TAXI_WAIT: return 6351; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6313, 11); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6336, 7); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 6344, 7); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 6324, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6293, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 6303, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_GUN_COOL_1, 5); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_SAVED_1, 1); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_INNOCENT_1, 4); break; + case SOUND_PED_TAXI_WAIT: return SFX_BMOTR_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_DODGE_1, 11); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_RUN_1, 7); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_SOLICIT_1, 7); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_EYEING_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BMOTR_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6642,19 +6635,19 @@ cAudioManager::GetBMYPITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 4033, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 4044, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4038, 6); break; - case SOUND_PED_ROBBED: return 4048; - case SOUND_PED_ACCIDENTREACTION1: return 4049; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 4050, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4012, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3998, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4020, 13); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3993, 5); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3978, 6); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4008, 4); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3984, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_JACKED_1, 6); break; + case SOUND_PED_ROBBED: return SFX_BMYPI_MUGGED_1; + case SOUND_PED_ACCIDENTREACTION1: return SFX_BMYPI_SAVED_1; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_GENERIC_CRASH_1, 13); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_CAR_CRASH_1, 5); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_BLOCKED_1, 6); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_EYEING_1, 4); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYPI_BUMP_1, 9); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6666,25 +6659,25 @@ cAudioManager::GetBMYBBTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 639, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 659, 9); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 691, 8); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 648, 11); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 686, 5); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 699, 6); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 644, 4); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 711, 3); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 618, 12); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 584, 18); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 630, 9); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 554, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 524, 13); break; - case SOUND_PED_149: GetPhrase(sfx, ped->m_lastComment, 668, 16); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 684, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 602, 16); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 705, 6); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 537, 17); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 563, 21); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_JACKING_1, 9); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_MUGGING_1, 8); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_JACKED_1, 11); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_MUGGED_1, 5); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_SAVED_1, 6); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_INNOCENT_1, 4); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_TAXI_1, 3); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_FIGHT_1, 12); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_DODGE_1, 18); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_GENERIC_CRASH_1, 9); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_BLOCKED_1, 13); break; + case SOUND_PED_JEER: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_JEER_1, 16); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_EYEING_1, 16); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_SHOCKED_1, 6); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_BUMP_1, 17); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BMYBB_CHAT_1, 21); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6696,16 +6689,16 @@ cAudioManager::GetWMYCRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5056, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 5061, 6); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 5070, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5067, 3); break; - case SOUND_PED_TAXI_WAIT: return 5075; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5040, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5030, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5047, 9); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5021, 9); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5003, 18); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_JACKING_1, 6); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_MUGGING_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_MUGGED_1, 3); break; + case SOUND_PED_TAXI_WAIT: return SFX_WMYCR_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_GENERIC_CRASH_1, 9); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_CAR_CRASH_1, 9); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCR_BUMP_1, 18); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6717,21 +6710,21 @@ cAudioManager::GetWFYSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 8445, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 8456, 4); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 8463, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 8450, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 8461, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 8467; - case SOUND_PED_TAXI_WAIT: return 8468; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 8430, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8420, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 8437, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 8402, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 8386, 6); break; - case SOUND_PED_WAIT_DOUBLEBACK: return 8460; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 8392, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 8410, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_JACKING_1, 4); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_MUGGING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFYST_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFYST_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_BLOCKED_1, 6); break; + case SOUND_PED_WAIT_DOUBLEBACK: return SFX_WFYST_LOST_1; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYST_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6743,19 +6736,19 @@ cAudioManager::GetWFOSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 8354, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 8358, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 8369, 5); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 8381, 4); break; - case SOUND_PED_TAXI_WAIT: return 8385; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8332, 12); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 8374, 7); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 8344, 10); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 8305, 11); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 8274, 12); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 8366, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 8286, 19); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 8316, 16); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_GUN_PANIC_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_MUGGED_1, 5); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_SAVED_1, 4); break; + case SOUND_PED_TAXI_WAIT: return SFX_WFOST_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_DODGE_1, 12); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_RUN_1, 7); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_GENERIC_CRASH_1, 10); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_CAR_CRASH_1, 11); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_BLOCKED_1, 12); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_LOST_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_BUMP_1, 19); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOST_CHAT_1, 16); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6767,22 +6760,22 @@ cAudioManager::GetWMYSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 3947, 5); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 3963, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 3955, 5); break; - case SOUND_PED_ROBBED: return 3962; - case SOUND_PED_ACCIDENTREACTION1: return 3975; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 3952, 3); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 3976, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3930, 10); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 3968, 7); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 3942, 5); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3912, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3893, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 3960, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 3940, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3901, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3920, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_GUN_PANIC_1, 5); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_MUGGING_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_JACKED_1, 5); break; + case SOUND_PED_ROBBED: return SFX_WMYST_MUGGED_1; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMYST_SAVED_1; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_INNOCENT_1, 3); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_DODGE_1, 10); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_RUN_1, 7); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_GENERIC_CRASH_1, 5); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYST_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6794,22 +6787,22 @@ cAudioManager::GetWMOSTTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 5170, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5178, 4); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5188, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5190; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 5175, 3); break; - case SOUND_PED_TAXI_WAIT: return 5191; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5155, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5145, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5163, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5129, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5111, 8); break; - case SOUND_PED_149: GetPhrase(sfx, ped->m_lastComment, 5182, 4); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5186, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 5153, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5119, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5136, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_JACKED_1, 4); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMOST_SAVED_1; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_INNOCENT_1, 3); break; + case SOUND_PED_TAXI_WAIT: return SFX_WMOST_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_BLOCKED_1, 8); break; + case SOUND_PED_JEER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_JEER_1, 4); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOST_CHAT_1, 9); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6821,20 +6814,20 @@ cAudioManager::GetWFYRITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5299, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5304, 7); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5313, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5320; - case SOUND_PED_TAXI_WAIT: return 5323; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5280, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 5315, 5); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5291, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5271, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5253, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5311, 2); break; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 5289, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5321, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5261, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_JACKED_1, 7); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFYRI_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFYRI_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_RUN_1, 5); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYRI_BUMP_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6846,19 +6839,19 @@ cAudioManager::GetWFORITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7825, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7831, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7839, 3); break; - case SOUND_PED_ACCIDENTREACTION1: return 7842; - case SOUND_PED_TAXI_WAIT: return 7846; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 7810, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7799, 11); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7817, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7789, 10); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 7771, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 7837, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7843, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7778, 11); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_MUGGED_1, 3); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFORI_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFORI_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_DODGE_1, 11); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_CAR_CRASH_1, 10); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_BLOCKED_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFORI_BUMP_1, 11); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6870,19 +6863,22 @@ cAudioManager::GetWMYRITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4186, 8); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4194, 8); break; - case SOUND_PED_ACCIDENTREACTION1: return 4208; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 4213, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4163, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 4203, 5); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4175, 11); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4144, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 4126, 10); break; - case SOUND_PED_WAIT_DOUBLEBACK: return 4202; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4172, 3); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 4209, 4); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4136, 8); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_GUN_PANIC_1, 8); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_JACKED_1, 8); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMYRI_SAVED_1; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_RUN_1, 5); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_GENERIC_CRASH_1, 11); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_BLOCKED_1, 10); break; + case SOUND_PED_WAIT_DOUBLEBACK: return SFX_WMYRI_LOST_1; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_EYEING_1, 3); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_SHOCKED_1, 4); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_BUMP_1, 8); break; +#ifdef FIX_BUGS + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYRI_CHAT_1, 10); break; +#endif default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6894,20 +6890,20 @@ cAudioManager::GetWMORITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6668, 9); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6677, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6685, 4); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6701, 2); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 6707, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6647, 10); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6689, 12); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6660, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6641, 6); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6617, 10); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 6683, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 6657, 3); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 6703, 4); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6627, 14); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_GUN_PANIC_1, 9); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_MUGGED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_DODGE_1, 10); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_RUN_1, 12); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_CAR_CRASH_1, 6); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_BLOCKED_1, 10); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_EYEING_1, 3); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_SHOCKED_1, 4); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMORI_BUMP_1, 14); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6919,18 +6915,18 @@ cAudioManager::GetWFYBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7752, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7757, 4); break; - case SOUND_PED_ACCIDENTREACTION1: return 7766; - case SOUND_PED_TAXI_WAIT: return 7770; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7738, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7761, 5); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7746, 6); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7722, 6); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 7704, 7); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7767, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7711, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7728, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_JACKED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFYBE_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFYBE_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_RUN_1, 5); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_GENERIC_CRASH_1, 6); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_CAR_CRASH_1, 6); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_BLOCKED_1, 7); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBE_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6942,20 +6938,20 @@ cAudioManager::GetWMYBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 8127, 8); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 8142, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 8135, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8105, 12); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 8155, 5); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 8119, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 8086, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 8063, 9); break; - case SOUND_PED_149: GetPhrase(sfx, ped->m_lastComment, 8145, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 8152, 3); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 8117, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 8160, 6); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 8072, 14); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 8094, 11); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_GUN_PANIC_1, 8); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_JACKING_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_JACKED_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_DODGE_1, 12); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_RUN_1, 5); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_BLOCKED_1, 9); break; + case SOUND_PED_JEER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_JEER_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_LOST_1, 3); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_SHOCKED_1, 6); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_BUMP_1, 14); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBE_CHAT_1, 11); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -6967,18 +6963,18 @@ cAudioManager::GetWFOBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6093, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6098, 4); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6109, 3); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 6115, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6075, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 6102, 7); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6083, 10); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6058, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6040, 8); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 6112, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6048, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 6065, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_JACKED_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_SAVED_1, 3); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_RUN_1, 7); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_GENERIC_CRASH_1, 10); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_BLOCKED_1, 8); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOBE_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -6990,21 +6986,21 @@ cAudioManager::GetWMOBETalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 3759, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 3772, 4); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 3792, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 3764, 8); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 3802, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3742, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 3798, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 3752, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3724, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3706, 6); break; - case SOUND_PED_149: GetPhrase(sfx, ped->m_lastComment, 3776, 16); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 3750, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 3804, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3712, 12); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3732, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_JACKING_1, 4); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_MUGGING_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_JACKED_1, 8); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_SAVED_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_BLOCKED_1, 6); break; + case SOUND_PED_JEER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_JEER_1, 16); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_BUMP_1, 12); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7016,21 +7012,24 @@ cAudioManager::GetWMYCWTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5650, 6); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 5670, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 5659, 6); break; - case SOUND_PED_ROBBED: return 5676; - case SOUND_PED_TAXI_WAIT: return 5677; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5635, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5622, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 5643, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 5598, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5580, 9); break; - case SOUND_PED_149: GetPhrase(sfx, ped->m_lastComment, 5665, 5); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5674, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 5632, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5589, 9); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5607, 15); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_JACKED_1, 6); break; + case SOUND_PED_ROBBED: return SFX_WMYCW_MUGGED_1; +#ifdef FIX_BUGS + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_INNOCENT_1, 3); break; +#endif + case SOUND_PED_TAXI_WAIT: return SFX_WMYCW_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_BLOCKED_1, 9); break; + case SOUND_PED_JEER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_JEER_1, 5); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_EYEING_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_BUMP_1, 9); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYCW_CHAT_1, 15); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7042,19 +7041,19 @@ cAudioManager::GetWMYGOTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7679, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7684, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7690, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 7698; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 7701, 3); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7659, 11); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7692, 6); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7672, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7642, 7); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 7670, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7699, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7633, 9); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7649, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMYGO_SAVED_1; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_TAXI_1, 3); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_DODGE_1, 11); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_RUN_1, 6); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_CAR_CRASH_1, 7); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_BUMP_1, 9); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYGO_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7066,18 +7065,18 @@ cAudioManager::GetWFOGOTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7904, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7909, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7915, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 7919; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 7883, 14); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7874, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7917, 2); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7897, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7855, 8); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7920, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7847, 8); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7863, 11); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFOGO_SAVED_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_FIGHT_1, 14); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_RUN_1, 2); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_CAR_CRASH_1, 8); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_BUMP_1, 8); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOGO_CHAT_1, 11); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7089,19 +7088,19 @@ cAudioManager::GetWMOGOTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 4982, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 4987, 6); break; - case SOUND_PED_ACCIDENTREACTION1: return 4998; - case SOUND_PED_TAXI_WAIT: return 5002; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4961, 13); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4947, 12); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 4993, 5); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 4974, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 4929, 9); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 4959, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 4999, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4921, 8); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4938, 9); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_GUN_PANIC_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_JACKED_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMOGO_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WMOGO_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_FIGHT_1, 13); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_DODGE_1, 12); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_RUN_1, 5); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_CAR_CRASH_1, 9); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_BUMP_1, 8); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOGO_CHAT_1, 9); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7113,13 +7112,13 @@ cAudioManager::GetWFYLGTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 8267, 5); break; - case SOUND_PED_ACCIDENTREACTION1: return 8272; - case SOUND_PED_TAXI_WAIT: return 8273; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 8260, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8252, 8); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 8232, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 8242, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFYLG_GUN_COOL_1, 5); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFYLG_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFYLG_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYLG_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYLG_DODGE_1, 8); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYLG_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYLG_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7131,13 +7130,13 @@ cAudioManager::GetWMYLGTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 3698, 6); break; - case SOUND_PED_ACCIDENTREACTION1: return 3704; - case SOUND_PED_TAXI_WAIT: return 3705; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 3691, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3682, 9); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3662, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3672, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WMYLG_GUN_COOL_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMYLG_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WMYLG_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYLG_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYLG_DODGE_1, 9); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYLG_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYLG_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7149,15 +7148,15 @@ cAudioManager::GetWFYBUTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7309, 8); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 7317, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7325, 4); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 7340, 2); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7329, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 7301, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7292, 9); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7337, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7271, 21); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_GUN_PANIC_1, 8); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_MUGGED_1, 4); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_TAXI_1, 2); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_RUN_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_CAR_CRASH_1, 9); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYBU_BUMP_1, 21); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7169,22 +7168,26 @@ cAudioManager::GetWMYBUTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 3862, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 3870, 5); break; - case SOUND_PED_ROBBED: return 3880; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 3884, 2); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 3868, 2); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 3891, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3845, 10); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 3881, 3); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 3857, 5); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3826, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3706, 6); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 3875, 5); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 3855, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 3886, 5); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3815, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3835, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_JACKED_1, 5); break; + case SOUND_PED_ROBBED: return SFX_WMYBU_MUGGED_1; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_SAVED_1, 2); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_INNOCENT_1, 2); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_DODGE_1, 10); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_RUN_1, 3); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_GENERIC_CRASH_1, 5); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_CAR_CRASH_1, 9); break; +#ifdef FIX_BUGS + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_BLOCKED_1, 9); break; +#else + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBE_BLOCKED_1, 6); break; +#endif + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_LOST_1, 5); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_SHOCKED_1, 5); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYBU_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7196,19 +7199,19 @@ cAudioManager::GetWMOBUTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 6753, 6); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6759, 7); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6769, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6771, 3); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 6774, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 6743, 3); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6733, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6746, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6726, 7); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6709, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 6766, 3); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 6741, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6716, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_JACKED_1, 7); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_SAVED_1, 3); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_FIGHT_1, 3); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_CAR_CRASH_1, 7); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_BLOCKED_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_LOST_1, 3); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMOBU_BUMP_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7220,16 +7223,16 @@ cAudioManager::GetWFYPRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 4101, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 4107, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 4109; - case SOUND_PED_PLAYER_BEFORESEX: GetPhrase(sfx, ped->m_lastComment, 4096, 5); break; - case SOUND_PED_TAXI_WAIT: return 4125; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 4087, 9); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 4077, 10); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 4110, 15); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 4052, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 4063, 14); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_GUN_COOL_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFYPR_SAVED_1; + case SOUND_PED_PLAYER_BEFORESEX: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_FUCKING_1, 5); break; + case SOUND_PED_TAXI_WAIT: return SFX_WFYPR_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_FIGHT_1, 9); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_DODGE_1, 10); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_SOLICIT_1, 15); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYPR_CHAT_1, 14); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7241,14 +7244,14 @@ cAudioManager::GetWFOTRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 7371, 6); break; - case SOUND_PED_ACCIDENTREACTION1: return 7383; - case SOUND_PED_TAXI_WAIT: return 7393; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7362, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7377, 6); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 7384, 9); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7342, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7353, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFOTR_GUN_COOL_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFOTR_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFOTR_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOTR_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFOTR_RUN_1, 6); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOTR_SOLICIT_1, 9); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFOTR_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOTR_CHAT_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7260,16 +7263,16 @@ cAudioManager::GetWMOTRTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 7542, 5); break; - case SOUND_PED_ACCIDENTREACTION1: return 7547; - case SOUND_PED_TAXI_WAIT: return 7558; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 7536, 6); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7517, 17); break; - case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, 7551, 7); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 7534, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7548, 3); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7494, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7504, 13); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_GUN_COOL_1, 5); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMOTR_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WMOTR_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_FIGHT_1, 6); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_DODGE_1, 17); break; + case SOUND_PED_SOLICIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_SOLICIT_1, 7); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_SHOCKED_1, 3); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMOTR_CHAT_1, 13); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7281,20 +7284,24 @@ cAudioManager::GetWMYPITalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 6496, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 6509, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 6503, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 6513, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 6515, 2); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 6501, 2); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 6517, 4); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 6479, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 6465, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 6488, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 6457, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 6439, 8); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 6473, 6); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 6447, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_SAVED_1, 2); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_INNOCENT_1, 2); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_TAXI_1, 4); break; +#ifdef FIX_BUGS + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_FIGHT_1, 9); break; +#else + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_FIGHT_1, 7); break; +#endif + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_BLOCKED_1, 8); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_EYEING_1, 6); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYPI_BUMP_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7306,19 +7313,19 @@ cAudioManager::GetWMOCATalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 8032, 6); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 8048, 11); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 8038, 10); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 8059, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 8061; - case SOUND_PED_TAXI_WAIT: return 8062; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 8015, 8); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 8003, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 8023, 9); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 7993, 10); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 7975, 12); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 8013, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7987, 6); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_GUN_PANIC_1, 6); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_JACKING_1, 11); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_JACKED_1, 10); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMOCA_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WMOCA_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_FIGHT_1, 8); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_GENERIC_CRASH_1, 9); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_CAR_CRASH_1, 10); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_BLOCKED_1, 12); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMOCA_BUMP_1, 6); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7329,12 +7336,12 @@ cAudioManager::GetWFYJGTalkSfx(CPed *ped, int16 sound) { uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 7414, 4); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 7424; break; - case SOUND_PED_TAXI_WAIT: sfx = 7425; break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7406, 8); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7418, 6); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7394, 12); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYJG_GUN_PANIC_1, 4); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_WFYJG_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: sfx = SFX_WFYJG_TAXI_1; break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYJG_DODGE_1, 8); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFYJG_RUN_1, 6); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYJG_BUMP_1, 12); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7346,14 +7353,14 @@ cAudioManager::GetWMYJGTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5098, 4); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5102, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 5109; - case SOUND_PED_TAXI_WAIT: return 5110; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 5104, 5); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 5076, 10); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 5096, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5086, 10); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYJG_GUN_PANIC_1, 4); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYJG_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WMYJG_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WMYJG_TAXI_1; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WMYJG_RUN_1, 5); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYJG_BLOCKED_1, 10); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYJG_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYJG_BUMP_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7365,14 +7372,14 @@ cAudioManager::GetWFYSKTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 3652, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 3657, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 3659, 2); break; - case SOUND_PED_TAXI_WAIT: return 3661; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 3641, 11); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3632, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3603, 11); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3614, 18); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_GUN_PANIC_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: return SFX_WFYSK_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_FIGHT_1, 11); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_DODGE_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_BLOCKED_1, 11); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSK_BUMP_1, 18); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7384,18 +7391,18 @@ cAudioManager::GetWMYSKTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 5563, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 5573, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 5575, 2); break; - case SOUND_PED_UNK_126: GetPhrase(sfx, ped->m_lastComment, 5568, 3); break; - case SOUND_PED_TAXI_WAIT: return 5579; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 5558, 5); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 5546, 10); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 5571, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 5556, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 5577, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 5519, 14); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 5533, 13); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_GUN_PANIC_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_SAVED_1, 2); break; + case SOUND_PED_INNOCENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_INNOCENT_1, 3); break; + case SOUND_PED_TAXI_WAIT: return SFX_WMYSK_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_FIGHT_1, 5); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_DODGE_1, 10); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_BUMP_1, 14); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WMYSK_CHAT_1, 13); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7407,16 +7414,16 @@ cAudioManager::GetWFYSHTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 7459, 9); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 7470, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 7483, 4); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 7492, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 7448, 11); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 7472, 11); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 7468, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 7487, 5); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 7426, 12); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 7438, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_GUN_COOL_1, 9); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_SAVED_1, 4); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_DODGE_1, 11); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_RUN_1, 11); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_SHOCKED_1, 5); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_BUMP_1, 12); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYSH_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7428,16 +7435,16 @@ cAudioManager::GetWFOSHTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 3571, 10); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 3583, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 3594, 3); break; - case SOUND_PED_TAXI_WAIT: return 3602; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3561, 10); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 3585, 9); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 3581, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 3597, 5); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3542, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3552, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_GUN_COOL_1, 10); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_SAVED_1, 3); break; + case SOUND_PED_TAXI_WAIT: return SFX_WFOSH_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_DODGE_1, 10); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_RUN_1, 9); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_LOST_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_SHOCKED_1, 5); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFOSH_CHAT_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7449,20 +7456,20 @@ cAudioManager::GetJFOTOTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 811, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 815, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 821, 2); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 828, 2); break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 831, 2); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 796, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 823, 5); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 805, 6); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 775, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 757, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: return 820; - case SOUND_PED_CHAT_EVENT: return 830; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 765, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 783, 13); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_GUN_PANIC_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_SAVED_1, 2); break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_TAXI_1, 2); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_RUN_1, 5); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_GENERIC_CRASH_1, 6); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: return SFX_JFOTO_LOST_1; + case SOUND_PED_CHAT_EVENT: return SFX_JFOTO_SHOCKED_1; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_JFOTO_CHAT_1, 13); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7474,20 +7481,20 @@ cAudioManager::GetJMOTOTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, 874, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 878, 4); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 883, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 889; - case SOUND_PED_TAXI_WAIT: return 891; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 862, 6); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 885, 4); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 868, 6); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 849, 6); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 833, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: return 882; - case SOUND_PED_CHAT_EVENT: return 890; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 841, 8); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 855, 7); break; + case SOUND_PED_HANDS_COWER: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_GUN_PANIC_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_JACKED_1, 4); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_JMOTO_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_JMOTO_TAXI_1; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_DODGE_1, 6); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_RUN_1, 4); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_GENERIC_CRASH_1, 6); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_CAR_CRASH_1, 6); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: return SFX_JMOTO_LOST_1; + case SOUND_PED_CHAT_EVENT: return SFX_JMOTO_SHOCKED_1; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_BUMP_1, 8); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_JMOTO_CHAT_1, 7); break; default: return GetGenericMaleTalkSfx(ped, sound); } return sfx; @@ -7499,24 +7506,24 @@ cAudioManager::GetCBTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 2178, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 2187, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 2183, 4); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 2194, 2); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 2196; break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 2197, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 2161, 9); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 2150, 9); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 2170, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 2132, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 2113, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 2192, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 2159, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 2121, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 2140, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_JACKING_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_JACKED_1, 4); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_CUBAN_GANG_1_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_FIGHT_1, 9); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_DODGE_1, 9); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_CAR_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_GANG_1_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 86 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; + return (SFX_CUBAN_GANG_2_BLOCKED_1 - SFX_CUBAN_GANG_1_BLOCKED_1) * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } uint32 @@ -7525,24 +7532,24 @@ cAudioManager::GetHNTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 2692, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 2703, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 2697, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 2711, 3); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 2714; break; - case SOUND_PED_TAXI_WAIT: sfx = 2715; break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 2673, 10); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 2661, 10); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 2683, 9); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 2638, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 2617, 9); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 2707, 4); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 2671, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 2626, 12); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 2647, 14); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_MUGGED_1, 3); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_HAITIAN_GANG_1_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: sfx = SFX_HAITIAN_GANG_1_TAXI_1; break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_FIGHT_1, 10); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_DODGE_1, 10); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_GENERIC_CRASH_1, 9); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_BLOCKED_1, 9); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_LOST_1, 4); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_BUMP_1, 12); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_HAITIAN_GANG_1_CHAT_1, 14); break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 99 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; + return (SFX_HAITIAN_GANG_2_BLOCKED_1 - SFX_HAITIAN_GANG_1_BLOCKED_1) * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } uint32 @@ -7551,26 +7558,26 @@ cAudioManager::GetSGTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 1104, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 1114, 5); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 1124, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 1109, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 1121, 3); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 1129; break; - case SOUND_PED_TAXI_WAIT: sfx = 1132; break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 1088, 10); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 1076, 9); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 1098, 6); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 1058, 6); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 1040, 8); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 1119, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 1085, 3); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 1130, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 1048, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 1064, 12); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_JACKING_1, 5); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_MUGGING_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_MUGGED_1, 3); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_STREET_GANG_1_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: sfx = SFX_STREET_GANG_1_TAXI_1; break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_FIGHT_1, 10); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_DODGE_1, 9); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_GENERIC_CRASH_1, 6); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_CAR_CRASH_1, 6); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_BLOCKED_1, 8); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_EYEING_1, 3); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_STREET_GANG_1_CHAT_1, 12); break; default: return GetGenericMaleTalkSfx(ped, sound); } - if(ped->GetModelIndex() == MI_SGB) sfx += 93; + if(ped->GetModelIndex() == MI_SGB) sfx += (SFX_STREET_GANG_2_BLOCKED_1 - SFX_STREET_GANG_1_BLOCKED_1); return sfx; } @@ -7580,24 +7587,24 @@ cAudioManager::GetCLTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 1299, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 1310, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 1304, 6); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 1317, 2); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 1319; break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 1320, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 1281, 10); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 1266, 13); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 1291, 8); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 1246, 10); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 1226, 10); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 1315, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 1279, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 1236, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 1256, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_JACKING_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_JACKED_1, 6); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_CUBAN_LORD_GANG_1_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_FIGHT_1, 10); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_DODGE_1, 13); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_1, 8); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_CAR_CRASH_1, 10); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_BLOCKED_1, 10); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_EYEING_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_CUBAN_LORD_GANG_1_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 96 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; + return (SFX_CUBAN_LORD_GANG_2_BLOCKED_1 - SFX_CUBAN_LORD_GANG_1_BLOCKED_1) * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } uint32 @@ -7606,18 +7613,18 @@ cAudioManager::GetGDTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 1762, 6); break; - case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, 1770, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 1755, 7); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 1744, 9); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 1768, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 1753, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 1772, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 1724, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 1734, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_GUN_COOL_1, 6); break; + case SOUND_PED_ACCIDENTREACTION1: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_SAVED_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_FIGHT_1, 7); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_DODGE_1, 9); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_GUARD_DUTY_1_CHAT_1, 10); break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 50 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; + return (SFX_GUARD_DUTY_2_BUMP_1 - SFX_GUARD_DUTY_1_BUMP_1) * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } uint32 @@ -7626,22 +7633,22 @@ cAudioManager::GetBKTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 2429, 5); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 2442, 4); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 2434, 8); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 2448, 2); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 2450; break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 2451, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 2412, 9); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 2403, 9); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 2421, 8); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 2371, 10); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 2446, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 2381, 10); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 2391, 12); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_GUN_COOL_1, 5); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_JACKING_1, 4); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_JACKED_1, 8); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_BIKER_GANG_1_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_FIGHT_1, 9); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_DODGE_1, 9); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_GENERIC_CRASH_1, 8); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_BLOCKED_1, 10); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_LOST_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_BUMP_1, 10); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_BIKER_GANG_1_CHAT_1, 12); break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 82 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; + return (SFX_BIKER_GANG_2_BLOCKED_1 - SFX_BIKER_GANG_1_BLOCKED_1) * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } uint32 @@ -7650,25 +7657,25 @@ cAudioManager::GetPGTalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 1561, 4); break; - case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, 1570, 5); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 1565, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 1577, 2); break; - case SOUND_PED_ACCIDENTREACTION1: sfx = 1579; break; - case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, 1582, 2); break; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 1551, 5); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 1542, 7); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 1556, 5); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 1529, 5); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 1514, 10); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 1575, 2); break; - case SOUND_PED_CHAT_SEXY: GetPhrase(sfx, ped->m_lastComment, 1549, 2); break; - case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, 1580, 2); break; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 1524, 5); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 1534, 8); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_GUN_COOL_1, 4); break; + case SOUND_PED_CAR_JACKING: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_JACKING_1, 5); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: sfx = SFX_PLAYER_GANG_1_SAVED_1; break; + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_TAXI_1, 2); break; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_FIGHT_1, 5); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_DODGE_1, 7); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_GENERIC_CRASH_1, 5); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_CAR_CRASH_1, 5); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_BLOCKED_1, 10); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_LOST_1, 2); break; + case SOUND_PED_CHAT_SEXY_MALE: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_SHOCKED_1, 2); break; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_BUMP_1, 5); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_PLAYER_GANG_1_CHAT_1, 8); break; default: return GetGenericMaleTalkSfx(ped, sound); } - return 70 * (m_sQueueSample.m_nEntityIndex % 3) + sfx; + return (SFX_PLAYER_GANG_2_BLOCKED_1 - SFX_PLAYER_GANG_1_BLOCKED_1) * (m_sQueueSample.m_nEntityIndex % 3) + sfx; } uint32 @@ -7678,18 +7685,18 @@ cAudioManager::GetVICETalkSfx(CPed *ped, int16 sound, int16 model) if(model == MI_VICE6) { switch(sound) { - case SOUND_PED_ARREST_COP: GetPhrase(sfx, ped->m_lastComment, 1894, 3); break; - case SOUND_PED_MIAMIVICE_EXITING_CAR: return 1897; + case SOUND_PED_ARREST_COP: GetPhrase(sfx, ped->m_lastComment, SFX_VICE_VOICE_6_ARREST_1, 3); break; + case SOUND_PED_MIAMIVICE_EXITING_CAR: return SFX_VICE_VOICE_6_MIAMIVICE_EXITING_CAR_1; default: return GetGenericMaleTalkSfx(ped, sound); } } switch(sound) { - case SOUND_PED_ARREST_COP: GetPhrase(sfx, ped->m_lastComment, 1874, 3); break; - case SOUND_PED_MIAMIVICE_EXITING_CAR: sfx = 1877; break; + case SOUND_PED_ARREST_COP: GetPhrase(sfx, ped->m_lastComment, SFX_VICE_VOICE_1_ARREST_1, 3); break; + case SOUND_PED_MIAMIVICE_EXITING_CAR: sfx = SFX_VICE_VOICE_1_MIAMIVICE_EXITING_CAR_1; break; default: return GetGenericMaleTalkSfx(ped, sound); } - sfx += 4 * (m_sQueueSample.m_nEntityIndex % 5); + sfx += (SFX_VICE_VOICE_2_ARREST_1-SFX_VICE_VOICE_1_ARREST_1) * (m_sQueueSample.m_nEntityIndex % 5); return sfx; } @@ -7699,23 +7706,23 @@ cAudioManager::GetWFYG1TalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 3383, 6); break; - case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, 3399, 2); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 3389, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 3397, 2); break; - case SOUND_PED_ACCIDENTREACTION1: return 3403; - case SOUND_PED_TAXI_WAIT: return 3405; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 3372, 4); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3361, 9); break; - case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, 3401, 2); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 3376, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3342, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3324, 7); break; - case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, 3394, 3); break; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 3370, 2); break; - case SOUND_PED_CHAT_EVENT: return 3404; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3331, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3351, 10); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_GUN_COOL_1, 6); break; + case SOUND_PED_MUGGING: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_MUGGING_1, 2); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_MUGGED_1, 2); break; + case SOUND_PED_ACCIDENTREACTION1: return SFX_WFYG1_SAVED_1; + case SOUND_PED_TAXI_WAIT: return SFX_WFYG1_TAXI_1; + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_FIGHT_1, 4); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_DODGE_1, 9); break; + case SOUND_PED_FLEE_RUN: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_RUN_1, 2); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_BLOCKED_1, 7); break; + case SOUND_PED_WAIT_DOUBLEBACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_LOST_1, 3); break; + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_EYEING_1, 2); break; + case SOUND_PED_CHAT_EVENT: return SFX_WFYG1_SHOCKED_1; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG1_CHAT_1, 10); break; default: return GetGenericFemaleTalkSfx(ped, sound); } return sfx; @@ -7727,20 +7734,24 @@ cAudioManager::GetWFYG2TalkSfx(CPed *ped, int16 sound) uint32 sfx; switch(sound) { - case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, 3464, 3); break; - case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, 3467, 5); break; - case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, 3473, 2); break; - case SOUND_PED_TAXI_WAIT: return 3476; - case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, 3452, 5); break; - case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, 3440, 8); break; - case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, 3457, 7); break; - case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, 3422, 9); break; - case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, 3406, 5); break; - case SOUND_PED_WAIT_DOUBLEBACK: return 3472; - case SOUND_153: GetPhrase(sfx, ped->m_lastComment, 3448, 4); break; - case SOUND_PED_CHAT_EVENT: return 3475; - case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, 3411, 11); break; - case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, 3431, 9); break; + case SOUND_PED_HANDS_UP: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_GUN_COOL_1, 3); break; + case SOUND_PED_CAR_JACKED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_JACKED_1, 5); break; + case SOUND_PED_ROBBED: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_MUGGED_1, 2); break; +#ifdef FIX_BUGS + case SOUND_PED_TAXI_WAIT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_TAXI_1, 2); break; +#else + case SOUND_PED_TAXI_WAIT: return SFX_WFYG2_TAXI_1; +#endif + case SOUND_PED_ATTACK: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_FIGHT_1, 5); break; + case SOUND_PED_EVADE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_DODGE_1, 8); break; + case SOUND_PED_CRASH_VEHICLE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_GENERIC_CRASH_1, 7); break; + case SOUND_PED_CRASH_CAR: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_CAR_CRASH_1, 9); break; + case SOUND_PED_ANNOYED_DRIVER: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_BLOCKED_1, 5); break; + case SOUND_PED_WAIT_DOUBLEBACK: return SFX_WFYG2_LOST_1; + case SOUND_PED_CHAT_SEXY_FEMALE: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_EYEING_1, 4); break; + case SOUND_PED_CHAT_EVENT: return SFX_WFYG2_SHOCKED_1; + case SOUND_PED_PED_COLLISION: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_BUMP_1, 11); break; + case SOUND_PED_CHAT: GetPhrase(sfx, ped->m_lastComment, SFX_WFYG2_CHAT_1, 9); break; default: return GetGenericFemaleTalkSfx(ped, sound); } @@ -7752,7 +7763,7 @@ cAudioManager::GetGenericMaleTalkSfx(CPed *ped, int16 sound) { uint32 sfx; - m_bGenericSfx = true; + m_bGenericSfx = TRUE; switch(sound) { case SOUND_PED_DEATH: GetPhrase(sfx, ped->m_lastComment, SFX_GENERIC_MALE_DEATH_1, 41); break; case SOUND_PED_BULLET_HIT: @@ -7768,13 +7779,13 @@ uint32 cAudioManager::GetGenericFemaleTalkSfx(CPed *ped, int16 sound) { uint32 sfx; - m_bGenericSfx = true; + m_bGenericSfx = TRUE; switch(sound) { - case SOUND_PED_DEATH: GetPhrase(sfx, ped->m_lastComment, 2931, 22); break; + case SOUND_PED_DEATH: GetPhrase(sfx, ped->m_lastComment, SFX_GENERIC_FEMALE_DEATH_1, 22); break; case SOUND_PED_BULLET_HIT: - case SOUND_PED_DEFEND: GetPhrase(sfx, ped->m_lastComment, 2953, 33); break; - case SOUND_PED_BURNING: GetPhrase(sfx, ped->m_lastComment, 2914, 17); break; - case SOUND_PED_FLEE_SPRINT: GetPhrase(sfx, ped->m_lastComment, 2986, 27); break; + case SOUND_PED_DEFEND: GetPhrase(sfx, ped->m_lastComment, SFX_GENERIC_FEMALE_GRUNT_1, 33); break; + case SOUND_PED_BURNING: GetPhrase(sfx, ped->m_lastComment, SFX_GENERIC_FEMALE_FIRE_1, 17); break; + case SOUND_PED_FLEE_SPRINT: GetPhrase(sfx, ped->m_lastComment, SFX_GENERIC_FEMALE_PANIC_1, 27); break; default: return NO_SAMPLE; } return sfx; @@ -7816,7 +7827,7 @@ cPedComments::Process() uint32 sampleIndex; uint8 actualUsedBank; tPedComment *comment; - bool prevUsed = false; + bool8 prevUsed = FALSE; static uint8 counter = 0; static int32 prevSamples[10]; @@ -7827,7 +7838,7 @@ cPedComments::Process() if(m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nSampleIndex == prevSamples[(counter + 1 + i) % ARRAY_SIZE(prevSamples)]) { m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_nProcess = -1; - prevUsed = true; + prevUsed = TRUE; break; } } @@ -7847,19 +7858,21 @@ cPedComments::Process() AudioManager.m_sQueueSample.m_nVolume = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_bVolume; AudioManager.m_sQueueSample.m_fDistance = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_fDistance; AudioManager.m_sQueueSample.m_nLoopCount = 1; +#ifndef GTA_PS2 AudioManager.m_sQueueSample.m_nLoopStart = 0; AudioManager.m_sQueueSample.m_nLoopEnd = -1; +#endif AudioManager.m_sQueueSample.m_nEmittingVolume = MAX_VOLUME; AudioManager.m_sQueueSample.m_fSpeedMultiplier = 3.0f; AudioManager.m_sQueueSample.m_fSoundIntensity = 40.0f; - AudioManager.m_sQueueSample.m_bReleasingSoundFlag = true; + AudioManager.m_sQueueSample.m_bReleasingSoundFlag = TRUE; AudioManager.m_sQueueSample.m_vecPos = m_asPedComments[m_nActiveBank][m_nIndexMap[m_nActiveBank][0]].m_vecPos; - AudioManager.m_sQueueSample.m_bReverbFlag = true; - AudioManager.m_sQueueSample.m_bRequireReflection = true; - AudioManager.m_sQueueSample.m_bIs2D = false; + AudioManager.m_sQueueSample.m_bReverbFlag = TRUE; + AudioManager.m_sQueueSample.m_bRequireReflection = TRUE; + AudioManager.m_sQueueSample.m_bIs2D = FALSE; #ifdef FIX_BUGS - if (sampleIndex >= 8694 && sampleIndex < TOTAL_AUDIO_SAMPLES) { // check if player sfx, TODO: enum - AudioManager.m_sQueueSample.m_bIs2D = true; + if (sampleIndex >= SFX_PLAYER_ANGRY_BUSTED_1 && sampleIndex < TOTAL_AUDIO_SAMPLES) { // check if player sfx + AudioManager.m_sQueueSample.m_bIs2D = TRUE; AudioManager.m_sQueueSample.m_nOffset = 63; } #endif // FIX_BUGS @@ -7872,19 +7885,19 @@ cPedComments::Process() AudioManager.AddSampleToRequestedQueue(); #if defined(GTA_PC) && !defined(FIX_BUGS) m_nDelayTimer = CTimer::GetTimeInMilliseconds(); - m_bDelay = true; + m_bDelay = TRUE; #endif } } } // Switch bank - if (m_nActiveBank) { - actualUsedBank = SFX_BANK_PED_COMMENTS; - m_nActiveBank = SFX_BANK_0; + if (m_nActiveBank == 0) { + actualUsedBank = 0; + m_nActiveBank = 1; } else { - actualUsedBank = SFX_BANK_0; - m_nActiveBank = SFX_BANK_PED_COMMENTS; + actualUsedBank = 1; + m_nActiveBank = 0; } comment = m_asPedComments[actualUsedBank]; for (uint32 i = 0; i < m_nCommentsInBank[actualUsedBank]; i++) { @@ -7900,7 +7913,7 @@ cPedComments::Process() m_nCommentsInBank[actualUsedBank] = 0; #if defined(GTA_PC) && !defined(FIX_BUGS) if(m_bDelay) - if(CTimer::GetTimeInMilliseconds() - m_nDelayTimer > 6000) m_bDelay = false; + if(CTimer::GetTimeInMilliseconds() - m_nDelayTimer > 6000) m_bDelay = FALSE; #endif } @@ -7930,7 +7943,7 @@ cAudioManager::ProcessExplosions(int32 explosion) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 19000; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; case EXPLOSION_MOLOTOV: m_sQueueSample.m_fSoundIntensity = 150.0f; @@ -7938,7 +7951,7 @@ cAudioManager::ProcessExplosions(int32 explosion) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 19000; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bRequireReflection = FALSE; break; case EXPLOSION_MINE: case EXPLOSION_HELI_BOMB: @@ -7947,7 +7960,7 @@ cAudioManager::ProcessExplosions(int32 explosion) m_sQueueSample.m_nFrequency = RandomDisplacement(1000) + 12347; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; break; default: m_sQueueSample.m_fSoundIntensity = 200.0f; @@ -7967,13 +7980,12 @@ cAudioManager::ProcessExplosions(int32 explosion) if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = i; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_nEmittingVolume = MAX_VOLUME; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; - m_sQueueSample.m_bReverbFlag = true; + RESET_LOOP_OFFSETS + m_sQueueSample.m_bReverbFlag = TRUE; AddSampleToRequestedQueue(); } } @@ -8034,19 +8046,18 @@ cAudioManager::ProcessFires(int32) m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_nReleasingVolumeDivider = 10; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } if (gFireManager.m_aFires[i].m_bExtinguishedWithWater) { - gFireManager.m_aFires[i].m_bExtinguishedWithWater = false; + gFireManager.m_aFires[i].m_bExtinguishedWithWater = FALSE; emittingVol = 100.0f * gFireManager.m_aFires[i].m_fWaterExtinguishCountdown; m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { @@ -8058,14 +8069,13 @@ cAudioManager::ProcessFires(int32) m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_nReleasingVolumeDivider = 10; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -8094,14 +8104,13 @@ cAudioManager::ProcessWaterCannon(int32) m_sQueueSample.m_nCounter = i; m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_nReleasingVolumeDivider = 8; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nEmittingVolume = 50; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -8131,17 +8140,16 @@ cAudioManager::ProcessExtraSounds() m_sQueueSample.m_nSampleIndex = SFX_ARCADE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_ARCADE); - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 4; m_sQueueSample.m_fSpeedMultiplier = 3.0f; m_sQueueSample.m_nEmittingVolume = EMITTING_VOLUME; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_ARCADE); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_ARCADE); - m_sQueueSample.m_bReverbFlag = true; + SET_LOOP_OFFSETS(SFX_ARCADE) + m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bRequireReflection = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; AddSampleToRequestedQueue(); } @@ -8174,14 +8182,13 @@ cAudioManager::ProcessEscalators() m_sQueueSample.m_nReleasingVolumeDivider = 5; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; m_sQueueSample.m_nCounter = i; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = EMITTING_VOLUME; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_BOAT_V12_LOOP); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_BOAT_V12_LOOP); - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(SFX_BOAT_V12_LOOP) + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -8226,8 +8233,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; emittingVolume = 60; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SCRIPT_SOUND_GARAGE_DOOR_CLUNK: m_sQueueSample.m_fSoundIntensity = 80.0f; @@ -8238,8 +8245,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 4; emittingVolume = 60; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SCRIPT_SOUND_SHOOTING_RANGE_TARGET_HIT: case SCRIPT_SOUND_BULLET_HIT_GROUND_1: @@ -8252,7 +8259,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 32); m_sQueueSample.m_nReleasingVolumeModificator = 9; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; emittingVolume = m_anRandomTable[2] % 20 + 90; break; case SCRIPT_SOUND_WILLIE_CARD_SWIPE: @@ -8263,8 +8270,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = 20159; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 1.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; break; case SCRIPT_SOUND_MALE_AMBULANCE_OUCH: { @@ -8288,8 +8295,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_CAR_HORN_JEEP); // BUG? m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bIs2D = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; break; case SCRIPT_SOUND_PAYPHONE_RINGING: m_sQueueSample.m_fSoundIntensity = 80.0f; @@ -8299,8 +8306,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_PHONE_RING); m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; break; case SCRIPT_SOUND_GLASS_BREAK_L: m_sQueueSample.m_fSoundIntensity = 60.0f; @@ -8310,7 +8317,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_GLASS_SMASH); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_GLASS_BREAK_S: m_sQueueSample.m_fSoundIntensity = 60.0f; @@ -8320,7 +8327,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_GLASS_SMASH); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_GLASS_CRACK: m_sQueueSample.m_fSoundIntensity = 60.0f; @@ -8330,8 +8337,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_GLASS_CRACK); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; break; case SCRIPT_SOUND_GLASS_LIGHT_BREAK: m_sQueueSample.m_fSoundIntensity = 55.0f; @@ -8340,7 +8347,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = RandomDisplacement(2000) + 19000; m_sQueueSample.m_nReleasingVolumeModificator = 9; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; emittingVolume = RandomDisplacement(11) + 25; break; case SCRIPT_SOUND_BOX_DESTROYED_1: @@ -8350,8 +8357,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = RandomDisplacement(1500) + 18600; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVolume = m_anRandomTable[2] % 20 + 80; break; case SCRIPT_SOUND_BOX_DESTROYED_2: @@ -8361,8 +8368,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency = RandomDisplacement(1500) + 18600; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVolume = m_anRandomTable[2] % 20 + 80; break; case SCRIPT_SOUND_METAL_COLLISION: @@ -8373,8 +8380,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVolume = m_anRandomTable[2] % 30 + 70; break; case SCRIPT_SOUND_TIRE_COLLISION: @@ -8385,8 +8392,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVolume = m_anRandomTable[2] % 30 + 60; break; case SCRIPT_SOUND_HIT_BALL: @@ -8397,8 +8404,8 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nReleasingVolumeModificator = 5; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bRequireReflection = TRUE; emittingVolume = m_anRandomTable[2] % 30 + 60; break; case SCRIPT_SOUND_GUNSHELL_DROP: @@ -8434,7 +8441,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 20.0f; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; emittingVolume = m_anRandomTable[2] % 20 + 30; break; case SCRIPT_SOUND_GUNSHELL_DROP_SOFT: @@ -8444,7 +8451,7 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) m_sQueueSample.m_fSoundIntensity = 20.0f; m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_fSpeedMultiplier = 0.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; emittingVolume = m_anRandomTable[2] % 20 + 30; break; default: @@ -8458,11 +8465,10 @@ cAudioManager::ProcessOneShotScriptObject(uint8 sound) if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = iSound++; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_nEmittingVolume = emittingVolume; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; - m_sQueueSample.m_bReverbFlag = true; + RESET_LOOP_OFFSETS + m_sQueueSample.m_bReverbFlag = TRUE; AddSampleToRequestedQueue(); } } @@ -8484,7 +8490,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_POLICE_CELL_DOOR_SLIDING_LOOP: case SCRIPT_SOUND_GARAGE_DOOR_SLIDING_LOOP: @@ -8496,7 +8502,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_SNORING_LOOP: m_sQueueSample.m_fSoundIntensity = 6.0f; @@ -8507,7 +8513,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 6; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_fSpeedMultiplier = 3.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_SHOOTING_RANGE_TARGET_MOVING_LOOP: m_sQueueSample.m_fSoundIntensity = 40.0f; @@ -8518,7 +8524,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 4; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_BAR_1: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_1; @@ -8529,7 +8535,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_BAR_2: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_2; @@ -8540,7 +8546,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_BAR_3: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_3; @@ -8551,7 +8557,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_BAR_4: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_BAR_4; @@ -8562,7 +8568,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_MALIBU_1: if(MusicManager.m_nPlayingTrack == STREAMED_SOUND_MALIBU_AMBIENT) return; @@ -8575,7 +8581,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_MALIBU_2: if(MusicManager.m_nPlayingTrack == STREAMED_SOUND_MALIBU_AMBIENT) return; @@ -8588,7 +8594,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_MALIBU_3: if(MusicManager.m_nPlayingTrack == STREAMED_SOUND_MALIBU_AMBIENT) return; @@ -8601,7 +8607,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_STRIP_1: if(MusicManager.m_nPlayingTrack == STREAMED_SOUND_STRIPCLUB_AMBIENT) return; @@ -8614,7 +8620,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_STRIP_2: if(MusicManager.m_nPlayingTrack == STREAMED_SOUND_STRIPCLUB_AMBIENT) return; @@ -8627,7 +8633,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_STRIP_3: if(MusicManager.m_nPlayingTrack == STREAMED_SOUND_STRIPCLUB_AMBIENT) return; @@ -8640,7 +8646,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_BUILDING_CHURCH: m_sQueueSample.m_nSampleIndex = SFX_BUILDING_CHURCH; @@ -8651,7 +8657,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nReleasingVolumeDivider = 15; m_sQueueSample.m_fSpeedMultiplier = 4.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; case SCRIPT_SOUND_NEW_WATERFALL: emittingVolume = 30; @@ -8662,7 +8668,7 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nReleasingVolumeModificator = 4; m_sQueueSample.m_nReleasingVolumeDivider = 9; m_sQueueSample.m_fSpeedMultiplier = 2.0f; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; break; default: return; } @@ -8673,14 +8679,13 @@ cAudioManager::ProcessLoopingScriptObject(uint8 sound) m_sQueueSample.m_nVolume = ComputeVolume(emittingVolume, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if(m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = TRUE; m_sQueueSample.m_nEmittingVolume = emittingVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -8718,14 +8723,13 @@ cAudioManager::ProcessWeather(int32 id) m_sQueueSample.m_nCounter = iSound++; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nOffset = (m_anRandomTable[2] & 15) + 55; - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; - m_sQueueSample.m_bReverbFlag = false; - m_sQueueSample.m_bRequireReflection = false; + RESET_LOOP_OFFSETS + m_sQueueSample.m_bReverbFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } if (CWeather::Rain > 0.0f && (!CCullZones::CamNoRain() || !CCullZones::PlayerNoRain())) { @@ -8736,15 +8740,14 @@ cAudioManager::ProcessWeather(int32 id) m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nReleasingVolumeModificator = 0; m_sQueueSample.m_nOffset = 63; - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 30; - m_sQueueSample.m_bReverbFlag = false; + m_sQueueSample.m_bReverbFlag = FALSE; m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } x = 0.0f; @@ -8761,15 +8764,14 @@ cAudioManager::ProcessWeather(int32 id) m_sQueueSample.m_nBankIndex = SFX_BANK_0; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nOffset = 63; - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 7; - m_sQueueSample.m_bReverbFlag = false; + m_sQueueSample.m_bReverbFlag = FALSE; m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); CObject::fDistToNearestTree = 999999.9f; } @@ -8778,11 +8780,11 @@ cAudioManager::ProcessWeather(int32 id) void cAudioManager::ProcessFrontEnd() { - bool stereo; - bool processedPickup; - bool processedMission; - bool staticFreq; - bool center; + bool8 stereo; + bool8 processedPickup; + bool8 processedMission; + bool8 staticFreq; + bool8 center; int16 sample; static uint8 iSound = 0; @@ -8791,11 +8793,11 @@ cAudioManager::ProcessFrontEnd() static uint32 radioDial = SFX_RADIO_DIAL_1; for (uint32 i = 0; i < m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents; i++) { - staticFreq = false; - processedPickup = false; - center = false; - processedMission = false; - stereo = false; + staticFreq = FALSE; + processedPickup = FALSE; + center = FALSE; + processedMission = FALSE; + stereo = FALSE; switch (m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i]) { case SOUND_WEAPON_SNIPER_SHOT_NO_ZOOM: m_sQueueSample.m_nSampleIndex = SFX_ERROR_FIRE_RIFLE; @@ -8807,9 +8809,9 @@ cAudioManager::ProcessFrontEnd() case SOUND_GARAGE_BAD_VEHICLE: case SOUND_GARAGE_BOMB_ALREADY_SET: m_sQueueSample.m_nSampleIndex = SFX_WEAPON_LEFT; - stereo = true; - staticFreq = true; - center = true; + stereo = TRUE; + staticFreq = TRUE; + center = TRUE; break; case SOUND_GARAGE_OPENING: case SOUND_71: //case SOUND_41: @@ -8817,8 +8819,8 @@ cAudioManager::ProcessFrontEnd() case SOUND_GARAGE_VEHICLE_ACCEPTED: case SOUND_EVIDENCE_PICKUP: case SOUND_UNLOAD_GOLD: - stereo = true; - processedPickup = true; + stereo = TRUE; + processedPickup = TRUE; m_sQueueSample.m_nSampleIndex = SFX_MONEY_LEFT; break; case SOUND_GARAGE_BOMB1_SET: @@ -8826,60 +8828,60 @@ cAudioManager::ProcessFrontEnd() case SOUND_GARAGE_BOMB3_SET: case SOUND_PICKUP_WEAPON_BOUGHT: case SOUND_PICKUP_WEAPON: - center = true; - processedPickup = true; + center = TRUE; + processedPickup = TRUE; m_sQueueSample.m_nSampleIndex = SFX_WEAPON_LEFT; - stereo = true; + stereo = TRUE; break; case SOUND_PICKUP_HEALTH: case SOUND_81: //case SOUND_4B: case SOUND_PICKUP_ADRENALINE: case SOUND_PICKUP_ARMOUR: - stereo = true; - processedPickup = true; + stereo = TRUE; + processedPickup = TRUE; m_sQueueSample.m_nSampleIndex = SFX_MONEY_LEFT; break; case SOUND_80: - stereo = true; - processedPickup = true; + stereo = TRUE; + processedPickup = TRUE; m_sQueueSample.m_nSampleIndex = SFX_WEAPON_LEFT; - center = true; - staticFreq = true; + center = TRUE; + staticFreq = TRUE; break; case SOUND_PICKUP_BONUS: case SOUND_FRONTEND_MENU_STARTING: case SOUND_HUD: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_INFO_LEFT; - center = true; + center = TRUE; break; case SOUND_PICKUP_MONEY: - stereo = true; - processedPickup = true; + stereo = TRUE; + processedPickup = TRUE; m_sQueueSample.m_nSampleIndex = SFX_MONEY_LEFT; break; case SOUND_PICKUP_HIDDEN_PACKAGE: case SOUND_PICKUP_PACMAN_PILL: case SOUND_PICKUP_PACMAN_PACKAGE: case SOUND_PICKUP_FLOAT_PACKAGE: - center = true; - processedPickup = true; + center = TRUE; + processedPickup = TRUE; m_sQueueSample.m_nSampleIndex = SFX_PART_MISSION_COMPLETE_LEFT; - stereo = true; + stereo = TRUE; break; case SOUND_RACE_START_3: case SOUND_RACE_START_2: case SOUND_RACE_START_1: case SOUND_PART_MISSION_COMPLETE: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_PART_MISSION_COMPLETE_LEFT; - processedMission = true; - center = true; + processedMission = TRUE; + center = TRUE; break; case SOUND_RACE_START_GO: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_GO_LEFT; - center = true; + center = TRUE; break; case SOUND_CLOCK_TICK: m_sQueueSample.m_nSampleIndex = SFX_TIMER; @@ -8905,19 +8907,19 @@ cAudioManager::ProcessFrontEnd() radioDial = m_sQueueSample.m_nSampleIndex; break; case SOUND_FRONTEND_HIGHLIGHT_OPTION: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_FE_HIGHLIGHT_LEFT; break; case SOUND_FRONTEND_ENTER_OR_ADJUST: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_FE_SELECT_LEFT; break; case SOUND_FRONTEND_BACK: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_FE_BACK_LEFT; break; case SOUND_FRONTEND_FAIL: - stereo = true; + stereo = TRUE; m_sQueueSample.m_nSampleIndex = SFX_FE_ERROR_LEFT; break; case SOUND_FRONTEND_AUDIO_TEST: @@ -8956,34 +8958,34 @@ cAudioManager::ProcessFrontEnd() m_sQueueSample.m_nVolume = (CWeather::Wind - 1.0f) * m_sQueueSample.m_nVolume; m_sQueueSample.m_nCounter = iSound++; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_nBankIndex = SFX_BANK_FRONT_END_MENU; m_sQueueSample.m_nReleasingVolumeModificator = 0; - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; - m_sQueueSample.m_fDistance = 1.0f; - if (stereo) + RESET_LOOP_OFFSETS + if (stereo) { m_sQueueSample.m_nOffset = 0; - else { + m_sQueueSample.m_fDistance = 1.0f; + } else { sample = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i]; if (sample == SOUND_BULLETTRACE_1) { m_sQueueSample.m_nOffset = 20; m_sQueueSample.m_nVolume = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_afVolume[i]; m_sQueueSample.m_nReleasingVolumeModificator = 10; m_sQueueSample.m_fDistance = 100.0f; - } - if (sample == SOUND_BULLETTRACE_2) { + } else if (sample == SOUND_BULLETTRACE_2) { m_sQueueSample.m_nOffset = 107; m_sQueueSample.m_nVolume = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_afVolume[i]; m_sQueueSample.m_nReleasingVolumeModificator = 10; m_sQueueSample.m_fDistance = 100.0f; + } else { + m_sQueueSample.m_nOffset = 63; + m_sQueueSample.m_fDistance = 1.0f; } - m_sQueueSample.m_nOffset = 63; } - m_sQueueSample.m_bReverbFlag = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); if (stereo) { ++m_sQueueSample.m_nSampleIndex; @@ -9006,7 +9008,7 @@ cAudioManager::ProcessCrane() { CCrane *crane = (CCrane *)m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_pEntity; float distSquared; - bool distCalculated = false; + bool8 distCalculated = FALSE; static const int intensity = 80; if (crane) { @@ -9021,19 +9023,18 @@ cAudioManager::ProcessCrane() m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_nSampleIndex = SFX_CRANE_MAGNET; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 2; m_sQueueSample.m_nFrequency = 6000; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = 100; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 4.0f; m_sQueueSample.m_fSoundIntensity = intensity; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } if (m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_AudioEvents) { @@ -9041,9 +9042,9 @@ cAudioManager::ProcessCrane() m_sQueueSample.m_nSampleIndex = SFX_COL_CAR_2; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_COL_CAR_2); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = TRUE; AddSampleToRequestedQueue(); } } @@ -9097,14 +9098,13 @@ cAudioManager::ProcessProjectiles() m_sQueueSample.m_nVolume = ComputeVolume(emittingVol, m_sQueueSample.m_fSoundIntensity, m_sQueueSample.m_fDistance); if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = i; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = emittingVol; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -9122,7 +9122,7 @@ cAudioManager::ProcessGarages() uint32 sampleIndex; uint8 j; float distSquared; - bool distCalculated; + bool8 distCalculated; static uint8 iSound = 32; @@ -9133,7 +9133,7 @@ cAudioManager::ProcessGarages() if (entity == nil) continue; m_sQueueSample.m_vecPos = entity->GetPosition(); - distCalculated = false; + distCalculated = FALSE; distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); if (distSquared < SQR(SOUND_INTENSITY)) { state = CGarages::aGarages[i].m_eGarageState; @@ -9153,7 +9153,7 @@ cAudioManager::ProcessGarages() m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex) / 2; m_sQueueSample.m_nFrequency += RandomDisplacement(m_sQueueSample.m_nFrequency / 16); m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_nCounter = iSound++; if (iSound < 32) iSound = 32; @@ -9165,7 +9165,7 @@ cAudioManager::ProcessGarages() m_sQueueSample.m_nCounter = i; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; } } else { m_sQueueSample.m_nSampleIndex = SFX_GARAGE_DOOR_LOOP; @@ -9174,19 +9174,18 @@ cAudioManager::ProcessGarages() m_sQueueSample.m_nCounter = i; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; } m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 3; m_sQueueSample.m_nEmittingVolume = 90; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } break; @@ -9215,16 +9214,15 @@ cAudioManager::ProcessGarages() m_sQueueSample.m_nEmittingVolume = 60; m_sQueueSample.m_fSpeedMultiplier = 0.0f; m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReverbFlag = true; - m_sQueueSample.m_bIs2D = false; - m_sQueueSample.m_bReleasingSoundFlag = true; + m_sQueueSample.m_bReverbFlag = TRUE; + m_sQueueSample.m_bIs2D = FALSE; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; m_sQueueSample.m_nLoopCount = 1; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_nCounter = iSound++; if (iSound < 32) iSound = 32; - m_sQueueSample.m_bRequireReflection = true; + m_sQueueSample.m_bRequireReflection = TRUE; AddSampleToRequestedQueue(); } } @@ -9242,7 +9240,7 @@ cAudioManager::ProcessFireHydrant() const float SOUND_INTENSITY = 35; float distSquared; - bool distCalculated = false; + bool8 distCalculated = FALSE; m_sQueueSample.m_vecPos = ((CEntity *)m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_pEntity)->GetPosition(); distSquared = GetDistanceSquared(m_sQueueSample.m_vecPos); @@ -9256,13 +9254,12 @@ cAudioManager::ProcessFireHydrant() m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_nEmittingVolume = 40; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nLoopCount = 0; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY; - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; m_sQueueSample.m_fSpeedMultiplier = 2.0f; AddSampleToRequestedQueue(); @@ -9277,7 +9274,7 @@ void cAudioManager::ProcessBridge() { float dist; - bool distCalculated = false; + bool8 distCalculated = FALSE; if (CBridge::pLiftRoad) { m_sQueueSample.m_vecPos = CBridge::pLiftRoad->GetPosition(); @@ -9312,19 +9309,18 @@ cAudioManager::ProcessBridgeWarning() m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_nSampleIndex = SFX_BRIDGE_OPEN_WARNING; m_sQueueSample.m_nBankIndex = SAMPLEBANK_EXTRAS; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_BRIDGE_OPEN_WARNING); m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = 100; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = 450.0f; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 8; - m_sQueueSample.m_bReverbFlag = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReverbFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -9339,18 +9335,17 @@ cAudioManager::ProcessBridgeMotor() m_sQueueSample.m_nCounter = 1; m_sQueueSample.m_nSampleIndex = SFX_FISHING_BOAT_IDLE; // todo check sfx name m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = 5500; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = MAX_VOLUME; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(m_sQueueSample.m_nSampleIndex); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex); + SET_LOOP_OFFSETS(m_sQueueSample.m_nSampleIndex) m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = bridgeIntensity; - m_sQueueSample.m_bReleasingSoundFlag = false; + m_sQueueSample.m_bReleasingSoundFlag = FALSE; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bReverbFlag = false; + m_sQueueSample.m_bReverbFlag = FALSE; AddSampleToRequestedQueue(); } } @@ -9374,18 +9369,17 @@ cAudioManager::ProcessBridgeOneShots() if (m_sQueueSample.m_nVolume != 0) { m_sQueueSample.m_nCounter = 2; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = false; + m_sQueueSample.m_bIs2D = FALSE; m_sQueueSample.m_nReleasingVolumeModificator = 1; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex); m_sQueueSample.m_nLoopCount = 1; m_sQueueSample.m_nEmittingVolume = MAX_VOLUME; - m_sQueueSample.m_nLoopStart = 0; - m_sQueueSample.m_nLoopEnd = -1; + RESET_LOOP_OFFSETS m_sQueueSample.m_fSpeedMultiplier = 2.0f; m_sQueueSample.m_fSoundIntensity = bridgeIntensity; - m_sQueueSample.m_bReleasingSoundFlag = true; - m_sQueueSample.m_bReverbFlag = false; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bReleasingSoundFlag = TRUE; + m_sQueueSample.m_bReverbFlag = FALSE; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } } @@ -9394,7 +9388,7 @@ cAudioManager::ProcessBridgeOneShots() #endif #pragma region MISSION_AUDIO -bool g_bMissionAudioLoadFailed[MISSION_AUDIO_SLOTS]; +bool8 g_bMissionAudioLoadFailed[MISSION_AUDIO_SLOTS]; struct MissionAudioData { const char *m_pName; @@ -9789,10 +9783,10 @@ FindMissionAudioSfx(const char *name) return NO_SAMPLE; } -bool +bool8 cAudioManager::MissionScriptAudioUsesPoliceChannel(int32 soundMission) const { - return false; + return FALSE; } void @@ -9804,12 +9798,12 @@ cAudioManager::PreloadMissionAudio(uint8 slot, Const char *name) m_sMissionAudio.m_nSampleIndex[slot] = missionAudioSfx; m_sMissionAudio.m_nLoadingStatus[slot] = LOADING_STATUS_NOT_LOADED; m_sMissionAudio.m_nPlayStatus[slot] = PLAY_STATUS_STOPPED; - m_sMissionAudio.m_bIsPlaying[slot] = false; + m_sMissionAudio.m_bIsPlaying[slot] = FALSE; m_sMissionAudio.m_nMissionAudioCounter[slot] = m_nTimeSpent * SampleManager.GetStreamedFileLength(missionAudioSfx) / 1000; m_sMissionAudio.m_nMissionAudioCounter[slot] *= 4; - m_sMissionAudio.m_bIsPlayed[slot] = false; - m_sMissionAudio.m_bPredefinedProperties[slot] = true; - g_bMissionAudioLoadFailed[slot] = false; + m_sMissionAudio.m_bIsPlayed[slot] = FALSE; + m_sMissionAudio.m_bPredefinedProperties[slot] = TRUE; + g_bMissionAudioLoadFailed[slot] = FALSE; } } } @@ -9827,7 +9821,7 @@ void cAudioManager::SetMissionAudioLocation(uint8 slot, float x, float y, float z) { if (m_bIsInitialised && slot < MISSION_AUDIO_SLOTS) { - m_sMissionAudio.m_bPredefinedProperties[slot] = false; + m_sMissionAudio.m_bPredefinedProperties[slot] = FALSE; m_sMissionAudio.m_vecPos[slot] = CVector(x, y, z); } } @@ -9837,25 +9831,25 @@ cAudioManager::PlayLoadedMissionAudio(uint8 slot) { if (m_bIsInitialised && slot < MISSION_AUDIO_SLOTS && m_sMissionAudio.m_nSampleIndex[slot] != NO_SAMPLE && m_sMissionAudio.m_nLoadingStatus[slot] == LOADING_STATUS_LOADED && m_sMissionAudio.m_nPlayStatus[slot] == PLAY_STATUS_STOPPED) - m_sMissionAudio.m_bIsPlayed[slot] = true; + m_sMissionAudio.m_bIsPlayed[slot] = TRUE; } -bool +bool8 cAudioManager::ShouldDuckMissionAudio(uint8 slot) const { if (IsMissionAudioSamplePlaying(slot)) return m_sMissionAudio.m_nSampleIndex[slot] != STREAMED_SOUND_MISSION_ROK2_01; - return false; + return FALSE; } -bool +bool8 cAudioManager::IsMissionAudioSamplePlaying(uint8 slot) const { if (m_bIsInitialised) { if (slot < MISSION_AUDIO_SLOTS) return m_sMissionAudio.m_nPlayStatus[slot] == PLAY_STATUS_PLAYING; else - return true; + return TRUE; } else { static int32 cPretendFrame[MISSION_AUDIO_SLOTS] = { 1, 1 }; @@ -9863,14 +9857,14 @@ cAudioManager::IsMissionAudioSamplePlaying(uint8 slot) const } } -bool +bool8 cAudioManager::IsMissionAudioSampleFinished(uint8 slot) { if (m_bIsInitialised) { if (slot < MISSION_AUDIO_SLOTS) return m_sMissionAudio.m_nPlayStatus[slot] == PLAY_STATUS_FINISHED; else - return true; + return TRUE; } static int32 cPretendFrame[MISSION_AUDIO_SLOTS] = { 1, 1 }; @@ -9885,11 +9879,11 @@ cAudioManager::ClearMissionAudio(uint8 slot) m_sMissionAudio.m_nSampleIndex[slot] = NO_SAMPLE; m_sMissionAudio.m_nLoadingStatus[slot] = LOADING_STATUS_NOT_LOADED; m_sMissionAudio.m_nPlayStatus[slot] = PLAY_STATUS_STOPPED; - m_sMissionAudio.m_bIsPlaying[slot] = false; - m_sMissionAudio.m_bIsPlayed[slot] = false; - m_sMissionAudio.m_bPredefinedProperties[slot] = true; + m_sMissionAudio.m_bIsPlaying[slot] = FALSE; + m_sMissionAudio.m_bIsPlayed[slot] = FALSE; + m_sMissionAudio.m_bPredefinedProperties[slot] = TRUE; m_sMissionAudio.m_nMissionAudioCounter[slot] = 0; - m_sMissionAudio.m_bIsMobile[slot] = false; + m_sMissionAudio.m_bIsMobile[slot] = FALSE; SampleManager.StopStreamedFile(slot + 1); } } @@ -9941,14 +9935,14 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) SetMissionScriptPoliceAudio(m_sMissionAudio.m_nSampleIndex[slot]); } else { if (m_nUserPause) - SampleManager.PauseStream(1, slot + 1); + SampleManager.PauseStream(TRUE, slot + 1); if (m_sMissionAudio.m_bPredefinedProperties[slot]) { if (m_sMissionAudio.m_nSampleIndex[slot] == STREAMED_SOUND_MISSION_CAMERAL) - SampleManager.SetStreamedVolumeAndPan(80, 0, 1, slot + 1); + SampleManager.SetStreamedVolumeAndPan(80, 0, TRUE, slot + 1); else if (m_sMissionAudio.m_nSampleIndex[slot] == STREAMED_SOUND_MISSION_CAMERAR) - SampleManager.SetStreamedVolumeAndPan(80, 127, 1, slot + 1); + SampleManager.SetStreamedVolumeAndPan(80, 127, TRUE, slot + 1); else - SampleManager.SetStreamedVolumeAndPan(80, 63, 1, slot + 1); + SampleManager.SetStreamedVolumeAndPan(80, 63, TRUE, slot + 1); } else { distSquared = GetDistanceSquared(m_sMissionAudio.m_vecPos[slot]); if (distSquared >= SQR(80.0f)) { @@ -9963,14 +9957,14 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) TranslateEntity(&m_sMissionAudio.m_vecPos[slot], &vec); pan = ComputePan(80.f, &vec); } - SampleManager.SetStreamedVolumeAndPan(emittingVol, pan, 1, slot + 1); + SampleManager.SetStreamedVolumeAndPan(emittingVol, pan, TRUE, slot + 1); } SampleManager.StartPreloadedStreamedFile(slot + 1); } m_sMissionAudio.m_nPlayStatus[slot] = PLAY_STATUS_PLAYING; nCheckPlayingDelay[slot] = 30; if (m_sMissionAudio.m_nSampleIndex[slot] >= STREAMED_SOUND_MISSION_MOB_01A && m_sMissionAudio.m_nSampleIndex[slot] <= STREAMED_SOUND_MISSION_MOB_99A) - m_sMissionAudio.m_bIsMobile[slot] = true; + m_sMissionAudio.m_bIsMobile[slot] = TRUE; break; case PLAY_STATUS_PLAYING: if (m_bTimerJustReset) { @@ -9982,8 +9976,10 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) if (!m_nUserPause) { if (nCheckPlayingDelay[slot]) { --nCheckPlayingDelay[slot]; - } else if (GetMissionScriptPoliceAudioPlayingStatus() == PLAY_STATUS_FINISHED || m_sMissionAudio.m_nMissionAudioCounter[slot]-- == 0) { + } else if ((g_bMissionAudioLoadFailed[slot] && m_sMissionAudio.m_nMissionAudioCounter[slot]-- == 0) || GetMissionScriptPoliceAudioPlayingStatus() == PLAY_STATUS_FINISHED) { m_sMissionAudio.m_nPlayStatus[slot] = PLAY_STATUS_FINISHED; + if (m_sMissionAudio.m_nSampleIndex[slot] >= STREAMED_SOUND_MISSION_MOB_01A && m_sMissionAudio.m_nSampleIndex[slot] <= STREAMED_SOUND_MISSION_MOB_99A) + m_sMissionAudio.m_bIsMobile[slot] = FALSE; m_sMissionAudio.m_nSampleIndex[slot] = NO_SAMPLE; SampleManager.StopStreamedFile(slot + 1); m_sMissionAudio.m_nMissionAudioCounter[slot] = 0; @@ -9992,10 +9988,10 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) } else if (m_sMissionAudio.m_bIsPlaying[slot]) { if (SampleManager.IsStreamPlaying(slot + 1) || m_nUserPause || m_nPreviousUserPause) { if (m_nUserPause) - SampleManager.PauseStream(1, slot + 1); + SampleManager.PauseStream(TRUE, slot + 1); else { - SampleManager.PauseStream(0, slot + 1); + SampleManager.PauseStream(FALSE, slot + 1); if (!m_sMissionAudio.m_bPredefinedProperties[slot]) { distSquared = GetDistanceSquared(m_sMissionAudio.m_vecPos[slot]); if (distSquared >= SQR(80.0f)) { @@ -10010,7 +10006,7 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) TranslateEntity(&m_sMissionAudio.m_vecPos[slot], &vec); pan = ComputePan(80.f, &vec); } - SampleManager.SetStreamedVolumeAndPan(emittingVol, pan, 1, slot + 1); + SampleManager.SetStreamedVolumeAndPan(emittingVol, pan, TRUE, slot + 1); } } } else if (m_sMissionAudio.m_nSampleIndex[slot] == STREAMED_SOUND_MISSION_ROK2_01) { @@ -10018,7 +10014,7 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) } else { m_sMissionAudio.m_nPlayStatus[slot] = PLAY_STATUS_FINISHED; if (m_sMissionAudio.m_nSampleIndex[slot] >= STREAMED_SOUND_MISSION_MOB_01A && m_sMissionAudio.m_nSampleIndex[slot] <= STREAMED_SOUND_MISSION_MOB_99A) - m_sMissionAudio.m_bIsMobile[slot] = false; + m_sMissionAudio.m_bIsMobile[slot] = FALSE; m_sMissionAudio.m_nSampleIndex[slot] = NO_SAMPLE; SampleManager.StopStreamedFile(slot + 1); m_sMissionAudio.m_nMissionAudioCounter[slot] = 0; @@ -10031,7 +10027,7 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) break; nCheckPlayingDelay[slot] = 0; } - m_sMissionAudio.m_bIsPlaying[slot] = true; + m_sMissionAudio.m_bIsPlaying[slot] = TRUE; } break; default: @@ -10041,7 +10037,7 @@ cAudioManager::ProcessMissionAudioSlot(uint8 slot) case LOADING_STATUS_FAILED: if (++nFramesUntilFailedLoad[slot] >= 120) { nFramesForPretendPlaying[slot] = 0; - g_bMissionAudioLoadFailed[slot] = true; + g_bMissionAudioLoadFailed[slot] = TRUE; nFramesUntilFailedLoad[slot] = 0; m_sMissionAudio.m_nLoadingStatus[slot] = LOADING_STATUS_LOADED; } diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp index 2304b4c4..131704dc 100644 --- a/src/audio/AudioManager.cpp +++ b/src/audio/AudioManager.cpp @@ -14,21 +14,17 @@ cAudioManager AudioManager; -const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples); -const int policeChannel = channels + 1; -const int allChannels = channels + 2; - #define SPEED_OF_SOUND 343.f #define TIME_SPENT 40 cAudioManager::cAudioManager() { - m_bIsInitialised = false; - m_bReverb = true; + m_bIsInitialised = FALSE; + m_bReverb = TRUE; field_6 = 0; m_fSpeedOfSound = SPEED_OF_SOUND / TIME_SPENT; m_nTimeSpent = TIME_SPENT; - m_nActiveSamples = NUM_SOUNDS_SAMPLES_SLOTS; + m_nActiveSamples = NUM_CHANNELS_GENERIC; m_nActiveSampleQueue = 1; ClearRequestedQueue(); m_nActiveSampleQueue = 0; @@ -36,16 +32,16 @@ cAudioManager::cAudioManager() ClearActiveSamples(); GenerateIntegerRandomNumberTable(); field_4 = 0; - m_bDynamicAcousticModelingStatus = true; + m_bDynamicAcousticModelingStatus = TRUE; for (int i = 0; i < NUM_AUDIOENTITIES; i++) { - m_asAudioEntities[i].m_bIsUsed = false; + m_asAudioEntities[i].m_bIsUsed = FALSE; m_anAudioEntityIndices[i] = NUM_AUDIOENTITIES; } m_nAudioEntitiesTotal = 0; m_FrameCounter = 0; - m_bFifthFrameFlag = false; - m_bTimerJustReset = false; + m_bFifthFrameFlag = FALSE; + m_bTimerJustReset = FALSE; m_nTimer = 0; } @@ -83,7 +79,7 @@ cAudioManager::Terminate() MusicManager.Terminate(); for (uint32 i = 0; i < NUM_AUDIOENTITIES; i++) { - m_asAudioEntities[i].m_bIsUsed = false; + m_asAudioEntities[i].m_bIsUsed = FALSE; m_anAudioEntityIndices[i] = ARRAY_SIZE(m_anAudioEntityIndices); } @@ -98,7 +94,7 @@ cAudioManager::Terminate() SampleManager.Terminate(); - m_bIsInitialised = false; + m_bIsInitialised = FALSE; PostTerminateGameSpecificShutdown(); } } @@ -110,7 +106,7 @@ cAudioManager::Service() if (m_bTimerJustReset) { ResetAudioLogicTimers(m_nTimer); MusicManager.ResetTimers(m_nTimer); - m_bTimerJustReset = false; + m_bTimerJustReset = FALSE; } if (m_bIsInitialised) { m_nPreviousUserPause = m_nUserPause; @@ -132,8 +128,8 @@ cAudioManager::CreateEntity(eAudioType type, void *entity) return AEHANDLE_ERROR_BADAUDIOTYPE; 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 = false; + m_asAudioEntities[i].m_bIsUsed = TRUE; + m_asAudioEntities[i].m_bStatus = FALSE; m_asAudioEntities[i].m_nType = type; m_asAudioEntities[i].m_pEntity = entity; m_asAudioEntities[i].m_awAudioEvent[0] = SOUND_NO_SOUND; @@ -152,7 +148,7 @@ void cAudioManager::DestroyEntity(int32 id) { if (m_bIsInitialised && id >= 0 && id < NUM_AUDIOENTITIES && m_asAudioEntities[id].m_bIsUsed) { - m_asAudioEntities[id].m_bIsUsed = false; + m_asAudioEntities[id].m_bIsUsed = FALSE; for (int32 i = 0; i < m_nAudioEntitiesTotal; ++i) { if (id == m_anAudioEntityIndices[i]) { if (i < NUM_AUDIOENTITIES - 1) @@ -165,7 +161,7 @@ cAudioManager::DestroyEntity(int32 id) } void -cAudioManager::SetEntityStatus(int32 id, uint8 status) +cAudioManager::SetEntityStatus(int32 id, bool8 status) { if (m_bIsInitialised && id >= 0 && id < NUM_AUDIOENTITIES && m_asAudioEntities[id].m_bIsUsed) m_asAudioEntities[id].m_bStatus = status; @@ -193,7 +189,7 @@ cAudioManager::PlayOneShot(int32 index, uint16 sound, float vol) } } else { int32 i = 0; - while (true) { + while (TRUE) { if (i >= entity.m_AudioEvents) { if (entity.m_AudioEvents < ARRAY_SIZE(entity.m_awAudioEvent)) { entity.m_awAudioEvent[i] = sound; @@ -246,7 +242,7 @@ cAudioManager::SetEffectsFadeVol(uint8 volume) const } void -cAudioManager::SetMonoMode(uint8 mono) +cAudioManager::SetMonoMode(bool8 mono) { SampleManager.SetMonoMode(mono); } @@ -261,7 +257,7 @@ void cAudioManager::ResetTimers(uint32 time) { if (m_bIsInitialised) { - m_bTimerJustReset = true; + m_bTimerJustReset = TRUE; m_nTimer = time; ClearRequestedQueue(); if (m_nActiveSampleQueue) { @@ -276,11 +272,11 @@ cAudioManager::ResetTimers(uint32 time) ClearActiveSamples(); ClearMissionAudio(0); ClearMissionAudio(1); - SampleManager.StopChannel(policeChannel); + SampleManager.StopChannel(CHANNEL_POLICE_RADIO); SampleManager.SetEffectsFadeVolume(0); SampleManager.SetMusicFadeVolume(0); MusicManager.ResetMusicAfterReload(); - m_bIsPlayerShutUp = false; + m_bIsPlayerShutUp = FALSE; #ifdef AUDIO_OAL SampleManager.Service(); #endif @@ -335,7 +331,7 @@ cAudioManager::Get3DProviderName(uint8 id) const if (!m_bIsInitialised) return nil; #ifdef AUDIO_OAL - id = clamp(id, 0, SampleManager.GetNum3DProvidersAvailable() - 1); + 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()) @@ -391,13 +387,13 @@ cAudioManager::SetSpeakerConfig(int32 conf) const SampleManager.SetSpeakerConfig(conf); } -bool +bool8 cAudioManager::IsMP3RadioChannelAvailable() const { if (m_bIsInitialised) return SampleManager.IsMP3RadioChannelAvailable(); - return false; + return FALSE; } void @@ -417,25 +413,25 @@ cAudioManager::ReacquireDigitalHandle() const } void -cAudioManager::SetDynamicAcousticModelingStatus(uint8 status) +cAudioManager::SetDynamicAcousticModelingStatus(bool8 status) { - m_bDynamicAcousticModelingStatus = status!=0; + m_bDynamicAcousticModelingStatus = status; } -bool +bool8 cAudioManager::CheckForAnAudioFileOnCD() const { return SampleManager.CheckForAnAudioFileOnCD(); } -uint8 +char cAudioManager::GetCDAudioDriveLetter() const { if(m_bIsInitialised) return SampleManager.GetCDAudioDriveLetter(); - return 0; + return '\0'; } -bool +bool8 cAudioManager::IsAudioInitialised() const { return m_bIsInitialised; @@ -444,9 +440,12 @@ cAudioManager::IsAudioInitialised() const void cAudioManager::ServiceSoundEffects() { +#ifdef FIX_BUGS + if(CTimer::GetLogicalFramesPassed() != 0) +#endif m_bFifthFrameFlag = (m_FrameCounter++ % 5) == 0; if (m_nUserPause && !m_nPreviousUserPause) { - for (int32 i = 0; i < allChannels; i++) + for (int32 i = 0; i < NUM_CHANNELS; i++) SampleManager.StopChannel(i); ClearRequestedQueue(); @@ -532,7 +531,7 @@ cAudioManager::ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, if (dist != 0.0f) { float speedOfSource = (dist / m_nTimeSpent) * speedMultiplier; if (m_fSpeedOfSound > Abs(speedOfSource)) { - speedOfSource = clamp2(speedOfSource, 0.0f, 1.5f); + speedOfSource = Clamp2(speedOfSource, 0.0f, 1.5f); newFreq = (oldFreq * m_fSpeedOfSound) / (speedOfSource + m_fSpeedOfSound); } } @@ -545,7 +544,7 @@ cAudioManager::RandomDisplacement(uint32 seed) const { int32 value; - static bool bPos = true; + static bool8 bPos = TRUE; static uint32 Adjustment = 0; if (!seed) @@ -576,7 +575,7 @@ cAudioManager::AddSampleToRequestedQueue() { int32 calculatedVolume; uint8 sampleIndex; - bool bReflections; + bool8 bReflections; if (m_sQueueSample.m_nSampleIndex < TOTAL_AUDIO_SAMPLES) { calculatedVolume = m_sQueueSample.m_nReleasingVolumeModificator * (MAX_VOLUME - m_sQueueSample.m_nVolume); @@ -589,24 +588,24 @@ cAudioManager::AddSampleToRequestedQueue() ++m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; } m_sQueueSample.m_nCalculatedVolume = calculatedVolume; - m_sQueueSample.m_bLoopEnded = false; + m_sQueueSample.m_bLoopEnded = FALSE; if (m_sQueueSample.m_bIs2D || CCullZones::InRoomForAudio()) { - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bRequireReflection = FALSE; m_sQueueSample.m_nLoopsRemaining = 0; } if (m_bDynamicAcousticModelingStatus && m_sQueueSample.m_nLoopCount) { bReflections = m_sQueueSample.m_bRequireReflection; } else { - bReflections = false; + bReflections = FALSE; m_sQueueSample.m_nLoopsRemaining = 0; } - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bRequireReflection = FALSE; if ( m_bReverb && m_sQueueSample.m_bIs2D ) m_sQueueSample.field_4C = 30; if (!m_bDynamicAcousticModelingStatus) - m_sQueueSample.m_bReverbFlag = false; + m_sQueueSample.m_bReverbFlag = FALSE; m_asSamples[m_nActiveSampleQueue][sampleIndex] = m_sQueueSample; @@ -773,7 +772,12 @@ cAudioManager::UpdateReflections() void cAudioManager::AddReleasingSounds() { - bool toProcess[44]; // why not 27? + // in case someone would want to increase it +#ifdef FIX_BUGS + bool8 toProcess[NUM_CHANNELS_GENERIC]; +#else + bool8 toProcess[44]; +#endif int8 queue = m_nActiveSampleQueue == 0 ? 1 : 0; @@ -782,19 +786,19 @@ cAudioManager::AddReleasingSounds() if (sample.m_bLoopEnded) continue; - toProcess[i] = false; + toProcess[i] = FALSE; for (int32 j = 0; j < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; j++) { if (sample.m_nEntityIndex == m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][j]].m_nEntityIndex && sample.m_nCounter == m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][j]].m_nCounter) { - toProcess[i] = true; + toProcess[i] = TRUE; break; } } if (!toProcess[i]) { if (sample.m_nCounter <= 255 || !sample.m_nLoopsRemaining) { - if (!sample.m_nReleasingVolumeDivider) + if (sample.m_nReleasingVolumeDivider == 0) continue; - if (!sample.m_nLoopCount) { + if (sample.m_nLoopCount == 0) { if (sample.m_nVolumeChange == -1) { sample.m_nVolumeChange = sample.m_nVolume / sample.m_nReleasingVolumeDivider; if (sample.m_nVolumeChange <= 0) @@ -806,12 +810,15 @@ cAudioManager::AddReleasingSounds() } sample.m_nVolume -= sample.m_nVolumeChange; } +#ifdef FIX_BUGS + if(CTimer::GetLogicalFramesPassed() != 0) +#endif --sample.m_nReleasingVolumeDivider; if (m_bFifthFrameFlag) { if (sample.m_nReleasingVolumeModificator < 20) ++sample.m_nReleasingVolumeModificator; } - sample.m_bReleasingSoundFlag = false; + sample.m_bReleasingSoundFlag = FALSE; } memcpy(&m_sQueueSample, &sample, sizeof(tSound)); AddSampleToRequestedQueue(); @@ -829,12 +836,12 @@ cAudioManager::ProcessActiveQueues() uint8 vol; uint8 offset; float x; - bool flag; - bool missionState; + bool8 flag; + bool8 missionState; for (int32 i = 0; i < m_nActiveSamples; i++) { - m_asSamples[m_nActiveSampleQueue][i].m_bIsProcessed = false; - m_asActiveSamples[i].m_bIsProcessed = false; + m_asSamples[m_nActiveSampleQueue][i].m_bIsProcessed = FALSE; + m_asActiveSamples[i].m_bIsProcessed = FALSE; } for (int32 i = 0; i < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; i++) { tSound& sample = m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]]; @@ -847,19 +854,19 @@ cAudioManager::ProcessActiveQueues() if (m_FrameCounter & 1) { if (!(j & 1)) { - flag = false; + flag = FALSE; } else { - flag = true; + flag = TRUE; } } else if (j & 1) { - flag = false; + flag = FALSE; } else { - flag = true; + flag = TRUE; } if (flag && !SampleManager.GetChannelUsedFlag(j)) { - sample.m_bLoopEnded = true; - m_asActiveSamples[j].m_bLoopEnded = true; + sample.m_bLoopEnded = TRUE; + m_asActiveSamples[j].m_bLoopEnded = TRUE; m_asActiveSamples[j].m_nSampleIndex = NO_SAMPLE; m_asActiveSamples[j].m_nEntityIndex = AEHANDLE_NONE; continue; @@ -867,8 +874,8 @@ cAudioManager::ProcessActiveQueues() if (!sample.m_nReleasingVolumeDivider) sample.m_nReleasingVolumeDivider = 1; } - sample.m_bIsProcessed = true; - m_asActiveSamples[j].m_bIsProcessed = true; + sample.m_bIsProcessed = TRUE; + m_asActiveSamples[j].m_bIsProcessed = TRUE; sample.m_nVolumeChange = -1; if (!sample.m_bReleasingSoundFlag) { if (sample.m_bIs2D) { @@ -888,11 +895,11 @@ cAudioManager::ProcessActiveQueues() sample.m_fSpeedMultiplier); if (sample.m_nFrequency != m_asActiveSamples[j].m_nFrequency) { - m_asActiveSamples[j].m_nFrequency = clamp2((int32)sample.m_nFrequency, (int32)m_asActiveSamples[j].m_nFrequency, 6000); + m_asActiveSamples[j].m_nFrequency = Clamp2((int32)sample.m_nFrequency, (int32)m_asActiveSamples[j].m_nFrequency, 6000); SampleManager.SetChannelFrequency(j, m_asActiveSamples[j].m_nFrequency); } if (sample.m_nEmittingVolume != m_asActiveSamples[j].m_nEmittingVolume) { - vol = clamp2((int8)sample.m_nEmittingVolume, (int8)m_asActiveSamples[j].m_nEmittingVolume, 10); + vol = Clamp2((int8)sample.m_nEmittingVolume, (int8)m_asActiveSamples[j].m_nEmittingVolume, 10); if (field_4) { emittingVol = 2 * Min(63, vol); @@ -900,10 +907,10 @@ cAudioManager::ProcessActiveQueues() emittingVol = vol; } - missionState = false; + missionState = FALSE; for (int32 k = 0; k < ARRAY_SIZE(m_sMissionAudio.m_bIsMobile); k++) { if (m_sMissionAudio.m_bIsMobile[k]) { - missionState = true; + missionState = TRUE; break; } } @@ -924,8 +931,8 @@ cAudioManager::ProcessActiveQueues() SampleManager.SetChannelReverbFlag(j, sample.m_bReverbFlag); break; //continue for i } - sample.m_bIsProcessed = false; - m_asActiveSamples[j].m_bIsProcessed = false; + sample.m_bIsProcessed = FALSE; + m_asActiveSamples[j].m_bIsProcessed = FALSE; //continue for j } } @@ -966,10 +973,10 @@ cAudioManager::ProcessActiveQueues() } if (SampleManager.InitialiseChannel(k, m_asActiveSamples[k].m_nSampleIndex, m_asActiveSamples[k].m_nBankIndex)) { SampleManager.SetChannelFrequency(k, m_asActiveSamples[k].m_nFrequency); - bool isMobile = false; + bool8 isMobile = FALSE; for (int32 l = 0; l < ARRAY_SIZE(m_sMissionAudio.m_bIsMobile); l++) { if (m_sMissionAudio.m_bIsMobile[l]) { - isMobile = true; + isMobile = TRUE; break; } } @@ -1000,8 +1007,8 @@ cAudioManager::ProcessActiveQueues() SampleManager.SetChannel3DDistances(k, m_asActiveSamples[k].m_fSoundIntensity, 0.25f * m_asActiveSamples[k].m_fSoundIntensity); SampleManager.StartChannel(k); } - m_asActiveSamples[k].m_bIsProcessed = true; - sample.m_bIsProcessed = true; + m_asActiveSamples[k].m_bIsProcessed = TRUE; + sample.m_bIsProcessed = TRUE; sample.m_nVolumeChange = -1; break; } @@ -1029,28 +1036,30 @@ cAudioManager::ClearActiveSamples() m_asActiveSamples[i].m_nCounter = 0; m_asActiveSamples[i].m_nSampleIndex = NO_SAMPLE; m_asActiveSamples[i].m_nBankIndex = INVALID_SFX_BANK; - m_asActiveSamples[i].m_bIs2D = false; + m_asActiveSamples[i].m_bIs2D = FALSE; m_asActiveSamples[i].m_nReleasingVolumeModificator = 5; m_asActiveSamples[i].m_nFrequency = 0; m_asActiveSamples[i].m_nVolume = 0; m_asActiveSamples[i].m_nEmittingVolume = 0; m_asActiveSamples[i].m_fDistance = 0.0f; - m_asActiveSamples[i].m_bIsProcessed = false; - m_asActiveSamples[i].m_bLoopEnded = false; + m_asActiveSamples[i].m_bIsProcessed = FALSE; + m_asActiveSamples[i].m_bLoopEnded = FALSE; m_asActiveSamples[i].m_nLoopCount = 1; +#ifndef GTA_PS2 m_asActiveSamples[i].m_nLoopStart = 0; m_asActiveSamples[i].m_nLoopEnd = -1; +#endif m_asActiveSamples[i].m_fSpeedMultiplier = 0.0f; m_asActiveSamples[i].m_fSoundIntensity = 200.0f; m_asActiveSamples[i].m_nOffset = 63; - m_asActiveSamples[i].m_bReleasingSoundFlag = false; + m_asActiveSamples[i].m_bReleasingSoundFlag = FALSE; m_asActiveSamples[i].m_nCalculatedVolume = 0; m_asActiveSamples[i].m_nReleasingVolumeDivider = 0; m_asActiveSamples[i].m_nVolumeChange = -1; m_asActiveSamples[i].m_vecPos = CVector(0.0f, 0.0f, 0.0f); - m_asActiveSamples[i].m_bReverbFlag = false; + m_asActiveSamples[i].m_bReverbFlag = FALSE; m_asActiveSamples[i].m_nLoopsRemaining = 0; - m_asActiveSamples[i].m_bRequireReflection = false; + m_asActiveSamples[i].m_bRequireReflection = FALSE; } } @@ -1067,7 +1076,7 @@ void cAudioManager::AdjustSamplesVolume() { for (int i = 0; i < m_SampleRequestQueuesStatus[m_nActiveSampleQueue]; i++) { - tSound *pSample = &m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i] + 1]; + tSound *pSample = &m_asSamples[m_nActiveSampleQueue][m_abSampleQueueIndexTable[m_nActiveSampleQueue][i]]; if (!pSample->m_bIs2D) pSample->m_nEmittingVolume = ComputeEmittingVolume(pSample->m_nEmittingVolume, pSample->m_fSoundIntensity, pSample->m_fDistance); diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h index 14eacda5..bba4b0d7 100644 --- a/src/audio/AudioManager.h +++ b/src/audio/AudioManager.h @@ -2,7 +2,7 @@ #include "audio_enums.h" #include "AudioCollision.h" -#include "PoliceRadio.h" +#include "PolRadio.h" #include "VehicleModelInfo.h" #include "Vehicle.h" @@ -13,27 +13,29 @@ public: int32 m_nCounter; int32 m_nSampleIndex; uint8 m_nBankIndex; - bool m_bIs2D; + bool8 m_bIs2D; int32 m_nReleasingVolumeModificator; uint32 m_nFrequency; uint8 m_nVolume; float m_fDistance; int32 m_nLoopCount; +#ifndef GTA_PS2 int32 m_nLoopStart; int32 m_nLoopEnd; +#endif uint8 m_nEmittingVolume; float m_fSpeedMultiplier; float m_fSoundIntensity; - bool m_bReleasingSoundFlag; + bool8 m_bReleasingSoundFlag; CVector m_vecPos; - bool m_bReverbFlag; + bool8 m_bReverbFlag; uint8 m_nLoopsRemaining; - bool m_bRequireReflection; // Used for oneshots + bool8 m_bRequireReflection; // Used for oneshots uint8 m_nOffset; uint8 field_4C; int32 m_nReleasingVolumeDivider; - bool m_bIsProcessed; - bool m_bLoopEnded; + bool8 m_bIsProcessed; + bool8 m_bLoopEnded; int32 m_nCalculatedVolume; int8 m_nVolumeChange; }; @@ -48,7 +50,7 @@ class tAudioEntity public: eAudioType m_nType; void *m_pEntity; - bool m_bIsUsed; + bool8 m_bIsUsed; uint8 m_bStatus; int16 m_awAudioEvent[NUM_AUDIOENTITY_EVENTS]; float m_afVolume[NUM_AUDIOENTITY_EVENTS]; @@ -78,7 +80,7 @@ public: uint8 m_nCommentsInBank[NUM_PED_COMMENTS_BANKS]; uint8 m_nActiveBank; #ifdef GTA_PC - bool m_bDelay; + bool8 m_bDelay; uint32 m_nDelayTimer; #endif @@ -94,8 +96,8 @@ public: m_nCommentsInBank[i] = 0; m_nActiveBank = 0; } - void Add(tPedComment *com); // done - void Process(); // done + void Add(tPedComment *com); + void Process(); }; VALIDATE_SIZE(cPedComments, 0x490); @@ -110,14 +112,14 @@ class cMissionAudio { public: CVector m_vecPos[MISSION_AUDIO_SLOTS]; - bool m_bPredefinedProperties[MISSION_AUDIO_SLOTS]; + bool8 m_bPredefinedProperties[MISSION_AUDIO_SLOTS]; int32 m_nSampleIndex[MISSION_AUDIO_SLOTS]; uint8 m_nLoadingStatus[MISSION_AUDIO_SLOTS]; uint8 m_nPlayStatus[MISSION_AUDIO_SLOTS]; - bool m_bIsPlaying[MISSION_AUDIO_SLOTS]; + bool8 m_bIsPlaying[MISSION_AUDIO_SLOTS]; int32 m_nMissionAudioCounter[MISSION_AUDIO_SLOTS]; - bool m_bIsPlayed[MISSION_AUDIO_SLOTS]; - bool m_bIsMobile[MISSION_AUDIO_SLOTS]; + bool8 m_bIsPlayed[MISSION_AUDIO_SLOTS]; + bool8 m_bIsMobile[MISSION_AUDIO_SLOTS]; }; VALIDATE_SIZE(cMissionAudio, 0x38); @@ -141,7 +143,7 @@ class CPed; class cPedParams { public: - bool m_bDistanceCalculated; + bool8 m_bDistanceCalculated; float m_fDistance; CPed *m_pPed; @@ -157,7 +159,7 @@ class cVehicleParams { public: int32 m_VehicleType; - bool m_bDistanceCalculated; + bool8 m_bDistanceCalculated; float m_fDistance; CVehicle *m_pVehicle; cTransmission *m_pTransmission; @@ -193,22 +195,22 @@ enum { class cAudioManager { public: - bool m_bIsInitialised; + bool8 m_bIsInitialised; uint8 m_bReverb; // unused - bool m_bFifthFrameFlag; + bool8 m_bFifthFrameFlag; uint8 m_nActiveSamples; uint8 field_4; // unused - bool m_bDynamicAcousticModelingStatus; + bool8 m_bDynamicAcousticModelingStatus; int8 field_6; float m_fSpeedOfSound; - bool m_bTimerJustReset; + bool8 m_bTimerJustReset; int32 m_nTimer; tSound m_sQueueSample; uint8 m_nActiveSampleQueue; - tSound m_asSamples[NUM_SOUNDS_SAMPLES_BANKS][NUM_SOUNDS_SAMPLES_SLOTS]; - uint8 m_abSampleQueueIndexTable[NUM_SOUNDS_SAMPLES_BANKS][NUM_SOUNDS_SAMPLES_SLOTS]; + tSound m_asSamples[NUM_SOUNDS_SAMPLES_BANKS][NUM_CHANNELS_GENERIC]; + uint8 m_abSampleQueueIndexTable[NUM_SOUNDS_SAMPLES_BANKS][NUM_CHANNELS_GENERIC]; uint8 m_SampleRequestQueuesStatus[NUM_SOUNDS_SAMPLES_BANKS]; - tSound m_asActiveSamples[NUM_SOUNDS_SAMPLES_SLOTS]; + tSound m_asActiveSamples[NUM_CHANNELS_GENERIC]; tAudioEntity m_asAudioEntities[NUM_AUDIOENTITIES]; int32 m_anAudioEntityIndices[NUM_AUDIOENTITIES]; int32 m_nAudioEntitiesTotal; @@ -217,11 +219,11 @@ public: cAudioScriptObjectManager m_sAudioScriptObjectManager; // miami - uint8 m_bIsPlayerShutUp; + bool8 m_bIsPlayerShutUp; uint8 m_nPlayerMood; uint32 m_nPlayerMoodTimer; uint8 field_rest[4]; - bool m_bGenericSfx; + bool8 m_bGenericSfx; cPedComments m_sPedComments; int32 m_nFireAudioEntity; @@ -249,34 +251,34 @@ public: ~cAudioManager(); // getters - uint32 GetFrameCounter() const { return m_FrameCounter; } // done - float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; } // done + uint32 GetFrameCounter() const { return m_FrameCounter; } + float GetReflectionsDistance(int32 idx) const { return m_afReflectionsDistances[idx]; } int32 GetRandomNumber(int32 idx) const { return m_anRandomTable[idx]; } int32 GetRandomNumberInRange(int32 idx, int32 low, int32 high) const { return (m_anRandomTable[idx] % (high - low + 1)) + low; } - bool IsMissionAudioSamplePlaying(uint8 slot) const; // { return m_sMissionAudio.m_nPlayStatus == 1; } - bool ShouldDuckMissionAudio(uint8 slot) const; + bool8 IsMissionAudioSamplePlaying(uint8 slot) const; // { return m_sMissionAudio.m_nPlayStatus == 1; } + bool8 ShouldDuckMissionAudio(uint8 slot) const; // "Should" be in alphabetic order, except "getXTalkSfx" - void AddDetailsToRequestedOrderList(uint8 sample); // done (inlined in vc) - void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, uint8 counter, bool notLooping); // done - void AddReflectionsToRequestedQueue(); // done - void AddReleasingSounds(); // done - void AddSampleToRequestedQueue(); // done - void AgeCrimes(); // done (inlined in vc) + void AddDetailsToRequestedOrderList(uint8 sample); // inlined in vc + void AddPlayerCarSample(uint8 emittingVolume, int32 freq, uint32 sample, uint8 bank, uint8 counter, bool8 notLooping); + void AddReflectionsToRequestedQueue(); + void AddReleasingSounds(); + void AddSampleToRequestedQueue(); + void AgeCrimes(); // inlined in vc - void CalculateDistance(bool &condition, float dist); // done - bool CheckForAnAudioFileOnCD() const; // done - void ClearActiveSamples(); // done - void ClearMissionAudio(uint8 slot); // done (inlined in vc) - void ClearRequestedQueue(); // done (inlined in vc) - uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier) const; // done - int32 ComputePan(float, CVector *); // done - uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const; // done - int32 CreateEntity(eAudioType type, void *entity); // done + void CalculateDistance(bool8 &condition, float dist); + bool8 CheckForAnAudioFileOnCD() const; + void ClearActiveSamples(); + void ClearMissionAudio(uint8 slot); // inlined in vc + void ClearRequestedQueue(); // inlined in vc + uint32 ComputeDopplerEffectedFrequency(uint32 oldFreq, float position1, float position2, float speedMultiplier) const; + int32 ComputePan(float, CVector *); + uint8 ComputeVolume(uint8 emittingVolume, float soundIntensity, float distance) const; + int32 CreateEntity(eAudioType type, void *entity); - void DestroyAllGameCreatedEntities(); // done - void DestroyEntity(int32 id); // done (inlined in vc) - void DoPoliceRadioCrackle(); // done + void DestroyAllGameCreatedEntities(); + void DestroyEntity(int32 id); // inlined in vc + void DoPoliceRadioCrackle(); // functions returning talk sfx, // order from GetPedCommentSfx @@ -293,8 +295,8 @@ public: uint32 GetHMYSTTalkSfx(CPed *ped, int16 sound); uint32 GetHMOSTTalkSfx(CPed *ped, int16 sound); uint32 GetHFYRITalkSfx(CPed *ped, int16 sound); - uint32 GetHFORITalkSfx(CPed *ped, int16 sound); - uint32 GetHMYRITalkSfx(CPed *ped, int16 sound); + uint32 GetHFORITalkSfx(CPed *ped, int16 sound); + uint32 GetHMYRITalkSfx(CPed *ped, int16 sound); uint32 GetHMORITalkSfx(CPed *ped, int16 sound); uint32 GetHFYBETalkSfx(CPed *ped, int16 sound); uint32 GetHFOBETalkSfx(CPed *ped, int16 sound); @@ -377,174 +379,191 @@ public: uint32 GetGenericFemaleTalkSfx(CPed *ped, int16 sound); // todo names (inlined in vc) // end of functions returning talk sfx - void GenerateIntegerRandomNumberTable(); // done - char *Get3DProviderName(uint8 id) const; // done - uint8 GetCDAudioDriveLetter() const; // done - int8 GetCurrent3DProviderIndex() const; // done - int8 AutoDetect3DProviders() const; // done - float GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const; // not used - float GetCollisionOneShotRatio(int32 a, float b) const; // done - float GetCollisionRatio(float a, float b, float c, float d) const; // done (inlined in vc) - float GetDistanceSquared(const CVector &v) const; // done (inlined in vc) - int32 GetJumboTaxiFreq() const; // done (inlined in vc) - uint8 GetMissionAudioLoadingStatus(uint8 slot) const; // done - int8 GetMissionScriptPoliceAudioPlayingStatus() const; // done - uint8 GetNum3DProvidersAvailable() const; // done - uint32 GetPedCommentSfx(CPed *ped, int32 sound); // done - void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset) const; // done + void GenerateIntegerRandomNumberTable(); + char *Get3DProviderName(uint8 id) const; + char GetCDAudioDriveLetter() const; + int8 GetCurrent3DProviderIndex() const; + int8 AutoDetect3DProviders() const; + float GetCollisionLoopingRatio(uint32 a, uint32 b, float c) const; // not used + float GetCollisionOneShotRatio(int32 a, float b) const; + float GetCollisionRatio(float a, float b, float c, float d) const; // inlined in vc + float GetDistanceSquared(const CVector &v) const; // inlined in vc + int32 GetJumboTaxiFreq() const; // inlined in vc + uint8 GetMissionAudioLoadingStatus(uint8 slot) const; + int8 GetMissionScriptPoliceAudioPlayingStatus() const; + uint8 GetNum3DProvidersAvailable() const; + uint32 GetPedCommentSfx(CPed *ped, int32 sound); + void GetPhrase(uint32 &phrase, uint32 &prevPhrase, uint32 sample, uint32 maxOffset) const; float GetVehicleDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, float gasPedalAudio, cTransmission *transmission, - float velocityChange); // done - float GetVehicleNonDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, cTransmission *transmission, float velocityChange); // done + float velocityChange); + float GetVehicleNonDriveWheelSkidValue(CVehicle *veh, tWheelState wheelState, cTransmission *transmission, float velocityChange); - bool HasAirBrakes(int32 model) const; // done + bool8 HasAirBrakes(int32 model) const; - void Initialise(); // done - void InitialisePoliceRadio(); // done - void InitialisePoliceRadioZones(); // done - void InterrogateAudioEntities(); // done (inlined) - bool IsAudioInitialised() const; // done - bool IsMissionAudioSampleFinished(uint8 slot); // done - bool IsMP3RadioChannelAvailable() const; // done + void Initialise(); + void InitialisePoliceRadio(); + void InitialisePoliceRadioZones(); + void InterrogateAudioEntities(); // inlined + bool8 IsAudioInitialised() const; + bool8 IsMissionAudioSampleFinished(uint8 slot); + bool8 IsMP3RadioChannelAvailable() const; - bool MissionScriptAudioUsesPoliceChannel(int32 soundMission) const; //done + bool8 MissionScriptAudioUsesPoliceChannel(int32 soundMission) const; - void PlayLoadedMissionAudio(uint8 slot); // done - void PlayOneShot(int32 index, uint16 sound, float vol); // done - void PlaySuspectLastSeen(float x, float y, float z); // done - void PlayerJustGotInCar() const; // done - void PlayerJustLeftCar() const; // done - void PostInitialiseGameSpecificSetup(); // done - void PostTerminateGameSpecificShutdown(); // done - void PreInitialiseGameSpecificSetup() const; // done - void PreloadMissionAudio(uint8 slot, Const char *name); // done - void PreTerminateGameSpecificShutdown(); // done + void PlayLoadedMissionAudio(uint8 slot); + void PlayOneShot(int32 index, uint16 sound, float vol); + void PlaySuspectLastSeen(float x, float y, float z); + void PlayerJustGotInCar() const; + void PlayerJustLeftCar() const; + void PostInitialiseGameSpecificSetup(); + void PostTerminateGameSpecificShutdown(); + void PreInitialiseGameSpecificSetup() const; + void PreloadMissionAudio(uint8 slot, Const char *name); + void PreTerminateGameSpecificShutdown(); /// processX - main logic of adding new sounds - void ProcessActiveQueues(); // done - bool ProcessAirBrakes(cVehicleParams& params); // done - bool ProcessBoatEngine(cVehicleParams& params); - bool ProcessBoatMovingOverWater(cVehicleParams& params); //done + void ProcessActiveQueues(); + bool8 ProcessAirBrakes(cVehicleParams& params); + bool8 ProcessBoatEngine(cVehicleParams& params); + bool8 ProcessBoatMovingOverWater(cVehicleParams& params); #ifdef GTA_BRIDGE - void ProcessBridge(); // done(bcs not exists in VC) - void ProcessBridgeMotor(); // done(bcs not exists in VC) - void ProcessBridgeOneShots(); // done(bcs not exists in VC) - void ProcessBridgeWarning(); // done(bcs not exists in VC) + void ProcessBridge(); + void ProcessBridgeMotor(); + void ProcessBridgeOneShots(); + void ProcessBridgeWarning(); #endif - bool ProcessCarBombTick(cVehicleParams& params); // done - void ProcessCarHeli(cVehicleParams& params); // done - void ProcessCesna(cVehicleParams& params); // done - //void ProcessCrane(); // done(bcs not exists in VC) - bool ProcessEngineDamage(cVehicleParams& params); // done - void ProcessEntity(int32 sound); // done - void ProcessExplosions(int32 explosion); // done - void ProcessFireHydrant(); // done - void ProcessFires(int32 entity); // done - void ProcessFrontEnd(); // done - void ProcessGarages(); // done - void ProcessJumbo(cVehicleParams& params); // done - void ProcessJumboAccel(CPlane *plane); // done - void ProcessJumboDecel(CPlane *plane); // done - void ProcessJumboFlying(); // done - void ProcessJumboLanding(CPlane *plane); // done - void ProcessJumboTakeOff(CPlane *plane); // done - void ProcessJumboTaxi(); // done - void ProcessLoopingScriptObject(uint8 sound); // done - void ProcessMissionAudio(); // done - void ProcessMissionAudioSlot(uint8 slot); // done - void ProcessModelHeliVehicle(cVehicleParams& params); // done - void ProcessModelVehicle(cVehicleParams& params); // done - void ProcessOneShotScriptObject(uint8 sound); // - void ProcessPed(CPhysical *ped); // done - void ProcessPedOneShots(cPedParams ¶ms); // - void ProcessPhysical(int32 id); // done - void ProcessPlane(cVehicleParams& params); // done - void ProcessPlayerMood(); // done - void ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh); // done - void ProcessProjectiles(); // done - void ProcessRainOnVehicle(cVehicleParams& params); // done - void ProcessReverb() const; // done - bool ProcessReverseGear(cVehicleParams& params); // done - void ProcessScriptObject(int32 id); // done - void ProcessSpecial(); // done + bool8 ProcessCarBombTick(cVehicleParams& params); + void ProcessCarHeli(cVehicleParams& params); + void ProcessCesna(cVehicleParams& params); + //void ProcessCrane(); + bool8 ProcessEngineDamage(cVehicleParams& params); + void ProcessEntity(int32 sound); + void ProcessExplosions(int32 explosion); + void ProcessFireHydrant(); + void ProcessFires(int32 entity); + void ProcessFrontEnd(); + void ProcessGarages(); + void ProcessJumbo(cVehicleParams& params); + void ProcessJumboAccel(CPlane *plane); + void ProcessJumboDecel(CPlane *plane); + void ProcessJumboFlying(); + void ProcessJumboLanding(CPlane *plane); + void ProcessJumboTakeOff(CPlane *plane); + void ProcessJumboTaxi(); + void ProcessLoopingScriptObject(uint8 sound); + void ProcessMissionAudio(); + void ProcessMissionAudioSlot(uint8 slot); + void ProcessModelHeliVehicle(cVehicleParams& params); + void ProcessModelVehicle(cVehicleParams& params); + void ProcessOneShotScriptObject(uint8 sound); + void ProcessPed(CPhysical *ped); + void ProcessPedOneShots(cPedParams ¶ms); + void ProcessPhysical(int32 id); + void ProcessPlane(cVehicleParams& params); + void ProcessPlayerMood(); + void ProcessPlayersVehicleEngine(cVehicleParams& params, CVehicle* veh); + void ProcessProjectiles(); + void ProcessRainOnVehicle(cVehicleParams& params); + void ProcessReverb() const; + bool8 ProcessReverseGear(cVehicleParams& params); + void ProcessScriptObject(int32 id); + void ProcessSpecial(); #ifdef GTA_TRAIN - bool ProcessTrainNoise(cVehicleParams *params); //done(bcs not exists in VC) + bool8 ProcessTrainNoise(cVehicleParams *params); #endif - void ProcessVehicle(CVehicle *vehicle); // done - bool ProcessVehicleDoors(cVehicleParams ¶ms); // done - void ProcessVehicleEngine(cVehicleParams ¶ms); // done - void ProcessVehicleFlatTyre(cVehicleParams ¶ms); // done - bool ProcessVehicleHorn(cVehicleParams ¶ms); // done - void ProcessVehicleOneShots(cVehicleParams ¶ms); // done - bool ProcessVehicleReverseWarning(cVehicleParams ¶ms); // done - bool ProcessVehicleRoadNoise(cVehicleParams ¶ms); // done - bool ProcessVehicleSirenOrAlarm(cVehicleParams ¶ms); // done - bool ProcessVehicleSkidding(cVehicleParams ¶ms); // done - void ProcessWaterCannon(int32); // done - void ProcessWeather(int32 id); // done - bool ProcessWetRoadNoise(cVehicleParams& params); // done - void ProcessEscalators(); // done - void ProcessExtraSounds(); // done + void ProcessVehicle(CVehicle *vehicle); + bool8 ProcessVehicleDoors(cVehicleParams ¶ms); + void ProcessVehicleEngine(cVehicleParams ¶ms); + void ProcessVehicleFlatTyre(cVehicleParams ¶ms); + bool8 ProcessVehicleHorn(cVehicleParams ¶ms); + void ProcessVehicleOneShots(cVehicleParams ¶ms); + bool8 ProcessVehicleReverseWarning(cVehicleParams ¶ms); + bool8 ProcessVehicleRoadNoise(cVehicleParams ¶ms); + bool8 ProcessVehicleSirenOrAlarm(cVehicleParams ¶ms); + bool8 ProcessVehicleSkidding(cVehicleParams ¶ms); + void ProcessWaterCannon(int32); + void ProcessWeather(int32 id); + bool8 ProcessWetRoadNoise(cVehicleParams& params); + void ProcessEscalators(); + void ProcessExtraSounds(); - int32 RandomDisplacement(uint32 seed) const; // done - void ReacquireDigitalHandle() const; // done - void ReleaseDigitalHandle() const; // done - void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2); // done - void ReportCrime(eCrimeType crime, const CVector &pos); // done - void ResetAudioLogicTimers(uint32 timer); // done - void ResetPoliceRadio(); // done - void ResetTimers(uint32 time); // done + int32 RandomDisplacement(uint32 seed) const; + void ReacquireDigitalHandle() const; + void ReleaseDigitalHandle() const; + void ReportCollision(CEntity *entity1, CEntity *entity2, uint8 surface1, uint8 surface2, float collisionPower, float intensity2); + void ReportCrime(eCrimeType crime, const CVector &pos); + void ResetAudioLogicTimers(uint32 timer); + void ResetPoliceRadio(); + void ResetTimers(uint32 time); - void Service(); // done - void ServiceCollisions(); // done - void ServicePoliceRadio(); // done - void ServicePoliceRadioChannel(uint8 wantedLevel); // done - void ServiceSoundEffects(); // done - int8 SetCurrent3DProvider(uint8 which); // done - void SetDynamicAcousticModelingStatus(uint8 status); // done - void SetEffectsFadeVol(uint8 volume) const; // done - void SetEffectsMasterVolume(uint8 volume) const; // done - void SetMP3BoostVolume(uint8 volume) const; // done - void SetEntityStatus(int32 id, uint8 status); // done - uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision); // done - void SetMissionAudioLocation(uint8 slot, float x, float y, float z); // done - void SetMissionScriptPoliceAudio(int32 sfx) const; // inlined and optimized - void SetMonoMode(uint8 mono); // done - void SetMusicFadeVol(uint8 volume) const; // done - void SetMusicMasterVolume(uint8 volume) const; // done - void SetSpeakerConfig(int32 conf) const; // done - void SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter); // done - void SetUpOneShotCollisionSound(const cAudioCollision &col); // done - bool SetupCrimeReport(); // done - bool SetupJumboEngineSound(uint8 vol, uint32 freq); // done - bool SetupJumboFlySound(uint8 emittingVol); // done - bool SetupJumboRumbleSound(uint8 emittingVol); // done - bool SetupJumboTaxiSound(uint8 vol); // done - bool SetupJumboWhineSound(uint8 emittingVol, uint32 freq); // done - void SetupPedComments(cPedParams ¶ms, uint16 sound); // done + void Service(); + void ServiceCollisions(); + void ServicePoliceRadio(); + void ServicePoliceRadioChannel(uint8 wantedLevel); + void ServiceSoundEffects(); + int8 SetCurrent3DProvider(uint8 which); + void SetDynamicAcousticModelingStatus(bool8 status); + void SetEffectsFadeVol(uint8 volume) const; + void SetEffectsMasterVolume(uint8 volume) const; + void SetMP3BoostVolume(uint8 volume) const; + void SetEntityStatus(int32 id, bool8 status); + uint32 SetLoopingCollisionRequestedSfxFreqAndGetVol(const cAudioCollision &audioCollision); + void SetMissionAudioLocation(uint8 slot, float x, float y, float z); + void SetMissionScriptPoliceAudio(int32 sfx) const; // inlined and optimized + void SetMonoMode(bool8 mono); + void SetMusicFadeVol(uint8 volume) const; + void SetMusicMasterVolume(uint8 volume) const; + void SetSpeakerConfig(int32 conf) const; + void SetUpLoopingCollisionSound(const cAudioCollision &col, uint8 counter); + void SetUpOneShotCollisionSound(const cAudioCollision &col); + bool8 SetupCrimeReport(); + bool8 SetupJumboEngineSound(uint8 vol, uint32 freq); + bool8 SetupJumboFlySound(uint8 emittingVol); + bool8 SetupJumboRumbleSound(uint8 emittingVol); + bool8 SetupJumboTaxiSound(uint8 vol); + bool8 SetupJumboWhineSound(uint8 emittingVol, uint32 freq); + void SetupPedComments(cPedParams ¶ms, uint16 sound); void SetupSuspectLastSeenReport(); - void Terminate(); // done - void TranslateEntity(Const CVector *v1, CVector *v2) const; // done + void Terminate(); + void TranslateEntity(Const CVector *v1, CVector *v2) const; - void UpdateGasPedalAudio(CVehicle *veh, int vehType); // done - void UpdateReflections(); // done - bool UsesReverseWarning(int32 model) const; // done - bool UsesSiren(cVehicleParams ¶ms) const; // done - bool UsesSirenSwitching(cVehicleParams ¶ms) const; // done + void UpdateGasPedalAudio(CVehicle *veh, int vehType); + void UpdateReflections(); + bool8 UsesReverseWarning(int32 model) const; + bool8 UsesSiren(cVehicleParams ¶ms) const; + bool8 UsesSirenSwitching(cVehicleParams ¶ms) const; - CVehicle *FindVehicleOfPlayer(); // done - void SetPedTalkingStatus(CPed *ped, uint8 status); // done - void SetPlayersMood(uint8 mood, uint32 time); // done + CVehicle *FindVehicleOfPlayer(); + void SetPedTalkingStatus(CPed *ped, bool8 status); + void SetPlayersMood(uint8 mood, uint32 time); float Sqrt(float v) const { return v <= 0.0f ? 0.0f : ::Sqrt(v); } #ifdef GTA_PC // only used in pc - void AdjustSamplesVolume(); // done (inlined) - uint8 ComputeEmittingVolume(uint8 emittingVolume, float intensity, float dist); // done (inlined) + void AdjustSamplesVolume(); // inlined + uint8 ComputeEmittingVolume(uint8 emittingVolume, float intensity, float dist); // inlined #endif }; -#ifdef AUDIO_MSS +/* + Manual loop points are not on PS2 so let's have these macros to avoid massive ifndefs. + Setting these manually was pointless anyway since they never change from sdt values. + What were they thinking? +*/ +#ifndef GTA_PS2 +#define RESET_LOOP_OFFSETS \ + m_sQueueSample.m_nLoopStart = 0; \ + m_sQueueSample.m_nLoopEnd = -1; +#define SET_LOOP_OFFSETS(sample) \ + m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(sample); \ + m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(sample); +#else +#define RESET_LOOP_OFFSETS +#define SET_LOOP_OFFSETS(sample) +#endif + +#if defined(AUDIO_MSS) && !defined(PS2_AUDIO_CHANNELS) static_assert(sizeof(cAudioManager) == 0x5558, "cAudioManager: error"); #endif diff --git a/src/audio/AudioSamples.h b/src/audio/AudioSamples.h index 5c5d857d..b98bfd7c 100644 --- a/src/audio/AudioSamples.h +++ b/src/audio/AudioSamples.h @@ -225,8 +225,8 @@ enum eSfxSample SFX_POLICE_RADIO_WASHINGTON_BEACH, SFX_POLICE_RADIO_VICE_POINT, SFX_POLICE_RADIO_LEAF_LINKS, - SFX_POLICE_RADIO_STRAFISH_ISLAND, //??????????? - SFX_POLICE_RADIO_VICE_PORT, + SFX_POLICE_RADIO_STARFISH_ISLAND, //??????????? + SFX_POLICE_RADIO_VICEPORT, SFX_POLICE_RADIO_LITTLE_HAVANA, SFX_POLICE_RADIO_LITTLE_HAITI, SFX_POLICE_RADIO_PRAWN_ISLAND, //??????????? IS THAT HOW SHE PRONOUNCES ISLAND? @@ -243,7 +243,7 @@ enum eSfxSample SFX_POLICE_RADIO_GREEN, SFX_POLICE_RADIO_SILVER, SFX_POLICE_RADIO_AMBULANCE, - SFX_POLICE_RADIO_2_DOOR, + SFX_POLICE_RADIO_TUDOOR, SFX_POLICE_RADIO_TRUCK, SFX_POLICE_RADIO_FIRE_TRUCK, SFX_POLICE_RADIO_PICKUP, @@ -446,12 +446,9 @@ enum eSfxSample SFX_CAR_FINGER_OFF_ACCEL_12, // some CHAINSAW STUFF - // SFX_CAR_CHAINSAW, //10973 - // SFX_CAR_CHAINSAW, //10974 - // SFX_CAR_CHAINSAW, //10975 - SFX_CAR_ACCEL_13, - SFX_CAR_AFTER_ACCEL_13, - SFX_CAR_FINGER_OFF_ACCEL_13, + SFX_CAR_CHAINSAW_IDLE, + SFX_CAR_CHAINSAW_ATTACK, + SFX_CAR_CHAINSAW_EMPTY, // unused SFX_RC_IDLE, // 10976 SFX_RC_REV, // 10977 @@ -575,8 +572,200 @@ enum eSfxSample SFX_FOOTSTEP_SAND_3, SFX_FOOTSTEP_SAND_4, - // TODO: miami ped comments... THERE'S OVER 9000 - SFX_POLICE_BOAT_1 = 714, + // ped comments + + SFX_BMYBB_BLOCKED_1, + SFX_BMYBB_BLOCKED_2, + SFX_BMYBB_BLOCKED_3, + SFX_BMYBB_BLOCKED_4, + SFX_BMYBB_BLOCKED_5, + SFX_BMYBB_BLOCKED_6, + SFX_BMYBB_BLOCKED_7, + SFX_BMYBB_BLOCKED_8, + SFX_BMYBB_BLOCKED_9, + SFX_BMYBB_BLOCKED_10, + SFX_BMYBB_BLOCKED_11, + SFX_BMYBB_BLOCKED_12, + SFX_BMYBB_BLOCKED_13, + SFX_BMYBB_BUMP_1, + SFX_BMYBB_BUMP_2, + SFX_BMYBB_BUMP_3, + SFX_BMYBB_BUMP_4, + SFX_BMYBB_BUMP_5, + SFX_BMYBB_BUMP_6, + SFX_BMYBB_BUMP_7, + SFX_BMYBB_BUMP_8, + SFX_BMYBB_BUMP_9, + SFX_BMYBB_BUMP_10, + SFX_BMYBB_BUMP_11, + SFX_BMYBB_BUMP_12, + SFX_BMYBB_BUMP_13, + SFX_BMYBB_BUMP_14, + SFX_BMYBB_BUMP_15, + SFX_BMYBB_BUMP_16, + SFX_BMYBB_BUMP_17, + SFX_BMYBB_CAR_CRASH_1, + SFX_BMYBB_CAR_CRASH_2, + SFX_BMYBB_CAR_CRASH_3, + SFX_BMYBB_CAR_CRASH_4, + SFX_BMYBB_CAR_CRASH_5, + SFX_BMYBB_CAR_CRASH_6, + SFX_BMYBB_CAR_CRASH_7, + SFX_BMYBB_CAR_CRASH_8, + SFX_BMYBB_CAR_CRASH_9, + SFX_BMYBB_CHAT_1, + SFX_BMYBB_CHAT_2, + SFX_BMYBB_CHAT_3, + SFX_BMYBB_CHAT_4, + SFX_BMYBB_CHAT_5, + SFX_BMYBB_CHAT_6, + SFX_BMYBB_CHAT_7, + SFX_BMYBB_CHAT_8, + SFX_BMYBB_CHAT_9, + SFX_BMYBB_CHAT_10, + SFX_BMYBB_CHAT_11, + SFX_BMYBB_CHAT_12, + SFX_BMYBB_CHAT_13, + SFX_BMYBB_CHAT_14, + SFX_BMYBB_CHAT_15, + SFX_BMYBB_CHAT_16, + SFX_BMYBB_CHAT_17, + SFX_BMYBB_CHAT_18, + SFX_BMYBB_CHAT_19, + SFX_BMYBB_CHAT_20, + SFX_BMYBB_CHAT_21, + SFX_BMYBB_DODGE_1, + SFX_BMYBB_DODGE_2, + SFX_BMYBB_DODGE_3, + SFX_BMYBB_DODGE_4, + SFX_BMYBB_DODGE_5, + SFX_BMYBB_DODGE_6, + SFX_BMYBB_DODGE_7, + SFX_BMYBB_DODGE_8, + SFX_BMYBB_DODGE_9, + SFX_BMYBB_DODGE_10, + SFX_BMYBB_DODGE_11, + SFX_BMYBB_DODGE_12, + SFX_BMYBB_DODGE_13, + SFX_BMYBB_DODGE_14, + SFX_BMYBB_DODGE_15, + SFX_BMYBB_DODGE_16, + SFX_BMYBB_DODGE_17, + SFX_BMYBB_DODGE_18, + SFX_BMYBB_EYEING_1, + SFX_BMYBB_EYEING_2, + SFX_BMYBB_EYEING_3, + SFX_BMYBB_EYEING_4, + SFX_BMYBB_EYEING_5, + SFX_BMYBB_EYEING_6, + SFX_BMYBB_EYEING_7, + SFX_BMYBB_EYEING_8, + SFX_BMYBB_EYEING_9, + SFX_BMYBB_EYEING_10, + SFX_BMYBB_EYEING_11, + SFX_BMYBB_EYEING_12, + SFX_BMYBB_EYEING_13, + SFX_BMYBB_EYEING_14, + SFX_BMYBB_EYEING_15, + SFX_BMYBB_EYEING_16, + SFX_BMYBB_FIGHT_1, + SFX_BMYBB_FIGHT_2, + SFX_BMYBB_FIGHT_3, + SFX_BMYBB_FIGHT_4, + SFX_BMYBB_FIGHT_5, + SFX_BMYBB_FIGHT_6, + SFX_BMYBB_FIGHT_7, + SFX_BMYBB_FIGHT_8, + SFX_BMYBB_FIGHT_9, + SFX_BMYBB_FIGHT_10, + SFX_BMYBB_FIGHT_11, + SFX_BMYBB_FIGHT_12, + SFX_BMYBB_GENERIC_CRASH_1, + SFX_BMYBB_GENERIC_CRASH_2, + SFX_BMYBB_GENERIC_CRASH_3, + SFX_BMYBB_GENERIC_CRASH_4, + SFX_BMYBB_GENERIC_CRASH_5, + SFX_BMYBB_GENERIC_CRASH_6, + SFX_BMYBB_GENERIC_CRASH_7, + SFX_BMYBB_GENERIC_CRASH_8, + SFX_BMYBB_GENERIC_CRASH_9, + SFX_BMYBB_GUN_COOL_1, + SFX_BMYBB_GUN_COOL_2, + SFX_BMYBB_GUN_COOL_3, + SFX_BMYBB_GUN_COOL_4, + SFX_BMYBB_GUN_COOL_5, + SFX_BMYBB_INNOCENT_1, + SFX_BMYBB_INNOCENT_2, + SFX_BMYBB_INNOCENT_3, + SFX_BMYBB_INNOCENT_4, + SFX_BMYBB_JACKED_1, + SFX_BMYBB_JACKED_2, + SFX_BMYBB_JACKED_3, + SFX_BMYBB_JACKED_4, + SFX_BMYBB_JACKED_5, + SFX_BMYBB_JACKED_6, + SFX_BMYBB_JACKED_7, + SFX_BMYBB_JACKED_8, + SFX_BMYBB_JACKED_9, + SFX_BMYBB_JACKED_10, + SFX_BMYBB_JACKED_11, + SFX_BMYBB_JACKING_1, + SFX_BMYBB_JACKING_2, + SFX_BMYBB_JACKING_3, + SFX_BMYBB_JACKING_4, + SFX_BMYBB_JACKING_5, + SFX_BMYBB_JACKING_6, + SFX_BMYBB_JACKING_7, + SFX_BMYBB_JACKING_8, + SFX_BMYBB_JACKING_9, + SFX_BMYBB_JEER_1, + SFX_BMYBB_JEER_2, + SFX_BMYBB_JEER_3, + SFX_BMYBB_JEER_4, + SFX_BMYBB_JEER_5, + SFX_BMYBB_JEER_6, + SFX_BMYBB_JEER_7, + SFX_BMYBB_JEER_8, + SFX_BMYBB_JEER_9, + SFX_BMYBB_JEER_10, + SFX_BMYBB_JEER_11, + SFX_BMYBB_JEER_12, + SFX_BMYBB_JEER_13, + SFX_BMYBB_JEER_14, + SFX_BMYBB_JEER_15, + SFX_BMYBB_JEER_16, + SFX_BMYBB_LOST_1, + SFX_BMYBB_LOST_2, + SFX_BMYBB_MUGGED_1, + SFX_BMYBB_MUGGED_2, + SFX_BMYBB_MUGGED_3, + SFX_BMYBB_MUGGED_4, + SFX_BMYBB_MUGGED_5, + SFX_BMYBB_MUGGING_1, + SFX_BMYBB_MUGGING_2, + SFX_BMYBB_MUGGING_3, + SFX_BMYBB_MUGGING_4, + SFX_BMYBB_MUGGING_5, + SFX_BMYBB_MUGGING_6, + SFX_BMYBB_MUGGING_7, + SFX_BMYBB_MUGGING_8, + SFX_BMYBB_SAVED_1, + SFX_BMYBB_SAVED_2, + SFX_BMYBB_SAVED_3, + SFX_BMYBB_SAVED_4, + SFX_BMYBB_SAVED_5, + SFX_BMYBB_SAVED_6, + SFX_BMYBB_SHOCKED_1, + SFX_BMYBB_SHOCKED_2, + SFX_BMYBB_SHOCKED_3, + SFX_BMYBB_SHOCKED_4, + SFX_BMYBB_SHOCKED_5, + SFX_BMYBB_SHOCKED_6, + SFX_BMYBB_TAXI_1, + SFX_BMYBB_TAXI_2, + SFX_BMYBB_TAXI_3, + + SFX_POLICE_BOAT_1, SFX_POLICE_BOAT_2, SFX_POLICE_BOAT_3, SFX_POLICE_BOAT_4, @@ -621,190 +810,9311 @@ enum eSfxSample SFX_POLICE_HELI_19, SFX_POLICE_HELI_20, - SFX_GENERIC_FEMALE_GRUNT_1 = 2953, - SFX_GENERIC_FEMALE_GRUNT_2 = 2954, - SFX_GENERIC_FEMALE_GRUNT_3 = 2955, - SFX_GENERIC_FEMALE_GRUNT_4 = 2956, - SFX_GENERIC_FEMALE_GRUNT_5 = 2957, - SFX_GENERIC_FEMALE_GRUNT_6 = 2958, - SFX_GENERIC_FEMALE_GRUNT_7 = 2959, - SFX_GENERIC_FEMALE_GRUNT_8 = 2960, - SFX_GENERIC_FEMALE_GRUNT_9 = 2961, - SFX_GENERIC_FEMALE_GRUNT_10 = 2962, - SFX_GENERIC_FEMALE_GRUNT_11 = 2963, - SFX_GENERIC_FEMALE_GRUNT_12 = 2964, - SFX_GENERIC_FEMALE_GRUNT_13 = 2965, - SFX_GENERIC_FEMALE_GRUNT_14 = 2966, - SFX_GENERIC_FEMALE_GRUNT_15 = 2967, - SFX_GENERIC_FEMALE_GRUNT_16 = 2968, - SFX_GENERIC_FEMALE_GRUNT_17 = 2969, - SFX_GENERIC_FEMALE_GRUNT_18 = 2970, - SFX_GENERIC_FEMALE_GRUNT_19 = 2971, - SFX_GENERIC_FEMALE_GRUNT_20 = 2972, - SFX_GENERIC_FEMALE_GRUNT_21 = 2973, - SFX_GENERIC_FEMALE_GRUNT_22 = 2974, - SFX_GENERIC_FEMALE_GRUNT_23 = 2975, - SFX_GENERIC_FEMALE_GRUNT_24 = 2976, - SFX_GENERIC_FEMALE_GRUNT_25 = 2977, - SFX_GENERIC_FEMALE_GRUNT_26 = 2978, - SFX_GENERIC_FEMALE_GRUNT_27 = 2979, - SFX_GENERIC_FEMALE_GRUNT_28 = 2980, - SFX_GENERIC_FEMALE_GRUNT_29 = 2981, - SFX_GENERIC_FEMALE_GRUNT_30 = 2982, - SFX_GENERIC_FEMALE_GRUNT_31 = 2983, - SFX_GENERIC_FEMALE_GRUNT_32 = 2984, - SFX_GENERIC_FEMALE_GRUNT_33 = 2985, - SFX_GENERIC_MALE_FIRE_1 = 3013, - SFX_GENERIC_MALE_FIRE_2 = 3014, - SFX_GENERIC_MALE_FIRE_3 = 3015, - SFX_GENERIC_MALE_FIRE_4 = 3016, - SFX_GENERIC_MALE_FIRE_5 = 3017, - SFX_GENERIC_MALE_FIRE_6 = 3018, - SFX_GENERIC_MALE_FIRE_7 = 3019, - SFX_GENERIC_MALE_FIRE_8 = 3020, - SFX_GENERIC_MALE_FIRE_9 = 3021, - SFX_GENERIC_MALE_FIRE_10 = 3022, - SFX_GENERIC_MALE_FIRE_11 = 3023, - SFX_GENERIC_MALE_FIRE_12 = 3024, - SFX_GENERIC_MALE_FIRE_13 = 3025, - SFX_GENERIC_MALE_FIRE_14 = 3026, - SFX_GENERIC_MALE_FIRE_15 = 3027, - SFX_GENERIC_MALE_FIRE_16 = 3028, - SFX_GENERIC_MALE_FIRE_17 = 3029, - SFX_GENERIC_MALE_FIRE_18 = 3030, - SFX_GENERIC_MALE_FIRE_19 = 3031, - SFX_GENERIC_MALE_FIRE_20 = 3032, - SFX_GENERIC_MALE_FIRE_21 = 3033, - SFX_GENERIC_MALE_FIRE_22 = 3034, - SFX_GENERIC_MALE_FIRE_23 = 3035, - SFX_GENERIC_MALE_FIRE_24 = 3036, - SFX_GENERIC_MALE_FIRE_25 = 3037, - SFX_GENERIC_MALE_FIRE_26 = 3038, - SFX_GENERIC_MALE_FIRE_27 = 3039, - SFX_GENERIC_MALE_FIRE_28 = 3040, - SFX_GENERIC_MALE_FIRE_29 = 3041, - SFX_GENERIC_MALE_FIRE_30 = 3042, - SFX_GENERIC_MALE_FIRE_31 = 3043, - SFX_GENERIC_MALE_FIRE_32 = 3044, - SFX_GENERIC_MALE_DEATH_1 = 3045, - SFX_GENERIC_MALE_DEATH_2 = 3046, - SFX_GENERIC_MALE_DEATH_3 = 3047, - SFX_GENERIC_MALE_DEATH_4 = 3048, - SFX_GENERIC_MALE_DEATH_5 = 3049, - SFX_GENERIC_MALE_DEATH_6 = 3050, - SFX_GENERIC_MALE_DEATH_7 = 3051, - SFX_GENERIC_MALE_DEATH_8 = 3052, - SFX_GENERIC_MALE_DEATH_9 = 3053, - SFX_GENERIC_MALE_DEATH_10 = 3054, - SFX_GENERIC_MALE_DEATH_11 = 3055, - SFX_GENERIC_MALE_DEATH_12 = 3056, - SFX_GENERIC_MALE_DEATH_13 = 3057, - SFX_GENERIC_MALE_DEATH_14 = 3058, - SFX_GENERIC_MALE_DEATH_15 = 3059, - SFX_GENERIC_MALE_DEATH_16 = 3060, - SFX_GENERIC_MALE_DEATH_17 = 3061, - SFX_GENERIC_MALE_DEATH_18 = 3062, - SFX_GENERIC_MALE_DEATH_19 = 3063, - SFX_GENERIC_MALE_DEATH_20 = 3064, - SFX_GENERIC_MALE_DEATH_21 = 3065, - SFX_GENERIC_MALE_DEATH_22 = 3066, - SFX_GENERIC_MALE_DEATH_23 = 3067, - SFX_GENERIC_MALE_DEATH_24 = 3068, - SFX_GENERIC_MALE_DEATH_25 = 3069, - SFX_GENERIC_MALE_DEATH_26 = 3070, - SFX_GENERIC_MALE_DEATH_27 = 3071, - SFX_GENERIC_MALE_DEATH_28 = 3072, - SFX_GENERIC_MALE_DEATH_29 = 3073, - SFX_GENERIC_MALE_DEATH_30 = 3074, - SFX_GENERIC_MALE_DEATH_31 = 3075, - SFX_GENERIC_MALE_DEATH_32 = 3076, - SFX_GENERIC_MALE_DEATH_33 = 3077, - SFX_GENERIC_MALE_DEATH_34 = 3078, - SFX_GENERIC_MALE_DEATH_35 = 3079, - SFX_GENERIC_MALE_DEATH_36 = 3080, - SFX_GENERIC_MALE_DEATH_37 = 3081, - SFX_GENERIC_MALE_DEATH_38 = 3082, - SFX_GENERIC_MALE_DEATH_39 = 3083, - SFX_GENERIC_MALE_DEATH_40 = 3084, - SFX_GENERIC_MALE_DEATH_41 = 3085, - SFX_GENERIC_MALE_GRUNT_1 = 3086, - SFX_GENERIC_MALE_GRUNT_2 = 3087, - SFX_GENERIC_MALE_GRUNT_3 = 3088, - SFX_GENERIC_MALE_GRUNT_4 = 3089, - SFX_GENERIC_MALE_GRUNT_5 = 3090, - SFX_GENERIC_MALE_GRUNT_6 = 3091, - SFX_GENERIC_MALE_GRUNT_7 = 3092, - SFX_GENERIC_MALE_GRUNT_8 = 3093, - SFX_GENERIC_MALE_GRUNT_9 = 3094, - SFX_GENERIC_MALE_GRUNT_10 = 3095, - SFX_GENERIC_MALE_GRUNT_11 = 3096, - SFX_GENERIC_MALE_GRUNT_12 = 3097, - SFX_GENERIC_MALE_GRUNT_13 = 3098, - SFX_GENERIC_MALE_GRUNT_14 = 3099, - SFX_GENERIC_MALE_GRUNT_15 = 3100, - SFX_GENERIC_MALE_GRUNT_16 = 3101, - SFX_GENERIC_MALE_GRUNT_17 = 3102, - SFX_GENERIC_MALE_GRUNT_18 = 3103, - SFX_GENERIC_MALE_GRUNT_19 = 3104, - SFX_GENERIC_MALE_GRUNT_20 = 3105, - SFX_GENERIC_MALE_GRUNT_21 = 3106, - SFX_GENERIC_MALE_GRUNT_22 = 3107, - SFX_GENERIC_MALE_GRUNT_23 = 3108, - SFX_GENERIC_MALE_GRUNT_24 = 3109, - SFX_GENERIC_MALE_GRUNT_25 = 3110, - SFX_GENERIC_MALE_GRUNT_26 = 3111, - SFX_GENERIC_MALE_GRUNT_27 = 3112, - SFX_GENERIC_MALE_GRUNT_28 = 3113, - SFX_GENERIC_MALE_GRUNT_29 = 3114, - SFX_GENERIC_MALE_GRUNT_30 = 3115, - SFX_GENERIC_MALE_GRUNT_31 = 3116, - SFX_GENERIC_MALE_GRUNT_32 = 3117, - SFX_GENERIC_MALE_GRUNT_33 = 3118, - SFX_GENERIC_MALE_GRUNT_34 = 3119, - SFX_GENERIC_MALE_GRUNT_35 = 3120, - SFX_GENERIC_MALE_GRUNT_36 = 3121, - SFX_GENERIC_MALE_GRUNT_37 = 3122, - SFX_GENERIC_MALE_GRUNT_38 = 3123, - SFX_GENERIC_MALE_GRUNT_39 = 3124, - SFX_GENERIC_MALE_GRUNT_40 = 3125, - SFX_GENERIC_MALE_GRUNT_41 = 3126, - SFX_GENERIC_MALE_PANIC_1 = 3127, - SFX_GENERIC_MALE_PANIC_2 = 3128, - SFX_GENERIC_MALE_PANIC_3 = 3129, - SFX_GENERIC_MALE_PANIC_4 = 3130, - SFX_GENERIC_MALE_PANIC_5 = 3131, - SFX_GENERIC_MALE_PANIC_6 = 3132, - SFX_GENERIC_MALE_PANIC_7 = 3133, - SFX_GENERIC_MALE_PANIC_8 = 3134, - SFX_GENERIC_MALE_PANIC_9 = 3135, - SFX_GENERIC_MALE_PANIC_10 = 3136, - SFX_GENERIC_MALE_PANIC_11 = 3137, - SFX_GENERIC_MALE_PANIC_12 = 3138, - SFX_GENERIC_MALE_PANIC_13 = 3139, - SFX_GENERIC_MALE_PANIC_14 = 3140, - SFX_GENERIC_MALE_PANIC_15 = 3141, - SFX_GENERIC_MALE_PANIC_16 = 3142, - SFX_GENERIC_MALE_PANIC_17 = 3143, - SFX_GENERIC_MALE_PANIC_18 = 3144, - SFX_GENERIC_MALE_PANIC_19 = 3145, - SFX_GENERIC_MALE_PANIC_20 = 3146, - SFX_GENERIC_MALE_PANIC_21 = 3147, - SFX_GENERIC_MALE_PANIC_22 = 3148, - SFX_GENERIC_MALE_PANIC_23 = 3149, - SFX_GENERIC_MALE_PANIC_24 = 3150, - SFX_GENERIC_MALE_PANIC_25 = 3151, - SFX_GENERIC_MALE_PANIC_26 = 3152, - SFX_GENERIC_MALE_PANIC_27 = 3153, - SFX_GENERIC_MALE_PANIC_28 = 3154, - SFX_GENERIC_MALE_PANIC_29 = 3155, - SFX_GENERIC_MALE_PANIC_30 = 3156, - SFX_GENERIC_MALE_PANIC_31 = 3157, - SFX_GENERIC_MALE_PANIC_32 = 3158, - SFX_GENERIC_MALE_PANIC_33 = 3159, - SFX_GENERIC_MALE_PANIC_34 = 3160, - SFX_GENERIC_MALE_PANIC_35 = 3161, + SFX_JFOTO_BLOCKED_1, + SFX_JFOTO_BLOCKED_2, + SFX_JFOTO_BLOCKED_3, + SFX_JFOTO_BLOCKED_4, + SFX_JFOTO_BLOCKED_5, + SFX_JFOTO_BLOCKED_6, + SFX_JFOTO_BLOCKED_7, + SFX_JFOTO_BLOCKED_8, - TOTAL_AUDIO_SAMPLES = 9941, + SFX_JFOTO_BUMP_1, + SFX_JFOTO_BUMP_2, + SFX_JFOTO_BUMP_3, + SFX_JFOTO_BUMP_4, + SFX_JFOTO_BUMP_5, + SFX_JFOTO_BUMP_6, + SFX_JFOTO_BUMP_7, + SFX_JFOTO_BUMP_8, + SFX_JFOTO_BUMP_9, + SFX_JFOTO_BUMP_10, + + SFX_JFOTO_CAR_CRASH_1, + SFX_JFOTO_CAR_CRASH_2, + SFX_JFOTO_CAR_CRASH_3, + SFX_JFOTO_CAR_CRASH_4, + SFX_JFOTO_CAR_CRASH_5, + SFX_JFOTO_CAR_CRASH_6, + SFX_JFOTO_CAR_CRASH_7, + SFX_JFOTO_CAR_CRASH_8, + + SFX_JFOTO_CHAT_1, + SFX_JFOTO_CHAT_2, + SFX_JFOTO_CHAT_3, + SFX_JFOTO_CHAT_4, + SFX_JFOTO_CHAT_5, + SFX_JFOTO_CHAT_6, + SFX_JFOTO_CHAT_7, + SFX_JFOTO_CHAT_8, + SFX_JFOTO_CHAT_9, + SFX_JFOTO_CHAT_10, + SFX_JFOTO_CHAT_11, + SFX_JFOTO_CHAT_12, + SFX_JFOTO_CHAT_13, + + SFX_JFOTO_DODGE_1, + SFX_JFOTO_DODGE_2, + SFX_JFOTO_DODGE_3, + SFX_JFOTO_DODGE_4, + SFX_JFOTO_DODGE_5, + SFX_JFOTO_DODGE_6, + SFX_JFOTO_DODGE_7, + SFX_JFOTO_DODGE_8, + SFX_JFOTO_DODGE_9, + + SFX_JFOTO_GENERIC_CRASH_1, + SFX_JFOTO_GENERIC_CRASH_2, + SFX_JFOTO_GENERIC_CRASH_3, + SFX_JFOTO_GENERIC_CRASH_4, + SFX_JFOTO_GENERIC_CRASH_5, + SFX_JFOTO_GENERIC_CRASH_6, + SFX_JFOTO_GUN_PANIC_1, + SFX_JFOTO_GUN_PANIC_2, + SFX_JFOTO_GUN_PANIC_3, + SFX_JFOTO_GUN_PANIC_4, + SFX_JFOTO_JACKED_1, + SFX_JFOTO_JACKED_2, + SFX_JFOTO_JACKED_3, + SFX_JFOTO_JACKED_4, + SFX_JFOTO_JACKED_5, + SFX_JFOTO_LOST_1, + SFX_JFOTO_MUGGED_1, + SFX_JFOTO_MUGGED_2, + SFX_JFOTO_RUN_1, + SFX_JFOTO_RUN_2, + SFX_JFOTO_RUN_3, + SFX_JFOTO_RUN_4, + SFX_JFOTO_RUN_5, + SFX_JFOTO_SAVED_1, + SFX_JFOTO_SAVED_2, + SFX_JFOTO_SHOCKED_1, + SFX_JFOTO_TAXI_1, + SFX_JFOTO_TAXI_2, + + SFX_JMOTO_BLOCKED_1, + SFX_JMOTO_BLOCKED_2, + SFX_JMOTO_BLOCKED_3, + SFX_JMOTO_BLOCKED_4, + SFX_JMOTO_BLOCKED_5, + SFX_JMOTO_BLOCKED_6, + SFX_JMOTO_BLOCKED_7, + SFX_JMOTO_BLOCKED_8, + SFX_JMOTO_BUMP_1, + SFX_JMOTO_BUMP_2, + SFX_JMOTO_BUMP_3, + SFX_JMOTO_BUMP_4, + SFX_JMOTO_BUMP_5, + SFX_JMOTO_BUMP_6, + SFX_JMOTO_BUMP_7, + SFX_JMOTO_BUMP_8, + SFX_JMOTO_CAR_CRASH_1, + SFX_JMOTO_CAR_CRASH_2, + SFX_JMOTO_CAR_CRASH_3, + SFX_JMOTO_CAR_CRASH_4, + SFX_JMOTO_CAR_CRASH_5, + SFX_JMOTO_CAR_CRASH_6, + SFX_JMOTO_CHAT_1, + SFX_JMOTO_CHAT_2, + SFX_JMOTO_CHAT_3, + SFX_JMOTO_CHAT_4, + SFX_JMOTO_CHAT_5, + SFX_JMOTO_CHAT_6, + SFX_JMOTO_CHAT_7, + SFX_JMOTO_DODGE_1, + SFX_JMOTO_DODGE_2, + SFX_JMOTO_DODGE_3, + SFX_JMOTO_DODGE_4, + SFX_JMOTO_DODGE_5, + SFX_JMOTO_DODGE_6, + SFX_JMOTO_GENERIC_CRASH_1, + SFX_JMOTO_GENERIC_CRASH_2, + SFX_JMOTO_GENERIC_CRASH_3, + SFX_JMOTO_GENERIC_CRASH_4, + SFX_JMOTO_GENERIC_CRASH_5, + SFX_JMOTO_GENERIC_CRASH_6, + SFX_JMOTO_GUN_PANIC_1, + SFX_JMOTO_GUN_PANIC_2, + SFX_JMOTO_GUN_PANIC_3, + SFX_JMOTO_GUN_PANIC_4, + SFX_JMOTO_JACKED_1, + SFX_JMOTO_JACKED_2, + SFX_JMOTO_JACKED_3, + SFX_JMOTO_JACKED_4, + SFX_JMOTO_LOST_1, + SFX_JMOTO_MUGGED_1, + SFX_JMOTO_MUGGED_2, + SFX_JMOTO_RUN_1, + SFX_JMOTO_RUN_2, + SFX_JMOTO_RUN_3, + SFX_JMOTO_RUN_4, + SFX_JMOTO_SAVED_1, + SFX_JMOTO_SHOCKED_1, + SFX_JMOTO_TAXI_1, + + SFX_BMYBE_BLOCKED_1, + SFX_BMYBE_BLOCKED_2, + SFX_BMYBE_BLOCKED_3, + SFX_BMYBE_BLOCKED_4, + SFX_BMYBE_BLOCKED_5, + SFX_BMYBE_BLOCKED_6, + SFX_BMYBE_BLOCKED_7, + SFX_BMYBE_BLOCKED_8, + SFX_BMYBE_BUMP_1, + SFX_BMYBE_BUMP_2, + SFX_BMYBE_BUMP_3, + SFX_BMYBE_BUMP_4, + SFX_BMYBE_BUMP_5, + SFX_BMYBE_BUMP_6, + SFX_BMYBE_BUMP_7, + SFX_BMYBE_BUMP_8, + SFX_BMYBE_BUMP_9, + SFX_BMYBE_BUMP_10, + SFX_BMYBE_CAR_CRASH_1, + SFX_BMYBE_CAR_CRASH_2, + SFX_BMYBE_CAR_CRASH_3, + SFX_BMYBE_CAR_CRASH_4, + SFX_BMYBE_CAR_CRASH_5, + SFX_BMYBE_CAR_CRASH_6, + SFX_BMYBE_CAR_CRASH_7, + SFX_BMYBE_CAR_CRASH_8, + SFX_BMYBE_CHAT_1, + SFX_BMYBE_CHAT_2, + SFX_BMYBE_CHAT_3, + SFX_BMYBE_CHAT_4, + SFX_BMYBE_CHAT_5, + SFX_BMYBE_CHAT_6, + SFX_BMYBE_CHAT_7, + SFX_BMYBE_CHAT_8, + SFX_BMYBE_CHAT_9, + SFX_BMYBE_CHAT_10, + SFX_BMYBE_DODGE_1, + SFX_BMYBE_DODGE_2, + SFX_BMYBE_DODGE_3, + SFX_BMYBE_DODGE_4, + SFX_BMYBE_DODGE_5, + SFX_BMYBE_DODGE_6, + SFX_BMYBE_DODGE_7, + SFX_BMYBE_DODGE_8, + SFX_BMYBE_DODGE_9, + SFX_BMYBE_DODGE_10, + SFX_BMYBE_EYEING_1, + SFX_BMYBE_EYEING_2, + SFX_BMYBE_FIGHT_1, + SFX_BMYBE_FIGHT_2, + SFX_BMYBE_FIGHT_3, + SFX_BMYBE_FIGHT_4, + SFX_BMYBE_FIGHT_5, + SFX_BMYBE_FIGHT_6, + SFX_BMYBE_FIGHT_7, + SFX_BMYBE_FIGHT_8, + SFX_BMYBE_GENERIC_CRASH_1, + SFX_BMYBE_GENERIC_CRASH_2, + SFX_BMYBE_GENERIC_CRASH_3, + SFX_BMYBE_GENERIC_CRASH_4, + SFX_BMYBE_GENERIC_CRASH_5, + SFX_BMYBE_GENERIC_CRASH_6, + SFX_BMYBE_GENERIC_CRASH_7, + SFX_BMYBE_GENERIC_CRASH_8, + SFX_BMYBE_GUN_COOL_1, + SFX_BMYBE_GUN_COOL_2, + SFX_BMYBE_GUN_COOL_3, + SFX_BMYBE_GUN_COOL_4, + SFX_BMYBE_JACKED_1, + SFX_BMYBE_JACKED_2, + SFX_BMYBE_JACKED_3, + SFX_BMYBE_JACKED_4, + SFX_BMYBE_JACKED_5, + SFX_BMYBE_JACKED_6, + SFX_BMYBE_JACKING_1, + SFX_BMYBE_JACKING_2, + SFX_BMYBE_JACKING_3, + SFX_BMYBE_LOST_1, + SFX_BMYBE_MUGGED_1, + SFX_BMYBE_SAVED_1, + SFX_BMYBE_TAXI_1, + + SFX_HFOBE_BLOCKED_1, + SFX_HFOBE_BLOCKED_2, + SFX_HFOBE_BLOCKED_3, + SFX_HFOBE_BLOCKED_4, + SFX_HFOBE_BLOCKED_5, + SFX_HFOBE_BLOCKED_6, + SFX_HFOBE_BUMP_1, + SFX_HFOBE_BUMP_2, + SFX_HFOBE_BUMP_3, + SFX_HFOBE_BUMP_4, + SFX_HFOBE_BUMP_5, + SFX_HFOBE_BUMP_6, + SFX_HFOBE_BUMP_7, + SFX_HFOBE_BUMP_8, + SFX_HFOBE_BUMP_9, + SFX_HFOBE_BUMP_10, + SFX_HFOBE_BUMP_11, + SFX_HFOBE_CAR_CRASH_1, + SFX_HFOBE_CAR_CRASH_2, + SFX_HFOBE_CAR_CRASH_3, + SFX_HFOBE_CAR_CRASH_4, + SFX_HFOBE_CAR_CRASH_5, + SFX_HFOBE_CAR_CRASH_6, + SFX_HFOBE_CHAT_1, + SFX_HFOBE_CHAT_2, + SFX_HFOBE_CHAT_3, + SFX_HFOBE_CHAT_4, + SFX_HFOBE_CHAT_5, + SFX_HFOBE_CHAT_6, + SFX_HFOBE_CHAT_7, + SFX_HFOBE_CHAT_8, + SFX_HFOBE_CHAT_9, + SFX_HFOBE_CHAT_10, + SFX_HFOBE_DODGE_1, + SFX_HFOBE_DODGE_2, + SFX_HFOBE_DODGE_3, + SFX_HFOBE_DODGE_4, + SFX_HFOBE_DODGE_5, + SFX_HFOBE_DODGE_6, + SFX_HFOBE_DODGE_7, + SFX_HFOBE_GENERIC_CRASH_1, + SFX_HFOBE_GENERIC_CRASH_2, + SFX_HFOBE_GENERIC_CRASH_3, + SFX_HFOBE_GENERIC_CRASH_4, + SFX_HFOBE_GENERIC_CRASH_5, + SFX_HFOBE_GUN_PANIC_1, + SFX_HFOBE_GUN_PANIC_2, + SFX_HFOBE_GUN_PANIC_3, + SFX_HFOBE_GUN_PANIC_4, + SFX_HFOBE_GUN_PANIC_5, + SFX_HFOBE_JACKED_1, + SFX_HFOBE_JACKED_2, + SFX_HFOBE_JACKED_3, + SFX_HFOBE_JACKED_4, + SFX_HFOBE_JACKED_5, + SFX_HFOBE_JACKED_6, + SFX_HFOBE_LOST_1, + SFX_HFOBE_LOST_2, + SFX_HFOBE_RUN_1, + SFX_HFOBE_RUN_2, + SFX_HFOBE_RUN_3, + SFX_HFOBE_RUN_4, + SFX_HFOBE_SAVED_1, + SFX_HFOBE_SHOCKED_1, + SFX_HFOBE_SHOCKED_2, + SFX_HFOBE_TAXI_1, + SFX_HFOBE_TAXI_2, + + SFX_STREET_GANG_1_BLOCKED_1, + SFX_STREET_GANG_1_BLOCKED_2, + SFX_STREET_GANG_1_BLOCKED_3, + SFX_STREET_GANG_1_BLOCKED_4, + SFX_STREET_GANG_1_BLOCKED_5, + SFX_STREET_GANG_1_BLOCKED_6, + SFX_STREET_GANG_1_BLOCKED_7, + SFX_STREET_GANG_1_BLOCKED_8, + SFX_STREET_GANG_1_BUMP_1, + SFX_STREET_GANG_1_BUMP_2, + SFX_STREET_GANG_1_BUMP_3, + SFX_STREET_GANG_1_BUMP_4, + SFX_STREET_GANG_1_BUMP_5, + SFX_STREET_GANG_1_BUMP_6, + SFX_STREET_GANG_1_BUMP_7, + SFX_STREET_GANG_1_BUMP_8, + SFX_STREET_GANG_1_BUMP_9, + SFX_STREET_GANG_1_BUMP_10, + SFX_STREET_GANG_1_CAR_CRASH_1, + SFX_STREET_GANG_1_CAR_CRASH_2, + SFX_STREET_GANG_1_CAR_CRASH_3, + SFX_STREET_GANG_1_CAR_CRASH_4, + SFX_STREET_GANG_1_CAR_CRASH_5, + SFX_STREET_GANG_1_CAR_CRASH_6, + SFX_STREET_GANG_1_CHAT_1, + SFX_STREET_GANG_1_CHAT_2, + SFX_STREET_GANG_1_CHAT_3, + SFX_STREET_GANG_1_CHAT_4, + SFX_STREET_GANG_1_CHAT_5, + SFX_STREET_GANG_1_CHAT_6, + SFX_STREET_GANG_1_CHAT_7, + SFX_STREET_GANG_1_CHAT_8, + SFX_STREET_GANG_1_CHAT_9, + SFX_STREET_GANG_1_CHAT_10, + SFX_STREET_GANG_1_CHAT_11, + SFX_STREET_GANG_1_CHAT_12, + SFX_STREET_GANG_1_DODGE_1, + SFX_STREET_GANG_1_DODGE_2, + SFX_STREET_GANG_1_DODGE_3, + SFX_STREET_GANG_1_DODGE_4, + SFX_STREET_GANG_1_DODGE_5, + SFX_STREET_GANG_1_DODGE_6, + SFX_STREET_GANG_1_DODGE_7, + SFX_STREET_GANG_1_DODGE_8, + SFX_STREET_GANG_1_DODGE_9, + SFX_STREET_GANG_1_EYEING_1, + SFX_STREET_GANG_1_EYEING_2, + SFX_STREET_GANG_1_EYEING_3, + SFX_STREET_GANG_1_FIGHT_1, + SFX_STREET_GANG_1_FIGHT_2, + SFX_STREET_GANG_1_FIGHT_3, + SFX_STREET_GANG_1_FIGHT_4, + SFX_STREET_GANG_1_FIGHT_5, + SFX_STREET_GANG_1_FIGHT_6, + SFX_STREET_GANG_1_FIGHT_7, + SFX_STREET_GANG_1_FIGHT_8, + SFX_STREET_GANG_1_FIGHT_9, + SFX_STREET_GANG_1_FIGHT_10, + SFX_STREET_GANG_1_GENERIC_CRASH_1, + SFX_STREET_GANG_1_GENERIC_CRASH_2, + SFX_STREET_GANG_1_GENERIC_CRASH_3, + SFX_STREET_GANG_1_GENERIC_CRASH_4, + SFX_STREET_GANG_1_GENERIC_CRASH_5, + SFX_STREET_GANG_1_GENERIC_CRASH_6, + SFX_STREET_GANG_1_GUN_COOL_1, + SFX_STREET_GANG_1_GUN_COOL_2, + SFX_STREET_GANG_1_GUN_COOL_3, + SFX_STREET_GANG_1_GUN_COOL_4, + SFX_STREET_GANG_1_GUN_COOL_5, + SFX_STREET_GANG_1_JACKED_1, + SFX_STREET_GANG_1_JACKED_2, + SFX_STREET_GANG_1_JACKED_3, + SFX_STREET_GANG_1_JACKED_4, + SFX_STREET_GANG_1_JACKED_5, + SFX_STREET_GANG_1_JACKING_1, + SFX_STREET_GANG_1_JACKING_2, + SFX_STREET_GANG_1_JACKING_3, + SFX_STREET_GANG_1_JACKING_4, + SFX_STREET_GANG_1_JACKING_5, + SFX_STREET_GANG_1_LOST_1, + SFX_STREET_GANG_1_LOST_2, + SFX_STREET_GANG_1_MUGGED_1, + SFX_STREET_GANG_1_MUGGED_2, + SFX_STREET_GANG_1_MUGGED_3, + SFX_STREET_GANG_1_MUGGING_1, + SFX_STREET_GANG_1_MUGGING_2, + SFX_STREET_GANG_1_MUGGING_3, + SFX_STREET_GANG_1_MUGGING_4, + SFX_STREET_GANG_1_MUGGING_5, + SFX_STREET_GANG_1_SAVED_1, + SFX_STREET_GANG_1_SHOCKED_1, + SFX_STREET_GANG_1_SHOCKED_2, + SFX_STREET_GANG_1_TAXI_1, + + SFX_STREET_GANG_2_BLOCKED_1, + SFX_STREET_GANG_2_BLOCKED_2, + SFX_STREET_GANG_2_BLOCKED_3, + SFX_STREET_GANG_2_BLOCKED_4, + SFX_STREET_GANG_2_BLOCKED_5, + SFX_STREET_GANG_2_BLOCKED_6, + SFX_STREET_GANG_2_BLOCKED_7, + SFX_STREET_GANG_2_BLOCKED_8, + SFX_STREET_GANG_2_BUMP_1, + SFX_STREET_GANG_2_BUMP_2, + SFX_STREET_GANG_2_BUMP_3, + SFX_STREET_GANG_2_BUMP_4, + SFX_STREET_GANG_2_BUMP_5, + SFX_STREET_GANG_2_BUMP_6, + SFX_STREET_GANG_2_BUMP_7, + SFX_STREET_GANG_2_BUMP_8, + SFX_STREET_GANG_2_BUMP_9, + SFX_STREET_GANG_2_BUMP_10, + SFX_STREET_GANG_2_CAR_CRASH_1, + SFX_STREET_GANG_2_CAR_CRASH_2, + SFX_STREET_GANG_2_CAR_CRASH_3, + SFX_STREET_GANG_2_CAR_CRASH_4, + SFX_STREET_GANG_2_CAR_CRASH_5, + SFX_STREET_GANG_2_CAR_CRASH_6, + SFX_STREET_GANG_2_CHAT_1, + SFX_STREET_GANG_2_CHAT_2, + SFX_STREET_GANG_2_CHAT_3, + SFX_STREET_GANG_2_CHAT_4, + SFX_STREET_GANG_2_CHAT_5, + SFX_STREET_GANG_2_CHAT_6, + SFX_STREET_GANG_2_CHAT_7, + SFX_STREET_GANG_2_CHAT_8, + SFX_STREET_GANG_2_CHAT_9, + SFX_STREET_GANG_2_CHAT_10, + SFX_STREET_GANG_2_CHAT_11, + SFX_STREET_GANG_2_CHAT_12, + SFX_STREET_GANG_2_DODGE_1, + SFX_STREET_GANG_2_DODGE_2, + SFX_STREET_GANG_2_DODGE_3, + SFX_STREET_GANG_2_DODGE_4, + SFX_STREET_GANG_2_DODGE_5, + SFX_STREET_GANG_2_DODGE_6, + SFX_STREET_GANG_2_DODGE_7, + SFX_STREET_GANG_2_DODGE_8, + SFX_STREET_GANG_2_DODGE_9, + SFX_STREET_GANG_2_EYEING_1, + SFX_STREET_GANG_2_EYEING_2, + SFX_STREET_GANG_2_EYEING_3, + SFX_STREET_GANG_2_FIGHT_1, + SFX_STREET_GANG_2_FIGHT_2, + SFX_STREET_GANG_2_FIGHT_3, + SFX_STREET_GANG_2_FIGHT_4, + SFX_STREET_GANG_2_FIGHT_5, + SFX_STREET_GANG_2_FIGHT_6, + SFX_STREET_GANG_2_FIGHT_7, + SFX_STREET_GANG_2_FIGHT_8, + SFX_STREET_GANG_2_FIGHT_9, + SFX_STREET_GANG_2_FIGHT_10, + SFX_STREET_GANG_2_GENERIC_CRASH_1, + SFX_STREET_GANG_2_GENERIC_CRASH_2, + SFX_STREET_GANG_2_GENERIC_CRASH_3, + SFX_STREET_GANG_2_GENERIC_CRASH_4, + SFX_STREET_GANG_2_GENERIC_CRASH_5, + SFX_STREET_GANG_2_GENERIC_CRASH_6, + SFX_STREET_GANG_2_GUN_COOL_1, + SFX_STREET_GANG_2_GUN_COOL_2, + SFX_STREET_GANG_2_GUN_COOL_3, + SFX_STREET_GANG_2_GUN_COOL_4, + SFX_STREET_GANG_2_GUN_COOL_5, + SFX_STREET_GANG_2_JACKED_1, + SFX_STREET_GANG_2_JACKED_2, + SFX_STREET_GANG_2_JACKED_3, + SFX_STREET_GANG_2_JACKED_4, + SFX_STREET_GANG_2_JACKED_5, + SFX_STREET_GANG_2_JACKING_1, + SFX_STREET_GANG_2_JACKING_2, + SFX_STREET_GANG_2_JACKING_3, + SFX_STREET_GANG_2_JACKING_4, + SFX_STREET_GANG_2_JACKING_5, + SFX_STREET_GANG_2_LOST_1, + SFX_STREET_GANG_2_LOST_2, + SFX_STREET_GANG_2_MUGGED_1, + SFX_STREET_GANG_2_MUGGED_2, + SFX_STREET_GANG_2_MUGGED_3, + SFX_STREET_GANG_2_MUGGING_1, + SFX_STREET_GANG_2_MUGGING_2, + SFX_STREET_GANG_2_MUGGING_3, + SFX_STREET_GANG_2_MUGGING_4, + SFX_STREET_GANG_2_MUGGING_5, + SFX_STREET_GANG_2_SAVED_1, + SFX_STREET_GANG_2_SHOCKED_1, + SFX_STREET_GANG_2_SHOCKED_2, + SFX_STREET_GANG_2_TAXI_1, + + SFX_CUBAN_LORD_GANG_1_BLOCKED_1, + SFX_CUBAN_LORD_GANG_1_BLOCKED_2, + SFX_CUBAN_LORD_GANG_1_BLOCKED_3, + SFX_CUBAN_LORD_GANG_1_BLOCKED_4, + SFX_CUBAN_LORD_GANG_1_BLOCKED_5, + SFX_CUBAN_LORD_GANG_1_BLOCKED_6, + SFX_CUBAN_LORD_GANG_1_BLOCKED_7, + SFX_CUBAN_LORD_GANG_1_BLOCKED_8, + SFX_CUBAN_LORD_GANG_1_BLOCKED_9, + SFX_CUBAN_LORD_GANG_1_BLOCKED_10, + SFX_CUBAN_LORD_GANG_1_BUMP_1, + SFX_CUBAN_LORD_GANG_1_BUMP_2, + SFX_CUBAN_LORD_GANG_1_BUMP_3, + SFX_CUBAN_LORD_GANG_1_BUMP_4, + SFX_CUBAN_LORD_GANG_1_BUMP_5, + SFX_CUBAN_LORD_GANG_1_BUMP_6, + SFX_CUBAN_LORD_GANG_1_BUMP_7, + SFX_CUBAN_LORD_GANG_1_BUMP_8, + SFX_CUBAN_LORD_GANG_1_BUMP_9, + SFX_CUBAN_LORD_GANG_1_BUMP_10, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_1, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_2, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_3, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_4, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_5, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_6, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_7, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_8, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_9, + SFX_CUBAN_LORD_GANG_1_CAR_CRASH_10, + SFX_CUBAN_LORD_GANG_1_CHAT_1, + SFX_CUBAN_LORD_GANG_1_CHAT_2, + SFX_CUBAN_LORD_GANG_1_CHAT_3, + SFX_CUBAN_LORD_GANG_1_CHAT_4, + SFX_CUBAN_LORD_GANG_1_CHAT_5, + SFX_CUBAN_LORD_GANG_1_CHAT_6, + SFX_CUBAN_LORD_GANG_1_CHAT_7, + SFX_CUBAN_LORD_GANG_1_CHAT_8, + SFX_CUBAN_LORD_GANG_1_CHAT_9, + SFX_CUBAN_LORD_GANG_1_CHAT_10, + SFX_CUBAN_LORD_GANG_1_DODGE_1, + SFX_CUBAN_LORD_GANG_1_DODGE_2, + SFX_CUBAN_LORD_GANG_1_DODGE_3, + SFX_CUBAN_LORD_GANG_1_DODGE_4, + SFX_CUBAN_LORD_GANG_1_DODGE_5, + SFX_CUBAN_LORD_GANG_1_DODGE_6, + SFX_CUBAN_LORD_GANG_1_DODGE_7, + SFX_CUBAN_LORD_GANG_1_DODGE_8, + SFX_CUBAN_LORD_GANG_1_DODGE_9, + SFX_CUBAN_LORD_GANG_1_DODGE_10, + SFX_CUBAN_LORD_GANG_1_DODGE_11, + SFX_CUBAN_LORD_GANG_1_DODGE_12, + SFX_CUBAN_LORD_GANG_1_DODGE_13, + SFX_CUBAN_LORD_GANG_1_EYEING_1, + SFX_CUBAN_LORD_GANG_1_EYEING_2, + SFX_CUBAN_LORD_GANG_1_FIGHT_1, + SFX_CUBAN_LORD_GANG_1_FIGHT_2, + SFX_CUBAN_LORD_GANG_1_FIGHT_3, + SFX_CUBAN_LORD_GANG_1_FIGHT_4, + SFX_CUBAN_LORD_GANG_1_FIGHT_5, + SFX_CUBAN_LORD_GANG_1_FIGHT_6, + SFX_CUBAN_LORD_GANG_1_FIGHT_7, + SFX_CUBAN_LORD_GANG_1_FIGHT_8, + SFX_CUBAN_LORD_GANG_1_FIGHT_9, + SFX_CUBAN_LORD_GANG_1_FIGHT_10, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_1, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_2, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_3, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_4, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_5, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_6, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_7, + SFX_CUBAN_LORD_GANG_1_GENERIC_CRASH_8, + SFX_CUBAN_LORD_GANG_1_GUN_COOL_1, + SFX_CUBAN_LORD_GANG_1_GUN_COOL_2, + SFX_CUBAN_LORD_GANG_1_GUN_COOL_3, + SFX_CUBAN_LORD_GANG_1_GUN_COOL_4, + SFX_CUBAN_LORD_GANG_1_GUN_COOL_5, + SFX_CUBAN_LORD_GANG_1_JACKED_1, + SFX_CUBAN_LORD_GANG_1_JACKED_2, + SFX_CUBAN_LORD_GANG_1_JACKED_3, + SFX_CUBAN_LORD_GANG_1_JACKED_4, + SFX_CUBAN_LORD_GANG_1_JACKED_5, + SFX_CUBAN_LORD_GANG_1_JACKED_6, + SFX_CUBAN_LORD_GANG_1_JACKING_1, + SFX_CUBAN_LORD_GANG_1_JACKING_2, + SFX_CUBAN_LORD_GANG_1_JACKING_3, + SFX_CUBAN_LORD_GANG_1_JACKING_4, + SFX_CUBAN_LORD_GANG_1_JACKING_5, + SFX_CUBAN_LORD_GANG_1_LOST_1, + SFX_CUBAN_LORD_GANG_1_LOST_2, + SFX_CUBAN_LORD_GANG_1_MUGGED_1, + SFX_CUBAN_LORD_GANG_1_MUGGED_2, + SFX_CUBAN_LORD_GANG_1_SAVED_1, + SFX_CUBAN_LORD_GANG_1_TAXI_1, + SFX_CUBAN_LORD_GANG_1_TAXI_2, + SFX_CUBAN_LORD_GANG_2_BLOCKED_1, + SFX_CUBAN_LORD_GANG_2_BLOCKED_2, + SFX_CUBAN_LORD_GANG_2_BLOCKED_3, + SFX_CUBAN_LORD_GANG_2_BLOCKED_4, + SFX_CUBAN_LORD_GANG_2_BLOCKED_5, + SFX_CUBAN_LORD_GANG_2_BLOCKED_6, + SFX_CUBAN_LORD_GANG_2_BLOCKED_7, + SFX_CUBAN_LORD_GANG_2_BLOCKED_8, + SFX_CUBAN_LORD_GANG_2_BLOCKED_9, + SFX_CUBAN_LORD_GANG_2_BLOCKED_10, + SFX_CUBAN_LORD_GANG_2_BUMP_1, + SFX_CUBAN_LORD_GANG_2_BUMP_2, + SFX_CUBAN_LORD_GANG_2_BUMP_3, + SFX_CUBAN_LORD_GANG_2_BUMP_4, + SFX_CUBAN_LORD_GANG_2_BUMP_5, + SFX_CUBAN_LORD_GANG_2_BUMP_6, + SFX_CUBAN_LORD_GANG_2_BUMP_7, + SFX_CUBAN_LORD_GANG_2_BUMP_8, + SFX_CUBAN_LORD_GANG_2_BUMP_9, + SFX_CUBAN_LORD_GANG_2_BUMP_10, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_1, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_2, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_3, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_4, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_5, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_6, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_7, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_8, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_9, + SFX_CUBAN_LORD_GANG_2_CAR_CRASH_10, + SFX_CUBAN_LORD_GANG_2_CHAT_1, + SFX_CUBAN_LORD_GANG_2_CHAT_2, + SFX_CUBAN_LORD_GANG_2_CHAT_3, + SFX_CUBAN_LORD_GANG_2_CHAT_4, + SFX_CUBAN_LORD_GANG_2_CHAT_5, + SFX_CUBAN_LORD_GANG_2_CHAT_6, + SFX_CUBAN_LORD_GANG_2_CHAT_7, + SFX_CUBAN_LORD_GANG_2_CHAT_8, + SFX_CUBAN_LORD_GANG_2_CHAT_9, + SFX_CUBAN_LORD_GANG_2_CHAT_10, + SFX_CUBAN_LORD_GANG_2_DODGE_1, + SFX_CUBAN_LORD_GANG_2_DODGE_2, + SFX_CUBAN_LORD_GANG_2_DODGE_3, + SFX_CUBAN_LORD_GANG_2_DODGE_4, + SFX_CUBAN_LORD_GANG_2_DODGE_5, + SFX_CUBAN_LORD_GANG_2_DODGE_6, + SFX_CUBAN_LORD_GANG_2_DODGE_7, + SFX_CUBAN_LORD_GANG_2_DODGE_8, + SFX_CUBAN_LORD_GANG_2_DODGE_9, + SFX_CUBAN_LORD_GANG_2_DODGE_10, + SFX_CUBAN_LORD_GANG_2_DODGE_11, + SFX_CUBAN_LORD_GANG_2_DODGE_12, + SFX_CUBAN_LORD_GANG_2_DODGE_13, + SFX_CUBAN_LORD_GANG_2_EYEING_1, + SFX_CUBAN_LORD_GANG_2_EYEING_2, + SFX_CUBAN_LORD_GANG_2_FIGHT_1, + SFX_CUBAN_LORD_GANG_2_FIGHT_2, + SFX_CUBAN_LORD_GANG_2_FIGHT_3, + SFX_CUBAN_LORD_GANG_2_FIGHT_4, + SFX_CUBAN_LORD_GANG_2_FIGHT_5, + SFX_CUBAN_LORD_GANG_2_FIGHT_6, + SFX_CUBAN_LORD_GANG_2_FIGHT_7, + SFX_CUBAN_LORD_GANG_2_FIGHT_8, + SFX_CUBAN_LORD_GANG_2_FIGHT_9, + SFX_CUBAN_LORD_GANG_2_FIGHT_10, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_1, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_2, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_3, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_4, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_5, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_6, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_7, + SFX_CUBAN_LORD_GANG_2_GENERIC_CRASH_8, + SFX_CUBAN_LORD_GANG_2_GUN_COOL_1, + SFX_CUBAN_LORD_GANG_2_GUN_COOL_2, + SFX_CUBAN_LORD_GANG_2_GUN_COOL_3, + SFX_CUBAN_LORD_GANG_2_GUN_COOL_4, + SFX_CUBAN_LORD_GANG_2_GUN_COOL_5, + SFX_CUBAN_LORD_GANG_2_JACKED_1, + SFX_CUBAN_LORD_GANG_2_JACKED_2, + SFX_CUBAN_LORD_GANG_2_JACKED_3, + SFX_CUBAN_LORD_GANG_2_JACKED_4, + SFX_CUBAN_LORD_GANG_2_JACKED_5, + SFX_CUBAN_LORD_GANG_2_JACKED_6, + SFX_CUBAN_LORD_GANG_2_JACKING_1, + SFX_CUBAN_LORD_GANG_2_JACKING_2, + SFX_CUBAN_LORD_GANG_2_JACKING_3, + SFX_CUBAN_LORD_GANG_2_JACKING_4, + SFX_CUBAN_LORD_GANG_2_JACKING_5, + SFX_CUBAN_LORD_GANG_2_LOST_1, + SFX_CUBAN_LORD_GANG_2_LOST_2, + SFX_CUBAN_LORD_GANG_2_MUGGED_1, + SFX_CUBAN_LORD_GANG_2_MUGGED_2, + SFX_CUBAN_LORD_GANG_2_SAVED_1, + SFX_CUBAN_LORD_GANG_2_TAXI_1, + SFX_CUBAN_LORD_GANG_2_TAXI_2, + SFX_CUBAN_LORD_GANG_3_BLOCKED_1, + SFX_CUBAN_LORD_GANG_3_BLOCKED_2, + SFX_CUBAN_LORD_GANG_3_BLOCKED_3, + SFX_CUBAN_LORD_GANG_3_BLOCKED_4, + SFX_CUBAN_LORD_GANG_3_BLOCKED_5, + SFX_CUBAN_LORD_GANG_3_BLOCKED_6, + SFX_CUBAN_LORD_GANG_3_BLOCKED_7, + SFX_CUBAN_LORD_GANG_3_BLOCKED_8, + SFX_CUBAN_LORD_GANG_3_BLOCKED_9, + SFX_CUBAN_LORD_GANG_3_BLOCKED_10, + SFX_CUBAN_LORD_GANG_3_BUMP_1, + SFX_CUBAN_LORD_GANG_3_BUMP_2, + SFX_CUBAN_LORD_GANG_3_BUMP_3, + SFX_CUBAN_LORD_GANG_3_BUMP_4, + SFX_CUBAN_LORD_GANG_3_BUMP_5, + SFX_CUBAN_LORD_GANG_3_BUMP_6, + SFX_CUBAN_LORD_GANG_3_BUMP_7, + SFX_CUBAN_LORD_GANG_3_BUMP_8, + SFX_CUBAN_LORD_GANG_3_BUMP_9, + SFX_CUBAN_LORD_GANG_3_BUMP_10, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_1, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_2, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_3, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_4, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_5, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_6, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_7, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_8, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_9, + SFX_CUBAN_LORD_GANG_3_CAR_CRASH_10, + SFX_CUBAN_LORD_GANG_3_CHAT_1, + SFX_CUBAN_LORD_GANG_3_CHAT_2, + SFX_CUBAN_LORD_GANG_3_CHAT_3, + SFX_CUBAN_LORD_GANG_3_CHAT_4, + SFX_CUBAN_LORD_GANG_3_CHAT_5, + SFX_CUBAN_LORD_GANG_3_CHAT_6, + SFX_CUBAN_LORD_GANG_3_CHAT_7, + SFX_CUBAN_LORD_GANG_3_CHAT_8, + SFX_CUBAN_LORD_GANG_3_CHAT_9, + SFX_CUBAN_LORD_GANG_3_CHAT_10, + SFX_CUBAN_LORD_GANG_3_DODGE_1, + SFX_CUBAN_LORD_GANG_3_DODGE_2, + SFX_CUBAN_LORD_GANG_3_DODGE_3, + SFX_CUBAN_LORD_GANG_3_DODGE_4, + SFX_CUBAN_LORD_GANG_3_DODGE_5, + SFX_CUBAN_LORD_GANG_3_DODGE_6, + SFX_CUBAN_LORD_GANG_3_DODGE_7, + SFX_CUBAN_LORD_GANG_3_DODGE_8, + SFX_CUBAN_LORD_GANG_3_DODGE_9, + SFX_CUBAN_LORD_GANG_3_DODGE_10, + SFX_CUBAN_LORD_GANG_3_DODGE_11, + SFX_CUBAN_LORD_GANG_3_DODGE_12, + SFX_CUBAN_LORD_GANG_3_DODGE_13, + SFX_CUBAN_LORD_GANG_3_EYEING_1, + SFX_CUBAN_LORD_GANG_3_EYEING_2, + SFX_CUBAN_LORD_GANG_3_FIGHT_1, + SFX_CUBAN_LORD_GANG_3_FIGHT_2, + SFX_CUBAN_LORD_GANG_3_FIGHT_3, + SFX_CUBAN_LORD_GANG_3_FIGHT_4, + SFX_CUBAN_LORD_GANG_3_FIGHT_5, + SFX_CUBAN_LORD_GANG_3_FIGHT_6, + SFX_CUBAN_LORD_GANG_3_FIGHT_7, + SFX_CUBAN_LORD_GANG_3_FIGHT_8, + SFX_CUBAN_LORD_GANG_3_FIGHT_9, + SFX_CUBAN_LORD_GANG_3_FIGHT_10, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_1, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_2, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_3, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_4, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_5, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_6, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_7, + SFX_CUBAN_LORD_GANG_3_GENERIC_CRASH_8, + SFX_CUBAN_LORD_GANG_3_GUN_COOL_1, + SFX_CUBAN_LORD_GANG_3_GUN_COOL_2, + SFX_CUBAN_LORD_GANG_3_GUN_COOL_3, + SFX_CUBAN_LORD_GANG_3_GUN_COOL_4, + SFX_CUBAN_LORD_GANG_3_GUN_COOL_5, + SFX_CUBAN_LORD_GANG_3_JACKED_1, + SFX_CUBAN_LORD_GANG_3_JACKED_2, + SFX_CUBAN_LORD_GANG_3_JACKED_3, + SFX_CUBAN_LORD_GANG_3_JACKED_4, + SFX_CUBAN_LORD_GANG_3_JACKED_5, + SFX_CUBAN_LORD_GANG_3_JACKED_6, + SFX_CUBAN_LORD_GANG_3_JACKING_1, + SFX_CUBAN_LORD_GANG_3_JACKING_2, + SFX_CUBAN_LORD_GANG_3_JACKING_3, + SFX_CUBAN_LORD_GANG_3_JACKING_4, + SFX_CUBAN_LORD_GANG_3_JACKING_5, + SFX_CUBAN_LORD_GANG_3_LOST_1, + SFX_CUBAN_LORD_GANG_3_LOST_2, + SFX_CUBAN_LORD_GANG_3_MUGGED_1, + SFX_CUBAN_LORD_GANG_3_MUGGED_2, + SFX_CUBAN_LORD_GANG_3_SAVED_1, + SFX_CUBAN_LORD_GANG_3_TAXI_1, + SFX_CUBAN_LORD_GANG_3_TAXI_2, + + SFX_PLAYER_GANG_1_BLOCKED_1, + SFX_PLAYER_GANG_1_BLOCKED_2, + SFX_PLAYER_GANG_1_BLOCKED_3, + SFX_PLAYER_GANG_1_BLOCKED_4, + SFX_PLAYER_GANG_1_BLOCKED_5, + SFX_PLAYER_GANG_1_BLOCKED_6, + SFX_PLAYER_GANG_1_BLOCKED_7, + SFX_PLAYER_GANG_1_BLOCKED_8, + SFX_PLAYER_GANG_1_BLOCKED_9, + SFX_PLAYER_GANG_1_BLOCKED_10, + SFX_PLAYER_GANG_1_BUMP_1, + SFX_PLAYER_GANG_1_BUMP_2, + SFX_PLAYER_GANG_1_BUMP_3, + SFX_PLAYER_GANG_1_BUMP_4, + SFX_PLAYER_GANG_1_BUMP_5, + SFX_PLAYER_GANG_1_CAR_CRASH_1, + SFX_PLAYER_GANG_1_CAR_CRASH_2, + SFX_PLAYER_GANG_1_CAR_CRASH_3, + SFX_PLAYER_GANG_1_CAR_CRASH_4, + SFX_PLAYER_GANG_1_CAR_CRASH_5, + SFX_PLAYER_GANG_1_CHAT_1, + SFX_PLAYER_GANG_1_CHAT_2, + SFX_PLAYER_GANG_1_CHAT_3, + SFX_PLAYER_GANG_1_CHAT_4, + SFX_PLAYER_GANG_1_CHAT_5, + SFX_PLAYER_GANG_1_CHAT_6, + SFX_PLAYER_GANG_1_CHAT_7, + SFX_PLAYER_GANG_1_CHAT_8, + SFX_PLAYER_GANG_1_DODGE_1, + SFX_PLAYER_GANG_1_DODGE_2, + SFX_PLAYER_GANG_1_DODGE_3, + SFX_PLAYER_GANG_1_DODGE_4, + SFX_PLAYER_GANG_1_DODGE_5, + SFX_PLAYER_GANG_1_DODGE_6, + SFX_PLAYER_GANG_1_DODGE_7, + SFX_PLAYER_GANG_1_EYEING_1, + SFX_PLAYER_GANG_1_EYEING_2, + SFX_PLAYER_GANG_1_FIGHT_1, + SFX_PLAYER_GANG_1_FIGHT_2, + SFX_PLAYER_GANG_1_FIGHT_3, + SFX_PLAYER_GANG_1_FIGHT_4, + SFX_PLAYER_GANG_1_FIGHT_5, + SFX_PLAYER_GANG_1_GENERIC_CRASH_1, + SFX_PLAYER_GANG_1_GENERIC_CRASH_2, + SFX_PLAYER_GANG_1_GENERIC_CRASH_3, + SFX_PLAYER_GANG_1_GENERIC_CRASH_4, + SFX_PLAYER_GANG_1_GENERIC_CRASH_5, + SFX_PLAYER_GANG_1_GUN_COOL_1, + SFX_PLAYER_GANG_1_GUN_COOL_2, + SFX_PLAYER_GANG_1_GUN_COOL_3, + SFX_PLAYER_GANG_1_GUN_COOL_4, + SFX_PLAYER_GANG_1_JACKED_1, + SFX_PLAYER_GANG_1_JACKED_2, + SFX_PLAYER_GANG_1_JACKED_3, + SFX_PLAYER_GANG_1_JACKED_4, + SFX_PLAYER_GANG_1_JACKED_5, + SFX_PLAYER_GANG_1_JACKING_1, + SFX_PLAYER_GANG_1_JACKING_2, + SFX_PLAYER_GANG_1_JACKING_3, + SFX_PLAYER_GANG_1_JACKING_4, + SFX_PLAYER_GANG_1_JACKING_5, + SFX_PLAYER_GANG_1_LOST_1, + SFX_PLAYER_GANG_1_LOST_2, + SFX_PLAYER_GANG_1_MUGGED_1, + SFX_PLAYER_GANG_1_MUGGED_2, + SFX_PLAYER_GANG_1_SAVED_1, + SFX_PLAYER_GANG_1_SHOCKED_1, + SFX_PLAYER_GANG_1_SHOCKED_2, + SFX_PLAYER_GANG_1_TAXI_1, + SFX_PLAYER_GANG_1_TAXI_2, + SFX_PLAYER_GANG_2_BLOCKED_1, + SFX_PLAYER_GANG_2_BLOCKED_2, + SFX_PLAYER_GANG_2_BLOCKED_3, + SFX_PLAYER_GANG_2_BLOCKED_4, + SFX_PLAYER_GANG_2_BLOCKED_5, + SFX_PLAYER_GANG_2_BLOCKED_6, + SFX_PLAYER_GANG_2_BLOCKED_7, + SFX_PLAYER_GANG_2_BLOCKED_8, + SFX_PLAYER_GANG_2_BLOCKED_9, + SFX_PLAYER_GANG_2_BLOCKED_10, + SFX_PLAYER_GANG_2_BUMP_1, + SFX_PLAYER_GANG_2_BUMP_2, + SFX_PLAYER_GANG_2_BUMP_3, + SFX_PLAYER_GANG_2_BUMP_4, + SFX_PLAYER_GANG_2_BUMP_5, + SFX_PLAYER_GANG_2_CAR_CRASH_1, + SFX_PLAYER_GANG_2_CAR_CRASH_2, + SFX_PLAYER_GANG_2_CAR_CRASH_3, + SFX_PLAYER_GANG_2_CAR_CRASH_4, + SFX_PLAYER_GANG_2_CAR_CRASH_5, + SFX_PLAYER_GANG_2_CHAT_1, + SFX_PLAYER_GANG_2_CHAT_2, + SFX_PLAYER_GANG_2_CHAT_3, + SFX_PLAYER_GANG_2_CHAT_4, + SFX_PLAYER_GANG_2_CHAT_5, + SFX_PLAYER_GANG_2_CHAT_6, + SFX_PLAYER_GANG_2_CHAT_7, + SFX_PLAYER_GANG_2_CHAT_8, + SFX_PLAYER_GANG_2_DODGE_1, + SFX_PLAYER_GANG_2_DODGE_2, + SFX_PLAYER_GANG_2_DODGE_3, + SFX_PLAYER_GANG_2_DODGE_4, + SFX_PLAYER_GANG_2_DODGE_5, + SFX_PLAYER_GANG_2_DODGE_6, + SFX_PLAYER_GANG_2_DODGE_7, + SFX_PLAYER_GANG_2_EYEING_1, + SFX_PLAYER_GANG_2_EYEING_2, + SFX_PLAYER_GANG_2_FIGHT_1, + SFX_PLAYER_GANG_2_FIGHT_2, + SFX_PLAYER_GANG_2_FIGHT_3, + SFX_PLAYER_GANG_2_FIGHT_4, + SFX_PLAYER_GANG_2_FIGHT_5, + SFX_PLAYER_GANG_2_GENERIC_CRASH_1, + SFX_PLAYER_GANG_2_GENERIC_CRASH_2, + SFX_PLAYER_GANG_2_GENERIC_CRASH_3, + SFX_PLAYER_GANG_2_GENERIC_CRASH_4, + SFX_PLAYER_GANG_2_GENERIC_CRASH_5, + SFX_PLAYER_GANG_2_GUN_COOL_1, + SFX_PLAYER_GANG_2_GUN_COOL_2, + SFX_PLAYER_GANG_2_GUN_COOL_3, + SFX_PLAYER_GANG_2_GUN_COOL_4, + SFX_PLAYER_GANG_2_JACKED_1, + SFX_PLAYER_GANG_2_JACKED_2, + SFX_PLAYER_GANG_2_JACKED_3, + SFX_PLAYER_GANG_2_JACKED_4, + SFX_PLAYER_GANG_2_JACKED_5, + SFX_PLAYER_GANG_2_JACKING_1, + SFX_PLAYER_GANG_2_JACKING_2, + SFX_PLAYER_GANG_2_JACKING_3, + SFX_PLAYER_GANG_2_JACKING_4, + SFX_PLAYER_GANG_2_JACKING_5, + SFX_PLAYER_GANG_2_LOST_1, + SFX_PLAYER_GANG_2_LOST_2, + SFX_PLAYER_GANG_2_MUGGED_1, + SFX_PLAYER_GANG_2_MUGGED_2, + SFX_PLAYER_GANG_2_SAVED_1, + SFX_PLAYER_GANG_2_SHOCKED_1, + SFX_PLAYER_GANG_2_SHOCKED_2, + SFX_PLAYER_GANG_2_TAXI_1, + SFX_PLAYER_GANG_2_TAXI_2, + SFX_PLAYER_GANG_3_BLOCKED_1, + SFX_PLAYER_GANG_3_BLOCKED_2, + SFX_PLAYER_GANG_3_BLOCKED_3, + SFX_PLAYER_GANG_3_BLOCKED_4, + SFX_PLAYER_GANG_3_BLOCKED_5, + SFX_PLAYER_GANG_3_BLOCKED_6, + SFX_PLAYER_GANG_3_BLOCKED_7, + SFX_PLAYER_GANG_3_BLOCKED_8, + SFX_PLAYER_GANG_3_BLOCKED_9, + SFX_PLAYER_GANG_3_BLOCKED_10, + SFX_PLAYER_GANG_3_BUMP_1, + SFX_PLAYER_GANG_3_BUMP_2, + SFX_PLAYER_GANG_3_BUMP_3, + SFX_PLAYER_GANG_3_BUMP_4, + SFX_PLAYER_GANG_3_BUMP_5, + SFX_PLAYER_GANG_3_CAR_CRASH_1, + SFX_PLAYER_GANG_3_CAR_CRASH_2, + SFX_PLAYER_GANG_3_CAR_CRASH_3, + SFX_PLAYER_GANG_3_CAR_CRASH_4, + SFX_PLAYER_GANG_3_CAR_CRASH_5, + SFX_PLAYER_GANG_3_CHAT_1, + SFX_PLAYER_GANG_3_CHAT_2, + SFX_PLAYER_GANG_3_CHAT_3, + SFX_PLAYER_GANG_3_CHAT_4, + SFX_PLAYER_GANG_3_CHAT_5, + SFX_PLAYER_GANG_3_CHAT_6, + SFX_PLAYER_GANG_3_CHAT_7, + SFX_PLAYER_GANG_3_CHAT_8, + SFX_PLAYER_GANG_3_DODGE_1, + SFX_PLAYER_GANG_3_DODGE_2, + SFX_PLAYER_GANG_3_DODGE_3, + SFX_PLAYER_GANG_3_DODGE_4, + SFX_PLAYER_GANG_3_DODGE_5, + SFX_PLAYER_GANG_3_DODGE_6, + SFX_PLAYER_GANG_3_DODGE_7, + SFX_PLAYER_GANG_3_EYEING_1, + SFX_PLAYER_GANG_3_EYEING_2, + SFX_PLAYER_GANG_3_FIGHT_1, + SFX_PLAYER_GANG_3_FIGHT_2, + SFX_PLAYER_GANG_3_FIGHT_3, + SFX_PLAYER_GANG_3_FIGHT_4, + SFX_PLAYER_GANG_3_FIGHT_5, + SFX_PLAYER_GANG_3_GENERIC_CRASH_1, + SFX_PLAYER_GANG_3_GENERIC_CRASH_2, + SFX_PLAYER_GANG_3_GENERIC_CRASH_3, + SFX_PLAYER_GANG_3_GENERIC_CRASH_4, + SFX_PLAYER_GANG_3_GENERIC_CRASH_5, + SFX_PLAYER_GANG_3_GUN_COOL_1, + SFX_PLAYER_GANG_3_GUN_COOL_2, + SFX_PLAYER_GANG_3_GUN_COOL_3, + SFX_PLAYER_GANG_3_GUN_COOL_4, + SFX_PLAYER_GANG_3_JACKED_1, + SFX_PLAYER_GANG_3_JACKED_2, + SFX_PLAYER_GANG_3_JACKED_3, + SFX_PLAYER_GANG_3_JACKED_4, + SFX_PLAYER_GANG_3_JACKED_5, + SFX_PLAYER_GANG_3_JACKING_1, + SFX_PLAYER_GANG_3_JACKING_2, + SFX_PLAYER_GANG_3_JACKING_3, + SFX_PLAYER_GANG_3_JACKING_4, + SFX_PLAYER_GANG_3_JACKING_5, + SFX_PLAYER_GANG_3_LOST_1, + SFX_PLAYER_GANG_3_LOST_2, + SFX_PLAYER_GANG_3_MUGGED_1, + SFX_PLAYER_GANG_3_MUGGED_2, + SFX_PLAYER_GANG_3_SAVED_1, + SFX_PLAYER_GANG_3_SHOCKED_1, + SFX_PLAYER_GANG_3_SHOCKED_2, + SFX_PLAYER_GANG_3_TAXI_1, + SFX_PLAYER_GANG_3_TAXI_2, + + SFX_GUARD_DUTY_1_BUMP_1, + SFX_GUARD_DUTY_1_BUMP_2, + SFX_GUARD_DUTY_1_BUMP_3, + SFX_GUARD_DUTY_1_BUMP_4, + SFX_GUARD_DUTY_1_BUMP_5, + SFX_GUARD_DUTY_1_BUMP_6, + SFX_GUARD_DUTY_1_BUMP_7, + SFX_GUARD_DUTY_1_BUMP_8, + SFX_GUARD_DUTY_1_BUMP_9, + SFX_GUARD_DUTY_1_BUMP_10, + SFX_GUARD_DUTY_1_CHAT_1, + SFX_GUARD_DUTY_1_CHAT_2, + SFX_GUARD_DUTY_1_CHAT_3, + SFX_GUARD_DUTY_1_CHAT_4, + SFX_GUARD_DUTY_1_CHAT_5, + SFX_GUARD_DUTY_1_CHAT_6, + SFX_GUARD_DUTY_1_CHAT_7, + SFX_GUARD_DUTY_1_CHAT_8, + SFX_GUARD_DUTY_1_CHAT_9, + SFX_GUARD_DUTY_1_CHAT_10, + SFX_GUARD_DUTY_1_DODGE_1, + SFX_GUARD_DUTY_1_DODGE_2, + SFX_GUARD_DUTY_1_DODGE_3, + SFX_GUARD_DUTY_1_DODGE_4, + SFX_GUARD_DUTY_1_DODGE_5, + SFX_GUARD_DUTY_1_DODGE_6, + SFX_GUARD_DUTY_1_DODGE_7, + SFX_GUARD_DUTY_1_DODGE_8, + SFX_GUARD_DUTY_1_DODGE_9, + SFX_GUARD_DUTY_1_EYEING_1, + SFX_GUARD_DUTY_1_EYEING_2, + SFX_GUARD_DUTY_1_FIGHT_1, + SFX_GUARD_DUTY_1_FIGHT_2, + SFX_GUARD_DUTY_1_FIGHT_3, + SFX_GUARD_DUTY_1_FIGHT_4, + SFX_GUARD_DUTY_1_FIGHT_5, + SFX_GUARD_DUTY_1_FIGHT_6, + SFX_GUARD_DUTY_1_FIGHT_7, + SFX_GUARD_DUTY_1_GUN_COOL_1, + SFX_GUARD_DUTY_1_GUN_COOL_2, + SFX_GUARD_DUTY_1_GUN_COOL_3, + SFX_GUARD_DUTY_1_GUN_COOL_4, + SFX_GUARD_DUTY_1_GUN_COOL_5, + SFX_GUARD_DUTY_1_GUN_COOL_6, + SFX_GUARD_DUTY_1_LOST_1, + SFX_GUARD_DUTY_1_LOST_2, + SFX_GUARD_DUTY_1_SAVED_1, + SFX_GUARD_DUTY_1_SAVED_2, + SFX_GUARD_DUTY_1_SHOCKED_1, + SFX_GUARD_DUTY_1_SHOCKED_2, + + SFX_GUARD_DUTY_2_BUMP_1, + SFX_GUARD_DUTY_2_BUMP_2, + SFX_GUARD_DUTY_2_BUMP_3, + SFX_GUARD_DUTY_2_BUMP_4, + SFX_GUARD_DUTY_2_BUMP_5, + SFX_GUARD_DUTY_2_BUMP_6, + SFX_GUARD_DUTY_2_BUMP_7, + SFX_GUARD_DUTY_2_BUMP_8, + SFX_GUARD_DUTY_2_BUMP_9, + SFX_GUARD_DUTY_2_BUMP_10, + SFX_GUARD_DUTY_2_CHAT_1, + SFX_GUARD_DUTY_2_CHAT_2, + SFX_GUARD_DUTY_2_CHAT_3, + SFX_GUARD_DUTY_2_CHAT_4, + SFX_GUARD_DUTY_2_CHAT_5, + SFX_GUARD_DUTY_2_CHAT_6, + SFX_GUARD_DUTY_2_CHAT_7, + SFX_GUARD_DUTY_2_CHAT_8, + SFX_GUARD_DUTY_2_CHAT_9, + SFX_GUARD_DUTY_2_CHAT_10, + SFX_GUARD_DUTY_2_DODGE_1, + SFX_GUARD_DUTY_2_DODGE_2, + SFX_GUARD_DUTY_2_DODGE_3, + SFX_GUARD_DUTY_2_DODGE_4, + SFX_GUARD_DUTY_2_DODGE_5, + SFX_GUARD_DUTY_2_DODGE_6, + SFX_GUARD_DUTY_2_DODGE_7, + SFX_GUARD_DUTY_2_DODGE_8, + SFX_GUARD_DUTY_2_DODGE_9, + SFX_GUARD_DUTY_2_EYEING_1, + SFX_GUARD_DUTY_2_EYEING_2, + SFX_GUARD_DUTY_2_FIGHT_1, + SFX_GUARD_DUTY_2_FIGHT_2, + SFX_GUARD_DUTY_2_FIGHT_3, + SFX_GUARD_DUTY_2_FIGHT_4, + SFX_GUARD_DUTY_2_FIGHT_5, + SFX_GUARD_DUTY_2_FIGHT_6, + SFX_GUARD_DUTY_2_FIGHT_7, + SFX_GUARD_DUTY_2_GUN_COOL_1, + SFX_GUARD_DUTY_2_GUN_COOL_2, + SFX_GUARD_DUTY_2_GUN_COOL_3, + SFX_GUARD_DUTY_2_GUN_COOL_4, + SFX_GUARD_DUTY_2_GUN_COOL_5, + SFX_GUARD_DUTY_2_GUN_COOL_6, + SFX_GUARD_DUTY_2_LOST_1, + SFX_GUARD_DUTY_2_LOST_2, + SFX_GUARD_DUTY_2_SAVED_1, + SFX_GUARD_DUTY_2_SAVED_2, + SFX_GUARD_DUTY_2_SHOCKED_1, + SFX_GUARD_DUTY_2_SHOCKED_2, + + SFX_GUARD_DUTY_3_BUMP_1, + SFX_GUARD_DUTY_3_BUMP_2, + SFX_GUARD_DUTY_3_BUMP_3, + SFX_GUARD_DUTY_3_BUMP_4, + SFX_GUARD_DUTY_3_BUMP_5, + SFX_GUARD_DUTY_3_BUMP_6, + SFX_GUARD_DUTY_3_BUMP_7, + SFX_GUARD_DUTY_3_BUMP_8, + SFX_GUARD_DUTY_3_BUMP_9, + SFX_GUARD_DUTY_3_BUMP_10, + SFX_GUARD_DUTY_3_CHAT_1, + SFX_GUARD_DUTY_3_CHAT_2, + SFX_GUARD_DUTY_3_CHAT_3, + SFX_GUARD_DUTY_3_CHAT_4, + SFX_GUARD_DUTY_3_CHAT_5, + SFX_GUARD_DUTY_3_CHAT_6, + SFX_GUARD_DUTY_3_CHAT_7, + SFX_GUARD_DUTY_3_CHAT_8, + SFX_GUARD_DUTY_3_CHAT_9, + SFX_GUARD_DUTY_3_CHAT_10, + SFX_GUARD_DUTY_3_DODGE_1, + SFX_GUARD_DUTY_3_DODGE_2, + SFX_GUARD_DUTY_3_DODGE_3, + SFX_GUARD_DUTY_3_DODGE_4, + SFX_GUARD_DUTY_3_DODGE_5, + SFX_GUARD_DUTY_3_DODGE_6, + SFX_GUARD_DUTY_3_DODGE_7, + SFX_GUARD_DUTY_3_DODGE_8, + SFX_GUARD_DUTY_3_DODGE_9, + SFX_GUARD_DUTY_3_EYEING_1, + SFX_GUARD_DUTY_3_EYEING_2, + SFX_GUARD_DUTY_3_FIGHT_1, + SFX_GUARD_DUTY_3_FIGHT_2, + SFX_GUARD_DUTY_3_FIGHT_3, + SFX_GUARD_DUTY_3_FIGHT_4, + SFX_GUARD_DUTY_3_FIGHT_5, + SFX_GUARD_DUTY_3_FIGHT_6, + SFX_GUARD_DUTY_3_FIGHT_7, + SFX_GUARD_DUTY_3_GUN_COOL_1, + SFX_GUARD_DUTY_3_GUN_COOL_2, + SFX_GUARD_DUTY_3_GUN_COOL_3, + SFX_GUARD_DUTY_3_GUN_COOL_4, + SFX_GUARD_DUTY_3_GUN_COOL_5, + SFX_GUARD_DUTY_3_GUN_COOL_6, + SFX_GUARD_DUTY_3_LOST_1, + SFX_GUARD_DUTY_3_LOST_2, + SFX_GUARD_DUTY_3_SAVED_1, + SFX_GUARD_DUTY_3_SAVED_2, + SFX_GUARD_DUTY_3_SHOCKED_1, + SFX_GUARD_DUTY_3_SHOCKED_2, + + SFX_VICE_VOICE_1_ARREST_1, + SFX_VICE_VOICE_1_ARREST_2, + SFX_VICE_VOICE_1_ARREST_3, + SFX_VICE_VOICE_1_MIAMIVICE_EXITING_CAR_1, + + SFX_VICE_VOICE_2_ARREST_1, + SFX_VICE_VOICE_2_ARREST_2, + SFX_VICE_VOICE_2_ARREST_3, + SFX_VICE_VOICE_2_MIAMIVICE_EXITING_CAR_1, + + SFX_VICE_VOICE_3_ARREST_1, + SFX_VICE_VOICE_3_ARREST_2, + SFX_VICE_VOICE_3_ARREST_3, + SFX_VICE_VOICE_3_MIAMIVICE_EXITING_CAR_1, + + SFX_VICE_VOICE_4_ARREST_1, + SFX_VICE_VOICE_4_ARREST_2, + SFX_VICE_VOICE_4_ARREST_3, + SFX_VICE_VOICE_4_MIAMIVICE_EXITING_CAR_1, + + SFX_VICE_VOICE_5_ARREST_1, + SFX_VICE_VOICE_5_ARREST_2, + SFX_VICE_VOICE_5_ARREST_3, + SFX_VICE_VOICE_5_MIAMIVICE_EXITING_CAR_1, + + SFX_VICE_VOICE_6_ARREST_1, + SFX_VICE_VOICE_6_ARREST_2, + SFX_VICE_VOICE_6_ARREST_3, + SFX_VICE_VOICE_6_MIAMIVICE_EXITING_CAR_1, + + SFX_DEFAULT_VOICE_BLOCKED_1, + SFX_DEFAULT_VOICE_BLOCKED_2, + SFX_DEFAULT_VOICE_BLOCKED_3, + SFX_DEFAULT_VOICE_BLOCKED_4, + SFX_DEFAULT_VOICE_BLOCKED_5, + SFX_DEFAULT_VOICE_BLOCKED_6, + SFX_DEFAULT_VOICE_BLOCKED_7, + SFX_DEFAULT_VOICE_BLOCKED_8, + SFX_DEFAULT_VOICE_BLOCKED_9, + SFX_DEFAULT_VOICE_BLOCKED_10, + SFX_DEFAULT_VOICE_BLOCKED_11, + SFX_DEFAULT_VOICE_BLOCKED_12, + SFX_DEFAULT_VOICE_BLOCKED_13, + SFX_DEFAULT_VOICE_BLOCKED_14, + SFX_DEFAULT_VOICE_BLOCKED_15, + SFX_DEFAULT_VOICE_BLOCKED_16, + SFX_DEFAULT_VOICE_BUMP_1, + SFX_DEFAULT_VOICE_BUMP_2, + SFX_DEFAULT_VOICE_BUMP_3, + SFX_DEFAULT_VOICE_BUMP_4, + SFX_DEFAULT_VOICE_BUMP_5, + SFX_DEFAULT_VOICE_BUMP_6, + SFX_DEFAULT_VOICE_BUMP_7, + SFX_DEFAULT_VOICE_BUMP_8, + SFX_DEFAULT_VOICE_BUMP_9, + SFX_DEFAULT_VOICE_BUMP_10, + SFX_DEFAULT_VOICE_BUMP_11, + SFX_DEFAULT_VOICE_BUMP_12, + SFX_DEFAULT_VOICE_BUMP_13, + SFX_DEFAULT_VOICE_BUMP_14, + SFX_DEFAULT_VOICE_BUMP_15, + SFX_DEFAULT_VOICE_BUMP_16, + SFX_DEFAULT_VOICE_BUMP_17, + SFX_DEFAULT_VOICE_BUMP_18, + SFX_DEFAULT_VOICE_BUMP_19, + SFX_DEFAULT_VOICE_BUMP_20, + SFX_DEFAULT_VOICE_BUMP_21, + SFX_DEFAULT_VOICE_BUMP_22, + SFX_DEFAULT_VOICE_BUMP_23, + SFX_DEFAULT_VOICE_BUMP_24, + SFX_DEFAULT_VOICE_BUMP_25, + SFX_DEFAULT_VOICE_CAR_CRASH_1, + SFX_DEFAULT_VOICE_CAR_CRASH_2, + SFX_DEFAULT_VOICE_CAR_CRASH_3, + SFX_DEFAULT_VOICE_CAR_CRASH_4, + SFX_DEFAULT_VOICE_CAR_CRASH_5, + SFX_DEFAULT_VOICE_CAR_CRASH_6, + SFX_DEFAULT_VOICE_CAR_CRASH_7, + SFX_DEFAULT_VOICE_CAR_CRASH_8, + SFX_DEFAULT_VOICE_CAR_CRASH_9, + SFX_DEFAULT_VOICE_CAR_CRASH_10, + SFX_DEFAULT_VOICE_CAR_CRASH_11, + SFX_DEFAULT_VOICE_CAR_CRASH_12, + SFX_DEFAULT_VOICE_CAR_CRASH_13, + SFX_DEFAULT_VOICE_CAR_CRASH_14, + SFX_DEFAULT_VOICE_CAR_CRASH_15, + SFX_DEFAULT_VOICE_CHAT_1, + SFX_DEFAULT_VOICE_CHAT_2, + SFX_DEFAULT_VOICE_CHAT_3, + SFX_DEFAULT_VOICE_CHAT_4, + SFX_DEFAULT_VOICE_CHAT_5, + SFX_DEFAULT_VOICE_CHAT_6, + SFX_DEFAULT_VOICE_CHAT_7, + SFX_DEFAULT_VOICE_CHAT_8, + SFX_DEFAULT_VOICE_CHAT_9, + SFX_DEFAULT_VOICE_CHAT_10, + SFX_DEFAULT_VOICE_CHAT_11, + SFX_DEFAULT_VOICE_CHAT_12, + SFX_DEFAULT_VOICE_CHAT_13, + SFX_DEFAULT_VOICE_CHAT_14, + SFX_DEFAULT_VOICE_CHAT_15, + SFX_DEFAULT_VOICE_CHAT_16, + SFX_DEFAULT_VOICE_CHAT_17, + SFX_DEFAULT_VOICE_CHAT_18, + SFX_DEFAULT_VOICE_CHAT_19, + SFX_DEFAULT_VOICE_CHAT_20, + SFX_DEFAULT_VOICE_CHAT_21, + SFX_DEFAULT_VOICE_CHAT_22, + SFX_DEFAULT_VOICE_CHAT_23, + SFX_DEFAULT_VOICE_CHAT_24, + SFX_DEFAULT_VOICE_CHAT_25, + SFX_DEFAULT_VOICE_DODGE_1, + SFX_DEFAULT_VOICE_DODGE_2, + SFX_DEFAULT_VOICE_DODGE_3, + SFX_DEFAULT_VOICE_DODGE_4, + SFX_DEFAULT_VOICE_DODGE_5, + SFX_DEFAULT_VOICE_DODGE_6, + SFX_DEFAULT_VOICE_DODGE_7, + SFX_DEFAULT_VOICE_DODGE_8, + SFX_DEFAULT_VOICE_DODGE_9, + SFX_DEFAULT_VOICE_DODGE_10, + SFX_DEFAULT_VOICE_DODGE_11, + SFX_DEFAULT_VOICE_DODGE_12, + SFX_DEFAULT_VOICE_DODGE_13, + SFX_DEFAULT_VOICE_DODGE_14, + SFX_DEFAULT_VOICE_DODGE_15, + SFX_DEFAULT_VOICE_DODGE_16, + SFX_DEFAULT_VOICE_DODGE_17, + SFX_DEFAULT_VOICE_DODGE_18, + SFX_DEFAULT_VOICE_DODGE_19, + SFX_DEFAULT_VOICE_EYEING_1, + SFX_DEFAULT_VOICE_EYEING_2, + SFX_DEFAULT_VOICE_EYEING_3, + SFX_DEFAULT_VOICE_EYEING_4, + SFX_DEFAULT_VOICE_EYEING_5, + SFX_DEFAULT_VOICE_EYEING_6, + SFX_DEFAULT_VOICE_FIGHT_1, + SFX_DEFAULT_VOICE_FIGHT_2, + SFX_DEFAULT_VOICE_FIGHT_3, + SFX_DEFAULT_VOICE_FIGHT_4, + SFX_DEFAULT_VOICE_FIGHT_5, + SFX_DEFAULT_VOICE_FIGHT_6, + SFX_DEFAULT_VOICE_FIGHT_7, + SFX_DEFAULT_VOICE_FIGHT_8, + SFX_DEFAULT_VOICE_FIGHT_9, + SFX_DEFAULT_VOICE_FIGHT_10, + SFX_DEFAULT_VOICE_FIGHT_11, + SFX_DEFAULT_VOICE_FIGHT_12, + SFX_DEFAULT_VOICE_FIGHT_13, + SFX_DEFAULT_VOICE_FIGHT_14, + SFX_DEFAULT_VOICE_FIGHT_15, + SFX_DEFAULT_VOICE_FIGHT_16, + SFX_DEFAULT_VOICE_GENERIC_CRASH_1, + SFX_DEFAULT_VOICE_GENERIC_CRASH_2, + SFX_DEFAULT_VOICE_GENERIC_CRASH_3, + SFX_DEFAULT_VOICE_GENERIC_CRASH_4, + SFX_DEFAULT_VOICE_GENERIC_CRASH_5, + SFX_DEFAULT_VOICE_GENERIC_CRASH_6, + SFX_DEFAULT_VOICE_GENERIC_CRASH_7, + SFX_DEFAULT_VOICE_GENERIC_CRASH_8, + SFX_DEFAULT_VOICE_GENERIC_CRASH_9, + SFX_DEFAULT_VOICE_GENERIC_CRASH_10, + SFX_DEFAULT_VOICE_GENERIC_CRASH_11, + SFX_DEFAULT_VOICE_GENERIC_CRASH_12, + SFX_DEFAULT_VOICE_GENERIC_CRASH_13, + SFX_DEFAULT_VOICE_GUN_PANIC_1, + SFX_DEFAULT_VOICE_GUN_PANIC_2, + SFX_DEFAULT_VOICE_GUN_PANIC_3, + SFX_DEFAULT_VOICE_GUN_PANIC_4, + SFX_DEFAULT_VOICE_GUN_PANIC_5, + SFX_DEFAULT_VOICE_GUN_PANIC_6, + SFX_DEFAULT_VOICE_GUN_PANIC_7, + SFX_DEFAULT_VOICE_GUN_PANIC_8, + SFX_DEFAULT_VOICE_GUN_PANIC_9, + SFX_DEFAULT_VOICE_GUN_PANIC_10, + SFX_DEFAULT_VOICE_GUN_PANIC_11, + SFX_DEFAULT_VOICE_GUN_PANIC_12, + SFX_DEFAULT_VOICE_JACKED_1, + SFX_DEFAULT_VOICE_JACKED_2, + SFX_DEFAULT_VOICE_JACKED_3, + SFX_DEFAULT_VOICE_JACKED_4, + SFX_DEFAULT_VOICE_JACKED_5, + SFX_DEFAULT_VOICE_JACKED_6, + SFX_DEFAULT_VOICE_JACKED_7, + SFX_DEFAULT_VOICE_JACKED_8, + SFX_DEFAULT_VOICE_JACKED_9, + SFX_DEFAULT_VOICE_JACKED_10, + SFX_DEFAULT_VOICE_JACKED_11, + SFX_DEFAULT_VOICE_JACKED_12, + SFX_DEFAULT_VOICE_JACKING_1, + SFX_DEFAULT_VOICE_JACKING_2, + SFX_DEFAULT_VOICE_JACKING_3, + SFX_DEFAULT_VOICE_JACKING_4, + SFX_DEFAULT_VOICE_JACKING_5, + SFX_DEFAULT_VOICE_JACKING_6, + SFX_DEFAULT_VOICE_JACKING_7, + SFX_DEFAULT_VOICE_JACKING_8, + SFX_DEFAULT_VOICE_JACKING_9, + SFX_DEFAULT_VOICE_JACKING_10, + SFX_DEFAULT_VOICE_JACKING_11, + SFX_DEFAULT_VOICE_JACKING_12, + SFX_DEFAULT_VOICE_JACKING_13, + SFX_DEFAULT_VOICE_LOST_1, + SFX_DEFAULT_VOICE_LOST_2, + SFX_DEFAULT_VOICE_LOST_3, + SFX_DEFAULT_VOICE_LOST_4, + SFX_DEFAULT_VOICE_LOST_5, + SFX_DEFAULT_VOICE_MUGGED_1, + SFX_DEFAULT_VOICE_MUGGED_2, + SFX_DEFAULT_VOICE_MUGGED_3, + SFX_DEFAULT_VOICE_MUGGED_4, + SFX_DEFAULT_VOICE_RUN_1, + SFX_DEFAULT_VOICE_RUN_2, + SFX_DEFAULT_VOICE_RUN_3, + SFX_DEFAULT_VOICE_RUN_4, + SFX_DEFAULT_VOICE_RUN_5, + SFX_DEFAULT_VOICE_RUN_6, + SFX_DEFAULT_VOICE_RUN_7, + SFX_DEFAULT_VOICE_RUN_8, + SFX_DEFAULT_VOICE_RUN_9, + SFX_DEFAULT_VOICE_RUN_10, + SFX_DEFAULT_VOICE_RUN_11, + SFX_DEFAULT_VOICE_RUN_12, + SFX_DEFAULT_VOICE_RUN_13, + SFX_DEFAULT_VOICE_RUN_14, + SFX_DEFAULT_VOICE_RUN_15, + SFX_DEFAULT_VOICE_RUN_16, + SFX_DEFAULT_VOICE_RUN_17, + SFX_DEFAULT_VOICE_RUN_18, + SFX_DEFAULT_VOICE_RUN_19, + SFX_DEFAULT_VOICE_SAVED_1, + SFX_DEFAULT_VOICE_SAVED_2, + SFX_DEFAULT_VOICE_SAVED_3, + SFX_DEFAULT_VOICE_SAVED_4, + SFX_DEFAULT_VOICE_SHOCKED_1, + SFX_DEFAULT_VOICE_SHOCKED_2, + SFX_DEFAULT_VOICE_SHOCKED_3, + SFX_DEFAULT_VOICE_SHOCKED_4, + SFX_DEFAULT_VOICE_SHOCKED_5, + SFX_DEFAULT_VOICE_SHOCKED_6, + SFX_DEFAULT_VOICE_TAXI_1, + SFX_DEFAULT_VOICE_TAXI_2, + SFX_DEFAULT_VOICE_TAXI_3, + SFX_DEFAULT_VOICE_TAXI_4, + SFX_DEFAULT_VOICE_TAXI_5, + + SFX_CUBAN_GANG_1_BLOCKED_1, + SFX_CUBAN_GANG_1_BLOCKED_2, + SFX_CUBAN_GANG_1_BLOCKED_3, + SFX_CUBAN_GANG_1_BLOCKED_4, + SFX_CUBAN_GANG_1_BLOCKED_5, + SFX_CUBAN_GANG_1_BLOCKED_6, + SFX_CUBAN_GANG_1_BLOCKED_7, + SFX_CUBAN_GANG_1_BLOCKED_8, + SFX_CUBAN_GANG_1_BUMP_1, + SFX_CUBAN_GANG_1_BUMP_2, + SFX_CUBAN_GANG_1_BUMP_3, + SFX_CUBAN_GANG_1_BUMP_4, + SFX_CUBAN_GANG_1_BUMP_5, + SFX_CUBAN_GANG_1_BUMP_6, + SFX_CUBAN_GANG_1_BUMP_7, + SFX_CUBAN_GANG_1_BUMP_8, + SFX_CUBAN_GANG_1_BUMP_9, + SFX_CUBAN_GANG_1_BUMP_10, + SFX_CUBAN_GANG_1_BUMP_11, + SFX_CUBAN_GANG_1_CAR_CRASH_1, + SFX_CUBAN_GANG_1_CAR_CRASH_2, + SFX_CUBAN_GANG_1_CAR_CRASH_3, + SFX_CUBAN_GANG_1_CAR_CRASH_4, + SFX_CUBAN_GANG_1_CAR_CRASH_5, + SFX_CUBAN_GANG_1_CAR_CRASH_6, + SFX_CUBAN_GANG_1_CAR_CRASH_7, + SFX_CUBAN_GANG_1_CAR_CRASH_8, + SFX_CUBAN_GANG_1_CHAT_1, + SFX_CUBAN_GANG_1_CHAT_2, + SFX_CUBAN_GANG_1_CHAT_3, + SFX_CUBAN_GANG_1_CHAT_4, + SFX_CUBAN_GANG_1_CHAT_5, + SFX_CUBAN_GANG_1_CHAT_6, + SFX_CUBAN_GANG_1_CHAT_7, + SFX_CUBAN_GANG_1_CHAT_8, + SFX_CUBAN_GANG_1_CHAT_9, + SFX_CUBAN_GANG_1_CHAT_10, + SFX_CUBAN_GANG_1_DODGE_1, + SFX_CUBAN_GANG_1_DODGE_2, + SFX_CUBAN_GANG_1_DODGE_3, + SFX_CUBAN_GANG_1_DODGE_4, + SFX_CUBAN_GANG_1_DODGE_5, + SFX_CUBAN_GANG_1_DODGE_6, + SFX_CUBAN_GANG_1_DODGE_7, + SFX_CUBAN_GANG_1_DODGE_8, + SFX_CUBAN_GANG_1_DODGE_9, + SFX_CUBAN_GANG_1_EYEING_1, + SFX_CUBAN_GANG_1_EYEING_2, + SFX_CUBAN_GANG_1_FIGHT_1, + SFX_CUBAN_GANG_1_FIGHT_2, + SFX_CUBAN_GANG_1_FIGHT_3, + SFX_CUBAN_GANG_1_FIGHT_4, + SFX_CUBAN_GANG_1_FIGHT_5, + SFX_CUBAN_GANG_1_FIGHT_6, + SFX_CUBAN_GANG_1_FIGHT_7, + SFX_CUBAN_GANG_1_FIGHT_8, + SFX_CUBAN_GANG_1_FIGHT_9, + SFX_CUBAN_GANG_1_GENERIC_CRASH_1, + SFX_CUBAN_GANG_1_GENERIC_CRASH_2, + SFX_CUBAN_GANG_1_GENERIC_CRASH_3, + SFX_CUBAN_GANG_1_GENERIC_CRASH_4, + SFX_CUBAN_GANG_1_GENERIC_CRASH_5, + SFX_CUBAN_GANG_1_GENERIC_CRASH_6, + SFX_CUBAN_GANG_1_GENERIC_CRASH_7, + SFX_CUBAN_GANG_1_GENERIC_CRASH_8, + SFX_CUBAN_GANG_1_GUN_COOL_1, + SFX_CUBAN_GANG_1_GUN_COOL_2, + SFX_CUBAN_GANG_1_GUN_COOL_3, + SFX_CUBAN_GANG_1_GUN_COOL_4, + SFX_CUBAN_GANG_1_GUN_COOL_5, + SFX_CUBAN_GANG_1_JACKED_1, + SFX_CUBAN_GANG_1_JACKED_2, + SFX_CUBAN_GANG_1_JACKED_3, + SFX_CUBAN_GANG_1_JACKED_4, + SFX_CUBAN_GANG_1_JACKING_1, + SFX_CUBAN_GANG_1_JACKING_2, + SFX_CUBAN_GANG_1_JACKING_3, + SFX_CUBAN_GANG_1_JACKING_4, + SFX_CUBAN_GANG_1_JACKING_5, + SFX_CUBAN_GANG_1_LOST_1, + SFX_CUBAN_GANG_1_LOST_2, + SFX_CUBAN_GANG_1_MUGGED_1, + SFX_CUBAN_GANG_1_MUGGED_2, + SFX_CUBAN_GANG_1_SAVED_1, + SFX_CUBAN_GANG_1_TAXI_1, + SFX_CUBAN_GANG_1_TAXI_2, + SFX_CUBAN_GANG_2_BLOCKED_1, + SFX_CUBAN_GANG_2_BLOCKED_2, + SFX_CUBAN_GANG_2_BLOCKED_3, + SFX_CUBAN_GANG_2_BLOCKED_4, + SFX_CUBAN_GANG_2_BLOCKED_5, + SFX_CUBAN_GANG_2_BLOCKED_6, + SFX_CUBAN_GANG_2_BLOCKED_7, + SFX_CUBAN_GANG_2_BLOCKED_8, + SFX_CUBAN_GANG_2_BUMP_1, + SFX_CUBAN_GANG_2_BUMP_2, + SFX_CUBAN_GANG_2_BUMP_3, + SFX_CUBAN_GANG_2_BUMP_4, + SFX_CUBAN_GANG_2_BUMP_5, + SFX_CUBAN_GANG_2_BUMP_6, + SFX_CUBAN_GANG_2_BUMP_7, + SFX_CUBAN_GANG_2_BUMP_8, + SFX_CUBAN_GANG_2_BUMP_9, + SFX_CUBAN_GANG_2_BUMP_10, + SFX_CUBAN_GANG_2_BUMP_11, + SFX_CUBAN_GANG_2_CAR_CRASH_1, + SFX_CUBAN_GANG_2_CAR_CRASH_2, + SFX_CUBAN_GANG_2_CAR_CRASH_3, + SFX_CUBAN_GANG_2_CAR_CRASH_4, + SFX_CUBAN_GANG_2_CAR_CRASH_5, + SFX_CUBAN_GANG_2_CAR_CRASH_6, + SFX_CUBAN_GANG_2_CAR_CRASH_7, + SFX_CUBAN_GANG_2_CAR_CRASH_8, + SFX_CUBAN_GANG_2_CHAT_1, + SFX_CUBAN_GANG_2_CHAT_2, + SFX_CUBAN_GANG_2_CHAT_3, + SFX_CUBAN_GANG_2_CHAT_4, + SFX_CUBAN_GANG_2_CHAT_5, + SFX_CUBAN_GANG_2_CHAT_6, + SFX_CUBAN_GANG_2_CHAT_7, + SFX_CUBAN_GANG_2_CHAT_8, + SFX_CUBAN_GANG_2_CHAT_9, + SFX_CUBAN_GANG_2_CHAT_10, + SFX_CUBAN_GANG_2_DODGE_1, + SFX_CUBAN_GANG_2_DODGE_2, + SFX_CUBAN_GANG_2_DODGE_3, + SFX_CUBAN_GANG_2_DODGE_4, + SFX_CUBAN_GANG_2_DODGE_5, + SFX_CUBAN_GANG_2_DODGE_6, + SFX_CUBAN_GANG_2_DODGE_7, + SFX_CUBAN_GANG_2_DODGE_8, + SFX_CUBAN_GANG_2_DODGE_9, + SFX_CUBAN_GANG_2_EYEING_1, + SFX_CUBAN_GANG_2_EYEING_2, + SFX_CUBAN_GANG_2_FIGHT_1, + SFX_CUBAN_GANG_2_FIGHT_2, + SFX_CUBAN_GANG_2_FIGHT_3, + SFX_CUBAN_GANG_2_FIGHT_4, + SFX_CUBAN_GANG_2_FIGHT_5, + SFX_CUBAN_GANG_2_FIGHT_6, + SFX_CUBAN_GANG_2_FIGHT_7, + SFX_CUBAN_GANG_2_FIGHT_8, + SFX_CUBAN_GANG_2_FIGHT_9, + SFX_CUBAN_GANG_2_GENERIC_CRASH_1, + SFX_CUBAN_GANG_2_GENERIC_CRASH_2, + SFX_CUBAN_GANG_2_GENERIC_CRASH_3, + SFX_CUBAN_GANG_2_GENERIC_CRASH_4, + SFX_CUBAN_GANG_2_GENERIC_CRASH_5, + SFX_CUBAN_GANG_2_GENERIC_CRASH_6, + SFX_CUBAN_GANG_2_GENERIC_CRASH_7, + SFX_CUBAN_GANG_2_GENERIC_CRASH_8, + SFX_CUBAN_GANG_2_GUN_COOL_1, + SFX_CUBAN_GANG_2_GUN_COOL_2, + SFX_CUBAN_GANG_2_GUN_COOL_3, + SFX_CUBAN_GANG_2_GUN_COOL_4, + SFX_CUBAN_GANG_2_GUN_COOL_5, + SFX_CUBAN_GANG_2_JACKED_1, + SFX_CUBAN_GANG_2_JACKED_2, + SFX_CUBAN_GANG_2_JACKED_3, + SFX_CUBAN_GANG_2_JACKED_4, + SFX_CUBAN_GANG_2_JACKING_1, + SFX_CUBAN_GANG_2_JACKING_2, + SFX_CUBAN_GANG_2_JACKING_3, + SFX_CUBAN_GANG_2_JACKING_4, + SFX_CUBAN_GANG_2_JACKING_5, + SFX_CUBAN_GANG_2_LOST_1, + SFX_CUBAN_GANG_2_LOST_2, + SFX_CUBAN_GANG_2_MUGGED_1, + SFX_CUBAN_GANG_2_MUGGED_2, + SFX_CUBAN_GANG_2_SAVED_1, + SFX_CUBAN_GANG_2_TAXI_1, + SFX_CUBAN_GANG_2_TAXI_2, + SFX_CUBAN_GANG_3_BLOCKED_1, + SFX_CUBAN_GANG_3_BLOCKED_2, + SFX_CUBAN_GANG_3_BLOCKED_3, + SFX_CUBAN_GANG_3_BLOCKED_4, + SFX_CUBAN_GANG_3_BLOCKED_5, + SFX_CUBAN_GANG_3_BLOCKED_6, + SFX_CUBAN_GANG_3_BLOCKED_7, + SFX_CUBAN_GANG_3_BLOCKED_8, + SFX_CUBAN_GANG_3_BUMP_1, + SFX_CUBAN_GANG_3_BUMP_2, + SFX_CUBAN_GANG_3_BUMP_3, + SFX_CUBAN_GANG_3_BUMP_4, + SFX_CUBAN_GANG_3_BUMP_5, + SFX_CUBAN_GANG_3_BUMP_6, + SFX_CUBAN_GANG_3_BUMP_7, + SFX_CUBAN_GANG_3_BUMP_8, + SFX_CUBAN_GANG_3_BUMP_9, + SFX_CUBAN_GANG_3_BUMP_10, + SFX_CUBAN_GANG_3_BUMP_11, + SFX_CUBAN_GANG_3_CAR_CRASH_1, + SFX_CUBAN_GANG_3_CAR_CRASH_2, + SFX_CUBAN_GANG_3_CAR_CRASH_3, + SFX_CUBAN_GANG_3_CAR_CRASH_4, + SFX_CUBAN_GANG_3_CAR_CRASH_5, + SFX_CUBAN_GANG_3_CAR_CRASH_6, + SFX_CUBAN_GANG_3_CAR_CRASH_7, + SFX_CUBAN_GANG_3_CAR_CRASH_8, + SFX_CUBAN_GANG_3_CHAT_1, + SFX_CUBAN_GANG_3_CHAT_2, + SFX_CUBAN_GANG_3_CHAT_3, + SFX_CUBAN_GANG_3_CHAT_4, + SFX_CUBAN_GANG_3_CHAT_5, + SFX_CUBAN_GANG_3_CHAT_6, + SFX_CUBAN_GANG_3_CHAT_7, + SFX_CUBAN_GANG_3_CHAT_8, + SFX_CUBAN_GANG_3_CHAT_9, + SFX_CUBAN_GANG_3_CHAT_10, + SFX_CUBAN_GANG_3_DODGE_1, + SFX_CUBAN_GANG_3_DODGE_2, + SFX_CUBAN_GANG_3_DODGE_3, + SFX_CUBAN_GANG_3_DODGE_4, + SFX_CUBAN_GANG_3_DODGE_5, + SFX_CUBAN_GANG_3_DODGE_6, + SFX_CUBAN_GANG_3_DODGE_7, + SFX_CUBAN_GANG_3_DODGE_8, + SFX_CUBAN_GANG_3_DODGE_9, + SFX_CUBAN_GANG_3_EYEING_1, + SFX_CUBAN_GANG_3_EYEING_2, + SFX_CUBAN_GANG_3_FIGHT_1, + SFX_CUBAN_GANG_3_FIGHT_2, + SFX_CUBAN_GANG_3_FIGHT_3, + SFX_CUBAN_GANG_3_FIGHT_4, + SFX_CUBAN_GANG_3_FIGHT_5, + SFX_CUBAN_GANG_3_FIGHT_6, + SFX_CUBAN_GANG_3_FIGHT_7, + SFX_CUBAN_GANG_3_FIGHT_8, + SFX_CUBAN_GANG_3_FIGHT_9, + SFX_CUBAN_GANG_3_GENERIC_CRASH_1, + SFX_CUBAN_GANG_3_GENERIC_CRASH_2, + SFX_CUBAN_GANG_3_GENERIC_CRASH_3, + SFX_CUBAN_GANG_3_GENERIC_CRASH_4, + SFX_CUBAN_GANG_3_GENERIC_CRASH_5, + SFX_CUBAN_GANG_3_GENERIC_CRASH_6, + SFX_CUBAN_GANG_3_GENERIC_CRASH_7, + SFX_CUBAN_GANG_3_GENERIC_CRASH_8, + SFX_CUBAN_GANG_3_GUN_COOL_1, + SFX_CUBAN_GANG_3_GUN_COOL_2, + SFX_CUBAN_GANG_3_GUN_COOL_3, + SFX_CUBAN_GANG_3_GUN_COOL_4, + SFX_CUBAN_GANG_3_GUN_COOL_5, + SFX_CUBAN_GANG_3_JACKED_1, + SFX_CUBAN_GANG_3_JACKED_2, + SFX_CUBAN_GANG_3_JACKED_3, + SFX_CUBAN_GANG_3_JACKED_4, + SFX_CUBAN_GANG_3_JACKING_1, + SFX_CUBAN_GANG_3_JACKING_2, + SFX_CUBAN_GANG_3_JACKING_3, + SFX_CUBAN_GANG_3_JACKING_4, + SFX_CUBAN_GANG_3_JACKING_5, + SFX_CUBAN_GANG_3_LOST_1, + SFX_CUBAN_GANG_3_LOST_2, + SFX_CUBAN_GANG_3_MUGGED_1, + SFX_CUBAN_GANG_3_MUGGED_2, + SFX_CUBAN_GANG_3_SAVED_1, + SFX_CUBAN_GANG_3_TAXI_1, + SFX_CUBAN_GANG_3_TAXI_2, + + SFX_BIKER_GANG_1_BLOCKED_1, + SFX_BIKER_GANG_1_BLOCKED_2, + SFX_BIKER_GANG_1_BLOCKED_3, + SFX_BIKER_GANG_1_BLOCKED_4, + SFX_BIKER_GANG_1_BLOCKED_5, + SFX_BIKER_GANG_1_BLOCKED_6, + SFX_BIKER_GANG_1_BLOCKED_7, + SFX_BIKER_GANG_1_BLOCKED_8, + SFX_BIKER_GANG_1_BLOCKED_9, + SFX_BIKER_GANG_1_BLOCKED_10, + SFX_BIKER_GANG_1_BUMP_1, + SFX_BIKER_GANG_1_BUMP_2, + SFX_BIKER_GANG_1_BUMP_3, + SFX_BIKER_GANG_1_BUMP_4, + SFX_BIKER_GANG_1_BUMP_5, + SFX_BIKER_GANG_1_BUMP_6, + SFX_BIKER_GANG_1_BUMP_7, + SFX_BIKER_GANG_1_BUMP_8, + SFX_BIKER_GANG_1_BUMP_9, + SFX_BIKER_GANG_1_BUMP_10, + SFX_BIKER_GANG_1_CHAT_1, + SFX_BIKER_GANG_1_CHAT_2, + SFX_BIKER_GANG_1_CHAT_3, + SFX_BIKER_GANG_1_CHAT_4, + SFX_BIKER_GANG_1_CHAT_5, + SFX_BIKER_GANG_1_CHAT_6, + SFX_BIKER_GANG_1_CHAT_7, + SFX_BIKER_GANG_1_CHAT_8, + SFX_BIKER_GANG_1_CHAT_9, + SFX_BIKER_GANG_1_CHAT_10, + SFX_BIKER_GANG_1_CHAT_11, + SFX_BIKER_GANG_1_CHAT_12, + SFX_BIKER_GANG_1_DODGE_1, + SFX_BIKER_GANG_1_DODGE_2, + SFX_BIKER_GANG_1_DODGE_3, + SFX_BIKER_GANG_1_DODGE_4, + SFX_BIKER_GANG_1_DODGE_5, + SFX_BIKER_GANG_1_DODGE_6, + SFX_BIKER_GANG_1_DODGE_7, + SFX_BIKER_GANG_1_DODGE_8, + SFX_BIKER_GANG_1_DODGE_9, + SFX_BIKER_GANG_1_FIGHT_1, + SFX_BIKER_GANG_1_FIGHT_2, + SFX_BIKER_GANG_1_FIGHT_3, + SFX_BIKER_GANG_1_FIGHT_4, + SFX_BIKER_GANG_1_FIGHT_5, + SFX_BIKER_GANG_1_FIGHT_6, + SFX_BIKER_GANG_1_FIGHT_7, + SFX_BIKER_GANG_1_FIGHT_8, + SFX_BIKER_GANG_1_FIGHT_9, + SFX_BIKER_GANG_1_GENERIC_CRASH_1, + SFX_BIKER_GANG_1_GENERIC_CRASH_2, + SFX_BIKER_GANG_1_GENERIC_CRASH_3, + SFX_BIKER_GANG_1_GENERIC_CRASH_4, + SFX_BIKER_GANG_1_GENERIC_CRASH_5, + SFX_BIKER_GANG_1_GENERIC_CRASH_6, + SFX_BIKER_GANG_1_GENERIC_CRASH_7, + SFX_BIKER_GANG_1_GENERIC_CRASH_8, + SFX_BIKER_GANG_1_GUN_COOL_1, + SFX_BIKER_GANG_1_GUN_COOL_2, + SFX_BIKER_GANG_1_GUN_COOL_3, + SFX_BIKER_GANG_1_GUN_COOL_4, + SFX_BIKER_GANG_1_GUN_COOL_5, + SFX_BIKER_GANG_1_JACKED_1, + SFX_BIKER_GANG_1_JACKED_2, + SFX_BIKER_GANG_1_JACKED_3, + SFX_BIKER_GANG_1_JACKED_4, + SFX_BIKER_GANG_1_JACKED_5, + SFX_BIKER_GANG_1_JACKED_6, + SFX_BIKER_GANG_1_JACKED_7, + SFX_BIKER_GANG_1_JACKED_8, + SFX_BIKER_GANG_1_JACKING_1, + SFX_BIKER_GANG_1_JACKING_2, + SFX_BIKER_GANG_1_JACKING_3, + SFX_BIKER_GANG_1_JACKING_4, + SFX_BIKER_GANG_1_LOST_1, + SFX_BIKER_GANG_1_LOST_2, + SFX_BIKER_GANG_1_MUGGED_1, + SFX_BIKER_GANG_1_MUGGED_2, + SFX_BIKER_GANG_1_SAVED_1, + SFX_BIKER_GANG_1_TAXI_1, + SFX_BIKER_GANG_1_TAXI_2, + + SFX_BIKER_GANG_2_BLOCKED_1, + SFX_BIKER_GANG_2_BLOCKED_2, + SFX_BIKER_GANG_2_BLOCKED_3, + SFX_BIKER_GANG_2_BLOCKED_4, + SFX_BIKER_GANG_2_BLOCKED_5, + SFX_BIKER_GANG_2_BLOCKED_6, + SFX_BIKER_GANG_2_BLOCKED_7, + SFX_BIKER_GANG_2_BLOCKED_8, + SFX_BIKER_GANG_2_BLOCKED_9, + SFX_BIKER_GANG_2_BLOCKED_10, + SFX_BIKER_GANG_2_BUMP_1, + SFX_BIKER_GANG_2_BUMP_2, + SFX_BIKER_GANG_2_BUMP_3, + SFX_BIKER_GANG_2_BUMP_4, + SFX_BIKER_GANG_2_BUMP_5, + SFX_BIKER_GANG_2_BUMP_6, + SFX_BIKER_GANG_2_BUMP_7, + SFX_BIKER_GANG_2_BUMP_8, + SFX_BIKER_GANG_2_BUMP_9, + SFX_BIKER_GANG_2_BUMP_10, + SFX_BIKER_GANG_2_CHAT_1, + SFX_BIKER_GANG_2_CHAT_2, + SFX_BIKER_GANG_2_CHAT_3, + SFX_BIKER_GANG_2_CHAT_4, + SFX_BIKER_GANG_2_CHAT_5, + SFX_BIKER_GANG_2_CHAT_6, + SFX_BIKER_GANG_2_CHAT_7, + SFX_BIKER_GANG_2_CHAT_8, + SFX_BIKER_GANG_2_CHAT_9, + SFX_BIKER_GANG_2_CHAT_10, + SFX_BIKER_GANG_2_CHAT_11, + SFX_BIKER_GANG_2_CHAT_12, + SFX_BIKER_GANG_2_DODGE_1, + SFX_BIKER_GANG_2_DODGE_2, + SFX_BIKER_GANG_2_DODGE_3, + SFX_BIKER_GANG_2_DODGE_4, + SFX_BIKER_GANG_2_DODGE_5, + SFX_BIKER_GANG_2_DODGE_6, + SFX_BIKER_GANG_2_DODGE_7, + SFX_BIKER_GANG_2_DODGE_8, + SFX_BIKER_GANG_2_DODGE_9, + SFX_BIKER_GANG_2_FIGHT_1, + SFX_BIKER_GANG_2_FIGHT_2, + SFX_BIKER_GANG_2_FIGHT_3, + SFX_BIKER_GANG_2_FIGHT_4, + SFX_BIKER_GANG_2_FIGHT_5, + SFX_BIKER_GANG_2_FIGHT_6, + SFX_BIKER_GANG_2_FIGHT_7, + SFX_BIKER_GANG_2_FIGHT_8, + SFX_BIKER_GANG_2_FIGHT_9, + SFX_BIKER_GANG_2_GENERIC_CRASH_1, + SFX_BIKER_GANG_2_GENERIC_CRASH_2, + SFX_BIKER_GANG_2_GENERIC_CRASH_3, + SFX_BIKER_GANG_2_GENERIC_CRASH_4, + SFX_BIKER_GANG_2_GENERIC_CRASH_5, + SFX_BIKER_GANG_2_GENERIC_CRASH_6, + SFX_BIKER_GANG_2_GENERIC_CRASH_7, + SFX_BIKER_GANG_2_GENERIC_CRASH_8, + SFX_BIKER_GANG_2_GUN_COOL_1, + SFX_BIKER_GANG_2_GUN_COOL_2, + SFX_BIKER_GANG_2_GUN_COOL_3, + SFX_BIKER_GANG_2_GUN_COOL_4, + SFX_BIKER_GANG_2_GUN_COOL_5, + SFX_BIKER_GANG_2_JACKED_1, + SFX_BIKER_GANG_2_JACKED_2, + SFX_BIKER_GANG_2_JACKED_3, + SFX_BIKER_GANG_2_JACKED_4, + SFX_BIKER_GANG_2_JACKED_5, + SFX_BIKER_GANG_2_JACKED_6, + SFX_BIKER_GANG_2_JACKED_7, + SFX_BIKER_GANG_2_JACKED_8, + SFX_BIKER_GANG_2_JACKING_1, + SFX_BIKER_GANG_2_JACKING_2, + SFX_BIKER_GANG_2_JACKING_3, + SFX_BIKER_GANG_2_JACKING_4, + SFX_BIKER_GANG_2_LOST_1, + SFX_BIKER_GANG_2_LOST_2, + SFX_BIKER_GANG_2_MUGGED_1, + SFX_BIKER_GANG_2_MUGGED_2, + SFX_BIKER_GANG_2_SAVED_1, + SFX_BIKER_GANG_2_TAXI_1, + SFX_BIKER_GANG_2_TAXI_2, + + SFX_BIKER_GANG_3_BLOCKED_1, + SFX_BIKER_GANG_3_BLOCKED_2, + SFX_BIKER_GANG_3_BLOCKED_3, + SFX_BIKER_GANG_3_BLOCKED_4, + SFX_BIKER_GANG_3_BLOCKED_5, + SFX_BIKER_GANG_3_BLOCKED_6, + SFX_BIKER_GANG_3_BLOCKED_7, + SFX_BIKER_GANG_3_BLOCKED_8, + SFX_BIKER_GANG_3_BLOCKED_9, + SFX_BIKER_GANG_3_BLOCKED_10, + SFX_BIKER_GANG_3_BUMP_1, + SFX_BIKER_GANG_3_BUMP_2, + SFX_BIKER_GANG_3_BUMP_3, + SFX_BIKER_GANG_3_BUMP_4, + SFX_BIKER_GANG_3_BUMP_5, + SFX_BIKER_GANG_3_BUMP_6, + SFX_BIKER_GANG_3_BUMP_7, + SFX_BIKER_GANG_3_BUMP_8, + SFX_BIKER_GANG_3_BUMP_9, + SFX_BIKER_GANG_3_BUMP_10, + SFX_BIKER_GANG_3_CHAT_1, + SFX_BIKER_GANG_3_CHAT_2, + SFX_BIKER_GANG_3_CHAT_3, + SFX_BIKER_GANG_3_CHAT_4, + SFX_BIKER_GANG_3_CHAT_5, + SFX_BIKER_GANG_3_CHAT_6, + SFX_BIKER_GANG_3_CHAT_7, + SFX_BIKER_GANG_3_CHAT_8, + SFX_BIKER_GANG_3_CHAT_9, + SFX_BIKER_GANG_3_CHAT_10, + SFX_BIKER_GANG_3_CHAT_11, + SFX_BIKER_GANG_3_CHAT_12, + SFX_BIKER_GANG_3_DODGE_1, + SFX_BIKER_GANG_3_DODGE_2, + SFX_BIKER_GANG_3_DODGE_3, + SFX_BIKER_GANG_3_DODGE_4, + SFX_BIKER_GANG_3_DODGE_5, + SFX_BIKER_GANG_3_DODGE_6, + SFX_BIKER_GANG_3_DODGE_7, + SFX_BIKER_GANG_3_DODGE_8, + SFX_BIKER_GANG_3_DODGE_9, + SFX_BIKER_GANG_3_FIGHT_1, + SFX_BIKER_GANG_3_FIGHT_2, + SFX_BIKER_GANG_3_FIGHT_3, + SFX_BIKER_GANG_3_FIGHT_4, + SFX_BIKER_GANG_3_FIGHT_5, + SFX_BIKER_GANG_3_FIGHT_6, + SFX_BIKER_GANG_3_FIGHT_7, + SFX_BIKER_GANG_3_FIGHT_8, + SFX_BIKER_GANG_3_FIGHT_9, + SFX_BIKER_GANG_3_GENERIC_CRASH_1, + SFX_BIKER_GANG_3_GENERIC_CRASH_2, + SFX_BIKER_GANG_3_GENERIC_CRASH_3, + SFX_BIKER_GANG_3_GENERIC_CRASH_4, + SFX_BIKER_GANG_3_GENERIC_CRASH_5, + SFX_BIKER_GANG_3_GENERIC_CRASH_6, + SFX_BIKER_GANG_3_GENERIC_CRASH_7, + SFX_BIKER_GANG_3_GENERIC_CRASH_8, + SFX_BIKER_GANG_3_GUN_COOL_1, + SFX_BIKER_GANG_3_GUN_COOL_2, + SFX_BIKER_GANG_3_GUN_COOL_3, + SFX_BIKER_GANG_3_GUN_COOL_4, + SFX_BIKER_GANG_3_GUN_COOL_5, + SFX_BIKER_GANG_3_JACKED_1, + SFX_BIKER_GANG_3_JACKED_2, + SFX_BIKER_GANG_3_JACKED_3, + SFX_BIKER_GANG_3_JACKED_4, + SFX_BIKER_GANG_3_JACKED_5, + SFX_BIKER_GANG_3_JACKED_6, + SFX_BIKER_GANG_3_JACKED_7, + SFX_BIKER_GANG_3_JACKED_8, + SFX_BIKER_GANG_3_JACKING_1, + SFX_BIKER_GANG_3_JACKING_2, + SFX_BIKER_GANG_3_JACKING_3, + SFX_BIKER_GANG_3_JACKING_4, + SFX_BIKER_GANG_3_LOST_1, + SFX_BIKER_GANG_3_LOST_2, + SFX_BIKER_GANG_3_MUGGED_1, + SFX_BIKER_GANG_3_MUGGED_2, + SFX_BIKER_GANG_3_SAVED_1, + SFX_BIKER_GANG_3_TAXI_1, + SFX_BIKER_GANG_3_TAXI_2, + + SFX_HAITIAN_GANG_1_BLOCKED_1, + SFX_HAITIAN_GANG_1_BLOCKED_2, + SFX_HAITIAN_GANG_1_BLOCKED_3, + SFX_HAITIAN_GANG_1_BLOCKED_4, + SFX_HAITIAN_GANG_1_BLOCKED_5, + SFX_HAITIAN_GANG_1_BLOCKED_6, + SFX_HAITIAN_GANG_1_BLOCKED_7, + SFX_HAITIAN_GANG_1_BLOCKED_8, + SFX_HAITIAN_GANG_1_BLOCKED_9, + SFX_HAITIAN_GANG_1_BUMP_1, + SFX_HAITIAN_GANG_1_BUMP_2, + SFX_HAITIAN_GANG_1_BUMP_3, + SFX_HAITIAN_GANG_1_BUMP_4, + SFX_HAITIAN_GANG_1_BUMP_5, + SFX_HAITIAN_GANG_1_BUMP_6, + SFX_HAITIAN_GANG_1_BUMP_7, + SFX_HAITIAN_GANG_1_BUMP_8, + SFX_HAITIAN_GANG_1_BUMP_9, + SFX_HAITIAN_GANG_1_BUMP_10, + SFX_HAITIAN_GANG_1_BUMP_11, + SFX_HAITIAN_GANG_1_BUMP_12, + SFX_HAITIAN_GANG_1_CAR_CRASH_1, + SFX_HAITIAN_GANG_1_CAR_CRASH_2, + SFX_HAITIAN_GANG_1_CAR_CRASH_3, + SFX_HAITIAN_GANG_1_CAR_CRASH_4, + SFX_HAITIAN_GANG_1_CAR_CRASH_5, + SFX_HAITIAN_GANG_1_CAR_CRASH_6, + SFX_HAITIAN_GANG_1_CAR_CRASH_7, + SFX_HAITIAN_GANG_1_CAR_CRASH_8, + SFX_HAITIAN_GANG_1_CAR_CRASH_9, + SFX_HAITIAN_GANG_1_CHAT_1, + SFX_HAITIAN_GANG_1_CHAT_2, + SFX_HAITIAN_GANG_1_CHAT_3, + SFX_HAITIAN_GANG_1_CHAT_4, + SFX_HAITIAN_GANG_1_CHAT_5, + SFX_HAITIAN_GANG_1_CHAT_6, + SFX_HAITIAN_GANG_1_CHAT_7, + SFX_HAITIAN_GANG_1_CHAT_8, + SFX_HAITIAN_GANG_1_CHAT_9, + SFX_HAITIAN_GANG_1_CHAT_10, + SFX_HAITIAN_GANG_1_CHAT_11, + SFX_HAITIAN_GANG_1_CHAT_12, + SFX_HAITIAN_GANG_1_CHAT_13, + SFX_HAITIAN_GANG_1_CHAT_14, + SFX_HAITIAN_GANG_1_DODGE_1, + SFX_HAITIAN_GANG_1_DODGE_2, + SFX_HAITIAN_GANG_1_DODGE_3, + SFX_HAITIAN_GANG_1_DODGE_4, + SFX_HAITIAN_GANG_1_DODGE_5, + SFX_HAITIAN_GANG_1_DODGE_6, + SFX_HAITIAN_GANG_1_DODGE_7, + SFX_HAITIAN_GANG_1_DODGE_8, + SFX_HAITIAN_GANG_1_DODGE_9, + SFX_HAITIAN_GANG_1_DODGE_10, + SFX_HAITIAN_GANG_1_EYEING_1, + SFX_HAITIAN_GANG_1_EYEING_2, + SFX_HAITIAN_GANG_1_FIGHT_1, + SFX_HAITIAN_GANG_1_FIGHT_2, + SFX_HAITIAN_GANG_1_FIGHT_3, + SFX_HAITIAN_GANG_1_FIGHT_4, + SFX_HAITIAN_GANG_1_FIGHT_5, + SFX_HAITIAN_GANG_1_FIGHT_6, + SFX_HAITIAN_GANG_1_FIGHT_7, + SFX_HAITIAN_GANG_1_FIGHT_8, + SFX_HAITIAN_GANG_1_FIGHT_9, + SFX_HAITIAN_GANG_1_FIGHT_10, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_1, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_2, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_3, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_4, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_5, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_6, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_7, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_8, + SFX_HAITIAN_GANG_1_GENERIC_CRASH_9, + SFX_HAITIAN_GANG_1_GUN_COOL_1, + SFX_HAITIAN_GANG_1_GUN_COOL_2, + SFX_HAITIAN_GANG_1_GUN_COOL_3, + SFX_HAITIAN_GANG_1_GUN_COOL_4, + SFX_HAITIAN_GANG_1_GUN_COOL_5, + SFX_HAITIAN_GANG_1_JACKED_1, + SFX_HAITIAN_GANG_1_JACKED_2, + SFX_HAITIAN_GANG_1_JACKED_3, + SFX_HAITIAN_GANG_1_JACKED_4, + SFX_HAITIAN_GANG_1_JACKED_5, + SFX_HAITIAN_GANG_1_JACKED_6, + SFX_HAITIAN_GANG_1_JACKING_1, + SFX_HAITIAN_GANG_1_JACKING_2, + SFX_HAITIAN_GANG_1_JACKING_3, + SFX_HAITIAN_GANG_1_JACKING_4, + SFX_HAITIAN_GANG_1_LOST_1, + SFX_HAITIAN_GANG_1_LOST_2, + SFX_HAITIAN_GANG_1_LOST_3, + SFX_HAITIAN_GANG_1_LOST_4, + SFX_HAITIAN_GANG_1_MUGGED_1, + SFX_HAITIAN_GANG_1_MUGGED_2, + SFX_HAITIAN_GANG_1_MUGGED_3, + SFX_HAITIAN_GANG_1_SAVED_1, + SFX_HAITIAN_GANG_1_TAXI_1, + + + SFX_HAITIAN_GANG_2_BLOCKED_1, + SFX_HAITIAN_GANG_2_BLOCKED_2, + SFX_HAITIAN_GANG_2_BLOCKED_3, + SFX_HAITIAN_GANG_2_BLOCKED_4, + SFX_HAITIAN_GANG_2_BLOCKED_5, + SFX_HAITIAN_GANG_2_BLOCKED_6, + SFX_HAITIAN_GANG_2_BLOCKED_7, + SFX_HAITIAN_GANG_2_BLOCKED_8, + SFX_HAITIAN_GANG_2_BLOCKED_9, + SFX_HAITIAN_GANG_2_BUMP_1, + SFX_HAITIAN_GANG_2_BUMP_2, + SFX_HAITIAN_GANG_2_BUMP_3, + SFX_HAITIAN_GANG_2_BUMP_4, + SFX_HAITIAN_GANG_2_BUMP_5, + SFX_HAITIAN_GANG_2_BUMP_6, + SFX_HAITIAN_GANG_2_BUMP_7, + SFX_HAITIAN_GANG_2_BUMP_8, + SFX_HAITIAN_GANG_2_BUMP_9, + SFX_HAITIAN_GANG_2_BUMP_10, + SFX_HAITIAN_GANG_2_BUMP_11, + SFX_HAITIAN_GANG_2_BUMP_12, + SFX_HAITIAN_GANG_2_CAR_CRASH_1, + SFX_HAITIAN_GANG_2_CAR_CRASH_2, + SFX_HAITIAN_GANG_2_CAR_CRASH_3, + SFX_HAITIAN_GANG_2_CAR_CRASH_4, + SFX_HAITIAN_GANG_2_CAR_CRASH_5, + SFX_HAITIAN_GANG_2_CAR_CRASH_6, + SFX_HAITIAN_GANG_2_CAR_CRASH_7, + SFX_HAITIAN_GANG_2_CAR_CRASH_8, + SFX_HAITIAN_GANG_2_CAR_CRASH_9, + SFX_HAITIAN_GANG_2_CHAT_1, + SFX_HAITIAN_GANG_2_CHAT_2, + SFX_HAITIAN_GANG_2_CHAT_3, + SFX_HAITIAN_GANG_2_CHAT_4, + SFX_HAITIAN_GANG_2_CHAT_5, + SFX_HAITIAN_GANG_2_CHAT_6, + SFX_HAITIAN_GANG_2_CHAT_7, + SFX_HAITIAN_GANG_2_CHAT_8, + SFX_HAITIAN_GANG_2_CHAT_9, + SFX_HAITIAN_GANG_2_CHAT_10, + SFX_HAITIAN_GANG_2_CHAT_11, + SFX_HAITIAN_GANG_2_CHAT_12, + SFX_HAITIAN_GANG_2_CHAT_13, + SFX_HAITIAN_GANG_2_CHAT_14, + SFX_HAITIAN_GANG_2_DODGE_1, + SFX_HAITIAN_GANG_2_DODGE_2, + SFX_HAITIAN_GANG_2_DODGE_3, + SFX_HAITIAN_GANG_2_DODGE_4, + SFX_HAITIAN_GANG_2_DODGE_5, + SFX_HAITIAN_GANG_2_DODGE_6, + SFX_HAITIAN_GANG_2_DODGE_7, + SFX_HAITIAN_GANG_2_DODGE_8, + SFX_HAITIAN_GANG_2_DODGE_9, + SFX_HAITIAN_GANG_2_DODGE_10, + SFX_HAITIAN_GANG_2_EYEING_1, + SFX_HAITIAN_GANG_2_EYEING_2, + SFX_HAITIAN_GANG_2_FIGHT_1, + SFX_HAITIAN_GANG_2_FIGHT_2, + SFX_HAITIAN_GANG_2_FIGHT_3, + SFX_HAITIAN_GANG_2_FIGHT_4, + SFX_HAITIAN_GANG_2_FIGHT_5, + SFX_HAITIAN_GANG_2_FIGHT_6, + SFX_HAITIAN_GANG_2_FIGHT_7, + SFX_HAITIAN_GANG_2_FIGHT_8, + SFX_HAITIAN_GANG_2_FIGHT_9, + SFX_HAITIAN_GANG_2_FIGHT_10, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_1, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_2, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_3, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_4, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_5, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_6, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_7, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_8, + SFX_HAITIAN_GANG_2_GENERIC_CRASH_9, + SFX_HAITIAN_GANG_2_GUN_COOL_1, + SFX_HAITIAN_GANG_2_GUN_COOL_2, + SFX_HAITIAN_GANG_2_GUN_COOL_3, + SFX_HAITIAN_GANG_2_GUN_COOL_4, + SFX_HAITIAN_GANG_2_GUN_COOL_5, + SFX_HAITIAN_GANG_2_JACKED_1, + SFX_HAITIAN_GANG_2_JACKED_2, + SFX_HAITIAN_GANG_2_JACKED_3, + SFX_HAITIAN_GANG_2_JACKED_4, + SFX_HAITIAN_GANG_2_JACKED_5, + SFX_HAITIAN_GANG_2_JACKED_6, + SFX_HAITIAN_GANG_2_JACKING_1, + SFX_HAITIAN_GANG_2_JACKING_2, + SFX_HAITIAN_GANG_2_JACKING_3, + SFX_HAITIAN_GANG_2_JACKING_4, + SFX_HAITIAN_GANG_2_LOST_1, + SFX_HAITIAN_GANG_2_LOST_2, + SFX_HAITIAN_GANG_2_LOST_3, + SFX_HAITIAN_GANG_2_LOST_4, + SFX_HAITIAN_GANG_2_MUGGED_1, + SFX_HAITIAN_GANG_2_MUGGED_2, + SFX_HAITIAN_GANG_2_MUGGED_3, + SFX_HAITIAN_GANG_2_SAVED_1, + SFX_HAITIAN_GANG_2_TAXI_1, + + SFX_HAITIAN_GANG_3_BLOCKED_1, + SFX_HAITIAN_GANG_3_BLOCKED_2, + SFX_HAITIAN_GANG_3_BLOCKED_3, + SFX_HAITIAN_GANG_3_BLOCKED_4, + SFX_HAITIAN_GANG_3_BLOCKED_5, + SFX_HAITIAN_GANG_3_BLOCKED_6, + SFX_HAITIAN_GANG_3_BLOCKED_7, + SFX_HAITIAN_GANG_3_BLOCKED_8, + SFX_HAITIAN_GANG_3_BLOCKED_9, + SFX_HAITIAN_GANG_3_BUMP_1, + SFX_HAITIAN_GANG_3_BUMP_2, + SFX_HAITIAN_GANG_3_BUMP_3, + SFX_HAITIAN_GANG_3_BUMP_4, + SFX_HAITIAN_GANG_3_BUMP_5, + SFX_HAITIAN_GANG_3_BUMP_6, + SFX_HAITIAN_GANG_3_BUMP_7, + SFX_HAITIAN_GANG_3_BUMP_8, + SFX_HAITIAN_GANG_3_BUMP_9, + SFX_HAITIAN_GANG_3_BUMP_10, + SFX_HAITIAN_GANG_3_BUMP_11, + SFX_HAITIAN_GANG_3_BUMP_12, + SFX_HAITIAN_GANG_3_CAR_CRASH_1, + SFX_HAITIAN_GANG_3_CAR_CRASH_2, + SFX_HAITIAN_GANG_3_CAR_CRASH_3, + SFX_HAITIAN_GANG_3_CAR_CRASH_4, + SFX_HAITIAN_GANG_3_CAR_CRASH_5, + SFX_HAITIAN_GANG_3_CAR_CRASH_6, + SFX_HAITIAN_GANG_3_CAR_CRASH_7, + SFX_HAITIAN_GANG_3_CAR_CRASH_8, + SFX_HAITIAN_GANG_3_CAR_CRASH_9, + SFX_HAITIAN_GANG_3_CHAT_1, + SFX_HAITIAN_GANG_3_CHAT_2, + SFX_HAITIAN_GANG_3_CHAT_3, + SFX_HAITIAN_GANG_3_CHAT_4, + SFX_HAITIAN_GANG_3_CHAT_5, + SFX_HAITIAN_GANG_3_CHAT_6, + SFX_HAITIAN_GANG_3_CHAT_7, + SFX_HAITIAN_GANG_3_CHAT_8, + SFX_HAITIAN_GANG_3_CHAT_9, + SFX_HAITIAN_GANG_3_CHAT_10, + SFX_HAITIAN_GANG_3_CHAT_11, + SFX_HAITIAN_GANG_3_CHAT_12, + SFX_HAITIAN_GANG_3_CHAT_13, + SFX_HAITIAN_GANG_3_CHAT_14, + SFX_HAITIAN_GANG_3_DODGE_1, + SFX_HAITIAN_GANG_3_DODGE_2, + SFX_HAITIAN_GANG_3_DODGE_3, + SFX_HAITIAN_GANG_3_DODGE_4, + SFX_HAITIAN_GANG_3_DODGE_5, + SFX_HAITIAN_GANG_3_DODGE_6, + SFX_HAITIAN_GANG_3_DODGE_7, + SFX_HAITIAN_GANG_3_DODGE_8, + SFX_HAITIAN_GANG_3_DODGE_9, + SFX_HAITIAN_GANG_3_DODGE_10, + SFX_HAITIAN_GANG_3_EYEING_1, + SFX_HAITIAN_GANG_3_EYEING_2, + SFX_HAITIAN_GANG_3_FIGHT_1, + SFX_HAITIAN_GANG_3_FIGHT_2, + SFX_HAITIAN_GANG_3_FIGHT_3, + SFX_HAITIAN_GANG_3_FIGHT_4, + SFX_HAITIAN_GANG_3_FIGHT_5, + SFX_HAITIAN_GANG_3_FIGHT_6, + SFX_HAITIAN_GANG_3_FIGHT_7, + SFX_HAITIAN_GANG_3_FIGHT_8, + SFX_HAITIAN_GANG_3_FIGHT_9, + SFX_HAITIAN_GANG_3_FIGHT_10, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_1, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_2, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_3, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_4, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_5, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_6, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_7, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_8, + SFX_HAITIAN_GANG_3_GENERIC_CRASH_9, + SFX_HAITIAN_GANG_3_GUN_COOL_1, + SFX_HAITIAN_GANG_3_GUN_COOL_2, + SFX_HAITIAN_GANG_3_GUN_COOL_3, + SFX_HAITIAN_GANG_3_GUN_COOL_4, + SFX_HAITIAN_GANG_3_GUN_COOL_5, + SFX_HAITIAN_GANG_3_JACKED_1, + SFX_HAITIAN_GANG_3_JACKED_2, + SFX_HAITIAN_GANG_3_JACKED_3, + SFX_HAITIAN_GANG_3_JACKED_4, + SFX_HAITIAN_GANG_3_JACKED_5, + SFX_HAITIAN_GANG_3_JACKED_6, + SFX_HAITIAN_GANG_3_JACKING_1, + SFX_HAITIAN_GANG_3_JACKING_2, + SFX_HAITIAN_GANG_3_JACKING_3, + SFX_HAITIAN_GANG_3_JACKING_4, + SFX_HAITIAN_GANG_3_LOST_1, + SFX_HAITIAN_GANG_3_LOST_2, + SFX_HAITIAN_GANG_3_LOST_3, + SFX_HAITIAN_GANG_3_LOST_4, + SFX_HAITIAN_GANG_3_MUGGED_1, + SFX_HAITIAN_GANG_3_MUGGED_2, + SFX_HAITIAN_GANG_3_MUGGED_3, + SFX_HAITIAN_GANG_3_SAVED_1, + SFX_HAITIAN_GANG_3_TAXI_1, + + SFX_GENERIC_FEMALE_FIRE_1, + SFX_GENERIC_FEMALE_FIRE_2, + SFX_GENERIC_FEMALE_FIRE_3, + SFX_GENERIC_FEMALE_FIRE_4, + SFX_GENERIC_FEMALE_FIRE_5, + SFX_GENERIC_FEMALE_FIRE_6, + SFX_GENERIC_FEMALE_FIRE_7, + SFX_GENERIC_FEMALE_FIRE_8, + SFX_GENERIC_FEMALE_FIRE_9, + SFX_GENERIC_FEMALE_FIRE_10, + SFX_GENERIC_FEMALE_FIRE_11, + SFX_GENERIC_FEMALE_FIRE_12, + SFX_GENERIC_FEMALE_FIRE_13, + SFX_GENERIC_FEMALE_FIRE_14, + SFX_GENERIC_FEMALE_FIRE_15, + SFX_GENERIC_FEMALE_FIRE_16, + SFX_GENERIC_FEMALE_FIRE_17, + SFX_GENERIC_FEMALE_DEATH_1, + SFX_GENERIC_FEMALE_DEATH_2, + SFX_GENERIC_FEMALE_DEATH_3, + SFX_GENERIC_FEMALE_DEATH_4, + SFX_GENERIC_FEMALE_DEATH_5, + SFX_GENERIC_FEMALE_DEATH_6, + SFX_GENERIC_FEMALE_DEATH_7, + SFX_GENERIC_FEMALE_DEATH_8, + SFX_GENERIC_FEMALE_DEATH_9, + SFX_GENERIC_FEMALE_DEATH_10, + SFX_GENERIC_FEMALE_DEATH_11, + SFX_GENERIC_FEMALE_DEATH_12, + SFX_GENERIC_FEMALE_DEATH_13, + SFX_GENERIC_FEMALE_DEATH_14, + SFX_GENERIC_FEMALE_DEATH_15, + SFX_GENERIC_FEMALE_DEATH_16, + SFX_GENERIC_FEMALE_DEATH_17, + SFX_GENERIC_FEMALE_DEATH_18, + SFX_GENERIC_FEMALE_DEATH_19, + SFX_GENERIC_FEMALE_DEATH_20, + SFX_GENERIC_FEMALE_DEATH_21, + SFX_GENERIC_FEMALE_DEATH_22, + SFX_GENERIC_FEMALE_GRUNT_1, + SFX_GENERIC_FEMALE_GRUNT_2, + SFX_GENERIC_FEMALE_GRUNT_3, + SFX_GENERIC_FEMALE_GRUNT_4, + SFX_GENERIC_FEMALE_GRUNT_5, + SFX_GENERIC_FEMALE_GRUNT_6, + SFX_GENERIC_FEMALE_GRUNT_7, + SFX_GENERIC_FEMALE_GRUNT_8, + SFX_GENERIC_FEMALE_GRUNT_9, + SFX_GENERIC_FEMALE_GRUNT_10, + SFX_GENERIC_FEMALE_GRUNT_11, + SFX_GENERIC_FEMALE_GRUNT_12, + SFX_GENERIC_FEMALE_GRUNT_13, + SFX_GENERIC_FEMALE_GRUNT_14, + SFX_GENERIC_FEMALE_GRUNT_15, + SFX_GENERIC_FEMALE_GRUNT_16, + SFX_GENERIC_FEMALE_GRUNT_17, + SFX_GENERIC_FEMALE_GRUNT_18, + SFX_GENERIC_FEMALE_GRUNT_19, + SFX_GENERIC_FEMALE_GRUNT_20, + SFX_GENERIC_FEMALE_GRUNT_21, + SFX_GENERIC_FEMALE_GRUNT_22, + SFX_GENERIC_FEMALE_GRUNT_23, + SFX_GENERIC_FEMALE_GRUNT_24, + SFX_GENERIC_FEMALE_GRUNT_25, + SFX_GENERIC_FEMALE_GRUNT_26, + SFX_GENERIC_FEMALE_GRUNT_27, + SFX_GENERIC_FEMALE_GRUNT_28, + SFX_GENERIC_FEMALE_GRUNT_29, + SFX_GENERIC_FEMALE_GRUNT_30, + SFX_GENERIC_FEMALE_GRUNT_31, + SFX_GENERIC_FEMALE_GRUNT_32, + SFX_GENERIC_FEMALE_GRUNT_33, + SFX_GENERIC_FEMALE_PANIC_1, + SFX_GENERIC_FEMALE_PANIC_2, + SFX_GENERIC_FEMALE_PANIC_3, + SFX_GENERIC_FEMALE_PANIC_4, + SFX_GENERIC_FEMALE_PANIC_5, + SFX_GENERIC_FEMALE_PANIC_6, + SFX_GENERIC_FEMALE_PANIC_7, + SFX_GENERIC_FEMALE_PANIC_8, + SFX_GENERIC_FEMALE_PANIC_9, + SFX_GENERIC_FEMALE_PANIC_10, + SFX_GENERIC_FEMALE_PANIC_11, + SFX_GENERIC_FEMALE_PANIC_12, + SFX_GENERIC_FEMALE_PANIC_13, + SFX_GENERIC_FEMALE_PANIC_14, + SFX_GENERIC_FEMALE_PANIC_15, + SFX_GENERIC_FEMALE_PANIC_16, + SFX_GENERIC_FEMALE_PANIC_17, + SFX_GENERIC_FEMALE_PANIC_18, + SFX_GENERIC_FEMALE_PANIC_19, + SFX_GENERIC_FEMALE_PANIC_20, + SFX_GENERIC_FEMALE_PANIC_21, + SFX_GENERIC_FEMALE_PANIC_22, + SFX_GENERIC_FEMALE_PANIC_23, + SFX_GENERIC_FEMALE_PANIC_24, + SFX_GENERIC_FEMALE_PANIC_25, + SFX_GENERIC_FEMALE_PANIC_26, + SFX_GENERIC_FEMALE_PANIC_27, + + SFX_GENERIC_MALE_FIRE_1, + SFX_GENERIC_MALE_FIRE_2, + SFX_GENERIC_MALE_FIRE_3, + SFX_GENERIC_MALE_FIRE_4, + SFX_GENERIC_MALE_FIRE_5, + SFX_GENERIC_MALE_FIRE_6, + SFX_GENERIC_MALE_FIRE_7, + SFX_GENERIC_MALE_FIRE_8, + SFX_GENERIC_MALE_FIRE_9, + SFX_GENERIC_MALE_FIRE_10, + SFX_GENERIC_MALE_FIRE_11, + SFX_GENERIC_MALE_FIRE_12, + SFX_GENERIC_MALE_FIRE_13, + SFX_GENERIC_MALE_FIRE_14, + SFX_GENERIC_MALE_FIRE_15, + SFX_GENERIC_MALE_FIRE_16, + SFX_GENERIC_MALE_FIRE_17, + SFX_GENERIC_MALE_FIRE_18, + SFX_GENERIC_MALE_FIRE_19, + SFX_GENERIC_MALE_FIRE_20, + SFX_GENERIC_MALE_FIRE_21, + SFX_GENERIC_MALE_FIRE_22, + SFX_GENERIC_MALE_FIRE_23, + SFX_GENERIC_MALE_FIRE_24, + SFX_GENERIC_MALE_FIRE_25, + SFX_GENERIC_MALE_FIRE_26, + SFX_GENERIC_MALE_FIRE_27, + SFX_GENERIC_MALE_FIRE_28, + SFX_GENERIC_MALE_FIRE_29, + SFX_GENERIC_MALE_FIRE_30, + SFX_GENERIC_MALE_FIRE_31, + SFX_GENERIC_MALE_FIRE_32, + SFX_GENERIC_MALE_DEATH_1, + SFX_GENERIC_MALE_DEATH_2, + SFX_GENERIC_MALE_DEATH_3, + SFX_GENERIC_MALE_DEATH_4, + SFX_GENERIC_MALE_DEATH_5, + SFX_GENERIC_MALE_DEATH_6, + SFX_GENERIC_MALE_DEATH_7, + SFX_GENERIC_MALE_DEATH_8, + SFX_GENERIC_MALE_DEATH_9, + SFX_GENERIC_MALE_DEATH_10, + SFX_GENERIC_MALE_DEATH_11, + SFX_GENERIC_MALE_DEATH_12, + SFX_GENERIC_MALE_DEATH_13, + SFX_GENERIC_MALE_DEATH_14, + SFX_GENERIC_MALE_DEATH_15, + SFX_GENERIC_MALE_DEATH_16, + SFX_GENERIC_MALE_DEATH_17, + SFX_GENERIC_MALE_DEATH_18, + SFX_GENERIC_MALE_DEATH_19, + SFX_GENERIC_MALE_DEATH_20, + SFX_GENERIC_MALE_DEATH_21, + SFX_GENERIC_MALE_DEATH_22, + SFX_GENERIC_MALE_DEATH_23, + SFX_GENERIC_MALE_DEATH_24, + SFX_GENERIC_MALE_DEATH_25, + SFX_GENERIC_MALE_DEATH_26, + SFX_GENERIC_MALE_DEATH_27, + SFX_GENERIC_MALE_DEATH_28, + SFX_GENERIC_MALE_DEATH_29, + SFX_GENERIC_MALE_DEATH_30, + SFX_GENERIC_MALE_DEATH_31, + SFX_GENERIC_MALE_DEATH_32, + SFX_GENERIC_MALE_DEATH_33, + SFX_GENERIC_MALE_DEATH_34, + SFX_GENERIC_MALE_DEATH_35, + SFX_GENERIC_MALE_DEATH_36, + SFX_GENERIC_MALE_DEATH_37, + SFX_GENERIC_MALE_DEATH_38, + SFX_GENERIC_MALE_DEATH_39, + SFX_GENERIC_MALE_DEATH_40, + SFX_GENERIC_MALE_DEATH_41, + SFX_GENERIC_MALE_GRUNT_1, + SFX_GENERIC_MALE_GRUNT_2, + SFX_GENERIC_MALE_GRUNT_3, + SFX_GENERIC_MALE_GRUNT_4, + SFX_GENERIC_MALE_GRUNT_5, + SFX_GENERIC_MALE_GRUNT_6, + SFX_GENERIC_MALE_GRUNT_7, + SFX_GENERIC_MALE_GRUNT_8, + SFX_GENERIC_MALE_GRUNT_9, + SFX_GENERIC_MALE_GRUNT_10, + SFX_GENERIC_MALE_GRUNT_11, + SFX_GENERIC_MALE_GRUNT_12, + SFX_GENERIC_MALE_GRUNT_13, + SFX_GENERIC_MALE_GRUNT_14, + SFX_GENERIC_MALE_GRUNT_15, + SFX_GENERIC_MALE_GRUNT_16, + SFX_GENERIC_MALE_GRUNT_17, + SFX_GENERIC_MALE_GRUNT_18, + SFX_GENERIC_MALE_GRUNT_19, + SFX_GENERIC_MALE_GRUNT_20, + SFX_GENERIC_MALE_GRUNT_21, + SFX_GENERIC_MALE_GRUNT_22, + SFX_GENERIC_MALE_GRUNT_23, + SFX_GENERIC_MALE_GRUNT_24, + SFX_GENERIC_MALE_GRUNT_25, + SFX_GENERIC_MALE_GRUNT_26, + SFX_GENERIC_MALE_GRUNT_27, + SFX_GENERIC_MALE_GRUNT_28, + SFX_GENERIC_MALE_GRUNT_29, + SFX_GENERIC_MALE_GRUNT_30, + SFX_GENERIC_MALE_GRUNT_31, + SFX_GENERIC_MALE_GRUNT_32, + SFX_GENERIC_MALE_GRUNT_33, + SFX_GENERIC_MALE_GRUNT_34, + SFX_GENERIC_MALE_GRUNT_35, + SFX_GENERIC_MALE_GRUNT_36, + SFX_GENERIC_MALE_GRUNT_37, + SFX_GENERIC_MALE_GRUNT_38, + SFX_GENERIC_MALE_GRUNT_39, + SFX_GENERIC_MALE_GRUNT_40, + SFX_GENERIC_MALE_GRUNT_41, + SFX_GENERIC_MALE_PANIC_1, + SFX_GENERIC_MALE_PANIC_2, + SFX_GENERIC_MALE_PANIC_3, + SFX_GENERIC_MALE_PANIC_4, + SFX_GENERIC_MALE_PANIC_5, + SFX_GENERIC_MALE_PANIC_6, + SFX_GENERIC_MALE_PANIC_7, + SFX_GENERIC_MALE_PANIC_8, + SFX_GENERIC_MALE_PANIC_9, + SFX_GENERIC_MALE_PANIC_10, + SFX_GENERIC_MALE_PANIC_11, + SFX_GENERIC_MALE_PANIC_12, + SFX_GENERIC_MALE_PANIC_13, + SFX_GENERIC_MALE_PANIC_14, + SFX_GENERIC_MALE_PANIC_15, + SFX_GENERIC_MALE_PANIC_16, + SFX_GENERIC_MALE_PANIC_17, + SFX_GENERIC_MALE_PANIC_18, + SFX_GENERIC_MALE_PANIC_19, + SFX_GENERIC_MALE_PANIC_20, + SFX_GENERIC_MALE_PANIC_21, + SFX_GENERIC_MALE_PANIC_22, + SFX_GENERIC_MALE_PANIC_23, + SFX_GENERIC_MALE_PANIC_24, + SFX_GENERIC_MALE_PANIC_25, + SFX_GENERIC_MALE_PANIC_26, + SFX_GENERIC_MALE_PANIC_27, + SFX_GENERIC_MALE_PANIC_28, + SFX_GENERIC_MALE_PANIC_29, + SFX_GENERIC_MALE_PANIC_30, + SFX_GENERIC_MALE_PANIC_31, + SFX_GENERIC_MALE_PANIC_32, + SFX_GENERIC_MALE_PANIC_33, + SFX_GENERIC_MALE_PANIC_34, + SFX_GENERIC_MALE_PANIC_35, + + SFX_MEDIC_VOICE_1_FIGHT_1, + SFX_MEDIC_VOICE_1_FIGHT_2, + SFX_MEDIC_VOICE_1_FIGHT_3, + SFX_MEDIC_VOICE_1_FIGHT_4, + SFX_MEDIC_VOICE_1_FIGHT_5, + SFX_MEDIC_VOICE_1_FIGHT_6, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_1, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_2, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_3, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_4, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_5, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_6, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_7, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_8, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_9, + SFX_MEDIC_VOICE_1_GET_OUT_VAN_CHAT_10, + SFX_MEDIC_VOICE_1_AT_VICTIM_1, + SFX_MEDIC_VOICE_1_AT_VICTIM_2, + SFX_MEDIC_VOICE_1_AT_VICTIM_3, + SFX_MEDIC_VOICE_1_AT_VICTIM_4, + SFX_MEDIC_VOICE_1_AT_VICTIM_5, + SFX_MEDIC_VOICE_1_AT_VICTIM_6, + SFX_MEDIC_VOICE_1_AT_VICTIM_7, + SFX_MEDIC_VOICE_1_AT_VICTIM_8, + SFX_MEDIC_VOICE_1_AT_VICTIM_9, + SFX_MEDIC_VOICE_1_AT_VICTIM_10, + SFX_MEDIC_VOICE_1_AT_VICTIM_11, + SFX_MEDIC_VOICE_1_AT_VICTIM_12, + SFX_MEDIC_VOICE_1_AT_VICTIM_13, + SFX_MEDIC_VOICE_1_AT_VICTIM_14, + SFX_MEDIC_VOICE_1_AT_VICTIM_15, + SFX_MEDIC_VOICE_1_AT_VICTIM_16, + SFX_MEDIC_VOICE_1_AT_VICTIM_17, + + SFX_MEDIC_VOICE_2_FIGHT_1, + SFX_MEDIC_VOICE_2_FIGHT_2, + SFX_MEDIC_VOICE_2_FIGHT_3, + SFX_MEDIC_VOICE_2_FIGHT_4, + SFX_MEDIC_VOICE_2_FIGHT_5, + SFX_MEDIC_VOICE_2_FIGHT_6, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_1, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_2, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_3, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_4, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_5, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_6, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_7, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_8, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_9, + SFX_MEDIC_VOICE_2_GET_OUT_VAN_CHAT_10, + SFX_MEDIC_VOICE_2_AT_VICTIM_1, + SFX_MEDIC_VOICE_2_AT_VICTIM_2, + SFX_MEDIC_VOICE_2_AT_VICTIM_3, + SFX_MEDIC_VOICE_2_AT_VICTIM_4, + SFX_MEDIC_VOICE_2_AT_VICTIM_5, + SFX_MEDIC_VOICE_2_AT_VICTIM_6, + SFX_MEDIC_VOICE_2_AT_VICTIM_7, + SFX_MEDIC_VOICE_2_AT_VICTIM_8, + SFX_MEDIC_VOICE_2_AT_VICTIM_9, + SFX_MEDIC_VOICE_2_AT_VICTIM_10, + SFX_MEDIC_VOICE_2_AT_VICTIM_11, + SFX_MEDIC_VOICE_2_AT_VICTIM_12, + SFX_MEDIC_VOICE_2_AT_VICTIM_13, + SFX_MEDIC_VOICE_2_AT_VICTIM_14, + SFX_MEDIC_VOICE_2_AT_VICTIM_15, + SFX_MEDIC_VOICE_2_AT_VICTIM_16, + SFX_MEDIC_VOICE_2_AT_VICTIM_17, + + SFX_FBI_VOICE_1_GUNAIMEDAT3_1, + SFX_FBI_VOICE_1_GUNAIMEDAT3_2, + SFX_FBI_VOICE_1_GUNAIMEDAT3_3, + SFX_FBI_VOICE_1_GUNAIMEDAT3_4, + SFX_FBI_VOICE_1_CAR_CRASH_1, + SFX_FBI_VOICE_1_CAR_CRASH_2, + SFX_FBI_VOICE_1_CAR_CRASH_3, + SFX_FBI_VOICE_1_CAR_CRASH_4, + SFX_FBI_VOICE_1_GUNAIMEDAT2_1, + SFX_FBI_VOICE_1_COP_MANYCOPSAROUND_1, + SFX_FBI_VOICE_1_COP_MANYCOPSAROUND_2, + SFX_FBI_VOICE_1_COP_MANYCOPSAROUND_3, + SFX_FBI_VOICE_1_COP_TARGETING_1, + SFX_FBI_VOICE_1_COP_TARGETING_2, + SFX_FBI_VOICE_1_COP_TARGETING_3, + SFX_FBI_VOICE_1_COP_TARGETING_4, + SFX_FBI_VOICE_1_COP_TARGETING_5, + SFX_FBI_VOICE_1_COP_TARGETING_6, + + SFX_FBI_VOICE_2_GUNAIMEDAT3_1, + SFX_FBI_VOICE_2_GUNAIMEDAT3_2, + SFX_FBI_VOICE_2_GUNAIMEDAT3_3, + SFX_FBI_VOICE_2_GUNAIMEDAT3_4, + SFX_FBI_VOICE_2_CAR_CRASH_1, + SFX_FBI_VOICE_2_CAR_CRASH_2, + SFX_FBI_VOICE_2_CAR_CRASH_3, + SFX_FBI_VOICE_2_CAR_CRASH_4, + SFX_FBI_VOICE_2_GUNAIMEDAT2_1, + SFX_FBI_VOICE_2_COP_MANYCOPSAROUND_1, + SFX_FBI_VOICE_2_COP_MANYCOPSAROUND_2, + SFX_FBI_VOICE_2_COP_MANYCOPSAROUND_3, + SFX_FBI_VOICE_2_COP_TARGETING_1, + SFX_FBI_VOICE_2_COP_TARGETING_2, + SFX_FBI_VOICE_2_COP_TARGETING_3, + SFX_FBI_VOICE_2_COP_TARGETING_4, + SFX_FBI_VOICE_2_COP_TARGETING_5, + SFX_FBI_VOICE_2_COP_TARGETING_6, + + SFX_FBI_VOICE_3_GUNAIMEDAT3_1, + SFX_FBI_VOICE_3_GUNAIMEDAT3_2, + SFX_FBI_VOICE_3_GUNAIMEDAT3_3, + SFX_FBI_VOICE_3_GUNAIMEDAT3_4, + SFX_FBI_VOICE_3_CAR_CRASH_1, + SFX_FBI_VOICE_3_CAR_CRASH_2, + SFX_FBI_VOICE_3_CAR_CRASH_3, + SFX_FBI_VOICE_3_CAR_CRASH_4, + SFX_FBI_VOICE_3_GUNAIMEDAT2_1, + SFX_FBI_VOICE_3_COP_MANYCOPSAROUND_1, + SFX_FBI_VOICE_3_COP_MANYCOPSAROUND_2, + SFX_FBI_VOICE_3_COP_MANYCOPSAROUND_3, + SFX_FBI_VOICE_3_COP_TARGETING_1, + SFX_FBI_VOICE_3_COP_TARGETING_2, + SFX_FBI_VOICE_3_COP_TARGETING_3, + SFX_FBI_VOICE_3_COP_TARGETING_4, + SFX_FBI_VOICE_3_COP_TARGETING_5, + SFX_FBI_VOICE_3_COP_TARGETING_6, + + SFX_SWAT_VOICE_1_DODGE_1, + SFX_SWAT_VOICE_1_DODGE_2, + SFX_SWAT_VOICE_1_DODGE_3, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_1, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_2, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_3, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_4, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_5, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_6, + SFX_SWAT_VOICE_1_COP_HELIPILOTPHRASE_7, + SFX_SWAT_VOICE_1_COP_TARGETING_1, + SFX_SWAT_VOICE_1_COP_TARGETING_2, + SFX_SWAT_VOICE_1_COP_TARGETING_3, + SFX_SWAT_VOICE_1_COP_TARGETING_4, + + SFX_SWAT_VOICE_2_DODGE_1, + SFX_SWAT_VOICE_2_DODGE_2, + SFX_SWAT_VOICE_2_DODGE_3, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_1, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_2, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_3, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_4, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_5, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_6, + SFX_SWAT_VOICE_2_COP_HELIPILOTPHRASE_7, + SFX_SWAT_VOICE_2_COP_TARGETING_1, + SFX_SWAT_VOICE_2_COP_TARGETING_2, + SFX_SWAT_VOICE_2_COP_TARGETING_3, + SFX_SWAT_VOICE_2_COP_TARGETING_4, + + SFX_SWAT_VOICE_3_DODGE_1, + SFX_SWAT_VOICE_3_DODGE_2, + SFX_SWAT_VOICE_3_DODGE_3, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_1, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_2, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_3, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_4, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_5, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_6, + SFX_SWAT_VOICE_3_COP_HELIPILOTPHRASE_7, + SFX_SWAT_VOICE_3_COP_TARGETING_1, + SFX_SWAT_VOICE_3_COP_TARGETING_2, + SFX_SWAT_VOICE_3_COP_TARGETING_3, + SFX_SWAT_VOICE_3_COP_TARGETING_4, + + + SFX_WFYG1_BLOCKED_1, + SFX_WFYG1_BLOCKED_2, + SFX_WFYG1_BLOCKED_3, + SFX_WFYG1_BLOCKED_4, + SFX_WFYG1_BLOCKED_5, + SFX_WFYG1_BLOCKED_6, + SFX_WFYG1_BLOCKED_7, + SFX_WFYG1_BUMP_1, + SFX_WFYG1_BUMP_2, + SFX_WFYG1_BUMP_3, + SFX_WFYG1_BUMP_4, + SFX_WFYG1_BUMP_5, + SFX_WFYG1_BUMP_6, + SFX_WFYG1_BUMP_7, + SFX_WFYG1_BUMP_8, + SFX_WFYG1_BUMP_9, + SFX_WFYG1_BUMP_10, + SFX_WFYG1_BUMP_11, + SFX_WFYG1_CAR_CRASH_1, + SFX_WFYG1_CAR_CRASH_2, + SFX_WFYG1_CAR_CRASH_3, + SFX_WFYG1_CAR_CRASH_4, + SFX_WFYG1_CAR_CRASH_5, + SFX_WFYG1_CAR_CRASH_6, + SFX_WFYG1_CAR_CRASH_7, + SFX_WFYG1_CAR_CRASH_8, + SFX_WFYG1_CAR_CRASH_9, + SFX_WFYG1_CHAT_1, + SFX_WFYG1_CHAT_2, + SFX_WFYG1_CHAT_3, + SFX_WFYG1_CHAT_4, + SFX_WFYG1_CHAT_5, + SFX_WFYG1_CHAT_6, + SFX_WFYG1_CHAT_7, + SFX_WFYG1_CHAT_8, + SFX_WFYG1_CHAT_9, + SFX_WFYG1_CHAT_10, + SFX_WFYG1_DODGE_1, + SFX_WFYG1_DODGE_2, + SFX_WFYG1_DODGE_3, + SFX_WFYG1_DODGE_4, + SFX_WFYG1_DODGE_5, + SFX_WFYG1_DODGE_6, + SFX_WFYG1_DODGE_7, + SFX_WFYG1_DODGE_8, + SFX_WFYG1_DODGE_9, + SFX_WFYG1_EYEING_1, + SFX_WFYG1_EYEING_2, + SFX_WFYG1_FIGHT_1, + SFX_WFYG1_FIGHT_2, + SFX_WFYG1_FIGHT_3, + SFX_WFYG1_FIGHT_4, + SFX_WFYG1_GENERIC_CRASH_1, + SFX_WFYG1_GENERIC_CRASH_2, + SFX_WFYG1_GENERIC_CRASH_3, + SFX_WFYG1_GENERIC_CRASH_4, + SFX_WFYG1_GENERIC_CRASH_5, + SFX_WFYG1_GENERIC_CRASH_6, + SFX_WFYG1_GENERIC_CRASH_7, + SFX_WFYG1_GUN_COOL_1, + SFX_WFYG1_GUN_COOL_2, + SFX_WFYG1_GUN_COOL_3, + SFX_WFYG1_GUN_COOL_4, + SFX_WFYG1_GUN_COOL_5, + SFX_WFYG1_GUN_COOL_6, + SFX_WFYG1_JACKED_1, + SFX_WFYG1_JACKED_2, + SFX_WFYG1_JACKED_3, + SFX_WFYG1_JACKED_4, + SFX_WFYG1_JACKED_5, + SFX_WFYG1_LOST_1, + SFX_WFYG1_LOST_2, + SFX_WFYG1_LOST_3, + SFX_WFYG1_MUGGED_1, + SFX_WFYG1_MUGGED_2, + SFX_WFYG1_MUGGING_1, + SFX_WFYG1_MUGGING_2, + SFX_WFYG1_RUN_1, + SFX_WFYG1_RUN_2, + SFX_WFYG1_SAVED_1, + SFX_WFYG1_SHOCKED_1, + SFX_WFYG1_TAXI_1, + + SFX_WFYG2_BLOCKED_1, + SFX_WFYG2_BLOCKED_2, + SFX_WFYG2_BLOCKED_3, + SFX_WFYG2_BLOCKED_4, + SFX_WFYG2_BLOCKED_5, + SFX_WFYG2_BUMP_1, + SFX_WFYG2_BUMP_2, + SFX_WFYG2_BUMP_3, + SFX_WFYG2_BUMP_4, + SFX_WFYG2_BUMP_5, + SFX_WFYG2_BUMP_6, + SFX_WFYG2_BUMP_7, + SFX_WFYG2_BUMP_8, + SFX_WFYG2_BUMP_9, + SFX_WFYG2_BUMP_10, + SFX_WFYG2_BUMP_11, + SFX_WFYG2_CAR_CRASH_1, + SFX_WFYG2_CAR_CRASH_2, + SFX_WFYG2_CAR_CRASH_3, + SFX_WFYG2_CAR_CRASH_4, + SFX_WFYG2_CAR_CRASH_5, + SFX_WFYG2_CAR_CRASH_6, + SFX_WFYG2_CAR_CRASH_7, + SFX_WFYG2_CAR_CRASH_8, + SFX_WFYG2_CAR_CRASH_9, + SFX_WFYG2_CHAT_1, + SFX_WFYG2_CHAT_2, + SFX_WFYG2_CHAT_3, + SFX_WFYG2_CHAT_4, + SFX_WFYG2_CHAT_5, + SFX_WFYG2_CHAT_6, + SFX_WFYG2_CHAT_7, + SFX_WFYG2_CHAT_8, + SFX_WFYG2_CHAT_9, + SFX_WFYG2_DODGE_1, + SFX_WFYG2_DODGE_2, + SFX_WFYG2_DODGE_3, + SFX_WFYG2_DODGE_4, + SFX_WFYG2_DODGE_5, + SFX_WFYG2_DODGE_6, + SFX_WFYG2_DODGE_7, + SFX_WFYG2_DODGE_8, + SFX_WFYG2_EYEING_1, + SFX_WFYG2_EYEING_2, + SFX_WFYG2_EYEING_3, + SFX_WFYG2_EYEING_4, + SFX_WFYG2_FIGHT_1, + SFX_WFYG2_FIGHT_2, + SFX_WFYG2_FIGHT_3, + SFX_WFYG2_FIGHT_4, + SFX_WFYG2_FIGHT_5, + SFX_WFYG2_GENERIC_CRASH_1, + SFX_WFYG2_GENERIC_CRASH_2, + SFX_WFYG2_GENERIC_CRASH_3, + SFX_WFYG2_GENERIC_CRASH_4, + SFX_WFYG2_GENERIC_CRASH_5, + SFX_WFYG2_GENERIC_CRASH_6, + SFX_WFYG2_GENERIC_CRASH_7, + SFX_WFYG2_GUN_COOL_1, + SFX_WFYG2_GUN_COOL_2, + SFX_WFYG2_GUN_COOL_3, + SFX_WFYG2_JACKED_1, + SFX_WFYG2_JACKED_2, + SFX_WFYG2_JACKED_3, + SFX_WFYG2_JACKED_4, + SFX_WFYG2_JACKED_5, + SFX_WFYG2_LOST_1, + SFX_WFYG2_MUGGED_1, + SFX_WFYG2_MUGGED_2, + SFX_WFYG2_SHOCKED_1, + SFX_WFYG2_TAXI_1, + SFX_WFYG2_TAXI_2, // unused + + SFX_HMOCA_BLOCKED_1, + SFX_HMOCA_BLOCKED_2, + SFX_HMOCA_BLOCKED_3, + SFX_HMOCA_BLOCKED_4, + SFX_HMOCA_BLOCKED_5, + SFX_HMOCA_BLOCKED_6, + SFX_HMOCA_BLOCKED_7, + SFX_HMOCA_BLOCKED_8, + SFX_HMOCA_CAR_CRASH_1, + SFX_HMOCA_CAR_CRASH_2, + SFX_HMOCA_CAR_CRASH_3, + SFX_HMOCA_CAR_CRASH_4, + SFX_HMOCA_CAR_CRASH_5, + SFX_HMOCA_CAR_CRASH_6, + SFX_HMOCA_CAR_CRASH_7, + SFX_HMOCA_CAR_CRASH_8, + SFX_HMOCA_CHAT_1, + SFX_HMOCA_CHAT_2, + SFX_HMOCA_CHAT_3, + SFX_HMOCA_CHAT_4, + SFX_HMOCA_CHAT_5, + SFX_HMOCA_CHAT_6, + SFX_HMOCA_CHAT_7, + SFX_HMOCA_CHAT_8, + SFX_HMOCA_CHAT_9, + SFX_HMOCA_CHAT_10, + SFX_HMOCA_EYEING_1, + SFX_HMOCA_EYEING_2, + SFX_HMOCA_GUN_PANIC_1, + SFX_HMOCA_GUN_PANIC_2, + SFX_HMOCA_GUN_PANIC_3, + SFX_HMOCA_GUN_PANIC_4, + SFX_HMOCA_GUN_PANIC_5, + SFX_HMOCA_JACKED_1, + SFX_HMOCA_JACKED_2, + SFX_HMOCA_JACKED_3, + SFX_HMOCA_JACKED_4, + SFX_HMOCA_JACKED_5, + SFX_HMOCA_JACKED_6, + SFX_HMOCA_JACKED_7, + SFX_HMOCA_JACKED_8, + SFX_HMOCA_JACKED_9, + SFX_HMOCA_JACKED_10, + SFX_HMOCA_JACKING_1, + SFX_HMOCA_JACKING_2, + SFX_HMOCA_JACKING_3, + SFX_HMOCA_JACKING_4, + SFX_HMOCA_JACKING_5, + SFX_HMOCA_JACKING_6, + SFX_HMOCA_JACKING_7, + SFX_HMOCA_JACKING_8, + SFX_HMOCA_JACKING_9, + SFX_HMOCA_JACKING_10, + SFX_HMOCA_JACKING_11, + SFX_HMOCA_MUGGED_1, + SFX_HMOCA_MUGGED_2, + SFX_HMOCA_MUGGED_3, + SFX_HMOCA_MUGGED_4, + SFX_HMOCA_MUGGED_5, + SFX_HMOCA_MUGGED_6, + SFX_HMOCA_MUGGED_7, + SFX_HMOCA_RUN_1, + SFX_HMOCA_RUN_2, + SFX_HMOCA_TAXI_1, + + SFX_WFOSH_BUMP_1, + SFX_WFOSH_BUMP_2, + SFX_WFOSH_BUMP_3, + SFX_WFOSH_BUMP_4, + SFX_WFOSH_BUMP_5, + SFX_WFOSH_BUMP_6, + SFX_WFOSH_BUMP_7, + SFX_WFOSH_BUMP_8, + SFX_WFOSH_BUMP_9, + SFX_WFOSH_BUMP_10, + SFX_WFOSH_CHAT_1, + SFX_WFOSH_CHAT_2, + SFX_WFOSH_CHAT_3, + SFX_WFOSH_CHAT_4, + SFX_WFOSH_CHAT_5, + SFX_WFOSH_CHAT_6, + SFX_WFOSH_CHAT_7, + SFX_WFOSH_CHAT_8, + SFX_WFOSH_CHAT_9, + SFX_WFOSH_DODGE_1, + SFX_WFOSH_DODGE_2, + SFX_WFOSH_DODGE_3, + SFX_WFOSH_DODGE_4, + SFX_WFOSH_DODGE_5, + SFX_WFOSH_DODGE_6, + SFX_WFOSH_DODGE_7, + SFX_WFOSH_DODGE_8, + SFX_WFOSH_DODGE_9, + SFX_WFOSH_DODGE_10, + SFX_WFOSH_GUN_COOL_1, + SFX_WFOSH_GUN_COOL_2, + SFX_WFOSH_GUN_COOL_3, + SFX_WFOSH_GUN_COOL_4, + SFX_WFOSH_GUN_COOL_5, + SFX_WFOSH_GUN_COOL_6, + SFX_WFOSH_GUN_COOL_7, + SFX_WFOSH_GUN_COOL_8, + SFX_WFOSH_GUN_COOL_9, + SFX_WFOSH_GUN_COOL_10, + SFX_WFOSH_LOST_1, + SFX_WFOSH_LOST_2, + SFX_WFOSH_MUGGED_1, + SFX_WFOSH_MUGGED_2, + SFX_WFOSH_RUN_1, + SFX_WFOSH_RUN_2, + SFX_WFOSH_RUN_3, + SFX_WFOSH_RUN_4, + SFX_WFOSH_RUN_5, + SFX_WFOSH_RUN_6, + SFX_WFOSH_RUN_7, + SFX_WFOSH_RUN_8, + SFX_WFOSH_RUN_9, + SFX_WFOSH_SAVED_1, + SFX_WFOSH_SAVED_2, + SFX_WFOSH_SAVED_3, + SFX_WFOSH_SHOCKED_1, + SFX_WFOSH_SHOCKED_2, + SFX_WFOSH_SHOCKED_3, + SFX_WFOSH_SHOCKED_4, + SFX_WFOSH_SHOCKED_5, + SFX_WFOSH_TAXI_1, + SFX_WFYSK_BLOCKED_1, + SFX_WFYSK_BLOCKED_2, + SFX_WFYSK_BLOCKED_3, + SFX_WFYSK_BLOCKED_4, + SFX_WFYSK_BLOCKED_5, + SFX_WFYSK_BLOCKED_6, + SFX_WFYSK_BLOCKED_7, + SFX_WFYSK_BLOCKED_8, + SFX_WFYSK_BLOCKED_9, + SFX_WFYSK_BLOCKED_10, + SFX_WFYSK_BLOCKED_11, + SFX_WFYSK_BUMP_1, + SFX_WFYSK_BUMP_2, + SFX_WFYSK_BUMP_3, + SFX_WFYSK_BUMP_4, + SFX_WFYSK_BUMP_5, + SFX_WFYSK_BUMP_6, + SFX_WFYSK_BUMP_7, + SFX_WFYSK_BUMP_8, + SFX_WFYSK_BUMP_9, + SFX_WFYSK_BUMP_10, + SFX_WFYSK_BUMP_11, + SFX_WFYSK_BUMP_12, + SFX_WFYSK_BUMP_13, + SFX_WFYSK_BUMP_14, + SFX_WFYSK_BUMP_15, + SFX_WFYSK_BUMP_16, + SFX_WFYSK_BUMP_17, + SFX_WFYSK_BUMP_18, + SFX_WFYSK_DODGE_1, + SFX_WFYSK_DODGE_2, + SFX_WFYSK_DODGE_3, + SFX_WFYSK_DODGE_4, + SFX_WFYSK_DODGE_5, + SFX_WFYSK_DODGE_6, + SFX_WFYSK_DODGE_7, + SFX_WFYSK_DODGE_8, + SFX_WFYSK_DODGE_9, + SFX_WFYSK_FIGHT_1, + SFX_WFYSK_FIGHT_2, + SFX_WFYSK_FIGHT_3, + SFX_WFYSK_FIGHT_4, + SFX_WFYSK_FIGHT_5, + SFX_WFYSK_FIGHT_6, + SFX_WFYSK_FIGHT_7, + SFX_WFYSK_FIGHT_8, + SFX_WFYSK_FIGHT_9, + SFX_WFYSK_FIGHT_10, + SFX_WFYSK_FIGHT_11, + SFX_WFYSK_GUN_PANIC_1, + SFX_WFYSK_GUN_PANIC_2, + SFX_WFYSK_GUN_PANIC_3, + SFX_WFYSK_GUN_PANIC_4, + SFX_WFYSK_GUN_PANIC_5, + SFX_WFYSK_MUGGED_1, + SFX_WFYSK_MUGGED_2, + SFX_WFYSK_SAVED_1, + SFX_WFYSK_SAVED_2, + SFX_WFYSK_TAXI_1, + SFX_WMYLG_BUMP_1, + SFX_WMYLG_BUMP_2, + SFX_WMYLG_BUMP_3, + SFX_WMYLG_BUMP_4, + SFX_WMYLG_BUMP_5, + SFX_WMYLG_BUMP_6, + SFX_WMYLG_BUMP_7, + SFX_WMYLG_BUMP_8, + SFX_WMYLG_BUMP_9, + SFX_WMYLG_BUMP_10, + SFX_WMYLG_CHAT_1, + SFX_WMYLG_CHAT_2, + SFX_WMYLG_CHAT_3, + SFX_WMYLG_CHAT_4, + SFX_WMYLG_CHAT_5, + SFX_WMYLG_CHAT_6, + SFX_WMYLG_CHAT_7, + SFX_WMYLG_CHAT_8, + SFX_WMYLG_CHAT_9, + SFX_WMYLG_CHAT_10, + SFX_WMYLG_DODGE_1, + SFX_WMYLG_DODGE_2, + SFX_WMYLG_DODGE_3, + SFX_WMYLG_DODGE_4, + SFX_WMYLG_DODGE_5, + SFX_WMYLG_DODGE_6, + SFX_WMYLG_DODGE_7, + SFX_WMYLG_DODGE_8, + SFX_WMYLG_DODGE_9, + SFX_WMYLG_FIGHT_1, + SFX_WMYLG_FIGHT_2, + SFX_WMYLG_FIGHT_3, + SFX_WMYLG_FIGHT_4, + SFX_WMYLG_FIGHT_5, + SFX_WMYLG_FIGHT_6, + SFX_WMYLG_FIGHT_7, + SFX_WMYLG_GUN_COOL_1, + SFX_WMYLG_GUN_COOL_2, + SFX_WMYLG_GUN_COOL_3, + SFX_WMYLG_GUN_COOL_4, + SFX_WMYLG_GUN_COOL_5, + SFX_WMYLG_GUN_COOL_6, + SFX_WMYLG_SAVED_1, + SFX_WMYLG_TAXI_1, + + SFX_WMOBE_BLOCKED_1, + SFX_WMOBE_BLOCKED_2, + SFX_WMOBE_BLOCKED_3, + SFX_WMOBE_BLOCKED_4, + SFX_WMOBE_BLOCKED_5, + SFX_WMOBE_BLOCKED_6, + SFX_WMOBE_BUMP_1, + SFX_WMOBE_BUMP_2, + SFX_WMOBE_BUMP_3, + SFX_WMOBE_BUMP_4, + SFX_WMOBE_BUMP_5, + SFX_WMOBE_BUMP_6, + SFX_WMOBE_BUMP_7, + SFX_WMOBE_BUMP_8, + SFX_WMOBE_BUMP_9, + SFX_WMOBE_BUMP_10, + SFX_WMOBE_BUMP_11, + SFX_WMOBE_BUMP_12, + SFX_WMOBE_CAR_CRASH_1, + SFX_WMOBE_CAR_CRASH_2, + SFX_WMOBE_CAR_CRASH_3, + SFX_WMOBE_CAR_CRASH_4, + SFX_WMOBE_CAR_CRASH_5, + SFX_WMOBE_CAR_CRASH_6, + SFX_WMOBE_CAR_CRASH_7, + SFX_WMOBE_CAR_CRASH_8, + SFX_WMOBE_CHAT_1, + SFX_WMOBE_CHAT_2, + SFX_WMOBE_CHAT_3, + SFX_WMOBE_CHAT_4, + SFX_WMOBE_CHAT_5, + SFX_WMOBE_CHAT_6, + SFX_WMOBE_CHAT_7, + SFX_WMOBE_CHAT_8, + SFX_WMOBE_CHAT_9, + SFX_WMOBE_CHAT_10, + SFX_WMOBE_DODGE_1, + SFX_WMOBE_DODGE_2, + SFX_WMOBE_DODGE_3, + SFX_WMOBE_DODGE_4, + SFX_WMOBE_DODGE_5, + SFX_WMOBE_DODGE_6, + SFX_WMOBE_DODGE_7, + SFX_WMOBE_DODGE_8, + SFX_WMOBE_EYEING_1, + SFX_WMOBE_EYEING_2, + SFX_WMOBE_GENERIC_CRASH_1, + SFX_WMOBE_GENERIC_CRASH_2, + SFX_WMOBE_GENERIC_CRASH_3, + SFX_WMOBE_GENERIC_CRASH_4, + SFX_WMOBE_GENERIC_CRASH_5, + SFX_WMOBE_GENERIC_CRASH_6, + SFX_WMOBE_GENERIC_CRASH_7, + SFX_WMOBE_GUN_PANIC_1, + SFX_WMOBE_GUN_PANIC_2, + SFX_WMOBE_GUN_PANIC_3, + SFX_WMOBE_GUN_PANIC_4, + SFX_WMOBE_GUN_PANIC_5, + SFX_WMOBE_JACKED_1, + SFX_WMOBE_JACKED_2, + SFX_WMOBE_JACKED_3, + SFX_WMOBE_JACKED_4, + SFX_WMOBE_JACKED_5, + SFX_WMOBE_JACKED_6, + SFX_WMOBE_JACKED_7, + SFX_WMOBE_JACKED_8, + SFX_WMOBE_JACKING_1, + SFX_WMOBE_JACKING_2, + SFX_WMOBE_JACKING_3, + SFX_WMOBE_JACKING_4, + SFX_WMOBE_JEER_1, + SFX_WMOBE_JEER_2, + SFX_WMOBE_JEER_3, + SFX_WMOBE_JEER_4, + SFX_WMOBE_JEER_5, + SFX_WMOBE_JEER_6, + SFX_WMOBE_JEER_7, + SFX_WMOBE_JEER_8, + SFX_WMOBE_JEER_9, + SFX_WMOBE_JEER_10, + SFX_WMOBE_JEER_11, + SFX_WMOBE_JEER_12, + SFX_WMOBE_JEER_13, + SFX_WMOBE_JEER_14, + SFX_WMOBE_JEER_15, + SFX_WMOBE_JEER_16, + SFX_WMOBE_MUGGING_1, + SFX_WMOBE_MUGGING_2, + SFX_WMOBE_MUGGING_3, + SFX_WMOBE_MUGGING_4, + SFX_WMOBE_MUGGING_5, + SFX_WMOBE_MUGGING_6, + SFX_WMOBE_RUN_1, + SFX_WMOBE_RUN_2, + SFX_WMOBE_RUN_3, + SFX_WMOBE_RUN_4, + SFX_WMOBE_SAVED_1, + SFX_WMOBE_SAVED_2, + SFX_WMOBE_SHOCKED_1, + SFX_WMOBE_SHOCKED_2, + + + + SFX_WMYBU_BLOCKED_1, + SFX_WMYBU_BLOCKED_2, + SFX_WMYBU_BLOCKED_3, + SFX_WMYBU_BLOCKED_4, + SFX_WMYBU_BLOCKED_5, + SFX_WMYBU_BLOCKED_6, + SFX_WMYBU_BLOCKED_7, + SFX_WMYBU_BLOCKED_8, + SFX_WMYBU_BLOCKED_9, + SFX_WMYBU_BUMP_1, + SFX_WMYBU_BUMP_2, + SFX_WMYBU_BUMP_3, + SFX_WMYBU_BUMP_4, + SFX_WMYBU_BUMP_5, + SFX_WMYBU_BUMP_6, + SFX_WMYBU_BUMP_7, + SFX_WMYBU_BUMP_8, + SFX_WMYBU_BUMP_9, + SFX_WMYBU_BUMP_10, + SFX_WMYBU_BUMP_11, + SFX_WMYBU_CAR_CRASH_1, + SFX_WMYBU_CAR_CRASH_2, + SFX_WMYBU_CAR_CRASH_3, + SFX_WMYBU_CAR_CRASH_4, + SFX_WMYBU_CAR_CRASH_5, + SFX_WMYBU_CAR_CRASH_6, + SFX_WMYBU_CAR_CRASH_7, + SFX_WMYBU_CAR_CRASH_8, + SFX_WMYBU_CAR_CRASH_9, + SFX_WMYBU_CHAT_1, + SFX_WMYBU_CHAT_2, + SFX_WMYBU_CHAT_3, + SFX_WMYBU_CHAT_4, + SFX_WMYBU_CHAT_5, + SFX_WMYBU_CHAT_6, + SFX_WMYBU_CHAT_7, + SFX_WMYBU_CHAT_8, + SFX_WMYBU_CHAT_9, + SFX_WMYBU_CHAT_10, + SFX_WMYBU_DODGE_1, + SFX_WMYBU_DODGE_2, + SFX_WMYBU_DODGE_3, + SFX_WMYBU_DODGE_4, + SFX_WMYBU_DODGE_5, + SFX_WMYBU_DODGE_6, + SFX_WMYBU_DODGE_7, + SFX_WMYBU_DODGE_8, + SFX_WMYBU_DODGE_9, + SFX_WMYBU_DODGE_10, + SFX_WMYBU_EYEING_1, + SFX_WMYBU_EYEING_2, + SFX_WMYBU_GENERIC_CRASH_1, + SFX_WMYBU_GENERIC_CRASH_2, + SFX_WMYBU_GENERIC_CRASH_3, + SFX_WMYBU_GENERIC_CRASH_4, + SFX_WMYBU_GENERIC_CRASH_5, + SFX_WMYBU_GUN_PANIC_1, + SFX_WMYBU_GUN_PANIC_2, + SFX_WMYBU_GUN_PANIC_3, + SFX_WMYBU_GUN_PANIC_4, + SFX_WMYBU_GUN_PANIC_5, + SFX_WMYBU_GUN_PANIC_6, + SFX_WMYBU_INNOCENT_1, + SFX_WMYBU_INNOCENT_2, + SFX_WMYBU_JACKED_1, + SFX_WMYBU_JACKED_2, + SFX_WMYBU_JACKED_3, + SFX_WMYBU_JACKED_4, + SFX_WMYBU_JACKED_5, + SFX_WMYBU_LOST_1, + SFX_WMYBU_LOST_2, + SFX_WMYBU_LOST_3, + SFX_WMYBU_LOST_4, + SFX_WMYBU_LOST_5, + SFX_WMYBU_MUGGED_1, + SFX_WMYBU_RUN_1, + SFX_WMYBU_RUN_2, + SFX_WMYBU_RUN_3, + SFX_WMYBU_SAVED_1, + SFX_WMYBU_SAVED_2, + SFX_WMYBU_SHOCKED_1, + SFX_WMYBU_SHOCKED_2, + SFX_WMYBU_SHOCKED_3, + SFX_WMYBU_SHOCKED_4, + SFX_WMYBU_SHOCKED_5, + SFX_WMYBU_TAXI_1, + SFX_WMYBU_TAXI_2, + + SFX_WMYST_BLOCKED_1, + SFX_WMYST_BLOCKED_2, + SFX_WMYST_BLOCKED_3, + SFX_WMYST_BLOCKED_4, + SFX_WMYST_BLOCKED_5, + SFX_WMYST_BLOCKED_6, + SFX_WMYST_BLOCKED_7, + SFX_WMYST_BLOCKED_8, + SFX_WMYST_BUMP_1, + SFX_WMYST_BUMP_2, + SFX_WMYST_BUMP_3, + SFX_WMYST_BUMP_4, + SFX_WMYST_BUMP_5, + SFX_WMYST_BUMP_6, + SFX_WMYST_BUMP_7, + SFX_WMYST_BUMP_8, + SFX_WMYST_BUMP_9, + SFX_WMYST_BUMP_10, + SFX_WMYST_BUMP_11, + SFX_WMYST_CAR_CRASH_1, + SFX_WMYST_CAR_CRASH_2, + SFX_WMYST_CAR_CRASH_3, + SFX_WMYST_CAR_CRASH_4, + SFX_WMYST_CAR_CRASH_5, + SFX_WMYST_CAR_CRASH_6, + SFX_WMYST_CAR_CRASH_7, + SFX_WMYST_CAR_CRASH_8, + SFX_WMYST_CHAT_1, + SFX_WMYST_CHAT_2, + SFX_WMYST_CHAT_3, + SFX_WMYST_CHAT_4, + SFX_WMYST_CHAT_5, + SFX_WMYST_CHAT_6, + SFX_WMYST_CHAT_7, + SFX_WMYST_CHAT_8, + SFX_WMYST_CHAT_9, + SFX_WMYST_CHAT_10, + SFX_WMYST_DODGE_1, + SFX_WMYST_DODGE_2, + SFX_WMYST_DODGE_3, + SFX_WMYST_DODGE_4, + SFX_WMYST_DODGE_5, + SFX_WMYST_DODGE_6, + SFX_WMYST_DODGE_7, + SFX_WMYST_DODGE_8, + SFX_WMYST_DODGE_9, + SFX_WMYST_DODGE_10, + SFX_WMYST_EYEING_1, + SFX_WMYST_EYEING_2, + SFX_WMYST_GENERIC_CRASH_1, + SFX_WMYST_GENERIC_CRASH_2, + SFX_WMYST_GENERIC_CRASH_3, + SFX_WMYST_GENERIC_CRASH_4, + SFX_WMYST_GENERIC_CRASH_5, + SFX_WMYST_GUN_PANIC_1, + SFX_WMYST_GUN_PANIC_2, + SFX_WMYST_GUN_PANIC_3, + SFX_WMYST_GUN_PANIC_4, + SFX_WMYST_GUN_PANIC_5, + SFX_WMYST_INNOCENT_1, + SFX_WMYST_INNOCENT_2, + SFX_WMYST_INNOCENT_3, + SFX_WMYST_JACKED_1, + SFX_WMYST_JACKED_2, + SFX_WMYST_JACKED_3, + SFX_WMYST_JACKED_4, + SFX_WMYST_JACKED_5, + SFX_WMYST_LOST_1, + SFX_WMYST_LOST_2, + SFX_WMYST_MUGGED_1, + SFX_WMYST_MUGGING_1, + SFX_WMYST_MUGGING_2, + SFX_WMYST_MUGGING_3, + SFX_WMYST_MUGGING_4, + SFX_WMYST_MUGGING_5, + SFX_WMYST_RUN_1, + SFX_WMYST_RUN_2, + SFX_WMYST_RUN_3, + SFX_WMYST_RUN_4, + SFX_WMYST_RUN_5, + SFX_WMYST_RUN_6, + SFX_WMYST_RUN_7, + SFX_WMYST_SAVED_1, + SFX_WMYST_TAXI_1, + SFX_WMYST_TAXI_2, + + SFX_BMYPI_BLOCKED_1, + SFX_BMYPI_BLOCKED_2, + SFX_BMYPI_BLOCKED_3, + SFX_BMYPI_BLOCKED_4, + SFX_BMYPI_BLOCKED_5, + SFX_BMYPI_BLOCKED_6, + SFX_BMYPI_BUMP_1, + SFX_BMYPI_BUMP_2, + SFX_BMYPI_BUMP_3, + SFX_BMYPI_BUMP_4, + SFX_BMYPI_BUMP_5, + SFX_BMYPI_BUMP_6, + SFX_BMYPI_BUMP_7, + SFX_BMYPI_BUMP_8, + SFX_BMYPI_BUMP_9, + SFX_BMYPI_CAR_CRASH_1, + SFX_BMYPI_CAR_CRASH_2, + SFX_BMYPI_CAR_CRASH_3, + SFX_BMYPI_CAR_CRASH_4, + SFX_BMYPI_CAR_CRASH_5, + SFX_BMYPI_DODGE_1, + SFX_BMYPI_DODGE_2, + SFX_BMYPI_DODGE_3, + SFX_BMYPI_DODGE_4, + SFX_BMYPI_DODGE_5, + SFX_BMYPI_DODGE_6, + SFX_BMYPI_DODGE_7, + SFX_BMYPI_DODGE_8, + SFX_BMYPI_DODGE_9, + SFX_BMYPI_DODGE_10, + SFX_BMYPI_EYEING_1, + SFX_BMYPI_EYEING_2, + SFX_BMYPI_EYEING_3, + SFX_BMYPI_EYEING_4, + SFX_BMYPI_FIGHT_1, + SFX_BMYPI_FIGHT_2, + SFX_BMYPI_FIGHT_3, + SFX_BMYPI_FIGHT_4, + SFX_BMYPI_FIGHT_5, + SFX_BMYPI_FIGHT_6, + SFX_BMYPI_FIGHT_7, + SFX_BMYPI_FIGHT_8, + SFX_BMYPI_GENERIC_CRASH_1, + SFX_BMYPI_GENERIC_CRASH_2, + SFX_BMYPI_GENERIC_CRASH_3, + SFX_BMYPI_GENERIC_CRASH_4, + SFX_BMYPI_GENERIC_CRASH_5, + SFX_BMYPI_GENERIC_CRASH_6, + SFX_BMYPI_GENERIC_CRASH_7, + SFX_BMYPI_GENERIC_CRASH_8, + SFX_BMYPI_GENERIC_CRASH_9, + SFX_BMYPI_GENERIC_CRASH_10, + SFX_BMYPI_GENERIC_CRASH_11, + SFX_BMYPI_GENERIC_CRASH_12, + SFX_BMYPI_GENERIC_CRASH_13, + SFX_BMYPI_GUN_COOL_1, + SFX_BMYPI_GUN_COOL_2, + SFX_BMYPI_GUN_COOL_3, + SFX_BMYPI_GUN_COOL_4, + SFX_BMYPI_GUN_COOL_5, + SFX_BMYPI_JACKED_1, + SFX_BMYPI_JACKED_2, + SFX_BMYPI_JACKED_3, + SFX_BMYPI_JACKED_4, + SFX_BMYPI_JACKED_5, + SFX_BMYPI_JACKED_6, + SFX_BMYPI_JACKING_1, + SFX_BMYPI_JACKING_2, + SFX_BMYPI_JACKING_3, + SFX_BMYPI_JACKING_4, + SFX_BMYPI_MUGGED_1, + SFX_BMYPI_SAVED_1, + SFX_BMYPI_TAXI_1, + SFX_BMYPI_TAXI_2, + + SFX_WFYPR_BUMP_1, + SFX_WFYPR_BUMP_2, + SFX_WFYPR_BUMP_3, + SFX_WFYPR_BUMP_4, + SFX_WFYPR_BUMP_5, + SFX_WFYPR_BUMP_6, + SFX_WFYPR_BUMP_7, + SFX_WFYPR_BUMP_8, + SFX_WFYPR_BUMP_9, + SFX_WFYPR_BUMP_10, + SFX_WFYPR_BUMP_11, + SFX_WFYPR_CHAT_1, + SFX_WFYPR_CHAT_2, + SFX_WFYPR_CHAT_3, + SFX_WFYPR_CHAT_4, + SFX_WFYPR_CHAT_5, + SFX_WFYPR_CHAT_6, + SFX_WFYPR_CHAT_7, + SFX_WFYPR_CHAT_8, + SFX_WFYPR_CHAT_9, + SFX_WFYPR_CHAT_10, + SFX_WFYPR_CHAT_11, + SFX_WFYPR_CHAT_12, + SFX_WFYPR_CHAT_13, + SFX_WFYPR_CHAT_14, + SFX_WFYPR_DODGE_1, + SFX_WFYPR_DODGE_2, + SFX_WFYPR_DODGE_3, + SFX_WFYPR_DODGE_4, + SFX_WFYPR_DODGE_5, + SFX_WFYPR_DODGE_6, + SFX_WFYPR_DODGE_7, + SFX_WFYPR_DODGE_8, + SFX_WFYPR_DODGE_9, + SFX_WFYPR_DODGE_10, + SFX_WFYPR_FIGHT_1, + SFX_WFYPR_FIGHT_2, + SFX_WFYPR_FIGHT_3, + SFX_WFYPR_FIGHT_4, + SFX_WFYPR_FIGHT_5, + SFX_WFYPR_FIGHT_6, + SFX_WFYPR_FIGHT_7, + SFX_WFYPR_FIGHT_8, + SFX_WFYPR_FIGHT_9, + SFX_WFYPR_FUCKING_1, + SFX_WFYPR_FUCKING_2, + SFX_WFYPR_FUCKING_3, + SFX_WFYPR_FUCKING_4, + SFX_WFYPR_FUCKING_5, + SFX_WFYPR_GUN_COOL_1, + SFX_WFYPR_GUN_COOL_2, + SFX_WFYPR_GUN_COOL_3, + SFX_WFYPR_GUN_COOL_4, + SFX_WFYPR_GUN_COOL_5, + SFX_WFYPR_GUN_COOL_6, + SFX_WFYPR_MUGGED_1, + SFX_WFYPR_MUGGED_2, + SFX_WFYPR_SAVED_1, + SFX_WFYPR_SOLICIT_1, + SFX_WFYPR_SOLICIT_2, + SFX_WFYPR_SOLICIT_3, + SFX_WFYPR_SOLICIT_4, + SFX_WFYPR_SOLICIT_5, + SFX_WFYPR_SOLICIT_6, + SFX_WFYPR_SOLICIT_7, + SFX_WFYPR_SOLICIT_8, + SFX_WFYPR_SOLICIT_9, + SFX_WFYPR_SOLICIT_10, + SFX_WFYPR_SOLICIT_11, + SFX_WFYPR_SOLICIT_12, + SFX_WFYPR_SOLICIT_13, + SFX_WFYPR_SOLICIT_14, + SFX_WFYPR_SOLICIT_15, + SFX_WFYPR_TAXI_1, + + SFX_WMYRI_BLOCKED_1, + SFX_WMYRI_BLOCKED_2, + SFX_WMYRI_BLOCKED_3, + SFX_WMYRI_BLOCKED_4, + SFX_WMYRI_BLOCKED_5, + SFX_WMYRI_BLOCKED_6, + SFX_WMYRI_BLOCKED_7, + SFX_WMYRI_BLOCKED_8, + SFX_WMYRI_BLOCKED_9, + SFX_WMYRI_BLOCKED_10, + SFX_WMYRI_BUMP_1, + SFX_WMYRI_BUMP_2, + SFX_WMYRI_BUMP_3, + SFX_WMYRI_BUMP_4, + SFX_WMYRI_BUMP_5, + SFX_WMYRI_BUMP_6, + SFX_WMYRI_BUMP_7, + SFX_WMYRI_BUMP_8, + SFX_WMYRI_CAR_CRASH_1, + SFX_WMYRI_CAR_CRASH_2, + SFX_WMYRI_CAR_CRASH_3, + SFX_WMYRI_CAR_CRASH_4, + SFX_WMYRI_CAR_CRASH_5, + SFX_WMYRI_CAR_CRASH_6, + SFX_WMYRI_CAR_CRASH_7, + SFX_WMYRI_CAR_CRASH_8, + SFX_WMYRI_CAR_CRASH_9, + SFX_WMYRI_CHAT_1, + SFX_WMYRI_CHAT_2, + SFX_WMYRI_CHAT_3, + SFX_WMYRI_CHAT_4, + SFX_WMYRI_CHAT_5, + SFX_WMYRI_CHAT_6, + SFX_WMYRI_CHAT_7, + SFX_WMYRI_CHAT_8, + SFX_WMYRI_CHAT_9, + SFX_WMYRI_CHAT_10, + SFX_WMYRI_DODGE_1, + SFX_WMYRI_DODGE_2, + SFX_WMYRI_DODGE_3, + SFX_WMYRI_DODGE_4, + SFX_WMYRI_DODGE_5, + SFX_WMYRI_DODGE_6, + SFX_WMYRI_DODGE_7, + SFX_WMYRI_DODGE_8, + SFX_WMYRI_DODGE_9, + SFX_WMYRI_EYEING_1, + SFX_WMYRI_EYEING_2, + SFX_WMYRI_EYEING_3, + SFX_WMYRI_GENERIC_CRASH_1, + SFX_WMYRI_GENERIC_CRASH_2, + SFX_WMYRI_GENERIC_CRASH_3, + SFX_WMYRI_GENERIC_CRASH_4, + SFX_WMYRI_GENERIC_CRASH_5, + SFX_WMYRI_GENERIC_CRASH_6, + SFX_WMYRI_GENERIC_CRASH_7, + SFX_WMYRI_GENERIC_CRASH_8, + SFX_WMYRI_GENERIC_CRASH_9, + SFX_WMYRI_GENERIC_CRASH_10, + SFX_WMYRI_GENERIC_CRASH_11, + SFX_WMYRI_GUN_PANIC_1, + SFX_WMYRI_GUN_PANIC_2, + SFX_WMYRI_GUN_PANIC_3, + SFX_WMYRI_GUN_PANIC_4, + SFX_WMYRI_GUN_PANIC_5, + SFX_WMYRI_GUN_PANIC_6, + SFX_WMYRI_GUN_PANIC_7, + SFX_WMYRI_GUN_PANIC_8, + SFX_WMYRI_JACKED_1, + SFX_WMYRI_JACKED_2, + SFX_WMYRI_JACKED_3, + SFX_WMYRI_JACKED_4, + SFX_WMYRI_JACKED_5, + SFX_WMYRI_JACKED_6, + SFX_WMYRI_JACKED_7, + SFX_WMYRI_JACKED_8, + SFX_WMYRI_LOST_1, + SFX_WMYRI_RUN_1, + SFX_WMYRI_RUN_2, + SFX_WMYRI_RUN_3, + SFX_WMYRI_RUN_4, + SFX_WMYRI_RUN_5, + SFX_WMYRI_SAVED_1, + SFX_WMYRI_SHOCKED_1, + SFX_WMYRI_SHOCKED_2, + SFX_WMYRI_SHOCKED_3, + SFX_WMYRI_SHOCKED_4, + SFX_WMYRI_TAXI_1, + SFX_WMYRI_TAXI_2, + + SFX_BMOST_BUMP_1, + SFX_BMOST_BUMP_2, + SFX_BMOST_BUMP_3, + SFX_BMOST_BUMP_4, + SFX_BMOST_BUMP_5, + SFX_BMOST_BUMP_6, + SFX_BMOST_BUMP_7, + SFX_BMOST_BUMP_8, + SFX_BMOST_BUMP_9, + SFX_BMOST_BUMP_10, + SFX_BMOST_BUMP_11, + SFX_BMOST_BUMP_12, + SFX_BMOST_BUMP_13, + SFX_BMOST_BUMP_14, + SFX_BMOST_BUMP_15, + SFX_BMOST_BUMP_16, + SFX_BMOST_BUMP_17, + SFX_BMOST_CAR_CRASH_1, + SFX_BMOST_CAR_CRASH_2, + SFX_BMOST_CAR_CRASH_3, + SFX_BMOST_CAR_CRASH_4, + SFX_BMOST_CAR_CRASH_5, + SFX_BMOST_CAR_CRASH_6, + SFX_BMOST_CAR_CRASH_7, + SFX_BMOST_CAR_CRASH_8, + SFX_BMOST_CHAT_1, + SFX_BMOST_CHAT_2, + SFX_BMOST_CHAT_3, + SFX_BMOST_CHAT_4, + SFX_BMOST_CHAT_5, + SFX_BMOST_CHAT_6, + SFX_BMOST_CHAT_7, + SFX_BMOST_CHAT_8, + SFX_BMOST_CHAT_9, + SFX_BMOST_CHAT_10, + SFX_BMOST_CHAT_11, + SFX_BMOST_CHAT_12, + SFX_BMOST_CHAT_13, + SFX_BMOST_CHAT_14, + SFX_BMOST_CHAT_15, + SFX_BMOST_CHAT_16, + SFX_BMOST_CHAT_17, + SFX_BMOST_CHAT_18, + SFX_BMOST_DODGE_1, + SFX_BMOST_DODGE_2, + SFX_BMOST_DODGE_3, + SFX_BMOST_DODGE_4, + SFX_BMOST_DODGE_5, + SFX_BMOST_DODGE_6, + SFX_BMOST_DODGE_7, + SFX_BMOST_DODGE_8, + SFX_BMOST_EYEING_1, + SFX_BMOST_EYEING_2, + SFX_BMOST_EYEING_3, + SFX_BMOST_EYEING_4, + SFX_BMOST_EYEING_5, + SFX_BMOST_EYEING_6, + SFX_BMOST_FIGHT_1, + SFX_BMOST_FIGHT_2, + SFX_BMOST_FIGHT_3, + SFX_BMOST_FIGHT_4, + SFX_BMOST_FIGHT_5, + SFX_BMOST_FIGHT_6, + SFX_BMOST_FIGHT_7, + SFX_BMOST_GENERIC_CRASH_1, + SFX_BMOST_GENERIC_CRASH_2, + SFX_BMOST_GENERIC_CRASH_3, + SFX_BMOST_GENERIC_CRASH_4, + SFX_BMOST_GENERIC_CRASH_5, + SFX_BMOST_GENERIC_CRASH_6, + SFX_BMOST_GENERIC_CRASH_7, + SFX_BMOST_GENERIC_CRASH_8, + SFX_BMOST_GENERIC_CRASH_9, + SFX_BMOST_GENERIC_CRASH_10, + SFX_BMOST_GENERIC_CRASH_11, + SFX_BMOST_GENERIC_CRASH_12, + SFX_BMOST_GENERIC_CRASH_13, + SFX_BMOST_GUN_PANIC_1, + SFX_BMOST_GUN_PANIC_2, + SFX_BMOST_GUN_PANIC_3, + SFX_BMOST_GUN_PANIC_4, + SFX_BMOST_GUN_PANIC_5, + SFX_BMOST_GUN_PANIC_6, + SFX_BMOST_GUN_PANIC_7, + SFX_BMOST_GUN_PANIC_8, + SFX_BMOST_GUN_PANIC_9, + SFX_BMOST_LOST_1, + SFX_BMOST_LOST_2, + SFX_BMOST_LOST_3, + SFX_BMOST_LOST_4, + SFX_BMOST_LOST_5, + SFX_BMOST_LOST_6, + SFX_BMOST_MUGGED_1, + SFX_BMOST_MUGGED_2, + SFX_BMOST_MUGGED_3, + SFX_BMOST_MUGGED_4, + SFX_BMOST_SAVED_1, + SFX_BMOST_TAXI_1, + + SFX_HFOST_BLOCKED_1, + SFX_HFOST_BLOCKED_2, + SFX_HFOST_BLOCKED_3, + SFX_HFOST_BLOCKED_4, + SFX_HFOST_BLOCKED_5, + SFX_HFOST_BLOCKED_6, + SFX_HFOST_BLOCKED_7, + SFX_HFOST_BLOCKED_8, + SFX_HFOST_BLOCKED_9, + SFX_HFOST_BUMP_1, + SFX_HFOST_BUMP_2, + SFX_HFOST_BUMP_3, + SFX_HFOST_BUMP_4, + SFX_HFOST_BUMP_5, + SFX_HFOST_BUMP_6, + SFX_HFOST_BUMP_7, + SFX_HFOST_BUMP_8, + SFX_HFOST_BUMP_9, + SFX_HFOST_BUMP_10, + SFX_HFOST_BUMP_11, + SFX_HFOST_BUMP_12, + SFX_HFOST_CAR_CRASH_1, + SFX_HFOST_CAR_CRASH_2, + SFX_HFOST_CAR_CRASH_3, + SFX_HFOST_CAR_CRASH_4, + SFX_HFOST_CAR_CRASH_5, + SFX_HFOST_CAR_CRASH_6, + SFX_HFOST_CAR_CRASH_7, + SFX_HFOST_CAR_CRASH_8, + SFX_HFOST_CHAT_1, + SFX_HFOST_CHAT_2, + SFX_HFOST_CHAT_3, + SFX_HFOST_CHAT_4, + SFX_HFOST_CHAT_5, + SFX_HFOST_CHAT_6, + SFX_HFOST_CHAT_7, + SFX_HFOST_CHAT_8, + SFX_HFOST_CHAT_9, + SFX_HFOST_CHAT_10, + SFX_HFOST_CHAT_11, + SFX_HFOST_DODGE_1, + SFX_HFOST_DODGE_2, + SFX_HFOST_DODGE_3, + SFX_HFOST_DODGE_4, + SFX_HFOST_DODGE_5, + SFX_HFOST_DODGE_6, + SFX_HFOST_DODGE_7, + SFX_HFOST_DODGE_8, + SFX_HFOST_DODGE_9, + SFX_HFOST_DODGE_10, + SFX_HFOST_FIGHT_1, + SFX_HFOST_FIGHT_2, + SFX_HFOST_FIGHT_3, + SFX_HFOST_FIGHT_4, + SFX_HFOST_FIGHT_5, + SFX_HFOST_FIGHT_6, + SFX_HFOST_FIGHT_7, + SFX_HFOST_FIGHT_8, + SFX_HFOST_GENERIC_CRASH_1, + SFX_HFOST_GENERIC_CRASH_2, + SFX_HFOST_GENERIC_CRASH_3, + SFX_HFOST_GENERIC_CRASH_4, + SFX_HFOST_GENERIC_CRASH_5, + SFX_HFOST_GENERIC_CRASH_6, + SFX_HFOST_GENERIC_CRASH_7, + SFX_HFOST_GENERIC_CRASH_8, + SFX_HFOST_GENERIC_CRASH_9, + SFX_HFOST_GENERIC_CRASH_10, + SFX_HFOST_GENERIC_CRASH_11, + SFX_HFOST_GUN_COOL_1, + SFX_HFOST_GUN_COOL_2, + SFX_HFOST_GUN_COOL_3, + SFX_HFOST_GUN_COOL_4, + SFX_HFOST_GUN_COOL_5, + SFX_HFOST_GUN_COOL_6, + SFX_HFOST_JACKED_1, + SFX_HFOST_JACKED_2, + SFX_HFOST_JACKED_3, + SFX_HFOST_JACKED_4, + SFX_HFOST_JACKED_5, + SFX_HFOST_JACKED_6, + SFX_HFOST_JACKED_7, + SFX_HFOST_JACKED_8, + SFX_HFOST_LOST_1, + SFX_HFOST_LOST_2, + SFX_HFOST_MUGGED_1, + SFX_HFOST_MUGGED_2, + SFX_HFOST_MUGGED_3, + SFX_HFOST_TAXI_1, + SFX_HFOST_TAXI_2, + + SFX_HMORI_BLOCKED_1, + SFX_HMORI_BLOCKED_2, + SFX_HMORI_BLOCKED_3, + SFX_HMORI_BLOCKED_4, + SFX_HMORI_BLOCKED_5, + SFX_HMORI_BLOCKED_6, + SFX_HMORI_BLOCKED_7, + SFX_HMORI_BLOCKED_8, + SFX_HMORI_BUMP_1, + SFX_HMORI_BUMP_2, + SFX_HMORI_BUMP_3, + SFX_HMORI_BUMP_4, + SFX_HMORI_BUMP_5, + SFX_HMORI_BUMP_6, + SFX_HMORI_BUMP_7, + SFX_HMORI_BUMP_8, + SFX_HMORI_BUMP_9, + SFX_HMORI_BUMP_10, + SFX_HMORI_BUMP_11, + SFX_HMORI_CAR_CRASH_1, + SFX_HMORI_CAR_CRASH_2, + SFX_HMORI_CAR_CRASH_3, + SFX_HMORI_CAR_CRASH_4, + SFX_HMORI_CAR_CRASH_5, + SFX_HMORI_CAR_CRASH_6, + SFX_HMORI_CHAT_1, + SFX_HMORI_CHAT_2, + SFX_HMORI_CHAT_3, + SFX_HMORI_CHAT_4, + SFX_HMORI_CHAT_5, + SFX_HMORI_CHAT_6, + SFX_HMORI_CHAT_7, + SFX_HMORI_CHAT_8, + SFX_HMORI_DODGE_1, + SFX_HMORI_DODGE_2, + SFX_HMORI_DODGE_3, + SFX_HMORI_DODGE_4, + SFX_HMORI_DODGE_5, + SFX_HMORI_DODGE_6, + SFX_HMORI_DODGE_7, + SFX_HMORI_GENERIC_CRASH_1, + SFX_HMORI_GENERIC_CRASH_2, + SFX_HMORI_GENERIC_CRASH_3, + SFX_HMORI_GENERIC_CRASH_4, + SFX_HMORI_GENERIC_CRASH_5, + SFX_HMORI_GENERIC_CRASH_6, + SFX_HMORI_GENERIC_CRASH_7, + SFX_HMORI_GENERIC_CRASH_8, + SFX_HMORI_GENERIC_CRASH_9, + SFX_HMORI_GENERIC_CRASH_10, + SFX_HMORI_GENERIC_CRASH_11, + SFX_HMORI_GUN_PANIC_1, + SFX_HMORI_GUN_PANIC_2, + SFX_HMORI_GUN_PANIC_3, + SFX_HMORI_GUN_PANIC_4, + SFX_HMORI_GUN_PANIC_5, + SFX_HMORI_JACKED_1, + SFX_HMORI_JACKED_2, + SFX_HMORI_JACKED_3, + SFX_HMORI_JACKED_4, + SFX_HMORI_JACKED_5, + SFX_HMORI_JACKED_6, + SFX_HMORI_JACKED_7, + SFX_HMORI_JACKED_8, + SFX_HMORI_LOST_1, + SFX_HMORI_LOST_2, + SFX_HMORI_MUGGED_1, + SFX_HMORI_MUGGED_2, + SFX_HMORI_MUGGED_3, + SFX_HMORI_RUN_1, + SFX_HMORI_RUN_2, + SFX_HMORI_RUN_3, + SFX_HMORI_RUN_4, + SFX_HMORI_RUN_5, + SFX_HMORI_RUN_6, + SFX_HMORI_TAXI_1, + SFX_HMORI_TAXI_2, + + SFX_HMOTR_BUMP_1, + SFX_HMOTR_BUMP_2, + SFX_HMOTR_BUMP_3, + SFX_HMOTR_BUMP_4, + SFX_HMOTR_BUMP_5, + SFX_HMOTR_BUMP_6, + SFX_HMOTR_BUMP_7, + SFX_HMOTR_BUMP_8, + SFX_HMOTR_CHAT_1, + SFX_HMOTR_CHAT_2, + SFX_HMOTR_CHAT_3, + SFX_HMOTR_CHAT_4, + SFX_HMOTR_CHAT_5, + SFX_HMOTR_CHAT_6, + SFX_HMOTR_CHAT_7, + SFX_HMOTR_CHAT_8, + SFX_HMOTR_CHAT_9, + SFX_HMOTR_DODGE_1, + SFX_HMOTR_DODGE_2, + SFX_HMOTR_DODGE_3, + SFX_HMOTR_DODGE_4, + SFX_HMOTR_DODGE_5, + SFX_HMOTR_DODGE_6, + SFX_HMOTR_DODGE_7, + SFX_HMOTR_DODGE_8, + SFX_HMOTR_DODGE_9, + SFX_HMOTR_DODGE_10, + SFX_HMOTR_DODGE_11, + SFX_HMOTR_FIGHT_1, + SFX_HMOTR_FIGHT_2, + SFX_HMOTR_FIGHT_3, + SFX_HMOTR_FIGHT_4, + SFX_HMOTR_FIGHT_5, + SFX_HMOTR_FIGHT_6, + SFX_HMOTR_FIGHT_7, + SFX_HMOTR_GUN_COOL_1, + SFX_HMOTR_GUN_COOL_2, + SFX_HMOTR_GUN_COOL_3, + SFX_HMOTR_GUN_COOL_4, + SFX_HMOTR_GUN_COOL_5, + SFX_HMOTR_GUN_COOL_6, + SFX_HMOTR_SAVED_1, + SFX_HMOTR_SAVED_2, + SFX_HMOTR_SHOCKED_1, + SFX_HMOTR_SHOCKED_2, + SFX_HMOTR_SHOCKED_3, + SFX_HMOTR_SOLICIT_1, + SFX_HMOTR_SOLICIT_2, + SFX_HMOTR_SOLICIT_3, + SFX_HMOTR_SOLICIT_4, + SFX_HMOTR_SOLICIT_5, + SFX_HMOTR_SOLICIT_6, + SFX_HMOTR_SOLICIT_7, + SFX_HMOTR_SOLICIT_8, + SFX_HMOTR_TAXI_1, + + SFX_HMYAP_BLOCKED_1, + SFX_HMYAP_BLOCKED_2, + SFX_HMYAP_BLOCKED_3, + SFX_HMYAP_BLOCKED_4, + SFX_HMYAP_BLOCKED_5, + SFX_HMYAP_BLOCKED_6, + SFX_HMYAP_BLOCKED_7, + SFX_HMYAP_BLOCKED_8, + SFX_HMYAP_BLOCKED_9, + SFX_HMYAP_BUMP_1, + SFX_HMYAP_BUMP_2, + SFX_HMYAP_BUMP_3, + SFX_HMYAP_BUMP_4, + SFX_HMYAP_BUMP_5, + SFX_HMYAP_BUMP_6, + SFX_HMYAP_BUMP_7, + SFX_HMYAP_BUMP_8, + SFX_HMYAP_BUMP_9, + SFX_HMYAP_BUMP_10, + SFX_HMYAP_BUMP_11, + SFX_HMYAP_CAR_CRASH_1, + SFX_HMYAP_CAR_CRASH_2, + SFX_HMYAP_CAR_CRASH_3, + SFX_HMYAP_CAR_CRASH_4, + SFX_HMYAP_CAR_CRASH_5, + SFX_HMYAP_CAR_CRASH_6, + SFX_HMYAP_CAR_CRASH_7, + SFX_HMYAP_CAR_CRASH_8, + SFX_HMYAP_CAR_CRASH_9, + SFX_HMYAP_CHAT_1, + SFX_HMYAP_CHAT_2, + SFX_HMYAP_CHAT_3, + SFX_HMYAP_CHAT_4, + SFX_HMYAP_CHAT_5, + SFX_HMYAP_CHAT_6, + SFX_HMYAP_CHAT_7, + SFX_HMYAP_CHAT_8, + SFX_HMYAP_CHAT_9, + SFX_HMYAP_DODGE_1, + SFX_HMYAP_DODGE_2, + SFX_HMYAP_DODGE_3, + SFX_HMYAP_DODGE_4, + SFX_HMYAP_DODGE_5, + SFX_HMYAP_DODGE_6, + SFX_HMYAP_DODGE_7, + SFX_HMYAP_DODGE_8, + SFX_HMYAP_DODGE_9, + SFX_HMYAP_EYEING_1, + SFX_HMYAP_EYEING_2, + SFX_HMYAP_EYEING_3, + SFX_HMYAP_GENERIC_CRASH_1, + SFX_HMYAP_GENERIC_CRASH_2, + SFX_HMYAP_GENERIC_CRASH_3, + SFX_HMYAP_GENERIC_CRASH_4, + SFX_HMYAP_GENERIC_CRASH_5, + SFX_HMYAP_GENERIC_CRASH_6, + SFX_HMYAP_GUN_PANIC_1, + SFX_HMYAP_GUN_PANIC_2, + SFX_HMYAP_GUN_PANIC_3, + SFX_HMYAP_GUN_PANIC_4, + SFX_HMYAP_GUN_PANIC_5, + SFX_HMYAP_GUN_PANIC_6, + SFX_HMYAP_GUN_PANIC_7, + SFX_HMYAP_JACKED_1, + SFX_HMYAP_JACKED_2, + SFX_HMYAP_JACKED_3, + SFX_HMYAP_JACKED_4, + SFX_HMYAP_JACKED_5, + SFX_HMYAP_JACKED_6, + SFX_HMYAP_JACKED_7, + SFX_HMYAP_JACKING_1, + SFX_HMYAP_JACKING_2, + SFX_HMYAP_JACKING_3, + SFX_HMYAP_JACKING_4, + SFX_HMYAP_LOST_1, + SFX_HMYAP_LOST_2, + SFX_HMYAP_MUGGED_1, + SFX_HMYAP_MUGGED_2, + SFX_HMYAP_RUN_1, + SFX_HMYAP_RUN_2, + SFX_HMYAP_RUN_3, + SFX_HMYAP_RUN_4, + SFX_HMYAP_RUN_5, + SFX_HMYAP_RUN_6, + SFX_HMYAP_SAVED_1, + SFX_HMYAP_SAVED_2, + SFX_HMYAP_TAXI_1, + SFX_HMYAP_TAXI_2, + + SFX_HFOTR_BUMP_1, + SFX_HFOTR_BUMP_2, + SFX_HFOTR_BUMP_3, + SFX_HFOTR_BUMP_4, + SFX_HFOTR_BUMP_5, + SFX_HFOTR_BUMP_6, + SFX_HFOTR_BUMP_7, + SFX_HFOTR_BUMP_8, + SFX_HFOTR_BUMP_9, + SFX_HFOTR_BUMP_10, + SFX_HFOTR_BUMP_11, + SFX_HFOTR_CHAT_1, + SFX_HFOTR_CHAT_2, + SFX_HFOTR_CHAT_3, + SFX_HFOTR_CHAT_4, + SFX_HFOTR_CHAT_5, + SFX_HFOTR_CHAT_6, + SFX_HFOTR_CHAT_7, + SFX_HFOTR_CHAT_8, + SFX_HFOTR_CHAT_9, + SFX_HFOTR_CHAT_10, + SFX_HFOTR_CHAT_11, + SFX_HFOTR_CHAT_12, + SFX_HFOTR_DODGE_1, + SFX_HFOTR_DODGE_2, + SFX_HFOTR_DODGE_3, + SFX_HFOTR_DODGE_4, + SFX_HFOTR_DODGE_5, + SFX_HFOTR_DODGE_6, + SFX_HFOTR_DODGE_7, + SFX_HFOTR_DODGE_8, + SFX_HFOTR_FIGHT_1, + SFX_HFOTR_FIGHT_2, + SFX_HFOTR_FIGHT_3, + SFX_HFOTR_FIGHT_4, + SFX_HFOTR_FIGHT_5, + SFX_HFOTR_FIGHT_6, + SFX_HFOTR_GUN_COOL_1, + SFX_HFOTR_GUN_COOL_2, + SFX_HFOTR_GUN_COOL_3, + SFX_HFOTR_GUN_COOL_4, + SFX_HFOTR_GUN_COOL_5, + SFX_HFOTR_MUGGED_1, + SFX_HFOTR_MUGGED_2, + SFX_HFOTR_SAVED_1, + SFX_HFOTR_SHOCKED_1, + SFX_HFOTR_SHOCKED_2, + SFX_HFOTR_TAXI_1, + SFX_HFOTR_TAXI_2, + + SFX_HMOBE_BLOCKED_1, + SFX_HMOBE_BLOCKED_2, + SFX_HMOBE_BLOCKED_3, + SFX_HMOBE_BLOCKED_4, + SFX_HMOBE_BLOCKED_5, + SFX_HMOBE_BLOCKED_6, + SFX_HMOBE_BLOCKED_7, + SFX_HMOBE_BLOCKED_8, + SFX_HMOBE_BLOCKED_9, + SFX_HMOBE_BLOCKED_10, + SFX_HMOBE_BUMP_1, + SFX_HMOBE_BUMP_2, + SFX_HMOBE_BUMP_3, + SFX_HMOBE_BUMP_4, + SFX_HMOBE_BUMP_5, + SFX_HMOBE_BUMP_6, + SFX_HMOBE_BUMP_7, + SFX_HMOBE_BUMP_8, + SFX_HMOBE_DODGE_1, + SFX_HMOBE_DODGE_2, + SFX_HMOBE_DODGE_3, + SFX_HMOBE_DODGE_4, + SFX_HMOBE_DODGE_5, + SFX_HMOBE_DODGE_6, + SFX_HMOBE_DODGE_7, + SFX_HMOBE_DODGE_8, + SFX_HMOBE_DODGE_9, + SFX_HMOBE_EYEING_1, + SFX_HMOBE_EYEING_2, + SFX_HMOBE_EYEING_3, + SFX_HMOBE_EYEING_4, + SFX_HMOBE_GUN_PANIC_1, + SFX_HMOBE_GUN_PANIC_2, + SFX_HMOBE_GUN_PANIC_3, + SFX_HMOBE_INNOCENT_1, + SFX_HMOBE_INNOCENT_2, + SFX_HMOBE_INNOCENT_3, + SFX_HMOBE_JACKED_1, + SFX_HMOBE_JACKED_2, + SFX_HMOBE_JACKED_3, + SFX_HMOBE_JACKED_4, + SFX_HMOBE_JACKED_5, + SFX_HMOBE_JACKED_6, + + SFX_HFYBU_BLOCKED_1, + SFX_HFYBU_BLOCKED_2, + SFX_HFYBU_BLOCKED_3, + SFX_HFYBU_BLOCKED_4, + SFX_HFYBU_BLOCKED_5, + SFX_HFYBU_BLOCKED_6, + SFX_HFYBU_BLOCKED_7, + SFX_HFYBU_BLOCKED_8, + SFX_HFYBU_BUMP_1, + SFX_HFYBU_BUMP_2, + SFX_HFYBU_BUMP_3, + SFX_HFYBU_BUMP_4, + SFX_HFYBU_BUMP_5, + SFX_HFYBU_BUMP_6, + SFX_HFYBU_BUMP_7, + SFX_HFYBU_BUMP_8, + SFX_HFYBU_BUMP_9, + SFX_HFYBU_BUMP_10, + SFX_HFYBU_BUMP_11, + SFX_HFYBU_CAR_CRASH_1, + SFX_HFYBU_CAR_CRASH_2, + SFX_HFYBU_CAR_CRASH_3, + SFX_HFYBU_CAR_CRASH_4, + SFX_HFYBU_CAR_CRASH_5, + SFX_HFYBU_CAR_CRASH_6, + SFX_HFYBU_CAR_CRASH_7, + SFX_HFYBU_CAR_CRASH_8, + SFX_HFYBU_DODGE_1, + SFX_HFYBU_DODGE_2, + SFX_HFYBU_DODGE_3, + SFX_HFYBU_DODGE_4, + SFX_HFYBU_DODGE_5, + SFX_HFYBU_DODGE_6, + SFX_HFYBU_DODGE_7, + SFX_HFYBU_DODGE_8, + SFX_HFYBU_DODGE_9, + SFX_HFYBU_DODGE_10, + SFX_HFYBU_FIGHT_1, + SFX_HFYBU_FIGHT_2, + SFX_HFYBU_FIGHT_3, + SFX_HFYBU_FIGHT_4, + SFX_HFYBU_FIGHT_5, + SFX_HFYBU_FIGHT_6, + SFX_HFYBU_FIGHT_7, + SFX_HFYBU_GENERIC_CRASH_1, + SFX_HFYBU_GENERIC_CRASH_2, + SFX_HFYBU_GENERIC_CRASH_3, + SFX_HFYBU_GENERIC_CRASH_4, + SFX_HFYBU_GENERIC_CRASH_5, + SFX_HFYBU_GENERIC_CRASH_6, + SFX_HFYBU_GENERIC_CRASH_7, + SFX_HFYBU_GENERIC_CRASH_8, + SFX_HFYBU_GENERIC_CRASH_9, + SFX_HFYBU_GENERIC_CRASH_10, + SFX_HFYBU_GENERIC_CRASH_11, + SFX_HFYBU_GENERIC_CRASH_12, + SFX_HFYBU_GUN_PANIC_1, + SFX_HFYBU_GUN_PANIC_2, + SFX_HFYBU_GUN_PANIC_3, + SFX_HFYBU_GUN_PANIC_4, + SFX_HFYBU_GUN_PANIC_5, + SFX_HFYBU_JACKED_1, + SFX_HFYBU_JACKED_2, + SFX_HFYBU_JACKED_3, + SFX_HFYBU_JACKED_4, + SFX_HFYBU_JACKED_5, + SFX_HFYBU_JACKED_6, + SFX_HFYBU_JACKING_1, + SFX_HFYBU_JACKING_2, + SFX_HFYBU_JACKING_3, + SFX_HFYBU_LOST_1, + SFX_HFYBU_LOST_2, + SFX_HFYBU_MUGGED_1, + SFX_HFYBU_MUGGED_2, + SFX_HFYBU_SAVED_1, + SFX_HFYBU_TAXI_1, + + SFX_HFYCG_BUMP_1, + SFX_HFYCG_BUMP_2, + SFX_HFYCG_BUMP_3, + SFX_HFYCG_BUMP_4, + SFX_HFYCG_BUMP_5, + SFX_HFYCG_BUMP_6, + SFX_HFYCG_BUMP_7, + SFX_HFYCG_BUMP_8, + SFX_HFYCG_BUMP_9, + SFX_HFYCG_DODGE_1, + SFX_HFYCG_DODGE_2, + SFX_HFYCG_DODGE_3, + SFX_HFYCG_DODGE_4, + SFX_HFYCG_DODGE_5, + SFX_HFYCG_DODGE_6, + SFX_HFYCG_DODGE_7, + SFX_HFYCG_DODGE_8, + SFX_HFYCG_GUN_PANIC_1, + SFX_HFYCG_GUN_PANIC_2, + SFX_HFYCG_GUN_PANIC_3, + SFX_HFYCG_GUN_PANIC_4, + SFX_HFYCG_GUN_PANIC_5, + SFX_HFYCG_MUGGED_1, + SFX_HFYCG_MUGGED_2, + SFX_HFYCG_RUN_1, + SFX_HFYCG_RUN_2, + SFX_HFYCG_RUN_3, + SFX_HFYCG_RUN_4, + SFX_HFYCG_SAVED_1, + SFX_HFYCG_SOLICIT_1, + SFX_HFYCG_SOLICIT_2, + SFX_HFYCG_SOLICIT_3, + SFX_HFYCG_SOLICIT_4, + SFX_HFYCG_SOLICIT_5, + SFX_HFYCG_SOLICIT_6, + SFX_HFYCG_SOLICIT_7, + SFX_HFYCG_SOLICIT_8, + SFX_HFYCG_SOLICIT_9, + SFX_HFYCG_SOLICIT_10, + SFX_HFYCG_SOLICIT_11, + SFX_HFYCG_SOLICIT_12, + SFX_HFYCG_SOLICIT_13, + SFX_HFYCG_SOLICIT_14, + SFX_HFYCG_TAXI_1, + + SFX_HMYBE_BUMP_1, + SFX_HMYBE_BUMP_2, + SFX_HMYBE_BUMP_3, + SFX_HMYBE_BUMP_4, + SFX_HMYBE_BUMP_5, + SFX_HMYBE_BUMP_6, + SFX_HMYBE_BUMP_7, + SFX_HMYBE_BUMP_8, + SFX_HMYBE_BUMP_9, + SFX_HMYBE_BUMP_10, + SFX_HMYBE_CAR_CRASH_1, + SFX_HMYBE_CAR_CRASH_2, + SFX_HMYBE_CAR_CRASH_3, + SFX_HMYBE_CAR_CRASH_4, + SFX_HMYBE_CAR_CRASH_5, + SFX_HMYBE_CAR_CRASH_6, + SFX_HMYBE_CAR_CRASH_7, + SFX_HMYBE_CHAT_1, + SFX_HMYBE_CHAT_2, + SFX_HMYBE_CHAT_3, + SFX_HMYBE_CHAT_4, + SFX_HMYBE_CHAT_5, + SFX_HMYBE_CHAT_6, + SFX_HMYBE_CHAT_7, + SFX_HMYBE_CHAT_8, + SFX_HMYBE_CHAT_9, + SFX_HMYBE_CHAT_10, + SFX_HMYBE_DODGE_1, + SFX_HMYBE_DODGE_2, + SFX_HMYBE_DODGE_3, + SFX_HMYBE_DODGE_4, + SFX_HMYBE_DODGE_5, + SFX_HMYBE_DODGE_6, + SFX_HMYBE_DODGE_7, + SFX_HMYBE_EYEING_1, + SFX_HMYBE_EYEING_2, + SFX_HMYBE_EYEING_3, + SFX_HMYBE_EYEING_4, + SFX_HMYBE_EYEING_5, + SFX_HMYBE_FIGHT_1, + SFX_HMYBE_FIGHT_2, + SFX_HMYBE_FIGHT_3, + SFX_HMYBE_FIGHT_4, + SFX_HMYBE_FIGHT_5, + SFX_HMYBE_FIGHT_6, + SFX_HMYBE_FIGHT_7, + SFX_HMYBE_FIGHT_8, + SFX_HMYBE_GENERIC_CRASH_1, + SFX_HMYBE_GENERIC_CRASH_2, + SFX_HMYBE_GENERIC_CRASH_3, + SFX_HMYBE_GENERIC_CRASH_4, + SFX_HMYBE_GENERIC_CRASH_5, + SFX_HMYBE_GENERIC_CRASH_6, + SFX_HMYBE_GENERIC_CRASH_7, + SFX_HMYBE_GENERIC_CRASH_8, + SFX_HMYBE_GENERIC_CRASH_9, + SFX_HMYBE_GENERIC_CRASH_10, + SFX_HMYBE_GUN_PANIC_1, + SFX_HMYBE_GUN_PANIC_2, + SFX_HMYBE_GUN_PANIC_3, + SFX_HMYBE_GUN_PANIC_4, + SFX_HMYBE_GUN_PANIC_5, + SFX_HMYBE_GUN_PANIC_6, + SFX_HMYBE_INNOCENT_1, + SFX_HMYBE_INNOCENT_2, + SFX_HMYBE_INNOCENT_3, + SFX_HMYBE_INNOCENT_4, + SFX_HMYBE_JACKED_1, + SFX_HMYBE_JACKED_2, + SFX_HMYBE_JACKED_3, + SFX_HMYBE_JACKED_4, + SFX_HMYBE_JACKED_5, + SFX_HMYBE_JACKED_6, + SFX_HMYBE_JACKED_7, + SFX_HMYBE_JACKED_8, + SFX_HMYBE_JACKED_9, + SFX_HMYBE_JACKED_10, + SFX_HMYBE_JACKED_11, + SFX_HMYBE_JACKED_12, + SFX_HMYBE_LOST_1, + SFX_HMYBE_LOST_2, + SFX_HMYBE_LOST_3, + SFX_HMYBE_SAVED_1, + SFX_HMYBE_SHOCKED_1, + SFX_HMYBE_SHOCKED_2, + SFX_HMYBE_TAXI_1, + + SFX_WMOGO_BUMP_1, + SFX_WMOGO_BUMP_2, + SFX_WMOGO_BUMP_3, + SFX_WMOGO_BUMP_4, + SFX_WMOGO_BUMP_5, + SFX_WMOGO_BUMP_6, + SFX_WMOGO_BUMP_7, + SFX_WMOGO_BUMP_8, + SFX_WMOGO_CAR_CRASH_1, + SFX_WMOGO_CAR_CRASH_2, + SFX_WMOGO_CAR_CRASH_3, + SFX_WMOGO_CAR_CRASH_4, + SFX_WMOGO_CAR_CRASH_5, + SFX_WMOGO_CAR_CRASH_6, + SFX_WMOGO_CAR_CRASH_7, + SFX_WMOGO_CAR_CRASH_8, + SFX_WMOGO_CAR_CRASH_9, + SFX_WMOGO_CHAT_1, + SFX_WMOGO_CHAT_2, + SFX_WMOGO_CHAT_3, + SFX_WMOGO_CHAT_4, + SFX_WMOGO_CHAT_5, + SFX_WMOGO_CHAT_6, + SFX_WMOGO_CHAT_7, + SFX_WMOGO_CHAT_8, + SFX_WMOGO_CHAT_9, + SFX_WMOGO_DODGE_1, + SFX_WMOGO_DODGE_2, + SFX_WMOGO_DODGE_3, + SFX_WMOGO_DODGE_4, + SFX_WMOGO_DODGE_5, + SFX_WMOGO_DODGE_6, + SFX_WMOGO_DODGE_7, + SFX_WMOGO_DODGE_8, + SFX_WMOGO_DODGE_9, + SFX_WMOGO_DODGE_10, + SFX_WMOGO_DODGE_11, + SFX_WMOGO_DODGE_12, + SFX_WMOGO_EYEING_1, + SFX_WMOGO_EYEING_2, + SFX_WMOGO_FIGHT_1, + SFX_WMOGO_FIGHT_2, + SFX_WMOGO_FIGHT_3, + SFX_WMOGO_FIGHT_4, + SFX_WMOGO_FIGHT_5, + SFX_WMOGO_FIGHT_6, + SFX_WMOGO_FIGHT_7, + SFX_WMOGO_FIGHT_8, + SFX_WMOGO_FIGHT_9, + SFX_WMOGO_FIGHT_10, + SFX_WMOGO_FIGHT_11, + SFX_WMOGO_FIGHT_12, + SFX_WMOGO_FIGHT_13, + SFX_WMOGO_GENERIC_CRASH_1, + SFX_WMOGO_GENERIC_CRASH_2, + SFX_WMOGO_GENERIC_CRASH_3, + SFX_WMOGO_GENERIC_CRASH_4, + SFX_WMOGO_GENERIC_CRASH_5, + SFX_WMOGO_GENERIC_CRASH_6, + SFX_WMOGO_GENERIC_CRASH_7, + SFX_WMOGO_GENERIC_CRASH_8, + SFX_WMOGO_GUN_PANIC_1, + SFX_WMOGO_GUN_PANIC_2, + SFX_WMOGO_GUN_PANIC_3, + SFX_WMOGO_GUN_PANIC_4, + SFX_WMOGO_GUN_PANIC_5, + SFX_WMOGO_JACKED_1, + SFX_WMOGO_JACKED_2, + SFX_WMOGO_JACKED_3, + SFX_WMOGO_JACKED_4, + SFX_WMOGO_JACKED_5, + SFX_WMOGO_JACKED_6, + SFX_WMOGO_RUN_1, + SFX_WMOGO_RUN_2, + SFX_WMOGO_RUN_3, + SFX_WMOGO_RUN_4, + SFX_WMOGO_RUN_5, + SFX_WMOGO_SAVED_1, + SFX_WMOGO_SHOCKED_1, + SFX_WMOGO_SHOCKED_2, + SFX_WMOGO_SHOCKED_3, + SFX_WMOGO_TAXI_1, + + SFX_WMYCR_BUMP_1, + SFX_WMYCR_BUMP_2, + SFX_WMYCR_BUMP_3, + SFX_WMYCR_BUMP_4, + SFX_WMYCR_BUMP_5, + SFX_WMYCR_BUMP_6, + SFX_WMYCR_BUMP_7, + SFX_WMYCR_BUMP_8, + SFX_WMYCR_BUMP_9, + SFX_WMYCR_BUMP_10, + SFX_WMYCR_BUMP_11, + SFX_WMYCR_BUMP_12, + SFX_WMYCR_BUMP_13, + SFX_WMYCR_BUMP_14, + SFX_WMYCR_BUMP_15, + SFX_WMYCR_BUMP_16, + SFX_WMYCR_BUMP_17, + SFX_WMYCR_BUMP_18, + SFX_WMYCR_CAR_CRASH_1, + SFX_WMYCR_CAR_CRASH_2, + SFX_WMYCR_CAR_CRASH_3, + SFX_WMYCR_CAR_CRASH_4, + SFX_WMYCR_CAR_CRASH_5, + SFX_WMYCR_CAR_CRASH_6, + SFX_WMYCR_CAR_CRASH_7, + SFX_WMYCR_CAR_CRASH_8, + SFX_WMYCR_CAR_CRASH_9, + SFX_WMYCR_DODGE_1, + SFX_WMYCR_DODGE_2, + SFX_WMYCR_DODGE_3, + SFX_WMYCR_DODGE_4, + SFX_WMYCR_DODGE_5, + SFX_WMYCR_DODGE_6, + SFX_WMYCR_DODGE_7, + SFX_WMYCR_DODGE_8, + SFX_WMYCR_DODGE_9, + SFX_WMYCR_DODGE_10, + SFX_WMYCR_FIGHT_1, + SFX_WMYCR_FIGHT_2, + SFX_WMYCR_FIGHT_3, + SFX_WMYCR_FIGHT_4, + SFX_WMYCR_FIGHT_5, + SFX_WMYCR_FIGHT_6, + SFX_WMYCR_FIGHT_7, + SFX_WMYCR_GENERIC_CRASH_1, + SFX_WMYCR_GENERIC_CRASH_2, + SFX_WMYCR_GENERIC_CRASH_3, + SFX_WMYCR_GENERIC_CRASH_4, + SFX_WMYCR_GENERIC_CRASH_5, + SFX_WMYCR_GENERIC_CRASH_6, + SFX_WMYCR_GENERIC_CRASH_7, + SFX_WMYCR_GENERIC_CRASH_8, + SFX_WMYCR_GENERIC_CRASH_9, + SFX_WMYCR_GUN_COOL_1, + SFX_WMYCR_GUN_COOL_2, + SFX_WMYCR_GUN_COOL_3, + SFX_WMYCR_GUN_COOL_4, + SFX_WMYCR_GUN_COOL_5, + SFX_WMYCR_JACKING_1, + SFX_WMYCR_JACKING_2, + SFX_WMYCR_JACKING_3, + SFX_WMYCR_JACKING_4, + SFX_WMYCR_JACKING_5, + SFX_WMYCR_JACKING_6, + SFX_WMYCR_MUGGED_1, + SFX_WMYCR_MUGGED_2, + SFX_WMYCR_MUGGED_3, + SFX_WMYCR_MUGGING_1, + SFX_WMYCR_MUGGING_2, + SFX_WMYCR_MUGGING_3, + SFX_WMYCR_MUGGING_4, + SFX_WMYCR_MUGGING_5, + SFX_WMYCR_TAXI_1, + + SFX_WMYJG_BLOCKED_1, + SFX_WMYJG_BLOCKED_2, + SFX_WMYJG_BLOCKED_3, + SFX_WMYJG_BLOCKED_4, + SFX_WMYJG_BLOCKED_5, + SFX_WMYJG_BLOCKED_6, + SFX_WMYJG_BLOCKED_7, + SFX_WMYJG_BLOCKED_8, + SFX_WMYJG_BLOCKED_9, + SFX_WMYJG_BLOCKED_10, + SFX_WMYJG_BUMP_1, + SFX_WMYJG_BUMP_2, + SFX_WMYJG_BUMP_3, + SFX_WMYJG_BUMP_4, + SFX_WMYJG_BUMP_5, + SFX_WMYJG_BUMP_6, + SFX_WMYJG_BUMP_7, + SFX_WMYJG_BUMP_8, + SFX_WMYJG_BUMP_9, + SFX_WMYJG_BUMP_10, + SFX_WMYJG_EYEING_1, + SFX_WMYJG_EYEING_2, + SFX_WMYJG_GUN_PANIC_1, + SFX_WMYJG_GUN_PANIC_2, + SFX_WMYJG_GUN_PANIC_3, + SFX_WMYJG_GUN_PANIC_4, + SFX_WMYJG_MUGGED_1, + SFX_WMYJG_MUGGED_2, + SFX_WMYJG_RUN_1, + SFX_WMYJG_RUN_2, + SFX_WMYJG_RUN_3, + SFX_WMYJG_RUN_4, + SFX_WMYJG_RUN_5, + SFX_WMYJG_SAVED_1, + SFX_WMYJG_TAXI_1, + + SFX_WMOST_BLOCKED_1, + SFX_WMOST_BLOCKED_2, + SFX_WMOST_BLOCKED_3, + SFX_WMOST_BLOCKED_4, + SFX_WMOST_BLOCKED_5, + SFX_WMOST_BLOCKED_6, + SFX_WMOST_BLOCKED_7, + SFX_WMOST_BLOCKED_8, + SFX_WMOST_BUMP_1, + SFX_WMOST_BUMP_2, + SFX_WMOST_BUMP_3, + SFX_WMOST_BUMP_4, + SFX_WMOST_BUMP_5, + SFX_WMOST_BUMP_6, + SFX_WMOST_BUMP_7, + SFX_WMOST_BUMP_8, + SFX_WMOST_BUMP_9, + SFX_WMOST_BUMP_10, + SFX_WMOST_CAR_CRASH_1, + SFX_WMOST_CAR_CRASH_2, + SFX_WMOST_CAR_CRASH_3, + SFX_WMOST_CAR_CRASH_4, + SFX_WMOST_CAR_CRASH_5, + SFX_WMOST_CAR_CRASH_6, + SFX_WMOST_CAR_CRASH_7, + SFX_WMOST_CHAT_1, + SFX_WMOST_CHAT_2, + SFX_WMOST_CHAT_3, + SFX_WMOST_CHAT_4, + SFX_WMOST_CHAT_5, + SFX_WMOST_CHAT_6, + SFX_WMOST_CHAT_7, + SFX_WMOST_CHAT_8, + SFX_WMOST_CHAT_9, + SFX_WMOST_DODGE_1, + SFX_WMOST_DODGE_2, + SFX_WMOST_DODGE_3, + SFX_WMOST_DODGE_4, + SFX_WMOST_DODGE_5, + SFX_WMOST_DODGE_6, + SFX_WMOST_DODGE_7, + SFX_WMOST_DODGE_8, + SFX_WMOST_EYEING_1, + SFX_WMOST_EYEING_2, + SFX_WMOST_FIGHT_1, + SFX_WMOST_FIGHT_2, + SFX_WMOST_FIGHT_3, + SFX_WMOST_FIGHT_4, + SFX_WMOST_FIGHT_5, + SFX_WMOST_FIGHT_6, + SFX_WMOST_FIGHT_7, + SFX_WMOST_FIGHT_8, + SFX_WMOST_GENERIC_CRASH_1, + SFX_WMOST_GENERIC_CRASH_2, + SFX_WMOST_GENERIC_CRASH_3, + SFX_WMOST_GENERIC_CRASH_4, + SFX_WMOST_GENERIC_CRASH_5, + SFX_WMOST_GENERIC_CRASH_6, + SFX_WMOST_GENERIC_CRASH_7, + SFX_WMOST_GUN_COOL_1, + SFX_WMOST_GUN_COOL_2, + SFX_WMOST_GUN_COOL_3, + SFX_WMOST_GUN_COOL_4, + SFX_WMOST_GUN_COOL_5, + SFX_WMOST_INNOCENT_1, + SFX_WMOST_INNOCENT_2, + SFX_WMOST_INNOCENT_3, + SFX_WMOST_JACKED_1, + SFX_WMOST_JACKED_2, + SFX_WMOST_JACKED_3, + SFX_WMOST_JACKED_4, + SFX_WMOST_JEER_1, + SFX_WMOST_JEER_2, + SFX_WMOST_JEER_3, + SFX_WMOST_JEER_4, + SFX_WMOST_LOST_1, + SFX_WMOST_LOST_2, + SFX_WMOST_MUGGED_1, + SFX_WMOST_MUGGED_2, + SFX_WMOST_SAVED_1, + SFX_WMOST_TAXI_1, + + SFX_BFOTR_BUMP_1, + SFX_BFOTR_BUMP_2, + SFX_BFOTR_BUMP_3, + SFX_BFOTR_BUMP_4, + SFX_BFOTR_BUMP_5, + SFX_BFOTR_BUMP_6, + SFX_BFOTR_BUMP_7, + SFX_BFOTR_BUMP_8, + SFX_BFOTR_BUMP_9, + SFX_BFOTR_BUMP_10, + SFX_BFOTR_CHAT_1, + SFX_BFOTR_CHAT_2, + SFX_BFOTR_CHAT_3, + SFX_BFOTR_CHAT_4, + SFX_BFOTR_CHAT_5, + SFX_BFOTR_CHAT_6, + SFX_BFOTR_CHAT_7, + SFX_BFOTR_CHAT_8, + SFX_BFOTR_CHAT_9, + SFX_BFOTR_CHAT_10, + SFX_BFOTR_CHAT_11, + SFX_BFOTR_CHAT_12, + SFX_BFOTR_CHAT_13, + SFX_BFOTR_CHAT_14, + SFX_BFOTR_CHAT_15, + SFX_BFOTR_DODGE_1, + SFX_BFOTR_DODGE_2, + SFX_BFOTR_DODGE_3, + SFX_BFOTR_DODGE_4, + SFX_BFOTR_DODGE_5, + SFX_BFOTR_DODGE_6, + SFX_BFOTR_DODGE_7, + SFX_BFOTR_DODGE_8, + SFX_BFOTR_DODGE_9, + SFX_BFOTR_FIGHT_1, + SFX_BFOTR_FIGHT_2, + SFX_BFOTR_FIGHT_3, + SFX_BFOTR_FIGHT_4, + SFX_BFOTR_FIGHT_5, + SFX_BFOTR_FIGHT_6, + SFX_BFOTR_GUN_COOL_1, + SFX_BFOTR_GUN_COOL_2, + SFX_BFOTR_GUN_COOL_3, + SFX_BFOTR_GUN_COOL_4, + SFX_BFOTR_GUN_COOL_5, + SFX_BFOTR_GUN_COOL_6, + SFX_BFOTR_MUGGED_1, + SFX_BFOTR_MUGGED_2, + SFX_BFOTR_MUGGING_1, + SFX_BFOTR_MUGGING_2, + SFX_BFOTR_MUGGING_3, + SFX_BFOTR_SAVED_1, + SFX_BFOTR_SHOCKED_1, + SFX_BFOTR_SHOCKED_2, + SFX_BFOTR_SHOCKED_3, + SFX_BFOTR_SOLICIT_1, + SFX_BFOTR_SOLICIT_2, + SFX_BFOTR_SOLICIT_3, + SFX_BFOTR_SOLICIT_4, + SFX_BFOTR_SOLICIT_5, + SFX_BFOTR_TAXI_1, + + SFX_WFYRI_BLOCKED_1, + SFX_WFYRI_BLOCKED_2, + SFX_WFYRI_BLOCKED_3, + SFX_WFYRI_BLOCKED_4, + SFX_WFYRI_BLOCKED_5, + SFX_WFYRI_BLOCKED_6, + SFX_WFYRI_BLOCKED_7, + SFX_WFYRI_BLOCKED_8, + SFX_WFYRI_BUMP_1, + SFX_WFYRI_BUMP_2, + SFX_WFYRI_BUMP_3, + SFX_WFYRI_BUMP_4, + SFX_WFYRI_BUMP_5, + SFX_WFYRI_BUMP_6, + SFX_WFYRI_BUMP_7, + SFX_WFYRI_BUMP_8, + SFX_WFYRI_BUMP_9, + SFX_WFYRI_BUMP_10, + SFX_WFYRI_CAR_CRASH_1, + SFX_WFYRI_CAR_CRASH_2, + SFX_WFYRI_CAR_CRASH_3, + SFX_WFYRI_CAR_CRASH_4, + SFX_WFYRI_CAR_CRASH_5, + SFX_WFYRI_CAR_CRASH_6, + SFX_WFYRI_CAR_CRASH_7, + SFX_WFYRI_CAR_CRASH_8, + SFX_WFYRI_CAR_CRASH_9, + SFX_WFYRI_DODGE_1, + SFX_WFYRI_DODGE_2, + SFX_WFYRI_DODGE_3, + SFX_WFYRI_DODGE_4, + SFX_WFYRI_DODGE_5, + SFX_WFYRI_DODGE_6, + SFX_WFYRI_DODGE_7, + SFX_WFYRI_DODGE_8, + SFX_WFYRI_DODGE_9, + SFX_WFYRI_EYEING_1, + SFX_WFYRI_EYEING_2, + SFX_WFYRI_GENERIC_CRASH_1, + SFX_WFYRI_GENERIC_CRASH_2, + SFX_WFYRI_GENERIC_CRASH_3, + SFX_WFYRI_GENERIC_CRASH_4, + SFX_WFYRI_GENERIC_CRASH_5, + SFX_WFYRI_GENERIC_CRASH_6, + SFX_WFYRI_GENERIC_CRASH_7, + SFX_WFYRI_GENERIC_CRASH_8, + SFX_WFYRI_GUN_PANIC_1, + SFX_WFYRI_GUN_PANIC_2, + SFX_WFYRI_GUN_PANIC_3, + SFX_WFYRI_GUN_PANIC_4, + SFX_WFYRI_GUN_PANIC_5, + SFX_WFYRI_JACKED_1, + SFX_WFYRI_JACKED_2, + SFX_WFYRI_JACKED_3, + SFX_WFYRI_JACKED_4, + SFX_WFYRI_JACKED_5, + SFX_WFYRI_JACKED_6, + SFX_WFYRI_JACKED_7, + SFX_WFYRI_LOST_1, + SFX_WFYRI_LOST_2, + SFX_WFYRI_MUGGED_1, + SFX_WFYRI_MUGGED_2, + SFX_WFYRI_RUN_1, + SFX_WFYRI_RUN_2, + SFX_WFYRI_RUN_3, + SFX_WFYRI_RUN_4, + SFX_WFYRI_RUN_5, + SFX_WFYRI_SAVED_1, + SFX_WFYRI_SHOCKED_1, + SFX_WFYRI_SHOCKED_2, + SFX_WFYRI_TAXI_1, + SFX_BFYPR_BUMP_1, + SFX_BFYPR_BUMP_2, + SFX_BFYPR_BUMP_3, + SFX_BFYPR_BUMP_4, + SFX_BFYPR_BUMP_5, + SFX_BFYPR_BUMP_6, + SFX_BFYPR_BUMP_7, + SFX_BFYPR_BUMP_8, + SFX_BFYPR_BUMP_9, + SFX_BFYPR_BUMP_10, + SFX_BFYPR_BUMP_11, + SFX_BFYPR_CHAT_1, + SFX_BFYPR_CHAT_2, + SFX_BFYPR_CHAT_3, + SFX_BFYPR_CHAT_4, + SFX_BFYPR_CHAT_5, + SFX_BFYPR_CHAT_6, + SFX_BFYPR_CHAT_7, + SFX_BFYPR_CHAT_8, + SFX_BFYPR_CHAT_9, + SFX_BFYPR_CHAT_10, + SFX_BFYPR_CHAT_11, + SFX_BFYPR_CHAT_12, + SFX_BFYPR_CHAT_13, + SFX_BFYPR_DODGE_1, + SFX_BFYPR_DODGE_2, + SFX_BFYPR_DODGE_3, + SFX_BFYPR_DODGE_4, + SFX_BFYPR_DODGE_5, + SFX_BFYPR_DODGE_6, + SFX_BFYPR_DODGE_7, + SFX_BFYPR_FIGHT_1, + SFX_BFYPR_FIGHT_2, + SFX_BFYPR_FIGHT_3, + SFX_BFYPR_FIGHT_4, + SFX_BFYPR_FIGHT_5, + SFX_BFYPR_FIGHT_6, + SFX_BFYPR_FIGHT_7, + SFX_BFYPR_FUCKING_1, + SFX_BFYPR_FUCKING_2, + SFX_BFYPR_FUCKING_3, + SFX_BFYPR_FUCKING_4, + SFX_BFYPR_FUCKING_5, + SFX_BFYPR_FUCKING_6, + SFX_BFYPR_FUCKING_7, + SFX_BFYPR_GUN_COOL_1, + SFX_BFYPR_GUN_COOL_2, + SFX_BFYPR_GUN_COOL_3, + SFX_BFYPR_GUN_COOL_4, + SFX_BFYPR_GUN_COOL_5, + SFX_BFYPR_MUGGED_1, + SFX_BFYPR_MUGGED_2, + SFX_BFYPR_SAVED_1, + SFX_BFYPR_SHOCKED_1, + SFX_BFYPR_SHOCKED_2, + SFX_BFYPR_SOLICIT_1, + SFX_BFYPR_SOLICIT_2, + SFX_BFYPR_SOLICIT_3, + SFX_BFYPR_SOLICIT_4, + SFX_BFYPR_SOLICIT_5, + SFX_BFYPR_SOLICIT_6, + SFX_BFYPR_SOLICIT_7, + SFX_BFYPR_SOLICIT_8, + SFX_BFYPR_SOLICIT_9, + SFX_BFYPR_SOLICIT_10, + SFX_BFYPR_SOLICIT_11, + SFX_BFYPR_SOLICIT_12, + SFX_BFYPR_SOLICIT_13, + SFX_BFYPR_TAXI_1, + SFX_BFYPR_TAXI_2, + + SFX_BMYRI_BLOCKED_1, + SFX_BMYRI_BLOCKED_2, + SFX_BMYRI_BLOCKED_3, + SFX_BMYRI_BLOCKED_4, + SFX_BMYRI_BLOCKED_5, + SFX_BMYRI_BLOCKED_6, + SFX_BMYRI_BUMP_1, + SFX_BMYRI_BUMP_2, + SFX_BMYRI_BUMP_3, + SFX_BMYRI_BUMP_4, + SFX_BMYRI_BUMP_5, + SFX_BMYRI_BUMP_6, + SFX_BMYRI_BUMP_7, + SFX_BMYRI_CAR_CRASH_1, + SFX_BMYRI_CAR_CRASH_2, + SFX_BMYRI_CAR_CRASH_3, + SFX_BMYRI_CAR_CRASH_4, + SFX_BMYRI_CAR_CRASH_5, + SFX_BMYRI_CAR_CRASH_6, + SFX_BMYRI_CAR_CRASH_7, + SFX_BMYRI_DODGE_1, + SFX_BMYRI_DODGE_2, + SFX_BMYRI_DODGE_3, + SFX_BMYRI_DODGE_4, + SFX_BMYRI_DODGE_5, + SFX_BMYRI_DODGE_6, + SFX_BMYRI_DODGE_7, + SFX_BMYRI_DODGE_8, + SFX_BMYRI_EYEING_1, + SFX_BMYRI_GENERIC_CRASH_1, + SFX_BMYRI_GENERIC_CRASH_2, + SFX_BMYRI_GENERIC_CRASH_3, + SFX_BMYRI_GENERIC_CRASH_4, + SFX_BMYRI_GENERIC_CRASH_5, + SFX_BMYRI_GENERIC_CRASH_6, + SFX_BMYRI_GENERIC_CRASH_7, + SFX_BMYRI_GUN_PANIC_1, + SFX_BMYRI_GUN_PANIC_2, + SFX_BMYRI_GUN_PANIC_3, + SFX_BMYRI_GUN_PANIC_4, + SFX_BMYRI_GUN_PANIC_5, + SFX_BMYRI_GUN_PANIC_6, + SFX_BMYRI_GUN_PANIC_7, + SFX_BMYRI_JACKED_1, + SFX_BMYRI_JACKED_2, + SFX_BMYRI_JACKED_3, + SFX_BMYRI_JACKED_4, + SFX_BMYRI_LOST_1, + SFX_BMYRI_LOST_2, + SFX_BMYRI_MUGGED_1, + SFX_BMYRI_MUGGED_2, + SFX_BMYRI_RUN_1, + SFX_BMYRI_RUN_2, + SFX_BMYRI_RUN_3, + SFX_BMYRI_RUN_4, + SFX_BMYRI_SAVED_1, + SFX_BMYRI_SHOCKED_1, + SFX_BMYRI_SHOCKED_2, + SFX_BMYRI_SHOCKED_3, + SFX_BMYRI_TAXI_1, + SFX_BMYBU_BLOCKED_1, + SFX_BMYBU_BLOCKED_2, + SFX_BMYBU_BLOCKED_3, + SFX_BMYBU_BLOCKED_4, + SFX_BMYBU_BLOCKED_5, + SFX_BMYBU_BLOCKED_6, + SFX_BMYBU_BLOCKED_7, + SFX_BMYBU_BLOCKED_8, + SFX_BMYBU_BUMP_1, + SFX_BMYBU_BUMP_2, + SFX_BMYBU_BUMP_3, + SFX_BMYBU_BUMP_4, + SFX_BMYBU_BUMP_5, + SFX_BMYBU_BUMP_6, + SFX_BMYBU_BUMP_7, + SFX_BMYBU_CAR_CRASH_1, + SFX_BMYBU_CAR_CRASH_2, + SFX_BMYBU_CAR_CRASH_3, + SFX_BMYBU_CAR_CRASH_4, + SFX_BMYBU_CAR_CRASH_5, + SFX_BMYBU_CAR_CRASH_6, + SFX_BMYBU_CAR_CRASH_7, + SFX_BMYBU_DODGE_1, + SFX_BMYBU_DODGE_2, + SFX_BMYBU_DODGE_3, + SFX_BMYBU_DODGE_4, + SFX_BMYBU_DODGE_5, + SFX_BMYBU_DODGE_6, + SFX_BMYBU_DODGE_7, + SFX_BMYBU_DODGE_8, + SFX_BMYBU_DODGE_9, + SFX_BMYBU_DODGE_10, + SFX_BMYBU_EYEING_1, + SFX_BMYBU_EYEING_2, + SFX_BMYBU_FIGHT_1, + SFX_BMYBU_FIGHT_2, + SFX_BMYBU_FIGHT_3, + SFX_BMYBU_FIGHT_4, + SFX_BMYBU_FIGHT_5, + SFX_BMYBU_GENERIC_CRASH_1, + SFX_BMYBU_GENERIC_CRASH_2, + SFX_BMYBU_GENERIC_CRASH_3, + SFX_BMYBU_GENERIC_CRASH_4, + SFX_BMYBU_GENERIC_CRASH_5, + SFX_BMYBU_GENERIC_CRASH_6, + SFX_BMYBU_GENERIC_CRASH_7, + SFX_BMYBU_GUN_PANIC_1, + SFX_BMYBU_GUN_PANIC_2, + SFX_BMYBU_GUN_PANIC_3, + SFX_BMYBU_GUN_PANIC_4, + SFX_BMYBU_GUN_PANIC_5, + SFX_BMYBU_INNOCENT_1, + SFX_BMYBU_INNOCENT_2, + SFX_BMYBU_JACKED_1, + SFX_BMYBU_JACKED_2, + SFX_BMYBU_JACKED_3, + SFX_BMYBU_JACKED_4, + SFX_BMYBU_JACKED_5, + SFX_BMYBU_JACKED_6, + SFX_BMYBU_MUGGED_1, + SFX_BMYBU_MUGGED_2, + SFX_BMYBU_SAVED_1, + SFX_BMYBU_SHOCKED_1, + SFX_BMYBU_SHOCKED_2, + SFX_BMYBU_TAXI_1, + + SFX_WMYSK_BUMP_1, + SFX_WMYSK_BUMP_2, + SFX_WMYSK_BUMP_3, + SFX_WMYSK_BUMP_4, + SFX_WMYSK_BUMP_5, + SFX_WMYSK_BUMP_6, + SFX_WMYSK_BUMP_7, + SFX_WMYSK_BUMP_8, + SFX_WMYSK_BUMP_9, + SFX_WMYSK_BUMP_10, + SFX_WMYSK_BUMP_11, + SFX_WMYSK_BUMP_12, + SFX_WMYSK_BUMP_13, + SFX_WMYSK_BUMP_14, + SFX_WMYSK_CHAT_1, + SFX_WMYSK_CHAT_2, + SFX_WMYSK_CHAT_3, + SFX_WMYSK_CHAT_4, + SFX_WMYSK_CHAT_5, + SFX_WMYSK_CHAT_6, + SFX_WMYSK_CHAT_7, + SFX_WMYSK_CHAT_8, + SFX_WMYSK_CHAT_9, + SFX_WMYSK_CHAT_10, + SFX_WMYSK_CHAT_11, + SFX_WMYSK_CHAT_12, + SFX_WMYSK_CHAT_13, + SFX_WMYSK_DODGE_1, + SFX_WMYSK_DODGE_2, + SFX_WMYSK_DODGE_3, + SFX_WMYSK_DODGE_4, + SFX_WMYSK_DODGE_5, + SFX_WMYSK_DODGE_6, + SFX_WMYSK_DODGE_7, + SFX_WMYSK_DODGE_8, + SFX_WMYSK_DODGE_9, + SFX_WMYSK_DODGE_10, + SFX_WMYSK_EYEING_1, + SFX_WMYSK_EYEING_2, + SFX_WMYSK_FIGHT_1, + SFX_WMYSK_FIGHT_2, + SFX_WMYSK_FIGHT_3, + SFX_WMYSK_FIGHT_4, + SFX_WMYSK_FIGHT_5, + SFX_WMYSK_GUN_PANIC_1, + SFX_WMYSK_GUN_PANIC_2, + SFX_WMYSK_GUN_PANIC_3, + SFX_WMYSK_GUN_PANIC_4, + SFX_WMYSK_GUN_PANIC_5, + SFX_WMYSK_INNOCENT_1, + SFX_WMYSK_INNOCENT_2, + SFX_WMYSK_INNOCENT_3, + SFX_WMYSK_LOST_1, + SFX_WMYSK_LOST_2, + SFX_WMYSK_MUGGED_1, + SFX_WMYSK_MUGGED_2, + SFX_WMYSK_SAVED_1, + SFX_WMYSK_SAVED_2, + SFX_WMYSK_SHOCKED_1, + SFX_WMYSK_SHOCKED_2, + SFX_WMYSK_TAXI_1, + + SFX_WMYCW_BLOCKED_1, + SFX_WMYCW_BLOCKED_2, + SFX_WMYCW_BLOCKED_3, + SFX_WMYCW_BLOCKED_4, + SFX_WMYCW_BLOCKED_5, + SFX_WMYCW_BLOCKED_6, + SFX_WMYCW_BLOCKED_7, + SFX_WMYCW_BLOCKED_8, + SFX_WMYCW_BLOCKED_9, + SFX_WMYCW_BUMP_1, + SFX_WMYCW_BUMP_2, + SFX_WMYCW_BUMP_3, + SFX_WMYCW_BUMP_4, + SFX_WMYCW_BUMP_5, + SFX_WMYCW_BUMP_6, + SFX_WMYCW_BUMP_7, + SFX_WMYCW_BUMP_8, + SFX_WMYCW_BUMP_9, + SFX_WMYCW_CAR_CRASH_1, + SFX_WMYCW_CAR_CRASH_2, + SFX_WMYCW_CAR_CRASH_3, + SFX_WMYCW_CAR_CRASH_4, + SFX_WMYCW_CAR_CRASH_5, + SFX_WMYCW_CAR_CRASH_6, + SFX_WMYCW_CAR_CRASH_7, + SFX_WMYCW_CAR_CRASH_8, + SFX_WMYCW_CAR_CRASH_9, + SFX_WMYCW_CHAT_1, + SFX_WMYCW_CHAT_2, + SFX_WMYCW_CHAT_3, + SFX_WMYCW_CHAT_4, + SFX_WMYCW_CHAT_5, + SFX_WMYCW_CHAT_6, + SFX_WMYCW_CHAT_7, + SFX_WMYCW_CHAT_8, + SFX_WMYCW_CHAT_9, + SFX_WMYCW_CHAT_10, + SFX_WMYCW_CHAT_11, + SFX_WMYCW_CHAT_12, + SFX_WMYCW_CHAT_13, + SFX_WMYCW_CHAT_14, + SFX_WMYCW_CHAT_15, + SFX_WMYCW_DODGE_1, + SFX_WMYCW_DODGE_2, + SFX_WMYCW_DODGE_3, + SFX_WMYCW_DODGE_4, + SFX_WMYCW_DODGE_5, + SFX_WMYCW_DODGE_6, + SFX_WMYCW_DODGE_7, + SFX_WMYCW_DODGE_8, + SFX_WMYCW_DODGE_9, + SFX_WMYCW_DODGE_10, + SFX_WMYCW_EYEING_1, + SFX_WMYCW_EYEING_2, + SFX_WMYCW_EYEING_3, + SFX_WMYCW_FIGHT_1, + SFX_WMYCW_FIGHT_2, + SFX_WMYCW_FIGHT_3, + SFX_WMYCW_FIGHT_4, + SFX_WMYCW_FIGHT_5, + SFX_WMYCW_FIGHT_6, + SFX_WMYCW_FIGHT_7, + SFX_WMYCW_FIGHT_8, + SFX_WMYCW_GENERIC_CRASH_1, + SFX_WMYCW_GENERIC_CRASH_2, + SFX_WMYCW_GENERIC_CRASH_3, + SFX_WMYCW_GENERIC_CRASH_4, + SFX_WMYCW_GENERIC_CRASH_5, + SFX_WMYCW_GENERIC_CRASH_6, + SFX_WMYCW_GENERIC_CRASH_7, + SFX_WMYCW_GUN_PANIC_1, + SFX_WMYCW_GUN_PANIC_2, + SFX_WMYCW_GUN_PANIC_3, + SFX_WMYCW_GUN_PANIC_4, + SFX_WMYCW_GUN_PANIC_5, + SFX_WMYCW_GUN_PANIC_6, + SFX_WMYCW_INNOCENT_1, + SFX_WMYCW_INNOCENT_2, + SFX_WMYCW_INNOCENT_3, + SFX_WMYCW_JACKED_1, + SFX_WMYCW_JACKED_2, + SFX_WMYCW_JACKED_3, + SFX_WMYCW_JACKED_4, + SFX_WMYCW_JACKED_5, + SFX_WMYCW_JACKED_6, + SFX_WMYCW_JEER_1, + SFX_WMYCW_JEER_2, + SFX_WMYCW_JEER_3, + SFX_WMYCW_JEER_4, + SFX_WMYCW_JEER_5, + SFX_WMYCW_JACKING_1, + SFX_WMYCW_JACKING_2, + SFX_WMYCW_JACKING_3, + SFX_WMYCW_JACKING_4, + SFX_WMYCW_LOST_1, + SFX_WMYCW_LOST_2, + SFX_WMYCW_MUGGED_1, + SFX_WMYCW_TAXI_1, + + SFX_HFYST_BLOCKED_1, + SFX_HFYST_BLOCKED_2, + SFX_HFYST_BLOCKED_3, + SFX_HFYST_BLOCKED_4, + SFX_HFYST_BLOCKED_5, + SFX_HFYST_BLOCKED_6, + SFX_HFYST_BLOCKED_7, + SFX_HFYST_BUMP_1, + SFX_HFYST_BUMP_2, + SFX_HFYST_BUMP_3, + SFX_HFYST_BUMP_4, + SFX_HFYST_BUMP_5, + SFX_HFYST_BUMP_6, + SFX_HFYST_BUMP_7, + SFX_HFYST_BUMP_8, + SFX_HFYST_BUMP_9, + SFX_HFYST_BUMP_10, + SFX_HFYST_CAR_CRASH_1, + SFX_HFYST_CAR_CRASH_2, + SFX_HFYST_CAR_CRASH_3, + SFX_HFYST_CAR_CRASH_4, + SFX_HFYST_CAR_CRASH_5, + SFX_HFYST_CAR_CRASH_6, + SFX_HFYST_CAR_CRASH_7, + SFX_HFYST_CAR_CRASH_8, + SFX_HFYST_CHAT_1, + SFX_HFYST_CHAT_2, + SFX_HFYST_CHAT_3, + SFX_HFYST_CHAT_4, + SFX_HFYST_CHAT_5, + SFX_HFYST_CHAT_6, + SFX_HFYST_CHAT_7, + SFX_HFYST_CHAT_8, + SFX_HFYST_CHAT_9, + SFX_HFYST_DODGE_1, + SFX_HFYST_DODGE_2, + SFX_HFYST_DODGE_3, + SFX_HFYST_DODGE_4, + SFX_HFYST_DODGE_5, + SFX_HFYST_DODGE_6, + SFX_HFYST_DODGE_7, + SFX_HFYST_DODGE_8, + SFX_HFYST_DODGE_9, + SFX_HFYST_DODGE_10, + SFX_HFYST_FIGHT_1, + SFX_HFYST_FIGHT_2, + SFX_HFYST_FIGHT_3, + SFX_HFYST_FIGHT_4, + SFX_HFYST_FIGHT_5, + SFX_HFYST_FIGHT_6, + SFX_HFYST_FIGHT_7, + SFX_HFYST_GENERIC_CRASH_1, + SFX_HFYST_GENERIC_CRASH_2, + SFX_HFYST_GENERIC_CRASH_3, + SFX_HFYST_GENERIC_CRASH_4, + SFX_HFYST_GENERIC_CRASH_5, + SFX_HFYST_GENERIC_CRASH_6, + SFX_HFYST_GENERIC_CRASH_7, + SFX_HFYST_GUN_COOL_1, + SFX_HFYST_GUN_COOL_2, + SFX_HFYST_GUN_COOL_3, + SFX_HFYST_GUN_COOL_4, + SFX_HFYST_GUN_COOL_5, + SFX_HFYST_JACKED_1, + SFX_HFYST_JACKED_2, + SFX_HFYST_JACKED_3, + SFX_HFYST_JACKED_4, + SFX_HFYST_JACKED_5, + SFX_HFYST_JACKED_6, + SFX_HFYST_JACKING_1, + SFX_HFYST_JACKING_2, + SFX_HFYST_JACKING_3, + SFX_HFYST_JACKING_4, + SFX_HFYST_LOST_1, + SFX_HFYST_LOST_2, + SFX_HFYST_MUGGED_1, + SFX_HFYST_MUGGED_2, + SFX_HFYST_MUGGING_1, + SFX_HFYST_MUGGING_2, + SFX_HFYST_MUGGING_3, + SFX_HFYST_MUGGING_4, + SFX_HFYST_TAXI_1, + + SFX_HMOST_BLOCKED_1, + SFX_HMOST_BLOCKED_2, + SFX_HMOST_BLOCKED_3, + SFX_HMOST_BLOCKED_4, + SFX_HMOST_BLOCKED_5, + SFX_HMOST_BLOCKED_6, + SFX_HMOST_BLOCKED_7, + SFX_HMOST_BUMP_1, + SFX_HMOST_BUMP_2, + SFX_HMOST_BUMP_3, + SFX_HMOST_BUMP_4, + SFX_HMOST_BUMP_5, + SFX_HMOST_BUMP_6, + SFX_HMOST_BUMP_7, + SFX_HMOST_BUMP_8, + SFX_HMOST_BUMP_9, + SFX_HMOST_BUMP_10, + SFX_HMOST_CAR_CRASH_1, + SFX_HMOST_CAR_CRASH_2, + SFX_HMOST_CAR_CRASH_3, + SFX_HMOST_CAR_CRASH_4, + SFX_HMOST_CAR_CRASH_5, + SFX_HMOST_CAR_CRASH_6, + SFX_HMOST_CAR_CRASH_7, + SFX_HMOST_CHAT_1, + SFX_HMOST_CHAT_2, + SFX_HMOST_CHAT_3, + SFX_HMOST_CHAT_4, + SFX_HMOST_CHAT_5, + SFX_HMOST_CHAT_6, + SFX_HMOST_CHAT_7, + SFX_HMOST_CHAT_8, + SFX_HMOST_CHAT_9, + SFX_HMOST_CHAT_10, + SFX_HMOST_CHAT_11, + SFX_HMOST_DODGE_1, + SFX_HMOST_DODGE_2, + SFX_HMOST_DODGE_3, + SFX_HMOST_DODGE_4, + SFX_HMOST_DODGE_5, + SFX_HMOST_DODGE_6, + SFX_HMOST_DODGE_7, + SFX_HMOST_DODGE_8, + SFX_HMOST_DODGE_9, + SFX_HMOST_EYEING_1, + SFX_HMOST_FIGHT_1, + SFX_HMOST_FIGHT_2, + SFX_HMOST_FIGHT_3, + SFX_HMOST_FIGHT_4, + SFX_HMOST_FIGHT_5, + SFX_HMOST_FIGHT_6, + SFX_HMOST_FIGHT_7, + SFX_HMOST_FIGHT_8, + SFX_HMOST_GENERIC_CRASH_1, + SFX_HMOST_GENERIC_CRASH_2, + SFX_HMOST_GENERIC_CRASH_3, + SFX_HMOST_GENERIC_CRASH_4, + SFX_HMOST_GENERIC_CRASH_5, + SFX_HMOST_GENERIC_CRASH_6, + SFX_HMOST_GENERIC_CRASH_7, + SFX_HMOST_GUN_COOL_1, + SFX_HMOST_GUN_COOL_2, + SFX_HMOST_GUN_COOL_3, + SFX_HMOST_GUN_COOL_4, + SFX_HMOST_GUN_COOL_5, + SFX_HMOST_JACKED_1, + SFX_HMOST_JACKED_2, + SFX_HMOST_JACKED_3, + SFX_HMOST_JACKED_4, + SFX_HMOST_JACKED_5, + SFX_HMOST_JACKED_6, + SFX_HMOST_JACKING_1, + SFX_HMOST_JACKING_2, + SFX_HMOST_JACKING_3, + SFX_HMOST_LOST_1, + SFX_HMOST_LOST_2, + SFX_HMOST_MUGGED_1, + SFX_HMOST_MUGGED_2, + SFX_HMOST_TAXI_1, + + SFX_HMYRI_BLOCKED_1, + SFX_HMYRI_BLOCKED_2, + SFX_HMYRI_BLOCKED_3, + SFX_HMYRI_BLOCKED_4, + SFX_HMYRI_BLOCKED_5, + SFX_HMYRI_BLOCKED_6, + SFX_HMYRI_BLOCKED_7, + SFX_HMYRI_BUMP_1, + SFX_HMYRI_BUMP_2, + SFX_HMYRI_BUMP_3, + SFX_HMYRI_BUMP_4, + SFX_HMYRI_BUMP_5, + SFX_HMYRI_BUMP_6, + SFX_HMYRI_BUMP_7, + SFX_HMYRI_BUMP_8, + SFX_HMYRI_BUMP_9, + SFX_HMYRI_BUMP_10, + SFX_HMYRI_CAR_CRASH_1, + SFX_HMYRI_CAR_CRASH_2, + SFX_HMYRI_CAR_CRASH_3, + SFX_HMYRI_CAR_CRASH_4, + SFX_HMYRI_CAR_CRASH_5, + SFX_HMYRI_CAR_CRASH_6, + SFX_HMYRI_CAR_CRASH_7, + SFX_HMYRI_CAR_CRASH_8, + SFX_HMYRI_DODGE_1, + SFX_HMYRI_DODGE_2, + SFX_HMYRI_DODGE_3, + SFX_HMYRI_DODGE_4, + SFX_HMYRI_DODGE_5, + SFX_HMYRI_DODGE_6, + SFX_HMYRI_DODGE_7, + SFX_HMYRI_DODGE_8, + SFX_HMYRI_DODGE_9, + SFX_HMYRI_FIGHT_1, + SFX_HMYRI_FIGHT_2, + SFX_HMYRI_FIGHT_3, + SFX_HMYRI_FIGHT_4, + SFX_HMYRI_FIGHT_5, + SFX_HMYRI_GENERIC_CRASH_1, + SFX_HMYRI_GENERIC_CRASH_2, + SFX_HMYRI_GENERIC_CRASH_3, + SFX_HMYRI_GENERIC_CRASH_4, + SFX_HMYRI_GENERIC_CRASH_5, + SFX_HMYRI_GENERIC_CRASH_6, + SFX_HMYRI_GENERIC_CRASH_7, + SFX_HMYRI_GENERIC_CRASH_8, + SFX_HMYRI_GENERIC_CRASH_9, + SFX_HMYRI_GENERIC_CRASH_10, + SFX_HMYRI_GENERIC_CRASH_11, + SFX_HMYRI_GENERIC_CRASH_12, + SFX_HMYRI_GUN_PANIC_1, + SFX_HMYRI_GUN_PANIC_2, + SFX_HMYRI_GUN_PANIC_3, + SFX_HMYRI_GUN_PANIC_4, + SFX_HMYRI_GUN_PANIC_5, + SFX_HMYRI_GUN_PANIC_6, + SFX_HMYRI_GUN_PANIC_7, + SFX_HMYRI_JACKED_1, + SFX_HMYRI_JACKED_2, + SFX_HMYRI_JACKED_3, + SFX_HMYRI_JACKED_4, + SFX_HMYRI_JACKED_5, + SFX_HMYRI_JACKED_6, + SFX_HMYRI_JACKED_7, + SFX_HMYRI_JACKED_8, + SFX_HMYRI_JACKING_1, + SFX_HMYRI_JACKING_2, + SFX_HMYRI_JACKING_3, + SFX_HMYRI_MUGGED_1, + SFX_HMYRI_SHOCKED_1, + SFX_HMYRI_SHOCKED_2, + SFX_HMYRI_SHOCKED_3, + + SFX_HFYPR_BUMP_1, + SFX_HFYPR_BUMP_2, + SFX_HFYPR_BUMP_3, + SFX_HFYPR_BUMP_4, + SFX_HFYPR_BUMP_5, + SFX_HFYPR_BUMP_6, + SFX_HFYPR_BUMP_7, + SFX_HFYPR_BUMP_8, + SFX_HFYPR_BUMP_9, + SFX_HFYPR_BUMP_10, + SFX_HFYPR_CHAT_1, + SFX_HFYPR_CHAT_2, + SFX_HFYPR_CHAT_3, + SFX_HFYPR_CHAT_4, + SFX_HFYPR_CHAT_5, + SFX_HFYPR_CHAT_6, + SFX_HFYPR_CHAT_7, + SFX_HFYPR_CHAT_8, + SFX_HFYPR_CHAT_9, + SFX_HFYPR_CHAT_10, + SFX_HFYPR_CHAT_11, + SFX_HFYPR_CHAT_12, + SFX_HFYPR_DODGE_1, + SFX_HFYPR_DODGE_2, + SFX_HFYPR_DODGE_3, + SFX_HFYPR_DODGE_4, + SFX_HFYPR_DODGE_5, + SFX_HFYPR_DODGE_6, + SFX_HFYPR_DODGE_7, + SFX_HFYPR_DODGE_8, + SFX_HFYPR_DODGE_9, + SFX_HFYPR_EYEING_1, + SFX_HFYPR_EYEING_2, + SFX_HFYPR_EYEING_3, + SFX_HFYPR_FIGHT_1, + SFX_HFYPR_FIGHT_2, + SFX_HFYPR_FIGHT_3, + SFX_HFYPR_FIGHT_4, + SFX_HFYPR_FIGHT_5, + SFX_HFYPR_FIGHT_6, + SFX_HFYPR_FIGHT_7, + SFX_HFYPR_FIGHT_8, + SFX_HFYPR_FIGHT_9, + SFX_HFYPR_FIGHT_10, + SFX_HFYPR_FUCKING_1, + SFX_HFYPR_FUCKING_2, + SFX_HFYPR_FUCKING_3, + SFX_HFYPR_FUCKING_4, + SFX_HFYPR_FUCKING_5, + SFX_HFYPR_FUCKING_6, + SFX_HFYPR_FUCKING_7, + SFX_HFYPR_FUCKING_8, + SFX_HFYPR_GUN_COOL_1, + SFX_HFYPR_GUN_COOL_2, + SFX_HFYPR_GUN_COOL_3, + SFX_HFYPR_GUN_COOL_4, + SFX_HFYPR_GUN_COOL_5, + SFX_HFYPR_GUN_COOL_6, + SFX_HFYPR_MUGGED_1, + SFX_HFYPR_MUGGED_2, + SFX_HFYPR_SAVED_1, + SFX_HFYPR_SOLICIT_1, + SFX_HFYPR_SOLICIT_2, + SFX_HFYPR_SOLICIT_3, + SFX_HFYPR_SOLICIT_4, + SFX_HFYPR_SOLICIT_5, + SFX_HFYPR_SOLICIT_6, + SFX_HFYPR_SOLICIT_7, + SFX_HFYPR_SOLICIT_8, + SFX_HFYPR_SOLICIT_9, + SFX_HFYPR_SOLICIT_10, + SFX_HFYPR_SOLICIT_11, + SFX_HFYPR_SOLICIT_12, + SFX_HFYPR_SOLICIT_13, + SFX_HFYPR_SOLICIT_14, + SFX_HFYPR_TAXI_1, + + SFX_HFYMD_BUMP_1, + SFX_HFYMD_BUMP_2, + SFX_HFYMD_BUMP_3, + SFX_HFYMD_BUMP_4, + SFX_HFYMD_BUMP_5, + SFX_HFYMD_BUMP_6, + SFX_HFYMD_BUMP_7, + SFX_HFYMD_BUMP_8, + SFX_HFYMD_BUMP_9, + SFX_HFYMD_DODGE_1, + SFX_HFYMD_DODGE_2, + SFX_HFYMD_DODGE_3, + SFX_HFYMD_DODGE_4, + SFX_HFYMD_DODGE_5, + SFX_HFYMD_DODGE_6, + SFX_HFYMD_DODGE_7, + SFX_HFYMD_DODGE_8, + SFX_HFYMD_FIGHT_1, + SFX_HFYMD_FIGHT_2, + SFX_HFYMD_FIGHT_3, + SFX_HFYMD_FIGHT_4, + SFX_HFYMD_FIGHT_5, + SFX_HFYMD_FIGHT_6, + SFX_HFYMD_FIGHT_7, + SFX_HFYMD_FIGHT_8, + SFX_HFYMD_FIGHT_9, + SFX_HFYMD_GUN_PANIC_1, + SFX_HFYMD_GUN_PANIC_2, + SFX_HFYMD_GUN_PANIC_3, + SFX_HFYMD_GUN_PANIC_4, + SFX_HFYMD_GUN_PANIC_5, + SFX_HFYMD_MUGGED_1, + SFX_HFYMD_MUGGED_2, + SFX_HFYMD_SAVED_1, + SFX_HFYMD_SAVED_2, + SFX_HFYMD_SAVED_3, + SFX_HFYMD_SOLICIT_1, + SFX_HFYMD_SOLICIT_2, + SFX_HFYMD_SOLICIT_3, + SFX_HFYMD_SOLICIT_4, + SFX_HFYMD_SOLICIT_5, + SFX_HFYMD_SOLICIT_6, + SFX_HFYMD_SOLICIT_7, + SFX_HFYMD_SOLICIT_8, + SFX_HFYMD_SOLICIT_9, + SFX_HFYMD_SOLICIT_10, + SFX_HFYMD_SOLICIT_11, + SFX_HFYMD_SOLICIT_12, + SFX_HFYMD_SOLICIT_13, + SFX_HFYMD_SOLICIT_14, + SFX_HFYMD_SOLICIT_15, + SFX_HFYMD_TAXI_1, + + SFX_WFOBE_BLOCKED_1, + SFX_WFOBE_BLOCKED_2, + SFX_WFOBE_BLOCKED_3, + SFX_WFOBE_BLOCKED_4, + SFX_WFOBE_BLOCKED_5, + SFX_WFOBE_BLOCKED_6, + SFX_WFOBE_BLOCKED_7, + SFX_WFOBE_BLOCKED_8, + SFX_WFOBE_BUMP_1, + SFX_WFOBE_BUMP_2, + SFX_WFOBE_BUMP_3, + SFX_WFOBE_BUMP_4, + SFX_WFOBE_BUMP_5, + SFX_WFOBE_BUMP_6, + SFX_WFOBE_BUMP_7, + SFX_WFOBE_BUMP_8, + SFX_WFOBE_BUMP_9, + SFX_WFOBE_BUMP_10, + SFX_WFOBE_CAR_CRASH_1, + SFX_WFOBE_CAR_CRASH_2, + SFX_WFOBE_CAR_CRASH_3, + SFX_WFOBE_CAR_CRASH_4, + SFX_WFOBE_CAR_CRASH_5, + SFX_WFOBE_CAR_CRASH_6, + SFX_WFOBE_CAR_CRASH_7, + SFX_WFOBE_CHAT_1, + SFX_WFOBE_CHAT_2, + SFX_WFOBE_CHAT_3, + SFX_WFOBE_CHAT_4, + SFX_WFOBE_CHAT_5, + SFX_WFOBE_CHAT_6, + SFX_WFOBE_CHAT_7, + SFX_WFOBE_CHAT_8, + SFX_WFOBE_CHAT_9, + SFX_WFOBE_CHAT_10, + SFX_WFOBE_DODGE_1, + SFX_WFOBE_DODGE_2, + SFX_WFOBE_DODGE_3, + SFX_WFOBE_DODGE_4, + SFX_WFOBE_DODGE_5, + SFX_WFOBE_DODGE_6, + SFX_WFOBE_DODGE_7, + SFX_WFOBE_DODGE_8, + SFX_WFOBE_GENERIC_CRASH_1, + SFX_WFOBE_GENERIC_CRASH_2, + SFX_WFOBE_GENERIC_CRASH_3, + SFX_WFOBE_GENERIC_CRASH_4, + SFX_WFOBE_GENERIC_CRASH_5, + SFX_WFOBE_GENERIC_CRASH_6, + SFX_WFOBE_GENERIC_CRASH_7, + SFX_WFOBE_GENERIC_CRASH_8, + SFX_WFOBE_GENERIC_CRASH_9, + SFX_WFOBE_GENERIC_CRASH_10, + SFX_WFOBE_GUN_PANIC_1, + SFX_WFOBE_GUN_PANIC_2, + SFX_WFOBE_GUN_PANIC_3, + SFX_WFOBE_GUN_PANIC_4, + SFX_WFOBE_GUN_PANIC_5, + SFX_WFOBE_JACKED_1, + SFX_WFOBE_JACKED_2, + SFX_WFOBE_JACKED_3, + SFX_WFOBE_JACKED_4, + SFX_WFOBE_RUN_1, + SFX_WFOBE_RUN_2, + SFX_WFOBE_RUN_3, + SFX_WFOBE_RUN_4, + SFX_WFOBE_RUN_5, + SFX_WFOBE_RUN_6, + SFX_WFOBE_RUN_7, + SFX_WFOBE_SAVED_1, + SFX_WFOBE_SAVED_2, + SFX_WFOBE_SAVED_3, + SFX_WFOBE_SHOCKED_1, + SFX_WFOBE_SHOCKED_2, + SFX_WFOBE_SHOCKED_3, + SFX_WFOBE_TAXI_1, + SFX_WFOBE_TAXI_2, + + SFX_BFYRI_BLOCKED_1, + SFX_BFYRI_BLOCKED_2, + SFX_BFYRI_BLOCKED_3, + SFX_BFYRI_BLOCKED_4, + SFX_BFYRI_BLOCKED_5, + SFX_BFYRI_BLOCKED_6, + SFX_BFYRI_BLOCKED_7, + SFX_BFYRI_BLOCKED_8, + SFX_BFYRI_BLOCKED_9, + SFX_BFYRI_BUMP_1, + SFX_BFYRI_BUMP_2, + SFX_BFYRI_BUMP_3, + SFX_BFYRI_BUMP_4, + SFX_BFYRI_BUMP_5, + SFX_BFYRI_BUMP_6, + SFX_BFYRI_BUMP_7, + SFX_BFYRI_BUMP_8, + SFX_BFYRI_BUMP_9, + SFX_BFYRI_CAR_CRASH_1, + SFX_BFYRI_CAR_CRASH_2, + SFX_BFYRI_CAR_CRASH_3, + SFX_BFYRI_CAR_CRASH_4, + SFX_BFYRI_CAR_CRASH_5, + SFX_BFYRI_CAR_CRASH_6, + SFX_BFYRI_CAR_CRASH_7, + SFX_BFYRI_CAR_CRASH_8, + SFX_BFYRI_DODGE_1, + SFX_BFYRI_DODGE_2, + SFX_BFYRI_DODGE_3, + SFX_BFYRI_DODGE_4, + SFX_BFYRI_DODGE_5, + SFX_BFYRI_DODGE_6, + SFX_BFYRI_DODGE_7, + SFX_BFYRI_DODGE_8, + SFX_BFYRI_EYEING_1, + SFX_BFYRI_EYEING_2, + SFX_BFYRI_EYEING_3, + SFX_BFYRI_GENERIC_CRASH_1, + SFX_BFYRI_GENERIC_CRASH_2, + SFX_BFYRI_GENERIC_CRASH_3, + SFX_BFYRI_GENERIC_CRASH_4, + SFX_BFYRI_GENERIC_CRASH_5, + SFX_BFYRI_GENERIC_CRASH_6, + SFX_BFYRI_GENERIC_CRASH_7, + SFX_BFYRI_GUN_PANIC_1, + SFX_BFYRI_GUN_PANIC_2, + SFX_BFYRI_GUN_PANIC_3, + SFX_BFYRI_GUN_PANIC_4, + SFX_BFYRI_JACKED_1, + SFX_BFYRI_JACKED_2, + SFX_BFYRI_JACKED_3, + SFX_BFYRI_JACKED_4, + SFX_BFYRI_JACKED_5, + SFX_BFYRI_JACKED_6, + SFX_BFYRI_JACKED_7, + SFX_BFYRI_JACKED_8, + SFX_BFYRI_JACKING_1, + SFX_BFYRI_JACKING_2, + SFX_BFYRI_JACKING_3, + SFX_BFYRI_JACKING_4, + SFX_BFYRI_LOST_1, + SFX_BFYRI_LOST_2, + SFX_BFYRI_MUGGED_1, + SFX_BFYRI_MUGGED_2, + SFX_BFYRI_MUGGED_3, + SFX_BFYRI_RUN_1, + SFX_BFYRI_RUN_2, + SFX_BFYRI_RUN_3, + SFX_BFYRI_RUN_4, + SFX_BFYRI_RUN_5, + SFX_BFYRI_RUN_6, + SFX_BFYRI_SAVED_1, + SFX_BFYRI_SAVED_2, + SFX_BFYRI_SHOCKED_1, + SFX_BFYRI_SHOCKED_2, + SFX_BFYRI_SHOCKED_3, + SFX_BFYRI_SHOCKED_4, + SFX_BFYRI_TAXI_1, + + SFX_BFYBE_BLOCKED_1, + SFX_BFYBE_BLOCKED_2, + SFX_BFYBE_BLOCKED_3, + SFX_BFYBE_BLOCKED_4, + SFX_BFYBE_BLOCKED_5, + SFX_BFYBE_BLOCKED_6, + SFX_BFYBE_BLOCKED_7, + SFX_BFYBE_BLOCKED_8, + SFX_BFYBE_BLOCKED_9, + SFX_BFYBE_BLOCKED_10, + SFX_BFYBE_BLOCKED_11, + SFX_BFYBE_BLOCKED_12, + SFX_BFYBE_CAR_CRASH_1, + SFX_BFYBE_CAR_CRASH_2, + SFX_BFYBE_CAR_CRASH_3, + SFX_BFYBE_CAR_CRASH_4, + SFX_BFYBE_CAR_CRASH_5, + SFX_BFYBE_CAR_CRASH_6, + SFX_BFYBE_CAR_CRASH_7, + SFX_BFYBE_CAR_CRASH_8, + SFX_BFYBE_CAR_CRASH_9, + SFX_BFYBE_CAR_CRASH_10, + SFX_BFYBE_CHAT_1, + SFX_BFYBE_CHAT_2, + SFX_BFYBE_CHAT_3, + SFX_BFYBE_CHAT_4, + SFX_BFYBE_CHAT_5, + SFX_BFYBE_CHAT_6, + SFX_BFYBE_CHAT_7, + SFX_BFYBE_CHAT_8, + SFX_BFYBE_CHAT_9, + SFX_BFYBE_CHAT_10, + SFX_BFYBE_CHAT_11, + SFX_BFYBE_CHAT_12, + SFX_BFYBE_CHAT_13, + SFX_BFYBE_CHAT_14, + SFX_BFYBE_CHAT_15, + SFX_BFYBE_CHAT_16, + SFX_BFYBE_DODGE_1, + SFX_BFYBE_DODGE_2, + SFX_BFYBE_DODGE_3, + SFX_BFYBE_DODGE_4, + SFX_BFYBE_DODGE_5, + SFX_BFYBE_DODGE_6, + SFX_BFYBE_DODGE_7, + SFX_BFYBE_DODGE_8, + SFX_BFYBE_DODGE_9, + SFX_BFYBE_DODGE_10, + SFX_BFYBE_EYEING_1, + SFX_BFYBE_EYEING_2, + SFX_BFYBE_EYEING_3, + SFX_BFYBE_EYEING_4, + SFX_BFYBE_GENERIC_CRASH_1, + SFX_BFYBE_GENERIC_CRASH_2, + SFX_BFYBE_GENERIC_CRASH_3, + SFX_BFYBE_GENERIC_CRASH_4, + SFX_BFYBE_GENERIC_CRASH_5, + SFX_BFYBE_GENERIC_CRASH_6, + SFX_BFYBE_GENERIC_CRASH_7, + SFX_BFYBE_GENERIC_CRASH_8, + SFX_BFYBE_GUN_COOL_1, + SFX_BFYBE_GUN_COOL_2, + SFX_BFYBE_GUN_COOL_3, + SFX_BFYBE_GUN_COOL_4, + SFX_BFYBE_GUN_COOL_5, + SFX_BFYBE_GUN_COOL_6, + SFX_BFYBE_JACKED_1, + SFX_BFYBE_JACKED_2, + SFX_BFYBE_JACKED_3, + SFX_BFYBE_JACKED_4, + SFX_BFYBE_JACKED_5, + SFX_BFYBE_JACKED_6, + SFX_BFYBE_JACKED_7, + SFX_BFYBE_JACKED_8, + SFX_BFYBE_LOST_1, + SFX_BFYBE_LOST_2, + SFX_BFYBE_LOST_3, + SFX_BFYBE_LOST_4, + SFX_BFYBE_MUGGED_1, + SFX_BFYBE_MUGGED_2, + SFX_BFYBE_MUGGED_3, + SFX_BFYBE_MUGGED_4, + SFX_BFYBE_MUGGED_5, + SFX_BFYBE_RUN_1, + SFX_BFYBE_RUN_2, + SFX_BFYBE_RUN_3, + SFX_BFYBE_RUN_4, + SFX_BFYBE_RUN_5, + SFX_BFYBE_RUN_6, + SFX_BFYBE_SAVED_1, + SFX_BFYBE_SAVED_2, + SFX_BFYBE_SHOCKED_1, + SFX_BFYBE_SHOCKED_2, + SFX_BFYBE_SHOCKED_3, + SFX_BFYBE_SHOCKED_4, + SFX_BFYBE_TAXI_1, + SFX_BFYBE_TAXI_2, + SFX_BFYBE_TAXI_3, + + SFX_BMOTR_BUMP_1, + SFX_BMOTR_BUMP_2, + SFX_BMOTR_BUMP_3, + SFX_BMOTR_BUMP_4, + SFX_BMOTR_BUMP_5, + SFX_BMOTR_BUMP_6, + SFX_BMOTR_BUMP_7, + SFX_BMOTR_BUMP_8, + SFX_BMOTR_BUMP_9, + SFX_BMOTR_BUMP_10, + SFX_BMOTR_CHAT_1, + SFX_BMOTR_CHAT_2, + SFX_BMOTR_CHAT_3, + SFX_BMOTR_CHAT_4, + SFX_BMOTR_CHAT_5, + SFX_BMOTR_CHAT_6, + SFX_BMOTR_CHAT_7, + SFX_BMOTR_CHAT_8, + SFX_BMOTR_CHAT_9, + SFX_BMOTR_CHAT_10, + SFX_BMOTR_DODGE_1, + SFX_BMOTR_DODGE_2, + SFX_BMOTR_DODGE_3, + SFX_BMOTR_DODGE_4, + SFX_BMOTR_DODGE_5, + SFX_BMOTR_DODGE_6, + SFX_BMOTR_DODGE_7, + SFX_BMOTR_DODGE_8, + SFX_BMOTR_DODGE_9, + SFX_BMOTR_DODGE_10, + SFX_BMOTR_DODGE_11, + SFX_BMOTR_EYEING_1, + SFX_BMOTR_EYEING_2, + SFX_BMOTR_EYEING_3, + SFX_BMOTR_GUN_COOL_1, + SFX_BMOTR_GUN_COOL_2, + SFX_BMOTR_GUN_COOL_3, + SFX_BMOTR_GUN_COOL_4, + SFX_BMOTR_GUN_COOL_5, + SFX_BMOTR_INNOCENT_1, + SFX_BMOTR_INNOCENT_2, + SFX_BMOTR_INNOCENT_3, + SFX_BMOTR_INNOCENT_4, + SFX_BMOTR_RUN_1, + SFX_BMOTR_RUN_2, + SFX_BMOTR_RUN_3, + SFX_BMOTR_RUN_4, + SFX_BMOTR_RUN_5, + SFX_BMOTR_RUN_6, + SFX_BMOTR_RUN_7, + SFX_BMOTR_SAVED_1, + SFX_BMOTR_SOLICIT_1, + SFX_BMOTR_SOLICIT_2, + SFX_BMOTR_SOLICIT_3, + SFX_BMOTR_SOLICIT_4, + SFX_BMOTR_SOLICIT_5, + SFX_BMOTR_SOLICIT_6, + SFX_BMOTR_SOLICIT_7, + SFX_BMOTR_TAXI_1, + + SFX_BMYST_BLOCKED_1, + SFX_BMYST_BLOCKED_2, + SFX_BMYST_BLOCKED_3, + SFX_BMYST_BLOCKED_4, + SFX_BMYST_BLOCKED_5, + SFX_BMYST_BLOCKED_6, + SFX_BMYST_BLOCKED_7, + SFX_BMYST_BLOCKED_8, + SFX_BMYST_BUMP_1, + SFX_BMYST_BUMP_2, + SFX_BMYST_BUMP_3, + SFX_BMYST_BUMP_4, + SFX_BMYST_BUMP_5, + SFX_BMYST_BUMP_6, + SFX_BMYST_BUMP_7, + SFX_BMYST_BUMP_8, + SFX_BMYST_BUMP_9, + SFX_BMYST_BUMP_10, + SFX_BMYST_BUMP_11, + SFX_BMYST_CAR_CRASH_1, + SFX_BMYST_CAR_CRASH_2, + SFX_BMYST_CAR_CRASH_3, + SFX_BMYST_CAR_CRASH_4, + SFX_BMYST_CAR_CRASH_5, + SFX_BMYST_CAR_CRASH_6, + SFX_BMYST_CAR_CRASH_7, + SFX_BMYST_CAR_CRASH_8, + SFX_BMYST_CAR_CRASH_9, + SFX_BMYST_CHAT_1, + SFX_BMYST_CHAT_2, + SFX_BMYST_CHAT_3, + SFX_BMYST_CHAT_4, + SFX_BMYST_CHAT_5, + SFX_BMYST_CHAT_6, + SFX_BMYST_CHAT_7, + SFX_BMYST_CHAT_8, + SFX_BMYST_CHAT_9, + SFX_BMYST_CHAT_10, + SFX_BMYST_CHAT_11, + SFX_BMYST_CHAT_12, + SFX_BMYST_DODGE_1, + SFX_BMYST_DODGE_2, + SFX_BMYST_DODGE_3, + SFX_BMYST_DODGE_4, + SFX_BMYST_DODGE_5, + SFX_BMYST_DODGE_6, + SFX_BMYST_DODGE_7, + SFX_BMYST_DODGE_8, + SFX_BMYST_FIGHT_1, + SFX_BMYST_FIGHT_2, + SFX_BMYST_FIGHT_3, + SFX_BMYST_FIGHT_4, + SFX_BMYST_FIGHT_5, + SFX_BMYST_FIGHT_6, + SFX_BMYST_GENERIC_CRASH_1, + SFX_BMYST_GENERIC_CRASH_2, + SFX_BMYST_GENERIC_CRASH_3, + SFX_BMYST_GENERIC_CRASH_4, + SFX_BMYST_GENERIC_CRASH_5, + SFX_BMYST_GENERIC_CRASH_6, + SFX_BMYST_GENERIC_CRASH_7, + SFX_BMYST_GUN_COOL_1, + SFX_BMYST_GUN_COOL_2, + SFX_BMYST_GUN_COOL_3, + SFX_BMYST_GUN_COOL_4, + SFX_BMYST_GUN_COOL_5, + SFX_BMYST_GUN_COOL_6, + SFX_BMYST_JACKED_1, + SFX_BMYST_JACKED_2, + SFX_BMYST_JACKED_3, + SFX_BMYST_JACKED_4, + SFX_BMYST_JACKED_5, + SFX_BMYST_JACKED_6, + SFX_BMYST_JACKED_7, + SFX_BMYST_JACKED_8, + SFX_BMYST_JACKING_1, + SFX_BMYST_JACKING_2, + SFX_BMYST_JACKING_3, + SFX_BMYST_JACKING_4, + SFX_BMYST_MUGGED_1, + SFX_BMYST_MUGGED_2, + SFX_BMYST_MUGGING_1, + SFX_BMYST_MUGGING_2, + SFX_BMYST_MUGGING_3, + SFX_BMYST_MUGGING_4, + SFX_BMYST_TAXI_1, + SFX_BMYST_TAXI_2, + + SFX_WMYPI_BLOCKED_1, + SFX_WMYPI_BLOCKED_2, + SFX_WMYPI_BLOCKED_3, + SFX_WMYPI_BLOCKED_4, + SFX_WMYPI_BLOCKED_5, + SFX_WMYPI_BLOCKED_6, + SFX_WMYPI_BLOCKED_7, + SFX_WMYPI_BLOCKED_8, + SFX_WMYPI_BUMP_1, + SFX_WMYPI_BUMP_2, + SFX_WMYPI_BUMP_3, + SFX_WMYPI_BUMP_4, + SFX_WMYPI_BUMP_5, + SFX_WMYPI_BUMP_6, + SFX_WMYPI_BUMP_7, + SFX_WMYPI_BUMP_8, + SFX_WMYPI_BUMP_9, + SFX_WMYPI_BUMP_10, + SFX_WMYPI_CAR_CRASH_1, + SFX_WMYPI_CAR_CRASH_2, + SFX_WMYPI_CAR_CRASH_3, + SFX_WMYPI_CAR_CRASH_4, + SFX_WMYPI_CAR_CRASH_5, + SFX_WMYPI_CAR_CRASH_6, + SFX_WMYPI_CAR_CRASH_7, + SFX_WMYPI_CAR_CRASH_8, + SFX_WMYPI_DODGE_1, + SFX_WMYPI_DODGE_2, + SFX_WMYPI_DODGE_3, + SFX_WMYPI_DODGE_4, + SFX_WMYPI_DODGE_5, + SFX_WMYPI_DODGE_6, + SFX_WMYPI_DODGE_7, + SFX_WMYPI_DODGE_8, + SFX_WMYPI_EYEING_1, + SFX_WMYPI_EYEING_2, + SFX_WMYPI_EYEING_3, + SFX_WMYPI_EYEING_4, + SFX_WMYPI_EYEING_5, + SFX_WMYPI_EYEING_6, + SFX_WMYPI_FIGHT_1, + SFX_WMYPI_FIGHT_2, + SFX_WMYPI_FIGHT_3, + SFX_WMYPI_FIGHT_4, + SFX_WMYPI_FIGHT_5, + SFX_WMYPI_FIGHT_6, + SFX_WMYPI_FIGHT_7, + SFX_WMYPI_FIGHT_8, + SFX_WMYPI_FIGHT_9, + SFX_WMYPI_GENERIC_CRASH_1, + SFX_WMYPI_GENERIC_CRASH_2, + SFX_WMYPI_GENERIC_CRASH_3, + SFX_WMYPI_GENERIC_CRASH_4, + SFX_WMYPI_GENERIC_CRASH_5, + SFX_WMYPI_GENERIC_CRASH_6, + SFX_WMYPI_GENERIC_CRASH_7, + SFX_WMYPI_GENERIC_CRASH_8, + SFX_WMYPI_GUN_COOL_1, + SFX_WMYPI_GUN_COOL_2, + SFX_WMYPI_GUN_COOL_3, + SFX_WMYPI_GUN_COOL_4, + SFX_WMYPI_GUN_COOL_5, + SFX_WMYPI_INNOCENT_1, + SFX_WMYPI_INNOCENT_2, + SFX_WMYPI_JACKED_1, + SFX_WMYPI_JACKED_2, + SFX_WMYPI_JACKED_3, + SFX_WMYPI_JACKED_4, + SFX_WMYPI_JACKED_5, + SFX_WMYPI_JACKED_6, + SFX_WMYPI_JACKING_1, + SFX_WMYPI_JACKING_2, + SFX_WMYPI_JACKING_3, + SFX_WMYPI_JACKING_4, + SFX_WMYPI_MUGGED_1, + SFX_WMYPI_MUGGED_2, + SFX_WMYPI_SAVED_1, + SFX_WMYPI_SAVED_2, + SFX_WMYPI_TAXI_1, + SFX_WMYPI_TAXI_2, + SFX_WMYPI_TAXI_3, + SFX_WMYPI_TAXI_4, + + SFX_BMYCR_BLOCKED_1, + SFX_BMYCR_BLOCKED_2, + SFX_BMYCR_BLOCKED_3, + SFX_BMYCR_BLOCKED_4, + SFX_BMYCR_BLOCKED_5, + SFX_BMYCR_BLOCKED_6, + SFX_BMYCR_BLOCKED_7, + SFX_BMYCR_BLOCKED_8, + SFX_BMYCR_BLOCKED_9, + SFX_BMYCR_BLOCKED_10, + SFX_BMYCR_BLOCKED_11, + SFX_BMYCR_BLOCKED_12, + SFX_BMYCR_BUMP_1, + SFX_BMYCR_BUMP_2, + SFX_BMYCR_BUMP_3, + SFX_BMYCR_BUMP_4, + SFX_BMYCR_BUMP_5, + SFX_BMYCR_BUMP_6, + SFX_BMYCR_BUMP_7, + SFX_BMYCR_BUMP_8, + SFX_BMYCR_BUMP_9, + SFX_BMYCR_BUMP_10, + SFX_BMYCR_BUMP_11, + SFX_BMYCR_CAR_CRASH_1, + SFX_BMYCR_CAR_CRASH_2, + SFX_BMYCR_CAR_CRASH_3, + SFX_BMYCR_CAR_CRASH_4, + SFX_BMYCR_CAR_CRASH_5, + SFX_BMYCR_CAR_CRASH_6, + SFX_BMYCR_CAR_CRASH_7, + SFX_BMYCR_CAR_CRASH_8, + SFX_BMYCR_CAR_CRASH_9, + SFX_BMYCR_DODGE_1, + SFX_BMYCR_DODGE_2, + SFX_BMYCR_DODGE_3, + SFX_BMYCR_DODGE_4, + SFX_BMYCR_DODGE_5, + SFX_BMYCR_DODGE_6, + SFX_BMYCR_DODGE_7, + SFX_BMYCR_DODGE_8, + SFX_BMYCR_EYEING_1, + SFX_BMYCR_EYEING_2, + SFX_BMYCR_FIGHT_1, + SFX_BMYCR_FIGHT_2, + SFX_BMYCR_FIGHT_3, + SFX_BMYCR_FIGHT_4, + SFX_BMYCR_FIGHT_5, + SFX_BMYCR_FIGHT_6, + SFX_BMYCR_FIGHT_7, + SFX_BMYCR_FIGHT_8, + SFX_BMYCR_GENERIC_CRASH_1, + SFX_BMYCR_GENERIC_CRASH_2, + SFX_BMYCR_GENERIC_CRASH_3, + SFX_BMYCR_GENERIC_CRASH_4, + SFX_BMYCR_GENERIC_CRASH_5, + SFX_BMYCR_GENERIC_CRASH_6, + SFX_BMYCR_GENERIC_CRASH_7, + SFX_BMYCR_GUN_COOL_1, + SFX_BMYCR_GUN_COOL_2, + SFX_BMYCR_GUN_COOL_3, + SFX_BMYCR_GUN_COOL_4, + SFX_BMYCR_GUN_COOL_5, + SFX_BMYCR_GUN_COOL_6, + SFX_BMYCR_INNOCENT_1, + SFX_BMYCR_INNOCENT_2, + SFX_BMYCR_INNOCENT_3, + SFX_BMYCR_INNOCENT_4, + SFX_BMYCR_JACKED_1, + SFX_BMYCR_JACKED_2, + SFX_BMYCR_JACKED_3, + SFX_BMYCR_JACKED_4, + SFX_BMYCR_JACKED_5, + SFX_BMYCR_JACKED_6, + SFX_BMYCR_JACKING_1, + SFX_BMYCR_JACKING_2, + SFX_BMYCR_JACKING_3, + SFX_BMYCR_JACKING_4, + SFX_BMYCR_JACKING_5, + SFX_BMYCR_JACKING_6, + SFX_BMYCR_JACKING_7, + SFX_BMYCR_JACKING_8, + SFX_BMYCR_JACKING_9, + SFX_BMYCR_JACKING_10, + SFX_BMYCR_JACKING_11, + SFX_BMYCR_JACKING_12, + SFX_BMYCR_MUGGED_1, + SFX_BMYCR_MUGGED_2, + SFX_BMYCR_MUGGED_3, + SFX_BMYCR_MUGGING_1, + SFX_BMYCR_MUGGING_2, + SFX_BMYCR_MUGGING_3, + SFX_BMYCR_MUGGING_4, + SFX_BMYCR_MUGGING_5, + SFX_BMYCR_MUGGING_6, + SFX_BMYCR_SAVED_1, + SFX_BMYCR_SAVED_2, + + SFX_WMORI_BLOCKED_1, + SFX_WMORI_BLOCKED_2, + SFX_WMORI_BLOCKED_3, + SFX_WMORI_BLOCKED_4, + SFX_WMORI_BLOCKED_5, + SFX_WMORI_BLOCKED_6, + SFX_WMORI_BLOCKED_7, + SFX_WMORI_BLOCKED_8, + SFX_WMORI_BLOCKED_9, + SFX_WMORI_BLOCKED_10, + SFX_WMORI_BUMP_1, + SFX_WMORI_BUMP_2, + SFX_WMORI_BUMP_3, + SFX_WMORI_BUMP_4, + SFX_WMORI_BUMP_5, + SFX_WMORI_BUMP_6, + SFX_WMORI_BUMP_7, + SFX_WMORI_BUMP_8, + SFX_WMORI_BUMP_9, + SFX_WMORI_BUMP_10, + SFX_WMORI_BUMP_11, + SFX_WMORI_BUMP_12, + SFX_WMORI_BUMP_13, + SFX_WMORI_BUMP_14, + SFX_WMORI_CAR_CRASH_1, + SFX_WMORI_CAR_CRASH_2, + SFX_WMORI_CAR_CRASH_3, + SFX_WMORI_CAR_CRASH_4, + SFX_WMORI_CAR_CRASH_5, + SFX_WMORI_CAR_CRASH_6, + SFX_WMORI_DODGE_1, + SFX_WMORI_DODGE_2, + SFX_WMORI_DODGE_3, + SFX_WMORI_DODGE_4, + SFX_WMORI_DODGE_5, + SFX_WMORI_DODGE_6, + SFX_WMORI_DODGE_7, + SFX_WMORI_DODGE_8, + SFX_WMORI_DODGE_9, + SFX_WMORI_DODGE_10, + SFX_WMORI_EYEING_1, + SFX_WMORI_EYEING_2, + SFX_WMORI_EYEING_3, + SFX_WMORI_GENERIC_CRASH_1, + SFX_WMORI_GENERIC_CRASH_2, + SFX_WMORI_GENERIC_CRASH_3, + SFX_WMORI_GENERIC_CRASH_4, + SFX_WMORI_GENERIC_CRASH_5, + SFX_WMORI_GENERIC_CRASH_6, + SFX_WMORI_GENERIC_CRASH_7, + SFX_WMORI_GENERIC_CRASH_8, + SFX_WMORI_GUN_PANIC_1, + SFX_WMORI_GUN_PANIC_2, + SFX_WMORI_GUN_PANIC_3, + SFX_WMORI_GUN_PANIC_4, + SFX_WMORI_GUN_PANIC_5, + SFX_WMORI_GUN_PANIC_6, + SFX_WMORI_GUN_PANIC_7, + SFX_WMORI_GUN_PANIC_8, + SFX_WMORI_GUN_PANIC_9, + SFX_WMORI_JACKED_1, + SFX_WMORI_JACKED_2, + SFX_WMORI_JACKED_3, + SFX_WMORI_JACKED_4, + SFX_WMORI_JACKED_5, + SFX_WMORI_JACKED_6, + SFX_WMORI_LOST_1, + SFX_WMORI_LOST_2, + SFX_WMORI_MUGGED_1, + SFX_WMORI_MUGGED_2, + SFX_WMORI_MUGGED_3, + SFX_WMORI_MUGGED_4, + SFX_WMORI_RUN_1, + SFX_WMORI_RUN_2, + SFX_WMORI_RUN_3, + SFX_WMORI_RUN_4, + SFX_WMORI_RUN_5, + SFX_WMORI_RUN_6, + SFX_WMORI_RUN_7, + SFX_WMORI_RUN_8, + SFX_WMORI_RUN_9, + SFX_WMORI_RUN_10, + SFX_WMORI_RUN_11, + SFX_WMORI_RUN_12, + SFX_WMORI_SAVED_1, + SFX_WMORI_SAVED_2, + SFX_WMORI_SHOCKED_1, + SFX_WMORI_SHOCKED_2, + SFX_WMORI_SHOCKED_3, + SFX_WMORI_SHOCKED_4, + SFX_WMORI_TAXI_1, + SFX_WMORI_TAXI_2, + + SFX_WMOBU_BLOCKED_1, + SFX_WMOBU_BLOCKED_2, + SFX_WMOBU_BLOCKED_3, + SFX_WMOBU_BLOCKED_4, + SFX_WMOBU_BLOCKED_5, + SFX_WMOBU_BLOCKED_6, + SFX_WMOBU_BLOCKED_7, + SFX_WMOBU_BUMP_1, + SFX_WMOBU_BUMP_2, + SFX_WMOBU_BUMP_3, + SFX_WMOBU_BUMP_4, + SFX_WMOBU_BUMP_5, + SFX_WMOBU_BUMP_6, + SFX_WMOBU_BUMP_7, + SFX_WMOBU_BUMP_8, + SFX_WMOBU_BUMP_9, + SFX_WMOBU_BUMP_10, + SFX_WMOBU_CAR_CRASH_1, + SFX_WMOBU_CAR_CRASH_2, + SFX_WMOBU_CAR_CRASH_3, + SFX_WMOBU_CAR_CRASH_4, + SFX_WMOBU_CAR_CRASH_5, + SFX_WMOBU_CAR_CRASH_6, + SFX_WMOBU_CAR_CRASH_7, + SFX_WMOBU_DODGE_1, + SFX_WMOBU_DODGE_2, + SFX_WMOBU_DODGE_3, + SFX_WMOBU_DODGE_4, + SFX_WMOBU_DODGE_5, + SFX_WMOBU_DODGE_6, + SFX_WMOBU_DODGE_7, + SFX_WMOBU_DODGE_8, + SFX_WMOBU_EYEING_1, + SFX_WMOBU_EYEING_2, + SFX_WMOBU_FIGHT_1, + SFX_WMOBU_FIGHT_2, + SFX_WMOBU_FIGHT_3, + SFX_WMOBU_GENERIC_CRASH_1, + SFX_WMOBU_GENERIC_CRASH_2, + SFX_WMOBU_GENERIC_CRASH_3, + SFX_WMOBU_GENERIC_CRASH_4, + SFX_WMOBU_GENERIC_CRASH_5, + SFX_WMOBU_GENERIC_CRASH_6, + SFX_WMOBU_GENERIC_CRASH_7, + SFX_WMOBU_GUN_PANIC_1, + SFX_WMOBU_GUN_PANIC_2, + SFX_WMOBU_GUN_PANIC_3, + SFX_WMOBU_GUN_PANIC_4, + SFX_WMOBU_GUN_PANIC_5, + SFX_WMOBU_GUN_PANIC_6, + SFX_WMOBU_JACKED_1, + SFX_WMOBU_JACKED_2, + SFX_WMOBU_JACKED_3, + SFX_WMOBU_JACKED_4, + SFX_WMOBU_JACKED_5, + SFX_WMOBU_JACKED_6, + SFX_WMOBU_JACKED_7, + SFX_WMOBU_LOST_1, + SFX_WMOBU_LOST_2, + SFX_WMOBU_LOST_3, + SFX_WMOBU_MUGGED_1, + SFX_WMOBU_MUGGED_2, + SFX_WMOBU_SAVED_1, + SFX_WMOBU_SAVED_2, + SFX_WMOBU_SAVED_3, + SFX_WMOBU_TAXI_1, + SFX_WMOBU_TAXI_2, + + SFX_BMODK_BLOCKED_1, + SFX_BMODK_BLOCKED_2, + SFX_BMODK_BLOCKED_3, + SFX_BMODK_BLOCKED_4, + SFX_BMODK_BLOCKED_5, + SFX_BMODK_BLOCKED_6, + SFX_BMODK_BLOCKED_7, + SFX_BMODK_BLOCKED_8, + SFX_BMODK_BUMP_1, + SFX_BMODK_BUMP_2, + SFX_BMODK_BUMP_3, + SFX_BMODK_BUMP_4, + SFX_BMODK_BUMP_5, + SFX_BMODK_BUMP_6, + SFX_BMODK_BUMP_7, + SFX_BMODK_BUMP_8, + SFX_BMODK_BUMP_9, + SFX_BMODK_BUMP_10, + SFX_BMODK_CAR_CRASH_1, + SFX_BMODK_CAR_CRASH_2, + SFX_BMODK_CAR_CRASH_3, + SFX_BMODK_CAR_CRASH_4, + SFX_BMODK_CAR_CRASH_5, + SFX_BMODK_CAR_CRASH_6, + SFX_BMODK_CAR_CRASH_7, + SFX_BMODK_CAR_CRASH_8, + SFX_BMODK_CAR_CRASH_9, + SFX_BMODK_CAR_CRASH_10, + SFX_BMODK_UNK, // UNUSED + SFX_BMODK_UNK_147_1, + SFX_BMODK_UNK_147_2, + SFX_BMODK_UNK_147_3, + SFX_BMODK_UNK_147_4, + SFX_BMODK_UNK_147_5, + SFX_BMODK_UNK_147_6, + SFX_BMODK_UNK_147_7, + SFX_BMODK_UNK_147_8, + SFX_BMODK_UNK_147_9, + SFX_BMODK_UNK_147_10, + SFX_BMODK_UNK_147_11, + SFX_BMODK_UNK_147_12, + SFX_BMODK_DODGE_1, + SFX_BMODK_DODGE_2, + SFX_BMODK_DODGE_3, + SFX_BMODK_DODGE_4, + SFX_BMODK_DODGE_5, + SFX_BMODK_DODGE_6, + SFX_BMODK_DODGE_7, + SFX_BMODK_GENERIC_CRASH_1, + SFX_BMODK_GENERIC_CRASH_2, + SFX_BMODK_GENERIC_CRASH_3, + SFX_BMODK_GENERIC_CRASH_4, + SFX_BMODK_GENERIC_CRASH_5, + SFX_BMODK_GENERIC_CRASH_6, + SFX_BMODK_GENERIC_CRASH_7, + SFX_BMODK_GUN_PANIC_1, + SFX_BMODK_GUN_PANIC_2, + SFX_BMODK_GUN_PANIC_3, + SFX_BMODK_GUN_PANIC_4, + SFX_BMODK_INNOCENT_1, + SFX_BMODK_INNOCENT_2, + SFX_BMODK_INNOCENT_3, + SFX_BMODK_JACKED_1, + SFX_BMODK_JACKED_2, + SFX_BMODK_JACKED_3, + SFX_BMODK_JACKED_4, + SFX_BMODK_JACKED_5, + SFX_BMODK_JACKED_6, + SFX_BMODK_JACKED_7, + SFX_BMODK_JACKED_8, + SFX_BMODK_JACKED_9, + SFX_BMODK_MUGGED_1, + SFX_BMODK_MUGGED_2, + SFX_BMODK_RUN_1, + SFX_BMODK_RUN_2, + SFX_BMODK_RUN_3, + SFX_BMODK_RUN_4, + SFX_BMODK_TAXI_1, + + SFX_HFYBE_BUMP_1, + SFX_HFYBE_BUMP_2, + SFX_HFYBE_BUMP_3, + SFX_HFYBE_BUMP_4, + SFX_HFYBE_BUMP_5, + SFX_HFYBE_BUMP_6, + SFX_HFYBE_BUMP_7, + SFX_HFYBE_BUMP_8, + SFX_HFYBE_CAR_CRASH_1, + SFX_HFYBE_CAR_CRASH_2, + SFX_HFYBE_CAR_CRASH_3, + SFX_HFYBE_CAR_CRASH_4, + SFX_HFYBE_CAR_CRASH_5, + SFX_HFYBE_CAR_CRASH_6, + SFX_HFYBE_CHAT_1, + SFX_HFYBE_CHAT_2, + SFX_HFYBE_CHAT_3, + SFX_HFYBE_CHAT_4, + SFX_HFYBE_CHAT_5, + SFX_HFYBE_CHAT_6, + SFX_HFYBE_CHAT_7, + SFX_HFYBE_CHAT_8, + SFX_HFYBE_CHAT_9, + SFX_HFYBE_CHAT_10, + SFX_HFYBE_DODGE_1, + SFX_HFYBE_DODGE_2, + SFX_HFYBE_DODGE_3, + SFX_HFYBE_DODGE_4, + SFX_HFYBE_DODGE_5, + SFX_HFYBE_DODGE_6, + SFX_HFYBE_DODGE_7, + SFX_HFYBE_DODGE_8, + SFX_HFYBE_DODGE_9, + SFX_HFYBE_DODGE_10, + SFX_HFYBE_DODGE_11, + SFX_HFYBE_GENERIC_CRASH_1, + SFX_HFYBE_GENERIC_CRASH_2, + SFX_HFYBE_GENERIC_CRASH_3, + SFX_HFYBE_GENERIC_CRASH_4, + SFX_HFYBE_GENERIC_CRASH_5, + SFX_HFYBE_GENERIC_CRASH_6, + SFX_HFYBE_GENERIC_CRASH_7, + SFX_HFYBE_GENERIC_CRASH_8, + SFX_HFYBE_GUN_PANIC_1, + SFX_HFYBE_GUN_PANIC_2, + SFX_HFYBE_GUN_PANIC_3, + SFX_HFYBE_GUN_PANIC_4, + SFX_HFYBE_GUN_PANIC_5, + SFX_HFYBE_GUN_PANIC_6, + SFX_HFYBE_GUN_PANIC_7, + SFX_HFYBE_JACKED_1, + SFX_HFYBE_JACKED_2, + SFX_HFYBE_JACKED_3, + SFX_HFYBE_JACKED_4, + SFX_HFYBE_JACKED_5, + SFX_HFYBE_JACKED_6, + SFX_HFYBE_JACKED_7, + SFX_HFYBE_LOST_1, + SFX_HFYBE_LOST_2, + + // this is a guess, idk what she's saying + SFX_HFYBE_RUN_1, + SFX_HFYBE_RUN_2, + SFX_HFYBE_RUN_3, + SFX_HFYBE_RUN_4, + SFX_HFYBE_RUN_5, + SFX_HFYBE_RUN_6, + SFX_HFYBE_RUN_7, + + SFX_HFYBE_SHOCKED_1, + SFX_HFYBE_SHOCKED_2, + SFX_HFYBE_TAXI_1, + + SFX_HFYRI_BLOCKED_1, + SFX_HFYRI_BLOCKED_2, + SFX_HFYRI_BLOCKED_3, + SFX_HFYRI_BLOCKED_4, + SFX_HFYRI_BLOCKED_5, + SFX_HFYRI_BLOCKED_6, + SFX_HFYRI_BLOCKED_7, + SFX_HFYRI_BLOCKED_8, + SFX_HFYRI_BUMP_1, + SFX_HFYRI_BUMP_2, + SFX_HFYRI_BUMP_3, + SFX_HFYRI_BUMP_4, + SFX_HFYRI_BUMP_5, + SFX_HFYRI_BUMP_6, + SFX_HFYRI_BUMP_7, + SFX_HFYRI_BUMP_8, + SFX_HFYRI_BUMP_9, + SFX_HFYRI_CAR_CRASH_1, + SFX_HFYRI_CAR_CRASH_2, + SFX_HFYRI_CAR_CRASH_3, + SFX_HFYRI_CAR_CRASH_4, + SFX_HFYRI_CAR_CRASH_5, + SFX_HFYRI_CAR_CRASH_6, + SFX_HFYRI_CAR_CRASH_7, + SFX_HFYRI_CAR_CRASH_8, + SFX_HFYRI_DODGE_1, + SFX_HFYRI_DODGE_2, + SFX_HFYRI_DODGE_3, + SFX_HFYRI_DODGE_4, + SFX_HFYRI_DODGE_5, + SFX_HFYRI_DODGE_6, + SFX_HFYRI_DODGE_7, + SFX_HFYRI_DODGE_8, + SFX_HFYRI_DODGE_9, + SFX_HFYRI_DODGE_10, + SFX_HFYRI_GENERIC_CRASH_1, + SFX_HFYRI_GENERIC_CRASH_2, + SFX_HFYRI_GENERIC_CRASH_3, + SFX_HFYRI_GENERIC_CRASH_4, + SFX_HFYRI_GENERIC_CRASH_5, + SFX_HFYRI_GENERIC_CRASH_6, + SFX_HFYRI_GENERIC_CRASH_7, + SFX_HFYRI_GUN_PANIC_1, + SFX_HFYRI_GUN_PANIC_2, + SFX_HFYRI_GUN_PANIC_3, + SFX_HFYRI_GUN_PANIC_4, + SFX_HFYRI_GUN_PANIC_5, + SFX_HFYRI_JACKED_1, + SFX_HFYRI_JACKED_2, + SFX_HFYRI_JACKED_3, + SFX_HFYRI_JACKED_4, + SFX_HFYRI_JACKED_5, + SFX_HFYRI_JACKED_6, + SFX_HFYRI_LOST_1, + SFX_HFYRI_LOST_2, + SFX_HFYRI_MUGGED_1, + SFX_HFYRI_MUGGED_2, + SFX_HFYRI_MUGGED_3, + SFX_HFYRI_MUGGED_4, + SFX_HFYRI_RUN_1, + SFX_HFYRI_RUN_2, + SFX_HFYRI_RUN_3, + SFX_HFYRI_RUN_4, + SFX_HFYRI_SAVED_1, + SFX_HFYRI_SAVED_2, + SFX_HFYRI_SHOCKED_1, + SFX_HFYRI_SHOCKED_2, + SFX_HFYRI_SHOCKED_3, + SFX_HFYRI_TAXI_1, + SFX_BFOST_BLOCKED_1, + SFX_BFOST_BLOCKED_2, + SFX_BFOST_BLOCKED_3, + SFX_BFOST_BLOCKED_4, + SFX_BFOST_BLOCKED_5, + SFX_BFOST_BLOCKED_6, + SFX_BFOST_BLOCKED_7, + SFX_BFOST_BUMP_1, + SFX_BFOST_BUMP_2, + SFX_BFOST_BUMP_3, + SFX_BFOST_BUMP_4, + SFX_BFOST_BUMP_5, + SFX_BFOST_BUMP_6, + SFX_BFOST_BUMP_7, + SFX_BFOST_BUMP_8, + SFX_BFOST_BUMP_9, + SFX_BFOST_BUMP_10, + SFX_BFOST_CAR_CRASH_1, + SFX_BFOST_CAR_CRASH_2, + SFX_BFOST_CAR_CRASH_3, + SFX_BFOST_CAR_CRASH_4, + SFX_BFOST_CAR_CRASH_5, + SFX_BFOST_CAR_CRASH_6, + SFX_BFOST_CAR_CRASH_7, + SFX_BFOST_CAR_CRASH_8, + SFX_BFOST_CHAT_1, + SFX_BFOST_CHAT_2, + SFX_BFOST_CHAT_3, + SFX_BFOST_CHAT_4, + SFX_BFOST_CHAT_5, + SFX_BFOST_CHAT_6, + SFX_BFOST_CHAT_7, + SFX_BFOST_CHAT_8, + SFX_BFOST_CHAT_9, + SFX_BFOST_CHAT_10, + SFX_BFOST_DODGE_1, + SFX_BFOST_DODGE_2, + SFX_BFOST_DODGE_3, + SFX_BFOST_DODGE_4, + SFX_BFOST_DODGE_5, + SFX_BFOST_DODGE_6, + SFX_BFOST_DODGE_7, + SFX_BFOST_DODGE_8, + SFX_BFOST_DODGE_9, + SFX_BFOST_DODGE_10, + SFX_BFOST_DODGE_11, + SFX_BFOST_GENERIC_CRASH_1, + SFX_BFOST_GENERIC_CRASH_2, + SFX_BFOST_GENERIC_CRASH_3, + SFX_BFOST_GENERIC_CRASH_4, + SFX_BFOST_GENERIC_CRASH_5, + SFX_BFOST_GENERIC_CRASH_6, + SFX_BFOST_GENERIC_CRASH_7, + SFX_BFOST_GENERIC_CRASH_8, + SFX_BFOST_GUN_PANIC_1, + SFX_BFOST_GUN_PANIC_2, + SFX_BFOST_GUN_PANIC_3, + SFX_BFOST_GUN_PANIC_4, + SFX_BFOST_GUN_PANIC_5, + SFX_BFOST_JACKED_1, + SFX_BFOST_JACKED_2, + SFX_BFOST_JACKED_3, + SFX_BFOST_JACKED_4, + SFX_BFOST_JACKED_5, + SFX_BFOST_JACKED_6, + SFX_BFOST_JACKED_7, + SFX_BFOST_JACKED_8, + SFX_BFOST_LOST_1, + SFX_BFOST_LOST_2, + SFX_BFOST_MUGGED_1, + SFX_BFOST_MUGGED_2, + SFX_BFOST_RUN_1, + SFX_BFOST_RUN_2, + SFX_BFOST_RUN_3, + SFX_BFOST_RUN_4, + SFX_BFOST_SAVED_1, + SFX_BFOST_SAVED_2, + SFX_BFOST_TAXI_1, + SFX_BFORI_BLOCKED_1, + SFX_BFORI_BLOCKED_2, + SFX_BFORI_BLOCKED_3, + SFX_BFORI_BLOCKED_4, + SFX_BFORI_BLOCKED_5, + SFX_BFORI_BLOCKED_6, + SFX_BFORI_BLOCKED_7, + SFX_BFORI_BLOCKED_8, + SFX_BFORI_BUMP_1, + SFX_BFORI_BUMP_2, + SFX_BFORI_BUMP_3, + SFX_BFORI_BUMP_4, + SFX_BFORI_BUMP_5, + SFX_BFORI_BUMP_6, + SFX_BFORI_BUMP_7, + SFX_BFORI_BUMP_8, + SFX_BFORI_BUMP_9, + SFX_BFORI_CAR_CRASH_1, + SFX_BFORI_CAR_CRASH_2, + SFX_BFORI_CAR_CRASH_3, + SFX_BFORI_CAR_CRASH_4, + SFX_BFORI_CAR_CRASH_5, + SFX_BFORI_CAR_CRASH_6, + SFX_BFORI_CAR_CRASH_7, + SFX_BFORI_DODGE_1, + SFX_BFORI_DODGE_2, + SFX_BFORI_DODGE_3, + SFX_BFORI_DODGE_4, + SFX_BFORI_DODGE_5, + SFX_BFORI_DODGE_6, + SFX_BFORI_DODGE_7, + SFX_BFORI_DODGE_8, + SFX_BFORI_DODGE_9, + SFX_BFORI_GENERIC_CRASH_1, + SFX_BFORI_GENERIC_CRASH_2, + SFX_BFORI_GENERIC_CRASH_3, + SFX_BFORI_GENERIC_CRASH_4, + SFX_BFORI_GENERIC_CRASH_5, + SFX_BFORI_GENERIC_CRASH_6, + SFX_BFORI_GENERIC_CRASH_7, + SFX_BFORI_GUN_PANIC_1, + SFX_BFORI_GUN_PANIC_2, + SFX_BFORI_GUN_PANIC_3, + SFX_BFORI_GUN_PANIC_4, + SFX_BFORI_GUN_PANIC_5, + SFX_BFORI_JACKED_1, + SFX_BFORI_JACKED_2, + SFX_BFORI_JACKED_3, + SFX_BFORI_JACKED_4, + SFX_BFORI_LOST_1, + SFX_BFORI_LOST_2, + SFX_BFORI_MUGGED_1, + SFX_BFORI_MUGGED_2, + SFX_BFORI_RUN_1, + SFX_BFORI_RUN_2, + SFX_BFORI_RUN_3, + SFX_BFORI_RUN_4, + SFX_BFORI_SAVED_1, + SFX_BFORI_SHOCKED_1, + SFX_BFORI_SHOCKED_2, + SFX_BFORI_TAXI_1, + SFX_BFORI_TAXI_2, + + SFX_BFYST_BLOCKED_1, + SFX_BFYST_BLOCKED_2, + SFX_BFYST_BLOCKED_3, + SFX_BFYST_BLOCKED_4, + SFX_BFYST_BLOCKED_5, + SFX_BFYST_BLOCKED_6, + SFX_BFYST_BLOCKED_7, + SFX_BFYST_BLOCKED_8, + SFX_BFYST_BUMP_1, + SFX_BFYST_BUMP_2, + SFX_BFYST_BUMP_3, + SFX_BFYST_BUMP_4, + SFX_BFYST_BUMP_5, + SFX_BFYST_BUMP_6, + SFX_BFYST_BUMP_7, + SFX_BFYST_BUMP_8, + SFX_BFYST_BUMP_9, + SFX_BFYST_CAR_CRASH_1, + SFX_BFYST_CAR_CRASH_2, + SFX_BFYST_CAR_CRASH_3, + SFX_BFYST_CAR_CRASH_4, + SFX_BFYST_CAR_CRASH_5, + SFX_BFYST_CAR_CRASH_6, + SFX_BFYST_CAR_CRASH_7, + SFX_BFYST_CAR_CRASH_8, + SFX_BFYST_CAR_CRASH_9, + SFX_BFYST_CHAT_1, + SFX_BFYST_CHAT_2, + SFX_BFYST_CHAT_3, + SFX_BFYST_CHAT_4, + SFX_BFYST_CHAT_5, + SFX_BFYST_CHAT_6, + SFX_BFYST_CHAT_7, + SFX_BFYST_CHAT_8, + SFX_BFYST_CHAT_9, + SFX_BFYST_DODGE_1, + SFX_BFYST_DODGE_2, + SFX_BFYST_DODGE_3, + SFX_BFYST_DODGE_4, + SFX_BFYST_DODGE_5, + SFX_BFYST_DODGE_6, + SFX_BFYST_DODGE_7, + SFX_BFYST_DODGE_8, + SFX_BFYST_DODGE_9, + SFX_BFYST_GENERIC_CRASH_1, + SFX_BFYST_GENERIC_CRASH_2, + SFX_BFYST_GENERIC_CRASH_3, + SFX_BFYST_GENERIC_CRASH_4, + SFX_BFYST_GENERIC_CRASH_5, + SFX_BFYST_GENERIC_CRASH_6, + SFX_BFYST_GENERIC_CRASH_7, + SFX_BFYST_GENERIC_CRASH_8, + SFX_BFYST_GUN_PANIC_1, + SFX_BFYST_GUN_PANIC_2, + SFX_BFYST_GUN_PANIC_3, + SFX_BFYST_GUN_PANIC_4, + SFX_BFYST_JACKED_1, + SFX_BFYST_JACKED_2, + SFX_BFYST_JACKED_3, + SFX_BFYST_JACKED_4, + SFX_BFYST_JACKED_5, + SFX_BFYST_LOST_1, + SFX_BFYST_LOST_2, + SFX_BFYST_MUGGED_1, + SFX_BFYST_MUGGED_2, + SFX_BFYST_RUN_1, + SFX_BFYST_RUN_2, + SFX_BFYST_RUN_3, + SFX_BFYST_RUN_4, + SFX_BFYST_RUN_5, + SFX_BFYST_RUN_6, + SFX_BFYST_SAVED_1, + SFX_BFYST_SAVED_2, + SFX_BFYST_TAXI_1, + + SFX_HFORI_BLOCKED_1, + SFX_HFORI_BLOCKED_2, + SFX_HFORI_BLOCKED_3, + SFX_HFORI_BLOCKED_4, + SFX_HFORI_BLOCKED_5, + SFX_HFORI_BLOCKED_6, + SFX_HFORI_BUMP_1, + SFX_HFORI_BUMP_2, + SFX_HFORI_BUMP_3, + SFX_HFORI_BUMP_4, + SFX_HFORI_BUMP_5, + SFX_HFORI_BUMP_6, + SFX_HFORI_BUMP_7, + SFX_HFORI_BUMP_8, + SFX_HFORI_BUMP_9, + SFX_HFORI_BUMP_10, + SFX_HFORI_CAR_CRASH_1, + SFX_HFORI_CAR_CRASH_2, + SFX_HFORI_CAR_CRASH_3, + SFX_HFORI_CAR_CRASH_4, + SFX_HFORI_CAR_CRASH_5, + SFX_HFORI_CAR_CRASH_6, + SFX_HFORI_CAR_CRASH_7, + SFX_HFORI_DODGE_1, + SFX_HFORI_DODGE_2, + SFX_HFORI_DODGE_3, + SFX_HFORI_DODGE_4, + SFX_HFORI_DODGE_5, + SFX_HFORI_DODGE_6, + SFX_HFORI_EYEING_1, + SFX_HFORI_EYEING_2, + SFX_HFORI_GENERIC_CRASH_1, + SFX_HFORI_GENERIC_CRASH_2, + SFX_HFORI_GENERIC_CRASH_3, + SFX_HFORI_GENERIC_CRASH_4, + SFX_HFORI_GENERIC_CRASH_5, + SFX_HFORI_GENERIC_CRASH_6, + SFX_HFORI_GENERIC_CRASH_7, + SFX_HFORI_GUN_PANIC_1, + SFX_HFORI_GUN_PANIC_2, + SFX_HFORI_GUN_PANIC_3, + SFX_HFORI_GUN_PANIC_4, + SFX_HFORI_GUN_PANIC_5, + SFX_HFORI_GUN_PANIC_6, + SFX_HFORI_JACKED_1, + SFX_HFORI_JACKED_2, + SFX_HFORI_JACKED_3, + SFX_HFORI_JACKED_4, + SFX_HFORI_JACKED_5, + SFX_HFORI_JACKED_6, + SFX_HFORI_JACKED_7, + SFX_HFORI_JACKED_8, + SFX_HFORI_JACKED_9, + SFX_HFORI_LOST_1, + SFX_HFORI_LOST_2, + SFX_HFORI_MUGGED_1, + SFX_HFORI_MUGGED_2, + SFX_HFORI_RUN_1, + SFX_HFORI_RUN_2, + SFX_HFORI_RUN_3, + SFX_HFORI_RUN_4, + SFX_HFORI_SAVED_1, + SFX_HFORI_SHOCKED_1, + SFX_HFORI_SHOCKED_2, + SFX_HFORI_TAXI_1, + + SFX_WFYBU_BUMP_1, + SFX_WFYBU_BUMP_2, + SFX_WFYBU_BUMP_3, + SFX_WFYBU_BUMP_4, + SFX_WFYBU_BUMP_5, + SFX_WFYBU_BUMP_6, + SFX_WFYBU_BUMP_7, + SFX_WFYBU_BUMP_8, + SFX_WFYBU_BUMP_9, + SFX_WFYBU_BUMP_10, + SFX_WFYBU_BUMP_11, + SFX_WFYBU_BUMP_12, + SFX_WFYBU_BUMP_13, + SFX_WFYBU_BUMP_14, + SFX_WFYBU_BUMP_15, + SFX_WFYBU_BUMP_16, + SFX_WFYBU_BUMP_17, + SFX_WFYBU_BUMP_18, + SFX_WFYBU_BUMP_19, + SFX_WFYBU_BUMP_20, + SFX_WFYBU_BUMP_21, + SFX_WFYBU_CAR_CRASH_1, + SFX_WFYBU_CAR_CRASH_2, + SFX_WFYBU_CAR_CRASH_3, + SFX_WFYBU_CAR_CRASH_4, + SFX_WFYBU_CAR_CRASH_5, + SFX_WFYBU_CAR_CRASH_6, + SFX_WFYBU_CAR_CRASH_7, + SFX_WFYBU_CAR_CRASH_8, + SFX_WFYBU_CAR_CRASH_9, + SFX_WFYBU_GENERIC_CRASH_1, + SFX_WFYBU_GENERIC_CRASH_2, + SFX_WFYBU_GENERIC_CRASH_3, + SFX_WFYBU_GENERIC_CRASH_4, + SFX_WFYBU_GENERIC_CRASH_5, + SFX_WFYBU_GENERIC_CRASH_6, + SFX_WFYBU_GENERIC_CRASH_7, + SFX_WFYBU_GENERIC_CRASH_8, + SFX_WFYBU_GUN_PANIC_1, + SFX_WFYBU_GUN_PANIC_2, + SFX_WFYBU_GUN_PANIC_3, + SFX_WFYBU_GUN_PANIC_4, + SFX_WFYBU_GUN_PANIC_5, + SFX_WFYBU_GUN_PANIC_6, + SFX_WFYBU_GUN_PANIC_7, + SFX_WFYBU_GUN_PANIC_8, + SFX_WFYBU_JACKED_1, + SFX_WFYBU_JACKED_2, + SFX_WFYBU_JACKED_3, + SFX_WFYBU_JACKED_4, + SFX_WFYBU_JACKED_5, + SFX_WFYBU_JACKED_6, + SFX_WFYBU_JACKED_7, + SFX_WFYBU_JACKED_8, + SFX_WFYBU_MUGGED_1, + SFX_WFYBU_MUGGED_2, + SFX_WFYBU_MUGGED_3, + SFX_WFYBU_MUGGED_4, + SFX_WFYBU_RUN_1, + SFX_WFYBU_RUN_2, + SFX_WFYBU_RUN_3, + SFX_WFYBU_RUN_4, + SFX_WFYBU_RUN_5, + SFX_WFYBU_RUN_6, + SFX_WFYBU_RUN_7, + SFX_WFYBU_RUN_8, + SFX_WFYBU_SHOCKED_1, + SFX_WFYBU_SHOCKED_2, + SFX_WFYBU_SHOCKED_3, + SFX_WFYBU_TAXI_1, + SFX_WFYBU_TAXI_2, + + SFX_WFOTR_BUMP_1, + SFX_WFOTR_BUMP_2, + SFX_WFOTR_BUMP_3, + SFX_WFOTR_BUMP_4, + SFX_WFOTR_BUMP_5, + SFX_WFOTR_BUMP_6, + SFX_WFOTR_BUMP_7, + SFX_WFOTR_BUMP_8, + SFX_WFOTR_BUMP_9, + SFX_WFOTR_BUMP_10, + SFX_WFOTR_BUMP_11, + SFX_WFOTR_CHAT_1, + SFX_WFOTR_CHAT_2, + SFX_WFOTR_CHAT_3, + SFX_WFOTR_CHAT_4, + SFX_WFOTR_CHAT_5, + SFX_WFOTR_CHAT_6, + SFX_WFOTR_CHAT_7, + SFX_WFOTR_CHAT_8, + SFX_WFOTR_CHAT_9, + SFX_WFOTR_DODGE_1, + SFX_WFOTR_DODGE_2, + SFX_WFOTR_DODGE_3, + SFX_WFOTR_DODGE_4, + SFX_WFOTR_DODGE_5, + SFX_WFOTR_DODGE_6, + SFX_WFOTR_DODGE_7, + SFX_WFOTR_DODGE_8, + SFX_WFOTR_DODGE_9, + SFX_WFOTR_GUN_COOL_1, + SFX_WFOTR_GUN_COOL_2, + SFX_WFOTR_GUN_COOL_3, + SFX_WFOTR_GUN_COOL_4, + SFX_WFOTR_GUN_COOL_5, + SFX_WFOTR_GUN_COOL_6, + SFX_WFOTR_RUN_1, + SFX_WFOTR_RUN_2, + SFX_WFOTR_RUN_3, + SFX_WFOTR_RUN_4, + SFX_WFOTR_RUN_5, + SFX_WFOTR_RUN_6, + SFX_WFOTR_SAVED_1, + SFX_WFOTR_SOLICIT_1, + SFX_WFOTR_SOLICIT_2, + SFX_WFOTR_SOLICIT_3, + SFX_WFOTR_SOLICIT_4, + SFX_WFOTR_SOLICIT_5, + SFX_WFOTR_SOLICIT_6, + SFX_WFOTR_SOLICIT_7, + SFX_WFOTR_SOLICIT_8, + SFX_WFOTR_SOLICIT_9, + SFX_WFOTR_TAXI_1, + + SFX_WFYJG_BUMP_1, + SFX_WFYJG_BUMP_2, + SFX_WFYJG_BUMP_3, + SFX_WFYJG_BUMP_4, + SFX_WFYJG_BUMP_5, + SFX_WFYJG_BUMP_6, + SFX_WFYJG_BUMP_7, + SFX_WFYJG_BUMP_8, + SFX_WFYJG_BUMP_9, + SFX_WFYJG_BUMP_10, + SFX_WFYJG_BUMP_11, + SFX_WFYJG_BUMP_12, + SFX_WFYJG_DODGE_1, + SFX_WFYJG_DODGE_2, + SFX_WFYJG_DODGE_3, + SFX_WFYJG_DODGE_4, + SFX_WFYJG_DODGE_5, + SFX_WFYJG_DODGE_6, + SFX_WFYJG_DODGE_7, + SFX_WFYJG_DODGE_8, + SFX_WFYJG_GUN_PANIC_1, + SFX_WFYJG_GUN_PANIC_2, + SFX_WFYJG_GUN_PANIC_3, + SFX_WFYJG_GUN_PANIC_4, + SFX_WFYJG_RUN_1, + SFX_WFYJG_RUN_2, + SFX_WFYJG_RUN_3, + SFX_WFYJG_RUN_4, + SFX_WFYJG_RUN_5, + SFX_WFYJG_RUN_6, + SFX_WFYJG_SAVED_1, + SFX_WFYJG_TAXI_1, + + SFX_WFYSH_BUMP_1, + SFX_WFYSH_BUMP_2, + SFX_WFYSH_BUMP_3, + SFX_WFYSH_BUMP_4, + SFX_WFYSH_BUMP_5, + SFX_WFYSH_BUMP_6, + SFX_WFYSH_BUMP_7, + SFX_WFYSH_BUMP_8, + SFX_WFYSH_BUMP_9, + SFX_WFYSH_BUMP_10, + SFX_WFYSH_BUMP_11, + SFX_WFYSH_BUMP_12, + SFX_WFYSH_CHAT_1, + SFX_WFYSH_CHAT_2, + SFX_WFYSH_CHAT_3, + SFX_WFYSH_CHAT_4, + SFX_WFYSH_CHAT_5, + SFX_WFYSH_CHAT_6, + SFX_WFYSH_CHAT_7, + SFX_WFYSH_CHAT_8, + SFX_WFYSH_CHAT_9, + SFX_WFYSH_CHAT_10, + SFX_WFYSH_DODGE_1, + SFX_WFYSH_DODGE_2, + SFX_WFYSH_DODGE_3, + SFX_WFYSH_DODGE_4, + SFX_WFYSH_DODGE_5, + SFX_WFYSH_DODGE_6, + SFX_WFYSH_DODGE_7, + SFX_WFYSH_DODGE_8, + SFX_WFYSH_DODGE_9, + SFX_WFYSH_DODGE_10, + SFX_WFYSH_DODGE_11, + SFX_WFYSH_GUN_COOL_1, + SFX_WFYSH_GUN_COOL_2, + SFX_WFYSH_GUN_COOL_3, + SFX_WFYSH_GUN_COOL_4, + SFX_WFYSH_GUN_COOL_5, + SFX_WFYSH_GUN_COOL_6, + SFX_WFYSH_GUN_COOL_7, + SFX_WFYSH_GUN_COOL_8, + SFX_WFYSH_GUN_COOL_9, + SFX_WFYSH_LOST_1, + SFX_WFYSH_LOST_2, + SFX_WFYSH_MUGGED_1, + SFX_WFYSH_MUGGED_2, + SFX_WFYSH_RUN_1, + SFX_WFYSH_RUN_2, + SFX_WFYSH_RUN_3, + SFX_WFYSH_RUN_4, + SFX_WFYSH_RUN_5, + SFX_WFYSH_RUN_6, + SFX_WFYSH_RUN_7, + SFX_WFYSH_RUN_8, + SFX_WFYSH_RUN_9, + SFX_WFYSH_RUN_10, + SFX_WFYSH_RUN_11, + SFX_WFYSH_SAVED_1, + SFX_WFYSH_SAVED_2, + SFX_WFYSH_SAVED_3, + SFX_WFYSH_SAVED_4, + SFX_WFYSH_SHOCKED_1, + SFX_WFYSH_SHOCKED_2, + SFX_WFYSH_SHOCKED_3, + SFX_WFYSH_SHOCKED_4, + SFX_WFYSH_SHOCKED_5, + SFX_WFYSH_TAXI_1, + SFX_WFYSH_TAXI_2, + + SFX_WMOTR_BUMP_1, + SFX_WMOTR_BUMP_2, + SFX_WMOTR_BUMP_3, + SFX_WMOTR_BUMP_4, + SFX_WMOTR_BUMP_5, + SFX_WMOTR_BUMP_6, + SFX_WMOTR_BUMP_7, + SFX_WMOTR_BUMP_8, + SFX_WMOTR_BUMP_9, + SFX_WMOTR_BUMP_10, + SFX_WMOTR_CHAT_1, + SFX_WMOTR_CHAT_2, + SFX_WMOTR_CHAT_3, + SFX_WMOTR_CHAT_4, + SFX_WMOTR_CHAT_5, + SFX_WMOTR_CHAT_6, + SFX_WMOTR_CHAT_7, + SFX_WMOTR_CHAT_8, + SFX_WMOTR_CHAT_9, + SFX_WMOTR_CHAT_10, + SFX_WMOTR_CHAT_11, + SFX_WMOTR_CHAT_12, + SFX_WMOTR_CHAT_13, + SFX_WMOTR_DODGE_1, + SFX_WMOTR_DODGE_2, + SFX_WMOTR_DODGE_3, + SFX_WMOTR_DODGE_4, + SFX_WMOTR_DODGE_5, + SFX_WMOTR_DODGE_6, + SFX_WMOTR_DODGE_7, + SFX_WMOTR_DODGE_8, + SFX_WMOTR_DODGE_9, + SFX_WMOTR_DODGE_10, + SFX_WMOTR_DODGE_11, + SFX_WMOTR_DODGE_12, + SFX_WMOTR_DODGE_13, + SFX_WMOTR_DODGE_14, + SFX_WMOTR_DODGE_15, + SFX_WMOTR_DODGE_16, + SFX_WMOTR_DODGE_17, + SFX_WMOTR_EYEING_1, + SFX_WMOTR_EYEING_2, + SFX_WMOTR_FIGHT_1, + SFX_WMOTR_FIGHT_2, + SFX_WMOTR_FIGHT_3, + SFX_WMOTR_FIGHT_4, + SFX_WMOTR_FIGHT_5, + SFX_WMOTR_FIGHT_6, + SFX_WMOTR_GUN_COOL_1, + SFX_WMOTR_GUN_COOL_2, + SFX_WMOTR_GUN_COOL_3, + SFX_WMOTR_GUN_COOL_4, + SFX_WMOTR_GUN_COOL_5, + SFX_WMOTR_SAVED_1, + SFX_WMOTR_SHOCKED_1, + SFX_WMOTR_SHOCKED_2, + SFX_WMOTR_SHOCKED_3, + SFX_WMOTR_SOLICIT_1, + SFX_WMOTR_SOLICIT_2, + SFX_WMOTR_SOLICIT_3, + SFX_WMOTR_SOLICIT_4, + SFX_WMOTR_SOLICIT_5, + SFX_WMOTR_SOLICIT_6, + SFX_WMOTR_SOLICIT_7, + SFX_WMOTR_TAXI_1, + + SFX_BMOBE_BUMP_1, + SFX_BMOBE_BUMP_2, + SFX_BMOBE_BUMP_3, + SFX_BMOBE_BUMP_4, + SFX_BMOBE_BUMP_5, + SFX_BMOBE_CAR_CRASH_1, + SFX_BMOBE_CAR_CRASH_2, + SFX_BMOBE_CAR_CRASH_3, + SFX_BMOBE_CAR_CRASH_4, + SFX_BMOBE_CAR_CRASH_5, + SFX_BMOBE_CAR_CRASH_6, + SFX_BMOBE_CAR_CRASH_7, + SFX_BMOBE_CAR_CRASH_8, + SFX_BMOBE_CAR_CRASH_9, + SFX_BMOBE_CHAT_1, + SFX_BMOBE_CHAT_2, + SFX_BMOBE_CHAT_3, + SFX_BMOBE_CHAT_4, + SFX_BMOBE_CHAT_5, + SFX_BMOBE_CHAT_6, + SFX_BMOBE_CHAT_7, + SFX_BMOBE_CHAT_8, + SFX_BMOBE_CHAT_9, + SFX_BMOBE_CHAT_10, + SFX_BMOBE_DODGE_1, + SFX_BMOBE_DODGE_2, + SFX_BMOBE_DODGE_3, + SFX_BMOBE_DODGE_4, + SFX_BMOBE_DODGE_5, + SFX_BMOBE_DODGE_6, + SFX_BMOBE_DODGE_7, + SFX_BMOBE_DODGE_8, + SFX_BMOBE_DODGE_9, + SFX_BMOBE_DODGE_10, + SFX_BMOBE_DODGE_11, + SFX_BMOBE_FIGHT_1, + SFX_BMOBE_FIGHT_2, + SFX_BMOBE_FIGHT_3, + SFX_BMOBE_FIGHT_4, + SFX_BMOBE_FIGHT_5, + SFX_BMOBE_FIGHT_6, + SFX_BMOBE_FIGHT_7, + SFX_BMOBE_FIGHT_8, + SFX_BMOBE_FIGHT_9, + SFX_BMOBE_FIGHT_10, + SFX_BMOBE_GENERIC_CRASH_1, + SFX_BMOBE_GENERIC_CRASH_2, + SFX_BMOBE_GENERIC_CRASH_3, + SFX_BMOBE_GENERIC_CRASH_4, + SFX_BMOBE_GENERIC_CRASH_5, + SFX_BMOBE_GENERIC_CRASH_6, + SFX_BMOBE_GENERIC_CRASH_7, + SFX_BMOBE_GUN_PANIC_1, + SFX_BMOBE_GUN_PANIC_2, + SFX_BMOBE_GUN_PANIC_3, + SFX_BMOBE_GUN_PANIC_4, + SFX_BMOBE_GUN_PANIC_5, + SFX_BMOBE_JACKED_1, + SFX_BMOBE_JACKED_2, + SFX_BMOBE_JACKED_3, + SFX_BMOBE_JACKED_4, + SFX_BMOBE_JACKED_5, + SFX_BMOBE_JACKED_6, + SFX_BMOBE_MUGGED_1, + SFX_BMOBE_MUGGED_2, + SFX_BMOBE_MUGGED_3, + SFX_BMOBE_MUGGED_4, + SFX_BMOBE_SAVED_1, + SFX_BMOBE_SAVED_2, + SFX_BMOBE_SAVED_3, + SFX_BMOBE_SHOCKED_1, + SFX_BMOBE_SHOCKED_2, + SFX_BMOBE_SHOCKED_3, + SFX_BMOBE_TAXI_1, + + SFX_WMYGO_BUMP_1, + SFX_WMYGO_BUMP_2, + SFX_WMYGO_BUMP_3, + SFX_WMYGO_BUMP_4, + SFX_WMYGO_BUMP_5, + SFX_WMYGO_BUMP_6, + SFX_WMYGO_BUMP_7, + SFX_WMYGO_BUMP_8, + SFX_WMYGO_BUMP_9, + SFX_WMYGO_CAR_CRASH_1, + SFX_WMYGO_CAR_CRASH_2, + SFX_WMYGO_CAR_CRASH_3, + SFX_WMYGO_CAR_CRASH_4, + SFX_WMYGO_CAR_CRASH_5, + SFX_WMYGO_CAR_CRASH_6, + SFX_WMYGO_CAR_CRASH_7, + SFX_WMYGO_CHAT_1, + SFX_WMYGO_CHAT_2, + SFX_WMYGO_CHAT_3, + SFX_WMYGO_CHAT_4, + SFX_WMYGO_CHAT_5, + SFX_WMYGO_CHAT_6, + SFX_WMYGO_CHAT_7, + SFX_WMYGO_CHAT_8, + SFX_WMYGO_CHAT_9, + SFX_WMYGO_CHAT_10, + SFX_WMYGO_DODGE_1, + SFX_WMYGO_DODGE_2, + SFX_WMYGO_DODGE_3, + SFX_WMYGO_DODGE_4, + SFX_WMYGO_DODGE_5, + SFX_WMYGO_DODGE_6, + SFX_WMYGO_DODGE_7, + SFX_WMYGO_DODGE_8, + SFX_WMYGO_DODGE_9, + SFX_WMYGO_DODGE_10, + SFX_WMYGO_DODGE_11, + SFX_WMYGO_EYEING_1, + SFX_WMYGO_EYEING_2, + SFX_WMYGO_GENERIC_CRASH_1, + SFX_WMYGO_GENERIC_CRASH_2, + SFX_WMYGO_GENERIC_CRASH_3, + SFX_WMYGO_GENERIC_CRASH_4, + SFX_WMYGO_GENERIC_CRASH_5, + SFX_WMYGO_GENERIC_CRASH_6, + SFX_WMYGO_GENERIC_CRASH_7, + SFX_WMYGO_GUN_PANIC_1, + SFX_WMYGO_GUN_PANIC_2, + SFX_WMYGO_GUN_PANIC_3, + SFX_WMYGO_GUN_PANIC_4, + SFX_WMYGO_GUN_PANIC_5, + SFX_WMYGO_JACKED_1, + SFX_WMYGO_JACKED_2, + SFX_WMYGO_JACKED_3, + SFX_WMYGO_JACKED_4, + SFX_WMYGO_JACKED_5, + SFX_WMYGO_JACKED_6, + SFX_WMYGO_MUGGED_1, + SFX_WMYGO_MUGGED_2, + SFX_WMYGO_RUN_1, + SFX_WMYGO_RUN_2, + SFX_WMYGO_RUN_3, + SFX_WMYGO_RUN_4, + SFX_WMYGO_RUN_5, + SFX_WMYGO_RUN_6, + SFX_WMYGO_SAVED_1, + SFX_WMYGO_SHOCKED_1, + SFX_WMYGO_SHOCKED_2, + SFX_WMYGO_TAXI_1, + SFX_WMYGO_TAXI_2, + SFX_WMYGO_TAXI_3, + + SFX_WFYBE_BLOCKED_1, + SFX_WFYBE_BLOCKED_2, + SFX_WFYBE_BLOCKED_3, + SFX_WFYBE_BLOCKED_4, + SFX_WFYBE_BLOCKED_5, + SFX_WFYBE_BLOCKED_6, + SFX_WFYBE_BLOCKED_7, + SFX_WFYBE_BUMP_1, + SFX_WFYBE_BUMP_2, + SFX_WFYBE_BUMP_3, + SFX_WFYBE_BUMP_4, + SFX_WFYBE_BUMP_5, + SFX_WFYBE_BUMP_6, + SFX_WFYBE_BUMP_7, + SFX_WFYBE_BUMP_8, + SFX_WFYBE_BUMP_9, + SFX_WFYBE_BUMP_10, + SFX_WFYBE_BUMP_11, + SFX_WFYBE_CAR_CRASH_1, + SFX_WFYBE_CAR_CRASH_2, + SFX_WFYBE_CAR_CRASH_3, + SFX_WFYBE_CAR_CRASH_4, + SFX_WFYBE_CAR_CRASH_5, + SFX_WFYBE_CAR_CRASH_6, + SFX_WFYBE_CHAT_1, + SFX_WFYBE_CHAT_2, + SFX_WFYBE_CHAT_3, + SFX_WFYBE_CHAT_4, + SFX_WFYBE_CHAT_5, + SFX_WFYBE_CHAT_6, + SFX_WFYBE_CHAT_7, + SFX_WFYBE_CHAT_8, + SFX_WFYBE_CHAT_9, + SFX_WFYBE_CHAT_10, + SFX_WFYBE_DODGE_1, + SFX_WFYBE_DODGE_2, + SFX_WFYBE_DODGE_3, + SFX_WFYBE_DODGE_4, + SFX_WFYBE_DODGE_5, + SFX_WFYBE_DODGE_6, + SFX_WFYBE_DODGE_7, + SFX_WFYBE_DODGE_8, + SFX_WFYBE_GENERIC_CRASH_1, + SFX_WFYBE_GENERIC_CRASH_2, + SFX_WFYBE_GENERIC_CRASH_3, + SFX_WFYBE_GENERIC_CRASH_4, + SFX_WFYBE_GENERIC_CRASH_5, + SFX_WFYBE_GENERIC_CRASH_6, + SFX_WFYBE_GUN_PANIC_1, + SFX_WFYBE_GUN_PANIC_2, + SFX_WFYBE_GUN_PANIC_3, + SFX_WFYBE_GUN_PANIC_4, + SFX_WFYBE_GUN_PANIC_5, + SFX_WFYBE_JACKED_1, + SFX_WFYBE_JACKED_2, + SFX_WFYBE_JACKED_3, + SFX_WFYBE_JACKED_4, + SFX_WFYBE_RUN_1, + SFX_WFYBE_RUN_2, + SFX_WFYBE_RUN_3, + SFX_WFYBE_RUN_4, + SFX_WFYBE_RUN_5, + SFX_WFYBE_SAVED_1, + SFX_WFYBE_SHOCKED_1, + SFX_WFYBE_SHOCKED_2, + SFX_WFYBE_SHOCKED_3, + SFX_WFYBE_TAXI_1, + + SFX_WFORI_BLOCKED_1, + SFX_WFORI_BLOCKED_2, + SFX_WFORI_BLOCKED_3, + SFX_WFORI_BLOCKED_4, + SFX_WFORI_BLOCKED_5, + SFX_WFORI_BLOCKED_6, + SFX_WFORI_BLOCKED_7, + SFX_WFORI_BUMP_1, + SFX_WFORI_BUMP_2, + SFX_WFORI_BUMP_3, + SFX_WFORI_BUMP_4, + SFX_WFORI_BUMP_5, + SFX_WFORI_BUMP_6, + SFX_WFORI_BUMP_7, + SFX_WFORI_BUMP_8, + SFX_WFORI_BUMP_9, + SFX_WFORI_BUMP_10, + SFX_WFORI_BUMP_11, + SFX_WFORI_CAR_CRASH_1, + SFX_WFORI_CAR_CRASH_2, + SFX_WFORI_CAR_CRASH_3, + SFX_WFORI_CAR_CRASH_4, + SFX_WFORI_CAR_CRASH_5, + SFX_WFORI_CAR_CRASH_6, + SFX_WFORI_CAR_CRASH_7, + SFX_WFORI_CAR_CRASH_8, + SFX_WFORI_CAR_CRASH_9, + SFX_WFORI_CAR_CRASH_10, + SFX_WFORI_DODGE_1, + SFX_WFORI_DODGE_2, + SFX_WFORI_DODGE_3, + SFX_WFORI_DODGE_4, + SFX_WFORI_DODGE_5, + SFX_WFORI_DODGE_6, + SFX_WFORI_DODGE_7, + SFX_WFORI_DODGE_8, + SFX_WFORI_DODGE_9, + SFX_WFORI_DODGE_10, + SFX_WFORI_DODGE_11, + SFX_WFORI_FIGHT_1, + SFX_WFORI_FIGHT_2, + SFX_WFORI_FIGHT_3, + SFX_WFORI_FIGHT_4, + SFX_WFORI_FIGHT_5, + SFX_WFORI_FIGHT_6, + SFX_WFORI_FIGHT_7, + SFX_WFORI_GENERIC_CRASH_1, + SFX_WFORI_GENERIC_CRASH_2, + SFX_WFORI_GENERIC_CRASH_3, + SFX_WFORI_GENERIC_CRASH_4, + SFX_WFORI_GENERIC_CRASH_5, + SFX_WFORI_GENERIC_CRASH_6, + SFX_WFORI_GENERIC_CRASH_7, + SFX_WFORI_GENERIC_CRASH_8, + SFX_WFORI_GUN_PANIC_1, + SFX_WFORI_GUN_PANIC_2, + SFX_WFORI_GUN_PANIC_3, + SFX_WFORI_GUN_PANIC_4, + SFX_WFORI_GUN_PANIC_5, + SFX_WFORI_GUN_PANIC_6, + SFX_WFORI_JACKED_1, + SFX_WFORI_JACKED_2, + SFX_WFORI_JACKED_3, + SFX_WFORI_JACKED_4, + SFX_WFORI_JACKED_5, + SFX_WFORI_JACKED_6, + SFX_WFORI_LOST_1, + SFX_WFORI_LOST_2, + SFX_WFORI_MUGGED_1, + SFX_WFORI_MUGGED_2, + SFX_WFORI_MUGGED_3, + SFX_WFORI_SAVED_1, + SFX_WFORI_SHOCKED_1, + SFX_WFORI_SHOCKED_2, + SFX_WFORI_SHOCKED_3, + SFX_WFORI_TAXI_1, + + SFX_WFOGO_BUMP_1, + SFX_WFOGO_BUMP_2, + SFX_WFOGO_BUMP_3, + SFX_WFOGO_BUMP_4, + SFX_WFOGO_BUMP_5, + SFX_WFOGO_BUMP_6, + SFX_WFOGO_BUMP_7, + SFX_WFOGO_BUMP_8, + SFX_WFOGO_CAR_CRASH_1, + SFX_WFOGO_CAR_CRASH_2, + SFX_WFOGO_CAR_CRASH_3, + SFX_WFOGO_CAR_CRASH_4, + SFX_WFOGO_CAR_CRASH_5, + SFX_WFOGO_CAR_CRASH_6, + SFX_WFOGO_CAR_CRASH_7, + SFX_WFOGO_CAR_CRASH_8, + SFX_WFOGO_CHAT_1, + SFX_WFOGO_CHAT_2, + SFX_WFOGO_CHAT_3, + SFX_WFOGO_CHAT_4, + SFX_WFOGO_CHAT_5, + SFX_WFOGO_CHAT_6, + SFX_WFOGO_CHAT_7, + SFX_WFOGO_CHAT_8, + SFX_WFOGO_CHAT_9, + SFX_WFOGO_CHAT_10, + SFX_WFOGO_CHAT_11, + SFX_WFOGO_DODGE_1, + SFX_WFOGO_DODGE_2, + SFX_WFOGO_DODGE_3, + SFX_WFOGO_DODGE_4, + SFX_WFOGO_DODGE_5, + SFX_WFOGO_DODGE_6, + SFX_WFOGO_DODGE_7, + SFX_WFOGO_DODGE_8, + SFX_WFOGO_DODGE_9, + SFX_WFOGO_FIGHT_1, + SFX_WFOGO_FIGHT_2, + SFX_WFOGO_FIGHT_3, + SFX_WFOGO_FIGHT_4, + SFX_WFOGO_FIGHT_5, + SFX_WFOGO_FIGHT_6, + SFX_WFOGO_FIGHT_7, + SFX_WFOGO_FIGHT_8, + SFX_WFOGO_FIGHT_9, + SFX_WFOGO_FIGHT_10, + SFX_WFOGO_FIGHT_11, + SFX_WFOGO_FIGHT_12, + SFX_WFOGO_FIGHT_13, + SFX_WFOGO_FIGHT_14, + SFX_WFOGO_GENERIC_CRASH_1, + SFX_WFOGO_GENERIC_CRASH_2, + SFX_WFOGO_GENERIC_CRASH_3, + SFX_WFOGO_GENERIC_CRASH_4, + SFX_WFOGO_GENERIC_CRASH_5, + SFX_WFOGO_GENERIC_CRASH_6, + SFX_WFOGO_GENERIC_CRASH_7, + SFX_WFOGO_GUN_PANIC_1, + SFX_WFOGO_GUN_PANIC_2, + SFX_WFOGO_GUN_PANIC_3, + SFX_WFOGO_GUN_PANIC_4, + SFX_WFOGO_GUN_PANIC_5, + SFX_WFOGO_JACKED_1, + SFX_WFOGO_JACKED_2, + SFX_WFOGO_JACKED_3, + SFX_WFOGO_JACKED_4, + SFX_WFOGO_JACKED_5, + SFX_WFOGO_JACKED_6, + SFX_WFOGO_MUGGED_1, + SFX_WFOGO_MUGGED_2, + SFX_WFOGO_RUN_1, + SFX_WFOGO_RUN_2, + SFX_WFOGO_SAVED_1, + SFX_WFOGO_SHOCKED_1, + SFX_WFOGO_SHOCKED_2, + + SFX_HMYST_BUMP_1, + SFX_HMYST_BUMP_2, + SFX_HMYST_BUMP_3, + SFX_HMYST_BUMP_4, + SFX_HMYST_BUMP_5, + SFX_HMYST_BUMP_6, + SFX_HMYST_BUMP_7, + SFX_HMYST_BUMP_8, + SFX_HMYST_BUMP_9, + SFX_HMYST_BUMP_10, + SFX_HMYST_BUMP_11, + SFX_HMYST_BUMP_12, + SFX_HMYST_BUMP_13, + SFX_HMYST_CHAT_1, + SFX_HMYST_CHAT_2, + SFX_HMYST_CHAT_3, + SFX_HMYST_CHAT_4, + SFX_HMYST_CHAT_5, + SFX_HMYST_CHAT_6, + SFX_HMYST_CHAT_7, + SFX_HMYST_CHAT_8, + SFX_HMYST_CHAT_9, + SFX_HMYST_CHAT_10, + SFX_HMYST_CHAT_11, + SFX_HMYST_DODGE_1, + SFX_HMYST_DODGE_2, + SFX_HMYST_DODGE_3, + SFX_HMYST_DODGE_4, + SFX_HMYST_DODGE_5, + SFX_HMYST_DODGE_6, + SFX_HMYST_EYEING_1, + SFX_HMYST_EYEING_2, + SFX_HMYST_GENERIC_CRASH_1, + SFX_HMYST_GENERIC_CRASH_2, + SFX_HMYST_GENERIC_CRASH_3, + SFX_HMYST_GENERIC_CRASH_4, + SFX_HMYST_GENERIC_CRASH_5, + SFX_HMYST_GENERIC_CRASH_6, + SFX_HMYST_GENERIC_CRASH_7, + SFX_HMYST_GUN_PANIC_1, + SFX_HMYST_GUN_PANIC_2, + SFX_HMYST_GUN_PANIC_3, + SFX_HMYST_GUN_PANIC_4, + SFX_HMYST_GUN_PANIC_5, + SFX_HMYST_GUN_PANIC_6, + SFX_HMYST_RUN_1, + SFX_HMYST_RUN_2, + SFX_HMYST_RUN_3, + SFX_HMYST_RUN_4, + SFX_HMYST_SAVED_1, + SFX_HMYST_SHOCKED_1, + SFX_HMYST_SHOCKED_2, + SFX_HMYST_TAXI_1, + + SFX_WMOCA_BLOCKED_1, + SFX_WMOCA_BLOCKED_2, + SFX_WMOCA_BLOCKED_3, + SFX_WMOCA_BLOCKED_4, + SFX_WMOCA_BLOCKED_5, + SFX_WMOCA_BLOCKED_6, + SFX_WMOCA_BLOCKED_7, + SFX_WMOCA_BLOCKED_8, + SFX_WMOCA_BLOCKED_9, + SFX_WMOCA_BLOCKED_10, + SFX_WMOCA_BLOCKED_11, + SFX_WMOCA_BLOCKED_12, + SFX_WMOCA_BUMP_1, + SFX_WMOCA_BUMP_2, + SFX_WMOCA_BUMP_3, + SFX_WMOCA_BUMP_4, + SFX_WMOCA_BUMP_5, + SFX_WMOCA_BUMP_6, + SFX_WMOCA_CAR_CRASH_1, + SFX_WMOCA_CAR_CRASH_2, + SFX_WMOCA_CAR_CRASH_3, + SFX_WMOCA_CAR_CRASH_4, + SFX_WMOCA_CAR_CRASH_5, + SFX_WMOCA_CAR_CRASH_6, + SFX_WMOCA_CAR_CRASH_7, + SFX_WMOCA_CAR_CRASH_8, + SFX_WMOCA_CAR_CRASH_9, + SFX_WMOCA_CAR_CRASH_10, + SFX_WMOCA_DODGE_1, + SFX_WMOCA_DODGE_2, + SFX_WMOCA_DODGE_3, + SFX_WMOCA_DODGE_4, + SFX_WMOCA_DODGE_5, + SFX_WMOCA_DODGE_6, + SFX_WMOCA_DODGE_7, + SFX_WMOCA_DODGE_8, + SFX_WMOCA_DODGE_9, + SFX_WMOCA_DODGE_10, + SFX_WMOCA_EYEING_1, + SFX_WMOCA_EYEING_2, + SFX_WMOCA_FIGHT_1, + SFX_WMOCA_FIGHT_2, + SFX_WMOCA_FIGHT_3, + SFX_WMOCA_FIGHT_4, + SFX_WMOCA_FIGHT_5, + SFX_WMOCA_FIGHT_6, + SFX_WMOCA_FIGHT_7, + SFX_WMOCA_FIGHT_8, + SFX_WMOCA_GENERIC_CRASH_1, + SFX_WMOCA_GENERIC_CRASH_2, + SFX_WMOCA_GENERIC_CRASH_3, + SFX_WMOCA_GENERIC_CRASH_4, + SFX_WMOCA_GENERIC_CRASH_5, + SFX_WMOCA_GENERIC_CRASH_6, + SFX_WMOCA_GENERIC_CRASH_7, + SFX_WMOCA_GENERIC_CRASH_8, + SFX_WMOCA_GENERIC_CRASH_9, + SFX_WMOCA_GUN_PANIC_1, + SFX_WMOCA_GUN_PANIC_2, + SFX_WMOCA_GUN_PANIC_3, + SFX_WMOCA_GUN_PANIC_4, + SFX_WMOCA_GUN_PANIC_5, + SFX_WMOCA_GUN_PANIC_6, + SFX_WMOCA_JACKED_1, + SFX_WMOCA_JACKED_2, + SFX_WMOCA_JACKED_3, + SFX_WMOCA_JACKED_4, + SFX_WMOCA_JACKED_5, + SFX_WMOCA_JACKED_6, + SFX_WMOCA_JACKED_7, + SFX_WMOCA_JACKED_8, + SFX_WMOCA_JACKED_9, + SFX_WMOCA_JACKED_10, + SFX_WMOCA_JACKING_1, + SFX_WMOCA_JACKING_2, + SFX_WMOCA_JACKING_3, + SFX_WMOCA_JACKING_4, + SFX_WMOCA_JACKING_5, + SFX_WMOCA_JACKING_6, + SFX_WMOCA_JACKING_7, + SFX_WMOCA_JACKING_8, + SFX_WMOCA_JACKING_9, + SFX_WMOCA_JACKING_10, + SFX_WMOCA_JACKING_11, + SFX_WMOCA_MUGGED_1, + SFX_WMOCA_MUGGED_2, + SFX_WMOCA_SAVED_1, + SFX_WMOCA_TAXI_1, + + SFX_WMYBE_BLOCKED_1, + SFX_WMYBE_BLOCKED_2, + SFX_WMYBE_BLOCKED_3, + SFX_WMYBE_BLOCKED_4, + SFX_WMYBE_BLOCKED_5, + SFX_WMYBE_BLOCKED_6, + SFX_WMYBE_BLOCKED_7, + SFX_WMYBE_BLOCKED_8, + SFX_WMYBE_BLOCKED_9, + SFX_WMYBE_BUMP_1, + SFX_WMYBE_BUMP_2, + SFX_WMYBE_BUMP_3, + SFX_WMYBE_BUMP_4, + SFX_WMYBE_BUMP_5, + SFX_WMYBE_BUMP_6, + SFX_WMYBE_BUMP_7, + SFX_WMYBE_BUMP_8, + SFX_WMYBE_BUMP_9, + SFX_WMYBE_BUMP_10, + SFX_WMYBE_BUMP_11, + SFX_WMYBE_BUMP_12, + SFX_WMYBE_BUMP_13, + SFX_WMYBE_BUMP_14, + SFX_WMYBE_CAR_CRASH_1, + SFX_WMYBE_CAR_CRASH_2, + SFX_WMYBE_CAR_CRASH_3, + SFX_WMYBE_CAR_CRASH_4, + SFX_WMYBE_CAR_CRASH_5, + SFX_WMYBE_CAR_CRASH_6, + SFX_WMYBE_CAR_CRASH_7, + SFX_WMYBE_CAR_CRASH_8, + SFX_WMYBE_CHAT_1, + SFX_WMYBE_CHAT_2, + SFX_WMYBE_CHAT_3, + SFX_WMYBE_CHAT_4, + SFX_WMYBE_CHAT_5, + SFX_WMYBE_CHAT_6, + SFX_WMYBE_CHAT_7, + SFX_WMYBE_CHAT_8, + SFX_WMYBE_CHAT_9, + SFX_WMYBE_CHAT_10, + SFX_WMYBE_CHAT_11, + SFX_WMYBE_DODGE_1, + SFX_WMYBE_DODGE_2, + SFX_WMYBE_DODGE_3, + SFX_WMYBE_DODGE_4, + SFX_WMYBE_DODGE_5, + SFX_WMYBE_DODGE_6, + SFX_WMYBE_DODGE_7, + SFX_WMYBE_DODGE_8, + SFX_WMYBE_DODGE_9, + SFX_WMYBE_DODGE_10, + SFX_WMYBE_DODGE_11, + SFX_WMYBE_DODGE_12, + SFX_WMYBE_EYEING_1, + SFX_WMYBE_EYEING_2, + SFX_WMYBE_GENERIC_CRASH_1, + SFX_WMYBE_GENERIC_CRASH_2, + SFX_WMYBE_GENERIC_CRASH_3, + SFX_WMYBE_GENERIC_CRASH_4, + SFX_WMYBE_GENERIC_CRASH_5, + SFX_WMYBE_GENERIC_CRASH_6, + SFX_WMYBE_GENERIC_CRASH_7, + SFX_WMYBE_GENERIC_CRASH_8, + SFX_WMYBE_GUN_PANIC_1, + SFX_WMYBE_GUN_PANIC_2, + SFX_WMYBE_GUN_PANIC_3, + SFX_WMYBE_GUN_PANIC_4, + SFX_WMYBE_GUN_PANIC_5, + SFX_WMYBE_GUN_PANIC_6, + SFX_WMYBE_GUN_PANIC_7, + SFX_WMYBE_GUN_PANIC_8, + SFX_WMYBE_JACKED_1, + SFX_WMYBE_JACKED_2, + SFX_WMYBE_JACKED_3, + SFX_WMYBE_JACKED_4, + SFX_WMYBE_JACKED_5, + SFX_WMYBE_JACKED_6, + SFX_WMYBE_JACKED_7, + SFX_WMYBE_JACKING_1, + SFX_WMYBE_JACKING_2, + SFX_WMYBE_JACKING_3, + SFX_WMYBE_JEER_1, + SFX_WMYBE_JEER_2, + SFX_WMYBE_JEER_3, + SFX_WMYBE_JEER_4, + SFX_WMYBE_JEER_5, + SFX_WMYBE_JEER_6, + SFX_WMYBE_JEER_7, + SFX_WMYBE_LOST_1, + SFX_WMYBE_LOST_2, + SFX_WMYBE_LOST_3, + SFX_WMYBE_RUN_1, + SFX_WMYBE_RUN_2, + SFX_WMYBE_RUN_3, + SFX_WMYBE_RUN_4, + SFX_WMYBE_RUN_5, + SFX_WMYBE_SHOCKED_1, + SFX_WMYBE_SHOCKED_2, + SFX_WMYBE_SHOCKED_3, + SFX_WMYBE_SHOCKED_4, + SFX_WMYBE_SHOCKED_5, + SFX_WMYBE_SHOCKED_6, + + SFX_BFOBE_BLOCKED_1, + SFX_BFOBE_BLOCKED_2, + SFX_BFOBE_BLOCKED_3, + SFX_BFOBE_BLOCKED_4, + SFX_BFOBE_BLOCKED_5, + SFX_BFOBE_BLOCKED_6, + SFX_BFOBE_BLOCKED_7, + SFX_BFOBE_BLOCKED_8, + SFX_BFOBE_BUMP_1, + SFX_BFOBE_BUMP_2, + SFX_BFOBE_BUMP_3, + SFX_BFOBE_BUMP_4, + SFX_BFOBE_BUMP_5, + SFX_BFOBE_BUMP_6, + SFX_BFOBE_BUMP_7, + SFX_BFOBE_BUMP_8, + SFX_BFOBE_CAR_CRASH_1, + SFX_BFOBE_CAR_CRASH_2, + SFX_BFOBE_CAR_CRASH_3, + SFX_BFOBE_CAR_CRASH_4, + SFX_BFOBE_CAR_CRASH_5, + SFX_BFOBE_CAR_CRASH_6, + SFX_BFOBE_CAR_CRASH_7, + SFX_BFOBE_CHAT_1, + SFX_BFOBE_CHAT_2, + SFX_BFOBE_CHAT_3, + SFX_BFOBE_CHAT_4, + SFX_BFOBE_CHAT_5, + SFX_BFOBE_CHAT_6, + SFX_BFOBE_CHAT_7, + SFX_BFOBE_CHAT_8, + SFX_BFOBE_DODGE_1, + SFX_BFOBE_DODGE_2, + SFX_BFOBE_DODGE_3, + SFX_BFOBE_DODGE_4, + SFX_BFOBE_DODGE_5, + SFX_BFOBE_DODGE_6, + SFX_BFOBE_DODGE_7, + SFX_BFOBE_DODGE_8, + SFX_BFOBE_DODGE_9, + SFX_BFOBE_GENERIC_CRASH_1, + SFX_BFOBE_GENERIC_CRASH_2, + SFX_BFOBE_GENERIC_CRASH_3, + SFX_BFOBE_GENERIC_CRASH_4, + SFX_BFOBE_GENERIC_CRASH_5, + SFX_BFOBE_GENERIC_CRASH_6, + SFX_BFOBE_GENERIC_CRASH_7, + SFX_BFOBE_GUN_PANIC_1, + SFX_BFOBE_GUN_PANIC_2, + SFX_BFOBE_GUN_PANIC_3, + SFX_BFOBE_GUN_PANIC_4, + SFX_BFOBE_GUN_PANIC_5, + SFX_BFOBE_JACKED_1, + SFX_BFOBE_JACKED_2, + SFX_BFOBE_JACKED_3, + SFX_BFOBE_JACKED_4, + SFX_BFOBE_JACKED_5, + SFX_BFOBE_JACKING_1, + SFX_BFOBE_JACKING_2, + SFX_BFOBE_JACKING_3, + SFX_BFOBE_JACKING_4, + SFX_BFOBE_MUGGED_1, + SFX_BFOBE_MUGGED_2, + SFX_BFOBE_SHOCKED_1, + SFX_BFOBE_SHOCKED_2, + SFX_BFOBE_TAXI_1, + + SFX_WFYLG_BUMP_1, + SFX_WFYLG_BUMP_2, + SFX_WFYLG_BUMP_3, + SFX_WFYLG_BUMP_4, + SFX_WFYLG_BUMP_5, + SFX_WFYLG_BUMP_6, + SFX_WFYLG_BUMP_7, + SFX_WFYLG_BUMP_8, + SFX_WFYLG_BUMP_9, + SFX_WFYLG_BUMP_10, + SFX_WFYLG_CHAT_1, + SFX_WFYLG_CHAT_2, + SFX_WFYLG_CHAT_3, + SFX_WFYLG_CHAT_4, + SFX_WFYLG_CHAT_5, + SFX_WFYLG_CHAT_6, + SFX_WFYLG_CHAT_7, + SFX_WFYLG_CHAT_8, + SFX_WFYLG_CHAT_9, + SFX_WFYLG_CHAT_10, + SFX_WFYLG_DODGE_1, + SFX_WFYLG_DODGE_2, + SFX_WFYLG_DODGE_3, + SFX_WFYLG_DODGE_4, + SFX_WFYLG_DODGE_5, + SFX_WFYLG_DODGE_6, + SFX_WFYLG_DODGE_7, + SFX_WFYLG_DODGE_8, + SFX_WFYLG_FIGHT_1, + SFX_WFYLG_FIGHT_2, + SFX_WFYLG_FIGHT_3, + SFX_WFYLG_FIGHT_4, + SFX_WFYLG_FIGHT_5, + SFX_WFYLG_FIGHT_6, + SFX_WFYLG_FIGHT_7, + SFX_WFYLG_GUN_COOL_1, + SFX_WFYLG_GUN_COOL_2, + SFX_WFYLG_GUN_COOL_3, + SFX_WFYLG_GUN_COOL_4, + SFX_WFYLG_GUN_COOL_5, + SFX_WFYLG_SAVED_1, + SFX_WFYLG_TAXI_1, + + SFX_WFOST_BLOCKED_1, + SFX_WFOST_BLOCKED_2, + SFX_WFOST_BLOCKED_3, + SFX_WFOST_BLOCKED_4, + SFX_WFOST_BLOCKED_5, + SFX_WFOST_BLOCKED_6, + SFX_WFOST_BLOCKED_7, + SFX_WFOST_BLOCKED_8, + SFX_WFOST_BLOCKED_9, + SFX_WFOST_BLOCKED_10, + SFX_WFOST_BLOCKED_11, + SFX_WFOST_BLOCKED_12, + SFX_WFOST_BUMP_1, + SFX_WFOST_BUMP_2, + SFX_WFOST_BUMP_3, + SFX_WFOST_BUMP_4, + SFX_WFOST_BUMP_5, + SFX_WFOST_BUMP_6, + SFX_WFOST_BUMP_7, + SFX_WFOST_BUMP_8, + SFX_WFOST_BUMP_9, + SFX_WFOST_BUMP_10, + SFX_WFOST_BUMP_11, + SFX_WFOST_BUMP_12, + SFX_WFOST_BUMP_13, + SFX_WFOST_BUMP_14, + SFX_WFOST_BUMP_15, + SFX_WFOST_BUMP_16, + SFX_WFOST_BUMP_17, + SFX_WFOST_BUMP_18, + SFX_WFOST_BUMP_19, + SFX_WFOST_CAR_CRASH_1, + SFX_WFOST_CAR_CRASH_2, + SFX_WFOST_CAR_CRASH_3, + SFX_WFOST_CAR_CRASH_4, + SFX_WFOST_CAR_CRASH_5, + SFX_WFOST_CAR_CRASH_6, + SFX_WFOST_CAR_CRASH_7, + SFX_WFOST_CAR_CRASH_8, + SFX_WFOST_CAR_CRASH_9, + SFX_WFOST_CAR_CRASH_10, + SFX_WFOST_CAR_CRASH_11, + SFX_WFOST_CHAT_1, + SFX_WFOST_CHAT_2, + SFX_WFOST_CHAT_3, + SFX_WFOST_CHAT_4, + SFX_WFOST_CHAT_5, + SFX_WFOST_CHAT_6, + SFX_WFOST_CHAT_7, + SFX_WFOST_CHAT_8, + SFX_WFOST_CHAT_9, + SFX_WFOST_CHAT_10, + SFX_WFOST_CHAT_11, + SFX_WFOST_CHAT_12, + SFX_WFOST_CHAT_13, + SFX_WFOST_CHAT_14, + SFX_WFOST_CHAT_15, + SFX_WFOST_CHAT_16, + SFX_WFOST_DODGE_1, + SFX_WFOST_DODGE_2, + SFX_WFOST_DODGE_3, + SFX_WFOST_DODGE_4, + SFX_WFOST_DODGE_5, + SFX_WFOST_DODGE_6, + SFX_WFOST_DODGE_7, + SFX_WFOST_DODGE_8, + SFX_WFOST_DODGE_9, + SFX_WFOST_DODGE_10, + SFX_WFOST_DODGE_11, + SFX_WFOST_DODGE_12, + SFX_WFOST_GENERIC_CRASH_1, + SFX_WFOST_GENERIC_CRASH_2, + SFX_WFOST_GENERIC_CRASH_3, + SFX_WFOST_GENERIC_CRASH_4, + SFX_WFOST_GENERIC_CRASH_5, + SFX_WFOST_GENERIC_CRASH_6, + SFX_WFOST_GENERIC_CRASH_7, + SFX_WFOST_GENERIC_CRASH_8, + SFX_WFOST_GENERIC_CRASH_9, + SFX_WFOST_GENERIC_CRASH_10, + SFX_WFOST_GUN_PANIC_1, + SFX_WFOST_GUN_PANIC_2, + SFX_WFOST_GUN_PANIC_3, + SFX_WFOST_GUN_PANIC_4, + SFX_WFOST_JACKED_1, + SFX_WFOST_JACKED_2, + SFX_WFOST_JACKED_3, + SFX_WFOST_JACKED_4, + SFX_WFOST_JACKED_5, + SFX_WFOST_JACKED_6, + SFX_WFOST_JACKED_7, + SFX_WFOST_JACKED_8, + SFX_WFOST_LOST_1, + SFX_WFOST_LOST_2, + SFX_WFOST_LOST_3, + SFX_WFOST_MUGGED_1, + SFX_WFOST_MUGGED_2, + SFX_WFOST_MUGGED_3, + SFX_WFOST_MUGGED_4, + SFX_WFOST_MUGGED_5, + SFX_WFOST_RUN_1, + SFX_WFOST_RUN_2, + SFX_WFOST_RUN_3, + SFX_WFOST_RUN_4, + SFX_WFOST_RUN_5, + SFX_WFOST_RUN_6, + SFX_WFOST_RUN_7, + SFX_WFOST_SAVED_1, + SFX_WFOST_SAVED_2, + SFX_WFOST_SAVED_3, + SFX_WFOST_SAVED_4, + SFX_WFOST_TAXI_1, + + SFX_WFYST_BLOCKED_1, + SFX_WFYST_BLOCKED_2, + SFX_WFYST_BLOCKED_3, + SFX_WFYST_BLOCKED_4, + SFX_WFYST_BLOCKED_5, + SFX_WFYST_BLOCKED_6, + SFX_WFYST_BUMP_1, + SFX_WFYST_BUMP_2, + SFX_WFYST_BUMP_3, + SFX_WFYST_BUMP_4, + SFX_WFYST_BUMP_5, + SFX_WFYST_BUMP_6, + SFX_WFYST_BUMP_7, + SFX_WFYST_BUMP_8, + SFX_WFYST_BUMP_9, + SFX_WFYST_BUMP_10, + SFX_WFYST_CAR_CRASH_1, + SFX_WFYST_CAR_CRASH_2, + SFX_WFYST_CAR_CRASH_3, + SFX_WFYST_CAR_CRASH_4, + SFX_WFYST_CAR_CRASH_5, + SFX_WFYST_CAR_CRASH_6, + SFX_WFYST_CAR_CRASH_7, + SFX_WFYST_CAR_CRASH_8, + SFX_WFYST_CHAT_1, + SFX_WFYST_CHAT_2, + SFX_WFYST_CHAT_3, + SFX_WFYST_CHAT_4, + SFX_WFYST_CHAT_5, + SFX_WFYST_CHAT_6, + SFX_WFYST_CHAT_7, + SFX_WFYST_CHAT_8, + SFX_WFYST_CHAT_9, + SFX_WFYST_CHAT_10, + SFX_WFYST_DODGE_1, + SFX_WFYST_DODGE_2, + SFX_WFYST_DODGE_3, + SFX_WFYST_DODGE_4, + SFX_WFYST_DODGE_5, + SFX_WFYST_DODGE_6, + SFX_WFYST_DODGE_7, + SFX_WFYST_DODGE_8, + SFX_WFYST_DODGE_9, + SFX_WFYST_DODGE_10, + SFX_WFYST_FIGHT_1, + SFX_WFYST_FIGHT_2, + SFX_WFYST_FIGHT_3, + SFX_WFYST_FIGHT_4, + SFX_WFYST_FIGHT_5, + SFX_WFYST_FIGHT_6, + SFX_WFYST_FIGHT_7, + SFX_WFYST_GENERIC_CRASH_1, + SFX_WFYST_GENERIC_CRASH_2, + SFX_WFYST_GENERIC_CRASH_3, + SFX_WFYST_GENERIC_CRASH_4, + SFX_WFYST_GENERIC_CRASH_5, + SFX_WFYST_GENERIC_CRASH_6, + SFX_WFYST_GENERIC_CRASH_7, + SFX_WFYST_GENERIC_CRASH_8, + SFX_WFYST_GUN_COOL_1, + SFX_WFYST_GUN_COOL_2, + SFX_WFYST_GUN_COOL_3, + SFX_WFYST_GUN_COOL_4, + SFX_WFYST_GUN_COOL_5, + SFX_WFYST_JACKED_1, + SFX_WFYST_JACKED_2, + SFX_WFYST_JACKED_3, + SFX_WFYST_JACKED_4, + SFX_WFYST_JACKED_5, + SFX_WFYST_JACKED_6, + SFX_WFYST_JACKING_1, + SFX_WFYST_JACKING_2, + SFX_WFYST_JACKING_3, + SFX_WFYST_JACKING_4, + SFX_WFYST_LOST_1, + SFX_WFYST_MUGGED_1, + SFX_WFYST_MUGGED_2, + SFX_WFYST_MUGGING_1, + SFX_WFYST_MUGGING_2, + SFX_WFYST_MUGGING_3, + SFX_WFYST_MUGGING_4, + SFX_WFYST_SAVED_1, + SFX_WFYST_TAXI_1, + + SFX_COP_VOICE_1_ARREST_1, + SFX_COP_VOICE_1_ARREST_2, + SFX_COP_VOICE_1_ARREST_3, + SFX_COP_VOICE_1_ARREST_4, + SFX_COP_VOICE_1_PULLOUTWEAPON_1, + SFX_COP_VOICE_1_PULLOUTWEAPON_2, + SFX_COP_VOICE_1_PULLOUTWEAPON_3, + SFX_COP_VOICE_1_BUMP_1, + SFX_COP_VOICE_1_BUMP_2, + SFX_COP_VOICE_1_BUMP_3, + SFX_COP_VOICE_1_BUMP_4, + SFX_COP_VOICE_1_BUMP_5, + SFX_COP_VOICE_1_COP_LITTLECOPSAROUND_1, + SFX_COP_VOICE_1_COP_LITTLECOPSAROUND_2, + SFX_COP_VOICE_1_COP_LITTLECOPSAROUND_3, + SFX_COP_VOICE_1_COP_LITTLECOPSAROUND_4, + SFX_COP_VOICE_1_GUNAIMEDAT3_1, + SFX_COP_VOICE_1_GUNAIMEDAT3_2, + SFX_COP_VOICE_1_CAR_CRASH_1, + SFX_COP_VOICE_1_CAR_CRASH_2, + SFX_COP_VOICE_1_CAR_CRASH_3, + SFX_COP_VOICE_1_CAR_CRASH_4, + SFX_COP_VOICE_1_DODGE_1, + SFX_COP_VOICE_1_DODGE_2, + SFX_COP_VOICE_1_DODGE_3, + SFX_COP_VOICE_1_FIGHT_1, + SFX_COP_VOICE_1_FIGHT_2, + SFX_COP_VOICE_1_FIGHT_3, + SFX_COP_VOICE_1_FIGHT_4, + SFX_COP_VOICE_1_GUNAIMEDAT2_1, + SFX_COP_VOICE_1_GUNAIMEDAT2_2, + SFX_COP_VOICE_1_SAVED_1, + SFX_COP_VOICE_1_SAVED_2, + SFX_COP_VOICE_1_COP_ASK_FOR_ID_1, + SFX_COP_VOICE_1_COP_ASK_FOR_ID_2, + SFX_COP_VOICE_1_COP_ALONE_1, + SFX_COP_VOICE_1_COP_ALONE_2, + SFX_COP_VOICE_1_COP_ALONE_3, + SFX_COP_VOICE_1_COP_ALONE_4, + SFX_COP_VOICE_1_COP_MANYCOPSAROUND_1, + SFX_COP_VOICE_1_COP_MANYCOPSAROUND_2, + SFX_COP_VOICE_1_COP_TARGETING_1, + SFX_COP_VOICE_1_COP_TARGETING_2, + SFX_COP_VOICE_1_COP_TARGETING_3, + SFX_COP_VOICE_1_COP_TARGETING_4, + + SFX_COP_VOICE_2_ARREST_1, + SFX_COP_VOICE_2_ARREST_2, + SFX_COP_VOICE_2_ARREST_3, + SFX_COP_VOICE_2_ARREST_4, + SFX_COP_VOICE_2_PULLOUTWEAPON_1, + SFX_COP_VOICE_2_PULLOUTWEAPON_2, + SFX_COP_VOICE_2_PULLOUTWEAPON_3, + SFX_COP_VOICE_2_BUMP_1, + SFX_COP_VOICE_2_BUMP_2, + SFX_COP_VOICE_2_BUMP_3, + SFX_COP_VOICE_2_BUMP_4, + SFX_COP_VOICE_2_BUMP_5, + SFX_COP_VOICE_2_COP_LITTLECOPSAROUND_1, + SFX_COP_VOICE_2_COP_LITTLECOPSAROUND_2, + SFX_COP_VOICE_2_COP_LITTLECOPSAROUND_3, + SFX_COP_VOICE_2_COP_LITTLECOPSAROUND_4, + SFX_COP_VOICE_2_GUNAIMEDAT3_1, + SFX_COP_VOICE_2_GUNAIMEDAT3_2, + SFX_COP_VOICE_2_CAR_CRASH_1, + SFX_COP_VOICE_2_CAR_CRASH_2, + SFX_COP_VOICE_2_CAR_CRASH_3, + SFX_COP_VOICE_2_CAR_CRASH_4, + SFX_COP_VOICE_2_DODGE_1, + SFX_COP_VOICE_2_DODGE_2, + SFX_COP_VOICE_2_DODGE_3, + SFX_COP_VOICE_2_FIGHT_1, + SFX_COP_VOICE_2_FIGHT_2, + SFX_COP_VOICE_2_FIGHT_3, + SFX_COP_VOICE_2_FIGHT_4, + SFX_COP_VOICE_2_GUNAIMEDAT2_1, + SFX_COP_VOICE_2_GUNAIMEDAT2_2, + SFX_COP_VOICE_2_SAVED_1, + SFX_COP_VOICE_2_SAVED_2, + SFX_COP_VOICE_2_COP_ASK_FOR_ID_1, + SFX_COP_VOICE_2_COP_ASK_FOR_ID_2, + SFX_COP_VOICE_2_COP_ALONE_1, + SFX_COP_VOICE_2_COP_ALONE_2, + SFX_COP_VOICE_2_COP_ALONE_3, + SFX_COP_VOICE_2_COP_ALONE_4, + SFX_COP_VOICE_2_COP_MANYCOPSAROUND_1, + SFX_COP_VOICE_2_COP_MANYCOPSAROUND_2, + SFX_COP_VOICE_2_COP_TARGETING_1, + SFX_COP_VOICE_2_COP_TARGETING_2, + SFX_COP_VOICE_2_COP_TARGETING_3, + SFX_COP_VOICE_2_COP_TARGETING_4, + + SFX_COP_VOICE_3_ARREST_1, + SFX_COP_VOICE_3_ARREST_2, + SFX_COP_VOICE_3_ARREST_3, + SFX_COP_VOICE_3_ARREST_4, + SFX_COP_VOICE_3_PULLOUTWEAPON_1, + SFX_COP_VOICE_3_PULLOUTWEAPON_2, + SFX_COP_VOICE_3_PULLOUTWEAPON_3, + SFX_COP_VOICE_3_BUMP_1, + SFX_COP_VOICE_3_BUMP_2, + SFX_COP_VOICE_3_BUMP_3, + SFX_COP_VOICE_3_BUMP_4, + SFX_COP_VOICE_3_BUMP_5, + SFX_COP_VOICE_3_COP_LITTLECOPSAROUND_1, + SFX_COP_VOICE_3_COP_LITTLECOPSAROUND_2, + SFX_COP_VOICE_3_COP_LITTLECOPSAROUND_3, + SFX_COP_VOICE_3_COP_LITTLECOPSAROUND_4, + SFX_COP_VOICE_3_GUNAIMEDAT3_1, + SFX_COP_VOICE_3_GUNAIMEDAT3_2, + SFX_COP_VOICE_3_CAR_CRASH_1, + SFX_COP_VOICE_3_CAR_CRASH_2, + SFX_COP_VOICE_3_CAR_CRASH_3, + SFX_COP_VOICE_3_CAR_CRASH_4, + SFX_COP_VOICE_3_DODGE_1, + SFX_COP_VOICE_3_DODGE_2, + SFX_COP_VOICE_3_DODGE_3, + SFX_COP_VOICE_3_FIGHT_1, + SFX_COP_VOICE_3_FIGHT_2, + SFX_COP_VOICE_3_FIGHT_3, + SFX_COP_VOICE_3_FIGHT_4, + SFX_COP_VOICE_3_GUNAIMEDAT2_1, + SFX_COP_VOICE_3_GUNAIMEDAT2_2, + SFX_COP_VOICE_3_SAVED_1, + SFX_COP_VOICE_3_SAVED_2, + SFX_COP_VOICE_3_COP_ASK_FOR_ID_1, + SFX_COP_VOICE_3_COP_ASK_FOR_ID_2, + SFX_COP_VOICE_3_COP_ALONE_1, + SFX_COP_VOICE_3_COP_ALONE_2, + SFX_COP_VOICE_3_COP_ALONE_3, + SFX_COP_VOICE_3_COP_ALONE_4, + SFX_COP_VOICE_3_COP_MANYCOPSAROUND_1, + SFX_COP_VOICE_3_COP_MANYCOPSAROUND_2, + SFX_COP_VOICE_3_COP_TARGETING_1, + SFX_COP_VOICE_3_COP_TARGETING_2, + SFX_COP_VOICE_3_COP_TARGETING_3, + SFX_COP_VOICE_3_COP_TARGETING_4, + + SFX_COP_VOICE_4_ARREST_1, + SFX_COP_VOICE_4_ARREST_2, + SFX_COP_VOICE_4_ARREST_3, + SFX_COP_VOICE_4_ARREST_4, + SFX_COP_VOICE_4_PULLOUTWEAPON_1, + SFX_COP_VOICE_4_PULLOUTWEAPON_2, + SFX_COP_VOICE_4_PULLOUTWEAPON_3, + SFX_COP_VOICE_4_BUMP_1, + SFX_COP_VOICE_4_BUMP_2, + SFX_COP_VOICE_4_BUMP_3, + SFX_COP_VOICE_4_BUMP_4, + SFX_COP_VOICE_4_BUMP_5, + SFX_COP_VOICE_4_COP_LITTLECOPSAROUND_1, + SFX_COP_VOICE_4_COP_LITTLECOPSAROUND_2, + SFX_COP_VOICE_4_COP_LITTLECOPSAROUND_3, + SFX_COP_VOICE_4_COP_LITTLECOPSAROUND_4, + SFX_COP_VOICE_4_GUNAIMEDAT3_1, + SFX_COP_VOICE_4_GUNAIMEDAT3_2, + SFX_COP_VOICE_4_CAR_CRASH_1, + SFX_COP_VOICE_4_CAR_CRASH_2, + SFX_COP_VOICE_4_CAR_CRASH_3, + SFX_COP_VOICE_4_CAR_CRASH_4, + SFX_COP_VOICE_4_DODGE_1, + SFX_COP_VOICE_4_DODGE_2, + SFX_COP_VOICE_4_DODGE_3, + SFX_COP_VOICE_4_FIGHT_1, + SFX_COP_VOICE_4_FIGHT_2, + SFX_COP_VOICE_4_FIGHT_3, + SFX_COP_VOICE_4_FIGHT_4, + SFX_COP_VOICE_4_GUNAIMEDAT2_1, + SFX_COP_VOICE_4_GUNAIMEDAT2_2, + SFX_COP_VOICE_4_SAVED_1, + SFX_COP_VOICE_4_SAVED_2, + SFX_COP_VOICE_4_COP_ASK_FOR_ID_1, + SFX_COP_VOICE_4_COP_ASK_FOR_ID_2, + SFX_COP_VOICE_4_COP_ALONE_1, + SFX_COP_VOICE_4_COP_ALONE_2, + SFX_COP_VOICE_4_COP_ALONE_3, + SFX_COP_VOICE_4_COP_ALONE_4, + SFX_COP_VOICE_4_COP_MANYCOPSAROUND_1, + SFX_COP_VOICE_4_COP_MANYCOPSAROUND_2, + SFX_COP_VOICE_4_COP_TARGETING_1, + SFX_COP_VOICE_4_COP_TARGETING_2, + SFX_COP_VOICE_4_COP_TARGETING_3, + SFX_COP_VOICE_4_COP_TARGETING_4, + + SFX_COP_VOICE_5_ARREST_1, + SFX_COP_VOICE_5_ARREST_2, + SFX_COP_VOICE_5_ARREST_3, + SFX_COP_VOICE_5_ARREST_4, + SFX_COP_VOICE_5_PULLOUTWEAPON_1, + SFX_COP_VOICE_5_PULLOUTWEAPON_2, + SFX_COP_VOICE_5_PULLOUTWEAPON_3, + SFX_COP_VOICE_5_BUMP_1, + SFX_COP_VOICE_5_BUMP_2, + SFX_COP_VOICE_5_BUMP_3, + SFX_COP_VOICE_5_BUMP_4, + SFX_COP_VOICE_5_BUMP_5, + SFX_COP_VOICE_5_COP_LITTLECOPSAROUND_1, + SFX_COP_VOICE_5_COP_LITTLECOPSAROUND_2, + SFX_COP_VOICE_5_COP_LITTLECOPSAROUND_3, + SFX_COP_VOICE_5_COP_LITTLECOPSAROUND_4, + SFX_COP_VOICE_5_GUNAIMEDAT3_1, + SFX_COP_VOICE_5_GUNAIMEDAT3_2, + SFX_COP_VOICE_5_CAR_CRASH_1, + SFX_COP_VOICE_5_CAR_CRASH_2, + SFX_COP_VOICE_5_CAR_CRASH_3, + SFX_COP_VOICE_5_CAR_CRASH_4, + SFX_COP_VOICE_5_DODGE_1, + SFX_COP_VOICE_5_DODGE_2, + SFX_COP_VOICE_5_DODGE_3, + SFX_COP_VOICE_5_FIGHT_1, + SFX_COP_VOICE_5_FIGHT_2, + SFX_COP_VOICE_5_FIGHT_3, + SFX_COP_VOICE_5_FIGHT_4, + SFX_COP_VOICE_5_GUNAIMEDAT2_1, + SFX_COP_VOICE_5_GUNAIMEDAT2_2, + SFX_COP_VOICE_5_SAVED_1, + SFX_COP_VOICE_5_SAVED_2, + SFX_COP_VOICE_5_COP_ASK_FOR_ID_1, + SFX_COP_VOICE_5_COP_ASK_FOR_ID_2, + SFX_COP_VOICE_5_COP_ALONE_1, + SFX_COP_VOICE_5_COP_ALONE_2, + SFX_COP_VOICE_5_COP_ALONE_3, + SFX_COP_VOICE_5_COP_ALONE_4, + SFX_COP_VOICE_5_COP_MANYCOPSAROUND_1, + SFX_COP_VOICE_5_COP_MANYCOPSAROUND_2, + SFX_COP_VOICE_5_COP_TARGETING_1, + SFX_COP_VOICE_5_COP_TARGETING_2, + SFX_COP_VOICE_5_COP_TARGETING_3, + SFX_COP_VOICE_5_COP_TARGETING_4, + + SFX_PLAYER_ANGRY_BUSTED_1, + SFX_PLAYER_ANGRY_BUSTED_2, + SFX_PLAYER_ANGRY_BUSTED_3, + SFX_PLAYER_ANGRY_BUSTED_4, + SFX_PLAYER_ANGRY_BUSTED_5, + SFX_PLAYER_ANGRY_BUSTED_6, + SFX_PLAYER_ANGRY_BUSTED_7, + SFX_PLAYER_ANGRY_BUSTED_8, + SFX_PLAYER_ANGRY_BUSTED_9, + SFX_PLAYER_ANGRY_BUSTED_10, + SFX_PLAYER_ANGRY_BUSTED_11, + SFX_PLAYER_ANGRY_BUSTED_12, + SFX_PLAYER_ANGRY_BUSTED_13, + SFX_PLAYER_ANGRY_BUSTED_14, + SFX_PLAYER_ANGRY_BUSTED_15, + SFX_PLAYER_ANGRY_BUSTED_16, + SFX_PLAYER_ANGRY_BUSTED_17, + SFX_PLAYER_ANGRY_BUSTED_18, + SFX_PLAYER_ANGRY_BUSTED_19, + SFX_PLAYER_ANGRY_BUSTED_20, + SFX_PLAYER_ANGRY_BUSTED_21, + SFX_PLAYER_ANGRY_BUSTED_22, + SFX_PLAYER_ANGRY_BUSTED_23, + SFX_PLAYER_ANGRY_BUSTED_24, + SFX_PLAYER_ANGRY_BUSTED_25, + SFX_PLAYER_ANGRY_BUSTED_26, + SFX_PLAYER_ANGRY_BUSTED_27, + SFX_PLAYER_ANGRY_BUSTED_28, + SFX_PLAYER_ANGRY_BUSTED_29, + SFX_PLAYER_ANGRY_BUSTED_30, + SFX_PLAYER_ANGRY_BUSTED_31, + SFX_PLAYER_ANGRY_BUSTED_32, + SFX_PLAYER_ANGRY_BUSTED_33, + SFX_PLAYER_ANGRY_BUSTED_34, + SFX_PLAYER_ANGRY_BUSTED_35, + SFX_PLAYER_ANGRY_BUSTED_36, + SFX_PLAYER_ANGRY_BUSTED_37, + SFX_PLAYER_ANGRY_BUSTED_38, + SFX_PLAYER_ANGRY_CHASED_1, + SFX_PLAYER_ANGRY_CHASED_2, + SFX_PLAYER_ANGRY_CHASED_3, + SFX_PLAYER_ANGRY_CHASED_4, + SFX_PLAYER_ANGRY_CHASED_5, + SFX_PLAYER_ANGRY_CHASED_6, + SFX_PLAYER_ANGRY_CHASED_7, + SFX_PLAYER_ANGRY_CHASED_8, + SFX_PLAYER_ANGRY_CHASED_9, + SFX_PLAYER_ANGRY_CRASH_1, + SFX_PLAYER_ANGRY_CRASH_2, + SFX_PLAYER_ANGRY_CRASH_3, + SFX_PLAYER_ANGRY_CRASH_4, + SFX_PLAYER_ANGRY_CRASH_5, + SFX_PLAYER_ANGRY_CRASH_6, + SFX_PLAYER_ANGRY_CRASH_7, + SFX_PLAYER_ANGRY_CRASH_8, + SFX_PLAYER_ANGRY_CRASH_9, + SFX_PLAYER_ANGRY_CRASH_10, + SFX_PLAYER_ANGRY_CRASH_11, + SFX_PLAYER_ANGRY_CRASH_12, + SFX_PLAYER_ANGRY_CRASH_13, + SFX_PLAYER_ANGRY_CRASH_14, + SFX_PLAYER_ANGRY_CRASH_15, + SFX_PLAYER_ANGRY_CRASH_16, + SFX_PLAYER_ANGRY_CRASH_17, + SFX_PLAYER_ANGRY_CRASH_18, + SFX_PLAYER_ANGRY_CRASH_19, + SFX_PLAYER_ANGRY_CRASH_20, + SFX_PLAYER_ANGRY_CRASH_21, + SFX_PLAYER_ANGRY_CRASH_22, + SFX_PLAYER_ANGRY_CRASH_23, + SFX_PLAYER_ANGRY_CRASH_24, + SFX_PLAYER_ANGRY_CRASH_25, + SFX_PLAYER_ANGRY_CRASH_26, + SFX_PLAYER_ANGRY_CRASH_27, + SFX_PLAYER_ANGRY_CRASH_28, + SFX_PLAYER_ANGRY_CRASH_29, + SFX_PLAYER_ANGRY_CRASH_30, + SFX_PLAYER_ANGRY_CRASH_31, + SFX_PLAYER_ANGRY_CRASH_32, + SFX_PLAYER_ANGRY_CRASH_33, + SFX_PLAYER_ANGRY_CRASH_34, + SFX_PLAYER_ANGRY_CRASH_35, + SFX_PLAYER_ANGRY_CRASH_36, + SFX_PLAYER_ANGRY_CRASH_37, + SFX_PLAYER_ANGRY_CRASH_38, + SFX_PLAYER_ANGRY_CRASH_39, + SFX_PLAYER_ANGRY_CRASH_40, + SFX_PLAYER_ANGRY_CRASH_41, + SFX_PLAYER_ANGRY_FIGHT_1, + SFX_PLAYER_ANGRY_FIGHT_2, + SFX_PLAYER_ANGRY_FIGHT_3, + SFX_PLAYER_ANGRY_FIGHT_4, + SFX_PLAYER_ANGRY_FIGHT_5, + SFX_PLAYER_ANGRY_FIGHT_6, + SFX_PLAYER_ANGRY_FIGHT_7, + SFX_PLAYER_ANGRY_FIGHT_8, + SFX_PLAYER_ANGRY_FIGHT_9, + SFX_PLAYER_ANGRY_FIGHT_10, + SFX_PLAYER_ANGRY_FIGHT_11, + SFX_PLAYER_ANGRY_FIGHT_12, + SFX_PLAYER_ANGRY_FIGHT_13, + SFX_PLAYER_ANGRY_FIGHT_14, + SFX_PLAYER_ANGRY_FIGHT_15, + SFX_PLAYER_ANGRY_FIGHT_16, + SFX_PLAYER_ANGRY_FIGHT_17, + SFX_PLAYER_ANGRY_FIGHT_18, + SFX_PLAYER_ANGRY_FIGHT_19, + SFX_PLAYER_ANGRY_FIGHT_20, + SFX_PLAYER_ANGRY_FIGHT_21, + SFX_PLAYER_ANGRY_FIGHT_22, + SFX_PLAYER_ANGRY_FIGHT_23, + SFX_PLAYER_ANGRY_FIGHT_24, + SFX_PLAYER_ANGRY_FIGHT_25, + SFX_PLAYER_ANGRY_FIGHT_26, + SFX_PLAYER_ANGRY_FIGHT_27, + SFX_PLAYER_ANGRY_FIGHT_28, + SFX_PLAYER_ANGRY_FIGHT_29, + SFX_PLAYER_ANGRY_FIGHT_30, + SFX_PLAYER_ANGRY_FIGHT_31, + SFX_PLAYER_ANGRY_FIGHT_32, + SFX_PLAYER_ANGRY_FIGHT_33, + SFX_PLAYER_ANGRY_FIGHT_34, + SFX_PLAYER_ANGRY_FIGHT_35, + SFX_PLAYER_ANGRY_FIGHT_36, + SFX_PLAYER_ANGRY_FIGHT_37, + SFX_PLAYER_ANGRY_FIGHT_38, + SFX_PLAYER_ANGRY_FIGHT_39, + SFX_PLAYER_ANGRY_FIGHT_40, + SFX_PLAYER_ANGRY_FIGHT_41, + SFX_PLAYER_ANGRY_FIGHT_42, + SFX_PLAYER_ANGRY_FIGHT_43, + SFX_PLAYER_ANGRY_FIGHT_44, + SFX_PLAYER_ANGRY_FIGHT_45, + SFX_PLAYER_ANGRY_FIGHT_46, + SFX_PLAYER_ANGRY_FIGHT_47, + SFX_PLAYER_ANGRY_FIGHT_48, + SFX_PLAYER_ANGRY_FIGHT_49, + SFX_PLAYER_ANGRY_FIGHT_50, + SFX_PLAYER_ANGRY_FIGHT_51, + SFX_PLAYER_ANGRY_FIGHT_52, + SFX_PLAYER_ANGRY_FIGHT_53, + SFX_PLAYER_ANGRY_FIGHT_54, + SFX_PLAYER_ANGRY_FIGHT_55, + SFX_PLAYER_ANGRY_FIGHT_56, + SFX_PLAYER_ANGRY_FIGHT_57, + SFX_PLAYER_ANGRY_FIGHT_58, + SFX_PLAYER_ANGRY_FIGHT_59, + SFX_PLAYER_ANGRY_FIGHT_60, + SFX_PLAYER_ANGRY_FIGHT_61, + SFX_PLAYER_ANGRY_JACKED_1, + SFX_PLAYER_ANGRY_JACKED_2, + SFX_PLAYER_ANGRY_JACKED_3, + SFX_PLAYER_ANGRY_JACKED_4, + SFX_PLAYER_ANGRY_JACKED_5, + SFX_PLAYER_ANGRY_JACKED_6, + SFX_PLAYER_ANGRY_JACKED_7, + SFX_PLAYER_ANGRY_JACKED_8, + SFX_PLAYER_ANGRY_JACKED_9, + SFX_PLAYER_ANGRY_JACKED_10, + SFX_PLAYER_ANGRY_JACKED_11, + SFX_PLAYER_ANGRY_JACKED_12, + SFX_PLAYER_ANGRY_JACKED_13, + SFX_PLAYER_ANGRY_JACKED_14, + SFX_PLAYER_ANGRY_JACKED_15, + SFX_PLAYER_ANGRY_JACKED_16, + SFX_PLAYER_ANGRY_JACKED_17, + SFX_PLAYER_ANGRY_JACKED_18, + SFX_PLAYER_ANGRY_JACKED_19, + SFX_PLAYER_ANGRY_JACKED_20, + SFX_PLAYER_ANGRY_JACKED_21, + SFX_PLAYER_ANGRY_JACKED_22, + SFX_PLAYER_ANGRY_JACKED_23, + SFX_PLAYER_ANGRY_JACKED_24, + SFX_PLAYER_ANGRY_JACKED_25, + SFX_PLAYER_ANGRY_JACKED_26, + SFX_PLAYER_ANGRY_JACKED_27, + SFX_PLAYER_ANGRY_JACKED_28, + SFX_PLAYER_ANGRY_JACKED_29, + SFX_PLAYER_ANGRY_JACKED_30, + SFX_PLAYER_ANGRY_JACKED_31, + SFX_PLAYER_ANGRY_JACKED_32, + SFX_PLAYER_ANGRY_JACKED_33, + SFX_PLAYER_ANGRY_JACKING_1, + SFX_PLAYER_ANGRY_JACKING_2, + SFX_PLAYER_ANGRY_JACKING_3, + SFX_PLAYER_ANGRY_JACKING_4, + SFX_PLAYER_ANGRY_JACKING_5, + SFX_PLAYER_ANGRY_JACKING_6, + SFX_PLAYER_ANGRY_JACKING_7, + SFX_PLAYER_ANGRY_JACKING_8, + SFX_PLAYER_ANGRY_JACKING_9, + SFX_PLAYER_ANGRY_JACKING_10, + SFX_PLAYER_ANGRY_JACKING_11, + SFX_PLAYER_ANGRY_JACKING_12, + SFX_PLAYER_ANGRY_JACKING_13, + SFX_PLAYER_ANGRY_JACKING_14, + SFX_PLAYER_ANGRY_JACKING_15, + SFX_PLAYER_ANGRY_JACKING_16, + SFX_PLAYER_ANGRY_JACKING_17, + SFX_PLAYER_ANGRY_JACKING_18, + SFX_PLAYER_ANGRY_JACKING_19, + SFX_PLAYER_ANGRY_JACKING_20, + SFX_PLAYER_ANGRY_JACKING_21, + SFX_PLAYER_ANGRY_JACKING_22, + SFX_PLAYER_ANGRY_JACKING_23, + SFX_PLAYER_ANGRY_JACKING_24, + SFX_PLAYER_ANGRY_JACKING_25, + SFX_PLAYER_ANGRY_JACKING_26, + SFX_PLAYER_ANGRY_JACKING_27, + SFX_PLAYER_ANGRY_JACKING_28, + SFX_PLAYER_ANGRY_JACKING_29, + SFX_PLAYER_ANGRY_JACKING_30, + SFX_PLAYER_ANGRY_JACKING_31, + SFX_PLAYER_ANGRY_JACKING_32, + SFX_PLAYER_ANGRY_JACKING_33, + SFX_PLAYER_ANGRY_JACKING_34, + SFX_PLAYER_ANGRY_JACKING_35, + SFX_PLAYER_ANGRY_JACKING_36, + SFX_PLAYER_ANGRY_JACKING_37, + SFX_PLAYER_ANGRY_JACKING_38, + SFX_PLAYER_ANGRY_JACKING_39, + SFX_PLAYER_ANGRY_JACKING_40, + SFX_PLAYER_ANGRY_JACKING_41, + SFX_PLAYER_ANGRY_JACKING_42, + SFX_PLAYER_ANGRY_JACKING_43, + SFX_PLAYER_ANGRY_PICK_UP_CASH_1, + SFX_PLAYER_ANGRY_PICK_UP_CASH_2, + SFX_PLAYER_ANGRY_PICK_UP_CASH_3, + SFX_PLAYER_ANGRY_PICK_UP_CASH_4, + SFX_PLAYER_ANGRY_PICK_UP_CASH_5, + SFX_PLAYER_ANGRY_PICK_UP_CASH_6, + SFX_PLAYER_ANGRY_PICK_UP_CASH_7, + SFX_PLAYER_ANGRY_PICK_UP_CASH_8, + SFX_PLAYER_ANGRY_PICK_UP_CASH_9, + SFX_PLAYER_ANGRY_PICK_UP_CASH_10, + SFX_PLAYER_ANGRY_PICK_UP_CASH_11, + SFX_PLAYER_ANGRY_PICK_UP_CASH_12, + SFX_PLAYER_ANGRY_PICK_UP_HOOKER_1, + SFX_PLAYER_ANGRY_PICK_UP_HOOKER_2, + SFX_PLAYER_ANGRY_PICK_UP_HOOKER_3, + SFX_PLAYER_ANGRY_PICK_UP_HOOKER_4, + SFX_PLAYER_ANGRY_PICK_UP_HOOKER_5, + SFX_PLAYER_ANGRY_PICK_UP_HOOKER_6, + SFX_PLAYER_ANGRY_PULL_GUN_1, + SFX_PLAYER_ANGRY_PULL_GUN_2, + SFX_PLAYER_ANGRY_PULL_GUN_3, + SFX_PLAYER_ANGRY_PULL_GUN_4, + SFX_PLAYER_ANGRY_PULL_GUN_5, + SFX_PLAYER_ANGRY_PULL_GUN_6, + SFX_PLAYER_ANGRY_PULL_GUN_7, + SFX_PLAYER_ANGRY_PULL_GUN_8, + SFX_PLAYER_ANGRY_PULL_GUN_9, + SFX_PLAYER_ANGRY_PULL_GUN_10, + SFX_PLAYER_ANGRY_PULL_GUN_11, + SFX_PLAYER_ANGRY_PULL_GUN_12, + SFX_PLAYER_ANGRY_PULL_GUN_13, + SFX_PLAYER_ANGRY_PULL_GUN_14, + SFX_PLAYER_ANGRY_PULL_GUN_15, + SFX_PLAYER_ANGRY_PULL_GUN_16, + SFX_PLAYER_ANGRY_PULL_GUN_17, + SFX_PLAYER_ANGRY_PULL_GUN_18, + SFX_PLAYER_ANGRY_PULL_GUN_19, + SFX_PLAYER_ANGRY_PULL_GUN_20, + SFX_PLAYER_ANGRY_PULL_GUN_21, + SFX_PLAYER_ANGRY_PULL_GUN_22, + SFX_PLAYER_ANGRY_PULL_GUN_23, + SFX_PLAYER_ANGRY_PULL_GUN_24, + SFX_PLAYER_ANGRY_PULL_GUN_25, + SFX_PLAYER_ANGRY_PULL_GUN_26, + SFX_PLAYER_ANGRY_PULL_GUN_27, + SFX_PLAYER_ANGRY_PULL_GUN_28, + SFX_PLAYER_ANGRY_PULL_GUN_29, + SFX_PLAYER_ANGRY_PULL_GUN_30, + SFX_PLAYER_ANGRY_PULL_GUN_31, + SFX_PLAYER_ANGRY_PULL_GUN_32, + SFX_PLAYER_ANGRY_PULL_GUN_33, + SFX_PLAYER_ANGRY_PULL_GUN_34, + SFX_PLAYER_ANGRY_PULL_GUN_35, + SFX_PLAYER_ANGRY_PULL_GUN_36, + SFX_PLAYER_ANGRY_PULL_GUN_37, + SFX_PLAYER_ANGRY_PULL_GUN_38, + SFX_PLAYER_ANGRY_PULL_GUN_39, + SFX_PLAYER_ANGRY_PULL_GUN_40, + SFX_PLAYER_ANGRY_PULL_GUN_41, + SFX_PLAYER_ANGRY_PULL_GUN_42, + SFX_PLAYER_ANGRY_PULL_GUN_43, + SFX_PLAYER_ANGRY_PULL_GUN_44, + SFX_PLAYER_ANGRY_PULL_GUN_45, + SFX_PLAYER_ANGRY_PULL_GUN_46, + SFX_PLAYER_ANGRY_PULL_GUN_47, + SFX_PLAYER_ANGRY_PULL_GUN_48, + SFX_PLAYER_ANGRY_PULL_GUN_49, + SFX_PLAYER_ANGRY_PULL_GUN_50, + SFX_PLAYER_ANGRY_PULL_GUN_51, + SFX_PLAYER_ANGRY_PULL_GUN_52, + SFX_PLAYER_ANGRY_SEX_1, + SFX_PLAYER_ANGRY_SEX_2, + SFX_PLAYER_ANGRY_SEX_3, + SFX_PLAYER_ANGRY_SEX_4, + SFX_PLAYER_ANGRY_SEX_5, + SFX_PLAYER_ANGRY_SEX_6, + SFX_PLAYER_ANGRY_SEX_7, + SFX_PLAYER_ANGRY_SEX_8, + SFX_PLAYER_ANGRY_SEX_9, + SFX_PLAYER_ANGRY_SEX_10, + SFX_PLAYER_ANGRY_SEX_11, + SFX_PLAYER_ANGRY_SEX_12, + SFX_PLAYER_ANGRY_SEX_13, + SFX_PLAYER_ANGRY_SEX_14, + SFX_PLAYER_ANGRY_SEX_15, + SFX_PLAYER_ANGRY_SEX_16, + SFX_PLAYER_ANGRY_SEX_17, + SFX_PLAYER_ANGRY_SEX_18, + SFX_PLAYER_ANGRY_SHOOT_1, + SFX_PLAYER_ANGRY_SHOOT_2, + SFX_PLAYER_ANGRY_SHOOT_3, + SFX_PLAYER_ANGRY_SHOOT_4, + SFX_PLAYER_ANGRY_SHOOT_5, + SFX_PLAYER_ANGRY_SHOOT_6, + SFX_PLAYER_ANGRY_SHOOT_7, + SFX_PLAYER_ANGRY_SHOOT_8, + SFX_PLAYER_ANGRY_SHOOT_9, + SFX_PLAYER_ANGRY_SHOOT_10, + SFX_PLAYER_ANGRY_SHOOT_11, + SFX_PLAYER_ANGRY_SHOOT_12, + SFX_PLAYER_ANGRY_SHOOT_13, + SFX_PLAYER_ANGRY_SHOOT_14, + SFX_PLAYER_ANGRY_SHOOT_15, + SFX_PLAYER_ANGRY_SHOOT_16, + SFX_PLAYER_ANGRY_SHOOT_17, + SFX_PLAYER_ANGRY_SHOOT_18, + SFX_PLAYER_ANGRY_SHOOT_19, + SFX_PLAYER_ANGRY_SHOOT_20, + SFX_PLAYER_ANGRY_SHOOT_21, + SFX_PLAYER_ANGRY_SHOOT_22, + SFX_PLAYER_ANGRY_SHOOT_23, + SFX_PLAYER_ANGRY_SHOOT_24, + SFX_PLAYER_ANGRY_SHOOT_25, + SFX_PLAYER_ANGRY_SHOOT_26, + SFX_PLAYER_ANGRY_SHOOT_27, + SFX_PLAYER_ANGRY_SHOOT_28, + SFX_PLAYER_ANGRY_SHOOT_29, + SFX_PLAYER_ANGRY_SHOOT_30, + SFX_PLAYER_ANGRY_SHOOT_31, + SFX_PLAYER_ANGRY_SHOOT_32, + SFX_PLAYER_ANGRY_SHOOT_33, + SFX_PLAYER_ANGRY_SHOOT_34, + SFX_PLAYER_ANGRY_SHOOT_35, + SFX_PLAYER_ANGRY_SHOOT_36, + SFX_PLAYER_ANGRY_SHOOT_37, + SFX_PLAYER_ANGRY_SHOOT_38, + SFX_PLAYER_ANGRY_SHOOT_39, + + SFX_PLAYER_CALM_BUSTED_1, + SFX_PLAYER_CALM_BUSTED_2, + SFX_PLAYER_CALM_BUSTED_3, + SFX_PLAYER_CALM_BUSTED_4, + SFX_PLAYER_CALM_BUSTED_5, + SFX_PLAYER_CALM_BUSTED_6, + SFX_PLAYER_CALM_BUSTED_7, + SFX_PLAYER_CALM_BUSTED_8, + SFX_PLAYER_CALM_BUSTED_9, + SFX_PLAYER_CALM_BUSTED_10, + SFX_PLAYER_CALM_BUSTED_11, + SFX_PLAYER_CALM_BUSTED_12, + SFX_PLAYER_CALM_BUSTED_13, + SFX_PLAYER_CALM_BUSTED_14, + SFX_PLAYER_CALM_BUSTED_15, + SFX_PLAYER_CALM_BUSTED_16, + SFX_PLAYER_CALM_BUSTED_17, + SFX_PLAYER_CALM_BUSTED_18, + SFX_PLAYER_CALM_BUSTED_19, + SFX_PLAYER_CALM_BUSTED_20, + SFX_PLAYER_CALM_BUSTED_21, + SFX_PLAYER_CALM_BUSTED_22, + SFX_PLAYER_CALM_CHASED_1, + SFX_PLAYER_CALM_CHASED_2, + SFX_PLAYER_CALM_CHASED_3, + SFX_PLAYER_CALM_CHASED_4, + SFX_PLAYER_CALM_CHASED_5, + SFX_PLAYER_CALM_CHASED_6, + SFX_PLAYER_CALM_CHASED_7, + SFX_PLAYER_CALM_CHASED_8, + SFX_PLAYER_CALM_CHASED_9, + SFX_PLAYER_CALM_CHASED_10, + SFX_PLAYER_CALM_CHASED_11, + SFX_PLAYER_CALM_CHASED_12, + SFX_PLAYER_CALM_CHASED_13, + SFX_PLAYER_CALM_CHASED_14, + SFX_PLAYER_CALM_CHASED_15, + SFX_PLAYER_CALM_CHASED_16, + SFX_PLAYER_CALM_CHASED_17, + SFX_PLAYER_CALM_CHASED_18, + SFX_PLAYER_CALM_CHASED_19, + SFX_PLAYER_CALM_CHASED_20, + SFX_PLAYER_CALM_CRASH_1, + SFX_PLAYER_CALM_CRASH_2, + SFX_PLAYER_CALM_CRASH_3, + SFX_PLAYER_CALM_CRASH_4, + SFX_PLAYER_CALM_CRASH_5, + SFX_PLAYER_CALM_CRASH_6, + SFX_PLAYER_CALM_CRASH_7, + SFX_PLAYER_CALM_CRASH_8, + SFX_PLAYER_CALM_CRASH_9, + SFX_PLAYER_CALM_CRASH_10, + SFX_PLAYER_CALM_CRASH_11, + SFX_PLAYER_CALM_CRASH_12, + SFX_PLAYER_CALM_CRASH_13, + SFX_PLAYER_CALM_CRASH_14, + SFX_PLAYER_CALM_CRASH_15, + SFX_PLAYER_CALM_CRASH_16, + SFX_PLAYER_CALM_CRASH_17, + SFX_PLAYER_CALM_CRASH_18, + SFX_PLAYER_CALM_CRASH_19, + SFX_PLAYER_CALM_CRASH_20, + SFX_PLAYER_CALM_CRASH_21, + SFX_PLAYER_CALM_CRASH_22, + SFX_PLAYER_CALM_CRASH_23, + SFX_PLAYER_CALM_CRASH_24, + SFX_PLAYER_CALM_CRASH_25, + SFX_PLAYER_CALM_CRASH_26, + SFX_PLAYER_CALM_CRASH_27, + SFX_PLAYER_CALM_CRASH_28, + SFX_PLAYER_CALM_CRASH_29, + SFX_PLAYER_CALM_CRASH_30, + SFX_PLAYER_CALM_CRASH_31, + SFX_PLAYER_CALM_CRASH_32, + SFX_PLAYER_CALM_CRASH_33, + SFX_PLAYER_CALM_CRASH_34, + SFX_PLAYER_CALM_CRASH_35, + SFX_PLAYER_CALM_CRASH_36, + SFX_PLAYER_CALM_CRASH_37, + SFX_PLAYER_CALM_CRASH_38, + SFX_PLAYER_CALM_CRASH_39, + SFX_PLAYER_CALM_CRASH_40, + SFX_PLAYER_CALM_CRASH_41, + SFX_PLAYER_CALM_CRASH_42, + SFX_PLAYER_CALM_CRASH_43, + SFX_PLAYER_CALM_FIGHT_1, + SFX_PLAYER_CALM_FIGHT_2, + SFX_PLAYER_CALM_FIGHT_3, + SFX_PLAYER_CALM_FIGHT_4, + SFX_PLAYER_CALM_FIGHT_5, + SFX_PLAYER_CALM_FIGHT_6, + SFX_PLAYER_CALM_FIGHT_7, + SFX_PLAYER_CALM_FIGHT_8, + SFX_PLAYER_CALM_FIGHT_9, + SFX_PLAYER_CALM_FIGHT_10, + SFX_PLAYER_CALM_FIGHT_11, + SFX_PLAYER_CALM_FIGHT_12, + SFX_PLAYER_CALM_FIGHT_13, + SFX_PLAYER_CALM_FIGHT_14, + SFX_PLAYER_CALM_FIGHT_15, + SFX_PLAYER_CALM_FIGHT_16, + SFX_PLAYER_CALM_FIGHT_17, + SFX_PLAYER_CALM_FIGHT_18, + SFX_PLAYER_CALM_FIGHT_19, + SFX_PLAYER_CALM_FIGHT_20, + SFX_PLAYER_CALM_FIGHT_21, + SFX_PLAYER_CALM_FIGHT_22, + SFX_PLAYER_CALM_FIGHT_23, + SFX_PLAYER_CALM_FIGHT_24, + SFX_PLAYER_CALM_FIGHT_25, + SFX_PLAYER_CALM_FIGHT_26, + SFX_PLAYER_CALM_FIGHT_27, + SFX_PLAYER_CALM_FIGHT_28, + SFX_PLAYER_CALM_FIGHT_29, + SFX_PLAYER_CALM_FIGHT_30, + SFX_PLAYER_CALM_FIGHT_31, + SFX_PLAYER_CALM_FIGHT_32, + SFX_PLAYER_CALM_FIGHT_33, + SFX_PLAYER_CALM_FIGHT_34, + SFX_PLAYER_CALM_FIGHT_35, + SFX_PLAYER_CALM_FIGHT_36, + SFX_PLAYER_CALM_FIGHT_37, + SFX_PLAYER_CALM_FIGHT_38, + SFX_PLAYER_CALM_FIGHT_39, + SFX_PLAYER_CALM_FIGHT_40, + SFX_PLAYER_CALM_FIGHT_41, + SFX_PLAYER_CALM_FIGHT_42, + SFX_PLAYER_CALM_FIGHT_43, + SFX_PLAYER_CALM_FIGHT_44, + SFX_PLAYER_CALM_FIGHT_45, + SFX_PLAYER_CALM_FIGHT_46, + SFX_PLAYER_CALM_FIGHT_47, + SFX_PLAYER_CALM_JACKED_1, + SFX_PLAYER_CALM_JACKED_2, + SFX_PLAYER_CALM_JACKED_3, + SFX_PLAYER_CALM_JACKED_4, + SFX_PLAYER_CALM_JACKED_5, + SFX_PLAYER_CALM_JACKED_6, + SFX_PLAYER_CALM_JACKED_7, + SFX_PLAYER_CALM_JACKED_8, + SFX_PLAYER_CALM_JACKED_9, + SFX_PLAYER_CALM_JACKED_10, + SFX_PLAYER_CALM_JACKED_11, + SFX_PLAYER_CALM_JACKED_12, + SFX_PLAYER_CALM_JACKED_13, + SFX_PLAYER_CALM_JACKED_14, + SFX_PLAYER_CALM_JACKED_15, + SFX_PLAYER_CALM_JACKED_16, + SFX_PLAYER_CALM_JACKED_17, + SFX_PLAYER_CALM_JACKED_18, + SFX_PLAYER_CALM_JACKED_19, + SFX_PLAYER_CALM_JACKED_20, + SFX_PLAYER_CALM_JACKED_21, + SFX_PLAYER_CALM_JACKED_22, + SFX_PLAYER_CALM_JACKED_23, + SFX_PLAYER_CALM_JACKED_24, + SFX_PLAYER_CALM_JACKING_1, + SFX_PLAYER_CALM_JACKING_2, + SFX_PLAYER_CALM_JACKING_3, + SFX_PLAYER_CALM_JACKING_4, + SFX_PLAYER_CALM_JACKING_5, + SFX_PLAYER_CALM_JACKING_6, + SFX_PLAYER_CALM_JACKING_7, + SFX_PLAYER_CALM_JACKING_8, + SFX_PLAYER_CALM_JACKING_9, + SFX_PLAYER_CALM_JACKING_10, + SFX_PLAYER_CALM_JACKING_11, + SFX_PLAYER_CALM_JACKING_12, + SFX_PLAYER_CALM_JACKING_13, + SFX_PLAYER_CALM_JACKING_14, + SFX_PLAYER_CALM_JACKING_15, + SFX_PLAYER_CALM_JACKING_16, + SFX_PLAYER_CALM_JACKING_17, + SFX_PLAYER_CALM_JACKING_18, + SFX_PLAYER_CALM_JACKING_19, + SFX_PLAYER_CALM_JACKING_20, + SFX_PLAYER_CALM_JACKING_21, + SFX_PLAYER_CALM_JACKING_22, + SFX_PLAYER_CALM_JACKING_23, + SFX_PLAYER_CALM_JACKING_24, + SFX_PLAYER_CALM_JACKING_25, + SFX_PLAYER_CALM_JACKING_26, + SFX_PLAYER_CALM_JACKING_27, + SFX_PLAYER_CALM_JACKING_28, + SFX_PLAYER_CALM_JACKING_29, + SFX_PLAYER_CALM_JACKING_30, + SFX_PLAYER_CALM_JACKING_31, + SFX_PLAYER_CALM_JACKING_32, + SFX_PLAYER_CALM_JACKING_33, + SFX_PLAYER_CALM_JACKING_34, + SFX_PLAYER_CALM_JACKING_35, + SFX_PLAYER_CALM_JACKING_36, + SFX_PLAYER_CALM_JACKING_37, + SFX_PLAYER_CALM_JACKING_38, + SFX_PLAYER_CALM_JACKING_39, + SFX_PLAYER_CALM_JACKING_40, + SFX_PLAYER_CALM_PICK_UP_CASH_1, + SFX_PLAYER_CALM_PICK_UP_CASH_2, + SFX_PLAYER_CALM_PICK_UP_CASH_3, + SFX_PLAYER_CALM_PICK_UP_CASH_4, + SFX_PLAYER_CALM_PICK_UP_CASH_5, + SFX_PLAYER_CALM_PICK_UP_CASH_6, + SFX_PLAYER_CALM_PICK_UP_CASH_7, + SFX_PLAYER_CALM_PICK_UP_CASH_8, + SFX_PLAYER_CALM_PICK_UP_CASH_9, + SFX_PLAYER_CALM_PICK_UP_CASH_10, + SFX_PLAYER_CALM_PICK_UP_CASH_11, + SFX_PLAYER_CALM_PICK_UP_HOOKER_1, + SFX_PLAYER_CALM_PICK_UP_HOOKER_2, + SFX_PLAYER_CALM_PICK_UP_HOOKER_3, + SFX_PLAYER_CALM_PICK_UP_HOOKER_4, + SFX_PLAYER_CALM_PICK_UP_HOOKER_5, + SFX_PLAYER_CALM_PICK_UP_HOOKER_6, + SFX_PLAYER_CALM_PICK_UP_HOOKER_7, + SFX_PLAYER_CALM_PICK_UP_HOOKER_8, + SFX_PLAYER_CALM_PICK_UP_HOOKER_9, + SFX_PLAYER_CALM_PICK_UP_HOOKER_10, + SFX_PLAYER_CALM_PICK_UP_HOOKER_11, + SFX_PLAYER_CALM_PICK_UP_HOOKER_12, + SFX_PLAYER_CALM_PICK_UP_HOOKER_13, + SFX_PLAYER_CALM_PICK_UP_HOOKER_14, + SFX_PLAYER_CALM_PICK_UP_HOOKER_15, + SFX_PLAYER_CALM_PICK_UP_HOOKER_16, + SFX_PLAYER_CALM_PICK_UP_HOOKER_17, + SFX_PLAYER_CALM_PICK_UP_HOOKER_18, + SFX_PLAYER_CALM_PICK_UP_HOOKER_19, + SFX_PLAYER_CALM_PICK_UP_HOOKER_20, + SFX_PLAYER_CALM_PICK_UP_HOOKER_21, + SFX_PLAYER_CALM_PICK_UP_HOOKER_22, + SFX_PLAYER_CALM_PULL_GUN_1, + SFX_PLAYER_CALM_PULL_GUN_2, + SFX_PLAYER_CALM_PULL_GUN_3, + SFX_PLAYER_CALM_PULL_GUN_4, + SFX_PLAYER_CALM_PULL_GUN_5, + SFX_PLAYER_CALM_PULL_GUN_6, + SFX_PLAYER_CALM_PULL_GUN_7, + SFX_PLAYER_CALM_PULL_GUN_8, + SFX_PLAYER_CALM_PULL_GUN_9, + SFX_PLAYER_CALM_PULL_GUN_10, + SFX_PLAYER_CALM_PULL_GUN_11, + SFX_PLAYER_CALM_PULL_GUN_12, + SFX_PLAYER_CALM_PULL_GUN_13, + SFX_PLAYER_CALM_PULL_GUN_14, + SFX_PLAYER_CALM_PULL_GUN_15, + SFX_PLAYER_CALM_PULL_GUN_16, + SFX_PLAYER_CALM_PULL_GUN_17, + SFX_PLAYER_CALM_PULL_GUN_18, + SFX_PLAYER_CALM_PULL_GUN_19, + SFX_PLAYER_CALM_PULL_GUN_20, + SFX_PLAYER_CALM_PULL_GUN_21, + SFX_PLAYER_CALM_PULL_GUN_22, + SFX_PLAYER_CALM_PULL_GUN_23, + SFX_PLAYER_CALM_PULL_GUN_24, + SFX_PLAYER_CALM_PULL_GUN_25, + SFX_PLAYER_CALM_PULL_GUN_26, + SFX_PLAYER_CALM_PULL_GUN_27, + SFX_PLAYER_CALM_PULL_GUN_28, + SFX_PLAYER_CALM_PULL_GUN_29, + SFX_PLAYER_CALM_PULL_GUN_30, + SFX_PLAYER_CALM_PULL_GUN_31, + SFX_PLAYER_CALM_PULL_GUN_32, + SFX_PLAYER_CALM_PULL_GUN_33, + SFX_PLAYER_CALM_PULL_GUN_34, + SFX_PLAYER_CALM_PULL_GUN_35, + SFX_PLAYER_CALM_PULL_GUN_36, + SFX_PLAYER_CALM_PULL_GUN_37, + SFX_PLAYER_CALM_PULL_GUN_38, + SFX_PLAYER_CALM_PULL_GUN_39, + SFX_PLAYER_CALM_SEX_1, + SFX_PLAYER_CALM_SEX_2, + SFX_PLAYER_CALM_SEX_3, + SFX_PLAYER_CALM_SEX_4, + SFX_PLAYER_CALM_SEX_5, + SFX_PLAYER_CALM_SEX_6, + SFX_PLAYER_CALM_SEX_7, + SFX_PLAYER_CALM_SEX_8, + SFX_PLAYER_CALM_SHOOT_1, + SFX_PLAYER_CALM_SHOOT_2, + SFX_PLAYER_CALM_SHOOT_3, + SFX_PLAYER_CALM_SHOOT_4, + SFX_PLAYER_CALM_SHOOT_5, + SFX_PLAYER_CALM_SHOOT_6, + SFX_PLAYER_CALM_SHOOT_7, + SFX_PLAYER_CALM_SHOOT_8, + SFX_PLAYER_CALM_SHOOT_9, + SFX_PLAYER_CALM_SHOOT_10, + SFX_PLAYER_CALM_SHOOT_11, + SFX_PLAYER_CALM_SHOOT_12, + SFX_PLAYER_CALM_SHOOT_13, + SFX_PLAYER_CALM_SHOOT_14, + SFX_PLAYER_CALM_SHOOT_15, + SFX_PLAYER_CALM_SHOOT_16, + SFX_PLAYER_CALM_SHOOT_17, + SFX_PLAYER_CALM_SHOOT_18, + SFX_PLAYER_CALM_SHOOT_19, + SFX_PLAYER_CALM_SHOOT_20, + SFX_PLAYER_CALM_SHOOT_21, + SFX_PLAYER_CALM_SHOOT_22, + SFX_PLAYER_CALM_SHOOT_23, + SFX_PLAYER_CALM_SHOOT_24, + SFX_PLAYER_CALM_SHOOT_25, + SFX_PLAYER_CALM_SHOOT_26, + SFX_PLAYER_CALM_SHOOT_27, + SFX_PLAYER_CALM_SHOOT_28, + SFX_PLAYER_CALM_SHOOT_29, + SFX_PLAYER_CALM_SHOOT_30, + SFX_PLAYER_CALM_SHOOT_31, + SFX_PLAYER_CALM_SHOOT_32, + SFX_PLAYER_CALM_SHOOT_33, + SFX_PLAYER_CALM_SHOOT_34, + SFX_PLAYER_CALM_SHOOT_35, + + SFX_PLAYER_PISSED_OFF_CRASH_1, + SFX_PLAYER_PISSED_OFF_CRASH_2, + SFX_PLAYER_PISSED_OFF_CRASH_3, + SFX_PLAYER_PISSED_OFF_CRASH_4, + SFX_PLAYER_PISSED_OFF_CRASH_5, + SFX_PLAYER_PISSED_OFF_CRASH_6, + SFX_PLAYER_PISSED_OFF_CRASH_7, + SFX_PLAYER_PISSED_OFF_CRASH_8, + SFX_PLAYER_PISSED_OFF_CRASH_9, + SFX_PLAYER_PISSED_OFF_CRASH_10, + SFX_PLAYER_PISSED_OFF_CRASH_11, + SFX_PLAYER_PISSED_OFF_CRASH_12, + SFX_PLAYER_PISSED_OFF_CRASH_13, + SFX_PLAYER_PISSED_OFF_CRASH_14, + SFX_PLAYER_PISSED_OFF_CRASH_15, + SFX_PLAYER_PISSED_OFF_CRASH_16, + SFX_PLAYER_PISSED_OFF_CRASH_17, + SFX_PLAYER_PISSED_OFF_CRASH_18, + SFX_PLAYER_PISSED_OFF_CRASH_19, + SFX_PLAYER_PISSED_OFF_CRASH_20, + SFX_PLAYER_PISSED_OFF_CRASH_21, + SFX_PLAYER_PISSED_OFF_CRASH_22, + SFX_PLAYER_PISSED_OFF_CRASH_23, + SFX_PLAYER_PISSED_OFF_CRASH_24, + SFX_PLAYER_PISSED_OFF_CRASH_25, + SFX_PLAYER_PISSED_OFF_CRASH_26, + SFX_PLAYER_PISSED_OFF_CRASH_27, + SFX_PLAYER_PISSED_OFF_CRASH_28, + SFX_PLAYER_PISSED_OFF_CRASH_29, + SFX_PLAYER_PISSED_OFF_CRASH_30, + SFX_PLAYER_PISSED_OFF_CRASH_31, + SFX_PLAYER_PISSED_OFF_CRASH_32, + SFX_PLAYER_PISSED_OFF_CRASH_33, + SFX_PLAYER_PISSED_OFF_CRASH_34, + SFX_PLAYER_PISSED_OFF_CRASH_35, + SFX_PLAYER_PISSED_OFF_CRASH_36, + SFX_PLAYER_PISSED_OFF_CRASH_37, + SFX_PLAYER_PISSED_OFF_CRASH_38, + SFX_PLAYER_PISSED_OFF_CRASH_39, + SFX_PLAYER_PISSED_OFF_CRASH_40, + SFX_PLAYER_PISSED_OFF_CRASH_41, + SFX_PLAYER_PISSED_OFF_CRASH_42, + SFX_PLAYER_PISSED_OFF_CRASH_43, + SFX_PLAYER_PISSED_OFF_CRASH_44, + SFX_PLAYER_PISSED_OFF_FIGHT_1, + SFX_PLAYER_PISSED_OFF_FIGHT_2, + SFX_PLAYER_PISSED_OFF_FIGHT_3, + SFX_PLAYER_PISSED_OFF_FIGHT_4, + SFX_PLAYER_PISSED_OFF_FIGHT_5, + SFX_PLAYER_PISSED_OFF_FIGHT_6, + SFX_PLAYER_PISSED_OFF_FIGHT_7, + SFX_PLAYER_PISSED_OFF_FIGHT_8, + SFX_PLAYER_PISSED_OFF_FIGHT_9, + SFX_PLAYER_PISSED_OFF_FIGHT_10, + SFX_PLAYER_PISSED_OFF_FIGHT_11, + SFX_PLAYER_PISSED_OFF_FIGHT_12, + SFX_PLAYER_PISSED_OFF_FIGHT_13, + SFX_PLAYER_PISSED_OFF_FIGHT_14, + SFX_PLAYER_PISSED_OFF_FIGHT_15, + SFX_PLAYER_PISSED_OFF_FIGHT_16, + SFX_PLAYER_PISSED_OFF_FIGHT_17, + SFX_PLAYER_PISSED_OFF_FIGHT_18, + SFX_PLAYER_PISSED_OFF_FIGHT_19, + SFX_PLAYER_PISSED_OFF_FIGHT_20, + SFX_PLAYER_PISSED_OFF_FIGHT_21, + SFX_PLAYER_PISSED_OFF_FIGHT_22, + SFX_PLAYER_PISSED_OFF_FIGHT_23, + SFX_PLAYER_PISSED_OFF_FIGHT_24, + SFX_PLAYER_PISSED_OFF_FIGHT_25, + SFX_PLAYER_PISSED_OFF_FIGHT_26, + SFX_PLAYER_PISSED_OFF_FIGHT_27, + SFX_PLAYER_PISSED_OFF_FIGHT_28, + SFX_PLAYER_PISSED_OFF_FIGHT_29, + SFX_PLAYER_PISSED_OFF_FIGHT_30, + SFX_PLAYER_PISSED_OFF_FIGHT_31, + SFX_PLAYER_PISSED_OFF_FIGHT_32, + SFX_PLAYER_PISSED_OFF_FIGHT_33, + SFX_PLAYER_PISSED_OFF_FIGHT_34, + SFX_PLAYER_PISSED_OFF_FIGHT_35, + SFX_PLAYER_PISSED_OFF_FIGHT_36, + SFX_PLAYER_PISSED_OFF_FIGHT_37, + SFX_PLAYER_PISSED_OFF_FIGHT_38, + SFX_PLAYER_PISSED_OFF_FIGHT_39, + SFX_PLAYER_PISSED_OFF_FIGHT_40, + SFX_PLAYER_PISSED_OFF_FIGHT_41, + SFX_PLAYER_PISSED_OFF_FIGHT_42, + SFX_PLAYER_PISSED_OFF_FIGHT_43, + SFX_PLAYER_PISSED_OFF_FIGHT_44, + SFX_PLAYER_PISSED_OFF_FIGHT_45, + SFX_PLAYER_PISSED_OFF_FIGHT_46, + SFX_PLAYER_PISSED_OFF_FIGHT_47, + SFX_PLAYER_PISSED_OFF_FIGHT_48, + SFX_PLAYER_PISSED_OFF_FIGHT_49, + SFX_PLAYER_PISSED_OFF_FIGHT_50, + SFX_PLAYER_PISSED_OFF_FIGHT_51, + SFX_PLAYER_PISSED_OFF_FIGHT_52, + SFX_PLAYER_PISSED_OFF_FIGHT_53, + SFX_PLAYER_PISSED_OFF_FIGHT_54, + SFX_PLAYER_PISSED_OFF_FIGHT_55, + SFX_PLAYER_PISSED_OFF_FIGHT_56, + SFX_PLAYER_PISSED_OFF_FIGHT_57, + SFX_PLAYER_PISSED_OFF_FIGHT_58, + SFX_PLAYER_PISSED_OFF_FIGHT_59, + SFX_PLAYER_PISSED_OFF_FIGHT_60, + SFX_PLAYER_PISSED_OFF_FIGHT_61, + SFX_PLAYER_PISSED_OFF_JACKED_1, + SFX_PLAYER_PISSED_OFF_JACKED_2, + SFX_PLAYER_PISSED_OFF_JACKED_3, + SFX_PLAYER_PISSED_OFF_JACKED_4, + SFX_PLAYER_PISSED_OFF_JACKED_5, + SFX_PLAYER_PISSED_OFF_JACKED_6, + SFX_PLAYER_PISSED_OFF_JACKED_7, + SFX_PLAYER_PISSED_OFF_JACKED_8, + SFX_PLAYER_PISSED_OFF_JACKED_9, + SFX_PLAYER_PISSED_OFF_JACKED_10, + SFX_PLAYER_PISSED_OFF_JACKED_11, + SFX_PLAYER_PISSED_OFF_JACKED_12, + SFX_PLAYER_PISSED_OFF_JACKED_13, + SFX_PLAYER_PISSED_OFF_JACKED_14, + SFX_PLAYER_PISSED_OFF_JACKED_15, + SFX_PLAYER_PISSED_OFF_JACKED_16, + SFX_PLAYER_PISSED_OFF_JACKED_17, + SFX_PLAYER_PISSED_OFF_JACKED_18, + SFX_PLAYER_PISSED_OFF_JACKED_19, + SFX_PLAYER_PISSED_OFF_JACKED_20, + SFX_PLAYER_PISSED_OFF_JACKED_21, + SFX_PLAYER_PISSED_OFF_JACKING_1, + SFX_PLAYER_PISSED_OFF_JACKING_2, + SFX_PLAYER_PISSED_OFF_JACKING_3, + SFX_PLAYER_PISSED_OFF_JACKING_4, + SFX_PLAYER_PISSED_OFF_JACKING_5, + SFX_PLAYER_PISSED_OFF_JACKING_6, + SFX_PLAYER_PISSED_OFF_JACKING_7, + SFX_PLAYER_PISSED_OFF_JACKING_8, + SFX_PLAYER_PISSED_OFF_JACKING_9, + SFX_PLAYER_PISSED_OFF_JACKING_10, + SFX_PLAYER_PISSED_OFF_JACKING_11, + SFX_PLAYER_PISSED_OFF_JACKING_12, + SFX_PLAYER_PISSED_OFF_JACKING_13, + SFX_PLAYER_PISSED_OFF_JACKING_14, + SFX_PLAYER_PISSED_OFF_JACKING_15, + SFX_PLAYER_PISSED_OFF_JACKING_16, + SFX_PLAYER_PISSED_OFF_JACKING_17, + SFX_PLAYER_PISSED_OFF_JACKING_18, + SFX_PLAYER_PISSED_OFF_JACKING_19, + SFX_PLAYER_PISSED_OFF_JACKING_20, + SFX_PLAYER_PISSED_OFF_JACKING_21, + SFX_PLAYER_PISSED_OFF_JACKING_22, + SFX_PLAYER_PISSED_OFF_JACKING_23, + SFX_PLAYER_PISSED_OFF_JACKING_24, + SFX_PLAYER_PISSED_OFF_JACKING_25, + SFX_PLAYER_PISSED_OFF_JACKING_26, + SFX_PLAYER_PISSED_OFF_JACKING_27, + SFX_PLAYER_PISSED_OFF_JACKING_28, + SFX_PLAYER_PISSED_OFF_JACKING_29, + SFX_PLAYER_PISSED_OFF_JACKING_30, + SFX_PLAYER_PISSED_OFF_JACKING_31, + SFX_PLAYER_PISSED_OFF_JACKING_32, + SFX_PLAYER_PISSED_OFF_JACKING_33, + SFX_PLAYER_PISSED_OFF_JACKING_34, + SFX_PLAYER_PISSED_OFF_JACKING_35, + SFX_PLAYER_PISSED_OFF_JACKING_36, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_1, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_2, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_3, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_4, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_5, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_6, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_7, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_8, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_9, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_10, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_11, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_12, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_13, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_14, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_15, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_16, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_17, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_18, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_19, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_20, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_21, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_22, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_23, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_24, + SFX_PLAYER_PISSED_OFF_PICK_UP_CASH_25, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_1, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_2, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_3, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_4, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_5, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_6, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_7, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_8, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_9, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_10, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_11, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_12, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_13, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_14, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_15, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_16, + SFX_PLAYER_PISSED_OFF_PICK_UP_HOOKER_17, + SFX_PLAYER_PISSED_OFF_PULL_GUN_1, + SFX_PLAYER_PISSED_OFF_PULL_GUN_2, + SFX_PLAYER_PISSED_OFF_PULL_GUN_3, + SFX_PLAYER_PISSED_OFF_PULL_GUN_4, + SFX_PLAYER_PISSED_OFF_PULL_GUN_5, + SFX_PLAYER_PISSED_OFF_PULL_GUN_6, + SFX_PLAYER_PISSED_OFF_PULL_GUN_7, + SFX_PLAYER_PISSED_OFF_PULL_GUN_8, + SFX_PLAYER_PISSED_OFF_PULL_GUN_9, + SFX_PLAYER_PISSED_OFF_PULL_GUN_10, + SFX_PLAYER_PISSED_OFF_PULL_GUN_11, + SFX_PLAYER_PISSED_OFF_PULL_GUN_12, + SFX_PLAYER_PISSED_OFF_PULL_GUN_13, + SFX_PLAYER_PISSED_OFF_PULL_GUN_14, + SFX_PLAYER_PISSED_OFF_PULL_GUN_15, + SFX_PLAYER_PISSED_OFF_PULL_GUN_16, + SFX_PLAYER_PISSED_OFF_PULL_GUN_17, + SFX_PLAYER_PISSED_OFF_PULL_GUN_18, + SFX_PLAYER_PISSED_OFF_PULL_GUN_19, + SFX_PLAYER_PISSED_OFF_PULL_GUN_20, + SFX_PLAYER_PISSED_OFF_PULL_GUN_21, + SFX_PLAYER_PISSED_OFF_PULL_GUN_22, + SFX_PLAYER_PISSED_OFF_PULL_GUN_23, + SFX_PLAYER_PISSED_OFF_PULL_GUN_24, + SFX_PLAYER_PISSED_OFF_PULL_GUN_25, + SFX_PLAYER_PISSED_OFF_SHOOT_1, + SFX_PLAYER_PISSED_OFF_SHOOT_2, + SFX_PLAYER_PISSED_OFF_SHOOT_3, + SFX_PLAYER_PISSED_OFF_SHOOT_4, + SFX_PLAYER_PISSED_OFF_SHOOT_5, + SFX_PLAYER_PISSED_OFF_SHOOT_6, + SFX_PLAYER_PISSED_OFF_SHOOT_7, + SFX_PLAYER_PISSED_OFF_SHOOT_8, + SFX_PLAYER_PISSED_OFF_SHOOT_9, + SFX_PLAYER_PISSED_OFF_SHOOT_10, + SFX_PLAYER_PISSED_OFF_SHOOT_11, + SFX_PLAYER_PISSED_OFF_SHOOT_12, + SFX_PLAYER_PISSED_OFF_SHOOT_13, + SFX_PLAYER_PISSED_OFF_SHOOT_14, + SFX_PLAYER_PISSED_OFF_SHOOT_15, + SFX_PLAYER_PISSED_OFF_SHOOT_16, + SFX_PLAYER_PISSED_OFF_SHOOT_17, + SFX_PLAYER_PISSED_OFF_SHOOT_18, + SFX_PLAYER_PISSED_OFF_SHOOT_19, + SFX_PLAYER_PISSED_OFF_SHOOT_20, + SFX_PLAYER_PISSED_OFF_SHOOT_21, + SFX_PLAYER_PISSED_OFF_SHOOT_22, + SFX_PLAYER_PISSED_OFF_SHOOT_23, + SFX_PLAYER_PISSED_OFF_SHOOT_24, + SFX_PLAYER_PISSED_OFF_SHOOT_25, + SFX_PLAYER_PISSED_OFF_SHOOT_26, + SFX_PLAYER_PISSED_OFF_SHOOT_27, + SFX_PLAYER_PISSED_OFF_SHOOT_28, + SFX_PLAYER_PISSED_OFF_SHOOT_29, + + SFX_PLAYER_WISECRACKING_BUSTED_1, + SFX_PLAYER_WISECRACKING_BUSTED_2, + SFX_PLAYER_WISECRACKING_BUSTED_3, + SFX_PLAYER_WISECRACKING_BUSTED_4, + SFX_PLAYER_WISECRACKING_BUSTED_5, + SFX_PLAYER_WISECRACKING_BUSTED_6, + SFX_PLAYER_WISECRACKING_BUSTED_7, + SFX_PLAYER_WISECRACKING_BUSTED_8, + SFX_PLAYER_WISECRACKING_BUSTED_9, + SFX_PLAYER_WISECRACKING_BUSTED_10, + SFX_PLAYER_WISECRACKING_BUSTED_11, + SFX_PLAYER_WISECRACKING_BUSTED_12, + SFX_PLAYER_WISECRACKING_BUSTED_13, + SFX_PLAYER_WISECRACKING_BUSTED_14, + SFX_PLAYER_WISECRACKING_BUSTED_15, + SFX_PLAYER_WISECRACKING_BUSTED_16, + SFX_PLAYER_WISECRACKING_BUSTED_17, + SFX_PLAYER_WISECRACKING_BUSTED_18, + SFX_PLAYER_WISECRACKING_BUSTED_19, + SFX_PLAYER_WISECRACKING_BUSTED_20, + SFX_PLAYER_WISECRACKING_CHASED_1, + SFX_PLAYER_WISECRACKING_CHASED_2, + SFX_PLAYER_WISECRACKING_CHASED_3, + SFX_PLAYER_WISECRACKING_CHASED_4, + SFX_PLAYER_WISECRACKING_CHASED_5, + SFX_PLAYER_WISECRACKING_CHASED_6, + SFX_PLAYER_WISECRACKING_CHASED_7, + SFX_PLAYER_WISECRACKING_CRASH_1, + SFX_PLAYER_WISECRACKING_CRASH_2, + SFX_PLAYER_WISECRACKING_CRASH_3, + SFX_PLAYER_WISECRACKING_CRASH_4, + SFX_PLAYER_WISECRACKING_CRASH_5, + SFX_PLAYER_WISECRACKING_CRASH_6, + SFX_PLAYER_WISECRACKING_CRASH_7, + SFX_PLAYER_WISECRACKING_CRASH_8, + SFX_PLAYER_WISECRACKING_CRASH_9, + SFX_PLAYER_WISECRACKING_CRASH_10, + SFX_PLAYER_WISECRACKING_CRASH_11, + SFX_PLAYER_WISECRACKING_CRASH_12, + SFX_PLAYER_WISECRACKING_CRASH_13, + SFX_PLAYER_WISECRACKING_CRASH_14, + SFX_PLAYER_WISECRACKING_CRASH_15, + SFX_PLAYER_WISECRACKING_CRASH_16, + SFX_PLAYER_WISECRACKING_CRASH_17, + SFX_PLAYER_WISECRACKING_CRASH_18, + SFX_PLAYER_WISECRACKING_CRASH_19, + SFX_PLAYER_WISECRACKING_FIGHT_1, + SFX_PLAYER_WISECRACKING_FIGHT_2, + SFX_PLAYER_WISECRACKING_FIGHT_3, + SFX_PLAYER_WISECRACKING_FIGHT_4, + SFX_PLAYER_WISECRACKING_FIGHT_5, + SFX_PLAYER_WISECRACKING_FIGHT_6, + SFX_PLAYER_WISECRACKING_FIGHT_7, + SFX_PLAYER_WISECRACKING_FIGHT_8, + SFX_PLAYER_WISECRACKING_FIGHT_9, + SFX_PLAYER_WISECRACKING_FIGHT_10, + SFX_PLAYER_WISECRACKING_FIGHT_11, + SFX_PLAYER_WISECRACKING_FIGHT_12, + SFX_PLAYER_WISECRACKING_FIGHT_13, + SFX_PLAYER_WISECRACKING_FIGHT_14, + SFX_PLAYER_WISECRACKING_FIGHT_15, + SFX_PLAYER_WISECRACKING_FIGHT_16, + SFX_PLAYER_WISECRACKING_FIGHT_17, + SFX_PLAYER_WISECRACKING_FIGHT_18, + SFX_PLAYER_WISECRACKING_FIGHT_19, + SFX_PLAYER_WISECRACKING_FIGHT_20, + SFX_PLAYER_WISECRACKING_FIGHT_21, + SFX_PLAYER_WISECRACKING_FIGHT_22, + SFX_PLAYER_WISECRACKING_FIGHT_23, + SFX_PLAYER_WISECRACKING_FIGHT_24, + SFX_PLAYER_WISECRACKING_FIGHT_25, + SFX_PLAYER_WISECRACKING_FIGHT_26, + SFX_PLAYER_WISECRACKING_FIGHT_27, + SFX_PLAYER_WISECRACKING_JACKED_1, + SFX_PLAYER_WISECRACKING_JACKED_2, + SFX_PLAYER_WISECRACKING_JACKED_3, + SFX_PLAYER_WISECRACKING_JACKED_4, + SFX_PLAYER_WISECRACKING_JACKED_5, + SFX_PLAYER_WISECRACKING_JACKED_6, + SFX_PLAYER_WISECRACKING_JACKED_7, + SFX_PLAYER_WISECRACKING_JACKED_8, + SFX_PLAYER_WISECRACKING_JACKED_9, + SFX_PLAYER_WISECRACKING_JACKED_10, + SFX_PLAYER_WISECRACKING_JACKED_11, + SFX_PLAYER_WISECRACKING_JACKED_12, + SFX_PLAYER_WISECRACKING_JACKED_13, + SFX_PLAYER_WISECRACKING_JACKED_14, + SFX_PLAYER_WISECRACKING_JACKED_15, + SFX_PLAYER_WISECRACKING_JACKED_16, + SFX_PLAYER_WISECRACKING_JACKED_17, + SFX_PLAYER_WISECRACKING_JACKED_18, + SFX_PLAYER_WISECRACKING_JACKING_1, + SFX_PLAYER_WISECRACKING_JACKING_2, + SFX_PLAYER_WISECRACKING_JACKING_3, + SFX_PLAYER_WISECRACKING_JACKING_4, + SFX_PLAYER_WISECRACKING_JACKING_5, + SFX_PLAYER_WISECRACKING_JACKING_6, + SFX_PLAYER_WISECRACKING_JACKING_7, + SFX_PLAYER_WISECRACKING_JACKING_8, + SFX_PLAYER_WISECRACKING_JACKING_9, + SFX_PLAYER_WISECRACKING_JACKING_10, + SFX_PLAYER_WISECRACKING_JACKING_11, + SFX_PLAYER_WISECRACKING_JACKING_12, + SFX_PLAYER_WISECRACKING_JACKING_13, + SFX_PLAYER_WISECRACKING_JACKING_14, + SFX_PLAYER_WISECRACKING_JACKING_15, + SFX_PLAYER_WISECRACKING_JACKING_16, + SFX_PLAYER_WISECRACKING_JACKING_17, + SFX_PLAYER_WISECRACKING_JACKING_18, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_1, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_2, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_3, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_4, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_5, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_6, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_7, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_8, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_9, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_10, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_11, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_12, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_13, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_14, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_15, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_16, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_17, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_18, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_19, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_20, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_21, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_22, + SFX_PLAYER_WISECRACKING_PICK_UP_CASH_23, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_1, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_2, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_3, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_4, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_5, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_6, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_7, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_8, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_9, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_10, + SFX_PLAYER_WISECRACKING_PICK_UP_HOOKER_11, + SFX_PLAYER_WISECRACKING_PULL_GUN_1, + SFX_PLAYER_WISECRACKING_PULL_GUN_2, + SFX_PLAYER_WISECRACKING_PULL_GUN_3, + SFX_PLAYER_WISECRACKING_PULL_GUN_4, + SFX_PLAYER_WISECRACKING_PULL_GUN_5, + SFX_PLAYER_WISECRACKING_PULL_GUN_6, + SFX_PLAYER_WISECRACKING_PULL_GUN_7, + SFX_PLAYER_WISECRACKING_PULL_GUN_8, + SFX_PLAYER_WISECRACKING_PULL_GUN_9, + SFX_PLAYER_WISECRACKING_PULL_GUN_10, + SFX_PLAYER_WISECRACKING_PULL_GUN_11, + SFX_PLAYER_WISECRACKING_PULL_GUN_12, + SFX_PLAYER_WISECRACKING_PULL_GUN_13, + SFX_PLAYER_WISECRACKING_PULL_GUN_14, + SFX_PLAYER_WISECRACKING_PULL_GUN_15, + SFX_PLAYER_WISECRACKING_PULL_GUN_16, + SFX_PLAYER_WISECRACKING_PULL_GUN_17, + SFX_PLAYER_WISECRACKING_PULL_GUN_18, + SFX_PLAYER_WISECRACKING_PULL_GUN_19, + SFX_PLAYER_WISECRACKING_SEX_1, + SFX_PLAYER_WISECRACKING_SEX_2, + SFX_PLAYER_WISECRACKING_SEX_3, + SFX_PLAYER_WISECRACKING_SEX_4, + SFX_PLAYER_WISECRACKING_SEX_5, + SFX_PLAYER_WISECRACKING_SEX_6, + SFX_PLAYER_WISECRACKING_SEX_7, + SFX_PLAYER_WISECRACKING_SEX_8, + SFX_PLAYER_WISECRACKING_SEX_9, + SFX_PLAYER_WISECRACKING_SEX_10, + SFX_PLAYER_WISECRACKING_SHOOT_1, + SFX_PLAYER_WISECRACKING_SHOOT_2, + SFX_PLAYER_WISECRACKING_SHOOT_3, + SFX_PLAYER_WISECRACKING_SHOOT_4, + SFX_PLAYER_WISECRACKING_SHOOT_5, + SFX_PLAYER_WISECRACKING_SHOOT_6, + SFX_PLAYER_WISECRACKING_SHOOT_7, + SFX_PLAYER_WISECRACKING_SHOOT_8, + SFX_PLAYER_WISECRACKING_SHOOT_9, + SFX_PLAYER_DEATH, + SFX_PLAYER_AFTERSEX_1, + SFX_PLAYER_AFTERSEX_2, + SFX_PLAYER_AFTERSEX_3, + SFX_PLAYER_AFTERSEX_4, + SFX_PLAYER_AFTERSEX_5, + SFX_PLAYER_AFTERSEX_6, + SFX_PLAYER_AFTERSEX_7, + SFX_PLAYER_AFTERSEX_8, + SFX_PLAYER_AFTERSEX_9, + SFX_PLAYER_AFTERSEX_10, + SFX_PLAYER_AFTERSEX_11, + SFX_PLAYER_AFTERSEX_12, + SFX_PLAYER_AFTERSEX_13, + SFX_PLAYER_AFTERSEX_14, + SFX_PLAYER_AFTERSEX_15, + SFX_PLAYER_AFTERSEX_16, + SFX_PLAYER_AFTERSEX_17, + SFX_PLAYER_AFTERSEX_18, + SFX_PLAYER_HIT_BULLET_1, + SFX_PLAYER_HIT_BULLET_2, + SFX_PLAYER_HIT_BULLET_3, + SFX_PLAYER_HIT_BULLET_4, + SFX_PLAYER_HIT_BULLET_5, + SFX_PLAYER_HIT_BULLET_6, + SFX_PLAYER_HIT_BULLET_7, + SFX_PLAYER_HIT_BULLET_8, + SFX_PLAYER_HIT_BULLET_9, + SFX_PLAYER_HIT_BULLET_10, + SFX_PLAYER_HIT_BULLET_11, + SFX_PLAYER_HIT_BULLET_12, + SFX_PLAYER_HIT_BULLET_13, + SFX_PLAYER_HIT_BULLET_14, + SFX_PLAYER_HIT_BULLET_15, + SFX_PLAYER_HIT_BULLET_16, + SFX_PLAYER_HIT_BULLET_17, + SFX_PLAYER_HIT_BULLET_18, + SFX_PLAYER_HIT_BULLET_19, + SFX_PLAYER_HIT_BULLET_20, + SFX_PLAYER_HIT_BULLET_21, + SFX_PLAYER_HIT_BULLET_22, + SFX_PLAYER_HIT_BULLET_23, + SFX_PLAYER_HIT_BULLET_24, + SFX_PLAYER_HIT_BULLET_25, + SFX_PLAYER_HIT_BULLET_26, + SFX_PLAYER_HIT_BULLET_27, + SFX_PLAYER_HIT_BULLET_28, + SFX_PLAYER_HIT_BULLET_29, + SFX_PLAYER_HIT_BULLET_30, + SFX_PLAYER_HIT_BULLET_31, + SFX_PLAYER_HIT_BULLET_32, + SFX_PLAYER_HIT_BULLET_33, + SFX_PLAYER_HIT_GROUND_1, + SFX_PLAYER_HIT_GROUND_2, + SFX_PLAYER_HIT_GROUND_3, + SFX_PLAYER_HIT_GROUND_4, + SFX_PLAYER_HIT_GROUND_5, + SFX_PLAYER_HIT_GROUND_6, + SFX_PLAYER_HIT_GROUND_7, + SFX_PLAYER_HIT_GROUND_8, + SFX_PLAYER_HIT_GROUND_9, + SFX_PLAYER_HIT_GROUND_10, + SFX_PLAYER_HIT_GROUND_11, + SFX_PLAYER_HIT_GROUND_12, + SFX_PLAYER_HIT_GROUND_13, + SFX_PLAYER_HIT_GROUND_14, + SFX_PLAYER_HIT_GROUND_15, + SFX_PLAYER_HIT_GROUND_16, + SFX_PLAYER_HIT_GROUND_17, + SFX_PLAYER_HIT_GROUND_18, + SFX_PLAYER_HIT_GROUND_19, + SFX_PLAYER_HIT_GROUND_20, + SFX_PLAYER_HIT_GROUND_21, + SFX_PLAYER_HIT_GROUND_22, + SFX_PLAYER_HIT_GROUND_23, + SFX_PLAYER_HIT_GROUND_24, + SFX_PLAYER_HIT_GROUND_25, + SFX_PLAYER_HIT_GROUND_26, + SFX_PLAYER_HIT_GROUND_27, + SFX_PLAYER_HIT_GROUND_28, + SFX_PLAYER_HIT_GROUND_29, + SFX_PLAYER_HIT_GROUND_30, + SFX_PLAYER_HIT_GROUND_31, + SFX_PLAYER_HIT_GROUND_32, + SFX_PLAYER_HIT_GROUND_33, + SFX_PLAYER_HIT_GROUND_34, + SFX_PLAYER_HIT_GROUND_35, + SFX_PLAYER_HIT_FIST_1, + SFX_PLAYER_HIT_FIST_2, + SFX_PLAYER_HIT_FIST_3, + SFX_PLAYER_HIT_FIST_4, + SFX_PLAYER_HIT_FIST_5, + SFX_PLAYER_HIT_FIST_6, + SFX_PLAYER_HIT_FIST_7, + SFX_PLAYER_HIT_FIST_8, + SFX_PLAYER_HIT_FIST_9, + SFX_PLAYER_HIT_FIST_10, + SFX_PLAYER_HIT_FIST_11, + SFX_PLAYER_HIT_FIST_12, + SFX_PLAYER_HIT_FIST_13, + SFX_PLAYER_HIT_FIST_14, + SFX_PLAYER_HIT_FIST_15, + SFX_PLAYER_HIT_FIST_16, + SFX_PLAYER_HIT_FIST_17, + SFX_PLAYER_HIT_FIST_18, + SFX_PLAYER_HIT_FIST_19, + SFX_PLAYER_HIT_FIST_20, + SFX_PLAYER_HIT_FIST_21, + SFX_PLAYER_HIT_FIST_22, + SFX_PLAYER_HIT_FIST_23, + SFX_PLAYER_HIT_FIST_24, + SFX_PLAYER_HIT_FIST_25, + SFX_PLAYER_HIT_FIST_26, + SFX_PLAYER_HIT_FIST_27, + SFX_PLAYER_HIT_FIST_28, + SFX_PLAYER_HIT_FIST_29, + SFX_PLAYER_HIT_FIST_30, + SFX_PLAYER_HIT_FIST_31, + SFX_PLAYER_HIT_FIST_32, + SFX_PLAYER_HIT_FIST_33, + SFX_PLAYER_HIT_FIST_34, + SFX_PLAYER_HIT_FIST_35, + SFX_PLAYER_HIT_FIST_36, + SFX_PLAYER_HIT_FIST_37, + SFX_PLAYER_HIT_FIST_38, + SFX_PLAYER_HIT_FIST_39, + SFX_PLAYER_HIT_FIST_40, + SFX_PLAYER_HIT_FIST_41, + SFX_PLAYER_HIT_FIST_42, + SFX_PLAYER_ON_FIRE_1, + SFX_PLAYER_ON_FIRE_2, + SFX_PLAYER_ON_FIRE_3, + SFX_PLAYER_ON_FIRE_4, + SFX_PLAYER_ON_FIRE_5, + SFX_PLAYER_ON_FIRE_6, + SFX_PLAYER_ON_FIRE_7, + SFX_PLAYER_ON_FIRE_8, + SFX_PLAYER_ON_FIRE_9, + SFX_PLAYER_ON_FIRE_10, + SFX_PLAYER_ON_FIRE_11, + SFX_PLAYER_ON_FIRE_12, + SFX_PLAYER_ON_FIRE_13, + SFX_PLAYER_ON_FIRE_14, + SFX_PLAYER_ON_FIRE_15, + SFX_PLAYER_ON_FIRE_16, + TOTAL_AUDIO_SAMPLES, NO_SAMPLE, // shorthands diff --git a/src/audio/AudioScriptObject.cpp b/src/audio/AudioScriptObject.cpp index ac30f757..ac4bebcb 100644 --- a/src/audio/AudioScriptObject.cpp +++ b/src/audio/AudioScriptObject.cpp @@ -3,6 +3,7 @@ #include "AudioScriptObject.h" #include "Pools.h" #include "DMAudio.h" +#include "SaveBuf.h" cAudioScriptObject::cAudioScriptObject() { @@ -23,25 +24,25 @@ cAudioScriptObject::Reset() } void * -cAudioScriptObject::operator new(size_t sz) +cAudioScriptObject::operator new(size_t sz) throw() { return CPools::GetAudioScriptObjectPool()->New(); } void * -cAudioScriptObject::operator new(size_t sz, int handle) +cAudioScriptObject::operator new(size_t sz, int handle) throw() { return CPools::GetAudioScriptObjectPool()->New(handle); } void -cAudioScriptObject::operator delete(void *p, size_t sz) +cAudioScriptObject::operator delete(void *p, size_t sz) throw() { CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p); } void -cAudioScriptObject::operator delete(void *p, int handle) +cAudioScriptObject::operator delete(void *p, int handle) throw() { CPools::GetAudioScriptObjectPool()->Delete((cAudioScriptObject *)p); } @@ -53,12 +54,14 @@ cAudioScriptObject::LoadAllAudioScriptObjects(uint8 *buf, uint32 size) CheckSaveHeader(buf, 'A', 'U', 'D', '\0', size - SAVE_HEADER_SIZE); - int32 pool_size = ReadSaveBuf(buf); + int32 pool_size; + ReadSaveBuf(&pool_size, buf); for (int32 i = 0; i < pool_size; i++) { - int handle = ReadSaveBuf(buf); + int32 handle; + ReadSaveBuf(&handle, buf); cAudioScriptObject *p = new(handle) cAudioScriptObject; assert(p != nil); - *p = ReadSaveBuf(buf); + ReadSaveBuf(p, buf); p->AudioEntity = DMAudio.CreateLoopingScriptObject(p); } @@ -90,6 +93,8 @@ cAudioScriptObject::SaveAllAudioScriptObjects(uint8 *buf, uint32 *size) void PlayOneShotScriptObject(uint8 id, CVector const &pos) { + if (!DMAudio.IsAudioInitialised()) return; + cAudioScriptObject *audioScriptObject = new cAudioScriptObject(); audioScriptObject->Posn = pos; audioScriptObject->AudioId = id; diff --git a/src/audio/AudioScriptObject.h b/src/audio/AudioScriptObject.h index 8110b2bb..b9a7e61b 100644 --- a/src/audio/AudioScriptObject.h +++ b/src/audio/AudioScriptObject.h @@ -12,10 +12,10 @@ public: void Reset(); /// ok - static void* operator new(size_t); - static void* operator new(size_t, int); - static void operator delete(void*, size_t); - static void operator delete(void*, int); + static void* operator new(size_t) throw(); + static void* operator new(size_t, int) throw(); + static void operator delete(void*, size_t) throw(); + static void operator delete(void*, int) throw(); static void LoadAllAudioScriptObjects(uint8 *buf, uint32 size); static void SaveAllAudioScriptObjects(uint8 *buf, uint32 *size); diff --git a/src/audio/DMAudio.cpp b/src/audio/DMAudio.cpp index 7c99e89f..bc77361f 100644 --- a/src/audio/DMAudio.cpp +++ b/src/audio/DMAudio.cpp @@ -39,7 +39,7 @@ cDMAudio::DestroyEntity(int32 audioEntity) } void -cDMAudio::SetEntityStatus(int32 audioEntity, uint8 status) +cDMAudio::SetEntityStatus(int32 audioEntity, bool8 status) { AudioManager.SetEntityStatus(audioEntity, status); } @@ -57,7 +57,7 @@ cDMAudio::DestroyAllGameCreatedEntities(void) } void -cDMAudio::SetMonoMode(uint8 mono) +cDMAudio::SetMonoMode(bool8 mono) { AudioManager.SetMonoMode(mono); } @@ -142,7 +142,7 @@ cDMAudio::SetSpeakerConfig(int32 config) AudioManager.SetSpeakerConfig(config); } -bool +bool8 cDMAudio::IsMP3RadioChannelAvailable(void) { return AudioManager.IsMP3RadioChannelAvailable(); @@ -161,12 +161,12 @@ cDMAudio::ReacquireDigitalHandle(void) } void -cDMAudio::SetDynamicAcousticModelingStatus(uint8 status) +cDMAudio::SetDynamicAcousticModelingStatus(bool8 status) { AudioManager.SetDynamicAcousticModelingStatus(status); } -bool +bool8 cDMAudio::CheckForAnAudioFileOnCD(void) { return AudioManager.CheckForAnAudioFileOnCD(); @@ -178,7 +178,7 @@ cDMAudio::GetCDAudioDriveLetter(void) return AudioManager.GetCDAudioDriveLetter(); } -bool +bool8 cDMAudio::IsAudioInitialised(void) { return AudioManager.IsAudioInitialised(); @@ -196,7 +196,7 @@ cDMAudio::CreateLoopingScriptObject(cAudioScriptObject *scriptObject) int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, scriptObject); if ( AEHANDLE_IS_OK(audioEntity) ) - AudioManager.SetEntityStatus(audioEntity, true); + AudioManager.SetEntityStatus(audioEntity, TRUE); return audioEntity; } @@ -214,7 +214,7 @@ cDMAudio::CreateOneShotScriptObject(cAudioScriptObject *scriptObject) if ( AEHANDLE_IS_OK(audioEntity) ) { - AudioManager.SetEntityStatus(audioEntity, true); + AudioManager.SetEntityStatus(audioEntity, TRUE); AudioManager.PlayOneShot(audioEntity, scriptObject->AudioId, 0.0f); } } @@ -244,7 +244,7 @@ cDMAudio::PlayRadioAnnouncement(uint32 announcement) } void -cDMAudio::PlayFrontEndTrack(uint32 track, uint8 frontendFlag) +cDMAudio::PlayFrontEndTrack(uint32 track, bool8 frontendFlag) { MusicManager.PlayFrontEndTrack(track, frontendFlag); } @@ -309,7 +309,7 @@ cDMAudio::PlayLoadedMissionAudio(uint8 slot) AudioManager.PlayLoadedMissionAudio(slot); } -bool +bool8 cDMAudio::IsMissionAudioSampleFinished(uint8 slot) { return AudioManager.IsMissionAudioSampleFinished(slot); @@ -340,7 +340,7 @@ cDMAudio::SetRadioChannel(uint32 radio, int32 pos) } void -cDMAudio::SetStartingTrackPositions(uint8 isStartGame) +cDMAudio::SetStartingTrackPositions(bool8 isStartGame) { MusicManager.SetStartingTrackPositions(isStartGame); } @@ -364,7 +364,7 @@ cDMAudio::GetRadioPosition(uint32 station) } void -cDMAudio::SetPedTalkingStatus(CPed *ped, uint8 status) +cDMAudio::SetPedTalkingStatus(CPed *ped, bool8 status) { return AudioManager.SetPedTalkingStatus(ped, status); } @@ -376,7 +376,7 @@ cDMAudio::SetPlayersMood(uint8 mood, uint32 time) } void -cDMAudio::ShutUpPlayerTalking(uint8 state) +cDMAudio::ShutUpPlayerTalking(bool8 state) { AudioManager.m_bIsPlayerShutUp = state; } \ No newline at end of file diff --git a/src/audio/DMAudio.h b/src/audio/DMAudio.h index 2c10043f..5b684fd3 100644 --- a/src/audio/DMAudio.h +++ b/src/audio/DMAudio.h @@ -25,11 +25,11 @@ public: int32 CreateEntity(eAudioType type, void *UID); void DestroyEntity(int32 audioEntity); - void SetEntityStatus(int32 audioEntity, uint8 status); + void SetEntityStatus(int32 audioEntity, bool8 status); void PlayOneShot(int32 audioEntity, uint16 oneShot, float volume); void DestroyAllGameCreatedEntities(void); - void SetMonoMode(uint8 mono); + void SetMonoMode(bool8 mono); void SetMP3BoostVolume(uint8 volume); void SetEffectsMasterVolume(uint8 volume); void SetMusicMasterVolume(uint8 volume); @@ -46,17 +46,17 @@ public: void SetSpeakerConfig(int32 config); - bool IsMP3RadioChannelAvailable(void); + bool8 IsMP3RadioChannelAvailable(void); void ReleaseDigitalHandle(void); void ReacquireDigitalHandle(void); - void SetDynamicAcousticModelingStatus(uint8 status); + void SetDynamicAcousticModelingStatus(bool8 status); - bool CheckForAnAudioFileOnCD(void); + bool8 CheckForAnAudioFileOnCD(void); char GetCDAudioDriveLetter(void); - bool IsAudioInitialised(void); + bool8 IsAudioInitialised(void); void ReportCrime(eCrimeType crime, CVector const &pos); @@ -70,7 +70,7 @@ public: void PlayFrontEndSound(uint16 frontend, uint32 volume); void PlayRadioAnnouncement(uint32 announcement); - void PlayFrontEndTrack(uint32 track, uint8 frontendFlag); + void PlayFrontEndTrack(uint32 track, bool8 frontendFlag); void StopFrontEndTrack(void); void ResetTimers(uint32 time); @@ -85,19 +85,19 @@ public: uint8 GetMissionAudioLoadingStatus(uint8 slot); void SetMissionAudioLocation(uint8 slot, float x, float y, float z); void PlayLoadedMissionAudio(uint8 slot); - bool IsMissionAudioSampleFinished(uint8 slot); + bool8 IsMissionAudioSampleFinished(uint8 slot); void ClearMissionAudio(uint8 slot); uint8 GetRadioInCar(void); void SetRadioInCar(uint32 radio); void SetRadioChannel(uint32 radio, int32 pos); - void SetStartingTrackPositions(uint8 isStartGame); + void SetStartingTrackPositions(bool8 isStartGame); float *GetListenTimeArray(); uint32 GetFavouriteRadioStation(); int32 GetRadioPosition(uint32 station); - void SetPedTalkingStatus(class CPed *ped, uint8 status); + void SetPedTalkingStatus(class CPed *ped, bool8 status); void SetPlayersMood(uint8 mood, uint32 time); - void ShutUpPlayerTalking(uint8 state); + void ShutUpPlayerTalking(bool8 state); }; extern cDMAudio DMAudio; diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp index 9c6f61f6..e569f8c7 100644 --- a/src/audio/MusicManager.cpp +++ b/src/audio/MusicManager.cpp @@ -28,7 +28,7 @@ static_assert(false, "R*'s radio implementation is quite buggy, RADIO_SCROLL_TO_ cMusicManager MusicManager; int32 gNumRetunePresses; int32 gRetuneCounter; -bool g_bAnnouncementReadPosAlready; +bool8 g_bAnnouncementReadPosAlready; uint8 RadioStaticCounter = 5; uint32 RadioStaticTimer; @@ -50,13 +50,13 @@ uint32 NewGameRadioTimers[10] = cMusicManager::cMusicManager() { - m_bIsInitialised = false; - m_bDisabled = false; + m_bIsInitialised = FALSE; + m_bDisabled = FALSE; m_nFrontendTrack = NO_TRACK; m_nPlayingTrack = NO_TRACK; m_nUpcomingMusicMode = MUSICMODE_DISABLED; m_nMusicMode = MUSICMODE_DISABLED; - m_bSetNextStation = false; + m_bSetNextStation = FALSE; for (int i = 0; i < NUM_RADIOS; i++) aListenTimeArray[i] = 0.0f; @@ -66,7 +66,7 @@ cMusicManager::cMusicManager() m_nCurrentVolume = 0; m_nMaxVolume = 0; m_nAnnouncement = NO_TRACK; - m_bAnnouncementInProgress = false; + m_bAnnouncementInProgress = FALSE; } void @@ -74,38 +74,38 @@ cMusicManager::ResetMusicAfterReload() { float afRadioTime[NUM_RADIOS]; - m_bRadioSetByScript = false; + m_bRadioSetByScript = FALSE; m_nRadioStationScript = WILDSTYLE; m_nRadioPosition = -1; m_nAnnouncement = NO_TRACK; - m_bAnnouncementInProgress = false; - m_bSetNextStation = false; + m_bAnnouncementInProgress = FALSE; + m_bSetNextStation = FALSE; RadioStaticTimer = 0; gNumRetunePresses = 0; gRetuneCounter = 0; m_nFrontendTrack = NO_TRACK; m_nPlayingTrack = NO_TRACK; - m_FrontendLoopFlag = false; - m_bTrackChangeStarted = false; + m_FrontendLoopFlag = FALSE; + m_bTrackChangeStarted = FALSE; m_nNextTrack = NO_TRACK; - m_nNextLoopFlag = false; - m_bVerifyNextTrackStartedToPlay = false; - m_bGameplayAllowsRadio = false; - m_bRadioStreamReady = false; + m_nNextLoopFlag = FALSE; + m_bVerifyNextTrackStartedToPlay = FALSE; + m_bGameplayAllowsRadio = FALSE; + m_bRadioStreamReady = FALSE; nFramesSinceCutsceneEnded = -1; - m_bUserResumedGame = false; - m_bMusicModeChangeStarted = false; - m_bEarlyFrontendTrack = false; + m_bUserResumedGame = FALSE; + m_bMusicModeChangeStarted = FALSE; + m_bEarlyFrontendTrack = FALSE; m_nVolumeLatency = 0; m_nCurrentVolume = 0; m_nMaxVolume = 0; - bool bRadioWasEverListened = false; + bool8 bRadioWasEverListened = FALSE; for (int i = 0; i < NUM_RADIOS; i++) { afRadioTime[i] = CStats::GetFavoriteRadioStationList(i); if (!bRadioWasEverListened && afRadioTime[i] != 0.0f) - bRadioWasEverListened = true; + bRadioWasEverListened = TRUE; } if (!bRadioWasEverListened) return; @@ -125,7 +125,7 @@ cMusicManager::ResetMusicAfterReload() } void -cMusicManager::SetStartingTrackPositions(uint8 isNewGameTimer) +cMusicManager::SetStartingTrackPositions(bool8 isNewGameTimer) { int pos; @@ -174,15 +174,15 @@ cMusicManager::SetStartingTrackPositions(uint8 isNewGameTimer) } } -bool +bool8 cMusicManager::Initialise() { if (!IsInitialised()) { - m_bIsInitialised = true; - SetStartingTrackPositions(false); - m_bResetTimers = false; + m_bIsInitialised = TRUE; + SetStartingTrackPositions(FALSE); + m_bResetTimers = FALSE; m_nResetTime = 0; - m_bRadioSetByScript = false; + m_bRadioSetByScript = FALSE; m_nRadioStationScript = WILDSTYLE; m_nRadioPosition = -1; m_nRadioInCar = NO_TRACK; @@ -192,18 +192,18 @@ cMusicManager::Initialise() m_nPlayingTrack = NO_TRACK; m_nUpcomingMusicMode = MUSICMODE_DISABLED; m_nMusicMode = MUSICMODE_DISABLED; - m_FrontendLoopFlag = false; - m_bTrackChangeStarted = false; + m_FrontendLoopFlag = FALSE; + m_bTrackChangeStarted = FALSE; m_nNextTrack = NO_TRACK; - m_nNextLoopFlag = false; - m_bVerifyNextTrackStartedToPlay = false; - m_bGameplayAllowsRadio = false; - m_bRadioStreamReady = false; + m_nNextLoopFlag = FALSE; + m_bVerifyNextTrackStartedToPlay = FALSE; + m_bGameplayAllowsRadio = FALSE; + m_bRadioStreamReady = FALSE; nFramesSinceCutsceneEnded = -1; - m_bUserResumedGame = false; - m_bMusicModeChangeStarted = false; + m_bUserResumedGame = FALSE; + m_bMusicModeChangeStarted = FALSE; m_nMusicModeToBeSet = MUSICMODE_DISABLED; - m_bEarlyFrontendTrack = false; + m_bEarlyFrontendTrack = FALSE; m_nVolumeLatency = 0; m_nCurrentVolume = 0; m_nMaxVolume = 0; @@ -216,11 +216,11 @@ cMusicManager::Terminate() { if (!IsInitialised()) return; - if (SampleManager.IsStreamPlaying(0)) { - SampleManager.StopStreamedFile(0); + if (SampleManager.IsStreamPlaying()) { + SampleManager.StopStreamedFile(); m_nPlayingTrack = NO_TRACK; } - m_bIsInitialised = false; + m_bIsInitialised = FALSE; } void @@ -230,29 +230,29 @@ cMusicManager::SetRadioChannelByScript(uint32 station, int32 pos) if (station == STREAMED_SOUND_RADIO_MP3_PLAYER) station = STREAMED_SOUND_CITY_AMBIENT; if (station <= STREAMED_SOUND_RADIO_POLICE) { - m_bRadioSetByScript = true; + m_bRadioSetByScript = TRUE; m_nRadioStationScript = station; m_nRadioPosition = pos == -1 ? -1 : pos % m_aTracks[station].m_nLength; } } } -bool +bool8 cMusicManager::PlayerInCar() { CVehicle *vehicle = AudioManager.FindVehicleOfPlayer(); if(!vehicle) - return false; + return FALSE; int32 State = FindPlayerPed()->m_nPedState; if(State == PED_DRAG_FROM_CAR || State == PED_EXIT_CAR || State == PED_ARRESTED) - return false; + return FALSE; if (vehicle->GetStatus() == STATUS_WRECKED) - return false; + return FALSE; - return true; + return TRUE; } uint32 @@ -310,31 +310,42 @@ cMusicManager::ChangeMusicMode(uint8 mode) switch (mode) { - case MUSICMODE_FRONTEND: m_nUpcomingMusicMode = MUSICMODE_FRONTEND; break; + case MUSICMODE_FRONTEND: + m_nUpcomingMusicMode = MUSICMODE_FRONTEND; + +#ifdef PAUSE_RADIO_IN_FRONTEND + // rewind those streams we weren't listening right now + for( uint32 i = STREAMED_SOUND_RADIO_WILD; i < STREAMED_SOUND_CUTSCENE_ASS_1; i++ ) { + m_aTracks[i].m_nPosition = GetTrackStartPos(i); + m_aTracks[i].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); + } +#endif + + break; case MUSICMODE_GAME: m_nUpcomingMusicMode = MUSICMODE_GAME; break; case MUSICMODE_CUTSCENE: m_nUpcomingMusicMode = MUSICMODE_CUTSCENE; - if (SampleManager.IsStreamPlaying(0)) { + if (SampleManager.IsStreamPlaying()) { if (m_nPlayingTrack != NO_TRACK) { RecordRadioStats(); - m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0); + m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(); m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); } } - SampleManager.StopStreamedFile(0); - while (SampleManager.IsStreamPlaying(0)) - SampleManager.StopStreamedFile(0); + SampleManager.StopStreamedFile(); + while (SampleManager.IsStreamPlaying()) + SampleManager.StopStreamedFile(); m_nMusicMode = m_nUpcomingMusicMode; - m_bMusicModeChangeStarted = false; - m_bTrackChangeStarted = false; + m_bMusicModeChangeStarted = FALSE; + m_bTrackChangeStarted = FALSE; m_nNextTrack = NO_TRACK; - m_nNextLoopFlag = false; - m_bVerifyNextTrackStartedToPlay = false; + m_nNextLoopFlag = FALSE; + m_bVerifyNextTrackStartedToPlay = FALSE; m_nPlayingTrack = NO_TRACK; m_nFrontendTrack = NO_TRACK; - m_bAnnouncementInProgress = false; + m_bAnnouncementInProgress = FALSE; m_nAnnouncement = NO_TRACK; - g_bAnnouncementReadPosAlready = false; + g_bAnnouncementReadPosAlready = FALSE; break; case MUSICMODE_DISABLE: m_nUpcomingMusicMode = MUSICMODE_DISABLED; break; default: return; @@ -344,7 +355,7 @@ cMusicManager::ChangeMusicMode(uint8 mode) void cMusicManager::ResetTimers(int32 time) { - m_bResetTimers = true; + m_bResetTimers = TRUE; m_nResetTime = time; } @@ -352,11 +363,11 @@ void cMusicManager::Service() { if (m_bResetTimers) { - m_bResetTimers = false; + m_bResetTimers = FALSE; m_nLastTrackServiceTime = m_nResetTime; } - static bool bRadioStatsRecorded = false; + static bool8 bRadioStatsRecorded = FALSE; if (!m_bIsInitialised || m_bDisabled) return; @@ -369,39 +380,39 @@ cMusicManager::Service() { case MUSICMODE_FRONTEND: ServiceFrontEndMode(); break; case MUSICMODE_GAME: ServiceGameMode(); break; - case MUSICMODE_CUTSCENE: SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 1, 0); break; + case MUSICMODE_CUTSCENE: SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, TRUE); break; } } else m_nMusicMode = MUSICMODE_DISABLED; } else { - m_bMusicModeChangeStarted = true; + m_bMusicModeChangeStarted = TRUE; if (!m_bUserResumedGame && !AudioManager.m_nUserPause && AudioManager.m_nPreviousUserPause) - m_bUserResumedGame = true; + m_bUserResumedGame = TRUE; if (AudioManager.m_FrameCounter % 4 == 0) { gNumRetunePresses = 0; gRetuneCounter = 0; - m_bSetNextStation = false; - if (SampleManager.IsStreamPlaying(0)) { + m_bSetNextStation = FALSE; + if (SampleManager.IsStreamPlaying()) { if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded) { RecordRadioStats(); - m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0); + m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(); m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); - bRadioStatsRecorded = true; + bRadioStatsRecorded = TRUE; } - SampleManager.StopStreamedFile(0); + SampleManager.StopStreamedFile(); } else { - bRadioStatsRecorded = false; + bRadioStatsRecorded = FALSE; m_nMusicMode = m_nMusicModeToBeSet; - m_bMusicModeChangeStarted = false; - m_bTrackChangeStarted = false; + m_bMusicModeChangeStarted = FALSE; + m_bTrackChangeStarted = FALSE; m_nNextTrack = NO_TRACK; - m_nNextLoopFlag = false; - m_bVerifyNextTrackStartedToPlay = false; + m_nNextLoopFlag = FALSE; + m_bVerifyNextTrackStartedToPlay = FALSE; m_nPlayingTrack = NO_TRACK; if (m_bEarlyFrontendTrack) - m_bEarlyFrontendTrack = false; + m_bEarlyFrontendTrack = FALSE; else m_nFrontendTrack = NO_TRACK; } @@ -412,15 +423,21 @@ cMusicManager::Service() void cMusicManager::ServiceFrontEndMode() { - static bool bRadioStatsRecorded = false; + static bool8 bRadioStatsRecorded = FALSE; + +#ifdef PAUSE_RADIO_IN_FRONTEND + // pause radio + for (uint32 i = STREAMED_SOUND_RADIO_WILD; i < STREAMED_SOUND_CUTSCENE_ASS_1; i++) + m_aTracks[i].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); +#endif if (m_bAnnouncementInProgress) { - SampleManager.StopStreamedFile(0); - if (SampleManager.IsStreamPlaying(0)) + SampleManager.StopStreamedFile(); + if (SampleManager.IsStreamPlaying()) return; - g_bAnnouncementReadPosAlready = false; + g_bAnnouncementReadPosAlready = FALSE; m_nAnnouncement = NO_TRACK; - m_bAnnouncementInProgress = false; + m_bAnnouncementInProgress = FALSE; m_nNextTrack = NO_TRACK; m_nFrontendTrack = NO_TRACK; m_nPlayingTrack = NO_TRACK; @@ -434,50 +451,50 @@ cMusicManager::ServiceFrontEndMode() } if (m_nNextTrack == m_nPlayingTrack) { - if (SampleManager.IsStreamPlaying(0)) { + if (SampleManager.IsStreamPlaying()) { if (m_nVolumeLatency > 0) m_nVolumeLatency--; else { if (m_nCurrentVolume < m_nMaxVolume) m_nCurrentVolume = Min(m_nMaxVolume, m_nCurrentVolume + 6); - SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, FALSE); } } else { if (m_nPlayingTrack == STREAMED_SOUND_RADIO_MP3_PLAYER) - SampleManager.StartStreamedFile(STREAMED_SOUND_RADIO_MP3_PLAYER, 0, 0); + SampleManager.StartStreamedFile(STREAMED_SOUND_RADIO_MP3_PLAYER, 0); else if (m_nPlayingTrack == STREAMED_SOUND_MISSION_COMPLETED && AudioManager.m_nUserPause == 0) ChangeMusicMode(MUSICMODE_GAME); } } else { - m_bTrackChangeStarted = true; - if (m_bVerifyNextTrackStartedToPlay || !SampleManager.IsStreamPlaying(0)) { - bRadioStatsRecorded = false; - if (SampleManager.IsStreamPlaying(0) || m_nNextTrack == NO_TRACK) { + m_bTrackChangeStarted = TRUE; + if (m_bVerifyNextTrackStartedToPlay || !SampleManager.IsStreamPlaying()) { + bRadioStatsRecorded = FALSE; + if (SampleManager.IsStreamPlaying() || m_nNextTrack == NO_TRACK) { m_nPlayingTrack = m_nNextTrack; - m_bVerifyNextTrackStartedToPlay = false; - m_bTrackChangeStarted = false; + m_bVerifyNextTrackStartedToPlay = FALSE; + m_bTrackChangeStarted = FALSE; } else { uint32 trackStartPos = (m_nNextTrack > STREAMED_SOUND_RADIO_POLICE) ? 0 : GetTrackStartPos(m_nNextTrack); if (m_nNextTrack != NO_TRACK) { - SampleManager.SetStreamedFileLoopFlag(m_nNextLoopFlag, 0); - SampleManager.StartStreamedFile(m_nNextTrack, trackStartPos, 0); + SampleManager.SetStreamedFileLoopFlag(m_nNextLoopFlag); + SampleManager.StartStreamedFile(m_nNextTrack, trackStartPos); m_nVolumeLatency = 3; m_nCurrentVolume = 0; m_nMaxVolume = 100; - SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, FALSE); if (m_nNextTrack < STREAMED_SOUND_CITY_AMBIENT) m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode(); - m_bVerifyNextTrackStartedToPlay = true; + m_bVerifyNextTrackStartedToPlay = TRUE; } } } else { if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded) { - m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0); + m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(); m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); RecordRadioStats(); - bRadioStatsRecorded = true; + bRadioStatsRecorded = TRUE; } - SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0); - SampleManager.StopStreamedFile(0); + SampleManager.SetStreamedVolumeAndPan(0, 63, FALSE); + SampleManager.StopStreamedFile(); } } } @@ -488,7 +505,7 @@ cMusicManager::ServiceGameMode() CPed *ped = FindPlayerPed(); CVehicle *vehicle = AudioManager.FindVehicleOfPlayer(); m_bRadioStreamReady = m_bGameplayAllowsRadio; - m_bGameplayAllowsRadio = false; + m_bGameplayAllowsRadio = FALSE; switch (CGame::currArea) { @@ -499,14 +516,14 @@ cMusicManager::ServiceGameMode() case AREA_BLOOD: case AREA_OVALRING: case AREA_MALIBU_CLUB: - m_bGameplayAllowsRadio = false; + m_bGameplayAllowsRadio = FALSE; break; default: if (SampleManager.GetMusicVolume()) { if (PlayerInCar()) - m_bGameplayAllowsRadio = true; + m_bGameplayAllowsRadio = TRUE; } else - m_bGameplayAllowsRadio = false; + m_bGameplayAllowsRadio = FALSE; break; } @@ -514,7 +531,7 @@ cMusicManager::ServiceGameMode() nFramesSinceCutsceneEnded = -1; gNumRetunePresses = 0; gRetuneCounter = 0; - m_bSetNextStation = false; + m_bSetNextStation = FALSE; } else if (ped) { if(!ped->DyingOrDead() && vehicle) { #ifdef GTA_PC @@ -567,11 +584,11 @@ cMusicManager::ServiceGameMode() if (m_bUserResumedGame) { - m_bRadioStreamReady = false; - m_bUserResumedGame = false; + m_bRadioStreamReady = FALSE; + m_bUserResumedGame = FALSE; } if (m_nPlayingTrack == NO_TRACK && m_nFrontendTrack == NO_TRACK) - m_bRadioStreamReady = false; + m_bRadioStreamReady = FALSE; if (m_bGameplayAllowsRadio) { @@ -594,7 +611,7 @@ cMusicManager::ServiceGameMode() m_aTracks[m_nFrontendTrack].m_nPosition = m_nRadioPosition; m_aTracks[m_nFrontendTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); } - m_bRadioSetByScript = false; + m_bRadioSetByScript = FALSE; return; } @@ -605,7 +622,7 @@ cMusicManager::ServiceGameMode() if (m_nAnnouncement < NO_TRACK) { if ((m_bAnnouncementInProgress || m_nFrontendTrack == m_nPlayingTrack) && ServiceAnnouncement()) { if (m_bAnnouncementInProgress) { - m_bSetNextStation = false; + m_bSetNextStation = FALSE; gNumRetunePresses = 0; gRetuneCounter = 0; return; @@ -613,7 +630,7 @@ cMusicManager::ServiceGameMode() if(m_nAnnouncement == NO_TRACK) { m_nNextTrack = NO_TRACK; m_nFrontendTrack = GetCarTuning(); - m_bSetNextStation = false; + m_bSetNextStation = FALSE; gRetuneCounter = 0; gNumRetunePresses = 0; } @@ -622,9 +639,9 @@ cMusicManager::ServiceGameMode() if (!m_bAnnouncementInProgress && m_nAnnouncement == NO_TRACK && m_nPlayingTrack == STREAMED_SOUND_RADIO_MP3_PLAYER - && !SampleManager.IsStreamPlaying(0)) + && !SampleManager.IsStreamPlaying()) { - SampleManager.StartStreamedFile(STREAMED_SOUND_RADIO_MP3_PLAYER, 0, 0); + SampleManager.StartStreamedFile(STREAMED_SOUND_RADIO_MP3_PLAYER, 0); } if (!m_bRadioSetByScript) @@ -635,7 +652,7 @@ cMusicManager::ServiceGameMode() if(gRetuneCounter > 1) gRetuneCounter--; else if(gRetuneCounter == 1) { - m_bSetNextStation = true; + m_bSetNextStation = TRUE; gRetuneCounter = 0; } } @@ -644,7 +661,7 @@ cMusicManager::ServiceGameMode() { if (--gRetuneCounter == 0) { - m_bSetNextStation = true; + m_bSetNextStation = TRUE; gRetuneCounter = 0; } } @@ -694,7 +711,7 @@ cMusicManager::ServiceGameMode() SetUpCorrectAmbienceTrack(); ServiceTrack(vehicle, ped); if (m_bSetNextStation) - m_bSetNextStation = false; + m_bSetNextStation = FALSE; return; } if (UsesPoliceRadio(vehicle)) @@ -713,24 +730,24 @@ cMusicManager::ServiceGameMode() gRetuneCounter = 0; gNumRetunePresses = 0; - m_bSetNextStation = false; - m_bRadioSetByScript = false; + m_bSetNextStation = FALSE; + m_bRadioSetByScript = FALSE; if (m_nFrontendTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nFrontendTrack <= STREAMED_SOUND_AMBSIL_AMBIENT) SetUpCorrectAmbienceTrack(); ServiceTrack(vehicle, ped); if (m_bSetNextStation) - m_bSetNextStation = false; + m_bSetNextStation = FALSE; return; } if (m_bAnnouncementInProgress) { - SampleManager.StopStreamedFile(0); - if (SampleManager.IsStreamPlaying(0)) + SampleManager.StopStreamedFile(); + if (SampleManager.IsStreamPlaying()) return; - g_bAnnouncementReadPosAlready = false; + g_bAnnouncementReadPosAlready = FALSE; m_nAnnouncement = NO_TRACK; - m_bAnnouncementInProgress = false; + m_bAnnouncementInProgress = FALSE; m_nNextTrack = NO_TRACK; m_nFrontendTrack = NO_TRACK; m_nPlayingTrack = NO_TRACK; @@ -808,7 +825,7 @@ GetHeightScale() } void -cMusicManager::ComputeAmbienceVol(uint8 reset, uint8& outVolume) +cMusicManager::ComputeAmbienceVol(bool8 reset, uint8& outVolume) { static float fVol = 0.0f; @@ -868,77 +885,77 @@ cMusicManager::ComputeAmbienceVol(uint8 reset, uint8& outVolume) outVolume = (90.0f - fHeightScale) / 50.0f * fVol; } -bool +bool8 cMusicManager::ServiceAnnouncement() { if (m_bAnnouncementInProgress) { - if (SampleManager.IsStreamPlaying(0)) + if (SampleManager.IsStreamPlaying()) m_nPlayingTrack = m_nNextTrack; else if (m_nPlayingTrack != NO_TRACK) { m_nAnnouncement = NO_TRACK; - m_bAnnouncementInProgress = false; + m_bAnnouncementInProgress = FALSE; m_nPlayingTrack = NO_TRACK; } - return true; - } else if (SampleManager.IsStreamPlaying(0)) { + return TRUE; + } else if (SampleManager.IsStreamPlaying()) { if (m_nPlayingTrack != NO_TRACK && !g_bAnnouncementReadPosAlready) { RecordRadioStats(); - m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0); - g_bAnnouncementReadPosAlready = true; + m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(); + g_bAnnouncementReadPosAlready = TRUE; m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); } - SampleManager.StopStreamedFile(0); + SampleManager.StopStreamedFile(); } else { - g_bAnnouncementReadPosAlready = false; + g_bAnnouncementReadPosAlready = FALSE; m_nPlayingTrack = NO_TRACK; m_nNextTrack = m_nAnnouncement; - SampleManager.SetStreamedFileLoopFlag(0, 0); - SampleManager.StartStreamedFile(m_nNextTrack, 0, 0); - SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 0, 0); - m_bAnnouncementInProgress = true; + SampleManager.SetStreamedFileLoopFlag(FALSE); + SampleManager.StartStreamedFile(m_nNextTrack, 0); + SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, FALSE); + m_bAnnouncementInProgress = TRUE; } - return true; + return TRUE; } void cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) { - static bool bRadioStatsRecorded = false; - static bool bRadioStatsRecorded2 = false; + static bool8 bRadioStatsRecorded = FALSE; + static bool8 bRadioStatsRecorded2 = FALSE; uint8 volume; if (!m_bTrackChangeStarted) m_nNextTrack = m_nFrontendTrack; if (gRetuneCounter != 0 || m_bSetNextStation) { - if (SampleManager.IsStreamPlaying(0)) { + if (SampleManager.IsStreamPlaying()) { if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded) { - m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0); + m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(); m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); RecordRadioStats(); - bRadioStatsRecorded = true; + bRadioStatsRecorded = TRUE; } - SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0); - SampleManager.StopStreamedFile(0); + SampleManager.SetStreamedVolumeAndPan(0, 63, FALSE); + SampleManager.StopStreamedFile(); } return; } if (bRadioStatsRecorded) { - bRadioStatsRecorded = false; + bRadioStatsRecorded = FALSE; m_nPlayingTrack = NO_TRACK; } if (m_nNextTrack != m_nPlayingTrack) { - m_bTrackChangeStarted = true; - SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0); + m_bTrackChangeStarted = TRUE; + SampleManager.SetStreamedVolumeAndPan(0, 63, FALSE); if (!(AudioManager.m_FrameCounter & 1)) { - if (m_bVerifyNextTrackStartedToPlay || !SampleManager.IsStreamPlaying(0)) { - bRadioStatsRecorded2 = false; - if (SampleManager.IsStreamPlaying(0)) { + if (m_bVerifyNextTrackStartedToPlay || !SampleManager.IsStreamPlaying()) { + bRadioStatsRecorded2 = FALSE; + if (SampleManager.IsStreamPlaying()) { m_nPlayingTrack = m_nNextTrack; - m_bVerifyNextTrackStartedToPlay = false; - m_bTrackChangeStarted = false; + m_bVerifyNextTrackStartedToPlay = FALSE; + m_bTrackChangeStarted = FALSE; if (veh) { #ifdef FIX_BUGS if (m_nPlayingTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nPlayingTrack <= STREAMED_SOUND_AMBSIL_AMBIENT) @@ -955,23 +972,23 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) } else { uint32 pos = GetTrackStartPos(m_nNextTrack); if (m_nNextTrack != NO_TRACK) { - SampleManager.SetStreamedFileLoopFlag(1, 0); - SampleManager.StartStreamedFile(m_nNextTrack, pos, 0); + SampleManager.SetStreamedFileLoopFlag(TRUE); + SampleManager.StartStreamedFile(m_nNextTrack, pos); if (m_nFrontendTrack < STREAMED_SOUND_CITY_AMBIENT || m_nFrontendTrack > STREAMED_SOUND_AMBSIL_AMBIENT) { m_nVolumeLatency = 10; m_nCurrentVolume = 0; m_nMaxVolume = 100; - SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, FALSE); } else { - ComputeAmbienceVol(true, volume); - SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0); + ComputeAmbienceVol(TRUE, volume); + SampleManager.SetStreamedVolumeAndPan(volume, 63, TRUE); } if (m_nNextTrack < STREAMED_SOUND_CITY_AMBIENT) m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode(); - m_bVerifyNextTrackStartedToPlay = true; + m_bVerifyNextTrackStartedToPlay = TRUE; } } } else { @@ -979,9 +996,9 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) debug("m_nPlayingTrack == NO_TRACK, yet track playing - tidying up\n"); else if (!bRadioStatsRecorded2) { - m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0); + m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(); m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode(); - bRadioStatsRecorded2 = true; + bRadioStatsRecorded2 = TRUE; RecordRadioStats(); if (m_nPlayingTrack >= STREAMED_SOUND_HAVANA_CITY_AMBIENT && m_nPlayingTrack <= STREAMED_SOUND_HAVANA_BEACH_AMBIENT) { @@ -989,8 +1006,8 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_HURRICANE, 0.0); } } - SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0); - SampleManager.StopStreamedFile(0); + SampleManager.SetStreamedVolumeAndPan(0, 63, FALSE); + SampleManager.StopStreamedFile(); } } return; @@ -998,8 +1015,8 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) if (m_nPlayingTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nPlayingTrack <= STREAMED_SOUND_AMBSIL_AMBIENT) { - ComputeAmbienceVol(false, volume); - SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0); + ComputeAmbienceVol(FALSE, volume); + SampleManager.SetStreamedVolumeAndPan(volume, 63, TRUE); return; } if (CTimer::GetIsSlowMotionActive()) @@ -1009,7 +1026,7 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) float DistToTargetSq = (TheCamera.pTargetEntity->GetPosition() - TheCamera.GetPosition()).MagnitudeSqr(); if (DistToTargetSq >= SQR(55.0f)) { - SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(0, 63, FALSE); } else if (DistToTargetSq >= SQR(10.0f)) { @@ -1026,17 +1043,17 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) } if (gRetuneCounter != 0) volume = 0; - SampleManager.SetStreamedVolumeAndPan(volume, pan, 0, 0); + SampleManager.SetStreamedVolumeAndPan(volume, pan, FALSE); } else if (AudioManager.ShouldDuckMissionAudio(0) || AudioManager.ShouldDuckMissionAudio(1)) - SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, FALSE); else if (gRetuneCounter != 0) - SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(0, 63, FALSE); else - SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, FALSE); } } else if (AudioManager.ShouldDuckMissionAudio(0) || AudioManager.ShouldDuckMissionAudio(1)) { - SampleManager.SetStreamedVolumeAndPan(Min(m_nCurrentVolume, 25), 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(Min(m_nCurrentVolume, 25), 63, FALSE); nFramesSinceCutsceneEnded = 0; } else { if (nFramesSinceCutsceneEnded == -1) @@ -1058,7 +1075,7 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped) } if (gRetuneCounter != 0) volume = 0; - SampleManager.SetStreamedVolumeAndPan(volume, 63, 0, 0); + SampleManager.SetStreamedVolumeAndPan(volume, 63, FALSE); } if (m_nVolumeLatency > 0) m_nVolumeLatency--; @@ -1071,10 +1088,10 @@ cMusicManager::PreloadCutSceneMusic(uint32 track) { if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS && m_nMusicMode == MUSICMODE_CUTSCENE) { AudioManager.ResetPoliceRadio(); - while (SampleManager.IsStreamPlaying(0)) - SampleManager.StopStreamedFile(0); - SampleManager.PreloadStreamedFile(track, 0); - SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 1, 0); + while (SampleManager.IsStreamPlaying()) + SampleManager.StopStreamedFile(); + SampleManager.PreloadStreamedFile(track); + SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, TRUE); m_nPlayingTrack = track; } } @@ -1083,27 +1100,27 @@ void cMusicManager::PlayPreloadedCutSceneMusic(void) { if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE) - SampleManager.StartPreloadedStreamedFile(0); + SampleManager.StartPreloadedStreamedFile(); } void cMusicManager::StopCutSceneMusic(void) { if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE) { - SampleManager.StopStreamedFile(0); + SampleManager.StopStreamedFile(); m_nPlayingTrack = NO_TRACK; } } void -cMusicManager::PlayFrontEndTrack(uint32 track, uint8 loopFlag) +cMusicManager::PlayFrontEndTrack(uint32 track, bool8 loopFlag) { if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS && (m_nUpcomingMusicMode == MUSICMODE_FRONTEND || m_nMusicMode == MUSICMODE_FRONTEND)) { m_nFrontendTrack = track; m_FrontendLoopFlag = loopFlag; if (m_nMusicMode != MUSICMODE_FRONTEND) - m_bEarlyFrontendTrack = true; + m_bEarlyFrontendTrack = TRUE; } } @@ -1201,7 +1218,7 @@ cMusicManager::GetFavouriteRadioStation() return favstation; } -bool +bool8 cMusicManager::CheckForMusicInterruptions() { return (m_nPlayingTrack == STREAMED_SOUND_MISSION_COMPLETED) || (m_nPlayingTrack == STREAMED_SOUND_CUTSCENE_FINALE); @@ -1265,7 +1282,8 @@ cMusicManager::DisplayRadioStationName() if (vehicle) { -#if defined RADIO_SCROLL_TO_PREV_STATION || defined FIX_BUGS // Because m_nFrontendTrack can have NO_TRACK + // Prev scroll needs it to be signed, and m_nFrontendTrack can be NO_TRACK thus FIX_BUGS +#if defined RADIO_SCROLL_TO_PREV_STATION || defined FIX_BUGS int track; #else uint8 track; @@ -1281,13 +1299,16 @@ cMusicManager::DisplayRadioStationName() #endif while (track >= NUM_RADIOS + 1) track -= NUM_RADIOS + 1; - // We already handle this condition while scrolling back, on key press. No need to change this. + // On scrolling back we handle this condition on key press. No need to change this. if (!DMAudio.IsMP3RadioChannelAvailable() && track == USERTRACK) gNumRetunePresses++; } else +#ifdef RADIO_OFF_TEXT + track = GetCarTuning(); // gStreamedSound or veh->m_nRadioStation would also work, but these don't cover police/taxi radios +#else track = m_nFrontendTrack; - +#endif wchar* string = nil; switch (track) { case WILDSTYLE: string = TheText.Get("FEA_FM0"); break; @@ -1304,10 +1325,11 @@ cMusicManager::DisplayRadioStationName() return; string = TheText.Get("FEA_MP3"); break; #ifdef RADIO_OFF_TEXT - case STREAMED_SOUND_RADIO_POLICE: - case STREAMED_SOUND_RADIO_TAXI: - return; - default: { + case RADIO_OFF: { + // Otherwise RADIO OFF will be seen after pausing-resuming game and Mission Complete text + if (!m_bRadioStreamReady || !m_bGameplayAllowsRadio) + return; + extern wchar WideErrorString[]; string = TheText.Get("FEA_NON"); @@ -1317,9 +1339,8 @@ cMusicManager::DisplayRadioStationName() } break; } -#else - default: return; #endif + default: return; }; if (pCurrentStation != string) { @@ -1328,7 +1349,11 @@ cMusicManager::DisplayRadioStationName() } else { if (cDisplay == 0) return; +#ifdef FIX_BUGS + cDisplay -= CTimer::GetLogicalFramesPassed(); +#else cDisplay--; +#endif } CFont::SetJustifyOff(); @@ -1357,7 +1382,7 @@ cMusicManager::DisplayRadioStationName() #endif } -bool +bool8 cMusicManager::UsesPoliceRadio(CVehicle *veh) { switch (veh->GetModelIndex()) @@ -1367,18 +1392,18 @@ cMusicManager::UsesPoliceRadio(CVehicle *veh) case MI_COASTG: case MI_RHINO: case MI_BARRACKS: - return true; + return TRUE; case MI_MRWHOOP: case MI_HUNTER: - return false; + return FALSE; } return veh->UsesSiren(); } -bool +bool8 cMusicManager::UsesTaxiRadio(CVehicle *veh) { - if (veh->GetModelIndex() != MI_KAUFMAN) return false; + if (veh->GetModelIndex() != MI_KAUFMAN) return FALSE; return CTheScripts::bPlayerHasMetDebbieHarry; } @@ -1387,10 +1412,10 @@ cMusicManager::ServiceAmbience() { } -bool +bool8 cMusicManager::ChangeRadioChannel() { - return true; + return TRUE; } // these two are empty diff --git a/src/audio/MusicManager.h b/src/audio/MusicManager.h index 27456d79..3d2b7cee 100644 --- a/src/audio/MusicManager.h +++ b/src/audio/MusicManager.h @@ -16,18 +16,18 @@ class CPed; class cMusicManager { public: - bool m_bIsInitialised; - bool m_bDisabled; - bool m_bSetNextStation; + bool8 m_bIsInitialised; + bool8 m_bDisabled; + bool8 m_bSetNextStation; uint8 m_nVolumeLatency; uint8 m_nCurrentVolume; uint8 m_nMaxVolume; uint32 m_nAnnouncement; - bool m_bAnnouncementInProgress; + bool8 m_bAnnouncementInProgress; tStreamedSample m_aTracks[TOTAL_STREAMED_SOUNDS]; - bool m_bResetTimers; + bool8 m_bResetTimers; uint32 m_nResetTime; - bool m_bRadioSetByScript; + bool8 m_bRadioSetByScript; uint8 m_nRadioStationScript; int32 m_nRadioPosition; uint32 m_nRadioInCar; @@ -35,40 +35,40 @@ public: uint32 m_nPlayingTrack; uint8 m_nUpcomingMusicMode; uint8 m_nMusicMode; - bool m_FrontendLoopFlag; - bool m_bTrackChangeStarted; + bool8 m_FrontendLoopFlag; + bool8 m_bTrackChangeStarted; uint32 m_nNextTrack; - bool m_nNextLoopFlag; - bool m_bVerifyNextTrackStartedToPlay; - bool m_bGameplayAllowsRadio; - bool m_bRadioStreamReady; + bool8 m_nNextLoopFlag; + bool8 m_bVerifyNextTrackStartedToPlay; + bool8 m_bGameplayAllowsRadio; + bool8 m_bRadioStreamReady; int8 nFramesSinceCutsceneEnded; - bool m_bUserResumedGame; - bool m_bMusicModeChangeStarted; + bool8 m_bUserResumedGame; + bool8 m_bMusicModeChangeStarted; uint8 m_nMusicModeToBeSet; - bool m_bEarlyFrontendTrack; + bool8 m_bEarlyFrontendTrack; float aListenTimeArray[NUM_RADIOS]; float m_nLastTrackServiceTime; public: cMusicManager(); - bool IsInitialised() { return m_bIsInitialised; } + bool8 IsInitialised() { return m_bIsInitialised; } uint8 GetMusicMode() { return m_nMusicMode; } uint32 GetCurrentTrack() { return m_nPlayingTrack; } void ResetMusicAfterReload(); - void SetStartingTrackPositions(uint8 isNewGameTimer); - bool Initialise(); + void SetStartingTrackPositions(bool8 isNewGameTimer); + bool8 Initialise(); void Terminate(); void ChangeMusicMode(uint8 mode); void StopFrontEndTrack(); - bool PlayerInCar(); + bool8 PlayerInCar(); void DisplayRadioStationName(); void PlayAnnouncement(uint32); - void PlayFrontEndTrack(uint32, uint8); + void PlayFrontEndTrack(uint32, bool8); void PreloadCutSceneMusic(uint32); void PlayPreloadedCutSceneMusic(void); void StopCutSceneMusic(void); @@ -83,16 +83,16 @@ public: void ServiceAmbience(); void ServiceTrack(CVehicle *veh, CPed *ped); - bool UsesPoliceRadio(CVehicle *veh); - bool UsesTaxiRadio(CVehicle *veh); + bool8 UsesPoliceRadio(CVehicle *veh); + bool8 UsesTaxiRadio(CVehicle *veh); uint32 GetTrackStartPos(uint32 track); - void ComputeAmbienceVol(uint8 reset, uint8& outVolume); - bool ServiceAnnouncement(); + void ComputeAmbienceVol(bool8 reset, uint8& outVolume); + bool8 ServiceAnnouncement(); uint32 GetCarTuning(); uint32 GetNextCarTuning(); - bool ChangeRadioChannel(); + bool8 ChangeRadioChannel(); void RecordRadioStats(); void SetUpCorrectAmbienceTrack(); float *GetListenTimeArray(); @@ -100,7 +100,7 @@ public: uint32 GetFavouriteRadioStation(); void SetMalibuClubTrackPos(uint8 pos); void SetStripClubTrackPos(uint8 pos); - bool CheckForMusicInterruptions(); + bool8 CheckForMusicInterruptions(); void Enable(); void Disable(); @@ -109,5 +109,5 @@ public: VALIDATE_SIZE(cMusicManager, 0x95C); extern cMusicManager MusicManager; -extern bool g_bAnnouncementReadPosAlready; // we have a symbol of this so it was declared in .h +extern bool8 g_bAnnouncementReadPosAlready; // we have a symbol of this so it was declared in .h float GetHeightScale(); diff --git a/src/audio/PoliceRadio.cpp b/src/audio/PolRadio.cpp similarity index 90% rename from src/audio/PoliceRadio.cpp rename to src/audio/PolRadio.cpp index 227d27d0..ce0e9a6d 100644 --- a/src/audio/PoliceRadio.cpp +++ b/src/audio/PolRadio.cpp @@ -7,7 +7,7 @@ #include "AudioSamples.h" #include "MusicManager.h" #include "PlayerPed.h" -#include "PoliceRadio.h" +#include "PolRadio.h" #include "Replay.h" #include "Vehicle.h" #include "World.h" @@ -15,9 +15,6 @@ #include "sampman.h" #include "Wanted.h" -const int channels = ARRAY_SIZE(AudioManager.m_asActiveSamples); -const int policeChannel = channels + 1; - struct tPoliceRadioZone { char m_aName[8]; uint32 m_nSampleIndex; @@ -48,8 +45,8 @@ cAudioManager::InitialisePoliceRadioZones() SETZONESFX(4, "BEACH2", SFX_POLICE_RADIO_WASHINGTON_BEACH); SETZONESFX(5, "BEACH3", SFX_POLICE_RADIO_VICE_POINT); SETZONESFX(6, "GOLFC", SFX_POLICE_RADIO_LEAF_LINKS); - SETZONESFX(7, "STARI", SFX_POLICE_RADIO_STRAFISH_ISLAND); - SETZONESFX(8, "DOCKS", SFX_POLICE_RADIO_VICE_PORT); + SETZONESFX(7, "STARI", SFX_POLICE_RADIO_STARFISH_ISLAND); + SETZONESFX(8, "DOCKS", SFX_POLICE_RADIO_VICEPORT); SETZONESFX(9, "HAVANA", SFX_POLICE_RADIO_LITTLE_HAVANA); SETZONESFX(10, "HAITI", SFX_POLICE_RADIO_LITTLE_HAITI); SETZONESFX(11, "PORNI", SFX_POLICE_RADIO_PRAWN_ISLAND); @@ -68,8 +65,8 @@ cAudioManager::InitialisePoliceRadio() for (int32 i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE; - SampleManager.SetChannelReverbFlag(policeChannel, false); - gSpecialSuspectLastSeenReport = false; + SampleManager.SetChannelReverbFlag(CHANNEL_POLICE_RADIO, FALSE); + gSpecialSuspectLastSeenReport = FALSE; for (int32 i = 0; i < ARRAY_SIZE(gMinTimeToNextReport); i++) gMinTimeToNextReport[i] = m_FrameCounter; } @@ -78,7 +75,7 @@ void cAudioManager::ResetPoliceRadio() { if (!m_bIsInitialised) return; - if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel); + if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO); InitialisePoliceRadio(); } @@ -105,19 +102,18 @@ cAudioManager::DoPoliceRadioCrackle() m_sQueueSample.m_nCounter = 0; m_sQueueSample.m_nSampleIndex = SFX_POLICE_RADIO_CRACKLE; m_sQueueSample.m_nBankIndex = SFX_BANK_0; - m_sQueueSample.m_bIs2D = true; + m_sQueueSample.m_bIs2D = TRUE; m_sQueueSample.m_nReleasingVolumeModificator = 10; m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(SFX_POLICE_RADIO_CRACKLE); m_sQueueSample.m_nVolume = m_anRandomTable[2] % 20 + 15; m_sQueueSample.m_nLoopCount = 0; m_sQueueSample.m_nEmittingVolume = m_sQueueSample.m_nVolume; - m_sQueueSample.m_nLoopStart = SampleManager.GetSampleLoopStartOffset(SFX_POLICE_RADIO_CRACKLE); - m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(SFX_POLICE_RADIO_CRACKLE); - m_sQueueSample.m_bReleasingSoundFlag = false; - m_sQueueSample.m_bReverbFlag = false; + SET_LOOP_OFFSETS(SFX_POLICE_RADIO_CRACKLE) + m_sQueueSample.m_bReleasingSoundFlag = FALSE; + m_sQueueSample.m_bReverbFlag = FALSE; m_sQueueSample.m_nOffset = 63; m_sQueueSample.m_nReleasingVolumeDivider = 3; - m_sQueueSample.m_bRequireReflection = false; + m_sQueueSample.m_bRequireReflection = FALSE; AddSampleToRequestedQueue(); } @@ -130,7 +126,7 @@ cAudioManager::ServicePoliceRadio() if(!m_bIsInitialised) return; if(m_nUserPause == 0) { - bool crimeReport = SetupCrimeReport(); + bool8 crimeReport = SetupCrimeReport(); #ifdef FIX_BUGS // Crash at 0x5fe6ef if(CReplay::IsPlayingBack() || !FindPlayerPed() || !FindPlayerPed()->m_pWanted) return; @@ -141,7 +137,11 @@ cAudioManager::ServicePoliceRadio() if (!crimeReport) { if (wantedLevel != 0) { if (nLastSeen != 0) +#ifdef FIX_BUGS + nLastSeen -= CTimer::GetLogicalFramesPassed(); +#else --nLastSeen; +#endif else { nLastSeen = m_anRandomTable[1] % 1000 + 2000; SetupSuspectLastSeenReport(); @@ -156,31 +156,35 @@ cAudioManager::ServicePoliceRadio() void cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel) { - bool processed = false; + bool8 processed = FALSE; uint32 sample; int32 freq; static int cWait = 0; - static bool bChannelOpen = false; + static bool8 bChannelOpen = FALSE; static uint8 bMissionAudioPhysicalPlayingStatus = 0; static int32 PoliceChannelFreq = 22050; if (!m_bIsInitialised) return; if (m_nUserPause != 0) { - if (SampleManager.GetChannelUsedFlag(policeChannel)) SampleManager.StopChannel(policeChannel); + if (SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) SampleManager.StopChannel(CHANNEL_POLICE_RADIO); if (g_nMissionAudioSfx != NO_SAMPLE && bMissionAudioPhysicalPlayingStatus == 1 && SampleManager.IsStreamPlaying(1)) { - SampleManager.PauseStream(1, 1); + SampleManager.PauseStream(TRUE, 1); } } else { if (m_nPreviousUserPause && g_nMissionAudioSfx != NO_SAMPLE && bMissionAudioPhysicalPlayingStatus == 1) { - SampleManager.PauseStream(0, 1); + SampleManager.PauseStream(FALSE, 1); } - if (m_sPoliceRadioQueue.policeChannelTimer == 0) bChannelOpen = false; + if (m_sPoliceRadioQueue.policeChannelTimer == 0) bChannelOpen = FALSE; if (cWait) { +#ifdef FIX_BUGS + cWait -= CTimer::GetLogicalFramesPassed(); +#else --cWait; +#endif return; } if (g_nMissionAudioSfx != NO_SAMPLE && !bChannelOpen) { @@ -200,9 +204,9 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel) } return; } - } else if (!SampleManager.GetChannelUsedFlag(policeChannel)) { + } else if (!SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO)) { SampleManager.PreloadStreamedFile(g_nMissionAudioSfx, 1); - SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 1, 1); + SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, TRUE, 1); SampleManager.StartPreloadedStreamedFile(1); g_nMissionAudioPlayingStatus = 1; bMissionAudioPhysicalPlayingStatus = 0; @@ -211,7 +215,7 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel) } if (bChannelOpen) DoPoliceRadioCrackle(); if ((g_nMissionAudioSfx == NO_SAMPLE || g_nMissionAudioPlayingStatus != 1) && - !SampleManager.GetChannelUsedFlag(policeChannel) && m_sPoliceRadioQueue.policeChannelTimer) { + !SampleManager.GetChannelUsedFlag(CHANNEL_POLICE_RADIO) && m_sPoliceRadioQueue.policeChannelTimer) { if (m_sPoliceRadioQueue.policeChannelTimer) { sample = m_sPoliceRadioQueue.crimesSamples[m_sPoliceRadioQueue.policeChannelCounterSeconds]; m_sPoliceRadioQueue.policeChannelTimer--; @@ -223,35 +227,35 @@ cAudioManager::ServicePoliceRadioChannel(uint8 wantedLevel) if (gSpecialSuspectLastSeenReport) { gSpecialSuspectLastSeenReport = 0; } else if (sample == SFX_POLICE_RADIO_MESSAGE_NOISE_1) { - bChannelOpen = false; - processed = true; + bChannelOpen = FALSE; + processed = TRUE; } } if (sample == NO_SAMPLE) { if (!processed) cWait = 30; } else { - SampleManager.InitialiseChannel(policeChannel, sample, 0); + SampleManager.InitialiseChannel(CHANNEL_POLICE_RADIO, sample, SFX_BANK_0); switch (sample) { case SFX_POLICE_RADIO_MESSAGE_NOISE_1: freq = m_anRandomTable[4] % 2000 + 10025; - bChannelOpen = bChannelOpen == false; + bChannelOpen = bChannelOpen == FALSE; break; default: freq = SampleManager.GetSampleBaseFrequency(sample); break; } PoliceChannelFreq = freq; - SampleManager.SetChannelFrequency(policeChannel, freq); - SampleManager.SetChannelVolume(policeChannel, 100); - SampleManager.SetChannelPan(policeChannel, 63); - SampleManager.SetChannelLoopCount(policeChannel, 1); - SampleManager.SetChannelLoopPoints(policeChannel, 0, -1); - SampleManager.StartChannel(policeChannel); + SampleManager.SetChannelFrequency(CHANNEL_POLICE_RADIO, freq); + SampleManager.SetChannelVolume(CHANNEL_POLICE_RADIO, 100); + SampleManager.SetChannelPan(CHANNEL_POLICE_RADIO, 63); + SampleManager.SetChannelLoopCount(CHANNEL_POLICE_RADIO, 1); + SampleManager.SetChannelLoopPoints(CHANNEL_POLICE_RADIO, 0, -1); + SampleManager.StartChannel(CHANNEL_POLICE_RADIO); } if (processed) ResetPoliceRadio(); } } } -bool +bool8 cAudioManager::SetupCrimeReport() { int16 audioZoneId; @@ -264,13 +268,13 @@ cAudioManager::SetupCrimeReport() float quarterY; int i; int32 sampleIndex; - bool processed = false; + bool8 processed = FALSE; - if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) return false; + if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) return FALSE; if (60 - m_sPoliceRadioQueue.policeChannelTimer <= 9) { AgeCrimes(); - return true; + return TRUE; } for (i = 0; i < ARRAY_SIZE(m_sPoliceRadioQueue.crimes); i++) { @@ -278,7 +282,7 @@ cAudioManager::SetupCrimeReport() break; } - if (i == ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) return false; + if (i == ARRAY_SIZE(m_sPoliceRadioQueue.crimes)) return FALSE; audioZoneId = CTheZones::FindAudioZone(&m_sPoliceRadioQueue.crimes[i].position); if (audioZoneId >= 0 && audioZoneId < NUMAUDIOZONES) { zone = CTheZones::GetAudioZone(audioZoneId); @@ -317,10 +321,10 @@ cAudioManager::SetupCrimeReport() if (m_sPoliceRadioQueue.crimes[i].position.y > halfY + quarterY) { m_sPoliceRadioQueue.Add(SFX_NORTH); - processed = true; + processed = TRUE; } else if (m_sPoliceRadioQueue.crimes[i].position.y < halfY - quarterY) { m_sPoliceRadioQueue.Add(SFX_SOUTH); - processed = true; + processed = TRUE; } if (m_sPoliceRadioQueue.crimes[i].position.x > halfX + quarterX) @@ -339,7 +343,7 @@ cAudioManager::SetupCrimeReport() } m_sPoliceRadioQueue.crimes[i].type = CRIME_NONE; AgeCrimes(); - return true; + return TRUE; } void @@ -479,7 +483,7 @@ cAudioManager::SetupSuspectLastSeenReport() case MI_SABRETUR: case MI_VIRGO: case MI_BLISTAC: - sample = SFX_POLICE_RADIO_2_DOOR; + sample = SFX_POLICE_RADIO_TUDOOR; break; case MI_STINGER: case MI_INFERNUS: @@ -688,7 +692,7 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z) float quarterX; float quarterY; int32 sample; - bool processed = false; + bool8 processed = FALSE; CVector vec = CVector(x, y, z); if (!m_bIsInitialised) return; @@ -713,10 +717,10 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z) if (vec.y > halfY + quarterY) { m_sPoliceRadioQueue.Add(SFX_NORTH); - processed = true; + processed = TRUE; } else if (vec.y < halfY - quarterY) { m_sPoliceRadioQueue.Add(SFX_SOUTH); - processed = true; + processed = TRUE; } if (vec.x > halfX + quarterX) @@ -728,7 +732,7 @@ cAudioManager::PlaySuspectLastSeen(float x, float y, float z) m_sPoliceRadioQueue.Add(sample); m_sPoliceRadioQueue.Add(SFX_POLICE_RADIO_MESSAGE_NOISE_1); m_sPoliceRadioQueue.Add(NO_SAMPLE); - gSpecialSuspectLastSeenReport = true; + gSpecialSuspectLastSeenReport = TRUE; break; } } diff --git a/src/audio/PoliceRadio.h b/src/audio/PolRadio.h similarity index 100% rename from src/audio/PoliceRadio.h rename to src/audio/PolRadio.h diff --git a/src/audio/audio_enums.h b/src/audio/audio_enums.h index 990b2d73..5a14d312 100644 --- a/src/audio/audio_enums.h +++ b/src/audio/audio_enums.h @@ -1295,3 +1295,26 @@ enum eAudioType AUDIOTYPE_POLICERADIO, TOTAL_AUDIO_TYPES, }; + +#ifdef GTA_PS2 +enum +{ + NUM_CHANNELS_GENERIC = 42, + CHANNEL_POLICE_RADIO = NUM_CHANNELS_GENERIC, + CHANNEL_MISSION_AUDIO_1, + CHANNEL_MISSION_AUDIO_2, + CHANNEL_PLAYER_VEHICLE_ENGINE, + NUM_CHANNELS +}; +#else +enum +{ +#ifdef PS2_AUDIO_CHANNELS + NUM_CHANNELS_GENERIC = 42, +#else + NUM_CHANNELS_GENERIC = 27, +#endif + CHANNEL_POLICE_RADIO, + NUM_CHANNELS +}; +#endif diff --git a/src/audio/oal/aldlist.cpp b/src/audio/oal/aldlist.cpp index 881418c1..6024adf2 100644 --- a/src/audio/oal/aldlist.cpp +++ b/src/audio/oal/aldlist.cpp @@ -24,12 +24,6 @@ #include "aldlist.h" -#ifndef _WIN32 -#define _stricmp strcasecmp -#define _strnicmp strncasecmp -#define _strdup strdup -#endif - #ifdef AUDIO_OAL /* * Init call @@ -47,8 +41,8 @@ ALDeviceList::ALDeviceList() defaultDeviceIndex = 0; if (alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT")) { - devices = (char *)alcGetString(NULL, ALC_DEVICE_SPECIFIER); - defaultDeviceName = (char *)alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER); + devices = (char *)alcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER); + defaultDeviceName = (char *)alcGetString(NULL, ALC_DEFAULT_ALL_DEVICES_SPECIFIER); index = 0; // go through device list (each device terminated with a single NULL, list terminated with double NULL) @@ -62,17 +56,11 @@ ALDeviceList::ALDeviceList() if (context) { alcMakeContextCurrent(context); // if new actual device name isn't already in the list, then add it... - actualDeviceName = alcGetString(device, ALC_DEVICE_SPECIFIER); - bool bNewName = true; - for (unsigned int i = 0; i < GetNumDevices(); i++) { - if (strcmp(GetDeviceName(i), actualDeviceName) == 0) { - bNewName = false; - } - } - if ((bNewName) && (actualDeviceName != NULL) && (strlen(actualDeviceName) > 0)) { - ALDEVICEINFO ALDeviceInfo; + actualDeviceName = alcGetString(device, ALC_ALL_DEVICES_SPECIFIER); + if ((actualDeviceName != NULL) && (strlen(actualDeviceName) > 0)) { + ALDEVICEINFO &ALDeviceInfo = aDeviceInfo[nNumOfDevices++]; ALDeviceInfo.bSelected = true; - ALDeviceInfo.strDeviceName = _strdup(actualDeviceName); + ALDeviceInfo.SetName(actualDeviceName); alcGetIntegerv(device, ALC_MAJOR_VERSION, sizeof(int), &ALDeviceInfo.iMajorVersion); alcGetIntegerv(device, ALC_MINOR_VERSION, sizeof(int), &ALDeviceInfo.iMinorVersion); @@ -105,8 +93,6 @@ ALDeviceList::ALDeviceList() // Get Source Count ALDeviceInfo.uiSourceCount = GetMaxNumSources(); - - aDeviceInfo[nNumOfDevices++] = ALDeviceInfo; } alcMakeContextCurrent(NULL); alcDestroyContext(context); diff --git a/src/audio/oal/aldlist.h b/src/audio/oal/aldlist.h index 417bd314..bebb6791 100644 --- a/src/audio/oal/aldlist.h +++ b/src/audio/oal/aldlist.h @@ -21,7 +21,7 @@ enum }; struct ALDEVICEINFO { - const char *strDeviceName; + char *strDeviceName; int iMajorVersion; int iMinorVersion; unsigned int uiSourceCount; @@ -33,6 +33,19 @@ struct ALDEVICEINFO { strDeviceName = NULL; Extensions = 0; } + + ~ALDEVICEINFO() + { + delete[] strDeviceName; + strDeviceName = NULL; + } + + void SetName(const char *name) + { + if(strDeviceName) delete[] strDeviceName; + strDeviceName = new char[strlen(name) + 1]; + strcpy(strDeviceName, name); + } }; typedef ALDEVICEINFO *LPALDEVICEINFO; diff --git a/src/audio/oal/channel.cpp b/src/audio/oal/channel.cpp index 826a3cd7..6c9cb837 100644 --- a/src/audio/oal/channel.cpp +++ b/src/audio/oal/channel.cpp @@ -10,20 +10,22 @@ extern bool IsFXSupported(); -ALuint alSources[MAXCHANNELS+MAX2DCHANNELS]; -ALuint alFilters[MAXCHANNELS+MAX2DCHANNELS]; -ALuint alBuffers[MAXCHANNELS+MAX2DCHANNELS]; +ALuint alSources[NUM_CHANNELS]; +ALuint alFilters[NUM_CHANNELS]; +ALuint alBuffers[NUM_CHANNELS]; bool bChannelsCreated = false; int32 CChannel::channelsThatNeedService = 0; +uint8 tempStereoBuffer[PED_BLOCKSIZE * 2]; + void CChannel::InitChannels() { - alGenSources(MAXCHANNELS+MAX2DCHANNELS, alSources); - alGenBuffers(MAXCHANNELS+MAX2DCHANNELS, alBuffers); + alGenSources(NUM_CHANNELS, alSources); + alGenBuffers(NUM_CHANNELS, alBuffers); if (IsFXSupported()) - alGenFilters(MAXCHANNELS + MAX2DCHANNELS, alFilters); + alGenFilters(NUM_CHANNELS, alFilters); bChannelsCreated = true; } @@ -32,13 +34,13 @@ CChannel::DestroyChannels() { if (bChannelsCreated) { - alDeleteSources(MAXCHANNELS + MAX2DCHANNELS, alSources); + alDeleteSources(NUM_CHANNELS, alSources); memset(alSources, 0, sizeof(alSources)); - alDeleteBuffers(MAXCHANNELS + MAX2DCHANNELS, alBuffers); + alDeleteBuffers(NUM_CHANNELS, alBuffers); memset(alBuffers, 0, sizeof(alBuffers)); if (IsFXSupported()) { - alDeleteFilters(MAXCHANNELS + MAX2DCHANNELS, alFilters); + alDeleteFilters(NUM_CHANNELS, alFilters); memset(alFilters, 0, sizeof(alFilters)); } bChannelsCreated = false; @@ -50,6 +52,7 @@ CChannel::CChannel() { Data = nil; DataSize = 0; + bIs2D = false; SetDefault(); } @@ -90,6 +93,7 @@ void CChannel::Init(uint32 _id, bool Is2D) if ( Is2D ) { + bIs2D = true; alSource3f(alSources[id], AL_POSITION, 0.0f, 0.0f, 0.0f); alSourcef(alSources[id], AL_GAIN, 1.0f); } @@ -113,7 +117,20 @@ void CChannel::Start() if ( !HasSource() ) return; if ( !Data ) return; - alBufferData(alBuffers[id], AL_FORMAT_MONO16, Data, DataSize, Frequency); + if ( bIs2D ) + { + // convert mono data to stereo + int16 *monoData = (int16*)Data; + int16 *stereoData = (int16*)tempStereoBuffer; + for (size_t i = 0; i < DataSize / 2; i++) + { + *(stereoData++) = *monoData; + *(stereoData++) = *(monoData++); + } + alBufferData(alBuffers[id], AL_FORMAT_STEREO16, tempStereoBuffer, DataSize * 2, Frequency); + } + else + alBufferData(alBuffers[id], AL_FORMAT_MONO16, Data, DataSize, Frequency); if ( LoopPoints[0] != 0 && LoopPoints[0] != -1 ) alBufferiv(alBuffers[id], AL_LOOP_POINTS_SOFT, LoopPoints); alSourcei(alSources[id], AL_BUFFER, alBuffers[id]); diff --git a/src/audio/oal/channel.h b/src/audio/oal/channel.h index b081be25..872646c8 100644 --- a/src/audio/oal/channel.h +++ b/src/audio/oal/channel.h @@ -20,6 +20,7 @@ class CChannel int32 LoopCount; ALint LoopPoints[2]; ALint LastProcessedOffset; + bool bIs2D; public: static int32 channelsThatNeedService; diff --git a/src/audio/oal/stream.cpp b/src/audio/oal/stream.cpp index e1c848cd..7e68f042 100644 --- a/src/audio/oal/stream.cpp +++ b/src/audio/oal/stream.cpp @@ -1,9 +1,7 @@ #include "common.h" #ifdef AUDIO_OAL -#include "stream.h" -#include "sampman.h" -#include + #include #if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK @@ -28,6 +26,29 @@ #include #endif +#include +#include + +#ifdef MULTITHREADED_AUDIO +#include +#include +#include +#include +#include "MusicManager.h" +#include "stream.h" + +std::thread gAudioThread; +std::mutex gAudioThreadQueueMutex; +std::condition_variable gAudioThreadCv; +bool gAudioThreadTerm = false; +std::queue gStreamsToProcess; // values are not unique, we will handle that ourself +std::queue> gStreamsToClose; +#else +#include "stream.h" +#endif + +#include "sampman.h" + #ifndef _WIN32 #include "crossplatform.h" #endif @@ -45,6 +66,10 @@ class CSortStereoBuffer { uint16* PcmBuf; size_t BufSize; +//#ifdef MULTITHREADED_AUDIO +// std::mutex Mutex; +//#endif + public: CSortStereoBuffer() : PcmBuf(nil), BufSize(0) {} ~CSortStereoBuffer() @@ -71,6 +96,9 @@ public: void SortStereo(void* buf, size_t size) { +//#ifdef MULTITHREADED_AUDIO +// std::lock_guard lock(Mutex); +//#endif uint16* InBuf = (uint16*)buf; uint16* OutBuf = GetBuffer(size); @@ -140,7 +168,7 @@ public: else StepIndex--; - StepIndex = clamp(StepIndex, 0, 88); + StepIndex = Clamp(StepIndex, 0, 88); int delta = step >> 3; if (adpcm & 1) delta += step >> 2; @@ -149,7 +177,7 @@ public: if (adpcm & 8) delta = -delta; int newSample = Sample + delta; - Sample = clamp(newSample, -32768, 32767); + Sample = Clamp(newSample, -32768, 32767); return Sample; } }; @@ -285,6 +313,10 @@ public: #undef CLOSE_ON_ERROR } + void FileOpen() + { + } + ~CWavFile() { Close(); @@ -295,6 +327,7 @@ public: return m_bIsOpen; } + uint32 GetSampleSize() { return sizeof(uint16); @@ -464,6 +497,10 @@ public: m_pfSound = sf_open_virtual(&vio, SFM_READ, &m_soundInfo, m_fileHandle); } + void FileOpen() + { + } + ~CSndFile() { if ( m_pfSound ) @@ -642,18 +679,6 @@ public: #endif #ifdef AUDIO_OAL_USE_MPG123 -// fuzzy seek eliminates stutter when playing ADF but spams errors a lot (nothing breaks though) -//#define MP3_USE_FUZZY_SEEK -static ssize_t mpg123_read_replacement(void* handle, void* data, size_t size) -{ - return fread(data, 1, size, (FILE*)handle); -} - -static off_t mpg123_seek_replacement(void* handle, off_t offset, int whence) -{ - fseek((FILE*)handle, (uint32) offset, whence); - return ftell((FILE*)handle); -} class CMP3File : public IDecoder { @@ -662,62 +687,58 @@ protected: bool m_bOpened; uint32 m_nRate; uint32 m_nChannels; - FILE* m_fileHandle; - char* m_buffer; - + const char* m_pPath; + bool m_bFileNotOpenedYet; + CMP3File() : m_pMH(nil), m_bOpened(false), m_nRate(0), - m_nChannels(0), - m_fileHandle(NULL), - m_buffer(NULL) {} + m_bFileNotOpenedYet(false), + m_nChannels(0) {} public: CMP3File(const char *path) : m_pMH(nil), m_bOpened(false), m_nRate(0), m_nChannels(0), - m_fileHandle(NULL), - m_buffer(NULL) + m_pPath(path), + m_bFileNotOpenedYet(false) { m_pMH = mpg123_new(nil, nil); if ( m_pMH ) { -#ifdef MP3_USE_FUZZY_SEEK - mpg123_param(m_pMH, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS | MPG123_QUIET, 0.0); -#else mpg123_param(m_pMH, MPG123_FLAGS, MPG123_SEEKBUFFER | MPG123_GAPLESS, 0.0); + + m_bOpened = true; + m_bFileNotOpenedYet = true; + // It's possible to move this to audioFileOpsThread(), but effect isn't noticable + probably not compatible with our current cutscene audio handling +#if 1 + FileOpen(); #endif - long rate = 0; - int channels = 0; - int encoding = 0; - - m_buffer = (char*) memalign(0x40, IO_BUFFER_SIZE); - - m_fileHandle = fopen(path, "rb"); - if (!m_fileHandle) { - m_bOpened = false; - return; - } - - setvbuf(m_fileHandle, m_buffer, _IOFBF, IO_BUFFER_SIZE); - - m_bOpened = mpg123_replace_reader_handle(m_pMH, mpg123_read_replacement, mpg123_seek_replacement, NULL) == MPG123_OK - && mpg123_open_handle(m_pMH, m_fileHandle) == MPG123_OK - && mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK; - - m_nRate = rate; - m_nChannels = channels; - - if ( IsOpened() ) - { - mpg123_format_none(m_pMH); - mpg123_format(m_pMH, rate, channels, encoding); - } } } + void FileOpen() + { + if(!m_bFileNotOpenedYet) return; + + long rate = 0; + int channels = 0; + int encoding = 0; + m_bOpened = mpg123_open(m_pMH, m_pPath) == MPG123_OK + && mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK; + + m_nRate = rate; + m_nChannels = channels; + + if(IsOpened()) { + mpg123_format_none(m_pMH); + mpg123_format(m_pMH, rate, channels, encoding); + } + m_bFileNotOpenedYet = false; + } + ~CMP3File() { if ( m_pMH ) @@ -725,13 +746,6 @@ public: mpg123_close(m_pMH); mpg123_delete(m_pMH); - if (m_fileHandle) { - fclose(m_fileHandle); - } - free(m_buffer); - - m_fileHandle = nil; - m_buffer = nil; m_pMH = nil; } } @@ -748,7 +762,7 @@ public: uint32 GetSampleCount() { - if ( !IsOpened() ) return 0; + if ( !IsOpened() || m_bFileNotOpenedYet ) return 0; return mpg123_length(m_pMH); } @@ -764,19 +778,19 @@ public: void Seek(uint32 milliseconds) { - if ( !IsOpened() ) return; + if ( !IsOpened() || m_bFileNotOpenedYet ) return; mpg123_seek(m_pMH, ms2samples(milliseconds), SEEK_SET); } uint32 Tell() { - if ( !IsOpened() ) return 0; + if ( !IsOpened() || m_bFileNotOpenedYet ) return 0; return samples2ms(mpg123_tell(m_pMH)); } uint32 Decode(void *buffer) { - if ( !IsOpened() ) return 0; + if ( !IsOpened() || m_bFileNotOpenedYet ) return 0; size_t size; int err = mpg123_read(m_pMH, (unsigned char *)buffer, GetBufferSize(), &size); @@ -805,43 +819,52 @@ class CADFFile : public CMP3File fseek((FILE*)fh, pos, seekType); return ftell((FILE*)fh); } + static void r_close(void* fh) + { + fclose((FILE*)fh); + } public: CADFFile(const char* path) { m_pMH = mpg123_new(nil, nil); if (m_pMH) { -#ifdef MP3_USE_FUZZY_SEEK - mpg123_param(m_pMH, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS | MPG123_QUIET, 0.0); -#else mpg123_param(m_pMH, MPG123_FLAGS, MPG123_SEEKBUFFER | MPG123_GAPLESS, 0.0); + + m_bOpened = true; + m_bFileNotOpenedYet = true; + m_pPath = path; + // It's possible to move this to audioFileOpsThread(), but effect isn't noticable + probably not compatible with our current cutscene audio handling +#if 1 + FileOpen(); #endif - long rate = 0; - int channels = 0; - int encoding = 0; - m_buffer = (char*) memalign(0x40, IO_BUFFER_SIZE); - - FILE* m_fileHandle = fopen(path, "rb"); - if (!m_fileHandle) { - m_bOpened = false; - return; - } - - setvbuf(m_fileHandle, m_buffer, _IOFBF, IO_BUFFER_SIZE); - - m_bOpened = mpg123_replace_reader_handle(m_pMH, r_read, r_seek, NULL) == MPG123_OK - && mpg123_open_handle(m_pMH, m_fileHandle) == MPG123_OK && mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK; - m_nRate = rate; - m_nChannels = channels; - - if (IsOpened()) - { - mpg123_format_none(m_pMH); - mpg123_format(m_pMH, rate, channels, encoding); - } } } + + void FileOpen() + { + if(!m_bFileNotOpenedYet) return; + + long rate = 0; + int channels = 0; + int encoding = 0; + + FILE *f = fopen(m_pPath, "rb"); + + m_bOpened = f && mpg123_replace_reader_handle(m_pMH, r_read, r_seek, r_close) == MPG123_OK + && mpg123_open_handle(m_pMH, f) == MPG123_OK && mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK; + + m_nRate = rate; + m_nChannels = channels; + + if(IsOpened()) { + mpg123_format_none(m_pMH); + mpg123_format(m_pMH, rate, channels, encoding); + } + + m_bFileNotOpenedYet = false; + } }; #endif @@ -872,7 +895,7 @@ public: static short quantize(double sample) { int a = int(sample + 0.5); - return short(clamp(a, -32768, 32767)); + return short(Clamp(a, -32768, 32767)); } void Decode(void* _inbuf, int16* _outbuf, size_t size) @@ -966,6 +989,10 @@ public: m_ppVagBuffers[i] = new uint8[VB_BLOCK_SIZE]; } + void FileOpen() + { + } + ~CVbFile() { if (m_pFile) @@ -1119,6 +1146,10 @@ public: m_bOpened = true; } } + + void FileOpen() + { + } ~COpusFile() { @@ -1184,11 +1215,173 @@ public: }; #endif + +// For multi-thread: Someone always acquire stream's mutex before entering here +void +CStream::BuffersShouldBeFilled() +{ +#ifdef MULTITHREADED_AUDIO + if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) { + std::queue> tempQueue; + for(int i = 0; i < NUM_STREAMBUFFERS / 2; i++) { + tempQueue.push(std::pair(m_alBuffers[i * 2], m_alBuffers[i * 2 + 1])); + } + m_fillBuffers.swap(tempQueue); + + FlagAsToBeProcessed(); + + m_bActive = true; // to allow Update() to queue the filled buffers & play + return; + } + std::queue>().swap(m_fillBuffers); +#endif + if ( FillBuffers() != 0 ) + { + SetPlay(true); + } +} + +// returns whether it's queued (not on multi-thread) +bool +CStream::BufferShouldBeFilledAndQueued(std::pair* bufs) +{ +#ifdef MULTITHREADED_AUDIO + if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) + m_fillBuffers.push(*bufs); + else +#endif + { + ALuint alBuffers[2] = {(*bufs).first, (*bufs).second}; // left - right + if (FillBuffer(alBuffers)) { + alSourceQueueBuffers(m_pAlSources[0], 1, &alBuffers[0]); + alSourceQueueBuffers(m_pAlSources[1], 1, &alBuffers[1]); + return true; + } + } + return false; +} + +#ifdef MULTITHREADED_AUDIO +void +CStream::FlagAsToBeProcessed(bool close) +{ + if (!close && MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) + return; + + gAudioThreadQueueMutex.lock(); + if (close) + gStreamsToClose.push(std::pair(m_pSoundFile ? m_pSoundFile : nil, m_pBuffer ? m_pBuffer : nil)); + else + gStreamsToProcess.push(this); + + gAudioThreadQueueMutex.unlock(); + + gAudioThreadCv.notify_one(); +} + +void audioFileOpsThread() +{ + do + { + CStream *stream; + { + // Just a semaphore + std::unique_lock queueMutex(gAudioThreadQueueMutex); + gAudioThreadCv.wait(queueMutex, [] { return gStreamsToProcess.size() > 0 || gStreamsToClose.size() > 0 || gAudioThreadTerm; }); + if (gAudioThreadTerm) + return; + + if (!gStreamsToClose.empty()) { + auto streamToClose = gStreamsToClose.front(); + gStreamsToClose.pop(); + if (streamToClose.first) { // pSoundFile + delete streamToClose.first; + } + + if (streamToClose.second) { // pBuffer + free(streamToClose.second); + } + } + + if (!gStreamsToProcess.empty()) { + stream = gStreamsToProcess.front(); + gStreamsToProcess.pop(); + } else + continue; + } + + std::unique_lock lock(stream->m_mutex); + + std::pair buffers, *lastBufAddr; + bool insertBufsAfterCheck = false; + + do { + if (!stream->IsOpened()) { + break; + } + + if (stream->m_bReset) + break; + + // We gave up this idea for now + /* + stream->m_pSoundFile->FileOpen(); + + // Deffered allocation, do it now + if (stream->m_pBuffer == nil) { + stream->m_pBuffer = malloc(stream->m_pSoundFile->GetBufferSize()); + ASSERT(stream->m_pBuffer != nil); + } + */ + + if (stream->m_bDoSeek) { + stream->m_bDoSeek = false; + int pos = stream->m_SeekPos; + lock.unlock(); + stream->m_pSoundFile->Seek(pos); + lock.lock(); + + continue; // let's do the checks again, make sure we didn't miss anything while Seeking + } + + if (insertBufsAfterCheck) { + stream->m_queueBuffers.push(buffers); + insertBufsAfterCheck = false; + } + + if (!stream->m_fillBuffers.empty()) { + lastBufAddr = &stream->m_fillBuffers.front(); + buffers = *lastBufAddr; + lock.unlock(); + + ALuint alBuffers[2] = {buffers.first, buffers.second}; // left - right + bool filled = stream->FillBuffer(alBuffers); + + lock.lock(); + + // Make sure queue isn't touched after we released mutex + if (!stream->m_fillBuffers.empty() && lastBufAddr == &stream->m_fillBuffers.front()) { + stream->m_fillBuffers.pop(); + if (filled) + insertBufsAfterCheck = true; // Also make sure stream's properties aren't changed. So make one more pass, and push it to m_queueBuffers only if it pass checks again. + } + } else + break; + + } while (true); + + } while(true); +} +#endif + void CStream::Initialise() { #ifdef AUDIO_OAL_USE_MPG123 mpg123_init(); #endif +#ifdef MULTITHREADED_AUDIO + gAudioThread = std::thread(audioFileOpsThread); +#endif } void CStream::Terminate() @@ -1196,14 +1389,27 @@ void CStream::Terminate() #ifdef AUDIO_OAL_USE_MPG123 mpg123_exit(); #endif +#ifdef MULTITHREADED_AUDIO + gAudioThreadQueueMutex.lock(); + gAudioThreadTerm = true; + gAudioThreadQueueMutex.unlock(); + + gAudioThreadCv.notify_one(); + gAudioThread.join(); +#endif } -CStream::CStream(char *filename, ALuint *sources, ALuint (&buffers)[NUM_STREAMBUFFERS], uint32 overrideSampleRate) : +CStream::CStream(ALuint *sources, ALuint (&buffers)[NUM_STREAMBUFFERS]) : m_pAlSources(sources), m_alBuffers(buffers), m_pBuffer(nil), m_bPaused(false), m_bActive(false), +#ifdef MULTITHREADED_AUDIO + m_bIExist(false), + m_bDoSeek(false), + m_SeekPos(0), +#endif m_pSoundFile(nil), m_bReset(false), m_nVolume(0), @@ -1212,6 +1418,27 @@ CStream::CStream(char *filename, ALuint *sources, ALuint (&buffers)[NUM_STREAMBU m_nLoopCount(1) { +} + +bool CStream::Open(const char* filename, uint32 overrideSampleRate) +{ + if (IsOpened()) return false; + +#ifdef MULTITHREADED_AUDIO + std::unique_lock lock(m_mutex); + + m_bDoSeek = false; + m_SeekPos = 0; +#endif + + m_bPaused = false; + m_bActive = false; + m_bReset = false; + m_nVolume = 0; + m_nPan = 0; + m_nPosBeforeReset = 0; + m_nLoopCount = 1; + // Be case-insensitive on linux (from https://github.com/OneSadCookie/fcaseopen/) #if !defined(_WIN32) char *real = casepath(filename); @@ -1250,44 +1477,67 @@ CStream::CStream(char *filename, ALuint *sources, ALuint (&buffers)[NUM_STREAMBU else m_pSoundFile = nil; - if ( IsOpened() ) + if ( m_pSoundFile && m_pSoundFile->IsOpened() ) { - m_pBuffer = malloc(m_pSoundFile->GetBufferSize()); - ASSERT(m_pBuffer!=nil); - - DEV("AvgSamplesPerSec: %d\n", m_pSoundFile->GetAvgSamplesPerSec()); - DEV("SampleCount: %d\n", m_pSoundFile->GetSampleCount()); - DEV("SampleRate: %d\n", m_pSoundFile->GetSampleRate()); - DEV("Channels: %d\n", m_pSoundFile->GetChannels()); - DEV("Buffer Samples: %d\n", m_pSoundFile->GetBufferSamples()); - DEV("Buffer sec: %f\n", (float(m_pSoundFile->GetBufferSamples()) / float(m_pSoundFile->GetChannels())/ float(m_pSoundFile->GetSampleRate()))); - DEV("Length MS: %02d:%02d\n", (m_pSoundFile->GetLength() / 1000) / 60, (m_pSoundFile->GetLength() / 1000) % 60); - - return; + uint32 bufSize = m_pSoundFile->GetBufferSize(); + if(bufSize != 0) { // Otherwise it's deferred + m_pBuffer = malloc(bufSize); + ASSERT(m_pBuffer != nil); + + DEV("AvgSamplesPerSec: %d\n", m_pSoundFile->GetAvgSamplesPerSec()); + DEV("SampleCount: %d\n", m_pSoundFile->GetSampleCount()); + DEV("SampleRate: %d\n", m_pSoundFile->GetSampleRate()); + DEV("Channels: %d\n", m_pSoundFile->GetChannels()); + DEV("Buffer Samples: %d\n", m_pSoundFile->GetBufferSamples()); + DEV("Buffer sec: %f\n", (float(m_pSoundFile->GetBufferSamples()) / float(m_pSoundFile->GetChannels())/ float(m_pSoundFile->GetSampleRate()))); + DEV("Length MS: %02d:%02d\n", (m_pSoundFile->GetLength() / 1000) / 60, (m_pSoundFile->GetLength() / 1000) % 60); + } +#ifdef MULTITHREADED_AUDIO + m_bIExist = true; +#endif + return true; } + return false; } CStream::~CStream() { - Delete(); + assert(!IsOpened()); } -void CStream::Delete() +void CStream::Close() { + if(!IsOpened()) return; + +#ifdef MULTITHREADED_AUDIO + { + std::lock_guard lock(m_mutex); + + Stop(); + ClearBuffers(); + m_bIExist = false; + std::queue>().swap(m_fillBuffers); + tsQueue>().swapNts(m_queueBuffers); // TSness not required, mutex is acquired + } + + FlagAsToBeProcessed(true); +#else + Stop(); ClearBuffers(); - + if ( m_pSoundFile ) { delete m_pSoundFile; m_pSoundFile = nil; } - + if ( m_pBuffer ) { free(m_pBuffer); m_pBuffer = nil; } +#endif } bool CStream::HasSource() @@ -1295,9 +1545,14 @@ bool CStream::HasSource() return (m_pAlSources[0] != AL_NONE) && (m_pAlSources[1] != AL_NONE); } +// m_bIExist only written in main thread, thus mutex is not needed on main thread bool CStream::IsOpened() { +#ifdef MULTITHREADED_AUDIO + return m_bIExist; +#else return m_pSoundFile && m_pSoundFile->IsOpened(); +#endif } bool CStream::IsPlaying() @@ -1311,6 +1566,14 @@ bool CStream::IsPlaying() alGetSourcei(m_pAlSources[1], AL_SOURCE_STATE, &sourceState[1]); if (sourceState[0] == AL_PLAYING || sourceState[1] == AL_PLAYING) return true; + +#ifdef MULTITHREADED_AUDIO + std::lock_guard lock(m_mutex); + + // Streams are designed in such a way that m_fillBuffers and m_queueBuffers will be *always* filled if audio is playing, and mutex is acquired + if (!m_fillBuffers.empty() || !m_queueBuffers.emptyNts()) + return true; +#endif } return false; @@ -1372,10 +1635,10 @@ void CStream::SetVolume(uint32 nVol) void CStream::SetPan(uint8 nPan) { - m_nPan = clamp((int8)nPan - 63, 0, 63); + m_nPan = Clamp((int8)nPan - 63, 0, 63); SetPosition(0, (m_nPan - 63) / 64.0f, 0.0f, Sqrt(1.0f - SQR((m_nPan - 63) / 64.0f))); - m_nPan = clamp((int8)nPan + 64, 64, 127); + m_nPan = Clamp((int8)nPan + 64, 64, 127); SetPosition(1, (m_nPan - 63) / 64.0f, 0.0f, Sqrt(1.0f - SQR((m_nPan - 63) / 64.0f))); m_nPan = nPan; @@ -1385,8 +1648,24 @@ void CStream::SetPan(uint8 nPan) void CStream::SetPosMS(uint32 nPos) { if ( !IsOpened() ) return; - m_pSoundFile->Seek(nPos); + +#ifdef MULTITHREADED_AUDIO + std::lock_guard lock(m_mutex); + + std::queue>().swap(m_fillBuffers); + tsQueue>().swapNts(m_queueBuffers); // TSness not required, second thread always access it when stream mutex acquired + + if (MusicManager.m_nMusicMode != MUSICMODE_CUTSCENE) { + m_bDoSeek = true; + m_SeekPos = nPos; + } else +#endif + { + m_pSoundFile->Seek(nPos); + } ClearBuffers(); + + // adding to gStreamsToProcess not needed, someone always calls Start() / BuffersShouldBeFilled() after SetPosMS } uint32 CStream::GetPosMS() @@ -1394,10 +1673,16 @@ uint32 CStream::GetPosMS() if ( !HasSource() ) return 0; if ( !IsOpened() ) return 0; + // Deferred init causes division by zero + if (m_pSoundFile->GetChannels() == 0) + return 0; + ALint offset; //alGetSourcei(m_alSource, AL_SAMPLE_OFFSET, &offset); alGetSourcei(m_pAlSources[0], AL_BYTE_OFFSET, &offset); + //std::lock_guard lock(m_mutex); + return m_pSoundFile->Tell() - m_pSoundFile->samples2ms(m_pSoundFile->GetBufferSamples() * (NUM_STREAMBUFFERS/2-1)) / m_pSoundFile->GetChannels() + m_pSoundFile->samples2ms(offset/m_pSoundFile->GetSampleSize()) / m_pSoundFile->GetChannels(); @@ -1411,6 +1696,7 @@ uint32 CStream::GetLengthMS() bool CStream::FillBuffer(ALuint *alBuffer) { +#ifndef MULTITHREADED_AUDIO if ( !HasSource() ) return false; if ( !IsOpened() ) @@ -1419,13 +1705,14 @@ bool CStream::FillBuffer(ALuint *alBuffer) return false; if ( !(alBuffer[1] != AL_NONE && alIsBuffer(alBuffer[1])) ) return false; - +#endif + uint32 size = m_pSoundFile->Decode(m_pBuffer); if( size == 0 ) return false; - - uint32 channelSize = size / m_pSoundFile->GetChannels(); + uint32 channelSize = size / m_pSoundFile->GetChannels(); + alBufferData(alBuffer[0], AL_FORMAT_MONO16, m_pBuffer, channelSize, m_pSoundFile->GetSampleRate()); // TODO: use just one buffer if we play mono if (m_pSoundFile->GetChannels() == 1) @@ -1435,6 +1722,26 @@ bool CStream::FillBuffer(ALuint *alBuffer) return true; } +#ifdef MULTITHREADED_AUDIO +bool CStream::QueueBuffers() +{ + bool buffersQueued = false; + std::pair buffers; + while (m_queueBuffers.peekPop(&buffers)) // beware: m_queueBuffers is tsQueue + { + ALuint leftBuf = buffers.first; + ALuint rightBuf = buffers.second; + + alSourceQueueBuffers(m_pAlSources[0], 1, &leftBuf); + alSourceQueueBuffers(m_pAlSources[1], 1, &rightBuf); + + buffersQueued = true; + } + return buffersQueued; +} +#endif + +// Only used in single-threaded audio or cutscene audio int32 CStream::FillBuffers() { int32 i = 0; @@ -1464,17 +1771,33 @@ void CStream::ClearBuffers() alSourceUnqueueBuffers(m_pAlSources[1], 1, &value); } -bool CStream::Setup(bool imSureQueueIsEmpty) +bool CStream::Setup(bool imSureQueueIsEmpty, bool lock) { if ( IsOpened() ) { - alSourcei(m_pAlSources[0], AL_LOOPING, AL_FALSE); - alSourcei(m_pAlSources[1], AL_LOOPING, AL_FALSE); +#ifdef MULTITHREADED_AUDIO + if (lock) + m_mutex.lock(); +#endif + if (!imSureQueueIsEmpty) { - SetPlay(false); + Stop(); ClearBuffers(); } +#ifdef MULTITHREADED_AUDIO + if (MusicManager.m_nMusicMode == MUSICMODE_CUTSCENE) { + m_pSoundFile->Seek(0); + } else { + m_bDoSeek = true; + m_SeekPos = 0; + } + + if (lock) + m_mutex.unlock(); +#else m_pSoundFile->Seek(0); +#endif + //SetPosition(0.0f, 0.0f, 0.0f); SetPitch(1.0f); //SetPan(m_nPan); @@ -1512,7 +1835,7 @@ void CStream::SetPlay(bool state) { ALint sourceState = AL_STOPPED; alGetSourcei(m_pAlSources[0], AL_SOURCE_STATE, &sourceState); - if (sourceState != AL_STOPPED ) + if (sourceState != AL_STOPPED) alSourceStop(m_pAlSources[0]); sourceState = AL_STOPPED; @@ -1527,8 +1850,12 @@ void CStream::SetPlay(bool state) void CStream::Start() { if ( !HasSource() ) return; - if ( FillBuffers() != 0 ) - SetPlay(true); + +#ifdef MULTITHREADED_AUDIO + std::lock_guard lock(m_mutex); + tsQueue>().swapNts(m_queueBuffers); // TSness not required, second thread always access it when stream mutex acquired +#endif + BuffersShouldBeFilled(); } void CStream::Stop() @@ -1550,9 +1877,23 @@ void CStream::Update() if ( !m_bPaused ) { - ALint totalBuffers[2] = { 0, 0 }; - ALint buffersProcessed[2] = { 0, 0 }; + bool buffersQueuedAndStarted = false; + bool buffersQueuedButNotStarted = false; +#ifdef MULTITHREADED_AUDIO + // Put it in here because we need totalBuffers after queueing to decide when to loop audio + if (m_bActive) + { + buffersQueuedAndStarted = QueueBuffers(); + if(buffersQueuedAndStarted) { + SetPlay(true); + } + } +#endif + + ALint totalBuffers[2] = {0, 0}; + ALint buffersProcessed[2] = {0, 0}; + // Relying a lot on left buffer states in here do @@ -1564,44 +1905,66 @@ void CStream::Update() alGetSourcei(m_pAlSources[1], AL_BUFFERS_QUEUED, &totalBuffers[1]); alGetSourcei(m_pAlSources[1], AL_BUFFERS_PROCESSED, &buffersProcessed[1]); } while (buffersProcessed[0] != buffersProcessed[1]); - + assert(buffersProcessed[0] == buffersProcessed[1]); // Correcting OpenAL concepts here: // AL_BUFFERS_QUEUED = Number of *all* buffers in queue, including processed, processing and pending // AL_BUFFERS_PROCESSED = Index of the buffer being processing right now. Buffers coming after that(have greater index) are pending buffers. // which means: totalBuffers[0] - buffersProcessed[0] = pending buffers - - bool buffersRefilled = false; - + // We should wait queue to be cleared to loop track, because position calculation relies on queue. if (m_nLoopCount != 1 && m_bActive && totalBuffers[0] == 0) { - Setup(true); - buffersRefilled = FillBuffers() != 0; - if (m_nLoopCount != 0) - m_nLoopCount--; +#ifdef MULTITHREADED_AUDIO + std::lock_guard lock(m_mutex); + + if (m_fillBuffers.empty() && m_queueBuffers.emptyNts()) // we already acquired stream mutex, which is enough for second thread. thus Nts variant +#endif + { + Setup(true, false); + BuffersShouldBeFilled(); // will also call SetPlay(true) + if (m_nLoopCount != 0) + m_nLoopCount--; + } } else { - while( buffersProcessed[0]-- ) + static std::queue> tempFillBuffer; + + while ( buffersProcessed[0]-- ) { ALuint buffer[2]; alSourceUnqueueBuffers(m_pAlSources[0], 1, &buffer[0]); alSourceUnqueueBuffers(m_pAlSources[1], 1, &buffer[1]); - - if (m_bActive && FillBuffer(buffer)) + + if (m_bActive) { - buffersRefilled = true; - alSourceQueueBuffers(m_pAlSources[0], 1, &buffer[0]); - alSourceQueueBuffers(m_pAlSources[1], 1, &buffer[1]); + tempFillBuffer.push(std::pair(buffer[0], buffer[1])); } } + + if (m_bActive && buffersProcessed[1]) + { +#ifdef MULTITHREADED_AUDIO + m_mutex.lock(); +#endif + while (!tempFillBuffer.empty()) { + auto elem = tempFillBuffer.front(); + tempFillBuffer.pop(); + buffersQueuedButNotStarted = BufferShouldBeFilledAndQueued(&elem); + } +#ifdef MULTITHREADED_AUDIO + m_mutex.unlock(); + FlagAsToBeProcessed(); +#endif + + } } - // Two reasons: 1-Source may be starved to audio and stopped itself, 2- We're already waiting it to starve and die for looping track! - if (m_bActive && (buffersRefilled || (totalBuffers[1] - buffersProcessed[1] != 0))) + // Source may be starved to audio and stopped itself + if (m_bActive && !buffersQueuedAndStarted && (buffersQueuedButNotStarted || (totalBuffers[1] - buffersProcessed[1] != 0))) SetPlay(true); } } @@ -1610,28 +1973,45 @@ void CStream::ProviderInit() { if ( m_bReset ) { - if ( Setup(true) ) + if ( Setup(true, false) ) // lock not needed, thread can't process streams with m_bReset set { SetPan(m_nPan); SetVolume(m_nVolume); SetLoopCount(m_nLoopCount); SetPosMS(m_nPosBeforeReset); - if (m_bActive) - FillBuffers(); - SetPlay(m_bActive); - if ( m_bPaused ) +#ifdef MULTITHREADED_AUDIO + std::unique_lock lock(m_mutex); +#endif + if(m_bActive) + BuffersShouldBeFilled(); + + if (m_bPaused) Pause(); + + m_bReset = false; + + } else { +#ifdef MULTITHREADED_AUDIO + std::unique_lock lock(m_mutex); +#endif + m_bReset = false; } - - m_bReset = false; } } void CStream::ProviderTerm() { +#ifdef MULTITHREADED_AUDIO + std::lock_guard lock(m_mutex); + + // unlike Close() we will reuse this stream, so clearing queues are important. + std::queue>().swap(m_fillBuffers); + tsQueue>().swapNts(m_queueBuffers); // stream mutex is already acquired, thus Nts variant +#endif m_bReset = true; m_nPosBeforeReset = GetPosMS(); - + + Stop(); ClearBuffers(); } diff --git a/src/audio/oal/stream.h b/src/audio/oal/stream.h index 9a2a2fbe..f0456925 100644 --- a/src/audio/oal/stream.h +++ b/src/audio/oal/stream.h @@ -11,6 +11,7 @@ public: virtual ~IDecoder() { } virtual bool IsOpened() = 0; + virtual void FileOpen() = 0; virtual uint32 GetSampleSize() = 0; virtual uint32 GetSampleCount() = 0; @@ -48,12 +49,70 @@ public: uint32 GetLength() { + FileOpen(); // abort deferred init, we need length now - game has to cache audio file sizes return float(GetSampleCount()) * 1000.0f / float(GetSampleRate()); } virtual uint32 Decode(void *buffer) = 0; }; +#ifdef MULTITHREADED_AUDIO +template class tsQueue +{ +public: + tsQueue() : count(0) { } + + void push(const T &value) + { + std::lock_guard lock(m_mutex); + m_queue.push(value); + count++; + } + bool peekPop(T *retVal) + { + std::lock_guard lock(m_mutex); + if (count == 0) + return false; + + *retVal = m_queue.front(); + m_queue.pop(); + count--; + return true; + } + + void swapNts(tsQueue &replaceWith) + { + m_queue.swap(replaceWith.m_queue); + replaceWith.count = count; + } + + /* + void swapTs(tsQueue &replaceWith) + { + std::lock_guard lock(m_mutex); + std::lock_guard lock2(replaceWith.m_mutex); + swapNts(replaceWith); + } + */ + + bool emptyNts() + { + return count == 0; + } + + /* + bool emptyTs() + { + std::lock_guard lock(m_mutex); + return emptyNts(); + } + */ + + std::queue m_queue; + int count; + mutable std::mutex m_mutex; +}; +#endif class CStream { char m_aFilename[128]; @@ -63,6 +122,17 @@ class CStream bool m_bPaused; bool m_bActive; +public: +#ifdef MULTITHREADED_AUDIO + std::mutex m_mutex; + std::queue> m_fillBuffers; // left and right buffer + tsQueue> m_queueBuffers; +// std::condition_variable m_closeCv; + bool m_bDoSeek; + uint32 m_SeekPos; + bool m_bIExist; +#endif + void *m_pBuffer; bool m_bReset; @@ -72,7 +142,14 @@ class CStream int32 m_nLoopCount; IDecoder *m_pSoundFile; - + + void BuffersShouldBeFilled(); // all + bool BufferShouldBeFilledAndQueued(std::pair*); // two (left-right) +#ifdef MULTITHREADED_AUDIO + void FlagAsToBeProcessed(bool close = false); + bool QueueBuffers(); +#endif + bool HasSource(); void SetPosition(int i, float x, float y, float z); void SetPitch(float pitch); @@ -81,15 +158,17 @@ class CStream void SetPlay(bool state); bool FillBuffer(ALuint *alBuffer); - int32 FillBuffers(); + int32 FillBuffers(); void ClearBuffers(); -public: +//public: static void Initialise(); static void Terminate(); - CStream(char *filename, ALuint *sources, ALuint (&buffers)[NUM_STREAMBUFFERS], uint32 overrideSampleRate = 32000); + CStream(ALuint *sources, ALuint (&buffers)[NUM_STREAMBUFFERS]); ~CStream(); void Delete(); + bool Open(const char *filename, uint32 overrideSampleRate = 32000); + void Close(); bool IsOpened(); bool IsPlaying(); @@ -100,12 +179,11 @@ public: uint32 GetPosMS(); uint32 GetLengthMS(); - bool Setup(bool imSureQueueIsEmpty = false); + bool Setup(bool imSureQueueIsEmpty = false, bool lock = true); void Start(); void Stop(); void Update(void); void SetLoopCount(int32); - void ProviderInit(); void ProviderTerm(); diff --git a/src/audio/sampman.h b/src/audio/sampman.h index c0cec95e..1e1e4bc7 100644 --- a/src/audio/sampman.h +++ b/src/audio/sampman.h @@ -1,5 +1,6 @@ #pragma once #include "AudioSamples.h" +#include "audio_enums.h" #define MAX_VOLUME 127 #define MAX_FREQ DIGITALRATE @@ -115,10 +116,9 @@ enum #define MAXPROVIDERS 64 -#define MAXCHANNELS 28 -#define MAXCHANNELS_SURROUND 24 +#define MAXCHANNELS (NUM_CHANNELS_GENERIC+1) +#define MAXCHANNELS_SURROUND (MAXCHANNELS-4) #define MAX2DCHANNELS 1 -#define CHANNEL2D MAXCHANNELS #define MAX_STREAMS 3 @@ -130,7 +130,13 @@ enum #define DIGITALBITS 16 #define DIGITALCHANNELS 2 -#define MAX_DIGITAL_MIXER_CHANNELS 32 +#ifdef FIX_BUGS +#define MAX_DIGITAL_MIXER_CHANNELS (MAXCHANNELS+MAX_STREAMS*2+MAX2DCHANNELS) +#else +#define MAX_DIGITAL_MIXER_CHANNELS (MAXCHANNELS+MAX_STREAMS*2) +#endif + +static_assert( NUM_CHANNELS == MAXCHANNELS + MAX2DCHANNELS, "The number of channels doesn't match with an enum" ); class cSampleManager { @@ -139,9 +145,9 @@ class cSampleManager uint8 m_nMP3BoostVolume; uint8 m_nEffectsFadeVolume; uint8 m_nMusicFadeVolume; - uint8 m_nMonoMode; + bool8 m_nMonoMode; char m_szCDRomRootPath[80]; - bool m_bInitialised; + bool8 m_bInitialised; uint8 m_nNumberOfProviders; char *m_aAudioProviders[MAXPROVIDERS]; tSample m_aSamples[TOTAL_AUDIO_SAMPLES]; @@ -171,16 +177,16 @@ public: int8 AutoDetect3DProviders(); - bool IsMP3RadioChannelAvailable(void); + bool8 IsMP3RadioChannelAvailable(void); void ReleaseDigitalHandle (void); void ReacquireDigitalHandle(void); - bool Initialise(void); - void Terminate (void); + bool8 Initialise(void); + void Terminate (void); - bool CheckForAnAudioFileOnCD(void); - char GetCDAudioDriveLetter (void); + bool8 CheckForAnAudioFileOnCD(void); + char GetCDAudioDriveLetter (void); void UpdateEffectsVolume(void); @@ -189,14 +195,14 @@ public: void SetMP3BoostVolume (uint8 nVolume); void SetEffectsFadeVolume (uint8 nVolume); void SetMusicFadeVolume (uint8 nVolume); - void SetMonoMode (uint8 nMode); + void SetMonoMode (bool8 nMode); - bool LoadSampleBank (uint8 nBank); - void UnloadSampleBank (uint8 nBank); - bool IsSampleBankLoaded(uint8 nBank); + bool8 LoadSampleBank (uint8 nBank); + void UnloadSampleBank (uint8 nBank); + bool8 IsSampleBankLoaded(uint8 nBank); - bool IsPedCommentLoaded(uint32 nComment); - bool LoadPedComment (uint32 nComment); + bool8 IsPedCommentLoaded(uint32 nComment); + bool8 LoadPedComment (uint32 nComment); int32 GetBankContainingSound(uint32 offset); int32 _GetPedCommentSlot(uint32 nComment); @@ -206,10 +212,10 @@ public: int32 GetSampleLoopEndOffset (uint32 nSample); uint32 GetSampleLength (uint32 nSample); - bool UpdateReverb(void); + bool8 UpdateReverb(void); - void SetChannelReverbFlag (uint32 nChannel, uint8 nReverbFlag); - bool InitialiseChannel (uint32 nChannel, uint32 nSfx, uint8 nBank); + void SetChannelReverbFlag (uint32 nChannel, bool8 nReverbFlag); + bool8 InitialiseChannel (uint32 nChannel, uint32 nSfx, uint8 nBank); void SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume); void SetChannel3DPosition (uint32 nChannel, float fX, float fY, float fZ); void SetChannel3DDistances (uint32 nChannel, float fMax, float fMin); @@ -218,68 +224,33 @@ public: void SetChannelFrequency (uint32 nChannel, uint32 nFreq); void SetChannelLoopPoints (uint32 nChannel, uint32 nLoopStart, int32 nLoopEnd); void SetChannelLoopCount (uint32 nChannel, uint32 nLoopCount); - bool GetChannelUsedFlag (uint32 nChannel); + bool8 GetChannelUsedFlag (uint32 nChannel); void StartChannel (uint32 nChannel); void StopChannel (uint32 nChannel); - void PreloadStreamedFile (uint32 nFile, uint8 nStream); - void PauseStream (uint8 nPauseFlag, uint8 nStream); - void StartPreloadedStreamedFile (uint8 nStream); - bool StartStreamedFile (uint32 nFile, uint32 nPos, uint8 nStream); - void StopStreamedFile (uint8 nStream); - int32 GetStreamedFilePosition (uint8 nStream); - void SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream); - int32 GetStreamedFileLength (uint8 nStream); - bool IsStreamPlaying (uint8 nStream); + void PreloadStreamedFile (uint32 nFile, uint8 nStream = 0); + void PauseStream (bool8 nPauseFlag, uint8 nStream = 0); + void StartPreloadedStreamedFile (uint8 nStream = 0); + bool8 StartStreamedFile (uint32 nFile, uint32 nPos, uint8 nStream = 0); + void StopStreamedFile (uint8 nStream = 0); + int32 GetStreamedFilePosition (uint8 nStream = 0); + void SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream = 0); + int32 GetStreamedFileLength (uint8 nStream = 0); + bool8 IsStreamPlaying (uint8 nStream = 0); + void SetStreamedFileLoopFlag (bool8 nLoopFlag, uint8 nStream = 0); #ifdef AUDIO_OAL void Service(void); #endif - bool InitialiseSampleBanks(void); + bool8 InitialiseSampleBanks(void); uint8 GetMusicVolume() const { return m_nMusicVolume; } - void SetStreamedFileLoopFlag(uint8 nLoopFlag, uint8 nStream); }; extern cSampleManager SampleManager; extern uint32 BankStartOffset[MAX_SFX_BANKS]; -#if defined(OPUS_AUDIO_PATHS) -static char StreamedNameTable[][25] = { - "AUDIO\\HEAD.OPUS", "AUDIO\\CLASS.OPUS", "AUDIO\\KJAH.OPUS", "AUDIO\\RISE.OPUS", "AUDIO\\LIPS.OPUS", "AUDIO\\GAME.OPUS", - "AUDIO\\MSX.OPUS", "AUDIO\\FLASH.OPUS", "AUDIO\\CHAT.OPUS", "AUDIO\\HEAD.OPUS", "AUDIO\\POLICE.OPUS", "AUDIO\\CITY.OPUS", - "AUDIO\\WATER.OPUS", "AUDIO\\COMOPEN.OPUS", "AUDIO\\SUBOPEN.OPUS", "AUDIO\\JB.OPUS", "AUDIO\\BET.OPUS", "AUDIO\\L1_LG.OPUS", - "AUDIO\\L2_DSB.OPUS", "AUDIO\\L3_DM.OPUS", "AUDIO\\L4_PAP.OPUS", "AUDIO\\L5_TFB.OPUS", "AUDIO\\J0_DM2.OPUS", "AUDIO\\J1_LFL.OPUS", - "AUDIO\\J2_KCL.OPUS", "AUDIO\\J3_VH.OPUS", "AUDIO\\J4_ETH.OPUS", "AUDIO\\J5_DST.OPUS", "AUDIO\\J6_TBJ.OPUS", "AUDIO\\T1_TOL.OPUS", - "AUDIO\\T2_TPU.OPUS", "AUDIO\\T3_MAS.OPUS", "AUDIO\\T4_TAT.OPUS", "AUDIO\\T5_BF.OPUS", "AUDIO\\S0_MAS.OPUS", "AUDIO\\S1_PF.OPUS", - "AUDIO\\S2_CTG.OPUS", "AUDIO\\S3_RTC.OPUS", "AUDIO\\S5_LRQ.OPUS", "AUDIO\\S4_BDBA.OPUS", "AUDIO\\S4_BDBB.OPUS", "AUDIO\\S2_CTG2.OPUS", - "AUDIO\\S4_BDBD.OPUS", "AUDIO\\S5_LRQB.OPUS", "AUDIO\\S5_LRQC.OPUS", "AUDIO\\A1_SSO.OPUS", "AUDIO\\A2_PP.OPUS", "AUDIO\\A3_SS.OPUS", - "AUDIO\\A4_PDR.OPUS", "AUDIO\\A5_K2FT.OPUS", "AUDIO\\K1_KBO.OPUS", "AUDIO\\K2_GIS.OPUS", "AUDIO\\K3_DS.OPUS", "AUDIO\\K4_SHI.OPUS", - "AUDIO\\K5_SD.OPUS", "AUDIO\\R0_PDR2.OPUS", "AUDIO\\R1_SW.OPUS", "AUDIO\\R2_AP.OPUS", "AUDIO\\R3_ED.OPUS", "AUDIO\\R4_GF.OPUS", - "AUDIO\\R5_PB.OPUS", "AUDIO\\R6_MM.OPUS", "AUDIO\\D1_STOG.OPUS", "AUDIO\\D2_KK.OPUS", "AUDIO\\D3_ADO.OPUS", "AUDIO\\D5_ES.OPUS", - "AUDIO\\D7_MLD.OPUS", "AUDIO\\D4_GTA.OPUS", "AUDIO\\D4_GTA2.OPUS", "AUDIO\\D6_STS.OPUS", "AUDIO\\A6_BAIT.OPUS", "AUDIO\\A7_ETG.OPUS", - "AUDIO\\A8_PS.OPUS", "AUDIO\\A9_ASD.OPUS", "AUDIO\\K4_SHI2.OPUS", "AUDIO\\C1_TEX.OPUS", "AUDIO\\EL_PH1.OPUS", "AUDIO\\EL_PH2.OPUS", - "AUDIO\\EL_PH3.OPUS", "AUDIO\\EL_PH4.OPUS", "AUDIO\\YD_PH1.OPUS", "AUDIO\\YD_PH2.OPUS", "AUDIO\\YD_PH3.OPUS", "AUDIO\\YD_PH4.OPUS", - "AUDIO\\HD_PH1.OPUS", "AUDIO\\HD_PH2.OPUS", "AUDIO\\HD_PH3.OPUS", "AUDIO\\HD_PH4.OPUS", "AUDIO\\HD_PH5.OPUS", "AUDIO\\MT_PH1.OPUS", - "AUDIO\\MT_PH2.OPUS", "AUDIO\\MT_PH3.OPUS", "AUDIO\\MT_PH4.OPUS", "AUDIO\\MISCOM.OPUS", "AUDIO\\END.OPUS", "AUDIO\\lib_a1.OPUS", - "AUDIO\\lib_a2.OPUS", "AUDIO\\lib_a.OPUS", "AUDIO\\lib_b.OPUS", "AUDIO\\lib_c.OPUS", "AUDIO\\lib_d.OPUS", "AUDIO\\l2_a.OPUS", - "AUDIO\\j4t_1.OPUS", "AUDIO\\j4t_2.OPUS", "AUDIO\\j4t_3.OPUS", "AUDIO\\j4t_4.OPUS", "AUDIO\\j4_a.OPUS", "AUDIO\\j4_b.OPUS", - "AUDIO\\j4_c.OPUS", "AUDIO\\j4_d.OPUS", "AUDIO\\j4_e.OPUS", "AUDIO\\j4_f.OPUS", "AUDIO\\j6_1.OPUS", "AUDIO\\j6_a.OPUS", - "AUDIO\\j6_b.OPUS", "AUDIO\\j6_c.OPUS", "AUDIO\\j6_d.OPUS", "AUDIO\\t4_a.OPUS", "AUDIO\\s1_a.OPUS", "AUDIO\\s1_a1.OPUS", - "AUDIO\\s1_b.OPUS", "AUDIO\\s1_c.OPUS", "AUDIO\\s1_c1.OPUS", "AUDIO\\s1_d.OPUS", "AUDIO\\s1_e.OPUS", "AUDIO\\s1_f.OPUS", - "AUDIO\\s1_g.OPUS", "AUDIO\\s1_h.OPUS", "AUDIO\\s1_i.OPUS", "AUDIO\\s1_j.OPUS", "AUDIO\\s1_k.OPUS", "AUDIO\\s1_l.OPUS", - "AUDIO\\s3_a.OPUS", "AUDIO\\s3_b.OPUS", "AUDIO\\el3_a.OPUS", "AUDIO\\mf1_a.OPUS", "AUDIO\\mf2_a.OPUS", "AUDIO\\mf3_a.OPUS", - "AUDIO\\mf3_b.OPUS", "AUDIO\\mf3_b1.OPUS", "AUDIO\\mf3_c.OPUS", "AUDIO\\mf4_a.OPUS", "AUDIO\\mf4_b.OPUS", "AUDIO\\mf4_c.OPUS", - "AUDIO\\a1_a.OPUS", "AUDIO\\a3_a.OPUS", "AUDIO\\a5_a.OPUS", "AUDIO\\a4_a.OPUS", "AUDIO\\a4_b.OPUS", "AUDIO\\a4_c.OPUS", - "AUDIO\\a4_d.OPUS", "AUDIO\\k1_a.OPUS", "AUDIO\\k3_a.OPUS", "AUDIO\\r1_a.OPUS", "AUDIO\\r2_a.OPUS", "AUDIO\\r2_b.OPUS", - "AUDIO\\r2_c.OPUS", "AUDIO\\r2_d.OPUS", "AUDIO\\r2_e.OPUS", "AUDIO\\r2_f.OPUS", "AUDIO\\r2_g.OPUS", "AUDIO\\r2_h.OPUS", - "AUDIO\\r5_a.OPUS", "AUDIO\\r6_a.OPUS", "AUDIO\\r6_a1.OPUS", "AUDIO\\r6_b.OPUS", "AUDIO\\lo2_a.OPUS", "AUDIO\\lo6_a.OPUS", - "AUDIO\\yd2_a.OPUS", "AUDIO\\yd2_b.OPUS", "AUDIO\\yd2_c.OPUS", "AUDIO\\yd2_c1.OPUS", "AUDIO\\yd2_d.OPUS", "AUDIO\\yd2_e.OPUS", - "AUDIO\\yd2_f.OPUS", "AUDIO\\yd2_g.OPUS", "AUDIO\\yd2_h.OPUS", "AUDIO\\yd2_ass.OPUS", "AUDIO\\yd2_ok.OPUS", "AUDIO\\h5_a.OPUS", - "AUDIO\\h5_b.OPUS", "AUDIO\\h5_c.OPUS", "AUDIO\\ammu_a.OPUS", "AUDIO\\ammu_b.OPUS", "AUDIO\\ammu_c.OPUS", "AUDIO\\door_1.OPUS", - "AUDIO\\door_2.OPUS", "AUDIO\\door_3.OPUS", "AUDIO\\door_4.OPUS", "AUDIO\\door_5.OPUS", "AUDIO\\door_6.OPUS", "AUDIO\\t3_a.OPUS", - "AUDIO\\t3_b.OPUS", "AUDIO\\t3_c.OPUS", "AUDIO\\k1_b.OPUS", "AUDIO\\cat1.OPUS"}; -#elif defined(PS2_AUDIO_PATHS) -static char StreamedNameTable[][40] = +#ifdef PS2_AUDIO_PATHS +static char PS2StreamedNameTable[][40] = { "AUDIO\\MUSIC\\WILD.VB", "AUDIO\\MUSIC\\FLASH.VB", @@ -384,7 +355,1130 @@ static char StreamedNameTable[][40] = "AUDIO\\MUSIC\\MISCOM.VB", "AUDIO\\MUSIC\\MISCOM.VB", "AUDIO\\MUSIC\\MISCOM.VB", -#else + "AUDIO\\MOBR1.WAV", + "AUDIO\\PAGER.WAV", + "AUDIO\\CARREV.WAV", + "AUDIO\\BIKEREV.WAV", + "AUDIO\\LIFTOP.WAV", + "AUDIO\\LIFTCL.WAV", + "AUDIO\\LIFTRUN.WAV", + "AUDIO\\LIFTBEL.WAV", + "AUDIO\\INLIFT.WAV", + "AUDIO\\SFX_01.WAV", + "AUDIO\\SFX_02.WAV", + "AUDIO\\CAMERAL.WAV", + "AUDIO\\CAMERAR.WAV", + "AUDIO\\CHEER1.WAV", + "AUDIO\\CHEER2.WAV", + "AUDIO\\CHEER3.WAV", + "AUDIO\\CHEER4.WAV", + "AUDIO\\OOH1.WAV", + "AUDIO\\OOH2.WAV", + "AUDIO\\RACE1.WAV", + "AUDIO\\RACE2.WAV", + "AUDIO\\RACE3.WAV", + "AUDIO\\RACE4.WAV", + "AUDIO\\RACE5.WAV", + "AUDIO\\RACE6.WAV", + "AUDIO\\RACE7.WAV", + "AUDIO\\RACE8.WAV", + "AUDIO\\RACE9.WAV", + "AUDIO\\RACE10.WAV", + "AUDIO\\RACE11.WAV", + "AUDIO\\RACE12.WAV", + "AUDIO\\RACE13.WAV", + "AUDIO\\RACE14.WAV", + "AUDIO\\RACE15.WAV", + "AUDIO\\HOT1.WAV", + "AUDIO\\HOT2.WAV", + "AUDIO\\HOT3.WAV", + "AUDIO\\HOT4.WAV", + "AUDIO\\HOT5.WAV", + "AUDIO\\HOT6.WAV", + "AUDIO\\HOT7.WAV", + "AUDIO\\HOT8.WAV", + "AUDIO\\HOT9.WAV", + "AUDIO\\HOT10.WAV", + "AUDIO\\HOT11.WAV", + "AUDIO\\HOT12.WAV", + "AUDIO\\HOT13.WAV", + "AUDIO\\HOT14.WAV", + "AUDIO\\HOT15.WAV", + "AUDIO\\LANSTP1.WAV", + "AUDIO\\LANSTP2.WAV", + "AUDIO\\LANAMU1.WAV", + "AUDIO\\LANAMU2.WAV", + "AUDIO\\AIRHORNL.WAV", + "AUDIO\\AIRHORNR.WAV", + "AUDIO\\SNIPSCRL.WAV", + "AUDIO\\SNIPSHORT.WAV", + "AUDIO\\BLOWROOF.WAV", + "AUDIO\\ASS_1.WAV", + "AUDIO\\ASS_2.WAV", + "AUDIO\\ASS_3.WAV", + "AUDIO\\ASS_4.WAV", + "AUDIO\\ASS_5.WAV", + "AUDIO\\ASS_6.WAV", + "AUDIO\\ASS_7.WAV", + "AUDIO\\ASS_8.WAV", + "AUDIO\\ASS_9.WAV", + "AUDIO\\ASS_10.WAV", + "AUDIO\\ASS_11.WAV", + "AUDIO\\ASS_12.WAV", + "AUDIO\\ASS_13.WAV", + "AUDIO\\ASS_14.WAV", + "AUDIO\\BIKE1_1.WAV", + "AUDIO\\BIKE1_2.WAV", + "AUDIO\\BIKE1_3.WAV", + "AUDIO\\BNK1_1.WAV", + "AUDIO\\BNK1_2.WAV", + "AUDIO\\BNK1_3.WAV", + "AUDIO\\BNK1_4.WAV", + "AUDIO\\BNK1_5.WAV", + "AUDIO\\BNK1_6.WAV", + "AUDIO\\BNK1_7.WAV", + "AUDIO\\BNK1_8.WAV", + "AUDIO\\BNK1_10.WAV", + "AUDIO\\BNK1_11.WAV", + "AUDIO\\BNK1_12.WAV", + "AUDIO\\BNK1_13.WAV", + "AUDIO\\BNK1_14.WAV", + "AUDIO\\BNK2_1.WAV", + "AUDIO\\BNK2_2.WAV", + "AUDIO\\BNK2_3.WAV", + "AUDIO\\BNK2_4.WAV", + "AUDIO\\BNK2_5.WAV", + "AUDIO\\BNK2_6.WAV", + "AUDIO\\BNK2_7.WAV", + "AUDIO\\BNK2_8.WAV", + "AUDIO\\BNK2_9.WAV", + "AUDIO\\BNK3_1.WAV", + "AUDIO\\BNK3_2.WAV", + "AUDIO\\BNK3_3A.WAV", + "AUDIO\\BNK3_3B.WAV", + "AUDIO\\BNK3_3C.WAV", + "AUDIO\\BNK3_4A.WAV", + "AUDIO\\BNK3_4B.WAV", + "AUDIO\\BNK3_4C.WAV", + "AUDIO\\BNK4_1.WAV", + "AUDIO\\BNK4_2.WAV", + "AUDIO\\BNK4_3A.WAV", + "AUDIO\\BNK4_3B.WAV", + "AUDIO\\BNK4_3C.WAV", + "AUDIO\\BNK4_3D.WAV", + "AUDIO\\BNK4_3E.WAV", + "AUDIO\\BNK4_3F.WAV", + "AUDIO\\BNK4_3G.WAV", + "AUDIO\\BNK4_3H.WAV", + "AUDIO\\BNK4_3I.WAV", + "AUDIO\\BNK4_3J.WAV", + "AUDIO\\BNK4_3K.WAV", + "AUDIO\\BNK4_3M.WAV", + "AUDIO\\BNK4_3O.WAV", + "AUDIO\\BNK4_3P.WAV", + "AUDIO\\BNK4_3Q.WAV", + "AUDIO\\BNK4_3R.WAV", + "AUDIO\\BNK4_3S.WAV", + "AUDIO\\BNK4_3T.WAV", + "AUDIO\\BNK4_3U.WAV", + "AUDIO\\BNK4_3V.WAV", + "AUDIO\\BNK4_4A.WAV", + "AUDIO\\BNK4_4B.WAV", + "AUDIO\\BNK4_5.WAV", + "AUDIO\\BNK4_6.WAV", + "AUDIO\\BNK4_7.WAV", + "AUDIO\\BNK4_8.WAV", + "AUDIO\\BNK4_9.WAV", + "AUDIO\\BNK4_10.WAV", + "AUDIO\\BNK4_11.WAV", + "AUDIO\\BK4_12A.WAV", + "AUDIO\\BK4_12B.WAV", + "AUDIO\\BK4_12C.WAV", + "AUDIO\\BNK4_13.WAV", + "AUDIO\\BK4_14A.WAV", + "AUDIO\\BK4_14B.WAV", + "AUDIO\\BNK4_15.WAV", + "AUDIO\\BNK4_16.WAV", + "AUDIO\\BNK4_17.WAV", + "AUDIO\\BNK4_18.WAV", + "AUDIO\\BK4_19A.WAV", + "AUDIO\\BK4_19B.WAV", + "AUDIO\\BK4_20A.WAV", + "AUDIO\\BK4_20B.WAV", + "AUDIO\\BNK4_21.WAV", + "AUDIO\\BNK422A.WAV", + "AUDIO\\BNK422B.WAV", + "AUDIO\\BK4_23A.WAV", + "AUDIO\\BK4_23B.WAV", + "AUDIO\\BK4_23C.WAV", + "AUDIO\\BK4_23D.WAV", + "AUDIO\\BK4_24A.WAV", + "AUDIO\\BK4_24B.WAV", + "AUDIO\\BNK4_25.WAV", + "AUDIO\\BNK4_26.WAV", + "AUDIO\\BNK4_27.WAV", + "AUDIO\\BNK4_28.WAV", + "AUDIO\\BNK4_29.WAV", + "AUDIO\\BNK4_30.WAV", + "AUDIO\\BK4_31A.WAV", + "AUDIO\\BK4_31B.WAV", + "AUDIO\\BNK4_32.WAV", + "AUDIO\\BK4_34A.WAV", + "AUDIO\\BK4_34B.WAV", + "AUDIO\\BK4_35A.WAV", + "AUDIO\\BK4_35B.WAV", + "AUDIO\\BNK4_36.WAV", + "AUDIO\\BNK4_37.WAV", + "AUDIO\\BNK4_38.WAV", + "AUDIO\\BNK4_39.WAV", + "AUDIO\\BK4_40A.WAV", + "AUDIO\\BK4_40B.WAV", + "AUDIO\\BNK4_41.WAV", + "AUDIO\\BNK4_42.WAV", + "AUDIO\\BNK4_43.WAV", + "AUDIO\\BNK4_44.WAV", + "AUDIO\\BNK4_45.WAV", + "AUDIO\\BNK4_46.WAV", + "AUDIO\\BNK4_47.WAV", + "AUDIO\\BNK4_48.WAV", + "AUDIO\\BNK4_49.WAV", + "AUDIO\\BNK450A.WAV", + "AUDIO\\BNK450B.WAV", + "AUDIO\\BNK4_51.WAV", + "AUDIO\\BNK4_94.WAV", + "AUDIO\\BNK4_95.WAV", + "AUDIO\\BNK4_96.WAV", + "AUDIO\\BNK4_97.WAV", + "AUDIO\\BNK4_98.WAV", + "AUDIO\\BNK4_99.WAV", + "AUDIO\\BUD1_1.WAV", + "AUDIO\\BUD1_2.WAV", + "AUDIO\\BUD1_3.WAV", + "AUDIO\\BUD1_4.WAV", + "AUDIO\\BUD1_5.WAV", + "AUDIO\\BUD1_9.WAV", + "AUDIO\\BUD1_10.WAV", + "AUDIO\\BUD2_1.WAV", + "AUDIO\\BUD2_2.WAV", + "AUDIO\\BUD2_3.WAV", + "AUDIO\\BUD2_4.WAV", + "AUDIO\\BUD2_5.WAV", + "AUDIO\\BUD2_6.WAV", + "AUDIO\\BUD2_7.WAV", + "AUDIO\\BUD3_1.WAV", + "AUDIO\\BUD3_1A.WAV", + "AUDIO\\BUD3_1B.WAV", + "AUDIO\\BUD3_1C.WAV", + "AUDIO\\BUD3_2.WAV", + "AUDIO\\BUD3_3.WAV", + "AUDIO\\BUD3_4.WAV", + "AUDIO\\BUD3_5.WAV", + "AUDIO\\BUD3_6.WAV", + "AUDIO\\BUD3_7.WAV", + "AUDIO\\BUD3_8A.WAV", + "AUDIO\\BUD3_8B.WAV", + "AUDIO\\BUD3_8C.WAV", + "AUDIO\\BUD3_9A.WAV", + "AUDIO\\BUD3_9B.WAV", + "AUDIO\\BUD3_9C.WAV", + "AUDIO\\CAP1_2.WAV", + "AUDIO\\CAP1_3.WAV", + "AUDIO\\CAP1_4.WAV", + "AUDIO\\CAP1_5.WAV", + "AUDIO\\CAP1_6.WAV", + "AUDIO\\CAP1_7.WAV", + "AUDIO\\CAP1_8.WAV", + "AUDIO\\CAP1_9.WAV", + "AUDIO\\CAP1_10.WAV", + "AUDIO\\CAP1_11.WAV", + "AUDIO\\CAP1_12.WAV", + "AUDIO\\CNT1_1.WAV", + "AUDIO\\CNT1_2.WAV", + "AUDIO\\CNT1_3.WAV", + "AUDIO\\CNT1_4.WAV", + "AUDIO\\CNT1_5.WAV", + "AUDIO\\CNT2_1.WAV", + "AUDIO\\CNT2_2.WAV", + "AUDIO\\CNT2_3.WAV", + "AUDIO\\CNT2_4.WAV", + "AUDIO\\COK1_1.WAV", + "AUDIO\\COK1_2.WAV", + "AUDIO\\COK1_3.WAV", + "AUDIO\\COK1_4.WAV", + "AUDIO\\COK1_5.WAV", + "AUDIO\\COK1_6.WAV", + "AUDIO\\COK2_1.WAV", + "AUDIO\\COK2_2.WAV", + "AUDIO\\COK2_3.WAV", + "AUDIO\\COK2_4.WAV", + "AUDIO\\COK2_5.WAV", + "AUDIO\\COK2_6.WAV", + "AUDIO\\COK2_7A.WAV", + "AUDIO\\COK2_7B.WAV", + "AUDIO\\COK2_7C.WAV", + "AUDIO\\COK2_8A.WAV", + "AUDIO\\COK2_8B.WAV", + "AUDIO\\COK2_8C.WAV", + "AUDIO\\COK2_8D.WAV", + "AUDIO\\COK2_9.WAV", + "AUDIO\\COK210A.WAV", + "AUDIO\\COK210B.WAV", + "AUDIO\\COK210C.WAV", + "AUDIO\\COK212A.WAV", + "AUDIO\\COK212B.WAV", + "AUDIO\\COK2_13.WAV", + "AUDIO\\COK2_14.WAV", + "AUDIO\\COK2_15.WAV", + "AUDIO\\COK2_16.WAV", + "AUDIO\\COK2_20.WAV", + "AUDIO\\COK2_21.WAV", + "AUDIO\\COK2_2.WAV", // this is probably a typo of COK2_22 + "AUDIO\\COK3_1.WAV", + "AUDIO\\COK3_2.WAV", + "AUDIO\\COK3_3.WAV", + "AUDIO\\COK3_4.WAV", + "AUDIO\\COK4_1.WAV", + "AUDIO\\COK4_2.WAV", + "AUDIO\\COK4_3.WAV", + "AUDIO\\COK4_4.WAV", + "AUDIO\\COK4_5.WAV", + "AUDIO\\COK4_6.WAV", + "AUDIO\\COK4_7.WAV", + "AUDIO\\COK4_8.WAV", + "AUDIO\\COK4_9.WAV", + "AUDIO\\COK4_9A.WAV", + "AUDIO\\COK4_10.WAV", + "AUDIO\\COK4_11.WAV", + "AUDIO\\COK4_12.WAV", + "AUDIO\\COK4_13.WAV", + "AUDIO\\COK4_14.WAV", + "AUDIO\\COK4_15.WAV", + "AUDIO\\COK4_16.WAV", + "AUDIO\\COK4_17.WAV", + "AUDIO\\COK4_18.WAV", + "AUDIO\\COK4_19.WAV", + "AUDIO\\COK4_20.WAV", + "AUDIO\\COK4_21.WAV", + "AUDIO\\COK4_22.WAV", + "AUDIO\\COK4_23.WAV", + "AUDIO\\COK4_24.WAV", + "AUDIO\\COK4_25.WAV", + "AUDIO\\COK4_26.WAV", + "AUDIO\\COK4_27.WAV", + "AUDIO\\COL1_1.WAV", + "AUDIO\\COL1_2.WAV", + "AUDIO\\COL1_3.WAV", + "AUDIO\\COL1_4.WAV", + "AUDIO\\COL1_5.WAV", + "AUDIO\\COL1_6.WAV", + "AUDIO\\COL1_7.WAV", + "AUDIO\\COL1_8.WAV", + "AUDIO\\COL2_1.WAV", + "AUDIO\\COL2_2.WAV", + "AUDIO\\COL2_3.WAV", + "AUDIO\\COL2_4.WAV", + "AUDIO\\COL2_5.WAV", + "AUDIO\\COL2_6A.WAV", + "AUDIO\\COL2_7.WAV", + "AUDIO\\COL2_8.WAV", + "AUDIO\\COL2_9.WAV", + "AUDIO\\COL2_10.WAV", + "AUDIO\\COL2_11.WAV", + "AUDIO\\COL2_12.WAV", + "AUDIO\\COL2_13.WAV", + "AUDIO\\COL2_14.WAV", + "AUDIO\\COL2_15.WAV", + "AUDIO\\COL2_16.WAV", + "AUDIO\\COL3_1.WAV", + "AUDIO\\COL3_2.WAV", + "AUDIO\\COL3_2A.WAV", + "AUDIO\\COL3_2B.WAV", + "AUDIO\\COL3_3.WAV", + "AUDIO\\COL3_4.WAV", + "AUDIO\\COL3_5.WAV", + "AUDIO\\COL3_6.WAV", + "AUDIO\\COL3_7.WAV", + "AUDIO\\COL3_8.WAV", + "AUDIO\\COL3_9.WAV", + "AUDIO\\COL3_10.WAV", + "AUDIO\\COL3_11.WAV", + "AUDIO\\COL3_12.WAV", + "AUDIO\\COL3_13.WAV", + "AUDIO\\COL3_14.WAV", + "AUDIO\\COL3_15.WAV", + "AUDIO\\COL3_16.WAV", + "AUDIO\\COL3_17.WAV", + "AUDIO\\COL3_18.WAV", + "AUDIO\\COL3_19.WAV", + "AUDIO\\COL3_20.WAV", + "AUDIO\\COL3_21.WAV", + "AUDIO\\COL3_23.WAV", + "AUDIO\\COL3_24.WAV", + "AUDIO\\COL3_25.WAV", + "AUDIO\\COL4_1.WAV", + "AUDIO\\COL4_2.WAV", + "AUDIO\\COL4_3.WAV", + "AUDIO\\COL4_4.WAV", + "AUDIO\\COL4_5.WAV", + "AUDIO\\COL4_6.WAV", + "AUDIO\\COL4_7.WAV", + "AUDIO\\COL4_8.WAV", + "AUDIO\\COL4_9.WAV", + "AUDIO\\COL4_10.WAV", + "AUDIO\\COL4_11.WAV", + "AUDIO\\COL4_12.WAV", + "AUDIO\\COL4_13.WAV", + "AUDIO\\COL4_14.WAV", + "AUDIO\\COL4_15.WAV", + "AUDIO\\COL4_16.WAV", + "AUDIO\\COL4_17.WAV", + "AUDIO\\COL4_18.WAV", + "AUDIO\\COL4_19.WAV", + "AUDIO\\COL4_20.WAV", + "AUDIO\\COL4_21.WAV", + "AUDIO\\COL4_22.WAV", + "AUDIO\\COL4_23.WAV", + "AUDIO\\COL4_24.WAV", + "AUDIO\\COL4_25.WAV", + "AUDIO\\COL4_26.WAV", + "AUDIO\\COL5_1.WAV", + "AUDIO\\COL5_2.WAV", + "AUDIO\\COL5_3.WAV", + "AUDIO\\COL5_4.WAV", + "AUDIO\\COL5_5.WAV", + "AUDIO\\COL5_6.WAV", + "AUDIO\\COL5_7.WAV", + "AUDIO\\COL5_8.WAV", + "AUDIO\\COL5_9.WAV", + "AUDIO\\COL5_10.WAV", + "AUDIO\\COL5_11.WAV", + "AUDIO\\COL5_12.WAV", + "AUDIO\\COL5_13.WAV", + "AUDIO\\COL5_14.WAV", + "AUDIO\\COL5_15.WAV", + "AUDIO\\COL5_16.WAV", + "AUDIO\\COL5_17.WAV", + "AUDIO\\COL5_18.WAV", + "AUDIO\\COL5_19.WAV", + "AUDIO\\COL5_20.WAV", + "AUDIO\\COL5_21.WAV", + "AUDIO\\COL5_22.WAV", + "AUDIO\\CUB1_1.WAV", + "AUDIO\\CUB1_2.WAV", + "AUDIO\\CUB1_3.WAV", + "AUDIO\\CUB1_4.WAV", + "AUDIO\\CUB1_5.WAV", + "AUDIO\\CUB1_6.WAV", + "AUDIO\\CUB1_7.WAV", + "AUDIO\\CUB1_8.WAV", + "AUDIO\\CUB1_9.WAV", + "AUDIO\\CUB1_10.WAV", + "AUDIO\\CUB2_1.WAV", + "AUDIO\\CUB2_2.WAV", + "AUDIO\\CUB2_3A.WAV", + "AUDIO\\CUB2_3B.WAV", + "AUDIO\\CUB2_3C.WAV", + "AUDIO\\CUB2_4A.WAV", + "AUDIO\\CUB2_5.WAV", + "AUDIO\\CUB2_6.WAV", + "AUDIO\\CUB2_7.WAV", + "AUDIO\\CUB2_8.WAV", + "AUDIO\\CUB2_9.WAV", + "AUDIO\\CUB2_10.WAV", + "AUDIO\\CUB2_11.WAV", + "AUDIO\\CUB3_1.WAV", + "AUDIO\\CUB3_2.WAV", + "AUDIO\\CUB3_3.WAV", + "AUDIO\\CUB3_4.WAV", + "AUDIO\\CUB4_1.WAV", + "AUDIO\\CUB4_2.WAV", + "AUDIO\\CUB4_3.WAV", + "AUDIO\\CUB4_4.WAV", + "AUDIO\\CUB4_5.WAV", + "AUDIO\\CUB4_5A.WAV", + "AUDIO\\CUB4_6.WAV", + "AUDIO\\CUB4_7.WAV", + "AUDIO\\CUB4_8.WAV", + "AUDIO\\CUB4_9.WAV", + "AUDIO\\CUB4_10.WAV", + "AUDIO\\CUB4_11.WAV", + "AUDIO\\CUB4_12.WAV", + "AUDIO\\CUB4_13.WAV", + "AUDIO\\CUB4_14.WAV", + "AUDIO\\CUB4_15.WAV", + "AUDIO\\CUB4_16.WAV", + "AUDIO\\GOLF_1.WAV", + "AUDIO\\GOLF_2.WAV", + "AUDIO\\GOLF_3.WAV", + "AUDIO\\BAR_1.WAV", + "AUDIO\\BAR_2.WAV", + "AUDIO\\BAR_3.WAV", + "AUDIO\\BAR_4.WAV", + "AUDIO\\BAR_5.WAV", + "AUDIO\\BAR_6.WAV", + "AUDIO\\BAR_7.WAV", + "AUDIO\\BAR_8.WAV", + "AUDIO\\STRIP_1.WAV", + "AUDIO\\STRIP_2.WAV", + "AUDIO\\STRIP_3.WAV", + "AUDIO\\STRIP_4.WAV", + "AUDIO\\STRIP_5.WAV", + "AUDIO\\STRIP_6.WAV", + "AUDIO\\STRIP_7.WAV", + "AUDIO\\STRIP_8.WAV", + "AUDIO\\STRIP_9.WAV", + "AUDIO\\STAR_1.WAV", + "AUDIO\\STAR_2.WAV", + "AUDIO\\STAR_3.WAV", + "AUDIO\\STAR_4.WAV", + "AUDIO\\FIN_1A.WAV", + "AUDIO\\FIN_1B.WAV", + "AUDIO\\FIN_1C.WAV", + "AUDIO\\FIN_2B.WAV", + "AUDIO\\FIN_2C.WAV", + "AUDIO\\FIN_3.WAV", + "AUDIO\\FIN_4.WAV", + "AUDIO\\FIN_5.WAV", + "AUDIO\\FIN_6.WAV", + "AUDIO\\FIN_10.WAV", + "AUDIO\\FIN_11A.WAV", + "AUDIO\\FIN_11B.WAV", + "AUDIO\\FIN_12A.WAV", + "AUDIO\\FIN_12B.WAV", + "AUDIO\\FIN_12C.WAV", + "AUDIO\\FIN_13.WAV", + "AUDIO\\FINKILL.WAV", + "AUDIO\\LAW1_1.WAV", + "AUDIO\\LAW1_2.WAV", + "AUDIO\\LAW1_3.WAV", + "AUDIO\\LAW1_4.WAV", + "AUDIO\\LAW1_5.WAV", + "AUDIO\\LAW1_6.WAV", + "AUDIO\\LAW1_7.WAV", + "AUDIO\\LAW1_8.WAV", + "AUDIO\\LAW1_9.WAV", + "AUDIO\\LAW1_10.WAV", + "AUDIO\\LAW2_1.WAV", + "AUDIO\\LAW2_2.WAV", + "AUDIO\\LAW2_3.WAV", + "AUDIO\\LAW2_4.WAV", + "AUDIO\\LAW2_5.WAV", + "AUDIO\\LAW2_6.WAV", + "AUDIO\\LAW2_7.WAV", + "AUDIO\\LAW2_8.WAV", + "AUDIO\\LAW2_9.WAV", + "AUDIO\\LAW2_10.WAV", + "AUDIO\\LAW3_1.WAV", + "AUDIO\\LAW3_2.WAV", + "AUDIO\\LAW3_3.WAV", + "AUDIO\\LAW3_4.WAV", + "AUDIO\\LAW3_5.WAV", + "AUDIO\\LAW3_6.WAV", + "AUDIO\\LAW3_10.WAV", + "AUDIO\\LAW3_11.WAV", + "AUDIO\\LAW3_12.WAV", + "AUDIO\\LAW3_13.WAV", + "AUDIO\\LAW3_14.WAV", + "AUDIO\\LAW3_16.WAV", + "AUDIO\\LAW3_17.WAV", + "AUDIO\\LAW3_18.WAV", + "AUDIO\\LAW3_19.WAV", + "AUDIO\\LAW3_20.WAV", + "AUDIO\\LAW3_21.WAV", + "AUDIO\\LAW3_22.WAV", + "AUDIO\\LAW3_23.WAV", + "AUDIO\\LAW3_24.WAV", + "AUDIO\\LAW3_25.WAV", + "AUDIO\\LAW4_1A.WAV", + "AUDIO\\LAW4_1B.WAV", + "AUDIO\\LAW4_1C.WAV", + "AUDIO\\LAW4_1D.WAV", + "AUDIO\\LAW4_10.WAV", + "AUDIO\\LAW4_3.WAV", + "AUDIO\\LAW4_4.WAV", + "AUDIO\\LAW4_5.WAV", + "AUDIO\\LAW4_6.WAV", + "AUDIO\\LAW4_7.WAV", + "AUDIO\\LAW4_8.WAV", + "AUDIO\\LAW4_9.WAV", + "AUDIO\\PHIL1_2.WAV", + "AUDIO\\PHIL1_3.WAV", + "AUDIO\\PHIL2_1.WAV", + "AUDIO\\PHIL2_2.WAV", + "AUDIO\\PHIL2_3.WAV", + "AUDIO\\PHIL2_4.WAV", + "AUDIO\\PHIL2_5.WAV", + "AUDIO\\PHIL2_6.WAV", + "AUDIO\\PHIL2_7.WAV", + "AUDIO\\PHIL2_8.WAV", + "AUDIO\\PHIL2_9.WAV", + "AUDIO\\PHIL210.WAV", + "AUDIO\\PHIL211.WAV", + "AUDIO\\PORN1_1.WAV", + "AUDIO\\PORN1_2.WAV", + "AUDIO\\PORN1_3.WAV", + "AUDIO\\PRN1_3A.WAV", + "AUDIO\\PORN1_4.WAV", + "AUDIO\\PORN1_5.WAV", + "AUDIO\\PORN1_6.WAV", + "AUDIO\\PORN1_7.WAV", + "AUDIO\\PORN1_8.WAV", + "AUDIO\\PORN1_9.WAV", + "AUDIO\\PRN1_10.WAV", + "AUDIO\\PRN1_11.WAV", + "AUDIO\\PRN1_12.WAV", + "AUDIO\\PRN1_13.WAV", + "AUDIO\\PRN1_14.WAV", + "AUDIO\\PRN1_15.WAV", + "AUDIO\\PRN1_16.WAV", + "AUDIO\\PRN1_17.WAV", + "AUDIO\\PRN1_18.WAV", + "AUDIO\\PRN1_19.WAV", + "AUDIO\\PRN1_20.WAV", + "AUDIO\\PRN1_21.WAV", + "AUDIO\\PORN3_1.WAV", + "AUDIO\\PORN3_2.WAV", + "AUDIO\\PORN3_3.WAV", + "AUDIO\\PORN3_4.WAV", + "AUDIO\\PSYCH_1.WAV", + "AUDIO\\PSYCH_2.WAV", + "AUDIO\\ROK2_01.WAV", + "AUDIO\\ROK3_1.WAV", + "AUDIO\\ROK3_2.WAV", + "AUDIO\\ROK3_3.WAV", + "AUDIO\\ROK3_4.WAV", + "AUDIO\\ROK3_5.WAV", + "AUDIO\\ROK3_6.WAV", + "AUDIO\\ROK3_7.WAV", + "AUDIO\\ROK3_8.WAV", + "AUDIO\\ROK3_9.WAV", + "AUDIO\\ROK3_10.WAV", + "AUDIO\\ROK3_11.WAV", + "AUDIO\\ROK3_12.WAV", + "AUDIO\\ROK3_13.WAV", + "AUDIO\\ROK3_14.WAV", + "AUDIO\\ROK3_15.WAV", + "AUDIO\\ROK3_16.WAV", + "AUDIO\\ROK3_17.WAV", + "AUDIO\\ROK3_18.WAV", + "AUDIO\\ROK3_19.WAV", + "AUDIO\\ROK3_20.WAV", + "AUDIO\\ROK3_21.WAV", + "AUDIO\\ROK3_22.WAV", + "AUDIO\\ROK3_23.WAV", + "AUDIO\\ROK3_24.WAV", + "AUDIO\\ROK3_25.WAV", + "AUDIO\\ROK3_26.WAV", + "AUDIO\\ROK3_27.WAV", + "AUDIO\\ROK3_62.WAV", + "AUDIO\\ROK3_63.WAV", + "AUDIO\\ROK3_64.WAV", + "AUDIO\\ROK3_65.WAV", + "AUDIO\\ROK3_66.WAV", + "AUDIO\\ROK3_67.WAV", + "AUDIO\\ROK3_68.WAV", + "AUDIO\\ROK3_69.WAV", + "AUDIO\\ROK3_70.WAV", + "AUDIO\\ROK3_71.WAV", + "AUDIO\\ROK3_73.WAV", + "AUDIO\\RESC_1.WAV", + "AUDIO\\RESC_2.WAV", + "AUDIO\\RESC_3.WAV", + "AUDIO\\RESC_4.WAV", + "AUDIO\\RESC_5.WAV", + "AUDIO\\RESC_6.WAV", + "AUDIO\\RESC_7.WAV", + "AUDIO\\RESC_8.WAV", + "AUDIO\\RESC_9.WAV", + "AUDIO\\RESC_10.WAV", + "AUDIO\\ROK1_1A.WAV", + "AUDIO\\ROK1_1B.WAV", + "AUDIO\\ROK1_5.WAV", + "AUDIO\\ROK1_6.WAV", + "AUDIO\\ROK1_7.WAV", + "AUDIO\\ROK1_8.WAV", + "AUDIO\\ROK1_9.WAV", + "AUDIO\\TAX1_1.WAV", + "AUDIO\\TAX1_2.WAV", + "AUDIO\\TAX1_3.WAV", + "AUDIO\\TAX1_4.WAV", + "AUDIO\\TAX1_5.WAV", + "AUDIO\\TAX2_1.WAV", + "AUDIO\\TAX2_2.WAV", + "AUDIO\\TAX2_3.WAV", + "AUDIO\\TAX2_4.WAV", + "AUDIO\\TAX2_5.WAV", + "AUDIO\\TAX2_6.WAV", + "AUDIO\\TAX2_7.WAV", + "AUDIO\\TAX3_1.WAV", + "AUDIO\\TAX3_2.WAV", + "AUDIO\\TAX3_3.WAV", + "AUDIO\\TAX3_4.WAV", + "AUDIO\\TAX3_5.WAV", + "AUDIO\\TEX1_1.WAV", + "AUDIO\\TEX1_2.WAV", + "AUDIO\\TEX1_3.WAV", + "AUDIO\\TEX1_4.WAV", + "AUDIO\\TEX1_5.WAV", + "AUDIO\\TEX1_6.WAV", + "AUDIO\\TEX2_1.WAV", + "AUDIO\\TEX3_1.WAV", + "AUDIO\\TEX3_2.WAV", + "AUDIO\\TEX3_3.WAV", + "AUDIO\\TEX3_4.WAV", + "AUDIO\\TEX3_5.WAV", + "AUDIO\\TEX3_6.WAV", + "AUDIO\\TEX3_7.WAV", + "AUDIO\\TEX3_8.WAV", + "AUDIO\\HAT_1A.WAV", + "AUDIO\\INTRO1.WAV", + "AUDIO\\INTRO2.WAV", + "AUDIO\\INTRO3.WAV", + "AUDIO\\INTRO4.WAV", + "AUDIO\\MOB_01A.WAV", + "AUDIO\\MOB_01B.WAV", + "AUDIO\\MOB_01C.WAV", + "AUDIO\\MOB_02A.WAV", + "AUDIO\\MOB_02B.WAV", + "AUDIO\\MOB_02C.WAV", + "AUDIO\\MOB_03A.WAV", + "AUDIO\\MOB_03B.WAV", + "AUDIO\\MOB_03C.WAV", + "AUDIO\\MOB_03D.WAV", + "AUDIO\\MOB_03E.WAV", + "AUDIO\\SHARK_1.WAV", + "AUDIO\\SHARK_2.WAV", + "AUDIO\\SHARK_3.WAV", + "AUDIO\\SHARK_4.WAV", + "AUDIO\\SHARK_5.WAV", + "AUDIO\\MOB_04A.WAV", + "AUDIO\\MOB_04B.WAV", + "AUDIO\\MOB_04C.WAV", + "AUDIO\\MOB_04D.WAV", + "AUDIO\\MOB_05A.WAV", + "AUDIO\\MOB_05B.WAV", + "AUDIO\\MOB_05C.WAV", + "AUDIO\\MOB_05D.WAV", + "AUDIO\\MOB_06A.WAV", + "AUDIO\\MOB_06B.WAV", + "AUDIO\\MOB_06C.WAV", + "AUDIO\\MOB_07A.WAV", + "AUDIO\\MOB_07B.WAV", + "AUDIO\\MOB_08A.WAV", + "AUDIO\\MOB_08B.WAV", + "AUDIO\\MOB_08C.WAV", + "AUDIO\\MOB_08D.WAV", + "AUDIO\\MOB_08E.WAV", + "AUDIO\\MOB_08F.WAV", + "AUDIO\\MOB_08G.WAV", + "AUDIO\\MOB_09A.WAV", + "AUDIO\\MOB_09B.WAV", + "AUDIO\\MOB_09C.WAV", + "AUDIO\\MOB_09D.WAV", + "AUDIO\\MOB_09E.WAV", + "AUDIO\\MOB_09F.WAV", + "AUDIO\\MOB_10A.WAV", + "AUDIO\\MOB_10B.WAV", + "AUDIO\\MOB_10C.WAV", + "AUDIO\\MOB_10D.WAV", + "AUDIO\\MOB_10E.WAV", + "AUDIO\\MOB_11A.WAV", + "AUDIO\\MOB_11B.WAV", + "AUDIO\\MOB_11C.WAV", + "AUDIO\\MOB_11D.WAV", + "AUDIO\\MOB_11E.WAV", + "AUDIO\\MOB_11F.WAV", + "AUDIO\\MOB_14A.WAV", + "AUDIO\\MOB_14B.WAV", + "AUDIO\\MOB_14C.WAV", + "AUDIO\\MOB_14D.WAV", + "AUDIO\\MOB_14E.WAV", + "AUDIO\\MOB_14F.WAV", + "AUDIO\\MOB_14G.WAV", + "AUDIO\\MOB_14H.WAV", + "AUDIO\\MOB_16A.WAV", + "AUDIO\\MOB_16B.WAV", + "AUDIO\\MOB_16C.WAV", + "AUDIO\\MOB_16D.WAV", + "AUDIO\\MOB_16E.WAV", + "AUDIO\\MOB_16F.WAV", + "AUDIO\\MOB_16G.WAV", + "AUDIO\\MOB_17A.WAV", + "AUDIO\\MOB_17B.WAV", + "AUDIO\\MOB_17C.WAV", + "AUDIO\\MOB_17D.WAV", + "AUDIO\\MOB_17E.WAV", + "AUDIO\\MOB_17G.WAV", + "AUDIO\\MOB_17H.WAV", + "AUDIO\\MOB_17I.WAV", + "AUDIO\\MOB_17J.WAV", + "AUDIO\\MOB_17K.WAV", + "AUDIO\\MOB_17L.WAV", + "AUDIO\\MOB_18A.WAV", + "AUDIO\\MOB_18B.WAV", + "AUDIO\\MOB_18C.WAV", + "AUDIO\\MOB_18D.WAV", + "AUDIO\\MOB_18E.WAV", + "AUDIO\\MOB_18F.WAV", + "AUDIO\\MOB_18G.WAV", + "AUDIO\\MOB_20A.WAV", + "AUDIO\\MOB_20B.WAV", + "AUDIO\\MOB_20C.WAV", + "AUDIO\\MOB_20D.WAV", + "AUDIO\\MOB_20E.WAV", + "AUDIO\\MOB_24A.WAV", + "AUDIO\\MOB_24B.WAV", + "AUDIO\\MOB_24C.WAV", + "AUDIO\\MOB_24D.WAV", + "AUDIO\\MOB_24E.WAV", + "AUDIO\\MOB_24F.WAV", + "AUDIO\\MOB_24G.WAV", + "AUDIO\\MOB_24H.WAV", + "AUDIO\\MOB_25A.WAV", + "AUDIO\\MOB_25B.WAV", + "AUDIO\\MOB_25C.WAV", + "AUDIO\\MOB_25D.WAV", + "AUDIO\\MOB_26A.WAV", + "AUDIO\\MOB_26B.WAV", + "AUDIO\\MOB_26C.WAV", + "AUDIO\\MOB_26D.WAV", + "AUDIO\\MOB_26E.WAV", + "AUDIO\\MOB_29A.WAV", + "AUDIO\\MOB_29B.WAV", + "AUDIO\\MOB_29C.WAV", + "AUDIO\\MOB_29D.WAV", + "AUDIO\\MOB_29E.WAV", + "AUDIO\\MOB_29F.WAV", + "AUDIO\\MOB_29G.WAV", + "AUDIO\\MOB_30A.WAV", + "AUDIO\\MOB_30B.WAV", + "AUDIO\\MOB_30C.WAV", + "AUDIO\\MOB_30D.WAV", + "AUDIO\\MOB_30E.WAV", + "AUDIO\\MOB_30F.WAV", + "AUDIO\\MOB_33A.WAV", + "AUDIO\\MOB_33B.WAV", + "AUDIO\\MOB_33C.WAV", + "AUDIO\\MOB_33D.WAV", + "AUDIO\\MOB_34A.WAV", + "AUDIO\\MOB_34B.WAV", + "AUDIO\\MOB_34C.WAV", + "AUDIO\\MOB_34D.WAV", + "AUDIO\\MOB_35A.WAV", + "AUDIO\\MOB_35B.WAV", + "AUDIO\\MOB_35C.WAV", + "AUDIO\\MOB_35D.WAV", + "AUDIO\\MOB_36A.WAV", + "AUDIO\\MOB_36B.WAV", + "AUDIO\\MOB_36C.WAV", + "AUDIO\\MOB_40A.WAV", + "AUDIO\\MOB_40B.WAV", + "AUDIO\\MOB_40C.WAV", + "AUDIO\\MOB_40D.WAV", + "AUDIO\\MOB_40E.WAV", + "AUDIO\\MOB_40F.WAV", + "AUDIO\\MOB_40G.WAV", + "AUDIO\\MOB_40H.WAV", + "AUDIO\\MOB_40I.WAV", + "AUDIO\\MOB_41A.WAV", + "AUDIO\\MOB_41B.WAV", + "AUDIO\\MOB_41C.WAV", + "AUDIO\\MOB_41D.WAV", + "AUDIO\\MOB_41E.WAV", + "AUDIO\\MOB_41F.WAV", + "AUDIO\\MOB_41G.WAV", + "AUDIO\\MOB_41H.WAV", + "AUDIO\\MOB_42A.WAV", + "AUDIO\\MOB_42B.WAV", + "AUDIO\\MOB_42C.WAV", + "AUDIO\\MOB_42D.WAV", + "AUDIO\\MOB_42E.WAV", + "AUDIO\\MOB_43A.WAV", + "AUDIO\\MOB_43B.WAV", + "AUDIO\\MOB_43C.WAV", + "AUDIO\\MOB_43D.WAV", + "AUDIO\\MOB_43E.WAV", + "AUDIO\\MOB_43F.WAV", + "AUDIO\\MOB_43G.WAV", + "AUDIO\\MOB_43H.WAV", + "AUDIO\\MOB_45A.WAV", + "AUDIO\\MOB_45B.WAV", + "AUDIO\\MOB_45C.WAV", + "AUDIO\\MOB_45D.WAV", + "AUDIO\\MOB_45E.WAV", + "AUDIO\\MOB_45F.WAV", + "AUDIO\\MOB_45G.WAV", + "AUDIO\\MOB_45H.WAV", + "AUDIO\\MOB_45I.WAV", + "AUDIO\\MOB_45J.WAV", + "AUDIO\\MOB_45K.WAV", + "AUDIO\\MOB_45L.WAV", + "AUDIO\\MOB_45M.WAV", + "AUDIO\\MOB_45N.WAV", + "AUDIO\\MOB_46A.WAV", + "AUDIO\\MOB_46B.WAV", + "AUDIO\\MOB_46C.WAV", + "AUDIO\\MOB_46D.WAV", + "AUDIO\\MOB_46E.WAV", + "AUDIO\\MOB_46F.WAV", + "AUDIO\\MOB_46G.WAV", + "AUDIO\\MOB_46H.WAV", + "AUDIO\\MOB_47A.WAV", + "AUDIO\\MOB_52A.WAV", + "AUDIO\\MOB_52B.WAV", + "AUDIO\\MOB_52C.WAV", + "AUDIO\\MOB_52D.WAV", + "AUDIO\\MOB_52E.WAV", + "AUDIO\\MOB_52F.WAV", + "AUDIO\\MOB_52G.WAV", + "AUDIO\\MOB_52H.WAV", + "AUDIO\\MOB_54A.WAV", + "AUDIO\\MOB_54B.WAV", + "AUDIO\\MOB_54C.WAV", + "AUDIO\\MOB_54D.WAV", + "AUDIO\\MOB_54E.WAV", + "AUDIO\\MOB_55A.WAV", + "AUDIO\\MOB_55B.WAV", + "AUDIO\\MOB_55C.WAV", + "AUDIO\\MOB_55D.WAV", + "AUDIO\\MOB_55E.WAV", + "AUDIO\\MOB_55F.WAV", + "AUDIO\\MOB_56A.WAV", + "AUDIO\\MOB_56B.WAV", + "AUDIO\\MOB_56C.WAV", + "AUDIO\\MOB_56D.WAV", + "AUDIO\\MOB_56E.WAV", + "AUDIO\\MOB_56F.WAV", + "AUDIO\\MOB_57A.WAV", + "AUDIO\\MOB_57B.WAV", + "AUDIO\\MOB_57C.WAV", + "AUDIO\\MOB_57D.WAV", + "AUDIO\\MOB_57E.WAV", + "AUDIO\\MOB_58A.WAV", + "AUDIO\\MOB_58B.WAV", + "AUDIO\\MOB_58C.WAV", + "AUDIO\\MOB_58D.WAV", + "AUDIO\\MOB_58E.WAV", + "AUDIO\\MOB_58F.WAV", + "AUDIO\\MOB_58G.WAV", + "AUDIO\\MOB_61A.WAV", + "AUDIO\\MOB_61B.WAV", + "AUDIO\\MOB_62A.WAV", + "AUDIO\\MOB_62B.WAV", + "AUDIO\\MOB_62C.WAV", + "AUDIO\\MOB_62D.WAV", + "AUDIO\\MOB_63A.WAV", + "AUDIO\\MOB_63B.WAV", + "AUDIO\\MOB_63C.WAV", + "AUDIO\\MOB_63D.WAV", + "AUDIO\\MOB_63E.WAV", + "AUDIO\\MOB_63F.WAV", + "AUDIO\\MOB_63G.WAV", + "AUDIO\\MOB_63H.WAV", + "AUDIO\\MOB_63I.WAV", + "AUDIO\\MOB_63J.WAV", + "AUDIO\\MOB_66A.WAV", + "AUDIO\\MOB_66B.WAV", + "AUDIO\\MOB_68A.WAV", + "AUDIO\\MOB_68B.WAV", + "AUDIO\\MOB_68C.WAV", + "AUDIO\\MOB_68D.WAV", + "AUDIO\\MOB_70A.WAV", + "AUDIO\\MOB_70B.WAV", + "AUDIO\\MOB_71A.WAV", + "AUDIO\\MOB_71B.WAV", + "AUDIO\\MOB_71C.WAV", + "AUDIO\\MOB_71D.WAV", + "AUDIO\\MOB_71E.WAV", + "AUDIO\\MOB_71F.WAV", + "AUDIO\\MOB_71G.WAV", + "AUDIO\\MOB_71H.WAV", + "AUDIO\\MOB_71I.WAV", + "AUDIO\\MOB_71J.WAV", + "AUDIO\\MOB_71K.WAV", + "AUDIO\\MOB_71L.WAV", + "AUDIO\\MOB_71M.WAV", + "AUDIO\\MOB_71N.WAV", + "AUDIO\\MOB_72A.WAV", + "AUDIO\\MOB_72B.WAV", + "AUDIO\\MOB_72C.WAV", + "AUDIO\\MOB_72D.WAV", + "AUDIO\\MOB_72E.WAV", + "AUDIO\\MOB_72F.WAV", + "AUDIO\\MOB_72G.WAV", + "AUDIO\\MOB_73A.WAV", + "AUDIO\\MOB_73C.WAV", + "AUDIO\\MOB_73D.WAV", + "AUDIO\\MOB_73F.WAV", + "AUDIO\\MOB_73G.WAV", + "AUDIO\\MOB_73I.WAV", + "AUDIO\\MOB_95A.WAV", + "AUDIO\\MOB_96A.WAV", + "AUDIO\\MOB_98A.WAV", + "AUDIO\\MOB_99A.WAV", + "AUDIO\\JOB1_1B.WAV", + "AUDIO\\JOB1_1C.WAV", + "AUDIO\\JOB1_1D.WAV", + "AUDIO\\JOB2_1B.WAV", + "AUDIO\\JOB2_2.WAV", + "AUDIO\\JOB2_3.WAV", + "AUDIO\\JOB2_4.WAV", + "AUDIO\\JOB2_5.WAV", + "AUDIO\\JOB2_6.WAV", + "AUDIO\\JOB2_7.WAV", + "AUDIO\\JOB2_8.WAV", + "AUDIO\\JOB2_9.WAV", + "AUDIO\\JOB3_1.WAV", + "AUDIO\\JOB3_2.WAV", + "AUDIO\\JOB3_3.WAV", + "AUDIO\\JOB4_1.WAV", + "AUDIO\\JOB4_2.WAV", + "AUDIO\\JOB4_3.WAV", + "AUDIO\\JOB5_1.WAV", + "AUDIO\\JOB5_2.WAV", + "AUDIO\\JOB5_3.WAV", + "AUDIO\\BJM1_20.WAV", + "AUDIO\\BJM1_4.WAV", + "AUDIO\\BJM1_5.WAV", + "AUDIO\\MERC_39.WAV", + "AUDIO\\MONO_1.WAV", + "AUDIO\\MONO_2.WAV", + "AUDIO\\MONO_3.WAV", + "AUDIO\\MONO_4.WAV", + "AUDIO\\MONO_5.WAV", + "AUDIO\\MONO_6.WAV", + "AUDIO\\MONO_7.WAV", + "AUDIO\\MONO_8.WAV", + "AUDIO\\MONO_9.WAV", + "AUDIO\\MONO10.WAV", + "AUDIO\\MONO11.WAV", + "AUDIO\\MONO12.WAV", + "AUDIO\\MONO13.WAV", + "AUDIO\\MONO14.WAV", + "AUDIO\\MONO15.WAV", + "AUDIO\\MONO16.WAV", + "AUDIO\\FUD_01.WAV", + "AUDIO\\FUD_02.WAV", + "AUDIO\\FUD_03.WAV", + "AUDIO\\FUD_04.WAV", + "AUDIO\\FUD_05.WAV", + "AUDIO\\FUD_06.WAV", + "AUDIO\\FUD_07.WAV", + "AUDIO\\FUD_08.WAV", + "AUDIO\\FUD_09.WAV", + "AUDIO\\FUD_10.WAV", + "AUDIO\\FUD_11.WAV", + "AUDIO\\FUD_12.WAV", + "AUDIO\\FUD_13.WAV", + "AUDIO\\FUD_14.WAV", + "AUDIO\\FUD_15.WAV", + "AUDIO\\FUD_16.WAV", + "AUDIO\\FUD_17.WAV", + "AUDIO\\FUD_18.WAV", + "AUDIO\\FUD_19.WAV", + "AUDIO\\FUD_20.WAV", + "AUDIO\\BURG_01.WAV", + "AUDIO\\BURG_02.WAV", + "AUDIO\\BURG_03.WAV", + "AUDIO\\BURG_04.WAV", + "AUDIO\\BURG_05.WAV", + "AUDIO\\BURG_06.WAV", + "AUDIO\\BURG_07.WAV", + "AUDIO\\BURG_08.WAV", + "AUDIO\\BURG_09.WAV", + "AUDIO\\BURG_10.WAV", + "AUDIO\\BURG_11.WAV", + "AUDIO\\BURG_12.WAV", + "AUDIO\\CRUST01.WAV", + "AUDIO\\CRUST02.WAV", + "AUDIO\\CRUST03.WAV", + "AUDIO\\CRUST04.WAV", + "AUDIO\\CRUST05.WAV", + "AUDIO\\CRUST06.WAV", + "AUDIO\\CRUST07.WAV", + "AUDIO\\CRUST08.WAV", + "AUDIO\\CRUST09.WAV", + "AUDIO\\BAND_01.WAV", + "AUDIO\\BAND_02.WAV", + "AUDIO\\BAND_03.WAV", + "AUDIO\\BAND_04.WAV", + "AUDIO\\BAND_05.WAV", + "AUDIO\\BAND_06.WAV", + "AUDIO\\BAND_07.WAV", + "AUDIO\\BAND_08.WAV", + "AUDIO\\SHAFT01.WAV", + "AUDIO\\SHAFT02.WAV", + "AUDIO\\SHAFT03.WAV", + "AUDIO\\SHAFT04.WAV", + "AUDIO\\SHAFT05.WAV", + "AUDIO\\SHAFT06.WAV", + "AUDIO\\SHAFT07.WAV", + "AUDIO\\SHAFT08.WAV", + "AUDIO\\PISS_01.WAV", + "AUDIO\\PISS_02.WAV", + "AUDIO\\PISS_03.WAV", + "AUDIO\\PISS_04.WAV", + "AUDIO\\PISS_05.WAV", + "AUDIO\\PISS_06.WAV", + "AUDIO\\PISS_07.WAV", + "AUDIO\\PISS_08.WAV", + "AUDIO\\PISS_09.WAV", + "AUDIO\\PISS_10.WAV", + "AUDIO\\PISS_11.WAV", + "AUDIO\\PISS_12.WAV", + "AUDIO\\PISS_13.WAV", + "AUDIO\\PISS_14.WAV", + "AUDIO\\PISS_15.WAV", + "AUDIO\\PISS_16.WAV", + "AUDIO\\PISS_17.WAV", + "AUDIO\\PISS_18.WAV", + "AUDIO\\PISS_19.WAV", + "AUDIO\\GIMME01.WAV", + "AUDIO\\GIMME02.WAV", + "AUDIO\\GIMME03.WAV", + "AUDIO\\GIMME04.WAV", + "AUDIO\\GIMME05.WAV", + "AUDIO\\GIMME06.WAV", + "AUDIO\\GIMME07.WAV", + "AUDIO\\GIMME08.WAV", + "AUDIO\\GIMME09.WAV", + "AUDIO\\GIMME10.WAV", + "AUDIO\\GIMME11.WAV", + "AUDIO\\GIMME12.WAV", + "AUDIO\\GIMME13.WAV", + "AUDIO\\GIMME14.WAV", + "AUDIO\\GIMME15.WAV", + "AUDIO\\BUST_01.WAV", + "AUDIO\\BUST_02.WAV", + "AUDIO\\BUST_03.WAV", + "AUDIO\\BUST_04.WAV", + "AUDIO\\BUST_05.WAV", + "AUDIO\\BUST_06.WAV", + "AUDIO\\BUST_07.WAV", + "AUDIO\\BUST_08.WAV", + "AUDIO\\BUST_09.WAV", + "AUDIO\\BUST_10.WAV", + "AUDIO\\BUST_11.WAV", + "AUDIO\\BUST_12.WAV", + "AUDIO\\BUST_13.WAV", + "AUDIO\\BUST_14.WAV", + "AUDIO\\BUST_15.WAV", + "AUDIO\\BUST_16.WAV", + "AUDIO\\BUST_17.WAV", + "AUDIO\\BUST_18.WAV", + "AUDIO\\BUST_19.WAV", + "AUDIO\\BUST_20.WAV", + "AUDIO\\BUST_21.WAV", + "AUDIO\\BUST_22.WAV", + "AUDIO\\BUST_23.WAV", + "AUDIO\\BUST_24.WAV", + "AUDIO\\BUST_25.WAV", + "AUDIO\\BUST_26.WAV", + "AUDIO\\BUST_27.WAV", + "AUDIO\\BUST_28.WAV", +}; +#endif + static char StreamedNameTable[][25] = { "AUDIO\\WILD.ADF", @@ -490,7 +1584,6 @@ static char StreamedNameTable[][25] = "AUDIO\\MISCOM.MP3", "AUDIO\\MISCOM.MP3", "AUDIO\\MISCOM.MP3", -#endif "AUDIO\\MOBR1.WAV", "AUDIO\\PAGER.WAV", "AUDIO\\CARREV.WAV", diff --git a/src/audio/sampman_miles.cpp b/src/audio/sampman_miles.cpp index 36f230b4..b77584d0 100644 --- a/src/audio/sampman_miles.cpp +++ b/src/audio/sampman_miles.cpp @@ -1,3 +1,4 @@ +#define WITHWINDOWS #include "common.h" #ifdef AUDIO_MSS @@ -28,7 +29,7 @@ char SampleBankDataFilename[] = "AUDIO\\SFX.RAW"; FILE *fpSampleDescHandle; FILE *fpSampleDataHandle; -bool bSampleBankLoaded [MAX_SFX_BANKS]; +bool8 bSampleBankLoaded [MAX_SFX_BANKS]; int32 nSampleBankDiscStartOffset [MAX_SFX_BANKS]; int32 nSampleBankSize [MAX_SFX_BANKS]; int32 nSampleBankMemoryStartAddress[MAX_SFX_BANKS]; @@ -60,14 +61,14 @@ char _mp3DirectoryPath[MAX_PATH]; HSTREAM mp3Stream [MAX_STREAMS]; int8 nStreamPan [MAX_STREAMS]; int8 nStreamVolume[MAX_STREAMS]; -uint8 nStreamLoopedFlag[MAX_STREAMS]; +bool8 nStreamLoopedFlag[MAX_STREAMS]; uint32 _CurMP3Index; int32 _CurMP3Pos; -bool _bIsMp3Active; +bool8 _bIsMp3Active; /////////////////////////////////////////////////////////////// -bool _bSampmanInitialised = false; +bool8 _bSampmanInitialised = FALSE; // // Miscellaneous globals / defines @@ -94,7 +95,7 @@ S32 speaker_type=0; U32 _maxSamples; float _fPrevEaxRatioDestination; -bool _usingMilesFast2D; +bool8 _usingMilesFast2D; float _fEffectsLevel; @@ -166,17 +167,17 @@ release_existing() } _fPrevEaxRatioDestination = 0.0f; - _usingMilesFast2D = false; + _usingMilesFast2D = FALSE; _fEffectsLevel = 0.0f; } -static bool +static bool8 set_new_provider(S32 index) { DWORD result; if ( curprovider == index ) - return true; + return TRUE; //close the already opened provider curprovider = index; @@ -203,7 +204,7 @@ set_new_provider(S32 index) release_existing(); - return false; + return FALSE; } else { @@ -234,7 +235,7 @@ set_new_provider(S32 index) AIL_set_3D_room_type(opened_provider, ENVIRONMENT_CAVE); if ( !strcmp(providers[index].name, "Miles Fast 2D Positional Audio") ) - _usingMilesFast2D = true; + _usingMilesFast2D = TRUE; } AIL_3D_provider_attribute(opened_provider, "Maximum supported samples", &_maxSamples); @@ -252,11 +253,11 @@ set_new_provider(S32 index) AIL_set_3D_sample_effects_level(opened_samples[i], 0.0f); } - return true; + return TRUE; } } - return false; + return FALSE; } U32 RadioHandlers[9]; @@ -459,7 +460,7 @@ cSampleManager::AutoDetect3DProviders() return -1; } -static bool +static bool8 _ResolveLink(char const *path, char *out) { IShellLink* psl; @@ -495,7 +496,7 @@ _ResolveLink(char const *path, char *out) ppf->Release(); psl->Release(); #endif - return true; + return TRUE; } } } @@ -505,15 +506,15 @@ _ResolveLink(char const *path, char *out) psl->Release(); } - return false; + return FALSE; } static void _FindMP3s(void) { tMP3Entry *pList; - bool bShortcut; - bool bInitFirstEntry; + bool8 bShortcut; + bool8 bInitFirstEntry; HANDLE hFind; char path[MAX_PATH]; char filepath[MAX_PATH*2]; @@ -565,10 +566,10 @@ _FindMP3s(void) OutputDebugString(filepath); } - bShortcut = true; + bShortcut = TRUE; } else - bShortcut = false; + bShortcut = FALSE; } mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); @@ -608,7 +609,7 @@ _FindMP3s(void) { _pMP3List->pLinkPath = NULL; } - bInitFirstEntry = false; + bInitFirstEntry = FALSE; } else { @@ -616,10 +617,10 @@ _FindMP3s(void) OutputDebugString(filepath); - bInitFirstEntry = true; + bInitFirstEntry = TRUE; } - while ( true ) + while ( TRUE ) { if ( !FindNextFile(hFind, &fd) ) break; @@ -643,11 +644,11 @@ _FindMP3s(void) OutputDebugString(filepath); } - bShortcut = true; + bShortcut = TRUE; } else { - bShortcut = false; + bShortcut = FALSE; if ( filepathlen > MAX_PATH ) { @@ -690,7 +691,7 @@ _FindMP3s(void) pList = _pMP3List; - bInitFirstEntry = false; + bInitFirstEntry = FALSE; } else { @@ -718,11 +719,11 @@ _FindMP3s(void) OutputDebugString(filepath); } - bShortcut = true; + bShortcut = TRUE; } else { - bShortcut = false; + bShortcut = FALSE; } } @@ -834,7 +835,7 @@ _GetMP3EntryByIndex(uint32 idx) return NULL; } -static inline bool +static inline bool8 _GetMP3PosFromStreamPos(uint32 *pPosition, tMP3Entry **pEntry) { _CurMP3Index = 0; @@ -847,7 +848,7 @@ _GetMP3PosFromStreamPos(uint32 *pPosition, tMP3Entry **pEntry) *pPosition -= (*pEntry)->nTrackStreamPos; _CurMP3Pos = *pPosition; - return true; + return TRUE; } _CurMP3Index++; @@ -858,10 +859,10 @@ _GetMP3PosFromStreamPos(uint32 *pPosition, tMP3Entry **pEntry) _CurMP3Pos = 0; _CurMP3Index = 0; - return false; + return FALSE; } -bool +bool8 cSampleManager::IsMP3RadioChannelAvailable(void) { return nNumMP3s != 0; @@ -890,13 +891,13 @@ cSampleManager::ReacquireDigitalHandle(void) } } -bool +bool8 cSampleManager::Initialise(void) { TRACE("start"); if ( _bSampmanInitialised ) - return true; + return TRUE; { for ( int32 i = 0; i < TOTAL_AUDIO_SAMPLES; i++ ) @@ -922,7 +923,7 @@ cSampleManager::Initialise(void) curprovider = -1; prevprovider = -1; - _usingMilesFast2D = false; + _usingMilesFast2D = FALSE; usingEAX=0; usingEAX3=0; @@ -947,7 +948,7 @@ cSampleManager::Initialise(void) for ( int32 i = 0; i < MAX_SFX_BANKS; i++ ) { - bSampleBankLoaded[i] = false; + bSampleBankLoaded[i] = FALSE; nSampleBankDiscStartOffset[i] = 0; nSampleBankSize[i] = 0; nSampleBankMemoryStartAddress[i] = 0; @@ -988,24 +989,24 @@ cSampleManager::Initialise(void) #ifdef AUDIO_CACHE TRACE("cache"); FILE *cacheFile = fcaseopen("audio\\sound.cache", "rb"); - bool CreateCache = false; + bool8 CreateCache = FALSE; if (cacheFile) { fread(nStreamLength, sizeof(uint32), TOTAL_STREAMED_SOUNDS, cacheFile); fclose(cacheFile); }else - CreateCache = true; + CreateCache = TRUE; #endif char filepath[MAX_PATH]; - bool bFileNotFound; + bool8 bFileNotFound; S32 tatalms; TRACE("cdrom"); { - m_bInitialised = false; + m_bInitialised = FALSE; - while (true) + while (TRUE) { // Find path of WAVs (originally in HDD) @@ -1046,7 +1047,7 @@ cSampleManager::Initialise(void) { OutputDebugString(AIL_last_error()); Terminate(); - return false; + return FALSE; } add_providers(); @@ -1060,10 +1061,20 @@ cSampleManager::Initialise(void) #endif for ( int32 i = STREAMED_SOUND_MISSION_MOBR1; i < TOTAL_STREAMED_SOUNDS; i++ ) { +#ifdef PS2_AUDIO_PATHS strcpy(filepath, m_szCDRomRootPath); - strcat(filepath, StreamedNameTable[i]); - + strcat(filepath, PS2StreamedNameTable[i]); + mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); + + if ( !mp3Stream[0] ) +#endif + { + strcpy(filepath, m_szCDRomRootPath); + strcat(filepath, StreamedNameTable[i]); + + mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); + } if ( mp3Stream[0] ) { @@ -1076,9 +1087,9 @@ cSampleManager::Initialise(void) } else { - m_bInitialised = false; + m_bInitialised = FALSE; Terminate(); - return false; + return FALSE; } } @@ -1101,11 +1112,21 @@ cSampleManager::Initialise(void) for (int32 i = 0; i < STREAMED_SOUND_MISSION_MOBR1; i++) { +#ifdef PS2_AUDIO_PATHS strcpy(filepath, m_MP3FilesPath); - strcat(filepath, StreamedNameTable[i]); + strcat(filepath, PS2StreamedNameTable[i]); mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); + if ( !mp3Stream[0] ) +#endif + { + strcpy(filepath, m_MP3FilesPath); + strcat(filepath, StreamedNameTable[i]); + + mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); + } + if (mp3Stream[0]) { AIL_stream_ms_position(mp3Stream[0], &tatalms, NULL); @@ -1113,7 +1134,7 @@ cSampleManager::Initialise(void) AIL_close_stream(mp3Stream[0]); mp3Stream[0] = NULL; - bFileNotFound = false; + bFileNotFound = FALSE; #ifdef AUDIO_CACHE if (!CreateCache) break; @@ -1124,7 +1145,7 @@ cSampleManager::Initialise(void) } else { - bFileNotFound = true; + bFileNotFound = TRUE; break; } } @@ -1146,10 +1167,20 @@ cSampleManager::Initialise(void) #endif for ( int32 i = STREAMED_SOUND_MISSION_COMPLETED4; i < STREAMED_SOUND_MISSION_PAGER; i++ ) { +#ifdef PS2_AUDIO_PATHS strcpy(filepath, m_MiscomPath); - strcat(filepath, StreamedNameTable[i]); - + strcat(filepath, PS2StreamedNameTable[i]); + mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); + + if ( !mp3Stream[0] ) +#endif + { + strcpy(filepath, m_MiscomPath); + strcat(filepath, StreamedNameTable[i]); + + mp3Stream[0] = AIL_open_stream(DIG, filepath, 0); + } if ( mp3Stream[0] ) { @@ -1159,11 +1190,11 @@ cSampleManager::Initialise(void) mp3Stream[0] = NULL; nStreamLength[i] = tatalms; - bFileNotFound = false; + bFileNotFound = FALSE; } else { - bFileNotFound = true; + bFileNotFound = TRUE; break; } } @@ -1178,11 +1209,11 @@ cSampleManager::Initialise(void) if ( FrontEndMenuManager.m_bQuitGameNoCD ) { Terminate(); - return false; + return FALSE; } continue; #else - m_bInitialised = true; + m_bInitialised = TRUE; #endif } @@ -1201,14 +1232,14 @@ cSampleManager::Initialise(void) if ( !InitialiseSampleBanks() ) { Terminate(); - return false; + return FALSE; } nSampleBankMemoryStartAddress[SFX_BANK_0] = (int32)AIL_mem_alloc_lock(nSampleBankSize[SFX_BANK_0]); if ( !nSampleBankMemoryStartAddress[SFX_BANK_0] ) { Terminate(); - return false; + return FALSE; } nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] = (int32)AIL_mem_alloc_lock(PED_BLOCKSIZE*MAX_PEDSFX); @@ -1237,7 +1268,7 @@ cSampleManager::Initialise(void) TRACE("providerset"); { - _bSampmanInitialised = true; + _bSampmanInitialised = TRUE; U32 n = 0; @@ -1254,7 +1285,7 @@ cSampleManager::Initialise(void) if ( n == m_nNumberOfProviders ) { Terminate(); - return false; + return FALSE; } } @@ -1279,13 +1310,13 @@ cSampleManager::Initialise(void) time_t t = time(NULL); tm *localtm; - bool bUseRandomTable; + bool8 bUseRandomTable; if ( t == -1 ) - bUseRandomTable = true; + bUseRandomTable = TRUE; else { - bUseRandomTable = false; + bUseRandomTable = FALSE; localtm = localtime(&t); } @@ -1317,12 +1348,12 @@ cSampleManager::Initialise(void) else _CurMP3Pos = 0; - _bIsMp3Active = false; + _bIsMp3Active = FALSE; } TRACE("end"); - return true; + return TRUE; } void @@ -1371,10 +1402,10 @@ cSampleManager::Terminate(void) AIL_shutdown(); - _bSampmanInitialised = false; + _bSampmanInitialised = FALSE; } -bool +bool8 cSampleManager::CheckForAnAudioFileOnCD(void) { #if !defined(NO_CDCHECK) // TODO: check steam, probably GTAVC_STEAM_PATCH needs to be added @@ -1392,17 +1423,17 @@ cSampleManager::CheckForAnAudioFileOnCD(void) DMAudio.SetEffectsMasterVolume(FrontEndMenuManager.m_PrefsSfxVolume); DMAudio.Service(); - return true; + return TRUE; } DMAudio.SetMusicMasterVolume(0); DMAudio.SetEffectsMasterVolume(0); DMAudio.Service(); - return false; + return FALSE; #else - return true; + return TRUE; #endif // #if !defined(NO_CDCHECK) } @@ -1484,48 +1515,48 @@ cSampleManager::SetMusicFadeVolume(uint8 nVolume) } void -cSampleManager::SetMonoMode(uint8 nMode) +cSampleManager::SetMonoMode(bool8 nMode) { m_nMonoMode = nMode; } -bool +bool8 cSampleManager::LoadSampleBank(uint8 nBank) { if ( CTimer::GetIsCodePaused() ) - return false; + return FALSE; if ( MusicManager.IsInitialised() && MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE && nBank != SFX_BANK_0 ) { - return false; + return FALSE; } if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 ) - return false; + return FALSE; if ( fread((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank],fpSampleDataHandle) != nSampleBankSize[nBank] ) - return false; + return FALSE; - bSampleBankLoaded[nBank] = true; + bSampleBankLoaded[nBank] = TRUE; - return true; + return TRUE; } void cSampleManager::UnloadSampleBank(uint8 nBank) { - bSampleBankLoaded[nBank] = false; + bSampleBankLoaded[nBank] = FALSE; } -bool +bool8 cSampleManager::IsSampleBankLoaded(uint8 nBank) { return bSampleBankLoaded[nBank]; } -bool +bool8 cSampleManager::IsPedCommentLoaded(uint32 nComment) { int8 slot; @@ -1538,10 +1569,10 @@ cSampleManager::IsPedCommentLoaded(uint32 nComment) slot += ARRAY_SIZE(nPedSlotSfx); #endif if ( nComment == nPedSlotSfx[slot] ) - return true; + return TRUE; } - return false; + return FALSE; } int32 @@ -1563,11 +1594,11 @@ cSampleManager::_GetPedCommentSlot(uint32 nComment) return -1; } -bool +bool8 cSampleManager::LoadPedComment(uint32 nComment) { if ( CTimer::GetIsCodePaused() ) - return false; + return FALSE; // no talking peds during cutsenes or the game end if ( MusicManager.IsInitialised() ) @@ -1576,7 +1607,7 @@ cSampleManager::LoadPedComment(uint32 nComment) { case MUSICMODE_CUTSCENE: { - return false; + return FALSE; break; } @@ -1584,10 +1615,10 @@ cSampleManager::LoadPedComment(uint32 nComment) } if ( fseek(fpSampleDataHandle, m_aSamples[nComment].nOffset, SEEK_SET) != 0 ) - return false; + return FALSE; if ( fread((void *)(nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE*nCurrentPedSlot), 1, m_aSamples[nComment].nSize, fpSampleDataHandle) != m_aSamples[nComment].nSize ) - return false; + return FALSE; nPedSlotSfxAddr[nCurrentPedSlot] = nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE*nCurrentPedSlot; nPedSlotSfx [nCurrentPedSlot] = nComment; @@ -1595,7 +1626,7 @@ cSampleManager::LoadPedComment(uint32 nComment) if ( ++nCurrentPedSlot >= MAX_PEDSFX ) nCurrentPedSlot = 0; - return true; + return TRUE; } int32 @@ -1634,14 +1665,14 @@ cSampleManager::GetSampleLength(uint32 nSample) return m_aSamples[nSample].nSize >> 1; } -bool +bool8 cSampleManager::UpdateReverb(void) { if ( !usingEAX ) - return false; + return FALSE; if ( AudioManager.GetFrameCounter() & 15 ) - return false; + return FALSE; float fRatio = 0.0f; @@ -1659,10 +1690,10 @@ cSampleManager::UpdateReverb(void) #undef CALCULATE_RATIO #undef MIN_DIST - fRatio = clamp(fRatio, 0.0f, 0.6f); + fRatio = Clamp(fRatio, 0.0f, 0.6f); if ( fRatio == _fPrevEaxRatioDestination ) - return false; + return FALSE; if ( usingEAX3 ) { @@ -1684,26 +1715,26 @@ cSampleManager::UpdateReverb(void) _fPrevEaxRatioDestination = fRatio; - return true; + return TRUE; } void -cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag) +cSampleManager::SetChannelReverbFlag(uint32 nChannel, bool8 nReverbFlag) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } if ( usingEAX ) { - if ( nReverbFlag != 0 ) + if ( nReverbFlag != FALSE ) { if ( !b2d ) AIL_set_3D_sample_effects_level(opened_samples[nChannel], _fEffectsLevel); @@ -1716,16 +1747,16 @@ cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag) } } -bool +bool8 cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -1735,14 +1766,14 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) if ( nSfx < SAMPLEBANK_MAX ) { if ( !IsSampleBankLoaded(nBank) ) - return false; + return FALSE; addr = nSampleBankMemoryStartAddress[nBank] + m_aSamples[nSfx].nOffset - m_aSamples[BankStartOffset[nBank]].nOffset; } else { if ( !IsPedCommentLoaded(nSfx) ) - return false; + return FALSE; int32 slot = _GetPedCommentSlot(nSfx); @@ -1754,10 +1785,10 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) if ( opened_2dsamples[nChannel - MAXCHANNELS] ) { AIL_set_sample_address(opened_2dsamples[nChannel - MAXCHANNELS], (void *)addr, m_aSamples[nSfx].nSize); - return true; + return TRUE; } else - return false; + return FALSE; } else { @@ -1773,10 +1804,10 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) if ( AIL_set_3D_sample_info(opened_samples[nChannel], &info) == 0 ) { OutputDebugString(AIL_last_error()); - return false; + return FALSE; } - return true; + return TRUE; } } @@ -1823,7 +1854,7 @@ cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume) switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { nChannelVolume[nChannel] = vol; @@ -1850,7 +1881,7 @@ cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan) { switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { #ifndef FIX_BUGS if ( opened_samples[nChannel - MAXCHANNELS] ) // BUG @@ -1867,13 +1898,13 @@ cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan) void cSampleManager::SetChannelFrequency(uint32 nChannel, uint32 nFreq) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -1893,13 +1924,13 @@ cSampleManager::SetChannelFrequency(uint32 nChannel, uint32 nFreq) void cSampleManager::SetChannelLoopPoints(uint32 nChannel, uint32 nLoopStart, int32 nLoopEnd) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -1919,13 +1950,13 @@ cSampleManager::SetChannelLoopPoints(uint32 nChannel, uint32 nLoopStart, int32 n void cSampleManager::SetChannelLoopCount(uint32 nChannel, uint32 nLoopCount) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -1942,16 +1973,16 @@ cSampleManager::SetChannelLoopCount(uint32 nChannel, uint32 nLoopCount) } } -bool +bool8 cSampleManager::GetChannelUsedFlag(uint32 nChannel) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -1961,14 +1992,14 @@ cSampleManager::GetChannelUsedFlag(uint32 nChannel) if ( opened_2dsamples[nChannel - MAXCHANNELS] ) return AIL_sample_status(opened_2dsamples[nChannel - MAXCHANNELS]) == SMP_PLAYING; else - return false; + return FALSE; } else { if ( opened_samples[nChannel] ) return AIL_3D_sample_status(opened_samples[nChannel]) == SMP_PLAYING; else - return false; + return FALSE; } } @@ -1976,13 +2007,13 @@ cSampleManager::GetChannelUsedFlag(uint32 nChannel) void cSampleManager::StartChannel(uint32 nChannel) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -2002,13 +2033,13 @@ cSampleManager::StartChannel(uint32 nChannel) void cSampleManager::StopChannel(uint32 nChannel) { - bool b2d = false; + bool8 b2d = FALSE; switch ( nChannel ) { - case CHANNEL2D: + case CHANNEL_POLICE_RADIO: { - b2d = true; + b2d = TRUE; break; } } @@ -2042,11 +2073,20 @@ cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream) } char filepath[MAX_PATH]; - +#ifdef PS2_AUDIO_PATHS strcpy(filepath, nFile < STREAMED_SOUND_MISSION_COMPLETED4 ? m_MP3FilesPath : (nFile < STREAMED_SOUND_MISSION_MOBR1 ? m_MiscomPath : m_WavFilesPath)); - strcat(filepath, StreamedNameTable[nFile]); - + strcat(filepath, PS2StreamedNameTable[nFile]); + mp3Stream[nStream] = AIL_open_stream(DIG, filepath, 0); + + if ( !mp3Stream[nStream] ) +#endif + { + strcpy(filepath, nFile < STREAMED_SOUND_MISSION_COMPLETED4 ? m_MP3FilesPath : (nFile < STREAMED_SOUND_MISSION_MOBR1 ? m_MiscomPath : m_WavFilesPath)); + strcat(filepath, StreamedNameTable[nFile]); + + mp3Stream[nStream] = AIL_open_stream(DIG, filepath, 0); + } if ( mp3Stream[nStream] ) { @@ -2060,12 +2100,12 @@ cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream) } void -cSampleManager::PauseStream(uint8 nPauseFlag, uint8 nStream) +cSampleManager::PauseStream(bool8 nPauseFlag, uint8 nStream) { if ( m_bInitialised ) { if ( mp3Stream[nStream] ) - AIL_pause_stream(mp3Stream[nStream], nPauseFlag != 0); + AIL_pause_stream(mp3Stream[nStream], nPauseFlag != FALSE); } } @@ -2079,146 +2119,169 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream) } } -bool +bool8 cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream) { + int i = 0; uint32 position = nPos; char filename[MAX_PATH]; - if ( m_bInitialised && nFile < TOTAL_STREAMED_SOUNDS ) + if ( !m_bInitialised || nFile >= TOTAL_STREAMED_SOUNDS ) + return FALSE; + + if ( mp3Stream[nStream] ) { - if ( mp3Stream[nStream] ) + AIL_pause_stream(mp3Stream[nStream], 1); + AIL_close_stream(mp3Stream[nStream]); + } + if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER ) + { + do { - AIL_pause_stream(mp3Stream[nStream], 1); - AIL_close_stream(mp3Stream[nStream]); - } - - if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER ) - { - uint32 i = 0; - do { - if(i != 0 || _bIsMp3Active) { - if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0; - - _CurMP3Pos = 0; - - tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index); - - if(mp3) { - mp3 = _pMP3List; - if(mp3 == NULL) { - _bIsMp3Active = false; - nFile = 0; - strcpy(filename, m_MiscomPath); - strcat(filename, StreamedNameTable[nFile]); - - mp3Stream[nStream] = - AIL_open_stream(DIG, filename, 0); - if(mp3Stream[nStream]) { - AIL_set_stream_loop_count( - mp3Stream[nStream], nStreamLoopedFlag[nStream] ? 0 : 1); - nStreamLoopedFlag[nStream] = true; - AIL_set_stream_ms_position( - mp3Stream[nStream], position); - AIL_pause_stream(mp3Stream[nStream], - 0); - return true; - } - - return false; - } - } - - if(mp3->pLinkPath != NULL) - mp3Stream[nStream] = - AIL_open_stream(DIG, mp3->pLinkPath, 0); - else { - strcpy(filename, _mp3DirectoryPath); - strcat(filename, mp3->aFilename); - - mp3Stream[nStream] = - AIL_open_stream(DIG, filename, 0); - } - - if(mp3Stream[nStream]) { - AIL_set_stream_loop_count(mp3Stream[nStream], 1); - AIL_set_stream_ms_position(mp3Stream[nStream], 0); - AIL_pause_stream(mp3Stream[nStream], 0); - return true; - } - - _bIsMp3Active = false; - continue; - } + // Just switched to MP3 player + if ( !_bIsMp3Active && i == 0 ) + { if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] ) position = 0; - - tMP3Entry *e; - if ( !_GetMP3PosFromStreamPos(&position, &e) ) - { - if ( e == NULL ) + tMP3Entry *e = _pMP3List; + + // Try to continue from previous song, if already started + if(!_GetMP3PosFromStreamPos(&position, &e) && !e) { + nFile = 0; +#ifdef PS2_AUDIO_PATHS + strcpy(filename, m_MiscomPath); + strcat(filename, PS2StreamedNameTable[nFile]); + + mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); + + if ( !mp3Stream[nStream] ) +#endif { - nFile = 0; strcpy(filename, m_MiscomPath); strcat(filename, StreamedNameTable[nFile]); mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); - if(mp3Stream[nStream]) { - AIL_set_stream_loop_count(mp3Stream[nStream], nStreamLoopedFlag[nStream] ? 0 : 1); - nStreamLoopedFlag[nStream] = true; - AIL_set_stream_ms_position(mp3Stream[nStream], position); - AIL_pause_stream(mp3Stream[nStream], 0); - return true; - } + } + if(mp3Stream[nStream]) { + AIL_set_stream_loop_count(mp3Stream[nStream], nStreamLoopedFlag[nStream] ? 0 : 1); + nStreamLoopedFlag[nStream] = TRUE; + AIL_set_stream_ms_position(mp3Stream[nStream], position); + AIL_pause_stream(mp3Stream[nStream], 0); + return TRUE; + } + return FALSE; - return false; + } else { + if ( e->pLinkPath != NULL ) + mp3Stream[nStream] = AIL_open_stream(DIG, e->pLinkPath, 0); + else { + strcpy(filename, _mp3DirectoryPath); + strcat(filename, e->aFilename); + + mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); + } + + if ( mp3Stream[nStream] ) { + AIL_set_stream_loop_count(mp3Stream[nStream], 1); + AIL_set_stream_ms_position(mp3Stream[nStream], position); + AIL_pause_stream(mp3Stream[nStream], 0); + + _bIsMp3Active = TRUE; + + return TRUE; + } + // fall through, start playing from another song + } + } else { + if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0; + + _CurMP3Pos = 0; + + tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index); + if ( !mp3 ) + { + mp3 = _pMP3List; + if ( !_pMP3List ) + { + nFile = 0; + _bIsMp3Active = 0; +#ifdef PS2_AUDIO_PATHS + strcpy(filename, m_MiscomPath); + strcat(filename, PS2StreamedNameTable[nFile]); + + mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); + + if ( !mp3Stream[nStream] ) +#endif + { + strcpy(filename, m_MiscomPath); + strcat(filename, StreamedNameTable[nFile]); + mp3Stream[nStream] = + AIL_open_stream(DIG, filename, 0); + } + if(mp3Stream[nStream]) { + AIL_set_stream_loop_count( + mp3Stream[nStream], nStreamLoopedFlag[nStream] ? 0 : 1); + nStreamLoopedFlag[nStream] = TRUE; + AIL_set_stream_ms_position( + mp3Stream[nStream], position); + AIL_pause_stream(mp3Stream[nStream], + 0); + return TRUE; + } + return FALSE; } } - - if ( e->pLinkPath != NULL ) - mp3Stream[nStream] = AIL_open_stream(DIG, e->pLinkPath, 0); - else - { + if(mp3->pLinkPath != NULL) + mp3Stream[nStream] = AIL_open_stream(DIG, mp3->pLinkPath, 0); + else { strcpy(filename, _mp3DirectoryPath); - strcat(filename, e->aFilename); - - mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); + strcat(filename, mp3->aFilename); + + mp3Stream[nStream] = + AIL_open_stream(DIG, filename, 0); } - - if ( mp3Stream[nStream] ) - { + + if(mp3Stream[nStream]) { AIL_set_stream_loop_count(mp3Stream[nStream], 1); - AIL_set_stream_ms_position(mp3Stream[nStream], position); + AIL_set_stream_ms_position(mp3Stream[nStream], 0); AIL_pause_stream(mp3Stream[nStream], 0); - - _bIsMp3Active = true; - - return true; +#ifdef FIX_BUGS + _bIsMp3Active = TRUE; +#endif + return TRUE; } - - _bIsMp3Active = false; - } while(++i < nNumMP3s); - - position = 0; - nFile = 0; + } + _bIsMp3Active = 0; } - + while ( ++i < nNumMP3s ); + position = 0; + nFile = 0; + } +#ifdef PS2_AUDIO_PATHS + strcpy(filename, m_MiscomPath); + strcat(filename, PS2StreamedNameTable[nFile]); + + mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); + + if ( !mp3Stream[nStream] ) +#endif + { strcpy(filename, m_MiscomPath); strcat(filename, StreamedNameTable[nFile]); - mp3Stream[nStream] = AIL_open_stream(DIG, filename, 0); - if ( mp3Stream[nStream] ) - { - AIL_set_stream_loop_count(mp3Stream[nStream], nStreamLoopedFlag[nStream] ? 0 : 1); - nStreamLoopedFlag[nStream] = true; - AIL_set_stream_ms_position(mp3Stream[nStream], position); - AIL_pause_stream(mp3Stream[nStream], 0); - return true; - } } - - return false; + + if ( mp3Stream[nStream] ) + { + AIL_set_stream_loop_count(mp3Stream[nStream], nStreamLoopedFlag[nStream] ? 0 : 1); + nStreamLoopedFlag[nStream] = TRUE; + AIL_set_stream_ms_position(mp3Stream[nStream], position); + AIL_pause_stream(mp3Stream[nStream], 0); + return TRUE; + } + return FALSE; } void @@ -2234,7 +2297,7 @@ cSampleManager::StopStreamedFile(uint8 nStream) mp3Stream[nStream] = NULL; if ( nStream == 0 ) - _bIsMp3Active = false; + _bIsMp3Active = FALSE; } } } @@ -2272,7 +2335,7 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream) } void -cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream) +cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream) { uint8 vol = nVolume; float boostMult = 0.0f; @@ -2313,7 +2376,7 @@ cSampleManager::GetStreamedFileLength(uint8 nStream) return 0; } -bool +bool8 cSampleManager::IsStreamPlaying(uint8 nStream) { if ( m_bInitialised ) @@ -2321,23 +2384,23 @@ cSampleManager::IsStreamPlaying(uint8 nStream) if ( mp3Stream[nStream] ) { if ( AIL_stream_status(mp3Stream[nStream]) == SMP_PLAYING ) - return true; + return TRUE; else - return false; + return FALSE; } } - return false; + return FALSE; } -bool +bool8 cSampleManager::InitialiseSampleBanks(void) { int32 nBank = SFX_BANK_0; fpSampleDescHandle = fopen(SampleBankDescFilename, "rb"); if ( fpSampleDescHandle == NULL ) - return false; + return FALSE; fpSampleDataHandle = fopen(SampleBankDataFilename, "rb"); if ( fpSampleDataHandle == NULL ) @@ -2345,7 +2408,7 @@ cSampleManager::InitialiseSampleBanks(void) fclose(fpSampleDescHandle); fpSampleDescHandle = NULL; - return false; + return FALSE; } fseek(fpSampleDataHandle, 0, SEEK_END); @@ -2372,12 +2435,12 @@ cSampleManager::InitialiseSampleBanks(void) nSampleBankSize[SFX_BANK_0] = nSampleBankDiscStartOffset[SFX_BANK_PED_COMMENTS] - nSampleBankDiscStartOffset[SFX_BANK_0]; nSampleBankSize[SFX_BANK_PED_COMMENTS] = _nSampleDataEndOffset - nSampleBankDiscStartOffset[SFX_BANK_PED_COMMENTS]; - return true; + return TRUE; } void -cSampleManager::SetStreamedFileLoopFlag(uint8 nLoopFlag, uint8 nChannel) +cSampleManager::SetStreamedFileLoopFlag(bool8 nLoopFlag, uint8 nChannel) { if (m_bInitialised) nStreamLoopedFlag[nChannel] = nLoopFlag; diff --git a/src/audio/sampman_null.cpp b/src/audio/sampman_null.cpp index e9a9eaa1..af4c54ad 100644 --- a/src/audio/sampman_null.cpp +++ b/src/audio/sampman_null.cpp @@ -4,7 +4,7 @@ #include "AudioManager.h" cSampleManager SampleManager; -bool _bSampmanInitialised = false; +bool8 _bSampmanInitialised = FALSE; uint32 BankStartOffset[MAX_SFX_BANKS]; uint32 nNumMP3s; @@ -60,7 +60,7 @@ int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider) return 0; } -bool +bool8 cSampleManager::IsMP3RadioChannelAvailable(void) { return nNumMP3s != 0; @@ -75,10 +75,10 @@ void cSampleManager::ReacquireDigitalHandle(void) { } -bool +bool8 cSampleManager::Initialise(void) { - return true; + return TRUE; } void @@ -87,9 +87,9 @@ cSampleManager::Terminate(void) } -bool cSampleManager::CheckForAnAudioFileOnCD(void) +bool8 cSampleManager::CheckForAnAudioFileOnCD(void) { - return true; + return TRUE; } char cSampleManager::GetCDAudioDriveLetter(void) @@ -114,7 +114,7 @@ cSampleManager::SetMusicMasterVolume(uint8 nVolume) } void -cSampleManager::SetMusicMasterVolume(uint8 nVolume) +cSampleManager::SetMP3BoostVolume(uint8 nVolume) { } @@ -129,15 +129,15 @@ cSampleManager::SetMusicFadeVolume(uint8 nVolume) } void -cSampleManager::SetMonoMode(uint8 nMode) +cSampleManager::SetMonoMode(bool8 nMode) { } -bool +bool8 cSampleManager::LoadSampleBank(uint8 nBank) { ASSERT( nBank < MAX_SFX_BANKS ); - return false; + return FALSE; } void @@ -146,20 +146,20 @@ cSampleManager::UnloadSampleBank(uint8 nBank) ASSERT( nBank < MAX_SFX_BANKS ); } -bool +bool8 cSampleManager::IsSampleBankLoaded(uint8 nBank) { ASSERT( nBank < MAX_SFX_BANKS ); - return false; + return FALSE; } -bool +bool8 cSampleManager::IsPedCommentLoaded(uint32 nComment) { ASSERT( nComment < TOTAL_AUDIO_SAMPLES ); - return false; + return FALSE; } @@ -169,11 +169,11 @@ cSampleManager::_GetPedCommentSlot(uint32 nComment) return -1; } -bool +bool8 cSampleManager::LoadPedComment(uint32 nComment) { ASSERT( nComment < TOTAL_AUDIO_SAMPLES ); - return false; + return FALSE; } int32 @@ -210,56 +210,56 @@ cSampleManager::GetSampleLength(uint32 nSample) return 0; } -bool cSampleManager::UpdateReverb(void) +bool8 cSampleManager::UpdateReverb(void) { - return false; + return FALSE; } void -cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag) +cSampleManager::SetChannelReverbFlag(uint32 nChannel, bool8 nReverbFlag) { ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } -bool +bool8 cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) { ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); - return false; + return FALSE; } void cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume) { - ASSERT( nChannel != CHANNEL2D ); + ASSERT( nChannel < MAXCHANNELS ); ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } void cSampleManager::SetChannel3DPosition(uint32 nChannel, float fX, float fY, float fZ) { - ASSERT( nChannel != CHANNEL2D ); + ASSERT( nChannel < MAXCHANNELS ); ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } void cSampleManager::SetChannel3DDistances(uint32 nChannel, float fMax, float fMin) { - ASSERT( nChannel != CHANNEL2D ); + ASSERT( nChannel < MAXCHANNELS ); ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } void cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume) { - ASSERT( nChannel == CHANNEL2D ); + ASSERT( nChannel >= MAXCHANNELS ); ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } void cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan) { - ASSERT(nChannel == CHANNEL2D); + ASSERT( nChannel >= MAXCHANNELS ); ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } @@ -281,12 +281,12 @@ cSampleManager::SetChannelLoopCount(uint32 nChannel, uint32 nLoopCount) ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); } -bool +bool8 cSampleManager::GetChannelUsedFlag(uint32 nChannel) { ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); - return false; + return FALSE; } void @@ -308,7 +308,7 @@ cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream) } void -cSampleManager::PauseStream(uint8 nPauseFlag, uint8 nStream) +cSampleManager::PauseStream(bool8 nPauseFlag, uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); } @@ -319,12 +319,12 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream) ASSERT( nStream < MAX_STREAMS ); } -bool +bool8 cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); - return false; + return FALSE; } void @@ -342,7 +342,7 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream) } void -cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream) +cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); } @@ -355,23 +355,23 @@ cSampleManager::GetStreamedFileLength(uint8 nStream) return 1; } -bool +bool8 cSampleManager::IsStreamPlaying(uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); - return false; + return FALSE; } -bool +bool8 cSampleManager::InitialiseSampleBanks(void) { - return true; + return TRUE; } void -cSampleManager::SetStreamedFileLoopFlag(uint8 nLoopFlag, uint8 nChannel) +cSampleManager::SetStreamedFileLoopFlag(bool8 nLoopFlag, uint8 nChannel) { } diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp index 59a9a667..bd6601ef 100644 --- a/src/audio/sampman_oal.cpp +++ b/src/audio/sampman_oal.cpp @@ -34,6 +34,13 @@ #include "oal/oal_utils.h" #include "oal/aldlist.h" #include "oal/channel.h" + +#include +#ifdef MULTITHREADED_AUDIO +#include +#include +#include +#endif #include "oal/stream.h" #include "AudioManager.h" @@ -45,7 +52,6 @@ #endif //TODO: fix eax3 reverb -//TODO: max channels #ifdef __WIIU__ extern "C" char *_getcwd (char *__buf, size_t __size); @@ -54,7 +60,7 @@ extern "C" char *_getcwd (char *__buf, size_t __size); #endif cSampleManager SampleManager; -bool _bSampmanInitialised = false; +bool8 _bSampmanInitialised = FALSE; uint32 BankStartOffset[MAX_SFX_BANKS]; @@ -66,16 +72,18 @@ int usingEAX3=0; ALCdevice *ALDevice = NULL; ALCcontext *ALContext = NULL; unsigned int _maxSamples; -float _fPrevEaxRatioDestination; +float _fPrevEaxRatioDestination; +bool _effectsSupported = false; bool _usingEFX; float _fEffectsLevel; ALuint ALEffect = AL_EFFECT_NULL; ALuint ALEffectSlot = AL_EFFECTSLOT_NULL; struct -{ - char id[256]; +{ + const char *id; char name[256]; int sources; + bool bSupportsFx; }providers[MAXPROVIDERS]; int defaultProvider; @@ -90,7 +98,7 @@ OggOpusFile *fpSampleDataHandle; #else FILE *fpSampleDataHandle; #endif -bool bSampleBankLoaded [MAX_SFX_BANKS]; +bool8 bSampleBankLoaded [MAX_SFX_BANKS]; int32 nSampleBankDiscStartOffset [MAX_SFX_BANKS]; int32 nSampleBankSize [MAX_SFX_BANKS]; uintptr nSampleBankMemoryStartAddress[MAX_SFX_BANKS]; @@ -100,8 +108,8 @@ int32 nPedSlotSfx [MAX_PEDSFX]; int32 nPedSlotSfxAddr[MAX_PEDSFX]; uint8 nCurrentPedSlot; -CChannel aChannel[MAXCHANNELS+MAX2DCHANNELS]; -uint8 nChannelVolume[MAXCHANNELS+MAX2DCHANNELS]; +CChannel aChannel[NUM_CHANNELS]; +uint8 nChannelVolume[NUM_CHANNELS]; uint32 nStreamLength[TOTAL_STREAMED_SOUNDS]; ALuint ALStreamSources[MAX_STREAMS][2]; @@ -124,10 +132,10 @@ char _mp3DirectoryPath[MAX_PATH]; CStream *aStream[MAX_STREAMS]; uint8 nStreamPan [MAX_STREAMS]; uint8 nStreamVolume[MAX_STREAMS]; -uint8 nStreamLoopedFlag[MAX_STREAMS]; +bool8 nStreamLoopedFlag[MAX_STREAMS]; uint32 _CurMP3Index; int32 _CurMP3Pos; -bool _bIsMp3Active; +bool8 _bIsMp3Active; /////////////////////////////////////////////////////////////// // Env Size Diffus Room RoomHF RoomLF DecTm DcHF DcLF Refl RefDel Ref Pan Revb RevDel Rev Pan EchTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff FLAGS EAXLISTENERPROPERTIES StartEAX3 = @@ -141,7 +149,7 @@ EAXLISTENERPROPERTIES EAX3Params; bool IsFXSupported() { - return usingEAX || usingEAX3 || _usingEFX; + return _effectsSupported; // usingEAX || usingEAX3 || _usingEFX; } void EAX_SetAll(const EAXLISTENERPROPERTIES *allparameters) @@ -156,21 +164,22 @@ static void add_providers() { SampleManager.SetNum3DProvidersAvailable(0); - - ALDeviceList *pDeviceList = NULL; - pDeviceList = new ALDeviceList(); + + static ALDeviceList DeviceList; + ALDeviceList *pDeviceList = &DeviceList; if ((pDeviceList) && (pDeviceList->GetNumDevices())) { const int devNumber = Min(pDeviceList->GetNumDevices(), MAXPROVIDERS); int n = 0; - for (int i = 0; i < devNumber; i++) + //for (int i = 0; i < devNumber; i++) + int i = pDeviceList->GetDefaultDevice(); { if ( n < MAXPROVIDERS ) - { - strcpy(providers[n].id, pDeviceList->GetDeviceName(i)); - strncpy(providers[n].name, pDeviceList->GetDeviceName(i), sizeof(providers[n].name)); + { + providers[n].id = pDeviceList->GetDeviceName(i); + strcpy(providers[n].name, "OPENAL SOFT"); providers[n].sources = pDeviceList->GetMaxNumSources(i); SampleManager.Set3DProviderName(n, providers[n].name); n++; @@ -181,23 +190,24 @@ add_providers() || pDeviceList->IsExtensionSupported(i, ADEXT_EAX3) || pDeviceList->IsExtensionSupported(i, ADEXT_EAX4) || pDeviceList->IsExtensionSupported(i, ADEXT_EAX5) ) - { + { + providers[n - 1].bSupportsFx = true; if ( n < MAXPROVIDERS ) - { - strcpy(providers[n].id, pDeviceList->GetDeviceName(i)); - strncpy(providers[n].name, pDeviceList->GetDeviceName(i), sizeof(providers[n].name)); - strcat(providers[n].name, " EAX"); + { + providers[n].id = pDeviceList->GetDeviceName(i); + strcpy(providers[n].name, "OPENAL SOFT EAX"); providers[n].sources = pDeviceList->GetMaxNumSources(i); + providers[n].bSupportsFx = true; SampleManager.Set3DProviderName(n, providers[n].name); n++; } if ( n < MAXPROVIDERS ) - { - strcpy(providers[n].id, pDeviceList->GetDeviceName(i)); - strncpy(providers[n].name, pDeviceList->GetDeviceName(i), sizeof(providers[n].name)); - strcat(providers[n].name, " EAX3"); + { + providers[n].id = pDeviceList->GetDeviceName(i); + strcpy(providers[n].name, "OPENAL SOFT EAX3"); providers[n].sources = pDeviceList->GetMaxNumSources(i); + providers[n].bSupportsFx = true; SampleManager.Set3DProviderName(n, providers[n].name); n++; } @@ -207,76 +217,38 @@ add_providers() for(int j=n;jGetDefaultDevice(); - if ( defaultProvider > MAXPROVIDERS ) - defaultProvider = 0; + + // devices are gone now + //defaultProvider = pDeviceList->GetDefaultDevice(); + //if ( defaultProvider > MAXPROVIDERS ) + defaultProvider = 0; } - - delete pDeviceList; } static void release_existing() { - for ( int32 i = 0; i < MAXCHANNELS; i++ ) - aChannel[i].Term(); - aChannel[CHANNEL2D].Term(); - if ( IsFXSupported() ) { if ( alIsEffect(ALEffect) ) { alEffecti(ALEffect, AL_EFFECT_TYPE, AL_EFFECT_NULL); - alDeleteEffects(1, &ALEffect); - ALEffect = AL_EFFECT_NULL; } if (alIsAuxiliaryEffectSlot(ALEffectSlot)) { alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, AL_EFFECT_NULL); - - alDeleteAuxiliaryEffectSlots(1, &ALEffectSlot); - ALEffectSlot = AL_EFFECTSLOT_NULL; } } - - for ( int32 i = 0; i < MAX_STREAMS; i++ ) - { - CStream *stream = aStream[i]; - if (stream) - stream->ProviderTerm(); - - alDeleteBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]); - } - alDeleteSources(MAX_STREAMS*2, ALStreamSources[0]); - - CChannel::DestroyChannels(); - - if ( ALContext ) - { - alcMakeContextCurrent(NULL); - alcSuspendContext(ALContext); - alcDestroyContext(ALContext); - } - if ( ALDevice ) - alcCloseDevice(ALDevice); - - ALDevice = NULL; - ALContext = NULL; - - _fPrevEaxRatioDestination = 0.0f; - _usingEFX = false; - _fEffectsLevel = 0.0f; - + DEV("release_existing()\n"); } -static bool +static bool8 set_new_provider(int index) { if ( curprovider == index ) - return true; + return TRUE; curprovider = index; @@ -286,61 +258,6 @@ set_new_provider(int index) { DEV("set_new_provider()\n"); - //TODO: - _maxSamples = MAXCHANNELS; - - ALCint attr[] = {ALC_FREQUENCY,MAX_FREQ, - ALC_MONO_SOURCES, MAX_STREAMS * 2 + MAXCHANNELS, - 0, - }; - - ALDevice = alcOpenDevice(providers[index].id); - ASSERT(ALDevice != NULL); - - ALContext = alcCreateContext(ALDevice, attr); - ASSERT(ALContext != NULL); - - alcMakeContextCurrent(ALContext); - - const char* ext=(const char*)alGetString(AL_EXTENSIONS); - ASSERT(strstr(ext,"AL_SOFT_loop_points")!=NULL); - if ( strstr(ext,"AL_SOFT_loop_points")==NULL ) - { - curprovider=-1; - release_existing(); - return false; - } - - alListenerf (AL_GAIN, 1.0f); - alListener3f(AL_POSITION, 0.0f, 0.0f, 0.0f); - alListener3f(AL_VELOCITY, 0.0f, 0.0f, 0.0f); - ALfloat orientation[6] = { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; - alListenerfv(AL_ORIENTATION, orientation); - - alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED); - - if ( alcIsExtensionPresent(ALDevice, (ALCchar*)ALC_EXT_EFX_NAME) ) - { - alGenAuxiliaryEffectSlots(1, &ALEffectSlot); - alGenEffects(1, &ALEffect); - } - - alGenSources(MAX_STREAMS*2, ALStreamSources[0]); - for ( int32 i = 0; i < MAX_STREAMS; i++ ) - { - alGenBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]); - alSourcei(ALStreamSources[i][0], AL_SOURCE_RELATIVE, AL_TRUE); - alSource3f(ALStreamSources[i][0], AL_POSITION, 0.0f, 0.0f, 0.0f); - alSourcef(ALStreamSources[i][0], AL_GAIN, 1.0f); - alSourcei(ALStreamSources[i][1], AL_SOURCE_RELATIVE, AL_TRUE); - alSource3f(ALStreamSources[i][1], AL_POSITION, 0.0f, 0.0f, 0.0f); - alSourcef(ALStreamSources[i][1], AL_GAIN, 1.0f); - - CStream *stream = aStream[i]; - if (stream) - stream->ProviderInit(); - } - usingEAX = 0; usingEAX3 = 0; _usingEFX = false; @@ -348,16 +265,16 @@ set_new_provider(int index) if ( !strcmp(&providers[index].name[strlen(providers[index].name) - strlen(" EAX3")], " EAX3") && alcIsExtensionPresent(ALDevice, (ALCchar*)ALC_EXT_EFX_NAME) ) { - EAX_SetAll(&FinishEAX3); usingEAX = 1; usingEAX3 = 1; + alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, ALEffect); + EAX_SetAll(&FinishEAX3); DEV("EAX3\n"); } else if ( alcIsExtensionPresent(ALDevice, (ALCchar*)ALC_EXT_EFX_NAME) ) { - EAX_SetAll(&EAX30_ORIGINAL_PRESETS[EAX_ENVIRONMENT_CAVE]); if ( !strcmp(&providers[index].name[strlen(providers[index].name) - strlen(" EAX")], " EAX")) { @@ -369,33 +286,25 @@ set_new_provider(int index) _usingEFX = true; DEV("EFX\n"); } + alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, ALEffect); + EAX_SetAll(&EAX30_ORIGINAL_PRESETS[EAX_ENVIRONMENT_CAVE]); } //SampleManager.SetSpeakerConfig(speaker_type); - CChannel::InitChannels(); - - for ( int32 i = 0; i < MAXCHANNELS; i++ ) - aChannel[i].Init(i); - aChannel[CHANNEL2D].Init(CHANNEL2D, true); - if ( IsFXSupported() ) { - /**/ - alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, ALEffect); - /**/ - for ( int32 i = 0; i < MAXCHANNELS; i++ ) aChannel[i].SetReverbMix(ALEffectSlot, 0.0f); } - return true; + return TRUE; } - return false; + return FALSE; } -static bool +static bool8 IsThisTrackAt16KHz(uint32 track) { return track == STREAMED_SOUND_RADIO_KCHAT || track == STREAMED_SOUND_RADIO_VCPR || track == STREAMED_SOUND_RADIO_POLICE; @@ -453,7 +362,7 @@ int8 cSampleManager::SetCurrent3DProvider(uint8 nProvider) { int savedprovider = curprovider; - nProvider = clamp(nProvider, 0, m_nNumberOfProviders - 1); + nProvider = Clamp(nProvider, 0, m_nNumberOfProviders - 1); if ( set_new_provider(nProvider) ) return curprovider; @@ -488,13 +397,13 @@ cSampleManager::AutoDetect3DProviders() return -1; } -static bool +static bool8 _ResolveLink(char const *path, char *out) { #ifdef _WIN32 size_t len = strlen(path); if (len < 4 || strcmp(&path[len - 4], ".lnk") != 0) - return false; + return FALSE; IShellLink* psl; WIN32_FIND_DATA fd; @@ -529,7 +438,7 @@ _ResolveLink(char const *path, char *out) ppf->Release(); psl->Release(); #endif - return true; + return TRUE; } } } @@ -539,33 +448,33 @@ _ResolveLink(char const *path, char *out) psl->Release(); } - return false; + return FALSE; #elif defined __WIIU__ - return false; + return FALSE; #else struct stat sb; if (lstat(path, &sb) == -1) { perror("lstat: "); - return false; + return FALSE; } if (S_ISLNK(sb.st_mode)) { char* linkname = (char*)alloca(sb.st_size + 1); if (linkname == NULL) { fprintf(stderr, "insufficient memory\n"); - return false; + return FALSE; } if (readlink(path, linkname, sb.st_size + 1) < 0) { perror("readlink: "); - return false; + return FALSE; } linkname[sb.st_size] = '\0'; strcpy(out, linkname); - return true; + return TRUE; } else { - return false; + return FALSE; } #endif } @@ -574,22 +483,36 @@ static void _FindMP3s(void) { tMP3Entry *pList; - bool bShortcut; - bool bInitFirstEntry; + bool8 bShortcut; + bool8 bInitFirstEntry; HANDLE hFind; char path[MAX_PATH]; - char filepath[MAX_PATH*2]; int total_ms; WIN32_FIND_DATA fd; + char filepath[MAX_PATH + sizeof(fd.cFileName)]; if (_getcwd(_mp3DirectoryPath, MAX_PATH) == NULL) { perror("getcwd: "); return; } + + if (strlen(_mp3DirectoryPath) + 1 > MAX_PATH - 10) { + // This is not gonna end well + printf("MP3 folder path is too long, no place left for file names. MP3 finding aborted.\n"); + return; + } OutputDebugString("Finding MP3s..."); strcpy(path, _mp3DirectoryPath); strcat(path, "\\MP3\\"); + +#if !defined(_WIN32) + char *actualPath = casepath(path); + if (actualPath) { + strcpy(path, actualPath); + free(actualPath); + } +#endif strcpy(_mp3DirectoryPath, path); OutputDebugString(_mp3DirectoryPath); @@ -602,135 +525,69 @@ _FindMP3s(void) { return; } - - strcpy(filepath, _mp3DirectoryPath); - strcat(filepath, fd.cFileName); - - size_t filepathlen = strlen(filepath); - - if ( filepathlen <= 0) - { - FindClose(hFind); - return; - } - if ( _ResolveLink(filepath, filepath) ) - { - OutputDebugString("Resolving Link"); - OutputDebugString(filepath); - bShortcut = true; - } else - bShortcut = false; - - aStream[0] = new CStream(filepath, ALStreamSources[0], ALStreamBuffers[0]); + bShortcut = FALSE; + bInitFirstEntry = TRUE; - if (aStream[0] && aStream[0]->IsOpened()) - { - total_ms = aStream[0]->GetLengthMS(); - delete aStream[0]; - aStream[0] = NULL; + do + { + strcpy(filepath, _mp3DirectoryPath); + strcat(filepath, fd.cFileName); + + if (!strcmp(fd.cFileName, ".") || !strcmp(fd.cFileName, "..")) + continue; - OutputDebugString(fd.cFileName); - - _pMP3List = new tMP3Entry; - - if ( _pMP3List == NULL ) - { - FindClose(hFind); - return; - } - - nNumMP3s = 1; - - strcpy(_pMP3List->aFilename, fd.cFileName); - - _pMP3List->nTrackLength = total_ms; - - _pMP3List->pNext = NULL; - - pList = _pMP3List; - - if ( bShortcut ) - { - _pMP3List->pLinkPath = new char[MAX_PATH*2]; - strcpy(_pMP3List->pLinkPath, filepath); - } - else - { - _pMP3List->pLinkPath = NULL; - } + size_t filepathlen = strlen(filepath); - bInitFirstEntry = false; - } - else - { - strcat(filepath, " - NOT A VALID MP3"); - - OutputDebugString(filepath); - - bInitFirstEntry = true; - } - - while ( true ) - { - if ( !FindNextFile(hFind, &fd) ) - break; - if ( bInitFirstEntry ) { - strcpy(filepath, _mp3DirectoryPath); - strcat(filepath, fd.cFileName); - - size_t filepathlen = strlen(filepath); - - if ( filepathlen > 0 ) + if (filepathlen > 0) { - if ( _ResolveLink(filepath, filepath) ) + if (_ResolveLink(filepath, filepath)) { OutputDebugString("Resolving Link"); OutputDebugString(filepath); - bShortcut = true; - } else { - bShortcut = false; + bShortcut = TRUE; + } + else + { + bShortcut = FALSE; if (filepathlen > MAX_PATH) { continue; } } - aStream[0] = new CStream(filepath, ALStreamSources[0], ALStreamBuffers[0]); - - if (aStream[0] && aStream[0]->IsOpened()) + if (aStream[0] && aStream[0]->Open(filepath)) { total_ms = aStream[0]->GetLengthMS(); - delete aStream[0]; - aStream[0] = NULL; + aStream[0]->Close(); OutputDebugString(fd.cFileName); - + _pMP3List = new tMP3Entry; - - if ( _pMP3List == NULL) + + if (_pMP3List == NULL) break; - + nNumMP3s = 1; - + strcpy(_pMP3List->aFilename, fd.cFileName); - + _pMP3List->nTrackLength = total_ms; _pMP3List->pNext = NULL; - - if ( bShortcut ) + + if (bShortcut) { - _pMP3List->pLinkPath = new char [MAX_PATH*2]; + _pMP3List->pLinkPath = new char[MAX_PATH + sizeof(fd.cFileName)]; strcpy(_pMP3List->pLinkPath, filepath); } else { _pMP3List->pLinkPath = NULL; } - + pList = _pMP3List; - bInitFirstEntry = false; + bInitFirstEntry = FALSE; } else { @@ -738,31 +595,26 @@ _FindMP3s(void) OutputDebugString(filepath); } } + else + break; } else { - strcpy(filepath, _mp3DirectoryPath); - strcat(filepath, fd.cFileName); - - size_t filepathlen = strlen(filepath); - if ( filepathlen > 0 ) { if ( _ResolveLink(filepath, filepath) ) { OutputDebugString("Resolving Link"); OutputDebugString(filepath); - bShortcut = true; - } else - bShortcut = false; + bShortcut = TRUE; + } + else + bShortcut = FALSE; - aStream[0] = new CStream(filepath, ALStreamSources[0], ALStreamBuffers[0]); - - if (aStream[0] && aStream[0]->IsOpened()) + if (aStream[0] && aStream[0]->Open(filepath)) { total_ms = aStream[0]->GetLengthMS(); - delete aStream[0]; - aStream[0] = NULL; + aStream[0]->Close(); OutputDebugString(fd.cFileName); @@ -781,7 +633,7 @@ _FindMP3s(void) if ( bShortcut ) { - e->pLinkPath = new char [MAX_PATH*2]; + e->pLinkPath = new char [MAX_PATH + sizeof(fd.cFileName)]; strcpy(e->pLinkPath, filepath); } else @@ -800,7 +652,7 @@ _FindMP3s(void) } } } - } + } while (FindNextFile(hFind, &fd)); FindClose(hFind); } @@ -866,7 +718,7 @@ _GetMP3EntryByIndex(uint32 idx) return NULL; } -static inline bool +static inline bool8 _GetMP3PosFromStreamPos(uint32 *pPosition, tMP3Entry **pEntry) { _CurMP3Index = 0; @@ -879,7 +731,7 @@ _GetMP3PosFromStreamPos(uint32 *pPosition, tMP3Entry **pEntry) *pPosition -= (*pEntry)->nTrackStreamPos; _CurMP3Pos = *pPosition; - return true; + return TRUE; } _CurMP3Index++; @@ -890,10 +742,10 @@ _GetMP3PosFromStreamPos(uint32 *pPosition, tMP3Entry **pEntry) _CurMP3Pos = 0; _CurMP3Index = 0; - return false; + return FALSE; } -bool +bool8 cSampleManager::IsMP3RadioChannelAvailable(void) { return nNumMP3s != 0; @@ -902,30 +754,25 @@ cSampleManager::IsMP3RadioChannelAvailable(void) void cSampleManager::ReleaseDigitalHandle(void) { - if ( ALDevice ) - { - prevprovider = curprovider; - release_existing(); - curprovider = -1; - } + // TODO? alcSuspendContext } void cSampleManager::ReacquireDigitalHandle(void) { - if ( ALDevice ) - { - if ( prevprovider != -1 ) - set_new_provider(prevprovider); - } + // TODO? alcProcessContext } -bool +bool8 cSampleManager::Initialise(void) { if ( _bSampmanInitialised ) - return true; + return TRUE; EFXInit(); + + for(int i = 0; i < MAX_STREAMS; i++) + aStream[i] = new CStream(ALStreamSources[i], ALStreamBuffers[i]); + CStream::Initialise(); { @@ -933,7 +780,7 @@ cSampleManager::Initialise(void) { m_aSamples[i].nOffset = 0; m_aSamples[i].nSize = 0; - m_aSamples[i].nFrequency = MAX_FREQ; + m_aSamples[i].nFrequency = 22050; m_aSamples[i].nLoopStart = 0; m_aSamples[i].nLoopEnd = -1; } @@ -968,7 +815,7 @@ cSampleManager::Initialise(void) for ( int32 i = 0; i < MAX_SFX_BANKS; i++ ) { - bSampleBankLoaded[i] = false; + bSampleBankLoaded[i] = FALSE; nSampleBankDiscStartOffset[i] = 0; nSampleBankSize[i] = 0; nSampleBankMemoryStartAddress[i] = 0; @@ -986,16 +833,87 @@ cSampleManager::Initialise(void) } { - for ( int32 i = 0; i < MAXCHANNELS+MAX2DCHANNELS; i++ ) + for ( int32 i = 0; i < NUM_CHANNELS; i++ ) nChannelVolume[i] = 0; } + + add_providers(); + + { + int index = 0; + _maxSamples = Min(MAXCHANNELS, providers[index].sources); + + ALCint attr[] = {ALC_FREQUENCY,MAX_FREQ, + ALC_MONO_SOURCES, MAX_DIGITAL_MIXER_CHANNELS - MAX2DCHANNELS, + ALC_STEREO_SOURCES, MAX2DCHANNELS, + 0, + }; + + ALDevice = alcOpenDevice(providers[index].id); + ASSERT(ALDevice != NULL); + + ALContext = alcCreateContext(ALDevice, attr); + ASSERT(ALContext != NULL); + + alcMakeContextCurrent(ALContext); + const char* ext=(const char*)alGetString(AL_EXTENSIONS); + ASSERT(strstr(ext,"AL_SOFT_loop_points")!=NULL); + if ( strstr(ext,"AL_SOFT_loop_points")==NULL ) + { + Terminate(); + return FALSE; + } + + alListenerf (AL_GAIN, 1.0f); + alListener3f(AL_POSITION, 0.0f, 0.0f, 0.0f); + alListener3f(AL_VELOCITY, 0.0f, 0.0f, 0.0f); + ALfloat orientation[6] = { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; + alListenerfv(AL_ORIENTATION, orientation); + + alDistanceModel(AL_INVERSE_DISTANCE_CLAMPED); + + if ( alcIsExtensionPresent(ALDevice, (ALCchar*)ALC_EXT_EFX_NAME) ) + { + _effectsSupported = providers[index].bSupportsFx; + alGenAuxiliaryEffectSlots(1, &ALEffectSlot); + alGenEffects(1, &ALEffect); + } + + alGenSources(MAX_STREAMS*2, ALStreamSources[0]); + for ( int32 i = 0; i < MAX_STREAMS; i++ ) + { + alGenBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]); + alSourcei(ALStreamSources[i][0], AL_SOURCE_RELATIVE, AL_TRUE); + alSource3f(ALStreamSources[i][0], AL_POSITION, 0.0f, 0.0f, 0.0f); + alSourcef(ALStreamSources[i][0], AL_GAIN, 1.0f); + alSourcei(ALStreamSources[i][1], AL_SOURCE_RELATIVE, AL_TRUE); + alSource3f(ALStreamSources[i][1], AL_POSITION, 0.0f, 0.0f, 0.0f); + alSourcef(ALStreamSources[i][1], AL_GAIN, 1.0f); + } + + CChannel::InitChannels(); + + for ( int32 i = 0; i < MAXCHANNELS; i++ ) + aChannel[i].Init(i); + for ( int32 i = 0; i < MAX2DCHANNELS; i++ ) + aChannel[MAXCHANNELS+i].Init(MAXCHANNELS+i, true); + + if ( IsFXSupported() ) + { + /**/ + alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, ALEffect); + /**/ + + for ( int32 i = 0; i < MAXCHANNELS; i++ ) + aChannel[i].SetReverbMix(ALEffectSlot, 0.0f); + } + } + { for ( int32 i = 0; i < TOTAL_STREAMED_SOUNDS; i++ ) nStreamLength[i] = 0; } - - add_providers(); #ifdef AUDIO_CACHE #ifdef WIIU_CHANNEL @@ -1014,13 +932,14 @@ cSampleManager::Initialise(void) for ( int32 i = 0; i < TOTAL_STREAMED_SOUNDS; i++ ) { - aStream[0] = new CStream(StreamedNameTable[i], ALStreamSources[0], ALStreamBuffers[0], IsThisTrackAt16KHz(i) ? 16000 : 32000); - - if ( aStream[0] && aStream[0]->IsOpened() ) + if ( aStream[0] && ( +#ifdef PS2_AUDIO_PATHS + aStream[0]->Open(PS2StreamedNameTable[i], IsThisTrackAt16KHz(i) ? 16000 : 32000) || +#endif + aStream[0]->Open(StreamedNameTable[i], IsThisTrackAt16KHz(i) ? 16000 : 32000)) ) { uint32 tatalms = aStream[0]->GetLengthMS(); - delete aStream[0]; - aStream[0] = NULL; + aStream[0]->Close(); nStreamLength[i] = tatalms; } @@ -1047,7 +966,7 @@ cSampleManager::Initialise(void) if ( !InitialiseSampleBanks() ) { Terminate(); - return false; + return FALSE; } nSampleBankMemoryStartAddress[SFX_BANK_0] = (uintptr)malloc(nSampleBankSize[SFX_BANK_0]); @@ -1056,7 +975,7 @@ cSampleManager::Initialise(void) if ( nSampleBankMemoryStartAddress[SFX_BANK_0] == 0 ) { Terminate(); - return false; + return FALSE; } nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] = (uintptr)malloc(PED_BLOCKSIZE*MAX_PEDSFX); @@ -1068,14 +987,15 @@ cSampleManager::Initialise(void) { for ( int32 i = 0; i < MAX_STREAMS; i++ ) { - aStream[i] = NULL; + aStream[i]->Close(); + nStreamVolume[i] = 100; nStreamPan[i] = 63; } } - + { - _bSampmanInitialised = true; + _bSampmanInitialised = TRUE; if ( defaultProvider >= 0 && defaultProvider < m_nNumberOfProviders ) { @@ -1084,7 +1004,7 @@ cSampleManager::Initialise(void) else { Terminate(); - return false; + return FALSE; } } @@ -1107,13 +1027,13 @@ cSampleManager::Initialise(void) time_t t = time(NULL); tm *localtm; - bool bUseRandomTable; + bool8 bUseRandomTable; if ( t == -1 ) - bUseRandomTable = true; + bUseRandomTable = TRUE; else { - bUseRandomTable = false; + bUseRandomTable = FALSE; localtm = localtime(&t); } @@ -1145,31 +1065,70 @@ cSampleManager::Initialise(void) else _CurMP3Pos = 0; - _bIsMp3Active = false; + _bIsMp3Active = FALSE; } - return true; + return TRUE; } void cSampleManager::Terminate(void) { for (int32 i = 0; i < MAX_STREAMS; i++) + aStream[i]->Close(); + + for ( int32 i = 0; i < NUM_CHANNELS; i++ ) + aChannel[i].Term(); + + if ( IsFXSupported() ) { - CStream *stream = aStream[i]; - if (stream) + if ( alIsEffect(ALEffect) ) { - delete stream; - aStream[i] = NULL; + alEffecti(ALEffect, AL_EFFECT_TYPE, AL_EFFECT_NULL); + alDeleteEffects(1, &ALEffect); + ALEffect = AL_EFFECT_NULL; + } + + if (alIsAuxiliaryEffectSlot(ALEffectSlot)) + { + alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, AL_EFFECT_NULL); + + alDeleteAuxiliaryEffectSlots(1, &ALEffectSlot); + ALEffectSlot = AL_EFFECTSLOT_NULL; } } - release_existing(); - + for ( int32 i = 0; i < MAX_STREAMS; i++ ) + { + alDeleteBuffers(NUM_STREAMBUFFERS, ALStreamBuffers[i]); + } + alDeleteSources(MAX_STREAMS*2, ALStreamSources[0]); + + CChannel::DestroyChannels(); + + if ( ALContext ) + { + alcMakeContextCurrent(NULL); + alcSuspendContext(ALContext); + alcDestroyContext(ALContext); + } + if ( ALDevice ) + alcCloseDevice(ALDevice); + + ALDevice = NULL; + ALContext = NULL; + + _fPrevEaxRatioDestination = 0.0f; + _usingEFX = false; + _fEffectsLevel = 0.0f; + _DeleteMP3Entries(); CStream::Terminate(); + for(int32 i = 0; i < MAX_STREAMS; i++) + delete aStream[i]; + if ( nSampleBankMemoryStartAddress[SFX_BANK_0] != 0 ) { free((void *)nSampleBankMemoryStartAddress[SFX_BANK_0]); @@ -1182,12 +1141,12 @@ cSampleManager::Terminate(void) nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] = 0; } - _bSampmanInitialised = false; + _bSampmanInitialised = FALSE; } -bool cSampleManager::CheckForAnAudioFileOnCD(void) +bool8 cSampleManager::CheckForAnAudioFileOnCD(void) { - return true; + return TRUE; } char cSampleManager::GetCDAudioDriveLetter(void) @@ -1200,7 +1159,7 @@ cSampleManager::UpdateEffectsVolume(void) { if ( _bSampmanInitialised ) { - for ( int32 i = 0; i < MAXCHANNELS+MAX2DCHANNELS; i++ ) + for ( int32 i = 0; i < NUM_CHANNELS; i++ ) { if ( GetChannelUsedFlag(i) ) { @@ -1244,24 +1203,24 @@ cSampleManager::SetMusicFadeVolume(uint8 nVolume) } void -cSampleManager::SetMonoMode(uint8 nMode) +cSampleManager::SetMonoMode(bool8 nMode) { m_nMonoMode = nMode; } -bool +bool8 cSampleManager::LoadSampleBank(uint8 nBank) { ASSERT( nBank < MAX_SFX_BANKS); if ( CTimer::GetIsCodePaused() ) - return false; + return FALSE; if ( MusicManager.IsInitialised() && MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE && nBank != SFX_BANK_0 ) { - return false; + return FALSE; } #ifdef OPUS_SFX @@ -1280,14 +1239,14 @@ cSampleManager::LoadSampleBank(uint8 nBank) } #else if ( fseek(fpSampleDataHandle, nSampleBankDiscStartOffset[nBank], SEEK_SET) != 0 ) - return false; + return FALSE; if ( fread((void *)nSampleBankMemoryStartAddress[nBank], 1, nSampleBankSize[nBank], fpSampleDataHandle) != nSampleBankSize[nBank] ) - return false; + return FALSE; #endif - bSampleBankLoaded[nBank] = true; + bSampleBankLoaded[nBank] = TRUE; - return true; + return TRUE; } void @@ -1295,10 +1254,10 @@ cSampleManager::UnloadSampleBank(uint8 nBank) { ASSERT( nBank < MAX_SFX_BANKS); - bSampleBankLoaded[nBank] = false; + bSampleBankLoaded[nBank] = FALSE; } -bool +bool8 cSampleManager::IsSampleBankLoaded(uint8 nBank) { ASSERT( nBank < MAX_SFX_BANKS); @@ -1306,39 +1265,39 @@ cSampleManager::IsSampleBankLoaded(uint8 nBank) return bSampleBankLoaded[nBank]; } -bool +bool8 cSampleManager::IsPedCommentLoaded(uint32 nComment) { ASSERT( nComment < TOTAL_AUDIO_SAMPLES ); - int8 slot; - for ( int32 i = 0; i < _TODOCONST(3); i++ ) { - slot = nCurrentPedSlot - i - 1; #ifdef FIX_BUGS + int8 slot = (int8)nCurrentPedSlot - i - 1; if (slot < 0) slot += ARRAY_SIZE(nPedSlotSfx); +#else + uint8 slot = nCurrentPedSlot - i - 1; #endif if ( nComment == nPedSlotSfx[slot] ) - return true; + return TRUE; } - return false; + return FALSE; } int32 cSampleManager::_GetPedCommentSlot(uint32 nComment) { - int8 slot; - for (int32 i = 0; i < _TODOCONST(3); i++) { - slot = nCurrentPedSlot - i - 1; #ifdef FIX_BUGS + int8 slot = (int8)nCurrentPedSlot - i - 1; if (slot < 0) slot += ARRAY_SIZE(nPedSlotSfx); +#else + uint8 slot = nCurrentPedSlot - i - 1; #endif if (nComment == nPedSlotSfx[slot]) return slot; @@ -1347,13 +1306,13 @@ cSampleManager::_GetPedCommentSlot(uint32 nComment) return -1; } -bool +bool8 cSampleManager::LoadPedComment(uint32 nComment) { ASSERT( nComment < TOTAL_AUDIO_SAMPLES ); if ( CTimer::GetIsCodePaused() ) - return false; + return FALSE; // no talking peds during cutsenes or the game end if ( MusicManager.IsInitialised() ) @@ -1362,7 +1321,7 @@ cSampleManager::LoadPedComment(uint32 nComment) { case MUSICMODE_CUTSCENE: { - return false; + return FALSE; break; } @@ -1377,17 +1336,17 @@ cSampleManager::LoadPedComment(uint32 nComment) int size = op_read(fpSampleDataHandle, (opus_int16 *)(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] + PED_BLOCKSIZE * nCurrentPedSlot + samplesRead), samplesSize, NULL); if (size <= 0) { - return false; + return FALSE; } samplesRead += size * 2; samplesSize -= size; } #else if ( fseek(fpSampleDataHandle, m_aSamples[nComment].nOffset, SEEK_SET) != 0 ) - return false; + return FALSE; if ( fread((void *)(nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE*nCurrentPedSlot), 1, m_aSamples[nComment].nSize, fpSampleDataHandle) != m_aSamples[nComment].nSize ) - return false; + return FALSE; #endif nPedSlotSfx[nCurrentPedSlot] = nComment; @@ -1395,7 +1354,7 @@ cSampleManager::LoadPedComment(uint32 nComment) if ( ++nCurrentPedSlot >= MAX_PEDSFX ) nCurrentPedSlot = 0; - return true; + return TRUE; } int32 @@ -1438,13 +1397,13 @@ cSampleManager::GetSampleLength(uint32 nSample) return m_aSamples[nSample].nSize / sizeof(uint16); } -bool cSampleManager::UpdateReverb(void) +bool8 cSampleManager::UpdateReverb(void) { if ( !usingEAX && !_usingEFX ) - return false; + return FALSE; if ( AudioManager.GetFrameCounter() & 15 ) - return false; + return FALSE; float fRatio = 0.0f; @@ -1462,10 +1421,10 @@ bool cSampleManager::UpdateReverb(void) #undef CALCULATE_RATIO #undef MIN_DIST - fRatio = clamp(fRatio, 0.0f, 0.6f); + fRatio = Clamp(fRatio, 0.0f, 0.6f); if ( fRatio == _fPrevEaxRatioDestination ) - return false; + return FALSE; #ifdef JUICY_OAL if ( usingEAX3 || _usingEFX ) @@ -1502,13 +1461,13 @@ bool cSampleManager::UpdateReverb(void) _fPrevEaxRatioDestination = fRatio; - return true; + return TRUE; } void -cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag) +cSampleManager::SetChannelReverbFlag(uint32 nChannel, bool8 nReverbFlag) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); if ( usingEAX || _usingEFX ) { @@ -1516,7 +1475,7 @@ cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag) { alAuxiliaryEffectSloti(ALEffectSlot, AL_EFFECTSLOT_EFFECT, ALEffect); - if ( nReverbFlag != 0 ) + if ( nReverbFlag != FALSE ) aChannel[nChannel].SetReverbMix(ALEffectSlot, _fEffectsLevel); else aChannel[nChannel].SetReverbMix(ALEffectSlot, 0.0f); @@ -1524,24 +1483,24 @@ cSampleManager::SetChannelReverbFlag(uint32 nChannel, uint8 nReverbFlag) } } -bool +bool8 cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); uintptr addr; if ( nSfx < SAMPLEBANK_MAX ) { if ( !IsSampleBankLoaded(nBank) ) - return false; + return FALSE; addr = nSampleBankMemoryStartAddress[nBank] + m_aSamples[nSfx].nOffset - m_aSamples[BankStartOffset[nBank]].nOffset; } else { if ( !IsPedCommentLoaded(nSfx) ) - return false; + return FALSE; int32 slot = _GetPedCommentSlot(nSfx); addr = (nSampleBankMemoryStartAddress[SFX_BANK_PED_COMMENTS] + PED_BLOCKSIZE * slot); @@ -1559,17 +1518,16 @@ cSampleManager::InitialiseChannel(uint32 nChannel, uint32 nSfx, uint8 nBank) aChannel[nChannel].SetSampleData ((void*)addr, m_aSamples[nSfx].nSize, m_aSamples[nSfx].nFrequency); aChannel[nChannel].SetLoopPoints (0, -1); aChannel[nChannel].SetPitch (1.0f); - return true; + return TRUE; } - return false; + return FALSE; } void cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume) { - ASSERT( nChannel != CHANNEL2D ); - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < MAXCHANNELS ); uint32 vol = nVolume; if ( vol > MAX_VOLUME ) vol = MAX_VOLUME; @@ -1590,8 +1548,7 @@ cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume) void cSampleManager::SetChannel3DPosition(uint32 nChannel, float fX, float fY, float fZ) { - ASSERT( nChannel != CHANNEL2D ); - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < MAXCHANNELS ); aChannel[nChannel].SetPosition(-fX, fY, fZ); } @@ -1599,18 +1556,17 @@ cSampleManager::SetChannel3DPosition(uint32 nChannel, float fX, float fY, float void cSampleManager::SetChannel3DDistances(uint32 nChannel, float fMax, float fMin) { - ASSERT( nChannel != CHANNEL2D ); - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < MAXCHANNELS ); aChannel[nChannel].SetDistances(fMax, fMin); } void cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume) { - ASSERT( nChannel == CHANNEL2D ); - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel >= MAXCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); - if ( nChannel == CHANNEL2D ) + if ( nChannel == CHANNEL_POLICE_RADIO ) { uint32 vol = nVolume; if ( vol > MAX_VOLUME ) vol = MAX_VOLUME; @@ -1632,10 +1588,10 @@ cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume) void cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan) { - ASSERT(nChannel == CHANNEL2D); - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel >= MAXCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); - if ( nChannel == CHANNEL2D ) + if ( nChannel == CHANNEL_POLICE_RADIO ) { aChannel[nChannel].SetPan(nPan); } @@ -1644,7 +1600,7 @@ cSampleManager::SetChannelPan(uint32 nChannel, uint32 nPan) void cSampleManager::SetChannelFrequency(uint32 nChannel, uint32 nFreq) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); aChannel[nChannel].SetCurrentFreq(nFreq); } @@ -1652,7 +1608,7 @@ cSampleManager::SetChannelFrequency(uint32 nChannel, uint32 nFreq) void cSampleManager::SetChannelLoopPoints(uint32 nChannel, uint32 nLoopStart, int32 nLoopEnd) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); aChannel[nChannel].SetLoopPoints(nLoopStart / (DIGITALBITS / 8), nLoopEnd / (DIGITALBITS / 8)); } @@ -1660,15 +1616,15 @@ cSampleManager::SetChannelLoopPoints(uint32 nChannel, uint32 nLoopStart, int32 n void cSampleManager::SetChannelLoopCount(uint32 nChannel, uint32 nLoopCount) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); aChannel[nChannel].SetLoopCount(nLoopCount); } -bool +bool8 cSampleManager::GetChannelUsedFlag(uint32 nChannel) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); return aChannel[nChannel].IsUsed(); } @@ -1676,7 +1632,7 @@ cSampleManager::GetChannelUsedFlag(uint32 nChannel) void cSampleManager::StartChannel(uint32 nChannel) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); aChannel[nChannel].Start(); } @@ -1684,50 +1640,42 @@ cSampleManager::StartChannel(uint32 nChannel) void cSampleManager::StopChannel(uint32 nChannel) { - ASSERT( nChannel < MAXCHANNELS+MAX2DCHANNELS ); + ASSERT( nChannel < NUM_CHANNELS ); aChannel[nChannel].Stop(); } void cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream) -{ - char filename[MAX_PATH]; - +{ ASSERT( nStream < MAX_STREAMS ); if ( nFile < TOTAL_STREAMED_SOUNDS ) { - if ( aStream[nStream] ) - { - delete aStream[nStream]; - aStream[nStream] = NULL; - } - - strcpy(filename, StreamedNameTable[nFile]); - - CStream *stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); - ASSERT(stream != NULL); - - aStream[nStream] = stream; + CStream *stream = aStream[nStream]; + + stream->Close(); +#ifdef PS2_AUDIO_PATHS + if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000)) +#endif + stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); if ( !stream->Setup() ) { - delete stream; - aStream[nStream] = NULL; + stream->Close(); } } } void -cSampleManager::PauseStream(uint8 nPauseFlag, uint8 nStream) +cSampleManager::PauseStream(bool8 nPauseFlag, uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); CStream *stream = aStream[nStream]; - if ( stream ) + if ( stream->IsOpened() ) { - stream->SetPause(nPauseFlag != 0); + stream->SetPause(nPauseFlag != FALSE); } } @@ -1738,179 +1686,165 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream) CStream *stream = aStream[nStream]; - if ( stream ) + if ( stream->IsOpened() ) { - if ( stream->IsOpened() ) - { - stream->Start(); - } + stream->Start(); } } -bool +bool8 cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream) { + int i = 0; uint32 position = nPos; - char filename[256]; + char filename[MAX_PATH]; - ASSERT( nStream < MAX_STREAMS ); - - if ( nFile < TOTAL_STREAMED_SOUNDS ) + if ( nFile >= TOTAL_STREAMED_SOUNDS ) + return FALSE; + + aStream[nStream]->Close(); + + if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER ) { - if ( aStream[nStream] ) + do { - delete aStream[nStream]; - aStream[nStream] = NULL; - } - - if ( nFile == STREAMED_SOUND_RADIO_MP3_PLAYER ) - { - uint32 i = 0; - do { - if(i != 0 || _bIsMp3Active) { - if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0; + // Just switched to MP3 player + if ( !_bIsMp3Active && i == 0 ) + { + if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] ) + position = 0; + tMP3Entry *e = _pMP3List; - _CurMP3Pos = 0; + // Try to continue from previous song, if already started + if(!_GetMP3PosFromStreamPos(&position, &e) && !e) { + nFile = 0; - tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index); + CStream *stream = aStream[nStream]; +#ifdef PS2_AUDIO_PATHS + if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000)) +#endif + stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); + if ( stream->Setup() ) { + stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1); + nStreamLoopedFlag[nStream] = TRUE; + if (position != 0) + stream->SetPosMS(position); - if(mp3) { - mp3 = _pMP3List; - if(mp3 == NULL) { - _bIsMp3Active = false; - nFile = 0; - strcat(filename, StreamedNameTable[nFile]); + stream->Start(); - CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); - ASSERT(stream != NULL); - - aStream[nStream] = stream; - - if (stream->Setup()) { - stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1); - nStreamLoopedFlag[nStream] = true; - if (position != 0) - stream->SetPosMS(position); - - stream->Start(); - - return true; - } else { - delete stream; - aStream[nStream] = NULL; - } - - return false; - } + return TRUE; + } else { + stream->Close(); } + return FALSE; - if (mp3->pLinkPath != NULL) - aStream[nStream] = new CStream(mp3->pLinkPath, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); + } else { + + if (e->pLinkPath != NULL) + aStream[nStream]->Open(e->pLinkPath, IsThisTrackAt16KHz(nFile) ? 16000 : 32000); else { strcpy(filename, _mp3DirectoryPath); - strcat(filename, mp3->aFilename); + strcat(filename, e->aFilename); - aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); + aStream[nStream]->Open(filename); } if (aStream[nStream]->Setup()) { + if (position != 0) + aStream[nStream]->SetPosMS(position); + aStream[nStream]->Start(); - return true; + _bIsMp3Active = TRUE; + return TRUE; } else { - delete aStream[nStream]; - aStream[nStream] = NULL; + aStream[nStream]->Close(); } - - _bIsMp3Active = false; - continue; + // fall through, start playing from another song } - if ( nPos > nStreamLength[STREAMED_SOUND_RADIO_MP3_PLAYER] ) - position = 0; - - tMP3Entry *e; - if ( !_GetMP3PosFromStreamPos(&position, &e) ) + } else { + if(++_CurMP3Index >= nNumMP3s) _CurMP3Index = 0; + + _CurMP3Pos = 0; + + tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index); + if ( !mp3 ) { - if ( e == NULL ) + mp3 = _pMP3List; + if ( !_pMP3List ) { nFile = 0; - strcat(filename, StreamedNameTable[nFile]); - CStream* stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); - ASSERT(stream != NULL); + _bIsMp3Active = 0; - aStream[nStream] = stream; + CStream *stream = aStream[nStream]; +#ifdef PS2_AUDIO_PATHS + if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000)) +#endif + stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); if (stream->Setup()) { stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1); - nStreamLoopedFlag[nStream] = true; + nStreamLoopedFlag[nStream] = TRUE; if (position != 0) stream->SetPosMS(position); stream->Start(); - return true; + return TRUE; } else { - delete stream; - aStream[nStream] = NULL; + stream->Close(); } - - return false; + return FALSE; } } - - if (e->pLinkPath != NULL) - aStream[nStream] = new CStream(e->pLinkPath, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); + if (mp3->pLinkPath != NULL) + aStream[nStream]->Open(mp3->pLinkPath, IsThisTrackAt16KHz(nFile) ? 16000 : 32000); else { strcpy(filename, _mp3DirectoryPath); - strcat(filename, e->aFilename); + strcat(filename, mp3->aFilename); - aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream]); + aStream[nStream]->Open(filename, IsThisTrackAt16KHz(nFile) ? 16000 : 32000); } if (aStream[nStream]->Setup()) { - if (position != 0) - aStream[nStream]->SetPosMS(position); - aStream[nStream]->Start(); - - _bIsMp3Active = true; - return true; +#ifdef FIX_BUGS + _bIsMp3Active = TRUE; +#endif + return TRUE; } else { - delete aStream[nStream]; - aStream[nStream] = NULL; + aStream[nStream]->Close(); } - - _bIsMp3Active = false; - } while(++i < nNumMP3s); - - position = 0; - nFile = 0; - } - - strcpy(filename, StreamedNameTable[nFile]); - - CStream *stream = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); - ASSERT(stream != NULL); - - aStream[nStream] = stream; - - if ( stream->Setup() ) { - stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1); - nStreamLoopedFlag[nStream] = true; - if (position != 0) - stream->SetPosMS(position); - - stream->Start(); - - return true; - } else { - delete stream; - aStream[nStream] = NULL; + } + _bIsMp3Active = 0; } + while ( ++i < nNumMP3s ); + position = 0; + nFile = 0; } + strcpy(filename, StreamedNameTable[nFile]); - return false; + CStream *stream = aStream[nStream]; + +#ifdef PS2_AUDIO_PATHS + if(!stream->Open(PS2StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000)) +#endif + stream->Open(StreamedNameTable[nFile], IsThisTrackAt16KHz(nFile) ? 16000 : 32000); + + if ( stream->Setup() ) { + stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1); + nStreamLoopedFlag[nStream] = TRUE; + if (position != 0) + stream->SetPosMS(position); + + stream->Start(); + + return TRUE; + } else { + stream->Close(); + } + return FALSE; } void @@ -1920,14 +1854,10 @@ cSampleManager::StopStreamedFile(uint8 nStream) CStream *stream = aStream[nStream]; - if ( stream ) - { - delete stream; - aStream[nStream] = NULL; + stream->Close(); - if ( nStream == 0 ) - _bIsMp3Active = false; - } + if ( nStream == 0 ) + _bIsMp3Active = FALSE; } int32 @@ -1937,7 +1867,7 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream) CStream *stream = aStream[nStream]; - if ( stream ) + if ( stream->IsOpened() ) { if ( _bIsMp3Active ) { @@ -1960,7 +1890,7 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream) } void -cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffectFlag, uint8 nStream) +cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, bool8 nEffectFlag, uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); @@ -1980,7 +1910,7 @@ cSampleManager::SetStreamedVolumeAndPan(uint8 nVolume, uint8 nPan, uint8 nEffect CStream *stream = aStream[nStream]; - if ( stream ) + if ( stream->IsOpened() ) { if ( nEffectFlag ) { if ( nStream == 1 || nStream == 2 ) @@ -2003,20 +1933,20 @@ cSampleManager::GetStreamedFileLength(uint8 nStream) return nStreamLength[nStream]; } -bool +bool8 cSampleManager::IsStreamPlaying(uint8 nStream) { ASSERT( nStream < MAX_STREAMS ); CStream *stream = aStream[nStream]; - if ( stream ) + if ( stream->IsOpened() ) { if ( stream->IsPlaying() ) - return true; + return TRUE; } - return false; + return FALSE; } void @@ -2026,25 +1956,25 @@ cSampleManager::Service(void) { CStream *stream = aStream[i]; - if ( stream ) + if ( stream->IsOpened() ) stream->Update(); } int refCount = CChannel::channelsThatNeedService; - for ( int32 i = 0; refCount && i < MAXCHANNELS+MAX2DCHANNELS; i++ ) + for ( int32 i = 0; refCount && i < NUM_CHANNELS; i++ ) { if ( aChannel[i].Update() ) refCount--; } } -bool +bool8 cSampleManager::InitialiseSampleBanks(void) { int32 nBank = SFX_BANK_0; fpSampleDescHandle = fcaseopen(SampleBankDescFilename, "rb"); if ( fpSampleDescHandle == NULL ) - return false; + return FALSE; #ifndef OPUS_SFX fpSampleDataHandle = fcaseopen(SampleBankDataFilename, "rb"); if ( fpSampleDataHandle == NULL ) @@ -2052,7 +1982,7 @@ cSampleManager::InitialiseSampleBanks(void) fclose(fpSampleDescHandle); fpSampleDescHandle = NULL; - return false; + return FALSE; } fseek(fpSampleDataHandle, 0, SEEK_END); @@ -2095,11 +2025,11 @@ cSampleManager::InitialiseSampleBanks(void) nSampleBankSize[SFX_BANK_0] = nSampleBankDiscStartOffset[SFX_BANK_PED_COMMENTS] - nSampleBankDiscStartOffset[SFX_BANK_0]; nSampleBankSize[SFX_BANK_PED_COMMENTS] = _nSampleDataEndOffset - nSampleBankDiscStartOffset[SFX_BANK_PED_COMMENTS]; - return true; + return TRUE; } void -cSampleManager::SetStreamedFileLoopFlag(uint8 nLoopFlag, uint8 nChannel) +cSampleManager::SetStreamedFileLoopFlag(bool8 nLoopFlag, uint8 nChannel) { nStreamLoopedFlag[nChannel] = nLoopFlag; } diff --git a/src/audio/soundlist.h b/src/audio/soundlist.h index e86b13ee..c6dbb634 100644 --- a/src/audio/soundlist.h +++ b/src/audio/soundlist.h @@ -54,8 +54,8 @@ enum eSound SOUND_49, SOUND_WEAPON_BAT_ATTACK, SOUND_WEAPON_KNIFE_ATTACK, - SOUND_WEAPON_CHAINSAW_ATTACK, SOUND_WEAPON_CHAINSAW_IDLE, + SOUND_WEAPON_CHAINSAW_ATTACK, SOUND_WEAPON_CHAINSAW_MADECONTACT, SOUND_WEAPON_SHOT_FIRED, SOUND_WEAPON_RELOAD, @@ -116,8 +116,8 @@ enum eSound SOUND_PED_MIAMIVICE_EXITING_CAR, SOUND_PED_COP_HELIPILOTPHRASE, SOUND_PED_PULLOUTWEAPON, - SOUND_PED_HELI_PLAYER_FOUND = 114, - SOUND_PED_VCPA_PLAYER_FOUND = 115, + SOUND_PED_HELI_PLAYER_FOUND, + SOUND_PED_VCPA_PLAYER_FOUND, SOUND_PED_ON_FIRE, SOUND_PED_AIMING, SOUND_PED_HANDS_UP, @@ -128,15 +128,15 @@ enum eSound SOUND_PED_CAR_JACKED, SOUND_PED_ROBBED, SOUND_PED_ACCIDENTREACTION1, - SOUND_PED_UNK_126, + SOUND_PED_INNOCENT, SOUND_PED_PLAYER_AFTERSEX, SOUND_PED_PLAYER_BEFORESEX, - SOUND_PED_COP_UNK_129, // also used for medics + SOUND_PED_COP_TARGETING, // also used for medics SOUND_PED_COP_MANYCOPSAROUND, // also used for medics SOUND_PED_GUNAIMEDAT2, SOUND_PED_COP_ALONE, // also used for medics SOUND_PED_GUNAIMEDAT3, - SOUND_PED_COP_REACTION, + SOUND_PED_COP_ASK_FOR_ID, SOUND_PED_COP_LITTLECOPSAROUND, // also used for medics SOUND_PED_PLAYER_FARFROMCOPS, // also used for medics SOUND_PED_TAXI_WAIT, @@ -151,12 +151,12 @@ enum eSound SOUND_PED_ANNOYED_DRIVER, SOUND_PED_147, SOUND_PED_SOLICIT, - SOUND_PED_149, + SOUND_PED_JEER, SOUND_PED_150, SOUND_PED_EXTINGUISHING_FIRE, SOUND_PED_WAIT_DOUBLEBACK, - SOUND_153, - SOUND_PED_CHAT_SEXY, + SOUND_PED_CHAT_SEXY_FEMALE, + SOUND_PED_CHAT_SEXY_MALE, SOUND_PED_CHAT_EVENT, SOUND_PED_PED_COLLISION, SOUND_PED_CHAT, diff --git a/src/buildings/Building.cpp b/src/buildings/Building.cpp index 8035cf25..92c787e5 100644 --- a/src/buildings/Building.cpp +++ b/src/buildings/Building.cpp @@ -4,8 +4,8 @@ #include "Streaming.h" #include "Pools.h" -void *CBuilding::operator new(size_t sz) { return CPools::GetBuildingPool()->New(); } -void CBuilding::operator delete(void *p, size_t sz) { CPools::GetBuildingPool()->Delete((CBuilding*)p); } +void *CBuilding::operator new(size_t sz) throw() { return CPools::GetBuildingPool()->New(); } +void CBuilding::operator delete(void *p, size_t sz) throw() { CPools::GetBuildingPool()->Delete((CBuilding*)p); } void CBuilding::ReplaceWithNewModel(int32 id) diff --git a/src/buildings/Building.h b/src/buildings/Building.h index 2c2dfb1f..f8ddfa46 100644 --- a/src/buildings/Building.h +++ b/src/buildings/Building.h @@ -9,8 +9,8 @@ public: m_type = ENTITY_TYPE_BUILDING; bUsesCollision = true; } - static void *operator new(size_t); - static void operator delete(void*, size_t); + static void *operator new(size_t) throw(); + static void operator delete(void*, size_t) throw(); void ReplaceWithNewModel(int32 id); diff --git a/src/buildings/Treadable.cpp b/src/buildings/Treadable.cpp index 00abbe13..d84603a6 100644 --- a/src/buildings/Treadable.cpp +++ b/src/buildings/Treadable.cpp @@ -4,5 +4,5 @@ #include "Treadable.h" #include "Pools.h" -void *CTreadable::operator new(size_t sz) { return CPools::GetTreadablePool()->New(); } -void CTreadable::operator delete(void *p, size_t sz) { CPools::GetTreadablePool()->Delete((CTreadable*)p); } +void *CTreadable::operator new(size_t sz) throw() { return CPools::GetTreadablePool()->New(); } +void CTreadable::operator delete(void *p, size_t sz) throw() { CPools::GetTreadablePool()->Delete((CTreadable*)p); } diff --git a/src/buildings/Treadable.h b/src/buildings/Treadable.h index c3ab755e..6a183c63 100644 --- a/src/buildings/Treadable.h +++ b/src/buildings/Treadable.h @@ -5,8 +5,8 @@ class CTreadable : public CBuilding { public: - static void *operator new(size_t); - static void operator delete(void*, size_t); + static void *operator new(size_t) throw(); + static void operator delete(void*, size_t) throw(); bool GetIsATreadable(void) { return true; } }; diff --git a/src/collision/ColModel.cpp b/src/collision/ColModel.cpp index 49847dbd..2224a804 100644 --- a/src/collision/ColModel.cpp +++ b/src/collision/ColModel.cpp @@ -27,7 +27,7 @@ CColModel::~CColModel(void) } void* -CColModel::operator new(size_t) +CColModel::operator new(size_t) throw() { CColModel* node = CPools::GetColModelPool()->New(); assert(node); @@ -35,7 +35,7 @@ CColModel::operator new(size_t) } void -CColModel::operator delete(void *p, size_t) +CColModel::operator delete(void *p, size_t) throw() { CPools::GetColModelPool()->Delete((CColModel*)p); } diff --git a/src/collision/ColModel.h b/src/collision/ColModel.h index cd5ae651..64f05f76 100644 --- a/src/collision/ColModel.h +++ b/src/collision/ColModel.h @@ -33,7 +33,7 @@ struct CColModel void SetLinkPtr(CLink*); void GetTrianglePoint(CVector &v, int i) const; - void *operator new(size_t); - void operator delete(void *p, size_t); + void *operator new(size_t) throw(); + void operator delete(void *p, size_t) throw(); CColModel& operator=(const CColModel& other); }; \ No newline at end of file diff --git a/src/collision/ColStore.cpp b/src/collision/ColStore.cpp index f1e695fe..c74bf5ba 100644 --- a/src/collision/ColStore.cpp +++ b/src/collision/ColStore.cpp @@ -186,7 +186,7 @@ CColStore::LoadCollision(const CVector2D &pos) }else{ for (int j = 0; j < MAX_CLEANUP; j++) { CPhysical* pEntity = nil; - cleanup_entity_struct* pCleanup = &CTheScripts::MissionCleanUp.m_sEntities[i]; + cleanup_entity_struct* pCleanup = &CTheScripts::MissionCleanUp.m_sEntities[j]; if (pCleanup->type == CLEANUP_CAR) { pEntity = CPools::GetVehiclePool()->GetAt(pCleanup->id); if (!pEntity || pEntity->GetStatus() == STATUS_WRECKED) diff --git a/src/collision/Collision.cpp b/src/collision/Collision.cpp index 50c22e32..0ffcd09a 100644 --- a/src/collision/Collision.cpp +++ b/src/collision/Collision.cpp @@ -144,11 +144,10 @@ CCollision::SortOutCollisionAfterLoad(void) void CCollision::LoadCollisionScreen(eLevelName level) { - static Const char *levelNames[4] = { + static Const char *levelNames[] = { "", "IND_ZON", "COM_ZON", - "SUB_ZON" }; // Why twice? diff --git a/src/control/AutoPilot.cpp b/src/control/AutoPilot.cpp index d3de6ac2..d7c17a68 100644 --- a/src/control/AutoPilot.cpp +++ b/src/control/AutoPilot.cpp @@ -5,6 +5,7 @@ #include "CarCtrl.h" #include "Curves.h" #include "PathFind.h" +#include "SaveBuf.h" void CAutoPilot::ModifySpeed(float speed) { @@ -49,86 +50,87 @@ void CAutoPilot::RemoveOnePathNode() #ifdef COMPATIBLE_SAVES void CAutoPilot::Save(uint8*& buf) { - WriteSaveBuf(buf, m_nCurrentRouteNode); - WriteSaveBuf(buf, m_nNextRouteNode); - WriteSaveBuf(buf, m_nPrevRouteNode); - WriteSaveBuf(buf, m_nTimeEnteredCurve); - WriteSaveBuf(buf, m_nTimeToSpendOnCurrentCurve); - WriteSaveBuf(buf, m_nCurrentPathNodeInfo); - WriteSaveBuf(buf, m_nNextPathNodeInfo); - WriteSaveBuf(buf, m_nPreviousPathNodeInfo); - WriteSaveBuf(buf, m_nAntiReverseTimer); - WriteSaveBuf(buf, m_nTimeToStartMission); - WriteSaveBuf(buf, m_nPreviousDirection); - WriteSaveBuf(buf, m_nCurrentDirection); - WriteSaveBuf(buf, m_nNextDirection); - WriteSaveBuf(buf, m_nCurrentLane); - WriteSaveBuf(buf, m_nNextLane); - WriteSaveBuf(buf, m_nDrivingStyle); - WriteSaveBuf(buf, m_nCarMission); - WriteSaveBuf(buf, m_nTempAction); - WriteSaveBuf(buf, m_nTimeTempAction); - WriteSaveBuf(buf, m_fMaxTrafficSpeed); - WriteSaveBuf(buf, m_nCruiseSpeed); - WriteSaveBuf(buf, m_nCruiseSpeedMultiplierType); - SkipSaveBuf(buf, 2); - WriteSaveBuf(buf, m_fCruiseSpeedMultiplier); + WriteSaveBuf(buf, m_nCurrentRouteNode); + WriteSaveBuf(buf, m_nNextRouteNode); + WriteSaveBuf(buf, m_nPrevRouteNode); + WriteSaveBuf(buf, m_nTimeEnteredCurve); + WriteSaveBuf(buf, m_nTimeToSpendOnCurrentCurve); + WriteSaveBuf(buf, m_nCurrentPathNodeInfo); + WriteSaveBuf(buf, m_nNextPathNodeInfo); + WriteSaveBuf(buf, m_nPreviousPathNodeInfo); + WriteSaveBuf(buf, m_nAntiReverseTimer); + WriteSaveBuf(buf, m_nTimeToStartMission); + WriteSaveBuf(buf, m_nPreviousDirection); + WriteSaveBuf(buf, m_nCurrentDirection); + WriteSaveBuf(buf, m_nNextDirection); + WriteSaveBuf(buf, m_nCurrentLane); + WriteSaveBuf(buf, m_nNextLane); + WriteSaveBuf(buf, m_nDrivingStyle); + WriteSaveBuf(buf, m_nCarMission); + WriteSaveBuf(buf, m_nTempAction); + WriteSaveBuf(buf, m_nTimeTempAction); + WriteSaveBuf(buf, m_fMaxTrafficSpeed); + WriteSaveBuf(buf, m_nCruiseSpeed); + WriteSaveBuf(buf, m_nCruiseSpeedMultiplierType); + ZeroSaveBuf(buf, 2); + WriteSaveBuf(buf, m_fCruiseSpeedMultiplier); uint8 flags = 0; if (m_bSlowedDownBecauseOfCars) flags |= BIT(0); if (m_bSlowedDownBecauseOfPeds) flags |= BIT(1); if (m_bStayInCurrentLevel) flags |= BIT(2); if (m_bStayInFastLane) flags |= BIT(3); if (m_bIgnorePathfinding) flags |= BIT(4); - WriteSaveBuf(buf, flags); - WriteSaveBuf(buf, m_nSwitchDistance); - SkipSaveBuf(buf, 2); - WriteSaveBuf(buf, m_vecDestinationCoors.x); - WriteSaveBuf(buf, m_vecDestinationCoors.y); - WriteSaveBuf(buf, m_vecDestinationCoors.z); - SkipSaveBuf(buf, 32); - WriteSaveBuf(buf, m_nPathFindNodesCount); - SkipSaveBuf(buf, 6); + WriteSaveBuf(buf, flags); + WriteSaveBuf(buf, m_nSwitchDistance); + ZeroSaveBuf(buf, 2); + WriteSaveBuf(buf, m_vecDestinationCoors.x); + WriteSaveBuf(buf, m_vecDestinationCoors.y); + WriteSaveBuf(buf, m_vecDestinationCoors.z); + ZeroSaveBuf(buf, 32); + WriteSaveBuf(buf, m_nPathFindNodesCount); + ZeroSaveBuf(buf, 6); } void CAutoPilot::Load(uint8*& buf) { - m_nCurrentRouteNode = ReadSaveBuf(buf); - m_nNextRouteNode = ReadSaveBuf(buf); - m_nPrevRouteNode = ReadSaveBuf(buf); - m_nTimeEnteredCurve = ReadSaveBuf(buf); - m_nTimeToSpendOnCurrentCurve = ReadSaveBuf(buf); - m_nCurrentPathNodeInfo = ReadSaveBuf(buf); - m_nNextPathNodeInfo = ReadSaveBuf(buf); - m_nPreviousPathNodeInfo = ReadSaveBuf(buf); - m_nAntiReverseTimer = ReadSaveBuf(buf); - m_nTimeToStartMission = ReadSaveBuf(buf); - m_nPreviousDirection = ReadSaveBuf(buf); - m_nCurrentDirection = ReadSaveBuf(buf); - m_nNextDirection = ReadSaveBuf(buf); - m_nCurrentLane = ReadSaveBuf(buf); - m_nNextLane = ReadSaveBuf(buf); - m_nDrivingStyle = ReadSaveBuf(buf); - m_nCarMission = ReadSaveBuf(buf); - m_nTempAction = ReadSaveBuf(buf); - m_nTimeTempAction = ReadSaveBuf(buf); - m_fMaxTrafficSpeed = ReadSaveBuf(buf); - m_nCruiseSpeed = ReadSaveBuf(buf); - m_nCruiseSpeedMultiplierType = ReadSaveBuf(buf); + ReadSaveBuf(&m_nCurrentRouteNode, buf); + ReadSaveBuf(&m_nNextRouteNode, buf); + ReadSaveBuf(&m_nPrevRouteNode, buf); + ReadSaveBuf(&m_nTimeEnteredCurve, buf); + ReadSaveBuf(&m_nTimeToSpendOnCurrentCurve, buf); + ReadSaveBuf(&m_nCurrentPathNodeInfo, buf); + ReadSaveBuf(&m_nNextPathNodeInfo, buf); + ReadSaveBuf(&m_nPreviousPathNodeInfo, buf); + ReadSaveBuf(&m_nAntiReverseTimer, buf); + ReadSaveBuf(&m_nTimeToStartMission, buf); + ReadSaveBuf(&m_nPreviousDirection, buf); + ReadSaveBuf(&m_nCurrentDirection, buf); + ReadSaveBuf(&m_nNextDirection, buf); + ReadSaveBuf(&m_nCurrentLane, buf); + ReadSaveBuf(&m_nNextLane, buf); + ReadSaveBuf(&m_nDrivingStyle, buf); + ReadSaveBuf(&m_nCarMission, buf); + ReadSaveBuf(&m_nTempAction, buf); + ReadSaveBuf(&m_nTimeTempAction, buf); + ReadSaveBuf(&m_fMaxTrafficSpeed, buf); + ReadSaveBuf(&m_nCruiseSpeed, buf); + ReadSaveBuf(&m_nCruiseSpeedMultiplierType, buf); SkipSaveBuf(buf, 2); - m_fCruiseSpeedMultiplier = ReadSaveBuf(buf); - uint8 flags = ReadSaveBuf(buf); + ReadSaveBuf(&m_fCruiseSpeedMultiplier, buf); + uint8 flags; + ReadSaveBuf(&flags, buf); m_bSlowedDownBecauseOfCars = !!(flags & BIT(0)); m_bSlowedDownBecauseOfPeds = !!(flags & BIT(1)); m_bStayInCurrentLevel = !!(flags & BIT(2)); m_bStayInFastLane = !!(flags & BIT(3)); m_bIgnorePathfinding = !!(flags & BIT(4)); - m_nSwitchDistance = ReadSaveBuf(buf); + ReadSaveBuf(&m_nSwitchDistance, buf); SkipSaveBuf(buf, 2); - m_vecDestinationCoors.x = ReadSaveBuf(buf); - m_vecDestinationCoors.y = ReadSaveBuf(buf); - m_vecDestinationCoors.z = ReadSaveBuf(buf); + ReadSaveBuf(&m_vecDestinationCoors.x, buf); + ReadSaveBuf(&m_vecDestinationCoors.y, buf); + ReadSaveBuf(&m_vecDestinationCoors.z, buf); SkipSaveBuf(buf, 32); - m_nPathFindNodesCount = ReadSaveBuf(buf); + ReadSaveBuf(&m_nPathFindNodesCount, buf); SkipSaveBuf(buf, 6); } #endif \ No newline at end of file diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp index d05d9827..5e4e62ee 100644 --- a/src/control/CarCtrl.cpp +++ b/src/control/CarCtrl.cpp @@ -1581,8 +1581,8 @@ void CCarCtrl::WeaveForOtherCar(CEntity* pOtherEntity, CVehicle* pVehicle, float forward.Normalise(); float forwardAngle = CGeneral::GetATanOfXY(forward.x, forward.y); float angleDiff = angleBetweenVehicles - forwardAngle; - float lenProjection = ABS(pOtherCar->GetColModel()->boundingBox.max.y * sin(angleDiff)); - float widthProjection = ABS(pOtherCar->GetColModel()->boundingBox.max.x * cos(angleDiff)); + float lenProjection = ABS(pOtherCar->GetColModel()->boundingBox.max.y * Sin(angleDiff)); + float widthProjection = ABS(pOtherCar->GetColModel()->boundingBox.max.x * Cos(angleDiff)); float lengthToEvade = (2 * (lenProjection + widthProjection) + WIDTH_COEF_TO_WEAVE_SAFELY * 2 * pVehicle->GetColModel()->boundingBox.max.x) / distance; float diffToLeftAngle = LimitRadianAngle(angleBetweenVehicles - *pAngleToWeaveLeft); diffToLeftAngle = ABS(diffToLeftAngle); @@ -2575,7 +2575,7 @@ void CCarCtrl::SteerAIBoatWithPhysicsHeadingForTarget(CVehicle* pVehicle, float float angleToTarget = CGeneral::GetATanOfXY(targetX - pVehicle->GetPosition().x, targetY - pVehicle->GetPosition().y); float angleForward = CGeneral::GetATanOfXY(forward.x, forward.y); float steerAngle = LimitRadianAngle(angleToTarget - angleForward); - steerAngle = clamp(steerAngle, -DEFAULT_MAX_STEER_ANGLE, DEFAULT_MAX_STEER_ANGLE); + steerAngle = Clamp(steerAngle, -DEFAULT_MAX_STEER_ANGLE, DEFAULT_MAX_STEER_ANGLE); #ifdef FIX_BUGS float speedTarget = pVehicle->AutoPilot.GetCruiseSpeed(); #else @@ -2735,7 +2735,7 @@ void CCarCtrl::SteerAIPlaneTowardsTargetCoors(CAutomobile* pPlane) { CVector2D vecToTarget = pPlane->AutoPilot.m_vecDestinationCoors - pPlane->GetPosition(); float fForwardZ = (pPlane->AutoPilot.m_vecDestinationCoors.z - pPlane->GetPosition().z) / vecToTarget.Magnitude(); - fForwardZ = clamp(fForwardZ, -0.3f, 0.3f); + fForwardZ = Clamp(fForwardZ, -0.3f, 0.3f); float angle = CGeneral::GetATanOfXY(vecToTarget.x, vecToTarget.y); while (angle > TWOPI) angle -= TWOPI; @@ -3238,7 +3238,7 @@ bool CCarCtrl::GenerateOneEmergencyServicesCar(uint32 mi, CVector vecPos) attempts += 1; } if (attempts >= 5) - return nil; + return false; CAutomobile* pVehicle = new CAutomobile(mi, RANDOM_VEHICLE); pVehicle->AutoPilot.m_vecDestinationCoors = vecPos; pVehicle->SetPosition(spawnPos); diff --git a/src/control/GameLogic.cpp b/src/control/GameLogic.cpp index 33c40c91..11df7b43 100644 --- a/src/control/GameLogic.cpp +++ b/src/control/GameLogic.cpp @@ -30,6 +30,7 @@ #include "Automobile.h" #include "MBlur.h" #include "screendroplets.h" +#include "SaveBuf.h" uint8 CGameLogic::ActivePlayers; uint8 CGameLogic::ShortCutState; @@ -157,7 +158,7 @@ CGameLogic::Update() #endif CMessages::ClearMessages(); CCarCtrl::ClearInterestingVehicleList(); - CWorld::ClearExcitingStuffFromArea(pPlayerInfo.GetPos(), 4000.0f, 1); + CWorld::ClearExcitingStuffFromArea(pPlayerInfo.GetPos(), 4000.0f, true); CRestart::FindClosestHospitalRestartPoint(pPlayerInfo.GetPos(), &vecRestartPos, &fRestartFloat); CRestart::OverrideHospitalLevel = LEVEL_GENERIC; CRestart::OverridePoliceStationLevel = LEVEL_GENERIC; @@ -190,7 +191,7 @@ CGameLogic::Update() } - if (!CTheScripts::IsPlayerOnAMission() && pPlayerInfo.m_nBustedAudioStatus == 0) { + if (!CTheScripts::IsPlayerOnAMission() && pPlayerInfo.m_nBustedAudioStatus == BUSTEDAUDIO_NONE) { if (CGeneral::GetRandomNumberInRange(0, 4) == 0) pPlayerInfo.m_nBustedAudioStatus = BUSTEDAUDIO_DONE; else { @@ -266,7 +267,7 @@ CGameLogic::Update() #endif CMessages::ClearMessages(); CCarCtrl::ClearInterestingVehicleList(); - CWorld::ClearExcitingStuffFromArea(pPlayerInfo.GetPos(), 4000.0f, 1); + CWorld::ClearExcitingStuffFromArea(pPlayerInfo.GetPos(), 4000.0f, true); CRestart::FindClosestPoliceRestartPoint(pPlayerInfo.GetPos(), &vecRestartPos, &fRestartFloat); CRestart::OverrideHospitalLevel = LEVEL_GENERIC; CRestart::OverridePoliceStationLevel = LEVEL_GENERIC; @@ -321,7 +322,7 @@ CGameLogic::Update() #endif CMessages::ClearMessages(); CCarCtrl::ClearInterestingVehicleList(); - CWorld::ClearExcitingStuffFromArea(pPlayerInfo.GetPos(), 4000.0f, 1); + CWorld::ClearExcitingStuffFromArea(pPlayerInfo.GetPos(), 4000.0f, true); CRestart::FindClosestPoliceRestartPoint(pPlayerInfo.GetPos(), &vecRestartPos, &fRestartFloat); CRestart::OverridePoliceStationLevel = LEVEL_GENERIC; CRestart::OverrideHospitalLevel = LEVEL_GENERIC; @@ -378,10 +379,10 @@ CGameLogic::RestorePlayerStuffDuringResurrection(CPlayerPed *pPlayerPed, CVector pPlayerPed->m_fRotationDest = pPlayerPed->m_fRotationCur; pPlayerPed->SetHeading(pPlayerPed->m_fRotationCur); CTheScripts::ClearSpaceForMissionEntity(pos, pPlayerPed); - CWorld::ClearExcitingStuffFromArea(pos, 4000.0, 1); + CWorld::ClearExcitingStuffFromArea(pos, 4000.0f, true); pPlayerPed->RestoreHeadingRate(); CGame::currArea = AREA_MAIN_MAP; - CStreaming::RemoveBuildingsNotInArea(0); + CStreaming::RemoveBuildingsNotInArea(AREA_MAIN_MAP); TheCamera.SetCameraDirectlyInFrontForFollowPed_CamOnAString(); TheCamera.Restore(); CReferences::RemoveReferencesToPlayer(); @@ -488,7 +489,7 @@ CGameLogic::UpdateShortCut() pShortCutTaxi->AutoPilot.m_nTempAction = TEMPACT_GOFORWARD; pShortCutTaxi->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 2500; TheCamera.SetFadeColour(0, 0, 0); - TheCamera.Fade(2.5f, 0); + TheCamera.Fade(2.5f, FADE_OUT); ShortCutState = SHORTCUT_TRANSITION; ShortCutTimer = CTimer::GetTimeInMilliseconds() + 3000; CMessages::AddBigMessage(TheText.Get("TAXI"), 4500, 1); @@ -508,7 +509,7 @@ CGameLogic::UpdateShortCut() pShortCutTaxi->SetMoveSpeed(pShortCutTaxi->GetForward() * 0.4f); ShortCutTimer = CTimer::GetTimeInMilliseconds() + 1500; TheCamera.SetFadeColour(0, 0, 0); - TheCamera.Fade(1.0f, 1); + TheCamera.Fade(1.0f, FADE_IN); ShortCutState = SHORTCUT_ARRIVING; CTimer::Resume(); } @@ -611,12 +612,12 @@ void CGameLogic::Load(uint8* buf, uint32 size) { INITSAVEBUF - NumAfterDeathStartPoints = ReadSaveBuf(buf); + ReadSaveBuf(&NumAfterDeathStartPoints, buf); for (int i = 0; i < NUM_SHORTCUT_START_POINTS; i++) { - AfterDeathStartPoints[i].x = ReadSaveBuf(buf); - AfterDeathStartPoints[i].y = ReadSaveBuf(buf); - AfterDeathStartPoints[i].z = ReadSaveBuf(buf); - AfterDeathStartPointOrientation[i] = ReadSaveBuf(buf); + ReadSaveBuf(&AfterDeathStartPoints[i].x, buf); + ReadSaveBuf(&AfterDeathStartPoints[i].y, buf); + ReadSaveBuf(&AfterDeathStartPoints[i].z, buf); + ReadSaveBuf(&AfterDeathStartPointOrientation[i], buf); } VALIDATESAVEBUF(size) } diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp index 7cf58d03..d7394902 100644 --- a/src/control/Garages.cpp +++ b/src/control/Garages.cpp @@ -24,13 +24,7 @@ #include "Wanted.h" #include "World.h" #include "VarConsole.h" - -#define CRUSHER_GARAGE_X1 (1135.5f) -#define CRUSHER_GARAGE_Y1 (57.0f) -#define CRUSHER_GARAGE_Z1 (-1.0f) -#define CRUSHER_GARAGE_X2 (1149.5f) -#define CRUSHER_GARAGE_Y2 (63.7f) -#define CRUSHER_GARAGE_Z2 (3.5f) +#include "SaveBuf.h" #define ROTATED_DOOR_OPEN_SPEED (0.015f) #define ROTATED_DOOR_CLOSE_SPEED (0.02f) @@ -158,7 +152,7 @@ void CGarages::Init(void) } hGarages = DMAudio.CreateEntity(AUDIOTYPE_GARAGE, (void*)1); if (hGarages >= 0) - DMAudio.SetEntityStatus(hGarages, true); + DMAudio.SetEntityStatus(hGarages, TRUE); } void CGarages::Shutdown(void) @@ -1843,11 +1837,12 @@ void CStoredCar::StoreCar(CVehicle* pVehicle) m_nRadioStation = pVehicle->m_nRadioStation; m_nVariationA = pVehicle->m_aExtras[0]; m_nVariationB = pVehicle->m_aExtras[1]; - m_bBulletproof = pVehicle->bBulletProof; - m_bFireproof = pVehicle->bFireProof; - m_bExplosionproof = pVehicle->bExplosionProof; - m_bCollisionproof = pVehicle->bCollisionProof; - m_bMeleeproof = pVehicle->bMeleeProof; + m_nFlags = 0; + if (pVehicle->bBulletProof) m_nFlags |= FLAG_BULLETPROOF; + if (pVehicle->bFireProof) m_nFlags |= FLAG_FIREPROOF; + if (pVehicle->bExplosionProof) m_nFlags |= FLAG_EXPLOSIONPROOF; + if (pVehicle->bCollisionProof) m_nFlags |= FLAG_COLLISIONPROOF; + if (pVehicle->bMeleeProof) m_nFlags |= FLAG_MELEEPROOF; if (pVehicle->IsCar() || pVehicle->IsBike()) m_nCarBombType = ((CAutomobile*)pVehicle)->m_bombType; // NB: cast to CAutomobile is original behaviour } @@ -1896,11 +1891,11 @@ CVehicle* CStoredCar::RestoreCar() } pVehicle->bHasBeenOwnedByPlayer = true; pVehicle->m_nDoorLock = CARLOCK_UNLOCKED; - pVehicle->bBulletProof = m_bBulletproof; - pVehicle->bFireProof = m_bFireproof; - pVehicle->bExplosionProof = m_bExplosionproof; - pVehicle->bCollisionProof = m_bCollisionproof; - pVehicle->bMeleeProof = m_bMeleeproof; + if (m_nFlags & FLAG_BULLETPROOF) pVehicle->bBulletProof = true; + if (m_nFlags & FLAG_FIREPROOF) pVehicle->bFireProof = true; + if (m_nFlags & FLAG_EXPLOSIONPROOF) pVehicle->bExplosionProof = true; + if (m_nFlags & FLAG_COLLISIONPROOF) pVehicle->bCollisionProof = true; + if (m_nFlags & FLAG_MELEEPROOF) pVehicle->bMeleeProof = true; return pVehicle; } @@ -2279,8 +2274,53 @@ void CGarages::Save(uint8 * buf, uint32 * size) WriteSaveBuf(buf, aCarsInSafeHouses[j][i]); } } - for (int i = 0; i < NUM_GARAGES; i++) + for (int i = 0; i < NUM_GARAGES; i++) { +#ifdef COMPATIBLE_SAVES + WriteSaveBuf(buf, aGarages[i].m_eGarageType); + WriteSaveBuf(buf, aGarages[i].m_eGarageState); + WriteSaveBuf(buf, aGarages[i].m_nMaxStoredCars); + WriteSaveBuf(buf, aGarages[i].field_2); + WriteSaveBuf(buf, aGarages[i].m_bClosingWithoutTargetCar); + WriteSaveBuf(buf, aGarages[i].m_bDeactivated); + WriteSaveBuf(buf, aGarages[i].m_bResprayHappened); + ZeroSaveBuf(buf, 1); + WriteSaveBuf(buf, aGarages[i].m_nTargetModelIndex); + ZeroSaveBuf(buf, 4 + 4); + WriteSaveBuf(buf, aGarages[i].m_bDoor1PoolIndex); + WriteSaveBuf(buf, aGarages[i].m_bDoor2PoolIndex); + WriteSaveBuf(buf, aGarages[i].m_bDoor1IsDummy); + WriteSaveBuf(buf, aGarages[i].m_bDoor2IsDummy); + WriteSaveBuf(buf, aGarages[i].m_bRecreateDoorOnNextRefresh); + WriteSaveBuf(buf, aGarages[i].m_bRotatedDoor); + WriteSaveBuf(buf, aGarages[i].m_bCameraFollowsPlayer); + ZeroSaveBuf(buf, 1); + WriteSaveBuf(buf, aGarages[i].m_vecCorner1); + WriteSaveBuf(buf, aGarages[i].m_fInfZ); + WriteSaveBuf(buf, aGarages[i].m_vDir1); + WriteSaveBuf(buf, aGarages[i].m_vDir2); + WriteSaveBuf(buf, aGarages[i].m_fSupZ); + WriteSaveBuf(buf, aGarages[i].m_fDir1Len); + WriteSaveBuf(buf, aGarages[i].m_fDir2Len); + WriteSaveBuf(buf, aGarages[i].m_fInfX); + WriteSaveBuf(buf, aGarages[i].m_fSupX); + WriteSaveBuf(buf, aGarages[i].m_fInfY); + WriteSaveBuf(buf, aGarages[i].m_fSupY); + WriteSaveBuf(buf, aGarages[i].m_fDoorPos); + WriteSaveBuf(buf, aGarages[i].m_fDoorHeight); + WriteSaveBuf(buf, aGarages[i].m_fDoor1X); + WriteSaveBuf(buf, aGarages[i].m_fDoor1Y); + WriteSaveBuf(buf, aGarages[i].m_fDoor2X); + WriteSaveBuf(buf, aGarages[i].m_fDoor2Y); + WriteSaveBuf(buf, aGarages[i].m_fDoor1Z); + WriteSaveBuf(buf, aGarages[i].m_fDoor2Z); + WriteSaveBuf(buf, aGarages[i].m_nTimeToStartAction); + WriteSaveBuf(buf, aGarages[i].m_bCollectedCarsState); + ZeroSaveBuf(buf, 3 + 4); + ZeroSaveBuf(buf, sizeof(aGarages[i].m_sStoredCar)); +#else WriteSaveBuf(buf, aGarages[i]); +#endif + } //VALIDATESAVEBUF(*size); } @@ -2289,11 +2329,7 @@ const CStoredCar &CStoredCar::operator=(const CStoredCar & other) m_nModelIndex = other.m_nModelIndex; m_vecPos = other.m_vecPos; m_vecAngle = other.m_vecAngle; - m_bBulletproof = other.m_bBulletproof; - m_bFireproof = other.m_bFireproof; - m_bExplosionproof = other.m_bExplosionproof; - m_bCollisionproof = other.m_bCollisionproof; - m_bMeleeproof = other.m_bMeleeproof; + m_nFlags = other.m_nFlags; m_nPrimaryColor = other.m_nPrimaryColor; m_nSecondaryColor = other.m_nSecondaryColor; m_nRadioStation = other.m_nRadioStation; @@ -2306,25 +2342,72 @@ const CStoredCar &CStoredCar::operator=(const CStoredCar & other) void CGarages::Load(uint8* buf, uint32 size) { //INITSAVEBUF - assert(size = 7876); + assert(size == 7876); //assert(size == (6 * sizeof(uint32) + TOTAL_COLLECTCARS_GARAGES * sizeof(*CarTypesCollected) + sizeof(uint32) + TOTAL_HIDEOUT_GARAGES * NUM_GARAGE_STORED_CARS * sizeof(CStoredCar) + NUM_GARAGES * sizeof(CGarage))); CloseHideOutGaragesBeforeSave(); - NumGarages = ReadSaveBuf(buf); - BombsAreFree = ReadSaveBuf(buf); - RespraysAreFree = ReadSaveBuf(buf); - CarsCollected = ReadSaveBuf(buf); - BankVansCollected = ReadSaveBuf(buf); - PoliceCarsCollected = ReadSaveBuf(buf); + ReadSaveBuf(&NumGarages, buf); + int32 tempInt; + ReadSaveBuf(&tempInt, buf); + BombsAreFree = tempInt ? true : false; + ReadSaveBuf(&tempInt, buf); + RespraysAreFree = tempInt ? true : false; + ReadSaveBuf(&CarsCollected, buf); + ReadSaveBuf(&BankVansCollected, buf); + ReadSaveBuf(&PoliceCarsCollected, buf); for (int i = 0; i < TOTAL_COLLECTCARS_GARAGES; i++) - CarTypesCollected[i] = ReadSaveBuf(buf); - LastTimeHelpMessage = ReadSaveBuf(buf); + ReadSaveBuf(&CarTypesCollected[i], buf); + ReadSaveBuf(&LastTimeHelpMessage, buf); for (int i = 0; i < NUM_GARAGE_STORED_CARS; i++) { for (int j = 0; j < TOTAL_HIDEOUT_GARAGES; j++) { - aCarsInSafeHouses[j][i] = ReadSaveBuf(buf); + ReadSaveBuf(&aCarsInSafeHouses[j][i], buf); } } for (int i = 0; i < NUM_GARAGES; i++) { - aGarages[i] = ReadSaveBuf(buf); +#ifdef COMPATIBLE_SAVES + ReadSaveBuf(&aGarages[i].m_eGarageType, buf); + ReadSaveBuf(&aGarages[i].m_eGarageState, buf); + ReadSaveBuf(&aGarages[i].m_nMaxStoredCars, buf); + ReadSaveBuf(&aGarages[i].field_2, buf); + ReadSaveBuf(&aGarages[i].m_bClosingWithoutTargetCar, buf); + ReadSaveBuf(&aGarages[i].m_bDeactivated, buf); + ReadSaveBuf(&aGarages[i].m_bResprayHappened, buf); + SkipSaveBuf(buf, 1); + ReadSaveBuf(&aGarages[i].m_nTargetModelIndex, buf); + SkipSaveBuf(buf, 4 + 4); + ReadSaveBuf(&aGarages[i].m_bDoor1PoolIndex, buf); + ReadSaveBuf(&aGarages[i].m_bDoor2PoolIndex, buf); + ReadSaveBuf(&aGarages[i].m_bDoor1IsDummy, buf); + ReadSaveBuf(&aGarages[i].m_bDoor2IsDummy, buf); + ReadSaveBuf(&aGarages[i].m_bRecreateDoorOnNextRefresh, buf); + ReadSaveBuf(&aGarages[i].m_bRotatedDoor, buf); + ReadSaveBuf(&aGarages[i].m_bCameraFollowsPlayer, buf); + SkipSaveBuf(buf, 1); + ReadSaveBuf(&aGarages[i].m_vecCorner1, buf); + ReadSaveBuf(&aGarages[i].m_fInfZ, buf); + ReadSaveBuf(&aGarages[i].m_vDir1, buf); + ReadSaveBuf(&aGarages[i].m_vDir2, buf); + ReadSaveBuf(&aGarages[i].m_fSupZ, buf); + ReadSaveBuf(&aGarages[i].m_fDir1Len, buf); + ReadSaveBuf(&aGarages[i].m_fDir2Len, buf); + ReadSaveBuf(&aGarages[i].m_fInfX, buf); + ReadSaveBuf(&aGarages[i].m_fSupX, buf); + ReadSaveBuf(&aGarages[i].m_fInfY, buf); + ReadSaveBuf(&aGarages[i].m_fSupY, buf); + ReadSaveBuf(&aGarages[i].m_fDoorPos, buf); + ReadSaveBuf(&aGarages[i].m_fDoorHeight, buf); + ReadSaveBuf(&aGarages[i].m_fDoor1X, buf); + ReadSaveBuf(&aGarages[i].m_fDoor1Y, buf); + ReadSaveBuf(&aGarages[i].m_fDoor2X, buf); + ReadSaveBuf(&aGarages[i].m_fDoor2Y, buf); + ReadSaveBuf(&aGarages[i].m_fDoor1Z, buf); + ReadSaveBuf(&aGarages[i].m_fDoor2Z, buf); + ReadSaveBuf(&aGarages[i].m_nTimeToStartAction, buf); + ReadSaveBuf(&aGarages[i].m_bCollectedCarsState, buf); + SkipSaveBuf(buf, 3 + 4); + SkipSaveBuf(buf, sizeof(aGarages[i].m_sStoredCar)); +#else + ReadSaveBuf(&aGarages[i], buf); +#endif aGarages[i].m_pDoor1 = nil; aGarages[i].m_pDoor2 = nil; aGarages[i].m_pTarget = nil; diff --git a/src/control/Garages.h b/src/control/Garages.h index 07d5f712..358d404d 100644 --- a/src/control/Garages.h +++ b/src/control/Garages.h @@ -63,14 +63,17 @@ enum class CStoredCar { + enum { + FLAG_BULLETPROOF = 0x1, + FLAG_FIREPROOF = 0x2, + FLAG_EXPLOSIONPROOF = 0x4, + FLAG_COLLISIONPROOF = 0x8, + FLAG_MELEEPROOF = 0x10, + }; int32 m_nModelIndex; CVector m_vecPos; CVector m_vecAngle; - int32 m_bBulletproof : 1; - int32 m_bFireproof : 1; - int32 m_bExplosionproof : 1; - int32 m_bCollisionproof : 1; - int32 m_bMeleeproof : 1; + int32 m_nFlags; int8 m_nPrimaryColor; int8 m_nSecondaryColor; int8 m_nRadioStation; @@ -100,7 +103,7 @@ public: bool m_bClosingWithoutTargetCar; bool m_bDeactivated; bool m_bResprayHappened; - int m_nTargetModelIndex; + int32 m_nTargetModelIndex; CEntity *m_pDoor1; CEntity *m_pDoor2; uint8 m_bDoor1PoolIndex; diff --git a/src/control/OnscreenTimer.cpp b/src/control/OnscreenTimer.cpp index 6544972b..ca8d0d6f 100644 --- a/src/control/OnscreenTimer.cpp +++ b/src/control/OnscreenTimer.cpp @@ -9,14 +9,15 @@ #include "OnscreenTimer.h" #include "Camera.h" -void COnscreenTimer::Init() { +void +COnscreenTimer::Init() +{ m_bDisabled = false; for(uint32 i = 0; i < NUMONSCREENCOUNTERS; i++) { m_sCounters[i].m_nCounterOffset = 0; - for(uint32 j = 0; j < ARRAY_SIZE(m_sCounters[0].m_aCounterText); j++) { - m_sCounters[i].m_aCounterText[j] = 0; - } + for(uint32 j = 0; j < ARRAY_SIZE(m_sCounters[0].m_aCounterText); j++) + m_sCounters[i].m_aCounterText[j] = '\0'; m_sCounters[i].m_nType = COUNTER_DISPLAY_NUMBER; m_sCounters[i].m_bCounterProcessed = false; @@ -24,24 +25,25 @@ void COnscreenTimer::Init() { for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) { m_sClocks[i].m_nClockOffset = 0; - for(uint32 j = 0; j < ARRAY_SIZE(m_sClocks[0].m_aClockText); j++) { - m_sClocks[i].m_aClockText[j] = 0; - } + for(uint32 j = 0; j < ARRAY_SIZE(m_sClocks[0].m_aClockText); j++) + m_sClocks[i].m_aClockText[j] = '\0'; m_sClocks[i].m_bClockProcessed = false; m_sClocks[i].m_bClockGoingDown = true; } } -void COnscreenTimer::Process() { - if(!CReplay::IsPlayingBack() && !m_bDisabled) { - for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) { +void +COnscreenTimer::Process() +{ + if(!CReplay::IsPlayingBack() && !m_bDisabled) + for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) m_sClocks[i].Process(); - } - } } -void COnscreenTimer::ProcessForDisplay() { +void +COnscreenTimer::ProcessForDisplay() +{ if(CHud::m_Wants_To_Draw_Hud) { m_bProcessed = false; for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) { @@ -63,67 +65,67 @@ void COnscreenTimer::ProcessForDisplay() { } } -void COnscreenTimer::ClearCounter(uint32 offset) { +void +COnscreenTimer::ClearCounter(uint32 offset) +{ for(uint32 i = 0; i < NUMONSCREENCOUNTERS; i++) { if(offset == m_sCounters[i].m_nCounterOffset) { m_sCounters[i].m_nCounterOffset = 0; - m_sCounters[i].m_aCounterText[0] = 0; + m_sCounters[i].m_aCounterText[0] = '\0'; m_sCounters[i].m_nType = COUNTER_DISPLAY_NUMBER; - m_sCounters[i].m_bCounterProcessed = 0; + m_sCounters[i].m_bCounterProcessed = false; } } } -void COnscreenTimer::ClearClock(uint32 offset) { - for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) { +void +COnscreenTimer::ClearClock(uint32 offset) +{ + for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) if(offset == m_sClocks[i].m_nClockOffset) { m_sClocks[i].m_nClockOffset = 0; - m_sClocks[i].m_aClockText[0] = 0; - m_sClocks[i].m_bClockProcessed = 0; + m_sClocks[i].m_aClockText[0] = '\0'; + m_sClocks[i].m_bClockProcessed = false; m_sClocks[i].m_bClockGoingDown = true; } - } } -void COnscreenTimer::AddCounter(uint32 offset, uint16 type, char* text, uint16 pos) { - +void +COnscreenTimer::AddCounter(uint32 offset, uint16 type, char* text, uint16 pos) +{ if (m_sCounters[pos].m_aCounterText[0] != '\0') return; m_sCounters[pos].m_nCounterOffset = offset; - if(text) { + if(text) strncpy(m_sCounters[pos].m_aCounterText, text, ARRAY_SIZE(m_sCounters[0].m_aCounterText)); - } else { - m_sCounters[pos].m_aCounterText[0] = 0; - } + else + m_sCounters[pos].m_aCounterText[0] = '\0'; m_sCounters[pos].m_nType = type; } -void COnscreenTimer::AddClock(uint32 offset, char* text, bool bGoingDown) { - - // dead code in here - uint32 i; - for(i = 0; i < NUMONSCREENCLOCKS; i++) { +void +COnscreenTimer::AddClock(uint32 offset, char* text, bool bGoingDown) +{ + for(uint32 i = 0; i < NUMONSCREENCLOCKS; i++) { if(m_sClocks[i].m_nClockOffset == 0) { + m_sClocks[i].m_nClockOffset = offset; + m_sClocks[i].m_bClockGoingDown = bGoingDown; + if(text) + strncpy(m_sClocks[i].m_aClockText, text, ARRAY_SIZE(m_sClocks[0].m_aClockText)); + else + m_sClocks[i].m_aClockText[0] = '\0'; break; } - return; - } - - m_sClocks[i].m_nClockOffset = offset; - m_sClocks[i].m_bClockGoingDown = bGoingDown; - if(text) { - strncpy(m_sClocks[i].m_aClockText, text, ARRAY_SIZE(m_sClocks[0].m_aClockText)); - } else { - m_sClocks[i].m_aClockText[0] = 0; } } -void COnscreenTimerEntry::Process() { - if(m_nClockOffset == 0) { +void +COnscreenTimerEntry::Process() +{ + if(m_nClockOffset == 0) return; - } int32* timerPtr = CTheScripts::GetPointerToScriptVariable(m_nClockOffset); int32 oldTime = BSWAP32(*timerPtr); @@ -147,13 +149,17 @@ void COnscreenTimerEntry::Process() { *timerPtr = oldTime + int32(CTimer::GetTimeStepInMilliseconds()); } -void COnscreenTimerEntry::ProcessForDisplayClock() { +void +COnscreenTimerEntry::ProcessForDisplayClock() +{ uint32 time = BSWAP32(*CTheScripts::GetPointerToScriptVariable(m_nClockOffset)); sprintf(m_aClockBuffer, "%02d:%02d", time / 1000 / 60 % 100, time / 1000 % 60); } -void COnscreenCounterEntry::ProcessForDisplayCounter() { +void +COnscreenCounterEntry::ProcessForDisplayCounter() +{ uint32 counter = BSWAP32(*CTheScripts::GetPointerToScriptVariable(m_nCounterOffset)); sprintf(m_aCounterBuffer, "%d", counter); } diff --git a/src/control/PathFind.cpp b/src/control/PathFind.cpp index bf72199d..80d40b45 100644 --- a/src/control/PathFind.cpp +++ b/src/control/PathFind.cpp @@ -200,8 +200,8 @@ CPedPath::AddBlockade(CEntity *pEntity, CPedPathNode(*pathNodes)[40], CVector *p const float fBoundMaxY = boundingBox.max.y + 0.3f; const float fBoundMinY = boundingBox.min.y - 0.3f; const float fBoundMaxX = boundingBox.max.x + 0.3f; - const float fDistanceX = pPosition->x - pEntity->m_matrix.GetPosition().x; - const float fDistanceY = pPosition->y - pEntity->m_matrix.GetPosition().y; + const float fDistanceX = pPosition->x - pEntity->GetMatrix().GetPosition().x; + const float fDistanceY = pPosition->y - pEntity->GetMatrix().GetPosition().y; const float fBoundRadius = pEntity->GetBoundRadius(); CVector vecBoundCentre; pEntity->GetBoundCentre(vecBoundCentre); @@ -215,8 +215,8 @@ CPedPath::AddBlockade(CEntity *pEntity, CPedPathNode(*pathNodes)[40], CVector *p if (!pathNodes[x][y].bBlockade) { const float pointY = y * 0.7f + fDistanceY; CVector2D point(pointX, pointY); - if (fBoundMaxX > Abs(DotProduct2D(point, pEntity->m_matrix.GetRight()))) { - float fDotProduct = DotProduct2D(point, pEntity->m_matrix.GetForward()); + if (fBoundMaxX > Abs(DotProduct2D(point, pEntity->GetMatrix().GetRight()))) { + float fDotProduct = DotProduct2D(point, pEntity->GetMatrix().GetForward()); if (fBoundMaxY > fDotProduct && fBoundMinY < fDotProduct) pathNodes[x][y].bBlockade = true; } diff --git a/src/control/Phones.cpp b/src/control/Phones.cpp index 9b50a7ec..41f9d766 100644 --- a/src/control/Phones.cpp +++ b/src/control/Phones.cpp @@ -13,10 +13,17 @@ #include "RpAnimBlend.h" #include "AnimBlendAssociation.h" #include "soundlist.h" +#include "SaveBuf.h" #ifdef FIX_BUGS #include "Replay.h" #endif +#ifdef COMPATIBLE_SAVES +#define PHONEINFO_SAVE_SIZE 0xA30 +#else +#define PHONEINFO_SAVE_SIZE sizeof(CPhoneInfo) +#endif + CPhoneInfo gPhoneInfo; bool CPhoneInfo::bDisplayingPhoneMessage; // is phone picked up @@ -197,14 +204,27 @@ void CPhoneInfo::Load(uint8 *buf, uint32 size) { INITSAVEBUF - m_nMax = ReadSaveBuf(buf); - m_nScriptPhonesMax = ReadSaveBuf(buf); + ReadSaveBuf(&m_nMax, buf); + ReadSaveBuf(&m_nScriptPhonesMax, buf); for (int i = 0; i < NUMPHONES; i++) { - m_aPhones[i] = ReadSaveBuf(buf); +#ifdef COMPATIBLE_SAVES + ReadSaveBuf(&m_aPhones[i].m_vecPos, buf); + SkipSaveBuf(buf, 6 * 4); + ReadSaveBuf(&m_aPhones[i].m_repeatedMessagePickupStart, buf); + int32 tmp; + ReadSaveBuf(&tmp, buf); + // It's saved as building pool index in save file, convert it to true entity + m_aPhones[i].m_pEntity = tmp != 0 ? CPools::GetBuildingPool()->GetSlot(tmp - 1) : nil; + ReadSaveBuf(&m_aPhones[i].m_nState, buf); + ReadSaveBuf(&m_aPhones[i].m_visibleToCam, buf); + SkipSaveBuf(buf, 3); +#else + ReadSaveBuf(&m_aPhones[i], buf); // It's saved as building pool index in save file, convert it to true entity if (m_aPhones[i].m_pEntity) { m_aPhones[i].m_pEntity = CPools::GetBuildingPool()->GetSlot((uintptr)m_aPhones[i].m_pEntity - 1); } +#endif } VALIDATESAVEBUF(size) } @@ -298,17 +318,29 @@ CPhoneInfo::Initialise(void) void CPhoneInfo::Save(uint8 *buf, uint32 *size) { - *size = sizeof(CPhoneInfo); + *size = PHONEINFO_SAVE_SIZE; INITSAVEBUF WriteSaveBuf(buf, m_nMax); WriteSaveBuf(buf, m_nScriptPhonesMax); for(int phoneId = 0; phoneId < NUMPHONES; phoneId++) { +#ifdef COMPATIBLE_SAVES + WriteSaveBuf(buf, m_aPhones[phoneId].m_vecPos); + ZeroSaveBuf(buf, 6 * 4); + WriteSaveBuf(buf, m_aPhones[phoneId].m_repeatedMessagePickupStart); + // Convert entity pointer to building pool index while saving + int32 tmp = m_aPhones[phoneId].m_pEntity ? CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)m_aPhones[phoneId].m_pEntity) + 1 : 0; + WriteSaveBuf(buf, tmp); + WriteSaveBuf(buf, m_aPhones[phoneId].m_nState); + WriteSaveBuf(buf, m_aPhones[phoneId].m_visibleToCam); + ZeroSaveBuf(buf, 3); +#else CPhone* phone = WriteSaveBuf(buf, m_aPhones[phoneId]); // Convert entity pointer to building pool index while saving if (phone->m_pEntity) { phone->m_pEntity = (CEntity*) (CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert((CBuilding*)phone->m_pEntity) + 1); } +#endif } VALIDATESAVEBUF(*size) } diff --git a/src/control/Pickups.cpp b/src/control/Pickups.cpp index 7bc88321..ab3e0c7c 100644 --- a/src/control/Pickups.cpp +++ b/src/control/Pickups.cpp @@ -33,6 +33,13 @@ #include "Hud.h" #include "Messages.h" #include "Streaming.h" +#include "SaveBuf.h" + +#ifdef COMPATIBLE_SAVES +#define PICKUPS_SAVE_SIZE 0x4440 +#else +#define PICKUPS_SAVE_SIZE sizeof(aPickUps) +#endif CPickup CPickups::aPickUps[NUMPICKUPS]; int16 CPickups::NumMessages; @@ -1008,8 +1015,7 @@ CPickups::DoPickUpEffects(CEntity *entity) entity->bDoNotRender = CTheScripts::IsPlayerOnAMission() || CDarkel::FrenzyOnGoing() || !CGame::nastyGame; if (!entity->bDoNotRender) { - float s = Sin((float)((CTimer::GetTimeInMilliseconds() + (uintptr)entity) & 0x7FF) * DEGTORAD(360.0f / 0x800)); - float modifiedSin = 0.3f * (s + 1.0f); + float modifiedSin = 0.3f * (Sin((float)((CTimer::GetTimeInMilliseconds() + (uintptr)entity) & 0x7FF) * DEGTORAD(360.0f / 0x800)) + 1.0f); #ifdef FIX_BUGS int16 colorId = 0; @@ -1149,7 +1155,20 @@ CPickups::DoPickUpEffects(CEntity *entity) if (model == MI_MINIGUN || model == MI_MINIGUN2) scale = 1.2f; - entity->GetMatrix().SetRotateZOnlyScaled((float)(CTimer::GetTimeInMilliseconds() & 0x7FF) * DEGTORAD(360.0f / 0x800), scale); + float angle = (float)(CTimer::GetTimeInMilliseconds() & 0x7FF) * DEGTORAD(360.0f / 0x800); + float c = Cos(angle) * scale; + float s = Sin(angle) * scale; + + // we know from SA they were setting each field manually like this + entity->GetMatrix().rx = c; + entity->GetMatrix().ry = s; + entity->GetMatrix().rz = 0.0f; + entity->GetMatrix().fx = -s; + entity->GetMatrix().fy = c; + entity->GetMatrix().fz = 0.0f; + entity->GetMatrix().ux = 0.0f; + entity->GetMatrix().uy = 0.0f; + entity->GetMatrix().uz = scale; if (entity->GetModelIndex() == MI_MINIGUN2) { CMatrix matrix1; @@ -1429,7 +1448,32 @@ CPickups::Load(uint8 *buf, uint32 size) INITSAVEBUF for (int32 i = 0; i < NUMPICKUPS; i++) { - aPickUps[i] = ReadSaveBuf(buf); +#ifdef COMPATIBLE_SAVES + ReadSaveBuf(&aPickUps[i].m_vecPos, buf); + ReadSaveBuf(&aPickUps[i].m_fRevenue, buf); + int32 tmp_pObject; + ReadSaveBuf(&tmp_pObject, buf); + int32 tmp_pExtraObject; + ReadSaveBuf(&tmp_pExtraObject, buf); + ReadSaveBuf(&aPickUps[i].m_nQuantity, buf); + ReadSaveBuf(&aPickUps[i].m_nTimer, buf); + ReadSaveBuf(&aPickUps[i].m_nMoneySpeed, buf); + ReadSaveBuf(&aPickUps[i].m_eModelIndex, buf); + ReadSaveBuf(&aPickUps[i].m_nIndex, buf); + memcpy(aPickUps[i].m_sTextKey, buf, sizeof(aPickUps[i].m_sTextKey)); + SkipSaveBuf(buf, sizeof(aPickUps[i].m_sTextKey)); + ReadSaveBuf(&aPickUps[i].m_eType, buf); + ReadSaveBuf(&aPickUps[i].m_bRemoved, buf); + uint8 flags; + ReadSaveBuf(&flags, buf); + aPickUps[i].m_bWasAmmoCollected = !!(flags & BIT(0)); + aPickUps[i].m_bWasControlMessageShown = !!(flags & BIT(1)); + SkipSaveBuf(buf, 3); + + aPickUps[i].m_pObject = aPickUps[i].m_eType != PICKUP_NONE && tmp_pObject != 0 ? CPools::GetObjectPool()->GetSlot(tmp_pObject - 1) : nil; + aPickUps[i].m_pExtraObject = aPickUps[i].m_eType != PICKUP_NONE && tmp_pExtraObject != 0 ? CPools::GetObjectPool()->GetSlot(tmp_pExtraObject - 1) : nil; +#else + ReadSaveBuf(&aPickUps[i], buf); if (aPickUps[i].m_eType != PICKUP_NONE) { if (aPickUps[i].m_pObject != nil) @@ -1437,15 +1481,15 @@ INITSAVEBUF if (aPickUps[i].m_pExtraObject != nil) aPickUps[i].m_pExtraObject = CPools::GetObjectPool()->GetSlot((uintptr)aPickUps[i].m_pExtraObject - 1); } - +#endif } - CollectedPickUpIndex = ReadSaveBuf(buf); - ReadSaveBuf(buf); + ReadSaveBuf(&CollectedPickUpIndex, buf); + SkipSaveBuf(buf, 2); NumMessages = 0; for (uint16 i = 0; i < NUMCOLLECTEDPICKUPS; i++) - aPickUpsCollected[i] = ReadSaveBuf(buf); + ReadSaveBuf(&aPickUpsCollected[i], buf); VALIDATESAVEBUF(size) } @@ -1453,12 +1497,34 @@ VALIDATESAVEBUF(size) void CPickups::Save(uint8 *buf, uint32 *size) { - *size = sizeof(aPickUps); + *size = PICKUPS_SAVE_SIZE; *size += sizeof(uint16) + sizeof(uint16) + sizeof(aPickUpsCollected); INITSAVEBUF for (int32 i = 0; i < NUMPICKUPS; i++) { +#ifdef COMPATIBLE_SAVES + WriteSaveBuf(buf, aPickUps[i].m_vecPos); + WriteSaveBuf(buf, aPickUps[i].m_fRevenue); + int32 tmp = aPickUps[i].m_eType != PICKUP_NONE && aPickUps[i].m_pObject != nil ? CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(aPickUps[i].m_pObject) + 1 : 0; + WriteSaveBuf(buf, tmp); + tmp = aPickUps[i].m_eType != PICKUP_NONE && aPickUps[i].m_pExtraObject != nil ? CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(aPickUps[i].m_pExtraObject) + 1 : 0; + WriteSaveBuf(buf, tmp); + WriteSaveBuf(buf, aPickUps[i].m_nQuantity); + WriteSaveBuf(buf, aPickUps[i].m_nTimer); + WriteSaveBuf(buf, aPickUps[i].m_nMoneySpeed); + WriteSaveBuf(buf, aPickUps[i].m_eModelIndex); + WriteSaveBuf(buf, aPickUps[i].m_nIndex); + memcpy(buf, aPickUps[i].m_sTextKey, sizeof(aPickUps[i].m_sTextKey)); + SkipSaveBuf(buf, sizeof(aPickUps[i].m_sTextKey)); + WriteSaveBuf(buf, aPickUps[i].m_eType); + WriteSaveBuf(buf, aPickUps[i].m_bRemoved); + uint8 flags = 0; + if (aPickUps[i].m_bWasAmmoCollected) flags |= BIT(0); + if (aPickUps[i].m_bWasControlMessageShown) flags |= BIT(1); + WriteSaveBuf(buf, flags); + ZeroSaveBuf(buf, 3); +#else CPickup *buf_pickup = WriteSaveBuf(buf, aPickUps[i]); if (buf_pickup->m_eType != PICKUP_NONE) { if (buf_pickup->m_pObject != nil) @@ -1466,6 +1532,7 @@ INITSAVEBUF if (buf_pickup->m_pExtraObject != nil) buf_pickup->m_pExtraObject = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(buf_pickup->m_pExtraObject) + 1); } +#endif } WriteSaveBuf(buf, CollectedPickUpIndex); diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp index cd612d5d..71b28f7a 100644 --- a/src/control/Replay.cpp +++ b/src/control/Replay.cpp @@ -425,9 +425,9 @@ void CReplay::RecordParticle(tParticleType type, const CVector& vecPos, const CV pp->pos_x = 4.0f * vecPos.x; pp->pos_y = 4.0f * vecPos.y; pp->pos_z = 4.0f * vecPos.z; - pp->dir_x = 120.0f * clamp(vecDir.x, -1.0f, 1.0f); - pp->dir_y = 120.0f * clamp(vecDir.y, -1.0f, 1.0f); - pp->dir_z = 120.0f * clamp(vecDir.z, -1.0f, 1.0f); + pp->dir_x = 120.0f * Clamp(vecDir.x, -1.0f, 1.0f); + pp->dir_y = 120.0f * Clamp(vecDir.y, -1.0f, 1.0f); + pp->dir_z = 120.0f * Clamp(vecDir.z, -1.0f, 1.0f); pp->size = fSize; pp->r = color.red; pp->g = color.green; @@ -463,8 +463,8 @@ void CReplay::StorePedAnimation(CPed *ped, CStoredAnimationState *state) CAnimBlendAssociation* main = RpAnimBlendClumpGetMainAssociation((RpClump*)ped->m_rwObject, &second, &blend_amount); if (main){ state->animId = main->animId; - state->time = 255.0f / 4.0f * clamp(main->currentTime, 0.0f, 4.0f); - state->speed = 255.0f / 3.0f * clamp(main->speed, 0.0f, 3.0f); + state->time = 255.0f / 4.0f * Clamp(main->currentTime, 0.0f, 4.0f); + state->speed = 255.0f / 3.0f * Clamp(main->speed, 0.0f, 3.0f); state->groupId = main->groupId; }else{ state->animId = 3; @@ -474,9 +474,9 @@ void CReplay::StorePedAnimation(CPed *ped, CStoredAnimationState *state) } if (second) { state->secAnimId = second->animId; - state->secTime = 255.0f / 4.0f * clamp(second->currentTime, 0.0f, 4.0f); - state->secSpeed = 255.0f / 3.0f * clamp(second->speed, 0.0f, 3.0f); - state->blendAmount = 255.0f / 2.0f * clamp(blend_amount, 0.0f, 2.0f); + state->secTime = 255.0f / 4.0f * Clamp(second->currentTime, 0.0f, 4.0f); + state->secSpeed = 255.0f / 3.0f * Clamp(second->speed, 0.0f, 3.0f); + state->blendAmount = 255.0f / 2.0f * Clamp(blend_amount, 0.0f, 2.0f); state->secGroupId = second->groupId; }else{ state->secAnimId = 0; @@ -488,9 +488,9 @@ void CReplay::StorePedAnimation(CPed *ped, CStoredAnimationState *state) CAnimBlendAssociation* partial = RpAnimBlendClumpGetMainPartialAssociation((RpClump*)ped->m_rwObject); if (partial) { state->partAnimId = partial->animId; - state->partAnimTime = 255.0f / 4.0f * clamp(partial->currentTime, 0.0f, 4.0f); - state->partAnimSpeed = 255.0f / 3.0f * clamp(partial->speed, 0.0f, 3.0f); - state->partBlendAmount = 255.0f / 2.0f * clamp(partial->blendAmount, 0.0f, 2.0f); + state->partAnimTime = 255.0f / 4.0f * Clamp(partial->currentTime, 0.0f, 4.0f); + state->partAnimSpeed = 255.0f / 3.0f * Clamp(partial->speed, 0.0f, 3.0f); + state->partBlendAmount = 255.0f / 2.0f * Clamp(partial->blendAmount, 0.0f, 2.0f); state->partGroupId = partial->groupId; }else{ state->partAnimId = 0; @@ -507,10 +507,10 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState CAnimBlendAssociation* assoc = RpAnimBlendClumpGetMainAssociation_N((RpClump*)ped->m_rwObject, i); if (assoc){ state->aAnimId[i] = assoc->animId; - state->aCurTime[i] = 255.0f / 4.0f * clamp(assoc->currentTime, 0.0f, 4.0f); - state->aSpeed[i] = 255.0f / 3.0f * clamp(assoc->speed, 0.0f, 3.0f); - state->aBlendAmount[i] = 255.0f / 2.0f * clamp(assoc->blendAmount, 0.0f, 2.0f); - state->aBlendDelta[i] = 127.0f / 32.0f * clamp(assoc->blendDelta, -16.0f, 16.0f); + state->aCurTime[i] = 255.0f / 4.0f * Clamp(assoc->currentTime, 0.0f, 4.0f); + state->aSpeed[i] = 255.0f / 3.0f * Clamp(assoc->speed, 0.0f, 3.0f); + state->aBlendAmount[i] = 255.0f / 2.0f * Clamp(assoc->blendAmount, 0.0f, 2.0f); + state->aBlendDelta[i] = 127.0f / 32.0f * Clamp(assoc->blendDelta, -16.0f, 16.0f); state->aFlags[i] = assoc->flags; state->aGroupId[i] = assoc->groupId; if (assoc->callbackType == CAnimBlendAssociation::CB_FINISH || assoc->callbackType == CAnimBlendAssociation::CB_DELETE) { @@ -533,10 +533,10 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState CAnimBlendAssociation* assoc = RpAnimBlendClumpGetMainPartialAssociation_N((RpClump*)ped->m_rwObject, i); if (assoc) { state->aAnimId2[i] = assoc->animId; - state->aCurTime2[i] = 255.0f / 4.0f * clamp(assoc->currentTime, 0.0f, 4.0f); - state->aSpeed2[i] = 255.0f / 3.0f * clamp(assoc->speed, 0.0f, 3.0f); - state->aBlendAmount2[i] = 255.0f / 2.0f * clamp(assoc->blendAmount, 0.0f, 2.0f); - state->aBlendDelta2[i] = 127.0f / 16.0f * clamp(assoc->blendDelta, -16.0f, 16.0f); + state->aCurTime2[i] = 255.0f / 4.0f * Clamp(assoc->currentTime, 0.0f, 4.0f); + state->aSpeed2[i] = 255.0f / 3.0f * Clamp(assoc->speed, 0.0f, 3.0f); + state->aBlendAmount2[i] = 255.0f / 2.0f * Clamp(assoc->blendAmount, 0.0f, 2.0f); + state->aBlendDelta2[i] = 127.0f / 16.0f * Clamp(assoc->blendDelta, -16.0f, 16.0f); state->aFlags2[i] = assoc->flags; state->aGroupId2[i] = assoc->groupId; if (assoc->callbackType == CAnimBlendAssociation::CB_FINISH || assoc->callbackType == CAnimBlendAssociation::CB_DELETE) { @@ -1463,7 +1463,7 @@ void CReplay::RestoreStuffFromMem(void) ped->SetModelIndex(mi); ped->m_pVehicleAnim = nil; ped->m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, ped); - DMAudio.SetEntityStatus(ped->m_audioEntityId, true); + DMAudio.SetEntityStatus(ped->m_audioEntityId, TRUE); CPopulation::UpdatePedCount((ePedType)ped->m_nPedType, false); for (int j = 0; j < TOTAL_WEAPON_SLOTS; j++) { int mi1 = CWeaponInfo::GetWeaponInfo(ped->m_weapons[j].m_eWeaponType)->m_nModelId; @@ -1529,7 +1529,7 @@ void CReplay::RestoreStuffFromMem(void) car->SetDoorDamage(CAR_DOOR_RR, DOOR_REAR_RIGHT, true); } vehicle->m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, vehicle); - DMAudio.SetEntityStatus(vehicle->m_audioEntityId, true); + DMAudio.SetEntityStatus(vehicle->m_audioEntityId, TRUE); CCarCtrl::UpdateCarCount(vehicle, false); if ((mi == MI_AIRTRAIN || mi == MI_DEADDODO) && vehicle->m_rwObject){ CVehicleModelInfo* info = (CVehicleModelInfo*)CModelInfo::GetModelInfo(mi); diff --git a/src/control/Restart.cpp b/src/control/Restart.cpp index e1950a29..39c9a234 100644 --- a/src/control/Restart.cpp +++ b/src/control/Restart.cpp @@ -3,6 +3,7 @@ #include "Restart.h" #include "Zones.h" #include "PathFind.h" +#include "SaveBuf.h" uint8 CRestart::OverrideHospitalLevel; uint8 CRestart::OverridePoliceStationLevel; @@ -173,29 +174,28 @@ INITSAVEBUF CheckSaveHeader(buf, 'R','S','T','\0', size - SAVE_HEADER_SIZE); for (int i = 0; i < NUM_RESTART_POINTS; i++) { - HospitalRestartPoints[i] = ReadSaveBuf(buf); - HospitalRestartHeadings[i] = ReadSaveBuf(buf); + ReadSaveBuf(&HospitalRestartPoints[i], buf); + ReadSaveBuf(&HospitalRestartHeadings[i], buf); } for (int i = 0; i < NUM_RESTART_POINTS; i++) { - PoliceRestartPoints[i] = ReadSaveBuf(buf); - PoliceRestartHeadings[i] = ReadSaveBuf(buf); + ReadSaveBuf(&PoliceRestartPoints[i], buf); + ReadSaveBuf(&PoliceRestartHeadings[i], buf); } - NumberOfHospitalRestarts = ReadSaveBuf(buf); - NumberOfPoliceRestarts = ReadSaveBuf(buf); - bOverrideRestart = ReadSaveBuf(buf); + ReadSaveBuf(&NumberOfHospitalRestarts, buf); + ReadSaveBuf(&NumberOfPoliceRestarts, buf); + ReadSaveBuf(&bOverrideRestart, buf); // skip something unused - ReadSaveBuf(buf); - ReadSaveBuf(buf); + SkipSaveBuf(buf, 3); - OverridePosition = ReadSaveBuf(buf); - OverrideHeading = ReadSaveBuf(buf); - bFadeInAfterNextDeath = ReadSaveBuf(buf); - bFadeInAfterNextArrest = ReadSaveBuf(buf); - OverrideHospitalLevel = ReadSaveBuf(buf); - OverridePoliceStationLevel = ReadSaveBuf(buf); + ReadSaveBuf(&OverridePosition, buf); + ReadSaveBuf(&OverrideHeading, buf); + ReadSaveBuf(&bFadeInAfterNextDeath, buf); + ReadSaveBuf(&bFadeInAfterNextArrest, buf); + ReadSaveBuf(&OverrideHospitalLevel, buf); + ReadSaveBuf(&OverridePoliceStationLevel, buf); VALIDATESAVEBUF(size); } diff --git a/src/control/RoadBlocks.cpp b/src/control/RoadBlocks.cpp index 4f714e80..46eee71f 100644 --- a/src/control/RoadBlocks.cpp +++ b/src/control/RoadBlocks.cpp @@ -64,7 +64,7 @@ CRoadBlocks::GenerateRoadBlockCopsForCar(CVehicle* pVehicle, int32 roadBlockType float fRadius = pVehicle->GetBoundRadius() / pPoliceColModel->boundingSphere.radius; for (int32 i = 0; i < 2; i++) { const int32 roadBlockIndex = i + 2 * roadBlockType; - CVector posForZ = pVehicle->m_matrix * (fRadius * vecRoadBlockOffets[roadBlockIndex]); + CVector posForZ = pVehicle->GetMatrix() * (fRadius * vecRoadBlockOffets[roadBlockIndex]); int32 modelInfoId = MI_COP; eCopType copType = COP_STREET; switch (pVehicle->GetModelIndex()) @@ -239,10 +239,10 @@ CRoadBlocks::CreateRoadBlockBetween2Points(CVector point1, CVector point2) pVehicle->SetStatus(STATUS_ABANDONED); // pVehicle->GetHeightAboveRoad(); // called but return value is ignored? tmp.GetPosition().z += fModelRadius - 0.6f; - pVehicle->m_matrix = tmp; + pVehicle->SetMatrix(tmp); pVehicle->PlaceOnRoadProperly(); pVehicle->SetIsStatic(false); - pVehicle->m_matrix.UpdateRW(); + pVehicle->GetMatrix().UpdateRW(); pVehicle->m_nDoorLock = CARLOCK_UNLOCKED; CCarCtrl::JoinCarWithRoadSystem(pVehicle); pVehicle->bIsLocked = false; diff --git a/src/control/Script.cpp b/src/control/Script.cpp index 057d1dbc..b929065b 100644 --- a/src/control/Script.cpp +++ b/src/control/Script.cpp @@ -1829,7 +1829,7 @@ void CMissionCleanup::Process() CWorld::Players[0].m_pPed->m_nDrunkCountdown = 0; CPad::GetPad(0)->SetDrunkInputDelay(0); CWorld::Players[0].m_bDriveByAllowed = true; - DMAudio.ShutUpPlayerTalking(0); + DMAudio.ShutUpPlayerTalking(FALSE); CVehicle::bDisableRemoteDetonation = false; CVehicle::bDisableRemoteDetonationOnContact = false; CGameLogic::ClearShortCut(); @@ -2208,20 +2208,16 @@ void CRunningScript::Init() int scriptToLoad = 0; const char *scriptfile = "main.scm"; -#ifdef _WIN32 -#include -#endif int open_script() { - // glfwGetKey doesn't work because of CGame::Initialise is blocking -#ifdef _WIN32 - if (GetAsyncKeyState('G') & 0x8000) + // glfwGetKey doesn't work because of CGame::Initialise is blocking + CPad::UpdatePads(); + if (CPad::GetPad(0)->GetChar('G')) scriptToLoad = 0; - if (GetAsyncKeyState('R') & 0x8000) + if (CPad::GetPad(0)->GetChar('R')) scriptToLoad = 1; - if (GetAsyncKeyState('D') & 0x8000) + if (CPad::GetPad(0)->GetChar('D')) scriptToLoad = 2; -#endif switch (scriptToLoad) { case 0: scriptfile = "main.scm"; break; case 1: scriptfile = "freeroam_miami.scm"; break; diff --git a/src/control/Script2.cpp b/src/control/Script2.cpp index 656973ca..4e7a1c3e 100644 --- a/src/control/Script2.cpp +++ b/src/control/Script2.cpp @@ -431,8 +431,8 @@ int8 CRunningScript::ProcessCommands300To399(int32 command) float length = *(float*)&ScriptParams[5]; float x, y; if (angle != 0.0f){ - y = cos(angle) * length; - x = sin(angle) * length; + y = Cos(angle) * length; + x = Sin(angle) * length; }else{ y = length; x = 0.0f; diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp index 878278c5..ac632b15 100644 --- a/src/control/Script4.cpp +++ b/src/control/Script4.cpp @@ -749,7 +749,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) CollectParameters(&m_nIp, 2); CPlayerPed* pPlayerPed = CWorld::Players[ScriptParams[0]].m_pPed; script_assert(pPlayerPed); - pPlayerPed->m_fArmour = clamp(pPlayerPed->m_fArmour + ScriptParams[1], 0.0f, CWorld::Players[ScriptParams[0]].m_nMaxArmour); + pPlayerPed->m_fArmour = Clamp(pPlayerPed->m_fArmour + ScriptParams[1], 0.0f, CWorld::Players[ScriptParams[0]].m_nMaxArmour); return 0; } case COMMAND_ADD_ARMOUR_TO_CHAR: @@ -757,7 +757,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command) CollectParameters(&m_nIp, 2); CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]); script_assert(pPed); - pPed->m_fArmour = clamp(pPed->m_fArmour + ScriptParams[1], 0.0f, 100.0f); + pPed->m_fArmour = Clamp(pPed->m_fArmour + ScriptParams[1], 0.0f, 100.0f); return 0; } case COMMAND_OPEN_GARAGE: @@ -1398,7 +1398,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command) { CollectParameters(&m_nIp, 1); DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); - DMAudio.PlayFrontEndTrack(ScriptParams[0] + STREAMED_SOUND_MISSION_COMPLETED - 1, 0); + DMAudio.PlayFrontEndTrack(ScriptParams[0] + STREAMED_SOUND_MISSION_COMPLETED - 1, FALSE); return 0; } case COMMAND_CLEAR_AREA: diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp index 1371f2e6..25b29256 100644 --- a/src/control/Script5.cpp +++ b/src/control/Script5.cpp @@ -16,6 +16,7 @@ #include "SpecialFX.h" #include "World.h" #include "main.h" +#include "SaveBuf.h" void CRunningScript::UpdateCompareFlag(bool flag) { @@ -1006,10 +1007,10 @@ void CRunningScript::PlayerInAngledAreaCheckCommand(int32 command, uint32* pIp) initAngle -= TWOPI; // it looks like the idea is to use a rectangle using the diagonal of the rectangle as // the side of new rectangle, with "length" being the length of second side - float rotatedSupX = supX + side2length * sin(initAngle); - float rotatedSupY = supY - side2length * cos(initAngle); - float rotatedInfX = infX + side2length * sin(initAngle); - float rotatedInfY = infY - side2length * cos(initAngle); + float rotatedSupX = supX + side2length * Sin(initAngle); + float rotatedSupY = supY - side2length * Cos(initAngle); + float rotatedInfX = infX + side2length * Sin(initAngle); + float rotatedInfY = infY - side2length * Cos(initAngle); float side1X = supX - infX; float side1Y = supY - infY; float side1Length = CVector2D(side1X, side1Y).Magnitude(); @@ -2184,15 +2185,19 @@ void CTheScripts::LoadAllScripts(uint8* buf, uint32 size) Init(); INITSAVEBUF CheckSaveHeader(buf, 'S', 'C', 'R', '\0', size - SAVE_HEADER_SIZE); - uint32 varSpace = ReadSaveBuf(buf); + uint32 varSpace, type, handle; + uint32 tmp; + + ReadSaveBuf(&varSpace, buf); for (uint32 i = 0; i < varSpace; i++) - ScriptSpace[i] = ReadSaveBuf(buf); - script_assert(ReadSaveBuf(buf) == SCRIPT_DATA_SIZE); - OnAMissionFlag = ReadSaveBuf(buf); - LastMissionPassedTime = ReadSaveBuf(buf); + ReadSaveBuf(&ScriptSpace[i], buf); + ReadSaveBuf(&tmp, buf); + script_assert(tmp == SCRIPT_DATA_SIZE); + ReadSaveBuf(&OnAMissionFlag, buf); + ReadSaveBuf(&LastMissionPassedTime, buf); for (uint32 i = 0; i < MAX_NUM_BUILDING_SWAPS; i++) { - uint32 type = ReadSaveBuf(buf); - uint32 handle = ReadSaveBuf(buf); + ReadSaveBuf(&type, buf); + ReadSaveBuf(&handle, buf); switch (type) { case 0: BuildingSwapArray[i].m_pBuilding = nil; @@ -2206,14 +2211,14 @@ INITSAVEBUF default: script_assert(false); } - BuildingSwapArray[i].m_nNewModel = ReadSaveBuf(buf); - BuildingSwapArray[i].m_nOldModel = ReadSaveBuf(buf); + ReadSaveBuf(&BuildingSwapArray[i].m_nNewModel, buf); + ReadSaveBuf(&BuildingSwapArray[i].m_nOldModel, buf); if (BuildingSwapArray[i].m_pBuilding) BuildingSwapArray[i].m_pBuilding->ReplaceWithNewModel(BuildingSwapArray[i].m_nNewModel); } for (uint32 i = 0; i < MAX_NUM_INVISIBILITY_SETTINGS; i++) { - uint32 type = ReadSaveBuf(buf); - uint32 handle = ReadSaveBuf(buf); + ReadSaveBuf(&type, buf); + ReadSaveBuf(&handle, buf); switch (type) { case 0: InvisibilitySettingArray[i] = nil; @@ -2236,14 +2241,22 @@ INITSAVEBUF if (InvisibilitySettingArray[i]) InvisibilitySettingArray[i]->bIsVisible = false; } - script_assert(ReadSaveBuf(buf) == bUsingAMultiScriptFile); - bPlayerHasMetDebbieHarry = ReadSaveBuf(buf); - ReadSaveBuf(buf); - script_assert(ReadSaveBuf(buf) == MainScriptSize); - script_assert(ReadSaveBuf(buf) == LargestMissionScriptSize); - script_assert(ReadSaveBuf(buf) == NumberOfMissionScripts); - script_assert(ReadSaveBuf(buf) == NumberOfExclusiveMissionScripts); - uint32 runningScripts = ReadSaveBuf(buf); + bool tmpBool; + ReadSaveBuf(&tmpBool, buf); + script_assert(tmpBool == bUsingAMultiScriptFile); + ReadSaveBuf(&bPlayerHasMetDebbieHarry, buf); + SkipSaveBuf(buf, 2); + ReadSaveBuf(&tmp, buf); + script_assert(tmp == MainScriptSize); + ReadSaveBuf(&tmp, buf); + script_assert(tmp == LargestMissionScriptSize); + uint16 tmp16; + ReadSaveBuf(&tmp16, buf); + script_assert(tmp16 == NumberOfMissionScripts); + ReadSaveBuf(&tmp16, buf); + script_assert(tmp16 == NumberOfExclusiveMissionScripts); + uint32 runningScripts; + ReadSaveBuf(&runningScripts, buf); for (uint32 i = 0; i < runningScripts; i++) StartNewScript(0)->Load(buf); VALIDATESAVEBUF(size) @@ -2254,33 +2267,33 @@ VALIDATESAVEBUF(size) void CRunningScript::Save(uint8*& buf) { #ifdef COMPATIBLE_SAVES - SkipSaveBuf(buf, 8); + ZeroSaveBuf(buf, 8); for (int i = 0; i < 8; i++) - WriteSaveBuf(buf, m_abScriptName[i]); - WriteSaveBuf(buf, m_nIp); + WriteSaveBuf(buf, m_abScriptName[i]); + WriteSaveBuf(buf, m_nIp); #ifdef CHECK_STRUCT_SIZES static_assert(MAX_STACK_DEPTH == 6, "Compatibility loss: MAX_STACK_DEPTH != 6"); #endif for (int i = 0; i < MAX_STACK_DEPTH; i++) - WriteSaveBuf(buf, m_anStack[i]); - WriteSaveBuf(buf, m_nStackPointer); - SkipSaveBuf(buf, 2); + WriteSaveBuf(buf, m_anStack[i]); + WriteSaveBuf(buf, m_nStackPointer); + ZeroSaveBuf(buf, 2); #ifdef CHECK_STRUCT_SIZES static_assert(NUM_LOCAL_VARS + NUM_TIMERS == 18, "Compatibility loss: NUM_LOCAL_VARS + NUM_TIMERS != 18"); #endif for (int i = 0; i < NUM_LOCAL_VARS + NUM_TIMERS; i++) - WriteSaveBuf(buf, m_anLocalVariables[i]); - WriteSaveBuf(buf, m_bIsActive); - WriteSaveBuf(buf, m_bCondResult); - WriteSaveBuf(buf, m_bIsMissionScript); - WriteSaveBuf(buf, m_bSkipWakeTime); - WriteSaveBuf(buf, m_nWakeTime); - WriteSaveBuf(buf, m_nAndOrState); - WriteSaveBuf(buf, m_bNotFlag); - WriteSaveBuf(buf, m_bDeatharrestEnabled); - WriteSaveBuf(buf, m_bDeatharrestExecuted); - WriteSaveBuf(buf, m_bMissionFlag); - SkipSaveBuf(buf, 2); + WriteSaveBuf(buf, m_anLocalVariables[i]); + WriteSaveBuf(buf, m_bIsActive); + WriteSaveBuf(buf, m_bCondResult); + WriteSaveBuf(buf, m_bIsMissionScript); + WriteSaveBuf(buf, m_bSkipWakeTime); + WriteSaveBuf(buf, m_nWakeTime); + WriteSaveBuf(buf, m_nAndOrState); + WriteSaveBuf(buf, m_bNotFlag); + WriteSaveBuf(buf, m_bDeatharrestEnabled); + WriteSaveBuf(buf, m_bDeatharrestExecuted); + WriteSaveBuf(buf, m_bMissionFlag); + ZeroSaveBuf(buf, 2); #else WriteSaveBuf(buf, *this); #endif @@ -2291,35 +2304,35 @@ void CRunningScript::Load(uint8*& buf) #ifdef COMPATIBLE_SAVES SkipSaveBuf(buf, 8); for (int i = 0; i < 8; i++) - m_abScriptName[i] = ReadSaveBuf(buf); - m_nIp = ReadSaveBuf(buf); + ReadSaveBuf(&m_abScriptName[i], buf); + ReadSaveBuf(&m_nIp, buf); #ifdef CHECK_STRUCT_SIZES static_assert(MAX_STACK_DEPTH == 6, "Compatibility loss: MAX_STACK_DEPTH != 6"); #endif for (int i = 0; i < MAX_STACK_DEPTH; i++) - m_anStack[i] = ReadSaveBuf(buf); - m_nStackPointer = ReadSaveBuf(buf); + ReadSaveBuf(&m_anStack[i], buf); + ReadSaveBuf(&m_nStackPointer, buf); SkipSaveBuf(buf, 2); #ifdef CHECK_STRUCT_SIZES static_assert(NUM_LOCAL_VARS + NUM_TIMERS == 18, "Compatibility loss: NUM_LOCAL_VARS + NUM_TIMERS != 18"); #endif for (int i = 0; i < NUM_LOCAL_VARS + NUM_TIMERS; i++) - m_anLocalVariables[i] = ReadSaveBuf(buf); - m_bIsActive = ReadSaveBuf(buf); - m_bCondResult = ReadSaveBuf(buf); - m_bIsMissionScript = ReadSaveBuf(buf); - m_bSkipWakeTime = ReadSaveBuf(buf); - m_nWakeTime = ReadSaveBuf(buf); - m_nAndOrState = ReadSaveBuf(buf); - m_bNotFlag = ReadSaveBuf(buf); - m_bDeatharrestEnabled = ReadSaveBuf(buf); - m_bDeatharrestExecuted = ReadSaveBuf(buf); - m_bMissionFlag = ReadSaveBuf(buf); + ReadSaveBuf(&m_anLocalVariables[i], buf); + ReadSaveBuf(&m_bIsActive, buf); + ReadSaveBuf(&m_bCondResult, buf); + ReadSaveBuf(&m_bIsMissionScript, buf); + ReadSaveBuf(&m_bSkipWakeTime, buf); + ReadSaveBuf(&m_nWakeTime, buf); + ReadSaveBuf(&m_nAndOrState, buf); + ReadSaveBuf(&m_bNotFlag, buf); + ReadSaveBuf(&m_bDeatharrestEnabled, buf); + ReadSaveBuf(&m_bDeatharrestExecuted, buf); + ReadSaveBuf(&m_bMissionFlag, buf); SkipSaveBuf(buf, 2); #else CRunningScript* n = next; CRunningScript* p = prev; - *this = ReadSaveBuf(buf); + ReadSaveBuf(this, buf); next = n; prev = p; #endif diff --git a/src/control/Script8.cpp b/src/control/Script8.cpp index 2d1ccdf4..56d7ed90 100644 --- a/src/control/Script8.cpp +++ b/src/control/Script8.cpp @@ -387,7 +387,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command) #if (defined GTAVC_JP_PATCH || defined SUPPORT_JAPANESE_SCRIPT) case COMMAND_IS_JAPANESE_GAME: #ifdef MORE_LANGUAGES - UpdateCompareFlag(FrontEndMenuManager.m_PrefsLanguage == LANGUAGE_JAPANESE); + UpdateCompareFlag(FrontEndMenuManager.m_PrefsLanguage == CMenuManager::LANGUAGE_JAPANESE); #elif (defined GTAVC_JP_PATCH) UpdateCompareFlag(true); #else diff --git a/src/control/SetPieces.cpp b/src/control/SetPieces.cpp index 0409a8bf..5edcd335 100644 --- a/src/control/SetPieces.cpp +++ b/src/control/SetPieces.cpp @@ -11,6 +11,7 @@ #include "Wanted.h" #include "World.h" #include "VarConsole.h" +#include "SaveBuf.h" #define TIME_BETWEEN_SETPIECE_SPAWNS 20000 @@ -67,9 +68,9 @@ VALIDATESAVEBUF(*size) void CSetPieces::Load(uint8* buf, uint32 size) { INITSAVEBUF - NumSetPieces = ReadSaveBuf(buf); + ReadSaveBuf(&NumSetPieces, buf); for (int i = 0; i < NUM_SETPIECES; i++) - aSetPieces[i] = ReadSaveBuf(buf); + ReadSaveBuf(&aSetPieces[i], buf); VALIDATESAVEBUF(size) } diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp index fdfe2275..cafbd340 100644 --- a/src/core/Cam.cpp +++ b/src/core/Cam.cpp @@ -1183,7 +1183,7 @@ CCam::Process_FollowPed(const CVector &CameraTarget, float TargetOrientation, fl float ReqSpeed = DeltaBeta * SpeedMultiplier; // this is also added - ReqSpeed = clamp(ReqSpeed, -SpeedLimit, SpeedLimit); + ReqSpeed = Clamp(ReqSpeed, -SpeedLimit, SpeedLimit); // Add or subtract absolute depending on sign, genius! if(ReqSpeed - BetaSpeed > 0.0f) @@ -1678,7 +1678,7 @@ CCam::WorkOutCamHeight(const CVector &TargetCoors, float TargetOrientation, floa Test.z = TargetCoors.z + 0.2f + Length*Sin(CarAlpha+AlphaOffset) + m_fCloseInCarHeightOffset; if(CWorld::ProcessVerticalLine(Test, CamTargetEntity->GetPosition().z, point, entity, true, false, false, false, false, false, nil)){ float sin = (point.point.z - TargetCoors.z - 0.2f - m_fCloseInCarHeightOffset)/Length; - CarAlpha = Asin(clamp(sin, -1.0f, 1.0f)) - AlphaOffset; + CarAlpha = Asin(Clamp(sin, -1.0f, 1.0f)) - AlphaOffset; if(CarAlpha < 0.0f) AlphaOffset += CarAlpha; } @@ -1828,7 +1828,7 @@ CCam::Process_Cam_On_A_String(const CVector &CameraTarget, float TargetOrientati if(DeltaBeta > PI) DeltaBeta -= TWOPI; else if(DeltaBeta < -PI) DeltaBeta += TWOPI; float dist = (TargetCoors - Source).Magnitude(); - dist = FIRETRUCK_TRACKING_MULT*dist*clamp(DeltaBeta, -0.8f, 0.8f); + dist = FIRETRUCK_TRACKING_MULT*dist*Clamp(DeltaBeta, -0.8f, 0.8f); Source += dist*CrossProduct(Front, CVector(0.0f, 0.0f, 1.0f)); } @@ -2801,7 +2801,7 @@ CCam::Process_1rstPersonPedOnPC(const CVector&, float TargetOrientation, float, if(BetaOffset > PI) BetaOffset -= TWOPI; else if(BetaOffset < PI) BetaOffset += TWOPI; - BetaOffset = clamp(BetaOffset, -pedTarget->m_attachRotStep, pedTarget->m_attachRotStep); + BetaOffset = Clamp(BetaOffset, -pedTarget->m_attachRotStep, pedTarget->m_attachRotStep); Beta = NewBeta + BetaOffset; } @@ -3271,7 +3271,7 @@ CCam::Process_BehindBoat(const CVector &CameraTarget, float TargetOrientation, f // useless call //CWaterLevel::GetWaterLevelNoWaves(TargetCoors.x, TargetCoors.y, TargetCoors.z, &Water); Water = (WaterLevel + WATER_Z_ADDITION_MIN - WaterLevelBuffered - WATER_Z_ADDITION)/(BoatDimensions.z/2.0f + MaxHeightUp); - TargetAlpha = Asin(clamp(Water, -1.0f, 1.0f)); + TargetAlpha = Asin(Clamp(Water, -1.0f, 1.0f)); } if(ResetStatics){ @@ -3457,7 +3457,7 @@ FindSplinePathPositionFloat(float *out, float *spline, uint32 time, uint32 &mark } } float a = ((float)time - (float)MS(spline[marker-4])) / (float)MS(spline[marker] - spline[marker-4]); - a = clamp(a, 0.0f, 1.0f); + a = Clamp(a, 0.0f, 1.0f); float b = 1.0f - a; *out = b*b*b * spline[marker-3] + 3.0f*a*b*b * spline[marker-1] + @@ -3495,7 +3495,7 @@ FindSplinePathPositionVector(CVector *out, float *spline, uint32 time, uint32 &m } float a = ((float)time - (float)MS(spline[marker-10])) / (float)MS(spline[marker] - spline[marker-10]); - a = clamp(a, 0.0f, 1.0f); + a = Clamp(a, 0.0f, 1.0f); float b = 1.0f - a; out->x = b*b*b * spline[marker-9] + @@ -4921,7 +4921,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, // 0.98f: CAR_FOV_FADE_MULT FOV = Pow(0.98f, CTimer::GetTimeStep()) * (FOV - DefaultFOV) + DefaultFOV; - FOV = clamp(FOV, DefaultFOV, DefaultFOV + 30.0f); + FOV = Clamp(FOV, DefaultFOV, DefaultFOV + 30.0f); } // WORKAROUND: I still don't know how looking behind works (m_bCamDirectlyInFront is unused in III, they seem to use m_bUseTransitionBeta) @@ -4952,9 +4952,9 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, AlphaSpeed = 0.0; Distance = 1000.0; - Front.x = -(cos(Beta) * cos(Alpha)); - Front.y = -(sin(Beta) * cos(Alpha)); - Front.z = sin(Alpha); + Front.x = -(Cos(Beta) * Cos(Alpha)); + Front.y = -(Sin(Beta) * Cos(Alpha)); + Front.z = Sin(Alpha); m_aTargetHistoryPosOne = TargetCoors - nextDistance * Front; @@ -5040,7 +5040,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, } } - float targetAlpha = Asin(clamp(Front.z, -1.0f, 1.0f)) - zoomModeAlphaOffset; + float targetAlpha = Asin(Clamp(Front.z, -1.0f, 1.0f)) - zoomModeAlphaOffset; if (targetAlpha <= maxAlphaAllowed) { if (targetAlpha < -CARCAM_SET[camSetArrPos][14]) targetAlpha = -CARCAM_SET[camSetArrPos][14]; @@ -5228,9 +5228,9 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, lastBeta = Beta; - Front.x = -(cos(Beta) * cos(Alpha)); - Front.y = -(sin(Beta) * cos(Alpha)); - Front.z = sin(Alpha); + Front.x = -(Cos(Beta) * Cos(Alpha)); + Front.y = -(Sin(Beta) * Cos(Alpha)); + Front.z = Sin(Alpha); GetVectorsReadyForRW(); TheCamera.m_bCamDirectlyBehind = false; TheCamera.m_bCamDirectlyInFront = false; @@ -5240,9 +5240,9 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, m_cvecTargetCoorsForFudgeInter = TargetCoors; m_aTargetHistoryPosThree = m_aTargetHistoryPosOne; float nextAlpha = alphaWithSpeedAccounted + zoomModeAlphaOffset; - float nextFrontX = -(cos(Beta) * cos(nextAlpha)); - float nextFrontY = -(sin(Beta) * cos(nextAlpha)); - float nextFrontZ = sin(nextAlpha); + float nextFrontX = -(Cos(Beta) * Cos(nextAlpha)); + float nextFrontY = -(Sin(Beta) * Cos(nextAlpha)); + float nextFrontZ = Sin(nextAlpha); m_aTargetHistoryPosOne.x = TargetCoors.x - nextFrontX * nextDistance; m_aTargetHistoryPosOne.y = TargetCoors.y - nextFrontY * nextDistance; @@ -5395,7 +5395,7 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation, float alphaToFace = Atan2(hi.z, hi.Magnitude2D()) + DEGTORAD(15.0f); float neededAlphaTurn = alphaToFace - carGunUD; - float alphaTurnPerFrame = CTimer::GetTimeStep() * 0.02f; + float alphaTurnPerFrame = CTimer::GetTimeStepInSeconds(); if (neededAlphaTurn > alphaTurnPerFrame) { neededTurn = alphaTurnPerFrame; diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index 5b3f9aa5..e7cd65a0 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -213,7 +213,7 @@ CCamera::Init(void) m_iModeToGoTo = CCam::MODE_FOLLOWPED; m_bJust_Switched = false; m_bUseTransitionBeta = false; - m_matrix.SetScale(1.0f); + GetMatrix().SetScale(1.0f); m_bTargetJustBeenOnTrain = false; m_bInitialNoNodeStaticsSet = false; m_uiLongestTimeInMill = 5000; @@ -347,7 +347,7 @@ CCamera::Process(void) currentTime = m_uiTransitionDuration; float fractionInter = (float) currentTime / m_uiTransitionDuration; float fractionInterTarget = (float) currentTime / m_uiTransitionDurationTargetCoors; - fractionInterTarget = clamp(fractionInterTarget, 0.0f, 1.0f); + fractionInterTarget = Clamp(fractionInterTarget, 0.0f, 1.0f); // Interpolate target separately if(fractionInterTarget <= m_fFractionInterToStopMovingTarget){ @@ -551,7 +551,7 @@ CCamera::Process(void) // Process Shake float shakeStrength = m_fCamShakeForce - 0.28f*(CTimer::GetTimeInMilliseconds()-m_uiCamShakeStart)/1000.0f; - shakeStrength = clamp(shakeStrength, 0.0f, 2.0f); + shakeStrength = Clamp(shakeStrength, 0.0f, 2.0f); int shakeRand = CGeneral::GetRandomNumber(); float shakeOffset = shakeStrength*0.1f; GetMatrix().GetPosition().x += shakeOffset * ((shakeRand & 0xF) - 7); @@ -1913,7 +1913,7 @@ CCamera::CamShake(float strength, float x, float y, float z) float curForce = mult*(m_fCamShakeForce - (CTimer::GetTimeInMilliseconds() - m_uiCamShakeStart)/1000.0f); strength = mult*strength; - if(clamp(curForce, 0.0f, 2.0f) < strength){ + if(Clamp(curForce, 0.0f, 2.0f) < strength){ m_fCamShakeForce = strength; m_uiCamShakeStart = CTimer::GetTimeInMilliseconds(); } @@ -1924,7 +1924,7 @@ void CamShakeNoPos(CCamera *cam, float strength) { float curForce = cam->m_fCamShakeForce - (CTimer::GetTimeInMilliseconds() - cam->m_uiCamShakeStart)/1000.0f; - if(clamp(curForce, 0.0f, 2.0f) < strength){ + if(Clamp(curForce, 0.0f, 2.0f) < strength){ cam->m_fCamShakeForce = strength; cam->m_uiCamShakeStart = CTimer::GetTimeInMilliseconds(); } @@ -3985,7 +3985,7 @@ CCamera::Find3rdPersonCamTargetVector(float dist, CVector pos, CVector &source, float CCamera::Find3rdPersonQuickAimPitch(void) { - float clampedFrontZ = clamp(Cams[ActiveCam].Front.z, -1.0f, 1.0f); + float clampedFrontZ = Clamp(Cams[ActiveCam].Front.z, -1.0f, 1.0f); float rot = Asin(clampedFrontZ); @@ -4017,7 +4017,7 @@ CCamera::SetRwCamera(RwCamera *cam) void CCamera::CalculateDerivedValues(void) { - m_cameraMatrix = Invert(m_matrix); + m_cameraMatrix = Invert(GetMatrix()); float hfov = DEGTORAD(CDraw::GetScaledFOV()/2.0f); float c = Cos(hfov); @@ -4101,16 +4101,11 @@ CCamera::IsSphereVisible(const CVector ¢er, float radius, const CMatrix *mat bool CCamera::IsSphereVisible(const CVector ¢er, float radius) { - CMatrix mat = m_cameraMatrix; - return IsSphereVisible(center, radius, &mat); + return IsSphereVisible(center, radius, &GetCameraMatrix()); } bool -#ifdef GTA_PS2 -CCamera::IsBoxVisible(CVuVector *box, const CMatrix *mat) -#else -CCamera::IsBoxVisible(CVector *box, const CMatrix *mat) -#endif +CCamera::IsBoxVisible(CVUVECTOR *box, const CMatrix *mat) { int i; int frustumTests[6] = { 0 }; diff --git a/src/core/Camera.h b/src/core/Camera.h index 538ff067..39ecb760 100644 --- a/src/core/Camera.h +++ b/src/core/Camera.h @@ -633,11 +633,7 @@ public: bool IsPointVisible(const CVector ¢er, const CMatrix *mat); bool IsSphereVisible(const CVector ¢er, float radius, const CMatrix *mat); bool IsSphereVisible(const CVector ¢er, float radius); -#ifdef GTA_PS2 - bool IsBoxVisible(CVuVector *box, const CMatrix *mat); -#else - bool IsBoxVisible(CVector *box, const CMatrix *mat); -#endif + bool IsBoxVisible(CVUVECTOR *box, const CMatrix *mat); }; VALIDATE_SIZE(CCamera, 0xE9D8); diff --git a/src/core/CdStreamPosix.cpp b/src/core/CdStreamPosix.cpp index 4e58a854..84040544 100644 --- a/src/core/CdStreamPosix.cpp +++ b/src/core/CdStreamPosix.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef __linux__ #include diff --git a/src/core/Crime.h b/src/core/Crime.h index 3c3e2b26..4c7ea315 100644 --- a/src/core/Crime.h +++ b/src/core/Crime.h @@ -28,7 +28,7 @@ class CCrimeBeingQd { public: eCrimeType m_nType; - uint32 m_nId; + int32 m_nId; uint32 m_nTime; CVector m_vecPosn; bool m_bReported; diff --git a/src/core/FileLoader.cpp b/src/core/FileLoader.cpp index ab85a958..cd39d159 100644 --- a/src/core/FileLoader.cpp +++ b/src/core/FileLoader.cpp @@ -1122,7 +1122,7 @@ CFileLoader::Load2dEffect(const char *line) &probability); effect->attractor.type = flags; #ifdef FIX_BUGS - effect->attractor.probability = clamp(probability, 0, 255); + effect->attractor.probability = Clamp(probability, 0, 255); #else effect->attractor.probability = probability; #endif @@ -1254,7 +1254,7 @@ CFileLoader::LoadObjectInstance(const char *line) if(!CStreaming::IsObjectInCdImage(id)) debug("Not in cdimage %s\n", mi->GetModelName()); - angle = -RADTODEG(2.0f * acosf(angle)); + angle = -RADTODEG(2.0f * Acos(angle)); xform = RwMatrixCreate(); RwMatrixRotate(xform, &axis, angle, rwCOMBINEREPLACE); RwMatrixTranslate(xform, &trans, rwCOMBINEPOSTCONCAT); diff --git a/src/core/Fire.cpp b/src/core/Fire.cpp index 8a6db0da..57315b15 100644 --- a/src/core/Fire.cpp +++ b/src/core/Fire.cpp @@ -457,7 +457,7 @@ CFireManager::StartScriptFire(const CVector &pos, CEntity *target, float strengt if (target) { if (target->IsPed()) { ped->m_pFire = fire; - if (target != (CVehicle *)FindPlayerPed()) { + if (target != FindPlayerPed()) { CVector2D pos = target->GetPosition(); ped->SetFlee(pos, 10000); ped->SetMoveAnim(); diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp index 61ccabcd..6926476c 100644 --- a/src/core/Frontend.cpp +++ b/src/core/Frontend.cpp @@ -181,7 +181,7 @@ const char* FrontendFilenames[][2] = { #ifdef XBOX_MESSAGE_SCREEN bool CMenuManager::m_bDialogOpen = false; uint32 CMenuManager::m_nDialogHideTimer = 0; -PauseModeTime CMenuManager::m_nDialogHideTimerPauseMode = 0; +uint32 CMenuManager::m_nDialogHideTimerPauseMode = 0; bool CMenuManager::m_bSaveWasSuccessful = false; wchar* CMenuManager::m_pDialogText = nil; #endif @@ -701,27 +701,27 @@ CMenuManager::CheckSliderMovement(int value) switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) { case MENUACTION_BRIGHTNESS: m_PrefsBrightness += value * 24.19f; - m_PrefsBrightness = clamp(m_PrefsBrightness, 0, 384); + m_PrefsBrightness = Clamp(m_PrefsBrightness, 0, 384); break; case MENUACTION_DRAWDIST: if(value > 0) m_PrefsLOD += ((1.8f - 0.925f) / 16.0f); else m_PrefsLOD -= ((1.8f - 0.925f) / 16.0f); - m_PrefsLOD = clamp(m_PrefsLOD, 0.925f, 1.8f); + m_PrefsLOD = Clamp(m_PrefsLOD, 0.925f, 1.8f); CRenderer::ms_lodDistScale = m_PrefsLOD; break; case MENUACTION_MUSICVOLUME: if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) { m_PrefsMusicVolume += value * (128 / 32); - m_PrefsMusicVolume = clamp(m_PrefsMusicVolume, 0, 65); + m_PrefsMusicVolume = Clamp(m_PrefsMusicVolume, 0, 65); DMAudio.SetMusicMasterVolume(m_PrefsMusicVolume); } break; case MENUACTION_SFXVOLUME: if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) { m_PrefsSfxVolume += value * (128 / 32); - m_PrefsSfxVolume = clamp(m_PrefsSfxVolume, 0, 65); + m_PrefsSfxVolume = Clamp(m_PrefsSfxVolume, 0, 65); DMAudio.SetEffectsMasterVolume(m_PrefsSfxVolume); } break; @@ -729,14 +729,14 @@ CMenuManager::CheckSliderMovement(int value) if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) { if (DMAudio.IsMP3RadioChannelAvailable()) { m_PrefsMP3BoostVolume += value * (128 / 32); - m_PrefsMP3BoostVolume = clamp(m_PrefsMP3BoostVolume, 0, 65); + m_PrefsMP3BoostVolume = Clamp(m_PrefsMP3BoostVolume, 0, 65); DMAudio.SetMP3BoostVolume(m_PrefsMP3BoostVolume); } } break; case MENUACTION_MOUSESENS: TheCamera.m_fMouseAccelHorzntl += value * 1.0f/200.0f/15.0f; // ??? - TheCamera.m_fMouseAccelHorzntl = clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f/3200.0f, 1.0f/200.0f); + TheCamera.m_fMouseAccelHorzntl = Clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f/3200.0f, 1.0f/200.0f); #ifdef FIX_BUGS TheCamera.m_fMouseAccelVertical = TheCamera.m_fMouseAccelHorzntl + 0.0005f; #endif @@ -754,7 +754,7 @@ CMenuManager::DisplayHelperText(char *text) return; // there was a unused static bool - static PauseModeTime LastFlash = 0; + static uint32 LastFlash = 0; int32 alpha = 255; CFont::SetRightJustifyOn(); @@ -1429,19 +1429,21 @@ CMenuManager::DrawStandardMenus(bool activeScreen) } } - static PauseModeTime lastBlendChange = 0; + static uint32 lastBlendChange = 0; if (m_nOptionHighlightTransitionBlend <= 255) { static uint32 blendChangeCounter = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastBlendChange > 20 -#ifndef FIX_HIGH_FPS_BUGS_ON_FRONTEND // Dirty dirty hack || blendChangeCounter > 20 -#endif ) { m_nOptionHighlightTransitionBlend += 50; lastBlendChange = CTimer::GetTimeInMillisecondsPauseMode(); blendChangeCounter = 0; } +#ifdef FIX_BUGS + blendChangeCounter += CTimer::GetLogicalFramesPassed(); +#else ++blendChangeCounter; +#endif } } @@ -1932,7 +1934,7 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8 CFont::PrintString(nextX, nextY, seperator); nextX += CFont::GetStringWidth(seperator, true) + bindingMargin; } - static PauseModeTime lastWaitingTextFlash = 0; + static uint32 lastWaitingTextFlash = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastWaitingTextFlash > 150) { showWaitingText = !showWaitingText; lastWaitingTextFlash = CTimer::GetTimeInMillisecondsPauseMode(); @@ -1997,7 +1999,7 @@ CMenuManager::DrawControllerScreenExtraText(int yStart, int xStart, int lineHeig CFont::PrintString(nextX, MENU_Y(yStart), TheText.Get("FEC_IBT")); nextX = CFont::GetStringWidth(TheText.Get("FEC_IBT"), true) + spacing + nextX; } - static PauseModeTime lastStateChange = 0; + static uint32 lastStateChange = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastStateChange > 150) { waitingTextVisible = !waitingTextVisible; lastStateChange = CTimer::GetTimeInMillisecondsPauseMode(); @@ -2381,22 +2383,27 @@ CMenuManager::DrawBackground(bool transitionCall) m_nOptionHighlightTransitionBlend = 0; } - static PauseModeTime LastFade = 0; + static uint32 LastFade = 0; if (m_nMenuFadeAlpha < 255) { static uint8 forceFadeInCounter = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - LastFade > 30 -#ifndef FIX_HIGH_FPS_BUGS_ON_FRONTEND // Dirty dirty hack || forceFadeInCounter > 30 -#endif ) { m_nMenuFadeAlpha += 20; if (m_firstStartCounter < 255) { m_firstStartCounter = Min(m_firstStartCounter + 20, 255); } LastFade = CTimer::GetTimeInMillisecondsPauseMode(); +#ifdef FIX_BUGS + forceFadeInCounter = 0; +#endif } +#ifdef FIX_BUGS + forceFadeInCounter += CTimer::GetLogicalFramesPassed(); +#else forceFadeInCounter++; +#endif } else if (m_nMenuFadeAlpha > 255) m_nMenuFadeAlpha = 255; @@ -2452,7 +2459,7 @@ CMenuManager::DrawBackground(bool transitionCall) } if (m_ShowEmptyBindingError) { - static PauseModeTime lastBindingError = CTimer::GetTimeInMillisecondsPauseMode(); + static uint32 lastBindingError = CTimer::GetTimeInMillisecondsPauseMode(); static bool bindingErrorShown = false; if (bindingErrorShown) { lastBindingError = CTimer::GetTimeInMillisecondsPauseMode(); @@ -2899,9 +2906,15 @@ CMenuManager::InitialiseChangedLanguageSettings() { if (m_bFrontEnd_ReloadObrTxtGxt) { m_bFrontEnd_ReloadObrTxtGxt = false; +#ifdef FIX_BUGS + if (gGameState > GS_INIT_ONCE) +#endif CTimer::Stop(); TheText.Unload(); TheText.Load(); +#ifdef FIX_BUGS + if (gGameState > GS_INIT_ONCE) +#endif CTimer::Update(); CGame::frenchGame = false; CGame::germanGame = false; @@ -3112,11 +3125,10 @@ CMenuManager::LoadSettings() #ifdef LOAD_INI_SETTINGS if (LoadINISettings()) { LoadINIControllerSettings(); - } else { - // no re3.ini, create it - SaveINISettings(); - SaveINIControllerSettings(); } + // if no reVC.ini, create it, or update it with new values + SaveINISettings(); + SaveINIControllerSettings(); #endif #ifdef FIX_BUGS @@ -3348,7 +3360,7 @@ CMenuManager::PrintStats() else CFont::SetScale(MENU_X(0.37f), MENU_Y(0.75f)); - static PauseModeTime lastCheck = 0; + static uint32 lastCheck = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastCheck > 40) { @@ -3476,8 +3488,8 @@ CMenuManager::Process(void) break; \ \ m_fMapSize *= z2; \ - m_fMapCenterX = clamp(m_fMapCenterX, SCREEN_WIDTH/2 - (m_fMapSize - MENU_X(MAP_MIN_SIZE)), m_fMapSize - MENU_X(MAP_MIN_SIZE) + SCREEN_WIDTH/2); \ - m_fMapCenterY = clamp(m_fMapCenterY, SCREEN_HEIGHT/2 - (m_fMapSize - MENU_Y(MAP_MIN_SIZE)), m_fMapSize - MENU_Y(MAP_MIN_SIZE) + SCREEN_HEIGHT/2); \ + m_fMapCenterX = Clamp(m_fMapCenterX, SCREEN_WIDTH/2 - (m_fMapSize - MENU_X(MAP_MIN_SIZE)), m_fMapSize - MENU_X(MAP_MIN_SIZE) + SCREEN_WIDTH/2); \ + m_fMapCenterY = Clamp(m_fMapCenterY, SCREEN_HEIGHT/2 - (m_fMapSize - MENU_Y(MAP_MIN_SIZE)), m_fMapSize - MENU_Y(MAP_MIN_SIZE) + SCREEN_HEIGHT/2); \ } while(0) #endif @@ -3489,7 +3501,7 @@ CMenuManager::AdditionalOptionInput(bool &goBack) switch (m_nCurrScreen) { case MENUPAGE_MAP: { - static PauseModeTime lastMapTick = 0; + static uint32 lastMapTick = 0; // FIX: All those macros were hardcoded values originally. @@ -3515,8 +3527,8 @@ CMenuManager::AdditionalOptionInput(bool &goBack) m_fMapCenterX += (SCREEN_WIDTH/2 - m_fMapCenterX) / ((m_fMapSize - MENU_X(MAP_MIN_SIZE)) * 1/15.f); m_fMapSize = Max(MENU_Y(MAP_MIN_SIZE), m_fMapSize - MENU_Y(15.f)); - m_fMapCenterX = clamp(m_fMapCenterX, SCREEN_WIDTH/2 - (m_fMapSize - MENU_X(MAP_MIN_SIZE)), m_fMapSize - MENU_X(MAP_MIN_SIZE) + SCREEN_WIDTH/2); - m_fMapCenterY = clamp(m_fMapCenterY, SCREEN_HEIGHT/2 - (m_fMapSize - MENU_Y(MAP_MIN_SIZE)), m_fMapSize - MENU_Y(MAP_MIN_SIZE) + SCREEN_HEIGHT/2); + m_fMapCenterX = Clamp(m_fMapCenterX, SCREEN_WIDTH/2 - (m_fMapSize - MENU_X(MAP_MIN_SIZE)), m_fMapSize - MENU_X(MAP_MIN_SIZE) + SCREEN_WIDTH/2); + m_fMapCenterY = Clamp(m_fMapCenterY, SCREEN_HEIGHT/2 - (m_fMapSize - MENU_Y(MAP_MIN_SIZE)), m_fMapSize - MENU_Y(MAP_MIN_SIZE) + SCREEN_HEIGHT/2); } else { m_fMapSize = MENU_Y(MAP_MIN_SIZE); } @@ -3557,8 +3569,8 @@ CMenuManager::AdditionalOptionInput(bool &goBack) if (!justResetPointer) { m_fMapCenterX += m_nMousePosX - m_nMouseOldPosX; m_fMapCenterY += m_nMousePosY - m_nMouseOldPosY; - m_fMapCenterX = clamp(m_fMapCenterX, SCREEN_WIDTH/2 - (m_fMapSize - MENU_X(MAP_MIN_SIZE)), m_fMapSize - MENU_X(MAP_MIN_SIZE) + SCREEN_WIDTH/2); - m_fMapCenterY = clamp(m_fMapCenterY, SCREEN_HEIGHT/2 - (m_fMapSize - MENU_Y(MAP_MIN_SIZE)), m_fMapSize - MENU_Y(MAP_MIN_SIZE) + SCREEN_HEIGHT/2); + m_fMapCenterX = Clamp(m_fMapCenterX, SCREEN_WIDTH/2 - (m_fMapSize - MENU_X(MAP_MIN_SIZE)), m_fMapSize - MENU_X(MAP_MIN_SIZE) + SCREEN_WIDTH/2); + m_fMapCenterY = Clamp(m_fMapCenterY, SCREEN_HEIGHT/2 - (m_fMapSize - MENU_Y(MAP_MIN_SIZE)), m_fMapSize - MENU_Y(MAP_MIN_SIZE) + SCREEN_HEIGHT/2); } justResetPointer = false; @@ -3818,7 +3830,7 @@ CMenuManager::ExportStats() void CMenuManager::PrintRadioSelector(void) { - static PauseModeTime lastRadioChange = 0; + static uint32 lastRadioChange = 0; CSprite2d::Draw2DPolygon(MENU_X_LEFT_ALIGNED(418.f), MENU_Y(MENURADIO_SELECTOR_START_Y + MENURADIO_SELECTOR_HEIGHT), MENU_X_LEFT_ALIGNED(228.f), MENU_Y(MENURADIO_SELECTOR_START_Y + MENURADIO_SELECTOR_HEIGHT), @@ -3941,7 +3953,7 @@ CMenuManager::PrintRadioSelector(void) #endif static bool radioChangeRequested = false; - static PauseModeTime lastScrollCheck = 0; + static uint32 lastScrollCheck = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastScrollCheck > 17) { if (m_ScrollRadioBy == 1) { if (m_LeftMostRadioX > MENU_X_LEFT_ALIGNED(MENURADIO_ICON_FIRST_X - MENURADIO_ICON_SIZE)) { @@ -3984,7 +3996,7 @@ CMenuManager::PrintRadioSelector(void) if (radioChangeRequested) { if (CTimer::GetTimeInMillisecondsPauseMode() - lastRadioChange > 50) { DMAudio.SetRadioInCar(m_PrefsRadioStation); - DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1); + DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, TRUE); OutputDebugString("FRONTEND RADIO STATION CHANGED"); lastRadioChange = CTimer::GetTimeInMillisecondsPauseMode(); radioChangeRequested = false; @@ -4025,7 +4037,7 @@ CMenuManager::ProcessList(bool &optionSelected, bool &goBack) field_159 = false; } - static PauseModeTime lastTimeClickedScrollButton = 0; + static uint32 lastTimeClickedScrollButton = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastTimeClickedScrollButton >= 200) { m_bPressedPgUpOnList = false; @@ -4411,7 +4423,7 @@ CMenuManager::UserInput(void) int curAction = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action; if (CPad::GetPad(0)->GetLeft() || CPad::GetPad(0)->GetPedWalkLeftRight() < 0 || CPad::GetPad(0)->GetDPadLeft()) { - static PauseModeTime lastSliderDecrease = 0; + static uint32 lastSliderDecrease = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastSliderDecrease > 150) { if (curAction == MENUACTION_BRIGHTNESS || curAction == MENUACTION_MUSICVOLUME || curAction == MENUACTION_SFXVOLUME || curAction == MENUACTION_RADIO || @@ -4422,7 +4434,7 @@ CMenuManager::UserInput(void) lastSliderDecrease = CTimer::GetTimeInMillisecondsPauseMode(); } } else if (CPad::GetPad(0)->GetRight() || CPad::GetPad(0)->GetPedWalkLeftRight() > 0 || CPad::GetPad(0)->GetDPadRight()) { - static PauseModeTime lastSliderIncrease = 0; + static uint32 lastSliderIncrease = 0; if (CTimer::GetTimeInMillisecondsPauseMode() - lastSliderIncrease > 150) { if (curAction == MENUACTION_BRIGHTNESS || curAction == MENUACTION_MUSICVOLUME || curAction == MENUACTION_SFXVOLUME || curAction == MENUACTION_RADIO || @@ -4561,19 +4573,11 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u #ifdef USE_DEBUG_SCRIPT_LOADER if (m_nCurrScreen == MENUPAGE_START_MENU || m_nCurrScreen == MENUPAGE_NEW_GAME || m_nCurrScreen == MENUPAGE_NEW_GAME_RELOAD) { -#ifdef RW_GL3 - if (glfwGetKey(PSGLOBAL(window), GLFW_KEY_R) == GLFW_PRESS) { + if (CPad::GetPad(0)->GetChar('R')) { scriptToLoad = 1; DoSettingsBeforeStartingAGame(); return; } -#elif defined _WIN32 - if (GetAsyncKeyState('R') & 0x8000) { - scriptToLoad = 1; - DoSettingsBeforeStartingAGame(); - return; - } -#endif } #endif @@ -4718,7 +4722,7 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u case MENUACTION_LOADRADIO: if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) { SwitchToNewScreen(MENUPAGE_SOUND_SETTINGS); - DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1); + DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, TRUE); OutputDebugString("STARTED PLAYING FRONTEND AUDIO TRACK"); } break; @@ -4823,7 +4827,7 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u DMAudio.SetMusicMasterVolume(m_PrefsMusicVolume); DMAudio.SetEffectsMasterVolume(m_PrefsSfxVolume); DMAudio.SetRadioInCar(m_PrefsRadioStation); - DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1); + DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, TRUE); SaveSettings(); } else if (m_nCurrScreen == MENUPAGE_DISPLAY_SETTINGS) { m_PrefsBrightness = 256; @@ -5059,7 +5063,7 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u case MENUACTION_SPEAKERCONF: if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) { m_PrefsSpeakers -= changeAmount; - m_PrefsSpeakers = clamp(m_PrefsSpeakers, 0, 2); + m_PrefsSpeakers = Clamp(m_PrefsSpeakers, 0, 2); DMAudio.SetSpeakerConfig(m_PrefsSpeakers); SaveSettings(); } @@ -5418,7 +5422,7 @@ CMenuManager::ProcessFileActions() { #ifdef XBOX_MESSAGE_SCREEN if (m_bDialogOpen && DialogTextCmp("FESZ_WR")) { - PauseModeTime startTime = CTimer::GetTimeInMillisecondsPauseMode(); + uint32 startTime = CTimer::GetTimeInMillisecondsPauseMode(); int8 SaveSlot = PcSaveHelper.SaveSlot(m_nCurrSaveSlot); PcSaveHelper.PopulateSlotInfo(); @@ -5683,19 +5687,19 @@ CMenuManager::DrawQuitGameScreen(void) static int32 exitSignalTimer = 0; #ifdef FIX_BUGS - int alpha = clamp(m_nMenuFadeAlpha, 0, 255); + int alpha = Clamp(m_nMenuFadeAlpha, 0, 255); #else int alpha = m_nMenuFadeAlpha; #endif #ifndef MUCH_SHORTER_OUTRO_SCREEN - static PauseModeTime lastTickIncrease = 0; + static uint32 lastTickIncrease = 0; if (alpha == 255 && CTimer::GetTimeInMillisecondsPauseMode() - lastTickIncrease > 10) { exitSignalTimer++; lastTickIncrease = CTimer::GetTimeInMillisecondsPauseMode(); } #else - static PauseModeTime firstTick = CTimer::GetTimeInMillisecondsPauseMode(); + static uint32 firstTick = CTimer::GetTimeInMillisecondsPauseMode(); if (alpha == 255 && CTimer::GetTimeInMillisecondsPauseMode() - firstTick > 750) { exitSignalTimer = 150; } diff --git a/src/core/Frontend.h b/src/core/Frontend.h index db9aebaa..125a2089 100644 --- a/src/core/Frontend.h +++ b/src/core/Frontend.h @@ -738,7 +738,7 @@ public: #ifdef XBOX_MESSAGE_SCREEN static uint32 m_nDialogHideTimer; - static PauseModeTime m_nDialogHideTimerPauseMode; + static uint32 m_nDialogHideTimerPauseMode; static bool m_bDialogOpen; static wchar *m_pDialogText; static bool m_bSaveWasSuccessful; diff --git a/src/core/FrontendTriggers.h b/src/core/FrontendTriggers.h index b2bde09c..bbafb4be 100644 --- a/src/core/FrontendTriggers.h +++ b/src/core/FrontendTriggers.h @@ -779,7 +779,7 @@ TriggerAudio_RadioStation(CMenuMultiChoicePicturedTriggered *widget) if ( CMenuManager::m_PrefsRadioStation != widget->GetMenuSelection() ) { CMenuManager::m_PrefsRadioStation = widget->GetMenuSelection(); - DMAudio.PlayFrontEndTrack(CMenuManager::m_PrefsRadioStation, 1); + DMAudio.PlayFrontEndTrack(CMenuManager::m_PrefsRadioStation, TRUE); DMAudio.SetRadioInCar(CMenuManager::m_PrefsRadioStation); } } diff --git a/src/core/Frontend_PS2.cpp b/src/core/Frontend_PS2.cpp index c0fcc652..fa238031 100644 --- a/src/core/Frontend_PS2.cpp +++ b/src/core/Frontend_PS2.cpp @@ -1375,7 +1375,7 @@ CMenuManager::DrawFrontEndNormal(void) if ((m_nStartPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) <= 1600) alpha = float(m_nStartPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) / 400.0f; - m_someAlpha = 255 - clamp(alpha, 0.0f, 1.0f) * 255.0f; + m_someAlpha = 255 - Clamp(alpha, 0.0f, 1.0f) * 255.0f; switch ( m_nSlidingDir ) { @@ -1392,7 +1392,7 @@ CMenuManager::DrawFrontEndNormal(void) float slide = float(m_nEndPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) / 800.0f; float alpha = float((int32)(m_nEndPauseTimer - CTimer::GetTimeInMillisecondsPauseMode()) + -266) / 533.0f; - m_someAlpha = clamp(alpha, 0.0f, 1.0f) * 255.0f; + m_someAlpha = Clamp(alpha, 0.0f, 1.0f) * 255.0f; switch ( m_nSlidingDir ) { @@ -2858,7 +2858,7 @@ CMenuManager::ProcessDPadCrossJustDown(void) { if ( !gMusicPlaying ) { - DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1); + DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, TRUE); gMusicPlaying = true; } } diff --git a/src/core/Game.cpp b/src/core/Game.cpp index 43bd3d11..c5e5224d 100644 --- a/src/core/Game.cpp +++ b/src/core/Game.cpp @@ -245,10 +245,16 @@ CGame::InitialiseRenderWare(void) #ifdef LIBRW #ifdef PS2_MATFX - rw::MatFX::modulateEnvMap = true; + rw::MatFX::envMapApplyLight = true; + rw::MatFX::envMapUseMatColor = true; + rw::MatFX::envMapFlipU = true; #else - rw::MatFX::modulateEnvMap = false; + rw::MatFX::envMapApplyLight = false; + rw::MatFX::envMapUseMatColor = false; + rw::MatFX::envMapFlipU = false; #endif + rw::RGBA envcol = { 64, 64, 64, 255 }; + rw::MatFX::envMapColor = envcol; #else #ifdef PS2_MATFX ReplaceMatFxCallback(); @@ -571,7 +577,7 @@ bool CGame::Initialise(const char* datFile) #endif - DMAudio.SetStartingTrackPositions(true); + DMAudio.SetStartingTrackPositions(TRUE); DMAudio.ChangeMusicMode(MUSICMODE_GAME); return true; } diff --git a/src/core/General.h b/src/core/General.h index 2f205c39..c17d916d 100644 --- a/src/core/General.h +++ b/src/core/General.h @@ -56,7 +56,7 @@ public: static float LimitRadianAngle(float angle) { - float result = clamp(angle, -25.0f, 25.0f); + float result = Clamp(angle, -25.0f, 25.0f); while (result >= PI) { result -= 2 * PI; diff --git a/src/core/MenuScreensCustom.cpp b/src/core/MenuScreensCustom.cpp index cdfb3c85..49bb33f8 100644 --- a/src/core/MenuScreensCustom.cpp +++ b/src/core/MenuScreensCustom.cpp @@ -26,6 +26,7 @@ #include "ModelInfo.h" #include "Pad.h" #include "ControllerConfig.h" +#include "DMAudio.h" // Menu screens array is at the bottom of the file. @@ -181,38 +182,6 @@ void IslandLoadingAfterChange(int8 before, int8 after) { } #endif -#ifdef MORE_LANGUAGES -void LangPolSelect(int8 action) -{ - if (action == FEOPTION_ACTION_SELECT) { - FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_POLISH; - FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true; - FrontEndMenuManager.InitialiseChangedLanguageSettings(); - FrontEndMenuManager.SaveSettings(); - } -} - -void LangRusSelect(int8 action) -{ - if (action == FEOPTION_ACTION_SELECT) { - FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_RUSSIAN; - FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true; - FrontEndMenuManager.InitialiseChangedLanguageSettings(); - FrontEndMenuManager.SaveSettings(); - } -} - -void LangJapSelect(int8 action) -{ - if (action == FEOPTION_ACTION_SELECT) { - FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_JAPANESE; - FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true; - FrontEndMenuManager.InitialiseChangedLanguageSettings(); - FrontEndMenuManager.SaveSettings(); - } -} -#endif - #ifndef MULTISAMPLING void GraphicsGoBack() { } @@ -226,6 +195,8 @@ void MultiSamplingButtonPress(int8 action) { if (FrontEndMenuManager.m_nDisplayMSAALevel != FrontEndMenuManager.m_nPrefsMSAALevel) { FrontEndMenuManager.m_nPrefsMSAALevel = FrontEndMenuManager.m_nDisplayMSAALevel; _psSelectScreenVM(FrontEndMenuManager.m_nPrefsVideoMode); + DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); + DMAudio.Service(); FrontEndMenuManager.SetHelperText(0); FrontEndMenuManager.SaveSettings(); } @@ -287,6 +258,8 @@ const char* screenModes[] = { "FED_FLS", "FED_WND" }; void ScreenModeAfterChange(int8 before, int8 after) { _psSelectScreenVM(FrontEndMenuManager.m_nPrefsVideoMode); // apply same resolution + DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND); + DMAudio.Service(); FrontEndMenuManager.SetHelperText(0); } @@ -471,11 +444,6 @@ CMenuScreenCustom aScreens[] = { MENUACTION_LANG_GER, "FEL_GER", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER, MENUACTION_LANG_ITA, "FEL_ITA", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER, MENUACTION_LANG_SPA, "FEL_SPA", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER, -#ifdef MORE_LANGUAGES - MENUACTION_CFO_DYNAMIC, "FEL_POL", { new CCFODynamic(nil, nil, nil, nil, LangPolSelect) }, 0, 0, MENUALIGN_CENTER, - MENUACTION_CFO_DYNAMIC, "FEL_RUS", { new CCFODynamic(nil, nil, nil, nil, LangRusSelect) }, 0, 0, MENUALIGN_CENTER - MENUACTION_CFO_DYNAMIC, "FEL_JAP", { new CCFODynamic(nil, nil, nil, nil, LangJapSelect) }, 0, 0, MENUALIGN_CENTER, -#endif MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 0, 0, MENUALIGN_CENTER, }, diff --git a/src/core/Placeable.h b/src/core/Placeable.h index b0f9a15a..94be3211 100644 --- a/src/core/Placeable.h +++ b/src/core/Placeable.h @@ -2,12 +2,13 @@ class CPlaceable { +protected: + CMatrix m_matrix; + public: // disable allocation static void *operator new(size_t); - CMatrix m_matrix; - CPlaceable(void); const CVector &GetPosition(void) { return m_matrix.GetPosition(); } void SetPosition(float x, float y, float z) { @@ -20,6 +21,7 @@ public: CVector &GetForward(void) { return m_matrix.GetForward(); } CVector &GetUp(void) { return m_matrix.GetUp(); } CMatrix &GetMatrix(void) { return m_matrix; } + void SetMatrix(CMatrix &newMatrix) { m_matrix = newMatrix; } void SetTransform(RwMatrix *m) { m_matrix = CMatrix(m, false); } void SetHeading(float angle); void SetOrientation(float x, float y, float z){ @@ -31,4 +33,4 @@ public: bool IsWithinArea(float x1, float y1, float z1, float x2, float y2, float z2); }; -VALIDATE_SIZE(CPlaceable, 0x4C); +VALIDATE_SIZE(CPlaceable, 0x48); diff --git a/src/core/PlayerInfo.cpp b/src/core/PlayerInfo.cpp index a64d4cca..36d05b82 100644 --- a/src/core/PlayerInfo.cpp +++ b/src/core/PlayerInfo.cpp @@ -299,7 +299,7 @@ CPlayerInfo::Process(void) m_fRoadDensity = ThePaths.CalcRoadDensity(playerPos.x, playerPos.y); } - m_fRoadDensity = clamp(m_fRoadDensity, 0.5f, 1.45f); + m_fRoadDensity = Clamp(m_fRoadDensity, 0.5f, 1.45f); // Because vehicle enter/exit use same key binding. bool enterOrExitVeh; diff --git a/src/core/Pools.cpp b/src/core/Pools.cpp index bf35f8ef..a85d6846 100644 --- a/src/core/Pools.cpp +++ b/src/core/Pools.cpp @@ -14,6 +14,7 @@ #include "Wanted.h" #include "World.h" #include "MemoryHeap.h" +#include "SaveBuf.h" CCPtrNodePool *CPools::ms_pPtrNodePool; CEntryInfoNodePool *CPools::ms_pEntryInfoNodePool; @@ -105,7 +106,7 @@ CPools::CheckPoolsEmpty() printf("pools have been cleared\n"); } - +// Thankfully unused, it would break the game! void CPools::MakeSureSlotInObjectPoolIsEmpty(int32 slot) { @@ -137,15 +138,20 @@ CPools::MakeSureSlotInObjectPoolIsEmpty(int32 slot) void CPools::LoadVehiclePool(uint8* buf, uint32 size) { INITSAVEBUF - int nNumCars = ReadSaveBuf(buf); - int nNumBoats = ReadSaveBuf(buf); - int nNumBikes = ReadSaveBuf(buf); + int nNumCars, nNumBoats, nNumBikes; + ReadSaveBuf(&nNumCars, buf); + ReadSaveBuf(&nNumBoats, buf); + ReadSaveBuf(&nNumBikes, buf); for (int i = 0; i < nNumCars + nNumBoats + nNumBikes; i++) { - uint32 type = ReadSaveBuf(buf); - int16 model = ReadSaveBuf(buf); + uint32 type; + int16 model; + int32 slot; + + ReadSaveBuf(&type, buf); + ReadSaveBuf(&model, buf); CStreaming::RequestModel(model, STREAMFLAGS_DEPENDENCY); CStreaming::LoadAllRequestedModels(false); - int32 slot = ReadSaveBuf(buf); + ReadSaveBuf(&slot, buf); CVehicle* pVehicle; #ifdef COMPATIBLE_SAVES if (type == VEHICLE_TYPE_BOAT) @@ -304,9 +310,9 @@ INITSAVEBUF #else if ((pVehicle->IsCar() || pVehicle->IsBoat() || pVehicle->IsBike()) && pVehicle->VehicleCreatedBy == MISSION_VEHICLE) { #endif - WriteSaveBuf(buf, pVehicle->m_vehType); - WriteSaveBuf(buf, pVehicle->GetModelIndex()); - WriteSaveBuf(buf, GetVehicleRef(pVehicle)); + WriteSaveBuf(buf, pVehicle->m_vehType); + WriteSaveBuf(buf, pVehicle->GetModelIndex()); + WriteSaveBuf(buf, GetVehicleRef(pVehicle)); pVehicle->Save(buf); } #else @@ -315,7 +321,7 @@ INITSAVEBUF #else if (pVehicle->IsCar() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE) { #endif - WriteSaveBuf(buf, (uint32)pVehicle->m_vehType); + WriteSaveBuf(buf, pVehicle->m_vehType); WriteSaveBuf(buf, pVehicle->GetModelIndex()); WriteSaveBuf(buf, GetVehicleRef(pVehicle)); memcpy(buf, pVehicle, sizeof(CAutomobile)); @@ -326,7 +332,7 @@ INITSAVEBUF #else if (pVehicle->IsBoat() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE) { #endif - WriteSaveBuf(buf, (uint32)pVehicle->m_vehType); + WriteSaveBuf(buf, pVehicle->m_vehType); WriteSaveBuf(buf, pVehicle->GetModelIndex()); WriteSaveBuf(buf, GetVehicleRef(pVehicle)); memcpy(buf, pVehicle, sizeof(CBoat)); @@ -337,7 +343,7 @@ INITSAVEBUF #else if (pVehicle->IsBike() && pVehicle->VehicleCreatedBy == MISSION_VEHICLE) { #endif - WriteSaveBuf(buf, (uint32)pVehicle->m_vehType); + WriteSaveBuf(buf, pVehicle->m_vehType); WriteSaveBuf(buf, pVehicle->GetModelIndex()); WriteSaveBuf(buf, GetVehicleRef(pVehicle)); memcpy(buf, pVehicle, sizeof(CBike)); diff --git a/src/core/Radar.cpp b/src/core/Radar.cpp index 4bb9c966..f58f4687 100644 --- a/src/core/Radar.cpp +++ b/src/core/Radar.cpp @@ -19,6 +19,7 @@ #include "Streaming.h" #include "SpecialFX.h" #include "Font.h" +#include "SaveBuf.h" float CRadar::m_radarRange; sRadarTrace CRadar::ms_RadarTrace[NUMRADARBLIPS]; @@ -184,6 +185,75 @@ void GetTextureCorners(int32 x, int32 y, CVector2D *out) out[3].y = RADAR_TILE_SIZE * (y); } +uint8 CRadar::CalculateBlipAlpha(float dist) +{ + if (FrontEndMenuManager.m_bMenuMapActive) + return 255; + + if (dist <= 1.0f) + return 255; + + if (dist <= 10.0f) + return (128.0f * ((dist - 1.0f) / 9.0f)) + ((1.0f - (dist - 1.0f) / 9.0f) * 255.0f); + + return 128; +} + +void CRadar::ChangeBlipBrightness(int32 i, int32 bright) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_bDim = bright != 1; +} + +void CRadar::ChangeBlipColour(int32 i, int32 color) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_nColor = color; +} + +void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_eBlipDisplay = display; +} + +void CRadar::ChangeBlipScale(int32 i, int32 scale) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) + ms_RadarTrace[index].m_wScale = scale; +} + +void CRadar::ClearBlip(int32 i) +{ + int index = GetActualBlipArrayIndex(i); + if (index != -1) { + SetRadarMarkerState(index, false); + ms_RadarTrace[index].m_bInUse = false; + ms_RadarTrace[index].m_eBlipType = BLIP_NONE; + ms_RadarTrace[index].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; + ms_RadarTrace[index].m_eRadarSprite = RADAR_SPRITE_NONE; + } +} + +void CRadar::ClearBlipForEntity(eBlipType type, int32 id) +{ + for (int i = 0; i < NUMRADARBLIPS; i++) { + if (type == ms_RadarTrace[i].m_eBlipType && id == ms_RadarTrace[i].m_nEntityHandle) { + SetRadarMarkerState(i, false); + ms_RadarTrace[i].m_bInUse = false; + ms_RadarTrace[i].m_eBlipType = BLIP_NONE; + ms_RadarTrace[i].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; + ms_RadarTrace[i].m_eRadarSprite = RADAR_SPRITE_NONE; + } + }; +} + +// Why not a proper clipping algorithm? +#ifdef THIS_IS_STUPID bool IsPointInsideRadar(const CVector2D &point) { @@ -264,74 +334,6 @@ int LineRadarBoxCollision(CVector2D &out, const CVector2D &p1, const CVector2D & return edge; } -uint8 CRadar::CalculateBlipAlpha(float dist) -{ - if (FrontEndMenuManager.m_bMenuMapActive) - return 255; - - if (dist <= 1.0f) - return 255; - - if (dist <= 10.0f) - return (128.0f * ((dist - 1.0f) / 9.0f)) + ((1.0f - (dist - 1.0f) / 9.0f) * 255.0f); - - return 128; -} - -void CRadar::ChangeBlipBrightness(int32 i, int32 bright) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_bDim = bright != 1; -} - -void CRadar::ChangeBlipColour(int32 i, int32 color) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_nColor = color; -} - -void CRadar::ChangeBlipDisplay(int32 i, eBlipDisplay display) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_eBlipDisplay = display; -} - -void CRadar::ChangeBlipScale(int32 i, int32 scale) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) - ms_RadarTrace[index].m_wScale = scale; -} - -void CRadar::ClearBlip(int32 i) -{ - int index = GetActualBlipArrayIndex(i); - if (index != -1) { - SetRadarMarkerState(index, false); - ms_RadarTrace[index].m_bInUse = false; - ms_RadarTrace[index].m_eBlipType = BLIP_NONE; - ms_RadarTrace[index].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; - ms_RadarTrace[index].m_eRadarSprite = RADAR_SPRITE_NONE; - } -} - -void CRadar::ClearBlipForEntity(eBlipType type, int32 id) -{ - for (int i = 0; i < NUMRADARBLIPS; i++) { - if (type == ms_RadarTrace[i].m_eBlipType && id == ms_RadarTrace[i].m_nEntityHandle) { - SetRadarMarkerState(i, false); - ms_RadarTrace[i].m_bInUse = false; - ms_RadarTrace[i].m_eBlipType = BLIP_NONE; - ms_RadarTrace[i].m_eBlipDisplay = BLIP_DISPLAY_NEITHER; - ms_RadarTrace[i].m_eRadarSprite = RADAR_SPRITE_NONE; - } - }; -} - -// Why not a proper clipping algorithm? int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect) { CVector2D corners[4] = { @@ -410,6 +412,50 @@ int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect) return n; } +#else + +int +ClipPolyPlane(const CVector2D *in, int nin, CVector2D *out, CVector *plane) +{ + int j; + int nout; + int x1, x2; + float d1, d2, t; + + nout = 0; + for(j = 0; j < nin; j++){ + x1 = j; + x2 = (j+1) % nin; + + d1 = plane->x*in[x1].x + plane->y*in[x1].y + plane->z; + d2 = plane->x*in[x2].x + plane->y*in[x2].y + plane->z; + if(d1*d2 < 0.0f){ + t = d1/(d1 - d2); + out[nout++] = in[x1]*(1.0f-t) + in[x2]*t; + } + if(d2 >= 0.0f) + out[nout++] = in[x2]; + } + return nout; +} + +int CRadar::ClipRadarPoly(CVector2D *poly, const CVector2D *rect) +{ + CVector planes[4] = { + CVector(-1.0f, 0.0f, 1.0f), + CVector( 1.0f, 0.0f, 1.0f), + CVector(0.0f, -1.0f, 1.0f), + CVector(0.0f, 1.0f, 1.0f) + }; + CVector2D tmp[8]; + int n; + if(n = ClipPolyPlane(rect, 4, tmp, &planes[0]), n == 0) return 0; + if(n = ClipPolyPlane(tmp, n, poly, &planes[1]), n == 0) return 0; + if(n = ClipPolyPlane(poly, n, tmp, &planes[2]), n == 0) return 0; + if(n = ClipPolyPlane(tmp, n, poly, &planes[3]), n == 0) return 0; + return n; +} +#endif bool CRadar::DisplayThisBlip(int32 counter) { @@ -433,7 +479,7 @@ void CRadar::Draw3dMarkers() if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) { CVector pos = entity->GetPosition(); pos.z += 1.2f * CModelInfo::GetModelInfo(entity->GetModelIndex())->GetColModel()->boundingBox.max.z + 2.5f; - C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), 1, pos, 2.5f, CARBLIP_MARKER_COLOR_R, CARBLIP_MARKER_COLOR_G, CARBLIP_MARKER_COLOR_B, CARBLIP_MARKER_COLOR_A, 1024, 0.2f, 5); + C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), MARKERTYPE_ARROW, pos, 2.5f, CARBLIP_MARKER_COLOR_R, CARBLIP_MARKER_COLOR_G, CARBLIP_MARKER_COLOR_B, CARBLIP_MARKER_COLOR_A, 1024, 0.2f, 5); } break; } @@ -447,7 +493,7 @@ void CRadar::Draw3dMarkers() if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) { CVector pos = entity->GetPosition(); pos.z += 3.0f; - C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), 1, pos, 1.5f, CHARBLIP_MARKER_COLOR_R, CHARBLIP_MARKER_COLOR_G, CHARBLIP_MARKER_COLOR_B, CHARBLIP_MARKER_COLOR_A, 1024, 0.2f, 5); + C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), MARKERTYPE_ARROW, pos, 1.5f, CHARBLIP_MARKER_COLOR_R, CHARBLIP_MARKER_COLOR_G, CHARBLIP_MARKER_COLOR_B, CHARBLIP_MARKER_COLOR_A, 1024, 0.2f, 5); } break; } @@ -457,7 +503,7 @@ void CRadar::Draw3dMarkers() if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) { CVector pos = entity->GetPosition(); pos.z += CModelInfo::GetModelInfo(entity->GetModelIndex())->GetColModel()->boundingBox.max.z + 1.0f + 1.0f; - C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), 1, pos, 1.0f, OBJECTBLIP_MARKER_COLOR_R, OBJECTBLIP_MARKER_COLOR_G, OBJECTBLIP_MARKER_COLOR_B, OBJECTBLIP_MARKER_COLOR_A, 1024, 0.2f, 5); + C3dMarkers::PlaceMarker(i | (ms_RadarTrace[i].m_BlipIndex << 16), MARKERTYPE_ARROW, pos, 1.0f, OBJECTBLIP_MARKER_COLOR_R, OBJECTBLIP_MARKER_COLOR_G, OBJECTBLIP_MARKER_COLOR_B, OBJECTBLIP_MARKER_COLOR_A, 1024, 0.2f, 5); } break; } @@ -466,7 +512,7 @@ void CRadar::Draw3dMarkers() case BLIP_CONTACT_POINT: if (!CTheScripts::IsPlayerOnAMission()) { if (ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_BOTH || ms_RadarTrace[i].m_eBlipDisplay == BLIP_DISPLAY_MARKER_ONLY) - C3dMarkers::PlaceMarkerSet(i | (ms_RadarTrace[i].m_BlipIndex << 16), 4, ms_RadarTrace[i].m_vecPos, 2.0f, COORDBLIP_MARKER_COLOR_R, COORDBLIP_MARKER_COLOR_G, COORDBLIP_MARKER_COLOR_B, COORDBLIP_MARKER_COLOR_A, 2048, 0.2f, 0); + C3dMarkers::PlaceMarkerSet(i | (ms_RadarTrace[i].m_BlipIndex << 16), MARKERTYPE_CYLINDER, ms_RadarTrace[i].m_vecPos, 2.0f, COORDBLIP_MARKER_COLOR_R, COORDBLIP_MARKER_COLOR_G, COORDBLIP_MARKER_COLOR_B, COORDBLIP_MARKER_COLOR_A, 2048, 0.2f, 0); } break; } @@ -928,21 +974,21 @@ INITSAVEBUF CheckSaveHeader(buf, 'R', 'D', 'R', '\0', size - SAVE_HEADER_SIZE); for (int i = 0; i < NUMRADARBLIPS; i++) { - ms_RadarTrace[i].m_nColor = ReadSaveBuf(buf); - ms_RadarTrace[i].m_Radius = ReadSaveBuf(buf); - ms_RadarTrace[i].m_eBlipType = ReadSaveBuf(buf); - ms_RadarTrace[i].m_nEntityHandle = ReadSaveBuf(buf); - ms_RadarTrace[i].m_vec2DPos.x = ReadSaveBuf(buf); // CVector2D - ms_RadarTrace[i].m_vec2DPos.y = ReadSaveBuf(buf); - ms_RadarTrace[i].m_vecPos = ReadSaveBuf(buf); - ms_RadarTrace[i].m_BlipIndex = ReadSaveBuf(buf); - ms_RadarTrace[i].m_bDim = ReadSaveBuf(buf); - ms_RadarTrace[i].m_bInUse = ReadSaveBuf(buf); - ms_RadarTrace[i].m_bShortRange = ReadSaveBuf(buf); - ms_RadarTrace[i].m_unused = ReadSaveBuf(buf); - ms_RadarTrace[i].m_wScale = ReadSaveBuf(buf); - ms_RadarTrace[i].m_eBlipDisplay = ReadSaveBuf(buf); - ms_RadarTrace[i].m_eRadarSprite = ReadSaveBuf(buf); + ReadSaveBuf(&ms_RadarTrace[i].m_nColor, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_Radius, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_eBlipType, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_nEntityHandle, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_vec2DPos.x, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_vec2DPos.y, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_vecPos, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_BlipIndex, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_bDim, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_bInUse, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_bShortRange, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_unused, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_wScale, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_eBlipDisplay, buf); + ReadSaveBuf(&ms_RadarTrace[i].m_eRadarSprite, buf); } VALIDATESAVEBUF(size); @@ -1337,7 +1383,7 @@ CRadar::InitFrontEndMap() void CRadar::DrawYouAreHereSprite(float x, float y) { - static PauseModeTime lastChange = 0; + static uint32 lastChange = 0; static bool show = true; if (show) { @@ -1537,7 +1583,7 @@ void CRadar::DrawLegend(int32 x, int32 y, int32 sprite) { if (sprite < 0) { - static PauseModeTime lastChange = 0; + static uint32 lastChange = 0; static int8 blipMode = 0; CRGBA color; diff --git a/src/core/References.cpp b/src/core/References.cpp index dc83d96d..09913817 100644 --- a/src/core/References.cpp +++ b/src/core/References.cpp @@ -39,9 +39,7 @@ CEntity::RegisterReference(CEntity **pent) ref->pentity = pent; ref->next = m_pFirstReference; m_pFirstReference = ref; - return; } - return; } // Clean up the reference from *pent -> 'this' diff --git a/src/core/Ropes.cpp b/src/core/Ropes.cpp index 52427fc3..71297eb1 100644 --- a/src/core/Ropes.cpp +++ b/src/core/Ropes.cpp @@ -1,5 +1,6 @@ #include "common.h" +#include "main.h" #include "Timer.h" #include "ModelIndices.h" #include "Streaming.h" @@ -91,9 +92,11 @@ void CRopes::Render(void) { int i; + PUSH_RENDERGROUP("CRopes::Render"); for(i = 0; i < ARRAY_SIZE(aRopes); i++) if(aRopes[i].m_bActive) aRopes[i].Render(); + POP_RENDERGROUP(); } bool @@ -147,7 +150,7 @@ CRopes::FindCoorsAlongRope(uintptr id, float t, CVector *coors) float f; for(i = 0; i < ARRAY_SIZE(aRopes); i++) if(aRopes[i].m_bActive && aRopes[i].m_id == id){ - t = (ARRAY_SIZE(aRopes[0].m_pos)-1)*clamp(t, 0.0f, 0.999f); + t = (ARRAY_SIZE(aRopes[0].m_pos)-1)*Clamp(t, 0.0f, 0.999f); j = t; f = t - j; *coors = (1.0f-f)*aRopes[i].m_pos[j] + f*aRopes[i].m_pos[j+1]; diff --git a/src/core/Stats.cpp b/src/core/Stats.cpp index 7ada0da9..8c6137f2 100644 --- a/src/core/Stats.cpp +++ b/src/core/Stats.cpp @@ -1229,7 +1229,11 @@ CStats::ConstructStatLine(int rowIdx) FASTEST_TIME(20, "STFT_21"); if (FastestTimes[21]) +#ifdef FIX_BUGS + STAT_LINE_1(float, "STFT_22", Floor(FastestTimes[21] / 10) / 100, 1); +#else STAT_LINE_1(float, "STFT_22", FastestTimes[21] / 1000, 1); +#endif if (TopShootingRangeScore > 0.0f) STAT_LINE_1(int, "TOP_SHO", TopShootingRangeScore, 0); diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp index ca0c218b..14a9a4af 100644 --- a/src/core/Streaming.cpp +++ b/src/core/Streaming.cpp @@ -1732,7 +1732,13 @@ CStreaming::StreamVehiclesAndPeds(void) for(i = 0; i < CCarCtrl::TOTAL_CUSTOM_CLASSES; i++){ if(CCarCtrl::NumRequestsOfCarRating[i] > maxReq && ((i == 0 && zone.carThreshold[0] != 0) || +#ifdef FIX_BUGS + (i < CCarCtrl::NUM_CAR_CLASSES && zone.carThreshold[i] != zone.carThreshold[i-1]) || + (i == CCarCtrl::NUM_CAR_CLASSES && zone.boatThreshold[i - CCarCtrl::NUM_CAR_CLASSES] != 0) || + (i > CCarCtrl::NUM_CAR_CLASSES && i < CCarCtrl::TOTAL_CUSTOM_CLASSES && zone.boatThreshold[i - CCarCtrl::NUM_CAR_CLASSES] != zone.boatThreshold[i - CCarCtrl::NUM_CAR_CLASSES - 1]))) { +#else (i != 0 && zone.carThreshold[i] != zone.carThreshold[i-1]))) { +#endif maxReq = CCarCtrl::NumRequestsOfCarRating[i]; mostRequestedRating = i; } @@ -1875,8 +1881,7 @@ CStreaming::RemoveCurrentZonesModels(void) if (ms_currentPedGrp != -1) for (i = 0; i < NUMMODELSPERPEDGROUP; i++) { ms_bIsPedFromPedGroupLoaded[i] = false; - if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != -1 && - CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != MI_MALE01) { + if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != -1) { SetModelIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]); SetModelTxdIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]); } diff --git a/src/core/Timer.cpp b/src/core/Timer.cpp index 5ebe3f53..77f26a8b 100644 --- a/src/core/Timer.cpp +++ b/src/core/Timer.cpp @@ -8,7 +8,7 @@ #include "SpecialFX.h" uint32 CTimer::m_snTimeInMilliseconds; -PauseModeTime CTimer::m_snTimeInMillisecondsPauseMode = 1; +uint32 CTimer::m_snTimeInMillisecondsPauseMode = 1; uint32 CTimer::m_snTimeInMillisecondsNonClipped; uint32 CTimer::m_snPreviousTimeInMilliseconds; @@ -17,7 +17,11 @@ float CTimer::ms_fTimeScale; float CTimer::ms_fTimeStep; float CTimer::ms_fTimeStepNonClipped; bool CTimer::m_UserPause; -bool CTimer::m_CodePause; +bool CTimer::m_CodePause; +#ifdef FIX_BUGS +uint32 CTimer::m_LogicalFrameCounter; +uint32 CTimer::m_LogicalFramesPassed; +#endif uint32 _nCyclesPerMS = 1; @@ -35,10 +39,6 @@ RsTimerType suspendPcTimer; uint32 suspendDepth; -#ifdef FIX_HIGH_FPS_BUGS_ON_FRONTEND -double frameTime; -#endif - void CTimer::Initialise(void) { debug("Initialising CTimer...\n"); @@ -51,6 +51,10 @@ void CTimer::Initialise(void) m_snTimeInMillisecondsNonClipped = 0; m_snPreviousTimeInMilliseconds = 0; m_snTimeInMilliseconds = 1; +#ifdef FIX_BUGS + m_LogicalFrameCounter = 0; + m_LogicalFramesPassed = 0; +#endif #ifdef _WIN32 LARGE_INTEGER perfFreq; @@ -82,6 +86,94 @@ void CTimer::Shutdown(void) ; } +#ifdef FIX_BUGS +void CTimer::Update(void) +{ + static double frameTimeLogical = 0.0; + static double frameTimeFraction = 0.0; + static double frameTimeFractionScaled = 0.0; + double frameTime; + double dblUpdInMs; + + m_snPreviousTimeInMilliseconds = m_snTimeInMilliseconds; + +#ifdef _WIN32 + if ( (double)_nCyclesPerMS != 0.0 ) + { + LARGE_INTEGER pc; + QueryPerformanceCounter(&pc); + + int32 updInCycles = (pc.LowPart - _oldPerfCounter.LowPart); // & 0x7FFFFFFF; pointless + + _oldPerfCounter = pc; + + float updInCyclesScaled = GetIsPaused() ? updInCycles : updInCycles * ms_fTimeScale; + + frameTime = updInCyclesScaled / (double)_nCyclesPerMS; + + dblUpdInMs = (double)updInCycles / (double)_nCyclesPerMS; + } + else +#endif + { + RsTimerType timer = RsTimer(); + + RsTimerType updInMs = timer - oldPcTimer; + + frameTime = (double)updInMs * ms_fTimeScale; + + oldPcTimer = timer; + + dblUpdInMs = (double)updInMs; + } + + // count frames as if we're running at 30 fps + m_LogicalFramesPassed = 0; + frameTimeLogical += dblUpdInMs; + while (frameTimeLogical >= 1000.0 / 30.0) { + frameTimeLogical -= 1000.0 / 30.0; + m_LogicalFramesPassed++; + } + m_LogicalFrameCounter += m_LogicalFramesPassed; + + frameTimeFraction += dblUpdInMs; + frameTimeFractionScaled += frameTime; + + m_snTimeInMillisecondsPauseMode += uint32(frameTimeFraction); + + if ( GetIsPaused() ) + ms_fTimeStep = 0.0f; + else + { + m_snTimeInMilliseconds += uint32(frameTimeFractionScaled); + m_snTimeInMillisecondsNonClipped += uint32(frameTimeFractionScaled); + ms_fTimeStep = frameTime / 1000.0f * 50.0f; + } + frameTimeFraction -= uint32(frameTimeFraction); + frameTimeFractionScaled -= uint32(frameTimeFractionScaled); + + if ( ms_fTimeStep < 0.01f && !GetIsPaused() && !CSpecialFX::bSnapShotActive) + ms_fTimeStep = 0.01f; + + ms_fTimeStepNonClipped = ms_fTimeStep; + + if ( !CRecordDataForGame::IsPlayingBack() ) + { + ms_fTimeStep = Min(3.0f, ms_fTimeStep); + + if ( (m_snTimeInMilliseconds - m_snPreviousTimeInMilliseconds) > 60 ) + m_snTimeInMilliseconds = m_snPreviousTimeInMilliseconds + 60; + } + + if ( CRecordDataForChase::IsRecording() ) + { + ms_fTimeStep = 1.0f; + m_snTimeInMilliseconds = m_snPreviousTimeInMilliseconds + 16; + } + + m_FrameCounter++; +} +#else void CTimer::Update(void) { m_snPreviousTimeInMilliseconds = m_snTimeInMilliseconds; @@ -98,11 +190,7 @@ void CTimer::Update(void) float updInCyclesScaled = GetIsPaused() ? updInCycles : updInCycles * ms_fTimeScale; - // We need that real frame time to fix transparent menu bug. -#ifndef FIX_HIGH_FPS_BUGS_ON_FRONTEND - double -#endif - frameTime = updInCyclesScaled / (double)_nCyclesPerMS; + double frameTime = updInCyclesScaled / (double)_nCyclesPerMS; m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime; @@ -122,16 +210,12 @@ void CTimer::Update(void) RsTimerType updInMs = timer - oldPcTimer; - // We need that real frame time to fix transparent menu bug. -#ifndef FIX_HIGH_FPS_BUGS_ON_FRONTEND - double -#endif - frameTime = (double)updInMs * ms_fTimeScale; + double frameTime = (double)updInMs * ms_fTimeScale; oldPcTimer = timer; - + m_snTimeInMillisecondsPauseMode = m_snTimeInMillisecondsPauseMode + frameTime; - + if ( GetIsPaused() ) ms_fTimeStep = 0.0f; else @@ -163,6 +247,7 @@ void CTimer::Update(void) m_FrameCounter++; } +#endif void CTimer::Suspend(void) { diff --git a/src/core/Timer.h b/src/core/Timer.h index 53591c4f..819bd30c 100644 --- a/src/core/Timer.h +++ b/src/core/Timer.h @@ -1,22 +1,20 @@ #pragma once -#ifdef FIX_HIGH_FPS_BUGS_ON_FRONTEND -#define PauseModeTime double -#else -#define PauseModeTime uint32 -#endif - class CTimer { static uint32 m_snTimeInMilliseconds; - static PauseModeTime m_snTimeInMillisecondsPauseMode; + static uint32 m_snTimeInMillisecondsPauseMode; static uint32 m_snTimeInMillisecondsNonClipped; static uint32 m_snPreviousTimeInMilliseconds; static uint32 m_FrameCounter; static float ms_fTimeScale; static float ms_fTimeStep; static float ms_fTimeStepNonClipped; +#ifdef FIX_BUGS + static uint32 m_LogicalFrameCounter; + static uint32 m_LogicalFramesPassed; +#endif public: static bool m_UserPause; static bool m_CodePause; @@ -35,7 +33,7 @@ public: static void SetTimeInMilliseconds(uint32 t) { m_snTimeInMilliseconds = t; } static uint32 GetTimeInMillisecondsNonClipped(void) { return m_snTimeInMillisecondsNonClipped; } static void SetTimeInMillisecondsNonClipped(uint32 t) { m_snTimeInMillisecondsNonClipped = t; } - static PauseModeTime GetTimeInMillisecondsPauseMode(void) { return m_snTimeInMillisecondsPauseMode; } + static uint32 GetTimeInMillisecondsPauseMode(void) { return m_snTimeInMillisecondsPauseMode; } static void SetTimeInMillisecondsPauseMode(uint32 t) { m_snTimeInMillisecondsPauseMode = t; } static uint32 GetPreviousTimeInMilliseconds(void) { return m_snPreviousTimeInMilliseconds; } static void SetPreviousTimeInMilliseconds(uint32 t) { m_snPreviousTimeInMilliseconds = t; } @@ -67,9 +65,7 @@ public: #ifdef FIX_BUGS static float GetDefaultTimeStep(void) { return 50.0f / 30.0f; } static float GetTimeStepFix(void) { return GetTimeStep() / GetDefaultTimeStep(); } + static uint32 GetLogicalFrameCounter(void) { return m_LogicalFrameCounter; } + static uint32 GetLogicalFramesPassed(void) { return m_LogicalFramesPassed; } #endif }; - -#ifdef FIX_HIGH_FPS_BUGS_ON_FRONTEND -extern double frameTime; -#endif diff --git a/src/core/World.cpp b/src/core/World.cpp index 2683a28d..841aab40 100644 --- a/src/core/World.cpp +++ b/src/core/World.cpp @@ -65,7 +65,7 @@ CWorld::Initialise() void CWorld::Add(CEntity *ent) { - if(ent->IsVehicle() || ent->IsPed()) DMAudio.SetEntityStatus(((CPhysical *)ent)->m_audioEntityId, true); + if(ent->IsVehicle() || ent->IsPed()) DMAudio.SetEntityStatus(((CPhysical *)ent)->m_audioEntityId, TRUE); if(ent->bIsBIGBuilding) ms_bigBuildingsList[ent->m_level].InsertItem(ent); @@ -80,7 +80,7 @@ CWorld::Add(CEntity *ent) void CWorld::Remove(CEntity *ent) { - if(ent->IsVehicle() || ent->IsPed()) DMAudio.SetEntityStatus(((CPhysical *)ent)->m_audioEntityId, false); + if(ent->IsVehicle() || ent->IsPed()) DMAudio.SetEntityStatus(((CPhysical *)ent)->m_audioEntityId, FALSE); if(ent->bIsBIGBuilding) ms_bigBuildingsList[ent->m_level].RemoveItem(ent); @@ -399,8 +399,8 @@ CWorld::ProcessVerticalLine(const CVector &point1, float z2, CColPoint &point, C CVector point2(point1.x, point1.y, z2); int secX = GetSectorIndexX(point1.x); int secY = GetSectorIndexY(point1.y); - secX = clamp(secX, 0, NUMSECTORS_X-1); - secY = clamp(secY, 0, NUMSECTORS_Y-1); + secX = Clamp(secX, 0, NUMSECTORS_X-1); + secY = Clamp(secY, 0, NUMSECTORS_Y-1); return ProcessVerticalLineSector(*GetSector(secX, secY), CColLine(point1, point2), point, entity, checkBuildings, checkVehicles, checkPeds, checkObjects, checkDummies, ignoreSeeThrough, poly); @@ -1486,7 +1486,7 @@ CWorld::CallOffChaseForAreaSectorListVehicles(CPtrList &list, float x1, float y1 CColModel *pColModel = pVehicle->GetColModel(); bool bInsideSphere = false; for(int32 i = 0; i < pColModel->numSpheres; i++) { - CVector pos = pVehicle->m_matrix * pColModel->spheres[i].center; + CVector pos = pVehicle->GetMatrix() * pColModel->spheres[i].center; float fRadius = pColModel->spheres[i].radius; if(pos.x + fRadius > x1 && pos.x - fRadius < x2 && pos.y + fRadius > y1 && pos.y - fRadius < y2) @@ -1803,7 +1803,7 @@ CWorld::RepositionOneObject(CEntity *pEntity) position.z = FindGroundZFor3DCoord(position.x, position.y, position.z + fHeight, nil) - fBoundingBoxMinZ; - pEntity->m_matrix.UpdateRW(); + pEntity->GetMatrix().UpdateRW(); pEntity->UpdateRwFrame(); } else if(IsLightThatNeedsRepositioning(modelId)) { CVector position = pEntity->GetMatrix().GetPosition(); diff --git a/src/core/Zones.cpp b/src/core/Zones.cpp index 85564f03..93eca199 100644 --- a/src/core/Zones.cpp +++ b/src/core/Zones.cpp @@ -8,6 +8,7 @@ #include "Text.h" #include "World.h" #include "Timer.h" +#include "SaveBuf.h" eLevelName CTheZones::m_CurrLevel; int16 CTheZones::FindIndex; @@ -452,6 +453,7 @@ CTheZones::GetZoneInfoForTimeOfDay(const CVector *pos, CZoneInfo *info) assert(d >= 0.0f && d <= 1.0f); n = 1.0f - d; } +#ifdef FIX_BUGS info->carDensity = day->carDensity * d + night->carDensity * n; for(i = 0; i < ARRAY_SIZE(info->carThreshold); i++) info->carThreshold[i] = day->carThreshold[i] * d + night->carThreshold[i] * n; @@ -465,6 +467,22 @@ CTheZones::GetZoneInfoForTimeOfDay(const CVector *pos, CZoneInfo *info) info->copPedThreshold = day->copPedThreshold * d + night->copPedThreshold * n; for(i = 0; i < ARRAY_SIZE(info->gangPedThreshold); i++) info->gangPedThreshold[i] = day->gangPedThreshold[i] * d + night->gangPedThreshold[i] * n; +#else + // This is a complete mess. + info->carDensity = day->carDensity * n + night->carDensity * d; + for(i = 0; i < ARRAY_SIZE(info->carThreshold); i++) + info->carThreshold[i] = night->carThreshold[i] * d + night->carThreshold[i] * n; + for(i = 0; i < ARRAY_SIZE(info->boatThreshold); i++) + info->boatThreshold[i] = night->boatThreshold[i] * d + night->boatThreshold[i] * n; + for(i = 0; i < ARRAY_SIZE(info->gangThreshold); i++) + info->gangThreshold[i] = night->gangThreshold[i] * d + night->gangThreshold[i] * n; + + info->copThreshold = night->copThreshold * d + night->copThreshold * n; + info->pedDensity = night->pedDensity * d + night->pedDensity * n; + info->copPedThreshold = night->copPedThreshold * d + night->copPedThreshold * n; + for(i = 0; i < ARRAY_SIZE(info->gangPedThreshold); i++) + info->gangPedThreshold[i] = night->gangPedThreshold[i] * d + night->gangPedThreshold[i] * n; +#endif } if(CClock::GetIsTimeInRange(5, 19)) info->pedGroup = day->pedGroup; @@ -697,11 +715,11 @@ CTheZones::SaveOneZone(CZone *zone, uint8 **buffer, uint32 *length, eZoneType zo WriteSaveBuf(*buffer, *length, zone->zoneinfoNight); int32 zoneId; - zoneId = GetIndexForZonePointer(zone->child); + zoneId = GetIndexForNavigationZonePointer(zone->child); WriteSaveBuf(*buffer, *length, zoneId); - zoneId = GetIndexForZonePointer(zone->parent); + zoneId = GetIndexForNavigationZonePointer(zone->parent); WriteSaveBuf(*buffer, *length, zoneId); - zoneId = GetIndexForZonePointer(zone->next); + zoneId = GetIndexForNavigationZonePointer(zone->next); WriteSaveBuf(*buffer, *length, zoneId); } @@ -714,9 +732,9 @@ CTheZones::LoadAllZones(uint8 *buffer, uint32 size) uint32 length = 0; CheckSaveHeaderWithLength(buffer, length, 'Z', 'N', 'S', '\0', size - SAVE_HEADER_SIZE); - m_CurrLevel = ReadSaveBuf(buffer, length); - FindIndex = ReadSaveBuf(buffer, length); - ReadSaveBuf(buffer, length); + ReadSaveBuf(&m_CurrLevel, buffer); + ReadSaveBuf(&FindIndex, buffer); + SkipSaveBuf(buffer, 2); for(i = 0; i < ARRAY_SIZE(NavigationZoneArray); i++) LoadOneZone(&NavigationZoneArray[i], &buffer, &length, ZONE_NAVIG); @@ -725,21 +743,21 @@ CTheZones::LoadAllZones(uint8 *buffer, uint32 size) LoadOneZone(&InfoZoneArray[i], &buffer, &length, ZONE_INFO); for(i = 0; i < ARRAY_SIZE(ZoneInfoArray); i++) - ZoneInfoArray[i] = ReadSaveBuf(buffer, length); + ReadSaveBuf(&ZoneInfoArray[i], buffer); - TotalNumberOfNavigationZones = ReadSaveBuf(buffer, length); - TotalNumberOfInfoZones = ReadSaveBuf(buffer, length); - TotalNumberOfZoneInfos = ReadSaveBuf(buffer, length); - ReadSaveBuf(buffer, length); + ReadSaveBuf(&TotalNumberOfNavigationZones, buffer); + ReadSaveBuf(&TotalNumberOfInfoZones, buffer); + ReadSaveBuf(&TotalNumberOfZoneInfos, buffer); + SkipSaveBuf(buffer, 2); for(i = 0; i < ARRAY_SIZE(MapZoneArray); i++) LoadOneZone(&MapZoneArray[i], &buffer, &length, ZONE_MAPZONE); for(i = 0; i < ARRAY_SIZE(AudioZoneArray); i++) - AudioZoneArray[i] = ReadSaveBuf(buffer, length); + ReadSaveBuf(&AudioZoneArray[i], buffer); - TotalNumberOfMapZones = ReadSaveBuf(buffer, length); - NumberOfAudioZones = ReadSaveBuf(buffer, length); + ReadSaveBuf(&TotalNumberOfMapZones, buffer); + ReadSaveBuf(&NumberOfAudioZones, buffer); VALIDATESAVEBUF(size) } @@ -747,26 +765,36 @@ CTheZones::LoadAllZones(uint8 *buffer, uint32 size) void CTheZones::LoadOneZone(CZone *zone, uint8 **buffer, uint32 *length, eZoneType zoneType) { - *(uint32*)&zone->name[0] = ReadSaveBuf(*buffer, *length); - *(uint32*)&zone->name[4] = ReadSaveBuf(*buffer, *length); +#ifdef THIS_IS_STUPID + uint32 part1, part2; + ReadSaveBuf(&part1, *buffer, *length); + ReadSaveBuf(&part2, *buffer, *length); - zone->minx = ReadSaveBuf(*buffer, *length); - zone->miny = ReadSaveBuf(*buffer, *length); - zone->minz = ReadSaveBuf(*buffer, *length); - zone->maxx = ReadSaveBuf(*buffer, *length); - zone->maxy = ReadSaveBuf(*buffer, *length); - zone->maxz = ReadSaveBuf(*buffer, *length); + *(uint64 *)&zone->name[0] = (uint64)part2; + *(uint64 *)&zone->name[0] <<= 32; + *(uint64 *)&zone->name[0] |= (uint64)part1; +#else + for(int i = 0; i < sizeof(zone->name); i++) + ReadSaveBuf(&zone->name[i], *buffer, *length); +#endif - zone->type = ReadSaveBuf(*buffer, *length); - zone->level = ReadSaveBuf(*buffer, *length); - zone->zoneinfoDay = ReadSaveBuf(*buffer, *length); - zone->zoneinfoNight = ReadSaveBuf(*buffer, *length); + ReadSaveBuf(&zone->minx, *buffer, *length); + ReadSaveBuf(&zone->miny, *buffer, *length); + ReadSaveBuf(&zone->minz, *buffer, *length); + ReadSaveBuf(&zone->maxx, *buffer, *length); + ReadSaveBuf(&zone->maxy, *buffer, *length); + ReadSaveBuf(&zone->maxz, *buffer, *length); + + ReadSaveBuf(&zone->type, *buffer, *length); + ReadSaveBuf(&zone->level, *buffer, *length); + ReadSaveBuf(&zone->zoneinfoDay, *buffer, *length); + ReadSaveBuf(&zone->zoneinfoNight, *buffer, *length); int32 zoneId; - zoneId = ReadSaveBuf(*buffer, *length); - zone->child = GetPointerForZoneIndex(zoneId); - zoneId = ReadSaveBuf(*buffer, *length); - zone->parent = GetPointerForZoneIndex(zoneId); - zoneId = ReadSaveBuf(*buffer, *length); - zone->next = GetPointerForZoneIndex(zoneId); + ReadSaveBuf(&zoneId, *buffer, *length); + zone->child = GetPointerForNavigationZoneIndex(zoneId); + ReadSaveBuf(&zoneId, *buffer, *length); + zone->parent = GetPointerForNavigationZoneIndex(zoneId); + ReadSaveBuf(&zoneId, *buffer, *length); + zone->next = GetPointerForNavigationZoneIndex(zoneId); } \ No newline at end of file diff --git a/src/core/Zones.h b/src/core/Zones.h index b987f009..2316eeef 100644 --- a/src/core/Zones.h +++ b/src/core/Zones.h @@ -103,8 +103,8 @@ public: static void SetPedDensity(uint16 zoneid, uint8 day, uint16 peddensity); static void SetPedGroup(uint16 zoneid, uint8 day, uint16 pedgroup); static int16 FindAudioZone(CVector *pos); - static CZone *GetPointerForZoneIndex(ssize_t i) { return i == -1 ? nil : &NavigationZoneArray[i]; } - static ssize_t GetIndexForZonePointer(CZone *zone) { return zone == nil ? -1 : zone - NavigationZoneArray; } + static CZone *GetPointerForNavigationZoneIndex(ssize_t i) { return i == -1 ? nil : &NavigationZoneArray[i]; } + static ssize_t GetIndexForNavigationZonePointer(CZone *zone) { return zone == nil ? -1 : zone - NavigationZoneArray; } static void AddZoneToAudioZoneArray(CZone *zone); static void InitialiseAudioZoneArray(void); static void SaveAllZones(uint8 *buffer, uint32 *length); diff --git a/src/core/common.h b/src/core/common.h index 68a802ab..e5311b26 100644 --- a/src/core/common.h +++ b/src/core/common.h @@ -244,6 +244,12 @@ inline uint32 ldb(uint32 p, uint32 s, uint32 w) #include "maths.h" #include "Vector.h" +#ifdef GTA_PS2 +#include "VuVector.h" +#define CVUVECTOR CVuVector +#else +#define CVUVECTOR CVector +#endif #include "Vector2D.h" #include "Matrix.h" #include "Rect.h" @@ -313,9 +319,9 @@ extern int strncasecmp(const char *str1, const char *str2, size_t len); extern wchar *AllocUnicode(const char*src); -#define clamp(v, low, high) ((v)<(low) ? (low) : (v)>(high) ? (high) : (v)) +#define Clamp(v, low, high) ((v)<(low) ? (low) : (v)>(high) ? (high) : (v)) -#define clamp2(v, center, radius) ((v) < (center) ? Max(v, center - radius) : Min(v, center + radius)) +#define Clamp2(v, center, radius) ((v) < (center) ? Max(v, center - radius) : Min(v, center + radius)) inline float sq(float x) { return x*x; } #define SQR(x) ((x) * (x)) @@ -420,214 +426,3 @@ __inline__ void TRACE(char *f, ...) { } // this is re3 only, and so the function #define CONCAT_(x,y) x##y #define CONCAT(x,y) CONCAT_(x,y) -#ifdef DEBUGMENU -// Tweaking stuff for debugmenu -#define TWEAKPATH ___tw___TWEAKPATH -#define SETTWEAKPATH(path) static const char *___tw___TWEAKPATH = path; -#define TWEAKFUNC(v) static CTweakFunc CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), TWEAKPATH); -#define TWEAKFUNCN(v, name) static CTweakFunc CONCAT(___tw___tweak, __COUNTER__)(&v, name, TWEAKPATH); -#define TWEAKBOOL(v) static CTweakBool CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), TWEAKPATH); -#define TWEAKBOOLN(v, name) static CTweakBool CONCAT(___tw___tweak, __COUNTER__)(&v, name, TWEAKPATH); -#define TWEAKINT32(v, lower, upper, step) static CTweakInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKINT32N(v, lower, upper, step, name) static CTweakInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKUINT32(v, lower, upper, step) static CTweakUInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKUINT32N(v, lower, upper, step, name) static CTweakUInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKINT16(v, lower, upper, step) static CTweakInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKINT16N(v, lower, upper, step, name) static CTweakInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKUINT16(v, lower, upper, step) static CTweakUInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKUINT16N(v, lower, upper, step, name) static CTweakUInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKINT8(v, lower, upper, step) static CTweakInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKINT8N(v, lower, upper, step, name) static CTweakInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKUINT8(v, lower, upper, step) static CTweakUInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKUINT8N(v, lower, upper, step, name) static CTweakUInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKFLOAT(v, lower, upper, step) static CTweakFloat CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); -#define TWEAKFLOATN(v, lower, upper, step, name) static CTweakFloat CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); -#define TWEAKSWITCH(v, lower, upper, str, f) static CTweakSwitch CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, str, f, TWEAKPATH); -#define TWEAKSWITCHN(v, lower, upper, str, f, name) static CTweakSwitch CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, str, f, TWEAKPATH); - -// interface -class CTweakVar -{ -public: - virtual void AddDBG(const char *path) = 0; -}; - -class CTweakVars -{ -public: - static void Add(CTweakVar *var); - static void AddDBG(const char *path); -}; - -class CTweakFunc : public CTweakVar -{ - const char *m_pPath, *m_pVarName; - void (*m_pFunc)(); -public: - CTweakFunc(void (*pFunc)(), const char *strName, const char *strPath) : - m_pPath(strPath), m_pVarName(strName), m_pFunc(pFunc) - { - CTweakVars::Add(this); - } - - void AddDBG(const char *path); -}; - -class CTweakBool : public CTweakVar -{ - const char *m_pPath, *m_pVarName; - bool *m_pBoolVar; -public: - CTweakBool(bool *pBool, const char *strName, const char *strPath) : - m_pPath(strPath), m_pVarName(strName), m_pBoolVar(pBool) - { - CTweakVars::Add(this); - } - - void AddDBG(const char *path); -}; - -class CTweakSwitch : public CTweakVar -{ - const char *m_pPath, *m_pVarName; - void *m_pIntVar; - int32 m_nMin, m_nMax; - const char **m_aStr; - void (*m_pFunc)(); -public: - CTweakSwitch(void *pInt, const char *strName, int32 nMin, int32 nMax, const char **aStr, - void (*pFunc)(), const char *strPath) - : m_pPath(strPath), m_pVarName(strName), m_pIntVar(pInt), m_nMin(nMin), m_nMax(nMax), - m_aStr(aStr) - { - CTweakVars::Add(this); - } - - void AddDBG(const char *path); -}; - -#define _TWEEKCLASS(name, type) \ - class name : public CTweakVar \ - { \ - public: \ - const char *m_pPath, *m_pVarName; \ - type *m_pIntVar, m_nLoawerBound, m_nUpperBound, m_nStep; \ - \ - name(type *pInt, const char *strName, type nLower, type nUpper, type nStep, \ - const char *strPath) \ - : m_pPath(strPath), m_pVarName(strName), m_pIntVar(pInt), \ - m_nLoawerBound(nLower), m_nUpperBound(nUpper), m_nStep(nStep) \ - \ - { \ - CTweakVars::Add(this); \ - } \ - \ - void AddDBG(const char *path); \ - }; - -_TWEEKCLASS(CTweakInt8, int8); -_TWEEKCLASS(CTweakUInt8, uint8); -_TWEEKCLASS(CTweakInt16, int16); -_TWEEKCLASS(CTweakUInt16, uint16); -_TWEEKCLASS(CTweakInt32, int32); -_TWEEKCLASS(CTweakUInt32, uint32); -_TWEEKCLASS(CTweakFloat, float); - -#undef _TWEEKCLASS -#endif - -#ifdef VALIDATE_SAVE_SIZE -extern int32 _saveBufCount; -#define INITSAVEBUF _saveBufCount = 0; -#define VALIDATESAVEBUF(b) assert(_saveBufCount == b); -#else -#define INITSAVEBUF -#define VALIDATESAVEBUF(b) -#endif - -inline void SkipSaveBuf(uint8 *&buf, int32 skip) -{ - buf += skip; -#ifdef VALIDATE_SAVE_SIZE - _saveBufCount += skip; -#endif -} - -inline void SkipSaveBuf(uint8*& buf, uint32 &length, int32 skip) -{ - buf += skip; - length += skip; -#ifdef VALIDATE_SAVE_SIZE - _saveBufCount += skip; -#endif -} - -template -inline const T ReadSaveBuf(uint8 *&buf) -{ - T value; - memcpy(&value, buf, sizeof(T)); - SkipSaveBuf(buf, sizeof(T)); - return value; -} - -template -inline const T ReadSaveBuf(uint8 *&buf, uint32 &length) -{ - T value; - memcpy(&value, buf, sizeof(T)); - SkipSaveBuf(buf, length, sizeof(T)); - return value; -} - -template -inline T *WriteSaveBuf(uint8 *&buf, const T &value) -{ - memcpy(buf, &value, sizeof(T)); - T* result = (T*)buf; - SkipSaveBuf(buf, sizeof(T)); - return result; -} - -template -inline T *WriteSaveBuf(uint8 *&buf, uint32 &length, const T &value) -{ - memcpy(buf, &value, sizeof(T)); - T* result = (T*)buf; - SkipSaveBuf(buf, length, sizeof(T)); - return result; -} - - -#define SAVE_HEADER_SIZE (4*sizeof(char)+sizeof(uint32)) - -#define WriteSaveHeader(buf,a,b,c,d,size) \ - WriteSaveBuf(buf, a);\ - WriteSaveBuf(buf, b);\ - WriteSaveBuf(buf, c);\ - WriteSaveBuf(buf, d);\ - WriteSaveBuf(buf, size); - -#define WriteSaveHeaderWithLength(buf,len,a,b,c,d,size) \ - WriteSaveBuf(buf, len, a);\ - WriteSaveBuf(buf, len, b);\ - WriteSaveBuf(buf, len, c);\ - WriteSaveBuf(buf, len, d);\ - WriteSaveBuf(buf, len, size); - -#define CheckSaveHeader(buf,a,b,c,d,size)\ - assert(ReadSaveBuf(buf) == a);\ - assert(ReadSaveBuf(buf) == b);\ - assert(ReadSaveBuf(buf) == c);\ - assert(ReadSaveBuf(buf) == d);\ - assert(ReadSaveBuf(buf) == size); - -#define CheckSaveHeaderWithLength(buf,len,a,b,c,d,size)\ - assert(ReadSaveBuf(buf,len) == a);\ - assert(ReadSaveBuf(buf,len) == b);\ - assert(ReadSaveBuf(buf,len) == c);\ - assert(ReadSaveBuf(buf,len) == d);\ - assert(ReadSaveBuf(buf,len) == size); - - -void cprintf(char*, ...); diff --git a/src/core/config.h b/src/core/config.h index 0245e1c4..4ac2a317 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -1,7 +1,9 @@ #pragma once -// disables (most) stuff that wasn't in original gta-vc.exe - check section at the bottom of this file -//#define VANILLA_DEFINES +// disables (most) stuff that wasn't in original gta-vc.exe +#ifdef __MWERKS__ +#define VANILLA_DEFINES +#endif enum Config { NUMPLAYERS = 1, @@ -131,7 +133,6 @@ enum Config { NUM_PED_COMMENTS_SLOTS = 20, NUM_SOUNDS_SAMPLES_BANKS = 2, - NUM_SOUNDS_SAMPLES_SLOTS = 27, NUM_AUDIOENTITIES = 250, NUM_AUDIO_REFLECTIONS = 8, @@ -155,8 +156,33 @@ enum Config { //#define GTA_PS2 //#define GTA_XBOX -// This enables things from the PS2 version on PC -#define GTA_PS2_STUFF +// Version defines +#define GTAVC_PS2 400 +#define GTAVC_PC_10 410 +#define GTAVC_PC_11 411 +#define GTAVC_PC_JAP 412 +// TODO? maybe something for xbox or android? + +#define GTA_VERSION GTAVC_PC_11 + +// TODO(MIAMI): someone ought to find and check out uses of these defines: +//#define GTA3_STEAM_PATCH +//#define GTAVC_JP_PATCH + +#if defined GTA_PS2 +# define GTA_PS2_STUFF +# define RANDOMSPLASH +//# define USE_CUSTOM_ALLOCATOR +# define VU_COLLISION +# define PS2_MENU +#elif defined GTA_PC +# define PC_PLAYER_CONTROLS // mouse player/cam mode +# define GTA_REPLAY +# define GTA_SCENE_EDIT +# define PC_MENU +# define PC_WATER +#elif defined GTA_XBOX +#endif // This is enabled for all released games. // any debug stuff that isn't left in any game is not in FINAL @@ -175,28 +201,35 @@ enum Config { #define FINAL #endif -// Version defines -#define GTAVC_PS2 400 -#define GTAVC_PC_10 410 -#define GTAVC_PC_11 411 -#define GTAVC_PC_JAP 412 -// TODO? maybe something for xbox or android? +// these are placed here to work with VANILLA_DEFINES for compatibility +#define NO_CDCHECK // skip audio CD check +#define DEFAULT_NATIVE_RESOLUTION // Set default video mode to your native resolution (fixes Windows 10 launch) -#define GTA_VERSION GTAVC_PC_11 +#ifdef VANILLA_DEFINES +#if !defined(_WIN32) || defined(__LP64__) || defined(_WIN64) +#error Vanilla can only be built for win-x86 +#endif -// TODO(MIAMI): someone ought to find and check out uses of these defines: -//#define GTA3_STEAM_PATCH -//#define GTAVC_JP_PATCH +#define FINAL +#define MASTER +//#define USE_MY_DOCUMENTS +#define THIS_IS_STUPID +#define DONT_FIX_REPLAY_BUGS +#define USE_TXD_CDIMAGE // generate and load textures from txd.img +//#define USE_TEXTURE_POOL // not possible because R* used custom RW33 +#else +// This enables things from the PS2 version on PC +#define GTA_PS2_STUFF // quality of life fixes that should also be in FINAL #define NASTY_GAME // nasty game for all languages -#define NO_CDCHECK // those infamous texts #define DRAW_GAME_VERSION_TEXT #ifdef DRAW_GAME_VERSION_TEXT // unlike R* development builds, ours has runtime switch on debug menu & .ini, and disabled as default. - #define USE_OUR_VERSIONING // If you disable this then game will fetch version from peds.col, as R* did while in development + // If you disable this then game will fetch version from peds.col, as R* did while in development. + //#define USE_OUR_VERSIONING // enabled from buildfiles by default #endif // Memory allocation and compression @@ -204,21 +237,10 @@ enum Config { //#define COMPRESSED_COL_VECTORS // use compressed vectors for collision vertices //#define ANIM_COMPRESSION // only keep most recently used anims uncompressed -#if defined GTA_PS2 -# define GTA_PS2_STUFF -# define RANDOMSPLASH -//# define USE_CUSTOM_ALLOCATOR -# define VU_COLLISION -#elif defined GTA_PC -# ifdef GTA_PS2_STUFF -# define USE_PS2_RAND -# define RANDOMSPLASH // use random splash as on PS2 -# define PS2_MATFX -# endif -# define PC_PLAYER_CONTROLS // mouse player/cam mode -# define GTA_REPLAY -# define GTA_SCENE_EDIT -#elif defined GTA_XBOX +#if defined GTA_PC && defined GTA_PS2_STUFF +# define USE_PS2_RAND +# define RANDOMSPLASH // use random splash as on PS2 +# define PS2_MATFX #endif #ifdef VU_COLLISION @@ -232,7 +254,6 @@ enum Config { // not in master builds #define VALIDATE_SAVE_SIZE - #define NO_MOVIES // disable intro videos #define DEBUGMENU #endif @@ -246,10 +267,12 @@ enum Config { #endif #define FIX_BUGS // fixes bugs that we've came across during reversing. You can undefine this only on release builds. -//#define MORE_LANGUAGES // Add more translations to the game -#define COMPATIBLE_SAVES // this allows changing structs while keeping saves compatible +#define MORE_LANGUAGES // Add more translations to the game +#define COMPATIBLE_SAVES // this allows changing structs while keeping saves compatible, and keeps saves compatible between platforms +#define FIX_INCOMPATIBLE_SAVES // try to fix incompatible saves, requires COMPATIBLE_SAVES #define LOAD_INI_SETTINGS // as the name suggests. fundamental for CUSTOM_FRONTEND_OPTIONS -#define FIX_HIGH_FPS_BUGS_ON_FRONTEND + +#define NO_MOVIES // add option to disable intro videos #if defined(__LP64__) || defined(_WIN64) #define FIX_BUGS_64 // Must have fixes to be able to run 64 bit build @@ -257,7 +280,7 @@ enum Config { #define ASCII_STRCMP // use faster ascii str comparisons -#if !defined _WIN32 || defined __MWERKS__ || defined __MINGW32__ || defined VANILLA_DEFINES +#if !defined _WIN32 || defined __MINGW32__ #undef ASCII_STRCMP #endif @@ -294,11 +317,11 @@ enum Config { #endif // Water & Particle -// #define PC_WATER +#undef PC_WATER #define WATER_CHEATS -//#define USE_CUTSCENE_SHADOW_FOR_PED -#define DISABLE_CUTSCENE_SHADOWS +//#define USE_CUTSCENE_SHADOW_FOR_PED // requires COMPATIBLE_SAVES +//#define DISABLE_CUTSCENE_SHADOWS // Pad #if !defined(RW_GL3) && defined(_WIN32) @@ -399,9 +422,12 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually // Audio #define RADIO_SCROLL_TO_PREV_STATION // Won't work without FIX_BUGS #define AUDIO_CACHE // cache sound lengths to speed up the cold boot -//#define PS2_AUDIO_PATHS // changes audio paths for cutscenes and radio to PS2 paths (needs vbdec on MSS builds) +#define PS2_AUDIO_CHANNELS // increases the maximum number of audio channels to PS2 value of 43 (PC has 28 originally) +#define PS2_AUDIO_PATHS // changes audio paths for cutscenes and radio to PS2 paths (needs vbdec on MSS builds) #define AUDIO_OAL_USE_SNDFILE // use libsndfile to decode WAVs instead of our internal decoder #define AUDIO_OAL_USE_MPG123 // use mpg123 to support mp3 files +#define MULTITHREADED_AUDIO // for streams. requires C++11 or later +#define PAUSE_RADIO_IN_FRONTEND // pause radio when game is paused #ifdef AUDIO_OPUS #define AUDIO_OAL_USE_OPUS // enable support of opus files @@ -426,6 +452,7 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually #ifdef SQUEEZE_PERFORMANCE #undef PS2_ALPHA_TEST #undef NO_ISLAND_LOADING + #undef PS2_AUDIO_CHANNELS #endif #ifdef __WIIU__ @@ -438,92 +465,9 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually #define INI_BUFFER_SIZE (8*1024) // 8k should be enough for the ini file #endif -// ------- - -#if defined __MWERKS__ || defined VANILLA_DEFINES -#define FINAL -#undef CHATTYSPLASH -#undef TIMEBARS - -#define MASTER -#undef VALIDATE_SAVE_SIZE -#undef NO_MOVIES -#undef DEBUGMENU - -#undef DRAW_GAME_VERSION_TEXT - -//#undef NASTY_GAME -//#undef NO_CDCHECK - -#undef GTA_PS2_STUFF -#undef USE_PS2_RAND -#undef RANDOMSPLASH -#undef PS2_MATFX - -#undef FIX_BUGS -#define THIS_IS_STUPID -#undef MORE_LANGUAGES -#undef COMPATIBLE_SAVES -#undef LOAD_INI_SETTINGS -#undef FIX_HIGH_FPS_BUGS_ON_FRONTEND - -#undef ASPECT_RATIO_SCALE -#undef PROPER_SCALING -//#undef DEFAULT_NATIVE_RESOLUTION -#undef PS2_ALPHA_TEST -#undef IMPROVED_VIDEOMODE -#undef DISABLE_LOADING_SCREEN -#undef DISABLE_VSYNC_ON_TEXTURE_CONVERSION - -#undef FIX_SPRITES - -#define PC_WATER -#undef WATER_CHEATS - +// if these defines are enabled saves are not vanilla compatible without COMPATIBLE_SAVES +#ifndef COMPATIBLE_SAVES #undef USE_CUTSCENE_SHADOW_FOR_PED -#undef DISABLE_CUTSCENE_SHADOWS - -#undef XINPUT -#undef DETECT_PAD_INPUT_SWITCH -#undef KANGAROO_CHEAT -#undef RESTORE_ALLCARSHELI_CHEAT -#undef BETTER_ALLCARSAREDODO_CHEAT -#undef WALLCLIMB_CHEAT -#undef REGISTER_START_BUTTON -#undef BIND_VEHICLE_FIREWEAPON -#undef BUTTON_ICONS - -#undef FIX_RADAR -#undef RADIO_OFF_TEXT - -#undef MAP_ENHANCEMENTS -#undef GAMEPAD_MENU -#undef MUCH_SHORTER_OUTRO_SCREEN -#undef CUSTOM_FRONTEND_OPTIONS - -#undef GRAPHICS_MENU_OPTIONS -#undef NO_ISLAND_LOADING -#undef CUTSCENE_BORDERS_SWITCH -#undef MULTISAMPLING -#undef INVERT_LOOK_FOR_PAD - -#undef USE_DEBUG_SCRIPT_LOADER -#undef USE_MEASUREMENTS_IN_METERS -#undef USE_PRECISE_MEASUREMENT_CONVERTION -#undef SUPPORT_JAPANESE_SCRIPT -#undef MISSION_REPLAY -#undef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT -#undef USE_BASIC_SCRIPT_DEBUG_OUTPUT - -#define DONT_FIX_REPLAY_BUGS - -#undef EXPLODING_AIRTRAIN -#undef CPLANE_ROTORS -#undef CAMERA_PICKUP -#undef CANCELLABLE_CAR_ENTER -#undef IMPROVED_CAMERA -#undef FREE_CAM -#undef BIG_IMG - -#undef RADIO_SCROLL_TO_PREV_STATION #endif + +#endif // VANILLA_DEFINES diff --git a/src/core/main.cpp b/src/core/main.cpp index f6d27bd9..e84c6eeb 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -95,7 +95,10 @@ bool gbModelViewer; bool gbShowTimebars; #endif #ifdef DRAW_GAME_VERSION_TEXT -bool gDrawVersionText; // Our addition, we think it was always enabled on !MASTER builds +bool gbDrawVersionText; // Our addition, we think it was always enabled on !MASTER builds +#endif +#ifdef NO_MOVIES +bool gbNoMovies; #endif volatile int32 frameCount; @@ -376,7 +379,7 @@ DoRWStuffEndOfFrame(void) } #else if (CPad::GetPad(1)->GetLeftShockJustDown() || CPad::GetPad(0)->GetFJustDown(11)) { - sprintf(s, "screen_%11lld.png", time(nil)); + sprintf(s, "screen_%011lld.png", time(nil)); RwGrabScreen(Scene.camera, s); } #endif @@ -1068,7 +1071,7 @@ DisplayGameDebugText() #ifdef DRAW_GAME_VERSION_TEXT wchar ver[200]; - if(gDrawVersionText) // This realtime switch is our thing + if(gbDrawVersionText) // This realtime switch is our thing { #ifdef USE_OUR_VERSIONING @@ -1128,11 +1131,14 @@ DisplayGameDebugText() #endif // #ifdef DRAW_GAME_VERSION_TEXT FrameSamples++; -#ifdef FIX_HIGH_FPS_BUGS_ON_FRONTEND - FramesPerSecondCounter += frameTime / 1000.f; // convert to seconds +#ifdef FIX_BUGS + // this is inaccurate with over 1000 fps + static uint32 PreviousTimeInMillisecondsPauseMode = 0; + FramesPerSecondCounter += (CTimer::GetTimeInMillisecondsPauseMode() - PreviousTimeInMillisecondsPauseMode) / 1000.0f; // convert to seconds + PreviousTimeInMillisecondsPauseMode = CTimer::GetTimeInMillisecondsPauseMode(); FramesPerSecond = FrameSamples / FramesPerSecondCounter; #else - FramesPerSecondCounter += 1000.0f / (CTimer::GetTimeStepNonClippedInSeconds() * 1000.0f); + FramesPerSecondCounter += 1000.0f / CTimer::GetTimeStepNonClippedInMilliseconds(); FramesPerSecond = FramesPerSecondCounter / FrameSamples; #endif @@ -1261,6 +1267,7 @@ if(gbRenderEverythingBarRoads) void RenderScene_new(void) { + PUSH_RENDERGROUP("RenderScene_new"); CClouds::Render(); DoRWRenderHorizon(); @@ -1268,6 +1275,7 @@ RenderScene_new(void) DefinedState(); // CMattRenderer::ResetRenderStates // moved CRenderer::RenderBoats to before transparent water + POP_RENDERGROUP(); } // TODO @@ -1275,11 +1283,14 @@ bool FredIsInFirstPersonCam(void) { return false; } void RenderEffects_new(void) { + PUSH_RENDERGROUP("RenderEffects_new"); +/* // stupid to do this before the whole world is drawn! CShadows::RenderStaticShadows(); // CRenderer::GenerateEnvironmentMap CShadows::RenderStoredShadows(); CSkidmarks::Render(); CRubbish::Render(); +*/ // these aren't really effects DefinedState(); @@ -1302,6 +1313,13 @@ if(gbRenderFadingInEntities) CRenderer::RenderFadingInEntities(); // actual effects here + + // from above + CShadows::RenderStaticShadows(); + CShadows::RenderStoredShadows(); + CSkidmarks::Render(); + CRubbish::Render(); + CGlass::Render(); // CMattRenderer::ResetRenderStates DefinedState(); @@ -1319,6 +1337,7 @@ if(gbRenderFadingInEntities) CPointLights::RenderFogEffect(); CMovingThings::Render(); CRenderer::RenderFirstPersonVehicle(); + POP_RENDERGROUP(); } #endif @@ -1331,6 +1350,7 @@ RenderScene(void) return; } #endif + PUSH_RENDERGROUP("RenderScene"); CClouds::Render(); DoRWRenderHorizon(); CRenderer::RenderRoads(); @@ -1346,11 +1366,13 @@ RenderScene(void) RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE); CWeather::RenderRainStreaks(); CCoronas::RenderSunReflection(); + POP_RENDERGROUP(); } void RenderDebugShit(void) { + PUSH_RENDERGROUP("RenderDebugShit"); CTheScripts::RenderTheScriptDebugLines(); #ifndef FINAL if(gbShowCollisionLines) @@ -1359,6 +1381,7 @@ RenderDebugShit(void) CDebug::DrawLines(); DefinedState(); #endif + POP_RENDERGROUP(); } void @@ -1370,6 +1393,7 @@ RenderEffects(void) return; } #endif + PUSH_RENDERGROUP("RenderEffects"); CGlass::Render(); CWaterCannons::Render(); CSpecialFX::Render(); @@ -1386,11 +1410,13 @@ RenderEffects(void) CPointLights::RenderFogEffect(); CMovingThings::Render(); CRenderer::RenderFirstPersonVehicle(); + POP_RENDERGROUP(); } void Render2dStuff(void) { + PUSH_RENDERGROUP("Render2dStuff"); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); @@ -1462,6 +1488,7 @@ Render2dStuff(void) #ifdef DEBUGMENU DebugMenuRender(); #endif + POP_RENDERGROUP(); } void @@ -1469,7 +1496,9 @@ RenderMenus(void) { if (FrontEndMenuManager.m_bMenuActive) { + PUSH_RENDERGROUP("RenderMenus"); FrontEndMenuManager.DrawFrontEnd(); + POP_RENDERGROUP(); } #ifndef MASTER else @@ -1480,6 +1509,7 @@ RenderMenus(void) void Render2dStuffAfterFade(void) { + PUSH_RENDERGROUP("Render2dStuffAfterFade"); #ifndef MASTER DisplayGameDebugText(); #endif @@ -1490,6 +1520,7 @@ Render2dStuffAfterFade(void) CHud::DrawAfterFade(); CFont::DrawFonts(); CCredits::Render(); + POP_RENDERGROUP(); } void diff --git a/src/core/main.h b/src/core/main.h index 9f181101..803afb14 100644 --- a/src/core/main.h +++ b/src/core/main.h @@ -1,5 +1,16 @@ #pragma once +#ifndef FINAL +// defined in RwHelpder.cpp +void PushRendergroup(const char *name); +void PopRendergroup(void); +#define PUSH_RENDERGROUP(str) PushRendergroup(str) +#define POP_RENDERGROUP() PopRendergroup() +#else +#define PUSH_RENDERGROUP(str) +#define POP_RENDERGROUP() +#endif + struct GlobalScene { RpWorld *world; @@ -55,3 +66,11 @@ void SaveINIControllerSettings(); extern bool gbNewRenderer; bool FredIsInFirstPersonCam(void); #endif + +#ifdef DRAW_GAME_VERSION_TEXT +extern bool gbDrawVersionText; +#endif + +#ifdef NO_MOVIES +extern bool gbNoMovies; +#endif diff --git a/src/core/re3.cpp b/src/core/re3.cpp index 26cf640f..01b18044 100644 --- a/src/core/re3.cpp +++ b/src/core/re3.cpp @@ -95,16 +95,51 @@ mysrand(unsigned int seed) #ifdef CUSTOM_FRONTEND_OPTIONS #include "frontendoption.h" + + +#ifdef MORE_LANGUAGES +void LangPolSelect(int8 action) +{ + if (action == FEOPTION_ACTION_SELECT) { + FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_POLISH; + FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true; + FrontEndMenuManager.InitialiseChangedLanguageSettings(); + FrontEndMenuManager.SaveSettings(); + } +} + +void LangRusSelect(int8 action) +{ + if (action == FEOPTION_ACTION_SELECT) { + FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_RUSSIAN; + FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true; + FrontEndMenuManager.InitialiseChangedLanguageSettings(); + FrontEndMenuManager.SaveSettings(); + } +} + +void LangJapSelect(int8 action) +{ + if (action == FEOPTION_ACTION_SELECT) { + FrontEndMenuManager.m_PrefsLanguage = CMenuManager::LANGUAGE_JAPANESE; + FrontEndMenuManager.m_bFrontEnd_ReloadObrTxtGxt = true; + FrontEndMenuManager.InitialiseChangedLanguageSettings(); + FrontEndMenuManager.SaveSettings(); + } +} +#endif + void CustomFrontendOptionsPopulate(void) { // Moved to an array in MenuScreensCustom.cpp, but APIs are still available. see frontendoption.h + int fd; // These work only if we have neo folder, so they're dynamically added #ifdef EXTENDED_PIPELINES const char *vehPipelineNames[] = { "FED_MFX", "FED_NEO" }; const char *off_on[] = { "FEM_OFF", "FEM_ON" }; - int fd = CFileMgr::OpenFile("neo/neo.txd","r"); + fd = CFileMgr::OpenFile("neo/neo.txd","r"); if (fd) { #ifdef GRAPHICS_MENU_OPTIONS FrontendOptionSetCursor(MENUPAGE_GRAPHICS_SETTINGS, -3, false); @@ -121,22 +156,72 @@ CustomFrontendOptionsPopulate(void) #endif CFileMgr::CloseFile(fd); } +#endif + // Add outsourced language translations, if files are found +#ifdef MORE_LANGUAGES + int fd2; + FrontendOptionSetCursor(MENUPAGE_LANGUAGE_SETTINGS, 5, false); +#if 0 + if (fd = CFileMgr::OpenFile("text/polish.gxt")) { + if (fd2 = CFileMgr::OpenFile("models/fonts_p.txd")) { + FrontendOptionAddDynamic("FEL_POL", 0, 0, MENUALIGN_CENTER, nil, nil, LangPolSelect, nil, nil); + CFileMgr::CloseFile(fd2); + } + CFileMgr::CloseFile(fd); + } +#endif + + if (fd = CFileMgr::OpenFile("text/russian.gxt")) { + if (fd2 = CFileMgr::OpenFile("models/fonts_r.txd")) { + FrontendOptionAddDynamic("FEL_RUS", 0, 0, MENUALIGN_CENTER, nil, nil, LangRusSelect, nil, nil); + CFileMgr::CloseFile(fd2); + } + CFileMgr::CloseFile(fd); + } + +#if 0 + if (fd = CFileMgr::OpenFile("text/japanese.gxt")) { + if (fd2 = CFileMgr::OpenFile("models/fonts_j.txd")) { + FrontendOptionAddDynamic("FEL_JAP", 0, 0, MENUALIGN_CENTER, nil, nil, LangJapSelect, nil, nil); + CFileMgr::CloseFile(fd2); + } + CFileMgr::CloseFile(fd); + } +#endif #endif } #endif #ifdef LOAD_INI_SETTINGS -#include "ini_parser.hpp" +#define MINI_CASE_SENSITIVE +#include "ini.h" + +#ifdef WIIU_CHANNEL +mINI::INIFile ini("/vol/external01/wiiu/apps/reVC/reVC.ini"); +#else +mINI::INIFile ini("reVC.ini"); +#endif + +mINI::INIStructure cfg; -linb::ini cfg; bool ReadIniIfExists(const char *cat, const char *key, uint32 *out) { - std::string strval = cfg.get(cat, key, "\xBA"); - const char *value = strval.c_str(); - char *endPtr; - if (value && value[0] != '\xBA') { - *out = strtoul(value, &endPtr, 0); + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + char *endPtr; + *out = strtoul(section.get(key).c_str(), &endPtr, 0); + return true; + } + return false; +} + +bool ReadIniIfExists(const char *cat, const char *key, uint8 *out) +{ + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + char *endPtr; + *out = strtoul(section.get(key).c_str(), &endPtr, 0); return true; } return false; @@ -144,11 +229,10 @@ bool ReadIniIfExists(const char *cat, const char *key, uint32 *out) bool ReadIniIfExists(const char *cat, const char *key, bool *out) { - std::string strval = cfg.get(cat, key, "\xBA"); - const char *value = strval.c_str(); - char *endPtr; - if (value && value[0] != '\xBA') { - *out = strtoul(value, &endPtr, 0); + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + char *endPtr; + *out = strtoul(section.get(key).c_str(), &endPtr, 0); return true; } return false; @@ -156,11 +240,10 @@ bool ReadIniIfExists(const char *cat, const char *key, bool *out) bool ReadIniIfExists(const char *cat, const char *key, int32 *out) { - std::string strval = cfg.get(cat, key, "\xBA"); - const char *value = strval.c_str(); - char *endPtr; - if (value && value[0] != '\xBA') { - *out = strtol(value, &endPtr, 0); + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + char *endPtr; + *out = strtol(section.get(key).c_str(), &endPtr, 0); return true; } return false; @@ -168,11 +251,10 @@ bool ReadIniIfExists(const char *cat, const char *key, int32 *out) bool ReadIniIfExists(const char *cat, const char *key, int8 *out) { - std::string strval = cfg.get(cat, key, "\xBA"); - const char *value = strval.c_str(); - char *endPtr; - if (value && value[0] != '\xBA') { - *out = strtol(value, &endPtr, 0); + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + char *endPtr; + *out = strtol(section.get(key).c_str(), &endPtr, 0); return true; } return false; @@ -180,10 +262,10 @@ bool ReadIniIfExists(const char *cat, const char *key, int8 *out) bool ReadIniIfExists(const char *cat, const char *key, float *out) { - std::string strval = cfg.get(cat, key, "\xBA"); - const char *value = strval.c_str(); - if (value && value[0] != '\xBA') { - *out = atof(value); + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + char *endPtr; + *out = strtof(section.get(key).c_str(), &endPtr); return true; } return false; @@ -191,10 +273,10 @@ bool ReadIniIfExists(const char *cat, const char *key, float *out) bool ReadIniIfExists(const char *cat, const char *key, char *out, int size) { - std::string strval = cfg.get(cat, key, "\xBA"); - const char *value = strval.c_str(); - if (value && value[0] != '\xBA') { - strncpy(out, value, size); + mINI::INIMap section = cfg.get(cat); + if (section.has(key)) { + strncpy(out, section.get(key).c_str(), size - 1); + out[size - 1] = '\0'; return true; } return false; @@ -202,42 +284,42 @@ bool ReadIniIfExists(const char *cat, const char *key, char *out, int size) void StoreIni(const char *cat, const char *key, uint32 val) { - char temp[10]; -sprintf(temp, "%u", val); - cfg.set(cat, key, temp); + char temp[11]; + sprintf(temp, "%u", val); + cfg[cat][key] = temp; } void StoreIni(const char *cat, const char *key, uint8 val) { - char temp[10]; - sprintf(temp, "%u", (uint32)val); - cfg.set(cat, key, temp); + char temp[11]; + sprintf(temp, "%u", val); + cfg[cat][key] = temp; } void StoreIni(const char *cat, const char *key, int32 val) { - char temp[10]; + char temp[11]; sprintf(temp, "%d", val); - cfg.set(cat, key, temp); + cfg[cat][key] = temp; } void StoreIni(const char *cat, const char *key, int8 val) { - char temp[10]; - sprintf(temp, "%d", (int32)val); - cfg.set(cat, key, temp); + char temp[11]; + sprintf(temp, "%d", val); + cfg[cat][key] = temp; } void StoreIni(const char *cat, const char *key, float val) { - char temp[10]; + char temp[50]; sprintf(temp, "%f", val); - cfg.set(cat, key, temp); + cfg[cat][key] = temp; } void StoreIni(const char *cat, const char *key, char *val, int size) { - cfg.set(cat, key, val); + cfg[cat][key] = val; } const char *iniControllerActions[] = { "PED_FIREWEAPON", "PED_CYCLE_WEAPON_RIGHT", "PED_CYCLE_WEAPON_LEFT", "GO_FORWARD", "GO_BACK", "GO_LEFT", "GO_RIGHT", "PED_SNIPER_ZOOM_IN", @@ -299,7 +381,7 @@ void LoadINIControllerSettings() #endif // force to default GTA behaviour (never overwrite bindings on joy change/initialization) if user init'ed/set bindings before we introduced that if (!ReadIniIfExists("Controller", "PadButtonsInited", &ControlsManager.ms_padButtonsInited)) { - ControlsManager.ms_padButtonsInited = cfg.category_size("Bindings") != 0 ? 16 : 0; + ControlsManager.ms_padButtonsInited = cfg.get("Bindings").size() != 0 ? 16 : 0; } for (int32 i = 0; i < MAX_CONTROLLERACTIONS; i++) { @@ -401,20 +483,13 @@ void SaveINIControllerSettings() #endif #endif StoreIni("Controller", "PadButtonsInited", ControlsManager.ms_padButtonsInited); -#ifdef WIIU_CHANNEL - cfg.write_file("/vol/external01/wiiu/apps/reVC/reVC.ini"); -#else - cfg.write_file("reVC.ini"); -#endif + + ini.write(cfg); } bool LoadINISettings() { -#ifdef WIIU_CHANNEL - if (!cfg.load_file("/vol/external01/wiiu/apps/reVC/reVC.ini")) -#else - if (!cfg.load_file("reVC.ini")) -#endif + if (!ini.read(cfg)) return false; #ifdef IMPROVED_VIDEOMODE @@ -479,12 +554,14 @@ bool LoadINISettings() ReadIniIfExists("Draw", "FixSprites", &CDraw::ms_bFixSprites); #endif #ifdef DRAW_GAME_VERSION_TEXT - extern bool gDrawVersionText; - ReadIniIfExists("General", "DrawVersionText", &gDrawVersionText); + ReadIniIfExists("General", "DrawVersionText", &gbDrawVersionText); +#endif +#ifdef NO_MOVIES + ReadIniIfExists("General", "NoMovies", &gbNoMovies); #endif #ifdef CUSTOM_FRONTEND_OPTIONS - bool migrate = cfg.category_size("FrontendOptions") != 0; + bool migrate = cfg.get("FrontendOptions").size() != 0; for (int i = 0; i < MENUPAGES; i++) { for (int j = 0; j < NUM_MENUROWS; j++) { CMenuScreenCustom::CMenuEntry &option = aScreens[i].m_aEntries[j]; @@ -497,7 +574,7 @@ bool LoadINISettings() // Migrate from old .ini to new .ini if (migrate && ReadIniIfExists("FrontendOptions", option.m_CFO->save, option.m_CFO->value)) - cfg.remove("FrontendOptions", option.m_CFO->save); + cfg["FrontendOptions"].remove(option.m_CFO->save); else ReadIniIfExists(option.m_CFO->saveCat, option.m_CFO->save, option.m_CFO->value); @@ -576,8 +653,10 @@ void SaveINISettings() StoreIni("Draw", "FixSprites", CDraw::ms_bFixSprites); #endif #ifdef DRAW_GAME_VERSION_TEXT - extern bool gDrawVersionText; - StoreIni("General", "DrawVersionText", gDrawVersionText); + StoreIni("General", "DrawVersionText", gbDrawVersionText); +#endif +#ifdef NO_MOVIES + StoreIni("General", "NoMovies", gbNoMovies); #endif #ifdef CUSTOM_FRONTEND_OPTIONS for (int i = 0; i < MENUPAGES; i++) { @@ -594,11 +673,7 @@ void SaveINISettings() } #endif -#ifdef WIIU_CHANNEL - cfg.write_file("/vol/external01/wiiu/apps/reVC/reVC.ini"); -#else - cfg.write_file("reVC.ini"); -#endif + ini.write(cfg); } #endif @@ -983,6 +1058,11 @@ extern bool gbRenderWorld2; #ifndef MASTER DebugMenuAddVarBool8("Render", "Occlusion debug", &bDispayOccDebugStuff, nil); #endif +#ifdef LIBRW + DebugMenuAddVarBool32("Render", "MatFX env map apply light", &rw::MatFX::envMapApplyLight, nil); + DebugMenuAddVarBool32("Render", "MatFX env map flip U", &rw::MatFX::envMapFlipU, nil); + DebugMenuAddVarBool32("Render", "MatFX env map use matcolor", &rw::MatFX::envMapUseMatColor, nil); +#endif #ifdef EXTENDED_PIPELINES static const char *vehpipenames[] = { "MatFX", "Neo" }; e = DebugMenuAddVar("Render", "Vehicle Pipeline", &CustomPipes::VehiclePipeSwitch, nil, @@ -1011,14 +1091,14 @@ extern bool gbRenderWorld2; #ifdef DRAW_GAME_VERSION_TEXT - extern bool gDrawVersionText; - DebugMenuAddVarBool8("Debug", "Version Text", &gDrawVersionText, nil); + DebugMenuAddVarBool8("Debug", "Version Text", &gbDrawVersionText, nil); #endif DebugMenuAddVarBool8("Debug", "Show DebugStuffInRelease", &gbDebugStuffInRelease, nil); #ifdef TIMEBARS DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil); #endif #ifndef FINAL + DebugMenuAddVarBool8("Debug", "Use debug render groups", &bDebugRenderGroups, nil); DebugMenuAddVarBool8("Debug", "Print Memory Usage", &gbPrintMemoryUsage, nil); #ifdef USE_CUSTOM_ALLOCATOR DebugMenuAddCmd("Debug", "Parse Heap", ParseHeap); @@ -1124,7 +1204,7 @@ void re3_assert(const char *expr, const char *filename, unsigned int lineno, con strcat_s(re3_buff, re3_buffsize, "(Press Retry to debug the application)"); - nCode = ::MessageBoxA(nil, re3_buff, "RE3 Assertion Failed!", + nCode = ::MessageBoxA(nil, re3_buff, "REVC Assertion Failed!", MB_ABORTRETRYIGNORE|MB_ICONHAND|MB_SETFOREGROUND|MB_TASKMODAL); if (nCode == IDABORT) @@ -1151,7 +1231,7 @@ void re3_assert(const char *expr, const char *filename, unsigned int lineno, con OSFatal(buf); #else // TODO - printf("\nRE3 ASSERT FAILED\n\tFile: %s\n\tLine: %d\n\tFunction: %s\n\tExpression: %s\n",filename,lineno,func,expr); + printf("\nREVC ASSERT FAILED\n\tFile: %s\n\tLine: %d\n\tFunction: %s\n\tExpression: %s\n",filename,lineno,func,expr); assert(false); #endif } @@ -1207,7 +1287,7 @@ void re3_usererror(const char *format, ...) vsprintf_s(re3_buff, re3_buffsize, format, va); va_end(va); - ::MessageBoxA(nil, re3_buff, "RE3 Error!", + ::MessageBoxA(nil, re3_buff, "REVC Error!", MB_OK|MB_ICONHAND|MB_SETFOREGROUND|MB_TASKMODAL); raise(SIGABRT); @@ -1215,9 +1295,9 @@ void re3_usererror(const char *format, ...) #else vsprintf(re3_buff, format, va); #ifdef __WIIU__ - WHBLogPrintf("\nRE3 Error!\n\t%s\n",re3_buff); + WHBLogPrintf("\nREVC Error!\n\t%s\n",re3_buff); #else - printf("\nRE3 Error!\n\t%s\n",re3_buff); + printf("\nREVC Error!\n\t%s\n",re3_buff); #endif assert(false); #endif diff --git a/src/entities/Dummy.cpp b/src/entities/Dummy.cpp index 9878b595..d62d2434 100644 --- a/src/entities/Dummy.cpp +++ b/src/entities/Dummy.cpp @@ -4,8 +4,8 @@ #include "World.h" #include "Dummy.h" -void *CDummy::operator new(size_t sz) { return CPools::GetDummyPool()->New(); } -void CDummy::operator delete(void *p, size_t sz) { CPools::GetDummyPool()->Delete((CDummy*)p); } +void *CDummy::operator new(size_t sz) throw() { return CPools::GetDummyPool()->New(); } +void CDummy::operator delete(void *p, size_t sz) throw() { CPools::GetDummyPool()->Delete((CDummy*)p); } void CDummy::Add(void) diff --git a/src/entities/Dummy.h b/src/entities/Dummy.h index 84b1ce1a..9b73eefc 100644 --- a/src/entities/Dummy.h +++ b/src/entities/Dummy.h @@ -12,8 +12,8 @@ public: void Add(void); void Remove(void); - static void *operator new(size_t); - static void operator delete(void*, size_t); + static void *operator new(size_t) throw(); + static void operator delete(void*, size_t) throw(); }; bool IsDummyPointerValid(CDummy* pDummy); diff --git a/src/entities/Entity.cpp b/src/entities/Entity.cpp index 6204b748..b2fcfbc7 100644 --- a/src/entities/Entity.cpp +++ b/src/entities/Entity.cpp @@ -1,5 +1,6 @@ #include "common.h" +#include "VuVector.h" #include "General.h" #include "RwHelper.h" #include "ModelIndices.h" @@ -25,6 +26,7 @@ #include "Ped.h" #include "Dummy.h" #include "WindModifiers.h" +#include "SaveBuf.h" int gBuildings; @@ -70,7 +72,7 @@ CEntity::CEntity(void) bDistanceFade = false; m_flagE1 = false; - m_flagE2 = false; + bDontCastShadowsOn = false; bOffscreen = false; bIsStaticWaitingForCollision = false; bDontStream = false; @@ -121,9 +123,9 @@ CEntity::CreateRwObject(void) if(IsBuilding()) gBuildings++; if(RwObjectGetType(m_rwObject) == rpATOMIC) - m_matrix.AttachRW(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject)), false); + GetMatrix().AttachRW(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic *)m_rwObject)), false); else if(RwObjectGetType(m_rwObject) == rpCLUMP) - m_matrix.AttachRW(RwFrameGetMatrix(RpClumpGetFrame((RpClump*)m_rwObject)), false); + GetMatrix().AttachRW(RwFrameGetMatrix(RpClumpGetFrame((RpClump *)m_rwObject)), false); mi->AddRef(); } @@ -135,9 +137,9 @@ CEntity::AttachToRwObject(RwObject *obj) m_rwObject = obj; if(m_rwObject){ if(RwObjectGetType(m_rwObject) == rpATOMIC) - m_matrix.Attach(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject)), false); + GetMatrix().Attach(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic *)m_rwObject)), false); else if(RwObjectGetType(m_rwObject) == rpCLUMP) - m_matrix.Attach(RwFrameGetMatrix(RpClumpGetFrame((RpClump*)m_rwObject)), false); + GetMatrix().Attach(RwFrameGetMatrix(RpClumpGetFrame((RpClump *)m_rwObject)), false); CModelInfo::GetModelInfo(m_modelIndex)->AddRef(); } @@ -149,7 +151,7 @@ CEntity::DetachFromRwObject(void) if(m_rwObject) CModelInfo::GetModelInfo(m_modelIndex)->RemoveRef(); m_rwObject = nil; - m_matrix.Detach(); + GetMatrix().Detach(); } RpAtomic* @@ -177,7 +179,7 @@ CEntity::DeleteRwObject(void) { RwFrame *f; - m_matrix.Detach(); + GetMatrix().Detach(); if(m_rwObject){ if(RwObjectGetType(m_rwObject) == rpATOMIC){ f = RpAtomicGetFrame((RpAtomic*)m_rwObject); @@ -200,18 +202,18 @@ CEntity::GetBoundRect(void) { CRect rect; CVector v; - CColModel *col = CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); + CColModel *col = CModelInfo::GetColModel(m_modelIndex); - rect.ContainPoint(m_matrix * col->boundingBox.min); - rect.ContainPoint(m_matrix * col->boundingBox.max); + rect.ContainPoint(GetMatrix() * col->boundingBox.min); + rect.ContainPoint(GetMatrix() * col->boundingBox.max); v = col->boundingBox.min; v.x = col->boundingBox.max.x; - rect.ContainPoint(m_matrix * v); + rect.ContainPoint(GetMatrix() * v); v = col->boundingBox.max; v.x = col->boundingBox.min.x; - rect.ContainPoint(m_matrix * v); + rect.ContainPoint(GetMatrix() * v); return rect; } @@ -219,21 +221,27 @@ CEntity::GetBoundRect(void) CVector CEntity::GetBoundCentre(void) { - CVector v; - GetBoundCentre(v); - return v; + return GetMatrix() * CModelInfo::GetColModel(m_modelIndex)->boundingSphere.center; } +#ifdef GTA_PS2 +void +CEntity::GetBoundCentre(CVuVector &out) +{ + TransformPoint(out, GetMatrix(), CModelInfo::GetColModel(m_modelIndex)->boundingSphere.center); +} +#else void CEntity::GetBoundCentre(CVector &out) { - out = m_matrix * CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingSphere.center; + out = GetMatrix() * CModelInfo::GetColModel(m_modelIndex)->boundingSphere.center; } +#endif float CEntity::GetBoundRadius(void) { - return CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingSphere.radius; + return CModelInfo::GetColModel(m_modelIndex)->boundingSphere.radius; } void @@ -372,7 +380,7 @@ CEntity::PreRender(void) CVector pos = GetPosition(); CShadows::StoreShadowToBeRendered(SHADOWTYPE_DARK, gpShadowPedTex, &pos, - 0.4f, 0.0f, 0.0f, -0.4f, + 0.4f, 0.0f, 0.0f, 0.4f, CTimeCycle::GetShadowStrength(), CTimeCycle::GetShadowStrength(), CTimeCycle::GetShadowStrength(), @@ -418,9 +426,11 @@ CEntity::Render(void) } bool -CEntity::GetIsTouching(CVector const ¢er, float radius) +CEntity::GetIsTouching(CVUVECTOR const ¢er, float radius) { - return sq(GetBoundRadius()+radius) > (GetBoundCentre()-center).MagnitudeSqr(); + CVUVECTOR boundCenter; + GetBoundCentre(boundCenter); + return sq(GetBoundRadius()+radius) > (boundCenter-center).MagnitudeSqr(); } bool @@ -438,8 +448,7 @@ CEntity::IsVisibleComplex(void) bool CEntity::GetIsOnScreen(void) { - return TheCamera.IsSphereVisible(GetBoundCentre(), GetBoundRadius(), - &TheCamera.GetCameraMatrix()); + return TheCamera.IsSphereVisible(GetBoundCentre(), GetBoundRadius()); } bool @@ -455,7 +464,7 @@ CEntity::GetIsOnScreenComplex(void) return true; CRect rect = GetBoundRect(); - CColModel *colmodel = CModelInfo::GetModelInfo(m_modelIndex)->GetColModel(); + CColModel *colmodel = CModelInfo::GetColModel(m_modelIndex); float z = GetPosition().z; float minz = z + colmodel->boundingBox.min.z; float maxz = z + colmodel->boundingBox.max.z; @@ -610,7 +619,7 @@ CEntity::Remove(void) float CEntity::GetDistanceFromCentreOfMassToBaseOfModel(void) { - return -CModelInfo::GetModelInfo(m_modelIndex)->GetColModel()->boundingBox.min.z; + return -CModelInfo::GetColModel(m_modelIndex)->boundingBox.min.z; } void @@ -731,11 +740,6 @@ CEntity::PreRenderForGlassWindow(void) bIsVisible = false; } -/* -0x487A10 - SetAtomicAlphaCB -0x4879E0 - SetClumpAlphaCB -*/ - RpMaterial* SetAtomicAlphaCB(RpMaterial *material, void *data) { @@ -820,7 +824,7 @@ CEntity::SaveEntityFlags(uint8*& buf) if (bStreamingDontDelete) tmp |= BIT(30); if (bRemoveFromWorld) tmp |= BIT(31); - WriteSaveBuf(buf, tmp); + WriteSaveBuf(buf, tmp); tmp = 0; @@ -834,20 +838,21 @@ CEntity::SaveEntityFlags(uint8*& buf) if (bDistanceFade) tmp |= BIT(7); if (m_flagE1) tmp |= BIT(8); - if (m_flagE2) tmp |= BIT(9); + if (bDontCastShadowsOn) tmp |= BIT(9); if (bOffscreen) tmp |= BIT(10); if (bIsStaticWaitingForCollision) tmp |= BIT(11); if (bDontStream) tmp |= BIT(12); if (bUnderwater) tmp |= BIT(13); if (bHasPreRenderEffects) tmp |= BIT(14); - WriteSaveBuf(buf, tmp); + WriteSaveBuf(buf, tmp); } void CEntity::LoadEntityFlags(uint8*& buf) { - uint32 tmp = ReadSaveBuf(buf); + uint32 tmp; + ReadSaveBuf(&tmp, buf); m_type = (tmp & ((BIT(3) - 1))); m_status = ((tmp >> 3) & (BIT(5) - 1)); @@ -878,7 +883,7 @@ CEntity::LoadEntityFlags(uint8*& buf) bStreamingDontDelete = !!(tmp & BIT(30)); bRemoveFromWorld = !!(tmp & BIT(31)); - tmp = ReadSaveBuf(buf); + ReadSaveBuf(&tmp, buf); bHasHitWall = !!(tmp & BIT(0)); bImBeingRendered = !!(tmp & BIT(1)); @@ -890,7 +895,7 @@ CEntity::LoadEntityFlags(uint8*& buf) bDistanceFade = !!(tmp & BIT(7)); m_flagE1 = !!(tmp & BIT(8)); - m_flagE2 = !!(tmp & BIT(9)); + bDontCastShadowsOn = !!(tmp & BIT(9)); bOffscreen = !!(tmp & BIT(10)); bIsStaticWaitingForCollision = !!(tmp & BIT(11)); bDontStream = !!(tmp & BIT(12)); diff --git a/src/entities/Entity.h b/src/entities/Entity.h index 2749e3f7..957ee3bf 100644 --- a/src/entities/Entity.h +++ b/src/entities/Entity.h @@ -84,7 +84,7 @@ public: // flagsE uint32 m_flagE1 : 1; - uint32 m_flagE2 : 1; + uint32 bDontCastShadowsOn : 1; // Dont cast shadows on this object uint32 bOffscreen : 1; // offscreen flag. This can only be trusted when it is set to true uint32 bIsStaticWaitingForCollision : 1; // this is used by script created entities - they are static until the collision is loaded below them uint32 bDontStream : 1; // tell the streaming not to stream me @@ -148,11 +148,11 @@ public: return (RpClump*)m_rwObject; } - void GetBoundCentre(CVector &out); + void GetBoundCentre(CVUVECTOR &out); CVector GetBoundCentre(void); float GetBoundRadius(void); float GetDistanceFromCentreOfMassToBaseOfModel(void); - bool GetIsTouching(CVector const ¢er, float r); + bool GetIsTouching(CVUVECTOR const ¢er, float r); bool GetIsOnScreen(void); bool GetIsOnScreenComplex(void); bool IsVisible(void); diff --git a/src/entities/Physical.cpp b/src/entities/Physical.cpp index b897a6e2..e9ae3065 100644 --- a/src/entities/Physical.cpp +++ b/src/entities/Physical.cpp @@ -226,7 +226,7 @@ CPhysical::RemoveAndAdd(void) CRect CPhysical::GetBoundRect(void) { - CVector center; + CVUVECTOR center; float radius; GetBoundCentre(center); radius = GetBoundRadius(); @@ -462,7 +462,7 @@ CPhysical::ApplyMoveForce(float jx, float jy, float jz) void CPhysical::ApplyTurnForce(float jx, float jy, float jz, float px, float py, float pz) { - CVector com = Multiply3x3(m_matrix, m_vecCentreOfMass); + CVector com = Multiply3x3(GetMatrix(), m_vecCentreOfMass); CVector turnimpulse = CrossProduct(CVector(px, py, pz)-com, CVector(jx, jy, jz)); m_vecTurnSpeed += turnimpulse*(1.0f/m_fTurnMass); } @@ -477,7 +477,7 @@ CPhysical::ApplyFrictionMoveForce(float jx, float jy, float jz) void CPhysical::ApplyFrictionTurnForce(float jx, float jy, float jz, float px, float py, float pz) { - CVector com = Multiply3x3(m_matrix, m_vecCentreOfMass); + CVector com = Multiply3x3(GetMatrix(), m_vecCentreOfMass); CVector turnimpulse = CrossProduct(CVector(px, py, pz)-com, CVector(jx, jy, jz)); m_vecTurnFriction += turnimpulse*(1.0f/m_fTurnMass); } @@ -521,6 +521,10 @@ CPhysical::ApplySpringDampening(float damping, CVector &springDir, CVector &poin { float speedA = DotProduct(speed, springDir); float speedB = DotProduct(GetSpeed(point), springDir); +#ifdef FIX_BUGS + if (speedB == 0.0f) + return true; +#endif float step = Min(CTimer::GetTimeStep(), 3.0f); float impulse = -damping * (speedA + speedB)/2.0f * m_fMass * step * 0.53f; if(bIsHeavy) @@ -553,7 +557,7 @@ CPhysical::ApplyGravity(void) surfaceUp = point.normal; else surfaceUp = CVector(0.0f, 0.0f, 1.0f); - float t = clamp(CTimer::GetTimeStep() * 0.5f, 0.05f, 0.8f); + float t = Clamp(CTimer::GetTimeStep() * 0.5f, 0.05f, 0.8f); gravityUp = gravityUp * (1.0f - t) + surfaceUp * t; if (gravityUp.MagnitudeSqr() < 0.1f) gravityUp = CVector(0.0f, 0.0f, 1.0f); @@ -1023,7 +1027,7 @@ CPhysical::ApplyCollisionAlt(CEntity *B, CColPoint &colpoint, float &impulse, CV moveSpeed += vImpulse * (1.0f/m_fMass); // ApplyTurnForce - CVector com = Multiply3x3(m_matrix, m_vecCentreOfMass); + CVector com = Multiply3x3(GetMatrix(), m_vecCentreOfMass); CVector turnimpulse = CrossProduct(pointpos-com, vImpulse); turnSpeed += turnimpulse*(1.0f/m_fTurnMass); @@ -1259,7 +1263,7 @@ CPhysical::ProcessShiftSectorList(CPtrList *lists) CPhysical *A, *B; CObject *Bobj; bool canshift; - CVector center; + CVUVECTOR center; float radius; int numCollisions; @@ -1418,7 +1422,7 @@ CPhysical::ProcessCollisionSectorList_SimpleCar(CPtrList *lists) { static CColPoint aColPoints[MAX_COLLISION_POINTS]; float radius; - CVector center; + CVUVECTOR center; int listtype; CPhysical *A, *B; int numCollisions; @@ -1585,7 +1589,7 @@ CPhysical::ProcessCollisionSectorList(CPtrList *lists) { static CColPoint aColPoints[MAX_COLLISION_POINTS]; float radius; - CVector center; + CVUVECTOR center; CPtrList *list; CPhysical *A, *B; CObject *Aobj, *Bobj; diff --git a/src/extras/custompipes_gl.cpp b/src/extras/custompipes_gl.cpp index 6cbd0bb7..d74e40db 100644 --- a/src/extras/custompipes_gl.cpp +++ b/src/extras/custompipes_gl.cpp @@ -91,13 +91,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) setWorldMatrix(atomic->getFrame()->getLTM()); lightingCB(atomic); -#ifdef RW_GL_USE_VAOS - glBindVertexArray(header->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo); - glBindBuffer(GL_ARRAY_BUFFER, header->vbo); - setAttribPointers(header->attribDesc, header->numAttribs); -#endif + setupVertexInput(header); InstanceData *inst = header->inst; rw::int32 n = header->numMeshes; @@ -138,9 +132,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) SetRenderState(SRCBLEND, BLENDSRCALPHA); -#ifndef RW_GL_USE_VAOS - disableAttribPointers(header->attribDesc, header->numAttribs); -#endif + teardownVertexInput(header); } void @@ -163,7 +155,7 @@ CreateVehiclePipe(void) { #include "shaders/obj/neoVehicle_frag.inc" #include "shaders/obj/neoVehicle_vert.inc" - const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil }; + const char *vs[] = { shaderDecl, "#define DIRECTIONALS\n", header_vert_src, neoVehicle_vert_src, nil }; const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil }; neoVehicleShader = Shader::create(vs, fs); assert(neoVehicleShader); @@ -211,13 +203,7 @@ worldRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) setWorldMatrix(atomic->getFrame()->getLTM()); lightingCB(atomic); -#ifdef RW_GL_USE_VAOS - glBindVertexArray(header->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo); - glBindBuffer(GL_ARRAY_BUFFER, header->vbo); - setAttribPointers(header->attribDesc, header->numAttribs); -#endif + setupVertexInput(header); InstanceData *inst = header->inst; rw::int32 n = header->numMeshes; @@ -255,9 +241,7 @@ worldRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) inst++; } setTexture(1, nil); -#ifndef RW_GL_USE_VAOS - disableAttribPointers(header->attribDesc, header->numAttribs); -#endif + teardownVertexInput(header); } void @@ -319,13 +303,7 @@ glossRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) Material *m; -#ifdef RW_GL_USE_VAOS - glBindVertexArray(header->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo); - glBindBuffer(GL_ARRAY_BUFFER, header->vbo); - setAttribPointers(header->attribDesc, header->numAttribs); -#endif + setupVertexInput(header); InstanceData *inst = header->inst; rw::int32 n = header->numMeshes; @@ -368,9 +346,7 @@ glossRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) SetRenderState(SRCBLEND, BLENDSRCALPHA); SetRenderState(DESTBLEND, BLENDINVSRCALPHA); -#ifndef RW_GL_USE_VAOS - disableAttribPointers(header->attribDesc, header->numAttribs); -#endif + teardownVertexInput(header); } void @@ -454,13 +430,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) setWorldMatrix(atomic->getFrame()->getLTM()); lightingCB(atomic); -#ifdef RW_GL_USE_VAOS - glBindVertexArray(header->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo); - glBindBuffer(GL_ARRAY_BUFFER, header->vbo); - setAttribPointers(header->attribDesc, header->numAttribs); -#endif + setupVertexInput(header); InstanceData *inst = header->inst; rw::int32 n = header->numMeshes; @@ -483,9 +453,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) drawInst(header, inst); inst++; } -#ifndef RW_GL_USE_VAOS - disableAttribPointers(header->attribDesc, header->numAttribs); -#endif + teardownVertexInput(header); } static void @@ -505,13 +473,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) setWorldMatrix(atomic->getFrame()->getLTM()); lightingCB(atomic); -#ifdef RW_GL_USE_VAOS - glBindVertexArray(header->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo); - glBindBuffer(GL_ARRAY_BUFFER, header->vbo); - setAttribPointers(header->attribDesc, header->numAttribs); -#endif + setupVertexInput(header); InstanceData *inst = header->inst; rw::int32 n = header->numMeshes; @@ -532,9 +494,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header) drawInst(header, inst); inst++; } -#ifndef RW_GL_USE_VAOS - disableAttribPointers(header->attribDesc, header->numAttribs); -#endif + teardownVertexInput(header); } void @@ -556,7 +516,7 @@ CreateRimLightPipes(void) { #include "shaders/obj/simple_frag.inc" #include "shaders/obj/neoRimSkin_vert.inc" - const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil }; + const char *vs[] = { shaderDecl, "#define DIRECTIONALS\n", header_vert_src, neoRimSkin_vert_src, nil }; const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil }; neoRimSkinShader = Shader::create(vs, fs); assert(neoRimSkinShader); @@ -565,7 +525,7 @@ CreateRimLightPipes(void) { #include "shaders/obj/simple_frag.inc" #include "shaders/obj/neoRim_vert.inc" - const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil }; + const char *vs[] = { shaderDecl, "#define DIRECTIONALS\n", header_vert_src, neoRim_vert_src, nil }; const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil }; neoRimShader = Shader::create(vs, fs); assert(neoRimShader); @@ -697,13 +657,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass) if(!setupDone){ defaultShader->use(); setWorldMatrix(&building->matrix); -#ifdef RW_GL_USE_VAOS - glBindVertexArray(building->instHeader->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, building->instHeader->ibo); - glBindBuffer(GL_ARRAY_BUFFER, building->instHeader->vbo); - setAttribPointers(building->instHeader->attribDesc, building->instHeader->numAttribs); -#endif + setupVertexInput(building->instHeader); setLights(&lights); setupDone = true; } @@ -714,9 +668,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass) drawInst(building->instHeader, inst); } -#ifndef RW_GL_USE_VAOS - disableAttribPointers(building->instHeader->attribDesc, building->instHeader->numAttribs); -#endif + teardownVertexInput(building->instHeader); if(defer) numBlendInsts[pass]++; } @@ -755,13 +707,7 @@ RenderBlendPass(int pass) for(i = 0; i < numBlendInsts[pass]; i++){ BuildingInst *building = &blendInsts[pass][i]; -#ifdef RW_GL_USE_VAOS - glBindVertexArray(building->instHeader->vao); -#else - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, building->instHeader->ibo); - glBindBuffer(GL_ARRAY_BUFFER, building->instHeader->vbo); - setAttribPointers(building->instHeader->attribDesc, building->instHeader->numAttribs); -#endif + setupVertexInput(building->instHeader); setWorldMatrix(&building->matrix); if(building->lighting) lights.ambient = pAmbient->color; @@ -783,9 +729,7 @@ RenderBlendPass(int pass) drawInst(building->instHeader, inst); } -#ifndef RW_GL_USE_VAOS - disableAttribPointers(building->instHeader->attribDesc, building->instHeader->numAttribs); -#endif + teardownVertexInput(building->instHeader); } } } diff --git a/src/extras/debugmenu.h b/src/extras/debugmenu.h index c2198aca..f1357c0a 100644 --- a/src/extras/debugmenu.h +++ b/src/extras/debugmenu.h @@ -2,6 +2,120 @@ #ifdef DEBUGMENU +// Tweaking stuff for debugmenu +#define TWEAKPATH ___tw___TWEAKPATH +#define SETTWEAKPATH(path) static const char *___tw___TWEAKPATH = path; +#define TWEAKFUNC(v) static CTweakFunc CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), TWEAKPATH); +#define TWEAKFUNCN(v, name) static CTweakFunc CONCAT(___tw___tweak, __COUNTER__)(&v, name, TWEAKPATH); +#define TWEAKBOOL(v) static CTweakBool CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), TWEAKPATH); +#define TWEAKBOOLN(v, name) static CTweakBool CONCAT(___tw___tweak, __COUNTER__)(&v, name, TWEAKPATH); +#define TWEAKINT32(v, lower, upper, step) static CTweakInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKINT32N(v, lower, upper, step, name) static CTweakInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKUINT32(v, lower, upper, step) static CTweakUInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKUINT32N(v, lower, upper, step, name) static CTweakUInt32 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKINT16(v, lower, upper, step) static CTweakInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKINT16N(v, lower, upper, step, name) static CTweakInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKUINT16(v, lower, upper, step) static CTweakUInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKUINT16N(v, lower, upper, step, name) static CTweakUInt16 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKINT8(v, lower, upper, step) static CTweakInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKINT8N(v, lower, upper, step, name) static CTweakInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKUINT8(v, lower, upper, step) static CTweakUInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKUINT8N(v, lower, upper, step, name) static CTweakUInt8 CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKFLOAT(v, lower, upper, step) static CTweakFloat CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, step, TWEAKPATH); +#define TWEAKFLOATN(v, lower, upper, step, name) static CTweakFloat CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, step, TWEAKPATH); +#define TWEAKSWITCH(v, lower, upper, str, f) static CTweakSwitch CONCAT(___tw___tweak, __COUNTER__)(&v, STR(v), lower, upper, str, f, TWEAKPATH); +#define TWEAKSWITCHN(v, lower, upper, str, f, name) static CTweakSwitch CONCAT(___tw___tweak, __COUNTER__)(&v, name, lower, upper, str, f, TWEAKPATH); + +// interface +class CTweakVar +{ +public: + virtual void AddDBG(const char *path) = 0; +}; + +class CTweakVars +{ +public: + static void Add(CTweakVar *var); + static void AddDBG(const char *path); +}; + +class CTweakFunc : public CTweakVar +{ + const char *m_pPath, *m_pVarName; + void (*m_pFunc)(); +public: + CTweakFunc(void (*pFunc)(), const char *strName, const char *strPath) : + m_pPath(strPath), m_pVarName(strName), m_pFunc(pFunc) + { + CTweakVars::Add(this); + } + + void AddDBG(const char *path); +}; + +class CTweakBool : public CTweakVar +{ + const char *m_pPath, *m_pVarName; + bool *m_pBoolVar; +public: + CTweakBool(bool *pBool, const char *strName, const char *strPath) : + m_pPath(strPath), m_pVarName(strName), m_pBoolVar(pBool) + { + CTweakVars::Add(this); + } + + void AddDBG(const char *path); +}; + +class CTweakSwitch : public CTweakVar +{ + const char *m_pPath, *m_pVarName; + void *m_pIntVar; + int32 m_nMin, m_nMax; + const char **m_aStr; + void (*m_pFunc)(); +public: + CTweakSwitch(void *pInt, const char *strName, int32 nMin, int32 nMax, const char **aStr, + void (*pFunc)(), const char *strPath) + : m_pPath(strPath), m_pVarName(strName), m_pIntVar(pInt), m_nMin(nMin), m_nMax(nMax), + m_aStr(aStr) + { + CTweakVars::Add(this); + } + + void AddDBG(const char *path); +}; + +#define _TWEEKCLASS(name, type) \ + class name : public CTweakVar \ + { \ + public: \ + const char *m_pPath, *m_pVarName; \ + type *m_pIntVar, m_nLoawerBound, m_nUpperBound, m_nStep; \ + \ + name(type *pInt, const char *strName, type nLower, type nUpper, type nStep, \ + const char *strPath) \ + : m_pPath(strPath), m_pVarName(strName), m_pIntVar(pInt), \ + m_nLoawerBound(nLower), m_nUpperBound(nUpper), m_nStep(nStep) \ + \ + { \ + CTweakVars::Add(this); \ + } \ + \ + void AddDBG(const char *path); \ + }; + +_TWEEKCLASS(CTweakInt8, int8); +_TWEEKCLASS(CTweakUInt8, uint8); +_TWEEKCLASS(CTweakInt16, int16); +_TWEEKCLASS(CTweakUInt16, uint16); +_TWEEKCLASS(CTweakInt32, int32); +_TWEEKCLASS(CTweakUInt32, uint32); +_TWEEKCLASS(CTweakFloat, float); + +#undef _TWEEKCLASS + typedef void (*TriggerFunc)(void); struct Menu; diff --git a/src/extras/ini.h b/src/extras/ini.h new file mode 100644 index 00000000..44dd3d57 --- /dev/null +++ b/src/extras/ini.h @@ -0,0 +1,761 @@ +/* + * The MIT License (MIT) + * Copyright (c) 2018 Danijel Durakovic + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + */ + +/////////////////////////////////////////////////////////////////////////////// +// +// /mINI/ v0.9.10 +// An INI file reader and writer for the modern age. +// +/////////////////////////////////////////////////////////////////////////////// +// +// A tiny utility library for manipulating INI files with a straightforward +// API and a minimal footprint. It conforms to the (somewhat) standard INI +// format - sections and keys are case insensitive and all leading and +// trailing whitespace is ignored. Comments are lines that begin with a +// semicolon. Trailing comments are allowed on section lines. +// +// Files are read on demand, upon which data is kept in memory and the file +// is closed. This utility supports lazy writing, which only writes changes +// and updates to a file and preserves custom formatting and comments. A lazy +// write invoked by a write() call will read the output file, find what +// changes have been made and update the file accordingly. If you only need to +// generate files, use generate() instead. Section and key order is preserved +// on read, write and insert. +// +/////////////////////////////////////////////////////////////////////////////// +// +// /* BASIC USAGE EXAMPLE: */ +// +// /* read from file */ +// mINI::INIFile file("myfile.ini"); +// mINI::INIStructure ini; +// file.read(ini); +// +// /* read value; gets a reference to actual value in the structure. +// if key or section don't exist, a new empty value will be created */ +// std::string& value = ini["section"]["key"]; +// +// /* read value safely; gets a copy of value in the structure. +// does not alter the structure */ +// std::string value = ini.get("section").get("key"); +// +// /* set or update values */ +// ini["section"]["key"] = "value"; +// +// /* set multiple values */ +// ini["section2"].set({ +// {"key1", "value1"}, +// {"key2", "value2"} +// }); +// +// /* write updates back to file, preserving comments and formatting */ +// file.write(ini); +// +// /* or generate a file (overwrites the original) */ +// file.generate(ini); +// +/////////////////////////////////////////////////////////////////////////////// +// +// Long live the INI file!!! +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef MINI_INI_H_ +#define MINI_INI_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace mINI +{ + namespace INIStringUtil + { + const char* const whitespaceDelimiters = " \t\n\r\f\v"; + inline void trim(std::string& str) + { + str.erase(str.find_last_not_of(whitespaceDelimiters) + 1); + str.erase(0, str.find_first_not_of(whitespaceDelimiters)); + } +#ifndef MINI_CASE_SENSITIVE + inline void toLower(std::string& str) + { + std::transform(str.begin(), str.end(), str.begin(), [](const char c) { + return static_cast(std::tolower(c)); + }); + } +#endif + inline void replace(std::string& str, std::string const& a, std::string const& b) + { + if (!a.empty()) + { + std::size_t pos = 0; + while ((pos = str.find(a, pos)) != std::string::npos) + { + str.replace(pos, a.size(), b); + pos += b.size(); + } + } + } +#ifdef _WIN32 + const char* const endl = "\r\n"; +#else + const char* const endl = "\n"; +#endif + }; + + template + class INIMap + { + private: + using T_DataIndexMap = std::unordered_map; + using T_DataItem = std::pair; + using T_DataContainer = std::vector; + using T_MultiArgs = typename std::vector>; + + T_DataIndexMap dataIndexMap; + T_DataContainer data; + + inline std::size_t setEmpty(std::string& key) + { + std::size_t index = data.size(); + dataIndexMap[key] = index; + data.emplace_back(key, T()); + return index; + } + + public: + using const_iterator = typename T_DataContainer::const_iterator; + + INIMap() { } + + INIMap(INIMap const& other) + { + std::size_t data_size = other.data.size(); + for (std::size_t i = 0; i < data_size; ++i) + { + auto const& key = other.data[i].first; + auto const& obj = other.data[i].second; + data.emplace_back(key, obj); + } + dataIndexMap = T_DataIndexMap(other.dataIndexMap); + } + + T& operator[](std::string key) + { + INIStringUtil::trim(key); +#ifndef MINI_CASE_SENSITIVE + INIStringUtil::toLower(key); +#endif + auto it = dataIndexMap.find(key); + bool hasIt = (it != dataIndexMap.end()); + std::size_t index = (hasIt) ? it->second : setEmpty(key); + return data[index].second; + } + T get(std::string key) const + { + INIStringUtil::trim(key); +#ifndef MINI_CASE_SENSITIVE + INIStringUtil::toLower(key); +#endif + auto it = dataIndexMap.find(key); + if (it == dataIndexMap.end()) + { + return T(); + } + return T(data[it->second].second); + } + bool has(std::string key) const + { + INIStringUtil::trim(key); +#ifndef MINI_CASE_SENSITIVE + INIStringUtil::toLower(key); +#endif + return (dataIndexMap.count(key) == 1); + } + void set(std::string key, T obj) + { + INIStringUtil::trim(key); +#ifndef MINI_CASE_SENSITIVE + INIStringUtil::toLower(key); +#endif + auto it = dataIndexMap.find(key); + if (it != dataIndexMap.end()) + { + data[it->second].second = obj; + } + else + { + dataIndexMap[key] = data.size(); + data.emplace_back(key, obj); + } + } + void set(T_MultiArgs const& multiArgs) + { + for (auto const& it : multiArgs) + { + auto const& key = it.first; + auto const& obj = it.second; + set(key, obj); + } + } + bool remove(std::string key) + { + INIStringUtil::trim(key); +#ifndef MINI_CASE_SENSITIVE + INIStringUtil::toLower(key); +#endif + auto it = dataIndexMap.find(key); + if (it != dataIndexMap.end()) + { + std::size_t index = it->second; + data.erase(data.begin() + index); + dataIndexMap.erase(it); + for (auto& it2 : dataIndexMap) + { + auto& vi = it2.second; + if (vi > index) + { + vi--; + } + } + return true; + } + return false; + } + void clear() + { + data.clear(); + dataIndexMap.clear(); + } + std::size_t size() const + { + return data.size(); + } + const_iterator begin() const { return data.begin(); } + const_iterator end() const { return data.end(); } + }; + + using INIStructure = INIMap>; + + namespace INIParser + { + using T_ParseValues = std::pair; + + enum class PDataType : char + { + PDATA_NONE, + PDATA_COMMENT, + PDATA_SECTION, + PDATA_KEYVALUE, + PDATA_UNKNOWN + }; + + inline PDataType parseLine(std::string line, T_ParseValues& parseData) + { + parseData.first.clear(); + parseData.second.clear(); + INIStringUtil::trim(line); + if (line.empty()) + { + return PDataType::PDATA_NONE; + } + char firstCharacter = line[0]; + if (firstCharacter == ';') + { + return PDataType::PDATA_COMMENT; + } + if (firstCharacter == '[') + { + auto commentAt = line.find_first_of(';'); + if (commentAt != std::string::npos) + { + line = line.substr(0, commentAt); + } + auto closingBracketAt = line.find_last_of(']'); + if (closingBracketAt != std::string::npos) + { + auto section = line.substr(1, closingBracketAt - 1); + INIStringUtil::trim(section); + parseData.first = section; + return PDataType::PDATA_SECTION; + } + } + auto lineNorm = line; + INIStringUtil::replace(lineNorm, "\\=", " "); + auto equalsAt = lineNorm.find_first_of('='); + if (equalsAt != std::string::npos) + { + auto key = line.substr(0, equalsAt); + INIStringUtil::trim(key); + INIStringUtil::replace(key, "\\=", "="); + auto value = line.substr(equalsAt + 1); + INIStringUtil::trim(value); + parseData.first = key; + parseData.second = value; + return PDataType::PDATA_KEYVALUE; + } + return PDataType::PDATA_UNKNOWN; + } + }; + + class INIReader + { + public: + using T_LineData = std::vector; + using T_LineDataPtr = std::shared_ptr; + + private: + std::ifstream fileReadStream; + T_LineDataPtr lineData; + + T_LineData readFile() + { + std::string fileContents; + fileReadStream.seekg(0, std::ios::end); + fileContents.resize(fileReadStream.tellg()); + fileReadStream.seekg(0, std::ios::beg); + std::size_t fileSize = fileContents.size(); + fileReadStream.read(&fileContents[0], fileSize); + fileReadStream.close(); + T_LineData output; + if (fileSize == 0) + { + return output; + } + std::string buffer; + buffer.reserve(50); + for (std::size_t i = 0; i < fileSize; ++i) + { + char& c = fileContents[i]; + if (c == '\n') + { + output.emplace_back(buffer); + buffer.clear(); + continue; + } + if (c != '\0' && c != '\r') + { + buffer += c; + } + } + output.emplace_back(buffer); + return output; + } + + public: + INIReader(std::string const& filename, bool keepLineData = false) + { + fileReadStream.open(filename, std::ios::in | std::ios::binary); + if (keepLineData) + { + lineData = std::make_shared(); + } + } + ~INIReader() { } + + bool operator>>(INIStructure& data) + { + if (!fileReadStream.is_open()) + { + return false; + } + T_LineData fileLines = readFile(); + std::string section; + bool inSection = false; + INIParser::T_ParseValues parseData; + for (auto const& line : fileLines) + { + auto parseResult = INIParser::parseLine(line, parseData); + if (parseResult == INIParser::PDataType::PDATA_SECTION) + { + inSection = true; + data[section = parseData.first]; + } + else if (inSection && parseResult == INIParser::PDataType::PDATA_KEYVALUE) + { + auto const& key = parseData.first; + auto const& value = parseData.second; + data[section][key] = value; + } + if (lineData && parseResult != INIParser::PDataType::PDATA_UNKNOWN) + { + if (parseResult == INIParser::PDataType::PDATA_KEYVALUE && !inSection) + { + continue; + } + lineData->emplace_back(line); + } + } + return true; + } + T_LineDataPtr getLines() + { + return lineData; + } + }; + + class INIGenerator + { + private: + std::ofstream fileWriteStream; + + public: + bool prettyPrint = false; + + INIGenerator(std::string const& filename) + { + fileWriteStream.open(filename, std::ios::out | std::ios::binary); + } + ~INIGenerator() { } + + bool operator<<(INIStructure const& data) + { + if (!fileWriteStream.is_open()) + { + return false; + } + if (!data.size()) + { + return true; + } + auto it = data.begin(); + for (;;) + { + auto const& section = it->first; + auto const& collection = it->second; + fileWriteStream + << "[" + << section + << "]"; + if (collection.size()) + { + fileWriteStream << INIStringUtil::endl; + auto it2 = collection.begin(); + for (;;) + { + auto key = it2->first; + INIStringUtil::replace(key, "=", "\\="); + auto value = it2->second; + INIStringUtil::trim(value); + fileWriteStream + << key + << ((prettyPrint) ? " = " : "=") + << value; + if (++it2 == collection.end()) + { + break; + } + fileWriteStream << INIStringUtil::endl; + } + } + if (++it == data.end()) + { + break; + } + fileWriteStream << INIStringUtil::endl; + if (prettyPrint) + { + fileWriteStream << INIStringUtil::endl; + } + } + return true; + } + }; + + class INIWriter + { + private: + using T_LineData = std::vector; + using T_LineDataPtr = std::shared_ptr; + + std::string filename; + + T_LineData getLazyOutput(T_LineDataPtr const& lineData, INIStructure& data, INIStructure& original) + { + T_LineData output; + INIParser::T_ParseValues parseData; + std::string sectionCurrent; + bool parsingSection = false; + bool continueToNextSection = false; + bool discardNextEmpty = false; + bool writeNewKeys = false; + std::size_t lastKeyLine = 0; + for (auto line = lineData->begin(); line != lineData->end(); ++line) + { + if (!writeNewKeys) + { + auto parseResult = INIParser::parseLine(*line, parseData); + if (parseResult == INIParser::PDataType::PDATA_SECTION) + { + if (parsingSection) + { + writeNewKeys = true; + parsingSection = false; + --line; + continue; + } + sectionCurrent = parseData.first; + if (data.has(sectionCurrent)) + { + parsingSection = true; + continueToNextSection = false; + discardNextEmpty = false; + output.emplace_back(*line); + lastKeyLine = output.size(); + } + else + { + continueToNextSection = true; + discardNextEmpty = true; + continue; + } + } + else if (parseResult == INIParser::PDataType::PDATA_KEYVALUE) + { + if (continueToNextSection) + { + continue; + } + if (data.has(sectionCurrent)) + { + auto& collection = data[sectionCurrent]; + auto const& key = parseData.first; + auto const& value = parseData.second; + if (collection.has(key)) + { + auto outputValue = collection[key]; + if (value == outputValue) + { + output.emplace_back(*line); + } + else + { + INIStringUtil::trim(outputValue); + auto lineNorm = *line; + INIStringUtil::replace(lineNorm, "\\=", " "); + auto equalsAt = lineNorm.find_first_of('='); + auto valueAt = lineNorm.find_first_not_of( + INIStringUtil::whitespaceDelimiters, + equalsAt + 1 + ); + std::string outputLine = line->substr(0, valueAt); + if (prettyPrint && equalsAt + 1 == valueAt) + { + outputLine += " "; + } + outputLine += outputValue; + output.emplace_back(outputLine); + } + lastKeyLine = output.size(); + } + } + } + else + { + if (discardNextEmpty && line->empty()) + { + discardNextEmpty = false; + } + else if (parseResult != INIParser::PDataType::PDATA_UNKNOWN) + { + output.emplace_back(*line); + } + } + } + if (writeNewKeys || std::next(line) == lineData->end()) + { + T_LineData linesToAdd; + if (data.has(sectionCurrent) && original.has(sectionCurrent)) + { + auto const& collection = data[sectionCurrent]; + auto const& collectionOriginal = original[sectionCurrent]; + for (auto const& it : collection) + { + auto key = it.first; + if (collectionOriginal.has(key)) + { + continue; + } + auto value = it.second; + INIStringUtil::replace(key, "=", "\\="); + INIStringUtil::trim(value); + linesToAdd.emplace_back( + key + ((prettyPrint) ? " = " : "=") + value + ); + } + } + if (!linesToAdd.empty()) + { + output.insert( + output.begin() + lastKeyLine, + linesToAdd.begin(), + linesToAdd.end() + ); + } + if (writeNewKeys) + { + writeNewKeys = false; + --line; + } + } + } + for (auto const& it : data) + { + auto const& section = it.first; + if (original.has(section)) + { + continue; + } + if (prettyPrint && output.size() > 0 && !output.back().empty()) + { + output.emplace_back(); + } + output.emplace_back("[" + section + "]"); + auto const& collection = it.second; + for (auto const& it2 : collection) + { + auto key = it2.first; + auto value = it2.second; + INIStringUtil::replace(key, "=", "\\="); + INIStringUtil::trim(value); + output.emplace_back( + key + ((prettyPrint) ? " = " : "=") + value + ); + } + } + return output; + } + + public: + bool prettyPrint = false; + + INIWriter(std::string const& filename) + : filename(filename) + { + } + ~INIWriter() { } + + bool operator<<(INIStructure& data) + { + struct stat buf; + bool fileExists = (stat(filename.c_str(), &buf) == 0); + if (!fileExists) + { + INIGenerator generator(filename); + generator.prettyPrint = prettyPrint; + return generator << data; + } + INIStructure originalData; + T_LineDataPtr lineData; + bool readSuccess = false; + { + INIReader reader(filename, true); + if ((readSuccess = reader >> originalData)) + { + lineData = reader.getLines(); + } + } + if (!readSuccess) + { + return false; + } + T_LineData output = getLazyOutput(lineData, data, originalData); + std::ofstream fileWriteStream(filename, std::ios::out | std::ios::binary); + if (fileWriteStream.is_open()) + { + if (output.size()) + { + auto line = output.begin(); + for (;;) + { + fileWriteStream << *line; + if (++line == output.end()) + { + break; + } + fileWriteStream << INIStringUtil::endl; + } + } + return true; + } + return false; + } + }; + + class INIFile + { + private: + std::string filename; + + public: + INIFile(std::string const& filename) + : filename(filename) + { } + + ~INIFile() { } + + bool read(INIStructure& data) const + { + if (data.size()) + { + data.clear(); + } + if (filename.empty()) + { + return false; + } + INIReader reader(filename); + return reader >> data; + } + bool generate(INIStructure const& data, bool pretty = false) const + { + if (filename.empty()) + { + return false; + } + INIGenerator generator(filename); + generator.prettyPrint = pretty; + return generator << data; + } + bool write(INIStructure& data, bool pretty = false) const + { + if (filename.empty()) + { + return false; + } + INIWriter writer(filename); + writer.prettyPrint = pretty; + return writer << data; + } + }; +} + +#endif // MINI_INI_H_ diff --git a/src/extras/ini_parser.hpp b/src/extras/ini_parser.hpp deleted file mode 100644 index 7a3b3396..00000000 --- a/src/extras/ini_parser.hpp +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2013-2015 Denilson das Mercês Amorim - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source - * distribution. - * - */ -#ifndef LINB_INI_PARSER_HPP -#define LINB_INI_PARSER_HPP - -/* - * STL-like INI Container - */ - -#include // for std::string -#include // for std::map -#include // for std::FILE -#include // for std::find_if -#include // for std::function -#ifdef BUFFER_FILES -#include // for memalign -#endif - -namespace linb -{ - template< - class CharT = char, /* Not compatible with other type here, since we're using C streams */ - class StringType = std::basic_string, - class KeyContainer = std::map, - class SectionContainer = std::map - > class basic_ini - { - public: - typedef CharT char_type; - typedef StringType string_type; - typedef KeyContainer key_container; - typedef SectionContainer section_container; - - // Typedef container values types - typedef typename section_container::value_type value_type; - typedef typename section_container::key_type key_type; - typedef typename section_container::mapped_type mapped_type; - - // Typedef common types - typedef typename section_container::size_type size_type; - typedef typename section_container::difference_type difference_type; - - // Typedef iterators - typedef typename section_container::iterator iterator; - typedef typename section_container::const_iterator const_iterator; - typedef typename section_container::reverse_iterator reverse_iterator; - typedef typename section_container::const_reverse_iterator const_reverse_iterator; - - // typedef References and pointers - typedef typename section_container::reference reference; - typedef typename section_container::const_reference const_reference; - typedef typename section_container::pointer pointer; - typedef typename section_container::const_pointer const_pointer; - - private: - section_container data; - - public: - - basic_ini() - { } - - basic_ini(const char_type* filename) - { this->read_file(filename); } - - /* Iterator methods */ - iterator begin() - { return data.begin(); } - const_iterator begin() const - { return data.begin(); } - iterator end() - { return data.end(); } - const_iterator end() const - { return data.end(); } - const_iterator cbegin() const - { return data.cbegin(); } - const_iterator cend() const - { return data.cend(); } - - /* Reverse iterator methods */ - reverse_iterator rbegin() - { return data.rbegin(); } - const_reverse_iterator rbegin() const - { return data.rbegin(); } - reverse_iterator rend() - { return data.rend(); } - const_reverse_iterator rend() const - { return data.rend(); } - const_reverse_iterator crbegin() const - { return data.crbegin(); } - const_reverse_iterator crend() const - { return data.crend(); } - - /* Acessing index methods */ - mapped_type& operator[](const string_type& sect) - { return data[sect]; } - mapped_type& operator[](string_type&& sect) - { return data[std::forward(sect)]; } - mapped_type& at( const string_type& sect) - { return data.at(sect); } - const mapped_type& at(const string_type& sect) const - { return data.at(sect); } - - /* Capacity information */ - bool empty() const - { return data.empty(); } - size_type size() const - { return data.size(); } - size_type max_size() const - { return data.max_size(); } - - /* Modifiers */ - void clear() - { return data.clear(); } - - /* Lookup */ - size_type count(const string_type& sect) - { return data.count(sect); } - iterator find(const string_type& sect) - { return data.find(sect); } - - /* Gets a value from the specified section & key, default_value is returned if the sect & key doesn't exist */ - string_type get(const string_type& sect, const key_type& key, const string_type& default_value) - { - auto it = this->find(sect); - if(it != this->end()) - { - auto itv = it->second.find(key); - if(itv != it->second.end()) - return itv->second; - } - return default_value; - } - - /* Sets the value of a value in the ini */ - void set(const string_type& sect, const key_type& key, const string_type& value) - { - (*this)[sect][key] = value; // no emplace since overwrite! - } - - /* Too lazy to continue this container... If you need more methods, just add it */ - - // re3 - void remove(const string_type& sect, const key_type& key) - { - auto it = this->find(sect); - if(it != this->end()) - { - it->second.erase(key); - } - } - - int category_size(const string_type& sect) - { - auto it = this->find(sect); - if(it != this->end()) - { - return it->second.size(); - } - return 0; - } - -#if 1 - bool read_file(const char_type* filename) - { - /* Using C stream in a STL-like container, funny? - */ - if(FILE* f = fopen(filename, "r")) - { - key_container* keys = nullptr; - char_type buf[2048]; - string_type line; - string_type key; - string_type value; - string_type null_string; - size_type pos; - -#ifdef BUFFER_FILES - char* buffer = (char*) memalign(0x40, INI_BUFFER_SIZE); - setvbuf(f, buffer, _IOFBF, INI_BUFFER_SIZE); -#endif - - // Trims an string - auto trim = [](string_type& s, bool trimLeft, bool trimRight) -> string_type& - { - if(s.size()) - { - // Ignore UTF-8 BOM - while(s.size() >= 3 && s[0] == (char)(0xEF) && s[1] == (char)(0xBB) && s[2] == (char)(0xBF)) - s.erase(s.begin(), s.begin() + 3); - - if(trimLeft) - s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::function(::isspace)))); - if(trimRight) - s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::function(::isspace))).base(), s.end()); - } - return s; - }; - - // Start parsing - while(fgets(buf, sizeof(buf), f)) - { - // What a thing, reading into a char buffer and then putting in the string... - line = buf; - - // Find comment and remove anything after it from the line - if((pos = line.find_first_of(';')) != line.npos) - line.erase(pos); - - // Trim the string, and if it gets empty, skip this line - if(trim(line, true, true).empty()) - continue; - - // Find section name - if(line.front() == '[' && line.back() == ']') - { - pos = line.length() - 1; //line.find_first_of(']'); - if(pos != line.npos) - { - trim(key.assign(line, 1, pos-1), true, true); - keys = &data[std::move(key)]; // Create section - } - else - keys = nullptr; - } - else - { - // Find key and value positions - pos = line.find_first_of('='); - if(pos == line.npos) - { - // There's only the key - key = line; // No need for trim, line is already trimmed - value.clear(); - } - else - { - // There's the key and the value - trim(key.assign(line, 0, pos), false, true); // trim the right - trim(value.assign(line, pos + 1, line.npos), true, false); // trim the left - } - - // Put the key/value into the current keys object, or into the section "" if no section has been found - #if __cplusplus >= 201103L || _MSC_VER >= 1800 - (keys ? *keys : data[null_string]).emplace(std::move(key), std::move(value)); - #else - (keys ? *keys : data[null_string])[key] = value; - key.clear(); value.clear(); - #endif - } - } - - fclose(f); -#ifdef BUFFER_FILES - free(buffer); -#endif - return true; - } - return false; - } - - /* - * Dumps the content of this container into an ini file - */ - bool write_file(const char_type* filename) - { - if(FILE* f = fopen(filename, "w")) - { -#ifdef BUFFER_FILES - char* buffer = (char*) memalign(0x40, INI_BUFFER_SIZE); - setvbuf(f, buffer, _IOFBF, INI_BUFFER_SIZE); -#endif - bool first = true; - for(auto& sec : this->data) - { - fprintf(f, first? "[%s]\n" : "\n[%s]\n", sec.first.c_str()); - first = false; - for(auto& kv : sec.second) - { - if(kv.second.empty()) - fprintf(f, "%s\n", kv.first.c_str()); - else - fprintf(f, "%s = %s\n", kv.first.c_str(), kv.second.c_str()); - } - } - fclose(f); -#ifdef BUFFER_FILES - free(buffer); -#endif - return true; - } - return false; - } - - - /* - */ - bool load_file(const char_type* filename) - { - return read_file(filename); - } - - bool load_file(const StringType& filename) - { - return load_file(filename.c_str()); - } - - bool write_file(const StringType& filename) - { - return write_file(filename.c_str()); - } -#endif - - - - }; - - - /* Use default basic_ini - * - * Limitations: - * * Not unicode aware - * * Case sensitive - * * Sections must have unique keys - */ - typedef basic_ini<> ini; -} - -#endif - diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp index b47deab4..ee6c3964 100644 --- a/src/extras/postfx.cpp +++ b/src/extras/postfx.cpp @@ -7,6 +7,7 @@ #error "Need librw for EXTENDED_COLOURFILTER" #endif +#include "main.h" #include "RwHelper.h" #include "Camera.h" #include "MBlur.h" @@ -48,6 +49,9 @@ CPostFX::InitOnce(void) void CPostFX::Open(RwCamera *cam) { + if(pFrontBuffer) + Close(); + uint32 width = Pow(2.0f, int32(log2(RwRasterGetWidth (RwCameraGetRaster(cam))))+1); uint32 height = Pow(2.0f, int32(log2(RwRasterGetHeight(RwCameraGetRaster(cam))))+1); uint32 depth = RwRasterGetDepth(RwCameraGetRaster(cam)); @@ -385,6 +389,8 @@ CPostFX::GetBackBuffer(RwCamera *cam) void CPostFX::Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha) { + PUSH_RENDERGROUP("CPostFX::Render"); + if(pFrontBuffer == nil) Open(cam); assert(pFrontBuffer); @@ -446,6 +452,8 @@ CPostFX::Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blu bJustInitialised = false; }else bJustInitialised = true; + + POP_RENDERGROUP(); } int CPostFX::PrevRed[NUMAVERAGE], CPostFX::AvgRed; diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp index 1412141e..2485386b 100644 --- a/src/extras/screendroplets.cpp +++ b/src/extras/screendroplets.cpp @@ -423,7 +423,7 @@ ScreenDroplets::ProcessCameraMovement(void) ms_movingEnabled = !isTopDown && !isLookingInDirection; // 0 when looking stright up, 180 when looking up or down - ms_camUpAngle = RADTODEG(Acos(clamp(camUp.z, -1.0f, 1.0f))); + ms_camUpAngle = RADTODEG(Acos(Clamp(camUp.z, -1.0f, 1.0f))); } void diff --git a/src/math/Matrix.h b/src/math/Matrix.h index 310477c3..2f960ee6 100644 --- a/src/math/Matrix.h +++ b/src/math/Matrix.h @@ -92,22 +92,6 @@ public: void SetRotateXOnly(float angle); void SetRotateYOnly(float angle); void SetRotateZOnly(float angle); - void SetRotateZOnlyScaled(float angle, float scale) { - float c = Cos(angle); - float s = Sin(angle); - - rx = c * scale; - ry = s * scale; - rz = 0.0f; - - fx = -s * scale; - fy = c * scale; - fz = 0.0f; - - ux = 0.0f; - uy = 0.0f; - uz = scale; - } void SetRotateX(float angle); void SetRotateY(float angle); void SetRotateZ(float angle); diff --git a/src/math/VuVector.h b/src/math/VuVector.h index 30d62cfc..41584095 100644 --- a/src/math/VuVector.h +++ b/src/math/VuVector.h @@ -22,6 +22,8 @@ public: x = 1.0f; } */ + + // TODO: operator- }; void TransformPoint(CVuVector &out, const CMatrix &mat, const CVuVector &in); diff --git a/src/math/maths.h b/src/math/maths.h index 8d68bf64..6a228036 100644 --- a/src/math/maths.h +++ b/src/math/maths.h @@ -10,7 +10,7 @@ inline float Acos(float x) { return acosf(x); } inline float Tan(float x) { return tanf(x); } inline float Atan(float x) { return atanf(x); } inline float Atan2(float y, float x) { return atan2f(y, x); } -inline float Abs(float x) { return fabs(x); } +inline float Abs(float x) { return fabsf(x); } inline float Sqrt(float x) { return sqrtf(x); } inline float RecipSqrt(float x, float y) { return x/Sqrt(y); } inline float RecipSqrt(float x) { return RecipSqrt(1.0f, x); } diff --git a/src/modelinfo/BaseModelInfo.cpp b/src/modelinfo/BaseModelInfo.cpp index 765469b4..709420fd 100644 --- a/src/modelinfo/BaseModelInfo.cpp +++ b/src/modelinfo/BaseModelInfo.cpp @@ -27,6 +27,7 @@ CBaseModelInfo::Shutdown(void) m_2dEffectsID = -1; m_num2dEffects = 0; m_txdSlot = -1; + m_objectId = -1; } void diff --git a/src/modelinfo/ModelInfo.h b/src/modelinfo/ModelInfo.h index 30f4c015..f92a73ad 100644 --- a/src/modelinfo/ModelInfo.h +++ b/src/modelinfo/ModelInfo.h @@ -38,6 +38,9 @@ public: return ms_modelInfoPtrs[id]; } static CBaseModelInfo *GetModelInfo(const char *name, int minIndex, int maxIndex); + static CColModel *GetColModel(int id){ + return ms_modelInfoPtrs[id]->GetColModel(); + } static bool IsBoatModel(int32 id); static bool IsBikeModel(int32 id); diff --git a/src/modelinfo/PedModelInfo.cpp b/src/modelinfo/PedModelInfo.cpp index 28de2507..25b260d3 100644 --- a/src/modelinfo/PedModelInfo.cpp +++ b/src/modelinfo/PedModelInfo.cpp @@ -86,6 +86,11 @@ CPedModelInfo::CreateHitColModelSkinned(RpClump *clump) for(int i = 0; i < NUMPEDINFONODES; i++){ *mat = *invmat; + + // From LCS. Otherwise gives FPE +#ifdef FIX_BUGS + spheres[i].center = CVector(0.0f, 0.0f, 0.0f); +#else int id = ConvertPedNode2BoneTag(m_pColNodeInfos[i].pedNode); // this is wrong, wtf R* ??? int idx = RpHAnimIDGetIndex(hier, id); @@ -95,6 +100,7 @@ CPedModelInfo::CreateHitColModelSkinned(RpClump *clump) RwV3dTransformPoints(&pos, &pos, 1, mat); spheres[i].center = pos + CVector(m_pColNodeInfos[i].x, 0.0f, m_pColNodeInfos[i].z); +#endif spheres[i].radius = m_pColNodeInfos[i].radius; spheres[i].surface = SURFACE_PED; spheres[i].piece = m_pColNodeInfos[i].pieceType; diff --git a/src/objects/Object.cpp b/src/objects/Object.cpp index 0605f54f..64c9e256 100644 --- a/src/objects/Object.cpp +++ b/src/objects/Object.cpp @@ -25,10 +25,32 @@ int16 CObject::nNoTempObjects; //int16 CObject::nBodyCastHealth = 1000; float CObject::fDistToNearestTree; -void *CObject::operator new(size_t sz) { return CPools::GetObjectPool()->New(); } -void *CObject::operator new(size_t sz, int handle) { return CPools::GetObjectPool()->New(handle);}; -void CObject::operator delete(void *p, size_t sz) { CPools::GetObjectPool()->Delete((CObject*)p); } -void CObject::operator delete(void *p, int handle) { CPools::GetObjectPool()->Delete((CObject*)p); } +// Object pools tends to be full sometimes, let's free a temp. object in this case. +#ifdef FIX_BUGS +void *CObject::operator new(size_t sz) throw() { + CObject *obj = CPools::GetObjectPool()->New(); + if (!obj) { + CObjectPool *objectPool = CPools::GetObjectPool(); + for (int32 i = 0; i < objectPool->GetSize(); i++) { + CObject *existing = objectPool->GetSlot(i); + if (existing && existing->ObjectCreatedBy == TEMP_OBJECT) { + int32 handle = objectPool->GetIndex(existing); + CWorld::Remove(existing); + delete existing; + obj = objectPool->New(handle); + break; + } + } + } + return obj; +} +#else +void *CObject::operator new(size_t sz) throw() { return CPools::GetObjectPool()->New(); } +#endif +void *CObject::operator new(size_t sz, int handle) throw() { return CPools::GetObjectPool()->New(handle); }; + +void CObject::operator delete(void *p, size_t sz) throw() { CPools::GetObjectPool()->Delete((CObject*)p); } +void CObject::operator delete(void *p, int handle) throw() { CPools::GetObjectPool()->Delete((CObject*)p); } CObject::CObject(void) { @@ -77,7 +99,7 @@ CObject::CObject(CDummyObject *dummy) if (dummy->m_rwObject) AttachToRwObject(dummy->m_rwObject); else - GetMatrix() = dummy->GetMatrix(); + SetMatrix(dummy->GetMatrix()); m_objectMatrix = dummy->GetMatrix(); dummy->DetachFromRwObject(); @@ -190,8 +212,8 @@ void CObject::Teleport(CVector vecPos) { CWorld::Remove(this); - m_matrix.GetPosition() = vecPos; - m_matrix.UpdateRW(); + GetMatrix().GetPosition() = vecPos; + GetMatrix().UpdateRW(); UpdateRwFrame(); CWorld::Add(this); } @@ -212,9 +234,9 @@ CObject::Render(void) float green = (0.8f * CTimeCycle::GetDirectionalGreen() + CTimeCycle::GetAmbientGreen_Obj()) * 165.75f; float blue = (0.8f * CTimeCycle::GetDirectionalBlue() + CTimeCycle::GetAmbientBlue_Obj()) * 165.75f; - red = clamp(red, 0.0f, 255.0f); - green = clamp(green, 0.0f, 255.0f); - blue = clamp(blue, 0.0f, 255.0f); + red = Clamp(red, 0.0f, 255.0f); + green = Clamp(green, 0.0f, 255.0f); + blue = Clamp(blue, 0.0f, 255.0f); int alpha = CGeneral::GetRandomNumberInRange(196, 225); @@ -356,7 +378,7 @@ CObject::ObjectDamage(float amount) } #endif if ((amount * m_fCollisionDamageMultiplier > 150.0f || bBodyCastDamageEffect) && m_nCollisionDamageEffect) { - const CVector &vecPos = m_matrix.GetPosition(); + const CVector& vecPos = GetMatrix().GetPosition(); const float fDirectionZ = 0.0002f * amount; switch (m_nCollisionDamageEffect) { case DAMAGE_EFFECT_CHANGE_MODEL: @@ -653,7 +675,7 @@ CObject::ObjectDamage(float amount) CParticle::AddParticle(PARTICLE_CAR_DEBRIS, particlePos, particleDir, nil, fSize, particleColor, nRotationSpeed, 0, nCurFrame, 0); if ((i % 7) == 0) { static RwRGBA secondaryColor = { 0x9A, 0x99, 0x99, 0x3E }; - CParticle::AddParticle(PARTICLE_DEBRIS, particlePos, particleDir, nil, 0.3, secondaryColor, nRotationSpeed, 0, 0, 0); + CParticle::AddParticle(PARTICLE_DEBRIS, particlePos, particleDir, nil, 0.3f, secondaryColor, nRotationSpeed); } } PlayOneShotScriptObject(SCRIPT_SOUND_BOX_DESTROYED_2, vecPos); @@ -746,7 +768,7 @@ CObject::Init(void) m_pCollidingEntity = nil; CColPoint point; CEntity *outEntity = nil; - const CVector &vecPos = m_matrix.GetPosition(); + const CVector& vecPos = GetMatrix().GetPosition(); if (CWorld::ProcessVerticalLine(vecPos, vecPos.z - 10.0f, point, outEntity, true, false, false, false, false, false, nil)) m_pCurSurface = outEntity; else diff --git a/src/objects/Object.h b/src/objects/Object.h index e34043a8..f59379bf 100644 --- a/src/objects/Object.h +++ b/src/objects/Object.h @@ -87,10 +87,10 @@ public: static int16 nNoTempObjects; static float fDistToNearestTree; - static void *operator new(size_t); - static void *operator new(size_t, int); - static void operator delete(void*, size_t); - static void operator delete(void*, int); + static void *operator new(size_t) throw(); + static void *operator new(size_t, int) throw(); + static void operator delete(void*, size_t) throw(); + static void operator delete(void*, int) throw(); CObject(void); CObject(int32, bool); diff --git a/src/objects/ParticleObject.cpp b/src/objects/ParticleObject.cpp index 4d080d1f..28c5240f 100644 --- a/src/objects/ParticleObject.cpp +++ b/src/objects/ParticleObject.cpp @@ -10,6 +10,12 @@ #include "DMAudio.h" #include "screendroplets.h" +#ifdef COMPATIBLE_SAVES +#define PARTICLE_OBJECT_SIZEOF 0x84 +#else +#define PARTICLE_OBJECT_SIZEOF sizeof(CParticleObject) +#endif + CParticleObject gPObjectArray[MAX_PARTICLEOBJECTS]; @@ -33,7 +39,7 @@ CAudioHydrant::Add(CParticleObject *particleobject) if ( AEHANDLE_IS_FAILED(List[i].AudioEntity) ) return false; - DMAudio.SetEntityStatus(List[i].AudioEntity, true); + DMAudio.SetEntityStatus(List[i].AudioEntity, TRUE); List[i].pParticleObject = particleobject; @@ -1051,6 +1057,48 @@ CParticleObject::UpdateFar(void) } } +#ifdef COMPATIBLE_SAVES +static inline void +SaveOneParticle(CParticleObject *p, uint8 *&buffer) +{ +#define SkipBuf(buf, num) buf += num +#define ZeroBuf(buf, num) memset(buf, 0, num); SkipBuf(buf, num) +#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); SkipBuf(buf, sizeof(data)) + // CPlaceable + { + CopyToBuf(buffer, p->GetMatrix().f); + ZeroBuf(buffer, 4); + CopyToBuf(buffer, p->GetMatrix().m_hasRwMatrix); + ZeroBuf(buffer, 3); + } + + // CParticleObject + { + ZeroBuf(buffer, 4); + ZeroBuf(buffer, 4); + ZeroBuf(buffer, 4); + CopyToBuf(buffer, p->m_nRemoveTimer); + CopyToBuf(buffer, p->m_Type); + CopyToBuf(buffer, p->m_ParticleType); + CopyToBuf(buffer, p->m_nNumEffectCycles); + CopyToBuf(buffer, p->m_nSkipFrames); + CopyToBuf(buffer, p->m_nFrameCounter); + CopyToBuf(buffer, p->m_nState); + ZeroBuf(buffer, 2); + CopyToBuf(buffer, p->m_vecTarget); + CopyToBuf(buffer, p->m_fRandVal); + CopyToBuf(buffer, p->m_fSize); + CopyToBuf(buffer, p->m_Color); + CopyToBuf(buffer, p->m_bRemove); + CopyToBuf(buffer, p->m_nCreationChance); + ZeroBuf(buffer, 2); + } +#undef SkipBuf +#undef ZeroBuf +#undef CopyToBuf +} +#endif + bool CParticleObject::SaveParticle(uint8 *buffer, uint32 *length) { @@ -1068,27 +1116,35 @@ CParticleObject::SaveParticle(uint8 *buffer, uint32 *length) *(int32 *)buffer = numObjects; buffer += sizeof(int32); - int32 objectsLength = sizeof(CParticleObject) * (numObjects + 1); + int32 objectsLength = PARTICLE_OBJECT_SIZEOF * (numObjects + 1); int32 dataLength = objectsLength + sizeof(int32); for ( CParticleObject *p = pCloseListHead; p != nil; p = p->m_pNext ) { -#if 0 // todo better +#ifdef COMPATIBLE_SAVES + SaveOneParticle(p, buffer); +#else +#ifdef THIS_IS_STUPID *(CParticleObject*)buffer = *p; #else memcpy(buffer, p, sizeof(CParticleObject)); #endif buffer += sizeof(CParticleObject); +#endif } for ( CParticleObject *p = pFarListHead; p != nil; p = p->m_pNext ) { -#if 0 // todo better +#ifdef COMPATIBLE_SAVES + SaveOneParticle(p, buffer); +#else +#ifdef THIS_IS_STUPID *(CParticleObject*)buffer = *p; #else memcpy(buffer, p, sizeof(CParticleObject)); #endif buffer += sizeof(CParticleObject); +#endif } *length = dataLength; @@ -1106,7 +1162,7 @@ CParticleObject::LoadParticle(uint8 *buffer, uint32 length) int32 numObjects = *(int32 *)buffer; buffer += sizeof(int32); - if ( length != sizeof(CParticleObject) * (numObjects + 1) + sizeof(int32) ) + if ( length != PARTICLE_OBJECT_SIZEOF * (numObjects + 1) + sizeof(int32) ) return false; if ( numObjects == 0 ) @@ -1117,14 +1173,17 @@ CParticleObject::LoadParticle(uint8 *buffer, uint32 length) while ( i < numObjects ) { CParticleObject *dst = pUnusedListHead; +#ifndef COMPATIBLE_SAVES CParticleObject *src = (CParticleObject *)buffer; buffer += sizeof(CParticleObject); +#endif if ( dst == nil ) return false; MoveToList(&pUnusedListHead, &pCloseListHead, dst); - + +#ifndef COMPATIBLE_SAVES dst->m_nState = POBJECTSTATE_UPDATE_CLOSE; dst->m_Type = src->m_Type; dst->m_ParticleType = src->m_ParticleType; @@ -1140,6 +1199,46 @@ CParticleObject::LoadParticle(uint8 *buffer, uint32 length) dst->m_nNumEffectCycles = src->m_nNumEffectCycles; dst->m_nSkipFrames = src->m_nSkipFrames; dst->m_nCreationChance = src->m_nCreationChance; +#else + dst->m_nState = POBJECTSTATE_UPDATE_CLOSE; + dst->m_pParticle = NULL; + +#define SkipBuf(buf, num) buf += num +#define CopyFromBuf(buf, data) memcpy(&data, buf, sizeof(data)); SkipBuf(buf, sizeof(data)) + // CPlaceable + { + CMatrix matrix; + CopyFromBuf(buffer, matrix.f); + SkipBuf(buffer, 4); + CopyFromBuf(buffer, matrix.m_hasRwMatrix); + SkipBuf(buffer, 3); + dst->SetPosition(matrix.GetPosition()); + } + + // CParticleObject + { + SkipBuf(buffer, 4); + SkipBuf(buffer, 4); + SkipBuf(buffer, 4); + CopyFromBuf(buffer, dst->m_nRemoveTimer); + CopyFromBuf(buffer, dst->m_Type); + CopyFromBuf(buffer, dst->m_ParticleType); + CopyFromBuf(buffer, dst->m_nNumEffectCycles); + CopyFromBuf(buffer, dst->m_nSkipFrames); + CopyFromBuf(buffer, dst->m_nFrameCounter); + SkipBuf(buffer, 2); + SkipBuf(buffer, 2); + CopyFromBuf(buffer, dst->m_vecTarget); + CopyFromBuf(buffer, dst->m_fRandVal); + CopyFromBuf(buffer, dst->m_fSize); + CopyFromBuf(buffer, dst->m_Color); + CopyFromBuf(buffer, dst->m_bRemove); + CopyFromBuf(buffer, dst->m_nCreationChance); + SkipBuf(buffer, 2); + } +#undef CopyFromBuf +#undef SkipBuf +#endif i++; } diff --git a/src/objects/Stinger.cpp b/src/objects/Stinger.cpp index 79730c89..d3eee416 100644 --- a/src/objects/Stinger.cpp +++ b/src/objects/Stinger.cpp @@ -46,7 +46,14 @@ CStinger::Init(CPed *pPed) pOwner = pPed; for (i = 0; i < NUM_STINGER_SEGMENTS; i++) { - pSpikes[i] = new CStingerSegment; + pSpikes[i] = new CStingerSegment(); +#ifdef FIX_BUGS + if (!pSpikes[i]) { + // Abort!! Pool is full + Remove(); + return; + } +#endif pSpikes[i]->bUsesCollision = false; } bIsDeployed = true; @@ -75,10 +82,19 @@ CStinger::Remove() for (int32 i = 0; i < NUM_STINGER_SEGMENTS; i++) { CStingerSegment *spikeSegment = pSpikes[i]; + +#ifdef FIX_BUGS + if (spikeSegment) { + CWorld::Remove(spikeSegment); + delete spikeSegment; + pSpikes[i] = nil; + } +#else if (spikeSegment->m_entryInfoList.first != nil) spikeSegment->bRemoveFromWorld = true; else delete spikeSegment; +#endif } bIsDeployed = false; } @@ -86,9 +102,15 @@ CStinger::Remove() void CStinger::Deploy(CPed *pPed) { + // So total number of stingers allowed at the same time is 2, each by different CCopPed. if (NumOfStingerSegments < NUM_STINGER_SEGMENTS*2 && !pPed->bInVehicle && pPed->IsPedInControl()) { if (!bIsDeployed && RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_THROW_UNDER) == nil) { Init(pPed); +#ifdef FIX_BUGS + // Above call won't set it to true no more when object pool is full + if (!bIsDeployed) + return; +#endif pPed->SetPedState(PED_DEPLOY_STINGER); CAnimManager::AddAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_STD_THROW_UNDER); } @@ -161,6 +183,7 @@ CStinger::CheckForBurstTyres() } } +// Only called when bIsDeployed void CStinger::Process() { @@ -197,7 +220,7 @@ CStinger::Process() float degangle = progress * ARRAY_SIZE(m_vPositions); float angle1 = m_fMax_Z + DEGTORAD(degangle); float angle2 = m_fMax_Z - DEGTORAD(degangle); - int pos = clamp(degangle, 0, ARRAY_SIZE(m_vPositions)-1); + int pos = Clamp(degangle, 0, ARRAY_SIZE(m_vPositions)-1); CVector2D pos2d = m_vPositions[pos]; CVector pos3d = m_vPos; @@ -226,7 +249,11 @@ CStinger::Process() break; case STINGERSTATE_REMOVE: Remove(); +#ifdef FIX_BUGS + return; +#else break; +#endif } CheckForBurstTyres(); } \ No newline at end of file diff --git a/src/peds/CopPed.cpp b/src/peds/CopPed.cpp index 36bb02b6..1efd7733 100644 --- a/src/peds/CopPed.cpp +++ b/src/peds/CopPed.cpp @@ -93,7 +93,7 @@ CCopPed::CCopPed(eCopType copType, int32 modifier) : CPed(PEDTYPE_COP) m_nHassleTimer = 0; field_61C = 0; field_624 = 0; - m_pStinger = new CStinger; + m_pStinger = new CStinger(); SetWeaponLockOnTarget(nil); } @@ -555,7 +555,7 @@ CCopPed::CopAI(void) if (CWorld::GetIsLineOfSightClear(GetPosition(), nearPed->GetPosition(), true, false, false, false, false, false, false)) { - Say(SOUND_PED_COP_REACTION); + Say(SOUND_PED_COP_ASK_FOR_ID); SetObjective(OBJECTIVE_HASSLE_CHAR, nearPed); nearPed->SetObjective(OBJECTIVE_WAIT_ON_FOOT_FOR_COP, this); m_nHassleTimer = CTimer::GetTimeInMilliseconds() + 100000; @@ -747,7 +747,7 @@ CCopPed::ProcessControl(void) } if (m_pPointGunAt) - Say(SOUND_PED_COP_UNK_129); + Say(SOUND_PED_COP_TARGETING); if (m_bStopAndShootDisabledZone) { bool dontShoot = false; diff --git a/src/peds/Gangs.cpp b/src/peds/Gangs.cpp index 2d6d1137..240f6b37 100644 --- a/src/peds/Gangs.cpp +++ b/src/peds/Gangs.cpp @@ -5,6 +5,7 @@ #include "General.h" #include "Streaming.h" #include "Weapon.h" +#include "SaveBuf.h" CGangInfo CGangs::Gang[NUM_GANGS]; bool CGangs::GangAttackWithCops[NUM_GANGS]; @@ -119,6 +120,6 @@ INITSAVEBUF CheckSaveHeader(buf, 'G','N','G','\0', size - SAVE_HEADER_SIZE); for (int i = 0; i < NUM_GANGS; i++) - Gang[i] = ReadSaveBuf(buf); + ReadSaveBuf(&Gang[i], buf); VALIDATESAVEBUF(size); } diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp index ba09e8a4..cad10d8a 100644 --- a/src/peds/Ped.cpp +++ b/src/peds/Ped.cpp @@ -39,6 +39,7 @@ #include "CutsceneShadow.h" #include "Clock.h" #include "Wanted.h" +#include "SaveBuf.h" CPed *gapTempPedList[50]; uint16 gnNumTempPedList; @@ -53,10 +54,10 @@ bool CPed::bFannyMagnetCheat; bool CPed::bPedCheat3; CVector2D CPed::ms_vec2DFleePosition; -void *CPed::operator new(size_t sz) { return CPools::GetPedPool()->New(); } -void *CPed::operator new(size_t sz, int handle) { return CPools::GetPedPool()->New(handle); } -void CPed::operator delete(void *p, size_t sz) { CPools::GetPedPool()->Delete((CPed*)p); } -void CPed::operator delete(void *p, int handle) { CPools::GetPedPool()->Delete((CPed*)p); } +void *CPed::operator new(size_t sz) throw() { return CPools::GetPedPool()->New(); } +void *CPed::operator new(size_t sz, int handle) throw() { return CPools::GetPedPool()->New(handle); } +void CPed::operator delete(void *p, size_t sz) throw() { CPools::GetPedPool()->Delete((CPed*)p); } +void CPed::operator delete(void *p, int handle) throw() { CPools::GetPedPool()->Delete((CPed*)p); } float gfTommyFatness = 1.0f; @@ -317,7 +318,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this) bCanGiveUpSunbathing = true; m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, this); - DMAudio.SetEntityStatus(m_audioEntityId, true); + DMAudio.SetEntityStatus(m_audioEntityId, TRUE); m_fearFlags = CPedType::GetThreats(m_nPedType); m_threatEntity = nil; m_eventOrThreat = CVector2D(0.0f, 0.0f); @@ -402,6 +403,31 @@ CPed::~CPed(void) CPopulation::NumMiamiViceCops--; CPopulation::UpdatePedCount((ePedType)m_nPedType, true); DMAudio.DestroyEntity(m_audioEntityId); + + // Because of the nature of ped lists in GTA, it can sometimes be outdated. + // Remove ourself from nearPeds list of the Peds in our nearPeds list. +#ifdef FIX_BUGS + for(int i = 0; i < m_numNearPeds; i++) { + CPed *nearPed = m_nearPeds[i]; + assert(nearPed != nil); + if (!nearPed->IsPointerValid()) + continue; + + for(int j = 0; j < nearPed->m_numNearPeds;) { + assert(j == ARRAY_SIZE(m_nearPeds) - 1 || nearPed->m_nearPeds[j] || !nearPed->m_nearPeds[j+1]); // ensure nil comes after nil + + if (nearPed->m_nearPeds[j] == this) { + for (int k = j; k < ARRAY_SIZE(m_nearPeds) - 1; k++) { + nearPed->m_nearPeds[k] = nearPed->m_nearPeds[k + 1]; + nearPed->m_nearPeds[k + 1] = nil; + } + nearPed->m_nearPeds[ARRAY_SIZE(m_nearPeds) - 1] = nil; + nearPed->m_numNearPeds--; + } else + j++; + } + } +#endif } void @@ -518,13 +544,15 @@ CPed::BuildPedLists(void) removePed = true; } } + + assert(i == ARRAY_SIZE(m_nearPeds) - 1 || m_nearPeds[i] || !m_nearPeds[i+1]); // ensure nil comes after nil + if (removePed) { // If we arrive here, the ped we're checking isn't "near", so we should remove it. for (int j = i; j < ARRAY_SIZE(m_nearPeds) - 1; j++) { m_nearPeds[j] = m_nearPeds[j + 1]; m_nearPeds[j + 1] = nil; } - // Above loop won't work on last slot, so we need to empty it. m_nearPeds[ARRAY_SIZE(m_nearPeds) - 1] = nil; m_numNearPeds--; } else @@ -2382,7 +2410,7 @@ CPed::ProcessControl(void) if (m_nPedState == PED_JUMP) { if (m_nWaitTimer <= 2000) { if (m_nWaitTimer < 1000) - m_nWaitTimer += CTimer::GetTimeStep() * 0.02f * 1000.0f; + m_nWaitTimer += CTimer::GetTimeStepInMilliseconds(); } else { m_nWaitTimer = 0; } @@ -2860,7 +2888,7 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints) CColModel *hisCol = CModelInfo::GetModelInfo(collidingEnt->GetModelIndex())->GetColModel(); if (!bUsesCollision && !bJustCheckCollision) - return false; + return 0; if (collidingEnt->IsVehicle() && ((CVehicle*)collidingEnt)->IsBoat()) collidedWithBoat = true; @@ -6748,7 +6776,7 @@ CPed::FollowPath(void) } void -CPed::SetEvasiveStep(CEntity *reason, uint8 animType) +CPed::SetEvasiveStep(CPhysical *reason, uint8 animType) { AnimationId stepAnim; @@ -6766,22 +6794,23 @@ CPed::SetEvasiveStep(CEntity *reason, uint8 animType) if (neededTurn > PI) neededTurn = TWOPI - neededTurn; - CVehicle *veh = (CVehicle*)reason; - if (reason->IsVehicle() && veh->IsCar()) { + if (reason->IsVehicle() && ((CVehicle*)reason)->IsCar()) { + CVehicle *veh = (CVehicle*)reason; if (veh->m_nCarHornTimer != 0) { vehPressedHorn = true; if (!IsPlayer()) animType = 1; } } - if (neededTurn <= DEGTORAD(90.0f) || veh->GetModelIndex() == MI_RCBANDIT || vehPressedHorn || animType != 0) { - SetLookFlag(veh, true); - if ((CGeneral::GetRandomNumber() & 1) && veh->GetModelIndex() != MI_RCBANDIT && animType == 0) { + + if (neededTurn <= DEGTORAD(90.0f) || reason->GetModelIndex() == MI_RCBANDIT || vehPressedHorn || animType != 0) { + SetLookFlag(reason, true); + if ((CGeneral::GetRandomNumber() & 1) && reason->GetModelIndex() != MI_RCBANDIT && animType == 0) { stepAnim = ANIM_STD_HAILTAXI; } else { - float vehDirection = CGeneral::GetRadianAngleBetweenPoints( - veh->m_vecMoveSpeed.x, veh->m_vecMoveSpeed.y, + float dangerDirection = CGeneral::GetRadianAngleBetweenPoints( + reason->m_vecMoveSpeed.x, reason->m_vecMoveSpeed.y, 0.0f, 0.0f); // Let's turn our back to the "reason" @@ -6791,14 +6820,14 @@ CPed::SetEvasiveStep(CEntity *reason, uint8 animType) angleToFace -= TWOPI; // We don't want to run towards car's direction - float dangerZone = angleToFace - vehDirection; + float dangerZone = angleToFace - dangerDirection; dangerZone = CGeneral::LimitRadianAngle(dangerZone); // So, add or subtract 90deg (jump to left/right) according to that if (dangerZone > 0.0f) - angleToFace = vehDirection - HALFPI; + angleToFace = dangerDirection - HALFPI; else - angleToFace = vehDirection + HALFPI; + angleToFace = dangerDirection + HALFPI; stepAnim = ANIM_STD_NUM; if (animType == 0 || animType == 1) @@ -7761,26 +7790,40 @@ CPed::SetPedPositionInCar(void) } else { m_fRotationCur = m_pMyVehicle->GetForward().Heading(); } - GetMatrix() = newMat; + SetMatrix(newMat); } void CPed::LookForSexyPeds(void) { if ((!IsPedInControl() && m_nPedState != PED_DRIVING) - || m_lookTimer >= CTimer::GetTimeInMilliseconds() || m_nPedType != PEDTYPE_CIVMALE) + || m_lookTimer >= CTimer::GetTimeInMilliseconds() || +#ifdef FIX_BUGS + (m_nPedType != PEDTYPE_CIVMALE) && !IsFemale() && (m_nPedType != PEDTYPE_CRIMINAL) && !IsGangMember() +#else + m_nPedType != PEDTYPE_CIVMALE +#endif + ) return; for (int i = 0; i < m_numNearPeds; i++) { if (CanSeeEntity(m_nearPeds[i])) { if ((GetPosition() - m_nearPeds[i]->GetPosition()).Magnitude() < 10.0f) { CPed *nearPed = m_nearPeds[i]; - if ((nearPed->m_pedStats->m_sexiness > m_pedStats->m_sexiness) - && nearPed->m_nPedType == PEDTYPE_CIVFEMALE) { + if((nearPed->m_pedStats->m_sexiness > m_pedStats->m_sexiness) +#ifdef FIX_BUGS + && ((IsFemale() && !nearPed->IsFemale()) || (!IsFemale() && nearPed->IsFemale()))) { +#else + && nearPed->m_nPedType == PEDTYPE_CIVFEMALE) { +#endif SetLookFlag(nearPed, true); m_lookTimer = CTimer::GetTimeInMilliseconds() + 4000; - Say(SOUND_PED_CHAT_SEXY); +#ifdef FIX_BUGS + Say(IsFemale() ? SOUND_PED_CHAT_SEXY_FEMALE : SOUND_PED_CHAT_SEXY_MALE); +#else + Say(SOUND_PED_CHAT_SEXY_MALE); +#endif return; } } @@ -8734,7 +8777,7 @@ CPed::Wait(void) if ((GetPosition() - nearPed->GetPosition()).MagnitudeSqr() < sq(10.f)) { for (int anim = ANIM_STRIP_A; anim <= ANIM_STRIP_G; anim++) { if (RpAnimBlendClumpGetAssociation(nearPed->GetClump(), anim)) - Say(SOUND_PED_149); + Say(SOUND_PED_JEER); } } } @@ -9543,19 +9586,19 @@ CPed::Say(uint16 audio, int32 time) void CPed::Save(uint8*& buf) { - SkipSaveBuf(buf, 52); + ZeroSaveBuf(buf, 52); CopyToBuf(buf, GetPosition().x); CopyToBuf(buf, GetPosition().y); CopyToBuf(buf, GetPosition().z); - SkipSaveBuf(buf, 288); + ZeroSaveBuf(buf, 288); CopyToBuf(buf, CharCreatedBy); - SkipSaveBuf(buf, 499); + ZeroSaveBuf(buf, 499); CopyToBuf(buf, m_fHealth); CopyToBuf(buf, m_fArmour); - SkipSaveBuf(buf, 172); + ZeroSaveBuf(buf, 172); for (int i = 0; i < 10; i++) // has to be hardcoded m_weapons[i].Save(buf); - SkipSaveBuf(buf, 252); + ZeroSaveBuf(buf, 252); } void diff --git a/src/peds/Ped.h b/src/peds/Ped.h index c94cd320..f5a7d7dc 100644 --- a/src/peds/Ped.h +++ b/src/peds/Ped.h @@ -650,10 +650,10 @@ public: CVector m_vecSpotToGuard; float m_radiusToGuard; - static void *operator new(size_t); - static void *operator new(size_t, int); - static void operator delete(void*, size_t); - static void operator delete(void*, int); + static void *operator new(size_t) throw(); + static void *operator new(size_t, int) throw(); + static void operator delete(void*, size_t) throw(); + static void operator delete(void*, int) throw(); CPed(uint32 pedType); ~CPed(void); @@ -762,7 +762,7 @@ public: void SetAimFlag(CEntity* to); void SetAimFlag(float angle); void SetAmmo(eWeaponType weaponType, uint32 ammo); - void SetEvasiveStep(CEntity*, uint8); + void SetEvasiveStep(CPhysical*, uint8); void GrantAmmo(eWeaponType, uint32); void SetEvasiveDive(CPhysical*, uint8); void SetAttack(CEntity*); diff --git a/src/peds/PedAI.cpp b/src/peds/PedAI.cpp index cd8b06fa..e204dad9 100644 --- a/src/peds/PedAI.cpp +++ b/src/peds/PedAI.cpp @@ -1076,8 +1076,8 @@ CPed::ProcessObjective(void) SetMoveState(PEDMOVE_STILL); if (m_objective == OBJECTIVE_HASSLE_CHAR) { - Say(SOUND_PED_COP_REACTION); - m_pedInObjective->Say(SOUND_PED_UNK_126); + Say(SOUND_PED_COP_ASK_FOR_ID); + m_pedInObjective->Say(SOUND_PED_INNOCENT); m_leaveCarTimer = CTimer::GetTimeInMilliseconds() + 3000; m_pedInObjective->m_leaveCarTimer = CTimer::GetTimeInMilliseconds() + 3000; SetObjective(OBJECTIVE_WANDER); @@ -4600,13 +4600,97 @@ CPed::ExitCar(void) CVector CPed::GetPositionToOpenCarDoor(CVehicle *veh, uint32 component) { - CVector vehDoorPos = GetPositionToOpenCarDoor(veh, component, 1.0f); + CVector doorPos; + CVector vehDoorOffset; + CVehicleModelInfo* vehModel = veh->GetModelInfo(); -/* - // Unused - vehDoorPosWithoutOffset = veh->GetMatrix() * localVehDoorPos; -*/ - return vehDoorPos; + if (veh->IsBike()) { + CBike* bike = (CBike*)veh; + + if (component == CAR_WINDSCREEN) { + doorPos = vehModel->GetFrontSeatPosn(); + return bike->GetMatrix() * (doorPos + + CVector(-vecPedBikeKickAnimOffset.x, vecPedBikeKickAnimOffset.y, -vecPedBikeKickAnimOffset.z)); + } else { + switch (bike->m_bikeAnimType) { + case ASSOCGRP_BIKE_VESPA: + vehDoorOffset = vecPedVespaBikeJumpRhsAnimOffset; + break; + case ASSOCGRP_BIKE_HARLEY: + vehDoorOffset = vecPedHarleyBikeJumpRhsAnimOffset; + break; + case ASSOCGRP_BIKE_DIRT: + vehDoorOffset = vecPedDirtBikeJumpRhsAnimOffset; + break; + default: + vehDoorOffset = vecPedStdBikeJumpRhsAnimOffset; + break; + } + } + + doorPos = vehModel->GetFrontSeatPosn(); + if (component == CAR_DOOR_LR || component == CAR_DOOR_RR) { + doorPos = vehModel->m_positions[CAR_POS_BACKSEAT]; + } + + if (component == CAR_DOOR_LR || component == CAR_DOOR_LF) { + vehDoorOffset.x *= -1.f; + } + + CVector correctedPos; + bike->GetCorrectedWorldDoorPosition(correctedPos, vehDoorOffset, doorPos); + return correctedPos; + } else { + float seatOffset; + if (veh->bIsVan && (component == CAR_DOOR_LR || component == CAR_DOOR_RR)) { + seatOffset = 0.0f; + vehDoorOffset = vecPedVanRearDoorAnimOffset; + } else { + seatOffset = veh->pHandling->fSeatOffsetDistance; + if (veh->bLowVehicle) { + vehDoorOffset = vecPedCarDoorLoAnimOffset; + } else { + vehDoorOffset = vecPedCarDoorAnimOffset; + } + } + + switch (component) { + case CAR_DOOR_RF: + doorPos = vehModel->GetFrontSeatPosn(); + doorPos.x += seatOffset; + vehDoorOffset.x = -vehDoorOffset.x; + break; + + case CAR_DOOR_RR: + doorPos = vehModel->m_positions[CAR_POS_BACKSEAT]; + doorPos.x += seatOffset; + vehDoorOffset.x = -vehDoorOffset.x; + break; + + case CAR_DOOR_LF: + doorPos = vehModel->GetFrontSeatPosn(); + doorPos.x += seatOffset; + doorPos.x = -doorPos.x; + break; + + case CAR_DOOR_LR: + doorPos = vehModel->m_positions[CAR_POS_BACKSEAT]; + doorPos.x += seatOffset; + doorPos.x = -doorPos.x; + break; + + default: + doorPos = vehModel->GetFrontSeatPosn(); + vehDoorOffset = CVector(0.0f, 0.0f, 0.0f); + break; + } + + CVector diffVec = doorPos - vehDoorOffset; + return Multiply3x3(veh->GetMatrix(), diffVec) + veh->GetPosition(); + + //unused + //doorPos = Multiply3x3(veh->GetMatrix(), doorPos) + veh->GetMatrix(); + } } void @@ -5058,7 +5142,7 @@ CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation* animAssoc, void* arg) break; } } else { - draggedOutOffset = vecPedDraggedOutCarAnimOffset; + draggedOutOffset = CVector(vecPedDraggedOutCarAnimOffset.x, vecPedDraggedOutCarAnimOffset.y, 0.0f); } if (ped->m_vehDoor == CAR_DOOR_RF || ped->m_vehDoor == CAR_DOOR_RR) draggedOutOffset.x = -draggedOutOffset.x; @@ -5069,7 +5153,7 @@ CPed::PedSetDraggedOutCarPositionCB(CAnimBlendAssociation* animAssoc, void* arg) ped->m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f); ped->SetPosition(posAfterBeingDragged); - if (ped->m_pMyVehicle && !ped->m_pMyVehicle->IsBike() && !ped->m_pMyVehicle->IsRoomForPedToLeaveCar(ped->m_vehDoor, &vecPedDraggedOutCarAnimOffset)) { + if (ped->m_pMyVehicle && !ped->m_pMyVehicle->IsBike() && !ped->m_pMyVehicle->IsRoomForPedToLeaveCar(ped->m_vehDoor, &draggedOutOffset)) { ped->PositionPedOutOfCollision(); } @@ -5684,7 +5768,12 @@ CPed::GetPositionToOpenCarDoor(CVehicle *veh, uint32 component, float offset) doorPos = vehModel->GetFrontSeatPosn(); if (component == CAR_WINDSCREEN) { +#ifdef FIX_BUGS + return bike->GetMatrix() * (doorPos + + CVector(-vecPedBikeKickAnimOffset.x, vecPedBikeKickAnimOffset.y, -vecPedBikeKickAnimOffset.z)); +#else return bike->GetMatrix() * (doorPos + vecPedBikeKickAnimOffset); +#endif } else { switch (bike->m_bikeAnimType) { case ASSOCGRP_BIKE_VESPA: @@ -6312,7 +6401,7 @@ CPed::WarpPedToNearEntityOffScreen(CEntity *warpTo) if (Abs(zCorrectedPos.z - warpToPos.z) < 3.0f || Abs(zCorrectedPos.z - appropriatePos.z) < 3.0f) { appropriatePos.z = zCorrectedPos.z; - if (!TheCamera.IsSphereVisible(appropriatePos, 0.6f, &TheCamera.GetCameraMatrix()) + if (!TheCamera.IsSphereVisible(appropriatePos, 0.6f) && CWorld::GetIsLineOfSightClear(appropriatePos, warpToPos, true, true, false, true, false, false, false) && !CWorld::TestSphereAgainstWorld(appropriatePos, 0.6f, this, true, true, false, true, false, false)) { teleported = true; diff --git a/src/peds/PedDebug.cpp b/src/peds/PedDebug.cpp index aed11357..0dbabb58 100644 --- a/src/peds/PedDebug.cpp +++ b/src/peds/PedDebug.cpp @@ -157,6 +157,9 @@ static char PersonalityTypeText[][18] = { "Old Girl", "Tough Girl", "Tramp", +#ifdef FIX_BUGS // there's male and female ones + "Tramp", +#endif "Tourist", "Prostitute", "Criminal", diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp index 79e01211..8e377c81 100644 --- a/src/peds/PedFight.cpp +++ b/src/peds/PedFight.cpp @@ -821,7 +821,7 @@ CPed::Attack(void) || weaponAnimAssoc->currentTime - weaponAnimAssoc->timeStep > delayBetweenAnimAndFire) { if (GetWeapon()->m_eWeaponType == WEAPONTYPE_CHAINSAW) { - DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_CHAINSAW_ATTACK, 0.0f); + DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_CHAINSAW_IDLE, 0.0f); } else if (weaponAnimTime <= delayBetweenAnimAndFire || weaponAnimTime - weaponAnimAssoc->timeStep > delayBetweenAnimAndFire || !weaponAnimAssoc->IsRunning()) { if (weaponAnimAssoc->speed < 1.0f) weaponAnimAssoc->speed = 1.0f; @@ -897,7 +897,7 @@ CPed::Attack(void) CPad::GetPad(0)->StartShake(240, 180); } } else { - DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_CHAINSAW_IDLE, 0.0f); + DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_CHAINSAW_ATTACK, 0.0f); if (IsPlayer()) { CPad::GetPad(0)->StartShake(240, 90); } @@ -1304,7 +1304,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk) if (IsPlayer()) moveAssoc->speed = 1.2f; - m_takeAStepAfterAttack = 0; + m_takeAStepAfterAttack = false; m_fightButtonPressure = 0; } else if (IsPlayer() && GetWeapon()->m_eWeaponType != WEAPONTYPE_UNARMED && GetWeapon()->m_eWeaponType != WEAPONTYPE_BRASSKNUCKLE && @@ -3915,7 +3915,7 @@ CPed::DriveVehicle(void) targetLRLean = 0.0f; timeBlend = Pow(0.86f, CTimer::GetTimeStep()); } else { - targetLRLean = clamp(bike->m_fLeanLRAngle / bike->pBikeHandling->fFullAnimLean, -1.0f, 1.0f); + targetLRLean = Clamp(bike->m_fLeanLRAngle / bike->pBikeHandling->fFullAnimLean, -1.0f, 1.0f); timeBlend = Pow(0.86f, CTimer::GetTimeStep()); } @@ -4102,7 +4102,7 @@ CPed::DriveVehicle(void) lDriveAssoc->blendAmount = 0.0f; if (rDriveAssoc) - rDriveAssoc->blendAmount = clamp(steerAngle * -100.0f / 61.0f, 0.0f, 1.0f); + rDriveAssoc->blendAmount = Clamp(steerAngle * -100.0f / 61.0f, 0.0f, 1.0f); else if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_BOAT_DRIVE_RIGHT); else if (m_pMyVehicle->bLowVehicle) @@ -4115,7 +4115,7 @@ CPed::DriveVehicle(void) rDriveAssoc->blendAmount = 0.0f; if (lDriveAssoc) - lDriveAssoc->blendAmount = clamp(steerAngle * 100.0f / 61.0f, 0.0f, 1.0f); + lDriveAssoc->blendAmount = Clamp(steerAngle * 100.0f / 61.0f, 0.0f, 1.0f); else if (m_pMyVehicle->IsBoat() && !(m_pMyVehicle->pHandling->Flags & HANDLING_SIT_IN_BOAT)) CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_BOAT_DRIVE_LEFT); else if (m_pMyVehicle->bLowVehicle) diff --git a/src/peds/PedIK.cpp b/src/peds/PedIK.cpp index 475e04f1..cf2e4ed5 100644 --- a/src/peds/PedIK.cpp +++ b/src/peds/PedIK.cpp @@ -17,9 +17,9 @@ const RwV3d XaxisIK = { 1.0f, 0.0f, 0.0f}; const RwV3d YaxisIK = { 0.0f, 1.0f, 0.0f}; const RwV3d ZaxisIK = { 0.0f, 0.0f, 1.0f}; -CPedIK::CPedIK(CPed *ped) +CPedIK::CPedIK(CPed *ped) : m_ped(ped) { - m_ped = ped; + assert(ped != nil); m_flags = 0; m_headOrient.yaw = 0.0f; m_headOrient.pitch = 0.0f; @@ -79,7 +79,7 @@ CPedIK::MoveLimb(LimbOrientation &limb, float targetYaw, float targetPitch, Limb } if (limb.yaw > moveInfo.maxYaw || limb.yaw < moveInfo.minYaw) { - limb.yaw = clamp(limb.yaw, moveInfo.minYaw, moveInfo.maxYaw); + limb.yaw = Clamp(limb.yaw, moveInfo.minYaw, moveInfo.maxYaw); result = ANGLES_SET_TO_MAX; } @@ -97,7 +97,7 @@ CPedIK::MoveLimb(LimbOrientation &limb, float targetYaw, float targetPitch, Limb } if (limb.pitch > moveInfo.maxPitch || limb.pitch < moveInfo.minPitch) { - limb.pitch = clamp(limb.pitch, moveInfo.minPitch, moveInfo.maxPitch); + limb.pitch = Clamp(limb.pitch, moveInfo.minPitch, moveInfo.maxPitch); result = ANGLES_SET_TO_MAX; } return result; @@ -122,14 +122,14 @@ CPedIK::LookInDirection(float targetYaw, float targetPitch) m_headOrient.yaw = Atan2(-m->at.y, -m->at.x); m_headOrient.yaw -= m_ped->m_fRotationCur; m_headOrient.yaw = CGeneral::LimitRadianAngle(m_headOrient.yaw); - float up = clamp(m->up.z, -1.0f, 1.0f); + float up = Clamp(m->up.z, -1.0f, 1.0f); m_headOrient.pitch = Atan2(-up, Sqrt(1.0f - SQR(-up))); } // parent of head is neck RwMatrix *m = GetComponentMatrix(m_ped, PED_NECK); yaw = CGeneral::LimitRadianAngle(Atan2(-m->at.y, -m->at.x)); - float up = clamp(m->up.z, -1.0f, 1.0f); + float up = Clamp(m->up.z, -1.0f, 1.0f); pitch = Atan2(-up, Sqrt(1.0f - SQR(-up))); float headYaw = CGeneral::LimitRadianAngle(targetYaw - (yaw + m_torsoOrient.yaw)); float headPitch = CGeneral::LimitRadianAngle(targetPitch - pitch) * Cos(Min(Abs(headYaw), HALFPI)); @@ -336,11 +336,11 @@ CPedIK::RestoreLookAt(void) void CPedIK::ExtractYawAndPitchWorld(RwMatrix *mat, float *yaw, float *pitch) { - float f = clamp(DotProduct(mat->up, CVector(0.0f, 1.0f, 0.0f)), -1.0f, 1.0f); + float f = Clamp(DotProduct(mat->up, CVector(0.0f, 1.0f, 0.0f)), -1.0f, 1.0f); *yaw = Acos(f); if (mat->up.x > 0.0f) *yaw = -*yaw; - f = clamp(DotProduct(mat->right, CVector(0.0f, 0.0f, 1.0f)), -1.0f, 1.0f); + f = Clamp(DotProduct(mat->right, CVector(0.0f, 0.0f, 1.0f)), -1.0f, 1.0f); *pitch = Acos(f); if (mat->up.z > 0.0f) *pitch = -*pitch; } @@ -348,11 +348,11 @@ CPedIK::ExtractYawAndPitchWorld(RwMatrix *mat, float *yaw, float *pitch) void CPedIK::ExtractYawAndPitchLocal(RwMatrix *mat, float *yaw, float *pitch) { - float f = clamp(DotProduct(mat->at, CVector(0.0f, 0.0f, 1.0f)), -1.0f, 1.0f); + float f = Clamp(DotProduct(mat->at, CVector(0.0f, 0.0f, 1.0f)), -1.0f, 1.0f); *yaw = Acos(f); if (mat->at.y > 0.0f) *yaw = -*yaw; - f = clamp(DotProduct(mat->right, CVector(1.0f, 0.0f, 0.0f)), -1.0f, 1.0f); + f = Clamp(DotProduct(mat->right, CVector(1.0f, 0.0f, 0.0f)), -1.0f, 1.0f); *pitch = Acos(f); if (mat->up.x > 0.0f) *pitch = -*pitch; } diff --git a/src/peds/PedIK.h b/src/peds/PedIK.h index ee719fea..8be04365 100644 --- a/src/peds/PedIK.h +++ b/src/peds/PedIK.h @@ -34,7 +34,7 @@ public: AIMS_WITH_ARM = 4, }; - CPed *m_ped; + CPed *Const m_ped; LimbOrientation m_headOrient; LimbOrientation m_torsoOrient; LimbOrientation m_upperArmOrient; diff --git a/src/peds/PedType.cpp b/src/peds/PedType.cpp index bacb1a78..dcd4c717 100644 --- a/src/peds/PedType.cpp +++ b/src/peds/PedType.cpp @@ -3,6 +3,7 @@ #include "General.h" #include "FileMgr.h" #include "PedType.h" +#include "SaveBuf.h" CPedType *CPedType::ms_apPedType[NUM_PEDTYPES]; CPedStats *CPedStats::ms_apPedStats[NUM_PEDSTATS]; @@ -201,7 +202,7 @@ INITSAVEBUF CheckSaveHeader(buf, 'P', 'T', 'P', '\0', size - SAVE_HEADER_SIZE); for(int i = 0; i < NUM_PEDTYPES; i++) - *ms_apPedType[i] = ReadSaveBuf(buf); + ReadSaveBuf(ms_apPedType[i], buf); VALIDATESAVEBUF(size) } diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp index 9c668cf4..8225189f 100644 --- a/src/peds/PlayerPed.cpp +++ b/src/peds/PlayerPed.cpp @@ -23,6 +23,7 @@ #include "Replay.h" #include "PedPlacement.h" #include "VarConsole.h" +#include "SaveBuf.h" #define PAD_MOVE_TO_GAME_WORLD_MOVE 60.0f @@ -836,8 +837,8 @@ CPlayerPed::PlayerControlFighter(CPad *padUsed) if (padMove > 0.0f) { m_fRotationDest = CGeneral::GetRadianAngleBetweenPoints(0.0f, 0.0f, -leftRight, upDown) - TheCamera.Orientation; - m_takeAStepAfterAttack = padMove > 2 * PAD_MOVE_TO_GAME_WORLD_MOVE; - if (padUsed->GetSprint() && padMove > 1 * PAD_MOVE_TO_GAME_WORLD_MOVE) + m_takeAStepAfterAttack = padMove > (2 * PAD_MOVE_TO_GAME_WORLD_MOVE); + if (padUsed->GetSprint() && padMove > (1 * PAD_MOVE_TO_GAME_WORLD_MOVE)) bIsAttacking = false; } @@ -869,7 +870,7 @@ CPlayerPed::PlayerControl1stPersonRunAround(CPad *padUsed) if (m_nPedState == PED_JUMP) { if (bIsInTheAir) { if (bUsesCollision && !bHitSteepSlope && (!bHitSomethingLastFrame || m_vecDamageNormal.z > 0.6f) - && m_fDistanceTravelled < CTimer::GetTimeStep() * 0.02 && m_vecMoveSpeed.MagnitudeSqr() < 0.01f) { + && m_fDistanceTravelled < CTimer::GetTimeStepInSeconds() && m_vecMoveSpeed.MagnitudeSqr() < 0.01f) { float angleSin = Sin(m_fRotationCur); // originally sin(DEGTORAD(RADTODEG(m_fRotationCur))) o_O float angleCos = Cos(m_fRotationCur); @@ -1483,7 +1484,7 @@ CPlayerPed::PlayerControlZelda(CPad *padUsed) if (m_nPedState == PED_JUMP) { if (bIsInTheAir) { if (bUsesCollision && !bHitSteepSlope && (!bHitSomethingLastFrame || m_vecDamageNormal.z > 0.6f) - && m_fDistanceTravelled < CTimer::GetTimeStep() * 0.02 && m_vecMoveSpeed.MagnitudeSqr() < 0.01f) { + && m_fDistanceTravelled < CTimer::GetTimeStepInSeconds() && m_vecMoveSpeed.MagnitudeSqr() < 0.01f) { float angleSin = Sin(m_fRotationCur); // originally sin(DEGTORAD(RADTODEG(m_fRotationCur))) o_O float angleCos = Cos(m_fRotationCur); @@ -1679,7 +1680,7 @@ CPlayerPed::ProcessControl(void) } } if (GetWeapon()->m_eWeaponType == WEAPONTYPE_CHAINSAW && m_nPedState != PED_ATTACK && !bInVehicle) { - DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_CHAINSAW_ATTACK, 0.0f); + DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_CHAINSAW_IDLE, 0.0f); } if (m_nMoveState != PEDMOVE_RUN && m_nMoveState != PEDMOVE_SPRINT) @@ -2079,13 +2080,13 @@ CPlayerPed::UpdateMeleeAttackers(void) void CPlayerPed::RemovePedFromMeleeList(CPed *ped) { - int i = 0; - for (; m_pMeleeList[i] != ped; i++) { - if (i >= ARRAY_SIZE(m_pMeleeList)) + for (uint16 i = 0; i < ARRAY_SIZE(m_pMeleeList); i++) { + if (m_pMeleeList[i] == ped) { + m_pMeleeList[i] = nil; + ped->m_attackTimer = 0; return; + } } - m_pMeleeList[i] = nil; - ped->m_attackTimer = 0; } void @@ -2187,14 +2188,14 @@ void CPlayerPed::Save(uint8*& buf) { CPed::Save(buf); - SkipSaveBuf(buf, 16); + ZeroSaveBuf(buf, 16); CopyToBuf(buf, m_fMaxStamina); - SkipSaveBuf(buf, 28); + ZeroSaveBuf(buf, 28); CopyToBuf(buf, m_nTargettableObjects[0]); CopyToBuf(buf, m_nTargettableObjects[1]); CopyToBuf(buf, m_nTargettableObjects[2]); CopyToBuf(buf, m_nTargettableObjects[3]); - SkipSaveBuf(buf, 164); + ZeroSaveBuf(buf, 164); } void diff --git a/src/peds/Population.cpp b/src/peds/Population.cpp index 5603e2c6..384cef99 100644 --- a/src/peds/Population.cpp +++ b/src/peds/Population.cpp @@ -413,7 +413,7 @@ CPopulation::PedCreationDistMultiplier() return 1.0f; float vehSpeed = veh->m_vecMoveSpeed.Magnitude2D(); - return clamp(vehSpeed - 0.1f + 1.0f, 1.0f, 1.5f); + return Clamp(vehSpeed - 0.1f + 1.0f, 1.0f, 1.5f); } CPed* @@ -911,10 +911,9 @@ CPopulation::MoveCarsAndPedsOutOfAbandonedZones() void CPopulation::ConvertAllObjectsToDummyObjects() { - int poolSize = CPools::GetObjectPool()->GetSize(); - for (int poolIndex = poolSize - 1; poolIndex >= 0; poolIndex--) { - - CObject *obj = CPools::GetObjectPool()->GetSlot(poolIndex); + uint32 i = CPools::GetObjectPool()->GetSize(); + while(i--) { + CObject *obj = CPools::GetObjectPool()->GetSlot(i); if (obj) { if (obj->CanBeDeleted()) ConvertToDummyObject(obj); @@ -980,27 +979,30 @@ CPopulation::TestSafeForRealObject(CDummyObject *dummy) { CPtrNode *ptrNode; CColModel *dummyCol = dummy->GetColModel(); - float colRadius = dummy->GetBoundRadius(); - CVector colCentre = dummy->GetBoundCentre(); - int minX = CWorld::GetSectorIndexX(dummy->GetPosition().x - colRadius); + float radius = dummyCol->boundingSphere.radius; + int minX = CWorld::GetSectorIndexX(dummy->GetPosition().x - radius); if (minX < 0) minX = 0; - int minY = CWorld::GetSectorIndexY(dummy->GetPosition().y - colRadius); + int minY = CWorld::GetSectorIndexY(dummy->GetPosition().y - radius); if (minY < 0) minY = 0; - int maxX = CWorld::GetSectorIndexX(dummy->GetPosition().x + colRadius); + int maxX = CWorld::GetSectorIndexX(dummy->GetPosition().x + radius); #ifdef FIX_BUGS if (maxX >= NUMSECTORS_X) maxX = NUMSECTORS_X - 1; #else if (maxX >= NUMSECTORS_X) maxX = NUMSECTORS_X; #endif - int maxY = CWorld::GetSectorIndexY(dummy->GetPosition().y + colRadius); + int maxY = CWorld::GetSectorIndexY(dummy->GetPosition().y + radius); #ifdef FIX_BUGS if (maxY >= NUMSECTORS_Y) maxY = NUMSECTORS_Y - 1; #else if (maxY >= NUMSECTORS_Y) maxY = NUMSECTORS_Y; #endif + float colRadius = dummy->GetBoundRadius(); + CVUVECTOR colCentre; + dummy->GetBoundCentre(colCentre); + static CColPoint aTempColPoints[MAX_COLLISION_POINTS]; for (int curY = minY; curY <= maxY; curY++) { @@ -1435,7 +1437,7 @@ CPopulation::PlaceGangMembersInFormation(ePedType pedType, int pedAmount, CVecto CPed *createdPeds[5]; if (!TheCamera.IsSphereVisible(coors, 3.0f) || MIN_CREATION_DIST * PedCreationDistMultiplier() <= (coors - FindPlayerPed()->GetPosition()).Magnitude2D()) { - if (CPedPlacement::IsPositionClearForPed(coors, 3.0f, -1, 0)) { + if (CPedPlacement::IsPositionClearForPed(coors, 3.0f, -1, nil)) { bool leaderFoundGround; float leaderGroundZ = CWorld::FindGroundZFor3DCoord(coors.x, coors.y, coors.z, &leaderFoundGround) + 1.0f; if (leaderFoundGround) { @@ -1515,11 +1517,14 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c if (!TheCamera.IsSphereVisible(coors, circleR) || MIN_CREATION_DIST * PedCreationDistMultiplier() <= (coors - FindPlayerPed()->GetPosition()).Magnitude2D()) { - if (CPedPlacement::IsPositionClearForPed(coors, circleR, -1, 0)) { + if (CPedPlacement::IsPositionClearForPed(coors, circleR, -1, nil)) { int pedIdx = 0; CVector leaderPos; +#ifdef FIX_BUGS + bool createLeader = true; +#endif - for (int i = 0; i < pedAmount; i++) { + for (int i = 0; i < pedAmount; i++) { float angleMult = i + CGeneral::GetRandomNumberInRange(-0.2f, 0.2f); float randomR = circleR + CGeneral::GetRandomNumberInRange(-0.2f, 0.2f) * circleR; float xOffset = randomR * Cos(angleMult * circleSector); @@ -1528,8 +1533,10 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c float groundZ = CWorld::FindGroundZFor3DCoord(xOffset + coors.x, yOffset + coors.y, coors.z + 1.0, &foundGround) + 1.0f; if (foundGround) { CVector finalPos(coors.x + xOffset, coors.y + yOffset, coors.z > groundZ ? coors.z : groundZ); - - if (i == 0) +#ifndef FIX_BUGS + const bool createLeader = i == 0; +#endif + if (createLeader) leaderPos = finalPos; int gangModel = ChooseGangOccupation(pedType - PEDTYPE_GANG1); @@ -1552,11 +1559,11 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c } } } - bool memberCanSeeLeader = i == 0 ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); + bool memberCanSeeLeader = createLeader ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); - bool notTooCloseToLeader = i == 0 ? true : !(Abs(finalPos.z - leaderPos.z) < 1.0f); + bool notTooHighFromLeader = createLeader ? true : !(Abs(finalPos.z - leaderPos.z) >= 1.0f); - if (!foundObstacle && memberCanSeeLeader && notTooCloseToLeader) { + if (!foundObstacle && memberCanSeeLeader && notTooHighFromLeader) { CPed* newPed = AddPed(pedType, gangModel, finalPos); if (newPed) { createdPeds[pedIdx++] = newPed; @@ -1569,6 +1576,9 @@ CPopulation::PlaceGangMembersInCircle(ePedType pedType, int pedAmount, CVector c newPed->bCanAttackPlayerWithCops = true; CVisibilityPlugins::SetClumpAlpha(newPed->GetClump(), 0); +#ifdef FIX_BUGS + createLeader = false; +#endif } // No. #ifndef FIX_BUGS @@ -1616,7 +1626,7 @@ CPopulation::PlaceCouple(ePedType manType, int32 manModel, ePedType womanType, i return; if (!TheCamera.IsSphereVisible(coors, 1.5f) || MIN_CREATION_DIST * PedCreationDistMultiplier() <= (coors - FindPlayerPed()->GetPosition()).Magnitude2D()) { - if (CPedPlacement::IsPositionClearForPed(coors, CModelInfo::GetModelInfo(manModel)->GetColModel()->boundingSphere.radius, -1, 0)) { + if (CPedPlacement::IsPositionClearForPed(coors, CModelInfo::GetModelInfo(manModel)->GetColModel()->boundingSphere.radius, -1, nil)) { bool manFoundGround; float manGroundZ = CWorld::FindGroundZFor3DCoord(coors.x, coors.y, coors.z, &manFoundGround) + 1.0f; if (manFoundGround) { @@ -1698,9 +1708,12 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) if (!TheCamera.IsSphereVisible(coors, circleR) || MIN_CREATION_DIST * PedCreationDistMultiplier() <= (coors - FindPlayerPed()->GetPosition()).Magnitude2D()) { - if (CPedPlacement::IsPositionClearForPed(coors, circleR, -1, 0)) { + if (CPedPlacement::IsPositionClearForPed(coors, circleR, -1, nil)) { int pedIdx = 0; CVector leaderPos; +#ifdef FIX_BUGS + bool createLeader = true; +#endif for (int i = 0; i < pedAmount; i++) { float angleMult = i + CGeneral::GetRandomNumberInRange(-0.2f, 0.2f); @@ -1712,11 +1725,15 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) if (foundGround) { CVector finalPos(coors.x + xOffset, coors.y + yOffset, coors.z > groundZ ? coors.z : groundZ); - if (i == 0) +#ifndef FIX_BUGS + const bool createLeader = i == 0; +#endif + if (createLeader) leaderPos = finalPos; int pedModel = ChooseCivilianOccupation(group); CPedModelInfo *pedModelInfo = (CPedModelInfo*)CModelInfo::GetModelInfo(pedModel); + if (pedModelInfo->GetRwObject()) { CEntity* obstacles[6] = { nil, nil, nil, nil, nil, nil }; CPedPlacement::IsPositionClearForPed(finalPos, CModelInfo::GetModelInfo(pedModel)->GetColModel()->boundingSphere.radius, ARRAY_SIZE(obstacles), obstacles); @@ -1736,11 +1753,11 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) } } } - bool memberCanSeeLeader = i == 0 ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); + bool memberCanSeeLeader = createLeader ? true : CWorld::GetIsLineOfSightClear(finalPos, leaderPos, true, false, false, false, false, false, false); - bool notTooCloseToLeader = i == 0 ? true : !(Abs(finalPos.z - leaderPos.z) < 1.0f); + bool notTooHighFromLeader = createLeader ? true : !(Abs(finalPos.z - leaderPos.z) >= 1.0f); - if (!foundObstacle && memberCanSeeLeader && notTooCloseToLeader) { + if (!foundObstacle && memberCanSeeLeader && notTooHighFromLeader) { CPed *newPed = AddPed(pedModelInfo->m_pedType, pedModel, finalPos); if (newPed) { createdPeds[pedIdx++] = newPed; @@ -1751,6 +1768,9 @@ CPopulation::PlaceMallPedsAsStationaryGroup(CVector const& coors, int32 group) newPed->m_fRotationCur = angle; newPed->m_fearFlags = 0; CVisibilityPlugins::SetClumpAlpha(newPed->GetClump(), 0); +#ifdef FIX_BUGS + createLeader = false; +#endif } // No. #ifndef FIX_BUGS diff --git a/src/render/Antennas.cpp b/src/render/Antennas.cpp index 452069a0..5e30aca2 100644 --- a/src/render/Antennas.cpp +++ b/src/render/Antennas.cpp @@ -1,5 +1,6 @@ #include "common.h" +#include "main.h" #include "Antennas.h" CAntenna CAntennas::aAntennas[NUMANTENNAS]; @@ -70,6 +71,7 @@ CAntennas::Render(void) { int i, j; + PUSH_RENDERGROUP("CAntennas::Render"); for(i = 0; i < NUMANTENNAS; i++){ if(!aAntennas[i].active) continue; @@ -101,6 +103,8 @@ CAntennas::Render(void) } RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); + + POP_RENDERGROUP(); } void diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp index e3a8c86e..9cd32c5f 100644 --- a/src/render/Clouds.cpp +++ b/src/render/Clouds.cpp @@ -1,5 +1,6 @@ #include "common.h" +#include "main.h" #include "Sprite.h" #include "Sprite2d.h" #include "General.h" @@ -119,6 +120,8 @@ CClouds::Render(void) if(!CGame::CanSeeOutSideFromCurrArea()) return; + PUSH_RENDERGROUP("CClouds::Render"); + CCoronas::SunBlockedByClouds = false; RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); @@ -301,6 +304,8 @@ CClouds::Render(void) RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); + + POP_RENDERGROUP(); } bool @@ -313,6 +318,8 @@ void CClouds::RenderBackground(int16 topred, int16 topgreen, int16 topblue, int16 botred, int16 botgreen, int16 botblue, int16 alpha) { + PUSH_RENDERGROUP("CClouds::RenderBackground"); + CVector right = CrossProduct(TheCamera.GetUp(), TheCamera.GetForward()); right.Normalise(); float c = right.Magnitude2D(); @@ -415,6 +422,8 @@ CClouds::RenderBackground(int16 topred, int16 topgreen, int16 topblue, ms_colourBottom.g = fogg; ms_colourBottom.b = fogb; } + + POP_RENDERGROUP(); } void @@ -423,6 +432,8 @@ CClouds::RenderHorizon(void) if(UseDarkBackground()) return; + PUSH_RENDERGROUP("CClouds::RenderHorizon"); + ms_colourBottom.a = 230; ms_colourTop.a = 80; @@ -457,4 +468,6 @@ CClouds::RenderHorizon(void) CSprite2d::DrawAnyRect(0.0f, topleft, SCREEN_WIDTH, topright, 0.0f, botleft, SCREEN_WIDTH, botright, ms_colourBkGrd, ms_colourBkGrd, ms_colourBkGrd, ms_colourBkGrd); + + POP_RENDERGROUP(); } diff --git a/src/render/Console.h b/src/render/Console.h index b4fa60c4..9f22236f 100644 --- a/src/render/Console.h +++ b/src/render/Console.h @@ -23,3 +23,5 @@ public: }; extern CConsole TheConsole; + +void cprintf(char*, ...); \ No newline at end of file diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp index e3d3416c..d9bf88d1 100644 --- a/src/render/Coronas.cpp +++ b/src/render/Coronas.cpp @@ -249,6 +249,8 @@ CCoronas::Render(void) int i, j; int screenw, screenh; + PUSH_RENDERGROUP("CCoronas::Render"); + screenw = RwRasterGetWidth(RwCameraGetRaster(Scene.camera)); screenh = RwRasterGetHeight(RwCameraGetRaster(Scene.camera)); @@ -432,6 +434,8 @@ CCoronas::Render(void) RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); + + POP_RENDERGROUP(); } void @@ -442,6 +446,8 @@ CCoronas::RenderReflections(void) CEntity *entity; if(CWeather::WetRoads > 0.0f){ + PUSH_RENDERGROUP("CCoronas::RenderReflections"); + CSprite::InitSpriteBuffer(); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); @@ -487,7 +493,7 @@ CCoronas::RenderReflections(void) if(spriteCoors.z < drawDist){ float fadeDistance = drawDist / 2.0f; float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance; - distanceFade = clamp(distanceFade, 0.0f, 1.0f); + distanceFade = Clamp(distanceFade, 0.0f, 1.0f); float recipz = 1.0f/RwCameraGetNearClipPlane(Scene.camera); float heightFade = (20.0f - aCoronas[i].heightAboveRoad)/20.0f; int intensity = distanceFade*heightFade * 230.0 * CWeather::WetRoads; @@ -517,6 +523,8 @@ CCoronas::RenderReflections(void) RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); + + POP_RENDERGROUP(); }else{ for(i = 0; i < NUMCORONAS; i++) aCoronas[i].renderReflection = false; diff --git a/src/render/Fluff.cpp b/src/render/Fluff.cpp index 30e271fb..1e4d289b 100644 --- a/src/render/Fluff.cpp +++ b/src/render/Fluff.cpp @@ -23,6 +23,13 @@ #include "World.h" #include "Replay.h" #include "Coronas.h" +#include "SaveBuf.h" + +#ifdef COMPATIBLE_SAVES +#define SCRIPTPATHS_SAVE_SIZE 0x9C +#else +#define SCRIPTPATHS_SAVE_SIZE sizeof(aArray) +#endif CPlaneTrail CPlaneTrails::aArray[6]; RwImVertexIndex TrailIndices[32] = { @@ -459,6 +466,7 @@ void CMovingThings::Update() void CMovingThings::Render() { + PUSH_RENDERGROUP("CMovingThings::Render"); CSmokeTrails::Update(); int i; @@ -471,6 +479,7 @@ void CMovingThings::Render() CPlaneTrails::Render(); CSmokeTrails::Render(); CPlaneBanners::Render(); + POP_RENDERGROUP(); } void CMovingThings::RegisterOne(CEntity *pEnt, uint16 nType) { @@ -1152,7 +1161,7 @@ void CScriptPath::Update(void) { return; m_fPosition += m_fSpeed * CTimer::GetTimeStepInSeconds(); - m_fPosition = clamp(m_fPosition, 0.0f, m_fTotalLength); + m_fPosition = Clamp(m_fPosition, 0.0f, m_fTotalLength); if (m_pObjects[0] || m_pObjects[1] || m_pObjects[2] || m_pObjects[3] || m_pObjects[4] || m_pObjects[5]) { @@ -1265,33 +1274,67 @@ INITSAVEBUF aArray[i].Clear(); for (int32 i = 0; i < 3; i++) { - aArray[i] = ReadSaveBuf(buf); +#ifdef COMPATIBLE_SAVES + ReadSaveBuf(&aArray[i].m_numNodes, buf); + SkipSaveBuf(buf, 4); + ReadSaveBuf(&aArray[i].m_fTotalLength, buf); + ReadSaveBuf(&aArray[i].m_fSpeed, buf); + ReadSaveBuf(&aArray[i].m_fPosition, buf); + ReadSaveBuf(&aArray[i].m_fObjectLength, buf); + ReadSaveBuf(&aArray[i].m_state, buf); +#else + ReadSaveBuf(&aArray[i], buf); +#endif for (int32 j = 0; j < 6; j++) { +#ifdef COMPATIBLE_SAVES + aArray[i].m_pObjects[j] = nil; + int32 tmp; + ReadSaveBuf(&tmp, buf); + if (tmp != 0) { + aArray[i].m_pObjects[j] = CPools::GetObjectPool()->GetSlot(tmp - 1); + aArray[i].m_pObjects[j]->m_phy_flagA08 = false; + } +#else CScriptPath *pPath = &aArray[i]; if (pPath->m_pObjects[j] != nil) { pPath->m_pObjects[j] = CPools::GetObjectPool()->GetSlot((uintptr)pPath->m_pObjects[j] - 1); pPath->m_pObjects[j]->m_phy_flagA08 = false; } +#endif } aArray[i].m_pNode = new CPlaneNode[aArray[i].m_numNodes]; for (int32 j = 0; j < aArray[i].m_numNodes; j++) { - aArray[i].m_pNode[j] = ReadSaveBuf(buf); + ReadSaveBuf(&aArray[i].m_pNode[j], buf); } } VALIDATESAVEBUF(size) } void CScriptPaths::Save(uint8 *buf, uint32 *size) { - *size = sizeof(aArray); + *size = SCRIPTPATHS_SAVE_SIZE; INITSAVEBUF for (int32 i = 0; i < 3; i++) { +#ifdef COMPATIBLE_SAVES + WriteSaveBuf(buf, aArray[i].m_numNodes); + ZeroSaveBuf(buf, 4); + WriteSaveBuf(buf, aArray[i].m_fTotalLength); + WriteSaveBuf(buf, aArray[i].m_fSpeed); + WriteSaveBuf(buf, aArray[i].m_fPosition); + WriteSaveBuf(buf, aArray[i].m_fObjectLength); + WriteSaveBuf(buf, aArray[i].m_state); +#else CScriptPath *pPath = WriteSaveBuf(buf, aArray[i]); +#endif for (int32 j = 0; j < 6; j++) { +#ifdef COMPATIBLE_SAVES + WriteSaveBuf(buf, aArray[i].m_pObjects[j] != nil ? CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(aArray[i].m_pObjects[j]) + 1 : 0); +#else if (pPath->m_pObjects[j] != nil) pPath->m_pObjects[j] = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(pPath->m_pObjects[j]) + 1); +#endif } for (int32 j = 0; j < aArray[i].m_numNodes; j++) { diff --git a/src/render/Font.cpp b/src/render/Font.cpp index d97b6e2e..9c499248 100644 --- a/src/render/Font.cpp +++ b/src/render/Font.cpp @@ -71,8 +71,8 @@ int16 CFont::Size[MAX_FONTS][210] = { 18, 10, 17, 17, 17, 17, 17, 15, 12, 16, 5, 30, 30, 30, 30, 30, // A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, 12, 16, 19, 16, 19, 18, 18, 17, 22, 11, 17, 18, 18, 30, 22, 19, - #ifdef FIX_BUGS //P, Q, R, S, T, U, V, W, X, Y, Z, ??, ??, ??, ¡, \, + #ifdef FIX_BUGS 22, 19, 19, 20, 18, 19, 19, 29, 19, 18, 19, 19, 33, 33, 10, 19, #else 22, 19, 19, 20, 18, 19, 19, 29, 19, 18, 19, 19, 33, 33, 19, 19, @@ -85,8 +85,8 @@ int16 CFont::Size[MAX_FONTS][210] = { 16, 16, 16, 16, 33, 17, 18, 18, 18, 18, 11, 11, 11, 11, 19, 19, //Ô, Ö, Ù, Ú, Û, Ü, ß, à, á, â, ä, æ, ç, è, é, ê, 19, 19, 19, 19, 19, 19, 15, 14, 14, 14, 14, 20, 14, 11, 11, 11, - #ifdef FIX_BUGS //ë, ì, í, î, ï, ò, ó, ô, ö, ù, ú, û, ü, Ñ, ñ, ¿, + #ifdef FIX_BUGS 11, 10, 10, 10, 10, 12, 12, 12, 12, 15, 15, 15, 15, 22, 18, 21, #else 11, 10, 10, 10, 10, 12, 12, 12, 12, 15, 15, 15, 15, 24, 18, 21, @@ -96,7 +96,7 @@ int16 CFont::Size[MAX_FONTS][210] = { 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - //??,?? + //space, unprop 19, 16 }, { @@ -110,8 +110,8 @@ int16 CFont::Size[MAX_FONTS][210] = { 20, 7, 20, 20, 21, 20, 20, 19, 21, 20, 8, 30, 24, 30, 24, 19, //TM,A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, 20, 22, 22, 21, 22, 18, 18, 22, 22, 9, 14, 21, 18, 27, 21, 24, - #ifdef FIX_BUGS //P, Q, R, S, T, U, V, W, X, Y, Z, *I, \, *I, ¡, °, + #ifdef FIX_BUGS 22, 22, 23, 20, 19, 23, 22, 31, 23, 23, 21, 25, 13, 30, 7, 19, #else 22, 22, 23, 20, 19, 23, 22, 31, 23, 23, 21, 25, 13, 30, 10, 19, @@ -124,8 +124,8 @@ int16 CFont::Size[MAX_FONTS][210] = { 20, 20, 20, 20, 29, 22, 19, 19, 19, 19, 9, 9, 9, 9, 23, 23, //Ô, Ö, Ù, Ú, Û, Ü, ß, à, á, â, ä, æ, ç, è, é, ê, 23, 23, 24, 24, 24, 24, 20, 19, 17, 17, 17, 30, 16, 17, 17, 17, - #ifdef FIX_BUGS //ë, ì, í, î, ï, ò, ó, ô, ö, ù, ú, û, ü, Ñ, ñ, ¿, + #ifdef FIX_BUGS 17, 11, 11, 15, 12, 17, 17, 17, 17, 17, 17, 17, 17, 21, 17, 19, #else 17, 11, 11, 15, 12, 17, 17, 17, 17, 17, 17, 17, 17, 19, 20, 20, @@ -136,113 +136,114 @@ int16 CFont::Size[MAX_FONTS][210] = { 16, 19, 19, 9, 19, 20, 14, 29, 19, 19, 19, 19, 19, 19, 21, 19, //V2,W2,X2, Y2, Z2, À2, Á2, Â2, Ä2, Æ2, Ç2, È2, É2, Ê2, Ë2, Ì2, 20, 32, 20, 19, 19, 19, 19, 19, 19, 29, 19, 19, 19, 19, 19, 9, - #ifdef FIX_BUGS //Í2,Î2,Ï2, Ò2, Ó2, Ô2, Ö2, Ù2, Ú2, Û2, Ü2, ß2, Ñ2, ¿2, '2, .2, + #ifdef FIX_BUGS 9, 9, 9, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 10, 9, #else 9, 9, 9, 19, 19, 19, 19, 19, 19, 19, 19, 19, 21, 21, 10, 9, #endif - //??,?? + //space, unprop 10, 20 } #ifdef MORE_LANGUAGES }, { - { 13, 12, 31, 35, 23, 35, 31, 9, 14, 15, 25, 30, 11, 17, - 13, 31, 23, 16, 22, 21, 24, 23, 23, 20, 23, 22, 10, - 35, 26, 26, 26, 26, 30, 26, 24, 23, 24, 22, 21, 24, - 26, 10, 20, 26, 22, 29, 26, 25, 23, 25, 24, 24, 22, - 25, 24, 29, 29, 23, 25, 37, 22, 37, 35, 37, 35, 21, - 22, 21, 21, 22, 13, 22, 21, 10, 16, 22, 11, 32, 21, - 21, 23, 22, 16, 20, 14, 21, 20, 30, 25, 21, 21, 13, - 33, 13, 13, 13, 24, 22, 22, 19, 26, 21, 30, 20, 23, - 23, 21, 24, 26, 23, 22, 23, 21, 22, 20, 20, 26, 25, - 24, 22, 31, 32, 23, 30, 22, 22, 32, 23, 19, 18, 18, - 15, 22, 19, 27, 19, 20, 20, 18, 22, 24, 20, 19, 19, - 20, 19, 16, 19, 28, 20, 20, 18, 26, 27, 19, 26, 18, - 19, 27, 19, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 18, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 20 }, - { 13, 9, 21, 35, 23, 35, 35, 11, 35, 35, 25, 35, 11, - 17, 13, 33, 28, 14, 22, 21, 24, 23, 23, 21, 23, 22, - 10, 35, 13, 35, 13, 33, 5, 25, 22, 23, 24, 21, 21, 24, - 24, 9, 20, 24, 21, 27, 25, 25, 22, 25, 23, 20, 23, 23, - 23, 31, 23, 23, 23, 37, 33, 37, 35, 37, 35, 21, 19, - 19, 21, 19, 17, 21, 21, 8, 17, 18, 14, 24, 21, 21, 20, - 22, 19, 20, 20, 19, 20, 26, 21, 20, 21, 33, 33, 33, - 33, 35, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 16, }, - { 15, 14, 16, 25, 19, - 26, 22, 11, 18, 18, 27, 26, 13, 19, 9, 27, 19, 18, 19, - 19, 22, 19, 20, 18, 19, 20, 12, 32, 15, 32, 15, 35, - 15, 19, 19, 19, 19, 19, 16, 19, 20, 9, 19, 20, 14, 29, - 19, 20, 19, 19, 19, 19, 21, 19, 20, 32, 20, 19, 19, - 33, 31, 39, 37, 39, 37, 21, 21, 21, 23, 21, 19, 23, 23, 10, 19, 20, 16, 26, 23, - 21, 21, 20, 20, 22, 21, 22, 22, 26, 22, 22, 23, 35, - 35, 35, 35, 37, 19, 19, 19, 19, 19, 19, 29, 19, 19, - 19, 20, 22, 31, 19, 19, 19, 19, 19, 29, 19, 29, 19, - 21, 19, 30, 31, 21, 29, 19, 19, 29, 19, 21, 23, 32, - 21, 21, 30, 31, 22, 21, 32, 33, 23, 32, 21, 21, 32, - 21, 19, 19, 30, 31, 22, 22, 21, 32, 33, 23, 32, 21, - 21, 32, 21, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 11, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19 }, - }, - + { + 5, 9, 9, 0, 17, 17, 23, 3, 21, 18, 0, 8, 3, 8, 3, 0, + 16, 9, 16, 16, 15, 19, 15, 14, 17, 17, 4, 4, 0, 0, 0, 17, + 19, 17, 19, 15, 21, 18, 19, 16, 21, 13, 15, 21, 20, 28, 21, 18, + 22, 17, 21, 20, 18, 18, 20, 26, 22, 18, 18, 0, 8, 0, 9, 8, + 0, 14, 11, 12, 16, 11, 13, 13, 15, 10, 14, 15, 11, 21, 17, 10, + 20, 15, 12, 12, 16, 17, 13, 16, 13, 21, 11, 0, 0, 0, 0, 0, + 20, 19, 19, 22, 27, 15, 18, 18, 20, 26, 21, 23, 17, 22, 21, 17, + 26, 25, 26, 17, 20, 26, 17, 16, 11, 12, 13, 21, 11, 17, 17, 12, + 21, 17, 17, 15, 24, 16, 10, 20, 23, 16, 7, 9, 16, 23, 12, 11, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, + 19, 16 + }, + { + 11, 5, 10, 15, 19, 22, 20, 5, 9, 8, 11, 12, 5, 12, 6, 12, + 19, 5, 18, 19, 20, 18, 19, 18, 20, 19, 5, 6, 26, 12, 30, 19, + 23, 21, 20, 20, 20, 16, 16, 21, 19, 5, 13, 19, 16, 24, 20, 21, + 20, 21, 20, 19, 17, 20, 21, 30, 22, 21, 20, 25, 13, 30, 5, 9, + 10, 15, 15, 14, 15, 16, 10, 15, 15, 5, 5, 15, 5, 23, 15, 16, + 15, 15, 9, 16, 10, 15, 17, 24, 18, 15, 15, 27, 5, 19, 2, 2, + 20, 20, 16, 23, 30, 19, 20, 20, 21, 24, 19, 19, 20, 23, 22, 19, + 27, 29, 25, 20, 20, 28, 24, 16, 16, 14, 19, 25, 16, 16, 16, 17, + 19, 16, 16, 17, 25, 19, 15, 23, 26, 21, 16, 14, 22, 20, 16, 19, + 15, 14, 15, 16, 17, 15, 15, 15, 15, 15, 7, 15, 15, 15, 15, 15, + 13, 15, 15, 7, 15, 16, 13, 23, 15, 15, 15, 15, 15, 15, 17, 15, + 16, 24, 17, 17, 17, 15, 15, 13, 20, 23, 15, 17, 17, 16, 24, 15, + 15, 15, 23, 18, 15, 23, 26, 23, 16, 15, 23, 15, 15, 19, 2, 2, + 10, 20 + }, + }, { { - 13, 12, 31, 35, 23, 35, 31, 9, 14, 15, 25, 30, 11, 17, 13, 31, - 23, 16, 22, 21, 24, 23, 23, 20, 23, 22, 10, 35, 26, 26, 26, 26, - 30, 26, 24, 23, 24, 22, 21, 24, 26, 10, 20, 26, 22, 29, 26, 25, - 23, 25, 24, 24, 22, 25, 24, 29, 29, 23, 25, 37, 22, 37, 35, 37, - 35, 21, 22, 21, 21, 22, 13, 22, 21, 10, 16, 22, 11, 32, 21, 21, - 23, 22, 16, 20, 14, 21, 20, 30, 25, 21, 21, 33, 33, 33, 33, 35, - 27, 27, 27, 27, 32, 24, 23, 23, 23, 23, 11, 11, 11, 11, 26, 26, - 26, 26, 26, 26, 26, 25, 26, 21, 21, 21, 21, 32, 23, 22, 22, 22, - 22, 11, 11, 11, 11, 22, 22, 22, 22, 22, 22, 22, 22, 26, 21, 24, - 12, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 18, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 20 + //FONT2 EFIGS + //SPC,!, $, %, &, ', [, ], +, , -, ., + 12, 9, 22, 17, 19, 19, 25, 4, 33, 33, 25, 35, 11, 10, 6, 33, + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ??, + 18, 10, 17, 17, 17, 17, 17, 15, 12, 16, 5, 30, 30, 30, 30, 30, + // A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, + 12, 16, 19, 16, 19, 18, 18, 17, 22, 11, 17, 18, 18, 30, 22, 19, + //P, Q, R, S, T, U, V, W, X, Y, Z, ??, ??, ??, ¡, \, + 22, 19, 19, 20, 18, 19, 19, 29, 19, 18, 19, 19, 33, 33, 10, 19, + //??,a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, + 12, 14, 11, 11, 16, 11, 12, 14, 14, 10, 13, 12, 10, 19, 18, 12, + //p, q, r, s, t, u, v, w, x, y, z, ??, ??, ??, ??, ??, + 16, 13, 13, 11, 12, 15, 12, 15, 13, 12, 12, 37, 33, 37, 35, 37, + //À, Á, Â, Ä, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ò, Ó, + 16, 16, 16, 16, 33, 17, 18, 18, 18, 18, 11, 11, 11, 11, 19, 19, + //Ô, Ö, Ù, Ú, Û, Ü, ß, à, á, â, ä, æ, ç, è, é, ê, + 19, 19, 19, 19, 19, 19, 15, 14, 14, 14, 14, 20, 14, 11, 11, 11, + //ë, ì, í, î, ï, ò, ó, ô, ö, ù, ú, û, ü, Ñ, ñ, ¿, + 11, 10, 10, 10, 10, 12, 12, 12, 12, 15, 15, 15, 15, 22, 18, 21, + //i,BLANKS + 10, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + //space, unprop + 19, 16 }, - { - 13, 9, 21, 35, 23, 35, 35, 11, 35, 35, 25, 35, 11, 17, 13, 33, - 28, 14, 22, 21, 24, 23, 23, 21, 23, 22, 10, 35, 13, 35, 13, 33, - 5, 25, 22, 23, 24, 21, 21, 24, 24, 9, 20, 24, 21, 27, 25, 25, - 22, 25, 23, 20, 23, 23, 23, 31, 23, 23, 23, 37, 33, 37, 35, 37, - 35, 21, 19, 19, 21, 19, 17, 21, 21, 8, 17, 18, 14, 24, 21, 21, - 20, 22, 19, 20, 20, 19, 20, 26, 21, 20, 21, 33, 33, 33, 33, 35, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 16 - }, - - { - 15, 14, 16, 25, 19, 26, 22, 11, 18, 18, 27, 26, 13, 19, 9, 27, - 19, 18, 19, 19, 22, 19, 20, 18, 19, 20, 12, 32, 15, 32, 15, 35, - 15, 19, 19, 19, 19, 19, 16, 19, 20, 9, 19, 20, 14, 29, 19, 20, - 19, 19, 19, 19, 21, 19, 20, 32, 20, 19, 19, 33, 31, 39, 37, 39, - 37, 21, 21, 21, 23, 21, 19, 23, 23, 10, 19, 20, 16, 26, 23, 23, - 20, 20, 20, 22, 21, 22, 22, 26, 22, 22, 23, 35, 35, 35, 35, 37, - 19, 19, 19, 19, 29, 19, 19, 19, 19, 19, 9, 9, 9, 9, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 30, 19, 19, 19, 19, - 19, 10, 10, 10, 10, 19, 19, 19, 19, 19, 19, 19, 19, 19, 23, 35, - 12, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 11, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19 + //FONT1 EFIGS + //Characters with a '2' refer to the Pricedown font. + //Characters that are referred as '*I' are characters that contain icons for PS2/XBOX, but contain regular characters on PC + //in order to display them properly in the Keyboard controls menu. + //!2,!, *I,(R), $, %, &, ', [, ], *I, +, , -, ., *I, + 15, 7, 31, 25, 20, 23, 21, 7, 11, 10, 26, 14, 6, 12, 6, 26, + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, *I, *I, *I, *I, ?, + 20, 7, 20, 20, 21, 20, 20, 19, 21, 20, 8, 30, 24, 30, 24, 19, + //TM,A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, + 20, 22, 22, 21, 22, 18, 18, 22, 22, 9, 14, 21, 18, 27, 21, 24, + //P, Q, R, S, T, U, V, W, X, Y, Z, *I, \, *I, ¡, °, + 22, 22, 23, 20, 19, 23, 22, 31, 23, 23, 21, 25, 13, 30, 7, 19, + //(C),a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, + 10, 17, 17, 16, 17, 17, 11, 17, 17, 7, 7, 18, 7, 25, 17, 17, + //p, q, r, s, t, u, v, w, x, y, z, *I, *I, $2, (2, )2, + 17, 17, 11, 17, 11, 17, 18, 25, 19, 18, 17, 28, 26, 20, 15, 15, + //À, Á, Â, Ä, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ò, Ó, + 20, 20, 20, 20, 29, 22, 19, 19, 19, 19, 9, 9, 9, 9, 23, 23, + //Ô, Ö, Ù, Ú, Û, Ü, ß, à, á, â, ä, æ, ç, è, é, ê, + 23, 23, 24, 24, 24, 24, 20, 19, 17, 17, 17, 30, 16, 17, 17, 17, + //ë, ì, í, î, ï, ò, ó, ô, ö, ù, ú, û, ü, Ñ, ñ, ¿, + 17, 11, 11, 15, 12, 17, 17, 17, 17, 17, 17, 17, 17, 21, 17, 19, + //02,12,22, 32, 42, 52, 62, 72, 82, 92, :2, A2, B2, C2, D2, E2, + 20, 18, 19, 19, 21, 19, 19, 19, 19, 19, 16, 19, 19, 19, 20, 19, + //F2,G2,H2, I2, J2, K2, L2, M2, N2, O2, P2, Q2, R2, S2, T2, U2, + 16, 19, 19, 9, 19, 20, 14, 29, 19, 19, 19, 19, 19, 19, 21, 19, + //V2,W2,X2, Y2, Z2, À2, Á2, Â2, Ä2, Æ2, Ç2, È2, É2, Ê2, Ë2, Ì2, + 20, 32, 20, 19, 19, 19, 19, 19, 19, 29, 19, 19, 19, 19, 19, 9, + //Í2,Î2,Ï2, Ò2, Ó2, Ô2, Ö2, Ù2, Ú2, Û2, Ü2, ß2, Ñ2, ¿2, '2, .2, + 9, 9, 9, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 10, 9, + //space, unprop + 10, 20 } } #endif @@ -417,9 +418,8 @@ CFont::ReloadFonts(uint8 set) if (Slot != -1 && LanguageSet != set) { Sprite[0].Delete(); Sprite[1].Delete(); - Sprite[2].Delete(); if (IsJapanese()) - Sprite[3].Delete(); + Sprite[2].Delete(); CTxdStore::PushCurrentTxd(); CTxdStore::RemoveTxd(Slot); switch (set) @@ -441,12 +441,9 @@ CFont::ReloadFonts(uint8 set) CTxdStore::SetCurrentTxd(Slot); Sprite[0].SetTexture("font2", "font2_mask"); if (set == FONT_LANGSET_JAPANESE) { - Sprite[1].SetTexture("FONTJAP", "FONTJAP_mask"); - Sprite[3].SetTexture("FONTJAP", "FONTJAP_mask"); + Sprite[2].SetTexture("FONTJAP", "FONTJAP_mask"); } - else - Sprite[1].SetTexture("pager", "pager_mask"); - Sprite[2].SetTexture("font1", "font1_mask"); + Sprite[1].SetTexture("font1", "font1_mask"); CTxdStore::PopCurrentTxd(); } LanguageSet = set; @@ -579,7 +576,7 @@ CFont::PrintChar(float x, float y, wchar c) xoff / 16.0f, (yoff + 1.0f) / 12.8f - 0.009f, (xoff + 1.0f) / 16.0f - 0.001f, (yoff + 1.0f) / 12.8f - 0.0021f + 0.01f); #ifdef MORE_LANGUAGES - }else if (IsJapaneseFont()) { + /*}else if (IsJapaneseFont()) { if (Details.dropShadowPosition != 0) { CSprite2d::AddSpriteToBank(Details.bank + Details.style, // BUG: game doesn't add bank CRect(x + SCREEN_SCALE_X(Details.dropShadowPosition), @@ -600,7 +597,7 @@ CFont::PrintChar(float x, float y, wchar c) xoff * w / 1024.0f, yoff / 25.6f, xoff * w / 1024.0f + (1.0f / 48.0f) - 0.001f, yoff / 25.6f, xoff * w / 1024.0f, (yoff + 1.0f) / 25.6f - 0.002f, - xoff * w / 1024.0f + (1.0f / 48.0f) - 0.001f, (yoff + 1.0f) / 25.6f - 0.0001f); + xoff * w / 1024.0f + (1.0f / 48.0f) - 0.001f, (yoff + 1.0f) / 25.6f - 0.0001f);*/ #endif } else { if (bDontPrint) return; @@ -722,7 +719,7 @@ CFont::RenderFontBuffer() FontRenderStatePointer.pRenderState = (CFontRenderState*)FontRenderStateBuf; } -#ifdef MORE_LANGUAGES +#if 0 //def MORE_LANGUAGES bool CFont::PrintString(float x, float y, wchar *start, wchar *&end, float spwidth, float japX) { @@ -899,7 +896,7 @@ CFont::PrintString(float xstart, float ystart, wchar *s) float xleft = Details.centre ? xstart - x/2 : Details.rightJustify ? xstart - x : xstart; -#ifdef MORE_LANGUAGES +#if 0//def MORE_LANGUAGES PrintString(xleft, y, start, s, spaceWidth, xstart); #else PrintString(xleft, y, Details.anonymous_25, start, s, spaceWidth); @@ -937,7 +934,7 @@ CFont::PrintString(float xstart, float ystart, wchar *s) #endif lineLength = x; s = t+1; -#ifdef MORE_LANGUAGES +#if 0 //def MORE_LANGUAGES if (IsJapaneseFont() && !*s) { x += GetStringWidth(s); if (IsAnsiCharacter(s)) @@ -969,7 +966,7 @@ CFont::PrintString(float xstart, float ystart, wchar *s) float xleft = Details.centre ? xstart - x/2 : Details.rightJustify ? xstart - x : xstart; -#ifdef MORE_LANGUAGES +#if 0 //def MORE_LANGUAGES if (PrintString(xleft, y, start, s, 0.0f, xstart) && IsJapaneseFont()) { start = s; if (!Details.centre && !Details.rightJustify) @@ -995,7 +992,7 @@ CFont::GetNumberLines(float xstart, float ystart, wchar *s) wchar *t; n = 0; -#ifdef MORE_LANGUAGES +#if 0//def MORE_LANGUAGES bool bSomeJapBool = false; if (IsJapanese()) { @@ -1198,37 +1195,33 @@ CFont::GetCharacterWidth(wchar c) { #ifdef MORE_LANGUAGES if (IsJapanese()) { - if (!Details.proportional) + if (!RenderState.proportional) return Size[0][Details.style][192]; - if (c <= 94 || Details.style == FONT_HEADING || Details.style == FONT_BANK) { - switch (Details.style) + if (c <= 94 || Details.style == FONT_HEADING || RenderState.style == FONT_BANK) { + switch (RenderState.style) { case FONT_JAPANESE: return Size_jp[c]; default: - return Size[0][Details.style][c]; + return Size[0][RenderState.style][c]; } } - if (c < 254 && Details.style == FONT_PAGER) - return 29.4f; - switch (Details.style) + switch (RenderState.style) { case FONT_JAPANESE: return 29.4f; case FONT_BANK: return 10.0f; - case FONT_PAGER: - return 31.5f; default: - return Size[0][Details.style][c]; + return Size[0][RenderState.style][c]; } } - else if (Details.proportional) - return Size[LanguageSet][Details.style][c]; + else if (RenderState.proportional) + return Size[LanguageSet][RenderState.style][c]; else - return Size[LanguageSet][Details.style][192]; + return Size[LanguageSet][RenderState.style][209]; #else if (RenderState.proportional) @@ -1256,8 +1249,6 @@ CFont::GetCharacterSize(wchar c) return Size[0][Details.style][c] * Details.scaleX; } } - if (c < 254 && (Details.style == FONT_PAGER)) - return 29.4f * Details.scaleX; switch (Details.style) { @@ -1265,16 +1256,20 @@ CFont::GetCharacterSize(wchar c) return 29.4f * Details.scaleX; case FONT_BANK: return 10.0f * Details.scaleX; - case FONT_PAGER: - return 31.5f * Details.scaleX; default: return Size[0][Details.style][c] * Details.scaleX; } } - else if(Details.proportional) - return Size[LanguageSet][Details.style][c] * Details.scaleX; else - return Size[LanguageSet][Details.style][209] * Details.scaleX; + { + if (!Details.bFontHalfTexture && c == 30) c = 61; // wanted star + if (Details.bFontHalfTexture) + c = FindNewCharacter(c); + if (Details.proportional) + return Size[LanguageSet][Details.style][c] * Details.scaleX; + else + return Size[LanguageSet][Details.style][209] * Details.scaleX; + } #else #ifdef FIX_BUGS @@ -1546,7 +1541,7 @@ CFont::ParseToken(wchar* str, CRGBA &color, bool &flash, bool &bold) return s; } -#ifdef MORE_LANGUAGES +#if 0//def MORE_LANGUAGES wchar* CFont::ParseToken(wchar *s, bool japShit) { diff --git a/src/render/Font.h b/src/render/Font.h index b0cd0a27..42eb7b4c 100644 --- a/src/render/Font.h +++ b/src/render/Font.h @@ -123,7 +123,7 @@ enum class CFont { #ifdef MORE_LANGUAGES - static int16 Size[LANGSET_MAX][MAX_FONTS][193]; + static int16 Size[LANGSET_MAX][MAX_FONTS][210]; static uint8 LanguageSet; static int32 Slot; #else @@ -156,11 +156,11 @@ public: #endif static int GetNumberLines(float xstart, float ystart, wchar *s); static void GetTextRect(CRect *rect, float xstart, float ystart, wchar *s); -#ifdef MORE_LANGUAGES - static bool PrintString(float x, float y, wchar *start, wchar* &end, float spwidth, float japX); -#else +//#ifdef MORE_LANGUAGES +// static bool PrintString(float x, float y, wchar *start, wchar* &end, float spwidth, float japX); +//#else static void PrintString(float x, float y, uint32, wchar *start, wchar *end, float spwidth); -#endif +//#endif static void PrintStringFromBottom(float x, float y, wchar *str); static float GetCharacterWidth(wchar c); static float GetCharacterSize(wchar c); @@ -169,12 +169,12 @@ public: static float GetStringWidth_Jap(wchar* s); #endif static uint16 *GetNextSpace(wchar *s); -#ifdef MORE_LANGUAGES - static uint16 *ParseToken(wchar *s, bool japShit = false); -#else +//#ifdef MORE_LANGUAGES +// static uint16 *ParseToken(wchar *s, bool japShit = false); +//#else static uint16 *ParseToken(wchar *s); static uint16 *ParseToken(wchar *s, CRGBA &color, bool &flash, bool &bold); -#endif +//#endif static void DrawFonts(void); static void RenderFontBuffer(void); static uint16 character_code(uint8 c); @@ -212,6 +212,6 @@ public: static bool IsAnsiCharacter(wchar* s); static bool IsJapanesePunctuation(wchar* str); static bool IsJapanese() { return LanguageSet == FONT_LANGSET_JAPANESE; } - static bool IsJapaneseFont() { return IsJapanese() && (Details.style == FONT_JAPANESE || Details.style == FONT_PAGER); } + static bool IsJapaneseFont() { return IsJapanese() && (Details.style == FONT_JAPANESE); } #endif }; diff --git a/src/render/Glass.cpp b/src/render/Glass.cpp index c6d02755..b4ec8c7e 100644 --- a/src/render/Glass.cpp +++ b/src/render/Glass.cpp @@ -151,9 +151,9 @@ CFallingGlassPane::Render(void) uint8 alpha = CGlass::CalcAlphaWithNormal(&fwdNorm); #ifdef FIX_BUGS - uint16 time = clamp(CTimer::GetTimeInMilliseconds() > m_nTimer ? CTimer::GetTimeInMilliseconds() - m_nTimer : 0u, 0u, 500u); + uint16 time = Clamp(CTimer::GetTimeInMilliseconds() > m_nTimer ? CTimer::GetTimeInMilliseconds() - m_nTimer : 0u, 0u, 500u); #else - uint16 time = clamp(CTimer::GetTimeInMilliseconds() - m_nTimer, 0, 500); + uint16 time = Clamp(CTimer::GetTimeInMilliseconds() - m_nTimer, 0, 500); #endif uint8 color = int32( float(alpha) * (float(time) / 500) ); @@ -276,6 +276,8 @@ CGlass::Render(void) RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void *)rwBLENDONE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void *)TRUE); + PUSH_RENDERGROUP("CGlass::Render"); + for ( int32 i = 0; i < NUM_GLASSPANES; i++ ) { if ( aGlassPanes[i].m_bActive ) @@ -285,6 +287,8 @@ CGlass::Render(void) for ( uint32 i = 0; i < NumGlassEntities; i++ ) RenderEntityInGlass(apEntitiesToBeRendered[i]); + POP_RENDERGROUP(); + NumGlassEntities = 0; RenderHiLightPolys(); diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp index 91503917..33f33358 100644 --- a/src/render/Hud.cpp +++ b/src/render/Hud.cpp @@ -2070,7 +2070,7 @@ float CHud::DrawFadeState(DRAW_FADE_STATE fadingElement, int forceFadingIn) break; } - return clamp(alpha, 0.0f, 255.0f); + return Clamp(alpha, 0.0f, 255.0f); } void diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp index 9aa9abe1..1188e711 100644 --- a/src/render/MBlur.cpp +++ b/src/render/MBlur.cpp @@ -6,6 +6,7 @@ #include #endif +#include "main.h" #include "General.h" #include "RwHelper.h" #include "Camera.h" @@ -290,10 +291,10 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect, RwIm2DVertex *verts v1 = y1/height + v1Off; u2 = x2/width + u2Off; v2 = y2/height + v2Off; - u1 = clamp(u1, 0.0f, 1.0f); - v1 = clamp(v1, 0.0f, 1.0f); - u2 = clamp(u2, 0.0f, 1.0f); - v2 = clamp(v2, 0.0f, 1.0f); + u1 = Clamp(u1, 0.0f, 1.0f); + v1 = Clamp(v1, 0.0f, 1.0f); + u2 = Clamp(u2, 0.0f, 1.0f); + v2 = Clamp(v2, 0.0f, 1.0f); } float recipz = 1.0f/z; @@ -341,6 +342,7 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u #ifdef EXTENDED_COLOURFILTER CPostFX::Render(cam, red, green, blue, blur, type, bluralpha); #else + PUSH_RENDERGROUP("CMBlur::MotionBlurRender"); RwRGBA color = { (RwUInt8)red, (RwUInt8)green, (RwUInt8)blue, (RwUInt8)blur }; #ifdef GTA_PS2 if( pFrontBuffer ) @@ -356,6 +358,7 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u RwRasterPopContext(); } #endif + POP_RENDERGROUP(); #endif } @@ -522,7 +525,7 @@ CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type, void CMBlur::SetDrunkBlur(float drunkness) { - Drunkness = clamp(drunkness, 0.0f, 1.0f); + Drunkness = Clamp(drunkness, 0.0f, 1.0f); } void @@ -603,9 +606,9 @@ CMBlur::OverlayRenderFx(RwCamera *cam, RwRaster *frontBuf) int red = (0.75f*CTimeCycle::GetDirectionalRed() + CTimeCycle::GetAmbientRed())*0.55f * 255; int green = (0.75f*CTimeCycle::GetDirectionalGreen() + CTimeCycle::GetAmbientGreen())*0.55f * 255; int blue = (0.75f*CTimeCycle::GetDirectionalBlue() + CTimeCycle::GetAmbientBlue())*0.55f * 255; - red = clamp(red, 0, 255); - green = clamp(green, 0, 255); - blue = clamp(blue, 0, 255); + red = Clamp(red, 0, 255); + green = Clamp(green, 0, 255); + blue = Clamp(blue, 0, 255); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); @@ -700,7 +703,7 @@ CMBlur::OverlayRenderFx(RwCamera *cam, RwRaster *frontBuf) int alpha = FrontEndMenuManager.m_PrefsBrightness > 255 ? FrontEndMenuManager.m_PrefsBrightness - 90 : FrontEndMenuManager.m_PrefsBrightness - 130; - alpha = clamp(alpha, 16, 200)/2; + alpha = Clamp(alpha, 16, 200)/2; CreateImmediateModeData(cam, &fxRect[i], verts, CRGBA(0, 0, 0, alpha), 0.0f, 0.0f, 0.0f, 0.0f, fxZ[i], true); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, gpHeatHazeRaster); diff --git a/src/render/Occlusion.cpp b/src/render/Occlusion.cpp index 3ea5678c..ec7101a6 100644 --- a/src/render/Occlusion.cpp +++ b/src/render/Occlusion.cpp @@ -513,8 +513,8 @@ bool CEntity::IsEntityOccluded(void) { } if (COcclusion::aActiveOccluders[i].IsPointWithinOcclusionArea(coors.x, coors.y, 0.0f)) { - CVector min = m_matrix * CModelInfo::GetModelInfo(GetModelIndex())->GetColModel()->boundingBox.min; - CVector max = m_matrix * CModelInfo::GetModelInfo(GetModelIndex())->GetColModel()->boundingBox.max; + CVector min = m_matrix * CModelInfo::GetColModel(m_modelIndex)->boundingBox.min; + CVector max = m_matrix * CModelInfo::GetColModel(m_modelIndex)->boundingBox.max; if (CalcScreenCoors(min, &coors) && !COcclusion::aActiveOccluders[i].IsPointWithinOcclusionArea(coors.x, coors.y, 0.0f)) continue; if (CalcScreenCoors(CVector(max.x, max.y, min.z), &coors) && !COcclusion::aActiveOccluders[i].IsPointWithinOcclusionArea(coors.x, coors.y, 0.0f)) continue; diff --git a/src/render/Particle.cpp b/src/render/Particle.cpp index 8c9cde12..461a10a6 100644 --- a/src/render/Particle.cpp +++ b/src/render/Particle.cpp @@ -1,5 +1,6 @@ #include "common.h" +#include "main.h" #include "General.h" #include "Timer.h" #include "TxdStore.h" @@ -18,7 +19,8 @@ #include "ParticleObject.h" #include "Particle.h" #include "soundlist.h" - +#include "SaveBuf.h" +#include "debugmenu.h" #define MAX_PARTICLES_ON_SCREEN (750) @@ -969,15 +971,15 @@ CParticle *CParticle::AddParticle(tParticleType type, CVector const &vecPos, CVe int32 ColorVariation = CGeneral::GetRandomNumberInRange(-psystem->m_InitialColorVariation, psystem->m_InitialColorVariation); //float ColorVariation = CGeneral::GetRandomNumberInRange((float)-psystem->m_InitialColorVariation, (float)psystem->m_InitialColorVariation); - pParticle->m_Color.red = clamp(pParticle->m_Color.red + + pParticle->m_Color.red = Clamp(pParticle->m_Color.red + PERCENT(pParticle->m_Color.red, ColorVariation), 0, 255); - pParticle->m_Color.green = clamp(pParticle->m_Color.green + + pParticle->m_Color.green = Clamp(pParticle->m_Color.green + PERCENT(pParticle->m_Color.green, ColorVariation), 0, 255); - pParticle->m_Color.blue = clamp(pParticle->m_Color.blue + + pParticle->m_Color.blue = Clamp(pParticle->m_Color.blue + PERCENT(pParticle->m_Color.blue, ColorVariation), 0, 255); } @@ -1383,15 +1385,15 @@ void CParticle::Update() { float colorMul = 1.0f - float(particle->m_nTimeWhenColorWillBeChanged - CTimer::GetTimeInMilliseconds()) / float(psystem->m_ColorFadeTime); - particle->m_Color.red = clamp( + particle->m_Color.red = Clamp( psystem->m_RenderColouring.red + int32(float(psystem->m_FadeDestinationColor.red - psystem->m_RenderColouring.red) * colorMul), 0, 255); - particle->m_Color.green = clamp( + particle->m_Color.green = Clamp( psystem->m_RenderColouring.green + int32(float(psystem->m_FadeDestinationColor.green - psystem->m_RenderColouring.green) * colorMul), 0, 255); - particle->m_Color.blue = clamp( + particle->m_Color.blue = Clamp( psystem->m_RenderColouring.blue + int32(float(psystem->m_FadeDestinationColor.blue - psystem->m_RenderColouring.blue) * colorMul), 0, 255); } @@ -1701,13 +1703,13 @@ void CParticle::Update() if ( particle->m_nFadeToBlackTimer != 0 ) { - particle->m_nColorIntensity = clamp(particle->m_nColorIntensity - particle->m_nFadeToBlackTimer, + particle->m_nColorIntensity = Clamp(particle->m_nColorIntensity - particle->m_nFadeToBlackTimer, 0, 255); } if ( particle->m_nFadeAlphaTimer != 0 ) { - particle->m_nAlpha = clamp(particle->m_nAlpha - particle->m_nFadeAlphaTimer, + particle->m_nAlpha = Clamp(particle->m_nAlpha - particle->m_nFadeAlphaTimer, 0, 255); if ( particle->m_nAlpha == 0 ) { @@ -1785,6 +1787,8 @@ void CParticle::Update() void CParticle::Render() { + PUSH_RENDERGROUP("CParticle::Render"); + RwRenderStateSet(rwRENDERSTATETEXTUREADDRESS, (void *)rwTEXTUREADDRESSWRAP); RwRenderStateSet(rwRENDERSTATETEXTUREPERSPECTIVE, (void *)TRUE); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void *)FALSE); @@ -1877,11 +1881,20 @@ void CParticle::Render() if ( canDraw && psystem->Flags & DRAWTOP2D ) { - float screenZ = (particle->m_vecPosition.z - CDraw::GetNearClipZ()) + float screenZ; +#ifdef FIX_BUGS + bool zIsZero = true; + if ( particle->m_vecPosition.z != 0.0f ) { +#endif + screenZ = (particle->m_vecPosition.z - CDraw::GetNearClipZ()) * (CSprite::GetFarScreenZ() - CSprite::GetNearScreenZ()) * CDraw::GetFarClipZ() / ( (CDraw::GetFarClipZ() - CDraw::GetNearClipZ()) * particle->m_vecPosition.z ) + CSprite::GetNearScreenZ(); +#ifdef FIX_BUGS + zIsZero = false; + } +#endif float stretchTexW; float stretchTexH; @@ -1897,6 +1910,9 @@ void CParticle::Render() stretchTexH = CGeneral::GetRandomNumberInRange(0.1f, 1.0f) * psystem->m_vecTextureStretch.y + 63.0f; } +#ifdef FIX_BUGS + if (!zIsZero) { +#endif if ( i == PARTICLE_WATERDROP ) { @@ -1998,7 +2014,10 @@ void CParticle::Render() canDraw = false; } - +#ifdef FIX_BUGS + } + if ( !(zIsZero && (i == PARTICLE_WATERDROP || i == PARTICLE_BLOODDROP || i == PARTICLE_HEATHAZE_IN_DIST || i == PARTICLE_HEATHAZE) ) ) +#endif if ( canDraw ) { if ( particle->m_nRotation != 0 ) @@ -2282,6 +2301,8 @@ void CParticle::Render() RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void *)TRUE); RwRenderStateSet(rwRENDERSTATESRCBLEND, (void *)rwBLENDSRCALPHA); RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void *)rwBLENDINVSRCALPHA); + + POP_RENDERGROUP(); } void CParticle::RemovePSystem(tParticleType type) diff --git a/src/render/PointLights.cpp b/src/render/PointLights.cpp index 3e73c57f..13872401 100644 --- a/src/render/PointLights.cpp +++ b/src/render/PointLights.cpp @@ -159,6 +159,8 @@ CPointLights::RenderFogEffect(void) if(CCutsceneMgr::IsRunning()) return; + PUSH_RENDERGROUP("CPointLights::RenderFogEffect"); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE); @@ -302,6 +304,8 @@ CPointLights::RenderFogEffect(void) } CSprite::FlushSpriteBuffer(); + + POP_RENDERGROUP(); } bool diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index dfbc02d7..6b306b6c 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -130,8 +130,13 @@ CRenderer::RenderOneRoad(CEntity *e) return; if(gbShowCollisionPolys) CCollision::DrawColModel_Coloured(e->GetMatrix(), *CModelInfo::GetModelInfo(e->GetModelIndex())->GetColModel(), e->GetModelIndex()); - else + else{ + PUSH_RENDERGROUP(CModelInfo::GetModelInfo(e->GetModelIndex())->GetModelName()); + e->Render(); + + POP_RENDERGROUP(); + } } void @@ -178,6 +183,8 @@ CRenderer::RenderOneNonRoad(CEntity *e) } #endif + PUSH_RENDERGROUP(CModelInfo::GetModelInfo(e->GetModelIndex())->GetModelName()); + resetLights = e->SetupLighting(); if(e->IsVehicle()){ @@ -206,6 +213,8 @@ CRenderer::RenderOneNonRoad(CEntity *e) } e->RemoveLighting(resetLights); + + POP_RENDERGROUP(); } void @@ -231,6 +240,7 @@ CRenderer::RenderRoads(void) int i; CEntity *e; + PUSH_RENDERGROUP("CRenderer::RenderRoads"); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); SetCullMode(rwCULLMODECULLBACK); @@ -242,6 +252,7 @@ CRenderer::RenderRoads(void) if(IsRoad(e)) RenderOneRoad(e); } + POP_RENDERGROUP(); } inline bool PutIntoSortedVehicleList(CVehicle *veh) @@ -264,6 +275,7 @@ CRenderer::RenderEverythingBarRoads(void) CEntity *e; EntityInfo ei; + PUSH_RENDERGROUP("CRenderer::RenderEverythingBarRoads"); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); SetCullMode(rwCULLMODECULLBACK); @@ -295,6 +307,7 @@ CRenderer::RenderEverythingBarRoads(void) }else RenderOneNonRoad(e); } + POP_RENDERGROUP(); } void @@ -302,6 +315,7 @@ CRenderer::RenderBoats(void) { CLink *node; + PUSH_RENDERGROUP("CRenderer::RenderBoats"); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); SetCullMode(rwCULLMODECULLBACK); @@ -330,6 +344,7 @@ CRenderer::RenderBoats(void) CVehicle *v = (CVehicle*)node->item.ent; RenderOneNonRoad(v); } + POP_RENDERGROUP(); } #ifdef NEW_RENDERER @@ -433,6 +448,7 @@ CRenderer::RenderWorld(int pass) switch(pass){ case 0: // Roads + PUSH_RENDERGROUP("CRenderer::RenderWorld - Roads"); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); for(i = 0; i < ms_nNoOfVisibleBuildings; i++){ e = ms_aVisibleBuildingPtrs[i]; @@ -446,9 +462,11 @@ CRenderer::RenderWorld(int pass) if(e->bIsBIGBuilding || IsRoad(e)) RenderOneBuilding(e, node->item.sort); } + POP_RENDERGROUP(); break; case 1: // Opaque + PUSH_RENDERGROUP("CRenderer::RenderWorld - Opaque"); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); for(i = 0; i < ms_nNoOfVisibleBuildings; i++){ e = ms_aVisibleBuildingPtrs[i]; @@ -469,14 +487,17 @@ CRenderer::RenderWorld(int pass) RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE); WorldRender::RenderBlendPass(PASS_NOZ); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); + POP_RENDERGROUP(); break; case 2: // Transparent + PUSH_RENDERGROUP("CRenderer::RenderWorld - Transparent"); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE); WorldRender::RenderBlendPass(PASS_ADD); RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA); WorldRender::RenderBlendPass(PASS_BLEND); + POP_RENDERGROUP(); break; } } @@ -487,11 +508,13 @@ CRenderer::RenderPeds(void) int i; CEntity *e; + PUSH_RENDERGROUP("CRenderer::RenderPeds"); for(i = 0; i < ms_nNoOfVisibleVehicles; i++){ e = ms_aVisibleVehiclePtrs[i]; if(e->IsPed()) RenderOneNonRoad(e); } + POP_RENDERGROUP(); } void @@ -502,6 +525,7 @@ CRenderer::RenderVehicles(void) EntityInfo ei; CLink *node; + PUSH_RENDERGROUP("CRenderer::RenderVehicles"); // not the real thing for(i = 0; i < ms_nNoOfVisibleVehicles; i++){ e = ms_aVisibleVehiclePtrs[i]; @@ -518,6 +542,7 @@ CRenderer::RenderVehicles(void) node != &gSortedVehiclesAndPeds.head; node = node->prev) RenderOneNonRoad(node->item.ent); + POP_RENDERGROUP(); } void @@ -526,6 +551,7 @@ CRenderer::RenderTransparentWater(void) int i; CEntity *e; + PUSH_RENDERGROUP("CRenderer::RenderTransparentWater"); RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); @@ -549,6 +575,7 @@ CRenderer::RenderTransparentWater(void) CWaterLevel::RenderTransparentWater(); SetStencilState(0); + POP_RENDERGROUP(); } void @@ -569,20 +596,24 @@ CRenderer::ClearForFrame(void) void CRenderer::RenderFadingInEntities(void) { + PUSH_RENDERGROUP("CRenderer::RenderFadingInEntities"); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); SetCullMode(rwCULLMODECULLBACK); DeActivateDirectional(); SetAmbientColours(); CVisibilityPlugins::RenderFadingEntities(); + POP_RENDERGROUP(); } void CRenderer::RenderFadingInUnderwaterEntities(void) { + PUSH_RENDERGROUP("CRenderer::RenderFadingInUnderwaterEntities"); DeActivateDirectional(); SetAmbientColours(); CVisibilityPlugins::RenderFadingUnderwaterEntities(); + POP_RENDERGROUP(); } void diff --git a/src/render/Rubbish.cpp b/src/render/Rubbish.cpp index bd69f875..147c97b1 100644 --- a/src/render/Rubbish.cpp +++ b/src/render/Rubbish.cpp @@ -54,6 +54,8 @@ CRubbish::Render(void) if(RubbishVisibility == 0) return; + PUSH_RENDERGROUP("CRubbish::Render"); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE); @@ -150,6 +152,8 @@ CRubbish::Render(void) RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); + + POP_RENDERGROUP(); } void diff --git a/src/render/Shadows.cpp b/src/render/Shadows.cpp index 91f53acf..dd87bff6 100644 --- a/src/render/Shadows.cpp +++ b/src/render/Shadows.cpp @@ -1068,6 +1068,8 @@ CShadows::SetRenderModeForShadowType(uint8 ShadowType) void CShadows::RenderStoredShadows(void) { + PUSH_RENDERGROUP("CShadows::RenderStoredShadows"); + RenderBuffer::ClearRenderBuffer(); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void *)FALSE); @@ -1241,12 +1243,16 @@ CShadows::RenderStoredShadows(void) RwRenderStateSet(rwRENDERSTATETEXTUREADDRESS, (void *)rwTEXTUREADDRESSWRAP); ShadowsStoredToBeRendered = 0; + + POP_RENDERGROUP(); } void CShadows::RenderStaticShadows(void) { + PUSH_RENDERGROUP("CShadows::RenderStaticShadows"); + RenderBuffer::ClearRenderBuffer(); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void *)FALSE); @@ -1313,6 +1319,8 @@ CShadows::RenderStaticShadows(void) RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void *)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void *)TRUE); + + POP_RENDERGROUP(); } @@ -1398,7 +1406,7 @@ CShadows::CastShadowSectorList(CPtrList &PtrList, float fStartX, float fStartY, { pEntity->m_scanCode = CWorld::GetCurrentScanCode(); - if ( pEntity->bUsesCollision && !pEntity->m_flagE2 ) + if ( pEntity->bUsesCollision && !pEntity->bDontCastShadowsOn) { if ( IsAreaVisible(pEntity->m_area) ) { diff --git a/src/render/Skidmarks.cpp b/src/render/Skidmarks.cpp index 07039c17..08df330d 100644 --- a/src/render/Skidmarks.cpp +++ b/src/render/Skidmarks.cpp @@ -96,6 +96,8 @@ CSkidmarks::Render(void) { int i, j; + PUSH_RENDERGROUP("CSkidmarks::Render"); + RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA); @@ -152,6 +154,8 @@ CSkidmarks::Render(void) RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE); RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE); RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE); + + POP_RENDERGROUP(); } void diff --git a/src/render/SpecialFX.cpp b/src/render/SpecialFX.cpp index 4391f19e..61750f85 100644 --- a/src/render/SpecialFX.cpp +++ b/src/render/SpecialFX.cpp @@ -164,6 +164,7 @@ CSpecialFX::Shutdown(void) void CSpecialFX::Render(void) { + PUSH_RENDERGROUP("CSpecialFX::Render"); CMotionBlurStreaks::Render(); CBulletTraces::Render(); CBrightLights::Render(); @@ -173,6 +174,7 @@ CSpecialFX::Render(void) if(!(gbNewRenderer && FredIsInFirstPersonCam())) #endif C3dMarkers::Render(); + POP_RENDERGROUP(); } void @@ -212,7 +214,6 @@ CSpecialFX::Render2DFXs(void) CFont::SetPropOn(); CFont::SetColor(CRGBA(100, 100, 100, 200)); CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD)); - CFont::PrintString(SCREEN_WIDTH * 8 / 10, SCREEN_HEIGHT * 8 / 10, gUString); for (int32 i = 0; i < SCREEN_HEIGHT; i += 4) { RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE); RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE); diff --git a/src/render/Sprite.cpp b/src/render/Sprite.cpp index ba6ab291..58b29ea9 100644 --- a/src/render/Sprite.cpp +++ b/src/render/Sprite.cpp @@ -401,13 +401,13 @@ CSprite::RenderBufferedOneXLUSprite_Rotate_2Colours(float x, float y, float z, f // Colour factors, cx/y is the direction in which colours change from rgb1 to rgb2 cf[0] = (cx*(-c-s) + cy*(-c+s))*0.5f + 0.5f; - cf[0] = clamp(cf[0], 0.0f, 1.0f); + cf[0] = Clamp(cf[0], 0.0f, 1.0f); cf[1] = (cx*(-c+s) + cy*( c+s))*0.5f + 0.5f; - cf[1] = clamp(cf[1], 0.0f, 1.0f); + cf[1] = Clamp(cf[1], 0.0f, 1.0f); cf[2] = (cx*( c+s) + cy*( c-s))*0.5f + 0.5f; - cf[2] = clamp(cf[2], 0.0f, 1.0f); + cf[2] = Clamp(cf[2], 0.0f, 1.0f); cf[3] = (cx*( c-s) + cy*(-c-s))*0.5f + 0.5f; - cf[3] = clamp(cf[3], 0.0f, 1.0f); + cf[3] = Clamp(cf[3], 0.0f, 1.0f); float screenz = m_f2DNearScreenZ + (z-CDraw::GetNearClipZ())*(m_f2DFarScreenZ-m_f2DNearScreenZ)*CDraw::GetFarClipZ() / diff --git a/src/render/WaterCannon.cpp b/src/render/WaterCannon.cpp index 0f8b22a7..4976f8a3 100644 --- a/src/render/WaterCannon.cpp +++ b/src/render/WaterCannon.cpp @@ -307,9 +307,11 @@ void CWaterCannons::Update(void) void CWaterCannons::Render(void) { + PUSH_RENDERGROUP("CWaterCannons::Render"); for ( int32 i = 0; i < NUM_WATERCANNONS; i++ ) { if ( aCannons[i].m_nId != 0 ) aCannons[i].Render(); } + POP_RENDERGROUP(); } diff --git a/src/render/WaterLevel.cpp b/src/render/WaterLevel.cpp index 8b8a647f..405c4e4f 100644 --- a/src/render/WaterLevel.cpp +++ b/src/render/WaterLevel.cpp @@ -193,10 +193,10 @@ CWaterLevel::Initialise(Const char *pWaterDat) int32 t = WATER_HUGE_Y(ms_aWaterRects[i].top); int32 b = WATER_HUGE_Y(ms_aWaterRects[i].bottom) + 1.0f; - l = clamp(l, 0, MAX_SMALL_SECTORS - 1); - r = clamp(r, 0, MAX_SMALL_SECTORS - 1); - t = clamp(t, 0, MAX_SMALL_SECTORS - 1); - b = clamp(b, 0, MAX_SMALL_SECTORS - 1); + l = Clamp(l, 0, MAX_SMALL_SECTORS - 1); + r = Clamp(r, 0, MAX_SMALL_SECTORS - 1); + t = Clamp(t, 0, MAX_SMALL_SECTORS - 1); + b = Clamp(b, 0, MAX_SMALL_SECTORS - 1); for (int32 x = l; x <= r; x++) { @@ -638,14 +638,14 @@ CWaterLevel::TestVisibilityForFineWaterBlocks(const CVector &worldPos) if ((lineEnd.x > WORLD_MIN_X && lineEnd.x < WORLD_MAX_X) && (lineEnd.y > WORLD_MIN_Y && lineEnd.y < WORLD_MAX_Y)) { - if (!CWorld::ProcessLineOfSight(lineStart, lineEnd, col, entity, true, false, false, false, true, false, nil)) + if (!CWorld::ProcessLineOfSight(lineStart, lineEnd, col, entity, true, false, false, false, true, false)) { lineStart.x += 0.4f; lineStart.y += 0.4f; lineEnd.x += 0.4f; lineEnd.y += 0.4f; - if (!CWorld::ProcessLineOfSight(lineStart, lineEnd, col, entity, true, false, false, false, true, false, nil)) + if (!CWorld::ProcessLineOfSight(lineStart, lineEnd, col, entity, true, false, false, false, true, false)) { return false; } @@ -1018,10 +1018,10 @@ CWaterLevel::RenderWater() if ( bUseCamEndY ) nEndY = WATER_TO_HUGE_SECTOR_Y(camPos.y); - nStartX = clamp(nStartX, 0, MAX_HUGE_SECTORS - 1); - nEndX = clamp(nEndX, 0, MAX_HUGE_SECTORS - 1); - nStartY = clamp(nStartY, 0, MAX_HUGE_SECTORS - 1); - nEndY = clamp(nEndY, 0, MAX_HUGE_SECTORS - 1); + nStartX = Clamp(nStartX, 0, MAX_HUGE_SECTORS - 1); + nEndX = Clamp(nEndX, 0, MAX_HUGE_SECTORS - 1); + nStartY = Clamp(nStartY, 0, MAX_HUGE_SECTORS - 1); + nEndY = Clamp(nEndY, 0, MAX_HUGE_SECTORS - 1); for ( int32 x = nStartX; x <= nEndX; x++ ) { @@ -1041,7 +1041,7 @@ CWaterLevel::RenderWater() if ( fHugeSectorMaxRenderDistSqr > fHugeSectorDistToCamSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecHugeSectorCentre.x, vecHugeSectorCentre.y, 0.0f), SectorRadius(HUGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecHugeSectorCentre.x, vecHugeSectorCentre.y, 0.0f), SectorRadius(HUGE_SECTOR_SIZE)) ) { #ifndef PC_WATER WavesCalculatedThisFrame = true; @@ -1115,7 +1115,7 @@ CWaterLevel::RenderWater() if ( fCamDistToSector < fHugeSectorMaxRenderDistSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.y, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.y, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE)) ) { RenderOneFlatExtraHugeWaterPoly( vecExtraHugeSectorCentre.x - EXTRAHUGE_SECTOR_SIZE/2, @@ -1134,7 +1134,7 @@ CWaterLevel::RenderWater() if ( fCamDistToSector < fHugeSectorMaxRenderDistSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.y, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.y, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE)) ) { RenderOneFlatExtraHugeWaterPoly( vecExtraHugeSectorCentre.x - EXTRAHUGE_SECTOR_SIZE/2, @@ -1163,7 +1163,7 @@ CWaterLevel::RenderWater() if ( fCamDistToSector < fHugeSectorMaxRenderDistSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.y, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.y, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE)) ) { RenderOneFlatExtraHugeWaterPoly( vecExtraHugeSectorCentre.x - EXTRAHUGE_SECTOR_SIZE/2, @@ -1182,7 +1182,7 @@ CWaterLevel::RenderWater() if ( fCamDistToSector < fHugeSectorMaxRenderDistSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.x, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecExtraHugeSectorCentre.x, vecExtraHugeSectorCentre.x, 0.0f), SectorRadius(EXTRAHUGE_SECTOR_SIZE)) ) { RenderOneFlatExtraHugeWaterPoly( vecExtraHugeSectorCentre.x - EXTRAHUGE_SECTOR_SIZE/2, @@ -1229,6 +1229,8 @@ CWaterLevel::RenderTransparentWater(void) if ( !CGame::CanSeeWaterFromCurrArea() ) return; + PUSH_RENDERGROUP("CWaterLevel::RenderTransparentWater"); + float fWaterDrawDist = _GetWavyDrawDist(); float fWaterDrawDistLarge = fWaterDrawDist + 90.0f; float fWavySectorMaxRenderDistSqr = SQR(fWaterDrawDist); @@ -1284,10 +1286,10 @@ CWaterLevel::RenderTransparentWater(void) if ( bUseCamEndY ) nEndY = WATER_TO_HUGE_SECTOR_Y(camPos.y ); - nStartX = clamp(nStartX, 0, MAX_HUGE_SECTORS - 1); - nEndX = clamp(nEndX, 0, MAX_HUGE_SECTORS - 1); - nStartY = clamp(nStartY, 0, MAX_HUGE_SECTORS - 1); - nEndY = clamp(nEndY, 0, MAX_HUGE_SECTORS - 1); + nStartX = Clamp(nStartX, 0, MAX_HUGE_SECTORS - 1); + nEndX = Clamp(nEndX, 0, MAX_HUGE_SECTORS - 1); + nStartY = Clamp(nStartY, 0, MAX_HUGE_SECTORS - 1); + nEndY = Clamp(nEndY, 0, MAX_HUGE_SECTORS - 1); for ( int32 x = nStartX; x <= nEndX; x++ ) @@ -1312,7 +1314,7 @@ CWaterLevel::RenderTransparentWater(void) if ( fHugeSectorMaxRenderDistSqr > fHugeSectorDistToCamSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecHugeSectorCentre.x, vecHugeSectorCentre.y, 0.0f), SectorRadius(HUGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecHugeSectorCentre.x, vecHugeSectorCentre.y, 0.0f), SectorRadius(HUGE_SECTOR_SIZE)) ) { if ( fHugeSectorDistToCamSqr >= SQR(500.0f) ) { @@ -1336,7 +1338,7 @@ CWaterLevel::RenderTransparentWater(void) if ( fLargeSectorDistToCamSqr < fHugeSectorMaxRenderDistSqr ) { - if ( TheCamera.IsSphereVisible(CVector(vecLargeSectorCentre.x, vecLargeSectorCentre.y, 0.0f), SectorRadius(LARGE_SECTOR_SIZE), &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(CVector(vecLargeSectorCentre.x, vecLargeSectorCentre.y, 0.0f), SectorRadius(LARGE_SECTOR_SIZE)) ) { // Render four small(32x32) sectors, or one large(64x64). @@ -1512,6 +1514,8 @@ CWaterLevel::RenderTransparentWater(void) DefinedState(); #endif + + POP_RENDERGROUP(); } void CWaterLevel::RenderOneFlatSmallWaterPoly(float fX, float fY, float fZ, RwRGBA const &color) @@ -2184,10 +2188,10 @@ CWaterLevel::PreCalcWaterGeometry(void) float signX = CamFwdDir.x * 1.4144272f; float signY = CamFwdDir.y * 1.4144272f; - signX = clamp(signX, -1.0f, 1.0f); + signX = Clamp(signX, -1.0f, 1.0f); fCamX += 0.4f * signX * float(SMALL_SECTOR_SIZE * 2.0f); - signY = clamp(signY, -1.0f, 1.0f); + signY = Clamp(signY, -1.0f, 1.0f); fCamY += 0.4f * signY * float(SMALL_SECTOR_SIZE * 2.0f); int32 nBlock; @@ -2601,7 +2605,7 @@ CWaterLevel::RenderBoatWakes(void) float val = 500.0f - (CBoat::WAKE_LIFETIME - pBoat->m_afWakePointLifeTime[wake]) * 600.0f / CBoat::WAKE_LIFETIME; - fAplhaB = clamp(val, 0.0f, 255.0f); + fAplhaB = Clamp(val, 0.0f, 255.0f); } CVector2D vecDistB = pBoat->m_avec2dWakePoints[wake - 1] - pBoat->m_avec2dWakePoints[wake]; @@ -2911,10 +2915,10 @@ CWaterLevel::CalcDistanceToWater(float fX, float fY) int32 nStartY = WATER_TO_SMALL_SECTOR_Y(fY - fSectorMaxRenderDist) - 1; int32 nEndY = WATER_TO_SMALL_SECTOR_Y(fY + fSectorMaxRenderDist) + 1; - nStartX = clamp(nStartX, 0, MAX_SMALL_SECTORS - 1); - nEndX = clamp(nEndX, 0, MAX_SMALL_SECTORS - 1); - nStartY = clamp(nStartY, 0, MAX_SMALL_SECTORS - 1); - nEndY = clamp(nEndY, 0, MAX_SMALL_SECTORS - 1); + nStartX = Clamp(nStartX, 0, MAX_SMALL_SECTORS - 1); + nEndX = Clamp(nEndX, 0, MAX_SMALL_SECTORS - 1); + nStartY = Clamp(nStartY, 0, MAX_SMALL_SECTORS - 1); + nEndY = Clamp(nEndY, 0, MAX_SMALL_SECTORS - 1); float fDistSqr = 1.0e10f; @@ -2938,7 +2942,7 @@ CWaterLevel::CalcDistanceToWater(float fX, float fY) } } - return clamp(Sqrt(fDistSqr) - 23.0f, 0.0f, fSectorMaxRenderDist); + return Clamp(Sqrt(fDistSqr) - 23.0f, 0.0f, fSectorMaxRenderDist); } void @@ -3220,7 +3224,7 @@ CWaterLevel::HandleBeachToysStuff(void) vecPos.x += (fCos - fSin) * fAngle; vecPos.y += (fSin + fCos) * fAngle; - if ( TheCamera.IsSphereVisible(vecPos, 1.0f, &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(vecPos, 1.0f) ) { float fWaterLevel; @@ -3264,7 +3268,7 @@ CWaterLevel::HandleBeachToysStuff(void) vecPos.x += (fCos - fSin) * fAngle; vecPos.y += (fSin + fCos) * fAngle; - if ( TheCamera.IsSphereVisible(vecPos, 2.0f, &TheCamera.GetCameraMatrix()) ) + if ( TheCamera.IsSphereVisible(vecPos, 2.0f) ) { float fWaterLevel; diff --git a/src/render/Weather.cpp b/src/render/Weather.cpp index ffbd7e8f..9f925a8c 100644 --- a/src/render/Weather.cpp +++ b/src/render/Weather.cpp @@ -137,7 +137,7 @@ void CWeather::Init(void) ForcedWeatherType = WEATHER_RANDOM; SoundHandle = DMAudio.CreateEntity(AUDIOTYPE_WEATHER, (void*)1); if (SoundHandle >= 0) - DMAudio.SetEntityStatus(SoundHandle, true); + DMAudio.SetEntityStatus(SoundHandle, TRUE); } void CWeather::Update(void) @@ -281,7 +281,7 @@ void CWeather::Update(void) if (SunGlare > 0.0f) { SunGlare *= Min(1.0f, 7.0 * CTimeCycle::GetSunDirection().z); - SunGlare = clamp(SunGlare, 0.0f, 1.0f); + SunGlare = Clamp(SunGlare, 0.0f, 1.0f); if (!CSpecialFX::bSnapShotActive) SunGlare *= (1.0f - (CGeneral::GetRandomNumber()&0x1F)*0.007f); } diff --git a/src/rw/MemoryMgr.cpp b/src/rw/MemoryMgr.cpp index 2379692c..b9cff043 100644 --- a/src/rw/MemoryMgr.cpp +++ b/src/rw/MemoryMgr.cpp @@ -28,10 +28,10 @@ RwMemoryFunctions memFuncs = { #ifdef USE_CUSTOM_ALLOCATOR // game seems to be using heap directly here, but this is nicer -void *operator new(size_t sz) { return MemoryMgrMalloc(sz); } -void *operator new[](size_t sz) { return MemoryMgrMalloc(sz); } -void operator delete(void *ptr) noexcept { MemoryMgrFree(ptr); } -void operator delete[](void *ptr) noexcept { MemoryMgrFree(ptr); } +void *operator new(size_t sz) throw() { return MemoryMgrMalloc(sz); } +void *operator new[](size_t sz) throw() { return MemoryMgrMalloc(sz); } +void operator delete(void *ptr) throw() { MemoryMgrFree(ptr); } +void operator delete[](void *ptr) throw() { MemoryMgrFree(ptr); } #endif void* diff --git a/src/rw/RwHelper.cpp b/src/rw/RwHelper.cpp index 609dd79b..69f57933 100644 --- a/src/rw/RwHelper.cpp +++ b/src/rw/RwHelper.cpp @@ -4,11 +4,13 @@ #include "Timecycle.h" #include "skeleton.h" #include "Debug.h" +#include "MBlur.h" #if !defined(FINAL) || defined(DEBUGMENU) #include "rtcharse.h" #endif #ifndef FINAL RtCharset *debugCharset; +bool bDebugRenderGroups; #endif #ifdef PS2_ALPHA_TEST @@ -102,6 +104,36 @@ SetCullMode(uint32 mode) RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE); } +#ifndef FINAL +void +PushRendergroup(const char *name) +{ + if(!bDebugRenderGroups) + return; +#if defined(RW_OPENGL) + if(GLAD_GL_KHR_debug) + glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, name); +#elif defined(RW_D3D9) + static WCHAR tmp[256]; + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, tmp, sizeof(tmp)); + D3DPERF_BeginEvent(0xFFFFFFFF, tmp); +#endif +} + +void +PopRendergroup(void) +{ + if(!bDebugRenderGroups) + return; +#if defined(RW_OPENGL) + if(GLAD_GL_KHR_debug) + glPopDebugGroup(); +#elif defined(RW_D3D9) + D3DPERF_EndEvent(); +#endif +} +#endif + RwFrame* GetFirstFrameCallback(RwFrame *child, void *data) { @@ -548,6 +580,12 @@ CameraSize(RwCamera * camera, RwRect * rect, raster->width = zRaster->width = rect->w; raster->height = zRaster->height = rect->h; +#endif +#ifdef FIX_BUGS + if(CMBlur::BlurOn){ + CMBlur::MotionBlurClose(); + CMBlur::MotionBlurOpen(camera); + } #endif } diff --git a/src/rw/RwHelper.h b/src/rw/RwHelper.h index 9352d1fd..a3a1928c 100644 --- a/src/rw/RwHelper.h +++ b/src/rw/RwHelper.h @@ -1,5 +1,6 @@ #pragma once +extern bool bDebugRenderGroups; extern bool gPS2alphaTest; extern bool gBackfaceCulling; diff --git a/src/rw/VisibilityPlugins.cpp b/src/rw/VisibilityPlugins.cpp index 3a303194..01db546c 100644 --- a/src/rw/VisibilityPlugins.cpp +++ b/src/rw/VisibilityPlugins.cpp @@ -233,7 +233,9 @@ CVisibilityPlugins::RenderFadingEntities(CLinkList &list) DeActivateDirectional(); SetAmbientColours(); e->bImBeingRendered = true; + PUSH_RENDERGROUP(mi->GetModelName()); RenderFadingAtomic((RpAtomic*)e->m_rwObject, node->item.sort); + POP_RENDERGROUP(); e->bImBeingRendered = false; }else CRenderer::RenderOneNonRoad(e); diff --git a/src/rw/VisibilityPlugins.h b/src/rw/VisibilityPlugins.h index 9cdbc0c7..d375044b 100644 --- a/src/rw/VisibilityPlugins.h +++ b/src/rw/VisibilityPlugins.h @@ -127,7 +127,6 @@ public: int32 offset, int32 len); static int32 ms_framePluginOffset; - // Not actually used struct ClumpExt { ClumpVisibilityCB visibilityCB; diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp index a97e9af7..d080512e 100644 --- a/src/save/GenericGameStorage.cpp +++ b/src/save/GenericGameStorage.cpp @@ -251,6 +251,11 @@ GenericSave(int file) WriteSaveDataBlock(CStreaming::MemoryCardSave, "StreamingSize"); WriteSaveDataBlock(CPedType::Save, "PedTypeSize"); + // sure just write garbage data repeatedly ... +#ifndef THIS_IS_STUPID + memset(work_buff, 0, sizeof(work_buff)); +#endif + // Write padding for (int i = 0; i < 4; i++) { size = align4bytes(SIZE_OF_ONE_GAME_IN_BYTES - totalSize - 4); @@ -540,7 +545,11 @@ GetNameOfSavedGame(int32 slot) bool CheckDataNotCorrupt(int32 slot, char *name) { +#ifdef FIX_BUGS + char filename[MAX_PATH]; +#else char filename[100]; +#endif int32 blocknum = 0; eLevelName level = LEVEL_GENERIC; @@ -634,6 +643,532 @@ align4bytes(int32 size) return (size + 3) & 0xFFFFFFFC; } +#ifdef FIX_INCOMPATIBLE_SAVES +#define LoadSaveDataBlockNoCheck(buf, file, size) \ +do { \ + CFileMgr::Read(file, (const char *)&size, sizeof(size)); \ + size = align4bytes(size); \ + CFileMgr::Read(file, (const char *)work_buff, size); \ + buf = work_buff; \ +} while(0) + +#define WriteSavaDataBlockNoFunc(buf, file, size) \ +do { \ + if (!PcSaveHelper.PcClassSaveRoutine(file, buf, size)) \ + goto fail; \ + totalSize += size; \ +} while(0) + +#define FixSaveDataBlock(fix_func, file, size) \ +do { \ + ReadDataFromBufferPointer(buf, size); \ + memset(work_buff2, 0, sizeof(work_buff2)); \ + buf2 = work_buff2; \ + reserved = 0; \ + MakeSpaceForSizeInBufferPointer(presize, buf2, postsize); \ + fix_func(save_type, buf, buf2, &size); \ + CopySizeAndPreparePointer(presize, buf2, postsize, reserved, size); \ + if (!PcSaveHelper.PcClassSaveRoutine(file, work_buff2, buf2 - work_buff2)) \ + goto fail; \ + totalSize += buf2 - work_buff2; \ +} while(0) + +#define ReadDataFromBufferPointerWithSize(buf, to, size) memcpy(&to, buf, size); buf += align4bytes(size) + +#define ReadBuf(buf, to) memcpy(&to, buf, sizeof(to)); buf += sizeof(to) +#define WriteBuf(buf, from) memcpy(buf, &from, sizeof(from)); buf += sizeof(from) +#define CopyBuf(from, to, size) memcpy(to, from, size); to += (size); from += (size) +#define CopyPtr(from, to) memcpy(to, from, 4); to += 4; from += 8 +#define SkipBuf(buf, size) buf += (size) +#define SkipBoth(from, to, size) to += (size); from += (size) +#define SkipPtr(from, to) to += 4; from += 8 + +// unfortunately we need a 2nd buffer of the same size to store the fixed output ... +static uint8 work_buff2[sizeof(work_buff)]; + +enum +{ + SAVE_TYPE_NONE = 0, + SAVE_TYPE_32_BIT = 1, + SAVE_TYPE_64_BIT = 2, + SAVE_TYPE_MSVC = 4, + SAVE_TYPE_GCC = 8, +}; + +uint8 +GetSaveType(char *savename) +{ + uint8 save_type = SAVE_TYPE_NONE; + int file = CFileMgr::OpenFile(savename, "rb"); + + uint32 size; + CFileMgr::Read(file, (const char *)&size, sizeof(size)); + + uint8 *buf = work_buff; + CFileMgr::Read(file, (const char *)work_buff, size); // simple vars + scripts + + LoadSaveDataBlockNoCheck(buf, file, size); // ped pool + + LoadSaveDataBlockNoCheck(buf, file, size); // garages + ReadDataFromBufferPointer(buf, size); + + // store for later after we know how much data we need to skip + ReadDataFromBufferPointerWithSize(buf, work_buff2, size); + + LoadSaveDataBlockNoCheck(buf, file, size); // game logic + LoadSaveDataBlockNoCheck(buf, file, size); // vehicle pool + LoadSaveDataBlockNoCheck(buf, file, size); // object pool + LoadSaveDataBlockNoCheck(buf, file, size); // paths + + LoadSaveDataBlockNoCheck(buf, file, size); // cranes + + CFileMgr::CloseFile(file); + + ReadDataFromBufferPointer(buf, size); + + if (size == 1000) + save_type |= SAVE_TYPE_32_BIT; + else if (size == 1160) + save_type |= SAVE_TYPE_64_BIT; + else + assert(0); // this should never happen + + buf = work_buff2; + + buf += 1964; // skip everything before the first garage + buf += save_type & SAVE_TYPE_32_BIT ? 28 : 40; // skip first garage up to m_vecCorner1 + + CVector2D vecCorner1; + float fInfZ, fSupZ; + + ReadBuf(buf, vecCorner1); + ReadBuf(buf, fInfZ); + SkipBuf(buf, sizeof(CVector2D)); + SkipBuf(buf, sizeof(CVector2D)); + ReadBuf(buf, fSupZ); + + // SET_GARAGE -914.129028 -1263.540039 10.706000 -907.137024 -1246.625977 -906.299988 -1266.900024 14.421000 + if (vecCorner1.x == -914.129028f && vecCorner1.y == -1263.540039f && + fInfZ == 10.706000f && fSupZ == 14.421000f) + save_type |= SAVE_TYPE_MSVC; + else + save_type |= SAVE_TYPE_GCC; + + return save_type; +} + +static void +FixGarages(uint8 save_type, uint8 *buf, uint8 *buf2, uint32 *size) +{ + // hardcoded: 7876 + // x86 msvc: 7340 + // x86 gcc: 7020 + // amd64 msvc: 7852 + // amd64 gcc: 7660 + + uint8 *buf_start = buf; + uint8 *buf2_start = buf2; + uint32 read; + uint32 written = 7340; + + if (save_type & SAVE_TYPE_32_BIT && save_type & SAVE_TYPE_GCC) + read = 7020; + else if (save_type & SAVE_TYPE_64_BIT && save_type & SAVE_TYPE_GCC) + read = 7660; + else + read = 7852; + + uint32 ptrsize = save_type & SAVE_TYPE_32_BIT ? 4 : 8; + + CopyBuf(buf, buf2, 4 * 6); + CopyBuf(buf, buf2, 4 * TOTAL_COLLECTCARS_GARAGES); + CopyBuf(buf, buf2, 4); + + if (save_type & SAVE_TYPE_GCC) + { + for (int32 i = 0; i < NUM_GARAGE_STORED_CARS; i++) + { + for (int32 j = 0; j < TOTAL_HIDEOUT_GARAGES; j++) + { + CopyBuf(buf, buf2, 4 + sizeof(CVector) + sizeof(CVector)); + uint8 nFlags8; + ReadBuf(buf, nFlags8); + int32 nFlags32 = nFlags8; + WriteBuf(buf2, nFlags32); + CopyBuf(buf, buf2, 1 * 6); + SkipBuf(buf, 1); + SkipBuf(buf2, 2); + } + } + } + else + { + CopyBuf(buf, buf2, sizeof(CStoredCar) * NUM_GARAGE_STORED_CARS * TOTAL_HIDEOUT_GARAGES); + } + + for (int32 i = 0; i < NUM_GARAGES; i++) + { + CopyBuf(buf, buf2, 1 * 7); + SkipBoth(buf, buf2, 1); + CopyBuf(buf, buf2, 4); + SkipBuf(buf, ptrsize - 4); // write 4 bytes padding if 8 byte pointer, if not, write 0 + SkipBuf(buf, ptrsize * 2); + SkipBuf(buf2, 4 * 2); + CopyBuf(buf, buf2, 1 * 7); + SkipBoth(buf, buf2, 1); + CopyBuf(buf, buf2, sizeof(CVector2D) * 3 + 4 * 17 + 1); + SkipBoth(buf, buf2, 3); + SkipBuf(buf, ptrsize); + SkipBuf(buf2, 4); + + if (save_type & SAVE_TYPE_GCC) + SkipBuf(buf, save_type & SAVE_TYPE_64_BIT ? 36 + 4 : 36); // sizeof(CStoredCar) on gcc 64/32 before fix + else + SkipBuf(buf, sizeof(CStoredCar)); + + SkipBuf(buf2, sizeof(CStoredCar)); + } + + *size = 0; + + assert(buf - buf_start == read); + assert(buf2 - buf2_start == written); + + *size = 7876; +} + +static void +FixCranes(uint8 save_type, uint8 *buf, uint8 *buf2, uint32 *size) +{ + uint8 *buf_start = buf; + uint8 *buf2_start = buf2; + uint32 read = 2 * sizeof(uint32) + 0x480; // sizeof(aCranes) + uint32 written = 2 * sizeof(uint32) + 0x3E0; // see CRANES_SAVE_SIZE + + CopyBuf(buf, buf2, 4 + 4); + + for (int32 i = 0; i < NUM_CRANES; i++) + { + CopyPtr(buf, buf2); + CopyPtr(buf, buf2); + CopyBuf(buf, buf2, 14 * 4 + sizeof(CVector) * 3 + sizeof(CVector2D)); + SkipBuf(buf, 4); + CopyPtr(buf, buf2); + CopyBuf(buf, buf2, 4 + 7 * 1); + SkipBuf(buf, 5); + SkipBuf(buf2, 1); + } + + *size = 0; + + assert(buf - buf_start == read); + assert(buf2 - buf2_start == written); + + *size = written; +} + +static void +FixPickups(uint8 save_type, uint8 *buf, uint8 *buf2, uint32 *size) +{ + uint8 *buf_start = buf; + uint8 *buf2_start = buf2; + uint32 read = 0x5400 + sizeof(uint16) + sizeof(uint16) + sizeof(int32) * NUMCOLLECTEDPICKUPS; // sizeof(aPickUps) + uint32 written = 0x4440 + sizeof(uint16) + sizeof(uint16) + sizeof(int32) * NUMCOLLECTEDPICKUPS; // see PICKUPS_SAVE_SIZE + + for (int32 i = 0; i < NUMPICKUPS; i++) + { + CopyBuf(buf, buf2, sizeof(CVector) + 4); + CopyPtr(buf, buf2); + CopyPtr(buf, buf2); + CopyBuf(buf, buf2, 4 * 2 + 2 * 3 + 8 + 1 * 3); + SkipBuf(buf, 7); + SkipBuf(buf2, 3); + } + + CopyBuf(buf, buf2, 2); + SkipBoth(buf, buf2, 2); + + CopyBuf(buf, buf2, NUMCOLLECTEDPICKUPS * 4); + + *size = 0; + + assert(buf - buf_start == read); + assert(buf2 - buf2_start == written); + + *size = written; +} + +static void +FixPhoneInfo(uint8 save_type, uint8 *buf, uint8 *buf2, uint32 *size) +{ + uint8 *buf_start = buf; + uint8 *buf2_start = buf2; + uint32 read = 0x1138; // sizeof(CPhoneInfo) + uint32 written = 0xA30; // see PHONEINFO_SAVE_SIZE + + CopyBuf(buf, buf2, 4 + 4); + + for (int32 i = 0; i < NUMPHONES; i++) + { + CopyBuf(buf, buf2, sizeof(CVector)); + SkipBuf(buf, 4); + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + CopyBuf(buf, buf2, 4); + SkipBuf(buf, 4); + CopyPtr(buf, buf2); + CopyBuf(buf, buf2, 4 + 1); + SkipBoth(buf, buf2, 3); + } + + *size = 0; + + assert(buf - buf_start == read); + assert(buf2 - buf2_start == written); + + *size = written; +} + +static void +FixParticles(uint8 save_type, uint8 *buf, uint8 *buf2, uint32 *size) +{ + uint8 *buf_start = buf; + uint8 *buf2_start = buf2; + + int32 numObjects; + ReadBuf(buf, numObjects); + WriteBuf(buf2, numObjects); + + uint32 read = 0x98 * (numObjects + 1) + 4; // sizeof(CParticleObject) + uint32 written = 0x84 * (numObjects + 1) + 4; // see PARTICLE_OBJECT_SIZEOF + + for (int32 i = 0; i < numObjects; i++) + { + // CPlaceable + CopyBuf(buf, buf2, 4 * 4 * 4); + SkipPtr(buf, buf2); + CopyBuf(buf, buf2, 1); + SkipBuf(buf, 7); + SkipBuf(buf2, 3); + + // CParticleObject + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + SkipPtr(buf, buf2); + CopyBuf(buf, buf2, 4 * 3 + 2 * 1 + 2 * 2); + SkipBoth(buf, buf2, 2); + CopyBuf(buf, buf2, sizeof(CVector) + 2 * 4 + sizeof(CRGBA) + 2 * 1); + SkipBoth(buf, buf2, 2); + } + + SkipBuf(buf, 0x98); // sizeof(CParticleObject) + SkipBuf(buf2, 0x84); // see PARTICLE_OBJECT_SIZEOF + + *size = 0; + + assert(buf - buf_start == read); + assert(buf2 - buf2_start == written); + + *size = written; +} + +static void +FixScriptPaths(uint8 save_type, uint8 *buf, uint8 *buf2, uint32 *size) +{ + uint8 *buf_start = buf; + uint8 *buf2_start = buf2; + uint32 read = 0x108; // sizeof(CScriptPath) * 3 + uint32 written = 0x9C; // see SCRIPTPATHS_SAVE_SIZE + + for (int32 i = 0; i < 3; i++) + { + int32 numNodes; + ReadBuf(buf, numNodes); + WriteBuf(buf2, numNodes); + SkipBuf(buf, 4); + SkipPtr(buf, buf2); + CopyBuf(buf, buf2, 4 * 5); + SkipBuf(buf, 4); + + for (int32 i = 0; i < 6; i++) + { + CopyPtr(buf, buf2); + } + + for (int32 i = 0; i < numNodes; i++) + { + CopyBuf(buf, buf2, sizeof(CPlaneNode)); + read += sizeof(CPlaneNode); + written += sizeof(CPlaneNode); + } + } + + *size = 0; + + assert(buf - buf_start == read); + assert(buf2 - buf2_start == written); + + *size = written; +} + +bool +FixSave(int32 slot, uint8 save_type) +{ + if (save_type & SAVE_TYPE_32_BIT && save_type & SAVE_TYPE_MSVC) + return true; + + bool success = false; + + uint8 *buf, *presize, *postsize, *buf2; + uint32 size; + uint32 reserved; + + uint32 totalSize; + + char savename[MAX_PATH]; + char savename_bak[MAX_PATH]; + + sprintf(savename, "%s%i%s", DefaultPCSaveFileName, slot + 1, ".b"); + sprintf(savename_bak, "%s%i%s.%lld.bak", DefaultPCSaveFileName, slot + 1, ".b", time(nil)); + + assert(caserename(savename, savename_bak) == 0); + + int file_in = CFileMgr::OpenFile(savename_bak, "rb"); + int file_out = CFileMgr::OpenFileForWriting(savename); + + CheckSum = 0; + totalSize = 0; + + CFileMgr::Read(file_in, (const char *)&size, sizeof(size)); + + buf = work_buff; + CFileMgr::Read(file_in, (const char *)work_buff, size); // simple vars + scripts + + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // ped pool + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // garages + FixSaveDataBlock(FixGarages, file_out, size); // garages need to be fixed in either case + + LoadSaveDataBlockNoCheck(buf, file_in, size); // game logic + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // vehicle pool + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // object pool + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // paths + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // cranes + if (save_type & SAVE_TYPE_64_BIT) + FixSaveDataBlock(FixCranes, file_out, size); + else + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // pickups + if (save_type & SAVE_TYPE_64_BIT) + FixSaveDataBlock(FixPickups, file_out, size); + else + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // phoneinfo + if (save_type & SAVE_TYPE_64_BIT) + FixSaveDataBlock(FixPhoneInfo, file_out, size); + else + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // restart + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // radar blips + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // zones + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // gang data + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // car generators + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // particles + if (save_type & SAVE_TYPE_64_BIT) + FixSaveDataBlock(FixParticles, file_out, size); + else + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // audio script objects + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // script paths + if (save_type & SAVE_TYPE_64_BIT) + FixSaveDataBlock(FixScriptPaths, file_out, size); + else + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // player info + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // stats + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // set pieces + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // streaming + WriteSavaDataBlockNoFunc(buf, file_out, size); + + LoadSaveDataBlockNoCheck(buf, file_in, size); // ped type + WriteSavaDataBlockNoFunc(buf, file_out, size); + + memset(work_buff, 0, sizeof(work_buff)); + + for (int i = 0; i < 4; i++) { + size = align4bytes(SIZE_OF_ONE_GAME_IN_BYTES - totalSize - 4); + if (size > sizeof(work_buff)) + size = sizeof(work_buff); + if (size > 4) { + if (!PcSaveHelper.PcClassSaveRoutine(file_out, work_buff, size)) + goto fail; + totalSize += size; + } + } + + if (!CFileMgr::Write(file_out, (const char *)&CheckSum, sizeof(CheckSum))) + goto fail; + + success = true; + +fail:; + CFileMgr::CloseFile(file_in); + CFileMgr::CloseFile(file_out); + + return success; +} + +#undef LoadSaveDataBlockNoCheck +#undef WriteSavaDataBlockNoFunc +#undef FixSaveDataBlock +#undef ReadDataFromBufferPointerWithSize +#undef ReadBuf +#undef WriteBuf +#undef CopyBuf +#undef CopyPtr +#undef SkipBuf +#undef SkipBoth +#undef SkipPtr +#endif + #ifdef MISSION_REPLAY void DisplaySaveResult(int unk, char* name) diff --git a/src/save/GenericGameStorage.h b/src/save/GenericGameStorage.h index 65f1cc16..b2bf7a24 100644 --- a/src/save/GenericGameStorage.h +++ b/src/save/GenericGameStorage.h @@ -25,6 +25,11 @@ bool CheckDataNotCorrupt(int32 slot, char *name); bool RestoreForStartLoad(); int align4bytes(int32 size); +#ifdef FIX_INCOMPATIBLE_SAVES +uint8 GetSaveType(char *savename); +bool FixSave(int32 slot, uint8 save_type); +#endif + extern char DefaultPCSaveFileName[260]; extern char ValidSaveName[260]; extern char LoadFileName[256]; diff --git a/src/save/PCSave.cpp b/src/save/PCSave.cpp index 70ca31d2..a33e9d90 100644 --- a/src/save/PCSave.cpp +++ b/src/save/PCSave.cpp @@ -25,7 +25,11 @@ C_PcSave::SetSaveDirectory(const char *path) bool C_PcSave::DeleteSlot(int32 slot) { +#ifdef FIX_BUGS + char FileName[MAX_PATH]; +#else char FileName[200]; +#endif PcSaveHelper.nErrorCode = SAVESTATUS_SUCCESSFUL; sprintf(FileName, "%s%i.b", DefaultPCSaveFileName, slot + 1); @@ -118,6 +122,13 @@ C_PcSave::PopulateSlotInfo() } if (Slots[i] == SLOT_OK) { if (CheckDataNotCorrupt(i, savename)) { +#ifdef FIX_INCOMPATIBLE_SAVES + if (!FixSave(i, GetSaveType(savename))) { + CMessages::InsertNumberInString(TheText.Get("FEC_SLC"), i + 1, -1, -1, -1, -1, -1, SlotFileName[i]); + Slots[i] = SLOT_CORRUPTED; + continue; + } +#endif SYSTEMTIME st; memcpy(&st, &header.SaveDateTime, sizeof(SYSTEMTIME)); const char *month; diff --git a/src/save/PCSave.h b/src/save/PCSave.h index 2e85867a..2a29fa95 100644 --- a/src/save/PCSave.h +++ b/src/save/PCSave.h @@ -33,7 +33,7 @@ public: void PopulateSlotInfo(); bool DeleteSlot(int32 slot); int8 SaveSlot(int32 slot); - bool PcClassSaveRoutine(int32 a2, uint8 *data, uint32 size); + bool PcClassSaveRoutine(int32 file, uint8 *data, uint32 size); static void SetSaveDirectory(const char *path); }; diff --git a/src/save/SaveBuf.h b/src/save/SaveBuf.h new file mode 100644 index 00000000..d0817e9a --- /dev/null +++ b/src/save/SaveBuf.h @@ -0,0 +1,123 @@ +#pragma once + +#ifdef VALIDATE_SAVE_SIZE +extern int32 _saveBufCount; +#define INITSAVEBUF _saveBufCount = 0; +#define VALIDATESAVEBUF(b) assert(_saveBufCount == b); +#else +#define INITSAVEBUF +#define VALIDATESAVEBUF(b) +#endif + +inline void +SkipSaveBuf(uint8 *&buf, int32 skip) +{ + buf += skip; +#ifdef VALIDATE_SAVE_SIZE + _saveBufCount += skip; +#endif +} + +inline void +SkipSaveBuf(uint8*& buf, uint32 &length, int32 skip) +{ + buf += skip; + length += skip; +#ifdef VALIDATE_SAVE_SIZE + _saveBufCount += skip; +#endif +} + +template +inline void +ReadSaveBuf(T *out, uint8 *&buf) +{ + *out = *(T *)buf; + SkipSaveBuf(buf, sizeof(T)); +} + +template +inline void +ReadSaveBuf(T *out, uint8 *&buf, uint32 &length) +{ + *out = *(T *)buf; + SkipSaveBuf(buf, length, sizeof(T)); +} + +template +inline T * +WriteSaveBuf(uint8 *&buf, const T &value) +{ + T *p = (T*)buf; + *p = value; + SkipSaveBuf(buf, sizeof(T)); + return p; +} + +template +inline T * +WriteSaveBuf(uint8 *&buf, uint32 &length, const T &value) +{ + T *p = (T*)buf; + *p = value; + SkipSaveBuf(buf, length, sizeof(T)); + return p; +} + +#ifdef COMPATIBLE_SAVES +inline void +ZeroSaveBuf(uint8 *&buf, uint32 length) +{ + memset(buf, 0, length); + SkipSaveBuf(buf, length); +} +#endif + +#define SAVE_HEADER_SIZE (4*sizeof(char)+sizeof(uint32)) + +#define WriteSaveHeader(buf,a,b,c,d,size) \ + WriteSaveBuf(buf, a);\ + WriteSaveBuf(buf, b);\ + WriteSaveBuf(buf, c);\ + WriteSaveBuf(buf, d);\ + WriteSaveBuf(buf, size); + +#define WriteSaveHeaderWithLength(buf,len,a,b,c,d,size) \ + WriteSaveBuf(buf, len, a);\ + WriteSaveBuf(buf, len, b);\ + WriteSaveBuf(buf, len, c);\ + WriteSaveBuf(buf, len, d);\ + WriteSaveBuf(buf, len, (uint32)(size)); + +#ifdef VALIDATE_SAVE_SIZE +#define CheckSaveHeader(buf, a, b, c, d, size) do { \ + char _c; uint32 _size;\ + ReadSaveBuf(&_c, buf);\ + assert(_c == a);\ + ReadSaveBuf(&_c, buf);\ + assert(_c == b);\ + ReadSaveBuf(&_c, buf);\ + assert(_c == c);\ + ReadSaveBuf(&_c, buf);\ + assert(_c == d);\ + ReadSaveBuf(&_size, buf);\ + assert(_size == size);\ + } while(0) + +#define CheckSaveHeaderWithLength(buf,len,a,b,c,d,size) do { \ + char _c; uint32 _size;\ + ReadSaveBuf(&_c, buf, len);\ + assert(_c == a);\ + ReadSaveBuf(&_c, buf, len);\ + assert(_c == b);\ + ReadSaveBuf(&_c, buf, len);\ + assert(_c == c);\ + ReadSaveBuf(&_c, buf, len);\ + assert(_c == d);\ + ReadSaveBuf(&_size, buf, len);\ + assert(_size == size);\ + } while(0) +#else +#define CheckSaveHeader(buf, a, b, c, d, size) SkipSaveBuf(buf, 8); +#define CheckSaveHeaderWithLength(buf, len, a, b, c, d, size) SkipSaveBuf(buf, 8); +#endif diff --git a/src/skel/crossplatform.cpp b/src/skel/crossplatform.cpp index 88360fd8..2ffe17c1 100644 --- a/src/skel/crossplatform.cpp +++ b/src/skel/crossplatform.cpp @@ -172,6 +172,29 @@ FILE* _fcaseopen(char const* filename, char const* mode) return result; } +int _caserename(const char *old_filename, const char *new_filename) +{ + int result; + char *real_old = casepath(old_filename); + char *real_new = casepath(new_filename); + + // hack so we don't even try to rename it to new_filename if it already exists + if (!real_new) { + free(real_old); + return -1; + } + + if (!real_old) + result = rename(old_filename, real_new); + else + result = rename(real_old, real_new); + + free(real_old); + free(real_new); + + return result; +} + // Case-insensitivity on linux (from https://github.com/OneSadCookie/fcaseopen) // Returned string should freed manually (if exists) char* casepath(char const* path, bool checkPathFirst) diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h index 598702ff..2cbf7a2a 100644 --- a/src/skel/crossplatform.h +++ b/src/skel/crossplatform.h @@ -1,4 +1,5 @@ #include +#include // This is the common include for platform/renderer specific skeletons(glfw.cpp, win.cpp etc.) and using cross platform things (like Windows directories wrapper, platform specific global arrays etc.) // Functions that's different on glfw and win but have same signature, should be located on platform.h. @@ -32,6 +33,7 @@ char *_strdate(char *buf); #endif extern DWORD _dwOperatingSystemVersion; #define fcaseopen fopen +#define caserename rename #else #ifdef __WIIU__ #include "wiiu.h" @@ -58,6 +60,8 @@ extern long _dwOperatingSystemVersion; char *casepath(char const *path, bool checkPathFirst = true); FILE *_fcaseopen(char const *filename, char const *mode); #define fcaseopen _fcaseopen +int _caserename(const char *old_filename, const char *new_filename); +#define caserename _caserename #endif #ifdef RW_GL3 @@ -151,7 +155,7 @@ typedef void* HANDLE; struct WIN32_FIND_DATA { char extension[32]; // for searching - char folder[32]; // for searching + char folder[MAX_PATH]; // for searching char cFileName[256]; // because tSkinInfo has it 256 time_t ftLastWriteTime; }; diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp index ce8da817..0928229f 100644 --- a/src/skel/glfw/glfw.cpp +++ b/src/skel/glfw/glfw.cpp @@ -50,16 +50,30 @@ long _dwOperatingSystemVersion; #include "Font.h" #include "MemoryMgr.h" -#define MAX_SUBSYSTEMS (16) +// We found out that GLFW's keyboard input handling is still pretty delayed/not stable, so now we fetch input from X11 directly on Linux. +#if !defined _WIN32 && !defined __APPLE__ && !defined __SWITCH__ // && !defined WAYLAND +#define GET_KEYBOARD_INPUT_FROM_X11 +#endif + +#ifdef GET_KEYBOARD_INPUT_FROM_X11 +#include +#include +#define GLFW_EXPOSE_NATIVE_X11 +#include +#endif #ifdef _WIN32 #define GLFW_EXPOSE_NATIVE_WIN32 #include #endif +#define MAX_SUBSYSTEMS (16) + rw::EngineOpenParams openParams; static RwBool ForegroundApp = TRUE; +static RwBool WindowIconified = FALSE; +static RwBool WindowFocused = TRUE; static RwBool RwInitialised = FALSE; @@ -325,7 +339,9 @@ psInitialize(void) RsGlobal.ps = &PsGlobal; PsGlobal.fullScreen = FALSE; - PsGlobal.cursorIsInWindow = TRUE; + PsGlobal.cursorIsInWindow = FALSE; + WindowFocused = TRUE; + WindowIconified = FALSE; PsGlobal.joy1id = -1; PsGlobal.joy2id = -1; @@ -849,11 +865,15 @@ psSelectDevice() return TRUE; } +#ifndef GET_KEYBOARD_INPUT_FROM_X11 void keypressCB(GLFWwindow* window, int key, int scancode, int action, int mods); +#endif void resizeCB(GLFWwindow* window, int width, int height); void scrollCB(GLFWwindow* window, double xoffset, double yoffset); void cursorCB(GLFWwindow* window, double xpos, double ypos); void cursorEnterCB(GLFWwindow* window, int entered); +void windowFocusCB(GLFWwindow* window, int focused); +void windowIconifyCB(GLFWwindow* window, int iconified); void joysChangeCB(int jid, int event); bool IsThisJoystickBlacklisted(int i) @@ -899,7 +919,7 @@ void _InputInitialiseJoys() free(db); fclose(f); } else - printf("You don't seem to have copied " SDL_GAMEPAD_DB_PATH " file from re3/gamefiles to GTA3 directory. Some gamepads may not be recognized.\n"); + printf("You don't seem to have copied " SDL_GAMEPAD_DB_PATH " file from reVC/gamefiles to GTA: Vice City directory. Some gamepads may not be recognized.\n"); #undef SDL_GAMEPAD_DB_PATH @@ -962,11 +982,15 @@ void psPostRWinit(void) RwVideoMode vm; RwEngineGetVideoModeInfo(&vm, GcurSelVM); +#ifndef GET_KEYBOARD_INPUT_FROM_X11 glfwSetKeyCallback(PSGLOBAL(window), keypressCB); +#endif glfwSetFramebufferSizeCallback(PSGLOBAL(window), resizeCB); glfwSetScrollCallback(PSGLOBAL(window), scrollCB); glfwSetCursorPosCallback(PSGLOBAL(window), cursorCB); glfwSetCursorEnterCallback(PSGLOBAL(window), cursorEnterCB); + glfwSetWindowIconifyCallback(PSGLOBAL(window), windowIconifyCB); + glfwSetWindowFocusCallback(PSGLOBAL(window), windowFocusCB); glfwSetJoystickCallback(joysChangeCB); _InputInitialiseJoys(); @@ -1318,6 +1342,10 @@ void scrollCB(GLFWwindow* window, double xoffset, double yoffset) { PSGLOBAL(mouseWheel) = yoffset; } +bool lshiftStatus = false; +bool rshiftStatus = false; + +#ifndef GET_KEYBOARD_INPUT_FROM_X11 int keymap[GLFW_KEY_LAST + 1]; static void @@ -1448,9 +1476,6 @@ initkeymap(void) keymap[GLFW_KEY_MENU] = rsNULL; } -bool lshiftStatus = false; -bool rshiftStatus = false; - void keypressCB(GLFWwindow* window, int key, int scancode, int action, int mods) { @@ -1468,6 +1493,266 @@ keypressCB(GLFWwindow* window, int key, int scancode, int action, int mods) } } +#else + +uint32 keymap[512]; // 256 ascii + 256 KeySyms between 0xff00 - 0xffff +bool keyStates[512]; +uint32 keyCodeToKeymapIndex[256]; // cache for physical keys + +#define KEY_MAP_OFFSET (0xff00 - 256) +static void +initkeymap(void) +{ + Display *display = glfwGetX11Display(); + int i; + + for (i = 0; i < ARRAY_SIZE(keymap); i++) + keymap[i] = rsNULL; + + // You can add new ASCII mappings to here freely (but beware that if right hand side of assignment isn't supported on CFont, it'll be blank/won't work on binding screen) + // Right hand side of assigments should always be uppercase counterpart of character + keymap[XK_space] = ' '; + keymap[XK_apostrophe] = '\''; + keymap[XK_ampersand] = '&'; + keymap[XK_percent] = '%'; + keymap[XK_dollar] = '$'; + keymap[XK_comma] = ','; + keymap[XK_minus] = '-'; + keymap[XK_period] = '.'; + keymap[XK_slash] = '/'; + keymap[XK_question] = '?'; + keymap[XK_exclam] = '!'; + keymap[XK_quotedbl] = '"'; + keymap[XK_colon] = ':'; + keymap[XK_semicolon] = ';'; + keymap[XK_equal] = '='; + keymap[XK_bracketleft] = '['; + keymap[XK_backslash] = '\\'; + keymap[XK_bracketright] = ']'; + keymap[XK_grave] = '`'; + keymap[XK_0] = '0'; + keymap[XK_1] = '1'; + keymap[XK_2] = '2'; + keymap[XK_3] = '3'; + keymap[XK_4] = '4'; + keymap[XK_5] = '5'; + keymap[XK_6] = '6'; + keymap[XK_7] = '7'; + keymap[XK_8] = '8'; + keymap[XK_9] = '9'; + keymap[XK_a] = 'A'; + keymap[XK_b] = 'B'; + keymap[XK_c] = 'C'; + keymap[XK_d] = 'D'; + keymap[XK_e] = 'E'; + keymap[XK_f] = 'F'; + keymap[XK_g] = 'G'; + keymap[XK_h] = 'H'; + keymap[XK_i] = 'I'; + keymap[XK_I] = 'I'; // Turkish I problem + keymap[XK_j] = 'J'; + keymap[XK_k] = 'K'; + keymap[XK_l] = 'L'; + keymap[XK_m] = 'M'; + keymap[XK_n] = 'N'; + keymap[XK_o] = 'O'; + keymap[XK_p] = 'P'; + keymap[XK_q] = 'Q'; + keymap[XK_r] = 'R'; + keymap[XK_s] = 'S'; + keymap[XK_t] = 'T'; + keymap[XK_u] = 'U'; + keymap[XK_v] = 'V'; + keymap[XK_w] = 'W'; + keymap[XK_x] = 'X'; + keymap[XK_y] = 'Y'; + keymap[XK_z] = 'Z'; + + // Some of regional but ASCII characters that GTA supports + keymap[XK_agrave] = 0x00c0; + keymap[XK_aacute] = 0x00c1; + keymap[XK_acircumflex] = 0x00c2; + keymap[XK_adiaeresis] = 0x00c4; + + keymap[XK_ae] = 0x00c6; + + keymap[XK_egrave] = 0x00c8; + keymap[XK_eacute] = 0x00c9; + keymap[XK_ecircumflex] = 0x00ca; + keymap[XK_ediaeresis] = 0x00cb; + + keymap[XK_igrave] = 0x00cc; + keymap[XK_iacute] = 0x00cd; + keymap[XK_icircumflex] = 0x00ce; + keymap[XK_idiaeresis] = 0x00cf; + + keymap[XK_ccedilla] = 0x00c7; + keymap[XK_odiaeresis] = 0x00d6; + keymap[XK_udiaeresis] = 0x00dc; + + // These are 0xff00 - 0xffff range of KeySym's, and subtracting KEY_MAP_OFFSET is needed + keymap[XK_Escape - KEY_MAP_OFFSET] = rsESC; + keymap[XK_Return - KEY_MAP_OFFSET] = rsENTER; + keymap[XK_Tab - KEY_MAP_OFFSET] = rsTAB; + keymap[XK_BackSpace - KEY_MAP_OFFSET] = rsBACKSP; + keymap[XK_Insert - KEY_MAP_OFFSET] = rsINS; + keymap[XK_Delete - KEY_MAP_OFFSET] = rsDEL; + keymap[XK_Right - KEY_MAP_OFFSET] = rsRIGHT; + keymap[XK_Left - KEY_MAP_OFFSET] = rsLEFT; + keymap[XK_Down - KEY_MAP_OFFSET] = rsDOWN; + keymap[XK_Up - KEY_MAP_OFFSET] = rsUP; + keymap[XK_Page_Up - KEY_MAP_OFFSET] = rsPGUP; + keymap[XK_Page_Down - KEY_MAP_OFFSET] = rsPGDN; + keymap[XK_Home - KEY_MAP_OFFSET] = rsHOME; + keymap[XK_End - KEY_MAP_OFFSET] = rsEND; + keymap[XK_Caps_Lock - KEY_MAP_OFFSET] = rsCAPSLK; + keymap[XK_Scroll_Lock - KEY_MAP_OFFSET] = rsSCROLL; + keymap[XK_Num_Lock - KEY_MAP_OFFSET] = rsNUMLOCK; + keymap[XK_Pause - KEY_MAP_OFFSET] = rsPAUSE; + + keymap[XK_F1 - KEY_MAP_OFFSET] = rsF1; + keymap[XK_F2 - KEY_MAP_OFFSET] = rsF2; + keymap[XK_F3 - KEY_MAP_OFFSET] = rsF3; + keymap[XK_F4 - KEY_MAP_OFFSET] = rsF4; + keymap[XK_F5 - KEY_MAP_OFFSET] = rsF5; + keymap[XK_F6 - KEY_MAP_OFFSET] = rsF6; + keymap[XK_F7 - KEY_MAP_OFFSET] = rsF7; + keymap[XK_F8 - KEY_MAP_OFFSET] = rsF8; + keymap[XK_F9 - KEY_MAP_OFFSET] = rsF9; + keymap[XK_F10 - KEY_MAP_OFFSET] = rsF10; + keymap[XK_F11 - KEY_MAP_OFFSET] = rsF11; + keymap[XK_F12 - KEY_MAP_OFFSET] = rsF12; + keymap[XK_F13 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F14 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F15 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F16 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F17 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F18 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F19 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F20 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F21 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F22 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F23 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F24 - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_F25 - KEY_MAP_OFFSET] = rsNULL; + + keymap[XK_KP_0 - KEY_MAP_OFFSET] = rsPADINS; + keymap[XK_KP_1 - KEY_MAP_OFFSET] = rsPADEND; + keymap[XK_KP_2 - KEY_MAP_OFFSET] = rsPADDOWN; + keymap[XK_KP_3 - KEY_MAP_OFFSET] = rsPADPGDN; + keymap[XK_KP_4 - KEY_MAP_OFFSET] = rsPADLEFT; + keymap[XK_KP_5 - KEY_MAP_OFFSET] = rsPAD5; + keymap[XK_KP_6 - KEY_MAP_OFFSET] = rsPADRIGHT; + keymap[XK_KP_7 - KEY_MAP_OFFSET] = rsPADHOME; + keymap[XK_KP_8 - KEY_MAP_OFFSET] = rsPADUP; + keymap[XK_KP_9 - KEY_MAP_OFFSET] = rsPADPGUP; + keymap[XK_KP_Insert - KEY_MAP_OFFSET] = rsPADINS; + keymap[XK_KP_End - KEY_MAP_OFFSET] = rsPADEND; + keymap[XK_KP_Down - KEY_MAP_OFFSET] = rsPADDOWN; + keymap[XK_KP_Page_Down - KEY_MAP_OFFSET] = rsPADPGDN; + keymap[XK_KP_Left - KEY_MAP_OFFSET] = rsPADLEFT; + keymap[XK_KP_Begin - KEY_MAP_OFFSET] = rsPAD5; + keymap[XK_KP_Right - KEY_MAP_OFFSET] = rsPADRIGHT; + keymap[XK_KP_Home - KEY_MAP_OFFSET] = rsPADHOME; + keymap[XK_KP_Up - KEY_MAP_OFFSET] = rsPADUP; + keymap[XK_KP_Page_Up - KEY_MAP_OFFSET] = rsPADPGUP; + + keymap[XK_KP_Decimal - KEY_MAP_OFFSET] = rsPADDEL; + keymap[XK_KP_Divide - KEY_MAP_OFFSET] = rsDIVIDE; + keymap[XK_KP_Multiply - KEY_MAP_OFFSET] = rsTIMES; + keymap[XK_KP_Subtract - KEY_MAP_OFFSET] = rsMINUS; + keymap[XK_KP_Add - KEY_MAP_OFFSET] = rsPLUS; + keymap[XK_KP_Enter - KEY_MAP_OFFSET] = rsPADENTER; + keymap[XK_KP_Equal - KEY_MAP_OFFSET] = rsNULL; + keymap[XK_Shift_L - KEY_MAP_OFFSET] = rsLSHIFT; + keymap[XK_Control_L - KEY_MAP_OFFSET] = rsLCTRL; + keymap[XK_Alt_L - KEY_MAP_OFFSET] = rsLALT; + keymap[XK_Super_L - KEY_MAP_OFFSET] = rsLWIN; + keymap[XK_Shift_R - KEY_MAP_OFFSET] = rsRSHIFT; + keymap[XK_Control_R - KEY_MAP_OFFSET] = rsRCTRL; + keymap[XK_Alt_R - KEY_MAP_OFFSET] = rsRALT; + keymap[XK_Super_R - KEY_MAP_OFFSET] = rsRWIN; + keymap[XK_Menu - KEY_MAP_OFFSET] = rsNULL; + + // Cache the key codes' key symbol equivelants, otherwise we will have to do it on each frame + // KeyCode is always in [0,255], and represents a physical key + + int min_keycode, max_keycode, keysyms_per_keycode; + KeySym *keymap, *origkeymap; + + char *keyboardLang = setlocale (LC_CTYPE, NULL); + setlocale(LC_CTYPE, ""); + + XDisplayKeycodes(display, &min_keycode, &max_keycode); + origkeymap = XGetKeyboardMapping(display, min_keycode, (max_keycode - min_keycode + 1), &keysyms_per_keycode); + keymap = origkeymap; + for (int i = min_keycode; i <= max_keycode; i++) { + int j, lastKeysym; + + lastKeysym = keysyms_per_keycode - 1; + while ((lastKeysym >= 0) && (keymap[lastKeysym] == NoSymbol)) + lastKeysym--; + + for (j = 0; j <= lastKeysym; j++) { + KeySym ks = keymap[j]; + + if (ks == NoSymbol) + continue; + + if (ks < 256) { + keyCodeToKeymapIndex[i] = ks; + break; + } else if (ks >= 0xff00 && ks < 0xffff) { + keyCodeToKeymapIndex[i] = ks - KEY_MAP_OFFSET; + break; + } + } + keymap += keysyms_per_keycode; + } + XFree(origkeymap); + + setlocale(LC_CTYPE, keyboardLang); +} +#undef KEY_MAP_OFFSET + +void checkKeyPresses() +{ + Display *display = glfwGetX11Display(); + char keys[32]; + XQueryKeymap(display, keys); + for (int i = 0; i < sizeof(keys); i++) { + for (int j = 0; j < 8; j++) { + KeyCode keycode = 8 * i + j; + uint32 keymapIndex = keyCodeToKeymapIndex[keycode]; + if (keymapIndex != 0) { + int rsCode = keymap[keymapIndex]; + if (rsCode == rsNULL) + continue; + + bool pressed = WindowFocused && !!(keys[i] & (1 << j)); + + // idk why R* does that + if (rsCode == rsLSHIFT) + lshiftStatus = pressed; + else if (rsCode == rsRSHIFT) + rshiftStatus = pressed; + + if (keyStates[keymapIndex] != pressed) { + if (pressed) { + RsKeyboardEventHandler(rsKEYDOWN, &rsCode); + } else { + RsKeyboardEventHandler(rsKEYUP, &rsCode); + } + } + + keyStates[keymapIndex] = pressed; + } + } + } + +} +#endif + // R* calls that in ControllerConfig, idk why void _InputTranslateShiftKeyUpDown(RsKeyCodes *rs) { @@ -1492,6 +1777,16 @@ cursorEnterCB(GLFWwindow* window, int entered) { PSGLOBAL(cursorIsInWindow) = !!entered; } +void +windowFocusCB(GLFWwindow* window, int focused) { + WindowFocused = !!focused; +} + +void +windowIconifyCB(GLFWwindow* window, int iconified) { + WindowIconified = !!iconified; +} + /* ***************************************************************************** */ @@ -1744,6 +2039,9 @@ main(int argc, char *argv[]) #endif { glfwPollEvents(); +#ifdef GET_KEYBOARD_INPUT_FROM_X11 + checkKeyPresses(); +#endif #ifndef MASTER if (gbModelViewer) { // This is TheModelViewerCore in LCS @@ -1882,7 +2180,7 @@ main(int argc, char *argv[]) case GS_FRONTEND: { - if(!glfwGetWindowAttrib(PSGLOBAL(window), GLFW_ICONIFIED)) + if(!WindowIconified) RsEventHandler(rsFRONTENDIDLE, nil); #ifdef PS2_MENU diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp index 89c901b2..f251f58d 100644 --- a/src/skel/win/win.cpp +++ b/src/skel/win/win.cpp @@ -915,14 +915,14 @@ void WaitForState(FILTER_STATE State) */ void HandleGraphEvent(void) { - LONG evCode, evParam1, evParam2; + LONG evCode; + LONG_PTR evParam1, evParam2; HRESULT hr=S_OK; ASSERT(pME != nil); // Process all queued events - while (SUCCEEDED(pME->GetEvent(&evCode, (LONG_PTR *)&evParam1, - (LONG_PTR *)&evParam2, 0))) + while (SUCCEEDED(pME->GetEvent(&evCode, &evParam1, &evParam2, 0))) { // Free memory associated with callback, since we're not using it hr = pME->FreeEventParams(evCode, evParam1, evParam2); @@ -1498,7 +1498,7 @@ psSelectDevice() #ifdef DEFAULT_NATIVE_RESOLUTION GcurSelVM = 1; #else - MessageBox(nil, "Cannot find 640x480 video mode", "GTA3", MB_OK); + MessageBox(nil, "Cannot find 640x480 video mode", "GTA: Vice City", MB_OK); return FALSE; #endif } @@ -1541,7 +1541,7 @@ psSelectDevice() } if(bestFsMode < 0){ - MessageBox(nil, "Cannot find desired video mode", "GTA3", MB_OK); + MessageBox(nil, "Cannot find desired video mode", "GTA: Vice City", MB_OK); return FALSE; } GcurSelVM = bestFsMode; @@ -2273,7 +2273,7 @@ WinMain(HINSTANCE instance, case GS_START_UP: { #ifdef NO_MOVIES - gGameState = GS_INIT_ONCE; + gGameState = gbNoMovies ? GS_INIT_ONCE : GS_INIT_LOGO_MPEG; #else gGameState = GS_INIT_LOGO_MPEG; #endif @@ -2314,8 +2314,11 @@ WinMain(HINSTANCE instance, case GS_INIT_INTRO_MPEG: { -#ifndef NO_MOVIES +#ifdef NO_MOVIES + if (!gbNoMovies) +#endif CloseClip(); +#ifndef FIX_BUGS CoUninitialize(); #endif @@ -2353,8 +2356,11 @@ WinMain(HINSTANCE instance, case GS_INIT_ONCE: { -#ifndef NO_MOVIES +#ifdef NO_MOVIES + if (!gbNoMovies) +#endif CloseClip(); +#ifndef FIX_BUGS CoUninitialize(); #endif diff --git a/src/text/Text.cpp b/src/text/Text.cpp index cb5d5e04..75236e1a 100644 --- a/src/text/Text.cpp +++ b/src/text/Text.cpp @@ -259,13 +259,13 @@ CText::LoadMissionText(char *MissionTableName) sprintf(filename, "SPANISH.GXT"); break; #ifdef MORE_LANGUAGES - case LANGUAGE_POLISH: + case CMenuManager::LANGUAGE_POLISH: sprintf(filename, "POLISH.GXT"); break; - case LANGUAGE_RUSSIAN: + case CMenuManager::LANGUAGE_RUSSIAN: sprintf(filename, "RUSSIAN.GXT"); break; - case LANGUAGE_JAPANESE: + case CMenuManager::LANGUAGE_JAPANESE: sprintf(filename, "JAPANESE.GXT"); break; #endif diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp index 06dc1b54..5e2b0c10 100644 --- a/src/vehicles/Automobile.cpp +++ b/src/vehicles/Automobile.cpp @@ -50,6 +50,7 @@ #include "Automobile.h" #include "Bike.h" #include "Wanted.h" +#include "SaveBuf.h" bool bAllCarCheat; @@ -2260,7 +2261,7 @@ CAutomobile::PreRender(void) // 1.0 if directly behind car, -1.0 if in front float behindness = DotProduct(lookVector, GetForward()); - behindness = clamp(behindness, -1.0f, 1.0f); // shouldn't be necessary + behindness = Clamp(behindness, -1.0f, 1.0f); // shouldn't be necessary // 0.0 if behind car, PI if in front // Abs not necessary float angle = Abs(Acos(behindness)); @@ -2618,7 +2619,7 @@ CAutomobile::PreRender(void) float groundOffset = pos.z + m_fHeightAboveRoad - 0.5f*mi->m_wheelScale; if(GetModelIndex() == MI_VOODOO) groundOffset *= 0.6f; - mat.RotateY(Asin(clamp(-groundOffset, -1.0f, 1.0f))); + mat.RotateY(Asin(Clamp(-groundOffset, -1.0f, 1.0f))); } } if(pHandling->Flags & HANDLING_FAT_REARW) @@ -2659,7 +2660,7 @@ CAutomobile::PreRender(void) float groundOffset = pos.z + m_fHeightAboveRoad - 0.5f*mi->m_wheelScale; if(GetModelIndex() == MI_VOODOO) groundOffset *= 0.6f; - mat.RotateY(Asin(clamp(groundOffset, -1.0f, 1.0f))); + mat.RotateY(Asin(Clamp(groundOffset, -1.0f, 1.0f))); } } if(pHandling->Flags & HANDLING_FAT_REARW) @@ -2692,7 +2693,7 @@ CAutomobile::PreRender(void) float groundOffset = pos.z + m_fHeightAboveRoad - 0.5f*mi->m_wheelScale; if(GetModelIndex() == MI_VOODOO) groundOffset *= 0.6f; - mat.RotateY(Asin(clamp(-groundOffset, -1.0f, 1.0f))); + mat.RotateY(Asin(Clamp(-groundOffset, -1.0f, 1.0f))); } } if(pHandling->Flags & HANDLING_FAT_REARW) @@ -2726,7 +2727,7 @@ CAutomobile::PreRender(void) float groundOffset = pos.z + m_fHeightAboveRoad - 0.5f*mi->m_wheelScale; if(GetModelIndex() == MI_VOODOO) groundOffset *= 0.6f; - mat.RotateY(Asin(clamp(groundOffset, -1.0f, 1.0f))); + mat.RotateY(Asin(Clamp(groundOffset, -1.0f, 1.0f))); } } if(pHandling->Flags & HANDLING_FAT_REARW) @@ -2860,7 +2861,7 @@ CAutomobile::PreRender(void) float groundOffset = pos.z + m_fHeightAboveRoad - 0.5f*mi->m_wheelScale; if(GetModelIndex() == MI_VOODOO) groundOffset *= 0.6f; - mat.RotateY(Asin(clamp(-groundOffset, -1.0f, 1.0f))); + mat.RotateY(Asin(Clamp(-groundOffset, -1.0f, 1.0f))); } } if(pHandling->Flags & HANDLING_NARROW_FRONTW) @@ -2901,7 +2902,7 @@ CAutomobile::PreRender(void) float groundOffset = pos.z + m_fHeightAboveRoad - 0.5f*mi->m_wheelScale; if(GetModelIndex() == MI_VOODOO) groundOffset *= 0.6f; - mat.RotateY(Asin(clamp(groundOffset, -1.0f, 1.0f))); + mat.RotateY(Asin(Clamp(groundOffset, -1.0f, 1.0f))); } } if(pHandling->Flags & HANDLING_NARROW_FRONTW) @@ -3119,7 +3120,7 @@ CAutomobile::ProcessControlInputs(uint8 pad) 0.2f*CTimer::GetTimeStep(); nLastControlInput = 0; } - m_fSteerInput = clamp(m_fSteerInput, -1.0f, 1.0f); + m_fSteerInput = Clamp(m_fSteerInput, -1.0f, 1.0f); // Accelerate/Brake float acceleration = (CPad::GetPad(pad)->GetAccelerate() - CPad::GetPad(pad)->GetBrake())/255.0f; @@ -3238,7 +3239,7 @@ CAutomobile::FireTruckControl(void) m_fCarGunLR += CPad::GetPad(0)->GetCarGunLeftRight() * 0.00025f * CTimer::GetTimeStep(); m_fCarGunUD += CPad::GetPad(0)->GetCarGunUpDown() * 0.0001f * CTimer::GetTimeStep(); } - m_fCarGunUD = clamp(m_fCarGunUD, 0.05f, 0.3f); + m_fCarGunUD = Clamp(m_fCarGunUD, 0.05f, 0.3f); CVector cannonPos(0.0f, 1.5f, 1.9f); @@ -3663,7 +3664,7 @@ CAutomobile::HydraulicControl(void) float limitDiff = extendedLowerLimit - normalLowerLimit; if(limitDiff != 0.0f && Abs(maxDelta/limitDiff) > 0.01f){ float f = (maxDelta + limitDiff)/2.0f/limitDiff; - f = clamp(f, 0.0f, 1.0f); + f = Clamp(f, 0.0f, 1.0f); DMAudio.PlayOneShot(m_audioEntityId, SOUND_CAR_HYDRAULIC_3, f); if(f < 0.4f || f > 0.6f) setPrevRatio = true; @@ -4980,7 +4981,7 @@ CAutomobile::GetHeightAboveRoad(void) void CAutomobile::PlayCarHorn(void) { - int r; + uint32 r; if (IsAlarmOn() || m_nCarHornTimer != 0) return; @@ -5869,15 +5870,15 @@ void CAutomobile::Save(uint8*& buf) { CVehicle::Save(buf); - WriteSaveBuf(buf, Damage); - SkipSaveBuf(buf, 1500 - 672 - sizeof(CDamageManager)); + WriteSaveBuf(buf, Damage); + ZeroSaveBuf(buf, 1500 - 672 - sizeof(CDamageManager)); } void CAutomobile::Load(uint8*& buf) { CVehicle::Load(buf); - Damage = ReadSaveBuf(buf); + ReadSaveBuf(&Damage, buf); SkipSaveBuf(buf, 1500 - 672 - sizeof(CDamageManager)); SetupDamageAfterLoad(); } diff --git a/src/vehicles/Bike.cpp b/src/vehicles/Bike.cpp index 3e4c3a31..a65b64d2 100644 --- a/src/vehicles/Bike.cpp +++ b/src/vehicles/Bike.cpp @@ -36,6 +36,7 @@ #include "Automobile.h" #include "Bike.h" #include "Debug.h" +#include "SaveBuf.h" const uint32 CBike::nSaveStructSize = #ifdef COMPATIBLE_SAVES @@ -532,7 +533,7 @@ CBike::ProcessControl(void) m_fWheelAngle += DEGTORAD(1.0f)*CTimer::GetTimeStep(); if(bIsStanding){ float f = Pow(0.97f, CTimer::GetTimeStep()); - m_fLeanLRAngle2 = m_fLeanLRAngle2*f - (Asin(clamp(GetRight().z,-1.0f,1.0f))+DEGTORAD(15.0f))*(1.0f-f); + m_fLeanLRAngle2 = m_fLeanLRAngle2*f - (Asin(Clamp(GetRight().z,-1.0f,1.0f))+DEGTORAD(15.0f))*(1.0f-f); m_fLeanLRAngle = m_fLeanLRAngle2; } }else{ @@ -1027,9 +1028,9 @@ CBike::ProcessControl(void) lean = DotProduct(m_vecMoveSpeed-initialMoveSpeed, m_vecAvgSurfaceRight); lean /= GRAVITY*Max(CTimer::GetTimeStep(), 0.01f); if(m_wheelStatus[BIKEWHEEL_FRONT] == WHEEL_STATUS_BURST) - lean = clamp(lean, -0.4f*pBikeHandling->fMaxLean, 0.4f*pBikeHandling->fMaxLean); + lean = Clamp(lean, -0.4f*pBikeHandling->fMaxLean, 0.4f*pBikeHandling->fMaxLean); else - lean = clamp(lean, -pBikeHandling->fMaxLean, pBikeHandling->fMaxLean); + lean = Clamp(lean, -pBikeHandling->fMaxLean, pBikeHandling->fMaxLean); float f = Pow(pBikeHandling->fDesLean, CTimer::GetTimeStep()); m_fLeanLRAngle2 = (Asin(lean) - idleAngle)*(1.0f-f) + m_fLeanLRAngle2*f; }else{ @@ -1052,11 +1053,11 @@ CBike::ProcessControl(void) if(m_aSuspensionSpringRatio[BIKESUSP_R1] < 1.0f || m_aSuspensionSpringRatio[BIKESUSP_R2] < 1.0f){ // BUG: this clamp makes no sense and the arguments seem swapped too ApplyTurnForce(contactPoints[BIKESUSP_R1], - m_fTurnMass*Sin(m_fBrakeDestabilization)*clamp(fwdSpeed, 0.5f, 0.2f)*0.013f*GetRight()*CTimer::GetTimeStep()); + m_fTurnMass*Sin(m_fBrakeDestabilization)*Clamp(fwdSpeed, 0.5f, 0.2f)*0.013f*GetRight()*CTimer::GetTimeStep()); }else{ // BUG: this clamp makes no sense and the arguments seem swapped too ApplyTurnForce(contactPoints[BIKESUSP_R1], - m_fTurnMass*Sin(m_fBrakeDestabilization)*clamp(fwdSpeed, 0.5f, 0.2f)*0.003f*GetRight()*CTimer::GetTimeStep()); + m_fTurnMass*Sin(m_fBrakeDestabilization)*Clamp(fwdSpeed, 0.5f, 0.2f)*0.003f*GetRight()*CTimer::GetTimeStep()); } }else m_fBrakeDestabilization = 0.0f; @@ -1219,7 +1220,7 @@ CBike::ProcessControl(void) // Balance bike if(bBalancedByRider || bIsBeingPickedUp || bIsStanding){ float onSideness = DotProduct(GetRight(), m_vecAvgSurfaceNormal); - onSideness = clamp(onSideness, -1.0f, 1.0f); + onSideness = Clamp(onSideness, -1.0f, 1.0f); CVector worldCOM = Multiply3x3(GetMatrix(), m_vecCentreOfMass); // Keep bike upright if(bBalancedByRider){ @@ -1839,7 +1840,7 @@ CBike::ProcessControlInputs(uint8 pad) 0.2f*CTimer::GetTimeStep(); nLastControlInput = 0; } - m_fSteerInput = clamp(m_fSteerInput, -1.0f, 1.0f); + m_fSteerInput = Clamp(m_fSteerInput, -1.0f, 1.0f); // Lean forward/backward float updown; @@ -1849,7 +1850,7 @@ CBike::ProcessControlInputs(uint8 pad) #endif updown = -CPad::GetPad(pad)->GetSteeringUpDown()/128.0f + CPad::GetPad(pad)->GetCarGunUpDown()/128.0f; m_fLeanInput += (updown - m_fLeanInput)*0.2f*CTimer::GetTimeStep(); - m_fLeanInput = clamp(m_fLeanInput, -1.0f, 1.0f); + m_fLeanInput = Clamp(m_fLeanInput, -1.0f, 1.0f); // Accelerate/Brake float acceleration = (CPad::GetPad(pad)->GetAccelerate() - CPad::GetPad(pad)->GetBrake())/255.0f; @@ -2546,7 +2547,7 @@ CBike::GetHeightAboveRoad(void) void CBike::PlayCarHorn(void) { - int r; + uint32 r; if (IsAlarmOn() || m_nCarHornTimer != 0) return; @@ -2949,7 +2950,7 @@ void CBike::Save(uint8*& buf) { CVehicle::Save(buf); - SkipSaveBuf(buf, 1260 - 672); + ZeroSaveBuf(buf, 1260 - 672); } void diff --git a/src/vehicles/Boat.cpp b/src/vehicles/Boat.cpp index 0bc653c6..73957107 100644 --- a/src/vehicles/Boat.cpp +++ b/src/vehicles/Boat.cpp @@ -28,6 +28,7 @@ #include "Record.h" #include "Shadows.h" #include "Wanted.h" +#include "SaveBuf.h" #define INVALID_ORIENTATION (-9999.99f) @@ -157,9 +158,9 @@ CBoat::ProcessControl(void) r = 127.5f*(CTimeCycle::GetAmbientRed_Obj() + 0.5f*CTimeCycle::GetDirectionalRed()); g = 127.5f*(CTimeCycle::GetAmbientGreen_Obj() + 0.5f*CTimeCycle::GetDirectionalGreen()); b = 127.5f*(CTimeCycle::GetAmbientBlue_Obj() + 0.5f*CTimeCycle::GetDirectionalBlue()); - r = clamp(r, 0, 255); - g = clamp(g, 0, 255); - b = clamp(b, 0, 255); + r = Clamp(r, 0, 255); + g = Clamp(g, 0, 255); + b = Clamp(b, 0, 255); splashColor.red = r; splashColor.green = g; splashColor.blue = b; @@ -168,9 +169,9 @@ CBoat::ProcessControl(void) r = 229.5f*(CTimeCycle::GetAmbientRed() + 0.85f*CTimeCycle::GetDirectionalRed()); g = 229.5f*(CTimeCycle::GetAmbientGreen() + 0.85f*CTimeCycle::GetDirectionalGreen()); b = 229.5f*(CTimeCycle::GetAmbientBlue() + 0.85f*CTimeCycle::GetDirectionalBlue()); - r = clamp(r, 0, 255); - g = clamp(g, 0, 255); - b = clamp(b, 0, 255); + r = Clamp(r, 0, 255); + g = Clamp(g, 0, 255); + b = Clamp(b, 0, 255); jetColor.red = r; jetColor.green = g; jetColor.blue = b; @@ -386,7 +387,7 @@ CBoat::ProcessControl(void) if(CPad::GetPad(0)->GetHandBrake()) steerLoss *= 0.5f; steerFactor -= steerLoss; - steerFactor = clamp(steerFactor, 0.0f, 1.0f); + steerFactor = Clamp(steerFactor, 0.0f, 1.0f); } CVector boundMin = GetColModel()->boundingBox.min; @@ -770,17 +771,17 @@ CBoat::ProcessControlInputs(uint8 pad) m_nPadID = 3; m_fBrake += (CPad::GetPad(pad)->GetBrake()/255.0f - m_fBrake)*0.1f; - m_fBrake = clamp(m_fBrake, 0.0f, 1.0f); + m_fBrake = Clamp(m_fBrake, 0.0f, 1.0f); if(m_fBrake < 0.05f){ m_fBrake = 0.0f; m_fAccelerate += (CPad::GetPad(pad)->GetAccelerate()/255.0f - m_fAccelerate)*0.1f; - m_fAccelerate = clamp(m_fAccelerate, 0.0f, 1.0f); + m_fAccelerate = Clamp(m_fAccelerate, 0.0f, 1.0f); }else m_fAccelerate = -m_fBrake*0.3f; m_fSteeringLeftRight += (-CPad::GetPad(pad)->GetSteeringLeftRight()/128.0f - m_fSteeringLeftRight)*0.2f; - m_fSteeringLeftRight = clamp(m_fSteeringLeftRight, -1.0f, 1.0f); + m_fSteeringLeftRight = Clamp(m_fSteeringLeftRight, -1.0f, 1.0f); float steeringSq = m_fSteeringLeftRight < 0.0f ? -SQR(m_fSteeringLeftRight) : SQR(m_fSteeringLeftRight); m_fSteerAngle = pHandling->fSteeringLock * DEGTORAD(steeringSq); @@ -1063,7 +1064,7 @@ CBoat::PreRender(void) rot = CGeneral::LimitRadianAngle(rot); if(rot > HALFPI) rot = PI; else if(rot < -HALFPI) rot = -PI; - rot = clamp(rot, -DEGTORAD(63.0f), DEGTORAD(63.0f)); + rot = Clamp(rot, -DEGTORAD(63.0f), DEGTORAD(63.0f)); m_fMovingSpeed += (0.008f * CWeather::Wind + 0.002f) * rot; m_fMovingSpeed *= Pow(0.9985f, CTimer::GetTimeStep())/(500.0f*SQR(m_fMovingSpeed) + 1.0f); @@ -1476,7 +1477,7 @@ void CBoat::Save(uint8*& buf) { CVehicle::Save(buf); - SkipSaveBuf(buf, 1216 - 672); + ZeroSaveBuf(buf, 1216 - 672); } void diff --git a/src/vehicles/CarGen.cpp b/src/vehicles/CarGen.cpp index 78e67d49..29d0c5c7 100644 --- a/src/vehicles/CarGen.cpp +++ b/src/vehicles/CarGen.cpp @@ -17,6 +17,7 @@ #include "World.h" #include "Zones.h" #include "Occlusion.h" +#include "SaveBuf.h" uint8 CTheCarGenerators::ProcessCounter; uint32 CTheCarGenerators::NumOfCarGenerators; @@ -292,14 +293,17 @@ void CTheCarGenerators::LoadAllCarGenerators(uint8* buffer, uint32 size) Init(); INITSAVEBUF CheckSaveHeader(buffer, 'C','G','N','\0', size - SAVE_HEADER_SIZE); - assert(ReadSaveBuf(buffer) == nGeneralDataSize); - NumOfCarGenerators = ReadSaveBuf(buffer); - CurrentActiveCount = ReadSaveBuf(buffer); - ProcessCounter = ReadSaveBuf(buffer); - GenerateEvenIfPlayerIsCloseCounter = ReadSaveBuf(buffer); - ReadSaveBuf(buffer); // alignment - assert(ReadSaveBuf(buffer) == sizeof(CarGeneratorArray)); + uint32 tmp; + ReadSaveBuf(&tmp, buffer); + assert(tmp == nGeneralDataSize); + ReadSaveBuf(&NumOfCarGenerators, buffer); + ReadSaveBuf(&CurrentActiveCount, buffer); + ReadSaveBuf(&ProcessCounter, buffer); + ReadSaveBuf(&GenerateEvenIfPlayerIsCloseCounter, buffer); + SkipSaveBuf(buffer, 2); + ReadSaveBuf(&tmp, buffer); + assert(tmp == sizeof(CarGeneratorArray)); for (int i = 0; i < NUM_CARGENS; i++) - CarGeneratorArray[i] = ReadSaveBuf(buffer); + ReadSaveBuf(&CarGeneratorArray[i], buffer); VALIDATESAVEBUF(size) } diff --git a/src/vehicles/Cranes.cpp b/src/vehicles/Cranes.cpp index b5926867..934ccb08 100644 --- a/src/vehicles/Cranes.cpp +++ b/src/vehicles/Cranes.cpp @@ -11,6 +11,7 @@ #include "Replay.h" #include "Object.h" #include "World.h" +#include "SaveBuf.h" #define MAX_DISTANCE_TO_FIND_CRANE (10.0f) #define CRANE_UPDATE_RADIUS (300.0f) @@ -36,6 +37,12 @@ #define MIN_VALID_POSITION (-10000.0f) #define DEFAULT_OFFSET (20.0f) +#ifdef COMPATIBLE_SAVES +#define CRANES_SAVE_SIZE 0x3E0 +#else +#define CRANES_SAVE_SIZE sizeof(aCranes) +#endif + uint32 TimerForCamInterpolation; uint32 CCranes::CarsCollectedMilitaryCrane; @@ -621,10 +628,45 @@ void CCranes::Save(uint8* buf, uint32* size) { INITSAVEBUF - *size = 2 * sizeof(uint32) + sizeof(aCranes); + *size = 2 * sizeof(uint32) + CRANES_SAVE_SIZE; WriteSaveBuf(buf, NumCranes); WriteSaveBuf(buf, CarsCollectedMilitaryCrane); for (int i = 0; i < NUM_CRANES; i++) { +#ifdef COMPATIBLE_SAVES + int32 tmp = aCranes[i].m_pCraneEntity != nil ? CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(aCranes[i].m_pCraneEntity) + 1 : 0; + WriteSaveBuf(buf, tmp); + tmp = aCranes[i].m_pHook != nil ? CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(aCranes[i].m_pHook) + 1 : 0; + WriteSaveBuf(buf, tmp); + WriteSaveBuf(buf, aCranes[i].m_fPickupX1); + WriteSaveBuf(buf, aCranes[i].m_fPickupX2); + WriteSaveBuf(buf, aCranes[i].m_fPickupY1); + WriteSaveBuf(buf, aCranes[i].m_fPickupY2); + WriteSaveBuf(buf, aCranes[i].m_vecDropoffTarget); + WriteSaveBuf(buf, aCranes[i].m_fDropoffHeading); + WriteSaveBuf(buf, aCranes[i].m_fPickupAngle); + WriteSaveBuf(buf, aCranes[i].m_fDropoffAngle); + WriteSaveBuf(buf, aCranes[i].m_fPickupDistance); + WriteSaveBuf(buf, aCranes[i].m_fDropoffDistance); + WriteSaveBuf(buf, aCranes[i].m_fPickupHeight); + WriteSaveBuf(buf, aCranes[i].m_fDropoffHeight); + WriteSaveBuf(buf, aCranes[i].m_fHookAngle); + WriteSaveBuf(buf, aCranes[i].m_fHookOffset); + WriteSaveBuf(buf, aCranes[i].m_fHookHeight); + WriteSaveBuf(buf, aCranes[i].m_vecHookInitPos); + WriteSaveBuf(buf, aCranes[i].m_vecHookCurPos); + WriteSaveBuf(buf, aCranes[i].m_vecHookVelocity); + tmp = aCranes[i].m_pVehiclePickedUp != nil ? CPools::GetVehiclePool()->GetJustIndex_NoFreeAssert(aCranes[i].m_pVehiclePickedUp) + 1 : 0; + WriteSaveBuf(buf, tmp); + WriteSaveBuf(buf, aCranes[i].m_nTimeForNextCheck); + WriteSaveBuf(buf, aCranes[i].m_nCraneStatus); + WriteSaveBuf(buf, aCranes[i].m_nCraneState); + WriteSaveBuf(buf, aCranes[i].m_nVehiclesCollected); + WriteSaveBuf(buf, aCranes[i].m_bIsCrusher); + WriteSaveBuf(buf, aCranes[i].m_bIsMilitaryCrane); + WriteSaveBuf(buf, aCranes[i].m_bWasMilitaryCrane); + WriteSaveBuf(buf, aCranes[i].m_bIsTop); + ZeroSaveBuf(buf, 1); +#else CCrane *pCrane = WriteSaveBuf(buf, aCranes[i]); if (pCrane->m_pCraneEntity != nil) pCrane->m_pCraneEntity = (CBuilding*)(CPools::GetBuildingPool()->GetJustIndex_NoFreeAssert(pCrane->m_pCraneEntity) + 1); @@ -632,6 +674,7 @@ void CCranes::Save(uint8* buf, uint32* size) pCrane->m_pHook = (CObject*)(CPools::GetObjectPool()->GetJustIndex_NoFreeAssert(pCrane->m_pHook) + 1); if (pCrane->m_pVehiclePickedUp != nil) pCrane->m_pVehiclePickedUp = (CVehicle*)(CPools::GetVehiclePool()->GetJustIndex_NoFreeAssert(pCrane->m_pVehiclePickedUp) + 1); +#endif } VALIDATESAVEBUF(*size); @@ -641,10 +684,47 @@ void CCranes::Load(uint8* buf, uint32 size) { INITSAVEBUF - NumCranes = ReadSaveBuf(buf); - CarsCollectedMilitaryCrane = ReadSaveBuf(buf); - for (int i = 0; i < NUM_CRANES; i++) - aCranes[i] = ReadSaveBuf(buf); + ReadSaveBuf(&NumCranes, buf); + ReadSaveBuf(&CarsCollectedMilitaryCrane, buf); + for (int i = 0; i < NUM_CRANES; i++) { +#ifdef COMPATIBLE_SAVES + int32 tmp; + ReadSaveBuf(&tmp, buf); + aCranes[i].m_pCraneEntity = tmp != 0 ? CPools::GetBuildingPool()->GetSlot(tmp - 1) : nil; + ReadSaveBuf(&tmp, buf); + aCranes[i].m_pHook = tmp != 0 ? CPools::GetObjectPool()->GetSlot(tmp - 1) : nil; + ReadSaveBuf(&aCranes[i].m_fPickupX1, buf); + ReadSaveBuf(&aCranes[i].m_fPickupX2, buf); + ReadSaveBuf(&aCranes[i].m_fPickupY1, buf); + ReadSaveBuf(&aCranes[i].m_fPickupY2, buf); + ReadSaveBuf(&aCranes[i].m_vecDropoffTarget, buf); + ReadSaveBuf(&aCranes[i].m_fDropoffHeading, buf); + ReadSaveBuf(&aCranes[i].m_fPickupAngle, buf); + ReadSaveBuf(&aCranes[i].m_fDropoffAngle, buf); + ReadSaveBuf(&aCranes[i].m_fPickupDistance, buf); + ReadSaveBuf(&aCranes[i].m_fDropoffDistance, buf); + ReadSaveBuf(&aCranes[i].m_fPickupHeight, buf); + ReadSaveBuf(&aCranes[i].m_fDropoffHeight, buf); + ReadSaveBuf(&aCranes[i].m_fHookAngle, buf); + ReadSaveBuf(&aCranes[i].m_fHookOffset, buf); + ReadSaveBuf(&aCranes[i].m_fHookHeight, buf); + ReadSaveBuf(&aCranes[i].m_vecHookInitPos, buf); + ReadSaveBuf(&aCranes[i].m_vecHookCurPos, buf); + ReadSaveBuf(&aCranes[i].m_vecHookVelocity, buf); + ReadSaveBuf(&tmp, buf); + aCranes[i].m_pVehiclePickedUp = tmp != 0 ? CPools::GetVehiclePool()->GetSlot(tmp - 1) : nil; + ReadSaveBuf(&aCranes[i].m_nTimeForNextCheck, buf); + ReadSaveBuf(&aCranes[i].m_nCraneStatus, buf); + ReadSaveBuf(&aCranes[i].m_nCraneState, buf); + ReadSaveBuf(&aCranes[i].m_nVehiclesCollected, buf); + ReadSaveBuf(&aCranes[i].m_bIsCrusher, buf); + ReadSaveBuf(&aCranes[i].m_bIsMilitaryCrane, buf); + ReadSaveBuf(&aCranes[i].m_bWasMilitaryCrane, buf); + ReadSaveBuf(&aCranes[i].m_bIsTop, buf); + SkipSaveBuf(buf, 1); +#else + ReadSaveBuf(&aCranes[i], buf); + } for (int i = 0; i < NUM_CRANES; i++) { CCrane *pCrane = &aCranes[i]; if (pCrane->m_pCraneEntity != nil) @@ -653,6 +733,7 @@ void CCranes::Load(uint8* buf, uint32 size) pCrane->m_pHook = CPools::GetObjectPool()->GetSlot((uintptr)pCrane->m_pHook - 1); if (pCrane->m_pVehiclePickedUp != nil) pCrane->m_pVehiclePickedUp = CPools::GetVehiclePool()->GetSlot((uintptr)pCrane->m_pVehiclePickedUp - 1); +#endif } VALIDATESAVEBUF(size); diff --git a/src/vehicles/Door.cpp b/src/vehicles/Door.cpp index c80965aa..1b3f9e8f 100644 --- a/src/vehicles/Door.cpp +++ b/src/vehicles/Door.cpp @@ -52,11 +52,11 @@ CDoor::Process(CVehicle *vehicle) fSpeedDiff = vecSpeedDiff.y - vecSpeedDiff.x; break; } - fSpeedDiff = clamp(fSpeedDiff, -0.2f, 0.2f); + fSpeedDiff = Clamp(fSpeedDiff, -0.2f, 0.2f); if(Abs(fSpeedDiff) > 0.002f) m_fAngVel += fSpeedDiff; m_fAngVel *= 0.945f; - m_fAngVel = clamp(m_fAngVel, -0.3f, 0.3f); + m_fAngVel = Clamp(m_fAngVel, -0.3f, 0.3f); m_fAngle += m_fAngVel; m_nDoorState = DOORST_SWINGING; diff --git a/src/vehicles/Heli.cpp b/src/vehicles/Heli.cpp index bf14416c..f51c8481 100644 --- a/src/vehicles/Heli.cpp +++ b/src/vehicles/Heli.cpp @@ -260,7 +260,7 @@ CHeli::ProcessControl(void) // Move up if too low if(GetPosition().z - 2.0f < groundZ && m_heliStatus != HELI_STATUS_SHOT_DOWN) m_vecMoveSpeed.z += CTimer::GetTimeStep()*0.01f; - m_vecMoveSpeed.z = clamp(m_vecMoveSpeed.z, -0.3f, 0.3f); + m_vecMoveSpeed.z = Clamp(m_vecMoveSpeed.z, -0.3f, 0.3f); } float fTargetDist = vTargetDist.Magnitude(); diff --git a/src/vehicles/Plane.cpp b/src/vehicles/Plane.cpp index 48f7b8c0..0b40ca7e 100644 --- a/src/vehicles/Plane.cpp +++ b/src/vehicles/Plane.cpp @@ -123,7 +123,7 @@ void CPlane::DeleteRwObject(void) { if(m_rwObject && RwObjectGetType(m_rwObject) == rpATOMIC){ - m_matrix.Detach(); + GetMatrix().Detach(); if(RwObjectGetType(m_rwObject) == rpATOMIC){ // useless check RwFrame *f = RpAtomicGetFrame((RpAtomic*)m_rwObject); RpAtomicDestroy((RpAtomic*)m_rwObject); @@ -567,13 +567,13 @@ CPlane::ProcessControl(void) m_rwObject = CModelInfo::GetModelInfo(mi->m_planeLodId)->CreateInstance(); POP_MEMID(); if(m_rwObject) - m_matrix.AttachRW(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject))); + GetMatrix().AttachRW(RwFrameGetMatrix(RpAtomicGetFrame((RpAtomic*)m_rwObject))); } } }else if(CStreaming::HasModelLoaded(GetModelIndex())){ if(m_rwObject && RwObjectGetType(m_rwObject) == rpATOMIC){ // Get rid of LOD model - m_matrix.Detach(); + GetMatrix().Detach(); if(m_rwObject){ // useless check if(RwObjectGetType(m_rwObject) == rpATOMIC){ // useless check RwFrame *f = RpAtomicGetFrame((RpAtomic*)m_rwObject); diff --git a/src/vehicles/Vehicle.cpp b/src/vehicles/Vehicle.cpp index 4e6c24ef..d7d8cd76 100644 --- a/src/vehicles/Vehicle.cpp +++ b/src/vehicles/Vehicle.cpp @@ -32,6 +32,7 @@ #include "Timecycle.h" #include "Weather.h" #include "Coronas.h" +#include "SaveBuf.h" bool CVehicle::bWheelsOnlyCheat; bool CVehicle::bAllDodosCheat; @@ -50,10 +51,10 @@ bool CVehicle::bDisableRemoteDetonationOnContact; bool CVehicle::m_bDisplayHandlingInfo; #endif -void *CVehicle::operator new(size_t sz) { return CPools::GetVehiclePool()->New(); } -void *CVehicle::operator new(size_t sz, int handle) { return CPools::GetVehiclePool()->New(handle); } -void CVehicle::operator delete(void *p, size_t sz) { CPools::GetVehiclePool()->Delete((CVehicle*)p); } -void CVehicle::operator delete(void *p, int handle) { CPools::GetVehiclePool()->Delete((CVehicle*)p); } +void *CVehicle::operator new(size_t sz) throw() { return CPools::GetVehiclePool()->New(); } +void *CVehicle::operator new(size_t sz, int handle) throw() { return CPools::GetVehiclePool()->New(handle); } +void CVehicle::operator delete(void *p, size_t sz) throw() { CPools::GetVehiclePool()->Delete((CVehicle*)p); } +void CVehicle::operator delete(void *p, int handle) throw() { CPools::GetVehiclePool()->Delete((CVehicle*)p); } #ifdef FIX_BUGS // I think they meant that @@ -151,7 +152,7 @@ CVehicle::CVehicle(uint8 CreatedBy) m_fMapObjectHeightAhead = m_fMapObjectHeightBehind = 0.0f; m_audioEntityId = DMAudio.CreateEntity(AUDIOTYPE_PHYSICAL, this); if(m_audioEntityId >= 0) - DMAudio.SetEntityStatus(m_audioEntityId, true); + DMAudio.SetEntityStatus(m_audioEntityId, TRUE); //m_nRadioStation = CGeneral::GetRandomNumber() % NUM_RADIOS; switch(GetModelIndex()){ case MI_HUNTER: @@ -478,11 +479,11 @@ CVehicle::FlyingControl(eFlightModel flightModel) ApplyMoveForce(GRAVITY * GetUp() * fThrust * m_fMass * CTimer::GetTimeStep()); if (GetUp().z > 0.0f){ - float upRight = clamp(GetRight().z, -flyingHandling->fFormLift, flyingHandling->fFormLift); + float upRight = Clamp(GetRight().z, -flyingHandling->fFormLift, flyingHandling->fFormLift); float upImpulseRight = -upRight * flyingHandling->fAttackLift * m_fTurnMass * CTimer::GetTimeStep(); ApplyTurnForce(upImpulseRight * GetUp(), GetRight()); - float upFwd = clamp(GetForward().z, -flyingHandling->fFormLift, flyingHandling->fFormLift); + float upFwd = Clamp(GetForward().z, -flyingHandling->fFormLift, flyingHandling->fFormLift); float upImpulseFwd = -upFwd * flyingHandling->fAttackLift * m_fTurnMass * CTimer::GetTimeStep(); ApplyTurnForce(upImpulseFwd * GetUp(), GetForward()); }else{ @@ -521,8 +522,8 @@ CVehicle::FlyingControl(eFlightModel flightModel) fPitch = -CPad::GetPad(0)->GetCarGunUpDown() / 128.0f; if (CPad::GetPad(0)->GetHorn()) { fYaw = 0.0f; - fPitch = clamp(flyingHandling->fPitchStab * DotProduct(m_vecMoveSpeed, GetForward()), -200.0f, 1.3f); - fRoll = clamp(flyingHandling->fRollStab * DotProduct(m_vecMoveSpeed, GetRight()), -200.0f, 1.3f); + fPitch = Clamp(flyingHandling->fPitchStab * DotProduct(m_vecMoveSpeed, GetForward()), -200.0f, 1.3f); + fRoll = Clamp(flyingHandling->fRollStab * DotProduct(m_vecMoveSpeed, GetRight()), -200.0f, 1.3f); } ApplyTurnForce(fPitch * GetUp() * flyingHandling->fPitch * m_fTurnMass * CTimer::GetTimeStep(), GetForward()); ApplyTurnForce(fRoll * GetUp() * flyingHandling->fRoll * m_fTurnMass * CTimer::GetTimeStep(), GetRight()); @@ -811,11 +812,12 @@ CVehicle::ProcessWheel(CVector &wheelFwd, CVector &wheelRight, CVector &wheelCon if(contactSpeedRight != 0.0f){ // exert opposing force right = -contactSpeedRight/wheelsOnGround; -#ifdef FIX_BUGS + // BUG? // contactSpeedRight is independent of framerate but right has timestep as a factor // so we probably have to fix this - right *= CTimer::GetTimeStepFix(); -#endif + // fixing this causes jittery cars at 15fps, and causes the car to move backwards slowly at 18fps + // at 19fps, the effects are gone ... + //right *= CTimer::GetTimeStepFix(); if(wheelStatus == WHEEL_STATUS_BURST){ float fwdspeed = Min(contactSpeedFwd, fBurstSpeedMax); @@ -2161,9 +2163,9 @@ CVehicle::HeliDustGenerate(CEntity *heli, float radius, float ground, int rnd) float red = (0.3*CTimeCycle::GetDirectionalRed() + CTimeCycle::GetAmbientRed_Obj())*255.0f/4.0f; float green = (0.3*CTimeCycle::GetDirectionalGreen() + CTimeCycle::GetAmbientGreen_Obj())*255.0f/4.0f; float blue = (0.3*CTimeCycle::GetDirectionalBlue() + CTimeCycle::GetAmbientBlue_Obj())*255.0f/4.0f; - r = clamp(red, 0.0f, 255.0f); - g = clamp(green, 0.0f, 255.0f); - b = clamp(blue, 0.0f, 255.0f); + r = Clamp(red, 0.0f, 255.0f); + g = Clamp(green, 0.0f, 255.0f); + b = Clamp(blue, 0.0f, 255.0f); RwRGBA col1 = { r, g, b, (RwUInt8)CGeneral::GetRandomNumberInRange(8, 32) }; RwRGBA col2 = { 255, 255, 255, 32 }; @@ -2363,42 +2365,42 @@ DestroyVehicleAndDriverAndPassengers(CVehicle* pVehicle) void CVehicle::Save(uint8*& buf) { - SkipSaveBuf(buf, 4); - WriteSaveBuf(buf, GetRight().x); - WriteSaveBuf(buf, GetRight().y); - WriteSaveBuf(buf, GetRight().z); - SkipSaveBuf(buf, 4); - WriteSaveBuf(buf, GetForward().x); - WriteSaveBuf(buf, GetForward().y); - WriteSaveBuf(buf, GetForward().z); - SkipSaveBuf(buf, 4); - WriteSaveBuf(buf, GetUp().x); - WriteSaveBuf(buf, GetUp().y); - WriteSaveBuf(buf, GetUp().z); - SkipSaveBuf(buf, 4); - WriteSaveBuf(buf, GetPosition().x); - WriteSaveBuf(buf, GetPosition().y); - WriteSaveBuf(buf, GetPosition().z); - SkipSaveBuf(buf, 16); + ZeroSaveBuf(buf, 4); + WriteSaveBuf(buf, GetRight().x); + WriteSaveBuf(buf, GetRight().y); + WriteSaveBuf(buf, GetRight().z); + ZeroSaveBuf(buf, 4); + WriteSaveBuf(buf, GetForward().x); + WriteSaveBuf(buf, GetForward().y); + WriteSaveBuf(buf, GetForward().z); + ZeroSaveBuf(buf, 4); + WriteSaveBuf(buf, GetUp().x); + WriteSaveBuf(buf, GetUp().y); + WriteSaveBuf(buf, GetUp().z); + ZeroSaveBuf(buf, 4); + WriteSaveBuf(buf, GetPosition().x); + WriteSaveBuf(buf, GetPosition().y); + WriteSaveBuf(buf, GetPosition().z); + ZeroSaveBuf(buf, 16); SaveEntityFlags(buf); - SkipSaveBuf(buf, 208); + ZeroSaveBuf(buf, 208); AutoPilot.Save(buf); - WriteSaveBuf(buf, m_currentColour1); - WriteSaveBuf(buf, m_currentColour2); - SkipSaveBuf(buf, 2); - WriteSaveBuf(buf, m_nAlarmState); - SkipSaveBuf(buf, 42); - WriteSaveBuf(buf, m_nNumMaxPassengers); - SkipSaveBuf(buf, 3); - WriteSaveBuf(buf, field_1D0[0]); - WriteSaveBuf(buf, field_1D0[1]); - WriteSaveBuf(buf, field_1D0[2]); - WriteSaveBuf(buf, field_1D0[3]); - SkipSaveBuf(buf, 8); - WriteSaveBuf(buf, m_fSteerAngle); - WriteSaveBuf(buf, m_fGasPedal); - WriteSaveBuf(buf, m_fBrakePedal); - WriteSaveBuf(buf, VehicleCreatedBy); + WriteSaveBuf(buf, m_currentColour1); + WriteSaveBuf(buf, m_currentColour2); + ZeroSaveBuf(buf, 2); + WriteSaveBuf(buf, m_nAlarmState); + ZeroSaveBuf(buf, 42); + WriteSaveBuf(buf, m_nNumMaxPassengers); + ZeroSaveBuf(buf, 3); + WriteSaveBuf(buf, field_1D0[0]); + WriteSaveBuf(buf, field_1D0[1]); + WriteSaveBuf(buf, field_1D0[2]); + WriteSaveBuf(buf, field_1D0[3]); + ZeroSaveBuf(buf, 8); + WriteSaveBuf(buf, m_fSteerAngle); + WriteSaveBuf(buf, m_fGasPedal); + WriteSaveBuf(buf, m_fBrakePedal); + WriteSaveBuf(buf, VehicleCreatedBy); uint8 flags = 0; if (bIsLawEnforcer) flags |= BIT(0); if (bIsLocked) flags |= BIT(3); @@ -2406,19 +2408,19 @@ CVehicle::Save(uint8*& buf) if (bIsHandbrakeOn) flags |= BIT(5); if (bLightsOn) flags |= BIT(6); if (bFreebies) flags |= BIT(7); - WriteSaveBuf(buf, flags); - SkipSaveBuf(buf, 10); - WriteSaveBuf(buf, m_fHealth); - WriteSaveBuf(buf, m_nCurrentGear); - SkipSaveBuf(buf, 3); - WriteSaveBuf(buf, m_fChangeGearTime); - SkipSaveBuf(buf, 12); - WriteSaveBuf(buf, m_nTimeOfDeath); - SkipSaveBuf(buf, 2); - WriteSaveBuf(buf, m_nBombTimer); - SkipSaveBuf(buf, 12); - WriteSaveBuf(buf, m_nDoorLock); - SkipSaveBuf(buf, 111); + WriteSaveBuf(buf, flags); + ZeroSaveBuf(buf, 10); + WriteSaveBuf(buf, m_fHealth); + WriteSaveBuf(buf, m_nCurrentGear); + ZeroSaveBuf(buf, 3); + WriteSaveBuf(buf, m_fChangeGearTime); + ZeroSaveBuf(buf, 12); + WriteSaveBuf(buf, m_nTimeOfDeath); + ZeroSaveBuf(buf, 2); + WriteSaveBuf(buf, m_nBombTimer); + ZeroSaveBuf(buf, 12); + WriteSaveBuf(buf, m_nDoorLock); + ZeroSaveBuf(buf, 108); } void @@ -2426,43 +2428,44 @@ CVehicle::Load(uint8*& buf) { CMatrix tmp; SkipSaveBuf(buf, 4); - tmp.GetRight().x = ReadSaveBuf(buf); - tmp.GetRight().y = ReadSaveBuf(buf); - tmp.GetRight().z = ReadSaveBuf(buf); + ReadSaveBuf(&tmp.GetRight().x, buf); + ReadSaveBuf(&tmp.GetRight().y, buf); + ReadSaveBuf(&tmp.GetRight().z, buf); SkipSaveBuf(buf, 4); - tmp.GetForward().x = ReadSaveBuf(buf); - tmp.GetForward().y = ReadSaveBuf(buf); - tmp.GetForward().z = ReadSaveBuf(buf); + ReadSaveBuf(&tmp.GetForward().x, buf); + ReadSaveBuf(&tmp.GetForward().y, buf); + ReadSaveBuf(&tmp.GetForward().z, buf); SkipSaveBuf(buf, 4); - tmp.GetUp().x = ReadSaveBuf(buf); - tmp.GetUp().y = ReadSaveBuf(buf); - tmp.GetUp().z = ReadSaveBuf(buf); + ReadSaveBuf(&tmp.GetUp().x, buf); + ReadSaveBuf(&tmp.GetUp().y, buf); + ReadSaveBuf(&tmp.GetUp().z, buf); SkipSaveBuf(buf, 4); - tmp.GetPosition().x = ReadSaveBuf(buf); - tmp.GetPosition().y = ReadSaveBuf(buf); - tmp.GetPosition().z = ReadSaveBuf(buf); + ReadSaveBuf(&tmp.GetPosition().x, buf); + ReadSaveBuf(&tmp.GetPosition().y, buf); + ReadSaveBuf(&tmp.GetPosition().z, buf); m_matrix = tmp; SkipSaveBuf(buf, 16); LoadEntityFlags(buf); SkipSaveBuf(buf, 208); AutoPilot.Load(buf); - m_currentColour1 = ReadSaveBuf(buf); - m_currentColour2 = ReadSaveBuf(buf); + ReadSaveBuf(&m_currentColour1, buf); + ReadSaveBuf(&m_currentColour2, buf); SkipSaveBuf(buf, 2); - m_nAlarmState = ReadSaveBuf(buf); + ReadSaveBuf(&m_nAlarmState, buf); SkipSaveBuf(buf, 42); - m_nNumMaxPassengers = ReadSaveBuf(buf); + ReadSaveBuf(&m_nNumMaxPassengers, buf); SkipSaveBuf(buf, 3); - field_1D0[0] = ReadSaveBuf(buf); - field_1D0[1] = ReadSaveBuf(buf); - field_1D0[2] = ReadSaveBuf(buf); - field_1D0[3] = ReadSaveBuf(buf); + ReadSaveBuf(&field_1D0[0], buf); + ReadSaveBuf(&field_1D0[1], buf); + ReadSaveBuf(&field_1D0[2], buf); + ReadSaveBuf(&field_1D0[3], buf); SkipSaveBuf(buf, 8); - m_fSteerAngle = ReadSaveBuf(buf); - m_fGasPedal = ReadSaveBuf(buf); - m_fBrakePedal = ReadSaveBuf(buf); - VehicleCreatedBy = ReadSaveBuf(buf); - uint8 flags = ReadSaveBuf(buf); + ReadSaveBuf(&m_fSteerAngle, buf); + ReadSaveBuf(&m_fGasPedal, buf); + ReadSaveBuf(&m_fBrakePedal, buf); + ReadSaveBuf(&VehicleCreatedBy, buf); + uint8 flags; + ReadSaveBuf(&flags, buf); bIsLawEnforcer = !!(flags & BIT(0)); bIsLocked = !!(flags & BIT(3)); bEngineOn = !!(flags & BIT(4)); @@ -2470,17 +2473,17 @@ CVehicle::Load(uint8*& buf) bLightsOn = !!(flags & BIT(6)); bFreebies = !!(flags & BIT(7)); SkipSaveBuf(buf, 10); - m_fHealth = ReadSaveBuf(buf); - m_nCurrentGear = ReadSaveBuf(buf); + ReadSaveBuf(&m_fHealth, buf); + ReadSaveBuf(&m_nCurrentGear, buf); SkipSaveBuf(buf, 3); - m_fChangeGearTime = ReadSaveBuf(buf); + ReadSaveBuf(&m_fChangeGearTime, buf); SkipSaveBuf(buf, 12); - m_nTimeOfDeath = ReadSaveBuf(buf); + ReadSaveBuf(&m_nTimeOfDeath, buf); SkipSaveBuf(buf, 2); - m_nBombTimer = ReadSaveBuf(buf); + ReadSaveBuf(&m_nBombTimer, buf); SkipSaveBuf(buf, 12); - m_nDoorLock = (eCarLock)ReadSaveBuf(buf); - SkipSaveBuf(buf, 111); + ReadSaveBuf(&m_nDoorLock, buf); + SkipSaveBuf(buf, 108); } #endif diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h index 2fb2caf4..31b52138 100644 --- a/src/vehicles/Vehicle.h +++ b/src/vehicles/Vehicle.h @@ -276,12 +276,12 @@ public: int8 m_comedyControlState; CStoredCollPoly m_aCollPolys[2]; // poly which is under front/rear part of car float m_fSteerInput; - uint8 m_vehType; + eVehicleType m_vehType; - static void *operator new(size_t); - static void *operator new(size_t sz, int slot); - static void operator delete(void*, size_t); - static void operator delete(void*, int); + static void *operator new(size_t) throw(); + static void *operator new(size_t sz, int slot) throw(); + static void operator delete(void*, size_t) throw(); + static void operator delete(void*, int) throw(); CVehicle(void) {} // FAKE CVehicle(uint8 CreatedBy); diff --git a/src/weapons/Explosion.cpp b/src/weapons/Explosion.cpp index 74137dc0..078f01fa 100644 --- a/src/weapons/Explosion.cpp +++ b/src/weapons/Explosion.cpp @@ -37,7 +37,7 @@ CExplosion::Initialise() ClearAllExplosions(); AudioHandle = DMAudio.CreateEntity(AUDIOTYPE_EXPLOSION, (void*)1); if (AudioHandle >= 0) - DMAudio.SetEntityStatus(AudioHandle, true); + DMAudio.SetEntityStatus(AudioHandle, TRUE); debug("CExplosion ready\n"); } diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp index 7a54941f..36303c2c 100644 --- a/src/weapons/Weapon.cpp +++ b/src/weapons/Weapon.cpp @@ -35,6 +35,7 @@ #include "Glass.h" #include "Sprite.h" #include "Pickups.h" +#include "SaveBuf.h" float fReloadAnimSampleFraction[5] = { 0.5f, 0.7f, 0.75f, 0.75f, 0.7f }; float fSeaSparrowAimingAngle = 10.0f; @@ -251,7 +252,7 @@ CWeapon::Fire(CEntity *shooter, CVector *fireSource) else if ( shooter->IsPed() && ((CPed*)shooter)->m_pSeekTarget != nil ) { float distToTarget = (shooter->GetPosition() - ((CPed*)shooter)->m_pSeekTarget->GetPosition()).Magnitude(); - float power = clamp((distToTarget-10.0f)*0.02f, 0.2f, 1.0f); + float power = Clamp((distToTarget-10.0f)*0.02f, 0.2f, 1.0f); fired = FireProjectile(shooter, source, power); } @@ -1066,7 +1067,11 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource) if ( info->m_nFiringRate >= 50 || !(++counter & 1) ) { +#ifdef FIX_BUGS + AddGunFlashBigGuns(*fireSource, target); +#else AddGunFlashBigGuns(*fireSource, *fireSource + target); +#endif CVector gunshellPos = *fireSource; gunshellPos -= CVector(0.65f*ahead.x, 0.65f*ahead.y, 0.0f); @@ -3280,7 +3285,7 @@ CWeapon::Save(uint8*& buf) CopyToBuf(buf, m_nAmmoTotal); CopyToBuf(buf, m_nTimer); CopyToBuf(buf, m_bAddRotOffset); - SkipSaveBuf(buf, 3); + ZeroSaveBuf(buf, 3); } void diff --git a/src/weapons/WeaponEffects.cpp b/src/weapons/WeaponEffects.cpp index b0df610f..bb95ea85 100644 --- a/src/weapons/WeaponEffects.cpp +++ b/src/weapons/WeaponEffects.cpp @@ -1,5 +1,6 @@ #include "common.h" +#include "main.h" #include "WeaponEffects.h" #include "TxdStore.h" #include "Sprite.h" @@ -103,6 +104,8 @@ CWeaponEffects::Render(void) float w, h; if ( CSprite::CalcScreenCoors(gCrossHair.m_vecPos, &pos, &w, &h, true) ) { + PUSH_RENDERGROUP("CWeaponEffects::Render"); + float recipz = 1.0f / pos.z; CSprite::RenderOneXLUSprite_Rotate_Aspect(pos.x, pos.y, pos.z, w, h, @@ -119,6 +122,8 @@ CWeaponEffects::Render(void) gCrossHair.m_fRotation += 0.02f; if ( gCrossHair.m_fRotation > TWOPI ) gCrossHair.m_fRotation = 0.0; + + POP_RENDERGROUP(); } RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void *)FALSE); diff --git a/utils/gxt/american.txt b/utils/gxt/american.txt index 2507d388..66d74238 100644 --- a/utils/gxt/american.txt +++ b/utils/gxt/american.txt @@ -14423,6 +14423,12 @@ GAMEPAD SETTINGS [FEM_AUT] { aspect ratio related } AUTO +[FEM_PED] +PED DENSITY + +[FEM_CAR] +CAR DENSITY + { end of file } [DUMMY] THIS LABEL NEEDS TO BE HERE !!! diff --git a/utils/gxt/french.txt b/utils/gxt/french.txt index d5983e95..246600a1 100644 --- a/utils/gxt/french.txt +++ b/utils/gxt/french.txt @@ -14712,6 +14712,12 @@ GAMEPAD SETTINGS [FEM_AUT] { aspect ratio related } AUTO +[FEM_PED] +PED DENSITY + +[FEM_CAR] +CAR DENSITY + [DUMMY] THIS LABEL NEEDS TO BE HERE !!! AS THE LAST LABEL DOES NOT GET COMPILED \ No newline at end of file diff --git a/utils/gxt/german.txt b/utils/gxt/german.txt index f5ff5e24..595d792a 100644 --- a/utils/gxt/german.txt +++ b/utils/gxt/german.txt @@ -15,7 +15,7 @@ AMOKLAUF FEHLGESCHLAGEN!! AMOKLAUF BESTANDEN!! [RAMP_A] -ALLE AMOKLÃUFE BESTANDEN!! +ALLE AMOKLÄUFE BESTANDEN!! [PAGE_01] Dein Job: ~1~ Gang-Mitglieder in 2 Minuten! @@ -108,7 +108,7 @@ Immobilie Pay 'n' Spray [LG_23] -Bekleidungsgeschãft +Bekleidungsgeschäft [LG_24] Tommys Villa @@ -198,7 +198,7 @@ Kaufman-Taxis Die Bootswerft [WANT_L] -Dein Fahndungslevel ist bis auf weiteres aufgehoben. Solltest du ein Verbrechen begehen, wãhrend die Sterne blinken, wird dein volles Fahndungslevel wieder aktiv. +Dein Fahndungslevel ist bis auf weiteres aufgehoben. Solltest du ein Verbrechen begehen, während die Sterne blinken, wird dein volles Fahndungslevel wieder aktiv. [PICK1] Kugelsichere Weste im Ocean View Hotel angeliefert! @@ -240,7 +240,7 @@ Ziel ~g~Hey! Zurück ins Auto!! [HEY] -~g~Keine Alleingãnge. Halt die Gang beisammen! +~g~Keine Alleingänge. Halt die Gang beisammen! [HELP3] Du kannst nur kurze Zeit sprinten, ohne müde zu werden. @@ -252,10 +252,10 @@ Drücke den~h~ rechten Analog-Stick nach oben, um zu ~h~beschleunigen. Zieh den ~h~rechten Analog-Stick~w~ zurück, um zu ~h~bremsen~w~, oder um ~h~zurückzusetzen~w~, wenn das Fahrzeug steht. [HELP7_A] -Halte die~h~ ~k~~PED_LOCK_TARGET~ ~w~gedrückt, um mit dem Prãzisionsgewehr zu zielen. +Halte die~h~ ~k~~PED_LOCK_TARGET~ ~w~gedrückt, um mit dem Präzisionsgewehr zu zielen. [HELP7_D] -Halte die~h~ ~k~~PED_LOCK_TARGET~ ~w~gedrückt, um mit dem Prãzisionsgewehr zu zielen. +Halte die~h~ ~k~~PED_LOCK_TARGET~ ~w~gedrückt, um mit dem Präzisionsgewehr zu zielen. [HELP10] Dieser Stern zeigt an, dass du von der Polizei gesucht wirst. @@ -354,7 +354,7 @@ drei... Steigt dein ~h~Fahndungslevel~w~, wirst du von besser ausgebildeten Polizisten gejagt. [WANT_G] -Wirst du ~h~verhaftet~w~, wirst du zum nãchsten Polizeirevier gebracht. +Wirst du ~h~verhaftet~w~, wirst du zum nächsten Polizeirevier gebracht. [WANT_H] Die Cops werden dir alle Waffen abnehmen und kassieren ein wenig Bestechungsgeld von dir. @@ -369,16 +369,16 @@ Im Verlauf des Spiels wirst du Möglichkeiten entdecken, deinen Fahndungslevel z Wenn du in einem Wagen sitzt, werden ~h~LACKIEREREIEN~w~ den Fahndungslevel ~h~annullieren. [HEAL_B] -Wenn du ~h~'außer Gefecht'~w~ bist, wirst du zur nãchsten Klinik gebracht. +Wenn du ~h~'außer Gefecht'~w~ bist, wirst du zur nächsten Klinik gebracht. [HEAL_C] -Du verlierst alle Waffen, und die Ãrzte knöpfen dir ein wenig Cash für die Behandlung ab. +Du verlierst alle Waffen, und die Ärzte knöpfen dir ein wenig Cash für die Behandlung ab. [HEAL_E] -Je lãnger du spielst, desto mehr Wege wirst du finden, dich selbst zu verarzten oder zu schützen. +Je länger du spielst, desto mehr Wege wirst du finden, dich selbst zu verarzten oder zu schützen. [SAVE1] -Stell dich in die Markierung. So kannst du dein ~h~Spiel speichern~w~. Wãhrend einer Mission kannst du nicht speichern. +Stell dich in die Markierung. So kannst du dein ~h~Spiel speichern~w~. Während einer Mission kannst du nicht speichern. [SAVE2] Jedes Fahrzeug, das in dieser Garage abgestellt wird, wird für dich aufbewahrt, wenn das Spiel gespeichert wird. @@ -393,7 +393,7 @@ ZEIT: Du hast nicht genug Cash für dieses Objekt. [PROP_2] -Wãhrend einer Mission kannst du keine Objekte kaufen. +Während einer Mission kannst du keine Objekte kaufen. [IND_ZON] Vice City Beach @@ -465,7 +465,7 @@ MP Kruger [SNIPE] -Prãzisionsgewehr +Präzisionsgewehr [GRENADE] Granaten @@ -477,16 +477,16 @@ Schrotflinte S.P.A.S. 12 [SHOTGN3] -Abgesãgte Schrotflinte +Abgesägte Schrotflinte [ARMOUR] Kugelsichere Weste [LASER] -.308 Prãzisionsgewehr +.308 Präzisionsgewehr [BASEBAT] -Baseballschlãger +Baseballschläger [HAMMER] Hammer @@ -507,7 +507,7 @@ Messer Katana [CHAINSA] -Kettensãge +Kettensäge [G_COST] $~1~ @@ -558,7 +558,7 @@ Die Geschworenen Aufruhr [COL_1] -Der Verrãter +Der Verräter [COL_2] Kugelhagel im Einkaufszentrum @@ -654,7 +654,7 @@ Eiscreme und andere Leckereien Schlagende Argumente [TEX_2] -Das Begrãbnis +Das Begräbnis [TEX_3] Schutt und Asche @@ -726,7 +726,7 @@ Gefeuert! Drücke die ~h~~k~~PED_ANSWER_PHONE~~w~, um den Anruf auf deinem Handy entgegenzunehmen. [MOB_01A] -Hey, mein Alter! Paul hier. Ich hãtte da vielleicht was für dich, aber das müssen wir unter vier Augen besprechen. +Hey, mein Alter! Paul hier. Ich hätte da vielleicht was für dich, aber das müssen wir unter vier Augen besprechen. [MOB_01B] Ich bin im Malibu und lass es mir gutgehen. @@ -741,7 +741,7 @@ Hey! Hallo, Tommy? Tommy! In der Druckerei ist irgendwas im Busch. Fahr mal rüber und kümmere dich darum. [MOB_02C] -Es scheint ziemlichen Ãrger zu geben. Ich muss Schluss machen. +Es scheint ziemlichen Ärger zu geben. Ich muss Schluss machen. [MOB_03A] Mr. Vercetti? Ich habe hier einen unterschriebenen Wisch, @@ -768,7 +768,7 @@ Wie geht's, mein Alter? Ich hab vergessen, dir zu sagen, dass wir für das Konzert noch ein paar Ordner brauchen. [MOB_04C] -Da gibt's so 'ne Biker-Gang, die wãr super für die Publicity. +Da gibt's so 'ne Biker-Gang, die wär super für die Publicity. [MOB_04D] Wenn du mir das arrangierst, besorg ich dir 'n VIP-Pass für den Abend. Ok? @@ -795,7 +795,7 @@ Wenn du willst, kocht Tante Poulet dir ein leckeres Süppchen, dann kannst du ma Komm doch die Tage mal bei mir vorbei, ok, Tommy? [MOB_08A] -Tommy, ich dachte mir, du könntest meinen Rat als Geschãftsmann brauchen. +Tommy, ich dachte mir, du könntest meinen Rat als Geschäftsmann brauchen. [MOB_08B] Wenn du ein Unternehmen am Laufen hast, musst du einmal pro Woche die Einnahmen kassieren gehen. @@ -813,7 +813,7 @@ Ok, ok. Ich weiß ja, dass du Bescheid weißt. Ich meinte ja nur, damit du weißt, dass ich im Zweifelsfall auch Bescheid weiß. [MOB_08G] -Nur für alle Fãlle, mein Alter! +Nur für alle Fälle, mein Alter! [MOB_08H] Wenn du meinst, Ken... @@ -825,7 +825,7 @@ Hey, Leo! Ich hab Arbeit für dich! Hier ist nicht Leo. [MOB_09C] -Hey, wenn Leo erfãhrt, dass du mit seinem Handy telefonierst, bist du fãllig. +Hey, wenn Leo erfährt, dass du mit seinem Handy telefonierst, bist du fällig. [MOB_09E] Du hast Leo erledigt? Du musst Mumm haben - willst du für mich arbeiten? @@ -840,7 +840,7 @@ Tommy! Du musst mir einen Gefallen tun. Steve! Was machen die Dreharbeiten? [MOB_10C] -Gut. Ich- ãh, WIR brauchen noch eine Autoverfolgungsjagd, aber unser Budget ist knapp. +Gut. Ich- äh, WIR brauchen noch eine Autoverfolgungsjagd, aber unser Budget ist knapp. [MOB_10D] Ich hab in der Stadt verteilt ein paar Karren stehen. Du weißt, was zu tun ist. @@ -867,10 +867,10 @@ Also, halt die Augen offen, dann könnte sich dir die ideale Gelegenheit bieten. Ciao, Avery. [MOB12_A] -Hey, Tommy. Avery hier. Hör mal, ich hab gerade alle Hãnde voll zu tun, +Hey, Tommy. Avery hier. Hör mal, ich hab gerade alle Hände voll zu tun, [MOB12_B] -und ein Bevollmãchtigter von mir müsste zu den Gator Keys eskortiert werden. +und ein Bevollmächtigter von mir müsste zu den Gator Keys eskortiert werden. [MOB12_C] Ich will da ein Stück Land kaufen und schick ihn hin, um den Deal abzuschließen. @@ -903,7 +903,7 @@ Tja, war nett, mit Ihnen zu plaudern... WARTEN SIE! Vercetti - Tommy, kann ich Tommy zu Ihnen sagen? [MOB13_F] -Wir sind beide Geschãftsleute. Sie erkennen doch ein gutes Geschãft sofort, oder? +Wir sind beide Geschäftsleute. Sie erkennen doch ein gutes Geschäft sofort, oder? [MOB13_G] Ich hab keine Zeit für Palaver. Kommen Sie zum Punkt. @@ -957,7 +957,7 @@ würdest du dich sicher verpflichtet fühlen, mir 'n Stück davon abzugeben? Ich werd dich nicht vergessen. Danke, Kent. [MOB_14H] -'Paul'heiße ich, Scherzkeks. Ich KOMME aus Kent, Nãhe London. +'Paul'heiße ich, Scherzkeks. Ich KOMME aus Kent, Nähe London. [MOB_14I] Mein geographisches Wissen über England ist eben nicht mehr, was es war. @@ -990,7 +990,7 @@ Sehr witzig. Du weißt, dass ich mit getürkter Ware nichts am Hut habe. Wollte nur hören, ob ich nicht 'ne Rolle in einem von deinen Filmen kriegen könnte. [MOB16_E] -In England habe ich viel einschlãgiges Zeug gedreht. +In England habe ich viel einschlägiges Zeug gedreht. [MOB16_F] Ich hab mehr zu bieten als du, mein Alter. @@ -999,7 +999,7 @@ Ich hab mehr zu bieten als du, mein Alter. Paul, danke für das Angebot. Ich komm auf dich zurück. [MOB16_H] -Lass mich nicht hãngen. Denk dran, was ich alles für dich getan habe. +Lass mich nicht hängen. Denk dran, was ich alles für dich getan habe. [MOB16_I] Das versuch ich ja grade zu vergessen. @@ -1008,7 +1008,7 @@ Das versuch ich ja grade zu vergessen. Tommy Vercetti. Wie geht's, großer Meister? [MOB17_B] -Man hört so einiges über dich. Bist jetzt 'ne große Nummer in der Stadt, hã? +Man hört so einiges über dich. Bist jetzt 'ne große Nummer in der Stadt, hä? [MOB17_C] Paul, du bist betrunken. @@ -1026,10 +1026,10 @@ Und du brauchst mich nicht dumm anzureden. Ich bin nicht irgendwer. Wer hat dir denn in dieser Stadt den Weg geebnet? Ich! [MOB17_H] -Tatsãchlich? +Tatsächlich? [MOB17_I] -Tatsãchlich! +Tatsächlich! [MOB17_J] Paul, reg dich ab. Ich hatte viel zu tun. Sei kein Idiot. @@ -1038,7 +1038,7 @@ Paul, reg dich ab. Ich hatte viel zu tun. Sei kein Idiot. Ich bin kein Idiot. Das haben sie schon im Jugendknast gesagt. [MOB17_L] -Wenn du Ãrger haben willst, Freundchen, den kannst du haben! +Wenn du Ärger haben willst, Freundchen, den kannst du haben! [MOB17_M] Tommy, bitte! Du warst meine große Hoffnung. Bitte, mach dich nicht lustig über mich! @@ -1056,16 +1056,16 @@ Echt der Hammer. Du glaubst nicht, was mir für 'ne Puppe über den Weg gelaufen 'ne Bordsteinschwalbe, oder sowas. Unten in Little Havana. [MOB18_D] -Sagt, sie heißt Mercedes oder so ãhnlich. Wahnsinn, Alter. Die Puppe musst du dir geben. +Sagt, sie heißt Mercedes oder so ähnlich. Wahnsinn, Alter. Die Puppe musst du dir geben. [MOB18_E] -Da würde 'nen Toter Hormonkoller kriegen. Sie sagt, ich wãr der beste, den sie je hatte. +Da würde 'nen Toter Hormonkoller kriegen. Sie sagt, ich wär der beste, den sie je hatte. [MOB18_F] Halt die Augen nach ihr offen. Bis dann. [MOB19_A] -Tommy, hier KP - Kent Paul. Ich hab lãuten hören, dass jemand dich leimen will. +Tommy, hier KP - Kent Paul. Ich hab läuten hören, dass jemand dich leimen will. [MOB19_B] Also, sei wachsam, mein Freund. Und kein Sterbenswörtchen, dass du das von mir weißt. @@ -1077,7 +1077,7 @@ Hallo, Tommy. Hier Paul. Ich höre, dass du ein paar Leuten auf den Schlips getr Irgendjemand sieht es anscheinend nicht gern, dass du auf einmal den großen Zampano spielst. [MOB_20C] -Also, sag nicht, ich hãtte dich nicht gewarnt. Es rãcht sich, wenn man's übertreibt. +Also, sag nicht, ich hätte dich nicht gewarnt. Es rächt sich, wenn man's übertreibt. [MOB_20D] Jedenfalls ist angeblich ein Kopfgeld auf dich ausgesetzt und es ist schon jemand hinter dir her. @@ -1125,19 +1125,19 @@ sagen Sie mir nur eins, Tommy. Ist das wahr? Ist was wahr? [MOB71_N] -Die Geschichten, die ich höre? Will sie wirklich Anwãltin werden? +Die Geschichten, die ich höre? Will sie wirklich Anwältin werden? [MOB71_O] -Welche Schande, Tommy. Wir Cortez sind eine stolze Familie und würden nie einer Tochter erlauben, Anwãltin zu werden. +Welche Schande, Tommy. Wir Cortez sind eine stolze Familie und würden nie einer Tochter erlauben, Anwältin zu werden. [MOB71_P] Sagen Sie mir, dass es nicht wahr ist. Das ertrage ich nicht. [MOB71_Q] -Colonel, ich versichere Ihnen, dass Mercedes niemals Anwãltin wird. Keine Angst. +Colonel, ich versichere Ihnen, dass Mercedes niemals Anwältin wird. Keine Angst. [MOB71_R] -Danke, Tommy - das wãre zu viel der Schande. Sie ist eine Dame, keine Schmarotzerin. +Danke, Tommy - das wäre zu viel der Schande. Sie ist eine Dame, keine Schmarotzerin. [MOB71_S] Ich weiß, Colonel @@ -1164,10 +1164,10 @@ Sie haben mein Wort darauf. Einstweilen möchte ich Ihnen den Dank meines Volkes aussprechen, für das Sie so viel getan haben. [MOB_25A] -Tommy, hier Cortez. Die Franzosen machen mir Ãrger. Und wie. +Tommy, hier Cortez. Die Franzosen machen mir Ärger. Und wie. [MOB_25B] -Verdammte Heuchler! Jahrhundertelang beuten sie arme Lãnder aus und mich schimpfen sie einen Dieb! +Verdammte Heuchler! Jahrhundertelang beuten sie arme Länder aus und mich schimpfen sie einen Dieb! [MOB_25C] Ich brauche dingend Ihre Hilfe. @@ -1197,7 +1197,7 @@ Hallo? Spreche ich mit Mr. Tommy Vercetti? Ja. [MOB_29C] -Ich hab mir sagen lassen, du wãrst der richtige Mann, wenn man Kroppzeug am Hals hat. +Ich hab mir sagen lassen, du wärst der richtige Mann, wenn man Kroppzeug am Hals hat. [MOB_29D] Vielleicht... @@ -1206,10 +1206,10 @@ Vielleicht... Tja, ich hab 'ne regelrechte Plage am Hals. Haitianer, überall. [MOB_29F] -Mein Name ist Umberto Robina und es wãr mir recht, wenn du baldmöglichst ins Café Robina kãmst. +Mein Name ist Umberto Robina und es wär mir recht, wenn du baldmöglichst ins Café Robina kämst. [MOB_29G] -Diesmal haben's die Haitianer nãmlich zu weit getrieben. +Diesmal haben's die Haitianer nämlich zu weit getrieben. [MOB_29H] Test @@ -1218,10 +1218,10 @@ Test Tommy, hier Umberto Robina. [MOB_30B] -Wie lãuft das Café? +Wie läuft das Café? [MOB_30C] -Oh, bestens. Sagenhaft, Tommy, sagenhaft. Keine Memmen, Tommy, nur echte Mãnner. Und wunderschöne Frauen! +Oh, bestens. Sagenhaft, Tommy, sagenhaft. Keine Memmen, Tommy, nur echte Männer. Und wunderschöne Frauen! [MOB_30D] Ich wollte nur sagen, für mich und Paps bist du jetzt einer von uns. Ein Kubaner. @@ -1260,7 +1260,7 @@ Und ich kann dir bestimmt irgendwann helfen, ok? Tommy, die Wunde verheilt gut. Ist nur komisch: [MOB_35B] -da hab ich auf 6 Schlachtfeldern gekãmpft und nie 'n Kratzer abgekriegt und dann das! +da hab ich auf 6 Schlachtfeldern gekämpft und nie 'n Kratzer abgekriegt und dann das! [MOB_35C] Jetzt bin ich der einarmige Phil. Hab aber 'n gutes Arsenal an Handfeuerwaffen, also bin ich auch mit Arm ab nicht arm dran. @@ -1278,10 +1278,10 @@ Verdammte Vietnamesen. Wo du hinschaust ein Hinterhalt. Die Wunde heilt gut. Und jetzt kassiere ich meine Versehrtenrente endlich völlig zurecht. Danke, Kumpel. [MOB_40A] -Hey, Tommy, hier Sonny. Was macht die Sonnenbrãune? +Hey, Tommy, hier Sonny. Was macht die Sonnenbräune? [MOB_40B] -Ich hab keine Sonnenbrãune. +Ich hab keine Sonnenbräune. [MOB_40C] Naja, mein Geld hast du jedenfalls auch nicht. Daher frag ich mich, @@ -1296,10 +1296,10 @@ Ich bin auf der Suche nach deinem Geld, Sonny. Keine Sorge. Ich mach mir aber Sorgen, Tommy, ich kann nicht anders. [MOB_40G] -Ich hab nãmlich anscheinend mit zu viel unzuverlãssigen Menschen zu tun. +Ich hab nämlich anscheinend mit zu viel unzuverlässigen Menschen zu tun. [MOB_40H] -Sei du bitte kein unzuverlãssiger Mensch, Tommy. +Sei du bitte kein unzuverlässiger Mensch, Tommy. [MOB_40I] Tu dir und mir einen Gefallen. Ich freu mich, von dir zu hören. @@ -1317,16 +1317,16 @@ Ja genau, Sonny. Wir sind doch alte Freunde, aber du schreibst nie, rufst nie an. Willst du denn nicht mehr mein Freund sein? [MOB_41E] -Ich hab alle Hãnde voll zu tun, die Sache zu regeln. Und du bist auch keine große Hilfe. +Ich hab alle Hände voll zu tun, die Sache zu regeln. Und du bist auch keine große Hilfe. [MOB_41F] Ach, ich bin also schuld? Ja, ich hab gehört, dass du zu tun hast... [MOB_41G] -Musst Drogenbarone erledigen, ihre Geschãfte übernehmen. +Musst Drogenbarone erledigen, ihre Geschäfte übernehmen. [MOB_41H] -Vergiss mich nicht, Tommy. Ich verspreche dir nãmlich, dass ich dich nicht vergesse... +Vergiss mich nicht, Tommy. Ich verspreche dir nämlich, dass ich dich nicht vergesse... [MOB_42A] Tommy. @@ -1338,13 +1338,13 @@ Sonny. Anscheinend hörst du neuerdings schlecht, deshalb frag ich dich jetzt nochmal: [MOB_42D] -Tommy, wo ist die verdammte Kohle? Wo ist der verdammte Stoff und wo ist mein Anteil an deinem neuen Geschãft? +Tommy, wo ist die verdammte Kohle? Wo ist der verdammte Stoff und wo ist mein Anteil an deinem neuen Geschäft? [MOB_42E] -Du hãltst mich zum Narren, Tommy, ich find's bloß nicht zum Lachen. +Du hältst mich zum Narren, Tommy, ich find's bloß nicht zum Lachen. [MOB_43A] -Tommy, Tommy, Tommy, Sonny hat gerade angerufen, dãmmert dir was? +Tommy, Tommy, Tommy, Sonny hat gerade angerufen, dämmert dir was? [MOB_43B] Ich weiß nicht, wie das mit dir ist, aber wenn mir jemand droht, dass er meine Familie umbringt, @@ -1365,7 +1365,7 @@ Ken, ich muss mich gerade auf was anderes konzentrieren. Wir kümmern uns zu gegebener Zeit um Forelli. [MOB_43H] -Ich bin ruhig. Hör ich mich nicht ruhig an? Muss die Todesangst sein, die auf die Stimme schlãgt. +Ich bin ruhig. Hör ich mich nicht ruhig an? Muss die Todesangst sein, die auf die Stimme schlägt. [MOB45_A] Tommy, wir müssen miteinander reden. @@ -1437,7 +1437,7 @@ Wir stecken schon viel zu tief drin. Aber danke für den Anruf. Du hörst von mi Tommy - Lance. Wir stecken in der Patsche. Du musst sofort kommen. [MOB52_A] -Hey, Leo, ich glaube, wir haben einen Kãufer für Diaz' Ware. +Hey, Leo, ich glaube, wir haben einen Käufer für Diaz' Ware. [MOB52_B] Du musst ihn anrufen und den Deal in die Wege leiten, ok? @@ -1473,7 +1473,7 @@ Ich hab 'ne neue Wohnung in Vice Point. Vielleicht kommst du mich ja mal besuchen. [MOB54_E] -Klar, gern. Also, bis spãter. +Klar, gern. Also, bis später. [MOB55_A] Tommy, ich bin's. @@ -1539,13 +1539,13 @@ Selber hey, du toller Hecht. Ich bin sauer auf dich, Tommy. Schick mich nie mehr zu diesem Jezz Torrent. [MOB58_E] -So ein Jammerlappen. Mittendrin fãngt er an zu weinen wegen seinem Hündchen, +So ein Jammerlappen. Mittendrin fängt er an zu weinen wegen seinem Hündchen, [MOB58_F] das gestorben ist, als er 7 war, und dass seine Mama ihn nie lieb hatte. [MOB58_G] -Und Tommy - privat lãuft er in Perücke und BH rum. +Und Tommy - privat läuft er in Perücke und BH rum. [MOB58_H] Ich bin nicht gut auf dich zu sprechen! @@ -1587,7 +1587,7 @@ Geh zu der Telefonzelle vor Ort. +~1~ Sekunden [F_RANGE] -~g~Du bist außer Reichweite des Feuerwehrfunks. Fahr nãher an eine Feuerwache heran! +~g~Du bist außer Reichweite des Feuerwehrfunks. Fahr näher an eine Feuerwache heran! [DODO_FT] Du bist ~1~ Sekunden geflogen! @@ -1611,7 +1611,7 @@ Auf dich ist Verlass. Wenn du alle, die auf der Liste stehen, abgeliefert hast, Du hast alle georderten Karren geliefert. Sehr gut. Hier, für dich. [GA_15] -Hoffentlich gefãllt dir die neue Farbe. +Hoffentlich gefällt dir die neue Farbe. [GA_16] Das Umspritzen ist gratis. @@ -1620,7 +1620,7 @@ Das Umspritzen ist gratis. An dem Modell haben wir kein Interesse. [GA_20] -Von der Sorte haben wir schon mehr als genug. Sorry, da kommen wir nicht ins Geschãft. +Von der Sorte haben wir schon mehr als genug. Sorry, da kommen wir nicht ins Geschäft. [CHASE] Größtes Medieninteresse bisher @@ -1767,7 +1767,7 @@ Hupe Fahrzeugsteuerung [FEC_BRA] -Bremsen oder rückwãrts fahren +Bremsen oder rückwärts fahren [FEC_HAB] Handbremse @@ -1896,7 +1896,7 @@ Von dir gemachte Fotos Besuche von Kredithaien [ST_STOR] -Geknackte Lãden +Geknackte Läden [ST_MOVI] Film-Stunts @@ -1905,7 +1905,7 @@ Film-Stunts Gelieferte Pizzas [ST_GARB] -Getãtigte Müllfuhren +Getätigte Müllfuhren [ST_ICEC] Verkaufte Eiscreme @@ -1932,7 +1932,7 @@ Flugstunden Piloten-Rating [ST_RAN0] -Anfãnger +Anfänger [ST_RAN1] Navigator @@ -2037,7 +2037,7 @@ Monster-Stunts geschafft Begonnene Missionen [PASDRO] -Ans Ziel beförderte Fahrgãste +Ans Ziel beförderte Fahrgäste [MONTAX] Mit Taxi verdientes Geld @@ -2085,7 +2085,7 @@ von Geschützsteuerung [FEC_RS3] -Radiosender auswãhlen (L3-Taste) +Radiosender auswählen (L3-Taste) [FEC_HO3] Hupe (L3-Taste) @@ -2094,7 +2094,7 @@ Hupe (L3-Taste) Bürgerwehr-Mission beendet! [C_ESCP] -~r~Der Verdãchtige ist entwischt! +~r~Der Verdächtige ist entwischt! [C_VIGIL] BÃœRGERWEHR BONUS!! @@ -2127,7 +2127,7 @@ Hey, so was heißes rühre ich nicht an! Komm wieder, wenn du nicht so viel zu tun hast... [HELP9_C] -Drücke die~h~ ~k~~PED_FIREWEAPON~~w~, um das Prãzisionsgewehr ~h~abzufeuern~w~. +Drücke die~h~ ~k~~PED_FIREWEAPON~~w~, um das Präzisionsgewehr ~h~abzufeuern~w~. [TAXI2] ~r~Die Zeit ist um! @@ -2136,7 +2136,7 @@ Drücke die~h~ ~k~~PED_FIREWEAPON~~w~, um das Prãzisionsgewehr ~h~abzufeuern~w~ Gesundheits-Powerups in Versteck angeliefert. [PAGEB14] -Adrenalin in Versteck vorrãtig. +Adrenalin in Versteck vorrätig. [FESZ_CA] Abbrechen @@ -2163,7 +2163,7 @@ Wirklich ein neues Spiel beginnen? Alle Daten seit dem letzten Speichern werden 'PCJ Rallye' [BMX_1] -'Krasses Gelãnde' +'Krasses Gelände' [BMX_2] 'Teststrecke' @@ -2559,7 +2559,7 @@ Informant Spitzel [RATNG11] -Verrãter +Verräter [RATNG12] Hochstapler @@ -2574,7 +2574,7 @@ Schieber Falschspieler [RATNG16] -Schlãger +Schläger [RATNG17] Straßengauner @@ -2625,7 +2625,7 @@ Soldat Gorilla [RATNG33] -Kopfgeldjãger +Kopfgeldjäger [RATNG34] Mann fürs Grobe @@ -2634,7 +2634,7 @@ Mann fürs Grobe Ronin [RATNG36] -Abrãumer +Abräumer [RATNG37] Hit-Man @@ -2649,7 +2649,7 @@ Butcher Troubleshooter [RATNG41] -Attentãter +Attentäter [RATNG42] Adjutant @@ -4077,10 +4077,10 @@ Wenn zu Fuß unterwegs, drücke die ~h~~k~~PED_LOOKBEHIND~~w~, um ~h~nach hinten Nach hinten sehen (R3-Taste) [PERPIC] -Versteckte Pãckchen gefunden +Versteckte Päckchen gefunden [CO_ONE] -Verstecktes Pãckchen ~1~ von ~1~ +Verstecktes Päckchen ~1~ von ~1~ [GA_21] In dieser Garage bringst du keine Autos mehr unter. @@ -4116,7 +4116,7 @@ Jan Feb [MAR] -Mãr +Mär [APR] Apr @@ -4173,7 +4173,7 @@ In Fahrzeug ein- und aussteigen. 'FEUERWEHRMANN' [AMBUL_M] -'SANITÃTER' +'SANITÄTER' [HJ_IS] IRRSINNS-STUNT-BONUS: $~1~ @@ -4218,7 +4218,7 @@ DIE ANWALTSMISSIONEN ~g~Besorge dir neue Sachen in Rafaels Shop. [LAW4_6] -Nieder mit der Geschãftsleitung! +Nieder mit der Geschäftsleitung! [LAW4_7] Tod den Bossen! @@ -4263,7 +4263,7 @@ Mist! Willst du mich umbringen?! ~g~Begib dich zum Ãœbergabeort und pass auf Diaz auf. [GEN3_32] -~g~Begib dich zu deinem Beobachtungsposten auf dem Dach des Gebãudes gegenüber von Lance. +~g~Begib dich zu deinem Beobachtungsposten auf dem Dach des Gebäudes gegenüber von Lance. [COKE] DIE KOKS-BARON-MISSIONEN @@ -4470,10 +4470,10 @@ ZEIT: ~g~Du kannst immer nur 1 Bombe transportieren und kannst erfolgreich platzierten Bomben nicht wieder aufnehmen. [SEG3_7] -~g~Sobald du die ERSTE Bombe platziert hast, lãuft der Timer des Zeitzünders an. Du musst dann alle Bomben innerhalb dieses Zeitraums platzieren. +~g~Sobald du die ERSTE Bombe platziert hast, läuft der Timer des Zeitzünders an. Du musst dann alle Bomben innerhalb dieses Zeitraums platzieren. [SEG3_8] -~g~Alle 4 Bomben müssen in den 4 Zielzonen platziert werden, um die Mission zu erfüllen und das Gebãude zu demolieren. +~g~Alle 4 Bomben müssen in den 4 Zielzonen platziert werden, um die Mission zu erfüllen und das Gebäude zu demolieren. [SEG3_9] ~g~Zielzone getroffen! Noch 3 Bomben. @@ -4491,7 +4491,7 @@ ZEIT: ~g~Wirf die Bombe in einer Zielzone ab. [SEG3_14] -~r~Die Zeit ist um. Demolierung des Gebãudes fehlgeschlagen. +~r~Die Zeit ist um. Demolierung des Gebäudes fehlgeschlagen. [SEG3_15] ~r~Dein RC Raider ist zerstört. Wie willst du jetzt die Bomben transportieren? @@ -4500,13 +4500,13 @@ ZEIT: AVERY-MISSIONEN [ASM] -ATTENTÃTERMISSIONEN +ATTENTÄTERMISSIONEN [ASM_1] -ATTENTÃTERMISSION 1 +ATTENTÄTERMISSION 1 [ASM1_1] -~g~Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war ãußerst wertvoll. Ich habe noch mehr Arbeit, die eine eher 'zupackende' Art verlangt. Ihr nãchster Job klebt unter dem Telefon. +~g~Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war äußerst wertvoll. Ich habe noch mehr Arbeit, die eine eher 'zupackende' Art verlangt. Ihr nächster Job klebt unter dem Telefon. [ASM1_2] ~g~Begib zu dich dem Fernsprecher vor dem Einkaufszentrum in Washington. @@ -4518,16 +4518,16 @@ ATTENTÃTERMISSION 1 ~g~Schalte den Pizza-Lieferanten aus, bevor er seine Lieferungen abschließt. [ASM_2] -ATTENTÃTERMISSION 2 +ATTENTÄTERMISSION 2 [ASM_3] -ATTENTÃTERMISSION 3 +ATTENTÄTERMISSION 3 [ASM3_A] -Marcus Hammond, Franco Carter, Dick Tanner, Nick Kong und Stuntman Driver gehören zu einem europãischen Syndikat und planen einen Ãœberfall. +Marcus Hammond, Franco Carter, Dick Tanner, Nick Kong und Stuntman Driver gehören zu einem europäischen Syndikat und planen einen Ãœberfall. [ASM3_B] -Sie sind alle bereits in Position. Schalten Sie sie aus, bevor es losgeht. Sie haben 9 Minuten. Ich habe in der Nãhe Waffen deponiert, die Sie brauchen werden. +Sie sind alle bereits in Position. Schalten Sie sie aus, bevor es losgeht. Sie haben 9 Minuten. Ich habe in der Nähe Waffen deponiert, die Sie brauchen werden. [ASM3_1] ~g~Hol dir die Waffe, die Mr. Black für dich deponiert hat. @@ -4536,7 +4536,7 @@ Sie sind alle bereits in Position. Schalten Sie sie aus, bevor es losgeht. Sie h ~g~Geh nicht zu dicht an die Zielperson heran, sonst bemerkt sie dich. [ASM3_3] -~g~Es geht schneller, wenn du dir eine günstige Position nahe ihrem Standort suchst und zuschlãgst, ohne gesehen zu werden. +~g~Es geht schneller, wenn du dir eine günstige Position nahe ihrem Standort suchst und zuschlägst, ohne gesehen zu werden. [ASM3_4] ~g~Er hat dich gesehen. Du musst ihn irgendwie ausschalten! @@ -4548,10 +4548,10 @@ Sie sind alle bereits in Position. Schalten Sie sie aus, bevor es losgeht. Sie h ~g~Franco Carter befindet sich bei DBP Security nahe dem Ocean Drive. [ASM3_7] -~g~Dick Tanner ist in der Nãhe des Juweliers in Vice Point. +~g~Dick Tanner ist in der Nähe des Juweliers in Vice Point. [ASM3_8] -~g~Nick Kong befindet sich nãhe Washington Beach. +~g~Nick Kong befindet sich nähe Washington Beach. [ASM3_9] ~g~Stuntman Driver ist in Washington. @@ -4560,13 +4560,13 @@ Sie sind alle bereits in Position. Schalten Sie sie aus, bevor es losgeht. Sie h Du hast nicht alle ausgeschaltet. [ASM_4] -ATTENTÃTERMISSION 4 +ATTENTÄTERMISSION 4 [ASM4_1] ~g~Hol dir das Gewehr, das im Laub vor dem Flughafen-Terminal für dich deponiert wurde. [ASM4_2] -~g~Verfehle dein Ziel nicht, du alarmierst sonst die Leibwãchter. Und bleib auf Distanz, damit er dich nicht bemerkt. +~g~Verfehle dein Ziel nicht, du alarmierst sonst die Leibwächter. Und bleib auf Distanz, damit er dich nicht bemerkt. [ASM4_3] ~g~Beobachte die Frau über den Check-in-Schaltern im Terminal. TU IHR NICHTS. @@ -4599,7 +4599,7 @@ Hol dir den Aktenkoffer. ~g~Der Distanz-Balken am oberen rechten Bildschirmrand zeigt dir, wie nahe du der Zielperson bist. Lass ihn nicht voll werden, sonst sieht sie dich. [ASM_5] -ATTENTÃTERMISSION 5 +ATTENTÄTERMISSION 5 [KICK] KICKSTART @@ -4650,7 +4650,7 @@ Alles, was ich gern habe, geht kaputt! Verdammt! Da sind sie schon! [BNK4_32] -Spreng die Schließfãcher mit Sprengstoff auf. +Spreng die Schließfächer mit Sprengstoff auf. [BNK4_36] Wo ist Cam? @@ -4665,7 +4665,7 @@ Das ist der letzte! LOS! LOS! LOS! Shit! Wo bleibt Hilary? [BK4_40A] -Ich werd was für seine Verlustãngste tun! +Ich werd was für seine Verlustängste tun! [BNK4_42] Hey, Jungs! Los, rein! Ich geb euch Deckung! @@ -4686,7 +4686,7 @@ Ja. Andererseits, so bleibt mehr für uns! Sehr richtig! YEEEEHAAAH! [BNK4_48] -Tommy, eine Massage gefãllig? +Tommy, eine Massage gefällig? [BNK4_49] Hi, Mercedes. Ja, ich bin ein bisschen verspannt... @@ -4707,13 +4707,13 @@ KENT PAUL-MISSIONEN KENT PAUL-MISSION 1 [COUNT] -FÃLSCHER-MISSIONEN +FÄLSCHER-MISSIONEN [COUNT1] -FÃLSCHER-MISSION 1 +FÄLSCHER-MISSION 1 [COUNT2] -FÃLSCHER-MISSION 2 +FÄLSCHER-MISSION 2 [BIKE] DIE BIKER GANG-MISSIONEN @@ -4743,7 +4743,7 @@ HAITI-MISSION 2 HAITI-MISSION 3 [HAM3_6] -~g~Verwende das Prãzisionsgewehr, das ich für dich besorgt habe. +~g~Verwende das Präzisionsgewehr, das ich für dich besorgt habe. [ROCK] DIE ROCKBAND-GANG-MISSIONEN @@ -4806,7 +4806,7 @@ SCHUTZGELD-MISSIONEN ~g~Verlasse das Einkaufszentrum. [PRO3_06] -~g~Hãng die Cops ab. +~g~Häng die Cops ab. [PORN] PORNO-MISSIONEN @@ -4875,25 +4875,25 @@ Malibu Club gekauft: $ ~1~ Bootswerft gekauft: $ ~1~ [PRNT_NO] -Zurzeit kannst du die Druckerei nicht kaufen. Komm spãter wieder. +Zurzeit kannst du die Druckerei nicht kaufen. Komm später wieder. [CAR_NO] -Zurzeit kannst du das Autohaus nicht kaufen. Komm spãter wieder. +Zurzeit kannst du das Autohaus nicht kaufen. Komm später wieder. [PORN_NO] -Zurzeit kannst du das Filmstudio nicht kaufen. Komm spãter wieder. +Zurzeit kannst du das Filmstudio nicht kaufen. Komm später wieder. [ICE_NO] -Zurzeit kannst du die Eiscremefabrik nicht kaufen. Komm spãter wieder. +Zurzeit kannst du die Eiscremefabrik nicht kaufen. Komm später wieder. [TAXI_NO] -Zurzeit kannst du das Taxiunternehmen nicht kaufen. Komm spãter wieder. +Zurzeit kannst du das Taxiunternehmen nicht kaufen. Komm später wieder. [BANK_NO] -Zurzeit kannst du den Malibu Club nicht kaufen. Komm spãter wieder. +Zurzeit kannst du den Malibu Club nicht kaufen. Komm später wieder. [BOAT_NO] -Zurzeit kannst du die Bootswerft nicht kaufen. Komm spãter wieder. +Zurzeit kannst du die Bootswerft nicht kaufen. Komm später wieder. [PRNT_R3] Drücke R3, um die Druckerei zu kaufen. Preis: $~1~ @@ -4929,13 +4929,13 @@ Her damit! Thomas, schön, dass Sie da sind. [COL3_B] -Verzeihen Sie, dass ich direkt zum Geschãftlichen komme. +Verzeihen Sie, dass ich direkt zum Geschäftlichen komme. [COL3_C] Diaz bat mich, eine kleine Transaktion für ihn zu überwachen. [COL3_D] -Hoffentlich lãuft es diesmal besser als zuletzt. +Hoffentlich läuft es diesmal besser als zuletzt. [COL3_E] Deshalb wende ich mich ja an Sie, mein Freund. @@ -4944,7 +4944,7 @@ Deshalb wende ich mich ja an Sie, mein Freund. Ich habe im Parkhaus ein wenig Artillerie deponiert. [COL3_G] -Holen Sie sich die und beschützen Sie Diaz' Mãnner bei der Ãœbergabe. +Holen Sie sich die und beschützen Sie Diaz' Männer bei der Ãœbergabe. [COL4_2] Ich weiß nicht, Sir! @@ -4983,10 +4983,10 @@ Beschütze den Kurier! Ok, Jungs, macht ihn fertig! [FIN_1A] -Komm her, du hinterhãltiger Dreckskerl! +Komm her, du hinterhältiger Dreckskerl! [FIN_1B] -Jetzt bist du fãllig, du mieser Verrãter! +Jetzt bist du fällig, du mieser Verräter! [FIN_1C] Das wird dein letzter 'Dance', Lance Vance! @@ -4998,7 +4998,7 @@ Ach, wirklich? Der dumme Spruch war schon im Kindergarten alt! [FIN_3] -Keiner da, um dich rauszuhauen, diesmal, hã, Tommy? +Keiner da, um dich rauszuhauen, diesmal, hä, Tommy? [FIN_4] Du bist am Ende, Tommy. @@ -5010,7 +5010,7 @@ Du hast dich auf die falsche Seite geschlagen, Lance... Sonny ist oben am Safe mit MEINEM Geld... [FIN_10] -Sonny? SONNY! Jetzt bist du fãllig! +Sonny? SONNY! Jetzt bist du fällig! [FIN_11A] Du hast mir 15 Jahre gestohlen, Sonny. @@ -5142,16 +5142,16 @@ Spiel laden und weiterspielen? Feuern [FEC_NWE] -Nãchste Waffe +Nächste Waffe [FEC_PWE] Vorherige Waffe [FEC_FOR] -Vorwãrts +Vorwärts [FEC_BAC] -Rückwãrts +Rückwärts [FEC_LEF] Links @@ -5175,7 +5175,7 @@ Radio Spezialmission [FEC_CMR] -Blickwinkel ãndern +Blickwinkel ändern [FEC_JMP] Springen @@ -5193,7 +5193,7 @@ Nach links sehen Nach rechts sehen [FEC_NTR] -Nãchstes Ziel +Nächstes Ziel [FEC_PTT] Vorheriges Ziel @@ -5349,7 +5349,7 @@ WAVE 103 Helligkeit [FED_TRA] -Unschãrfe-FX +Unschärfe-FX [FED_SUB] Untertitel @@ -5388,7 +5388,7 @@ Spiel löschen Controller-Setup [FEC_RED] -Steuerung ãndern +Steuerung ändern [FEC_MOU] Maus-Einstellg. @@ -5409,7 +5409,7 @@ Unbeliebtester Radiosender Lieblingsfahrzeug [ST_STAR] -Anzahl angehãufter Fahndungssterne +Anzahl angehäufter Fahndungssterne [ST_HEAD] Anzahl Köpfe @@ -5430,7 +5430,7 @@ Aufgeschlitzte Reifen Erledigte Gegner im Chaos-Derby [ST_LTBR] -Lãngste Zeit im Chaos-Derby (Sekunden) +Längste Zeit im Chaos-Derby (Sekunden) [ST_GNG1] Kubaner @@ -5460,7 +5460,7 @@ Golfer ESPANTOSO [ST_ASSI] -Ausgeführte Attentãtermissionen +Ausgeführte Attentätermissionen [DISTBIK] Mit Motorrad zurückgel. Strecke (Meilen) @@ -5490,7 +5490,7 @@ Daten wurden gespeichert. Weiter mit OK. Daten wurden gelöscht. Weiter mit OK. [FESZ_QC] -Dieses beschãdigte Spiel überschreiben? +Dieses beschädigte Spiel überschreiben? [FES_CHE] Achtung! Ein oder mehrere Cheats sind aktiviert, dies kann sich auf die Speicherung auswirken. Es wird empfohlen, dieses Spiel nicht zu speichern. @@ -5598,7 +5598,7 @@ Schnellste Zeit bei 'Wheels of Steels' Schnellste Zeit bei 'Der Fahrer' [STFT_03] -Schnellste Zeit auf Gelãndemotorradstrecke +Schnellste Zeit auf Geländemotorradstrecke [STFT_04] Schnellste Zeit bei Modellflugzeug-Rennen @@ -5634,16 +5634,16 @@ High-Score bei Schießstand-Mission Beste Trefferquote am Schießstand (in Prozent) [STHC_03] -Anzahl getãtigter Drogendeals +Anzahl getätigter Drogendeals [HELP24] -Du kannst jetzt Auftrãge vom Colonel annehmen. +Du kannst jetzt Aufträge vom Colonel annehmen. [HELP25] -Du kannst jetzt Auftrãge von Avery Carrington annehmen. +Du kannst jetzt Aufträge von Avery Carrington annehmen. [HELP29] -Außerhalb eine Mision kannst du zu dem Bekleidungsgeschãft gehen. +Außerhalb eine Mision kannst du zu dem Bekleidungsgeschäft gehen. [HELP30] Wenn du neue Klamotten kaufst, reduziert sich dein Fahndungslevel auf null. @@ -5676,7 +5676,7 @@ Du brauchst eine Maschinenpistole für einen 'Drive-By'. ~k~~PED_SPRINT~ zum Beenden. [ASM1_B] -Ihr nãchster Auftrag klebt unter dem Telefon. +Ihr nächster Auftrag klebt unter dem Telefon. [ASM1_C] Ich habe noch mehr Arbeit, die eine eher 'zupackende' Art verlangt. @@ -5796,7 +5796,7 @@ Hier Cortez. Sie waren bei meiner Party. Ja. Ich erinnere mich. [MOB_24E] -Mr. Vercetti, es war höchst unglücklich, was da bei der Abwicklung Ihres Geschãfts vorgefallen ist. +Mr. Vercetti, es war höchst unglücklich, was da bei der Abwicklung Ihres Geschäfts vorgefallen ist. [MOB_24F] Ich weiß. @@ -5850,7 +5850,7 @@ Mafia Cruiser 'DONNER ÃœBER VICE CITY' [BNK3_2] -Ich fahre nicht für dich, niemals. Das erzãhle ich in der Therapie. +Ich fahre nicht für dich, niemals. Das erzähle ich in der Therapie. [FEM_SL1] Datei 1 nicht vorhanden @@ -5940,7 +5940,7 @@ Havana Cop [OUTFT7] -Bankrãuber +Bankräuber [OUTFT8] Freizeit @@ -5958,7 +5958,7 @@ MC Tommy AUTOHAUS ERWORBEN [CAR_AS2] -~g~Sunshine Autos generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Sunshine Autos generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [BUYSAVE] ~g~Außerhalb einer Mission kannst du dein Spiel hier umsonst speichern. @@ -6003,13 +6003,13 @@ Sie finden mich auf dem Boot. .357 in Verstecken angeliefert! [PICK3] -Kettensãgen in Verstecken angeliefert! +Kettensägen in Verstecken angeliefert! [PICK4] Flammenwerfer in Verstecken angeliefert! [PICK5] -.308 Prãzisionsgewehr in Verstecken angeliefert! +.308 Präzisionsgewehr in Verstecken angeliefert! [PICK6] Mini-Kanonen in Verstecken angeliefert! @@ -6027,43 +6027,43 @@ Panzer jetzt in Army-Kaserne verfügbar! Hunter jetzt in Army-Kaserne verfügbar! [CLOTH1] -Abendgarderobe bei Rafaels in Ocean Beach erhãltlich. +Abendgarderobe bei Rafaels in Ocean Beach erhältlich. [CLOTH2] Straßenkleidung in Verstecken angeliefert. [CLOTH3] -Overall bei 'Tooled Up' im North Point Einkaufszentrum erhãltlich. +Overall bei 'Tooled Up' im North Point Einkaufszentrum erhältlich. [CLOTH4] -Country Club-Bekleidung beim Golf Club in Leaf Links erhãltlich. +Country Club-Bekleidung beim Golf Club in Leaf Links erhältlich. [CLOTH5] -Havana-Outfit bei 'Little Havana Streetwear' in Little Havana erhãltlich. +Havana-Outfit bei 'Little Havana Streetwear' in Little Havana erhältlich. [CLOTH6] -Polizeiuniform bei Polizeistation in Washington Beach erhãltlich. +Polizeiuniform bei Polizeistation in Washington Beach erhältlich. [CLOTH7] -Freizeitbekleidung bei 'Gash' im North Point Einkaufszentrum erhãltlich. +Freizeitbekleidung bei 'Gash' im North Point Einkaufszentrum erhältlich. [CLOTH8] -Mr. Vercetti-Outfit bei 'Collar & Cuffs'in Ocean Beach erhãltlich. +Mr. Vercetti-Outfit bei 'Collar & Cuffs'in Ocean Beach erhältlich. [CLOTH9] -Trainingsanzug bei 'Jocksport' in Downtown erhãltlich. +Trainingsanzug bei 'Jocksport' in Downtown erhältlich. [CLOTH10] -Bankrãuber-Outfit beim Malibu Club in Vice Point erhãltlich. +Bankräuber-Outfit beim Malibu Club in Vice Point erhältlich. [MOB_62A] Tommy, hier Ricardo Diaz. Ich wollte dir danken, dass du mich gerettet hast. [MOB_62B] -Ich hab den Trottel von Cortez gefragt. Er meint, du wãrst ein Mann für alle Fãlle. Komm doch mal bei mir vorbei. +Ich hab den Trottel von Cortez gefragt. Er meint, du wärst ein Mann für alle Fälle. Komm doch mal bei mir vorbei. [MOB_62C] -Ich brauche einen Kerl wie dich. Ich hab nãmlich nur Schwachköpfe. +Ich brauche einen Kerl wie dich. Ich hab nämlich nur Schwachköpfe. [MOB_62D] Nur lauter Schwachköpfe. Ich mache dich schwer reich. @@ -6081,7 +6081,7 @@ Lade... Schnellste Zeit bei 'PCJ Rallye' [STFT_18] -Schnellste Zeit bei 'Krasses Gelãnde' +Schnellste Zeit bei 'Krasses Gelände' [STFT_19] Schnellste Zeit bei 'Teststrecke' @@ -6090,7 +6090,7 @@ Schnellste Zeit bei 'Teststrecke' Neuer Rekord!! ~1~ Minuten und ~1~ Sekunden. [BMX_HOW] -~g~Fahr zwei Runden auf der Gelãndemotorradstrecke. ~y~Passiere dabei ~g~die ~y~CHECKPOINTS~g~! +~g~Fahr zwei Runden auf der Geländemotorradstrecke. ~y~Passiere dabei ~g~die ~y~CHECKPOINTS~g~! [BMXREW1] ~g~Jedes Mal wenn du deine bisherige Bestzeit für die zwei Runden verbesserst, @@ -6189,7 +6189,7 @@ Drück die ~h~~k~~PED_ANSWER_PHONE~~w~, um die augenblickliche Waffe in diesem S Drück die ~h~~k~~PED_ANSWER_PHONE~~w~, um die augenblickliche Waffe in diesem Slot auszutauschen. [HELP9_B] -Drücke die~h~ ~k~~PED_FIREWEAPON~~w~, um das Prãzisionsgewehr ~h~abzufeuern~w~. +Drücke die~h~ ~k~~PED_FIREWEAPON~~w~, um das Präzisionsgewehr ~h~abzufeuern~w~. [HELP37] Wenn du doch nicht in ein Auto einsteigen willst, das du im Begriff bist, zu klauen, drück die ~h~~k~~PED_SPRINT~. @@ -6279,7 +6279,7 @@ Nicht verfügbar Mesa Grande [STRP_NO] -Zurzeit kannst du die Stripper-Bar nicht kaufen. Komm spãter wieder. +Zurzeit kannst du die Stripper-Bar nicht kaufen. Komm später wieder. [CHSE] VERFOLGUNGSJAGD @@ -6411,13 +6411,13 @@ Drücke die ~h~~k~~PED_ANSWER_PHONE~~w~, um den Pole Position Club zu kaufen. Pr Drücke die ~h~~k~~PED_ANSWER_PHONE~~w~, um den Pole Position Club zu kaufen. Preis: $~1~ [STOCK] -~r~nicht vorrãtig +~r~nicht vorrätig [HELP14] Um das Büro des Anwalts zu finden, folge dem ~h~'L'~w~ auf dem Radar. [BOAT_AS] -~g~Die Bootswerft generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Die Bootswerft generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [BOAT_A2] BOOTSWERFT-MISSIONEN ERFÃœLLT @@ -6426,13 +6426,13 @@ BOOTSWERFT-MISSIONEN ERFÃœLLT Checkpoint Charlie [BOAT_P] -~g~Sammle die Pãckchen ein, ehe die Zeit um ist. +~g~Sammle die Päckchen ein, ehe die Zeit um ist. [FEI_R1B] R1- \ R2-Taste - [HELP9_A] -Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Prãzisionsgewehr abzufeuern. +Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Präzisionsgewehr abzufeuern. [HELP21] Drücke die ~h~~k~~VEHICLE_ENTER_EXIT~~w~-Taste, um in ein Fahrzeug ein- oder auszusteigen. @@ -6501,7 +6501,7 @@ Schnellste Zeit bei 'Pylonen-Rallye' Halte in der ~q~rosa Markierung. [HELP45] -Drücke die ~h~~k~~PED_DUCK~~w~ um dich zu ducken. Dadurch erhöht sich die Treffsicherheit der Waffen, die du hãltst. +Drücke die ~h~~k~~PED_DUCK~~w~ um dich zu ducken. Dadurch erhöht sich die Treffsicherheit der Waffen, die du hältst. [RCR1_5] RC Bandit-Rennen @@ -6594,7 +6594,7 @@ Sieh dir diesen riesigen Helikopter an! Da kommt er wieder! [FEA_DSM] -Achtung! Dieses Spiel ist auf DTS-Tonausgabe eingestellt. Dazu muss DTS-kompatible Hardware angeschlossen sein. Bitte wãhlen Sie, ob Sie mit DTS oder STEREO-Tonausgabe fortfahren wollen. +Achtung! Dieses Spiel ist auf DTS-Tonausgabe eingestellt. Dazu muss DTS-kompatible Hardware angeschlossen sein. Bitte wählen Sie, ob Sie mit DTS oder STEREO-Tonausgabe fortfahren wollen. [STFT_23] Schnellste Zeit bei Checkpoint Carlie @@ -6624,25 +6624,25 @@ Du kannst von jedem Waffentyp immer nur eine bei dir tragen - also einen Typ Pis Drücke die ~h~~k~~PED_SPRINT~~w~-Taste, um zu ~h~sprinten. [HLPSN_A] -Das Prãzisionsgewehr ermöglicht dir, an dein Ziel heranzuzoomen und auf größere Distanz mit hoher Genauigkeit zu schießen. +Das Präzisionsgewehr ermöglicht dir, an dein Ziel heranzuzoomen und auf größere Distanz mit hoher Genauigkeit zu schießen. [HLPSN_B] -Halte die~h~ ~k~~PED_LOCK_TARGET~~w~-Taste gedrückt, um mit dem Prãzisionsgewehr zu ~h~zielen~w~. +Halte die~h~ ~k~~PED_LOCK_TARGET~~w~-Taste gedrückt, um mit dem Präzisionsgewehr zu ~h~zielen~w~. [HLPSN_C] -Halte die~h~ ~k~~PED_LOCK_TARGET~~w~-Taste gedrückt, um mit dem Prãzisionsgewehr zu ~h~zielen~w~. +Halte die~h~ ~k~~PED_LOCK_TARGET~~w~-Taste gedrückt, um mit dem Präzisionsgewehr zu ~h~zielen~w~. [HLPSN_D] Drücke die ~h~~k~~PED_SNIPER_ZOOM_IN~~w~-Taste, um ~h~an das Ziel heranzuzoomen ~w~und die~h~ ~k~~PED_SNIPER_ZOOM_OUT~~w~,um ~h~herauszuzoomen~w~. [HLPSN_E] -Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Prãzisionsgewehr ~h~abzufeuern~w~. +Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Präzisionsgewehr ~h~abzufeuern~w~. [HLPSN_F] -Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Prãzisionsgewehr ~h~abzufeuern~w~. +Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Präzisionsgewehr ~h~abzufeuern~w~. [HLPSN_G] -Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Prãzisionsgewehr ~h~abzufeuern~w~. +Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Präzisionsgewehr ~h~abzufeuern~w~. [PLANE_H] Benutze die ~h~~k~~VEHICLE_ACCELERATE~~w~-Taste, um zu beschleunigen. Links bzw. Rechts für Richtungswechsel. @@ -6739,19 +6739,19 @@ Echt der Hammer. Du glaubst nicht, was mir für 'ne Puppe über den Weg gelaufen 'ne Bordsteinschwalbe, oder sowas. Unten in Little Havana. [MOB_18D] -Sagt, sie heißt Mercedes oder so ãhnlich. +Sagt, sie heißt Mercedes oder so ähnlich. [MOB_18E] Wahnsinn, Alter. Die Puppe musst du dir geben. [MOB_18F] -Da würde 'nen Toter Hormonkoller kriegen. Sie sagt, ich wãr der beste, den sie je hatte. +Da würde 'nen Toter Hormonkoller kriegen. Sie sagt, ich wär der beste, den sie je hatte. [MOB_18G] Halt die Augen nach ihr offen. Bis dann. [MOB_72A] -Tommy, ich bin's, Lance. Du hãltst jetzt mal den Rand, Tommy, ich hab nãmlich keine Zeit für Geschwãtz. +Tommy, ich bin's, Lance. Du hältst jetzt mal den Rand, Tommy, ich hab nämlich keine Zeit für Geschwätz. [MOB_72B] Interessiert mich auch nicht, was du zu sagen hast. Warum auch? Ich bin dir doch sowieso scheißegal, stimmt's? @@ -6784,16 +6784,16 @@ Ganz gut. Werd zum Laufen 'nen Stock brauchen, müsste aber bald wieder arbeiten Gut. [MOB_63E] -Ich hab das mit Lance gehört. Was für ein Schwein, hã? +Ich hab das mit Lance gehört. Was für ein Schwein, hä? [MOB_63F] Ja. [MOB_63G] -Trau nie einem Mann, der im Pyjama auf der Straße herumlãuft. Gut, dass du ihn erledigt hast. Ich hoffe, es war nicht kurz und schmerzlos. +Trau nie einem Mann, der im Pyjama auf der Straße herumläuft. Gut, dass du ihn erledigt hast. Ich hoffe, es war nicht kurz und schmerzlos. [MOB_63H] -Eher nicht. Ich hãtte nur nicht gedacht, dass er so einer ist... +Eher nicht. Ich hätte nur nicht gedacht, dass er so einer ist... [MOB_63I] Tommy, für einen wildgewordenen Irren bist du ziemlich naiv. Ich bin bald wieder an der Arbeit, dann bring ich dir mal ein paar Sachen übers Leben bei, ok? @@ -6811,19 +6811,19 @@ Was willst du, Paul? Ich brauch keine getürkten Designer-Klamotten. Sehr witzig. Du weißt, dass ich mit getürkter Ware nichts am Hut habe. Wollte nur hören, ob ich nicht 'ne Rolle in einem von deinen Filmen kriegen könnte. [MOB_16D] -In England habe ich damals viel einschlãgiges Zeug gedreht. Ich hab mehr zu bieten als du, mein Alter. +In England habe ich damals viel einschlägiges Zeug gedreht. Ich hab mehr zu bieten als du, mein Alter. [MOB_16E] Paul, danke für das Angebot. Ich komm auf dich zurück. [MOB_16F] -Lass mich nicht hãngen. Denk dran, was ich alles für dich getan habe. +Lass mich nicht hängen. Denk dran, was ich alles für dich getan habe. [MOB_16G] Das versuch ich ja grade zu vergessen. [MOB_17A] -Tommy Vercetti. Wie geht's, großer Meister? Man hört so einiges über dich. Bist jetzt 'ne große Nummer in der Stadt, hã? +Tommy Vercetti. Wie geht's, großer Meister? Man hört so einiges über dich. Bist jetzt 'ne große Nummer in der Stadt, hä? [MOB_17B] Paul, du bist betrunken. @@ -6835,19 +6835,19 @@ Nein, du Trottel, ich bin nicht betrunken. Hab mir nur ein paar Ladungen Stoff g Und du brauchst mich nicht dumm anzureden. Ich bin nicht irgendwer. Wer hat dir denn in dieser Stadt den Weg geebnet? Ich! [MOB_17F] -Tatsãchlich? +Tatsächlich? [MOB_17G] -Komm mir nicht so! Ich hab dich mit den ganzen Leuten bekanntgemacht. Hab dir gezeigt, wie der Hase lãuft, hab alles mögliche für dich getan, und so dankst du es mir?! +Komm mir nicht so! Ich hab dich mit den ganzen Leuten bekanntgemacht. Hab dir gezeigt, wie der Hase läuft, hab alles mögliche für dich getan, und so dankst du es mir?! [MOB_17H] -Du ignorierst mich. Du gibst mir keine Chance, mitzumischen, nach allem, was ich für dich getan habe! Hãltst du mich für einen Schwachkopf? +Du ignorierst mich. Du gibst mir keine Chance, mitzumischen, nach allem, was ich für dich getan habe! Hältst du mich für einen Schwachkopf? [MOB_17I] Paul, reg dich ab. Ich hatte viel zu tun. Sei kein Idiot. [MOB_17J] -Ich bin kein Idiot. Das haben sie schon im Jugendknast gesagt. Wenn du Ãrger haben willst, Freundchen, den kannst du haben! +Ich bin kein Idiot. Das haben sie schon im Jugendknast gesagt. Wenn du Ärger haben willst, Freundchen, den kannst du haben! [MOB_17K] Tommy, bitte! Du warst meine große Hoffnung. Bitte, mach dich nicht lustig über mich! @@ -6868,10 +6868,10 @@ Hey, aber wie! Du bist ein Genie! Ich bin ein Genie! Sie lieben uns alle. Wir br Uns winken ganz große Filmpreise. Jetzt kann ich endlich meinen alten Herrn ins Heim stecken und ihm sagen, er soll die Klappe halten. [MOB_73E] -Ãh, das ist cool, Steve. +Äh, das ist cool, Steve. [MOB_73F] -Cool? Mann, das ist heiß! Heiß! H.E.I.ß! Er hat nie an mich geglaubt. Hat immer gedacht, ich wãre kein Künstler, und jetzt hab ich's geschafft! +Cool? Mann, das ist heiß! Heiß! H.E.I.ß! Er hat nie an mich geglaubt. Hat immer gedacht, ich wäre kein Künstler, und jetzt hab ich's geschafft! [MOB_73G] Ich bin der größte Porno-Regisseur aller Zeiten, mein Freund. Wollte dir nur sagen, es ist mir eine Freude, dich kennengelernt zu haben. @@ -6901,25 +6901,25 @@ Ziel POLE POSITION ERWORBEN! [ASSET_D] -~g~Der Pole Position Club sorgt nun für ein Einkommen von bis zu $~1~ pro Tag. Hol dir dein Geld regelmãssig! +~g~Der Pole Position Club sorgt nun für ein Einkommen von bis zu $~1~ pro Tag. Hol dir dein Geld regelmässig! [ST_WHEE] -Lãngste 'Wheelie' Zeit (sekunden) +Längste 'Wheelie' Zeit (sekunden) [ST_STOP] -Lãngste 'Stoppie' Zeit (sekunden) +Längste 'Stoppie' Zeit (sekunden) [ST_2WHE] -Lãngste 2 Rad Zeit (sekunden) +Längste 2 Rad Zeit (sekunden) [ST_WHED] -Lãngste 'Wheelie' Distanz (m) +Längste 'Wheelie' Distanz (m) [ST_STOD] -Lãngste 'Stoppie' Distanz (m) +Längste 'Stoppie' Distanz (m) [ST_2WHD] -Lãngste 2 Rad Distanz (m) +Längste 2 Rad Distanz (m) [OUTFT11] Trainer @@ -6928,7 +6928,7 @@ Trainer Frankie [RELOAD] -~g~Du hast die schnell Nachladefãhigkeit gewonnen! +~g~Du hast die schnell Nachladefähigkeit gewonnen! [APACHE] Hunter zur Heli Landeplattform am Ocean Beach geliefert. @@ -6961,10 +6961,10 @@ Neuer Kontaktpunkt am Jachthafen am Ocean Beach!! Feuerwehr-Mission Level ~1~ [HELP56] -Drücke die ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~-Taste, um den Blickwinkel zu ãndern. +Drücke die ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~-Taste, um den Blickwinkel zu ändern. [HELP57] -Drücke die ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~-Taste, um den Blickwinkel zu ãndern. +Drücke die ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~-Taste, um den Blickwinkel zu ändern. [HELP58] Beim Zielen kann durch Drücken der ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~-Taste zwischen Zielen hin- und her gewechselt werden. @@ -6973,7 +6973,7 @@ Beim Zielen kann durch Drücken der ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~-Taste zwisc Beim Zielen kann durch Drücken der ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~-Taste zwischen Zielen hin- und her gewechselt werden. [HELP60] -Wenn du wãhrend eines Autodiebstahls die ~h~~k~~PED_SPRINT~ ~w~-Taste drückst, steigst du nicht in das Fahrzeug ein. +Wenn du während eines Autodiebstahls die ~h~~k~~PED_SPRINT~ ~w~-Taste drückst, steigst du nicht in das Fahrzeug ein. [HELP61] Du hast jetzt unbegrenzt Munition und doppelte Health für alle Fahrzeuge. @@ -7033,7 +7033,7 @@ Nach links Nach rechts [FEC_PWF] -Vorwãrts gehen +Vorwärts gehen [FEC_PWT] Auf Kamera zugehen @@ -7054,13 +7054,13 @@ Eine Waffe nach rechts Ziel fixieren [FEC_PJP] -Fußgãnger springen +Fußgänger springen [FEC_PSP] -Fußgãnger sprinten +Fußgänger sprinten [FEC_PSH] -Fußgãnger schießen +Fußgänger schießen [FEC_TLF] Ein Ziel nach links @@ -7072,10 +7072,10 @@ Ein Ziel nach rechts Kamera hinter Spieler zentrieren [FEC_SZI] -Mit Prãzisionsgewehr heranzoomen +Mit Präzisionsgewehr heranzoomen [FEC_SZO] -Mit Prãzisionsgewehr herauszoomen +Mit Präzisionsgewehr herauszoomen [FEC_LKL] First-Person nach links schauen @@ -7195,7 +7195,7 @@ Löschen fehlgeschlagen. Speichern fehlgeschlagen. [FEC_LUN] -Laden fehlgeschlagen. Datei beschãdigt. Bitte löschen. +Laden fehlgeschlagen. Datei beschädigt. Bitte löschen. [FEC_PAD] Gamepad @@ -7204,7 +7204,7 @@ Gamepad Joystick [FES_CSA] -Wãhlen Sie eine Skin aus der Liste aus: +Wählen Sie eine Skin aus der Liste aus: [FET_HRD] STANDARDEINSTLLG. WIEDERHERGESTELLT @@ -7219,7 +7219,7 @@ NUM STERN LINKS,RECHTS,MAUSRAD ZUR EINSTLLG. [FET_CIG] -RÃœCKT. ZUM LÖSCHEN - LMT,RETURN ZUM ÃNDERN +RÃœCKT. ZUM LÖSCHEN - LMT,RETURN ZUM ÄNDERN [FET_DSN] Standard-Player Skin.bmp @@ -7375,7 +7375,7 @@ LEERT. GTA VC [WIN_95] -GTA VC lãuft nicht unter Windows 95 +GTA VC läuft nicht unter Windows 95 [WIN_DX] GTA VC benötigt mind. DirectX Version 8.1 @@ -7480,19 +7480,19 @@ Geschütz + nach hinten neigen Geschütz + nach vorne neigen [FET_RIG] -WÃHLEN SIE EINE NEUE TASTENBELEGUNG FÃœR DIESE AKTION +WÄHLEN SIE EINE NEUE TASTENBELEGUNG FÃœR DIESE AKTION [FEA_NM3] KEINE MP3-DATEIEN GEFUNDEN [FEA_MPB] -MP3 LAUTSTÃRKE-BOOST +MP3 LAUTSTÄRKE-BOOST [FEA_MUS] -LAUTSTÃRKE MUSIK +LAUTSTÄRKE MUSIK [FEA_SFX] -LAUTSTÃRKE SFX +LAUTSTÄRKE SFX [FEA_ADP] AUTOMATISCHE HARDWARE ERKENNUNG @@ -7547,21 +7547,21 @@ Weitere Lieferungen: ~g~Carl Pearson, Pizza-Lieferant. Schalte ihn aus, bevor er seine Lieferungen abschließt. [ASM1_A:ASSIN1] -Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war ãußerst wertvoll. Ich habe noch mehr Arbeit, die eine eher 'zupackende' Art verlangt. +Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war äußerst wertvoll. Ich habe noch mehr Arbeit, die eine eher 'zupackende' Art verlangt. [ASM1_D:ASSIN1] -Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war ãußerst wertvoll. +Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war äußerst wertvoll. {=================================== MISSION TABLE ASSIN2 ===================================} [ASM2_1:ASSIN2] -~g~Mrs. Dawson verlãsst bald den Juwelier in Vice Point. Schalte sie aus. Es muss wie ein Autounfall aussehen. +~g~Mrs. Dawson verlässt bald den Juwelier in Vice Point. Schalte sie aus. Es muss wie ein Autounfall aussehen. [ASM2_3:ASSIN2] ~g~Das Fahrzeug wird explodieren! Hau ab! [ASM2_4:ASSIN2] -~r~Du hast ihr Auto beschãdigt, obwohl sie nicht drin saß! Jetzt wird sie nicht einsteigen! +~r~Du hast ihr Auto beschädigt, obwohl sie nicht drin saß! Jetzt wird sie nicht einsteigen! [ASM2_5:ASSIN2] ~r~Sie ist entwischt! @@ -7570,7 +7570,7 @@ Mr. Teal, Ihre Hilfe bei der Beseitigung der Landeier war ãußerst wertvoll. ~r~Du warst zu nah am Unfallort! [ASM2_7:ASSIN2] -~g~Keine Waffen! Es soll wie ein Unfall aussehen! Drãnge sie stattdessen von der Fahrbahn! +~g~Keine Waffen! Es soll wie ein Unfall aussehen! Dränge sie stattdessen von der Fahrbahn! [ASM2_8:ASSIN2] ~g~Das ganze muss wie ein Unfall aussehen. Benutze keine Waffen. @@ -7602,7 +7602,7 @@ Health: ZEIT: [ASM3_C:ASSIN3] -Eine europãische Gang plant einen Ãœberfall auf eine Bank in Vice City. Meinen Arbeitgebern wãre sehr daran gelegen, dass das nicht passiert. +Eine europäische Gang plant einen Ãœberfall auf eine Bank in Vice City. Meinen Arbeitgebern wäre sehr daran gelegen, dass das nicht passiert. [ASM3_D:ASSIN3] Alle Mitglieder der Gang haben eine Tarnung, solange sie sich hier in Vice City aufhalten. Manche haben Jobs, andere geben sich als Touristen aus. @@ -7611,13 +7611,13 @@ Alle Mitglieder der Gang haben eine Tarnung, solange sie sich hier in Vice City Infos über alle Zielpersonen und ihre wahrscheinlichen Aufenthaltsorte kleben unter dem Telefon. [ASM3_14:ASSIN3] -~g~Dick Tanner hãlt sich bei DBP Security am Ocean Drive auf. +~g~Dick Tanner hält sich bei DBP Security am Ocean Drive auf. [ASM3_15:ASSIN3] -~g~Marc Hammond und Franco Carter halten sich in der Nãhe des Juwelierladens in Vice Point auf. +~g~Marc Hammond und Franco Carter halten sich in der Nähe des Juwelierladens in Vice Point auf. [ASM3_16:ASSIN3] -~g~Nick Kong hãlt sich in der Nãhe von Washington Beach auf. +~g~Nick Kong hält sich in der Nähe von Washington Beach auf. [ASM3_18:ASSIN3] ~g~Geh nicht zu nahe an deine Zielperson heran, sonst entdeckt sie dich und du musst hinter ihr herjagen. @@ -7635,13 +7635,13 @@ Infos über alle Zielpersonen und ihre wahrscheinlichen Aufenthaltsorte kleben u ~g~Geh nicht zu nahe an deine Zielpersonen heran, sonst entdecken sie dich und versuchen zu fliehen. [ASM3_12:ASSIN3] -~g~In der Nãhe sind einige Waffen für dich deponiert worden, falls du sie brauchen solltest. Du hast ~h~9 MINUTEN~g~, um alle Gang-Mitglieder auszuschalten. +~g~In der Nähe sind einige Waffen für dich deponiert worden, falls du sie brauchen solltest. Du hast ~h~9 MINUTEN~g~, um alle Gang-Mitglieder auszuschalten. [ASM3_13:ASSIN3] ~g~Mike Griffin arbeitet an einer Plakatwand in Washington. [ASM3_17:ASSIN3] -~g~Charlie Dilson fãhrt mit dem Motorrad in Washington herum. +~g~Charlie Dilson fährt mit dem Motorrad in Washington herum. {=================================== MISSION TABLE ASSIN4 ===================================} @@ -7652,7 +7652,7 @@ Infos über alle Zielpersonen und ihre wahrscheinlichen Aufenthaltsorte kleben u Distanz: [ASM4_15:ASSIN4] -~g~Nimm das Prãzisionsgewehr zu deiner Rechten. +~g~Nimm das Präzisionsgewehr zu deiner Rechten. [ASM4_16:ASSIN4] ~g~Behalte die Frau auf der Empore im Auge. Sie wird die Rolltreppe hinuntergehen und die Zielperson nach der Uhrzeit fragen. @@ -7685,7 +7685,7 @@ Distanz: ~r~Die Zielperson hat das Flugzeug bestiegen! [ASM4_27:ASSIN4] -~r~Die Zielperson hat dich gesehen! Du hãttest Abstand halten sollen! +~r~Die Zielperson hat dich gesehen! Du hättest Abstand halten sollen! [ASM4_28:ASSIN4] ~r~Die Zielperson hat dich gesehen! Er hat gehört, wie du geschossen hast! @@ -7714,7 +7714,7 @@ Erledigen Sie alle Beteiligten, klauen Sie die Ware und bringen Sie sie zum Heli Links von Ihnen ist ein Tor, das zur Rückseite der Fabrik führt. [ASM5_1:ASSIN5] -~g~Geh auf das Gelãnde hinter der Cherry Popper-Eiscremefabrik und dann auf das Dach, wo der Deal abgewickelt wird. +~g~Geh auf das Gelände hinter der Cherry Popper-Eiscremefabrik und dann auf das Dach, wo der Deal abgewickelt wird. [ASM5_2:ASSIN5] ~g~Schnapp dir die Ware und bring sie zum Heliport am Flughafen. @@ -7737,7 +7737,7 @@ Wir haben unten eine ausgewachsene Bar, Ken. Ja, ja, wie auch immer. Tja, ich hab die Tafel besorgt, die du haben wolltest. [BJM1_D:BANKJ1] -Ah, das ist der Lohn des Jurastudiums: Die Fãhigkeit, Anweisungen auszuführen. +Ah, das ist der Lohn des Jurastudiums: Die Fähigkeit, Anweisungen auszuführen. [BJM1_E:BANKJ1] Also, ich brauche einen Safeknacker. @@ -7755,7 +7755,7 @@ Wo sitzt er denn? In einer Zelle in einem Polizeirevier. Er wartet auf seine Verlegung. [BJM1_J:BANKJ1] -Ich glaube fast, er kommt auf Bewãhrung raus... +Ich glaube fast, er kommt auf Bewährung raus... [BJM1_1:BANKJ1] ~g~Befreie Cam Jones aus der Haft! @@ -7788,10 +7788,10 @@ Besser als in 'ner Zelle zu verrotten! ~g~Bring Cam nach Hause! [BJM1_23:BANKJ1] -~g~Du brauchst zunãchst die Magnetkarte für die Tür! +~g~Du brauchst zunächst die Magnetkarte für die Tür! [BNK1_12:BANKJ1] -Hãng die Bullen ab und bring mich nach Hause! +Häng die Bullen ab und bring mich nach Hause! [BJM1_20:BANKJ1] Die Waffe weg oder es passiert was! @@ -7838,7 +7838,7 @@ Tja, der beste Schütze in der Stadt ist ein Kerl namens Cassidy. Ach ja? [BJM2_K:BANKJ2] -Ja. Soldat, oder wenigstens hãlt er sich dafür. +Ja. Soldat, oder wenigstens hält er sich dafür. [BJM2_L:BANKJ2] Ich bezweifle, dass er je bei der Army war, aber er kann mit der Knarre umgehen. @@ -7901,7 +7901,7 @@ GESAMTPUNKTZAHL FÃœR DAS SCHIESSEN: ~1~ ~r~Einer der Schützen ist erledigt! [BJM2_14:BANKJ2] -~g~Begib dich zum nãchsten Areal! +~g~Begib dich zum nächsten Areal! [BJM2_15:BANKJ2] PUNKTE: @@ -7919,7 +7919,7 @@ ZU SCHLAGEN: ~r~Du hast den Schießstand verlassen! [BJM2_23:BANKJ2] -~g~Wenn du den Schießstand wãhrend des Wettbewerbs verlãsst, ist die Mission gescheitert. +~g~Wenn du den Schießstand während des Wettbewerbs verlässt, ist die Mission gescheitert. [BJM2_24:BANKJ2] ~g~Das nahegelegenste Ziel bringt 1 Punkt. @@ -7940,7 +7940,7 @@ AREAL KLAR! Huuuiii! [BNK2_5:BANKJ2] -Der trãfe nicht mal ein Scheunentor. +Der träfe nicht mal ein Scheunentor. [BNK2_7:BANKJ2] Also, was ist jetzt, hilfst du mir bei dem Job? @@ -7996,10 +7996,10 @@ Nimm Hilary, Boss, nicht diesen Labersack von einem Rechtverdreher. Hilary ist der beste. So schnell wie den hast noch keinen fahren sehen. Ich rufe ihn mal an. [BJM3_G:BANKJ3] -Hey, Hil, hier Phil. Wie lãuft's? Nein, sag nichts. Dazu haben wir spãter Zeit. Tust du mir einen Gefallen? +Hey, Hil, hier Phil. Wie läuft's? Nein, sag nichts. Dazu haben wir später Zeit. Tust du mir einen Gefallen? [BJM3_H:BANKJ3] -Ich hab hier einen Typ aus dem Norden. Nein, ich glaub, er war nicht beim Militãr. Aber er braucht einen Fahrer. +Ich hab hier einen Typ aus dem Norden. Nein, ich glaub, er war nicht beim Militär. Aber er braucht einen Fahrer. [BJM3_I:BANKJ3] Für einen Job. Ok, verstehe. @@ -8008,7 +8008,7 @@ Für einen Job. Ok, verstehe. Was hat er gesagt? [BJM3_K:BANKJ3] -Er macht's. Kein Problem. Na ja, ein kleines vielleicht: Er leidet unter Verlustãngsten. +Er macht's. Kein Problem. Na ja, ein kleines vielleicht: Er leidet unter Verlustängsten. [BJM3_L:BANKJ3] Er arbeitet anscheinend nicht für Leute, die ihn nicht schlagen können. Hat was mit seiner Mutter zu tun. @@ -8023,10 +8023,10 @@ Bist du Tommy? Klar bist du Tommy, ich meine, wieso sollte sonst einer mit mir reden wollen? [BJM3_2C:BANKJ3] -Ok. Das ganze lãuft so ab: +Ok. Das ganze läuft so ab: [BJM3_2D:BANKJ3] -Ich fahre für dich, WENN und NUR WENN du selbst anstãndig fãhrst. +Ich fahre für dich, WENN und NUR WENN du selbst anständig fährst. [BJM3_2E:BANKJ3] Verlierst du mich, verzeihe ich dir das nie. @@ -8044,7 +8044,7 @@ Ok, ich fahre für dich. Aber bitte, behandle mich schlecht. Illegales Straßenrennen bei Vice Point. [BNK3_3B:BANKJ3] -An alle Einsatzkrãfte. +An alle Einsatzkräfte. [BNK3_3C:BANKJ3] Straßenrennen sind verboten und illegal! @@ -8061,7 +8061,7 @@ Straßenrennen sind verboten und illegal! ~w~Was zum Geier rauchst du eigentlich, Mann? Das ist kein simpler Plan. [BNK4_D:BANKJ4] -~w~Ach, wer braucht schon simple Plãne? +~w~Ach, wer braucht schon simple Pläne? [BNK4_E:BANKJ4] ~w~Der Kommunismus, das war ein simpler Plan. Hat Russland aber nicht viel genützt, hah? @@ -8070,13 +8070,13 @@ Straßenrennen sind verboten und illegal! ~w~Ganz ruhig. Mit einem Team wie diesem ist das alles kein Problem. [BNK4_G:BANKJ4] -~w~Cam übernimmt den Safe. Phil? Wir beide kümmern uns um die Sicherheit, und Hilary fãhrt den Fluchtwagen. +~w~Cam übernimmt den Safe. Phil? Wir beide kümmern uns um die Sicherheit, und Hilary fährt den Fluchtwagen. [BNK4_H:BANKJ4] -~w~Ãh, hast du nicht jemanden vergessen? Jemanden, der dir unzãhlige Male geholfen hat in dieser Stadt? Jemanden...? +~w~Äh, hast du nicht jemanden vergessen? Jemanden, der dir unzählige Male geholfen hat in dieser Stadt? Jemanden...? [BNK4_I:BANKJ4] -~w~Ken...Ken, richtig. Ken wãscht das Geld für uns und stellt schon mal die Drinks kalt. +~w~Ken...Ken, richtig. Ken wäscht das Geld für uns und stellt schon mal die Drinks kalt. [BNK4_J:BANKJ4] ~w~Ich verstehe nicht, was ich hier soll. @@ -8100,7 +8100,7 @@ Straßenrennen sind verboten und illegal! ~r~Du hast Phil verloren! [C_HIND:BANKJ4] -~r~Cam wurde abgehãngt! +~r~Cam wurde abgehängt! [H_HIND:BANKJ4] ~r~Hilary wurde im Stich gelassen! @@ -8115,10 +8115,10 @@ Steig in den Fluchtwagen und führe den Plan aus! Ich fahre. [BNK4_2:BANKJ4] -Na prima. Beifahrer. Wenn ich das in der Therapie erzãhle. +Na prima. Beifahrer. Wenn ich das in der Therapie erzähle. [BNK4_3A:BANKJ4] -Hey, pass auf, wo du hinfãhrst, Tommy! +Hey, pass auf, wo du hinfährst, Tommy! [BNK4_3B:BANKJ4] Tommy, Hilary macht sich so breit! @@ -8145,7 +8145,7 @@ Ja, am Ende geht das noch ins Auge! Mein Baby! Alles Schrott! [BNK4_3O:BANKJ4] -Du hãngst zu sehr an der Illusion der Ewigkeit. +Du hängst zu sehr an der Illusion der Ewigkeit. [BNK4_3P:BANKJ4] Was? @@ -8277,7 +8277,7 @@ Die stürmen den Laden! In Deckung! [BNK4_94:BANKJ4] -~w~Ok, Jungs. Jeder hãlt sich an den Plan . +~w~Ok, Jungs. Jeder hält sich an den Plan . [BM_DEAD:BANKJ4] ~r~Du brauchst den Bank Manager lebend!! @@ -8286,7 +8286,7 @@ In Deckung! BANK-MISSIONEN ERFÃœLLT! [ASSET_B:BANKJ4] -~g~Der Malibu Club generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Der Malibu Club generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [IDIOT:BANKJ4] ~r~Na super - angezogen wie ein Irrer durch die Gegend laufen und Aufmerksamkeit erregen, IDIOT! @@ -8297,7 +8297,7 @@ BANK-MISSIONEN ERFÃœLLT! Komm schon, Brauner, komm! [COK1_B:BARON1] -Dãmlicher Klepper! Dich mach ich einen Kopf kürzer! +Dämlicher Klepper! Dich mach ich einen Kopf kürzer! [COK1_C:BARON1] Wer ist der Blödmann? @@ -8321,7 +8321,7 @@ Er denkt, ich weiß nicht, wie viel Geld mir zusteht. Aber 3% zu klauen ist gena Niemand haut mich übers Ohr. NIEMAND!! [COK1_K:BARON1] -Folge ihm von seiner Wohnung aus und sieh nach, wo er hin will. Spãter erledigen wir ihn. +Folge ihm von seiner Wohnung aus und sieh nach, wo er hin will. Später erledigen wir ihn. [COK1_1:BARON1] Oh, Shit! @@ -8377,13 +8377,13 @@ Das ist der Fehler an dieser Branche. Was soll denn das? Aaaaah! [COK2_H:BARON2] -Diese Mistkerle haben mich bitter enttãuscht. +Diese Mistkerle haben mich bitter enttäuscht. [COK2_I:BARON2] Bald denkt jeder Depp, er kann in Vice City Koks verkaufen. [COK2_J:BARON2] -Was kommt als nãchstes, hah? Die verstunkene Mafia?! +Was kommt als nächstes, hah? Die verstunkene Mafia?! [COK2_K:BARON2] Diese Bandengegend ist eine Festung ohne Mauern. @@ -8490,7 +8490,7 @@ Die Straßensperren zum Festland sind aufgehoben worden. {=================================== MISSION TABLE BARON3 ===================================} [COK3_A:BARON3] -Das gefãllt euch nicht, was?! +Das gefällt euch nicht, was?! [COK3_B:BARON3] Ahahahahaa, Ahahahahaa. @@ -8630,7 +8630,7 @@ Wieso spielen wir dann die Laufburschen für ihn? Je mehr wir jetzt lernen, desto weniger müssen wir lernen, wenn wir diese Stadt übernehmen! [COK4_5:BARON4] -Dein Stil gefãllt mir. Echt erfrischend. +Dein Stil gefällt mir. Echt erfrischend. [COK4_12:BARON4] Pass auf, die kommen von überall @@ -8707,7 +8707,7 @@ Zufrieden? Ja. Und wie! [ASS1_F:BARON5] -Ihr dãmlichen Idioten! +Ihr dämlichen Idioten! [ASS1_G:BARON5] Mein schönes Haus @@ -8722,7 +8722,7 @@ Das ist für meinen Bruder! Ich habe dir vertraut, Tommy. [ASS1_K:BARON5] -Ich hãtte was aus dir gemacht... +Ich hätte was aus dir gemacht... [ASS1_L:BARON5] Gute Nacht, Mr. Diaz. @@ -8737,7 +8737,7 @@ Keine Panik, Tommy, ich geb dir Deckung. DIAZ?! Ich bin hier, um deinen Laden zu übernehmen! [ASS1_14:BARON5] -TOMMY! Du Verrãter...Du Idiot! Dich mache ich fix und fertig... +TOMMY! Du Verräter...Du Idiot! Dich mache ich fix und fertig... [ASS1_16:BARON5] ~g~Erledige Diaz! @@ -8778,7 +8778,7 @@ Du siehst nicht wie ein Bulle aus, das heißt, du hast 1 Minute. Also drück auf die Tube. [BM1_H:BIKE1] -Kent Paul sagt, ihr wãrt interessiert, die Security für einen Gig zu übernehmen, den er plant. +Kent Paul sagt, ihr wärt interessiert, die Security für einen Gig zu übernehmen, den er plant. [BM1_I:BIKE1] Kent Paul? Pfff! Kein Wunder, dass er dich schickt. @@ -8790,7 +8790,7 @@ Als er das letzte Mal hier war, ist er durch Fenster wieder gegangen - und zwar Seid ihr nun interessiert oder nicht? [BM1_L:BIKE1] -Gefãlligkeiten gibt's nur für Mitglieder. +Gefälligkeiten gibt's nur für Mitglieder. [BM1_M:BIKE1] Wie kann ich beitreten? @@ -8802,7 +8802,7 @@ Wir sind hier kein Golfklub, Kleiner. Kannst du 'n Bike fahren? Kannst du auf 'm Barhocker sitzen und saufen? [BM1_P:BIKE1] -Cougar, Zeppelin, checkt mal ab, wie diese Sissy hier fãhrt. +Cougar, Zeppelin, checkt mal ab, wie diese Sissy hier fährt. [BM1_2:BIKE1] ~g~Du brauchst eine Freeway oder eine Angel, um mitzumachen! @@ -8834,13 +8834,13 @@ Ha, ha, ha, hab dich wieder erwischt. Hey, Vercetti. [BM2_C:BIKE2] -Cougar meint, du fãhrst ziemlich gut. +Cougar meint, du fährst ziemlich gut. [BM2_D:BIKE2] Ja, wie lange soll ich noch hier rumgurken? [BM2_E:BIKE2] -Ich bin ein sehr beschãftigter Mann. +Ich bin ein sehr beschäftigter Mann. [BM2_F:BIKE2] Wenn ich mich kloppen soll, damit das klar geht, dann los. @@ -8867,7 +8867,7 @@ Das hier ist die größte Familie von Außenseitern, Outlaws und Unruhestiftern. Ein paar von uns wurden sogar von ihrem eigenen Land verraten. [BM2_N:BIKE2] -Wãhrend des Vietnamkriegs war ich eingelocht. Miese Sache. +Während des Vietnamkriegs war ich eingelocht. Miese Sache. [BM2_O:BIKE2] Drum sollst du denen ja zeigen, was Sache ist. @@ -8893,7 +8893,7 @@ Hi, Mitch. Ah, sieh an, 'Outlaw' Vercetti. [BM3_C:BIKE3] -Jetzt will ich sehen, wie du für deine Kumpels kãmpfst. +Jetzt will ich sehen, wie du für deine Kumpels kämpfst. [BM3_D:BIKE3] Eine Straßengang von hier hat den Fehler gemacht, meinen Hobel zu klauen. @@ -8902,13 +8902,13 @@ Eine Straßengang von hier hat den Fehler gemacht, meinen Hobel zu klauen. Wollten wahrscheinlich zeigen, was für coole Machos sie sind. [BM3_F:BIKE3] -Ich und die Jungs wollten ihnen eigentlich ein bisschen Respekt einblãuen. +Ich und die Jungs wollten ihnen eigentlich ein bisschen Respekt einbläuen. [BM3_G:BIKE3] Aber- [BM3_H:BIKE3] --dann dachte ich mir, das wãre doch ein guter Test für dich. +-dann dachte ich mir, das wäre doch ein guter Test für dich. [BM3_I:BIKE3] Bring mir meine Maschine zurück und Paul kriegt seine Security. @@ -8943,7 +8943,7 @@ Bring mir meine Maschine zurück und Paul kriegt seine Security. {=================================== MISSION TABLE BMX_1 ===================================} [GETBIK2:BMX_1] -Du hast ~1~ Sekunden, um auf ein Gelãndemotorrad zu steigen! +Du hast ~1~ Sekunden, um auf ein Geländemotorrad zu steigen! {=================================== MISSION TABLE BOATBUY ===================================} @@ -9013,7 +9013,7 @@ Wer war das? Tommy... ein paar Mafia-Typen... sie wollen wiederkommen, ihren Anteil abkassieren. [CAP_04:CAP_1] -Ein gewisser Mr. Forello hãtte dir Geld gegeben. Mir geht's schlecht. +Ein gewisser Mr. Forello hätte dir Geld gegeben. Mir geht's schlecht. [CAP_05:CAP_1] Forelli? SONNY Forelli? @@ -9073,7 +9073,7 @@ Du wirst dran glauben, Vercetti. ~g~Du hast den Eintreiber verloren. [CAP1_B8:CAP_1] -~r~Der Eintreiber verlangt für all deine Geschãfte Schutzgeld. +~r~Der Eintreiber verlangt für all deine Geschäfte Schutzgeld. [CAP1_B9:CAP_1] ~g~Die Mafia verlangt Schutzgeld für das Malibu! @@ -9100,22 +9100,22 @@ Du wirst dran glauben, Vercetti. ~g~Die Mafia ist im Filmstudio angekommen! [CAP1_D2:CAP_1] -~g~Die Mafia verlãsst die Bootswerft! +~g~Die Mafia verlässt die Bootswerft! [CAP1_D3:CAP_1] -~g~Die Mafia verlãsst die Eiscremefabrik! +~g~Die Mafia verlässt die Eiscremefabrik! [CAP1_D4:CAP_1] -~g~Die Mafia verlãsst das Autohaus! +~g~Die Mafia verlässt das Autohaus! [CAP1_D5:CAP_1] -~g~Die Mafia verlãsst das Taxiunternehmen! +~g~Die Mafia verlässt das Taxiunternehmen! [CAP1_D9:CAP_1] -~g~Die Mafia verlãsst den Malibu Club! +~g~Die Mafia verlässt den Malibu Club! [CAP1_D0:CAP_1] -~g~Die Mafia verlãsst das Filmstudio! +~g~Die Mafia verlässt das Filmstudio! [CAP1B10:CAP_1] Du hast die Eintreiber erledigt. Es kommen weitere. @@ -9138,7 +9138,7 @@ Tja, ich verkaufe das Autohaus ja eigentlich nur ungern. War meine erste Investition, nachdem ich Football-Profi wurde. [CAR1_6:CARBUY] -Aber es wird Zeit für eine Luftverãnderung. +Aber es wird Zeit für eine Luftveränderung. [CAR1_7:CARBUY] Sie verlassen die Stadt? @@ -9150,7 +9150,7 @@ Nicht in allzu großer Eile, hoffe ich doch? Nein, ich bereite mich nur auf mein Comeback als Football-Profi vor. Ich hatte schon aufgehört. [CAR1_10:CARBUY] -Das Geschãft lief nicht allzu gut. +Das Geschäft lief nicht allzu gut. [CAR1_11:CARBUY] Da haben sich meine Angestellten was einfallen lassen, @@ -9174,7 +9174,7 @@ Machen Sie sich mal keine Gedanken. Der Laden ist genau das, was ich brauche. [CAR1_18:CARBUY] -Ja. Dann kommen wir also ins Geschãft? +Ja. Dann kommen wir also ins Geschäft? {=================================== MISSION TABLE CARPAR1 ===================================} @@ -9185,7 +9185,7 @@ Ja. Dann kommen wir also ins Geschãft? ~r~Du hast ein Hütchen umgefahren!! [MM_1_C:CARPAR1] -~y~PASSIERE~g~ einen Checkpoint, dann lãuft die Zeit. ~g~Jeder Checkpoint bringt dir ~y~~1~ SEKUNDEN~g~. +~y~PASSIERE~g~ einen Checkpoint, dann läuft die Zeit. ~g~Jeder Checkpoint bringt dir ~y~~1~ SEKUNDEN~g~. {=================================== MISSION TABLE COPCAR ===================================} @@ -9196,13 +9196,13 @@ Bürgerwehr-Mission Level 12 beendet: Deine max. Panzerung erhöht sich auf 150 Bürgerwehr-Mission Level ~1~ [C_PASS:COPCAR] -BEDROHUNG AUSGERÃUMT: $ ~1~ +BEDROHUNG AUSGERÄUMT: $ ~1~ [KILLS:COPCAR] HITS: [C_BREIF:COPCAR] -~g~Verdãchtiger wurde zuletzt in der Gegend von ~a~ gesichtet. +~g~Verdächtiger wurde zuletzt in der Gegend von ~a~ gesichtet. [COPCART:COPCAR] ~g~Du hast ~1~ Sekunden, um zu einem Polizeifahrzeug zurückzukehren, bevor die Mission endet. @@ -9237,13 +9237,13 @@ Ach, Blödsinn, absoluter Blödsinn. Ich drucke lieber Geld. Ist gar nicht so sc In kleinerem Umfang mache ich das schon seit Jahren. [CM1_H:COUNT1] -Tatsãchlich? +Tatsächlich? [CM1_I:COUNT1] -Klar. Aber wir brãuchten gute Platten. +Klar. Aber wir bräuchten gute Platten. [CM1_J:COUNT1] -Natürlich! In Florida gibt es schon ein Geldfãlscher-Syndikat. +Natürlich! In Florida gibt es schon ein Geldfälscher-Syndikat. [CM1_K:COUNT1] Ein Syndikat? @@ -9264,10 +9264,10 @@ Sieh dir diesen Hintern an! Tja, Kleine, du weißt nicht, was dir entgeht! [CM1_2C:COUNT1] -Na, alter Freund, wie lãuft's so? +Na, alter Freund, wie läuft's so? [CM1_2D:COUNT1] -Was weißt du über Geldfãlscherei? +Was weißt du über Geldfälscherei? [CM1_2E:COUNT1] 'Oh, alles bestens, Paul, und bei dir?' @@ -9276,7 +9276,7 @@ Was weißt du über Geldfãlscherei? Komm her! [CM1_2G:COUNT1] -Ist ja gut, ist ja gut. Anscheinend bist du schwer beschãftigt. +Ist ja gut, ist ja gut. Anscheinend bist du schwer beschäftigt. [CM1_2H:COUNT1] Ãœber Falschgeld weiß ich nur, dass die Triaden die Platten liefern. @@ -9285,7 +9285,7 @@ Ist ja gut, ist ja gut. Anscheinend bist du schwer beschãftigt. Die haben eine Reederei unten bei den Docks. [CM1_2J:COUNT1] -Der Boss weiß, wann die nãchsten Platten reinkommen. +Der Boss weiß, wann die nächsten Platten reinkommen. [CM1_2K:COUNT1] Danke, Paul. @@ -9323,13 +9323,13 @@ Ok, ich rede ja! Ich rede! Ok, der Kurier holt die Druckplatten heute vom Hafen ab. [CNT2_B2:COUNT2] -Ich fange ihn ab, schnapp mir die Platten, hãng die Cops ab und komm wieder hierher. +Ich fange ihn ab, schnapp mir die Platten, häng die Cops ab und komm wieder hierher. [CNT2_B3:COUNT2] -Also, je nachdem wie es lãuft, haben wir +Also, je nachdem wie es läuft, haben wir [CNT2_B4:COUNT2] -entweder 5 Minuten zum Gelddrucken, bis das Fãlschersyndikat uns findet, oder wir haben alle Zeit der Welt. +entweder 5 Minuten zum Gelddrucken, bis das Fälschersyndikat uns findet, oder wir haben alle Zeit der Welt. [CNT2_B5:COUNT2] Jedenfalls will ich 5 Minuten nachdem ich hier bin, Scheinchen aus der Presse kommen sehen! @@ -9338,10 +9338,10 @@ Jedenfalls will ich 5 Minuten nachdem ich hier bin, Scheinchen aus der Presse ko Keine Sorge, Tommy. Wir sind bereit. [CNT2_B7:COUNT2] -Ich und die Jungs bleiben in der Nãhe, falls die Cops dir in die Quere kommen. +Ich und die Jungs bleiben in der Nähe, falls die Cops dir in die Quere kommen. [CNT2_B8:COUNT2] -Ok. Jeder weiß, was er zu tun hat? Gut. Bis spãter. +Ok. Jeder weiß, was er zu tun hat? Gut. Bis später. [CNT2_01:COUNT2] ~g~Der ~r~Kurier~g~ mit den Druckplatten kommt jeden Moment in einem Helikopter an den ~y~Docks~g~ an. @@ -9350,7 +9350,7 @@ Ok. Jeder weiß, was er zu tun hat? Gut. Bis spãter. ~r~Der Kurier mit den Platten ist im Helikopter geflohen. [CNT2_03:COUNT2] -~r~Der Kurier ist an seinem Ziel angekommen. Du kommst zu spãt! +~r~Der Kurier ist an seinem Ziel angekommen. Du kommst zu spät! [CNT2_04:COUNT2] ~r~Du hast die Platten in der Explosion zerstört! @@ -9374,7 +9374,7 @@ Privatangelegenheit. Du hast hier nichts verloren! DRUCKEREI ERWORBEN [CNT2_10:COUNT2] -~g~Die Druckerei generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Die Druckerei generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [CNT2_11:COUNT2] ~r~Die Platten liegen auf dem Meeresgrund! @@ -9409,7 +9409,7 @@ Nein, ich glaube, deine Blödheit reicht für uns beide. Hey, er sagt, du bist dumm, mein Sohn. [CUB1_J:CUBAN1] -Und ich sage, er ist ein kleines Mãdchen, Paps. +Und ich sage, er ist ein kleines Mädchen, Paps. [CUB1_K:CUBAN1] Sieh dir doch an, wie er angezogen ist. @@ -9424,7 +9424,7 @@ Du willst ein harter Kerl sein und ziehst dich an wie ein Weib? Hast du auch ein Höschen an, oder was? [CUB1_O:CUBAN1] -Was hast du gegen Frauen? Ziehst du Mãnner vor? +Was hast du gegen Frauen? Ziehst du Männer vor? [CUB1_P:CUBAN1] Ich liebe Frauen! Ich liebe alle Frauen! Ich liebe meine Mutter, Chico. @@ -9439,7 +9439,7 @@ Kannst du fahren, Amigo? Ja...wie eine Frau. [CUB1_T:CUBAN1] -Sehr witzig. Du gefãllst mir, Großer. Vielleicht kannst du mir helfen. +Sehr witzig. Du gefällst mir, Großer. Vielleicht kannst du mir helfen. [CUB1_U:CUBAN1] Vielleicht kannst du beweisen, dass du ein Mann bist. Hah? @@ -9451,7 +9451,7 @@ Schnapp dir das Boot. Zeig mir, dass du ein ganzer Kerl bist, [CUB1_X:CUBAN1] -und kein kleines Mãdchen. +und kein kleines Mädchen. [CUB1_02:CUBAN1] Ok Mann, behandle es wie eine Frau. @@ -9472,10 +9472,10 @@ Du willst ein Mann sein, Mann? Du bist ein feiges Würstchen, Kleiner, heul dich bei Mammi aus. [CUB1_08:CUBAN1] -Du bist zu nichts zu gebrauchen. Macht einen auf harter Mann, aber fãhrt wie ein Idiot. +Du bist zu nichts zu gebrauchen. Macht einen auf harter Mann, aber fährt wie ein Idiot. [CUB1_09:CUBAN1] -Mann, du bist der Hammer, Mann. Du gefãllst mir. Du gefãllst mir sehr. +Mann, du bist der Hammer, Mann. Du gefällst mir. Du gefällst mir sehr. [CUB1_10:CUBAN1] Du bist gut, Mann. Weil du ein ganzer Kerl bist. Alle meine Freunde sind ganze Kerle. @@ -9504,7 +9504,7 @@ Hi, ich bin Rico. Bist du der 'ganze Kerl'? ERLEDIGE ALLE HAITIANER!! [CUB2_M:CUBAN2] -Wer sich mit mir anlegt, hat sich den stãrksten der Stadt rausgesucht! +Wer sich mit mir anlegt, hat sich den stärksten der Stadt rausgesucht! [CUB2_A:CUBAN2] Eine Kaffee, bitte, Alberto. @@ -9534,7 +9534,7 @@ Aber dazu brauchen wir Hilfe. Ich hab dabei schon ein paar Brüder verloren. [CUB2_H:CUBAN2] -Amigo, du fãhrst gut! +Amigo, du fährst gut! [CUB2_I:CUBAN2] Für eine Frau, was? @@ -9552,7 +9552,7 @@ Bring meine Jungs da rüber, und dann erledigen wir diese Haitianer! Da ist nicht genug Platz, Mann, du brauchst ein größeres Auto. [CUB2_02:CUBAN2] -Wir brauchen Verstãrkung aus dem Café! +Wir brauchen Verstärkung aus dem Café! [CUB2_03:CUBAN2] ~g~Besorg dir ein Auto und hole die Kubaner vor Robinas Café ab. @@ -9564,13 +9564,13 @@ Wir brauchen Verstãrkung aus dem Café! Schalte den feigen Heckenschützen aus! [CUB2_07:CUBAN2] -Die kãmpfen wie Weiber! In Deckung! +Die kämpfen wie Weiber! In Deckung! [CUB2_09:CUBAN2] Heckenschütze auf dem Dach! [CUB2_11:CUBAN2] -~r~Du Idiot! Das Auto hãtten wir gebraucht! +~r~Du Idiot! Das Auto hätten wir gebraucht! [CUB2_12:CUBAN2] Hey, Amigo! Schön zu sehen, dass du's geschafft hast! @@ -9594,16 +9594,16 @@ Lass uns diesen Wagen voller Stoff nehmen und abhauen! ~g~Besorge dir ein Auto und hole die Kubaner ab. [CUB2_19:CUBAN2] -Wir werden kãmpfen wie Mãnner! +Wir werden kämpfen wie Männer! [CUB2_21:CUBAN2] -Kãmpfen wie ganze Kerle! +Kämpfen wie ganze Kerle! [CUB2_22:CUBAN2] ~g~Schalte die restlichen Haitianer aus, damit die Kubaner vorrücken können. [CUB2_23:CUBAN2] -~g~In Little Haiti wird es von Haitianern wimmeln, die sich an den Kubanern rãchen wollen. Sei vorsichtig. +~g~In Little Haiti wird es von Haitianern wimmeln, die sich an den Kubanern rächen wollen. Sei vorsichtig. [CUB2_24:CUBAN2] ~g~Kehre mit dem Van zu Robinas Café zurück und parke hinter dem Haus. @@ -9635,22 +9635,22 @@ Sie lachen mich aus, Tommy. Mich! Umberto Robina. Die tun, was sie wollen! [CUB3_I:CUBAN3] -Die tun nicht, was sie wollen, Umberto. Sie tun, was du sie tun lãsst. +Die tun nicht, was sie wollen, Umberto. Sie tun, was du sie tun lässt. [CUB3_J:CUBAN3] Was? [CUB3_K:CUBAN3] -Soll jemand aus dem Weg gerãumt werden? +Soll jemand aus dem Weg geräumt werden? [CUB3_L:CUBAN3] Ich kann das machen, aber es kostet. [CUB3_M:CUBAN3] -Ich weiß, wir sind Brüder und alles, aber hier geht's um ein Geschãft. +Ich weiß, wir sind Brüder und alles, aber hier geht's um ein Geschäft. [CUB3_N:CUBAN3] -Tommy. Du bist ein echter Mann. Ein Geschãftsmann, ein Gentleman. +Tommy. Du bist ein echter Mann. Ein Geschäftsmann, ein Gentleman. [CUB3_O:CUBAN3] Die Haitianer, sie erwarten eine Schiffladung Stoff, richtig gutes Zeug. @@ -9674,13 +9674,13 @@ Hey, Rico. Nettes Boot. Bist du bereit? ~g~Bringe die Drogen und das Geld zu Umberto. [CUB3_05:CUBAN3] -Ja, Tommy. Also, sei ein guter Kapitãn heute. +Ja, Tommy. Also, sei ein guter Kapitän heute. [CUB3_06:CUBAN3] Mein Boot nützt mir nichts, wenn es durchlöchert ist, ok? [CUB3_07:CUBAN3] -~g~Begib dich zu Rico. Er fãhrt dich zum Treffpunkt. +~g~Begib dich zu Rico. Er fährt dich zum Treffpunkt. [CUB3_02:CUBAN3] ~g~ERLEDIGE ALLE HAITIANER AUF DEN BOOTEN!! @@ -9808,7 +9808,7 @@ Ich kannte mal eine schöne Frau, die hat hier gewohnt. Die machen gute Pizza hier. [CUB4_22:CUBAN4] -Hey, Mann! Du fãhrst wie ein Verrückter! +Hey, Mann! Du fährst wie ein Verrückter! [CUB4_23:CUBAN4] Hast du dich verfahren, Mann? @@ -9817,7 +9817,7 @@ Hast du dich verfahren, Mann? Du hast Pepe vergessen, hole ihn. [CUB4_03:CUBAN4] -~g~Bleib im Wagen, bis er sicher auf dem Gelãnde geparkt ist. +~g~Bleib im Wagen, bis er sicher auf dem Gelände geparkt ist. [CUB4_26:CUBAN4] ~g~Nimm dir Pepe, fahr Richtung Norden nach Little Haiti und klaue einen Voodoo. @@ -9867,7 +9867,7 @@ Und jetzt kommen auf einmal deine italienischen Brüder an und wollen mir Zement Halt den Mund, Ken. Setz dich. [FIN1_08:FINALE] -Lance, was lãuft hier, verdammt? +Lance, was läuft hier, verdammt? [FIN1_09:FINALE] Deine Freunde aus dem Norden, Tommy. Die sind nicht sehr froh, dass du ihren Mann erledigt hast. @@ -9876,7 +9876,7 @@ Deine Freunde aus dem Norden, Tommy. Die sind nicht sehr froh, dass du ihren Man Sie kommen heute, um nach dem Rechten zu sehen. [FIN1_11:FINALE] -Sie haben lãnger gebraucht, als ich dachte... +Sie haben länger gebraucht, als ich dachte... [FIN1_12:FINALE] Jungs, wir müssen denen ein für alle Mal klar machen, dass das mein Laden ist. MEINER! @@ -9900,7 +9900,7 @@ Ich war 15 Jahre weg vom Fenster, bin nicht mehr auf dem Laufenden, was Manieren angeht. [FIN2_05:FINALE] -Immer Wut im Bauch, hã, Tommy? +Immer Wut im Bauch, hä, Tommy? [FIN2_06:FINALE] Ich sag's ja, dein Temperament wird dir nochmal schlecht bekommen. @@ -9909,7 +9909,7 @@ Ich sag's ja, dein Temperament wird dir nochmal schlecht bekommen. In den Koffern sind 20 Millionen... [FIN2_08:FINALE] -Wie viele waren es denn? Zehn? Nein, elf Mãnner. +Wie viele waren es denn? Zehn? Nein, elf Männer. [FIN2_09:FINALE] So kommt man zu dem Spitznamen 'Harwood-Butcher'! Hehehe! @@ -9933,19 +9933,19 @@ Holt das Geld! Weißt du, Tommy, ich hab für dich getan, was nur ging. Himmel und Hölle in Bewegung gesetzt. [FIN2_16:FINALE] -Ich war dein Freund. Ich dachte, du nimmst Vernunft an. Kapierst, was gut fürs Geschãft ist. +Ich war dein Freund. Ich dachte, du nimmst Vernunft an. Kapierst, was gut fürs Geschäft ist. [FIN2_17:FINALE] -Ich hab dir vertraut, Tommy, und du hast mich enttãuscht. +Ich hab dir vertraut, Tommy, und du hast mich enttäuscht. [FIN2_18:FINALE] -Aber wenigstens einer in deiner mickrigen Organisation weiß, wie man Geschãfte macht. +Aber wenigstens einer in deiner mickrigen Organisation weiß, wie man Geschäfte macht. [FIN2_19:FINALE] Stimmt's, Lance? [FIN2_20:FINALE] -Sorry, Tommy. So lãuft's in Vice City. So lãuft das Geschãft. +Sorry, Tommy. So läuft's in Vice City. So läuft das Geschäft. [FIN2_21:FINALE] Du hast uns verraten... @@ -9969,7 +9969,7 @@ Dass ich den Schwanz einziehe und abhaue, um nicht das Gesicht zu verlieren? Nein. [FIN2_28:FINALE] -Ich wollte dich nur noch ein bisschen ãrgern, bevor ich dich fertig mache. +Ich wollte dich nur noch ein bisschen ärgern, bevor ich dich fertig mache. [FIN3_01:FINALE] Tommy? @@ -9981,16 +9981,16 @@ Oh Gott, Tommy! Was ist passiert? Wonach sieht's denn aus? [FIN3_04:FINALE] -Sieht aus, als wãr dein Anzug ruiniert! +Sieht aus, als wär dein Anzug ruiniert! [FIN3_05:FINALE] Und das war ein wunderbarer Anzug! Tommy, Herrgott, was ist passiert? [FIN3_06:FINALE] -Kleine Meinungsverschiedenheit mit einem Geschãftsfreund. Wie das so ist. +Kleine Meinungsverschiedenheit mit einem Geschäftsfreund. Wie das so ist. [FIN3_07:FINALE] -Wenn ich eine Meinungsverschiedenheit mit einem Geschãftsfreund habe, schick ich ihm einen bösen Brief. +Wenn ich eine Meinungsverschiedenheit mit einem Geschäftsfreund habe, schick ich ihm einen bösen Brief. [FIN3_08:FINALE] Oder ich pinkle ihm in den Briefkasten, aber ich fang nicht den 3. Weltkrieg an. @@ -10011,10 +10011,10 @@ Er ist neurotisch, unsicher, selbstsüchtig - Er ist ein Arschloch! Gut, dass du ihn fertig gemacht hast! [FIN3_14:FINALE] -Ich glaub auch nicht, dass wir nochmal Ãrger mit denen aus dem Norden kriegen... +Ich glaub auch nicht, dass wir nochmal Ärger mit denen aus dem Norden kriegen... [FIN3_15:FINALE] -Die aus dem Norden gibt's nãmlich nicht mehr. +Die aus dem Norden gibt's nämlich nicht mehr. [FIN3_16:FINALE] Gibt nur noch die im Süden. @@ -10029,7 +10029,7 @@ Na, was meinst du, was das heißt? Dass wir jetzt die Herren im Haus sind... ich meine, dass DU der Herr im Haus bist. Oh, Tommy... [FIN3_20:FINALE] -Weißt du, Ken, das könnte der Beginn einer wunderbaren Geschãftsbeziehung sein... +Weißt du, Ken, das könnte der Beginn einer wunderbaren Geschäftsbeziehung sein... [FIN3_21:FINALE] Schließlich bist du ein hinterlistiger, mieser kleiner Dieb... @@ -10041,7 +10041,7 @@ und ich bin ein verurteilter Psychopath und Dealer. Ich weiß. Ist das nicht wunderbar? [FIN_B1:FINALE] -~g~Erledige den Verrãter ~y~Vance~g~. +~g~Erledige den Verräter ~y~Vance~g~. [FIN_B2:FINALE] ~g~Erledige ~p~Sonny~g~, um die Sache ein für alle Mal zuende zu bringen. @@ -10050,7 +10050,7 @@ Ich weiß. Ist das nicht wunderbar? ~g~Die Mafia will dein Geld stehlen. Verteidige den Safe. [FIN_B4:FINALE] -~g~Du hãltst nicht mehr lange durch. Hol dir unten ein wenig ~w~Energie~g~. +~g~Du hältst nicht mehr lange durch. Hol dir unten ein wenig ~w~Energie~g~. [FIN_B5:FINALE] ~g~Die Mafia stiehlt dein Geld. Verteidige den ~c~Safe. @@ -10067,7 +10067,7 @@ Ich weiß. Ist das nicht wunderbar? Feuer gelöscht! [F_FAIL2:FIRETRK] -~r~Du kommst zu spãt! +~r~Du kommst zu spät! [F_CANC:FIRETRK] ~r~Feuerwehr-Mission abgebrochen! @@ -10117,7 +10117,7 @@ Nein danke. Es ist mir peinlich, aber es scheint, unser Problem ist zum Teil auf das lose Mundwerk einer mir vertrauten Person zurückzuführen. [GEN1_F:GENERA1] -Seit Jahren schleppe ich Gonzalez mit, aber nun erreicht seine Unfãhigkeit einen neuen Höhepunkt. +Seit Jahren schleppe ich Gonzalez mit, aber nun erreicht seine Unfähigkeit einen neuen Höhepunkt. [GEN1_G:GENERA1] Es ist nur gerecht, wenn Sie Gonzalez erledigen. @@ -10129,7 +10129,7 @@ War er es? Mir geht es in erster Linie um das Geld. Er ist in seinem Penthouse, vermutlich halb betrunken. Nehmen Sie das hier. [GEN1_06:GENERA1] -Er hat eine Kettensãge!! +Er hat eine Kettensäge!! [GEN1_07:GENERA1] Bleib mir vom Leib, du elender Mistkerl! @@ -10209,7 +10209,7 @@ Tommy! Setzen Sie sich zu mir. Sieht das nicht köstlich aus? Tapirschnauze? [COL2_C:GENERA2] -Ãh... Nein. Nein, danke. +Äh... Nein. Nein, danke. [COL2_D:GENERA2] Tommy, Sie sind wie eine Pampas-Brise, die mich vom Gestank der Korruption befreit hat. @@ -10218,19 +10218,19 @@ Tommy, Sie sind wie eine Pampas-Brise, die mich vom Gestank der Korruption befre Natürlich muss ich so tun, als trauere ich um ihn und muss wie immer meine Arbeit machen. [COL2_F:GENERA2] -Das bringt mich meinem Geld nicht nãher... +Das bringt mich meinem Geld nicht näher... [COL2_G:GENERA2] Tommy, mein Freund, Sie sind hier nicht in Liberty. Hier regeln wir Dinge anders. [COL2_H:GENERA2] -Ich werde weiter nachforschen, zunãchst hãtte ich aber ein lukratives Geschãft abzuschließen. +Ich werde weiter nachforschen, zunächst hätte ich aber ein lukratives Geschäft abzuschließen. [COL2_I:GENERA2] Freunden tu ich gern einen Gefallen, Cortez... [COL2_J:GENERA2] -Sie sind ein guter Freund, Tommy. Ich wusste, ich kann auf Sie zãhlen. +Sie sind ein guter Freund, Tommy. Ich wusste, ich kann auf Sie zählen. [COL2_K:GENERA2] Sie müssen sich mit einem Kurier treffen, der wertvolle 'Technologie' für mich beschafft hat. @@ -10242,7 +10242,7 @@ Die Regen ist sich sehr nass um diese Jahreszeit... Was? [COL2_3:GENERA2] -Ãh, comment? +Äh, comment? [COL2_4:GENERA2] Hören Sie, Cortez schickt mich. Geben Sie mir die verdammten Mikrochips. @@ -10289,7 +10289,7 @@ Thomas, danke, dass Sie kommen. Verzeihen Sie, wenn ich gleich zur Sache komme. [GEN3_C:GENERA3] -Diaz bat mich, eine kleinere geschãftliche Transaktion zu überwachen. +Diaz bat mich, eine kleinere geschäftliche Transaktion zu überwachen. [GEN3_D:GENERA3] Wird hoffentlich besser laufen als die letzte, hah? @@ -10301,7 +10301,7 @@ Darum habe ich an Sie gedacht, mein Freund. Ich habe etwas zu Ihrem Schutz beim Parkhaus deponiert. [GEN3_G:GENERA3] -Holen Sie es ab. Und dann bewachen Sie Diaz' Mãnner bei dem Deal. +Holen Sie es ab. Und dann bewachen Sie Diaz' Männer bei dem Deal. [GEN3_H:GENERA3] Danke, Amigo. @@ -10346,7 +10346,7 @@ Tommy! Ich brauch Hilfe! Keine Sorge, ich hab alles im Griff! [GEN3_16:GENERA3] -Diaz' Mãnner werden umgemãht! +Diaz' Männer werden umgemäht! [GEN3_19:GENERA3] ~g~Haitianer! Sie greifen an! Beschütze Diaz! @@ -10373,7 +10373,7 @@ Diaz' Gesundheitszustand: ~r~Er ist mit dem Geld entwischt! Dafür macht Diaz dich kalt! [GEN3_33:GENERA3] -~r~Du sollst Diaz und seine Mãnner bewachen, nicht beschießen! +~r~Du sollst Diaz und seine Männer bewachen, nicht beschießen! [GEN3_34:GENERA3] ~r~Es gibt keinen Deal, wenn du die Kubaner erledigst! @@ -10415,7 +10415,7 @@ Tommy! Verdammt! [GEN3_50:GENERA3] -~r~Du hast Diaz' Geld verloren! Versuch das nãchste Mal, das Geld nicht zu vernichten! +~r~Du hast Diaz' Geld verloren! Versuch das nächste Mal, das Geld nicht zu vernichten! [GEN3_51:GENERA3] Noch mehr verdammte Haitianer in einem beschissenen Van! @@ -10427,10 +10427,10 @@ Steht nicht rum, ihr Idioten! Schnappt euch diesen haitianischen Mistkerl! Tommy! Ich bleibe hier und passe auf Diaz auf! [GEN3_18:GENERA3] -~g~Die Kubaner kommen. Bleib in Diaz' Nãhe. Ãœberwache den Deal. Pass auf Diaz und Lance auf. +~g~Die Kubaner kommen. Bleib in Diaz' Nähe. Ãœberwache den Deal. Pass auf Diaz und Lance auf. [GEN3_56:GENERA3] -~r~Diaz ist hinüber, er ist in einen Hinterhalt geraten. Pass das nãchste Mal auf ihn auf! +~r~Diaz ist hinüber, er ist in einen Hinterhalt geraten. Pass das nächste Mal auf ihn auf! [GEN3_57:GENERA3] Die Kruger ist ein Sturmgewehr, das einem erlaubt, in der subjektiven Kamera-Einstellung manuell zu zielen. @@ -10451,7 +10451,7 @@ Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Sturmgewehr ~h~abzufeuern~w~ Drücke die ~h~~k~~PED_FIREWEAPON~~w~-Taste, um das Sturmgewehr ~h~abzufeuern~w~. [GEN3_63:GENERA3] -Auf~h~ Motorrãdern ~w~kann man nicht nur im Vorbeifahren seitlich auf Ziele schießen, man kann auch ~h~geradeaus feuern~w~. +Auf~h~ Motorrädern ~w~kann man nicht nur im Vorbeifahren seitlich auf Ziele schießen, man kann auch ~h~geradeaus feuern~w~. [GEN3_64:GENERA3] { reVC update } Um auf einem Motorrad sitzend geradeaus zu feuern, drücke die ~h~~k~~VEHICLE_FIREWEAPON~~w~-Taste. @@ -10498,7 +10498,7 @@ Schaffen Sie den Zivilisten aus dem Weg, Soldat! - Sir, zu Befehl, Sir! Zivilist im PANZER! HALTET IHN AUF! [COL4_13:GENERA4] -Dies ist ein Militãrkonvoi, machen Sie den Weg frei! +Dies ist ein Militärkonvoi, machen Sie den Weg frei! [COL4_14:GENERA4] Erledigen sie ihn, Soldat. @@ -10558,7 +10558,7 @@ Man erhebt keine Anschuldigungen gegen einen Mann wie Diaz. Ich habe nur laut na Egal. Ich habe einen Vorschlag, der lukrativ für Sie sein könnte... [COL4_07:GENERA4] -Ich habe keine Zeit für weitere Auftrãge, Cortez. +Ich habe keine Zeit für weitere Aufträge, Cortez. [COL4_08:GENERA4] Ein Mann mit solch bedrohlichen Schulden sollte doch um jede Verdienstmöglichkeit dankbar sein. Hören Sie mich wenigstens an. @@ -10567,7 +10567,7 @@ Ein Mann mit solch bedrohlichen Schulden sollte doch um jede Verdienstmöglichke Na gut... [COL410:GENERA4] -Ich habe einen Kãufer für ein 'Militãrgerãt', das durch die Stadt transportiert wird. Beschaffen Sie es! +Ich habe einen Käufer für ein 'Militärgerät', das durch die Stadt transportiert wird. Beschaffen Sie es! [COL411:GENERA4] Wenn Sie es haben, rufen Sie mich unverzüglich an... @@ -10582,7 +10582,7 @@ Was ist mit dem Kanonier? - Weiß nicht, Sir! Los, sehen Sie nach, Soldat! - Zu Befehl, Sir! [COL4_B1:GENERA4] -~g~Besorge das militãrische Fahrzeug, das durch die Stadt gefahren wird. +~g~Besorge das militärische Fahrzeug, das durch die Stadt gefahren wird. [COL4_B3:GENERA4] ~g~Liefere den Panzer in der Garage des Colonels ab, bevor er sich selbst zerstört. @@ -10611,10 +10611,10 @@ Die Franzosen wollen ihre Lenkwaffen-Chips wieder und nach dem letzten Zwischenf zieht es mich in sicherere Gefilde. [COL5A_5:GENERA5] -Wãre es nicht sicherer zu fliegen? +Wäre es nicht sicherer zu fliegen? [COL5A_6:GENERA5] -Ich wãre erledigt, bevor ich eingecheckt hãtte. Außerdem muss ich Ware außer Landes schaffen. +Ich wäre erledigt, bevor ich eingecheckt hätte. Außerdem muss ich Ware außer Landes schaffen. [COL5A_7:GENERA5] Brauchen Sie noch einen Bodyguard? @@ -10650,7 +10650,7 @@ Hören Sie auf, auf mich zu schießen! Tommy, die sollen aufhören, auf mich zu schießen! [COL5_10:GENERA5] -Ich genieße diplomatische Immunitãt. +Ich genieße diplomatische Immunität. [COL5_11:GENERA5] Nicht schießen, ich bin ein Colonel! @@ -10668,7 +10668,7 @@ Tommy, wo ich hinsehe, überall Franzosen! Wie ich es hasse! Tommy, alles in Ordnung? [COL5_16:GENERA5] -Das ist für Piaf und Gainesbourg und für euer dãmliches französisches Weißbrot! +Das ist für Piaf und Gainesbourg und für euer dämliches französisches Weißbrot! [COL5_1:GENERA5] Backbord! Backbord! @@ -10686,7 +10686,7 @@ Sie haben einen Helikopter! ~g~Beschütze den Colonel und seine Jacht um jeden Preis. [COL5_B2:GENERA5] -~g~Geh nach vorn und rãume der Jacht des Colonels den Weg frei. +~g~Geh nach vorn und räume der Jacht des Colonels den Weg frei. [COL5_B3:GENERA5] ~r~Der Colonel ist hinüber! @@ -10698,7 +10698,7 @@ Sie haben einen Helikopter! Ich werde meine Privatbarkasse zu Wasser lassen. Sie gehört Ihnen, als Ausdruck meiner Dankbarkeit. [COL5_B5:GENERA5] -~g~Schieß die Helikopter ab, gefãhrde nicht die Jacht. +~g~Schieß die Helikopter ab, gefährde nicht die Jacht. [COL5_B6:GENERA5] ~g~Du hast keine Munition mehr. Hol dir an der Treppe des Oberdecks Nachschub. @@ -10715,10 +10715,10 @@ Hallo? Hallo? Komm rein, mein Lieber, und ruh dich aus. [HAM1_C:HAIT1] -Du musst der große böse Mann sein, von dem mein Großvater erzãhlt hat. +Du musst der große böse Mann sein, von dem mein Großvater erzählt hat. [HAM1_D:HAIT1] -Er erzãhlte immer von dir, wenn er zu Besuch kam, +Er erzählte immer von dir, wenn er zu Besuch kam, [HAM1_E:HAIT1] und von den anderen, die auf dich warten. @@ -10745,25 +10745,25 @@ Aber wenn du der alten Tante Poulet hilfst, hilft sie dir vielleicht auch. Vielleicht kann sie dir danach einen kleinen Talisman schenken. [HAM1_M:HAIT1] -Ein bisschen Magie, die den Mãnnern des Gesetzes schlechte Augen macht, hmm? +Ein bisschen Magie, die den Männern des Gesetzes schlechte Augen macht, hmm? [HAM1_N:HAIT1] -Hören Sie, das ist alles sehr, ãh... Sie geben mir was? +Hören Sie, das ist alles sehr, äh... Sie geben mir was? [HAM1_O:HAIT1] Ich...ich...ich glaube, ich bin hier falsch. [HAM1_P:HAIT1] -Erweise mir ein paar Gefãlligkeiten, Tommy... +Erweise mir ein paar Gefälligkeiten, Tommy... [HAM1_Q:HAIT1] -Die Kubaner, miese, hochnãsige Narren, hmmm, +Die Kubaner, miese, hochnäsige Narren, hmmm, [HAM1_R:HAIT1] -haben meine lieben Haiti-Boys sehr geãrgert. +haben meine lieben Haiti-Boys sehr geärgert. [HAM1_S:HAIT1] -Jetzt haben sie den Polizisten erzãhlt, wo ich meine Pülverchen versteckt habe. +Jetzt haben sie den Polizisten erzählt, wo ich meine Pülverchen versteckt habe. [HAM1_T:HAIT1] Sie denken, das sind Drogen, diese Dummköpfe. @@ -10775,7 +10775,7 @@ Sei ein braver Bub, Tommy, und hole Tante Poulet die Pülverchen. Ja, ja. Sicher, sicher. [HAM1_1:HAIT1] -~g~Die Cops nãhern sich dem Zeug. Hol es, bevor sie dort sind. +~g~Die Cops nähern sich dem Zeug. Hol es, bevor sie dort sind. [HAM1_2:HAIT1] ~r~Die Cops waren schneller bei dem Zeug! @@ -10784,7 +10784,7 @@ Ja, ja. Sicher, sicher. ~g~Bring das Zeug zum Unterschlupf! [HAM1_4:HAIT1] -~g~Gut. Jetzt das nãchste! +~g~Gut. Jetzt das nächste! [HAM1_6:HAIT1] ~r~Das Zeug wurde vernichtet, du Idiot! @@ -10840,7 +10840,7 @@ Ja... Das kommt mir so bekannt vor hier. Ein Geruch aus meiner Kindheit - das muss ein Déjà-vu sein... [HAT2_6:HAIT2] -Tommy, du kannst was für mich tun, ich werd's dir erklãren. Hör gut zu, ja? +Tommy, du kannst was für mich tun, ich werd's dir erklären. Hör gut zu, ja? [HAT2_7:HAIT2] Sie sehen aus wie jemand, den... @@ -10866,7 +10866,7 @@ Um eine Bombe abzuwerfen, drück die ~h~~k~~VEHICLE_FIREWEAPON~~w~-Taste. ~h~~k~ {=================================== MISSION TABLE HAIT3 ===================================} [HAM3_A:HAIT3] -Hallo, hallo, ich, ãh, ich suche hier jemanden... +Hallo, hallo, ich, äh, ich suche hier jemanden... [HAM3_B:HAIT3] Du siehst hungrig aus, Tommy. @@ -10878,7 +10878,7 @@ Kenne ich Sie? Sei jetzt still. [HAM3_E:HAIT3] -Eine Gefãlligkeit noch, dann lasse ich dich gehen, Tommy. +Eine Gefälligkeit noch, dann lasse ich dich gehen, Tommy. [HAM3_F:HAIT3] Meine Jungs haben die Kubaner zum Kampf gefordert. @@ -10890,13 +10890,13 @@ Aber ohne Kanonen. Hmm, aber die Kubaner werden ihr blaues Wunder erleben. [HAM3_I:HAIT3] -Wenn sie in den Straßen kãmpfen, nimmst du dieses Gewehr und rãumst auf. +Wenn sie in den Straßen kämpfen, nimmst du dieses Gewehr und räumst auf. [HAM3_J:HAIT3] Keiner sieht dich, keiner hört dich. [HAM3_K:HAIT3] -Wenn du das für mich tust, Tommy, dann kommst frei aus meinen Schürzenbãndern. +Wenn du das für mich tust, Tommy, dann kommst frei aus meinen Schürzenbändern. [HAM3_1:HAIT3] ~g~Wir müssen gewinnen. Werden alle Haitianer erledigt, haben wir verloren. @@ -10914,7 +10914,7 @@ Wenn du das für mich tust, Tommy, dann kommst frei aus meinen Schürzenbãndern ~g~Es gibt Verluste unter den Haitianern! Du musst besser zielen! [HAM3_7:HAIT3] -~g~Vorsicht! Die Kubaner haben Verstãrkung mitgebracht. Schalte sie alle aus!! +~g~Vorsicht! Die Kubaner haben Verstärkung mitgebracht. Schalte sie alle aus!! [HAM3_2:HAIT3] ~r~Die Haitianer sind weg vom Fenster! @@ -10931,10 +10931,10 @@ Tommy! Tommy, wir haben uns lange nicht gesehen. Hallo, Sonny. [INTB_C:HOTEL] -Ich weiß, ich weiß. Dir kommen vor Rührung die Trãnen. +Ich weiß, ich weiß. Dir kommen vor Rührung die Tränen. [INTB_D:HOTEL] -15 Jahre ist es her - dabei kommt's mir vor, als wãr's gestern gewesen. +15 Jahre ist es her - dabei kommt's mir vor, als wär's gestern gewesen. [INTB_E:HOTEL] DU hast leicht reden. @@ -10976,7 +10976,7 @@ Und ich liefere dir die Kerle, die dahinterstecken. Das weiß ich doch. Du bist kein Idiot, Tommy, aber ich warne dich - ich bin auch keiner. [INTB_R:HOTEL] -Wenn du's nicht wãrst - ein anderer wãr lãngst fãllig! +Wenn du's nicht wärst - ein anderer wär längst fällig! [INTB_S:HOTEL] Aber uns beide verbindet eine alte Freundschaft. Ich lasse dich das regeln. @@ -10996,43 +10996,43 @@ Du hörst von mir. ~g~Parke den Eis-Wagen und drücke ~h~~k~~VEHICLE_HORN~~w~, um den Eiscreme-Jingle abzuspielen, damit deine Kunden wissen, dass du Ware zu verkaufen hast. [ICC1_3:ICECRE1] -~g~Für jede Transaktion bekommst du Geld. Aber je mehr Transaktionen du tãtigst, desto stãrker wird die Polizei auf dich aufmerksam. +~g~Für jede Transaktion bekommst du Geld. Aber je mehr Transaktionen du tätigst, desto stärker wird die Polizei auf dich aufmerksam. [ICC1_4:ICECRE1] ~g~In dieser Gegend sind keine Kunden. Versuche es woanders. [ICC1_5:ICECRE1] -Getãtigte Deals: +Getätigte Deals: [ICC1_6:ICECRE1] ~g~Nimm den Mr. Whopee, um in Vice City Cherry Popper-Produkte zu vertreiben. [ICC1_7:ICECRE1] -~g~Für jede Transaktion bekommst du Geld. Aber je mehr Transaktionen du tãtigst, desto stãrker wird die Polizei auf dich aufmerksam. +~g~Für jede Transaktion bekommst du Geld. Aber je mehr Transaktionen du tätigst, desto stärker wird die Polizei auf dich aufmerksam. [ICC1_8:ICECRE1] -~g~Um eine Transaktion zu tãtigen, ~h~parke deinen Wagen ~g~und drücke die ~h~~k~~VEHICLE_HORN~~g~, um den Eiscreme-Jingle abzuspielen, damit deine Kunden wissen, dass du Ware zu verkaufen hast. +~g~Um eine Transaktion zu tätigen, ~h~parke deinen Wagen ~g~und drücke die ~h~~k~~VEHICLE_HORN~~g~, um den Eiscreme-Jingle abzuspielen, damit deine Kunden wissen, dass du Ware zu verkaufen hast. [ICC1_9:ICECRE1] -~g~Andere Gangs werden es nicht gern sehen, dass du in ihrem Revier Geschãfte machst, du musst also mit Feindseligkeiten rechnen. +~g~Andere Gangs werden es nicht gern sehen, dass du in ihrem Revier Geschäfte machst, du musst also mit Feindseligkeiten rechnen. [ICC1_10:ICECRE1] -~g~Du hast ~1~ Deals getãtigt! +~g~Du hast ~1~ Deals getätigt! [ICC1_11:ICECRE1] -~g~Du hast ~1~ Deal getãtigt. +~g~Du hast ~1~ Deal getätigt. [ICC1_12:ICECRE1] OBJEKT ERWORBEN! [ICC1_13:ICECRE1] -~r~Du hast keine Deals getãtigt! +~r~Du hast keine Deals getätigt! [ICC1_14:ICECRE1] EISCREME-MISSIONEN ERFÃœLLT [ICC1_15:ICECRE1] -~g~Die Eiscremefabrik generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Die Eiscremefabrik generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [ICC1_16:ICECRE1] ~g~Nimm den Mr. Whoopee, um in Vice City Cherry Popper-Produkte zu vertreiben. @@ -11041,7 +11041,7 @@ EISCREME-MISSIONEN ERFÃœLLT EISCREMEFABRIK-MISSIONEN ERFÃœLLT [ICE_AT2:ICECRE1] -~g~Die Cherry Popper-Fabrik generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Die Cherry Popper-Fabrik generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [ICC1_17:ICECRE1] Stoff-Auslieferungs-Mission beendet @@ -11050,7 +11050,7 @@ Stoff-Auslieferungs-Mission beendet Eiscremeverkauf insgesamt: $~1~ [ICC1_19:ICECRE1] -Insgesamt getãtigte Deals: ~1~ +Insgesamt getätigte Deals: ~1~ {=================================== MISSION TABLE ICECUT ===================================} @@ -11058,7 +11058,7 @@ Insgesamt getãtigte Deals: ~1~ Sie sind schmutzige, verrotzte, verlauste, eklige, sabbernde kleine... [ICC1_I:ICECUT] -Ein Baby... ein widerwãrtiges, grãßliches, ekelhaftes kleines Gör! +Ein Baby... ein widerwärtiges, gräßliches, ekelhaftes kleines Gör! [ICC1_J:ICECUT] Mammi liebt dich nicht. Du kleines Stück Scheiße! @@ -11103,10 +11103,10 @@ Sie stellen doch Softeis her, oder? Das essen doch nur Kinder. Sind Sie komplett irre? [ICC1_R:ICECUT] -Erklãren Sie mir das mal - warum Kinder glücklich machen, wenn Sie sie hassen? +Erklären Sie mir das mal - warum Kinder glücklich machen, wenn Sie sie hassen? [ICC1_S:ICECUT] -Oh, du dãmliches, verrotztes, verlaustes- +Oh, du dämliches, verrotztes, verlaustes- [ICC1_T:ICECUT] Schluss jetzt! @@ -11138,7 +11138,7 @@ OBJEKT ERWORBEN! Tommy Vercetti...Hah! Shit. [INT1_B:INTRO] -Hãtte nicht gedacht, dass der noch mal rauskommt. +Hätte nicht gedacht, dass der noch mal rauskommt. [INT1_C:INTRO] Er hat den Kopf eingezogen. War fast vergessen. @@ -11150,7 +11150,7 @@ Aber bald wird man sich an ihn erinnern. Wenn man ihn wieder durch ihre Viertel tigern sieht. [INT1_F:INTRO] -Wird schlecht fürs Geschãft sein. +Wird schlecht fürs Geschäft sein. [INT1_G:INTRO] Tja, was sollen wir machen, Sonny? @@ -11168,7 +11168,7 @@ In Vice City liegt zurzeit das Geld auf der Straße. Die Kolumbianer, die Mexikaner, [INT1_L:INTRO] -ja, sogar die kubanischen Flüchtlinge machen alle glãnzende Geschãfte. +ja, sogar die kubanischen Flüchtlinge machen alle glänzende Geschäfte. [INT1_M:INTRO] Aber das geht nur mit Drogen, Sonny. @@ -11177,10 +11177,10 @@ Aber das geht nur mit Drogen, Sonny. Aber keine der Familien rührt dieses Zeug an! [INT1_O:INTRO] -Die Zeiten ãndern sich. +Die Zeiten ändern sich. [INT1_P:INTRO] -Die Familien können nicht wegsehen, wãhrend unsere Feinde groß abkassieren. +Die Familien können nicht wegsehen, während unsere Feinde groß abkassieren. [INT1_Q:INTRO] Also schicken wir jemanden für die Drecksarbeit da runter @@ -11219,16 +11219,16 @@ und schauen mal bei ihm rein, klar? Mal sehen, wie er sich macht. [INT2_A:INTRO] -Hey, hey, Jungs! Ich bin, ãh, Ken Rosenberg. Ha, ha, sehr gut, hey! +Hey, hey, Jungs! Ich bin, äh, Ken Rosenberg. Ha, ha, sehr gut, hey! [INT2_B:INTRO] -Tja, ãh, ich soll euch zu dem Trefffen fahren, okay? +Tja, äh, ich soll euch zu dem Trefffen fahren, okay? [INT2_C:INTRO] Ich hab mit den Lieferanten geredet, und die würden, [INT2_D:INTRO] -liebend gern mit uns ins Geschãft kommen. Und, ãh, +liebend gern mit uns ins Geschäft kommen. Und, äh, [INT2_E:INTRO] wenn alles gut geht, dann dürfte da @@ -11243,7 +11243,7 @@ gut... Okay. Es sind zwei Brüder, ok? [INT2_I:INTRO] -Der eine schmeißt, ãh, den Laden, +Der eine schmeißt, äh, den Laden, [INT2_J:INTRO] der andere macht die Flüge. @@ -11276,10 +11276,10 @@ Ich pass auf den Wagen auf. Ok, das sind sie, da im Helikopter. [INT3_B:INTRO] -Ok, das ganze lãuft so ab: +Ok, das ganze läuft so ab: [INT3_C:INTRO] -Die wollen eine saubere Ãœbergabe auf offenem Gelãnde. +Die wollen eine saubere Ãœbergabe auf offenem Gelände. [INT3_D:INTRO] Alles klar? Ok, dann wollen wir mal. @@ -11288,7 +11288,7 @@ Alles klar? Ok, dann wollen wir mal. Ok, ganz ruhig jetzt. [INT3_F:INTRO] -Ich bin hier. Der Wagen lãuft, Baby! +Ich bin hier. Der Wagen läuft, Baby! [INT3_G:INTRO] Hast du's? @@ -11413,7 +11413,7 @@ Los, wir verschwinden von hier. Dank dir ist mein ganzer schöner Plan im Eimer. Das hast du sauber vermasselt, Lance. [RESC_5:KENT1] -Er hat meinen Bruder auf dem Gewissen. Soll ich ihm den Rasen mãhen? +Er hat meinen Bruder auf dem Gewissen. Soll ich ihm den Rasen mähen? [RESC_6:KENT1] Wir müssen diesen Diaz erledigen bevor er uns erledigt. @@ -11457,7 +11457,7 @@ BENÖTIGTE ZEIT: ~b~ZEIT: ~1~:0~1~ [GETBIKE:KICKSTT] -~g~Du hast ~1~ Sekunden, um zu einer Gelãndemaschine zurückzukehren, bevor die Mission endet. +~g~Du hast ~1~ Sekunden, um zu einer Geländemaschine zurückzukehren, bevor die Mission endet. [KICK1_1:KICKSTT] ~g~Absolviere den Kurs so schnell wie möglich. @@ -11507,7 +11507,7 @@ Gute Idee. SEHR gute Idee. Lass mich nachdenken, lass mich nachdenken. OH! Da gibt es diesen Colonel a.D., Colonel Juan Garcia Cortez. [LAW1_J:LAWYER1] -Der half mir, diesen Deal einzufãdeln, +Der half mir, diesen Deal einzufädeln, [LAW1_K:LAWYER1] und zwar ohne Vice Citys Gangster-Establishment. Ok? @@ -11549,10 +11549,10 @@ Guten Abend. Ich höre, Sie sind anstelle von Mr. Rosenberg hier. [LAWP_3:LAWYER1] -Ich hoffe, gewisse Vorfãlle haben seiner Gesundheit nicht geschadet, +Ich hoffe, gewisse Vorfälle haben seiner Gesundheit nicht geschadet, [LAWP_4:LAWYER1] -oder seiner Psyche, Mr...ãh? +oder seiner Psyche, Mr...äh? [LAWP_5:LAWYER1] Vercetti. Er leidet ein wenig an...Platzangst. @@ -11573,7 +11573,7 @@ Natürlich stelle ich selbst Nachforschungen an, aber bei solch heiklen Sachen dauert das ein wenig. [LAWP_11:LAWYER1] -Wir sprechen uns vielleicht spãter. Hm? +Wir sprechen uns vielleicht später. Hm? [LAWP_12:LAWYER1] Inzwischen möchte ich Ihnen meine Tochter vorstellen, @@ -11582,7 +11582,7 @@ Inzwischen möchte ich Ihnen meine Tochter vorstellen, Mercedes! [LAWP_14:LAWYER1] -Könntest du dich um unseren Gast kümmern, wãhrend ich mich um andere Dinge +Könntest du dich um unseren Gast kümmern, während ich mich um andere Dinge [LAWP_15:LAWYER1] Natürlich, Daddy. @@ -11597,7 +11597,7 @@ Mercedes!? Leb du mal mit so 'nem Namen. [LAWP_19:LAWYER1] -Na gut, ich zeig dir mal einige unserer bekannteren Gãste... +Na gut, ich zeig dir mal einige unserer bekannteren Gäste... [LAWP_20:LAWYER1] Das ist unser Abgeordneter Alex Shrub mit dem aufgehenden Sternchen Candy Suxx.. @@ -11627,7 +11627,7 @@ Tja, ich bin an einem super Grundstück dran. Und der Schleimbold dort ist Jezz Torrent, [LAWP_29:LAWYER1] -Der Sãnger von 'Love Fist'. +Der Sänger von 'Love Fist'. [LAWP_30:LAWYER1] Wisst ihr, wie sie in Thailand Pingpong spielen? @@ -11636,7 +11636,7 @@ Wisst ihr, wie sie in Thailand Pingpong spielen? Ich verrat's euch, [LAWP_32:LAWYER1] -man spielt ohne Schlãger, wenn ihr wisst, was ich meine! +man spielt ohne Schläger, wenn ihr wisst, was ich meine! [LAWP_33:LAWYER1] Impotent. @@ -11672,13 +11672,13 @@ Colonel! Ihre Party ist wie immer fantastisch, hahahaha! [LAWP_44:LAWYER1] -Ich entschuldige mich für die Verspãtung. +Ich entschuldige mich für die Verspätung. [LAWP_45:LAWYER1] Ah, nicht doch, Amigo. Wie geht es ihnen? [LAWP_46:LAWYER1] -Unsere Geschãfte laufen schwierig - die Barbaren stehen vor den Toren. +Unsere Geschäfte laufen schwierig - die Barbaren stehen vor den Toren. [LAWP_47:LAWYER1] Eine Zeit, Freunde zu belohnen und Feinde auszuschalten, Amigo. @@ -11723,7 +11723,7 @@ Darf ich meine Hand in deinen Schoß legen? Vielleicht... [LAW1_9:LAWYER1] -Es ist schwer, einen so reichen, mãchtigen Vater zu haben. Los. +Es ist schwer, einen so reichen, mächtigen Vater zu haben. Los. [LAW1_10:LAWYER1] Wir sehen uns, mein Hübscher! @@ -11752,7 +11752,7 @@ Ja, Baby, hab ich mir gerade bei Howlin' Pete's besorgt. {=================================== MISSION TABLE LAWYER2 ===================================} [LAW2_A:LAWYER2] -Ah! Tja, ich hoffe, du amüsierst dich gut, wãhrend ich hier vor Angst halb umkomme. Was hast du rausgefunden? +Ah! Tja, ich hoffe, du amüsierst dich gut, während ich hier vor Angst halb umkomme. Was hast du rausgefunden? [LAW2_B:LAWYER2] Dass es in dieser Stadt mehr Gangster gibt als im Knast. Wir brauchen einen Tipp von der Straße... @@ -11764,7 +11764,7 @@ Ok, lass mich nachdenken, lass mich nachdenken - - AH! Ich hab's! [LAW2_E:LAWYER2] -Ok, es gibt da so 'n Englãnder, so 'n Idiot aus der Musikbranche. +Ok, es gibt da so 'n Engländer, so 'n Idiot aus der Musikbranche. [LAW2_F:LAWYER2] Er nennt sich Kent Paul. @@ -11791,7 +11791,7 @@ Nach einer wie dir suche ich schon seit Ewigkeiten. Kent Paul. Ja, ich bin hier die Nummer Eins. [LAW2B_D:LAWYER2] -Ich suche einen Englãnder... +Ich suche einen Engländer... [LAW2B_E:LAWYER2] Ich ziehe hier die Strippen, verstehst du? @@ -11803,7 +11803,7 @@ Ich lade dich ein. Ich kann dir alles besorgen, Süße. Mach dir keine Gedanken. [LAW2B_H:LAWYER2] -Verzieh dich, Schãtzchen. +Verzieh dich, Schätzchen. [LAW2B_I:LAWYER2] Oi oi oi oi! @@ -11860,7 +11860,7 @@ Willst du auch ein paar? Hey, ruhig. Ich will das gleiche wie du, Bruder. [LAW2C_D:LAWYER2] -Ach ja? Und das wãre? +Ach ja? Und das wäre? [LAW2C_E:LAWYER2] Deine Kohle und den Stoff meines toten Bruders. Aber du hast gerade unsere Spur erledigt. @@ -11911,7 +11911,7 @@ Ich seh zu, was ich rausfinde. Ich behalte dich im Auge, Tommy. ~g~Nimm sein Handy. [LAW2_12:LAWYER2] -Du hast jetzt ein Handy und kannst Telefongesprãche entgegennehmen! +Du hast jetzt ein Handy und kannst Telefongespräche entgegennehmen! [LAW2_13:LAWYER2] ~g~Du hast Lance zurückgelassen! Geh ihn holen! @@ -11938,7 +11938,7 @@ Drücke die~h~ ~k~~PED_FIREWEAPON~~w~, um den Küchenchef anzugreifen. Stell dich in die ~q~rosa Markierung~w~, um zu sehen, was im Angebot ist. [LAW3_12:LAWYER2] -Du kannst Waffen auswãhlen, indem du die ~h~linke~w~ oder ~h~rechte~w~ ~h~Richtungstaste drückst. +Du kannst Waffen auswählen, indem du die ~h~linke~w~ oder ~h~rechte~w~ ~h~Richtungstaste drückst. [LAW3_13:LAWYER2] Wenn du genug Geld hast, kannst du Waffen durch Drücken der ~h~~k~~PED_SPRINT~~w~ kaufen. @@ -11959,7 +11959,7 @@ Nur die Ruhe. Eins musst du wissen: In dieser Stadt darfst du nie unbewaffnet sein. [LAW2_17:LAWYER2] -Komm, der nãchste Waffenladen ist ein paar Blocks von hier. +Komm, der nächste Waffenladen ist ein paar Blocks von hier. [LAW2_18:LAWYER2] Tommy, jeder Mann braucht ab und zu mal ein bisschen Entspannung. @@ -12012,10 +12012,10 @@ Nein, nein, nein! Das hab ich schon versucht. Das ist nicht gelaufen, ZWING sie dazu, umzudenken. [LAW3_1:LAWYER3] -Georgio lãsst grüßen. +Georgio lässt grüßen. [LAW3_2:LAWYER3] -Denk dran, 'Schuldig' ist ein hãssliches Wort. +Denk dran, 'Schuldig' ist ein hässliches Wort. [LAW3_3:LAWYER3] 'Unschuldig', bis ich was anderes sage. @@ -12036,7 +12036,7 @@ Nicht schuldig. Verstanden...gut. ~g~Schrotte das Auto des Geschworenen, damit er aussteigt! [HELP40:LAWYER3] -Du kannst Autos mit dem Hammer oder einer ãhnlichen Waffe zertrümmern. +Du kannst Autos mit dem Hammer oder einer ähnlichen Waffe zertrümmern. [HELP41:LAWYER3] Oder du kannst sie mit einem Fahrzeug rammen. @@ -12057,7 +12057,7 @@ Unglaublich! Ok! Ok! Ich hab kapiert! [LAW3_24:LAWYER3] -~g~Dieser Hammer wãre nützlich. +~g~Dieser Hammer wäre nützlich. [LAW3_7:LAWYER3] ~g~Schüchtere die 2 Geschworenen ein, aber erledige sie NICHT! @@ -12066,7 +12066,7 @@ Ok! Ok! Ich hab kapiert! Folge dem ~h~Hammer-Symbol~w~ auf dem Radar, wenn du beim Eisenwarenladen Nahkampfwaffen kaufen willst. [LAW3_16:LAWYER3] -Dãmlicher Florida-Idiot! +Dämlicher Florida-Idiot! [LAW3_17:LAWYER3] Aus dem Weg! @@ -12074,7 +12074,7 @@ Aus dem Weg! {=================================== MISSION TABLE LAWYER4 ===================================} [LAW4_A:LAWYER4] -Avery, es versteht sich von selbst... Tommy! Tommy! Fortschritte gemacht? Nein, erzãhl's mir spãter. +Avery, es versteht sich von selbst... Tommy! Tommy! Fortschritte gemacht? Nein, erzähl's mir später. [LAW4_B:LAWYER4] Tommy, das ist Avery Carrington. Kennt ihr euch nicht von der Party? @@ -12101,7 +12101,7 @@ Ich hab Angst. Aber wenn ich schon Ende der Woche sterbe, möchte ich wenigstens Jetzt beruhigt euch, ihr beiden. [LAW4_J:LAWYER4] -Junge, wenn du mir hilfst, sorge ich dafür, dass jeder, der dir Ãrger macht, unter die Erde kommt. +Junge, wenn du mir hilfst, sorge ich dafür, dass jeder, der dir Ärger macht, unter die Erde kommt. [LAW4_K:LAWYER4] Ok, was kann ich für Sie tun? @@ -12110,13 +12110,13 @@ Ok, was kann ich für Sie tun? Eine Spedition hat ihr Lager auf einem Top-Grundstück - und will nicht verkaufen. [LAW4_M:LAWYER4] -Die sitzen da drauf wie die Ratten in ihren Löchern. Also müssen wir dieses Ungeziefer ausrãuchern. +Die sitzen da drauf wie die Ratten in ihren Löchern. Also müssen wir dieses Ungeziefer ausräuchern. [LAW4_N:LAWYER4] Fahr hin und stich ein wenig ins Wespennest. [LAW4_O:LAWYER4] -Das wird die Security beschãftigen. Dann schleichst du dich rein und machst den Laden platt. +Das wird die Security beschäftigen. Dann schleichst du dich rein und machst den Laden platt. [LAW4_P:LAWYER4] Und du könntest dich bei Rafael's neu einkleiden. Kann 'ne Weile dauern, aber mach das ruhig mal. @@ -12125,10 +12125,10 @@ Und du könntest dich bei Rafael's neu einkleiden. Kann 'ne Weile dauern, aber m Das gibt ein Fest. [LAW4_R:LAWYER4] -Wenn alles lãuft wie geplant, komm mal zu mir ins Büro... +Wenn alles läuft wie geplant, komm mal zu mir ins Büro... [LAW4_1:LAWYER4] -Bitte, geht auseinander! Die Geschãftsleitung wird sich aller Probleme annehmen! +Bitte, geht auseinander! Die Geschäftsleitung wird sich aller Probleme annehmen! [LAW4_2:LAWYER4] Bitte, geht auseinander! Geht wieder nach Hause! @@ -12146,13 +12146,13 @@ Die Knüppel raus, Jungs! Diesen Kommis zeigten wir's! Fange mit mind. 4 Arbeitern Streit an, um einen Aufruhr zu starten. [LAW4_14:LAWYER4] -~g~Zerstöre die Transporter auf dem Gelãnde! +~g~Zerstöre die Transporter auf dem Gelände! [HELP38:LAWYER4] -Wenn du jemanden ausschaltest, der eine Waffe trãgt, lãsst er sie fallen. +Wenn du jemanden ausschaltest, der eine Waffe trägt, lässt er sie fallen. [HELP39:LAWYER4] -Du kannst explosive Fãsser anvisieren und abschießen, aber bleib auf Distanz. +Du kannst explosive Fässer anvisieren und abschießen, aber bleib auf Distanz. {=================================== MISSION TABLE MIAMI_1 ===================================} @@ -12160,7 +12160,7 @@ Du kannst explosive Fãsser anvisieren und abschießen, aber bleib auf Distanz. ~g~Du hast ~1~ Sekunden, um ~y~24~g~ Checkpoints abzufahren. ~g~Die ~y~REIHENFOLGE IST BELIEBIG. [T4X4_1B:MIAMI_1] -~y~PASSIERE~g~ den ersten Checkpoint, dann lãuft die ~r~STOPPUHR. +~y~PASSIERE~g~ den ersten Checkpoint, dann läuft die ~r~STOPPUHR. [T4X4_1C:MIAMI_1] ~1~ von 24! @@ -12195,7 +12195,7 @@ $~1~ SIEGER!! [BLOD_01:MM] -Fahr durch die Checkpoints, um deine Gesamtzeit zu verlãngern. +Fahr durch die Checkpoints, um deine Gesamtzeit zu verlängern. [BLOD_02:MM] Wenn die Gesamtzeit abgelaufen ist, hast du versagt. @@ -12206,13 +12206,13 @@ Um zu gewinnen, muss deine Gesamtzeit die Zielzeit überschreiten! {=================================== MISSION TABLE OVALRIG ===================================} [HOTR_01:OVALRIG] -~g~Das Rennen geht über 12 Runden. Nur die ersten drei Plãtze qualifizeren für einen Gewinn. +~g~Das Rennen geht über 12 Runden. Nur die ersten drei Plätze qualifizeren für einen Gewinn. [HOTR_02:OVALRIG] ~g~Wird dein Auto zerstört, wirst du disqualifiziert. [HOTR_03:OVALRIG] -~g~Wird dein Auto beschãdigt, kannst du es an der Box reparieren lassen. +~g~Wird dein Auto beschädigt, kannst du es an der Box reparieren lassen. [HOTR_04:OVALRIG] ~g~Da geht es aus dem Stadion raus. @@ -12352,19 +12352,19 @@ Tust mir einen großen Gefallen damit. Und dann mach ihn fertig. [PHI1_01:PHIL1] -~g~Ramme die Waffen von der Ladeflãche des Waffenschiebers. +~g~Ramme die Waffen von der Ladefläche des Waffenschiebers. [PHI1_02:PHIL1] -~g~Der Waffenhãndler hat die Ladung verloren. Schlag die Kiste kaputt und nimm die Waffe. +~g~Der Waffenhändler hat die Ladung verloren. Schlag die Kiste kaputt und nimm die Waffe. [PHI1_03:PHIL1] -~g~Sie haben anscheinend Verstãrkung gerufen. +~g~Sie haben anscheinend Verstärkung gerufen. [PHI1_04:PHIL1] ~g~Jetzt erledige die restlichen Waffenschieber. [PHI1_06:PHIL1] -Pass doch auf, wo du hinfãhrst! +Pass doch auf, wo du hinfährst! [PHI1_07:PHIL1] Hey! @@ -12373,7 +12373,7 @@ Hey! Huuuuhuuu! [PHIL1_D:PHIL1] -Komm nie mit 'ner offenen Flamme in die Nãhe von Phil Cassidys TNT-Whiskey! +Komm nie mit 'ner offenen Flamme in die Nähe von Phil Cassidys TNT-Whiskey! {=================================== MISSION TABLE PHIL2 ===================================} @@ -12393,7 +12393,7 @@ Das Zeug riecht ja wie Terpentin. Mir brennen schon die Augen. Lass stecken, Tommy. [PHIL2_F:PHIL2] -Komm hier rüber, ich will dir nãmlich was zeigen. +Komm hier rüber, ich will dir nämlich was zeigen. [PHIL2_G:PHIL2] Wahnsinn! Das rieche ich ja schon von hier. Mir ist schon ganz schwindlig. @@ -12420,13 +12420,13 @@ Oh, verflucht! Nicht ins Krankenhaus, Mann! Zu viele Cops und Vietcong! [PHI2_06:PHIL2] -Ich kenn 'nen Ex-Army-Arzt, der schuldet mir einen Gefallen und 'nen Rasenmãher. +Ich kenn 'nen Ex-Army-Arzt, der schuldet mir einen Gefallen und 'nen Rasenmäher. [PHI2_07:PHIL2] Er hat 'ne Praxis unten in Little Havana. Uh, guck mal, ein Riesenfisch. [PHI2_08:PHIL2] -Achtung! Da in den Bãumen - Vietcong! +Achtung! Da in den Bäumen - Vietcong! [PHI2_09:PHIL2] Spinn ich, oder ist die Straße aus Gummi? @@ -12461,7 +12461,7 @@ PHIL-MISSIONEN ERFÃœLLT {=================================== MISSION TABLE PIZZA ===================================} [PIZ1_01:PIZZA] -~g~Liefere diese Pizzas aus. Du musst den Kunden die Pizzas zuwerfen, wãhrend du an ihnen vorbeifãhrst. +~g~Liefere diese Pizzas aus. Du musst den Kunden die Pizzas zuwerfen, während du an ihnen vorbeifährst. [PIZ1_02:PIZZA] ~g~Du hast alle Pizzas zugestellt. Fahr zurück und hole noch mehr. @@ -12548,7 +12548,7 @@ Du wirst nie befördert, wenn du diesmal nicht schneller machst. ~r~Ist dir die Pizza zu heiß? [PIZ1_33:PIZZA] -~g~Kehre zum Restaurant zurück, um weitere Auftrãge zu bekommen. +~g~Kehre zum Restaurant zurück, um weitere Aufträge zu bekommen. [PIZ1_34:PIZZA] ~g~Pizza geliefert, hier ist dein Geld. @@ -12559,7 +12559,7 @@ Pizza-Mission abgeschlossen. Deine max. Gesundheit erhöht sich auf 150 {=================================== MISSION TABLE PORN1 ===================================} [POR1_15:PORN1] -Hey, Tommy, kommst du auf eine Aufwãrmrunde mit rein!? +Hey, Tommy, kommst du auf eine Aufwärmrunde mit rein!? [POR1_14:PORN1] Du bist engagiert! @@ -12610,19 +12610,19 @@ Wir krempeln den Laden hier um. Ich mache dich reich. [POR1_P:PORN1] -Ãh, du...du bist Tommy Vercetti? Aber ich dachte, du wãrst... +Äh, du...du bist Tommy Vercetti? Aber ich dachte, du wärst... [POR1_Q:PORN1] Ganz recht. [POR1_R:PORN1] -Wir ãndern hier ein paar Dinge und dann machen wir richtig Kohle. +Wir ändern hier ein paar Dinge und dann machen wir richtig Kohle. [POR1_S:PORN1] Hast du dir schon mal überlegt... [POR1_T:PORN1] -Aber zuerst brauchen wir mal ein paar hübsche Mãdels hier. +Aber zuerst brauchen wir mal ein paar hübsche Mädels hier. [POR1_U:PORN1] Ja, Girls sind ok, aber du...wow! @@ -12640,7 +12640,7 @@ Klar! Aber da musst du mit meinem Agenten reden. Was zum Teufel soll das? [POR1_07:PORN1] -Du hãttest heute zu Hause bleiben sollen! +Du hättest heute zu Hause bleiben sollen! [POR1_7B:PORN1] Was sagt man zu so 'nem Arschloch? @@ -12676,13 +12676,13 @@ Wo willst du hin? Tommy, wann sehen wir uns mal ganz allein, nur du und ich? [POR1_01:PORN1] -~g~Candy Suxxx wãre perfekt für die Hauptrolle! +~g~Candy Suxxx wäre perfekt für die Hauptrolle! [POR1_12:PORN1] ~g~Nimm Candy mit zu deinem Treffen mit Mercedes. [POR1_16:PORN1] -Vielleicht spãter, Schãtzchen... +Vielleicht später, Schätzchen... [POR1_24:PORN1] ~g~Geh zurück und hole Candy. @@ -12691,7 +12691,7 @@ Vielleicht spãter, Schãtzchen... ~g~Du hast Candy vergessen. Geh sie holen. [POR1_23:PORN1] -~g~Candy wird sich um das Geschãft in ~h~Downtown~g~ kümmern. +~g~Candy wird sich um das Geschäft in ~h~Downtown~g~ kümmern. [POR1_26:PORN1] ~g~Da ist Candy. Sie scheint wieder mit dem Kongressabgeordneten Shrub zusammen gewesen zu sein. @@ -12709,7 +12709,7 @@ Das nennst du fahren? Danach kann ich keinen Porno mehr machen! [POR1_31:PORN1] -Was ist los? Willst du mich umbringen? Ich dachte, ich wãre der Star! +Was ist los? Willst du mich umbringen? Ich dachte, ich wäre der Star! {=================================== MISSION TABLE PORN2 ===================================} @@ -12717,7 +12717,7 @@ Was ist los? Willst du mich umbringen? Ich dachte, ich wãre der Star! Was macht die Filmerei, Steve? [POR2_B:PORN2] -Tja, Candy ist ein Naturtalent, und die Neue ist unersãttlich! +Tja, Candy ist ein Naturtalent, und die Neue ist unersättlich! [POR2_C:PORN2] Die hatte schon vor der ersten Probe das halbe Team durch. @@ -12738,7 +12738,7 @@ Was habe ich über den Riesenhai gesagt? Ich sagte, 'KEIN RIESENHAI', ok? [POR2_I:PORN2] -Halt die Kameras auf die Mãdels gerichtet! +Halt die Kameras auf die Mädels gerichtet! [POR2_J:PORN2] Ok, ok. Hey, Tommy, probieren kann ich's ja mal, oder? @@ -12750,7 +12750,7 @@ Habt ihr die Flyer drucken lassen? Ja, aber man wird uns die Dinger nicht verteilen lassen. Ich meine, [POR2_M:PORN2] -die sind einfach zu, ãh, zu deutlich. +die sind einfach zu, äh, zu deutlich. [POR2_N:PORN2] Mach dir darüber keine Gedanken. @@ -12759,7 +12759,7 @@ Mach dir darüber keine Gedanken. Ich hab da so meine Ideen, wie wir die verteilen. [POR2_P:PORN2] -Ok. Hey, Candy, ãh, in meinen Wohnwagen. +Ok. Hey, Candy, äh, in meinen Wohnwagen. [POR2_01:PORN2] ~g~Hinter den Studios steht ein altes Wasserflugzeug, das mal als Requisite für einen Indy-Film diente. @@ -12839,7 +12839,7 @@ Oh ja, oh ja, oh ja! Ja, ja, ja, JA, Oooooooh! Bitte sag, dass du das hast. [POR3_R:PORN3] -Gehörte das zum, ãh... oder war das die Antwort für... +Gehörte das zum, äh... oder war das die Antwort für... [POR3_S:PORN3] Hey, ich kann das nie unterscheiden. Jedenfalls... @@ -12955,7 +12955,7 @@ diesem Rumgenudle tobt unvermindert. Und bevor du fragst: Ja, alle vier Videos werden veröffentlicht, wenn... [POR4_J:PORN4] -Schãtzchen, kannst du BITTE die Anaconda im Bild halten, +Schätzchen, kannst du BITTE die Anaconda im Bild halten, [POR4_K:PORN4] die kostet pro Stunde mehr als du! @@ -12979,7 +12979,7 @@ Stars, Limos, riesige Suchscheinwerfer am Nachthimmel... Suchscheinwerfer? Ich hab eine Idee... [POR4_R:PORN4] -....ja, ja, ja. Die heißen Mãdels mit ihren Paillettenkleidern und die Limos, oh, Premieren. +....ja, ja, ja. Die heißen Mädels mit ihren Paillettenkleidern und die Limos, oh, Premieren. [POR4_S:PORN4] O ja, Ma'am, natürlich, Ma'am, @@ -12988,31 +12988,31 @@ O ja, Ma'am, natürlich, Ma'am, Und die Presse und die Lichter-Flut... [POR4_01:PORN4] -~g~Begib dich nach ~y~Downtown~g~und richte den Scheinwerfer auf dem Gebãude aus. +~g~Begib dich nach ~y~Downtown~g~und richte den Scheinwerfer auf dem Gebäude aus. [POR4_02:PORN4] -~g~Du brauchst ein schnelles Bike, um von Dach zu Dach zu springen. Der Wachmann fãhrt immer mit einer ~y~PCJ 600~g~zur Arbeit... +~g~Du brauchst ein schnelles Bike, um von Dach zu Dach zu springen. Der Wachmann fährt immer mit einer ~y~PCJ 600~g~zur Arbeit... [POR4_03:PORN4] -~g~Du wirst auf die Gebãudedãcher müssen. In eines der oberen Büros sollte ein Lift führen... +~g~Du wirst auf die Gebäudedächer müssen. In eines der oberen Büros sollte ein Lift führen... [POR4_06:PORN4] -~g~Kehre in das tiefer gelegene Büro zurück, wenn du noch mal auf die Dãcher musst. +~g~Kehre in das tiefer gelegene Büro zurück, wenn du noch mal auf die Dächer musst. [POR4_07:PORN4] -~g~Du brauchst ein Motorrad, um von Gebãude zu Gebãude zu springen. +~g~Du brauchst ein Motorrad, um von Gebäude zu Gebäude zu springen. [POR4_08:PORN4] ~g~Brich durch das Fenster, um zu starten. Du hast bis 07:00 Zeit. Dann wird es zu hell, um ungesehen hinaufzukommen. [POR4_09:PORN4] -~g~Die Pfeile zeigen dir, zu welchem Gebãude du als nãchstes springen musst. +~g~Die Pfeile zeigen dir, zu welchem Gebäude du als nächstes springen musst. [POR4_10:PORN4] ~r~Es ist zu hell, um ungesehen dort hinaufzukommen. [POR4_11:PORN4] -Kehre zur Leiter zurück, wenn du noch mal auf die Dãcher musst. +Kehre zur Leiter zurück, wenn du noch mal auf die Dächer musst. [POR4_05:PORN4] ~g~Diese Treppe führt zu einem tiefer gelegenen Büro. @@ -13021,12 +13021,12 @@ Kehre zur Leiter zurück, wenn du noch mal auf die Dãcher musst. FILMSTUDIO-MISSIONEN ERFÃœLLT [POR_AS2:PORN4] -~g~Inter Global Films generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Inter Global Films generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. {=================================== MISSION TABLE PROT1 ===================================} [PRO1_A:PROT1] -Oh, wir müssen diesen Laden umbauen. Das muss ãlter aussehen. +Oh, wir müssen diesen Laden umbauen. Das muss älter aussehen. [PRO1_B:PROT1] Ich kann diesen Look nicht ab, Tommy. Was meinst du, sollen wir eine Bar einbauen..? @@ -13044,7 +13044,7 @@ Wir müssen langsam Gebiete einnehmen. Vice City soll merken, dass wir die neuen Bosse sind, versteht ihr? [PRO1_H:PROT1] -Jetzt beruhigt euch mal kurz. Allmãhlich kapiere ich schon, wie das ganze hier lãuft. +Jetzt beruhigt euch mal kurz. Allmählich kapiere ich schon, wie das ganze hier läuft. [PRO1_I:PROT1] Was du brauchst, ist eine legale Fassade, Tommy, Immobilien. Hat mir nicht geschadet. @@ -13053,7 +13053,7 @@ Was du brauchst, ist eine legale Fassade, Tommy, Immobilien. Hat mir nicht gesch Wir müssen die Muskeln spielen lassen, sonst war die ganze harte Arbeit umsonst. [PRO1_K:PROT1] -Die Geschãftsleute hier wissen, dass Diaz weg ist und weigern sich, Schutzgeld zu zahlen. +Die Geschäftsleute hier wissen, dass Diaz weg ist und weigern sich, Schutzgeld zu zahlen. [PRO1_L:PROT1] Oh, wir könnten es mit Schmiergeld versuchen... @@ -13062,7 +13062,7 @@ Oh, wir könnten es mit Schmiergeld versuchen... Schmiergeld? Blödsinn! Ich zeig euch, wie man denen Angst macht. [PRO1_01:PROT1] -~g~Demoliere die Schaufenster der Lãden und die Inhaber werden darum betteln, zahlen zu dürfen. +~g~Demoliere die Schaufenster der Läden und die Inhaber werden darum betteln, zahlen zu dürfen. [PRO1_03:PROT1] ~r~Du sollst abhauen, nicht Kaffee trinken gehen. @@ -13092,7 +13092,7 @@ Ich bin jetzt der Boss in der Stadt. ICH! Du kannst jetzt in bestimmten Gegenden auf der Karte Objekte kaufen. [BUYP2:PROT1] -Wenn du ein Gebãude mit grüner Markierung siehst, kannst du dieses kaufen. +Wenn du ein Gebäude mit grüner Markierung siehst, kannst du dieses kaufen. [PRO1_N:PROT1] Ich bin in fünf Minuten zurück... @@ -13127,7 +13127,7 @@ Was gibt's für Probleme? Eine Bar weigert sich zu zahlen. [PRO2_C:PROT2] -Die glauben, die werden von so einer Schlãgerbande beschützt. +Die glauben, die werden von so einer Schlägerbande beschützt. [PRO2_D:PROT2] Aber keine Sorge, Tommy, ich regle das. @@ -13204,10 +13204,10 @@ Wir müssen unser Zeug holen und verschwinden! Langsam, ihr beiden, lasst mich kurz nachdenken! [PRO3_L:PROT3] -Tommy Vercetti lãuft nicht einfach weg. +Tommy Vercetti läuft nicht einfach weg. [PRO3_M:PROT3] -Die Cops werden das Gebãude sorgfãltig durchkãmmen, oder? +Die Cops werden das Gebäude sorgfältig durchkämmen, oder? [PRO3_N:PROT3] Aber das dauert. @@ -13219,7 +13219,7 @@ Wir müssen den Laden selbst abfackeln. Ja, aber... [PRO3_Q:PROT3] -Nur ein Cop kommt auch nur in die Nãhe von dem Laden! +Nur ein Cop kommt auch nur in die Nähe von dem Laden! [PRO3_R:PROT3] Dann gehen wir eben als Cops. @@ -13243,7 +13243,7 @@ Wir müssen die Cops hereinlocken, dann sperren wir sie ein [PRO3_Y:PROT3] -und überwãltigen sie. +und überwältigen sie. [PRO3_Z:PROT3] Guter Plan. Los geht's! @@ -13282,10 +13282,10 @@ Bisschen eng im Schritt vielleicht... Oh ja, ja. Meine auch, meine auch. [PRO3_13:PROT3] -Vorsicht, Bruder! Kein Cop fãhrt so schlecht! +Vorsicht, Bruder! Kein Cop fährt so schlecht! [PRO3_14:PROT3] -Denk dran, lãchle die anderen Cops an. +Denk dran, lächle die anderen Cops an. [PRO3_15:PROT3] Hallo, Officer. Hübsche Marke, hübsche Marke. @@ -13309,19 +13309,19 @@ Jetzt sind sie so richtig stocksauer. ~g~Beschaff dir einen Fahndungslevel, damit dir die Cops in die Garage folgen. [PRO3_22:PROT3] -~g~Das Garagentor ist blockiert! Du musst es freirãumen, damit es schließen kann. +~g~Das Garagentor ist blockiert! Du musst es freiräumen, damit es schließen kann. [PRO3_23:PROT3] ~g~Stell dich in die Markierung, um die Bombe zu platzieren. [PRO3_24:PROT3] -~g~Verschwinde aus der Nãhe des Cafés! +~g~Verschwinde aus der Nähe des Cafés! [PRO_AS1:PROT3] SCHUTZGELD-MISSIONEN ERFÃœLLT [PRO_AS2:PROT3] -~g~Das Vercetti Estate generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Das Vercetti Estate generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [PRO3_08:PROT3] ~g~Du musst zurück zu ~h~Vercetti Estate~g~ auf ~h~Starfish Island~g~. @@ -13377,7 +13377,7 @@ Beste Platzierung: 3. Beste Platzierung: 4. [RACES13:RACES] -Streckenlãnge: ~1~.~1~ km +Streckenlänge: ~1~.~1~ km [RACES15:RACES] Bestzeit: Nicht verfügbar @@ -13392,13 +13392,13 @@ Du hast nicht genug Geld, um an diesem Rennen teilzunehmen. Bestzeit: ~1~:0~1~ [RACES23:RACES] -Streckenlãnge: ~1~.~1~ Meilen +Streckenlänge: ~1~.~1~ Meilen [RACES_1:RACES] ~g~Schnapp dir ein schnelles Fahrzeug und begib dich zur Startlinie. [RACEHLP:RACES] -~w~Drücke die~h~ ~k~~PED_SPRINT~~w~, um das ausgewãhlte Rennen zu starten. Drücke die~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, um abzubrechen. +~w~Drücke die~h~ ~k~~PED_SPRINT~~w~, um das ausgewählte Rennen zu starten. Drücke die~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, um abzubrechen. {=================================== MISSION TABLE RCHELI1 ===================================} @@ -13412,7 +13412,7 @@ Verbleibende Checkpoints: ~g~Es gibt insgesamt 20 Checkpoints. [RCH1_12:RCHELI1] -~g~Der ferngesteuerte Helikopter gerãt außer Reichweite! +~g~Der ferngesteuerte Helikopter gerät außer Reichweite! [RCH1_13:RCHELI1] ~r~Der ferngesteuerte Helikopter ist außer Reichweite! @@ -13432,7 +13432,7 @@ Verbleibende Checkpoints: ~g~Wenn du diese Mission abbrechen willst, drücke die ~h~~k~~VEHICLE_FIREWEAPON~~g~, um dein Flugzeug zu sprengen. [RCPL1_8:RCPLNE1] -~g~Dein ferngesteuertes Flugzeug gerãt außer Reichweite! +~g~Dein ferngesteuertes Flugzeug gerät außer Reichweite! [RCPL1_9:RCPLNE1] ~r~Dein ferngesteuertes Flugzeug ist außer Reichweite! @@ -13455,7 +13455,7 @@ Verbleibende Runden: ~g~Du musst als erster 2 volle Runden auf dem Kurs fahren! [RCR1_6:RCRACE1] -~g~Dein ferngesteuertes Auto gerãt außer Reichweite! +~g~Dein ferngesteuertes Auto gerät außer Reichweite! [RCR1_7:RCRACE1] ~r~Dein ferngesteuertes Auto ist außer Reichweite! @@ -13490,7 +13490,7 @@ Das ist Tommy. Wir kennen uns schon ewig. Alles paletti, Mann. [RBM1_K:ROCK1] -Und, ãh, wie war dein Name noch mal? +Und, äh, wie war dein Name noch mal? [RBM1_L:ROCK1] Lass das, Jezz. Merk dir eines, @@ -13523,7 +13523,7 @@ Love Juice, Mann! Love Juice? [RBM1_W:ROCK1] -Genau. 2 Teile TNT-Whiskey, 1 Teil Koks, 5 Pãckchen Brause und 1 Liter Sprit. +Genau. 2 Teile TNT-Whiskey, 1 Teil Koks, 5 Päckchen Brause und 1 Liter Sprit. [RBM1_X:ROCK1] Kannst du uns weiterhelfen, Alter? @@ -13562,7 +13562,7 @@ Da kenne ich genau die richtige. Hey, Mercedes! [ROK1_6:ROCK1] -Hi, Tommy. Na, wie lãuft's so? +Hi, Tommy. Na, wie läuft's so? [ROK1_7:ROCK1] Alles bestens. Hör mal, willst du die Jungs von Love Fist verführen? @@ -13586,7 +13586,7 @@ NICHT MEHR BENÖTIGT NICHT MEHR BENÖTIGT [MERC_39:ROCK1] -Wir sehen uns spãter, Big Boy. +Wir sehen uns später, Big Boy. [RBM1_C:ROCK1] Hey, Tommy! Schön, dass du kommen konntest. @@ -13621,7 +13621,7 @@ Da ist so 'n Typ, wir kennen ihn kaum, aber er kennt uns. So wie er da. Weiß alles über uns. [RBM2_G:ROCK2] -Weiß, dass Willy auf Damenunterwãsche steht, eh! +Weiß, dass Willy auf Damenunterwäsche steht, eh! [RBM2_H:ROCK2] Oder dass Percy auf Duran Duran steht! @@ -13695,19 +13695,19 @@ Tommy! Tommy! Tommy, Mann, der Irre ist wieder da! Was ist denn los? [RBM3_C:ROCK3] -Dieser Irre lãsst Love Fist nicht in Ruhe! +Dieser Irre lässt Love Fist nicht in Ruhe! [RBM3_D:ROCK3] Du hast ihn nicht erwischt, Mann. Und jetzt ist er wieder da. [RBM3_E:ROCK3] -Ja, ja, ja, und es ist nãmlich so... +Ja, ja, ja, und es ist nämlich so... [RBM3_F:ROCK3] wir brauchen für die Limo einen Fahrer, dem wir vertrauen können, [RBM3_G:ROCK3] -weil der Irre uns stãndig bedroht! +weil der Irre uns ständig bedroht! [RBM3_I:ROCK3] Wir scheißen uns alle in die Hosen, Mann. @@ -13761,7 +13761,7 @@ Den grünen. Da ist kein grüner. Oder ist der hier grün? [ROK3_44:ROCK3] -Sieht für dich einer von den Drãhten grün aus? +Sieht für dich einer von den Drähten grün aus? [ROK3_49:ROCK3] Ich hab euch doch jahrelang nur mitgeschleppt. @@ -13812,13 +13812,13 @@ Falls du versuchst, aus dem Auto auszusteigen, wenn die Bombe scharfgemacht ist, Ist der Detonations-Balken am Anschlag, explodiert die Bombe. [RBM3_8:ROCK3] -Je schneller du fãhrst, desto niedriger der Detonations-Balken. +Je schneller du fährst, desto niedriger der Detonations-Balken. [RBM3_7:ROCK3] -~g~BOMBE ENTSCHÃRFT! +~g~BOMBE ENTSCHÄRFT! [ROK3_6A:ROCK3] -~g~Love Fist. Ihr habt den Ãther lange genug verschmutzt! +~g~Love Fist. Ihr habt den Äther lange genug verschmutzt! [ROK3_6B:ROCK3] ~g~Ich wollte euer Freund sein. Jetzt will ich, dass ihr untergeht. @@ -13866,10 +13866,10 @@ Tommy, mein Freund, wir müssen die Band retten! Tommy, bleib auf dem Gas, Alter. [ROK3_31:ROCK3] -Ganz toll. 'Tu doch einer was.' Was ist denn das für eine Ansage? Da kenn ich mutigere Mãdels. +Ganz toll. 'Tu doch einer was.' Was ist denn das für eine Ansage? Da kenn ich mutigere Mädels. [ROK3_33:ROCK3] -Alter, ich bin Musiker. Vom Bomben-Entschãrfen hab ich keinen blassen Dunst. +Alter, ich bin Musiker. Vom Bomben-Entschärfen hab ich keinen blassen Dunst. [ROK3_35:ROCK3] Eben, so was liegt dir doch, was ich so höre. @@ -13881,7 +13881,7 @@ Einen Strohhalm?! Dies ist der Tour-Bus von Love Fist! Wo zum Geier sollte hier ein Strohhalm sein? [ROK3_46:ROCK3] -Ich hãtte euch alle rausschmeißen sollen, als es noch ging, Mann. +Ich hätte euch alle rausschmeißen sollen, als es noch ging, Mann. [ROK3_47:ROCK3] Kapitalist. @@ -13893,7 +13893,7 @@ Kameradenschwein. Jezz spielt das Band ab, [RBM3_9:ROCK3] -Wenn du angehalten wirst oder langsam fãhrst, wãchst der Detonations-Balken. +Wenn du angehalten wirst oder langsam fährst, wächst der Detonations-Balken. [ROK3_50:ROCK3] Halt die Klappe. Du bist ein Idiot. @@ -13908,7 +13908,7 @@ Ich scheiß mir in die Hose, Mann. Ich will zu meiner Mama! Oh nein. Im Angesicht des Todes sieht alles grün aus. [ROK3_6C:ROCK3] -~g~Wenn ihr langsamer werdet, geht eure Limo hoch, IHR UND EURE HAARIGEN ÃRSCHE mit dazu! +~g~Wenn ihr langsamer werdet, geht eure Limo hoch, IHR UND EURE HAARIGEN ÄRSCHE mit dazu! [ROK3_71:ROCK3] Wir müssen uns ranhalten. Danke nochmal, Tommy, du hast es echt drauf. Ciao. @@ -13920,13 +13920,13 @@ Endlich, Mann, Zeit für einen wohlverdienten Drink. Die Halle ist nur 100 Meter Mach mir mal einen großen. Hey, Tommy, leg mal 'nen anderen Sound auf, Mann. [ROK3_3:ROCK3] -Ich werd wirr im Kopf, wenn nichts zum Headbangen lãuft. Hey, Tommy, leg mal dieses Band ein. +Ich werd wirr im Kopf, wenn nichts zum Headbangen läuft. Hey, Tommy, leg mal dieses Band ein. [ROK3_4:ROCK3] -Love Fist. Ihr habt den Ãther lange genug verschmutzt! Ich wollte euer Freund sein. +Love Fist. Ihr habt den Äther lange genug verschmutzt! Ich wollte euer Freund sein. [ROK3_5:ROCK3] -Jetzt will ich, dass ihr untergeht. Wenn ihr langsamer werdet, geht eure Limo hoch, IHR UND EURE HAARIGEN ÃRSCHE mit dazu! +Jetzt will ich, dass ihr untergeht. Wenn ihr langsamer werdet, geht eure Limo hoch, IHR UND EURE HAARIGEN ÄRSCHE mit dazu! [ROK3_6:ROCK3] Tommy, mein Freund, du musst die Band retten! Langsam wird's langweilig. Halt bloß das Pedal durchgedrückt!! @@ -13941,13 +13941,13 @@ Könnte die Bombe nicht unter der Motorhaube sein? Da kommen wir nie ran, ohne a Hey, hier gibt's eine Warteschlange, Alter! Die Lösung liegt nicht in der Minibar! Weg da! [ROK3_10:ROCK3] -Hey, aus der Wodkapulle kommen Drãhte raus! Das ist kein Wodka, das ist TNT-WHISKEY! +Hey, aus der Wodkapulle kommen Drähte raus! Das ist kein Wodka, das ist TNT-WHISKEY! [ROK3_11:ROCK3] WAAAAAAGGGHHHH!!!! Das Ding ist scharfgemacht!! WAAAAAAAAAAGGGHHHHHH!!!! [ROK3_12:ROCK3] -Man hat mir immer gesagt, der Alk wird mich killen... Das kenn ich aus dem Fernsehen. Du musst einen der Drãhte rausziehen. Welchen Draht? Weiß ich doch nicht, Mann. +Man hat mir immer gesagt, der Alk wird mich killen... Das kenn ich aus dem Fernsehen. Du musst einen der Drähte rausziehen. Welchen Draht? Weiß ich doch nicht, Mann. [ROK3_13:ROCK3] Keinen Schimmer. Willy, sag doch mal was. Ich werd Bass in der Hölle spielen. @@ -13956,7 +13956,7 @@ Keinen Schimmer. Willy, sag doch mal was. Ich werd Bass in der Hölle spielen. Tommy, bleib auf dem Gas, Mann. Tu doch einer was! Ganz toll... [ROK3_15:ROCK3] -'Tu doch einer was.' Was ist denn das für eine Ansage? Da kenn ich mutigere Mãdchen. Ok, Obermacho, dann tu du doch was! +'Tu doch einer was.' Was ist denn das für eine Ansage? Da kenn ich mutigere Mädchen. Ok, Obermacho, dann tu du doch was! [ROK3_16:ROCK3] Alter, ich bin Musiker. Mit Bomben kenne ich mich nicht aus. Willy könnte den TNT-Whiskey mit einem Strohhalm raussaugen. @@ -13971,10 +13971,10 @@ Gebt Willy einen Strohhalm! Einen Strohhalm?! Wi sind im Band-Auto von Love Fist Wo zum Geier sollte hier ein Strohhalm sein? Welchen Draht, Tommy? Den grünen. Da ist kein grüner. [ROK3_20:ROCK3] -Oder ist der hier grün? Sieht für dich einer von den Drãhten grün aus? +Oder ist der hier grün? Sieht für dich einer von den Drähten grün aus? [ROK3_21:ROCK3] -Oh nein. Im Angesicht des Todes sieht alles grün aus. Ich hãtte euch alle rausschmeißen sollen, als es noch ging, Mann. +Oh nein. Im Angesicht des Todes sieht alles grün aus. Ich hätte euch alle rausschmeißen sollen, als es noch ging, Mann. [ROK3_22:ROCK3] Kameradenschwein. Kapitalist. Ich hab euch doch jahrelang nur mitgeschleppt. Halt die Klappe. Du bist ein Idiot. @@ -14006,16 +14006,16 @@ Komm rein und setz dich auf deinen Hintern, Junge. Mein Daddy hat immer gesagt, einem geschenkten Gaul schaut man nicht ins Maul. Hat's auch nie getan. [TEX1_C:SERG1] -Ein Glãschen alter Kentucky gefãllig? +Ein Gläschen alter Kentucky gefällig? [TEX1_D:SERG1] Nein danke. [TEX1_E:SERG1] -Ein nüchterner Denker, das gefãllt mir. +Ein nüchterner Denker, das gefällt mir. [TEX1_F:SERG1] -Im Immobiliengeschãft geht's nicht um hochtrabende Vertrãge. +Im Immobiliengeschäft geht's nicht um hochtrabende Verträge. [TEX1_G:SERG1] Es geht um Land. Und darum, dieses Land zu kriegen. Kannst du mir folgen? @@ -14057,7 +14057,7 @@ Hübscher Hintern, Baby! Bin ich das? [TEX1_8:SERG1] -Jedesmal wenn du in einen Golfwagen steigst, erhãltst du automatisch einen Golfschlãger, vorausgesetzt, du hast nicht schon eine Nahkampfwaffe. +Jedesmal wenn du in einen Golfwagen steigst, erhältst du automatisch einen Golfschläger, vorausgesetzt, du hast nicht schon eine Nahkampfwaffe. [TEX1_9:SERG1] Schnapp ihn dir! @@ -14077,7 +14077,7 @@ Mach den Irren fertig! ~g~Großartig! Sie haben dich bemerkt! [TEX_2B:SERG2] -~r~Narr! Die Leute müssen SEHEN, dass der Tãter ein Kubaner ist! +~r~Narr! Die Leute müssen SEHEN, dass der Täter ein Kubaner ist! [TEX_2C:SERG2] ~g~Besorge dir bei Rafael's Kleidung in den Farben der kubanischen Gang. @@ -14089,16 +14089,16 @@ Mach den Irren fertig! Tommy, das ist Donald Love. Donald, das ist Tommy Vercetti, [TEX2_B:SERG2] -der neueste Draufgãnger hier in der Stadt. +der neueste Draufgänger hier in der Stadt. [TEX2_C:SERG2] -Ja...ãh... +Ja...äh... [TEX2_D:SERG2] Donald, sei still und hör zu. Vielleicht kannst du was lernen. [TEX2_E:SERG2] -Also. Nichts lãsst Immobilienpreise schneller abstürzen als ein guter alter Bandenkrieg. +Also. Nichts lässt Immobilienpreise schneller abstürzen als ein guter alter Bandenkrieg. [TEX2_F:SERG2] Außer vielleicht eine Katastrophe, eine biblische Plage oder so, @@ -14154,7 +14154,7 @@ Gut mitgedacht. Also, ich verdrücke mich eine Weile aus der Stadt, [TEX3_I:SERG3] -und wenn dieses Bürogebãude urplötzlich irreparable Schãden aufweist, dann... +und wenn dieses Bürogebäude urplötzlich irreparable Schäden aufweist, dann... [TEX3_J:SERG3] ....fühlen Sie sich als guter Mensch verpflichtet, einzuspringen und @@ -14163,10 +14163,10 @@ und wenn dieses Bürogebãude urplötzlich irreparable Schãden aufweist, dann.. -für die Neugestaltung eines wichtigen Gebiets der Stadt zu sorgen? [TEX3_L:SERG3] -Wo finde ich mehr Mãnner wie dich? +Wo finde ich mehr Männer wie dich? [TEX3_1:SERG3] -~g~Benutze den ferngesteuerten Helikopter, um Bomben zu 4 Zielen an dem zur Sprengung vorgesehenen Gebãude zu transportieren. +~g~Benutze den ferngesteuerten Helikopter, um Bomben zu 4 Zielen an dem zur Sprengung vorgesehenen Gebäude zu transportieren. [TEX3_2:SERG3] ~g~Du musst an jedem Ziel eine Bombe abwerfen. Die Reihenfolge ist beliebig. @@ -14190,7 +14190,7 @@ Wo finde ich mehr Mãnner wie dich? Verbleibende Ziele: [TEX3_17:SERG3] -~r~Die Zeit ist um. Du hast es nicht geschafft, das Gebãude zu sprengen. +~r~Die Zeit ist um. Du hast es nicht geschafft, das Gebäude zu sprengen. [TEX3_18:SERG3] ~r~Dein Helikopter wurde zerstört! Wie willst du jetzt die Bomben transportieren? @@ -14211,7 +14211,7 @@ Drücke ~h~~k~~VEHICLE_LOOKLEFT~~w~, um den Helikopter gegen den Uhrzeigersinn z Drücke ~h~~k~~VEHICLE_LOOKLEFT~~w~, um den Helikopter im Uhrzeigersinn zu drehen. [TEX3_27:SERG3] -~g~Ãœber eine Haupttreppe hat man Zugang zu allen Stockwerken des Gebãudes. +~g~Ãœber eine Haupttreppe hat man Zugang zu allen Stockwerken des Gebäudes. [TEX3_31:SERG3] ~r~Du hast den Wagen mit den Bomben und dem ferngesteuerten Helikopter zerstört! @@ -14232,7 +14232,7 @@ Drücke die ~h~~k~~VEHICLE_BRAKE~~w~, um die Rotorgeschwindigkeit zu verringern, Drücke die ~h~~k~~VEHICLE_ACCELERATE~~w~, um die Rotorgeschwindigkeit zu erhöhen, der Helikopter ~h~gewinnt dann an Höhe. [TEX3_16:SERG3] -~g~Begib dich zu dem ~w~TOPFUN~g~-Wagen nahe dem zum Abriss vorgesehenen Gebãude. +~g~Begib dich zu dem ~w~TOPFUN~g~-Wagen nahe dem zum Abriss vorgesehenen Gebäude. [TEX3_33:SERG3] Wenn du eine Bombe aufgenommen hast, zeigt dir das Radar die Position des Ziels in Relation zu dem ferngesteuerten Helikopter. @@ -14256,13 +14256,13 @@ Um ~h~eine Bombe aufzunehmen~w~, steuere den Helikopter direkt über sie. Der He ~g~Um eine Bombe aufzunehmen, steuere den Helikopter direkt über sie. Der Helikopter kann immer nur eine Bombe tragen. [TEX3_12:SERG3] -~g~Bombe platziert! Es bleiben nur noch 3 Ziele! Hol die nãchste Bombe. +~g~Bombe platziert! Es bleiben nur noch 3 Ziele! Hol die nächste Bombe. [TEX3_13:SERG3] -~g~Bombe platziert! Es bleiben nur noch 2 Ziele! Hol die nãchste Bombe. +~g~Bombe platziert! Es bleiben nur noch 2 Ziele! Hol die nächste Bombe. [TEX3_14:SERG3] -~g~Bombe platziert! Es bleibt nur noch 1 Ziel! Hol die nãchste Bombe. +~g~Bombe platziert! Es bleibt nur noch 1 Ziel! Hol die nächste Bombe. [TEX3_15:SERG3] ~r~Zeitzünder aktiviert! ~g~ Du musst die ~w~4 Bomben ~g~in der verbleibenden Zeit platzieren. @@ -14313,7 +14313,7 @@ SPEED BONUS!! Taxi-Mission beendet [TAXIH1:TAXI1] -Halte neben einem markierten Fußgãnger, um ihn einsteigen zu lassen, dann bringe ihn rechtzeitig an sein Fahrtziel. +Halte neben einem markierten Fußgänger, um ihn einsteigen zu lassen, dann bringe ihn rechtzeitig an sein Fahrtziel. [FARE1:TAXI1] ~g~Fahrtziel ~w~'Pole Position Club' ~g~in Ocean Beach. @@ -14373,7 +14373,7 @@ Halte neben einem markierten Fußgãnger, um ihn einsteigen zu lassen, dann brin ~g~Fahrtziel ~w~'die Polizeistation' ~g~in Vice Point. [FARE15:TAXI1] -~g~Fahrtziel ~w~'die Pizzagaststãtte' ~g~in Vice Point. +~g~Fahrtziel ~w~'die Pizzagaststätte' ~g~in Vice Point. [WFARE7:TAXI1] ~g~Fahrtziel ~w~'die Polizeistation' ~g~in Little Havana. @@ -14391,10 +14391,10 @@ Halte neben einem markierten Fußgãnger, um ihn einsteigen zu lassen, dann brin ~g~Fahrtziel ~w~'der Stadium' ~g~in Downtown. [WFARE12:TAXI1] -~g~Fahrtziel ~w~'die Pizzagaststãtte' ~g~in Little Haiti. +~g~Fahrtziel ~w~'die Pizzagaststätte' ~g~in Little Haiti. [WFARE13:TAXI1] -~g~Fahrtziel ~w~'die Pizzagaststãtte' ~g~in Downtown. +~g~Fahrtziel ~w~'die Pizzagaststätte' ~g~in Downtown. [WFARE14:TAXI1] ~g~Fahrtziel ~w~'die Docks' ~g~in Viceport. @@ -14408,7 +14408,7 @@ Halte neben einem markierten Fußgãnger, um ihn einsteigen zu lassen, dann brin {=================================== MISSION TABLE TAXICUT ===================================} [TAXC_A:TAXICUT] -Schãtze, sie sind der neue Besitzer. +Schätze, sie sind der neue Besitzer. [TAXC_B:TAXICUT] Sind Sie 'n Mafioso? Oder vom Kartell? Sehen nicht aus wie ein Mexikaner. @@ -14423,7 +14423,7 @@ bedrohen Sie ein paar von den Fahrern- aber nicht Ted, der ist gerade an der Leiste operiert. [TAXC_F:TAXICUT] -Tja, also, hier wird sich einiges ãndern, Lady. +Tja, also, hier wird sich einiges ändern, Lady. [TAXC_G:TAXICUT] Aber nicht doch, Jungchen. Ãœberlassen Sie das lieber mir - @@ -14435,10 +14435,10 @@ Ich mach das schon seit Jahren. Alles mal herhören. [TAXC_J:TAXICUT] -Wir haben eine neue Geschãftsleitung, und es wird sich wieder mal einiges ãndern hier. +Wir haben eine neue Geschäftsleitung, und es wird sich wieder mal einiges ändern hier. [TAXC_K:TAXICUT] -Unsere neue Geschãftsleitung, die- +Unsere neue Geschäftsleitung, die- [TAXC_L:TAXICUT] Von welcher Gang sind Sie? @@ -14453,10 +14453,10 @@ Und wie heißen Sie, junger Mann? Vercetti, Tommy Vercetti. [TAXC_P:TAXICUT] -Unsere neue Geschãftsleitung, die Vercetti Gang, +Unsere neue Geschäftsleitung, die Vercetti Gang, [TAXC_Q:TAXICUT] -wird dafür sorgen, dass wir keinen Ãrger kriegen. +wird dafür sorgen, dass wir keinen Ärger kriegen. [TAXC_R:TAXICUT] Capiche? Ende! @@ -14471,7 +14471,7 @@ Also, so ist das immer gelaufen: Wir führen die Firma weiter wie gewohnt. [TAXC_V:TAXICUT] -Wenn die Konkurrenz Ãrger macht, gebt ihr ihnen eines auf die Mütze. +Wenn die Konkurrenz Ärger macht, gebt ihr ihnen eines auf die Mütze. [TAXC_W:TAXICUT] Dann geben die uns eines auf die Mütze. @@ -14483,7 +14483,7 @@ Dann geben sie denen eines auf die Mütze. Und so weiter, und so fort. Kapiert? [TAXC_Z:TAXICUT] -Ãh, ja, ich glaub schon. +Äh, ja, ich glaub schon. [TAXC_A1:TAXICUT] Schnappen Sie sich ein Taxi aus der Garage, wenn Sie Lust haben. @@ -14526,13 +14526,13 @@ Ok, ok! Aber tun Sie mir nichts! {=================================== MISSION TABLE TAXIWA2 ===================================} [TAX2_1:TAXIWA2] -An alle Wagen. Wir kriegen nirgends Fahrgãste. Was ist los mit euch? +An alle Wagen. Wir kriegen nirgends Fahrgäste. Was ist los mit euch? [TAX2_2:TAXIWA2] VC-Taxi ist dauernd schneller als wir. Die haben einfach zu viele Autos. Keine Chance. [TAX2_3:TAXIWA2] -Mr. Vercetti, wenn Sie zufãllig mithören: Sie müssen ein paar VC-Taxis ausschalten, sonst sind wir pleite! +Mr. Vercetti, wenn Sie zufällig mithören: Sie müssen ein paar VC-Taxis ausschalten, sonst sind wir pleite! [TAXW2_1:TAXIWA2] ~g~Schalte 3 Taxis der Konkurrenz aus! @@ -14558,7 +14558,7 @@ Hmmm, keine Spur von Mercedes... TAXIUNTERNEHMEN ERWORBEN [TAX_AS2:TAXIWA3] -~g~Kaufman-Taxis generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmãßig ab. +~g~Kaufman-Taxis generiert nun bis zu $~1~ Einkünfte. Hol dir das Geld regelmäßig ab. [TAX3_4:TAXIWA3] Wird Zeit, dass der Schutzengel von Kaufman-Taxis eine vor den Latz kriegt! @@ -14579,16 +14579,16 @@ RUSSISCH { new display menus } [FET_GFX] -GRAPHICS SETUP +GRAFIK-SETUP [FED_MIP] MIP MAPPING [FED_AAS] -ANTI ALIASING +KANTENGLÄTTUNG [FED_FIL] -TEXTURE FILTERING +TEXTURFILTERUNG [FED_BIL] BILINEAR @@ -14597,44 +14597,44 @@ BILINEAR TRILINEAR [FED_WND] -WINDOWED +FENSTERMODUS [FED_FLS] -FULLSCREEN +VOLLBILD [FEM_CSB] -CUTSCENE BORDERS +CUTSCENE BALKEN [FEM_SCF] -SCREEN FORMAT +BILDSCHIRMFORMAT [FEM_ISL] -MAP MEMORY USAGE +KARTENSPEICHERNUTZUNG [FEM_LOW] -LOW +NIEDRIG [FEM_MED] -MEDIUM +MITTEL [FEM_HIG] -HIGH +HOCH [FEM_2PR] PS2 ALPHA TEST [FEC_FRC] -FREE CAM +FREIE KAMERA { Linux joy detection } [FEC_JOD] -DETECT JOYSTICK +JOYSTICK ERKENNEN [FEC_JPR] -Press any key on the joystick of your choice that you want to use on the game, and it will be selected. +Drücke eine beliebige Taste auf dem Joystick der für das Spiel verwendet werden soll, und er wird ausgewählt. [FEC_JDE] -Detected joystick +Joystick erkannt { mission restart } [FET_RMS] @@ -14644,25 +14644,25 @@ MISSION WIEDERHOLEN WIEDERHOLEN? [FED_VPL] -VEHICLE PIPELINE +FAHRZEUG-PIPELINE [FED_PRM] -PED RIM LIGHT +CHARAKTER KANTEN LICHT [FED_RGL] -ROAD GLOSS +GLÄNZENDE STRAßEN [FED_CLF] -COLOUR FILTER +FARBFILTER [FED_WLM] -WORLD LIGHTMAPS +WELT LIGHTMAPS [FED_MBL] -MOTION BLUR +BEWEGUNGSUNSCHÄRFE [FEM_SIM] -SIMPLE +SIMPEL [FEM_NRM] NORMAL @@ -14683,7 +14683,7 @@ PS2 XBOX [FEC_IVP] -INVERT PAD VERTICALLY +PAD VERTIKAL INVERTIEREN [FEM_NON] NONE @@ -14704,14 +14704,20 @@ XBOX 360 CONTROLLER XBOX ONE CONTROLLER [FEC_TYP] -GAMEPAD TYPE +GAMEPAD-TYP [FET_AGS] -GAMEPAD SETTINGS +KONTROLLEREINSTELLUNGEN [FEM_AUT] { aspect ratio related } AUTO +[FEM_PED] +PED DENSITY + +[FEM_CAR] +CAR DENSITY + [DUMMY] THIS LABEL NEEDS TO BE HERE !!! -AS THE LAST LABEL DOES NOT GET COMPILED \ No newline at end of file +AS THE LAST LABEL DOES NOT GET COMPILED diff --git a/utils/gxt/gxt.exe b/utils/gxt/gxt.exe index ff264dad..0f55b760 100644 Binary files a/utils/gxt/gxt.exe and b/utils/gxt/gxt.exe differ diff --git a/utils/gxt/italian.txt b/utils/gxt/italian.txt index 4773cde8..da135892 100644 --- a/utils/gxt/italian.txt +++ b/utils/gxt/italian.txt @@ -14721,6 +14721,12 @@ GAMEPAD SETTINGS [FEM_AUT] { aspect ratio related } AUTO +[FEM_PED] +PED DENSITY + +[FEM_CAR] +CAR DENSITY + [DUMMY] THIS LABEL NEEDS TO BE HERE !!! AS THE LAST LABEL DOES NOT GET COMPILED \ No newline at end of file diff --git a/utils/gxt/spanish.txt b/utils/gxt/spanish.txt index 82c1958c..07d44c4c 100644 --- a/utils/gxt/spanish.txt +++ b/utils/gxt/spanish.txt @@ -14407,6 +14407,12 @@ AJUSTES DE MANDO [FEM_AUT] { aspect ratio related } AUTO +[FEM_PED] +PED DENSITY + +[FEM_CAR] +CAR DENSITY + { end of file } [DUMMY] THIS LABEL NEEDS TO BE HERE !!!