summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/ISSUE_TEMPLATE/bug_report.md24
-rw-r--r--.github/pull_request_template.md13
-rw-r--r--.github/workflows/re3_msvc_amd64.yml14
-rw-r--r--.github/workflows/re3_msvc_x86.yml15
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt4
-rw-r--r--README.md204
-rw-r--r--cmake/GetGitRevisionDescription.cmake284
-rw-r--r--cmake/GetGitRevisionDescription.cmake.in43
-rw-r--r--gamefiles/TEXT/american.gxtbin220146 -> 220570 bytes
-rw-r--r--gamefiles/TEXT/french.gxtbin244494 -> 246544 bytes
-rw-r--r--gamefiles/TEXT/german.gxtbin240448 -> 242498 bytes
-rw-r--r--gamefiles/TEXT/italian.gxtbin239912 -> 241978 bytes
-rwxr-xr-x[-rw-r--r--]gamefiles/TEXT/polish.gxtbin239930 -> 241610 bytes
-rw-r--r--gamefiles/TEXT/russian.gxtbin220670 -> 222404 bytes
-rw-r--r--gamefiles/TEXT/spanish.gxtbin234854 -> 235542 bytes
-rw-r--r--gamefiles/models/frontend_ds3.txdbin0 -> 590632 bytes
-rw-r--r--gamefiles/models/frontend_ds4.txdbin0 -> 590632 bytes
-rw-r--r--gamefiles/models/frontend_x360.txdbin0 -> 590632 bytes
-rw-r--r--gamefiles/models/frontend_xone.txdbin0 -> 590632 bytes
-rw-r--r--gamefiles/models/generic.txdbin0 -> 1604112 bytes
-rw-r--r--gamefiles/models/ps3btns.txdbin0 -> 528424 bytes
-rw-r--r--gamefiles/models/x360btns.txdbin126760 -> 528424 bytes
-rw-r--r--premake5.lua12
-rw-r--r--printHash.bat26
-rwxr-xr-xprintHash.sh12
-rw-r--r--src/CMakeLists.txt7
-rw-r--r--src/animation/AnimManager.cpp344
-rw-r--r--src/animation/AnimationId.h360
-rw-r--r--src/audio/AudioLogic.cpp2
-rw-r--r--src/audio/MusicManager.cpp281
-rw-r--r--src/audio/MusicManager.h10
-rw-r--r--src/audio/audio_enums.h5
-rw-r--r--src/audio/oal/channel.cpp56
-rw-r--r--src/audio/oal/channel.h6
-rw-r--r--src/audio/oal/stream.cpp88
-rw-r--r--src/audio/oal/stream.h5
-rw-r--r--src/audio/sampman_miles.cpp10
-rw-r--r--src/audio/sampman_oal.cpp93
-rw-r--r--src/audio/soundlist.h2
-rw-r--r--src/control/AutoPilot.cpp8
-rw-r--r--src/control/AutoPilot.h4
-rw-r--r--src/control/Phones.cpp10
-rw-r--r--src/control/Replay.cpp10
-rw-r--r--src/control/Script.cpp4
-rw-r--r--src/control/Script2.cpp4
-rw-r--r--src/control/Script3.cpp2
-rw-r--r--src/control/Script4.cpp6
-rw-r--r--src/control/Script5.cpp8
-rw-r--r--src/core/AnimViewer.cpp8
-rw-r--r--src/core/Cam.cpp10
-rw-r--r--src/core/CdStream.cpp41
-rw-r--r--src/core/ControllerConfig.cpp43
-rw-r--r--src/core/Frontend.cpp407
-rw-r--r--src/core/Frontend.h22
-rw-r--r--src/core/Game.cpp9
-rw-r--r--src/core/MenuScreens.cpp11
-rw-r--r--src/core/MenuScreensCustom.cpp119
-rw-r--r--src/core/Pad.cpp122
-rw-r--r--src/core/Pad.h2
-rw-r--r--src/core/PlayerInfo.cpp4
-rw-r--r--src/core/World.cpp2
-rw-r--r--src/core/common.h2
-rw-r--r--src/core/config.h26
-rw-r--r--src/core/main.cpp69
-rw-r--r--src/core/re3.cpp256
-rw-r--r--src/extras/GitSHA1.cpp.in2
-rw-r--r--src/extras/GitSHA1.h1
-rw-r--r--src/extras/custompipes_d3d9.cpp31
-rw-r--r--src/extras/custompipes_gl.cpp34
-rw-r--r--src/extras/postfx.cpp12
-rw-r--r--src/extras/screendroplets.cpp6
-rw-r--r--src/extras/shaders/Makefile79
-rw-r--r--src/extras/shaders/colourfilterIII.frag2
-rw-r--r--src/extras/shaders/colourfilterIII_PS.hlsl2
-rw-r--r--src/extras/shaders/contrast.frag2
-rw-r--r--src/extras/shaders/make_glsl.sh9
-rw-r--r--src/extras/shaders/make_hlsl.cmd (renamed from src/extras/shaders/make.cmd)4
-rw-r--r--src/extras/shaders/makeinc_glsl.sh6
-rw-r--r--src/extras/shaders/makeinc_hlsl.sh (renamed from src/extras/shaders/makeinc.sh)1
-rw-r--r--src/extras/shaders/neoVehicle.vert2
-rw-r--r--src/extras/shaders/neoVehicle_VS.hlsl2
-rw-r--r--src/extras/shaders/obj/colourfilterIII_PS.cso (renamed from src/extras/shaders/colourfilterIII_PS.cso)bin452 -> 452 bytes
-rw-r--r--src/extras/shaders/obj/colourfilterIII_PS.inc (renamed from src/extras/shaders/colourfilterIII_PS.inc)0
-rw-r--r--src/extras/shaders/obj/colourfilterIII_frag.inc (renamed from src/extras/shaders/colourfilterIII_fs_gl.inc)2
-rw-r--r--src/extras/shaders/obj/contrastPS.cso (renamed from src/extras/shaders/contrastPS.cso)bin344 -> 344 bytes
-rw-r--r--src/extras/shaders/obj/contrastPS.inc (renamed from src/extras/shaders/contrastPS.inc)0
-rw-r--r--src/extras/shaders/obj/contrast_frag.inc (renamed from src/extras/shaders/contrast_fs_gl.inc)2
-rw-r--r--src/extras/shaders/obj/default_UV2_VS.cso (renamed from src/extras/shaders/default_UV2_VS.cso)bin628 -> 628 bytes
-rw-r--r--src/extras/shaders/obj/default_UV2_VS.inc (renamed from src/extras/shaders/default_UV2_VS.inc)0
-rw-r--r--src/extras/shaders/obj/default_UV2_vert.inc (renamed from src/extras/shaders/default_UV2_gl.inc)0
-rw-r--r--src/extras/shaders/obj/im2d_UV2_vert.inc (renamed from src/extras/shaders/im2d_UV2_gl.inc)0
-rw-r--r--src/extras/shaders/obj/im2d_vert.inc (renamed from src/extras/shaders/im2d_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_PS.cso (renamed from src/extras/shaders/neoGloss_PS.cso)bin444 -> 444 bytes
-rw-r--r--src/extras/shaders/obj/neoGloss_PS.inc (renamed from src/extras/shaders/neoGloss_PS.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_VS.cso (renamed from src/extras/shaders/neoGloss_VS.cso)bin764 -> 764 bytes
-rw-r--r--src/extras/shaders/obj/neoGloss_VS.inc (renamed from src/extras/shaders/neoGloss_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_frag.inc (renamed from src/extras/shaders/neoGloss_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoGloss_vert.inc (renamed from src/extras/shaders/neoGloss_vs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoRimSkin_VS.cso (renamed from src/extras/shaders/neoRimSkin_VS.cso)bin2404 -> 2404 bytes
-rw-r--r--src/extras/shaders/obj/neoRimSkin_VS.inc (renamed from src/extras/shaders/neoRimSkin_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoRimSkin_vert.inc (renamed from src/extras/shaders/neoRimSkin_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoRim_VS.cso (renamed from src/extras/shaders/neoRim_VS.cso)bin1384 -> 1384 bytes
-rw-r--r--src/extras/shaders/obj/neoRim_VS.inc (renamed from src/extras/shaders/neoRim_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoRim_vert.inc (renamed from src/extras/shaders/neoRim_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_PS.cso (renamed from src/extras/shaders/neoVehicle_PS.cso)bin476 -> 476 bytes
-rw-r--r--src/extras/shaders/obj/neoVehicle_PS.inc (renamed from src/extras/shaders/neoVehicle_PS.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_VS.cso (renamed from src/extras/shaders/neoVehicle_VS.cso)bin1896 -> 1896 bytes
-rw-r--r--src/extras/shaders/obj/neoVehicle_VS.inc (renamed from src/extras/shaders/neoVehicle_VS.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_frag.inc (renamed from src/extras/shaders/neoVehicle_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/neoVehicle_vert.inc (renamed from src/extras/shaders/neoVehicle_vs_gl.inc)2
-rw-r--r--src/extras/shaders/obj/neoWorldIII_PS.cso (renamed from src/extras/shaders/neoWorldIII_PS.cso)bin528 -> 528 bytes
-rw-r--r--src/extras/shaders/obj/neoWorldIII_PS.inc (renamed from src/extras/shaders/neoWorldIII_PS.inc)0
-rw-r--r--src/extras/shaders/obj/neoWorldIII_frag.inc (renamed from src/extras/shaders/neoWorldIII_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/screenDroplet_PS.cso (renamed from src/extras/shaders/screenDroplet_PS.cso)bin324 -> 324 bytes
-rw-r--r--src/extras/shaders/obj/screenDroplet_PS.inc (renamed from src/extras/shaders/screenDroplet_PS.inc)0
-rw-r--r--src/extras/shaders/obj/screenDroplet_frag.inc (renamed from src/extras/shaders/screenDroplet_fs_gl.inc)0
-rw-r--r--src/extras/shaders/obj/simple_frag.inc (renamed from src/extras/shaders/simple_fs_gl.inc)0
-rw-r--r--src/fakerw/fake.cpp37
-rw-r--r--src/fakerw/rtpng.h4
-rw-r--r--src/peds/CopPed.cpp6
-rw-r--r--src/peds/EmergencyPed.cpp2
-rw-r--r--src/peds/Ped.cpp383
-rw-r--r--src/peds/PedAI.cpp352
-rw-r--r--src/peds/PedFight.cpp358
-rw-r--r--src/peds/PlayerPed.cpp74
-rw-r--r--src/peds/Population.cpp2
-rw-r--r--src/render/Clouds.cpp4
-rw-r--r--src/render/Font.cpp32
-rw-r--r--src/render/Font.h1
-rw-r--r--src/render/Hud.cpp8
-rw-r--r--src/render/Shadows.cpp4
-rw-r--r--src/render/WaterCannon.cpp4
-rw-r--r--src/skel/crossplatform.h9
-rw-r--r--src/skel/glfw/glfw.cpp23
-rw-r--r--src/skel/win/gta3.icobin2238 -> 161654 bytes
-rw-r--r--src/skel/win/win.cpp9
-rw-r--r--src/text/Text.cpp2
-rw-r--r--src/vehicles/Automobile.cpp78
-rw-r--r--src/vehicles/Vehicle.h4
-rw-r--r--src/weapons/BulletInfo.cpp6
-rw-r--r--src/weapons/Weapon.cpp20
-rw-r--r--src/weapons/WeaponInfo.cpp6
-rw-r--r--utils/gxt/american.txt152
-rw-r--r--utils/gxt/build.bat3
-rw-r--r--utils/gxt/french.txt284
-rw-r--r--utils/gxt/german.txt282
-rw-r--r--utils/gxt/italian.txt282
-rwxr-xr-xutils/gxt/polish.txt8108
-rw-r--r--utils/gxt/russian.txt256
-rw-r--r--utils/gxt/spanish.txt182
m---------vendor/librw0
152 files changed, 12298 insertions, 2011 deletions
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..85d1e584
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,24 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior.
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Version**
+Tell us what version you're running. Find out using the debug menu (Ctrl-M, Debug -> Version Text)
+If you send a screenshot just enable it beforehand.
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000..f458bd43
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,13 @@
+As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are **completely** reversed code from original binaries.
+
+We **don't** accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.
+
+We accept only these kinds of PRs;
+
+- A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
+- Game, UI or UX bug fixes (if it's a fix to R* code, it should be behind FIX_BUGS)
+- Platform-specific and/or unused code that's not been reversed yet
+- Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
+- A new cross-platform skeleton/compatibility layer, or improvements to them
+- Translation fixes, for languages R* supported/outsourced
+- Code that increase maintainability
diff --git a/.github/workflows/re3_msvc_amd64.yml b/.github/workflows/re3_msvc_amd64.yml
index 863e2f94..78994650 100644
--- a/.github/workflows/re3_msvc_amd64.yml
+++ b/.github/workflows/re3_msvc_amd64.yml
@@ -48,14 +48,22 @@ jobs:
- name: Build
run: |
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
- - name: Pack artifacts
+ # - name: Pack artifacts
+ # run: |
+ # 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
+ - name: Move binaries to gamefiles
run: |
- 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
+ mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.exe ./gamefiles/
+ mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.pdb ./gamefiles/
+ - name: Move dynamic dependencies to gamefiles
+ run: |
+ mv ./vendor/mpg123/dist/Win64/libmpg123-0.dll ./gamefiles/
+ mv ./vendor/openal-soft/dist/Win64/OpenAL32.dll ./gamefiles/
- name: Upload artifact to actions
uses: actions/upload-artifact@v2
with:
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
- path: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
+ path: ./gamefiles/*
# - name: Upload artifact to Bintray
# uses: hpcsc/upload-bintray-docker-action@v1
# with:
diff --git a/.github/workflows/re3_msvc_x86.yml b/.github/workflows/re3_msvc_x86.yml
index ff9afb25..ad60ce43 100644
--- a/.github/workflows/re3_msvc_x86.yml
+++ b/.github/workflows/re3_msvc_x86.yml
@@ -48,14 +48,23 @@ jobs:
- name: Build
run: |
msbuild -m build/re3.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
- - name: Pack artifacts
+ # - name: Pack artifacts
+ # run: |
+ # 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
+ - name: Move binaries to gamefiles
run: |
- 7z a re3_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
+ mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.exe ./gamefiles/
+ mv ./bin/${{matrix.platform}}/${{matrix.buildtype}}/re3.pdb ./gamefiles/
+ - if: contains(matrix.platform, 'oal')
+ name: Move dynamic dependencies to gamefiles
+ run: |
+ mv ./vendor/mpg123/dist/Win32/libmpg123-0.dll ./gamefiles/
+ mv ./vendor/openal-soft/dist/Win32/OpenAL32.dll ./gamefiles/
- name: Upload artifact to actions
uses: actions/upload-artifact@v2
with:
name: re3_${{matrix.buildtype}}_${{matrix.platform}}
- path: re3_${{matrix.buildtype}}_${{matrix.platform}}.zip
+ path: ./gamefiles/*
# - name: Upload artifact to Bintray
# uses: hpcsc/upload-bintray-docker-action@v1
# with:
diff --git a/.gitignore b/.gitignore
index 44d3eb0b..b4f221f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -358,3 +358,5 @@ sdk/
codewarrior/re3_Data/
codewarrior/Release/
codewarrior/Debug/
+
+src/extras/GitSHA1.cpp \ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8d753d80..5396d3b4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,10 @@ set(PROJECT RE3)
project(${EXECUTABLE} C CXX)
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
+include(GetGitRevisionDescription)
+get_git_head_revision(GIT_REFSPEC GIT_SHA1 "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
+message(STATUS "Building ${CMAKE_PROJECT_NAME} GIT SHA1: ${GIT_SHA1}")
+
if(WIN32)
set(${PROJECT}_AUDIOS "OAL" "MSS")
else()
diff --git a/README.md b/README.md
index e0fac061..78f61b04 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,101 @@
<img src="https://github.com/GTAmodding/re3/blob/master/logo.png?raw=true" alt="re3 logo" width="200">
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmaster&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=master)
-<a href="https://discord.gg/aKYAwCx92H"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
+<a href="https://discord.gg/ERYg58ttcE"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
## Intro
-The aim of this project is to reverse GTA III for PC by replacing
-parts of the game [one by one](https://en.wikipedia.org/wiki/Ship_of_Theseus)
-such that we have a working game at all times.
-
-## How can I try it?
-
-- re3 requires game assets to work, so you **must** own [a copy of GTA III](https://store.steampowered.com/app/12100/Grand_Theft_Auto_III/).
-- Build re3 or download [the latest nightly build](https://github.com/GTAmodding/re3/actions) (You must be logged in.)
-- (Optional) If you want to use optional features like Russian language or menu map, copy the files in /gamefiles folder to your game root folder.
-- Move re3.exe to GTA 3 directory and run it.
-
-## Latest standalone executables to download
-
-(Put content of selected archive into gamedir)
-
-- [MacOS 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/macos-latest-gl3.zip)
-- [Linux 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/ubuntu-latest-gl3.zip)
-- [Windows D3D9 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/windows-latest-d3d9.zip)
-- [Windows OpenGL 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/windows-latest-gl3.zip)
-- [Windows D3D9 MSS 32bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_x86/master/re3_Release_win-x86-librw_d3d9-mss.zip)
+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.\
+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.
+
+The project has also been ported to the [Nintendo Switch](https://github.com/AGraber/re3-nx/),
+[Playstation Vita](https://github.com/Rinnegatamante/re3) and
+[Nintendo Wii U](https://github.com/GaryOderNichts/re3-wiiu/).
+
+We cannot build for PS2 or Xbox yet. If you're interested in doing so, get in touch with us.
+
+## Installation
+
+- re3 requires PC game assets to work, so you **must** own [a copy of GTA III](https://store.steampowered.com/app/12100/Grand_Theft_Auto_III/).
+- Build re3 or download the latest nightly build:
+ - [Windows D3D9 MSS 32bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_x86/master/re3_Release_win-x86-librw_d3d9-mss.zip)
+ - [Windows D3D9 64bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_amd64/master/re3_Release_win-amd64-librw_d3d9-oal.zip)
+ - [Windows OpenGL 64bit](https://nightly.link/GTAmodding/re3/workflows/re3_msvc_amd64/master/re3_Release_win-amd64-librw_gl3_glfw-oal.zip)
+ - [Linux 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/ubuntu-latest-gl3.zip)
+ - [MacOS 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/master/macos-latest-gl3.zip)
+- Extract the downloaded zip over your GTA 3 directory and run re3. The zip includes the gamefiles and in case of OpenAL the required dlls.
+
+## Screenshots
+
+![re3 2021-02-11 22-57-03-23](https://user-images.githubusercontent.com/1521437/107704085-fbdabd00-6cbc-11eb-8406-8951a80ccb16.png)
+![re3 2021-02-11 22-43-44-98](https://user-images.githubusercontent.com/1521437/107703339-cbdeea00-6cbb-11eb-8f0b-07daa105d470.png)
+![re3 2021-02-11 22-46-33-76](https://user-images.githubusercontent.com/1521437/107703343-cd101700-6cbb-11eb-9ccd-012cb90524b7.png)
+![re3 2021-02-11 22-50-29-54](https://user-images.githubusercontent.com/1521437/107703348-d00b0780-6cbb-11eb-8afd-054249c2b95e.png)
+
+## Improvements
+
+We have implemented a number of changes and improvements to the original game.
+They can be configured in `core/config.h`.
+Some of them can be toggled at runtime, some cannot.
+
+* Fixed a lot of smaller and bigger bugs
+* User files (saves and settings) stored in GTA root directory
+* Settings stored in re3.ini file instead of gta3.set
+* Debug menu to do and change various things (Ctrl-M to open)
+* Debug camera (Ctrl-B to toggle)
+* Rotatable camera
+* XInput controller support (Windows)
+* No loading screens between islands ("map memory usage" in menu)
+* Skinned ped support (models from Xbox or Mobile)
+* Rendering
+ * Widescreen support (properly scaled HUD, Menu and FOV)
+ * PS2 MatFX (vehicle reflections)
+ * PS2 alpha test (better rendering of transparency)
+ * PS2 particles
+ * Xbox vehicle rendering
+ * Xbox world lightmap rendering (needs Xbox map)
+ * Xbox ped rim light
+ * Xbox screen rain droplets
+ * More customizable colourfilter
+* Menu
+ * Map
+ * More options
+ * Controller configuration menu
+ * ...
+* Can load DFFs and TXDs from other platforms, possibly with a performance penalty
+* ...
+
+## To-Do
+
+The following things would be nice to have/do:
+
+* Fix physics for high FPS
+* Improve performance on lower end devices, especially the OpenGL layer on the Raspberry Pi (if you have experience with this, please get in touch)
+* Compare code with PS2 code (tedious, no good decompiler)
+* [PS2 port](https://github.com/GTAmodding/re3/wiki/PS2-port)
+* Xbox port (not quite as important)
+* reverse remaining unused/debug functions
+* compare CodeWarrior build with original binary for more accurate code (very tedious)
+
+## Modding
+
+Asset modifications (models, texture, handling, script, ...) should work the same way as with original GTA for the most part.
+
+Mods that make changes to the code (dll/asi, CLEO, limit adjusters) will *not* work.
+Some things these mods do are already implemented in re3 (much of SkyGFX, GInput, SilentPatch, Widescreen fix),
+others can easily be achieved (increasing limis, see `config.h`),
+others will simply have to be rewritten and integrated into the code directly.
+Sorry for the inconvenience.
## Building from Source
-If you gonna use premake, then before starting you may want to point GTA_III_RE_DIR environment variable to GTA3 root folder, if you want executable to be moved there via post-build script.
+When using premake, you may want to point GTA_III_RE_DIR environment variable to GTA3 root folder if you want the executable to be moved there via post-build script.
+
+Clone the repository with `git clone --recursive https://github.com/GTAmodding/re3.git`. Then `cd re3` into the cloned repository.
<details><summary>Linux Premake</summary>
@@ -38,13 +105,6 @@ For Linux using premake, proceed: [Building on Linux](https://github.com/GTAmodd
<details><summary>Linux Conan</summary>
-Obtain source code.
-```
-git clone https://github.com/GTAmodding/re3.git
-cd re3
-git submodule init
-git submodule update --recursive
-```
Install python and conan, and then run build.
```
conan export vendor/librw librw/master@
@@ -63,36 +123,76 @@ For FreeBSD using premake, proceed: [Building on FreeBSD](https://github.com/GTA
<details><summary>Windows</summary>
-Assuming you have Visual Studio:
-- Clone the repo using the argument `--recursive`.
+Assuming you have Visual Studio 2015/2017/2019:
- Run one of the `premake-vsXXXX.cmd` variants on root folder.
-- Open the project via Visual Studio
-
-**If you use 64-bit D3D9**: We don't ship 64-bit Dx9 SDK. You need to download it from Microsoft if you don't have it(although it should come pre-installed after some Windows version)
+- Open build/re3.sln with Visual Studio and compile the solution.
+
+Microsoft recently discontinued its downloads of the DX9 SDK. You can download an archived version here: https://archive.org/details/dxsdk_jun10
**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).
</details>
-> :information_source: There are various settings at the very bottom of [config.h](https://github.com/GTAmodding/re3/tree/master/src/core/config.h), you may want to take a look there. i.e. FIX_BUGS define fixes the bugs we've come across.
+> :information_source: premake has an `--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/master/src/core/config.h), you may want to take a look there.
-> :information_source: **Did you notice librw?** re3 uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of re3, but you also can use LIBRW enviorenment variable to specify path to your own librw.
+> :information_source: re3 uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of re3, but you also can use LIBRW enviorenment variable to specify path to your own librw.
+
+If you feel the need, you can also use CodeWarrior 7 to compile re3 using the supplied codewarrior/re3.mcp project - this requires the original RW33 libraries, and the DX8 SDK. The build is unstable compared to the MSVC builds though, and is mostly meant to serve as a reference.
## Contributing
-Please read the [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) Document
+As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are **completely** reversed code from original binaries.
-### Unreversed / incomplete classes (at least the ones we know)
-The following classes have only unused or practically unused code left:
-```
-NameGrid.cpp - only on mobile (a player name grid, either a very early player name code ala GTA1 or a multiplayer leftover)
-PedDebug.cpp - only on mobile (debug code)
-HandlingMgr.cpp - debug functions from mobile
-CFormationInfo - unused PedAI class that could be found on mobile
-CVehicle::ProcessBikeWheel - early bike code (only on mobile)
-CAutomobile::DebugCode - debug function from mobile
-CBoat::DebugCode - debug function from mobile
-CBoat::ModifyHandlingValue - debug function from mobile
-CBoat::DisplayHandlingData - debug function from mobile
-CStreaming::PrintRequestList - debug function from mobile
-d3d8raster.c - only on PC (slight RW modification that we don't actually need)
-```
+We **don't** accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.
+
+We accept only these kinds of PRs;
+
+- A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
+- Game, UI or UX bug fixes (if it's a fix to original code, it should be behind FIX_BUGS)
+- Platform-specific and/or unused code that's not been reversed yet
+- Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
+- A new cross-platform skeleton/compatibility layer, or improvements to them
+- Translation fixes, for languages original game supported
+- Code that increase maintainability
+
+We have a [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) document that isn't followed or enforced very well.
+
+Do not use features from C++11 or later.
+
+
+## History
+
+re3 was started sometime in the spring of 2018,
+initially as a way to test reversed collision and physics code
+inside the game.
+This was done by replacing single functions of the game
+with their reversed counterparts using a dll.
+
+After a bit of work the project lay dormant for about a year
+and was picked up again and pushed to github in May 2019.
+At the time I (aap) had reversed around 10k lines of code and estimated
+the final game to have around 200-250k.
+Others quickly joined the effort (Fire_Head, shfil, erorcun and Nick007J
+in time order, and Serge a bit later) and we made very quick progress
+throughout the summer of 2019
+after which the pace slowed down a bit.
+
+Due to everyone staying home during the start of the Corona pandemic
+everybody had a lot of time to work on re3 again and
+we finally got a standalone exe in April 2020 (around 180k lines by then).
+
+After the initial excitement and fixing and polishing the code further,
+reVC was started in early May 2020 by starting from re3 code,
+not by starting from scratch replacing functions with a dll.
+After a few months of mostly steady progress we considered reVC
+finished in December.
+
+Since then we have started reLCS, which is currently work in progress.
+
+
+## License
+We don't feel like we're in a position to give this code a license.\
+The code should only be used for educational, documentation and modding purposes.\
+We do not encourage piracy or commercial use.\
+Please keep derivate work open source and give proper credit.
diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake
new file mode 100644
index 00000000..87f691ad
--- /dev/null
+++ b/cmake/GetGitRevisionDescription.cmake
@@ -0,0 +1,284 @@
+# - Returns a version string from Git
+#
+# These functions force a re-configure on each git commit so that you can
+# trust the values of the variables in your build system.
+#
+# get_git_head_revision(<refspecvar> <hashvar> [ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR])
+#
+# Returns the refspec and sha hash of the current head revision
+#
+# git_describe(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe on the source tree, and adjusting
+# the output so that it tests false if an error occurs.
+#
+# git_describe_working_tree(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe on the working tree (--dirty option),
+# and adjusting the output so that it tests false if an error occurs.
+#
+# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe --exact-match on the source tree,
+# and adjusting the output so that it tests false if there was no exact
+# matching tag.
+#
+# git_local_changes(<var>)
+#
+# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
+# Uses the return code of "git diff-index --quiet HEAD --".
+# Does not regard untracked files.
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2020 Ryan Pavlik <ryan.pavlik@gmail.com> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+#
+# Copyright 2009-2013, Iowa State University.
+# Copyright 2013-2020, Ryan Pavlik
+# Copyright 2013-2020, Contributors
+# SPDX-License-Identifier: BSL-1.0
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__get_git_revision_description)
+ return()
+endif()
+set(__get_git_revision_description YES)
+
+# We must run the following at "include" time, not at function call time,
+# to find the path to this module rather than the path to a calling list file
+get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+
+# Function _git_find_closest_git_dir finds the next closest .git directory
+# that is part of any directory in the path defined by _start_dir.
+# The result is returned in the parent scope variable whose name is passed
+# as variable _git_dir_var. If no .git directory can be found, the
+# function returns an empty string via _git_dir_var.
+#
+# Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and
+# neither foo nor bar contain a file/directory .git. This wil return
+# C:/bla/.git
+#
+function(_git_find_closest_git_dir _start_dir _git_dir_var)
+ set(cur_dir "${_start_dir}")
+ set(git_dir "${_start_dir}/.git")
+ while(NOT EXISTS "${git_dir}")
+ # .git dir not found, search parent directories
+ set(git_previous_parent "${cur_dir}")
+ get_filename_component(cur_dir ${cur_dir} DIRECTORY)
+ if(cur_dir STREQUAL git_previous_parent)
+ # We have reached the root directory, we are not in git
+ set(${_git_dir_var}
+ ""
+ PARENT_SCOPE)
+ return()
+ endif()
+ set(git_dir "${cur_dir}/.git")
+ endwhile()
+ set(${_git_dir_var}
+ "${git_dir}"
+ PARENT_SCOPE)
+endfunction()
+
+function(get_git_head_revision _refspecvar _hashvar)
+ _git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
+
+ if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
+ set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE)
+ else()
+ set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE)
+ endif()
+ if(NOT "${GIT_DIR}" STREQUAL "")
+ file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
+ "${GIT_DIR}")
+ if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
+ # We've gone above the CMake root dir.
+ set(GIT_DIR "")
+ endif()
+ endif()
+ if("${GIT_DIR}" STREQUAL "")
+ set(${_refspecvar}
+ "GITDIR-NOTFOUND"
+ PARENT_SCOPE)
+ set(${_hashvar}
+ "GITDIR-NOTFOUND"
+ PARENT_SCOPE)
+ return()
+ endif()
+
+ # Check if the current source dir is a git submodule or a worktree.
+ # In both cases .git is a file instead of a directory.
+ #
+ if(NOT IS_DIRECTORY ${GIT_DIR})
+ # The following git command will return a non empty string that
+ # points to the super project working tree if the current
+ # source dir is inside a git submodule.
+ # Otherwise the command will return an empty string.
+ #
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" rev-parse
+ --show-superproject-working-tree
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ OUTPUT_VARIABLE out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT "${out}" STREQUAL "")
+ # If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule
+ file(READ ${GIT_DIR} submodule)
+ string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
+ ${submodule})
+ string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
+ get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
+ get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
+ ABSOLUTE)
+ set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
+ else()
+ # GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree
+ file(READ ${GIT_DIR} worktree_ref)
+ # The .git directory contains a path to the worktree information directory
+ # inside the parent git repo of the worktree.
+ #
+ string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
+ ${worktree_ref})
+ string(STRIP ${git_worktree_dir} git_worktree_dir)
+ _git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
+ set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
+ endif()
+ else()
+ set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
+ endif()
+ set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
+ if(NOT EXISTS "${GIT_DATA}")
+ file(MAKE_DIRECTORY "${GIT_DATA}")
+ endif()
+
+ if(NOT EXISTS "${HEAD_SOURCE_FILE}")
+ return()
+ endif()
+ set(HEAD_FILE "${GIT_DATA}/HEAD")
+ configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
+
+ configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
+ "${GIT_DATA}/grabRef.cmake" @ONLY)
+ include("${GIT_DATA}/grabRef.cmake")
+
+ set(${_refspecvar}
+ "${HEAD_REF}"
+ PARENT_SCOPE)
+ set(${_hashvar}
+ "${HEAD_HASH}"
+ PARENT_SCOPE)
+endfunction()
+
+function(git_describe _var)
+ if(NOT GIT_FOUND)
+ find_package(Git QUIET)
+ endif()
+ get_git_head_revision(refspec hash)
+ if(NOT GIT_FOUND)
+ set(${_var}
+ "GIT-NOTFOUND"
+ PARENT_SCOPE)
+ return()
+ endif()
+ if(NOT hash)
+ set(${_var}
+ "HEAD-HASH-NOTFOUND"
+ PARENT_SCOPE)
+ return()
+ endif()
+
+ # TODO sanitize
+ #if((${ARGN}" MATCHES "&&") OR
+ # (ARGN MATCHES "||") OR
+ # (ARGN MATCHES "\\;"))
+ # message("Please report the following error to the project!")
+ # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
+ #endif()
+
+ #message(STATUS "Arguments to execute_process: ${ARGN}")
+
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ RESULT_VARIABLE res
+ OUTPUT_VARIABLE out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT res EQUAL 0)
+ set(out "${out}-${res}-NOTFOUND")
+ endif()
+
+ set(${_var}
+ "${out}"
+ PARENT_SCOPE)
+endfunction()
+
+function(git_describe_working_tree _var)
+ if(NOT GIT_FOUND)
+ find_package(Git QUIET)
+ endif()
+ if(NOT GIT_FOUND)
+ set(${_var}
+ "GIT-NOTFOUND"
+ PARENT_SCOPE)
+ return()
+ endif()
+
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ RESULT_VARIABLE res
+ OUTPUT_VARIABLE out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(NOT res EQUAL 0)
+ set(out "${out}-${res}-NOTFOUND")
+ endif()
+
+ set(${_var}
+ "${out}"
+ PARENT_SCOPE)
+endfunction()
+
+function(git_get_exact_tag _var)
+ git_describe(out --exact-match ${ARGN})
+ set(${_var}
+ "${out}"
+ PARENT_SCOPE)
+endfunction()
+
+function(git_local_changes _var)
+ if(NOT GIT_FOUND)
+ find_package(Git QUIET)
+ endif()
+ get_git_head_revision(refspec hash)
+ if(NOT GIT_FOUND)
+ set(${_var}
+ "GIT-NOTFOUND"
+ PARENT_SCOPE)
+ return()
+ endif()
+ if(NOT hash)
+ set(${_var}
+ "HEAD-HASH-NOTFOUND"
+ PARENT_SCOPE)
+ return()
+ endif()
+
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ RESULT_VARIABLE res
+ OUTPUT_VARIABLE out
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(res EQUAL 0)
+ set(${_var}
+ "CLEAN"
+ PARENT_SCOPE)
+ else()
+ set(${_var}
+ "DIRTY"
+ PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/cmake/GetGitRevisionDescription.cmake.in b/cmake/GetGitRevisionDescription.cmake.in
new file mode 100644
index 00000000..116efc4e
--- /dev/null
+++ b/cmake/GetGitRevisionDescription.cmake.in
@@ -0,0 +1,43 @@
+#
+# Internal file for GetGitRevisionDescription.cmake
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright 2009-2012, Iowa State University
+# Copyright 2011-2015, Contributors
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+# SPDX-License-Identifier: BSL-1.0
+
+set(HEAD_HASH)
+
+file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
+
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+if(HEAD_CONTENTS MATCHES "ref")
+ # named branch
+ string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
+ if(EXISTS "@GIT_DIR@/${HEAD_REF}")
+ configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+ else()
+ configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
+ file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
+ if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
+ set(HEAD_HASH "${CMAKE_MATCH_1}")
+ endif()
+ endif()
+else()
+ # detached HEAD
+ configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
+endif()
+
+if(NOT HEAD_HASH)
+ file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
+ string(STRIP "${HEAD_HASH}" HEAD_HASH)
+endif()
diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt
index cf4bb1e5..ebd1ac39 100644
--- a/gamefiles/TEXT/american.gxt
+++ b/gamefiles/TEXT/american.gxt
Binary files differ
diff --git a/gamefiles/TEXT/french.gxt b/gamefiles/TEXT/french.gxt
index cb2874f9..5b4c9e05 100644
--- a/gamefiles/TEXT/french.gxt
+++ b/gamefiles/TEXT/french.gxt
Binary files differ
diff --git a/gamefiles/TEXT/german.gxt b/gamefiles/TEXT/german.gxt
index d5a986cf..88c54095 100644
--- a/gamefiles/TEXT/german.gxt
+++ b/gamefiles/TEXT/german.gxt
Binary files differ
diff --git a/gamefiles/TEXT/italian.gxt b/gamefiles/TEXT/italian.gxt
index 95e2dd36..746f07da 100644
--- a/gamefiles/TEXT/italian.gxt
+++ b/gamefiles/TEXT/italian.gxt
Binary files differ
diff --git a/gamefiles/TEXT/polish.gxt b/gamefiles/TEXT/polish.gxt
index 1782ef87..5519c290 100644..100755
--- a/gamefiles/TEXT/polish.gxt
+++ b/gamefiles/TEXT/polish.gxt
Binary files differ
diff --git a/gamefiles/TEXT/russian.gxt b/gamefiles/TEXT/russian.gxt
index 026222ac..aeb3f0b5 100644
--- a/gamefiles/TEXT/russian.gxt
+++ b/gamefiles/TEXT/russian.gxt
Binary files differ
diff --git a/gamefiles/TEXT/spanish.gxt b/gamefiles/TEXT/spanish.gxt
index 6b188fc6..be659528 100644
--- a/gamefiles/TEXT/spanish.gxt
+++ b/gamefiles/TEXT/spanish.gxt
Binary files differ
diff --git a/gamefiles/models/frontend_ds3.txd b/gamefiles/models/frontend_ds3.txd
new file mode 100644
index 00000000..7481e9b9
--- /dev/null
+++ b/gamefiles/models/frontend_ds3.txd
Binary files differ
diff --git a/gamefiles/models/frontend_ds4.txd b/gamefiles/models/frontend_ds4.txd
new file mode 100644
index 00000000..594de328
--- /dev/null
+++ b/gamefiles/models/frontend_ds4.txd
Binary files differ
diff --git a/gamefiles/models/frontend_x360.txd b/gamefiles/models/frontend_x360.txd
new file mode 100644
index 00000000..a57b8d13
--- /dev/null
+++ b/gamefiles/models/frontend_x360.txd
Binary files differ
diff --git a/gamefiles/models/frontend_xone.txd b/gamefiles/models/frontend_xone.txd
new file mode 100644
index 00000000..03dfefda
--- /dev/null
+++ b/gamefiles/models/frontend_xone.txd
Binary files differ
diff --git a/gamefiles/models/generic.txd b/gamefiles/models/generic.txd
new file mode 100644
index 00000000..8e0d60f3
--- /dev/null
+++ b/gamefiles/models/generic.txd
Binary files differ
diff --git a/gamefiles/models/ps3btns.txd b/gamefiles/models/ps3btns.txd
new file mode 100644
index 00000000..ed216263
--- /dev/null
+++ b/gamefiles/models/ps3btns.txd
Binary files differ
diff --git a/gamefiles/models/x360btns.txd b/gamefiles/models/x360btns.txd
index 27837c2f..95a68c8b 100644
--- a/gamefiles/models/x360btns.txd
+++ b/gamefiles/models/x360btns.txd
Binary files differ
diff --git a/premake5.lua b/premake5.lua
index f715f1e5..d4459f94 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -204,6 +204,7 @@ project "librw"
architecture "amd64"
filter "platforms:win*"
+ defines { "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE" }
staticruntime "on"
buildoptions { "/Zc:sizedDealloc-" }
@@ -235,6 +236,10 @@ project "re3"
targetname "re3"
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
+ if(_OPTIONS["with-librw"]) then
+ dependson "librw"
+ end
+
files { addSrcFiles("src") }
files { addSrcFiles("src/animation") }
files { addSrcFiles("src/audio") }
@@ -258,6 +263,7 @@ project "re3"
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
includedirs { "src" }
includedirs { "src/animation" }
@@ -308,7 +314,7 @@ project "re3"
filter {}
if(os.getenv("GTA_III_RE_DIR")) then
- setpaths("$(GTA_III_RE_DIR)/", "%(cfg.buildtarget.name)")
+ setpaths(os.getenv("GTA_III_RE_DIR") .. "/", "%(cfg.buildtarget.name)")
end
filter "platforms:win*"
@@ -322,6 +328,10 @@ project "re3"
-- external librw is dynamic
staticruntime "on"
end
+ prebuildcommands { '"%{prj.location}..\\printHash.bat" "%{prj.location}..\\src\\extras\\GitSHA1.cpp"' }
+
+ filter "platforms:not win*"
+ prebuildcommands { '"%{prj.location}/../printHash.sh" "%{prj.location}/../src/extras/GitSHA1.cpp"' }
filter "platforms:win*glfw*"
staticruntime "off"
diff --git a/printHash.bat b/printHash.bat
new file mode 100644
index 00000000..ef1cd9d6
--- /dev/null
+++ b/printHash.bat
@@ -0,0 +1,26 @@
+@echo off
+
+REM creates version.h with HEAD commit hash
+REM params: $1=full path to output file (usually points version.h)
+
+setlocal enableextensions enabledelayedexpansion
+
+cd /d "%~dp0"
+
+break> %1
+
+<nul set /p=^"#define GIT_SHA1 ^"^"> %1
+
+where git
+if "%errorlevel%" == "0" ( goto :havegit ) else ( goto :writeending )
+
+:havegit
+for /f %%v in ('git rev-parse --short HEAD') do set version=%%v
+<nul set /p="%version%" >> %1
+
+:writeending
+
+echo ^" >> %1
+echo const char* g_GIT_SHA1 = GIT_SHA1; >> %1
+
+EXIT /B \ No newline at end of file
diff --git a/printHash.sh b/printHash.sh
new file mode 100755
index 00000000..e7d6f018
--- /dev/null
+++ b/printHash.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+
+> $1
+
+echo -n "#define GIT_SHA1 \"" > $1
+
+if (command -v "git" >/dev/null) then
+git rev-parse --short HEAD | tr -d '\n' >> $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 df39c7c9..c81873fd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,5 +1,5 @@
-set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
+set(THREADS_PREFER_PTHREAD_FLAG ON)
file(GLOB_RECURSE ${PROJECT}_SOURCES "*.cpp" "*.h" "*.rc")
@@ -17,6 +17,9 @@ endfunction()
header_directories(${PROJECT}_INCLUDES)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/extras/GitSHA1.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/extras/GitSHA1.cpp" @ONLY)
+list(APPEND ${PROJECT}_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/extras/GitSHA1.cpp")
+
add_executable(${EXECUTABLE} WIN32
${${PROJECT}_SOURCES}
)
@@ -46,6 +49,8 @@ if(LIBRW_PLATFORM_D3D9)
)
endif()
+target_compile_definitions(${EXECUTABLE} PRIVATE CMAKE_BUILD)
+
if(${PROJECT}_AUDIO STREQUAL "OAL")
find_package(OpenAL REQUIRED)
target_include_directories(${EXECUTABLE} PRIVATE ${OPENAL_INCLUDE_DIR})
diff --git a/src/animation/AnimManager.cpp b/src/animation/AnimManager.cpp
index 557bd842..c66997ce 100644
--- a/src/animation/AnimManager.cpp
+++ b/src/animation/AnimManager.cpp
@@ -19,68 +19,68 @@ CAnimBlendAssocGroup *CAnimManager::ms_aAnimAssocGroups;
CLinkList<CAnimBlendHierarchy*> CAnimManager::ms_animCache;
AnimAssocDesc aStdAnimDescs[] = {
- { ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
- { ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
- { ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
- { ANIM_IDLE_STANCE, ASSOC_REPEAT },
- { ANIM_WALK_START, ASSOC_HAS_TRANSLATION },
- { ANIM_RUN_STOP, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
- { ANIM_RUN_STOP_R, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
- { ANIM_IDLE_CAM, ASSOC_REPEAT | ASSOC_PARTIAL },
- { ANIM_IDLE_HBHB, ASSOC_REPEAT | ASSOC_PARTIAL },
- { ANIM_IDLE_TIRED, ASSOC_REPEAT },
- { ANIM_IDLE_ARMED, ASSOC_REPEAT | ASSOC_PARTIAL },
- { ANIM_IDLE_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
- { ANIM_IDLE_TAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_KO_SHOT_FRONT1, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_FRONT2, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_FRONT3, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_FRONT4, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_STOM, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_KO_SHOT_ARML, ASSOC_PARTIAL | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_ARMR, ASSOC_PARTIAL | ASSOC_FRONTAL },
- { ANIM_KO_SHOT_LEGL, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_KO_SHOT_LEGR, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_KD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL },
- { ANIM_KD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL },
- { ANIM_KO_SKID_FRONT, ASSOC_PARTIAL },
- { ANIM_KO_SPIN_R, ASSOC_PARTIAL },
- { ANIM_KO_SKID_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL },
- { ANIM_KO_SPIN_L, ASSOC_PARTIAL },
- { ANIM_SHOT_FRONT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_SHOT_LEFT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_SHOT_BACK_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_SHOT_RIGHT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HIT_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FLOOR_HIT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
+ { ANIM_STD_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
+ { ANIM_STD_RUNFAST, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
+ { ANIM_STD_IDLE, ASSOC_REPEAT },
+ { ANIM_STD_STARTWALK, ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_RUNSTOP1, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_RUNSTOP2, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_IDLE_CAM, ASSOC_REPEAT | ASSOC_PARTIAL },
+ { ANIM_STD_IDLE_HBHB, ASSOC_REPEAT | ASSOC_PARTIAL },
+ { ANIM_STD_IDLE_TIRED, ASSOC_REPEAT },
+ { ANIM_STD_IDLE_BIGGUN, ASSOC_REPEAT | ASSOC_PARTIAL },
+ { ANIM_STD_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
+ { ANIM_STD_HAILTAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_KO_FRONT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
+ { ANIM_STD_KO_LEFT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
+ { ANIM_STD_KO_BACK, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
+ { ANIM_STD_KO_RIGHT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
+ { ANIM_STD_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
+ { ANIM_STD_KO_SHOT_STOMACH, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_KO_SHOT_ARM_L, ASSOC_PARTIAL | ASSOC_FRONTAL },
+ { ANIM_STD_KO_SHOT_ARM_R, ASSOC_PARTIAL | ASSOC_FRONTAL },
+ { ANIM_STD_KO_SHOT_LEG_L, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_KO_SHOT_LEG_R, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_SPINFORWARD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL },
+ { ANIM_STD_SPINFORWARD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL },
+ { ANIM_STD_HIGHIMPACT_FRONT, ASSOC_PARTIAL },
+ { ANIM_STD_HIGHIMPACT_LEFT, ASSOC_PARTIAL },
+ { ANIM_STD_HIGHIMPACT_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL },
+ { ANIM_STD_HIGHIMPACT_RIGHT, ASSOC_PARTIAL },
+ { ANIM_STD_HITBYGUN_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_HITBYGUN_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_HITBYGUN_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_HITBYGUN_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_HIT_FLOOR, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
#if GTA_VERSION <= GTA3_PS2_160
- { ANIM_HIT_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_HIT_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
#endif
- { ANIM_HIT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HIT_CHEST, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FLOOR_HIT_F, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
- { ANIM_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_PUNCH_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_KICK_FLOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_BAT_H, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_BAT_V, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_HGUN_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_WEAPON_AK_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_SNIPER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_THROWU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_WEAPON_START_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_BOMBER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_HIT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_CHEST, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HIT_FLOOR_FRONT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
+ { ANIM_STD_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_KICKGROUND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_WEAPON_BAT_H, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_WEAPON_BAT_V, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_WEAPON_HGUN_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_WEAPON_AK_BODY, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_WEAPON_PUMP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_WEAPON_SNIPER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_WEAPON_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_THROW_UNDER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_START_THROW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_DETONATE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_HGUN_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_AK_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
#ifdef PC_PLAYER_CONTROLS
// maybe wrong define, but unused anyway
{ ANIM_FPS_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
@@ -91,121 +91,121 @@ AnimAssocDesc aStdAnimDescs[] = {
{ ANIM_FPS_M16, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
{ ANIM_FPS_ROCKET, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
#endif
- { ANIM_FIGHT_IDLE, ASSOC_REPEAT },
- { ANIM_FIGHT2_IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_SH_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FIGHT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_KNEE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_LHOOK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FIGHT_PPUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_CAR_JACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_CAR_LJACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_CAR_JACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_CAR_LJACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_CAR_QJACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_QJACKED, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_CAR_ALIGN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_ALIGNHI_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_OPEN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_DOORLOCKED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_PULLOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_PULLOUT_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETIN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETIN_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CLOSEDOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CLOSEDOOR_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_ROLLDOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_ROLLDOOR_LOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETOUT_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CLOSE_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_ALIGN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_ALIGNHI_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_OPEN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_DOORLOCKED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_PULLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_PULLOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETIN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETIN_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CLOSEDOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CLOSEDOOR_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_SHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_LSHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_SIT, ASSOC_DELETEFADEDOUT },
- { ANIM_CAR_LSIT, ASSOC_DELETEFADEDOUT },
- { ANIM_CAR_SITP, ASSOC_DELETEFADEDOUT },
- { ANIM_CAR_SITPLO, ASSOC_DELETEFADEDOUT },
- { ANIM_DRIVE_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DRIVE_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DRIVE_LOW_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DRIVE_LOW_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DRIVEBY_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DRIVEBY_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_CAR_LB, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DRIVE_BOAT, ASSOC_DELETEFADEDOUT },
- { ANIM_CAR_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_GETOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
- { ANIM_COACH_OPEN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_COACH_OPEN_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_COACH_IN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_COACH_IN_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_COACH_OUT_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_TRAIN_GETIN, ASSOC_PARTIAL },
- { ANIM_TRAIN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CRAWLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_CAR_CRAWLOUT_RHS2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_OPEN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_GETIN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_CLOSE_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_GETOUT_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_OPEN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_GETIN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_CLOSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_VAN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_GETUP1, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_GETUP2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_GETUP3, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_GETUP_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_JUMP_LAUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_JUMP_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_JUMP_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FALL_FALL, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_FALL_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_EV_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_EV_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
- { ANIM_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_IDLE },
- { ANIM_ROAD_CROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
- { ANIM_TURN_180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_ARREST_GUN, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_DROWN, ASSOC_PARTIAL },
- { ANIM_CPR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_RBLOCK_CSHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
- { ANIM_WEAPON_THROWU2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
- { ANIM_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
- { ANIM_PHONE_IN, ASSOC_PARTIAL },
- { ANIM_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
- { ANIM_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_IDLE, ASSOC_REPEAT },
+ { ANIM_STD_FIGHT_2IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_SHUFFLE_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_FIGHT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_KNEE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_LHOOK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_PARTIAL_PUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_JACKEDCAR_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_JACKEDCAR_LO_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_JACKEDCAR_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_JACKEDCAR_LO_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_QUICKJACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_QUICKJACKED, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_ALIGN_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_ALIGNHI_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_OPEN_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CARDOOR_LOCKED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_PULL_OUT_PED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_PULL_OUT_PED_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_GET_IN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_GET_IN_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_DOOR_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_GETOUT_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_ALIGN_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_ALIGNHI_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_OPEN_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CARDOOR_LOCKED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_PULL_OUT_PED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_PULL_OUT_PED_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_GET_IN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_GET_IN_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_DOOR_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_SHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_SHUFFLE_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_SIT, ASSOC_DELETEFADEDOUT },
+ { ANIM_STD_CAR_SIT_LO, ASSOC_DELETEFADEDOUT },
+ { ANIM_STD_CAR_SIT_P, ASSOC_DELETEFADEDOUT },
+ { ANIM_STD_CAR_SIT_P_LO, ASSOC_DELETEFADEDOUT },
+ { ANIM_STD_CAR_DRIVE_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_DRIVE_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_DRIVE_LEFT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_DRIVE_RIGHT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_DRIVEBY_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_DRIVEBY_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_LOOKBEHIND, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_BOAT_DRIVE, ASSOC_DELETEFADEDOUT },
+ { ANIM_STD_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_GETOUT_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
+ { ANIM_STD_COACH_OPEN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_COACH_OPEN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_COACH_GET_IN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_COACH_GET_IN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_COACH_GET_OUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_TRAIN_GETIN, ASSOC_PARTIAL },
+ { ANIM_STD_TRAIN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CRAWLOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_CRAWLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_OPEN_DOOR_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_GET_IN_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_GET_OUT_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_OPEN_DOOR_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_GET_IN_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_VAN_GET_OUT_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_GET_UP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_GET_UP_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_GET_UP_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_GET_UP_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_JUMP_LAUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_JUMP_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_JUMP_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_FALL, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_FALL_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_EVADE_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_EVADE_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
+ { ANIM_STD_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_IDLE },
+ { ANIM_STD_ROADCROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
+ { ANIM_STD_TURN180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_ARREST, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_DROWN, ASSOC_PARTIAL },
+ { ANIM_MEDIC_CPR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_RBLOCK_SHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
+ { ANIM_STD_THROW_UNDER2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
+ { ANIM_STD_PARTIAL_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
+ { ANIM_STD_PHONE_IN, ASSOC_PARTIAL },
+ { ANIM_STD_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
+ { ANIM_STD_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
};
#ifdef PC_PLAYER_CONTROLS
AnimAssocDesc aStdAnimDescsSide[] = {
- { ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
- { ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
- { ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
- { ANIM_IDLE_STANCE, ASSOC_REPEAT },
- { ANIM_WALK_START, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
+ { ANIM_STD_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
+ { ANIM_STD_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
+ { ANIM_STD_RUNFAST, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK | ASSOC_HAS_X_TRANSLATION },
+ { ANIM_STD_IDLE, ASSOC_REPEAT },
+ { ANIM_STD_STARTWALK, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
};
#endif
char const *aStdAnimations[] = {
diff --git a/src/animation/AnimationId.h b/src/animation/AnimationId.h
index 4b3dd92d..baf6eb33 100644
--- a/src/animation/AnimationId.h
+++ b/src/animation/AnimationId.h
@@ -2,68 +2,82 @@
enum AnimationId
{
- ANIM_WALK,
- ANIM_RUN,
- ANIM_SPRINT,
- ANIM_IDLE_STANCE,
- ANIM_WALK_START,
- ANIM_RUN_STOP,
- ANIM_RUN_STOP_R,
- ANIM_IDLE_CAM,
- ANIM_IDLE_HBHB,
- ANIM_IDLE_TIRED,
- ANIM_IDLE_ARMED,
- ANIM_IDLE_CHAT,
- ANIM_IDLE_TAXI,
- ANIM_KO_SHOT_FRONT1,
- ANIM_KO_SHOT_FRONT2,
- ANIM_KO_SHOT_FRONT3,
- ANIM_KO_SHOT_FRONT4,
- ANIM_KO_SHOT_FACE,
- ANIM_KO_SHOT_STOM,
- ANIM_KO_SHOT_ARML,
- ANIM_KO_SHOT_ARMR,
- ANIM_KO_SHOT_LEGL,
- ANIM_KO_SHOT_LEGR,
- ANIM_KD_LEFT,
- ANIM_KD_RIGHT,
- ANIM_KO_SKID_FRONT,
- ANIM_KO_SPIN_R, // named left in VC
- ANIM_KO_SKID_BACK,
- ANIM_KO_SPIN_L, // named right in VC
- ANIM_SHOT_FRONT_PARTIAL,
- ANIM_SHOT_LEFT_PARTIAL,
- ANIM_SHOT_BACK_PARTIAL,
- ANIM_SHOT_RIGHT_PARTIAL,
- ANIM_HIT_FRONT,
- ANIM_HIT_LEFT,
- ANIM_HIT_BACK,
- ANIM_HIT_RIGHT,
- ANIM_FLOOR_HIT,
+ ANIM_STD_WALK,
+ ANIM_STD_RUN,
+ ANIM_STD_RUNFAST,
+ ANIM_STD_IDLE,
+ ANIM_STD_STARTWALK,
+ ANIM_STD_RUNSTOP1,
+ ANIM_STD_RUNSTOP2,
+ ANIM_STD_IDLE_CAM,
+ ANIM_STD_IDLE_HBHB,
+ ANIM_STD_IDLE_TIRED,
+ ANIM_STD_IDLE_BIGGUN,
+ ANIM_STD_CHAT,
+ ANIM_STD_HAILTAXI,
+ ANIM_STD_KO_FRONT,
+ ANIM_STD_KO_LEFT,
+ ANIM_STD_KO_BACK,
+ ANIM_STD_KO_RIGHT,
+ ANIM_STD_KO_SHOT_FACE,
+ ANIM_STD_KO_SHOT_STOMACH,
+ ANIM_STD_KO_SHOT_ARM_L,
+ ANIM_STD_KO_SHOT_ARM_R,
+ ANIM_STD_KO_SHOT_LEG_L,
+ ANIM_STD_KO_SHOT_LEG_R,
+ ANIM_STD_SPINFORWARD_LEFT,
+ ANIM_STD_SPINFORWARD_RIGHT,
+ ANIM_STD_HIGHIMPACT_FRONT,
+ ANIM_STD_HIGHIMPACT_LEFT,
+ ANIM_STD_HIGHIMPACT_BACK,
+ ANIM_STD_HIGHIMPACT_RIGHT,
+ ANIM_STD_HITBYGUN_FRONT,
+ ANIM_STD_HITBYGUN_LEFT,
+ ANIM_STD_HITBYGUN_BACK,
+ ANIM_STD_HITBYGUN_RIGHT,
+ ANIM_STD_HIT_FRONT,
+ ANIM_STD_HIT_LEFT,
+ ANIM_STD_HIT_BACK,
+ ANIM_STD_HIT_RIGHT,
+ ANIM_STD_HIT_FLOOR,
+
+ /* names made up */
#if GTA_VERSION <= GTA3_PS2_160
- ANIM_HIT_BODY,
+ ANIM_STD_HIT_BODY,
#endif
- ANIM_HIT_BODYBLOW,
- ANIM_HIT_CHEST,
- ANIM_HIT_HEAD,
- ANIM_HIT_WALK,
- ANIM_HIT_WALL,
- ANIM_FLOOR_HIT_F,
- ANIM_HIT_BEHIND,
- ANIM_PUNCH_R,
- ANIM_KICK_FLOOR,
- ANIM_WEAPON_BAT_H,
- ANIM_WEAPON_BAT_V,
- ANIM_WEAPON_HGUN_BODY,
- ANIM_WEAPON_AK_BODY,
- ANIM_WEAPON_PUMP,
- ANIM_WEAPON_SNIPER,
- ANIM_WEAPON_THROW,
- ANIM_WEAPON_THROWU,
- ANIM_WEAPON_START_THROW,
- ANIM_BOMBER,
- ANIM_HGUN_RELOAD,
- ANIM_AK_RELOAD,
+ ANIM_STD_HIT_BODYBLOW,
+ ANIM_STD_HIT_CHEST,
+ ANIM_STD_HIT_HEAD,
+ ANIM_STD_HIT_WALK,
+ /**/
+
+ ANIM_STD_HIT_WALL,
+ ANIM_STD_HIT_FLOOR_FRONT,
+ ANIM_STD_HIT_BEHIND,
+ ANIM_STD_PUNCH,
+ ANIM_STD_KICKGROUND,
+
+ /* names made up */
+ ANIM_STD_WEAPON_BAT_H,
+ ANIM_STD_WEAPON_BAT_V,
+ ANIM_STD_WEAPON_HGUN_BODY,
+ ANIM_STD_WEAPON_AK_BODY,
+ ANIM_STD_WEAPON_PUMP,
+ ANIM_STD_WEAPON_SNIPER,
+ ANIM_STD_WEAPON_THROW,
+ /**/
+
+ ANIM_STD_THROW_UNDER,
+
+ /* names made up */
+ ANIM_STD_START_THROW,
+ /**/
+
+ ANIM_STD_DETONATE,
+
+ /* names made up */
+ ANIM_STD_HGUN_RELOAD,
+ ANIM_STD_AK_RELOAD,
#ifdef PC_PLAYER_CONTROLS
// maybe wrong define, but unused anyway
ANIM_FPS_PUNCH,
@@ -74,113 +88,123 @@ enum AnimationId
ANIM_FPS_M16,
ANIM_FPS_ROCKET,
#endif
- ANIM_FIGHT_IDLE,
- ANIM_FIGHT2_IDLE,
- ANIM_FIGHT_SH_F,
- ANIM_FIGHT_BODYBLOW,
- ANIM_FIGHT_HEAD,
- ANIM_FIGHT_KICK,
- ANIM_FIGHT_KNEE,
- ANIM_FIGHT_LHOOK,
- ANIM_FIGHT_PUNCH,
- ANIM_FIGHT_ROUNDHOUSE,
- ANIM_FIGHT_LONGKICK,
- ANIM_FIGHT_PPUNCH,
- ANIM_CAR_JACKED_RHS,
- ANIM_CAR_LJACKED_RHS,
- ANIM_CAR_JACKED_LHS,
- ANIM_CAR_LJACKED_LHS,
- ANIM_CAR_QJACK,
- ANIM_CAR_QJACKED,
- ANIM_CAR_ALIGN_LHS,
- ANIM_CAR_ALIGNHI_LHS,
- ANIM_CAR_OPEN_LHS,
- ANIM_CAR_DOORLOCKED_LHS,
- ANIM_CAR_PULLOUT_LHS,
- ANIM_CAR_PULLOUT_LOW_LHS,
- ANIM_CAR_GETIN_LHS,
- ANIM_CAR_GETIN_LOW_LHS,
- ANIM_CAR_CLOSEDOOR_LHS,
- ANIM_CAR_CLOSEDOOR_LOW_LHS,
- ANIM_CAR_ROLLDOOR,
- ANIM_CAR_ROLLDOOR_LOW,
- ANIM_CAR_GETOUT_LHS,
- ANIM_CAR_GETOUT_LOW_LHS,
- ANIM_CAR_CLOSE_LHS,
- ANIM_CAR_ALIGN_RHS,
- ANIM_CAR_ALIGNHI_RHS,
- ANIM_CAR_OPEN_RHS,
- ANIM_CAR_DOORLOCKED_RHS,
- ANIM_CAR_PULLOUT_RHS,
- ANIM_CAR_PULLOUT_LOW_RHS,
- ANIM_CAR_GETIN_RHS,
- ANIM_CAR_GETIN_LOW_RHS,
- ANIM_CAR_CLOSEDOOR_RHS,
- ANIM_CAR_CLOSEDOOR_LOW_RHS,
- ANIM_CAR_SHUFFLE_RHS,
- ANIM_CAR_LSHUFFLE_RHS,
- ANIM_CAR_SIT,
- ANIM_CAR_LSIT,
- ANIM_CAR_SITP,
- ANIM_CAR_SITPLO,
- ANIM_DRIVE_L,
- ANIM_DRIVE_R,
- ANIM_DRIVE_LOW_L,
- ANIM_DRIVE_LOW_R,
- ANIM_DRIVEBY_L,
- ANIM_DRIVEBY_R,
- ANIM_CAR_LB,
- ANIM_DRIVE_BOAT,
- ANIM_CAR_GETOUT_RHS,
- ANIM_CAR_GETOUT_LOW_RHS,
- ANIM_CAR_CLOSE_RHS,
- ANIM_CAR_HOOKERTALK,
- ANIM_COACH_OPEN_L,
- ANIM_COACH_OPEN_R,
- ANIM_COACH_IN_L,
- ANIM_COACH_IN_R,
- ANIM_COACH_OUT_L,
- ANIM_TRAIN_GETIN,
- ANIM_TRAIN_GETOUT,
- ANIM_CAR_CRAWLOUT_RHS,
- ANIM_CAR_CRAWLOUT_RHS2,
- ANIM_VAN_OPEN_L,
- ANIM_VAN_GETIN_L,
- ANIM_VAN_CLOSE_L,
- ANIM_VAN_GETOUT_L,
- ANIM_VAN_OPEN,
- ANIM_VAN_GETIN,
- ANIM_VAN_CLOSE,
- ANIM_VAN_GETOUT,
- ANIM_GETUP1,
- ANIM_GETUP2,
- ANIM_GETUP3,
- ANIM_GETUP_FRONT,
- ANIM_JUMP_LAUNCH,
- ANIM_JUMP_GLIDE,
- ANIM_JUMP_LAND,
- ANIM_FALL_FALL,
- ANIM_FALL_GLIDE,
- ANIM_FALL_LAND,
- ANIM_FALL_COLLAPSE,
- ANIM_EV_STEP,
- ANIM_EV_DIVE,
- ANIM_XPRESS_SCRATCH,
- ANIM_ROAD_CROSS,
- ANIM_TURN_180,
- ANIM_ARREST_GUN,
- ANIM_DROWN,
- ANIM_CPR,
- ANIM_DUCK_DOWN,
- ANIM_DUCK_LOW,
- ANIM_RBLOCK_CSHOOT,
- ANIM_WEAPON_THROWU2,
- ANIM_HANDSUP,
- ANIM_HANDSCOWER,
- ANIM_FUCKU,
- ANIM_PHONE_IN,
- ANIM_PHONE_OUT,
- ANIM_PHONE_TALK,
+ /**/
+
+ ANIM_STD_FIGHT_IDLE,
+ ANIM_STD_FIGHT_2IDLE,
+ ANIM_STD_FIGHT_SHUFFLE_F,
+
+ /* names made up */
+ ANIM_STD_FIGHT_BODYBLOW,
+ ANIM_STD_FIGHT_HEAD,
+ ANIM_STD_FIGHT_KICK,
+ ANIM_STD_FIGHT_KNEE,
+ ANIM_STD_FIGHT_LHOOK,
+ ANIM_STD_FIGHT_PUNCH,
+ ANIM_STD_FIGHT_ROUNDHOUSE,
+ ANIM_STD_FIGHT_LONGKICK,
+ /**/
+
+ ANIM_STD_PARTIAL_PUNCH,
+ ANIM_STD_JACKEDCAR_RHS,
+ ANIM_STD_JACKEDCAR_LO_RHS,
+ ANIM_STD_JACKEDCAR_LHS,
+ ANIM_STD_JACKEDCAR_LO_LHS,
+ ANIM_STD_QUICKJACK,
+ ANIM_STD_QUICKJACKED,
+ ANIM_STD_CAR_ALIGN_DOOR_LHS,
+ ANIM_STD_CAR_ALIGNHI_DOOR_LHS,
+ ANIM_STD_CAR_OPEN_DOOR_LHS,
+ ANIM_STD_CARDOOR_LOCKED_LHS,
+ ANIM_STD_CAR_PULL_OUT_PED_LHS,
+ ANIM_STD_CAR_PULL_OUT_PED_LO_LHS,
+ ANIM_STD_CAR_GET_IN_LHS,
+ ANIM_STD_CAR_GET_IN_LO_LHS,
+ ANIM_STD_CAR_CLOSE_DOOR_LHS,
+ ANIM_STD_CAR_CLOSE_DOOR_LO_LHS,
+ ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS,
+ ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS,
+ ANIM_STD_GETOUT_LHS,
+ ANIM_STD_GETOUT_LO_LHS,
+ ANIM_STD_CAR_CLOSE_LHS,
+ ANIM_STD_CAR_ALIGN_DOOR_RHS,
+ ANIM_STD_CAR_ALIGNHI_DOOR_RHS,
+ ANIM_STD_CAR_OPEN_DOOR_RHS,
+ ANIM_STD_CARDOOR_LOCKED_RHS,
+ ANIM_STD_CAR_PULL_OUT_PED_RHS,
+ ANIM_STD_CAR_PULL_OUT_PED_LO_RHS,
+ ANIM_STD_CAR_GET_IN_RHS,
+ ANIM_STD_CAR_GET_IN_LO_RHS,
+ ANIM_STD_CAR_CLOSE_DOOR_RHS,
+ ANIM_STD_CAR_CLOSE_DOOR_LO_RHS,
+ ANIM_STD_CAR_SHUFFLE_RHS,
+ ANIM_STD_CAR_SHUFFLE_LO_RHS,
+ ANIM_STD_CAR_SIT,
+ ANIM_STD_CAR_SIT_LO,
+ ANIM_STD_CAR_SIT_P,
+ ANIM_STD_CAR_SIT_P_LO,
+ ANIM_STD_CAR_DRIVE_LEFT,
+ ANIM_STD_CAR_DRIVE_RIGHT,
+ ANIM_STD_CAR_DRIVE_LEFT_LO,
+ ANIM_STD_CAR_DRIVE_RIGHT_LO,
+ ANIM_STD_CAR_DRIVEBY_LEFT,
+ ANIM_STD_CAR_DRIVEBY_RIGHT,
+ ANIM_STD_CAR_LOOKBEHIND,
+ ANIM_STD_BOAT_DRIVE,
+ ANIM_STD_GETOUT_RHS,
+ ANIM_STD_GETOUT_LO_RHS,
+ ANIM_STD_CAR_CLOSE_RHS,
+ ANIM_STD_CAR_HOOKERTALK,
+ ANIM_STD_COACH_OPEN_LHS,
+ ANIM_STD_COACH_OPEN_RHS,
+ ANIM_STD_COACH_GET_IN_LHS,
+ ANIM_STD_COACH_GET_IN_RHS,
+ ANIM_STD_COACH_GET_OUT_LHS,
+ ANIM_STD_TRAIN_GETIN,
+ ANIM_STD_TRAIN_GETOUT,
+ ANIM_STD_CRAWLOUT_LHS,
+ ANIM_STD_CRAWLOUT_RHS,
+ ANIM_STD_VAN_OPEN_DOOR_REAR_LHS,
+ ANIM_STD_VAN_GET_IN_REAR_LHS,
+ ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS,
+ ANIM_STD_VAN_GET_OUT_REAR_LHS,
+ ANIM_STD_VAN_OPEN_DOOR_REAR_RHS,
+ ANIM_STD_VAN_GET_IN_REAR_RHS,
+ ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS,
+ ANIM_STD_VAN_GET_OUT_REAR_RHS,
+ ANIM_STD_GET_UP,
+ ANIM_STD_GET_UP_LEFT,
+ ANIM_STD_GET_UP_RIGHT,
+ ANIM_STD_GET_UP_FRONT,
+ ANIM_STD_JUMP_LAUNCH,
+ ANIM_STD_JUMP_GLIDE,
+ ANIM_STD_JUMP_LAND,
+ ANIM_STD_FALL,
+ ANIM_STD_FALL_GLIDE,
+ ANIM_STD_FALL_LAND,
+ ANIM_STD_FALL_COLLAPSE,
+ ANIM_STD_EVADE_STEP,
+ ANIM_STD_EVADE_DIVE,
+ ANIM_STD_XPRESS_SCRATCH,
+ ANIM_STD_ROADCROSS,
+ ANIM_STD_TURN180,
+ ANIM_STD_ARREST,
+ ANIM_STD_DROWN,
+ ANIM_MEDIC_CPR,
+ ANIM_STD_DUCK_DOWN,
+ ANIM_STD_DUCK_LOW,
+ ANIM_STD_RBLOCK_SHOOT,
+
+ /* names made up */
+ ANIM_STD_THROW_UNDER2,
+ /**/
+
+ ANIM_STD_HANDSUP,
+ ANIM_STD_HANDSCOWER,
+ ANIM_STD_PARTIAL_FUCKU,
+ ANIM_STD_PHONE_IN,
+ ANIM_STD_PHONE_OUT,
+ ANIM_STD_PHONE_TALK,
- NUM_ANIMS
+ ANIM_STD_NUM
}; \ No newline at end of file
diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp
index eab14ce6..ec364c27 100644
--- a/src/audio/AudioLogic.cpp
+++ b/src/audio/AudioLogic.cpp
@@ -7927,7 +7927,7 @@ cAudioManager::ProcessFrontEnd()
frontendBank = true;
stereo = true;
break;
- case SOUND_FRONTEND_NO_RADIO:
+ case SOUND_FRONTEND_RADIO_TURN_OFF:
case SOUND_FRONTEND_RADIO_CHANGE:
m_sQueueSample.m_nSampleIndex = SFX_RADIO_CLICK;
break;
diff --git a/src/audio/MusicManager.cpp b/src/audio/MusicManager.cpp
index 54c1b0bc..3e1a7384 100644
--- a/src/audio/MusicManager.cpp
+++ b/src/audio/MusicManager.cpp
@@ -15,6 +15,9 @@
#include "World.h"
#include "sampman.h"
+#if !defined FIX_BUGS && (defined RADIO_SCROLL_TO_PREV_STATION || defined RADIO_OFF_TEXT)
+static_assert(false, "RADIO_SCROLL_TO_PREV_STATION and RADIO_OFF_TEXT won't work correctly without FIX_BUGS");
+#endif
cMusicManager MusicManager;
int32 gNumRetunePresses;
@@ -26,8 +29,8 @@ cMusicManager::cMusicManager()
m_bIsInitialised = false;
m_bDisabled = false;
m_nMusicMode = MUSICMODE_DISABLED;
- m_nCurrentStreamedSound = NO_TRACK;
- m_nPreviousStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
+ m_nPlayingTrack = NO_TRACK;
m_bFrontendTrackFinished = false;
m_bPlayInFrontend = false;
m_bSetNextStation = false;
@@ -35,7 +38,7 @@ cMusicManager::cMusicManager()
m_bPreviousPlayerInCar = false;
m_bPlayerInCar = false;
m_bAnnouncementInProgress = false;
- m_bDontServiceAmbienceTrack = false;
+ m_bVerifyAmbienceTrackStartedToPlay = false;
bHasStarted = false;
}
@@ -83,16 +86,15 @@ cMusicManager::DisplayRadioStationName()
if(m_bPlayerInCar && !m_bPreviousPlayerInCar)
pCurrentStation = nil;
+#ifdef FIX_BUGS
+ const int curRadio = GetCarTuning();
+#else
+ const int curRadio = m_nNextTrack;
+#endif
+
#ifdef RADIO_SCROLL_TO_PREV_STATION
if(gNumRetunePresses < 0) {
- gStreamedSound = m_nCurrentStreamedSound;
-
- if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT ||
- gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) {
- gStreamedSound = POLICE_RADIO; // which means OFF
-
- } else if(gStreamedSound > STREAMED_SOUND_RADIO_MP3_PLAYER)
- return;
+ gStreamedSound = curRadio;
gRetuneCounter = gNumRetunePresses;
pRetune = gStreamedSound;
@@ -100,7 +102,7 @@ cMusicManager::DisplayRadioStationName()
while(gRetuneCounter < 0) {
if(pRetune == HEAD_RADIO) {
pRetune = RADIO_OFF;
- } else if(pRetune == RADIO_OFF || pRetune == POLICE_RADIO) {
+ } else if(pRetune == RADIO_OFF || pRetune == NUM_RADIOS) {
pRetune = SampleManager.IsMP3RadioChannelAvailable() ? USERTRACK : USERTRACK - 1;
} else
pRetune--;
@@ -110,31 +112,38 @@ cMusicManager::DisplayRadioStationName()
} else
#endif
if(SampleManager.IsMP3RadioChannelAvailable()) {
- gStreamedSound = m_nCurrentStreamedSound;
+ gStreamedSound = curRadio;
if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT ||
- gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) {
- gStreamedSound = POLICE_RADIO; // which means OFF
+ gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) { // which means OFF
+ gStreamedSound = NUM_RADIOS;
} else if(gStreamedSound > STREAMED_SOUND_RADIO_MP3_PLAYER)
return;
pRetune = gNumRetunePresses + gStreamedSound;
- if(pRetune == POLICE_RADIO) {
+#ifdef FIX_BUGS
+ while(pRetune > NUM_RADIOS)
+ pRetune -= (NUM_RADIOS + 1);
+#endif
+ if(pRetune == NUM_RADIOS) {
pRetune = RADIO_OFF;
- } else if(pRetune > POLICE_RADIO) {
- pRetune = pRetune - RADIO_OFF;
}
+#ifndef FIX_BUGS
+ else if(pRetune > NUM_RADIOS) {
+ pRetune = pRetune - (NUM_RADIOS + 1);
+ }
+#endif
} else {
- gStreamedSound = m_nCurrentStreamedSound;
+ gStreamedSound = curRadio;
pRetune = gNumRetunePresses + gStreamedSound;
if(pRetune >= USERTRACK) {
gRetuneCounter = gNumRetunePresses;
- pRetune = m_nCurrentStreamedSound;
+ pRetune = curRadio;
if(gStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
- pRetune = RADIO_OFF;
+ pRetune = STREAMED_SOUND_CITY_AMBIENT; // which is RADIO_OFF
while(gRetuneCounter) {
if(pRetune == RADIO_OFF) {
@@ -149,7 +158,7 @@ cMusicManager::DisplayRadioStationName()
}
}
- wchar *string = nil;
+ wchar *string;
switch(pRetune) {
case HEAD_RADIO: string = TheText.Get("FEA_FM0"); break;
@@ -161,22 +170,27 @@ cMusicManager::DisplayRadioStationName()
case MSX_FM: string = TheText.Get("FEA_FM6"); break;
case FLASHBACK: string = TheText.Get("FEA_FM7"); break;
case CHATTERBOX: string = TheText.Get("FEA_FM8"); break;
- case USERTRACK: string = TheText.Get("FEA_FM9"); break;
+ case USERTRACK:
+ if (!SampleManager.IsMP3RadioChannelAvailable())
+ return;
+ string = TheText.Get("FEA_FM9"); break;
#ifdef RADIO_OFF_TEXT
- case RADIO_OFF: case POLICE_RADIO: string = TheText.Get("FEM_OFF"); break;
+ case RADIO_OFF: {
+ extern wchar WideErrorString[];
+
+ string = TheText.Get("FEA_FMN");
+ if(string == WideErrorString) {
+ pCurrentStation = nil;
+ return;
+ }
+ break;
+ }
#endif
default: return;
};
-#ifdef RADIO_OFF_TEXT
- if(pRetune == USERTRACK && !SampleManager.IsMP3RadioChannelAvailable()) { string = TheText.Get("FEM_OFF"); }
-#else
- if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; }
-#endif
-
- if(string && pCurrentStation != string ||
- m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER &&
- m_nPreviousStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER) {
+ if(pCurrentStation != string ||
+ m_nNextTrack == STREAMED_SOUND_RADIO_MP3_PLAYER && m_nPlayingTrack != STREAMED_SOUND_RADIO_MP3_PLAYER) {
pCurrentStation = string;
cDisplay = 60;
} else {
@@ -257,7 +271,7 @@ cMusicManager::Initialise()
m_bDoTrackService = false;
m_bIgnoreTimeDelay = false;
m_bRadioSetByScript = false;
- m_nRadioStation = HEAD_RADIO;
+ m_nRadioStationScript = HEAD_RADIO;
m_nRadioPosition = -1;
m_nRadioInCar = NO_TRACK;
gNumRetunePresses = 0;
@@ -274,8 +288,8 @@ cMusicManager::Terminate()
if (SampleManager.IsStreamPlaying(0)) {
SampleManager.StopStreamedFile(0);
- m_nCurrentStreamedSound = NO_TRACK;
- m_nPreviousStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
+ m_nPlayingTrack = NO_TRACK;
}
m_bIsInitialised = false;
}
@@ -303,14 +317,14 @@ cMusicManager::ChangeMusicMode(uint8 mode)
case MUSICMODE_CUTSCENE:
case MUSICMODE_DISABLED:
if (SampleManager.IsStreamPlaying(0)) {
- if (m_nCurrentStreamedSound < TOTAL_STREAMED_SOUNDS) {
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (m_nNextTrack < TOTAL_STREAMED_SOUNDS) {
+ m_aTracks[m_nNextTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
}
SampleManager.StopStreamedFile(0);
}
- m_nCurrentStreamedSound = NO_TRACK;
- m_nPreviousStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
+ m_nPlayingTrack = NO_TRACK;
m_bFrontendTrackFinished = false;
m_bPlayInFrontend = false;
m_bSetNextStation = false;
@@ -320,7 +334,7 @@ cMusicManager::ChangeMusicMode(uint8 mode)
m_nTimer = m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
m_bDoTrackService = false;
m_bIgnoreTimeDelay = true;
- m_bDontServiceAmbienceTrack = false;
+ m_bVerifyAmbienceTrackStartedToPlay = false;
m_nMusicMode = mode2;
break;
default: return;
@@ -370,7 +384,7 @@ cMusicManager::SetRadioChannelByScript(uint8 station, int32 pos)
{
if (m_bIsInitialised && station < RADIO_OFF) {
m_bRadioSetByScript = true;
- m_nRadioStation = station;
+ m_nRadioStationScript = station;
m_nRadioPosition = pos == -1 ? -1 : pos % m_aTracks[station].m_nLength;
}
}
@@ -380,7 +394,7 @@ void
cMusicManager::ResetMusicAfterReload()
{
m_bRadioSetByScript = false;
- m_nRadioStation = 0;
+ m_nRadioStationScript = 0;
m_nRadioPosition = -1;
m_nAnnouncement = NO_TRACK;
m_bAnnouncementInProgress = false;
@@ -419,7 +433,7 @@ cMusicManager::Service()
m_nLastTrackServiceTime = m_nTimer;
} else m_bDoTrackService = false;
- if (m_nCurrentStreamedSound == NO_TRACK && SampleManager.IsStreamPlaying(0))
+ if (m_nNextTrack == NO_TRACK && SampleManager.IsStreamPlaying(0))
SampleManager.StopStreamedFile(0);
else switch (m_nMusicMode) {
case MUSICMODE_FRONTEND: ServiceFrontEndMode(); break;
@@ -430,10 +444,10 @@ cMusicManager::Service()
void
cMusicManager::ServiceFrontEndMode()
{
- if (m_nCurrentStreamedSound < TOTAL_STREAMED_SOUNDS) {
+ if (m_nNextTrack < TOTAL_STREAMED_SOUNDS) {
if (m_bFrontendTrackFinished) {
if (!SampleManager.IsStreamPlaying(0)) {
- switch (m_nCurrentStreamedSound)
+ switch (m_nNextTrack)
{
case STREAMED_SOUND_MISSION_COMPLETED:
if (!AudioManager.m_nUserPause)
@@ -445,15 +459,15 @@ cMusicManager::ServiceFrontEndMode()
default:
break;
}
- m_nCurrentStreamedSound = NO_TRACK;
- m_nPreviousStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
+ m_nPlayingTrack = NO_TRACK;
}
} else if (bHasStarted) {
if (!SampleManager.IsStreamPlaying(0))
- SampleManager.StartStreamedFile(m_nCurrentStreamedSound, 0, 0);
+ SampleManager.StartStreamedFile(m_nNextTrack, 0, 0);
} else {
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
- if (!SampleManager.StartStreamedFile(m_nCurrentStreamedSound, m_nCurrentStreamedSound < STREAMED_SOUND_RADIO_POLICE ? GetTrackStartPos(m_nCurrentStreamedSound) : 0, 0))
+ if (!SampleManager.StartStreamedFile(m_nNextTrack, m_nNextTrack < NUM_RADIOS ? GetTrackStartPos(m_nNextTrack) : 0, 0))
return;
SampleManager.SetStreamedVolumeAndPan(100, 63, 0, 0);
if (m_bPlayInFrontend) bHasStarted = true;
@@ -473,7 +487,7 @@ cMusicManager::ServiceGameMode()
m_bPreviousPlayerInCar = m_bPlayerInCar;
m_bPlayerInCar = PlayerInCar();
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
+ m_nPlayingTrack = m_nNextTrack;
if (m_bPlayerInCar) {
if (FindPlayerPed() != nil
&& !FindPlayerPed()->DyingOrDead()
@@ -485,10 +499,13 @@ cMusicManager::ServiceGameMode()
gRetuneCounter = 30;
gNumRetunePresses++;
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f);
+ // This needs loop, and this is not the right place. Now done elsewhere.
+#ifndef FIX_BUGS
if (SampleManager.IsMP3RadioChannelAvailable()) {
if (gNumRetunePresses > RADIO_OFF)
gNumRetunePresses -= RADIO_OFF;
}
+#endif
}
#ifdef RADIO_SCROLL_TO_PREV_STATION
else if(CPad::GetPad(0)->GetMouseWheelDownJustDown() || CPad::GetPad(0)->GetMouseWheelUpJustDown()) {
@@ -511,8 +528,8 @@ cMusicManager::ServiceGameMode()
m_bPreviousPlayerInCar = false;
if (!m_bPlayerInCar) {
if (m_bPreviousPlayerInCar) {
- if (m_nCurrentStreamedSound != STREAMED_SOUND_RADIO_POLICE)
- m_nRadioInCar = m_nCurrentStreamedSound;
+ if (m_nNextTrack != STREAMED_SOUND_RADIO_POLICE)
+ m_nRadioInCar = m_nNextTrack;
}
ServiceAmbience();
return;
@@ -520,22 +537,22 @@ cMusicManager::ServiceGameMode()
if (m_bPreviousPlayerInCar) {
if (m_nAnnouncement < TOTAL_STREAMED_SOUNDS
- && (m_nCurrentStreamedSound < STREAMED_SOUND_CITY_AMBIENT || m_bAnnouncementInProgress)
+ && (m_nNextTrack < RADIO_OFF || m_bAnnouncementInProgress)
&& ServiceAnnouncement())
{
if (m_bAnnouncementInProgress) {
m_bSetNextStation = false;
return;
}
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = GetCarTuning();
+ m_nPlayingTrack = m_nNextTrack;
+ m_nNextTrack = GetCarTuning();
}
if (SampleManager.IsMP3RadioChannelAvailable()
- && m_nCurrentStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER
+ && m_nNextTrack != STREAMED_SOUND_RADIO_MP3_PLAYER
&& ControlsManager.GetIsKeyboardKeyJustDown(rsF9))
{
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = STREAMED_SOUND_RADIO_MP3_PLAYER;
+ m_nPlayingTrack = m_nNextTrack;
+ m_nNextTrack = STREAMED_SOUND_RADIO_MP3_PLAYER;
if (FindPlayerVehicle() != nil)
FindPlayerVehicle()->m_nRadioStation = STREAMED_SOUND_RADIO_MP3_PLAYER;
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 1.0f);
@@ -563,22 +580,22 @@ cMusicManager::ServiceGameMode()
AudioManager.DoPoliceRadioCrackle();
if (m_bSetNextStation) {
m_bSetNextStation = false;
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = GetNextCarTuning();
- if (m_nCurrentStreamedSound == STREAMED_SOUND_CITY_AMBIENT || m_nCurrentStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
+ m_nPlayingTrack = m_nNextTrack;
+ m_nNextTrack = GetNextCarTuning();
+ if (m_nNextTrack == STREAMED_SOUND_CITY_AMBIENT || m_nNextTrack == STREAMED_SOUND_WATER_AMBIENT)
bRadioOff = true;
- if (m_nPreviousStreamedSound == STREAMED_SOUND_CITY_AMBIENT || m_nPreviousStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
+ if (m_nPlayingTrack == STREAMED_SOUND_CITY_AMBIENT || m_nPlayingTrack == STREAMED_SOUND_WATER_AMBIENT)
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 0.0f);
}
- if (m_nCurrentStreamedSound < STREAMED_SOUND_CITY_AMBIENT) {
+ if (m_nNextTrack < RADIO_OFF) {
if (ChangeRadioChannel()) {
ServiceTrack();
} else {
m_bPlayerInCar = false;
if (FindPlayerVehicle())
- FindPlayerVehicle()->m_nRadioStation = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = NO_TRACK;
+ FindPlayerVehicle()->m_nRadioStation = m_nNextTrack;
+ m_nNextTrack = NO_TRACK;
}
if (CTimer::GetIsSlowMotionActive()) {
if (TheCamera.pTargetEntity != nil) {
@@ -631,56 +648,56 @@ cMusicManager::ServiceGameMode()
return;
}
if (bRadioOff) {
- m_nCurrentStreamedSound = m_nPreviousStreamedSound;
+ m_nNextTrack = m_nPlayingTrack;
if (FindPlayerVehicle() != nil)
FindPlayerVehicle()->m_nRadioStation = RADIO_OFF;
- AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_NO_RADIO, 0.0f);
+ AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_TURN_OFF, 0.0f);
}
ServiceAmbience();
return;
}
if (m_bRadioSetByScript) {
if (UsesPoliceRadio(FindPlayerVehicle())) {
- m_nCurrentStreamedSound = STREAMED_SOUND_RADIO_POLICE;
+ m_nNextTrack = STREAMED_SOUND_RADIO_POLICE;
} else {
- m_nCurrentStreamedSound = m_nRadioStation;
- if (FindPlayerVehicle()->m_nRadioStation == m_nCurrentStreamedSound) {
- m_nPreviousStreamedSound = NO_TRACK;
+ m_nNextTrack = m_nRadioStationScript;
+ if (FindPlayerVehicle()->m_nRadioStation == m_nNextTrack) {
+ m_nPlayingTrack = NO_TRACK;
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
SampleManager.StopStreamedFile(0);
}
if (m_nRadioPosition != -1) {
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = m_nRadioPosition;
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ m_aTracks[m_nNextTrack].m_nPosition = m_nRadioPosition;
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
}
}
} else {
- m_nCurrentStreamedSound = GetCarTuning();
+ m_nNextTrack = GetCarTuning();
}
- if (m_nCurrentStreamedSound >= RADIO_OFF) {
+ if (m_nNextTrack >= RADIO_OFF) {
ServiceAmbience();
return;
}
if (ChangeRadioChannel()) {
if (m_bRadioSetByScript) {
m_bRadioSetByScript = false;
- FindPlayerVehicle()->m_nRadioStation = m_nCurrentStreamedSound;
+ FindPlayerVehicle()->m_nRadioStation = m_nNextTrack;
}
} else {
m_bPlayerInCar = false;
- m_nCurrentStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
}
}
void
cMusicManager::StopFrontEndTrack()
{
- if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_FRONTEND && m_nCurrentStreamedSound != NO_TRACK) {
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_FRONTEND && m_nNextTrack != NO_TRACK) {
+ m_aTracks[m_nNextTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
SampleManager.StopStreamedFile(0);
- m_nPreviousStreamedSound = NO_TRACK;
- m_nCurrentStreamedSound = NO_TRACK;
+ m_nPlayingTrack = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
}
}
@@ -696,30 +713,30 @@ cMusicManager::PlayFrontEndTrack(uint8 track, uint8 bPlayInFrontend)
{
if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS) {
if (m_nMusicMode == MUSICMODE_GAME) {
- if (m_nCurrentStreamedSound != NO_TRACK) {
+ if (m_nNextTrack != NO_TRACK) {
if (m_bAnnouncementInProgress) {
m_nAnnouncement = NO_TRACK;
m_bAnnouncementInProgress = false;
}
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ m_aTracks[m_nNextTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
}
SampleManager.StopStreamedFile(0);
} else if (m_nMusicMode == MUSICMODE_FRONTEND) {
- if (m_nCurrentStreamedSound != NO_TRACK) {
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (m_nNextTrack != NO_TRACK) {
+ m_aTracks[m_nNextTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
}
SampleManager.StopStreamedFile(0);
}
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = track;
+ m_nPlayingTrack = m_nNextTrack;
+ m_nNextTrack = track;
m_bPlayInFrontend = !!bPlayInFrontend;
m_bFrontendTrackFinished = false;
m_bDoTrackService = true;
bHasStarted = false;
- if (m_nCurrentStreamedSound < STREAMED_SOUND_RADIO_POLICE) {
+ if (m_nNextTrack < NUM_RADIOS) {
gRetuneCounter = 0;
gNumRetunePresses = 0;
}
@@ -735,7 +752,7 @@ cMusicManager::PreloadCutSceneMusic(uint8 track)
SampleManager.StopStreamedFile(0);
SampleManager.PreloadStreamedFile(track, 0);
SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 1, 0);
- m_nCurrentStreamedSound = track;
+ m_nNextTrack = track;
}
}
@@ -751,7 +768,7 @@ cMusicManager::StopCutSceneMusic(void)
{
if (IsInitialised() && !m_bDisabled && m_nMusicMode == MUSICMODE_CUTSCENE) {
SampleManager.StopStreamedFile(0);
- m_nCurrentStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
}
}
@@ -795,45 +812,45 @@ cMusicManager::ServiceAmbience()
m_nAnnouncement = NO_TRACK;
m_bAnnouncementInProgress = false;
}
- if (m_nCurrentStreamedSound < STREAMED_SOUND_CITY_AMBIENT) {
+ if (m_nNextTrack < RADIO_OFF) {
if (SampleManager.IsStreamPlaying(0)) {
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ m_aTracks[m_nNextTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
SampleManager.StopStreamedFile(0);
- m_nCurrentStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
return;
}
- m_nCurrentStreamedSound = STREAMED_SOUND_CITY_AMBIENT;
+ m_nNextTrack = RADIO_OFF;
}
if (CWorld::Players[CWorld::PlayerInFocus].m_WBState != WBSTATE_PLAYING && !SampleManager.IsStreamPlaying(0)) {
- m_nCurrentStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
return;
}
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = TheCamera.DistanceToWater <= 45.0f ? STREAMED_SOUND_WATER_AMBIENT : STREAMED_SOUND_CITY_AMBIENT;
+ m_nPlayingTrack = m_nNextTrack;
+ m_nNextTrack = TheCamera.DistanceToWater <= 45.0f ? STREAMED_SOUND_WATER_AMBIENT : STREAMED_SOUND_CITY_AMBIENT;
- if (m_nCurrentStreamedSound == m_nPreviousStreamedSound) {
+ if (m_nNextTrack == m_nPlayingTrack) {
ComputeAmbienceVol(false, volume);
SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0);
- if (m_bDontServiceAmbienceTrack) {
+ if (m_bVerifyAmbienceTrackStartedToPlay) {
if (SampleManager.IsStreamPlaying(0))
- m_bDontServiceAmbienceTrack = false;
+ m_bVerifyAmbienceTrackStartedToPlay = false;
} else ServiceTrack();
} else {
- if (m_nPreviousStreamedSound < TOTAL_STREAMED_SOUNDS) {
- m_aTracks[m_nPreviousStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nPreviousStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (m_nPlayingTrack < TOTAL_STREAMED_SOUNDS) {
+ m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
SampleManager.StopStreamedFile(0);
}
- uint32 pos = GetTrackStartPos(m_nCurrentStreamedSound);
+ uint32 pos = GetTrackStartPos(m_nNextTrack);
SampleManager.SetStreamedVolumeAndPan(0, 63, 1, 0);
- if (SampleManager.StartStreamedFile(m_nCurrentStreamedSound, pos, 0)) {
+ if (SampleManager.StartStreamedFile(m_nNextTrack, pos, 0)) {
ComputeAmbienceVol(true, volume);
SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0);
- m_bDontServiceAmbienceTrack = true;
+ m_bVerifyAmbienceTrackStartedToPlay = true;
} else
- m_nCurrentStreamedSound = NO_TRACK;
+ m_nNextTrack = NO_TRACK;
}
}
@@ -862,7 +879,7 @@ cMusicManager::ServiceTrack()
{
if (m_bDoTrackService) {
if (!SampleManager.IsStreamPlaying(0))
- SampleManager.StartStreamedFile(m_nCurrentStreamedSound, 0, 0);
+ SampleManager.StartStreamedFile(m_nNextTrack, 0, 0);
}
}
@@ -882,9 +899,9 @@ cMusicManager::ServiceAnnouncement()
cCheck = 0;
int pos = SampleManager.GetStreamedFilePosition(0);
if (SampleManager.IsStreamPlaying(0)) {
- if (m_nCurrentStreamedSound != NO_TRACK) {
- m_aTracks[m_nCurrentStreamedSound].m_nPosition = pos;
- m_aTracks[m_nCurrentStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (m_nNextTrack != NO_TRACK) {
+ m_aTracks[m_nNextTrack].m_nPosition = pos;
+ m_aTracks[m_nNextTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
SampleManager.StopStreamedFile(0);
}
}
@@ -893,8 +910,8 @@ cMusicManager::ServiceAnnouncement()
if (SampleManager.StartStreamedFile(m_nAnnouncement, 0, 0)) {
SampleManager.SetStreamedVolumeAndPan(AudioManager.ShouldDuckMissionAudio() ? 25 : 100, 63, 0, 0);
m_bAnnouncementInProgress = true;
- m_nPreviousStreamedSound = m_nCurrentStreamedSound;
- m_nCurrentStreamedSound = m_nAnnouncement;
+ m_nPlayingTrack = m_nNextTrack;
+ m_nNextTrack = m_nAnnouncement;
return true;
}
@@ -929,7 +946,7 @@ cMusicManager::GetNextCarTuning()
while (gNumRetunePresses < 0) {
if(veh->m_nRadioStation == HEAD_RADIO) {
veh->m_nRadioStation = RADIO_OFF;
- } else if(veh->m_nRadioStation == RADIO_OFF || veh->m_nRadioStation == POLICE_RADIO) {
+ } else if(veh->m_nRadioStation == RADIO_OFF || veh->m_nRadioStation == NUM_RADIOS) {
veh->m_nRadioStation = SampleManager.IsMP3RadioChannelAvailable() ? USERTRACK : USERTRACK - 1;
} else
veh->m_nRadioStation--;
@@ -940,12 +957,18 @@ cMusicManager::GetNextCarTuning()
#endif
if (SampleManager.IsMP3RadioChannelAvailable()) {
if (veh->m_nRadioStation == RADIO_OFF)
- veh->m_nRadioStation = POLICE_RADIO;
+ veh->m_nRadioStation = NUM_RADIOS;
veh->m_nRadioStation += gNumRetunePresses;
- if (veh->m_nRadioStation == POLICE_RADIO)
+#ifdef FIX_BUGS
+ while (veh->m_nRadioStation > NUM_RADIOS)
+ veh->m_nRadioStation -= (NUM_RADIOS + 1);
+#endif
+ if (veh->m_nRadioStation == NUM_RADIOS)
veh->m_nRadioStation = RADIO_OFF;
- else if (veh->m_nRadioStation > POLICE_RADIO)
- veh->m_nRadioStation -= RADIO_OFF;
+#ifndef FIX_BUGS
+ else if (veh->m_nRadioStation > NUM_RADIOS)
+ veh->m_nRadioStation -= (NUM_RADIOS + 1);
+#endif
} else if (gNumRetunePresses + veh->m_nRadioStation >= USERTRACK) {
while (gNumRetunePresses) {
if (veh->m_nRadioStation == RADIO_OFF)
@@ -967,16 +990,16 @@ cMusicManager::GetNextCarTuning()
bool
cMusicManager::ChangeRadioChannel()
{
- if (m_nCurrentStreamedSound != m_nPreviousStreamedSound) {
- if (m_nPreviousStreamedSound < TOTAL_STREAMED_SOUNDS) {
- m_aTracks[m_nPreviousStreamedSound].m_nPosition = SampleManager.GetStreamedFilePosition(0);
- m_aTracks[m_nPreviousStreamedSound].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
+ if (m_nNextTrack != m_nPlayingTrack) {
+ if (m_nPlayingTrack < TOTAL_STREAMED_SOUNDS) {
+ m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
+ m_aTracks[m_nPlayingTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
SampleManager.StopStreamedFile(0);
}
if (SampleManager.IsStreamPlaying(0))
return false;
- if (!SampleManager.StartStreamedFile(m_nCurrentStreamedSound, GetTrackStartPos(m_nCurrentStreamedSound), 0))
+ if (!SampleManager.StartStreamedFile(m_nNextTrack, GetTrackStartPos(m_nNextTrack), 0))
return false;
SampleManager.SetStreamedVolumeAndPan(AudioManager.ShouldDuckMissionAudio() ? 25 : 100, 63, 0, 0);
}
diff --git a/src/audio/MusicManager.h b/src/audio/MusicManager.h
index e8b94da6..5d277f0e 100644
--- a/src/audio/MusicManager.h
+++ b/src/audio/MusicManager.h
@@ -18,8 +18,8 @@ public:
bool m_bIsInitialised;
bool m_bDisabled;
uint8 m_nMusicMode;
- uint8 m_nCurrentStreamedSound;
- uint8 m_nPreviousStreamedSound;
+ uint8 m_nNextTrack;
+ uint8 m_nPlayingTrack;
bool m_bFrontendTrackFinished;
bool m_bPlayInFrontend;
bool m_bSetNextStation;
@@ -34,9 +34,9 @@ public:
uint32 m_nTimer;
bool m_bDoTrackService;
bool m_bIgnoreTimeDelay;
- bool m_bDontServiceAmbienceTrack;
+ bool m_bVerifyAmbienceTrackStartedToPlay;
bool m_bRadioSetByScript;
- uint8 m_nRadioStation;
+ uint8 m_nRadioStationScript;
int32 m_nRadioPosition;
uint8 m_nRadioInCar;
@@ -44,7 +44,7 @@ public:
cMusicManager();
bool IsInitialised() { return m_bIsInitialised; }
uint32 GetMusicMode() { return m_nMusicMode; }
- uint8 GetCurrentTrack() { return m_nCurrentStreamedSound; }
+ uint8 GetNextTrack() { return m_nNextTrack; }
bool Initialise();
void Terminate();
diff --git a/src/audio/audio_enums.h b/src/audio/audio_enums.h
index 8c6d35aa..027042cb 100644
--- a/src/audio/audio_enums.h
+++ b/src/audio/audio_enums.h
@@ -12,8 +12,9 @@ enum eRadioStation
FLASHBACK,
CHATTERBOX,
USERTRACK,
- POLICE_RADIO,
- RADIO_OFF,
+ POLICE_RADIO = 10,
+ NUM_RADIOS = 10,
+ RADIO_OFF = 11,
};
enum eMusicMode
diff --git a/src/audio/oal/channel.cpp b/src/audio/oal/channel.cpp
index 673a4aed..d1fd0aea 100644
--- a/src/audio/oal/channel.cpp
+++ b/src/audio/oal/channel.cpp
@@ -15,6 +15,8 @@ ALuint alFilters[MAXCHANNELS+MAX2DCHANNELS];
ALuint alBuffers[MAXCHANNELS+MAX2DCHANNELS];
bool bChannelsCreated = false;
+int32 CChannel::channelsThatNeedService = 0;
+
void
CChannel::InitChannels()
{
@@ -59,7 +61,9 @@ void CChannel::SetDefault()
Position[0] = 0.0f; Position[1] = 0.0f; Position[2] = 0.0f;
Distances[0] = 0.0f; Distances[1] = FLT_MAX;
- LoopCount = 1;
+
+ LoopCount = 1;
+ LastProcessedOffset = UINT32_MAX;
LoopPoints[0] = 0; LoopPoints[1] = -1;
Frequency = MAX_FREQ;
@@ -67,6 +71,10 @@ void CChannel::SetDefault()
void CChannel::Reset()
{
+ // Here is safe because ctor don't call this
+ if (LoopCount > 1)
+ channelsThatNeedService--;
+
ClearBuffer();
SetDefault();
}
@@ -165,10 +173,51 @@ void CChannel::SetCurrentFreq(uint32 freq)
SetPitch(ALfloat(freq) / Frequency);
}
-void CChannel::SetLoopCount(int32 loopCount) // fake. TODO:
+void CChannel::SetLoopCount(int32 count)
{
if ( !HasSource() ) return;
- alSourcei(alSources[id], AL_LOOPING, loopCount == 1 ? AL_FALSE : AL_TRUE);
+
+ // 0: loop indefinitely, 1: play one time, 2: play two times etc...
+ // only > 1 needs manual processing
+
+ if (LoopCount > 1 && count < 2)
+ channelsThatNeedService--;
+ else if (LoopCount < 2 && count > 1)
+ channelsThatNeedService++;
+
+ alSourcei(alSources[id], AL_LOOPING, count == 1 ? AL_FALSE : AL_TRUE);
+ LoopCount = count;
+}
+
+bool CChannel::Update()
+{
+ if (!HasSource()) return false;
+ if (LoopCount < 2) return false;
+
+ ALint state;
+ alGetSourcei(alSources[id], AL_SOURCE_STATE, &state);
+ if (state == AL_STOPPED) {
+ debug("Looping channels(%d in this case) shouldn't report AL_STOPPED, but nvm\n", id);
+ SetLoopCount(1);
+ return true;
+ }
+
+ assert(channelsThatNeedService > 0 && "Ref counting is broken");
+
+ ALint offset;
+ alGetSourcei(alSources[id], AL_SAMPLE_OFFSET, &offset);
+
+ // Rewound
+ if (offset < LastProcessedOffset) {
+ LoopCount--;
+ if (LoopCount == 1) {
+ // Playing last tune...
+ channelsThatNeedService--;
+ alSourcei(alSources[id], AL_LOOPING, AL_FALSE);
+ }
+ }
+ LastProcessedOffset = offset;
+ return true;
}
void CChannel::SetLoopPoints(ALint start, ALint end)
@@ -200,6 +249,7 @@ void CChannel::SetPan(int32 pan)
void CChannel::ClearBuffer()
{
if ( !HasSource() ) return;
+ alSourcei(alSources[id], AL_LOOPING, AL_FALSE);
alSourcei(alSources[id], AL_BUFFER, AL_NONE);
Data = nil;
DataSize = 0;
diff --git a/src/audio/oal/channel.h b/src/audio/oal/channel.h
index 81817a32..b081be25 100644
--- a/src/audio/oal/channel.h
+++ b/src/audio/oal/channel.h
@@ -19,7 +19,10 @@ class CChannel
float Distances[2];
int32 LoopCount;
ALint LoopPoints[2];
+ ALint LastProcessedOffset;
public:
+ static int32 channelsThatNeedService;
+
static void InitChannels();
static void DestroyChannels();
@@ -37,7 +40,7 @@ public:
void SetVolume(int32 vol);
void SetSampleData(void *_data, size_t _DataSize, int32 freq);
void SetCurrentFreq(uint32 freq);
- void SetLoopCount(int32 loopCount); // fake
+ void SetLoopCount(int32 count);
void SetLoopPoints(ALint start, ALint end);
void SetPosition(float x, float y, float z);
void SetDistances(float max, float min);
@@ -45,6 +48,7 @@ public:
void ClearBuffer();
void SetReverbMix(ALuint slot, float mix);
void UpdateReverb(ALuint slot);
+ bool Update();
};
#endif \ No newline at end of file
diff --git a/src/audio/oal/stream.cpp b/src/audio/oal/stream.cpp
index 74ed86f4..44cc1c93 100644
--- a/src/audio/oal/stream.cpp
+++ b/src/audio/oal/stream.cpp
@@ -492,6 +492,7 @@ public:
m_bOpened = mpg123_open(m_pMH, path) == MPG123_OK
&& mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK;
+
m_nRate = rate;
m_nChannels = channels;
@@ -925,7 +926,8 @@ CStream::CStream(char *filename, ALuint *sources, ALuint (&buffers)[NUM_STREAMBU
m_bReset(false),
m_nVolume(0),
m_nPan(0),
- m_nPosBeforeReset(0)
+ m_nPosBeforeReset(0),
+ m_nLoopCount(1)
{
// Be case-insensitive on linux (from https://github.com/OneSadCookie/fcaseopen/)
@@ -1021,7 +1023,7 @@ bool CStream::IsPlaying()
ALint sourceState[2];
alGetSourcei(m_pAlSources[0], AL_SOURCE_STATE, &sourceState[0]);
alGetSourcei(m_pAlSources[1], AL_SOURCE_STATE, &sourceState[1]);
- if ( m_bActive || sourceState[0] == AL_PLAYING || sourceState[1] == AL_PLAYING)
+ if (sourceState[0] == AL_PLAYING || sourceState[1] == AL_PLAYING)
return true;
}
@@ -1093,6 +1095,7 @@ void CStream::SetPan(uint8 nPan)
m_nPan = nPan;
}
+// Should only be called if source is stopped
void CStream::SetPosMS(uint32 nPos)
{
if ( !IsOpened() ) return;
@@ -1175,10 +1178,16 @@ void CStream::ClearBuffers()
alSourceUnqueueBuffers(m_pAlSources[1], 1, &value);
}
-bool CStream::Setup()
+bool CStream::Setup(bool imSureQueueIsEmpty)
{
if ( IsOpened() )
{
+ alSourcei(m_pAlSources[0], AL_LOOPING, AL_FALSE);
+ alSourcei(m_pAlSources[1], AL_LOOPING, AL_FALSE);
+ if (!imSureQueueIsEmpty) {
+ SetPlay(false);
+ ClearBuffers();
+ }
m_pSoundFile->Seek(0);
//SetPosition(0.0f, 0.0f, 0.0f);
SetPitch(1.0f);
@@ -1189,6 +1198,13 @@ bool CStream::Setup()
return IsOpened();
}
+void CStream::SetLoopCount(int32 count)
+{
+ if ( !HasSource() ) return;
+
+ m_nLoopCount = count;
+}
+
void CStream::SetPlay(bool state)
{
if ( !HasSource() ) return;
@@ -1248,7 +1264,7 @@ void CStream::Update()
if ( !m_bPaused )
{
- ALint sourceState[2];
+ ALint totalBuffers[2] = { 0, 0 };
ALint buffersProcessed[2] = { 0, 0 };
// Relying a lot on left buffer states in here
@@ -1256,44 +1272,51 @@ void CStream::Update()
do
{
//alSourcef(m_pAlSources[0], AL_ROLLOFF_FACTOR, 0.0f);
- alGetSourcei(m_pAlSources[0], AL_SOURCE_STATE, &sourceState[0]);
+ alGetSourcei(m_pAlSources[0], AL_BUFFERS_QUEUED, &totalBuffers[0]);
alGetSourcei(m_pAlSources[0], AL_BUFFERS_PROCESSED, &buffersProcessed[0]);
//alSourcef(m_pAlSources[1], AL_ROLLOFF_FACTOR, 0.0f);
- alGetSourcei(m_pAlSources[1], AL_SOURCE_STATE, &sourceState[1]);
+ alGetSourcei(m_pAlSources[1], AL_BUFFERS_QUEUED, &totalBuffers[1]);
alGetSourcei(m_pAlSources[1], AL_BUFFERS_PROCESSED, &buffersProcessed[1]);
} while (buffersProcessed[0] != buffersProcessed[1]);
- ALint looping = AL_FALSE;
- alGetSourcei(m_pAlSources[0], AL_LOOPING, &looping);
-
- if ( looping == AL_TRUE )
+ 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)
{
- TRACE("stream set looping");
- alSourcei(m_pAlSources[0], AL_LOOPING, AL_TRUE);
- alSourcei(m_pAlSources[1], AL_LOOPING, AL_TRUE);
+ Setup(true);
+ buffersRefilled = FillBuffers() != 0;
+ if (m_nLoopCount != 0)
+ m_nLoopCount--;
}
-
- assert(buffersProcessed[0] == buffersProcessed[1]);
-
- while( buffersProcessed[0]-- )
+ else
{
- ALuint buffer[2];
-
- alSourceUnqueueBuffers(m_pAlSources[0], 1, &buffer[0]);
- alSourceUnqueueBuffers(m_pAlSources[1], 1, &buffer[1]);
-
- if (m_bActive && FillBuffer(buffer))
+ while( buffersProcessed[0]-- )
{
- alSourceQueueBuffers(m_pAlSources[0], 1, &buffer[0]);
- alSourceQueueBuffers(m_pAlSources[1], 1, &buffer[1]);
+ ALuint buffer[2];
+
+ alSourceUnqueueBuffers(m_pAlSources[0], 1, &buffer[0]);
+ alSourceUnqueueBuffers(m_pAlSources[1], 1, &buffer[1]);
+
+ if (m_bActive && FillBuffer(buffer))
+ {
+ buffersRefilled = true;
+ alSourceQueueBuffers(m_pAlSources[0], 1, &buffer[0]);
+ alSourceQueueBuffers(m_pAlSources[1], 1, &buffer[1]);
+ }
}
}
-
- if ( sourceState[0] != AL_PLAYING )
- {
- alGetSourcei(m_pAlSources[0], AL_BUFFERS_PROCESSED, &buffersProcessed[0]);
- SetPlay(buffersProcessed[0]!=0);
- }
+
+ // 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)))
+ SetPlay(true);
}
}
@@ -1301,10 +1324,11 @@ void CStream::ProviderInit()
{
if ( m_bReset )
{
- if ( Setup() )
+ if ( Setup(true) )
{
SetPan(m_nPan);
SetVolume(m_nVolume);
+ SetLoopCount(m_nLoopCount);
SetPosMS(m_nPosBeforeReset);
if (m_bActive)
FillBuffers();
diff --git a/src/audio/oal/stream.h b/src/audio/oal/stream.h
index bcbc5e54..9a2a2fbe 100644
--- a/src/audio/oal/stream.h
+++ b/src/audio/oal/stream.h
@@ -69,6 +69,7 @@ class CStream
uint32 m_nVolume;
uint8 m_nPan;
uint32 m_nPosBeforeReset;
+ int32 m_nLoopCount;
IDecoder *m_pSoundFile;
@@ -99,10 +100,12 @@ public:
uint32 GetPosMS();
uint32 GetLengthMS();
- bool Setup();
+ bool Setup(bool imSureQueueIsEmpty = false);
void Start();
void Stop();
void Update(void);
+ void SetLoopCount(int32);
+
void ProviderInit();
void ProviderTerm();
diff --git a/src/audio/sampman_miles.cpp b/src/audio/sampman_miles.cpp
index 11e2b0ff..9b601d52 100644
--- a/src/audio/sampman_miles.cpp
+++ b/src/audio/sampman_miles.cpp
@@ -1514,7 +1514,7 @@ cSampleManager::LoadPedComment(uint32 nComment)
case MUSICMODE_FRONTEND:
{
- if ( MusicManager.GetCurrentTrack() == STREAMED_SOUND_GAME_COMPLETED )
+ if ( MusicManager.GetNextTrack() == STREAMED_SOUND_GAME_COMPLETED )
return false;
break;
@@ -1753,8 +1753,8 @@ cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume)
// increase the volume for JB.MP3 and S4_BDBD.MP3
if ( MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_NEWS_INTRO
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_NEWS_INTRO
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
{
nChannelVolume[nChannel] >>= 2;
}
@@ -1792,8 +1792,8 @@ cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume)
// increase the volume for JB.MP3 and S4_BDBD.MP3
if ( MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_NEWS_INTRO
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_NEWS_INTRO
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
{
nChannelVolume[nChannel] >>= 2;
}
diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp
index 798ea287..d9adef5b 100644
--- a/src/audio/sampman_oal.cpp
+++ b/src/audio/sampman_oal.cpp
@@ -14,8 +14,6 @@
#include <AL/efx.h>
#include <AL/efx-presets.h>
-#pragma comment(lib, "OpenAL32.lib")
-
// for user MP3s
#include <direct.h>
#include <shlobj.h>
@@ -24,6 +22,10 @@
#define _getcwd getcwd
#endif
+#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
+#pragma comment( lib, "OpenAL32.lib" )
+#endif
+
#include "common.h"
#include "crossplatform.h"
@@ -44,7 +46,6 @@
//TODO: fix eax3 reverb
//TODO: max channels
-//TODO: loop count
cSampleManager SampleManager;
bool _bSampmanInitialised = false;
@@ -117,7 +118,6 @@ char _mp3DirectoryPath[MAX_PATH];
CStream *aStream[MAX_STREAMS];
uint8 nStreamPan [MAX_STREAMS];
uint8 nStreamVolume[MAX_STREAMS];
-uint8 nStreamLoopedFlag[MAX_STREAMS];
uint32 _CurMP3Index;
int32 _CurMP3Pos;
bool _bIsMp3Active;
@@ -1318,7 +1318,7 @@ cSampleManager::LoadPedComment(uint32 nComment)
case MUSICMODE_FRONTEND:
{
- if ( MusicManager.GetCurrentTrack() == STREAMED_SOUND_GAME_COMPLETED )
+ if ( MusicManager.GetNextTrack() == STREAMED_SOUND_GAME_COMPLETED )
return false;
break;
@@ -1533,8 +1533,8 @@ cSampleManager::SetChannelEmittingVolume(uint32 nChannel, uint32 nVolume)
// reduce channel volume when JB.MP3 or S4_BDBD.MP3 playing
if ( MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_NEWS_INTRO
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_NEWS_INTRO
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
{
nChannelVolume[nChannel] = vol / 4;
}
@@ -1575,8 +1575,8 @@ cSampleManager::SetChannelVolume(uint32 nChannel, uint32 nVolume)
// reduce the volume for JB.MP3 and S4_BDBD.MP3
if ( MusicManager.GetMusicMode() == MUSICMODE_CUTSCENE
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_NEWS_INTRO
- && MusicManager.GetCurrentTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_NEWS_INTRO
+ && MusicManager.GetNextTrack() != STREAMED_SOUND_CUTSCENE_SAL4_BDBD )
{
nChannelVolume[nChannel] = vol / 4;
}
@@ -1666,7 +1666,7 @@ cSampleManager::PreloadStreamedFile(uint8 nFile, uint8 nStream)
ASSERT(stream != NULL);
aStream[nStream] = stream;
- if ( !stream->IsOpened() )
+ if ( !stream->Setup() )
{
delete stream;
aStream[nStream] = NULL;
@@ -1696,7 +1696,7 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
if ( stream )
{
- if ( stream->Setup() )
+ if ( stream->IsOpened() )
{
stream->Start();
}
@@ -1742,13 +1742,11 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
aStream[nStream] = stream;
- if (stream->IsOpened()) {
- if (stream->Setup()) {
- if (position != 0)
- stream->SetPosMS(position);
+ if (stream->Setup()) {
+ if (position != 0)
+ stream->SetPosMS(position);
- stream->Start();
- }
+ stream->Start();
return true;
} else {
@@ -1769,10 +1767,8 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
}
- if (aStream[nStream]->IsOpened()) {
- if (aStream[nStream]->Setup()) {
- aStream[nStream]->Start();
- }
+ if (aStream[nStream]->Setup()) {
+ aStream[nStream]->Start();
return true;
} else {
@@ -1798,13 +1794,11 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
aStream[nStream] = stream;
- if (stream->IsOpened()) {
- if (stream->Setup()) {
- if (position != 0)
- stream->SetPosMS(position);
+ if (stream->Setup()) {
+ if (position != 0)
+ stream->SetPosMS(position);
- stream->Start();
- }
+ stream->Start();
return true;
} else {
@@ -1825,13 +1819,11 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream]);
}
- if (aStream[nStream]->IsOpened()) {
- if (aStream[nStream]->Setup()) {
- if (position != 0)
- aStream[nStream]->SetPosMS(position);
+ if (aStream[nStream]->Setup()) {
+ if (position != 0)
+ aStream[nStream]->SetPosMS(position);
- aStream[nStream]->Start();
- }
+ aStream[nStream]->Start();
_bIsMp3Active = true;
return true;
@@ -1855,13 +1847,11 @@ cSampleManager::StartStreamedFile(uint8 nFile, uint32 nPos, uint8 nStream)
aStream[nStream] = stream;
- if ( stream->IsOpened() ) {
- if ( stream->Setup() ) {
- if (position != 0)
- stream->SetPosMS(position);
+ if ( stream->Setup() ) {
+ if (position != 0)
+ stream->SetPosMS(position);
- stream->Start();
- }
+ stream->Start();
return true;
} else {
@@ -1884,6 +1874,9 @@ cSampleManager::StopStreamedFile(uint8 nStream)
{
delete stream;
aStream[nStream] = NULL;
+
+ if ( nStream == 0 )
+ _bIsMp3Active = false;
}
}
@@ -1896,7 +1889,21 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream)
if ( stream )
{
- return stream->GetPosMS();
+ if ( _bIsMp3Active )
+ {
+ tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index);
+
+ if ( mp3 != NULL )
+ {
+ return stream->GetPosMS() + mp3->nTrackStreamPos;
+ }
+ else
+ return 0;
+ }
+ else
+ {
+ return stream->GetPosMS();
+ }
}
return 0;
@@ -1963,6 +1970,12 @@ cSampleManager::Service(void)
if ( stream )
stream->Update();
}
+ int refCount = CChannel::channelsThatNeedService;
+ for ( int32 i = 0; refCount && i < MAXCHANNELS+MAX2DCHANNELS; i++ )
+ {
+ if ( aChannel[i].Update() )
+ refCount--;
+ }
}
bool
diff --git a/src/audio/soundlist.h b/src/audio/soundlist.h
index 7c3b30a7..4bbc3dde 100644
--- a/src/audio/soundlist.h
+++ b/src/audio/soundlist.h
@@ -160,7 +160,7 @@ enum eSound
SOUND_FRONTEND_MONO,
SOUND_FRONTEND_AUDIO_TEST,
SOUND_FRONTEND_FAIL,
- SOUND_FRONTEND_NO_RADIO,
+ SOUND_FRONTEND_RADIO_TURN_OFF,
SOUND_FRONTEND_RADIO_CHANGE,
SOUND_HUD,
SOUND_AMMUNATION_WELCOME_1,
diff --git a/src/control/AutoPilot.cpp b/src/control/AutoPilot.cpp
index 4038c93e..77cbd0b4 100644
--- a/src/control/AutoPilot.cpp
+++ b/src/control/AutoPilot.cpp
@@ -52,8 +52,8 @@ void CAutoPilot::Save(uint8*& buf)
WriteSaveBuf<int32>(buf, m_nCurrentRouteNode);
WriteSaveBuf<int32>(buf, m_nNextRouteNode);
WriteSaveBuf<int32>(buf, m_nPrevRouteNode);
- WriteSaveBuf<uint32>(buf, m_nTimeEnteredCurve);
- WriteSaveBuf<uint32>(buf, m_nTimeToSpendOnCurrentCurve);
+ WriteSaveBuf<int32>(buf, m_nTimeEnteredCurve);
+ WriteSaveBuf<int32>(buf, m_nTimeToSpendOnCurrentCurve);
WriteSaveBuf<uint32>(buf, m_nCurrentPathNodeInfo);
WriteSaveBuf<uint32>(buf, m_nNextPathNodeInfo);
WriteSaveBuf<uint32>(buf, m_nPreviousPathNodeInfo);
@@ -91,8 +91,8 @@ void CAutoPilot::Load(uint8*& buf)
m_nCurrentRouteNode = ReadSaveBuf<int32>(buf);
m_nNextRouteNode = ReadSaveBuf<int32>(buf);
m_nPrevRouteNode = ReadSaveBuf<int32>(buf);
- m_nTimeEnteredCurve = ReadSaveBuf<uint32>(buf);
- m_nTimeToSpendOnCurrentCurve = ReadSaveBuf<uint32>(buf);
+ m_nTimeEnteredCurve = ReadSaveBuf<int32>(buf);
+ m_nTimeToSpendOnCurrentCurve = ReadSaveBuf<int32>(buf);
m_nCurrentPathNodeInfo = ReadSaveBuf<uint32>(buf);
m_nNextPathNodeInfo = ReadSaveBuf<uint32>(buf);
m_nPreviousPathNodeInfo = ReadSaveBuf<uint32>(buf);
diff --git a/src/control/AutoPilot.h b/src/control/AutoPilot.h
index 6349fce6..c7707ed6 100644
--- a/src/control/AutoPilot.h
+++ b/src/control/AutoPilot.h
@@ -57,8 +57,8 @@ public:
int32 m_nCurrentRouteNode;
int32 m_nNextRouteNode;
int32 m_nPrevRouteNode;
- uint32 m_nTimeEnteredCurve;
- uint32 m_nTimeToSpendOnCurrentCurve;
+ int32 m_nTimeEnteredCurve;
+ int32 m_nTimeToSpendOnCurrentCurve;
uint32 m_nCurrentPathNodeInfo;
uint32 m_nNextPathNodeInfo;
uint32 m_nPreviousPathNodeInfo;
diff --git a/src/control/Phones.cpp b/src/control/Phones.cpp
index f649d435..ef7ecead 100644
--- a/src/control/Phones.cpp
+++ b/src/control/Phones.cpp
@@ -58,9 +58,9 @@ CPhoneInfo::Update(void)
TheCamera.SetWideScreenOff();
pPhoneDisplayingMessages = nil;
bDisplayingPhoneMessage = false;
- CAnimBlendAssociation *talkAssoc = RpAnimBlendClumpGetAssociation(player->GetClump(), ANIM_PHONE_TALK);
+ CAnimBlendAssociation *talkAssoc = RpAnimBlendClumpGetAssociation(player->GetClump(), ANIM_STD_PHONE_TALK);
if (talkAssoc && talkAssoc->blendAmount > 0.5f) {
- CAnimBlendAssociation *endAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_PHONE_OUT, 8.0f);
+ CAnimBlendAssociation *endAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_OUT, 8.0f);
endAssoc->flags &= ~ASSOC_DELETEFADEDOUT;
endAssoc->SetFinishCallback(PhonePutDownCB, player);
} else {
@@ -117,7 +117,7 @@ CPhoneInfo::Update(void)
CPad::GetPad(0)->SetDisablePlayerControls(PLAYERCONTROL_PHONE);
TheCamera.SetWideScreenOn();
playerInfo->MakePlayerSafe(true);
- CAnimBlendAssociation *phonePickAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_PHONE_IN, 4.0f);
+ CAnimBlendAssociation *phonePickAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_IN, 4.0f);
phonePickAssoc->SetFinishCallback(PhonePickUpCB, &m_aPhones[phoneId]);
bPickingUpPhone = true;
pCallBackPed = player;
@@ -442,10 +442,10 @@ PhonePickUpCB(CAnimBlendAssociation *assoc, void *arg)
CPed *ped = CPhoneInfo::pCallBackPed;
ped->m_nMoveState = PEDMOVE_STILL;
- CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_IDLE_STANCE, 8.0f);
+ CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE, 8.0f);
if (assoc->blendAmount > 0.5f && ped)
- CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_PHONE_TALK, 8.0f);
+ CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_TALK, 8.0f);
CPhoneInfo::pCallBackPed = nil;
}
diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp
index 2dd66333..d8b15385 100644
--- a/src/control/Replay.cpp
+++ b/src/control/Replay.cpp
@@ -457,7 +457,7 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState
state->aFunctionCallbackID[i] = 0;
}
}else{
- state->aAnimId[i] = NUM_ANIMS;
+ state->aAnimId[i] = ANIM_STD_NUM;
state->aCurTime[i] = 0;
state->aSpeed[i] = 85;
state->aFunctionCallbackID[i] = 0;
@@ -484,7 +484,7 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState
}
}
else {
- state->aAnimId2[i] = NUM_ANIMS;
+ state->aAnimId2[i] = ANIM_STD_NUM;
state->aCurTime2[i] = 0;
state->aSpeed2[i] = 85;
state->aFunctionCallbackID2[i] = 0;
@@ -558,7 +558,7 @@ void CReplay::RetrievePedAnimation(CPed *ped, CStoredAnimationState *state)
float time = state->partAnimTime * 4.0f / 255.0f;
float speed = state->partAnimSpeed * 3.0f / 255.0f;
float blend = state->partBlendAmount * 2.0f / 255.0f;
- if (blend > 0.0f && state->partAnimId != ANIM_IDLE_STANCE){
+ if (blend > 0.0f && state->partAnimId != ANIM_STD_IDLE){
CAnimBlendAssociation* anim3 = CAnimManager::BlendAnimation(
(RpClump*)ped->m_rwObject, ASSOCGRP_STD, (AnimationId)state->partAnimId, 1000.0f);
anim3->SetCurrentTime(time);
@@ -578,7 +578,7 @@ void CReplay::RetrieveDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationSt
assoc->SetBlend(0.0f, -1.0f);
#endif
for (int i = 0; i < NUM_MAIN_ANIMS_IN_REPLAY; i++) {
- if (state->aAnimId[i] == NUM_ANIMS)
+ if (state->aAnimId[i] == ANIM_STD_NUM)
continue;
#ifdef FIX_REPLAY_BUGS
CAnimBlendAssociation* anim = CAnimManager::AddAnimation(ped->GetClump(),
@@ -607,7 +607,7 @@ void CReplay::RetrieveDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationSt
anim->SetDeleteCallback(FindCBFunction(callback & 0x7F), ped);
}
for (int i = 0; i < NUM_PARTIAL_ANIMS_IN_REPLAY; i++) {
- if (state->aAnimId2[i] == NUM_ANIMS)
+ if (state->aAnimId2[i] == ANIM_STD_NUM)
continue;
#ifdef FIX_REPLAY_BUGS
CAnimBlendAssociation* anim = CAnimManager::AddAnimation(ped->GetClump(),
diff --git a/src/control/Script.cpp b/src/control/Script.cpp
index e70bd508..5598f3c9 100644
--- a/src/control/Script.cpp
+++ b/src/control/Script.cpp
@@ -4266,7 +4266,7 @@ int8 CRunningScript::ProcessCommands200To299(int32 command)
#ifdef FIX_BUGS
AnimationId anim = pVehicle->GetDriverAnim();
#else
- AnimationId anim = pVehicle->bLowVehicle ? ANIM_CAR_LSIT : ANIM_CAR_SIT;
+ AnimationId anim = pVehicle->bLowVehicle ? ANIM_STD_CAR_SIT_LO : ANIM_STD_CAR_SIT;
#endif
pPed->m_pVehicleAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, anim, 100.0f);
pPed->StopNonPartialAnims();
@@ -4309,7 +4309,7 @@ int8 CRunningScript::ProcessCommands200To299(int32 command)
pPlayer->m_pPed->m_pVehicleAnim->blendDelta = -1000.0f;
pPlayer->m_pPed->m_pVehicleAnim = nil;
pPlayer->m_pPed->SetMoveState(PEDMOVE_NONE);
- CAnimManager::BlendAnimation(pPlayer->m_pPed->GetClump(), pPlayer->m_pPed->m_animGroup, ANIM_IDLE_STANCE, 100.0f);
+ CAnimManager::BlendAnimation(pPlayer->m_pPed->GetClump(), pPlayer->m_pPed->m_animGroup, ANIM_STD_IDLE, 100.0f);
pPlayer->m_pPed->RestartNonPartialAnims();
AudioManager.PlayerJustLeftCar();
pos.z += pPlayer->m_pPed->GetDistanceFromCentreOfMassToBaseOfModel();
diff --git a/src/control/Script2.cpp b/src/control/Script2.cpp
index 9329b3bc..5c953011 100644
--- a/src/control/Script2.cpp
+++ b/src/control/Script2.cpp
@@ -913,7 +913,7 @@ int8 CRunningScript::ProcessCommands400To499(int32 command)
if (strcmp(m_abScriptName, "camera") == 0){
pPlayer->m_pPed->SetMoveSpeed(0.0f, 0.0f, 0.0f);
pPlayer->m_pPed->SetTurnSpeed(0.0f, 0.0f, 0.0f);
- CAnimManager::BlendAnimation((RpClump*)pPlayer->m_pPed->m_rwObject, pPlayer->m_pPed->m_animGroup, ANIM_IDLE_STANCE, 1000.0f);
+ CAnimManager::BlendAnimation((RpClump*)pPlayer->m_pPed->m_rwObject, pPlayer->m_pPed->m_animGroup, ANIM_STD_IDLE, 1000.0f);
}
}
return 0;
@@ -1156,7 +1156,7 @@ int8 CRunningScript::ProcessCommands400To499(int32 command)
#ifdef FIX_BUGS
AnimationId anim = pVehicle->GetDriverAnim();
#else
- AnimationId anim = pVehicle->bLowVehicle ? ANIM_CAR_LSIT : ANIM_CAR_SIT;
+ AnimationId anim = pVehicle->bLowVehicle ? ANIM_STD_CAR_SIT_LO : ANIM_STD_CAR_SIT;
#endif
pPed->m_pVehicleAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, anim, 100.0f);
pPed->StopNonPartialAnims();
diff --git a/src/control/Script3.cpp b/src/control/Script3.cpp
index f49835db..ac88347b 100644
--- a/src/control/Script3.cpp
+++ b/src/control/Script3.cpp
@@ -417,7 +417,7 @@ int8 CRunningScript::ProcessCommands500To599(int32 command)
pPed->FlagToDestroyWhenNextProcessed();
}
else {
- pPed->SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ pPed->SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
}
return 0;
}
diff --git a/src/control/Script4.cpp b/src/control/Script4.cpp
index 40f9f2f1..93956ea2 100644
--- a/src/control/Script4.cpp
+++ b/src/control/Script4.cpp
@@ -68,7 +68,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
pPed->ApplyHeadShot(WEAPONTYPE_SNIPERRIFLE, pPed->GetNodePosition(PED_HEAD), true);
}
else {
- pPed->SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ pPed->SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
}
return 0;
}
@@ -81,7 +81,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
pPed->ApplyHeadShot(WEAPONTYPE_SNIPERRIFLE, pPed->GetNodePosition(PED_HEAD), true);
}
else {
- pPed->SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ pPed->SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
}
return 0;
}
@@ -793,7 +793,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
pPed->m_pVehicleAnim = nil;
pPed->RestartNonPartialAnims();
pPed->SetMoveState(PEDMOVE_NONE);
- CAnimManager::BlendAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_IDLE_STANCE, 100.0f);
+ CAnimManager::BlendAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE, 100.0f);
pos.z += pPed->GetDistanceFromCentreOfMassToBaseOfModel();
pPed->Teleport(pos);
CTheScripts::ClearSpaceForMissionEntity(pos, pPed);
diff --git a/src/control/Script5.cpp b/src/control/Script5.cpp
index b54d425c..464a77d8 100644
--- a/src/control/Script5.cpp
+++ b/src/control/Script5.cpp
@@ -2450,10 +2450,10 @@ bool CTheScripts::IsPlayerStopped(CPlayerInfo* pPlayer)
CPed* pPed = pPlayer->m_pPed;
if (pPed->bInVehicle)
return IsVehicleStopped(pPed->m_pMyVehicle);
- if (RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_RUN_STOP) ||
- RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_RUN_STOP_R) ||
- RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_LAUNCH) ||
- RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_GLIDE))
+ if (RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_RUNSTOP1) ||
+ RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_RUNSTOP2) ||
+ RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_JUMP_LAUNCH) ||
+ RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_JUMP_GLIDE))
return false;
return pPed->m_nMoveState == PEDMOVE_NONE || pPed->m_nMoveState == PEDMOVE_STILL;
}
diff --git a/src/core/AnimViewer.cpp b/src/core/AnimViewer.cpp
index a888d528..946693a7 100644
--- a/src/core/AnimViewer.cpp
+++ b/src/core/AnimViewer.cpp
@@ -230,7 +230,7 @@ CAnimViewer::Update(void)
if (modelInfo->GetModelType() == MITYPE_PED) {
int animGroup = ((CPedModelInfo*)modelInfo)->m_animGroup;
- if (animId > ANIM_IDLE_STANCE)
+ if (animId > ANIM_STD_IDLE)
animGroup = ASSOCGRP_STD;
if (reloadIFP) {
@@ -318,14 +318,14 @@ CAnimViewer::Update(void)
CMessages::AddMessage(gUString, 1000, 0);
} else if (pad->GetCircleJustDown()) {
- PlayAnimation(pTarget->GetClump(), animGroup, ANIM_IDLE_STANCE);
+ PlayAnimation(pTarget->GetClump(), animGroup, ANIM_STD_IDLE);
AsciiToUnicode("Idle animation playing", gUString);
CMessages::AddMessage(gUString, 1000, 0);
} else if (pad->GetDPadUpJustDown()) {
animId--;
if (animId < 0) {
- animId = NUM_ANIMS - 1;
+ animId = ANIM_STD_NUM - 1;
}
PlayAnimation(pTarget->GetClump(), animGroup, (AnimationId)animId);
@@ -334,7 +334,7 @@ CAnimViewer::Update(void)
CMessages::AddMessage(gUString, 1000, 0);
} else if (pad->GetDPadDownJustDown()) {
- animId = (animId == (NUM_ANIMS - 1) ? 0 : animId + 1);
+ animId = (animId == (ANIM_STD_NUM - 1) ? 0 : animId + 1);
PlayAnimation(pTarget->GetClump(), animGroup, (AnimationId)animId);
sprintf(gString, "Current anim: %d", animId);
diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp
index f43ff57a..e0497fe2 100644
--- a/src/core/Cam.cpp
+++ b/src/core/Cam.cpp
@@ -1644,10 +1644,10 @@ CCam::Process_FollowPedWithMouse(const CVector &CameraTarget, float TargetOrient
if(CamTargetEntity->m_rwObject){
// what's going on here?
- if(RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_WEAPON_PUMP) ||
- RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_WEAPON_THROW) ||
- RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_WEAPON_THROWU) ||
- RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_WEAPON_START_THROW)){
+ if(RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_STD_WEAPON_PUMP) ||
+ RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_STD_WEAPON_THROW) ||
+ RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_STD_THROW_UNDER) ||
+ RpAnimBlendClumpGetAssociation(CamTargetEntity->GetClump(), ANIM_STD_START_THROW)){
CPed *player = FindPlayerPed();
float PlayerDist = (Source - player->GetPosition()).Magnitude();
if(PlayerDist < 2.75f)
@@ -4631,7 +4631,7 @@ CCam::Process_FollowPed_Rotation(const CVector &CameraTarget, float TargetOrient
*/
{
LookLeftRight = -CPad::GetPad(0)->LookAroundLeftRight();
- LookUpDown = -CPad::GetPad(0)->LookAroundUpDown();
+ LookUpDown = CPad::GetPad(0)->LookAroundUpDown();
}
float AlphaOffset, BetaOffset;
if(UseMouse){
diff --git a/src/core/CdStream.cpp b/src/core/CdStream.cpp
index da85a238..977f16c2 100644
--- a/src/core/CdStream.cpp
+++ b/src/core/CdStream.cpp
@@ -14,9 +14,9 @@ struct CdReadInfo
void *pBuffer;
char field_C;
bool bLocked;
- bool bInUse;
+ bool bReading;
int32 nStatus;
- HANDLE hSemaphore; // used for CdStreamSync
+ HANDLE pDoneSemaphore; // used for CdStreamSync
HANDLE hFile;
OVERLAPPED Overlapped;
};
@@ -53,9 +53,9 @@ CdStreamInitThread(void)
{
for ( int32 i = 0; i < gNumChannels; i++ )
{
- gpReadInfo[i].hSemaphore = CreateSemaphore(nil, 0, 2, nil);
+ gpReadInfo[i].pDoneSemaphore = CreateSemaphore(nil, 0, 2, nil);
- if ( gpReadInfo[i].hSemaphore == nil )
+ if ( gpReadInfo[i].pDoneSemaphore == nil )
{
printf("%s: failed to create sync semaphore\n", "cdvd_stream");
ASSERT(0);
@@ -183,7 +183,7 @@ CdStreamShutdown(void)
CloseHandle(_gCdStreamThread);
for ( int32 i = 0; i < gNumChannels; i++ )
- CloseHandle(gpReadInfo[i].hSemaphore);
+ CloseHandle(gpReadInfo[i].pDoneSemaphore);
}
LocalFree(gpReadInfo);
@@ -213,7 +213,7 @@ CdStreamRead(int32 channel, void *buffer, uint32 offset, uint32 size)
if ( _gbCdStreamAsync )
{
- if ( pChannel->nSectorsToRead != 0 || pChannel->bInUse )
+ if ( pChannel->nSectorsToRead != 0 || pChannel->bReading )
return STREAM_NONE;
pChannel->nStatus = STREAM_NONE;
@@ -271,7 +271,7 @@ CdStreamGetStatus(int32 channel)
if ( _gbCdStreamAsync )
{
- if ( pChannel->bInUse )
+ if ( pChannel->bReading )
return STREAM_READING;
if ( pChannel->nSectorsToRead != 0 )
@@ -321,12 +321,21 @@ CdStreamSync(int32 channel)
{
pChannel->bLocked = true;
- ASSERT( pChannel->hSemaphore != nil );
+ ASSERT( pChannel->pDoneSemaphore != nil );
- WaitForSingleObject(pChannel->hSemaphore, INFINITE);
+ // Deadlock fix 1
+#ifdef FIX_BUGS
+ // This is while loop on Posix streamer, for spurious wakeups
+ if (pChannel->bLocked && pChannel->nSectorsToRead != 0){
+ WaitForSingleObject(pChannel->pDoneSemaphore, INFINITE);
+ }
+ pChannel->bLocked = false;
+#else
+ WaitForSingleObject(pChannel->pDoneSemaphore, INFINITE);
+#endif
}
- pChannel->bInUse = false;
+ pChannel->bReading = false;
return pChannel->nStatus;
}
@@ -398,7 +407,7 @@ WINAPI CdStreamThread(LPVOID lpThreadParameter)
CdReadInfo *pChannel = &gpReadInfo[channel];
ASSERT( pChannel != nil );
- pChannel->bInUse = true;
+ pChannel->bReading = true;
if ( pChannel->nStatus == STREAM_NONE )
{
@@ -455,11 +464,15 @@ WINAPI CdStreamThread(LPVOID lpThreadParameter)
if ( pChannel->bLocked )
{
- ASSERT( pChannel->hSemaphore != nil );
- ReleaseSemaphore(pChannel->hSemaphore, 1, NULL);
+ ASSERT( pChannel->pDoneSemaphore != nil );
+ // Deadlock fix 2
+#ifdef FIX_BUGS
+ pChannel->bLocked = 0;
+#endif
+ ReleaseSemaphore(pChannel->pDoneSemaphore, 1, NULL);
}
- pChannel->bInUse = false;
+ pChannel->bReading = false;
}
}
diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp
index 4115cd38..e72af7e4 100644
--- a/src/core/ControllerConfig.cpp
+++ b/src/core/ControllerConfig.cpp
@@ -354,6 +354,11 @@ uint32 CControllerConfigManager::ms_padButtonsInited = 0;
void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
{
+#ifdef XINPUT
+ // No manual bindings for you, honey.
+ return;
+#endif
+
m_bFirstCapture = true;
uint32 btn = buttons;
@@ -2619,11 +2624,6 @@ const char *XboxButtons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("~T~", "~O
#define PS2_CIRCLE "|"
#define PS2_CROSS "/"
#define PS2_SQUARE "^"
-#elif defined(BUTTON_ICONS)
-#define PS2_TRIANGLE "~T~"
-#define PS2_CIRCLE "~O~"
-#define PS2_CROSS "~X~"
-#define PS2_SQUARE "~Q~"
#else
#define PS2_TRIANGLE "TRIANGLE"
#define PS2_CIRCLE "CIRCLE"
@@ -2636,7 +2636,7 @@ const char *PlayStationButtons_noIcons[][MAX_CONTROLLERACTIONS] =
#ifdef BUTTON_ICONS
const char *PlayStationButtons[][MAX_CONTROLLERACTIONS] =
- CONTROLLER_BUTTONS(PS2_TRIANGLE, PS2_CIRCLE, PS2_CROSS, PS2_SQUARE, "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "SELECT");
+ CONTROLLER_BUTTONS("~T~", "~O~", "~X~", "~Q~", "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "SELECT");
#endif
#undef PS2_TRIANGLE
@@ -2653,11 +2653,36 @@ void CControllerConfigManager::GetWideStringOfCommandKeys(uint16 action, wchar *
if (CPad::GetPad(0)->IsAffectedByController) {
wchar wstr[16];
- // TODO: INI and/or menu setting for Xbox/PS switch
+ const char* (*Buttons)[MAX_CONTROLLERACTIONS];
+
#ifdef BUTTON_ICONS
- const char *(*Buttons)[MAX_CONTROLLERACTIONS] = CFont::ButtonsSlot != -1 ? XboxButtons : XboxButtons_noIcons;
+ #ifdef GAMEPAD_MENU
+ switch (FrontEndMenuManager.m_PrefsControllerType)
+ {
+ case CMenuManager::CONTROLLER_DUALSHOCK2:
+ case CMenuManager::CONTROLLER_DUALSHOCK3:
+ case CMenuManager::CONTROLLER_DUALSHOCK4:
+ Buttons = CFont::ButtonsSlot != -1 ? PlayStationButtons : PlayStationButtons_noIcons;
+ break;
+ default:
+ #endif
+ Buttons = CFont::ButtonsSlot != -1 ? XboxButtons : XboxButtons_noIcons;
+ #ifdef GAMEPAD_MENU
+ break;
+ }
+ #endif
#else
- const char *(*Buttons)[MAX_CONTROLLERACTIONS] = XboxButtons_noIcons;
+ switch (FrontEndMenuManager.m_PrefsControllerType)
+ {
+ case CMenuManager::CONTROLLER_DUALSHOCK2:
+ case CMenuManager::CONTROLLER_DUALSHOCK3:
+ case CMenuManager::CONTROLLER_DUALSHOCK4:
+ Buttons = PlayStationButtons_noIcons;
+ break;
+ default:
+ Buttons = XboxButtons_noIcons;
+ break;
+ }
#endif
assert(Buttons[CPad::GetPad(0)->Mode][action] != nil); // we cannot use these
diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp
index bd72a15f..07b8f996 100644
--- a/src/core/Frontend.cpp
+++ b/src/core/Frontend.cpp
@@ -141,6 +141,10 @@ int8 CMenuManager::m_nDisplayMSAALevel = 0;
int8 CMenuManager::m_PrefsIslandLoading = ISLAND_LOADING_LOW;
#endif
+#ifdef GAMEPAD_MENU
+int8 CMenuManager::m_PrefsControllerType = CONTROLLER_XBOXONE;
+#endif
+
int32 CMenuManager::OS_Language = LANG_ENGLISH;
int8 CMenuManager::m_PrefsUseVibration;
int8 CMenuManager::m_DisplayControllerOnFoot;
@@ -1161,6 +1165,16 @@ CMenuManager::Draw()
CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = BIGTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = BIGTEXT_Y_SCALE));
CFont::SetCentreOn();
break;
+#ifdef FIX_BUGS
+ case MENUPAGE_CONTROLLER_SETTINGS:
+ columnWidth = 50;
+ headerHeight = -50;
+ lineHeight = 20;
+ CFont::SetFontStyle(FONT_LOCALE(FONT_HEADING));
+ CFont::SetScale(MENU_X(MENU_TEXT_SIZE_X = MEDIUMTEXT_X_SCALE), MENU_Y(MENU_TEXT_SIZE_Y = MEDIUMTEXT_Y_SCALE));
+ CFont::SetRightJustifyOff();
+ break;
+#endif
case MENUPAGE_SOUND_SETTINGS:
case MENUPAGE_DISPLAY_SETTINGS:
case MENUPAGE_MULTIPLAYER_CREATE:
@@ -3622,6 +3636,10 @@ CMenuManager::LoadAllTextures()
m_aFrontEndSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
}
+#ifdef GAMEPAD_MENU
+ LoadController(m_PrefsControllerType);
+#endif
+
int menuTxdSlot = CTxdStore::FindTxdSlot("menu");
if (menuTxdSlot == -1)
@@ -3637,7 +3655,13 @@ CMenuManager::LoadAllTextures()
m_aMenuSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
}
#ifdef MENU_MAP
+ static bool menuOptionAdded = false;
for (int i = 0; i < ARRAY_SIZE(MapFilenames); i++) {
+ if (!menuOptionAdded && RwTextureRead(MapFilenames[i][0], MapFilenames[i][1])) {
+ FrontendOptionSetCursor(MENUPAGE_PAUSE_MENU, 2, false);
+ FrontendOptionAddBuiltinAction("FEG_MAP", MENUACTION_CHANGEMENU, MENUPAGE_MAP, SAVESLOT_NONE);
+ menuOptionAdded = true;
+ }
m_aMapSprites[i].SetTexture(MapFilenames[i][0], MapFilenames[i][1]);
m_aMapSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
}
@@ -3653,6 +3677,71 @@ CMenuManager::LoadAllTextures()
CTxdStore::PopCurrentTxd();
}
+#ifdef GAMEPAD_MENU
+const char* controllerTypesPaths[] = {
+ nil,
+ "MODELS/FRONTEND_DS3.TXD",
+ "MODELS/FRONTEND_DS4.TXD",
+ "MODELS/FRONTEND_X360.TXD",
+ "MODELS/FRONTEND_XONE.TXD",
+};
+
+void
+CMenuManager::LoadController(int8 type)
+{
+ switch (type)
+ {
+ case CONTROLLER_DUALSHOCK2:
+ case CONTROLLER_DUALSHOCK3:
+ case CONTROLLER_DUALSHOCK4:
+ CFont::LoadButtons("MODELS/PS3BTNS.TXD");
+ break;
+ default:
+ CFont::LoadButtons("MODELS/X360BTNS.TXD");
+ break;
+ }
+
+ // Unload current textures
+ for (int i = FE_CONTROLLER; i <= FE_ARROWS4; i++)
+ m_aFrontEndSprites[i].Delete();
+
+ // Unload txd
+ int frontend_controller = CTxdStore::FindTxdSlot("frontend_controller");
+ if (frontend_controller != -1)
+ CTxdStore::RemoveTxd(frontend_controller);
+
+ // Find the new txd to load
+ bool bTxdMissing = true;
+ if (controllerTypesPaths[type])
+ if (int file = CFileMgr::OpenFile(controllerTypesPaths[type])) {
+ CFileMgr::CloseFile(file);
+ bTxdMissing = false;
+ }
+
+ int txdSlot = -1;
+
+ if (bTxdMissing)
+ // Not found, fall back to original textures
+ txdSlot = CTxdStore::FindTxdSlot("frontend");
+ else {
+ // Found, load txd
+ txdSlot = frontend_controller;
+ if (txdSlot == -1)
+ txdSlot = CTxdStore::AddTxdSlot("frontend_controller");
+ CTxdStore::LoadTxd(txdSlot, controllerTypesPaths[type]);
+ CTxdStore::AddRef(txdSlot);
+ }
+
+ assert(txdSlot != -1);
+ // Load new textures
+ CTxdStore::SetCurrentTxd(txdSlot);
+ for (int i = FE_CONTROLLER; i <= FE_ARROWS4; i++) {
+ m_aFrontEndSprites[i].SetTexture(FrontendFilenames[i][0], FrontendFilenames[i][1]);
+ m_aFrontEndSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
+ }
+}
+#endif // GAMEPAD_MENU
+
void
CMenuManager::LoadSettings()
{
@@ -5262,6 +5351,17 @@ CMenuManager::ProcessButtonPresses(void)
if (changeValueBy != 0) {
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
+#ifdef FIX_BUGS
+ case MENUACTION_CTRLCONFIG:
+ CPad::GetPad(0)->Mode += changeValueBy;
+ if (CPad::GetPad(0)->Mode > 3)
+ CPad::GetPad(0)->Mode = 0;
+ else if (CPad::GetPad(0)->Mode < 0)
+ CPad::GetPad(0)->Mode = 3;
+ SaveSettings();
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
+ break;
+#endif
case MENUACTION_RADIO:
m_PrefsRadioStation += changeValueBy;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
@@ -5400,13 +5500,18 @@ CMenuManager::ProcessOnOffMenuOptions()
TimeToStopPadShaking = CTimer::GetTimeInMillisecondsPauseMode() + 500;
}
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
+#ifdef FIX_BUGS
+ SaveSettings();
+#endif // !FIX_BUGS
break;
+#ifndef FIX_BUGS
case MENUACTION_CTRLCONFIG:
CPad::GetPad(0)->Mode++;
if (CPad::GetPad(0)->Mode > 3)
CPad::GetPad(0)->Mode = 0;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
break;
+#endif // !FIX_BUGS
case MENUACTION_CTRLDISPLAY:
m_DisplayControllerOnFoot = !m_DisplayControllerOnFoot;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
@@ -5676,6 +5781,12 @@ CMenuManager::UnloadTextures()
int frontend = CTxdStore::FindTxdSlot("frontend");
CTxdStore::RemoveTxd(frontend);
+#ifdef GAMEPAD_MENU
+ int frontend_controllerTxdSlot = CTxdStore::FindTxdSlot("frontend_controller");
+ if (frontend_controllerTxdSlot != -1)
+ CTxdStore::RemoveTxd(frontend_controllerTxdSlot);
+#endif
+
printf("REMOVE menu textures\n");
for (int i = 0; i < ARRAY_SIZE(MenuFilenames); ++i)
m_aMenuSprites[i].Delete();
@@ -5717,6 +5828,301 @@ CMenuManager::WaitForUserCD()
}
}
+#ifdef GAMEPAD_MENU
+void
+CMenuManager::PrintController(void)
+{
+ const float scale = 0.9f;
+ const float CONTROLLER_SIZE_X = 235.2f;
+ const float CONTROLLER_SIZE_Y = 175.2f;
+ const float CONTROLLER_POS_X = (DEFAULT_SCREEN_WIDTH - CONTROLLER_SIZE_X) / 2.0f;
+ const float CONTROLLER_POS_Y = 160.0f;
+
+ float centerX = CONTROLLER_POS_X + CONTROLLER_SIZE_X / 2;
+ float centerY = CONTROLLER_POS_Y + CONTROLLER_SIZE_Y / 2;
+
+#define X(f) ((f)*scale + centerX)
+#define Y(f) ((f)*scale + centerY)
+
+ m_aFrontEndSprites[FE_CONTROLLERSH].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X((CONTROLLER_SIZE_X + 4.8f) * scale), MENU_Y((CONTROLLER_SIZE_Y + 4.8f) * scale), CRGBA(0, 0, 0, 255));
+ m_aFrontEndSprites[FE_CONTROLLER].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, 255));
+ if (m_DisplayControllerOnFoot) {
+ if (CTimer::GetTimeInMillisecondsPauseMode() & 0x400)
+ m_aFrontEndSprites[FE_ARROWS1].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, 255));
+ else
+ m_aFrontEndSprites[FE_ARROWS3].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, 255));
+ } else {
+ if (CTimer::GetTimeInMillisecondsPauseMode() & 0x400)
+ m_aFrontEndSprites[FE_ARROWS2].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, 255));
+ else
+ m_aFrontEndSprites[FE_ARROWS4].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, 255));
+ }
+
+ CFont::SetFontStyle(FONT_LOCALE(FONT_BANK));
+ CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * scale), MENU_Y(SMALLESTTEXT_Y_SCALE * scale)); // X
+
+ // CFont::SetColor(CRGBA(128, 128, 128, FadeIn(255)));
+ CFont::SetDropColor(CRGBA(0, 0, 0, FadeIn(255)));
+ CFont::SetDropShadowPosition(1);
+ CFont::SetColor(CRGBA(255, 255, 255, FadeIn(255)));
+ CFont::SetWrapx(SCREEN_WIDTH);
+
+ float TEXT_L2_X = 50.0f + CONTROLLER_POS_X - centerX, TEXT_L2_Y = -14.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_L1_X = -4.0f + CONTROLLER_POS_X - centerX, TEXT_L1_Y = 25.0f + CONTROLLER_POS_Y - centerY, TEXT_L1_Y_VEH = 3.0f + TEXT_L1_Y;
+ float TEXT_DPAD_X = -4.0f + CONTROLLER_POS_X - centerX, TEXT_DPAD_Y = 65.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_LSTICK_X = -4.0f + CONTROLLER_POS_X - centerX, TEXT_LSTICK_Y = 97.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_SELECT_X = 103.0f + CONTROLLER_POS_X - centerX, TEXT_SELECT_Y = 141.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_START_X = 130.0f + CONTROLLER_POS_X - centerX, TEXT_START_Y = 128.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_R2_X = 184.0F + CONTROLLER_POS_X - centerX, TEXT_R2_Y = -14.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_R1_X = 238.0f + CONTROLLER_POS_X - centerX, TEXT_R1_Y = 25.0f + CONTROLLER_POS_Y - centerY;
+
+ float TEXT_SQUARE_X = 144.0f + CONTROLLER_POS_X - centerX, TEXT_SQUARE_Y = 18.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_TRIANGLE_X = 238.0f + CONTROLLER_POS_X - centerX, TEXT_TRIANGLE_Y = 52.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_CIRCLE_X = 238.0f + CONTROLLER_POS_X - centerX, TEXT_CIRCLE_Y = 65.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_CROSS_X = 238.0f + CONTROLLER_POS_X - centerX, TEXT_CROSS_Y = 78.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_RSTICK_X = 238.0f + CONTROLLER_POS_X - centerX, TEXT_RSTICK_Y = 94.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_R3_X = 238.0f + CONTROLLER_POS_X - centerX, TEXT_R3_Y = 109.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_L3_X = 84.0f + CONTROLLER_POS_X - centerX, TEXT_L3_Y = 162.0f + CONTROLLER_POS_Y - centerY;
+ float TEXT_L2R2_X = 74.0f + CONTROLLER_POS_X - centerX, TEXT_L2R2_Y = -6.0f + CONTROLLER_POS_Y - centerY;
+
+ switch (m_PrefsControllerType)
+ {
+ case CONTROLLER_DUALSHOCK4:
+ TEXT_L1_Y += 7.0f;
+ TEXT_L1_Y_VEH = TEXT_L1_Y;
+ TEXT_R1_Y += 7.0f;
+ TEXT_TRIANGLE_Y -= 1.0f;
+ TEXT_CIRCLE_Y -= 1.0f;
+ TEXT_CROSS_Y -= 1.0f;
+ TEXT_RSTICK_Y -= 4.0f;
+ TEXT_R3_Y -= 4.0f;
+ TEXT_DPAD_Y -= 1.0f;
+ TEXT_LSTICK_Y -= 6.0f;
+ TEXT_L3_X -= 2.0f;
+ break;
+ case CONTROLLER_XBOXONE:
+ TEXT_L2_X -= 2.0f;
+ TEXT_R2_X += 2.0f;
+ TEXT_L1_Y += 15.0f;
+ TEXT_L1_Y_VEH = TEXT_L1_Y;
+ TEXT_R1_Y += 15.0f;
+ TEXT_TRIANGLE_Y += 4.0f;
+ TEXT_CIRCLE_Y += 4.0f;
+ TEXT_CROSS_Y += 4.0f;
+ TEXT_RSTICK_Y += 1.0f;
+ TEXT_R3_Y += 1.0f;
+ TEXT_DPAD_Y += 29.0f;
+ TEXT_LSTICK_Y -= 22.0f;
+ TEXT_L3_X -= 36.0f;
+ TEXT_L2R2_Y += 5.0f;
+ TEXT_SELECT_X += 4.0f;
+ break;
+ case CONTROLLER_XBOX360:
+ TEXT_L2_X += 8.0f;
+ TEXT_R2_X -= 8.0f;
+ TEXT_L1_Y += 15.0f;
+ TEXT_L1_Y_VEH = TEXT_L1_Y;
+ TEXT_R1_Y += 15.0f;
+ TEXT_TRIANGLE_Y += 4.0f;
+ TEXT_CIRCLE_Y += 4.0f;
+ TEXT_CROSS_Y += 4.0f;
+ TEXT_RSTICK_Y += 4.0f;
+ TEXT_R3_Y += 4.0f;
+ TEXT_DPAD_Y += 30.0f;
+ TEXT_LSTICK_Y -= 21.0f;
+ TEXT_L3_X -= 36.0f;
+ TEXT_L2R2_Y += 5.0f;
+ TEXT_SELECT_X += 3.0f;
+ break;
+ };
+
+ if (m_DisplayControllerOnFoot) {
+ switch (CPad::GetPad(0)->Mode) {
+ case 0:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_LOF"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_MOV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_ATT"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
+ break;
+ case 1:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_LOF"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_NA"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_ATT"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
+ break;
+ case 2:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_ENV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_MOV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_LOF"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_RUN"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ATT"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
+ break;
+ case 3:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_TAR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_NA"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_ATT"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_LOF"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
+ break;
+ default:
+ return;
+ }
+ } else {
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2R2_X)), MENU_Y(Y(TEXT_L2R2_Y)), TheText.Get("FEC_LB"));
+ switch (CPad::GetPad(0)->Mode) {
+ case 0:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_RSC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_VES"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_HO3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_HAB"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_BRA"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_EXV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_CAW"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ACC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_TUC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_SM3"));
+ break;
+ case 1:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_HOR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_NA"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_RSC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_HAB"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_BRA"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_EXV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_CAW"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ACC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_TUC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_SM3"));
+ break;
+ case 2:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_EXV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_VES"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_RS3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_HOR"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_BRA"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_HAB"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_CAW"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ACC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_TUC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_SM3"));
+ break;
+ case 3:
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_HAB"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_TUC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_HO3"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_CAW"));
+ CFont::SetRightJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_SMT"));
+ CFont::SetJustifyOn(); // X
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_EXV"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_RSC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_NA"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_ACC"));
+ CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_BRA"));
+ break;
+ default:
+ return;
+ }
+ }
+
+ CFont::SetDropShadowPosition(0); // X
+
+#undef X
+#undef Y
+}
+#else
void
CMenuManager::PrintController(void)
{
@@ -5937,6 +6343,7 @@ CMenuManager::PrintController(void)
CFont::SetDropShadowPosition(0); // X
}
+#endif
#ifdef MENU_MAP
diff --git a/src/core/Frontend.h b/src/core/Frontend.h
index b0100fdc..5c3523ab 100644
--- a/src/core/Frontend.h
+++ b/src/core/Frontend.h
@@ -235,15 +235,15 @@ enum eMenuScreen
MENUPAGE_KEYBOARD_CONTROLS = 55,
MENUPAGE_MOUSE_CONTROLS = 56,
MENUPAGE_MISSION_RETRY = 57,
+#ifdef CUSTOM_FRONTEND_OPTIONS
+
#ifdef MENU_MAP
MENUPAGE_MAP = 58,
#endif
-#ifdef CUSTOM_FRONTEND_OPTIONS
-
#ifdef GRAPHICS_MENU_OPTIONS
MENUPAGE_GRAPHICS_SETTINGS,
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
MENUPAGE_DETECT_JOYSTICK,
#endif
@@ -725,6 +725,19 @@ public:
#define ISLAND_LOADING_ISNT(p)
#endif
+#ifdef GAMEPAD_MENU
+ enum
+ {
+ CONTROLLER_DUALSHOCK2 = 0,
+ CONTROLLER_DUALSHOCK3,
+ CONTROLLER_DUALSHOCK4,
+ CONTROLLER_XBOX360,
+ CONTROLLER_XBOXONE,
+ };
+
+ static int8 m_PrefsControllerType;
+#endif
+
public:
static void BuildStatLine(Const char *text, void *stat, bool itsFloat, void *stat2);
static void CentreMousePointer();
@@ -784,6 +797,9 @@ public:
void PageDownList(bool);
int8 GetPreviousPageOption();
void ProcessList(bool &goBack, bool &optionSelected);
+#ifdef GAMEPAD_MENU
+ void LoadController(int8 type);
+#endif
};
#ifndef IMPROVED_VIDEOMODE
diff --git a/src/core/Game.cpp b/src/core/Game.cpp
index 4fd30b53..2a6afa97 100644
--- a/src/core/Game.cpp
+++ b/src/core/Game.cpp
@@ -414,6 +414,11 @@ bool CGame::Initialise(const char* datFile)
CTxdStore::Create(gameTxdSlot);
CTxdStore::AddRef(gameTxdSlot);
+#ifdef EXTENDED_PIPELINES
+ // for generic fallback
+ CustomPipes::SetTxdFindCallback();
+#endif
+
LoadingScreen("Loading the Game", "Loading particles", nil);
int particleTxdSlot = CTxdStore::AddTxdSlot("particle");
CTxdStore::LoadTxd(particleTxdSlot, "MODELS/PARTICLE.TXD");
@@ -498,10 +503,6 @@ bool CGame::Initialise(const char* datFile)
CFileLoader::LoadLevel("GTA3.DAT");
#endif
-#ifdef EXTENDED_PIPELINES
- // for generic fallback
- CustomPipes::SetTxdFindCallback();
-#endif
CWorld::AddParticles();
CVehicleModelInfo::LoadVehicleColours();
CVehicleModelInfo::LoadEnvironmentMaps();
diff --git a/src/core/MenuScreens.cpp b/src/core/MenuScreens.cpp
index 7c90ea12..3bd9adf4 100644
--- a/src/core/MenuScreens.cpp
+++ b/src/core/MenuScreens.cpp
@@ -394,9 +394,6 @@ CMenuScreen aScreens[MENUPAGES] = {
{ "FET_PAU", 1, MENUPAGE_DISABLED, MENUPAGE_DISABLED, 0, 0,
MENUACTION_RESUME, "FEM_RES", SAVESLOT_NONE, MENUPAGE_NONE,
MENUACTION_CHANGEMENU, "FEN_STA", SAVESLOT_NONE, MENUPAGE_NEW_GAME,
-#ifdef MENU_MAP
- MENUACTION_CHANGEMENU, "FEG_MAP", SAVESLOT_NONE, MENUPAGE_MAP,
-#endif
MENUACTION_CHANGEMENU, "FEP_STA", SAVESLOT_NONE, MENUPAGE_STATS,
MENUACTION_CHANGEMENU, "FEP_BRI", SAVESLOT_NONE, MENUPAGE_BRIEFS,
MENUACTION_CHANGEMENU, "FET_OPT", SAVESLOT_NONE, MENUPAGE_OPTIONS,
@@ -441,14 +438,6 @@ CMenuScreen aScreens[MENUPAGES] = {
},
#endif
-#ifdef MENU_MAP
- // MENUPAGE_MAP
- { "FEG_MAP", 1, MENUPAGE_NONE, MENUPAGE_NONE, 2, 2,
- MENUACTION_UNK110, "", SAVESLOT_NONE, MENUPAGE_NONE, // to prevent cross/enter to go back
- MENUACTION_CHANGEMENU, "FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE,
- },
-#endif
-
// MENUPAGE_UNK
{ "", 0, MENUPAGE_NONE, MENUPAGE_NONE, 0, 0,
diff --git a/src/core/MenuScreensCustom.cpp b/src/core/MenuScreensCustom.cpp
index 3eee8dd2..6e23f76a 100644
--- a/src/core/MenuScreensCustom.cpp
+++ b/src/core/MenuScreensCustom.cpp
@@ -1,4 +1,13 @@
#include "common.h"
+#if defined DETECT_JOYSTICK_MENU && defined XINPUT
+#include <windows.h>
+#include <xinput.h>
+#if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
+#pragma comment( lib, "Xinput9_1_0.lib" )
+#else
+#pragma comment( lib, "Xinput.lib" )
+#endif
+#endif
#include "platform.h"
#include "crossplatform.h"
#include "Renderer.h"
@@ -74,6 +83,12 @@
#define INVERT_PAD_SELECTOR
#endif
+#ifdef GAMEPAD_MENU
+ #define SELECT_CONTROLLER_TYPE MENUACTION_CFO_SELECT, "FEC_TYP", { new CCFOSelect((int8*)&CMenuManager::m_PrefsControllerType, "Controller", "Type", controllerTypes, ARRAY_SIZE(controllerTypes), false, ControllerTypeAfterChange) },
+#else
+ #define SELECT_CONTROLLER_TYPE
+#endif
+
const char *filterNames[] = { "FEM_NON", "FEM_SIM", "FEM_NRM", "FEM_MOB" };
const char *off_on[] = { "FEM_OFF", "FEM_ON" };
@@ -180,38 +195,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() {
}
@@ -291,11 +274,13 @@ void ScreenModeAfterChange(int8 before, int8 after)
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
wchar selectedJoystickUnicode[128];
int cachedButtonNum = -1;
wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
+
+#if defined RW_GL3 && !defined LIBRW_SDL2
int numButtons;
int found = -1;
const char *joyname;
@@ -326,6 +311,37 @@ wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
}
}
if (PSGLOBAL(joy1id) == -1)
+#elif defined XINPUT
+ int found = -1;
+ XINPUT_STATE xstate;
+ memset(&xstate, 0, sizeof(XINPUT_STATE));
+ if (userHovering) {
+ for (int i = 0; i <= 3; i++) {
+ if (XInputGetState(i, &xstate) == ERROR_SUCCESS) {
+ if (xstate.Gamepad.bLeftTrigger || xstate.Gamepad.bRightTrigger) {
+ found = i;
+ break;
+ }
+ for (int j = XINPUT_GAMEPAD_DPAD_UP; j != XINPUT_GAMEPAD_Y << 1; j = (j << 1)) {
+ if (xstate.Gamepad.wButtons & j) {
+ found = i;
+ break;
+ }
+ }
+ if (found != -1)
+ break;
+ }
+ }
+ if (found != -1 && CPad::XInputJoy1 != found) {
+ // We should never leave pads -1, so we can process them when they're connected and kinda support hotplug.
+ CPad::XInputJoy2 = (CPad::XInputJoy1 == -1 ? (found + 1) % 4 : CPad::XInputJoy1);
+ CPad::XInputJoy1 = found;
+ cachedButtonNum = 0; // fake too, because xinput bypass CControllerConfig
+ }
+ }
+ sprintf(gSelectedJoystickName, "%d", CPad::XInputJoy1); // fake, on xinput we only store gamepad ids(thanks MS) so this is a temp variable to be used below
+ if (CPad::XInputJoy1 == -1)
+#endif
AsciiToUnicode("Not found", selectedJoystickUnicode);
else
AsciiToUnicode(gSelectedJoystickName, selectedJoystickUnicode);
@@ -346,6 +362,14 @@ void DetectJoystickGoBack() {
}
#endif
+#ifdef GAMEPAD_MENU
+const char* controllerTypes[] = { "FEC_DS2", "FEC_DS3", "FEC_DS4", "FEC_360", "FEC_ONE" };
+void ControllerTypeAfterChange(int8 before, int8 after)
+{
+ FrontEndMenuManager.LoadController(after);
+}
+#endif
+
CMenuScreenCustom aScreens[MENUPAGES] = {
// MENUPAGE_NONE = 0
{ "", MENUPAGE_DISABLED, MENUPAGE_DISABLED, nil, nil, },
@@ -369,10 +393,16 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
},
// MENUPAGE_CONTROLLER_SETTINGS = 4
+#ifdef GAMEPAD_MENU
+ { "FET_AGS", MENUPAGE_CONTROLLER_PC, MENUPAGE_CONTROLLER_PC, nil, nil,
+#else
{ "FET_CON", MENUPAGE_OPTIONS, MENUPAGE_OPTIONS, nil, nil,
+#endif
MENUACTION_CTRLCONFIG, "FEC_CCF", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS },
MENUACTION_CTRLDISPLAY, "FEC_CDP", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS },
+ INVERT_PAD_SELECTOR
MENUACTION_CTRLVIBRATION, "FEC_VIB", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS },
+ SELECT_CONTROLLER_TYPE
MENUACTION_CHANGEMENU, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE },
},
@@ -432,11 +462,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
MENUACTION_LANG_GER, "FEL_GER", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
MENUACTION_LANG_ITA, "FEL_ITA", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
MENUACTION_LANG_SPA, "FEL_SPA", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
-#ifdef MORE_LANGUAGES
- MENUACTION_CFO_DYNAMIC, "FEL_POL", { new CCFODynamic(nil, nil, nil, nil, LangPolSelect) },
- MENUACTION_CFO_DYNAMIC, "FEL_RUS", { new CCFODynamic(nil, nil, nil, nil, LangRusSelect) },
- MENUACTION_CFO_DYNAMIC, "FEL_JAP", { new CCFODynamic(nil, nil, nil, nil, LangJapSelect) },
-#endif
+ // CustomFrontendOptionsPopulate will add languages here, if files are found
MENUACTION_CHANGEMENU, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE },
},
@@ -643,7 +669,10 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
MENUACTION_CTRLMETHOD, "FET_CME", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC },
#endif
MENUACTION_KEYBOARDCTRLS,"FET_RDK", { nil, SAVESLOT_NONE, MENUPAGE_KEYBOARD_CONTROLS },
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef GAMEPAD_MENU
+ MENUACTION_CHANGEMENU, "FET_AGS", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS },
+#endif
+#ifdef DETECT_JOYSTICK_MENU
MENUACTION_CHANGEMENU, "FEC_JOD", { nil, SAVESLOT_NONE, MENUPAGE_DETECT_JOYSTICK },
#endif
MENUACTION_CHANGEMENU, "FET_AMS", { nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS },
@@ -699,7 +728,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
MENUACTION_LOADRADIO, "FET_AUD", { nil, SAVESLOT_NONE, MENUPAGE_SOUND_SETTINGS },
MENUACTION_CHANGEMENU, "FET_DIS", { nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS },
#ifdef GRAPHICS_MENU_OPTIONS
- MENUACTION_CHANGEMENU, "FET_GRA", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS },
+ MENUACTION_CHANGEMENU, "FET_GFX", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS },
#endif
MENUACTION_CHANGEMENU, "FET_LAN", { nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS },
MENUACTION_PLAYERSETUP, "FET_PSU", { nil, SAVESLOT_NONE, MENUPAGE_SKIN_SELECT },
@@ -768,9 +797,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
{ "FET_PAU", MENUPAGE_DISABLED, MENUPAGE_DISABLED, nil, nil,
MENUACTION_RESUME, "FEM_RES", { nil, SAVESLOT_NONE, MENUPAGE_NONE },
MENUACTION_CHANGEMENU, "FEN_STA", { nil, SAVESLOT_NONE, MENUPAGE_NEW_GAME },
-#ifdef MENU_MAP
- MENUACTION_CHANGEMENU, "FEG_MAP", { nil, SAVESLOT_NONE, MENUPAGE_MAP },
-#endif
+ // CMenuManager::LoadAllTextures will add map here, if MENU_MAP enabled and map textures are found
MENUACTION_CHANGEMENU, "FEP_STA", { nil, SAVESLOT_NONE, MENUPAGE_STATS },
MENUACTION_CHANGEMENU, "FEP_BRI", { nil, SAVESLOT_NONE, MENUPAGE_BRIEFS },
MENUACTION_CHANGEMENU, "FET_OPT", { nil, SAVESLOT_NONE, MENUPAGE_OPTIONS },
@@ -798,7 +825,9 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
{ "FET_MTI", MENUPAGE_CONTROLLER_PC, MENUPAGE_CONTROLLER_PC, nil, nil,
MENUACTION_MOUSESENS, "FEC_MSH", { nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS },
MENUACTION_INVVERT, "FEC_IVV", { nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS },
+#ifndef GAMEPAD_MENU
INVERT_PAD_SELECTOR
+#endif
MENUACTION_MOUSESTEER, "FET_MST", { nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS },
MENUACTION_CHANGEMENU, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE },
},
@@ -826,7 +855,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
#ifdef GRAPHICS_MENU_OPTIONS
// MENUPAGE_GRAPHICS_SETTINGS
- { "FET_GRA", MENUPAGE_OPTIONS, MENUPAGE_OPTIONS,
+ { "FET_GFX", MENUPAGE_OPTIONS, MENUPAGE_OPTIONS,
new CCustomScreenLayout({MENUSPRITE_MAINMENU, 50, 0, 20, FONT_HEADING, FESCREEN_LEFT_ALIGN, true, MEDIUMTEXT_X_SCALE, MEDIUMTEXT_Y_SCALE}), GraphicsGoBack,
MENUACTION_SCREENRES, "FED_RES", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS },
@@ -848,7 +877,7 @@ CMenuScreenCustom aScreens[MENUPAGES] = {
},
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
// MENUPAGE_DETECT_JOYSTICK
{ "FEC_JOD", MENUPAGE_CONTROLLER_PC, MENUPAGE_CONTROLLER_PC,
new CCustomScreenLayout({MENUSPRITE_MAINMENU, 40, 60, 20, FONT_BANK, FESCREEN_LEFT_ALIGN, false, MEDIUMTEXT_X_SCALE, MEDIUMTEXT_Y_SCALE}), DetectJoystickGoBack,
diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp
index 95a107ee..60bb7a76 100644
--- a/src/core/Pad.cpp
+++ b/src/core/Pad.cpp
@@ -1028,8 +1028,14 @@ void CPad::AddToPCCheatString(char c)
}
#ifdef XINPUT
+int CPad::XInputJoy1 = 0;
+int CPad::XInputJoy2 = 1;
void CPad::AffectFromXinput(uint32 pad)
{
+ pad = pad == 0 ? XInputJoy1 : XInputJoy2;
+ if (pad == -1) // LoadINIControllerSettings can set it to -1
+ return;
+
XINPUT_STATE xstate;
memset(&xstate, 0, sizeof(XINPUT_STATE));
if (XInputGetState(pad, &xstate) == ERROR_SUCCESS)
@@ -2336,6 +2342,121 @@ bool CPad::ShiftTargetRightJustDown(void)
return !!(NewState.RightShoulder2 && !OldState.RightShoulder2);
}
+#ifdef FIX_BUGS
+// FIX: fixes from VC for the bug of double switching the controller setup
+bool CPad::GetAnaloguePadUp(void)
+{
+ static int16 oldfStickY = 0;
+
+ int16 leftStickY = CPad::GetPad(0)->GetLeftStickY();
+
+ if ( leftStickY < -15 && oldfStickY >= -5 )
+ {
+ oldfStickY = leftStickY;
+ return true;
+ }
+ else
+ {
+ oldfStickY = leftStickY;
+ return false;
+ }
+}
+
+bool CPad::GetAnaloguePadDown(void)
+{
+ static int16 oldfStickY = 0;
+
+ int16 leftStickY = CPad::GetPad(0)->GetLeftStickY();
+
+ if ( leftStickY > 15 && oldfStickY <= 5 )
+ {
+ oldfStickY = leftStickY;
+ return true;
+ }
+ else
+ {
+ oldfStickY = leftStickY;
+ return false;
+ }
+}
+
+bool CPad::GetAnaloguePadLeft(void)
+{
+ static int16 oldfStickX = 0;
+
+ int16 leftStickX = CPad::GetPad(0)->GetLeftStickX();
+
+ if ( leftStickX < -15 && oldfStickX >= -5 )
+ {
+ oldfStickX = leftStickX;
+ return true;
+ }
+ else
+ {
+ oldfStickX = leftStickX;
+ return false;
+ }
+}
+
+bool CPad::GetAnaloguePadRight(void)
+{
+ static int16 oldfStickX = 0;
+
+ int16 leftStickX = CPad::GetPad(0)->GetLeftStickX();
+
+ if ( leftStickX > 15 && oldfStickX <= 5 )
+ {
+ oldfStickX = leftStickX;
+ return true;
+ }
+ else
+ {
+ oldfStickX = leftStickX;
+ return false;
+ }
+}
+
+bool CPad::GetAnaloguePadLeftJustUp(void)
+{
+ static int16 oldfStickX = 0;
+
+ int16 X = GetPad(0)->GetPedWalkLeftRight();
+
+ if ( X == 0 && oldfStickX < 0 )
+ {
+ oldfStickX = 0;
+
+ return true;
+ }
+ else
+ {
+ oldfStickX = X;
+
+ return false;
+ }
+}
+
+bool CPad::GetAnaloguePadRightJustUp(void)
+{
+ static int16 oldfStickX = 0;
+
+ int16 X = GetPad(0)->GetPedWalkLeftRight();
+
+ if ( X == 0 && oldfStickX > 0 )
+ {
+ oldfStickX = 0;
+
+ return true;
+ }
+ else
+ {
+ oldfStickX = X;
+
+ return false;
+ }
+}
+
+#else
bool CPad::GetAnaloguePadUp(void)
{
static int16 oldfStickY = 0;
@@ -2447,6 +2568,7 @@ bool CPad::GetAnaloguePadRightJustUp(void)
return false;
}
}
+#endif
bool CPad::ForceCameraBehindPlayer(void)
{
diff --git a/src/core/Pad.h b/src/core/Pad.h
index 20a676ef..b37659cd 100644
--- a/src/core/Pad.h
+++ b/src/core/Pad.h
@@ -263,6 +263,8 @@ public:
static int32 *EditCodesForControls(int32 *pRsKeys, int32 nSize);
#ifdef XINPUT
+ static int XInputJoy1;
+ static int XInputJoy2;
void AffectFromXinput(uint32 pad);
#endif
diff --git a/src/core/PlayerInfo.cpp b/src/core/PlayerInfo.cpp
index 1af8f924..bd6feeed 100644
--- a/src/core/PlayerInfo.cpp
+++ b/src/core/PlayerInfo.cpp
@@ -155,8 +155,8 @@ CPlayerInfo::Process(void)
m_pPed->SetPedState(PED_IDLE);
m_pPed->SetMoveState(PEDMOVE_STILL);
CPed::PedSetOutCarCB(0, m_pPed);
- CAnimManager::BlendAnimation(m_pPed->GetClump(), m_pPed->m_animGroup, ANIM_IDLE_STANCE, 100.0f);
- CAnimManager::BlendAnimation(m_pPed->GetClump(), ASSOCGRP_STD, ANIM_FALL_LAND, 100.0f);
+ CAnimManager::BlendAnimation(m_pPed->GetClump(), m_pPed->m_animGroup, ANIM_STD_IDLE, 100.0f);
+ CAnimManager::BlendAnimation(m_pPed->GetClump(), ASSOCGRP_STD, ANIM_STD_FALL_LAND, 100.0f);
m_pPed->SetPosition(sth);
m_pPed->SetMoveState(PEDMOVE_STILL);
m_pPed->m_vecMoveSpeed = veh->m_vecMoveSpeed;
diff --git a/src/core/World.cpp b/src/core/World.cpp
index 0874b680..90d73b09 100644
--- a/src/core/World.cpp
+++ b/src/core/World.cpp
@@ -2123,7 +2123,7 @@ CWorld::TriggerExplosionSectorList(CPtrList &list, const CVector &position, floa
PEDPIECE_TORSO, direction);
if(pPed->m_nPedState != PED_DIE)
pPed->SetFall(2000,
- (AnimationId)(direction + ANIM_KO_SKID_FRONT), 0);
+ (AnimationId)(direction + ANIM_STD_HIGHIMPACT_FRONT), 0);
if(pCreator && pCreator->IsPed()) {
eEventType eventType = EVENT_SHOOT_PED;
if(pPed->m_nPedType == PEDTYPE_COP) eventType = EVENT_SHOOT_COP;
diff --git a/src/core/common.h b/src/core/common.h
index 33d8910d..a8f19158 100644
--- a/src/core/common.h
+++ b/src/core/common.h
@@ -354,7 +354,7 @@ __inline__ void TRACE(char *f, ...) { } // this is re3 only, and so the function
#ifndef MASTER
#define assert(_Expression) (void)( (!!(_Expression)) || (re3_assert(#_Expression, __FILE__, __LINE__, __FUNCTION__), 0) )
#else
-#define assert(_Expression)
+#define assert(_Expression) (_Expression)
#endif
#define ASSERT assert
diff --git a/src/core/config.h b/src/core/config.h
index bb1ca5e3..6619be68 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -183,7 +183,11 @@ enum Config {
// those infamous texts
#define DRAW_GAME_VERSION_TEXT
-#define DRAW_MENU_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
+#endif
+//#define DRAW_MENU_VERSION_TEXT
// Memory allocation and compression
// #define USE_CUSTOM_ALLOCATOR // use CMemoryHeap for allocation. use with care, not finished yet
@@ -263,6 +267,10 @@ enum Config {
#define PS2_ALPHA_TEST // emulate ps2 alpha test
#define IMPROVED_VIDEOMODE // save and load videomode parameters instead of a magic number
#define DISABLE_LOADING_SCREEN // disable the loading screen which vastly improves the loading time
+#ifdef DISABLE_LOADING_SCREEN
+// enable the PC splash
+#undef RANDOMSPLASH
+#endif
#define DISABLE_VSYNC_ON_TEXTURE_CONVERSION // make texture conversion work faster by disabling vsync
#define ANISOTROPIC_FILTERING // set all textures to max anisotropic filtering
//#define USE_TEXTURE_POOL
@@ -287,8 +295,8 @@ enum Config {
#if !defined(RW_GL3) && defined(_WIN32)
#define XINPUT
#endif
-#if !defined(_WIN32) && !defined(__SWITCH__)
-#define DONT_TRUST_RECOGNIZED_JOYSTICKS // Then we'll only rely on GLFW gamepad DB, and expect user to enter Controller->Detect joysticks if his joystick isn't on that list.
+#if defined XINPUT || (defined RW_GL3 && !defined LIBRW_SDL2 && !defined __SWITCH__)
+#define DETECT_JOYSTICK_MENU // Then we'll expect user to enter Controller->Detect joysticks if his joystick isn't detected at the start.
#endif
#define DETECT_PAD_INPUT_SWITCH // Adds automatic switch of pad related stuff between controller and kb/m
#define KANGAROO_CHEAT
@@ -312,7 +320,11 @@ enum Config {
# define PS2_MENU
//# define PS2_MENU_USEALLPAGEICONS
#else
-# define MENU_MAP // VC-like menu map. Make sure you have new menu.txd
+
+# ifdef XINPUT
+# define GAMEPAD_MENU // Add gamepad menu
+# endif
+
# define SCROLLABLE_STATS_PAGE // only draggable by mouse atm
# define TRIANGLE_BACK_BUTTON
//# define CIRCLE_BACK_BUTTON
@@ -321,6 +333,7 @@ enum Config {
# define CUSTOM_FRONTEND_OPTIONS
# ifdef CUSTOM_FRONTEND_OPTIONS
+# define MENU_MAP // VC-like menu map. Won't appear if you don't have our menu.txd
# define GRAPHICS_MENU_OPTIONS // otherwise Display settings will be scrollable
# define NO_ISLAND_LOADING // disable loadscreen between islands via loading all island data at once, consumes more memory and CPU
# define CUTSCENE_BORDERS_SWITCH
@@ -340,6 +353,10 @@ enum Config {
#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
+#if SCRIPT_LOG_FILE_LEVEL == 0
+#undef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
+#endif
+
#ifndef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
#define USE_BASIC_SCRIPT_DEBUG_OUTPUT
#endif
@@ -468,6 +485,7 @@ enum Config {
#undef RADIO_OFF_TEXT
#undef MENU_MAP
+#undef GAMEPAD_MENU
#undef SCROLLABLE_STATS_PAGE
#undef CUSTOM_FRONTEND_OPTIONS
diff --git a/src/core/main.cpp b/src/core/main.cpp
index af0d556a..b47f5d37 100644
--- a/src/core/main.cpp
+++ b/src/core/main.cpp
@@ -1,8 +1,10 @@
#include "common.h"
+#include <time.h>
#include "rpmatfx.h"
#include "rphanim.h"
#include "rpskin.h"
#include "rtbmp.h"
+#include "rtpng.h"
#ifdef ANISOTROPIC_FILTERING
#include "rpanisot.h"
#endif
@@ -70,6 +72,9 @@
#include "custompipes.h"
#include "screendroplets.h"
#include "MemoryHeap.h"
+#ifdef USE_OUR_VERSIONING
+#include "GitSHA1.h"
+#endif
GlobalScene Scene;
@@ -86,6 +91,9 @@ bool gbModelViewer;
#ifdef TIMEBARS
bool gbShowTimebars;
#endif
+#ifdef DRAW_GAME_VERSION_TEXT
+bool gDrawVersionText; // Our addition, we think it was always enabled on !MASTER builds
+#endif
volatile int32 frameCount;
@@ -354,7 +362,11 @@ RwGrabScreen(RwCamera *camera, RwChar *filename)
strcpy(temp, CFileMgr::GetRootDirName());
strcat(temp, filename);
+#ifndef LIBRW
if (RtBMPImageWrite(pImage, &temp[0]) == nil)
+#else
+ if (RtPNGImageWrite(pImage, &temp[0]) == nil)
+#endif
result = false;
RwImageDestroy(pImage);
return result;
@@ -373,6 +385,7 @@ DoRWStuffEndOfFrame(void)
RsCameraShowRaster(Scene.camera);
#ifndef MASTER
char s[48];
+#ifdef THIS_IS_STUPID
if (CPad::GetPad(1)->GetLeftShockJustDown()) {
// try using both controllers for this thing... crazy bastards
if (CPad::GetPad(0)->GetRightStickY() > 0) {
@@ -384,6 +397,12 @@ DoRWStuffEndOfFrame(void)
RwGrabScreen(Scene.camera, s);
}
}
+#else
+ if (CPad::GetPad(1)->GetLeftShockJustDown() || CPad::GetPad(0)->GetFJustDown(11)) {
+ sprintf(s, "screen_%11lld.png", time(nil));
+ RwGrabScreen(Scene.camera, s);
+ }
+#endif
#endif // !MASTER
}
@@ -1075,7 +1094,7 @@ DisplayGameDebugText()
static bool bDisplayRate = false;
#ifndef FINAL
{
- SETTWEAKPATH("GameDebugText");
+ SETTWEAKPATH("Debug");
TWEAKBOOL(bDisplayPosn);
TWEAKBOOL(bDisplayRate);
}
@@ -1089,13 +1108,56 @@ DisplayGameDebugText()
#ifdef DRAW_GAME_VERSION_TEXT
wchar ver[200];
-
+
+ if(gDrawVersionText) // This realtime switch is our thing
+ {
+
+#ifdef USE_OUR_VERSIONING
+ char verA[200];
+ sprintf(verA,
+#if defined _WIN32
+ "Win "
+#elif defined __linux__
+ "Linux "
+#elif defined __APPLE__
+ "Mac OS X "
+#elif defined __FreeBSD__
+ "FreeBSD "
+#else
+ "Posix-compliant "
+#endif
+#if defined __LP64__ || defined _WIN64
+ "64-bit "
+#else
+ "32-bit "
+#endif
+#if defined RW_D3D9
+ "D3D9 "
+#elif defined RWLIBS
+ "D3D8 "
+#elif defined RW_GL3
+ "OpenGL "
+#endif
+#if defined AUDIO_OAL
+ "OAL "
+#elif defined AUDIO_MSS
+ "MSS "
+#endif
+#if defined _DEBUG || defined DEBUG
+ "DEBUG "
+#endif
+ "%.8s",
+ g_GIT_SHA1);
+ AsciiToUnicode(verA, ver);
+ CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.7f));
+#else
AsciiToUnicode(version_name, ver);
+ CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.5f));
+#endif
CFont::SetPropOn();
CFont::SetBackgroundOff();
CFont::SetFontStyle(FONT_BANK);
- CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.5f));
CFont::SetCentreOff();
CFont::SetRightJustifyOff();
CFont::SetWrapx(SCREEN_WIDTH);
@@ -1107,6 +1169,7 @@ DisplayGameDebugText()
#else
CFont::PrintString(10.0f, 10.0f, ver);
#endif
+ }
#endif // #ifdef DRAW_GAME_VERSION_TEXT
FrameSamples++;
diff --git a/src/core/re3.cpp b/src/core/re3.cpp
index 37b2cdf0..e0f9c5c2 100644
--- a/src/core/re3.cpp
+++ b/src/core/re3.cpp
@@ -1,6 +1,14 @@
#include <csignal>
#define WITHWINDOWS
#include "common.h"
+#if defined DETECT_JOYSTICK_MENU && defined XINPUT
+#include <xinput.h>
+#if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
+#pragma comment( lib, "Xinput9_1_0.lib" )
+#else
+#pragma comment( lib, "Xinput.lib" )
+#endif
+#endif
#include "Renderer.h"
#include "Credits.h"
#include "Camera.h"
@@ -34,7 +42,7 @@
#include "MBlur.h"
#include "ControllerConfig.h"
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
#include "crossplatform.h"
#endif
@@ -77,16 +85,49 @@ 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
+ // Most of custom options are done statically in MenuScreensCustom.cpp, we add them here only if they're dependent to extra files
- // These work only if we have neo folder, so they're dynamically added
+ // These work only if we have neo folder
+ int fd;
#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);
@@ -105,6 +146,35 @@ CustomFrontendOptionsPopulate(void)
}
#endif
+ // Add outsourced language translations, if files are found
+#ifdef MORE_LANGUAGES
+ int fd2;
+ FrontendOptionSetCursor(MENUPAGE_LANGUAGE_SETTINGS, 5, false);
+ if (fd = CFileMgr::OpenFile("text/polish.gxt","r")) {
+ if (fd2 = CFileMgr::OpenFile("models/fonts_p.txd","r")) {
+ FrontendOptionAddDynamic("FEL_POL", nil, nil, LangPolSelect, nil, nil);
+ CFileMgr::CloseFile(fd2);
+ }
+ CFileMgr::CloseFile(fd);
+ }
+
+ if (fd = CFileMgr::OpenFile("text/russian.gxt","r")) {
+ if (fd2 = CFileMgr::OpenFile("models/fonts_r.txd","r")) {
+ FrontendOptionAddDynamic("FEL_RUS", nil, nil, LangRusSelect, nil, nil);
+ CFileMgr::CloseFile(fd2);
+ }
+ CFileMgr::CloseFile(fd);
+ }
+
+ if (fd = CFileMgr::OpenFile("text/japanese.gxt","r")) {
+ if (fd2 = CFileMgr::OpenFile("models/fonts_j.txd","r")) {
+ FrontendOptionAddDynamic("FEL_JAP", nil, nil, LangJapSelect, nil, nil);
+ CFileMgr::CloseFile(fd2);
+ }
+ CFileMgr::CloseFile(fd);
+ }
+#endif
+
}
#endif
@@ -244,9 +314,41 @@ const char *iniKeyboardButtons[] = {"ESC","F1","F2","F3","F4","F5","F6","F7","F8
void LoadINIControllerSettings()
{
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
+#ifdef XINPUT
+ int storedJoy1 = -1;
+ if (ReadIniIfExists("Controller", "JoystickName", &storedJoy1)) {
+ CPad::XInputJoy1 = -1;
+ CPad::XInputJoy2 = -1;
+ XINPUT_STATE xstate;
+ memset(&xstate, 0, sizeof(XINPUT_STATE));
+
+ // Firstly confirm & set joy 1
+ if (XInputGetState(storedJoy1, &xstate) == ERROR_SUCCESS) {
+ CPad::XInputJoy1 = storedJoy1;
+ }
+
+ for (int i = 0; i <= 3; i++) {
+ if (XInputGetState(i, &xstate) == ERROR_SUCCESS) {
+ if (CPad::XInputJoy1 == -1)
+ CPad::XInputJoy1 = i;
+ else if (CPad::XInputJoy2 == -1 && i != CPad::XInputJoy1)
+ CPad::XInputJoy2 = i;
+ }
+ }
+
+ // There is no plug event on XInput, so let's leave XInputJoy1/2 as 0/1 respectively, and hotplug will be possible.
+ if (CPad::XInputJoy1 == -1) {
+ CPad::XInputJoy1 = 0;
+ CPad::XInputJoy2 = 1;
+ } else if (CPad::XInputJoy2 == -1) {
+ CPad::XInputJoy2 = (CPad::XInputJoy1 + 1) % 4;
+ }
+ }
+#else
ReadIniIfExists("Controller", "JoystickName", gSelectedJoystickName, 128);
#endif
+#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;
@@ -343,9 +445,13 @@ void SaveINIControllerSettings()
StoreIni("Bindings", iniControllerActions[i], value, 128);
}
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
+#ifdef XINPUT
+ StoreIni("Controller", "JoystickName", CPad::XInputJoy1);
+#else
StoreIni("Controller", "JoystickName", gSelectedJoystickName, 128);
#endif
+#endif
StoreIni("Controller", "PadButtonsInited", ControlsManager.ms_padButtonsInited);
cfg.write_file("re3.ini");
}
@@ -369,6 +475,7 @@ bool LoadINISettings()
ReadIniIfExists("Controller", "HorizantalMouseSens", &TheCamera.m_fMouseAccelHorzntl);
ReadIniIfExists("Controller", "InvertMouseVertically", &MousePointerStateHelper.bInvertVertically);
ReadIniIfExists("Controller", "DisableMouseSteering", &CVehicle::m_bDisableMouseSteering);
+ ReadIniIfExists("Controller", "Vibration", &FrontEndMenuManager.m_PrefsUseVibration);
ReadIniIfExists("Audio", "SfxVolume", &FrontEndMenuManager.m_PrefsSfxVolume);
ReadIniIfExists("Audio", "MusicVolume", &FrontEndMenuManager.m_PrefsMusicVolume);
ReadIniIfExists("Audio", "Radio", &FrontEndMenuManager.m_PrefsRadioStation);
@@ -409,6 +516,10 @@ bool LoadINISettings()
#ifdef FIX_SPRITES
ReadIniIfExists("Draw", "FixSprites", &CDraw::ms_bFixSprites);
#endif
+#ifdef DRAW_GAME_VERSION_TEXT
+ extern bool gDrawVersionText;
+ ReadIniIfExists("General", "DrawVersionText", &gDrawVersionText);
+#endif
#ifdef CUSTOM_FRONTEND_OPTIONS
bool migrate = cfg.category_size("FrontendOptions") != 0;
@@ -455,6 +566,7 @@ void SaveINISettings()
StoreIni("Controller", "HorizantalMouseSens", TheCamera.m_fMouseAccelHorzntl);
StoreIni("Controller", "InvertMouseVertically", MousePointerStateHelper.bInvertVertically);
StoreIni("Controller", "DisableMouseSteering", CVehicle::m_bDisableMouseSteering);
+ StoreIni("Controller", "Vibration", FrontEndMenuManager.m_PrefsUseVibration);
StoreIni("Audio", "SfxVolume", FrontEndMenuManager.m_PrefsSfxVolume);
StoreIni("Audio", "MusicVolume", FrontEndMenuManager.m_PrefsMusicVolume);
StoreIni("Audio", "Radio", FrontEndMenuManager.m_PrefsRadioStation);
@@ -495,6 +607,10 @@ void SaveINISettings()
#ifdef FIX_SPRITES
StoreIni("Draw", "FixSprites", CDraw::ms_bFixSprites);
#endif
+#ifdef DRAW_GAME_VERSION_TEXT
+ extern bool gDrawVersionText;
+ StoreIni("General", "DrawVersionText", gDrawVersionText);
+#endif
#ifdef CUSTOM_FRONTEND_OPTIONS
for (int i = 0; i < MENUPAGES; i++) {
for (int j = 0; j < NUM_MENUROWS; j++) {
@@ -617,18 +733,6 @@ SwitchCarCollision(void)
FindPlayerVehicle()->bUsesCollision = !FindPlayerVehicle()->bUsesCollision;
}
-static int engineStatus;
-static void
-SetEngineStatus(void)
-{
- CVehicle *veh = FindPlayerVehicle();
- if(veh == nil)
- return;
- if(!veh->IsCar())
- return;
- ((CAutomobile*)veh)->Damage.SetEngineStatus(engineStatus);
-}
-
static void
ToggleComedy(void)
{
@@ -690,7 +794,7 @@ void CTweakVars::Add(CTweakVar *var)
TweakVarsListSize = 0;
}
if(TweakVarsListSize > 63)
- TweakVarsList = (CTweakVar**) realloc(TweakVarsList, (TweakVarsListSize + 1) * sizeof(*var));
+ TweakVarsList = (CTweakVar**) realloc(TweakVarsList, (TweakVarsListSize + 1) * sizeof(CTweakVar*));
TweakVarsList[TweakVarsListSize++] = var;
// TweakVarsList.push_back(var);
@@ -811,12 +915,22 @@ DebugMenuPopulate(void)
DebugMenuAddCmd("Spawn", "Spawn Predator", [](){ SpawnCar(MI_PREDATOR); });
DebugMenuAddVarBool8("Render", "Draw hud", &CHud::m_Wants_To_Draw_Hud, nil);
+
+#ifdef PROPER_SCALING
+ DebugMenuAddVarBool8("Render", "Proper Scaling", &CDraw::ms_bProperScaling, nil);
+#endif
+#ifdef FIX_RADAR
+ DebugMenuAddVarBool8("Render", "Fix Radar", &CDraw::ms_bFixRadar, nil);
+#endif
+#ifdef FIX_SPRITES
+ DebugMenuAddVarBool8("Render", "Fix Sprites", &CDraw::ms_bFixSprites, nil);
+#endif
DebugMenuAddVarBool8("Render", "PS2 Alpha test Emu", &gPS2alphaTest, nil);
DebugMenuAddVarBool8("Render", "Frame limiter", &FrontEndMenuManager.m_PrefsFrameLimiter, nil);
DebugMenuAddVarBool8("Render", "VSynch", &FrontEndMenuManager.m_PrefsVsync, nil);
DebugMenuAddVar("Render", "Max FPS", &RsGlobal.maxFPS, nil, 1, 1, 1000, nil);
#ifdef NEW_RENDERER
- DebugMenuAddVarBool8("Render", "new renderer", &gbNewRenderer, nil);
+ DebugMenuAddVarBool8("Render", "New Renderer", &gbNewRenderer, nil);
extern bool gbRenderRoads;
extern bool gbRenderEverythingBarRoads;
//extern bool gbRenderFadingInUnderwaterEntities;
@@ -827,16 +941,16 @@ extern bool gbRenderVehicles;
extern bool gbRenderWorld0;
extern bool gbRenderWorld1;
extern bool gbRenderWorld2;
- DebugMenuAddVarBool8("Render", "gbRenderRoads", &gbRenderRoads, nil);
- DebugMenuAddVarBool8("Render", "gbRenderEverythingBarRoads", &gbRenderEverythingBarRoads, nil);
-// DebugMenuAddVarBool8("Render", "gbRenderFadingInUnderwaterEntities", &gbRenderFadingInUnderwaterEntities, nil);
- DebugMenuAddVarBool8("Render", "gbRenderFadingInEntities", &gbRenderFadingInEntities, nil);
- DebugMenuAddVarBool8("Render", "gbRenderWater", &gbRenderWater, nil);
- DebugMenuAddVarBool8("Render", "gbRenderBoats", &gbRenderBoats, nil);
- DebugMenuAddVarBool8("Render", "gbRenderVehicles", &gbRenderVehicles, nil);
- DebugMenuAddVarBool8("Render", "gbRenderWorld0", &gbRenderWorld0, nil);
- DebugMenuAddVarBool8("Render", "gbRenderWorld1", &gbRenderWorld1, nil);
- DebugMenuAddVarBool8("Render", "gbRenderWorld2", &gbRenderWorld2, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderRoads", &gbRenderRoads, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderEverythingBarRoads", &gbRenderEverythingBarRoads, nil);
+// DebugMenuAddVarBool8("Debug Render", "gbRenderFadingInUnderwaterEntities", &gbRenderFadingInUnderwaterEntities, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderFadingInEntities", &gbRenderFadingInEntities, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderWater", &gbRenderWater, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderBoats", &gbRenderBoats, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderVehicles", &gbRenderVehicles, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderWorld0", &gbRenderWorld0, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderWorld1", &gbRenderWorld1, nil);
+ DebugMenuAddVarBool8("Debug Render", "gbRenderWorld2", &gbRenderWorld2, nil);
#endif
#ifdef EXTENDED_COLOURFILTER
@@ -860,32 +974,29 @@ extern bool gbRenderWorld2;
DebugMenuAddVarBool8("Render", "Neo Road Gloss enable", &CustomPipes::GlossEnable, nil);
DebugMenuAddVar("Render", "Mult", &CustomPipes::GlossMult, nil, 0.1f, 0, 1.0f);
#endif
- DebugMenuAddVarBool8("Render", "Show Ped Paths", &gbShowPedPaths, nil);
- DebugMenuAddVarBool8("Render", "Show Car Paths", &gbShowCarPaths, nil);
- DebugMenuAddVarBool8("Render", "Show Car Path Links", &gbShowCarPathsLinks, nil);
- DebugMenuAddVarBool8("Render", "Show Ped Road Groups", &gbShowPedRoadGroups, nil);
- DebugMenuAddVarBool8("Render", "Show Car Road Groups", &gbShowCarRoadGroups, nil);
- DebugMenuAddVarBool8("Render", "Show Collision Lines", &gbShowCollisionLines, nil);
- DebugMenuAddVarBool8("Render", "Show Collision Polys", &gbShowCollisionPolys, nil);
- DebugMenuAddVarBool8("Render", "Don't render Buildings", &gbDontRenderBuildings, nil);
- DebugMenuAddVarBool8("Render", "Don't render Big Buildings", &gbDontRenderBigBuildings, nil);
- DebugMenuAddVarBool8("Render", "Don't render Peds", &gbDontRenderPeds, nil);
- DebugMenuAddVarBool8("Render", "Don't render Vehicles", &gbDontRenderVehicles, nil);
- DebugMenuAddVarBool8("Render", "Don't render Objects", &gbDontRenderObjects, nil);
- DebugMenuAddVarBool8("Render", "Don't Render Water", &gbDontRenderWater, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Ped Paths", &gbShowPedPaths, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Car Paths", &gbShowCarPaths, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Car Path Links", &gbShowCarPathsLinks, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Ped Road Groups", &gbShowPedRoadGroups, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Car Road Groups", &gbShowCarRoadGroups, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Collision Lines", &gbShowCollisionLines, nil);
+ DebugMenuAddVarBool8("Debug Render", "Show Collision Polys", &gbShowCollisionPolys, nil);
+ DebugMenuAddVarBool8("Debug Render", "Don't render Buildings", &gbDontRenderBuildings, nil);
+ DebugMenuAddVarBool8("Debug Render", "Don't render Big Buildings", &gbDontRenderBigBuildings, nil);
+ DebugMenuAddVarBool8("Debug Render", "Don't render Peds", &gbDontRenderPeds, nil);
+ DebugMenuAddVarBool8("Debug Render", "Don't render Vehicles", &gbDontRenderVehicles, nil);
+ DebugMenuAddVarBool8("Debug Render", "Don't render Objects", &gbDontRenderObjects, nil);
+ DebugMenuAddVarBool8("Debug Render", "Don't Render Water", &gbDontRenderWater, nil);
+
-#ifdef PROPER_SCALING
- DebugMenuAddVarBool8("Draw", "Proper Scaling", &CDraw::ms_bProperScaling, nil);
-#endif
-#ifdef FIX_RADAR
- DebugMenuAddVarBool8("Draw", "Fix Radar", &CDraw::ms_bFixRadar, nil);
+#ifdef DRAW_GAME_VERSION_TEXT
+ extern bool gDrawVersionText;
+ DebugMenuAddVarBool8("Debug", "Version Text", &gDrawVersionText, nil);
#endif
-#ifdef FIX_SPRITES
- DebugMenuAddVarBool8("Draw", "Fix Sprites", &CDraw::ms_bFixSprites, nil);
+ DebugMenuAddVarBool8("Debug", "Show DebugStuffInRelease", &gbDebugStuffInRelease, nil);
+#ifdef TIMEBARS
+ DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil);
#endif
-
-
-
#ifndef FINAL
DebugMenuAddVarBool8("Debug", "Print Memory Usage", &gbPrintMemoryUsage, nil);
#ifdef USE_CUSTOM_ALLOCATOR
@@ -899,30 +1010,19 @@ extern bool gbRenderWorld2;
#ifdef GTA_SCENE_EDIT
DebugMenuAddVarBool8("Debug", "Edit on", &CSceneEdit::m_bEditOn, nil);
#endif
+ //DebugMenuAddCmd("Debug", "Start Credits", CCredits::Start);
+ //DebugMenuAddCmd("Debug", "Stop Credits", CCredits::Stop);
+
#ifdef MENU_MAP
- DebugMenuAddCmd("Debug", "Teleport to map waypoint", TeleportToWaypoint);
+ DebugMenuAddCmd("Game", "Teleport to map waypoint", TeleportToWaypoint);
#endif
- DebugMenuAddCmd("Debug", "Switch car collision", SwitchCarCollision);
- DebugMenuAddVar("Debug", "Engine Status", &engineStatus, nil, 1, 0, 226, nil);
- DebugMenuAddCmd("Debug", "Set Engine Status", SetEngineStatus);
- DebugMenuAddCmd("Debug", "Fix Car", FixCar);
- DebugMenuAddCmd("Debug", "Toggle Comedy Controls", ToggleComedy);
- DebugMenuAddCmd("Debug", "Place Car on Road", PlaceOnRoad);
-
- DebugMenuAddVarBool8("Debug", "Catalina Heli On", &CHeli::CatalinaHeliOn, nil);
- DebugMenuAddCmd("Debug", "Catalina Fly By", CHeli::StartCatalinaFlyBy);
- DebugMenuAddCmd("Debug", "Catalina Take Off", CHeli::CatalinaTakeOff);
- DebugMenuAddCmd("Debug", "Catalina Fly Away", CHeli::MakeCatalinaHeliFlyAway);
- DebugMenuAddVarBool8("Debug", "Script Heli On", &CHeli::ScriptHeliOn, nil);
+ DebugMenuAddCmd("Game", "Fix Car", FixCar);
+ DebugMenuAddCmd("Game", "Place Car on Road", PlaceOnRoad);
+ DebugMenuAddCmd("Game", "Switch car collision", SwitchCarCollision);
+ DebugMenuAddCmd("Game", "Toggle Comedy Controls", ToggleComedy);
- DebugMenuAddVarBool8("Debug", "Toggle popping heads on headshot", &CPed::bPopHeadsOnHeadshot, nil);
- DebugMenuAddCmd("Debug", "Start Credits", CCredits::Start);
- DebugMenuAddCmd("Debug", "Stop Credits", CCredits::Stop);
+ DebugMenuAddVarBool8("Game", "Toggle popping heads on headshot", &CPed::bPopHeadsOnHeadshot, nil);
- DebugMenuAddVarBool8("Debug", "Show DebugStuffInRelease", &gbDebugStuffInRelease, nil);
-#ifdef TIMEBARS
- DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil);
-#endif
#ifdef MISSION_SWITCHER
DebugMenuEntry *missionEntry;
static const char* missions[] = {
@@ -942,9 +1042,9 @@ extern bool gbRenderWorld2;
"Uzi Money", "Toyminator", "Rigged To Blow", "Bullion Run", "Rumble", "The Exchange"
};
- missionEntry = DebugMenuAddVar("Debug", "Select mission", &nextMissionToSwitch, nil, 1, 0, ARRAY_SIZE(missions) - 1, missions);
+ missionEntry = DebugMenuAddVar("Game", "Select mission", &nextMissionToSwitch, nil, 1, 0, ARRAY_SIZE(missions) - 1, missions);
DebugMenuEntrySetWrap(missionEntry, true);
- DebugMenuAddCmd("Debug", "Start selected mission ", SwitchToMission);
+ DebugMenuAddCmd("Game", "Start selected mission ", SwitchToMission);
#endif
extern bool PrintDebugCode;
@@ -956,9 +1056,9 @@ extern bool gbRenderWorld2;
DebugMenuAddVarBool8("Cam", "Print Debug Code", &PrintDebugCode, nil);
DebugMenuAddVar("Cam", "Cam Mode", &DebugCamMode, nil, 1, 0, CCam::MODE_EDITOR, nil);
DebugMenuAddCmd("Cam", "Normal", []() { DebugCamMode = 0; });
- DebugMenuAddCmd("Cam", "Follow Ped With Bind", []() { DebugCamMode = CCam::MODE_FOLLOW_PED_WITH_BIND; });
- DebugMenuAddCmd("Cam", "Reaction", []() { DebugCamMode = CCam::MODE_REACTION; });
- DebugMenuAddCmd("Cam", "Chris", []() { DebugCamMode = CCam::MODE_CHRIS; });
+ // DebugMenuAddCmd("Cam", "Follow Ped With Bind", []() { DebugCamMode = CCam::MODE_FOLLOW_PED_WITH_BIND; });
+ // DebugMenuAddCmd("Cam", "Reaction", []() { DebugCamMode = CCam::MODE_REACTION; });
+ // DebugMenuAddCmd("Cam", "Chris", []() { DebugCamMode = CCam::MODE_CHRIS; });
DebugMenuAddCmd("Cam", "Reset Statics", ResetCamStatics);
CTweakVars::AddDBG("Debug");
diff --git a/src/extras/GitSHA1.cpp.in b/src/extras/GitSHA1.cpp.in
new file mode 100644
index 00000000..6168dc79
--- /dev/null
+++ b/src/extras/GitSHA1.cpp.in
@@ -0,0 +1,2 @@
+#define GIT_SHA1 "@GIT_SHA1@"
+const char* g_GIT_SHA1 = GIT_SHA1;
diff --git a/src/extras/GitSHA1.h b/src/extras/GitSHA1.h
new file mode 100644
index 00000000..359bfaff
--- /dev/null
+++ b/src/extras/GitSHA1.h
@@ -0,0 +1 @@
+extern const char* g_GIT_SHA1; \ No newline at end of file
diff --git a/src/extras/custompipes_d3d9.cpp b/src/extras/custompipes_d3d9.cpp
index 4242c630..dad42b33 100644
--- a/src/extras/custompipes_d3d9.cpp
+++ b/src/extras/custompipes_d3d9.cpp
@@ -89,6 +89,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
}
int vsBits;
+ rw::uint32 flags = atomic->geometry->flags;
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
setIndices(header->indexBuffer);
setVertexDeclaration(header->vertexDeclaration);
@@ -120,7 +121,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
reflProps[3] = m->surfaceProps.specular == 0.0f ? 0.0f : VehicleSpecularity;
d3ddevice->SetVertexShaderConstantF(VSLOC_reflProps, reflProps, 1);
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(m->texture)
d3d::setTexture(0, m->texture);
@@ -149,11 +150,11 @@ CreateVehiclePipe(void)
fp = ReadTweakValueTable(fp, SpecColor);
}
-#include "shaders/neoVehicle_VS.inc"
+#include "shaders/obj/neoVehicle_VS.inc"
neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
assert(neoVehicle_VS);
-#include "shaders/neoVehicle_PS.inc"
+#include "shaders/obj/neoVehicle_PS.inc"
neoVehicle_PS = rw::d3d::createPixelShader(neoVehicle_PS_cso);
assert(neoVehicle_PS);
@@ -259,11 +260,11 @@ CreateWorldPipe(void)
else
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
-#include "shaders/default_UV2_VS.inc"
+#include "shaders/obj/default_UV2_VS.inc"
neoWorld_VS = rw::d3d::createVertexShader(default_UV2_VS_cso);
assert(neoWorld_VS);
-#include "shaders/neoWorldIII_PS.inc"
+#include "shaders/obj/neoWorldIII_PS.inc"
neoWorldIII_PS = rw::d3d::createPixelShader(neoWorldIII_PS_cso);
assert(neoWorldIII_PS);
@@ -346,11 +347,11 @@ glossRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
void
CreateGlossPipe(void)
{
-#include "shaders/neoGloss_VS.inc"
+#include "shaders/obj/neoGloss_VS.inc"
neoGloss_VS = rw::d3d::createVertexShader(neoGloss_VS_cso);
assert(neoGloss_VS);
-#include "shaders/neoGloss_PS.inc"
+#include "shaders/obj/neoGloss_PS.inc"
neoGloss_PS = rw::d3d::createPixelShader(neoGloss_PS_cso);
assert(neoGloss_PS);
@@ -420,6 +421,7 @@ rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
}
int vsBits;
+ rw::uint32 flags = atomic->geometry->flags;
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
setIndices(header->indexBuffer);
setVertexDeclaration(header->vertexDeclaration);
@@ -437,7 +439,7 @@ rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(m->texture){
d3d::setTexture(0, m->texture);
@@ -463,7 +465,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
}
int vsBits;
-
+ rw::uint32 flags = atomic->geometry->flags;
setStreamSource(0, (IDirect3DVertexBuffer9*)header->vertexStream[0].vertexBuffer,
0, header->vertexStream[0].stride);
setIndices((IDirect3DIndexBuffer9*)header->indexBuffer);
@@ -484,7 +486,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(inst->material->texture){
d3d::setTexture(0, m->texture);
@@ -512,11 +514,11 @@ CreateRimLightPipes(void)
}
-#include "shaders/neoRim_VS.inc"
+#include "shaders/obj/neoRim_VS.inc"
neoRim_VS = rw::d3d::createVertexShader(neoRim_VS_cso);
assert(neoRim_VS);
-#include "shaders/neoRimSkin_VS.inc"
+#include "shaders/obj/neoRimSkin_VS.inc"
neoRimSkin_VS = rw::d3d::createVertexShader(neoRimSkin_VS_cso);
assert(neoRimSkin_VS);
@@ -610,6 +612,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
assert(building->instHeader->platform == PLATFORM_D3D9);
building->fadeAlpha = 255;
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
+ rw::uint32 flags = atomic->geometry->flags;
bool setupDone = false;
bool defer = false;
@@ -639,7 +642,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
setupDone = true;
}
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
if(m->texture){
d3d::setTexture(0, m->texture);
@@ -702,7 +705,7 @@ RenderBlendPass(int pass)
rw::RGBA color = m->color;
color.alpha = (color.alpha * building->fadeAlpha)/255;
- setMaterial(color, m->surfaceProps);
+ setMaterial(color, m->surfaceProps); // always modulate here
if(m->texture){
d3d::setTexture(0, m->texture);
diff --git a/src/extras/custompipes_gl.cpp b/src/extras/custompipes_gl.cpp
index caf9eb27..f1cbfc38 100644
--- a/src/extras/custompipes_gl.cpp
+++ b/src/extras/custompipes_gl.cpp
@@ -87,6 +87,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
Material *m;
+ rw::uint32 flags = atomic->geometry->flags;
setWorldMatrix(atomic->getFrame()->getLTM());
lightingCB(atomic);
@@ -119,7 +120,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
while(n--){
m = inst->material;
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -159,8 +160,8 @@ CreateVehiclePipe(void)
{
-#include "shaders/neoVehicle_fs_gl.inc"
-#include "shaders/neoVehicle_vs_gl.inc"
+#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 *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil };
neoVehicleShader = Shader::create(vs, fs);
@@ -270,8 +271,8 @@ CreateWorldPipe(void)
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
{
-#include "shaders/neoWorldIII_fs_gl.inc"
-#include "shaders/default_UV2_gl.inc"
+#include "shaders/obj/neoWorldIII_frag.inc"
+#include "shaders/obj/default_UV2_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, neoWorldIII_frag_src, nil };
neoWorldShader = Shader::create(vs, fs);
@@ -378,8 +379,8 @@ CreateGlossPipe(void)
using namespace rw::gl3;
{
-#include "shaders/neoGloss_fs_gl.inc"
-#include "shaders/neoGloss_vs_gl.inc"
+#include "shaders/obj/neoGloss_frag.inc"
+#include "shaders/obj/neoGloss_vert.inc"
const char *vs[] = { shaderDecl, header_vert_src, neoGloss_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, neoGloss_frag_src, nil };
neoGlossShader = Shader::create(vs, fs);
@@ -448,6 +449,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
Material *m;
+ rw::uint32 flags = atomic->geometry->flags;
setWorldMatrix(atomic->getFrame()->getLTM());
lightingCB(atomic);
@@ -471,7 +473,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
while(n--){
m = inst->material;
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -498,6 +500,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
Material *m;
+ rw::uint32 flags = atomic->geometry->flags;
setWorldMatrix(atomic->getFrame()->getLTM());
lightingCB(atomic);
@@ -519,7 +522,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
while(n--){
m = inst->material;
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -550,8 +553,8 @@ CreateRimLightPipes(void)
}
{
-#include "shaders/simple_fs_gl.inc"
-#include "shaders/neoRimSkin_gl.inc"
+#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 *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
neoRimSkinShader = Shader::create(vs, fs);
@@ -559,8 +562,8 @@ CreateRimLightPipes(void)
}
{
-#include "shaders/simple_fs_gl.inc"
-#include "shaders/neoRim_gl.inc"
+#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 *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
neoRimShader = Shader::create(vs, fs);
@@ -664,6 +667,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
assert(building->instHeader->platform == PLATFORM_GL3);
building->fadeAlpha = 255;
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
+ rw::uint32 flags = atomic->geometry->flags;
WorldLights lights;
lights.numAmbients = 1;
@@ -703,7 +707,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
setupDone = true;
}
- setMaterial(m->color, m->surfaceProps);
+ setMaterial(flags, m->color, m->surfaceProps);
setTexture(0, m->texture);
@@ -772,7 +776,7 @@ RenderBlendPass(int pass)
rw::RGBA color = m->color;
color.alpha = (color.alpha * building->fadeAlpha)/255;
- setMaterial(color, m->surfaceProps);
+ setMaterial(color, m->surfaceProps); // always modulate here
setTexture(0, m->texture);
diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp
index 51b91060..b94d245d 100644
--- a/src/extras/postfx.cpp
+++ b/src/extras/postfx.cpp
@@ -141,16 +141,16 @@ CPostFX::Open(RwCamera *cam)
#ifdef RW_D3D9
-#include "shaders/colourfilterIII_PS.inc"
+#include "shaders/obj/colourfilterIII_PS.inc"
colourfilterIII_PS = rw::d3d::createPixelShader(colourfilterIII_PS_cso);
-#include "shaders/contrastPS.inc"
+#include "shaders/obj/contrastPS.inc"
contrast_PS = rw::d3d::createPixelShader(contrastPS_cso);
#endif
#ifdef RW_OPENGL
using namespace rw::gl3;
{
-#include "shaders/im2d_gl.inc"
-#include "shaders/colourfilterIII_fs_gl.inc"
+#include "shaders/obj/im2d_vert.inc"
+#include "shaders/obj/colourfilterIII_frag.inc"
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, colourfilterIII_frag_src, nil };
colourFilterIII = Shader::create(vs, fs);
@@ -158,8 +158,8 @@ CPostFX::Open(RwCamera *cam)
}
{
-#include "shaders/im2d_gl.inc"
-#include "shaders/contrast_fs_gl.inc"
+#include "shaders/obj/im2d_vert.inc"
+#include "shaders/obj/contrast_frag.inc"
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil };
contrast = Shader::create(vs, fs);
diff --git a/src/extras/screendroplets.cpp b/src/extras/screendroplets.cpp
index 74c44da0..1412141e 100644
--- a/src/extras/screendroplets.cpp
+++ b/src/extras/screendroplets.cpp
@@ -112,14 +112,14 @@ ScreenDroplets::InitDraw(void)
openim2d_uv2();
#ifdef RW_D3D9
-#include "shaders/screenDroplet_PS.inc"
+#include "shaders/obj/screenDroplet_PS.inc"
screenDroplet_PS = rw::d3d::createPixelShader(screenDroplet_PS_cso);
#endif
#ifdef RW_GL3
using namespace rw::gl3;
{
-#include "shaders/im2d_UV2_gl.inc"
-#include "shaders/screenDroplet_fs_gl.inc"
+#include "shaders/obj/im2d_UV2_vert.inc"
+#include "shaders/obj/screenDroplet_frag.inc"
const char *vs[] = { shaderDecl, header_vert_src, im2d_UV2_vert_src, nil };
const char *fs[] = { shaderDecl, header_frag_src, screenDroplet_frag_src, nil };
screenDroplet = Shader::create(vs, fs);
diff --git a/src/extras/shaders/Makefile b/src/extras/shaders/Makefile
deleted file mode 100644
index 51e009d6..00000000
--- a/src/extras/shaders/Makefile
+++ /dev/null
@@ -1,79 +0,0 @@
-all: im2d_gl.inc simple_fs_gl.inc default_UV2_gl.inc \
- colourfilterIII_fs_gl.inc contrast_fs_gl.inc \
- neoRim_gl.inc neoRimSkin_gl.inc \
- neoWorldIII_fs_gl.inc neoGloss_vs_gl.inc neoGloss_fs_gl.inc \
- neoVehicle_vs_gl.inc neoVehicle_fs_gl.inc \
- im2d_UV2_gl.inc screenDroplet_fs_gl.inc
-
-im2d_gl.inc: im2d.vert
- (echo 'const char *im2d_vert_src =';\
- sed 's/..*/"&\\n"/' im2d.vert;\
- echo ';') >im2d_gl.inc
-
-simple_fs_gl.inc: simple.frag
- (echo 'const char *simple_frag_src =';\
- sed 's/..*/"&\\n"/' simple.frag;\
- echo ';') >simple_fs_gl.inc
-
-default_UV2_gl.inc: default_UV2.vert
- (echo 'const char *default_UV2_vert_src =';\
- sed 's/..*/"&\\n"/' default_UV2.vert;\
- echo ';') >default_UV2_gl.inc
-
-
-
-colourfilterIII_fs_gl.inc: colourfilterIII.frag
- (echo 'const char *colourfilterIII_frag_src =';\
- sed 's/..*/"&\\n"/' colourfilterIII.frag;\
- echo ';') >colourfilterIII_fs_gl.inc
-
-contrast_fs_gl.inc: contrast.frag
- (echo 'const char *contrast_frag_src =';\
- sed 's/..*/"&\\n"/' contrast.frag;\
- echo ';') >contrast_fs_gl.inc
-
-
-neoRim_gl.inc: neoRim.vert
- (echo 'const char *neoRim_vert_src =';\
- sed 's/..*/"&\\n"/' neoRim.vert;\
- echo ';') >neoRim_gl.inc
-
-neoRimSkin_gl.inc: neoRimSkin.vert
- (echo 'const char *neoRimSkin_vert_src =';\
- sed 's/..*/"&\\n"/' neoRimSkin.vert;\
- echo ';') >neoRimSkin_gl.inc
-
-neoWorldIII_fs_gl.inc: neoWorldIII.frag
- (echo 'const char *neoWorldIII_frag_src =';\
- sed 's/..*/"&\\n"/' neoWorldIII.frag;\
- echo ';') >neoWorldIII_fs_gl.inc
-
-neoGloss_fs_gl.inc: neoGloss.frag
- (echo 'const char *neoGloss_frag_src =';\
- sed 's/..*/"&\\n"/' neoGloss.frag;\
- echo ';') >neoGloss_fs_gl.inc
-
-neoGloss_vs_gl.inc: neoGloss.vert
- (echo 'const char *neoGloss_vert_src =';\
- sed 's/..*/"&\\n"/' neoGloss.vert;\
- echo ';') >neoGloss_vs_gl.inc
-
-neoVehicle_vs_gl.inc: neoVehicle.vert
- (echo 'const char *neoVehicle_vert_src =';\
- sed 's/..*/"&\\n"/' neoVehicle.vert;\
- echo ';') >neoVehicle_vs_gl.inc
-
-neoVehicle_fs_gl.inc: neoVehicle.frag
- (echo 'const char *neoVehicle_frag_src =';\
- sed 's/..*/"&\\n"/' neoVehicle.frag;\
- echo ';') >neoVehicle_fs_gl.inc
-
-im2d_UV2_gl.inc: im2d_UV2.vert
- (echo 'const char *im2d_UV2_vert_src =';\
- sed 's/..*/"&\\n"/' im2d_UV2.vert;\
- echo ';') >im2d_UV2_gl.inc
-
-screenDroplet_fs_gl.inc: screenDroplet.frag
- (echo 'const char *screenDroplet_frag_src =';\
- sed 's/..*/"&\\n"/' screenDroplet.frag;\
- echo ';') >screenDroplet_fs_gl.inc
diff --git a/src/extras/shaders/colourfilterIII.frag b/src/extras/shaders/colourfilterIII.frag
index b41cb94a..95e5d052 100644
--- a/src/extras/shaders/colourfilterIII.frag
+++ b/src/extras/shaders/colourfilterIII.frag
@@ -17,7 +17,7 @@ main(void)
}
vec4 color;
color.rgb = prev.rgb;
- color.a = 1.0f;
+ color.a = 1.0;
FRAGCOLOR(color);
}
diff --git a/src/extras/shaders/colourfilterIII_PS.hlsl b/src/extras/shaders/colourfilterIII_PS.hlsl
index 27f099ef..3d893c3c 100644
--- a/src/extras/shaders/colourfilterIII_PS.hlsl
+++ b/src/extras/shaders/colourfilterIII_PS.hlsl
@@ -10,6 +10,6 @@ float4 main(in float2 texcoord : TEXCOORD0) : COLOR0
float4 tmp = dst*(1-a) + prev*blurcol*a;
prev = saturate(tmp);
}
- prev.a = 1.0f;
+ prev.a = 1.0;
return prev;
}
diff --git a/src/extras/shaders/contrast.frag b/src/extras/shaders/contrast.frag
index 1b93f6fe..2d394f66 100644
--- a/src/extras/shaders/contrast.frag
+++ b/src/extras/shaders/contrast.frag
@@ -12,7 +12,7 @@ main(void)
vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
vec4 color;
color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;
- color.a = 1.0f;
+ color.a = 1.0;
FRAGCOLOR(color);
}
diff --git a/src/extras/shaders/make_glsl.sh b/src/extras/shaders/make_glsl.sh
new file mode 100644
index 00000000..0af98961
--- /dev/null
+++ b/src/extras/shaders/make_glsl.sh
@@ -0,0 +1,9 @@
+#!sh
+for i in *.vert; do
+ echo $i
+ ./makeinc_glsl.sh $i
+done
+for i in *.frag; do
+ echo $i
+ ./makeinc_glsl.sh $i
+done
diff --git a/src/extras/shaders/make.cmd b/src/extras/shaders/make_hlsl.cmd
index 8404ac6c..dee95283 100644
--- a/src/extras/shaders/make.cmd
+++ b/src/extras/shaders/make_hlsl.cmd
@@ -1,3 +1,3 @@
@echo off
-for %%f in (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo %%~nf.cso %%f
-for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo %%~nf.cso %%f
+for %%f in (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo obj\%%~nf.cso %%f
+for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo obj\%%~nf.cso %%f
diff --git a/src/extras/shaders/makeinc_glsl.sh b/src/extras/shaders/makeinc_glsl.sh
new file mode 100644
index 00000000..2bc6a387
--- /dev/null
+++ b/src/extras/shaders/makeinc_glsl.sh
@@ -0,0 +1,6 @@
+#!sh
+ext=${1##*.}
+name=${1%.*}
+(echo "const char *${name}_${ext}_src =";\
+sed 's/..*/"&\\n"/' $1;\
+echo ';') > obj/${name}_${ext}.inc
diff --git a/src/extras/shaders/makeinc.sh b/src/extras/shaders/makeinc_hlsl.sh
index a649af33..a5b12867 100644
--- a/src/extras/shaders/makeinc.sh
+++ b/src/extras/shaders/makeinc_hlsl.sh
@@ -1,4 +1,5 @@
#!sh
+cd obj
for i in *cso; do
(echo -n 'static '
xxd -i $i | grep -v '_len = ') > ${i%cso}inc
diff --git a/src/extras/shaders/neoVehicle.vert b/src/extras/shaders/neoVehicle.vert
index f0224ddb..6985a689 100644
--- a/src/extras/shaders/neoVehicle.vert
+++ b/src/extras/shaders/neoVehicle.vert
@@ -42,7 +42,7 @@ main(void)
v_tex1 = uv2.xy*0.5 + 0.5;
float b = 1.0 - clamp(dot(viewVec, Normal), 0.0, 1.0);
v_reflcolor = vec4(0.0, 0.0, 0.0, 1.0);
- v_reflcolor.a = mix(b*b*b*b*b, 1.0f, fresnel)*shininess;
+ v_reflcolor.a = mix(b*b*b*b*b, 1.0, fresnel)*shininess;
for(int i = 0; i < 5; i++)
v_reflcolor.rgb += DoDirLightSpec(u_specDir[i].xyz, u_specColor[i].rgb, Normal, viewVec, u_specDir[i].w)*specularity*lightStrength;
diff --git a/src/extras/shaders/neoVehicle_VS.hlsl b/src/extras/shaders/neoVehicle_VS.hlsl
index de75e745..fb730092 100644
--- a/src/extras/shaders/neoVehicle_VS.hlsl
+++ b/src/extras/shaders/neoVehicle_VS.hlsl
@@ -52,7 +52,7 @@ VS_out main(in VS_in input)
output.TexCoord1 = uv2.xy*0.5 + 0.5;
float b = 1.0 - saturate(dot(viewVec, Normal));
output.ReflColor = float4(0.0, 0.0, 0.0, 1.0);
- output.ReflColor.a = lerp(b*b*b*b*b, 1.0f, fresnel)*shininess;
+ output.ReflColor.a = lerp(b*b*b*b*b, 1.0, fresnel)*shininess;
//Light mainLight = lights[0];
for(i = 0; i < 5; i++)
diff --git a/src/extras/shaders/colourfilterIII_PS.cso b/src/extras/shaders/obj/colourfilterIII_PS.cso
index cc41bcec..cc41bcec 100644
--- a/src/extras/shaders/colourfilterIII_PS.cso
+++ b/src/extras/shaders/obj/colourfilterIII_PS.cso
Binary files differ
diff --git a/src/extras/shaders/colourfilterIII_PS.inc b/src/extras/shaders/obj/colourfilterIII_PS.inc
index db49de6c..db49de6c 100644
--- a/src/extras/shaders/colourfilterIII_PS.inc
+++ b/src/extras/shaders/obj/colourfilterIII_PS.inc
diff --git a/src/extras/shaders/colourfilterIII_fs_gl.inc b/src/extras/shaders/obj/colourfilterIII_frag.inc
index 6fd1935b..05f92785 100644
--- a/src/extras/shaders/colourfilterIII_fs_gl.inc
+++ b/src/extras/shaders/obj/colourfilterIII_frag.inc
@@ -18,7 +18,7 @@ const char *colourfilterIII_frag_src =
" }\n"
" vec4 color;\n"
" color.rgb = prev.rgb;\n"
-" color.a = 1.0f;\n"
+" color.a = 1.0;\n"
" FRAGCOLOR(color);\n"
"}\n"
diff --git a/src/extras/shaders/contrastPS.cso b/src/extras/shaders/obj/contrastPS.cso
index a87c48d7..a87c48d7 100644
--- a/src/extras/shaders/contrastPS.cso
+++ b/src/extras/shaders/obj/contrastPS.cso
Binary files differ
diff --git a/src/extras/shaders/contrastPS.inc b/src/extras/shaders/obj/contrastPS.inc
index 5386792f..5386792f 100644
--- a/src/extras/shaders/contrastPS.inc
+++ b/src/extras/shaders/obj/contrastPS.inc
diff --git a/src/extras/shaders/contrast_fs_gl.inc b/src/extras/shaders/obj/contrast_frag.inc
index 97f78194..a1ad479f 100644
--- a/src/extras/shaders/contrast_fs_gl.inc
+++ b/src/extras/shaders/obj/contrast_frag.inc
@@ -13,7 +13,7 @@ const char *contrast_frag_src =
" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
" vec4 color;\n"
" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n"
-" color.a = 1.0f;\n"
+" color.a = 1.0;\n"
" FRAGCOLOR(color);\n"
"}\n"
diff --git a/src/extras/shaders/default_UV2_VS.cso b/src/extras/shaders/obj/default_UV2_VS.cso
index 5a48c663..5a48c663 100644
--- a/src/extras/shaders/default_UV2_VS.cso
+++ b/src/extras/shaders/obj/default_UV2_VS.cso
Binary files differ
diff --git a/src/extras/shaders/default_UV2_VS.inc b/src/extras/shaders/obj/default_UV2_VS.inc
index de832107..de832107 100644
--- a/src/extras/shaders/default_UV2_VS.inc
+++ b/src/extras/shaders/obj/default_UV2_VS.inc
diff --git a/src/extras/shaders/default_UV2_gl.inc b/src/extras/shaders/obj/default_UV2_vert.inc
index 450f3d9a..450f3d9a 100644
--- a/src/extras/shaders/default_UV2_gl.inc
+++ b/src/extras/shaders/obj/default_UV2_vert.inc
diff --git a/src/extras/shaders/im2d_UV2_gl.inc b/src/extras/shaders/obj/im2d_UV2_vert.inc
index 3feb2bc1..3feb2bc1 100644
--- a/src/extras/shaders/im2d_UV2_gl.inc
+++ b/src/extras/shaders/obj/im2d_UV2_vert.inc
diff --git a/src/extras/shaders/im2d_gl.inc b/src/extras/shaders/obj/im2d_vert.inc
index d11f5d33..d11f5d33 100644
--- a/src/extras/shaders/im2d_gl.inc
+++ b/src/extras/shaders/obj/im2d_vert.inc
diff --git a/src/extras/shaders/neoGloss_PS.cso b/src/extras/shaders/obj/neoGloss_PS.cso
index aa88e450..aa88e450 100644
--- a/src/extras/shaders/neoGloss_PS.cso
+++ b/src/extras/shaders/obj/neoGloss_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoGloss_PS.inc b/src/extras/shaders/obj/neoGloss_PS.inc
index 97e5641d..97e5641d 100644
--- a/src/extras/shaders/neoGloss_PS.inc
+++ b/src/extras/shaders/obj/neoGloss_PS.inc
diff --git a/src/extras/shaders/neoGloss_VS.cso b/src/extras/shaders/obj/neoGloss_VS.cso
index 9635b8b7..9635b8b7 100644
--- a/src/extras/shaders/neoGloss_VS.cso
+++ b/src/extras/shaders/obj/neoGloss_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoGloss_VS.inc b/src/extras/shaders/obj/neoGloss_VS.inc
index 1ec03761..1ec03761 100644
--- a/src/extras/shaders/neoGloss_VS.inc
+++ b/src/extras/shaders/obj/neoGloss_VS.inc
diff --git a/src/extras/shaders/neoGloss_fs_gl.inc b/src/extras/shaders/obj/neoGloss_frag.inc
index 67e9724e..67e9724e 100644
--- a/src/extras/shaders/neoGloss_fs_gl.inc
+++ b/src/extras/shaders/obj/neoGloss_frag.inc
diff --git a/src/extras/shaders/neoGloss_vs_gl.inc b/src/extras/shaders/obj/neoGloss_vert.inc
index dffb423f..dffb423f 100644
--- a/src/extras/shaders/neoGloss_vs_gl.inc
+++ b/src/extras/shaders/obj/neoGloss_vert.inc
diff --git a/src/extras/shaders/neoRimSkin_VS.cso b/src/extras/shaders/obj/neoRimSkin_VS.cso
index 8410504e..8410504e 100644
--- a/src/extras/shaders/neoRimSkin_VS.cso
+++ b/src/extras/shaders/obj/neoRimSkin_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoRimSkin_VS.inc b/src/extras/shaders/obj/neoRimSkin_VS.inc
index ac182956..ac182956 100644
--- a/src/extras/shaders/neoRimSkin_VS.inc
+++ b/src/extras/shaders/obj/neoRimSkin_VS.inc
diff --git a/src/extras/shaders/neoRimSkin_gl.inc b/src/extras/shaders/obj/neoRimSkin_vert.inc
index 01b739b2..01b739b2 100644
--- a/src/extras/shaders/neoRimSkin_gl.inc
+++ b/src/extras/shaders/obj/neoRimSkin_vert.inc
diff --git a/src/extras/shaders/neoRim_VS.cso b/src/extras/shaders/obj/neoRim_VS.cso
index 4af538b1..4af538b1 100644
--- a/src/extras/shaders/neoRim_VS.cso
+++ b/src/extras/shaders/obj/neoRim_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoRim_VS.inc b/src/extras/shaders/obj/neoRim_VS.inc
index 03b044a6..03b044a6 100644
--- a/src/extras/shaders/neoRim_VS.inc
+++ b/src/extras/shaders/obj/neoRim_VS.inc
diff --git a/src/extras/shaders/neoRim_gl.inc b/src/extras/shaders/obj/neoRim_vert.inc
index 7cd199d0..7cd199d0 100644
--- a/src/extras/shaders/neoRim_gl.inc
+++ b/src/extras/shaders/obj/neoRim_vert.inc
diff --git a/src/extras/shaders/neoVehicle_PS.cso b/src/extras/shaders/obj/neoVehicle_PS.cso
index ded01bfb..ded01bfb 100644
--- a/src/extras/shaders/neoVehicle_PS.cso
+++ b/src/extras/shaders/obj/neoVehicle_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoVehicle_PS.inc b/src/extras/shaders/obj/neoVehicle_PS.inc
index 8b77cec2..8b77cec2 100644
--- a/src/extras/shaders/neoVehicle_PS.inc
+++ b/src/extras/shaders/obj/neoVehicle_PS.inc
diff --git a/src/extras/shaders/neoVehicle_VS.cso b/src/extras/shaders/obj/neoVehicle_VS.cso
index 6ea47987..6ea47987 100644
--- a/src/extras/shaders/neoVehicle_VS.cso
+++ b/src/extras/shaders/obj/neoVehicle_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoVehicle_VS.inc b/src/extras/shaders/obj/neoVehicle_VS.inc
index 37c5858d..37c5858d 100644
--- a/src/extras/shaders/neoVehicle_VS.inc
+++ b/src/extras/shaders/obj/neoVehicle_VS.inc
diff --git a/src/extras/shaders/neoVehicle_fs_gl.inc b/src/extras/shaders/obj/neoVehicle_frag.inc
index 20537440..20537440 100644
--- a/src/extras/shaders/neoVehicle_fs_gl.inc
+++ b/src/extras/shaders/obj/neoVehicle_frag.inc
diff --git a/src/extras/shaders/neoVehicle_vs_gl.inc b/src/extras/shaders/obj/neoVehicle_vert.inc
index b7b42622..ebd0ea12 100644
--- a/src/extras/shaders/neoVehicle_vs_gl.inc
+++ b/src/extras/shaders/obj/neoVehicle_vert.inc
@@ -43,7 +43,7 @@ const char *neoVehicle_vert_src =
" v_tex1 = uv2.xy*0.5 + 0.5;\n"
" float b = 1.0 - clamp(dot(viewVec, Normal), 0.0, 1.0);\n"
" v_reflcolor = vec4(0.0, 0.0, 0.0, 1.0);\n"
-" v_reflcolor.a = mix(b*b*b*b*b, 1.0f, fresnel)*shininess;\n"
+" v_reflcolor.a = mix(b*b*b*b*b, 1.0, fresnel)*shininess;\n"
" for(int i = 0; i < 5; i++)\n"
" v_reflcolor.rgb += DoDirLightSpec(u_specDir[i].xyz, u_specColor[i].rgb, Normal, viewVec, u_specDir[i].w)*specularity*lightStrength;\n"
diff --git a/src/extras/shaders/neoWorldIII_PS.cso b/src/extras/shaders/obj/neoWorldIII_PS.cso
index 817888ef..817888ef 100644
--- a/src/extras/shaders/neoWorldIII_PS.cso
+++ b/src/extras/shaders/obj/neoWorldIII_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoWorldIII_PS.inc b/src/extras/shaders/obj/neoWorldIII_PS.inc
index a4631efb..a4631efb 100644
--- a/src/extras/shaders/neoWorldIII_PS.inc
+++ b/src/extras/shaders/obj/neoWorldIII_PS.inc
diff --git a/src/extras/shaders/neoWorldIII_fs_gl.inc b/src/extras/shaders/obj/neoWorldIII_frag.inc
index afd75f57..afd75f57 100644
--- a/src/extras/shaders/neoWorldIII_fs_gl.inc
+++ b/src/extras/shaders/obj/neoWorldIII_frag.inc
diff --git a/src/extras/shaders/screenDroplet_PS.cso b/src/extras/shaders/obj/screenDroplet_PS.cso
index 5508096b..5508096b 100644
--- a/src/extras/shaders/screenDroplet_PS.cso
+++ b/src/extras/shaders/obj/screenDroplet_PS.cso
Binary files differ
diff --git a/src/extras/shaders/screenDroplet_PS.inc b/src/extras/shaders/obj/screenDroplet_PS.inc
index c2055188..c2055188 100644
--- a/src/extras/shaders/screenDroplet_PS.inc
+++ b/src/extras/shaders/obj/screenDroplet_PS.inc
diff --git a/src/extras/shaders/screenDroplet_fs_gl.inc b/src/extras/shaders/obj/screenDroplet_frag.inc
index dd393b02..dd393b02 100644
--- a/src/extras/shaders/screenDroplet_fs_gl.inc
+++ b/src/extras/shaders/obj/screenDroplet_frag.inc
diff --git a/src/extras/shaders/simple_fs_gl.inc b/src/extras/shaders/obj/simple_frag.inc
index 614d79a0..614d79a0 100644
--- a/src/extras/shaders/simple_fs_gl.inc
+++ b/src/extras/shaders/obj/simple_frag.inc
diff --git a/src/fakerw/fake.cpp b/src/fakerw/fake.cpp
index 366dcf3e..1d4c881f 100644
--- a/src/fakerw/fake.cpp
+++ b/src/fakerw/fake.cpp
@@ -945,6 +945,43 @@ RtBMPImageRead(const RwChar *imageName)
#endif
}
+
+RwImage *
+RtPNGImageWrite(RwImage *image, const RwChar *imageName)
+{
+#ifndef _WIN32
+ char *r = casepath(imageName);
+ if (r) {
+ rw::writePNG(image, r);
+ free(r);
+ } else {
+ rw::writePNG(image, imageName);
+ }
+
+#else
+ rw::writePNG(image, imageName);
+#endif
+ return image;
+}
+RwImage *
+RtPNGImageRead(const RwChar *imageName)
+{
+#ifndef _WIN32
+ RwImage *image;
+ char *r = casepath(imageName);
+ if (r) {
+ image = rw::readPNG(r);
+ free(r);
+ } else {
+ image = rw::readPNG(imageName);
+ }
+ return image;
+
+#else
+ return rw::readPNG(imageName);
+#endif
+}
+
#include "rtquat.h"
RtQuat *RtQuatRotate(RtQuat * quat, const RwV3d * axis, RwReal angle, RwOpCombineType combineOp) { return (RtQuat*)((rw::Quat*)quat)->rotate(axis, angle/180.0f*3.14159f, (CombineOp)combineOp); }
diff --git a/src/fakerw/rtpng.h b/src/fakerw/rtpng.h
new file mode 100644
index 00000000..80f29020
--- /dev/null
+++ b/src/fakerw/rtpng.h
@@ -0,0 +1,4 @@
+#pragma once
+
+RwImage *RtPNGImageWrite(RwImage * image, const RwChar * imageName);
+RwImage *RtPNGImageRead(const RwChar * imageName);
diff --git a/src/peds/CopPed.cpp b/src/peds/CopPed.cpp
index 29612ccf..44e3baf0 100644
--- a/src/peds/CopPed.cpp
+++ b/src/peds/CopPed.cpp
@@ -239,9 +239,9 @@ CCopPed::ArrestPlayer(void)
if (suspect && (suspect->m_nPedState == PED_ARRESTED || suspect->DyingOrDead() || suspect->EnteringCar())) {
- CAnimBlendAssociation *arrestAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ARREST_GUN);
+ CAnimBlendAssociation *arrestAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_ARREST);
if (!arrestAssoc || arrestAssoc->blendDelta < 0.0f)
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_ARREST_GUN, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_ARREST, 4.0f);
CVector suspMidPos;
suspect->m_pedIK.GetComponentPosition(suspMidPos, PED_MID);
@@ -401,7 +401,7 @@ CCopPed::CopAI(void)
if (m_nPedState != PED_ATTACK && m_nPedState != PED_FIGHT && !m_bZoneDisabled) {
CVector targetDist = playerOrHisVeh->GetPosition() - GetPosition();
if (m_fDistanceToTarget > 30.0f) {
- CAnimBlendAssociation* crouchShootAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RBLOCK_CSHOOT);
+ CAnimBlendAssociation* crouchShootAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RBLOCK_SHOOT);
if (crouchShootAssoc)
crouchShootAssoc->blendDelta = -1000.0f;
diff --git a/src/peds/EmergencyPed.cpp b/src/peds/EmergencyPed.cpp
index 9f87c12b..d8c8309e 100644
--- a/src/peds/EmergencyPed.cpp
+++ b/src/peds/EmergencyPed.cpp
@@ -317,7 +317,7 @@ CEmergencyPed::MedicAI(void)
m_nEmergencyPedState = EMERGENCY_PED_STAND_STILL;
} else {
m_nEmergencyPedState = EMERGENCY_PED_FACE_TO_PATIENT;
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CPR, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_MEDIC_CPR, 4.0f);
bIsDucking = true;
}
SetLookTimer(2000);
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 87e77ef3..28a4e989 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -329,7 +329,7 @@ CPed::SetModelIndex(uint32 mi)
SetPedStats(modelInfo->m_pedStatType);
m_headingRate = m_pedStats->m_headingChangeRate;
m_animGroup = (AssocGroupId) modelInfo->m_animGroup;
- CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE);
+ CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE);
(*RPANIMBLENDCLUMPDATA(m_rwObject))->velocity2d = &m_vecAnimMoveDelta;
@@ -496,30 +496,30 @@ CPed::SetMoveAnim(void)
CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_BLOCK);
if (!animAssoc) {
- CAnimBlendAssociation *fightIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
+ CAnimBlendAssociation *fightIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FIGHT_IDLE);
animAssoc = fightIdleAssoc;
if (fightIdleAssoc && m_nPedState == PED_FIGHT)
return;
if (fightIdleAssoc) {
- CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
+ CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
if (!idleAssoc || idleAssoc->blendDelta <= 0.0f) {
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_IDLE_STANCE, 8.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_IDLE, 8.0f);
}
}
}
if (!animAssoc) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_TIRED);
if (animAssoc)
if (m_nWaitState == WAITSTATE_STUCK || m_nWaitState == WAITSTATE_FINISH_FLEE)
return;
if (animAssoc) {
- CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
+ CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
if (!idleAssoc || idleAssoc->blendDelta <= 0.0f) {
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_IDLE_STANCE, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_IDLE, 4.0f);
}
}
}
@@ -541,20 +541,20 @@ CPed::SetMoveAnim(void)
switch (m_nMoveState) {
case PEDMOVE_STILL:
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_IDLE_STANCE, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_IDLE, 4.0f);
break;
case PEDMOVE_WALK:
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_WALK, 1.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_WALK, 1.0f);
break;
case PEDMOVE_RUN:
if (m_nPedState == PED_FLEE_ENTITY) {
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_RUN, 3.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_RUN, 3.0f);
} else {
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_RUN, 1.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_RUN, 1.0f);
}
break;
case PEDMOVE_SPRINT:
- animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_SPRINT, 1.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), animGroupToUse, ANIM_STD_RUNFAST, 1.0f);
break;
default:
break;
@@ -562,12 +562,12 @@ CPed::SetMoveAnim(void)
if (animAssoc) {
if (m_leader) {
- CAnimBlendAssociation *walkAssoc = RpAnimBlendClumpGetAssociation(m_leader->GetClump(), ANIM_WALK);
+ CAnimBlendAssociation *walkAssoc = RpAnimBlendClumpGetAssociation(m_leader->GetClump(), ANIM_STD_WALK);
if (!walkAssoc)
- walkAssoc = RpAnimBlendClumpGetAssociation(m_leader->GetClump(), ANIM_RUN);
+ walkAssoc = RpAnimBlendClumpGetAssociation(m_leader->GetClump(), ANIM_STD_RUN);
if (!walkAssoc)
- walkAssoc = RpAnimBlendClumpGetAssociation(m_leader->GetClump(), ANIM_SPRINT);
+ walkAssoc = RpAnimBlendClumpGetAssociation(m_leader->GetClump(), ANIM_STD_RUNFAST);
if (walkAssoc) {
animAssoc->speed = walkAssoc->speed;
@@ -920,7 +920,7 @@ FinishFuckUCB(CAnimBlendAssociation *animAssoc, void *arg)
{
CPed *ped = (CPed*)arg;
- if (animAssoc->animId == ANIM_FUCKU && ped->GetWeapon()->m_eWeaponType == WEAPONTYPE_UNARMED)
+ if (animAssoc->animId == ANIM_STD_PARTIAL_FUCKU && ped->GetWeapon()->m_eWeaponType == WEAPONTYPE_UNARMED)
ped->RemoveWeaponModel(0);
}
@@ -939,7 +939,7 @@ CPed::MoveHeadToLook(void)
if (!bShakeFist && GetWeapon()->m_eWeaponType == WEAPONTYPE_UNARMED) {
- CAnimBlendAssociation *fuckUAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FUCKU);
+ CAnimBlendAssociation *fuckUAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_PARTIAL_FUCKU);
if (fuckUAssoc) {
float animTime = fuckUAssoc->currentTime;
@@ -984,7 +984,7 @@ CPed::MoveHeadToLook(void)
bool notRocketLauncher = false;
bool notTwoHanded = false;
- AnimationId animToPlay = NUM_ANIMS;
+ AnimationId animToPlay = ANIM_STD_NUM;
if (!GetWeapon()->IsType2Handed())
notTwoHanded = true;
@@ -1002,24 +1002,24 @@ CPed::MoveHeadToLook(void)
#ifndef FIX_BUGS
if (m_pedStats->m_temper < 47)
#endif
- animToPlay = ANIM_FIGHT_PPUNCH;
+ animToPlay = ANIM_STD_PARTIAL_PUNCH;
} else {
- animToPlay = ANIM_FUCKU;
+ animToPlay = ANIM_STD_PARTIAL_FUCKU;
}
} else if (m_pedStats->m_temper > 49 || m_pLookTarget->GetModelIndex() == MI_POLICE) {
- animToPlay = ANIM_FUCKU;
+ animToPlay = ANIM_STD_PARTIAL_FUCKU;
}
} else if (notRocketLauncher && (CGeneral::GetRandomNumber() & 1)) {
- animToPlay = ANIM_FUCKU;
+ animToPlay = ANIM_STD_PARTIAL_FUCKU;
}
- if (animToPlay != NUM_ANIMS) {
+ if (animToPlay != ANIM_STD_NUM) {
CAnimBlendAssociation *newAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, animToPlay, 4.0f);
if (newAssoc) {
newAssoc->flags |= ASSOC_FADEOUTWHENDONE;
newAssoc->flags |= ASSOC_DELETEFADEDOUT;
- if (newAssoc->animId == ANIM_FUCKU)
+ if (newAssoc->animId == ANIM_STD_PARTIAL_FUCKU)
newAssoc->SetDeleteCallback(FinishFuckUCB, this);
}
}
@@ -1365,8 +1365,8 @@ CPed::CalculateNewVelocity(void)
m_moved = CVector2D(-Sin(walkAngle), Cos(walkAngle)) * pedSpeed;
}
- CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
- CAnimBlendAssociation *fightAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
+ CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
+ CAnimBlendAssociation *fightAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FIGHT_IDLE);
#ifdef VC_PED_PORTS
if ((!idleAssoc || idleAssoc->blendAmount < 0.5f) && !fightAssoc && !bIsDucking) {
#else
@@ -1809,7 +1809,7 @@ CPed::ProcessControl(void)
++m_panicCounter;
if (m_fHealth <= 1.0f && m_nPedState <= PED_STATES_NO_AI && !bIsInTheAir && !bIsLanding)
- SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
bCollidedWithMyVehicle = false;
@@ -1900,9 +1900,9 @@ CPed::ProcessControl(void)
} else {
if (m_nPedType != PEDTYPE_COP && neededTurn < DEGTORAD(15.0f) && m_nWaitState == WAITSTATE_FALSE) {
if ((m_nStoredMoveState == PEDMOVE_RUN || m_nStoredMoveState == PEDMOVE_SPRINT) && m_vecDamageNormal.z < 0.3f) {
- CAnimBlendAssociation *runAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN);
+ CAnimBlendAssociation *runAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUN);
if (!runAssoc)
- runAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SPRINT);
+ runAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNFAST);
if (runAssoc && runAssoc->blendAmount > 0.9f && runAssoc->IsRunning()) {
SetWaitState(WAITSTATE_HITWALL, nil);
@@ -2189,7 +2189,7 @@ CPed::ProcessControl(void)
bIsStanding = false;
CVector2D collidingEntMoveDir = -collidingVeh->m_vecMoveSpeed;
int dir = GetLocalDirection(collidingEntMoveDir);
- SetFall(1000, (AnimationId)(dir + ANIM_KO_SKID_FRONT), false);
+ SetFall(1000, (AnimationId)(dir + ANIM_STD_HIGHIMPACT_FRONT), false);
float damage;
if (collidingVeh->m_modelIndex == MI_TRAIN) {
@@ -2321,7 +2321,7 @@ CPed::ProcessControl(void)
bIsStanding = false;
CVector2D collidingEntMoveDir = -collidingVeh->m_vecMoveSpeed;
int dir = GetLocalDirection(collidingEntMoveDir);
- SetFall(1000, (AnimationId)(dir + ANIM_KO_SKID_FRONT), false);
+ SetFall(1000, (AnimationId)(dir + ANIM_STD_HIGHIMPACT_FRONT), false);
CPed *driver = collidingVeh->pDriver;
float damage;
@@ -2448,12 +2448,17 @@ CPed::ProcessControl(void)
#ifdef VC_PED_PORTS
uint8 flyDir = 0;
float feetZ = GetPosition().z - FEET_OFFSET;
- if ((obstacleForFlyingZ <= feetZ || obstacleForFlyingOtherDirZ >= 500.0f) && (obstacleForFlyingZ <= feetZ || obstacleForFlyingOtherDirZ <= feetZ)) {
- if (obstacleForFlyingOtherDirZ > feetZ && obstacleForFlyingZ < 499.0f)
- flyDir = 2;
- } else {
+#ifdef FIX_BUGS
+ if (obstacleForFlyingZ > feetZ && obstacleForFlyingOtherDirZ < 501.0f)
flyDir = 1;
- }
+ else if (obstacleForFlyingOtherDirZ > feetZ && obstacleForFlyingZ < 500.0f)
+ flyDir = 2;
+#else
+ if ((obstacleForFlyingZ > feetZ && obstacleForFlyingOtherDirZ < 500.0f) || (obstacleForFlyingZ > feetZ && obstacleForFlyingOtherDirZ > feetZ))
+ flyDir = 1;
+ else if (obstacleForFlyingOtherDirZ > feetZ && obstacleForFlyingZ < 499.0f)
+ flyDir = 2;
+#endif
if (flyDir != 0 && !bSomeVCflag1) {
SetPosition((flyDir == 2 ? obstacleForFlyingOtherDir.point : obstacleForFlying.point));
@@ -2471,6 +2476,10 @@ CPed::ProcessControl(void)
forceDir.z = 4.0f;
ApplyMoveForce(forceDir);
+ // What was that for?? It pushes player inside of collision sometimes and kills him.
+#ifdef FIX_BUGS
+ if (!IsPlayer())
+#endif
GetMatrix().GetPosition() += 0.25f * offsetToCheck;
m_fRotationCur = CGeneral::GetRadianAngleBetweenPoints(offsetToCheck.x, offsetToCheck.y, 0.0f, 0.0f);
@@ -2479,7 +2488,7 @@ CPed::ProcessControl(void)
SetHeading(m_fRotationCur);
if (m_nPedState != PED_FALL && !bIsPedDieAnimPlaying) {
- SetFall(1000, ANIM_KO_SKID_BACK, true);
+ SetFall(1000, ANIM_STD_HIGHIMPACT_BACK, true);
}
bIsInTheAir = false;
} else if (m_vecDamageNormal.z > 0.4f) {
@@ -2534,10 +2543,10 @@ CPed::ProcessControl(void)
m_fRotationCur = m_fRotationDest;
SetHeading(m_fRotationCur);
}
- CAnimBlendAssociation *jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_JUMP_GLIDE);
+ CAnimBlendAssociation *jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_JUMP_GLIDE);
if (!jumpAssoc)
- jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_GLIDE);
+ jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL_GLIDE);
if (jumpAssoc) {
jumpAssoc->blendDelta = -3.0f;
@@ -2546,10 +2555,10 @@ CPed::ProcessControl(void)
if (m_nPedState == PED_JUMP)
m_nPedState = PED_IDLE;
} else {
- CAnimBlendAssociation *jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_JUMP_GLIDE);
+ CAnimBlendAssociation *jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_JUMP_GLIDE);
if (!jumpAssoc)
- jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_GLIDE);
+ jumpAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL_GLIDE);
if (jumpAssoc) {
jumpAssoc->blendDelta = -3.0f;
@@ -2675,7 +2684,7 @@ CPed::ProcessControl(void)
Wait();
if (m_nPedState != PED_IDLE) {
- CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_ARMED);
+ CAnimBlendAssociation *idleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_BIGGUN);
if(idleAssoc) {
idleAssoc->blendDelta = -8.0f;
idleAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -2694,27 +2703,27 @@ CPed::ProcessControl(void)
int16 padWalkX = pad->GetPedWalkLeftRight();
int16 padWalkY = pad->GetPedWalkUpDown();
if (Abs(padWalkX) > 0.0f || Abs(padWalkY) > 0.0f) {
- if (vehAnim == ANIM_CAR_OPEN_LHS || vehAnim == ANIM_CAR_OPEN_RHS || vehAnim == ANIM_COACH_OPEN_L || vehAnim == ANIM_COACH_OPEN_R ||
- vehAnim == ANIM_VAN_OPEN_L || vehAnim == ANIM_VAN_OPEN) {
+ if (vehAnim == ANIM_STD_CAR_OPEN_DOOR_LHS || vehAnim == ANIM_STD_CAR_OPEN_DOOR_RHS || vehAnim == ANIM_STD_COACH_OPEN_LHS || vehAnim == ANIM_STD_COACH_OPEN_RHS ||
+ vehAnim == ANIM_STD_VAN_OPEN_DOOR_REAR_LHS || vehAnim == ANIM_STD_VAN_OPEN_DOOR_REAR_RHS) {
if (!m_pMyVehicle->pDriver) {
cancelJack = false;
bCancelEnteringCar = true;
} else
cancelJack = true;
- } else if (vehAnim == ANIM_CAR_QJACK && m_pVehicleAnim->GetTimeLeft() > 0.75f) {
+ } else if (vehAnim == ANIM_STD_QUICKJACK && m_pVehicleAnim->GetTimeLeft() > 0.75f) {
cancelJack = true;
- } else if (vehAnim == ANIM_CAR_PULLOUT_LHS || vehAnim == ANIM_CAR_PULLOUT_LOW_LHS || vehAnim == ANIM_CAR_PULLOUT_LOW_RHS || vehAnim == ANIM_CAR_PULLOUT_RHS) {
+ } else if (vehAnim == ANIM_STD_CAR_PULL_OUT_PED_LHS || vehAnim == ANIM_STD_CAR_PULL_OUT_PED_LO_LHS || vehAnim == ANIM_STD_CAR_PULL_OUT_PED_LO_RHS || vehAnim == ANIM_STD_CAR_PULL_OUT_PED_RHS) {
bCancelEnteringCar = true;
cancelJack = false;
}
}
- if (cancelJack && vehAnim == ANIM_CAR_QJACK && m_pVehicleAnim->GetTimeLeft() > 0.75f && m_pVehicleAnim->GetTimeLeft() < 0.78f) {
+ if (cancelJack && vehAnim == ANIM_STD_QUICKJACK && m_pVehicleAnim->GetTimeLeft() > 0.75f && m_pVehicleAnim->GetTimeLeft() < 0.78f) {
cancelJack = false;
QuitEnteringCar();
RestorePreviousObjective();
}
- if (cancelJack && (vehAnim == ANIM_CAR_PULLOUT_LHS || vehAnim == ANIM_CAR_PULLOUT_LOW_LHS || vehAnim == ANIM_CAR_PULLOUT_LOW_RHS || vehAnim == ANIM_CAR_PULLOUT_RHS)) {
+ if (cancelJack && (vehAnim == ANIM_STD_CAR_PULL_OUT_PED_LHS || vehAnim == ANIM_STD_CAR_PULL_OUT_PED_LO_LHS || vehAnim == ANIM_STD_CAR_PULL_OUT_PED_LO_RHS || vehAnim == ANIM_STD_CAR_PULL_OUT_PED_RHS)) {
cancelJack = false;
bCancelEnteringCar = true;
}
@@ -2874,25 +2883,25 @@ CPed::ProcessControl(void)
CAnimBlendAssociation *lbAssoc;
CAnimBlendAssociation *sitAssoc;
if (m_pMyVehicle->bLowVehicle) {
- sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT);
+ sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_LO);
if (!sitAssoc || sitAssoc->blendAmount < 1.0f) {
break;
}
- lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_LOW_L);
+ lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_LEFT_LO);
lbAssoc = nil;
- rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_LOW_R);
+ rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_RIGHT_LO);
} else {
- sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SIT);
+ sitAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT);
if (!sitAssoc || sitAssoc->blendAmount < 1.0f) {
break;
}
- lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_L);
- rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_R);
- lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LB);
+ lDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_LEFT);
+ rDriveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_RIGHT);
+ lbAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_LOOKBEHIND);
if (lbAssoc &&
TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON
@@ -2901,10 +2910,10 @@ CPed::ProcessControl(void)
}
}
- CAnimBlendAssociation *driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_L);
+ CAnimBlendAssociation *driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVEBY_LEFT);
if (!driveByAssoc)
- driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_R);
+ driveByAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVEBY_RIGHT);
if (m_pMyVehicle->bLowVehicle || m_pMyVehicle->m_fGasPedal >= 0.0f || driveByAssoc) {
if (steerAngle == 0.0f || driveByAssoc) {
@@ -2920,9 +2929,9 @@ CPed::ProcessControl(void)
if (rDriveAssoc)
rDriveAssoc->blendAmount = clamp(steerAngle * -100.0f / 61.0f, 0.0f, 1.0f);
else if (m_pMyVehicle->bLowVehicle)
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_R);
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_DRIVE_RIGHT_LO);
else
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_R);
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_DRIVE_RIGHT);
} else {
if (rDriveAssoc)
@@ -2931,9 +2940,9 @@ CPed::ProcessControl(void)
if (lDriveAssoc)
lDriveAssoc->blendAmount = clamp(steerAngle * 100.0f / 61.0f, 0.0f, 1.0f);
else if (m_pMyVehicle->bLowVehicle)
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_LOW_L);
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_DRIVE_LEFT_LO);
else
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_L);
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_DRIVE_LEFT);
}
if (lbAssoc)
@@ -2943,7 +2952,7 @@ CPed::ProcessControl(void)
if ((TheCamera.Cams[TheCamera.ActiveCam].Mode != CCam::MODE_1STPERSON
|| TheCamera.Cams[TheCamera.ActiveCam].DirectionWasLooking != LOOKING_LEFT)
&& (!lbAssoc || lbAssoc->blendAmount < 1.0f)) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LB, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_LOOKBEHIND, 4.0f);
}
}
break;
@@ -2953,12 +2962,12 @@ CPed::ProcessControl(void)
break;
case PED_HANDS_UP:
if (m_pedStats->m_temper <= 50) {
- if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_HANDSCOWER)) {
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_HANDSCOWER);
+ if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_HANDSCOWER)) {
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HANDSCOWER);
Say(SOUND_PED_HANDS_COWER);
}
- } else if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_HANDSUP)) {
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_HANDSUP);
+ } else if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_HANDSUP)) {
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HANDSUP);
Say(SOUND_PED_HANDS_UP);
}
break;
@@ -3150,7 +3159,7 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
upperSpeedLimit *= 2.0f;
lowerSpeedLimit *= 1.5f;
}
- CAnimBlendAssociation *fallAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_FALL);
+ CAnimBlendAssociation *fallAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL);
if (!bWasStanding && speed > upperSpeedLimit && (/*!bPushedAlongByCar ||*/ m_vecMoveSpeed.z < lowerSpeedLimit)
&& m_pCollidingEntity != collidingEnt) {
@@ -3174,7 +3183,7 @@ CPed::ProcessEntityCollision(CEntity *collidingEnt, CColPoint *collidingPoints)
}
#else
float speedSqr = 0.0f;
- CAnimBlendAssociation *fallAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_FALL);
+ CAnimBlendAssociation *fallAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL);
if (!bWasStanding && (m_vecMoveSpeed.z < -0.25f || (speedSqr = m_vecMoveSpeed.MagnitudeSqr()) > sq(0.5f))) {
if (speedSqr == 0.0f)
speedSqr = sq(m_vecMoveSpeed.z);
@@ -3326,10 +3335,10 @@ CPed::PlayFootSteps(void)
if ( IsPlayer() )
{
- runStopAsoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP);
+ runStopAsoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP2);
if ( runStopAsoc == NULL )
- runStopAsoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP_R);
+ runStopAsoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP2);
}
if ( runStopAsoc != NULL && runStopAsoc->blendAmount > 0.1f )
@@ -4158,7 +4167,7 @@ CPed::PedSetOutCarCB(CAnimBlendAssociation *animAssoc, void *arg)
#ifdef VC_PED_PORTS
else if (ped->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE) {
ped->m_fHealth = 0.0f;
- ped->SetDie(ANIM_FLOOR_HIT, 4.0f, 0.5f);
+ ped->SetDie(ANIM_STD_HIT_FLOOR, 4.0f, 0.5f);
}
#endif
@@ -4286,7 +4295,7 @@ CPed::PedSetOutCarCB(CAnimBlendAssociation *animAssoc, void *arg)
ped->bOnBoat = false;
if (ped->bBusJacked) {
- ped->SetFall(1500, ANIM_KO_SKID_BACK, false);
+ ped->SetFall(1500, ANIM_STD_HIGHIMPACT_BACK, false);
ped->bBusJacked = false;
}
ped->m_nStoredMoveState = PEDMOVE_NONE;
@@ -4310,7 +4319,7 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg)
CVehicle *vehicle;
CPed *ped = (CPed*)arg;
- quickJackedAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_CAR_QJACKED);
+ quickJackedAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_STD_QUICKJACKED);
if (ped->m_nPedState != PED_ARRESTED) {
ped->m_nLastPedState = PED_NONE;
if (dragAssoc)
@@ -4343,7 +4352,7 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg)
if (ped->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE) {
dragAssoc->SetDeleteCallback(PedSetDraggedOutCarPositionCB, ped);
ped->m_fHealth = 0.0f;
- ped->SetDie(ANIM_FLOOR_HIT, 1000.0f, 0.5f);
+ ped->SetDie(ANIM_STD_HIT_FLOOR, 1000.0f, 0.5f);
return;
}
#endif
@@ -4353,7 +4362,7 @@ CPed::PedSetDraggedOutCarCB(CAnimBlendAssociation *dragAssoc, void *arg)
} else {
dragAssoc->SetDeleteCallback(PedSetDraggedOutCarPositionCB, ped);
if (ped->CanSetPedState())
- CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_GETUP1, 1000.0f);
+ CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_GET_UP, 1000.0f);
}
ped->ReplaceWeaponWhenExitingVehicle();
@@ -4588,14 +4597,14 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg)
if (veh->pDriver == ped) {
if (veh->bLowVehicle) {
- ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f);
+ ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT_LO, 100.0f);
} else {
- ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
+ ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT, 100.0f);
}
} else if (veh->bLowVehicle) {
- ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITPLO, 100.0f);
+ ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT_P_LO, 100.0f);
} else {
- ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SITP, 100.0f);
+ ped->m_pVehicleAnim = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT_P, 100.0f);
}
ped->StopNonPartialAnims();
@@ -4839,7 +4848,7 @@ CPed::PreRender(void)
if (Abs(speed.x) <= 0.05f && Abs(speed.y) <= 0.05f) {
if (!OnGround() && m_nPedState != PED_ATTACK && m_nPedState != PED_FIGHT) {
- if (!IsPedHeadAbovePos(0.3f) || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED)) {
+ if (!IsPedHeadAbovePos(0.3f) || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_TIRED)) {
doSplashUp = false;
}
} else
@@ -4973,8 +4982,8 @@ CPed::Idle(void)
}
}
- CAnimBlendAssociation *armedIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_ARMED);
- CAnimBlendAssociation *unarmedIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
+ CAnimBlendAssociation *armedIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_BIGGUN);
+ CAnimBlendAssociation *unarmedIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
int waitTime;
if (m_nMoveState == PEDMOVE_STILL) {
@@ -4989,7 +4998,7 @@ CPed::Idle(void)
m_moved = CVector2D(0.0f, 0.0f);
return;
}
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_ARMED, 3.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_BIGGUN, 3.0f);
waitTime = CGeneral::GetRandomNumberInRange(4000, 7500);
} else {
armedIdleAssoc->blendDelta = -2.0f;
@@ -5113,7 +5122,7 @@ CPed::SetInTheAir(void)
return;
bIsInTheAir = true;
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FALL_GLIDE, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FALL_GLIDE, 4.0f);
if (m_nPedState == PED_ATTACK) {
ClearAttack();
@@ -5144,9 +5153,9 @@ CPed::InTheAir(void)
)
SetLanding();
} else {
- if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_FALL)) {
+ if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL)) {
if (m_vecMoveSpeed.z < -0.1f)
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FALL_FALL, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FALL, 4.0f);
}
}
}
@@ -5159,19 +5168,19 @@ CPed::SetLanding(void)
if (DyingOrDead())
return;
- CAnimBlendAssociation *fallAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_FALL);
+ CAnimBlendAssociation *fallAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL);
CAnimBlendAssociation *landAssoc;
RpAnimBlendClumpSetBlendDeltas(GetClump(), ASSOC_PARTIAL, -1000.0f);
if (fallAssoc) {
- landAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_FALL_COLLAPSE);
+ landAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FALL_COLLAPSE);
DMAudio.PlayOneShot(m_audioEntityId, SOUND_FALL_COLLAPSE, 1.0f);
if (IsPlayer())
Say(SOUND_PED_LAND);
} else {
- landAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_FALL_LAND);
+ landAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FALL_LAND);
DMAudio.PlayOneShot(m_audioEntityId, SOUND_FALL_LAND, 1.0f);
}
@@ -5222,25 +5231,25 @@ CPed::SetGetUp(void)
bGetUpAnimStarted = true;
m_pCollidingEntity = nil;
bKnockedUpIntoAir = false;
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SPRINT);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNFAST);
if (animAssoc) {
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN)) {
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_RUN, 8.0f);
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUN)) {
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_RUN, 8.0f);
} else {
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 8.0f);
}
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
}
if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_GETUP_FRONT, 1000.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GET_UP_FRONT, 1000.0f);
else
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_GETUP1, 1000.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GET_UP, 1000.0f);
animAssoc->SetFinishCallback(PedGetupCB,this);
} else {
m_fHealth = 0.0f;
- SetDie(NUM_ANIMS, 4.0f, 0.0f);
+ SetDie(ANIM_STD_NUM, 4.0f, 0.0f);
}
}
@@ -6087,7 +6096,7 @@ CPed::SetEvasiveStep(CEntity *reason, uint8 animType)
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) {
- stepAnim = ANIM_IDLE_TAXI;
+ stepAnim = ANIM_STD_HAILTAXI;
} else {
float vehDirection = CGeneral::GetRadianAngleBetweenPoints(
@@ -6110,11 +6119,11 @@ CPed::SetEvasiveStep(CEntity *reason, uint8 animType)
else
angleToFace = vehDirection + HALFPI;
- stepAnim = NUM_ANIMS;
+ stepAnim = ANIM_STD_NUM;
if (animType == 0 || animType == 1)
- stepAnim = ANIM_EV_STEP;
+ stepAnim = ANIM_STD_EVADE_STEP;
else if (animType == 2)
- stepAnim = ANIM_HANDSCOWER;
+ stepAnim = ANIM_STD_HANDSCOWER;
}
if (!RpAnimBlendClumpGetAssociation(GetClump(), stepAnim)) {
CAnimBlendAssociation *stepAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, stepAnim, 8.0f);
@@ -6216,11 +6225,11 @@ CPed::SetEvasiveDive(CPhysical *reason, uint8 onlyRandomJump)
ClearLookFlag();
ClearAimFlag();
SetLookFlag(reason, true);
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_HANDSUP);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_HANDSUP);
if (animAssoc)
return;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_HANDSUP, 8.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HANDSUP, 8.0f);
animAssoc->flags &= ~ASSOC_DELETEFADEDOUT;
animAssoc->SetFinishCallback(PedEvadeCB, this);
SetStoredState();
@@ -6231,7 +6240,7 @@ CPed::SetEvasiveDive(CPhysical *reason, uint8 onlyRandomJump)
ClearAimFlag();
SetStoredState();
SetPedState(PED_DIVE_AWAY);
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_EV_DIVE, 8.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_EVADE_DIVE, 8.0f);
animAssoc->SetFinishCallback(PedEvadeCB, this);
}
@@ -6262,7 +6271,7 @@ CPed::PedEvadeCB(CAnimBlendAssociation* animAssoc, void* arg)
if (ped->m_nPedState == PED_DIVE_AWAY || ped->m_nPedState == PED_STEP_AWAY)
ped->RestorePreviousState();
- } else if (animAssoc->animId == ANIM_EV_DIVE) {
+ } else if (animAssoc->animId == ANIM_STD_EVADE_DIVE) {
ped->bUpdateAnimHeading = true;
ped->ClearLookFlag();
if (ped->m_nPedState == PED_DIVE_AWAY)
@@ -6320,7 +6329,7 @@ CPed::SetDie(AnimationId animId, float delta, float speed)
}
SetPedState(PED_DIE);
- if (animId == NUM_ANIMS) {
+ if (animId == ANIM_STD_NUM) {
bIsPedDieAnimPlaying = false;
} else {
CAnimBlendAssociation *dieAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, animId, delta);
@@ -6429,7 +6438,7 @@ CPed::Chat(void)
}
if (bIsTalking) {
if (CGeneral::GetRandomNumber() < 512) {
- CAnimBlendAssociation *chatAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CHAT);
+ CAnimBlendAssociation *chatAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CHAT);
if (chatAssoc) {
chatAssoc->blendDelta = -4.0f;
chatAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -6441,10 +6450,10 @@ CPed::Chat(void)
} else {
if (CGeneral::GetRandomNumber() < 20 && !RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_IDLE)) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_XPRESS_SCRATCH, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_XPRESS_SCRATCH, 4.0f);
}
if (!bIsTalking && !RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_IDLE)) {
- CAnimBlendAssociation *chatAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_CHAT, 4.0f);
+ CAnimBlendAssociation *chatAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CHAT, 4.0f);
float chatTime = CGeneral::GetRandomNumberInRange(0.0f, 3.0f);
chatAssoc->SetCurrentTime(chatTime);
@@ -6461,7 +6470,7 @@ CPed::Chat(void)
void
CPed::ClearChat(void)
{
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CHAT);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CHAT);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -6477,10 +6486,10 @@ ReportPhonePickUpCB(CAnimBlendAssociation* assoc, void* arg)
{
CPed* ped = (CPed*)arg;
ped->m_nMoveState = PEDMOVE_STILL;
- CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_IDLE_STANCE, 8.0f);
+ CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE, 8.0f);
if (assoc->blendAmount > 0.5f && ped) {
- CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_PHONE_TALK, 8.0f);
+ CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_TALK, 8.0f);
}
}
@@ -6524,7 +6533,7 @@ CPed::FacePhone(void)
ClearLookFlag();
SetIdle();
m_phoneTalkTimer = CTimer::GetTimeInMilliseconds() + 10000;
- CAnimBlendAssociation* assoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_PHONE_IN, 4.0f);
+ CAnimBlendAssociation* assoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_IN, 4.0f);
assoc->SetFinishCallback(ReportPhonePickUpCB, this);
return true;
}
@@ -6579,9 +6588,9 @@ CPed::MakePhonecall(void)
return false;
#ifdef PEDS_REPORT_CRIMES_ON_PHONE
- CAnimBlendAssociation* talkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_PHONE_TALK);
+ CAnimBlendAssociation* talkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_PHONE_TALK);
if (talkAssoc && talkAssoc->blendAmount > 0.5f) {
- CAnimBlendAssociation* endAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_PHONE_OUT, 8.0f);
+ CAnimBlendAssociation* endAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_OUT, 8.0f);
endAssoc->flags &= ~ASSOC_DELETEFADEDOUT;
endAssoc->SetFinishCallback(ReportPhonePutDownCB, this);
}
@@ -6911,18 +6920,18 @@ CPed::SetPedPositionInCar(void)
if (bChangedSeat) {
bool notYet = false;
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_GETIN_LHS)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_GETIN_LOW_LHS)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_CLOSEDOOR_LHS)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_CLOSEDOOR_LOW_LHS)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SHUFFLE_RHS)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSHUFFLE_RHS)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_VAN_CLOSE_L)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_VAN_CLOSE)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_VAN_GETIN_L)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_VAN_GETIN)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_COACH_IN_L)
- || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_COACH_IN_R)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_GET_IN_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_GET_IN_LO_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_CLOSE_DOOR_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_CLOSE_DOOR_LO_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SHUFFLE_RHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SHUFFLE_LO_RHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_VAN_GET_IN_REAR_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_VAN_GET_IN_REAR_RHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_COACH_GET_IN_LHS)
+ || RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_COACH_GET_IN_RHS)) {
notYet = true;
}
if (notYet) {
@@ -7175,7 +7184,7 @@ CPed::LookForInterestingNodes(void)
void
CPed::SetWaitState(eWaitState state, void *time)
{
- AnimationId waitAnim = NUM_ANIMS;
+ AnimationId waitAnim = ANIM_STD_NUM;
CAnimBlendAssociation *animAssoc;
if (!IsPedInControl())
@@ -7191,10 +7200,10 @@ CPed::SetWaitState(eWaitState state, void *time)
break;
case WAITSTATE_CROSS_ROAD:
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 1000;
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_HBHB, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_HBHB, 4.0f);
break;
case WAITSTATE_CROSS_ROAD_LOOK:
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_ROAD_CROSS, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_ROADCROSS, 8.0f);
if (time)
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + *(int*)time;
@@ -7210,7 +7219,7 @@ CPed::SetWaitState(eWaitState state, void *time)
case WAITSTATE_DOUBLEBACK:
m_headingRate = 0.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 3500;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_HBHB, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_HBHB, 4.0f);
#ifdef FIX_BUGS
animAssoc->SetFinishCallback(RestoreHeadingRateCB, this);
#endif
@@ -7218,7 +7227,7 @@ CPed::SetWaitState(eWaitState state, void *time)
case WAITSTATE_HITWALL:
m_headingRate = 2.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 5000;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_HIT_WALL, 16.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_WALL, 16.0f);
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
animAssoc->flags |= ASSOC_FADEOUTWHENDONE;
animAssoc->SetDeleteCallback(FinishedWaitCB, this);
@@ -7232,14 +7241,14 @@ CPed::SetWaitState(eWaitState state, void *time)
case WAITSTATE_TURN180:
m_headingRate = 0.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 5000;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_TURN_180, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_TURN180, 4.0f);
animAssoc->SetFinishCallback(FinishedWaitCB, this);
animAssoc->SetDeleteCallback(RestoreHeadingRateCB, this);
break;
case WAITSTATE_SURPRISE:
m_headingRate = 0.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 2000;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_HIT_WALL, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_WALL, 4.0f);
animAssoc->SetFinishCallback(FinishedWaitCB, this);
break;
case WAITSTATE_STUCK:
@@ -7247,7 +7256,7 @@ CPed::SetWaitState(eWaitState state, void *time)
SetMoveAnim();
m_headingRate = 0.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 5000;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_TIRED, 4.0f);
#ifdef FIX_BUGS
animAssoc->SetFinishCallback(RestoreHeadingRateCB, this);
#endif
@@ -7263,20 +7272,20 @@ CPed::SetWaitState(eWaitState state, void *time)
SetMoveAnim();
m_headingRate = 0.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 5000;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_HBHB, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_HBHB, 4.0f);
#ifdef FIX_BUGS
animAssoc->SetFinishCallback(RestoreHeadingRateCB, this);
#endif
break;
case WAITSTATE_PLAYANIM_COWER:
- waitAnim = ANIM_HANDSCOWER;
+ waitAnim = ANIM_STD_HANDSCOWER;
case WAITSTATE_PLAYANIM_HANDSUP:
- if (waitAnim == NUM_ANIMS)
- waitAnim = ANIM_HANDSUP;
+ if (waitAnim == ANIM_STD_NUM)
+ waitAnim = ANIM_STD_HANDSUP;
case WAITSTATE_PLAYANIM_HANDSCOWER:
- if (waitAnim == NUM_ANIMS)
- waitAnim = ANIM_HANDSCOWER;
+ if (waitAnim == ANIM_STD_NUM)
+ waitAnim = ANIM_STD_HANDSCOWER;
m_headingRate = 0.0f;
if (time)
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + *(int*)time;
@@ -7287,13 +7296,13 @@ CPed::SetWaitState(eWaitState state, void *time)
animAssoc->SetDeleteCallback(FinishedWaitCB, this);
break;
case WAITSTATE_PLAYANIM_DUCK:
- waitAnim = ANIM_DUCK_DOWN;
+ waitAnim = ANIM_STD_DUCK_DOWN;
case WAITSTATE_PLAYANIM_TAXI:
- if (waitAnim == NUM_ANIMS)
- waitAnim = ANIM_IDLE_TAXI;
+ if (waitAnim == ANIM_STD_NUM)
+ waitAnim = ANIM_STD_HAILTAXI;
case WAITSTATE_PLAYANIM_CHAT:
- if (waitAnim == NUM_ANIMS)
- waitAnim = ANIM_IDLE_CHAT;
+ if (waitAnim == ANIM_STD_NUM)
+ waitAnim = ANIM_STD_CHAT;
if (time)
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + *(int*)time;
else
@@ -7309,7 +7318,7 @@ CPed::SetWaitState(eWaitState state, void *time)
SetMoveAnim();
m_headingRate = 0.0f;
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 2500;
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_TIRED, 4.0f);
#ifdef FIX_BUGS
animAssoc->SetFinishCallback(RestoreHeadingRateCB, this);
#endif
@@ -7325,7 +7334,7 @@ CPed::SetWaitState(eWaitState state, void *time)
void
CPed::Wait(void)
{
- AnimationId mustHaveAnim = NUM_ANIMS;
+ AnimationId mustHaveAnim = ANIM_STD_NUM;
CAnimBlendAssociation *animAssoc;
CPed *pedWeLook;
@@ -7353,7 +7362,7 @@ CPed::Wait(void)
else
SetWaitState(WAITSTATE_CROSS_ROAD_LOOK, nil);
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_HBHB);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_HBHB);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -7364,7 +7373,7 @@ CPed::Wait(void)
case WAITSTATE_CROSS_ROAD_LOOK:
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
m_nWaitState = WAITSTATE_FALSE;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ROAD_CROSS);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_ROADCROSS);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -7377,7 +7386,7 @@ CPed::Wait(void)
uint32 timeLeft = m_nWaitTimer - CTimer::GetTimeInMilliseconds();
if (timeLeft < 2500 && timeLeft > 2000) {
m_nWaitTimer -= 500;
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_XPRESS_SCRATCH, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_XPRESS_SCRATCH, 4.0f);
}
} else {
m_nWaitState = WAITSTATE_FALSE;
@@ -7411,8 +7420,8 @@ CPed::Wait(void)
case WAITSTATE_SURPRISE:
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_HIT_WALL)) {
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_XPRESS_SCRATCH, 4.0f);
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_HIT_WALL)) {
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_XPRESS_SCRATCH, 4.0f);
animAssoc->SetFinishCallback(FinishedWaitCB, this);
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 5000;
} else {
@@ -7425,14 +7434,14 @@ CPed::Wait(void)
if (CTimer::GetTimeInMilliseconds() <= m_nWaitTimer)
break;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_TIRED);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_TURN_180);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_TURN180);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_XPRESS_SCRATCH);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_XPRESS_SCRATCH);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ROAD_CROSS);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_ROADCROSS);
if (animAssoc) {
if (animAssoc->IsPartial()) {
@@ -7440,10 +7449,10 @@ CPed::Wait(void)
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
} else {
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 4.0f);
}
- if (animAssoc->animId == ANIM_TURN_180) {
+ if (animAssoc->animId == ANIM_STD_TURN180) {
m_fRotationCur = CGeneral::LimitRadianAngle(PI + m_fRotationCur);
m_nWaitState = WAITSTATE_FALSE;
SetMoveState(PEDMOVE_WALK);
@@ -7457,16 +7466,16 @@ CPed::Wait(void)
switch (CGeneral::GetRandomNumber() & 3) {
case 0:
- animToPlay = ANIM_ROAD_CROSS;
+ animToPlay = ANIM_STD_ROADCROSS;
break;
case 1:
- animToPlay = ANIM_IDLE_TIRED;
+ animToPlay = ANIM_STD_IDLE_TIRED;
break;
case 2:
- animToPlay = ANIM_XPRESS_SCRATCH;
+ animToPlay = ANIM_STD_XPRESS_SCRATCH;
break;
case 3:
- animToPlay = ANIM_TURN_180;
+ animToPlay = ANIM_STD_TURN180;
break;
default:
break;
@@ -7474,7 +7483,7 @@ CPed::Wait(void)
animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, animToPlay, 4.0f);
- if (animToPlay == ANIM_TURN_180)
+ if (animToPlay == ANIM_STD_TURN180)
animAssoc->SetFinishCallback(FinishedWaitCB, this);
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + CGeneral::GetRandomNumberInRange(1500, 5000);
@@ -7483,7 +7492,7 @@ CPed::Wait(void)
case WAITSTATE_LOOK_ABOUT:
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
m_nWaitState = WAITSTATE_FALSE;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_HBHB);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_HBHB);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -7492,11 +7501,11 @@ CPed::Wait(void)
break;
case WAITSTATE_PLAYANIM_HANDSUP:
- mustHaveAnim = ANIM_HANDSUP;
+ mustHaveAnim = ANIM_STD_HANDSUP;
case WAITSTATE_PLAYANIM_HANDSCOWER:
- if (mustHaveAnim == NUM_ANIMS)
- mustHaveAnim = ANIM_HANDSCOWER;
+ if (mustHaveAnim == ANIM_STD_NUM)
+ mustHaveAnim = ANIM_STD_HANDSCOWER;
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), mustHaveAnim);
pedWeLook = (CPed*) m_pLookTarget;
@@ -7564,19 +7573,19 @@ CPed::Wait(void)
}
break;
case WAITSTATE_PLAYANIM_COWER:
- mustHaveAnim = ANIM_HANDSCOWER;
+ mustHaveAnim = ANIM_STD_HANDSCOWER;
case WAITSTATE_PLAYANIM_DUCK:
- if (mustHaveAnim == NUM_ANIMS)
- mustHaveAnim = ANIM_DUCK_DOWN;
+ if (mustHaveAnim == ANIM_STD_NUM)
+ mustHaveAnim = ANIM_STD_DUCK_DOWN;
case WAITSTATE_PLAYANIM_TAXI:
- if (mustHaveAnim == NUM_ANIMS)
- mustHaveAnim = ANIM_IDLE_TAXI;
+ if (mustHaveAnim == ANIM_STD_NUM)
+ mustHaveAnim = ANIM_STD_HAILTAXI;
case WAITSTATE_PLAYANIM_CHAT:
- if (mustHaveAnim == NUM_ANIMS)
- mustHaveAnim = ANIM_IDLE_CHAT;
+ if (mustHaveAnim == ANIM_STD_NUM)
+ mustHaveAnim = ANIM_STD_CHAT;
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), mustHaveAnim);
@@ -7602,11 +7611,11 @@ CPed::Wait(void)
break;
case WAITSTATE_FINISH_FLEE:
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_TIRED);
if (animAssoc) {
if (CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 4.0f);
int timer = 2000;
m_nWaitState = WAITSTATE_FALSE;
SetWaitState(WAITSTATE_CROSS_ROAD_LOOK, &timer);
@@ -7686,7 +7695,7 @@ CPed::SetSolicit(uint32 time)
m_chatTimer = CTimer::GetTimeInMilliseconds() + time;
if(!m_carInObjective->bIsVan && !m_carInObjective->bIsBus)
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_HOOKERTALK, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_HOOKERTALK, 4.0f);
SetPedState(PED_SOLICIT);
}
@@ -7713,7 +7722,7 @@ CPed::Solicit(void)
if ((GetPosition() - doorPos).MagnitudeSqr() <= 1.0f)
return;
- CAnimBlendAssociation *talkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_HOOKERTALK);
+ CAnimBlendAssociation *talkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_HOOKERTALK);
if (talkAssoc) {
talkAssoc->blendDelta = -1000.0f;
talkAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -7959,12 +7968,12 @@ CPed::SetJump(void)
{
if (!bInVehicle &&
#if defined VC_PED_PORTS || defined FIX_BUGS
- m_nPedState != PED_JUMP && !RpAnimBlendClumpGetAssociation(GetClump(), ANIM_JUMP_LAUNCH) &&
+ m_nPedState != PED_JUMP && !RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_JUMP_LAUNCH) &&
#endif
(m_nSurfaceTouched != SURFACE_STEEP_CLIFF || DotProduct(GetForward(), m_vecDamageNormal) >= 0.0f)) {
SetStoredState();
SetPedState(PED_JUMP);
- CAnimBlendAssociation *jumpAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_JUMP_LAUNCH, 8.0f);
+ CAnimBlendAssociation *jumpAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_JUMP_LAUNCH, 8.0f);
jumpAssoc->SetFinishCallback(FinishLaunchCB, this);
m_fRotationDest = m_fRotationCur;
}
@@ -7993,7 +8002,7 @@ CPed::FinishLaunchCB(CAnimBlendAssociation *animAssoc, void *arg)
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
// ANIM_HIT_WALL in VC (which makes more sense)
- CAnimBlendAssociation *handsCoverAssoc = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_HANDSCOWER, 8.0f);
+ CAnimBlendAssociation *handsCoverAssoc = CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_HANDSCOWER, 8.0f);
handsCoverAssoc->flags &= ~ASSOC_FADEOUTWHENDONE;
handsCoverAssoc->SetFinishCallback(FinishHitHeadCB, ped);
ped->bIsLanding = true;
@@ -8001,12 +8010,12 @@ CPed::FinishLaunchCB(CAnimBlendAssociation *animAssoc, void *arg)
}
float velocityFromAnim = 0.1f;
- CAnimBlendAssociation *sprintAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_SPRINT);
+ CAnimBlendAssociation *sprintAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_STD_RUNFAST);
if (sprintAssoc) {
velocityFromAnim = 0.05f * sprintAssoc->blendAmount + 0.17f;
} else {
- CAnimBlendAssociation *runAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_RUN);
+ CAnimBlendAssociation *runAssoc = RpAnimBlendClumpGetAssociation(ped->GetClump(), ANIM_STD_RUN);
if (runAssoc) {
velocityFromAnim = 0.07f * runAssoc->blendAmount + 0.1f;
}
@@ -8050,7 +8059,7 @@ CPed::FinishLaunchCB(CAnimBlendAssociation *animAssoc, void *arg)
ped->bIsStanding = false;
ped->bIsInTheAir = true;
animAssoc->blendDelta = -1000.0f;
- CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_JUMP_GLIDE);
+ CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_JUMP_GLIDE);
if (ped->bDoBloodyFootprints) {
CVector bloodPos(0.0f, 0.0f, 0.0f);
@@ -8318,7 +8327,7 @@ CPed::WarpPedIntoCar(CVehicle *car)
#else
if (car->IsBoat()) {
#ifndef FIX_BUGS
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_BOAT_DRIVE, 100.0f);
#else
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f);
#endif
@@ -8329,9 +8338,9 @@ CPed::WarpPedIntoCar(CVehicle *car)
RemoveWeaponWhenEnteringVehicle();
if (car->bLowVehicle)
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_LSIT, 100.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT_LO, 100.0f);
else
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT, 100.0f);
}
#endif
diff --git a/src/peds/PedAI.cpp b/src/peds/PedAI.cpp
index 089c8d9d..7f7120af 100644
--- a/src/peds/PedAI.cpp
+++ b/src/peds/PedAI.cpp
@@ -1121,7 +1121,7 @@ CPed::ProcessObjective(void)
if (m_attackTimer < CTimer::GetTimeInMilliseconds()
&& distWithTargetSc < wepRange && m_pedInObjective->m_nPedState != PED_GETUP && m_pedInObjective->m_nPedState != PED_DRAG_FROM_CAR) {
if (bIsDucking) {
- CAnimBlendAssociation *duckAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_DOWN);
+ CAnimBlendAssociation *duckAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_DOWN);
if (duckAnim) {
duckAnim->blendDelta = -2.0f;
break;
@@ -1202,14 +1202,14 @@ CPed::ProcessObjective(void)
// This is weird...
if (bNotAllowedToDuck && bKindaStayInSamePlace) {
if (!bIsDucking) {
- CAnimBlendAssociation* duckAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_DOWN);
+ CAnimBlendAssociation* duckAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_DOWN);
if (!duckAnim || duckAnim->blendDelta < 0.0f) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DUCK_DOWN, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_DUCK_DOWN, 4.0f);
bIsDucking = true;
}
break;
} else {
- CAnimBlendAssociation* duckAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_DOWN);
+ CAnimBlendAssociation* duckAnim = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_DOWN);
if (!duckAnim || duckAnim->blendDelta < 0.0f) {
bIsDucking = false;
} else {
@@ -1701,9 +1701,9 @@ CPed::ProcessObjective(void)
}
break;
case OBJECTIVE_HAIL_TAXI:
- if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TAXI) && CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
+ if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_HAILTAXI) && CTimer::GetTimeInMilliseconds() > m_nWaitTimer) {
Say(SOUND_PED_TAXI_WAIT);
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TAXI, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HAILTAXI, 4.0f);
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + 2000;
}
break;
@@ -1813,7 +1813,7 @@ CPed::ProcessObjective(void)
float distWithTargetScSqr = distWithTarget.MagnitudeSqr();
if (distWithTargetScSqr <= sq(10.0f)) {
if (distWithTargetScSqr <= sq(1.4f)) {
- CAnimBlendAssociation *reloadAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_AK_RELOAD);
+ CAnimBlendAssociation *reloadAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_AK_RELOAD);
m_fRotationDest = CGeneral::GetRadianAngleBetweenPoints(
m_pedInObjective->GetPosition().x, m_pedInObjective->GetPosition().y,
GetPosition().x, GetPosition().y);
@@ -1821,7 +1821,7 @@ CPed::ProcessObjective(void)
if (reloadAssoc || !m_pedInObjective->IsPedShootable()) {
if (reloadAssoc &&
(!reloadAssoc->IsRunning() || reloadAssoc->currentTime / reloadAssoc->hierarchy->totalLength > 0.8f)) {
- CAnimBlendAssociation *punchAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_PPUNCH, 8.0f);
+ CAnimBlendAssociation *punchAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_PARTIAL_PUNCH, 8.0f);
punchAssoc->flags |= ASSOC_DELETEFADEDOUT;
punchAssoc->flags |= ASSOC_FADEOUTWHENDONE;
CVector2D offset(distWithTarget.x, distWithTarget.y);
@@ -1850,13 +1850,13 @@ CPed::ProcessObjective(void)
if (weaponType != WEAPONTYPE_UNARMED && weaponType != WEAPONTYPE_BASEBALLBAT)
SetCurrentWeapon(WEAPONTYPE_UNARMED);
- CAnimBlendAssociation *newReloadAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_AK_RELOAD, 8.0f);
+ CAnimBlendAssociation *newReloadAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_AK_RELOAD, 8.0f);
newReloadAssoc->flags |= ASSOC_DELETEFADEDOUT;
newReloadAssoc->flags |= ASSOC_FADEOUTWHENDONE;
}
} else {
SetSeek(m_pedInObjective, 1.0f);
- CAnimBlendAssociation *walkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WALK);
+ CAnimBlendAssociation *walkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_WALK);
if (walkAssoc)
walkAssoc->speed = 1.3f;
@@ -2256,26 +2256,26 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
}
if (enterDoor != DOOR_FRONT_LEFT && enterDoor != DOOR_REAR_LEFT) {
if (itsVan) {
- enterAnim = ANIM_VAN_GETIN;
+ enterAnim = ANIM_STD_VAN_GET_IN_REAR_RHS;
} else if (itsBus) {
- enterAnim = ANIM_COACH_IN_R;
+ enterAnim = ANIM_STD_COACH_GET_IN_RHS;
#ifdef FIX_BUGS
} else if (itsLow) {
- enterAnim = ANIM_CAR_GETIN_LOW_RHS;
+ enterAnim = ANIM_STD_CAR_GET_IN_LO_RHS;
#endif
} else {
- enterAnim = ANIM_CAR_GETIN_RHS;
+ enterAnim = ANIM_STD_CAR_GET_IN_RHS;
}
} else if (itsVan) {
- enterAnim = ANIM_VAN_GETIN_L;
+ enterAnim = ANIM_STD_VAN_GET_IN_REAR_LHS;
} else if (itsBus) {
- enterAnim = ANIM_COACH_IN_L;
+ enterAnim = ANIM_STD_COACH_GET_IN_LHS;
#ifdef FIX_BUGS
} else if (itsLow) {
- enterAnim = ANIM_CAR_GETIN_LOW_LHS;
+ enterAnim = ANIM_STD_CAR_GET_IN_LO_LHS;
#endif
} else {
- enterAnim = ANIM_CAR_GETIN_LHS;
+ enterAnim = ANIM_STD_CAR_GET_IN_LHS;
}
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, enterAnim);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimGetInCB, ped);
@@ -2285,16 +2285,16 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
veh->AutoPilot.m_nCruiseSpeed = 0;
if (enterDoor != DOOR_FRONT_LEFT && enterDoor != DOOR_REAR_LEFT) {
if (itsVan) {
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_VAN_OPEN);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_VAN_OPEN_DOOR_REAR_RHS);
} else if (itsBus) {
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_COACH_OPEN_R);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_COACH_OPEN_RHS);
} else {
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_OPEN_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_OPEN_DOOR_RHS);
}
} else if (itsVan) {
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_VAN_OPEN_L);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_VAN_OPEN_DOOR_REAR_LHS);
} else if (itsBus) {
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_COACH_OPEN_L);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_COACH_OPEN_LHS);
} else {
if (ped->m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER && veh->pDriver) {
@@ -2303,7 +2303,7 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
&& veh->pDriver->CharCreatedBy != MISSION_CHAR
&& veh->pDriver->m_nPedState == PED_DRIVING) {
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_QJACK);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_QUICKJACK);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimGetInCB, ped);
veh->pDriver->SetBeingDraggedFromCar(veh, ped->m_vehDoor, true);
@@ -2312,15 +2312,15 @@ CPed::PedAnimAlignCB(CAnimBlendAssociation *animAssoc, void *arg)
return;
}
}
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_OPEN_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_OPEN_DOOR_LHS);
}
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
} else {
if (enterDoor != DOOR_FRONT_LEFT && enterDoor != DOOR_REAR_LEFT)
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_DOORLOCKED_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CARDOOR_LOCKED_RHS);
else
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_DOORLOCKED_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CARDOOR_LOCKED_LHS);
ped->bCancelEnteringCar = true;
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorOpenCB, ped);
@@ -2393,13 +2393,13 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
if (veh->m_vecMoveSpeed.Magnitude() > 0.2f) {
ped->QuitEnteringCar();
if (ped->m_vehDoor != CAR_DOOR_LF && ped->m_vehDoor != CAR_DOOR_LR)
- ped->SetFall(1000, ANIM_KO_SPIN_R, false);
+ ped->SetFall(1000, ANIM_STD_HIGHIMPACT_LEFT, false);
else
- ped->SetFall(1000, ANIM_KO_SPIN_L, false);
+ ped->SetFall(1000, ANIM_STD_HIGHIMPACT_RIGHT, false);
return;
}
- veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_CAR_OPEN_LHS, 1.0f);
+ veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_STD_CAR_OPEN_DOOR_LHS, 1.0f);
if (ped->m_vehDoor == CAR_DOOR_LF || ped->m_vehDoor == CAR_DOOR_RF)
isVan = false;
@@ -2409,22 +2409,22 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
if (ped->m_vehDoor != CAR_DOOR_LF && ped->m_vehDoor != CAR_DOOR_LR) {
if (isVan) {
- animToPlay = ANIM_VAN_GETIN;
+ animToPlay = ANIM_STD_VAN_GET_IN_REAR_RHS;
} else if (isBus) {
- animToPlay = ANIM_COACH_IN_R;
+ animToPlay = ANIM_STD_COACH_GET_IN_RHS;
} else if (isLow) {
- animToPlay = ANIM_CAR_GETIN_LOW_RHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_LO_RHS;
} else {
- animToPlay = ANIM_CAR_GETIN_RHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_RHS;
}
} else if (isVan) {
- animToPlay = ANIM_VAN_GETIN_L;
+ animToPlay = ANIM_STD_VAN_GET_IN_REAR_LHS;
} else if (isBus) {
- animToPlay = ANIM_COACH_IN_L;
+ animToPlay = ANIM_STD_COACH_GET_IN_LHS;
} else if (isLow) {
- animToPlay = ANIM_CAR_GETIN_LOW_LHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_LO_LHS;
} else {
- animToPlay = ANIM_CAR_GETIN_LHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_LHS;
}
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, animToPlay);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimGetInCB, ped);
@@ -2451,9 +2451,9 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
pedToDragOut = nil;
} else {
if (isLow)
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_PULLOUT_LOW_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_PULL_OUT_PED_LO_RHS);
else
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_PULLOUT_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_PULL_OUT_PED_RHS);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimPullPedOutCB, ped);
}
@@ -2468,9 +2468,9 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
} else {
// BUG: Probably we will sit on top of the passenger if his m_ped_flagF4 is true.
if (isLow)
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_GETIN_LOW_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_GET_IN_LO_LHS);
else
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_GETIN_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_GET_IN_LHS);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimGetInCB, ped);
}
@@ -2483,17 +2483,17 @@ CPed::PedAnimDoorOpenCB(CAnimBlendAssociation* animAssoc, void* arg)
pedToDragOut = nil;
} else {
if (isLow)
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_PULLOUT_LOW_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_PULL_OUT_PED_LO_LHS);
else
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_PULLOUT_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_PULL_OUT_PED_LHS);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimPullPedOutCB, ped);
}
} else {
if (isLow)
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_GETIN_LOW_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_GET_IN_LO_LHS);
else
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_GETIN_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_GET_IN_LHS);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimGetInCB, ped);
}
@@ -2577,13 +2577,13 @@ CPed::PedAnimPullPedOutCB(CAnimBlendAssociation* animAssoc, void* arg)
AnimationId animToPlay;
if (ped->m_vehDoor != CAR_DOOR_LF && ped->m_vehDoor != CAR_DOOR_LR) {
if (isLow)
- animToPlay = ANIM_CAR_GETIN_LOW_RHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_LO_RHS;
else
- animToPlay = ANIM_CAR_GETIN_RHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_RHS;
} else if (isLow) {
- animToPlay = ANIM_CAR_GETIN_LOW_LHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_LO_LHS;
} else {
- animToPlay = ANIM_CAR_GETIN_LHS;
+ animToPlay = ANIM_STD_CAR_GET_IN_LHS;
}
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, animToPlay);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimGetInCB, ped);
@@ -2717,18 +2717,18 @@ CPed::PedAnimGetInCB(CAnimBlendAssociation *animAssoc, void *arg)
AnimationId animToPlay;
if (enterDoor != DOOR_FRONT_LEFT && enterDoor != DOOR_REAR_LEFT) {
if (isVan) {
- animToPlay = ANIM_VAN_CLOSE;
+ animToPlay = ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS;
} else if (isLow) {
- animToPlay = ANIM_CAR_CLOSEDOOR_LOW_RHS;
+ animToPlay = ANIM_STD_CAR_CLOSE_DOOR_LO_RHS;
} else {
- animToPlay = ANIM_CAR_CLOSEDOOR_RHS;
+ animToPlay = ANIM_STD_CAR_CLOSE_DOOR_RHS;
}
} else if (isVan) {
- animToPlay = ANIM_VAN_CLOSE_L;
+ animToPlay = ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS;
} else if (isLow) {
- animToPlay = ANIM_CAR_CLOSEDOOR_LOW_LHS;
+ animToPlay = ANIM_STD_CAR_CLOSE_DOOR_LO_LHS;
} else {
- animToPlay = ANIM_CAR_CLOSEDOOR_LHS;
+ animToPlay = ANIM_STD_CAR_CLOSE_DOOR_LHS;
}
ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, animToPlay);
ped->m_pVehicleAnim->SetFinishCallback(PedAnimDoorCloseCB, ped);
@@ -2749,7 +2749,7 @@ CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *animAssoc, void *arg)
bool isLow = !!veh->bLowVehicle;
if (!veh->bIsBus)
- veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_CAR_CLOSEDOOR_LHS, 1.0f);
+ veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_STD_CAR_CLOSE_DOOR_LHS, 1.0f);
eDoors door;
switch (ped->m_vehDoor) {
@@ -2796,9 +2796,9 @@ CPed::PedAnimDoorCloseCB(CAnimBlendAssociation *animAssoc, void *arg)
animAssoc->blendDelta = -1000.0f;
if (isLow)
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_LSHUFFLE_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SHUFFLE_LO_RHS);
else
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_SHUFFLE_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SHUFFLE_RHS);
ped->m_pVehicleAnim->SetFinishCallback(PedSetInCarCB, ped);
}
@@ -2902,7 +2902,7 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg)
veh->m_vecMoveSpeed += CVector(0.001f, 0.001f, 0.001f);
veh->m_vecTurnSpeed += CVector(0.001f, 0.001f, 0.001f);
if (!veh->bIsBus)
- veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_CAR_GETOUT_LHS, 1.0f);
+ veh->ProcessOpenDoor(ped->m_vehDoor, ANIM_STD_GETOUT_LHS, 1.0f);
/*
// Duplicate and only in PC for some reason
@@ -2991,16 +2991,16 @@ CPed::PedAnimStepOutCarCB(CAnimBlendAssociation* animAssoc, void* arg)
} else {
switch (door) {
case DOOR_FRONT_LEFT:
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_CLOSE_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_CLOSE_LHS);
break;
case DOOR_FRONT_RIGHT:
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_CLOSE_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_CLOSE_RHS);
break;
case DOOR_REAR_LEFT:
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_CLOSE_LHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_CLOSE_LHS);
break;
case DOOR_REAR_RIGHT:
- ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_CAR_CLOSE_RHS);
+ ped->m_pVehicleAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_CLOSE_RHS);
break;
default:
break;
@@ -3026,19 +3026,19 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
return;
if (!bChangedSeat && phase != LINE_UP_TO_CAR_2) {
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SIT)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT)) {
SetPedPositionInCar();
return;
}
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_LO)) {
SetPedPositionInCar();
return;
}
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SITP)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_P)) {
SetPedPositionInCar();
return;
}
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SITPLO)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_P_LO)) {
SetPedPositionInCar();
return;
}
@@ -3093,22 +3093,22 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
vehAnim = m_pVehicleAnim->animId;
switch (vehAnim) {
- case ANIM_CAR_JACKED_RHS:
- case ANIM_CAR_LJACKED_RHS:
- case ANIM_CAR_JACKED_LHS:
- case ANIM_CAR_LJACKED_LHS:
- case ANIM_VAN_GETIN_L:
- case ANIM_VAN_GETIN:
+ case ANIM_STD_JACKEDCAR_RHS:
+ case ANIM_STD_JACKEDCAR_LO_RHS:
+ case ANIM_STD_JACKEDCAR_LHS:
+ case ANIM_STD_JACKEDCAR_LO_LHS:
+ case ANIM_STD_VAN_GET_IN_REAR_LHS:
+ case ANIM_STD_VAN_GET_IN_REAR_RHS:
#ifdef VC_PED_PORTS
multExtractedFromAnim = true;
zBlend = Max(m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength - 0.3f, 0.0f) / (1.0f - 0.3f);
// fall through
#endif
- case ANIM_CAR_QJACKED:
- case ANIM_CAR_GETOUT_LHS:
- case ANIM_CAR_GETOUT_LOW_LHS:
- case ANIM_CAR_GETOUT_RHS:
- case ANIM_CAR_GETOUT_LOW_RHS:
+ case ANIM_STD_QUICKJACKED:
+ case ANIM_STD_GETOUT_LHS:
+ case ANIM_STD_GETOUT_LO_LHS:
+ case ANIM_STD_GETOUT_RHS:
+ case ANIM_STD_GETOUT_LO_RHS:
#ifdef VC_PED_PORTS
if (!multExtractedFromAnim) {
multExtractedFromAnim = true;
@@ -3116,14 +3116,14 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
}
// fall through
#endif
- case ANIM_CAR_CRAWLOUT_RHS:
- case ANIM_CAR_CRAWLOUT_RHS2:
- case ANIM_VAN_GETOUT_L:
- case ANIM_VAN_GETOUT:
+ case ANIM_STD_CRAWLOUT_LHS:
+ case ANIM_STD_CRAWLOUT_RHS:
+ case ANIM_STD_VAN_GET_OUT_REAR_LHS:
+ case ANIM_STD_VAN_GET_OUT_REAR_RHS:
seatPosMult = m_pVehicleAnim->currentTime / m_pVehicleAnim->hierarchy->totalLength;
break;
- case ANIM_CAR_GETIN_RHS:
- case ANIM_CAR_GETIN_LHS:
+ case ANIM_STD_CAR_GET_IN_RHS:
+ case ANIM_STD_CAR_GET_IN_LHS:
#ifdef VC_PED_PORTS
if (veh && veh->IsCar() && veh->bIsBus) {
multExtractedFromAnimBus = true;
@@ -3131,27 +3131,27 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
}
// fall through
#endif
- case ANIM_CAR_QJACK:
- case ANIM_CAR_GETIN_LOW_LHS:
- case ANIM_CAR_GETIN_LOW_RHS:
- case ANIM_DRIVE_BOAT:
+ case ANIM_STD_QUICKJACK:
+ case ANIM_STD_CAR_GET_IN_LO_LHS:
+ case ANIM_STD_CAR_GET_IN_LO_RHS:
+ case ANIM_STD_BOAT_DRIVE:
seatPosMult = m_pVehicleAnim->GetTimeLeft() / m_pVehicleAnim->hierarchy->totalLength;
break;
- case ANIM_CAR_CLOSEDOOR_LHS:
- case ANIM_CAR_CLOSEDOOR_LOW_LHS:
- case ANIM_CAR_CLOSEDOOR_RHS:
- case ANIM_CAR_CLOSEDOOR_LOW_RHS:
- case ANIM_CAR_SHUFFLE_RHS:
- case ANIM_CAR_LSHUFFLE_RHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_LHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_LO_LHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_RHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_LO_RHS:
+ case ANIM_STD_CAR_SHUFFLE_RHS:
+ case ANIM_STD_CAR_SHUFFLE_LO_RHS:
seatPosMult = 0.0f;
break;
- case ANIM_CAR_CLOSE_LHS:
- case ANIM_CAR_CLOSE_RHS:
- case ANIM_COACH_OPEN_L:
- case ANIM_COACH_OPEN_R:
- case ANIM_COACH_IN_L:
- case ANIM_COACH_IN_R:
- case ANIM_COACH_OUT_L:
+ case ANIM_STD_CAR_CLOSE_LHS:
+ case ANIM_STD_CAR_CLOSE_RHS:
+ case ANIM_STD_COACH_OPEN_LHS:
+ case ANIM_STD_COACH_OPEN_RHS:
+ case ANIM_STD_COACH_GET_IN_LHS:
+ case ANIM_STD_COACH_GET_IN_RHS:
+ case ANIM_STD_COACH_GET_OUT_LHS:
seatPosMult = 1.0f;
break;
default:
@@ -3203,10 +3203,10 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
} else {
#endif
currentZ = GetPosition().z;
- if (m_pVehicleAnim && vehAnim != ANIM_VAN_GETIN_L && vehAnim != ANIM_VAN_CLOSE_L && vehAnim != ANIM_VAN_CLOSE && vehAnim != ANIM_VAN_GETIN) {
+ if (m_pVehicleAnim && vehAnim != ANIM_STD_VAN_GET_IN_REAR_LHS && vehAnim != ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS && vehAnim != ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS && vehAnim != ANIM_STD_VAN_GET_IN_REAR_RHS) {
neededPos.z = autoZPos.z;
m_vecMoveSpeed = CVector(0.0f, 0.0f, 0.0f);
- } else if (neededPos.z < currentZ && m_pVehicleAnim && vehAnim != ANIM_VAN_CLOSE_L && vehAnim != ANIM_VAN_CLOSE) {
+ } else if (neededPos.z < currentZ && m_pVehicleAnim && vehAnim != ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS && vehAnim != ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS) {
adjustedTimeStep = Max(m_pVehicleAnim->timeStep, 0.1f);
// Smoothly change ped position
@@ -3227,8 +3227,8 @@ CPed::LineUpPedWithCar(PedLineUpPhase phase)
} else {
#endif
if (m_pVehicleAnim &&
- (vehAnim == ANIM_CAR_GETIN_RHS || vehAnim == ANIM_CAR_GETIN_LOW_RHS || vehAnim == ANIM_CAR_GETIN_LHS || vehAnim == ANIM_CAR_GETIN_LOW_LHS
- || vehAnim == ANIM_CAR_QJACK || vehAnim == ANIM_VAN_GETIN_L || vehAnim == ANIM_VAN_GETIN)) {
+ (vehAnim == ANIM_STD_CAR_GET_IN_RHS || vehAnim == ANIM_STD_CAR_GET_IN_LO_RHS || vehAnim == ANIM_STD_CAR_GET_IN_LHS || vehAnim == ANIM_STD_CAR_GET_IN_LO_LHS
+ || vehAnim == ANIM_STD_QUICKJACK || vehAnim == ANIM_STD_VAN_GET_IN_REAR_LHS || vehAnim == ANIM_STD_VAN_GET_IN_REAR_RHS)) {
adjustedTimeStep = Max(m_pVehicleAnim->timeStep, 0.1f);
// Smoothly change ped position
@@ -3358,9 +3358,9 @@ CPed::SetCarJack_AllClear(CVehicle *car, uint32 doorNode, uint32 doorFlag)
bUsesCollision = false;
if (m_vehDoor == CAR_DOOR_LF || m_vehDoor == CAR_DOOR_LR)
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, zDiff > 4.4f ? ANIM_CAR_ALIGNHI_LHS : ANIM_CAR_ALIGN_LHS, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, zDiff > 4.4f ? ANIM_STD_CAR_ALIGNHI_DOOR_LHS : ANIM_STD_CAR_ALIGN_DOOR_LHS, 4.0f);
else
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, zDiff > 4.4f ? ANIM_CAR_ALIGNHI_RHS : ANIM_CAR_ALIGN_RHS, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, zDiff > 4.4f ? ANIM_STD_CAR_ALIGNHI_DOOR_RHS : ANIM_STD_CAR_ALIGN_DOOR_RHS, 4.0f);
m_pVehicleAnim->SetFinishCallback(PedAnimAlignCB, this);
}
@@ -3408,14 +3408,14 @@ CPed::BeingDraggedFromCar(void)
PedLineUpPhase lineUpType;
if (!m_pVehicleAnim) {
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 100.0f);
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SIT);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 100.0f);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT);
if (!animAssoc) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LSIT);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_LO);
if (!animAssoc) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SITP);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_P);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_SITPLO);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_SIT_P_LO);
}
}
if (animAssoc)
@@ -3423,17 +3423,17 @@ CPed::BeingDraggedFromCar(void)
if (m_vehDoor == CAR_DOOR_LF || m_vehDoor == CAR_DOOR_LR) {
if (bWillBeQuickJacked) {
- enterAnim = ANIM_CAR_QJACKED;
+ enterAnim = ANIM_STD_QUICKJACKED;
} else if (m_pMyVehicle->bLowVehicle) {
- enterAnim = ANIM_CAR_LJACKED_LHS;
+ enterAnim = ANIM_STD_JACKEDCAR_LO_LHS;
} else {
- enterAnim = ANIM_CAR_JACKED_LHS;
+ enterAnim = ANIM_STD_JACKEDCAR_LHS;
}
} else if (m_vehDoor == CAR_DOOR_RF || m_vehDoor == CAR_DOOR_RR) {
if (m_pMyVehicle->bLowVehicle)
- enterAnim = ANIM_CAR_LJACKED_RHS;
+ enterAnim = ANIM_STD_JACKEDCAR_LO_RHS;
else
- enterAnim = ANIM_CAR_JACKED_RHS;
+ enterAnim = ANIM_STD_JACKEDCAR_RHS;
} else
dontRunAnim = true;
@@ -3454,7 +3454,7 @@ CPed::BeingDraggedFromCar(void)
#ifdef VC_PED_PORTS
if (m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE) {
if (m_pMyVehicle) {
- m_pMyVehicle->ProcessOpenDoor(m_vehDoor, NUM_ANIMS, m_pVehicleAnim->currentTime * 5.0f);
+ m_pMyVehicle->ProcessOpenDoor(m_vehDoor, ANIM_STD_NUM, m_pVehicleAnim->currentTime * 5.0f);
}
}
#endif
@@ -3534,16 +3534,16 @@ CPed::SetEnterCar_AllClear(CVehicle *car, uint32 doorNode, uint32 doorFlag)
#ifdef VC_PED_PORTS
// VC checks for handling flag, but we can't do that
if(car->GetModelIndex() == MI_SPEEDER)
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT, 100.0f);
else
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_BOAT_DRIVE, 100.0f);
PedSetInCarCB(nil, this);
bVehExitWillBeInstant = true;
#else
#ifndef FIX_BUGS
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DRIVE_BOAT, 100.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_BOAT_DRIVE, 100.0f);
#else
m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, car->GetDriverAnim(), 100.0f);
#endif
@@ -3555,15 +3555,15 @@ CPed::SetEnterCar_AllClear(CVehicle *car, uint32 doorNode, uint32 doorFlag)
} else {
if (zDiff > 4.4f) {
if (m_vehDoor == CAR_DOOR_RF || m_vehDoor == CAR_DOOR_RR)
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_ALIGNHI_RHS, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_ALIGNHI_DOOR_RHS, 4.0f);
else
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_ALIGNHI_LHS, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_ALIGNHI_DOOR_LHS, 4.0f);
} else {
if (m_vehDoor == CAR_DOOR_RF || m_vehDoor == CAR_DOOR_RR)
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_ALIGN_RHS, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_ALIGN_DOOR_RHS, 4.0f);
else
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_ALIGN_LHS, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_ALIGN_DOOR_LHS, 4.0f);
}
m_pVehicleAnim->SetFinishCallback(PedAnimAlignCB, this);
car->AutoPilot.m_nCruiseSpeed = 0;
@@ -3588,7 +3588,7 @@ CPed::EnterCar(void)
LineUpPedWithCar(LINE_UP_TO_CAR_START);
} else {
QuitEnteringCar();
- SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
}
}
@@ -3601,8 +3601,8 @@ CPed::QuitEnteringCar(void)
RestartNonPartialAnims();
- if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE))
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 100.0f);
+ if (!RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE))
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 100.0f);
if (veh) {
if (m_objective == OBJECTIVE_ENTER_CAR_AS_DRIVER || m_nPedState == PED_CARJACK)
@@ -3677,9 +3677,9 @@ CPed::SetExitBoat(CVehicle *boat)
#ifndef VC_PED_PORTS
SetPedState(PED_IDLE);
CVector firstPos = GetPosition();
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 100.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 100.0f);
if (boat->GetModelIndex() == MI_SPEEDER && boat->IsUpsideDown()) {
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_CRAWLOUT_RHS, 8.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CRAWLOUT_LHS, 8.0f);
m_pVehicleAnim->SetFinishCallback(PedSetOutCarCB, this);
m_vehDoor = CAR_DOOR_RF;
SetPedState(PED_EXIT_CAR);
@@ -3926,7 +3926,7 @@ CPed::SetExitCar(CVehicle *veh, uint32 wantedDoorNode)
if (m_pVehicleAnim && m_pVehicleAnim->flags & ASSOC_PARTIAL)
m_pVehicleAnim->blendDelta = -1000.0f;
SetMoveState(PEDMOVE_NONE);
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 100.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 100.0f);
RemoveInCarAnims();
veh->AutoPilot.m_nCruiseSpeed = 0;
if (teleportNeeded) {
@@ -3966,12 +3966,12 @@ CPed::SetExitCar(CVehicle *veh, uint32 wantedDoorNode)
switch (m_vehDoor) {
case CAR_DOOR_RF:
if (veh->bIsBus) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_COACH_OUT_L);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_COACH_GET_OUT_LHS);
} else {
if (isLow)
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_LOW_RHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_LO_RHS);
else
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_RHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_RHS);
if (addDoorSmoke)
AddYardieDoorSmoke(veh, CAR_DOOR_RF);
@@ -3979,21 +3979,21 @@ CPed::SetExitCar(CVehicle *veh, uint32 wantedDoorNode)
break;
case CAR_DOOR_RR:
if (veh->bIsVan) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_VAN_GETOUT);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_VAN_GET_OUT_REAR_RHS);
} else if (isLow) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_LOW_RHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_LO_RHS);
} else {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_RHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_RHS);
}
break;
case CAR_DOOR_LF:
if (veh->bIsBus) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_COACH_OUT_L);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_COACH_GET_OUT_LHS);
} else {
if (isLow)
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_LOW_LHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_LO_LHS);
else
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_LHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_LHS);
if (addDoorSmoke)
AddYardieDoorSmoke(veh, CAR_DOOR_LF);
@@ -4001,11 +4001,11 @@ CPed::SetExitCar(CVehicle *veh, uint32 wantedDoorNode)
break;
case CAR_DOOR_LR:
if (veh->bIsVan) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_VAN_GETOUT_L);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_VAN_GET_OUT_REAR_LHS);
} else if (isLow) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_LOW_LHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_LO_LHS);
} else {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_GETOUT_LHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_GETOUT_LHS);
}
break;
default:
@@ -4032,9 +4032,9 @@ CPed::SetExitCar(CVehicle *veh, uint32 wantedDoorNode)
m_pVehicleAnim->SetFinishCallback(PedAnimStepOutCarCB, this);
} else {
if (m_vehDoor == CAR_DOOR_RF || m_vehDoor == CAR_DOOR_RR) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_CRAWLOUT_RHS2);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CRAWLOUT_RHS);
} else if (m_vehDoor == CAR_DOOR_LF || m_vehDoor == CAR_DOOR_LR) {
- m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_CRAWLOUT_RHS);
+ m_pVehicleAnim = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CRAWLOUT_LHS);
}
m_pVehicleAnim->SetFinishCallback(PedSetOutCarCB, this);
}
@@ -4067,7 +4067,7 @@ CPed::ExitCar(void)
if (m_pSeekTarget) {
// Car is upside down
if (m_pMyVehicle->GetUp().z > -0.8f) {
- if (exitAnim == ANIM_CAR_CLOSE_RHS || exitAnim == ANIM_CAR_CLOSE_LHS || animTime > 0.3f)
+ if (exitAnim == ANIM_STD_CAR_CLOSE_RHS || exitAnim == ANIM_STD_CAR_CLOSE_LHS || animTime > 0.3f)
LineUpPedWithCar(LINE_UP_TO_CAR_END);
else
LineUpPedWithCar((m_pMyVehicle->GetModelIndex() == MI_DODO ? LINE_UP_TO_CAR_END : LINE_UP_TO_CAR_START));
@@ -4086,7 +4086,7 @@ CPed::ExitCar(void)
}
}
if (foundPed && animTime > 0.4f && foundPed->IsPedInControl())
- foundPed->SetFall(1000, ANIM_KO_SKID_FRONT, 1);
+ foundPed->SetFall(1000, ANIM_STD_HIGHIMPACT_FRONT, 1);
}
}
@@ -4248,7 +4248,7 @@ CPed::SetAnimOffsetForEnterOrExitVehicle(void)
{
// FIX: If there were no translations on enter anims, there were overflows all over this function.
- CAnimBlendHierarchy *enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_CAR_JACKED_LHS)->hierarchy;
+ CAnimBlendHierarchy *enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_STD_JACKEDCAR_LHS)->hierarchy;
CAnimBlendSequence *seq = enterAssoc->sequences;
CAnimManager::UncompressAnimation(enterAssoc);
if (seq->numFrames > 0) {
@@ -4260,7 +4260,7 @@ CPed::SetAnimOffsetForEnterOrExitVehicle(void)
}
}
- enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_CAR_GETIN_LHS)->hierarchy;
+ enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_STD_CAR_GET_IN_LHS)->hierarchy;
seq = enterAssoc->sequences;
CAnimManager::UncompressAnimation(enterAssoc);
if (seq->numFrames > 0) {
@@ -4272,7 +4272,7 @@ CPed::SetAnimOffsetForEnterOrExitVehicle(void)
}
}
- enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_CAR_GETIN_LOW_LHS)->hierarchy;
+ enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_STD_CAR_GET_IN_LO_LHS)->hierarchy;
seq = enterAssoc->sequences;
CAnimManager::UncompressAnimation(enterAssoc);
if (seq->numFrames > 0) {
@@ -4284,7 +4284,7 @@ CPed::SetAnimOffsetForEnterOrExitVehicle(void)
}
}
- enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_CAR_QJACKED)->hierarchy;
+ enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_STD_QUICKJACKED)->hierarchy;
seq = enterAssoc->sequences;
CAnimManager::UncompressAnimation(enterAssoc);
if (seq->numFrames > 0) {
@@ -4296,7 +4296,7 @@ CPed::SetAnimOffsetForEnterOrExitVehicle(void)
}
}
- enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_VAN_GETIN_L)->hierarchy;
+ enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_STD_VAN_GET_IN_REAR_LHS)->hierarchy;
seq = enterAssoc->sequences;
CAnimManager::UncompressAnimation(enterAssoc);
if (seq->numFrames > 0) {
@@ -4308,7 +4308,7 @@ CPed::SetAnimOffsetForEnterOrExitVehicle(void)
}
}
- enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_TRAIN_GETOUT)->hierarchy;
+ enterAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, ANIM_STD_TRAIN_GETOUT)->hierarchy;
seq = enterAssoc->sequences;
CAnimManager::UncompressAnimation(enterAssoc);
if (seq->numFrames > 0) {
@@ -4614,7 +4614,7 @@ CPed::SetEnterTrain(CVehicle *train, uint32 unused)
m_pMyVehicle->RegisterReference((CEntity **) &m_pMyVehicle);
SetPedState(PED_ENTER_TRAIN);
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_TRAIN_GETIN, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_TRAIN_GETIN, 4.0f);
m_pVehicleAnim->SetFinishCallback(PedSetInTrainCB, this);
bUsesCollision = false;
LineUpPedWithTrain();
@@ -4688,7 +4688,7 @@ CPed::SetExitTrain(CVehicle* train)
GetNearestTrainPedPosition(train, exitPos);
*/
SetPedState(PED_EXIT_TRAIN);
- m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_TRAIN_GETOUT, 4.0f);
+ m_pVehicleAnim = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_TRAIN_GETOUT, 4.0f);
m_pVehicleAnim->SetFinishCallback(PedSetOutTrainCB, this);
bUsesCollision = false;
LineUpPedWithTrain();
@@ -5060,16 +5060,16 @@ CPed::SetDuck(uint32 time)
return;
if (bCrouchWhenShooting && (m_nPedState == PED_ATTACK || m_nPedState == PED_AIM_GUN)) {
- CAnimBlendAssociation *duckAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_LOW);
+ CAnimBlendAssociation *duckAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_LOW);
if (!duckAssoc || duckAssoc->blendDelta < 0.0f) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DUCK_LOW, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_DUCK_LOW, 4.0f);
bIsDucking = true;
m_duckTimer = CTimer::GetTimeInMilliseconds() + time;
}
} else {
- CAnimBlendAssociation *duckAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_DOWN);
+ CAnimBlendAssociation *duckAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_DOWN);
if (!duckAssoc || duckAssoc->blendDelta < 0.0f) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_DUCK_DOWN, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_DUCK_DOWN, 4.0f);
bIsDucking = true;
m_duckTimer = CTimer::GetTimeInMilliseconds() + time;
}
@@ -5086,9 +5086,9 @@ CPed::Duck(void)
void
CPed::ClearDuck(void)
{
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_DOWN);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_DOWN);
if (!animAssoc) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DUCK_LOW);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_DUCK_LOW);
if (!animAssoc) {
bIsDucking = false;
@@ -5102,9 +5102,9 @@ CPed::ClearDuck(void)
if (m_nPedState != PED_ATTACK && m_nPedState != PED_AIM_GUN)
return;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RBLOCK_CSHOOT);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RBLOCK_SHOOT);
if (!animAssoc || animAssoc->blendDelta < 0.0f) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_RBLOCK_CSHOOT, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_RBLOCK_SHOOT, 4.0f);
}
}
@@ -5154,9 +5154,9 @@ CPed::PedAnimDoorCloseRollingCB(CAnimBlendAssociation* animAssoc, void* arg)
animAssoc->blendDelta = -1000.0f;
if (veh->bLowVehicle) {
- veh->ProcessOpenDoor(CAR_DOOR_LF, ANIM_CAR_ROLLDOOR_LOW, 1.0f);
+ veh->ProcessOpenDoor(CAR_DOOR_LF, ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS, 1.0f);
} else {
- veh->ProcessOpenDoor(CAR_DOOR_LF, ANIM_CAR_ROLLDOOR, 1.0f);
+ veh->ProcessOpenDoor(CAR_DOOR_LF, ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS, 1.0f);
}
veh->m_nGettingOutFlags &= ~CAR_DOOR_FLAG_LF;
@@ -5235,40 +5235,40 @@ CPed::RemoveInCarAnims(void)
CAnimBlendAssociation *animAssoc;
if (m_pMyVehicle && m_pMyVehicle->bLowVehicle) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_LOW_L);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_LEFT_LO);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_LOW_R);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_RIGHT_LO);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_L);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVEBY_LEFT);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_R);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVEBY_RIGHT);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
} else {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_L);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_LEFT);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_R);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVE_RIGHT);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_L);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVEBY_LEFT);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVEBY_R);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_DRIVEBY_RIGHT);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
}
#ifdef VC_PED_PORTS
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_DRIVE_BOAT);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_BOAT_DRIVE);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
#endif
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_LB);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_LOOKBEHIND);
if (animAssoc)
animAssoc->blendDelta = -1000.0f;
}
diff --git a/src/peds/PedFight.cpp b/src/peds/PedFight.cpp
index 8625f23e..c03d492a 100644
--- a/src/peds/PedFight.cpp
+++ b/src/peds/PedFight.cpp
@@ -29,30 +29,30 @@ RpClump *flyingClumpTemp;
// This is beta fistfite.dat array. Not used anymore since they're being fetched from fistfite.dat.
FightMove tFightMoves[NUM_FIGHTMOVES] = {
- {NUM_ANIMS, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_PUNCH_R, 0.2f, 8.0f / 30.0f, 0.0f, 0.3f, HITLEVEL_HIGH, 1, 0},
- {ANIM_FIGHT_IDLE, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_FIGHT_SH_F, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_FIGHT_KNEE, 4.0f / 30.0f, 0.2f, 0.0f, 0.6f, HITLEVEL_LOW, 2, 0},
- {ANIM_FIGHT_HEAD, 4.0f / 30.0f, 0.2f, 0.0f, 0.7f, HITLEVEL_HIGH, 3, 0},
- {ANIM_FIGHT_PUNCH, 4.0f / 30.0f, 7.0f / 30.0f, 10.0f / 30.0f, 0.4f, HITLEVEL_HIGH, 1, 0},
- {ANIM_FIGHT_LHOOK, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.4f, HITLEVEL_HIGH, 3, 0},
- {ANIM_FIGHT_KICK, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.5, HITLEVEL_MEDIUM, 2, 0},
- {ANIM_FIGHT_LONGKICK, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.5, HITLEVEL_MEDIUM, 4, 0},
- {ANIM_FIGHT_ROUNDHOUSE, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.6f, HITLEVEL_MEDIUM, 4, 0},
- {ANIM_FIGHT_BODYBLOW, 5.0f / 30.0f, 7.0f / 30.0f, 0.0f, 0.35f, HITLEVEL_LOW, 2, 0},
- {ANIM_KICK_FLOOR, 10.0f / 30.0f, 14.0f / 30.0f, 0.0f, 0.4f, HITLEVEL_GROUND, 1, 0},
- {ANIM_HIT_FRONT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_BACK, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_RIGHT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_LEFT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_BODYBLOW, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_CHEST, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_WALK, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_FLOOR_HIT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_HIT_BEHIND, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
- {ANIM_FIGHT2_IDLE, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_NUM, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_PUNCH, 0.2f, 8.0f / 30.0f, 0.0f, 0.3f, HITLEVEL_HIGH, 1, 0},
+ {ANIM_STD_FIGHT_IDLE, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_FIGHT_SHUFFLE_F, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_FIGHT_KNEE, 4.0f / 30.0f, 0.2f, 0.0f, 0.6f, HITLEVEL_LOW, 2, 0},
+ {ANIM_STD_FIGHT_HEAD, 4.0f / 30.0f, 0.2f, 0.0f, 0.7f, HITLEVEL_HIGH, 3, 0},
+ {ANIM_STD_FIGHT_PUNCH, 4.0f / 30.0f, 7.0f / 30.0f, 10.0f / 30.0f, 0.4f, HITLEVEL_HIGH, 1, 0},
+ {ANIM_STD_FIGHT_LHOOK, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.4f, HITLEVEL_HIGH, 3, 0},
+ {ANIM_STD_FIGHT_KICK, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.5, HITLEVEL_MEDIUM, 2, 0},
+ {ANIM_STD_FIGHT_LONGKICK, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.5, HITLEVEL_MEDIUM, 4, 0},
+ {ANIM_STD_FIGHT_ROUNDHOUSE, 8.0f / 30.0f, 10.0f / 30.0f, 0.0f, 0.6f, HITLEVEL_MEDIUM, 4, 0},
+ {ANIM_STD_FIGHT_BODYBLOW, 5.0f / 30.0f, 7.0f / 30.0f, 0.0f, 0.35f, HITLEVEL_LOW, 2, 0},
+ {ANIM_STD_KICKGROUND, 10.0f / 30.0f, 14.0f / 30.0f, 0.0f, 0.4f, HITLEVEL_GROUND, 1, 0},
+ {ANIM_STD_HIT_FRONT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_BACK, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_RIGHT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_LEFT, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_BODYBLOW, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_CHEST, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_HEAD, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_WALK, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_FLOOR, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_HIT_BEHIND, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
+ {ANIM_STD_FIGHT_2IDLE, 0.0f, 0.0f, 0.0f, 0.0f, HITLEVEL_NULL, 0, 0},
};
static PedOnGroundState
@@ -247,7 +247,7 @@ CPed::SetAttack(CEntity *victim)
if (victim && victim->IsPed())
victimPed = (CPed*)victim;
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_ARMED);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_BIGGUN);
if (animAssoc) {
animAssoc->blendDelta = -1000.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -256,12 +256,12 @@ CPed::SetAttack(CEntity *victim)
if (m_attackTimer > CTimer::GetTimeInMilliseconds() || m_nWaitState == WAITSTATE_SURPRISE)
return;
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_HGUN_RELOAD)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_HGUN_RELOAD)) {
bIsAttacking = false;
return;
}
- if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_AK_RELOAD)) {
+ if (RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_AK_RELOAD)) {
if (!IsPlayer() || m_nPedState != PED_ATTACK || ((CPlayerPed*)this)->m_bHaveTargetSelected)
bIsAttacking = false;
else
@@ -351,7 +351,7 @@ CPed::SetAttack(CEntity *victim)
SetPedState(PED_ATTACK);
SetMoveState(PEDMOVE_NONE);
if (bCrouchWhenShooting) {
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_RBLOCK_CSHOOT, 4.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_RBLOCK_SHOOT, 4.0f);
} else {
float animDelta = 8.0f;
if (curWeapon->m_eWeaponFire == WEAPON_FIRE_MELEE)
@@ -418,7 +418,7 @@ CPed::ClearAttackByRemovingAnim(void)
weaponAssoc = RpAnimBlendClumpGetAssociation(GetClump(), weapon->m_Anim2ToPlay);
if (!weaponAssoc && weapon->IsFlagSet(WEAPONFLAG_THROW))
- weaponAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_THROWU);
+ weaponAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_THROW_UNDER);
if (!weaponAssoc) {
ClearAttack();
@@ -440,27 +440,27 @@ CPed::FinishedAttackCB(CAnimBlendAssociation *attackAssoc, void *arg)
if (attackAssoc) {
switch (attackAssoc->animId) {
- case ANIM_WEAPON_START_THROW:
+ case ANIM_STD_START_THROW:
// what?!
if ((!ped->IsPlayer() || ((CPlayerPed*)ped)->m_bHaveTargetSelected) && ped->IsPlayer()) {
attackAssoc->blendDelta = -1000.0f;
- newAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_WEAPON_THROWU);
+ newAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_THROW_UNDER);
} else {
attackAssoc->blendDelta = -1000.0f;
- newAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_WEAPON_THROW);
+ newAnim = CAnimManager::AddAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_WEAPON_THROW);
}
newAnim->SetFinishCallback(FinishedAttackCB, ped);
return;
- case ANIM_FIGHT_PPUNCH:
+ case ANIM_STD_PARTIAL_PUNCH:
attackAssoc->blendDelta = -8.0f;
attackAssoc->flags |= ASSOC_DELETEFADEDOUT;
ped->ClearAttack();
return;
- case ANIM_WEAPON_THROW:
- case ANIM_WEAPON_THROWU:
+ case ANIM_STD_WEAPON_THROW:
+ case ANIM_STD_THROW_UNDER:
if (ped->GetWeapon()->m_nAmmoTotal > 0) {
currentWeapon = CWeaponInfo::GetWeaponInfo(ped->GetWeapon()->m_eWeaponType);
ped->AddWeaponModel(currentWeapon->m_nModelId);
@@ -535,16 +535,16 @@ CPed::Attack(void)
weaponAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ourWeapon->m_AnimToPlay);
attackShouldContinue = bIsAttacking;
reloadAnimAssoc = nil;
- reloadAnim = NUM_ANIMS;
+ reloadAnim = ANIM_STD_NUM;
delayBetweenAnimAndFire = ourWeapon->m_fAnimFrameFire;
weaponAnim = ourWeapon->m_AnimToPlay;
- if (weaponAnim == ANIM_WEAPON_HGUN_BODY)
- reloadAnim = ANIM_HGUN_RELOAD;
- else if (weaponAnim == ANIM_WEAPON_AK_BODY)
- reloadAnim = ANIM_AK_RELOAD;
+ if (weaponAnim == ANIM_STD_WEAPON_HGUN_BODY)
+ reloadAnim = ANIM_STD_HGUN_RELOAD;
+ else if (weaponAnim == ANIM_STD_WEAPON_AK_BODY)
+ reloadAnim = ANIM_STD_AK_RELOAD;
- if (reloadAnim != NUM_ANIMS)
+ if (reloadAnim != ANIM_STD_NUM)
reloadAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), reloadAnim);
if (bIsDucking)
@@ -566,7 +566,7 @@ CPed::Attack(void)
// Long throw granade, molotov
if (!weaponAnimAssoc && ourWeapon->IsFlagSet(WEAPONFLAG_THROW)) {
- weaponAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WEAPON_THROWU);
+ weaponAnimAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_THROW_UNDER);
delayBetweenAnimAndFire = 0.2f;
}
@@ -619,7 +619,7 @@ CPed::Attack(void)
firePos = GetMatrix() * firePos;
} else if (GetWeapon()->m_eWeaponType != WEAPONTYPE_UNARMED) {
- TransformToNode(firePos, weaponAnimAssoc->animId == ANIM_KICK_FLOOR ? PED_FOOTR : PED_HANDR);
+ TransformToNode(firePos, weaponAnimAssoc->animId == ANIM_STD_KICKGROUND ? PED_FOOTR : PED_HANDR);
} else {
firePos = GetMatrix() * firePos;
}
@@ -636,7 +636,7 @@ CPed::Attack(void)
if (GetWeapon()->m_eWeaponState != WEAPONSTATE_MELEE_MADECONTACT) {
// If reloading just began, start the animation
// Last condition will always return true, even IDA hides it
- if (GetWeapon()->m_eWeaponState == WEAPONSTATE_RELOADING && reloadAnim != NUM_ANIMS /* && !reloadAnimAssoc*/) {
+ if (GetWeapon()->m_eWeaponState == WEAPONSTATE_RELOADING && reloadAnim != ANIM_STD_NUM /* && !reloadAnimAssoc*/) {
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, reloadAnim, 8.0f);
ClearLookFlag();
ClearAimFlag();
@@ -646,9 +646,9 @@ CPed::Attack(void)
return;
}
} else {
- if (weaponAnimAssoc->animId == ANIM_WEAPON_BAT_V || weaponAnimAssoc->animId == ANIM_WEAPON_BAT_H) {
+ if (weaponAnimAssoc->animId == ANIM_STD_WEAPON_BAT_V || weaponAnimAssoc->animId == ANIM_STD_WEAPON_BAT_H) {
DMAudio.PlayOneShot(m_audioEntityId, SOUND_WEAPON_BAT_ATTACK, 1.0f);
- } else if (weaponAnimAssoc->animId == ANIM_FIGHT_PPUNCH) {
+ } else if (weaponAnimAssoc->animId == ANIM_STD_PARTIAL_PUNCH) {
DMAudio.PlayOneShot(m_audioEntityId, SOUND_FIGHT_PUNCH_39, 0.0f);
}
@@ -712,7 +712,7 @@ CPed::Attack(void)
weaponAnim = weaponAnimAssoc->animId;
if (ourWeapon->m_eWeaponFire != WEAPON_FIRE_MELEE || CheckForPedsOnGroundToAttack(this, nil) < PED_ON_THE_FLOOR) {
- if (weaponAnim != ourWeapon->m_Anim2ToPlay || weaponAnim == ANIM_RBLOCK_CSHOOT) {
+ if (weaponAnim != ourWeapon->m_Anim2ToPlay || weaponAnim == ANIM_STD_RBLOCK_SHOOT) {
weaponAnimAssoc->Start(ourWeapon->m_fAnimLoopStart);
} else {
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ourWeapon->m_AnimToPlay, 8.0f);
@@ -785,16 +785,16 @@ CPed::StartFightAttack(uint8 buttonPressure)
SetPedState(PED_FIGHT);
m_fightButtonPressure = 0;
RpAnimBlendClumpRemoveAssociations(GetClump(), ASSOC_REPEAT);
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WALK_START);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_STARTWALK);
if (animAssoc) {
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
animAssoc->blendDelta = -1000.0f;
}
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP1);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP_R);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP2);
if (animAssoc) {
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -805,7 +805,7 @@ CPed::StartFightAttack(uint8 buttonPressure)
SetMoveState(PEDMOVE_NONE);
m_nStoredMoveState = PEDMOVE_NONE;
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_IDLE)->blendAmount = 1.0f;
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FIGHT_IDLE)->blendAmount = 1.0f;
CPed *pedOnGround = nil;
if (IsPlayer() && CheckForPedsOnGroundToAttack(this, &pedOnGround) > PED_IN_FRONT_OF_ATTACKER) {
@@ -845,7 +845,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
if (hitLevel == HITLEVEL_GROUND) {
CAnimBlendAssociation *floorHitAssoc;
if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL)) {
- floorHitAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
+ floorHitAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR_FRONT, 8.0f);
} else {
floorHitAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[FIGHTMOVE_HITONFLOOR].animId, 8.0f);
}
@@ -867,8 +867,8 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
} else if (m_nPedState == PED_FALL) {
if (hitLevel == HITLEVEL_GROUND && !IsPedHeadAbovePos(-0.3f)) {
CAnimBlendAssociation *floorHitAssoc = RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL) ?
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f) :
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR_FRONT, 8.0f) :
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR, 8.0f);
if (floorHitAssoc) {
floorHitAssoc->flags &= ~ASSOC_FADEOUTWHENDONE;
floorHitAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -887,16 +887,16 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
AnimationId shotAnim;
switch (direction) {
case 1:
- shotAnim = ANIM_SHOT_LEFT_PARTIAL;
+ shotAnim = ANIM_STD_HITBYGUN_LEFT;
break;
case 2:
- shotAnim = ANIM_SHOT_BACK_PARTIAL;
+ shotAnim = ANIM_STD_HITBYGUN_BACK;
break;
case 3:
- shotAnim = ANIM_SHOT_RIGHT_PARTIAL;
+ shotAnim = ANIM_STD_HITBYGUN_RIGHT;
break;
default:
- shotAnim = ANIM_SHOT_FRONT_PARTIAL;
+ shotAnim = ANIM_STD_HITBYGUN_FRONT;
break;
}
CAnimBlendAssociation *shotAssoc = RpAnimBlendClumpGetAssociation(GetClump(), shotAnim);
@@ -914,16 +914,16 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
#ifndef VC_PED_PORTS
switch (direction) {
case 1:
- SetFall(500, ANIM_KO_SPIN_R, false);
+ SetFall(500, ANIM_STD_HIGHIMPACT_LEFT, false);
break;
case 2:
- SetFall(500, ANIM_KO_SKID_BACK, false);
+ SetFall(500, ANIM_STD_HIGHIMPACT_BACK, false);
break;
case 3:
- SetFall(500, ANIM_KO_SPIN_L, false);
+ SetFall(500, ANIM_STD_HIGHIMPACT_RIGHT, false);
break;
default:
- SetFall(500, ANIM_KO_SHOT_STOM, false);
+ SetFall(500, ANIM_STD_KO_SHOT_STOMACH, false);
break;
}
#else
@@ -931,30 +931,30 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
AnimationId hitAnim;
switch (direction) {
case 1:
- hitAnim = ANIM_KO_SPIN_R;
+ hitAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
if (CGeneral::GetRandomNumber() & 1) {
fall = false;
- hitAnim = ANIM_HIT_BACK;
+ hitAnim = ANIM_STD_HIT_BACK;
} else {
- hitAnim = ANIM_KO_SKID_BACK;
+ hitAnim = ANIM_STD_HIGHIMPACT_BACK;
}
break;
case 3:
- hitAnim = ANIM_KO_SPIN_L;
+ hitAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
if (hitLevel == HITLEVEL_LOW) {
- hitAnim = ANIM_KO_SHOT_STOM;
+ hitAnim = ANIM_STD_KO_SHOT_STOMACH;
} else if (CGeneral::GetRandomNumber() & 1) {
fall = false;
- hitAnim = ANIM_HIT_WALK;
+ hitAnim = ANIM_STD_HIT_WALK;
} else if (CGeneral::GetRandomNumber() & 1) {
fall = false;
- hitAnim = ANIM_HIT_HEAD;
+ hitAnim = ANIM_STD_HIT_HEAD;
} else {
- hitAnim = ANIM_KO_SHOT_FACE;
+ hitAnim = ANIM_STD_KO_SHOT_FACE;
}
break;
}
@@ -981,15 +981,15 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
case HITLEVEL_LOW:
#ifndef VC_PED_PORTS
if (direction == 2) {
- SetFall(1000, ANIM_KO_SKID_BACK, false);
+ SetFall(1000, ANIM_STD_HIGHIMPACT_BACK, false);
return;
}
#else
if (direction == 2 && (!IsPlayer() || ((CGeneral::GetRandomNumber() & 1) && m_fHealth < 30.0f))) {
- SetFall(1000, ANIM_KO_SKID_BACK, false);
+ SetFall(1000, ANIM_STD_HIGHIMPACT_BACK, false);
return;
} else if (direction != 2 && !IsPlayer() && (CGeneral::GetRandomNumber() & 1) && m_fHealth < 30.0f) {
- SetFall(1000, ANIM_KO_SHOT_STOM, false);
+ SetFall(1000, ANIM_STD_KO_SHOT_STOMACH, false);
return;
}
#endif
@@ -1061,14 +1061,14 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
SetPedState(PED_FIGHT);
m_fightButtonPressure = 0;
RpAnimBlendClumpRemoveAssociations(GetClump(), ASSOC_REPEAT);
- CAnimBlendAssociation *walkStartAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WALK_START);
+ CAnimBlendAssociation *walkStartAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_STARTWALK);
if (walkStartAssoc) {
walkStartAssoc->flags |= ASSOC_DELETEFADEDOUT;
walkStartAssoc->blendDelta = -1000.0f;
}
- CAnimBlendAssociation *walkStopAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP);
+ CAnimBlendAssociation *walkStopAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP1);
if (!walkStopAssoc)
- walkStopAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP_R);
+ walkStopAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP2);
if (walkStopAssoc) {
walkStopAssoc->flags |= ASSOC_DELETEFADEDOUT;
walkStopAssoc->blendDelta = -1000.0f;
@@ -1076,7 +1076,7 @@ CPed::StartFightDefend(uint8 direction, uint8 hitLevel, uint8 unk)
}
SetMoveState(PEDMOVE_NONE);
m_nStoredMoveState = PEDMOVE_NONE;
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_IDLE)->blendAmount = 1.0f;
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FIGHT_IDLE)->blendAmount = 1.0f;
CAnimBlendAssociation *moveAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, tFightMoves[m_curFightMove].animId, 8.0f);
moveAssoc->SetFinishCallback(FinishFightMoveCB, this);
m_fightState = FIGHTSTATE_NO_MOVE;
@@ -1445,22 +1445,22 @@ CPed::EndFight(uint8 endType)
m_curFightMove = FIGHTMOVE_NULL;
RestorePreviousState();
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FIGHT_IDLE);
if (animAssoc)
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
switch (endType) {
case ENDFIGHT_NORMAL:
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 8.0f);
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT2_IDLE, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FIGHT_2IDLE, 8.0f);
break;
case ENDFIGHT_WITH_A_STEP:
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 1.0f);
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_WALK_START, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 1.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_STARTWALK, 8.0f);
break;
case ENDFIGHT_FAST:
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 8.0f);
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT2_IDLE, 8.0f)->speed = 2.0f;
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 8.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_FIGHT_2IDLE, 8.0f)->speed = 2.0f;
break;
default:
break;
@@ -1656,7 +1656,7 @@ CPed::FightStrike(CVector &touchedNodePos)
|| GetWeapon()->m_eWeaponType != WEAPONTYPE_UNARMED && IsPlayer()
|| nearPed->m_pedStats->m_flags & STAT_ONE_HIT_KNOCKDOWN)) {
- nearPed->SetFall(0, (AnimationId)(direction + ANIM_KO_SKID_FRONT), 0);
+ nearPed->SetFall(0, (AnimationId)(direction + ANIM_STD_HIGHIMPACT_FRONT), 0);
if (nearPed->m_nPedState == PED_FALL)
nearPed->bIsStanding = false;
}
@@ -1778,7 +1778,7 @@ CPed::LoadFightData(void)
animAssoc = CAnimManager::GetAnimAssociation(ASSOCGRP_STD, animName);
tFightMoves[moveId].animId = (AnimationId)animAssoc->animId;
} else {
- tFightMoves[moveId].animId = ANIM_WALK;
+ tFightMoves[moveId].animId = ANIM_STD_WALK;
}
moveId++;
}
@@ -1802,7 +1802,7 @@ CPed::SetInvestigateEvent(eEventType event, CVector2D pos, float distanceToCount
if (m_eventType >= EVENT_ICECREAM)
m_lookTimer = 0;
else
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_HANDSCOWER, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_HANDSCOWER, 4.0f);
}
@@ -1842,7 +1842,7 @@ CPed::InvestigateEvent(void)
case EVENT_HIT_AND_RUN_COP:
if (CTimer::GetTimeInMilliseconds() > m_lookTimer) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ROAD_CROSS);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_ROADCROSS);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
@@ -1854,7 +1854,7 @@ CPed::InvestigateEvent(void)
} else if (CGeneral::GetRandomNumber() & 3) {
ClearLookFlag();
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_ROAD_CROSS, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_ROADCROSS, 4.0f);
SetLookTimer(CGeneral::GetRandomNumberInRange(1000, 2500));
Say(SOUND_PED_CHAT_EVENT);
@@ -1868,16 +1868,16 @@ CPed::InvestigateEvent(void)
case EVENT_EXPLOSION:
if (bHasACamera && CTimer::GetTimeInMilliseconds() > m_lookTimer) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CAM);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_CAM);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
- if (animAssoc && animAssoc->animId == ANIM_IDLE_CAM) {
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 4.0f);
+ if (animAssoc && animAssoc->animId == ANIM_STD_IDLE_CAM) {
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 4.0f);
SetLookTimer(CGeneral::GetRandomNumberInRange(1000, 2500));
} else if (CGeneral::GetRandomNumber() & 3) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_CAM, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_CAM, 4.0f);
SetLookTimer(CGeneral::GetRandomNumberInRange(2500, 5000));
Say(SOUND_PED_CHAT_EVENT);
@@ -1886,30 +1886,30 @@ CPed::InvestigateEvent(void)
}
} else if (CTimer::GetTimeInMilliseconds() > m_lookTimer) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_HBHB);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_HBHB);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_XPRESS_SCRATCH);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_XPRESS_SCRATCH);
- if (animAssoc && animAssoc->animId == ANIM_IDLE_STANCE) {
+ if (animAssoc && animAssoc->animId == ANIM_STD_IDLE) {
if (CGeneral::GetRandomNumber() & 1)
- animToPlay = ANIM_IDLE_HBHB;
+ animToPlay = ANIM_STD_IDLE_HBHB;
else
- animToPlay = ANIM_XPRESS_SCRATCH;
+ animToPlay = ANIM_STD_XPRESS_SCRATCH;
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, animToPlay, 4.0f);
SetLookTimer(CGeneral::GetRandomNumberInRange(1500, 4000));
- } else if (animAssoc && animAssoc->animId == ANIM_IDLE_HBHB) {
+ } else if (animAssoc && animAssoc->animId == ANIM_STD_IDLE_HBHB) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
if (CGeneral::GetRandomNumber() & 1) {
- animToPlay = ANIM_IDLE_STANCE;
+ animToPlay = ANIM_STD_IDLE;
animGroup = m_animGroup;
} else {
- animToPlay = ANIM_XPRESS_SCRATCH;
+ animToPlay = ANIM_STD_XPRESS_SCRATCH;
animGroup = ASSOCGRP_STD;
}
@@ -1918,10 +1918,10 @@ CPed::InvestigateEvent(void)
} else {
if (CGeneral::GetRandomNumber() & 1) {
- animToPlay = ANIM_IDLE_STANCE;
+ animToPlay = ANIM_STD_IDLE;
animGroup = m_animGroup;
} else {
- animToPlay = ANIM_IDLE_HBHB;
+ animToPlay = ANIM_STD_IDLE_HBHB;
animGroup = ASSOCGRP_STD;
}
@@ -1938,26 +1938,26 @@ CPed::InvestigateEvent(void)
if (CTimer::GetTimeInMilliseconds() > m_lookTimer) {
if (m_lookTimer) {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ROAD_CROSS);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_ROADCROSS);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
if (m_eventType == EVENT_ICECREAM)
- animToPlay = ANIM_IDLE_CHAT;
+ animToPlay = ANIM_STD_CHAT;
else
- animToPlay = ANIM_XPRESS_SCRATCH;
+ animToPlay = ANIM_STD_XPRESS_SCRATCH;
CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, animToPlay,4.0f);
SetLookTimer(CGeneral::GetRandomNumberInRange(2000, 5000));
} else {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CHAT);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CHAT);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
ClearInvestigateEvent();
} else {
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_XPRESS_SCRATCH);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_XPRESS_SCRATCH);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -1966,7 +1966,7 @@ CPed::InvestigateEvent(void)
}
}
} else {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_ROAD_CROSS, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_ROADCROSS, 4.0f);
SetLookTimer(CGeneral::GetRandomNumberInRange(1000, 2500));
}
}
@@ -2009,13 +2009,13 @@ CPed::InvestigateEvent(void)
void
CPed::ClearInvestigateEvent(void)
{
- CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_ROAD_CROSS);
+ CAnimBlendAssociation *animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_ROADCROSS);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_XPRESS_SCRATCH);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_XPRESS_SCRATCH);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_HBHB);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_HBHB);
if (!animAssoc)
- animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_CHAT);
+ animAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CHAT);
if (animAssoc) {
animAssoc->blendDelta = -8.0f;
animAssoc->flags |= ASSOC_DELETEFADEDOUT;
@@ -2037,7 +2037,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
CPlayerPed *player = FindPlayerPed();
float dieDelta = 4.0f;
float dieSpeed = 0.0f;
- AnimationId dieAnim = ANIM_KO_SHOT_FRONT1;
+ AnimationId dieAnim = ANIM_STD_KO_FRONT;
bool headShot = false;
bool willLinger = false;
int random;
@@ -2069,14 +2069,14 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (m_nPedState == PED_FALL || m_nPedState == PED_GETUP) {
if (!IsPedHeadAbovePos(-0.3f)) {
if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
- dieAnim = ANIM_FLOOR_HIT_F;
+ dieAnim = ANIM_STD_HIT_FLOOR_FRONT;
else
- dieAnim = ANIM_FLOOR_HIT;
+ dieAnim = ANIM_STD_HIT_FLOOR;
dieDelta *= 2.0f;
dieSpeed = 0.5f;
detectDieAnim = false;
} else if (m_nPedState == PED_FALL) {
- dieAnim = NUM_ANIMS;
+ dieAnim = ANIM_STD_NUM;
detectDieAnim = false;
}
}
@@ -2088,28 +2088,28 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (m_nPedState == PED_FALL) {
if (IsPedHeadAbovePos(-0.3f)) {
- dieAnim = NUM_ANIMS;
+ dieAnim = ANIM_STD_NUM;
} else {
if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
- dieAnim = ANIM_FLOOR_HIT_F;
+ dieAnim = ANIM_STD_HIT_FLOOR_FRONT;
else
- dieAnim = ANIM_FLOOR_HIT;
+ dieAnim = ANIM_STD_HIT_FLOOR;
dieDelta = dieDelta * 2.0f;
dieSpeed = 0.5f;
}
} else {
switch (direction) {
case 0:
- dieAnim = ANIM_KO_SKID_FRONT;
+ dieAnim = ANIM_STD_HIGHIMPACT_FRONT;
break;
case 1:
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
- dieAnim = ANIM_KO_SKID_BACK;
+ dieAnim = ANIM_STD_HIGHIMPACT_BACK;
break;
case 3:
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
break;
@@ -2122,28 +2122,28 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (m_nPedState == PED_FALL) {
if (IsPedHeadAbovePos(-0.3f)) {
- dieAnim = NUM_ANIMS;
+ dieAnim = ANIM_STD_NUM;
} else {
if (RpAnimBlendClumpGetFirstAssociation(GetClump(), ASSOC_FRONTAL))
- dieAnim = ANIM_FLOOR_HIT_F;
+ dieAnim = ANIM_STD_HIT_FLOOR_FRONT;
else
- dieAnim = ANIM_FLOOR_HIT;
+ dieAnim = ANIM_STD_HIT_FLOOR;
dieDelta = dieDelta * 2.0f;
dieSpeed = 0.5f;
}
} else {
switch (direction) {
case 0:
- dieAnim = ANIM_KO_SKID_FRONT;
+ dieAnim = ANIM_STD_HIGHIMPACT_FRONT;
break;
case 1:
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
- dieAnim = ANIM_KO_SKID_BACK;
+ dieAnim = ANIM_STD_HIGHIMPACT_BACK;
break;
case 3:
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
break;
@@ -2183,56 +2183,56 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (method == WEAPONTYPE_SHOTGUN) {
switch (direction) {
case 0:
- dieAnim = ANIM_KO_SKID_FRONT;
+ dieAnim = ANIM_STD_HIGHIMPACT_FRONT;
break;
case 1:
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
- dieAnim = ANIM_KO_SKID_BACK;
+ dieAnim = ANIM_STD_HIGHIMPACT_BACK;
break;
case 3:
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
break;
}
} else
- dieAnim = ANIM_KO_SHOT_FRONT1;
+ dieAnim = ANIM_STD_KO_FRONT;
willLinger = false;
} else {
switch (pedPiece) {
case PEDPIECE_TORSO:
willLinger = false;
- dieAnim = ANIM_KO_SHOT_FRONT1;
+ dieAnim = ANIM_STD_KO_FRONT;
break;
case PEDPIECE_MID:
willLinger = false;
- dieAnim = ANIM_KO_SHOT_STOM;
+ dieAnim = ANIM_STD_KO_SHOT_STOMACH;
break;
case PEDPIECE_LEFTARM:
- dieAnim = ANIM_KO_SHOT_ARML;
+ dieAnim = ANIM_STD_KO_SHOT_ARM_L;
RemoveBodyPart(PED_UPPERARML, direction);
willLinger = true;
break;
case PEDPIECE_RIGHTARM:
- dieAnim = ANIM_KO_SHOT_ARMR;
+ dieAnim = ANIM_STD_KO_SHOT_ARM_R;
RemoveBodyPart(PED_UPPERARMR, direction);
willLinger = true;
break;
case PEDPIECE_LEFTLEG:
- dieAnim = ANIM_KO_SHOT_LEGL;
+ dieAnim = ANIM_STD_KO_SHOT_LEG_L;
RemoveBodyPart(PED_UPPERLEGL, direction);
willLinger = true;
break;
case PEDPIECE_RIGHTLEG:
- dieAnim = ANIM_KO_SHOT_LEGR;
+ dieAnim = ANIM_STD_KO_SHOT_LEG_R;
RemoveBodyPart(PED_UPPERLEGR, direction);
willLinger = true;
break;
case PEDPIECE_HEAD:
- dieAnim = ANIM_KO_SHOT_FACE;
+ dieAnim = ANIM_STD_KO_SHOT_FACE;
RemoveBodyPart(PED_HEAD, direction);
headShot = true;
willLinger = true;
@@ -2272,16 +2272,16 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
switch (direction) {
case 0:
- dieAnim = ANIM_KO_SKID_FRONT;
+ dieAnim = ANIM_STD_HIGHIMPACT_FRONT;
break;
case 1:
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
- dieAnim = ANIM_KO_SKID_BACK;
+ dieAnim = ANIM_STD_HIGHIMPACT_BACK;
break;
case 3:
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
break;
@@ -2291,7 +2291,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (bFireProof)
return false;
- dieAnim = ANIM_KO_SHOT_FRONT1;
+ dieAnim = ANIM_STD_KO_FRONT;
break;
case WEAPONTYPE_RAMMEDBYCAR:
case WEAPONTYPE_RUNOVERBYCAR:
@@ -2306,36 +2306,36 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (pedPiece == PEDPIECE_RIGHTARM && random > 1
|| pedPiece == PEDPIECE_MID && random == 2)
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
else
- dieAnim = ANIM_KO_SKID_FRONT;
+ dieAnim = ANIM_STD_HIGHIMPACT_FRONT;
} else
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 1:
if (m_nPedState == PED_DIVE_AWAY)
- dieAnim = ANIM_KD_LEFT;
+ dieAnim = ANIM_STD_SPINFORWARD_LEFT;
else
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
if ((pedPiece != PEDPIECE_LEFTARM || random <= 1)
&& (pedPiece != PEDPIECE_MID || random != 1)) {
if ((pedPiece != PEDPIECE_RIGHTARM || random <= 1)
&& (pedPiece != PEDPIECE_MID || random != 2)) {
- dieAnim = ANIM_KO_SKID_BACK;
+ dieAnim = ANIM_STD_HIGHIMPACT_BACK;
} else {
- dieAnim = ANIM_KD_RIGHT;
+ dieAnim = ANIM_STD_SPINFORWARD_RIGHT;
}
} else
- dieAnim = ANIM_KD_LEFT;
+ dieAnim = ANIM_STD_SPINFORWARD_LEFT;
break;
case 3:
if (m_nPedState == PED_DIVE_AWAY)
- dieAnim = ANIM_KD_RIGHT;
+ dieAnim = ANIM_STD_SPINFORWARD_RIGHT;
else
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
break;
@@ -2353,7 +2353,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
}
break;
case WEAPONTYPE_DROWNING:
- dieAnim = ANIM_DROWN;
+ dieAnim = ANIM_STD_DROWN;
break;
case WEAPONTYPE_FALL:
if (bCollisionProof)
@@ -2361,16 +2361,16 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
switch (direction) {
case 0:
- dieAnim = ANIM_KO_SKID_FRONT;
+ dieAnim = ANIM_STD_HIGHIMPACT_FRONT;
break;
case 1:
- dieAnim = ANIM_KO_SPIN_R;
+ dieAnim = ANIM_STD_HIGHIMPACT_LEFT;
break;
case 2:
- dieAnim = ANIM_KO_SKID_BACK;
+ dieAnim = ANIM_STD_HIGHIMPACT_BACK;
break;
case 3:
- dieAnim = ANIM_KO_SPIN_L;
+ dieAnim = ANIM_STD_HIGHIMPACT_RIGHT;
break;
default:
break;
@@ -2460,7 +2460,7 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
if (player == this)
m_pMyVehicle->SetStatus(STATUS_PLAYER_DISABLED);
- SetDie(NUM_ANIMS, 4.0f, 0.0f);
+ SetDie(ANIM_STD_NUM, 4.0f, 0.0f);
return true;
} else {
m_fHealth = 0.0f;
@@ -2663,7 +2663,7 @@ CPed::ApplyHeadShot(eWeaponType weaponType, CVector pos, bool evenOnPlayer)
// BUG: This condition will always return true. Even fixing it won't work, because these states are unused.
// if (m_nPedState != PED_PASSENGER || m_nPedState != PED_TAXI_PASSENGER) {
- SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
// }
bBodyPartJustCameOff = true;
@@ -2887,7 +2887,7 @@ CPed::CollideWithPed(CPed *collideWith)
} else {
SetLookFlag(collideWith, false);
TurnBody();
- animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_FIGHT_PPUNCH, 8.0f);
+ animAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_PARTIAL_PUNCH, 8.0f);
animAssoc->flags |= ASSOC_FADEOUTWHENDONE;
#ifdef VC_PED_PORTS
m_nPedStateTimer = CTimer::GetTimeInMilliseconds() + 2000;
@@ -2912,22 +2912,22 @@ CPed::CollideWithPed(CPed *collideWith)
moveForce.z += 0.1f;
ApplyMoveForce(moveForce);
if (collideWith->m_nMoveState != PEDMOVE_RUN && collideWith->m_nMoveState != PEDMOVE_SPRINT)
- animToPlay = ANIM_HIT_LEFT;
+ animToPlay = ANIM_STD_HIT_LEFT;
else
- animToPlay = ANIM_SHOT_LEFT_PARTIAL;
+ animToPlay = ANIM_STD_HITBYGUN_LEFT;
} else if (heLooksToUs) {
CVector moveForce = GetRight() * -1.0f;
moveForce.z += 0.1f;
ApplyMoveForce(moveForce);
if (collideWith->m_nMoveState != PEDMOVE_RUN && collideWith->m_nMoveState != PEDMOVE_SPRINT)
- animToPlay = ANIM_HIT_RIGHT;
+ animToPlay = ANIM_STD_HIT_RIGHT;
else
- animToPlay = ANIM_SHOT_RIGHT_PARTIAL;
+ animToPlay = ANIM_STD_HITBYGUN_RIGHT;
} else {
if (collideWith->m_nMoveState != PEDMOVE_RUN && collideWith->m_nMoveState != PEDMOVE_SPRINT)
- animToPlay = ANIM_HIT_BACK;
+ animToPlay = ANIM_STD_HIT_BACK;
else
- animToPlay = ANIM_SHOT_BACK_PARTIAL;
+ animToPlay = ANIM_STD_HITBYGUN_BACK;
}
if (collideWith->IsPedInControl() && CTimer::GetTimeInMilliseconds() > collideWith->m_nPedStateTimer) {
@@ -2944,17 +2944,17 @@ CPed::CollideWithPed(CPed *collideWith)
moveForce.z += 0.1f;
ApplyMoveForce(moveForce);
if (heLooksToUs)
- animToPlay = ANIM_KO_SPIN_L;
+ animToPlay = ANIM_STD_HIGHIMPACT_RIGHT;
else
- animToPlay = ANIM_KD_RIGHT;
+ animToPlay = ANIM_STD_SPINFORWARD_RIGHT;
} else {
CVector moveForce = GetRight();
moveForce.z += 0.1f;
ApplyMoveForce(moveForce);
if (heLooksToUs)
- animToPlay = ANIM_KO_SPIN_R;
+ animToPlay = ANIM_STD_HIGHIMPACT_LEFT;
else
- animToPlay = ANIM_KD_LEFT;
+ animToPlay = ANIM_STD_SPINFORWARD_LEFT;
}
if (m_nPedState == PED_ATTACK && collideWith->IsPedInControl())
@@ -3209,7 +3209,7 @@ CPed::KillPedWithCar(CVehicle *car, float impulse)
damage = 30.0f;
InflictDamage(car, WEAPONTYPE_RAMMEDBYCAR, damage, PEDPIECE_TORSO, fallDirection);
- SetFall(1000, (AnimationId)(fallDirection + ANIM_KO_SKID_FRONT), true);
+ SetFall(1000, (AnimationId)(fallDirection + ANIM_STD_HIGHIMPACT_FRONT), true);
if (OnGround() && !m_pCollidingEntity &&
(!IsPlayer() || bHasHitWall || car->GetModelIndex() == MI_TRAIN || m_vecDamageNormal.z < -0.8f)) {
diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp
index ae981d1d..53187d0b 100644
--- a/src/peds/PlayerPed.cpp
+++ b/src/peds/PlayerPed.cpp
@@ -206,7 +206,7 @@ CPlayerPed::MakeChangesForNewWeapon(int8 weapon)
void
CPlayerPed::ReApplyMoveAnims(void)
{
- static AnimationId moveAnims[] = { ANIM_WALK, ANIM_RUN, ANIM_SPRINT, ANIM_IDLE_STANCE, ANIM_WALK_START };
+ static AnimationId moveAnims[] = { ANIM_STD_WALK, ANIM_STD_RUN, ANIM_STD_RUNFAST, ANIM_STD_IDLE, ANIM_STD_STARTWALK };
for(int i = 0; i < ARRAY_SIZE(moveAnims); i++) {
CAnimBlendAssociation *curMoveAssoc = RpAnimBlendClumpGetAssociation(GetClump(), moveAnims[i]);
@@ -262,13 +262,13 @@ CPlayerPed::SetInitialState(void)
void
CPlayerPed::SetRealMoveAnim(void)
{
- CAnimBlendAssociation *curWalkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WALK);
- CAnimBlendAssociation *curRunAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN);
- CAnimBlendAssociation *curSprintAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_SPRINT);
- CAnimBlendAssociation *curWalkStartAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_WALK_START);
- CAnimBlendAssociation *curIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_STANCE);
- CAnimBlendAssociation *curRunStopAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP);
- CAnimBlendAssociation *curRunStopRAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_RUN_STOP_R);
+ CAnimBlendAssociation *curWalkAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_WALK);
+ CAnimBlendAssociation *curRunAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUN);
+ CAnimBlendAssociation *curSprintAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNFAST);
+ CAnimBlendAssociation *curWalkStartAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_STARTWALK);
+ CAnimBlendAssociation *curIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE);
+ CAnimBlendAssociation *curRunStopAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP1);
+ CAnimBlendAssociation *curRunStopRAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_RUNSTOP2);
if (bResetWalkAnims) {
if (curWalkAssoc)
curWalkAssoc->SetCurrentTime(0.0f);
@@ -280,9 +280,9 @@ CPlayerPed::SetRealMoveAnim(void)
}
if (!curIdleAssoc)
- curIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED);
+ curIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_TIRED);
if (!curIdleAssoc)
- curIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
+ curIdleAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FIGHT_IDLE);
if (!((curRunStopAssoc && curRunStopAssoc->IsRunning()) || (curRunStopRAssoc && curRunStopRAssoc->IsRunning()))) {
@@ -301,10 +301,10 @@ CPlayerPed::SetRealMoveAnim(void)
if (!curIdleAssoc) {
if (m_fCurrentStamina < 0.0f && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.5f,
nil, true, false, false, false, false, false)) {
- curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 8.0f);
+ curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_TIRED, 8.0f);
} else {
- curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 8.0f);
+ curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 8.0f);
}
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + CGeneral::GetRandomNumberInRange(2500, 4000);
}
@@ -315,25 +315,25 @@ CPlayerPed::SetRealMoveAnim(void)
if (!curIdleAssoc) {
if (m_fCurrentStamina < 0.0f && !CWorld::TestSphereAgainstWorld(GetPosition(), 0.5f,
nil, true, false, false, false, false, false)) {
- curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 4.0f);
+ curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_TIRED, 4.0f);
} else {
- curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 4.0f);
+ curIdleAssoc = CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 4.0f);
}
m_nWaitTimer = CTimer::GetTimeInMilliseconds() + CGeneral::GetRandomNumberInRange(2500, 4000);
}
- if (m_fCurrentStamina > 0.0f && curIdleAssoc->animId == ANIM_IDLE_TIRED) {
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 4.0f);
+ if (m_fCurrentStamina > 0.0f && curIdleAssoc->animId == ANIM_STD_IDLE_TIRED) {
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 4.0f);
} else if (m_nPedState != PED_FIGHT) {
- if (m_fCurrentStamina < 0.0f && curIdleAssoc->animId != ANIM_IDLE_TIRED
+ if (m_fCurrentStamina < 0.0f && curIdleAssoc->animId != ANIM_STD_IDLE_TIRED
&& !CWorld::TestSphereAgainstWorld(GetPosition(), 0.5f, nil, true, false, false, false, false, false)) {
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_TIRED, 4.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE_TIRED, 4.0f);
- } else if (curIdleAssoc->animId != ANIM_IDLE_STANCE) {
- CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_IDLE_STANCE, 4.0f);
+ } else if (curIdleAssoc->animId != ANIM_STD_IDLE) {
+ CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_IDLE, 4.0f);
}
}
m_nMoveState = PEDMOVE_STILL;
@@ -344,7 +344,7 @@ CPlayerPed::SetRealMoveAnim(void)
curWalkStartAssoc->blendAmount = 1.0f;
curWalkStartAssoc->blendDelta = 0.0f;
} else {
- curWalkStartAssoc = CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_WALK_START);
+ curWalkStartAssoc = CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_STD_STARTWALK);
}
if (curWalkAssoc)
curWalkAssoc->SetCurrentTime(0.0f);
@@ -352,8 +352,8 @@ CPlayerPed::SetRealMoveAnim(void)
curRunAssoc->SetCurrentTime(0.0f);
delete curIdleAssoc;
- delete RpAnimBlendClumpGetAssociation(GetClump(), ANIM_IDLE_TIRED);
- delete RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FIGHT_IDLE);
+ delete RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_IDLE_TIRED);
+ delete RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FIGHT_IDLE);
delete curSprintAssoc;
curSprintAssoc = nil;
@@ -368,11 +368,11 @@ CPlayerPed::SetRealMoveAnim(void)
RestoreHeadingRate();
}
if (!curWalkAssoc) {
- curWalkAssoc = CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_WALK);
+ curWalkAssoc = CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_STD_WALK);
curWalkAssoc->blendAmount = 0.0f;
}
if (!curRunAssoc) {
- curRunAssoc = CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_RUN);
+ curRunAssoc = CAnimManager::AddAnimation(GetClump(), m_animGroup, ANIM_STD_RUN);
curRunAssoc->blendAmount = 0.0f;
}
if (curWalkStartAssoc && !(curWalkStartAssoc->IsRunning())) {
@@ -399,9 +399,9 @@ CPlayerPed::SetRealMoveAnim(void)
if (m_fMoveSpeed < 0.4f) {
AnimationId runStopAnim;
if (curSprintAssoc->currentTime / curSprintAssoc->hierarchy->totalLength < 0.5) // double
- runStopAnim = ANIM_RUN_STOP;
+ runStopAnim = ANIM_STD_RUNSTOP1;
else
- runStopAnim = ANIM_RUN_STOP_R;
+ runStopAnim = ANIM_STD_RUNSTOP2;
CAnimBlendAssociation* newRunStopAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, runStopAnim);
newRunStopAssoc->blendAmount = 1.0f;
newRunStopAssoc->SetDeleteCallback(RestoreHeadingRateCB, this);
@@ -444,7 +444,7 @@ CPlayerPed::SetRealMoveAnim(void)
// Transition between run-sprint
curWalkAssoc->blendAmount = 0.0f;
curRunAssoc->blendAmount = 1.0f;
- curSprintAssoc = CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_SPRINT, 2.0f);
+ curSprintAssoc = CAnimManager::BlendAnimation(GetClump(), m_animGroup, ANIM_STD_RUNFAST, 2.0f);
}
UseSprintEnergy();
} else {
@@ -539,14 +539,14 @@ CPlayerPed::DoesTargetHaveToBeBroken(CVector target, CWeapon *weaponUsed)
void
CPlayerPed::RunningLand(CPad *padUsed)
{
- CAnimBlendAssociation *landAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_FALL_LAND);
+ CAnimBlendAssociation *landAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_FALL_LAND);
if (landAssoc && landAssoc->currentTime == 0.0f && m_fMoveSpeed > 1.5f
&& padUsed && (padUsed->GetPedWalkLeftRight() != 0.0f || padUsed->GetPedWalkUpDown() != 0.0f)) {
landAssoc->blendDelta = -1000.0f;
landAssoc->flags |= ASSOC_DELETEFADEDOUT;
- CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_JUMP_LAND)->SetFinishCallback(FinishJumpCB, this);
+ CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_JUMP_LAND)->SetFinishCallback(FinishJumpCB, this);
if (m_nPedState == PED_JUMP)
RestorePreviousState();
@@ -1009,7 +1009,7 @@ CPlayerPed::ProcessPlayerWeapon(CPad *padUsed)
TheCamera.SetNewPlayerWeaponMode(CCam::MODE_M16_1STPERSON, 0, 0);
m_fMoveSpeed = 0.0f;
- CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_IDLE_STANCE, 1000.0f);
+ CAnimManager::BlendAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE, 1000.0f);
}
if (GetWeapon()->m_eWeaponType == WEAPONTYPE_ROCKETLAUNCHER || GetWeapon()->m_eWeaponType == WEAPONTYPE_SNIPERRIFLE
|| TheCamera.PlayerWeaponMode.Mode == CCam::MODE_M16_1STPERSON)
@@ -1280,24 +1280,24 @@ CPlayerPed::ProcessControl(void)
}
if (m_nPedState == PED_DRIVING && m_objective != OBJECTIVE_LEAVE_CAR) {
if (m_pMyVehicle->IsCar() && ((CAutomobile*)m_pMyVehicle)->Damage.GetDoorStatus(DOOR_FRONT_LEFT) == DOOR_STATUS_SWINGING) {
- CAnimBlendAssociation *rollDoorAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_ROLLDOOR);
+ CAnimBlendAssociation *rollDoorAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS);
- if (m_pMyVehicle->m_nGettingOutFlags & CAR_DOOR_FLAG_LF || rollDoorAssoc || (rollDoorAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_CAR_ROLLDOOR_LOW))) {
+ if (m_pMyVehicle->m_nGettingOutFlags & CAR_DOOR_FLAG_LF || rollDoorAssoc || (rollDoorAssoc = RpAnimBlendClumpGetAssociation(GetClump(), ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS))) {
if (rollDoorAssoc)
- m_pMyVehicle->ProcessOpenDoor(CAR_DOOR_LF, ANIM_CAR_ROLLDOOR, rollDoorAssoc->currentTime);
+ m_pMyVehicle->ProcessOpenDoor(CAR_DOOR_LF, ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS, rollDoorAssoc->currentTime);
} else {
// These comparisons are wrong, they return uint16
if (padUsed && (padUsed->GetAccelerate() != 0.0f || padUsed->GetSteeringLeftRight() != 0.0f || padUsed->GetBrake() != 0.0f)) {
if (rollDoorAssoc)
- m_pMyVehicle->ProcessOpenDoor(CAR_DOOR_LF, ANIM_CAR_ROLLDOOR, rollDoorAssoc->currentTime);
+ m_pMyVehicle->ProcessOpenDoor(CAR_DOOR_LF, ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS, rollDoorAssoc->currentTime);
} else {
m_pMyVehicle->m_nGettingOutFlags |= CAR_DOOR_FLAG_LF;
if (m_pMyVehicle->bLowVehicle)
- rollDoorAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_ROLLDOOR_LOW);
+ rollDoorAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS);
else
- rollDoorAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_CAR_ROLLDOOR);
+ rollDoorAssoc = CAnimManager::AddAnimation(GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS);
rollDoorAssoc->SetFinishCallback(PedAnimDoorCloseRollingCB, this);
}
diff --git a/src/peds/Population.cpp b/src/peds/Population.cpp
index 053cf5e4..a0bf8be6 100644
--- a/src/peds/Population.cpp
+++ b/src/peds/Population.cpp
@@ -847,7 +847,7 @@ CPopulation::AddPedInCar(CVehicle* car)
}
#else
{
- newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, ANIM_CAR_SIT, 100.0f);
+ newPed->m_pVehicleAnim = CAnimManager::BlendAnimation(newPed->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_SIT, 100.0f);
}
#endif
diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp
index b5af6619..684f5d74 100644
--- a/src/render/Clouds.cpp
+++ b/src/render/Clouds.cpp
@@ -273,8 +273,8 @@ CClouds::Render(void)
for(i = 0; i < 37; i++){
RwV3d pos = { 2.0f*CoorsOffsetX[i], 2.0f*CoorsOffsetY[i], 40.0f*CoorsOffsetZ[i] + 40.0f };
- worldpos.x = campos.x*rot_cos + campos.y*rot_sin + pos.x;
- worldpos.y = campos.x*rot_sin + campos.y*rot_cos + pos.y;
+ worldpos.x = pos.x*rot_cos + pos.y*rot_sin + campos.x;
+ worldpos.y = pos.x*rot_sin - pos.y*rot_cos + campos.y;
worldpos.z = pos.z;
if(bCloudOnScreen[i] && CSprite::CalcScreenCoors(worldpos, &screenpos, &szx, &szy, false)){
// BUG: this is stupid....would have to do this for each cloud individually
diff --git a/src/render/Font.cpp b/src/render/Font.cpp
index 7eed0933..6a9944e1 100644
--- a/src/render/Font.cpp
+++ b/src/render/Font.cpp
@@ -348,11 +348,26 @@ CFont::Initialise(void)
SetDropShadowPosition(0);
CTxdStore::PopCurrentTxd();
+#if !defined(GAMEPAD_MENU) && defined(BUTTON_ICONS)
+ // loaded in CMenuManager with GAMEPAD_MENU defined
+ LoadButtons("MODELS/X360BTNS.TXD");
+#endif
+}
+
#ifdef BUTTON_ICONS
- if (int file = CFileMgr::OpenFile("MODELS/X360BTNS.TXD")) {
+void
+CFont::LoadButtons(const char* txdPath)
+{
+ if (int file = CFileMgr::OpenFile(txdPath)) {
CFileMgr::CloseFile(file);
- ButtonsSlot = CTxdStore::AddTxdSlot("buttons");
- CTxdStore::LoadTxd(ButtonsSlot, "MODELS/X360BTNS.TXD");
+ if (ButtonsSlot == -1)
+ ButtonsSlot = CTxdStore::AddTxdSlot("buttons");
+ else {
+ for (int i = 0; i < MAX_BUTTON_ICONS; i++)
+ ButtonSprite[i].Delete();
+ CTxdStore::RemoveTxd(ButtonsSlot);
+ }
+ CTxdStore::LoadTxd(ButtonsSlot, txdPath);
CTxdStore::AddRef(ButtonsSlot);
CTxdStore::PushCurrentTxd();
CTxdStore::SetCurrentTxd(ButtonsSlot);
@@ -374,8 +389,16 @@ CFont::Initialise(void)
ButtonSprite[BUTTON_R3].SetTexture("r3");
CTxdStore::PopCurrentTxd();
}
-#endif // BUTTON_ICONS
+ else {
+ if (ButtonsSlot != -1) {
+ for (int i = 0; i < MAX_BUTTON_ICONS; i++)
+ ButtonSprite[i].Delete();
+ CTxdStore::RemoveTxdSlot(ButtonsSlot);
+ ButtonsSlot = -1;
+ }
+ }
}
+#endif // BUTTON_ICONS
#ifdef MORE_LANGUAGES
void
@@ -428,6 +451,7 @@ CFont::Shutdown(void)
for (int i = 0; i < MAX_BUTTON_ICONS; i++)
ButtonSprite[i].Delete();
CTxdStore::RemoveTxdSlot(ButtonsSlot);
+ ButtonsSlot = -1;
}
#endif
Sprite[0].Delete();
diff --git a/src/render/Font.h b/src/render/Font.h
index 621375d6..9316ed34 100644
--- a/src/render/Font.h
+++ b/src/render/Font.h
@@ -109,6 +109,7 @@ public:
static CSprite2d ButtonSprite[MAX_BUTTON_ICONS];
static int PS2Symbol;
+ static void LoadButtons(const char *txdPath);
static void DrawButton(float x, float y);
#endif // BUTTON_ICONS
diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp
index 2f7b9001..4991e024 100644
--- a/src/render/Hud.cpp
+++ b/src/render/Hud.cpp
@@ -1150,18 +1150,18 @@ void CHud::Draw()
if (IntroRect.m_nTextureId >= 0) {
CRect rect (
IntroRect.m_sRect.left,
- IntroRect.m_sRect.top,
+ IntroRect.m_sRect.bottom,
IntroRect.m_sRect.right,
- IntroRect.m_sRect.bottom );
+ IntroRect.m_sRect.top );
CTheScripts::ScriptSprites[IntroRect.m_nTextureId].Draw(rect, IntroRect.m_sColor);
}
else {
CRect rect (
IntroRect.m_sRect.left,
- IntroRect.m_sRect.top,
+ IntroRect.m_sRect.bottom,
IntroRect.m_sRect.right,
- IntroRect.m_sRect.bottom );
+ IntroRect.m_sRect.top );
CSprite2d::DrawRect(rect, IntroRect.m_sColor);
}
diff --git a/src/render/Shadows.cpp b/src/render/Shadows.cpp
index 8c892be3..d7eccbfd 100644
--- a/src/render/Shadows.cpp
+++ b/src/render/Shadows.cpp
@@ -21,8 +21,8 @@
#include "Shadows.h"
#ifdef DEBUGMENU
-SETTWEAKPATH("Shadows");
-TWEAKBOOL(gbPrintShite);
+//SETTWEAKPATH("Shadows");
+//TWEAKBOOL(gbPrintShite);
#endif
RwImVertexIndex ShadowIndexList[24];
diff --git a/src/render/WaterCannon.cpp b/src/render/WaterCannon.cpp
index f54b31b9..3aaa74be 100644
--- a/src/render/WaterCannon.cpp
+++ b/src/render/WaterCannon.cpp
@@ -127,7 +127,7 @@ void CWaterCannon::Render(void)
int16 pointA = m_nCur % NUM_SEGMENTPOINTS;
int16 pointB = pointA - 1;
- if ( (pointA - 1) < 0 )
+ if ( pointB < 0 )
pointB += NUM_SEGMENTPOINTS;
bool bInit = false;
@@ -231,7 +231,7 @@ void CWaterCannon::PushPeds(void)
ped->m_vecMoveSpeed.x = (0.6f * m_avecVelocity[j].x + ped->m_vecMoveSpeed.x) * 0.5f;
ped->m_vecMoveSpeed.y = (0.6f * m_avecVelocity[j].y + ped->m_vecMoveSpeed.y) * 0.5f;
- ped->SetFall(2000, AnimationId(ANIM_KO_SKID_FRONT + localDir), 0);
+ ped->SetFall(2000, AnimationId(ANIM_STD_HIGHIMPACT_FRONT + localDir), 0);
CFire *fire = ped->m_pFire;
if ( fire )
diff --git a/src/skel/crossplatform.h b/src/skel/crossplatform.h
index 8c4fb14c..710a7702 100644
--- a/src/skel/crossplatform.h
+++ b/src/skel/crossplatform.h
@@ -71,7 +71,7 @@ void CapturePad(RwInt32 padID);
void joysChangeCB(int jid, int event);
#endif
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
extern char gSelectedJoystickName[128];
#endif
@@ -132,7 +132,12 @@ void GetLocalTime_CP(SYSTEMTIME* out);
typedef void* HANDLE;
#define INVALID_HANDLE_VALUE NULL
-#define FindClose(h) closedir((DIR*)h)
+#define FindClose(h) \
+ do { \
+ if (h != nil) \
+ closedir((DIR*)h); \
+ } while(0)
+
#define LOCALE_USER_DEFAULT 0
#define DATE_SHORTDATE 0
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp
index 9643c63b..baed9000 100644
--- a/src/skel/glfw/glfw.cpp
+++ b/src/skel/glfw/glfw.cpp
@@ -52,6 +52,11 @@ long _dwOperatingSystemVersion;
#define MAX_SUBSYSTEMS (16)
+#ifdef _WIN32
+#define GLFW_EXPOSE_NATIVE_WIN32
+#include <GLFW/glfw3native.h>
+#endif
+
rw::EngineOpenParams openParams;
@@ -81,7 +86,7 @@ static psGlobalType PsGlobal;
size_t _dwMemAvailPhys;
RwUInt32 gGameState;
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
char gSelectedJoystickName[128] = "";
#endif
@@ -204,6 +209,7 @@ psGrabScreen(RwCamera *pCamera)
}
#else
rw::Image *image = RwCameraGetRaster(pCamera)->toImage();
+ image->removeMask();
if(image)
return image;
#endif
@@ -841,7 +847,7 @@ void joysChangeCB(int jid, int event);
bool IsThisJoystickBlacklisted(int i)
{
-#ifndef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifndef DETECT_JOYSTICK_MENU
return false;
#else
if (glfwJoystickIsGamepad(i))
@@ -906,7 +912,7 @@ void _InputInitialiseJoys()
if (PSGLOBAL(joy1id) != -1) {
int count;
glfwGetJoystickButtons(PSGLOBAL(joy1id), &count);
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
strcpy(gSelectedJoystickName, glfwGetJoystickName(PSGLOBAL(joy1id)));
#endif
ControlsManager.InitDefaultControlConfigJoyPad(count);
@@ -1559,6 +1565,15 @@ main(int argc, char *argv[])
return 0;
}
+#ifdef _WIN32
+ HWND wnd = glfwGetWin32Window(PSGLOBAL(window));
+
+ HICON icon = LoadIcon(instance, MAKEINTRESOURCE(IDI_MAIN_ICON));
+
+ SendMessage(wnd, WM_SETICON, ICON_BIG, (LPARAM)icon);
+ SendMessage(wnd, WM_SETICON, ICON_SMALL, (LPARAM)icon);
+#endif
+
psPostRWinit();
ControlsManager.InitDefaultControlConfigMouse(MousePointerStateHelper.GetMouseSetUp());
@@ -2150,7 +2165,7 @@ void joysChangeCB(int jid, int event)
if (event == GLFW_CONNECTED && !IsThisJoystickBlacklisted(jid)) {
if (PSGLOBAL(joy1id) == -1) {
PSGLOBAL(joy1id) = jid;
-#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
+#ifdef DETECT_JOYSTICK_MENU
strcpy(gSelectedJoystickName, glfwGetJoystickName(jid));
#endif
// This is behind LOAD_INI_SETTINGS, because otherwise the Init call below will destroy/overwrite your bindings.
diff --git a/src/skel/win/gta3.ico b/src/skel/win/gta3.ico
index 2017c811..d0a47713 100644
--- a/src/skel/win/gta3.ico
+++ b/src/skel/win/gta3.ico
Binary files differ
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index 3bda4e9d..86b0b214 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -121,6 +121,10 @@ DWORD _dwOperatingSystemVersion;
RwUInt32 gGameState;
CJoySticks AllValidWinJoys;
+#ifdef DETECT_JOYSTICK_MENU
+char gSelectedJoystickName[128] = "";
+#endif
+
// What is that for anyway?
#ifndef IMPROVED_VIDEOMODE
static RwBool defaultFullscreenRes = TRUE;
@@ -255,6 +259,7 @@ psGrabScreen(RwCamera *pCamera)
}
#else
rw::Image *image = RwCameraGetRaster(pCamera)->toImage();
+ image->removeMask();
if(image)
return image;
#endif
@@ -1325,7 +1330,11 @@ InitApplication(HANDLE instance)
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hInstance = (HINSTANCE)instance;
+#ifdef FIX_BUGS
+ windowClass.hIcon = LoadIcon((HINSTANCE)instance, MAKEINTRESOURCE(IDI_MAIN_ICON));
+#else
windowClass.hIcon = nil;
+#endif
windowClass.hCursor = LoadCursor(nil, IDC_ARROW);
windowClass.hbrBackground = nil;
windowClass.lpszMenuName = NULL;
diff --git a/src/text/Text.cpp b/src/text/Text.cpp
index fe37d0f1..08ab0e1e 100644
--- a/src/text/Text.cpp
+++ b/src/text/Text.cpp
@@ -8,7 +8,7 @@
#include "Messages.h"
#include "Text.h"
-static wchar WideErrorString[25];
+wchar WideErrorString[25];
CText TheText;
diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp
index 7e8c4702..4863b945 100644
--- a/src/vehicles/Automobile.cpp
+++ b/src/vehicles/Automobile.cpp
@@ -3058,21 +3058,21 @@ CAutomobile::DoDriveByShootings(void)
if(lookingLeft || lookingRight){
if(lookingLeft){
- anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_DRIVEBY_R);
+ anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_STD_CAR_DRIVEBY_RIGHT);
if(anim)
anim->blendDelta = -1000.0f;
- anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_DRIVEBY_L);
+ anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_STD_CAR_DRIVEBY_LEFT);
if(anim == nil || anim->blendDelta < 0.0f)
- CAnimManager::AddAnimation(pDriver->GetClump(), ASSOCGRP_STD, ANIM_DRIVEBY_L);
+ CAnimManager::AddAnimation(pDriver->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_DRIVEBY_LEFT);
else
anim->SetRun();
}else if(pDriver->m_pMyVehicle->pPassengers[0] == nil || TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_1STPERSON){
- anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_DRIVEBY_L);
+ anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_STD_CAR_DRIVEBY_LEFT);
if(anim)
anim->blendDelta = -1000.0f;
- anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_DRIVEBY_R);
+ anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_STD_CAR_DRIVEBY_RIGHT);
if(anim == nil || anim->blendDelta < 0.0f)
- CAnimManager::AddAnimation(pDriver->GetClump(), ASSOCGRP_STD, ANIM_DRIVEBY_R);
+ CAnimManager::AddAnimation(pDriver->GetClump(), ASSOCGRP_STD, ANIM_STD_CAR_DRIVEBY_RIGHT);
else
anim->SetRun();
}
@@ -3083,10 +3083,10 @@ CAutomobile::DoDriveByShootings(void)
}
}else{
weapon->Reload();
- anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_DRIVEBY_L);
+ anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_STD_CAR_DRIVEBY_LEFT);
if(anim)
anim->blendDelta = -1000.0f;
- anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_DRIVEBY_R);
+ anim = RpAnimBlendClumpGetAssociation(pDriver->GetClump(), ANIM_STD_CAR_DRIVEBY_RIGHT);
if(anim)
anim->blendDelta = -1000.0f;
}
@@ -3094,11 +3094,11 @@ CAutomobile::DoDriveByShootings(void)
// TODO: what is this?
if(!lookingLeft && m_weaponDoorTimerLeft > 0.0f){
m_weaponDoorTimerLeft = Max(m_weaponDoorTimerLeft - CTimer::GetTimeStep()*0.1f, 0.0f);
- ProcessOpenDoor(CAR_DOOR_LF, NUM_ANIMS, m_weaponDoorTimerLeft);
+ ProcessOpenDoor(CAR_DOOR_LF, ANIM_STD_NUM, m_weaponDoorTimerLeft);
}
if(!lookingRight && m_weaponDoorTimerRight > 0.0f){
m_weaponDoorTimerRight = Max(m_weaponDoorTimerRight - CTimer::GetTimeStep()*0.1f, 0.0f);
- ProcessOpenDoor(CAR_DOOR_RF, NUM_ANIMS, m_weaponDoorTimerRight);
+ ProcessOpenDoor(CAR_DOOR_RF, ANIM_STD_NUM, m_weaponDoorTimerRight);
}
}
@@ -3736,55 +3736,55 @@ CAutomobile::ProcessOpenDoor(uint32 component, uint32 anim, float time)
return;
switch(anim){
- case ANIM_CAR_QJACK:
- case ANIM_CAR_OPEN_LHS:
- case ANIM_CAR_OPEN_RHS:
+ case ANIM_STD_QUICKJACK:
+ case ANIM_STD_CAR_OPEN_DOOR_LHS:
+ case ANIM_STD_CAR_OPEN_DOOR_RHS:
ProcessDoorOpenAnimation(this, component, door, time, 0.66f, 0.8f);
break;
- case ANIM_CAR_CLOSEDOOR_LHS:
- case ANIM_CAR_CLOSEDOOR_LOW_LHS:
- case ANIM_CAR_CLOSEDOOR_RHS:
- case ANIM_CAR_CLOSEDOOR_LOW_RHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_LHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_LO_LHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_RHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_LO_RHS:
ProcessDoorCloseAnimation(this, component, door, time, 0.2f, 0.63f);
break;
- case ANIM_CAR_ROLLDOOR:
- case ANIM_CAR_ROLLDOOR_LOW:
+ case ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS:
+ case ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS:
ProcessDoorOpenCloseAnimation(this, component, door, time, 0.1f, 0.6f, 0.95f);
break;
- case ANIM_CAR_GETOUT_LHS:
- case ANIM_CAR_GETOUT_LOW_LHS:
- case ANIM_CAR_GETOUT_RHS:
- case ANIM_CAR_GETOUT_LOW_RHS:
+ case ANIM_STD_GETOUT_LHS:
+ case ANIM_STD_GETOUT_LO_LHS:
+ case ANIM_STD_GETOUT_RHS:
+ case ANIM_STD_GETOUT_LO_RHS:
ProcessDoorOpenAnimation(this, component, door, time, 0.06f, 0.43f);
break;
- case ANIM_CAR_CLOSE_LHS:
- case ANIM_CAR_CLOSE_RHS:
+ case ANIM_STD_CAR_CLOSE_LHS:
+ case ANIM_STD_CAR_CLOSE_RHS:
ProcessDoorCloseAnimation(this, component, door, time, 0.1f, 0.23f);
break;
- case ANIM_CAR_PULLOUT_RHS:
- case ANIM_CAR_PULLOUT_LOW_RHS:
+ case ANIM_STD_CAR_PULL_OUT_PED_RHS:
+ case ANIM_STD_CAR_PULL_OUT_PED_LO_RHS:
OpenDoor(component, door, 1.0f);
break;
- case ANIM_COACH_OPEN_L:
- case ANIM_COACH_OPEN_R:
+ case ANIM_STD_COACH_OPEN_LHS:
+ case ANIM_STD_COACH_OPEN_RHS:
ProcessDoorOpenAnimation(this, component, door, time, 0.66f, 0.8f);
break;
- case ANIM_COACH_OUT_L:
+ case ANIM_STD_COACH_GET_OUT_LHS:
ProcessDoorOpenAnimation(this, component, door, time, 0.0f, 0.3f);
break;
- case ANIM_VAN_OPEN_L:
- case ANIM_VAN_OPEN:
+ case ANIM_STD_VAN_OPEN_DOOR_REAR_LHS:
+ case ANIM_STD_VAN_OPEN_DOOR_REAR_RHS:
ProcessDoorOpenAnimation(this, component, door, time, 0.37f, 0.55f);
break;
- case ANIM_VAN_CLOSE_L:
- case ANIM_VAN_CLOSE:
+ case ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS:
+ case ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS:
ProcessDoorCloseAnimation(this, component, door, time, 0.5f, 0.8f);
break;
- case ANIM_VAN_GETOUT_L:
- case ANIM_VAN_GETOUT:
+ case ANIM_STD_VAN_GET_OUT_REAR_LHS:
+ case ANIM_STD_VAN_GET_OUT_REAR_RHS:
ProcessDoorOpenAnimation(this, component, door, time, 0.5f, 0.6f);
break;
- case NUM_ANIMS:
+ case ANIM_STD_NUM:
OpenDoor(component, door, time);
break;
}
@@ -3879,7 +3879,7 @@ CAutomobile::BlowUpCar(CEntity *culprit)
if(!pDriver->IsPlayer())
pDriver->FlagToDestroyWhenNextProcessed();
}else
- pDriver->SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ pDriver->SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
}
for(i = 0; i < m_nNumMaxPassengers; i++){
if(pPassengers[i]){
@@ -3889,7 +3889,7 @@ CAutomobile::BlowUpCar(CEntity *culprit)
if(!pPassengers[i]->IsPlayer())
pPassengers[i]->FlagToDestroyWhenNextProcessed();
}else
- pPassengers[i]->SetDie(ANIM_KO_SHOT_FRONT1, 4.0f, 0.0f);
+ pPassengers[i]->SetDie(ANIM_STD_KO_FRONT, 4.0f, 0.0f);
}
}
diff --git a/src/vehicles/Vehicle.h b/src/vehicles/Vehicle.h
index a6a4f815..fcfa3401 100644
--- a/src/vehicles/Vehicle.h
+++ b/src/vehicles/Vehicle.h
@@ -182,7 +182,7 @@ public:
float m_fMapObjectHeightBehind; // rear Z?
eCarLock m_nDoorLock;
int8 m_nLastWeaponDamage; // see eWeaponType, -1 if no damage
- int8 m_nRadioStation;
+ uint8 m_nRadioStation;
uint8 m_bRainAudioCounter;
uint8 m_bRainSamplesCounter;
uint8 m_nCarHornTimer;
@@ -276,7 +276,7 @@ public:
#endif
CVehicleModelInfo* GetModelInfo() { return (CVehicleModelInfo*)CModelInfo::GetModelInfo(GetModelIndex()); }
bool IsTaxi(void) { return GetModelIndex() == MI_TAXI || GetModelIndex() == MI_CABBIE || GetModelIndex() == MI_BORGNINE; }
- AnimationId GetDriverAnim(void) { return IsCar() && bLowVehicle ? ANIM_CAR_LSIT : (IsBoat() && GetModelIndex() != MI_SPEEDER ? ANIM_DRIVE_BOAT : ANIM_CAR_SIT); }
+ AnimationId GetDriverAnim(void) { return IsCar() && bLowVehicle ? ANIM_STD_CAR_SIT_LO : (IsBoat() && GetModelIndex() != MI_SPEEDER ? ANIM_STD_BOAT_DRIVE : ANIM_STD_CAR_SIT); }
static bool bWheelsOnlyCheat;
static bool bAllDodosCheat;
diff --git a/src/weapons/BulletInfo.cpp b/src/weapons/BulletInfo.cpp
index e87a7407..bfe27e18 100644
--- a/src/weapons/BulletInfo.cpp
+++ b/src/weapons/BulletInfo.cpp
@@ -121,7 +121,7 @@ void CBulletInfo::Update(void)
if (pPed->DoesLOSBulletHitPed(point)) {
if (pPed->IsPedInControl() && !pPed->bIsDucking) {
pPed->ClearAttackByRemovingAnim();
- CAnimBlendAssociation* pAnim = CAnimManager::AddAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_SHOT_FRONT_PARTIAL);
+ CAnimBlendAssociation* pAnim = CAnimManager::AddAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_STD_HITBYGUN_FRONT);
pAnim->SetBlend(0.0f, 8.0f);
}
pPed->InflictDamage(pBullet->m_pSource, pBullet->m_eWeaponType, pBullet->m_nDamage, (ePedPieceTypes)point.pieceB, pPed->GetLocalDirection(pPed->GetPosition() - point.point));
@@ -146,9 +146,9 @@ void CBulletInfo::Update(void)
if (pPed->GetPedState() == PED_DEAD) {
CAnimBlendAssociation* pAnim;
if (RpAnimBlendClumpGetFirstAssociation(pPed->GetClump(), ASSOC_FRONTAL))
- pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
+ pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR_FRONT, 8.0f);
else
- pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
+ pAnim = CAnimManager::BlendAnimation(pPed->GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR, 8.0f);
if (pAnim) {
pAnim->SetCurrentTime(0.0f);
pAnim->flags |= ASSOC_RUNNING;
diff --git a/src/weapons/Weapon.cpp b/src/weapons/Weapon.cpp
index a987a4c7..dab510be 100644
--- a/src/weapons/Weapon.cpp
+++ b/src/weapons/Weapon.cpp
@@ -473,9 +473,9 @@ CWeapon::FireMelee(CEntity *shooter, CVector &fireSource)
victimPed->ApplyMoveForce(posOffset.x*-5.0f, posOffset.y*-5.0f, 3.0f);
if ( isBat && victimPed->IsPlayer() )
- victimPed->SetFall(3000, AnimationId(ANIM_KO_SKID_FRONT + localDir), false);
+ victimPed->SetFall(3000, AnimationId(ANIM_STD_HIGHIMPACT_FRONT + localDir), false);
else
- victimPed->SetFall(1500, AnimationId(ANIM_KO_SKID_FRONT + localDir), false);
+ victimPed->SetFall(1500, AnimationId(ANIM_STD_HIGHIMPACT_FRONT + localDir), false);
shooterPed->m_pSeekTarget = victimPed;
shooterPed->m_pSeekTarget->RegisterReference(&shooterPed->m_pSeekTarget);
@@ -904,7 +904,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
victimPed->bIsStanding = false;
victimPed->ApplyMoveForce(posOffset.x*-5.0f, posOffset.y*-5.0f, 5.0f);
- victimPed->SetFall(1500, AnimationId(ANIM_KO_SKID_FRONT + localDir), false);
+ victimPed->SetFall(1500, AnimationId(ANIM_STD_HIGHIMPACT_FRONT + localDir), false);
victimPed->InflictDamage(shooter, m_eWeaponType, info->m_nDamage, (ePedPieceTypes)point->pieceB, localDir);
}
@@ -917,7 +917,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
{
victimPed->ClearAttackByRemovingAnim();
- CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_SHOT_FRONT_PARTIAL + localDir));
+ CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_STD_HITBYGUN_FRONT + localDir));
ASSERT(asoc!=nil);
asoc->blendAmount = 0.0f;
@@ -933,7 +933,7 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
{
victimPed->ClearAttackByRemovingAnim();
- CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_SHOT_FRONT_PARTIAL + localDir));
+ CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_STD_HITBYGUN_FRONT + localDir));
ASSERT(asoc!=nil);
asoc->blendAmount = 0.0f;
@@ -983,9 +983,9 @@ CWeapon::DoBulletImpact(CEntity *shooter, CEntity *victim,
{
CAnimBlendAssociation *asoc;
if ( RpAnimBlendClumpGetFirstAssociation(victimPed->GetClump(), ASSOC_FRONTAL) )
- asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT_F, 8.0f);
+ asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR_FRONT, 8.0f);
else
- asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_FLOOR_HIT, 8.0f);
+ asoc = CAnimManager::BlendAnimation(victimPed->GetClump(), ASSOCGRP_STD, ANIM_STD_HIT_FLOOR, 8.0f);
if ( asoc )
{
@@ -1248,7 +1248,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
victimPed->ApplyMoveForce(posOffset.x*-2.0f, posOffset.y*-2.0f, 0.0f);
if ( cantStandup )
- victimPed->SetFall(1500, AnimationId(ANIM_KO_SKID_FRONT + localDir), false);
+ victimPed->SetFall(1500, AnimationId(ANIM_STD_HIGHIMPACT_FRONT + localDir), false);
victimPed->InflictDamage(shooter, m_eWeaponType, info->m_nDamage, (ePedPieceTypes)point.pieceB, localDir);
@@ -1719,7 +1719,7 @@ CWeapon::FireInstantHitFromCar(CAutomobile *shooter, bool left)
victimPed->ReactToAttack(FindPlayerPed());
victimPed->ClearAttackByRemovingAnim();
- CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_SHOT_FRONT_PARTIAL + localDir));
+ CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_STD_HITBYGUN_FRONT + localDir));
ASSERT(asoc!=nil);
asoc->blendAmount = 0.0f;
asoc->blendDelta = 8.0f;
@@ -2089,7 +2089,7 @@ FireOneInstantHitRound(CVector *source, CVector *target, int32 damage)
victimPed->ClearAttackByRemovingAnim();
- CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_SHOT_FRONT_PARTIAL + localDir));
+ CAnimBlendAssociation *asoc = CAnimManager::AddAnimation(victimPed->GetClump(), ASSOCGRP_STD, AnimationId(ANIM_STD_HITBYGUN_FRONT + localDir));
ASSERT(asoc!=nil);
asoc->blendAmount = 0.0f;
asoc->blendDelta = 8.0f;
diff --git a/src/weapons/WeaponInfo.cpp b/src/weapons/WeaponInfo.cpp
index 10737acb..ba872454 100644
--- a/src/weapons/WeaponInfo.cpp
+++ b/src/weapons/WeaponInfo.cpp
@@ -37,8 +37,8 @@ CWeaponInfo::Initialise(void)
debug("Initialising CWeaponInfo...\n");
for (int i = 0; i < WEAPONTYPE_TOTALWEAPONS; i++) {
aWeaponInfo[i].m_eWeaponFire = WEAPON_FIRE_INSTANT_HIT;
- aWeaponInfo[i].m_AnimToPlay = ANIM_PUNCH_R;
- aWeaponInfo[i].m_Anim2ToPlay = NUM_ANIMS;
+ aWeaponInfo[i].m_AnimToPlay = ANIM_STD_PUNCH;
+ aWeaponInfo[i].m_Anim2ToPlay = ANIM_STD_NUM;
aWeaponInfo[i].m_Flags = WEAPONFLAG_USE_GRAVITY | WEAPONFLAG_SLOWS_DOWN | WEAPONFLAG_RAND_SPEED | WEAPONFLAG_EXPANDS | WEAPONFLAG_EXPLODES;
}
debug("Loading weapon data...\n");
@@ -96,7 +96,7 @@ CWeaponInfo::LoadWeaponData(void)
fireType[0] = '\0';
fireOffsetY = 0.0f;
fireOffsetZ = 0.0f;
- animId = ANIM_WALK;
+ animId = ANIM_STD_WALK;
sscanf(
&line[lp],
"%s %s %f %d %d %d %d %f %f %f %f %f %f %f %s %s %f %f %f %f %d %d",
diff --git a/utils/gxt/american.txt b/utils/gxt/american.txt
index 95e9d280..cf71c958 100644
--- a/utils/gxt/american.txt
+++ b/utils/gxt/american.txt
@@ -2221,11 +2221,11 @@ Car bombs are $1000 each
[GA_5]
Your car is already fitted with a bomb.
-[GA_6]
-Park it, prime it by pressing the ~h~~k~~PED_FIREWEAPON~ button~w~ and LEG IT!
+[GA_6] { re3 change }
+Park it, prime it by pressing the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ and LEG IT!
-[GA_7]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
+[GA_7] { re3 change }
+Arm with ~h~~k~~VEHICLE_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
[GA_8]
Use the detonator to activate the bomb.
@@ -2440,33 +2440,6 @@ Accelerate
[FEC_SMT]
Special mission trigger
-[FEC_CCF]
-Configuration:
-
-[FEC_CF1]
-Setup1
-
-[FEC_CF2]
-Setup2
-
-[FEC_CF3]
-Setup3
-
-[FEC_CF4]
-Setup4
-
-[FEC_CDP]
-Controller Display:
-
-[FEC_ONF]
-On Foot
-
-[FEC_INC]
-In Car
-
-[FEC_VIB]
-Vibration:
-
[FEA_OUT]
Output:
@@ -3592,11 +3565,11 @@ Alright?
[JM6_1]
Get to the bank on the main drag.
-[GA_6B]
-Park it, prime it by pressing the ~h~~k~~PED_FIREWEAPON~ button~w~ and LEG IT!
+[GA_6B] { re3 change }
+Park it, prime it by pressing the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ and LEG IT!
-[GA_7B]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
+[GA_7B] { re3 change }
+Arm with ~h~~k~~VEHICLE_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
[BAT1]
~g~Pick up the bat!
@@ -4027,11 +4000,11 @@ Drive your vehicle into the spray shop to lose your ~h~wanted level~w~, ~h~repai
[HM1_1]
~g~Ice 20 Purple Nines in 2 minutes 30 seconds.
-[KM1_8A]
-Press the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
+[KM1_8A] { re3 change }
+Press the~h~ ~k~~VEHICLE_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
-[KM1_8D]
-Press the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
+[KM1_8D] { re3 change }
+Press the~h~ ~k~~VEHICLE_FIREWEAPON~ button~w~ to ~h~activate the bomb,~w~ remember to get out of the way.
[KM1_12]
~g~Get him to the dojo but get rid of the cops first!
@@ -4168,11 +4141,11 @@ I don't need to see any I.D. you look trustworthy.
[DETON]
DETONATION:
-[DRIVE_A]
-Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire.
+[DRIVE_A] { re3 change }
+Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire.
-[DRIVE_B]
-Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire.
+[DRIVE_B] { re3 change }
+Have an Uzi selected when entering a vehicle then look left or right and press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire.
[RECORD]
~g~NEW RECORD!!
@@ -4180,11 +4153,11 @@ Have an Uzi selected when entering a vehicle then look left or right and press t
[NRECORD]
~r~NO NEW RECORD!
-[RCHELP]
-Press ~k~~PED_FIREWEAPON~, or drive the RC car into a vehicle's wheels to detonate.
+[RCHELP] { re3 change }
+Press ~k~~VEHICLE_FIREWEAPON~, or drive the RC car into a vehicle's wheels to detonate.
-[RCHELPA]
-Press the ~k~~PED_FIREWEAPON~ button, or drive the RC car into a vehicle's wheels to detonate.
+[RCHELPA] { re3 change }
+Press the ~k~~VEHICLE_FIREWEAPON~ button, or drive the RC car into a vehicle's wheels to detonate.
[RC_1]
You have 2 minutes to blow up as many Diablo Gang Cars as possible!
@@ -4684,11 +4657,11 @@ LOVE'S DISAPPEARANCE
[RM5_6]
~g~He's bailed out!! Smash his bodycast with a vehicle or an explosion!!
-[PBOAT_1]
-Press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire the boat cannons.
+[PBOAT_1] { re3 change }
+Press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire the boat cannons.
-[PBOAT_2]
-Press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire the boat cannons.
+[PBOAT_2] { re3 change }
+Press the ~h~~k~~VEHICLE_FIREWEAPON~ button~w~ to fire the boat cannons.
[DIAB1_B]
This is El Burro of the Diablos.
@@ -4702,11 +4675,11 @@ There's a street race starting by the old school hall near the Callahan Bridge.
[DIAB1_F]
Get yourself some wheels and first through all the checkpoints wins the prize.
-[HM2_1]
-Use the RC buggies to destroy the armored cars. Press the ~h~~k~~PED_FIREWEAPON~ button ~w~to detonate.
+[HM2_1] { re3 change }
+Use the RC buggies to destroy the armored cars. Press the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to detonate.
-[HM2_1A]
-Use the RC buggies to destroy the armored cars. Press the ~h~~k~~PED_FIREWEAPON~ button ~w~to detonate.
+[HM2_1A] { re3 change }
+Use the RC buggies to destroy the armored cars. Press the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to detonate.
[HM2_2]
~r~You failed to destroy all the armored cars!
@@ -6517,11 +6490,11 @@ This Memory Card (PS2) is already formatted.
[FEDSAS4]
;=<> - CHANGE SELECTION
-[SPRAY_4]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
+[SPRAY_4] { re3 change }
+Use the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to fire the water cannon.
-[SPRAY_1]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
+[SPRAY_1] { re3 change }
+Use the ~h~~k~~VEHICLE_FIREWEAPON~ button ~w~to fire the water cannon.
[LITTLE]
LITTLE T
@@ -7243,9 +7216,6 @@ CONNECTION
[FET_AUD]
AUDIO SETUP
-[FET_GFX]
-GFX SETUP
-
[FET_DIS]
DISPLAY SETUP
@@ -7957,7 +7927,7 @@ POLISH
RUSSIAN
{ new display menus }
-[FET_GRA]
+[FET_GFX]
GRAPHICS SETUP
[FED_MIP]
@@ -8022,6 +7992,7 @@ REPLAY MISSION
[FESZ_RM]
RETRY?
+{ more graphics }
[FED_VPL]
VEHICLE PIPELINE
@@ -8061,15 +8032,68 @@ PS2
[FEM_XBX]
XBOX
-[FEM_AUT]
+[FEM_AUT] { aspect ratio related }
AUTO
+{ controls }
[FEC_IVP]
INVERT PAD VERTICALLY
+{ map }
[FEM_TWP]
Toggle Waypoint
+[FEA_FMN]
+RADIO OFF
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+XBOX 360 CONTROLLER
+
+[FEC_ONE]
+XBOX ONE CONTROLLER
+
+[FEC_TYP]
+GAMEPAD TYPE
+
+[FEC_CCF]
+CONFIGURATION
+
+[FEC_CF1]
+SETUP 1
+
+[FEC_CF2]
+SETUP 2
+
+[FEC_CF3]
+SETUP 3
+
+[FEC_CF4]
+SETUP 4
+
+[FEC_CDP]
+CONTROLLER DISPLAY
+
+[FEC_ONF]
+ON FOOT
+
+[FEC_INC]
+IN CAR
+
+[FEC_VIB]
+VIBRATION
+
+[FET_AGS]
+GAMEPAD SETTINGS
+
{ end of file }
[DUMMY]
diff --git a/utils/gxt/build.bat b/utils/gxt/build.bat
index 17eb7983..a674850e 100644
--- a/utils/gxt/build.bat
+++ b/utils/gxt/build.bat
@@ -4,4 +4,5 @@ gxt -g III -i "french.txt" -o "../../gamefiles/TEXT/french.gxt"
gxt -g III -i "german.txt" -o "../../gamefiles/TEXT/german.gxt"
gxt -g III -i "italian.txt" -o "../../gamefiles/TEXT/italian.gxt"
gxt -g III -i "spanish.txt" -o "../../gamefiles/TEXT/spanish.gxt"
-gxt -g III -r -i "russian.txt" -o "../../gamefiles/TEXT/russian.gxt" \ No newline at end of file
+gxt -g III -r -i "russian.txt" -o "../../gamefiles/TEXT/russian.gxt"
+gxt -g III -p -i "polish.txt" -o "../../gamefiles/TEXT/polish.gxt"
diff --git a/utils/gxt/french.txt b/utils/gxt/french.txt
index c2c125f0..09a1f5c2 100644
--- a/utils/gxt/french.txt
+++ b/utils/gxt/french.txt
@@ -1,4 +1,11 @@
-[LETTER1]
+{
+ New strings are at the bottom of file.
+ Do not change the order of strings.
+ You can fix the typos of existing translation but please refrain from
+ unnecessary edits like rephasing because you think it suits better for your taste.
+}
+
+[LETTER1]
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
[DEFNAM]
@@ -2233,11 +2240,11 @@ Une voiture piégée coûte 1000$ pièce!
[GA_5]
Ta voiture est déjà équipée d'une bombe.
-[GA_6]
-Gare-la, arme la bombe avec la ~h~touche ~k~~PED_FIREWEAPON~~w~ et CASSE-TOI!
+[GA_6] { re3 change }
+Gare-la, arme la bombe avec la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ et CASSE-TOI!
-[GA_7]
-Arme la bombe avec la ~h~touche ~k~~PED_FIREWEAPON~~w~. Elle explose au démarrage.
+[GA_7] { re3 change }
+Arme la bombe avec la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~. Elle explose au démarrage.
[GA_8]
Utilise le détonateur pour armer la bombe.
@@ -2452,33 +2459,6 @@ Accélérateur
[FEC_SMT]
Déclencheur de mission spéciale
-[FEC_CCF]
-Configuration:
-
-[FEC_CF1]
-Config1
-
-[FEC_CF2]
-Config2
-
-[FEC_CF3]
-Config3
-
-[FEC_CF4]
-Config4
-
-[FEC_CDP]
-Affichage de la manette:
-
-[FEC_ONF]
-A pied
-
-[FEC_INC]
-Dans un véhicule
-
-[FEC_VIB]
-Vibrations:
-
[FEA_OUT]
Sortie audio:
@@ -3511,11 +3491,11 @@ D'accord ?
[JM6_1]
Va à la banque par la rue principale.
-[GA_6B]
-Tu la gares, tu l'amorces en appuyant sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ et tu te barres!
+[GA_6B] { re3 change }
+Tu la gares, tu l'amorces en appuyant sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ et tu te barres!
-[GA_7B]
-Pour armer la bombe, appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~. Elle explosera au démarrage.
+[GA_7B] { re3 change }
+Pour armer la bombe, appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~. Elle explosera au démarrage.
[BAT1]
~g~Ramasse la batte!
@@ -3946,11 +3926,11 @@ Amène ton véhicule à l'atelier de peinture pour annuler ton ~h~indice de rech
[HM1_1]
~G~Refroidis 20 Nines violets en 2 minutes et 30 secondes.
-[KM1_8A]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
+[KM1_8A] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
-[KM1_8D]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
+[KM1_8D] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour ~h~activer la bombe~w~, n'oublie pas de t'éloigner.
[KM1_12]
~g~Amène-le au dojo mais débarrasse-toi des flics d'abord!
@@ -4087,11 +4067,11 @@ J'ai pas besoin de tes papiers d'identité. Je pense qu'on peut te faire confian
[DETON]
DETONATION :
-[DRIVE_A]
-Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer.
+[DRIVE_A] { re3 change }
+Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer.
-[DRIVE_B]
-Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer.
+[DRIVE_B] { re3 change }
+Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droite et appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer.
[RECORD]
~g~NOUVEAU RECORD!
@@ -4099,11 +4079,11 @@ Selectionne un Uzi quand tu montes dans la voiture, regarde à gauche ou à droi
[NRECORD]
~r~PAS DE RECORD!
-[RCHELP]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
+[RCHELP] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
-[RCHELPA]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
+[RCHELPA] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ ou heurte une roue de voiture avec le véhicule télécommandé pour le faire exploser.
[RC_1]
Tu as 2 minutes pour faire péter autant de voitures de Diablo que tu peux!
@@ -4603,11 +4583,11 @@ LA DISPARITION DE LOVE
[RM5_6]
~g~Il s'est enfui! Bousille-lui son plâtre avec une bagnole ou une explosion!
-[PBOAT_1]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
+[PBOAT_1] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
-[PBOAT_2]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
+[PBOAT_2] { re3 change }
+Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
[DIAB1_B]
C'est El Burro des Diablos.
@@ -4621,11 +4601,11 @@ Il y a une course de bagnoles qui va partir de la vieille école près du pont d
[DIAB1_F]
Trouve-toi une caisse et le premier qui franchit tous les points de passage, gagne le gros lot.
-[HM2_1]
-Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour les faire exploser.
+[HM2_1] { re3 change }
+Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour les faire exploser.
-[HM2_1A]
-Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour les faire exploser.
+[HM2_1A] { re3 change }
+Utilise les buggies télécommandés pour détruire les voitures blindées. Appuie sur la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour les faire exploser.
[HM2_2]
~r~T'as pas réussi à détruire toutes leurs voitures blindées!
@@ -6637,11 +6617,11 @@ Cette memory card (PS2) est déjà formatée.
[FEDSAS4]
;=<> - CHANGER SELECTION
-[SPRAY_4]
-Utilise la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
+[SPRAY_4] { re3 change }
+Utilise la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
-[SPRAY_1]
-Utilise la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
+[SPRAY_1] { re3 change }
+Utilise la ~h~touche ~k~~VEHICLE_FIREWEAPON~~w~ pour tirer à l'aide du canon à eau.
[AM1_10]
~g~Salvatore Leone partira de chez Luigi vers 0~1~:~1~.
@@ -7504,9 +7484,6 @@ CONNEXION
[FET_AUD]
CONFIG. AUDIO
-[FET_GFX]
-CONFIG. EFFETS SPECIAUX
-
[FET_DIS]
CONFIG. AFFICHAGE
@@ -8206,6 +8183,187 @@ MATERIEL INDISPONIBLE - PARAMETRE D'ORIGINE RETABLI
[CRED270]
MIKE HONG
+{ re3 updates }
+{ new languages }
+[FEL_JAP]
+JAPONAIS
+
+[FEL_POL]
+POLONAIS
+
+[FEL_RUS]
+RUSSE
+
+{ new display menus }
+[FET_GFX] { this probably needs to be retranslated }
+CONFIG. EFFETS SPECIAUX
+
+[FED_MIP]
+MIP MAPPING
+
+[FED_AAS]
+ANTI ALIASING
+
+[FED_FIL]
+TEXTURE FILTERING
+
+[FED_BIL]
+BILINEAR
+
+[FED_TRL]
+TRILINEAR
+
+[FED_WND]
+WINDOWED
+
+[FED_FLS]
+FULLSCREEN
+
+[FEM_CSB]
+CUTSCENE BORDERS
+
+[FEM_SCF]
+SCREEN FORMAT
+
+[FEM_ISL]
+MAP MEMORY USAGE
+
+[FEM_LOW]
+LOW
+
+[FEM_MED]
+MEDIUM
+
+[FEM_HIG]
+HIGH
+
+[FEM_2PR]
+PS2 ALPHA TEST
+
+[FEC_FRC]
+FREE CAM
+
+{ Linux joy detection }
+[FEC_JOD]
+DETECT JOYSTICK
+
+[FEC_JPR]
+Press any key on the joystick of your choice that you want to use on the game, and it will be selected.
+
+[FEC_JDE]
+Detected joystick
+
+{ mission restart }
+[FET_RMS]
+REJOUER MISSION
+
+[FESZ_RM]
+REJOUER?
+
+{ more graphics }
+[FED_VPL]
+VEHICLE PIPELINE
+
+[FED_PRM]
+PED RIM LIGHT
+
+[FED_RGL]
+ROAD GLOSS
+
+[FED_CLF]
+COLOUR FILTER
+
+[FED_WLM]
+WORLD LIGHTMAPS
+
+[FED_MBL]
+MOTION BLUR
+
+[FEM_SIM]
+SIMPLE
+
+[FEM_NRM]
+NORMAL
+
+[FEM_MOB]
+MOBILE
+
+[FED_MFX]
+MATFX
+
+[FED_NEO]
+NEO
+
+[FEM_PS2]
+PS2
+
+[FEM_XBX]
+XBOX
+
+[FEM_AUT] { aspect ratio related }
+AUTO
+
+{ controls }
+[FEC_IVP]
+INVERT PAD VERTICALLY
+
+{ map }
+[FEM_TWP]
+Toggle Waypoint
+
+[FEA_FMN]
+RADIO ETEINTE
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+XBOX 360 CONTROLLER
+
+[FEC_ONE]
+XBOX ONE CONTROLLER
+
+[FEC_TYP]
+GAMEPAD TYPE
+
+[FEC_CCF]
+CONFIGURATION
+
+[FEC_CF1]
+CONFIGURATION 1
+
+[FEC_CF2]
+CONFIGURATION 2
+
+[FEC_CF3]
+CONFIGURATION 3
+
+[FEC_CF4]
+CONFIGURATION 4
+
+[FEC_CDP]
+AFFICHAGE DE LA MANETTE
+
+[FEC_ONF]
+A PIED
+
+[FEC_INC]
+DANS UN VÉHICULE
+
+[FEC_VIB]
+VIBRATIONS
+
+[FET_AGS]
+GAMEPAD SETTINGS
+
+{ end of file }
+
[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 8f3f207e..2ab4df6a 100644
--- a/utils/gxt/german.txt
+++ b/utils/gxt/german.txt
@@ -1,4 +1,11 @@
-[LETTER1]
+{
+ New strings are at the bottom of file.
+ Do not change the order of strings.
+ You can fix the typos of existing translation but please refrain from
+ unnecessary edits like rephasing because you think it suits better for your taste.
+}
+
+[LETTER1]
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
[DEFNAM]
@@ -2269,11 +2276,11 @@ Autobomben kosten $1000 pro Stück.
[GA_5]
In deinem Wagen ist schon eine Autobombe.
-[GA_6]
-Park die Karre, mach sie durch Drücken der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf, und dann nichts wie weg!
+[GA_6] { re3 change }
+Park die Karre, mach sie durch Drücken der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf, und dann nichts wie weg!
-[GA_7]
-Mach die Bombe mit der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf. Dann geht sie hoch, wenn der Wagen angelassen wird.
+[GA_7] { re3 change }
+Mach die Bombe mit der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf. Dann geht sie hoch, wenn der Wagen angelassen wird.
[GA_8]
Benutze den Zünder, um die Bombe hochgehen zu lassen.
@@ -2488,33 +2495,6 @@ Beschleunigen
[FEC_SMT]
Spezialmission aktivieren
-[FEC_CCF]
-Konfiguration:
-
-[FEC_CF1]
-Konfig1
-
-[FEC_CF2]
-Konfig2
-
-[FEC_CF3]
-Konfig3
-
-[FEC_CF4]
-Konfig4
-
-[FEC_CDP]
-Controller-Anzeige:
-
-[FEC_ONF]
-Zu Fuß
-
-[FEC_INC]
-Im Auto
-
-[FEC_VIB]
-Vibration:
-
[FEA_OUT]
Tonausgabe:
@@ -3655,11 +3635,11 @@ Okay?
[JM6_1]
Fahr zu der Bank auf dem Boulevard.
-[GA_6B]
-Park die Karre, mach sie durch Drücken der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf, und dann HAU AB!
+[GA_6B] { re3 change }
+Park die Karre, mach sie durch Drücken der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf, und dann HAU AB!
-[GA_7B]
-Mach die Bombe mit der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf. Sie geht hoch, wenn der Wagen angelassen wird.
+[GA_7B] { re3 change }
+Mach die Bombe mit der ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~ scharf. Sie geht hoch, wenn der Wagen angelassen wird.
[BAT1]
~g~Nimm dir den Schlãger!
@@ -4093,11 +4073,11 @@ Fahre deinen Wagen in die Lackiererei, um deinen ~h~Fahndungslevel~w~ loszuwerde
[HM1_1]
~g~Fertige 20 Purple Nines in 2 Min. 30 Sek. ab.
-[KM1_8A]
-Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
+[KM1_8A] { re3 change }
+Drücke die~h~ ~k~~VEHICLE_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
-[KM1_8D]
-Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
+[KM1_8D] { re3 change }
+Drücke die~h~ ~k~~VEHICLE_FIREWEAPON~-Taste~w~ zum ~h~Zünden der Bombe~w~. Aber geh vorher in Deckung!
[KM1_12]
~g~Bring ihm zum Dojo, aber hãng vorher die Cops ab!
@@ -4234,11 +4214,11 @@ Auf den Ausweis verzichte ich. Du siehst vertrauenswürdig aus.
[DETON]
DETONATION:
-[DRIVE_A]
-Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern.
+[DRIVE_A] { re3 change }
+Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um zu feuern.
-[DRIVE_B]
-Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern.
+[DRIVE_B] { re3 change }
+Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach links oder rechts und drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um zu feuern.
[RECORD]
~g~NEUER REKORD!!
@@ -4246,11 +4226,11 @@ Halt eine Uzi im Anschlag, wenn du in ein Fahrzeug steigst. Schau dann nach link
[NRECORD]
~r~KEIN NEUER REKORD!
-[RCHELP]
-Drücke die ~k~~PED_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
+[RCHELP] { re3 change }
+Drücke die ~k~~VEHICLE_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
-[RCHELPA]
-Drücke die ~k~~PED_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
+[RCHELPA] { re3 change }
+Drücke die ~k~~VEHICLE_FIREWEAPON~-Taste oder fahre das ferngesteuerte Auto in die Rãder eines Fahrzeugs, um es zu sprengen.
[RC_1]
Du hast 2 Minuten, um so viele Diablo-Autos wie möglich zu sprengen!
@@ -4750,11 +4730,11 @@ LOVES VERSCHWINDEN
[RM5_6]
~g~Er ist abgehauen! Zerstöre seine Panzerung mit einem Auto oder einer Explosion!!
-[PBOAT_1]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
+[PBOAT_1] { re3 change }
+Drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
-[PBOAT_2]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
+[PBOAT_2] { re3 change }
+Drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
[DIAB1_B]
Hier El Burro, von den Diablos.
@@ -4768,11 +4748,11 @@ Bei der alten Schulhalle nahe der Callahan Bridge findet ein Rennen statt.
[DIAB1_F]
Besorg dir 'nen fahrbaren Untersatz. Wer als erster alle Checkpoints abfãhrt, ist Sieger.
-[HM2_1]
-Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~.
+[HM2_1] { re3 change }
+Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~.
-[HM2_1A]
-Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~.
+[HM2_1A] { re3 change }
+Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~VEHICLE_FIREWEAPON~-Taste~w~.
[HM2_2]
~r~Du hast nicht alle gepanzerten Fahrzeuge zerstört!
@@ -6595,11 +6575,11 @@ Diese Memory Card (PS2) ist bereits formatiert.
[FEDSAS4]
;=<> - AUSWAHL ÃNDERN
-[SPRAY_4]
-~h~~k~~PED_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
+[SPRAY_4] { re3 change }
+~h~~k~~VEHICLE_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
-[SPRAY_1]
-~h~~k~~PED_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
+[SPRAY_1] { re3 change }
+~h~~k~~VEHICLE_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
[LITTLE]
LITTLE T
@@ -7327,9 +7307,6 @@ VERBINDUNG
[FET_AUD]
AUDIO-SETUP
-[FET_GFX]
-GRAFIK-SETUP
-
[FET_DIS]
ANZEIGEN-SETUP
@@ -8023,6 +8000,185 @@ HARDWARE NICHT VERFÜGBAR - ORIGINAL-EINSTELLG. WIEDERHERGESTELLT
[CRED270]
MIKE HONG
+{ re3 updates }
+{ new languages }
+[FEL_JAP]
+JAPANISCH
+
+[FEL_POL]
+POLNISCH
+
+[FEL_RUS]
+RUSSISCH
+
+{ new display menus }
+[FET_GFX]
+GRAFIK-SETUP
+
+[FED_MIP]
+MIP MAPPING
+
+[FED_AAS]
+ANTI ALIASING
+
+[FED_FIL]
+TEXTURE FILTERING
+
+[FED_BIL]
+BILINEAR
+
+[FED_TRL]
+TRILINEAR
+
+[FED_WND]
+WINDOWED
+
+[FED_FLS]
+FULLSCREEN
+
+[FEM_CSB]
+CUTSCENE BORDERS
+
+[FEM_SCF]
+SCREEN FORMAT
+
+[FEM_ISL]
+MAP MEMORY USAGE
+
+[FEM_LOW]
+LOW
+
+[FEM_MED]
+MEDIUM
+
+[FEM_HIG]
+HIGH
+
+[FEM_2PR]
+PS2 ALPHA TEST
+
+[FEC_FRC]
+FREE CAM
+
+{ Linux joy detection }
+[FEC_JOD]
+DETECT JOYSTICK
+
+[FEC_JPR]
+Press any key on the joystick of your choice that you want to use on the game, and it will be selected.
+
+[FEC_JDE]
+Detected joystick
+
+{ mission restart }
+[FET_RMS]
+MISSION WIEDERHOLEN
+
+[FESZ_RM]
+WIEDERHOLEN?
+
+{ more graphics }
+[FED_VPL]
+VEHICLE PIPELINE
+
+[FED_PRM]
+PED RIM LIGHT
+
+[FED_RGL]
+ROAD GLOSS
+
+[FED_CLF]
+COLOUR FILTER
+
+[FED_WLM]
+WORLD LIGHTMAPS
+
+[FED_MBL]
+MOTION BLUR
+
+[FEM_SIM]
+SIMPLE
+
+[FEM_NRM]
+NORMAL
+
+[FEM_MOB]
+MOBILE
+
+[FED_MFX]
+MATFX
+
+[FED_NEO]
+NEO
+
+[FEM_PS2]
+PS2
+
+[FEM_XBX]
+XBOX
+
+[FEM_AUT] { aspect ratio related }
+AUTO
+
+{ controls }
+[FEC_IVP]
+INVERT PAD VERTICALLY
+
+{ map }
+[FEM_TWP]
+Toggle Waypoint
+
+[FEA_FMN]
+RADIO AUS
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+XBOX 360 CONTROLLER
+
+[FEC_ONE]
+XBOX ONE CONTROLLER
+
+[FEC_TYP]
+GAMEPAD TYPE
+
+[FEC_CCF]
+KONFIGURATION
+
+[FEC_CF1]
+KONFIGURATION 1
+
+[FEC_CF2]
+KONFIGURATION 2
+
+[FEC_CF3]
+KONFIGURATION 3
+
+[FEC_CF4]
+KONFIGURATION 4
+
+[FEC_CDP]
+CONTROLLER-ANZEIGE
+
+[FEC_ONF]
+ZU FUß
+
+[FEC_INC]
+IM AUTO
+
+[FEC_VIB]
+VIBRATION
+
+[FET_AGS]
+GAMEPAD SETTINGS
+
[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/italian.txt b/utils/gxt/italian.txt
index 822a30b8..54c9fee8 100644
--- a/utils/gxt/italian.txt
+++ b/utils/gxt/italian.txt
@@ -1,4 +1,11 @@
-[LETTER1]
+{
+ New strings are at the bottom of file.
+ Do not change the order of strings.
+ You can fix the typos of existing translation but please refrain from
+ unnecessary edits like rephasing because you think it suits better for your taste.
+}
+
+[LETTER1]
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBFàèéìòùÀÈÉÌÒÙ
[DEFNAM]
@@ -2260,11 +2267,11 @@ Le bombe per le macchine costano 1000$
[GA_5]
La tua macchina ha già una bomba installata.
-[GA_6]
-Parcheggiala, attivala premendo il ~h~tasto ~k~~PED_FIREWEAPON~~w~ e DATTELA A GAMBE!
+[GA_6] { re3 change }
+Parcheggiala, attivala premendo il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ e DATTELA A GAMBE!
-[GA_7]
-Arma la bomba con il ~h~tasto ~k~~PED_FIREWEAPON~~w~: esploderà non appena qualcuno cercherà di avviarla.
+[GA_7] { re3 change }
+Arma la bomba con il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~: esploderà non appena qualcuno cercherà di avviarla.
[GA_8]
Usa il detonatore per attivare la bomba.
@@ -2479,33 +2486,6 @@ Accelera
[FEC_SMT]
Attivatore missione speciale
-[FEC_CCF]
-Configurazione:
-
-[FEC_CF1]
-Config1
-
-[FEC_CF2]
-Config2
-
-[FEC_CF3]
-Config3
-
-[FEC_CF4]
-Config4
-
-[FEC_CDP]
-Schermata controller:
-
-[FEC_ONF]
-A piedi
-
-[FEC_INC]
-In macchina
-
-[FEC_VIB]
-Vibrazione:
-
[FEA_OUT]
Uscita:
@@ -3646,11 +3626,11 @@ OK?
[JM6_1]
Raggiungi la banca sulla strada principale.
-[GA_6B]
-Parcheggiala, innesca la bomba schiacciando il ~h~tasto ~k~~PED_FIREWEAPON~~w~ e BATTITELA!
+[GA_6B] { re3 change }
+Parcheggiala, innesca la bomba schiacciando il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ e BATTITELA!
-[GA_7B]
-Innescala col ~h~tasto ~k~~PED_FIREWEAPON~~w~. La bomba esploderà quando si tenterà di avviare il motore.
+[GA_7B] { re3 change }
+Innescala col ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~. La bomba esploderà quando si tenterà di avviare il motore.
[BAT1]
~g~Prendi la mazza!
@@ -4084,11 +4064,11 @@ Porta l'auto dal carrozziere per perdere il ~h~livello di sospetto~w~, ~h~ripara
[HM1_1]
~g~Fredda 20 Purple Nine in 2 minuti e 30 secondi.
-[KM1_8A]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: ricorda di toglierti di mezzo!
+[KM1_8A] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: ricorda di toglierti di mezzo!
-[KM1_8D]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: e ricorda di toglierti di mezzo!
+[KM1_8D] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per ~h~attivare la bomba~w~: e ricorda di toglierti di mezzo!
[KM1_12]
~g~Portalo nel dojo, ma prima sbarazzati degli sbirri!
@@ -4225,11 +4205,11 @@ Non mi serve che mi mostri i documenti, hai una faccia fidata.
[DETON]
DETONAZIONE:
-[DRIVE_A]
-Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare.
+[DRIVE_A] { re3 change }
+Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare.
-[DRIVE_B]
-Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare.
+[DRIVE_B] { re3 change }
+Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare.
[RECORD]
~g~NUOVO RECORD!!!
@@ -4237,11 +4217,11 @@ Seleziona un Uzi quando entri in un veicolo, poi guarda a destra o a sinistra e
[NRECORD]
~r~NESSUN NUOVO RECORD!
-[RCHELP]
-Premi il tasto ~k~~PED_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
+[RCHELP] { re3 change }
+Premi il tasto ~k~~VEHICLE_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
-[RCHELPA]
-Premi il tasto ~k~~PED_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
+[RCHELPA] { re3 change }
+Premi il tasto ~k~~VEHICLE_FIREWEAPON~ o dirigi l'auto radiocomandata contro i pneumatici di un veicolo per provocarne la detonazione.
[RC_1]
Hai 2 minuti per far esplodere quante più auto dei Diablo possibile!
@@ -4744,11 +4724,11 @@ LA SCOMPARSA DI LOVE
[RM5_6]
~g~Ci è scappato! Spaccagli la corazza con un veicolo o con una bella esplosione!
-[PBOAT_1]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare con i cannoni della barca.
+[PBOAT_1] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare con i cannoni della barca.
-[PBOAT_2]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare con i cannoni della barca.
+[PBOAT_2] { re3 change }
+Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare con i cannoni della barca.
[DIAB1_B]
Sono El Burro dei Diablo.
@@ -4762,11 +4742,11 @@ C'e una corsa d'auto con inizio alla vecchia scuola vicino al ponte Callahan.
[DIAB1_F]
Procurati un mezzo, il primo che attraversa tutti i posti di blocco vince il premio.
-[HM2_1]
-Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per farli esplodere.
+[HM2_1] { re3 change }
+Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per farli esplodere.
-[HM2_1A]
-Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per farli esplodere.
+[HM2_1A] { re3 change }
+Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per farli esplodere.
[HM2_2]
~r~Non sei riuscito a distruggere tutte le auto blindate!
@@ -6592,11 +6572,11 @@ Questa memory card (PS2) è già formattata.
[FEDSAS4]
;=<> - CAMBIA SELEZIONE
-[SPRAY_4]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare col cannone ad acqua.
+[SPRAY_4] { re3 change }
+Usa il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare col cannone ad acqua.
-[SPRAY_1]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare col cannone ad acqua.
+[SPRAY_1] { re3 change }
+Usa il ~h~tasto ~k~~VEHICLE_FIREWEAPON~~w~ per sparare col cannone ad acqua.
[LITTLE]
LITTLE T
@@ -7333,9 +7313,6 @@ CONNESSIONE
[FET_AUD]
IMPOSTAZIONI AUDIO
-[FET_GFX]
-IMPOSTAZIONI GRAFICA
-
[FET_DIS]
IMPOSTAZIONI VIDEO
@@ -8035,6 +8012,185 @@ RIPRISTINATE IMPOSTAZIONI ORIGINALI
[FET_RSC]
HARDWARE NON DISPONIBILE - RIPRISTINATE IMPOSTAZIONI ORIGINALI
+{ re3 updates }
+{ new languages }
+[FEL_JAP]
+GIAPPONESE
+
+[FEL_POL]
+POLACCO
+
+[FEL_RUS]
+RUSSO
+
+{ new display menus }
+[FET_GFX]
+IMPOSTAZIONI GRAFICA
+
+[FED_MIP]
+MIP MAPPING
+
+[FED_AAS]
+ANTI ALIASING
+
+[FED_FIL]
+TEXTURE FILTERING
+
+[FED_BIL]
+BILINEAR
+
+[FED_TRL]
+TRILINEAR
+
+[FED_WND]
+WINDOWED
+
+[FED_FLS]
+FULLSCREEN
+
+[FEM_CSB]
+CUTSCENE BORDERS
+
+[FEM_SCF]
+SCREEN FORMAT
+
+[FEM_ISL]
+MAP MEMORY USAGE
+
+[FEM_LOW]
+LOW
+
+[FEM_MED]
+MEDIUM
+
+[FEM_HIG]
+HIGH
+
+[FEM_2PR]
+PS2 ALPHA TEST
+
+[FEC_FRC]
+FREE CAM
+
+{ Linux joy detection }
+[FEC_JOD]
+DETECT JOYSTICK
+
+[FEC_JPR]
+Press any key on the joystick of your choice that you want to use on the game, and it will be selected.
+
+[FEC_JDE]
+Detected joystick
+
+{ mission restart }
+[FET_RMS]
+RIGIOCA MISSIONE
+
+[FESZ_RM]
+RIGIOCA?
+
+{ more graphics }
+[FED_VPL]
+VEHICLE PIPELINE
+
+[FED_PRM]
+PED RIM LIGHT
+
+[FED_RGL]
+ROAD GLOSS
+
+[FED_CLF]
+COLOUR FILTER
+
+[FED_WLM]
+WORLD LIGHTMAPS
+
+[FED_MBL]
+MOTION BLUR
+
+[FEM_SIM]
+SIMPLE
+
+[FEM_NRM]
+NORMAL
+
+[FEM_MOB]
+MOBILE
+
+[FED_MFX]
+MATFX
+
+[FED_NEO]
+NEO
+
+[FEM_PS2]
+PS2
+
+[FEM_XBX]
+XBOX
+
+[FEM_AUT] { aspect ratio related }
+AUTO
+
+{ controls }
+[FEC_IVP]
+INVERT PAD VERTICALLY
+
+{ map }
+[FEM_TWP]
+Toggle Waypoint
+
+[FEA_FMN]
+RADIO SPENTA
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+XBOX 360 CONTROLLER
+
+[FEC_ONE]
+XBOX ONE CONTROLLER
+
+[FEC_TYP]
+GAMEPAD TYPE
+
+[FEC_CCF]
+CONFIGURAZIONE
+
+[FEC_CF1]
+CONFIGURAZIONE 1
+
+[FEC_CF2]
+CONFIGURAZIONE 2
+
+[FEC_CF3]
+CONFIGURAZIONE 3
+
+[FEC_CF4]
+CONFIGURAZIONE 4
+
+[FEC_CDP]
+SCHERMATA CONTROLLER
+
+[FEC_ONF]
+A PIEDI
+
+[FEC_INC]
+IN MACCHINA
+
+[FEC_VIB]
+VIBRAZIONE
+
+[FET_AGS]
+GAMEPAD SETTINGS
+
[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/polish.txt b/utils/gxt/polish.txt
new file mode 100755
index 00000000..39727554
--- /dev/null
+++ b/utils/gxt/polish.txt
@@ -0,0 +1,8108 @@
+{
+ New strings are at the bottom of file.
+ Do not change the order of strings.
+ You can fix the typos of existing translation but please refrain from
+ unnecessary edits like rephasing because you think it suits better for your taste.
+}
+
+[LETTER1]
+abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789'$,.'-?!!SDBF
+
+[DEFNAM]
+Claude----------------------
+
+[IN_VEH]
+~g~Hej! Wracaj do samochodu!
+
+[IN_VEH2]
+~g~Do tej roboty jest ci potrzebna jakaś gablota!
+
+[IN_BOAT]
+~g~Do tej roboty jest ci potrzebna łódź!
+
+[HEY]
+~g~Nie idź sam, trzymaj się całej paczki!
+
+[HEY2]
+~g~Nie rozdzielajcie się, niech cała grupa porusza się razem!
+
+[HEY3]
+~g~Straciłeś z oczu swojego podopiecznego - wracaj i odszukaj 8-Balla!
+
+[HEY4]
+~g~Jeżeli stracisz Misty, to Luigi zadba, abyś stracił życie! Wracaj po nią!
+
+[HEY5]
+~g~One of the girls is AWOL, Go back and round her up!
+
+[HEY6]
+~g~Twój honor jest związany z osobą Kanbu z Yakuzy. Musisz go chronić!
+
+[HEY7]
+~g~Przydałaby się dodatkowa spluwa. Wracaj i zabierz ze sobą swój kontakt!
+
+[HEY8]
+~g~Ochrona oznacza właśnie to, co podejrzewasz - ochraniaj starego dżentelmena z dalekiego wschodu!
+
+[HEY9]
+~g~Chcesz posłuchać, co się dzieje w mieście? Odszukaj swój kontakt!
+
+[HELP2_A]
+Jeżeli w trakcie biegu chcesz ~h~przyspieszyć~h~, naciśnij klawisz ~h~/~w~.
+
+[HELP3]
+Sprintem można pokonywać wyłącznie krótkie odcinki, dopóki postać ma zapas sił.
+
+[HELP4_A]
+Aby ~h~przyspieszyć~w~, naciśnij klawisz ~h~ ~k~~VEHICLE_ACCELERATE~~w~.
+
+[HELP4_D]
+Aby ~h~przyspieszyć~w~, popchnij ~h~prawy drążek analogowy~w~ do góry.
+
+[HELP5_A]
+Naciśnij klawisz ~h~ ~k~~VEHICLE_BRAKE~~w~, aby ~h~zahamować~w~ lub włączyć ~h~wsteczny bieg~w~, jeżeli pojazd już stoi.
+
+[HELP5_D]
+Pociągnij ~h~prawy drążek analogowy~w~ do tyłu, aby ~h~zahamować~w~ lub włączyć ~h~wsteczny bieg~w~, jeżeli pojazd już stoi.
+
+[HELP6_A]
+Aby skorzystać z ~h~hamulca ręcznego~w~, naciśnij klawisz ~h~ ~k~~VEHICLE_HANDBRAKE~~w~.
+
+[HELP6_C]
+Aby skorzystać z ~h~hamulca ręcznego~w~, naciśnij klawisz ~h~ ~k~~VEHICLE_HANDBRAKE~~w~.
+
+[HELP6_D]
+Aby skorzystać z ~h~hamulca ręcznego~w~, naciśnij klawisz ~h~ ~k~~VEHICLE_HANDBRAKE~~w~.
+
+[HELP7_A]
+Aby ~h~wycelować~w~ karabin snajperski, naciśnij i przytrzymaj klawisz~h~ ~k~~PED_LOCK_TARGET~~w~.
+
+[HELP7_D]
+Aby ~h~wycelować~w~ karabin snajperski, naciśnij i przytrzymaj klawisz~h~ ~k~~PED_LOCK_TARGET~~w~.
+
+[HELP8_A]
+Naciśnij klawisz~h~ ~k~~PED_SNIPER_ZOOM_IN~~w~, aby ~h~przybliżyć ~w~widok przez lunetkę karabinu oraz klawisz~h~ ~k~~PED_SNIPER_ZOOM_OUT~~w~, aby ~h~oddalić~w~ widok.
+
+[HELP9_A]
+Naciśnij klawisz~h~ ~k~~PED_FIREWEAPON~~w~, aby oddać ~h~strzał~w~ z karabinu snajperskiego.
+
+[HELP10]
+Gwiazda szeryfa oznacza, że jesteś poszukiwany przez policję.
+
+[HELP11]
+Im więcej gwiazdek, tym wyższy jest poziom twojej złej sławy.
+
+[HELP13]
+Niekiedy trzeba będzie skorzystać z tras, które nie są zaznaczone na radarze.
+
+[TIMER]
+Jest to misja na czas - musisz ją wykonać, zanim licznik czasu osiągnie zero.
+
+[MISTY1]
+~r~Misty nadaje się już tylko na łóżko w kostnicy!
+
+[OUT_VEH]
+~g~Wysiądź z samochodu!
+
+[GARAGE]
+Wprowadź samochód do garażu, a potem wyjdź na zewnątrz.
+
+[WANTED1]
+~g~Zgub gliniarzy i obniż swój poziom złej sławy!
+
+[NODOORS]
+~g~To nie są sardynki! Załatw furę, która pomieści więcej osób.
+
+[TRASH]
+~g~Doprowadziłeś gablotę do ruiny! Połataj ją trochę!
+
+[WRECKED]
+~r~Samochód jest zniszczony!
+
+[HORN]
+~g~Naciśnij klakson.
+
+[NOMONEY]
+~g~Masz za mało forsy!
+
+[OUTTIME]
+~r~Za wolno, koleś, za wolno!
+
+[SPOTTED]
+~r~Gonią cię!
+
+[REWARD]
+NAGRODA $~1~
+
+[GAMEOVR]
+KONIEC GRY
+
+[Z]
+Wartość osi Z: ~1~
+
+[M_FAIL]
+MISJA NIEUDANA!
+
+[M_PASS]
+MISJA ZALICZONA! $~1~
+
+[O_PASS]
+ROBOTA ZAKOŃCZONA
+
+[O_FAIL]
+ROBOTA NIEUDANA
+
+[DEAD]
+KONIEC Z TOBĄ!
+
+[BUSTED]
+WPADKA!
+
+[S_PROMP]
+Kiedy nie jesteś w trakcie misji, możesz w tym miejscu ~h~zapisać stan gry~w~. Wiąże się to z upływem sześciu godzin w grze.
+
+[NUMBER]
+~1~
+
+[SCORE]
+$~1~
+
+[LOADCAR]
+ŁADOWANIE POJAZDU (NACIŚNIJ L1, ABY ANULOWAĆ)
+
+[CARSOFF]
+Wyłączone samochody:
+
+[CARS_ON]
+Uruchomione samochody:
+
+[TEXTXYZ]
+Zapisywanie współrzędnych w pliku...
+
+[CHEATON]
+Tryb ułatwień WŁĄCZONY
+
+[CHEATOF]
+Tryb ułatwień WYŁĄCZONY
+
+[UZI_IN]
+Amu-Nacja zaczyna sprzedawać uzi!
+
+[IMPORT1]
+Wyjdź na zewnątrz i poczekaj na swój samochód.
+
+[PAGEB1]
+Pistolet dostarczony do kryjówki
+
+[PAGEB2]
+Uzi dostarczone do kryjówki
+
+[PAGEB3]
+Pancerz dostarczony do kryjówki
+
+[PAGEB4]
+Obrzyn dostarczony do kryjówki
+
+[PAGEB5]
+Granaty dostarczone do kryjówki
+
+[PAGEB6]
+Koktajle Mołotowa dostarczone do kryjówki
+
+[PAGEB7]
+AK 47 dostarczony do kryjówki
+
+[PAGEB8]
+Karabin snajperski dostarczony do kryjówki
+
+[PAGEB9]
+M16 dostarczony do kryjówki
+
+[PAGEB10]
+Wyrzutnia rakiet dostarczona do kryjówki
+
+[PAGEB11]
+Miotacz ognia dostarczony do kryjówki
+
+[WANT_A]
+Aresztowanie grozi ci dopiero wtedy, kiedy posiadasz ~h~złą sławę.
+
+[WANT_B]
+Twój ~h~poziom złej sławy~w~ przedstawia rząd gwiazdek znajdujących się w prawym górnym rogu ekranu.
+
+[WANT_C]
+W tym momencie twój ~h~poziom złej sławy~w~ wynosi jeden...
+
+[WANT_D]
+dwa...
+
+[WANT_E]
+trzy...
+
+[WANT_F]
+W miarę wzrostu ~h~złej sławy~w~ ścigać cię będą coraz potężniejsze siły policyjne.
+
+[WANT_G]
+Kiedy zaliczysz ~h~'wpadkę'~w~, zostajesz odwieziony na najbliższy posterunek policji.
+
+[WANT_H]
+Gliniarze zarekwirują ci całą broń i będziesz musiał wypłacić im małą łapówkę.
+
+[WANT_I]
+Misja, którą właśnie wykonywałeś, zostanie uznana za nieudaną.
+
+[WANT_J]
+W miarę rozwoju gry odkryjesz sposoby zmniejszania swojego poziomu złej sławy.
+
+[WANT_K]
+Jeżeli jesdziesz samochodem, ~h~WARSZTATY LAKIERNICZE~w~ umożliwiają ~h~usunięcie złej sławy.
+
+[HEAL_B]
+Kiedy zostajesz ~h~'załatwiony'~w~, trafiasz do najbliższego szpitala.
+
+[HEAL_C]
+Tracisz całą broń oraz musisz zapłacić lekarzom trochę forsy za ich wysiłki.
+
+[HEAL_E]
+W trakcie gry poznasz rozmaite metody leczenia bądź chronienia głównego bohatera.
+
+[DAM]
+USZKODZENIA:
+
+[KILLS]
+OFIARY:
+
+[FARES]
+PRZEJAZDY:
+
+[BULL]
+SZTABKI:
+
+[EVID]
+DOWODY:
+
+[HEALTH]
+STAN POJAZDU:
+
+[COLLECT]
+ZEBRANO:
+
+[BOMB]
+Wprowadź samochód do garażu, aby przymocować do niego ~h~bombę~w~. Cena - ~h~$1000.
+
+[SAVE1]
+Aby ~h~zapisać stan gry~w~, przejdź przez drzwi. Jeżeli jesteś w trakcie misji, nie można zapisać gry.
+
+[SAVE2]
+Samochody pozostawione w tym garażu zostaną zachowane wraz z zapisem stanu gry.
+
+[AMMU]
+Wejdź do Amu-nacji, aby zakupić broń.
+
+[BRIDGE1]
+Kiedy naprawa Mostu Callahan zostanie ukończona, będziesz mógł przejechać nim na Wyspę Staunton.
+
+[TUNNEL]
+Kiedy Tunel Porter zostanie otwarty, będziesz mógł przejechać na Wyspę Staunton.
+
+[LUIGI]
+MISJE LUIGIEGO
+
+[TONI]
+MISJE TONIEGO
+
+[JOEY]
+MISJE JOEYA
+
+[FRANK]
+MISJE SALVATORE
+
+[DIABLO]
+MISJE DIABLO
+
+[ASUKA]
+MISJE ASUKI
+
+[B_SITE]
+MISJE PODMIEJSKIE ASUKI
+
+[KENJI]
+MISJE KENJIEGO
+
+[RAY]
+MISJE RAYA
+
+[LOVE]
+MISJE LOVE'A
+
+[YARDIE]
+MISJE DLA GANGU YARDIE
+
+[HOOD]
+MISJE DLA GANGU HOOD
+
+[CITYZON]
+Liberty City
+
+[IND_ZON]
+Portland
+
+[PORT_W]
+Callahan Point
+
+[PORT_S]
+Atlantic Quays
+
+[PORT_E]
+Portland Harbor
+
+[PORT_I]
+Trenton
+
+[S_VIEW]
+Portland View
+
+[CHINA]
+Chinatown
+
+[EASTBAY]
+Plaza Portland
+
+[LITTLEI]
+Saint Mark's
+
+[REDLIGH]
+Dz. Czerwonych Świateł
+
+[TOWERS]
+Wzgórza Hepburn
+
+[HARWOOD]
+Harwood
+
+[ROADBR1]
+Most Callahan
+
+[ROADBR2]
+Most Callahan
+
+[TUNNELP]
+Tunel Porter
+
+[BOMB1]
+Warsztat 8-Balla.
+
+[COM_ZON]
+Wyspa Staunton
+
+[STADIUM]
+Aspatria
+
+[HOSPI_2]
+Rockford
+
+[UNIVERS]
+Kampus Liberty
+
+[CONSTRU]
+Fort Staunton
+
+[PARK]
+Park Belleville
+
+[COM_EAS]
+Newport
+
+[SHOPING]
+Bedford Point
+
+[YAKUSA]
+Torrington
+
+[SUB_ZON]
+Shoreside Vale
+
+[AIRPORT]
+Port Lotniczy Francis
+
+[PROJECT]
+Wichita Gardens
+
+[SUB_IND]
+Pike Creek
+
+[SWANKS]
+Cedar Grove
+
+[BIG_DAM]
+Tama Cochrane
+
+[SUB_ZO2]
+Shoreside Vale
+
+[SUB_ZO3]
+Shoreside Vale
+
+[CAR_1]
+Karetka
+
+[CAR_2]
+Straż pożarna
+
+[CAR_3]
+Radiowóz
+
+[CAR_4]
+Enforcer
+
+[CAR_5]
+Barracks
+
+[CAR_6]
+Hipcio
+
+[CAR_7]
+Samochód FBI
+
+[CAR_8]
+Konwojowóz
+
+[CAR_9]
+Moonbeam
+
+[CAR_10]
+Autokar
+
+[CAR_11]
+Flatbed
+
+[CAR_12]
+Linerunner
+
+[CAR_13]
+Śmieciożer
+
+[CAR_14]
+Patriot
+
+[CAR_15]
+Pan Smakołyk
+
+[CAR_16]
+Muł
+
+[CAR_17]
+Yankee
+
+[CAR_18]
+Pony
+
+[CAR_19]
+Bobcat
+
+[CAR_20]
+Rumpo
+
+[CAR_21]
+Blista
+
+[CAR_22]
+Dodo
+
+[CAR_23]
+Autobus
+
+[CAR_24]
+Sentinel
+
+[CAR_25]
+Cheetah
+
+[CAR_26]
+Demon
+
+[CAR_27]
+Stinger
+
+[CAR_28]
+Infernus
+
+[CAR_29]
+Esperanto
+
+[CAR_30]
+Kuruma
+
+[CAR_31]
+Stretch
+
+[CAR_32]
+Perennial
+
+[CAR_33]
+Landstalker
+
+[CAR_34]
+Manana
+
+[CAR_35]
+Idaho
+
+[CAR_36]
+Ogier
+
+[CAR_37]
+Taksówka
+
+[CAR_38]
+Taksówka
+
+[CAR_39]
+Buggy
+
+[LUIGIS]
+Lokal Luigiego
+
+[GOAWAY]
+~g~Już podjąłeś się jednej misji!
+
+[LUIGGO]
+~g~Luigi sprawdza nowe dziewczyny. Przyjdź później!
+
+[JOEYGO]
+~g~Joey wyszedł do miasta z Misty. Przyjdź później.
+
+[TONIGO]
+~g~Toni zabrał swoją Mamuśkę do opery - wpadnij kiedy indziej!
+
+[KEMUGO]
+~g~Maria i Kemuri mają chwilowo inne obowiązki - wpadnij później!
+
+[KENJGO]
+~g~Kenji jest na naradzie Yakuzy. Wpadnij innym razem!
+
+[RAYGO]
+~g~Ray kręci się przy innych kiblach - wpadnij później!
+
+[LOVEGO]
+~g~Donald Love chwilowo zajmuje się innymi sprawami. Umów się z nim na późniejszą godzinę!
+
+[KENSGO]
+~g~Kenji jest zajęty! Wpadnij później!
+
+[HOODGO]
+~g~Hoods są aktualnie niedostępni!
+
+[WRONGT1]
+~g~Jeżeli szukasz zajęcia, wróć między 5:00 a 21:00.
+
+[WRONGT2]
+~g~Jeżeli szukasz zajęcia, wróć między 6:00 a 14:00.
+
+[WRONGT3]
+~g~Jeżeli szukasz zajęcia, wróć między 15:00 a 00:00.
+
+[GUN_1A]
+Użyj klawiszy ~h~~k~~PED_CYCLE_WEAPON_RIGHT~~w~ oraz ~h~~k~~PED_CYCLE_WEAPON_LEFT~ ~w~, aby przełączać się między kolejnymi rodzajami broni.
+
+[GUN_2A]
+Przytrzymaj klawisz ~h~~k~~PED_LOCK_TARGET~ ~w~, aby ~h~wykonać autocelowanie~w~ i naciśnij klawisz ~h~ ~k~~PED_FIREWEAPON~ ~w~, aby ~h~otworzyć ogień! Spróbuj postrzelać do celu...
+
+[GUN_2C]
+Przytrzymaj klawisz ~h~~k~~PED_LOCK_TARGET~ ~w~, aby ~h~wykonać autocelowanie~w~ i naciśnij klawisz ~h~ ~k~~PED_FIREWEAPON~ ~w~, aby ~h~otworzyć ogień! Spróbuj postrzelać do celu...
+
+[GUN_2D]
+Przytrzymaj klawisz ~h~~k~~PED_LOCK_TARGET~ ~w~, aby ~h~wykonać autocelowanie~w~ i naciśnij klawisz ~h~ ~k~~PED_FIREWEAPON~ ~w~, aby ~h~otworzyć ogień! Spróbuj postrzelać do celu...
+
+[GUN_3A]
+Trzymając wciśnięty klawisz ~h~~k~~PED_LOCK_TARGET~,~w~ naciśnij klawisz ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~ lub klawisz ~h~~k~~PED_CYCLE_TARGET_RIGHT~ , aby przełączać się między celami.
+
+[GUN_3B]
+Trzymając wciśnięty klawisz ~h~~k~~PED_LOCK_TARGET~,~w~ naciśnij klawisz ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~ lub klawisz ~h~~k~~PED_CYCLE_TARGET_RIGHT~ , aby przełączać się między celami.
+
+[GUN_4A]
+Trzymając wciśnięty klawisz ~h~~k~~PED_LOCK_TARGET~~w~, możesz chodzić lub biegać, a celownik cały czas pozostanie zablokowany na wybranym celu.
+
+[GUN_4B]
+Trzymając wciśnięty klawisz ~h~~k~~PED_LOCK_TARGET~~w~, możesz chodzić lub biegać, a celownik cały czas pozostanie zablokowany na wybranym celu.
+
+[GUN_5]
+Możesz przećwiczyć wybieranie celów i prowadzenie ognia na tych papierowych celach. Po treningu wróć do wykonywania misji.
+
+[TAXI1]
+~g~Poszukaj pasażera.
+
+[FARE1]
+~g~Cel podróży ~w~'Klub Seksownego Kociaka Miauu'~g~ w Dzielnicy Czerwonych Świateł.
+
+[FARE2]
+~g~Cel podróży ~w~Super Przecena~g~ w Portland View.
+
+[FARE3]
+~g~Cel podróży ~w~'stara szkoła'~g~ w Chinatown.
+
+[FARE4]
+~g~Cel podróży ~w~'kawiarenka Tłustego Joe'~g~ w Callahan Point.
+
+[FARE5]
+~g~Cel podróży ~w~'Amu-Nacja'~g~ w Dzielnicy Czerwonych Świateł.
+
+[FARE6]
+~g~Cel podróży ~w~'Auta na Kredyt'~g~ w Saint Mark's.
+
+[FARE7]
+~g~Cel podróży ~w~'bar topless 'U Woody'ego''~g~ w Dzielnicy Czerwonych Świateł.
+
+[FARE8]
+~g~Cel podróży ~w~'Bistro Marcos'~g~ w Saint Mark's.
+
+[FARE9]
+~g~Cel podróży ~w~'warsztat importowo-eksportowy'~g~ w Portland Harbor.
+
+[FARE10]
+~g~Cel podróży ~w~'Smażony Makaron'~g~ w Chinatown.
+
+[FARE12]
+~g~Cel podróży ~w~'stadion piłkarski'~g~ w Aspatrii.
+
+[FARE13]
+~g~Cel podróży ~w~'kościół'~g~ w Bedford Point.
+
+[FARE14]
+~g~Cel podróży ~w~'kasyno'~g~ w Torrington.
+
+[FARE15]
+~g~Cel podróży ~w~biblioteka Liberty~g~ w Kampusie Liberty.
+
+[FARE16]
+~g~Cel podróży ~w~galeria handlowa~g~ w okolicach Belville Park.
+
+[FARE17]
+~g~Cel podróży ~w~muzeum~g~ w Newport.
+
+[FARE18]
+~g~Cel podróży ~w~siedziba AmCo~g~ w Torrington.
+
+[FARE19]
+~g~Cel podróży ~w~Bolt Burgers~g~ w Bedford Point.
+
+[FARE20]
+~g~Cel podróży ~w~park~g~ w Belville.
+
+[FARE21]
+~g~Cel podróży ~w~Port Lotniczy im. Francisa.
+
+[FARE22]
+~g~Cel podróży ~w~'Tama Cochrane'.
+
+[FARE24]
+~g~Cel podróży ~w~'szpital' ~g~w Pike Creek.
+
+[FARE25]
+~g~Cel podróży ~w~'park'~g~ w Soherside Vale.
+
+[FARE26]
+~g~Cel podróży ~w~'North West Towers'~g~ w Wichita Gardens.
+
+[NEW_TAX]
+WIĘKSZE! SZYBSZE! MOCNIEJSZE! Nowe taksówki Borgnine rozpoczynają pracę w Harwood. Dzwoń już dziś: 555-BORGNINE.
+
+[TSCORE2]
+$~1~
+
+[IN_ROW]
+~1~Premia za SEKWENCJĘ! $~1~
+
+[TTUTOR]
+Naciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~~w~, aby włączyć lub wyłączyć misje w taksówce.
+
+[TTUTOR2]
+Naciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~~w~, aby włączyć lub wyłączyć misje taksówkarskie.
+
+[A_TIME]
++~1~ sekund
+
+[A_FULL]
+~r~Karetka jest pełna!
+
+[A_RANGE]
+~g~Radiostacja w karetce ma zbyt mały zasięg, zbliż się bardziej w stronę szpitala!
+
+[FTUTOR]
+Naciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~~w~, aby włączyć lub wyłączyc misje strażackie.
+
+[FTUTOR2]
+Naciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~~w~, aby włączyć lub wyłączyc misje strażackie.
+
+[F_PASS1]
+Pożar ugaszony!
+
+[F_RANGE]
+~g~Radiostacja w samochodzie strażackim ma zbyt mały zasięg - zbliż się bardziej w stronę remizy!
+
+[C_BREIF]
+~g~Podejrzany ostatnio widziany był w rejonie ~a~.
+
+[C_RANGE]
+~g~Radiostacja w samochodzie ma zbyt mały zasięg, zbliż się bardziej w stronę komisariatu!
+
+[DODO_FT]
+Leciałeś przez ~1~ sekund!
+
+[EBAL_A]
+Znam takie miejsce na skraju Dzielnicy Czerwonych Świateł, w którym możemy się zamelinować na jakiś czas,
+
+[EBAL_A1]
+ale moje ręce są do niczego, więc lepiej ty prowadź, brachu.
+
+[EBAL_1]
+Naciśnij klawisz ~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, aby ~h~wsiąść ~w~lub ~h~wysiąść~w~ z pojazdu.
+
+[EBAL_1B]
+Naciśnij klawisz ~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, aby ~h~wsiąść ~w~lub ~h~wysiąść~w~ z pojazdu.
+
+[EBAL_2]
+~g~Wracaj do samochodu!
+
+[EBAL_3]
+To jest ~h~radar~w~. Korzystaj z niego podczas poruszania się po mieście. Jedź za ~h~kropką~w~ na ~h~radarze~w~, aby dotrzeć do kryjówki!
+
+[EBAL_D]
+Jest tu taki jeden gość, który zna kogo trzeba. Nazywa się Luigi.
+
+[EBAL_D1]
+Niejedno razem przeszliśmy. Dla ciebie też pewnie znajdzie się jakaś robota. Zajrzyjmy do niego!
+
+[EBAL_E]
+Wpadniemy tam, a ja przedstawię cię komu trzeba.
+
+[EBAL_I]
+Szef zaraz wyjdzie do ciebie...
+
+[EBAL_J]
+8-Ball ma jakiś interes na górze.
+
+[EBAL_K]
+Może zrobisz coś dla mnie?
+
+[EBAL_L]
+Trzeba podwieźć jedną z moich dziewczynek. Załatw gablotę i odbierz Misty z kliniki. Przywieź ją tutaj.
+
+[EBAL_N]
+I lepiej cały czas gap się tylko na drogę!
+
+[EBAL_4]
+~r~8-Ball nie żyje~!
+
+[EBAL_5]
+~g~Załatw samochód!
+
+[EBAL_6]
+~g~Zabierz Misty!
+
+[LM1]
+'DZIEWCZYNKI LUIGIEGO'
+
+[LM2]
+'MOJE DZIWKI NIE ĆPAJĄ!'
+
+[LM3]
+'WOŻĄC PANNĘ MISTY'
+
+[LM5]
+'ACH, CÓŻ TO BYŁ ZA BAL...'
+
+[LM1_2]
+~g~Zabierz Misty do klubu 'U Luigiego'.
+
+[LM1_3]
+~g~Naciśnij klakson, aby zaprosić dziewczynę do samochodu.
+
+[LM1_6]
+~g~Wracaj do samochodu!
+
+[LM1_7]
+Zatrzymaj samochód obok Misty i poczekaj, aż wsiądzie.
+
+[LM1_8]
+Możesz wrócić do Luigiego i zapytać go o pracę albo pozwiedzać Liberty City.
+
+[LM2_A]
+Na ulicy pojawił się nowy towar, HEROINA.
+
+[LM2_E]
+Jakiś mądrala wciska ten syf moim dziewczynkom na Portland Harbor.
+
+[LM2_B]
+Jedź tam i zapoznaj jego twarz z bejsbolem!
+
+[LM2_G]
+Należy mi się jakaś rekompensata za tę zniewagę!
+
+[LM2_1]
+~g~Weź jego samochód i przemaluj go.
+
+[LM2_2A]
+Użyj klawisza ~h~ ~k~~PED_FIREWEAPON~~w~, aby zadawać ciosy ~h~pięścią ~w~i ~h~nogą~w~ lub ~h~uderzyć kijem ~w~!
+
+[LM2_2C]
+Użyj klawisza ~h~ ~k~~PED_FIREWEAPON~~w~, aby zadawać ciosy ~h~pięścią ~w~i ~h~nogą~w~ lub ~h~uderzyć kijem ~w~!
+
+[LM2_2D]
+Użyj klawisza ~h~ ~k~~PED_FIREWEAPON~~w~, aby zadawać ciosy ~h~pięścią ~w~i ~h~nogą~w~ lub ~h~uderzyć kijem ~w~!
+
+[LM2_3]
+~g~Schowaj samochód w kryjówce Luigiego!
+
+[LM2_4]
+~g~Przemaluj samochód!
+
+[LM3_A]
+Ej, muszę z tobą pogadać... Spoko, Mick, dokończymy później.
+
+[LM3_B]
+Jak leci, młody?
+
+[LM3_C]
+Syn Dona, Joey, chce się zabawić ze swoją ulubioną dziewczynką, Misty.
+
+[LM3_D]
+Jedź po nią na Wzgórza Hepburn...
+
+[LM3_E]
+ale uważaj, to terytorium gangu Diablo.
+
+[LM3_F]
+Potem odwieź ją do warsztatu Joeya w Trenton, byle szybko.
+
+[LM3_H]
+więc gap się na drogę, a nie na cycki Misty!
+
+[LM3_2]
+~g~Zabierz Misty do Joeya.
+
+[LM3_4]
+~g~Jedź po Misty!
+
+[LM3_5]
+To ty pracujesz teraz jako szoferak dla Luigiego, co? Najwyższy czas, od dawna potrzebujemy zaufanego kierowcy!
+
+[LM3_7]
+Zajmę się tobą za chwilkę, iskierko.
+
+[LM3_10]
+~g~Zdobądź samochód!
+
+[LM4_B]
+Jedź tam i załatw dla mnie ten problem.
+
+[LM4_C]
+Jeżeli potrzebujesz spluwy, wpadnij na zaplecze sklepu Amu-Nacja, naprzeciwko stacji metra.
+
+[LM5_A]
+Przy Moście Callahan, w budynku starej szkoły trwa Bal Policjanta.
+
+[LM5_B]
+Skoro budynek jest stary, to i goście zapewne będą szukać rozrywek 'w starym stylu'.
+
+[LM5_C]
+Moje dziewczyny pracują na ulicach w całym mieście.
+
+[LM5_D]
+Zawieź je na bal, aby mogły solidnie popracować.
+
+[LM5_1]
+~g~Jeżeli zabierzesz za dużo dziewczyn, to się poobijają w środku!~g~ Najpierw wysadź te, które już masz, potem wróć po następne.
+
+[LM5_2]
+~r~Jedna z dziewczyn Luigiego jest już tylko kupą padliny!
+
+[LM5_3]
+~g~Jest ci potrzebny samochód!
+
+[LM5_4]
+~g~Zgarnij dziewczyny pracujące w St. Mark's.
+
+[LM5_5]
+~g~Zawieź dziewczyny na Bal Policjanta!
+
+[LM5_8]
+~g~Dziewczyny na balu: ~1~
+
+[JM2]
+'ŻEGNAJ 'OKRĄGŁY' LEE CHONG'
+
+[JM4]
+'SZOFER CIPRIANIEGO'
+
+[JM5]
+'TRUP W BAGAŻNIKU'
+
+[JM1_1]
+~g~Zabierz samochód Forelliego do warsztatu 8-Balla na północ stąd, zaraz za salonem 'Auta na Kredyt'.
+
+[JM1_2]
+~g~Potem zaparkuj wózek z powrotem na właściwym miejscu pod Bistro Marcos.
+
+[JM1_3]
+~g~Uaktywnij bombę i spadaj stamtąd!
+
+[JM1_4]
+~g~Niszczysz samochód! Napraw go!
+
+[JM1_5]
+~g~Bomba w samochodzie nie została uzbrojona!
+
+[JM1_6]
+~g~Zaparkuj samochód we właściwej pozycji.
+
+[JM1_8A]
+~y~Hej, przecież to mój kumpel!
+
+[JM1_8B]
+~y~Warsztat jest zautomatyzowany. Po prostu wjedź do środka, zatrzymaj samochód, a obsługa załatwi całą resztę.
+
+[JM1_8C]
+~y~Pierwszy raz montujemy ładunek za darmo, ale za każdym następnym razem będziesz musiał zapłacić.
+
+[JM2_A]
+'Okrągły' Lee Chong handluje prochami dla jakiegoś nowego gangu z Kolumbii... Czy z Kolorado... Nieważne...
+
+[JM2_B]
+Nie pamiętam. Zresztą, kogo to obchodzi.
+
+[JM2_D]
+Ten szczurek właśnie sprzedaje ostatnie sajgonki, rozumiesz?
+
+[JM2_E]
+Masz go zdmuchnąć!
+
+[JM2_G]
+Załatw sobie dziewiątkę. Znajdziesz ten sklep, nie?
+
+[JM2_H]
+Tylko pamiętaj, w Chinatown lepiej dobrze pilnować własnego dupska. To terytorium Triady.
+
+[JM3_A]
+W porządku, mam zamiar skubnąć ciężarówkę z wypłatami.
+
+[JM3_B]
+Codziennie wyjeżdża na miasto z okolic Chinatown.
+
+[JM3_C]
+Zwykłe kule nawet nie zarysują jej pancerza, więc musisz po prostu zdobyć ciężki samochód i zepchnąć ją z drogi.
+
+[JM3_D]
+Jak mocno walniesz, to ci tchórze z ochrony zwieją, gdzie pieprz rośnie.
+
+[JM3_E]
+Wtedy zabierz ciężarówkę do magazynu w dokach - moi ludzie już się nią tam zajmą.
+
+[JM3_F]
+Ciężarówka nie będzie na ciebie czekać, dlatego lepiej się streszczaj.
+
+[JM3_1]
+~g~Zabierz ciężarówkę do kryjówki.
+
+[JM3_2]
+~g~Taranuj ciężarówkę dopóki poziom jej uszkodzeń nie przekroczy 70 procent.
+
+[JM4_B]
+O, to jest ten gość, o którym ci mówiłem!
+
+[JM4_C]
+Posłuchaj, on nie jest Włochem i żaden z niego mechanik, ale potrafi radzić sobie z problemami.
+
+[JM4_D]
+To jest Pops Capo, a to Tony Cipriani.
+
+[JM4_E]
+Tak, Tony Cipriani to ja.
+
+[JM4_F]
+Podrzuć go do restauracji Mamuśki w St. Marks.
+
+[JM4_G]
+Jeszcze jedno. Posłuchaj, planuję taką robótkę, do której potrzebny jest dobry kierowca. Wpadnij później, to pogadamy, OK?
+
+[JM4_2]
+Zaczekaj tutaj. Nie gaś silnika - to nie jest wizyta towarzyska.
+
+[JM4_3]
+To pułapka Triad! Zabierz nas stąd, młody!
+
+[JM4_4]
+Triady myślą, że mogą ze mną zadzierać... ZE MNĄ!
+
+[JM4_6]
+Ostrożnie z tym wozem! Mówiłem, bez numerów!
+
+[JM4_7]
+~g~Zabierz Toniego do restauracji jego matki.
+
+[JM4_8]
+~r~Toni został załatwiony!
+
+[JM5_A]
+Pięknie! Po prostu pięknie.
+
+[JM5_B]
+Oto i facet, którego mi potrzeba!
+
+[JM5_D]
+Jeden z braci Forelli myślał, że jest bystrzejszy niż woda w kiblu, a więc doczekał się odpowiedniej kary.
+
+[JM5_E]
+Zabierz samochód z ciałem do zgniatarki w Harwood, OK?
+
+[JM5_1]
+~g~Zabierz samochód do zgniatarki!
+
+[JM5_2]
+~g~To bracia Forelli!
+
+[JM6_A]
+Ale z niej sztuka, co?
+
+[JM6_B]
+W porząsiu, posłuchaj. Załatw sobie gablotę i jedź do kryjówki w St. Marks. Tam zabierzesz paru moich kumpli.
+
+[JM6_C]
+Robią napad na bank i potrzebują kierowcy.
+
+[JM6_D]
+Dałem im słowo, że znasz się na tym fachu, więc nie spieprz sprawy, dobra?
+
+[JM6_E]
+Dowieź ich do banku przed godziną piątą i nie waż się spóźnić nawet minutę.
+
+[JM6_2]
+Nie gaś silnika, zaraz wracamy.
+
+[JM6_3]
+Zabierz nas stąd!!
+
+[JM6_4]
+Zgub gliniarzy i dowież nas do kryjówki!
+
+[JM6_6]
+~g~Skombinuj jakiś samochód, który będzie trochę mniej rzucał się w oczy.
+
+[JM6_7]
+~g~Musisz zabrać wszystkich 3 bandytów, aby móc przeprowadzić skok!
+
+[TM1]
+'ZABIERZ BRUDY DO PRALNI'
+
+[TM2]
+'HARACZ'
+
+[TM3]
+'SALVATORE ZWOŁUJE NARADĘ'
+
+[TM4]
+'TRIADY I TROSKI'
+
+[TM5]
+'SMAŻONE RYBY'
+
+[TONI_P]
+Mam dla ciebie pilną pracę, Toni!
+
+[TM1_A]
+~w~Siadaj, synu! Siadaj, zamknij jadaczkę i słuchaj.
+
+[TM1_B]
+~w~Więc pralnie nie chcą płacić haraczu, co?
+
+[TM1_C]
+~w~Triady myślą, że mogą mi podskakiwać?
+
+[TM1_D]
+~w~Nauczymy tych dmuchanych twardzieli, co to znaczy być prawdziwym twardzielem.
+
+[TM1_E]
+~w~Tak, damy im lekcję pokory. Mój syn nie będzie znosić upokorzeń od jakiejś Triady!
+
+[TM1_F]
+~w~Twój ojciec, Panie świeć nad jego duszą, jeszcze na Sycylii trzymał ich krótko i nie pozwalał, żeby Triady wciskały mu kit.v
+
+[TM1_G]
+~w~Przepraszam, Mamo. Tak jest, Mamo.
+
+[TM1_H]
+~w~Chcę, żebyś zniszczył ciężarówki z pralni
+
+[TM1_I]
+~w~i rozdeptał każdego sługusa Triad, który wejdzie ci w drogę.
+
+[TM1_J]
+~w~8-Ball załatwi ci wszystko, co jest potrzebne do tej roboty.
+
+[TM2_A]
+~w~TONI gdzieś polazł, znowu będzie straszyć ludzi albo przynajmniej usiłować kogoś przestraszyć.
+
+[TM2_AA]
+~w~Nigdy nie będzie nawet w połowie takim twardzielem jak jego Papa. Zostawił dla ciebie kartkę na stole.
+
+[TM2_B]
+~w~Pralnie zgodziły się zapłacić - spisałeś się dobrze, synu!
+
+[TM2_C]
+~w~Odbierz forsę i przywieź ją tutaj. Uważaj na Triady.
+
+[TM2_D]
+~w~Możliwe, że będą chcieli podłożyć nam świnię, ale nie daj sobie wciskać żadnego gówna.
+
+[TM2_E]
+~w~Nikt, powtarzam, nikt nie zadziera z TONIM CIPRIANI!
+
+[TM2_1]
+~g~Odwieź forsę Toniemu!!!
+
+[TM2_2]
+~g~Zdmuchnąłeś ich wszystkich!
+
+[TM3_MA]
+~w~Nie wiem, gdzie on się podziewa!
+
+[TM3_MB]
+~w~Jak pragnę zdrowia, ten mój chłopak czasami jest taki głupi.
+
+[TM3_MC]
+~w~Jego ojciec był zupełnie inny. Zawsze silny, męski, u steru wydarzeń...
+
+[TM3_A]
+~w~Don Salvatore zwołał naradę.
+
+[TM3_B]
+~w~Masz odebrać z warsztatu limuzynę i jego chłopaka, Joeya.
+
+[TM3_C]
+~w~Potem zabierz Luigiego z klubu i wróć tutaj po mnie.
+
+[TM3_D]
+~w~Razem pojedziemy do domu szefa.
+
+[TM3_E]
+~w~Triady nie znają umiaru.
+
+[TM3_F]
+~w~Chcą wojny, będą mieli wojnę.
+
+[TM3_G]
+~w~Teraz zmykaj.
+
+[TM3_1]
+~g~Odbierz limuzynę od Joeya.
+
+[TM3_2]
+~g~Teraz jedź po Luigiego.
+
+[TM3_3]
+~g~Teraz jedź po Toniego.
+
+[TM3_4]
+~g~Zawieź ferajnę do rezydencji Salvatore.
+
+[TM3_5]
+~y~Triady przygotowały zasadzkę!
+
+[TM4_B]
+~w~A więc WOJNA! Triady używają jako przykrywki fabryki przetwórstwa ryb.
+
+[TM4_C]
+~w~Większość ich interesów odbywa się na targu rybnym w chińskiej dzielnicy.
+
+[TM4_D]
+~w~Pralnie nadal wiszą nam haracz za ochronę.
+
+[TM4_E]
+~w~Żółtki myślą, że Triady ich obronią, więc czas wymierzyć im stosowną karę.
+
+[TM4_F]
+~w~Weź tych dwóch chłopaków i załatwcie szefów Triady!
+
+[TM4_G]
+~w~Tam, u diabła, jeżeli nadarzy się okazja, to załatwcie też paru żołnierzy Triady.
+
+[TM4_GAT]
+~g~Do środka może wjechać tylko ciężarówka Triad.
+
+[TM5_B]
+~w~Wystarczy już tego pitolenia.
+
+[TM5_C]
+~w~Czas wykończyć Triady w Liberty raz na zawsze!
+
+[TM5_D]
+8-Ball założył ładunek wybuchowy w śmieciarce.
+
+[TM5_E]
+~w~To jest bomba z zegarem czasowym, więc jak się spóźnisz, nie pozostanie po tobie żaden ślad. Jedź po śmieciarkę.
+
+[TM5_F]
+~w~Tylko ostrożnie, 8-Ball mówi, że mechanizm jest cholernie czuły i byle wstrząs może spowodować wybuch!
+
+[TM5_G]
+~w~Zaparkuj między cysternami z benzyną i znikaj stamtąd!
+
+[TM5_H]
+~w~Zaparkuj pomiędzy zbiornikami z gazem i spadaj gdzie pieprz rośnie!
+
+[TM5_I]
+~w~Chcę, żeby na miasto spadł deszcz makreli.
+
+[TM5_J]
+~w~Zobaczysz, tym razem to nie żadne wielkanocne bum-bum, tylko prawdziwa plaga biblijna!
+
+[FM2]
+'RÓWNO Z TRAWĄ'
+
+[FM4]
+'OSTATNIE PROŚBY'
+
+[FM1_A]
+~w~Ja i moi ludzie musimy obgadać parę kwestii,
+
+[FM1_B]
+~w~a więc ty zapewnisz mojej dziewczynie rozrywkę na wieczór.
+
+[FM1_C]
+~w~HEJ, MARIA! RUSZ DUPĘ!
+
+[FM1_D]
+~w~Głupia suka, zawsze się tak zachowuje.
+
+[FM1_E]
+~w~A oto i ona, jedyna w swoim rodzaju królowa piękności!
+
+[FM1_F]
+~w~Co tam robiłaś tyle czasu?
+
+[FM1_G]
+~w~Cokolwiek to było, na pewno straciłem na tym jakieś pieniądze.
+
+[FM1_H]
+~w~Chyba nie myślisz, że jestem tu, bo lubię z tobą gadać?
+
+[FM1_I]
+~w~Wsiadaj do samochodu i zamknij swoją wielką gębę.
+
+[FM1_J]
+~w~Możesz zabrać limuzynę, ale przyprowadź ją z powrotem w jednym kawałku, zrozumiano?
+
+[FM1_K]
+~w~I uważaj na nią! Ona lubi pakować się w kłopoty!
+
+[FM1_L]
+~w~Dość! Twój nowy piesek gończy na pewno zna już te historyjki,
+
+[FM1_M]
+~w~a poza tym to przecież kawał chłopa!
+
+[FM1_N]
+~w~Hej, piesku! Odwiedzimy Chico i załatwimy jakieś dopalacze na imprezę.
+
+[FM1_P]
+~g~To właśnie Chico, podjedź do niego.
+
+[FM1_S]
+~w~Jak sobie życzysz, moja pani.
+
+[FM1_TT]
+~w~NALOT POLICYJNY!
+
+[FM1_1]
+~g~Wracaj do limuzyny!
+
+[FM1_2]
+~g~Wsiadaj do limuzyny!
+
+[FM1_3]
+~r~Jeżeli zostawisz Marię, Salvatore każe cię obić jak psa! Zawróćj i zabierz ją ze sobą!
+
+[FM1_4]
+~g~Zostawiłeś kobietę Dona! Wracaj do magazynu i zaczekaj na Marię!
+
+[FM1_5]
+~g~Zawieź Marię do domu Salvatore tak, aby włos jej z głowy nie spadł!
+
+[FM1_6]
+~g~Chico nie będzie czekał wiecznie - zabierz Marię na wybrzeże!
+
+[FM1_7]
+~r~Maria nie żyje! Salvatore nie ucieszy się z tej wiadomości...
+
+[FM1_8]
+~r~Załatwiłeś dostawcę Marii!!!
+
+[FM2_J]
+Zostaw nas na chwilkę samych.
+
+[FM2_A]
+Kartel Kolumbijski produkuje HEROINĘ gdzieś na terenie Liberty.
+
+[FM2_K]
+ale nadal nie wiemy, gdzie, a oni działają tak, jakby z góry znali wszystkie nasze posunięcia.
+
+[FM2_L]
+Za barem 'U Luigiego' pracuje pewien gość. Nazywa się Kudłaty Bob.
+
+[FM2_M]
+Ostatnio wydaje więcej kasy niż mógłby zarobić.
+
+[FM2_N]
+Zazwyczaj po pracy wraca do domu taksówką. Jedź za nim.
+
+[FM2_O]
+A jeżeli okaże się, że to nasz kret... Zabij go!
+
+[FM2_F]
+Oto nasz mały przyjaciel, pan wielka gęba we własnej osobie.
+
+[FM2_G]
+Ktoś cię śledził? Wiesz, że to, co się tu dzieje, to nasz mały sekret.
+
+[FM2_H]
+Nie, nikt mnie nie śledził. Masz mój towar?
+
+[FM2_I]
+Masz swoje prochy, śmieciu, a teraz mów.
+
+[FM2_P]
+A więc rodzina Leone prowadzi teraz wojnę na dwa fronty.
+
+[FM2_Q]
+Z Triadami toczą wojnę o terytorium i wygląda na to, że żadna ze stron nie ma zamiaru się poddać.
+
+[FM2_R]
+Z drugiej strony, Joey Leone wplątał się w krwawe porachunki z rodziną Forellich.
+
+[FM2_S]
+Rodzina Leone z każdym dniem traci ludzi i wpływy w mieście.
+
+[FM2_T]
+Salvatore zaczyna zachowywać się jak niebezpieczny dla otoczenia paranoik. Podejrzewa wszystkich i wszędzie wietrzy spisek.
+
+[FM2_U]
+Ale jeżeli wszyscy są tak lojalni jak ty, to nie ma się o co martwić, prawda?
+
+[FM2_1]
+~g~To Kudłaty Bob!
+
+[FM2_2]
+~g~Kudłaty wyszedł z klubu - śledź go!
+
+[FM2_5]
+~g~Zabierz go do Portland Harbor.
+
+[FM2_6]
+~r~Kudłaty nie wsiądzie do porozbijanej taksówki!
+
+[FM2_7]
+~r~Kudłaty zwiał! Spotkanie odwołane!
+
+[FM2_8]
+~g~Walnij Kudłatego Boba!
+
+[FM2_9]
+~r~Kudłaty Bob nie żyje!
+
+[FM2_10]
+~r~Kudłaty ucieka!
+
+[FM2_11]
+~g~Zaparkuj przed klubem 'U Luigiego'! Kudłaty Bob powinien niedługo wyjść.
+
+[FM2_12]
+~r~Zgubiłeś go!
+
+[FM3_A]
+~w~Powinniśmy sprzątnąć tych łajdaków z Kartelu,
+
+[FM3_B]
+~w~ale dopóki mamy na głowie wojnę z Triadami, nie mamy na to dość sił.
+
+[FM3_C]
+~w~Kartel zarabia ogromne pieniądze na sprzedaży tej syfiastej HEROINY.
+
+[FM3_D]
+~w~Jeżeli przypuścimy otwarty atak, rozsmarują nas na miazgę.
+
+[FM3_E]
+~w~Zapewne produkują prochy na tym wielkim statku, do którego doprowadził cię Kudłaty.
+
+[FM3_F]
+~w~Dlatego właśnie musimy działać z głową. I to z twoją głową.
+
+[FM3_G]
+~w~Chciałbym prosić cię, abyś zrobił mi osobistą przysługę i zniszczył tę fabrykę HERY, Salvatore.
+
+[FM3_H]
+~w~Jeżeli to ci się uda, spędzisz resztę życia w dostatku.
+
+[FM3_I]
+~w~Spotkaj się z 8-Ballem. On zna się na dynamicie jak nikt inny - będziesz potrzebował jego doświadczenia.
+
+[FM3_8A]
+~w~Mój czarnuch! Salvatore już dzwonił,
+
+[FM3_8B]
+~w~ale do takiej roboty potrzeba będzie sporo fajerwerków.
+
+[FM3_8D]
+~w~ale chyba wiesz, że żaden dolar z tej sumy nie zostanie zmarnowany.
+
+[FM3_8E]
+~w~W porządku, zróbmy to!
+
+[FM3_8F]
+~w~Mogę nastawić to maleństwo na wybuch, ale rany na moich łapskach jeszcze się nie wygoiły i nie poradzę sobię z giwerą.
+
+[FM3_8G]
+~w~Weź karabin i rozwal parę łbów.
+
+[FM3_4]
+~g~Zatrzymaj samochód i wypuść 8-Balla!
+
+[FM3_7]
+~r~Zgubiłeś 8-Balla!
+
+[FM3_8]
+~r~Strażnicy podnieśli alarm!
+
+[FM4_A]
+~w~To mój ulubiony czyściciel.
+
+[FM4_B]
+~w~Jestem z ciebie dumny, chłopcze Wybiłeś tym tępakom to ich gówno z głów.
+
+[FM4_C]
+~w~Zanim będziemy mogli uczcić twój sukces, mam dla ciebie jeszcze jedną małą robótkę.
+
+[FM4_D]
+~w~Na następnej przecznicy stoi samochód z klubu Lugiego.
+
+[FM4_E]
+~w~W środku jest cały upaćkany mózgiem.
+
+[FM4_F]
+~w~Musieliśmy pomóc jednemu gościowi namyślić się nad paroma sprawami i wyszedł z tego niezły bałagan.
+
+[FM4_H]
+~w~Zabierz ten samochód do zgniatacza, zanim wypatrzą go gliniarze.
+
+[AM3]
+'PAPARAZZO NA DNIE'
+
+[AM4]
+'WYPŁATA DLA RAYA'
+
+[AM5]
+DWULICOWY TANNER
+
+[AM1_A]
+Zanim przejdziemy do jakichkolwiek interesów, musimy wyjaśnić sobie
+
+[AM1_B]
+pewne kwestie. Wyłóżmy nasze karty na stół.
+
+[AM1_C]
+Należę do Yakuzy i wiem, że pracowałeś dla rodziny Salvatore Leone.
+
+[AM1_D]
+Myślę, że znajdzie się dla ciebie miejsce w naszej organiacji.
+
+[AM1_E]
+Ale najpierw musisz udowodnić, że naprawdę zerwałeś wszystkie związki z Mafią.
+
+[AM1_G]
+Zadbaj, aby nie dotarł do celu żywy.
+
+[AM1_H]
+W międzyczasie, ja i Maria pogawędzimy o starych dobrych czasach.
+
+[AM1_I]
+Asuka, przyszedł twój masażysta.
+
+[AM1_J]
+To nie żaden masażysta.
+
+[AM1_1]
+~g~Salvatore wychodzi z knajpy 'U Luigiego'!
+
+[AM1_2]
+~r~Zostałeś zauważony!
+
+[AM1_3]
+~r~Spudłowałeś do Salvatore!
+
+[AM1_4]
+~r~Znakomicie, wystraszyłeś cel! I ty uważasz się za zawodowca?
+
+[AM1_5]
+~g~Jedź do Dzielnicy Czerwonych Świateł i poczekaj, aż Salvatore wyjdzie z klubu.
+
+[AM1_7]
+~r~Salvatore siedzi sobie bezpiecznie w domu i sączy swój koktajl. Nie spodziewaj się, że ktoś nazwie cię 'Szakalem'!
+
+[AM1_8]
+~g~Salvatore będzie wychodzić z klubu Luigiego około ~1~:~1~
+
+[AM2_4]
+~g~Skradałeś się z gracją słonia w składzie porcelany!
+
+[AM3_A]
+Jakiś nieproszony reporter wtykał tu swój nos
+
+[AM3_B]
+Maria i ja jedziemy razem na małe wakacje, a ty pozbądź się tego zboczonego podglądacza.
+
+[AM4_A]
+A oto i mój ulubiony człowiek do każdej roboty!
+
+[AM4_B]
+Maria chciałaby cię widzieć, ale... nie może podejść. Powiem jej, że pytałeś.
+
+[AM4_C]
+Kto tam? Asuka? Wiem, że byłam niegrzeczną dziewczynką, ale naprawdę muszę do toalety! OK?
+
+[AM4_D]
+Czas, abyś poznał naszą wtyczkę w tutejszej policji.
+
+[AM4_E]
+Tu masz zapłatę za ostatnią robótkę, jaką dla nas wykonał.
+
+[AM4_F]
+Facet jest bardzo ostrożny, to chyba jasne.
+
+[AM4_G]
+Jak najszybciej odszukaj budkę telefoniczną w Torrington i czekaj na instrukcje.
+
+[AM5_A]
+Maria i ja wyszliśmy na zakupy.
+
+[AM5_B]
+Nasze źródło w policji donosi, że jeden z naszych kierowców to policyjny tajniak.
+
+[AM5_C]
+Bez samochodu nie jest groźny. Przyczepiliśmy do jego gabloty nadajnik.
+
+[AM5_D]
+Niech się dowie, czym grozi taka zabawa.
+
+[AM5_1]
+Tanner chyba ma coś do ciebie!
+
+[AS1]
+'PRZYNĘTA'
+
+[AS2]
+'ESPRESSO NA WYNOS!'
+
+[AS4]
+'OKUP'
+
+[AS1_A]
+~w~Miguel chyba uważa, że źle go traktuję.
+
+[AS1_B]
+~w~Mimo to zdradził mi, jak bardzo Catalina obawia się twojej zemsty.
+
+[AS2_A]
+~w~Nie doceniliśmy planów, jakie Catalina wiąże ze swoją heroiną.
+
+[AS2_B]
+~w~Marzy jej się coś więcej niż banda Yardies sprzedająca prochy na rogu.
+
+[AS2_D]
+~w~Sprzedają herę w swojej sieci budek ulicznych.
+
+[AS2_1]
+~g~Wszystkie budki z espresso w Portland zostałyzniszczone!!
+
+[AS2_2]
+~g~Wszystkie budki z espresso na Wyspie Staunton zostały zniszczone!!
+
+[AS2_3]
+~g~Wszystkie budki z espresso w Shoreside Vale zostały zniszczone!!
+
+[AS2_4]
+~r~Kartel ostrzegł swoich dilerów!!
+
+[AS2_5]
+~g~W Shoreside Vale i na Wyspie Staunton nadal stoi kilka budek z espresso!
+
+[AS2_6]
+~g~W Shoreside Vale nadal stoi kilka budek z espresso!
+
+[AS2_7]
+~g~Na Wyspie Staunton nadal stoi kilka budek z espresso!
+
+[AS2_8]
+~g~W Portland nadal stoi kilka budek z espresso
+
+[AS2_9]
+~g~W Portland i Shoreside Vale nadal stoi kilka budek z espresso
+
+[AS2_10]
+~g~W Portland i na Wyspie Staunton nadal stoi kilka budek z espresso
+
+[AS2_12]
+~g~Badaj dzielnice miasta i szukaj budek Espresso-2-Go!
+
+[AS3_A]
+~W~Przyciskamy już teraz czy poczekamy, aż trochę osłabnie?
+
+[AS3_B]
+~w~Popieść go trochę...
+
+[AS3_D]
+~w~Mój Człowiek do Każdej Roboty!
+
+[AS3_E]
+~w~Nudziłam się, więc wpadłam żeby dotrzymać Asuce towarzystwa.
+
+[AS3_1]
+~g~Odszukaj ~r~łódź~g~ i dopłyń do ~b~boi!
+
+[AS3_3]
+~g~Odczekaj, aż ~y~samolot~g~ rozpocznie podejście!!
+
+[AS3_5]
+~g~Zbierz ładunek!
+
+[AS3_4]
+~g~Użyj wyrzutni rakietowej aby zestrzelić ~y~samolot~g~!!
+
+[AS3_2]
+~b~Płyń do boi wyznaczających lądowisko! ~y~Samolot wykonuje już ostatnie podejście!!
+
+[AS3_6]
+~g~~1~ Z 8!
+
+[KM1]
+'UCIECZKA KANBU'
+
+[KM3]
+'ZDUSIĆ UKŁADY'
+
+[KM4]
+'SHIMA'
+
+[KM5]
+'UDERZENIE'
+
+[KM1_A]
+Moja siostra ma o tobie dobre mniemanie,
+
+[KM1_E]
+choć nie mogę sobie wyobrazić, żeby gaijin mógł dać nam coś innego niż rozczarowania.
+
+[KM1_B]
+Być może mógłbyś pomóc w rozwiązaniu problemu, który leży mi na sercu.
+
+[KM1_F]
+Rzecz jasna, porażka oznacza utratę honoru.
+
+[KM1_C]
+Kanbu, członek Yakuzy, przebywa w areszcie, gdzie czeka na proces.
+
+[KM1_G]
+To ceniony członek rodziny.
+
+[KM1_H]
+Odbij go z aresztu i przywieź do dojo w Bedford Point.
+
+[KM1_D]
+Dziękujemy ci za twoje bezinteresowne działania. Jeżeli kiedykolwiek będziesz potrzebował pomocy, dojo z radością przydzieli ci dwóch wojowników, którzy staną u twego boku.
+
+[KM1_1]
+~g~Ukradnij radiowóz!
+
+[KM1_2]
+~g~Załóż bombę w samochodzie!
+
+[KM1_3]
+~g~Teraz zawieź go do dojo Yakuzy.
+
+[KM1_5]
+~g~W porządku, teraz jazda na posterunek.
+
+[KM1_6]
+~g~Zamontuj w samochodzie ładunek wybuchowy!
+
+[KM1_7]
+~g~Tylko dla pojazdów policyjnych!
+
+[KM1_9]
+~r~Nie użyłeś bomby samochodowej, aby zniszczyć mur.
+
+[KM1_10]
+~r~Kanbu z Yakuzy jest trupem - tak samo jak twój honor!
+
+[KM1_11]
+~r~Ściągnąłeś sobie na głowę kłopoty!
+
+[KM2_A]
+Nie sposób przecenić znaczenia etykiety w tej branży.
+
+[KM2_B]
+Na moją hańbę, pewien człowiek oddał mi kiedyś przysługę, a ja nigdy nie miałem okazji, aby mu się odwdzięczyć.
+
+[KM2_C]
+Konikiem tego człowieka są samochody. Poprosił mnie, abym zgromadził pewne modele aut do jego kolekcji.
+
+[KM2_F]
+Od tego zależy mój honor.
+
+[KM2_2]
+~g~Samochód dostarczony.
+
+[KM3_A]
+Kiedy nadciągają ciemne chmury, głupiec odwraca wzrok, a mędrzec stawia im czoła.
+
+[KM3_B]
+Kartel Kolumbijski zignorował liczne prośby, aby nie naruszać naszych interesów w Liberty City.
+
+[KM3_C]
+Teraz negocjują układ z Jamajczykami, aby jeszcze bardziej nas upokorzyć.
+
+[KM3_D]
+Właśnie finalizują układ o podziale wpływów w mieście.
+
+[KM3_F]
+Weź jednego z moich ludzi, ukradnij samochód gangu Yardie i jedź przekazać Kolumbijczykom nasze wyrazy szacunku.
+
+[KM3_E]
+Nasz honor wymaga, aby wszyscy umarli.
+
+[KM3_2]
+~g~Jedź po swój kontakt.
+
+[KM3_3]
+~g~Spotkanie odbędzie się na parkingu szpitalnym w Rockford!
+
+[KM3_4]
+~r~Uciekają!
+
+[KM3_6]
+~g~Zabij ich, zabij ich wszystkich!
+
+[KM3_8]
+~g~Aby wykonać zadanie, potrzebujesz samochodu gangu Yardie.
+
+[KM3_9]
+~r~Jeden z Kolumbiczyków nie żyje, układ odwołany.
+
+[KM3_10]
+~r~Twój kontakt nie żyje!
+
+[KM4_A]
+Jeżeli chcesz być naprawdę silny, nie możesz nigdy okazywać słabości.
+
+[KM4_C]
+Jak najszybciej odbierz pieniądze, abyśmy mogli wpłacić je na konto kasyna.
+
+[KM4_1]
+Nie mam wam czym zapłacić, ale nawet gdybym miał, to i tak bym tego nie zrobił!
+
+[KM4_9]
+Jakaś banda szczeniaków właśnie stąd uciekła! Zabrali wszystko!
+
+[KM4_2]
+Nie ma z was żadnego pożytku.
+
+[KM4_10]
+A czy ty w ogóle należysz do Yakuzy...?
+
+[KM4_3]
+Nie za to wam płacę, obwiesie. Gdybym chciał takiej ochrony, to zaprosiłbym cholerną policję.
+
+[KM4_4]
+~g~Wymierz karę gangowi odpowiedzialnemu za napad i odzyskaj ~b~opłatę za ochronę~g~!
+
+[KM4_7]
+~r~Sklepikarz wydał ostatnie tchnienie!
+
+[KM4_5]
+Donald Love zaprasza cię do swojego ogrodu herbacianego na rozmowę.
+
+[KM4_6]
+Tam są pieniądze!
+
+[KM4_8]
+~r~Teczka odebrana!
+
+[KM5_A]
+TO TY! Wybrałeś najwłaściwszy moment, aby pokazać swoją bezwartościową postać!
+
+[KM5_B]
+Zdaje się, że twoje marne próby, aby odwieść Jamajczyków
+
+[KM5_B1]
+od skumplowania się z Kartelem były całkowicie chybione!
+
+[KM5_C]
+Handlarze Yardie krążą po ulicach Liberty, sprzedając woreczki HERY tak, jakby sprzedawali hotdogi!
+
+[KM5_D]
+Te wieprze z Kartelu śmieją się z nas, ze mnie!
+
+[KM5_E]
+Dam ci ostatnią szansę, abyś mógł dowieść, że zaufanie, jakim obdarzyła cię moja siostra, nie było bezpodstawne.
+
+[KM5_F]
+Rozjedź tych śmieci i spłucz swoją hańbę w potokach krwi naszych wrogów!!!
+
+[KM5_3]
+~r~Nie udało ci się zabić co najmniej ~1~ członków gangu Yardie.
+
+[KM5_4]
+~g~Gratulacje, zabiłeś ~1~ członków gangu Yardie.
+
+[KM5_5]
+~g~Gratulacje, zabiłeś ~1~ członków gangu Yardie. PREMIA $~1~.
+
+[RM1]
+'UCISZYĆ KAPUSIA'
+
+[RM3]
+'GONIĄC DOWODY'
+
+[RM4]
+'NA RYBY'
+
+[RM5]
+'DOKOŃCZYĆ DZIEŁO'
+
+[RM1_D]
+Siedzi pod ochroną policji w budynku WitSec w Newport, w którymś z mieszkań za parkingiem.
+
+[RM1_E]
+Podpal tę budę, to powinno ich wypłoszyć. Wtedy na nich zapoluj - zadbaj, aby McAffrey już nigdy z nikim nie rozmawiał!
+
+[RM1_1]
+~g~Znajdź miejsce, w którym przebywa chroniony świadek.
+
+[RM1_2]
+~g~Wykończ McAffrey'a!
+
+[RM2_A1]
+Hej, synu, chodź tutaj!
+
+[RM2_A]
+Mój stary kumpel z wojska prowadzi sklepik w Rockford.
+
+[RM2_D]
+Potrzeba mu wsparcia. W zamian możesz liczyć na spore obniżki cen na spluwy, które ma na składzie.
+
+[RM2_E]
+Ray wspominał, że ktoś przyjdzie... ale nie myślałem, że przyśle takiego szczeniaka.
+
+[RM2_F]
+No cóż, trzy ramiona to zawsze więcej niż jedno, więc bierz broń według życzenia.
+
+[RM2_G]
+~g~Zasuwaj i pilnuj Phila!
+
+[RM2_H]
+~r~Phil zginął!
+
+[RM2_L]
+No, no! Gdybyś był z nami wtedy w Nikaragui, może jeszcze miałbym swoją rękę!
+
+[RM2_N]
+Zostaw forsę. Teraz lepiej znikaj, sam zajmę się policją.
+
+[RM3_D]
+Dowody będą przewożone przez miasto.
+
+[RM3_E]
+Musisz staranować ten samochód i zebrać wszystkie dowody, co do jednego!
+
+[RM3_F]
+Kiedy już je zbierzesz, zostaw je w samochodzie i podpal go.
+
+[RM3_G]
+Obaj będziemy mieć sporo korzyści, chłopcze.
+
+[RM3_1]
+~g~Zostaw dowody w samochodzie i podpal wóz.
+
+[RM3_4]
+~g~Samochód prokuratury zgubił dowody!
+
+[RM3_6]
+~r~Teraz te fotografie obejrzy całe miasto!
+
+[RM3_7]
+~g~Podpal samochód!
+
+[RM4_A]
+Podejrzewam, że mój wspólnik to kret.
+
+[RM4_C]
+On każdego wieczoru wypływa na morze, w okolice latarni przy Portland Rock, aby łowić ryby.
+
+[RM4_D]
+Podwędź policyjną łódź i dopilnuj, aby poszedł na dno razem ze swoimi zdradzieckimi planami!
+
+[RM4_1]
+~g~Ukradnij łódź policyjną!
+
+[RM4_2]
+~g~Płyń do latarni morskiej i załatw kolegę Raya!
+
+[RM5_A]
+Ty nieudaczny łajdaku!
+
+[RM5_A1]
+Schrzaniłeś robotę! Moja dupa już się zaczyna smażyć, a ty nie potrafisz zabić nawet cholernej muchy.
+
+[RM5_B]
+Zapłaciłem ci kupę szmalu, żebyś sprzątnął świadka, a on dalej żyje!
+
+[RM5_B1]
+Dzisiaj będzie składał pierwsze zeznania w Sądzie Federalnym!
+
+[RM5_C]
+Lada chwila będzie wyjeżdżał ze Szpitala Ogólnego Carson w Rockford.
+
+[RM5_D]
+Jeżeli on zacznie sypać, koniec ze mną...
+
+[RM5_E]
+więc lepiej zrób to, za co ci zapłaciłem!
+
+[RM5_1]
+~g~Przechwyć karetkę.
+
+[RM5_2]
+~g~Zostałeś rozpoznany!
+
+[RM5_3]
+~g~To była tylko przynęta!
+
+[RM5_4]
+~g~Kule nie przebiją pancernego kadłuba!
+
+[RM5_5]
+~g~Pancerna karoseria jest ognioodporna!
+
+[RM5_7]
+~r~Świadek dotarł na miejsce!
+
+[RM5_8]
+~g~Świadek poszedł na dno!
+
+[LOVE2]
+'SPRZĄTNĄĆ WAKA-GASHIRĘ'
+
+[LOVE3]
+'KROPLA W OCEANIE'
+
+[LOVE1_A]
+Przede wszystkim pozwól mi podziękować, że zechciałeś zająć się tą sprawą o charakterze osobistym.
+
+[LOVE1_F]
+W dzisiejszych czasach ludzie nie szanują żadnych porozumień.
+
+[LOVE1_D]
+Usiłują wymusić na mnie dodatkowe pieniądze, ale ja nie wierzę w renegocjacje.
+
+[LOVE1_E]
+Umowa to umowa, więc nie powinni spodziewać się ode mnie nawet grosza.
+
+[LOVE1_G]
+Uratuj mojego przyjaciela, zrób wszystko, co będzie trzeba.
+
+[LOVE1_2]
+~g~Uratuj starego pana z dalekiego wschodu.
+
+[LOVE1_3]
+~g~Zabierz starego pana z dalekiego wschodu do budynku Donalda Love'a.
+
+[LOVE1_4]
+~g~Stary pan z dalekiego wschodu musi się znajdować w jednym z tych garaży...
+
+[LOVE1_6]
+~r~Flaki starego pana z dalekiego wschodu zostały rozsmarowane po całej ulicy!
+
+[LOVE1_7]
+~g~Brama otworzy się wyłącznie przed samochodem gangu kolumbijskiego.
+
+[LOVE2_A]
+Nic tak nie wpływa na spadek cen nieruchomości, jak stara dobra wojna gangów.
+
+[LOVE2_B]
+No, może z wyjątkiem wybuchu epidemii... ale w tym wypadku nie trzeba się posuwać aż tak daleko.
+
+[LOVE2_C]
+Zauważyłem, że Yakuza i Kolumbijczycy nie są do siebie przyjaźnie nastawieni.
+
+[LOVE2_D]
+Skorzystajmy z tej szansy.
+
+[LOVE2_E]
+Masz zabić Waka-gashirę gangu Yakuzy, Kenji'ego Kasena.
+
+[LOVE2_F]
+Kenji właśnie jest na spotkaniu na szczycie parkingu piętrowego w Newport.
+
+[LOVE2_G]
+Załatw sobie samochód Kartelu i rozsmaruj go na ścianie!
+
+[LOVE2_H]
+Zrób to tak, aby Yakuza obciążyła Kartel za ten akt.
+
+[LOVE2_1]
+~g~Jedź do Fort Staunton i zwędź samochód gangu kolumbijskiego!
+
+[LOVE2_2]
+~g~Teraz jedź na ~p~parking wielopiętrowy w Newport~p~ i załatw Kenjiego!
+
+[LOVE2_3]
+~r~Jeżeli pojedziesz tam bez samochodu Kartelu, zostaniesz rozpoznany!
+
+[LOVE2_4]
+~r~Członkowie Yakuzy cię rozpoznali!
+
+[LOVE2_6]
+~r~Zabiłeś wszystkich świadków!!!
+
+[LOVE3_A]
+W czasach hipokryzji moralnej ciężko jest zdobyć niektóre cenne towary z zagranicy.
+
+[LOVE3_C]
+Pilot zrzuci do wody kilka pakunków.
+
+[LOVE3_D]
+Zbierz je, zanim wpadną w niepowołane ręce.
+
+[LOVE3_1]
+~g~Załatw sobie ~r~łódź~g~ i płyń za ~y~samolotem~g~!
+
+[LOVE4]
+'GRAND THEFT AERO'
+
+[LOVE5]
+'KONWOJENT'
+
+[LOVE4_A]
+Dziękuję za odzyskanie paczek. Przykro mi to mówić, ale była to jedynie przynęta.
+
+[LOVE4_B]
+Nie chciałem cię urazić, po prostu czasami w interesach trzeba tak postąpić.
+
+[LOVE4_C]
+Mój prawdziwy cel przez cały czas był ukryty w samolocie.
+
+[LOVE4_F]
+Przekupiłem kogo trzeba.
+
+[LOVE4_1]
+~r~Są tu ludzie z Kartelu Kolumbijskiego!
+
+[LOVE4_2]
+~g~Pakunek zniknął! Wyśledź Kolumbijczyków i odzyskaj ładunek.
+
+[LOVE4_3]
+~g~Firma budowlana Panlantic Construction?
+
+[LOVE4_5]
+~g~Paczka powinna nadal być w samolocie...
+
+[LOVE4_6]
+~g~Wjedź windą na wieżę!
+
+[LOVE5_B]
+Mój orientalny przyjaciel potrzebuje eskorty, kiedy będze wiózł mój najnowszy nabytek do specjalistów.
+
+[LOVE5_1]
+~g~Ruszamy!
+
+[LOVE5_2]
+~g~Potrzebujesz samochodu!
+
+[LOVE5_3]
+~g~Jedź przodem i zbadaj wylot tunelu!
+
+[LOVE5_4]
+~r~Osłaniaj ciężarówkę!
+
+[RM6]
+'NA WIDELCU'
+
+[RM6_A]
+Nikt cię nie śledził? To dobrze.
+
+[RM6_B]
+To już koniec. Jestem po uszy w gównie i nadal się zapadam.
+
+[RM6_D]
+Jestem na widelcu, więc postanowiłem zniknąć.
+
+[RM6_E]
+Zawieź mnie na mój samolot, a dobrze ci się odwdzięczę!
+
+[RM6_666]
+Zatroszcz się o mojego kuloodpornego Patriota. Do zobaczenia w Miami, Ray.
+
+[CAT1]
+'OKUP'
+
+[CAT2]
+'WYMIANA'
+
+[CAT1_A]
+Mam twoją słodziutką Marię. Jeżeli nie chcesz, żeby jej twarz wyglądała jak po randce z rzeźnikiem,
+
+[CAT2_F]
+Złamałam paznokieć i cała jestem potargana. Nie do wiary! Ta fryzura kosztowała mnie pięćdziesiąt dolców!
+
+[CAT2_G]
+Strasznie się bałam, ale w końcu powiedziałam sobie: jesteś już przecież dużą dziewczyną.
+
+[CAT2_H]
+Och, będziemy się wspaniale bawić, bo moja siostra powiedziała, że chciałaby wpaść do nas ze swoimi dziećmi,
+
+[CAT2_I]
+bo jej mąż znowu się gdzieś szwenda i...
+
+[CAT1_E]
+XXXX
+
+[CAT1_F]
+Dotrzyj do Cataliny sprzed upływem wyznaczonego czasu!
+
+[CAT_MON]
+~g~Nie masz jeszcze tyle pieniędzy. Potrzebujesz $500.000
+
+[BITCH_D]
+~g~Maria nie żyje!
+
+[WEATHER]
+POGODA WYMUSZONA
+
+[WEATHE2]
+ZWYKŁA POGODA
+
+[8001]
+Marnie kończysz!!
+
+[1000]
+JESTEŚ MARTWY
+
+[1001]
+JESTEŚ MARTWY
+
+[1002]
+JESTEŚ MARTWY
+
+[1003]
+JESTEŚ MARTWY
+
+[1004]
+JESTEŚ MARTWY
+
+[1005]
+WPADKA
+
+[1006]
+WPADKA
+
+[1007]
+WPADKA
+
+[1008]
+WPADKA
+
+[1009]
+WPADKA
+
+[GA_4]
+Bomby samochodowe kosztują 1000 dolarów za sztukę.
+
+[GA_5]
+W twoim samochodzie bomba już została zainstalowana.
+
+[GA_6] { re3 change }
+Zaparkuj wóz, włącz mechanizm klawiszem ~h~~k~~VEHICLE_FIREWEAPON~~w~ i W NOGI!
+
+[GA_7] { re3 change }
+Uaktywnij bombę za pomocą klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~. Bomba wybuchnie w momencie włączenia silnika.
+
+[GA_8]
+Użyj detonatora, aby aktywować bombę.
+
+[GA_9]
+Zgromadziłeś ~1~ z 10 samochodów specjalnych.
+
+[GA_10]
+Ładne cacko. Oto twoje ~1~$.
+
+[GA_11]
+Mamy już taki wózek. Dla nas jest on bez wartości.
+
+[GA_12]
+Bomba uzbrojona
+
+[GA_13]
+Robota zawodowca. Skombinuj dla mnie wszystkie wózki z listy, a czeka cię premia.
+
+[GA_14]
+Wszystkie samochody? DOSKONALE! Oto niespodzianka dla ciebie!
+
+[GA_15]
+Mam nadzieję, że podoba ci się nowy kolor.
+
+[GA_16]
+Lakierowanie zakończone.
+
+[GA_19]
+Nie interesuje nas ten model.
+
+[GA_20]
+Mamy tego więcej, niż możemy zepchnąć. Sorry, facet, ale nie wchodzę w to.
+
+[CR_1]
+Dźwig nie jest w stanie podnieść tego pojazdu.
+
+[PU_MONY]
+Nie masz dość forsy.
+
+[CO_ALL]
+Masz już wszystkie. Oto mała niespodzianka...
+
+[PAUSED]
+GRA ZATRZYMANA
+
+[HEALTH1]
+Spadaj stąd! Jesteś zdrów jak ryba.
+
+[HEALTH2]
+Koszty opieki medycznej.
+
+[HEALTH3]
+Trochę cię połatam.
+
+[HEALTH4]
+To kosztuje 250 dolarów.
+
+[FEB_STA]
+Statystyki
+
+[FEB_BRI]
+Zadania
+
+[FEB_CON]
+Sterowanie
+
+[FEB_AUD]
+Audio
+
+[FEB_DIS]
+Ekran
+
+[FEB_LAN]
+Język
+
+[FEP_STA]
+STATYSTYKI
+
+[FEP_BRI]
+CELE
+
+[FEP_CON]
+STEROWANIE
+
+[FEP_AUD]
+DŹWIĘK
+
+[FEP_DIS]
+EKRAN
+
+[FEP_LAN]
+JĘZYK
+
+[FEF_ST1]
+Kto tu jest złym facetem?
+
+[FEF_ST2]
+Ile paniki dzisiaj wzbudziłeś?
+
+[FEF_BR1]
+Straciłeś wątek?
+
+[FEF_CO1]
+Potrzebujesz lepszej kontroli, perfekcjonisto?
+
+[FEF_CO2]
+Określ taką konfigurację klawiszy sterujących, która najlepiej odpowiada preferowanemu stylowi gry.
+
+[FEF_SA1]
+Trzymaj wszystko na kupie!
+
+[FEF_SA2]
+Zapisuj i wczytuj swoje gry
+
+[FEF_AU1]
+Więcej czadu!
+
+[FEF_AU2]
+Wybierz stację radiową oraz efekty dźwiękowe
+
+[FEF_DI1]
+Zmień grę!
+
+[FEF_DI2]
+Dostosuj grę do odbiornika TV
+
+[FEF_LA1]
+O czym gadasz?
+
+[FEF_LA2]
+Wybierz preferowany język
+
+[FEB_PMB]
+Cele poprzednich misji:
+
+[FEC_NA]
+N.D.
+
+[FEC_CWL]
+Przełącz rodzaj broni w lewo
+
+[FEC_CWR]
+Przełącz rodzaj broni w prawo
+
+[FEC_LOF]
+Spójrz do przodu
+
+[FEC_TAR]
+Cel
+
+[FEC_MOV]
+Ruch
+
+[FEC_CAM]
+Tryby kamery
+
+[FEC_PAU]
+Pauza
+
+[FEC_ENV]
+Wsiadanie do pojazdu
+
+[FEC_JUM]
+Skok
+
+[FEC_ATT]
+Atak lub strzał z broni
+
+[FEC_RUN]
+Bieg
+
+[FEC_FPC]
+Kamera - widok z oczu postaci
+
+[FEC_LL]
+Spójrz w lewo
+
+[FEC_LB1]
+Spójrz
+
+[FEC_LB2]
+do tyłu
+
+[FEC_LB]
+Spójrz do tyłu
+
+[FEC_LR]
+Spójrz w prawo
+
+[FEC_HOR]
+Klakson
+
+[FEC_VES]
+Sterowanie w pojeździe
+
+[FEC_RSC]
+Przełącz stacje radiowe
+
+[FEC_BRA]
+Hamulec lub wsteczny
+
+[FEC_HAB]
+Hamulec ręczny
+
+[FEC_CAW]
+Broń w samochodzie
+
+[FEC_ACC]
+Przyspieszenie
+
+[FEC_SMT]
+Włączenie misji specjalnych
+
+[FEA_OUT]
+Wyjście:
+
+[FEA_ST]
+stereo
+
+[FEA_MNO]
+mono
+
+[FEA_NON]
+Brak
+
+[FEA_FM0]
+HEAD RADIO
+
+[FEA_FM1]
+DOUBLE CLEFF FM
+
+[FEA_FM2]
+JAH RADIO
+
+[FEA_FM3]
+RISE FM
+
+[FEA_FM4]
+LIPS 106
+
+[FEA_FM5]
+GAME FM
+
+[FEA_FM6]
+MSX FM
+
+[FEA_FM7]
+FLASHBACK 95.6
+
+[FEA_FM8]
+GADUŁA 109
+
+[FED_DBG]
+Menu debugowania
+
+[FED_RID]
+Ponowne wczytanie IDE
+
+[FED_RIP]
+Ponowne wczytanie IPL
+
+[FED_PAH]
+Parse Heap
+
+[FED_RCD]
+CCullZones::RecalculateCullZoneData
+
+[FED_DFL]
+CTheScripts::DbgFlag
+
+[FED_DLS]
+Big White Debug Light Switched
+
+[FED_SPR]
+Show Ped Road Groups
+
+[FED_SCR]
+Show Car Road Grups
+
+[FED_SCZ]
+Show Cull Zones
+
+[FED_DSR]
+Żądania przetworzenia w trybie debugowania
+
+[FED_SCP]
+gbShowCollisionPolys
+
+[FEM_MCM]
+Menu karty pamięci
+
+[FEM_RMC]
+Register MemCard One
+
+[FEM_TFM]
+Próbne formatowanie karty pamięci 1
+
+[FEM_TUM]
+Próbne odformatowanie karty pamięci 1
+
+[FEM_CRD]
+Utwórz katalog główny
+
+[FEM_CLI]
+Twórz i wczytuj ikony
+
+[FEM_FFF]
+Fill First File with Guff
+
+[FEM_SOG]
+Zapisz tylko grę
+
+[FEM_CES]
+Check Every 0kB4 Save
+
+[FEM_STG]
+Zapisz grę
+
+[FEM_STS]
+Zapisz grę pod nazwą GTA3
+
+[FEM_CPD]
+Utwórz chroniony katalog magazynowy
+
+[FEM_MC2]
+Menu karty pamięci 2
+
+[FEM_TS]
+Próbne zapisywanie:
+
+[FEM_TL]
+Próbne wczytywanie:
+
+[FEM_TD]
+Próbne kasowanie:
+
+[PL_STAT]
+Statystyki gracza
+
+[PE_WAST]
+Ludzie załatwieni przez gracza
+
+[PE_WSOT]
+Ludzie załatwieni przez innych
+
+[CAR_EXP]
+Wysadzone samochody:
+
+[TM_BUST]
+Liczba wpadek
+
+[M_WASTE]
+Załatwieni mężczyźni-cywile
+
+[F_WASTE]
+Załatwione kobiety-cywile:
+
+[PIG_WST]
+Załatwieni gliniarze
+
+[GNG_WST]
+Członkowie gangu załatwieni.
+
+[MED_WST]
+Załatwieni lekarze
+
+[FIRE_WS]
+Strażak załatwiony
+
+[DED_CRI]
+Załatwieni przestępcy:
+
+[DED_DED]
+Załatwione lumpy:
+
+[DED_HOK]
+Załatwione dziwki:
+
+[HEL_DST]
+Zniszczone helikoptery
+
+[PER_COM]
+Procent ukończenia gry
+
+[KGS_EXP]
+Użyte materiały wybuchowe (kg)
+
+[ACCURA]
+Dokładność
+
+[ELBURRO]
+Najlepsze czasy wyścigu w sekundach:
+
+[CAR_CRU]
+Zmiażdżone samochody:
+
+[HED_EX]
+Rozbite głowy
+
+[TM_DED]
+Wizyty w szpitalu
+
+[DAYSPS]
+Liczba dni, które upłynęły w grze:
+
+[MMRAIN]
+mm deszczu
+
+[MXCARD]
+Maks. odległość SZALONEGO skoku (w stopach)
+
+[MXCARJ]
+Maks. wysokość SZALONEGO skoku (w stopach)
+
+[MXCARDM]
+Maks. odległość SZALONEGO skoku (w metrach)
+
+[MXCARJM]
+Maks. wysokość SZALONEGO skoku (w metrach)
+
+[MXFLIP]
+Maks. liczba salt w SZALONYM skoku
+
+[MXJUMP]
+Maks. liczba obrotów w SZALONYM skoku
+
+[BSTSTU]
+Najlepszy SZALONY skok do tej pory:
+
+[INSTUN]
+Szalony skok
+
+[PRINST]
+Bezbłędny szalony skok
+
+[DBINST]
+Podwójny szalony skok
+
+[DBPINS]
+Bezbłędny podwójny szalony skok
+
+[TRINST]
+Potrójny szalony skok
+
+[PRTRST]
+Bezbłędny potrójny szalony skok
+
+[QUINST]
+Poczwórny szalony skok
+
+[PQUINS]
+Bezbłędny poczwórny szalony skok
+
+[NOSTUC]
+Nie wykonano żadnych SZALONYCH skoków
+
+[NOUNIF]
+Wyjątkowe skoki wykonane
+
+[NOUNGM]
+Wyjątkowe skoki razem
+
+[NMISON]
+Próby wykonania misji
+
+[NMMISP]
+Wykonane misje
+
+[PASDRO]
+Zgubieni pasażerowie
+
+[MONTAX]
+Forsa zarobiona w taksówce
+
+[DAYPLC]
+Dzienne wydatki policji:
+
+[CRIMRA]
+Ranking zbrodni:
+
+[GMSTOR]
+Zachowanie gry
+
+[PREBRF]
+Poprzednie zapisy
+
+[CNTLS]
+Sterowanie
+
+[MUSMEN]
+Muzyka/dźwięki
+
+[GAMSET]
+Ustawienia gry
+
+[LANGUA]
+Język
+
+[DSPLAY]
+Ekran
+
+[DEBUGM]
+Menu funkcji debugowania
+
+[QUITOP]
+Wyjście z menu opcji
+
+[CONTRL]
+Konfiguracja sterowania
+
+[SET1EN]
+SetUp 1. Enabled
+
+[SET1]
+SetUp 1.
+
+[SET2EN]
+SetUp 2. Enabled
+
+[SET2]
+SetUp 2
+
+[SET3EN]
+SetUp 3. Enabled
+
+[SET3]
+SetUp 3
+
+[SET4EN]
+SetUp 4. Enabled
+
+[SET4]
+SetUp 4
+
+[GOBACK]
+Wróć
+
+[SOUND]
+DŹWIĘK
+
+[MUSVOL]
+Głośność muzyki
+
+[SFXVOL]
+Głośność efektów dźwiękowych
+
+[SCROPT]
+OPCJE EKRANU
+
+[CTRSCR]
+Wyśrodkowanie Ekranu
+
+[SCRFOR]
+Format ekranu
+
+[GMSVLQ]
+WCZYTAJ-ZAPISZ-WYJDŹ Z GRY
+
+[GMREST]
+Ponowne uruchomienie gry
+
+[NOGMSV]
+Zapisywanie stanu gry jest możliwe tylko w kryjówce.
+
+[DLFILE]
+Skasować pliki Grand Theft Auto III
+
+[CHFILE]
+WYBIERZ PLIK, KTÓRY MA ZOSTAĆ WCZYTANY
+
+[CHFIDL]
+WYBIERZ PLIK, KTÓRY MA ZOSTAĆ SKASOWANY
+
+[SVCONF]
+POTWIERDZENIE ZAPISU
+
+[LANGSL]
+WYBÓR JĘZYKA
+
+[ENGLIS]
+Polski
+
+[GERMAN]
+Niemiecki
+
+[ITALIA]
+Włoski
+
+[FRENCH]
+Francuski
+
+[SPAIN]
+Hiszpański
+
+[RELIDE]
+ReLoadIde
+
+[RELIPE]
+ReLoadIpl
+
+[PARSHP]
+Parse Heap
+
+[DBGFON]
+CTheScripts::DbgFlag On
+
+[DBFOFF]
+CTheScripts::DbgFlag Off
+
+[BGWHON]
+Big White Debug Light - włączony
+
+[BGWOFF]
+Big White Debug Light - wyłączony
+
+[DSTRON]
+Debug Streaming Requests On
+
+[DSTROFF]
+Debug Streaming Requests Off
+
+[PDRGON]
+ShowPedRoadGroups On
+
+[PRGOFF]
+ShowPedRoadGroups Off
+
+[CRRGON]
+ShowCarRoad Group Włączone
+
+[CRGOFF]
+ShowCarRoadGroups Wyłączone
+
+[CLZOON]
+Wyłączone pokazywanie stref zniszczeń
+
+[CLZOOF]
+Włączone pokazywanie stref zniszczeń
+
+[SHPLON]
+gbShowCollisionPolys On
+
+[SHPLOF]
+gbShowCollisionPolys Off
+
+[CULREC]
+CCullZones::RecalculateCullZoneData()
+
+[FORMM1]
+FormatMemCard 1 (element testowy)
+
+[UNFRM1]
+UnFormatMemCard 1 (element próbny)
+
+[GORLEV]
+Poziom 'Krwawy'
+
+[SICASS]
+Sick Fuck
+
+[SICSIC]
+Sick Fucker
+
+[SCASSL]
+Sick Fuck wybrany
+
+[SCSCSL]
+Sick Fucker wybrany
+
+[PRVMEN]
+Cele poprzednich misji
+
+[FORMEN]
+Menu formatu
+
+[MEMTST]
+Ekran TestKartPamięci
+
+[REGCAR]
+Rejestracja KartaPamięci Jeden
+
+[TEFONE]
+Próbne formatowanie karty pamięci 1
+
+[TEUFON]
+Próbne odformatowanie karty pamięci 1
+
+[CRROOT]
+Utwórz Katalog Główny
+
+[CRLDIC]
+Tworzenie i wczytywanie ikon
+
+[FLFSGF]
+Fill First File With Guff
+
+[PUSAVE]
+Zapisz tylko grę
+
+[CHEVOK]
+CheckEveryOkB4Save
+
+[SVGMON]
+Zapisz grę
+
+[CNTSAV]
+Nie można zapisać stanu gry. Jesteś w trakcie misji.
+
+[CNCSAV]
+Nie można zapisać stanu gry. Jesteś w samochodzie.
+
+[CRMGSV]
+Utwórz chroniony katalog magazynowy
+
+[MGSVCN]
+Katalog magazynowy utworzony
+
+[MGSVNC]
+Katalog magazynowy nieutworzony
+
+[YES]
+Tak
+
+[NO]
+Nie
+
+[X]
+x
+
+[LAST]
+Ostatnia wiadomość
+
+[FEDS_XB]
+Wybierz
+
+[FEDS_ST]
+klawisz START - WZNÓW
+
+[FEST_OO]
+z
+
+[FEC_TUC]
+Sterowanie wieżyczką
+
+[FEC_SM3]
+Włączenie misji specjalnych (klawisz R3)
+
+[FEC_RS3]
+Przełącz stacje radiowe (klawisz L3)
+
+[FEC_HO3]
+Klakson (klawisz lewy SHIFT)
+
+[DIAB1]
+'WYŚCIG'
+
+[DIAB2]
+'PRZEŁAMAĆ LODY'
+
+[DIAB3]
+'PRÓBA OGNIA'
+
+[DIAB4]
+'WIELKI I ŻYLASTY'
+
+[DIAB1_A]
+El Burro ma dla ciebie propozycję. Jeżeli jesteś zainteresowany, odszukaj budkę telefoniczną w Hepburn Heights.
+
+[DIAB1_C]
+Niezły z ciebie kierowca! Jedź do wskazanej budki telefonicznej, a może El Burro da ci jakieś zajęcie.
+
+[DIAB1_1]
+~g~3... 2... 1... NAPRZÓD! NAPRZÓD! NAPRZÓD!
+
+[DIAB1_4]
+~g~Załatw sobie szybki wóz i jedź na miejsce startu.
+
+[DIAB1_3]
+~r~Nie wygrałbyś nawet z własną babcią, LESZCZU!
+
+[DIAB1_2]
+~g~Gratulacje, wygrywasz, uzyskując niesamowity czas: ~1~sekund.
+
+[FIRST]
+~g~pierwszy
+
+[SECOND]
+~g~drugi
+
+[THIRD]
+~g~trzeci
+
+[FOURTH]
+~g~4
+
+[DIAB2_1]
+~g~Zabierz teczkę z Harwood.
+
+[DIAB2_2]
+~g~Odszukaj półciężarówkę lodziarza.
+
+[DIAB2_3]
+~g~Zaparkuj samochód lodziarza na Atlantic Quays.
+
+[DIAB2_4]
+~g~Naciśnij klawisz ~w~~k~~VEHICLE_HORN~~g~, aby włączyć sygnał reklamujący lody.
+
+[DIAB2_6]
+~g~Naciśnij klawisz ~w~~k~~VEHICLE_HORN~~g~, aby włączyć sygnał reklamujący lody.
+
+[DIAB2_7]
+~g~Naciśnij klawisz ~w~~k~~VEHICLE_HORN~~g~, aby włączyć sygnał reklamujący lody.
+
+[DIAB2_5]
+~g~Wysiądź z samochodu, a następnie zdetonuj go za pomocą nadajnika.
+
+[YD1]
+'SZUKAJ PUNKTÓW!'
+
+[YD2]
+'RUCHOMY CEL'
+
+[YD3]
+'KOLEKCJONER WOZÓW'
+
+[YD4]
+'KRÓLESTWO NIEBIESKIE'
+
+[YD_P]
+King Courtney prosi cię na słówko. Znajdź budkę telefoniczną w Aspatrii!!
+
+[YD1_A]
+~w~Z tej strony King Courtney.
+
+[YD1_A1]
+~w~Moja paczka, Yardies, potrzebuje kierowcy, a ty masz reputację bystrego faceta.
+
+[YD1_B]
+~w~Jedź na wysypisko naprzeciwko stadionu i poczekaj na innych zawodników.
+
+[YD1_C]
+~w~Moi ludzie pilnują punktów kontrolnych w całym Staunton.
+
+[YD1_D]
+~w~Kierowca, który pierwszy dotrze do takiego miejsca, otrzymuje jeden punkt. Potem ścigamy się do następnego przystanku.
+
+[YD1_D1]
+~w~Jeżeli zaliczysz więcej punktów niż inni kierowcy, być może będę miał dla ciebie zadanie.
+
+[YD1_E]
+~g~Gotowi do wyścigu!
+
+[YD1_F]
+~g~Minąłeś punkt startu - podoba mi się twój styl!!!
+
+[YD1_G]
+~r~To jest WYŚCIG SAMOCHODOWY. Masz jechać SAMOCHODEM, IDIOTO!
+
+[YD1GO]
+~g~START!
+
+[YD1_1]
+~r~1
+
+[YD1_2]
+~r~2
+
+[YD1_3]
+~r~3
+
+[YD1_BON]
+$1000!!
+
+[Y1_1ST]
+~g~Kończysz na pierwszym miejscu i pomyślnie zaliczasz ~1~ punktów kontrolnych!
+
+[Y1_2ND]
+~y~Jesteś drugi, pomyślnie zaliczyłeś ~1~ punktów kontrolnych. ~r~Było blisko, ale trochę ci jeszcze brakuje.
+
+[Y1_3RD]
+~r~Jesteś trzeci, pomyślnie zaliczyłeś ~1~ punktów kontrolnych. ~r~A mówiłeś, że jesteś niezły!
+
+[Y1_LAST]
+~r~Jesteś ostatni! ~r~Tylko marnujesz mój czas, IDIOTO!
+
+[Y1_J1ST]
+~y~Pierwsze miejsce ex aequo, pomyślnie zaliczyłeś ~1~ punktów kontrolnych. ~y~Nieźle, ale musisz być najlepszy z najlepszych, aby móc jeździć dla Królowej Lizzy!
+
+[Y1_J2ND]
+~r~Drugie miejsce ex aequo, pomyślnie zaliczyłeś ~1~ punktów kontrolnych. Jechałeś jak wściekły goryl!
+
+[Y1JLAST]
+~r~Ostatnie miejsce ex aequo! Wymądrzałeś się jak stary kierowca, ale kierowałeś jak stary przemądrzalec!
+
+[Y1_TEST]
+SAMOCHÓD W WODZIE!!
+
+[YD2_A]
+~w~Muszę sprawdzić, czy dajesz sobie radę z mokrą robotą.
+
+[YD2_A1]
+~w~Zobaczymy, czy można ci zaufać.
+
+[YD2_B]
+~w~Dwóch moich chłopców zaraz po ciebie przyjedzie, żeby zabrać cię na przejażdżkę
+
+[YD2_B1]
+~w~i sprawdzić, czy naprawdę umiesz tyle, ile twierdzisz.
+
+[YD2_C]
+~w~Jedziemy na mały wypad na Wzgórza Hepburn, żeby sprzątnąc paru śmierdziuchów z gangu Diablo, którzy wkurzali Królową Lizzy.
+
+[YD2_CC]
+~w~Będziesz potrzebował gnata, trzymaj.
+
+[YD2_D]
+~w~Ty kierujesz i strzelasz. My zadbamy, żeby nie zabrakło ci odwagi.
+
+[YD2_E]
+~w~Jazda!
+
+[YD2_F]
+~w~Oszukał nas! Dorwać jego zdradliwą dupę!
+
+[YD2_G1]
+~w~Wzgórza Hepburn. Zabijmy paru śmierdzących Diablo...
+
+[YD2_G2]
+~w~Tylko pamiętaj, ~r~ masz nie wysiadać z samochodu!!!
+
+[YD2_H]
+~w~W porządku, wracamy na terytorium Yardies! JAZDA, SZYBCIEJ!!
+
+[YD2_L]
+~w~Dobrze się spisałeś, żniwiarzu!
+
+[YD2_M]
+~r~Rozwalił mój samochód! Załatwić go!
+
+[YD2_N]
+~w~Posadź tyłek z powrotem w samochodzie!
+
+[YD3_A]
+Masz porwać dla mnie kilka samochodów gangów tak,
+
+[YD3_A1]
+abyśmy mogli uderzyć we wrogów na ich własnym terytorium.
+
+[YD3_B]
+Potrzebuję mafijnego Sentinela,
+
+[YD3_B1]
+Stingera Yakuzy oraz
+
+[YD3_B2]
+Ogiera gangu Diablo. Wtedy będzie można uderzyć na każdego w Liberty.
+
+[YD3_C]
+Zostaw je przy garażu w Newport, ale pamiętaj,
+
+[YD3_C1]
+potrzebujemy tylko fury w dobrym stanie!!!
+
+[YD3_D]
+Wolne miejsce na tekst
+
+[YD3_E]
+~r~Już zdobyłeś samochód gangu Diablo!
+
+[YD3_F]
+~r~Już zdobyłeś samochód mafii!
+
+[YD3_G]
+~r~Już zdobyłeś samochód Yakuzy!
+
+[YD3_H]
+~r~Zdobyłeś samochód gangu Diablo!
+
+[YD3_I]
+~r~Zdobyłeś samochód mafii!
+
+[YD3_J]
+~r~Zdobyłeś samochód Yakuzy!
+
+[YD3_K]
+~r~Ten samochód to ruina! Musisz go naprawić!
+
+[YD3_L]
+~g~Zabierz samochód do garażu!
+
+[YD3_M]
+~r~Straciłeś wóz! Musisz zdobyć jeszcze jeden!
+
+[YD4_A]
+Posłuchaj!
+
+[YD4_A1]
+Jedź do Bedford Point.
+
+[YD4_A2]
+W starym samochodzie jest coś, czego potrzebuję, pronto!
+
+[YD4_B]
+LIST: Słyszałam, że ostatnio byłeś pilnym uczniem. Cóż, ja byłam pilną uczennicą.
+
+[YD4_C]
+Czas, abyś poznał prawdziwą siłę HEROINY! Besos y fuderes, Catalina, xxx.
+
+[YD4_D]
+PS. ZDYCHAJ KUNDLU!
+
+[YD4_1]
+~g~Naćpani szaleńcy!
+
+[YD4_2]
+~g~Zniszcz ciężarówki wariatów!
+
+[HM_1]
+'AGRESYWNA JAZDA'
+
+[HM_2]
+'ZABAWKOWY ZABÓJCA'
+
+[HM_3]
+'ZDĄŻYĆ PRZED WYBUCHEM'v
+
+[HM_5]
+'ROZRÓBA'
+
+[HOOD1_A]
+Znajdź budkę telefoniczną w Wichita Gardens, to pogadamy o interesach.
+
+[HM1_A]
+Yo! Z tej strony D-Ice z gangu Red Jacks!
+
+[HM1_C]
+Te szczeniaki wyłażą na ulice i myślą tylko o tym, kogo by tu zastrzelić i co zaćpać.
+
+[HM1_3]
+~g~'Dziewiątki' mają swoje terytorium w Wichita Gardens.
+
+[HM2_3]
+Jeżeli uderzysz zdalnie sterowanym samochodzikiem w koła pojazdu, ładunek wybuchnie!
+
+[HM2_4]
+Jeżeli samochodzik wyjedzie poza zasięg nadajnika, ładunek wybuchnie!
+
+[HM2_5]
+~r~Samochodzik poza zasięgiem!
+
+[HM3_1]
+~g~Zabierz samochód do warsztatu, ale uważaj! Jeżeli samochód zostanie mocno uszkodzony, ładunek może wybuchnąć!
+
+[HM3_2]
+~g~Zwróć samochód właścicielowi. Jedź ostrożnie, wóz musi być w doskonałym stanie!
+
+[HM3_3]
+~g~Napraw samochód!
+
+[HM4_D]
+~g~Zdobądź samochód!
+
+[HM4_E]
+TEKST NIEPOTRZEBNY
+
+[HM4_1]
+~g~Jedź do miejsca, w któym rozsypał się ładunek. Musisz zebrać 30 sztabek.
+
+[HM4_2]
+~g~Pamiętaj, kiedy samochód zrobi się ciężki, poturlaj się do garażu i wysyp ładunek.
+
+[HM5_3]
+~r~Miałeś używać wyłącznie kija bejsbolowego!
+
+[HM5_4]
+~r~Twój kontakt nie żyje!
+
+[MEA1]
+'CWANIAK'
+
+[MEA2]
+'ZŁODZIEJE'
+
+[MEA3]
+'ŻONA'
+
+[MEA4]
+'KOCHANEK'
+
+[MEAT1_A]
+Znajomy powiedział mi, że potrafisz rozwiązywać problemy. Jeżeli chcesz zająć się moimi kłopotami, znajdź budkę telefoniczną w Trenton.
+
+[MEA1_B3]
+~g~Spotkaj się z kierownikiem banku.
+
+[MEA1_B6]
+~g~Zabierz samochód do zgniatarki, aby pozbyć się dowodów. Wysiądź z samochodu, a dźwig już się wszystkim zajmie.
+
+[MEA1_1]
+~r~Kierownik banku nie żyje!
+
+[MEA1_2]
+~r~Miałeś zniszczyć ten pojazd!
+
+[MEA1_3]
+~g~Wysiądź z samochodu!
+
+[MEA1_4]
+~r~Zgubiłeś kierownika banku!
+
+[MEA2_B3]
+~g~Jedź po złodziei.
+
+[MEA2_B4]
+~g~Zabierz ich do fabryki Delikatesów Pod Psem.
+
+[MEA2_B6]
+~g~Przemaluj samochód, aby zatrzeć ślady.
+
+[MEA2_1]
+~r~Miałeś zniszczyć ten pojazd!
+
+[MEA2_2]
+~r~Złodziej nie żyje!
+
+[MEA2_4]
+~r~Zgubiłeś jednego ze złodziei!
+
+[MEA3_B3]
+~g~Jedź po panią Chonks.
+
+[MEA3_B6]
+~g~Zabierz samochód i wrzuć go do wody, aby pozbyć się dowodów.
+
+[MEA3_1]
+~r~Żona nie żyje!
+
+[MEA3_2]
+~r~Miałeś wrzucić samochód do wody!
+
+[MEA3_3]
+~r~Zgubiłeś żonę Marty'ego!
+
+[MEA4_B3]
+~g~Zabierz kochanka żony.
+
+[MEA4_B6]
+Na to już za późno, Marty. Miałeś szansę, ale teraz przejmuję twoją budę...
+
+[MEA4_1]
+~r~Carlos nie żyje!
+
+[MEA4_3]
+~r~Zgubiłeś Carlosa lichwiarza!
+
+[LOOK_A]
+Naciśnij i przytrzymaj klawisz ~h~~k~~VEHICLE_LOOKLEFT~ ~w~lub klawisz ~h~~k~~VEHICLE_LOOKRIGHT~ ~w~, aby spojrzeć ~h~w lewo~w~ lub ~h~w prawo~w~ przez szyby pojadu. Naciśnij oba klawisze naraz, aby spojrzeć ~h~do tyłu~w~.
+
+[LOVE6_1]
+~g~Teraz odciągnij gliniarzy od magazynu!
+
+[LOVE6_2]
+~r~Nie udało ci się odciągnąć glin na wystarczającą odległość!
+
+[RM4_3]
+~r~Kumpel Raya zwiał!
+
+[RM6_C]
+Zdaje się, że CIA ma jakiś swój interes w utrzymaniu handlu PROCHAMI
+
+[RM6_C1]
+i nie spodobało im się, że zadarliśmy z Kartelem.
+
+[C_PASS]
+ZAGROŻENIE ZLIKWIDOWANE
+
+[CTUTOR]
+Naciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~, aby włączyć lub wyłączyć misje patrolowe.
+
+[CTUTOR2]
+Naciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~, aby włączyć lub wyłączyć misje patrolowe.
+
+[COPCART]
+~g~Masz ~1~ sekund na powrót do radiowozu albo misja zakończy się.
+
+[C_FAIL]
+Misja patrolowa zakończona!
+
+[C_CANC]
+~r~Misja patrolowa anulowana!
+
+[C_ESCP]
+~r~Podejrzany uciekł!
+
+[C_TIME]
+~r~Twój czas w roli stróża prawa minął!
+
+[C_VIGIL]
+PREMIA PATROLOWA!!
+
+[A_FAIL2]
+~r~Twoje ślamazarność kosztowała pacjenta życie!
+
+[A_FAIL3]
+~r~Pacjent nie żyje!
+
+[A_PASS]
+Uratowany!
+
+[F_FAIL2]
+~r~Spóźniłeś się!
+
+[A_COMP2]
+Ty chyba nigdy się nie męczysz!
+
+[RM2_M]
+Jak będziesz potrzebował spluwy, wpadaj do mnie jak w dym i bierz z szafek, co ci się podoba.
+
+[HEAL_A]
+Twój ~h~poziom życia~w~ jest wyświetlony na pomarańczowo w prawym górnym narożniku ekranu.
+
+[YD1_CNT]
+~1~ z 15!
+
+[FM1_9]
+~g~Przed nami miejsce imprezy - wysadź Marię przed budynkiem.
+
+[FM1_Y]
+~w~Wiesz, dawno się tak dobrze nie bawiłam, a ty traktowałeś mnie naprawdę dobrze. Z szacunkiem i w ogóle..
+
+[FM1_AA]
+~w~Chyba już pójdę. W takim razie - do zobaczenia!
+
+[NOCONTE]
+Aby kontynuować, proszę ponownie umieścić wtyczki kontrolera analogowego (DUALSHOCK@) lub kontrolera analogowego (DUALSHOCK@2) w porcie kontrolerów gry nr 1.
+
+[WRCONT]
+Kontroler w porcie nr 1 nie jest rozpoznany. Gra Grand Theft Auto III wymaga kontrolera analogowego (DUALSHOCK@) lub kontrolera analogowego (DUALSHOCK@2).
+
+[WRCONTE]
+Kontroler w porcie nr 2 nie jest rozpoznany. Gra Grand Theft Auto III wymaga kontrolera analogowego (DUALSHOCK@) lub kontrolera analogowego (DUALSHOCK@2).
+
+[WRONGCD]
+Niewłaściwa płyta. Proszę włożyć właściwą płytę.
+
+[NOCD]
+Nie znaleziono GTAIII CD w czytniku.
+
+[OPENCD]
+Taca napędu jest wysunięta. Wsuń tacę napędu CD-ROM.
+
+[CDERROR]
+Błąd w odczycie płyty Grand Theft Auto III.
+
+[RESTART]
+Trwa rozpoczynanie nowej gry
+
+[GA_3]
+Koniec z promocjami. 1000 dolców za malowanie!
+
+[GA_1]
+Coś ty! Nawet nie dotknę takiego trefnego towaru!
+
+[GA_1A]
+Wróć, kiedy będziesz miał chwilę wolnego czasu...
+
+[S_PROM2]
+Garaż znajdujący się za sąsiednimi drzwiami służy do przechowywania pojazdów podczas zapisywania stanu gry.
+
+[STOCK]
+brak towaru
+
+[FM1_O]
+~w~Myślę, że znajdziemy go nad brzegiem morza, w okolicach Chinatown.
+
+[EBAL_B]
+To właśnie tu. Zjedźmy z ulicy i poszukajmy jakichś ciuchów, żeby zmienić te więzienne łachy!
+
+[EBAL_G]
+To jest właśnie klub 'U Luigiego'. Obejdziemy tę budę i skorzystamy z tylnych drzwi.
+
+[AM4_3]
+A więc to ty jesteś nowym chłopcem na posyłki Asuki?
+
+[AM4_4]
+Masz forsę? Mam nadzieję, że wszystko jest jak trzeba?
+
+[AM4_5]
+Wiem, co sobie myślisz, następny sprzedajny gliniarz.
+
+[AM4_6]
+Cóż, każdy orze jak może.
+
+[AM4_7]
+Straciłem ostatnio paru partnerów i ci frajerzy z wydziału wewnetrznego zaczęli coś przewąchiwać.
+
+[AM4_8]
+Żeby tylko nie wyniuchali moich śladów.
+
+[AM4_9]
+To miasto to jeden wielki otwarty ściek.
+
+[AM4_10]
+Przyda mi się pomoc kogoś niezrzeszonego.
+
+[AM4_11]
+Jeżeli masz jakiś interes, wiesz gdzie mnie znaleźć.
+
+[CAM_A]
+Wciskaj klawisz ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~, aby zmieniać tryby pracy ~h~kamery ~w~, zarówno w samochodzie jak i poza nim.
+
+[CAM_B]
+Wciskaj klawisz ~h~strzałki w gorę~w~ oraz ~h~strzałki w dół~w~, aby zmieniać tryby pracy ~h~kamery ~w~, zarówno w pojeździe jak i poza nim.
+
+[KM2_1]
+~g~Napraw samochód. Wóz musi być w idealnym stanie.
+
+[LM3_6]
+Joey...
+
+[LM3_6A]
+Znowu będę mogła się pobawić twoim drągiem?
+
+[LM3_9A]
+może będę miał dla ciebie jakieś zajęcie.
+
+[LM3_9B]
+W porządku?
+
+[AWAY2]
+~r~Uciekli.
+
+[AWAY]
+~r~Zwiał stąd, gdzie pieprz rośnie!
+
+[JM6_1]
+Jedź do banku na głównej ulicy.
+
+[GA_6B] { re3 change }
+Zaparkuj wóz, włącz mechanizm klawiszem ~h~~k~~VEHICLE_FIREWEAPON~~w~ i W NOGI!
+
+[GA_7B] { re3 change }
+Uaktywnij bombę za pomocą klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~. Bomba wybuchnie w momencie włączenia silnika.
+
+[BAT1]
+~g~Podnieś kij bejsbolowy!
+
+[EBAL_O]
+Jeśli nic nie schrzanisz, może znajdzie się dla ciebie jakaś praca. A teraz zjeżdżaj!
+
+[HELP9_B]
+Naciśnij klawisz~h~ ~k~~PED_FIREWEAPON~~w~, aby oddać ~h~strzał~w~ z karabinu snajperskiego.
+
+[HELP9_C]
+Naciśnij klawisz~h~ ~k~~PED_FIREWEAPON~~w~, aby oddać ~h~strzał~w~ z karabinu snajperskiego.
+
+[JM6_8]
+~r~Straciłeś wszystkich złodziei!
+
+[COLT_IN]
+Ammu-nacja zaczyna sprzedaż pistoletów!
+
+[TAXI2]
+~r~Koniec czasu!
+
+[TAXI3]
+~r~Przerażony pasażer ucieka!
+
+[TAXI7]
+~r~Twoja taksówka to ruina, połataj ją trochę.
+
+[TAXI4]
+Kurs wykonany!
+
+[TAXI5]
+PREMIA ZA SZYBKOŚĆ!!!
+
+[TAXI6]
+Koniec misji w taksówce
+
+[FRANGO]
+~g~Salvatore chce, abyś najpierw pomógł Toniemu załatwić porachunki z Triadami!
+
+[PAGEB12]
+Łapówka policyjna dostarczona do kryjówki
+
+[PAGEB13]
+Życie dostarczone do kryjówki
+
+[PAGEB14]
+Adrenalina dostarczona do kryjówki
+
+[KM1_4]
+~g~Do tej roboty przydałby się radiowóz!
+
+[CAT1_B]
+przynieś 500.000 $ do Willi w Cedar Grove.
+
+[JM2_C]
+Gość ma budę z makaronem w Chinatown.
+
+[RM6_1]
+Tu masz klucz do dziupli.
+
+[RM6_2]
+Znajdziesz tam trochę forsy i 'zapasów', które zbierałem na czarną godzinę.
+
+[RM6_3]
+Trzymaj się.
+
+[FE_INIP]
+Inicjalizacja i wczytywanie menu pauzy... Proszę czekać.
+
+[FESZ_CA]
+Anuluj
+
+[FESZ_QU]
+Wyjście
+
+[FESZ_L1]
+Gra została pomyślnie zapisana.
+
+[FESZ_L2]
+Gra została zapisana w pliku o nazwie:
+
+[FESZ_OK]
+OK
+
+[FES_LGA]
+Wczytaj grę
+
+[FES_NGA]
+Nowa gra
+
+[FES_CAN]
+Anuluj
+
+[FESZ_QL]
+Wszelkie niezapisane osiągnięcia i zdobycze w trwającej grze zostaną utracone. Wczytać grę?
+
+[FESZ_QD]
+Czy skasować ten zapis gry?
+
+[FESZ_QO]
+Czy nadpisać tę grę na starszym pliku?
+
+[FESZ_QR]
+Czy jesteś pewien, że chcesz rozpocząć nową grę? Wszelkie osiągnięcia i postępy poczynione od momentu ostatniego zapisu gry zostaną utracone. Kontynuować?
+
+[FESZ_QS]
+KONTYNUOWAĆ ZAPIS?
+
+[T4X4_1]
+'PLAC ZABAW PATRIOTÓW'
+
+[T4X4_2]
+'PRZEJAŻDŻKA W PARKU'
+
+[T4X4_3]
+'W POTRZASKU!'
+
+[MM_1]
+'KOSZMAR WIELU PIĘTER'
+
+[T4X4_1A]
+~g~Masz ~y~5 minut~g~ na zaliczenie ~y~15~g~ punktów kontrolnych. ~g~Możesz zaliczać je w ~y~DOWOLNEJ KOLEJNOŚCI.
+
+[T4X4_1B]
+~1~ z 15!
+
+[T4X4_1C]
+~y~PRZEJEDŹ PRZEZ~g~ pierwszy punkt kontrolny, aby uruchomić odliczanie czasu. ~g~Zaliczenie każdego punktu jest premiowane dodatkowymi ~y~20 SEKUNDAMI~g~
+
+[T4X4_2A]
+~g~Masz ~y~2 minuty~g~ na zaliczenie ~y~12~g~ punktów kontrolnych. ~g~Możesz zaliczać je w ~y~DOWOLNEJ KOLEJNOŚCI.
+
+[T4X4_2B]
+~1~ z 12!
+
+[T4X4_2C]
+~y~PRZEJEDŹ PRZEZ~g~ pierwszy punkt kontrolny, aby uruchomić odliczanie czasu. ~g~Zaliczenie każdego punktu jest premiowane dodatkowymi ~y~10 SEKUNDAMI~g~
+
+[T4X4_3A]
+~g~Masz ~y~5 minut~g~ na zaliczenie ~y~20~g~ punktów kontrolnych. ~g~Możesz zaliczać je w ~y~DOWOLNEJ KOLEJNOŚCI.
+
+[T4X4_3B]
+~y~PRZEJEDŹ PRZEZ~g~ pierwszy punkt kontrolny, aby uruchomić odliczanie czasu. ~g~Zaliczenie każdego punktu jest premiowane dodatkowymi ~y~15 SEKUNDAMI~g~
+
+[T4X4_3C]
+~1~ z 20!
+
+[T4X4_F]
+~r~Wymiękasz! Może lepiej sprawdzisz się w wyścigach na hulajnodze?!
+
+[MM_1_A]
+~g~Masz ~y~2 minuty~g~ na zaliczenie ~y~20 punktów kontrolnych~g~ w całym obiekcie! ~g~Możesz zaliczać punkty w ~y~DOWOLNEJ KOLEJNOŚCI.
+
+[MM_1_B]
+~1~ z 20!
+
+[MM_1_C]
+~g~To oznacza 20 sekund plus ~y~5 SEKUND~g~ premii za każdy zaliczony punkt. ~g~Zegar zaczyna odliczanie ~y~NATYCHMIAST.
+
+[FM2_14]
+~r~Zbliżyłeś się za bardzo i wystraszyłeś Kudłatego!
+
+[FM2_15]
+~g~Nie zbliżaj się zbytnio, bo Kudłaty zacznie coś podejrzewać!
+
+[UPSIDE]
+~r~Przewróciłeś samochód!
+
+[FM2_16]
+STRACHOMETR:
+
+[LM3_11]
+~g~Misty nie będzie jeździć autobusem, załatw inny pojazd!
+
+[LANDSTK]
+Landstalker
+
+[IDAHO]
+Idaho
+
+[STINGER]
+Stinger
+
+[LINERUN]
+Linerunner
+
+[PEREN]
+Perennial
+
+[SENTINL]
+Sentinel
+
+[PATRIOT]
+Patriot
+
+[FIRETRK]
+Wóz strażacki
+
+[TRASHM]
+Śmieciożer
+
+[STRETCH]
+Stretch
+
+[MANANA]
+Manana
+
+[INFERNS]
+Infernus
+
+[BLISTA]
+Blista
+
+[PONY]
+Pony
+
+[MULE]
+Muł
+
+[CHEETAH]
+Cheetah
+
+[AMBULAN]
+Karetka pogotowia
+
+[FBICAR]
+Samochód FBI:
+
+[MOONBM]
+Moonbeam
+
+[ESPERAN]
+Esperanto
+
+[TAXI]
+Taksówka
+
+[KURUMA]
+KURUMA
+
+[BOBCAT]
+Bobcat
+
+[WHOOPEE]
+Pan Smakołyk
+
+[BFINJC]
+Zastrzyk BF
+
+[POLICAR]
+Policja
+
+[ENFORCR]
+Enforcer
+
+[SECURI]
+Konwojowóz
+
+[BANSHEE]
+Demon
+
+[PREDATR]
+Predator
+
+[BUS]
+Autobus
+
+[RHINO]
+Hipcio
+
+[BARRCKS]
+Koszary OL
+
+[TRAIN]
+Pociąg
+
+[HELI]
+Helikopter
+
+[DODO]
+Dodo
+
+[COACH]
+Autokar
+
+[CABBIE]
+Taksówka
+
+[STALION]
+Ogier
+
+[RUMPO]
+Rumpo
+
+[RCBANDT]
+Bandziorek
+
+[BELLYUP]
+Ciężarówka Triady
+
+[MRWONGS]
+Mr Wongs
+
+[MAFIACR]
+Sentinel mafii
+
+[YARDICR]
+Lobo gangu Yardie
+
+[YAKUZCR]
+Stinger gangu Yakuza
+
+[DIABLCR]
+Ogier gangu Diablo
+
+[COLOMCR]
+Krążownik Kartelu
+
+[HOODSCR]
+Rumpo XL gangu Hoods
+
+[AEROPL]
+Samolot
+
+[SPEEDER]
+Speeder
+
+[REEFER]
+Reefer
+
+[PANLANT]
+Panlantic
+
+[FLATBED]
+Flatbed
+
+[YANKEE]
+Yankee
+
+[BORGNIN]
+Borgnine
+
+[TOYZ]
+ZABAWKI
+
+[FEST_DF]
+Odległość przebyta pieszo (w milach)
+
+[FEST_DC]
+Odległość przebyta samochodem (w milach)
+
+[FESTDFM]
+Odległość przebyta pieszo (w metrach)
+
+[FESTDCM]
+Odległość przebyta samochodem (w metrach)
+
+[FEST_R1]
+Plac Zabaw Patriotów w sekundach
+
+[FEST_R2]
+Przejażdżka w parku w sekundach
+
+[FEST_R3]
+W Potrzasku! w sekundach
+
+[FEST_RM]
+Koszmar Wielu Pięter w sekundach
+
+[FEST_LS]
+Ludzie uratowani przez karetkę
+
+[FEST_CC]
+Przestępcy zabici podczas misji patrolowych
+
+[FEST_FE]
+Liczba ugaszonych pożarów
+
+[FEST_LF]
+Najdłuższy lot dodo
+
+[FEST_BD]
+Najlepszy czas rozbrojenia bomby
+
+[FEST_RP]
+Wykonane rozwałki:
+
+[FEST_MP]
+Wykonane misje
+
+[FEST_BB]
+Szukaj Punktów
+
+[FEST_H0]
+Najwięcej punktów kontrolnych
+
+[FEST_GC]
+Łączna liczba pojazdów gangów:
+
+[FEST_H1]
+Diabelska demolka
+
+[FEST_H2]
+Mafijna masakra
+
+[FEST_H3]
+Krwawe kasyno
+
+[FEST_H4]
+Rumpo-rozróba
+
+[USJI1]
+TEKST DŁUŻEJ NIEPOTRZEBNY
+
+[USJI2]
+TEKST DŁUŻEJ NIEPOTRZEBNY
+
+[USJI3]
+TEKST DŁUŻEJ NIEPOTRZEBNY
+
+[USJ]
+PREMIA ZA NIETYPOWY SKOK!
+
+[SPRAY]
+Wprowadź samochód do warsztatu lakierniczego, aby obniżyć swój ~h~poziom złek sławy~w~, ~h~naprawić~h~ oraz przemalować~w~ swój wóz. Koszt - ~h~$1000.
+
+[HM1_1]
+~g~Załatw 20 Purpurowych Dziewiątek w 2 minuty 30 sekund.
+
+[KM1_8A] { re3 change }
+Naciśnij klawisz ~h~ ~k~~VEHICLE_FIREWEAPON~ ~w~, aby ~h~aktywować bombę.~w~ Nie zapomnij oddalić się od miejsca eksplozji.
+
+[KM1_8D] { re3 change }
+Naciśnij klawisz ~h~ ~k~~VEHICLE_FIREWEAPON~ ~w~, aby ~h~aktywować bombę.~w~ Nie zapomnij oddalić się od miejsca eksplozji.
+
+[KM1_12]
+~g~Odwieź go do dojo, ale najpierw pozbądź się gliniarzy!
+
+[RATNG1]
+Kieszonkowiec
+
+[RATNG2]
+Mięśniak
+
+[RATNG3]
+Łotr
+
+[RATNG4]
+Hazardzista
+
+[RATNG5]
+Zbir
+
+[RATNG6]
+Kierowca
+
+[RATNG7]
+Twardziel do wynajęcia
+
+[RATNG8]
+Oszust
+
+[RATNG9]
+Współpracownik
+
+[RATNG10]
+Sprzątacz
+
+[RATNG11]
+Zabójca
+
+[RATNG12]
+Złota rączka
+
+[RATNG13]
+Egzekutor
+
+[RATNG14]
+Capo
+
+[RATNG15]
+Szef
+
+[1010]
+~r~Twój pojazd dachował
+
+[1011]
+~r~Twój pojazd dachował
+
+[1012]
+~r~Twój pojazd dachował
+
+[1013]
+~r~Twój pojazd dachował
+
+[1014]
+~r~Twój pojazd dachował
+
+[JM4_10]
+Słuchaj, młody! Najpierw zawieź mnie do pralni w chińskiej dzielnicy. Mam małą sprawę do załatwienia.
+
+[JM4_11]
+Praczki przestały płacić haracz za ochronę.
+
+[JM4_12]
+Tylko uważaj na wóz, Joey dopiero poskładał ten szmelc.
+
+[JM4_13]
+Więc bez żadnych numerów, OK?
+
+[KM4_11]
+~g~Odwieź pieniądze do kasyna!
+
+[FEF_BR2]
+Możesz przypomnieć sobie fabułę gry, czytając zebrane dotąd streszczenia celów misji.
+
+[TRAIN_1]
+Stacja Kurowski
+
+[TRAIN_2]
+Stacja Rothwell
+
+[TRAIN_3]
+Stacja Baillie
+
+[SUBWAY1]
+Portland Station
+
+[SUBWAY2]
+Rockford Station
+
+[SUBWAY3]
+Staunton South Station
+
+[SUBWAY4]
+Shoreside Terminal
+
+[MEA4_2]
+~r~Marty Chonks nie żyje!
+
+[SPRAY1]
+Wprowadź samochód do warsztatu lakierniczego, aby obniżyć swój ~h~poziom złej sławy~w~, ~h~naprawić~h~ oraz przemalować~w~ swój wóz. Koszt - ~h~$1000~w~. Tym razem zrobimy to za darmo.
+
+[JM4_A]
+Tak, wiem Toni, naprawdę nieźle ją sobie wychowałem. Aż mruczy z zadowolenia, kapujesz?
+
+[JM4_5]
+Wpadnij później to damy im coś do prania - ich własne pokrwawione gacie!
+
+[AMMU_A]
+Luigi mówił, że potrzebujesz gnata...
+
+[AMMU_B]
+Joey wspominał, że potrzebna ci artyleria...
+
+[AMMU_C]
+Idź na tył sklepu. Na podwórzu zostawiłem dla ciebie dziewiątkę.
+
+[AMMU_D]
+Mam wszystko, co potrzeba do obrony własnego gospodarstwa domowego.
+
+[AMMU_E]
+Chcesz jeszcze pozwolenie?
+
+[AMMU_F]
+Nie musisz pokazywać dowodu, wyglądasz na wiarygodnego gościa.
+
+[DETON]
+DETONACJA:
+
+[DRIVE_A] { re3 change }
+Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w prawo - aby otworzyć ogień, naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~.
+
+[DRIVE_B] { re3 change }
+Wybierz jako broń uzi i wsiądź do pojazdu. Następnie spójrz w lewo lub w prawo - aby otworzyć ogień, naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~.
+
+[RECORD]
+~g~NOWY REKORD!
+
+[NRECORD]
+~r~NIE MA NOWEGO REKORDU!
+
+[RCHELP] { re3 change }
+Naciśnij klawisz ~k~~VEHICLE_FIREWEAPON~ lub uderz zdalnie sterowanym samochodzikiem w koła pojazdu, aby spowodować eksplozję.
+
+[RCHELPA] { re3 change }
+Naciśnij klawisz ~k~~VEHICLE_FIREWEAPON~ lub uderz zdalnie sterowanym samochodzikiem w koła pojazdu, aby spowodować eksplozję.
+
+[RC_1]
+Masz 2 minuty, aby wysadzić tyle samochodów gangu Diablo, ile tylko się da!
+
+[RC_2]
+Masz 2 minuty, aby wysadzić tyle samochodów mafii, ile tylko się da!
+
+[RC_3]
+Masz 2 minuty, aby wysadzić tyle samochodów Yakuzy, ile tylko się da!
+
+[RC_4]
+Masz 2 minuty, aby wysadzić tyle samochodów gangu Yardie, ile tylko się da!
+
+[RC_5]
+Masz 2 minuty, aby wysadzić tyle samochodów gangu Hoods, ile tylko się da!
+
+[RC_6]
+Masz 2 minuty, aby wysadzić tyle samochodów Kartelu, ile tylko się da!
+
+[RAMPAGE]
+ROZWAŁKA!!
+
+[RAMP_P]
+ROZWAŁKA WYKONANA!
+
+[RAMP_F]
+ROZWAŁKA NIEUDANA!
+
+[PAGE_00]
+.
+
+[PAGE_01]
+Załatw ~1~ludzi z gangu Diablo w 120 sekund!
+
+[PAGE_02]
+Zniszcz ~1~ pojazdów w ciągu 120 sekund!
+
+[PAGE_03]
+Zabij ~1~ członków mafii w ciągu 120 sekund!
+
+[PAGE_04]
+Zabij ~1~ członków Triady w ciągu 120 sekund!
+
+[PAGE_05]
+Zabij ~1~ członków Triady w ciągu 120 sekund!
+
+[PAGE_06]
+Zniszcz ~1~ pojazdów w ciągu 120 sekund!
+
+[PAGE_07]
+Rozwal ~1~ łebków z gangu Yardie w ciągu 120 sekund!
+
+[PAGE_08]
+Spal ~1~ członków Yakuzy w ciągu 120 sekund!
+
+[PAGE_09]
+Zniszcz ~1~ pojazdów w ciągu 120 sekund!
+
+[PAGE_10]
+Zniszcz ~1~ pojazdów w ciągu 120 sekund!
+
+[PAGE_11]
+Skasuj ~1~ członków gangu Yardie w ciągu 120 sekund!
+
+[PAGE_12]
+Podpal ~1~ członków Yakuzy w ciągu 120 sekund!
+
+[PAGE_13]
+Wysadź w powietrze ~1~ członków gangu Yardie w ciągu 120 sekund!
+
+[PAGE_14]
+Usmaż ~1~ Kolumbijczyków w ciągu 120 sekund.
+
+[PAGE_15]
+Rozjedź ~1~ członków gangu Hoods w ciągu 120 sekund!
+
+[PAGE_16]
+Zniszcz ~1~ pojazdów w ciągu 120 sekund!
+
+[PAGE_17]
+Rozjedź samochodem ~1~ Kolumbijczyków w ciągu 120 sekund!
+
+[PAGE_18]
+Rozjedź i zniszcz ~1~ pojazdów w ciągu 120 sekund!
+
+[PAGE_19]
+Urwij ~1~ głów Kolumbijczyków w ciągu 120 sekund!
+
+[PAGE_20]
+Obetnij głowy ~1~ członkom gangu Hoods w ciągu 120 sekund!
+
+[JM1_A]
+Hej, umieram z nudów! Kiedy w końcu mnie przelecisz?
+
+[JM1_B]
+Za chwileczkę, złotko! Muszę się zająć jedną drobną kwestią...
+
+[JM1_C]
+Mam dla ciebie robótkę, kolego.
+
+[JM1_D]
+Bracia Forelli od dawna wiszą mi kasę. Od zbyt dawna.
+
+[JM1_E]
+Trzeba dać im lekcję szacunku.
+
+[JM1_F]
+Buźka Forelli napycha właśnie swój bęben w Bistro w St. Marks,
+
+[JM1_G]
+więc ukradnij jego samochód i zabierz go do warsztatu 8-Balla w Harwood.
+
+[JM1_H]
+Znasz 8-Balla, nie?
+
+[JM1_I]
+Kiedy 8-Ball założy w samochodzie ładunek, odprowadź furę na to samo miejsce, z którego ją wziąłeś.
+
+[JM1_J]
+Potem usiądź w bezpiecznej odległości i podziwiaj fajerwerki.
+
+[JM1_K]
+Tylko się pospiesz, grubas nie będzie przecież jadł cały dzień.
+
+[CAT2_A1]
+Jazda, głupia dziwko!
+
+[CAT2_A]
+Trzeba zadać sobie pytanie: czy przyjechałeś ratować Marię czy też żeby spotkać się ze mną?
+
+[CAT2_B]
+Mam dla ciebie wiadomość:
+
+[CAT2_B2]
+romans z tobą to był wyłącznie interes, za to zastrzelę cię dla przyjemności.
+
+[CAT2_C]
+Jesteś muy peccino amigo!
+
+[CAT2_D]
+Rzuć forsę.
+
+[CAT2_E]
+Ostatnio byłeś bardzo pilnym uczniem!
+
+[CAT2_E2]
+Ale nic się nie nauczyłeś. Mnie nie wolno ufać.
+
+[CAT2_E3]
+Zabić tego idiotę.
+
+[CAT2_J]
+Poderwij ten złom w powietrze!
+
+[HM5_1]
+Yo, Ice mówił, że przyjdziesz. Teraz zasady: bierzemy tylko bejsbole - bez spluw i bez samochodów.
+
+[HM5_5]
+To bitwa o honor, czaisz?
+
+[HELP14]
+Aby podnieść broń, po prostu wejdź na nią. Nie możesz podnieść broni, jeżeli siedzisz w samochodzie.
+
+[CRUSH]
+Zaparkuj w oznaczonym miejscu i wysiądź z pojazdu. Samochód zostanie zgnieciony.
+
+[DIAB2_B]
+Gang brzydkich panów zagroził, że pozbawi mnie mojego gwiazdora, jeżeli nie odpalę im doli.
+
+[DIAB2_C]
+Zatańczyli z niewłaściwym człowiekiem, amigo.
+
+[DIAB2_D]
+Oni mają słabość do lodów.
+
+[DIAB2_E]
+Odszukaj bombę, którą zostawiłem w Harwood,
+
+[DIAB2_F]
+porwij jeden z samochodów sprzedających lody w całym mieście,
+
+[DIAB2_G]
+a potem zwab tych idiotów reklamowym sygnałem lodziarza.
+
+[DIAB2_H]
+Ukrywają się w magazynach przy Atlantic Quay.
+
+[DIAB3_A]
+Jacyś niegrzeczni członkowie Triady ukradli wczoraj w nocy mój samochód,
+
+[DIAB3_B]
+rozbili go i zostawili, aby się dopalił.
+
+[DIAB3_C]
+W bagażniku miałem kilka wyjątkowo cennych pamiątek -
+
+[DIAB3_D]
+prawdziwe rzadkie okazy, których nie da się niczym zastąpić, mój przyjacielu.
+
+[DIAB3_E]
+Na granicy Chinatown ukryłem dla ciebie naprawdę potężną broń.
+
+[DIAB3_F]
+Skorzystaj z niej i naucz wandali z Triady, co oznacza zasłużony gniew El Burro.
+
+[DIAB3_1]
+ZABIJ 25 CZŁONKÓW TRIADY
+
+[DIAB4_A]
+Jakiś marny złodziejaszek ukradł mi półciężarówkę z najnowszym wydaniem moich magazynów... Prosto z drukarni!
+
+[DIAB4_B]
+Ale ten zaćpany idiota nie zamknął tylnych drzwi
+
+[DIAB4_C]
+i teraz moja starannie opracowana literatura dla dorosłych,
+
+[DIAB4_D]
+opatrzona wysmakowanymi zdjęciami, wala się po całym Liberty!
+
+[DIAB4_E]
+Weź półciężarówkę i jedź śladem magazynów 'Donkey Daje Całemu Dallas' część 1, 2 i 3.
+
+[DIAB4_F]
+Zbieraj wszystko, co znajdziesz.
+
+[DIAB4_G]
+Kiedy dotrzesz po tropie do tego złodziejskiego ĆPUNA, załatw go!
+
+[DIAB4_H]
+A potem zawieź moje książeczki z Donkey do Magazynów XXX w Dzielnicy Czerwonych Świateł.
+
+[DIAB4_1]
+~g~Zabierz samochód na zaplecze Magazynów XXX.
+
+[HM1_E]
+Pokaż tym zaćpanym siuśkom, na czym polega prawdziwa jazda samochodem.
+
+[HM1_H]
+Usuń mi te 'Dziewiątki' z widoku!
+
+[HM2_A]
+Te 'Dziewiątki' nadal nadeptują mi na odcisk.
+
+[HM2_B]
+Szczeniaki załatwiły sobie samochody opancerzone i sprzedają PROCHY...
+
+[HM2_C]
+...naszym niewinnym czarnym braciom.
+
+[HM2_D]
+Zostawiłem dla ciebie samochód.
+
+[HM2_E]
+W środku znajdziesz parę zabawek, które pomogą ci dać siuśkom nauczkę...
+
+[HM3_A]
+Jakiś samobójca wsadził bombę do mojej gabloty.
+
+[HM3_B]
+Jeżeli stracę tę furę, mogę pożegnać się z moją reputacją na ulicach.
+
+[HM3_C]
+Weź mój wóz i zabierz go do warsztatu w St. Marks, brachu.
+
+[HM3_D]
+Niech chłopaki się nim zajmą i rozbroją bombę.
+
+[HM3_E]
+Zegar już odlicza czas, a bomba chyba jest uszkodzona.
+
+[HM3_F]
+Wpadniesz w jedną dziurę za dużo i to cacko wyleci w powietrze.
+
+[HM3_G]
+Na co jeszcze czekasz?
+
+[HM4_A]
+Yo, na lotnisku im. Francisa właśnie roztrzaskał się samolot Banku Narodowego.
+
+[HM4_B]
+Platyna wala się po całym pasie startowym.
+
+[HM4_C]
+Załatw samochód i zgarnij tyle, ile tylko się da.
+
+[HM4_F]
+Możesz wysypać platynę przy jednym z moich garaży.
+
+[HM4_G]
+Platyna jest cholernie ciężka, więc nie zdziw się, kiedy przeciążysz gablotę i fura będzie się wlokła jak ślimak.
+
+[HM4_H]
+Lepiej regularnie zrzucaj towar przy jakimś garażu.
+
+[HM5_A]
+Z gangu 'Dziewiątek' zostały już tylko niedobitki...
+
+[HM5_B]
+ale nadal chcą się pobawić.
+
+[HM5_C]
+Zgodzili się na pojedynek twarzą w twarz.
+
+[HM5_D]
+Ich banda przeciwko dwóm spośród nas, a raczej...
+
+[HM5_E]
+przeciwko tobie i jeszcze komuś
+
+[HM5_F]
+Poszedłbym z tobą, ale...
+
+[HM5_G]
+jeszcze przez trzy miesiące mam wyrok w zawieszeniu i nie mogę rozrabiać,
+
+[HM5_H]
+sam rozumiesz.
+
+[HM5_I]
+Weźmiesz ze sobą mojego młodszego brata.
+
+[HM5_J]
+On ci pokaże, gdzie jesteście umówieni.
+
+[MEA1_B]
+Nazywam się Chonks, Marty Chonks.
+
+[MEA1_C]
+Prowadzę Delikatesy Pod Psem, tuż za rogiem.
+
+[MEA1_D]
+Mam kłopoty z kasą, ale kto ich dzisiaj nie ma?
+
+[MEA1_E]
+Jestem umówiony z kierownikiem mojego banku.
+
+[MEA1_F]
+Ten cwaniaczek cały czas podnosi odsetki mojego kredytu, żeby móc odkroić swoją działkę.
+
+[MEA1_G]
+Weź mój samochód, jedź po niego i przywieź go tutaj.
+
+[MEA1_H]
+Mam małą niespodziankę dla tego krwiopijcy!!
+
+[MEA2_A]
+Wynająłem paru złodziejaszków, aby włamali się do mojego mieszkania
+
+[MEA2_C]
+Te złodziejskie szumowiny grożą, że zakapują mnie w firmie ubezpieczeniowej,
+
+[MEA2_D]
+jeżeli nie odpalę im doli.
+
+[MEA2_E]
+To się po prostu w głowie nie mieści!
+
+[MEA2_F]
+W fabryce zostawiłem samochód.
+
+[MEA2_G]
+Skorzystaj z niego i zabierz złodziei z Dzielnicy Czerwonych Świateł.
+
+[MEA2_H]
+Potem przywieź ich do fabryki. Tam wytłumaczę im mój punkt widzenia w tej sprawie.
+
+[MEA3_A]
+Mój interes zbankrutuje, jeżeli szybko nie dostanę do rąk większej gotówki.
+
+[MEA3_B]
+Moja żona ma sporą polisę ubezpieczeniową, a i tak przez całe życie tylko wyciągała ode mnie pieniądze.
+
+[MEA3_C]
+Zostawiłem samochód w umówionym miejscu.
+
+[MEA3_D]
+Jedź po moją żonę do pawilonu 'Klasyczny Manicure' i przywieź ją do fabryki.
+
+[MEA4_A]
+Cholera, wpakowałem się w tarapaty!
+
+[MEA4_B]
+Okazuje się, że moja żona romansowała z gościem, któremu wiszę pieniądze.
+
+[MEA4_C]
+Jest mocno wkurzony i chce mi się zrewanżować!
+
+[MEA4_E]
+on myśli, że chcę oddać mu kasę...
+
+[MEA4_F]
+ale mnie się zdaje...
+
+[MEA4_G]
+że do misek psów z Liberty jeszcze w tym miesiącu trafi kolejny rodzaj mięska!
+
+[WELCOME]
+WITAMY W
+
+[HM1_2]
+~g~Zdobądź samochód! Pamiętaj, że liczą się tylko kolesie rozjechani samochodem!
+
+[HELP8_B]
+Naciśnij klawisz~h~ ~k~~PED_SNIPER_ZOOM_IN~~w~, aby ~h~przybliżyć ~w~widok przez lunetkę karabinu oraz klawisz~h~ ~k~~PED_SNIPER_ZOOM_OUT~~w~, aby ~h~oddalić~w~ widok.
+
+[LRQC_1]
+Muszę, hm, porozmawiać z Asuką.
+
+[LRQC_2]
+Może wyskoczysz na spacer po mieście?
+
+[LRQC_3]
+Musisz znaleźć sobie jakąś kryjówkę.
+
+[LRQC_4]
+W Belville jest magazyn, który powinien ci odpowiadać.
+
+[LRQC_5]
+Kiedy będziesz gotowy, wróć do mojego apartamentu,
+
+[LRQC_6]
+to pogadamy, co robić dalej.
+
+[JM6_5]
+~g~Musisz załatwić pojazd, którym uciekniemy, idioto!
+
+[JM2_F]
+Jeżeli potrzebujesz giwery, to idź na zaplecze Amu-Nacji naprzeciwko stacji metra.
+
+[LOVE4_7]
+~g~Na Wyspie Staunton jest jakiś plac budowy, może to właśnie tam zabrali pakunek.
+
+[LOVE4_8]
+~g~Aby otworzyć ten garaż, musisz mieć samochód.
+
+[TSCORE]
+ZAROBEK: $~1~
+
+[AM1_9]
+~r~Salvatore uciekł z powrotem do klubu 'U Luigiego'!
+
+[AM1_6]
+~g~Jeżeli będziesz kręcił się wokół klubu Luigiego, to mafia z pewnością cię wypatrzy!
+
+[TM2_3]
+~g~To pułapka! Załatw ich!!!
+
+[FM4_1]
+Tu mówi Maria. Ten samochód to pułapka! Spotkaj się ze mną na południowym końcu Mostu Callahan.
+
+[JM1_7]
+~g~Zamknij drzwi samochodu! Mike może coś zwąchać!
+
+[KM5_1]
+~g~DILER ROZJECHANY!!!
+
+[KM5_6]
+~g~Musisz zamordować co najmniej 8 dilerów z gangu Yardie.
+
+[KM5_7]
+~g~Zabijaj jak najszybciej! Kiedy sprzedadzą cały towar, pochowają się w swoich norach!
+
+[RM3_8]
+~r~Ten samochód to tylko przynęta!!
+
+[LM3_8]
+Cześć, jestem Joey.
+
+[LM3_9]
+Luigi mówił, że można ci ufać, więc wpadnij później,
+
+[KM3_5]
+~g~Naciśnij klakson, aby zacząć rozmowy.
+
+[LOVE7]
+ZNIKNIĘCIE LOVE'A
+
+[LOVE2_5]
+~g~Z Kenji'ego została już tylko kupa mięsa na twoje masce! Uciekaj z Newport i pozbądź się samochodu!
+
+[AS2_11]
+~g~~1~ Z 9!
+
+[GARAGE1]
+~g~Wysiądź z samochodu i wyjdź na zewnątrz.
+
+[KM3_11]
+~g~Kartel został zaatakowany, a teczka nie została odzyskana.
+
+[KM3_12]
+~g~Zabij wszystkich Kolumbijczyków, zniszcz pojazdy i odzyskaj teczkę.
+
+[KM3_13]
+~g~Odwieź teczkę do kasyna.
+
+[RM5_6]
+~g~Prawie go masz! Staranuj jego wóz swoim pojazdem albo rozwal materiałami wybuchowymi!
+
+[PBOAT_1] { re3 change }
+Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby otworzyć ogień z działek na łodzi.
+
+[PBOAT_2] { re3 change }
+Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby otworzyć ogień z działek na łodzi.
+
+[DIAB1_B]
+Mówi El Burro z gangu Diablo.
+
+[DIAB1_D]
+Jesteś nowy w Liberty, ale na ulicach już zaczyna być o tobie głośno.
+
+[DIAB1_E]
+Organizuję dla rozrywki mały wyścig. Punkt startu znajduje się przy starej szkole w okolicach Mostu Callahan.
+
+[DIAB1_F]
+Skołuj sobie gablotę. Wygrywa ten, kto pierwszy zaliczy wszystkie punkty na trasie.
+
+[HM2_1] { re3 change }
+Użyj zdalnie sterowanych samochodzików, aby zniszczyć samochody opancerzone. Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby zdetonować ładunek.
+
+[HM2_1A] { re3 change }
+Użyj zdalnie sterowanych samochodzików, aby zniszczyć samochody opancerzone. Naciśnij klawisz ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby zdetonować ładunek.
+
+[HM2_2]
+~r~Nie udało ci się zniszczyć wszystkich samochodów opancerzonych!
+
+[HM2_6]
+~g~Samochód opancerzony został zniszczony!
+
+[RM3_A]
+Znam w tym mieście jednego bardzo ważnego faceta, prawdziwą grubą rybę,
+
+[RM3_H]
+który słynie ze swych, jak to ująć, nietypowych upodobań i wielkiej fortuny, jaką na nie wydaje.
+
+[RM3_B]
+Uwikłał się w proces sądowy, a prokuratura zdobyła kompromitujące go fotografie.
+
+[RM3_C]
+Zrobili je na imprezie w kostnicy czy coś takiego.
+
+[LOVE6_A]
+Przyjacielu, przyjmij ode mnie lekcję prowadzenia interesów.
+
+[LOVE6_E]
+Jeżeli posiadasz przedmiot jedyny w swoim rodzaju, to dokładnie wszyscy, nawet ze swoimi żonami, będą się ze wszystkich sił starać ci go odebrać,
+
+[LOVE6_C]
+Oddziały antyterrorystyczne otoczyły obszar, na którym znajduje się mój współpracownik wraz z pakunkiem.
+
+[LOVE6_D]
+Jedź tam i weź ciężarówkę. Posłużysz jako przynęta.
+
+[LOVE6_F]
+Odciągnij ich uwagę tak, aby mój przyjaciel mógł spokojnie opuścić to miejsce.
+
+[AM3_C]
+Teraz najprawdopodobniej czyha na zatoce! Ukradnij łódź policyjną i raz na zawsze zakończ jego karierę!
+
+[FESZ_UC]
+ANULUJ
+
+[FEDS_SM]
+L1, R1 - ZMIANA MENU
+
+[FEDS_AS]
+;= - ZMIANA WYBORU
+
+[FEDSAS2]
+<> - ZMIANA WYBORU
+
+[FEDS_SS]
+L1, R1 - ZMIANA WYBORU
+
+[FEDSSC1]
+; - SZYBSZE PRZEWIJANIE
+
+[FEDSSC2]
+Err:509
+
+[MEA2_3]
+~g~Odwieź samochód do fabryki.
+
+[RM1_3]
+~r~McAffrey zwiał!
+
+[RM1_4]
+~g~Zużyłeś wszystkie granaty! Wróć po nowy zapas do Amu-Nacji!
+
+[RM1_5]
+~g~Wracaj i podpal ten dom!
+
+[RM6_4]
+~g~Jedź do dziupli i zabierz rzeczy Raya.
+
+[RM6_5]
+~g~CIA nieustannie obserwuje most, znajdź inną trasę.
+
+[HM2_F]
+i sprzątnąć ich pancerny złom.
+
+[HM_4]
+'W POGONI ZA KASĄ'
+
+[MEA2_B5]
+TEKST JUŻ NIEPOTRZEBNY
+
+[MEA1_B5]
+TEKST JUŻ NIEPOTRZEBNY
+
+[MEA3_B5]
+TEKST JUŻ NIEPOTRZEBNY
+
+[MEA4_B7]
+ale jeżeli zechcesz wpaść do mojego biura...
+
+[MEA3_B4]
+Marty chce się ze mną widzieć? Lepiej niech się streszcza, bo muszę jeszcze zrobić sobie dzisiaj nową fryzurę.
+
+[KM3_7]
+Ludzie, to pułapka Yakuzy!
+
+[FES_LOF]
+Wczytywanie nieudane.
+
+[FES_SLO]
+ZAPISZ PLIK
+
+[FES_ISC]
+USZKODZONY
+
+[FESZ_TI]
+ZAPISZ Z1
+
+[FESZ_SA]
+Zapis gry
+
+[MC_LDFL]
+Wczytywanie nieudane!
+
+[MC_NWRE]
+Trwa ponowne uruchamianie gry.
+
+[LOVE6_3]
+~g~Masz ~1~ sekund na powrót do konwojowozu albo misja zakończy się porażką.
+
+[LOVE6_4]
+~r~Straciłeś fałszywy konwojowóz!
+
+[HELP1]
+Zatrzymaj się wewnątrz niebieskiego pola.
+
+[HELP12]
+Stań na niebieskim polu, aby rozpocząć misję.
+
+[HJSTAT]
+Odległość: ~1~,~1~m Wysokość:~1~,~1~m Salta: ~1~ Obroty: ~1~_
+
+[HJSTATW]
+Odległość: ~1~.~1~m Wysokość: ~1~.~1~m Salta: ~1~ Obroty: ~1~_ Plus doskonałe lądowanie!
+
+[DIAB1_5]
+CZAS WYŚCIGU:
+
+[LOVE3_4]
+~r~Zniszczyłeś samolot!
+
+[F_FAIL1]
+Misja strażacka zakończona.
+
+[F_CANC]
+~r~Misja strażacka anulowana!
+
+[F_EXTIN]
+POŻARY:
+
+[A_COMP1]
+Misja ratunkowa wykonana!
+
+[A_CANC]
+~R~Misja ratunkowa anulowana!
+
+[A_COMP3]
+Misja ratunkowa wykonana! Ty chyba nigdy się nie męczysz!
+
+[ATUTOR]
+Wciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~~w~, aby włączyć lub wyłączyć misje ratunkowe.
+
+[ATUTOR3]
+Wciśnij klawisz ~h~~k~~TOGGLE_SUBMISSIONS~~w~, aby włączyć lub wyłączyć misje ratunkowe.
+
+[ALEVEL]
+Misja Ratunkowa, Poziom ~1~
+
+[A_FAIL1]
+Misja ratunkowa zakończona.
+
+[FEST_HA]
+Najwyższy poziom misji ratunkowej
+
+[A_SAVES]
+URATOWANI LUDZIE:~1~
+
+[C_KILLS]
+ZABICI PRZESTĘPCY: ~1~
+
+[HM1_B]
+Mam problem z paroma frajerami.
+
+[AM2_A]
+Śmierć Salvatore to radosna wiadomość,
+
+[AM2_A2]
+widać, że jesteś dobrym zabójcą. Lubię tę cechę u ludzi.
+
+[AM2_B]
+To mój brat Kenji.
+
+[AM2_C]
+Asuka ma dla ciebie małą robótkę. Kiedy skończysz, wpadnij do mojego kasyna, to pogadamy.
+
+[AM2_D]
+Zupełnie jak Kenji, on też zawsze chce bawić się moimi zabawkami.
+
+[AM2_E]
+Moja wtyczka w policji donosi, że Mafia obserwuje nasze lokale w całym mieście.
+
+[AM2_E2]
+Prawdopodobnie usiłują cię wytropić.
+
+[AM2_F]
+Dopóki nie załatwimy tej sprawy, nie możemy prowadzić zwykłej działalności.
+
+[AM2_G]
+Załatw tych głupawych szpiegów i raz na zawsze zakończ tę wendettę.
+
+[F_START]
+~g~W okolicach ~a~ zauważono płonący pojazd. Udaj się tam i ugaś pożar.
+
+[AM4_1A]
+Odszukaj telefon na Park West Belleville.
+
+[AM4_1B]
+Odszukaj telefon na kampusie Liberty.
+
+[AM4_1C]
+Odszukaj telefon na Park South Belleville.
+
+[AM4_1D]
+Spotkajmy się w parku przy toaletach.
+
+[HJSTATF]
+Odległość: ~1~ stóp Wysokość: ~1~ stóp Salta: ~1~ Obroty: ~1~_
+
+[HJSTAWF]
+Odległość: ~1~.~1~ stóp Wysokość: ~1~.~1~ stóp Salta: ~1~ Obroty: ~1~_ Plus doskonałe lądowanie!
+
+[HM1_F]
+Lepiej uważaj - na ulicach będą też ludzie z Jacks, którzy mogą uznać, że polujesz również na nich!
+
+[HM1_D]
+Nazywają się 'Dziewiątki' i ubierają się na purpurowo. Każdy dzień, kiedy te leszcze obnoszą się ze swoim barwami,
+
+[HM1_G]
+to dzień wstydu dla mojego gangu.
+
+[MEA2_B]
+i ukradli parę rzeczy, co pozwoli mi wyciągnąć kasę z odszkodowania.
+
+[TM3_H]
+~w~Dobrze się spisałeś, młody, naprawdę dobrze.
+
+[TM3_I]
+~w~Chodź, Don chce cię poznać.
+
+[TM3_J]
+~w~Heeeej, Luigi!
+
+[TM3_K]
+~w~Moje dziewczynki tęsknią za tobą, Salvatore, dawno cię u nas nie było.
+
+[TM3_L]
+~w~Przekaż im ode mnie, że kiedy załatwimy całą tę nieszczęsną sprawę,
+
+[TM3_M]
+~w~razem pojedziemy do klubu i uczcimy zwycięstwo
+
+[TM3_N]
+~w~Oto i mój chłopak.
+
+[TM3_N2]
+~w~Jak się masz, tato?
+
+[TM3_O]
+~w~Znalazłeś już sobie przyzwoitą kobietę?
+
+[TM3_P]
+~w~Ech, twoja matka, wieczny odpoczynek racz jej dać Panie, przewraca się w grobie,
+
+[TM3_Q]
+~w~bo jej syn jeszcze nie ma żony.
+
+[TM3_R]
+~w~Wiem, tato. Pracuję nad tym.
+
+[TM3_S]
+~w~TONI! Jak twoja Mamuśka?
+
+[TM3_T]
+~w~To wspaniała kobieta. Silna. Firenze.
+
+[TM3_U]
+~w~Mama ma się dobrze... Znakomicie.
+
+[TM3_V]
+~w~Doskonale, doskonale. Posłuchajcie, panowie, rozgośćcie się w środku, a ja porozmawiam z naszym nowym przyjacielem.
+
+[TM3_W]
+~w~Widzę przed tobą wielką przyszłość, chłopcze...
+
+[RM1_A]
+Ta szuja McAffrey wziął więcej łapówek niż ktokolwiek inny.
+
+[RM1_B]
+Teraz myśli, że zasłuży na wygodną emeryturę, jeżeli zakapuje nas policji.
+
+[RM1_C]
+Właśnie nas wsypał!
+
+[RM4_B]
+Trzeba go uciszyć raz na zawsze.
+
+[RM4_E]
+Od jutra ma spać z rybami, a nie jadać je na kolację.
+
+[LOVE3_B]
+Dziś w nocy mały samolot przeleci nad zatoką, podchodząc do lądowania.
+
+[LOVE4_D]
+Niestety, władze lotniska przejęły samolot i zaczęły rozbierać go na części,
+
+[LOVE4_H]
+dopóki nie rzuciłem na szalę całego swojego autorytetu.
+
+[LOVE4_E]
+Przejedź przez most do Shoreside Vale i jedź na lotnisko im. Francisa.
+
+[GTAB_A]
+Lepiej stąd znikajmy. Cholera wie, co to jest,
+
+[GTAB_B]
+ale zdaje się, że temu facetowi bardzo na tym zależy, więc to z pewnością musi mieć jakąś wartość.
+
+[GTAB_C]
+Co, u diabła!
+
+[GTAB_D]
+TO TY!
+
+[GTAB_E]
+Hej, spokojnie, amigo! De nada! De nada!
+
+[GTAB_F]
+Kiedy ostatni raz cię widziałem, twoje truchło spływało do ścieków!
+
+[GTAB_G]
+Nie strzelaj, amigo. Nie ma problemu. My przyjaciele. Proszę, weź to sobie.
+
+[GTAB_H]
+Nie bądź taką ciotą!
+
+[GTAB_I]
+Nie mamy wyboru, kotku!
+
+[GTAB_J]
+Zawsze mamy wybór, tępaku!
+
+[GTAB_K]
+Przepraszam za tę głupią sukę, one wszystkie są jednakowe... por favor?
+
+[GTAB_L]
+Więc ta dziwka zwiała?
+
+[GTAB_M]
+Ale zrobiłeś mi przysługę,
+
+[GTAB_N]
+nie jesteś jedyną osobą, która ma rachunki do wyrównania z Kartelem.
+
+[GTAB_O]
+Ten gnidy zabiły mi brata!
+
+[GTAB_P]
+Nigdy nie zabiłem żadnego członka Yakuzy!
+
+[GTAB_Q]
+KŁAMIESZ! Wszyscy widzieliśmy zabójcę z Kartelu.
+
+[GTAB_R]
+Wytropimy i wytłuczemy was wszystkich, wy kolumbijskie kundle!
+
+[GTAB_S]
+Pobawię się z twoim przyjacielem, aby wydobyć z niego jakieś informacje i troszkę się rozerwać.
+
+[GTAB_T]
+Ej, wpadnij później, będe cię jeszcze potrzebował.
+
+[GTAB_U]
+Proszę, amigo, nie zostawiaj mnie z nią! Ta chica to wariatka! Amigo? Hej, AMIGOOO!!!... Aaaaaa!
+
+[LOVE5_A]
+Raz po raz dowodzisz, że warto w ciebie inwestować, a to rzadkość w dzisiejszych czasach kłamstwa i obłudy.
+
+[KM3_1]
+~g~Kartel spodziewa się kolesia z Yardies, więc idź i ukradnij samochód gangu Yardie! Powinieneś znaleźć ich w Newport, na północy.
+
+[LOVE1_1]
+~g~Podwędź samochód gangu kolumbijskiego, abyś mógł swobodnie przeniknąć do ich kryjówki. Samochód znajdziesz na północ stąd, w Fort Staunton.
+
+[FM1_Q1]
+~w~Szukasz mocnych wrażeń? Może odrobinę... Hm? Odrobinę HEROINY?
+
+[FM1_R]
+~w~Czołem, Chico. Nie, daj mi to, co zawsze.
+
+[FM1_T]
+~w~Dzięki, Chico. Na razie!
+
+[FM1_W]
+~w~W porządku, piesku! Posiedź tu i popilnuj samochodu, a ja wyskoczę i poruszam trochę tyłkiem.
+
+[FM1_X]
+~w~OK, piesku! Znikajmy stąd. Hau hau!
+
+[FM1_Q]
+~g~Cześć, Mario! Moja ulubiona klientka!
+
+[FM1_S1]
+~w~Hej, może wpadniesz na imprezę w tej pustej hali magazynowej na wschodnim krańcu Atlantic Quays?
+
+[FM1_U]
+~w~Gracias i życzę przyjemnych wrażeń. To niezły towar...
+
+[FM1_V]
+~w~Jazda, piesku! Jedziemy zajrzeć na tę imprezę!
+
+[FM1_SS]
+~r~NASŁUCH RADIOWY: ~g~Cztery-pięć do wszystkich jednostek: Zapewnić wsparcie akcji antynarkotykowej w Atlantic Quays...
+
+[LOVE6_B]
+nawet jeżeli mają tylko blade pojęcie na temat jego rzeczywistej wartości.
+
+[TM3_A1]
+~r~Joey się usmażył!
+
+[TM3_A2]
+~r~Joey i Lugi spiekli się na węgiel!
+
+[TM3_A3]
+~r~Joey, Luigi i Toni usmażeni!
+
+[FM4_2]
+Posłuchaj, Salvatore podejrzewa, że kombinujemy coś za jego plecami,
+
+[FM4_3]
+dlatego postanowił sprzedać cię Kartelowi.
+
+[FM4_4]
+Nie mogę do tego dopuścić. Najgorsze w tym wszystkim jest to,
+
+[FM4_4B]
+że to moja wina... To ja mu powiedziałam, że między nami coś jest...
+
+[FM4_5]
+Nie pytaj mnie, po co. Sama nie wiem.
+
+[FM4_6]
+Posłuchaj, na terytorium mafii jesteś poszukiwany, ja też chciałabym się stąd wyrwać.
+
+[FM4_6B]
+Widziałam już za dużo śmierci, zbyt wiele krwi!
+
+[FM4_7]
+Mam starą dobrą przyjaciółkę... Nazywa się Asuka. Możemy jej zaufać.
+
+[FM4_8]
+Dobra, wystarczy już tych przemówień.
+
+[FM4_9]
+Zbierajmy się stąd, zanim pojawią się tu całe wycieczki rozhisteryzowanych Włochów, którzy będą chcieli rozstrzygać z nami rodzinne zatargi.
+
+[CRED001]
+ROCKSTAR STUDIOS
+
+[CRED002]
+PRODUCENT
+
+[CRED003]
+LESLIE BENZIES
+
+[CRED004]
+KIEROWNIK ARTYSTYCZNY
+
+[CRED005]
+AARON GARBUT
+
+[CRED006]
+KIEROWNIK TECHNICZNY
+
+[CRED007]
+OBBE VERMEIJ
+
+[CRED008]
+ADAM FOWLER
+
+[CRED009]
+PROJEKT
+
+[CRED010]
+CRAIG FILSHIE
+
+[CRED011]
+WILLIAM MILLS
+
+[CRED012]
+CHRIS ROTHWELL
+
+[CRED013]
+JAMES WORRALL
+
+[CRED014]
+SCENARIUSZ
+
+[CRED015]
+JAMES WORRALL
+
+[CRED016]
+PAUL KUROWSKI
+
+[CRED017]
+DAN HOUSER
+
+[CRED018]
+POSTACI
+
+[CRED019]
+IAN MCQUE
+
+[CRED020]
+ANIMACJA & REŻYSERIA
+
+[CRED021]
+ALEX HORTON
+
+[CRED022]
+LEE MONTGOMERY
+
+[CRED023]
+PROJEKTY POJAZDÓW
+
+[CRED024]
+PAUL KUROWSKI
+
+[CRED025]
+GRAFICY
+
+[CRED026]
+KEIRAN BAILLIE
+
+[CRED027]
+ADAM COCHRANE
+
+[CRED028]
+GARY MCADAM
+
+[CRED029]
+MICHAEL PIRSO
+
+[CRED030]
+ANDREW SOOSAY
+
+[CRED031]
+ALISDAIR WOOD
+
+[CRED032]
+KODERZY
+
+[CRED033]
+ALAN CAMPBELL
+
+[CRED034]
+MARK HANLON
+
+[CRED035]
+ANDRZEJ MADAJCZYK
+
+[CRED036]
+ALEXANDER ROGER
+
+[CRED037]
+GRAEME WILLIAMSON
+
+[CRED038]
+MUZYKA
+
+[CRED039]
+CRAIG CONNER
+
+[CRED040]
+STUART ROSS
+
+[CRED041]
+KONCEPCJA I MASTERING DŹWIĘKU
+
+[CRED042]
+ALLAN WALKER
+
+[CRED043]
+PROGRAMOWANIE AUDIO
+
+[CRED044]
+RAYMOND USHER
+
+[CRED045]
+KIEROWNIK TESTÓW
+
+[CRED046]
+CRAIG ARBUTHNOTT
+
+[CRED047]
+GŁÓWNI TESTERZY
+
+[CRED048]
+ANDY DUTHIE
+
+[CRED049]
+JOHN HAIME
+
+[CRED050]
+NEIL CORBETT
+
+[CRD050A]
+TESTERZY
+
+[CRED051]
+GRAEME JENNINGS
+
+[CRED052]
+DAVID MURDOCH
+
+[CRED053]
+DAVID BEDDOES
+
+[CRED054]
+EDWIN SMITH
+
+[CRED055]
+MARK FLETT
+
+[CRED056]
+MICHAEL SUTHERLAND
+
+[CRED057]
+POMOC TECHNICZNA
+
+[CRED058]
+LORRAINE ROY
+
+[CRED059]
+CHRISTINE CHALMERS
+
+[CRED060]
+ROCKSTAR
+
+[CRED061]
+PRODUCENT WYKONAWCZY
+
+[CRED062]
+SAM HOUSER
+
+[CRED063]
+PRODUCENT
+
+[CRED064]
+DAN HOUSER
+
+[CRED065]
+DYREKTOR DS. ROZWOJU
+
+[CRED066]
+JAMIE KING
+
+[CRED067]
+PRODUCENT TECHNICZNY
+
+[CRED068]
+GARY J. FOREMAN
+
+[CRED069]
+PRODUCENT POMOCNICZY
+
+[CRED070]
+JEREMY POPE
+
+[CRED071]
+KOORDYNACJA MUZYCZNA
+
+[CRED072]
+TERRY DONOVAN
+
+[CRED073]
+ZESPÓŁ PRODUKCYJNY ROCKSTAR
+
+[CRED074]
+TERRY DONOVAN
+
+[CRED075]
+JENNIFER KOLBE
+
+[CRED076]
+JENEFER GROSS
+
+[CRED077]
+LAURA PATERSON
+
+[CRED078]
+JEFF CASTANEDA
+
+[CRED079]
+CHRIS CARRO
+
+[CRED080]
+ADAM TEDMAN
+
+[CRED081]
+JUNG KWAK
+
+[CRED082]
+BRIAN WOOD
+
+[CRED083]
+PAUL YEATES
+
+[CRED084]
+STANTON SARJEANT
+
+[CRED085]
+WICEPREZES DS. MARKETINGU
+
+[CRED086]
+TERRY DONOVAN
+
+[CRED087]
+KOORDYNACJA TECHNICZNA
+
+[CRED088]
+BRANDON ROSE
+
+[CRED089]
+KIEROWNIK DS. ZAPEWNIENIA JAKOŚCI
+
+[CRED090]
+JEFF ROSA
+
+[CRED091]
+GŁÓWNY ANALITYK
+
+[CRED092]
+ADAM DAVIDSON
+
+[CRED093]
+ANALITYK GRY
+
+[CRED094]
+RICHARD HUIE
+
+[CRED095]
+ZESPÓŁ TESTUJĄCY
+
+[CRED096]
+LANCE WILLIAMS
+
+[CRED097]
+JOE GREENE
+
+[CRED098]
+BRIAN PLANER
+
+[CRED099]
+OSWALD GREENE
+
+[CRED100]
+REDAKCJA 'LIBERTY TREE'
+
+[CRED101]
+JAMES WORRALL
+
+[CRED102]
+DAN HOUSER
+
+[CRED103]
+ADAM TEDMAN
+
+[CRED104]
+PAUL YEATES
+
+[CRED105]
+JENEFER GROSS
+
+[CRED106]
+LAURA PATERSON
+
+[CRED107]
+SEKWENCJE FILMOWE
+
+[CRED108]
+SCENARIUSZ: DAN HOUSER I JAMES WORALL
+
+[CRED109]
+REŻYSERIA DŹWIĘKU: DAN HOUSER
+
+[CRED110]
+PRODUKCJA DŹWIĘKU: RENAUD SEBBANE
+
+[CRED111]
+OBSADA
+
+[CRED112]
+FRANK VINCENT JAKO SALVATORE LEONE
+
+[CRED113]
+JOE PANTOLIANO JAKO LUIGI GOTERELLI
+
+[CRED114]
+MICHAEL MADSEN JAKO TONI CIPRIANI
+
+[CRED115]
+MICHAEL RAPAPORT JAKO JOEY LEONE
+
+[CRED116]
+DEBBI MAZAR JAKO MARIA
+
+[CRED117]
+KYLE MACLACHLAN JAKO DONALD LOVE
+
+[CRED118]
+ROBERT LOGGIA JAKO RAY MACHOWSKI
+
+[CRED119]
+GURU JAKO 8-BALL
+
+[CRED120]
+SONDRA JAMES JAKO MAMUŚKA
+
+[CRED121]
+LIANA PAI JAKO ASUKA
+
+[CRED122]
+LES MAU JAKO KENJI
+
+[CRED123]
+CYNTHIA FARRELL JAKO CATALINA
+
+[CRED124]
+AL. ESPINOSA JAKO MIGUEL
+
+[CRED125]
+CHRIS PHILLIPS JAKO EL BURRO
+
+[CRED126]
+HUNTER PLATIN JAKO CHICO
+
+[CRED127]
+WALTER MUDU JAKO D-ICE
+
+[CRED128]
+CURTIS MCCLARIN JAKO CURTLY
+
+[CRED129]
+BILL FIORE JAKO DARKEL
+
+[CRED130]
+CHRIS PHILLIPS JAKO MARTY CHONKS
+
+[CRED131]
+HUNTER PLATIN JAKO KUDŁATY BOB
+
+[CRED132]
+WALTER MUDU JAKO KING COURTNEY
+
+[CRED133]
+HUNTER PLATIN JAKO JEDNORĘKI PHIL
+
+[CRED134]
+KIM GURNEY JAKO MISTY
+
+[CRED135]
+MOTION CAPTURE
+
+[CRED136]
+ANIMACJA
+
+[CRD136A]
+ALEX HORTON
+
+[CRED137]
+REŻYSERIA
+
+[CRD137A]
+NAVID KHONSARI
+
+[CRED138]
+PRODUKCJA
+
+[CRD138A]
+JAMIE KING
+
+[CRD138B]
+RENAUD SEBBANE
+
+[CRED139]
+NAGRANIA PRZEPROWADZONO W MODERN UPRISINGS STUDIOS, BROOKLYN
+
+[CRED140]
+AKTORZY
+
+[CRD140A]
+MARTINEZ
+
+[CRD140B]
+GISELLE JONES
+
+[CRD140C]
+STEPHEN DANIELS
+
+[CRD140D]
+ROBERT STIO
+
+[CRD140E]
+JENNY GROSS.
+
+[CRED141]
+DIALOGI PRZECHODNIÓW
+
+[CRED142]
+TEKST: DAN HOUSER, NAVID KHONSARI I JAMES WORALL
+
+[CRED143]
+REŻYSERIA: CRAIG CONNER, DAN HOUSER I LAZLOW
+
+[CRED144]
+PRODUKCJA: RENAUD SEBBANE
+
+[CRED145]
+OBSADA
+
+[CRED146]
+HUNTER PLATIN
+
+[CRED147]
+DAN HOUSER
+
+[CRED148]
+RENAUD SEBBANE
+
+[CRED149]
+MARIA CHAMBERS
+
+[CRED150]
+JEFF STANTON
+
+[CRED151]
+RYAN CROY
+
+[CRED152]
+DEENA BERMAN
+
+[CRED153]
+MARIA CHAMBERS
+
+[CRED154]
+ALICE B. SALTZMAN
+
+[CRED155]
+ALEX ANTHONY SIOUKAS
+
+[CRED156]
+SEAN R. LYNCH
+
+[CRED157]
+AMY SALZMAN
+
+[CRED158]
+COLIN MCSHANE
+
+[CRED159]
+COREY WADE
+
+[CRED160]
+GERALD COSGROVE
+
+[CRED161]
+STEPHANIE ROY
+
+[CRED162]
+DORIS WOO
+
+[CRED163]
+JOSEPH GREENE
+
+[CRED164]
+LAZLOW JONES
+
+[CRED165]
+HSIANG LIN
+
+[CRED166]
+STEVE MICHAEL ROBERT
+
+[CRED167]
+MATHEW MURRAY
+
+[CRED168]
+RICHARD HUIE
+
+[CRED169]
+GARVIN ATWELL
+
+[CRED170]
+STEVE KNEZEVICH
+
+[CRED171]
+YUKIMURA SATO
+
+[CRED172]
+FRANK CHAVEZ
+
+[CRED173]
+LIEZL JACINTO
+
+[CRED174]
+CANAAN MCKOY
+
+[CRED175]
+ADAM DAVIDSON
+
+[CRED176]
+LANCE WILLIAMS
+
+[CRED177]
+NEIL MCCAFFREY
+
+[CRED178]
+LAURA PATERSON
+
+[CRED179]
+REY CONCEPCION
+
+[CRED180]
+CHARLES HEROLD
+
+[CRED181]
+ANDREW GREENWALD
+
+[CRED182]
+JAMES MIELKE
+
+[CRED183]
+PETER SUCIU
+
+[CRED184]
+ALEX ODULIO
+
+[CRED185]
+DON NKRUMAH
+
+[CRED186]
+KENDALL PITTMAN
+
+[CRED187]
+SAL SUAZO
+
+[CRED188]
+EREK MATEO
+
+[CRED189]
+CHRIS DIFATE
+
+[CRED190]
+LEILA MILTON
+
+[CRED191]
+DARREN ZOLTOWSKI
+
+[CRED192]
+VIRGINIA SMITH
+
+[CRED193]
+KEVIN CASSIN
+
+[CRED194]
+JASON SHIGEMORI
+
+[CRED195]
+KELLY KINSELLA
+
+[CRED196]
+MOLLIE STICKNEY
+
+[CRED197]
+STANTON SARJEANT
+
+[CRED198]
+LAURA WALSH
+
+[CRED199]
+MARK GARONE
+
+[CRED200]
+JOANNA SLY
+
+[CRED201]
+ELIZABETH HOWELL
+
+[CRED202]
+ANA HERCULES
+
+[CRED203]
+SHIRLEY IRICK
+
+[CRED204]
+KASHONA FIELDS
+
+[CRED205]
+JOEL M. LILJE
+
+[CRED206]
+JOHN DIBENEDETTO
+
+[CRED207]
+NANCY GILES
+
+[CRED208]
+RYAN CROY
+
+[CRED209]
+JENNIFER KOLBE
+
+[CRED210]
+LIAM BURKE
+
+[CRED211]
+SIGRID PREISSL
+
+[CRED212]
+ANITA FITZSIMONS
+
+[CRED213]
+PHILIPPA RASELLI
+
+[CRED214]
+WIL QUESNEL
+
+[CRED215]
+FALKO BURKERT
+
+[CRED216]
+SARA SEWELL
+
+[CRED217]
+STACJE RADIOWE ORAZ MUZYKA
+
+[CRED218]
+PRODUKCJA DLA ROCKSTAR UK
+
+[CRD218A]
+CRAIG CONNER
+
+[CRD218B]
+STUART ROSS
+
+[CRED219]
+KOORDYNATOR ŚCIEŻKI DŹWIĘKOWEJ
+
+[CRED220]
+TERRY DONOVAN
+
+[CRED221]
+PRODUKCJA DLA ROCKSTAR GAMES
+
+[CRED222]
+DAN HOUSER
+
+[CRED223]
+REDAKCJA
+
+[CRED224]
+CRAIG CONNER
+
+[CRED225]
+ALLAN WALKER
+
+[CRED226]
+LAZLOW
+
+[CRED227]
+TEKSTY I WIZERUNKI PREZENTERÓW:
+
+[CRED228]
+DAN HOUSER
+
+[CRED229]
+LAZLOW
+
+[CRED230]
+SPECJALNE PODZIĘKOWANIA DLA:
+
+[CRED231]
+ADAM TEDMAN
+
+[CRED232]
+ALEX MASON
+
+[CRED233]
+JUDY HENDERSON CASTING
+
+[CRED234]
+HAMISH BROWN
+
+[CRED235]
+CHRISSY HOBAN
+
+[CRED236]
+INNES RICARD
+
+[CRED237]
+LILION BROZSKA
+
+[CRED238]
+BOB HILLARY
+
+[CRED239]
+EMILY ANDERSON
+
+[CRED240]
+RICHIE HENDERSON
+
+[CRED241]
+CHRSTIAN CANTAMESSA
+
+[CRED242]
+JERONIMO BARRERA
+
+[CRED243]
+ALEXANDER ILLES
+
+[CRED244]
+BARANE CHAN
+
+[CRED245]
+DUNCAN SHIELDS
+
+[CRED246]
+BARANE CHAN
+
+[CRED247]
+DEREK PAYNE
+
+[CRED248]
+KEVIN WONG
+
+[CRED249]
+ROSS ELLIOTT
+
+[CRED250]
+ROSS BEAZLEY
+
+[CRED251]
+ALEX BAZLINTON
+
+[CRED252]
+DAVE WATSON
+
+[CRED253]
+MALCOLM SMITH
+
+[CRED255]
+ANDREW SEMPLE
+
+[CRED256]
+ARTYŚCI
+
+[CRED257]
+STUART PETRI
+
+[CRED258]
+JERONIMO BARRERA
+
+[CRED259]
+CARLY SLATER
+
+[CRED260]
+GREG LAU
+
+[CRED261]
+STEVE KNEZEVICH
+
+[CRED262]
+DEVIN WINTERBOTTOM
+
+[CRED263]
+JAMEEL VEGA
+
+[CRED264]
+LEE CUMMINGS
+
+[CRED265]
+DEVIN BENNET
+
+[CRED266]
+ELIZABETH SATTERWHITE
+
+[CRED267]
+AARON RIGBY
+
+[CRED268]
+STEVE K.
+
+[CRED269]
+GREG LAU
+
+[CRED270]
+MIKE HONG
+
+[CINCAM]
+Kamera Filmowa
+
+[KM1_13]
+Wprowadź samochód do garażu!
+
+[KM3_14]
+~r~Zostałeś zauważony, układ odwołany!
+
+[EBAL_H]
+Poczekaj tutaj, brachu, a ja pójdę do środka i pogadam z Luigim.
+
+[EBAL_M]
+Tylko pamiętaj - nic nie kombinuj z moimi dziewczynami!
+
+[LM2_F]
+Potem zabierz jego samochód i przemaluj go.
+
+[LM2_D]
+proszę bardzo.
+
+[LM1_9]
+Cześć, jestem Misty...
+
+[LM4_A]
+Jakaś gnida z gangu Diablo nasyła swoje brudne dziwki na moje terytorium.
+
+[FM2_B]
+Mamy kreta!
+
+[FM2_C]
+Żaden z niego alfons czy diler, więc pewnie dorabia na boku sprzedając informacje.
+
+[FM3_CC]
+~w~Bracie, wróć, kiedy będziesz miał pieniądze.
+
+[FEDS_AM]
+<> - ZMIANA MENU
+
+[LOVE5_5]
+~r~Nie udało cię się ochronić ciężarówki!
+
+[RM6_6]
+~r~Ray nie żyje!
+
+[RM6_7]
+~r~Ray spóźnił się na samolot.
+
+[RM6_8]
+~r~Zgubiłeś Raya, wracaj po niego.
+
+[FM1_10]
+~g~Zostawiłeś Marię - zawróć i ją zabierz.
+
+[LOVE4_9]
+~r~Samolot został zniszczony!
+
+[LOV4_10]
+~r~Jedyny ślad, który wskazywał, gdzie zniknęła paczka, został zniszczony!
+
+[KM2_D]
+Nie muszę chyba dodawać, że przekażę mu te samochody w darze, aby spłacić dług, który u niego zaciągnąłem.
+
+[KM4_B]
+Interes idzie na tyle dobrze, że dziś możemy odebrać należną nam opłatę za ochronę.
+
+[KM2_E]
+Zdobądź samochody z tej listy i dostarcz je do warsztatu za parkingiem w Newport.
+
+[FM3_8I]
+~w~Znajdź dobre stanowisko strzeleckie. Kiedy oddasz pierwszy strzał, ja zrobię to, co do mnie należy.
+
+[LOVE1_B]
+Doświadczenie uczy mnie, że ludzie tacy jak ty potrafią być niezwykle lojalni za odpowiednią cenę.
+
+[LOVE1_H]
+ale niektórzy ludzie robią się coraz bardziej chciwi.
+
+[LOVE1_C]
+Znam pewnego starszego pana, pochodzącego z krajów Orientu, który jest dla mnie niezwykle cenny.
+
+[LOVE1_I]
+Niestety został on porwany przez jakiś gang z Ameryki Południowej w okolicach Aspatrii.
+
+[MEA4_D]
+Zgodziłem się z nim spotkać...
+
+[MEA4_B4]
+Marty cię przysyła, co? W porząsiu, pokażę tej gliście, jak się robi interesy.
+
+[MEA4_B5]
+Carl, cześć! Ee, potrzebuję jeszcze trochę czasu, żeby zebrać dla ciebie pieniądze.
+
+[MEA1_B4]
+Ach, przysłał cię Chonks, prawda? Chodźmy odwiedzić naszego wspólnego przyjaciela.
+
+[HM5_6]
+Trzeba rozłupać parę łbów...
+
+[LOVE1_5]
+~g~Przestań się obijać, załatw samochód Kolumbijczyków i uratuj przyjaciela Love'a.
+
+[AS1_D]
+~w~Posłuzysz jako przynęta i ściągniesz szwadrony śmierci za sobą do Pike Creek,
+
+[AS1_E]
+~w~gdzie moi ludzie urzadzą im właściwe przyjęcie.
+
+[AS2_C]
+~w~Kartel działa pod przykrywką firmy Dom Kawy Kappa.
+
+[AS2_E]
+~w~Nie mamy wyjścia, trzeba wyłączyć z gry te punkty sprzedaży dragów.
+
+[AS2_F]
+~w~Rozwal je w drzazgi!!
+
+[AS2_A1]
+~w~Miguel to doskonały przykład słynnej latynoskiej odporności.
+
+[AS2_A2]
+~w~Ręce opadają mi ze zmęczenia.
+
+[SIREN_3]
+Aby włączyc syrenę pojazdu, naciśnij klawisz ~h~~k~~VEHICLE_HORN~ ~w~.
+
+[SIREN_4]
+Aby włączyc syrenę pojazdu, naciśnij klawisz ~h~~k~~VEHICLE_HORN~ ~w~.
+
+[AS3_C]
+~w~Eeej! Co to za lepkie żółte świństwo?
+
+[AS3_C1]
+~w~O, cześć, kochanie.
+
+[AS3_F]
+~w~Ta dziewczyna po prostu ma talent.
+
+[AS3_F1]
+~w~Udało jej się wydobyć z naszego gościa ten oto klejnocik.
+
+[AS3_G]
+~w~Za 2 godziny na Lotnisko Francisa przyleci pewien samolot.
+
+[AS3_G1]
+~w~Jest on wyładowany trucizną Cataliny.
+
+[AS3_H]
+~w~Możesz ominąć lotniskowe służby bezpieczeństwa, jeżeli popłyniesz łodzią
+
+[AS3_H1]
+do boi wyznaczających lądowisko i zestrzelisz lądujący samolot.
+
+[AS3_I]
+~w~Zabierz z wraku ładunek!
+
+[AS3_J]
+~w~Tylko bądź ostrożny, dobrze, kochanie?
+
+[AS3_K]
+~w~A teraz spróbujemy olejku chilli...
+
+[RM2_F1]
+Kolumbijczycy będą tutaj lada chwila!
+
+[RM2_K]
+Cholera, już tu są! OGNIA!
+
+[LOVE2_7]
+~g~Teraz pozbądź się samochodu!v
+
+[LOVE2_8]
+~g~Uciekaj z Newport!
+
+[AM1_F]
+Za około trzy godziny (~1~:~1~), Salvatore Leone będzie wychodził z klubu 'U Luigiego'.
+
+[LOVE5_C]
+Masz za nim jechać i pilnować, aby zarówno on, jak i mój pakunek dotarli do Pike Creek bez szwanku.
+
+[FESZ_SR]
+Zapisywanie zakończone niepowodzeniem! Sprawdź kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 i ponów próbę.
+
+[FESZ_FO]
+Czy chcesz sformatować kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1?
+
+[FELZ_FO]
+Karta pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 nie jest sformatowana.
+
+[FES_NOC]
+Brak karty pamięci (PS2) w gnieździe KART PAMIĘCI nr 1.
+
+[FES_LOE]
+Wczytywanie zakończone niepowodzeniem! Sprawdź kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 i ponów próbę.
+
+[FES_DEE]
+Kasowanie zakończone niepowodzeniem! Sprawdź kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 i ponów próbę.
+
+[SLONFM]
+Błąd podczas formatowania karty pamięci (PS2) w gnieździe KART PAMIĘCI nr 1.
+
+[SLONDR]
+Niewystarczająca ilość miejsca, aby zapisać stan gry. Proszę włożyć kartę pamięci (PS2) zawierającą co najmniej 500KB wolnego miejsca do gniazda KART PAMIĘCI nr 1.
+
+[SLNSP]
+Niewystarczająca ilość miejsca, aby zapisać stan gry. Proszę włożyć kartę pamięci (PS2) zawierającą co najmniej 200KB wolnego miejsca do gniazda KART PAMIĘCI nr 1.
+
+[FEFD_WR]
+Trwa formatowanie karty pamięci (PS2) w gnieździe KART PAMIĘCI nr 1. Proszę nie wyjmować karty pamięci (PS2), nie resetować ani nie wyłączać konsoli
+
+[FES_ISF]
+NIEOBECNY
+
+[FES_SAG]
+OBECNY
+
+[SLONNO]
+No Memory Card (PS2) in MEMORY CARD slot 1.
+
+[SLONNF]
+Brak karty pamięci (PS2) w gnieździe KART PAMIĘCI nr 1.
+
+[FESZ_FM]
+Karta pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 nie jest sformatowana. Czy chcesz sformatować kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1?
+
+[FESZ_FF]
+Formatowanie zakończone niepowodzeniem! Sprawdź kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 i ponów próbę.
+
+[MCDNSP]
+Na karcie pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 jest zbyt mało wolnego miejsca. Aby zapisać dane aplikacji wymagane jest co najmniej 500KB. Czy chcesz kontynuować? (TAK lub NIE)
+
+[MCGNSP]
+Na karcie pamięci (PS2) w gnieździe KART PAMIĘCI nr 1 jest zbyt mało wolnego miejsca. Aby zapisać dane aplikacji wymagane jest co najmniej 200KB. Czy chcesz kontynuować? (TAK lub NIE)
+
+[FESZ_WR]
+Trwa zapisywanie danych. Proszę nie wyjmować karty pamięci (PS2) z gniazda KART PAMIĘCI nr 1, nie resetować ani nie wyłączać konsoli.
+
+[FESZ_OW]
+Trwa nadpisywanie danych. Proszę nie wyjmować karty pamięci (PS2) z gniazda KART PAMIĘCI nr 1, nie resetować ani nie wyłączać konsoli.
+
+[FELD_WR]
+Trwa wczytywanie danych. Proszę nie wyjmować karty pamięci (PS2), nie resetować ani nie wyłączać konsoli.
+
+[FEDL_WR]
+Trwa usuwanie danych. Proszę nie wyjmować karty pamięci (PS2) z gniazda KART PAMIĘCI nr 1, nie resetować ani nie wyłączać konsoli.
+
+[LM2_C]
+Luigi kazał ci to przekazać, więc...
+
+[LM3_G]
+Joey nie lubi czekać. Pamiętaj, to może być twoja szansa na karierę...
+
+[LM5_E]
+Zawieź tam jak najwięcej dziewczyn, zanim gliniarze przepiją wszystkie pieniądze!
+
+[JM5_C]
+Jest taka kwestia: przy kawiarni w Callahan Point stoi samochód z truposzem w środku.
+
+[RM2_B]
+Powąchaliśmy razem prochu w Nikaragui, kiedy w tym kraju jeszcze rządzili ludzie, którzy wiedzieli, o co chodzi.
+
+[RM2_C]
+Wczoraj groziły mu jakieś mendy z Kartelu. Powiedzieli, że wrócą i zabiorą mu towar.
+
+[RM2_D1]
+Poszedłbym sam, ale moje korzonki znowu się odzywają - więc, ee... Powodzenia!
+
+[CATINF1]
+~g~Dorwij Catalinę!
+
+[CATINF2]
+~g~Śledź helikopter, aby odszukać Catalinę.
+
+[BOATIN1]
+Wskakuj do łodzi i wciśnij klawisz ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~, aby zająć miejsce.
+
+[BOATIN2]
+Jeżeli jesteś w pobliżu łodzi, możesz wcisnąć klawisz ~h~~k~~VEHICLE_ENTER_EXIT~~w~, aby zająć w niej miejsce.
+
+[BOATIN3]
+Wskakuj do łodzi i wciśnij klawisz ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~, aby zająć miejsce.
+
+[BOATIN4]
+Jeżeli jesteś w pobliżu łodzi, możesz wcisnąć klawisz ~h~~k~~VEHICLE_ENTER_EXIT~~w~, aby zająć w niej miejsce.
+
+[JM6]
+'UCIECZKA'
+
+[FM1]
+'NIAŃKA'
+
+[JM1]
+'OSTATNI OBIAD MIKE'A BUŹKI'
+
+[FM21]
+'CIOS W SERCE: AKT I'
+
+[FM3]
+'CIOS W SERCE: AKT II'
+
+[AM1]
+'SAYONARA SALVATORE'
+
+[AM2]
+'POD OBSERWACJĄ'
+
+[KM2]
+'GRAND THEFT AUTO'
+
+[AS3]
+'WYRZUTNIA ZIEMIA-POWIETRZE'
+
+[RM2]
+'TOWARZYSZE BRONI'
+
+[LOVE6]
+'ZMYŁKA'
+
+[LOVE1]
+'WYZWOLICIEL'
+
+[RC1]
+'DIABELSKA DEMOLKA'
+
+[RC2]
+'MAFIJNA MASAKRA'
+
+[RC3]
+'KRWAWE KASYNO'
+
+[RC4]
+'RUMPO-ROZRÓBA'
+
+[RM2_E1]
+Nie mogę uwierzyć, że te żółte pokraki znowu zostawiły mnie bez ochrony.
+
+[GREN_1]
+Im dłużej przytrzymasz klawisz ~h~~k~~PED_FIREWEAPON~~w~, tym dalej rzucisz granatem.
+
+[GREN_2]
+Im dłużej przytrzymasz klawisz ~h~~k~~PED_FIREWEAPON~~w~, tym dalej rzucisz granatem.
+
+[GREN_3]
+Im dłużej przytrzymasz klawisz ~h~~k~~PED_FIREWEAPON~~w~, tym dalej rzucisz granatem.
+
+[LOVE4_G]
+Rzecz, która do mnie należy, będzie czekać na ciebie w hangarze celnym przy kadłubie samolotu.
+
+[KABOOM]
+BUM!
+
+[SPLAT]
+PLASK!
+
+[PANCAK]
+UPIECZONY!
+
+[SOAKED]
+DO SUCHEJ NITKI!
+
+[HEAD]
+Head Radio
+
+[DBL_CLF]
+Double Clef FM
+
+[FLASHB]
+Flashback FM
+
+[RISE]
+Rise FM
+
+[LIPS]
+Lips 106
+
+[CHAT]
+Gaduła FM
+
+[K_JAH]
+Radio K-Jah
+
+[GAM_FM]
+Game Radio FM
+
+[MSX_FM]
+MSX FM
+
+[TUBE1]
+Kiedy metro zostanie otwarte, będziesz mógł przejechać pociągiem na Wyspę Staunton.
+
+[TUBE2]
+Kiedy Shoreside Vale zostanie otwarte, będziesz mógł dotrzeć do stacji końcowej Shoreside Terminal i na Lotnisko Międzynarodowe im. Francisa.
+
+[TUBE_2]
+Aby wsiąść do metra, naciśnij klawisz ~h~'wsiadania do pojazdu'~w~.
+
+[LEGAL]
+~g~Wyeliminuj element przestępczy!
+
+[GA_2]
+Nowy silnik i lakier. Masz spokój z gliniarzami!
+
+[LM1_8A]
+Jeżeli chcesz trochę sobie dorobić, możesz spróbować 'pożyczyć' taksówkę...
+
+[TAXIH1]
+Zatrzymaj się w pobliżu podświetlonego przechodnia i pozwól mu wsiąść, a potem zawieź go pod wskazany adres przed upływem wyznaczonego czasu.
+
+[LM5_7]
+~g~Jeżeli na ~p~Balu Policjanta~g~ pojawią się mniej niż cztery dziewczyny, Luigi będzie niezadowolony!
+
+[KM2_3]
+~g~Pamiętaj, ~r~samochody~g~ muszą być w idealnym stanie albo nie zostaną przyjęte w ~p~warsztacie~g~.
+
+[KM5_2]
+~g~Yardies zniknęli z ulic.
+
+[BETRA_A]
+Przykro mi, kotku.
+
+[BETRA_B]
+Jestem ambitną dziewczyną,
+
+[BETRA_C]
+a ty jesteś tylko małą płotką.
+
+[JAILB_C]
+*
+
+[JAILB_D]
+*
+
+[JAILB_E]
+*
+
+[JAILB_F]
+*
+
+[JAILB_G]
+*
+
+[JAILB_H]
+*
+
+[JAILB_I]
+*
+
+[JAILB_J]
+*
+
+[JAILB_P]
+*
+
+[JAILB_Q]
+Jazda!
+
+[JAILB_R]
+Panie frajerze!
+
+[JAILB_S]
+Zabiję cię bez najmniejszego problemu.
+
+[JAILB_T]
+Pożałujesz tego.
+
+[JAILB_U]
+Dobrze, dobrze! Znikaj stąd.
+
+[HELP15]
+Jeżeli jesteś poza pojazdem i chcesz ~h~spojrzeć za siebie~w~, naciśnij klawisz ~h~~k~~PED_LOOKBEHIND~~w~.
+
+[FEC_LB3]
+Spójrz do tyłu
+
+[FEC_R3]
+(klawisz R3)
+
+[FES_AFO]
+Ta karta pamięci (PS2) jest już sformatowana.
+
+[FEA_UP]
+;
+
+[FEA_DO]
+=
+
+[FEA_LE]
+<
+
+[FEA_RI]
+>
+
+[FEDSAS3]
+- ZMIANA WYBORU
+
+[FEDSAS4]
+;=<> - ZMIANA WYBORU
+
+[SPRAY_4] { re3 change }
+Użyj klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby strzelać z armatki wodnej.
+
+[SPRAY_1] { re3 change }
+Użyj klawisza ~h~~k~~VEHICLE_FIREWEAPON~~w~, aby strzelać z armatki wodnej.
+
+[LITTLE]
+MAŁY T
+
+[NICK]
+NICK LOVE
+
+[AM1_10]
+~g~Salvatore opuści knajpę 'U Luigiego' około 0~1~:~1~
+
+[JAILB_V]
+*
+
+[JAILB_A]
+*
+
+[JAILB_B]
+*
+
+[JAILB_W]
+*
+
+[JAILB_K]
+*
+
+[JAILB_L]
+*
+
+[JAILB_M]
+*
+
+[JAILB_N]
+*
+
+[JAILB_O]
+*
+
+[JAILB_X]
+*
+
+[FEDS_SE]
+klawisz / - WYBIERZ
+
+[FEDS_SB]
+klawisz / - WYBIERZ klawisz ' - WSTECZ
+
+[TM4_A]
+~w~Ach, to ty. TONIEGO nie ma.
+
+[TM4_A2]
+~w~Ale zostawił na stole jeden ze swoich słodziutkich listów miłosnych do ciebie.
+
+[DIAB2_A]
+Kiedy zaczynałem robić interesy w branży rozrywek egzotycznych, nie miałem nic oprócz pokaźnej zawartości mojego rozporka!
+
+[LM5_9]
+DZIEWCZYNY:
+
+[PERPIC]
+Znalezione ukryte paczki
+
+[CO_ONE]
+Ukryta Paczka ~1~ z ~1~
+
+[LOVE3_3]
+~g~Samolot zrzucił ~1~ z 6 pakunków.
+
+[FARE11]
+~g~Cel podróży ~w~'Teren budowy'~g~ w Fort Staunton.
+
+[GA_21]
+W tym garażu nie możesz przechowywać więcej samochodów.
+
+[CHEAT1]
+Ułatwienie uaktywnione
+
+[CHEAT2]
+Ułatwienie - broń
+
+[CHEAT3]
+Ułatwienie - życie
+
+[CHEAT4]
+Ułatwienie - pancerz
+
+[CHEAT5]
+Ułatwienie - poziom wanted
+
+[CHEAT6]
+Ułatwienie - pieniądze
+
+[CHEAT7]
+Ułatwienie - pogoda
+
+[AS1_H]
+~w~Nie udało ci się wprowadzić Szwadronu Śmierci w pułapkę Yakuzy!!
+
+[FEDS_BA]
+klawisz ' - WSTECZ
+
+[RAMP_A]
+WSZYSTKIE ROZWAŁKI ZALICZONE!
+
+[USJ_ALL]
+WSZYSTKIE NIETYPOWE SKOKI WYKONANE!
+
+[FARE23]
+~g~Cel podróży ~w~'warsztat importowo-eksportowy'~g~ w okolicach Tamy Cochrane.
+
+[L_TRN_1]
+Po Portland możesz się też poruszać kolejką. Naciśnij klawisz ~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, aby ~h~wsiąść ~w~lub ~h~wysiąść~w~ z pociągu.
+
+[L_TRN_2]
+Po Portland możesz się też poruszać kolejką. Naciśnij klawisz ~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, aby ~h~wsiąść ~w~lub ~h~wysiąść~w~ z pociągu.
+
+[S_TRN_1]
+Przez Liberty możesz także podróżować metrem. Naciśnij klawisz~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, aby ~h~wsiąść ~w~lub ~h~wysiąść~w~ z pociągu.
+
+[S_TRN_2]
+Przez Liberty możesz także podróżować metrem. Naciśnij klawisz~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, aby ~h~wsiąść ~w~lub ~h~wysiąść~w~ z pociągu.
+
+[AS1_C]
+~w~Rozmieściła w całym Liberty trzy szwadrony śmierci, których zadaniem jest wytropić twój tyłek.
+
+[AS1_G]
+~w~Wszyscy członkowie Yakuzy nie żyją!!
+
+[JAN]
+stycz.
+
+[FEB]
+luty
+
+[MAR]
+marzec
+
+[APR]
+kwiec.
+
+[MAY]
+maj
+
+[JUN]
+czerw.
+
+[JUL]
+lip.
+
+[AUG]
+sierp.
+
+[SEP]
+wrz.
+
+[OCT]
+paźdz.
+
+[NOV]
+listop.
+
+[DEC]
+grudz.
+
+[DEFDT]
+--:---:---- --:--:--
+
+[BUGGY]
+POZOSTAŁE GARBUSKI:
+
+[BONUS]
+~g~PREMIA $~1~v
+
+[HORN1]
+Naciśnij ~h~klawisz L3 ~w~, aby użyć ~h~klaksonu.
+
+[HORN2]
+Naciśnij ~h~klawisz L1 ~w~, aby użyć ~h~klaksonu.
+
+[HORN3]
+Naciśnij ~h~klawisz R1 ~w~, aby użyć ~h~klaksonu.
+
+[LM3_1A]
+Naciśnij klawisz~h~ ~k~~VEHICLE_HORN~~w~, aby użyć ~h~klaksonu~w~ i zaprosić Misty do środka.
+
+[LM3_1B]
+Naciśnij klawisz~h~ ~k~~VEHICLE_HORN~~w~, aby użyć ~h~klaksonu~w~ i zaprosić Misty do środka.
+
+[LM3_1C]
+Naciśnij klawisz~h~ ~k~~VEHICLE_HORN~~w~, aby użyć ~h~klaksonu~w~ i zaprosić Misty do środka.
+
+[RADIO_A]
+Naciśnij klawisz ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~~w~, aby przełączać ~h~stacje radiowe.
+
+[RADIO_B]
+Naciśnij klawisz ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~~w~, aby przełączać ~h~stacje radiowe.
+
+[RADIO_C]
+Naciśnij klawisz ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~~w~, aby przełączać ~h~stacje radiowe.v
+
+[RADIO_D]
+Naciśnij klawisz ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~~w~, aby przełączać ~h~stacje radiowe.
+
+[FEC_EXV]
+Wsiadanie i wysiadanie z pojazdu
+
+[TAXI_M]
+'TAKSÓWKARZ'
+
+[COP_M]
+'PATROL'
+
+[FIRE_M]
+'STRAŻAK'
+
+[AMBUL_M]
+'SANITARIUSZ'
+
+[HJ_IS]
+PREMIA ZA SZALONY SKOK: $~1~
+
+[HJ_PIS]
+PREMIA ZA BEZBŁĘDNY SZALONY SKOK: $~1~
+
+[HJ_DIS]
+PREMIA ZA PODWÓJNY SZALONY SKOK: $~1~
+
+[HJ_PDIS]
+PREMIA ZA BEZBŁĘDNY PODWÓJNY SZALONY SKOK: $~1~
+
+[HJ_TIS]
+PREMIA ZA POTRÓJNY SZALONY SKOK: $~1~
+
+[HJ_PTIS]
+PREMIA ZA BEZBŁĘDNY POTRÓJNY SZALONY SKOK: $~1~
+
+[HJ_QIS]
+PREMIA ZA POCZWÓRNY SZALONY SKOK: $~1~
+
+[HJ_PQIS]
+PREMIA ZA BEZBŁĘDNY POCZWÓRNY SZALONY SKOK: $~1~
+
+[AM1_K]
+Za około trzy godziny (0~1~:~1~), Salvatore Leone będzie wychodził z klubu 'U Luigiego'.
+
+[IMPEXPP]
+Warsztat import-eksport w Portland Harbor. Mamy zamówienia na różne pojazdy. Listę aktualnie skupowanych wozów znajdziesz na naszej tablicy ogłoszeniowej.
+
+[VANHSTP]
+Chcesz rozbić konwojowóz? Przywieź go do naszego warsztatu w Portland Harbor!
+
+[EMVHPUP]
+Doskonałe ceny za nowe i używane pojazdy służb miejskich! Skup odbywa się przy dźwigu na północny wschód od Portland Harbor.
+
+[STANDS]
+ROZBITE BUDKI:
+
+[STASH]
+~g~Odwieź PROCHY z powrotem na ~p~teren budowy!
+
+[MCSTNS]
+W gnieździe KART PAMIĘCI nr 1 nie ma karty pamięci (PS2). Czy chcesz kontynuować? (TAK lub NIE)
+
+[LOVE3_5]
+~g~Samolot jest w zasięgu.
+
+[LOVE3_6]
+~r~Policja dotarła do pakunków przed tobą!
+
+[SIREN_1]
+Aby włączyc syrenę pojazdu, naciśnij klawisz ~h~~k~~VEHICLE_HORN~ ~w~.
+
+[SIREN_2]
+Aby włączyc syrenę pojazdu, naciśnij klawisz ~h~~k~~VEHICLE_HORN~ ~w~.
+
+[FM3_8C]
+~w~Potrzebuję jakieś 100 000 dolarów na niezbędne wydatki,
+
+[MCLOAD]
+Trwa wczytywanie danych. Proszę nie wyjmować karty pamięci (PS2) z gniazda KART PAMIĘCI nr 1, nie resetować ani nie wyłączać konsoli.
+
+[FES_GME]
+Błąd odczytu danych z karty pamięci (PS2) w gnieździe KART PAMIĘCI nr 1. Sprawdź kartę i ponów próbę.
+
+[FESZ_QF]
+Czy na pewno chcesz sformatować kartę pamięci (PS2) w gnieździe KART PAMIĘCI nr 1?
+
+[FESZ_LS]
+Pomyślne wczytywanie
+
+[RM3_5]
+~g~Masz już ~1~ z 6 pakietów dowodów.
+
+[LOVE3_2]
+~g~Masz już wszystkie pakunki! Zawieź je do Donalda Love'a.
+
+[LOVE4_4]
+~g~Zabierz pakunek do Donalda Love'a!
+
+[FEB_SAV]
+Wczytanie
+
+[FEP_SAV]
+WCZYTAJ GRĘ
+
+[AS2_12A]
+~g~Od momentu rozwalenia pierwszej budki będziesz miał 8 minut, zanim Kartel ostrzeże swoich dilerów!
+
+[AS3_1A]
+~g~Teraz płyń do ~b~boi !
+
+[NOCONT]
+Aby kontynuować, proszę ponownie podłączyć kontroler analogowy (DUALSHOCK@) lub kontroler analogowy (DUALSHOCK@2) do portu kontrolerów gry nr 1.
+
+[BET_JB]
+CATALINA, JEGO KOCHANKA, ZDRADZIŁA GO I POZOSTAWIŁA NA PEWNĄ ŚMIERĆ. TERAZ, OSĄDZONY I SKAZANY, ROZPOCZYNA PODRÓŻ DO ZAKŁADU KARNEGO W LIBERTY CITY. ALE W JEGO ZBRODNICZYM UMYŚLE PŁONIE TYLKO JEDNA MYŚL......ZEMSTA!
+
+[END_A]
+Mieszkańcy Cedar Grove nadal dochodzą do siebie
+
+[END_B]
+po gwałtownych wydarzeniach, jakie rozegrały się wczoraj
+
+[END_C]
+w tej dzielnicy, a przypominały regularną wojnę.
+
+[END_D]
+Pan Clive Denver, mieszkający w tej okolicy od lat, opisał wczoraj policji
+
+[END_E]
+samotnego strzelca, który uciekał z miejsca przestępstwa z ciemnowłosą kobietą.
+
+[END_F]
+Och, będziemy się razem świetnie bawić! Bo... no, wiesz...
+
+[END_G]
+Ja cię kocham, naprawdę... Bo jesteś taki silny i w ogóle...
+
+[END_H]
+A właśnie kogoś takiego szukałam.
+
+[END_I]
+Ale... o czym to ja mówiłam?
+
+[END_J]
+Wyleciało mi z głowy! Ale wiesz, o co mi chodzi, prawda?
+
+[END_K]
+Odgłosy eksplozji wstrząsały okolicznymi budynkami, z których wybiegali przerażeni ludzie.
+
+[END_L]
+Kilkunastu obywateli doznało obrażań w wyniku wymiany ognia
+
+[END_M]
+między bandytami na ziemi a helikopterem krążącym nad tamą.
+
+[END_N]
+Tak, tutaj - z ogrodu - miałem na wszystko doskonały widok.
+
+[END_O]
+Kiedy helikopter w końcu został trafiony,
+
+[END_P]
+wyglądało to lepiej niż fajerwerki na Wielkanoc!
+
+[END_Q]
+Liczba zabitych przekroczyła już dwadzieścia osób,
+
+[END_R]
+ale policja ciągle odnajduje nowe ciała.
+
+[END_S]
+Jak dotąd nie wydano żadnego oficjalnego komunikatu, który zaprzeczyłby pogłoskom,
+
+[END_T]
+że ofiary to członkowie Kartelu Kolumbijskiego.
+
+[END_U]
+Nadal nie ma też żadnych informacji na temat przyczyn tej masakry.
+
+[END_V]
+Złamałam paznokieć i zrujnowałam sobie całą fryzurę. To skandal!
+
+[END_W]
+Kosztowała mnie pięćdziesiąt dolców...
+
+[PAPER1]
+*
+
+[PAPER2]
+*
+
+[PAPER3]
+*
+
+[FEB_CPC]
+Konfiguracja klawiszy sterujących
+
+[FEC_PED]
+Sterowanie postacią poza pojazdem
+
+[FEC_VEH]
+Klawisze sterujące pojazdem
+
+[FEC_FPR]
+Sterowanie dla trybu widoku z oczu postaci
+
+[FEC_CMM]
+Standardowe sterowanie
+
+[FEC_PWL]
+IDŹ w lewo
+
+[FEC_PWR]
+Idź w prawo
+
+[FEC_PWF]
+Idź do przodu
+
+[FEC_PWT]
+Idź w stronę kamery
+
+[FEC_PLB]
+Spójrz za siebie
+
+[FEC_PFR]
+Strzał z broni
+
+[FEC_CLE]
+Przełącz rodzaj broni w lewo
+
+[FEC_CRI]
+Przełącz rodzaj broni w prawo
+
+[FEC_LKT]
+Zablokuj cel
+
+[FEC_PJP]
+Skok
+
+[FEC_PSP]
+Szybki bieg
+
+[FEC_PSH]
+Strzał
+
+[FEC_TLF]
+Następny cel w lewo
+
+[FEC_TRG]
+Następny cel w prawo
+
+[FEC_CCM]
+Wyśrodkuj kamerę za graczem
+
+[FEC_SZI]
+Karabin snajperski - przybliżenie
+
+[FEC_SZO]
+Karabin snajperski - oddalenie
+
+[FEC_LKL]
+Spójrz w lewo w trybie widoku z oczu postaci
+
+[FEC_LRT]
+Spójrz w prawo w trybie widoku z oczu postaci
+
+[FEC_LUP]
+Spójrz w górę w trybie widoku z oczu postaci
+
+[FEC_LDN]
+Spójrz w dół w trybie widoku z oczu postaci
+
+[FEC_LBH]
+Spójrz przez tylną szybę
+
+[FEC_LLF]
+Spójrz przez lewą szybę
+
+[FEC_LRG]
+Spójrz przez prawą szybę
+
+[FEC_HRN]
+Klakson
+
+[FEC_HBR]
+Hamulec ręczny pojazdu
+
+[FEC_ACL]
+Przyspieszenie pojazdu
+
+[FEC_BRK]
+Hamulec pojazdu
+
+[FEC_TSM]
+Włącz podmisje
+
+[FEC_CRD]
+Zmiana stacji radiowej
+
+[FEC_ENT]
+Wsiadanie do pojazdu/wysiadanie z pojazdu
+
+[FEC_WPN]
+Strzał z broni
+
+[FEC_PAS]
+Pauza
+
+[FEC_FPO]
+Broń w trybie widoku z oczu postaci
+
+[FEC_SMS]
+Pokazuj kursor myszy
+
+[FEC_CMS]
+Zmiana trybu kamery dla wszystkich sytuacji.
+
+[FEC_TSS]
+Zapisz wygląd ekranu
+
+[FEN_NET]
+Sieć
+
+[FEN_CON]
+Połączenie
+
+[FEN_GAM]
+Szukaj sesji gry
+
+[FEN_TYP]
+Rodzaj gry
+
+[FEN_TY0]
+Tryb Deathmatch
+
+[FEN_TY1]
+Tryb Niewidzialny Deathmatch
+
+[FEN_TY2]
+Zespołowy tryb Deathmatch
+
+[FEN_TY3]
+Zespołowy tryb Niewidzialny Deathmatch
+
+[FEN_TY4]
+Gromadź szmal
+
+[FEN_TY5]
+Zdobądź flagę
+
+[FEN_TY6]
+Wyścig szczurów
+
+[FEN_TY7]
+Dominacja
+
+[FEN_NAM]
+Nazwa:
+
+[FEN_GNA]
+Nazwa gry:
+
+[FEM_MAP]
+Wybierz mapę
+
+[FEN_PLS]
+Ustawienia gracza
+
+[FEN_PLC]
+Kolor gracza
+
+[FEM_MA0]
+Liberty City
+
+[FEM_MA1]
+Dz. Czerwonych Świateł
+
+[FEM_MA2]
+Chinatown
+
+[FEM_MA3]
+Wieża
+
+[FEM_MA4]
+Kanały
+
+[FEM_MA5]
+Park Przemysłowy
+
+[FEM_MA6]
+Doki
+
+[FEM_MA7]
+Staunton
+
+[FEC_EMS]
+Tylko klawisze z klawiatur niestandardowych
+
+[FEC_DBG]
+MENU DEBUGOWANIA
+
+[FEC_TGD]
+Przełącznik gra/debugowanie
+
+[FEC_TDO]
+Wyłącz kamerę trybu debugowania
+
+[FEC_IVH]
+Odwróć osie myszy w poziomie:
+
+[FEC_MSL]
+Lewy przycisk myszy
+
+[FEC_MSM]
+Śr. przycisk myszy
+
+[FEC_MSR]
+Prawy przycisk myszy
+
+[FEC_QUE]
+???
+
+[FEC_TWO]
+Dozwolone są tylko dwa klawisze z klawiatury
+
+[FEC_UMS]
+Tylko przyciski myszy niestandardowych
+
+[FEC_OMS]
+Dozwolony jest tylko jeden przycisk myszy
+
+[FEC_UJS]
+Tylko przyciski joysticków niestandardowych
+
+[FEC_OJS]
+Dozwolony jest tylko jeden przycisk joysticka na daną czynność .
+
+[FEC_PTL]
+Użyj blokowania celu oraz przełączenia broni w lewo
+
+[FEC_PTR]
+Użyj blokowania celu oraz przełączenia broni w prawo
+
+[FEC_LBC]
+Użyj klawiszy 'spójrz w lewo' oraz 'spójrz w prawo'
+
+[FEC_JBO]
+JOY ~1~
+
+[NO_PAUZ]
+Nie można zatrzymać gry w trybie wieloosobowym. Dwukrotnie naciśnij klawisz, aby wyjść z gry!
+
+[FEM_SL1]
+Gniazdo 1 jest wolne
+
+[FEM_SL2]
+Gniazdo 2 jest wolne
+
+[FEM_SL3]
+Gniazdo 3 jest wolne
+
+[FEM_SL4]
+Gniazdo 4 jest wolne
+
+[FEM_SL5]
+Gniazdo 5 jest wolne
+
+[FEM_SL6]
+Gniazdo 6 jest wolne
+
+[FEM_SL7]
+Gniazdo 7 jest wolne
+
+[FEM_SL8]
+Gniazdo 8 jest wolne
+
+[FEM_MM]
+MENU GŁÓWNE
+
+[FEQ_SRE]
+Czy na pewno chcesz wyjść z gry? Efekty wszystkich działań podjętych od czasu ostatniego zapisu gry zostaną utracone. Kontynuować?
+
+[FEQ_SRW]
+Czy na pewno chcesz wyjść z gry?
+
+[FEG_SRV]
+SERWER
+
+[FEG_MAP]
+MAPA
+
+[FEG_PLY]
+GRACZE
+
+[FEG_TYP]
+RODZAJ
+
+[FEG_PNG]
+PING
+
+[FET_FG]
+ODSZUKAJ SESJĘ GRY
+
+[FET_SP]
+TRYB DLA JEDNEGO GRACZA
+
+[FET_MP]
+TRYB WIELOOSOBOWY
+
+[FET_HG]
+HOSTUJ GRĘ
+
+[FET_PS]
+KONFIGURACJA GRACZA
+
+[FET_CON]
+POŁĄCZENIE
+
+[FET_AUD]
+KONFIGURACJA DŻWIĘKU
+
+[FET_DIS]
+KONFIGURACJA EKRANU
+
+[FET_LAN]
+OKREŚL JĘZYK
+
+[FET_LG]
+WCZYTAJ GRĘ
+
+[FET_DG]
+USUŃ GRĘ
+
+[FET_NG]
+NOWA GRA
+
+[FET_SG]
+ZAPISZ GRĘ
+
+[FET_MAP]
+WYBIERZ MAPĘ
+
+[FET_GT]
+RODZAJ GRY
+
+[FET_CTL]
+KONFIGURACJA STEROWANIA
+
+[FET_OPT]
+OPCJE
+
+[FET_QG]
+WYJDŹ Z GRY
+
+[FET_STA]
+STATYSTYKI
+
+[FET_BRE]
+CELE
+
+[FEC_WAR]
+Ostrzeżenie
+
+[FEC_OKK]
+OK
+
+[FED_CON]
+Potwierdzenie usunięcia pliku
+
+[FES_SSC]
+Gra została pomyślnie zapisana.
+
+[DEL_FNM]
+Plik został pomyślnie usunięty.
+
+[PCLOAD]
+Wczytywanie danych z pliku
+
+[PCRESRT]
+Trwa uruchamianie Grand Theft Auto III
+
+[FEC_DLF]
+Kasowanie nieudane.
+
+[FEC_SVU]
+Zapis nieudany.
+
+[FEC_LUN]
+Wczytywanie nieudane. Plik uszkodzony. Proszę go usunąć.
+
+[FEN_PLA]
+Liczba graczy:
+
+[FET_NON]
+BRAK DOSTĘPNYCH GIER
+
+[FET_SFG]
+WYSZUKIWANIE SESJI GRY...
+
+[FET_SRT]
+SORTOWANIE SESJI GRY...
+
+[FEF_LAN]
+LAN
+
+[FEF_INT]
+INTERNET
+
+[FET_REF]
+Odśwież
+
+[FET_FIL]
+Filtr
+
+[FET_JG]
+Dołącz
+
+[FEC_NTW]
+Rozmowa przez sieć
+
+[FEC_ESR]
+Klawisz ESC jest zastrzeżony
+
+[FEC_GSL]
+Pokazuj wstrząsy głowy:
+
+[FIL_FLT]
+FILTR LISTY SESJI GRY
+
+[FET_SAN]
+ROZPOCZNIJ NOWĄ GRĘ
+
+[FIL_MAP]
+Mapa:
+
+[FIL_SRV]
+Serwer:
+
+[FIL_TYP]
+Rodzaj gry:
+
+[FIL_SPC]
+Gry z wolnym miejscem?
+
+[FIL_PNG]
+Ping:
+
+[FEN_UKH]
+Nieznany host
+
+[FEN_UKM]
+Nie odnaleziono mapy
+
+[FEN_UKT]
+Nie odnaleziono danego rodzaju gry
+
+[FEN_NCI]
+BRAK POŁĄCZENIA Z INTERNETEM
+
+[FET_PAU]
+MENU PAUZY
+
+[FET_SGA]
+ROZPOCZNIJ GRĘ
+
+[FEC_SGJ]
+Ustaw joystick do gry
+
+[FEC_PAD]
+Gamepad
+
+[FEC_JOY]
+Joystick
+
+[FEC_WHL]
+Kierownica
+
+[FEC_CNT]
+Typ sterownika:
+
+[FES_CSA]
+Wybierz 'skórę' z poniższej listy:
+
+[FES_SKN]
+NAZWA SKÓRY
+
+[FES_DAT]
+DATA
+
+[FES_NON]
+BRAK DOSTĘPNYCH 'SKÓR'
+
+[FEA_FM9]
+ODTWARZACZ MP3
+
+[FESZ_QZ]
+Czy jesteś pewien, że chcesz zapisać grę?
+
+[FES_CGA]
+Dostępne gniazda gry:
+
+[FES_SCG]
+Zapisać bieżącą grę?
+
+[FES_LCG]
+Wczytać grę i kontynuować rozgrywkę?
+
+[FEC_FIR]
+Strzał
+
+[FEC_NWE]
+Następna broń
+
+[FEC_PWE]
+Poprzednia broń
+
+[FEC_FOR]
+Do przodu
+
+[FEC_BAC]
+Do tyłu
+
+[FEC_LEF]
+W lewo
+
+[FEC_RIG]
+W prawo
+
+[FEC_ZIN]
+Przybliżenie
+
+[FEC_ZOT]
+Oddalenie
+
+[FEC_EEX]
+Wejście/wyjście
+
+[FEC_RAD]
+Radio
+
+[FEC_SUB]
+Podmisja
+
+[FEC_CMR]
+Zmiana kamery
+
+[FEC_JMP]
+Skok
+
+[FEC_SPN]
+Sprint
+
+[FEC_HND]
+Hamulec ręczny
+
+[FEC_TUL]
+Wieżyczka w lewo
+
+[FEC_TUR]
+Wieżyczka w prawo
+
+[FEC_LOL]
+Spójrz w lewo
+
+[FEC_LOR]
+Spójrz w prawo
+
+[FEC_NTR]
+Następny cel
+
+[FEC_PTT]
+Poprzedni cel
+
+[FEC_LBA]
+Spójrz do tyłu
+
+[FEC_CEN]
+Wyśrodkuj kamerę
+
+[FEC_UND]
+(NIE)
+
+[FET_CFT]
+PIESZO
+
+[FET_CCR]
+W AUCIE
+
+[CVT_MSG]
+Trwa konwersja tekstur do formatu optymalnego dla zainstalowanej karty graficznej.
+
+[FET_CAC]
+CZYNNOŚĆ
+
+[FEC_IBT]
+-
+
+[FEC_SPC]
+SPACJA
+
+[FEC_MXO]
+MXB1
+
+[FEC_MXT]
+MXB2
+
+[FEC_UNB]
+UNBOUND
+
+[FET_CME]
+SPOSÓB STEROWANIA
+
+[FET_RDK]
+ZMIANA KLAWISZY STERUJĄCYCH
+
+[FET_AMS]
+USTAWIENIA MYSZY
+
+[FET_STI]
+ZWYKŁA KONFIGURACJA STEROWANIA
+
+[FET_CTI]
+STANDARDOWA KONFIGURACJA STEROWANIA
+
+[FET_MTI]
+KONFIGURACJA STEROWANIA MYSZĄ
+
+[FET_DAM]
+DYNAMICZNE MODELOWANIE AKUSTYCZNE
+
+[FEC_TFL]
+Wieżyczka w lewo
+
+[FEC_TFR]
+Wieżyczka w prawo
+
+[FEC_MWF]
+KÓŁKO W GÓRĘ
+
+[FEC_MWB]
+KÓŁKO W DÓŁ
+
+[FEC_ORR]
+lub
+
+[FEC_NUS]
+NIEUŻYWANY
+
+[FEC_LUD]
+Spójrz w górę
+
+[FEC_LDU]
+Spójrz w dół
+
+[FEC_CMP]
+KOMBINACJA: SPÓJRZ W LEWO + SPÓJRZ W PRAWO
+
+[FEC_NTT]
+Brak tekstu dla tego klawisza
+
+[FEC_FNC]
+F~1~
+
+[FEC_IRT]
+INSERT
+
+[FEC_DLL]
+DELETE
+
+[FEC_HME]
+HOME
+
+[FEC_END]
+END
+
+[FEC_PGU]
+PAGE UP
+
+[FEC_PGD]
+PAGE DOWN
+
+[FEC_UPA]
+STRZAŁKA W GÓRĘ
+
+[FEC_DWA]
+STRZAŁKA W DÓŁ
+
+[FEC_LFA]
+W LEWO
+
+[FEC_RFA]
+STRZAŁKA W PRAWO
+
+[FEC_NUM]
+NUM
+
+[FEC_NMN]
+NUM~1~
+
+[FEC_FWS]
+NUM /
+
+[FEC_PLS]
+NUM +
+
+[FEC_MIN]
+NUM -
+
+[FEC_DOT]
+NUM .
+
+[FEC_NLK]
+NUM LOCK
+
+[FEC_ETR]
+ENTER
+
+[FEC_SLK]
+SCROLL LOCK
+
+[FEC_PSB]
+PAUSE BREAK
+
+[FEC_BSP]
+BACKSPACE
+
+[FEC_TAB]
+TAB
+
+[FEC_CLK]
+CAPS LOCK
+
+[FEC_RTN]
+RETURN
+
+[FEC_LSF]
+LEWY SHIFT
+
+[FEC_RSF]
+PRAWY SHIFT
+
+[FEC_LCT]
+LEWY CTRL
+
+[FEC_RCT]
+PRAWY CTRL
+
+[FEC_LAL]
+LEWY ALT
+
+[FEC_RAL]
+PRAWY ALT
+
+[FEC_LWD]
+LEWY KLAWISZ WINDOWS
+
+[FEC_RWD]
+PRAWY KLAWISZ WINDOWS
+
+[FEC_WRC]
+WINCLICK
+
+[WIN_TTL]
+Grand Theft Auto III
+
+[WIN_95]
+Gra Grand Theft Auto III nie pracuje pod systemem Windows 95.
+
+[WIN_DX]
+Gra Grand Theft Auto III wymaga bibliotek DirectX w wersji 8.1 lub nowszych.
+
+[WIN_VDM]
+Gra Grand Theft Auto III wymaga karty graficznej z przynajmniej 12 MB RAM.
+
+[DIAB3_G]
+Arriba!
+
+[FEM_RES]
+WZNÓW GRĘ
+
+[FES_SNG]
+ROZPOCZNIJ NOWĄ GRĘ
+
+[FEM_SP]
+TRYB DLA JEDNEGO GRACZA
+
+[FEM_MP]
+TRYB WIELOOSOBOWY
+
+[FEM_QT]
+WYJDŹ Z GRY
+
+[FES_SG]
+ROZPOCZNIJ NOWĄ GRĘ
+
+[FES_LG]
+WCZYTAJ GRĘ
+
+[FEM_HST]
+HOST GRY
+
+[FEM_OPT]
+OPCJE
+
+[FEM_DBG]
+DEBUGOWANIE
+
+[FET_PSU]
+KONFIGURACJA GRACZA
+
+[FET_DEF]
+PRZYWRÓĆ USTAWIENIA DOMYŚLNE
+
+[FED_BRI]
+JASNOŚĆ
+
+[FED_TRA]
+ŚLADY
+
+[FEM_LOD]
+ODLEGŁOŚC RYSOWANIA
+
+[FEM_VSC]
+SYNCHRONIZACJA KLATEK
+
+[FEM_FRM]
+OGRANICZENIE KLATEK
+
+[FED_RES]
+ROZDZIELCZOŚĆ EKRANU
+
+[FED_WIS]
+SZEROKI EKRAN
+
+[FEDS_TB]
+WSTECZ
+
+[FEA_MUS]
+GŁOŚNOŚĆ MUZYKI
+
+[FEA_SFX]
+GŁOŚNOŚĆ EFEKTÓW
+
+[FEA_RSS]
+STACJA RADIOWA
+
+[FEL_ENG]
+ANGIELSKI
+
+[FEL_FRE]
+FRANCUSKI
+
+[FEL_GER]
+NIEMIECKI
+
+[FEL_ITA]
+WŁOSKI
+
+[FEL_SPA]
+HISZPAŃSKI
+
+[FEA_3DH]
+SPRZĘT AUDIO
+
+[FEA_SPK]
+KONFIGURACJA GŁOŚNIKÓW
+
+[FEA_2SP]
+DWA GŁOŚNIKI
+
+[FEA_4SP]
+WIĘCEJ NIŻ DWA GŁOŚNIKI
+
+[FEA_EAR]
+SŁUCHAWKI
+
+[FEA_NAH]
+BRAK SPRZĘTU AUDIO
+
+[FET_SNG]
+ROZPOCZNIJ NOWĄ GRĘ
+
+[FEN_STA]
+ROZPOCZNIJ GRĘ
+
+[GMLOAD]
+WCZYTAJ GRĘ
+
+[GMSAVE]
+ZAPISZ GRĘ
+
+[FES_DGA]
+USUŃ GRĘ
+
+[FEM_NON]
+BRAK
+
+[FEC_IVV]
+ODWRÓĆ OSIE MYSZY W PIONIE
+
+[FEC_MSH]
+CZUŁOŚĆ MYSZY
+
+[FET_CCN]
+STEROWANIE: STANDARDOWE
+
+[FET_SCN]
+STEROWANIE: ZWYKŁE
+
+[FES_SET]
+UŻYJ 'SKÓRY'
+
+[GHOST]
+Ghost
+
+[WIN_RSZ]
+Zmiana rozmiaru ekranu nieudana.
+
+[FEC_TFU]
+Wież./dodo w górę
+
+[FEC_TFD]
+Wież./dodo w dół
+
+[FET_APL]
+ZASTOSUJ
+
+[FET_APP]
+KLIKNIJ LPM LUB RETURN, ABY ZASTOSOWAĆ NOWE USTAWIENIA
+
+[FET_HRD]
+PRZYWRÓCONO USTAWIENIA DOMYŚLNE
+
+[FET_MST]
+STEROWANIE POJAZDAMI ZA POMOCĄ MYSZY
+
+[FEC_STR]
+NUM *
+
+[FET_MIG]
+STRZAŁKA W LEWO, W PRAWO, KÓŁKO MYSZY, ABY REGULOWAĆ
+
+[FET_CIG]
+BACKSPACE: USUWANIE - LPM, RETURN - ZMIANA
+
+[FET_RIG]
+WYBIERZ NOWY KLAWISZ LUB NACIŚNIJ ESC, ABY ANULOWAĆ
+
+[FET_EIG]
+NIE MOŻNA PRZYPISAĆ KLAWISZA TEJ CZYNNOŚCI
+
+[NO_PCCD]
+Włóż do napędu CD-ROM płytę z grą Grand Theft Auto III nr 2 albo naciśnij ESC, aby anulować.
+
+[CVT_ERR]
+Na dysku twardym zabrakło wolnego miejsca. Przed dalszą pracą z programem zwolnij odpowiednią ilość pamięci. Aby wyjść, naciśnij ESC.
+
+[FED_SUB]
+NAPISY
+
+[FET_DSN]
+Skin gracza.bmp
+
+[JM3]
+'SKOK NA KONWÓJ'
+
+[ATUTOR2]
+~g~OSTROŻNIE przewoź pacjentów do Szpitala. Każde zderzenie zmniejsza ich szanse przeżycia.
+
+[EBAL]
+'WOLNOŚĆ W LIBERTY'
+
+[LM4]
+'ALFONS'
+
+[REPLAY]
+POWTÓRKA
+
+[FEC_SFT]
+SHIFT
+
+[CRED254]
+KIEROWNIK STUDIA
+
+[CVT_CRT]
+Nie można dokonać konwersji tekstur dla zainstalowanej karty graficznej. W tym celu należy zalogować się na konto Administratora. Aby wyjść, naciśnij ESC.
+
+[FEM_ON]
+WŁ.
+
+[FEM_OFF]
+WYŁ.
+
+[FEM_YES]
+TAK
+
+[FEM_NO]
+NIE
+
+[FES_WAR]
+Trwa zapisywanie, proszę czekać...
+
+[FED_DLW]
+Trwa kasowanie, proszę czekać...
+
+[FED_LDW]
+Trwa wczytywanie, proszę czekać...
+
+[FEC_SLC]
+Gniazdo jest uszkodzone
+
+[FED_LFL]
+Nieudane wczytanie zapisanej gry. Za chwilę gra uruchomi się ponownie.
+
+[FET_RSO]
+PRZYWRÓCONO PIERWOTNE USTAWIENIA
+
+[FET_RSC]
+URZĄDZENIE NIEDOSTĘPNE - PRZYWRÓCONO PIERWOTNE USTAWIENIA
+
+{ re3 updates }
+{ new languages }
+[FEL_JAP]
+JAPOŃSKI
+
+[FEL_POL]
+POLSKI
+
+[FEL_RUS]
+ROSYJSKI
+
+{ new display menus }
+[FET_GFX]
+USTAWIENIA GRAFIKI
+
+[FED_MIP]
+MIPMAPPING
+
+[FED_AAS]
+WYGŁADZANIE KRAWĘDZI
+
+[FED_FIL]
+FILTROWANIE TEKSTUR
+
+[FED_BIL]
+DWULINIOWE
+
+[FED_TRL]
+TRÓJLINIOWE
+
+[FED_WND]
+OKIENKOWY
+
+[FED_FLS]
+PEŁNY EKRAN
+
+[FEM_CSB]
+RAMKI CUTSCENEK
+
+[FEM_SCF]
+FORMAT OBRAZU
+
+[FEM_ISL]
+PRZYPISZ WYKORZYSTANIE PAMIĘCI
+
+[FEM_LOW]
+NISKIE
+
+[FEM_MED]
+ŚREDNIE
+
+[FEM_HIG]
+WYSOKIE
+
+[FEM_2PR]
+ALFA TEST PS2
+
+[FEC_FRC]
+SWOBODNA KAMERA
+
+{ Linux joy detection }
+[FEC_JOD]
+WYKRYJ PADA
+
+[FEC_JPR]
+Naciśnij dowolny klawisz na padzie, którego chcesz użyć w grze.
+
+[FEC_JDE]
+Wykryto pada
+
+{ mission restart }
+[FET_RMS]
+PONÓW MISJĘ
+
+[FESZ_RM]
+PONOWIĆ?
+
+{ more graphics }
+[FED_VPL]
+POTOK POJAZDÓW
+
+[FED_PRM]
+PODŚWIETLENIE PED
+
+[FED_RGL]
+POŁYSK DROGI
+
+[FED_CLF]
+FILTR KOLORU
+
+[FED_WLM]
+LIGHTMAPY ŚWIATA
+
+[FED_MBL]
+ROZMYCIE RUCHU
+
+[FEM_SIM]
+PROSTE
+
+[FEM_NRM]
+NORMALNY
+
+[FEM_MOB]
+MOBILNY
+
+[FED_MFX]
+MATFX
+
+[FED_NEO]
+PODŚWIETLENIE
+
+[FEM_PS2]
+PS2
+
+[FEM_XBX]
+XBOX
+
+[FEM_AUT] { aspect ratio related }
+AUTO
+
+[FEC_IVP]
+ODWRÓĆ OŚ PADA W PIONIE
+
+{ map }
+[FEM_TWP]
+Toggle Waypoint
+
+[FEA_FMN]
+RADIO OFF
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+XBOX 360 CONTROLLER
+
+[FEC_ONE]
+XBOX ONE CONTROLLER
+
+[FEC_TYP]
+GAMEPAD TYPE
+
+[FEC_CCF]
+KONFIGURACJA
+
+[FEC_CF1]
+SETUP1
+
+[FEC_CF2]
+SETUP2
+
+[FEC_CF3]
+SETUP3
+
+[FEC_CF4]
+SETUP4
+
+[FEC_CDP]
+STEROWNIK EKRANU
+
+[FEC_ONF]
+PIESZO
+
+[FEC_INC]
+W AUCIE
+
+[FEC_VIB]
+WIBRACJA
+
+[FET_AGS]
+GAMEPAD SETTINGS
+
+{ end of file }
+
+[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/russian.txt b/utils/gxt/russian.txt
index 4598dad5..59fff069 100644
--- a/utils/gxt/russian.txt
+++ b/utils/gxt/russian.txt
@@ -1,4 +1,11 @@
-[1000]
+{
+ New strings are at the bottom of file.
+ Do not change the order of strings.
+ You can fix the typos of existing translation but please refrain from
+ unnecessary edits like rephasing because you think it suits better for your taste.
+}
+
+[1000]
ТЫ ПОКОЙНИК
[1001]
@@ -2029,11 +2036,11 @@ Double Clef FM
[DODO_FT]
Вы были в воздухе ~1~ секунд!
-[DRIVE_A]
-Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~PED_FIREWEAPON~~w~ для выстрела.
+[DRIVE_A] { re3 change }
+Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ для выстрела.
-[DRIVE_B]
-Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~PED_FIREWEAPON~~w~ для выстрела.
+[DRIVE_B] { re3 change }
+Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ для выстрела.
[DSPLAY]
Экран
@@ -2425,30 +2432,12 @@ FLASHBACK 95.6
[FEC_CAW]
Оружие в машине
-[FEC_CCF]
-Конфигурация:
-
[FEC_CCM]
Поставить камеру сзади игрока.
-[FEC_CDP]
-Показ контроллера:
-
[FEC_CEN]
Центровка камеры
-[FEC_CF1]
-Setup1
-
-[FEC_CF2]
-Setup2
-
-[FEC_CF3]
-Setup3
-
-[FEC_CF4]
-Setup4
-
[FEC_CLE]
Прокрутка оружия влево
@@ -2569,9 +2558,6 @@ HOME
[FEC_IBT]
-
-[FEC_INC]
-В машине
-
[FEC_IRT]
INS
@@ -2743,8 +2729,6 @@ NUMLOCK
[FEC_OMS]
Для действия можно задать лишь одну кнопку мыши
-[FEC_ONF]
-Пешком
[FEC_ORR]
или
@@ -2962,9 +2946,6 @@ Toggle Pad Game/Debug
[FEC_VES]
Управление машиной
-[FEC_VIB]
-Vibration:
-
[FEC_WAR]
Внимание!
@@ -3692,7 +3673,7 @@ No Memory Card (PS2) in MEMORY CARD slot 1.
УДАЛЕНИЕ ИГРЫ
[FET_DIS]
-НАСТРОЙКА ГРАФИКИ
+НАСТРОЙКА ДИСПЛЕЯ
[FET_DSN]
Обычная}одежда.bmp
@@ -3706,9 +3687,6 @@ No Memory Card (PS2) in MEMORY CARD slot 1.
[FET_FIL]
Фильтр
-[FET_GFX]
-НАСТРОЙКА ГРАФИКИ
-
[FET_GT]
ТИП ИГРЫ
@@ -4309,17 +4287,17 @@ FormatMemCard 1 (teststuff)
[GA_5]
Я уже поставил в бомбу в эту тачку.
-[GA_6]
-Припаркуй тачку на место, нажми ~h~~k~~PED_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
+[GA_6] { re3 change }
+Припаркуй тачку на место, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
-[GA_6B]
-Припаркуй тачку на место, нажми ~h~~k~~PED_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
+[GA_6B] { re3 change }
+Припаркуй тачку на место, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
-[GA_7]
-Включи бомбу, нажав на ~h~~k~~PED_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
+[GA_7] { re3 change }
+Включи бомбу, нажав на ~h~~k~~VEHICLE_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
-[GA_7B]
-Включи бомбу, нажав на ~h~~k~~PED_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
+[GA_7B] { re3 change }
+Включи бомбу, нажав на ~h~~k~~VEHICLE_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
[GA_8]
Взорви бомбу с помощью детонатора.
@@ -4666,11 +4644,11 @@ Pull the ~h~right analog stick~w~ back to ~h~brake~w~, or to ~h~reverse~w~ if th
[HM1_H]
Сделай так, чтобы этих Девяток здесь не было!
-[HM2_1]
-Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~PED_FIREWEAPON~~w~.
+[HM2_1] { re3 change }
+Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[HM2_1A]
-Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~PED_FIREWEAPON~~w~.
+[HM2_1A] { re3 change }
+Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[HM2_2]
~r~Ты так и не смог подорвать все броневики!
@@ -5272,11 +5250,11 @@ Italian
[KM1_7]
~g~Проезд только для полицейских!
-[KM1_8A]
-Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~PED_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
+[KM1_8A] { re3 change }
+Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
-[KM1_8D]
-Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~PED_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
+[KM1_8D] { re3 change }
+Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
[KM1_9]
~r~Установленной в машине бомбой ты должен был взорвать стену!
@@ -6520,11 +6498,11 @@ Parse Heap
[PAUSED]
ИГРА ОСТАНОВЛЕНА
-[PBOAT_1]
-Чтобы выстрелить из орудия катера нажми ~h~~k~~PED_FIREWEAPON~~w~.
+[PBOAT_1] { re3 change }
+Чтобы выстрелить из орудия катера нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[PBOAT_2]
-Чтобы выстрелить из орудия катера нажми ~h~~k~~PED_FIREWEAPON~~w~.
+[PBOAT_2] { re3 change }
+Чтобы выстрелить из орудия катера нажми ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[PCLOAD]
Loading File Data
@@ -6700,11 +6678,11 @@ Quit Options
[RCBANDT]
Багги Бандит
-[RCHELP]
-Чтобы подорвать машинку, нажми ~k~~PED_FIREWEAPON~, или врежься в колесо жертвы.
+[RCHELP] { re3 change }
+Чтобы подорвать машинку, нажми ~k~~VEHICLE_FIREWEAPON~, или врежься в колесо жертвы.
-[RCHELPA]
-Чтобы подорвать машинку, нажми ~k~~PED_FIREWEAPON~, или врежься в колесо жертвы.
+[RCHELPA] { re3 change }
+Чтобы подорвать машинку, нажми ~k~~VEHICLE_FIREWEAPON~, или врежься в колесо жертвы.
[RC_1]
У тебя 2 минуты, чтобы подорвать как можно больше машин Дьяволов!
@@ -7144,11 +7122,11 @@ Speeder
[SPRAY1]
В мастерской твою тачку ~h~отремонтируют~w~ и ~h~перекрасят~w~. Копы тебя больше ~h~не узнают~w~. Стоимость - ~h~$1000~w~. Первый раз это бесплатно.
-[SPRAY_1]
-Чтобы включить брандспойт, нажми на ~h~~k~~PED_FIREWEAPON~~w~.
+[SPRAY_1] { re3 change }
+Чтобы включить брандспойт, нажми на ~h~~k~~VEHICLE_FIREWEAPON~~w~.
-[SPRAY_4]
-Чтобы включить брандспойт, нажми на ~h~~k~~PED_FIREWEAPON~~w~.
+[SPRAY_4] { re3 change }
+Чтобы включить брандспойт, нажми на ~h~~k~~VEHICLE_FIREWEAPON~~w~.
[STADIUM]
Аспатрия
@@ -7957,6 +7935,9 @@ PS: УМРИ, ПАРШИВЫЙ ПЕС, УМРИ!
РУССКИЙ
{ new display menus }
+[FET_GFX]
+НАСТРОЙКА ГРАФИКИ
+
[FED_MIP]
МИП-МАППИНГ
@@ -7972,6 +7953,155 @@ PS: УМРИ, ПАРШИВЫЙ ПЕС, УМРИ!
[FED_TRL]
ТРИЛИНЕЙНАЯ
+[FED_WND]
+ОКОННЫЙ
+
+[FED_FLS]
+ПОЛНОЭКРАННЫЙ
+
+[FEM_CSB]
+CUTSCENE BORDERS
+
+[FEM_SCF]
+ФОРМАТ ОКНА
+
+[FEM_ISL]
+MAP MEMORY USAGE
+
+[FEM_LOW]
+LOW
+
+[FEM_MED]
+MEDIUM
+
+[FEM_HIG]
+HIGH
+
+[FEM_2PR]
+PS2 ALPHA TEST
+
+[FEC_FRC]
+СВОБОДНАЯ КАМЕРА
+
+{ Linux joy detection }
+[FEC_JOD]
+DETECT JOYSTICK
+
+[FEC_JPR]
+Press any key on the joystick of your choice that you want to use on the game, and it will be selected.
+
+[FEC_JDE]
+Detected joystick
+
+{ mission restart }
+[FET_RMS]
+ПОВТОРИТЬ ЗАДАНИЕ
+
+[FESZ_RM]
+НАЧАТЬ ЗАНОВО?
+
+{ more graphics }
+[FED_VPL]
+VEHICLE PIPELINE
+
+[FED_PRM]
+PED RIM LIGHT
+
+[FED_RGL]
+ROAD GLOSS
+
+[FED_CLF]
+COLOUR FILTER
+
+[FED_WLM]
+WORLD LIGHTMAPS
+
+[FED_MBL]
+MOTION BLUR
+
+[FEM_SIM]
+SIMPLE
+
+[FEM_NRM]
+NORMAL
+
+[FEM_MOB]
+MOBILE
+
+[FED_MFX]
+MATFX
+
+[FED_NEO]
+NEO
+
+[FEM_PS2]
+PS2
+
+[FEM_XBX]
+XBOX
+
+[FEM_AUT] { aspect ratio related }
+АВТО
+
+{ controls }
+[FEC_IVP]
+ИНВЕРТИРОВАТЬ ВЕРТИКАЛЬНУЮ ОСЬ
+
+{ map }
+[FEM_TWP]
+Поставить метку
+
+[FEA_FMN]
+РАДИО ВЫКЛ
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+КОНТРОЛЛЕР XBOX 360
+
+[FEC_ONE]
+КОНТРОЛЛЕР XBOX ONE
+
+[FEC_TYP]
+ГЕЙМПАД
+
+[FEC_CCF]
+КОНФИГУРАЦИЯ
+
+[FEC_CF1]
+СХЕМА 1
+
+[FEC_CF2]
+СХЕМА 2
+
+[FEC_CF3]
+СХЕМА 3
+
+[FEC_CF4]
+СХЕМА 4
+
+[FEC_CDP]
+ТИП УПРАВЛЕНИЯ
+
+[FEC_ONF]
+ПЕШКОМ
+
+[FEC_INC]
+В МАШИНЕ
+
+[FEC_VIB]
+ВИБРАЦИЯ
+
+[FET_AGS]
+НАСТРОЙКИ ГЕЙМПАДА
+
{ end of file }
[DUMMY]
diff --git a/utils/gxt/spanish.txt b/utils/gxt/spanish.txt
index b58fa845..b2e418dd 100644
--- a/utils/gxt/spanish.txt
+++ b/utils/gxt/spanish.txt
@@ -1,4 +1,16 @@
-{ Grand Theft Auto III Spanish (Spain) Translation }
+{
+ New strings are at the bottom of file.
+ Do not change the order of strings.
+ You can fix the typos of existing translation but please refrain from
+ unnecessary edits like rephasing because you think it suits better for your taste.
+
+ SPANISH NOTE:
+ This is European Spanish, do not mix it with Latin American Spanish.
+ If you want the Latin American Spanish translation you'd have to create
+ a separate txt for it.
+}
+
+{ Grand Theft Auto III Spanish (Spain) Translation }
{ Contains some of the official fixes made by Rockstar for the iOS port }
{ Additional translation rewrites, corrections and fixes by IlDucci }
@@ -372,7 +384,7 @@ Playa de Portland
Saint Mark's
[REDLIGH]
-Barrio rojo
+Red Light District
[TOWERS]
Cerros de Hepburn
@@ -636,7 +648,7 @@ Puedes practicar disparando a estas dianas. Vuelve a la misión cuando hayas ter
~g~Busca un cliente.
[FARE1]
-~g~Ve al ~w~club Sex Kitten Meeouch ~g~en el barrio rojo.
+~g~Ve al ~w~club Sex Kitten Meeouch ~g~en el Red Light District.
[FARE2]
~g~Ve a ~w~Supa Save ~g~en Portland View.
@@ -648,13 +660,13 @@ Puedes practicar disparando a estas dianas. Vuelve a la misión cuando hayas ter
~g~Ve a la ~w~cafetería Greasy Joe ~g~en Callahan Point.
[FARE5]
-~g~Ve a la ~w~tienda de armas Ammu-Nation ~g~en el barrio rojo.
+~g~Ve a la ~w~tienda de armas Ammu-Nation ~g~en el Red Light District.
[FARE6]
~g~Ve a ~w~Easy Credit Autos ~g~en Saint Mark's.
[FARE7]
-~g~Ve al ~w~bar de topless de Woody ~g~en el barrio rojo.
+~g~Ve al ~w~bar de topless de Woody ~g~en el Red Light District.
[FARE8]
~g~Ve al ~w~restaurante Marcos ~g~en Saint Mark's.
@@ -756,7 +768,7 @@ Pulsa ~h~~k~~TOGGLE_SUBMISSIONS~~w~ para activar o desactivar las misiones del c
¡Has volado durante ~1~ segundos!
[EBAL_A]
-Conozco un lugar en las afueras del barrio rojo donde podemos escondernos,
+Conozco un lugar en las afueras del Red Light District donde podemos escondernos,
[EBAL_A1]
pero mis manos están destrozadas, así que conduce tú, hermano.
@@ -1553,7 +1565,7 @@ Eso no es un masajeador.
~r~Muy bonito, ¡has asustado al objetivo! ¿Y te consideras un asesino?
[AM1_5]
-~g~Ve al barrio rojo y espera a que Salvatore salga del club.
+~g~Ve al Red Light District y espera a que Salvatore salga del club.
[AM1_7]
~r~Salvatore está en su casita, sano y salvo, tomándose un cóctel. ¡Nadie te va a llamar ''Chacal''!
@@ -2246,11 +2258,11 @@ Una bomba de coche vale 1.000 dólares.
[GA_5]
Tu coche ya tiene una bomba instalada.
-[GA_6]
-¡Apárcalo, actívala pulsando ~h~~k~~PED_FIREWEAPON~~w~ y SAL PITANDO!
+[GA_6] { re3 change }
+¡Apárcalo, actívala pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~ y SAL PITANDO!
-[GA_7]
-Activa la bomba pulsando ~h~~k~~PED_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
+[GA_7] { re3 change }
+Activa la bomba pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
[GA_8]
Utiliza el detonador para activar la bomba.
@@ -2466,33 +2478,6 @@ Acelerar
[FEC_SMT]
Activar misión especial
-[FEC_CCF]
-Configuración:
-
-[FEC_CF1]
-Ajuste1
-
-[FEC_CF2]
-Ajuste2
-
-[FEC_CF3]
-Ajuste3
-
-[FEC_CF4]
-Ajuste4
-
-[FEC_CDP]
-Controles a mostrar:
-
-[FEC_ONF]
-A pie
-
-[FEC_INC]
-En vehículos
-
-[FEC_VIB]
-Vibración:
-
[FEA_OUT]
Salida:
@@ -3633,11 +3618,11 @@ que tendré trabajo para ti.
[JM6_1]
Llévanos al banco de la avenida principal.
-[GA_6B]
-¡Apárcalo, actívala pulsando ~h~~k~~PED_FIREWEAPON~~w~ y SAL PITANDO!
+[GA_6B] { re3 change }
+¡Apárcalo, actívala pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~ y SAL PITANDO!
-[GA_7B]
-Activa la bomba pulsando ~h~~k~~PED_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
+[GA_7B] { re3 change }
+Activa la bomba pulsando ~h~~k~~VEHICLE_FIREWEAPON~~w~. Estallará cuando se arranque el motor.
[BAT1]
~g~¡Coge el bate!
@@ -4059,11 +4044,11 @@ Mete tu vehículo en el taller de pintura para perder tu ~h~nivel de búsqueda~w
[HM1_1]
~g~Cepíllate a 20 Purple Nines en 2 minutos y 30 segundos.
-[KM1_8A]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
+[KM1_8A] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
-[KM1_8D]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
+[KM1_8D] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para ~h~activar la bomba~w~. Acuérdate de alejarte de ella.
[KM1_12]
~g~¡Llévalo al dojo, pero deshazte primero de la policía!
@@ -4200,11 +4185,11 @@ No necesito tu documentación, pareces de fiar.
[DETON]
DETONACIÓN:
-[DRIVE_A]
-Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar.
+[DRIVE_A] { re3 change }
+Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar.
-[DRIVE_B]
-Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar.
+[DRIVE_B] { re3 change }
+Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierda o a la derecha y pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar.
[RECORD]
~g~¡NUEVO RÉCORD!
@@ -4212,11 +4197,11 @@ Ten una Uzi seleccionada cuando entres en un vehículo, luego mira a la izquierd
[NRECORD]
~r~¡NO HAY UN NUEVO RÉCORD!
-[RCHELP]
-Pulsa ~k~~PED_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
+[RCHELP] { re3 change }
+Pulsa ~k~~VEHICLE_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
-[RCHELPA]
-Pulsa ~k~~PED_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
+[RCHELPA] { re3 change }
+Pulsa ~k~~VEHICLE_FIREWEAPON~ o lleva el coche teledirigido hasta las ruedas de otro coche para detonarlo.
[RC_1]
¡Tienes 2 minutos para destruir todos los coches de los Diablos que puedas!
@@ -4447,7 +4432,7 @@ tomándolos por el camino.
¡Cuando alcances a ese bandido espaciado con SPANK, chíngatelo!
[DIAB4_H]
-Luego reparte mis revistas XXX por el barrio rojo.
+Luego reparte mis revistas XXX por el Red Light District.
[DIAB4_1]
~g~Lleva la furgoneta a la parte de atrás de Revistas XXX.
@@ -4579,7 +4564,7 @@ si no les doy una parte.
He dejado un coche dentro de la fábrica.
[MEA2_G]
-Ve a recogerles con él en su territorio, en el barrio rojo.
+Ve a recogerles con él en su territorio, en el Red Light District.
[MEA2_H]
Luego tráelos a la fábrica para que conozcan la opinión de Marty.
@@ -4716,11 +4701,11 @@ Luigi dijo que eras de fiar, así que vuelve más tarde,
[RM5_6]
~g~¡Ha salido de la ambulancia! ¡Cárgate su escayola con un vehículo o una explosión!
-[PBOAT_1]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar los cañones de la lancha.
+[PBOAT_1] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar los cañones de la lancha.
-[PBOAT_2]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar los cañones de la lancha.
+[PBOAT_2] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar los cañones de la lancha.
[DIAB1_B]
Al habla El Burro, de los Diablos.
@@ -4734,11 +4719,11 @@ Hay una carrera que empezará junto a la sala Clásica, cerca del puente Callaha
[DIAB1_F]
Consíguete un buen carro y el primero que pase por todos los puntos de control se llevará el premio.
-[HM2_1]
-Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~PED_FIREWEAPON~ ~w~para detonarlos.
+[HM2_1] { re3 change }
+Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~VEHICLE_FIREWEAPON~ ~w~para detonarlos.
-[HM2_1A]
-Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~PED_FIREWEAPON~ ~w~para detonarlos.
+[HM2_1A] { re3 change }
+Usa los coches teledirigidos para destruir los furgones blindados. Pulsa ~h~~k~~VEHICLE_FIREWEAPON~ ~w~para detonarlos.
[HM2_2]
~r~¡No has destruido todos los furgones blindados!
@@ -6545,11 +6530,11 @@ Esta Memory Card (PS2) ya está formateada.
[FEDSAS4]
;=<> - CAMBIAR SELECCIÓN
-[SPRAY_4]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar el cañón de agua.
+[SPRAY_4] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar el cañón de agua.
-[SPRAY_1]
-Pulsa ~h~~k~~PED_FIREWEAPON~~w~ para disparar el cañón de agua.
+[SPRAY_1] { re3 change }
+Pulsa ~h~~k~~VEHICLE_FIREWEAPON~~w~ para disparar el cañón de agua.
[LITTLE]
LITTLE T
@@ -7153,7 +7138,7 @@ Color del jugador
Liberty City
[FEM_MA1]
-Barrio rojo
+Red Light District
[FEM_MA2]
Chinatown
@@ -7305,9 +7290,6 @@ CONEXIÓN
[FET_AUD]
AJUSTES DE AUDIO
-[FET_GFX]
-AJUSTES GRÁFICOS
-
[FET_DIS]
AJUSTES DE PANTALLA
@@ -8015,7 +7997,7 @@ POLACO
RUSO
{ new display menus }
-[FET_GRA]
+[FET_GFX]
AJUSTES GRÁFICOS
[FED_MIP]
@@ -8119,12 +8101,66 @@ PS2
[FEM_XBX]
XBOX
+[FEM_AUT]
+AUTOM.
+
[FEC_IVP]
INVERTIR VERTICALIDAD MANDO
[FEM_TWP]
Poner o quitar punto de referencia
+[FEA_FMN]
+RADIO APAGADA
+
+[FEC_DS2]
+DUALSHOCK 2
+
+[FEC_DS3]
+DUALSHOCK 3
+
+[FEC_DS4]
+DUALSHOCK 4
+
+[FEC_360]
+MANDO DE XBOX 360
+
+[FEC_ONE]
+MANDO DE XBOX ONE
+
+[FEC_TYP]
+TIPO DE MANDO
+
+[FEC_CCF]
+CONFIGURACIÓN
+
+[FEC_CF1]
+AJUSTE 1
+
+[FEC_CF2]
+AJUSTE 2
+
+[FEC_CF3]
+AJUSTE 3
+
+[FEC_CF4]
+AJUSTE 4
+
+[FEC_CDP]
+CONTROLES A MOSTRAR
+
+[FEC_ONF]
+A PIE
+
+[FEC_INC]
+EN VEHÍCULO
+
+[FEC_VIB]
+VIBRACIÓN
+
+[FET_AGS]
+AJUSTES DE MANDO
+
{ end of file }
[DUMMY]
diff --git a/vendor/librw b/vendor/librw
-Subproject 60a5ace16309ccd3d174a3ec14a106254093406
+Subproject 41ae7b9b61c6736b34269df0f0350d1b5bcff4d