summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFire_Head <Fire-Head@users.noreply.github.com>2020-08-27 19:35:14 +0200
committerGitHub <noreply@github.com>2020-08-27 19:35:14 +0200
commita8999bbf38cae233e39b5995118fa03bca7894ef (patch)
treeada9bd1935512f4b46fe6b4f42d9160eb2281262
parentbike shooting fix + trace temp fix (diff)
parentupdate librw (diff)
downloadre3-a8999bbf38cae233e39b5995118fa03bca7894ef.tar
re3-a8999bbf38cae233e39b5995118fa03bca7894ef.tar.gz
re3-a8999bbf38cae233e39b5995118fa03bca7894ef.tar.bz2
re3-a8999bbf38cae233e39b5995118fa03bca7894ef.tar.lz
re3-a8999bbf38cae233e39b5995118fa03bca7894ef.tar.xz
re3-a8999bbf38cae233e39b5995118fa03bca7894ef.tar.zst
re3-a8999bbf38cae233e39b5995118fa03bca7894ef.zip
-rw-r--r--.github/workflows/reVC_msvc_amd64.yml67
-rw-r--r--.github/workflows/reVC_msvc_x86.yml68
-rw-r--r--.gitignore4
-rw-r--r--.gitmodules21
-rw-r--r--gamefiles/TEXT/JAPANESE.gxtbin122022 -> 0 bytes
-rw-r--r--gamefiles/TEXT/american.gxtbin218862 -> 0 bytes
-rw-r--r--gamefiles/TEXT/french.gxtbin244494 -> 0 bytes
-rw-r--r--gamefiles/TEXT/german.gxtbin240448 -> 0 bytes
-rw-r--r--gamefiles/TEXT/italian.gxtbin239912 -> 0 bytes
-rw-r--r--gamefiles/TEXT/polish.gxtbin239930 -> 0 bytes
-rw-r--r--gamefiles/TEXT/russian.gxtbin220670 -> 0 bytes
-rw-r--r--gamefiles/TEXT/spanish.gxtbin246088 -> 0 bytes
-rw-r--r--gamefiles/models/fonts_j.txdbin1052072 -> 0 bytes
-rw-r--r--gamefiles/models/fonts_p.txdbin1379752 -> 0 bytes
-rw-r--r--gamefiles/models/fonts_r.txdbin1379752 -> 0 bytes
-rw-r--r--gamefiles/models/menu.txdbin8475176 -> 0 bytes
m---------librw0
-rw-r--r--libsndfile.64/ChangeLog9764
-rw-r--r--libsndfile.64/NEWS199
-rw-r--r--libsndfile.64/include/sndfile.h857
-rw-r--r--libsndfile.64/include/sndfile.hh446
-rw-r--r--mpg123.64/include/fmt123.h159
-rw-r--r--mpg123.64/include/mpg123.h1697
m---------ogg0
m---------opus0
m---------opusfile0
-rw-r--r--premake5.lua70
-rw-r--r--src/animation/AnimBlendClumpData.h1
-rw-r--r--src/animation/AnimBlendHierarchy.h1
-rw-r--r--src/animation/CutsceneMgr.cpp292
-rw-r--r--src/animation/CutsceneMgr.h9
-rw-r--r--src/audio/AudioLogic.cpp1
-rw-r--r--src/audio/AudioScriptObject.cpp10
-rw-r--r--src/audio/AudioScriptObject.h3
-rw-r--r--src/audio/DMAudio.cpp4
-rw-r--r--src/audio/audio_enums.h3
-rw-r--r--src/audio/sampman_oal.cpp6
-rw-r--r--src/audio/soundlist.h6
-rw-r--r--src/control/CarCtrl.cpp67
-rw-r--r--src/control/CarCtrl.h1
-rw-r--r--src/control/Darkel.cpp6
-rw-r--r--src/control/Darkel.h6
-rw-r--r--src/control/GameLogic.cpp8
-rw-r--r--src/control/Garages.cpp5
-rw-r--r--src/control/Remote.cpp21
-rw-r--r--src/control/Remote.h2
-rw-r--r--src/control/Replay.cpp5
-rw-r--r--src/control/Script.cpp398
-rw-r--r--src/control/Script.h2
-rw-r--r--src/core/Cam.cpp22
-rw-r--r--src/core/Camera.cpp5
-rw-r--r--src/core/CdStreamPosix.cpp11
-rw-r--r--src/core/ColStore.cpp1
-rw-r--r--src/core/Collision.cpp12
-rw-r--r--src/core/Collision.h3
-rw-r--r--src/core/ControllerConfig.cpp185
-rw-r--r--src/core/ControllerConfig.h3
-rw-r--r--src/core/FileMgr.h1
-rw-r--r--src/core/Frontend.cpp1241
-rw-r--r--src/core/Frontend.h53
-rw-r--r--src/core/Frontend_PS2.cpp27
-rw-r--r--src/core/Game.cpp24
-rw-r--r--src/core/MenuScreens.cpp66
-rw-r--r--src/core/Pad.cpp63
-rw-r--r--src/core/Pad.h5
-rw-r--r--src/core/PlayerInfo.cpp365
-rw-r--r--src/core/PlayerInfo.h25
-rw-r--r--src/core/Pools.cpp24
-rw-r--r--src/core/Pools.h3
-rw-r--r--src/core/Radar.h2
-rw-r--r--src/core/Stats.cpp534
-rw-r--r--src/core/Stats.h81
-rw-r--r--src/core/Streaming.cpp527
-rw-r--r--src/core/Streaming.h10
-rw-r--r--src/core/SurfaceTable.cpp8
-rw-r--r--src/core/SurfaceTable.h1
-rw-r--r--src/core/Wanted.cpp13
-rw-r--r--src/core/ZoneCull.cpp25
-rw-r--r--src/core/ZoneCull.h12
-rw-r--r--src/core/Zones.cpp60
-rw-r--r--src/core/Zones.h4
-rw-r--r--src/core/config.h25
-rw-r--r--src/core/main.cpp101
-rw-r--r--src/core/main.h3
-rw-r--r--src/core/re3.cpp189
-rw-r--r--src/core/templates.h4
-rw-r--r--src/entities/Entity.cpp2
-rw-r--r--src/extras/custompipes.cpp536
-rw-r--r--src/extras/custompipes.h133
-rw-r--r--src/extras/custompipes_d3d9.cpp527
-rw-r--r--src/extras/custompipes_gl.cpp623
-rw-r--r--src/extras/postfx.cpp492
-rw-r--r--src/extras/postfx.h45
-rw-r--r--src/extras/shaders/Makefile67
-rw-r--r--src/extras/shaders/colourfilterVC.frag26
-rw-r--r--src/extras/shaders/colourfilterVC_PS.csobin0 -> 648 bytes
-rw-r--r--src/extras/shaders/colourfilterVC_PS.hlsl23
-rw-r--r--src/extras/shaders/colourfilterVC_PS.inc56
-rw-r--r--src/extras/shaders/colourfilterVC_fs_gl3.inc28
-rw-r--r--src/extras/shaders/contrast.frag18
-rw-r--r--src/extras/shaders/contrastPS.csobin0 -> 344 bytes
-rw-r--r--src/extras/shaders/contrastPS.hlsl21
-rw-r--r--src/extras/shaders/contrastPS.inc31
-rw-r--r--src/extras/shaders/contrast_fs_gl3.inc20
-rw-r--r--src/extras/shaders/default_UV2.vert29
-rw-r--r--src/extras/shaders/default_UV2_VS.csobin0 -> 628 bytes
-rw-r--r--src/extras/shaders/default_UV2_VS.hlsl54
-rw-r--r--src/extras/shaders/default_UV2_VS.inc55
-rw-r--r--src/extras/shaders/default_UV2_gl3.inc31
-rw-r--r--src/extras/shaders/im2d.vert21
-rw-r--r--src/extras/shaders/im2d_gl3.inc23
-rw-r--r--src/extras/shaders/lighting.h44
-rw-r--r--src/extras/shaders/make.cmd3
-rw-r--r--src/extras/shaders/makeinc.sh5
-rw-r--r--src/extras/shaders/neoGloss.frag26
-rw-r--r--src/extras/shaders/neoGloss.vert29
-rw-r--r--src/extras/shaders/neoGloss_PS.csobin0 -> 444 bytes
-rw-r--r--src/extras/shaders/neoGloss_PS.hlsl20
-rw-r--r--src/extras/shaders/neoGloss_PS.inc39
-rw-r--r--src/extras/shaders/neoGloss_VS.csobin0 -> 764 bytes
-rw-r--r--src/extras/shaders/neoGloss_VS.hlsl35
-rw-r--r--src/extras/shaders/neoGloss_VS.inc66
-rw-r--r--src/extras/shaders/neoGloss_fs_gl3.inc28
-rw-r--r--src/extras/shaders/neoGloss_vs_gl3.inc31
-rw-r--r--src/extras/shaders/neoRim.vert37
-rw-r--r--src/extras/shaders/neoRimSkin.vert48
-rw-r--r--src/extras/shaders/neoRimSkin_VS.csobin0 -> 2404 bytes
-rw-r--r--src/extras/shaders/neoRimSkin_VS.hlsl73
-rw-r--r--src/extras/shaders/neoRimSkin_VS.inc203
-rw-r--r--src/extras/shaders/neoRimSkin_gl3.inc50
-rw-r--r--src/extras/shaders/neoRim_VS.csobin0 -> 1384 bytes
-rw-r--r--src/extras/shaders/neoRim_VS.hlsl61
-rw-r--r--src/extras/shaders/neoRim_VS.inc118
-rw-r--r--src/extras/shaders/neoRim_gl3.inc39
-rw-r--r--src/extras/shaders/neoVehicle.frag28
-rw-r--r--src/extras/shaders/neoVehicle.vert54
-rw-r--r--src/extras/shaders/neoVehicle_PS.csobin0 -> 476 bytes
-rw-r--r--src/extras/shaders/neoVehicle_PS.hlsl34
-rw-r--r--src/extras/shaders/neoVehicle_PS.inc42
-rw-r--r--src/extras/shaders/neoVehicle_VS.csobin0 -> 1896 bytes
-rw-r--r--src/extras/shaders/neoVehicle_VS.hlsl64
-rw-r--r--src/extras/shaders/neoVehicle_VS.inc160
-rw-r--r--src/extras/shaders/neoVehicle_fs_gl3.inc30
-rw-r--r--src/extras/shaders/neoVehicle_vs_gl3.inc56
-rw-r--r--src/extras/shaders/neoWorldVC.frag25
-rw-r--r--src/extras/shaders/neoWorldVC_PS.csobin0 -> 524 bytes
-rw-r--r--src/extras/shaders/neoWorldVC_PS.hlsl25
-rw-r--r--src/extras/shaders/neoWorldVC_PS.inc46
-rw-r--r--src/extras/shaders/neoWorldVC_fs_gl3.inc27
-rw-r--r--src/extras/shaders/simple.frag16
-rw-r--r--src/extras/shaders/simple_fs_gl3.inc18
-rw-r--r--src/extras/shaders/standardConstants.h28
-rw-r--r--src/modelinfo/PedModelInfo.cpp4
-rw-r--r--src/modelinfo/SimpleModelInfo.cpp8
-rw-r--r--src/modelinfo/VehicleModelInfo.cpp9
-rw-r--r--src/objects/ParticleObject.cpp2
-rw-r--r--src/peds/Ped.cpp119
-rw-r--r--src/peds/Ped.h3
-rw-r--r--src/peds/PedChat.cpp6
-rw-r--r--src/peds/PlayerPed.cpp2
-rw-r--r--src/peds/PlayerPed.h2
-rw-r--r--src/peds/Population.cpp3
-rw-r--r--src/render/Antennas.cpp2
-rw-r--r--src/render/Clouds.cpp84
-rw-r--r--src/render/Coronas.cpp188
-rw-r--r--src/render/Coronas.h26
-rw-r--r--src/render/Fluff.cpp198
-rw-r--r--src/render/Fluff.h32
-rw-r--r--src/render/Hud.cpp62
-rw-r--r--src/render/MBlur.cpp68
-rw-r--r--src/render/PlayerSkin.cpp12
-rw-r--r--src/render/PointLights.cpp68
-rw-r--r--src/render/PointLights.h5
-rw-r--r--src/render/Renderer.cpp88
-rw-r--r--src/render/Rubbish.cpp67
-rw-r--r--src/render/ShadowCamera.cpp4
-rw-r--r--src/render/Shadows.cpp2
-rw-r--r--src/render/Shadows.h2
-rw-r--r--src/render/Skidmarks.cpp13
-rw-r--r--src/render/SpecialFX.cpp40
-rw-r--r--src/render/SpecialFX.h1
-rw-r--r--src/render/Sprite.cpp6
-rw-r--r--src/render/Sprite2d.cpp234
-rw-r--r--src/render/Sprite2d.h3
-rw-r--r--src/render/Timecycle.cpp325
-rw-r--r--src/render/Timecycle.h238
-rw-r--r--src/render/Weather.cpp308
-rw-r--r--src/render/Weather.h7
-rw-r--r--src/render/WindModifiers.cpp44
-rw-r--r--src/render/WindModifiers.h7
-rw-r--r--src/rw/ClumpRead.cpp1
-rw-r--r--src/rw/Lights.cpp22
-rw-r--r--src/rw/Lights.h6
-rw-r--r--src/rw/NodeName.cpp4
-rw-r--r--src/rw/RwHelper.cpp37
-rw-r--r--src/rw/RwHelper.h6
-rw-r--r--src/rw/TexRead.cpp38
-rw-r--r--src/rw/TxdStore.cpp16
-rw-r--r--src/rw/VisibilityPlugins.cpp5
-rw-r--r--src/save/GenericGameStorage.cpp25
-rw-r--r--src/save/GenericGameStorage.h2
-rw-r--r--src/save/PCSave.cpp8
-rw-r--r--src/skel/glfw/glfw.cpp22
-rw-r--r--src/skel/platform.h1
-rw-r--r--src/skel/skeleton.cpp9
-rw-r--r--src/skel/skeleton.h3
-rw-r--r--src/skel/win/win.cpp30
-rw-r--r--src/vehicles/Automobile.cpp13
-rw-r--r--src/vehicles/Automobile.h2
-rw-r--r--src/vehicles/Bike.cpp20
-rw-r--r--src/vehicles/Boat.cpp2
-rw-r--r--src/vehicles/Transmission.cpp78
-rw-r--r--utils/gxt/american.txt7979
-rw-r--r--utils/gxt/english.txt7026
-rw-r--r--utils/gxt/french.txt8211
-rw-r--r--utils/gxt/german.txt8028
-rw-r--r--utils/gxt/gxt.exebin70656 -> 125440 bytes
-rw-r--r--utils/gxt/italian.txt8040
-rw-r--r--utils/gxt/russian.txt7979
-rw-r--r--utils/gxt/spanish.txt8031
m---------vendor/librw0
-rw-r--r--vendor/libsndfile/ChangeLog (renamed from libsndfile.32/ChangeLog)0
-rw-r--r--vendor/libsndfile/NEWS (renamed from libsndfile.32/NEWS)0
-rw-r--r--vendor/libsndfile/dist/Win32/libsndfile-1.dll (renamed from libsndfile.32/dist/libsndfile-1.dll)bin1679360 -> 1679360 bytes
-rw-r--r--vendor/libsndfile/dist/Win64/libsndfile-1.dll (renamed from libsndfile.64/dist/libsndfile-1.dll)bin1748992 -> 1748992 bytes
-rw-r--r--vendor/libsndfile/include/sndfile.h (renamed from libsndfile.32/include/sndfile.h)0
-rw-r--r--vendor/libsndfile/include/sndfile.hh (renamed from libsndfile.32/include/sndfile.hh)0
-rw-r--r--vendor/libsndfile/lib/Win32/libsndfile-1.def (renamed from libsndfile.32/lib/libsndfile-1.def)0
-rw-r--r--vendor/libsndfile/lib/Win32/libsndfile-1.lib (renamed from libsndfile.32/lib/libsndfile-1.lib)bin9948 -> 9948 bytes
-rw-r--r--vendor/libsndfile/lib/Win32/pkgconfig/sndfile.pc (renamed from libsndfile.32/lib/pkgconfig/sndfile.pc)0
-rw-r--r--vendor/libsndfile/lib/Win64/libsndfile-1.def (renamed from libsndfile.64/lib/libsndfile-1.def)0
-rw-r--r--vendor/libsndfile/lib/Win64/libsndfile-1.lib (renamed from libsndfile.64/lib/libsndfile-1.lib)bin9760 -> 9760 bytes
-rw-r--r--vendor/libsndfile/lib/Win64/pkgconfig/sndfile.pc (renamed from libsndfile.64/lib/pkgconfig/sndfile.pc)0
-rw-r--r--vendor/mpg123/dist/Win32/libmpg123-0.dll (renamed from mpg123.32/dist/libmpg123-0.dll)bin343552 -> 343552 bytes
-rw-r--r--vendor/mpg123/dist/Win64/libmpg123-0.dll (renamed from mpg123.64/dist/libmpg123-0.dll)bin345088 -> 345088 bytes
-rw-r--r--vendor/mpg123/include/fmt123.h (renamed from mpg123.32/include/fmt123.h)0
-rw-r--r--vendor/mpg123/include/mpg123.h (renamed from mpg123.32/include/mpg123.h)0
-rw-r--r--vendor/mpg123/lib/Win32/libmpg123-0.lib (renamed from mpg123.32/lib/libmpg123-0.lib)bin34076 -> 34076 bytes
-rw-r--r--vendor/mpg123/lib/Win64/libmpg123-0.lib (renamed from mpg123.64/lib/libmpg123-0.lib)bin33342 -> 33342 bytes
m---------vendor/ogg0
-rw-r--r--vendor/openal-soft/COPYING (renamed from openal-soft/COPYING)0
-rw-r--r--vendor/openal-soft/dist/Win32/OpenAL32.dll (renamed from openal-soft/dist/Win32/OpenAL32.dll)bin2172928 -> 2172928 bytes
-rw-r--r--vendor/openal-soft/dist/Win64/OpenAL32.dll (renamed from openal-soft/dist/Win64/OpenAL32.dll)bin2137088 -> 2137088 bytes
-rw-r--r--vendor/openal-soft/include/AL/al.h (renamed from openal-soft/include/AL/al.h)0
-rw-r--r--vendor/openal-soft/include/AL/alc.h (renamed from openal-soft/include/AL/alc.h)0
-rw-r--r--vendor/openal-soft/include/AL/alext.h (renamed from openal-soft/include/AL/alext.h)0
-rw-r--r--vendor/openal-soft/include/AL/efx-creative.h (renamed from openal-soft/include/AL/efx-creative.h)0
-rw-r--r--vendor/openal-soft/include/AL/efx-presets.h (renamed from openal-soft/include/AL/efx-presets.h)0
-rw-r--r--vendor/openal-soft/include/AL/efx.h (renamed from openal-soft/include/AL/efx.h)0
-rw-r--r--vendor/openal-soft/libs/Win32/OpenAL32.def (renamed from openal-soft/libs/Win32/OpenAL32.def)0
-rw-r--r--vendor/openal-soft/libs/Win32/OpenAL32.lib (renamed from openal-soft/libs/Win32/OpenAL32.lib)bin70242 -> 70242 bytes
-rw-r--r--vendor/openal-soft/libs/Win32/libOpenAL32.dll.a (renamed from openal-soft/libs/Win32/libOpenAL32.dll.a)bin60290 -> 60290 bytes
-rw-r--r--vendor/openal-soft/libs/Win64/OpenAL32.def (renamed from openal-soft/libs/Win64/OpenAL32.def)0
-rw-r--r--vendor/openal-soft/libs/Win64/OpenAL32.lib (renamed from openal-soft/libs/Win64/OpenAL32.lib)bin70616 -> 70616 bytes
-rw-r--r--vendor/openal-soft/libs/Win64/libOpenAL32.dll.a (renamed from openal-soft/libs/Win64/libOpenAL32.dll.a)bin58954 -> 58954 bytes
-rw-r--r--vendor/openal-soft/readme.txt (renamed from openal-soft/readme.txt)0
m---------vendor/opus0
m---------vendor/opusfile0
258 files changed, 9279 insertions, 71073 deletions
diff --git a/.github/workflows/reVC_msvc_amd64.yml b/.github/workflows/reVC_msvc_amd64.yml
new file mode 100644
index 00000000..23e7644f
--- /dev/null
+++ b/.github/workflows/reVC_msvc_amd64.yml
@@ -0,0 +1,67 @@
+name: reVC_msvc_amd64
+
+on:
+ pull_request:
+ push:
+ release:
+ types: published
+env:
+ GLEW_VER: "2.1.0"
+ GLFW_VER: "3.3.2"
+ GLEW_BASE: "glew-2.1.0"
+ GLFW_BASE: "glfw-3.3.2.bin.WIN64"
+ GLEW_FILE: "glew-2.1.0-win32.zip"
+ GLFW_FILE: "glfw-3.3.2.bin.WIN64.zip"
+ GLEW_URL: "https://github.com/nigels-com/glew/releases/download/glew-2.1.0/glew-2.1.0-win32.zip"
+ GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN64.zip"
+jobs:
+ build:
+ runs-on: windows-2019
+ strategy:
+ matrix:
+ platform: [win-amd64-librw_d3d9-oal, win-amd64-librw_gl3_glfw-oal]
+ buildtype: [Debug, Release]
+ steps:
+ - name: Add msbuild to PATH
+ uses: microsoft/setup-msbuild@v1.0.1
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'true'
+ - if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
+ name: Download glew
+ uses: carlosperate/download-file-action@v1.0.3
+ with:
+ file-url: ${{env.GLEW_URL}}
+ - if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
+ name: Download glfw
+ uses: carlosperate/download-file-action@v1.0.3
+ with:
+ file-url: ${{env.GLFW_URL}}
+ - if: ${{ matrix.platform }} == "win-amd64-librw_gl3_glfw-mss"
+ name: Unpack archives
+ run: |
+ 7z x ${{env.GLEW_FILE}}
+ 7z x ${{env.GLFW_FILE}}
+ - name: Configure build
+ run: |
+ ./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir64=${{env.GLFW_BASE}}
+ - name: Build
+ run: |
+ msbuild -m build/reVC.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
+ - name: Pack artifacts
+ run: |
+ 7z a reVC_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
+ - name: Upload artifact to actions
+ uses: actions/upload-artifact@v2
+ with:
+ name: reVC_${{matrix.buildtype}}_${{matrix.platform}}
+ path: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
+# - name: Upload artifact to Bintray
+# uses: hpcsc/upload-bintray-docker-action@v1
+# with:
+# repository: reVC
+# package: ${{matrix.buildtype}}_${{matrix.platform}}
+# version: 1.0-$(echo ${GITHUB_SHA}
+# sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
+# username: gtamodding
+# apiKey: ${{secrets.BINTRAY_API_KEY}}
diff --git a/.github/workflows/reVC_msvc_x86.yml b/.github/workflows/reVC_msvc_x86.yml
new file mode 100644
index 00000000..9b1c939c
--- /dev/null
+++ b/.github/workflows/reVC_msvc_x86.yml
@@ -0,0 +1,68 @@
+name: reVC_msvc_x86
+
+on:
+ pull_request:
+ push:
+ release:
+ types: published
+env:
+ GLEW_VER: "2.1.0"
+ GLFW_VER: "3.3.2"
+ GLEW_BASE: "glew-2.1.0"
+ GLFW_BASE: "glfw-3.3.2.bin.WIN32"
+ GLEW_FILE: "glew-2.1.0-win32.zip"
+ GLFW_FILE: "glfw-3.3.2.bin.WIN32.zip"
+ GLEW_URL: "https://github.com/nigels-com/glew/releases/download/glew-2.1.0/glew-2.1.0-win32.zip"
+ GLFW_URL: "https://github.com/glfw/glfw/releases/download/3.3.2/glfw-3.3.2.bin.WIN32.zip"
+jobs:
+ build:
+ runs-on: windows-2019
+ strategy:
+ matrix:
+ platform: [win-x86-librw_d3d9-mss, win-x86-librw_gl3_glfw-mss, win-x86-librw_d3d9-oal, win-x86-librw_gl3_glfw-oal]
+ buildtype: [Debug, Release]
+ steps:
+ - name: Add msbuild to PATH
+ uses: microsoft/setup-msbuild@v1.0.1
+ - uses: actions/checkout@v2
+ with:
+ submodules: 'true'
+ - if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
+ name: Download glew
+ uses: carlosperate/download-file-action@v1.0.3
+ with:
+ file-url: ${{env.GLEW_URL}}
+ - if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
+ name: Download glfw
+ uses: carlosperate/download-file-action@v1.0.3
+ with:
+ file-url: ${{env.GLFW_URL}}
+ - if: ${{ matrix.platform }} == "win-x86-librw_gl3_glfw-mss"
+ name: Unpack archives
+ run: |
+ 7z x ${{env.GLEW_FILE}}
+ 7z x ${{env.GLFW_FILE}}
+ - name: Configure build
+ run: |
+ ./premake5 vs2019 --with-librw --glewdir=${{env.GLEW_BASE}} --glfwdir32=${{env.GLFW_BASE}}
+ - name: Build
+ run: |
+ msbuild -m build/reVC.sln /property:Configuration=${{matrix.buildtype}} /property:Platform=${{matrix.platform}}
+ - name: Pack artifacts
+ run: |
+ 7z a reVC_${{matrix.buildtype}}_${{matrix.platform}}.zip ./bin/${{matrix.platform}}/${{matrix.buildtype}}/*
+ - name: Upload artifact to actions
+ uses: actions/upload-artifact@v2
+ with:
+ name: reVC_${{matrix.buildtype}}_${{matrix.platform}}
+ path: reVC_${{matrix.buildtype}}_${{matrix.platform}}.zip
+# - name: Upload artifact to Bintray
+# uses: hpcsc/upload-bintray-docker-action@v1
+# with:
+# repository: reVC
+# package: ${{matrix.buildtype}}_${{matrix.platform}}
+# version: 1.0-$(echo ${GITHUB_SHA}
+# sourcePath: ./bin/${{matrix.platform}}/${{matrix.buildtype}}
+# username: gtamodding
+# apiKey: ${{secrets.BINTRAY_API_KEY}}
+
diff --git a/.gitignore b/.gitignore
index 61ed7035..c7ebb3d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -348,3 +348,7 @@ healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
+
+vendor/glew-2.1.0/
+vendor/glfw-3.3.2.bin.WIN32/
+vendor/glfw-3.3.2.bin.WIN64/ \ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index bf1e33a5..c9a30c95 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,15 +1,16 @@
-[submodule "librw"]
- path = librw
- url = https://github.com/aap/librw
-[submodule "opus"]
- path = opus
+[submodule "vendor/ogg"]
+ path = vendor/ogg
+ url = https://github.com/xiph/ogg.git
+ branch = master
+[submodule "vendor/opus"]
+ path = vendor/opus
url = https://github.com/xiph/opus.git
branch = master
-[submodule "opusfile"]
- path = opusfile
+[submodule "vendor/opusfile"]
+ path = vendor/opusfile
url = https://github.com/xiph/opusfile.git
branch = master
-[submodule "ogg"]
- path = ogg
- url = https://github.com/xiph/ogg.git
+[submodule "vendor/librw"]
+ path = vendor/librw
+ url = https://github.com/aap/librw.git
branch = master
diff --git a/gamefiles/TEXT/JAPANESE.gxt b/gamefiles/TEXT/JAPANESE.gxt
deleted file mode 100644
index d4b54383..00000000
--- a/gamefiles/TEXT/JAPANESE.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/american.gxt b/gamefiles/TEXT/american.gxt
deleted file mode 100644
index 6d74c7aa..00000000
--- a/gamefiles/TEXT/american.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/french.gxt b/gamefiles/TEXT/french.gxt
deleted file mode 100644
index cb2874f9..00000000
--- a/gamefiles/TEXT/french.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/german.gxt b/gamefiles/TEXT/german.gxt
deleted file mode 100644
index d5a986cf..00000000
--- a/gamefiles/TEXT/german.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/italian.gxt b/gamefiles/TEXT/italian.gxt
deleted file mode 100644
index 95e2dd36..00000000
--- a/gamefiles/TEXT/italian.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/polish.gxt b/gamefiles/TEXT/polish.gxt
deleted file mode 100644
index 1782ef87..00000000
--- a/gamefiles/TEXT/polish.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/russian.gxt b/gamefiles/TEXT/russian.gxt
deleted file mode 100644
index 026222ac..00000000
--- a/gamefiles/TEXT/russian.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/TEXT/spanish.gxt b/gamefiles/TEXT/spanish.gxt
deleted file mode 100644
index 0fdccce3..00000000
--- a/gamefiles/TEXT/spanish.gxt
+++ /dev/null
Binary files differ
diff --git a/gamefiles/models/fonts_j.txd b/gamefiles/models/fonts_j.txd
deleted file mode 100644
index 437e13f9..00000000
--- a/gamefiles/models/fonts_j.txd
+++ /dev/null
Binary files differ
diff --git a/gamefiles/models/fonts_p.txd b/gamefiles/models/fonts_p.txd
deleted file mode 100644
index c05e402e..00000000
--- a/gamefiles/models/fonts_p.txd
+++ /dev/null
Binary files differ
diff --git a/gamefiles/models/fonts_r.txd b/gamefiles/models/fonts_r.txd
deleted file mode 100644
index 4b89e449..00000000
--- a/gamefiles/models/fonts_r.txd
+++ /dev/null
Binary files differ
diff --git a/gamefiles/models/menu.txd b/gamefiles/models/menu.txd
deleted file mode 100644
index 1ffe750e..00000000
--- a/gamefiles/models/menu.txd
+++ /dev/null
Binary files differ
diff --git a/librw b/librw
deleted file mode 160000
-Subproject 99c15d5ed78cc112e1055cc89452dd57df28da5
diff --git a/libsndfile.64/ChangeLog b/libsndfile.64/ChangeLog
deleted file mode 100644
index 62576177..00000000
--- a/libsndfile.64/ChangeLog
+++ /dev/null
@@ -1,9764 +0,0 @@
-2013-04-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Makefile.am
- Make sure checkprograms are built as part of 'make test-tarball'.
- Closes: https://github.com/erikd/libsndfile/issues/37
-
-2013-03-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/dft_cmp.c
- Fix a buffer overflow detected using GCC 4.8's -fsantiize=address runtime
- error checking functionality. This was a buffer overflow in libsndfile's
- test suite, not in the actual library code.
-
-2013-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/gcc_version.m4
- Fix to work with OpenBSD's sed.
-
-2013-03-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ALAC/alac_encoder.c
- Patch from Michael Pruett (author of libaudiofile) to add correct byte
- swapping for the mChannelLayoutTag field.
-
-2013-03-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/bugs.html
- Bugs should bt reported on the github issue tracker.
-
-2013-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Improve sanitization of FLAC_CFLAGS value.
-
-2013-02-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/Makefile.am
- Call python interpreter instead of using '#!' in script. Thanks to Jan
- Stary for reporting this.
-
- * doc/index.html doc/FAQ.html
- Make internal links relative. Patch from Jan Stary.
-
-2013-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_endswap.def src/test_endswap.tpl
- Add tests for psf_put_be32() and psf_put_be64().
-
- * src/sfendian.h src/test_endswap.(def|tpl)
- Add functions psf_get_be(16|32|64) with tests.
- These are needed for platforms where un-aligned accesses cause bus faults.
-
- * src/ALAC/ag_enc.c src/ALAC/alac_decoder.c
- Replace all un-aligned accesses with safe alternatives.
- Closes: https://github.com/erikd/libsndfile/issues/19
-
-2013-02-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.h
- Add big endian versions of H2BE_16 and H2BE_32.
-
-2013-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ALAC/
- Replace Apple endswap routines with ones from libsndfile.
-
- * merge from libsndfile-cart repo
- Add ability to set and get a cart chunk with WAV and RF64.
- Orignal patch by Chris Roberts <c.roberts@csrfm.com> required a number of
- tweaks.
-
-2013-02-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Bump SF_HEADER_LEN from 8192 to 12292, the value it was in the 1.0.25
- release.
-
-2013-02-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alac.c
- Fix segfault when encoding 8 channel files.
- Closes: https://github.com/erikd/libsndfile/issues/30
-
-2013-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ALAC/EndianPortable.c
- Fall back to compiler's __BYTE_ORDER__ for endian-ness detection.
-
-2013-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/common.h src/ima_adpcm.c src/ms_adpcm.c src/paf.c
- Drop tests for and #ifdef hackery for C99 struct flexible array feature.
- libsndfile assumes the compiler supports most of the ISO C99 standard.
-
- * src/alac.c
- Fix valgrind invalid realloc. Reported by nu774.
- Closes: https://github.com/erikd/libsndfile/issues/31
-
-2013-02-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alac.c
- The 'pakt' chunk header should now be written correctly.
- Closes: https://github.com/erikd/libsndfile/issues/24
-
- * configure.ac Makefile.am
- Use PKG_INSTALLDIR when it exists. Suggestion from Christoph Thompson.
- Closes: https://github.com/erikd/libsndfile/pull/28
-
-2013-02-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/caf.c
- Read the ALAC 'pakt' header and stash the values.
-
- * src/sfendian.h
- Add functions psf_put_be64() and psf_put_be32().
-
- * src/alac.c
- Start work on filling on the 'pakt' chunk header.
-
-2013-02-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Add missing opening <P> tag.
-
- * src/alac.c
- Increase ALAC_BYTE_BUFFER_SIZE to 82000.
-
-2013-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Improve question #8.
-
-2013-01-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg_opus.c
- Add skeleton implementation so someone else can run with it.
-
-2012-12-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/dwd.c src/rx2.c src/txw.c
- Fix for compiling when configured with --enable-experimental. Thanks to
- Eric Wong for reporting this.
-
-2012-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac programs/sndfile-play.c
- OS X 10.8 uses a different audio API to previous versions.
- Fix compile failure on by disabling sndfile-play on this version.
- Someone needs to supply code for the new API.
-
-2012-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Octave/Makefile.am Octave/octave_test.sh
- Fix 'make distcheck'.
-
-2012-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/octave.m4
- Relax constraints on Octave version.
-
-2012-10-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl
- Improve compare_*_or_die() functions.
-
- * src/command.c
- Fix bug reported by Keiler Florian. When reading short or int data from a
- file containing float data, and setting SFC_SET_SCALE_FLOAT_INT_READ to
- SF_TRUE would fail 3, 5, 7 and other channels counts. Problem was that
- psf_calc_signal_max() was not calculating the signal max correctly.
- Calculation of the signal max was failing because it was trying to read
- a sample count that was not an integer multiple of the channel count.
-
- * tests/channel_test.c tests/Makefile.am tests/test_wrapper.sh.in
- Add test for the above.
-
-2012-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Added a constructor to allow the use of SF_VIRTUAL_IO. Patch from
- DannyDaemonic : https://github.com/erikd/libsndfile/pull/20
-
-2012-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/octave.html
- Fix link to octave.sourceforge.net. Thanks to IOhannes m zmoelnig.
-
- * src/mat5.c
- Allow reading of mat5 files without a specified sample rate (default to
- 44.1kHz). Thanks to IOhannes m zmoelnig.
-
-2012-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- Error out if channel count is zero. Bug report from William ELla via
- launchpad:
- https://bugs.launchpad.net/ubuntu/+source/libsndfile/+bug/1036831
-
-2012-08-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac programs/sndfile-play.c
- Patch from Ricci Adams to use OSX's AudioQueues on OSX 10.7 and greater.
-
-2012-07-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/common.c
- Accept "ogg" as a file extention for Ogg/Vorbis files.
-
-2012-06-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Make sure any previously allocated FLAC stream encoder and stream decoder
- objects are deleted before a new one is allocated.
-
-2012-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl
- Rename gen_lowpass_noise_float() to gen_lowpass_signal_float() and add a
- sine wave component so that different FLAC compression levels can be
- tested.
-
- * src/sndfile.h.in doc/command.html
- Add SFC_SET_COMPRESSION_LEVEL and document it.
-
- * src/sndfile.c
- Catch SFC_SET_VBR_ENCODING_QUALITY command and implement it as the inverse
- of SFC_SET_COMPRESSION_LEVEL.
-
- * src/ogg_vorbis.c src/flac.c
- Implement SFC_SET_COMPRESSION_LEVEL command.
-
- * tests/test_wrapper.sh.in tests/compression_size_test.c
- Use the compression_size_test on FLAC as well.
-
-2012-06-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/
- Rename vorbis_test.c -> compression_size_test.c so it can be extended to
- test FLAC as well.
-
-2012-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c
- Fix a bug where a file with a 'bext' chunk with a zero length coding
- history field would get corrupted when the file was closed.
- Reported by Paul Davis of the Ardour project.
-
- * src/test_broadcast_var.c
- Add a test for the above.
-
-2012-05-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- sf_format_check: For SF_FORMAT_AIFF, reject endian-ness setttings for
- non-PCM formats.
-
-2012-04-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix regression in handling of odd length SSND chunks.
- Thanks Olivier Tristan for the example file.
-
- * src/aiff.c src/wav.c
- Exit parser loop when marker == 0.
-
-2012-04-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Fix text. Thanks to Richard Collins.
-
-2012-03-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/caf.c
- Exit parse loop if the marker is zero. Pass jump offsets as size_t instead
- of int.
-
-2012-03-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alac.c
- Fix segfault when decoding CAF/ALAC file with more than 4 channels.
- Fixes github issue #8 reported by Charles Van Winkle.
-
-2012-03-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Change 'typedef SF_CHUNK_ITERATOR { ... } SF_CHUNK_ITERATOR' into 'struct
- SF_CHUNK_ITERATOR { ... }' to prevent older compilers from complaining of
- re-typedef-ing of SF_CHUNK_ITERATOR.
-
- * configure.ac
- Fix if test for empty $prefix.
-
-2012-03-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c tests/chunk_test.c
- Reworking of custom chunk handling code.
- - Memory for the iterator is now attached to the SF_PRIVATE struct and
- freed one sf_close().
- - Rename sf_create_chunk_iterator() -> sf_get_chunk_iterator().
- - Each SNDFILE handle never has more than one SF_CHUNK_ITERATOR handle.
-
- * tests/string_test.c
- Fix un-initialised char buffer.
-
-2012-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c tests/chunk_test.c
- Add improved handling of custom chunk getting and settings. Set of patches
- from IOhannes m zmoelnig submitted via github pull request #6.
-
- * src/alac.c
- Fix calculated frame count for files with zero block length.
-
-2012-03-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/avr.c
- Remove double assignment to psf->endian. Thanks Kao Dome.
-
- * src/gsm610.c
- Fix clearing of buffers. Thanks Kao Dome.
-
- * src/paf.c
- Remove duplicate code. Thanks Kao Dome.
-
- * src/test_strncpy_crlf.c
- Fix minor error in test. Thanks Kao Dome.
-
- * src/common.h src/*.c
- Fix a bunch of valgrind errors.
-
-2012-03-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix typo in error string 'Uknown' -> 'Unknown'.
-
- * tests/fix_this.c
- Fix potential int overflow.
-
-2012-03-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alac.c
- Fix decoding of last block so that the decode length is not a multiple of
- the block length. Fixes github issue #4 reported by Charles Van Winkle.
-
- * src/sfconfig.h src/sfendian.h
- Fix for MinGW cross compiling. Use '#if (defined __*66__)' instead of
- '#if __*86__' because the MinGW header use '#ifdef __x86_64__'.
-
-2012-03-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ALAC/ src/alac.c
- Unify the interface between libsndfile and Apple ALAC codec. Regardless of
- file bit width samples are now passed between the two as int32_t that are
- justified towards the most significant bit. Without this modification, 16
- conversion functions would have been needed between the libsndfile (short,
- int, float, double) types and the ALAC types (16, 20, 24 and 32 bit). With
- this mod, only 4 are needed.
-
- * tests/floating_point_test.tpl tests/write_read_test.(def|tpl)
- Add tests for 20 and 24 bit ALAC/CAF files.
-
- * src/command.c
- Add ALAC/CAF to the SFC_GET_FORMAT_* commands. Fixes github issue #5.
-
- * configure.ac
- Only use automake AM_SLIENT_RULES where supported. Thanks Dave Yeo.
-
- * tests/pipe_test.tpl
- Disable tests on OS/2. Thanks Dave Yeo.
-
-2012-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/sfconfig.h src/sfendian.h
- For GCC, use inline assembler for endian swapping. This should work with
- older versions of GCC like the one currently used in OS/2.
-
-2012-03-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alac.c
- Make sure temp file gets opened in binary mode.
-
- * src/alac.c src/common.c src/common.h
- Fix function alac_write16_d().
-
- * tests/floating_point_test.tpl
- Add tests for 16 bit ALAC/CAF.
-
- * src/alac.c src/common.c src/common.h
- Add support for 32 bit ALAC/CAF files.
-
- * tests/floating_point_test.tpl tests/write_read_test.tpl
- Add tests for 32 bit ALAC/CAF files.
-
-2012-03-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/
- Refactor chunk storage so it work on big as well as little endian CPUs.
-
- * tests/chunk_test.c
- Clean up error messages.
-
- * src/sfendian.h src/*.c
- Rename endian swapping macros and add ENDSWAP_64 and BE2H_64.
-
- * configure.ac
- Detect presence of <x86intrin.h> header file.
-
- * src/sfendian.h
- Use <x86intrin.h> intrinsics (ie for MinGW) when <byteswap.h> is not
- present.
- Make ENDSWAP_64() work with i686-w64-mingw32 compiler.
-
- * src/ALAC/EndianPortable.c
- Add support for __powerpc__.
-
- * src/sfconfig.h
- Make sure HAVE_X86INTRIN_H is either 1 or 0.
-
-2012-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ALAC/*
- Big dump of code for Apple's ALAC file format. The copyyright to this code
- is owned by Apple who have released it under an Apache style license. A few
- small modifications were made to allow this to be integrated into libsndfile
- but unfortunately the history of those changes were lost because they were
- developed in a Bzr tree and during that time libsndfile moved to Git.
-
- * src/alac.c src/caf.c src/common.[ch] src/Makefile.am src/sndfile.h.in
- src/sndfile.c
- Hook new ALAC codec in.
-
- * programs/sndfile-convert.c
- Add support for alac codec.
-
- * tests/write_read_test.tpl
- Expand tests to cover ALAC.
-
-2012-03-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/wav.c
- Fix a couple of regressions from version 1.0.25.
-
-2012-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/strings.c
- Minor refactoring. Make sure that the memory allocation size if always > 0
- to avoid undefined behaviour.
-
-2012-02-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/chunk.c
- Fix buffer overrun introduced in recently added chunk logging. This chunk
- logging has not yet made it to a libsndfile release version. Thanks to
- Olivier Tristan for providing an example file.
-
- * src/wav.c
- Fix handling of odd sized chunks which was causing the parser to lose some
- chunks. Thanks to Olivier Tristan for providing an example file.
-
-2012-02-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/util.tpl
- Used gnu_printf format checking with mingw-w64 compiler.
-
- * tests/header_test.tpl
- Printf format fixes.
-
-2012-02-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/extra_pkg.m4
- Update PKG_CHECK_MOD_VERSION macro to add an AC_TRY_LINK step. This fix
- allows the configure process to catch attempts to link incompatible
- libraries. For example, linking 32 bit version of eg libFLAC to a 64 bit
- version of libsndfile will now fail. Similarly, when cross compiling
- libsndfile from Linux to Windows linking the Linux versions of a library
- to the Windows version of libsndfile will now also fail.
-
- * src/sndfile.h.in src/sndfile.c src/common.h src/create_symbols_file.py
- Add API function sf_current_byterate().
-
- * src/dwvw.c src/flac.c src/ogg_vorbis.c src/sds.c
- Add codec specific handlers for current byterate.
-
- * tests/floating_point_test.tpl
- Add initial test for sf_current_byterate().
-
-2012-02-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.[ch]
- Add function psf_decode_frame_count().
-
- * src/dwvw.c
- Fix a termnation bug that caused the decoder to go into an infinite loop.
-
-2012-02-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fix a regression in the WAV header parser. Thanks to Olivier Tristan for
- bug report and the example file.
-
-2012-02-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Return error when SF_BROADCAST_INFO struct has bad coding_history_size.
- Thanks to Alex Weiss for the report.
-
-2012-02-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c src/flac.c src/g72x.c src/ogg_vorbis.c src/wav_w64.c
- Don't fake psf->bytewidth values.
-
-2012-02-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/string_test.c
- Fix valgrind warnings.
-
- * src/common.h src/sndfile.c src/strings.c
- Make string storage dynamically allocated.
-
- * src/sndfile.c
- Add extra validation for custom chunk handling.
-
-2012-02-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Improve handlling unknown chunk types. Thanks to Olivier Tristan for sending
- example files.
-
- * src/utils.tpl
- Add GCC specific testing for format string parameters for exit_if_true().
-
- * tests/*.c tests/*.tpl
- Fix all printf format warnings.
-
- * programs/sndfile-play.c
- Remove un-needed OSX include <Carbon.h>. Thanks jamesfmilne for github
- issue #3.
-
- * tests/chunk_test.c
- Extend custom chunk test.
-
-2012-02-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Jump over some more chunk types while parsing.
-
-2012-02-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/strings.c
- Change way strings are stored in SF_PRIVATE in preparation for dynamically
- allocating the storage.
-
-2012-02-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src*.c
- Improve encapsulation of string data in SF_PRIVATE.
-
-2012-02-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src*.c
- Remove the buffer union from SF_PRIVATE. Most uses of this have been
- replaced with a BUF_UNION that is allocated on the stack.
-
-2012-01-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src*.c
- Rename logbuffer field of SF_PRIVATE to parselog and reduce its size.
- Put the parselog buffer and the index inside a struct within SF_PRIVATE.
-
-2012-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fix typo, FLAC_CLFAGS -> FLAC_CFLAGS. Thanks to Jeremy Friesner.
-
-2012-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/ogg.c
- Fix misleading error message when trying to create an SF_FORMAT_OGG file
- with anything other than SF_FORMAT_FILE. Thanks to Charles Van Winkle for
- the bug report. Github issue #1.
-
-2012-01-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/wav.c
- Allow files opened in RDWR mode with string data in the tailer to be
- extended. Thanks to Bodo for the patch.
-
- * tests/string_test.c
- Add tests for the above changes (patch from Bodo).
-
-2012-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Refactor reading of chunk size and use of psf_store_read_chunk().
-
- * src/(caf|wav).c
- Correct storing of chunk offset.
-
-2012-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/wav.c src/common.h
- Refactor common code into src/common.h.
-
- * src/caf.c
- Make custom chunks work for CAF files.
-
- * tests/chunk_test.c tests/test_wrapper.sh.in
- Test CAF files with custom chunks.
-
- * src/sndfile.c
- Prevent psf->codec_close() being called more than once.
-
-2012-01-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-cmp.c
- Catch the case where the second file has more frames than the first.
-
-2012-01-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/create_symbols_file.py
- Add sf_set_chunk/sf_get_chunk_size/sf_get_chunk_data.
-
-2011-12-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/chunk_test.c tests/Makefile.am
- New test for custom chunks.
-
- * src/aiff.c src/chunk.c src/common.h src/sndfile.c
- Make custom chunks work on AIFF files.
-
- * src/wav.c
- Make custom chunks work on WAV files (includes refactoring).
-
-2011-11-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/common.h src/sndfile.c
- Start working on setting/getting chunks.
-
-2011-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/binheader_writef_check.py src/create_symbols_file.py
- Make it work for Python 2 and 3. Thanks Michael.
-
-2011-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * libsndfile.spec.in
- Change field name 'URL' to 'Url'.
-
- * src/sndfile.h.in
- Add SF_SEEK_SET/CUR/END.
-
-2011-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/id3.c
- Fix a stack overflow that can occur when parsing a file with multiple
- ID3 headers which would cause libsndfile to go into an infinite recursion
- until it blew the stack. Thanks to Anders Svensson for supplying an example
- file.
-
-2011-10-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/double64.c src/float32.c src/common.h
- Make (float32|double_64)_(be|le)_read() functions const correct.
-
-2011-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.h
- Minor tweaking of types. Cast to ptr to correct final type rather void*.
-
- * programs/sndfile-play.c tests/utils.tpl
- Fix compiler warnings with latest MinGW cross compiler.
-
-2011-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Use the non-deprecated resource fork name on OSX. Thanks to Olivier Tristan.
-
-2011-10-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Jump over the 'olym' chunks when parsing.
-
-2011-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Remove windows only truncate() implementation.
-
-2011-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c src/sndfile.c
- Make sure 23 bit PCM SD2 files are readable/writeable.
-
- * tests/write_read_test.tpl
- Add tests for 32 bit PCM SD2 files.
-
-2011-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Use AC_SYS_LARGEFILE instead of AC_SYS_EXTRA_LARGEFILE as suggested by
- Jan Willies.
-
-2011-08-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac Makefile.am
- Move ACLOCAL_AMFLAGS setup to Makefile.am.
-
-2011-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Merge two separate blocks of SFC_SET_VBR_ENCODING_QUALITY documentation.
-
- * src/paf.c
- Replace ppaf24->samplesperblock with a compile time constant.
-
-2011-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg_vorbis.c
- Fix return value of SFC_SET_VBR_ENCODING_QUALITY command.
-
- * doc/command.html
- Document SFC_SET_VBR_ENCODING_QUALITY, SFC_GET/SET_LOOP_INFO and
- SFC_GET_INSTRUMENT.
-
- * NEWS README configure.ac doc/*.html
- Updates for 1.0.25.
-
-2011-07-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfconfig.h
- Add handling for HAVE_SYS_WAIT_H.
-
- * Makefile.am src/Makefile.am tests/Makefile.am
- Add 'checkprograms' target.
-
-2011-07-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/sndfile.c
- Purge SF_ASSERT macro. Use standard C assert instead.
-
- * src/paf.c src/common.h src/sndfile.c
- Fix for Secunia Advisory SA45125, heap overflow (heap gets overwritten with
- byte value of 0) due to integer overflow if PAF file handler.
-
- * src/ima_adpcm.c src/ms_adpcm.c src/paf.c
- Use calloc instead of malloc followed by memset.
-
- * tests/utils.tpl
- Clean up use of memset.
-
-2011-07-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c
- Fix log message.
-
- * tests/format_check_test.c
- Fix compiler warnings.
-
-2011-07-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix error message for erro code SFE_ZERO_MINOR_FORMAT.
-
- * tests/format_check_test.c
- Add a test to for SF_FINFO format field validation.
-
- * src/ogg.c src/ogg_vorbis.c src/ogg.h src/ogg_pcm.c src/ogg_speex.c
- src/common.h src/Makefile.am
- Move vorbis specific code to ogg_vorbis.c, add new files for handling PCM
- and Speex codecs in an Ogg container. The later two are only enabled with
- ENABLE_EXPERIMENTAL_CODE config variable.
-
-2011-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/strings.c
- Clean up and refactor storage of SF_STR_SOFTWARE.
-
-2011-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in doc/api.html
- Fix definition of SF_STR_LAST and update SF_STR_* related docs. Thanks to
- Tim van der Molen for the patch.
-
-2011-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-interleave.c
- Fix handling of argc. Thanks to Marius Hennecke.
-
- * src/wav_w64.c
- Accept broken WAV files with blockalign == 0. Thanks to Olivier Tristan for
- providing example files.
-
- * src/wav.c
- Jump over 'FLLR' chunks.
-
-2011-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Fix -Wundef warning due to ENABLE_SNDFILE_WINDOWS_PROTOTYPES.
-
- * configure.ac
- Add -Wundef to CFLAGS.
-
- * src/ogg.c
- Fix -Wunder warning.
-
-2011-05-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Use int64_t instead of off_t when they are the same size.
-
- * src/Makefile.am tests/Makefile.am
- Use check_PROGRAMS instead of noinst_PROGRAMS where appropriate.
-
-2011-05-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Don't allow unknown and/or un-editable chunks to prevent the file from being
- opened in SFM_RDWR mode.
-
-2011-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/format_check_test.c
- Fix segfault in test program.
-
-2011-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/format_check_test.c
- New test program to check to make sure that sf_open() and sf_check_format()
- agree as to what is a valid program.
-
- * tests/Makefile.am tests/test_wrapper.sh.in
- Hook into build and test runner.
-
- * src/sndfile.c
- Fix some sf_format_check() problems. Thanks to Charles Van Winkle for the
- notification.
-
-2011-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/caf.c
- Add validation to size of 'data' chunk and fix size of written 'data'
- chunk. Thanks to Michael Pruett for reporting this.
-
-2011-03-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/* tests/* programs/*
- Fix a bunch of compiler warnings with gcc-4.6.
-
-2011-03-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/util.tpl
- Add NOT macro to util.h.
-
- * src/strings.c
- Fix handling of SF_STR_SOFTWARE that resulted in a segfault due to calling
- strlen() on an unterminated string. Thanks to Francois Thibaud for reporting
- this problem.
-
- * tests/string_test.c
- Add test for SF_STR_SOFTWARE segfault bug.
-
- * configure.ac
- Sanitize FLAC_CFLAGS value supplied by pkg-config which returns a value of
- '-I${includedir}/FLAC'. However FLAC also provides an include file
- <assert.h> which clashes with the Standard C header of the same name. The
- solution is strip the 'FLAC' part off the end and include all FLAC headers
- as <FLAC/header.h>.
-
- * configure.ac src/Makefile.am
- Use non-recursive make in src/ directory.
-
-2011-03-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * NEWS README docs/*.html
- Updates for 1.0.24 release.
-
-2011-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fix up usage of sed (should not assume GNU sed).
-
- * M4/add_(c|cxx)flags.m4
- Test flags in isolation.
-
- * tests/cpp_test.cc
- Fix a broken test (test segfaults). Report by Dave Flogeras.
-
-2011-03-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/common.[ch]
- Add function program_name() which returns the program name minus the path
- from argv [0].
-
- * programs/*.c programs/Makefile.am
- Use program_name() where appropriate. Fix build.
-
-2011-03-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- For u-law and A-law files, write an 18 byte 'fmt ' chunk instead of a 16
- byte one. Win98 accepts files with a 16 but not 18 byte 'fmt' chunk. Later
- version accept 18 byte but not 16 byte.
-
-2011-03-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Add examples for question 12.
-
- * doc/libsndfile.css.in
- Add tweaks for h4 element.
-
- * doc/api.html
- Add documentation for virtual I/O functionality. Thanks to Uli Franke.
-
- * tests/util.tpl
- Add static inline functions sf_info_clear() and sf_info_setup().
-
- * tests/(alaw|dwvw|ulaw)_test.c
- Use functions sf_info_clear() and sf_info_setup().
-
-2011-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fail more gracefully if pkg-config is missing. Suggestion from Brian
- Willoughby.
-
-2011-02-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Use size_t instead of int for size params with varargs.
-
-2011-02-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Update supported platforms with more Debian platforms and Android.
-
-2011-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add an LPCWSTR version of the SndfileHandle constructor to the SndfileHandle
- class definition. Thanks to Eric Eizenman for pointing out this was missing.
-
- * tests/cpp_test.cc
- Add test for LPCWSTR version of the SndfileHandle constructor.
-
-2011-01-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-play.c
- Remove cruft.
-
-2010-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add methods rawHandle() and takeOwnership(). Thanks to Tim Blechmann for
- the patch.
-
- * tests/cpp_test.cc
- Add tests for above two methods. Also supplied by Tim Blechmann.
-
-2010-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Add mention of use of sf_strerror() when sf_open() fails.
-
-2010-11-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Make TYPEOF_SF_COUNT_T int64_t where possible. This may fix problems where
- people are compiling on a 64 bit system with the GCC -m32 flag.
-
- * src/sndfile.h.in
- Fix comments on sf_count_t.
-
-2010-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Handle non-zero offset field in SSND chunk. Thanks to Michael Chinen.
-
-2010-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Sed fix for FreeBSD. Thanks Tony Theodore.
-
-2010-10-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * shave.in M4/shave.m4
- Fix shave invocation of windres compiler. Thanks Damien Lespiau (upstream
- shave author).
-
- * configure.ac M4/shave.m4 shave-libtool.in shave.in
- Switch from shave to automake-1.11's AM_SILENT_RULES.
-
-2010-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * shave-libtool.in shave.in
- Sync to upstream version.
-
- * src/rf64.c
- More work to make the parser more robust and accepting of mal-formed files.
-
-2010-10-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add functions psf_strlcpy() and psf_strlcat().
-
- * src/broadcast.c src/sndfile.c src/strings.c src/test_main.c
- src/test_main.h src/test_strncpy_crlf.c
- Use functions psf_strlcpy() and psf_strlcat() as appropriate.
-
- * tests/string_test.c
- Add tests for SF_STR_GENRE and SF_STR_TRACKNUMBER.
-
- * src/rf64.c
- Fix size of 'ds64' chunk when writing RF64.
-
-2010-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/*.c
- Add the libsndfile version to the usage message of all programs.
-
-2010-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/version-metadata.rc.in src/Makefile.am
- Add version string resources to the windows DLL.
-
- * doc/api.html
- Update to add missing SF_FORMAT_* values. Closed Debian bug #545257.
-
- * NEWS README configure.ac doc/*.html
- Updates for 1.0.23 release.
-
-2010-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pedantic-header-test.sh.in
- Handle unusual values of CC environment variable.
-
- * src/rf64.c
- Minor tweaks and additional sanity checking.
-
- * src/Makefile.am src/binheader_writef_check.py
- Use python 2.6.
-
-2010-10-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add a missing 'inline' before a constructor defintion.
-
-2010-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add macro NOT.
-
- * src/rf64.c
- Minor tweaks.
-
- * Makefile.am */Makefile.am
- Add *~ to CLEANFILES.
-
-2010-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix a typo in the error string for SFE_OPEN_PIPE_RDWR. Thanks to Charles
- Van Winkle for the report.
-
-2010-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c src/ogg.c src/sndfile.h.in src/strings.c src/wav.c
- Add ability to read/write tracknumber and genre to flac/ogg/wav files.
- Thanks to Matti Nykyri for the patch.
-
- * src/common.h src/broadcast.c src/strings.c
- Add function psf_safe_strncpy() and use where appropriate.
-
-2010-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * NEWS README configure.ac doc/*.html
- Updates for 1.0.22 release.
-
-2010-10-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/broadcast.c src/rf64.c src/sndfile.c src/wav.c
- Rewrite of SF_BROADCAST_INFO handling.
-
- * src/test_broadcast_var.c tests/command_test.c
- Tweak SF_BROADCAST_INFO tests.
-
- * src/test_broadcast_var.c
- Fix OSX stack check error.
-
-2010-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sds.c
- Set sustain_loop_end to 0 as suggested by Brian Lewis.
-
-2010-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sds.c
- Make sure the correct frame count gets written into the header.
-
- * tests/write_read_test.tpl
- Don't allow SDS files to have a long frame count.
-
-2010-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sds.c
- Apply a pair of patches from Brian Lewis to fix the packet number location
- and the checksum.
-
-2010-09-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/file_io.c src/ogg.c src/rf64.c src/sndfile.c
- src/strings.c src/test_audio_detect.c src/test_strncpy_crlf.c
- src/wav.c tests/pcm_test.tpl
- Fix a bunch of minor issues found using static analysis.
-
-2010-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_broadcast_var.c
- New file containing tests for broadcast_set_var().
-
- * src/Makefile.am src/test_main.[ch]
- Hook test_broadcast_var.c into tests.
-
-2010-08-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c src/common.(c|h)
- Move function strncpy_crlf() to src/common.c so the function can be tested
- in isolation.
-
- * src/test_strncpy_crlf.c
- New file.
-
- * src/Makefile.am src/test_main.[ch]
- Hook test_strncpy_crlf.c into tests.
-
-2010-08-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Move code around to make comments make sense.
-
- * src/broadcast.c
- Add debugging code that is disabled by default.
-
-2010-08-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- When the file meta data says the file has zero frames set psf->sf.frames
- to SF_COUNT_MAX. Fixes Debian bug #590752.
-
- * programs/sndfile-info.c
- Print 'unknown' if frame count == SF_COUNT_MAX.
-
-2010-06-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Only support writing mono SVX files. Multichannel SVX files are not
- interleaved and there is no support infrastructure to cache and write
- multiple channels to create a non-interleaved file.
-
- * src/file_io.c
- Don't call close() on a file descriptor of -1. Thanks to Jeremy Friesner
- for the bug report.
-
-2010-06-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add macro SF_ASSERT.
-
- * src/sndfile.c
- Use SF_ASSERT to ensure sizeof (sf_count_t) == 8.
-
- * src/svx.c
- Add support for reading and writing stereo SVX files.
-
-2010-05-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- When compiling with x86_64-w64-mingw32-gcc link with -static-libgcc flags.
-
- * programs/common.c programs/sndfile-metadata-set.c
- Update metadata after the audio data is copied. Other minor fixes. Patch
- from Marius Hennecke.
-
-2010-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- Fix a regression reported by Hugh Secker-Walker.
-
- * src/api.html
- Add comment about sf_open_fd() not working on Windows if the application
- and the libsndfile DLL are linked to different versions of the Microsoft
- C runtime DLL.
-
-2010-04-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pedantic-header-test.sh.in
- Fix 'make distcheck'.
-
-2010-04-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pedantic-header-test.sh.in
- New file to test whether sndfile.h can be compiled with gcc's -pedantic
- flag.
-
- * configure.ac tests/test_wrapper.sh.in
- Hook pedantic-header-test into test suite.
-
- * src/sndfile.h.in
- Fix -pedantic warning.
-
-2010-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-salvage.c programs/Makefile.am
- New program to salvage the audio data from WAV/WAVEX/AIFF files which are
- greater than 4Gig in size.
-
-2010-04-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-convert.c
- Fix valgrind warning.
-
-2010-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-cmp.c
- When files differ in the PCM data, also print the difference offset.
- Minor cleanup.
-
-2010-03-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Don't use the 'twos' marker for 24 and 32 bit PCM, use 'in24' and 'in32'
- instead. Thanks to Paul Davis (Ardour) for this suggestion.
-
-2010-02-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Clean up configure report.
-
- * tests/utils.tpl
- Add functions test_read_raw_or_die and test_write_raw_or_die.
-
- * tests/rdwr_test.(def|tpl) tests/Makefile.am
- Add new test program and hook into build.
-
- * src/sndfile.c
- Fix minor issues with sf_read/write_raw(). Bug reported by Milan Křápek.
-
- * tests/test_wrapper.sh.in
- Add rdwr_test to the test wrapper script.
-
-2010-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Remove -fpascal-strings from OSX's OS_SPECIFIC_CFLAGS.
-
- * programs/common.[ch] programs/sndfile-metadata-set.c
- Apply a patch from Robin Gareus allowing the setting of the time reference
- field of the BEXT chunk.
-
-2010-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ima_adpcm.c
- Add a fix from Jonatan Liljedahl to handle predictor overflow when decoding
- IMA4.
-
-2010-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add a constructor which takes an existing file descriptor and then calls
- sf_open_fd(). Patch from Sakari Bergen.
-
-2010-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-deinterleave.c programs/sndfile-interleave.c
- Improve usage messages.
-
-2010-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/id3.c src/Makefile.am
- Add new file src/id3.c and hook into build.
-
- * src/sndfile.c src/common.h
- Detect and skip and ID3 header at the start of the file.
-
-2010-01-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/common.c
- Fix update_strings() copyright, comment, album and license are correctly
- written. Thanks to Todd Allen for reporting this.
-
- * man/Makefile.am
- Change GNU makeism to something more widely supported. Thanks to Christian
- Weisgerber for reporting this.
-
- * configure.ac programs/Makefile.am programs/sndfile-play.c
- Apply patch from Christian Weisgerber and Jacob Meuserto add support for
- OpenBSD's sndio.
-
-2010-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Discourage the use of sf_read/write_raw().
-
-2009-12-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Test for Unix pipe() and waitpid() functions.
-
- * src/sfconfig.h tests/pipe_test.tpl
- Disable pipe_test if pipe() and waitpid() aren't available.
-
-2009-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/Makefile.am src/create_symbols_file.py
- src/make-static-lib-hidden-privates.sh
- Change name of generated file src/Symbols.linux to Symbols.gnu-binutils and
- and use the same symbols file for other systems which use GNU binutils like
- Debian's kfreebsd.
-
- * M4/shave.m4 shave.in
- Update shave files from upstream.
-
-2009-12-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * man/sndfile-metadata-get.1
- Fix typo.
-
- * man/sndfile-interleave.1 man/Makefile.am
- New man page.
-
-2009-12-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c
- When decoding to short or int, clip the decoded signal to [-1.0, 1.0] if
- its too hot. Thanks to Dmitry Baikov for suggesting this.
-
- * NEWS README doc/*.html
- Updates for 1.0.21.
-
-2009-12-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-jackplay.c man/sndfile-jackplay.1
- Remove these which will now be in found in the sndfile-tools package.
-
- * programs/Makefile.am man/Makefile.am
- Remove build rules for sndfile-jackplay.
-
- * configure.ac
- Remove detection of JACK Audio Connect Kit.
-
- * programs/sndfile-concat.c man/sndfile-concat.1
- Add new program with man page.
-
- * man/Makefile.am programs/Makefile.am
- Hook sndfile-concat into build system.
-
-2009-12-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/error_test.c
- Don't terminate when sf_close() returns zero in error_close_test().
- It seems that Windows 7 behaves differently from earlier versions of
- Windows.
-
-2009-12-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac M4/*.m4
- Rename all custom macros from AC_* to MN_*.
-
- * programs/sndfile-interleave.c
- Make it actually work.
-
-2009-12-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/*.html configure.ac
- Corrections and clarifications courtesy of Robin Forder.
-
- * programs/sndfile-convert.c programs/common.[ch]
- Move some code from convert to common for reuse.
-
- * programs/sndfile-interleave.c programs/sndfile-interleave.c
- Add new programs sndfile-interleave and sndfile-deinterleave.
-
- * programs/Makefile.am
- Hook new programs into build.
-
-2009-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/create_symbols_file.py tests/stdio_test.c tests/win32_test.c
- Minor OS/2 tweaks as suggested by David Yeo.
-
- * tests/multi_file_test.c
- Fix file creation flags on windows. Thanks to Bruce Sharpe.
-
- * src/sf_unistd.h
- Set all group and other file create permssions to zero.
-
- * tests/win32_test.c
- Add a new test.
-
-2009-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/print.css doc/*.html
- Add a print stylesheet and update all HTML documents to reference it.
- Thanks to Aditya Bhargava for suggesting this.
-
- * doc/index.html
- Minor corrections.
-
-2009-11-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * sndfile.pc.in
- Add a Libs.private entry to assist with static linking.
-
-2009-11-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/make-static-lib-hidden-privates.sh src/Makefile.am
- Add a script to hide all non-public symbols in the libsndfile.a static
- library.
-
-2009-11-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/locale_test.c
- Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES.
-
-2009-11-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/windows.c
- Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES.
-
-2009-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-convert.c
- Allow the program to read from stdin by specifying '-' on the command line
- as the input file.
-
- * src/sndfile.h.in
- Hash define ENABLE_SNDFILE_WINDOWS_PROTOTYPES to 1 for greater safety.
-
- * tests/virtual_io_test.c
- Add a PAF/PCM_24 test and verify the file length is not negative
- immediately after openning the file for write.
-
-2009-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- When writing loop lengths, adjust the end position by one to make up for
- Microsoft's screwed up spec. Thanks to Olivier Tristan for the patch.
-
-2009-10-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Apply patch from Uli Franke allowing FLAC files to be encoded at any sample
- rate.
-
-2009-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- Fix parsing of odd ulaw encoded file provided by Jan Silovsky.
-
- * configure.ac
- Insist on libvorbis >= 1.2.3. Earlier verions have bugs that cause the
- libsndfile test suite to fail on MIPS, PowerPC and others.
- See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549899
-
-2009-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * man/sndfile-convert.1
- Fix warning from Debian's lintian checks.
-
- * man/sndfile-cmp.1 man/sndfile-jackplay.1 man/sndfile-metadata-get.1
- man/Makefile.am
- Add three new minimal manpages and hook into build.
-
-2009-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/test_wrapper.sh.in
- Don't run cpp_test on x86_64-w64-mingw32.
-
-2009-09-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl
- On windows, make sure the open() function doesn't get called with a third
- parameter of 0 which fails for no good reason. Also make sure this third
- parameter doesn't get called with S_IRGRP when compiling for windows because
- Wine complains.
-
- * src/sndfile.hh
- Add a SndfileHandle constructor for windows that takes a 'const wchar_t *'
- string.
-
- * doc/FAQ.html
- Add Q/A : I'm cross compiling libsndfile for another platform. How can I
- run the test suite?
-
- * src/create_symbols_file.py src/Makefile.am
- Add Symbols.static target, a list of symbols, one per line.
-
-2009-09-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/test_wrapper.sh.in
- Update to allow all tests to be gathered up into a testsuite tarball and
- then be run using this script.
-
- * build-test-tarball.mk.in
- Add a Make script to build a tarball of all the test binaries and the test
- wrapper script. This is useful for cross compiling; you can build the
- binaries, build test test tarball and transfer the test tarball to the
- target machine for testing.
-
-2009-09-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/*.c
- Modify SF_FILE struct to allow it to carry either 8-bit or 16-bit strings
- for the file path, directory and name. Fixes for this change throughout.
-
- * src/windows.c src/Makefile.am
- New file defining new windows only public function sf_wchar_open() which
- takes a 'const wchar_t *' string (LPCWSTR) for the file name parameter.
-
- * src/sndfile.h.in
- Add SF_CHANNEL_MAP_ABISONIC_* entries.
- Add windows only defintion for sf_wchar_open().
-
- * src/create_symbols_file.py
- Add sf_wchar_open() to the list of public symbols (windows only).
-
- * tests/locale_test.c
- Add a wchar_test() to test sf_wchar_open().
-
-2009-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/*.c
- Split file stuff into PSF_FILE struct within the SF_PRIVATE struct.
-
-2009-09-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/voc.c
- When a byte is needed, use unsigned char.
-
- * src/ima_oki_adpcm.c src/broadcast.c src/test_ima_oki_adpcm.c
- Include sfconfig.h to prevent compile errors with MinGW compilers.
-
- * configure.ac
- Remove AM_CONFIG_HEADER due to warnings from autoconf 2.64.
-
- * tests/locale_test.c
- Update to work with xx_XX.UTF-8 style locales. Refactoring.
-
-2009-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Set __USE_MINGW_ANSI_STDIO to 1 when compiling using MinGW compilers.
- Remove unneeded AC_SUBST.
- Report Host CPU/OS/vendor.
-
-2009-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix error message string.
-
- * src/flac.c
- Add 88200 to the list of supported sample rates.
-
- * src/ogg.c
- Fix compiler warning when using gcc-4.5.0.
-
- * programs/sndfile-info.c tests/utils.tpl
- Remove WIN32 snprintf #define.
-
- * src/ima_adpcm.c
- Fix minor bug in aiff_ima_encode_block. Thanks to Denis Fileev for finding
- this.
-
-2009-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/caf.c
- Use the correct C99 format specifier for int64_t.
-
- * M4/endian.m4
- Fix detection of CPU endian-ness when cross compiling. Thanks to Pierre
- Ossman for the bug report.
-
- * src/caf.c src/sndfile.c
- Fix reading and writing of PEAK chunks in CAF files.
-
- * tests/peak_chunk_test.c tests/test_wrapper.sh.in
- Run peak_chunk_test on CAF files.
-
-2009-09-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/wav.c
- Use the correct C99 format specifier for int64_t.
-
-2009-08-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/rf64.c src/sndfile.c src/wav.c src/wav_w64.h
- Apply a patch (massaged slightly) from Uli Franke adding handling of the
- BEXT chunk in RF64 files.
-
- * tests/command_test.c
- Update channel_map_test() function so WAV test passes.
-
- * src/rf64.c
- Add channel mapping and ambisonic support.
-
- * src/sndfile.h
- Add comments showing correspondance between libsndfile channel map
- defintiions and those used by Apple and MS.
-
- Add handling of reading/writing channel map info.
-
- * tests/command_test.c tests/test_wrapper.sh.in
- Update channel map tests.
-
-2009-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add function psf_isprint() a replacement for the standard C isprint()
- function which ignores any locale settings and treats all input as ASCII.
-
- * src/(aiff|common|rf64|sd2|strings|svx|wav).c
- Use psf_isprint() instead of isprint().
-
-2009-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/command.c
- Add string descriptions for SF_FORMAT_RF64 and SF_FORMAT_MPC2K.
-
-2009-06-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-play.c
- Allow use of Open Sound System audio output under FreeBSD.
-
-2009-06-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add patch from Conrad Parker to add --disable-jack.
-
-2009-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alaw.c src/float32.c src/htk.c src/pcm.c src/sds.c src/ulaw.c
- Fix bugs where invalid files can cause a divide by zero error (SIGFPE).
- Thanks to Sami Liedes for reporting this a Debian bug #530831.
-
-2009-05-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/chanmap.[ch]
- New files for channel map decoding/encoding.
-
-2009-05-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/sndfile.h.in
- Fix MSVC definition of sf_count_t.
-
-2009-05-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_w64.[ch]
- Add wavex_channelmask to WAV_PRIVATE struct and add a function to convert
- an array of SF_CHANNEL_MASK_* values into a bit mask for use in WAV files.
-
- * src/wav.c
- Add ability to write the channel mask.
-
-2009-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-info.c
- Add -c command line option to dump the channel map information.
-
- * src/wav_w64.c
- Don't bail from parser if channel map bitmask is faulty.
-
- * src/common.h src/sndfile.c
- Remove error code SFE_W64_BAD_CHANNEL_MAP which is not needed any more.
-
- * src/sndfile.c
- On SFC_SET_CHANNEL_MAP_INFO pass the channel map command down to container's
- command handler.
-
-2009-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/common.h src/sndfile.c src/wav_w64.c
- Apply a patch from Lennart Poettering (PulseAudio) to allow reading of
- channel data in WAV and W64 files.
- Add a test for the above.
-
-2009-05-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FAQ.html
- Update the section about pre-compiled binaries for Win64.
-
-2009-05-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/test_conversions.c
- Be more careful when including <stdint.h> so compiling on pre-C99 platforms
- (hello Slowlaris) might actually work.
-
- * NEWS README doc/*.html
- Updates for 1.0.20.
-
-2009-04-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/voc.c
- Fix a bug whereby opening a specially crafted VOC file could result in a
- heap overflow. Thanks to Tobias Klein (http://www.trapkit.de) for reporting
- this issue.
-
- * src/aiff.c
- Fix potential (heap) buffer overflow when parsing 'MARK' chunk.
-
-2009-04-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/stdin_test.c
- Check psf->error after opening file.
-
- * src/file_io.c
- Fix obscure seeking bug reported by Hugh Secker-Walker.
-
- * tests/utils.tpl
- Add check of sf_error to test_open_file_or_die().
-
- * src/sndfile.c
- Clear error if opening resource fork fails.
-
-2009-04-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/alaw_test.c tests/locale_test.c tests/ulaw_test.c
- Cleanup output.
-
-2009-03-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float32.c
- Fix f2s_clip_array.
-
-2009-03-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float32.c
- In host_read_f2s call convert instead of f2s_array.
-
- * src/ima_adpcm.c
- Remove dead code.
-
- * src/test_ima_oki_adpcm.c examples/generate.c tests/dither_test.c
- tests/dwvw_test.c tests/fix_this.c tests/generate.c
- tests/multi_file_test.c
- Minor fixes.
-
-2009-03-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/shave.m4 shave.in
- Pulled update from upstream.
-
-2009-03-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Add pointers to example programs in source code tarball.
-
-2009-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Define SF_PLATFORM_S64 for non-gcc compilers with 'long long' type.
-
- * configure.ac
- Add documentation for --disable-external-libs and improve error handling
- for that option.
-
- * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py
- Add public function sf_version_string.
-
- * tests/sfversion.c
- Test function sf_version_string.
-
- * M4/shave.m4 shave-libtool.in shave.in
- Add new files from 'git clone git://git.lespiau.name/shave'.
-
- * configure.ac
- Enable shave.
-
- * src/Makefile.am src/binheader_writef_check.py Octave/*
- Shave related tweaks.
-
-2009-03-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/caf.c src/sndfile.c
- Add SF_MAX_CHANNELS (set to 256) and use it.
-
- * src/sndfile.h.in
- Check for either _MSCVER or _MSC_VER being defined.
-
-2009-03-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/vorbis_test.c
- Relax test slighly to allow test to pass on more CPUs etc.
-
-2009-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Detect vorbis_version_string() correctly.
-
-2009-03-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Add a 'See Also' section with a link to sndfile-tools.
-
- * NEWS README doc/*.html
- Updates for 1.0.19 release.
-
- * configure.ac
- Fix --enable-external-libs logic.
-
-2009-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix resource leak and potential read beyond end of buffer.
-
- * src/nist.c
- Fix reading of header value sample_n_bytes.
-
- * src/sd2.c src/wav.c
- Fix potential read beyond end of buffer.
-
- * src/sndfile.c src/svx.c
- Check return values of file_io functions.
-
- * tests/win32_test.c
- Fix resource leak.
-
- * configure.ac
- Detect the presence/absence of vorbis_version_string() in libvorbis.
-
- * src/ogg.c
- Only call vorbis_version_string() from libvorbis if present.
-
-2009-02-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/win32_test.c
- Don't use sprintf, even on windows.
-
- * src/aiff.c src/rf64.c src/wav.c
- Eliminate dead code, more validation of data read from file.
-
-2009-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ima_adpcm.c
- Clamp values to a valid range before indexing ima_step_size array.
-
- * src/GSM610/*.c tests/*c programs/*.c src/audio_detect.c
- Don't include un-needed headers.
-
- * programs/sndfile-info.c
- Remove dead code.
-
- * tests/test_wrapper.sh.in
- Add 'set -e' so the script exits on error.
-
- * src/test_ima_oki_adpcm.c
- Fix read beyond end of array.
-
- * tests/win32_test.c
- Add missing close on file descriptor.
-
- * src/nist.c programs/sndfile-metadata-set.c
- Fix 'unused variable' warnings.
-
- * src/aiff.c
- Fix potential memory leak in handling of 'MARK' chunk.
- Remove un-needed test (unsigned > 0).
-
- * src/sd2.c
- Improve handling of heap allocated buffer.
-
- * src/sndfile.c
- Remove un-needed test (always true).
-
- * src/wav.c src/rf64.c
- Ifdef out dead code that will be resurected some time in the future.
-
- * src/wav.c src/w64.c src/xi.c
- Handle error return values from psf_ftell.
-
- * src/wav_w64.c
- Fix handling and error checking of MSADPCM coefficient arrays.
-
- * regtest/*.c
- Bunch of fixes.
-
- * src/test_file_io.c
- Use snprintf instead of strncpy in test program.
-
-2009-02-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c
- Validate data before using.
-
- * src/caf.c
- Validate channels per frame value before using, fixing a possible integer
- overflow bug, leading to a possible heap overflow. Found by Alin Rad Pop of
- Secunia Research (CVE-2009-0186).
-
-2009-02-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Octave/octave_test.sh
- Unset TERM environment variable and export LD_LIBRARY_PATH.
-
-2009-02-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- In windows code, cast LPVOID to 'char*' in printf.
-
-2009-02-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/octave.m4
- Clear the TERM environment before evaluating anything in Octave. This works
- around problems that might occur if a users TERM settings are incorrect.
- Thanks to Rob Til Freedmen for helping to debug this.
-
- * src/wav.c
- Handle four zero bytes as a marker within a LIST or INFO chunk.
- Thanks to Rogério Brito for supplying an example file.
-
-2009-02-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/*.c
- Use C99 snprintf everywhere.
-
-2009-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/test_wrapper.sh.in
- New file to act as the template for the test wrapper script.
-
- * configure.ac
- Generate tests/test_wrapper.sh from the template.
-
- * tests/Makefile.am
- Replace all tests with a single invocation of the test wrapper script.
-
-2009-02-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c
- Record vorbis library version string.
-
- * configure.ac
- Require libvorbis >= 1.2.2.
-
- * M4/endian.m4
- Fix bracketing of function for autoconf 2.63. Thanks to Richard Ash.
-
- * M4/octave.m4 M4/mkoctfile_version.m4
- Clean up AC_WITH_ARG usage using AC_HELP_STRING.
-
-2009-02-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Octave/Makefile.am
- Use $(top_buildir) instead of $(builddir) which may not be defined.
-
- * M4/octave.m4
- Improve logic and status reporting.
-
-2009-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac AUTHORS NEWS README doc/*.html
- Final tweaks for 1.0.18 release.
-
-2009-02-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-convert.c
- Add 'htk' to the list of convert formats.
-
- * programs/sndfile-info.c
- Simplify get_signal_max using SFC_CALC_SIGNAL_MAX command.
- Increase size of files for which signal max will be calculated.
-
-2009-01-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Fix links for SoX and WavPlay. Thanks to Daniel Griscom.
-
-2009-01-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-metadata-get.c
- Make valgrind clean.
- Clean up temp string array usage.
- Error out if trying to update coding history in RDWR mode.
-
-2009-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Fix links to versions of the LGPL.
-
-2008-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/string_test.c
- Add test for RDWR mode where the file ends up shorter than when it was
- opened.
-
- * src/wav.c
- Truncate the file on close for RDWR mode where the file ends up shorter
- than when it was opened.
-
-2008-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/add_cflags.m4
- Fix problem with quoting of '#include'.
-
- * M4/add_cxxflags.m4 configure.ac
- Add new file M4/add_cxxflags.m4 and use it in configure.ac.
-
-2008-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-info.c
- Apply patch from Conrad Parker to calculate and display total duration when
- more than one file is dumped.
-
-2008-11-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/Makefile.am
- Tweaks to generation of Symbols files.
-
- * tests/win32_ordinal_test.c
- Update tests for above changes.
-
-2008-11-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/common.c
- When merging broadcast info, make sure to clear the destination field
- before copying in the new data.
-
- * programs/test-sndfile-metadata-set.py
- Add test for the above.
-
- * src/broadcast.c
- Fix checking of required coding_history_size.
-
-2008-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- Add test to detect if coding history is truncated.
-
- * src/broadcast.c
- Fix truncation of coding history.
-
-2008-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- Add broadcast_coding_history_size test.
-
- * programs/*.[ch]
- Use SF_BROADCAST_INFO_VAR to manipulate larger 'bext' chunks.
-
- * src/rf64.c
- Add code to prevent infinite loop on malformed file.
-
- * src/common.h src/sndfile.c src/w64.c src/wav_w64.c
- Rationalize and improve error handling when parsing 'fmt ' chunk.
-
- * M4/octave.m4
- Simplify and remove cruft.
- Check for correct Octave version.
-
- * Octave/*
- Reduce 3 C++ files to one, fix build for octave 3.0, fix build.
-
- * Octave/sndfile.cc Octave/PKG_ADD
- Add Octave function sfversion which returns the libsndfile version that the
- module is linked against.
-
- * Octave/Makefile.am
- Bunch of build and 'make distcheck' fixes.
-
-2008-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/common.c
- Return 1 if SFC_SET_BROADCAST_INFO fails.
-
- * programs/test-sndfile-metadata-set.py
- Update for new programs directory, exit on any error.
-
- * tests/error_test.c
- Fix failure behaviour in error_number_test.
-
- * src/common.h src/sndfile.c
- Add error number SFE_BAD_BROADCAST_INFO_SIZE.
-
- * src/*
- Reimplement handling of broadcast extentioon chunk in WAV/WAVEX files.
-
- * src/broadcast.c
- Fix generation of added coding history.
-
-2008-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * programs/sndfile-metadata-get.c programs/sndfile-info.c
- Exit with non-zero on errors.
-
-2008-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-to-text.c examples/Makefile.am
- Add a new example program and hook it into the build.
-
- * examples/ programs/
- Add a new directory programs and move sndfile-info, sndfile-play and other
- real programs to the new directory, leaving example programs where they
- were.
-
-2008-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/Makefile.am
- Automake 1.10 MinGW cross compiling fixes.
-
-2008-10-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Remove call to deprecated function snd_pcm_sw_params_get_xfer_align.
- Fix gcc-4.3 compiler warnings.
-
- * tests/command_test.c
- Fix a valgrind warning.
-
- * tests/error_test.c tests/multi_file_test.c tests/peak_chunk_test.c
- tests/pipe_test.tpl tests/stdio_test.c tests/win32_test.c
- Fix gcc-4.3 compiler warnings.
-
-2008-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c
- Fix termination of desitination string in strncpy_crlf.
- When copying BROADCAST_INFO chunk, make sure destination gets correct line
- endings.
-
- * examples/common.c
- Fix copying of BROADCAST_INFO coding_history field.
-
-2008-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- Add test function instrument_rw_test, but don't hook it into the testing
- yet.
-
- * src/common.h src/command.c src/sndfile.c src/flac.c
- Error code rationalization.
-
- * src/common.h src/sndfile.c
- Set psf->error to SFE_CMD_HAS_DATA when adding metadata via sf_command()
- fails due to psf->have_written being true.
-
- * doc/command.html
- Document the SFC_GET/SET_BROADCAST_INFO comamnds.
-
-2008-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- Improve error reporting when '\0' is found in coding history.
- Fix false failure.
-
-2008-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c
- Convert all coding history line endings to \r\n.
-
- * tests/command_test.c
- Add test to make sure all line endings are converted to \r\n.
-
-2008-10-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c
- Changed the order of coding history fields.
-
- * tests/command_test.c
- Update bextch test to cope with previous change.
-
- * examples/common.c
- Add extra length check when copying broadcast info data.
-
-2008-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl tests/pcm_test.tpl
- Update check_file_hash_or_die to use 64 bit hash.
-
- * tests/checksum_test.c tests/Makefile.am
- Add new checksum_test specifically for lossy compression of headerless
- files.
-
-2008-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/gsm610.c
- Seek to psf->dataoffset before decoding first block.
-
- * src/sndfile.c
- Fix detection of mpc2k files on big endian systems.
-
-2008-10-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c
- Use '\r\n' newlines in Coding History as required by spec.
-
-2008-10-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_conversions.c
- Use int64_t instead of 'long long'.
-
-2008-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-metadata-set.c
- Remove --bext-coding-history-append command line option because it didn't
- really make sense.
-
- * examples/sndfile-metadata-(get|set).c
- Add usage messages.
-
- * examples/test-sndfile-metadata-set.py
- Start work on test coding history.
-
-2008-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * README doc/win32.html
- Bring these up to date.
-
- * src/aiff.c
- Fix parsing of REX files.
-
-2008-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Use intptr_t instead of long for return value of _get_osfhandle.
-
- * src/test_conversions.c src/test_endswap.tpl
- Fix printing of int64_t values.
-
- * examples/sndfile-play.c
- Fix win64 issues.
-
- * tests/win32_ordinal_test.c
- Fix calling of GetProcAddress with ordinal under win64.
-
- * tests/utils.tpl
- Fix win64 issues.
-
-2008-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/*
- Rename copy_data.[ch] to common.[ch]. Fix build.
- Move code from sndfile-metadata-set.c to common.c.
-
- * examples/Makefile.am tests/Makefile.am regtest/Makefile.am
- Clean paths.
-
-2008-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/tutorial.html doc/Makefile.am
- Add file doc/tutorial.html and hook into build/dist system.
-
-2008-09-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-metadata-set.c
- Clean up handling of bext command line params.
-
-2008-09-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c
- Add handling/skipping of a couple of new chunk types.
-
-2008-09-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add -funsigned-char to CFLAGS if the compiler supports it.
-
- * examples/sndfile-metadata-(get|set).c
- Add handling for more metadata types.
-
-2008-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add macros SF_CONTAINER, SF_CODEC and SF_ENDIAN useful for splitting format
- field of SF_INFO into component parts.
-
- * src/*.c
- Use new macros everywhere it is appropriate.
-
-2008-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-bwf-set.c
- Massive reworking.
-
-2008-08-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-bwf-set.c
- Add --info-auto-create-date command line option.
-
- * examples/sndfile-metadata-set.c examples/sndfile-metadata-get.c
- examples/Makefile.am examples/test-sndfile-bwf-set.py
- Rename sndfile-bwf-(set|get).c to sndfile-metadata-(set|get).c.
- Change command line args.
-
-2008-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Allow 'PAD ' chunk to be modified in RDWR mode.
-
- * src/sndfile.h.in src/sndfile.c
- Add handling (incomplete) for SFC_SET_ADD_HEADER_PAD_CHUNK.
-
- * tests/Makefile.am tests/write_read_test.tpl tests/header_test.tpl
- tests/misc_test.c
- Add tests for RF64.
-
- * src/rf64.c
- Fixes to make sure all tests pass.
-
- * tests/Makefile.am tests/string_test.c
- Add string tests (not yet passing).
-
-2008-08-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/rf64.c
- First pass at writing RF64 now working.
-
-2008-08-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Add SF_FORMAT_RF64 to format_map.
-
- * src/common.h src/sndfile.c
- More RF64 support code.
-
- * examples/sndfile-bwf-set.c
- Fix the month number in autogenerated date string and use hypen in date
- instead of slash.
-
- * examples/test-sndfile-bwf-set.py
- Update tests.
-
- * examples/sndfile-info.c
- When called with -i or -b option, operate on all files on command line, not
- just the first.
-
-2008-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/rf64.c
- New file to handle RF64 (WAV like format supportting > 4Gig files).
-
- * src/sndfile.h.in src/common.h src/sndfile.c src/Makefile.am
- Hook the above into build so hacking can begin.
-
- * src/pcm.c
- Improve log message when pcm_init fails.
-
- * src/sndfile-info.c
- Only calculate and print 'Signal Max' if file is less than 10 megabytes in
- length.
-
-2008-08-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/string_test.c
- Polish string_multi_set_test.
-
- * src/wav.c
- In RDWR mode, pad the header if necessary (ie LIST chunk has moved or
- length has changed).
- Minor fixes in wav_write_strings.
- Write PAD chunk with default endian-ness, not a specific endian-ness.
-
- * examples/test-sndfile-bwf-set.py
- Add Python script to test sndfile-bwf-set/get.
-
- * examples/sndfile-bwf-set.c
- Clean up and fixes.
-
- * src/wav.c
- Merge function wavex_write_header into wav_write_header, deleting about 70
- lines of code.
-
- * src/common.h
- Double value of SF_MAX_STRINGS.
-
- * tests/string_test.c
- Add string tests for WAVEX and RIFX files.
-
- * tests/command_test.c
- Add broadcast test for WAVEX files.
-
-2008-08-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/string_test.c
- Add a new string_rdwr_test (currently failing for WAV).
- Add a new string_multi_set_test (currently failing).
-
- * tests/command_test.c
- Add new broadcast_rdwr_test (currently failing).
-
- * src/wav.c
- Fix to WAV parser to allow 'bext' chunk to be updated in place.
- In wav_write_tailer, seek to psf->dataend if its greater than zero.
-
- * src/sndfile.c
- Make sure psf->have_written gets set correctly in mode SFM_RDWR.
-
- * configure.ac
- Test for <sys/time.h> and gettimeofday.
-
- * src/common.c
- Use gettimeofday() to initialize psf_rand_int32.
-
- * src/common.h src/sndfile.c
- Add unique_id field to SF_PRIVATE struct.
-
- * src/common.h src/sndfile.c src/wav.c src/wav_w64.[ch]
- Move wavex_ambisonic field from SF_PRIVATE struct to WAV_PRIVATE struct.
-
- * src/common.h src/strings.c
- Add function psf_location_string_count.
-
-2008-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Test for localtime and localtime_r.
-
- * examples/sndfile-convert.c
- In function copy_metadata(), copy broadcast info if present.
-
- * examples/copy_data.[ch] examples/Makefile.am
- Break some functionality out of sndfile-convert.c so it can be used in
- examples/sndfile-bwf-set.c.
-
- * tests/utils.tpl
- Add new function create_short_sndfile().
-
- * examples/sndfile-bwf-set.c examples/sndfile-bwf-get.c
- examples/Makefile.am
- Add new files and hook into build.
-
-2008-08-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Fix comments. Patch from Mark Glines.
-
-2008-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Use zero_data_test on Ogg/Vorbis files.
-
- * src/ogg.c
- Fix segfault when closing an Ogg/Vorbis file that has been opened for write
- but had no actual data written to it. Bug reported by Chinoy Gupta.
-
- * tests/Makefile.am
- Make sure to run mist_test on Ogg/Vorbis files.
-
-2008-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * regtest/Makefile.am
- Use SQLITE3_CFLAGS to locate sqlite headers.
-
-2008-07-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html doc/FAQ.html
- Add notes about which versions of windows libsndfile works on.
-
-2008-07-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Add a test for correct handling of Ambisonic files. Thanks to Fons
- Adriaensen for the test.
-
- * src/wav.c src/wav_w64.c
- Fix handling of Ambisonic files. Thanks to Fons Adriaensen for the patch.
-
-2008-06-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fix detection/enabling of external libs.
-
- * M4/extra_pkg.m4 M4/Makefile.am
- Add m4 macro PKG_CHECK_MOD_VERSION which is a hacked version
- PKG_CHECK_MODULES. The new macro prints the version number of the package
- it is searching for.
-
-2008-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Apply a fix from Axel Röbel where if the second loop in the instrument
- chunk is none, the loop mode is written into the first loop.
-
-2008-05-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_float.c src/test_main.(c|h) src/Makefile.am
- Add new file to test functions float32_(le|be)_(read|write) and
- double64_(le|be)_(read|write). Hook into build and testsuite.
-
- * src/double64.c src/float32.c
- Fix bugs in functions found by test added above. Thanks to Nicolas Castagne
- for reporting this bug.
-
- * src/sndfile.h.in
- Change time_reference_(low|high) entries of SF_BROADCAST_INFO struct to
- unsigned.
-
- * examples/sndfile-info.c
- Print out the BEXT time reference in a sensible format.
-
-2008-05-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Fuzz fixes.
-
- * src/ogg.c
- Add call to ogg_stream_clear to fix valgrind warning.
-
- * src/aiff.c
- Fix x86_64 compile issue.
-
- * configure.ac src/Makefile.am src/flac.c src/ogg.c
- Link to external versions of FLAC, Ogg and Vorbis.
-
- * tests/lossy_comp_test.c tests/ogg_test.c tests/string_test.c
- tests/vorbis_test.c tests/write_read_test.tpl
- Fix tests when configured with --disable-external-libs.
-
- * tests/external_libs_test.c tests/Makefile.am
- Add new test and hook into build and test suite.
-
- * src/command.c
- Use HAVE_EXTERNAL_LIBS to ensure that the SFC_GET_FORMAT_* commands return
- the right data when external libs are disabled.
-
-2008-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Add a test for extending a file during write by seeking past the current
- end of file.
-
- * src/sndfile.c
- Allow seeking past end of file during write.
-
-2008-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html doc/command.html
- Move all information about the sf_command function to command.html and add
- a link from documentation of the sf_read/write_raw function to the
- SFC_RAW_NEEDS_ENDSWAP command.
-
- * doc/index.html doc/FAQ.html doc/libsndfile.css
- Minor documentation tweaks.
-
-2008-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add AM_PROG_CC_C_O.
-
-2008-04-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/error_test.c
- Add a test to make sure if file opened with sf_open_fd, and then the file
- descriptor is closed, then sf_close will return an error code. Thanks to
- Dave Flogeras for the bug report.
-
- * src/sndfile.c
- Make sf_close return an error is the file descriptor is already closed.
-
-2008-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Set object format to aout for OS/2. Thanks to David Yeo.
-
- * src/mpc2k.c src/sndfile.c src/sndfile.h.in src/common.h src/Makefile.am
- Add ability to read MPC 2000 file.
-
- * tests/write_read_test.tpl tests/misc_test.c tests/header_test.tpl
- tests/Makefile.am
- Add tests for MPC 2000 file format.
-
- * examples/sndfile-convert.c
- Allow conversion to MPC 2000 file format.
-
-2008-04-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/VORBIS/lib/codebook.c
- Sync from upstream SVN.
-
- * autogen.sh configure.ac
- Minor tweaks.
-
-2008-04-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c
- Add a patch that fixes finding the length in samples of an Ogg/Vorbis file.
- The patch as supplied segfaulted and required many hours of debugging.
-
- * src/OGG/bitwise.c
- Sync from upstream SVN.
-
-2008-04-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix up handling of 'APPL' chunk. Thanks to Axel Röbel for bringing up
- this issue.
-
-2008-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/*.c
- Add calls to sf_close() where needed.
-
- * tests/utils.tpl tests/multi_file_test.c
- Always pass 0 as the third argument to open when OS_IS_WIN32.
-
-2008-04-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_*
- Add files test_main.[ch].
- Collapse all tests into a single executable.
-
-2008-03-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC
- Sync to upstream CVS.
-
-2008-03-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Make SF_MIN and SF_MAX macros MinGW friendly.
-
- * examples/sndfile-(info|play).c
- Use Sleep function from <windows.h> instead of _sleep.
-
- * tests/locale_test.c
- Disable some tests when OS_IS_WIN32.
-
- * src/FLAC/src/share/replaygain_anal/replaygain_analysis.c
- src/FLAC/src/share/utf8/utf8.c
- MinGW fixes.
-
-2008-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Tweaks to pcm16 <-> float conversion answer.
-
-2008-02-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/OGG
- Sync to SVN upstream.
-
- * Makefile.am
- Add 'DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror'.
-
-2008-02-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-jackplay.c
- Minor tweaks to warning message printed when compiled without libjack.
-
-2008-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/peak_chunk_test.c
- Improve read_write_peak_test to find more errors. Inspired by example
- provided by Nicolas Castagne.
-
- * src/aiff.c
- Another SFM_RDWR fix shown up by above test.
-
-2008-01-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix reading of COMM encoding string.
-
- * src/chunk.c src/common.h src/Makefile.am
- New file for storing and retrieving info about header chunks. Hook into
- build.
-
- * src/aiff.c
- Use new chunk logging to fix problem with AIFF in RDWR mode.
-
-2008-01-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/command.c
- Add WVE to the list of major formats.
-
- * tests/aiff_rw_test.c
- Fix error reporting.
-
-2008-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.[ch]
- Add internal functions str_of_major_format, str_of_minor_format,
- str_of_open_mode and str_of_endianness.
-
- * tests/write_read_test.tpl
- Fix reporting of errors in new_rdwr_XXXX_test.
-
-2008-01-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Apply patch from Yair K. to fix compiles with OSS v4.
-
- * src/common.h src/float32.c src/double64.c
- Rename psf->float_enswap to psf->data_endswap.
-
- * src/sndfile.h.in src/sndfile.c src/pcm.c
- Add command SFC_RAW_NEEDS_ENDSWAP.
-
- * tests/command.c
- Add test for SFC_RAW_NEEDS_ENDSWAP.
-
- * doc/command.html
- Document SFC_RAW_NEEDS_ENDSWAP.
-
- * tests/peak_chunk_test.c
- Add test function read_write_peak_test. Thanks to Nicolas Castagne for the
- bug report.
-
-2008-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-cmp.c
- Add new example program contributed by Conrad Parker.
-
- * examples/Makefile.am
- Hook into build.
-
- * doc/development.html
- Change use or reconfigure.mk to autogen.sh.
-
-2008-01-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/win32_test.c
- Add another win32 test.
-
- * tests/util.tpl
- Add function file_length_fd which wraps fstat.
-
- * tests/Makefile.am
- Run the multi_file_test on AU files.
-
- * tests/multi_file_test.c
- Use function file_length_fd() instead of file_length() to overcome stupid
- win32 bug. Fscking hell Microsoft sucks so much.
-
-2008-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c
- Fix a rsrc parsing bug. Example file supplied by Uli Franke.
-
-2007-12-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Allow use of either LGPL v2.1 or LGPL v3.
-
- * tests/header_test.tpl
- Add header_shrink_test from Axel Röbel.
-
- * src/wav.c
- Add fix from Axel Röbel for writing files with float data but no peak
- chunk (ie peak chunk gets removed after the file is opened).
-
- * src/aiff.c tests/header_test.tpl
- Apply similar fix to above for AIFF files.
-
- * src/wav.c tests/header_test.tpl
- Apply similar fix to above for WAVEX files.
-
- * src/command.c
- Add Ogg/Vorbis to 'get format' commands.
-
-2007-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c
- Fix seeking on multichannel Ogg Vorbis files. Reported by Bodo.
- Set the default encoding quality to 0.4 instead of 4.0 (Bodo again).
-
- * tests/ogg_test.c
- Add stereo seek tests.
-
-2007-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/ogg_test.c
- Add a test (currently failing) for stereo seeking on Ogg Vorbis files. Test
- case supplied by Bodo.
-
- * tests/utils.(def|tpl)
- Add compare_XXX_or_die functions.
-
-2007-12-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix a bug where ignoring ssnd_fmt.offset and ssnd_fmt.blocksize caused
- misaligned reading of 24 bit data. Thanks to Uli Franke for reporting this.
-
-2007-12-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/vox_adpcm.c src/ima_oki_adpcm.[ch] src/Makefile.am
- Merge in code from the vox-patch branch. Thanks to Robs for the patch
- which fixes a long standing bug in the VOX codec.
-
-2007-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Fix handling of -override-sample-rate=X option.
-
-2007-11-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c src/VORBIS
- Merge in Ogg Vorbis support from John ffitch of the Csound project.
-
-2007-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Recognise files with 'vox6' extension as 6kHz OKI VOX ADPCM files. Also
- recognise 'vox8' as and 'vox' as 8kHz files.
-
- * configure.ac
- Detect libjack (JACK Audio Connect Kit).
-
- * examples/sndfile-jackplay.c examples/Makefile.am
- Add new example program to play sound files using the JACK audio server.
- Thanks to Jonatan Liljedahl for allowing this to be included.
-
-2007-11-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Update support table with SD2 and FLAC.
-
-2007-11-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix calculation of internal value psf->read_current when attempting to read
- past end of audio data.
- Remove redundant code.
-
- * tests/lossy_comp_test.c
- Add read_raw_test to check that raw reads do not go past the end of the
- audio data section.
- Clean up error output messages.
-
- * src/sndfile.c
- Add code to prevent sf_read_raw from reading past the end of the audio data.
-
- * tests/Makefile.am
- Add the wav_pcm lossy_comp_test.
-
-2007-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/Makefile.am src/create_symbols_file.py
- More OS/2 fixes from David Yeo.
-
-2007-11-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c tests/utils.tpl tests/benchmark.tpl
- Improve handling of requirements for O_BINARY as suggested by Ed Schouten.
-
-2007-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Fix symbol class when SF_MIN is nested inside SF_MAX or vice versa.
-
- * src/create_symbols_file.py
- Add support for OS/2 contributed by David Yeo.
-
-2007-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * M4/gcc_version.m4
- Add macro AC_GCC_VERSION to detect GCC_MAJOR_VERSION and GCC_MINOR_VERSION.
-
- * configure.ac
- Use AC_GCC_VERSION to work around gcc-4.2 inline warning stupidity.
- See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33995
- Use -fgnu-inline to prevent stupid warnings.
-
-2007-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/util.tpl
- Increase the printing width for print_test_name().
-
- * tests/command_test.c tests/Makefile.am
- Add tests for correct updating of broadcast WAV coding history.
-
- * examples/sndfilehandle.cc examples/Makefile.am
- Add example program using the C++ SndfileHandle class.
-
-2007-10-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/sndfile.c
- Add error codes SFE_ZERO_MAJOR_FORMAT and SFE_ZERO_MINOR_FORMAT.
-
-2007-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c
- Identify sample-rate/sample-size/channels by resource id.
-
-2007-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/broadcast.c src/common.h src/sndfile.c
- Improvements to handling of broadcast info in WAV files. Thanks to Frederic
- Cornu and other for their input.
-
-2007-10-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC/include/share/alloc.h
- Mingw fix for SIZE_T_MAX from Uli Franke.
-
-2007-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/open_fail_test.c tests/error_test.c tests/Makefile.am
- Move tests from open_fail_test.c to error_test.c and remove the former.
-
-2007-10-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/scale_clip_test.(def|tpl)
- Add tests for SFC_SET_INT_FLOAT_WRITE command.
-
- * doc/command.html
- Add docs for SFC_SET_INT_FLOAT_WRITE command.
-
- * examples/sndfile-play.c tests/dft_cmp.c
- Fix gcc-4.2 warning messages.
-
-2007-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c
- Add command SFC_GET_CURRENT_SF_INFO.
-
- * src/sndfile.h.in src/sndfile.c src/create_symbols_file.py
- Remove function sf_get_info (only ever in pre-release code).
-
- * tests/command_test.c
- Add test for SFC_GET_CURRENT_SF_INFO.
-
-2007-10-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Add parsing of 'exif' chunks. Originally coded by Trent Apted.
-
- * configure.ac
- Put config stuff in Cfg directory.
- Remove check for inttypes.h.
-
-2007-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c
- Fix writing of 'riff' chunk length and check for correct value in parser.
-
-2007-09-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Link to MP3 FAQ entry.
-
-2007-09-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Move the blocksize check to an earlier stage of flac_buffer_copy.
-
-2007-09-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC
- Huge merge from FLAC upstream.
-
-2007-09-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/*.c
- Change license to all example programs to BSD.
-
-2007-09-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC/include/FLAC/metadata.h
- Include <sys/types.h> to prevent compile error on OSX.
-
- * Octave/octave_test.sh
- Disable test on OSX. Can't get it to work.
-
- * src/flac.c
- Check the blocksize returned from the FLAC decoder to prevent buffer
- overruns. Reported by Jeremy Friesner. Thanks.
-
-2007-09-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Makefile.am M4/octave.m4
- Fix build when Octave headers are not present.
-
-2007-08-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/development.html
- Add note about bzr repository directory looking empty.
-
-2007-08-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac Octave/* M4/octave_*
- Bunch of changes to add ability to build GNU Octave modules to read/write
- sound files using libsndfile from Octave.
-
-2007-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * acinclude.m4 configure.ac ...
- Get rid of acinclude.m4 and replace it with an M4 directory.
-
-2007-08-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Remove crufty Metrowerks compiler support. Allow header file to be compiled
- on windows with both GCC and microsoft compiler.
-
-2007-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/dft_cmp.[ch] tests/floating_point_test.tpl
- Clean up floating point tests.
-
-2007-08-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix segfault when COMM chunk length is byte swapped.
-
-2007-08-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/mat4.c src/mat5.c src/sndfile.c
- Add a generic SFE_CHANNEL_COUNT_ZERO error, remove format specific errors.
-
- * src/au.c
- Fix crash on AU files with zero channel count. Reported by Ben Alison.
-
-2007-08-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/voc.c
- Fix bug in handling file supplied by Matt Olenik.
-
-2007-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/OGG
- Merge from OGG upstream sources.
-
-2007-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC
- Merge from FLAC upstream sources.
-
-2007-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Fix memory leak; set copy parameter to FALSE in call to
- FLAC__metadata_object_vorbiscomment_append_comment.
-
- * src/common.[ch]
- Add function psf_rand_int32().
-
-2007-07-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC
- Merge from FLAC upstream sources.
-
- * src/strings.c tests/string_test.c tests/Makefile.am
- Make sure string tests for SF_STR_LICENSE actually works.
-
-2007-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/string_test.c
- Add ability to test strings stored in metadata secion of FLAC files.
-
- * src/string.c
- Fix logic for testing if audio data has been written and string is added.
- Make sure SF_STR_ALBUM actually works.
-
- * src/flac.c
- Finalize reading/writing string metadata. Tests pass.
-
- * src/sndfile.h.in tests/string_test.c src/flac.c
- Add string type SF_STR_LICENSE, update test and use for FLAC files.
-
- * src/sndfile.h.in
- Add definition for SFC_SET_SCALE_FLOAT_INT_WRITE command.
-
- * src/common.h src/double64.c src/float32.c src/sndfile.c
- Add support for SFC_SET_SCALE_FLOAT_INT_WRITE (still needs testing).
-
-2007-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Apply patch from Ed Schouten to read artist and title metadata from FLAC
- files.
- Improve reporting of FLAC metadata.
-
- * src/sndfile.h.in tests/string_test.c src/flac.c
- Add string type SF_STR_ALBUM, update test and use for FLAC files.
-
-2007-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC/*
- Merge from upstream CVS.
-
-2007-06-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC/*
- Update from upstream CVS.
-
-2007-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/cpp_test.cc
- Add extra tests for when the SndfileHandle constructor fails.
-
- * src/sndfile.hh
- Make sure failure to open the file in the constructor does not allow later
- calls to other methods to fail.
-
-2007-06-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/util.tpl
- Add function write_mono_file.
-
- * tests/generate.[ch] tests/Makefile.am
- Add files generate.[ch] and hook into build.
-
- * tests/write_read_test.tpl
- Add multi_seek_test.
-
- * src/flac.c
- Fix buffer overflow bug. Test provided by Jeremy Friesner and fix provided
- by David Viens.
-
-2007-06-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Minor update.
-
- * configure.ac src/FLAC/src/libFLAC/ia32/Makefile.am src/Makefile.am
- Apply patch from Trent Apted make it compile on Intel MacOSX. Thanks Trent.
-
-2007-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fix writing of MSGUID subtypes. Thanks to Bruce Sharpe.
-
-2007-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fix array indexing bug raised by Bruce Sharpe.
-
-2007-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC/src/share/getopt/getopt.c
- Fix Mac OSX / PowerPC compile warnings.
-
- * configure.ac
- Make sure WORDS_BIGENDIAN gets correctly defined for FLAC code.
-
-2007-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Add Q/A about MP3 support.
-
-2007-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/new_file_type.HOWTO
- Minor updates.
-
-2007-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wve.c
- Fix a couple bad parameters with psf_log_printf.
-
- * src/pcm.c
- Improve error reporting.
-
- * src/common.h src/common.c
- Constify psf_hexdump.
-
-2007-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC
- Ditch and re-import required FLAC code.
-
- * configure.ac
- Force FLAC__HAS_OGG variable to 1.
-
- * src/FLAC/src/libFLAC/stream_encoder.c
- Fix compiler warnings.
-
-2007-04-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac tests/win32_ordinal_test.c
- Detect if win32 DLL is beging generated and only run win32_ordinal_test if
- true.
-
- * src/G72x/Makefile.am src/Makefile.am
- Use $(EXEEXT) where possible.
-
-2007-04-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wve.c src/common.h src/sndfile.c
- Complete definition of SfE_WVE_NO_WVE error message.
-
- * src/wve.c
- Fix error in files generated on big endian systems. Robustify parsing.
-
-2007-04-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/double64.c
- Fix clipping of double to short conversions on 64 bit systems.
-
- * src/flac.c regtest/database.c tests/cpp_test.cc
- Fix compile warnings for 64 bit systems.
-
-2007-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/wav_w64.c
- Use audio detect function when 'fmt ' chunk data is suspicious.
-
- * configure.ac
- Add ugly hack to remove -Werror from some Makefiles.
-
-2007-04-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/GSM610/long_term.c src/macbinary3.c tests/cpp_test.cc
- Add patch from André Pang to clean up compiles on OSX.
-
- * src/wve.c src/common.h src/sndfile.c src/sndfile.h.in
- examples/sndfile-convert.c
- Merge changes from Reuben Thomas to improve WVE support.
-
- * tests/lossy_comp_test.c tests/Makefile.am
- Add tests for WVE files.
-
-2007-04-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add a static SndfileHandle::formatCheck method as suggested by Jorge
- Jiménez.
-
-2007-04-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a bug in sf_error() where the function itself was being compared
- against zero. Add a check for a NULL return from peak_info_calloc. Fix a
- possible NULL dereference.
-
-2007-04-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Turn off seekable flag when writing, return SFE_BAD_RDWR_FORMAT when
- opening file for RDWR.
-
- * src/sndfile.c
- Improve error message for SFE_BAD_RDWR_FORMAT.
-
- * src/mat4.c
- Fix array indexing issue. Thanks to Ben Allison (Nullsoft) for alerting me.
-
-2007-03-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Add Q/A 19 on project files.
-
-2007-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Guard agains MacOSX universal binary compiles.
-
- * doc/FAQ.html
- Add Q/A 18 and clean up Q3.
-
-2007-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Add support for 'in24' files.
-
-2007-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/wav_w64.c src/wav_w64.h
- Start work towards detecting ausio codec type from the actual audio data.
-
- * src/audio_detect.c src/test_audio_detect.c
- Add new file and its unit test.
-
-2007-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/cooledit-fixer.c examples/Makefile.am
- Remove old broken example program.
-
-2007-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py
- Add function sf_get_info.
-
-2007-01-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- For ALSA, use the 'default' device instead of 'plughw:0'.
-
-2007-01-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Allow writing of WAV/WAVEX 'BEXT' chunks in SFM_RDWR mode.
-
-2007-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/development.html doc/embedded_files.html man/sndfile-play.1
- Minor documentation fixes. Thanks Reuben Thomas.
-
-2006-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Add -override-sample-rate command line option.
-
-2006-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Force errno to zero at start of some tests.
-
- * src/sndfile.c
- Minor clean up of error handling.
-
- * configure.ac
- Remove an assembler test which was failing on OSX.
-
-2006-11-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Fix the definition of SF_PLATFORM_S64 for MinGW.
-
- * src/FLAC/Makefile.am src/FLAC/share/grabbag/Makefile.am
- Fix path problems for MinGW.
-
-2006-11-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.h
- Add include guard.
-
- * src/Makefile.am src/flac.c
- Clean up include paths.
-
- * src/test_conversions.c
- New file to test psf_binheader_readf/writef functions.
-
- * src/Makefile.am src/test_file_io.c src/test_log_printf.c src/common.c
- Clean up unit testing.
-
- * src/common.c
- Fix a bug reading/writing 64 bit header fields. Thanks to Jonathan Woithe
- for reporting this.
-
- * src/test_conversions.c
- Complete unit test for above fix.
-
-2006-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- More refactoring to clean up psf_open_file() and vairous sf_open()
- functions.
-
-2006-11-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Apply a patch from Jonathan Woithe to allow opening of (malformed) WAV
- files of over 4 gigabytes.
-
-2006-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Refactor function psf_open_file() to provide a single return point.
-
- * tests/misc_test.c
- Fix permission_test to ensure that read only file can be created.
-
-2006-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add SF_PLATFORM_S64 macro as a platform independant way of doing signed 64
- bit integers.
-
- * src/aiff.c src/svx.c src/wav.c
- Add warning in log if files are larger than 4 gigabytes in size.
-
-2006-11-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/FLAC src/OGG confgure.ac src/Makefile.am
- Pull in all required FLAC and OGG code so external libraries are not
- needed. This makes compiling on stupid fscking Windoze easier.
-
-2006-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c
- Add workaround for switched sample rate and sample size.
-
- * src/wav.c
- Add workaround for excessively long coding history in the 'bext' chunk.
-
-2006-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c src/wav.c doc/command.html
- Use SF_AMBISONIC_* instead of SF_TRUE/SF_FALSE.
-
-2006-10-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/wav.c src/wav_w64.c src/common.h doc/command.html
- Apply a patch from Fons Adriaensen to allow writing on WAVEX Ambisonic
- files. Still needs a little tweaking before its ready for release.
-
- * src/*.c
- Use the UNUSED macro to prevent compiler warnings.
-
-2006-10-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix a bug in parsing AIFF files with a slightly unusual 'basc' chunk. Thanks
- to David Viens for providing two example files.
-
- * src/common.(c|h) src/aiff.c
- Add a function psf_sanitize_string and use it in aiff.c.
-
-2006-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_w64.c
- Apply a patch from Fons Adriaensen which fixes a minor WAVEX GUID issue.
-
-2006-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/Makefile.am
- Fix problem related to recent test coverage changes.
-
-2006-10-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac tests/Makefile.am
- Add --enable-test-coverage configure option.
-
-2006-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add an std::string SndfileHandle constructor.
-
- * tests/scale_clip_test.tpl
- Fix the 'make distcheck' target.
-
-2006-10-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/double64.c src/float32.c
- Add optional clipping on float file data to int read data conversions.
-
- * tests/tests/scale_clip_test.(def|tpl)
- Add test for above new code.
-
-2006-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/aiff_rw_test.c
- Add 'MARK' chunks to make sure they are parsed correctly.
-
-2006-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix parsing of MARK chunks. Many thanks to Sciss for generating files to
- help debug the problem.
-
-2006-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Make the SF_MIN and SF_MAX macros at least partially type safe.
-
- * tests/lossy_comp_test.c
- Fix overflow problems when ensuring that signalis not zero.
-
-2006-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac docs/*.html
- Changes for release 1.0.17.
-
-2006-08-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Remove inline from functions called by pointer. Thanks to Sampo Savolainen
- for notifying me of this.
-
-2006-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Add writeSync method.
- Add copy constructor and assignment operator (thanks Daniel Schmitt).
- Add methods readRaw and writeRaw.
- Make read/write/readf/writef simple overlaods instead of templates (thanks
- to Trent Apted for suggesting this).
-
- * tests/cpp_test.cc
- Cleanup. Add tests.
-
-2006-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Templatize the read/write/readf/writef methods as suggested by Lars Luthman.
- Prevent the potential leak of SNDFILE* pointers in the openRead/openWrite/
- openReadWrite methods.
- Add const to SF_INFO pointer in Sndfile constructor.
- Make the destrictor call the close() method.
-
- * tests/cpp_test.cc
- Add more tests.
-
-2006-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/cpp_test.cc
- Remove the generated file so "make distcheck" passes.
-
- * src/Makefile.am
- Add sndfile.hh to distributed header files.
-
- * src/sndfile.hh
- Change the license for the C++ wrapper to modified BSD.
-
-2006-07-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.hh
- Complete it.
-
- * tests/cpp_test.cc
- Add more tests.
-
-2006-07-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl
- Add extern C to generated header file.
-
- * src/sndfile.hh
- Work towards completing this.
-
- * tests/cpp_test.cc tests/Makefile.am
- Add a C++ test and hook into build.
-
- * configure.ac
- Add appropriate CXXFLAGS.
-
-2006-07-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Test if compiler supports -Wpointer-arith.
-
- * src/common.c
- Fix a warning resulting from -Wpointer-arith.
-
-2006-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Explicitly set endian-ness as well as setting 16 bit output.
-
- * examples/sndfile-info.c
- Make sure to parse info if file fails to open.
-
- * src/sndfile.c
- Handle parse error a little better.
-
- * src/wav_w64.[ch]
- Minor clean up, add detection of IPP ITU G723.1.
-
-2006-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Make sure psf->dataoffset gets reset to zero when openning headersless
- files based on the file name extension.
-
-2006-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/(command|lossy_comp|pcm|scale_clip)_test.c tests/fix_this.c
- tests/write_read_test.(tpl|def)
- Fix gcc-4.1 compiler warnings about "dereferencing type-punned pointer will
- break strict-aliasing rules".
-
- * examples/cooledit-fixer.c
- More fixes like above.
-
-2006-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Fix a windows bug where the syserr string of SF_PRIVATE was not being set
- correctly.
-
- * src/sndfile.c
- Fixed a logic bug in sf_seek(). Thanks to Paul Davis for finding this.
-
-2006-06-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fixed detection of S_IRGRP.
-
-2006-05-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * sndfile-convert.c
- Add conversion SF_INSTRUMENT data when present.
-
-2006-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/development.html
- Removed references to tla on windows.
-
- * src/common.h src/sndfile.c
- Add separate void pointers for file containter and file codec data to
- SF_PRIVATE struct. Still need to move all existing fdata pointers.
-
- * tests/write_read_test.tpl
- Change the order of some tests.
-
- * src/aiff.c
- When writing 'AIFC' files, make sure get an 'FVER' gets added.
-
- * src/common.h src/(dwvw|flac|g72x|gsm610|ima_adpcm|ms_adpcm|paf|sds).c
- src/(sndfile|voc|vox_adpcm|xi).c
- Remove fdata field from SF_PRIVATE struct and replace it with codec_data.
-
-2006-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/testprog.c Win32/Makefile.am
- Add a minimal win32 test program.
-
- * Win32/README-precompiled-dll.txt Mingw-make-dist.sh
- Update readme and Mingw build script.
-
-2006-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac acinclude.m4
- Minor fixes for Solaris.
-
-2006-05-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_endswap.(def|tpl)
- Fix printf formatting for int64_t on 64 bit machines.
-
-2006-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/binhead_check.py
- New file to check for bad parameters passed to psf_binheader_writef().
-
- * src/Makefile.am
- Hook into test suite.
-
- * src/voc.c src/caf.c src/wav.c src/mat5.c src/mat4.c
- Fix bugs found by new test program.
-
- * src/double64.c
- Clean up double64_get_capability().
-
-2006-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_w64.c
- Fix a bug on x86_64 where an int was being passed via stdargs and being
- read using size_t which is 64 bits. Thenks to John ffitch for giving me a
- login on his box.
-
-2006-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/caf.c src/double64.c examples/sndfile-info.c tests/virtual_io_test.c
- tests/utils.tpl
- Fix a couple of signed/unsigned problems.
-
-2006-05-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- Add channel map tests.
-
- * src/common.h src/sndfile.c
- Add a pointer to the SF_PRIVATE struct and make sure it gets freed in
- sf_close().
-
-2006-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac doc/(command|index|api).html NEWS README
- Updates for 1.0.16 release.
-
- * src/sndfile.h.in
- Define enums for channel mapping.
-
- * examples/sndfile-info.c
- Clean up usage of SF_INFO struct.
-
-2006-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/util.tpl
- Add function testing function exit_if_true().
-
- * tests/floating_point_test.tpl
- Fix a problem where the test program was not exiting when the test failed.
-
-2006-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c src/common.h src/command.c
- Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS.
-
- * doc/commands.html
- Document new commands. Other minor updates.
-
- * tests/peak_chunk_test.c
- Update tests for new commands.
-
-2006-04-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/peak_chunk_test.c
- Add test for RIFX and WAVEX files.
- Try and confuse the PEAK chunk writing by enabling and disabling it.
-
- * src/sndfile.c
- Fix a bug where enabling and disabling PEAK chunk was screwing up.
-
-2006-03-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Add the block of 190 reserved bytes into this struct to allow for
- future expansion.
-
- * src/wav.c src/sndfile.c src/broadcast.c
- Significant cleanup of broadcast wave stuff.
-
- * examples/sndfile-info.c
- Fix print message.
-
- * tests/command_test.c tests/Makefile.am
- Complete bext tests, hook test in test suite.
-
-2006-03-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Make coding_history field of SF_BROADCAST_INFO struct a char array instead
- of a char pointer.
-
- * src/sndfile.c src/common.h src/wav.c
- Clean up knock on effects of above chnage.
-
- * examples/sndfile-info.c
- Add -b command line option to usage message.
- Clean up output of broadcast wave info.
-
- * src/wav.c
- Ignore and skip the 'levl' chunk.
-
-2006-03-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fix handling of --enable and --disable configure args. Thanks to Diego
- 'Flameeyes' Pettenò who sent the patch.
-
-2006-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/win32.html
- Make it really clear that although the MSVC++ cannot compile libsndfile,
- the precompiled DLL can be used in C++ programs compiled with MSVC++.
-
-2006-03-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix bug in writing of INST chunk in AIFF files.
- Fix potential bug in writing MARK chunks.
-
- * src/sndfile.c
- Make sure the instrument chunk can only be written at the start of the file.
-
- * tests/command_test.c
- Add check of log buffer.
-
- * tests/utils.tpl
- Add usage of space character to psf_binheader_writef.
-
-2006-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/Makefile.am tests/Makefile.am
- Remove --source-time argument from autogen command lines.
-
- * src/broadcast.c
- New file for EBU Broadcast chunk in WAV files.
-
- * src/sndfile.c src/sndfile.h.in src/wav.c src/common.h
- Add patch from Paul Davis implementing read/write of the BEXT chunk.
-
-2006-03-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/README-precompiled-dll.txt
- New file descibing how to use the precompiled DLL.
-
- * Win32/Makefile.am
- Add Win32/README-precompiled-dll.txt to EXTRA_DIST files.
-
- * configure.ac
- Bump version to 1.0.15.
-
-2006-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- On read, only add the endian flag if the file is big endian.
-
- * src/ms_adpcm.c
- Fixed writing of APDCM coeffs in RIFX files.
-
- * tests/write_read_test.tpl tests/lossy_comp_test.c
- Add tests for RIFX files.
-
-2006-03-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Mingw-make-dist.sh
- Bunch of improvements.
-
- * doc/win32.html
- Update MinGW program versions.
-
-2006-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/create_symbols_file.py
- Fix the library name in created win32 DEF file. Add correct DLL name for
- Cygwin DLL.
-
- * Win32/Makefile.am tests/Makefile.am
- Remove redundant files, add win32_ordinal_test to test suite.
-
- * tests/win32_ordinal_test.c
- Update to do test in cygsndfile-1.dll as well.
-
- * doc/win32.html
- Fix typo, mention that -mno-cygwin with the Cygwin compiler does not work.
-
- * src/wav.c src/wav_w64.c src/sndfile.c src/sndfile.h.in
- Apply large patch from Jesse Chappell which adds support for RIFX files.
-
-2006-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Makefile.am
- Add Mingw-make-dist.sh to the extra dist files.
-
- * configure.ac
- Fix setting SHLIB_VERSION_ARG for MinGW.
-
- * tests/win32_ordinal_test.c
- New test program to test that the win32 DLL ordinals agree with the DEF
- file.
-
-2006-03-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add a static inline function to convert an int to a size_t. This will be
- a compile to nothing on 32 bit CPUs and a sign extension on 64 bit CPUs.
-
- * src/aiff.c src/avr.c src/common.c src/xi.c src/gsm610.c
- Fix an ia64 problem where a varargs function was being passed an int in
- some places and a size_t in other places.
-
- * src/sd2.c
- Add a workaround for situations where OSX seems to add an extra 0x52 bytes
- to the start of the resource fork.
-
-2006-02-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Mingw-make-dist.sh
- Add a shell script to build the windows binary/source ZIP file.
-
- * doc/index.html
- Add download link for windows binary/source ZIP file. Add links for GPG
- signatures.
-
- * doc/win32.html
- Remove info about building using microsoft compiler.
-
- * configure.ac
- Bump version to 1.0.14.
-
-2006-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c
- Improve logging of errors in resource fork parser.
-
-2006-01-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/Makefile.msvc
- Replace au_g72x.* with g72x.*. Thanks to ussell Borogove.
-
-2006-01-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Make sure return values are initialised header buffer is full.
-
- * src/wav.c
- Add workarounds for messed up WAV files.
-
-2006-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/config.h
- Undef HAVE_INTTYPES_H for win32.
-
- * tests/command_test.c
- Don't exit on error in instrument test for XI files.
-
- * configure.ac
- Bump version to 1.0.13.
-
- * doc/*.html NEWS README
- Update version numbers.
-
-2006-01-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/xi.c
- Start work on add read/write of instrument chunks.
-
- * src/command_test.c
- Add tests for XI instrument chunk.
-
- * tests/largefile_test.c tests/Makefile.am
- Add new test and hook it into the build system. This test will not be run
- automatically because it requires 3 Gig of disk space and takes 3 minutes
- to run.
-
-2006-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Fix calculation of samples remaining in win32 code. Thanks Axel Röbel.
-
- * src/common.h
- Make sure length of header buffer can hold header plus strings. Thanks Axel
- Röbel.
-
-2006-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/aiff.c src/wav.c
- Apply a patch from John ffitch (Csound project).
- Add detune field to SF_INSTRUMENT struct.
- Add reading/writing instrument chunks to WAV files.
-
- * tests/command_test.c
- Update SF_INSTRUMENT tests.
-
- * tests/Makefile.am
- Hook instrument tests into test suite.
-
-2006-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Check for <inttypes.h> because some broken systems (like Solaris) don't have
- <stdint.h> which is the 1999 ISO C standard file containing int64_t.
-
- * src/sfendian.h src/common.h
- Use <inttypes.h> if <stdint.h> is not available.
-
-2005-12-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/peak_chunk_test.c
- Extend and clean up tests.
-
- * src/sndfile.c
- Fix a bug that prevented the turning off of PEAK chunks.
-
-2005-12-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/error_test.c
- Make the test distclean correct.
-
- * src/file_io.c
- Fix an SD2 MacOSX bug (reported by vince schwarzinger).
-
-2005-12-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c tests/command_test.c
- Apply a big patch from John ffitch (Csound project) to add reading and
- writing of instrument chunks to AIFF files. Also update the test.
-
-2005-12-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/aiff_rw_test.c tests/virtual_io_test.c tests/utils.tpl
- Move test function dump_data_to_file() to utils.tpl.
-
- * tests/error_test.c tests/Makefile.am
- Updates, including a new test to test that sf_error() returns a valid error
- number.
-
-2005-12-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/list_formats.c
- Make sure the SF_INFO struct is memset to all zero before being used.
- Thanks to Stephen F. Booth.
-
- * src/sndfile.c
- Make the return value of sf_error() match the API documentation.
-
-2005-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Allow conversion to raw gsm610.
-
- * src/common.h src/sndfile.c src/au.c
- Remove au_nh_open() and all references to it (wasn't working anyway).
-
- * tests/headerless_test.c
- Add new test for file extension based detection.
-
- * src/sndfile.c
- Rejig file extension based file type detection.
-
-2005-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Add "gsm" as a recognised file extension when no magic number can be found.
-
- * tests/lossy_comp_test.c tests/Makefile.am
- Test headerless GSM610.
-
-2005-11-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Fix a minor typo and a minor error. Thanks Christoph Kobe and John Pavel.
-
-2005-10-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_w64.c
- Add more reporting of 'fmt ' chunk for G721 encoded files.
-
- * src/wav.c
- Gernerate a more correct 20 byte 'fmt ' chunk rather than a 16 byte one.
-
-2005-10-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/G72x/g72x.[ch]
- Minor cleanup of interface.
-
-2005-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ogg.c
- Removed the horribly broken and non-functional OGG implementation when
- --enable-experimental was enabled. When OGG does finally work it will be
- merged.
-
- * src/caf.c
- Fix a memory leak.
-
-2005-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/g72x.c src/G72x/*.(c|h) src/common.h src/sndfile.c src/wav.c src/au.c
- Add support for G721 encoded WAV files.
-
- * doc/index.html
- Update support matrix.
-
- * tests/lossy_comp_test.c
- For file formats that support it, add string data after the audio data and
- make sure it isn't treated as audio data on read.
-
- * src/gsm610.c
- Add code to ensure that the container close function (ie for WAV files) gets
- called after the codec's close function. This allows GSM610 encoded WAV files
- to have string data following the audio data.
- Add an AIFF specific check on psf->datalength.
-
- * src/wav.c
- Simplify wav_close function.
-
- * src/aiff.c
- Make sure the tailer data gets written at an even file offset. Pad if
- necessary.
-
- * src/common.h
- Replace the close function pointer in SF_PRIVATE with separate functions
- codec_close and container_close. The former is always called first.
-
- * src/*.c
- Fix knock on effects of above.
-
-2005-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-info.c
- Complete dumping SF_INSTRUMENT data.
-
- * src/dwvw.c src/ima_adpcm.c src/gsm610.c src/ms_adpcm.c
- Add extra checks in *_init function.
-
- * tests/lossy_comp_test.c
- Add a string comment to the end of the files to make sure that the decoder
- doesn't decode beyond the end of the audio data section.
-
-2005-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-info.c
- Minor code cleanup.
- Start work on dumping SF_INSTRUMENT data.
-
-2005-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/common.h src/common.c
- Update definition of SF_INSTRUMENT struct and create a function to allocate
- and initialize the struct (input from David Viens).
- Clean up definition of SF_INSTRUMENT struct.
-
- * src/wav.c src/wav_w64.c
- Add support for Ambisoncs B WAVEX files (David Viens).
-
- * src/aiff.c src/wav.c src/wav_w64.c
- Start work on reading/writing the SF_INSTRUMENT data.
-
- * src/sndfile.c
- Add code to get and set SF_INSTRUMENT data.
-
- * tests/command_test.* tests/Makefile.am
- Add test for set and getof SF_INSTRUMENT data.
- The file command_test.c is no longer autogen generated.
-
-2005-10-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/gsm610.c
- Minor cleanup.
-
-2005-10-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c
- Minor cleanup.
-
-2005-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Ensure sfconfig.h is included before any other header file.
-
- * src/file_io.c
- Add comments documenting the three sections of the file.
-
- * src/gsm610.c
- Make sure SF_FORMAT_WAVEX are handled correctly.
-
-2005-10-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add options to allow disabling of FLAC and ALSA. Suggested by Ben Greear.
-
-2005-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/locale_test.c
- Modify the way the unicode strings were encoded so that older compilers
- do not complain. Thanks Axel Röbel.
-
- * configure.ac
- Bump the version to 1.0.12 for release.
-
- * NEWS README Win32/config.h doc/(FAQ|index.html|command|api).html
- Update version numbers.
-
-2005-09-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Fix valgrind error and minor cleanup.
-
-2005-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/(au|paf|aiff|w64|wav|svx).c
- Make sure structs are initialised.
-
-2005-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Make -Wdeclaration-after-statement work with --enable-gcc-werror configure
- option.
- Add -std=gnu99 (C99 plus posix style stuff like gmtime_r) to CFLAGS if the
- compiler supports it.
-
-2005-09-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac acinclude.m4
- Add -Wdeclaration-after-statement to CFLAGS if the compilers supports it.
-
-2005-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/util.(tpl|def)
- Make the test_write_*_or_die() functions const safe.
-
-2005-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- Make sure the data offset is read from the file header. Thanks to
- David A. van Leeuwen for a patch.
-
-2005-09-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/sfconfig.h
- Check for <locale.h> and the function setlocale().
- Set config variables to zero if not found.
-
- * tests/locale_test.c tests/Makefile.am
- Add new test program and hook into build/test system.
-
-2005-09-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/file_io.c
- On windows, use windows specific types for file handles.
- Add functions psf_init_files() and psf_use_rsrc().
-
- * src/sd2.c
- Make resource fork handling independant of file desciptor/handles.
-
- * src/sndfile.c src/test_file_io.c
- Fix knock on effects.
-
-2005-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float_cast.h
- The lrint and lrintf implementations in Cygwin are both buggy and slow.
- Add replacements which were pulled from the Public Domain MinGW math.h
- header file.
-
-2005-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/(lossy_comp_test|virtual_io_test).c
- More Valgrind fixups.
-
- * configure.ac
- Simplify and correct configuring for Cygwin.
-
- * Win32/config.h Win32/sndfile.h Win32/Makefile.msvc
- Update build for MSVC.
-
-2005-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c
- Make sure to close SNDFILE when exiting test when file format is not seekable.
-
- * tests/(aiff_rw_test|virtual_io_test).c
- Do a few valgrind fix ups.
-
-2005-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float32.c src/double64.c
- Replace floating point equality comparisons with greater/less comparisons.
- Found by John Pavel using the Intel compiler.
-
- * src/sfconfig.h
- New file to clean up issues surrounding autoconf generated preprocessor
- symbols.
-
- * src/*.(c|h) tests/*.(c|tpl) examples/*.c
- Fixed a bunch of other stuff found by John Pavel using the Intel compiler.
-
- * src/file_io.c
- Remove Mac OS9 Metrowerks compiler specific hacks.
-
-2005-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c
- Cast integer literal to sf_count_t in call to psf_binheader_writef() to
- prevent Valgrind error.
-
-2005-08-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Improve documentation of SF_GET_FORMAT_SUBTYPE.
-
-2005-08-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Allow files to be converted to SD2 format.
-
- * src/sd2.c
- Fix a bug in reading and writing of SD2 files on little endian CPUs.
- Thanks to Matthew Willis for finding this.
-
-2005-08-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Update Note2 to point to SFC_SET_SCALE_FLOAT_INT_READ.
-
-2005-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Use $host_os instead of $target_os (thanks to Mo De Jong).
-
-2005-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/Makefile.am
- Apply a patch from Mo DeJong to allow building outside of the source dir.
-
- * src/file_io.c
- Fix psf_fsync() for win32.
-
- * src/wav.c src/wav_w64.(c|h)
- Move some code from wav.c to wav_w64.c to improve the log output of files of
- type WAVE_FORMAT_EXTENSIBLE.
-
-2005-08-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/create_symbols_file.py
- Make sure sf_write_fsync is an exported symbol.
-
- * examples/sndfile-convert.c
- Add support for writing VOX adpcm files.
-
-2005-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Document the new function sf_write_sync().
-
- * doc/FAQ.html
- Do you plan to support XYZ codec.
-
-2005-07-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c
- Add function sf_write_sync() to the API.
-
- * src/common.h src/file_io.c
- Low level implementation (win32 not done yet).
-
- * tests/write_read_test.tpl
- Use the new function in the tests.
-
-2005-07-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/double64.c src/float32.c src/sndfile.c
- Change the way PEAK chunk info is stored. Peaks now stored as an sf_count_t
- for position and a double as the value.
-
- * src/aiff.c src/caf.c src/wav.c
- Fix knock on effects of above changes.
-
- * src/caf.c
- Implement 'peak' chunk for file wuth data in SF_FORMAT_FLOAT or
- SF_FORMAT_DOUBLE format.
-
-2005-07-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- Fix a bug where a variable was being used without being initialized.
-
- * src/flac.c
- Add extra debug in sf_flac_meta_callback.
- Make a bunch of private functions static.
-
- * src/aiff.c src/wav.c
- Fix allocation for PEAK_CHUNK (bug found using valgrind).
-
-2005-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Move the peak_loc field of SF_PRIVATE to the PEAK_CHUNK struct.
- Remove had_peak field of SF_PRIVATE, use pchunk != NULL instead.
- Rename PEAK_CHUNK and PEAK_POS to PEAK_CHUNK_32 and PEAK_POS_32.
-
- * src/aiff.c src/caf.c src/wav.c src/float32.c src/double64.c
- Fix knock on effects from above.
-
-2005-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Prevent files with unknown chunks from being opened read/write.
-
-2005-07-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/flac.c
- Do not use psf->end_of_file because it never gets set to anything.
-
- * src/common.h
- Remove unused SF_PRIVATE field end_of_file.
-
-2005-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Change the 'S' format specifier of psf_binheader_writef() to write AIFF
- style strings (no terminating character).
-
- * src/aiff.c
- Move to new (correct) AIFF string style. Thanks to Axel Röbel for being
- so persistent on this issue.
-
-2005-07-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open().
-
- * doc/api.html doc/command.html
- Documentation updates (thanks to Kyroz for promoting these updates).
-
- * src/mat5.c
- Modify the way the header is written.
-
-2005-07-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/caf.c
- Add a 'free' chunk to the written file so that the audio data starts at
- an offset of 0x1000.
-
- * src/sndfile.c
- Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open().
-
-2005-07-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/caf.c src/sndfile.c
- Add support for signed 8 bit integers.
-
- * tests/write_read_test.tpl
- Add test for signed 8 bit integers in CAF files.
-
- * doc/index.html
- Update matrix for signed 8 bit integers in CAF files.
-
-2005-07-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Update sf_check_format() to support CAF.
-
- * examples/sndfile-convert.c
- Add support for ".caf" file extension.
-
- * doc/index.html
- Add Apple CAF to the support matrix.
-
- * src/caf.c
- Add file write support.
-
- * src/common.c
- Fix printing of Frames.
-
- * tests/Makefile.am tests/write_read_test.tpl tests/lossy_comp_test.c
- tests/header_test.tpl misc_test.c
- Add tests for CAF files.
-
-2005-07-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Fix Q/A about reading/writing memory buffers.
-
- * src/caf.c
- Bunch of work to support reading of CAF files.
-
-2005-07-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/(aiff|ima_adpcm|mat4|mat5|ms_adpcm).c examples/sndfile-play.c
- Fix sign conversion errors reported by gcc-4.0.
-
- * src/caf.c
- New file for Apple's Core Audio File format.
-
- * src/sndfile.c src/common.h src/sndfile.h.in src/Makefile.am
- Hook new file into build system.
-
-2005-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src_wav_w64.c
- Fix handling of stupidly large 'fmt ' chunks. Thanks to Vadim Berezniker
- for supplying an example file.
-
- * src/common.h src/sndfile.c
- Remove redundant error code SFE_WAV_FMT_TOO_BIG.
-
-2005-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/common.h src/sndfile.c
- Add public error value SF_ERR_MALFORMED_FILE.
-
- * src/sndfile.c
- When parsing a file header fails and we don't have a system error, then set
- the error number to SF_ERR_MALFORMED_FILE (suggested by Kyroz).
-
- * configure.ac
- Allow sqlite support to be disabled in configure script.
-
- * regtest/database.c regtest/sndfile-regtest.c
- Fix compiling when sqlite is missing.
-
-2005-06-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Fix psf_is_pipe() and return value of psf_fread() when using virtual i/o.
-
- * src/sndfile.c
- Fix VALIDATE_AND_ASSIGN_PSF macro for virtual i/o.
-
- * tests/virtual_io_test.c
- Fill in skeleton test program.
-
- * tests/Makefile.am
- Move virtual i/o tests to end of tests with stdio/pipe tests.
-
- * src/(sndfile.h.in|file_io.c|common.h|sndfile.c) tests/virtual_io_test.c
- Rename some of the virtual i/o functions and data types.
-
-2005-06-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix the return values of sf_commands : SFC_SET_NORM_DOUBLE,
- SFC_SET_NORM_FLOAT, SFC_GET_LIB_VERSION and SFC_GET_LOG_INFO. Thanks to
- Kyroz for pointing out these errors.
-
- * doc/command.html
- Correct documented return values for SFC_SET_NORM_DOUBLE and
- SFC_SET_NORM_FLOAT. Thanks to Kyroz again.
-
-2005-05-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * regtest/*
- Add new files for sndfile-regtest program.
-
- * configure.ac Makefile.am
- Hook regetest into build.
-
- * src/wav.c src/common.c
- Fix a regression where long ICMT chunks were causing the WAV parser
- to exit.
-
-2005-05-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * libsndfile.spec.in
- Add html docs to the files section as suggested by Karsten Jeppesen.
-
- * src/aiff.c
- Fix parsing of odd length ANNO chunks.
-
-2005-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Change the include guard to prevent clashes with other code.
-
-2005-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Improve error handling in code for playback under Linux/ALSA.
-
-2005-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ircam.c
- Fix writing of IRCAM files on big endian systems (thanks to Axel Röbel).
-
- * src/wav.c
- Add workaround for files created by the Peak audio editor on Mac which can
- produce files with very short LIST chunks (thanks to Jonathan Segel who
- supplied the file).
-
-2005-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Apply a patch From David Viens to make the parsing of basc chunks more
- robust.
-
- * src/wav.c
- Another patch from David Viens to write correct wavex channel masks for
- the most common channel configurations.
-
-2005-04-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/command.c
- Only allow FLAC in the format arrays if FLAC is enabled. Thanks to
- Leigh Smith.
-
-2005-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add a directory field for storing the file directory to the SF_PRIVATE
- struct.
-
- * src/sndfile.c
- Grab the directory name when copying the file path.
-
- * src/file_io.c
- Cleanup psf_open_rsrc() and also check for resource fork in
- .AppleDouble/filename.
-
-2005-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/svx.c
- Fix a bug in the printing of the channel count. Bug reported by Michael
- Schwendt. Thanks.
-
-2005-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- Fix a seek bug for 24 bit PAF files.
-
- * tests/write_read_test.tpl
- Update write_read_test to trigger the previously hidden PAF seek bug.
-
-2005-01-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/w64.c src/wav.c
- Do not return a header parse error when the log buffer overflows.
- Continuing parsing works even on files where the log buffer does overflow.
- This avoids a bug on some weirdo WAV (and other) files.
-
- * src/common.h src/sndfile.c
- Remove SFE_LOG_OVERRIN error and its associated error message.
-
- * src/file_io.c
- Fix a rsrc fork problem on MacOSX.
-
-2004-12-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile-play.c
- In the ALSA output code, added call to snd_pcm_drain() just before
- snd_pcm_close() as suggested by Thomas Kaeding.
- In the OSS output code, added two ioctls (SNDCTL_DSP_POST and
- SNDCTL_DSP_SYNC) just before the close of the audio device.
-
- * tests/virtual_io_test.c tests/Makefile.am
- Add a new test program (currently empty) and add it to the build.
-
-2004-12-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.h src/common.h src/file_io.c
- src/create_symbols_file.py
- Apply patch from Steve Baker which is the beginnings of a virtual
- I/O interface.
-
-2004-12-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c src/sndfile.h.in
- Const-ify the write path throughout the library.
-
-2004-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/development.html
- Minor improvements.
-
-2004-11-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/bugs.html
- Minor improvements.
-
-2004-11-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Add workaround for Logic Platinum AIFF files with broken COMT chunks.
-
-2004-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Remove some ambiguities in the SD2 FAQ answer.
-
-2004-11-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/sndfile.h Win32/config.h MacOS9/sndfile.h MacOS9/config.h
- Updates from autoconfig versions.
-
-2004-11-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fix parsing of COMT chunks. Store SF_STR_COMMENT data in ANNO chunks
- instead of COMT chunk.
-
-2004-11-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c src/common.h
- Change the ptr argument to psf_write() from "void*" to a "const void*".
- Thanks to Tobias Gehrig for suggesting this.
-
-2004-10-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c src/common.h
- Add functions psf_close_rsrc() and read length of resourse fork into
- rsrclength field of SF_PRIVATE.
-
- * src/sd2.c
- Make sure resource fork gets closed.
-
- * tests/util.tpl
- Add functions to check for file descriptor leakage.
-
- * src/write_read_test.tpl
- Use the file descriptor leak checks.
-
- * src/sndfile.h.in
- Add SFC_GET_LOOP_INFO and SF_LOOP_INFO struct.
-
- * src/common.h
- Add SF_LOOP_INFO pointer to SF_PRIVATE.
-
- * src/wav.c src/aiff.c
- Improve and add parsing of 'ACID' and 'basc' chunks, filling in
- SF_LOOP_INFO data in SF_PRIVATE.
-
-2004-10-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sd2.c
- Further cleanup: remove printfs, change snprintf to LSF_SNPRINTF.
-
- * Win32/config.h Win32/sndfile.h
- Updates.
-
- * tests/util.tpl
- Add win32 macro for snprintf.
-
-2004-10-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.h
- Add macros : H2BE_SHORT, H2BE_INT, H2LE_SHORT and H2LE_INT.
-
- * src/sd2.c
- Use macros to make sure writing SD2 files on little endian machines works
- correctly.
-
- * tests/util.tpl
- Add a delete_file() function which also deletes the resource fork of SD2
- files.
-
- * tests/write_read_test.tpl
- Use delete_file() so that "make distcheck" works.
-
-2004-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/file_io.c
- Move resource filename construction and testing to psf_open_rsrc().
-
- * src/common.h src/sndfile.c
- Add error SFE_SD2_FD_DISALLOWED.
-
- * tests/util.tpl tests/*.(c|tpl)
- Add and allow_fd parameter to test_open_file_or_die() so that use of
- sf_open_fd() can be avoided when opening SD2 files.
-
-2004-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Update ACID chunk parsing.
-
- * src/sd2.c
- More fixes for files with large resource forks.
-
-2004-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/sndfile.c
- Add error numbers and messages for sd2 files.
-
- * src/sd2.c
- Reading of sd2 (resource fork version) now seems to be working.
-
-2004-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.h
- Update file_io.c to include win32 psf_rsrc_open().
-
- * tests/floating_point_test.tpl
- Remove use of __func__ in test programs (MSVC++ doesn't grok this).
-
- * Win32/(config|sndfile).h MacOS9/(config|sndfile).h
- Updates.
-
-2004-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.h
- Fix endswap_int64_t_(array|copy).
-
- * src/test_endswap.(tpl|def)
- Add tests for above and inprove all tests.
-
-2004-10-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.h
- Improve type safety, add endswap_double_array().
-
- * src/double64.c
- Use endswap_double_array() instead of endswap_long_array().
-
- * src/test_endswap.(tpl|def) src/Makefile.am
- Add preliminary endswap tests and hook into build system.
-
-2004-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/configure.ac src/makefile.am
- Finally fix the bulding of DLLs on Win32/MinGW.
-
- * tests/makefile.am
- Fix running of tests on Win32/MinGW.
-
-2004-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c tests/floating_point_test.tpl
- Rename SFC_SET_FLOAT_INT_MULTIPLIER to SFC_SET_SCALE_FLOAT_INT_READ.
-
- * doc/command.html
- Document SFC_SET_SCALE_FLOAT_INT_READ.
-
-2004-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/floating_point_test.(tpl|def)
- Derived from floating_point_test.c.
- Add (float|double)_(short|int)_test functions.
-
- * tests/util.(tpl|def)
- Make separate float and double versions of gen_windowed_sine().
-
- * tests/write_read_test.tpl
- Fix after changes to gen_windowed_sine().
-
- * src/(float32|double64).c
- Implement SFC_SET_FLOAT_INT_MULTIPPLIER.
-
-2004-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * acinclude.m4
- Fix warnings from automake 1.8 and later.
-
- * examples/sndfile-info.c
- Add a "fflush (stdout)" after printing Win32 message.
-
-2004-09-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/Makefile.mingw.in
- Add a "make install" target.
-
-2004-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/common.h src/sndfile.c src/command.c
- Start work on adding command SFC_SET_FLOAT_INT_MULTIPLIER.
-
-2004-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Fix a bug converting stereo integer PCM files to float.
-
-2004-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Appy patch from Conrad Parker to make Mac OSX error messages more
- consistent and informative.
-
- * doc/api.html
- Fix a HTML HREF which was wrong.
-
- * doc/win32.html
- Add information about when nmake fails.
-
-2004-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Another patch from Denis Cote to prevent race conditions.
-
-2004-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/ms_adpcm.c src/ima_adpcm.c
- Fix alternative to ISO standard flexible struct array feature for broken
- compilers.
-
-2004-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/string.c src/sndfile.c
- Make sf_set_string() return an error if trying to set a string when in
- read mode.
-
-2004-08-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Change the unnamed union into a named union so gcc-2.95 will compile it.
-
- * src/*.c
- Fixes to allow for the above change.
-
-2004-08-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Fixes for Win32. Thanks to Denis Cote.
-
- * Win32/Win32/Makefile.(msvc|mingw.in)
- Fix build system after removal of sfendian.h.
- Build sndfile-convert.
-
- * src/Makefile.am
- Remove sfendian.c from dependancies.
-
-2004-08-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Fix typo in comments (thanks Tommi Sakari Uimonen).
-
-2004-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/(a|u)law_test.c
- Minor cleanup.
-
-2004-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/(pcm|float|double64|ulaw|alaw|xi).c
- Optimise read/write loops by removing a redundant variable.
-
-2004-07-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Remove call to fsync() in psf_close().
-
-2004-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c
- Inline x2y_array() functions where possible.
-
- * configure.ac
- Detect presence of type int64_t.
-
- * src/sfendian.c src/sfendian.h
- Move functions in the first file to the sfendian.h as static inline
- functions.
- Improve endswap_long_*() where possible.
-
-2004-07-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c
- When converting from unsigned char to float or double, subtract 128 before
- converting to float/double rather than after to save a floating point
- operation as suggested by Stefan Briesenick.
-
- * src/(pcm|sfendian|alaw|ulaw|double64|float32).c
- Optimize inner loops by changing the loop counting slightly as suggested
- by Stefan Briesenick.
-
- * configure.ac
- Detect presence of <byteswap.h>.
-
- * src/sfendian.h
- Use <byteswap.h> if present as suggested by Stefan Briesenick.
-
- * src/pcm.c
- Update bytewapping.
-
-2004-07-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/*.c
- Change the psf->buffer field of SF_PRIVATE into a more type safe union with
- double, float, int etc elements.
-
-2004-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Merge slightly modifed patch from Stanko Juzbasic which allows playback of
- mono files on MacOSX.
-
-2004-06-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Move copy_metadata() after the second sf_open().
-
-2004-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Fix a bug which caused the program to go into an infinite loop if the source
- file has no meta-data. Thanks to Ron Parker for reporting this.
-
- * src/sndfile.h.in
- Add SF_STR_FIRST and SF_STR_LAST to allow enumeration of string types.
-
- * Win32/sndfile.h MacOS9/sndfile.h
- Update these as per the above file.
-
-2004-06-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/common.h src/ogg.c src/sndfile.c src/sndfile.h.in
- src/Makefile.am
- Apply large patch from Conrad Parker implementing Ogg Vorbis, Ogg Speex and
- Annodex support via liboggz and libfishsound. Thanks Conrad.
-
-2004-06-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/avr.c src/ircam.c src/nist.c src/paf.c src/xi.c
- Add cast to size_t for some parameters passed to psf_binheader_writef. This
- is Debian bug number 253490. Thanks to Anand Kumria and Andreas Jochens.
-
- * src/w64.c
- Found and fixed a bug resulting from use of size_t when writing W64 'fmt '
- chunk.
-
-2004-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Bump version to 1.0.10 ready for release.
-
- * Makefile.am
- Remove redundant files (check_libsndfile.py libsndfile_version_convert.py)
- from distribution tarball.
-
- * tests/header_test.tpl
- Fix uninitialised variable.
-
- * src/GSM610/short_term.c
- Fix compiler warning on MSVC++.
-
-2004-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Improve record keeping of chunks seen and return an error if a file with
- unusual chunks is opened in mode SFM_RDWR.
-
- * src/mmreg.h
- This file not needed so remove it.
-
-2004-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/header_test.tpl
- Add extra_header_test().
-
- * src/common.h src/sndfile.c
- Add SFE_RDWR_BAD_HEADER error number and string.
-
-2004-05-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl tests/*.c tests/*.tpl
- Add a line number argument to check_log_buffer_or_die() and update all
- files that use that function.
-
- * tests/header_test.tpl
- Modify/update tests for files opened SFM_RDWR and SFC_UPDATE_HEADER_AUTO.
-
- * src/aiff.c src/wav.c
- Fix another bug in AIFF and WAV files opened in SFM_RDWR and using
- SFC_UPDATE_HEADER_AUTO.
-
- * src/test_file_io.c
- Add a test for psf_ftruncate() function.
-
-2004-05-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix another weird corner case bug found by Martin Rumori. Thanks.
-
- * tests/header_test.(tpl|def)
- Two new files to test for the absence of the above bug and include tests
- moved from tests/misc_test.c.
-
- * tests/Makefile.am
- Hook new tests into build/test system.
-
- * tests/misc_test.c
- Remove update_header_test() which has been moved to the new files above.
-
-2004-05-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fixed a bug reported by Martin Rumori on the LAD list. If a file created
- with a format of SF_FORMAT_FLOAT and then closed before any data is written
- to it, the header can get screwed up (PEAK chunk gets overwritten).
-
- * tests/write_read_test.tpl
- Add a test (empty_file_test) for the above bug.
-
-2004-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/Makefile.mingw.in
- Added a Makefile for MinGW (needs to be processed by configure).
-
- * src/mmsystem.h src/mmreg.h
- Add files from the Wine project (under the LGPL) to allow build of
- sndfile-play.exe under MinGW.
-
-2004-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/GSM610/gsm610_priv.h
- Replace ugly macros with inline functions.
-
- * src/GSM610/*.c
- Remove temporary variables used by macros and other minor fixes required by
- above change.
-
-2004-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pipe_test.tpl tests/stdio_test.c Win32/Makefile.msvc
- Make sure these programs compile (even though they do nothing) on Win32
- and add them to the "make check" target.
-
- * src/sfendian.h
- Fix warning on Sparc CPU and code cleanup.
-
-2004-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Fix warning messages when compiling under MinGW.
-
-2004-05-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Set HAVE_FLEXIBLE_ARRAY in src/config.h depending on whether the compiler
- accepts the flexible array struct member as per 1999 ISO C standard.
-
- * src/common.h src/ima_adpcm.c src/paf.c src/ms_adpcm.c
- Added ugly #if HAVE_FLEXIBLE_ARRAY and provided a non-standards compliant
- hack for non 1999 ISO C compliant compilers.
-
-2004-04-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/strings.c
- If adding an SF_STR_SOFTWARE string, only append libsndfile-X.Y.Z if the
- string does not already have libsndfile in the string. Thanks to Conrad
- Parker.
-
- * tests/string_test.c
- Add test to verify the above.
-
- * examples/sndfile-convert.c
- Add ability to transcode meta data as well (Conrad Parker).
-
-2004-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Fix minor error. Thanks to Simon Burton.
-
- * doc/win32.html
- Started adding instructions for compiling libsndfile under MinGW.
-
- * configure.ac
- Add --enable-bow-docs to enable black text on a white background HTML docs.
-
- * doc/libsndfile.css.in
- This is now a template file for configure which sets the foreground and
- background colours.
-
-2004-04-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Do some MinGW fixes.
-
- * configure.ac doc/Makefile.am
- Install HTML docs when doing make install.
-
-2004-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-info.c
- Print out the dB level with the signal max.
-
-2004-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Define S_ISSOCK in src/file_io.c if required.
-
-2004-04-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Improve printout configuration summary (as suggested by Axel Röbel).
-
- * doc/index.html
- Add link to pre-release location.
-
- * src/sndfile.h.in
- Remove comma after last element of enum.
-
- * src/float32.c src/double64.c
- Fix read/write of float/double encoded raw files to/from pipes.
-
- * tests/pipe_test.c tests/pipe_test.tpl tests/pipe_test.def
- Turn pipe_test.c into an autogenerated file and add tests for reading/
- writing floats and doubles.
-
- * tests/Makefile.am
- Hook tests/pipe_test.* into build system.
-
-2004-04-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac acinclude.m4
- Rename AC_C_STRUCT_HACK macro to AC_C99_FLEXIBLE_ARRAY.
-
-2004-03-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Perform update_header_test in RDWR mode as well.
-
- * src/aiff.c
- Fix problems when updating header in RDWR mode.
-
-2004-03-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/w64.c src/wav_w64.c
- Integrate code supplied by David Viens for supporting microsoft's
- WAVEFORMATEXTENSIBLE stuff. Thanks David for supplying this.
-
- * configure.ac doc/*.html
- Bump version to 1.0.9.
-
-2004-03-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/command.c src/sndfile.c src/sndfile.h.in src/wav.c
- Started work on supporting microsoft's WAVEFORMATEXTENSIBLE gunk.
-
-2004-03-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/avr.c
- New file to handle Audio Visual Resaerch files.
-
- * src/sndfile.h.in src/common.h src/sndfile.c src/command.c
- Hook AVR into everything else.
-
- * tests/Makefile.am tests/write_read_test.tpl tests/misc_test.c
- Add testing for AVR files.
-
-2004-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Fix psf_set_file() for win32. Thanks to Vincent Trussart (Plogue Art et
- Technologie) for coming up with the solution.
-
-2004-03-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Fixed a bug that was causing valgrind to report a memory leak. The bug was
- in the test code itself, not the library.
-
-2004-03-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/generate.cs
- An example showing how to use libsndfile from C#. Thanks to James Robson
- for providing this.
-
-2004-03-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Fix problems with WAV files containing large chunks after the 'data'
- chunk. Thanks to Koen Tanghe for providing a sample file.
-
-2004-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Detect presense of ALSA (Advanced Linux Sound Architecture).
-
- * examples/sndfile-play.c
- Add ALSA output support.
-
- * examples/Makefile.am
- Add ALSA_LIBS to link line of sndfile-play.c.
-
-2004-03-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * acinclude.m4
- Add new macro (AC_C_STRUCT_HACK) to detect whether the C compiler allows
- the use of the what is known as the struct hack introduced by the 1999 ISO
- C Standard.
-
- * configure.ac
- The last release would not compile with gcc-2.95 due to the use of features
- (ie struct hack) introduced by the 1999 ISO C Standard.
- Add check to make sure compiler handles this and bomb out if it doesn't.
-
-2004-03-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Fix compiler warning on Win32.
-
- * src/file_io.c
- Fix use of an un-initialised variable in Win32 stuff.
-
- * Win32/config.h examples/sndfile-play.c
- Win32 fixes.
-
-2004-03-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fix bug which occurres when configuring for MinGW.
- If compiler is gcc and cross compiling use -nostdinc.
-
-2004-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/aiff.c src/wav.c src/float32.c src/double64.c
- src/sndfile.c
- Fix a bug with PEAK chunk handling for files with more than 16 channels.
- Thanks to Remy Bruno for finding this.
-
-2004-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Fix a bug which was preventing WAV files being openned correctly if the
- file had a very large header. Thanks to Eldad Zack for finding this.
-
-2004-03-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/file_io.c
- Fix cross-compiling from Linux to Win32 using the MinGW tools.
-
-2004-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/create_symbols_file.sh
- Christian Weisgerber pointed out that the shell script did not run on a
- real Bourne shell although it did run under Bash in Bourne shell mode.
-
- * src/create_symbols_file.py
- Rewrite of above in Python. Also add support for writing Win32 .def files.
- The Python script generates Symbols.linux, Symbols.darwin and
- libsndfile.def (Win32 version). These files get shipped with the tarball
- so there should not be necessary to run the Python script when building
- the code from the tarball.
-
- * configure.ac src/Makefile.am Win32/Makefile.am
- Hook new Python script into the build system.
-
-2004-02-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/configure.ac
- Add --enable-gcc-werror option and move GCC specific stuff down.
-
-2004-02-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * acinclude.m4 configure.ac
- Fix clip mode detection (tested in one of HP's testdrive Itanium II boxes).
-
- * src/file_io.c
- Added check for sizeof (off_t) != sizeof (sf_count_t) to prevent recurrence
- of missing large file support on Linux and Solaris.
-
-2004-02-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Fix a MacOSX specific bug which was caused by a space being inserted in
- the middle of a file name.
-
- * configure.ac src/Makefile.am examples/Makefile.am
- Fix a couple of MacOSX build issues.
-
-2004-02-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Document SFC_SET_CLIPPING and SFC_GET_CLIPPING.
-
-2004-02-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/*.html
- Applied patch from Frank Neumann (author of lakai) which fixes many minor
- typos in documentation. Thanks Frank.
-
-2004-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * ChangeLog
- Changed my email address throughout source and docs.
-
-2004-02-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Make sure config.h is included before stdio.h to make sure large file
- support is enabled on Linux (and Solaris).
-
- * tests/misc_test.c
- Disable update_header test on Win32. This should work but doesn't and
- I'm not sure why.
-
- * Make.bat Win32/Makefile.msvc
- Updates.
-
-2004-01-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Changed logindex, headindex and headend files of SF_PRIVATE from unsigned
- int to int to prevent weird arithmetic bugs.
-
- * src/common.c src/aiff.c src/wav.c src/w64.c
- Fixed compiler warnings resulting from above change.
-
-2004-01-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Fixed a bug in header reader for some files with data after the sample data.
-
-2003-12-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c tests/Makefile.am
- Add tests for AIFF/IMA files.
-
-2003-12-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/macbinary3.c src/macos.c
- Two new files required for handling SD2 files.
-
- * src/common.h
- Add prototypes for functions in above two files.
-
- * src/Makefile.am
- Hook new files into build system.
-
-2003-12-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add checks for mmap() and getpagesize() which might be used at some time
- for faster file reads.
- Add detection of MacOSX.
-
-2003-12-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Minor mods to pkg-config section.
-
-2003-12-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/create_symbols_file.sh
- Andre Pang (also known as Ozone) pointed out that on MacOSX, all non
- static symbols are exported causing troubles when trying to link
- libsndfile with another library which has any of the same symbols.
- He fixed this by supplying the MacOSX linker with a file containing
- all the public symbols so that only they would be exported and then
- supplied a patch for libsndfile.
- This wasn't quite ideal, because I would have to maintain two (3 if
- you include Win32) separate files containing the exported symbols.
- A better solution was to create this script which can generate a
- Symbols file for Linux, MacoSX and any other OS that supports
- minimising the number of exported symbols.
-
- * configure.ac src/Makefile.am
- Hook the new script into the build process.
-
-2003-12-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Added comments about Steve Dekorte's SoundConverter scam.
-
-2003-12-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Axel Röbel pointed out that on Mac OSX a pipe is not considered a fifo
- (S_ISFIFO (st.st_mode) is false) but a socket (S_ISSOCK (st.st_mode) is
- true). The test has therefore been changed to is S_ISREG and anything
- which which does not return true for S_ISREG is considered a pipe.
-
-2003-11-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Fix update_header_test to pass SDS.
-
- * src/sds.c
- More minor fixes.
-
- * tests/floating_point_test.c
- Add test for SDS files.
-
- * src/command.c
- Add SDS to major_formats array.
-
-2003-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl tests/misc_test.c
- Add tests for SDS files.
-
- * src/sds.c
- Fix a bug in header update code.
-
-2003-11-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sds.c
- Get file write working.
-
- * src/paf.c
- Fix a potential bug in paf24_seek().
-
-2003-11-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Add Q/A about u-law encoded WAV files.
-
- * Win32/*.h
- Updated so it compiles on Win32.
-
-2003-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Add -alaw and -ulaw command line arguments.
-
- * configure.ac
- Add library versioning comments.
- Add arguments to AC_INIT.
-
-2003-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Ross Bencina has contributed code to replace all of the (mostly broken)
- Win32 POSIX emulation calls with calls the native Win32 file I/O API.
- This code still needs testing but is likely to be a huge improvemnt
- of support for Win32. Thanks Ross.
-
-2003-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/dwvw.c
- Removed filedes field from the DWVW_PRIVATE struct.
-
- * src/file_io.c
- Change psf_fopen() so it returns psf->error instead of the file descriptor.
- Add new functions psf_set_stdio() and psf_set_file().
-
- * src/sndfile.c
- Change these to work with changed psf_fopen() return value.
- Remove all uses of psf->filedes from sndfile, making it easier to slot native
- Win32 API file handling functions.
-
- * src/test_file_io.c
- Minor changes to make it compile with new file_io.c stuff.
-
-2003-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/gsm610.h
- Rename a variable from true to true_flag. As Ross Bencina points out,
- true is defined in the C99 header <stdbool.h>.
-
- * src/file_io.c
- If fstat() fails, return SF_TRUE instead of -1 (Ross Bencina).
-
-2003-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Increase the size of SF_BUFFER_LEN and SF_HEADER_LEN.
-
- * src/sndfile.c
- Fix sf_read/write_raw which were dividing by psf->bytwidth and
- psf->blockwidth which can both be zero.
-
- * examples/sndfile-info.c
- Increase size of BUFFER_LEN.
-
-2003-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add checks for <sys/wait.h> and ssize_t.
- Other Win32/MinGW checks.
-
- * src/aiff.c src/au_g72x.c src/file_io.c src/gsm610.c src/interleave.c
- src/paf.c src/sds.c src/svx.c src/voc.c src/w64.c src/wav.c src/xi.c
- Fix compiler warnings.
-
-2003-09-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/scale_clip_test.tpl
- Add definition of M_PI if needed.
-
-2003-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Detect if S_IRGRP is declared in <unistd.h>.
-
- * src/file_io.c tests/*.tpl tests/*.c
- More fixes for Win32/MSVC++ and MinGW. MinGW does have <unistd.h> but that
- file doesn't declare S_IRGRP.
-
-2003-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/config.h.in
- Add comment stating that the sf_count_t typedef is determined when
- libsndfile is being compiled.
-
- * tests/utils.tpl
- Modified so that utils.c gets one copy of the GPL and not two.
-
-
-2003-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/unistd.h src/sf_unistd.h
- Move first file to the second. This will help for Win32/MSVC++ and MinGW.
-
- * Win32/Makefile.am src/Makefile.am
- Changed in line with above.
-
- * Win32/Makefile.msvc
- Removed "/I Win32" which is no longer required.
-
- * src/file_io.c src/test_file_io.c tests/*.tpl tests/*.c
- If HAVE_UNISTD_H include <unistd.h> else include <sf_unistd.h>. This should
- work for Win32, MinGW and other fakes Unix-like OSes.
-
- * src/*.c
- Removed #include <unistd.h> from files which didn't need it.
-
-2003-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * libsndfile.spec.in
- Apply fix from Andrew Schultz.
-
-2003-09-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/vox_adpcm.c
- Only set psf->sf.samplerate if the existing value is invalid.
-
-2003-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Started adding support for ALSA output.
-
-2003-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Removed <stdlib.h> from sndfile.h.
-
- * src/*.c examples/*.c tests/*.c tests/*.tpl
- Added <stdlib.h> where needed.
-
-2003-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Added ARRAY_LEN, SF_MAX and SF_MIN macros.
-
-2003-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Remove statements about alternative licensing arrangements.
-
-2003-08-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * MacOS MacOS9 Makefile.am configure.ac
- Change directory name from MacOS to MacOS9
-
- * MacOS9/MacOS9-readme.txt
- Change name to make it really obvious, add text to top of file to make it
- still more obvious again.
-
-2003-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_log_printf.c
- Add tests for %u conversions.
-
- * src/common.c
- Fix psf_log_printf() %u conversions.
-
-2003-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fixed a bug where opening a file with a non-trival header in SFM_RDWR mode
- would over-write part of the header. Thanks to Axel Röbel for pointing
- this out. Axel also provided a patch to fix this but I came up with a
- neater and more general solution.
- Return error when openning an AIFF file with data after the SSND chunk
- (Thanks Axel Röbel).
-
- * tests/aiff_rw_test.c
- Improvements to test program which will later allow it to be generalised to
- test WAV, SVX and others as required.
-
-2003-08-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pipe_test.c
- Add useek_pipe_rw_test() submitted by Russell Francis.
-
- * src/sndfile.c
- In sf_open_fd(), check if input file descriptor is a pipe.
-
- * src/sndfile.[ch]
- Fix typo in variable name do_not_close_descriptor.
-
-2003-08-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_log_printf.c
- Improve the tests for %d and %s conversions.
-
- * src/common.c
- Fixed a few problems in psf_log_printf() found using new tests.
-
-2003-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add -Wwrite-strings warning to CFLAGS if the compiler is GCC. Thanks to
- Peter Miller (Aegis author) for suggesting this and supplying a patch.
-
- * src/*.c examples/*.c tests/*.c
- Fix all compiler warnings arising from the above.
-
-2003-08-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/aiff_rw_test.c tests/Makefile.am
- New test program to check for errors re-writing the headers of AIFC files
- opened in mode SFM_RDWR.
-
-2003-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Applied a patch from Tero Pelander to allow this program to run on systems
- using devfs which used /dev/sound/dsp instead of /dev/dsp.
-
-2003-07-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/new_file_type.HOWTO
- Updated document. Still incomplete.
-
-2003-06-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fix VALIDATE_SNDFILE_AND_ASSIGN_PSF which was returning an error rather
- than saving it and returning zero.
-
-2003-06-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Two fixes for Mac OS9.
- Fix all casts from sf_count_t to ssize_t (not size_t).
-
-2003-06-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fix for reading files with RIFF length of 8 and data length of 0.
-
-2003-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c tests/*.c tests/*.tpl
- Added comments to mark code for removal when make Lite version of
- libsndfile.
-
-2003-06-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Add extra error checking for unrecognised arguments.
-
-2003-06-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ima_adpcm.c
- Started adding code to write IMA ADPCM encoded AIFF files.
-
- * src/test_log_printf.c src/Makefile.am
- New file to test psf_log_printf() function and add hooks into build system.
-
- * src/common.c
- Move psf_log_printf() function to top of the file and only compile the rest
- of the file if if PSF_LOG_PRINTF_ONLY is not defined.
-
-2003-06-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/config.h Win32/sndfile.h
- Updated with new config variables.
-
- * Win32/unistd.h src/file_io.c
- Added implementation of S_ISFIFO macro which Win32 seems to lack and is
- used in src/file_io.c.
-
- * tests/utils.tpl
- Added #include <unitstd.h> to pull in Win32/unistd.h so it compiles for
- Win32.
-
- * src/Makefile.msvc
- Added src\test_file_io.exe build target and run this as the very first
- test.
-
- * tests/win32_test.c
- Add support for testing Cygwin32.
-
- * configure.ac
- Detect POSIX fsync() and fdatasync() functions.
-
- * src/file_io.c
- If compiling for Cygwin, call fsync() before calling fstat() to retrieve
- file length.
-
- * tests/pcm_test.tpl
- Add a test for lrintf() function. This was required to detect a really
- broken lrint() and lrintf() on Cygwin.
-
- * tests/misc_test.c
- Don't run permission test when compiling under Cygwin.
-
- * src/float_cast.h
- Fix fallback macro for lrint() and lrintf() to cast to long instead of int
- to match official function prototypes.
-
-2003-06-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-convert.c
- Modifications to improve accuracy of conversions; use double data for
- floating point and int for everything else.
-
- * src/ima_apdcm.c
- Completed work on decoding IMA ADPCM encoded AIFF files. Still need to
- get encoding working.
-
-2003-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/ima_adpcm.c
- Start working on getting IMA ADPCM encoded AIFF files working.
-
-2003-05-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fixed the touch command for when the autogen program is not found (Matt
- Flax).
-
- * src/ulaw.c src/alaw.c
- Made these pipe-able.
-
-2003-05-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c src/ircam.c
- Fixed writing to pipe.
-
- * src/wav.c src/aiff.c src/nist.c src/mat*.c src/svx.c src/w64.c
- Return SFE_NO_PIPE_WRITE if an attempt is made to write to a pipe.
-
-2003-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-info.c
- Modified to detect unknown file lengths.
-
- * src/mat4.c
- Fix reading from a pipe.
-
-2003-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pipe_test.c
- Add more file types to tests.
-
- * src/mat4.c
- Removed explicit setting of psf->sf.seekable to SF_TRUE.
-
- * tests/utils.tpl
- Add macro for generating and check data in the stdio and pipe tests.
-
- * tests/stdout_test.c tests/stdin_test.c
- Use the above macro to generate known data on output and check data on
- input.
-
- * src/voc.c src/htk.c common.h sndfile.c
- Disallow reading/writing VOC and HTK files from/to pipes be returning new
- error values.
-
- * src/w64.c
- Fixes to allow reading from a pipe.
-
-2003-05-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac src/sndfile.h.in
- When the configure script determines the sizeof (sf_count_t), also set the
- value of SF_COUNT_MAX in sndfile.h.
-
- * configure.ac
- Remove -pedantic flag from default GCC compiler flags.
-
- * tests/pipe_test.c
- Add a pipe_read_test() before doing pipe_write_test().
-
- * tests/scale_clip_test.c
- Add test to make sure non-normalized values also clip in the right way.
-
-2003-05-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Add test to detect processor clipping capabilities.
-
- * tests/stdin_test.c tests/stdout_test.c
- Fix a pair of compiler warnings.
-
- * src/common.h
- Add new pipeoffset field to SF_PRIVATE. This will contain the current file
- offset when operating on a pipe.
-
- * src/common.c
- Removed direct calls to psf_fread()/psf_fseek()/psf_fgets() etc from
- psf_binheader_readf and redirect them to new buffered versions
- header_read(), header_seek() and header_gets().
- Add "G" format specifier to emulate fgets() functionality with buffering.
- This will allow reading some file types from pipes.
-
- * src/file_io.c
- When the file descriptor is a pipe, manintain psf->pipeoffset.
-
- * src/pvf.c
- Change use of psf_fgets() to psf_binheader_readf() as required but changes to header re
-
- * src/au.c
- Fix reading from a pipe.
-
-2003-05-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c
- Add clipping versions of the f2XXX_array() functions to allow option of
- clipping data that would otherwise overflow.
-
- * tests/scale_clip_test.tpl tests/scale_clip_test.def
- New files test that clipping option does actually work.
-
-2003-05-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Fixed a typo ("OS(" instead of "OS9").
-
-2003-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/open_fail_test.c
- Include <string.h> to prevent warning message of missing declaration of
- memset().
-
-2003-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Add new "add_clipping" field to SF_PRIVATE.
-
- * src/sndfile.h.in src/sndfile.c
- Add command SFC_SET_CLIPPING which sets/resets add_clipping field.
-
-2003-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Add docs for sf_set_string() and sf_get_string().
-
- * src/common.h src/sndfile.c
- Add new SFE_STR_BAD_STRING error.
-
- * tests/stdin_test.c tests/stdout_test.c
- Removed all non-error print statements.
-
- * tests/stdio_test.c tests/pipe_test.c tests/Makefile.am
- Add print statements removed from two files above.
-
-2003-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * libsndfile.spec.in
- Fixed a coulpe of minor errors discovered by someone calling themselves
- Agent Smith.
-
- * src/common.c src/common.h src/file_io.h
- Added is_pipe field to SF_PRIVATE and declaration of psf_is_pipe()
- function. (Axel Röbel)
-
- * src/sndfile.c
- Fixed determination of whether the file is a pipe. (Axel Röbel)
-
- * src/paf.c
- Force paf24 to start with undefined mode. (Axel Röbel)
-
- * tests/pipe_test.c
- Mods to make this test work and actually do the test on RAW files. (Axel
- Röbel).
-
-2003-05-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a potential bug where psf->sf.seekable was being set to FALSE when
- operating on stdin or stdout but then the default initialiser was reseting
- it to TRUE. Thanks to Axel Röbel.
-
- * src/aiff.c
- Fixed a bug in the header parser where it was not handling an odd length
- COMM chunk correctly. Thanks to Axel Röbel.
-
- * src/test_file_io.c
- Add more tests.
-
- * tests/win32_test.c
- New file for showing the bugs in the Win32 implementation of the POSIX API.
- It also runs on Linux for sanity checking.
-
- * tests/Makefile.am Win32/Makefile.msvc
- Hook the new test program into the build system.
-
-2003-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/test_file_io.c
- New test program to test operation of functions defined in file_io.c. This
- should make supporting win32 significantly easier.
-
- * src/Makefile.am
- Hook new test program into the build system.
-
- * src/file_io.c
- Add compile/run time check that sizeof statbuf.st_size and sf_count_t are
- the same.
-
- * src/common.h src/sndfile.c
- Added new error code and error message for new check.
-
- * tests/benchmark.tpl
- Fix to use frames instead of samples in SF_INFO.
-
-2003-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- More stuffing about working around PLAIN OLD-FASHIONED **BUGS** in Win32.
-
- * examples/sndfile-info.c
- Applied patch from Conrad Parker to add "--help" and "-h" options as
- well as an improved usage message.
-
-2003-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c
- Added embedded file support.
-
- * tests/multi_file_test.c
- Added tests for embedded AU files.
- Added verbose testing mode.
-
- * src/common.h src/sndfile.c
- Added an embedded AU specific error code and message.
-
- * src/wav.c
- Added patch from Conrad Parker which filled in a little more information
- about ACIDized WAV files.
-
-2003-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Fixed Win32 version of psf_fseek() which was calling psf_get_filelen()
- which was in turn calling psf_fseek() which in the end blew the stack.
- Now of course this would have been easy to find on Linux, but this blow
- up was happening in kernel32.dll and the fscking MSVC++ debugger couldn't
- figure out what call caused this (it couldn't even tell me the stack had
- overflowed) and was absolutley useless for this debugging exercise.
- On top of that, the reason I got into this mess was that windoze doesn't
- have a working fstat() function which can return file lengths > 2 Gig. It
- HAS a fscking _fstati64() but the file length value is only updated AFTER
- the bloody file is closed. That makes it completely useless.
- How the hell do people stand working on this crap excuse of an OS?
-
-2003-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/unistd.h src/file_io.c
- Moved definitions of S_IGRP etc from file_io.c to unistd.h so that these
- can be used in the test programs.
-
- * Win32/libsndfile.def
- Added sf_open_fd.
-
- * Win32/sndfile.h
- Updated to match src/sndfile.h.in.
-
- * Win32/Makefile.msvc
- Added dither.c and htk.c to libsndfile.dll target.
-
-2003-04-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- First attempt at getting the Win32 versions of the these functions working.
- They still need to be tested.
-
-2003-04-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/strings.c
- Found and fixed a bug which was causing psf_store_string() to fail on
- Motorola 68k processors. Many thanks to Joshua Haberman (Debian maintainer
- of libsndfile) for compiling and running debug code to help me debug the
- problem.
-
-2003-04-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/file_io.c src/wav.c src/aiff.c
- Much hacking to get reading and writing of embedded files working (ie sound
- files at a non-zero files offset).
-
- * doc/embedded_files.html
- First pass atempt at documenting reading/writing embedded files.
-
-2003-04-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Updated answer to "Why doesn't libsndfile do interleaving/de-interleaving?"
-
-2003-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/aiff.c
- Fix retrieving and storing of string data from files. Need to be careful
- about using psf->buffer for strings.
-
-2003-04-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Fix psf_fseek() for seeks withing embedded files.
-
-2003-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Changed the definition of SNDFILE slightly to produce warnings when it isn't
- used correctly. This should have zero affect in code which uses the SNDFILE
- type correctly.
-
- * src/sndfile.c
- Fixed a few compiler warnings cause by the changes to the SNDFILE type.
-
-2003-04-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Added question and answer to the question "How about adding the ability
- to write/read sound files to/from memory buffers?".
-
-2003-04-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Removed un-needed enums declaring TRUE and FALSE and replaced usage of
- these with SF_TRUE and SF_FALSE.
-
- * tests/multi_file_test.c
- New test program to test sf_open_fd() on files containing data other than
- a single sound file.
-
-2003-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- When creating files, set the readable by others flag. This still allows
- further restrictions to be enforced by use of the user's umask. Fix
- suggested by Eric Lyon.
-
-2003-04-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c
- Changed sf_open_fd(). Dropped offset parameter and added a close_desc
- parameter. If close desc is TRUE, the file descritpor passed into the
- library will be closed when sf_close() is called.
-
- * tests/utils.tpl
- Modified call to sf_open_fd() to set close_desc parameter to SF_TRUE.
-
-2003-04-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Add a string (using sf_set_string() function) before and after data section
- of all files. This will make sure that if string data can be added, it
- doesn't overwrite real audio data.
-
-2003-04-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Started work on supporting a non-zero offset parameter for sf_open_fd ().
-
- * src/<file header parsers>.c
- Removed many uses of psf_fseek (SEEK_END) which to allow for future use of
- sf_open_fd() with non-zero offset.
- Associated refactoring.
-
- * src/aiff.c
- Implemented functionality required to get sf_get_string() and
- sf_set_string() working for AIFF files.
-
-2003-04-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl
- Modified test_open_file_or_die() to alternately use sf_open() and
- sf_open_fd().
-
- * src/svx.c
- Fixed a bug which occurred when openning an existing file for read/write
- using sf_open_fd(). In this case, the existing NAME chunk needs to be
- read into psf->filename.
- Fixed printing of sf_count_t types to logbuffer.
-
-2003-03-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Added prototype for new function sf_open_fd().
-
- * src/sndfile.c
- Moved most of the code in sf_open() to a new function psf_open_file().
- Created new function sf_open_fd() which also uses psf_open_file() but
- does not currently support the offset parameter.
-
- * doc/api.html
- Document sf_open_fd().
-
-2003-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a memory leak reported by Evgeny Karpov. Memory leak only occurred
- when an attempt was made to read and the open() call fails.
-
-2003-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/open_fail_test.c
- New test program to check for memory leaks when sf_open fails on a valid
- file. Currently this must be run manually under valgrid.
-
- * tests/Makefile.am
- Hook new test program into build.
-
-2003-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Octave/sndfile_save.m Octave/sndfile_play.m
- Added a -mat-binary option to the octave save command to force the output
- to binary mode even if the user has set ascii data as the default. Found
- by Christopher Moore.
-
-2003-02-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/dither.html
- New file which will document the interface which allows the addition of
- audio dither when sample word sizes are being reduced.
-
- * src/dither.c
- More work.
-
-2003-02-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- In update_header_test(), make HTK files a special case.
-
- * doc/index.html
- Added HTK to the feature matrix.
-
-2003-02-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/htk.c
- New file for reading/writing HMM Tool Kit files.
-
- * src/sndfile.h.in src/sndfile.c src/command.c src/Makefile.am
- Hook in htk.c
-
- * tests/write_read_test.tpl tests/misc_test.c tests/Makefile.am
- Add tests for HTK files.
-
-2003-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed a bug where the LIST chunk length was being written incorrectly.
-
- * tests/string_test.c
- Added call to check_log_buffer().
- Minor cleanups.
-
-2003-02-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_w64.h
- Applied patch from Antoine Mathys to add extra WAV format definitions and
- a G72x_ADPCM_WAV_FMT struct definition.
-
- * src/wav_w64.c
- Applied patch from Antoine Mathys which converts wav_w64_format_str() from
- one huge inefficient switch statement to a binary search.
-
- * tests/string_test.c
- Dump log buffer if tests fail.
-
-2003-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/string_test.c
- David Viens supplied some modifications to this file which showed up a bug
- when using sf_set_string() and the sf_writef_float() functions.
-
- * src/sndfile.c
- Fixed the above bug.
-
-2003-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Added Q and A on how to detect libsndfile in configure.in (at the suggestion
- of Davy Durham).
-
-2003-02-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Add enums and typedefs for dither.
- Deprecate SFC_SET_ADD_DITHER_ON_WRITE and SFC_SET_ADD_DITHER_ON_READ, to be
- replaced with SFC_SET_DITHER_ON_WRITE and SFC_SET_DITHER_ON_READ which will
- allow different dither algorithms to be enabled.
- Added SFC_GET_DITHER_INFO_COUNT and SFC_GET_DITHER_INFO.
-
- * src/sndfile.h.in src/Version_script.in Win32/libsndfile.def.
- Added public sf_dither_*() functions.
-
- * src/sndfile.c
- Implement commands above.
-
- * src/dither.c
- More work. Framework and external hooks into dither algorithms complete.
-
-2003-02-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/version-1.html libsndfile_version_convert.py
- Remove redundant files.
-
- * doc/index.html doc/api.html
- Remove links to version-1.html.
-
- * src/dither.c
- New file to allow the addition of audio dither on input and output.
-
- * src/common.h
- Add prototype for dither_init() function.
-
- * Makefile.am doc/Makefile.am
- Changes for added and removed files.
-
-2003-02-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/Makefile.msvc
- Changes to force example binaries to be placed in the top level directory
- instead of the examples/ directory.
- Add src/strings.c and src/xi.c to the build.
- Add string_test to build and to tests on WAV files.
-
- * doc/index.html
- Added XI to support matrix.
-
-2003-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Added prototypes for sf_get_string() and sf_set_string() and SF_STR_*
- enum values.
-
- * src/sndfile.c
- Added public interface to sf_get_string() and sf_set_string().
-
- * src/wav.c
- Added code for setting and getting strings in WAV files.
-
- * tests/string_test.c
- New test program for sf_get_string() and sf_set_string() functionality.
-
- * tests/Makefile.am
- Hook new test program into build and test framework.
-
-2003-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Added fields to SF_PRIVATE for string data needed to implement
- sf_get_string() and sf_set_string().
-
- * src/strings.c
- New file for storing and retrieving strings to/from files.
-
- * src/Makefile.am
- Added strings.c to build.
-
-2003-01-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/xi.c
- Read seems to be working so looking at write.
-
- * src/sndfile.h.in
- Added SF_FORMAT_XI, SF_FORMAT_DPCM_8 and SF_FORMAT_DPCM_16 enum values.
-
- * tests/floating_point_test.c tests/lossy_comp_test.c tests/Makefile.am
- Added test for 8 and 16 bit XI format files.
-
-2003-01-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Added a non-lawyer readable summary of the licensing provisions as
- suggested by Steve Dekorte.
-
-2003-01-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed a compiler warning found by Alexander Lerch.
-
-2003-01-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Fixed the multiple linking of libm.
-
-2003-01-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/Makefile.mcvs
- Added comments on the correct way to set up the MSVCDir environment
- variable.
-
- * doc/win32.html
- Add on how to set up the MSVCDir environment variable.
-
-2003-01-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c examples/sndfile-info.c
- When run on Win32 without any command line parameters print a message and
- then sleep for 5 seconds. This means the when somebody double clicks on
- these programs in explorer the user will actually see the message.
-
-2003-01-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Bypass permission test if running as root because root is allowed to open
- a readonly file for write.
-
-2003-01-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/Makefile.msvc
- Added pvf.c and xi.c source files to project.
-
- * src/sndfile.h
- Updated for PVF files.
-
-2003-01-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Modified validate_sfinfo() to force samplerate, channels and sections
- to be >= 1.
- In format_from_extension() replaced calls to does_extension_match()
- with strcmp().
-
- * src/xi.c
- More work.
-
-2003-01-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/Makefile.am
- Added octave.html which had been left out. Found by Jan Weil.
-
-2003-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pvf.c src/common.h src/sndfile.c
- Fixed error handling for PVF files.
-
- * src/xi.c
- New file for handling Fasttracker 2 Extended Instrument files. Not working
- yet and included when configured with --enable-experimental.
-
- * src/sndfile.c src/common.h
- Hooked in new file xi.c.
-
-2002-12-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/rx2.c
- Added a patch from Marek Peteraj which sheds a little more light on the
- slices within an RX2 file. Still need to find out data encoding.
-
-2002-12-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Started work on decoding 'acid' and 'strc' chunks.
-
-2002-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/peak_check_test.c
- Minor cleanup.
-
-2002-12-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl
- Added check to make sure no error was generated when an attempt was made to
- read past the end of the file.
-
-2002-12-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/lists.html
- Added "mailto" links for all three lists.
-
- * src/pvf.c
- New file for Portable Voice Format files.
-
- * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am
- Added hooks for SF_FORMAT_PVF format files.
-
- * tests/write_read_test.tpl tests/std*.c
- Add tests for SF_FORMAT_PVF.
-
- * doc/index.html
- Add PVF to the compatibility matrix.
-
- * src/pcm.c src/alaw.c src/ulaw.c src/float32.c src/double64.c
- Previously, attempts to read beyond the end of a file would set psf->error
- to SFE_SHORT_ERROR. This behaviour diverged from the behaviour of the POSIX
- read() call but has now been fixed.
- Attempts to read beyond the end of the file will return a short read count
- but will not longer set any error.
-
-2002-12-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Add more sanity checking when opening a RAW file for read. When format is
- not RAW, zero out all members of the SF_INFO struct.
-
- * tests/raw_test.c
- Add bad_raw_test() to check for above problem.
-
- * tests/stdin_test.c examples/sndfile-info.c
- Set the format field of the SF_INFO struct to zero before calling
- sf_open().
-
- * doc/api.html
- Add information about the need to set the format field of the SF_INFO struct
- to zero when opening non-RAW files for read.
-
- * configure.ac
- Removed use of conversion script on Solaris. Not all Solaris versions
- support it.
-
- * doc/lists.html
- New file containg details of the mailing lists.
-
- * doc/index.html
- Add a link to the above new file.
-
-2002-12-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/dft_cmp.c
- Fixed a SIGFPE on Alpha caused by a log10 (0.0). Thanks to Joshua Haberman
- for providing the gdb traceback.
-
-2002-11-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Added more capabilities to 'smpl' chunk parser.
-
- * src/sndfile.c
- Fixed some (not all) possible problems found with Flawfinder.
-
-2002-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a bug in sf_seek(). This bug could only occur when an attempt was
- made to read beyond the end and then sf_seek() was called with a whence
- parameter of SEEK_CUR.
-
- * src/file_io.c
- Win32's _fstati64() does not work, it returns BS. Re-implemented
- psf_get_filelen() in terms of psf_fseek().
-
- * tests/write_read_test.tpl
- Add a test to detect above bug.
-
- * src/float_cast.h
- Modification to prevent compiler warnings on Mac OS X.
-
- * src/file_io.c
- Fixes for windows (what a f**ked OS).
-
-2002-11-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.ac
- Disable use of native lrint()/lrintf() on Mac OSX. These functions exist on
- Mac OSX 10.2 but not on 10.1. Forcing the use of the versions in
- src/float_cast.h means that a library compiled on 10.2 will still work on
- 10.1.
-
-2002-11-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in configure.ac
- Renamed configure.in to configure.ac as expected by later versions of
- autoconf.
- Slight hacking of configure.ac to work with version 2.54 of autoconf.
- Changed to using -dumpversion instead of --version for determining GCC
- version numer as suggested by Anand Kumria.
-
- * src/G72x/Makefile.am
- Slight hacking required for operation with automake 1.6.3.
-
-2002-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- In psf_binheader_readf() changed type parameter type "b" type from size_t
- to int to prevent errors on IA64 CPU where sizeof (size_t) != sizeof (int).
- Thanks to Enrique Robledo Arnuncio for debugging this.
-
-2002-11-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * test/command_test.tpl
- Changed test value so test would pass on Solaris.
-
- * src/Version_script.in
- Modified version numbering so that later versions of 1.0.X can replace
- earlier versions without recompilation.
-
- * src/vox_adpcm.c
- Fixed bug causing short reads.
-
-2002-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * test/floating_point_test.c
- Code cleanup using functions from util.c.
- Add test for IEEE replacement floats and doubles.
-
-2002-11-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed a possible divide by zero error when read the 'smpl' chunk. Thanks to
- Serg Repalov for the example file.
-
- * tests/pcm_test.tpl
- Used sf_command (SFC_TEST_IEEE_FLOAT_REPLACE) to test IEEE replacement code.
- Clean up pcm_double_test().
-
- * src/float32.c src/double64.c
- Force use of IEEE replacement code using psf->ieee_replace is TRUE,
- Print message to log_buffer as well.
- Rename all broken_read_* and broken_write* functions to replace_read_* and
- replace_write_*.
-
- * tests/util.tpl
- Added string_in_log_buffer().
-
- * tests/pcm_test.tpl
- Use string_in_log_buffer() to ensure that IEEE replacement code has been
- used.
-
- * configure.in
- Removed --enable-force-broken-float option. IEEE replacement code is now
- always tested.
-
-2002-10-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/double64.c
- Implement code for read/writing IEEE doubles on platforms where the native
- double format is not IEEE.
-
- * src/float32.c src/common.h
- Remove float32_read() and float32_write(). Replace with float32_le_read(),
- float32_be_read(), float32_le_write() and float32_be_write() to match stuff
- in src/double64.c.
-
- * src/common.c
- Fix all usage of float32_write().
-
- * src/sndfile.h.in
- Added SFC_TEST_IEEE_FLOAT_REPLACE command (testing only).
-
- * src/common.h
- Added SF_PRIVATE field ieee_replace.
-
- * src/sndfile.c
- In sf_command() set/reset psf->ieee_replace.
-
-2002-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pcm_test.tpl
- Fixed a problem when testing with --enable-force-broken-float. The test was
- generating a value of negative zero and the broken float code is not able
- to write negative zero. Removing the negative zero fixed the test.
-
-2002-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Added fix for Cygwin (suggested by Maros Michalik).
-
-2002-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Improved error detection and handling.
-
- * src/file_io.c src/common.h
- Removed functions psf_ferror() and psf_clearerr() which were redundant
- after above improvements.
-
- * src/aiff.c src/svx.c src/w64.c src/wav.c
- Removed all use of psf_ferror() and psf_clearerr().
-
- * src/sndfile.c
- Removed #include of <stdio.h>, <unistd.h>, <fcntl.h> and <math.h> which
- are no longer needed.
-
- * tests/misc_test.c
- Added test to make sure the correct error message is returned with an
- existing read-only file is openned for write.
-
-2002-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html doc/api.html
- Updated for OKI Dialogic ADPCM files.
-
- * src/command.c
- Added VOX ADPCM to sub_fomats.
-
-2002-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/vox_adpcm.c src/Makefile.am
- New file for handling OKI Dialogic ADPCM files.
-
- * src/sndfile.h
- Add new subtype SF_FORMAT_VOX_ADPCM.
-
- * src/sndfile.c
- Renamed function is_au_snd_file () to format_from_extenstion () and expanded
- its functionality to detect headerless VOX files.
-
- * src/raw.c
- Added hooks for SF_FORMAT_VOX_ADPCM.
-
- * examples/sndfile-info.c
- Print out file duration (suggested by Conrad Parker).
-
- * libsndfile.spec.in
- Force installation of sndfile.pc file (found by John Thompson).
-
- * tests/Makefile.am tests/lossy_comp_test.c tests/floating_point_test.c
- Add tests for SF_FORMAT_VOX_ADPCM.
-
-2002-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Add test which attempts to write to /dev/full (on Linux anyway) to check
- for correct handling of writing to a full filesystem.
-
- * src/sndfile.c
- Return correct error message if the header cannot be written because the
- filesystem is full.
-
- * tests/util.tpl
- Corrected printing of file mode in error reporting.
-
- * src/mat5.c
- Fixed a bug where a MAT5 file written by libsndfile could not be opened by
- Octave 2.1.36.
-
-2002-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/file_io.c
- All low level file I/O have been modified to be better able to report
- system errors resulting from calling system level open/read/write etc.
-
- * src/*.c
- Updated for compatibility with above changes.
-
- * examples/cooledit-fixer.c
- New example program which fixes badly broken file created by Syntrillium's
- Cooledit which are marked as containing PCM samples but actually contain
- floating point data.
-
- * examples/Makefile.am
- Hooked cooledit-fixer into the build system.
-
-2002-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Document SFC_GET_FORMAT_INFO.
-
-2002-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/wav32_aiff24.c examples/sndfile2oct.c examples/sfhexdump.c
- examples/sfdump.c
- Removed these files because they weren't interesting.
-
- * examples/sfconvert.c examples/sndfile-convert.c
- Renamed the first to the latter.
-
- * examples/Makefile.am
- Added sndfile-convert to the bin_PROGRAMS, so it is installed when the lib
- is installed.
- Removed old programs wav32_aiff24 and sndfile2oct.
-
- * man/sndfile-convert.1
- New man page.
-
- * examples/sndfile-convert.c
- Added some gloss now that sndfile-convert.c is an installed program.
-
- * src/sndfile.h.in src/sndfile.c src/common.h src/command.h
- Added command SFC_GET_FORMAT_INFO.
-
- * tests/command_test.c
- Added tests form SFC_GET_FORMAT_INFO.
-
-2002-10-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- In sf_format_check() return error if samplerate < 0.
-
-2002-10-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fixed bug in handling of COMM chunks with a 4 byte encoding byte but no
- encoding string.
-
-2002-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed repeated word in an error message.
-
-2002-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Improved advertising in Features section.
-
-2002-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Added decoding of 'labl' chunks within 'LIST' chunks.
-
- * src/common.h
- Added (experimental only) SF_FORMAT_OGG and SF_FORMAT_VORBIS and definition
- of ogg_open(). This is nowhere near working yet.
-
- * src/sndfile.c
- Added detection of 'OggS' file marker and added call to ogg_open() to
- switch statement.
-
- * src/ogg.c
- New file. Very early start of Ogg Vorbis support.
-
- * src/wav.c
- Added handling of brain-damaged and broken Cooledit "32 bit 24.0 float
- type 1" files. These files are marked as being 24 bit WAVE_FORMAT_PCM with
- a block alignment of 4 times the numbers of channels but are in fact 32 bit
- floating point.
-
-2002-10-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Modified option --enable-experimental to set ENABLE_EXPERIMENTAL_CODE in
- config.h to either 0 or 1.
-
- * src/sndfile.c
- Modify sf_command (SFC_GET_LIB_VERSION) to append "-exp" to the version
- string if experimental code has been enabled.
-
-2002-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/Makefile.am
- Added -lm to libsndfile_la_LIBADD. This means that -lm is not longer needed
- in the link line when linking something to libsndfile.
-
- * tests/Makefile.am examples/Makefile.am
- Removed -lm from all link lines.
-
- * sndfile.pc.in
- Removed -lm from Libs line.
-
-2002-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Removed all perror() calls.
-
- * src/nist.c
- Removed calls to exit() function.
- Added check to detect NIST files dammaged from Unix CR -> Win32 CRLF
- conversion process.
-
-2002-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c
- New function sf_strerror() which will eventually replace functions
- sf_perror() and sf_error_str().
- Function sf_error_number() has also been changed, but this was documented
- as being for testing only.
-
- * doc/api.html
- Documented above changes.
-
- * tests/*.c examples/*.c
- Changed to new error functions.
-
-2002-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Detect GCC version, and print a warning message about writeable strings
- it GCC major version number is less than 3.
-
-2002-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in doc/api.html
- Documentation fixes.
-
-2002-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/Version_script.in src/Makefile.am configure.in
- Use the version script to prevent the exporting of all non public symbols.
- This currently only works with Linux. Will test on Solaris as well.
-
- * src/float_cast.h
- Added #ifndef to prevent the #warning directives killing the SGI MIPSpro
- compiler.
-
- * src/au_g72x.c src/double64.c src/float32.c src/gsm610.c src/ima_adpcm.c
- src/ms_adpcm.c
- Fix benign compiler warnings arising from previously added compiler
- flags.
-
-2002-09-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a bug in sf_error_str() where errnum was used as the index instead
- of k. Found by Tim Hockin.
-
- * examples/sndfile-play.c
- Fixed a compiler warning resulting from a variable shadowing a previously
- defined local.
-
-2002-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in src/sndfile.c
- Added command SFC_SET_RAW_START_OFFSET.
-
- * doc/command.html
- Document SFC_SET_RAW_START_OFFSET.
-
- * tests/raw_test.c tests/Makefile.am
- Add new file for testing SF_FORMAT_RAW specific functionality.
-
- * tests/dwvw_test.c
- Updates.
-
-2002-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Modified reading of 'smpl' chunk to take account of the sampler data field.
-
- * tests/utils.tpl tests/utils.h
- Added function print_test_name().
-
- * tests/misc_test.c tests/write_read_test.tpl tests/lossy_comp_test.c
- tests/pcm_test.tpl tests/command_test.tpl tests/floating_point_test.c
- Convert to use function print_test_name().
-
-2002-09-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/octave.html
- Added a link to some other Octave scripts for reading and writing sound
- files.
-
- * src/paf.c
- Change type of dummy data field to int. This should fix a benign compiler
- warning on some CPUs.
- Removed superfluous casts resulting from the above change.
-
- * src/rx2.c
- More hacking.
-
-2002-09-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/mat5.c src/common.c
- Changed usage of snprintf() to LSF_SNPRINTF().
-
- * Win32/Makefile.msvc
- Updated to include new files and add new tests.
-
- * Win32/config.h Win32/sndfile.h
- Updated.
-
- * doc/api.html
- Added note about the possibility of "missing" features actually being
- implemented as an sf_command().
-
-2002-09-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/misc_test.c
- Added previously missing update_header_test and zero_data_tests for PAF,
- MAT4 and MAT5 formats.
-
- * src/paf.c src/mat4.c src/mat5.c
- Fixed bugs uncovered by new tests above.
-
- * src/mat5.c
- Generalised parsing of name fields of MAT5 files.
-
- * src/mat5.c src/sndfile.c
- Added support for unsigned 8 bit PCM MAT5 files.
-
- * tests/write_read_test.tpl
- Added test for unsigned 8 bit PCM MAT5 files.
-
- * doc/index.html
- Added unsigned 8 bit PCM MAT5 to capabilities matrix.
-
-2002-09-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * test/update_header_test.c tests/misc_test.c
- Renamed update_header_test.c to misc_test.c.
- Added zero_data_test() to check for case where file is opened for write and
- closed immediately. The resulting file can be left in a state where
- libsndfile cannot open it. Problem reported by Werner Schweer, the author
- of Muse.
-
- * src/aiff.c
- Removed superfluous cast.
-
- * src/wav.c src/svx.c
- Fixed case of file generated with no data.
- Removed superfluous cast.
-
- * src/sndfile.c
- Fixed error on IA64 platform caused by incorrect termination of
- SndfileErrors struct array. This problem was found in the Debian buildd
- logs (http://buildd.debian.org/).
-
- * configure.in
- Added Octave directory.
-
- * Octave/Makefile.ma
- New Makfile.am for Octave directory.
-
- * Octave/sndfile_load.m Octave/sndfile_save.m Octave/sndfile_play.m
- New files for working with Octave.
-
- * doc/octave.html
- Document explaining the use of the above three Octave scripts.
-
-2002-09-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed bug in RDWR mode.
-
-2002-09-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Fixed psf_get_date_str() for systems which don't have gmtime_r() or
- gmtime().
-
- * src/file_io.c
- Added #include <io.h> for Win32. Reported by Koen Tanghe.
-
-2002-09-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Added 'S' format specifier for psf_binheader_writef() which writes a C
- string, including single null terminator to the header.
- Added 'j' format specifier to allow jumping forwards or backwards in the
- header.
- Added function psf_get_date_str().
-
- * src/mat5.c
- Complete read and write support.
-
- * doc/index.html
- Added entries for MAT4 and MAT5 in capabilities matrix.
-
-2002-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/mat4.c
- Completed read and write support.
-
- * src/common.h src/sndfile.c
- Added MAT4 and MAT5 specific error messages.
-
- * tests/write_read_test.tpl tests/Makefile.am
- Added tests for MAT4 and MAT5 files.
-
- * tests/stdio_test.c tests/stdout_test.c tests/stdin_test.c
- Added tests for MAT4 and MAT5 files.
-
-2002-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/command.c
- Added elements for SF_FORMAT_MAT4 and SF_FORMAT_MAT5 to major_formats
- array.
-
- * examples/sfconvert.c
- Added mat4 and mat5 output targets.
-
-2002-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Added check to prevent errors openning read only formats for read/write.
-
- * src/interleave.c
- New file for interleaving non-interleaved data. Non-interleaved data is
- only supported on read.
-
- * src/Makefile.am
- Added src/interleave.c to build.
-
-2002-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/double64.c src/common.h
- Added double64_be_read(), double64_le_read(), double64_be_write() and
- double64_le_write() which replace double64_read() and double64_write().
-
- * src/common.c
- Cleanup of psf_binheader_readf() and add ability to read big and little
- endian doubles (required by mat4.c and mat5.c).
- Add ability for psf_binheader_writef() to write doubles to sound file
- headers.
-
-2002-09-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/mat5.c
- New file for reading Matlab (tm) version 5 data files. This is also the
- native binary file format for version 2.1.X of GNU Octave which will be
- used for testing.
- Not complete yet.
-
- * src/mat4.c
- New file for reading Matlab (tm) version 4.2 data files. This is also the
- native binary file format for version 2.0.X of GNU Octave which will be
- used for testing.
- Not complete yet.
-
- * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am
- Mods to add Matlab files.
-
- * src/common.[ch]
- Added readf_endian field to SF_PRIVATE struct allowing endianness to
- remembered across calls to sf_binheader_readf().
- Fixed bug in width_specifier behaviour for printing hex values.
-
-2002-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Check return value of close() call in psf_fclose().
-
-2002-08-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ms_adpcm.c
- Commented out some code where 0x10000 was being subtracted from a short
- and the result assigned to a short again. Andrew Zaja found this.
-
-2002-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Fixed typo found by Tommi Ilmonen.
-
- * src/ima_adpcm.c
- Changed type of diff from short to int to prevent errors which can occur
- during very rare circumstances. Thanks to FUWAFUWA.
-
-2002-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/floating_point_test.c
- Disable testing on machines without lrintf().
-
- * Win32/Makefile.msvc
- Added dwd.c and wve.c to build.
-
- * configure.in
- Bumped version to 1.0.0.
-
-2002-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Add a #include for Mac OS 9. Thanks to Stephane Letz.
-
- * src/wav.c
- Changed an snprintf to LSF_SNPRINTF.
-
- * doc/Makefile.am
- Added version-1.html.
-
-2002-08-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Bumped version to 1.0.rc6.
-
- * src/*.c
- Modified scaling of normalised floats and doubles to integers. Until now
- this has been done by multiplying by 0x8000 for short output, 0x80000000
- for 32 bit ints and so on. Unfortunately this can cause an overflow and
- wrap around in the target value. All thes values have therefore been
- reduced to 0x7FFF, 0x7FFFFFFF and so on. The conversion from ints to
- normalised floats and doubles remains unchanged. This does mean that for
- repeated conversions normalised float -> pcm16 -> normalised float would
- result in a decrease in amplitude of 0x7FFF/0x8000 on every round trip.
- This is undesirable but less undesireable than the wrap around I am trying
- to avoid.
-
- * tests/floating_point_test.c
- Removed file hash checking because new float scaling procedure introduced
- above prevented the ability to crate a has on both x86 and PowerPC systems.
-
-2002-08-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/txw.c
- Completed reading of TXW files. Seek doesn't work yet.
-
- * src/file_io.c
- Added a MacOS 9 replacement for ftruncate().
-
- * MacOS/sndfile.h
- Added MacOS 9 header file. This should be copied into src/ to compile
- libsndfile for MacOS9.
-
-2002-08-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed commands SF_SET_NORM_DOUBLE and SFC_SET_NORM_FLOAT to return their
- values after being set. Reported by Jussi Laako.
-
- * configure.in
- If autogen is not found, touch all .c and .h files in tests/.
-
- * src/common.c
- Added format width specifier to psf_log_printf() for %u, %d, %D and %X.
-
- * src/dwd.c
- Completed implementation of read only access to these files.
-
- * src/common.h src/*.c src/pcm.c
- Removed redundant field chars from SF_PRIVATE struct and modified
- pcm_init() to do without it.
-
-2002-08-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wve.c
- New file implementing read of Psion Alaw files. This will be a read only
- format. Implementation complete.
-
- * src/dwd/c
- Started implementation of DiamondWare Digitized files. Also read only, not
- complete.
-
- * src/wav.c
- Add parsing of 'smpl' chunk.
-
- * src/paf.c
- Fixed reading on un-normalized doubles and floats from 24 bit PAF files.
- This brings it into line with the reading of 8 bit files into
- un-normalized doubles which returns values in the range [-128, 127].
-
- * src/common.c
- Modified psf_log_printf() to accept the %% conversion specifier to allow
- printing of a single '%'.
-
- * src/sds.c
- Read only of 16 bit samples is working. Need to build a test harness for
- this and other read only formats.
-
-2002-08-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Added --enable-experimental configure option.
- Removed pkg-config message at the end of the configure process.
-
- * src/sds.c src/txw.c src/rx2.c src/sd2.c
- Moved all the code in these files inside #if ENABLE_EXPERIMENTAL_CODE
- blocks and added new *_open() function for the case where experimental is
- not enabled. These new functions just return SFE_UNIMPLMENTED.
-
- * Win32/sndfile.h src/sndfile.h.in src/common.h
- Removed un-necessary #pragma pack commands.
-
- * src/file_io.c
- Implemented psf_ftruncate() and much other hacking for Win32.
-
- * Win32/Makefile.msvc
- Updated.
-
- * doc/win32.html
- Updated to include the copying of the sndfile.h file from the Win32/
- directory to the src/ directory.
-
- * Make.bat
- Batch file to make compiling on Wi32 a little easier. Implements "make" and
- "make check".
-
-2002-08-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- Add place holder for ftruncate() on Win32 which doesn't have ftruncate().
- This will need to be fixed later.
-
- * src/sndfile.h.in
- New file (copy of sndfile.h) with sets up @TYPEOF_SF_COUNT_T@ which will be
- replaced by the correct type during configure.
-
- * configure.in
- Modified to find a good type for TYPEOF_SF_COUNT_T.
-
- * src/aiff.c
- Fixed a bug when reading malformed headers.
-
- * src/common.c
- Set read values to zero before performing read.
-
-2002-08-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Fixed some HTML tags which were not allowing jumps to links within the
- page.
-
- * src/sds.c
- Massive hacking on this.
-
- * src/wav.c
- Added recognition of 'clm ' tag.
-
-2002-08-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Added beginning of a capabilities list beyond simple file formats which
- can be read/written.
-
- * src/aiff.c
- Added parsing of INST and MARK chunks of AIFF files. At the moment this
- data is simply recorded in the log buffer. Later it will be possible to
- read this data from an application using sf_command().
-
- * src/wav.c
- Added parsing of 'cue ' chunk which contains loop information in WAV files.
-
- * exampes/sndfile-info.c
- Changed reporting of Samples to Frames.
-
- * src/wav.c src/w64.c src/aiff.c src/wav_w64.h
- Moved from a samples to a frames nomenclature to avoid confusion.
-
- * doc/FAQ.html
- What's the best format for storing temporary files?
-
- * src/sds.c
- New file for reading/writing Midi Sample Dump Standard files.
-
- * src/Makefile.am src/sndfile.c src/common.[ch]
- Added hooks for sds.c.
-
- * examples/sndfile-info.c
- Changed from using sf_perror() to using sf_error_str().
-
-2002-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Added explanation of mode parameter for sf_open().
- Added explanation of usage of SFM_* values in sf_seek().
-
- * src/sndfile.[ch] src/command.c src/file_io.c src/common.h
- Implemented SFC_FILE_TRUNCATE to allow a file to be truncated. File
- truncation was suggested by James McCartney.
-
- * src/command.html
- Documented SFC_FILE_TRUNCATE.
-
- * tests/command_test.c
- Add tests for SFC_FILE_TRUNCATE.
-
- * src/sndfile.c
- Added a thrid parameter to the VALIDATE_SNDFILE_AND_ASSIGN_PSF macro to
- make resetting the error number optional. All uses of the macro other than
- in error reporting functions were changed to reset the error number.
-
- * src/pcm.c
- Fixed a bug were sf_read_* was logging an SFE_SHORT_READ even when no error
- occurred.
-
- * tests/write_read_test.tpl
- Added tests of internal error state.
-
-2002-08-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/GSM610/private.h src/GSM610/*.c src/GSM610/Makefile.am
- Renamed private.h to gsm610_priv.h to prevent clash with other headers
- named private.h in other directories. (Probably only a problem on MacOS 9).
-
- * src/G72x/private.h src/G72x/*.c src/G72x/Makefile.am
- Renamed private.h to g72x_priv.h to prevent clash with other headers
- named private.h in other directories. (Probably only a problem on MacOS 9).
-
- * MacOS/config.h
- Changed values of HAVE_LRINT and HAVE_LRINTF to force use of code in
- float_cash.h.
-
- * src/sndfile.h
- Changes the name of samples field of the SF_INFO to frames. The old name
- had caused too much confusion and it simply had to be changed. There will
- be at least one more pre-release.
-
-2002-08-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/index.html
- Updated formats matrix to include RAW (header-less) GSM 6.10.
- Fix specificaltion of table and spelling mistakes.
-
- * src/sndfile.c src/command.c
- Fixed bug in SFC_CALC_MAX_SIGNAL family and psf_calc_signal_max ().
-
- * tests/command.c
- Removed cruft.
- Added test for SFC_CALC_MAX_SIGNAL and SFC_CALC_NORM_MAX_SIGNAL.
-
- * configure.in
- Update version to 1.0.0rc5.
-
- * sfendian.h
- Removed inclusion of un-necessary header.
-
-2002-08-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Minor fixes of info written to log buffer.
-
- * src/float_cast.h
- Add definition of HAVE_LRINT_REPLACEMENT.
-
- * tests/floating_point_test.c
- Fix file hash check on systems without lrint/lrintf.
-
- * tests/dft_cmp.c
- Limit SNR to less than -500.0dB.
-
- * examples/sndfile2oct.c
- Fixed compiler warnings.
-
- * doc/api.html
- Fixed error where last parameter of sf_error_str() was sf_count_t instead
- of size_t.
-
-2002-08-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- Why doesn't libsndfile do interleaving/de-interleaving.
-
- * tests/pcm_test.tpl
- On Win32 do not perform hash check on files containing doubles.
-
-2002-08-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Defined SF_COUNT_MAX_POSITIVE() macro, a portable way of setting variables
- of type sf_count_t to their maximum positive value.
-
- * src/dwvw.c src/w64.c
- Used SF_COUNT_MAX_POSITIVE().
-
-2002-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- Fixed bug in reading/writing of 24 bit PCM PAF files on big endian systems.
-
- * tests/floating_point_tests.c
- Fixed hash values for 24 bit PCM PAF files.
- Disabled file has check if lrintf() function is not available and added
- warning.
- Decreased level of signal from a peak of 1.0 to a value of 0.95 to prevent
- problems on platforms without lrintf() ie Solaris.
-
-2002-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed a problem with two different kinds of mal-formed WAV file header. The
- first had the 'fact' chunk before the 'fmt ' chunk, the other had an
- incomplete 'INFO' chunk at the end of the file.
-
- * src/w64.c
- Added fix to allow differentiation between W64 files and ACID files.
-
- * src/au_g72x.c src/common.h src/sndfile.c
- Added error for G72x encoded files with more than one channel.
-
- * tests/pcm_test.tpl tests/utils.tpl
- Moved function check_file_hash_or_die() to utils.tpl. Function was then
- modified to calculate the has of the whole file.
-
- * src/wav.c
- Fixed problem writing the 'fact' chunk on big endian systems.
-
- * tests/sfconvert.c
- Fixed bug where .paf files were being written as Sphere NIST.
-
-2002-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/voc.c
- Fix for reading headers generated using SFC_UPDATE_HEADER_NOW.
-
- * doc/command.html
- Add docs for SFC_UPDATE_HEADER_NOW and SFC_SET_UPDATE_HEADER_AUTO.
-
-2002-07-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * man/sndfile-info.1 man/sndfile-play.1
- Added manpages supplied by Joshua Haberman the Debian maintainer for
- libsndfile. Additional tweaks by me.
-
- * configure.in man/Makefile.am
- Hooked manpages into autoconf/automake system.
-
- * src/sndfile.c
- Added hooks for SFC_SET_UPDATE_HEADER_AUTO.
-
- * tests/update_header_test.c
- Improved rigor of testing.
-
- * src/*.c
- Fixed problem with *_write_header() functions.
-
-2002-07-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/*.html
- Updates to documentation to fix problems found by wdg-html-validator.
-
- * src/common.h src/command.c
- Added normalize parameter to calls to psf_calc_signal_max() and
- psf_calc_max_all_channels().
-
- * src/sndfile.c
- Added handling for commands SFC_CALC_NORM_SIGNAL_MAX and
- SFC_CALC_NORM_MAX_ALL_CHANNELS.
-
- * doc/command.html
- Added entry for SFC_CALC_NORM_SIGNAL_MAX and SFC_CALC_NORM_MAX_ALL_CHANNELS.
-
-2002-07-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c Win32/Makefile.msvc
- Get sndfile-play program working on Win32. The Win32 PCM sample I/O API
- sucks. The sndfile-play program now works on Linux, MacOSX, Solaris and
- Win32.
-
-2002-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/FAQ.html
- New file for frequently asked questsions.
-
-2002-07-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Documentation fixes.
-
- * src/au.[ch] src/au_g72x.c src/G72x/g72x.h
- Add support of 40kbps G723 ADPCM encoding.
-
- * tests/lossy_comp_test.c tests/floating_point_test.c
- Add tests for 40kbps G723 ADPCM encoding.
-
- * doc/index.html
- Update support matrix.
-
-2002-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/command.html
- Documented SFC_GET_SIMPLE_FORMAT_COUNT, SFC_GET_SIMPLE_FORMAT,
- SFC_GET_FORMAT_* and SFC_SET_ADD_PEAK_CHUNK.
-
- * src/sndfile.c src/pcm.c
- Add ability to turn on and off the addition of a PEAK chunk for floating
- point WAV and AIFF files.
-
- * src/sndfile.[ch] src/common.h src/command.c
- Added sf_command SFC_CALC_MAX_ALL_CHANNELS. Implemented by Maurizio Umberto
- Puxeddu.
-
- * doc/command.html
- Docs for SFC_CALC_MAX_ALL_CHANNELS (assisted by Maurizio Umberto Puxeddu).
-
-2002-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/gsm610.c
- Finalised support for GSM 6.10 AIFF files and added support for GSM 6.10
- encoded RAW (header-less) files.
-
- * src/wav.c
- Add support for IBM_FORMAT_MULAW and IBM_FORMAT_ALAW encodings.
-
- * src/api.html
- Fixed more documentation bugs.
-
-2002-07-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h src/common.h
- Moved some yet-to-be-implelmented values for SF_FORMAT_* from the public
- header file sndfile.h to the private header file common.h to avoid
- confusion about the actual capabilities of libsndfile.
-
-2002-07-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/wav.c
- Fixed file parsing for WAV and AIFF files containing non-audio data after
- the data chunk.
-
- * src/aiff.c src/sndfile.c
- Add support for GSM 6.10 encoded AIFF files.
-
- * tests/lossy_comp_test.c tests/Makefile.am
- Add tests for GSM 6.10 encoded AIFF files.
-
- * src/*.c
- Fix compiler warnings.
-
-2002-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- For SFC_SET_NORM_* tests, change the file format from SF_FORMAT_WAV to
- SF_FORMAT_RAW.
-
- * src/sndfile.c
- Added sf_command(SFC_TEST_ADD_TRAILING_DATA) to allow testing of reading
- from AIFF and WAV files with non-audio data after the audio chunk.
-
- * src/common.h
- Add test commands SFC_TEST_WAV_ADD_INFO_CHUNK and
- SFC_TEST_AIFF_ADD_INST_CHUNK. When these commands are working, they will be
- moved to src/sndfile.h
-
- * src/aiff.c src/wav.c
- Begin implementation of XXXX_command() hook for sf_command().
-
- * tests/write_read_test.tpl
- Added sf_command (SFC_TEST_ADD_TRAILING_DATA) to ensure above new code was
- working.
-
-2002-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/update_header_test.c
- Allow read sample count == write sample count - 1 to fix problems with VOC
- files.
-
- * tests/write_read_test.tpl tests/pcm_test.tpl
- Fixed some problems in the test suite discovered by using Valgrind.
-
-2002-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.[ch] tests/*.c
- Renamed check_log_buffer() to check_log_buffer_or_die().
-
- * src/sndfile.c
- SFC_UPDATE_HEADER_NOW and SFC_SETUPDATE_HEADER_AUTO almost finished. Works
- for all file formats other than VOC.
-
-2002-07-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.[ch] src/common.h
- Started adding functionality to allow the file header to be updated before
- the file is closed on files open for SFM_WRITE. This was requested by
- Maurizio Umberto Puxeddu who is using libsndfile for file I/O in iCSound.
-
- * tests/update_header_test.c
- New test program to test that the above functionality is working correctly.
-
- * tests/peak_chunk_test.c tests/floating_point_test.c
- Cleanups.
-
-2002-07-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sfendian.[ch]
- Changed length count parameters for all endswap_XXX() functions from
- sf_count_t (which can be 64 bit even on 32 bit architectures) to int. These
- functions are only called frin inside the library, are always called with
- integer parameters and doing the actual calculation on 64 bit values is
- slow in comparision to doing it on ints.
-
- * examples/sndfile-play.c
- More playback hacking for Win32.
-
-2002-07-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- In psf_log_printf(), changed %D format conversion specifier to %M (marker) and
- added %D specifier for printing the sf_count_t type.
-
- * src/*.c
- Changed all usage of psf_log_printf() with %D format conversion specifiers
- to use %M conversion instead.
-
- * tests/pcm_test.tpl tests/pcm_test.def
- New files to autogen pcm_test.c.
-
- * src/pcm.c
- Fixed bug in scaling floats and doubles to 24 bit PCM and vice versa.
-
-2002-07-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Fix setup of $ac_cv_sys_largefile_CFLAGS so that sndfile.pc gets valid
- values for CFLAGS.
-
- * examples/sndfile-play.c
- Start adding playback support for Win32.
-
-2002-07-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Worked to removed compiler warnings.
- Extensive refactoring.
-
- * src/common.[ch]
- Added function psf_memset() which works like the standard C function memset
- but takes and sf_count_t as the length parameter.
-
- * src/sndfile.c
- Replaced calls to memset(0 with calls to psf_memset() as required.
-
-2002-07-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Added "libsndfile : " to the start of all error messages. This was suggested
- by Conrad Parker author of Sweep ( http://sweep.sourceforge.net/ ).
-
- * src/sfendian.[ch]
- Added endswap_XXXX_copy() functions.
-
- * src/pcm.c src/float32.c src/double64.c
- Use endswap_XXXX_copy() functions and removed dead code.
- Cleanups and optimisations.
-
-2002-07-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/sndfile.h
- Gave values to all the SFC_* enum values to allow better control of the
- interface as commands are added and removed.
- Added new command SFC_SET_ADD_PEAK_CHUNK.
-
- * src/wav.c src/aiff.c
- Modified wav_write_header and aiff_write_header to make addition of a PEAK
- chunk optional, even on floating point files.
-
- * tests/benchmark.tpl
- Added call to sf_command(SFC_SET_ADD_PEAK_CHUNK) to turn off addition of a
- PEAK chunk for the benchmark where we are trying to miximize speed.
-
- * src.pcm.c
- Changed tribyte typedef to something more sensible.
- Further conversion speed ups.
-
-2002-07-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/command.c
- In major_formats rename "Sphere NIST" to "NIST Sphere".
-
- * src/common.c src/sfendian.c
- Moved all endswap_XXX_array() functions to sfendian.c. These functions will
- be tweaked to provide maximum performance. Since maximum performance on one
- platform does not guarantee maximum performance on another, a small set of
- functions will be written and the optimal one chosen at compile time.
-
- * src/common.h src/sfendian.h
- Declarations of all endswap_XXX_array() functions moved to sfendian.h.
-
- * src/Makefile.am
- Add sfendian.c to build targets.
-
-2002-07-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c src/sfendian.h
- Re-coded PCM encoders and decoders to match or better the speed of
- libsndfile version 0.0.28.
-
-2002-06-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Add checking for WAVPACK data in standard PCM WAV file. Return error if
- found. This WAVPACK is *WAY* broken. It uses the same PCM WAV file header
- and then stores non-PCM data.
-
- * tests/benchmark.tpl
- Added more tests.
-
-2002-06-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/benchmark.tpl
- Added conditional definition of M_PI.
- For Win32, set WRITE_PERMS to 0777.
-
- * Win32/Makefile.msvc
- Added target to make generate program on Win32.
-
- * src/samplitude.c
- Removed handler for Samplitude RAP file format. This file type seems rarer
- than hens teeth and is completely undocumented.
-
- * src/common.h src/sndfile.c src/Makefile.am Win32/Makefile.msvc
- Removed references to sampltiude RAP format.
-
- * tests/benchmark.tpl
- Benchmark program now prints the libsndfile version number when run. This
- program was also backported to version 0 to compare results. Version
- 1.0.0rc2 is faster than version 0.0.28 on most conversions but slower on
- some. The slow ones need to be fixed before final release.
-
-2002-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/benchmark.def tests/benchmark.tpl
- New files which generate tests/benchmark.c using Autogen. Added int ->
- SF_FORMAT_PCM_24 test.
-
- * tests/benchmark.c
- Now and Autogen output file.
-
- * tests/Makefile.am
- Updated for above changes.
-
-2002-06-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/benchmark.c
- Basic benchmark program complete. Need to convert it to Autogen.
-
- * Win32/Makefile.msvc
- Added benchmark.exe target.
-
-2002-06-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/generate.c
- New program to generate a number of different output file formats from a
- single input file. This allows testing of the created files.
-
- * tests/benchmark.c
- New test program to benchmark libsndfile. Nowhere near complete yet.
-
- * examples/Makefile.am tests/Makefile.am
- New make rules for the two new programs.
-
-2002-06-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/libsndfile.def
- Removed definition for sf_signal_max().
-
- * src/sndfile.c
- Removed cruft.
-
- * doc/index.html
- A number of documentation bugs were fixed. Thanks to Anand Kumria.
-
- * doc/version-1.html
- Minor doc updates.
-
- * configure.in
- Bumped version to 1.0.0rc2.
-
- * src/sf_command.h src/Makefile.am
- Removed the header file as it was no longer being used. Thanks to Anand
- Kunria for spotting this.
-
- * doc/index.html
- A number of documentation bugs were fixed. Thanks to Anand Kumria.
-
-2002-06-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Test for Win32 before testing SIZEOF_OFF_T so that it works correctly
- on Win32..
-
- * src/file_io.c
- Win32 fixes to ensure O_BINARY is used for file open.
-
- * doc/win32.html
- New file documenting the building libsndfile on Win32.
-
- * doc/*.html
- Updating of documentation.
-
-2002-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pcm_test.c
- Minor changes to allow easier determination of test file name.
-
- * src/sndfile.[ch]
- Removed function sf_signal_max().
-
- * examples/sndfile-play.c
- Changed call to sf_signal_max() to a call to sf_command().
-
-2002-06-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/format.c src/command.c
- Renamed format.c to command.c which will now include code for sf_command()
- calls to perform operations other than format commands.
-
- * src/sndfile.c src/sndfile.h
- Removed function sf_get_signal_max() which is replaced by commands passed
- to sf_command().
-
- * src/command.c
- Implement commands SFC_CALC_SIGNAL_MAX.
-
- * doc/command.html
- Documented SFC_CALC_SIGNAL_MAX.
-
-2002-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-play.c
- Mods to make sndfile-play work on Solaris. The program sndfile-play now
- runs on Linux, MaxOSX and Solaris. Win32 to come.
-
- * src/format.c
- Added SF_FORMAT_DWVW_* to subtype_formats array.
-
- * src/nist.c
- Added support for 8 bit NIST Sphere files. Example file supplied by Anand
- Kumria.
-
-2002-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sndfile-info.c
- Tidy up of output format.
-
- * examnples/sndfile-play.c
- Mods to make sndfile-play work on MacOSX using Apple's CoreAudio API.
-
- * configure.in
- Add new variables OS_SPECIFIC_INCLUDES and OS_SPECIFIC_LINKS which were
- required to supply extra include paths and link parameters to get
- sndfile-play working on MacOSX.
-
- * examples/Makefile.am
- Use OS_SPOECIFIC_INCLUDES and OS_SPECIFIC_LINKS to build commands for
- sndfile-play.
-
-2002-06-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- Added ability to read/write new NIST Sphere file types (A-law, u-law).
- Header parser was re-written from scratch. Example files supplied by Anand
- Kumria.
-
- * src/sndfile.c
- Support for A-law and u-law NIST files.
-
- * tests/Makefile.am tests/lossy_comp_test.c
- Tests for A-law and u-law NIST files.
-
-2002-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.c
- Fixed an error in error string.
-
-2002-06-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * acinclude.m4
- Removed exit command to allow cross-compiling.
-
- * Win32/unistd.h src/file_io.c
- Moved contents of first file into the second file (enclosed in #ifdef).
- Win32/unistd.h is now an empty file but still must be there for libsndfile
- to compile on Win32.
-
- * src/sd2.c, src/sndfile.c:
- Fixes for Sound Designer II files on big endian systems.
-
-2002-06-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Modified to work around problems with crappy MacOSX version of sed.
- Added sanity check for proper values for CFLAGS.
-
-2002-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Code clean up in sf_open ().
-
- * Win32/Makefile.msvc
- Michael Fink's contributed MSVC++ makefile was hacked to bits and put back
- together in a new improved form.
-
- * src/file_io.c
- Fixes for Win32; _lseeki64() returns an invalid argument for calls like
- _lseeki64(fd, 0, SEEK_CUR) so need to use _telli64 (fd) instead.
-
- * src/common.h src/sndfile.c src/wav.c src/aiff.c
- Added SFE_LOG_OVERRUN error.
- Added termination for potential infinite loop when parsing file headers.
-
- * src/wav.c src/w64.c
- Fixed bug casuing incorrect header generation when opening file read/write.
-
-2002-06-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/api.html
- Improved the documentation to make it clearer that the file read method
- and the underlying file format are completely disconnected. Suggested
- by Josh Green.
-
- * doc/command.html
- Started correcting docs to take into account changes made to the
- operations of the sf_command () function. Not complete yet.
-
- * src/sndfile.c
- Reverted some changes which had broken the partially working SDII header
- parsing. Now have access to an iBook with OS X so reading and writing SDII
- files on all platforms should be a reality in the near future. On Mac this
- will involve reading the resource fork via the standard MacOS API. To move
- a file from Mac to another OS, the resource and data forks will need to be
- combined before transfer. The combined file will be read on both Mac and
- other OSes like any other file.
-
-2002-06-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * ltmain.sh
- Applied a patch from http://fink.sourceforge.net/doc/porting/libtool.php
- which allows libsndfile to compile on MacOSX 10.1. This patch should not
- interfere with compiling on other OSes.
-
- * src/GSM610/private.h
- Changes to fix compile problems on MacOSX (see src/GSM610/ChangeLog).
-
- * src/float_cast.h
- Added MacOSX replacements for lrint() and lrintf().
-
-2002-06-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Replaced the code to print the filename to the log buffer when a file is
- opened. This code seems to have been left out during the merge of
- sf_open_read() and sf_open_write() to make a single functions sf_open().
-
-2002-06-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed a bug where the WAV header parser was going into an infinite loop
- on a badly formed LIST chunk. File supplied by David Viens.
-
-2002-05-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Added a message at the end of the configuration process to warn about the
- need for the use of pkg-config when linking programs against version 1 of
- libsndfile.
-
- * doc/pkg-config.html
- New documentation file containing details of how to use pkg-config to
- retrieve settings for CFLAGS and library locations for linking files
- against version 1 of libsndfile.
-
-2002-05-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed minor bug in handling of so-called ACIDized WAV files.
-
-2002-05-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/libsndfile.def Win32/Makefile.msvc
- Two new files contributed by Michael Fink (from the winLAME project)
- which allows libsndfile to be built on windows in a MSDOS box by doing
- "nmake -f Makefile.msvc". Way cool!
-
-2002-05-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- MacOSX is SSSOOOOOOO screwed up!!! I can't believe how hard it is to
- generate a tarball which will configure and compile on that platform.
- Joined the libtool mailing list to try and get some answers.
-
-2002-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Changed to autoconf version 2.50. MacOSX uses autoconf version 2.53 which
- is incompatible with with version 2.13 which had been using until now.
- The AC_SYS_LARGE_FILE macro distributed withe autoconf 2.50 is missing a
- few features so AC_SYS_EXTRA_LARGE file was defined to replace it.
-
- * configure.in
- Changed to automake version 1.5 to try and make a tarball which will
- work on MacOSX.
-
-2002-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_gsm610.c
- Changed name to gsm610.c. Added reading/writing of headerless files.
-
- * src/sndfile.c src/raw.c
- Added ability to read/write headerless (SF_FORMAT_RAW) GSM 6.10 files.
-
-2002-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c
- Clean up in preparation for Autogen-ing this file.
-
- * src/GSM610/*.[ch]
- Code cleanup and prepartion forgetting file seek working. Details in
- src/GSM610/ChangeLog.
-
- * sndfile.pc.in
- Testing complete. Is sndfile.m4 still needed?
-
-2002-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.tpl tests/rdwr_test.tpl
- Merged tests from these two programs into write_read_test.tpl and deleted
- rdwr_test.tpl.
-
-2002-05-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c src/svx.c src/paf.c
- Fixed bugs in read/write mode.
-
-2002-05-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/Makefile.am
- Renamed sfplay.c to sndfile-play.c and sndfile_info.c to sndfile-info.c for
- consistency when these programs become part of the Debian package
- sndfile-programs.
-
- * sndfile.pc.in
- New file to replace sndfile-config.in. Libsndfile now uses the pkg-config
- model for providing installation parameters to dependant programs.
-
- * src/sndfile.c
- Cleanup of code in sf_open().
-
-2002-05-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/utils.tpl tests/write_read_test.tpl
- More conversion to Autogen fixes and enchancements.
-
- * src/*.c
- Read/write mode is now working for 16, 24 and 32 bit PCM as well as 32
- bit float and 64 bit double data. More tests still required.
-
- * src/Makefile.am
- Added DISTCLEANFILES target to remove config.status and config.last.
-
- * Win32/Makefile.am MacOS/Makefile.am
- Added DISTCLEANFILES target to remove Makefile.
-
-2002-05-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch] tests/rdwr_test.c
- More verifying workings of read/write mode. Fixing bugs found.
-
- * tests/utils.[ch]
- Made these files Autogen generated files.
-
- * tests/util.tpl tests/util.def
- New Autogen files to generate utils.[ch]. Moved some generic test functions
- into this file. Autogen is such a great tool!
-
-2002-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c src/float_cast.h Win32/config.h
- Fixed a couple of Win32 specific bugs pointed out by Michael Fink
- (maintainer of WinLAME) and David Viens.
-
- * tests/check_log_buffer.[ch] tests/utils.[ch]
- Moved check_log_buffer() to utils.[ch] and deleted old file.
-
-2002-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.[ch] src/sndfile.c
- New function psf_default_seek() which will be the default seek function
- for things like PCM and floating point data. This default is set for
- both read and write in sf_open() but can be over-ridden by any codec
- during it's initialisation.
-
-2002-05-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c
- AU files use a data size value of -1 to mean unknown. Fixed au_open_read()
- to allow opening files like this.
-
- * tests/rdwr_test .c
- Added more tests.
-
- * src/sndfile.c
- Fixed bugs in read/write mode found due to improvements in the test
- program.
-
-2002-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/rdwr_test .c
- New file for testing read/write mode.
-
-2002-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * m4/*
- Removed all m4 macros from this directory as they get concatenated to form
- the file aclocal.m4 anyway.
-
- * sndfile.m4
- Moved this from the m4 directory to the root directory asn this is part of
- the distribution and is installed during "make install".
-
-2002-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float32.c
- Removed logging of peaks for all file formats other than AIFF and WAV.
-
- * tests/write_read_test.tpl tests/write_read_test.def
- New files which autogen uses to generate write_read_test.c. Doing it this
- way makes write_read_test.c far easier to maintain. Other test programs
- will be converted to autogen in the near future.
-
- * src/*.c
- Fixed a few bugs found when testing on Sparc (bug endian) Solaris.
-
-2002-04-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * doc/*.html
- Fixed documention versioning.
-
- * configure.in
- Fixed a bug in the routines which search for Large File Support on systems
- which have large file support by defualt.
-
-2002-04-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch]
- Found and fixed an issue which can cause a bug in other software (I was
- porting Conrad Parker's Sweep program from version 0 of the library to
- version 1). When opening a file for write, the libsndfile code would
- set the sfinfo.samples field to a maximum value.
-
- * tests/write_read_test.c
- Added tests to detect the above problem.
-
-2002-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch]
- Finished base implementation of read/write mode. Much more testing still
- needed.
-
- * m4/largefile.m4
- Macro for detecting Large File Standard capabilities. This macro was ripped
- out of the aclocal.m4 file of GNU tar-1.13.
-
- * configure.in
- Added detection of large file support. Files larger than 2 Gigabytes should
- now be supported on 64 bit platforms and many 32 bit platforms including
- Linux (2.4 kernel, glibc-2.2), *BSD, MacOS, Win32.
-
- * libsndfile_convert_version.py
- A Python script which attempts to autoconvert code written to use version 0
- to version 1.
-
-2002-04-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch]
- Finished base implementation of read/write mode. Much more testing still
- needed.
-
- * tests/write_read_test.c
- Preliminary tests for read/write mode added. More needed.
-
-2002-04-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.[ch]
- Removed sf_open_read() and sf_open_write() functions,replacting them with
- sf_open() which takes an extra mode parameter (SF_OPEN_READ, SF_OPEN_WRITE,
- or SF_OPEN_RDWR). This new function sf_open can now be modified to allow
- opening a file formodification (RDWR).
-
-2002-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Completed merging of separate xxx_open_read() and xxx_open_write()
- functions. All tests pass.
-
-2002-04-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c
- Massive refactoring required to merge au_open_read() with au_open_write()
- to create au_open().
-
-2002-04-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Started changes required to allow a sound file to be opened in read/write
- mode, with separate file pointers for read and write. This involves merging
- of encoder/decoder functions like pcm_read_init() and pcm_write_init()
- int a new function pcm_init() as well as doing something similar for all
- the file type specific functions ie aiff_open_read() and aiff_open_write()
- were merged to make the function aiff_open().
-
-2002-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/file_io.c
- New file containing psf_fopen(), psf_fread(), psf_fwrite(), psf_fseek() and
- psf_ftell() functions. These function will replace use of fopen/fread/fwrite
- etc and allow access to files larger than 2 gigabytes on a number of 32 bit
- OSes (Linux on x86, 32 bit Solaris user space apps, Win32 and MacOS).
-
- * src/*.c
- Replaced all instances of fopen with psf_open, fread with psd_read, fwrite
- with psf_write and so on.
-
-2002-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/dwvw.c
- Finally fixed all known problems with 12, 16 and 24 bit DWVW encoding.
-
- * tests/floating_point_test.c
- Added tests for 12, 16 and 24 bit DWVW encoding.
-
-2002-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * m4/endian.m4
- Defines a new m4 macro AC_C_FIND_ENDIAN, for determining the endian-ness of
- the target CPU. It first checks for the definition of BYTE_ORDER in
- <endian.h>, then in <sys/types.h> and <sys/param.h>. If none of these work
- and the C compiler is not a cross compiler it compiles and runs a program
- to test for endian-ness. If the compiler is a cross compiler it makes a
- guess based on $target_cpu.
-
- * configure.in
- Modified to use AC_C_FIND_ENDIAN.
-
- * src/sfendian.h
- Simplified.
-
-2002-02-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/floating_point_test.c
- Tests completely rewritten using the dft_cmp function. Now able to
- calculate a quick guesstimate of the Signal to Noise Ratio of the encoder.
-
-2002-02-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/dft_cmp.[ch]
- New files containing functions for comparing pre and post lossily
- compressed data using a quickly hacked DFT.
-
- * tests/utils.[ch]
- New files containing functions for saving pre and post encoded data in a
- file readable by the GNU Octave package.
-
-2002-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * m4/lrint.m4 m4/lrintf.m4
- Fixed m4 macros to define HAVE_LRINT and HAVE_LRINTF even when the test
- is cached.
-
-2002-02-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/floating_point_test.c
- Fixed improper use of strncat ().
-
-2002-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/headerless_test.c
- New test program to test the ability to open and read a known file type as a
- RAW header-less file.
-
-2002-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/losy_comp_test.c
- Added a test to ensure that the data read from a file is not all zeros.
-
- * examples/sfconvert.c
- Added "-gsm610" encoding types.
-
-2002-01-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sfconvert.c
- Added "-dwvw12", "-dwvw16" and "-dwvw24" encoding types.
-
- * tests/dwvw_test.c
- New file for testing DWVW encoder/decoder.
-
-2002-01-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/dwvw.c
- Implemented writing of DWVW. 12 bit seems to work, 16 and 24 bit still broken.
-
- * src/aiff.c
- Improved reporting of encoding types.
-
- * src/voc.c
- Clean up.
-
-2002-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/dwvw.c
- New file implementing lossless Delta Word Variable Width (DWVW) encoding.
- Reading 12 bit DWVW is now working.
-
- * src/aiff.c common.h sndfile.c
- Added hooks for DWVW encoded AIFF and RAW files.
-
-2002-01-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c
- Robustify header parsing.
-
- * src/wav_w64.h
- Header file wav.h was renamed to wav_w64.h to signify sharing of
- definitions across the two file types.
-
- * src/wav.c src/w64.c src/wav_w64.c
- Refactoring.
- Modified and moved functions with a high degree of similarity between
- wav.c and w64.c to wav_w64.c.
-
-2002-01-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c
- Completed work on getting read and write working.
-
- * examples/sfplay.c
- Added code to scale floating point data so it plays at a reasonable volume.
-
- * tests/Makefile.am tests/write_read_test.c
- Added tests for W64 files.
-
-2002-01-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Modded all code in file header writing routines to use
- psf_new_binheader_writef().
- Removed psf_binheader_writef() from src/common.c.
- Globally replaced psf_new_binheader_writef with psf_binheader_writef.
-
-2002-01-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Modded all code in file parsing routines to use psf_new_binheader_readf().
- Removed psf_binheader_readf() from src/common.c.
- Globally replaced psf_new_binheader_readf with psf_binheader_readf.
-
- * src/common.[ch]
- Added new function psf_new_binheader_writef () which will soon replace
- psf_binheader_writef (). The new function has basically the same function
- as the original but has a more flexible and capable interface. It also
- allows the writing of 64 bit integer values for files contains 64 bit file
- offsets.
-
-2002-01-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/formats.c src/sndfile.c src/sndfile.h
- Added code allowing full enumeration of supported file formats via the
- sf_command () interface.
- This feature will allow applications to avoid needing recompilation when
- support for new file formats are added to libsndfile.
-
- * tests/command_test.c
- Added test code for the above feature.
-
- * examples/list_formats.c
- New file. An example of the use of the supported file enumeration
- interface. This program lists all the major formats and for each major
- format the supported subformats.
-
-2002-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch] tests/*.c
- Changed command parameter of sf_command () function from a test string to
- an int. The valid values for the command parameter begin with SFC_ and are
- listed in src/sndfile.h.
-
-2001-12-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/formats.c src/sndfile.c
- Added an way of enumerating a set of common file formats using the
- sf_command () interface. This interface was suggested by Dominic Mazzoni,
- one of the main authors of Audacity (http://audacity.sourceforge.net/).
-
-2001-12-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Added checking of filename parameter in sf_open_read (). Previousy, if a
- NULL pointer was passed the library would segfault.
-
-2001-12-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c src/common.h
- Changed the len parameter of the endswap_*_array () functions from type
- int to type long.
-
- * src/pcm.c
- Fixed a problem which
-
-2001-12-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Added conditional #include <sys/types.h> for EMX/gcc on OS/2. Thanks to
- Paul Hartman for pointing this out.
-
- * tests/lossy_comp_test.c tests/floating_point_test.c
- Added definitions for M_PI for when it isn't defined in <math.h>.
-
-2001-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ircam.c
- Re-implemented the header reader. Old version was making incorrect
- assumptions about the endian-ness of the file from the magic number at the
- start of the file. The new code looks at the integer which holds the
- number of channels and determines the endian-ness from that.
-
-2001-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Added support for other AIFC types ('raw ', 'in32', '23ni').
- Further work on IMA ADPCM encoding.
-
-2001-11-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ima_adpcm.c
- Renamed from wav_ima_adpcm.c. This file will soon handle IMA ADPCM
- encodings for both WAV and AIFF files.
-
- * src/aiff.c
- Started adding IMA ADPCM support.
-
-2001-11-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/double.c
- New file for handling double precision floating point (SF_FORMAT_DOUBLE)
- data.
-
- * src/wav.c src/aiff.c src/au.c src/raw.c
- Added support for SF_FORMAT_DOUBLE data.
-
- * src/common.[ch]
- Addition of endswap_long_array () for endian swapping 64 bit integers. This
- function will work correctly on processors with 32 bit and 64 bit longs.
- Optimised endswap_short_array () and endswap_int_array ().
-
- * tests/pcm_test.c
- Added and extra check. After the first file of each type is written to disk
- a checksum is performed of the first 64 bytes and checked against a pre-
- calculated value. This will work whatever the endian-ness of the host
- machine.
-
-2001-11-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Added handling of u-law, A-law encoded AIFF files. Thanks to Tom Erbe for
- supplying example files.
-
- * tests/lossy_comp_test.c
- Added tests for above.
-
- * src/common.h src/*.c
- Removed function typedefs from common.h and function pointer casting in all
- the other files. This allows the compiler to perform proper type checking.
- Hopefully this will prevernt problems like the sf_seek bug for OpenBSD,
- BeOS etc.
-
- * src/common.[ch]
- Added new function psf_new_binheader_readf () which will eventually replace
- psf_binheader_readf (). The new function has basically the same function as
- the original but has a more flexible and capable interface. It also allows
- the reading of 64 bit integer values for files contains 64 bit file
- offsets.
-
-2001-11-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/voc.c
- Completed implementation of VOC file handling. Can now handle 8 and 16 bit
- PCM, u-law and A-law files with one or two channels.
-
- * src/write_read_test.c tests/lossy_comp_test.c
- Added tests for VOC files.
-
-2001-11-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float_cast.h
- Added inline asm version of lrint/lrintf for MacOS. Solution provided by
- Stephane Letz.
-
- * src/voc.c
- More work on this braindamaged format. The VOC files produced by SoX also
- have a number of inconsistencies.
-
-2001-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- Added support for 8 bit PCM PAF files.
-
- * tests/write_read_test.c
- Added tests for 8 bit PAF files.
-
-2001-11-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/pcm_test.c
- New test program to test for correct scaling of integer values between
- different sized integer containers (ie short -> int).
- The new specs for libsndfile state that when the source and destination
- containers are of a different size, the most significant bit of the source
- value becomes the most significant bit of the destination container.
-
- * src/pcm.c src/paf.c
- Modified to pass the above test program.
-
- * tests/write_read_test.c tests/lossy_comp_test.c
- Modified to work with the new scaling rules.
-
-2001-11-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/raw.c tests/write_read_test.c tests/write_read_test.c
- Added ability to do raw reads/writes of float, u-law and A-law files.
-
- * src/*.[ch] examples/*.[ch] tests/*.[ch]
- Removed dependance on pcmbitwidth field of SF_INFO struct and moved to new
- SF_FORMAT_* types and use of SF_ENDIAN_BIG/LITTLE/CPU.
-
-2001-11-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch]
- Started implmentation of major changes documented in doc/version1.html.
-
- Removed all usage of off_t which is not part of the ISO C standard. All
- places which were using it are now using type long which is the type of
- the offset parameter for the fseek function.
- This should fix problems on BeOS, MacOS and *BSD like systems which were
- failing "make check" because sizeof (long) != sizeof (off_t).
-
---------------------------------------------------------------------------------
-This is the boundary between version 1 of the library above and version 0 below.
---------------------------------------------------------------------------------
-
-2001-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sfplay_beos.cpp
- Added BeOS version of sfplay.c. This needs to be compiled using a C++
- compiler so is therefore not built by default. Thanks to Marcus Overhagen
- for providing this.
-
-2001-11-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sfplay.c
- New example file showing how libsndfile can be used to read and play a
- sound file.
- At the moment on Linux is supported. Others will follow in the near future.
-
-2001-11-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c
- Fixed problem with normalisation code where a value of 1.0 could map to
- a value greater than MAX_SHORT or MAX_INT. Thanks to Roger Dannenberg for
- pointing this out.
-
-2001-11-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c
- Fixed scaling issue when reading/writing 8 bit files using
- sf_read/sf_write_short ().
- On read, values are scaled so that the most significant bit in the char
- ends up in the most significant bit of the short. On write, values are
- scaled so that most significant bit in the short ends up as the most
- significant bit in the char.
-
-2001-11-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c src/sndfile.c
- Added support for 32 bit float data in big and little endian AU files.
-
- * tests/write_read_test.c
- Added tests for 32 bit float data in AU files.
-
-2001-11-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c
- Finalised testing of stereo files where possible.
-
-2001-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_ms_adpcm.c
- Fixed bug in writing stereo MS ADPCM WAV files. Thanks to Xu Xin for
- pointing out this problem.
-
-2001-10-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_ms_adpcm.c
- Modified function srate2blocksize () to handle 44k1Hz stereo files.
-
-2001-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/w64.c
- Added support for Sonic Foundry 64 bit WAV format. As Linux (my main
- development platform) does not yet support 64 bit file offsets by default,
- current handling of this file format treats everything as 32 bit and fails
- openning the file, if it finds anything that goes beyond 32 bit values.
-
- * src/sndfile.[hc] src/common.h src/Makefile.am
- Added hooks for W64 support.
-
-2001-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Added more warnings options to CFLAGS when the gcc compiler is detected.
-
- * src/*.[ch] tests/*.c examples/*.c
- Started fixing the warning messages due to the new CFLASG.
-
- * src/voc.c
- More work on VOC file read/writing.
-
- * src/paf.c
- Found that PAF files were not checking the normalisation flag when reading
- or writing floats and doubles. Fixed it.
-
- * tests/floating_point_test.c
- Added specific test for the above problem.
-
- * src/float_cast.h src/pcm.c
- Added a section for Win32 to define lrint () and lrintf () in the header
- and implement it in the pcm.c
-
-2001-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * sndfile-config.in m4/sndfile.m4
- These files were donated by Conrad Parker who also provided instructions
- on how to install them using autoconf/automake.
-
- * src/float_cast.h
- Fiddled around with this file some more. On Linux and other gcc supported
- OSes use the C99 functions lrintf() and lrint() for casting from floating
- point to int without incurring the huge perfromance penalty (particularly
- on the i386 family) caused by the regular C cast from float to int.
- These new C99 functions replace the FLOAT_TO_* and DOUBLE_TO_* macros which
- I had been playing with.
-
- * configure.in m4/lrint.m4 m4/lrintf.m4
- Add detection of these functions.
-
-2001-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/voc.c
- Completed code for reading VOC files containing a single audio data
- segment.
- Started implementing code to handle files with multiple VOC_SOUND_DATA
- segments but couldn't be bothered finishing it. Multiple segment files can
- have different sample rates for different sections and other nasties like
- silence and repeat segments.
-
-2001-10-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/*.c
- Removed SF_PRIVATE struct field fdata and replaced it with extra_data.
-
- * src/voc.c
- Further development of the read part of this woefult file format.
-
-2001-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float_cast.h
- Implemented gcc and i386 floating point to int cast macros. Standard cast
- will be used when not on gcc for i385.
-
- * src/pcm.c
- Modified all uses of FLOAT/DOUBLE_TO_INT and FLOAT/DOUBLE_TO_SHORT casts to
- comply with macros in float_cast.h.
-
-2001-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/voc.c
- Changed the TYPE_xxx enum names to VOC_TYPE_xxx to prevent name clashes
- on MacOS with CodeWarrior 6.0.
-
- * MacOS/MacOS-readme.txt
- Updated the compile instructions. Probably still need work as I don't have
- access to a Mac.
-
-2001-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/aiff.c common.c
- Changed all references to snprintf to LSF_SNPRINTF and all vsnprintf to
- LSF_VSNPRINTF. LSF_VSNPRINTF and LSF_VSNPRINTF are defined in common.h.
-
- * src/common.h
- Added checking of HAVE_SNPRINTF and HAVE_VSNPRINTF and defining
- LSF_VSNPRINTF and LSF_VSNPRINTF to appropriate values.
-
- * src/missing.c
- New file containing a minimal implementation of snprintf and vsnprintf
- functions named missing_snprintf and missing_vsnprintf respectively. These
- are only compliled into the binary if snprintf and/or vsnprintf are not
- available.
-
-2001-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ircam.c
- New file to handle Berkeley/IRCAM/CARL files.
-
- * src/sndfile.c src/common.h
- Modified for IRCAM handling.
-
- * tests/*.c
- Added tests for IRCAM files.
-
-2001-09-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Apparently microsoft windows (tm) doesn't like ulaw and Alaw WAV files with
- 20 byte format chunks (contrary to ms's own documentation). Fixed the WAV
- header writing code to generate smaller ms compliant ulaw and Alaw WAV
- files.
-
-2001-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/stdio_test.sh tests/stdio_test.c
- Shell script was rewritten as a C program due to incompatibilities of the
- sh shell on Linux and Solaris.
-
-2001-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/stdio_test.sh tests/stdout_test.c tests/stdin_test.c
- New test programs to verify the correct operation of reading from stdin and
- writing to stdout.
-
- * src/sndfile.c wav.c au.c nist.c paf.c
- Fixed a bugs uncovered by the new test programs above.
-
-2001-09-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c wav.c
- Fixed a bug preventing reading a file from stdin. Found by T. Narita.
-
-2001-09-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Fixed a problem on OpenBSD 2.9 which was causing sf_seek() to fail on IMA
- WAV files. Root cause was the declaration of the func_seek typedef not
- matching the functions it was actually being used to point to. In OpenBSD
- sizeof (off_t) != sizeof (int). Thanks to Heikki Korpela for allowing me
- to log into his OpenBSD machine to debug this problem.
-
-2001-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Implemented sf_command ("norm float").
-
- * src/*.c
- Implemented handling of sf_command ("set-norm-float"). Float normalization
- can now be turned on and off.
-
- * tests/double_test.c
- Renamed to floating_point_test.c. Modified to include tests for all scaled
- reads and writes of floats and doubles.
-
- * src/au_g72x.c
- Fixed bug in normalization code found with improved floating_point_test
- program.
-
- * src/wav.c
- Added code for parsing 'INFO' and 'LIST' chunks. Will be used for extract
- text annotations from WAV files.
-
- * src/aiff.c
- Added code for parsing '(c) ' and 'ANNO' chunks. Will be used for extract
- text annotations from WAV files.
-
-2001-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sf_info.c example/Makefile.am
- Renamed to sndfile_info.c. The program sndfile_info will now be installed
- when the library is installed.
-
- * src/float_cast.h
- New file defining floating point to short and int casts. These casts will
- eventually replace all flot and double casts to short and int. See comments
- at the top of the file for the reasoning.
-
- * src/*.c
- Changed all default float and double casts to short or int with macros
- defined in floatcast.h. At the moment these casts do nothing. They will be
- replaced with faster float to int cast operations in the near future.
-
-2001-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/command_test.c
- New file for testing sf_command () functionality.
-
- * src/sndfile.c
- Revisiting of error return values of some functions.
- Started implementing sf_command () a new function will allow on-the-fly
- modification of library behaviour, or instance, sample value scaling.
-
- * src/common.h
- Added hook for format specific sf_command () calls to SNDFILE struct.
-
- * doc/api.html
- Updated and errors corrected.
-
- * doc/command.html
- New documentation file explaining new sf_command () function.
-
-2001-08-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed error return values from sf_read*() and sf_write*(). There were
- numerous instances of -1 being returned through size_t. These now all set
- error int the SF_PRIVATE struct and return 0. Thanks to David Viens for
- spotting this.
-
-2001-08-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Fixed use of va_arg() calls that were causing warning messages with the
- latest version of gcc (thanks Maurizio Umberto Puxeddu).
-
-2001-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c src/sfendian.h
- Moved definition of MAKE_MARKER macro to sfendian.h
-
-2001-07-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Modified sf_get_lib_version () so that version string will be visible using
- the Unix strings command.
-
- * examples/Makefile.am examples/sfinfo.c
- Renamed sfinfo program and source code to sf_info. This prevents a name
- clash with the program included with libaudiofile.
-
-2001-07-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/read_seek_test.c tests/lossy_comp_test.c
- Added tests for sf_read_float () and sf_readf_float ().
-
- * src/voc.c
- New files for handling Creative Voice files (not complete).
-
- * src/samplitude.c
- New files for handling Samplitude files (not complete).
-
-2001-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/au.c src/paf.c src/svx.c src/wav.c
- Converted these files to using psf_binheader_readf() function. Will soon be
- ready to attempt to make reading writing from pipes work reliably.
-
- * src/*.[ch]
- Added code for sf_read_float () and sf_readf_float () methods of accessing
- file data.
-
-2001-07-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c src/wav_gsm610.c
- Removed two printf()s which had escaped notice for some time (thanks
- Sigbjørn Skjæret).
-
-2001-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_gsm610.c
- Fixed a bug which prevented GSM 6.10 encoded WAV files generated by
- libsndfile from being played in Windoze (thanks klay).
-
-2001-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.[ch]
- Implemented psf_binheader_readf() which will do for file header reading what
- psf_binheader_writef() did for writing headers. Will eventually allow
- libsndfile to read and write from pipes, including named pipes.
-
-2001-07-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * MacOS/config.h Win32/config.h
- Attempted to bring these two files uptodate with src/config.h. As I don't
- have access to either of these systems support for them may be completely
- broken.
-
-2001-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float32.c
- Fixed bug for big endian processors that can't read 32 bit IEEE floats. Now
- tested on Intel x86 and UltraSparc processors.
-
-2001-06-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Modified to allow REX files (from Propellorhead's Recycle and Reason
- programs) to be read.
- REX files are basically an AIFF file with slightly unusual sequence of
- chunks (AIFF files are supposed to allow any sequence) and some extra
- application specific information.
- Not yet able to write a REX file as the details of the application specific
- data is unknown.
-
-2001-06-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed endian bug when reading PEAK chunk on big endian machines.
-
- * src/common.c
- Fixed endian bug when reading PEAK chunk on big endian machines with
- --enable-force-broken-float configure option.
- Fix psf_binheader_writef for (FORCE_BROKEN_FLOAT ||______)
-
-2001-06-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in src/config.h.in
- Removed old CAN_READ_WRITE_x86_IEEE configure variable now that float
- capabilities are detected at run time.
- Added FORCE_BROKEN_FLOAT to allow testing of broken float code on machines
- where the processor can in fact handle floats correctly.
-
- * src/float32.c
- Rejigged code reading and writing of floats on broken processors.
-
- * m4/
- Removed this directory and all its files as they are no longer needed.
-
-2001-06-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/peak_chunk_test.c
- New test to validate reading and writing of peak chunk.
-
- * examples/sfconvert
- Added -float32 option.
-
- * src/*.c
- Changed all error return values to negative values (ie the negative of what
- they were).
-
- * src/sndfile.c tests/error_test.c
- Modified to take account of the previous change.
-
-2001-06-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/float32.c
- File renamed from wav_float.c and renamed function to something more
- general.
- Added runtime detection of floating point capabilities.
- Added recording of peaks during write for generation of PEAK chunk.
-
- * src/wav.c src/aiff.c
- Added handing for PEAK chunk for floating point files. PEAK is read when the
- file headers are read and generated when the file is closed. Logic is in
- place for adding PEAK chunk to end of file when writing to a pipe (reading
- and writing from/to pipe to be implemented soon).
-
- * src/sndfile.c
- Modified sf_signal_max () to use PEAK values if present.
-
-2001-06-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Added pcm_read_init () and pcm_write_init () to src/pcm.c and removed all
- other calls to functions in this file from the filetype specific files.
-
- * src/*.c
- Added alaw_read_init (), alaw_write_int (), ulaw_read_init () and
- ulaw_write_init () and removed all other calls to functions in alaw.c and
- ulaw.c from the filetype specific files.
-
- * tests/write_read_test.c
- Added tests to validate sf_seek () on all file types.
-
- * src/raw.c
- Implemented raw_seek () function to fix a bug where
- sf_seek (file, 0, SEEK_SET) on a RAW file failed.
-
- * src/paf.c
- Fixed a bug in paf24_seek () found due to added seeks tests in
- tests/write_read_test.c
-
-2001-06-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/read_seek_test.c
- Fixed a couple of broken binary files.
-
- * src/aiff.c src/wav.c
- Added handling of PEAK chunks on file read.
-
-2001-05-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * check_libsndfile.py
- New file for the regression testing of libsndfile.
- check_libsndfile.py is a Python script which reads in a file containing
- filenames of audio files. Each file is checked by running the examples/sfinfo
- program on them and checking for error or warning messages in the libsndfile
- log buffer.
-
- * check_libsndfile.list
- This is an example list of audio files for use with check_libsndfile.py
-
- * tests/lossy_comp_test.c
- Changed the defined value of M_PI for math header files which don't have it.
- This fixed validation test failures on MetroWerks compilers. Thanks to Lord
- Praetor Satanus of Acheron for bringing this to my attention.
-
-2001-05-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.[ch]
- Removed psf_header_setf () which was no longer required after refactoring
- and simplification of header writing.
- Added 'z' format specifier to psf_binheader_writef () for zero filling header
- with N bytes. Used by paf.c and nist.c
-
- * tests/check_log_buffer.c
- New file implementing check_log_buffer () which reads the log buffer of a
- SNDFILE* object and searches for error and warning messages. Calls exit ()
- if any are found.
-
- * tests/*.c
- Added calls to check_log_buffer () after each call to sf_open_XXX ().
-
-2001-05-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/wav_ms_adpcm.c src/wav_gsm610.c
- Major rehack of header writing using psf_binheader_writef ().
-
-2001-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/wav_ima_adpcm.c
- Major rehack of header writing using psf_binheader_writef ().
-
-2001-05-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Changed return type of get_encoding_str () to prevent compiler warnings on
- Mac OSX.
-
- * src/aiff.c src/au.c
- Major rehack of header writing using psf_binheader_writef ().
-
-2001-05-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h src/common.c
- Added comments.
- Name of log buffer changed from strbuffer to logbuffer.
- Name of log buffer index variable changed from strindex to logindex.
-
- * src/*.[ch]
- Changed name of internal logging function from psf_sprintf () to
- psf_log_printf ().
- Changed name of internal header generation functions from
- psf_[ab]h_printf () to psf_asciiheader_printf () and
- psf_binheader_writef ().
- Changed name of internal header manipulation function psf_hsetf () to
- psf_header_setf ().
-
-2001-05-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- Fixed reading and writing of sample_byte_format header. "01" means little
- endian and "10" means big endian regardless of bit width.
-
- * configure.in
- Detect Mac OSX and disable -Wall and -pedantic gcc options. Mac OSX is
- way screwed up and spews out buckets of warning messages from the system
- headers.
- Added --disable-gcc-opt configure option (sets gcc optimisation to -O0 ) for
- easier debugging.
- Made decision to harmonise source code version number and .so library
- version number. Future releases will stick to this rule.
-
- * doc/new_file_type.HOWTO
- New file to document the addition of new file types to libsndfile.
-
-2001-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/nist.c
- New file for reading/writing Sphere NIST audio file format.
- Originally requested by Elis Pomales in 1999.
- Retrieved from unstable (and untouched for 18 months) branch of libsndfile.
- Some vital information gleaned from the source code to Bill Schottstaedt's
- sndlib library : ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz
- Currently reading and writing 16, 24 and 32 bit, big-endian and little
- endian, stereo and mono files.
-
- * src/common.h src/common.c
- Added psf_ah_printf () function to help construction of ASCII headers (ie NIST).
-
- * configure.in
- Added test for vsnprintf () required by psf_ah_printf ().
-
- * tests/write_read_test.c
- Added tests for supported NIST files.
-
-2001-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.c
- Added tests for little endian AIFC files.
-
- * src/aiff.c
- Minor re-working of aiff_open_write ().
- Added write support for little endian PCM encoded AIFC files.
-
-2001-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Minor re-working of aiff_open_read ().
- Added read support for little endian PCM encoded AIFC files from the Mac
- OSX CD ripper program. Guillaume Lessard provided a couple of sample files
- and a working patch.
- The patch was not used as is but gave a good guide as to what to do.
-
-2001-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h
- Fixed comments about endian-ness of WAV and AIFF files. Guillaume Lessard
- pointed out the error.
-
-2001-04-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/make_sine.c
- Re-write of this example using sample rate and required frequency in Hz.
-
-2001-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed bug that prevented known file types from being read as RAW PCM data.
-
-2000-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Added handing of COMT chunk.
-
-2000-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sfconvert.c
- Fixed bug in normalisatio code. Pointed out by Johnny Wu.
-
-2000-11-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/config.h
- Fixed the incorrect setting of HAVE_ENDIAN_H parameter. Win32 only issue.
-
-2000-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/Makefile.am
- Added -lm for write_read_test_LDADD.
-
-2000-10-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/au.c
- Fixed bug which prevented writing of G723 24kbps AU files.
-
- * tests/lossy_comp_test.c
- Corrrection to options for G723 tests.
-
- * configure.in
- Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which
- doesn't allow gcc -pipe option.
-
-2000-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/ulaw.c src/alaw.c src/wav_imaadpcm.c src/msadpcm.c src/wav_gsm610.c
- Fixed normailsation bugs shown up by new double_test program.
-
-2000-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c
- Fixed bug in normalisation code (spotted by Steve Lhomme).
-
- * tests/double_test.c
- New file to test scaled and unscaled sf_read_double() and sf_write_double()
- functions.
-
-2000-08-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * COPYING
- Changed to the LGPL COPYING file (spotted by H. S. Teoh).
-
-2000-08-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h
- Removed prototype of unimplemented function sf_get_info(). Added prototype
- for sf_error_number() Thanks to Sigbjørn Skjæret for spotting these.
-
-2000-08-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/newpcm.h
- New file to contain a complete rewrite of the PCM data handling.
-
-2000-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbjørn
- Skjæret for spotting this one.
-
-2000-08-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au_g72x.c src/G72x/g72x.c
- Added G723 encoded AU file support.
-
- * tests/lossy_comp_test.c
- Added tests for G721 and G723 encoded AU files.
-
-2000-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * all files
- Changed the license to LGPL. Albert Faber who had copyright on
- Win32/unistd.h gave his permission to change the license on that file. All
- other files were either copyright erikd AT mega-nerd DOT com or copyright
- under a GPL/LGPL compatible license.
-
-2000-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c
- Fixed incorrect error message.
-
- * src/au_g72x.c src/G72x/*
- G721 encoded AU files now working.
-
- * Win32/README-Win32.txt
- Replaced this file with a new one which gives a full explanation
- of how to build libsndfile under Win32. Thanks to Mike Ricos.
-
-2000-08-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.[ch]
- Removed double leading underscores from the start of all variable and
- function names. Identifiers with a leading underscores are reserved
- for use by the compiler.
-
- * src/au_g72x.c src/G72x/*
- Continued work on G721 encoded AU files.
-
-2000-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/G72x/*
- New files for reading/writing G721 and G723 ADPCM audio. These files
- are from a Sun Microsystems reference implementation released under a
- free software licence.
- Extensive changes to this code to make it fit in with libsndfile.
- See the ChangeLog in this directory for details.
-
- * src/au_g72x.c
- New file for G721 encoded AU files.
-
-2000-07-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * libsndfile.spec.in
- Added a spec file for making RPMs. Thanks to Josh Green for supplying this.
-
-2000-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/sndfile.h
- Add checking for and handling of header-less u-law encoded AU/SND files.
- Any file with a ".au" or ".snd" file extension and without the normal
- AU file header is treated as an 8kHz, u-law encoded file.
-
- * src/au.h
- New function for opening a headerless u-law encoded file for read.
-
-2000-06-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- Add checking for files shorter than minimal PAF file header length.
-
-2000-06-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.c
- Added extra sf_perror() calls when sf_write_XXXX fails.
-
-2000-05-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Modified usage of va_arg() macro to work correctly on PowerPC
- Linux. Thanks to Kyle Wheeler for giving me ssh access to his
- machine while I was trying to track this down.
-
- * configure.in src/*.[ch]
- Sorted out some endian-ness issues brought up by PowerPC Linux.
-
- * tests/read_seek_test.c
- Added extra debugging for when tests fail.
-
-2000-05-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Fixed bug in GSM 6.10 handling for big-endian machines. Thanks
- to Sigbjørn Skjæret for reporting this.
-
-2000-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/wav.c src/wav_gsm610.c
- Finallised writing of GSM 6.10 WAV files.
-
- * tests/lossy_comp_test.c
- Wrote new test code for GSM 6.10 files.
-
- * examples/sfinfo.c
- Fixed incorrect format in printf() statement.
-
-2000-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h.in
- Fixed comments about sf_perror () and sf_error_str ().
-
-2000-03-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Fixed --enable-justsrc option.
-
-2000-03-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * wav.c
- Fixed checking of bytespersec field of header. Still some weirdness
- with some files.
-
-2000-03-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/lossy_comp_test.c
- Added option to test PCM WAV files (sanity check).
- Fixed bug in sf_seek() tests.
-
-2000-02-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/wav.c
- Minor changes to allow writing of GSM 6.10 WAV files.
-
-2000-02-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in Makefile.am src/Makefile.am
- Finally got around to figuring out how to build a single library from
- multiple source directories.
- Reading GSM 6.10 files now seems to work.
-
-2000-01-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Added more error reporting in read_fmt_chunk().
-
-1999-12-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sfinfo.c
- Modified program to accept multiple filenames from the command line.
-
-1999-11-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_ima_adpcm.c
- Moved code around in preparation to adding ability to read/write IMA ADPCM
- encoded AIFF files.
-
-1999-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Fixed put_int() and put_short() macros used by _psf_hprintf() which were
- causing seg. faults on Sparc Solaris.
-
-1999-11-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.c
- Added string.h to includes. Thanks to Sigbjxrn Skjfret.
-
- * src/svx.c
- Fixed __svx_close() function to ensure FORM and BODY chunks are correctly
- set.
-
-1999-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c
- Fixed handling of incorrect size field in AU header on read. Thanks to
- Christoph Lauer for finding this problem.
-
-1999-09-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fixed a bug with incorrect SSND chunk length being written. This also lead
- to finding an minor error in AIFF header parsing. Thanks to Dan Timis for
- pointing this out.
-
-1999-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- Fixed a bug with reading and writing 24 bit stereo PAF files. This problem
- came to light when implementing tests for the new functions which operate
- in terms of frames rather than items.
-
-1999-09-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Modified file type detection to use first 12 bytes of file rather than
- file name extension. Required this because NIST files use the same
- filename extension as Microsoft WAV files.
-
- * src/sndfile.c src/sndfile.h
- Added short, int and double read/write functions which work in frames
- rather than items. This was originally suggested by Maurizio Umberto
- Puxeddu.
-
-1999-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/svx.c
- Finished off implementation of write using __psf_hprintf().
-
-1999-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/common.h
- Added a buffer to SF_PRIVATE for writing the header. This is required
- to make generating headers for IFF/SVX files easier as well as making
- it easier to do re-write the headers which will be required when
- sf_rewrite_header() is implemented.
-
- * src/common.c
- Implemented __psf_hprintf() function. This is an internal function
- which is documented briefly just above the code.
-
-1999-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed a bug in sf_write_raw() where it was returning incorrect values
- (thanks to Richard Dobson for finding this one). Must put in a test
- routine for sf_read_raw and sf_write_raw.
-
- * src/aiff.c
- Fixed default FORMsize in __aiff_open_write ().
-
- * src/sndfile.c
- Added copy of filename to internal data structure. IFF/SVX files
- contain a NAME header chunk. Both sf_open_read() and sf_open_write()
- copy the file name (less the leading path information) to the
- filename field.
-
- * src/svx.c
- Started implementing writing of files.
-
-1999-08-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/svx.c
- New file for reading/writing 8SVX and 16SVX files.
-
- * src/sndfile.[ch] src/common.h
- Changes for SVX files.
-
- * src/aiff.c
- Fixed header parsing when unknown chunk is found.
-
-1999-08-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/paf.c
- New file for reading/writing Ensoniq PARIS audio file format.
-
- * src/sndfile.[ch] src/common.h
- Changes for PAF files.
-
- * src/sndfile.[ch]
- Added stuff for sf_get_lib_version() function.
-
-
-1999-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h MacOS/config.h
- Fixed minor MacOS configuration issues.
-
-1999-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * MacOS/
- Added a new directory for the MacOS config.h file and the
- readme file.
-
- * src/aiff.c
- Fixed calculation of datalength when reading SSND chunk. Thanks to
- Sigbjørn Skjæret for pointing out this error.
-
-1999-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/sndfile.h src/raw.c
- Further fixing of #includes for MacOS.
-
-1999-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/aiff.c
- Added call to ferror () in main header parsing loop of __XXX_open_read
- functions. This should fix problems on platforms (MacOS, AmigaOS) where
- fseek()ing or fread()ing beyond the end of the file puts the FILE*
- stream in an error state until clearerr() is called.
-
- * tests/write_read_test.c
- Added tests for RAW header-less PCM files.
-
- * src/common.h
- Moved definition of struct tribyte to pcm.c which is the only place
- which needs it.
-
- * src/pcm.c
- Modified all code which assumed sizeof (struct tribyte) == 3. This code
- did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out.
-
- * src/au.c
- Removed <sys/stat.h> from list of #includes (not being used).
-
- * src/sndfile.c
- Added MacOS specific #ifdef to replace <sys/stat.h>.
-
- * src/sndfile.h
- Added MacOS specific #ifdef to replace <sys/stat.h>.
-
- * src/sndfile.h
- Added MacOS specific typedef for off_t.
-
- * MacOS-readme.txt
- New file with instructions for building libsndfile under MacOS. Thanks
- to Ben "Jacobs" for supplying these instructions.
-
-1999-07-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Removed sndfile.h from generated file list as there were no longer
- any autoconf substitutions being made.
-
- * src/raw.c
- New file for handling raw header-less PCM files. In order to open these
- for read, the user must specify format, pcmbitwidth and channels in the
- SF_INFO struct when calling sf_open_read ().
-
- * src/sndfile.c
- Added support for raw header-less PCM files.
-
-1999-07-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * examples/sfinfo.c
- Removed options so the sfinfo program always prints out all the information.
-
-1999-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/alaw.c
- New file for A-law encoding (similar to u-law).
-
- * tests/alaw_test.c
- New test program to test the A-law encode/decode lookup tables.
-
- * tests/lossy_comp_test.c
- Added tests for a-law encoded WAV, AU and AULE files.
-
-1999-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c src/au.c
- Removed second "#include <unistd.h>". Thanks to Ben "Jacobs" for pointing
- this out.
-
-1999-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/ulaw_test.c
- New test program to test the u-law encode/decode lookup tables.
-
-1999-07-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.h
- Made corrections to comments on the return values from sf_seek ().
-
- * src/sndfile.c
- Fixed boundary condition checking bug and accounting bug in sf_read_raw ().
-
-1999-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/au.c src/ulaw.c
- Finished implementation of u-law encoded AU files.
-
- * src/wav.c
- Implemented reading and writing of u-law encoded WAV files.
-
- * tests/
- Changed name of adpcm_test.c to lossy_comp_test.c. This test program
- will now be used to test Ulaw and Alaw encoding as well as APDCM.
- Added tests for Ulaw encoded WAV files.
-
-1999-07-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/adpcm_test.c
- Initialised amp variable in gen_signal() to remove compiler warning.
-
-1999-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- In __aiff_open_read () prevented fseek()ing beyond end of file which
- was causing trouble on MacOS with the MetroWerks compiler. Thanks to
- Ben "Jacobs" for pointing this out.
-
- *src/wav.c
- Fixed as above in __wav_open_read ().
-
-1999-07-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_ms_adpcm.c
- Implemented MS ADPCM encoding. Code cleanup of decoder.
-
- * tests/adpcm_test.c
- Added tests for MS ADPCM WAV files.
-
- * src/wav_ima_adpcm.c
- Fixed incorrect parameter in call to srate2blocksize () from
- __ima_writer_init ().
-
-1999-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/read_seek_test.c
- Added test for 8 bit AIFF files.
-
-1999-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.c
- Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c
-
- * configure.in
- Added -Wconversion to CFLAGS.
-
- * src/*.c tests/*.c examples/*.c
- Fixed all warnings resulting from use of -Wconversion.
-
-1999-06-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM
- WAV files.
-
- * src/wav_ima.c
- Changed block alignment to be dependant on sample rate. This should make
- WAV files created with libsndfile compatible with the MS Windows media
- players.
-
- * tests/adpcm_test.c
- Reimplemented adpcm_test_short and implemented adpcm_test_int and
- adpcm_test_double.
- Now have full testing of IMA ADPCM WAV file read, write and seek.
-
-1999-06-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_float.c
- Fixed function prototype for x86f2d_array () which was causing ocassional
- seg. faults on Sparc Solaris machines.
-
-1999-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c
- Fixed bug in __aiff_close where the length fields in the header were
- not being correctly calculated before writing.
-
- * tests/write_read_test.c
- Modified to detect the above bug in WAV, AIFF and AU files.
-
-1999-06-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * Win32/*
- Added a contribution from Albert Faber to allow libsndfile to compile
- under Win32 systems. libsndfile will now be used as part of LAME the
- the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/).
-
-1999-06-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in
- Changed to reflect previous changes.
-
- * src/wav_ima_adpcm.c
- Fixed incorrect calculation of bytespersec header field (IMA ADPCM only).
-
- Fixed bug when writing from int or double data to IMA ADPCM file. Will need
- to write test code for this.
-
- Fixed bug in __ima_write () whereby the length of the current block was
- calculated incorrectly. Thanks to Jongcheon Park for pointing this out.
-
-1999-03-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/*.c
- Changed all read/write/lseek function calls to fread/fwrite/
- fseek/ftell and added error checking of return values from
- fread and fwrite in critical areas of the code.
-
- * src/au.c
- Fixed incorrect datasize element in AU header on write.
-
- * tests/error_test.c
- Add new test to check all error values have an associated error
- string. This will avoid embarrassing real world core dumps.
-
-1999-03-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c src/aiff.c
- Added handling for unknown chunk markers in the file.
-
-1999-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Filled in missing error strings in SndfileErrors array. Missing entries
- can cause core dumps when calling sf_error-str (). Thanks to Sam
- <mrsam at-sign geocities.com> for finding this problem.
-
-1999-03-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav_ima_adpcm.c
- Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading
- stereo files. Caused by not adjusting offset into buffer of decoded
- samples for 2 channels. A similar bug existed in __ima_write ().
- Need a test for stereo ADPCM files.
-
- * src/wav_ms_adpcm.c
- Decoder working correctly.
-
-1999-03-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * configure.in Makefile.am
- Added --enable-justsrc configuration variable sent by Sam
- <mrsam at-sign geocities.com>.
-
- * src/wav_ima_adpcm.c
- Fixed bug when reading beyond end of data section due to not
- checking pima->blockcount.
- This uncovered __ima_seek () bug due to pima->blockcount being set
- before calling __ima_init_block ().
-
-1999-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Started implementing MS ADPCM decoder.
- If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this
- encoder seems to add an extra byte. Why not just give an even data
- length?
-
-1999-03-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c.
- This will make it easier to add and debug other kinds of WAV files
- in future.
-
-1999-03-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/
- Added adpcm_test.c which implements test functions for
- IMA ADPCM reading/writing/seeking etc.
-
- * src/wav.c
- Fixed many bugs in IMA ADPCM encoder and decoder.
-
-1999-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Finished implementing IMA ADPCM encoder and decoder (what a bitch!).
-
-1999-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/wav.c
- Started implementing IMA ADPCM decoder.
-
-1999-03-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/sndfile.c
- Fixed bug where the sf_read_XXX functions were returning a
- incorrect read count when reading past end of file.
- Fixed bug in sf_seek () when seeking backwards from end of file.
-
- * tests/read_seek_test.c
- Added multiple read test to short_test(), int_test () and
- double_test ().
- Added extra chunk to all test WAV files to test that reading
- stops at end of 'data' chunk.
-
-1999-02-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.c
- Added tests for little DEC endian AU files.
-
- * src/au.c
- Add handling for DEC format little endian AU files.
-
-1999-02-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c src/au.c src/wav.c
- Add __psf_sprintf calls during header parsing.
-
- * src/sndfile.c src/common.c
- Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c).
-
- * tests/write_read_test.c
- Added tests for 8 bit PCM files (WAV, AIFF and AU).
-
- * src/au.c src/aiff.c
- Add handling of 8 bit PCM data format.
-
- * src/aiff.c
- On write, set blocksize in SSND chunk to zero like everybody else.
-
-1999-02-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c:
- Fixed bug in let2s_array (cptr was not being initialised).
-
- * src/sndfile.c:
- Fixed bug in sf_read_raw and sf_write_raw. sf_seek should
- now work when using these functions.
-
-1999-02-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * tests/write_read_test.c:
- Force test_buffer array to be double aligned. Sparc Solaris
- requires this.
-
-1999-02-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/pcm.c:
- Fixed a bug which was causing errors in the reading
- and writing of 24 bit PCM files.
-
- * doc/api.html
- Finished of preliminary documentaion.
-
-1999-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-
- * src/aiff.c:
- Changed reading of 'COMM' chunk to avoid reading an int
- which overlaps an int (4 byte) boundary.
diff --git a/libsndfile.64/NEWS b/libsndfile.64/NEWS
deleted file mode 100644
index d8f549f4..00000000
--- a/libsndfile.64/NEWS
+++ /dev/null
@@ -1,199 +0,0 @@
-Version 1.0.28 (2017-04-02)
- * Fix buffer overruns in FLAC and ID3 handling code.
- * Move to variable length header storage.
- * Fix detection of Large File Support for 32 bit systems.
- * Remove large stack allocations in ALAC handling code.
- * Remove all use of Variable Length Arrays.
- * Minor bug fixes and improvements.
-
-Version 1.0.27 (2016-06-19)
- * Fix an SF_INFO seekable flag regression introduced in 1.0.26.
- * Fix potential infinite loops on malformed input files.
- * Add string metadata read/write for CAF and RF64.
- * Add handling of CUE chunks.
- * Fix endian-ness issues in PAF files.
- * Minor bug fixes and improvements.
-
-Version 1.0.26 (2015-11-22)
- * Fix for CVE-2014-9496, SD2 buffer read overflow.
- * Fix for CVE-2014-9756, file_io.c divide by zero.
- * Fix for CVE-2015-7805, AIFF heap write overflow.
- * Add support for ALAC encoder in a CAF container.
- * Add support for Cart chunks in WAV files.
- * Minor bug fixes and improvements.
-
-Version 1.0.25 (2011-07-13)
- * Fix for Secunia Advisory SA45125, heap overflow in PAF file handler.
- * Accept broken WAV files with blockalign == 0.
- * Minor bug fixes and improvements.
-
-Version 1.0.24 (2011-03-23)
- * WAV files now have an 18 byte u-law and A-law fmt chunk.
- * Document virtual I/O functionality.
- * Two new methods rawHandle() and takeOwnership() in sndfile.hh.
- * AIFF fix for non-zero offset value in SSND chunk.
- * Minor bug fixes and improvements.
-
-Version 1.0.23 (2010-10-10)
- * Add version metadata to Windows DLL.
- * Add a missing 'inline' to sndfile.hh.
- * Update docs.
- * Minor bug fixes and improvements.
-
-Version 1.0.22 (2010-10-04)
- * Couple of fixes for SDS file writer.
- * Fixes arising from static analysis.
- * Handle FLAC files with ID3 meta data at start of file.
- * Handle FLAC files which report zero length.
- * Other minor bug fixes and improvements.
-
-Version 1.0.21 (2009-12-13)
- * Add a couple of new binary programs to programs/ dir.
- * Remove sndfile-jackplay (now in sndfile-tools package).
- * Add windows only function sf_wchar_open().
- * Bunch of minor bug fixes.
-
-Version 1.0.20 (2009-05-14)
- * Fix potential heap overflow in VOC file parser (Tobias Klein, http://www.trapkit.de/).
-
-Version 1.0.19 (2009-03-02)
- * Fix for CVE-2009-0186 (Alin Rad Pop, Secunia Research).
- * Huge number of minor bug fixes as a result of static analysis.
-
-Version 1.0.18 (2009-02-07)
- * Add Ogg/Vorbis support (thanks to John ffitch).
- * Remove captive FLAC library.
- * Many new features and bug fixes.
- * Generate Win32 and Win64 pre-compiled binaries.
-
-Version 1.0.17 (2006-08-31)
- * Add sndfile.hh C++ wrapper.
- * Update Win32 MinGW build instructions.
- * Minor bug fixes and cleanups.
-
-Version 1.0.16 (2006-04-30)
- * Add support for Broadcast (BEXT) chunks in WAV files.
- * Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS.
- * Add support for RIFX (big endian WAV variant).
- * Fix configure script bugs.
- * Fix bug in INST and MARK chunk writing for AIFF files.
-
-Version 1.0.15 (2006-03-16)
- * Fix some ia64 issues.
- * Fix precompiled DLL.
- * Minor bug fixes.
-
-Version 1.0.14 (2006-02-19)
- * Really fix MinGW compile problems.
- * Minor bug fixes.
-
-Version 1.0.13 (2006-01-21)
- * Fix for MinGW compiler problems.
- * Allow readin/write of instrument chunks from WAV and AIFF files.
- * Compile problem fix for Solaris compiler.
- * Minor cleanups and bug fixes.
-
-Version 1.0.12 (2005-09-30)
- * Add support for FLAC and Apple's Core Audio Format (CAF).
- * Add virtual I/O interface (still needs docs).
- * Cygwin and other Win32 fixes.
- * Minor bug fixes and cleanups.
-
-Version 1.0.11 (2004-11-15)
- * Add support for SD2 files.
- * Add read support for loop info in WAV and AIFF files.
- * Add more tests.
- * Improve type safety.
- * Minor optimisations and bug fixes.
-
-Version 1.0.10 (2004-06-15)
- * Fix AIFF read/write mode bugs.
- * Add support for compiling Win32 DLLS using MinGW.
- * Fix problems resulting in failed compiles with gcc-2.95.
- * Improve test suite.
- * Minor bug fixes.
-
-Version 1.0.9 (2004-03-30)
- * Add handling of AVR (Audio Visual Research) files.
- * Improve handling of WAVEFORMATEXTENSIBLE WAV files.
- * Fix for using pipes on Win32.
-
-Version 1.0.8 (2004-03-14)
- * Correct peak chunk handing for files with > 16 tracks.
- * Fix for WAV files with huge number of CUE chunks.
-
-Version 1.0.7 (2004-02-25)
- * Fix clip mode detection on ia64, MIPS and other CPUs.
- * Fix two MacOSX build problems.
-
-Version 1.0.6 (2004-02-08)
- * Added support for native Win32 file access API (Ross Bencina).
- * New mode to add clippling then a converting from float/double to integer
- would otherwise wrap around.
- * Fixed a bug in reading/writing files > 2Gig on Linux, Solaris and others.
- * Many minor bug fixes.
- * Other random fixes for Win32.
-
-Version 1.0.5 (2003-05-03)
- * Added support for HTK files.
- * Added new function sf_open_fd() to allow for secure opening of temporary
- files as well as reading/writing sound files embedded within larger
- container files.
- * Added string support for AIFF files.
- * Minor bug fixes and code cleanups.
-
-Version 1.0.4 (2003-02-02)
- * Added suport of PVF and XI files.
- * Added functionality for setting and retreiving strings from sound files.
- * Minor code cleanups and bug fixes.
-
-Version 1.0.3 (2002-12-09)
- * Minor bug fixes.
-
-Version 1.0.2 (2002-11-24)
- * Added support for VOX ADPCM.
- * Improved error reporting.
- * Added version scripting on Linux and Solaris.
- * Minor bug fixes.
-
-Version 1.0.1 (2002-09-14)
- * Added MAT and MAT5 file formats.
- * Minor bug fixes.
-
-Version 1.0.0 (2002-08-16)
- * Final release for 1.0.0.
-
-Version 1.0.0rc6 (2002-08-14)
- * Release candidate 6 for the 1.0.0 series.
- * MacOS9 fixes.
-
-Version 1.0.0rc5 (2002-08-10)
- * Release candidate 5 for the 1.0.0 series.
- * Changed the definition of sf_count_t which was causing problems when
- libsndfile was compiled with other libraries (ie WxWindows).
- * Minor bug fixes.
- * Documentation cleanup.
-
-Version 1.0.0rc4 (2002-08-03)
- * Release candidate 4 for the 1.0.0 series.
- * Minor bug fixes.
- * Fix broken Win32 "make check".
-
-Version 1.0.0rc3 (2002-08-02)
- * Release candidate 3 for the 1.0.0 series.
- * Fix bug where libsndfile was reading beyond the end of the data chunk.
- * Added on-the-fly header updates on write.
- * Fix a couple of documentation issues.
-
-Version 1.0.0rc2 (2002-06-24)
- * Release candidate 2 for the 1.0.0 series.
- * Fix compile problem for Win32.
-
-Version 1.0.0rc1 (2002-06-24)
- * Release candidate 1 for the 1.0.0 series.
-
-Version 0.0.28 (2002-04-27)
- * Last offical release of 0.0.X series of the library.
-
-Version 0.0.8 (1999-02-16)
- * First offical release.
diff --git a/libsndfile.64/include/sndfile.h b/libsndfile.64/include/sndfile.h
deleted file mode 100644
index 8a60fb09..00000000
--- a/libsndfile.64/include/sndfile.h
+++ /dev/null
@@ -1,857 +0,0 @@
-/*
-** Copyright (C) 1999-2016 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** sndfile.h -- system-wide definitions
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_H
-#define SNDFILE_H
-
-/* This is the version 1.0.X header file. */
-#define SNDFILE_1
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* The following file types can be read and written.
-** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
-** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
-** SF_FORMAT_SUBMASK can be used to separate the major and minor file
-** types.
-*/
-
-enum
-{ /* Major formats. */
- SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */
- SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */
- SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */
- SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */
- SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */
- SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */
- SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */
- SF_FORMAT_VOC = 0x080000, /* VOC files. */
- SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */
- SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */
- SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */
- SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */
- SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */
- SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */
- SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */
- SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */
- SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */
- SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */
- SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */
- SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */
- SF_FORMAT_CAF = 0x180000, /* Core Audio File format */
- SF_FORMAT_WVE = 0x190000, /* Psion WVE format */
- SF_FORMAT_OGG = 0x200000, /* Xiph OGG container */
- SF_FORMAT_MPC2K = 0x210000, /* Akai MPC 2000 sampler */
- SF_FORMAT_RF64 = 0x220000, /* RF64 WAV file */
-
- /* Subtypes from here on. */
-
- SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */
- SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */
- SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */
- SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */
-
- SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */
-
- SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */
- SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */
-
- SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */
- SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */
- SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */
- SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */
-
- SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */
- SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */
-
- SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */
- SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */
- SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */
-
- SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */
- SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */
- SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */
- SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */
-
- SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */
- SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */
-
- SF_FORMAT_VORBIS = 0x0060, /* Xiph Vorbis encoding. */
-
- SF_FORMAT_ALAC_16 = 0x0070, /* Apple Lossless Audio Codec (16 bit). */
- SF_FORMAT_ALAC_20 = 0x0071, /* Apple Lossless Audio Codec (20 bit). */
- SF_FORMAT_ALAC_24 = 0x0072, /* Apple Lossless Audio Codec (24 bit). */
- SF_FORMAT_ALAC_32 = 0x0073, /* Apple Lossless Audio Codec (32 bit). */
-
- /* Endian-ness options. */
-
- SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */
- SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */
- SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */
- SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */
-
- SF_FORMAT_SUBMASK = 0x0000FFFF,
- SF_FORMAT_TYPEMASK = 0x0FFF0000,
- SF_FORMAT_ENDMASK = 0x30000000
-} ;
-
-/*
-** The following are the valid command numbers for the sf_command()
-** interface. The use of these commands is documented in the file
-** command.html in the doc directory of the source code distribution.
-*/
-
-enum
-{ SFC_GET_LIB_VERSION = 0x1000,
- SFC_GET_LOG_INFO = 0x1001,
- SFC_GET_CURRENT_SF_INFO = 0x1002,
-
-
- SFC_GET_NORM_DOUBLE = 0x1010,
- SFC_GET_NORM_FLOAT = 0x1011,
- SFC_SET_NORM_DOUBLE = 0x1012,
- SFC_SET_NORM_FLOAT = 0x1013,
- SFC_SET_SCALE_FLOAT_INT_READ = 0x1014,
- SFC_SET_SCALE_INT_FLOAT_WRITE = 0x1015,
-
- SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020,
- SFC_GET_SIMPLE_FORMAT = 0x1021,
-
- SFC_GET_FORMAT_INFO = 0x1028,
-
- SFC_GET_FORMAT_MAJOR_COUNT = 0x1030,
- SFC_GET_FORMAT_MAJOR = 0x1031,
- SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032,
- SFC_GET_FORMAT_SUBTYPE = 0x1033,
-
- SFC_CALC_SIGNAL_MAX = 0x1040,
- SFC_CALC_NORM_SIGNAL_MAX = 0x1041,
- SFC_CALC_MAX_ALL_CHANNELS = 0x1042,
- SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043,
- SFC_GET_SIGNAL_MAX = 0x1044,
- SFC_GET_MAX_ALL_CHANNELS = 0x1045,
-
- SFC_SET_ADD_PEAK_CHUNK = 0x1050,
- SFC_SET_ADD_HEADER_PAD_CHUNK = 0x1051,
-
- SFC_UPDATE_HEADER_NOW = 0x1060,
- SFC_SET_UPDATE_HEADER_AUTO = 0x1061,
-
- SFC_FILE_TRUNCATE = 0x1080,
-
- SFC_SET_RAW_START_OFFSET = 0x1090,
-
- SFC_SET_DITHER_ON_WRITE = 0x10A0,
- SFC_SET_DITHER_ON_READ = 0x10A1,
-
- SFC_GET_DITHER_INFO_COUNT = 0x10A2,
- SFC_GET_DITHER_INFO = 0x10A3,
-
- SFC_GET_EMBED_FILE_INFO = 0x10B0,
-
- SFC_SET_CLIPPING = 0x10C0,
- SFC_GET_CLIPPING = 0x10C1,
-
- SFC_GET_CUE_COUNT = 0x10CD,
- SFC_GET_CUE = 0x10CE,
- SFC_SET_CUE = 0x10CF,
-
- SFC_GET_INSTRUMENT = 0x10D0,
- SFC_SET_INSTRUMENT = 0x10D1,
-
- SFC_GET_LOOP_INFO = 0x10E0,
-
- SFC_GET_BROADCAST_INFO = 0x10F0,
- SFC_SET_BROADCAST_INFO = 0x10F1,
-
- SFC_GET_CHANNEL_MAP_INFO = 0x1100,
- SFC_SET_CHANNEL_MAP_INFO = 0x1101,
-
- SFC_RAW_DATA_NEEDS_ENDSWAP = 0x1110,
-
- /* Support for Wavex Ambisonics Format */
- SFC_WAVEX_SET_AMBISONIC = 0x1200,
- SFC_WAVEX_GET_AMBISONIC = 0x1201,
-
- /*
- ** RF64 files can be set so that on-close, writable files that have less
- ** than 4GB of data in them are converted to RIFF/WAV, as per EBU
- ** recommendations.
- */
- SFC_RF64_AUTO_DOWNGRADE = 0x1210,
-
- SFC_SET_VBR_ENCODING_QUALITY = 0x1300,
- SFC_SET_COMPRESSION_LEVEL = 0x1301,
-
- /* Cart Chunk support */
- SFC_SET_CART_INFO = 0x1400,
- SFC_GET_CART_INFO = 0x1401,
-
- /* Following commands for testing only. */
- SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001,
-
- /*
- ** SFC_SET_ADD_* values are deprecated and will disappear at some
- ** time in the future. They are guaranteed to be here up to and
- ** including version 1.0.8 to avoid breakage of existing software.
- ** They currently do nothing and will continue to do nothing.
- */
- SFC_SET_ADD_DITHER_ON_WRITE = 0x1070,
- SFC_SET_ADD_DITHER_ON_READ = 0x1071
-} ;
-
-
-/*
-** String types that can be set and read from files. Not all file types
-** support this and even the file types which support one, may not support
-** all string types.
-*/
-
-enum
-{ SF_STR_TITLE = 0x01,
- SF_STR_COPYRIGHT = 0x02,
- SF_STR_SOFTWARE = 0x03,
- SF_STR_ARTIST = 0x04,
- SF_STR_COMMENT = 0x05,
- SF_STR_DATE = 0x06,
- SF_STR_ALBUM = 0x07,
- SF_STR_LICENSE = 0x08,
- SF_STR_TRACKNUMBER = 0x09,
- SF_STR_GENRE = 0x10
-} ;
-
-/*
-** Use the following as the start and end index when doing metadata
-** transcoding.
-*/
-
-#define SF_STR_FIRST SF_STR_TITLE
-#define SF_STR_LAST SF_STR_GENRE
-
-enum
-{ /* True and false */
- SF_FALSE = 0,
- SF_TRUE = 1,
-
- /* Modes for opening files. */
- SFM_READ = 0x10,
- SFM_WRITE = 0x20,
- SFM_RDWR = 0x30,
-
- SF_AMBISONIC_NONE = 0x40,
- SF_AMBISONIC_B_FORMAT = 0x41
-} ;
-
-/* Public error values. These are guaranteed to remain unchanged for the duration
-** of the library major version number.
-** There are also a large number of private error numbers which are internal to
-** the library which can change at any time.
-*/
-
-enum
-{ SF_ERR_NO_ERROR = 0,
- SF_ERR_UNRECOGNISED_FORMAT = 1,
- SF_ERR_SYSTEM = 2,
- SF_ERR_MALFORMED_FILE = 3,
- SF_ERR_UNSUPPORTED_ENCODING = 4
-} ;
-
-
-/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP).
-*/
-
-enum
-{ SF_CHANNEL_MAP_INVALID = 0,
- SF_CHANNEL_MAP_MONO = 1,
- SF_CHANNEL_MAP_LEFT, /* Apple calls this 'Left' */
- SF_CHANNEL_MAP_RIGHT, /* Apple calls this 'Right' */
- SF_CHANNEL_MAP_CENTER, /* Apple calls this 'Center' */
- SF_CHANNEL_MAP_FRONT_LEFT,
- SF_CHANNEL_MAP_FRONT_RIGHT,
- SF_CHANNEL_MAP_FRONT_CENTER,
- SF_CHANNEL_MAP_REAR_CENTER, /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */
- SF_CHANNEL_MAP_REAR_LEFT, /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */
- SF_CHANNEL_MAP_REAR_RIGHT, /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */
- SF_CHANNEL_MAP_LFE, /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency' */
- SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */
- SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */
- SF_CHANNEL_MAP_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */
- SF_CHANNEL_MAP_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */
- SF_CHANNEL_MAP_TOP_CENTER, /* Apple calls this 'Top Center Surround' */
- SF_CHANNEL_MAP_TOP_FRONT_LEFT, /* Apple calls this 'Vertical Height Left' */
- SF_CHANNEL_MAP_TOP_FRONT_RIGHT, /* Apple calls this 'Vertical Height Right' */
- SF_CHANNEL_MAP_TOP_FRONT_CENTER, /* Apple calls this 'Vertical Height Center' */
- SF_CHANNEL_MAP_TOP_REAR_LEFT, /* Apple and MS call this 'Top Back Left' */
- SF_CHANNEL_MAP_TOP_REAR_RIGHT, /* Apple and MS call this 'Top Back Right' */
- SF_CHANNEL_MAP_TOP_REAR_CENTER, /* Apple and MS call this 'Top Back Center' */
-
- SF_CHANNEL_MAP_AMBISONIC_B_W,
- SF_CHANNEL_MAP_AMBISONIC_B_X,
- SF_CHANNEL_MAP_AMBISONIC_B_Y,
- SF_CHANNEL_MAP_AMBISONIC_B_Z,
-
- SF_CHANNEL_MAP_MAX
-} ;
-
-
-/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
-
-typedef struct SNDFILE_tag SNDFILE ;
-
-/* The following typedef is system specific and is defined when libsndfile is
-** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
-** 64 bit file offsets.
-** On windows, we need to allow the same header file to be compiler by both GCC
-** and the Microsoft compiler.
-*/
-
-#if (defined (_MSCVER) || defined (_MSC_VER) && (_MSC_VER < 1310))
-typedef __int64 sf_count_t ;
-#define SF_COUNT_MAX 0x7fffffffffffffffi64
-#else
-typedef __int64 sf_count_t ;
-#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL
-#endif
-
-
-/* A pointer to a SF_INFO structure is passed to sf_open () and filled in.
-** On write, the SF_INFO structure is filled in by the user and passed into
-** sf_open ().
-*/
-
-struct SF_INFO
-{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */
- int samplerate ;
- int channels ;
- int format ;
- int sections ;
- int seekable ;
-} ;
-
-typedef struct SF_INFO SF_INFO ;
-
-/* The SF_FORMAT_INFO struct is used to retrieve information about the sound
-** file formats libsndfile supports using the sf_command () interface.
-**
-** Using this interface will allow applications to support new file formats
-** and encoding types when libsndfile is upgraded, without requiring
-** re-compilation of the application.
-**
-** Please consult the libsndfile documentation (particularly the information
-** on the sf_command () interface) for examples of its use.
-*/
-
-typedef struct
-{ int format ;
- const char *name ;
- const char *extension ;
-} SF_FORMAT_INFO ;
-
-/*
-** Enums and typedefs for adding dither on read and write.
-** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE
-** and SFC_SET_DITHER_ON_READ.
-*/
-
-enum
-{ SFD_DEFAULT_LEVEL = 0,
- SFD_CUSTOM_LEVEL = 0x40000000,
-
- SFD_NO_DITHER = 500,
- SFD_WHITE = 501,
- SFD_TRIANGULAR_PDF = 502
-} ;
-
-typedef struct
-{ int type ;
- double level ;
- const char *name ;
-} SF_DITHER_INFO ;
-
-/* Struct used to retrieve information about a file embedded within a
-** larger file. See SFC_GET_EMBED_FILE_INFO.
-*/
-
-typedef struct
-{ sf_count_t offset ;
- sf_count_t length ;
-} SF_EMBED_FILE_INFO ;
-
-/*
-** Struct used to retrieve cue marker information from a file
-*/
-
-typedef struct
-{ int32_t indx ;
- uint32_t position ;
- int32_t fcc_chunk ;
- int32_t chunk_start ;
- int32_t block_start ;
- uint32_t sample_offset ;
- char name [256] ;
-} SF_CUE_POINT ;
-
-#define SF_CUES_VAR(count) \
- struct \
- { uint32_t cue_count ; \
- SF_CUE_POINT cue_points [count] ; \
- }
-
-typedef SF_CUES_VAR (100) SF_CUES ;
-
-/*
-** Structs used to retrieve music sample information from a file.
-*/
-
-enum
-{ /*
- ** The loop mode field in SF_INSTRUMENT will be one of the following.
- */
- SF_LOOP_NONE = 800,
- SF_LOOP_FORWARD,
- SF_LOOP_BACKWARD,
- SF_LOOP_ALTERNATING
-} ;
-
-typedef struct
-{ int gain ;
- char basenote, detune ;
- char velocity_lo, velocity_hi ;
- char key_lo, key_hi ;
- int loop_count ;
-
- struct
- { int mode ;
- uint32_t start ;
- uint32_t end ;
- uint32_t count ;
- } loops [16] ; /* make variable in a sensible way */
-} SF_INSTRUMENT ;
-
-
-
-/* Struct used to retrieve loop information from a file.*/
-typedef struct
-{
- short time_sig_num ; /* any positive integer > 0 */
- short time_sig_den ; /* any positive power of 2 > 0 */
- int loop_mode ; /* see SF_LOOP enum */
-
- int num_beats ; /* this is NOT the amount of quarter notes !!!*/
- /* a full bar of 4/4 is 4 beats */
- /* a full bar of 7/8 is 7 beats */
-
- float bpm ; /* suggestion, as it can be calculated using other fields:*/
- /* file's length, file's sampleRate and our time_sig_den*/
- /* -> bpms are always the amount of _quarter notes_ per minute */
-
- int root_key ; /* MIDI note, or -1 for None */
- int future [6] ;
-} SF_LOOP_INFO ;
-
-
-/* Struct used to retrieve broadcast (EBU) information from a file.
-** Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE.
-*/
-#define SF_BROADCAST_INFO_VAR(coding_hist_size) \
- struct \
- { char description [256] ; \
- char originator [32] ; \
- char originator_reference [32] ; \
- char origination_date [10] ; \
- char origination_time [8] ; \
- uint32_t time_reference_low ; \
- uint32_t time_reference_high ; \
- short version ; \
- char umid [64] ; \
- char reserved [190] ; \
- uint32_t coding_history_size ; \
- char coding_history [coding_hist_size] ; \
- }
-
-/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */
-typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ;
-
-struct SF_CART_TIMER
-{ char usage [4] ;
- int32_t value ;
-} ;
-
-typedef struct SF_CART_TIMER SF_CART_TIMER ;
-
-#define SF_CART_INFO_VAR(p_tag_text_size) \
- struct \
- { char version [4] ; \
- char title [64] ; \
- char artist [64] ; \
- char cut_id [64] ; \
- char client_id [64] ; \
- char category [64] ; \
- char classification [64] ; \
- char out_cue [64] ; \
- char start_date [10] ; \
- char start_time [8] ; \
- char end_date [10] ; \
- char end_time [8] ; \
- char producer_app_id [64] ; \
- char producer_app_version [64] ; \
- char user_def [64] ; \
- int32_t level_reference ; \
- SF_CART_TIMER post_timers [8] ; \
- char reserved [276] ; \
- char url [1024] ; \
- uint32_t tag_text_size ; \
- char tag_text [p_tag_text_size] ; \
- }
-
-typedef SF_CART_INFO_VAR (256) SF_CART_INFO ;
-
-/* Virtual I/O functionality. */
-
-typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ;
-typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ;
-typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t (*sf_vio_tell) (void *user_data) ;
-
-struct SF_VIRTUAL_IO
-{ sf_vio_get_filelen get_filelen ;
- sf_vio_seek seek ;
- sf_vio_read read ;
- sf_vio_write write ;
- sf_vio_tell tell ;
-} ;
-
-typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ;
-
-
-/* Open the specified file for read, write or both. On error, this will
-** return a NULL pointer. To find the error number, pass a NULL SNDFILE
-** to sf_strerror ().
-** All calls to sf_open() should be matched with a call to sf_close().
-*/
-
-SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ;
-
-
-/* Use the existing file descriptor to create a SNDFILE object. If close_desc
-** is TRUE, the file descriptor will be closed when sf_close() is called. If
-** it is FALSE, the descriptor will not be closed.
-** When passed a descriptor like this, the library will assume that the start
-** of file header is at the current file offset. This allows sound files within
-** larger container files to be read and/or written.
-** On error, this will return a NULL pointer. To find the error number, pass a
-** NULL SNDFILE to sf_strerror ().
-** All calls to sf_open_fd() should be matched with a call to sf_close().
-
-*/
-
-SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-
-SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-
-
-/* sf_error () returns a error number which can be translated to a text
-** string using sf_error_number().
-*/
-
-int sf_error (SNDFILE *sndfile) ;
-
-
-/* sf_strerror () returns to the caller a pointer to the current error message for
-** the given SNDFILE.
-*/
-
-const char* sf_strerror (SNDFILE *sndfile) ;
-
-
-/* sf_error_number () allows the retrieval of the error string for each internal
-** error number.
-**
-*/
-
-const char* sf_error_number (int errnum) ;
-
-
-/* The following two error functions are deprecated but they will remain in the
-** library for the foreseeable future. The function sf_strerror() should be used
-** in their place.
-*/
-
-int sf_perror (SNDFILE *sndfile) ;
-int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int sf_format_check (const SF_INFO *info) ;
-
-
-/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses
-** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as
-** stdio.h function fseek ().
-** An offset of zero with whence set to SEEK_SET will position the
-** read / write pointer to the first data sample.
-** On success sf_seek returns the current position in (multi-channel)
-** samples from the start of the file.
-** Please see the libsndfile documentation for moving the read pointer
-** separately from the write pointer on files open in mode SFM_RDWR.
-** On error all of these functions return -1.
-*/
-
-enum
-{ SF_SEEK_SET = SEEK_SET,
- SF_SEEK_CUR = SEEK_CUR,
- SF_SEEK_END = SEEK_END
-} ;
-
-sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ;
-
-
-/* Functions for retrieving and setting string data within sound files.
-** Not all file types support this features; AIFF and WAV do. For both
-** functions, the str_type parameter must be one of the SF_STR_* values
-** defined above.
-** On error, sf_set_string() returns non-zero while sf_get_string()
-** returns NULL.
-*/
-
-int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ;
-
-const char* sf_get_string (SNDFILE *sndfile, int str_type) ;
-
-
-/* Return the library version string. */
-
-const char * sf_version_string (void) ;
-
-/* Return the current byterate at this point in the file. The byte rate in this
-** case is the number of bytes per second of audio data. For instance, for a
-** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate
-** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec.
-** For some file formats the returned value will be accurate and exact, for some
-** it will be a close approximation, for some it will be the average bitrate for
-** the whole file and for some it will be a time varying value that was accurate
-** when the file was most recently read or written.
-** To get the bitrate, multiple this value by 8.
-** Returns -1 for unknown.
-*/
-int sf_current_byterate (SNDFILE *sndfile) ;
-
-/* Functions for reading/writing the waveform data of a sound file.
-*/
-
-sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ;
-
-
-/* Functions for reading and writing the data chunk in terms of frames.
-** The number of items actually read/written = frames * number of channels.
-** sf_xxxx_raw read/writes the raw data bytes from/to the file
-** sf_xxxx_short passes data in the native short format
-** sf_xxxx_int passes data in the native int format
-** sf_xxxx_float passes data in the native float format
-** sf_xxxx_double passes data in the native double format
-** All of these read/write function return number of frames read/written.
-*/
-
-sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ;
-
-sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ;
-
-sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ;
-
-sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ;
-
-
-/* Functions for reading and writing the data chunk in terms of items.
-** Otherwise similar to above.
-** All of these read/write function return number of items read/written.
-*/
-
-sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ;
-
-sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ;
-
-sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ;
-
-sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ;
-
-
-/* Close the SNDFILE and clean up all memory allocations associated with this
-** file.
-** Returns 0 on success, or an error number.
-*/
-
-int sf_close (SNDFILE *sndfile) ;
-
-
-/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file
-** to force the writing of data to disk. If the file is opened SFM_READ
-** no action is taken.
-*/
-
-void sf_write_sync (SNDFILE *sndfile) ;
-
-
-
-/* The function sf_wchar_open() is Windows Only!
-** Open a file passing in a Windows Unicode filename. Otherwise, this is
-** the same as sf_open().
-**
-** In order for this to work, you need to do the following:
-**
-** #include <windows.h>
-** #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-** #including <sndfile.h>
-*/
-
-#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES)
-SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
-#endif
-
-
-
-
-/* Getting and setting of chunks from within a sound file.
-**
-** These functions allow the getting and setting of chunks within a sound file
-** (for those formats which allow it).
-**
-** These functions fail safely. Specifically, they will not allow you to overwrite
-** existing chunks or add extra versions of format specific reserved chunks but
-** should allow you to retrieve any and all chunks (may not be implemented for
-** all chunks or all file formats).
-*/
-
-struct SF_CHUNK_INFO
-{ char id [64] ; /* The chunk identifier. */
- unsigned id_size ; /* The size of the chunk identifier. */
- unsigned datalen ; /* The size of that data. */
- void *data ; /* Pointer to the data. */
-} ;
-
-typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ;
-
-/* Set the specified chunk info (must be done before any audio data is written
-** to the file). This will fail for format specific reserved chunks.
-** The chunk_info->data pointer must be valid until the file is closed.
-** Returns SF_ERR_NO_ERROR on success or non-zero on failure.
-*/
-int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/*
-** An opaque structure to an iterator over the all chunks of a given id
-*/
-typedef struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ;
-
-/* Get an iterator for all chunks matching chunk_info.
-** The iterator will point to the first chunk matching chunk_info.
-** Chunks are matching, if (chunk_info->id) matches the first
-** (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle.
-** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle
-** is returned.
-** The values of chunk_info->datalen and chunk_info->data are ignored.
-** If no matching chunks are found in the sndfile, NULL is returned.
-** The returned iterator will stay valid until one of the following occurs:
-** a) The sndfile is closed.
-** b) A new chunk is added using sf_set_chunk().
-** c) Another chunk iterator function is called on the same SNDFILE* handle
-** that causes the iterator to be modified.
-** The memory for the iterator belongs to the SNDFILE* handle and is freed when
-** sf_close() is called.
-*/
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/* Iterate through chunks by incrementing the iterator.
-** Increments the iterator and returns a handle to the new one.
-** After this call, iterator will no longer be valid, and you must use the
-** newly returned handle from now on.
-** The returned handle can be used to access the next chunk matching
-** the criteria as defined in sf_get_chunk_iterator().
-** If iterator points to the last chunk, this will free all resources
-** associated with iterator and return NULL.
-** The returned iterator will stay valid until sf_get_chunk_iterator_next
-** is called again, the sndfile is closed or a new chunk us added.
-*/
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ;
-
-
-/* Get the size of the specified chunk.
-** If the specified chunk exists, the size will be returned in the
-** datalen field of the SF_CHUNK_INFO struct.
-** Additionally, the id of the chunk will be copied to the id
-** field of the SF_CHUNK_INFO struct and it's id_size field will
-** be updated accordingly.
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-** id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-/* Get the specified chunk data.
-** If the specified chunk exists, up to chunk_info->datalen bytes of
-** the chunk data will be copied into the chunk_info->data buffer
-** (allocated by the caller) and the chunk_info->datalen field
-** updated to reflect the size of the data. The id and id_size
-** field will be updated according to the retrieved chunk
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-** id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif /* __cplusplus */
-
-#endif /* SNDFILE_H */
-
diff --git a/libsndfile.64/include/sndfile.hh b/libsndfile.64/include/sndfile.hh
deleted file mode 100644
index 0e1c1c20..00000000
--- a/libsndfile.64/include/sndfile.hh
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-** Copyright (C) 2005-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the author nor the names of any contributors may be used
-** to endorse or promote products derived from this software without
-** specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
-** The above modified BSD style license (GPL and LGPL compatible) applies to
-** this file. It does not apply to libsndfile itself which is released under
-** the GNU LGPL or the libsndfile test suite which is released under the GNU
-** GPL.
-** This means that this header file can be used under this modified BSD style
-** license, but the LGPL still holds for the libsndfile library itself.
-*/
-
-/*
-** sndfile.hh -- A lightweight C++ wrapper for the libsndfile API.
-**
-** All the methods are inlines and all functionality is contained in this
-** file. There is no separate implementation file.
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_HH
-#define SNDFILE_HH
-
-#include <sndfile.h>
-
-#include <string>
-#include <new> // for std::nothrow
-
-class SndfileHandle
-{ private :
- struct SNDFILE_ref
- { SNDFILE_ref (void) ;
- ~SNDFILE_ref (void) ;
-
- SNDFILE *sf ;
- SF_INFO sfinfo ;
- int ref ;
- } ;
-
- SNDFILE_ref *p ;
-
- public :
- /* Default constructor */
- SndfileHandle (void) : p (NULL) {} ;
- SndfileHandle (const char *path, int mode = SFM_READ,
- int format = 0, int channels = 0, int samplerate = 0) ;
- SndfileHandle (std::string const & path, int mode = SFM_READ,
- int format = 0, int channels = 0, int samplerate = 0) ;
- SndfileHandle (int fd, bool close_desc, int mode = SFM_READ,
- int format = 0, int channels = 0, int samplerate = 0) ;
- SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode = SFM_READ,
- int format = 0, int channels = 0, int samplerate = 0) ;
-
-#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES
- SndfileHandle (LPCWSTR wpath, int mode = SFM_READ,
- int format = 0, int channels = 0, int samplerate = 0) ;
-#endif
-
- ~SndfileHandle (void) ;
-
- SndfileHandle (const SndfileHandle &orig) ;
- SndfileHandle & operator = (const SndfileHandle &rhs) ;
-
- /* Mainly for debugging/testing. */
- int refCount (void) const { return (p == NULL) ? 0 : p->ref ; }
-
- operator bool () const { return (p != NULL) ; }
-
- bool operator == (const SndfileHandle &rhs) const { return (p == rhs.p) ; }
-
- sf_count_t frames (void) const { return p ? p->sfinfo.frames : 0 ; }
- int format (void) const { return p ? p->sfinfo.format : 0 ; }
- int channels (void) const { return p ? p->sfinfo.channels : 0 ; }
- int samplerate (void) const { return p ? p->sfinfo.samplerate : 0 ; }
-
- int error (void) const ;
- const char * strError (void) const ;
-
- int command (int cmd, void *data, int datasize) ;
-
- sf_count_t seek (sf_count_t frames, int whence) ;
-
- void writeSync (void) ;
-
- int setString (int str_type, const char* str) ;
-
- const char* getString (int str_type) const ;
-
- static int formatCheck (int format, int channels, int samplerate) ;
-
- sf_count_t read (short *ptr, sf_count_t items) ;
- sf_count_t read (int *ptr, sf_count_t items) ;
- sf_count_t read (float *ptr, sf_count_t items) ;
- sf_count_t read (double *ptr, sf_count_t items) ;
-
- sf_count_t write (const short *ptr, sf_count_t items) ;
- sf_count_t write (const int *ptr, sf_count_t items) ;
- sf_count_t write (const float *ptr, sf_count_t items) ;
- sf_count_t write (const double *ptr, sf_count_t items) ;
-
- sf_count_t readf (short *ptr, sf_count_t frames) ;
- sf_count_t readf (int *ptr, sf_count_t frames) ;
- sf_count_t readf (float *ptr, sf_count_t frames) ;
- sf_count_t readf (double *ptr, sf_count_t frames) ;
-
- sf_count_t writef (const short *ptr, sf_count_t frames) ;
- sf_count_t writef (const int *ptr, sf_count_t frames) ;
- sf_count_t writef (const float *ptr, sf_count_t frames) ;
- sf_count_t writef (const double *ptr, sf_count_t frames) ;
-
- sf_count_t readRaw (void *ptr, sf_count_t bytes) ;
- sf_count_t writeRaw (const void *ptr, sf_count_t bytes) ;
-
- /**< Raw access to the handle. SndfileHandle keeps ownership. */
- SNDFILE * rawHandle (void) ;
-
- /**< Take ownership of handle, if reference count is 1. */
- SNDFILE * takeOwnership (void) ;
-} ;
-
-/*==============================================================================
-** Nothing but implementation below.
-*/
-
-inline
-SndfileHandle::SNDFILE_ref::SNDFILE_ref (void)
-: sf (NULL), sfinfo (), ref (1)
-{}
-
-inline
-SndfileHandle::SNDFILE_ref::~SNDFILE_ref (void)
-{ if (sf != NULL) sf_close (sf) ; }
-
-inline
-SndfileHandle::SndfileHandle (const char *path, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
- p = new (std::nothrow) SNDFILE_ref () ;
-
- if (p != NULL)
- { p->ref = 1 ;
-
- p->sfinfo.frames = 0 ;
- p->sfinfo.channels = chans ;
- p->sfinfo.format = fmt ;
- p->sfinfo.samplerate = srate ;
- p->sfinfo.sections = 0 ;
- p->sfinfo.seekable = 0 ;
-
- p->sf = sf_open (path, mode, &p->sfinfo) ;
- } ;
-
- return ;
-} /* SndfileHandle const char * constructor */
-
-inline
-SndfileHandle::SndfileHandle (std::string const & path, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
- p = new (std::nothrow) SNDFILE_ref () ;
-
- if (p != NULL)
- { p->ref = 1 ;
-
- p->sfinfo.frames = 0 ;
- p->sfinfo.channels = chans ;
- p->sfinfo.format = fmt ;
- p->sfinfo.samplerate = srate ;
- p->sfinfo.sections = 0 ;
- p->sfinfo.seekable = 0 ;
-
- p->sf = sf_open (path.c_str (), mode, &p->sfinfo) ;
- } ;
-
- return ;
-} /* SndfileHandle std::string constructor */
-
-inline
-SndfileHandle::SndfileHandle (int fd, bool close_desc, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
- if (fd < 0)
- return ;
-
- p = new (std::nothrow) SNDFILE_ref () ;
-
- if (p != NULL)
- { p->ref = 1 ;
-
- p->sfinfo.frames = 0 ;
- p->sfinfo.channels = chans ;
- p->sfinfo.format = fmt ;
- p->sfinfo.samplerate = srate ;
- p->sfinfo.sections = 0 ;
- p->sfinfo.seekable = 0 ;
-
- p->sf = sf_open_fd (fd, mode, &p->sfinfo, close_desc) ;
- } ;
-
- return ;
-} /* SndfileHandle fd constructor */
-
-inline
-SndfileHandle::SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
- p = new (std::nothrow) SNDFILE_ref () ;
-
- if (p != NULL)
- { p->ref = 1 ;
-
- p->sfinfo.frames = 0 ;
- p->sfinfo.channels = chans ;
- p->sfinfo.format = fmt ;
- p->sfinfo.samplerate = srate ;
- p->sfinfo.sections = 0 ;
- p->sfinfo.seekable = 0 ;
-
- p->sf = sf_open_virtual (&sfvirtual, mode, &p->sfinfo, user_data) ;
- } ;
-
- return ;
-} /* SndfileHandle std::string constructor */
-
-inline
-SndfileHandle::~SndfileHandle (void)
-{ if (p != NULL && --p->ref == 0)
- delete p ;
-} /* SndfileHandle destructor */
-
-
-inline
-SndfileHandle::SndfileHandle (const SndfileHandle &orig)
-: p (orig.p)
-{ if (p != NULL)
- ++p->ref ;
-} /* SndfileHandle copy constructor */
-
-inline SndfileHandle &
-SndfileHandle::operator = (const SndfileHandle &rhs)
-{
- if (&rhs == this)
- return *this ;
- if (p != NULL && --p->ref == 0)
- delete p ;
-
- p = rhs.p ;
- if (p != NULL)
- ++p->ref ;
-
- return *this ;
-} /* SndfileHandle assignment operator */
-
-inline int
-SndfileHandle::error (void) const
-{ return sf_error (p->sf) ; }
-
-inline const char *
-SndfileHandle::strError (void) const
-{ return sf_strerror (p->sf) ; }
-
-inline int
-SndfileHandle::command (int cmd, void *data, int datasize)
-{ return sf_command (p->sf, cmd, data, datasize) ; }
-
-inline sf_count_t
-SndfileHandle::seek (sf_count_t frame_count, int whence)
-{ return sf_seek (p->sf, frame_count, whence) ; }
-
-inline void
-SndfileHandle::writeSync (void)
-{ sf_write_sync (p->sf) ; }
-
-inline int
-SndfileHandle::setString (int str_type, const char* str)
-{ return sf_set_string (p->sf, str_type, str) ; }
-
-inline const char*
-SndfileHandle::getString (int str_type) const
-{ return sf_get_string (p->sf, str_type) ; }
-
-inline int
-SndfileHandle::formatCheck (int fmt, int chans, int srate)
-{
- SF_INFO sfinfo ;
-
- sfinfo.frames = 0 ;
- sfinfo.channels = chans ;
- sfinfo.format = fmt ;
- sfinfo.samplerate = srate ;
- sfinfo.sections = 0 ;
- sfinfo.seekable = 0 ;
-
- return sf_format_check (&sfinfo) ;
-}
-
-/*---------------------------------------------------------------------*/
-
-inline sf_count_t
-SndfileHandle::read (short *ptr, sf_count_t items)
-{ return sf_read_short (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (int *ptr, sf_count_t items)
-{ return sf_read_int (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (float *ptr, sf_count_t items)
-{ return sf_read_float (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (double *ptr, sf_count_t items)
-{ return sf_read_double (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const short *ptr, sf_count_t items)
-{ return sf_write_short (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const int *ptr, sf_count_t items)
-{ return sf_write_int (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const float *ptr, sf_count_t items)
-{ return sf_write_float (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const double *ptr, sf_count_t items)
-{ return sf_write_double (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::readf (short *ptr, sf_count_t frame_count)
-{ return sf_readf_short (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (int *ptr, sf_count_t frame_count)
-{ return sf_readf_int (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (float *ptr, sf_count_t frame_count)
-{ return sf_readf_float (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (double *ptr, sf_count_t frame_count)
-{ return sf_readf_double (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const short *ptr, sf_count_t frame_count)
-{ return sf_writef_short (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const int *ptr, sf_count_t frame_count)
-{ return sf_writef_int (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const float *ptr, sf_count_t frame_count)
-{ return sf_writef_float (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const double *ptr, sf_count_t frame_count)
-{ return sf_writef_double (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readRaw (void *ptr, sf_count_t bytes)
-{ return sf_read_raw (p->sf, ptr, bytes) ; }
-
-inline sf_count_t
-SndfileHandle::writeRaw (const void *ptr, sf_count_t bytes)
-{ return sf_write_raw (p->sf, ptr, bytes) ; }
-
-inline SNDFILE *
-SndfileHandle::rawHandle (void)
-{ return (p ? p->sf : NULL) ; }
-
-inline SNDFILE *
-SndfileHandle::takeOwnership (void)
-{
- if (p == NULL || (p->ref != 1))
- return NULL ;
-
- SNDFILE * sf = p->sf ;
- p->sf = NULL ;
- delete p ;
- p = NULL ;
- return sf ;
-}
-
-#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES
-
-inline
-SndfileHandle::SndfileHandle (LPCWSTR wpath, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
- p = new (std::nothrow) SNDFILE_ref () ;
-
- if (p != NULL)
- { p->ref = 1 ;
-
- p->sfinfo.frames = 0 ;
- p->sfinfo.channels = chans ;
- p->sfinfo.format = fmt ;
- p->sfinfo.samplerate = srate ;
- p->sfinfo.sections = 0 ;
- p->sfinfo.seekable = 0 ;
-
- p->sf = sf_wchar_open (wpath, mode, &p->sfinfo) ;
- } ;
-
- return ;
-} /* SndfileHandle const wchar_t * constructor */
-
-#endif
-
-#endif /* SNDFILE_HH */
-
diff --git a/mpg123.64/include/fmt123.h b/mpg123.64/include/fmt123.h
deleted file mode 100644
index dcabf5e0..00000000
--- a/mpg123.64/include/fmt123.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- libmpg123: MPEG Audio Decoder library
-
- separate header just for audio format definitions not tied to
- library code
-
- copyright 1995-2020 by the mpg123 project
- free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
-*/
-
-#ifndef MPG123_ENC_H
-#define MPG123_ENC_H
-
-/** \file fmt123.h Audio format definitions. */
-
-/** \defgroup mpg123_enc mpg123 PCM sample encodings
- * These are definitions for audio formats used by libmpg123 and
- * libout123.
- *
- * @{
- */
-
-/** An enum over all sample types possibly known to mpg123.
- * The values are designed as bit flags to allow bitmasking for encoding
- * families.
- * This is also why the enum is not used as type for actual encoding variables,
- * plain integers (at least 16 bit, 15 bit being used) cover the possible
- * combinations of these flags.
- *
- * Note that (your build of) libmpg123 does not necessarily support all these.
- * Usually, you can expect the 8bit encodings and signed 16 bit.
- * Also 32bit float will be usual beginning with mpg123-1.7.0 .
- * What you should bear in mind is that (SSE, etc) optimized routines may be
- * absent for some formats. We do have SSE for 16, 32 bit and float, though.
- * 24 bit integer is done via postprocessing of 32 bit output -- just cutting
- * the last byte, no rounding, even. If you want better, do it yourself.
- *
- * All formats are in native byte order. If you need different endinaness, you
- * can simply postprocess the output buffers (libmpg123 wouldn't do anything
- * else). The macro MPG123_SAMPLESIZE() can be helpful there.
- */
-enum mpg123_enc_enum
-{
-/* 0000 0000 0000 1111 Some 8 bit integer encoding. */
- MPG123_ENC_8 = 0x00f
-/* 0000 0000 0100 0000 Some 16 bit integer encoding. */
-, MPG123_ENC_16 = 0x040
-/* 0100 0000 0000 0000 Some 24 bit integer encoding. */
-, MPG123_ENC_24 = 0x4000
-/* 0000 0001 0000 0000 Some 32 bit integer encoding. */
-, MPG123_ENC_32 = 0x100
-/* 0000 0000 1000 0000 Some signed integer encoding. */
-, MPG123_ENC_SIGNED = 0x080
-/* 0000 1110 0000 0000 Some float encoding. */
-, MPG123_ENC_FLOAT = 0xe00
-/* 0000 0000 1101 0000 signed 16 bit */
-, MPG123_ENC_SIGNED_16 = (MPG123_ENC_16|MPG123_ENC_SIGNED|0x10)
-/* 0000 0000 0110 0000 unsigned 16 bit */
-, MPG123_ENC_UNSIGNED_16 = (MPG123_ENC_16|0x20)
-/* 0000 0000 0000 0001 unsigned 8 bit */
-, MPG123_ENC_UNSIGNED_8 = 0x01
-/* 0000 0000 1000 0010 signed 8 bit */
-, MPG123_ENC_SIGNED_8 = (MPG123_ENC_SIGNED|0x02)
-/* 0000 0000 0000 0100 ulaw 8 bit */
-, MPG123_ENC_ULAW_8 = 0x04
-/* 0000 0000 0000 1000 alaw 8 bit */
-, MPG123_ENC_ALAW_8 = 0x08
-/* 0001 0001 1000 0000 signed 32 bit */
-, MPG123_ENC_SIGNED_32 = MPG123_ENC_32|MPG123_ENC_SIGNED|0x1000
-/* 0010 0001 0000 0000 unsigned 32 bit */
-, MPG123_ENC_UNSIGNED_32 = MPG123_ENC_32|0x2000
-/* 0101 0000 1000 0000 signed 24 bit */
-, MPG123_ENC_SIGNED_24 = MPG123_ENC_24|MPG123_ENC_SIGNED|0x1000
-/* 0110 0000 0000 0000 unsigned 24 bit */
-, MPG123_ENC_UNSIGNED_24 = MPG123_ENC_24|0x2000
-/* 0000 0010 0000 0000 32bit float */
-, MPG123_ENC_FLOAT_32 = 0x200
-/* 0000 0100 0000 0000 64bit float */
-, MPG123_ENC_FLOAT_64 = 0x400
-/* Any possibly known encoding from the list above. */
-, MPG123_ENC_ANY = ( MPG123_ENC_SIGNED_16 | MPG123_ENC_UNSIGNED_16
- | MPG123_ENC_UNSIGNED_8 | MPG123_ENC_SIGNED_8
- | MPG123_ENC_ULAW_8 | MPG123_ENC_ALAW_8
- | MPG123_ENC_SIGNED_32 | MPG123_ENC_UNSIGNED_32
- | MPG123_ENC_SIGNED_24 | MPG123_ENC_UNSIGNED_24
- | MPG123_ENC_FLOAT_32 | MPG123_ENC_FLOAT_64 )
-};
-
-/** Get size of one PCM sample with given encoding.
- * This is included both in libmpg123 and libout123. Both offer
- * an API function to provide the macro results from library
- * compile-time, not that of you application. This most likely
- * does not matter as I do not expect any fresh PCM sample
- * encoding to appear. But who knows? Perhaps the encoding type
- * will be abused for funny things in future, not even plain PCM.
- * And, by the way: Thomas really likes the ?: operator.
- * \param enc the encoding (mpg123_enc_enum value)
- * \return size of one sample in bytes
- */
-#define MPG123_SAMPLESIZE(enc) ( \
- (enc) < 1 \
- ? 0 \
- : ( (enc) & MPG123_ENC_8 \
- ? 1 \
- : ( (enc) & MPG123_ENC_16 \
- ? 2 \
- : ( (enc) & MPG123_ENC_24 \
- ? 3 \
- : ( ( (enc) & MPG123_ENC_32 \
- || (enc) == MPG123_ENC_FLOAT_32 ) \
- ? 4 \
- : ( (enc) == MPG123_ENC_FLOAT_64 \
- ? 8 \
- : 0 \
-) ) ) ) ) )
-
-/** Representation of zero in differing encodings.
- * This exists to define proper silence in various encodings without
- * having to link to libsyn123 to do actual conversions at runtime.
- * You have to handle big/little endian order yourself, though.
- * This takes the shortcut that any signed encoding has a zero with
- * all-zero bits. Unsigned linear encodings just have the highest bit set
- * (2^(n-1) for n bits), while the nonlinear 8-bit ones are special.
- * \param enc the encoding (mpg123_enc_enum value)
- * \param siz bytes per sample (return value of MPG123_SAMPLESIZE(enc))
- * \param off byte (octet) offset counted from LSB
- * \return unsigned byte value for the designated octet
- */
-#define MPG123_ZEROSAMPLE(enc, siz, off) ( \
- (enc) == MPG123_ENC_ULAW_8 \
- ? (off == 0 ? 0xff : 0x00) \
- : ( (enc) == MPG123_ENC_ALAW_8 \
- ? (off == 0 ? 0xd5 : 0x00) \
- : ( (((enc) & (MPG123_ENC_SIGNED|MPG123_ENC_FLOAT)) || (siz) != ((off)+1)) \
- ? 0x00 \
- : 0x80 \
- ) ) )
-
-/** Structure defining an audio format.
- * Providing the members as individual function arguments to define a certain
- * output format is easy enough. This struct makes is more comfortable to deal
- * with a list of formats.
- * Negative values for the members might be used to communicate use of default
- * values.
- */
-struct mpg123_fmt
-{
- long rate; /**< sampling rate in Hz */
- int channels; /**< channel count */
- /** encoding code, can be single value or bitwise or of members of
- * mpg123_enc_enum */
- int encoding;
-};
-
-/* @} */
-
-#endif
-
diff --git a/mpg123.64/include/mpg123.h b/mpg123.64/include/mpg123.h
deleted file mode 100644
index 7b0a8495..00000000
--- a/mpg123.64/include/mpg123.h
+++ /dev/null
@@ -1,1697 +0,0 @@
-/*
- libmpg123: MPEG Audio Decoder library (version 1.26.3)
-
- copyright 1995-2015 by the mpg123 project
- free software under the terms of the LGPL 2.1
- see COPYING and AUTHORS files in distribution or http://mpg123.org
-*/
-
-#ifndef MPG123_LIB_H
-#define MPG123_LIB_H
-
-#include <fmt123.h>
-
-/** \file mpg123.h The header file for the libmpg123 MPEG Audio decoder */
-
-/** A macro to check at compile time which set of API functions to expect.
- * This should be incremented at least each time a new symbol is added
- * to the header.
- */
-#define MPG123_API_VERSION 45
-
-#ifndef MPG123_EXPORT
-/** Defines needed for MS Visual Studio(tm) DLL builds.
- * Every public function must be prefixed with MPG123_EXPORT. When building
- * the DLL ensure to define BUILD_MPG123_DLL. This makes the function accessible
- * for clients and includes it in the import library which is created together
- * with the DLL. When consuming the DLL ensure to define LINK_MPG123_DLL which
- * imports the functions from the DLL.
- */
-#ifdef BUILD_MPG123_DLL
-/* The dll exports. */
-#define MPG123_EXPORT __declspec(dllexport)
-#else
-#ifdef LINK_MPG123_DLL
-/* The exe imports. */
-#define MPG123_EXPORT __declspec(dllimport)
-#else
-/* Nothing on normal/UNIX builds */
-#define MPG123_EXPORT
-#endif
-#endif
-#endif
-
-/* This is for Visual Studio, so this header works as distributed in the binary downloads */
-#if defined(_MSC_VER) && !defined(MPG123_DEF_SSIZE_T)
-#define MPG123_DEF_SSIZE_T
-#include <stddef.h>
-typedef ptrdiff_t ssize_t;
-#endif
-
-#ifndef MPG123_NO_CONFIGURE /* Enable use of this file without configure. */
-#include <stdlib.h>
-#include <sys/types.h>
-
-/* Simplified large file handling.
- I used to have a check here that prevents building for a library with conflicting large file setup
- (application that uses 32 bit offsets with library that uses 64 bits).
- While that was perfectly fine in an environment where there is one incarnation of the library,
- it hurt GNU/Linux and Solaris systems with multilib where the distribution fails to provide the
- correct header matching the 32 bit library (where large files need explicit support) or
- the 64 bit library (where there is no distinction).
-
- New approach: When the app defines _FILE_OFFSET_BITS, it wants non-default large file support,
- and thus functions with added suffix (mpg123_open_64).
- Any mismatch will be caught at link time because of the _FILE_OFFSET_BITS setting used when
- building libmpg123. Plus, there's dual mode large file support in mpg123 since 1.12 now.
- Link failure is not the expected outcome of any half-sane usage anymore.
-
- More complication: What about client code defining _LARGEFILE64_SOURCE? It might want direct access to the _64 functions, along with the ones without suffix. Well, that's possible now via defining MPG123_NO_LARGENAME and MPG123_LARGESUFFIX, respectively, for disabling or enforcing the suffix names.
-*/
-
-/*
- Now, the renaming of large file aware functions.
- By default, it appends underscore _FILE_OFFSET_BITS (so, mpg123_seek_64 for mpg123_seek), if _FILE_OFFSET_BITS is defined. You can force a different suffix via MPG123_LARGESUFFIX (that must include the underscore), or you can just disable the whole mess by defining MPG123_NO_LARGENAME.
-*/
-#if (!defined MPG123_NO_LARGENAME) && ((defined _FILE_OFFSET_BITS) || (defined MPG123_LARGESUFFIX))
-
-/* Need some trickery to concatenate the value(s) of the given macro(s). */
-#define MPG123_MACROCAT_REALLY(a, b) a ## b
-#define MPG123_MACROCAT(a, b) MPG123_MACROCAT_REALLY(a, b)
-#ifndef MPG123_LARGESUFFIX
-#define MPG123_LARGESUFFIX MPG123_MACROCAT(_, _FILE_OFFSET_BITS)
-#endif
-#define MPG123_LARGENAME(func) MPG123_MACROCAT(func, MPG123_LARGESUFFIX)
-
-#define mpg123_open_fixed MPG123_LARGENAME(mpg123_open_fixed)
-#define mpg123_open MPG123_LARGENAME(mpg123_open)
-#define mpg123_open_fd MPG123_LARGENAME(mpg123_open_fd)
-#define mpg123_open_handle MPG123_LARGENAME(mpg123_open_handle)
-#define mpg123_framebyframe_decode MPG123_LARGENAME(mpg123_framebyframe_decode)
-#define mpg123_decode_frame MPG123_LARGENAME(mpg123_decode_frame)
-#define mpg123_tell MPG123_LARGENAME(mpg123_tell)
-#define mpg123_tellframe MPG123_LARGENAME(mpg123_tellframe)
-#define mpg123_tell_stream MPG123_LARGENAME(mpg123_tell_stream)
-#define mpg123_seek MPG123_LARGENAME(mpg123_seek)
-#define mpg123_feedseek MPG123_LARGENAME(mpg123_feedseek)
-#define mpg123_seek_frame MPG123_LARGENAME(mpg123_seek_frame)
-#define mpg123_timeframe MPG123_LARGENAME(mpg123_timeframe)
-#define mpg123_index MPG123_LARGENAME(mpg123_index)
-#define mpg123_set_index MPG123_LARGENAME(mpg123_set_index)
-#define mpg123_position MPG123_LARGENAME(mpg123_position)
-#define mpg123_length MPG123_LARGENAME(mpg123_length)
-#define mpg123_framelength MPG123_LARGENAME(mpg123_framelength)
-#define mpg123_set_filesize MPG123_LARGENAME(mpg123_set_filesize)
-#define mpg123_replace_reader MPG123_LARGENAME(mpg123_replace_reader)
-#define mpg123_replace_reader_handle MPG123_LARGENAME(mpg123_replace_reader_handle)
-#define mpg123_framepos MPG123_LARGENAME(mpg123_framepos)
-
-#endif /* largefile hackery */
-
-#endif /* MPG123_NO_CONFIGURE */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \defgroup mpg123_init mpg123 library and handle setup
- *
- * Functions to initialise and shutdown the mpg123 library and handles.
- * The parameters of handles have workable defaults, you only have to tune them when you want to tune something;-)
- * Tip: Use a RVA setting...
- *
- * @{
- */
-
-/** Opaque structure for the libmpg123 decoder handle. */
-struct mpg123_handle_struct;
-
-/** Opaque structure for the libmpg123 decoder handle.
- * Most functions take a pointer to a mpg123_handle as first argument and operate on its data in an object-oriented manner.
- */
-typedef struct mpg123_handle_struct mpg123_handle;
-
-/** Function to initialise the mpg123 library.
- * This should be called once in a non-parallel context. It is not explicitly
- * thread-safe, but repeated/concurrent calls still _should_ be safe as static
- * tables are filled with the same values anyway.
- *
- * \return MPG123_OK if successful, otherwise an error number.
- */
-MPG123_EXPORT int mpg123_init(void);
-
-/** Superfluous Function to close down the mpg123 library.
- * This was created with the thought that there sometime will be cleanup code
- * to be run after library use. This never materialized. You can forget about
- * this function and it is only here for old programs that do call it.
- */
-MPG123_EXPORT void mpg123_exit(void);
-
-/** Create a handle with optional choice of decoder (named by a string, see mpg123_decoders() or mpg123_supported_decoders()).
- * and optional retrieval of an error code to feed to mpg123_plain_strerror().
- * Optional means: Any of or both the parameters may be NULL.
- *
- * \param decoder optional choice of decoder variant (NULL for default)
- * \param error optional address to store error codes
- * \return Non-NULL pointer to fresh handle when successful.
- */
-MPG123_EXPORT mpg123_handle *mpg123_new(const char* decoder, int *error);
-
-/** Delete handle, mh is either a valid mpg123 handle or NULL.
- * \param mh handle
- */
-MPG123_EXPORT void mpg123_delete(mpg123_handle *mh);
-
-/** Free plain memory allocated within libmpg123.
- * This is for library users that are not sure to use the same underlying
- * memory allocator as libmpg123. It is just a wrapper over free() in
- * the underlying C library.
- */
-MPG123_EXPORT void mpg123_free(void *ptr);
-
-/** Enumeration of the parameters types that it is possible to set/get. */
-enum mpg123_parms
-{
- MPG123_VERBOSE = 0, /**< set verbosity value for enabling messages to stderr, >= 0 makes sense (integer) */
- MPG123_FLAGS, /**< set all flags, p.ex val = MPG123_GAPLESS|MPG123_MONO_MIX (integer) */
- MPG123_ADD_FLAGS, /**< add some flags (integer) */
- MPG123_FORCE_RATE, /**< when value > 0, force output rate to that value (integer) */
- MPG123_DOWN_SAMPLE, /**< 0=native rate, 1=half rate, 2=quarter rate (integer) */
- MPG123_RVA, /**< one of the RVA choices above (integer) */
- MPG123_DOWNSPEED, /**< play a frame N times (integer) */
- MPG123_UPSPEED, /**< play every Nth frame (integer) */
- MPG123_START_FRAME, /**< start with this frame (skip frames before that, integer) */
- MPG123_DECODE_FRAMES, /**< decode only this number of frames (integer) */
- MPG123_ICY_INTERVAL, /**< Stream contains ICY metadata with this interval (integer).
- Make sure to set this _before_ opening a stream.*/
- MPG123_OUTSCALE, /**< the scale for output samples (amplitude - integer or float according to mpg123 output format, normally integer) */
- MPG123_TIMEOUT, /**< timeout for reading from a stream (not supported on win32, integer) */
- MPG123_REMOVE_FLAGS, /**< remove some flags (inverse of MPG123_ADD_FLAGS, integer) */
- MPG123_RESYNC_LIMIT, /**< Try resync on frame parsing for that many bytes or until end of stream (<0 ... integer). This can enlarge the limit for skipping junk on beginning, too (but not reduce it). */
- MPG123_INDEX_SIZE /**< Set the frame index size (if supported). Values <0 mean that the index is allowed to grow dynamically in these steps (in positive direction, of course) -- Use this when you really want a full index with every individual frame. */
- ,MPG123_PREFRAMES /**< Decode/ignore that many frames in advance for layer 3. This is needed to fill bit reservoir after seeking, for example (but also at least one frame in advance is needed to have all "normal" data for layer 3). Give a positive integer value, please.*/
- ,MPG123_FEEDPOOL /**< For feeder mode, keep that many buffers in a pool to avoid frequent malloc/free. The pool is allocated on mpg123_open_feed(). If you change this parameter afterwards, you can trigger growth and shrinkage during decoding. The default value could change any time. If you care about this, then set it. (integer) */
- ,MPG123_FEEDBUFFER /**< Minimal size of one internal feeder buffer, again, the default value is subject to change. (integer) */
- ,MPG123_FREEFORMAT_SIZE /**< Tell the parser a free-format frame size to
- * avoid read-ahead to get it. A value of -1 (default) means that the parser
- * will determine it. The parameter value is applied during decoder setup
- * for a freshly opened stream only.
- */
-};
-
-/** Flag bits for MPG123_FLAGS, use the usual binary or to combine. */
-enum mpg123_param_flags
-{
- MPG123_FORCE_MONO = 0x7 /**< 0111 Force some mono mode: This is a test bitmask for seeing if any mono forcing is active. */
- ,MPG123_MONO_LEFT = 0x1 /**< 0001 Force playback of left channel only. */
- ,MPG123_MONO_RIGHT = 0x2 /**< 0010 Force playback of right channel only. */
- ,MPG123_MONO_MIX = 0x4 /**< 0100 Force playback of mixed mono. */
- ,MPG123_FORCE_STEREO = 0x8 /**< 1000 Force stereo output. */
- ,MPG123_FORCE_8BIT = 0x10 /**< 00010000 Force 8bit formats. */
- ,MPG123_QUIET = 0x20 /**< 00100000 Suppress any printouts (overrules verbose). */
- ,MPG123_GAPLESS = 0x40 /**< 01000000 Enable gapless decoding (default on if libmpg123 has support). */
- ,MPG123_NO_RESYNC = 0x80 /**< 10000000 Disable resync stream after error. */
- ,MPG123_SEEKBUFFER = 0x100 /**< 000100000000 Enable small buffer on non-seekable streams to allow some peek-ahead (for better MPEG sync). */
- ,MPG123_FUZZY = 0x200 /**< 001000000000 Enable fuzzy seeks (guessing byte offsets or using approximate seek points from Xing TOC) */
- ,MPG123_FORCE_FLOAT = 0x400 /**< 010000000000 Force floating point output (32 or 64 bits depends on mpg123 internal precision). */
- ,MPG123_PLAIN_ID3TEXT = 0x800 /**< 100000000000 Do not translate ID3 text data to UTF-8. ID3 strings will contain the raw text data, with the first byte containing the ID3 encoding code. */
- ,MPG123_IGNORE_STREAMLENGTH = 0x1000 /**< 1000000000000 Ignore any stream length information contained in the stream, which can be contained in a 'TLEN' frame of an ID3v2 tag or a Xing tag */
- ,MPG123_SKIP_ID3V2 = 0x2000 /**< 10 0000 0000 0000 Do not parse ID3v2 tags, just skip them. */
- ,MPG123_IGNORE_INFOFRAME = 0x4000 /**< 100 0000 0000 0000 Do not parse the LAME/Xing info frame, treat it as normal MPEG data. */
- ,MPG123_AUTO_RESAMPLE = 0x8000 /**< 1000 0000 0000 0000 Allow automatic internal resampling of any kind (default on if supported). Especially when going lowlevel with replacing output buffer, you might want to unset this flag. Setting MPG123_DOWNSAMPLE or MPG123_FORCE_RATE will override this. */
- ,MPG123_PICTURE = 0x10000 /**< 17th bit: Enable storage of pictures from tags (ID3v2 APIC). */
- ,MPG123_NO_PEEK_END = 0x20000 /**< 18th bit: Do not seek to the end of
- * the stream in order to probe
- * the stream length and search for the id3v1 field. This also means
- * the file size is unknown unless set using mpg123_set_filesize() and
- * the stream is assumed as non-seekable unless overridden.
- */
- ,MPG123_FORCE_SEEKABLE = 0x40000 /**< 19th bit: Force the stream to be seekable. */
- ,MPG123_STORE_RAW_ID3 = 0x80000 /**< store raw ID3 data (even if skipping) */
- ,MPG123_FORCE_ENDIAN = 0x100000 /**< Enforce endianess of output samples.
- * This is not reflected in the format codes. If this flag is set along with
- * MPG123_BIG_ENDIAN, MPG123_ENC_SIGNED16 means s16be, without
- * MPG123_BIG_ENDIAN, it means s16le. Normal operation without
- * MPG123_FORCE_ENDIAN produces output in native byte order.
- */
- ,MPG123_BIG_ENDIAN = 0x200000 /**< Choose big endian instead of little. */
- ,MPG123_NO_READAHEAD = 0x400000 /**< Disable read-ahead in parser. If
- * you know you provide full frames to the feeder API, this enables
- * decoder output from the first one on, instead of having to wait for
- * the next frame to confirm that the stream is healthy. It also disables
- * free format support unless you provide a frame size using
- * MPG123_FREEFORMAT_SIZE.
- */
- ,MPG123_FLOAT_FALLBACK = 0x800000 /**< Consider floating point output encoding only after
- * trying other (possibly downsampled) rates and encodings first. This is to
- * support efficient playback where floating point output is only configured for
- * an external resampler, bypassing that resampler when the desired rate can
- * be produced directly. This is enabled by default to be closer to older versions
- * of libmpg123 which did not enable float automatically at all. If disabled,
- * float is considered after the 16 bit default and higher-bit integer encodings
- * for any rate. */
- ,MPG123_NO_FRANKENSTEIN = 0x1000000 /**< Disable support for Frankenstein streams
- * (different MPEG streams stiched together). Do not accept serious change of MPEG
- * header inside a single stream. With this flag, the audio output format cannot
- * change during decoding unless you open a new stream. This also stops decoding
- * after an announced end of stream (Info header contained a number of frames
- * and this number has been reached). This makes your MP3 files behave more like
- * ordinary media files with defined structure, rather than stream dumps with
- * some sugar. */
-};
-
-/** choices for MPG123_RVA */
-enum mpg123_param_rva
-{
- MPG123_RVA_OFF = 0 /**< RVA disabled (default). */
- ,MPG123_RVA_MIX = 1 /**< Use mix/track/radio gain. */
- ,MPG123_RVA_ALBUM = 2 /**< Use album/audiophile gain */
- ,MPG123_RVA_MAX = MPG123_RVA_ALBUM /**< The maximum RVA code, may increase in future. */
-};
-
-/** Set a specific parameter, for a specific mpg123_handle, using a parameter
- * type key chosen from the mpg123_parms enumeration, to the specified value.
- * \param mh handle
- * \param type parameter choice
- * \param value integer value
- * \param fvalue floating point value
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_param( mpg123_handle *mh
-, enum mpg123_parms type, long value, double fvalue );
-
-/** Get a specific parameter, for a specific mpg123_handle.
- * See the mpg123_parms enumeration for a list of available parameters.
- * \param mh handle
- * \param type parameter choice
- * \param value integer value return address
- * \param fvalue floating point value return address
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_getparam( mpg123_handle *mh
-, enum mpg123_parms type, long *value, double *fvalue );
-
-/** Feature set available for query with mpg123_feature. */
-enum mpg123_feature_set
-{
- MPG123_FEATURE_ABI_UTF8OPEN = 0 /**< mpg123 expects path names to be given in UTF-8 encoding instead of plain native. */
- ,MPG123_FEATURE_OUTPUT_8BIT /**< 8bit output */
- ,MPG123_FEATURE_OUTPUT_16BIT /**< 16bit output */
- ,MPG123_FEATURE_OUTPUT_32BIT /**< 32bit output */
- ,MPG123_FEATURE_INDEX /**< support for building a frame index for accurate seeking */
- ,MPG123_FEATURE_PARSE_ID3V2 /**< id3v2 parsing */
- ,MPG123_FEATURE_DECODE_LAYER1 /**< mpeg layer-1 decoder enabled */
- ,MPG123_FEATURE_DECODE_LAYER2 /**< mpeg layer-2 decoder enabled */
- ,MPG123_FEATURE_DECODE_LAYER3 /**< mpeg layer-3 decoder enabled */
- ,MPG123_FEATURE_DECODE_ACCURATE /**< accurate decoder rounding */
- ,MPG123_FEATURE_DECODE_DOWNSAMPLE /**< downsample (sample omit) */
- ,MPG123_FEATURE_DECODE_NTOM /**< flexible rate decoding */
- ,MPG123_FEATURE_PARSE_ICY /**< ICY support */
- ,MPG123_FEATURE_TIMEOUT_READ /**< Reader with timeout (network). */
- ,MPG123_FEATURE_EQUALIZER /**< tunable equalizer */
- ,MPG123_FEATURE_MOREINFO /**< more info extraction (for frame analyzer) */
- ,MPG123_FEATURE_OUTPUT_FLOAT32 /**< 32 bit float output */
- ,MPG123_FEATURE_OUTPUT_FLOAT64 /**< 64 bit float output (usually never) */
-};
-
-/** Query libmpg123 features.
- * \param key feature selection
- * \return 1 for success, 0 for unimplemented functions
- */
-MPG123_EXPORT int mpg123_feature(const enum mpg123_feature_set key);
-
-/** Query libmpg123 features with better ABI compatibility
- *
- * This is the same as mpg123_feature(), but this time not using
- * the enum as argument. Compilers don't have to agree on the size of
- * enums and hence they are not safe in public API.
- *
- * \param key feature selection
- * \return 1 for success, 0 for unimplemented functions
- */
-MPG123_EXPORT int mpg123_feature2(int key);
-
-/* @} */
-
-
-/** \defgroup mpg123_error mpg123 error handling
- *
- * Functions to get text version of the error numbers and an enumeration
- * of the error codes returned by libmpg123.
- *
- * Most functions operating on a mpg123_handle simply return MPG123_OK (0)
- * on success and MPG123_ERR (-1) on failure, setting the internal error
- * variable of the handle to the specific error code. If there was not a valid
- * (non-NULL) handle provided to a function operating on one, MPG123_BAD_HANDLE
- * may be returned if this can not be confused with a valid positive return
- * value.
- * Meaning: A function expected to return positive integers on success will
- * always indicate error or a special condition by returning a negative one.
- *
- * Decoding/seek functions may also return message codes MPG123_DONE,
- * MPG123_NEW_FORMAT and MPG123_NEED_MORE (all negative, see below on how to
- * react). Note that calls to those can be nested, so generally watch out
- * for these codes after initial handle setup.
- * Especially any function that needs information about the current stream
- * to work will try to at least parse the beginning if that did not happen
- * yet.
- *
- * On a function that is supposed to return MPG123_OK on success and
- * MPG123_ERR on failure, make sure you check for != MPG123_OK, not
- * == MPG123_ERR, as the error code could get more specific in future,
- * or there is just a special message from a decoding routine as indicated
- * above.
- *
- * @{
- */
-
-/** Enumeration of the message and error codes and returned by libmpg123 functions. */
-enum mpg123_errors
-{
- MPG123_DONE=-12, /**< Message: Track ended. Stop decoding. */
- MPG123_NEW_FORMAT=-11, /**< Message: Output format will be different on next call. Note that some libmpg123 versions between 1.4.3 and 1.8.0 insist on you calling mpg123_getformat() after getting this message code. Newer verisons behave like advertised: You have the chance to call mpg123_getformat(), but you can also just continue decoding and get your data. */
- MPG123_NEED_MORE=-10, /**< Message: For feed reader: "Feed me more!" (call mpg123_feed() or mpg123_decode() with some new input data). */
- MPG123_ERR=-1, /**< Generic Error */
- MPG123_OK=0, /**< Success */
- MPG123_BAD_OUTFORMAT, /**< Unable to set up output format! */
- MPG123_BAD_CHANNEL, /**< Invalid channel number specified. */
- MPG123_BAD_RATE, /**< Invalid sample rate specified. */
- MPG123_ERR_16TO8TABLE, /**< Unable to allocate memory for 16 to 8 converter table! */
- MPG123_BAD_PARAM, /**< Bad parameter id! */
- MPG123_BAD_BUFFER, /**< Bad buffer given -- invalid pointer or too small size. */
- MPG123_OUT_OF_MEM, /**< Out of memory -- some malloc() failed. */
- MPG123_NOT_INITIALIZED, /**< You didn't initialize the library! */
- MPG123_BAD_DECODER, /**< Invalid decoder choice. */
- MPG123_BAD_HANDLE, /**< Invalid mpg123 handle. */
- MPG123_NO_BUFFERS, /**< Unable to initialize frame buffers (out of memory?). */
- MPG123_BAD_RVA, /**< Invalid RVA mode. */
- MPG123_NO_GAPLESS, /**< This build doesn't support gapless decoding. */
- MPG123_NO_SPACE, /**< Not enough buffer space. */
- MPG123_BAD_TYPES, /**< Incompatible numeric data types. */
- MPG123_BAD_BAND, /**< Bad equalizer band. */
- MPG123_ERR_NULL, /**< Null pointer given where valid storage address needed. */
- MPG123_ERR_READER, /**< Error reading the stream. */
- MPG123_NO_SEEK_FROM_END,/**< Cannot seek from end (end is not known). */
- MPG123_BAD_WHENCE, /**< Invalid 'whence' for seek function.*/
- MPG123_NO_TIMEOUT, /**< Build does not support stream timeouts. */
- MPG123_BAD_FILE, /**< File access error. */
- MPG123_NO_SEEK, /**< Seek not supported by stream. */
- MPG123_NO_READER, /**< No stream opened. */
- MPG123_BAD_PARS, /**< Bad parameter handle. */
- MPG123_BAD_INDEX_PAR, /**< Bad parameters to mpg123_index() and mpg123_set_index() */
- MPG123_OUT_OF_SYNC, /**< Lost track in bytestream and did not try to resync. */
- MPG123_RESYNC_FAIL, /**< Resync failed to find valid MPEG data. */
- MPG123_NO_8BIT, /**< No 8bit encoding possible. */
- MPG123_BAD_ALIGN, /**< Stack aligmnent error */
- MPG123_NULL_BUFFER, /**< NULL input buffer with non-zero size... */
- MPG123_NO_RELSEEK, /**< Relative seek not possible (screwed up file offset) */
- MPG123_NULL_POINTER, /**< You gave a null pointer somewhere where you shouldn't have. */
- MPG123_BAD_KEY, /**< Bad key value given. */
- MPG123_NO_INDEX, /**< No frame index in this build. */
- MPG123_INDEX_FAIL, /**< Something with frame index went wrong. */
- MPG123_BAD_DECODER_SETUP, /**< Something prevents a proper decoder setup */
- MPG123_MISSING_FEATURE /**< This feature has not been built into libmpg123. */
- ,MPG123_BAD_VALUE /**< A bad value has been given, somewhere. */
- ,MPG123_LSEEK_FAILED /**< Low-level seek failed. */
- ,MPG123_BAD_CUSTOM_IO /**< Custom I/O not prepared. */
- ,MPG123_LFS_OVERFLOW /**< Offset value overflow during translation of large file API calls -- your client program cannot handle that large file. */
- ,MPG123_INT_OVERFLOW /**< Some integer overflow. */
-};
-
-/** Look up error strings given integer code.
- * \param errcode integer error code
- * \return string describing what that error error code means
- */
-MPG123_EXPORT const char* mpg123_plain_strerror(int errcode);
-
-/** Give string describing what error has occured in the context of handle mh.
- * When a function operating on an mpg123 handle returns MPG123_ERR, you should check for the actual reason via
- * char *errmsg = mpg123_strerror(mh)
- * This function will catch mh == NULL and return the message for MPG123_BAD_HANDLE.
- * \param mh handle
- * \return error message
- */
-MPG123_EXPORT const char* mpg123_strerror(mpg123_handle *mh);
-
-/** Return the plain errcode intead of a string.
- * \param mh handle
- * \return error code recorded in handle or MPG123_BAD_HANDLE
- */
-MPG123_EXPORT int mpg123_errcode(mpg123_handle *mh);
-
-/*@}*/
-
-
-/** \defgroup mpg123_decoder mpg123 decoder selection
- *
- * Functions to list and select the available decoders.
- * Perhaps the most prominent feature of mpg123: You have several (optimized) decoders to choose from (on x86 and PPC (MacOS) systems, that is).
- *
- * @{
- */
-
-/** Get available decoder list.
- * \return NULL-terminated array of generally available decoder names (plain 8bit ASCII)
- */
-MPG123_EXPORT const char **mpg123_decoders(void);
-
-/** Get supported decoder list.
- * \return NULL-terminated array of the decoders supported by the CPU (plain 8bit ASCII)
- */
-MPG123_EXPORT const char **mpg123_supported_decoders(void);
-
-/** Set the active decoder.
- * \param mh handle
- * \param decoder_name name of decoder
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_decoder(mpg123_handle *mh, const char* decoder_name);
-
-/** Get the currently active decoder name.
- * The active decoder engine can vary depening on output constraints,
- * mostly non-resampling, integer output is accelerated via 3DNow & Co. but for
- * other modes a fallback engine kicks in.
- * Note that this can return a decoder that is only active in the hidden and not
- * available as decoder choice from the outside.
- * \param mh handle
- * \return The decoder name or NULL on error.
- */
-MPG123_EXPORT const char* mpg123_current_decoder(mpg123_handle *mh);
-
-/*@}*/
-
-
-/** \defgroup mpg123_output mpg123 output audio format
- *
- * Functions to get and select the format of the decoded audio.
- *
- * Before you dive in, please be warned that you might get confused by this.
- * This seems to happen a lot, therefore I am trying to explain in advance.
- * If you do feel confused and just want to decode your normal MPEG audio files that
- * don't alter properties in the middle, just use mpg123_open_fixed() with a fixed encoding
- * and channel count and forget about a matrix of audio formats. If you want to get funky,
- * read ahead ...
- *
- * The mpg123 library decides what output format to use when encountering the first frame in a stream, or actually any frame that is still valid but differs from the frames before in the prompted output format. At such a deciding point, an internal table of allowed encodings, sampling rates and channel setups is consulted. According to this table, an output format is chosen and the decoding engine set up accordingly (including optimized routines for different output formats). This might seem unusual but it just follows from the non-existence of "MPEG audio files" with defined overall properties. There are streams, streams are concatenations of (semi) independent frames. We store streams on disk and call them "MPEG audio files", but that does not change their nature as the decoder is concerned (the LAME/Xing header for gapless decoding makes things interesting again).
- *
- * To get to the point: What you do with mpg123_format() and friends is to fill the internal table of allowed formats before it is used. That includes removing support for some formats or adding your forced sample rate (see MPG123_FORCE_RATE) that will be used with the crude internal resampler. Also keep in mind that the sample encoding is just a question of choice -- the MPEG frames do only indicate their native sampling rate and channel count. If you want to decode to integer or float samples, 8 or 16 bit ... that is your decision. In a "clean" world, libmpg123 would always decode to 32 bit float and let you handle any sample conversion. But there are optimized routines that work faster by directly decoding to the desired encoding / accuracy. We prefer efficiency over conceptual tidyness.
- *
- * People often start out thinking that mpg123_format() should change the actual decoding format on the fly. That is wrong. It only has effect on the next natural change of output format, when libmpg123 will consult its format table again. To make life easier, you might want to call mpg123_format_none() before any thing else and then just allow one desired encoding and a limited set of sample rates / channel choices that you actually intend to deal with. You can force libmpg123 to decode everything to 44100 KHz, stereo, 16 bit integer ... it will duplicate mono channels and even do resampling if needed (unless that feature is disabled in the build, same with some encodings). But I have to stress that the resampling of libmpg123 is very crude and doesn't even contain any kind of "proper" interpolation.
- *
- * In any case, watch out for MPG123_NEW_FORMAT as return message from decoding routines and call mpg123_getformat() to get the currently active output format.
- *
- * @{
- */
-
-/** They can be combined into one number (3) to indicate mono and stereo... */
-enum mpg123_channelcount
-{
- MPG123_MONO = 1 /**< mono */
- ,MPG123_STEREO = 2 /**< stereo */
-};
-
-/** An array of supported standard sample rates
- * These are possible native sample rates of MPEG audio files.
- * You can still force mpg123 to resample to a different one, but by
- * default you will only get audio in one of these samplings.
- * This list is in ascending order.
- * \param list Store a pointer to the sample rates array there.
- * \param number Store the number of sample rates there. */
-MPG123_EXPORT void mpg123_rates(const long **list, size_t *number);
-
-/** An array of supported audio encodings.
- * An audio encoding is one of the fully qualified members of mpg123_enc_enum (MPG123_ENC_SIGNED_16, not MPG123_SIGNED).
- * \param list Store a pointer to the encodings array there.
- * \param number Store the number of encodings there. */
-MPG123_EXPORT void mpg123_encodings(const int **list, size_t *number);
-
-/** Return the size (in bytes) of one mono sample of the named encoding.
- * \param encoding The encoding value to analyze.
- * \return positive size of encoding in bytes, 0 on invalid encoding. */
-MPG123_EXPORT int mpg123_encsize(int encoding);
-
-/** Configure a mpg123 handle to accept no output format at all,
- * use before specifying supported formats with mpg123_format
- * \param mh handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_format_none(mpg123_handle *mh);
-
-/** Configure mpg123 handle to accept all formats
- * (also any custom rate you may set) -- this is default.
- * \param mh handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_format_all(mpg123_handle *mh);
-
-/** Set the audio format support of a mpg123_handle in detail:
- * \param mh handle
- * \param rate The sample rate value (in Hertz).
- * \param channels A combination of MPG123_STEREO and MPG123_MONO.
- * \param encodings A combination of accepted encodings for rate and channels, p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support). Please note that some encodings may not be supported in the library build and thus will be ignored here.
- * \return MPG123_OK on success, MPG123_ERR if there was an error. */
-MPG123_EXPORT int mpg123_format( mpg123_handle *mh
-, long rate, int channels, int encodings );
-
-/** Set the audio format support of a mpg123_handle in detail:
- * \param mh handle
- * \param rate The sample rate value (in Hertz). Special value 0 means
- * all rates (the reason for this variant of mpg123_format()).
- * \param channels A combination of MPG123_STEREO and MPG123_MONO.
- * \param encodings A combination of accepted encodings for rate and channels,
- * p.ex MPG123_ENC_SIGNED16 | MPG123_ENC_ULAW_8 (or 0 for no support).
- * Please note that some encodings may not be supported in the library build
- * and thus will be ignored here.
- * \return MPG123_OK on success, MPG123_ERR if there was an error. */
-MPG123_EXPORT int mpg123_format2( mpg123_handle *mh
-, long rate, int channels, int encodings );
-
-/** Check to see if a specific format at a specific rate is supported
- * by mpg123_handle.
- * \param mh handle
- * \param rate sampling rate
- * \param encoding encoding
- * \return 0 for no support (that includes invalid parameters), MPG123_STEREO,
- * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */
-MPG123_EXPORT int mpg123_format_support( mpg123_handle *mh
-, long rate, int encoding );
-
-/** Get the current output format written to the addresses given.
- * If the stream is freshly loaded, this will try to parse enough
- * of it to give you the format to come. This clears the flag that
- * would otherwise make the first decoding call return
- * MPG123_NEW_FORMAT.
- * \param mh handle
- * \param rate sampling rate return address
- * \param channels channel count return address
- * \param encoding encoding return address
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_getformat( mpg123_handle *mh
-, long *rate, int *channels, int *encoding );
-
-/** Get the current output format written to the addresses given.
- * This differs from plain mpg123_getformat() in that you can choose
- * _not_ to clear the flag that would trigger the next decoding call
- * to return MPG123_NEW_FORMAT in case of a new format arriving.
- * \param mh handle
- * \param rate sampling rate return address
- * \param channels channel count return address
- * \param encoding encoding return address
- * \param clear_flag if true, clear internal format flag
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_getformat2( mpg123_handle *mh
-, long *rate, int *channels, int *encoding, int clear_flag );
-
-/*@}*/
-
-
-/** \defgroup mpg123_input mpg123 file input and decoding
- *
- * Functions for input bitstream and decoding operations.
- * Decoding/seek functions may also return message codes MPG123_DONE, MPG123_NEW_FORMAT and MPG123_NEED_MORE (please read up on these on how to react!).
- * @{
- */
-
-/** Open a simple MPEG file with fixed properties.
- *
- * This function shall simplify the common use case of a plain MPEG
- * file on disk that you want to decode, with one fixed sample
- * rate and channel count, and usually a length defined by a Lame/Info/Xing
- * tag. It will:
- *
- * - set the MPG123_NO_FRANKENSTEIN flag
- * - set up format support according to given parameters,
- * - open the file,
- * - query audio format,
- * - fix the audio format support table to ensure the format stays the same,
- * - call mpg123_scan() if there is no header frame to tell the track length.
- *
- * From that on, you can call mpg123_getformat() for querying the sample
- * rate (and channel count in case you allowed both) and mpg123_length()
- * to get a pretty safe number for the duration.
- * Only the sample rate is left open as that indeed is a fixed property of
- * MPEG files. You could set MPG123_FORCE_RATE beforehand, but that may trigger
- * low-quality resampling in the decoder, only do so if in dire need.
- * The library will convert mono files to stereo for you, and vice versa.
- * If any constraint cannot be satisified (most likely because of a non-default
- * build of libmpg123), you get MPG123_ERR returned and can query the detailed
- * cause from the handle. Only on MPG123_OK there will an open file that you
- * then close using mpg123_close(), or implicitly on mpg123_delete() or the next
- * call to open another file.
- *
- * So, for your usual CD rip collection, you could use
- *
- * mpg123_open_fixed(mh, path, MPG123_STEREO, MPG123_ENC_SIGNED_16)
- *
- * and be happy calling mpg123_getformat() to verify 44100 Hz rate, then just
- * playing away with mpg123_read(). The occasional mono file, or MP2 file,
- * will also be decoded without you really noticing. Just the speed could be
- * wrong if you do not care about sample rate at all.
- * \param mh handle
- * \param path filesystem path
- * \param channels allowed channel count, either 1 (MPG123_MONO) or
- * 2 (MPG123_STEREO), or bitwise or of them, but then you're halfway back to
- * calling mpg123_format() again;-)
- * \param encoding a definite encoding from enum mpg123_enc_enum
- * or a bitmask like for mpg123_format(), defeating the purpose somewhat
- */
-MPG123_EXPORT int mpg123_open_fixed(mpg123_handle *mh, const char *path
-, int channels, int encoding);
-
-/** Open and prepare to decode the specified file by filesystem path.
- * This does not open HTTP urls; libmpg123 contains no networking code.
- * If you want to decode internet streams, use mpg123_open_fd() or mpg123_open_feed().
- * \param mh handle
- * \param path filesystem path
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_open(mpg123_handle *mh, const char *path);
-
-/** Use an already opened file descriptor as the bitstream input
- * mpg123_close() will _not_ close the file descriptor.
- * \param mh handle
- * \param fd file descriptor
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_open_fd(mpg123_handle *mh, int fd);
-
-/** Use an opaque handle as bitstream input. This works only with the
- * replaced I/O from mpg123_replace_reader_handle()!
- * mpg123_close() will call the cleanup callback for your handle (if you gave one).
- * \param mh handle
- * \param iohandle your handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_open_handle(mpg123_handle *mh, void *iohandle);
-
-/** Open a new bitstream and prepare for direct feeding
- * This works together with mpg123_decode(); you are responsible for reading and feeding the input bitstream.
- * Also, you are expected to handle ICY metadata extraction yourself. This
- * input method does not handle MPG123_ICY_INTERVAL. It does parse ID3 frames, though.
- * \param mh handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_open_feed(mpg123_handle *mh);
-
-/** Closes the source, if libmpg123 opened it.
- * \param mh handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_close(mpg123_handle *mh);
-
-/** Read from stream and decode up to outmemsize bytes.
- *
- * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0
- * (API version 45).
- *
- * \param mh handle
- * \param outmemory address of output buffer to write to
- * \param outmemsize maximum number of bytes to write
- * \param done address to store the number of actually decoded bytes to
- * \return MPG123_OK or error/message code
- */
-MPG123_EXPORT int mpg123_read(mpg123_handle *mh
-, void *outmemory, size_t outmemsize, size_t *done );
-
-/** Feed data for a stream that has been opened with mpg123_open_feed().
- * It's give and take: You provide the bytestream, mpg123 gives you the decoded samples.
- * \param mh handle
- * \param in input buffer
- * \param size number of input bytes
- * \return MPG123_OK or error/message code.
- */
-MPG123_EXPORT int mpg123_feed( mpg123_handle *mh
-, const unsigned char *in, size_t size );
-
-/** Decode MPEG Audio from inmemory to outmemory.
- * This is very close to a drop-in replacement for old mpglib.
- * When you give zero-sized output buffer the input will be parsed until
- * decoded data is available. This enables you to get MPG123_NEW_FORMAT (and query it)
- * without taking decoded data.
- * Think of this function being the union of mpg123_read() and mpg123_feed() (which it actually is, sort of;-).
- * You can actually always decide if you want those specialized functions in separate steps or one call this one here.
- *
- * Note: The type of outmemory changed to a void pointer in mpg123 1.26.0
- * (API version 45).
- *
- * \param mh handle
- * \param inmemory input buffer
- * \param inmemsize number of input bytes
- * \param outmemory output buffer
- * \param outmemsize maximum number of output bytes
- * \param done address to store the number of actually decoded bytes to
- * \return error/message code (watch out especially for MPG123_NEED_MORE)
- */
-MPG123_EXPORT int mpg123_decode( mpg123_handle *mh
-, const unsigned char *inmemory, size_t inmemsize
-, void *outmemory, size_t outmemsize, size_t *done );
-
-/** Decode next MPEG frame to internal buffer
- * or read a frame and return after setting a new format.
- * \param mh handle
- * \param num current frame offset gets stored there
- * \param audio This pointer is set to the internal buffer to read the decoded audio from.
- * \param bytes number of output bytes ready in the buffer
- * \return MPG123_OK or error/message code
- */
-MPG123_EXPORT int mpg123_decode_frame( mpg123_handle *mh
-, off_t *num, unsigned char **audio, size_t *bytes );
-
-/** Decode current MPEG frame to internal buffer.
- * Warning: This is experimental API that might change in future releases!
- * Please watch mpg123 development closely when using it.
- * \param mh handle
- * \param num last frame offset gets stored there
- * \param audio this pointer is set to the internal buffer to read the decoded audio from.
- * \param bytes number of output bytes ready in the buffer
- * \return MPG123_OK or error/message code
- */
-MPG123_EXPORT int mpg123_framebyframe_decode( mpg123_handle *mh
-, off_t *num, unsigned char **audio, size_t *bytes );
-
-/** Find, read and parse the next mp3 frame
- * Warning: This is experimental API that might change in future releases!
- * Please watch mpg123 development closely when using it.
- * \param mh handle
- * \return MPG123_OK or error/message code
- */
-MPG123_EXPORT int mpg123_framebyframe_next(mpg123_handle *mh);
-
-/** Get access to the raw input data for the last parsed frame.
- * This gives you a direct look (and write access) to the frame body data.
- * Together with the raw header, you can reconstruct the whole raw MPEG stream without junk and meta data, or play games by actually modifying the frame body data before decoding this frame (mpg123_framebyframe_decode()).
- * A more sane use would be to use this for CRC checking (see mpg123_info() and MPG123_CRC), the first two bytes of the body make up the CRC16 checksum, if present.
- * You can provide NULL for a parameter pointer when you are not interested in the value.
- *
- * \param mh handle
- * \param header the 4-byte MPEG header
- * \param bodydata pointer to the frame body stored in the handle (without the header)
- * \param bodybytes size of frame body in bytes (without the header)
- * \return MPG123_OK if there was a yet un-decoded frame to get the
- * data from, MPG123_BAD_HANDLE or MPG123_ERR otherwise (without further
- * explanation, the error state of the mpg123_handle is not modified by
- * this function).
- */
-MPG123_EXPORT int mpg123_framedata( mpg123_handle *mh
-, unsigned long *header, unsigned char **bodydata, size_t *bodybytes );
-
-/** Get the input position (byte offset in stream) of the last parsed frame.
- * This can be used for external seek index building, for example.
- * It just returns the internally stored offset, regardless of validity --
- * you ensure that a valid frame has been parsed before!
- * \param mh handle
- * \return byte offset in stream
- */
-MPG123_EXPORT off_t mpg123_framepos(mpg123_handle *mh);
-
-/*@}*/
-
-
-/** \defgroup mpg123_seek mpg123 position and seeking
- *
- * Functions querying and manipulating position in the decoded audio bitstream.
- * The position is measured in decoded audio samples, or MPEG frame offset for the specific functions.
- * If gapless code is in effect, the positions are adjusted to compensate the skipped padding/delay - meaning, you should not care about that at all and just use the position defined for the samples you get out of the decoder;-)
- * The general usage is modelled after stdlib's ftell() and fseek().
- * Especially, the whence parameter for the seek functions has the same meaning as the one for fseek() and needs the same constants from stdlib.h:
- * - SEEK_SET: set position to (or near to) specified offset
- * - SEEK_CUR: change position by offset from now
- * - SEEK_END: set position to offset from end
- *
- * Note that sample-accurate seek only works when gapless support has been enabled at compile time; seek is frame-accurate otherwise.
- * Also, really sample-accurate seeking (meaning that you get the identical sample value after seeking compared to plain decoding up to the position) is only guaranteed when you do not mess with the position code by using MPG123_UPSPEED, MPG123_DOWNSPEED or MPG123_START_FRAME. The first two mainly should cause trouble with NtoM resampling, but in any case with these options in effect, you have to keep in mind that the sample offset is not the same as counting the samples you get from decoding since mpg123 counts the skipped samples, too (or the samples played twice only once)!
- * Short: When you care about the sample position, don't mess with those parameters;-)
- * Also, seeking is not guaranteed to work for all streams (underlying stream may not support it).
- * And yet another caveat: If the stream is concatenated out of differing pieces (Frankenstein stream), seeking may suffer, too.
- *
- * @{
- */
-
-/** Returns the current position in samples.
- * On the next successful read, you'd get that sample.
- * \param mh handle
- * \return sample offset or MPG123_ERR (null handle)
- */
-MPG123_EXPORT off_t mpg123_tell(mpg123_handle *mh);
-
-/** Returns the frame number that the next read will give you data from.
- * \param mh handle
- * \return frame offset or MPG123_ERR (null handle)
- */
-MPG123_EXPORT off_t mpg123_tellframe(mpg123_handle *mh);
-
-/** Returns the current byte offset in the input stream.
- * \param mh handle
- * \return byte offset or MPG123_ERR (null handle)
- */
-MPG123_EXPORT off_t mpg123_tell_stream(mpg123_handle *mh);
-
-/** Seek to a desired sample offset.
- * Usage is modelled afer the standard lseek().
- * \param mh handle
- * \param sampleoff offset in PCM samples
- * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END
- * \return The resulting offset >= 0 or error/message code
- */
-MPG123_EXPORT off_t mpg123_seek( mpg123_handle *mh
-, off_t sampleoff, int whence );
-
-/** Seek to a desired sample offset in data feeding mode.
- * This just prepares things to be right only if you ensure that the next chunk of input data will be from input_offset byte position.
- * \param mh handle
- * \param sampleoff offset in PCM samples
- * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END
- * \param input_offset The position it expects to be at the
- * next time data is fed to mpg123_decode().
- * \return The resulting offset >= 0 or error/message code */
-MPG123_EXPORT off_t mpg123_feedseek( mpg123_handle *mh
-, off_t sampleoff, int whence, off_t *input_offset );
-
-/** Seek to a desired MPEG frame offset.
- * Usage is modelled afer the standard lseek().
- * \param mh handle
- * \param frameoff offset in MPEG frames
- * \param whence one of SEEK_SET, SEEK_CUR or SEEK_END
- * \return The resulting offset >= 0 or error/message code */
-MPG123_EXPORT off_t mpg123_seek_frame( mpg123_handle *mh
-, off_t frameoff, int whence );
-
-/** Return a MPEG frame offset corresponding to an offset in seconds.
- * This assumes that the samples per frame do not change in the file/stream, which is a good assumption for any sane file/stream only.
- * \return frame offset >= 0 or error/message code */
-MPG123_EXPORT off_t mpg123_timeframe(mpg123_handle *mh, double sec);
-
-/** Give access to the frame index table that is managed for seeking.
- * You are asked not to modify the values... Use mpg123_set_index to set the
- * seek index
- * \param mh handle
- * \param offsets pointer to the index array
- * \param step one index byte offset advances this many MPEG frames
- * \param fill number of recorded index offsets; size of the array
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_index( mpg123_handle *mh
-, off_t **offsets, off_t *step, size_t *fill );
-
-/** Set the frame index table
- * Setting offsets to NULL and fill > 0 will allocate fill entries. Setting offsets
- * to NULL and fill to 0 will clear the index and free the allocated memory used by the index.
- * \param mh handle
- * \param offsets pointer to the index array
- * \param step one index byte offset advances this many MPEG frames
- * \param fill number of recorded index offsets; size of the array
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_set_index( mpg123_handle *mh
-, off_t *offsets, off_t step, size_t fill );
-
-/** An old crutch to keep old mpg123 binaries happy.
- * WARNING: This function is there only to avoid runtime linking errors with
- * standalone mpg123 before version 1.23.0 (if you strangely update the
- * library but not the end-user program) and actually is broken
- * for various cases (p.ex. 24 bit output). Do never use. It might eventually
- * be purged from the library.
- */
-MPG123_EXPORT int mpg123_position( mpg123_handle *mh, off_t frame_offset, off_t buffered_bytes, off_t *current_frame, off_t *frames_left, double *current_seconds, double *seconds_left);
-
-/*@}*/
-
-
-/** \defgroup mpg123_voleq mpg123 volume and equalizer
- *
- * @{
- */
-
-/** another channel enumeration, for left/right choice */
-enum mpg123_channels
-{
- MPG123_LEFT=0x1 /**< The Left Channel. */
- ,MPG123_RIGHT=0x2 /**< The Right Channel. */
- ,MPG123_LR=0x3 /**< Both left and right channel; same as MPG123_LEFT|MPG123_RIGHT */
-};
-
-/** Set the 32 Band Audio Equalizer settings.
- * \param mh handle
- * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for both.
- * \param band The equaliser band to change (from 0 to 31)
- * \param val The (linear) adjustment factor.
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_eq( mpg123_handle *mh
-, enum mpg123_channels channel, int band, double val );
-
-/** Get the 32 Band Audio Equalizer settings.
- * \param mh handle
- * \param channel Can be MPG123_LEFT, MPG123_RIGHT or MPG123_LEFT|MPG123_RIGHT for (arithmetic mean of) both.
- * \param band The equaliser band to change (from 0 to 31)
- * \return The (linear) adjustment factor (zero for pad parameters) */
-MPG123_EXPORT double mpg123_geteq(mpg123_handle *mh
- , enum mpg123_channels channel, int band);
-
-/** Reset the 32 Band Audio Equalizer settings to flat
- * \param mh handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_reset_eq(mpg123_handle *mh);
-
-/** Set the absolute output volume including the RVA setting,
- * vol<0 just applies (a possibly changed) RVA setting.
- * \param mh handle
- * \param vol volume value (linear factor)
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_volume(mpg123_handle *mh, double vol);
-
-/** Adjust output volume including the RVA setting by chosen amount
- * \param mh handle
- * \param change volume value (linear factor increment)
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_volume_change(mpg123_handle *mh, double change);
-
-/** Return current volume setting, the actual value due to RVA, and the RVA
- * adjustment itself. It's all as double float value to abstract the sample
- * format. The volume values are linear factors / amplitudes (not percent)
- * and the RVA value is in decibels.
- * \param mh handle
- * \param base return address for base volume (linear factor)
- * \param really return address for actual volume (linear factor)
- * \param rva_db return address for RVA value (decibels)
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_getvolume(mpg123_handle *mh, double *base, double *really, double *rva_db);
-
-/* TODO: Set some preamp in addition / to replace internal RVA handling? */
-
-/*@}*/
-
-
-/** \defgroup mpg123_status mpg123 status and information
- *
- * @{
- */
-
-/** Enumeration of the mode types of Variable Bitrate */
-enum mpg123_vbr {
- MPG123_CBR=0, /**< Constant Bitrate Mode (default) */
- MPG123_VBR, /**< Variable Bitrate Mode */
- MPG123_ABR /**< Average Bitrate Mode */
-};
-
-/** Enumeration of the MPEG Versions */
-enum mpg123_version {
- MPG123_1_0=0, /**< MPEG Version 1.0 */
- MPG123_2_0, /**< MPEG Version 2.0 */
- MPG123_2_5 /**< MPEG Version 2.5 */
-};
-
-
-/** Enumeration of the MPEG Audio mode.
- * Only the mono mode has 1 channel, the others have 2 channels. */
-enum mpg123_mode {
- MPG123_M_STEREO=0, /**< Standard Stereo. */
- MPG123_M_JOINT, /**< Joint Stereo. */
- MPG123_M_DUAL, /**< Dual Channel. */
- MPG123_M_MONO /**< Single Channel. */
-};
-
-
-/** Enumeration of the MPEG Audio flag bits */
-enum mpg123_flags {
- MPG123_CRC=0x1, /**< The bitstream is error protected using 16-bit CRC. */
- MPG123_COPYRIGHT=0x2, /**< The bitstream is copyrighted. */
- MPG123_PRIVATE=0x4, /**< The private bit has been set. */
- MPG123_ORIGINAL=0x8 /**< The bitstream is an original, not a copy. */
-};
-
-/** Data structure for storing information about a frame of MPEG Audio */
-struct mpg123_frameinfo
-{
- enum mpg123_version version; /**< The MPEG version (1.0/2.0/2.5). */
- int layer; /**< The MPEG Audio Layer (MP1/MP2/MP3). */
- long rate; /**< The sampling rate in Hz. */
- enum mpg123_mode mode; /**< The audio mode (Mono, Stereo, Joint-stero, Dual Channel). */
- int mode_ext; /**< The mode extension bit flag. */
- int framesize; /**< The size of the frame (in bytes, including header). */
- enum mpg123_flags flags; /**< MPEG Audio flag bits. Just now I realize that it should be declared as int, not enum. It's a bitwise combination of the enum values. */
- int emphasis; /**< The emphasis type. */
- int bitrate; /**< Bitrate of the frame (kbps). */
- int abr_rate; /**< The target average bitrate. */
- enum mpg123_vbr vbr; /**< The VBR mode. */
-};
-
-/** Data structure for even more detailed information out of the decoder,
- * for MPEG layer III only.
- * This was added to support the frame analyzer by the Lame project and
- * just follows what was used there before. You know what the fields mean
- * if you want use this structure. */
-struct mpg123_moreinfo
-{
- double xr[2][2][576];
- double sfb[2][2][22]; /* [2][2][SBMAX_l] */
- double sfb_s[2][2][3*13]; /* [2][2][3*SBMAX_s] */
- int qss[2][2];
- int big_values[2][2];
- int sub_gain[2][2][3];
- int scalefac_scale[2][2];
- int preflag[2][2];
- int blocktype[2][2];
- int mixed[2][2];
- int mainbits[2][2];
- int sfbits[2][2];
- int scfsi[2];
- int maindata;
- int padding;
-};
-
-/** Get frame information about the MPEG audio bitstream and store it in a mpg123_frameinfo structure.
- * \param mh handle
- * \param mi address of existing frameinfo structure to write to
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_info(mpg123_handle *mh, struct mpg123_frameinfo *mi);
-
-/** Trigger collection of additional decoder information while decoding.
- * \param mh handle
- * \param mi pointer to data storage (NULL to disable collection)
- * \return MPG123_OK if the collection was enabled/disabled as desired, MPG123_ERR
- * otherwise (e.g. if the feature is disabled)
- */
-MPG123_EXPORT int mpg123_set_moreinfo( mpg123_handle *mh
-, struct mpg123_moreinfo *mi );
-
-/** Get the safe output buffer size for all cases
- * (when you want to replace the internal buffer)
- * \return safe buffer size
- */
-MPG123_EXPORT size_t mpg123_safe_buffer(void);
-
-/** Make a full parsing scan of each frame in the file. ID3 tags are found. An
- * accurate length value is stored. Seek index will be filled. A seek back to
- * current position is performed. At all, this function refuses work when
- * stream is not seekable.
- * \param mh handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_scan(mpg123_handle *mh);
-
-/** Return, if possible, the full (expected) length of current track in
- * MPEG frames.
- * \param mh handle
- * \return length >= 0 or MPG123_ERR if there is no length guess possible.
- */
-MPG123_EXPORT off_t mpg123_framelength(mpg123_handle *mh);
-
-/** Return, if possible, the full (expected) length of current
- * track in samples (PCM frames).
- *
- * This relies either on an Info frame at the beginning or a previous
- * call to mpg123_scan() to get the real number of MPEG frames in a
- * file. It will guess based on file size if neither Info frame nor
- * scan data are present. In any case, there is no guarantee that the
- * decoder will not give you more data, for example in case the open
- * file gets appended to during decoding.
- * \param mh handle
- * \return length >= 0 or MPG123_ERR if there is no length guess possible.
- */
-MPG123_EXPORT off_t mpg123_length(mpg123_handle *mh);
-
-/** Override the value for file size in bytes.
- * Useful for getting sensible track length values in feed mode or for HTTP streams.
- * \param mh handle
- * \param size file size in bytes
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_set_filesize(mpg123_handle *mh, off_t size);
-
-/** Get MPEG frame duration in seconds.
- * \param mh handle
- * \return frame duration in seconds, <0 on error
- */
-MPG123_EXPORT double mpg123_tpf(mpg123_handle *mh);
-
-/** Get MPEG frame duration in samples.
- * \param mh handle
- * \return samples per frame for the most recently parsed frame; <0 on errors
- */
-MPG123_EXPORT int mpg123_spf(mpg123_handle *mh);
-
-/** Get and reset the clip count.
- * \param mh handle
- * \return count of clipped samples
- */
-MPG123_EXPORT long mpg123_clip(mpg123_handle *mh);
-
-
-/** The key values for state information from mpg123_getstate(). */
-enum mpg123_state
-{
- MPG123_ACCURATE = 1 /**< Query if positons are currently accurate (integer value, 0 if false, 1 if true). */
- ,MPG123_BUFFERFILL /**< Get fill of internal (feed) input buffer as integer byte count returned as long and as double. An error is returned on integer overflow while converting to (signed) long, but the returned floating point value shold still be fine. */
- ,MPG123_FRANKENSTEIN /**< Stream consists of carelessly stitched together files. Seeking may yield unexpected results (also with MPG123_ACCURATE, it may be confused). */
- ,MPG123_FRESH_DECODER /**< Decoder structure has been updated, possibly indicating changed stream (integer value, 0 if false, 1 if true). Flag is cleared after retrieval. */
- ,MPG123_ENC_DELAY /** Encoder delay read from Info tag (layer III, -1 if unknown). */
- ,MPG123_ENC_PADDING /** Encoder padding read from Info tag (layer III, -1 if unknown). */
- ,MPG123_DEC_DELAY /** Decoder delay (for layer III only, -1 otherwise). */
-};
-
-/** Get various current decoder/stream state information.
- * \param mh handle
- * \param key the key to identify the information to give.
- * \param val the address to return (long) integer values to
- * \param fval the address to return floating point values to
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_getstate( mpg123_handle *mh
-, enum mpg123_state key, long *val, double *fval );
-
-/*@}*/
-
-
-/** \defgroup mpg123_metadata mpg123 metadata handling
- *
- * Functions to retrieve the metadata from MPEG Audio files and streams.
- * Also includes string handling functions.
- *
- * @{
- */
-
-/** Data structure for storing strings in a safer way than a standard C-String.
- * Can also hold a number of null-terminated strings. */
-typedef struct
-{
- char* p; /**< pointer to the string data */
- size_t size; /**< raw number of bytes allocated */
- size_t fill; /**< number of used bytes (including closing zero byte) */
-} mpg123_string;
-
-/** Allocate and intialize a new string.
- * \param val optional initial string value (can be NULL)
- */
-MPG123_EXPORT mpg123_string* mpg123_new_string(const char* val);
-
-/** Free memory of contents and the string structure itself.
- * \param sb string handle
- */
-MPG123_EXPORT void mpg123_delete_string(mpg123_string* sb);
-
-/** Initialize an existing mpg123_string structure to {NULL, 0, 0}.
- * If you hand in a NULL pointer here, your program should crash. The other
- * string functions are more forgiving, but this one here is too basic.
- * \param sb string handle (address of existing structure on your side)
- */
-MPG123_EXPORT void mpg123_init_string(mpg123_string* sb);
-
-/** Free-up memory of the contents of an mpg123_string (not the struct itself).
- * This also calls mpg123_init_string() and hence is safe to be called
- * repeatedly.
- * \param sb string handle
- */
-MPG123_EXPORT void mpg123_free_string(mpg123_string* sb);
-
-/** Change the size of a mpg123_string
- * \param sb string handle
- * \param news new size in bytes
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_resize_string(mpg123_string* sb, size_t news);
-
-/** Increase size of a mpg123_string if necessary (it may stay larger).
- * Note that the functions for adding and setting in current libmpg123
- * use this instead of mpg123_resize_string().
- * That way, you can preallocate memory and safely work afterwards with
- * pieces.
- * \param sb string handle
- * \param news new minimum size
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_grow_string(mpg123_string* sb, size_t news);
-
-/** Copy the contents of one mpg123_string string to another.
- * Yes the order of arguments is reversed compated to memcpy().
- * \param from string handle
- * \param to string handle
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_copy_string(mpg123_string* from, mpg123_string* to);
-
-/** Move the contents of one mpg123_string string to another.
- * This frees any memory associated with the target and moves over the
- * pointers from the source, leaving the source without content after
- * that. The only possible error is that you hand in NULL pointers.
- * If you handed in a valid source, its contents will be gone, even if
- * there was no target to move to. If you hand in a valid target, its
- * original contents will also always be gone, to be replaced with the
- * source's contents if there was some.
- * \param from source string handle
- * \param to target string handle
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_move_string(mpg123_string* from, mpg123_string* to);
-
-/** Append a C-String to an mpg123_string
- * \param sb string handle
- * \param stuff to append
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_add_string(mpg123_string* sb, const char* stuff);
-
-/** Append a C-substring to an mpg123 string
- * \param sb string handle
- * \param stuff content to copy
- * \param from offset to copy from
- * \param count number of characters to copy (a null-byte is always appended)
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_add_substring( mpg123_string *sb
-, const char *stuff, size_t from, size_t count );
-
-/** Set the content of a mpg123_string to a C-string
- * \param sb string handle
- * \param stuff content to copy
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_set_string(mpg123_string* sb, const char* stuff);
-
-/** Set the content of a mpg123_string to a C-substring
- * \param sb string handle
- * \param stuff the future content
- * \param from offset to copy from
- * \param count number of characters to copy (a null-byte is always appended)
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_set_substring( mpg123_string *sb
-, const char *stuff, size_t from, size_t count );
-
-/** Count characters in a mpg123 string (non-null bytes or Unicode points).
- * This function is of limited use, as it does just count code points
- * encoded in an UTF-8 string, only loosely related to the count of visible
- * characters. Get your full Unicode handling support elsewhere.
- * \param sb string handle
- * \param utf8 a flag to tell if the string is in utf8 encoding
- * \return character count
-*/
-MPG123_EXPORT size_t mpg123_strlen(mpg123_string *sb, int utf8);
-
-/** Remove trailing \\r and \\n, if present.
- * \param sb string handle
- * \return 0 on error, 1 on success
- */
-MPG123_EXPORT int mpg123_chomp_string(mpg123_string *sb);
-
-/** Determine if two strings contain the same data.
- * This only returns 1 if both given handles are non-NULL and
- * if they are filled with the same bytes.
- * \param a first string handle
- * \param b second string handle
- * \return 0 for different strings, 1 for identical
- */
-MPG123_EXPORT int mpg123_same_string(mpg123_string *a, mpg123_string *b);
-
-/** The mpg123 text encodings. This contains encodings we encounter in ID3 tags or ICY meta info. */
-enum mpg123_text_encoding
-{
- mpg123_text_unknown = 0 /**< Unkown encoding... mpg123_id3_encoding can return that on invalid codes. */
- ,mpg123_text_utf8 = 1 /**< UTF-8 */
- ,mpg123_text_latin1 = 2 /**< ISO-8859-1. Note that sometimes latin1 in ID3 is abused for totally different encodings. */
- ,mpg123_text_icy = 3 /**< ICY metadata encoding, usually CP-1252 but we take it as UTF-8 if it qualifies as such. */
- ,mpg123_text_cp1252 = 4 /**< Really CP-1252 without any guessing. */
- ,mpg123_text_utf16 = 5 /**< Some UTF-16 encoding. The last of a set of leading BOMs (byte order mark) rules.
- * When there is no BOM, big endian ordering is used. Note that UCS-2 qualifies as UTF-8 when
- * you don't mess with the reserved code points. If you want to decode little endian data
- * without BOM you need to prepend 0xff 0xfe yourself. */
- ,mpg123_text_utf16bom = 6 /**< Just an alias for UTF-16, ID3v2 has this as distinct code. */
- ,mpg123_text_utf16be = 7 /**< Another alias for UTF16 from ID3v2. Note, that, because of the mess that is reality,
- * BOMs are used if encountered. There really is not much distinction between the UTF16 types for mpg123
- * One exception: Since this is seen in ID3v2 tags, leading null bytes are skipped for all other UTF16
- * types (we expect a BOM before real data there), not so for utf16be!*/
- ,mpg123_text_max = 7 /**< Placeholder for the maximum encoding value. */
-};
-
-/** The encoding byte values from ID3v2. */
-enum mpg123_id3_enc
-{
- mpg123_id3_latin1 = 0 /**< Note: This sometimes can mean anything in practice... */
- ,mpg123_id3_utf16bom = 1 /**< UTF16, UCS-2 ... it's all the same for practical purposes. */
- ,mpg123_id3_utf16be = 2 /**< Big-endian UTF-16, BOM see note for mpg123_text_utf16be. */
- ,mpg123_id3_utf8 = 3 /**< Our lovely overly ASCII-compatible 8 byte encoding for the world. */
- ,mpg123_id3_enc_max = 3 /**< Placeholder to check valid range of encoding byte. */
-};
-
-/** Convert ID3 encoding byte to mpg123 encoding index.
- * \param id3_enc_byte the ID3 encoding code
- * \return the mpg123 encoding index
- */
-
-MPG123_EXPORT enum mpg123_text_encoding mpg123_enc_from_id3(unsigned char id3_enc_byte);
-
-/** Store text data in string, after converting to UTF-8 from indicated encoding
- * A prominent error can be that you provided an unknown encoding value, or this build of libmpg123 lacks support for certain encodings (ID3 or ICY stuff missing).
- * Also, you might want to take a bit of care with preparing the data; for example, strip leading zeroes (I have seen that).
- * \param sb target string
- * \param enc mpg123 text encoding value
- * \param source source buffer with plain unsigned bytes (you might need to cast from signed char)
- * \param source_size number of bytes in the source buffer
- * \return 0 on error, 1 on success (on error, mpg123_free_string is called on sb)
- */
-MPG123_EXPORT int mpg123_store_utf8(mpg123_string *sb, enum mpg123_text_encoding enc, const unsigned char *source, size_t source_size);
-
-/** Sub data structure for ID3v2, for storing various text fields (including comments).
- * This is for ID3v2 COMM, TXXX and all the other text fields.
- * Only COMM, TXXX and USLT may have a description, only COMM and USLT
- * have a language.
- * You should consult the ID3v2 specification for the use of the various text fields
- * ("frames" in ID3v2 documentation, I use "fields" here to separate from MPEG frames). */
-typedef struct
-{
- char lang[3]; /**< Three-letter language code (not terminated). */
- char id[4]; /**< The ID3v2 text field id, like TALB, TPE2, ... (4 characters, no string termination). */
- mpg123_string description; /**< Empty for the generic comment... */
- mpg123_string text; /**< ... */
-} mpg123_text;
-
-/** The picture type values from ID3v2. */
-enum mpg123_id3_pic_type
-{
- mpg123_id3_pic_other = 0 /**< see ID3v2 docs */
- ,mpg123_id3_pic_icon = 1 /**< see ID3v2 docs */
- ,mpg123_id3_pic_other_icon = 2 /**< see ID3v2 docs */
- ,mpg123_id3_pic_front_cover = 3 /**< see ID3v2 docs */
- ,mpg123_id3_pic_back_cover = 4 /**< see ID3v2 docs */
- ,mpg123_id3_pic_leaflet = 5 /**< see ID3v2 docs */
- ,mpg123_id3_pic_media = 6 /**< see ID3v2 docs */
- ,mpg123_id3_pic_lead = 7 /**< see ID3v2 docs */
- ,mpg123_id3_pic_artist = 8 /**< see ID3v2 docs */
- ,mpg123_id3_pic_conductor = 9 /**< see ID3v2 docs */
- ,mpg123_id3_pic_orchestra = 10 /**< see ID3v2 docs */
- ,mpg123_id3_pic_composer = 11 /**< see ID3v2 docs */
- ,mpg123_id3_pic_lyricist = 12 /**< see ID3v2 docs */
- ,mpg123_id3_pic_location = 13 /**< see ID3v2 docs */
- ,mpg123_id3_pic_recording = 14 /**< see ID3v2 docs */
- ,mpg123_id3_pic_performance = 15 /**< see ID3v2 docs */
- ,mpg123_id3_pic_video = 16 /**< see ID3v2 docs */
- ,mpg123_id3_pic_fish = 17 /**< see ID3v2 docs */
- ,mpg123_id3_pic_illustration = 18 /**< see ID3v2 docs */
- ,mpg123_id3_pic_artist_logo = 19 /**< see ID3v2 docs */
- ,mpg123_id3_pic_publisher_logo = 20 /**< see ID3v2 docs */
-};
-
-/** Sub data structure for ID3v2, for storing picture data including comment.
- * This is for the ID3v2 APIC field. You should consult the ID3v2 specification
- * for the use of the APIC field ("frames" in ID3v2 documentation, I use "fields"
- * here to separate from MPEG frames). */
-typedef struct
-{
- char type; /**< mpg123_id3_pic_type value */
- mpg123_string description; /**< description string */
- mpg123_string mime_type; /**< MIME type */
- size_t size; /**< size in bytes */
- unsigned char* data; /**< pointer to the image data */
-} mpg123_picture;
-
-/** Data structure for storing IDV3v2 tags.
- * This structure is not a direct binary mapping with the file contents.
- * The ID3v2 text frames are allowed to contain multiple strings.
- * So check for null bytes until you reach the mpg123_string fill.
- * All text is encoded in UTF-8. */
-typedef struct
-{
- unsigned char version; /**< 3 or 4 for ID3v2.3 or ID3v2.4. */
- mpg123_string *title; /**< Title string (pointer into text_list). */
- mpg123_string *artist; /**< Artist string (pointer into text_list). */
- mpg123_string *album; /**< Album string (pointer into text_list). */
- mpg123_string *year; /**< The year as a string (pointer into text_list). */
- mpg123_string *genre; /**< Genre String (pointer into text_list). The genre string(s) may very well need postprocessing, esp. for ID3v2.3. */
- mpg123_string *comment; /**< Pointer to last encountered comment text with empty description. */
- /* Encountered ID3v2 fields are appended to these lists.
- There can be multiple occurences, the pointers above always point to the last encountered data. */
- mpg123_text *comment_list; /**< Array of comments. */
- size_t comments; /**< Number of comments. */
- mpg123_text *text; /**< Array of ID3v2 text fields (including USLT) */
- size_t texts; /**< Numer of text fields. */
- mpg123_text *extra; /**< The array of extra (TXXX) fields. */
- size_t extras; /**< Number of extra text (TXXX) fields. */
- mpg123_picture *picture; /**< Array of ID3v2 pictures fields (APIC).
- Only populated if MPG123_PICTURE flag is set! */
- size_t pictures; /**< Number of picture (APIC) fields. */
-} mpg123_id3v2;
-
-/** Data structure for ID3v1 tags (the last 128 bytes of a file).
- * Don't take anything for granted (like string termination)!
- * Also note the change ID3v1.1 did: comment[28] = 0; comment[29] = track_number
- * It is your task to support ID3v1 only or ID3v1.1 ...*/
-typedef struct
-{
- char tag[3]; /**< Always the string "TAG", the classic intro. */
- char title[30]; /**< Title string. */
- char artist[30]; /**< Artist string. */
- char album[30]; /**< Album string. */
- char year[4]; /**< Year string. */
- char comment[30]; /**< Comment string. */
- unsigned char genre; /**< Genre index. */
-} mpg123_id3v1;
-
-#define MPG123_ID3 0x3 /**< 0011 There is some ID3 info. Also matches 0010 or NEW_ID3. */
-#define MPG123_NEW_ID3 0x1 /**< 0001 There is ID3 info that changed since last call to mpg123_id3. */
-#define MPG123_ICY 0xc /**< 1100 There is some ICY info. Also matches 0100 or NEW_ICY.*/
-#define MPG123_NEW_ICY 0x4 /**< 0100 There is ICY info that changed since last call to mpg123_icy. */
-
-/** Query if there is (new) meta info, be it ID3 or ICY (or something new in future).
- * \param mh handle
- * \return combination of flags, 0 on error (same as "nothing new")
- */
-MPG123_EXPORT int mpg123_meta_check(mpg123_handle *mh);
-
-/** Clean up meta data storage (ID3v2 and ICY), freeing memory.
- * \param mh handle
- */
-MPG123_EXPORT void mpg123_meta_free(mpg123_handle *mh);
-
-/** Point v1 and v2 to existing data structures wich may change on any next read/decode function call.
- * v1 and/or v2 can be set to NULL when there is no corresponding data.
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_id3( mpg123_handle *mh
-, mpg123_id3v1 **v1, mpg123_id3v2 **v2 );
-
-/** Return pointers to and size of stored raw ID3 data if storage has
- * been configured with MPG123_RAW_ID3 and stream parsing passed the
- * metadata already. Null value with zero size is a possibility!
- * The storage can change at any next API call.
- * \param v1 address to store pointer to v1 tag
- * \param v1_size size of v1 data in bytes
- * \param v2 address to store pointer to v2 tag
- * \param v2_size size of v2 data in bytes
- * \return MPG123_OK or MPG123_ERR. Only on MPG123_OK the output
- * values are set.
- */
-MPG123_EXPORT int mpg123_id3_raw( mpg123_handle *mh
-, unsigned char **v1, size_t *v1_size
-, unsigned char **v2, size_t *v2_size );
-
-/** Point icy_meta to existing data structure wich may change on any next read/decode function call.
- * \param mh handle
- * \param icy_meta return address for ICY meta string (set to NULL if nothing there)
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_icy(mpg123_handle *mh, char **icy_meta);
-
-/** Decode from windows-1252 (the encoding ICY metainfo used) to UTF-8.
- * Note that this is very similar to mpg123_store_utf8(&sb, mpg123_text_icy, icy_text, strlen(icy_text+1)) .
- * \param icy_text The input data in ICY encoding
- * \return pointer to newly allocated buffer with UTF-8 data (You free() it!) */
-MPG123_EXPORT char* mpg123_icy2utf8(const char* icy_text);
-
-
-/* @} */
-
-
-/** \defgroup mpg123_advpar mpg123 advanced parameter API
- *
- * Direct access to a parameter set without full handle around it.
- * Possible uses:
- * - Influence behaviour of library _during_ initialization of handle (MPG123_VERBOSE).
- * - Use one set of parameters for multiple handles.
- *
- * The functions for handling mpg123_pars (mpg123_par() and mpg123_fmt()
- * family) directly return a fully qualified mpg123 error code, the ones
- * operating on full handles normally MPG123_OK or MPG123_ERR, storing the
- * specific error code itseld inside the handle.
- *
- * @{
- */
-
-/** Opaque structure for the libmpg123 decoder parameters. */
-struct mpg123_pars_struct;
-
-/** Opaque structure for the libmpg123 decoder parameters. */
-typedef struct mpg123_pars_struct mpg123_pars;
-
-/** Create a handle with preset parameters.
- * \param mp parameter handle
- * \param decoder decoder choice
- * \param error error code return address
- * \return mpg123 handle
- */
-MPG123_EXPORT mpg123_handle *mpg123_parnew( mpg123_pars *mp
-, const char* decoder, int *error );
-
-/** Allocate memory for and return a pointer to a new mpg123_pars
- * \param error error code return address
- * \return new parameter handle
- */
-MPG123_EXPORT mpg123_pars *mpg123_new_pars(int *error);
-
-/** Delete and free up memory used by a mpg123_pars data structure
- * \param mp parameter handle
- */
-MPG123_EXPORT void mpg123_delete_pars(mpg123_pars* mp);
-
-/** Configure mpg123 parameters to accept no output format at all,
- * use before specifying supported formats with mpg123_format
- * \param mp parameter handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_fmt_none(mpg123_pars *mp);
-
-/** Configure mpg123 parameters to accept all formats
- * (also any custom rate you may set) -- this is default.
- * \param mp parameter handle
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_fmt_all(mpg123_pars *mp);
-
-/** Set the audio format support of a mpg123_pars in detail:
- * \param mp parameter handle
- * \param rate The sample rate value (in Hertz).
- * \param channels A combination of MPG123_STEREO and MPG123_MONO.
- * \param encodings A combination of accepted encodings for rate and channels,
- * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no
- * support).
- * \return MPG123_OK on success
-*/
-MPG123_EXPORT int mpg123_fmt(mpg123_pars *mp
-, long rate, int channels, int encodings);
-
-/** Set the audio format support of a mpg123_pars in detail:
- * \param mp parameter handle
- * \param rate The sample rate value (in Hertz). Special value 0 means
- * all rates (reason for this variant of mpg123_fmt).
- * \param channels A combination of MPG123_STEREO and MPG123_MONO.
- * \param encodings A combination of accepted encodings for rate and channels,
- * p.ex MPG123_ENC_SIGNED16|MPG123_ENC_ULAW_8 (or 0 for no
- * support).
- * \return MPG123_OK on success
-*/
-MPG123_EXPORT int mpg123_fmt2(mpg123_pars *mp
-, long rate, int channels, int encodings);
-
-/** Check to see if a specific format at a specific rate is supported
- * by mpg123_pars.
- * \param mp parameter handle
- * \param rate sampling rate
- * \param encoding encoding
- * \return 0 for no support (that includes invalid parameters), MPG123_STEREO,
- * MPG123_MONO or MPG123_STEREO|MPG123_MONO. */
-MPG123_EXPORT int mpg123_fmt_support(mpg123_pars *mp, long rate, int encoding);
-
-/** Set a specific parameter, for a specific mpg123_pars, using a parameter
- * type key chosen from the mpg123_parms enumeration, to the specified value.
- * \param mp parameter handle
- * \param type parameter choice
- * \param value integer value
- * \param fvalue floating point value
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_par( mpg123_pars *mp
-, enum mpg123_parms type, long value, double fvalue );
-
-/** Get a specific parameter, for a specific mpg123_pars.
- * See the mpg123_parms enumeration for a list of available parameters.
- * \param mp parameter handle
- * \param type parameter choice
- * \param value integer value return address
- * \param fvalue floating point value return address
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_getpar( mpg123_pars *mp
-, enum mpg123_parms type, long *value, double *fvalue);
-
-/* @} */
-
-
-/** \defgroup mpg123_lowio mpg123 low level I/O
- * You may want to do tricky stuff with I/O that does not work with mpg123's default file access or you want to make it decode into your own pocket...
- *
- * @{ */
-
-/** Replace default internal buffer with user-supplied buffer.
- * Instead of working on it's own private buffer, mpg123 will directly use the one you provide for storing decoded audio.
- * Note that the required buffer size could be bigger than expected from output
- * encoding if libmpg123 has to convert from primary decoder output (p.ex. 32 bit
- * storage for 24 bit output).
- *
- * Note: The type of data changed to a void pointer in mpg123 1.26.0
- * (API version 45).
- *
- * \param mh handle
- * \param data pointer to user buffer
- * \param size of buffer in bytes
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_replace_buffer(mpg123_handle *mh
-, void *data, size_t size);
-
-/** The max size of one frame's decoded output with current settings.
- * Use that to determine an appropriate minimum buffer size for decoding one frame.
- * \param mh handle
- * \return maximum decoded data size in bytes
- */
-MPG123_EXPORT size_t mpg123_outblock(mpg123_handle *mh);
-
-/** Replace low-level stream access functions; read and lseek as known in POSIX.
- * You can use this to make any fancy file opening/closing yourself,
- * using mpg123_open_fd() to set the file descriptor for your read/lseek
- * (doesn't need to be a "real" file descriptor...).
- * Setting a function to NULL means that the default internal read is
- * used (active from next mpg123_open call on).
- * Note: As it would be troublesome to mess with this while having a file open,
- * this implies mpg123_close().
- * \param mh handle
- * \param r_read callback for reading (behaviour like POSIX read)
- * \param r_lseek callback for seeking (like POSIX lseek)
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_replace_reader( mpg123_handle *mh
-, ssize_t (*r_read) (int, void *, size_t)
-, off_t (*r_lseek)(int, off_t, int)
-);
-
-/** Replace I/O functions with your own ones operating on some kind of
- * handle instead of integer descriptors.
- * The handle is a void pointer, so you can pass any data you want...
- * mpg123_open_handle() is the call you make to use the I/O defined here.
- * There is no fallback to internal read/seek here.
- * Note: As it would be troublesome to mess with this while having a file open,
- * this mpg123_close() is implied here.
- * \param mh handle
- * \param r_read callback for reading (behaviour like POSIX read)
- * \param r_lseek callback for seeking (like POSIX lseek)
- * \param cleanup A callback to clean up an I/O handle on mpg123_close,
- * can be NULL for none (you take care of cleaning your handles).
- * \return MPG123_OK on success
- */
-MPG123_EXPORT int mpg123_replace_reader_handle( mpg123_handle *mh
-, ssize_t (*r_read) (void *, void *, size_t)
-, off_t (*r_lseek)(void *, off_t, int)
-, void (*cleanup)(void*) );
-
-/* @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/ogg b/ogg
deleted file mode 160000
-Subproject 1e8d7cce266df61afc9d35db0283bbacc0237ab
diff --git a/opus b/opus
deleted file mode 160000
-Subproject 8aa7767207b1e3633004c26aecbb67d1c511848
diff --git a/opusfile b/opusfile
deleted file mode 160000
-Subproject eb252537f374e30f7b68b84223c5a2303c05eca
diff --git a/premake5.lua b/premake5.lua
index acb15555..478ac18d 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -2,21 +2,21 @@ newoption {
trigger = "glewdir",
value = "PATH",
description = "Directory of GLEW",
- default = "glew-2.1.0"
+ default = "vendor/glew-2.1.0"
}
newoption {
trigger = "glfwdir64",
value = "PATH",
description = "Directory of glfw",
- default = "glfw-3.3.2.bin.WIN64",
+ default = "vendor/glfw-3.3.2.bin.WIN64",
}
newoption {
trigger = "glfwdir32",
value = "PATH",
description = "Directory of glfw",
- default = "glfw-3.3.2.bin.WIN32",
+ default = "vendor/glfw-3.3.2.bin.WIN32",
}
newoption {
@@ -30,9 +30,9 @@ newoption {
}
if(_OPTIONS["with-librw"]) then
- Librw = "librw"
+ Librw = "vendor/librw"
else
- Librw = os.getenv("LIBRW") or "librw"
+ Librw = os.getenv("LIBRW") or "vendor/librw"
end
function getsys(a)
@@ -77,6 +77,11 @@ workspace "reVC"
"linux-arm-librw_gl3_glfw-oal",
}
+ filter { "system:bsd" }
+ platforms {
+ "bsd-amd64-librw_gl3_glfw-oal"
+ }
+
filter "configurations:Debug"
defines { "DEBUG" }
@@ -90,6 +95,9 @@ workspace "reVC"
filter { "platforms:linux*" }
system "linux"
+ filter { "platforms:bsd*" }
+ system "bsd"
+
filter { "platforms:*x86*" }
architecture "x86"
@@ -144,9 +152,14 @@ if(_OPTIONS["with-librw"]) then
project "librw"
kind "StaticLib"
targetname "rw"
- targetdir "lib/%{cfg.platform}/%{cfg.buildcfg}"
+ targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
files { path.join(Librw, "src/*.*") }
files { path.join(Librw, "src/*/*.*") }
+
+ filter "platforms:bsd*"
+ includedirs { "/usr/local/include" }
+ libdirs { "/usr/local/lib" }
+
filter "platforms:*RW34*"
flags { "ExcludeFromBuild" }
filter {}
@@ -207,9 +220,9 @@ project "reVC"
includedirs { "src/extras" }
if _OPTIONS["with-opus"] then
- includedirs { "ogg/include" }
- includedirs { "opus/include" }
- includedirs { "opusfile/include" }
+ includedirs { "vendor/ogg/include" }
+ includedirs { "vendor/opus/include" }
+ includedirs { "vendor/opusfile/include" }
end
filter "platforms:*mss"
@@ -219,9 +232,9 @@ project "reVC"
if _OPTIONS["with-opus"] then
filter "platforms:win*"
- libdirs { "ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
- libdirs { "opus/win32/VS2015/Win32/%{cfg.buildcfg}" }
- libdirs { "opusfile/win32/VS2015/Win32/Release-NoHTTP" }
+ libdirs { "vendor/ogg/win32/VS2015/Win32/%{cfg.buildcfg}" }
+ libdirs { "vendor/opus/win32/VS2015/Win32/%{cfg.buildcfg}" }
+ libdirs { "vendor/opusfile/win32/VS2015/Win32/Release-NoHTTP" }
filter {}
defines { "AUDIO_OPUS" }
end
@@ -241,24 +254,26 @@ project "reVC"
characterset ("MBCS")
targetextension ".exe"
+ filter "platforms:win*oal"
+ includedirs { "vendor/openal-soft/include" }
+ includedirs { "vendor/libsndfile/include" }
+ includedirs { "vendor/mpg123/include" }
+
filter "platforms:win-x86*oal"
- includedirs { "openal-soft/include" }
- includedirs { "libsndfile.32/include" }
- includedirs { "mpg123.32/include" }
- libdirs { "mpg123.32/lib" }
- libdirs { "libsndfile.32/lib" }
- libdirs { "openal-soft/libs/Win32" }
+ libdirs { "vendor/mpg123/lib/Win32" }
+ libdirs { "vendor/libsndfile/lib/Win32" }
+ libdirs { "vendor/openal-soft/libs/Win32" }
filter "platforms:win-amd64*oal"
- includedirs { "openal-soft/include" }
- includedirs { "libsndfile.64/include" }
- includedirs { "mpg123.64/include" }
- libdirs { "mpg123.64/lib" }
- libdirs { "libsndfile.64/lib" }
- libdirs { "openal-soft/libs/Win64" }
+ libdirs { "vendor/mpg123/lib/Win64" }
+ libdirs { "vendor/libsndfile/lib/Win64" }
+ libdirs { "vendor/openal-soft/libs/Win64" }
filter "platforms:linux*oal"
links { "openal", "mpg123", "sndfile", "pthread" }
+
+ filter "platforms:bsd*oal"
+ links { "openal", "mpg123", "sndfile", "pthread" }
if _OPTIONS["with-opus"] then
filter {}
@@ -281,7 +296,7 @@ project "reVC"
includedirs { "src/fakerw" }
includedirs { Librw }
if(_OPTIONS["with-librw"]) then
- libdirs { "lib/%{cfg.platform}/%{cfg.buildcfg}" }
+ libdirs { "vendor/librw/lib/%{cfg.platform}/%{cfg.buildcfg}" }
end
links { "rw" }
@@ -307,3 +322,8 @@ project "reVC"
filter "platforms:linux*gl3_glfw*"
links { "GL", "GLEW", "glfw" }
+
+ filter "platforms:bsd*gl3_glfw*"
+ links { "GL", "GLEW", "glfw", "sysinfo" }
+ includedirs { "/usr/local/include" }
+ libdirs { "/usr/local/lib" }
diff --git a/src/animation/AnimBlendClumpData.h b/src/animation/AnimBlendClumpData.h
index 4043c778..af7e5df5 100644
--- a/src/animation/AnimBlendClumpData.h
+++ b/src/animation/AnimBlendClumpData.h
@@ -12,6 +12,7 @@ struct AnimBlendFrameData
VELOCITY_EXTRACTION = 8,
VELOCITY_EXTRACTION_3D = 0x10,
UPDATE_KEYFRAMES = 0x20,
+ UNK_COMPRESSED = 0x40,
};
uint8 flag;
diff --git a/src/animation/AnimBlendHierarchy.h b/src/animation/AnimBlendHierarchy.h
index 45c9217e..b34ae210 100644
--- a/src/animation/AnimBlendHierarchy.h
+++ b/src/animation/AnimBlendHierarchy.h
@@ -25,6 +25,7 @@ public:
void RemoveAnimSequences(void);
void Uncompress(void);
void RemoveUncompressedData(void);
+ bool IsCompressed() { return !!compressed; };
};
VALIDATE_SIZE(CAnimBlendHierarchy, 0x28); \ No newline at end of file
diff --git a/src/animation/CutsceneMgr.cpp b/src/animation/CutsceneMgr.cpp
index e720fccb..31128990 100644
--- a/src/animation/CutsceneMgr.cpp
+++ b/src/animation/CutsceneMgr.cpp
@@ -19,6 +19,11 @@
#include "RpAnimBlend.h"
#include "ModelIndices.h"
#include "TempColModels.h"
+#include "ColStore.h"
+#include "Radar.h"
+#include "Pools.h"
+
+//--MIAMI: file done
const struct {
const char *szTrackName;
@@ -119,15 +124,22 @@ int32 CCutsceneMgr::ms_numCutsceneObjs;
bool CCutsceneMgr::ms_loaded;
bool CCutsceneMgr::ms_animLoaded;
bool CCutsceneMgr::ms_useLodMultiplier;
-bool CCutsceneMgr::ms_camLoaded;
char CCutsceneMgr::ms_cutsceneName[CUTSCENENAMESIZE];
-char CCutsceneMgr::ms_uncompressedAnims[8][32];
-uint32 CCutsceneMgr::ms_numUncompressedAnims;
CAnimBlendAssocGroup CCutsceneMgr::ms_cutsceneAssociations;
CVector CCutsceneMgr::ms_cutsceneOffset;
float CCutsceneMgr::ms_cutsceneTimer;
bool CCutsceneMgr::ms_wasCutsceneSkipped;
uint32 CCutsceneMgr::ms_cutsceneLoadStatus;
+bool CCutsceneMgr::ms_useCutsceneShadows = true;
+
+bool bCamLoaded;
+bool bIsEverythingRemovedFromTheWorldForTheBiggestFuckoffCutsceneEver; // pls don't shrink the name :P
+int32 NumberOfSavedWeapons;
+eWeaponType SavedWeaponIDs[TOTAL_WEAPON_SLOTS];
+int32 SavedWeaponAmmo[TOTAL_WEAPON_SLOTS];
+char uncompressedAnims[8][32];
+uint32 numUncompressedAnims;
+
RpAtomic *
CalculateBoundingSphereRadiusCB(RpAtomic *atomic, void *data)
@@ -151,15 +163,15 @@ CCutsceneMgr::Initialise(void)
ms_loaded = false;
ms_wasCutsceneSkipped = false;
ms_running = false;
+ ms_useLodMultiplier = false;
ms_animLoaded = false;
ms_cutsceneProcessing = false;
- ms_useLodMultiplier = false;
ms_pCutsceneDir = new CDirectory(CUTSCENEDIRSIZE);
ms_pCutsceneDir->ReadDirFile("ANIM\\CUTS.DIR");
- ms_numUncompressedAnims = 0;
- ms_uncompressedAnims[0][0] = '\0';
+ numUncompressedAnims = 0;
+ uncompressedAnims[0][0] = '\0';
}
void
@@ -178,9 +190,9 @@ CCutsceneMgr::LoadCutsceneData(const char *szCutsceneName)
ms_cutsceneProcessing = true;
ms_wasCutsceneSkipped = false;
- if (!strcasecmp(szCutsceneName, "jb"))
- ms_useLodMultiplier = true;
CTimer::Suspend();
+ if (!bIsEverythingRemovedFromTheWorldForTheBiggestFuckoffCutsceneEver)
+ CStreaming::RemoveCurrentZonesModels();
ms_pCutsceneDir->numEntries = 0;
ms_pCutsceneDir->ReadDirFile("ANIM\\CUTS.DIR");
@@ -200,7 +212,7 @@ CCutsceneMgr::LoadCutsceneData(const char *szCutsceneName)
CStreaming::MakeSpaceFor(size << 11);
CStreaming::ImGonnaUseStreamingMemory();
RwStreamSkip(stream, offset << 11);
- CAnimManager::LoadAnimFile(stream, true, ms_uncompressedAnims);
+ CAnimManager::LoadAnimFile(stream, true, uncompressedAnims);
ms_cutsceneAssociations.CreateAssociations(szCutsceneName);
CStreaming::IHaveUsedStreamingMemory();
ms_animLoaded = true;
@@ -217,9 +229,9 @@ CCutsceneMgr::LoadCutsceneData(const char *szCutsceneName)
CFileMgr::Seek(file, offset << 11, SEEK_SET);
TheCamera.LoadPathSplines(file);
CStreaming::IHaveUsedStreamingMemory();
- ms_camLoaded = true;
+ bCamLoaded = true;
} else {
- ms_camLoaded = false;
+ bCamLoaded = false;
}
CFileMgr::CloseFile(file);
@@ -252,7 +264,7 @@ void
CCutsceneMgr::FinishCutscene()
{
ms_wasCutsceneSkipped = true;
- if (ms_camLoaded) {
+ if (bCamLoaded) {
CCutsceneMgr::ms_cutsceneTimer = TheCamera.GetCutSceneFinishTime() * 0.001f;
TheCamera.FinishCutscene();
}
@@ -264,7 +276,7 @@ CCutsceneMgr::FinishCutscene()
void
CCutsceneMgr::SetupCutsceneToStart(void)
{
- if (ms_camLoaded) {
+ if (bCamLoaded) {
TheCamera.SetCamCutSceneOffSet(ms_cutsceneOffset);
TheCamera.TakeControlWithSpline(JUMP_CUT);
TheCamera.SetWideScreenOn();
@@ -276,7 +288,16 @@ CCutsceneMgr::SetupCutsceneToStart(void)
assert(RwObjectGetType(ms_pCutsceneObjects[i]->m_rwObject) == rpCLUMP);
if (CAnimBlendAssociation *pAnimBlendAssoc = RpAnimBlendClumpGetFirstAssociation((RpClump*)ms_pCutsceneObjects[i]->m_rwObject)) {
assert(pAnimBlendAssoc->hierarchy->sequences[0].HasTranslation());
- ms_pCutsceneObjects[i]->SetPosition(ms_cutsceneOffset + ((KeyFrameTrans*)pAnimBlendAssoc->hierarchy->sequences[0].GetKeyFrame(0))->translation);
+ if (ms_pCutsceneObjects[i]->m_pAttachTo != nil) {
+ pAnimBlendAssoc->flags &= (~ASSOC_HAS_TRANSLATION);
+ } else {
+ KeyFrameTrans* keyFrames;
+ if (pAnimBlendAssoc->hierarchy->IsCompressed())
+ keyFrames = ((KeyFrameTrans*)pAnimBlendAssoc->hierarchy->sequences[0].GetKeyFrameCompressed(0));
+ else
+ keyFrames = ((KeyFrameTrans*)pAnimBlendAssoc->hierarchy->sequences[0].GetKeyFrame(0));
+ ms_pCutsceneObjects[i]->SetPosition(ms_cutsceneOffset + keyFrames->translation);
+ }
pAnimBlendAssoc->SetRun();
} else {
ms_pCutsceneObjects[i]->SetPosition(ms_cutsceneOffset);
@@ -300,19 +321,31 @@ CCutsceneMgr::SetCutsceneAnim(const char *animName, CObject *pObject)
CAnimBlendClumpData *pAnimBlendClumpData;
assert(RwObjectGetType(pObject->m_rwObject) == rpCLUMP);
+ debug("Give cutscene anim %s\n", animName);
RpAnimBlendClumpRemoveAllAssociations((RpClump*)pObject->m_rwObject);
- pNewAnim = ms_cutsceneAssociations.CopyAnimation(animName);
+ pNewAnim = ms_cutsceneAssociations.GetAnimation(animName);
if (!pNewAnim) {
debug("\n\nHaven't I told you I can't find the fucking animation %s\n\n\n", animName);
return;
}
+
+ if (pNewAnim->hierarchy->IsCompressed())
+ pNewAnim->hierarchy->compressed2 = true;
+
+ CStreaming::ImGonnaUseStreamingMemory();
+ pNewAnim = ms_cutsceneAssociations.CopyAnimation(animName);
+ CStreaming::IHaveUsedStreamingMemory();
+
pNewAnim->SetCurrentTime(0.0f);
pNewAnim->flags |= ASSOC_HAS_TRANSLATION;
pNewAnim->flags &= ~ASSOC_RUNNING;
pAnimBlendClumpData = *RPANIMBLENDCLUMPDATA(pObject->m_rwObject);
pAnimBlendClumpData->link.Prepend(&pNewAnim->link);
+
+ if (pNewAnim->hierarchy->compressed2)
+ pAnimBlendClumpData->frames->flag |= AnimBlendFrameData::UNK_COMPRESSED;
}
void
@@ -327,25 +360,42 @@ CCutsceneMgr::AddCutsceneHead(CObject *pObject, int modelId)
return nil;
}
+void UpdateCutsceneObjectBoundingBox(RpClump* clump, int modelId)
+{
+ if (modelId >= MI_CUTOBJ01 && modelId <= MI_CUTOBJ05) {
+ CColModel* pColModel = &CTempColModels::ms_colModelCutObj[modelId - MI_CUTOBJ01];
+ float radius = 0.0f;
+ RpClumpForAllAtomics(clump, CalculateBoundingSphereRadiusCB, &radius);
+ pColModel->boundingSphere.radius = radius;
+ pColModel->boundingBox.min = CVector(-radius, -radius, -radius);
+ pColModel->boundingBox.max = CVector(radius, radius, radius);
+ }
+}
+
CCutsceneObject *
CCutsceneMgr::CreateCutsceneObject(int modelId)
{
CBaseModelInfo *pModelInfo;
CColModel *pColModel;
- float radius;
- RpClump *clump;
CCutsceneObject *pCutsceneObject;
+ CStreaming::ImGonnaUseStreamingMemory();
+ debug("Created cutscene object %s\n", CModelInfo::GetModelInfo(modelId)->GetName());
if (modelId >= MI_CUTOBJ01 && modelId <= MI_CUTOBJ05) {
pModelInfo = CModelInfo::GetModelInfo(modelId);
pColModel = &CTempColModels::ms_colModelCutObj[modelId - MI_CUTOBJ01];
- radius = 0.0f;
-
pModelInfo->SetColModel(pColModel);
- clump = (RpClump*)pModelInfo->GetRwObject();
- assert(RwObjectGetType((RwObject*)clump) == rpCLUMP);
- RpClumpForAllAtomics(clump, CalculateBoundingSphereRadiusCB, &radius);
-
+ UpdateCutsceneObjectBoundingBox((RpClump*)pModelInfo->GetRwObject(), modelId);
+ } else if (modelId >= MI_SPECIAL01 && modelId <= MI_SPECIAL21) {
+ pModelInfo = CModelInfo::GetModelInfo(modelId);
+ if (pModelInfo->GetColModel() == &CTempColModels::ms_colModelPed1) {
+ CColModel *colModel = new CColModel();
+ colModel->boundingSphere.radius = 2.0f;
+ colModel->boundingSphere.center = CVector(0.0f, 0.0f, 0.0f);
+ pModelInfo->SetColModel(colModel, true);
+ }
+ pColModel = pModelInfo->GetColModel();
+ float radius = 2.0f;
pColModel->boundingSphere.radius = radius;
pColModel->boundingBox.min = CVector(-radius, -radius, -radius);
pColModel->boundingBox.max = CVector(radius, radius, radius);
@@ -353,7 +403,10 @@ CCutsceneMgr::CreateCutsceneObject(int modelId)
pCutsceneObject = new CCutsceneObject();
pCutsceneObject->SetModelIndex(modelId);
+ if (ms_useCutsceneShadows)
+ pCutsceneObject->CreateShadow();
ms_pCutsceneObjects[ms_numCutsceneObjs++] = pCutsceneObject;
+ CStreaming::IHaveUsedStreamingMemory();
return pCutsceneObject;
}
@@ -365,6 +418,7 @@ CCutsceneMgr::DeleteCutsceneData(void)
ms_cutsceneProcessing = false;
ms_useLodMultiplier = false;
+ ms_useCutsceneShadows = true;
for (--ms_numCutsceneObjs; ms_numCutsceneObjs >= 0; ms_numCutsceneObjs--) {
CWorld::Remove(ms_pCutsceneObjects[ms_numCutsceneObjs]);
@@ -374,14 +428,23 @@ CCutsceneMgr::DeleteCutsceneData(void)
}
ms_numCutsceneObjs = 0;
+ for (int i = MI_SPECIAL01; i < MI_SPECIAL21; i++) {
+ CBaseModelInfo *minfo = CModelInfo::GetModelInfo(i);
+ CColModel *colModel = minfo->GetColModel();
+ if (colModel != &CTempColModels::ms_colModelPed1) {
+ delete colModel;
+ minfo->SetColModel(&CTempColModels::ms_colModelPed1);
+ }
+ }
+
if (ms_animLoaded)
CAnimManager::RemoveLastAnimFile();
ms_animLoaded = false;
- ms_numUncompressedAnims = 0;
- ms_uncompressedAnims[0][0] = '\0';
+ numUncompressedAnims = 0;
+ uncompressedAnims[0][0] = '\0';
- if (ms_camLoaded) {
+ if (bCamLoaded) {
TheCamera.RestoreWithJumpCut();
TheCamera.SetWideScreenOff();
TheCamera.DeleteCutSceneCamDataMemory();
@@ -397,10 +460,37 @@ CCutsceneMgr::DeleteCutsceneData(void)
DMAudio.StopCutSceneMusic();
DMAudio.ChangeMusicMode(MUSICMODE_GAME);
}
+
+ CStreaming::ms_disableStreaming = false;
+ CWorld::bProcessCutsceneOnly = false;
+
+ if(bCamLoaded)
+ CGame::DrasticTidyUpMemory(TheCamera.GetScreenFadeStatus() == FADE_2);
- if(ms_camLoaded)
- CGame::DrasticTidyUpMemory(TheCamera.GetScreenFadeStatus() == 2);
-
+ CPad::GetPad(0)->Clear(false);
+ if (bIsEverythingRemovedFromTheWorldForTheBiggestFuckoffCutsceneEver) {
+ CStreaming::LoadInitialPeds();
+ CStreaming::LoadInitialWeapons();
+ CStreaming::LoadInitialVehicles();
+ bIsEverythingRemovedFromTheWorldForTheBiggestFuckoffCutsceneEver = false;
+
+ CPlayerPed *pPlayerPed = FindPlayerPed();
+ for (int i = 0; i < NumberOfSavedWeapons; i++) {
+ int32 weaponModelId = CWeaponInfo::GetWeaponInfo(SavedWeaponIDs[i])->m_nModelId;
+ uint8 flags = CStreaming::ms_aInfoForModel[weaponModelId].m_flags;
+ CStreaming::RequestModel(weaponModelId, STREAMFLAGS_DONT_REMOVE);
+ CStreaming::LoadAllRequestedModels(false);
+ if (CWeaponInfo::GetWeaponInfo(SavedWeaponIDs[i])->m_nModel2Id != -1) {
+ CStreaming::RequestModel(CWeaponInfo::GetWeaponInfo(SavedWeaponIDs[i])->m_nModel2Id, 0);
+ CStreaming::LoadAllRequestedModels(false);
+ }
+ if (!(flags & STREAMFLAGS_DONT_REMOVE))
+ CStreaming::SetModelIsDeletable(weaponModelId);
+ pPlayerPed->GiveWeapon(SavedWeaponIDs[i], SavedWeaponAmmo[i], true);
+ }
+ NumberOfSavedWeapons = 0;
+ }
+
CTimer::Resume();
}
@@ -437,26 +527,156 @@ CCutsceneMgr::Update(void)
ms_cutsceneTimer += CTimer::GetTimeStepNonClippedInSeconds();
- if (ms_camLoaded)
+ for (int i = 0; i < ms_numCutsceneObjs; i++) {
+ int modelId = ms_pCutsceneObjects[i]->GetModelIndex();
+ if (modelId >= MI_CUTOBJ01 && modelId <= MI_CUTOBJ05)
+ UpdateCutsceneObjectBoundingBox(ms_pCutsceneObjects[i]->GetClump(), modelId);
+
+ if (ms_pCutsceneObjects[i]->m_pAttachTo != nil && modelId >= MI_SPECIAL01 && modelId <= MI_SPECIAL21)
+ UpdateCutsceneObjectBoundingBox(ms_pCutsceneObjects[i]->GetClump(), modelId);
+ }
+
+ if (bCamLoaded)
if (CGeneral::faststricmp(ms_cutsceneName, "finale") && TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_FLYBY && ms_cutsceneLoadStatus == CUTSCENE_LOADING_0) {
if (CPad::GetPad(0)->GetCrossJustDown()
|| (CGame::playingIntro && CPad::GetPad(0)->GetStartJustDown())
|| CPad::GetPad(0)->GetLeftMouseJustDown()
|| CPad::GetPad(0)->GetEnterJustDown()
|| CPad::GetPad(0)->GetCharJustDown(' '))
- FinishCutscene();
+ FinishCutscene();
}
}
-bool CCutsceneMgr::HasCutsceneFinished(void) { return !ms_camLoaded || TheCamera.GetPositionAlongSpline() == 1.0f; }
+bool CCutsceneMgr::HasCutsceneFinished(void) { return !bCamLoaded || TheCamera.GetPositionAlongSpline() == 1.0f; }
void
CCutsceneMgr::LoadAnimationUncompressed(char const* name)
{
- strcpy(ms_uncompressedAnims[ms_numUncompressedAnims], name);
+ strcpy(uncompressedAnims[numUncompressedAnims], name);
// Because that's how CAnimManager knows the end of array
- ++ms_numUncompressedAnims;
- assert(ms_numUncompressedAnims < ARRAY_SIZE(ms_uncompressedAnims));
- ms_uncompressedAnims[ms_numUncompressedAnims][0] = '\0';
+ ++numUncompressedAnims;
+ assert(numUncompressedAnims < ARRAY_SIZE(uncompressedAnims));
+ uncompressedAnims[numUncompressedAnims][0] = '\0';
+}
+
+void
+CCutsceneMgr::AttachObjectToParent(CObject *pObject, CEntity *pAttachTo)
+{
+ ((CCutsceneObject*)pObject)->m_pAttachmentObject = nil;
+ ((CCutsceneObject*)pObject)->m_pAttachTo = RpClumpGetFrame(pAttachTo->GetClump());
+
+ debug("Attach %s to %s\n", CModelInfo::GetModelInfo(pObject->GetModelIndex())->GetName(), CModelInfo::GetModelInfo(pAttachTo->GetModelIndex())->GetName());
+}
+
+void
+CCutsceneMgr::AttachObjectToFrame(CObject *pObject, CEntity *pAttachTo, const char *frame)
+{
+ ((CCutsceneObject*)pObject)->m_pAttachmentObject = nil;
+ ((CCutsceneObject*)pObject)->m_pAttachTo = RpAnimBlendClumpFindFrame(pAttachTo->GetClump(), frame)->frame;
+ debug("Attach %s to component %s of %s\n",
+ CModelInfo::GetModelInfo(pObject->GetModelIndex())->GetName(),
+ frame,
+ CModelInfo::GetModelInfo(pAttachTo->GetModelIndex())->GetName());
+ if (RwObjectGetType(pObject->m_rwObject) == rpCLUMP) {
+ RpClump *clump = (RpClump*)pObject->m_rwObject;
+ if (IsClumpSkinned(clump))
+ RpAtomicGetBoundingSphere(GetFirstAtomic(clump))->radius *= 1.1f;
+ }
+}
+
+void
+CCutsceneMgr::AttachObjectToBone(CObject *pObject, CObject *pAttachTo, int bone)
+{
+ RpHAnimHierarchy *hanim = GetAnimHierarchyFromSkinClump(pAttachTo->GetClump());
+ RwInt32 id = RpHAnimIDGetIndex(hanim, bone);
+ RwMatrix *matrixArray = RpHAnimHierarchyGetMatrixArray(hanim);
+ ((CCutsceneObject*)pObject)->m_pAttachmentObject = pAttachTo;
+ ((CCutsceneObject*)pObject)->m_pAttachTo = &matrixArray[id];
+ debug("Attach %s to %s\n",
+ CModelInfo::GetModelInfo(pObject->GetModelIndex())->GetName(),
+ CModelInfo::GetModelInfo(pAttachTo->GetModelIndex())->GetName());
+}
+
+void
+CCutsceneMgr::RemoveEverythingFromTheWorldForTheBiggestFuckoffCutsceneEver()
+{
+ CStreaming::ms_disableStreaming = true;
+ CColStore::RemoveAllCollision();
+ CWorld::bProcessCutsceneOnly = true;
+ ms_cutsceneProcessing = true;
+
+ for (int i = CPools::GetPedPool()->GetSize() - 1; i >= 0; i--) {
+ CPed *pPed = CPools::GetPedPool()->GetSlot(i);
+ if (pPed) {
+ if (!pPed->IsPlayer() && pPed->CanBeDeleted()) {
+ CWorld::Remove(pPed);
+ delete pPed;
+ }
+ }
+ }
+
+ for (int i = CPools::GetVehiclePool()->GetSize() - 1; i >= 0; i--) {
+ CVehicle *pVehicle = CPools::GetVehiclePool()->GetSlot(i);
+ if (pVehicle) {
+ if (pVehicle->CanBeDeleted()) {
+ CWorld::Remove(pVehicle);
+ delete pVehicle;
+ }
+ }
+ }
+
+ bIsEverythingRemovedFromTheWorldForTheBiggestFuckoffCutsceneEver = true;
+ CStreaming::RemoveCurrentZonesModels();
+ CStreaming::SetModelIsDeletable(MI_MALE01);
+ CStreaming::SetModelTxdIsDeletable(MI_MALE01);
+ CStreaming::SetModelIsDeletable(MI_HMOCA);
+ CStreaming::SetModelTxdIsDeletable(MI_HMOCA);
+ CStreaming::SetModelIsDeletable(MI_NIGHTSTICK);
+ CStreaming::SetModelTxdIsDeletable(MI_NIGHTSTICK);
+ CStreaming::SetModelIsDeletable(MI_MISSILE);
+ CStreaming::SetModelTxdIsDeletable(MI_MISSILE);
+ CStreaming::SetModelIsDeletable(MI_POLICE);
+ CStreaming::SetModelTxdIsDeletable(MI_POLICE);
+
+ while (CStreaming::RemoveLoadedVehicle()) ;
+
+ CRadar::RemoveRadarSections();
+
+ for (int i = CPools::GetDummyPool()->GetSize() - 1; i >= 0; i--) {
+ CDummy* pDummy = CPools::GetDummyPool()->GetSlot(i);
+ if (pDummy)
+ pDummy->DeleteRwObject();
+ }
+
+ for (int i = CPools::GetObjectPool()->GetSize() - 1; i >= 0; i--) {
+ CObject* pObject = CPools::GetObjectPool()->GetSlot(i);
+ if (pObject)
+ pObject->DeleteRwObject();
+ }
+
+ for (int i = CPools::GetBuildingPool()->GetSize() - 1; i >= 0; i--) {
+ CBuilding* pBuilding = CPools::GetBuildingPool()->GetSlot(i);
+ if (pBuilding && pBuilding->GetClump() != nil && pBuilding->bIsBIGBuilding && pBuilding->bStreamBIGBuilding) {
+ if (pBuilding->bIsBIGBuilding)
+ CStreaming::RequestModel(pBuilding->GetModelIndex(), 0);
+ if (!pBuilding->bImBeingRendered)
+ pBuilding->DeleteRwObject();
+ }
+ }
+
+ CPlayerPed *pPlayerPed = FindPlayerPed();
+ pPlayerPed->RemoveWeaponAnims(0, -1000.0f);
+ NumberOfSavedWeapons = 0;
+
+ for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) {
+ if (pPlayerPed->m_weapons[i].m_eWeaponType != WEAPONTYPE_UNARMED) {
+ SavedWeaponIDs[NumberOfSavedWeapons] = pPlayerPed->m_weapons[i].m_eWeaponType;
+ SavedWeaponAmmo[NumberOfSavedWeapons] = pPlayerPed->m_weapons[i].m_nAmmoTotal;
+ NumberOfSavedWeapons++;
+ }
+ }
+
+ pPlayerPed->ClearWeapons();
+ CGame::DrasticTidyUpMemory(true);
} \ No newline at end of file
diff --git a/src/animation/CutsceneMgr.h b/src/animation/CutsceneMgr.h
index c3f86273..b4497b5b 100644
--- a/src/animation/CutsceneMgr.h
+++ b/src/animation/CutsceneMgr.h
@@ -17,15 +17,13 @@ class CCutsceneMgr
static bool ms_animLoaded;
static bool ms_useLodMultiplier;
- static bool ms_camLoaded;
static char ms_cutsceneName[CUTSCENENAMESIZE];
- static char ms_uncompressedAnims[8][32];
- static uint32 ms_numUncompressedAnims;
static CAnimBlendAssocGroup ms_cutsceneAssociations;
static CVector ms_cutsceneOffset;
static float ms_cutsceneTimer;
static bool ms_wasCutsceneSkipped;
static bool ms_cutsceneProcessing;
+ static bool ms_useCutsceneShadows;
public:
static CDirectory *ms_pCutsceneDir;
static uint32 ms_cutsceneLoadStatus;
@@ -54,4 +52,9 @@ public:
static void DeleteCutsceneData(void);
static void LoadAnimationUncompressed(char const*);
static void Update(void);
+
+ static void AttachObjectToParent(CObject *pObject, CEntity *pAttachTo);
+ static void AttachObjectToFrame(CObject *pObject, CEntity *pAttachTo, const char *frame);
+ static void AttachObjectToBone(CObject *pObject, CObject *pAttachTo, int frame);
+ static void RemoveEverythingFromTheWorldForTheBiggestFuckoffCutsceneEver();
};
diff --git a/src/audio/AudioLogic.cpp b/src/audio/AudioLogic.cpp
index b814d58c..98ebf0d8 100644
--- a/src/audio/AudioLogic.cpp
+++ b/src/audio/AudioLogic.cpp
@@ -2756,7 +2756,6 @@ cAudioManager::ProcessPlane(cVehicleParams *params)
ProcessCesna(params);
break;
default:
- debug("Plane Model Id is %d\n, ", params->m_pVehicle->GetModelIndex());
break;
}
}
diff --git a/src/audio/AudioScriptObject.cpp b/src/audio/AudioScriptObject.cpp
index 69d80fbc..ac30f757 100644
--- a/src/audio/AudioScriptObject.cpp
+++ b/src/audio/AudioScriptObject.cpp
@@ -4,6 +4,16 @@
#include "Pools.h"
#include "DMAudio.h"
+cAudioScriptObject::cAudioScriptObject()
+{
+ Reset();
+};
+
+cAudioScriptObject::~cAudioScriptObject()
+{
+ Reset();
+};
+
void
cAudioScriptObject::Reset()
{
diff --git a/src/audio/AudioScriptObject.h b/src/audio/AudioScriptObject.h
index ff36474d..8110b2bb 100644
--- a/src/audio/AudioScriptObject.h
+++ b/src/audio/AudioScriptObject.h
@@ -7,6 +7,9 @@ public:
CVector Posn;
int32 AudioEntity;
+ cAudioScriptObject();
+ ~cAudioScriptObject();
+
void Reset(); /// ok
static void* operator new(size_t);
diff --git a/src/audio/DMAudio.cpp b/src/audio/DMAudio.cpp
index 6859cba3..b3c16941 100644
--- a/src/audio/DMAudio.cpp
+++ b/src/audio/DMAudio.cpp
@@ -247,7 +247,7 @@ cDMAudio::ReportCrime(eCrimeType crime, const CVector &pos)
int32
cDMAudio::CreateLoopingScriptObject(cAudioScriptObject *scriptObject)
{
- int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, (CPhysical *)scriptObject);
+ int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, scriptObject);
if ( AEHANDLE_IS_OK(audioEntity) )
AudioManager.SetEntityStatus(audioEntity, true);
@@ -264,7 +264,7 @@ cDMAudio::DestroyLoopingScriptObject(int32 audioEntity)
void
cDMAudio::CreateOneShotScriptObject(cAudioScriptObject *scriptObject)
{
- int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, (CPhysical *)scriptObject);
+ int32 audioEntity = AudioManager.CreateEntity(AUDIOTYPE_SCRIPTOBJECT, scriptObject);
if ( AEHANDLE_IS_OK(audioEntity) )
{
diff --git a/src/audio/audio_enums.h b/src/audio/audio_enums.h
index 1f13521b..375c4a70 100644
--- a/src/audio/audio_enums.h
+++ b/src/audio/audio_enums.h
@@ -12,7 +12,8 @@ enum eRadioStation
EMOTION,
WAVE,
USERTRACK,
- POLICE_RADIO,
+ NUM_RADIOS = 10,
+ POLICE_RADIO = 10,
//TAXI_RADIO,
RADIO_OFF,
};
diff --git a/src/audio/sampman_oal.cpp b/src/audio/sampman_oal.cpp
index a2943aff..ffa4c456 100644
--- a/src/audio/sampman_oal.cpp
+++ b/src/audio/sampman_oal.cpp
@@ -587,16 +587,16 @@ cSampleManager::Initialise(void)
}
nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] = (uintptr)malloc(nSampleBankSize[SAMPLEBANK_MAIN]);
- ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] != NULL);
+ ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] != 0);
- if ( nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] == NULL )
+ if ( nSampleBankMemoryStartAddress[SAMPLEBANK_MAIN] == 0 )
{
Terminate();
return false;
}
nSampleBankMemoryStartAddress[SAMPLEBANK_PED] = (uintptr)malloc(PED_BLOCKSIZE*MAX_PEDSFX);
- ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] != NULL);
+ ASSERT(nSampleBankMemoryStartAddress[SAMPLEBANK_PED] != 0);
}
diff --git a/src/audio/soundlist.h b/src/audio/soundlist.h
index 2a5b83cf..bc9ac09a 100644
--- a/src/audio/soundlist.h
+++ b/src/audio/soundlist.h
@@ -146,9 +146,9 @@ enum eSound : uint16
SOUND_PED_LEAVE_VEHICLE,
SOUND_PED_EVADE,
SOUND_PED_FLEE_RUN,
- SOUND_PED_CAR_COLLISION,
- SOUND_PED_BOAT_COLLISION,
- SOUND_PED_HORN_ACTIVE,
+ SOUND_PED_CRASH_VEHICLE,
+ SOUND_PED_CRASH_CAR,
+ SOUND_PED_ANNOYED_DRIVER,
SOUND_PED_147,
SOUND_PED_SOLICIT,
SOUND_PED_149,
diff --git a/src/control/CarCtrl.cpp b/src/control/CarCtrl.cpp
index cd08753d..74c4f006 100644
--- a/src/control/CarCtrl.cpp
+++ b/src/control/CarCtrl.cpp
@@ -81,6 +81,9 @@
#define OFFSCREEN_DESPAWN_RANGE (40.0f)
#define EXTENDED_RANGE_DESPAWN_MULTIPLIER (1.5f)
+//--MIAMI: file done
+
+bool CCarCtrl::bMadDriversCheat;
int CCarCtrl::NumLawEnforcerCars;
int CCarCtrl::NumAmbulancesOnDuty;
int CCarCtrl::NumFiretrucksOnDuty;
@@ -158,7 +161,7 @@ CCarCtrl::GenerateOneRandomCar()
carModel = ChoosePoliceCarModel();
}else{
carModel = ChooseModel(&zone, &vecTargetPos, &carClass);
- if (carClass == COPS && pWanted->m_nWantedLevel >= 1 || carModel < 0)
+ if (carModel == -1 || (carClass == COPS && pWanted->m_nWantedLevel >= 1))
/* All cop spawns with wanted level are handled by condition above. */
/* In particular it means that cop cars never spawn if player has wanted level of 1. */
return;
@@ -664,7 +667,7 @@ CCarCtrl::GenerateOneRandomCar()
nMadDrivers = 6;
break;
}
- if ((CGeneral::GetRandomNumber() & 0x7F) < nMadDrivers /* TODO(MIAMI): || mad drivers cheat */) {
+ if ((CGeneral::GetRandomNumber() & 0x7F) < nMadDrivers || bMadDriversCheat) {
pVehicle->SetStatus(STATUS_PHYSICS);
pVehicle->AutoPilot.m_nDrivingStyle = DRIVINGSTYLE_AVOID_CARS;
pVehicle->AutoPilot.m_nCruiseSpeed += 10;
@@ -758,7 +761,8 @@ CCarCtrl::ChooseCarRating(CZoneInfo* pZoneInfo)
int32
CCarCtrl::ChooseModel(CZoneInfo* pZone, CVector* pPos, int* pClass) {
int32 model = -1;
- for (int i = 0; i < 10 && (model == -1 || !CStreaming::HasModelLoaded(model)); i++) {
+ int32 i;
+ for (i = 10; i > 0 && (model == -1 || !CStreaming::HasModelLoaded(model)); i--) {
int rnd = CGeneral::GetRandomNumberInRange(0, 1000);
if (rnd < pZone->copThreshold) {
@@ -767,9 +771,9 @@ CCarCtrl::ChooseModel(CZoneInfo* pZone, CVector* pPos, int* pClass) {
continue;
}
- int j;
+ int32 j;
for (j = 0; j < NUM_GANG_CAR_CLASSES; j++) {
- if (rnd < pZone->gangThreshold[i]) {
+ if (rnd < pZone->gangThreshold[j]) {
*pClass = j + FIRST_GANG_CAR_RATING;
model = ChooseGangCarModel(j);
break;
@@ -782,6 +786,8 @@ CCarCtrl::ChooseModel(CZoneInfo* pZone, CVector* pPos, int* pClass) {
*pClass = ChooseCarRating(pZone);
model = ChooseCarModel(*pClass);
}
+ if (i == 0)
+ return -1;
return model;
}
@@ -950,6 +956,10 @@ CCarCtrl::RemoveCarsIfThePoolGetsFull(void)
void
CCarCtrl::PossiblyRemoveVehicle(CVehicle* pVehicle)
{
+#ifdef FIX_BUGS
+ if (pVehicle->bIsLocked)
+ return;
+#endif
CVector vecPlayerPos = FindPlayerCentreOfWorld(CWorld::PlayerInFocus);
/* BUG: this variable is initialized only in if-block below but can be used outside of it. */
if (!IsThisVehicleInteresting(pVehicle) && !pVehicle->bIsLocked &&
@@ -2515,7 +2525,7 @@ void CCarCtrl::SteerAICarWithPhysics_OnlyMission(CVehicle* pVehicle, float* pSwe
SteerAIBoatWithPhysicsAttackingPlayer(pVehicle, pSwerve, pAccel, pBrake, pHandbrake);
return;
case MISSION_PLANE_FLYTOCOORS:
- //SteerAIPlaneTowardsTargetCoors((CAutomobile*)pVehicle);
+ SteerAIPlaneTowardsTargetCoors((CAutomobile*)pVehicle);
return;
case MISSION_SLOWLY_DRIVE_TOWARDS_PLAYER_1:
SteerAICarWithPhysicsHeadingForTarget(pVehicle, nil,
@@ -2737,6 +2747,51 @@ void CCarCtrl::SteerAIHeliTowardsTargetCoors(CAutomobile* pHeli)
pHeli->GetMatrix().GetUp() = up;
}
+void CCarCtrl::SteerAIPlaneTowardsTargetCoors(CAutomobile* pPlane)
+{
+ CVector2D vecToTarget = pPlane->AutoPilot.m_vecDestinationCoors - pPlane->GetPosition();
+ float fForwardZ = (pPlane->AutoPilot.m_vecDestinationCoors.z - pPlane->GetPosition().z) / vecToTarget.Magnitude();
+ fForwardZ = clamp(fForwardZ, -0.3f, 0.3f);
+ float angle = CGeneral::GetATanOfXY(vecToTarget.x, vecToTarget.y);
+ while (angle > TWOPI)
+ angle -= TWOPI;
+ float difference = LimitRadianAngle(angle - pPlane->m_fOrientation);
+ float steer = difference > 0.0f ? 0.04f : -0.04f;
+ if (Abs(difference) < 0.2f)
+ steer *= 5.0f * Abs(difference);
+ pPlane->m_fPlaneSteer *= Pow(0.96f, CTimer::GetTimeStep());
+ float steerChange = steer - pPlane->m_fPlaneSteer;
+ float maxChange = 0.003f * CTimer::GetTimeStep();
+ if (Abs(steerChange) < maxChange)
+ pPlane->m_fPlaneSteer = steer;
+ else if (steerChange < 0.0f)
+ pPlane->m_fPlaneSteer -= maxChange;
+ else
+ pPlane->m_fPlaneSteer += maxChange;
+ pPlane->m_fOrientation += pPlane->m_fPlaneSteer * CTimer::GetTimeStep();
+ CVector up(0.0f, 0.0f, 1.0f);
+ up.Normalise();
+ CVector forward(Cos(pPlane->m_fOrientation), Sin(pPlane->m_fOrientation), fForwardZ);
+ forward.Normalise();
+ CVector right = CrossProduct(forward, up);
+ right.z -= 5.0f * pPlane->m_fPlaneSteer;
+ right.Normalise();
+ up = CrossProduct(forward, right);
+ up.Normalise();
+ right = CrossProduct(forward, up);
+ pPlane->GetMatrix().GetRight() = right;
+ pPlane->GetMatrix().GetForward() = forward;
+ pPlane->GetMatrix().GetUp() = up;
+ float newSplit = 1.0f - Pow(0.95f, CTimer::GetTimeStep());
+ float oldSplit = 1.0f - newSplit;
+#ifdef FIX_BUGS
+ pPlane->m_vecMoveSpeed = pPlane->m_vecMoveSpeed * oldSplit + pPlane->AutoPilot.GetCruiseSpeed() * 0.01f * forward * newSplit;
+#else
+ pPlane->m_vecMoveSpeed = pPlane->m_vecMoveSpeed * oldSplit + pPlane->AutoPilot.m_nCruiseSpeed * 0.01f * forward * newSplit;
+#endif
+ pPlane->m_vecTurnSpeed = CVector(0.0f, 0.0f, 0.0f);
+}
+
void CCarCtrl::SteerAICarWithPhysicsFollowPath(CVehicle* pVehicle, float* pSwerve, float* pAccel, float* pBrake, bool* pHandbrake)
{
CVector2D forward = pVehicle->GetForward();
diff --git a/src/control/CarCtrl.h b/src/control/CarCtrl.h
index 6b4e94ee..76491193 100644
--- a/src/control/CarCtrl.h
+++ b/src/control/CarCtrl.h
@@ -145,6 +145,7 @@ public:
return angle;
}
+ static bool bMadDriversCheat;
static int32 NumLawEnforcerCars;
static int32 NumAmbulancesOnDuty;
static int32 NumFiretrucksOnDuty;
diff --git a/src/control/Darkel.cpp b/src/control/Darkel.cpp
index bbb35080..75d27e26 100644
--- a/src/control/Darkel.cpp
+++ b/src/control/Darkel.cpp
@@ -32,9 +32,9 @@ int8 CDarkel::InterruptedWeapon;
* makes game handle sounds & messages instead of SCM (just like in GTA2)
* but it's never been used in the game. Has unused sliding text when frenzy completed etc.
*/
-int8 CDarkel::bStandardSoundAndMessages;
-int8 CDarkel::bNeedHeadShot;
-int8 CDarkel::bProperKillFrenzy;
+bool CDarkel::bStandardSoundAndMessages;
+bool CDarkel::bNeedHeadShot;
+bool CDarkel::bProperKillFrenzy;
uint16 CDarkel::Status;
uint16 CDarkel::RegisteredKills[NUM_DEFAULT_MODELS];
int32 CDarkel::ModelToKill;
diff --git a/src/control/Darkel.h b/src/control/Darkel.h
index 14529c63..0f5c2329 100644
--- a/src/control/Darkel.h
+++ b/src/control/Darkel.h
@@ -24,9 +24,9 @@ private:
static int32 AmmoInterruptedWeapon;
static int32 KillsNeeded;
static int8 InterruptedWeapon;
- static int8 bStandardSoundAndMessages;
- static int8 bNeedHeadShot;
- static int8 bProperKillFrenzy;
+ static bool bStandardSoundAndMessages;
+ static bool bNeedHeadShot;
+ static bool bProperKillFrenzy;
static uint16 Status;
static uint16 RegisteredKills[NUM_DEFAULT_MODELS];
static int32 ModelToKill;
diff --git a/src/control/GameLogic.cpp b/src/control/GameLogic.cpp
index 2af9464c..c5394e7c 100644
--- a/src/control/GameLogic.cpp
+++ b/src/control/GameLogic.cpp
@@ -28,6 +28,7 @@
#include "Particle.h"
#include "ColStore.h"
#include "Automobile.h"
+#include "MBlur.h"
uint8 CGameLogic::ActivePlayers;
uint8 CGameLogic::ShortCutState;
@@ -343,7 +344,10 @@ CGameLogic::RestorePlayerStuffDuringResurrection(CPlayerPed *pPlayerPed, CVector
pPlayerPed->bIsVisible = true;
pPlayerPed->m_bloodyFootprintCountOrDeathTime = 0;
pPlayerPed->bDoBloodyFootprints = false;
- //TODO(MIAMI): clear drunk stuff
+ pPlayerPed->m_nDrunkenness = 0;
+ pPlayerPed->m_nFadeDrunkenness = 0;
+ CMBlur::ClearDrunkBlur();
+ pPlayerPed->m_nDrunkCountdown = 0;
pPlayerPed->ClearAdrenaline();
pPlayerPed->m_fCurrentStamina = pPlayerPed->m_fMaxStamina;
if (pPlayerPed->m_pFire)
@@ -368,7 +372,7 @@ CGameLogic::RestorePlayerStuffDuringResurrection(CPlayerPed *pPlayerPed, CVector
CWorld::ClearExcitingStuffFromArea(pos, 4000.0, 1);
pPlayerPed->RestoreHeadingRate();
CGame::currArea = AREA_MAIN_MAP;
- //CStreaming::RemoveBuildingsNotInArea(0); // TODO(MIAMI)
+ CStreaming::RemoveBuildingsNotInArea(0);
TheCamera.SetCameraDirectlyInFrontForFollowPed_CamOnAString();
TheCamera.Restore();
CReferences::RemoveReferencesToPlayer();
diff --git a/src/control/Garages.cpp b/src/control/Garages.cpp
index e7b5ebe6..9aba431c 100644
--- a/src/control/Garages.cpp
+++ b/src/control/Garages.cpp
@@ -1324,7 +1324,7 @@ void CGarage::RemoveCarsBlockingDoorNotInside()
if (!IsEntityTouching3D(pVehicle))
continue;
if (!IsPointInsideGarage(pVehicle->GetPosition())) {
- if (pVehicle->bIsLocked && pVehicle->CanBeDeleted()) {
+ if (!pVehicle->bIsLocked && pVehicle->CanBeDeleted()) {
CWorld::Remove(pVehicle);
delete pVehicle;
return; // WHY?
@@ -1817,8 +1817,9 @@ CVehicle* CStoredCar::RestoreCar()
pVehicle->m_nRadioStation = m_nRadioStation;
pVehicle->bFreebies = false;
#ifdef FIX_BUGS
- ((CAutomobile*)pVehicle)->m_bombType = m_nCarBombType;
+ if (pVehicle->IsCar())
#endif
+ ((CAutomobile*)pVehicle)->m_bombType = m_nCarBombType;
pVehicle->bHasBeenOwnedByPlayer = true;
pVehicle->m_nDoorLock = CARLOCK_UNLOCKED;
pVehicle->bBulletProof = m_bBulletproof;
diff --git a/src/control/Remote.cpp b/src/control/Remote.cpp
index 904e9023..164a2f4c 100644
--- a/src/control/Remote.cpp
+++ b/src/control/Remote.cpp
@@ -9,6 +9,8 @@
#include "PlayerInfo.h"
#include "Vehicle.h"
+//--MIAMI: file done
+
void
CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uint16 model)
{
@@ -35,17 +37,24 @@ CRemote::GivePlayerRemoteControlledCar(float x, float y, float z, float rot, uin
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = car;
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->RegisterReference((CEntity**)&CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle);
- TheCamera.TakeControl(car, CCam::MODE_BEHINDCAR, INTERPOLATION, CAMCONTROL_SCRIPT);
+ if (car->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE || car->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI) {
+ TheCamera.TakeControl(car, CCam::MODE_CAM_ON_A_STRING, INTERPOLATION, CAMCONTROL_SCRIPT);
+ TheCamera.SetZoomValueCamStringScript(0);
+ } else
+ TheCamera.TakeControl(car, CCam::MODE_BEHINDCAR, INTERPOLATION, CAMCONTROL_SCRIPT);
}
void
-CRemote::TakeRemoteControlledCarFromPlayer(void)
+CRemote::TakeRemoteControlledCarFromPlayer(bool blowUp)
{
- CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy = RANDOM_VEHICLE;
- CCarCtrl::NumMissionCars--;
- CCarCtrl::NumRandomCars++;
+ if (CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy == MISSION_VEHICLE) {
+ CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->VehicleCreatedBy = RANDOM_VEHICLE;
+ CCarCtrl::NumMissionCars--;
+ CCarCtrl::NumRandomCars++;
+ }
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bIsLocked = false;
CWorld::Players[CWorld::PlayerInFocus].m_nTimeLostRemoteCar = CTimer::GetTimeInMilliseconds();
CWorld::Players[CWorld::PlayerInFocus].m_bInRemoteMode = true;
- CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bRemoveFromWorld = true;
+ CWorld::Players[CWorld::PlayerInFocus].field_D5 = blowUp;
+ CWorld::Players[CWorld::PlayerInFocus].field_D6 = true;
}
diff --git a/src/control/Remote.h b/src/control/Remote.h
index 5e474586..72cabb7c 100644
--- a/src/control/Remote.h
+++ b/src/control/Remote.h
@@ -4,5 +4,5 @@ class CRemote
{
public:
static void GivePlayerRemoteControlledCar(float, float, float, float, uint16);
- static void TakeRemoteControlledCarFromPlayer(void);
+ static void TakeRemoteControlledCarFromPlayer(bool blowUp = true);
};
diff --git a/src/control/Replay.cpp b/src/control/Replay.cpp
index 1a050bee..80c05f31 100644
--- a/src/control/Replay.cpp
+++ b/src/control/Replay.cpp
@@ -39,6 +39,7 @@
#include "Text.h"
#include "Camera.h"
#include "Radar.h"
+#include "Fluff.h"
uint8 CReplay::Mode;
CAddressInReplayBuffer CReplay::Record;
@@ -229,7 +230,7 @@ void CReplay::EnableReplays(void)
void PlayReplayFromHD(void);
void CReplay::Update(void)
{
- if (CCutsceneMgr::IsCutsceneProcessing() || CTimer::GetIsPaused())
+ if (CCutsceneMgr::IsCutsceneProcessing() || CTimer::GetIsPaused() || CScriptPaths::IsOneActive())
return;
switch (Mode){
case MODE_RECORD:
@@ -1175,6 +1176,7 @@ void CReplay::StoreStuffInMem(void)
if (ped)
StoreDetailedPedAnimation(ped, &pPedAnims[i]);
}
+ CScriptPaths::Save_ForReplay();
}
void CReplay::RestoreStuffFromMem(void)
@@ -1351,6 +1353,7 @@ void CReplay::RestoreStuffFromMem(void)
}
delete[] pPedAnims;
pPedAnims = nil;
+ CScriptPaths::Load_ForReplay();
DMAudio.ChangeMusicMode(MUSICMODE_FRONTEND);
DMAudio.SetRadioInCar(OldRadioStation);
DMAudio.ChangeMusicMode(MUSICMODE_GAME);
diff --git a/src/control/Script.cpp b/src/control/Script.cpp
index eb950464..bf761a3f 100644
--- a/src/control/Script.cpp
+++ b/src/control/Script.cpp
@@ -82,6 +82,7 @@
#include "main.h"
#include "Ropes.h"
#include "MBlur.h"
+#include "Fluff.h"
#ifdef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
#include <stdarg.h>
#endif
@@ -1806,7 +1807,7 @@ void CMissionCleanup::Process()
// TODO(MIAMI)
//CSpecialFX::bLiftCam = false;
//CSpecialFX::bVideoCam = false;
- //CTimeCycle::StopExtraColour(0);
+ CTimeCycle::StopExtraColour(0);
for (int i = 0; i < MISSION_AUDIO_SLOTS; i++)
DMAudio.ClearMissionAudio(i);
CWeather::ReleaseWeather();
@@ -1822,8 +1823,11 @@ void CMissionCleanup::Process()
CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByCops = false;
CWorld::Players[0].m_pPed->m_pWanted->m_bIgnoredByEveryone = false;
CWorld::Players[0].MakePlayerSafe(false);
- //TODO(MIAMI): drunkenness, enable drive by
- //DMAudio::ShutUpPlayerTalking(0);
+ CWorld::Players[0].m_pPed->m_nFadeDrunkenness = 1;
+ CWorld::Players[0].m_pPed->m_nDrunkCountdown = 0;
+ CPad::GetPad(0)->SetDrunkInputDelay(0);
+ CWorld::Players[0].m_bDriveByAllowed = true;
+ // DMAudio::ShutUpPlayerTalking(0); // TODO(Miami)
CVehicle::bDisableRemoteDetonation = false;
CVehicle::bDisableRemoteDetonationOnContact = false;
CGameLogic::ClearShortCut();
@@ -3130,7 +3134,7 @@ int8 CRunningScript::ProcessCommands0To99(int32 command)
{
CollectParameters(&m_nIp, 4);
int32 index = ScriptParams[0];
- assert(index < NUMPLAYERS);
+ script_assert(index < NUMPLAYERS);
printf("&&&&&&&&&&&&&Creating player: %d\n", index);
if (!CStreaming::HasModelLoaded(MI_PLAYER)) {
CStreaming::RequestSpecialModel(MI_PLAYER, "player", STREAMFLAGS_DONT_REMOVE | STREAMFLAGS_DEPENDENCY);
@@ -5171,7 +5175,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
if (pPed->bInVehicle)
return 0;
pPed->m_fRotationDest = pPed->m_fRotationCur = DEGTORAD(*(float*)&ScriptParams[1]);
@@ -5353,7 +5357,7 @@ int8 CRunningScript::ProcessCommands300To399(int32 command)
if (pos.z <= MAP_Z_LOW_LIMIT)
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
CRadar::GetActualBlipArrayIndex(CollectNextParameterWithoutIncreasingPC(m_nIp));
- int handle = CRadar::SetCoordBlip(BLIP_COORD, pos, 2, BLIP_DISPLAY_BOTH);
+ int handle = CRadar::SetCoordBlip(BLIP_CONTACT_POINT, pos, 2, BLIP_DISPLAY_BOTH);
CRadar::ChangeBlipScale(handle, 3);
ScriptParams[0] = handle;
StoreParameters(&m_nIp, 1);
@@ -5997,7 +6001,7 @@ int8 CRunningScript::ProcessCommands400To499(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[1]);
pPed->bScriptObjectiveCompleted = false;
pPed->SetObjective(OBJECTIVE_DESTROY_OBJECT, pVehicle);
@@ -9792,7 +9796,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
CVector pos = *(CVector*)&ScriptParams[0];
if (pos.z <= MAP_Z_LOW_LIMIT)
pos.z = CWorld::FindGroundZForCoord(pos.x, pos.y);
- C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, 4, pos, *(float*)&ScriptParams[3],
+ C3dMarkers::PlaceMarkerSet((uintptr)this + m_nIp, MARKERTYPE_CYLINDER, pos, *(float*)&ScriptParams[3],
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A,
SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
return 0;
@@ -10225,11 +10229,11 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
return 0;
CVehicle* car;
if (CModelInfo::IsBikeModel(model)) {
- car = new CBike(model, MISSION_VEHICLE);
+ car = new CBike(model, RANDOM_VEHICLE);
((CBike*)(car))->bIsStanding = true;
}
else
- car = new CAutomobile(model, MISSION_VEHICLE);
+ car = new CAutomobile(model, RANDOM_VEHICLE);
CVector pos = *(CVector*)&ScriptParams[0];
pos.z += car->GetDistanceFromCentreOfMassToBaseOfModel();
car->SetPosition(pos);
@@ -10447,7 +10451,7 @@ int8 CRunningScript::ProcessCommands900To999(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bScriptObjectiveCompleted = false;
pPed->SetObjective(OBJECTIVE_LEAVE_CAR, pPed->m_pMyVehicle);
return 0;
@@ -10587,15 +10591,17 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
CollectParameters(&m_nIp, 1);
CTimer::Stop();
CGame::currLevel = (eLevelName)ScriptParams[0];
-#ifndef NO_ISLAND_LOADING
- CStreaming::RemoveUnusedBigBuildings(CGame::currLevel);
- CStreaming::RemoveUnusedBuildings(CGame::currLevel);
-#endif
+ ISLAND_LOADING_IS(LOW)
+ {
+ CStreaming::RemoveUnusedBigBuildings(CGame::currLevel);
+ CStreaming::RemoveUnusedBuildings(CGame::currLevel);
+ }
CCollision::SortOutCollisionAfterLoad();
-#ifndef NO_ISLAND_LOADING
- CStreaming::RequestIslands(CGame::currLevel);
- CStreaming::LoadAllRequestedModels(true);
-#endif
+ ISLAND_LOADING_ISNT(HIGH)
+ {
+ CStreaming::RequestIslands(CGame::currLevel);
+ CStreaming::LoadAllRequestedModels(true);
+ }
CTimer::Update();
return 0;
}
@@ -10642,14 +10648,15 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
case COMMAND_SET_DRUNK_INPUT_DELAY:
{
CollectParameters(&m_nIp, 2);
- debug("SET_DRUNK_INPUT_DELAY not implemented\n");
+ assert(ScriptParams[1] < CPad::DRUNK_STEERING_BUFFER_SIZE);
+ CPad::GetPad(ScriptParams[0])->SetDrunkInputDelay(ScriptParams[1]);
return 0;
}
case COMMAND_SET_CHAR_MONEY:
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->m_nPedMoney = ScriptParams[1];
pPed->bMoneyHasBeenGivenByScript = true;
return 0;
@@ -10659,7 +10666,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
{
CollectParameters(&m_nIp, 4);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
CVector result = Multiply3x3(pObject->GetMatrix(), *(CVector*)&ScriptParams[1]) + pObject->GetPosition();
*(CVector*)&ScriptParams[0] = result;
StoreParameters(&m_nIp, 3);
@@ -10692,7 +10699,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
{
CollectParameters(&m_nIp, 4);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
CVector result = Multiply3x3(pVehicle->GetMatrix(), *(CVector*)&ScriptParams[1]) + pVehicle->GetPosition();
*(CVector*)&ScriptParams[0] = result;
StoreParameters(&m_nIp, 3);
@@ -10920,7 +10927,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
#ifdef USE_MEASUREMENTS_IN_METERS
UpdateCompareFlag(true);
#else
- UpdateCompareFlag(false)
+ UpdateCompareFlag(false);
#endif
return 0;
case COMMAND_CONVERT_METRES_TO_FEET:
@@ -11050,7 +11057,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
UpdateCompareFlag(ScriptParams[1] < pVehicle->m_nNumMaxPassengers && pVehicle->pPassengers[ScriptParams[1]] == nil);
return 0;
}
@@ -11201,7 +11208,7 @@ int8 CRunningScript::ProcessCommands1000To1099(int32 command)
return 0;
*/
case COMMAND_ARE_ANY_CAR_CHEATS_ACTIVATED:
- UpdateCompareFlag(CVehicle::bAllDodosCheat || CVehicle::bCheat3); // TODO(MIAMI): more cheats!
+ UpdateCompareFlag(CVehicle::bAllDodosCheat || CVehicle::bCheat3 || CVehicle::bHoverCheat || CVehicle::bCheat8); // TODO(MIAMI): more cheats!
return 0;
case COMMAND_SET_CHAR_SUFFERS_CRITICAL_HITS:
{
@@ -11273,24 +11280,33 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
CTimer::Stop();
CGame::currLevel = (eLevelName)ScriptParams[0];
if (CGame::currLevel != CCollision::ms_collisionInMemory) {
-#ifndef NO_ISLAND_LOADING
- DMAudio.SetEffectsFadeVol(0);
- CPad::StopPadsShaking();
- CCollision::LoadCollisionScreen(CGame::currLevel);
- DMAudio.Service();
-#endif
+ ISLAND_LOADING_IS(LOW)
+ {
+ DMAudio.SetEffectsFadeVol(0);
+ CPad::StopPadsShaking();
+ CCollision::LoadCollisionScreen(CGame::currLevel);
+ DMAudio.Service();
+ }
CPopulation::DealWithZoneChange(CCollision::ms_collisionInMemory, CGame::currLevel, false);
-#ifndef NO_ISLAND_LOADING
- CStreaming::RemoveUnusedBigBuildings(CGame::currLevel);
- CStreaming::RemoveUnusedBuildings(CGame::currLevel);
-#endif
+
+ ISLAND_LOADING_IS(LOW)
+ {
+ CStreaming::RemoveUnusedBigBuildings(CGame::currLevel);
+ CStreaming::RemoveUnusedBuildings(CGame::currLevel);
+ }
CCollision::SortOutCollisionAfterLoad();
-#ifndef NO_ISLAND_LOADING
- CStreaming::RequestIslands(CGame::currLevel);
- CStreaming::RequestBigBuildings(CGame::currLevel);
- CStreaming::LoadAllRequestedModels(true);
- DMAudio.SetEffectsFadeVol(127);
-#endif
+
+ ISLAND_LOADING_ISNT(HIGH)
+ CStreaming::RequestIslands(CGame::currLevel);
+
+ ISLAND_LOADING_IS(LOW)
+ CStreaming::RequestBigBuildings(CGame::currLevel);
+
+ ISLAND_LOADING_ISNT(HIGH)
+ CStreaming::LoadAllRequestedModels(true);
+
+ ISLAND_LOADING_IS(LOW)
+ DMAudio.SetEffectsFadeVol(127);
}
CTimer::Update();
return 0;
@@ -11893,7 +11909,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->m_ceaseAttackTimer = ScriptParams[1];
return 0;
}
@@ -11929,7 +11945,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
pVehicle->m_nRouteSeed = ScriptParams[1];
return 0;
}
@@ -11946,7 +11962,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->ClearWeapons();
return 0;
}
@@ -11954,7 +11970,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
bool bFound = false;
for (int i = 0; i < TOTAL_WEAPON_SLOTS; i++) {
if (pPed->GetWeapon(i).m_eWeaponType == ScriptParams[1]) {
@@ -11971,7 +11987,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle && pVehicle->m_vehType == VEHICLE_TYPE_CAR);
+ script_assert(pVehicle && pVehicle->m_vehType == VEHICLE_TYPE_CAR);
((CAutomobile*)pVehicle)->bTankDetonateCars = ScriptParams[1];
return 0;
}
@@ -11990,7 +12006,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
bool bOnFire = false;
if (pVehicle->m_pCarFire)
bOnFire = true;
@@ -12005,7 +12021,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
bool bIsBurst = false;
CBike* pBike = (CBike*)pVehicle;
if (pVehicle->m_vehType == VEHICLE_APPEARANCE_BIKE) {
@@ -12042,43 +12058,49 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
//case COMMAND_IS_PLAYER_STANDING_ON_A_VEHICLE:
//case COMMAND_IS_PLAYER_FOOT_DOWN:
//case COMMAND_IS_CHAR_FOOT_DOWN:
- case COMMAND_INITIALISE_OBJECT_PATH:
- // TODO(MIAMI): script path
+ case COMMAND_INITIALISE_OBJECT_PATH: {
CollectParameters(&m_nIp, 2);
- debug("INITALISE_OBJECT_PATH not yet implemented, skipping\n");
- ScriptParams[0] = 0;
+ int32 counter = 0;
+ while (counter < 3 && CScriptPaths::aArray[counter].m_state != SCRIPT_PATH_DISABLED) {
+ counter++;
+ }
+ CScriptPaths::aArray[counter].InitialiseOne(ScriptParams[0], *(float*)&ScriptParams[1]);
+ ScriptParams[0] = counter;
StoreParameters(&m_nIp, 1);
return 0;
+ }
case COMMAND_START_OBJECT_ON_PATH:
{
CollectParameters(&m_nIp, 2);
- debug("START_OBJECT_ON_PATH not yet implemented, skipping\n");
+ CObject *pObj = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
+ assert(pObj);
+ CScriptPaths::aArray[ScriptParams[1]].SetObjectToControl(pObj);
return 0;
}
case COMMAND_SET_OBJECT_PATH_SPEED:
{
CollectParameters(&m_nIp, 2);
- debug("SET_OBJECT_PATH_SPEED not yet implemented, skipping\n");
+ CScriptPaths::aArray[ScriptParams[0]].m_fSpeed = *(float*)&ScriptParams[1];
return 0;
}
case COMMAND_SET_OBJECT_PATH_POSITION:
{
CollectParameters(&m_nIp, 2);
- debug("SET_OBJECT_PATH_POSITION not yet implemented, skipping\n");
+ CScriptPaths::aArray[ScriptParams[0]].m_fPosition = *(float*)&ScriptParams[1];
return 0;
}
//case COMMAND_GET_OBJECT_DISTANCE_ALONG_PATH:
case COMMAND_CLEAR_OBJECT_PATH:
{
CollectParameters(&m_nIp, 1);
- debug("CLEAR_OBJECT_PATH not yet implemented, skipping\n");
+ CScriptPaths::aArray[ScriptParams[0]].Clear();
return 0;
}
case COMMAND_HELI_GOTO_COORDS:
{
CollectParameters(&m_nIp, 5);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle && pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI);
+ script_assert(pVehicle && pVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI);
((CAutomobile*)pVehicle)->TellHeliToGoToCoors(*(float*)&ScriptParams[1], *(float*)&ScriptParams[2], *(float*)&ScriptParams[3], ScriptParams[4]);
return 0;
}
@@ -12121,7 +12143,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT);
return 0;
}
@@ -12129,7 +12151,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT);
return 0;
}
@@ -12137,7 +12159,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI);
return 0;
}
@@ -12145,7 +12167,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI);
return 0;
}
@@ -12153,7 +12175,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE);
return 0;
}
@@ -12161,7 +12183,7 @@ int8 CRunningScript::ProcessCommands1100To1199(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI);
return 0;
}
@@ -12256,7 +12278,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
ScriptParams[0] = pPed->GetWeapon(ScriptParams[1]).m_eWeaponType;
ScriptParams[1] = pPed->GetWeapon(ScriptParams[1]).m_nAmmoTotal;
ScriptParams[2] = CPickups::ModelForWeapon((eWeaponType)ScriptParams[0]);
@@ -12276,17 +12298,17 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
float speed = *(float*)&ScriptParams[1] / GAME_SPEED_TO_CARAI_SPEED;
pVehicle->SetMoveSpeed(pVehicle->GetForward() * speed);
- // TODO(MIAMI): heli hack!
+ if (pVehicle->IsRealHeli() && pVehicle->IsCar())
+ ((CAutomobile*)pVehicle)->m_aWheelSpeed[1] = 0.22f;
return 0;
}
case COMMAND_SET_AREA_VISIBLE:
CollectParameters(&m_nIp, 1);
CGame::currArea = ScriptParams[0];
- // TODO(MIAMI) !!
- //CStreaming::RemoveBuildingsNotInArea(ScriptParams[0]);
+ CStreaming::RemoveBuildingsNotInArea(ScriptParams[0]);
return 0;
case COMMAND_SET_CUTSCENE_ANIM_TO_LOOP:
{
@@ -12300,7 +12322,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
pVehicle->bPartOfConvoy = ScriptParams[1];
return 0;
}
@@ -12332,9 +12354,9 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
CPed* pTargetPed = CPools::GetPedPool()->GetAt(ScriptParams[1]);
- assert(pTargetPed);
+ script_assert(pTargetPed);
pPed->bScriptObjectiveCompleted = false;
pPed->SetObjective(OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING, pTargetPed);
return 0;
@@ -12344,7 +12366,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 4);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
CVector result = Multiply3x3(pPed->GetMatrix(), *(CVector*)&ScriptParams[1]) + pPed->GetPosition();
*(CVector*)&ScriptParams[0] = result;
StoreParameters(&m_nIp, 3);
@@ -12354,7 +12376,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
bool result = false;
if (pPed->bHasBeenPhotographed) {
result = true;
@@ -12367,9 +12389,9 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
CPed* pTargetPed = CPools::GetPedPool()->GetAt(ScriptParams[1]);
- assert(pTargetPed);
+ script_assert(pTargetPed);
pPed->bScriptObjectiveCompleted = false;
pPed->SetObjective(OBJECTIVE_AIM_GUN_AT, pTargetPed);
return 0;
@@ -12385,7 +12407,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && (pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI || pPed->m_pMyVehicle->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE));
return 0;
}
@@ -12415,7 +12437,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli());
+ script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli());
float fAngle = DEGTORAD(*(float*)&ScriptParams[1] - 90.0f);
while (fAngle < 0.0f)
fAngle += TWOPI;
@@ -12428,14 +12450,16 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli());
+ script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli());
pHeli->ClearHeliOrientation();
return 0;
}
case COMMAND_PLANE_GOTO_COORDS:
{
CollectParameters(&m_nIp, 5);
- debug("PLANE_GOTO_COORS is not implemented\n"); // TODO(MIAMI)
+ CAutomobile* pPlane = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
+ script_assert(pPlane && pPlane->IsCar() && pPlane->IsRealPlane());
+ pPlane->TellPlaneToGoToCoors(*(float*)&ScriptParams[1], *(float*)&ScriptParams[2], *(float*)&ScriptParams[3], ScriptParams[4]);
return 0;
}
case COMMAND_GET_NTH_CLOSEST_CAR_NODE:
@@ -12467,7 +12491,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bIsFrozen = ScriptParams[1];
return 0;
}
@@ -12475,7 +12499,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bDrownsInWater = ScriptParams[1];
return 0;
}
@@ -12483,7 +12507,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
pObject->bUseCollisionRecords = ScriptParams[1];
return 0;
}
@@ -12491,7 +12515,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
UpdateCompareFlag(pObject->m_nCollisionRecords != 0);
return 0;
}
@@ -12505,7 +12529,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
ScriptParams[0] = pPed->m_fArmour;
StoreParameters(&m_nIp, 1);
return 0;
@@ -12515,7 +12539,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
pVehicle->bHeliMinimumTilt = ScriptParams[1];
return 0;
}
@@ -12523,7 +12547,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
pVehicle->AutoPilot.m_nSwitchDistance = ScriptParams[1];
return 0;
}
@@ -12531,7 +12555,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pCar&& pCar->IsCar());
+ script_assert(pCar&& pCar->IsCar());
pCar->PopBoot();
return 0;
}
@@ -12564,7 +12588,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
UpdateCompareFlag(pObject->bIsInWater);
return 0;
}
@@ -12577,7 +12601,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 3);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
if (ScriptParams[1]) {
pPed->bIsDucking = true;
pPed->SetDuck(ScriptParams[2], true);
@@ -12641,7 +12665,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bIsStaticWaitingForCollision);
return 0;
}
@@ -12649,7 +12673,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
UpdateCompareFlag(pVehicle->bIsStaticWaitingForCollision);
return 0;
}
@@ -12657,7 +12681,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
UpdateCompareFlag(pObject->bIsStaticWaitingForCollision);
return 0;
}
@@ -12680,7 +12704,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 3);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bIsPlayerFriend = ScriptParams[2];
return 0;
}
@@ -12688,7 +12712,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
case COMMAND_DISPLAY_NTH_ONSCREEN_COUNTER_WITH_STRING:
{
char onscreen_str[12];
- assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR);
+ script_assert(CTheScripts::ScriptSpace[m_nIp++] == ARGUMENT_GLOBALVAR);
int16 var = CTheScripts::Read2BytesFromScript(&m_nIp);
CollectParameters(&m_nIp, 2);
wchar* text = TheText.Get((char*)&CTheScripts::ScriptSpace[m_nIp]); // ???
@@ -12709,27 +12733,33 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
case COMMAND_SET_EXTRA_COLOURS:
{
CollectParameters(&m_nIp, 2);
- debug("SET_EXTRA_COLOURS not implemented, skipping\n");
+ CTimeCycle::StartExtraColour(ScriptParams[0]-1, ScriptParams[1] != 0);
return 0;
}
case COMMAND_CLEAR_EXTRA_COLOURS:
{
CollectParameters(&m_nIp, 1);
- debug("CLEAR_EXTRA_COLOURS not implemented, skipping\n");
+ CTimeCycle::StopExtraColour(ScriptParams[0]);
return 0;
}
//case COMMAND_CLOSE_CAR_BOOT:
case COMMAND_GET_WHEELIE_STATS:
{
CollectParameters(&m_nIp, 1);
- static bool bShowed = false;
- if (!bShowed) {
- debug("GET_WHEELIE_STATS not implemented\n");
- bShowed = true;
- }
- for (int i = 0; i < 6; i++)
- ScriptParams[i] = 0;
+ CPlayerInfo* pPlayerInfo = &CWorld::Players[ScriptParams[0]];
+ ScriptParams[0] = pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels;
+ ScriptParams[1] = *(int*)&pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels;
+ ScriptParams[2] = pPlayerInfo->m_nLastTimeSpentOnWheelie;
+ ScriptParams[3] = *(int*)&pPlayerInfo->m_nLastDistanceTravelledOnWheelie;
+ ScriptParams[4] = pPlayerInfo->m_nLastTimeSpentOnStoppie;
+ ScriptParams[5] = *(int*)&pPlayerInfo->m_nLastDistanceTravelledOnStoppie;
StoreParameters(&m_nIp, 6);
+ pPlayerInfo->m_nLastTimeCarSpentOnTwoWheels = 0;
+ pPlayerInfo->m_nLastDistanceCarTravelledOnTwoWheels = 0.0f;
+ pPlayerInfo->m_nLastTimeSpentOnWheelie = 0;
+ pPlayerInfo->m_nLastDistanceTravelledOnWheelie = 0.0f;
+ pPlayerInfo->m_nLastTimeSpentOnStoppie = 0;
+ pPlayerInfo->m_nLastDistanceTravelledOnStoppie = 0.0f;
return 0;
}
//case COMMAND_DISARM_CHAR:
@@ -12753,7 +12783,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->m_prevObjective == OBJECTIVE_NONE && pPed->m_objective == OBJECTIVE_NONE);
return 0;
}
@@ -12766,7 +12796,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
for (int i = 0; i < KEY_LENGTH_IN_SCRIPT; i++)
key[i] = tolower(key[i]);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(strcmp(key, CModelInfo::GetModelInfo(pPed->GetModelIndex())->GetName()) == 0);
return 0;
}
@@ -12781,7 +12811,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 3);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
CVector pos;
pos.x = *(float*)&ScriptParams[1];
pos.y = *(float*)&ScriptParams[2];
@@ -12814,7 +12844,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pCar&& pCar->IsCar());
+ script_assert(pCar&& pCar->IsCar());
pCar->CloseAllDoors();
return 0;
}
@@ -12836,7 +12866,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CAutomobile* pCar = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pCar && pCar->IsCar());
+ script_assert(pCar && pCar->IsCar());
pCar->PopBootUsingPhysics();
return 0;
}
@@ -12845,7 +12875,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->m_objective == OBJECTIVE_LEAVE_CAR_AND_DIE);
return 0;
}
@@ -12853,7 +12883,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 2);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
pObject->m_pCollidingEntity = CPools::GetVehiclePool()->GetAt(ScriptParams[1]);
return 0;
}
@@ -12862,7 +12892,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
{
CollectParameters(&m_nIp, 5);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(CWorld::IsWanderPathClear(pPed->GetPosition(), *(CVector*)&ScriptParams[0], *(float*)&ScriptParams[3], 4));
return 0;
}
@@ -12875,7 +12905,7 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
}
//case COMMAND_PRINT_HELP_FOREVER_WITH_NUMBER:
default:
- assert(0);
+ script_assert(0);
}
return -1;
}
@@ -12887,7 +12917,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 3);
CPed* pTarget = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pTarget);
+ script_assert(pTarget);
uint8 flag = 1 << (uint8)ScriptParams[1];
if (ScriptParams[2])
pTarget->m_gangFlags |= flag;
@@ -12933,7 +12963,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
pVehicle->bIsFrozen = ScriptParams[1];
return 0;
}
@@ -12987,32 +13017,38 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
case COMMAND_ATTACH_CUTSCENE_OBJECT_TO_BONE:
{
CollectParameters(&m_nIp, 3);
- debug("ATTACH_CUTSCENE_OBJECT_TO_BONE not implemented, skipping\n"); // TODO(MIAMI)
+ CCutsceneMgr::AttachObjectToBone(CPools::GetObjectPool()->GetAt(ScriptParams[0]), CPools::GetObjectPool()->GetAt(ScriptParams[1]), ScriptParams[2]);
return 0;
}
case COMMAND_ATTACH_CUTSCENE_OBJECT_TO_COMPONENT:
{
CollectParameters(&m_nIp, 2);
- debug("ATTACH_CUTSCENE_OBJECT_TO_COMPONENT not implemented, skipping\n"); // TODO(MIAMI)
+ CObject *obj1 = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
+ CObject *obj2 = CPools::GetObjectPool()->GetAt(ScriptParams[1]);
+
+ char key[KEY_LENGTH_IN_SCRIPT];
+ CTheScripts::ReadTextLabelFromScript(&m_nIp, key);
m_nIp += KEY_LENGTH_IN_SCRIPT;
+
+ CCutsceneMgr::AttachObjectToFrame(obj1, obj2, key);
return 0;
}
case COMMAND_SET_CHAR_STAY_IN_CAR_WHEN_JACKED:
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bStayInCarOnJack = ScriptParams[1];
return 0;
}
//case COMMAND_IS_MISSION_AUDIO_LOADING:
case COMMAND_ADD_MONEY_SPENT_ON_WEAPONS:
CollectParameters(&m_nIp, 1);
- debug("ADD_MONEY_SPENT_ON_WEAPON not implemented\n"); // TODO(MIAMI)
+ CStats::MoneySpentOnWeapons(ScriptParams[0]);
return 0;
case COMMAND_ADD_MONEY_SPENT_ON_PROPERTY:
CollectParameters(&m_nIp, 1);
- debug("ADD_MONEY_SPENT_ON_PROPERTY not implemented\n"); // TODO(MIAMI)
+ CStats::MoneySpentOnProperty(ScriptParams[0]);
return 0;
//case COMMAND_ADD_MONEY_SPENT_ON_AUTO_PAINTING:
case COMMAND_SET_CHAR_ANSWERING_MOBILE:
@@ -13041,21 +13077,21 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
//case COMMAND_ADD_LOAN_SHARK_VISITS:
case COMMAND_ADD_STORES_KNOCKED_OFF:
CollectParameters(&m_nIp, 1);
- debug("ADD_STORES_KNOCKED_OFF not implemented\n"); // TODO(MIAMI)
+ CStats::NumOfStoresKnockedOff(ScriptParams[0]);
return 0;
//case COMMAND_ADD_MOVIE_STUNTS:
case COMMAND_ADD_NUMBER_OF_ASSASSINATIONS:
CollectParameters(&m_nIp, 1);
- debug("ADD_NUMBER_OF_ASSASSINATIONS not implemented\n"); // TODO(MIAMI)
+ CStats::NumOfAssassinations(ScriptParams[0]);
return 0;
case COMMAND_ADD_PIZZAS_DELIVERED:
CollectParameters(&m_nIp, 1);
- debug("ADD_PIZZAS_DELIVERED not implemented\n"); // TODO(MIAMI)
+ CStats::NumOfPizzasDelivered(ScriptParams[0]);
return 0;
//case COMMAND_ADD_GARBAGE_PICKUPS:
case COMMAND_ADD_ICE_CREAMS_SOLD:
CollectParameters(&m_nIp, 1);
- debug("ADD_ICE_CREAMS_SOLD not implemented\n"); // TODO(MIAMI)
+ CStats::NumOfIceCreamSold(ScriptParams[0]);
return 0;
//case COMMAND_SET_TOP_SHOOTING_RANGE_SCORE:
//case COMMAND_ADD_SHOOTING_RANGE_RANK:
@@ -13066,7 +13102,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bDontFight = !ScriptParams[1];
return 0;
}
@@ -13074,7 +13110,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->ClearWaitState();
return 0;
}
@@ -13109,7 +13145,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
pVehicle->bTyresDontBurst = !ScriptParams[1];
return 0;
}
@@ -13117,7 +13153,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
pPed->bDoomAim = ScriptParams[1];
return 0;
}
@@ -13137,15 +13173,15 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
}
case COMMAND_SET_PROPERTY_AS_OWNED:
CollectParameters(&m_nIp, 1);
- debug("SET_PROPERTY_AS_OWNED not implemented\n"); // TODO(MIAMI)
+ CStats::AddPropertyAsOwned(ScriptParams[0]);
return 0;
case COMMAND_ADD_BLOOD_RING_KILLS:
CollectParameters(&m_nIp, 1);
- debug("ADD_BLOOD_RING_KILLS not implemented\n"); // TODO(MIAMI)
+ CStats::AddNumBloodRingKills(ScriptParams[0]);
return 0;
case COMMAND_SET_LONGEST_TIME_IN_BLOOD_RING:
CollectParameters(&m_nIp, 1);
- debug("SET_LONGEST_TIME_IN_BLOOD_RING not implemented\n"); // TODO(MIAMI)
+ CStats::LongestTimeInBloodRing(ScriptParams[0]);
return 0;
case COMMAND_REMOVE_EVERYTHING_FOR_HUGE_CUTSCENE:
{
@@ -13156,7 +13192,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[1]);
CPhysical* pTestedEntity = pPed;
if (pPed->bInVehicle && pPed->m_pMyVehicle)
@@ -13188,7 +13224,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
if (pPed->GetPedState() == PED_FOLLOW_PATH) {
pPed->RestorePreviousState();
pPed->ClearFollowPath();
@@ -13199,14 +13235,14 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bCanBeShotInVehicle = ScriptParams[1];
return 0;
}
case COMMAND_ATTACH_CUTSCENE_OBJECT_TO_VEHICLE:
{
CollectParameters(&m_nIp, 2);
- debug("ATTACH_CUTSCENE_OBJECT_TO_VEHICLE not implemented\n"); // TODO(MIAMI)
+ CCutsceneMgr::AttachObjectToParent(CPools::GetObjectPool()->GetAt(ScriptParams[0]), CPools::GetVehiclePool()->GetAt(ScriptParams[1]));
return 0;
}
case COMMAND_LOAD_MISSION_TEXT:
@@ -13238,7 +13274,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
pObject->bIsFrozen = ScriptParams[1];
return 0;
}
@@ -13271,7 +13307,8 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
//case COMMAND_SET_CHAR_OBJ_GOTO_CAR_ON_FOOT:
//case COMMAND_GET_CLOSEST_WATER_NODE:
case COMMAND_ADD_PORN_LEAFLET_TO_RUBBISH:
- debug("ADD_PORN_LEAFLET_TO_RUBBISH is not implemented\n"); // TODO(MIAMI)
+ CollectParameters(&m_nIp, 1);
+ CStats::PamphletMissionPassed = ScriptParams[0];
return 0;
case COMMAND_CREATE_CLOTHES_PICKUP:
{
@@ -13373,7 +13410,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bIgnoreThreatsBehindObjects = ScriptParams[1];
return 0;
}
@@ -13381,7 +13418,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
if (pPed->bInVehicle) {
if (pPed->GetWeapon(5).m_eWeaponType) { // TODO(MIAMI): enum
if (pPed->GetWeapon(5).m_nAmmoTotal < ScriptParams[1])
@@ -13400,7 +13437,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 1);
CAutomobile* pHeli = (CAutomobile*)CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli());
+ script_assert(pHeli && pHeli->IsCar() && pHeli->IsRealHeli());
pHeli->bHeliDestroyed = true;
return 0;
}
@@ -13414,7 +13451,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
pObject->m_area = ScriptParams[1];
return 0;
}
@@ -13423,7 +13460,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bNeverEverTargetThisPed = ScriptParams[1];
return 0;
}
@@ -13444,7 +13481,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
pPed->bCrouchWhenScared = true;
return 0;
}
@@ -13452,7 +13489,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle &&
pPed->m_pMyVehicle->IsLawEnforcementVehicle() &&
pPed->m_pMyVehicle->GetModelIndex() != MI_PREDATOR);
@@ -13481,7 +13518,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->m_nWaitState == WAITSTATE_STUCK);
return 0;
}
@@ -13495,7 +13532,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
if (ScriptParams[1]) {
pPed->bKindaStayInSamePlace = true;
pPed->bStopAndShoot = true;
@@ -13511,7 +13548,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
if (ScriptParams[1]) {
pVehicle->bIsFrozen = true;
pVehicle->bInfiniteMass = true;
@@ -13531,7 +13568,7 @@ int8 CRunningScript::ProcessCommands1300To1399(int32 command)
//case COMMAND_FREEZE_OBJECT_POSITION_AND_DONT_LOAD_COLLISION:
//case COMMAND_SET_FADE_AND_JUMPCUT_AFTER_RC_EXPLOSION:
default:
- assert(0);
+ script_assert(0);
}
return -1;
}
@@ -13541,13 +13578,13 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
switch (command) {
case COMMAND_REGISTER_VIGILANTE_LEVEL:
CollectParameters(&m_nIp, 1);
- debug("REGISTER_VIGILANTE_LEVEL not implemented\n"); // TODO(MIAMI)
+ CStats::RegisterLevelVigilanteMission(ScriptParams[0]);
return 0;
case COMMAND_CLEAR_ALL_CHAR_ANIMS:
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
if (!pPed->bInVehicle) {
pPed->m_pVehicleAnim = nil;
pPed->RestartNonPartialAnims();
@@ -13596,17 +13633,19 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
case COMMAND_GET_BUS_FARES_COLLECTED_BY_PLAYER:
{
CollectParameters(&m_nIp, 1);
- debug("GET_BUS_FARES_COLLECTED_BY_PLAYER not implemented\n"); // TODO(MIAMI)
- ScriptParams[0] = 0;
+ CPlayerInfo* pPlayerInfo = &CWorld::Players[ScriptParams[0]];
+ ScriptParams[0] = pPlayerInfo->m_pPed->m_nLastBusFareCollected;
+ pPlayerInfo->m_pPed->m_nLastBusFareCollected = 0;
StoreParameters(&m_nIp, 1);
+ return 0;
}
case COMMAND_SET_CHAR_OBJ_BUY_ICE_CREAM:
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[1]);
- assert(pVehicle);
+ script_assert(pVehicle);
ScriptParams[0] = 0;
if (pPed->m_objective == OBJECTIVE_NONE && !pPed->bHasAlreadyUsedAttractor) {
C2dEffect* pEffect = (C2dEffect*)GetPedAttractorManager()->GetEffectForIceCreamVan(pVehicle, pPed->GetPosition()); // has to be casted, because inner methods are const
@@ -13648,7 +13687,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
if (pPed->m_attractor)
GetPedAttractorManager()->DeRegisterPed(pPed, pPed->m_attractor);
return 0;
@@ -13660,7 +13699,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bHasAlreadyUsedAttractor);
return 0;
}
@@ -13668,7 +13707,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
if (ScriptParams[1]) {
pVehicle->bDontLoadCollision = false;
if (m_bMissionFlag) {
@@ -13691,7 +13730,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 2);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
if (ScriptParams[1]) {
pPed->bDontLoadCollision = false;
if (m_bMissionFlag) {
@@ -13721,7 +13760,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bBoughtIceCream);
return 0;
}
@@ -13795,20 +13834,39 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
}
//case COMMAND_GET_RANDOM_ICE_CREAM_CUSTOMER_IN_ZONE:
case COMMAND_UNLOCK_ALL_CAR_DOORS_IN_AREA:
+ {
CollectParameters(&m_nIp, 4);
- debug("UNLOCK_ALL_CAR_DOORS_IN_AREA not implemented\n"); // TODO(MIAMI)
+ uint32 i = CPools::GetVehiclePool()->GetSize();
+ float infX = *(float*)&ScriptParams[0];
+ float infY = *(float*)&ScriptParams[1];
+ float supX = *(float*)&ScriptParams[2];
+ float supY = *(float*)&ScriptParams[3];
+ while (i--) {
+ CVehicle* pVehicle = CPools::GetVehiclePool()->GetSlot(i);
+ if (!pVehicle)
+ continue;
+ if (pVehicle->IsWithinArea(infX, infY, supX, supY))
+ pVehicle->m_nDoorLock = CARLOCK_UNLOCKED;
+ }
return 0;
+ }
case COMMAND_SET_GANG_ATTACK_PLAYER_WITH_COPS:
CollectParameters(&m_nIp, 2);
CGangs::SetWillAttackPlayerWithCops((ePedType)((int)PEDTYPE_GANG1 + ScriptParams[0]), !!ScriptParams[1]);
return 0;
case COMMAND_SET_CHAR_FRIGHTENED_IN_JACKED_CAR:
- assert(0);
+ {
+ CollectParameters(&m_nIp, 2);
+ CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
+ script_assert(pPed);
+ pPed->bHeldHostageInCar = ScriptParams[1];
+ return 0;
+ }
case COMMAND_SET_VEHICLE_TO_FADE_IN:
{
CollectParameters(&m_nIp, 2);
CVehicle* pVehicle = CPools::GetVehiclePool()->GetAt(ScriptParams[0]);
- assert(pVehicle);
+ script_assert(pVehicle);
CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), ScriptParams[1]);
return 0;
}
@@ -13822,7 +13880,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CWorld::Players[ScriptParams[0]].m_pPed;
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(pPed->bInVehicle && pPed->m_pMyVehicle && pPed->m_pMyVehicle == CGameLogic::pShortCutTaxi);
return 0;
}
@@ -13830,7 +13888,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
{
CollectParameters(&m_nIp, 1);
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
- assert(pPed);
+ script_assert(pPed);
UpdateCompareFlag(RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_DUCK_DOWN) != nil);
return 0;
}
@@ -13854,7 +13912,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
}
case COMMAND_REGISTER_FIRE_LEVEL:
CollectParameters(&m_nIp, 1);
- debug("REGISTER_FIRE_LEVEL not implemented\n"); // TODO(MIAMI)
+ CStats::RegisterLevelFireMission(ScriptParams[0]);
return 0;
case COMMAND_IS_AUSTRALIAN_GAME:
UpdateCompareFlag(false); // should we make some check?
@@ -13870,7 +13928,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
return 0;
}
default:
- assert(0);
+ script_assert(0);
}
return -1;
}
@@ -14007,7 +14065,7 @@ void CTheScripts::DrawScriptSpheres()
{
for (int i = 0; i < MAX_NUM_SCRIPT_SPHERES; i++) {
if (ScriptSphereArray[i].m_bInUse)
- C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, 4, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
+ C3dMarkers::PlaceMarkerSet(ScriptSphereArray[i].m_Id, MARKERTYPE_CYLINDER, ScriptSphereArray[i].m_vecCenter, ScriptSphereArray[i].m_fRadius,
SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, SPHERE_MARKER_A, SPHERE_MARKER_PULSE_PERIOD, SPHERE_MARKER_PULSE_FRACTION, 0);
}
}
@@ -14850,7 +14908,7 @@ void CRunningScript::LocateObjectCommand(int32 command, uint32* pIp)
}
CollectParameters(pIp, b3D ? 8 : 6);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
CVector pos = pObject->GetPosition();
X = *(float*)&ScriptParams[1];
Y = *(float*)&ScriptParams[2];
@@ -15405,7 +15463,7 @@ void CRunningScript::ObjectInAreaCheckCommand(int32 command, uint32* pIp)
}
CollectParameters(pIp, b3D ? 8 : 6);
CObject* pObject = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
- assert(pObject);
+ script_assert(pObject);
CVector pos = pObject->GetPosition();
infX = *(float*)&ScriptParams[1];
infY = *(float*)&ScriptParams[2];
@@ -15458,7 +15516,7 @@ void CRunningScript::ObjectInAreaCheckCommand(int32 command, uint32* pIp)
result = true;
break;
default:
- assert(false);
+ script_assert(false);
break;
}
}
diff --git a/src/control/Script.h b/src/control/Script.h
index 3577b401..ba315c46 100644
--- a/src/control/Script.h
+++ b/src/control/Script.h
@@ -374,10 +374,10 @@ private:
static int32 GetNewUniqueScriptSphereIndex(int32 index);
static void RemoveScriptSphere(int32 index);
static void RemoveScriptTextureDictionary();
+public:
static void RemoveThisPed(CPed* pPed);
#ifdef MISSION_SWITCHER
-public:
static void SwitchToMission(int32 mission);
#endif
diff --git a/src/core/Cam.cpp b/src/core/Cam.cpp
index 375e9d5b..b996e77f 100644
--- a/src/core/Cam.cpp
+++ b/src/core/Cam.cpp
@@ -4894,11 +4894,6 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
if (ResetStatics) {
FOV = DefaultFOV;
-
- // TODO(Miami): Remove that when cam is done!
- // GTA 3 has this in veh. camera
- if (TheCamera.m_bIdleOn)
- TheCamera.m_uiTimeWeEnteredIdle = CTimer::GetTimeInMilliseconds();
} else {
if (isCar || isBike) {
// 0.4f: CAR_FOV_START_SPEED
@@ -4933,18 +4928,13 @@ CCam::Process_FollowCar_SA(const CVector& CameraTarget, float TargetOrientation,
Rotating = false;
m_bCollisionChecksOn = true;
-
- // TODO(Miami): Uncomment that when cam is done!
-
- // Garage exit cam is not working well in III...
- // if (!TheCamera.m_bJustCameOutOfGarage)
- // {
- Alpha = 0.0f;
- Beta = car->GetForward().Heading() - HALFPI;
- if (TheCamera.m_bCamDirectlyInFront) {
- Beta += PI;
+ if (!TheCamera.m_bJustCameOutOfGarage) {
+ Alpha = 0.0f;
+ Beta = car->GetForward().Heading() - HALFPI;
+ if (TheCamera.m_bCamDirectlyInFront) {
+ Beta += PI;
+ }
}
- // }
BetaSpeed = 0.0;
AlphaSpeed = 0.0;
diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp
index 2f977a20..df778815 100644
--- a/src/core/Camera.cpp
+++ b/src/core/Camera.cpp
@@ -514,7 +514,12 @@ CCamera::Process(void)
int tableIndex = (int)(DEGTORAD(DrunkAngle)/TWOPI * CParticle::SIN_COS_TABLE_SIZE) & CParticle::SIN_COS_TABLE_SIZE-1;
DrunkAngle += 5.0f;
+#ifndef FIX_BUGS
+ // This just messes up interpolation, probably not what they intended
+ // and multiplying the interpolated FOV is also a bit extreme
+ // so let's not do any of this nonsense
Cams[ActiveCam].FOV *= (1.0f + CMBlur::Drunkness);
+#endif
CamSource.x += -0.02f*CMBlur::Drunkness * CParticle::m_CosTable[tableIndex];
CamSource.y += -0.02f*CMBlur::Drunkness * CParticle::m_SinTable[tableIndex];
diff --git a/src/core/CdStreamPosix.cpp b/src/core/CdStreamPosix.cpp
index 45fd9832..e114a29a 100644
--- a/src/core/CdStreamPosix.cpp
+++ b/src/core/CdStreamPosix.cpp
@@ -150,9 +150,11 @@ CdStreamInit(int32 numChannels)
ASSERT(0);
return;
}
-
+#ifdef __linux__
_gdwCdStreamFlags = O_RDONLY | O_NOATIME;
-
+#else
+ _gdwCdStreamFlags = O_RDONLY;
+#endif
// People say it's slower
/*
if ( fsInfo.f_bsize <= CDSTREAM_SECTOR_SIZE )
@@ -400,9 +402,12 @@ void *CdStreamThread(void *param)
if (gCdStreamThreadStatus == 0){
gCdStreamThreadStatus = 1;
#endif
+
+#ifdef __linux__
pid_t tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, getpriority(PRIO_PROCESS, getpid()) + 1);
- }
+#endif
+ }
// spurious wakeup or we sent interrupt signal for flushing
if(pChannel->nSectorsToRead == 0)
diff --git a/src/core/ColStore.cpp b/src/core/ColStore.cpp
index 070967e5..bca1e9b7 100644
--- a/src/core/ColStore.cpp
+++ b/src/core/ColStore.cpp
@@ -223,7 +223,6 @@ CColStore::EnsureCollisionIsInMemory(const CVector2D &pos)
}
}
-//--MIAMI: done
bool
CColStore::HasCollisionLoaded(const CVector2D &pos)
{
diff --git a/src/core/Collision.cpp b/src/core/Collision.cpp
index c2037dc5..91e7bba7 100644
--- a/src/core/Collision.cpp
+++ b/src/core/Collision.cpp
@@ -3049,6 +3049,18 @@ CColModel::GetTrianglePoint(CVector &v, int i) const
v = vertices[i].Get();
}
+void*
+CColModel::operator new(size_t){
+ CColModel *node = CPools::GetColModelPool()->New();
+ assert(node);
+ return node;
+}
+
+void
+CColModel::operator delete(void *p, size_t){
+ CPools::GetColModelPool()->Delete((CColModel*)p);
+}
+
CColModel&
CColModel::operator=(const CColModel &other)
{
diff --git a/src/core/Collision.h b/src/core/Collision.h
index fd079028..93959a72 100644
--- a/src/core/Collision.h
+++ b/src/core/Collision.h
@@ -181,7 +181,6 @@ struct CStoredCollPoly
bool valid;
};
-//--MIAMI: done struct
struct CColModel
{
CSphere boundingSphere;
@@ -208,6 +207,8 @@ struct CColModel
void SetLinkPtr(CLink<CColModel*>*);
void GetTrianglePoint(CVector &v, int i) const;
+ void *operator new(size_t);
+ void operator delete(void *p, size_t);
CColModel& operator=(const CColModel& other);
};
diff --git a/src/core/ControllerConfig.cpp b/src/core/ControllerConfig.cpp
index d194cebb..b0e04e2b 100644
--- a/src/core/ControllerConfig.cpp
+++ b/src/core/ControllerConfig.cpp
@@ -215,7 +215,10 @@ void CControllerConfigManager::InitDefaultControlConfiguration()
SetControllerKeyAssociatedWithAction (PED_FIREWEAPON, rsPADINS, KEYBOARD);
SetControllerKeyAssociatedWithAction (PED_FIREWEAPON, rsLCTRL, OPTIONAL_EXTRA);
-
+#ifdef BIND_VEHICLE_FIREWEAPON
+ SetControllerKeyAssociatedWithAction (VEHICLE_FIREWEAPON, rsPADINS, KEYBOARD);
+ SetControllerKeyAssociatedWithAction (VEHICLE_FIREWEAPON, rsLCTRL, OPTIONAL_EXTRA);
+#endif
SetControllerKeyAssociatedWithAction (PED_CYCLE_WEAPON_LEFT, rsPADDEL, KEYBOARD);
SetControllerKeyAssociatedWithAction (PED_CYCLE_WEAPON_RIGHT, rsPADENTER, OPTIONAL_EXTRA); // BUG: must be KEYBOARD ?
@@ -285,6 +288,9 @@ void CControllerConfigManager::InitDefaultControlConfigMouse(CMouseControllerSta
{
m_bMouseAssociated = true;
SetMouseButtonAssociatedWithAction(PED_FIREWEAPON, 1);
+#ifdef BIND_VEHICLE_FIREWEAPON
+ SetMouseButtonAssociatedWithAction(VEHICLE_FIREWEAPON, 1);
+#endif
}
if (availableButtons.RMB)
@@ -371,6 +377,9 @@ void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
SetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_OUT, 3, JOYSTICK);
case 2:
SetControllerKeyAssociatedWithAction(PED_FIREWEAPON, 2, JOYSTICK);
+#ifdef BIND_VEHICLE_FIREWEAPON
+ SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, 2, JOYSTICK);
+#endif
case 1:
SetControllerKeyAssociatedWithAction(VEHICLE_ENTER_EXIT, 1, JOYSTICK);
/*******************************************************************************************/
@@ -422,6 +431,9 @@ void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
SetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_OUT, 2, JOYSTICK);
case 1:
SetControllerKeyAssociatedWithAction(PED_FIREWEAPON, 1, JOYSTICK);
+#ifdef BIND_VEHICLE_FIREWEAPON
+ SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, 1, JOYSTICK);
+#endif
/*******************************************************************************************/
}
}
@@ -463,6 +475,9 @@ void CControllerConfigManager::InitialiseControllerActionNameArray()
SETACTIONNAME(SHOW_MOUSE_POINTER_TOGGLE);
SETACTIONNAME(CAMERA_CHANGE_VIEW_ALL_SITUATIONS);
SETACTIONNAME(PED_FIREWEAPON);
+#ifdef BIND_VEHICLE_FIREWEAPON
+ SETACTIONNAME(VEHICLE_FIREWEAPON);
+#endif
SETACTIONNAME(VEHICLE_ENTER_EXIT);
SETACTIONNAME(GO_LEFT);
SETACTIONNAME(GO_RIGHT);
@@ -651,12 +666,21 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonDown(int32 button,
}
AffectControllerStateOn_ButtonDown_AllStates(button, type, *state);
+
+#ifdef REGISTER_START_BUTTON
+ if (button == 12)
+ state->Start = 255;
+#endif
}
}
}
void CControllerConfigManager::AffectControllerStateOn_ButtonDown_Driving(int32 button, eControllerType type, CControllerState &state)
{
+#ifdef BIND_VEHICLE_FIREWEAPON
+ if (button == GetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, type))
+ state.Circle = 255;
+#endif
if (button == GetControllerKeyAssociatedWithAction(VEHICLE_LOOKBEHIND, type))
{
state.LeftShoulder2 = 255;
@@ -807,7 +831,11 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonDown_ThirdPersonOnl
void CControllerConfigManager::AffectControllerStateOn_ButtonDown_FirstAndThirdPersonOnly(int32 button, eControllerType type, CControllerState &state)
{
CPad *pad = CPad::GetPad(PAD1);
-
+
+#ifdef BIND_VEHICLE_FIREWEAPON
+ if (button == GetControllerKeyAssociatedWithAction(PED_FIREWEAPON, type))
+ state.Circle = 255;
+#endif
if (button == GetControllerKeyAssociatedWithAction(PED_LOCK_TARGET, type))
state.RightShoulder1 = 255;
@@ -889,8 +917,11 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonDown_AllStates(int3
{
if (button == GetControllerKeyAssociatedWithAction(CAMERA_CHANGE_VIEW_ALL_SITUATIONS, type))
state.Select = 255;
+
+#ifndef BIND_VEHICLE_FIREWEAPON
if (button == GetControllerKeyAssociatedWithAction(PED_FIREWEAPON, type))
state.Circle = 255;
+#endif
if (button == GetControllerKeyAssociatedWithAction(GO_LEFT, type))
{
@@ -1060,6 +1091,11 @@ void CControllerConfigManager::AffectControllerStateOn_ButtonUp(int32 button, eC
{
if (FrontEndMenuManager.GetIsMenuActive())
AffectControllerStateOn_ButtonUp_All_Player_States(button, type, *state);
+
+#ifdef REGISTER_START_BUTTON
+ if (button == 12)
+ state->Start = 0;
+#endif
}
}
}
@@ -1601,28 +1637,25 @@ bool CControllerConfigManager::GetIsMouseButtonUp(RsKeyCodes keycode)
return false;
}
+#define CLEAR_ACTION_IF_NEEDED(action) \
+if (key == GetControllerKeyAssociatedWithAction(action, type))\
+ ClearSettingsAssociatedWithAction(action, type);
+
void CControllerConfigManager::DeleteMatchingCommonControls(e_ControllerAction action, int32 key, eControllerType type)
{
if (!GetIsKeyBlank(key, type))
{
- if (key == GetControllerKeyAssociatedWithAction(CAMERA_CHANGE_VIEW_ALL_SITUATIONS,type))
- ClearSettingsAssociatedWithAction(CAMERA_CHANGE_VIEW_ALL_SITUATIONS, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_FIREWEAPON, type))
- ClearSettingsAssociatedWithAction(PED_FIREWEAPON, type);
- if (key == GetControllerKeyAssociatedWithAction(GO_LEFT, type))
- ClearSettingsAssociatedWithAction(GO_LEFT, type);
- if (key == GetControllerKeyAssociatedWithAction(GO_RIGHT, type))
- ClearSettingsAssociatedWithAction(GO_RIGHT, type);
- if (key == GetControllerKeyAssociatedWithAction(NETWORK_TALK, type))
- ClearSettingsAssociatedWithAction(NETWORK_TALK, type);
- if (key == GetControllerKeyAssociatedWithAction(SWITCH_DEBUG_CAM_ON, type))
- ClearSettingsAssociatedWithAction(SWITCH_DEBUG_CAM_ON, type);
- if (key == GetControllerKeyAssociatedWithAction(TOGGLE_DPAD, type))
- ClearSettingsAssociatedWithAction(TOGGLE_DPAD, type);
- if (key == GetControllerKeyAssociatedWithAction(TAKE_SCREEN_SHOT, type))
- ClearSettingsAssociatedWithAction(TAKE_SCREEN_SHOT, type);
- if (key == GetControllerKeyAssociatedWithAction(SHOW_MOUSE_POINTER_TOGGLE, type))
- ClearSettingsAssociatedWithAction(SHOW_MOUSE_POINTER_TOGGLE, type);
+ CLEAR_ACTION_IF_NEEDED(CAMERA_CHANGE_VIEW_ALL_SITUATIONS);
+#ifndef BIND_VEHICLE_FIREWEAPON
+ CLEAR_ACTION_IF_NEEDED(PED_FIREWEAPON);
+#endif
+ CLEAR_ACTION_IF_NEEDED(GO_LEFT);
+ CLEAR_ACTION_IF_NEEDED(GO_RIGHT);
+ CLEAR_ACTION_IF_NEEDED(NETWORK_TALK);
+ CLEAR_ACTION_IF_NEEDED(SWITCH_DEBUG_CAM_ON);
+ CLEAR_ACTION_IF_NEEDED(TOGGLE_DPAD);
+ CLEAR_ACTION_IF_NEEDED(TAKE_SCREEN_SHOT);
+ CLEAR_ACTION_IF_NEEDED(SHOW_MOUSE_POINTER_TOGGLE);
}
}
@@ -1630,16 +1663,11 @@ void CControllerConfigManager::DeleteMatching3rdPersonControls(e_ControllerActio
{
if (!GetIsKeyBlank(key, type))
{
- if (key == GetControllerKeyAssociatedWithAction(PED_LOOKBEHIND, type))
- ClearSettingsAssociatedWithAction(PED_LOOKBEHIND, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_CYCLE_WEAPON_LEFT, type))
- ClearSettingsAssociatedWithAction(PED_CYCLE_WEAPON_LEFT, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_CYCLE_WEAPON_RIGHT, type))
- ClearSettingsAssociatedWithAction(PED_CYCLE_WEAPON_RIGHT, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_JUMPING, type))
- ClearSettingsAssociatedWithAction(PED_JUMPING, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_SPRINT, type))
- ClearSettingsAssociatedWithAction(PED_SPRINT, type);
+ CLEAR_ACTION_IF_NEEDED(PED_LOOKBEHIND);
+ CLEAR_ACTION_IF_NEEDED(PED_CYCLE_WEAPON_LEFT);
+ CLEAR_ACTION_IF_NEEDED(PED_CYCLE_WEAPON_RIGHT);
+ CLEAR_ACTION_IF_NEEDED(PED_JUMPING);
+ CLEAR_ACTION_IF_NEEDED(PED_SPRINT);
if (key == GetControllerKeyAssociatedWithAction(PED_DUCK, type))
ClearSettingsAssociatedWithAction(PED_DUCK, type);
if (key == GetControllerKeyAssociatedWithAction(PED_ANSWER_PHONE, type))
@@ -1647,12 +1675,9 @@ void CControllerConfigManager::DeleteMatching3rdPersonControls(e_ControllerActio
if (FrontEndMenuManager.m_ControlMethod == CONTROL_CLASSIC)
{
- if (key == GetControllerKeyAssociatedWithAction(PED_CYCLE_TARGET_LEFT, type))
- ClearSettingsAssociatedWithAction(PED_CYCLE_TARGET_LEFT, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_CYCLE_TARGET_RIGHT, type))
- ClearSettingsAssociatedWithAction(PED_CYCLE_TARGET_RIGHT, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_CENTER_CAMERA_BEHIND_PLAYER, type))
- ClearSettingsAssociatedWithAction(PED_CENTER_CAMERA_BEHIND_PLAYER, type);
+ CLEAR_ACTION_IF_NEEDED(PED_CYCLE_TARGET_LEFT);
+ CLEAR_ACTION_IF_NEEDED(PED_CYCLE_TARGET_RIGHT);
+ CLEAR_ACTION_IF_NEEDED(PED_CENTER_CAMERA_BEHIND_PLAYER);
}
}
}
@@ -1661,23 +1686,19 @@ void CControllerConfigManager::DeleteMatching1rst3rdPersonControls(e_ControllerA
{
if (!GetIsKeyBlank(key, type))
{
- if (key == GetControllerKeyAssociatedWithAction(PED_LOCK_TARGET, type))
- ClearSettingsAssociatedWithAction(PED_LOCK_TARGET, type);
- if (key == GetControllerKeyAssociatedWithAction(GO_FORWARD, type))
- ClearSettingsAssociatedWithAction(GO_FORWARD, type);
- if (key == GetControllerKeyAssociatedWithAction(GO_BACK, type))
- ClearSettingsAssociatedWithAction(GO_BACK, type);
+#ifdef BIND_VEHICLE_FIREWEAPON
+ CLEAR_ACTION_IF_NEEDED(PED_FIREWEAPON);
+#endif
+ CLEAR_ACTION_IF_NEEDED(PED_LOCK_TARGET);
+ CLEAR_ACTION_IF_NEEDED(GO_FORWARD);
+ CLEAR_ACTION_IF_NEEDED(GO_BACK);
if (FrontEndMenuManager.m_ControlMethod == CONTROL_CLASSIC)
{
- if (key == GetControllerKeyAssociatedWithAction(PED_1RST_PERSON_LOOK_LEFT, type))
- ClearSettingsAssociatedWithAction(PED_1RST_PERSON_LOOK_LEFT, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_1RST_PERSON_LOOK_RIGHT, type))
- ClearSettingsAssociatedWithAction(PED_1RST_PERSON_LOOK_RIGHT, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_1RST_PERSON_LOOK_DOWN, type))
- ClearSettingsAssociatedWithAction(PED_1RST_PERSON_LOOK_DOWN, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_1RST_PERSON_LOOK_UP, type))
- ClearSettingsAssociatedWithAction(PED_1RST_PERSON_LOOK_UP, type);
+ CLEAR_ACTION_IF_NEEDED(PED_1RST_PERSON_LOOK_LEFT);
+ CLEAR_ACTION_IF_NEEDED(PED_1RST_PERSON_LOOK_RIGHT);
+ CLEAR_ACTION_IF_NEEDED(PED_1RST_PERSON_LOOK_DOWN);
+ CLEAR_ACTION_IF_NEEDED(PED_1RST_PERSON_LOOK_UP);
}
}
}
@@ -1686,34 +1707,23 @@ void CControllerConfigManager::DeleteMatchingVehicleControls(e_ControllerAction
{
if (!GetIsKeyBlank(key, type))
{
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_LOOKBEHIND, type))
- ClearSettingsAssociatedWithAction(VEHICLE_LOOKBEHIND, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_LOOKLEFT, type))
- ClearSettingsAssociatedWithAction(VEHICLE_LOOKLEFT, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_LOOKRIGHT, type))
- ClearSettingsAssociatedWithAction(VEHICLE_LOOKRIGHT, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_LOOKBEHIND, type)) // note: dublicate
- ClearSettingsAssociatedWithAction(VEHICLE_LOOKBEHIND, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_HORN, type))
- ClearSettingsAssociatedWithAction(VEHICLE_HORN, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_HANDBRAKE, type))
- ClearSettingsAssociatedWithAction(VEHICLE_HANDBRAKE, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_ACCELERATE, type))
- ClearSettingsAssociatedWithAction(VEHICLE_ACCELERATE, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_BRAKE, type))
- ClearSettingsAssociatedWithAction(VEHICLE_BRAKE, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, type))
- ClearSettingsAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, type);
- if (key == GetControllerKeyAssociatedWithAction(TOGGLE_SUBMISSIONS, type))
- ClearSettingsAssociatedWithAction(TOGGLE_SUBMISSIONS, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_TURRETLEFT, type))
- ClearSettingsAssociatedWithAction(VEHICLE_TURRETLEFT, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_TURRETRIGHT, type))
- ClearSettingsAssociatedWithAction(VEHICLE_TURRETRIGHT, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_TURRETUP, type))
- ClearSettingsAssociatedWithAction(VEHICLE_TURRETUP, type);
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_TURRETDOWN, type))
- ClearSettingsAssociatedWithAction(VEHICLE_TURRETDOWN, type);
+#ifdef BIND_VEHICLE_FIREWEAPON
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_FIREWEAPON);
+#endif
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKBEHIND);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKLEFT);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKRIGHT);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_LOOKBEHIND); // note: duplicate
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_HORN);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_HANDBRAKE);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_ACCELERATE);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_BRAKE);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_CHANGE_RADIO_STATION);
+ CLEAR_ACTION_IF_NEEDED(TOGGLE_SUBMISSIONS);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETLEFT);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETRIGHT);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETUP);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_TURRETDOWN);
}
}
@@ -1721,8 +1731,7 @@ void CControllerConfigManager::DeleteMatchingVehicle_3rdPersonControls(e_Control
{
if (!GetIsKeyBlank(key, type))
{
- if (key == GetControllerKeyAssociatedWithAction(VEHICLE_ENTER_EXIT, type))
- ClearSettingsAssociatedWithAction(VEHICLE_ENTER_EXIT, type);
+ CLEAR_ACTION_IF_NEEDED(VEHICLE_ENTER_EXIT);
}
}
@@ -1730,13 +1739,13 @@ void CControllerConfigManager::DeleteMatching1rstPersonControls(e_ControllerActi
{
if (!GetIsKeyBlank(key, type))
{
- if (key == GetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_IN, type))
- ClearSettingsAssociatedWithAction(PED_SNIPER_ZOOM_IN, type);
- if (key == GetControllerKeyAssociatedWithAction(PED_SNIPER_ZOOM_OUT, type))
- ClearSettingsAssociatedWithAction(PED_SNIPER_ZOOM_OUT, type);
+ CLEAR_ACTION_IF_NEEDED(PED_SNIPER_ZOOM_IN);
+ CLEAR_ACTION_IF_NEEDED(PED_SNIPER_ZOOM_OUT);
}
}
+#undef CLEAR_ACTION_IF_NEEDED
+
void CControllerConfigManager::DeleteMatchingActionInitiators(e_ControllerAction action, int32 key, eControllerType type)
{
if (!GetIsKeyBlank(key, type))
@@ -1814,7 +1823,9 @@ e_ControllerActionType CControllerConfigManager::GetActionType(e_ControllerActio
{
switch (action)
{
+#ifndef BIND_VEHICLE_FIREWEAPON
case PED_FIREWEAPON:
+#endif
case GO_LEFT:
case GO_RIGHT:
case CAMERA_CHANGE_VIEW_ALL_SITUATIONS:
@@ -1839,6 +1850,9 @@ e_ControllerActionType CControllerConfigManager::GetActionType(e_ControllerActio
return ACTIONTYPE_3RDPERSON;
break;
+#ifdef BIND_VEHICLE_FIREWEAPON
+ case VEHICLE_FIREWEAPON:
+#endif
case VEHICLE_LOOKBEHIND:
case VEHICLE_LOOKLEFT:
case VEHICLE_LOOKRIGHT:
@@ -1859,6 +1873,9 @@ e_ControllerActionType CControllerConfigManager::GetActionType(e_ControllerActio
return ACTIONTYPE_VEHICLE_3RDPERSON;
break;
+#ifdef BIND_VEHICLE_FIREWEAPON
+ case PED_FIREWEAPON:
+#endif
case GO_FORWARD:
case GO_BACK:
case PED_1RST_PERSON_LOOK_LEFT:
diff --git a/src/core/ControllerConfig.h b/src/core/ControllerConfig.h
index 05c37c22..eb66937a 100644
--- a/src/core/ControllerConfig.h
+++ b/src/core/ControllerConfig.h
@@ -34,6 +34,9 @@ enum e_ControllerAction
PED_LOOKBEHIND,
PED_DUCK,
PED_ANSWER_PHONE,
+#ifdef BIND_VEHICLE_FIREWEAPON
+ VEHICLE_FIREWEAPON,
+#endif
VEHICLE_ACCELERATE,
VEHICLE_BRAKE,
VEHICLE_CHANGE_RADIO_STATION,
diff --git a/src/core/FileMgr.h b/src/core/FileMgr.h
index 51e30694..8278953b 100644
--- a/src/core/FileMgr.h
+++ b/src/core/FileMgr.h
@@ -19,4 +19,5 @@ public:
static bool ReadLine(int fd, char *buf, int len);
static int CloseFile(int fd);
static int GetErrorReadWrite(int fd);
+ static char *GetRootDirName() { return ms_rootDirName; }
};
diff --git a/src/core/Frontend.cpp b/src/core/Frontend.cpp
index ccb89fbd..c55b139c 100644
--- a/src/core/Frontend.cpp
+++ b/src/core/Frontend.cpp
@@ -36,6 +36,7 @@
#include "Stats.h"
#include "Messages.h"
#include "FileLoader.h"
+#include "User.h"
// TODO(Miami): Remove that!! That was my map implementation for III, instead use MAP_ENHACEMENTS on some places
#define CUSTOM_MAP
@@ -65,8 +66,6 @@ CRGBA LIST_BACKGROUND_COLOR(49, 101, 148, 255);
#define FEET_IN_METER 3.33f
#endif
-#define isPlainTextScreen(screen) (screen == MENUPAGE_BRIEFS || screen == MENUPAGE_STATS)
-
#ifdef TRIANGLE_BACK_BUTTON
#define GetBackJustUp GetTriangleJustUp
#define GetBackJustDown GetTriangleJustDown
@@ -291,7 +290,7 @@ CMenuManager::ThingsToDoBeforeLeavingPage()
DMAudio.StopFrontEndTrack();
OutputDebugString("FRONTEND AUDIO TRACK STOPPED");
#endif
- } else if (m_nCurrScreen == MENUPAGE_GRAPHICS_SETTINGS) {
+ } else if (m_nCurrScreen == MENUPAGE_DISPLAY_SETTINGS) {
m_nDisplayVideoMode = m_nPrefsVideoMode;
#ifdef IMPROVED_VIDEOMODE
m_nSelectedScreenMode = m_nPrefsWindowed;
@@ -301,48 +300,13 @@ CMenuManager::ThingsToDoBeforeLeavingPage()
if (m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
CPlayerSkin::EndFrontendSkinEdit();
}
-
-#ifdef CUSTOM_FRONTEND_OPTIONS
- for (int i = 0; i < numCustomFrontendOptions; i++) {
- FrontendOption& option = customFrontendOptions[i];
- if (option.type != FEOPTION_REDIRECT && option.type != FEOPTION_GOBACK && m_nCurrScreen == option.screen) {
- if (option.returnPrevPageFunc)
- option.returnPrevPageFunc();
-
- if (m_nCurrOption == option.screenOptionOrder && option.type == FEOPTION_DYNAMIC)
- option.buttonPressFunc(FEOPTION_ACTION_FOCUSLOSS);
-
- if (option.onlyApplyOnEnter)
- option.displayedValue = *option.value;
- }
- }
-#endif
}
int8
CMenuManager::GetPreviousPageOption()
{
-#ifndef CUSTOM_FRONTEND_OPTIONS
- return (!m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_ParentEntry :
- (m_nCurrScreen == MENUPAGE_NEW_GAME ? 0 : (m_nCurrScreen == MENUPAGE_OPTIONS ? 1 : (m_nCurrScreen == MENUPAGE_EXIT ? 2 : aScreens[m_nCurrScreen].m_ParentEntry))));
-#else
- int8 prevPage = aScreens[m_nCurrScreen].m_PreviousPage;
-
- if (prevPage == -1) // Game also does same
- return 0;
-
- prevPage = prevPage == MENUPAGE_NONE ? (!m_bGameNotLoaded ? MENUPAGE_PAUSE_MENU : MENUPAGE_START_MENU) : prevPage;
-
- for (int i = 0; i < NUM_MENUROWS; i++) {
- if (aScreens[prevPage].m_aEntries[i].m_TargetMenu == m_nCurrScreen) {
- return i;
- }
- }
-
- // Couldn't find current screen option on previous page, use default behaviour (maybe save-related screen?)
return (!m_bGameNotLoaded ? aScreens[m_nCurrScreen].m_ParentEntry :
(m_nCurrScreen == MENUPAGE_NEW_GAME ? 0 : (m_nCurrScreen == MENUPAGE_OPTIONS ? 1 : (m_nCurrScreen == MENUPAGE_EXIT ? 2 : aScreens[m_nCurrScreen].m_ParentEntry))));
-#endif
}
// ------ Functions not in the game/inlined ends
@@ -924,9 +888,9 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
str = TheText.Get(aScreens[MENUPAGE_DELETE_SLOT_CONFIRM].m_aEntries[0].m_EntryName);
break;
case MENUPAGE_SAVE_OVERWRITE_CONFIRM:
- if (Slots[m_nCurrSaveSlot + 1] == SLOT_OK)
+ if (Slots[m_nCurrSaveSlot] == SLOT_OK)
str = TheText.Get("FESZ_QO");
- else if (Slots[m_nCurrSaveSlot + 1] == SLOT_CORRUPTED)
+ else if (Slots[m_nCurrSaveSlot] == SLOT_CORRUPTED)
str = TheText.Get("FESZ_QZ");
else
str = TheText.Get(aScreens[m_nCurrScreen].m_aEntries[0].m_EntryName);
@@ -1140,7 +1104,7 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
}
break;
#ifdef IMPROVED_VIDEOMODE
- case MENUACTION_SCREENMODE:
+ case MENUACTION_SCREENFORMAT:
if (m_nSelectedScreenMode == 0)
sprintf(asciiTemp, "FULLSCREEN");
else
@@ -1211,32 +1175,6 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
rightText = TheText.Get("FEA_NM3");
}
break;
-#ifdef CUSTOM_FRONTEND_OPTIONS
- case MENUACTION_TRIGGERFUNC:
- FrontendOption& option = customFrontendOptions[aScreens[m_nCurrScreen].m_aEntries[i].m_TargetMenu];
- if (m_nCurrScreen == option.screen && i == option.screenOptionOrder) {
- leftText = (wchar*)option.leftText;
- if (option.type == FEOPTION_SELECT) {
- if (option.displayedValue >= option.numRightTexts || option.displayedValue < 0)
- option.displayedValue = 0;
-
- rightText = (wchar*)option.rightTexts[option.displayedValue];
-
- } else if (option.type == FEOPTION_DYNAMIC) {
- if (option.drawFunc) {
- bool isOptionDisabled = false;
- rightText = option.drawFunc(&isOptionDisabled);
- if (isOptionDisabled)
- CFont::SetColor(CRGBA(DARKMENUOPTION_COLOR.r, DARKMENUOPTION_COLOR.g, DARKMENUOPTION_COLOR.b, FadeIn(255)));
- }
- }
- } else {
- debug("A- screen:%d option:%d - totalCo: %d, coId: %d, coScreen:%d, coOption:%d\n", m_nCurrScreen, i, numCustomFrontendOptions, aScreens[m_nCurrScreen].m_aEntries[i].m_TargetMenu, option.screen, option.screenOptionOrder);
- assert(0 && "Custom frontend options is borked");
- }
-
- break;
-#endif
}
// Highlight trapezoid
@@ -1378,7 +1316,7 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
}
if (m_nDisplayVideoMode != m_nPrefsVideoMode) {
if (strcmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FED_RES") != 0
- && m_nCurrScreen == MENUPAGE_GRAPHICS_SETTINGS) {
+ && m_nCurrScreen == MENUPAGE_DISPLAY_SETTINGS) {
m_nDisplayVideoMode = m_nPrefsVideoMode;
SetHelperText(3);
}
@@ -1386,29 +1324,11 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
#ifdef IMPROVED_VIDEOMODE
if (m_nSelectedScreenMode != m_nPrefsWindowed) {
if (strcmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FED_POS") != 0
- && m_nCurrScreen == MENUPAGE_GRAPHICS_SETTINGS) {
+ && m_nCurrScreen == MENUPAGE_DISPLAY_SETTINGS) {
m_nSelectedScreenMode = m_nPrefsWindowed;
}
}
#endif
-#ifdef CUSTOM_FRONTEND_OPTIONS
- static int lastOption = m_nCurrOption;
-
- if (aScreens[m_nCurrScreen].m_aEntries[i].m_Action == MENUACTION_TRIGGERFUNC) {
- FrontendOption& option = customFrontendOptions[aScreens[m_nCurrScreen].m_aEntries[i].m_TargetMenu];
- if (option.onlyApplyOnEnter && m_nCurrOption != i)
- option.displayedValue = *option.value;
-
- if (m_nCurrOption != lastOption && lastOption == i) {
- FrontendOption& oldOption = customFrontendOptions[aScreens[m_nCurrScreen].m_aEntries[lastOption].m_TargetMenu];
- if (oldOption.type == FEOPTION_DYNAMIC)
- oldOption.buttonPressFunc(FEOPTION_ACTION_FOCUSLOSS);
- }
- }
-
- if (i == MAX_MENUROWS - 1 || aScreens[m_nCurrScreen].m_aEntries[i + 1].m_EntryName[0] == '\0')
- lastOption = m_nCurrOption;
-#endif
// TODO(Miami): check
// Sliders
@@ -1465,7 +1385,7 @@ CMenuManager::DrawStandardMenus(bool drawCurrScreen)
case MENUPAGE_STATS:
case MENUPAGE_CONTROLLER_PC:
case MENUPAGE_SOUND_SETTINGS:
- case MENUPAGE_GRAPHICS_SETTINGS:
+ case MENUPAGE_DISPLAY_SETTINGS:
case MENUPAGE_MOUSE_CONTROLS:
DisplayHelperText(nil);
break;
@@ -1624,7 +1544,11 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
} else if (column == CONTSETUP_VEHICLE_COLUMN) {
switch (optionIdx) {
case 0:
- controllerAction = PED_FIREWEAPON;
+#ifdef BIND_VEHICLE_FIREWEAPON
+ controllerAction = VEHICLE_FIREWEAPON;
+#else
+ controllerAction = PED_FIREWEAPON;
+#endif
break;
case 1:
case 2:
@@ -2141,7 +2065,7 @@ CMenuManager::DrawFrontEnd()
bbNames[0] = { "FEB_SAV",MENUPAGE_NEW_GAME };
bbNames[1] = { "FEB_CON",MENUPAGE_CONTROLLER_PC };
bbNames[2] = { "FEB_AUD",MENUPAGE_SOUND_SETTINGS };
- bbNames[3] = { "FEB_DIS",MENUPAGE_GRAPHICS_SETTINGS };
+ bbNames[3] = { "FEB_DIS",MENUPAGE_DISPLAY_SETTINGS };
bbNames[4] = { "FEB_LAN",MENUPAGE_LANGUAGE_SETTINGS };
bbNames[5] = { "FESZ_QU",MENUPAGE_EXIT };
bbTabCount = 6;
@@ -2153,7 +2077,7 @@ CMenuManager::DrawFrontEnd()
bbNames[2] = { "FEB_BRI",MENUPAGE_BRIEFS };
bbNames[3] = { "FEB_CON",MENUPAGE_CONTROLLER_PC };
bbNames[4] = { "FEB_AUD",MENUPAGE_SOUND_SETTINGS };
- bbNames[5] = { "FEB_DIS",MENUPAGE_GRAPHICS_SETTINGS };
+ bbNames[5] = { "FEB_DIS",MENUPAGE_DISPLAY_SETTINGS };
bbNames[6] = { "FEB_LAN",MENUPAGE_LANGUAGE_SETTINGS };
bbNames[7] = { "FESZ_QU",MENUPAGE_EXIT };
bbTabCount = 8;
@@ -2226,7 +2150,7 @@ CMenuManager::DrawBackground()
case MENUPAGE_DELETE_SLOT_CONFIRM:
currentSprite = FE_ICONSAVE;
break;
- case MENUPAGE_GRAPHICS_SETTINGS:
+ case MENUPAGE_DISPLAY_SETTINGS:
currentSprite = FE_ICONDISPLAY;
break;
case MENUPAGE_SOUND_SETTINGS:
@@ -2472,7 +2396,7 @@ CMenuManager::DrawBackground(bool transitionCall)
menuBg.bottomRight_y = 398.0f;
break;
case MENUPAGE_BRIEFS:
- case MENUPAGE_GRAPHICS_SETTINGS:
+ case MENUPAGE_DISPLAY_SETTINGS:
case MENUPAGE_MAP:
case MENUPAGE_CHOOSE_LOAD_SLOT:
case MENUPAGE_CHOOSE_DELETE_SLOT:
@@ -3107,9 +3031,6 @@ CMenuManager::InitialiseChangedLanguageSettings()
break;
}
-#ifdef CUSTOM_FRONTEND_OPTIONS
- CustomFrontendOptionsPopulate();
-#endif
}
}
@@ -3583,7 +3504,7 @@ CMenuManager::Process(void)
InitialiseChangedLanguageSettings();
if (m_bMenuActive) {
- ProcessButtonPresses();
+ UserInput();
ProcessFileActions();
DMAudio.Service();
@@ -3593,100 +3514,249 @@ CMenuManager::Process(void)
SwitchMenuOnAndOff();
}
-// TODO(Miami)
+// Original name is unknown
void
-CMenuManager::ProcessButtonPresses(void)
+CMenuManager::ProcessList(bool &optionSelected, bool &goBack)
{
- if (m_nCurrScreen == MENUPAGE_OUTRO)
+ if (m_bWaitingForNewKeyBind)
return;
- if (m_bWaitingForNewKeyBind) {
- if (m_bStartWaitingForKeyBind)
- m_bStartWaitingForKeyBind = false;
- else {
- pControlEdit = CPad::EditCodesForControls(pControlEdit, 1);
- JoyButtonJustClicked = false;
- MouseButtonJustClicked = false;
+ if (m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
+ m_nTotalListRow = m_nSkinsTotal;
+ }
+ if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
+ m_nTotalListRow = m_ControlMethod == CONTROL_CLASSIC ? 30 : 25;
+ if (m_nSelectedListRow > m_nTotalListRow)
+ m_nSelectedListRow = m_nTotalListRow - 1;
+ }
- if (CPad::GetPad(0)->GetLeftMouseJustDown())
- MouseButtonJustClicked = 1;
- else if (CPad::GetPad(0)->GetRightMouseJustUp())
- MouseButtonJustClicked = 3;
- else if (CPad::GetPad(0)->GetMiddleMouseJustUp())
- MouseButtonJustClicked = 2;
- else if (CPad::GetPad(0)->GetMouseWheelUpJustUp())
- MouseButtonJustClicked = 4;
- else if (CPad::GetPad(0)->GetMouseWheelDownJustUp())
- MouseButtonJustClicked = 5;
- // TODO two more buttons
+ if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown()) {
+ m_bShowMouse = 0;
+ optionSelected = true;
+ }
+ if (CPad::GetPad(0)->GetBackspaceJustDown() && m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS && !field_159) {
+ if (m_nCurrExLayer == HOVEROPTION_LIST) {
+ m_nHoverOption = HOVEROPTION_NOT_HOVERING;
+ m_bWaitingForNewKeyBind = true;
+ m_bStartWaitingForKeyBind = true;
+ m_bKeyChangeNotProcessed = true;
+ pControlEdit = &m_KeyPressedCode;
+ }
+ } else {
+ field_159 = false;
+ }
- JoyButtonJustClicked = ControlsManager.GetJoyButtonJustDown();
+ static PauseModeTime lastTimeClickedScrollButton = 0;
- int32 TypeOfControl = KEYBOARD;
- if (JoyButtonJustClicked)
- TypeOfControl = JOYSTICK;
- if (MouseButtonJustClicked)
- TypeOfControl = MOUSE;
- if (*pControlEdit != rsNULL)
- TypeOfControl = KEYBOARD;
+ if (CTimer::GetTimeInMillisecondsPauseMode() - lastTimeClickedScrollButton >= 200) {
+ m_bPressedPgUpOnList = false;
+ m_bPressedPgDnOnList = false;
+ m_bPressedUpOnList = false;
+ m_bPressedDownOnList = false;
+ m_bPressedScrollButton = false;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ }
- if (!m_bKeyIsOK) {
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
- pControlEdit = nil;
- m_bWaitingForNewKeyBind = false;
- m_KeyPressedCode = -1;
- m_bStartWaitingForKeyBind = false;
- }
- else if (!m_bKeyChangeNotProcessed) {
- if (*pControlEdit != rsNULL || MouseButtonJustClicked || JoyButtonJustClicked)
- CheckCodesForControls(TypeOfControl);
+ if (CPad::GetPad(0)->GetTabJustDown()) {
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ m_bShowMouse = false;
+ switch (m_nCurrExLayer) {
+ case HOVEROPTION_BACK:
+ default:
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ break;
+ case HOVEROPTION_LIST:
+ m_nCurrExLayer = HOVEROPTION_USESKIN;
+ break;
+ case HOVEROPTION_USESKIN:
+ m_nCurrExLayer = HOVEROPTION_BACK;
+ }
+ if (((m_nCurrScreen == MENUPAGE_SKIN_SELECT) && (m_nCurrExLayer == HOVEROPTION_USESKIN)) && strcmp(m_aSkinName, m_PrefsSkinFile) == 0) {
+ m_nCurrExLayer = HOVEROPTION_BACK;
+ }
+ if ((m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) && (m_nCurrExLayer == HOVEROPTION_USESKIN)) {
+ m_nCurrExLayer = HOVEROPTION_BACK;
+ }
+ }
- field_159 = true;
+ bool pressed = false;
+ if (CPad::GetPad(0)->GetUp() || CPad::GetPad(0)->GetAnaloguePadUp() || CPad::GetPad(0)->GetDPadUpJustDown()) {
+ m_bShowMouse = false;
+ pressed = true;
+ } else if (CPad::GetPad(0)->GetMouseWheelUpJustUp()) {
+ m_bShowMouse = true;
+ pressed = true;
+ }
+
+ // Up
+ if (pressed) {
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ if (!m_bPressedUpOnList) {
+ m_bPressedUpOnList = true;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ ScrollUpListByOne();
+ }
+ } else {
+ m_bPressedUpOnList = false;
+ }
+
+ pressed = false;
+ if (CPad::GetPad(0)->GetDown() || CPad::GetPad(0)->GetAnaloguePadDown() || CPad::GetPad(0)->GetDPadDownJustDown()) {
+ m_bShowMouse = false;
+ pressed = true;
+ } else if (CPad::GetPad(0)->GetMouseWheelDownJustDown()) {
+ m_bShowMouse = true;
+ pressed = true;
+ }
+
+ // Down
+ if (pressed) {
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ if (!m_bPressedDownOnList) {
+ m_bPressedDownOnList = true;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ ScrollDownListByOne();
+ }
+ } else {
+ m_bPressedDownOnList = false;
+ }
+
+ if (m_nCurrScreen != MENUPAGE_KEYBOARD_CONTROLS) {
+ if (!CPad::GetPad(0)->GetPageUp()) {
+ m_bPressedPgUpOnList = false;
+ } else {
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ if (!m_bPressedPgUpOnList) {
+ m_bPressedPgUpOnList = true;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ m_bShowMouse = false;
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ PageUpList(false);
}
- else {
+ }
+ if (!CPad::GetPad(0)->GetPageDown()) {
+ m_bPressedPgDnOnList = false;
+ } else {
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ if (!m_bPressedPgDnOnList) {
+ m_bPressedPgDnOnList = true;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ m_bShowMouse = false;
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ PageDownList(false);
+ }
+ }
+ if (CPad::GetPad(0)->GetHome()) {
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ m_bShowMouse = false;
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ if (m_nTotalListRow >= MAX_VISIBLE_LIST_ROW) {
+ m_nFirstVisibleRowOnList = 0;
+ }
+ m_nSelectedListRow = 0;
+ m_nScrollbarTopMargin = (SCROLLBAR_MAX_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList;
+ }
+ if (CPad::GetPad(0)->GetEnd()) {
+ m_nCurrExLayer = HOVEROPTION_LIST;
+ m_bShowMouse = false;
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
+ if (m_nTotalListRow >= MAX_VISIBLE_LIST_ROW) {
+ m_nFirstVisibleRowOnList = m_nTotalListRow - MAX_VISIBLE_LIST_ROW;
+ }
+ m_nSelectedListRow = m_nTotalListRow - 1;
+ m_nScrollbarTopMargin = (SCROLLBAR_MAX_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList;
+ }
+ }
+
+ if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetBackJustDown()) {
+ m_bShowMouse = false;
+ goBack = true;
+ }
+
+ if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
+ switch (m_nHoverOption) {
+ case HOVEROPTION_BACK:
+ goBack = true;
+ break;
+ case HOVEROPTION_PAGEUP:
+ PageUpList(true);
+ break;
+ case HOVEROPTION_PAGEDOWN:
+ PageDownList(true);
+ break;
+ case HOVEROPTION_USESKIN:
+ if (m_nSkinsTotal > 0) {
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- for (int i = 0; i < 4; i++)
- ControlsManager.ClearSettingsAssociatedWithAction((e_ControllerAction)m_CurrCntrlAction, (eControllerType)i);
- m_bKeyIsOK = false;
- m_bKeyChangeNotProcessed = false;
- pControlEdit = nil;
- m_bWaitingForNewKeyBind = false;
- m_KeyPressedCode = -1;
- m_bStartWaitingForKeyBind = false;
+ m_pSelectedSkin = m_pSkinListHead.nextSkin;
+ strcpy(m_PrefsSkinFile, m_aSkinName);
+ CWorld::Players[0].SetPlayerSkin(m_PrefsSkinFile);
+ SaveSettings();
}
}
}
- if (pEditString || pControlEdit)
- return;
+ if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
+ switch (m_nHoverOption) {
+ case HOVEROPTION_OVER_SCROLL_UP:
+ m_nHoverOption = HOVEROPTION_CLICKED_SCROLL_UP;
+ break;
+ case HOVEROPTION_OVER_SCROLL_DOWN:
+ m_nHoverOption = HOVEROPTION_CLICKED_SCROLL_DOWN;
+ break;
+ case HOVEROPTION_LIST:
+ m_nHoverOption = HOVEROPTION_SKIN;
+ }
+ } else if ((CPad::GetPad(0)->GetLeftMouseJustUp())
+ && ((m_nHoverOption == HOVEROPTION_CLICKED_SCROLL_UP || (m_nHoverOption == HOVEROPTION_CLICKED_SCROLL_DOWN)))) {
+ m_nHoverOption = HOVEROPTION_NOT_HOVERING;
+ }
+
+ if (!CPad::GetPad(0)->GetLeftMouse()) {
+ holdingScrollBar = false;
+ } else {
+ if ((m_nHoverOption == HOVEROPTION_HOLDING_SCROLLBAR) || holdingScrollBar) {
+ holdingScrollBar = true;
+ // TODO: This part is a bit hard to reverse. Not much code tho
+ assert(0 && "Holding scrollbar isn't done yet");
+ } else {
+ switch (m_nHoverOption) {
+ case HOVEROPTION_OVER_SCROLL_UP:
+ case HOVEROPTION_CLICKED_SCROLL_UP:
+ if (!m_bPressedScrollButton) {
+ m_bPressedScrollButton = true;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ ScrollUpListByOne();
+ }
+ break;
+ case HOVEROPTION_OVER_SCROLL_DOWN:
+ case HOVEROPTION_CLICKED_SCROLL_DOWN:
+ if (!m_bPressedScrollButton) {
+ m_bPressedScrollButton = true;
+ lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
+ ScrollDownListByOne();
+ }
+ break;
+ default:
+ m_bPressedScrollButton = false;
+ }
+ }
+ }
+}
+void
+CMenuManager::UserInput(void)
+{
bool goBack = false;
bool optionSelected = false;
bool goUp = false;
bool goDown = false;
-#ifdef TIDY_UP_PBP
- bool assumeIncrease = false;
-#endif
-
-#ifdef USE_DEBUG_SCRIPT_LOADER
- if (m_nCurrScreen == MENUPAGE_START_MENU || m_nCurrScreen == MENUPAGE_NEW_GAME || m_nCurrScreen == MENUPAGE_NEW_GAME_RELOAD) {
-#ifdef RW_GL3
- if (glfwGetKey(PSGLOBAL(window), GLFW_KEY_R) == GLFW_PRESS) {
- scriptToLoad = 1;
- DoSettingsBeforeStartingAGame();
- return;
- }
-#elif defined _WIN32
- if (GetAsyncKeyState('R') & 0x8000) {
- scriptToLoad = 1;
- DoSettingsBeforeStartingAGame();
- return;
- }
-#endif
- }
-#endif
+ int8 changeValueBy;
- if (!m_bShowMouse && (m_nMouseOldPosX != m_nMousePosX || m_nMouseOldPosY != m_nMousePosY)) {
+ if (!m_AllowNavigation && m_menuTransitionProgress == 255)
+ m_AllowNavigation = true;
+ if (!m_bShowMouse && m_nCurrScreen != MENUPAGE_MAP && (m_nMouseOldPosX != m_nMousePosX || m_nMouseOldPosY != m_nMousePosY)) {
m_bShowMouse = true;
}
@@ -3745,248 +3815,23 @@ CMenuManager::ProcessButtonPresses(void)
if (m_nMousePosY < 0) m_nMousePosY = 0;
if (m_nMousePosY > SCREEN_HEIGHT) m_nMousePosY = SCREEN_HEIGHT;
- if (m_nCurrScreen == MENUPAGE_SKIN_SELECT || m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
-
- if (m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
- m_nTotalListRow = m_nSkinsTotal;
- }
- if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
- m_nTotalListRow = m_ControlMethod == CONTROL_CLASSIC ? 30 : 25;
- if (m_nSelectedListRow > m_nTotalListRow)
- m_nSelectedListRow = m_nTotalListRow - 1;
- }
-
- if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown()) {
- m_bShowMouse = 0;
- optionSelected = true;
- }
- if (CPad::GetPad(0)->GetBackspaceJustDown() && m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS && !field_159) {
- if (m_nCurrExLayer == HOVEROPTION_LIST) {
- m_nHoverOption = HOVEROPTION_NOT_HOVERING;
- m_bWaitingForNewKeyBind = true;
- m_bStartWaitingForKeyBind = true;
- m_bKeyChangeNotProcessed = true;
- pControlEdit = &m_KeyPressedCode;
- }
- } else {
- field_159 = false;
- }
-
- static PauseModeTime lastTimeClickedScrollButton = 0;
-
- if (CTimer::GetTimeInMillisecondsPauseMode() - lastTimeClickedScrollButton >= 200) {
- m_bPressedPgUpOnList = false;
- m_bPressedPgDnOnList = false;
- m_bPressedUpOnList = false;
- m_bPressedDownOnList = false;
- m_bPressedScrollButton = false;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- }
-
- if (CPad::GetPad(0)->GetTabJustDown()) {
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- m_bShowMouse = false;
- switch (m_nCurrExLayer) {
- case HOVEROPTION_BACK:
- default:
- m_nCurrExLayer = HOVEROPTION_LIST;
- break;
- case HOVEROPTION_LIST:
- m_nCurrExLayer = HOVEROPTION_USESKIN;
- break;
- case HOVEROPTION_USESKIN:
- m_nCurrExLayer = HOVEROPTION_BACK;
- }
- if (((m_nCurrScreen == MENUPAGE_SKIN_SELECT) && (m_nCurrExLayer == HOVEROPTION_USESKIN)) && strcmp(m_aSkinName, m_PrefsSkinFile) == 0) {
- m_nCurrExLayer = HOVEROPTION_BACK;
- }
- if ((m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) && (m_nCurrExLayer == HOVEROPTION_USESKIN)) {
- m_nCurrExLayer = HOVEROPTION_BACK;
- }
- }
-
- bool pressed = false;
- if (CPad::GetPad(0)->GetUp() || CPad::GetPad(0)->GetAnaloguePadUp() || CPad::GetPad(0)->GetDPadUpJustDown()) {
- m_bShowMouse = false;
- pressed = true;
- } else if (CPad::GetPad(0)->GetMouseWheelUpJustUp()) {
- m_bShowMouse = true;
- pressed = true;
- }
-
- // Up
- if (pressed) {
- m_nCurrExLayer = HOVEROPTION_LIST;
- if (!m_bPressedUpOnList) {
- m_bPressedUpOnList = true;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- ScrollUpListByOne();
- }
- } else {
- m_bPressedUpOnList = false;
- }
-
- pressed = false;
- if (CPad::GetPad(0)->GetDown() || CPad::GetPad(0)->GetAnaloguePadDown() || CPad::GetPad(0)->GetDPadDownJustDown()) {
- m_bShowMouse = false;
- pressed = true;
- } else if (CPad::GetPad(0)->GetMouseWheelDownJustDown()) {
- m_bShowMouse = true;
- pressed = true;
- }
-
- // Down
- if (pressed) {
- m_nCurrExLayer = HOVEROPTION_LIST;
- if (!m_bPressedDownOnList) {
- m_bPressedDownOnList = true;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- ScrollDownListByOne();
- }
- } else {
- m_bPressedDownOnList = false;
- }
-
- if (m_nCurrScreen != MENUPAGE_KEYBOARD_CONTROLS) {
- if (!CPad::GetPad(0)->GetPageUp()) {
- m_bPressedPgUpOnList = false;
- } else {
- m_nCurrExLayer = HOVEROPTION_LIST;
- if (!m_bPressedPgUpOnList) {
- m_bPressedPgUpOnList = true;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- m_bShowMouse = false;
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- PageUpList(false);
- }
- }
- if (!CPad::GetPad(0)->GetPageDown()) {
- m_bPressedPgDnOnList = false;
- } else {
- m_nCurrExLayer = HOVEROPTION_LIST;
- if (!m_bPressedPgDnOnList) {
- m_bPressedPgDnOnList = true;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- m_bShowMouse = false;
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- PageDownList(false);
- }
- }
- if (CPad::GetPad(0)->GetHome()) {
- m_nCurrExLayer = HOVEROPTION_LIST;
- m_bShowMouse = false;
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- if (m_nTotalListRow >= MAX_VISIBLE_LIST_ROW) {
- m_nFirstVisibleRowOnList = 0;
- }
- m_nSelectedListRow = 0;
- m_nScrollbarTopMargin = (SCROLLBAR_MAX_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList;
- }
- if (CPad::GetPad(0)->GetEnd()) {
- m_nCurrExLayer = HOVEROPTION_LIST;
- m_bShowMouse = false;
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- if (m_nTotalListRow >= MAX_VISIBLE_LIST_ROW) {
- m_nFirstVisibleRowOnList = m_nTotalListRow - MAX_VISIBLE_LIST_ROW;
- }
- m_nSelectedListRow = m_nTotalListRow - 1;
- m_nScrollbarTopMargin = (SCROLLBAR_MAX_HEIGHT / m_nTotalListRow) * m_nFirstVisibleRowOnList;
- }
- }
-
- if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetBackJustDown()) {
- m_bShowMouse = false;
- goBack = true;
- }
-
- if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
- switch (m_nHoverOption) {
- case HOVEROPTION_BACK:
- goBack = true;
- break;
- case HOVEROPTION_PAGEUP:
- PageUpList(true);
- break;
- case HOVEROPTION_PAGEDOWN:
- PageDownList(true);
- break;
- case HOVEROPTION_USESKIN:
- if (m_nSkinsTotal > 0) {
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_pSelectedSkin = m_pSkinListHead.nextSkin;
- strcpy(m_PrefsSkinFile, m_aSkinName);
- CWorld::Players[0].SetPlayerSkin(m_PrefsSkinFile);
- SaveSettings();
- }
- }
- }
-
- if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
- switch (m_nHoverOption) {
- case HOVEROPTION_OVER_SCROLL_UP:
- m_nHoverOption = HOVEROPTION_CLICKED_SCROLL_UP;
- break;
- case HOVEROPTION_OVER_SCROLL_DOWN:
- m_nHoverOption = HOVEROPTION_CLICKED_SCROLL_DOWN;
- break;
- case HOVEROPTION_LIST:
- m_nHoverOption = HOVEROPTION_SKIN;
- }
- } else if ((CPad::GetPad(0)->GetLeftMouseJustUp())
- && ((m_nHoverOption == HOVEROPTION_CLICKED_SCROLL_UP || (m_nHoverOption == HOVEROPTION_CLICKED_SCROLL_DOWN)))) {
- m_nHoverOption = HOVEROPTION_NOT_HOVERING;
- }
-
- if (!CPad::GetPad(0)->GetLeftMouse()) {
- holdingScrollBar = false;
- } else {
- if ((m_nHoverOption == HOVEROPTION_HOLDING_SCROLLBAR) || holdingScrollBar) {
- holdingScrollBar = true;
- // TODO: This part is a bit hard to reverse. Not much code tho
- assert(0 && "Holding scrollbar isn't done yet");
- } else {
- switch (m_nHoverOption) {
- case HOVEROPTION_OVER_SCROLL_UP:
- case HOVEROPTION_CLICKED_SCROLL_UP:
- if (!m_bPressedScrollButton) {
- m_bPressedScrollButton = true;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- ScrollUpListByOne();
- }
- break;
- case HOVEROPTION_OVER_SCROLL_DOWN:
- case HOVEROPTION_CLICKED_SCROLL_DOWN:
- if (!m_bPressedScrollButton) {
- m_bPressedScrollButton = true;
- lastTimeClickedScrollButton = CTimer::GetTimeInMillisecondsPauseMode();
- ScrollDownListByOne();
- }
- break;
- default:
- m_bPressedScrollButton = false;
- }
- }
- }
- } else if (isPlainTextScreen(m_nCurrScreen)) {
- if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown() || CPad::GetPad(0)->GetLeftMouseJustDown()) {
- optionSelected = true;
- }
- if (CPad::GetPad(0)->GetEscapeJustDown() || CPad::GetPad(0)->GetBackJustUp()) {
- if (m_nCurrScreen != MENUPAGE_START_MENU) {
- goBack = true;
- }
- }
+ changeValueBy = 0;
+ if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS || m_nCurrScreen == MENUPAGE_SKIN_SELECT) {
+ ProcessList(optionSelected, goBack);
} else {
- if (CPad::GetPad(0)->GetDownJustDown() || CPad::GetPad(0)->GetAnaloguePadDown() || CPad::GetPad(0)->GetDPadDownJustDown()) {
+ // TODO(Miami): Seperate that code into a new function from ProcessButtonPresses
+ // ProcessScrollingExceptLists(goBack);
+
+ if (m_AllowNavigation &&
+ (CPad::GetPad(0)->GetDownJustDown() || CPad::GetPad(0)->GetAnaloguePadDown() || CPad::GetPad(0)->GetDPadDownJustDown())) {
m_bShowMouse = false;
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
goDown = true;
m_nOptionHighlightTransitionBlend = 0;
- } else if (CPad::GetPad(0)->GetUpJustDown() || CPad::GetPad(0)->GetAnaloguePadUp() || CPad::GetPad(0)->GetDPadUpJustDown()) {
+
+ }
+ else if (m_AllowNavigation &&
+ (CPad::GetPad(0)->GetUpJustDown() || CPad::GetPad(0)->GetAnaloguePadUp() || CPad::GetPad(0)->GetDPadUpJustDown())) {
m_bShowMouse = false;
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
goUp = true;
m_nOptionHighlightTransitionBlend = 0;
}
@@ -3996,25 +3841,23 @@ CMenuManager::ProcessButtonPresses(void)
m_bShowMouse = false;
optionSelected = true;
}
- } else {
+ }
+ else {
if (CPad::GetPad(0)->GetEnterJustDown() || CPad::GetPad(0)->GetCrossJustDown()) {
m_bShowMouse = false;
optionSelected = true;
}
}
- if (CPad::GetPad(0)->GetLeftMouseJustUp()) {
-#ifndef TIDY_UP_PBP
- if (((m_nCurrOption == 0) && (m_nCurrScreen == MENUPAGE_PAUSE_MENU)) &&
-#else
- if (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action == MENUACTION_RESUME &&
-#endif
- (m_nHoverOption == HOVEROPTION_RANDOM_ITEM)) {
+ if (CPad::GetPad(0)->GetLeftMouseJustUp() && m_nCurrScreen != MENUPAGE_MAP) {
+ // TODO(Miami): New radio selector
+ if (m_nHoverOption == HOVEROPTION_RANDOM_ITEM) {
m_nCurrOption = m_nOptionMouseHovering;
optionSelected = true;
}
- } else if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
-#ifdef TIDY_UP_PBP
+ }
+ // TODO(Miami): This part is old radio selector, remove when new is reversed!!
+ else if (CPad::GetPad(0)->GetLeftMouseJustDown()) {
if (m_nHoverOption >= HOVEROPTION_RADIO_0 && m_nHoverOption <= HOVEROPTION_RADIO_9) {
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
m_PrefsRadioStation = m_nHoverOption - HOVEROPTION_RADIO_0;
@@ -4022,206 +3865,28 @@ CMenuManager::ProcessButtonPresses(void)
DMAudio.SetRadioInCar(m_PrefsRadioStation);
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
OutputDebugString("FRONTEND RADIO STATION CHANGED");
- } else if (m_nHoverOption == HOVEROPTION_RANDOM_ITEM
- && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_RESUME) {
- m_nCurrOption = m_nOptionMouseHovering;
- optionSelected = true;
}
-#else
- switch (m_nHoverOption) {
- case HOVEROPTION_RADIO_0:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = HEAD_RADIO;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_1:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = DOUBLE_CLEF;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_2:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = JAH_RADIO;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_3:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = RISE_FM;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_4:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = LIPS_106;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_5:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = GAME_FM;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_6:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = MSX_FM;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_7:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = FLASHBACK;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_8:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = CHATTERBOX;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RADIO_9:
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- m_PrefsRadioStation = USERTRACK;
- SaveSettings();
- DMAudio.SetRadioInCar(m_PrefsRadioStation);
- DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
- OutputDebugString("FRONTEND RADIO STATION CHANGED");
- break;
- case HOVEROPTION_RANDOM_ITEM:
- if (((m_nCurrOption != 0) || (m_nCurrScreen != MENUPAGE_PAUSE_MENU)) {
- m_nCurrOption = m_nOptionMouseHovering;
- optionSelected = true;
- }
- break;
- }
-#endif
}
if (CPad::GetPad(0)->GetLeftMouse()) {
-#ifndef TIDY_UP_PBP
switch (m_nHoverOption) {
case HOVEROPTION_INCREASE_BRIGHTNESS:
- m_PrefsBrightness = m_PrefsBrightness + 32;
- if (m_PrefsBrightness < 0) {
- m_PrefsBrightness = 0;
- }
- if (510 < m_PrefsBrightness) {
- m_PrefsBrightness = 511;
- }
- SaveSettings();
- break;
- case HOVEROPTION_DECREASE_BRIGHTNESS:
- m_PrefsBrightness = m_PrefsBrightness - 32;
- if (m_PrefsBrightness < 0) {
- m_PrefsBrightness = 0;
- }
- if (510 < m_PrefsBrightness) {
- m_PrefsBrightness = 511;
- }
- SaveSettings();
- break;
+ case HOVEROPTION_INCREASE_MP3BOOST:
case HOVEROPTION_INCREASE_DRAWDIST:
- m_PrefsLOD = m_PrefsLOD + (1.0f / 16);
- m_PrefsLOD = min(1.8f, m_PrefsLOD);
- CRenderer::ms_lodDistScale = m_PrefsLOD;
- SaveSettings();
- break;
- case HOVEROPTION_DECREASE_DRAWDIST:
- m_PrefsLOD = m_PrefsLOD - (1.0f / 16);
- m_PrefsLOD = max(0.8f, m_PrefsLOD);
- CRenderer::ms_lodDistScale = m_PrefsLOD;
- SaveSettings();
- break;
case HOVEROPTION_INCREASE_MUSICVOLUME:
- m_PrefsMusicVolume = m_PrefsMusicVolume + 8;
- m_PrefsMusicVolume = clamp(m_PrefsMusicVolume, 0, 127);
- DMAudio.SetMusicMasterVolume(uchar)(m_PrefsMusicVolume);
- SaveSettings();
- break;
- case HOVEROPTION_DECREASE_MUSICVOLUME:
- m_PrefsMusicVolume = m_PrefsMusicVolume - 8;
- if (m_PrefsMusicVolume < 0) {
- m_PrefsMusicVolume = 0;
- }
- if (126 < m_PrefsMusicVolume) {
- m_PrefsMusicVolume = 127;
- }
- DMAudio.SetMusicMasterVolume(uchar)(m_PrefsMusicVolume);
- SaveSettings();
- break;
case HOVEROPTION_INCREASE_SFXVOLUME:
- m_PrefsSFXVolume = m_PrefsSFXVolume + 8;
- if (m_PrefsSFXVolume < 0) {
- m_PrefsSFXVolume = 0;
- }
- if (126 < m_PrefsSFXVolume) {
- m_PrefsSFXVolume = 127;
- }
- DMAudio.SetEffectsMasterVolume(uchar)(m_PrefsSFXVolume);
- SaveSettings();
- break;
- case HOVEROPTION_DECREASE_SFXVOLUME:
- m_PrefsSFXVolume = m_PrefsSFXVolume - 8;
- if (m_PrefsSFXVolume < 0) {
- m_PrefsSFXVolume = 0;
- }
- if (126 < m_PrefsSFXVolume) {
- m_PrefsSFXVolume = 127;
- }
- DMAudio.SetEffectsMasterVolume(uchar)(m_PrefsSFXVolume);
- SaveSettings();
- break;
case HOVEROPTION_INCREASE_MOUSESENS:
- TheCamera.m_fMouseAccelHorzntl += (1.0f / 3000);
- TheCamera.m_fMouseAccelHorzntl = clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f / 3200, 1.0f / 200);
- SaveSettings();
+ CheckSliderMovement(1);
break;
+ case HOVEROPTION_DECREASE_BRIGHTNESS:
+ case HOVEROPTION_DECREASE_MP3BOOST:
+ case HOVEROPTION_DECREASE_DRAWDIST:
+ case HOVEROPTION_DECREASE_MUSICVOLUME:
+ case HOVEROPTION_DECREASE_SFXVOLUME:
case HOVEROPTION_DECREASE_MOUSESENS:
- TheCamera.m_fMouseAccelHorzntl -= (1.0f / 3000);
- TheCamera.m_fMouseAccelHorzntl = clamp(TheCamera.m_fMouseAccelHorzntl, 1.0f / 3200, 1.0f / 200);
- SaveSettings();
+ CheckSliderMovement(-1);
break;
}
-#else
- switch (m_nHoverOption) {
- case HOVEROPTION_INCREASE_BRIGHTNESS:
- case HOVEROPTION_INCREASE_DRAWDIST:
- case HOVEROPTION_INCREASE_MUSICVOLUME:
- case HOVEROPTION_INCREASE_SFXVOLUME:
- case HOVEROPTION_INCREASE_MOUSESENS:
- CheckSliderMovement(1);
- break;
- case HOVEROPTION_DECREASE_BRIGHTNESS:
- case HOVEROPTION_DECREASE_DRAWDIST:
- case HOVEROPTION_DECREASE_MUSICVOLUME:
- case HOVEROPTION_DECREASE_SFXVOLUME:
- case HOVEROPTION_DECREASE_MOUSESENS:
- CheckSliderMovement(-1);
- break;
- }
-#endif
}
if (CPad::GetPad(0)->GetLeftMouseJustUp() || CPad::GetPad(0)->GetLeftJustUp() || CPad::GetPad(0)->GetRightJustUp()
@@ -4229,23 +3894,19 @@ CMenuManager::ProcessButtonPresses(void)
|| CPad::GetPad(0)->GetAnaloguePadLeftJustUp() || CPad::GetPad(0)->GetAnaloguePadRightJustUp()
|| CPad::GetPad(0)->GetMouseWheelUpJustDown() || CPad::GetPad(0)->GetMouseWheelDownJustDown()) {
int option = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action;
- if (option == MENUACTION_BRIGHTNESS || option == MENUACTION_DRAWDIST)
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
+ if (option == MENUACTION_BRIGHTNESS)
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
else if (option == MENUACTION_SFXVOLUME)
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_AUDIO_TEST, 0);
- else if (option == MENUACTION_MOUSESENS)
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
+ else if (option == MENUACTION_DRAWDIST || option == MENUACTION_MOUSESTEER)
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
}
- if (CPad::GetPad(0)->GetBackJustDown()) {
- if (m_nCurrScreen != MENUPAGE_START_MENU && m_nCurrScreen != MENUPAGE_PAUSE_MENU) {
- m_bShowMouse = false;
- goBack = true;
- }
- }
-
- if (CPad::GetPad(0)->GetEscapeJustDown()) {
- if (m_nCurrScreen != MENUPAGE_START_MENU) {
+ if (CPad::GetPad(0)->GetBackJustDown() || CPad::GetPad(0)->GetEscapeJustDown()) {
+ if (m_nCurrScreen != MENUPAGE_NONE && m_nCurrScreen != MENUPAGE_PAUSE_MENU && m_nCurrScreen != MENUPAGE_CHOOSE_SAVE_SLOT
+ && m_nCurrScreen != MENUPAGE_SAVE_CHEAT_WARNING && m_nCurrScreen != MENUPAGE_SAVING_IN_PROGRESS
+ && m_nCurrScreen != MENUPAGE_DELETING_IN_PROGRESS && m_nCurrScreen != MENUPAGE_OUTRO)
+ {
m_bShowMouse = false;
goBack = true;
}
@@ -4254,8 +3915,156 @@ CMenuManager::ProcessButtonPresses(void)
if (((goDown) || (goUp)) || (optionSelected)) {
goBack = false;
}
+
+ }
+
+ int curAction = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action;
+ if (CPad::GetPad(0)->GetLeft() || CPad::GetPad(0)->GetPedWalkLeftRight() < 0 || CPad::GetPad(0)->GetDPadLeft()) {
+ static PauseModeTime lastSliderDecrease = 0;
+ if (CTimer::GetTimeInMillisecondsPauseMode() - lastSliderDecrease > 150) {
+ if (curAction == MENUACTION_BRIGHTNESS || curAction == MENUACTION_MUSICVOLUME ||
+ curAction == MENUACTION_SFXVOLUME || curAction == MENUACTION_RADIO ||
+ curAction == MENUACTION_DRAWDIST || curAction == MENUACTION_MOUSESENS ||
+ curAction == MENUACTION_MP3VOLUMEBOOST)
+ changeValueBy = -1;
+
+ lastSliderDecrease = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+ } else if (CPad::GetPad(0)->GetRight() || CPad::GetPad(0)->GetPedWalkLeftRight() > 0 || CPad::GetPad(0)->GetDPadRight()) {
+ static PauseModeTime lastSliderIncrease = 0;
+ if (CTimer::GetTimeInMillisecondsPauseMode() - lastSliderIncrease > 150) {
+ if (curAction == MENUACTION_BRIGHTNESS || curAction == MENUACTION_MUSICVOLUME ||
+ curAction == MENUACTION_SFXVOLUME || curAction == MENUACTION_RADIO ||
+ curAction == MENUACTION_DRAWDIST || curAction == MENUACTION_MOUSESENS ||
+ curAction == MENUACTION_MP3VOLUMEBOOST)
+ changeValueBy = 1;
+ lastSliderIncrease = CTimer::GetTimeInMillisecondsPauseMode();
+ }
+ }
+
+ if (CPad::GetPad(0)->GetMouseWheelUpJustDown()) {
+ changeValueBy = 1;
+ } else if (CPad::GetPad(0)->GetMouseWheelDownJustDown()) {
+ changeValueBy = -1;
+ }
+
+ if (m_AllowNavigation) {
+ if (CPad::GetPad(0)->GetRightJustDown() || CPad::GetPad(0)->GetAnaloguePadRight() || CPad::GetPad(0)->GetDPadRightJustDown()) {
+ m_bShowMouse = false;
+ changeValueBy = 1;
+ }
+ }
+
+ if (m_AllowNavigation) {
+ if (CPad::GetPad(0)->GetLeftJustDown() || CPad::GetPad(0)->GetAnaloguePadLeft() || CPad::GetPad(0)->GetDPadLeftJustDown()) {
+ m_bShowMouse = false;
+ changeValueBy = -1;
+ }
+ }
+ if (changeValueBy != 0) {
+ if ((m_nCurrScreen == MENUPAGE_SOUND_SETTINGS || m_nCurrScreen == MENUPAGE_DISPLAY_SETTINGS || m_nCurrScreen == MENUPAGE_CONTROLLER_PC || m_nCurrScreen == MENUPAGE_MOUSE_CONTROLS)
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_NOTHING
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_LABEL
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_YES
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_NO
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_CHANGEMENU
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_KEYBOARDCTRLS
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_GOBACK
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_RESTOREDEF
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_DRAWDIST
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_MOUSESENS
+ && aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action != MENUACTION_MP3VOLUMEBOOST) {
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
+ }
+ }
+ ProcessButtonPresses(goDown, goUp, optionSelected, goBack, changeValueBy);
+}
+
+// TODO(Miami)
+// Also rename it to ProcessUserInput when it's done
+void
+CMenuManager::ProcessButtonPresses(uint8 goDown, uint8 goUp, uint8 optionSelected, uint8 goBack, int8 changeAmount)
+{
+ if (m_nCurrScreen == MENUPAGE_OUTRO)
+ return;
+
+ if (m_bWaitingForNewKeyBind) {
+ if (m_bStartWaitingForKeyBind)
+ m_bStartWaitingForKeyBind = false;
+ else {
+ pControlEdit = CPad::EditCodesForControls(pControlEdit, 1);
+ JoyButtonJustClicked = false;
+ MouseButtonJustClicked = false;
+
+ if (CPad::GetPad(0)->GetLeftMouseJustDown())
+ MouseButtonJustClicked = 1;
+ else if (CPad::GetPad(0)->GetRightMouseJustUp())
+ MouseButtonJustClicked = 3;
+ else if (CPad::GetPad(0)->GetMiddleMouseJustUp())
+ MouseButtonJustClicked = 2;
+ else if (CPad::GetPad(0)->GetMouseWheelUpJustUp())
+ MouseButtonJustClicked = 4;
+ else if (CPad::GetPad(0)->GetMouseWheelDownJustUp())
+ MouseButtonJustClicked = 5;
+ // TODO two more buttons
+
+ JoyButtonJustClicked = ControlsManager.GetJoyButtonJustDown();
+
+ int32 TypeOfControl = KEYBOARD;
+ if (JoyButtonJustClicked)
+ TypeOfControl = JOYSTICK;
+ if (MouseButtonJustClicked)
+ TypeOfControl = MOUSE;
+ if (*pControlEdit != rsNULL)
+ TypeOfControl = KEYBOARD;
+
+ if (!m_bKeyIsOK) {
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
+ pControlEdit = nil;
+ m_bWaitingForNewKeyBind = false;
+ m_KeyPressedCode = -1;
+ m_bStartWaitingForKeyBind = false;
+ }
+ else if (!m_bKeyChangeNotProcessed) {
+ if (*pControlEdit != rsNULL || MouseButtonJustClicked || JoyButtonJustClicked)
+ CheckCodesForControls(TypeOfControl);
+
+ field_159 = true;
+ }
+ else {
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
+ for (int i = 0; i < 4; i++)
+ ControlsManager.ClearSettingsAssociatedWithAction((e_ControllerAction)m_CurrCntrlAction, (eControllerType)i);
+ m_bKeyIsOK = false;
+ m_bKeyChangeNotProcessed = false;
+ pControlEdit = nil;
+ m_bWaitingForNewKeyBind = false;
+ m_KeyPressedCode = -1;
+ m_bStartWaitingForKeyBind = false;
+ }
+ }
}
+ if (pEditString || pControlEdit)
+ return;
+
+#ifdef USE_DEBUG_SCRIPT_LOADER
+ if (m_nCurrScreen == MENUPAGE_START_MENU || m_nCurrScreen == MENUPAGE_NEW_GAME || m_nCurrScreen == MENUPAGE_NEW_GAME_RELOAD) {
+#ifdef RW_GL3
+ if (glfwGetKey(PSGLOBAL(window), GLFW_KEY_R) == GLFW_PRESS) {
+ scriptToLoad = 1;
+ DoSettingsBeforeStartingAGame();
+ return;
+ }
+#elif defined _WIN32
+ if (GetAsyncKeyState('R') & 0x8000) {
+ scriptToLoad = 1;
+ DoSettingsBeforeStartingAGame();
+ return;
+ }
+#endif
+ }
+#endif
#ifdef PS2_LIKE_MENU
if (CPad::GetPad(0)->GetLeftMouseJustDown() && hoveredBottomBarOption != -1) {
@@ -4296,11 +4105,14 @@ CMenuManager::ProcessButtonPresses(void)
}
#endif
+ int oldOption = m_nCurrOption;
if (goDown) {
m_nCurrOption++;
if (m_nCurrOption == NUM_MENUROWS || (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action == MENUACTION_NOTHING)) {
m_nCurrOption = 0;
}
+ if (oldOption != m_nCurrOption)
+ m_nOptionHighlightTransitionBlend = 0;
}
if (goUp) {
if (m_nCurrOption == (aScreens[m_nCurrScreen].m_aEntries[0].m_Action == MENUACTION_LABEL)) {
@@ -4311,6 +4123,8 @@ CMenuManager::ProcessButtonPresses(void)
} else {
m_nCurrOption--;
}
+ if (oldOption != m_nCurrOption)
+ m_nOptionHighlightTransitionBlend = 0;
}
if (optionSelected) {
@@ -4321,10 +4135,10 @@ CMenuManager::ProcessButtonPresses(void)
strncmp(aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_EntryName, "FESZ_CA", 8) != 0) {
if (m_nCurrScreen == MENUPAGE_CHOOSE_DELETE_SLOT) {
- if (Slots[aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_SaveSlot - 1] == SLOT_EMPTY)
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
+ if (Slots[m_nCurrOption] != SLOT_OK)
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_BACK, 0);
else
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
+ DMAudio.PlayFrontEndSound(SOUND_FRONTEND_FAIL, 0);
} else
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
} else {
@@ -4399,21 +4213,17 @@ CMenuManager::ProcessButtonPresses(void)
option = aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action;
switch (option) {
case MENUACTION_RADIO:
-#ifdef TIDY_UP_PBP
- assumeIncrease = true;
-#else
++m_PrefsRadioStation;
if (DMAudio.IsMP3RadioChannelAvailable()) {
if (m_PrefsRadioStation > USERTRACK)
- m_PrefsRadioStation = HEAD_RADIO;
- } else if (m_PrefsRadioStation > CHATTERBOX) {
+ m_PrefsRadioStation = WILDSTYLE;
+ } else if (m_PrefsRadioStation > WAVE) {
m_PrefsRadioStation = USERTRACK;
}
SaveSettings();
DMAudio.SetRadioInCar(m_PrefsRadioStation);
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
OutputDebugString("FRONTEND RADIO STATION CHANGED");
-#endif
break;
case MENUACTION_LANG_ENG:
m_PrefsLanguage = LANGUAGE_AMERICAN;
@@ -4471,7 +4281,7 @@ CMenuManager::ProcessButtonPresses(void)
if (saveSlot >= 2 && saveSlot <= 9) {
m_nCurrSaveSlot = saveSlot - 2;
- if (Slots[m_nCurrSaveSlot + 1] != SLOT_EMPTY && Slots[m_nCurrSaveSlot + 1] != SLOT_CORRUPTED) {
+ if (Slots[m_nCurrSaveSlot] != SLOT_EMPTY && Slots[m_nCurrSaveSlot] != SLOT_CORRUPTED) {
if (m_nCurrScreen == MENUPAGE_CHOOSE_LOAD_SLOT) {
SwitchToNewScreen(MENUPAGE_LOAD_SLOT_CONFIRM);
} else if (m_nCurrScreen == MENUPAGE_CHOOSE_DELETE_SLOT) {
@@ -4531,7 +4341,7 @@ CMenuManager::ProcessButtonPresses(void)
}
break;
#ifdef IMPROVED_VIDEOMODE
- case MENUACTION_SCREENMODE:
+ case MENUACTION_SCREENFORMAT:
if (m_nSelectedScreenMode != m_nPrefsWindowed) {
m_nPrefsWindowed = m_nSelectedScreenMode;
_psSelectScreenVM(m_nPrefsVideoMode); // apply same resolution
@@ -4554,16 +4364,12 @@ CMenuManager::ProcessButtonPresses(void)
break;
}
case MENUACTION_SPEAKERCONF:
-#ifndef TIDY_UP_PBP
if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) {
if (--m_PrefsSpeakers < 0)
m_PrefsSpeakers = 2;
DMAudio.SetSpeakerConfig(m_PrefsSpeakers);
SaveSettings();
}
-#else
- assumeIncrease = true;
-#endif
break;
case MENUACTION_PLAYERSETUP:
CPlayerSkin::BeginFrontendSkinEdit();
@@ -4587,7 +4393,7 @@ CMenuManager::ProcessButtonPresses(void)
DMAudio.SetRadioInCar(m_PrefsRadioStation);
DMAudio.PlayFrontEndTrack(m_PrefsRadioStation, 1);
SaveSettings();
- } else if (m_nCurrScreen == MENUPAGE_GRAPHICS_SETTINGS) {
+ } else if (m_nCurrScreen == MENUPAGE_DISPLAY_SETTINGS) {
m_PrefsBrightness = 256;
m_PrefsLOD = 1.2f;
#ifdef LEGACY_MENU_OPTIONS
@@ -4633,7 +4439,6 @@ CMenuManager::ProcessButtonPresses(void)
SetHelperText(2);
break;
case MENUACTION_CTRLMETHOD:
-#ifndef TIDY_UP_PBP
if (m_ControlMethod == CONTROL_CLASSIC) {
CCamera::m_bUseMouse3rdPerson = true;
m_ControlMethod = CONTROL_STANDARD;
@@ -4642,9 +4447,6 @@ CMenuManager::ProcessButtonPresses(void)
m_ControlMethod = CONTROL_CLASSIC;
}
SaveSettings();
-#else
- assumeIncrease = true;
-#endif
break;
case MENUACTION_LOADRADIO:
SwitchToNewScreen(MENUPAGE_SOUND_SETTINGS);
@@ -4661,33 +4463,6 @@ CMenuManager::ProcessButtonPresses(void)
}
break;
}
-#ifdef CUSTOM_FRONTEND_OPTIONS
- case MENUACTION_TRIGGERFUNC:
- FrontendOption& option = customFrontendOptions[aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu];
- if (m_nCurrScreen == option.screen && m_nCurrOption == option.screenOptionOrder) {
- if (option.type == FEOPTION_SELECT) {
- if (!option.onlyApplyOnEnter) {
- option.displayedValue++;
- if (option.displayedValue >= option.numRightTexts || option.displayedValue < 0)
- option.displayedValue = 0;
- }
- option.changeFunc(option.displayedValue);
- *option.value = option.displayedValue;
-
- } else if (option.type == FEOPTION_DYNAMIC) {
- option.buttonPressFunc(FEOPTION_ACTION_SELECT);
- } else if (option.type == FEOPTION_REDIRECT) {
- ChangeScreen(option.to, option.option, true, option.fadeIn);
- } else if (option.type == FEOPTION_GOBACK) {
- goBack = true;
- }
- } else {
- debug("B- screen:%d option:%d - totalCo: %d, coId: %d, coScreen:%d, coOption:%d\n", m_nCurrScreen, m_nCurrOption, numCustomFrontendOptions, aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu, option.screen, option.screenOptionOrder);
- assert(0 && "Custom frontend options are borked");
- }
-
- break;
-#endif
}
}
ProcessOnOffMenuOptions();
@@ -4760,58 +4535,11 @@ CMenuManager::ProcessButtonPresses(void)
return;
#endif
- int changeValueBy = 0;
- bool decrease = false;
-#ifdef TIDY_UP_PBP
- bool increase = assumeIncrease;
-#else
- bool increase = false;
-#endif
- if (CPad::GetPad(0)->GetLeft() || CPad::GetPad(0)->GetPedWalkLeftRight() < 0 || CPad::GetPad(0)->GetDPadLeft()) {
- static PauseModeTime lastSliderDecrease = 0;
- if (CTimer::GetTimeInMillisecondsPauseMode() - lastSliderDecrease > 150) {
- CheckSliderMovement(-1);
- lastSliderDecrease = CTimer::GetTimeInMillisecondsPauseMode();
- }
- } else if (CPad::GetPad(0)->GetRight() || CPad::GetPad(0)->GetPedWalkLeftRight() > 0 || CPad::GetPad(0)->GetDPadRight()) {
- static PauseModeTime lastSliderIncrease = 0;
- if (CTimer::GetTimeInMillisecondsPauseMode() - lastSliderIncrease > 150) {
- CheckSliderMovement(1);
- lastSliderIncrease = CTimer::GetTimeInMillisecondsPauseMode();
- }
- }
-
- if (CPad::GetPad(0)->GetRightJustDown() || CPad::GetPad(0)->GetAnaloguePadRight() || CPad::GetPad(0)->GetDPadRightJustDown()) {
- m_bShowMouse = false;
- increase = true;
- } else if (CPad::GetPad(0)->GetMouseWheelUpJustDown() && m_nCurrScreen != MENUPAGE_KEYBOARD_CONTROLS) {
- increase = true;
- CheckSliderMovement(1);
- m_bShowMouse = true;
- }
-
- if (!CPad::GetPad(0)->GetLeftJustDown() && !CPad::GetPad(0)->GetAnaloguePadLeft() && !CPad::GetPad(0)->GetDPadLeftJustDown()) {
- if (CPad::GetPad(0)->GetMouseWheelDownJustDown()) {
- if (m_nCurrScreen != MENUPAGE_KEYBOARD_CONTROLS) {
- decrease = true;
- CheckSliderMovement(-1);
- m_bShowMouse = true;
- }
- }
- } else {
- m_bShowMouse = false;
- decrease = true;
- }
- if (increase)
- changeValueBy++;
- else if (decrease)
- changeValueBy--;
-
- if (changeValueBy != 0) {
+ if (changeAmount != 0) {
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
case MENUACTION_RADIO:
- m_PrefsRadioStation += changeValueBy;
+ m_PrefsRadioStation += changeAmount;
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
if (DMAudio.IsMP3RadioChannelAvailable()) {
if (m_PrefsRadioStation < WILDSTYLE)
@@ -4831,7 +4559,7 @@ CMenuManager::ProcessButtonPresses(void)
break;
#ifdef ASPECT_RATIO_SCALE
case MENUACTION_WIDESCREEN:
- if (changeValueBy > 0) {
+ if (changeAmount > 0) {
m_PrefsUseWideScreen++;
if (m_PrefsUseWideScreen > 2)
m_PrefsUseWideScreen = 0;
@@ -4848,7 +4576,7 @@ CMenuManager::ProcessButtonPresses(void)
if (m_bGameNotLoaded) {
RwChar** videoMods = _psGetVideoModeList();
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
- if (changeValueBy > 0) {
+ if (changeAmount > 0) {
do {
++m_nDisplayVideoMode;
@@ -4866,21 +4594,21 @@ CMenuManager::ProcessButtonPresses(void)
}
break;
#ifdef IMPROVED_VIDEOMODE
- case MENUACTION_SCREENMODE:
+ case MENUACTION_SCREENFORMAT:
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
m_nSelectedScreenMode = !m_nSelectedScreenMode;
break;
#endif
case MENUACTION_AUDIOHW:
if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) {
- m_nPrefsAudio3DProviderIndex += changeValueBy;
+ m_nPrefsAudio3DProviderIndex += changeAmount;
m_nPrefsAudio3DProviderIndex = clamp(m_nPrefsAudio3DProviderIndex, 0, DMAudio.GetNum3DProvidersAvailable() - 1);
}
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
break;
case MENUACTION_SPEAKERCONF:
if (m_nPrefsAudio3DProviderIndex != NO_AUDIO_PROVIDER) {
- m_PrefsSpeakers -= changeValueBy;
+ m_PrefsSpeakers -= changeAmount;
m_PrefsSpeakers = clamp(m_PrefsSpeakers, 0, 2);
DMAudio.SetSpeakerConfig(m_PrefsSpeakers);
SaveSettings();
@@ -4893,45 +4621,15 @@ CMenuManager::ProcessButtonPresses(void)
DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
SaveSettings();
break;
-#ifdef CUSTOM_FRONTEND_OPTIONS
- case MENUACTION_TRIGGERFUNC:
- FrontendOption& option = customFrontendOptions[aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu];
- if (m_nCurrScreen == option.screen && m_nCurrOption == option.screenOptionOrder) {
- if (option.type == FEOPTION_SELECT) {
- if (changeValueBy > 0) {
- option.displayedValue++;
- if (option.displayedValue >= option.numRightTexts)
- option.displayedValue = 0;
- } else {
- option.displayedValue--;
- if (option.displayedValue < 0)
- option.displayedValue = option.numRightTexts - 1;
- }
- if (!option.onlyApplyOnEnter) {
- option.changeFunc(option.displayedValue);
- *option.value = option.displayedValue;
- }
- } else if (option.type == FEOPTION_DYNAMIC) {
- option.buttonPressFunc(changeValueBy > 0 ? FEOPTION_ACTION_RIGHT : FEOPTION_ACTION_LEFT);
- }
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_SETTING_CHANGE, 0);
- }
- else {
- debug("C- screen:%d option:%d - totalCo: %d, coId: %d, coScreen:%d, coOption:%d\n", m_nCurrScreen, m_nCurrOption, numCustomFrontendOptions, aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_TargetMenu, option.screen, option.screenOptionOrder);
- assert(0 && "Custom frontend options are borked");
- }
-
- break;
-#endif
}
+ CheckSliderMovement(changeAmount);
ProcessOnOffMenuOptions();
if (m_nCurrScreen == MENUPAGE_KEYBOARD_CONTROLS) {
- if (changeValueBy < 1) {
+ if (changeAmount < 1) {
m_nSelectedContSetupColumn = CONTSETUP_PED_COLUMN;
} else {
m_nSelectedContSetupColumn = CONTSETUP_VEHICLE_COLUMN;
}
- DMAudio.PlayFrontEndSound(SOUND_FRONTEND_MENU_NEW_PAGE, 0);
}
}
}
@@ -5226,9 +4924,13 @@ CMenuManager::SwitchMenuOnAndOff()
Initialise();
LoadAllTextures();
- // TODO(Miami): Cheat warning
- m_nCurrScreen = MENUPAGE_CHOOSE_SAVE_SLOT;
- m_nCurrOption = 8;
+ if (CPad::bHasPlayerCheated) {
+ m_nCurrScreen = MENUPAGE_SAVE_CHEAT_WARNING;
+ m_nCurrOption = 0;
+ } else {
+ m_nCurrScreen = MENUPAGE_CHOOSE_SAVE_SLOT;
+ m_nCurrOption = 8;
+ }
}
m_bStartUpFrontEndRequested = false;
@@ -5262,7 +4964,7 @@ CMenuManager::UnloadTextures()
m_bSpritesLoaded = false;
}
m_OnlySaveMenu = false;
- // TODO(Miami): Place name thing
+ CUserDisplay::PlaceName.ProcessAfterFrontEndShutDown();
}
void
@@ -5565,27 +5267,6 @@ CMenuManager::ConstructStatLine(int rowIdx)
STAT_LINE("DED_CRI", &(nTemp = CStats::PedsKilledOfThisType[PEDTYPE_CRIMINAL]), false, nil);
STAT_LINE("HEL_DST", &CStats::HelisDestroyed, false, nil);
STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, false, nil);
- STAT_LINE("ACCURA", &(nTemp = (CStats::InstantHitsFiredByPlayer == 0 ? 0 :
- CStats::InstantHitsHitByPlayer * 100.0f / CStats::InstantHitsFiredByPlayer)), false, nil);
-
- if (CStats::ElBurroTime > 0) {
- STAT_LINE("ELBURRO", &CStats::ElBurroTime, false, nil);
- }
- if (CStats::Record4x4One > 0) {
- STAT_LINE("FEST_R1", &CStats::Record4x4One, false, nil);
- }
- if (CStats::Record4x4Two > 0) {
- STAT_LINE("FEST_R2", &CStats::Record4x4Two, false, nil);
- }
- if (CStats::Record4x4Three > 0) {
- STAT_LINE("FEST_R3", &CStats::Record4x4Three, false, nil);
- }
- if (CStats::Record4x4Mayhem > 0) {
- STAT_LINE("FEST_RM", &CStats::Record4x4Mayhem, false, nil);
- }
- if (CStats::TimeTakenDefuseMission > 0) {
- STAT_LINE("FEST_BD", &CStats::TimeTakenDefuseMission, false, nil);
- }
if (CStats::HighestScores[0] > 0) {
STAT_LINE("FEST_BB", nil, false, nil);
@@ -5612,7 +5293,11 @@ CMenuManager::ConstructStatLine(int rowIdx)
#ifndef USE_MEASUREMENTS_IN_METERS
float fTemp;
STAT_LINE("FEST_DF", &(fTemp = CStats::DistanceTravelledOnFoot * MILES_IN_METER), true, nil);
- STAT_LINE("FEST_DC", &(fTemp = CStats::DistanceTravelledInVehicle * MILES_IN_METER), true, nil);
+ STAT_LINE("FEST_DC", &(fTemp = CStats::DistanceTravelledByCar * MILES_IN_METER), true, nil);
+ STAT_LINE("DISTBIK", &(fTemp = CStats::DistanceTravelledByBike * MILES_IN_METER), true, nil);
+ STAT_LINE("DISTBOA", &(fTemp = CStats::DistanceTravelledByBoat * MILES_IN_METER), true, nil);
+ STAT_LINE("DISTGOL", &(fTemp = CStats::DistanceTravelledByGolfCart * MILES_IN_METER), true, nil);
+ STAT_LINE("DISTHEL", &(fTemp = CStats::DistanceTravelledByHelicoptor * MILES_IN_METER), true, nil);
STAT_LINE("MXCARD", &(fTemp = CStats::MaximumJumpDistance * FEET_IN_METER), true, nil);
STAT_LINE("MXCARJ", &(fTemp = CStats::MaximumJumpHeight * FEET_IN_METER), true, nil);
break;
@@ -5627,7 +5312,11 @@ CMenuManager::ConstructStatLine(int rowIdx)
case LANGUAGE_JAPANESE:
#endif
STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, true, nil);
- STAT_LINE("FESTDCM", &CStats::DistanceTravelledInVehicle, true, nil);
+ STAT_LINE("FESTDCM", &CStats::DistanceTravelledByCar, true, nil);
+ STAT_LINE("DISTBIM", &CStats::DistanceTravelledByBike, true, nil);
+ STAT_LINE("DISTBOM", &CStats::DistanceTravelledByBoat, true, nil);
+ STAT_LINE("DISTGOM", &CStats::DistanceTravelledByGolfCart, true, nil);
+ STAT_LINE("DISTHEM", &CStats::DistanceTravelledByHelicoptor, true, nil);
STAT_LINE("MXCARDM", &CStats::MaximumJumpDistance, true, nil);
STAT_LINE("MXCARJM", &CStats::MaximumJumpHeight, true, nil);
break;
diff --git a/src/core/Frontend.h b/src/core/Frontend.h
index 83d86d5b..858ad1f3 100644
--- a/src/core/Frontend.h
+++ b/src/core/Frontend.h
@@ -160,7 +160,7 @@ enum eMenuScreen
MENUPAGE_NEW_GAME = 1,
MENUPAGE_BRIEFS = 2,
MENUPAGE_SOUND_SETTINGS = 3,
- MENUPAGE_GRAPHICS_SETTINGS = 4,
+ MENUPAGE_DISPLAY_SETTINGS = 4,
MENUPAGE_LANGUAGE_SETTINGS = 5,
MENUPAGE_MAP = 6,
MENUPAGE_NEW_GAME_RELOAD = 7,
@@ -200,6 +200,9 @@ enum eMenuScreen
MENUPAGE_CONTROLLER_PC_OLD4,
MENUPAGE_CONTROLLER_DEBUG,
#endif
+#ifdef GRAPHICS_MENU_OPTIONS
+ MENUPAGE_GRAPHICS_SETTINGS,
+#endif
MENUPAGES
};
@@ -266,12 +269,28 @@ enum eMenuAction
MENUACTION_MOUSESTEER,
MENUACTION_UNK110,
#ifdef IMPROVED_VIDEOMODE
- MENUACTION_SCREENMODE,
+ MENUACTION_SCREENFORMAT,
#endif
#ifdef LEGACY_MENU_OPTIONS
MENUACTION_CTRLVIBRATION,
MENUACTION_CTRLCONFIG,
#endif
+#ifdef ANISOTROPIC_FILTERING
+ MENUACTION_MIPMAPS,
+ MENUACTION_TEXTURE_FILTERING,
+#endif
+#ifdef MULTISAMPLING
+ MENUACTION_MULTISAMPLING,
+#endif
+#ifdef NO_ISLAND_LOADING
+ MENUACTION_ISLANDLOADING,
+#endif
+#ifdef PS2_ALPHA_TEST
+ MENUACTION_PS2_ALPHA_TEST,
+#endif
+#ifdef CUTSCENE_BORDERS_SWITCH
+ MENUACTION_CUTSCENEBORDERS,
+#endif
};
enum eCheckHover
@@ -318,6 +337,8 @@ enum eCheckHover
HOVEROPTION_DECREASE_SFXVOLUME,
HOVEROPTION_INCREASE_MOUSESENS,
HOVEROPTION_DECREASE_MOUSESENS,
+ HOVEROPTION_INCREASE_MP3BOOST,
+ HOVEROPTION_DECREASE_MP3BOOST,
HOVEROPTION_NOT_HOVERING,
};
@@ -574,6 +595,10 @@ public:
int32 m_nPrefsSubsystem;
int32 m_nSelectedScreenMode;
#endif
+#ifdef MULTISAMPLING
+ static int8 m_nPrefsMSAALevel;
+ static int8 m_nDisplayMSAALevel;
+#endif
enum LANGUAGE
{
@@ -601,7 +626,25 @@ public:
CMenuManager(void);
~CMenuManager(void) { UnloadTextures(); }
-
+
+#ifdef NO_ISLAND_LOADING
+ enum
+ {
+ ISLAND_LOADING_LOW = 0,
+ ISLAND_LOADING_MEDIUM,
+ ISLAND_LOADING_HIGH
+ };
+
+ static int8 m_DisplayIslandLoading;
+ static int8 m_PrefsIslandLoading;
+
+ #define ISLAND_LOADING_IS(p) if (CMenuManager::m_PrefsIslandLoading == CMenuManager::ISLAND_LOADING_##p)
+ #define ISLAND_LOADING_ISNT(p) if (CMenuManager::m_PrefsIslandLoading != CMenuManager::ISLAND_LOADING_##p)
+#else
+ #define ISLAND_LOADING_IS(p)
+ #define ISLAND_LOADING_ISNT(p)
+#endif
+
void Initialise();
void PrintMap();
void SetFrontEndRenderStates();
@@ -633,7 +676,9 @@ public:
static void PrintErrorMessage();
void PrintStats();
void Process();
- void ProcessButtonPresses();
+ void ProcessList(bool &optionSelected, bool &goBack);
+ void UserInput();
+ void ProcessButtonPresses(uint8, uint8, uint8, uint8, int8);
void ProcessFileActions();
void ProcessOnOffMenuOptions();
void RequestFrontEndShutDown();
diff --git a/src/core/Frontend_PS2.cpp b/src/core/Frontend_PS2.cpp
index 8e604978..d9eff445 100644
--- a/src/core/Frontend_PS2.cpp
+++ b/src/core/Frontend_PS2.cpp
@@ -1179,30 +1179,9 @@ CMenuManager::InitialiseMenuContents(void)
STAT_LINE("KGS_EXP", &CStats::KgsOfExplosivesUsed, 0, nil);
- nTemp = (CStats::InstantHitsFiredByPlayer == 0 ? 0 : CStats::InstantHitsHitByPlayer * 100.0f / CStats::InstantHitsFiredByPlayer);
- STAT_LINE("ACCURA", &nTemp, 0, nil);
-
- if (CStats::ElBurroTime > 0)
- STAT_LINE("ELBURRO", &CStats::ElBurroTime, 0, nil);
-
- if (CStats::Record4x4One > 0)
- STAT_LINE("FEST_R1", &CStats::Record4x4One, 0, nil);
-
- if (CStats::Record4x4Two > 0)
- STAT_LINE("FEST_R2", &CStats::Record4x4Two, 0, nil);
-
- if (CStats::Record4x4Three > 0)
- STAT_LINE("FEST_R3", &CStats::Record4x4Three, 0, nil);
-
- if (CStats::Record4x4Mayhem > 0)
- STAT_LINE("FEST_RM", &CStats::Record4x4Mayhem, 0, nil);
-
if (CStats::LongestFlightInDodo > 0)
STAT_LINE("FEST_LF", &CStats::LongestFlightInDodo, 0, nil);
- if (CStats::TimeTakenDefuseMission > 0)
- STAT_LINE("FEST_BD", &CStats::TimeTakenDefuseMission, 0, nil);
-
STAT_LINE("CAR_CRU", &CStats::CarsCrushed, 0, nil);
if (CStats::HighestScores[0] > 0)
@@ -1231,7 +1210,11 @@ CMenuManager::InitialiseMenuContents(void)
STAT_LINE("FEST_H4", &CStats::HighestScores[4], 0, nil);
STAT_LINE("FESTDFM", &CStats::DistanceTravelledOnFoot, 0, nil);
- STAT_LINE("FESTDCM", &CStats::DistanceTravelledInVehicle, 0, nil);
+ STAT_LINE("FESTDCM", &CStats::DistanceTravelledByCar, 0, nil);
+ STAT_LINE("DISTBIM", &CStats::DistanceTravelledByBike, 0, nil);
+ STAT_LINE("DISTBOM", &CStats::DistanceTravelledByBoat, 0, nil);
+ STAT_LINE("DISTGOM", &CStats::DistanceTravelledByGolfCart, 0, nil);
+ STAT_LINE("DISTHEM", &CStats::DistanceTravelledByHelicoptor, 0, nil);
STAT_LINE("MMRAIN", &CStats::mmRain, 0, nil);
nTemp = (int32)CStats::MaximumJumpDistance;
STAT_LINE("MXCARDM", &nTemp, 0, nil);
diff --git a/src/core/Game.cpp b/src/core/Game.cpp
index 6825c247..ee3c32b1 100644
--- a/src/core/Game.cpp
+++ b/src/core/Game.cpp
@@ -89,6 +89,9 @@
#include "Occlusion.h"
#include "debugmenu.h"
#include "Ropes.h"
+#include "WindModifiers.h"
+#include "postfx.h"
+#include "custompipes.h"
eLevelName CGame::currLevel;
int32 CGame::currArea;
@@ -151,6 +154,9 @@ CGame::InitialiseOnceBeforeRW(void)
CFileMgr::Initialise();
CdStreamInit(MAX_CDCHANNELS);
ValidateVersion();
+#ifdef EXTENDED_COLOURFILTER
+ CPostFX::InitOnce();
+#endif
return true;
}
@@ -288,10 +294,6 @@ bool CGame::InitialiseOnceAfterRW(void)
DMAudio.SetEffectsFadeVol(127);
DMAudio.SetMusicFadeVol(127);
CWorld::Players[0].SetPlayerSkin(FrontEndMenuManager.m_PrefsSkinFile);
-
-#ifdef CUSTOM_FRONTEND_OPTIONS
- CustomFrontendOptionsPopulate();
-#endif
return true;
}
@@ -327,6 +329,7 @@ bool CGame::Initialise(const char* datFile)
CDebug::DebugInitTextBuffer();
ThePaths.Init();
ThePaths.AllocatePathFindInfoMem(4500);
+ CScriptPaths::Init();
CWeather::Init();
CCullZones::Init();
COcclusion::Init();
@@ -355,6 +358,10 @@ bool CGame::Initialise(const char* datFile)
CdStreamAddImage("MODELS\\GTA3.IMG");
CFileLoader::LoadLevel("DATA\\DEFAULT.DAT");
CFileLoader::LoadLevel(datFile);
+#ifdef EXTENDED_PIPELINES
+ // for generic fallback
+ CustomPipes::SetTxdFindCallback();
+#endif
CWorld::AddParticles();
CVehicleModelInfo::LoadVehicleColours();
CVehicleModelInfo::LoadEnvironmentMaps();
@@ -453,6 +460,7 @@ bool CGame::ShutDown(void)
CReplay::FinishPlayback();
CPlane::Shutdown();
CTrain::Shutdown();
+ CScriptPaths::Shutdown();
CSpecialFX::Shutdown();
#ifndef PS2
CGarages::Shutdown();
@@ -567,6 +575,7 @@ void CGame::ReInitGameObjectVariables(void)
CSpecialFX::Init();
CRopes::Init();
CWaterCannons::Init();
+ CScriptPaths::Init();
CParticle::ReloadConfig();
#ifdef PS2_MENU
@@ -607,10 +616,7 @@ void CGame::ShutDownForRestart(void)
CWorld::ClearForRestart();
CGameLogic::ClearShortCut();
CTimer::Shutdown();
- CStreaming::FlushRequestList();
- CStreaming::DeleteAllRwObjects();
- CStreaming::RemoveAllUnusedModels();
- CStreaming::ms_disableStreaming = false;
+ CStreaming::ReInit();
CRadar::RemoveRadarSections();
FrontEndMenuManager.UnloadTextures();
CParticleObject::RemoveAllExpireableParticleObjects();
@@ -695,6 +701,7 @@ void CGame::Process(void)
if (!CCutsceneMgr::IsCutsceneProcessing() && !CTimer::GetIsCodePaused())
FrontEndMenuManager.Process();
CStreaming::Update();
+ CWindModifiers::Number = 0;
if (!CTimer::GetIsPaused())
{
CTheZones::Update();
@@ -708,6 +715,7 @@ void CGame::Process(void)
CWeather::Update();
CTheScripts::Process();
CCollision::Update();
+ CScriptPaths::Update();
CTrain::UpdateTrains();
CPlane::UpdatePlanes();
CHeli::UpdateHelis();
diff --git a/src/core/MenuScreens.cpp b/src/core/MenuScreens.cpp
index 6fbf597b..65c265ed 100644
--- a/src/core/MenuScreens.cpp
+++ b/src/core/MenuScreens.cpp
@@ -2,7 +2,43 @@
#include "Frontend.h"
#ifdef PC_MENU
-// If you want to add new options, please don't do that here and see CustomFrontendOptionsPopulate in re3.cpp.
+#ifdef CUTSCENE_BORDERS_SWITCH
+#define MENU_CUTSCENE_BORDERS_SWITCH(screen) MENUACTION_CUTSCENEBORDERS, "FEM_CSB", SAVESLOT_NONE, screen,
+#else
+#define MENU_CUTSCENE_BORDERS_SWITCH(screen)
+#endif
+
+#ifdef IMPROVED_VIDEOMODE
+#define MENU_IMPROVED_VIDEOMODE(screen) MENUACTION_SCREENFORMAT, "FEM_SCF", SAVESLOT_NONE, screen,
+#else
+#define MENU_IMPROVED_VIDEOMODE(screen)
+#endif
+
+#ifdef ANISOTROPIC_FILTERING
+#define MENU_MIPMAPS(screen) MENUACTION_MIPMAPS, "FED_MIP", SAVESLOT_NONE, screen,
+#define MENU_TEXTURE_FILTERING(screen) MENUACTION_TEXTURE_FILTERING, "FED_FIL", SAVESLOT_NONE, screen,
+#else
+#define MENU_MIPMAPS(screen)
+#define MENU_TEXTURE_FILTERING(screen)
+#endif
+
+#ifdef MULTISAMPLING
+#define MENU_MULTISAMPLING(screen) MENUACTION_MULTISAMPLING, "FED_AAS", SAVESLOT_NONE, screen,
+#else
+#define MENU_MULTISAMPLING(screen)
+#endif
+
+#ifdef NO_ISLAND_LOADING
+#define MENU_ISLAND_LOADING(screen) MENUACTION_ISLANDLOADING, "FEM_ISL", SAVESLOT_NONE, screen,
+#else
+#define MENU_ISLAND_LOADING(screen)
+#endif
+
+#ifdef PS2_ALPHA_TEST
+#define MENU_PS2_ALPHA_TEST(screen) MENUACTION_PS2_ALPHA_TEST, "FEM_2PR", SAVESLOT_NONE, screen,
+#else
+#define MENU_PS2_ALPHA_TEST(screen)
+#endif
CMenuScreen aScreens[] = {
// MENUPAGE_STATS = 0
@@ -44,24 +80,24 @@ CMenuScreen aScreens[] = {
#endif
{ "FEH_DIS", MENUPAGE_OPTIONS, 2,
- MENUACTION_BRIGHTNESS, "FED_BRI", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 78, MENUALIGN_LEFT,
- MENUACTION_DRAWDIST, "FEM_LOD", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 103, MENUALIGN_LEFT,
+ MENUACTION_BRIGHTNESS, "FED_BRI", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 78, MENUALIGN_LEFT,
+ MENUACTION_DRAWDIST, "FEM_LOD", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 103, MENUALIGN_LEFT,
#ifdef LEGACY_MENU_OPTIONS
- MENUACTION_FRAMESYNC, "FEM_VSC", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 128, MENUALIGN_LEFT,
+ MENUACTION_FRAMESYNC, "FEM_VSC", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 128, MENUALIGN_LEFT,
#endif
- MENUACTION_FRAMELIMIT, "FEM_FRM", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 128 + Y_OFFSET/2, MENUALIGN_LEFT,
+ MENUACTION_FRAMELIMIT, "FEM_FRM", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 128 + Y_OFFSET/2, MENUALIGN_LEFT,
#ifdef LEGACY_MENU_OPTIONS
- MENUACTION_TRAILS, "FED_TRA", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 178, MENUALIGN_LEFT,
+ MENUACTION_TRAILS, "FED_TRA", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 178, MENUALIGN_LEFT,
#endif
- MENUACTION_SUBTITLES, "FED_SUB", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 153 + Y_OFFSET, MENUALIGN_LEFT,
- MENUACTION_WIDESCREEN, "FED_WIS", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 178 + Y_OFFSET, MENUALIGN_LEFT,
- MENUACTION_LEGENDS, "MAP_LEG", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 202 + Y_OFFSET, MENUALIGN_LEFT,
- MENUACTION_RADARMODE, "FED_RDR", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 228 + Y_OFFSET, MENUALIGN_LEFT,
- MENUACTION_HUD, "FED_HUD", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 253 + Y_OFFSET, MENUALIGN_LEFT,
- MENUACTION_SCREENRES, "FED_RES", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 278 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_SUBTITLES, "FED_SUB", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 153 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_WIDESCREEN, "FED_WIS", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 178 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_LEGENDS, "MAP_LEG", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 202 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_RADARMODE, "FED_RDR", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 228 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_HUD, "FED_HUD", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 253 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_SCREENRES, "FED_RES", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 278 + Y_OFFSET, MENUALIGN_LEFT,
#ifdef IMPROVED_VIDEOMODE
- MENUACTION_SCREENMODE, "FED_POS", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 40, 303 + Y_OFFSET, MENUALIGN_LEFT,
- MENUACTION_RESTOREDEF, "FET_DEF", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 320, 328 + Y_OFFSET, MENUALIGN_CENTER,
+ MENUACTION_SCREENFORMAT,"FED_POS", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 40, 303 + Y_OFFSET, MENUALIGN_LEFT,
+ MENUACTION_RESTOREDEF, "FET_DEF", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 320, 328 + Y_OFFSET, MENUALIGN_CENTER,
MENUACTION_GOBACK, "FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE, 320, 353 + Y_OFFSET, MENUALIGN_CENTER,
#else
MENUACTION_RESTOREDEF, "FET_DEF", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 320, 303 + Y_OFFSET, MENUALIGN_CENTER,
@@ -230,7 +266,7 @@ CMenuScreen aScreens[] = {
{ "FET_OPT", MENUPAGE_NONE, 5,
MENUACTION_CHANGEMENU, "FEO_CON", SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC, 320, 132, MENUALIGN_CENTER,
MENUACTION_LOADRADIO, "FEO_AUD", SAVESLOT_NONE, MENUPAGE_SOUND_SETTINGS, 0, 0, MENUALIGN_CENTER,
- MENUACTION_CHANGEMENU, "FEO_DIS", SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS, 0, 0, MENUALIGN_CENTER,
+ MENUACTION_CHANGEMENU, "FEO_DIS", SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS, 0, 0, MENUALIGN_CENTER,
MENUACTION_CHANGEMENU, "FEO_LAN", SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS, 0, 0, MENUALIGN_CENTER,
MENUACTION_PLAYERSETUP, "FET_PS", SAVESLOT_NONE, MENUPAGE_SKIN_SELECT, 0, 0, MENUALIGN_CENTER,
MENUACTION_GOBACK, "FEDS_TB", SAVESLOT_NONE, 0, 0, 0, MENUALIGN_CENTER,
diff --git a/src/core/Pad.cpp b/src/core/Pad.cpp
index c1016bdd..42b26c63 100644
--- a/src/core/Pad.cpp
+++ b/src/core/Pad.cpp
@@ -11,7 +11,11 @@
#include "platform.h"
#ifdef 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 "Pad.h"
@@ -41,6 +45,8 @@
#include "Fluff.h"
#include "Gangs.h"
#include "platform.h"
+#include "Stats.h"
+#include "CarCtrl.h"
#ifdef GTA_PS2
#include "eetypes.h"
@@ -59,6 +65,7 @@ bool CPad::bDisplayNoControllerMessage;
bool CPad::bObsoleteControllerMessage;
bool CPad::bOldDisplayNoControllerMessage;
bool CPad::m_bMapPadOneToPadTwo;
+bool CPad::bHasPlayerCheated;
#ifdef GTA_PS2
unsigned char act_direct[6];
unsigned char act_align[6];
@@ -228,6 +235,8 @@ void VehicleCheat(bool something, int model)
CWorld::Add(vehicle);
}
}
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
void BlowUpCarsCheat()
@@ -287,6 +296,8 @@ void MayhemCheat()
PED_FLAG_GANG2 | PED_FLAG_GANG3 | PED_FLAG_GANG4 | PED_FLAG_GANG5 |
PED_FLAG_GANG6 | PED_FLAG_GANG7 | PED_FLAG_GANG8 | PED_FLAG_GANG9 |
PED_FLAG_EMERGENCY | PED_FLAG_PROSTITUTE | PED_FLAG_CRIMINAL | PED_FLAG_SPECIAL );
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
void EverybodyAttacksPlayerCheat()
@@ -294,12 +305,17 @@ void EverybodyAttacksPlayerCheat()
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
for (int i = PEDTYPE_CIVMALE; i < PEDTYPE_SPECIAL; i++)
CPedType::AddThreat(i, PED_FLAG_PLAYER1);
+
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
void WeaponsForAllCheat()
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
CPopulation::ms_bGivePedsWeapons = !CPopulation::ms_bGivePedsWeapons;
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
void FastTimeCheat()
@@ -380,19 +396,24 @@ void OnlyRenderWheelsCheat()
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
CVehicle::bWheelsOnlyCheat = !CVehicle::bWheelsOnlyCheat;
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
-
void ChittyChittyBangBangCheat()
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
CVehicle::bAllDodosCheat = !CVehicle::bAllDodosCheat;
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
void StrongGripCheat()
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
CVehicle::bCheat3 = !CVehicle::bCheat3;
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
void NastyLimbsCheat()
@@ -404,6 +425,7 @@ void FannyMagnetCheat()
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
CPed::bFannyMagnetCheat = !CPed::bFannyMagnetCheat;
+ CPad::bHasPlayerCheated = true;
}
void BlackCarsCheat()
@@ -420,6 +442,12 @@ void PinkCarsCheat()
gbPinkCars = true;
}
+void MadCarsCheat()
+{
+ CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
+ CCarCtrl::bMadDriversCheat = true;
+}
+
void NoSeaBedCheat(void)
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
@@ -437,6 +465,7 @@ void BackToTheFuture(void)
{
CHud::SetHelpMessage(TheText.Get("CHEAT1"), true);
CVehicle::bHoverCheat = !CVehicle::bHoverCheat;
+ CPad::bHasPlayerCheated = true;
}
void SuicideCheat(void) {
@@ -453,6 +482,8 @@ void DoChicksWithGunsCheat(void) {
CStreaming::RemoveCurrentZonesModels();
CGangs::SetGangPedModels(GANG_PLAYER, MI_HFYBE, MI_WFYBE);
CGangs::SetGangWeapons(GANG_PLAYER, WEAPONTYPE_M4, WEAPONTYPE_M4);
+ CStats::CheatedCount += 1000;
+ CPad::bHasPlayerCheated = true;
}
//////////////////////////////////////////////////////////////////////////
@@ -611,6 +642,11 @@ void CPad::Clear(bool bResetPlayerControls)
ShakeFreq = 0;
ShakeDur = 0;
+ for (int32 i = 0; i < DRUNK_STEERING_BUFFER_SIZE; i++)
+ SteeringLeftRightBuffer[i] = 0;
+
+ DrunkDrivingBufferUsed = 0;
+
if ( bResetPlayerControls )
DisablePlayerControls = PLAYERCONTROL_ENABLED;
@@ -1203,6 +1239,7 @@ void CPad::AddToPCCheatString(char c)
// "MIAMITRAFFIC"
else if (!Cheat_strncmp(KeyBoardCheatString, "FNMGNmWPNLVU")) {
KeyBoardCheatString[0] = ' ';
+ MadCarsCheat();
}
// "AHAIRDRESSERSCAR"
else if (!Cheat_strncmp(KeyBoardCheatString, "UFJT_`VZF]QZPaUG")) {
@@ -1786,6 +1823,9 @@ void CPad::Update(int16 pad)
bHornHistory[iCurrHornHistory] = GetHorn();
+ for (int32 i = DRUNK_STEERING_BUFFER_SIZE - 2; i >= 0; i--) {
+ SteeringLeftRightBuffer[i + 1] = SteeringLeftRightBuffer[i];
+ }
if ( !bDisplayNoControllerMessage )
CGame::bDemoMode = false;
@@ -1879,6 +1919,7 @@ int16 CPad::GetSteeringLeftRight(void)
if ( ArePlayerControlsDisabled() )
return 0;
+ int16 value;
switch (CURMODE)
{
case 0:
@@ -1888,9 +1929,12 @@ int16 CPad::GetSteeringLeftRight(void)
int16 dpad = (NewState.DPadRight - NewState.DPadLeft) / 2;
if ( Abs(axis) > Abs(dpad) )
- return axis;
+ value = axis;
else
- return dpad;
+ value = dpad;
+
+ SteeringLeftRightBuffer[0] = value;
+ value = SteeringLeftRightBuffer[DrunkDrivingBufferUsed];
break;
}
@@ -1898,13 +1942,18 @@ int16 CPad::GetSteeringLeftRight(void)
case 1:
case 3:
{
- return NewState.LeftStickX;
-
+ SteeringLeftRightBuffer[0] = NewState.LeftStickX;
+ value = SteeringLeftRightBuffer[DrunkDrivingBufferUsed];
+ break;
+ }
+ default:
+ {
+ value = 0;
break;
}
}
- return 0;
+ return value;
}
int16 CPad::GetSteeringUpDown(void)
@@ -3067,7 +3116,7 @@ void CPad::ResetCheats(void)
CVehicle::bCheat8 = false;
gbBlackCars = false;
gbPinkCars = false;
-
+ CCarCtrl::bMadDriversCheat = false;
gbFastTime = false;
CTimer::SetTimeScale(1.0f);
}
diff --git a/src/core/Pad.h b/src/core/Pad.h
index 2a0bb7d3..72851317 100644
--- a/src/core/Pad.h
+++ b/src/core/Pad.h
@@ -141,9 +141,12 @@ public:
enum
{
HORNHISTORY_SIZE = 5,
+ DRUNK_STEERING_BUFFER_SIZE = 10,
};
CControllerState NewState;
CControllerState OldState;
+ int16 SteeringLeftRightBuffer[DRUNK_STEERING_BUFFER_SIZE];
+ int32 DrunkDrivingBufferUsed;
CControllerState PCTempKeyState;
CControllerState PCTempJoyState;
CControllerState PCTempMouseState;
@@ -171,6 +174,7 @@ public:
static bool bObsoleteControllerMessage;
static bool bOldDisplayNoControllerMessage;
static bool m_bMapPadOneToPadTwo;
+ static bool bHasPlayerCheated;
static CKeyboardState OldKeyState;
static CKeyboardState NewKeyState;
@@ -262,6 +266,7 @@ public:
static char *EditString(char *pStr, int32 nSize);
static int32 *EditCodesForControls(int32 *pRsKeys, int32 nSize);
uint32 InputHowLongAgo(void);
+ void SetDrunkInputDelay(int32 delay) { DrunkDrivingBufferUsed = delay; }
#ifdef XINPUT
void AffectFromXinput(uint32 pad);
diff --git a/src/core/PlayerInfo.cpp b/src/core/PlayerInfo.cpp
index 3c01a176..61e2f67a 100644
--- a/src/core/PlayerInfo.cpp
+++ b/src/core/PlayerInfo.cpp
@@ -30,7 +30,13 @@
#include "World.h"
#include "ZoneCull.h"
#include "main.h"
+#include "Bike.h"
+#include "Automobile.h"
+#include "GameLogic.h"
+
+CVector lastPlayerPos;
+// --MIAMI: Done
void
CPlayerInfo::SetPlayerSkin(char *skin)
{
@@ -38,6 +44,7 @@ CPlayerInfo::SetPlayerSkin(char *skin)
LoadPlayerSkin();
}
+// --MIAMI: Done
const CVector &
CPlayerInfo::GetPos()
{
@@ -50,16 +57,16 @@ CPlayerInfo::GetPos()
return m_pPed->GetPosition();
}
+// --MIAMI: Done
void
CPlayerInfo::LoadPlayerSkin()
{
DeletePlayerSkin();
m_pSkinTexture = CPlayerSkin::GetSkinTexture(m_aSkinName);
- if (!m_pSkinTexture)
- m_pSkinTexture = CPlayerSkin::GetSkinTexture(DEFAULT_SKIN_NAME);
}
+// --MIAMI: Done
void
CPlayerInfo::DeletePlayerSkin()
{
@@ -69,6 +76,7 @@ CPlayerInfo::DeletePlayerSkin()
}
}
+// --MIAMI: Done
void
CPlayerInfo::KillPlayer()
{
@@ -81,6 +89,7 @@ CPlayerInfo::KillPlayer()
CStats::TimesDied++;
}
+// --MIAMI: Done
void
CPlayerInfo::ArrestPlayer()
{
@@ -88,11 +97,13 @@ CPlayerInfo::ArrestPlayer()
m_WBState = WBSTATE_BUSTED;
m_nWBTime = CTimer::GetTimeInMilliseconds();
+ m_nBustedAudioStatus = BUSTEDAUDIO_NONE;
CDarkel::ResetOnPlayerDeath();
CMessages::AddBigMessage(TheText.Get("BUSTED"), 5000, 2);
CStats::TimesArrested++;
}
+// --MIAMI: Done
bool
CPlayerInfo::IsPlayerInRemoteMode()
{
@@ -109,6 +120,7 @@ CPlayerInfo::PlayerFailedCriticalMission()
CDarkel::ResetOnPlayerDeath();
}
+// --MIAMI: Done
void
CPlayerInfo::Clear(void)
{
@@ -125,6 +137,8 @@ CPlayerInfo::Clear(void)
m_nTrafficMultiplier = 0;
m_fRoadDensity = 1.0f;
m_bInRemoteMode = false;
+ field_D5 = false;
+ field_D6 = false;
m_bUnusedTaxiThing = false;
m_nUnusedTaxiTimer = 0;
m_nCollectedPackages = 0;
@@ -136,10 +150,25 @@ CPlayerInfo::Clear(void)
m_nSexFrequency = 0;
m_pHooker = nil;
m_nTimeTankShotGun = 0;
- field_248 = 0;
+ field_EC = 0;
m_nUpsideDownCounter = 0;
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nDistanceCarTravelledOnTwoWheels = 0;
+ m_nTimeNotFullyOnGround = 0;
+ m_nTimeSpentOnWheelie = 0;
+ m_nDistanceTravelledOnWheelie = 0.0f;
+ m_nTimeSpentOnStoppie = 0;
+ m_nDistanceTravelledOnStoppie = 0.0f;
+ m_nCancelWheelStuntTimer = 0;
+ m_nLastTimeCarSpentOnTwoWheels = 0;
+ m_nLastDistanceCarTravelledOnTwoWheels = 0;
+ m_nLastTimeSpentOnWheelie = 0;
+ m_nLastDistanceTravelledOnWheelie = 0;
+ m_nLastTimeSpentOnStoppie = 0;
+ m_nLastDistanceTravelledOnStoppie = 0;
m_bInfiniteSprint = false;
m_bFastReload = false;
+ m_bFireproof = false;
m_nMaxHealth = m_nMaxArmour = 100;
m_bGetOutOfJailFree = false;
m_bGetOutOfHospitalFree = false;
@@ -147,22 +176,24 @@ CPlayerInfo::Clear(void)
m_nPreviousTimeRewardedForExplosion = 0;
m_nExplosionsSinceLastReward = 0;
m_nHavocLevel = 0;
- m_fMediaAttention = 0;
+ m_fMediaAttention = 0.0f;
m_nCurrentBustedAudio = 1;
m_nBustedAudioStatus = BUSTEDAUDIO_NONE;
}
+// --MIAMI: Done
void
CPlayerInfo::BlowUpRCBuggy(bool actually)
{
if (!m_pRemoteVehicle || m_pRemoteVehicle->bRemoveFromWorld)
return;
- CRemote::TakeRemoteControlledCarFromPlayer();
+ CRemote::TakeRemoteControlledCarFromPlayer(actually);
if (actually)
m_pRemoteVehicle->BlowUpCar(FindPlayerPed());
}
+// --MIAMI: Done
void
CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car)
{
@@ -174,6 +205,7 @@ CPlayerInfo::CancelPlayerEnteringCars(CVehicle *car)
m_pPed->ClearObjective();
}
+// --MIAMI: Done
void
CPlayerInfo::MakePlayerSafe(bool toggle)
{
@@ -198,8 +230,7 @@ CPlayerInfo::MakePlayerSafe(bool toggle)
CWorld::ExtinguishAllCarFiresInArea(GetPos(), 4000.0f);
CReplay::DisableReplays();
- }
- else {
+ } else {
m_pPed->m_pWanted->m_bIgnoredByEveryone = false;
CPad::GetPad(0)->SetEnablePlayerControls(PLAYERCONTROL_PLAYERINFO);
m_pPed->bBulletProof = false;
@@ -214,18 +245,21 @@ CPlayerInfo::MakePlayerSafe(bool toggle)
}
}
+// --MIAMI: Done
bool
CPlayerInfo::IsRestartingAfterDeath()
{
return m_WBState == WBSTATE_WASTED;
}
+// --MIAMI: Done
bool
CPlayerInfo::IsRestartingAfterArrest()
{
return m_WBState == WBSTATE_BUSTED;
}
+// --MIAMI: Done
// lastCloseness is passed to other calls of this function
void
CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoundCentrePedDist, float *lastCloseness, CVehicle **closestCarOutput)
@@ -250,32 +284,7 @@ CPlayerInfo::EvaluateCarPosition(CEntity *carToTest, CPed *player, float carBoun
}
}
-// There is something unfinished in here... Sadly all IDBs we have have it unfinished.
-void
-CPlayerInfo::AwardMoneyForExplosion(CVehicle *wreckedCar)
-{
- if (CTimer::GetTimeInMilliseconds() - m_nPreviousTimeRewardedForExplosion < 6000)
- ++m_nExplosionsSinceLastReward;
- else
- m_nExplosionsSinceLastReward = 1;
-
- m_nPreviousTimeRewardedForExplosion = CTimer::GetTimeInMilliseconds();
- int award = wreckedCar->pHandling->nMonetaryValue * 0.002f;
- sprintf(gString, "$%d", award);
-#ifdef MONEY_MESSAGES
- // This line is a leftover from PS2, I don't know what it was meant to be.
- // CVector sth(TheCamera.GetPosition() * 4.0f);
-
- CMoneyMessages::RegisterOne(wreckedCar->GetPosition() + CVector(0.0f, 0.0f, 2.0f), gString, 0, 255, 0, 2.0f, 0.5f);
-#endif
- CWorld::Players[CWorld::PlayerInFocus].m_nMoney += award;
-
- for (int i = m_nExplosionsSinceLastReward; i > 1; --i) {
- CGeneral::GetRandomNumber();
- CWorld::Players[CWorld::PlayerInFocus].m_nMoney += award;
- }
-}
-
+// --MIAMI: Done
void
CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size)
{
@@ -293,12 +302,19 @@ CPlayerInfo::SavePlayerInfo(uint8 *buf, uint32 *size)
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages);
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint);
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload);
+ CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFireproof);
+ CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth);
+ CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour);
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree);
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree);
+ CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bDriveByAllowed);
CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName);
+ CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nBustedAudioStatus);
+ CopyToBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nCurrentBustedAudio);
#undef CopyToBuf
}
+// --MIAMI: Done
void
CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size)
{
@@ -313,12 +329,19 @@ CPlayerInfo::LoadPlayerInfo(uint8 *buf, uint32 size)
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nTotalPackages);
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bInfiniteSprint);
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFastReload);
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bFireproof);
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxHealth);
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nMaxArmour);
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfJailFree);
CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bGetOutOfHospitalFree);
- CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName)
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_bDriveByAllowed);
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_aPlayerName);
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nBustedAudioStatus);
+ CopyFromBuf(buf, CWorld::Players[CWorld::PlayerInFocus].m_nCurrentBustedAudio)
#undef CopyFromBuf
}
+// --MIAMI: Done
void
CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1, float unk2, float unk3, float unk4, float* lastCloseness, CVehicle** closestCarOutput)
{
@@ -333,7 +356,7 @@ CPlayerInfo::FindClosestCarSectorList(CPtrList& carList, CPed* ped, float unk1,
&& (car->GetUp().z > 0.3f || (car->IsVehicle() && ((CVehicle*)car)->m_vehType == VEHICLE_TYPE_BIKE))) {
CVector carCentre = car->GetBoundCentre();
- if (Abs(ped->GetPosition().z - carCentre.z) < 2.0f) {
+ if (Abs(ped->GetPosition().z - carCentre.z) < 2.0f || car->IsCar() && carCentre.z < ped->GetPosition().z && ped->GetPosition().z - 4.f < carCentre.z) {
float dist = (ped->GetPosition() - carCentre).Magnitude2D();
if (dist <= 10.0f && !CCranes::IsThisCarBeingCarriedByAnyCrane(car)) {
EvaluateCarPosition(car, ped, dist, lastCloseness, closestCarOutput);
@@ -367,6 +390,157 @@ CPlayerInfo::Process(void)
if (startTaxiTimer)
m_nUnusedTaxiTimer = CTimer::GetTimeInMilliseconds();
+ if (!m_pPed->InVehicle()) {
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nTimeNotFullyOnGround = 0;
+ m_nTimeSpentOnWheelie = 0;
+ m_nTimeSpentOnStoppie = 0;
+ m_nCancelWheelStuntTimer = 0;
+ } else if (m_pPed->m_pMyVehicle->IsCar()) {
+ CAutomobile *car = (CAutomobile*)m_pPed->m_pMyVehicle;
+
+ if (car->m_nWheelsOnGround < 3)
+ m_nTimeNotFullyOnGround += CTimer::GetTimeInMilliseconds();
+ else
+ m_nTimeNotFullyOnGround = 0;
+
+ if (car->m_aSuspensionSpringRatioPrev[2] == 1.f && car->m_aSuspensionSpringRatioPrev[3] == 1.f) {
+ if (car->m_aSuspensionSpringRatioPrev[0] < 1.0f && car->m_aSuspensionSpringRatioPrev[1] < 1.0f && car->m_fDamageImpulse == 0.0f) {
+ m_nTimeCarSpentOnTwoWheels += CTimer::GetTimeStepInMilliseconds();
+ m_nDistanceCarTravelledOnTwoWheels += car->m_fDistanceTravelled;
+ m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.5f);
+
+ } else {
+ if (m_nTimeCarSpentOnTwoWheels != 0 && m_nCancelWheelStuntTimer < 500) {
+ m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
+ } else {
+ if (m_nTimeCarSpentOnTwoWheels >= 2000) {
+ m_nLastTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels;
+ m_nLastDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels;
+ if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000)
+ CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000;
+ if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels)
+ CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels;
+ }
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nDistanceCarTravelledOnTwoWheels = 0;
+ m_nCancelWheelStuntTimer = 0;
+ }
+ }
+ } else if (car->m_aSuspensionSpringRatioPrev[0] == 1.0f && car->m_aSuspensionSpringRatioPrev[1] == 1.0f) {
+#ifdef FIX_BUGS
+ if (car->m_aSuspensionSpringRatioPrev[2] < 1.f
+#else
+ if (car->m_aSuspensionSpringRatioPrev[1] < 1.f
+#endif
+ && car->m_aSuspensionSpringRatioPrev[3] < 1.f && 0.0f == car->m_fDamageImpulse) {
+ m_nTimeCarSpentOnTwoWheels += CTimer::GetTimeStepInMilliseconds();
+ m_nDistanceCarTravelledOnTwoWheels += car->m_fDistanceTravelled;
+ m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f);
+
+ } else if (m_nTimeCarSpentOnTwoWheels != 0 && m_nCancelWheelStuntTimer < 500) {
+ m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
+
+ } else {
+ if (m_nTimeCarSpentOnTwoWheels >= 2000) {
+ m_nLastTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels;
+ m_nLastDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels;
+ if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000)
+ CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000;
+ if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels)
+ CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels;
+ }
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nDistanceCarTravelledOnTwoWheels = 0;
+ m_nCancelWheelStuntTimer = 0;
+ }
+ } else if (m_nTimeCarSpentOnTwoWheels != 0) {
+ if (m_nTimeCarSpentOnTwoWheels >= 2000) {
+ m_nLastTimeCarSpentOnTwoWheels = m_nTimeCarSpentOnTwoWheels;
+ m_nLastDistanceCarTravelledOnTwoWheels = m_nDistanceCarTravelledOnTwoWheels;
+ if (CStats::Longest2Wheel < m_nTimeCarSpentOnTwoWheels / 1000)
+ CStats::Longest2Wheel = m_nTimeCarSpentOnTwoWheels / 1000;
+ if (CStats::Longest2WheelDist < m_nDistanceCarTravelledOnTwoWheels)
+ CStats::Longest2WheelDist = m_nDistanceCarTravelledOnTwoWheels;
+ }
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nDistanceCarTravelledOnTwoWheels = 0;
+ m_nCancelWheelStuntTimer = 0;
+ }
+ m_nTimeSpentOnWheelie = 0;
+ m_nTimeSpentOnStoppie = 0;
+ } else if (m_pPed->m_pMyVehicle->IsBike()) {
+ CBike *bike = (CBike*)m_pPed->m_pMyVehicle;
+ if (bike->m_aSuspensionSpringRatioPrev[0] == 1.0f && bike->m_aSuspensionSpringRatioPrev[1] == 1.0f) {
+ if (bike->m_aSuspensionSpringRatioPrev[2] < 1.0f
+ || (bike->m_aSuspensionSpringRatioPrev[3] < 1.0f && 0.0f == bike->m_fDamageImpulse)) {
+ m_nTimeSpentOnWheelie += CTimer::GetTimeStepInMilliseconds();
+ m_nDistanceTravelledOnWheelie += bike->m_fDistanceTravelled;
+ m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f);
+
+ } else {
+ if (m_nTimeSpentOnWheelie != 0 && m_nCancelWheelStuntTimer < 500) {
+ m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
+ } else {
+ if (m_nTimeSpentOnWheelie >= 5000) {
+ m_nLastTimeSpentOnWheelie = m_nTimeSpentOnWheelie;
+ m_nLastDistanceTravelledOnWheelie = m_nDistanceTravelledOnWheelie;
+ if (CStats::LongestWheelie < m_nTimeSpentOnWheelie / 1000)
+ CStats::LongestWheelie = m_nTimeSpentOnWheelie / 1000;
+ if (CStats::LongestWheelieDist < m_nDistanceTravelledOnWheelie)
+ CStats::LongestWheelieDist = m_nDistanceTravelledOnWheelie;
+ }
+ m_nTimeSpentOnWheelie = 0;
+ m_nDistanceTravelledOnWheelie = 0;
+ m_nCancelWheelStuntTimer = 0;
+ }
+ }
+ } else if (m_nTimeSpentOnWheelie != 0) {
+ if (m_nTimeSpentOnWheelie >= 5000) {
+ m_nLastTimeSpentOnWheelie = m_nTimeSpentOnWheelie;
+ m_nLastDistanceTravelledOnWheelie = m_nDistanceTravelledOnWheelie;
+ if (CStats::LongestWheelie < m_nTimeSpentOnWheelie / 1000)
+ CStats::LongestWheelie = m_nTimeSpentOnWheelie / 1000;
+ if (CStats::LongestWheelieDist < m_nDistanceTravelledOnWheelie)
+ CStats::LongestWheelieDist = m_nDistanceTravelledOnWheelie;
+ }
+ m_nTimeSpentOnWheelie = 0;
+ m_nDistanceTravelledOnWheelie = 0;
+ m_nCancelWheelStuntTimer = 0;
+
+ } else if (bike->m_aSuspensionSpringRatioPrev[2] == 1.0f && bike->m_aSuspensionSpringRatioPrev[3] == 1.0f
+ && 0.0f == bike->m_fDamageImpulse) {
+ m_nTimeSpentOnStoppie += CTimer::GetTimeStepInMilliseconds();
+ m_nDistanceTravelledOnStoppie += bike->m_fDistanceTravelled;
+ m_nCancelWheelStuntTimer = Max(0.0f, m_nCancelWheelStuntTimer - CTimer::GetTimeStepInMilliseconds() * 0.2f);
+
+ } else {
+ if (m_nTimeSpentOnStoppie != 0 && m_nCancelWheelStuntTimer < 500) {
+ m_nCancelWheelStuntTimer += CTimer::GetTimeStepInMilliseconds();
+ } else {
+ if (m_nTimeSpentOnStoppie >= 2000) {
+ m_nLastTimeSpentOnStoppie = m_nTimeSpentOnStoppie;
+ m_nLastDistanceTravelledOnStoppie = m_nDistanceTravelledOnStoppie;
+ if (CStats::LongestStoppie < m_nTimeSpentOnStoppie / 1000)
+ CStats::LongestStoppie = m_nTimeSpentOnStoppie / 1000;
+ if (CStats::LongestStoppieDist < m_nDistanceTravelledOnStoppie)
+ CStats::LongestStoppieDist = m_nDistanceTravelledOnStoppie;
+ }
+ m_nTimeSpentOnStoppie = 0;
+ m_nDistanceTravelledOnStoppie = 0;
+ m_nCancelWheelStuntTimer = 0;
+ }
+ }
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nTimeNotFullyOnGround = 0;
+ } else {
+ m_nTimeCarSpentOnTwoWheels = 0;
+ m_nTimeNotFullyOnGround = 0;
+ m_nTimeSpentOnWheelie = 0;
+ m_nTimeSpentOnStoppie = 0;
+ m_nCancelWheelStuntTimer = 0;
+ }
+
// The effect that makes money counter does while earning/losing money
if (m_nVisibleMoney != m_nMoney) {
int diff = m_nMoney - m_nVisibleMoney;
@@ -395,7 +569,7 @@ CPlayerInfo::Process(void)
m_fRoadDensity = ThePaths.CalcRoadDensity(playerPos.x, playerPos.y);
}
- m_fRoadDensity = clamp(m_fRoadDensity, 0.4f, 1.45f);
+ m_fRoadDensity = clamp(m_fRoadDensity, 0.5f, 1.45f);
// Because vehicle enter/exit use same key binding.
bool enterOrExitVeh;
@@ -404,39 +578,31 @@ CPlayerInfo::Process(void)
else
enterOrExitVeh = CPad::GetPad(0)->GetExitVehicle();
- if (enterOrExitVeh && m_pPed->m_nPedState != PED_SNIPER_MODE && m_pPed->m_nPedState != PED_ROCKET_MODE) {
+ if (enterOrExitVeh && m_pPed->m_nPedState != PED_ANSWER_MOBILE && m_pPed->m_nPedState != PED_SNIPER_MODE && m_pPed->m_nPedState != PED_ROCKET_MODE) {
if (m_pPed->bInVehicle) {
if (!m_pRemoteVehicle) {
CEntity *surfaceBelowVeh = m_pPed->m_pMyVehicle->m_pCurGroundEntity;
if (!surfaceBelowVeh || !CBridge::ThisIsABridgeObjectMovingUp(surfaceBelowVeh->GetModelIndex())) {
CVehicle *veh = m_pPed->m_pMyVehicle;
if (!veh->IsBoat() || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) {
+ if (veh->GetStatus() != STATUS_WRECKED && veh->GetStatus() != STATUS_TRAIN_MOVING && veh->m_nDoorLock != CARLOCK_LOCKED_PLAYER_INSIDE) {
+ bool canJumpOff = false;
+ if (veh->m_vehType == VEHICLE_TYPE_BIKE) {
+ canJumpOff = veh->CanPedJumpOffBike();
+ } else if (veh->pDriver == m_pPed) {
+ canJumpOff = veh->CanPedJumpOutCar();
+ }
- // This condition will always return true, else block was probably WIP Miami code.
- if (veh->m_vehType != VEHICLE_TYPE_BIKE || veh->m_nDoorLock == CARLOCK_LOCKED_PLAYER_INSIDE) {
- if (veh->GetStatus() != STATUS_WRECKED && veh->GetStatus() != STATUS_TRAIN_MOVING && veh->m_nDoorLock != CARLOCK_LOCKED_PLAYER_INSIDE) {
- if (veh->m_vecMoveSpeed.Magnitude() < 0.17f && CTimer::GetTimeScale() >= 0.5f && !veh->bIsInWater) {
+ if (canJumpOff || veh->m_vecMoveSpeed.Magnitude() < 0.1f) {
+ if (!veh->bIsInWater)
m_pPed->SetObjective(OBJECTIVE_LEAVE_CAR, veh);
- }
+
+ } else if (veh->GetStatus() != STATUS_PLAYER && veh != CGameLogic::pShortCutTaxi) {
+ veh->AutoPilot.m_nTempAction = TEMPACT_WAIT;
+ veh->AutoPilot.m_nTimeTempAction = CTimer::GetTimeInMilliseconds() + 1000;
}
- } else {
- CVector sth = 0.7f * veh->GetRight() + veh->GetPosition();
- bool found = false;
- float groundZ = CWorld::FindGroundZFor3DCoord(sth.x, sth.y, 2.0f + sth.z, &found);
-
- if (found)
- sth.z = 1.0f + groundZ;
- m_pPed->m_nPedState = 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);
- m_pPed->SetPosition(sth);
- m_pPed->SetMoveState(PEDMOVE_STILL);
- m_pPed->m_vecMoveSpeed = veh->m_vecMoveSpeed;
}
} else {
- // The code in here was under CPed::SetExitBoat in VC, did the same for here.
m_pPed->SetExitBoat(veh);
m_pPed->bTryingToReachDryLand = true;
}
@@ -451,14 +617,10 @@ CPlayerInfo::Process(void)
CEntity *surfaceBelow = m_pPed->m_pCurrentPhysSurface;
if (surfaceBelow && surfaceBelow->IsVehicle()) {
carBelow = (CVehicle*)surfaceBelow;
- if (carBelow->IsBoat()) {
+ if (carBelow->IsBoat() && carBelow->m_modelIndex != MI_SKIMMER) {
weAreOnBoat = true;
m_pPed->bOnBoat = true;
-#ifdef VC_PED_PORTS
if (carBelow->GetStatus() != STATUS_WRECKED && carBelow->GetUp().z > 0.3f)
-#else
- if (carBelow->GetStatus() != STATUS_WRECKED)
-#endif
m_pPed->SetSeekBoatPosition(carBelow);
}
}
@@ -506,14 +668,15 @@ CPlayerInfo::Process(void)
}
}
}
+
if (m_bInRemoteMode) {
uint32 timeWithoutRemoteCar = CTimer::GetTimeInMilliseconds() - m_nTimeLostRemoteCar;
- if (CTimer::GetPreviousTimeInMilliseconds() - m_nTimeLostRemoteCar < 1000 && timeWithoutRemoteCar >= 1000 && m_WBState == WBSTATE_PLAYING) {
+ if (CTimer::GetPreviousTimeInMilliseconds() - m_nTimeLostRemoteCar < 1000 && timeWithoutRemoteCar >= 1000 && m_WBState == WBSTATE_PLAYING && field_D6) {
TheCamera.SetFadeColour(0, 0, 0);
TheCamera.Fade(1.0f, 0);
}
if (timeWithoutRemoteCar > 2000) {
- if (m_WBState == WBSTATE_PLAYING) {
+ if (m_WBState == WBSTATE_PLAYING && field_D6) {
TheCamera.RestoreWithJumpCut();
TheCamera.SetFadeColour(0, 0, 0);
TheCamera.Fade(1.0f, 1);
@@ -525,6 +688,7 @@ CPlayerInfo::Process(void)
CTimer::Update();
}
m_bInRemoteMode = false;
+ CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle->bRemoveFromWorld = true;
CWorld::Players[CWorld::PlayerInFocus].m_pRemoteVehicle = nil;
if (FindPlayerVehicle()) {
FindPlayerVehicle()->SetStatus(STATUS_PLAYER);
@@ -534,11 +698,10 @@ CPlayerInfo::Process(void)
if (!(CTimer::GetFrameCounter() & 31)) {
CVehicle *veh = FindPlayerVehicle();
if (veh && m_pPed->bInVehicle && veh->GetUp().z < 0.0f
- && veh->m_vecMoveSpeed.Magnitude() < 0.05f && veh->IsCar() && !veh->bIsInWater) {
+ && veh->m_vecMoveSpeed.Magnitude() < 0.05f && (veh->IsCar() || veh->IsBoat()) && !veh->bIsInWater) {
if (veh->GetUp().z < -0.5f) {
m_nUpsideDownCounter += 2;
-
} else {
m_nUpsideDownCounter++;
}
@@ -562,8 +725,74 @@ CPlayerInfo::Process(void)
if (veh->pPassengers[i])
veh->pPassengers[i]->m_nZoneLevel = LEVEL_GENERIC;
}
- CStats::DistanceTravelledInVehicle += veh->m_fDistanceTravelled;
+ if(veh->m_modelIndex == MI_CADDY)
+ CStats::DistanceTravelledByGolfCart += veh->m_fDistanceTravelled;
+ else {
+ if(veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_HELI)
+ CStats::DistanceTravelledByHelicoptor += veh->m_fDistanceTravelled;
+ if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE)
+ CStats::DistanceTravelledByPlane += veh->m_fDistanceTravelled;
+ if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR)
+ CStats::DistanceTravelledByCar += veh->m_fDistanceTravelled;
+ if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_BIKE)
+ CStats::DistanceTravelledByBike += veh->m_fDistanceTravelled;
+ if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_BOAT)
+ CStats::DistanceTravelledByBoat += veh->m_fDistanceTravelled;
+
+ if (veh->GetVehicleAppearance() == VEHICLE_APPEARANCE_PLANE) {
+ if (veh->m_vecMoveSpeed.Magnitude() > 0.2f) {
+ CStats::FlightTime += CTimer::GetTimeStep() * 16.f; // what a weird choice
+ }
+ }
+ }
} else {
CStats::DistanceTravelledOnFoot += FindPlayerPed()->m_fDistanceTravelled;
}
+
+ if (m_pPed->m_pWanted->m_nWantedLevel && !CTheScripts::IsPlayerOnAMission()) {
+ float maxDelta = 0.0f;
+ static bool movedSignificantly = true;
+ static bool thereIsACarPathNear = true;
+ // there was one more guard without variable's itself???
+
+ if (CTimer::GetTimeInMilliseconds() / 20000 != CTimer::GetPreviousTimeInMilliseconds() / 20000) {
+ float posChange = (lastPlayerPos - FindPlayerCoors()).Magnitude();
+ movedSignificantly = posChange >= 10.0f;
+ lastPlayerPos = FindPlayerCoors();
+ thereIsACarPathNear = ThePaths.FindNodeClosestToCoors(FindPlayerCoors(), PATH_CAR, 60.0f, true, false, false, false) != 0;
+ }
+ switch (m_pPed->m_pWanted->m_nWantedLevel) {
+ case 1:
+ maxDelta = 31.f;
+ break;
+ case 2:
+ maxDelta = 62.f;
+ break;
+ case 3:
+ maxDelta = 125.f;
+ break;
+ case 4:
+ maxDelta = 250.f;
+ break;
+ case 5:
+ maxDelta = 500.f;
+ break;
+ case 6:
+ maxDelta = 1000.f;
+ break;
+ default:
+ break;
+ }
+ float increaseDelta = maxDelta - m_fMediaAttention;
+ float increaseAttentionBy = CTimer::GetTimeStep() * 0.0001f * increaseDelta;
+ if (increaseAttentionBy < 0.0f
+ || movedSignificantly && thereIsACarPathNear && !CCullZones::NoPolice() && !CCullZones::PoliceAbandonCars() && CGame::currArea == AREA_MAIN_MAP) {
+ m_fMediaAttention += increaseAttentionBy;
+ }
+ } else {
+ m_fMediaAttention = 0.0f;
+ }
+ CStats::HighestChaseValue = Max(m_fMediaAttention, CStats::HighestChaseValue);
+ m_nMoney = Min(999999999, m_nMoney);
+ m_nVisibleMoney = Min(999999999, m_nVisibleMoney);
}
diff --git a/src/core/PlayerInfo.h b/src/core/PlayerInfo.h
index 11f51ac0..7d99a4e0 100644
--- a/src/core/PlayerInfo.h
+++ b/src/core/PlayerInfo.h
@@ -45,19 +45,33 @@ public:
int8 m_WBState; // eWastedBustedState
uint32 m_nWBTime;
bool m_bInRemoteMode;
+ bool field_D5;
+ bool field_D6;
uint32 m_nTimeLostRemoteCar;
uint32 m_nTimeLastHealthLoss;
uint32 m_nTimeLastArmourLoss;
uint32 m_nTimeTankShotGun;
- int32 m_nTimeNotFullyOnGround;
int32 m_nUpsideDownCounter;
- int32 field_248;
+ int32 field_EC;
+ int32 m_nTimeCarSpentOnTwoWheels;
+ int32 m_nDistanceCarTravelledOnTwoWheels;
+ int32 m_nTimeNotFullyOnGround;
+ int32 m_nTimeSpentOnWheelie;
+ float m_nDistanceTravelledOnWheelie;
+ int32 m_nTimeSpentOnStoppie;
+ float m_nDistanceTravelledOnStoppie;
+ int32 m_nCancelWheelStuntTimer;
+ int32 m_nLastTimeCarSpentOnTwoWheels;
+ int32 m_nLastDistanceCarTravelledOnTwoWheels;
+ int32 m_nLastTimeSpentOnWheelie;
+ int32 m_nLastDistanceTravelledOnWheelie;
+ int32 m_nLastTimeSpentOnStoppie;
+ int32 m_nLastDistanceTravelledOnStoppie;
int16 m_nTrafficMultiplier;
+ int16 field_12A;
float m_fRoadDensity;
uint32 m_nPreviousTimeRewardedForExplosion;
- int32 m_nExplosionsSinceLastReward;
- int32 field_268;
- int32 field_272;
+ uint32 m_nExplosionsSinceLastReward;
uint32 m_nHavocLevel;
float m_fMediaAttention;
bool m_bInfiniteSprint;
@@ -76,7 +90,6 @@ public:
void MakePlayerSafe(bool);
void LoadPlayerSkin();
void DeletePlayerSkin();
- void AwardMoneyForExplosion(CVehicle *vehicle);
void SetPlayerSkin(char* skin);
const CVector &GetPos();
void Process(void);
diff --git a/src/core/Pools.cpp b/src/core/Pools.cpp
index 6e3799f4..fe2cf7ad 100644
--- a/src/core/Pools.cpp
+++ b/src/core/Pools.cpp
@@ -22,21 +22,25 @@ CTreadablePool *CPools::ms_pTreadablePool;
CObjectPool *CPools::ms_pObjectPool;
CDummyPool *CPools::ms_pDummyPool;
CAudioScriptObjectPool *CPools::ms_pAudioScriptObjectPool;
+CColModelPool *CPools::ms_pColModelPool;
+//--MIAMI: done
void
CPools::Initialise(void)
{
- ms_pPtrNodePool = new CCPtrNodePool(NUMPTRNODES);
- ms_pEntryInfoNodePool = new CEntryInfoNodePool(NUMENTRYINFOS);
- ms_pPedPool = new CPedPool(NUMPEDS);
- ms_pVehiclePool = new CVehiclePool(NUMVEHICLES);
- ms_pBuildingPool = new CBuildingPool(NUMBUILDINGS);
- ms_pTreadablePool = new CTreadablePool(NUMTREADABLES);
- ms_pObjectPool = new CObjectPool(NUMOBJECTS);
- ms_pDummyPool = new CDummyPool(NUMDUMMIES);
- ms_pAudioScriptObjectPool = new CAudioScriptObjectPool(NUMAUDIOSCRIPTOBJECTS);
+ ms_pPtrNodePool = new CCPtrNodePool(NUMPTRNODES, "PtrNode");
+ ms_pEntryInfoNodePool = new CEntryInfoNodePool(NUMENTRYINFOS, "EntryInfoNode");
+ ms_pPedPool = new CPedPool(NUMPEDS, "Peds");
+ ms_pVehiclePool = new CVehiclePool(NUMVEHICLES, "Vehicles");
+ ms_pBuildingPool = new CBuildingPool(NUMBUILDINGS, "Buildings");
+ ms_pTreadablePool = new CTreadablePool(NUMTREADABLES, "Treadables");
+ ms_pObjectPool = new CObjectPool(NUMOBJECTS, "Objects");
+ ms_pDummyPool = new CDummyPool(NUMDUMMIES, "Dummys");
+ ms_pAudioScriptObjectPool = new CAudioScriptObjectPool(NUMAUDIOSCRIPTOBJECTS, "AudioScriptObj");
+ ms_pColModelPool = new CColModelPool(NUMCOLMODELS, "ColModel");
}
+//--MIAMI: done
void
CPools::ShutDown(void)
{
@@ -49,6 +53,7 @@ CPools::ShutDown(void)
debug("Objects left %d\n", ms_pObjectPool->GetNoOfUsedSpaces());
debug("Dummys left %d\n", ms_pDummyPool->GetNoOfUsedSpaces());
debug("AudioScriptObjects left %d\n", ms_pAudioScriptObjectPool->GetNoOfUsedSpaces());
+ debug("ColModels left %d\n", ms_pColModelPool->GetNoOfUsedSpaces());
printf("Shutdown pool started\n");
delete ms_pPtrNodePool;
@@ -60,6 +65,7 @@ CPools::ShutDown(void)
delete ms_pObjectPool;
delete ms_pDummyPool;
delete ms_pAudioScriptObjectPool;
+ delete ms_pColModelPool;
printf("Shutdown pool done\n");
}
diff --git a/src/core/Pools.h b/src/core/Pools.h
index 2f0537ff..afef1b85 100644
--- a/src/core/Pools.h
+++ b/src/core/Pools.h
@@ -19,6 +19,7 @@ typedef CPool<CTreadable> CTreadablePool;
typedef CPool<CObject, CCutsceneObject> CObjectPool;
typedef CPool<CDummy, CDummyPed> CDummyPool;
typedef CPool<cAudioScriptObject> CAudioScriptObjectPool;
+typedef CPool<CColModel> CColModelPool;
class CPools
{
@@ -31,6 +32,7 @@ class CPools
static CObjectPool *ms_pObjectPool;
static CDummyPool *ms_pDummyPool;
static CAudioScriptObjectPool *ms_pAudioScriptObjectPool;
+ static CColModelPool *ms_pColModelPool;
public:
static CCPtrNodePool *GetPtrNodePool(void) { return ms_pPtrNodePool; }
static CEntryInfoNodePool *GetEntryInfoNodePool(void) { return ms_pEntryInfoNodePool; }
@@ -41,6 +43,7 @@ public:
static CObjectPool *GetObjectPool(void) { return ms_pObjectPool; }
static CDummyPool *GetDummyPool(void) { return ms_pDummyPool; }
static CAudioScriptObjectPool *GetAudioScriptObjectPool(void) { return ms_pAudioScriptObjectPool; }
+ static CColModelPool *GetColModelPool(void) { return ms_pColModelPool; }
static void Initialise(void);
static void ShutDown(void);
diff --git a/src/core/Radar.h b/src/core/Radar.h
index a36faaea..100da8f3 100644
--- a/src/core/Radar.h
+++ b/src/core/Radar.h
@@ -19,7 +19,7 @@
#define COORDBLIP_MARKER_COLOR_R 252
#define COORDBLIP_MARKER_COLOR_G 138
#define COORDBLIP_MARKER_COLOR_B 242
-#define COORDBLIP_MARKER_COLOR_A 255
+#define COORDBLIP_MARKER_COLOR_A 228
#define NUM_MAP_LEGENDS 75
diff --git a/src/core/Stats.cpp b/src/core/Stats.cpp
index 2e3a27b2..1efcee01 100644
--- a/src/core/Stats.cpp
+++ b/src/core/Stats.cpp
@@ -3,12 +3,14 @@
#include "Stats.h"
#include "Text.h"
#include "World.h"
+#include "Pad.h"
#include <climits>
-//TODO
int32 CStats::SeagullsKilled;
-
+int32 CStats::BoatsExploded;
+int32 CStats::WantedStarsAttained;
+int32 CStats::WantedStarsEvaded;
int32 CStats::DaysPassed;
int32 CStats::HeadsPopped;
int32 CStats::CommercialPassed;
@@ -21,8 +23,25 @@ int32 CStats::PedsKilledOfThisType[NUM_PEDTYPES];
int32 CStats::TimesDied;
int32 CStats::TimesArrested;
int32 CStats::KillsSinceLastCheckpoint;
-float CStats::DistanceTravelledInVehicle;
+float CStats::DistanceTravelledByCar;
+float CStats::DistanceTravelledByHelicoptor;
+float CStats::DistanceTravelledByBike;
+float CStats::DistanceTravelledByBoat;
+float CStats::DistanceTravelledByPlane;
+float CStats::DistanceTravelledByGolfCart;
float CStats::DistanceTravelledOnFoot;
+int32 CStats::FlightTime;
+int32 CStats::TimesDrowned;
+int32 CStats::PhotosTaken;
+float CStats::LoanSharks;
+float CStats::StoresKnockedOff;
+float CStats::MovieStunts;
+float CStats::Assassinations;
+float CStats::PizzasDelivered;
+float CStats::GarbagePickups;
+float CStats::IceCreamSold;
+float CStats::TopShootingRangeScore;
+float CStats::ShootingRank;
int32 CStats::ProgressMade;
int32 CStats::TotalProgressInGame;
int32 CStats::CarsExploded;
@@ -40,94 +59,155 @@ int32 CStats::MissionsGiven;
int32 CStats::MissionsPassed;
char CStats::LastMissionPassedName[8];
int32 CStats::TotalLegitimateKills;
-int32 CStats::ElBurroTime;
-int32 CStats::Record4x4One;
-int32 CStats::Record4x4Two;
-int32 CStats::Record4x4Three;
-int32 CStats::Record4x4Mayhem;
int32 CStats::LivesSavedWithAmbulance;
int32 CStats::CriminalsCaught;
int32 CStats::HighestLevelAmbulanceMission;
+int32 CStats::HighestLevelVigilanteMission;
+int32 CStats::HighestLevelFireMission;
int32 CStats::FiresExtinguished;
-int32 CStats::TimeTakenDefuseMission;
int32 CStats::TotalNumberKillFrenzies;
int32 CStats::TotalNumberMissions;
int32 CStats::RoundsFiredByPlayer;
int32 CStats::KgsOfExplosivesUsed;
-int32 CStats::InstantHitsFiredByPlayer;
-int32 CStats::InstantHitsHitByPlayer;
+int32 CStats::BulletsThatHit;
int32 CStats::BestTimeBombDefusal;
int32 CStats::FastestTimes[CStats::TOTAL_FASTEST_TIMES];
int32 CStats::HighestScores[CStats::TOTAL_HIGHEST_SCORES];
int32 CStats::BestPositions[CStats::TOTAL_BEST_POSITIONS];
+bool CStats::PropertyOwned[CStats::TOTAL_PROPERTIES];
+int32 CStats::NumPropertyOwned;
int32 CStats::PropertyDestroyed;
+float CStats::HighestChaseValue;
+int32 CStats::CheatedCount;
+int32 CStats::ShowChaseStatOnScreen;
+int32 CStats::PamphletMissionPassed;
+bool CStats::abSonyCDs[1];
+int32 CStats::BloodRingKills;
+int32 CStats::BloodRingTime;
+float CStats::FavoriteRadioStationList[NUM_RADIOS];
int32 CStats::Sprayings;
float CStats::AutoPaintingBudget;
int32 CStats::NoMoreHurricanes;
float CStats::FashionBudget;
+float CStats::PropertyBudget;
+float CStats::WeaponBudget;
int32 CStats::SafeHouseVisits;
int32 CStats::TyresPopped;
+int32 CStats::LongestWheelie;
+int32 CStats::LongestStoppie;
+int32 CStats::Longest2Wheel;
+float CStats::LongestWheelieDist;
+float CStats::LongestStoppieDist;
+float CStats::Longest2WheelDist;
+
+// --MIAMI: functions below are done except TODOs, but there are some to be moved from Frontend
+
void CStats::Init()
{
PeopleKilledByOthers = 0;
PeopleKilledByPlayer = 0;
- RoundsFiredByPlayer = 0;
CarsExploded = 0;
+ BoatsExploded = 0;
+ RoundsFiredByPlayer = 0;
+ for (int i = 0; i < NUM_PEDTYPES; i++)
+ PedsKilledOfThisType[i] = 0;
HelisDestroyed = 0;
ProgressMade = 0;
KgsOfExplosivesUsed = 0;
- InstantHitsFiredByPlayer = 0;
- InstantHitsHitByPlayer = 0;
+ BulletsThatHit = 0;
+ TyresPopped = 0;
HeadsPopped = 0;
+ WantedStarsAttained = 0;
+ WantedStarsEvaded = 0;
TimesArrested = 0;
TimesDied = 0;
DaysPassed = 0;
- NumberOfUniqueJumpsFound = 0;
- MaximumJumpFlips = 0;
- MaximumJumpSpins = 0;
+ SafeHouseVisits = 0;
+ Sprayings = 0;
MaximumJumpDistance = 0;
MaximumJumpHeight = 0;
+ MaximumJumpFlips = 0;
+ MaximumJumpSpins = 0;
BestStuntJump = 0;
+ NumberOfUniqueJumpsFound = 0;
TotalNumberOfUniqueJumps = 0;
- Record4x4One = 0;
- Record4x4Two = 0;
+ MissionsGiven = 0;
+ MissionsPassed = 0;
PassengersDroppedOffWithTaxi = 0;
- Record4x4Three = 0;
MoneyMadeWithTaxi = 0;
- Record4x4Mayhem = 0;
+ DistanceTravelledOnFoot = 0;
+ DistanceTravelledByCar = 0;
+ DistanceTravelledByBike = 0;
+ DistanceTravelledByBoat = 0;
+ DistanceTravelledByGolfCart = 0;
+ DistanceTravelledByHelicoptor = 0;
+#ifdef FIX_BUGS
+ DistanceTravelledByPlane = 0;
+#endif
LivesSavedWithAmbulance = 0;
- ElBurroTime = 0;
CriminalsCaught = 0;
- MissionsGiven = 0;
+ HighestLevelVigilanteMission = 0;
HighestLevelAmbulanceMission = 0;
- MissionsPassed = 0;
+ HighestLevelFireMission = 0;
FiresExtinguished = 0;
- DistanceTravelledOnFoot = 0;
- TimeTakenDefuseMission = 0;
+ PhotosTaken = 0;
NumberKillFrenziesPassed = 0;
- DistanceTravelledInVehicle = 0;
TotalNumberKillFrenzies = 0;
TotalNumberMissions = 0;
- KillsSinceLastCheckpoint = 0;
- TotalLegitimateKills = 0;
+ FlightTime = 0;
+ TimesDrowned = 0;
+ SeagullsKilled = 0;
+ WeaponBudget = 0.0f;
+ FashionBudget = 0.0f;
+ LoanSharks = 0.0f;
+ StoresKnockedOff = 0.0f;
+ MovieStunts = 0.0f;
+ Assassinations = 0.0f;
+ PizzasDelivered = 0.0f;
+ GarbagePickups = 0.0f;
+ IceCreamSold = 0.0f;
+ TopShootingRangeScore = 0.0f;
+ ShootingRank = 0.0f;
+ LongestWheelie = 0;
+ LongestStoppie = 0;
+ Longest2Wheel = 0;
+ LongestWheelieDist = 0.0f;
+ LongestStoppieDist = 0.0f;
+ Longest2WheelDist = 0.0f;
+ PropertyBudget = 0.0f;
+ AutoPaintingBudget = 0.0f;
+ PropertyDestroyed = 0;
+ HighestChaseValue = 0.0f;
+ CheatedCount = 0;
+
for (int i = 0; i < TOTAL_FASTEST_TIMES; i++)
FastestTimes[i] = 0;
for (int i = 0; i < TOTAL_HIGHEST_SCORES; i++)
HighestScores[i] = 0;
for (int i = 0; i < TOTAL_BEST_POSITIONS; i++)
BestPositions[i] = INT_MAX;
- for (int i = 0; i < NUM_PEDTYPES; i++)
- PedsKilledOfThisType[i] = 0;
+
+ KillsSinceLastCheckpoint = 0;
+ TotalLegitimateKills = 0;
IndustrialPassed = 0;
CommercialPassed = 0;
SuburbanPassed = 0;
-
- Sprayings = 0;
- AutoPaintingBudget = 0.0f;
+ PamphletMissionPassed = 0;
NoMoreHurricanes = 0;
- SafeHouseVisits = 0;
+ ShowChaseStatOnScreen = 0;
+ abSonyCDs[0] = 0;
+ // TODO(Miami): Change this with PopulateFavoriteRadioStationList(); !!
+ for (int i = 0; i < NUM_RADIOS; i++)
+ FavoriteRadioStationList[i] = 0.0f;
+
+ NumPropertyOwned = 0;
+ for (int i = 0; i < TOTAL_PROPERTIES; i++)
+ PropertyOwned[i] = false;
+
+ BloodRingKills = 0;
+ BloodRingTime = 0;
}
void CStats::RegisterFastestTime(int32 index, int32 time)
@@ -151,31 +231,6 @@ void CStats::RegisterBestPosition(int32 index, int32 position)
BestPositions[index] = Min(BestPositions[index], position);
}
-void CStats::RegisterElBurroTime(int32 time)
-{
- ElBurroTime = (ElBurroTime && ElBurroTime < time) ? ElBurroTime : time;
-}
-
-void CStats::Register4x4OneTime(int32 time)
-{
- Record4x4One = (Record4x4One && Record4x4One < time) ? Record4x4One : time;
-}
-
-void CStats::Register4x4TwoTime(int32 time)
-{
- Record4x4Two = (Record4x4Two && Record4x4Two < time) ? Record4x4Two : time;
-}
-
-void CStats::Register4x4ThreeTime(int32 time)
-{
- Record4x4Three = (Record4x4Three && Record4x4Three < time) ? Record4x4Three : time;
-}
-
-void CStats::Register4x4MayhemTime(int32 time)
-{
- Record4x4Mayhem = (Record4x4Mayhem && Record4x4Mayhem < time) ? Record4x4Mayhem : time;
-}
-
void CStats::AnotherLifeSavedWithAmbulance()
{
++LivesSavedWithAmbulance;
@@ -191,14 +246,19 @@ void CStats::RegisterLevelAmbulanceMission(int32 level)
HighestLevelAmbulanceMission = Max(HighestLevelAmbulanceMission, level);
}
-void CStats::AnotherFireExtinguished()
+void CStats::RegisterLevelVigilanteMission(int32 level)
{
- ++FiresExtinguished;
+ HighestLevelVigilanteMission = Max(HighestLevelVigilanteMission, level);
}
-void CStats::RegisterTimeTakenDefuseMission(int32 time)
+void CStats::RegisterLevelFireMission(int32 level)
{
- TimeTakenDefuseMission = (TimeTakenDefuseMission && TimeTakenDefuseMission < time) ? TimeTakenDefuseMission : time;
+ HighestLevelFireMission = Max(HighestLevelFireMission, level);
+}
+
+void CStats::AnotherFireExtinguished()
+{
+ ++FiresExtinguished;
}
void CStats::AnotherKillFrenzyPassed()
@@ -220,40 +280,88 @@ wchar *CStats::FindCriminalRatingString()
{
int rating = FindCriminalRatingNumber();
- if (rating < 10) return TheText.Get("RATNG1");
- if (rating < 25) return TheText.Get("RATNG2");
- if (rating < 70) return TheText.Get("RATNG3");
- if (rating < 150) return TheText.Get("RATNG4");
- if (rating < 250) return TheText.Get("RATNG5");
- if (rating < 450) return TheText.Get("RATNG6");
- if (rating < 700) return TheText.Get("RATNG7");
- if (rating < 1000) return TheText.Get("RATNG8");
- if (rating < 1400) return TheText.Get("RATNG9");
- if (rating < 1900) return TheText.Get("RATNG10");
- if (rating < 2500) return TheText.Get("RATNG11");
- if (rating < 3200) return TheText.Get("RATNG12");
- if (rating < 4000) return TheText.Get("RATNG13");
- if (rating < 5000) return TheText.Get("RATNG14");
- return TheText.Get("RATNG15");
+ if (rating < 0) {
+ if (rating > -500) return TheText.Get("RATNG53");
+ if (rating > -2000) return TheText.Get("RATNG54");
+ if (rating > -4000) return TheText.Get("RATNG55");
+ if (rating > -6000) return TheText.Get("RATNG56");
+ return TheText.Get("RATNG57");
+ }
+ if (rating < 20) return TheText.Get("RATNG1");
+ if (rating < 50) return TheText.Get("RATNG2");
+ if (rating < 75) return TheText.Get("RATNG3");
+ if (rating < 100) return TheText.Get("RATNG4");
+ if (rating < 120) return TheText.Get("RATNG5");
+ if (rating < 150) return TheText.Get("RATNG6");
+ if (rating < 200) return TheText.Get("RATNG7");
+ if (rating < 240) return TheText.Get("RATNG8");
+ if (rating < 270) return TheText.Get("RATNG9");
+ if (rating < 300) return TheText.Get("RATNG10");
+ if (rating < 335) return TheText.Get("RATNG11");
+ if (rating < 370) return TheText.Get("RATNG12");
+ if (rating < 400) return TheText.Get("RATNG13");
+ if (rating < 450) return TheText.Get("RATNG14");
+ if (rating < 500) return TheText.Get("RATNG15");
+ if (rating < 550) return TheText.Get("RATNG16");
+ if (rating < 600) return TheText.Get("RATNG17");
+ if (rating < 610) return TheText.Get("RATNG18");
+ if (rating < 650) return TheText.Get("RATNG19");
+ if (rating < 700) return TheText.Get("RATNG20");
+ if (rating < 850) return TheText.Get("RATNG21");
+ if (rating < 1000) return TheText.Get("RATNG22");
+ if (rating < 1005) return TheText.Get("RATNG23");
+ if (rating < 1150) return TheText.Get("RATNG24");
+ if (rating < 1300) return TheText.Get(TimesArrested > 0 ? "RATNG25" : "RATNG24");
+ if (rating < 1500) return TheText.Get("RATNG26");
+ if (rating < 1700) return TheText.Get("RATNG27");
+ if (rating < 2000) return TheText.Get("RATNG28");
+ if (rating < 2100) return TheText.Get("RATNG29");
+ if (rating < 2300) return TheText.Get("RATNG30");
+ if (rating < 2500) return TheText.Get("RATNG31");
+ if (rating < 2750) return TheText.Get("RATNG32");
+ if (rating < 3000) return TheText.Get("RATNG33");
+ if (rating < 3500) return TheText.Get("RATNG34");
+ if (rating < 4000) return TheText.Get("RATNG35");
+ if (rating < 5000) return TheText.Get("RATNG36");
+ if (rating < 7500) return TheText.Get("RATNG37");
+ if (rating < 10000) return TheText.Get("RATNG38");
+ if (rating < 20000) return TheText.Get("RATNG39");
+ if (rating < 30000) return TheText.Get("RATNG40");
+ if (rating < 40000) return TheText.Get("RATNG41");
+ if (rating < 50000) return TheText.Get("RATNG42");
+ if (rating < 65000) return TheText.Get("RATNG43");
+ if (rating < 80000) return TheText.Get("RATNG44");
+ if (rating < 100000) return TheText.Get("RATNG45");
+ if (rating < 150000) return TheText.Get("RATNG46");
+ if (rating < 200000) return TheText.Get("RATNG47");
+ if (rating < 300000) return TheText.Get("RATNG48");
+ if (rating < 375000) return TheText.Get("RATNG49");
+ if (rating < 500000) return TheText.Get(FlightTime / 60000 / 60 > 10 ? "RATNG50" : "RATNG49");
+ if (rating < 1000000) return TheText.Get("RATNG51");
+ return TheText.Get(CWorld::Players[CWorld::PlayerInFocus].m_nVisibleMoney > 10000000 ? "RATNG52" : "RATNG51");
}
int32 CStats::FindCriminalRatingNumber()
{
int32 rating;
- rating = FiresExtinguished + 10 * HighestLevelAmbulanceMission + CriminalsCaught + LivesSavedWithAmbulance
+ rating = FiresExtinguished + 10 * HighestLevelFireMission + 10 * HighestLevelAmbulanceMission
+ + CriminalsCaught + LivesSavedWithAmbulance
+ 30 * HelisDestroyed + TotalLegitimateKills - 3 * TimesArrested - 3 * TimesDied
+ CWorld::Players[CWorld::PlayerInFocus].m_nMoney / 5000;
- if (rating <= 0) rating = 0;
+ if (CPad::bHasPlayerCheated || CheatedCount > 0) {
+ rating -= CheatedCount;
+ if (rating <= -10000)
+ rating = -10000;
+
+ } else if (rating <= 0) {
+ rating = 0;
+ }
- if (InstantHitsFiredByPlayer > 100)
- rating += (float)CStats::InstantHitsHitByPlayer / (float)CStats::InstantHitsFiredByPlayer * 500.0f;
+ if (RoundsFiredByPlayer > 100)
+ rating += (float)CStats::BulletsThatHit / (float)CStats::RoundsFiredByPlayer * 500.0f;
if (TotalProgressInGame)
rating += (float)CStats::ProgressMade / (float)CStats::TotalProgressInGame * 1000.0f;
- if (!IndustrialPassed && rating >= 3521)
- rating = 3521;
- if (!CommercialPassed && rating >= 4552)
- rating = 4552;
return rating;
}
@@ -265,11 +373,80 @@ float CStats::GetPercentageProgress()
return Min(percentCompleted, 100.0f);
}
+void CStats::MoneySpentOnWeapons(int32 money)
+{
+ WeaponBudget += money;
+}
+
+void CStats::MoneySpentOnProperty(int32 money)
+{
+ PropertyBudget += money;
+}
+
+void CStats::MoneySpentOnAutoPainting(int32 money)
+{
+ AutoPaintingBudget += money;
+}
+
void CStats::MoneySpentOnFashion(int32 money)
{
FashionBudget += money;
}
+void CStats::NumOfVisitsFromLoanSharks(int32 num)
+{
+ LoanSharks += num;
+}
+
+void CStats::NumOfStoresKnockedOff(int32 num)
+{
+ StoresKnockedOff += num;
+}
+
+void CStats::NumOfMovieStunts(int32 num)
+{
+ MovieStunts += num;
+}
+
+void CStats::NumOfAssassinations(int32 num)
+{
+ Assassinations += num;
+}
+
+void CStats::NumOfPizzasDelivered(int32 num)
+{
+ PizzasDelivered += num;
+}
+
+void CStats::NumOfGarbagePickups(int32 num)
+{
+ GarbagePickups += num;
+}
+
+void CStats::NumOfIceCreamSold(int32 num)
+{
+ IceCreamSold += num;
+}
+
+void CStats::AddNumBloodRingKills(int32 num)
+{
+ BloodRingKills += num;
+}
+
+void CStats::LongestTimeInBloodRing(int32 time)
+{
+ if (BloodRingTime < time)
+ BloodRingTime = time;
+}
+
+void CStats::AddPropertyAsOwned(int32 id)
+{
+ if (!PropertyOwned[id]) {
+ PropertyOwned[id] = true;
+ ++NumPropertyOwned;
+ }
+}
+
void CStats::SaveStats(uint8 *buf, uint32 *size)
{
CheckPointReachedSuccessfully();
@@ -277,18 +454,23 @@ void CStats::SaveStats(uint8 *buf, uint32 *size)
*size = sizeof(PeopleKilledByPlayer) +
sizeof(PeopleKilledByOthers) +
sizeof(CarsExploded) +
+ sizeof(BoatsExploded) +
+ sizeof(TyresPopped) +
sizeof(RoundsFiredByPlayer) +
sizeof(PedsKilledOfThisType) +
sizeof(HelisDestroyed) +
sizeof(ProgressMade) +
sizeof(TotalProgressInGame) +
sizeof(KgsOfExplosivesUsed) +
- sizeof(InstantHitsFiredByPlayer) +
- sizeof(InstantHitsHitByPlayer) +
+ sizeof(BulletsThatHit) +
sizeof(HeadsPopped) +
+ sizeof(WantedStarsAttained) +
+ sizeof(WantedStarsEvaded) +
sizeof(TimesArrested) +
sizeof(TimesDied) +
sizeof(DaysPassed) +
+ sizeof(SafeHouseVisits) +
+ sizeof(Sprayings) +
sizeof(MaximumJumpDistance) +
sizeof(MaximumJumpHeight) +
sizeof(MaximumJumpFlips) +
@@ -297,50 +479,88 @@ void CStats::SaveStats(uint8 *buf, uint32 *size)
sizeof(NumberOfUniqueJumpsFound) +
sizeof(TotalNumberOfUniqueJumps) +
sizeof(MissionsGiven) +
- sizeof(MissionsPassed) +
sizeof(PassengersDroppedOffWithTaxi) +
sizeof(MoneyMadeWithTaxi) +
sizeof(IndustrialPassed) +
sizeof(CommercialPassed) +
sizeof(SuburbanPassed) +
- sizeof(ElBurroTime) +
+ sizeof(PamphletMissionPassed) +
+ sizeof(NoMoreHurricanes) +
sizeof(DistanceTravelledOnFoot) +
- sizeof(DistanceTravelledInVehicle) +
- sizeof(Record4x4One) +
- sizeof(Record4x4Two) +
- sizeof(Record4x4Three) +
- sizeof(Record4x4Mayhem) +
+ sizeof(DistanceTravelledByCar) +
+ sizeof(DistanceTravelledByBike) +
+ sizeof(DistanceTravelledByBoat) +
+ sizeof(DistanceTravelledByGolfCart) +
+ sizeof(DistanceTravelledByHelicoptor) +
+ sizeof(DistanceTravelledByPlane) +
sizeof(LivesSavedWithAmbulance) +
sizeof(CriminalsCaught) +
- sizeof(HighestLevelAmbulanceMission) +
sizeof(FiresExtinguished) +
- sizeof(TimeTakenDefuseMission) +
+ sizeof(HighestLevelVigilanteMission) +
+ sizeof(HighestLevelAmbulanceMission) +
+ sizeof(HighestLevelFireMission) +
+ sizeof(PhotosTaken) +
sizeof(NumberKillFrenziesPassed) +
sizeof(TotalNumberKillFrenzies) +
sizeof(TotalNumberMissions) +
+ sizeof(FlightTime) +
+ sizeof(TimesDrowned) +
+ sizeof(SeagullsKilled) +
+ sizeof(WeaponBudget) +
+ sizeof(FashionBudget) +
+ sizeof(LoanSharks) +
+ sizeof(StoresKnockedOff) +
+ sizeof(MovieStunts) +
+ sizeof(Assassinations) +
+ sizeof(PizzasDelivered) +
+ sizeof(GarbagePickups) +
+ sizeof(IceCreamSold) +
+ sizeof(TopShootingRangeScore) +
+ sizeof(ShootingRank) +
+ sizeof(LongestWheelie) +
+ sizeof(LongestStoppie) +
+ sizeof(Longest2Wheel) +
+ sizeof(LongestWheelieDist) +
+ sizeof(LongestStoppieDist) +
+ sizeof(Longest2WheelDist) +
+ sizeof(PropertyBudget) +
+ sizeof(AutoPaintingBudget) +
+ sizeof(PropertyDestroyed) +
+ sizeof(NumPropertyOwned) +
+ sizeof(BloodRingKills) +
+ sizeof(BloodRingTime) +
+ sizeof(PropertyOwned) +
+ sizeof(HighestChaseValue) +
sizeof(FastestTimes) +
sizeof(HighestScores) +
sizeof(BestPositions) +
sizeof(KillsSinceLastCheckpoint) +
sizeof(TotalLegitimateKills) +
- sizeof(LastMissionPassedName);
+ sizeof(LastMissionPassedName) +
+ sizeof(CheatedCount) +
+ sizeof(FavoriteRadioStationList);
#define CopyToBuf(buf, data) memcpy(buf, &data, sizeof(data)); buf += sizeof(data);
CopyToBuf(buf, PeopleKilledByPlayer);
CopyToBuf(buf, PeopleKilledByOthers);
CopyToBuf(buf, CarsExploded);
+ CopyToBuf(buf, BoatsExploded);
+ CopyToBuf(buf, TyresPopped);
CopyToBuf(buf, RoundsFiredByPlayer);
CopyToBuf(buf, PedsKilledOfThisType);
CopyToBuf(buf, HelisDestroyed);
CopyToBuf(buf, ProgressMade);
CopyToBuf(buf, TotalProgressInGame);
CopyToBuf(buf, KgsOfExplosivesUsed);
- CopyToBuf(buf, InstantHitsFiredByPlayer);
- CopyToBuf(buf, InstantHitsHitByPlayer);
+ CopyToBuf(buf, BulletsThatHit);
CopyToBuf(buf, HeadsPopped);
+ CopyToBuf(buf, WantedStarsAttained);
+ CopyToBuf(buf, WantedStarsEvaded);
CopyToBuf(buf, TimesArrested);
CopyToBuf(buf, TimesDied);
CopyToBuf(buf, DaysPassed);
+ CopyToBuf(buf, SafeHouseVisits);
+ CopyToBuf(buf, Sprayings);
CopyToBuf(buf, MaximumJumpDistance);
CopyToBuf(buf, MaximumJumpHeight);
CopyToBuf(buf, MaximumJumpFlips);
@@ -349,33 +569,67 @@ void CStats::SaveStats(uint8 *buf, uint32 *size)
CopyToBuf(buf, NumberOfUniqueJumpsFound);
CopyToBuf(buf, TotalNumberOfUniqueJumps);
CopyToBuf(buf, MissionsGiven);
- CopyToBuf(buf, MissionsPassed);
CopyToBuf(buf, PassengersDroppedOffWithTaxi);
CopyToBuf(buf, MoneyMadeWithTaxi);
CopyToBuf(buf, IndustrialPassed);
CopyToBuf(buf, CommercialPassed);
CopyToBuf(buf, SuburbanPassed);
- CopyToBuf(buf, ElBurroTime);
+ CopyToBuf(buf, PamphletMissionPassed);
+ CopyToBuf(buf, NoMoreHurricanes);
CopyToBuf(buf, DistanceTravelledOnFoot);
- CopyToBuf(buf, DistanceTravelledInVehicle);
- CopyToBuf(buf, Record4x4One);
- CopyToBuf(buf, Record4x4Two);
- CopyToBuf(buf, Record4x4Three);
- CopyToBuf(buf, Record4x4Mayhem);
+ CopyToBuf(buf, DistanceTravelledByCar);
+ CopyToBuf(buf, DistanceTravelledByBike);
+ CopyToBuf(buf, DistanceTravelledByBoat);
+ CopyToBuf(buf, DistanceTravelledByGolfCart);
+ CopyToBuf(buf, DistanceTravelledByHelicoptor);
+ CopyToBuf(buf, DistanceTravelledByPlane);
CopyToBuf(buf, LivesSavedWithAmbulance);
CopyToBuf(buf, CriminalsCaught);
- CopyToBuf(buf, HighestLevelAmbulanceMission);
CopyToBuf(buf, FiresExtinguished);
- CopyToBuf(buf, TimeTakenDefuseMission);
+ CopyToBuf(buf, HighestLevelVigilanteMission);
+ CopyToBuf(buf, HighestLevelAmbulanceMission);
+ CopyToBuf(buf, HighestLevelFireMission);
+ CopyToBuf(buf, PhotosTaken);
CopyToBuf(buf, NumberKillFrenziesPassed);
CopyToBuf(buf, TotalNumberKillFrenzies);
CopyToBuf(buf, TotalNumberMissions);
+ CopyToBuf(buf, FlightTime);
+ CopyToBuf(buf, TimesDrowned);
+ CopyToBuf(buf, SeagullsKilled);
+ CopyToBuf(buf, WeaponBudget);
+ CopyToBuf(buf, FashionBudget);
+ CopyToBuf(buf, LoanSharks);
+ CopyToBuf(buf, StoresKnockedOff);
+ CopyToBuf(buf, MovieStunts);
+ CopyToBuf(buf, Assassinations);
+ CopyToBuf(buf, PizzasDelivered);
+ CopyToBuf(buf, GarbagePickups);
+ CopyToBuf(buf, IceCreamSold);
+ CopyToBuf(buf, TopShootingRangeScore);
+ CopyToBuf(buf, ShootingRank);
+ CopyToBuf(buf, LongestWheelie);
+ CopyToBuf(buf, LongestStoppie);
+ CopyToBuf(buf, Longest2Wheel);
+ CopyToBuf(buf, LongestWheelieDist);
+ CopyToBuf(buf, LongestStoppieDist);
+ CopyToBuf(buf, Longest2WheelDist);
+ CopyToBuf(buf, PropertyBudget);
+ CopyToBuf(buf, AutoPaintingBudget);
+ CopyToBuf(buf, PropertyDestroyed);
+ CopyToBuf(buf, NumPropertyOwned);
+ CopyToBuf(buf, BloodRingKills);
+ CopyToBuf(buf, BloodRingTime);
+ CopyToBuf(buf, PropertyOwned);
+ CopyToBuf(buf, HighestChaseValue);
CopyToBuf(buf, FastestTimes);
CopyToBuf(buf, HighestScores);
CopyToBuf(buf, BestPositions);
CopyToBuf(buf, KillsSinceLastCheckpoint);
CopyToBuf(buf, TotalLegitimateKills);
CopyToBuf(buf, LastMissionPassedName);
+ CopyToBuf(buf, CheatedCount);
+ // TODO(Miami): Set favourite radio stations!!
+ CopyToBuf(buf, FavoriteRadioStationList);
assert(buf - buf_start == *size);
#undef CopyToBuf
@@ -390,18 +644,23 @@ void CStats::LoadStats(uint8 *buf, uint32 size)
CopyFromBuf(buf, PeopleKilledByPlayer);
CopyFromBuf(buf, PeopleKilledByOthers);
CopyFromBuf(buf, CarsExploded);
+ CopyFromBuf(buf, BoatsExploded);
+ CopyFromBuf(buf, TyresPopped);
CopyFromBuf(buf, RoundsFiredByPlayer);
CopyFromBuf(buf, PedsKilledOfThisType);
CopyFromBuf(buf, HelisDestroyed);
CopyFromBuf(buf, ProgressMade);
CopyFromBuf(buf, TotalProgressInGame);
CopyFromBuf(buf, KgsOfExplosivesUsed);
- CopyFromBuf(buf, InstantHitsFiredByPlayer);
- CopyFromBuf(buf, InstantHitsHitByPlayer);
+ CopyFromBuf(buf, BulletsThatHit);
CopyFromBuf(buf, HeadsPopped);
+ CopyFromBuf(buf, WantedStarsAttained);
+ CopyFromBuf(buf, WantedStarsEvaded);
CopyFromBuf(buf, TimesArrested);
CopyFromBuf(buf, TimesDied);
CopyFromBuf(buf, DaysPassed);
+ CopyFromBuf(buf, SafeHouseVisits);
+ CopyFromBuf(buf, Sprayings);
CopyFromBuf(buf, MaximumJumpDistance);
CopyFromBuf(buf, MaximumJumpHeight);
CopyFromBuf(buf, MaximumJumpFlips);
@@ -410,33 +669,66 @@ void CStats::LoadStats(uint8 *buf, uint32 size)
CopyFromBuf(buf, NumberOfUniqueJumpsFound);
CopyFromBuf(buf, TotalNumberOfUniqueJumps);
CopyFromBuf(buf, MissionsGiven);
- CopyFromBuf(buf, MissionsPassed);
CopyFromBuf(buf, PassengersDroppedOffWithTaxi);
CopyFromBuf(buf, MoneyMadeWithTaxi);
CopyFromBuf(buf, IndustrialPassed);
CopyFromBuf(buf, CommercialPassed);
CopyFromBuf(buf, SuburbanPassed);
- CopyFromBuf(buf, ElBurroTime);
+ CopyFromBuf(buf, PamphletMissionPassed);
+ CopyFromBuf(buf, NoMoreHurricanes);
CopyFromBuf(buf, DistanceTravelledOnFoot);
- CopyFromBuf(buf, DistanceTravelledInVehicle);
- CopyFromBuf(buf, Record4x4One);
- CopyFromBuf(buf, Record4x4Two);
- CopyFromBuf(buf, Record4x4Three);
- CopyFromBuf(buf, Record4x4Mayhem);
+ CopyFromBuf(buf, DistanceTravelledByCar);
+ CopyFromBuf(buf, DistanceTravelledByBike);
+ CopyFromBuf(buf, DistanceTravelledByBoat);
+ CopyFromBuf(buf, DistanceTravelledByGolfCart);
+ CopyFromBuf(buf, DistanceTravelledByHelicoptor);
+ CopyFromBuf(buf, DistanceTravelledByPlane);
CopyFromBuf(buf, LivesSavedWithAmbulance);
CopyFromBuf(buf, CriminalsCaught);
- CopyFromBuf(buf, HighestLevelAmbulanceMission);
CopyFromBuf(buf, FiresExtinguished);
- CopyFromBuf(buf, TimeTakenDefuseMission);
+ CopyFromBuf(buf, HighestLevelVigilanteMission);
+ CopyFromBuf(buf, HighestLevelAmbulanceMission);
+ CopyFromBuf(buf, HighestLevelFireMission);
+ CopyFromBuf(buf, PhotosTaken);
CopyFromBuf(buf, NumberKillFrenziesPassed);
CopyFromBuf(buf, TotalNumberKillFrenzies);
CopyFromBuf(buf, TotalNumberMissions);
+ CopyFromBuf(buf, FlightTime);
+ CopyFromBuf(buf, TimesDrowned);
+ CopyFromBuf(buf, SeagullsKilled);
+ CopyFromBuf(buf, WeaponBudget);
+ CopyFromBuf(buf, FashionBudget);
+ CopyFromBuf(buf, LoanSharks);
+ CopyFromBuf(buf, StoresKnockedOff);
+ CopyFromBuf(buf, MovieStunts);
+ CopyFromBuf(buf, Assassinations);
+ CopyFromBuf(buf, PizzasDelivered);
+ CopyFromBuf(buf, GarbagePickups);
+ CopyFromBuf(buf, IceCreamSold);
+ CopyFromBuf(buf, TopShootingRangeScore);
+ CopyFromBuf(buf, ShootingRank);
+ CopyFromBuf(buf, LongestWheelie);
+ CopyFromBuf(buf, LongestStoppie);
+ CopyFromBuf(buf, Longest2Wheel);
+ CopyFromBuf(buf, LongestWheelieDist);
+ CopyFromBuf(buf, LongestStoppieDist);
+ CopyFromBuf(buf, Longest2WheelDist);
+ CopyFromBuf(buf, PropertyBudget);
+ CopyFromBuf(buf, AutoPaintingBudget);
+ CopyFromBuf(buf, PropertyDestroyed);
+ CopyFromBuf(buf, NumPropertyOwned);
+ CopyFromBuf(buf, BloodRingKills);
+ CopyFromBuf(buf, BloodRingTime);
+ CopyFromBuf(buf, PropertyOwned);
+ CopyFromBuf(buf, HighestChaseValue);
CopyFromBuf(buf, FastestTimes);
CopyFromBuf(buf, HighestScores);
CopyFromBuf(buf, BestPositions);
CopyFromBuf(buf, KillsSinceLastCheckpoint);
CopyFromBuf(buf, TotalLegitimateKills);
CopyFromBuf(buf, LastMissionPassedName);
+ CopyFromBuf(buf, CheatedCount);
+ CopyFromBuf(buf, FavoriteRadioStationList);
assert(buf - buf_start == size);
#undef CopyFromBuf
diff --git a/src/core/Stats.h b/src/core/Stats.h
index 7dd527ea..f9ad4174 100644
--- a/src/core/Stats.h
+++ b/src/core/Stats.h
@@ -1,6 +1,7 @@
#pragma once
#include "PedType.h"
+#include "audio_enums.h"
class CStats
{
@@ -8,11 +9,10 @@ public:
enum {
TOTAL_FASTEST_TIMES = 23,
TOTAL_HIGHEST_SCORES = 5,
- TOTAL_BEST_POSITIONS = 1
+ TOTAL_BEST_POSITIONS = 1,
+ TOTAL_PROPERTIES = 15
};
- //TODO
static int32 SeagullsKilled;
-
static int32 DaysPassed;
static int32 HeadsPopped;
static int32 CommercialPassed;
@@ -25,9 +25,29 @@ public:
static int32 TimesDied;
static int32 TimesArrested;
static int32 KillsSinceLastCheckpoint;
- static float DistanceTravelledInVehicle;
+ static float DistanceTravelledByCar;
+ static float DistanceTravelledByHelicoptor;
+ static float DistanceTravelledByBike;
+ static float DistanceTravelledByBoat;
+ static float DistanceTravelledByPlane;
+ static float DistanceTravelledByGolfCart;
static float DistanceTravelledOnFoot;
+ static int32 FlightTime;
+ static int32 TimesDrowned;
+ static int32 PhotosTaken;
+ static float LoanSharks;
+ static float StoresKnockedOff;
+ static float MovieStunts;
+ static float Assassinations;
+ static float PizzasDelivered;
+ static float GarbagePickups;
+ static float IceCreamSold;
+ static float TopShootingRangeScore;
+ static float ShootingRank;
static int32 CarsExploded;
+ static int32 BoatsExploded;
+ static int32 WantedStarsAttained;
+ static int32 WantedStarsEvaded;
static int32 PeopleKilledByPlayer;
static int32 ProgressMade;
static int32 TotalProgressInGame;
@@ -44,50 +64,60 @@ public:
static int32 MissionsPassed;
static char LastMissionPassedName[8];
static int32 TotalLegitimateKills;
- static int32 ElBurroTime;
- static int32 Record4x4One;
- static int32 Record4x4Two;
- static int32 Record4x4Three;
- static int32 Record4x4Mayhem;
static int32 LivesSavedWithAmbulance;
static int32 CriminalsCaught;
static int32 HighestLevelAmbulanceMission;
+ static int32 HighestLevelVigilanteMission;
+ static int32 HighestLevelFireMission;
static int32 FiresExtinguished;
- static int32 TimeTakenDefuseMission;
static int32 TotalNumberKillFrenzies;
static int32 TotalNumberMissions;
static int32 RoundsFiredByPlayer;
static int32 KgsOfExplosivesUsed;
- static int32 InstantHitsFiredByPlayer;
- static int32 InstantHitsHitByPlayer;
+ static int32 BulletsThatHit;
static int32 BestTimeBombDefusal;
static int32 FastestTimes[TOTAL_FASTEST_TIMES];
static int32 HighestScores[TOTAL_HIGHEST_SCORES];
static int32 BestPositions[TOTAL_BEST_POSITIONS];
+ static bool PropertyOwned[TOTAL_PROPERTIES];
+ static int32 NumPropertyOwned;
static int32 PropertyDestroyed;
+ static float HighestChaseValue;
+ static int32 CheatedCount;
+ static int32 ShowChaseStatOnScreen;
+ static int32 PamphletMissionPassed;
+ static bool abSonyCDs[1];
+ static int32 BloodRingKills;
+ static int32 BloodRingTime;
+ static float FavoriteRadioStationList[NUM_RADIOS];
static int32 Sprayings;
static float AutoPaintingBudget;
static int32 NoMoreHurricanes;
static float FashionBudget;
+ static float PropertyBudget;
+ static float WeaponBudget;
static int32 SafeHouseVisits;
static int32 TyresPopped;
+ static int32 LongestWheelie;
+ static int32 LongestStoppie;
+ static int32 Longest2Wheel;
+ static float LongestWheelieDist;
+ static float LongestStoppieDist;
+ static float Longest2WheelDist;
+
public:
static void Init(void);
static void RegisterFastestTime(int32, int32);
static void RegisterHighestScore(int32, int32);
static void RegisterBestPosition(int32, int32);
- static void RegisterElBurroTime(int32);
- static void Register4x4OneTime(int32);
- static void Register4x4TwoTime(int32);
- static void Register4x4ThreeTime(int32);
- static void Register4x4MayhemTime(int32);
static void AnotherLifeSavedWithAmbulance();
static void AnotherCriminalCaught();
static void RegisterLevelAmbulanceMission(int32);
+ static void RegisterLevelVigilanteMission(int32);
+ static void RegisterLevelFireMission(int32);
static void AnotherFireExtinguished();
static wchar *FindCriminalRatingString();
- static void RegisterTimeTakenDefuseMission(int32);
static void AnotherKillFrenzyPassed();
static void SetTotalNumberKillFrenzies(int32);
static void SetTotalNumberMissions(int32);
@@ -98,5 +128,20 @@ public:
static void LoadStats(uint8 *buf, uint32 size);
static float GetPercentageProgress();
+ static void MoneySpentOnWeapons(int32);
+ static void MoneySpentOnProperty(int32);
+ static void MoneySpentOnAutoPainting(int32);
static void MoneySpentOnFashion(int32);
+
+ static void NumOfVisitsFromLoanSharks(int32);
+ static void NumOfStoresKnockedOff(int32);
+ static void NumOfMovieStunts(int32);
+ static void NumOfAssassinations(int32);
+ static void NumOfPizzasDelivered(int32);
+ static void NumOfGarbagePickups(int32);
+ static void NumOfIceCreamSold(int32);
+ static void AddNumBloodRingKills(int32);
+
+ static void LongestTimeInBloodRing(int32);
+ static void AddPropertyAsOwned(int32);
};
diff --git a/src/core/Streaming.cpp b/src/core/Streaming.cpp
index 3c32b856..d296496e 100644
--- a/src/core/Streaming.cpp
+++ b/src/core/Streaming.cpp
@@ -31,6 +31,9 @@
#include "main.h"
#include "ColStore.h"
#include "DMAudio.h"
+#include "Script.h"
+
+//--MIAMI: file done (possibly bugs)
bool CStreaming::ms_disableStreaming;
bool CStreaming::ms_bLoadingBigModel;
@@ -48,6 +51,7 @@ size_t CStreaming::ms_memoryUsed;
CStreamingChannel CStreaming::ms_channel[2];
int32 CStreaming::ms_channelError;
int32 CStreaming::ms_numVehiclesLoaded;
+int32 CStreaming::ms_numPedsLoaded;
int32 CStreaming::ms_vehiclesLoaded[MAXVEHICLESLOADED];
int32 CStreaming::ms_lastVehicleDeleted;
bool CStreaming::ms_bIsPedFromPedGroupLoaded[NUMMODELSPERPEDGROUP];
@@ -70,7 +74,6 @@ CEntity *pIslandLODbeachEntity;
int32 islandLODmainland;
int32 islandLODbeach;
-//--MIAMI: done
bool
CStreamingInfo::GetCdPosnAndSize(uint32 &posn, uint32 &size)
{
@@ -81,7 +84,6 @@ CStreamingInfo::GetCdPosnAndSize(uint32 &posn, uint32 &size)
return true;
}
-//--MIAMI: done
void
CStreamingInfo::SetCdPosnAndSize(uint32 posn, uint32 size)
{
@@ -89,7 +91,6 @@ CStreamingInfo::SetCdPosnAndSize(uint32 posn, uint32 size)
m_size = size;
}
-//--MIAMI: done
void
CStreamingInfo::AddToList(CStreamingInfo *link)
{
@@ -100,7 +101,6 @@ CStreamingInfo::AddToList(CStreamingInfo *link)
m_next->m_prev = this;
}
-//--MIAMI: done
void
CStreamingInfo::RemoveFromList(void)
{
@@ -110,7 +110,6 @@ CStreamingInfo::RemoveFromList(void)
m_prev = nil;
}
-//--MIAMI: done
void
CStreaming::Init2(void)
{
@@ -179,6 +178,7 @@ CStreaming::Init2(void)
for(i = 0; i < MAXVEHICLESLOADED; i++)
ms_vehiclesLoaded[i] = -1;
ms_numVehiclesLoaded = 0;
+ ms_numPedsLoaded = 8;
for(i = 0; i < ARRAY_SIZE(ms_bIsPedFromPedGroupLoaded); i++)
ms_bIsPedFromPedGroupLoaded[i] = false;
@@ -199,11 +199,25 @@ CStreaming::Init2(void)
ms_pStreamingBuffer[1] = ms_pStreamingBuffer[0] + ms_streamingBufferSize*CDSTREAM_SECTOR_SIZE;
debug("Streaming buffer size is %d sectors", ms_streamingBufferSize);
+ // PC only, figure out how much memory we got
+#ifdef GTA_PC
#define MB (1024*1024)
+#ifdef FIX_BUGS
+ // do what gta3 does
+ extern size_t _dwMemAvailPhys;
+ ms_memoryAvailable = (_dwMemAvailPhys - 10*MB)/2;
+ if(ms_memoryAvailable < 65*MB)
+ ms_memoryAvailable = 65*MB;
+ desiredNumVehiclesLoaded = (int32)((ms_memoryAvailable / MB - 65) / 3 + 12);
+ if(desiredNumVehiclesLoaded > MAXVEHICLESLOADED)
+ desiredNumVehiclesLoaded = MAXVEHICLESLOADED;
+#else
ms_memoryAvailable = 65 * MB;
desiredNumVehiclesLoaded = 25;
- debug("Memory allocated to Streaming is %dMB", ms_memoryAvailable / MB);
+ debug("Memory allocated to Streaming is %zuMB", ms_memoryAvailable/MB); // original modifier was %d
+#endif
#undef MB
+#endif
// find island LODs
@@ -219,36 +233,54 @@ void
CStreaming::Init(void)
{
#ifdef USE_TXD_CDIMAGE
- int txdHandle = CFileMgr::OpenFile("MODELS\\TXD.IMG", "r");
- if (txdHandle)
- CFileMgr::CloseFile(txdHandle);
- if (!CheckVideoCardCaps() && txdHandle) {
- CdStreamAddImage("MODELS\\TXD.IMG");
- CStreaming::Init2();
- } else {
- CStreaming::Init2();
- if (CreateTxdImageForVideoCard()) {
- CStreaming::Shutdown();
+ if(!CanVideoCardDoDXT()){
+ int txdHandle = CFileMgr::OpenFile("MODELS\\TXD.IMG", "r");
+ if (txdHandle)
+ CFileMgr::CloseFile(txdHandle);
+ if (!CheckVideoCardCaps() && txdHandle) {
CdStreamAddImage("MODELS\\TXD.IMG");
CStreaming::Init2();
+ } else {
+ CStreaming::Init2();
+ if (CreateTxdImageForVideoCard()) {
+ CStreaming::Shutdown();
+ CdStreamAddImage("MODELS\\TXD.IMG");
+ CStreaming::Init2();
+ }
}
- }
+ } else
+ CStreaming::Init2();
#else
CStreaming::Init2();
#endif
}
-//--MIAMI: done
+void
+CStreaming::ReInit(void)
+{
+ int i;
+ CStreaming::FlushRequestList();
+ CStreaming::DeleteAllRwObjects();
+ CStreaming::RemoveAllUnusedModels();
+ for(i = 0; i < MODELINFOSIZE; i++)
+ if(CModelInfo::GetModelInfo(i) && ms_aInfoForModel[i].m_flags & STREAMFLAGS_SCRIPTOWNED)
+ SetMissionDoesntRequireModel(i);
+ CStreaming::ms_disableStreaming = false;
+}
+
void
CStreaming::Shutdown(void)
{
RwFreeAlign(ms_pStreamingBuffer[0]);
ms_streamingBufferSize = 0;
- if(ms_pExtraObjectsDir)
+ if(ms_pExtraObjectsDir) {
delete ms_pExtraObjectsDir;
+#ifdef FIX_BUGS
+ ms_pExtraObjectsDir = nil;
+#endif
+ }
}
-//--MIAMI: done
void
CStreaming::Update(void)
{
@@ -267,7 +299,7 @@ CStreaming::Update(void)
LoadBigBuildingsWhenNeeded();
if(!ms_disableStreaming && TheCamera.GetPosition().z < 55.0f)
- AddModelsToRequestList(TheCamera.GetPosition());
+ AddModelsToRequestList(TheCamera.GetPosition(), 0);
DeleteFarAwayRwObjects(TheCamera.GetPosition());
@@ -299,7 +331,6 @@ CStreaming::Update(void)
}
}
-//--MIAMI: done
void
CStreaming::LoadCdDirectory(void)
{
@@ -328,7 +359,6 @@ CStreaming::LoadCdDirectory(void)
ms_imageSize /= CDSTREAM_SECTOR_SIZE;
}
-//--MIAMI: done
void
CStreaming::LoadCdDirectory(const char *dirname, int n)
{
@@ -426,7 +456,6 @@ GetObjectName(int streamId)
}
-//--MIAMI: done
bool
CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
{
@@ -577,7 +606,6 @@ CStreaming::ConvertBufferToObject(int8 *buf, int32 streamId)
return true;
}
-//--MIAMI: done
bool
CStreaming::FinishLoadingLargeFile(int8 *buf, int32 streamId)
{
@@ -640,7 +668,6 @@ CStreaming::FinishLoadingLargeFile(int8 *buf, int32 streamId)
return true;
}
-//--MIAMI: done
void
CStreaming::RequestModel(int32 id, int32 flags)
{
@@ -696,7 +723,6 @@ CStreaming::RequestModel(int32 id, int32 flags)
#define BIGBUILDINGFLAGS STREAMFLAGS_DONT_REMOVE
-//--MIAMI: done
void
CStreaming::RequestBigBuildings(eLevelName level)
{
@@ -713,7 +739,6 @@ CStreaming::RequestBigBuildings(eLevelName level)
RequestIslands(level);
}
-//--MIAMI: done
void
CStreaming::RequestBigBuildings(eLevelName level, const CVector &pos)
{
@@ -737,7 +762,6 @@ CStreaming::RequestBigBuildings(eLevelName level, const CVector &pos)
RequestIslands(level);
}
-//--MIAMI: done
void
CStreaming::InstanceBigBuildings(eLevelName level, const CVector &pos)
{
@@ -754,7 +778,6 @@ CStreaming::InstanceBigBuildings(eLevelName level, const CVector &pos)
}
}
-//--MIAMI: done
void
CStreaming::InstanceLoadedModelsInSectorList(CPtrList &list)
{
@@ -767,7 +790,6 @@ CStreaming::InstanceLoadedModelsInSectorList(CPtrList &list)
}
}
-//--MIAMI: done
void
CStreaming::InstanceLoadedModels(const CVector &pos)
{
@@ -795,7 +817,6 @@ CStreaming::InstanceLoadedModels(const CVector &pos)
}
}
-//--MIAMI: done
void
CStreaming::RequestIslands(eLevelName level)
{
@@ -814,7 +835,56 @@ CStreaming::RequestIslands(eLevelName level)
#endif
}
-//--MIAMI: TODO
+static char *IGnames[] = {
+ "player",
+ "player2",
+ "player3",
+ "player4",
+ "player5",
+ "player6",
+ "player7",
+ "player8",
+ "player9",
+ "play10",
+ "play11",
+ "igken",
+ "igcandy",
+ "igsonny",
+ "igbuddy",
+ "igjezz",
+ "ighlary",
+ "igphil",
+ "igmerc",
+ "igdick",
+ "igdiaz",
+ ""
+};
+
+static char *CSnames[] = {
+ "csplay",
+ "csplay2",
+ "csplay3",
+ "csplay4",
+ "csplay5",
+ "csplay6",
+ "csplay7",
+ "csplay8",
+ "csplay9",
+ "csplay10",
+ "csplay11",
+ "csken",
+ "cscandy",
+ "cssonny",
+ "csbuddy",
+ "csjezz",
+ "cshlary",
+ "csphil",
+ "csmerc",
+ "csdick",
+ "csdiaz",
+ ""
+};
+
void
CStreaming::RequestSpecialModel(int32 modelId, const char *modelName, int32 flags)
{
@@ -822,14 +892,43 @@ CStreaming::RequestSpecialModel(int32 modelId, const char *modelName, int32 flag
int txdId;
char oldName[48];
uint32 pos, size;
+ int i, n;
mi = CModelInfo::GetModelInfo(modelId);
+ if(!CGeneral::faststrcmp("CSPlay", modelName)){
+ char *curname = CModelInfo::GetModelInfo(MI_PLAYER)->GetName();
+ for(int i = 0; CSnames[i][0]; i++){
+ if(strcasecmp(curname, IGnames[i]) == 0){
+ modelName = CSnames[i];
+ break;
+ }
+ }
+ }
if(!CGeneral::faststrcmp(mi->GetName(), modelName)){
// Already have the correct name, just request it
RequestModel(modelId, flags);
return;
}
+ if(mi->GetNumRefs() > 0){
+ n = CPools::GetPedPool()->GetSize()-1;
+ for(i = n; i >= 0 && mi->GetNumRefs() > 0; i--){
+ CPed *ped = CPools::GetPedPool()->GetSlot(i);
+ if(ped && ped->GetModelIndex() == modelId &&
+ !ped->IsPlayer() && ped->CanBeDeletedEvenInVehicle())
+ CTheScripts::RemoveThisPed(ped);
+ }
+ n = CPools::GetObjectPool()->GetSize()-1;
+ for(i = n; i >= 0 && mi->GetNumRefs() > 0; i--){
+ CObject *obj = CPools::GetObjectPool()->GetSlot(i);
+ if(obj && obj->GetModelIndex() == modelId && obj->CanBeDeleted()){
+ CWorld::Remove(obj);
+ CWorld::RemoveReferencesToDeletedObject(obj);
+ delete obj;
+ }
+ }
+ }
+
strcpy(oldName, mi->GetName());
mi->SetName(modelName);
@@ -856,28 +955,24 @@ CStreaming::RequestSpecialModel(int32 modelId, const char *modelName, int32 flag
RequestModel(modelId, flags);
}
-//--MIAMI: done
void
CStreaming::RequestSpecialChar(int32 charId, const char *modelName, int32 flags)
{
RequestSpecialModel(charId + MI_SPECIAL01, modelName, flags);
}
-//--MIAMI: done
bool
CStreaming::HasSpecialCharLoaded(int32 id)
{
return HasModelLoaded(id + MI_SPECIAL01);
}
-//--MIAMI: done
void
CStreaming::SetMissionDoesntRequireSpecialChar(int32 id)
{
return SetMissionDoesntRequireModel(id + MI_SPECIAL01);
}
-//--MIAMI: done
void
CStreaming::DecrementRef(int32 id)
{
@@ -888,7 +983,6 @@ CStreaming::DecrementRef(int32 id)
}
}
-//--MIAMI: done
void
CStreaming::RemoveModel(int32 id)
{
@@ -941,7 +1035,6 @@ CStreaming::RemoveModel(int32 id)
ms_aInfoForModel[id].m_loadState = STREAMSTATE_NOTLOADED;
}
-//--MIAMI: done
void
CStreaming::RemoveUnusedBuildings(eLevelName level)
{
@@ -951,7 +1044,6 @@ CStreaming::RemoveUnusedBuildings(eLevelName level)
RemoveBuildings(LEVEL_MAINLAND);
}
-//--MIAMI: done
void
CStreaming::RemoveBuildings(eLevelName level)
{
@@ -1012,7 +1104,61 @@ CStreaming::RemoveBuildings(eLevelName level)
}
}
-//--MIAMI: done
+void
+CStreaming::RemoveBuildingsNotInArea(int32 area)
+{
+ int i, n;
+ CEntity *e;
+
+ n = CPools::GetBuildingPool()->GetSize()-1;
+ for(i = n; i >= 0; i--){
+ e = CPools::GetBuildingPool()->GetSlot(i);
+ if(e && e->m_rwObject && !IsAreaVisible(area) &&
+ (!e->bIsBIGBuilding || e->bStreamBIGBuilding)){
+ if(e->bIsBIGBuilding)
+ RequestModel(e->GetModelIndex(), 0);
+ if(!e->bImBeingRendered)
+ e->DeleteRwObject();
+ }
+ }
+
+ n = CPools::GetTreadablePool()->GetSize()-1;
+ for(i = n; i >= 0; i--){
+ e = CPools::GetTreadablePool()->GetSlot(i);
+ if(e && e->m_rwObject && !IsAreaVisible(area) &&
+ (!e->bIsBIGBuilding || e->bStreamBIGBuilding)){
+ if(e->bIsBIGBuilding)
+ RequestModel(e->GetModelIndex(), 0);
+ if(!e->bImBeingRendered)
+ e->DeleteRwObject();
+ }
+ }
+
+ n = CPools::GetObjectPool()->GetSize()-1;
+ for(i = n; i >= 0; i--){
+ e = CPools::GetObjectPool()->GetSlot(i);
+ if(e && e->m_rwObject && !IsAreaVisible(area) &&
+ (!e->bIsBIGBuilding || e->bStreamBIGBuilding)){
+ if(e->bIsBIGBuilding)
+ RequestModel(e->GetModelIndex(), 0);
+ if(!e->bImBeingRendered)
+ e->DeleteRwObject();
+ }
+ }
+
+ n = CPools::GetDummyPool()->GetSize()-1;
+ for(i = n; i >= 0; i--){
+ e = CPools::GetDummyPool()->GetSlot(i);
+ if(e && e->m_rwObject && !IsAreaVisible(area) &&
+ (!e->bIsBIGBuilding || e->bStreamBIGBuilding)){
+ if(e->bIsBIGBuilding)
+ RequestModel(e->GetModelIndex(), 0);
+ if(!e->bImBeingRendered)
+ e->DeleteRwObject();
+ }
+ }
+}
+
void
CStreaming::RemoveUnusedBigBuildings(eLevelName level)
{
@@ -1025,7 +1171,6 @@ CStreaming::RemoveUnusedBigBuildings(eLevelName level)
RemoveIslandsNotUsed(level);
}
-//--MIAMI: done
void
DeleteIsland(CEntity *island)
{
@@ -1039,7 +1184,6 @@ DeleteIsland(CEntity *island)
}
}
-//--MIAMI: done
void
CStreaming::RemoveIslandsNotUsed(eLevelName level)
{
@@ -1068,7 +1212,6 @@ CStreaming::RemoveIslandsNotUsed(eLevelName level)
#endif // !NO_ISLAND_LOADING
}
-//--MIAMI: done
void
CStreaming::RemoveBigBuildings(eLevelName level)
{
@@ -1115,7 +1258,6 @@ found:
return true;
}
-//--MIAMI: done
bool
CStreaming::RemoveLeastUsedModel(uint32 excludeMask)
{
@@ -1149,7 +1291,6 @@ CStreaming::RemoveLeastUsedModel(uint32 excludeMask)
return (ms_numVehiclesLoaded > 7 || CGame::currArea != AREA_MAIN_MAP && ms_numVehiclesLoaded > 4) && RemoveLoadedVehicle();
}
-//--MIAMI: done
void
CStreaming::RemoveAllUnusedModels(void)
{
@@ -1167,14 +1308,35 @@ CStreaming::RemoveAllUnusedModels(void)
}
}
-//--MIAMI: done
void
CStreaming::RemoveUnusedModelsInLoadedList(void)
{
// empty
}
-//--MIAMI: done
+bool
+CStreaming::RemoveLoadedZoneModel(void)
+{
+ int i;
+
+ if(ms_currentPedGrp == -1)
+ return false;
+
+ for(i = 0; i < NUMMODELSPERPEDGROUP; i++){
+ int mi = CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i];
+ if(mi != -1 && ms_bIsPedFromPedGroupLoaded[i] &&
+ HasModelLoaded(mi) && CanRemoveModel(mi) &&
+ CModelInfo::GetModelInfo(mi)->GetNumRefs() == 0){
+ RemoveModel(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
+ ms_numPedsLoaded--;
+ ms_bIsPedFromPedGroupLoaded[i] = false;
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool
CStreaming::IsTxdUsedByRequestedModels(int32 txdId)
{
@@ -1277,7 +1439,7 @@ found:
if(id == -1)
return false; // still no luck
ms_lastVehicleDeleted = id;
- // this is more that we wanted actually
+ // this is more than we wanted actually
ms_numVehiclesLoaded++;
}
else{
@@ -1308,7 +1470,7 @@ void
CStreaming::SetModelIsDeletable(int32 id)
{
ms_aInfoForModel[id].m_flags &= ~STREAMFLAGS_DONT_REMOVE;
- if ((id >= STREAM_OFFSET_TXD || CModelInfo::GetModelInfo(id)->GetModelType() != MITYPE_VEHICLE) &&
+ if ((id >= STREAM_OFFSET_TXD && id < STREAM_OFFSET_COL || CModelInfo::GetModelInfo(id)->GetModelType() != MITYPE_VEHICLE) &&
(ms_aInfoForModel[id].m_flags & STREAMFLAGS_SCRIPTOWNED) == 0){
if(ms_aInfoForModel[id].m_loadState != STREAMSTATE_LOADED)
RemoveModel(id);
@@ -1323,7 +1485,6 @@ CStreaming::SetModelTxdIsDeletable(int32 id)
SetModelIsDeletable(CModelInfo::GetModelInfo(id)->GetTxdSlot() + STREAM_OFFSET_TXD);
}
-//--MIAMI: done
void
CStreaming::SetMissionDoesntRequireModel(int32 id)
{
@@ -1355,15 +1516,10 @@ CStreaming::LoadInitialWeapons(void)
void
CStreaming::LoadInitialVehicles(void)
{
- int id;
-
ms_numVehiclesLoaded = 0;
ms_lastVehicleDeleted = 0;
- if(CModelInfo::GetModelInfo("taxi", &id))
- RequestModel(id, STREAMFLAGS_DONT_REMOVE);
- if(CModelInfo::GetModelInfo("police", &id))
- RequestModel(id, STREAMFLAGS_DONT_REMOVE);
+ RequestModel(MI_POLICE, STREAMFLAGS_DONT_REMOVE);
}
void
@@ -1424,25 +1580,26 @@ CStreaming::StreamVehiclesAndPeds(void)
SetModelIsDeletable(MI_VICE6);
SetModelIsDeletable(MI_VICE7);
SetModelIsDeletable(MI_VICE8);
- switch (CCarCtrl::MiamiViceCycle) {
- case 0:
- RequestModel(MI_VICE1, STREAMFLAGS_DONT_REMOVE);
- RequestModel(MI_VICE2, STREAMFLAGS_DONT_REMOVE);
- break;
- case 1:
- RequestModel(MI_VICE3, STREAMFLAGS_DONT_REMOVE);
- RequestModel(MI_VICE4, STREAMFLAGS_DONT_REMOVE);
- break;
- case 2:
- RequestModel(MI_VICE5, STREAMFLAGS_DONT_REMOVE);
- RequestModel(MI_VICE6, STREAMFLAGS_DONT_REMOVE);
- break;
- case 3:
- RequestModel(MI_VICE7, STREAMFLAGS_DONT_REMOVE);
- RequestModel(MI_VICE8, STREAMFLAGS_DONT_REMOVE);
- break;
- }
RequestModel(MI_VICECHEE, STREAMFLAGS_DONT_REMOVE);
+ if(CPopulation::NumMiamiViceCops == 0)
+ switch (CCarCtrl::MiamiViceCycle) {
+ case 0:
+ RequestModel(MI_VICE1, STREAMFLAGS_DONT_REMOVE);
+ RequestModel(MI_VICE2, STREAMFLAGS_DONT_REMOVE);
+ break;
+ case 1:
+ RequestModel(MI_VICE3, STREAMFLAGS_DONT_REMOVE);
+ RequestModel(MI_VICE4, STREAMFLAGS_DONT_REMOVE);
+ break;
+ case 2:
+ RequestModel(MI_VICE5, STREAMFLAGS_DONT_REMOVE);
+ RequestModel(MI_VICE6, STREAMFLAGS_DONT_REMOVE);
+ break;
+ case 3:
+ RequestModel(MI_VICE7, STREAMFLAGS_DONT_REMOVE);
+ RequestModel(MI_VICE8, STREAMFLAGS_DONT_REMOVE);
+ break;
+ }
}
else {
SetModelIsDeletable(MI_VICECHEE);
@@ -1481,13 +1638,13 @@ CStreaming::StreamVehiclesAndPeds(void)
}
}
-//--MIAMI: TODO
void
CStreaming::StreamZoneModels(const CVector &pos)
{
- int i;
+ int i, j;
uint16 gangsToLoad, gangCarsToLoad, bit;
CZoneInfo info;
+ static int timeBeforeNextLoad = 0;
CTheZones::GetZoneInfoForTimeOfDay(&pos, &info);
@@ -1496,22 +1653,64 @@ CStreaming::StreamZoneModels(const CVector &pos)
// unload pevious group
if(ms_currentPedGrp != -1)
for(i = 0; i < NUMMODELSPERPEDGROUP; i++){
- if(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] == -1)
- break;
- SetModelIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
- SetModelTxdIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
+ ms_bIsPedFromPedGroupLoaded[i] = false;
+ if(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != -1){
+ SetModelIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
+ SetModelTxdIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
+ }
}
ms_currentPedGrp = info.pedGroup;
- for(i = 0; i < NUMMODELSPERPEDGROUP; i++){
- if(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] == -1)
- break;
- RequestModel(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i], STREAMFLAGS_DEPENDENCY);
+ for(i = 0; i < MAXZONEPEDSLOADED; i++){
+ do
+ j = CGeneral::GetRandomNumberInRange(0, NUMMODELSPERPEDGROUP);
+ while(ms_bIsPedFromPedGroupLoaded[j]);
+ ms_bIsPedFromPedGroupLoaded[j] = true;
+ if(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[j] != -1)
+ RequestModel(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[j], STREAMFLAGS_DEPENDENCY);
+ }
+ ms_numPedsLoaded = MAXZONEPEDSLOADED;
+ timeBeforeNextLoad = 300;
+ }
+
+ if(timeBeforeNextLoad >= 0)
+ timeBeforeNextLoad--;
+ else{
+ // Switch a ped
+ int oldMI;
+ // Find a ped to unload
+ for(i = 0; i < NUMMODELSPERPEDGROUP; i++)
+ if(ms_bIsPedFromPedGroupLoaded[i]){
+ oldMI = CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i];
+ if(oldMI != -1 && CModelInfo::GetModelInfo(oldMI)->GetNumRefs() == 0)
+ break;
+ }
+ // And load a new one
+ if(i != NUMMODELSPERPEDGROUP || ms_numPedsLoaded < MAXZONEPEDSLOADED){
+ do
+ j = CGeneral::GetRandomNumberInRange(0, NUMMODELSPERPEDGROUP);
+ while(ms_bIsPedFromPedGroupLoaded[j]);
+ if(ms_numPedsLoaded == MAXZONEPEDSLOADED)
+ ms_bIsPedFromPedGroupLoaded[i] = false;
+ ms_bIsPedFromPedGroupLoaded[j] = true;
+ int newMI = CPopulation::ms_pPedGroups[ms_currentPedGrp].models[j];
+ if(newMI != oldMI){
+ RequestModel(newMI, STREAMFLAGS_DEPENDENCY);
+ debug("Request Ped %s\n", CModelInfo::GetModelInfo(newMI)->GetName());
+ if(ms_numPedsLoaded == MAXZONEPEDSLOADED){
+ SetModelIsDeletable(oldMI);
+ SetModelTxdIsDeletable(oldMI);
+ debug("Remove Ped %s\n", CModelInfo::GetModelInfo(oldMI)->GetName());
+ }else
+ ms_numPedsLoaded++;
+ timeBeforeNextLoad = 300;
+ }
}
}
+
RequestModel(MI_MALE01, STREAMFLAGS_DONT_REMOVE);
- //RequestModel(MI_HMOCA, STREAMFLAGS_DONT_REMOVE);
+ RequestModel(MI_TAXI_D, STREAMFLAGS_DONT_REMOVE);
gangsToLoad = 0;
gangCarsToLoad = 0;
@@ -1529,35 +1728,35 @@ CStreaming::StreamZoneModels(const CVector &pos)
if(gangsToLoad == ms_loadedGangs && gangCarsToLoad == ms_loadedGangCars)
return;
- gangsToLoad |= gangCarsToLoad;
-
- for(i = 0; i < NUM_GANGS; i++){
- bit = 1<<i;
-
- if(gangsToLoad & bit && (ms_loadedGangs & bit) == 0){
- RequestModel(CGangs::GetGangPedModel1(i), STREAMFLAGS_DEPENDENCY);
- RequestModel(CGangs::GetGangPedModel2(i), STREAMFLAGS_DEPENDENCY);
- ms_loadedGangs |= bit;
- }else if((gangsToLoad & bit) == 0 && ms_loadedGangs & bit){
- SetModelIsDeletable(CGangs::GetGangPedModel1(i));
- SetModelIsDeletable(CGangs::GetGangPedModel2(i));
- SetModelTxdIsDeletable(CGangs::GetGangPedModel1(i));
- SetModelTxdIsDeletable(CGangs::GetGangPedModel2(i));
- ms_loadedGangs &= ~bit;
- }
-
- // TODO(MIAMI): check this
- if(CGangs::GetGangVehicleModel(i) < 0)
- continue;
+ int gangModelsToload = gangsToLoad | gangCarsToLoad;
+
+ if(gangsToLoad != ms_loadedGangs || gangCarsToLoad != ms_loadedGangCars){
+ for(i = 0; i < NUM_GANGS; i++){
+ bit = 1<<i;
+
+ if(gangModelsToload & bit && (ms_loadedGangs & bit) == 0){
+ RequestModel(CGangs::GetGangPedModel1(i), STREAMFLAGS_DEPENDENCY);
+ RequestModel(CGangs::GetGangPedModel2(i), STREAMFLAGS_DEPENDENCY);
+ ms_loadedGangs |= bit;
+ }else if((gangModelsToload & bit) == 0 && ms_loadedGangs & bit){
+ SetModelIsDeletable(CGangs::GetGangPedModel1(i));
+ SetModelIsDeletable(CGangs::GetGangPedModel2(i));
+ SetModelTxdIsDeletable(CGangs::GetGangPedModel1(i));
+ SetModelTxdIsDeletable(CGangs::GetGangPedModel2(i));
+ ms_loadedGangs &= ~bit;
+ }
- if((gangCarsToLoad & bit) && (ms_loadedGangCars & bit) == 0){
- RequestModel(CGangs::GetGangVehicleModel(i), STREAMFLAGS_DEPENDENCY);
- }else if((gangCarsToLoad & bit) == 0 && ms_loadedGangCars & bit){
- SetModelIsDeletable(CGangs::GetGangVehicleModel(i));
- SetModelTxdIsDeletable(CGangs::GetGangVehicleModel(i));
+ if(CGangs::GetGangVehicleModel(i) != -1){
+ if((gangCarsToLoad & bit) && (ms_loadedGangCars & bit) == 0){
+ RequestModel(CGangs::GetGangVehicleModel(i), STREAMFLAGS_DEPENDENCY);
+ }else if((gangCarsToLoad & bit) == 0 && ms_loadedGangCars & bit){
+ SetModelIsDeletable(CGangs::GetGangVehicleModel(i));
+ SetModelTxdIsDeletable(CGangs::GetGangVehicleModel(i));
+ }
+ }
}
+ ms_loadedGangCars = gangCarsToLoad;
}
- ms_loadedGangCars = gangCarsToLoad;
}
void
@@ -1567,9 +1766,9 @@ CStreaming::RemoveCurrentZonesModels(void)
if (ms_currentPedGrp != -1)
for (i = 0; i < NUMMODELSPERPEDGROUP; i++) {
- if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] == -1)
- break;
- if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != MI_MALE01) {
+ ms_bIsPedFromPedGroupLoaded[i] = false;
+ if (CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != -1 &&
+ CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i] != MI_MALE01) {
SetModelIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
SetModelTxdIsDeletable(CPopulation::ms_pPedGroups[ms_currentPedGrp].models[i]);
}
@@ -1616,7 +1815,6 @@ CStreaming::LoadBigBuildingsWhenNeeded(void)
CCollision::LoadCollisionScreen(CGame::currLevel);
DMAudio.Service();
- // CPopulation::DealWithZoneChange is unused in VC
RemoveUnusedBigBuildings(CGame::currLevel);
RemoveUnusedBuildings(CGame::currLevel);
RemoveUnusedModelsInLoadedList();
@@ -1627,7 +1825,7 @@ CStreaming::LoadBigBuildingsWhenNeeded(void)
LoadSplash(GetLevelSplashScreen(CGame::currLevel));
CStreaming::RequestBigBuildings(CGame::currLevel, TheCamera.GetPosition());
- CStreaming::LoadAllRequestedModels(true);
+ CStreaming::LoadAllRequestedModels(false);
CGame::TidyUpMemory(true, true);
CTimer::Resume();
@@ -1757,11 +1955,8 @@ CStreaming::GetNextFileOnCd(int32 lastPosn, bool priority)
* Files larger than the buffer size can only be loaded by channel 0,
* which then uses both buffers, while channel 1 is idle.
* ms_bLoadingBigModel is set to true to indicate this state.
- *
- * TODO: two-part files
*/
-//--MIAMI: done
// Make channel read from disc
void
CStreaming::RequestModelStream(int32 ch)
@@ -1872,7 +2067,6 @@ CStreaming::RequestModelStream(int32 ch)
ms_channel[ch].numTries = 0;
}
-//--MIAMI: done
// Load data previously read from disc
bool
CStreaming::ProcessLoadingChannel(int32 ch)
@@ -1942,7 +2136,6 @@ CStreaming::ProcessLoadingChannel(int32 ch)
return true;
}
-//--MIAMI: done
void
CStreaming::RetryLoadFile(int32 ch)
{
@@ -1979,7 +2172,6 @@ CStreaming::RetryLoadFile(int32 ch)
}
}
-//--MIAMI: done
void
CStreaming::LoadRequestedModels(void)
{
@@ -2004,7 +2196,6 @@ CStreaming::LoadRequestedModels(void)
}
}
-//--MIAMI: done
void
CStreaming::LoadAllRequestedModels(bool priority)
{
@@ -2013,18 +2204,26 @@ CStreaming::LoadAllRequestedModels(bool priority)
int i;
uint32 posn, size;
+ int numRequests = 4*ms_numModelsRequested;
+
if(bInsideLoadAll)
return;
+ bInsideLoadAll = true;
+
+ if(priority)
+ numRequests = ms_numPriorityRequests;
FlushChannels();
imgOffset = GetCdImageOffset(CdStreamGetLastPosn());
- while(ms_endRequestedList.m_prev != &ms_startRequestedList){
+ while(ms_endRequestedList.m_prev != &ms_startRequestedList && numRequests > 0){
+ numRequests--;
streamId = GetNextFileOnCd(0, priority);
if(streamId == -1)
break;
ms_aInfoForModel[streamId].RemoveFromList();
+ ms_channel[0].streamIds[0] = streamId;
DecrementRef(streamId);
if(ms_aInfoForModel[streamId].GetCdPosnAndSize(posn, size)){
@@ -2058,7 +2257,6 @@ CStreaming::LoadAllRequestedModels(bool priority)
bInsideLoadAll = false;
}
-//--MIAMI: done
void
CStreaming::FlushChannels(void)
{
@@ -2080,7 +2278,6 @@ CStreaming::FlushChannels(void)
ProcessLoadingChannel(1);
}
-//--MIAMI: done
void
CStreaming::FlushRequestList(void)
{
@@ -2112,10 +2309,10 @@ CStreaming::UpdateMemoryUsed(void)
// empty
}
-#define STREAM_DIST (2*SECTOR_SIZE_X)
+#define STREAM_DIST 80.0f
void
-CStreaming::AddModelsToRequestList(const CVector &pos)
+CStreaming::AddModelsToRequestList(const CVector &pos, int32 flags)
{
float xmin, xmax, ymin, ymax;
int ixmin, ixmax, iymin, iymax;
@@ -2149,23 +2346,23 @@ CStreaming::AddModelsToRequestList(const CVector &pos)
dx = ix - CWorld::GetSectorIndexX(pos.x);
d = dx*dx + dy*dy;
sect = CWorld::GetSector(ix, iy);
- if(d <= 1){
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS]);
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS_OVERLAP]);
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_OBJECTS]);
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_DUMMIES]);
- }else if(d <= 4*4){
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS], pos.x, pos.y, xmin, ymin, xmax, ymax);
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS_OVERLAP], pos.x, pos.y, xmin, ymin, xmax, ymax);
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_OBJECTS], pos.x, pos.y, xmin, ymin, xmax, ymax);
- ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_DUMMIES], pos.x, pos.y, xmin, ymin, xmax, ymax);
+ if(d <= 0){
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS], flags);
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS_OVERLAP], flags);
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_OBJECTS], flags);
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_DUMMIES], flags);
+ }else if(d <= 3*3){
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS], pos.x, pos.y, xmin, ymin, xmax, ymax, flags);
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_BUILDINGS_OVERLAP], pos.x, pos.y, xmin, ymin, xmax, ymax, flags);
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_OBJECTS], pos.x, pos.y, xmin, ymin, xmax, ymax, flags);
+ ProcessEntitiesInSectorList(sect->m_lists[ENTITYLIST_DUMMIES], pos.x, pos.y, xmin, ymin, xmax, ymax, flags);
}
}
}
}
void
-CStreaming::ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float xmin, float ymin, float xmax, float ymax)
+CStreaming::ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float xmin, float ymin, float xmax, float ymax, int32 flags)
{
CPtrNode *node;
CEntity *e;
@@ -2179,8 +2376,7 @@ CStreaming::ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float
continue;
e->m_scanCode = CWorld::GetCurrentScanCode();
- if(!e->bStreamingDontDelete && !e->bIsSubway &&
- (!e->IsObject() || ((CObject*)e)->ObjectCreatedBy != TEMP_OBJECT)){
+ if(!e->bStreamingDontDelete && IsAreaVisible(e->m_area) && !e->bDontStream && e->bIsVisible){
CTimeModelInfo *mi = (CTimeModelInfo*)CModelInfo::GetModelInfo(e->GetModelIndex());
if (mi->GetModelType() != MITYPE_TIME || CClock::GetIsTimeInRange(mi->GetTimeOn(), mi->GetTimeOff())) {
lodDistSq = sq(mi->GetLargestLodDistance());
@@ -2189,14 +2385,14 @@ CStreaming::ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float
if(xmin < pos.x && pos.x < xmax &&
ymin < pos.y && pos.y < ymax &&
(CVector2D(x, y) - pos).MagnitudeSqr() < lodDistSq)
- RequestModel(e->GetModelIndex(), 0);
+ RequestModel(e->GetModelIndex(), flags);
}
}
}
}
void
-CStreaming::ProcessEntitiesInSectorList(CPtrList &list)
+CStreaming::ProcessEntitiesInSectorList(CPtrList &list, int32 flags)
{
CPtrNode *node;
CEntity *e;
@@ -2208,11 +2404,10 @@ CStreaming::ProcessEntitiesInSectorList(CPtrList &list)
continue;
e->m_scanCode = CWorld::GetCurrentScanCode();
- if(!e->bStreamingDontDelete && !e->bIsSubway &&
- (!e->IsObject() || ((CObject*)e)->ObjectCreatedBy != TEMP_OBJECT)){
+ if(!e->bStreamingDontDelete && IsAreaVisible(e->m_area) && !e->bDontStream && e->bIsVisible){
CTimeModelInfo *mi = (CTimeModelInfo*)CModelInfo::GetModelInfo(e->GetModelIndex());
if (mi->GetModelType() != MITYPE_TIME || CClock::GetIsTimeInRange(mi->GetTimeOn(), mi->GetTimeOff()))
- RequestModel(e->GetModelIndex(), 0);
+ RequestModel(e->GetModelIndex(), flags);
}
}
}
@@ -2407,7 +2602,7 @@ CStreaming::DeleteRwObjectsBehindCamera(size_t mem)
assert(ymin <= ymax);
// Delete a block of sectors that we know is behind the camera
- if(TheCamera.GetForward().x > 0){
+ if(TheCamera.GetForward().x > 0.0f){
// looking east
xmax = Max(ix - 2, 0);
xmin = Max(ix - 10, 0);
@@ -2428,8 +2623,13 @@ CStreaming::DeleteRwObjectsBehindCamera(size_t mem)
}
}
+
+ while(RemoveLoadedZoneModel())
+ if(ms_memoryUsed < mem)
+ return;
+
// Now a block that intersects with the camera's frustum
- if(TheCamera.GetForward().x > 0){
+ if(TheCamera.GetForward().x > 0.0f){
// looking east
xmax = Max(ix + 10, 0);
xmin = Max(ix - 2, 0);
@@ -2468,7 +2668,7 @@ CStreaming::DeleteRwObjectsBehindCamera(size_t mem)
assert(xmin <= xmax);
// Delete a block of sectors that we know is behind the camera
- if(TheCamera.GetForward().y > 0){
+ if(TheCamera.GetForward().y > 0.0f){
// looking north
ymax = Max(iy - 2, 0);
ymin = Max(iy - 10, 0);
@@ -2489,8 +2689,12 @@ CStreaming::DeleteRwObjectsBehindCamera(size_t mem)
}
}
+ while(RemoveLoadedZoneModel())
+ if(ms_memoryUsed < mem)
+ return;
+
// Now a block that intersects with the camera's frustum
- if(TheCamera.GetForward().y > 0){
+ if(TheCamera.GetForward().y > 0.0f){
// looking north
ymax = Max(iy + 10, 0);
ymin = Max(iy - 2, 0);
@@ -2511,6 +2715,10 @@ CStreaming::DeleteRwObjectsBehindCamera(size_t mem)
}
}
+// this is gone in mobile together with RemoveReferencedTxds
+// if(RemoveReferencedTxds(mem))
+// return;
+
// As last resort, delete objects from the last step more aggressively
for(x = xmin; x <= xmax; x++){
for(y = ymax; y != ymin; y -= inc){
@@ -2522,6 +2730,8 @@ CStreaming::DeleteRwObjectsBehindCamera(size_t mem)
}
}
}
+
+ while(ms_memoryUsed >= mem && RemoveLeastUsedModel(0));
}
void
@@ -2547,13 +2757,13 @@ CStreaming::DeleteRwObjectsInOverlapSectorList(CPtrList &list, int32 x, int32 y)
e = (CEntity*)node->item;
if(e->m_rwObject && !e->bStreamingDontDelete && !e->bImBeingRendered){
// Now this is pretty weird...
- if(Abs(CWorld::GetSectorIndexX(e->GetPosition().x) - x) >= 2.0f)
+ if(Abs(CWorld::GetSectorIndexX(e->GetPosition().x) - x) >= 1.6f)
// {
e->DeleteRwObject();
// return; // BUG?
// }
else // FIX?
- if(Abs(CWorld::GetSectorIndexY(e->GetPosition().y) - y) >= 2.0f)
+ if(Abs(CWorld::GetSectorIndexY(e->GetPosition().y) - y) >= 1.6f)
e->DeleteRwObject();
}
}
@@ -2568,7 +2778,8 @@ CStreaming::DeleteRwObjectsBehindCameraInSectorList(CPtrList &list, size_t mem)
for(node = list.first; node; node = node->next){
e = (CEntity*)node->item;
if(!e->bStreamingDontDelete && !e->bImBeingRendered &&
- e->m_rwObject && ms_aInfoForModel[e->GetModelIndex()].m_next){
+ e->m_rwObject && ms_aInfoForModel[e->GetModelIndex()].m_next &&
+ FindPlayerPed()->m_pCurSurface != e){
e->DeleteRwObject();
if (CModelInfo::GetModelInfo(e->GetModelIndex())->GetNumRefs() == 0) {
RemoveModel(e->GetModelIndex());
@@ -2589,7 +2800,7 @@ CStreaming::DeleteRwObjectsNotInFrustumInSectorList(CPtrList &list, size_t mem)
for(node = list.first; node; node = node->next){
e = (CEntity*)node->item;
if(!e->bStreamingDontDelete && !e->bImBeingRendered &&
- e->m_rwObject && !e->IsVisible() && ms_aInfoForModel[e->GetModelIndex()].m_next){
+ e->m_rwObject && (!e->IsVisible() || e->bOffscreen) && ms_aInfoForModel[e->GetModelIndex()].m_next){
e->DeleteRwObject();
if (CModelInfo::GetModelInfo(e->GetModelIndex())->GetNumRefs() == 0) {
RemoveModel(e->GetModelIndex());
@@ -2615,7 +2826,6 @@ CStreaming::MakeSpaceFor(int32 size)
}
}
-//--MIAMI: done
void
CStreaming::LoadScene(const CVector &pos)
{
@@ -2641,7 +2851,7 @@ CStreaming::LoadScene(const CVector &pos)
LoadAllRequestedModels(false);
InstanceBigBuildings(level, pos);
InstanceBigBuildings(LEVEL_GENERIC, pos);
- AddModelsToRequestList(pos);
+ AddModelsToRequestList(pos, STREAMFLAGS_20);
CRadar::StreamRadarSections(pos);
if (!CGame::IsInInterior()) {
@@ -2660,7 +2870,6 @@ CStreaming::LoadScene(const CVector &pos)
debug("End load scene\n");
}
-//--MIAMI: done
void
CStreaming::LoadSceneCollision(const CVector &pos)
{
@@ -2697,7 +2906,7 @@ void
CStreaming::UpdateForAnimViewer(void)
{
if (CStreaming::ms_channelError == -1) {
- CStreaming::AddModelsToRequestList(CVector(0.0f, 0.0f, 0.0f));
+ CStreaming::AddModelsToRequestList(CVector(0.0f, 0.0f, 0.0f), 0);
CStreaming::LoadRequestedModels();
// original modifier was %d
sprintf(gString, "Requested %d, memory size %zuK\n", CStreaming::ms_numModelsRequested, 2 * CStreaming::ms_memoryUsed);
diff --git a/src/core/Streaming.h b/src/core/Streaming.h
index 569c06d8..dd85ce97 100644
--- a/src/core/Streaming.h
+++ b/src/core/Streaming.h
@@ -93,6 +93,7 @@ public:
static CStreamingChannel ms_channel[2];
static int32 ms_channelError;
static int32 ms_numVehiclesLoaded;
+ static int32 ms_numPedsLoaded;
static int32 ms_vehiclesLoaded[MAXVEHICLESLOADED];
static int32 ms_lastVehicleDeleted;
static bool ms_bIsPedFromPedGroupLoaded[NUMMODELSPERPEDGROUP];
@@ -110,6 +111,7 @@ public:
static void Init(void);
static void Init2(void);
+ static void ReInit(void);
static void Shutdown(void);
static void Update(void);
static void LoadCdDirectory(void);
@@ -149,6 +151,7 @@ public:
static void RemoveAnim(int32 id) { RemoveModel(id + STREAM_OFFSET_ANIM); }
static void RemoveUnusedBuildings(eLevelName level);
static void RemoveBuildings(eLevelName level);
+ static void RemoveBuildingsNotInArea(int32 area);
static void RemoveUnusedBigBuildings(eLevelName level);
static void RemoveIslandsNotUsed(eLevelName level);
static void RemoveBigBuildings(eLevelName level);
@@ -156,6 +159,7 @@ public:
static bool RemoveLeastUsedModel(uint32 excludeMask);
static void RemoveAllUnusedModels(void);
static void RemoveUnusedModelsInLoadedList(void);
+ static bool RemoveLoadedZoneModel(void);
static int32 GetAvailableVehicleSlot(void);
static bool IsTxdUsedByRequestedModels(int32 txdId);
static bool AreAnimsUsedByRequestedModels(int32 animId);
@@ -187,9 +191,9 @@ public:
static void IHaveUsedStreamingMemory(void);
static void UpdateMemoryUsed(void);
- static void AddModelsToRequestList(const CVector &pos);
- static void ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float xmin, float ymin, float xmax, float ymax);
- static void ProcessEntitiesInSectorList(CPtrList &list);
+ static void AddModelsToRequestList(const CVector &pos, int32 flags);
+ static void ProcessEntitiesInSectorList(CPtrList &list, float x, float y, float xmin, float ymin, float xmax, float ymax, int32 flags);
+ static void ProcessEntitiesInSectorList(CPtrList &list, int32 flags);
static void DeleteFarAwayRwObjects(const CVector &pos);
static void DeleteAllRwObjects(void);
static void DeleteRwObjectsAfterDeath(const CVector &pos);
diff --git a/src/core/SurfaceTable.cpp b/src/core/SurfaceTable.cpp
index 9076a9a6..56cea203 100644
--- a/src/core/SurfaceTable.cpp
+++ b/src/core/SurfaceTable.cpp
@@ -6,6 +6,8 @@
#include "Collision.h"
#include "SurfaceTable.h"
+//--MIAMI: file done
+
float CSurfaceTable::ms_aAdhesiveLimitTable[NUMADHESIVEGROUPS][NUMADHESIVEGROUPS];
void
@@ -148,3 +150,9 @@ CSurfaceTable::GetAdhesiveLimit(CColPoint &colpoint)
{
return ms_aAdhesiveLimitTable[GetAdhesionGroup(colpoint.surfaceB)][GetAdhesionGroup(colpoint.surfaceA)];
}
+
+bool
+CSurfaceTable::IsSoftLanding(uint8 surf)
+{
+ return surf == SURFACE_GRASS || surf == SURFACE_SAND || surf == SURFACE_SAND_BEACH;
+}
diff --git a/src/core/SurfaceTable.h b/src/core/SurfaceTable.h
index 359ebd5c..cd08c843 100644
--- a/src/core/SurfaceTable.h
+++ b/src/core/SurfaceTable.h
@@ -96,4 +96,5 @@ public:
static int GetAdhesionGroup(uint8 surfaceType);
static float GetWetMultiplier(uint8 surfaceType);
static float GetAdhesiveLimit(CColPoint &colpoint);
+ static bool IsSoftLanding(uint8 surf);
};
diff --git a/src/core/Wanted.cpp b/src/core/Wanted.cpp
index c70a3ab5..f5ea6e53 100644
--- a/src/core/Wanted.cpp
+++ b/src/core/Wanted.cpp
@@ -10,6 +10,7 @@
#include "CopPed.h"
#include "Wanted.h"
#include "General.h"
+#include "Stats.h"
int32 CWanted::MaximumWantedLevel = 6;
int32 CWanted::nMaximumWantedLevel = 9600;
@@ -308,7 +309,6 @@ CWanted::ReportCrimeNow(eCrimeType type, const CVector &coors, bool policeDoesnt
UpdateWantedLevel();
}
-// TODO(Miami): Stats
void
CWanted::UpdateWantedLevel()
{
@@ -318,36 +318,44 @@ CWanted::UpdateWantedLevel()
m_nChaos = nMaximumWantedLevel;
if (m_nChaos >= 0 && m_nChaos < 50) {
+ if (m_nWantedLevel == 1)
+ ++CStats::WantedStarsEvaded;
m_nWantedLevel = 0;
m_MaximumLawEnforcerVehicles = 0;
m_MaxCops = 0;
m_RoadblockDensity = 0;
} else if (m_nChaos >= 50 && m_nChaos < 180) {
+ CStats::WantedStarsAttained += 1 - m_nWantedLevel;
m_nWantedLevel = 1;
m_MaximumLawEnforcerVehicles = 1;
m_MaxCops = 1;
m_RoadblockDensity = 0;
} else if (m_nChaos >= 180 && m_nChaos < 550) {
+ CStats::WantedStarsAttained += 2 - m_nWantedLevel;
m_nWantedLevel = 2;
m_MaximumLawEnforcerVehicles = 2;
m_MaxCops = 3;
m_RoadblockDensity = 0;
} else if (m_nChaos >= 550 && m_nChaos < 1200) {
+ CStats::WantedStarsAttained += 3 - m_nWantedLevel;
m_nWantedLevel = 3;
m_MaximumLawEnforcerVehicles = 2;
m_MaxCops = 4;
m_RoadblockDensity = 12;
} else if (m_nChaos >= 1200 && m_nChaos < 2400) {
+ CStats::WantedStarsAttained += 4 - m_nWantedLevel;
m_nWantedLevel = 4;
m_MaximumLawEnforcerVehicles = 2;
m_MaxCops = 6;
m_RoadblockDensity = 18;
} else if (m_nChaos >= 2400 && m_nChaos < 4800) {
+ CStats::WantedStarsAttained += 5 - m_nWantedLevel;
m_nWantedLevel = 5;
m_MaximumLawEnforcerVehicles = 3;
m_MaxCops = 8;
m_RoadblockDensity = 24;
} else if (m_nChaos >= 4800) {
+ CStats::WantedStarsAttained += 6 - m_nWantedLevel;
m_nWantedLevel = 6;
m_MaximumLawEnforcerVehicles = 3;
m_MaxCops = 10;
@@ -494,8 +502,7 @@ CWanted::UpdateCrimesQ(void)
void
CWanted::Suspend(void)
{
- // TODO(Miami): Stats
- // dwStarsEvaded += m_nWantedLevel;
+ CStats::WantedStarsEvaded += m_nWantedLevel;
m_nMinChaos = m_nChaos;
m_nMinWantedLevel = m_nWantedLevel;
m_nLastTimeSuspended = CTimer::GetTimeInMilliseconds();
diff --git a/src/core/ZoneCull.cpp b/src/core/ZoneCull.cpp
index 729cc35d..69c7a796 100644
--- a/src/core/ZoneCull.cpp
+++ b/src/core/ZoneCull.cpp
@@ -11,6 +11,8 @@
#include "ZoneCull.h"
#include "Zones.h"
+//--MIAMI: done
+
int32 CCullZones::NumAttributeZones;
CAttributeZone CCullZones::aAttributeZones[NUMATTRIBZONES];
@@ -18,6 +20,7 @@ int32 CCullZones::CurrentWantedLevelDrop_Player;
int32 CCullZones::CurrentFlags_Camera;
int32 CCullZones::CurrentFlags_Player;
bool CCullZones::bCurrentSubwayIsInvisible;
+bool CCullZones::bAtBeachForAudio;
void
CCullZones::Init(void)
@@ -37,6 +40,7 @@ CCullZones::Update(void)
switch(CTimer::GetFrameCounter() & 7){
case 0:
case 4:
+ UpdateAtBeachForAudio();
break;
case 2:
@@ -57,6 +61,27 @@ CCullZones::Update(void)
}
}
+// TODO? put somewhere else?
+bool
+IsPointWithinArbitraryArea(float px, float py, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
+{
+ if((px-x1)*(x2-x1) - (py-y1)*(y2-y1) < 0.0f) return false;
+ if((px-x2)*(x3-x2) - (py-y2)*(y3-y2) < 0.0f) return false;
+ if((px-x3)*(x4-x3) - (py-y3)*(y4-y3) < 0.0f) return false;
+ if((px-x4)*(x1-x4) - (py-y4)*(y1-y4) < 0.0f) return false;
+ return true;
+}
+
+void
+CCullZones::UpdateAtBeachForAudio(void)
+{
+ bAtBeachForAudio = IsPointWithinArbitraryArea(TheCamera.GetPosition().x, TheCamera.GetPosition().y,
+ 400.0f, -1644.4f,
+ 751.9f, 1267.8f,
+ 971.9f, 1216.2f,
+ 840.0f, -1744.0f);
+}
+
void
CCullZones::ForceCullZoneCoors(CVector coors)
{
diff --git a/src/core/ZoneCull.h b/src/core/ZoneCull.h
index aae06ca0..8200b09a 100644
--- a/src/core/ZoneCull.h
+++ b/src/core/ZoneCull.h
@@ -10,8 +10,9 @@ enum eZoneAttribs
ATTRZONE_NOTCULLZONE = 0x20,
ATTRZONE_DOINEEDCOLLISION = 0x40,
ATTRZONE_SUBWAYVISIBLE = 0x80,
-
- ATTRZONE_WATERFUDGE = 0x400,
+ ATTRZONE_POLICEABANDONCARS = 0x100,
+ ATTRZONE_ROOMFORAUDIO = 0x200,
+ ATTRZONE_WATERFUDGE = 0x400,
};
struct CAttributeZone
@@ -36,9 +37,11 @@ public:
static int32 CurrentFlags_Camera;
static int32 CurrentFlags_Player;
static bool bCurrentSubwayIsInvisible;
+ static bool bAtBeachForAudio;
static void Init(void);
static void Update(void);
+ static void UpdateAtBeachForAudio(void);
static void ForceCullZoneCoors(CVector coors);
static int32 FindAttributesForCoors(CVector coors, int32 *wantedLevel);
static CAttributeZone *FindZoneWithStairsAttributeForPlayer(void);
@@ -55,9 +58,8 @@ public:
static bool DoINeedToLoadCollision(void) { return (CurrentFlags_Player & ATTRZONE_DOINEEDCOLLISION) != 0; }
static bool PlayerNoRain(void) { return (CurrentFlags_Player & ATTRZONE_NORAIN) != 0; }
static bool CamNoRain(void) { return (CurrentFlags_Camera & ATTRZONE_NORAIN) != 0; }
+ static bool PoliceAbandonCars(void) { return (CurrentFlags_Camera & ATTRZONE_POLICEABANDONCARS) != 0; }
+ static bool InRoomForAudio(void) { return (CurrentFlags_Camera & ATTRZONE_ROOMFORAUDIO) != 0; }
static bool WaterFudge(void) { return (CurrentFlags_Camera & ATTRZONE_WATERFUDGE) != 0; }
static int32 GetWantedLevelDrop(void) { return CurrentWantedLevelDrop_Player; }
-
- //--MIAMI: TODO
- static bool PoliceAbandonCars(void) { return false; }
};
diff --git a/src/core/Zones.cpp b/src/core/Zones.cpp
index 96f5dc62..a255fb7d 100644
--- a/src/core/Zones.cpp
+++ b/src/core/Zones.cpp
@@ -9,6 +9,8 @@
#include "World.h"
#include "Timer.h"
+//--MIAMI: file almost done (loading/saving will perhaps stay different)
+
eLevelName CTheZones::m_CurrLevel;
int16 CTheZones::FindIndex;
@@ -26,14 +28,12 @@ CZoneInfo CTheZones::ZoneInfoArray[2*NUMINFOZONES];
#define SWAPF(a, b) { float t; t = a; a = b; b = t; }
-//--MIAMI: done
wchar*
CZone::GetTranslatedName(void)
{
return TheText.Get(name);
}
-//--MIAMI: done
void
CTheZones::Init(void)
{
@@ -124,7 +124,6 @@ CTheZones::Init(void)
MapZoneArray[0].level = LEVEL_GENERIC;
}
-//--MIAMI: done
void
CTheZones::Update(void)
{
@@ -137,7 +136,6 @@ CTheZones::Update(void)
m_CurrLevel = GetLevelFromPosition(&pos);
}
-//--MIAMI: done
void
CTheZones::CreateZone(char *name, eZoneType type,
float minx, float miny, float minz,
@@ -204,7 +202,6 @@ CTheZones::CreateZone(char *name, eZoneType type,
}
}
-//--MIAMI: done
void
CTheZones::PostZoneCreation(void)
{
@@ -214,7 +211,6 @@ CTheZones::PostZoneCreation(void)
InitialiseAudioZoneArray();
}
-//--MIAMI: done, but does nothing
void
CTheZones::CheckZonesForOverlap(void)
{
@@ -231,7 +227,6 @@ CTheZones::CheckZonesForOverlap(void)
}
}
-//--MIAMI: done
void
CTheZones::InsertZoneIntoZoneHierarchy(CZone *zone)
{
@@ -241,7 +236,6 @@ CTheZones::InsertZoneIntoZoneHierarchy(CZone *zone)
InsertZoneIntoZoneHierRecursive(zone, &NavigationZoneArray[0]);
}
-//--MIAMI: done
bool
CTheZones::InsertZoneIntoZoneHierRecursive(CZone *inner, CZone *outer)
{
@@ -285,7 +279,6 @@ CTheZones::InsertZoneIntoZoneHierRecursive(CZone *inner, CZone *outer)
return true;
}
-//--MIAMI: done
bool
CTheZones::ZoneIsEntirelyContainedWithinOtherZone(CZone *inner, CZone *outer)
{
@@ -310,7 +303,6 @@ CTheZones::ZoneIsEntirelyContainedWithinOtherZone(CZone *inner, CZone *outer)
return true;
}
-//--MIAMI: done
bool
CTheZones::PointLiesWithinZone(const CVector *v, CZone *zone)
{
@@ -319,7 +311,6 @@ CTheZones::PointLiesWithinZone(const CVector *v, CZone *zone)
zone->minz <= v->z && v->z <= zone->maxz;
}
-//--MIAMI: done
eLevelName
CTheZones::GetLevelFromPosition(CVector const *v)
{
@@ -333,7 +324,6 @@ CTheZones::GetLevelFromPosition(CVector const *v)
return MapZoneArray[0].level;
}
-//--MIAMI: done
CZone*
CTheZones::FindInformationZoneForPosition(const CVector *v)
{
@@ -347,7 +337,6 @@ CTheZones::FindInformationZoneForPosition(const CVector *v)
return &InfoZoneArray[0];
}
-//--MIAMI: done
CZone*
CTheZones::FindSmallestNavigationZoneForPosition(const CVector *v, bool findDefault, bool findNavig)
{
@@ -370,7 +359,6 @@ CTheZones::FindSmallestNavigationZoneForPosition(const CVector *v, bool findDefa
return best;
}
-//--MIAMI: done
int16
CTheZones::FindZoneByLabelAndReturnIndex(char *name, eZoneType type)
{
@@ -400,7 +388,6 @@ CTheZones::FindZoneByLabelAndReturnIndex(char *name, eZoneType type)
return -1;
}
-//--MIAMI: done
int16
CTheZones::FindNextZoneByLabelAndReturnIndex(char *name, eZoneType type)
{
@@ -431,7 +418,6 @@ CTheZones::FindNextZoneByLabelAndReturnIndex(char *name, eZoneType type)
return -1;
}
-//--MIAMI: done
CZoneInfo*
CTheZones::GetZoneInfo(const CVector *v, uint8 day)
{
@@ -556,7 +542,7 @@ CTheZones::SetZonePedInfo(uint16 zoneid, uint8 day, int16 pedDensity,
info->gangPedThreshold[8] = info->gangPedThreshold[7];
}
-//--MIAMI: done, unused
+//--MIAMI: unused
void
CTheZones::SetCarDensity(uint16 zoneid, uint8 day, uint16 cardensity)
{
@@ -565,7 +551,7 @@ CTheZones::SetCarDensity(uint16 zoneid, uint8 day, uint16 cardensity)
ZoneInfoArray[day ? zone->zoneinfoDay : zone->zoneinfoNight].carDensity = cardensity;
}
-//--MIAMI: done, unused
+//--MIAMI: unused
void
CTheZones::SetPedDensity(uint16 zoneid, uint8 day, uint16 peddensity)
{
@@ -574,7 +560,6 @@ CTheZones::SetPedDensity(uint16 zoneid, uint8 day, uint16 peddensity)
ZoneInfoArray[day ? zone->zoneinfoDay : zone->zoneinfoNight].pedDensity = peddensity;
}
-//--MIAMI: done
void
CTheZones::SetPedGroup(uint16 zoneid, uint8 day, uint16 pedgroup)
{
@@ -583,7 +568,6 @@ CTheZones::SetPedGroup(uint16 zoneid, uint8 day, uint16 pedgroup)
ZoneInfoArray[day ? zone->zoneinfoDay : zone->zoneinfoNight].pedGroup = pedgroup;
}
-//--MIAMI: done
int16
CTheZones::FindAudioZone(CVector *pos)
{
@@ -595,7 +579,6 @@ CTheZones::FindAudioZone(CVector *pos)
return -1;
}
-//--MIAMI: done
void
CTheZones::AddZoneToAudioZoneArray(CZone *zone)
{
@@ -613,7 +596,6 @@ CTheZones::AddZoneToAudioZoneArray(CZone *zone)
AudioZoneArray[NumberOfAudioZones++] = z;
}
-//--MIAMI: done
void
CTheZones::InitialiseAudioZoneArray(void)
{
@@ -645,7 +627,6 @@ CTheZones::InitialiseAudioZoneArray(void)
}
}
-//--MIAMI: TODO
void
CTheZones::SaveAllZones(uint8 *buffer, uint32 *size)
{
@@ -666,7 +647,7 @@ CTheZones::SaveAllZones(uint8 *buffer, uint32 *size)
WriteSaveBuf(buffer, FindIndex);
WriteSaveBuf(buffer, (int16)0); // padding
-// TODO(MIAMI): implement SaveOneZone
+// TODO(MIAMI) ? implement SaveOneZone
for(i = 0; i < ARRAY_SIZE(NavigationZoneArray); i++){
CZone *zone = WriteSaveBuf(buffer, NavigationZoneArray[i]);
zone->child = (CZone*)GetIndexForZonePointer(NavigationZoneArray[i].child);
@@ -676,6 +657,14 @@ CTheZones::SaveAllZones(uint8 *buffer, uint32 *size)
for(i = 0; i < ARRAY_SIZE(InfoZoneArray); i++){
CZone *zone = WriteSaveBuf(buffer, InfoZoneArray[i]);
+ /*
+ The call of GetIndexForZonePointer is wrong, as it is
+ meant for a different array, but the game doesn't brake
+ if those fields are nil. Let's make sure they are.
+ */
+ assert(InfoZoneArray[i].child == nil);
+ assert(InfoZoneArray[i].parent == nil);
+ assert(InfoZoneArray[i].next == nil);
zone->child = (CZone*)GetIndexForZonePointer(InfoZoneArray[i].child);
zone->parent = (CZone*)GetIndexForZonePointer(InfoZoneArray[i].parent);
zone->next = (CZone*)GetIndexForZonePointer(InfoZoneArray[i].next);
@@ -691,11 +680,7 @@ CTheZones::SaveAllZones(uint8 *buffer, uint32 *size)
for(i = 0; i < ARRAY_SIZE(MapZoneArray); i++) {
CZone* zone = WriteSaveBuf(buffer, MapZoneArray[i]);
- /*
- The call of GetIndexForZonePointer is wrong, as it is
- meant for a different array, but the game doesn't brake
- if those fields are nil. Let's make sure they are.
- */
+ // see above
assert(MapZoneArray[i].child == nil);
assert(MapZoneArray[i].parent == nil);
assert(MapZoneArray[i].next == nil);
@@ -713,7 +698,6 @@ CTheZones::SaveAllZones(uint8 *buffer, uint32 *size)
VALIDATESAVEBUF(*size)
}
-//--MIAMI: TODO
void
CTheZones::LoadAllZones(uint8 *buffer, uint32 size)
{
@@ -726,7 +710,7 @@ CTheZones::LoadAllZones(uint8 *buffer, uint32 size)
FindIndex = ReadSaveBuf<int16>(buffer);
ReadSaveBuf<int16>(buffer);
-// TODO(MIAMI): implement LoadOneZone
+// TODO(MIAMI) ? implement LoadOneZone
for(i = 0; i < ARRAY_SIZE(NavigationZoneArray); i++){
NavigationZoneArray[i] = ReadSaveBuf<CZone>(buffer);
@@ -738,6 +722,14 @@ CTheZones::LoadAllZones(uint8 *buffer, uint32 size)
for(i = 0; i < ARRAY_SIZE(InfoZoneArray); i++){
InfoZoneArray[i] = ReadSaveBuf<CZone>(buffer);
+ /*
+ The call of GetPointerForZoneIndex is wrong, as it is
+ meant for a different array, but the game doesn't brake
+ if save data stored is -1.
+ */
+ InfoZoneArray[i].child = GetPointerForZoneIndex((uintptr)InfoZoneArray[i].child);
+ InfoZoneArray[i].parent = GetPointerForZoneIndex((uintptr)InfoZoneArray[i].parent);
+ InfoZoneArray[i].next = GetPointerForZoneIndex((uintptr)InfoZoneArray[i].next);
InfoZoneArray[i].child = GetPointerForZoneIndex((uintptr)InfoZoneArray[i].child);
InfoZoneArray[i].parent = GetPointerForZoneIndex((uintptr)InfoZoneArray[i].parent);
InfoZoneArray[i].next = GetPointerForZoneIndex((uintptr)InfoZoneArray[i].next);
@@ -753,11 +745,7 @@ CTheZones::LoadAllZones(uint8 *buffer, uint32 size)
for(i = 0; i < ARRAY_SIZE(MapZoneArray); i++){
MapZoneArray[i] = ReadSaveBuf<CZone>(buffer);
- /*
- The call of GetPointerForZoneIndex is wrong, as it is
- meant for a different array, but the game doesn't brake
- if save data stored is -1.
- */
+ // see above
MapZoneArray[i].child = GetPointerForZoneIndex((uintptr)MapZoneArray[i].child);
MapZoneArray[i].parent = GetPointerForZoneIndex((uintptr)MapZoneArray[i].parent);
MapZoneArray[i].next = GetPointerForZoneIndex((uintptr)MapZoneArray[i].next);
diff --git a/src/core/Zones.h b/src/core/Zones.h
index 8d5af182..92e292b8 100644
--- a/src/core/Zones.h
+++ b/src/core/Zones.h
@@ -103,8 +103,8 @@ public:
static void SetPedDensity(uint16 zoneid, uint8 day, uint16 peddensity);
static void SetPedGroup(uint16 zoneid, uint8 day, uint16 pedgroup);
static int16 FindAudioZone(CVector *pos);
- static CZone *GetPointerForZoneIndex(int32 i) { return i == -1 ? nil : &InfoZoneArray[i]; }
- static int32 GetIndexForZonePointer(CZone *zone) { return zone == nil ? -1 : zone - InfoZoneArray; }
+ static CZone *GetPointerForZoneIndex(int32 i) { return i == -1 ? nil : &NavigationZoneArray[i]; }
+ static int32 GetIndexForZonePointer(CZone *zone) { return zone == nil ? -1 : zone - NavigationZoneArray; }
static void AddZoneToAudioZoneArray(CZone *zone);
static void InitialiseAudioZoneArray(void);
static void SaveAllZones(uint8 *buffer, uint32 *length);
diff --git a/src/core/config.h b/src/core/config.h
index 469f9017..62c3fa73 100644
--- a/src/core/config.h
+++ b/src/core/config.h
@@ -27,16 +27,16 @@ enum Config {
// Pool sizes
NUMPTRNODES = 50000,
- NUMENTRYINFOS = 5400, // only 3200 in VC???
+ NUMENTRYINFOS = 3200,
NUMPEDS = 140,
NUMVEHICLES = 110,
NUMBUILDINGS = 7000,
- NUMTREADABLES = 1214, // 1 in VC
+ NUMTREADABLES = 1,
NUMOBJECTS = 460,
- NUMDUMMIES = 2802, // 2340 in VC
- NUMAUDIOSCRIPTOBJECTS = 256, // 192 in VC
+ NUMDUMMIES = 2340,
+ NUMAUDIOSCRIPTOBJECTS = 192,
+ NUMCOLMODELS = 4400,
NUMCUTSCENEOBJECTS = 50, // does not exist in VC
- // TODO(MIAMI): colmodel pool
NUMANIMBLOCKS = 35,
NUMANIMATIONS = 450,
@@ -113,6 +113,7 @@ enum Config {
NUMPHONES = 50,
NUMPEDGROUPS = 67,
NUMMODELSPERPEDGROUP = 16,
+ MAXZONEPEDSLOADED = 8,
NUMSHOTINFOS = 100,
NUMROADBLOCKS = 300,
@@ -224,7 +225,15 @@ enum Config {
//#define DISABLE_LOADING_SCREEN // disable the loading screen which vastly improves the loading time
//#define NO_ISLAND_LOADING // disable loadscreen between islands via loading all island data at once, consumes more memory and CPU
//#define USE_TEXTURE_POOL
-#define CUTSCENE_BORDERS_SWITCH
+//#define CUTSCENE_BORDERS_SWITCH
+//#define EXTENDED_COLOURFILTER // more options for colour filter (replaces mblur)
+//#define EXTENDED_PIPELINES // custom render pipelines (includes Neo)
+//#define MULTISAMPLING // adds MSAA option TODO
+
+#ifdef LIBRW
+// these are not supported with librw yet
+# undef MULTISAMPLING
+#endif
// Water & Particle
#define PC_PARTICLE
@@ -244,6 +253,7 @@ enum Config {
#define ALLCARSHELI_CHEAT
#define ALT_DODO_CHEAT
#define REGISTER_START_BUTTON
+//#define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls
// Hud, frontend and radar
#define HUD_ENHANCEMENTS // Adjusts some aspects to make the HUD look/behave a little bit better.
@@ -254,12 +264,13 @@ enum Config {
#ifndef PC_MENU
# define PS2_MENU
//# define PS2_MENU_USEALLPAGEICONS
-#else
//# define PS2_LIKE_MENU // An effort to recreate PS2 menu, cycling through tabs, different bg etc.
+#else
# define MAP_ENHANCEMENTS // Adding waypoint etc.
# define TRIANGLE_BACK_BUTTON
//# define CIRCLE_BACK_BUTTON
//#define CUSTOM_FRONTEND_OPTIONS
+# define GRAPHICS_MENU_OPTIONS
#define LEGACY_MENU_OPTIONS
#define MUCH_SHORTER_OUTRO_SCREEN
diff --git a/src/core/main.cpp b/src/core/main.cpp
index d4ef8c4b..0009048d 100644
--- a/src/core/main.cpp
+++ b/src/core/main.cpp
@@ -2,6 +2,10 @@
#include "rpmatfx.h"
#include "rphanim.h"
#include "rpskin.h"
+#include "rtbmp.h"
+#ifndef LIBRW
+#include "rpanisot.h"
+#endif
#include "main.h"
#include "CdStream.h"
@@ -61,8 +65,10 @@
#include "MemoryCard.h"
#include "SceneEdit.h"
#include "debugmenu.h"
+#include "Clock.h"
#include "Occlusion.h"
#include "Ropes.h"
+#include "custompipes.h"
GlobalScene Scene;
@@ -279,6 +285,28 @@ DoFade(void)
}
}
+bool
+RwGrabScreen(RwCamera *camera, RwChar *filename)
+{
+ char temp[255];
+ RwImage *pImage = RsGrabScreen(camera);
+ bool result = true;
+
+ if (pImage == nil)
+ return false;
+
+ strcpy(temp, CFileMgr::GetRootDirName());
+ strcat(temp, filename);
+
+ if (RtBMPImageWrite(pImage, &temp[0]) == nil)
+ result = false;
+ RwImageDestroy(pImage);
+ return result;
+}
+
+#define TILE_WIDTH 576
+#define TILE_HEIGHT 432
+
void
DoRWStuffEndOfFrame(void)
{
@@ -287,6 +315,20 @@ DoRWStuffEndOfFrame(void)
FlushObrsPrintfs();
RwCameraEndUpdate(Scene.camera);
RsCameraShowRaster(Scene.camera);
+#ifndef MASTER
+ char s[48];
+ if (CPad::GetPad(1)->GetLeftShockJustDown()) {
+ // try using both controllers for this thing... crazy bastards
+ if (CPad::GetPad(0)->GetRightStickY() > 0) {
+ sprintf(s, "screen%d%d.ras", CClock::ms_nGameClockHours, CClock::ms_nGameClockMinutes);
+ // TODO
+ //RtTileRender(Scene.camera, TILE_WIDTH * 2, TILE_HEIGHT * 2, TILE_WIDTH, TILE_HEIGHT, &NewTileRendererCB, nil, s);
+ } else {
+ sprintf(s, "screen%d%d.bmp", CClock::ms_nGameClockHours, CClock::ms_nGameClockMinutes);
+ RwGrabScreen(Scene.camera, s);
+ }
+ }
+#endif // !MASTER
}
static RwBool
@@ -345,6 +387,12 @@ PluginAttach(void)
return FALSE;
}
+#ifndef LIBRW
+ RpAnisotPluginAttach();
+#endif
+#ifdef EXTENDED_PIPELINES
+ CustomPipes::CustomPipeRegister();
+#endif
return TRUE;
}
@@ -358,7 +406,11 @@ Initialise3D(void *param)
DebugMenuInit();
DebugMenuPopulate();
#endif // !DEBUGMENU
- return CGame::InitialiseRenderWare();
+ bool ret = CGame::InitialiseRenderWare();
+#ifdef EXTENDED_PIPELINES
+ CustomPipes::CustomPipeInit(); // need Scene.world for this
+#endif
+ return ret;
}
return (FALSE);
@@ -367,6 +419,9 @@ Initialise3D(void *param)
static void
Terminate3D(void)
{
+#ifdef EXTENDED_PIPELINES
+ CustomPipes::CustomPipeShutdown();
+#endif
CGame::ShutdownRenderWare();
#ifdef DEBUGMENU
DebugMenuShutdown();
@@ -554,17 +609,13 @@ LoadingScreen(const char *str1, const char *str2, const char *splashscreen)
}
}
+//--MIAMI: done
void
LoadingIslandScreen(const char *levelName)
{
CSprite2d *splash;
- wchar *name;
- char str[100];
- wchar wstr[80];
- CRGBA col;
splash = LoadSplash(nil);
- name = TheText.Get(levelName);
if(!DoRWStuffStartOfFrame(0, 0, 0, 0, 0, 0, 255))
return;
@@ -572,26 +623,10 @@ LoadingIslandScreen(const char *levelName)
CSprite2d::InitPerFrame();
CFont::InitPerFrame();
DefinedState();
- col = CRGBA(255, 255, 255, 255);
+ CRGBA col = CRGBA(255, 255, 255, 255);
+ CRGBA col2 = CRGBA(0, 0, 0, 255);
+ CSprite2d::DrawRect(CRect(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT), col2);
splash->Draw(CRect(0.0f, 0.0f, SCREEN_WIDTH, SCREEN_HEIGHT), col, col, col, col);
- CFont::SetBackgroundOff();
- CFont::SetScale(1.5f, 1.5f);
- CFont::SetPropOn();
- CFont::SetRightJustifyOn();
- CFont::SetRightJustifyWrap(150.0f);
- CFont::SetFontStyle(FONT_HEADING);
- sprintf(str, "WELCOME TO");
- AsciiToUnicode(str, wstr);
- CFont::SetDropColor(CRGBA(0, 0, 0, 255));
- CFont::SetDropShadowPosition(3);
- CFont::SetColor(CRGBA(243, 237, 71, 255));
- CFont::SetScale(SCREEN_STRETCH_X(1.2f), SCREEN_STRETCH_Y(1.2f));
- CFont::PrintString(SCREEN_WIDTH - 20, SCREEN_STRETCH_FROM_BOTTOM(110.0f), TheText.Get("WELCOME"));
- TextCopy(wstr, name);
- TheText.UpperCase(wstr);
- CFont::SetColor(CRGBA(243, 237, 71, 255));
- CFont::SetScale(SCREEN_STRETCH_X(1.2f), SCREEN_STRETCH_Y(1.2f));
- CFont::PrintString(SCREEN_WIDTH-20, SCREEN_STRETCH_FROM_BOTTOM(80.0f), wstr);
CFont::DrawFonts();
DoRWStuffEndOfFrame();
}
@@ -852,7 +887,7 @@ RenderScene(void)
CRenderer::RenderFadingInEntities();
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
CWeather::RenderRainStreaks();
- // CCoronas::RenderSunReflection
+ CCoronas::RenderSunReflection();
}
void
@@ -1065,6 +1100,12 @@ Idle(void *arg)
tbEndTimer("PreRender");
#endif
+#ifdef FIX_BUGS
+ // This has to be done BEFORE RwCameraBeginUpdate
+ RwCameraSetFarClipPlane(Scene.camera, CTimeCycle::GetFarClip());
+ RwCameraSetFogDistance(Scene.camera, CTimeCycle::GetFogStart());
+#endif
+
if(CWeather::LightningFlash && !CCullZones::CamNoRain()){
if(!DoRWStuffStartOfFrame_Horizon(255, 255, 255, 255, 255, 255, 255))
return;
@@ -1077,9 +1118,10 @@ Idle(void *arg)
DefinedState();
- // BUG. This has to be done BEFORE RwCameraBeginUpdate
+#ifndef FIX_BUGS
RwCameraSetFarClipPlane(Scene.camera, CTimeCycle::GetFarClip());
RwCameraSetFogDistance(Scene.camera, CTimeCycle::GetFogStart());
+#endif
#ifdef TIMEBARS
tbStartTimer(0, "RenderScene");
@@ -1088,6 +1130,11 @@ Idle(void *arg)
#ifdef TIMEBARS
tbEndTimer("RenderScene");
#endif
+
+#ifdef EXTENDED_PIPELINES
+ CustomPipes::EnvMapRender();
+#endif
+
RenderDebugShit();
RenderEffects();
diff --git a/src/core/main.h b/src/core/main.h
index 9ad4ed1c..96fbef05 100644
--- a/src/core/main.h
+++ b/src/core/main.h
@@ -20,6 +20,9 @@ extern bool gbShowTimebars;
class CSprite2d;
+bool DoRWStuffStartOfFrame(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
+bool DoRWStuffStartOfFrame_Horizon(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
+void DoRWStuffEndOfFrame(void);
void InitialiseGame(void);
void LoadingScreen(const char *str1, const char *str2, const char *splashscreen);
void LoadingIslandScreen(const char *levelName);
diff --git a/src/core/re3.cpp b/src/core/re3.cpp
index 10f0e032..ce34dc0f 100644
--- a/src/core/re3.cpp
+++ b/src/core/re3.cpp
@@ -7,6 +7,7 @@
#include "Credits.h"
#include "Camera.h"
#include "Weather.h"
+#include "Timecycle.h"
#include "Clock.h"
#include "World.h"
#include "Vehicle.h"
@@ -32,6 +33,9 @@
#include "WaterLevel.h"
#include "main.h"
#include "Script.h"
+#include "MBlur.h"
+#include "postfx.h"
+#include "custompipes.h"
#ifndef _WIN32
#include "assert.h"
@@ -71,110 +75,6 @@ mysrand(unsigned int seed)
myrand_seed = seed;
}
-#ifdef CUSTOM_FRONTEND_OPTIONS
-#include "frontendoption.h"
-#include "platform.h"
-
-void ReloadFrontendOptions(void)
-{
- CustomFrontendOptionsPopulate();
-}
-
-#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
-
-#ifdef IMPROVED_VIDEOMODE
-void ScreenModeChange(int8 displayedValue)
-{
- if (displayedValue != FrontEndMenuManager.m_nPrefsWindowed) {
- FrontEndMenuManager.m_nPrefsWindowed = displayedValue;
- _psSelectScreenVM(FrontEndMenuManager.m_nPrefsVideoMode); // apply same resolution
- FrontEndMenuManager.SetHelperText(0);
- FrontEndMenuManager.SaveSettings();
- }
-}
-#endif
-
-#ifdef FREE_CAM
-void ToggleFreeCam(int8 action)
-{
- if (action == FEOPTION_ACTION_SELECT) {
- TheCamera.bFreeCam = !TheCamera.bFreeCam;
- FrontEndMenuManager.SaveSettings();
- }
-}
-#endif
-
-#ifdef CUTSCENE_BORDERS_SWITCH
-void BorderModeChange(int8 displayedValue)
-{
- CMenuManager::m_PrefsCutsceneBorders = !!displayedValue;
- FrontEndMenuManager.SaveSettings();
-}
-#endif
-
-// Reloaded on language change, so you can use hardcoded wchar* and TheText.Get with peace of mind
-void
-CustomFrontendOptionsPopulate(void)
-{
- RemoveCustomFrontendOptions(); // if exist
-
-#ifdef MORE_LANGUAGES
- FrontendOptionSetPosition(MENUPAGE_LANGUAGE_SETTINGS);
- FrontendOptionAddDynamic(TheText.Get("FEL_POL"), nil, LangPolSelect, nil);
- FrontendOptionAddDynamic(TheText.Get("FEL_RUS"), nil, LangRusSelect, nil);
- FrontendOptionAddDynamic(TheText.Get("FEL_JAP"), nil, LangJapSelect, nil);
-#endif
-
-#ifdef IMPROVED_VIDEOMODE
- static const wchar *screenModes[] = { (wchar*)L"FULLSCREEN", (wchar*)L"WINDOWED" };
- FrontendOptionSetPosition(MENUPAGE_GRAPHICS_SETTINGS, 8);
- FrontendOptionAddSelect(TheText.Get("SCRFOR"), screenModes, 2, (int8*)&FrontEndMenuManager.m_nPrefsWindowed, true, ScreenModeChange, nil);
-#endif
-
-#ifdef FREE_CAM
- static const wchar *text = (wchar*)L"TOGGLE FREE CAM";
- FrontendOptionSetPosition(MENUPAGE_CONTROLLER_PC, 1);
- FrontendOptionAddDynamic(text, nil, ToggleFreeCam, nil);
-#endif
-
-#ifdef CUTSCENE_BORDERS_SWITCH
- static const wchar *off_on[] = { TheText.Get("FEM_OFF"), TheText.Get("FEM_ON") };
- FrontendOptionSetPosition(MENUPAGE_GRAPHICS_SETTINGS, 9);
- FrontendOptionAddSelect((const wchar *)L"CUTSCENE BORDERS", off_on, 2, (int8 *)&CMenuManager::m_PrefsCutsceneBorders, false, BorderModeChange, nil);
-#endif
-}
-#endif
-
#ifdef DEBUGMENU
void WeaponCheat1();
void WeaponCheat2();
@@ -400,23 +300,50 @@ TWEAKSWITCH(CWeather::NewWeatherType, 0, 3, wt, NULL);
*/
void
+switchWeather(void)
+{
+ CWeather::StreamAfterRainTimer = 0;
+}
+
+void
DebugMenuPopulate(void)
{
if(1){
static const char *weathers[] = {
"Sunny", "Cloudy", "Rainy", "Foggy", "Extrasunny", "Stormy"
};
+ static const char *extracols[] = {
+ "1 - Malibu club",
+ "2 - Strib club",
+ "3 - Hotel",
+ "4 - Bank",
+ "5 - Police HQ",
+ "6 - Mall",
+ "7 - Rifle Range",
+ "8 - Mansion",
+ "9 - Dirt ring",
+ "10 - Blood ring",
+ "11 - Hot ring",
+ "12 - Concert hall",
+ "13 - Auntie Poulets",
+ "14 - Intro at docks",
+ "15 - Biker bar",
+ "16 - Intro cafe",
+ "17 - Studio",
+ "18", "19", "20", "21", "22", "23", "24"
+ };
DebugMenuEntry *e;
e = DebugMenuAddVar("Time & Weather", "Current Hour", &CClock::GetHoursRef(), nil, 1, 0, 23, nil);
DebugMenuEntrySetWrap(e, true);
e = DebugMenuAddVar("Time & Weather", "Current Minute", &CClock::GetMinutesRef(),
[](){ CWeather::InterpolationValue = CClock::GetMinutes()/60.0f; }, 1, 0, 59, nil);
DebugMenuEntrySetWrap(e, true);
- e = DebugMenuAddVar("Time & Weather", "Old Weather", (int16*)&CWeather::OldWeatherType, nil, 1, 0, 5, weathers);
+ e = DebugMenuAddVar("Time & Weather", "Old Weather", (int16*)&CWeather::OldWeatherType, switchWeather, 1, 0, 5, weathers);
DebugMenuEntrySetWrap(e, true);
- e = DebugMenuAddVar("Time & Weather", "New Weather", (int16*)&CWeather::NewWeatherType, nil, 1, 0, 5, weathers);
+ e = DebugMenuAddVar("Time & Weather", "New Weather", (int16*)&CWeather::NewWeatherType, switchWeather, 1, 0, 5, weathers);
DebugMenuEntrySetWrap(e, true);
- DebugMenuAddVar("Time & Weather", "Wind", (float*)&CWeather::Wind, nil, 0.1f, 0.0f, 1.0f);
+ DebugMenuAddVarBool32("Time & Weather", "Extracolours On", &CTimeCycle::m_bExtraColourOn, nil);
+ DebugMenuAddVar("Time & Weather", "Extracolour", &CTimeCycle::m_ExtraColour, nil, 1, 0, 23, extracols);
DebugMenuAddVar("Time & Weather", "Time scale", (float*)&CTimer::GetTimeScale(), nil, 0.1f, 0.0f, 10.0f);
DebugMenuAddCmd("Cheats", "Weapon set 1", WeaponCheat1);
@@ -493,7 +420,27 @@ DebugMenuPopulate(void)
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 EXTENDED_COLOURFILTER
+ static const char *filternames[] = { "None", "Simple", "Normal", "Mobile" };
+ e = DebugMenuAddVar("Render", "Colourfilter", &CPostFX::EffectSwitch, nil, 1, CPostFX::POSTFX_OFF, CPostFX::POSTFX_MOBILE, filternames);
+ DebugMenuEntrySetWrap(e, true);
+ DebugMenuAddVar("Render", "Intensity", &CPostFX::Intensity, nil, 0.05f, 0, 10.0f);
+ DebugMenuAddVarBool8("Render", "Blur", &CPostFX::BlurOn, nil);
+ DebugMenuAddVarBool8("Render", "Motion Blur", &CPostFX::MotionBlurOn, nil);
+#endif
+ DebugMenuAddVar("Render", "Drunkness", &CMBlur::Drunkness, nil, 0.05f, 0, 1.0f);
DebugMenuAddVarBool8("Render", "Occlusion debug", &bDisplayOccDebugStuff, nil);
+#ifdef EXTENDED_PIPELINES
+ static const char *vehpipenames[] = { "MatFX", "Neo" };
+ e = DebugMenuAddVar("Render", "Vehicle Pipeline", &CustomPipes::VehiclePipeSwitch, nil,
+ 1, CustomPipes::VEHICLEPIPE_MATFX, CustomPipes::VEHICLEPIPE_NEO, vehpipenames);
+ DebugMenuEntrySetWrap(e, true);
+ DebugMenuAddVar("Render", "Neo Vehicle Shininess", &CustomPipes::VehicleShininess, nil, 0.1f, 0, 1.0f);
+ DebugMenuAddVar("Render", "Neo Vehicle Specularity", &CustomPipes::VehicleSpecularity, nil, 0.1f, 0, 1.0f);
+ DebugMenuAddVar("Render", "Neo Ped Rim light", &CustomPipes::RimlightMult, nil, 0.1f, 0, 1.0f);
+ DebugMenuAddVar("Render", "Neo World Lightmaps", &CustomPipes::LightmapMult, nil, 0.1f, 0, 1.0f);
+ DebugMenuAddVar("Render", "Neo Road Gloss", &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);
@@ -520,9 +467,6 @@ DebugMenuPopulate(void)
DebugMenuAddVarBool8("Debug", "Script Heli On", &CHeli::ScriptHeliOn, nil);
-#ifdef CUSTOM_FRONTEND_OPTIONS
- DebugMenuAddCmd("Debug", "Reload custom frontend options", ReloadFrontendOptions);
-#endif
DebugMenuAddCmd("Debug", "Start Credits", CCredits::Start);
DebugMenuAddCmd("Debug", "Stop Credits", CCredits::Stop);
@@ -534,7 +478,30 @@ DebugMenuPopulate(void)
DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil);
#endif
#ifdef MISSION_SWITCHER
- DebugMenuAddInt8("Debug", "Select mission no", &nextMissionToSwitch, nil, 1, 0, 96, nil);
+ DebugMenuEntry *missionEntry;
+ static const char* missions[] = {
+ "Initial", "Intro", "An Old Friend", "The Party", "Back Alley Brawl", "Jury Fury", "Riot",
+ "Treacherous Swine", "Mall Shootout", "Guardian Angels", "Sir, Yes Sir!", "All Hands On Deck!",
+ "The Chase", "Phnom Penh '86", "The Fastest Boat", "Supply & Demand", "Rub Out", "Death Row",
+ "Four Iron", "Demolition Man", "Two Bit Hit", "No Escape?", "The Shootist", "The Driver",
+ "The Job", "Gun Runner", "Boomshine Saigon", "Recruitment Drive", "Dildo Dodo", "Martha's Mug Shot",
+ "G-spotlight", "Shakedown", "Bar Brawl", "Cop Land", "Spilling the Beans", "Hit the Courier",
+ "Printworks Buy", "Sunshine Autos", "Interglobal Films Buy", "Cherry Popper Icecreams Buy",
+ "Kaufman Cabs Buy", "Malibu Club Buy", "The Boatyard Buy", "Pole Position Club Buy", "El Swanko Casa Buy",
+ "Links View Apartment Buy", "Hyman Condo Buy", "Ocean Heighs Aprt. Buy", "1102 Washington Street Buy",
+ "Vice Point Buy", "Skumole Shack Buy", "Cap the Collector", "Keep your Friends Close...",
+ "Alloy Wheels of Steel", "Messing with the Man", "Hog Tied", "Stunt Boat Challenge", "Cannon Fodder",
+ "Naval Engagement", "Trojan Voodoo", "Juju Scramble", "Bombs Away!", "Dirty Lickin's", "Love Juice",
+ "Psycho Killer", "Publicity Tour", "Weapon Range", "Road Kill", "Waste the Wife", "Autocide",
+ "Check Out at the Check In", "Loose Ends", "V.I.P.", "Friendly Rivalry", "Cabmaggedon", "TAXI DRIVER",
+ "PARAMEDIC", "FIREFIGHTER", "VIGILANTE", "HOTRING", "BLOODRING", "DIRTRING", "Sunshine Autos Races",
+ "Distribution", "Downtown Chopper Checkpoint", "Ocean Beach Chopper Checkpoint", "Vice Point Chopper Checkpoint",
+ "Little Haiti Chopper Checkpoint", "Trial by Dirt", "Test Track", "PCJ Playground", "Cone Crazy",
+ "PIZZA BOY", "RC Raider Pickup", "RC Bandit Race", "RC Baron Race", "Checkpoint Charlie"
+ };
+
+ missionEntry = DebugMenuAddVar("Debug", "Select mission", &nextMissionToSwitch, nil, 1, 0, 96, missions);
+ DebugMenuEntrySetWrap(missionEntry, true);
DebugMenuAddCmd("Debug", "Start selected mission ", SwitchToMission);
#endif
extern bool PrintDebugCode;
diff --git a/src/core/templates.h b/src/core/templates.h
index 465e3bef..9f5bd5ea 100644
--- a/src/core/templates.h
+++ b/src/core/templates.h
@@ -45,7 +45,7 @@ class CPool
public:
// TODO(MIAMI): remove ctor without name argument
- CPool(int size){
+ CPool(int size, const char *name){
// TODO: use new here
m_entries = (U*)malloc(sizeof(U)*size);
m_flags = (Flags*)malloc(sizeof(Flags)*size);
@@ -56,8 +56,6 @@ public:
m_flags[i].free = 1;
}
}
- CPool(int size, const char *name)
- : CPool(size) {}
~CPool() {
Flush();
}
diff --git a/src/entities/Entity.cpp b/src/entities/Entity.cpp
index b27284bc..cf1dd9e7 100644
--- a/src/entities/Entity.cpp
+++ b/src/entities/Entity.cpp
@@ -33,7 +33,7 @@
#include "WindModifiers.h"
#include "Occlusion.h"
-//--MIAMI: file almost done (see TODO)
+//--MIAMI: file done
int gBuildings;
diff --git a/src/extras/custompipes.cpp b/src/extras/custompipes.cpp
new file mode 100644
index 00000000..2b4745e3
--- /dev/null
+++ b/src/extras/custompipes.cpp
@@ -0,0 +1,536 @@
+#define WITH_D3D
+#include "common.h"
+
+#ifdef EXTENDED_PIPELINES
+
+#include "main.h"
+#include "RwHelper.h"
+#include "Lights.h"
+#include "Timecycle.h"
+#include "FileMgr.h"
+#include "Clock.h"
+#include "Weather.h"
+#include "TxdStore.h"
+#include "Renderer.h"
+#include "World.h"
+#include "custompipes.h"
+
+#ifndef LIBRW
+#error "Need librw for EXTENDED_PIPELINES"
+#endif
+
+namespace CustomPipes {
+
+rw::int32 CustomMatOffset;
+
+void*
+CustomMatCtor(void *object, int32, int32)
+{
+ CustomMatExt *ext = GetCustomMatExt((rw::Material*)object);
+ ext->glossTex = nil;
+ ext->haveGloss = false;
+ return object;
+}
+
+void*
+CustomMatCopy(void *dst, void *src, int32, int32)
+{
+ CustomMatExt *srcext = GetCustomMatExt((rw::Material*)src);
+ CustomMatExt *dstext = GetCustomMatExt((rw::Material*)dst);
+ dstext->glossTex = srcext->glossTex;
+ dstext->haveGloss = srcext->haveGloss;
+ return dst;
+}
+
+
+
+static rw::TexDictionary *neoTxd;
+
+bool bRenderingEnvMap;
+int32 EnvMapSize = 128;
+rw::Camera *EnvMapCam;
+rw::Texture *EnvMapTex;
+rw::Texture *EnvMaskTex;
+static rw::RWDEVICE::Im2DVertex EnvScreenQuad[4];
+static int16 QuadIndices[6] = { 0, 1, 2, 0, 2, 3 };
+
+static rw::Camera*
+CreateEnvMapCam(rw::World *world)
+{
+ rw::Raster *fbuf = rw::Raster::create(EnvMapSize, EnvMapSize, 0, rw::Raster::CAMERATEXTURE);
+ if(fbuf){
+ rw::Raster *zbuf = rw::Raster::create(EnvMapSize, EnvMapSize, 0, rw::Raster::ZBUFFER);
+ if(zbuf){
+ rw::Frame *frame = rw::Frame::create();
+ if(frame){
+ rw::Camera *cam = rw::Camera::create();
+ if(cam){
+ cam->frameBuffer = fbuf;
+ cam->zBuffer = zbuf;
+ cam->setFrame(frame);
+ cam->setNearPlane(0.1f);
+ cam->setFarPlane(250.0f);
+ rw::V2d vw = { 2.0f, 2.0f };
+ cam->setViewWindow(&vw);
+ world->addCamera(cam);
+ EnvMapTex = rw::Texture::create(fbuf);
+ EnvMapTex->setFilter(rw::Texture::LINEAR);
+
+ frame->matrix.right.x = -1.0f;
+ frame->matrix.up.y = -1.0f;
+ frame->matrix.update();
+ return cam;
+ }
+ frame->destroy();
+ }
+ zbuf->destroy();
+ }
+ fbuf->destroy();
+ }
+ return nil;
+}
+
+static void
+DestroyCam(rw::Camera *cam)
+{
+ if(cam == nil)
+ return;
+ if(cam->frameBuffer){
+ cam->frameBuffer->destroy();
+ cam->frameBuffer = nil;
+ }
+ if(cam->zBuffer){
+ cam->zBuffer->destroy();
+ cam->zBuffer = nil;
+ }
+ rw::Frame *f = cam->getFrame();
+ if(f){
+ cam->setFrame(nil);
+ f->destroy();
+ }
+ cam->world->removeCamera(cam);
+ cam->destroy();
+}
+
+void
+RenderEnvMapScene(void)
+{
+ CRenderer::RenderRoads();
+ CRenderer::RenderEverythingBarRoads();
+ CRenderer::RenderFadingInEntities();
+}
+
+void
+EnvMapRender(void)
+{
+ if(VehiclePipeSwitch != VEHICLEPIPE_NEO)
+ return;
+
+ RwCameraEndUpdate(Scene.camera);
+
+ // Neo does this differently, but i'm not quite convinced it's much better
+ rw::V3d camPos = FindPlayerCoors();
+ EnvMapCam->getFrame()->matrix.pos = camPos;
+ EnvMapCam->getFrame()->transform(&EnvMapCam->getFrame()->matrix, rw::COMBINEREPLACE);
+
+ rw::RGBA skycol = { CTimeCycle::GetSkyBottomRed(), CTimeCycle::GetSkyBottomGreen(), CTimeCycle::GetSkyBottomBlue(), 255 };
+ EnvMapCam->clear(&skycol, rwCAMERACLEARZ|rwCAMERACLEARIMAGE);
+ RwCameraBeginUpdate(EnvMapCam);
+ bRenderingEnvMap = true;
+ RenderEnvMapScene();
+ bRenderingEnvMap = false;
+
+ if(EnvMaskTex){
+ rw::SetRenderState(rw::VERTEXALPHA, TRUE);
+ rw::SetRenderState(rw::SRCBLEND, rw::BLENDZERO);
+ rw::SetRenderState(rw::DESTBLEND, rw::BLENDSRCCOLOR);
+ rw::SetRenderStatePtr(rw::TEXTURERASTER, EnvMaskTex->raster);
+ rw::im2d::RenderIndexedPrimitive(rw::PRIMTYPETRILIST, EnvScreenQuad, 4, QuadIndices, 6);
+ rw::SetRenderState(rw::SRCBLEND, rw::BLENDSRCALPHA);
+ rw::SetRenderState(rw::DESTBLEND, rw::BLENDINVSRCALPHA);
+ }
+ RwCameraEndUpdate(EnvMapCam);
+
+
+ RwCameraBeginUpdate(Scene.camera);
+
+ // debug env map
+// rw::SetRenderStatePtr(rw::TEXTURERASTER, EnvMapTex->raster);
+// rw::im2d::RenderIndexedPrimitive(rw::PRIMTYPETRILIST, EnvScreenQuad, 4, QuadIndices, 6);
+}
+
+static void
+EnvMapInit(void)
+{
+ if(neoTxd)
+ EnvMaskTex = neoTxd->find("CarReflectionMask");
+
+ EnvMapCam = CreateEnvMapCam(Scene.world);
+
+ int width = EnvMapCam->frameBuffer->width;
+ int height = EnvMapCam->frameBuffer->height;
+ float screenZ = RwIm2DGetNearScreenZ();
+ float recipZ = 1.0f/EnvMapCam->nearPlane;
+
+ EnvScreenQuad[0].setScreenX(0.0f);
+ EnvScreenQuad[0].setScreenY(0.0f);
+ EnvScreenQuad[0].setScreenZ(screenZ);
+ EnvScreenQuad[0].setCameraZ(EnvMapCam->nearPlane);
+ EnvScreenQuad[0].setRecipCameraZ(recipZ);
+ EnvScreenQuad[0].setColor(255, 255, 255, 255);
+ EnvScreenQuad[0].setU(0.0f, recipZ);
+ EnvScreenQuad[0].setV(0.0f, recipZ);
+
+ EnvScreenQuad[1].setScreenX(0.0f);
+ EnvScreenQuad[1].setScreenY(height);
+ EnvScreenQuad[1].setScreenZ(screenZ);
+ EnvScreenQuad[1].setCameraZ(EnvMapCam->nearPlane);
+ EnvScreenQuad[1].setRecipCameraZ(recipZ);
+ EnvScreenQuad[1].setColor(255, 255, 255, 255);
+ EnvScreenQuad[1].setU(0.0f, recipZ);
+ EnvScreenQuad[1].setV(1.0f, recipZ);
+
+ EnvScreenQuad[2].setScreenX(width);
+ EnvScreenQuad[2].setScreenY(height);
+ EnvScreenQuad[2].setScreenZ(screenZ);
+ EnvScreenQuad[2].setCameraZ(EnvMapCam->nearPlane);
+ EnvScreenQuad[2].setRecipCameraZ(recipZ);
+ EnvScreenQuad[2].setColor(255, 255, 255, 255);
+ EnvScreenQuad[2].setU(1.0f, recipZ);
+ EnvScreenQuad[2].setV(1.0f, recipZ);
+
+ EnvScreenQuad[3].setScreenX(width);
+ EnvScreenQuad[3].setScreenY(0.0f);
+ EnvScreenQuad[3].setScreenZ(screenZ);
+ EnvScreenQuad[3].setCameraZ(EnvMapCam->nearPlane);
+ EnvScreenQuad[3].setRecipCameraZ(recipZ);
+ EnvScreenQuad[3].setColor(255, 255, 255, 255);
+ EnvScreenQuad[3].setU(1.0f, recipZ);
+ EnvScreenQuad[3].setV(0.0f, recipZ);
+}
+
+static void
+EnvMapShutdown(void)
+{
+ EnvMapTex->raster = nil;
+ EnvMapTex->destroy();
+ EnvMapTex = nil;
+ DestroyCam(EnvMapCam);
+ EnvMapCam = nil;
+}
+
+/*
+ * Tweak values
+ */
+
+#define INTERP_SETUP \
+ int h1 = CClock::GetHours(); \
+ int h2 = (h1+1)%24; \
+ int w1 = CWeather::OldWeatherType; \
+ int w2 = CWeather::NewWeatherType; \
+ float timeInterp = (CClock::GetSeconds()/60.0f + CClock::GetMinutes())/60.0f; \
+ float c0 = (1.0f-timeInterp)*(1.0f-CWeather::InterpolationValue); \
+ float c1 = timeInterp*(1.0f-CWeather::InterpolationValue); \
+ float c2 = (1.0f-timeInterp)*CWeather::InterpolationValue; \
+ float c3 = timeInterp*CWeather::InterpolationValue;
+#define INTERP(v) v[h1][w1]*c0 + v[h2][w1]*c1 + v[h1][w2]*c2 + v[h2][w2]*c3;
+#define INTERPF(v,f) v[h1][w1].f*c0 + v[h2][w1].f*c1 + v[h1][w2].f*c2 + v[h2][w2].f*c3;
+
+InterpolatedFloat::InterpolatedFloat(float init)
+{
+ curInterpolator = 61; // compared against second
+ for(int h = 0; h < 24; h++)
+ for(int w = 0; w < NUMWEATHERS; w++)
+ data[h][w] = init;
+}
+
+void
+InterpolatedFloat::Read(char *s, int line, int field)
+{
+ sscanf(s, "%f", &data[line][field]);
+}
+
+float
+InterpolatedFloat::Get(void)
+{
+ if(curInterpolator != CClock::GetSeconds()){
+ INTERP_SETUP
+ curVal = INTERP(data);
+ curInterpolator = CClock::GetSeconds();
+ }
+ return curVal;
+}
+
+InterpolatedColor::InterpolatedColor(const Color &init)
+{
+ curInterpolator = 61; // compared against second
+ for(int h = 0; h < 24; h++)
+ for(int w = 0; w < NUMWEATHERS; w++)
+ data[h][w] = init;
+}
+
+void
+InterpolatedColor::Read(char *s, int line, int field)
+{
+ int r, g, b, a;
+ sscanf(s, "%i, %i, %i, %i", &r, &g, &b, &a);
+ data[line][field] = Color(r/255.0f, g/255.0f, b/255.0f, a/255.0f);
+}
+
+Color
+InterpolatedColor::Get(void)
+{
+ if(curInterpolator != CClock::GetSeconds()){
+ INTERP_SETUP
+ curVal.r = INTERPF(data, r);
+ curVal.g = INTERPF(data, g);
+ curVal.b = INTERPF(data, b);
+ curVal.a = INTERPF(data, a);
+ curInterpolator = CClock::GetSeconds();
+ }
+ return curVal;
+}
+
+void
+InterpolatedLight::Read(char *s, int line, int field)
+{
+ int r, g, b, a;
+ sscanf(s, "%i, %i, %i, %i", &r, &g, &b, &a);
+ data[line][field] = Color(r/255.0f, g/255.0f, b/255.0f, a/100.0f);
+}
+
+char*
+ReadTweakValueTable(char *fp, InterpolatedValue &interp)
+{
+ char buf[24], *p;
+ int c;
+ int line, field;
+
+ line = 0;
+ c = *fp++;
+ while(c != '\0' && line < 24){
+ field = 0;
+ if(c != '\0' && c != '#'){
+ while(c != '\0' && c != '\n' && field < NUMWEATHERS){
+ p = buf;
+ while(c != '\0' && c == '\t')
+ c = *fp++;
+ *p++ = c;
+ while(c = *fp++, c != '\0' && c != '\t' && c != '\n')
+ *p++ = c;
+ *p++ = '\0';
+ interp.Read(buf, line, field);
+ field++;
+ }
+ line++;
+ }
+ while(c != '\0' && c != '\n')
+ c = *fp++;
+ c = *fp++;
+ }
+ return fp-1;
+}
+
+
+
+/*
+ * Neo Vehicle pipe
+ */
+
+int32 VehiclePipeSwitch = VEHICLEPIPE_NEO;
+float VehicleShininess = 1.0f;
+float VehicleSpecularity = 1.0f;
+InterpolatedFloat Fresnel(0.4f);
+InterpolatedFloat Power(18.0f);
+InterpolatedLight DiffColor(Color(0.0f, 0.0f, 0.0f, 0.0f));
+InterpolatedLight SpecColor(Color(0.7f, 0.7f, 0.7f, 1.0f));
+rw::ObjPipeline *vehiclePipe;
+
+void
+AttachVehiclePipe(rw::Atomic *atomic)
+{
+ atomic->pipeline = vehiclePipe;
+}
+
+void
+AttachVehiclePipe(rw::Clump *clump)
+{
+ FORLIST(lnk, clump->atomics)
+ AttachVehiclePipe(rw::Atomic::fromClump(lnk));
+}
+
+
+
+/*
+ * Neo World pipe
+ */
+
+float LightmapMult = 1.0f;
+InterpolatedFloat WorldLightmapBlend(1.0f);
+rw::ObjPipeline *worldPipe;
+
+void
+AttachWorldPipe(rw::Atomic *atomic)
+{
+ atomic->pipeline = worldPipe;
+}
+
+void
+AttachWorldPipe(rw::Clump *clump)
+{
+ FORLIST(lnk, clump->atomics)
+ AttachWorldPipe(rw::Atomic::fromClump(lnk));
+}
+
+
+
+
+/*
+ * Neo Gloss pipe
+ */
+
+float GlossMult = 1.0f;
+rw::ObjPipeline *glossPipe;
+
+rw::Texture*
+GetGlossTex(rw::Material *mat)
+{
+ if(neoTxd == nil)
+ return nil;
+ CustomMatExt *ext = GetCustomMatExt(mat);
+ if(!ext->haveGloss){
+ char glossname[128];
+ strcpy(glossname, mat->texture->name);
+ strcat(glossname, "_gloss");
+ ext->glossTex = neoTxd->find(glossname);
+ ext->haveGloss = true;
+ }
+ return ext->glossTex;
+}
+
+void
+AttachGlossPipe(rw::Atomic *atomic)
+{
+ atomic->pipeline = glossPipe;
+}
+
+void
+AttachGlossPipe(rw::Clump *clump)
+{
+ FORLIST(lnk, clump->atomics)
+ AttachWorldPipe(rw::Atomic::fromClump(lnk));
+}
+
+
+
+/*
+ * Neo Rim pipes
+ */
+
+float RimlightMult = 1.0f;
+InterpolatedColor RampStart(Color(0.0f, 0.0f, 0.0f, 1.0f));
+InterpolatedColor RampEnd(Color(1.0f, 1.0f, 1.0f, 1.0f));
+InterpolatedFloat Offset(0.5f);
+InterpolatedFloat Scale(1.5f);
+InterpolatedFloat Scaling(2.0f);
+rw::ObjPipeline *rimPipe;
+rw::ObjPipeline *rimSkinPipe;
+
+void
+AttachRimPipe(rw::Atomic *atomic)
+{
+ if(rw::Skin::get(atomic->geometry))
+ atomic->pipeline = rimSkinPipe;
+ else
+ atomic->pipeline = rimPipe;
+}
+
+void
+AttachRimPipe(rw::Clump *clump)
+{
+ FORLIST(lnk, clump->atomics)
+ AttachRimPipe(rw::Atomic::fromClump(lnk));
+}
+
+/*
+ * High level stuff
+ */
+
+void
+CustomPipeInit(void)
+{
+ RwStream *stream = RwStreamOpen(rwSTREAMFILENAME, rwSTREAMREAD, "neo/neo.txd");
+ if(stream == nil)
+ printf("Error: couldn't open 'neo/neo.txd'\n");
+ else{
+ if(RwStreamFindChunk(stream, rwID_TEXDICTIONARY, nil, nil))
+ neoTxd = RwTexDictionaryGtaStreamRead(stream);
+ RwStreamClose(stream, nil);
+ }
+
+ EnvMapInit();
+
+ CreateVehiclePipe();
+ CreateWorldPipe();
+ CreateGlossPipe();
+ CreateRimLightPipes();
+}
+
+void
+CustomPipeShutdown(void)
+{
+ DestroyVehiclePipe();
+ DestroyWorldPipe();
+ DestroyGlossPipe();
+ DestroyRimLightPipes();
+
+ EnvMapShutdown();
+
+ if(neoTxd){
+ neoTxd->destroy();
+ neoTxd = nil;
+ }
+}
+
+void
+CustomPipeRegister(void)
+{
+#ifdef RW_OPENGL
+ CustomPipeRegisterGL();
+#endif
+
+ CustomMatOffset = rw::Material::registerPlugin(sizeof(CustomMatExt), MAKECHUNKID(rwVENDORID_ROCKSTAR, 0x80),
+ CustomMatCtor, nil, CustomMatCopy);
+}
+
+
+// Load textures from generic as fallback
+
+rw::TexDictionary *genericTxd;
+rw::Texture *(*defaultFindCB)(const char *name);
+
+static rw::Texture*
+customFindCB(const char *name)
+{
+ rw::Texture *res = defaultFindCB(name);
+ if(res == nil)
+ res = genericTxd->find(name);
+ return res;
+}
+
+void
+SetTxdFindCallback(void)
+{
+ int slot = CTxdStore::FindTxdSlot("generic");
+ CTxdStore::AddRef(slot);
+ // TODO: function for this
+ genericTxd = CTxdStore::GetSlot(slot)->texDict;
+ assert(genericTxd);
+ if(defaultFindCB == nil)
+ defaultFindCB = rw::Texture::findCB;
+ rw::Texture::findCB = customFindCB;
+}
+
+}
+
+#endif
diff --git a/src/extras/custompipes.h b/src/extras/custompipes.h
new file mode 100644
index 00000000..4ebe586f
--- /dev/null
+++ b/src/extras/custompipes.h
@@ -0,0 +1,133 @@
+#pragma once
+
+#ifdef EXTENDED_PIPELINES
+#ifdef LIBRW
+
+namespace CustomPipes {
+
+
+
+struct CustomMatExt
+{
+ rw::Texture *glossTex;
+ bool haveGloss;
+};
+extern rw::int32 CustomMatOffset;
+inline CustomMatExt *GetCustomMatExt(rw::Material *mat) {
+ return PLUGINOFFSET(CustomMatExt, mat, CustomMatOffset);
+}
+
+
+struct Color
+{
+ float r, g, b, a;
+ Color(void) {}
+ Color(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {}
+};
+
+class InterpolatedValue
+{
+public:
+ virtual void Read(char *s, int line, int field) = 0;
+};
+
+class InterpolatedFloat : public InterpolatedValue
+{
+public:
+ float data[24][NUMWEATHERS];
+ float curInterpolator;
+ float curVal;
+
+ InterpolatedFloat(float init);
+ void Read(char *s, int line, int field);
+ float Get(void);
+};
+
+class InterpolatedColor : public InterpolatedValue
+{
+public:
+ Color data[24][NUMWEATHERS];
+ float curInterpolator;
+ Color curVal;
+
+ InterpolatedColor(const Color &init);
+ void Read(char *s, int line, int field);
+ Color Get(void);
+};
+
+class InterpolatedLight : public InterpolatedColor
+{
+public:
+ InterpolatedLight(const Color &init) : InterpolatedColor(init) {}
+ void Read(char *s, int line, int field);
+};
+
+char *ReadTweakValueTable(char *fp, InterpolatedValue &interp);
+
+
+
+
+
+void CustomPipeRegister(void);
+void CustomPipeRegisterGL(void);
+void CustomPipeInit(void);
+void CustomPipeShutdown(void);
+void SetTxdFindCallback(void);
+
+extern bool bRenderingEnvMap;
+extern int32 EnvMapSize;
+extern rw::Camera *EnvMapCam;
+extern rw::Texture *EnvMapTex;
+extern rw::Texture *EnvMaskTex;
+void EnvMapRender(void);
+
+enum {
+ VEHICLEPIPE_MATFX,
+ VEHICLEPIPE_NEO
+};
+extern int32 VehiclePipeSwitch;
+extern float VehicleShininess;
+extern float VehicleSpecularity;
+extern InterpolatedFloat Fresnel;
+extern InterpolatedFloat Power;
+extern InterpolatedLight DiffColor;
+extern InterpolatedLight SpecColor;
+extern rw::ObjPipeline *vehiclePipe;
+void CreateVehiclePipe(void);
+void DestroyVehiclePipe(void);
+void AttachVehiclePipe(rw::Atomic *atomic);
+void AttachVehiclePipe(rw::Clump *clump);
+
+extern float LightmapMult;
+extern InterpolatedFloat WorldLightmapBlend;
+extern rw::ObjPipeline *worldPipe;
+void CreateWorldPipe(void);
+void DestroyWorldPipe(void);
+void AttachWorldPipe(rw::Atomic *atomic);
+void AttachWorldPipe(rw::Clump *clump);
+
+extern float GlossMult;
+extern rw::ObjPipeline *glossPipe;
+void CreateGlossPipe(void);
+void DestroyGlossPipe(void);
+void AttachGlossPipe(rw::Atomic *atomic);
+void AttachGlossPipe(rw::Clump *clump);
+rw::Texture *GetGlossTex(rw::Material *mat);
+
+extern float RimlightMult;
+extern InterpolatedColor RampStart;
+extern InterpolatedColor RampEnd;
+extern InterpolatedFloat Offset;
+extern InterpolatedFloat Scale;
+extern InterpolatedFloat Scaling;
+extern rw::ObjPipeline *rimPipe;
+extern rw::ObjPipeline *rimSkinPipe;
+void CreateRimLightPipes(void);
+void DestroyRimLightPipes(void);
+void AttachRimPipe(rw::Atomic *atomic);
+void AttachRimPipe(rw::Clump *clump);
+
+}
+
+#endif
+#endif
diff --git a/src/extras/custompipes_d3d9.cpp b/src/extras/custompipes_d3d9.cpp
new file mode 100644
index 00000000..63e91063
--- /dev/null
+++ b/src/extras/custompipes_d3d9.cpp
@@ -0,0 +1,527 @@
+#define WITH_D3D
+#include "common.h"
+
+#ifdef RW_D3D9
+#ifdef EXTENDED_PIPELINES
+
+#include "main.h"
+#include "RwHelper.h"
+#include "Lights.h"
+#include "Timecycle.h"
+#include "FileMgr.h"
+#include "Clock.h"
+#include "Weather.h"
+#include "TxdStore.h"
+#include "Renderer.h"
+#include "World.h"
+#include "custompipes.h"
+
+#ifndef LIBRW
+#error "Need librw for EXTENDED_PIPELINES"
+#endif
+
+extern RwTexture *gpWhiteTexture; // from vehicle model info
+
+namespace CustomPipes {
+
+enum {
+ // rim pipe
+ VSLOC_boneMatrices = rw::d3d::VSLOC_afterLights,
+ VSLOC_viewVec = VSLOC_boneMatrices + 64*3,
+ VSLOC_rampStart,
+ VSLOC_rampEnd,
+ VSLOC_rimData,
+
+ // gloss pipe
+ VSLOC_eye = rw::d3d::VSLOC_afterLights,
+
+ VSLOC_reflProps,
+ VSLOC_specLights
+};
+
+/*
+ * Neo Vehicle pipe
+ */
+
+static void *neoVehicle_VS;
+static void *neoVehicle_PS;
+
+void
+uploadSpecLights(void)
+{
+ struct VsLight {
+ rw::RGBAf color;
+ float pos[4]; // unused
+ rw::V3d dir;
+ float power;
+ } specLights[1 + NUMEXTRADIRECTIONALS];
+ memset(specLights, 0, sizeof(specLights));
+ for(int i = 0; i < 1+NUMEXTRADIRECTIONALS; i++)
+ specLights[i].power = 1.0f;
+ float power = Power.Get();
+ Color speccol = SpecColor.Get();
+ specLights[0].color.red = speccol.r;
+ specLights[0].color.green = speccol.g;
+ specLights[0].color.blue = speccol.b;
+ specLights[0].dir = pDirect->getFrame()->getLTM()->at;
+ specLights[0].power = power;
+ for(int i = 0; i < NUMEXTRADIRECTIONALS; i++){
+ if(pExtraDirectionals[i]->getFlags() & rw::Light::LIGHTATOMICS){
+ specLights[1+i].color = pExtraDirectionals[i]->color;
+ specLights[1+i].dir = pExtraDirectionals[i]->getFrame()->getLTM()->at;
+ specLights[1+i].power = power*2.0f;
+ }
+ }
+ rw::d3d::d3ddevice->SetVertexShaderConstantF(VSLOC_specLights, (float*)&specLights, 3*(1 + NUMEXTRADIRECTIONALS));
+}
+
+void
+vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::d3d;
+ using namespace rw::d3d9;
+
+ // TODO: make this less of a kludge
+ if(VehiclePipeSwitch == VEHICLEPIPE_MATFX){
+ matFXGlobals.pipelines[rw::platform]->render(atomic);
+ return;
+ }
+
+ int vsBits;
+ setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
+ setIndices(header->indexBuffer);
+ setVertexDeclaration(header->vertexDeclaration);
+
+ vsBits = lightingCB_Shader(atomic);
+ uploadSpecLights();
+ uploadMatrices(atomic->getFrame()->getLTM());
+
+ setVertexShader(neoVehicle_VS);
+
+ V3d eyePos = rw::engine->currentCamera->getFrame()->getLTM()->pos;
+ d3ddevice->SetVertexShaderConstantF(VSLOC_eye, (float*)&eyePos, 1);
+
+ float reflProps[4];
+ reflProps[0] = Fresnel.Get();
+ reflProps[1] = SpecColor.Get().a;
+
+ d3d::setTexture(1, EnvMapTex);
+
+ SetRenderState(SRCBLEND, BLENDONE);
+
+ InstanceData *inst = header->inst;
+ for(rw::uint32 i = 0; i < header->numMeshes; i++){
+ Material *m = inst->material;
+
+ SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
+
+ reflProps[2] = m->surfaceProps.specular * VehicleShininess;
+ reflProps[3] = m->surfaceProps.specular == 0.0f ? 0.0f : VehicleSpecularity;
+ d3ddevice->SetVertexShaderConstantF(VSLOC_reflProps, reflProps, 1);
+
+ setMaterial(m->color, m->surfaceProps);
+
+ if(m->texture)
+ d3d::setTexture(0, m->texture);
+ else
+ d3d::setTexture(0, gpWhiteTexture);
+ setPixelShader(neoVehicle_PS);
+
+ drawInst(header, inst);
+ inst++;
+ }
+
+ SetRenderState(SRCBLEND, BLENDSRCALPHA);
+}
+
+void
+CreateVehiclePipe(void)
+{
+ if(CFileMgr::LoadFile("neo/carTweakingTable.dat", work_buff, sizeof(work_buff), "r") == 0)
+ printf("Error: couldn't open 'neo/carTweakingTable.dat'\n");
+ else{
+ char *fp = (char*)work_buff;
+ fp = ReadTweakValueTable(fp, Fresnel);
+ fp = ReadTweakValueTable(fp, Power);
+ fp = ReadTweakValueTable(fp, DiffColor);
+ fp = ReadTweakValueTable(fp, SpecColor);
+ }
+
+#include "shaders/neoVehicle_VS.inc"
+ neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
+ assert(neoVehicle_VS);
+
+#include "shaders/neoVehicle_PS.inc"
+ neoVehicle_PS = rw::d3d::createPixelShader(neoVehicle_PS_cso);
+ assert(neoVehicle_PS);
+
+
+ rw::d3d9::ObjPipeline *pipe = rw::d3d9::ObjPipeline::create();
+ pipe->instanceCB = rw::d3d9::defaultInstanceCB;
+ pipe->uninstanceCB = rw::d3d9::defaultUninstanceCB;
+ pipe->renderCB = vehicleRenderCB;
+ vehiclePipe = pipe;
+}
+
+void
+DestroyVehiclePipe(void)
+{
+ rw::d3d::destroyVertexShader(neoVehicle_VS);
+ neoVehicle_VS = nil;
+
+ ((rw::d3d9::ObjPipeline*)vehiclePipe)->destroy();
+ vehiclePipe = nil;
+}
+
+
+
+/*
+ * Neo World pipe
+ */
+
+static void *neoWorld_VS;
+static void *neoWorldVC_PS;
+
+static void
+worldRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::d3d;
+ using namespace rw::d3d9;
+
+ int vsBits;
+ setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
+ setIndices(header->indexBuffer);
+ setVertexDeclaration(header->vertexDeclaration);
+
+ vsBits = lightingCB_Shader(atomic);
+ uploadMatrices(atomic->getFrame()->getLTM());
+
+
+ float lightfactor[4];
+
+ InstanceData *inst = header->inst;
+ for(rw::uint32 i = 0; i < header->numMeshes; i++){
+ Material *m = inst->material;
+
+ if(MatFX::getEffects(m) == MatFX::DUAL){
+ setVertexShader(neoWorld_VS);
+
+ MatFX *matfx = MatFX::get(m);
+ Texture *dualtex = matfx->getDualTexture();
+ if(dualtex == nil)
+ goto notex;
+ d3d::setTexture(1, dualtex);
+ lightfactor[0] = lightfactor[1] = lightfactor[2] = WorldLightmapBlend.Get()*LightmapMult;
+ }else{
+ notex:
+ setVertexShader(default_amb_VS);
+
+ d3d::setTexture(1, nil);
+ lightfactor[0] = lightfactor[1] = lightfactor[2] = 0.0f;
+ }
+ lightfactor[3] = m->color.alpha/255.0f;
+ d3d::setTexture(0, m->texture);
+ d3ddevice->SetPixelShaderConstantF(1, lightfactor, 1);
+
+ SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
+
+ RGBA color = { 255, 255, 255, m->color.alpha };
+ setMaterial(color, m->surfaceProps);
+
+ if(m->texture)
+ d3d::setTexture(0, m->texture);
+ else
+ d3d::setTexture(0, gpWhiteTexture);
+ setPixelShader(neoWorldVC_PS);
+
+ drawInst(header, inst);
+ inst++;
+ }
+}
+
+void
+CreateWorldPipe(void)
+{
+ if(CFileMgr::LoadFile("neo/worldTweakingTable.dat", work_buff, sizeof(work_buff), "r") == 0)
+ printf("Error: couldn't open 'neo/worldTweakingTable.dat'\n");
+ else
+ ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
+
+#include "shaders/default_UV2_VS.inc"
+ neoWorld_VS = rw::d3d::createVertexShader(default_UV2_VS_cso);
+ assert(neoWorld_VS);
+
+#include "shaders/neoWorldVC_PS.inc"
+ neoWorldVC_PS = rw::d3d::createPixelShader(neoWorldVC_PS_cso);
+ assert(neoWorldVC_PS);
+
+
+ rw::d3d9::ObjPipeline *pipe = rw::d3d9::ObjPipeline::create();
+ pipe->instanceCB = rw::d3d9::defaultInstanceCB;
+ pipe->uninstanceCB = rw::d3d9::defaultUninstanceCB;
+ pipe->renderCB = worldRenderCB;
+ worldPipe = pipe;
+}
+
+void
+DestroyWorldPipe(void)
+{
+ rw::d3d::destroyVertexShader(neoWorld_VS);
+ neoWorld_VS = nil;
+ rw::d3d::destroyPixelShader(neoWorldVC_PS);
+ neoWorldVC_PS = nil;
+
+
+ ((rw::d3d9::ObjPipeline*)worldPipe)->destroy();
+ worldPipe = nil;
+}
+
+
+
+
+/*
+ * Neo Gloss pipe
+ */
+
+static void *neoGloss_VS;
+static void *neoGloss_PS;
+
+static void
+glossRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
+{
+ worldRenderCB(atomic, header);
+
+ using namespace rw;
+ using namespace rw::d3d;
+ using namespace rw::d3d9;
+
+ setVertexShader(neoGloss_VS);
+ setPixelShader(neoGloss_PS);
+
+ V3d eyePos = rw::engine->currentCamera->getFrame()->getLTM()->pos;
+ d3ddevice->SetVertexShaderConstantF(VSLOC_eye, (float*)&eyePos, 1);
+ d3ddevice->SetPixelShaderConstantF(1, (float*)&GlossMult, 1);
+
+ SetRenderState(VERTEXALPHA, TRUE);
+ SetRenderState(SRCBLEND, BLENDONE);
+ SetRenderState(DESTBLEND, BLENDONE);
+ SetRenderState(ZWRITEENABLE, FALSE);
+ SetRenderState(ALPHATESTFUNC, ALPHAALWAYS);
+
+ InstanceData *inst = header->inst;
+ for(rw::uint32 i = 0; i < header->numMeshes; i++){
+ Material *m = inst->material;
+
+ if(m->texture){
+ Texture *tex = GetGlossTex(m);
+ if(tex){
+ d3d::setTexture(0, tex);
+ drawInst(header, inst);
+ }
+ }
+ inst++;
+ }
+
+ SetRenderState(ZWRITEENABLE, TRUE);
+ SetRenderState(ALPHATESTFUNC, ALPHAGREATEREQUAL);
+ SetRenderState(SRCBLEND, BLENDSRCALPHA);
+ SetRenderState(DESTBLEND, BLENDINVSRCALPHA);
+}
+
+void
+CreateGlossPipe(void)
+{
+#include "shaders/neoGloss_VS.inc"
+ neoGloss_VS = rw::d3d::createVertexShader(neoGloss_VS_cso);
+ assert(neoGloss_VS);
+
+#include "shaders/neoGloss_PS.inc"
+ neoGloss_PS = rw::d3d::createPixelShader(neoGloss_PS_cso);
+ assert(neoGloss_PS);
+
+
+ rw::d3d9::ObjPipeline *pipe = rw::d3d9::ObjPipeline::create();
+ pipe->instanceCB = rw::d3d9::defaultInstanceCB;
+ pipe->uninstanceCB = rw::d3d9::defaultUninstanceCB;
+ pipe->renderCB = glossRenderCB;
+ glossPipe = pipe;
+}
+
+void
+DestroyGlossPipe(void)
+{
+ ((rw::d3d9::ObjPipeline*)glossPipe)->destroy();
+ glossPipe = nil;
+}
+
+
+
+/*
+ * Neo Rim pipes
+ */
+
+static void *neoRim_VS;
+static void *neoRimSkin_VS;
+
+static void
+uploadRimData(bool enable)
+{
+ using namespace rw;
+ using namespace rw::d3d;
+
+ V3d viewVec = rw::engine->currentCamera->getFrame()->getLTM()->at;
+ d3ddevice->SetVertexShaderConstantF(VSLOC_viewVec, (float*)&viewVec, 1);
+ float rimData[4];
+ rimData[0] = Offset.Get();
+ rimData[1] = Scale.Get();
+ if(enable)
+ rimData[2] = Scaling.Get()*RimlightMult;
+ else
+ rimData[2] = 0.0f;
+ rimData[3] = 0.0f;
+ d3ddevice->SetVertexShaderConstantF(VSLOC_rimData, rimData, 1);
+ Color col = RampStart.Get();
+ d3ddevice->SetVertexShaderConstantF(VSLOC_rampStart, (float*)&col, 1);
+ col = RampEnd.Get();
+ d3ddevice->SetVertexShaderConstantF(VSLOC_rampEnd, (float*)&col, 1);
+}
+
+static void
+rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::d3d;
+ using namespace rw::d3d9;
+
+ int vsBits;
+ setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
+ setIndices(header->indexBuffer);
+ setVertexDeclaration(header->vertexDeclaration);
+
+ vsBits = lightingCB_Shader(atomic);
+ uploadMatrices(atomic->getFrame()->getLTM());
+
+ setVertexShader(neoRim_VS);
+
+ uploadRimData(atomic->geometry->flags & Geometry::LIGHT);
+
+ InstanceData *inst = header->inst;
+ for(rw::uint32 i = 0; i < header->numMeshes; i++){
+ Material *m = inst->material;
+
+ SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
+
+ setMaterial(m->color, m->surfaceProps);
+
+ if(m->texture){
+ d3d::setTexture(0, m->texture);
+ setPixelShader(default_tex_PS);
+ }else
+ setPixelShader(default_PS);
+
+ drawInst(header, inst);
+ inst++;
+ }
+}
+
+static void
+rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::d3d;
+ using namespace rw::d3d9;
+
+ int vsBits;
+
+ setStreamSource(0, (IDirect3DVertexBuffer9*)header->vertexStream[0].vertexBuffer,
+ 0, header->vertexStream[0].stride);
+ setIndices((IDirect3DIndexBuffer9*)header->indexBuffer);
+ setVertexDeclaration((IDirect3DVertexDeclaration9*)header->vertexDeclaration);
+
+ vsBits = lightingCB_Shader(atomic);
+ uploadMatrices(atomic->getFrame()->getLTM());
+
+ uploadSkinMatrices(atomic);
+
+ setVertexShader(neoRimSkin_VS);
+
+ uploadRimData(atomic->geometry->flags & Geometry::LIGHT);
+
+ InstanceData *inst = header->inst;
+ for(rw::uint32 i = 0; i < header->numMeshes; i++){
+ Material *m = inst->material;
+
+ SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
+
+ setMaterial(m->color, m->surfaceProps);
+
+ if(inst->material->texture){
+ d3d::setTexture(0, m->texture);
+ setPixelShader(default_tex_PS);
+ }else
+ setPixelShader(default_PS);
+
+ drawInst(header, inst);
+ inst++;
+ }
+}
+
+void
+CreateRimLightPipes(void)
+{
+ if(CFileMgr::LoadFile("neo/rimTweakingTable.dat", work_buff, sizeof(work_buff), "r") == 0)
+ printf("Error: couldn't open 'neo/rimTweakingTable.dat'\n");
+ else{
+ char *fp = (char*)work_buff;
+ fp = ReadTweakValueTable(fp, RampStart);
+ fp = ReadTweakValueTable(fp, RampEnd);
+ fp = ReadTweakValueTable(fp, Offset);
+ fp = ReadTweakValueTable(fp, Scale);
+ fp = ReadTweakValueTable(fp, Scaling);
+ }
+
+
+#include "shaders/neoRim_VS.inc"
+ neoRim_VS = rw::d3d::createVertexShader(neoRim_VS_cso);
+ assert(neoRim_VS);
+
+#include "shaders/neoRimSkin_VS.inc"
+ neoRimSkin_VS = rw::d3d::createVertexShader(neoRimSkin_VS_cso);
+ assert(neoRimSkin_VS);
+
+
+ rw::d3d9::ObjPipeline *pipe = rw::d3d9::ObjPipeline::create();
+ pipe->instanceCB = rw::d3d9::defaultInstanceCB;
+ pipe->uninstanceCB = rw::d3d9::defaultUninstanceCB;
+ pipe->renderCB = rimRenderCB;
+ rimPipe = pipe;
+
+ pipe = rw::d3d9::ObjPipeline::create();
+ pipe->instanceCB = rw::d3d9::skinInstanceCB;
+ pipe->uninstanceCB = nil;
+ pipe->renderCB = rimSkinRenderCB;
+ rimSkinPipe = pipe;
+}
+
+void
+DestroyRimLightPipes(void)
+{
+ rw::d3d::destroyVertexShader(neoRim_VS);
+ neoRim_VS = nil;
+
+ rw::d3d::destroyVertexShader(neoRimSkin_VS);
+ neoRimSkin_VS = nil;
+
+ ((rw::d3d9::ObjPipeline*)rimPipe)->destroy();
+ rimPipe = nil;
+
+ ((rw::d3d9::ObjPipeline*)rimSkinPipe)->destroy();
+ rimSkinPipe = nil;
+}
+
+}
+
+#endif
+#endif
diff --git a/src/extras/custompipes_gl.cpp b/src/extras/custompipes_gl.cpp
new file mode 100644
index 00000000..cb434ea1
--- /dev/null
+++ b/src/extras/custompipes_gl.cpp
@@ -0,0 +1,623 @@
+#include "common.h"
+
+#ifdef RW_OPENGL
+#ifdef EXTENDED_PIPELINES
+
+#include "main.h"
+#include "RwHelper.h"
+#include "Lights.h"
+#include "Timecycle.h"
+#include "FileMgr.h"
+#include "Clock.h"
+#include "Weather.h"
+#include "TxdStore.h"
+#include "Renderer.h"
+#include "World.h"
+#include "custompipes.h"
+
+#ifndef LIBRW
+#error "Need librw for EXTENDED_PIPELINES"
+#endif
+
+namespace CustomPipes {
+
+static int32 u_viewVec;
+static int32 u_rampStart;
+static int32 u_rampEnd;
+static int32 u_rimData;
+
+static int32 u_lightMap;
+
+static int32 u_eye;
+static int32 u_reflProps;
+static int32 u_specDir;
+static int32 u_specColor;
+
+#define U(i) currentShader->uniformLocations[i]
+
+/*
+ * Neo Vehicle pipe
+ */
+
+rw::gl3::Shader *neoVehicleShader;
+
+static void
+uploadSpecLights(void)
+{
+ using namespace rw::gl3;
+
+ rw::RGBAf colors[1 + NUMEXTRADIRECTIONALS];
+ struct {
+ rw::V3d dir;
+ float power;
+ } dirs[1 + NUMEXTRADIRECTIONALS];
+ memset(colors, 0, sizeof(colors));
+ memset(dirs, 0, sizeof(dirs));
+ for(int i = 0; i < 1+NUMEXTRADIRECTIONALS; i++)
+ dirs[i].power = 1.0f;
+ float power = Power.Get();
+ Color speccol = SpecColor.Get();
+ colors[0].red = speccol.r;
+ colors[0].green = speccol.g;
+ colors[0].blue = speccol.b;
+ dirs[0].dir = pDirect->getFrame()->getLTM()->at;
+ dirs[0].power = power;
+ for(int i = 0; i < NUMEXTRADIRECTIONALS; i++){
+ if(pExtraDirectionals[i]->getFlags() & rw::Light::LIGHTATOMICS){
+ colors[1+i] = pExtraDirectionals[i]->color;
+ dirs[1+i].dir = pExtraDirectionals[i]->getFrame()->getLTM()->at;
+ dirs[1+i].power = power*2.0f;
+ }
+ }
+ glUniform4fv(U(u_specDir), 1 + NUMEXTRADIRECTIONALS, (float*)&dirs);
+ glUniform4fv(U(u_specColor), 1 + NUMEXTRADIRECTIONALS, (float*)&colors);
+}
+
+static void
+vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ // TODO: make this less of a kludge
+ if(VehiclePipeSwitch == VEHICLEPIPE_MATFX){
+ matFXGlobals.pipelines[rw::platform]->render(atomic);
+ return;
+ }
+
+ Material *m;
+
+ setWorldMatrix(atomic->getFrame()->getLTM());
+ lightingCB(atomic);
+
+#ifdef RW_GL_USE_VAOS
+ glBindVertexArray(header->vao);
+#else
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
+ glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
+ setAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+
+ InstanceData *inst = header->inst;
+ rw::int32 n = header->numMeshes;
+
+ neoVehicleShader->use();
+
+ V3d eyePos = rw::engine->currentCamera->getFrame()->getLTM()->pos;
+ glUniform3fv(U(u_eye), 1, (float*)&eyePos);
+
+ uploadSpecLights();
+
+ float reflProps[4];
+ reflProps[0] = Fresnel.Get();
+ reflProps[1] = SpecColor.Get().a;
+
+ setTexture(1, EnvMapTex);
+
+ SetRenderState(SRCBLEND, BLENDONE);
+
+ while(n--){
+ m = inst->material;
+
+ setMaterial(m->color, m->surfaceProps);
+
+ setTexture(0, m->texture);
+
+ rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
+
+ reflProps[2] = m->surfaceProps.specular * VehicleShininess;
+ reflProps[3] = m->surfaceProps.specular == 0.0f ? 0.0f : VehicleSpecularity;
+ glUniform4fv(U(u_reflProps), 1, reflProps);
+
+ drawInst(header, inst);
+ inst++;
+ }
+
+ SetRenderState(SRCBLEND, BLENDSRCALPHA);
+
+#ifndef RW_GL_USE_VAOS
+ disableAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+}
+
+void
+CreateVehiclePipe(void)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ if(CFileMgr::LoadFile("neo/carTweakingTable.dat", work_buff, sizeof(work_buff), "r") == 0)
+ printf("Error: couldn't open 'neo/carTweakingTable.dat'\n");
+ else{
+ char *fp = (char*)work_buff;
+ fp = ReadTweakValueTable(fp, Fresnel);
+ fp = ReadTweakValueTable(fp, Power);
+ fp = ReadTweakValueTable(fp, DiffColor);
+ fp = ReadTweakValueTable(fp, SpecColor);
+ }
+
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/neoVehicle_fs_gl2.inc"
+#include "gl2_shaders/neoVehicle_vs_gl2.inc"
+#else
+#include "shaders/neoVehicle_fs_gl3.inc"
+#include "shaders/neoVehicle_vs_gl3.inc"
+#endif
+ 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);
+ assert(neoVehicleShader);
+ }
+
+
+ rw::gl3::ObjPipeline *pipe = rw::gl3::ObjPipeline::create();
+ pipe->instanceCB = rw::gl3::defaultInstanceCB;
+ pipe->uninstanceCB = nil;
+ pipe->renderCB = vehicleRenderCB;
+ vehiclePipe = pipe;
+}
+
+void
+DestroyVehiclePipe(void)
+{
+ neoVehicleShader->destroy();
+ neoVehicleShader = nil;
+
+ ((rw::gl3::ObjPipeline*)vehiclePipe)->destroy();
+ vehiclePipe = nil;
+}
+
+
+
+/*
+ * Neo World pipe
+ */
+
+rw::gl3::Shader *neoWorldShader;
+
+static void
+worldRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ Material *m;
+
+ setWorldMatrix(atomic->getFrame()->getLTM());
+ lightingCB(atomic);
+
+#ifdef RW_GL_USE_VAOS
+ glBindVertexArray(header->vao);
+#else
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
+ glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
+ setAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+
+ InstanceData *inst = header->inst;
+ rw::int32 n = header->numMeshes;
+
+ neoWorldShader->use();
+
+ float lightfactor[4];
+
+ while(n--){
+ m = inst->material;
+
+ if(MatFX::getEffects(m) == MatFX::DUAL){
+ MatFX *matfx = MatFX::get(m);
+ Texture *dualtex = matfx->getDualTexture();
+ if(dualtex == nil)
+ goto notex;
+ setTexture(1, dualtex);
+ lightfactor[0] = lightfactor[1] = lightfactor[2] = WorldLightmapBlend.Get()*LightmapMult;
+ }else{
+ notex:
+ setTexture(1, nil);
+ lightfactor[0] = lightfactor[1] = lightfactor[2] = 0.0f;
+ }
+ lightfactor[3] = m->color.alpha/255.0f;
+ glUniform4fv(U(u_lightMap), 1, lightfactor);
+
+ RGBA color = { 255, 255, 255, m->color.alpha };
+ setMaterial(color, m->surfaceProps);
+
+ setTexture(0, m->texture);
+
+ rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
+
+ drawInst(header, inst);
+ inst++;
+ }
+#ifndef RW_GL_USE_VAOS
+ disableAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+}
+
+void
+CreateWorldPipe(void)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ if(CFileMgr::LoadFile("neo/worldTweakingTable.dat", work_buff, sizeof(work_buff), "r") == 0)
+ printf("Error: couldn't open 'neo/worldTweakingTable.dat'\n");
+ else
+ ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/neoWorldIII_fs_gl2.inc"
+#include "gl2_shaders/default_UV2_gl2.inc"
+#else
+#include "shaders/neoWorldVC_fs_gl3.inc"
+#include "shaders/default_UV2_gl3.inc"
+#endif
+ const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
+ const char *fs[] = { shaderDecl, header_frag_src, neoWorldVC_frag_src, nil };
+ neoWorldShader = Shader::create(vs, fs);
+ assert(neoWorldShader);
+ }
+
+
+ rw::gl3::ObjPipeline *pipe = rw::gl3::ObjPipeline::create();
+ pipe->instanceCB = rw::gl3::defaultInstanceCB;
+ pipe->uninstanceCB = nil;
+ pipe->renderCB = worldRenderCB;
+ worldPipe = pipe;
+}
+
+void
+DestroyWorldPipe(void)
+{
+ neoWorldShader->destroy();
+ neoWorldShader = nil;
+
+ ((rw::gl3::ObjPipeline*)worldPipe)->destroy();
+ worldPipe = nil;
+}
+
+
+
+
+/*
+ * Neo Gloss pipe
+ */
+
+rw::gl3::Shader *neoGlossShader;
+
+static void
+glossRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ worldRenderCB(atomic, header);
+
+ Material *m;
+
+#ifdef RW_GL_USE_VAOS
+ glBindVertexArray(header->vao);
+#else
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
+ glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
+ setAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+
+ InstanceData *inst = header->inst;
+ rw::int32 n = header->numMeshes;
+
+ neoGlossShader->use();
+
+ V3d eyePos = rw::engine->currentCamera->getFrame()->getLTM()->pos;
+ glUniform3fv(U(u_eye), 1, (float*)&eyePos);
+ glUniform4fv(U(u_reflProps), 1, (float*)&GlossMult);
+
+ SetRenderState(VERTEXALPHA, TRUE);
+ SetRenderState(SRCBLEND, BLENDONE);
+ SetRenderState(DESTBLEND, BLENDONE);
+ SetRenderState(ZWRITEENABLE, FALSE);
+ SetRenderState(ALPHATESTFUNC, ALPHAALWAYS);
+
+ while(n--){
+ m = inst->material;
+
+ RGBA color = { 255, 255, 255, m->color.alpha };
+ setMaterial(color, m->surfaceProps);
+
+ if(m->texture){
+ Texture *tex = GetGlossTex(m);
+ if(tex){
+ setTexture(0, tex);
+ drawInst(header, inst);
+ }
+ }
+ inst++;
+ }
+
+ SetRenderState(ZWRITEENABLE, TRUE);
+ SetRenderState(ALPHATESTFUNC, ALPHAGREATEREQUAL);
+ SetRenderState(SRCBLEND, BLENDSRCALPHA);
+ SetRenderState(DESTBLEND, BLENDINVSRCALPHA);
+
+#ifndef RW_GL_USE_VAOS
+ disableAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+}
+
+void
+CreateGlossPipe(void)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/neoGloss_fs_gl2.inc"
+#include "gl2_shaders/neoGloss_vs_gl2.inc"
+#else
+#include "shaders/neoGloss_fs_gl3.inc"
+#include "shaders/neoGloss_vs_gl3.inc"
+#endif
+ 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);
+ assert(neoGlossShader);
+ }
+
+ rw::gl3::ObjPipeline *pipe = rw::gl3::ObjPipeline::create();
+ pipe->instanceCB = rw::gl3::defaultInstanceCB;
+ pipe->uninstanceCB = nil;
+ pipe->renderCB = glossRenderCB;
+ glossPipe = pipe;
+}
+
+void
+DestroyGlossPipe(void)
+{
+ neoGlossShader->destroy();
+ neoGlossShader = nil;
+
+ ((rw::gl3::ObjPipeline*)glossPipe)->destroy();
+ glossPipe = nil;
+}
+
+
+
+/*
+ * Neo Rim pipes
+ */
+
+rw::gl3::Shader *neoRimShader;
+rw::gl3::Shader *neoRimSkinShader;
+
+static void
+uploadRimData(bool enable)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ V3d viewVec = rw::engine->currentCamera->getFrame()->getLTM()->at;
+ glUniform3fv(U(u_viewVec), 1, (float*)&viewVec);
+ float rimData[4];
+ rimData[0] = Offset.Get();
+ rimData[1] = Scale.Get();
+ if(enable)
+ rimData[2] = Scaling.Get()*RimlightMult;
+ else
+ rimData[2] = 0.0f;
+ rimData[3] = 0.0f;
+ glUniform3fv(U(u_rimData), 1, rimData);
+ Color col = RampStart.Get();
+ glUniform4fv(U(u_rampStart), 1, (float*)&col);
+ col = RampEnd.Get();
+ glUniform4fv(U(u_rampEnd), 1, (float*)&col);
+}
+
+static void
+rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ Material *m;
+
+ setWorldMatrix(atomic->getFrame()->getLTM());
+ lightingCB(atomic);
+
+#ifdef RW_GL_USE_VAOS
+ glBindVertexArray(header->vao);
+#else
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
+ glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
+ setAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+
+ InstanceData *inst = header->inst;
+ rw::int32 n = header->numMeshes;
+
+ neoRimSkinShader->use();
+
+ uploadRimData(atomic->geometry->flags & Geometry::LIGHT);
+
+ uploadSkinMatrices(atomic);
+
+ while(n--){
+ m = inst->material;
+
+ setMaterial(m->color, m->surfaceProps);
+
+ setTexture(0, m->texture);
+
+ rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
+
+ drawInst(header, inst);
+ inst++;
+ }
+#ifndef RW_GL_USE_VAOS
+ disableAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+}
+
+static void
+rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
+{
+ using namespace rw;
+ using namespace rw::gl3;
+
+ Material *m;
+
+ setWorldMatrix(atomic->getFrame()->getLTM());
+ lightingCB(atomic);
+
+#ifdef RW_GL_USE_VAOS
+ glBindVertexArray(header->vao);
+#else
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, header->ibo);
+ glBindBuffer(GL_ARRAY_BUFFER, header->vbo);
+ setAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+
+ InstanceData *inst = header->inst;
+ rw::int32 n = header->numMeshes;
+
+ neoRimShader->use();
+
+ uploadRimData(atomic->geometry->flags & Geometry::LIGHT);
+
+ while(n--){
+ m = inst->material;
+
+ setMaterial(m->color, m->surfaceProps);
+
+ setTexture(0, m->texture);
+
+ rw::SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 0xFF);
+
+ drawInst(header, inst);
+ inst++;
+ }
+#ifndef RW_GL_USE_VAOS
+ disableAttribPointers(header->attribDesc, header->numAttribs);
+#endif
+}
+
+void
+CreateRimLightPipes(void)
+{
+ using namespace rw::gl3;
+
+ if(CFileMgr::LoadFile("neo/rimTweakingTable.dat", work_buff, sizeof(work_buff), "r") == 0)
+ printf("Error: couldn't open 'neo/rimTweakingTable.dat'\n");
+ else{
+ char *fp = (char*)work_buff;
+ fp = ReadTweakValueTable(fp, RampStart);
+ fp = ReadTweakValueTable(fp, RampEnd);
+ fp = ReadTweakValueTable(fp, Offset);
+ fp = ReadTweakValueTable(fp, Scale);
+ fp = ReadTweakValueTable(fp, Scaling);
+ }
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/simple_fs_gl2.inc"
+#include "gl2_shaders/neoRimSkin_gl2.inc"
+#else
+#include "shaders/simple_fs_gl3.inc"
+#include "shaders/neoRimSkin_gl3.inc"
+#endif
+ 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);
+ assert(neoRimSkinShader);
+ }
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/simple_fs_gl2.inc"
+#include "gl2_shaders/neoRim_gl2.inc"
+#else
+#include "shaders/simple_fs_gl3.inc"
+#include "shaders/neoRim_gl3.inc"
+#endif
+ 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);
+ assert(neoRimShader);
+ }
+
+
+ rw::gl3::ObjPipeline *pipe = rw::gl3::ObjPipeline::create();
+ pipe->instanceCB = rw::gl3::defaultInstanceCB;
+ pipe->uninstanceCB = nil;
+ pipe->renderCB = rimRenderCB;
+ rimPipe = pipe;
+
+ pipe = rw::gl3::ObjPipeline::create();
+ pipe->instanceCB = rw::gl3::skinInstanceCB;
+ pipe->uninstanceCB = nil;
+ pipe->renderCB = rimSkinRenderCB;
+ rimSkinPipe = pipe;
+}
+
+void
+DestroyRimLightPipes(void)
+{
+ neoRimShader->destroy();
+ neoRimShader = nil;
+
+ neoRimSkinShader->destroy();
+ neoRimSkinShader = nil;
+
+ ((rw::gl3::ObjPipeline*)rimPipe)->destroy();
+ rimPipe = nil;
+
+ ((rw::gl3::ObjPipeline*)rimSkinPipe)->destroy();
+ rimSkinPipe = nil;
+}
+
+
+
+void
+CustomPipeRegisterGL(void)
+{
+ u_viewVec = rw::gl3::registerUniform("u_viewVec");
+ u_rampStart = rw::gl3::registerUniform("u_rampStart");
+ u_rampEnd = rw::gl3::registerUniform("u_rampEnd");
+ u_rimData = rw::gl3::registerUniform("u_rimData");
+
+ u_lightMap = rw::gl3::registerUniform("u_lightMap");
+
+ u_eye = rw::gl3::registerUniform("u_eye");
+ u_reflProps = rw::gl3::registerUniform("u_reflProps");
+ u_specDir = rw::gl3::registerUniform("u_specDir");
+ u_specColor = rw::gl3::registerUniform("u_specColor");
+}
+
+
+}
+
+#endif
+#endif
diff --git a/src/extras/postfx.cpp b/src/extras/postfx.cpp
new file mode 100644
index 00000000..7e9df4e7
--- /dev/null
+++ b/src/extras/postfx.cpp
@@ -0,0 +1,492 @@
+#define WITHWINDOWS
+#define WITH_D3D
+#include "common.h"
+
+#ifdef EXTENDED_COLOURFILTER
+
+#ifndef LIBRW
+#error "Need librw for EXTENDED_COLOURFILTER"
+#endif
+
+#include "RwHelper.h"
+#include "Camera.h"
+#include "MBlur.h"
+#include "postfx.h"
+
+RwRaster *CPostFX::pFrontBuffer;
+RwRaster *CPostFX::pBackBuffer;
+bool CPostFX::bJustInitialised;
+int CPostFX::EffectSwitch = POSTFX_NORMAL;
+bool CPostFX::BlurOn = false;
+bool CPostFX::MotionBlurOn = false;
+
+static RwIm2DVertex Vertex[4];
+static RwIm2DVertex Vertex2[4];
+static RwImVertexIndex Index[6] = { 0, 1, 2, 0, 2, 3 };
+
+#ifdef RW_D3D9
+void *colourfilterVC_PS;
+void *contrast_PS;
+#endif
+#ifdef RW_OPENGL
+int32 u_blurcolor;
+int32 u_contrastAdd;
+int32 u_contrastMult;
+rw::gl3::Shader *colourFilterVC;
+rw::gl3::Shader *contrast;
+#endif
+
+void
+CPostFX::InitOnce(void)
+{
+#ifdef RW_OPENGL
+ u_blurcolor = rw::gl3::registerUniform("u_blurcolor");
+ u_contrastAdd = rw::gl3::registerUniform("u_contrastAdd");
+ u_contrastMult = rw::gl3::registerUniform("u_contrastMult");
+#endif
+}
+
+void
+CPostFX::Open(RwCamera *cam)
+{
+ uint32 width = Pow(2.0f, int32(log2(RwRasterGetWidth (RwCameraGetRaster(cam))))+1);
+ uint32 height = Pow(2.0f, int32(log2(RwRasterGetHeight(RwCameraGetRaster(cam))))+1);
+ uint32 depth = RwRasterGetDepth(RwCameraGetRaster(cam));
+ pFrontBuffer = RwRasterCreate(width, height, depth, rwRASTERTYPECAMERATEXTURE);
+ pBackBuffer = RwRasterCreate(width, height, depth, rwRASTERTYPECAMERATEXTURE);
+ bJustInitialised = true;
+
+ float zero, xmax, ymax;
+
+ if(RwRasterGetDepth(RwCameraGetRaster(cam)) == 16){
+ zero = HALFPX;
+ xmax = width + HALFPX;
+ ymax = height + HALFPX;
+ }else{
+ zero = -HALFPX;
+ xmax = width - HALFPX;
+ ymax = height - HALFPX;
+ }
+
+ RwIm2DVertexSetScreenX(&Vertex[0], zero);
+ RwIm2DVertexSetScreenY(&Vertex[0], zero);
+ RwIm2DVertexSetScreenZ(&Vertex[0], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex[0], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex[0], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, 255);
+
+ RwIm2DVertexSetScreenX(&Vertex[1], zero);
+ RwIm2DVertexSetScreenY(&Vertex[1], ymax);
+ RwIm2DVertexSetScreenZ(&Vertex[1], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex[1], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex[1], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex[1], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, 255);
+
+ RwIm2DVertexSetScreenX(&Vertex[2], xmax);
+ RwIm2DVertexSetScreenY(&Vertex[2], ymax);
+ RwIm2DVertexSetScreenZ(&Vertex[2], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex[2], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex[2], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, 255);
+
+ RwIm2DVertexSetScreenX(&Vertex[3], xmax);
+ RwIm2DVertexSetScreenY(&Vertex[3], zero);
+ RwIm2DVertexSetScreenZ(&Vertex[3], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex[3], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex[3], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, 255);
+
+
+ RwIm2DVertexSetScreenX(&Vertex2[0], zero + 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[0], zero + 2.0f);
+ RwIm2DVertexSetScreenZ(&Vertex2[0], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex2[0], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex2[0], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex2[0], 255, 255, 255, 255);
+
+ RwIm2DVertexSetScreenX(&Vertex2[1], 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[1], ymax + 2.0f);
+ RwIm2DVertexSetScreenZ(&Vertex2[1], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex2[1], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex2[1], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex2[1], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex2[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex2[1], 255, 255, 255, 255);
+
+ RwIm2DVertexSetScreenX(&Vertex2[2], xmax + 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[2], ymax + 2.0f);
+ RwIm2DVertexSetScreenZ(&Vertex2[2], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex2[2], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex2[2], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex2[2], 255, 255, 255, 255);
+
+ RwIm2DVertexSetScreenX(&Vertex2[3], xmax + 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[3], zero + 2.0f);
+ RwIm2DVertexSetScreenZ(&Vertex2[3], RwIm2DGetNearScreenZ());
+ RwIm2DVertexSetCameraZ(&Vertex2[3], RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetRecipCameraZ(&Vertex2[3], 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetU(&Vertex2[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetV(&Vertex2[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
+ RwIm2DVertexSetIntRGBA(&Vertex2[3], 255, 255, 255, 255);
+
+
+#ifdef RW_D3D9
+#include "shaders/colourfilterVC_PS.inc"
+ colourfilterVC_PS = rw::d3d::createPixelShader(colourfilterVC_PS_cso);
+#include "shaders/contrastPS.inc"
+ contrast_PS = rw::d3d::createPixelShader(contrastPS_cso);
+#endif
+#ifdef RW_OPENGL
+ using namespace rw::gl3;
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/im2d_gl2.inc"
+#include "gl2_shaders/colourfilterVC_fs_gl2.inc"
+#else
+#include "shaders/im2d_gl3.inc"
+#include "shaders/colourfilterVC_fs_gl3.inc"
+#endif
+ const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
+ const char *fs[] = { shaderDecl, header_frag_src, colourfilterVC_frag_src, nil };
+ colourFilterVC = Shader::create(vs, fs);
+ assert(colourFilterVC);
+ }
+
+ {
+#ifdef RW_GLES2
+#include "gl2_shaders/im2d_gl2.inc"
+#include "gl2_shaders/contrast_fs_gl2.inc"
+#else
+#include "shaders/im2d_gl3.inc"
+#include "shaders/contrast_fs_gl3.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);
+ assert(contrast);
+#endif
+ }
+
+#endif
+}
+
+void
+CPostFX::Close(void)
+{
+ if(pFrontBuffer){
+ RwRasterDestroy(pFrontBuffer);
+ pFrontBuffer = nil;
+ }
+ if(pBackBuffer){
+ RwRasterDestroy(pBackBuffer);
+ pBackBuffer = nil;
+ }
+#ifdef RW_D3D9
+ if(colourfilterVC_PS){
+ rw::d3d::destroyPixelShader(colourfilterVC_PS);
+ colourfilterVC_PS = nil;
+ }
+ if(contrast_PS){
+ rw::d3d::destroyPixelShader(contrast_PS);
+ contrast_PS = nil;
+ }
+#endif
+#ifdef RW_OPENGL
+ if(colourFilterVC){
+ colourFilterVC->destroy();
+ colourFilterVC = nil;
+ }
+ if(contrast){
+ contrast->destroy();
+ contrast = nil;
+ }
+#endif
+}
+
+void
+CPostFX::RenderOverlayBlur(RwCamera *cam, int32 r, int32 g, int32 b, int32 a)
+{
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer);
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
+
+ RwIm2DVertexSetIntRGBA(&Vertex[0], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex[1], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex[2], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex[3], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex2[0], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex2[1], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex2[2], r*2, g*2, b*2, 30);
+ RwIm2DVertexSetIntRGBA(&Vertex2[3], r*2, g*2, b*2, 30);
+
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
+
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, BlurOn ? Vertex2 : Vertex, 4, Index, 6);
+
+
+ RwIm2DVertexSetIntRGBA(&Vertex2[0], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex2[1], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex2[2], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex2[3], r, g, b, a);
+ RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, a);
+
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
+
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6);
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, BlurOn ? Vertex2 : Vertex, 4, Index, 6);
+}
+
+void
+CPostFX::RenderOverlaySniper(RwCamera *cam, int32 r, int32 g, int32 b, int32 a)
+{
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer);
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
+
+ RwIm2DVertexSetIntRGBA(&Vertex[0], r, g, b, 80);
+ RwIm2DVertexSetIntRGBA(&Vertex[1], r, g, b, 80);
+ RwIm2DVertexSetIntRGBA(&Vertex[2], r, g, b, 80);
+ RwIm2DVertexSetIntRGBA(&Vertex[3], r, g, b, 80);
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
+
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6);
+}
+
+float CPostFX::Intensity = 1.0f;
+
+void
+CPostFX::RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a)
+{
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pBackBuffer);
+
+ if(EffectSwitch == POSTFX_MOBILE){
+ float mult[3], add[3];
+ mult[0] = (r-64)/256.0f + 1.4f;
+ mult[1] = (g-64)/256.0f + 1.4f;
+ mult[2] = (b-64)/256.0f + 1.4f;
+ add[0] = r/1536.f - 0.05f;
+ add[1] = g/1536.f - 0.05f;
+ add[2] = b/1536.f - 0.05f;
+#ifdef RW_D3D9
+ rw::d3d::d3ddevice->SetPixelShaderConstantF(10, mult, 1);
+ rw::d3d::d3ddevice->SetPixelShaderConstantF(11, add, 1);
+
+ rw::d3d::im2dOverridePS = contrast_PS;
+#endif
+#ifdef RW_OPENGL
+ rw::gl3::im2dOverrideShader = contrast;
+ contrast->use();
+ glUniform3fv(contrast->uniformLocations[u_contrastMult], 1, mult);
+ glUniform3fv(contrast->uniformLocations[u_contrastAdd], 1, add);
+#endif
+ }else{
+ float f = Intensity;
+ float blurcolors[4];
+ blurcolors[0] = r*f/255.0f;
+ blurcolors[1] = g*f/255.0f;
+ blurcolors[2] = b*f/255.0f;
+ blurcolors[3] = 30/255.0f;
+#ifdef RW_D3D9
+ rw::d3d::d3ddevice->SetPixelShaderConstantF(10, blurcolors, 1);
+ rw::d3d::im2dOverridePS = colourfilterVC_PS;
+#endif
+#ifdef RW_OPENGL
+ rw::gl3::im2dOverrideShader = colourFilterVC;
+ colourFilterVC->use();
+ glUniform4fv(colourFilterVC->uniformLocations[u_blurcolor], 1, blurcolors);
+#endif
+ }
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6);
+#ifdef RW_D3D9
+ rw::d3d::im2dOverridePS = nil;
+#endif
+#ifdef RW_OPENGL
+ rw::gl3::im2dOverrideShader = nil;
+#endif
+}
+
+void
+CPostFX::RenderMotionBlur(RwCamera *cam, uint32 blur)
+{
+ if(blur == 0)
+ return;
+
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, pFrontBuffer);
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
+
+ RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, blur);
+ RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, blur);
+ RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, blur);
+ RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, blur);
+
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6);
+}
+
+bool
+CPostFX::NeedBackBuffer(void)
+{
+ // Current frame -- needed for non-blur effect
+ switch(EffectSwitch){
+ case POSTFX_OFF:
+ case POSTFX_SIMPLE:
+ // no actual rendering here
+ return false;
+ case POSTFX_NORMAL:
+ if(MotionBlurOn)
+ return false;
+ else
+ return true;
+ case POSTFX_MOBILE:
+ return true;
+ }
+ return false;
+}
+
+bool
+CPostFX::NeedFrontBuffer(int32 type)
+{
+ // Last frame -- needed for motion blur
+ if(CMBlur::Drunkness > 0.0f)
+ return true;
+ if(type == MOTION_BLUR_SNIPER)
+ return true;
+
+ switch(EffectSwitch){
+ case POSTFX_OFF:
+ case POSTFX_SIMPLE:
+ // no actual rendering here
+ return false;
+ case POSTFX_NORMAL:
+ if(MotionBlurOn)
+ return true;
+ else
+ return false;
+ case POSTFX_MOBILE:
+ return false;
+ }
+ return false;
+}
+
+void
+CPostFX::Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha)
+{
+ if(pFrontBuffer == nil)
+ Open(cam);
+ assert(pFrontBuffer);
+ assert(pBackBuffer);
+
+ if(type == MOTION_BLUR_LIGHT_SCENE){
+ SmoothColor(red, green, blue, blur);
+ red = AvgRed;
+ green = AvgGreen;
+ blue = AvgBlue;
+ blur = AvgAlpha;
+ }
+
+ if(NeedBackBuffer()){
+ RwRasterPushContext(pBackBuffer);
+ RwRasterRenderFast(RwCameraGetRaster(cam), 0, 0);
+ RwRasterPopContext();
+ }
+
+ DefinedState();
+
+ RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE);
+ RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, (void*)rwFILTERNEAREST);
+ RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
+ RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
+
+ if(type == MOTION_BLUR_SNIPER){
+ if(!bJustInitialised)
+ RenderOverlaySniper(cam, red, green, blue, blur);
+ }else switch(EffectSwitch){
+ case POSTFX_OFF:
+ case POSTFX_SIMPLE:
+ // no actual rendering here
+ break;
+ case POSTFX_NORMAL:
+ if(MotionBlurOn){
+ if(!bJustInitialised)
+ RenderOverlayBlur(cam, red, green, blue, blur);
+ }else{
+ RenderOverlayShader(cam, red, green, blue, blur);
+ }
+ break;
+ case POSTFX_MOBILE:
+ RenderOverlayShader(cam, red, green, blue, blur);
+ break;
+ }
+
+ if(!bJustInitialised)
+ RenderMotionBlur(cam, 175.0f * CMBlur::Drunkness);
+
+ RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
+
+ if(NeedFrontBuffer(type)){
+ RwRasterPushContext(pFrontBuffer);
+ RwRasterRenderFast(RwCameraGetRaster(cam), 0, 0);
+ RwRasterPopContext();
+ bJustInitialised = false;
+ }else
+ bJustInitialised = true;
+}
+
+int CPostFX::PrevRed[NUMAVERAGE], CPostFX::AvgRed;
+int CPostFX::PrevGreen[NUMAVERAGE], CPostFX::AvgGreen;
+int CPostFX::PrevBlue[NUMAVERAGE], CPostFX::AvgBlue;
+int CPostFX::PrevAlpha[NUMAVERAGE], CPostFX::AvgAlpha;
+int CPostFX::Next;
+int CPostFX::NumValues;
+
+// This is rather annoying...the blur color can flicker slightly
+// which becomes very visible when amplified by the shader
+void
+CPostFX::SmoothColor(uint32 red, uint32 green, uint32 blue, uint32 alpha)
+{
+ PrevRed[Next] = red;
+ PrevGreen[Next] = green;
+ PrevBlue[Next] = blue;
+ PrevAlpha[Next] = alpha;
+ Next = (Next+1) % NUMAVERAGE;
+ NumValues = Min(NumValues+1, NUMAVERAGE);
+
+ AvgRed = 0;
+ AvgGreen = 0;
+ AvgBlue = 0;
+ AvgAlpha = 0;
+ for(int i = 0; i < NumValues; i++){
+ AvgRed += PrevRed[i];
+ AvgGreen += PrevGreen[i];
+ AvgBlue += PrevBlue[i];
+ AvgAlpha += PrevAlpha[i];
+ }
+ AvgRed /= NumValues;
+ AvgGreen /= NumValues;
+ AvgBlue /= NumValues;
+ AvgAlpha /= NumValues;
+}
+
+#endif
diff --git a/src/extras/postfx.h b/src/extras/postfx.h
new file mode 100644
index 00000000..ace2e4a8
--- /dev/null
+++ b/src/extras/postfx.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#ifdef EXTENDED_COLOURFILTER
+
+class CPostFX
+{
+public:
+ enum {
+ POSTFX_OFF,
+ POSTFX_SIMPLE,
+ POSTFX_NORMAL,
+ POSTFX_MOBILE
+ };
+ static RwRaster *pFrontBuffer;
+ static RwRaster *pBackBuffer;
+ static bool bJustInitialised;
+ static int EffectSwitch;
+ static bool BlurOn; // or use CMblur for that?
+ static bool MotionBlurOn; // or use CMblur for that?
+ static float Intensity;
+
+ // smooth blur color
+ enum { NUMAVERAGE = 20 };
+ static int PrevRed[NUMAVERAGE], AvgRed;
+ static int PrevGreen[NUMAVERAGE], AvgGreen;
+ static int PrevBlue[NUMAVERAGE], AvgBlue;
+ static int PrevAlpha[NUMAVERAGE], AvgAlpha;
+ static int Next;
+ static int NumValues;
+
+ static void InitOnce(void);
+ static void Open(RwCamera *cam);
+ static void Close(void);
+ static void RenderOverlayBlur(RwCamera *cam, int32 r, int32 g, int32 b, int32 a);
+ static void RenderOverlaySniper(RwCamera *cam, int32 r, int32 g, int32 b, int32 a);
+ static void RenderOverlayShader(RwCamera *cam, int32 r, int32 g, int32 b, int32 a);
+ static void RenderMotionBlur(RwCamera *cam, uint32 blur);
+ static void Render(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha);
+ static void SmoothColor(uint32 red, uint32 green, uint32 blue, uint32 alpha);
+ static bool NeedBackBuffer(void);
+ static bool NeedFrontBuffer(int32 type);
+ static bool UseBlurColours(void) { return EffectSwitch != POSTFX_SIMPLE; }
+};
+
+#endif
diff --git a/src/extras/shaders/Makefile b/src/extras/shaders/Makefile
new file mode 100644
index 00000000..605190c9
--- /dev/null
+++ b/src/extras/shaders/Makefile
@@ -0,0 +1,67 @@
+all: im2d_gl3.inc simple_fs_gl3.inc default_UV2_gl3.inc \
+ colourfilterVC_fs_gl3.inc contrast_fs_gl3.inc \
+ neoRim_gl3.inc neoRimSkin_gl3.inc \
+ neoWorldVC_fs_gl3.inc neoGloss_vs_gl3.inc neoGloss_fs_gl3.inc \
+ neoVehicle_vs_gl3.inc neoVehicle_fs_gl3.inc
+
+im2d_gl3.inc: im2d.vert
+ (echo 'const char *im2d_vert_src =';\
+ sed 's/..*/"&\\n"/' im2d.vert;\
+ echo ';') >im2d_gl3.inc
+
+colourfilterVC_fs_gl3.inc: colourfilterVC.frag
+ (echo 'const char *colourfilterVC_frag_src =';\
+ sed 's/..*/"&\\n"/' colourfilterVC.frag;\
+ echo ';') >colourfilterVC_fs_gl3.inc
+simple_fs_gl3.inc: simple.frag
+ (echo 'const char *simple_frag_src =';\
+ sed 's/..*/"&\\n"/' simple.frag;\
+ echo ';') >simple_fs_gl3.inc
+
+default_UV2_gl3.inc: default_UV2.vert
+ (echo 'const char *default_UV2_vert_src =';\
+ sed 's/..*/"&\\n"/' default_UV2.vert;\
+ echo ';') >default_UV2_gl3.inc
+
+
+
+contrast_fs_gl3.inc: contrast.frag
+ (echo 'const char *contrast_frag_src =';\
+ sed 's/..*/"&\\n"/' contrast.frag;\
+ echo ';') >contrast_fs_gl3.inc
+
+
+neoRim_gl3.inc: neoRim.vert
+ (echo 'const char *neoRim_vert_src =';\
+ sed 's/..*/"&\\n"/' neoRim.vert;\
+ echo ';') >neoRim_gl3.inc
+
+neoRimSkin_gl3.inc: neoRimSkin.vert
+ (echo 'const char *neoRimSkin_vert_src =';\
+ sed 's/..*/"&\\n"/' neoRimSkin.vert;\
+ echo ';') >neoRimSkin_gl3.inc
+
+neoWorldVC_fs_gl3.inc: neoWorldVC.frag
+ (echo 'const char *neoWorldVC_frag_src =';\
+ sed 's/..*/"&\\n"/' neoWorldVC.frag;\
+ echo ';') >neoWorldVC_fs_gl3.inc
+
+neoGloss_fs_gl3.inc: neoGloss.frag
+ (echo 'const char *neoGloss_frag_src =';\
+ sed 's/..*/"&\\n"/' neoGloss.frag;\
+ echo ';') >neoGloss_fs_gl3.inc
+
+neoGloss_vs_gl3.inc: neoGloss.vert
+ (echo 'const char *neoGloss_vert_src =';\
+ sed 's/..*/"&\\n"/' neoGloss.vert;\
+ echo ';') >neoGloss_vs_gl3.inc
+
+neoVehicle_vs_gl3.inc: neoVehicle.vert
+ (echo 'const char *neoVehicle_vert_src =';\
+ sed 's/..*/"&\\n"/' neoVehicle.vert;\
+ echo ';') >neoVehicle_vs_gl3.inc
+
+neoVehicle_fs_gl3.inc: neoVehicle.frag
+ (echo 'const char *neoVehicle_frag_src =';\
+ sed 's/..*/"&\\n"/' neoVehicle.frag;\
+ echo ';') >neoVehicle_fs_gl3.inc
diff --git a/src/extras/shaders/colourfilterVC.frag b/src/extras/shaders/colourfilterVC.frag
new file mode 100644
index 00000000..5069af52
--- /dev/null
+++ b/src/extras/shaders/colourfilterVC.frag
@@ -0,0 +1,26 @@
+uniform sampler2D tex0;
+uniform vec4 u_blurcolor;
+
+in vec4 v_color;
+in vec2 v_tex0;
+in float v_fog;
+
+out vec4 color;
+
+void
+main(void)
+{
+ float a = u_blurcolor.a;
+ vec4 doublec = clamp(u_blurcolor*2, 0.0, 1.0);
+ vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
+ vec4 prev = dst;
+ for(int i = 0; i < 5; i++){
+ vec4 tmp = dst*(1.0-a) + prev*doublec*a;
+ tmp += prev*u_blurcolor;
+ tmp += prev*u_blurcolor;
+ prev = clamp(tmp, 0.0, 1.0);
+ }
+ color.rgb = prev.rgb;
+ color.a = 1.0f;
+}
+
diff --git a/src/extras/shaders/colourfilterVC_PS.cso b/src/extras/shaders/colourfilterVC_PS.cso
new file mode 100644
index 00000000..4b0e9f3f
--- /dev/null
+++ b/src/extras/shaders/colourfilterVC_PS.cso
Binary files differ
diff --git a/src/extras/shaders/colourfilterVC_PS.hlsl b/src/extras/shaders/colourfilterVC_PS.hlsl
new file mode 100644
index 00000000..1e62950b
--- /dev/null
+++ b/src/extras/shaders/colourfilterVC_PS.hlsl
@@ -0,0 +1,23 @@
+sampler2D tex : register(s0);
+float4 blurcol : register(c10);
+
+//float4 blurcols[10] : register(c15);
+
+
+float4 main(in float2 texcoord : TEXCOORD0) : COLOR0
+{
+ float a = blurcol.a;
+
+ float4 doublec = saturate(blurcol*2);
+ float4 dst = tex2D(tex, texcoord.xy);
+ float4 prev = dst;
+ for(int i = 0; i < 5; i++){
+// float4 doublec = saturate(blurcol*2);
+ float4 tmp = dst*(1-a) + prev*doublec*a;
+ tmp += prev*blurcol;
+ tmp += prev*blurcol;
+ prev = saturate(tmp);
+ }
+ prev.a = 1.0f;
+ return prev;
+}
diff --git a/src/extras/shaders/colourfilterVC_PS.inc b/src/extras/shaders/colourfilterVC_PS.inc
new file mode 100644
index 00000000..daa18360
--- /dev/null
+++ b/src/extras/shaders/colourfilterVC_PS.inc
@@ -0,0 +1,56 @@
+static unsigned char colourfilterVC_PS_cso[] = {
+ 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x2b, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff,
+ 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x70, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00,
+ 0x01, 0x00, 0x2a, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
+ 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x6c, 0x75, 0x72,
+ 0x63, 0x6f, 0x6c, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x00,
+ 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d,
+ 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29,
+ 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72,
+ 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e,
+ 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00,
+ 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x03, 0xb0,
+ 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0,
+ 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0,
+ 0x00, 0x08, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x17, 0x80,
+ 0x0a, 0x00, 0xe4, 0xa0, 0x0a, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03,
+ 0x02, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x12, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xff, 0xa0,
+ 0x02, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x02, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x0a, 0x00, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x17, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0x00, 0xa0, 0x03, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x0a, 0x00, 0xe4, 0xa0, 0x12, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x80,
+ 0x0a, 0x00, 0xff, 0xa0, 0x03, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x17, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0x00, 0xa0, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x0a, 0x00, 0xe4, 0xa0, 0x12, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x80,
+ 0x0a, 0x00, 0xff, 0xa0, 0x03, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x17, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0x00, 0xa0, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x0a, 0x00, 0xe4, 0xa0, 0x12, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x80,
+ 0x0a, 0x00, 0xff, 0xa0, 0x03, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x17, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0x00, 0xa0, 0x04, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x0a, 0x00, 0xe4, 0xa0, 0x12, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80,
+ 0x0a, 0x00, 0xff, 0xa0, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x17, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0x00, 0xa0, 0x03, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x55, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/colourfilterVC_fs_gl3.inc b/src/extras/shaders/colourfilterVC_fs_gl3.inc
new file mode 100644
index 00000000..d11cdc5a
--- /dev/null
+++ b/src/extras/shaders/colourfilterVC_fs_gl3.inc
@@ -0,0 +1,28 @@
+const char *colourfilterVC_frag_src =
+"uniform sampler2D tex0;\n"
+"uniform vec4 u_blurcolor;\n"
+
+"in vec4 v_color;\n"
+"in vec2 v_tex0;\n"
+"in float v_fog;\n"
+
+"out vec4 color;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" float a = u_blurcolor.a;\n"
+" vec4 doublec = clamp(u_blurcolor*2, 0.0, 1.0);\n"
+" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
+" vec4 prev = dst;\n"
+" for(int i = 0; i < 5; i++){\n"
+" vec4 tmp = dst*(1.0-a) + prev*doublec*a;\n"
+" tmp += prev*u_blurcolor;\n"
+" tmp += prev*u_blurcolor;\n"
+" prev = clamp(tmp, 0.0, 1.0);\n"
+" }\n"
+" color.rgb = prev.rgb;\n"
+" color.a = 1.0f;\n"
+"}\n"
+
+;
diff --git a/src/extras/shaders/contrast.frag b/src/extras/shaders/contrast.frag
new file mode 100644
index 00000000..d6dec478
--- /dev/null
+++ b/src/extras/shaders/contrast.frag
@@ -0,0 +1,18 @@
+uniform sampler2D tex0;
+uniform vec3 u_contrastAdd;
+uniform vec3 u_contrastMult;
+
+in vec4 v_color;
+in vec2 v_tex0;
+in float v_fog;
+
+out vec4 color;
+
+void
+main(void)
+{
+ vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
+ color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;
+ color.a = 1.0f;
+}
+
diff --git a/src/extras/shaders/contrastPS.cso b/src/extras/shaders/contrastPS.cso
new file mode 100644
index 00000000..a87c48d7
--- /dev/null
+++ b/src/extras/shaders/contrastPS.cso
Binary files differ
diff --git a/src/extras/shaders/contrastPS.hlsl b/src/extras/shaders/contrastPS.hlsl
new file mode 100644
index 00000000..a1de1d81
--- /dev/null
+++ b/src/extras/shaders/contrastPS.hlsl
@@ -0,0 +1,21 @@
+struct PS_INPUT
+{
+ float4 position : POSITION;
+ float3 texcoord0 : TEXCOORD0;
+ float4 color : COLOR0;
+};
+
+uniform float3 contrastMult : register(c10);
+uniform float3 contrastAdd : register(c11);
+
+sampler2D tex : register(s0);
+
+float4
+main(PS_INPUT In) : COLOR
+{
+ float4 dst = tex2D(tex, In.texcoord0.xy);
+
+ dst.rgb = dst.rgb*contrastMult + contrastAdd;
+ dst.a = 1.0;
+ return dst;
+}
diff --git a/src/extras/shaders/contrastPS.inc b/src/extras/shaders/contrastPS.inc
new file mode 100644
index 00000000..5386792f
--- /dev/null
+++ b/src/extras/shaders/contrastPS.inc
@@ -0,0 +1,31 @@
+static unsigned char contrastPS_cso[] = {
+ 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x35, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x98, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0b, 0x00,
+ 0x01, 0x00, 0x2e, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x00, 0x01, 0x00, 0x2a, 0x00,
+ 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x88, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x73, 0x74,
+ 0x41, 0x64, 0x64, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6e, 0x74,
+ 0x72, 0x61, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x00, 0x74, 0x65, 0x78,
+ 0x00, 0xab, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x32,
+ 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68,
+ 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
+ 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33,
+ 0x31, 0x31, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05, 0x00, 0x00, 0x0f, 0xa0,
+ 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90,
+ 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x0b, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80,
+ 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/contrast_fs_gl3.inc b/src/extras/shaders/contrast_fs_gl3.inc
new file mode 100644
index 00000000..58aaf079
--- /dev/null
+++ b/src/extras/shaders/contrast_fs_gl3.inc
@@ -0,0 +1,20 @@
+const char *contrast_frag_src =
+"uniform sampler2D tex0;\n"
+"uniform vec3 u_contrastAdd;\n"
+"uniform vec3 u_contrastMult;\n"
+
+"in vec4 v_color;\n"
+"in vec2 v_tex0;\n"
+"in float v_fog;\n"
+
+"out vec4 color;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
+" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n"
+" color.a = 1.0f;\n"
+"}\n"
+
+;
diff --git a/src/extras/shaders/default_UV2.vert b/src/extras/shaders/default_UV2.vert
new file mode 100644
index 00000000..3dbad20f
--- /dev/null
+++ b/src/extras/shaders/default_UV2.vert
@@ -0,0 +1,29 @@
+layout(location = 0) in vec3 in_pos;
+layout(location = 1) in vec3 in_normal;
+layout(location = 2) in vec4 in_color;
+layout(location = 3) in vec2 in_tex0;
+layout(location = 4) in vec2 in_tex1;
+
+out vec4 v_color;
+out vec2 v_tex0;
+out vec2 v_tex1;
+out float v_fog;
+
+void
+main(void)
+{
+ vec4 Vertex = u_world * vec4(in_pos, 1.0);
+ gl_Position = u_proj * u_view * Vertex;
+ vec3 Normal = mat3(u_world) * in_normal;
+
+ v_tex0 = in_tex0;
+ v_tex1 = in_tex1;
+
+ v_color = in_color;
+ v_color.rgb += u_ambLight.rgb*surfAmbient;
+ v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;
+ v_color = clamp(v_color, 0.0, 1.0);
+ v_color *= u_matColor;
+
+ v_fog = DoFog(gl_Position.w);
+}
diff --git a/src/extras/shaders/default_UV2_VS.cso b/src/extras/shaders/default_UV2_VS.cso
new file mode 100644
index 00000000..5a48c663
--- /dev/null
+++ b/src/extras/shaders/default_UV2_VS.cso
Binary files differ
diff --git a/src/extras/shaders/default_UV2_VS.hlsl b/src/extras/shaders/default_UV2_VS.hlsl
new file mode 100644
index 00000000..e78a9907
--- /dev/null
+++ b/src/extras/shaders/default_UV2_VS.hlsl
@@ -0,0 +1,54 @@
+#include "standardConstants.h"
+
+struct VS_in
+{
+ float4 Position : POSITION;
+ float3 Normal : NORMAL;
+ float2 TexCoord : TEXCOORD0;
+ float2 TexCoord1 : TEXCOORD1;
+ float4 Prelight : COLOR0;
+};
+
+struct VS_out {
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0; // also fog
+ float2 TexCoord1 : TEXCOORD1;
+ float4 Color : COLOR0;
+};
+
+
+VS_out main(in VS_in input)
+{
+ VS_out output;
+
+ output.Position = mul(combinedMat, input.Position);
+ float3 Vertex = mul(worldMat, input.Position).xyz;
+ float3 Normal = mul(normalMat, input.Normal);
+
+ output.TexCoord0.xy = input.TexCoord;
+ output.TexCoord1.xy = input.TexCoord1;
+
+ output.Color = input.Prelight;
+ output.Color.rgb += ambientLight.rgb * surfAmbient;
+
+ int i;
+#ifdef DIRECTIONALS
+ for(i = 0; i < numDirLights; i++)
+ output.Color.xyz += DoDirLight(lights[i+firstDirLight], Normal)*surfDiffuse;
+#endif
+#ifdef POINTLIGHTS
+ for(i = 0; i < numPointLights; i++)
+ output.Color.xyz += DoPointLight(lights[i+firstPointLight], Vertex.xyz, Normal)*surfDiffuse;
+#endif
+#ifdef SPOTLIGHTS
+ for(i = 0; i < numSpotLights; i++)
+ output.Color.xyz += DoSpotLight(lights[i+firstSpotLight], Vertex.xyz, Normal)*surfDiffuse;
+#endif
+ // PS2 clamps before material color
+ output.Color = clamp(output.Color, 0.0, 1.0);
+ output.Color *= matCol;
+
+ output.TexCoord0.z = clamp((output.Position.w - fogEnd)*fogRange, fogDisable, 1.0);
+
+ return output;
+}
diff --git a/src/extras/shaders/default_UV2_VS.inc b/src/extras/shaders/default_UV2_VS.inc
new file mode 100644
index 00000000..de832107
--- /dev/null
+++ b/src/extras/shaders/default_UV2_VS.inc
@@ -0,0 +1,55 @@
+static unsigned char default_UV2_VS_cso[] = {
+ 0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, 0x45, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff,
+ 0x05, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xd5, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0f, 0x00,
+ 0x01, 0x00, 0x3e, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00,
+ 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x3a, 0x00, 0x90, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00,
+ 0x01, 0x00, 0x32, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xcb, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x36, 0x00,
+ 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x6d, 0x62, 0x69,
+ 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x00, 0xab, 0xab, 0xab,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64,
+ 0x4d, 0x61, 0x74, 0x00, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x44,
+ 0x61, 0x74, 0x61, 0x00, 0x6d, 0x61, 0x74, 0x43, 0x6f, 0x6c, 0x00, 0x73,
+ 0x75, 0x72, 0x66, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x00, 0x76, 0x73, 0x5f,
+ 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66,
+ 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53,
+ 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c,
+ 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e,
+ 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05,
+ 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x05, 0x00, 0x01, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x0a, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x07, 0x80, 0x0f, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x0d, 0x00, 0x00, 0xa0,
+ 0x03, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80,
+ 0x03, 0x00, 0xff, 0x90, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x55, 0xa0,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xd0, 0x00, 0x00, 0xe4, 0x80,
+ 0x0c, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80,
+ 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80, 0x0e, 0x00, 0x55, 0xa1,
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0xe4, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80,
+ 0x0e, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x55, 0xa0,
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe0, 0x01, 0x00, 0xe4, 0x90,
+ 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90,
+ 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/default_UV2_gl3.inc b/src/extras/shaders/default_UV2_gl3.inc
new file mode 100644
index 00000000..14106b29
--- /dev/null
+++ b/src/extras/shaders/default_UV2_gl3.inc
@@ -0,0 +1,31 @@
+const char *default_UV2_vert_src =
+"layout(location = 0) in vec3 in_pos;\n"
+"layout(location = 1) in vec3 in_normal;\n"
+"layout(location = 2) in vec4 in_color;\n"
+"layout(location = 3) in vec2 in_tex0;\n"
+"layout(location = 4) in vec2 in_tex1;\n"
+
+"out vec4 v_color;\n"
+"out vec2 v_tex0;\n"
+"out vec2 v_tex1;\n"
+"out float v_fog;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
+" gl_Position = u_proj * u_view * Vertex;\n"
+" vec3 Normal = mat3(u_world) * in_normal;\n"
+
+" v_tex0 = in_tex0;\n"
+" v_tex1 = in_tex1;\n"
+
+" v_color = in_color;\n"
+" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
+" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
+" v_color = clamp(v_color, 0.0, 1.0);\n"
+" v_color *= u_matColor;\n"
+
+" v_fog = DoFog(gl_Position.w);\n"
+"}\n"
+;
diff --git a/src/extras/shaders/im2d.vert b/src/extras/shaders/im2d.vert
new file mode 100644
index 00000000..241593b1
--- /dev/null
+++ b/src/extras/shaders/im2d.vert
@@ -0,0 +1,21 @@
+uniform vec4 u_xform;
+
+layout(location = 0) in vec4 in_pos;
+layout(location = 2) in vec4 in_color;
+layout(location = 3) in vec2 in_tex0;
+
+out vec4 v_color;
+out vec2 v_tex0;
+out float v_fog;
+
+void
+main(void)
+{
+ gl_Position = in_pos;
+ gl_Position.w = 1.0;
+ gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;
+ v_fog = DoFog(gl_Position.z);
+ gl_Position.xyz *= gl_Position.w;
+ v_color = in_color;
+ v_tex0 = in_tex0;
+}
diff --git a/src/extras/shaders/im2d_gl3.inc b/src/extras/shaders/im2d_gl3.inc
new file mode 100644
index 00000000..68341b39
--- /dev/null
+++ b/src/extras/shaders/im2d_gl3.inc
@@ -0,0 +1,23 @@
+const char *im2d_vert_src =
+"uniform vec4 u_xform;\n"
+
+"layout(location = 0) in vec4 in_pos;\n"
+"layout(location = 2) in vec4 in_color;\n"
+"layout(location = 3) in vec2 in_tex0;\n"
+
+"out vec4 v_color;\n"
+"out vec2 v_tex0;\n"
+"out float v_fog;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" gl_Position = in_pos;\n"
+" gl_Position.w = 1.0;\n"
+" gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;\n"
+" v_fog = DoFog(gl_Position.z);\n"
+" gl_Position.xyz *= gl_Position.w;\n"
+" v_color = in_color;\n"
+" v_tex0 = in_tex0;\n"
+"}\n"
+;
diff --git a/src/extras/shaders/lighting.h b/src/extras/shaders/lighting.h
new file mode 100644
index 00000000..4b081962
--- /dev/null
+++ b/src/extras/shaders/lighting.h
@@ -0,0 +1,44 @@
+struct Light
+{
+ float4 color; // and radius
+ float4 position; // and -cos(angle)
+ float4 direction; // and falloff clamp
+};
+
+float3 DoDirLight(Light L, float3 N)
+{
+ float l = max(0.0, dot(N, -L.direction.xyz));
+ return l*L.color.xyz;
+}
+
+float3 DoDirLightSpec(Light L, float3 N, float3 V, float power)
+{
+ return pow(saturate(dot(N, normalize(V + -L.direction.xyz))), power)*L.color.xyz;
+}
+
+float3 DoPointLight(Light L, float3 V, float3 N)
+{
+ // As on PS2
+ float3 dir = V - L.position.xyz;
+ float dist = length(dir);
+ float atten = max(0.0, (1.0 - dist/L.color.w));
+ float l = max(0.0, dot(N, -normalize(dir)));
+ return l*L.color.xyz*atten;
+}
+
+float3 DoSpotLight(Light L, float3 V, float3 N)
+{
+ // As on PS2
+ float3 dir = V - L.position.xyz;
+ float dist = length(dir);
+ float atten = max(0.0, (1.0 - dist/L.color.w));
+ dir /= dist;
+ float l = max(0.0, dot(N, -dir));
+ float pcos = dot(dir, L.direction.xyz); // cos to point
+ float ccos = -L.position.w; // cos of cone
+ float falloff = (pcos-ccos)/(1.0-ccos);
+ if(falloff < 0) // outside of cone
+ l = 0;
+ l *= max(falloff, L.direction.w); // falloff clamp
+ return l*L.color.xyz*atten;
+}
diff --git a/src/extras/shaders/make.cmd b/src/extras/shaders/make.cmd
new file mode 100644
index 00000000..8404ac6c
--- /dev/null
+++ b/src/extras/shaders/make.cmd
@@ -0,0 +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
diff --git a/src/extras/shaders/makeinc.sh b/src/extras/shaders/makeinc.sh
new file mode 100644
index 00000000..a649af33
--- /dev/null
+++ b/src/extras/shaders/makeinc.sh
@@ -0,0 +1,5 @@
+#!sh
+for i in *cso; do
+ (echo -n 'static '
+ xxd -i $i | grep -v '_len = ') > ${i%cso}inc
+done
diff --git a/src/extras/shaders/neoGloss.frag b/src/extras/shaders/neoGloss.frag
new file mode 100644
index 00000000..14ef0e15
--- /dev/null
+++ b/src/extras/shaders/neoGloss.frag
@@ -0,0 +1,26 @@
+uniform sampler2D tex0;
+
+uniform vec4 u_reflProps;
+
+#define glossMult (u_reflProps.x)
+
+in vec3 v_normal;
+in vec3 v_light;
+in vec2 v_tex0;
+in float v_fog;
+
+out vec4 color;
+
+void
+main(void)
+{
+ color = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
+ vec3 n = 2.0*v_normal-1.0; // unpack
+ vec3 v = 2.0*v_light-1.0; //
+
+ float s = dot(n, v);
+ color = s*s*s*s*s*s*s*s*color*v_fog*glossMult;
+
+ DoAlphaTest(color.a);
+}
+
diff --git a/src/extras/shaders/neoGloss.vert b/src/extras/shaders/neoGloss.vert
new file mode 100644
index 00000000..78dd1b33
--- /dev/null
+++ b/src/extras/shaders/neoGloss.vert
@@ -0,0 +1,29 @@
+uniform vec3 u_eye;
+
+
+layout(location = 0) in vec3 in_pos;
+layout(location = 1) in vec3 in_normal;
+layout(location = 2) in vec4 in_color;
+layout(location = 3) in vec2 in_tex0;
+
+out vec3 v_normal;
+out vec3 v_light;
+out vec2 v_tex0;
+out float v_fog;
+
+void
+main(void)
+{
+ vec4 Vertex = u_world * vec4(in_pos, 1.0);
+ gl_Position = u_proj * u_view * Vertex;
+ vec3 Normal = mat3(u_world) * in_normal;
+
+ v_tex0 = in_tex0;
+
+ vec3 viewVec = normalize(u_eye - Vertex.xyz);
+ vec3 Light = normalize(viewVec - u_lightDirection[0].xyz);
+ v_normal = 0.5*(1.0 + vec3(0.0, 0.0, 1.0)); // compress
+ v_light = 0.5*(1.0 + Light); //
+
+ v_fog = DoFog(gl_Position.w);
+}
diff --git a/src/extras/shaders/neoGloss_PS.cso b/src/extras/shaders/neoGloss_PS.cso
new file mode 100644
index 00000000..aa88e450
--- /dev/null
+++ b/src/extras/shaders/neoGloss_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoGloss_PS.hlsl b/src/extras/shaders/neoGloss_PS.hlsl
new file mode 100644
index 00000000..b3c97639
--- /dev/null
+++ b/src/extras/shaders/neoGloss_PS.hlsl
@@ -0,0 +1,20 @@
+sampler2D tex0 : register(s0);
+float glossMult : register(c1);
+
+struct VS_out
+{
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0;
+ float3 Normal : COLOR0;
+ float3 Light : COLOR1;
+};
+
+float4 main(VS_out input) : COLOR
+{
+ float4 color = tex2D(tex0, input.TexCoord0.xy);
+ float3 n = 2.0*input.Normal-1.0; // unpack
+ float3 v = 2.0*input.Light-1.0; //
+
+ float s = dot(n, v);
+ return s*s*s*s*s*s*s*s*color*input.TexCoord0.z*glossMult;
+}
diff --git a/src/extras/shaders/neoGloss_PS.inc b/src/extras/shaders/neoGloss_PS.inc
new file mode 100644
index 00000000..97e5641d
--- /dev/null
+++ b/src/extras/shaders/neoGloss_PS.inc
@@ -0,0 +1,39 @@
+static unsigned char neoGloss_PS_cso[] = {
+ 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x2d, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff,
+ 0x02, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x78, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x06, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
+ 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x6c, 0x6f, 0x73,
+ 0x73, 0x4d, 0x75, 0x6c, 0x74, 0x00, 0xab, 0xab, 0x00, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x65, 0x78, 0x30, 0x00, 0xab, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f,
+ 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53,
+ 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d,
+ 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39,
+ 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0x51, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0xb0, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x07, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x00, 0x00, 0x00, 0xa0,
+ 0x00, 0x00, 0x55, 0xa0, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0xaa, 0xb0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x08, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoGloss_VS.cso b/src/extras/shaders/neoGloss_VS.cso
new file mode 100644
index 00000000..9635b8b7
--- /dev/null
+++ b/src/extras/shaders/neoGloss_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoGloss_VS.hlsl b/src/extras/shaders/neoGloss_VS.hlsl
new file mode 100644
index 00000000..d166171c
--- /dev/null
+++ b/src/extras/shaders/neoGloss_VS.hlsl
@@ -0,0 +1,35 @@
+#include "standardConstants.h"
+
+struct VS_in
+{
+ float4 Position : POSITION;
+ float2 TexCoord : TEXCOORD0;
+};
+
+struct VS_out
+{
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0;
+ float3 Normal : COLOR0;
+ float3 Light : COLOR1;
+};
+
+float3 eye : register(c41);
+
+VS_out main(in VS_in input)
+{
+ VS_out output;
+
+ output.Position = mul(combinedMat, input.Position);
+ float3 Vertex = mul(worldMat, input.Position).xyz;
+ output.TexCoord0.xy = input.TexCoord;
+
+ float3 viewVec = normalize(eye - Vertex);
+ float3 Light = normalize(viewVec - lights[0].direction.xyz);
+ output.Normal = 0.5*(1.0 + float3(0.0, 0.0, 1.0)); // compress
+ output.Light = 0.5*(1.0 + Light); //
+
+ output.TexCoord0.z = clamp((output.Position.w - fogEnd)*fogRange, fogDisable, 1.0);
+
+ return output;
+}
diff --git a/src/extras/shaders/neoGloss_VS.inc b/src/extras/shaders/neoGloss_VS.inc
new file mode 100644
index 00000000..1ec03761
--- /dev/null
+++ b/src/extras/shaders/neoGloss_VS.inc
@@ -0,0 +1,66 @@
+static unsigned char neoGloss_VS_cso[] = {
+ 0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, 0x5b, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff,
+ 0x05, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x2d, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x02, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x9c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x29, 0x00, 0x01, 0x00, 0xa6, 0x00,
+ 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x3a, 0x00, 0xb8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x11, 0x00,
+ 0x03, 0x00, 0x4e, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x01, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x12, 0x00,
+ 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x74, 0x00, 0x03, 0x00, 0x03, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x65, 0x79, 0x65, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x44,
+ 0x61, 0x74, 0x61, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x69, 0x67, 0x68,
+ 0x74, 0x73, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0xab, 0xab,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0xab,
+ 0xcf, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00,
+ 0xd8, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x03, 0x00,
+ 0xfc, 0x00, 0x00, 0x00, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x4d, 0x61, 0x74,
+ 0x00, 0x76, 0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72,
+ 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c,
+ 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f,
+ 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e,
+ 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0xab, 0xab,
+ 0x51, 0x00, 0x00, 0x05, 0x08, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x80, 0x3f,
+ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90,
+ 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x55, 0x90,
+ 0x05, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80,
+ 0x04, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x06, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x07, 0x80, 0x07, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80,
+ 0x00, 0x00, 0xe4, 0x81, 0x29, 0x00, 0xe4, 0xa0, 0x24, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x13, 0x00, 0xe4, 0xa1,
+ 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x08, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0xd0,
+ 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x55, 0xa0, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80,
+ 0x03, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x90, 0x00, 0x00, 0xe4, 0x80,
+ 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80,
+ 0x0e, 0x00, 0x55, 0xa1, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0f, 0xc0,
+ 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xa0,
+ 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x80,
+ 0x08, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe0,
+ 0x01, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0xd0,
+ 0x08, 0x00, 0xc5, 0xa0, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoGloss_fs_gl3.inc b/src/extras/shaders/neoGloss_fs_gl3.inc
new file mode 100644
index 00000000..736b0c5d
--- /dev/null
+++ b/src/extras/shaders/neoGloss_fs_gl3.inc
@@ -0,0 +1,28 @@
+const char *neoGloss_frag_src =
+"uniform sampler2D tex0;\n"
+
+"uniform vec4 u_reflProps;\n"
+
+"#define glossMult (u_reflProps.x)\n"
+
+"in vec3 v_normal;\n"
+"in vec3 v_light;\n"
+"in vec2 v_tex0;\n"
+"in float v_fog;\n"
+
+"out vec4 color;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" color = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
+" vec3 n = 2.0*v_normal-1.0; // unpack\n"
+" vec3 v = 2.0*v_light-1.0; //\n"
+
+" float s = dot(n, v);\n"
+" color = s*s*s*s*s*s*s*s*color*v_fog*glossMult;\n"
+
+" DoAlphaTest(color.a);\n"
+"}\n"
+
+;
diff --git a/src/extras/shaders/neoGloss_vs_gl3.inc b/src/extras/shaders/neoGloss_vs_gl3.inc
new file mode 100644
index 00000000..4adc9cb2
--- /dev/null
+++ b/src/extras/shaders/neoGloss_vs_gl3.inc
@@ -0,0 +1,31 @@
+const char *neoGloss_vert_src =
+"uniform vec3 u_eye;\n"
+
+
+"layout(location = 0) in vec3 in_pos;\n"
+"layout(location = 1) in vec3 in_normal;\n"
+"layout(location = 2) in vec4 in_color;\n"
+"layout(location = 3) in vec2 in_tex0;\n"
+
+"out vec3 v_normal;\n"
+"out vec3 v_light;\n"
+"out vec2 v_tex0;\n"
+"out float v_fog;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
+" gl_Position = u_proj * u_view * Vertex;\n"
+" vec3 Normal = mat3(u_world) * in_normal;\n"
+
+" v_tex0 = in_tex0;\n"
+
+" vec3 viewVec = normalize(u_eye - Vertex.xyz);\n"
+" vec3 Light = normalize(viewVec - u_lightDirection[0].xyz);\n"
+" v_normal = 0.5*(1.0 + vec3(0.0, 0.0, 1.0)); // compress\n"
+" v_light = 0.5*(1.0 + Light); //\n"
+
+" v_fog = DoFog(gl_Position.w);\n"
+"}\n"
+;
diff --git a/src/extras/shaders/neoRim.vert b/src/extras/shaders/neoRim.vert
new file mode 100644
index 00000000..4a2b545f
--- /dev/null
+++ b/src/extras/shaders/neoRim.vert
@@ -0,0 +1,37 @@
+uniform vec3 u_viewVec;
+uniform vec4 u_rampStart;
+uniform vec4 u_rampEnd;
+uniform vec3 u_rimData;
+
+layout(location = 0) in vec3 in_pos;
+layout(location = 1) in vec3 in_normal;
+layout(location = 2) in vec4 in_color;
+layout(location = 3) in vec2 in_tex0;
+
+out vec4 v_color;
+out vec2 v_tex0;
+out float v_fog;
+
+void
+main(void)
+{
+ vec4 Vertex = u_world * vec4(in_pos, 1.0);
+ gl_Position = u_proj * u_view * Vertex;
+ vec3 Normal = mat3(u_world) * in_normal;
+
+ v_tex0 = in_tex0;
+
+ v_color = in_color;
+ v_color.rgb += u_ambLight.rgb*surfAmbient;
+ v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;
+
+ // rim light
+ float f = u_rimData.x - u_rimData.y*dot(Normal, u_viewVec);
+ vec4 rimlight = clamp(mix(u_rampEnd, u_rampStart, f)*u_rimData.z, 0.0, 1.0);
+ v_color.rgb += rimlight.rgb;
+
+ v_color = clamp(v_color, 0.0, 1.0);
+ v_color *= u_matColor;
+
+ v_fog = DoFog(gl_Position.w);
+}
diff --git a/src/extras/shaders/neoRimSkin.vert b/src/extras/shaders/neoRimSkin.vert
new file mode 100644
index 00000000..f16f2310
--- /dev/null
+++ b/src/extras/shaders/neoRimSkin.vert
@@ -0,0 +1,48 @@
+uniform mat4 u_boneMatrices[64];
+
+uniform vec3 u_viewVec;
+uniform vec4 u_rampStart;
+uniform vec4 u_rampEnd;
+uniform vec3 u_rimData;
+
+layout(location = 0) in vec3 in_pos;
+layout(location = 1) in vec3 in_normal;
+layout(location = 2) in vec4 in_color;
+layout(location = 3) in vec2 in_tex0;
+layout(location = 11) in vec4 in_weights;
+layout(location = 12) in vec4 in_indices;
+
+out vec4 v_color;
+out vec2 v_tex0;
+out float v_fog;
+
+void
+main(void)
+{
+ vec3 SkinVertex = vec3(0.0, 0.0, 0.0);
+ vec3 SkinNormal = vec3(0.0, 0.0, 0.0);
+ for(int i = 0; i < 4; i++){
+ SkinVertex += (u_boneMatrices[int(in_indices[i])] * vec4(in_pos, 1.0)).xyz * in_weights[i];
+ SkinNormal += (mat3(u_boneMatrices[int(in_indices[i])]) * in_normal) * in_weights[i];
+ }
+
+ vec4 Vertex = u_world * vec4(SkinVertex, 1.0);
+ gl_Position = u_proj * u_view * Vertex;
+ vec3 Normal = mat3(u_world) * SkinNormal;
+
+ v_tex0 = in_tex0;
+
+ v_color = in_color;
+ v_color.rgb += u_ambLight.rgb*surfAmbient;
+ v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;
+
+ // rim light
+ float f = u_rimData.x - u_rimData.y*dot(Normal, u_viewVec);
+ vec4 rimlight = clamp(mix(u_rampEnd, u_rampStart, f)*u_rimData.z, 0.0, 1.0);
+ v_color.rgb += rimlight.rgb;
+
+ v_color = clamp(v_color, 0.0, 1.0);
+ v_color *= u_matColor;
+
+ v_fog = DoFog(gl_Position.z);
+}
diff --git a/src/extras/shaders/neoRimSkin_VS.cso b/src/extras/shaders/neoRimSkin_VS.cso
new file mode 100644
index 00000000..8410504e
--- /dev/null
+++ b/src/extras/shaders/neoRimSkin_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoRimSkin_VS.hlsl b/src/extras/shaders/neoRimSkin_VS.hlsl
new file mode 100644
index 00000000..87cc0931
--- /dev/null
+++ b/src/extras/shaders/neoRimSkin_VS.hlsl
@@ -0,0 +1,73 @@
+#include "standardConstants.h"
+
+float4x3 boneMatrices[64] : register(c41);
+
+struct VS_in
+{
+ float4 Position : POSITION;
+ float3 Normal : NORMAL;
+ float2 TexCoord : TEXCOORD0;
+ float4 Prelight : COLOR0;
+ float4 Weights : BLENDWEIGHT;
+ int4 Indices : BLENDINDICES;
+};
+
+struct VS_out {
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0; // also fog
+ float4 Color : COLOR0;
+};
+
+float3 viewVec : register(c233);
+float4 rampStart : register(c234);
+float4 rampEnd : register(c235);
+float3 rimData : register(c236);
+
+VS_out main(in VS_in input)
+{
+ VS_out output;
+
+ int j;
+ float3 SkinVertex = float3(0.0, 0.0, 0.0);
+ float3 SkinNormal = float3(0.0, 0.0, 0.0);
+ for(j = 0; j < 4; j++){
+ SkinVertex += mul(input.Position, boneMatrices[input.Indices[j]]).xyz * input.Weights[j];
+ SkinNormal += mul(input.Normal, (float3x3)boneMatrices[input.Indices[j]]).xyz * input.Weights[j];
+ }
+
+ output.Position = mul(combinedMat, float4(SkinVertex, 1.0));
+ float3 Vertex = mul(worldMat, float4(SkinVertex, 1.0)).xyz;
+ float3 Normal = mul(normalMat, SkinNormal);
+
+ output.TexCoord0.xy = input.TexCoord;
+
+ output.Color = input.Prelight;
+ output.Color.rgb += ambientLight.rgb * surfAmbient;
+
+ int i;
+//#ifdef DIRECTIONALS
+ for(i = 0; i < numDirLights; i++)
+ output.Color.xyz += DoDirLight(lights[i+firstDirLight], Normal)*surfDiffuse;
+//#endif
+//#ifdef POINTLIGHTS
+// for(i = 0; i < numPointLights; i++)
+// output.Color.xyz += DoPointLight(lights[i+firstPointLight], Vertex.xyz, Normal)*surfDiffuse;
+//#endif
+//#ifdef SPOTLIGHTS
+// for(i = 0; i < numSpotLights; i++)
+// output.Color.xyz += DoSpotLight(lights[i+firstSpotLight], Vertex.xyz, Normal)*surfDiffuse;
+//#endif
+
+ // rim light
+ float f = rimData.x - rimData.y*dot(Normal, viewVec);
+ float4 rimlight = saturate(lerp(rampEnd, rampStart, f)*rimData.z);
+ output.Color.xyz += rimlight.xyz;
+
+ // PS2 clamps before material color
+ output.Color = clamp(output.Color, 0.0, 1.0);
+ output.Color *= matCol;
+
+ output.TexCoord0.z = clamp((output.Position.w - fogEnd)*fogRange, fogDisable, 1.0);
+
+ return output;
+}
diff --git a/src/extras/shaders/neoRimSkin_VS.inc b/src/extras/shaders/neoRimSkin_VS.inc
new file mode 100644
index 00000000..ac182956
--- /dev/null
+++ b/src/extras/shaders/neoRimSkin_VS.inc
@@ -0,0 +1,203 @@
+static unsigned char neoRimSkin_VS_cso[] = {
+ 0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, 0xb4, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff,
+ 0x0e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x92, 0x02, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0f, 0x00,
+ 0x01, 0x00, 0x3e, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x54, 0x01, 0x00, 0x00, 0x02, 0x00, 0x29, 0x00, 0xc0, 0x00, 0xa6, 0x00,
+ 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x80, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00,
+ 0x01, 0x00, 0x42, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xac, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x3a, 0x00,
+ 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x11, 0x00, 0x18, 0x00, 0x46, 0x00, 0x00, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00,
+ 0x01, 0x00, 0x32, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x17, 0x02, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x03, 0x00, 0x22, 0x00,
+ 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x44, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x54, 0x02, 0x00, 0x00, 0x02, 0x00, 0xeb, 0x00,
+ 0x01, 0x00, 0xae, 0x03, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5c, 0x02, 0x00, 0x00, 0x02, 0x00, 0xea, 0x00, 0x01, 0x00, 0xaa, 0x03,
+ 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0xec, 0x00, 0x01, 0x00, 0xb2, 0x03, 0x70, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x02, 0x00, 0x0d, 0x00,
+ 0x01, 0x00, 0x36, 0x00, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8a, 0x02, 0x00, 0x00, 0x02, 0x00, 0xe9, 0x00, 0x01, 0x00, 0xa6, 0x03,
+ 0x70, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x6d, 0x62, 0x69,
+ 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x00, 0xab, 0xab, 0xab,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x62, 0x6f, 0x6e, 0x65, 0x4d, 0x61, 0x74, 0x72,
+ 0x69, 0x63, 0x65, 0x73, 0x00, 0xab, 0xab, 0xab, 0x03, 0x00, 0x03, 0x00,
+ 0x04, 0x00, 0x03, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x63, 0x6f, 0x6d, 0x62, 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x74, 0x00,
+ 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4c, 0x69, 0x67,
+ 0x68, 0x74, 0x00, 0xab, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x44,
+ 0x61, 0x74, 0x61, 0x00, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x00, 0x63,
+ 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x64, 0x69, 0x72,
+ 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0xab, 0xbb, 0x01, 0x00, 0x00,
+ 0xc4, 0x01, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0xc4, 0x01, 0x00, 0x00,
+ 0xdd, 0x01, 0x00, 0x00, 0xc4, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x03, 0x00, 0xe8, 0x01, 0x00, 0x00,
+ 0x6d, 0x61, 0x74, 0x43, 0x6f, 0x6c, 0x00, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
+ 0x6c, 0x4d, 0x61, 0x74, 0x00, 0xab, 0xab, 0xab, 0x03, 0x00, 0x03, 0x00,
+ 0x03, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6e, 0x75, 0x6d, 0x44, 0x69, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73,
+ 0x00, 0xab, 0xab, 0xab, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x61, 0x6d, 0x70,
+ 0x45, 0x6e, 0x64, 0x00, 0x72, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x72,
+ 0x74, 0x00, 0x72, 0x69, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x00, 0xab, 0xab,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x73, 0x75, 0x72, 0x66, 0x50, 0x72, 0x6f, 0x70,
+ 0x73, 0x00, 0x76, 0x69, 0x65, 0x77, 0x56, 0x65, 0x63, 0x00, 0x76, 0x73,
+ 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f,
+ 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20,
+ 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69,
+ 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32,
+ 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05,
+ 0x04, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x0a, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x00, 0x80, 0x05, 0x00, 0x0f, 0x90, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x0f, 0x80, 0x05, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0xa0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x00, 0x80,
+ 0x08, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x80, 0x01, 0x00, 0xe4, 0x90,
+ 0x2b, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x04, 0x01, 0x00, 0x02, 0x80,
+ 0x01, 0x00, 0xe4, 0x90, 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x55, 0x80,
+ 0x08, 0x00, 0x00, 0x04, 0x02, 0x00, 0x04, 0x80, 0x01, 0x00, 0xe4, 0x90,
+ 0x2b, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x55, 0x80, 0x08, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0x55, 0x80, 0x08, 0x00, 0x00, 0x04, 0x02, 0x00, 0x02, 0x80,
+ 0x01, 0x00, 0xe4, 0x90, 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x55, 0x90, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x90, 0x02, 0x00, 0xe4, 0x80,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xaa, 0x80,
+ 0x08, 0x00, 0x00, 0x04, 0x02, 0x00, 0x04, 0x80, 0x01, 0x00, 0xe4, 0x90,
+ 0x2b, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xaa, 0x80, 0x08, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x01, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0xaa, 0x80, 0x08, 0x00, 0x00, 0x04, 0x02, 0x00, 0x02, 0x80,
+ 0x01, 0x00, 0xe4, 0x90, 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0xaa, 0x90, 0x01, 0x00, 0xe4, 0x80, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x04, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x2b, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0xff, 0x80, 0x08, 0x00, 0x00, 0x04, 0x02, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xff, 0x80,
+ 0x08, 0x00, 0x00, 0x04, 0x02, 0x00, 0x02, 0x80, 0x01, 0x00, 0xe4, 0x90,
+ 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xff, 0x90,
+ 0x01, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80,
+ 0x01, 0x00, 0x55, 0x80, 0x09, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x0b, 0x80, 0x08, 0x00, 0xa4, 0xa0, 0x01, 0x00, 0x00, 0x80,
+ 0x02, 0x00, 0xa4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80,
+ 0x0a, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x80, 0x01, 0x00, 0xf4, 0x80,
+ 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x08, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0xe9, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x08, 0x80,
+ 0x03, 0x00, 0xff, 0x90, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x01, 0x80,
+ 0x0d, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80,
+ 0x0f, 0x00, 0xe4, 0xa0, 0x03, 0x00, 0x00, 0x80, 0x03, 0x00, 0xe4, 0x90,
+ 0x01, 0x00, 0x00, 0x02, 0x04, 0x00, 0x07, 0x80, 0x03, 0x00, 0xe4, 0x80,
+ 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x08, 0x80, 0x04, 0x00, 0x55, 0xa0,
+ 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0xe4, 0xf0, 0x02, 0x00, 0x00, 0x03,
+ 0x04, 0x00, 0x08, 0x80, 0x03, 0x00, 0xff, 0x80, 0x10, 0x00, 0x00, 0xa0,
+ 0x05, 0x00, 0x00, 0x03, 0x04, 0x00, 0x08, 0x80, 0x04, 0x00, 0xff, 0x80,
+ 0x04, 0x00, 0x00, 0xa0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x04, 0x00, 0xff, 0x80, 0x08, 0x00, 0x00, 0x04, 0x05, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0x13, 0x20, 0xe4, 0xa1, 0x00, 0x00, 0xff, 0xb0,
+ 0x0b, 0x00, 0x00, 0x03, 0x05, 0x00, 0x01, 0x80, 0x05, 0x00, 0x00, 0x80,
+ 0x04, 0x00, 0x55, 0xa0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x04, 0x00, 0xff, 0x80, 0x05, 0x00, 0x00, 0x04, 0x05, 0x00, 0x07, 0x80,
+ 0x05, 0x00, 0x00, 0x80, 0x11, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x80, 0x05, 0x00, 0xe4, 0x80,
+ 0x0d, 0x00, 0xaa, 0xa0, 0x04, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x08, 0x80, 0x03, 0x00, 0xff, 0x80, 0x04, 0x00, 0xaa, 0xa0,
+ 0x27, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x01, 0x80,
+ 0xec, 0x00, 0x55, 0xa0, 0x01, 0x00, 0xff, 0x81, 0xec, 0x00, 0x00, 0xa0,
+ 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x07, 0x80, 0xeb, 0x00, 0xe4, 0xa0,
+ 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0e, 0x80, 0x03, 0x00, 0x90, 0x81,
+ 0xea, 0x00, 0x90, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf9, 0x80, 0xeb, 0x00, 0xe4, 0xa0,
+ 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0xec, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x55, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xaa, 0xa0,
+ 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80,
+ 0x02, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x55, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xaa, 0xa0,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xd0, 0x01, 0x00, 0xe4, 0x80,
+ 0x0c, 0x00, 0xe4, 0xa0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0x55, 0x80, 0x09, 0x00, 0x00, 0x04, 0x01, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x55, 0x80,
+ 0x09, 0x00, 0x00, 0x04, 0x01, 0x00, 0x02, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x55, 0x80, 0x09, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x04, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x2b, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x55, 0x90, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x04, 0x02, 0x00, 0x02, 0x80,
+ 0x00, 0x00, 0xe4, 0x90, 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0x00, 0x80,
+ 0x09, 0x00, 0x00, 0x04, 0x02, 0x00, 0x04, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x2b, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x90,
+ 0x01, 0x00, 0xe4, 0x80, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0xaa, 0x80, 0x09, 0x00, 0x00, 0x04, 0x02, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0xe4, 0x90, 0x29, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xaa, 0x80,
+ 0x09, 0x00, 0x00, 0x04, 0x02, 0x00, 0x02, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x2a, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xaa, 0x80, 0x09, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x04, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x2b, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80,
+ 0x02, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xaa, 0x90, 0x01, 0x00, 0xe4, 0x80,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xff, 0x80,
+ 0x09, 0x00, 0x00, 0x04, 0x01, 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x29, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x08, 0xb0, 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x02, 0x80, 0x00, 0x00, 0xe4, 0x90, 0x2a, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0xb0, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0xb0,
+ 0x00, 0x00, 0xff, 0x80, 0x09, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x80,
+ 0x00, 0x00, 0xe4, 0x90, 0x2b, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0xb0,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0xff, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x80, 0x01, 0x00, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80, 0x0e, 0x00, 0x55, 0xa1,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80,
+ 0x0e, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0xaa, 0xa0,
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90,
+ 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoRimSkin_gl3.inc b/src/extras/shaders/neoRimSkin_gl3.inc
new file mode 100644
index 00000000..70948e1f
--- /dev/null
+++ b/src/extras/shaders/neoRimSkin_gl3.inc
@@ -0,0 +1,50 @@
+const char *neoRimSkin_vert_src =
+"uniform mat4 u_boneMatrices[64];\n"
+
+"uniform vec3 u_viewVec;\n"
+"uniform vec4 u_rampStart;\n"
+"uniform vec4 u_rampEnd;\n"
+"uniform vec3 u_rimData;\n"
+
+"layout(location = 0) in vec3 in_pos;\n"
+"layout(location = 1) in vec3 in_normal;\n"
+"layout(location = 2) in vec4 in_color;\n"
+"layout(location = 3) in vec2 in_tex0;\n"
+"layout(location = 11) in vec4 in_weights;\n"
+"layout(location = 12) in vec4 in_indices;\n"
+
+"out vec4 v_color;\n"
+"out vec2 v_tex0;\n"
+"out float v_fog;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec3 SkinVertex = vec3(0.0, 0.0, 0.0);\n"
+" vec3 SkinNormal = vec3(0.0, 0.0, 0.0);\n"
+" for(int i = 0; i < 4; i++){\n"
+" SkinVertex += (u_boneMatrices[int(in_indices[i])] * vec4(in_pos, 1.0)).xyz * in_weights[i];\n"
+" SkinNormal += (mat3(u_boneMatrices[int(in_indices[i])]) * in_normal) * in_weights[i];\n"
+" }\n"
+
+" vec4 Vertex = u_world * vec4(SkinVertex, 1.0);\n"
+" gl_Position = u_proj * u_view * Vertex;\n"
+" vec3 Normal = mat3(u_world) * SkinNormal;\n"
+
+" v_tex0 = in_tex0;\n"
+
+" v_color = in_color;\n"
+" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
+" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
+
+" // rim light\n"
+" float f = u_rimData.x - u_rimData.y*dot(Normal, u_viewVec);\n"
+" vec4 rimlight = clamp(mix(u_rampEnd, u_rampStart, f)*u_rimData.z, 0.0, 1.0);\n"
+" v_color.rgb += rimlight.rgb;\n"
+
+" v_color = clamp(v_color, 0.0, 1.0);\n"
+" v_color *= u_matColor;\n"
+
+" v_fog = DoFog(gl_Position.z);\n"
+"}\n"
+;
diff --git a/src/extras/shaders/neoRim_VS.cso b/src/extras/shaders/neoRim_VS.cso
new file mode 100644
index 00000000..4af538b1
--- /dev/null
+++ b/src/extras/shaders/neoRim_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoRim_VS.hlsl b/src/extras/shaders/neoRim_VS.hlsl
new file mode 100644
index 00000000..7f95166d
--- /dev/null
+++ b/src/extras/shaders/neoRim_VS.hlsl
@@ -0,0 +1,61 @@
+#include "standardConstants.h"
+
+struct VS_in
+{
+ float4 Position : POSITION;
+ float3 Normal : NORMAL;
+ float2 TexCoord : TEXCOORD0;
+ float4 Prelight : COLOR0;
+};
+
+struct VS_out {
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0; // also fog
+ float4 Color : COLOR0;
+};
+
+float3 viewVec : register(c233);
+float4 rampStart : register(c234);
+float4 rampEnd : register(c235);
+float3 rimData : register(c236);
+
+VS_out main(in VS_in input)
+{
+ VS_out output;
+
+ output.Position = mul(combinedMat, input.Position);
+ float3 Vertex = mul(worldMat, input.Position).xyz;
+ float3 Normal = mul(normalMat, input.Normal);
+
+ output.TexCoord0.xy = input.TexCoord;
+
+ output.Color = input.Prelight;
+ output.Color.rgb += ambientLight.rgb * surfAmbient;
+
+ int i;
+//#ifdef DIRECTIONALS
+ for(i = 0; i < numDirLights; i++)
+ output.Color.xyz += DoDirLight(lights[i+firstDirLight], Normal)*surfDiffuse;
+//#endif
+//#ifdef POINTLIGHTS
+// for(i = 0; i < numPointLights; i++)
+// output.Color.xyz += DoPointLight(lights[i+firstPointLight], Vertex.xyz, Normal)*surfDiffuse;
+//#endif
+//#ifdef SPOTLIGHTS
+// for(i = 0; i < numSpotLights; i++)
+// output.Color.xyz += DoSpotLight(lights[i+firstSpotLight], Vertex.xyz, Normal)*surfDiffuse;
+//#endif
+
+ // rim light
+ float f = rimData.x - rimData.y*dot(Normal, viewVec);
+ float4 rimlight = saturate(lerp(rampEnd, rampStart, f)*rimData.z);
+ output.Color.xyz += rimlight.xyz;
+
+ // PS2 clamps before material color
+ output.Color = clamp(output.Color, 0.0, 1.0);
+ output.Color *= matCol;
+
+ output.TexCoord0.z = clamp((output.Position.w - fogEnd)*fogRange, fogDisable, 1.0);
+
+ return output;
+}
diff --git a/src/extras/shaders/neoRim_VS.inc b/src/extras/shaders/neoRim_VS.inc
new file mode 100644
index 00000000..03b044a6
--- /dev/null
+++ b/src/extras/shaders/neoRim_VS.inc
@@ -0,0 +1,118 @@
+static unsigned char neoRim_VS_cso[] = {
+ 0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, 0xa7, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x65, 0x02, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff,
+ 0x0d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x5e, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0f, 0x00,
+ 0x01, 0x00, 0x3e, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00,
+ 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, 0x42, 0x00, 0x68, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0e, 0x00,
+ 0x01, 0x00, 0x3a, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x11, 0x00, 0x18, 0x00, 0x46, 0x00,
+ 0xcc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x32, 0x00, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe3, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00,
+ 0x03, 0x00, 0x22, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
+ 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0xeb, 0x00, 0x01, 0x00, 0xae, 0x03, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0x02, 0x00, 0xea, 0x00,
+ 0x01, 0x00, 0xaa, 0x03, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x02, 0x00, 0x00, 0x02, 0x00, 0xec, 0x00, 0x01, 0x00, 0xb2, 0x03,
+ 0x3c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x36, 0x00, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x56, 0x02, 0x00, 0x00, 0x02, 0x00, 0xe9, 0x00,
+ 0x01, 0x00, 0xa6, 0x03, 0x3c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74,
+ 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x74, 0x00, 0x03, 0x00, 0x03, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x69, 0x72, 0x73, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x00, 0xab,
+ 0x01, 0x00, 0x02, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x00,
+ 0x6c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
+ 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x00, 0xab, 0x87, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00,
+ 0xa0, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00,
+ 0x90, 0x01, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00,
+ 0x08, 0x00, 0x03, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x6d, 0x61, 0x74, 0x43,
+ 0x6f, 0x6c, 0x00, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74,
+ 0x00, 0xab, 0xab, 0xab, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x75, 0x6d, 0x44,
+ 0x69, 0x72, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x00, 0xab, 0xab, 0xab,
+ 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x72, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x64, 0x00,
+ 0x72, 0x61, 0x6d, 0x70, 0x53, 0x74, 0x61, 0x72, 0x74, 0x00, 0x72, 0x69,
+ 0x6d, 0x44, 0x61, 0x74, 0x61, 0x00, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x73, 0x75, 0x72, 0x66, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x00, 0x76, 0x69,
+ 0x65, 0x77, 0x56, 0x65, 0x63, 0x00, 0x76, 0x73, 0x5f, 0x32, 0x5f, 0x30,
+ 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28,
+ 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64,
+ 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20,
+ 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31, 0x31,
+ 0x31, 0x00, 0xab, 0xab, 0x51, 0x00, 0x00, 0x05, 0x04, 0x00, 0x0f, 0xa0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x05, 0x00, 0x00, 0x80,
+ 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x80,
+ 0x03, 0x00, 0x0f, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80,
+ 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x03, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x08, 0x80, 0x03, 0x00, 0xff, 0x90, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0x55, 0x90, 0x09, 0x00, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x08, 0x00, 0xe4, 0xa0,
+ 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0xaa, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x02, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0xe9, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x03, 0x00, 0x01, 0x80, 0x0d, 0x00, 0x00, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x0e, 0x80, 0x0f, 0x00, 0x90, 0xa0, 0x03, 0x00, 0x00, 0x80,
+ 0x03, 0x00, 0x90, 0x90, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x07, 0x80,
+ 0x02, 0x00, 0xf9, 0x80, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x08, 0x80,
+ 0x04, 0x00, 0x00, 0xa0, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0xe4, 0xf0,
+ 0x02, 0x00, 0x00, 0x03, 0x04, 0x00, 0x01, 0x80, 0x03, 0x00, 0xff, 0x80,
+ 0x10, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x04, 0x00, 0x01, 0x80,
+ 0x04, 0x00, 0x00, 0x80, 0x04, 0x00, 0x55, 0xa0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x01, 0xb0, 0x04, 0x00, 0x00, 0x80, 0x08, 0x00, 0x00, 0x04,
+ 0x04, 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x13, 0x20, 0xe4, 0xa1,
+ 0x00, 0x00, 0x00, 0xb0, 0x0b, 0x00, 0x00, 0x03, 0x04, 0x00, 0x01, 0x80,
+ 0x04, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x04,
+ 0x04, 0x00, 0x07, 0x80, 0x04, 0x00, 0x00, 0x80, 0x11, 0x20, 0xe4, 0xa0,
+ 0x00, 0x00, 0x00, 0xb0, 0x04, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80,
+ 0x04, 0x00, 0xe4, 0x80, 0x0d, 0x00, 0xaa, 0xa0, 0x03, 0x00, 0xe4, 0x80,
+ 0x02, 0x00, 0x00, 0x03, 0x03, 0x00, 0x08, 0x80, 0x03, 0x00, 0xff, 0x80,
+ 0x04, 0x00, 0xaa, 0xa0, 0x27, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x01, 0x80, 0xec, 0x00, 0x55, 0xa0, 0x02, 0x00, 0x00, 0x81,
+ 0xec, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x07, 0x80,
+ 0xeb, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x07, 0x80,
+ 0x02, 0x00, 0xe4, 0x81, 0xea, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0xeb, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0xec, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0xa0,
+ 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0xa0,
+ 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0xaa, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xd0,
+ 0x01, 0x00, 0xe4, 0x80, 0x0c, 0x00, 0xe4, 0xa0, 0x02, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0xff, 0x80, 0x0e, 0x00, 0x55, 0xa1,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80,
+ 0x0e, 0x00, 0xaa, 0xa0, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xff, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0xaa, 0xa0,
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90,
+ 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoRim_gl3.inc b/src/extras/shaders/neoRim_gl3.inc
new file mode 100644
index 00000000..7e36e95a
--- /dev/null
+++ b/src/extras/shaders/neoRim_gl3.inc
@@ -0,0 +1,39 @@
+const char *neoRim_vert_src =
+"uniform vec3 u_viewVec;\n"
+"uniform vec4 u_rampStart;\n"
+"uniform vec4 u_rampEnd;\n"
+"uniform vec3 u_rimData;\n"
+
+"layout(location = 0) in vec3 in_pos;\n"
+"layout(location = 1) in vec3 in_normal;\n"
+"layout(location = 2) in vec4 in_color;\n"
+"layout(location = 3) in vec2 in_tex0;\n"
+
+"out vec4 v_color;\n"
+"out vec2 v_tex0;\n"
+"out float v_fog;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
+" gl_Position = u_proj * u_view * Vertex;\n"
+" vec3 Normal = mat3(u_world) * in_normal;\n"
+
+" v_tex0 = in_tex0;\n"
+
+" v_color = in_color;\n"
+" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
+" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
+
+" // rim light\n"
+" float f = u_rimData.x - u_rimData.y*dot(Normal, u_viewVec);\n"
+" vec4 rimlight = clamp(mix(u_rampEnd, u_rampStart, f)*u_rimData.z, 0.0, 1.0);\n"
+" v_color.rgb += rimlight.rgb;\n"
+
+" v_color = clamp(v_color, 0.0, 1.0);\n"
+" v_color *= u_matColor;\n"
+
+" v_fog = DoFog(gl_Position.w);\n"
+"}\n"
+;
diff --git a/src/extras/shaders/neoVehicle.frag b/src/extras/shaders/neoVehicle.frag
new file mode 100644
index 00000000..96d4a632
--- /dev/null
+++ b/src/extras/shaders/neoVehicle.frag
@@ -0,0 +1,28 @@
+uniform sampler2D tex0;
+uniform sampler2D tex1;
+
+in vec4 v_color;
+in vec4 v_reflcolor;
+in vec2 v_tex0;
+in vec2 v_tex1;
+in float v_fog;
+
+out vec4 color;
+
+void
+main(void)
+{
+ vec4 pass1 = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
+ vec3 envmap = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y)).rgb;
+ pass1.rgb = mix(pass1.rgb, envmap, v_reflcolor.a);
+ pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_fog);
+// pass1.rgb += v_reflcolor.rgb * v_fog;
+
+ vec3 pass2 = v_reflcolor.rgb * v_fog;
+
+ color.rgb = pass1.rgb*pass1.a + pass2;
+ color.a = pass1.a;
+
+// color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
+ DoAlphaTest(color.a);
+}
diff --git a/src/extras/shaders/neoVehicle.vert b/src/extras/shaders/neoVehicle.vert
new file mode 100644
index 00000000..f2f54d6d
--- /dev/null
+++ b/src/extras/shaders/neoVehicle.vert
@@ -0,0 +1,54 @@
+uniform vec3 u_eye;
+uniform vec4 u_reflProps;
+uniform vec4 u_specDir[5];
+uniform vec4 u_specColor[5];
+
+#define fresnel (u_reflProps.x)
+#define lightStrength (u_reflProps.y) // speclight alpha
+#define shininess (u_reflProps.z)
+#define specularity (u_reflProps.w)
+
+layout(location = 0) in vec3 in_pos;
+layout(location = 1) in vec3 in_normal;
+layout(location = 2) in vec4 in_color;
+layout(location = 3) in vec2 in_tex0;
+
+out vec4 v_color;
+out vec4 v_reflcolor;
+out vec2 v_tex0;
+out vec2 v_tex1;
+out float v_fog;
+
+vec3 DoDirLightSpec(vec3 Ldir, vec3 Lcol, vec3 N, vec3 V, float power)
+{
+ return pow(clamp(dot(N, normalize(V + -Ldir)), 0.0, 1.0), power)*Lcol;
+}
+
+void
+main(void)
+{
+ vec4 Vertex = u_world * vec4(in_pos, 1.0);
+ gl_Position = u_proj * u_view * Vertex;
+ vec3 Normal = mat3(u_world) * in_normal;
+ vec3 viewVec = normalize(u_eye - Vertex.xyz);
+
+ v_tex0 = in_tex0;
+
+ v_color = in_color;
+ v_color.rgb += u_ambLight.rgb*surfAmbient;
+ v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse*lightStrength;
+ v_color = clamp(v_color, 0.0, 1.0);
+ v_color *= u_matColor;
+
+ // reflect V along Normal
+ vec3 uv2 = Normal*dot(viewVec, Normal)*2.0 - viewVec;
+ 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;
+
+ 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;
+
+ v_fog = DoFog(gl_Position.w);
+}
diff --git a/src/extras/shaders/neoVehicle_PS.cso b/src/extras/shaders/neoVehicle_PS.cso
new file mode 100644
index 00000000..ded01bfb
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoVehicle_PS.hlsl b/src/extras/shaders/neoVehicle_PS.hlsl
new file mode 100644
index 00000000..fa030dd6
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_PS.hlsl
@@ -0,0 +1,34 @@
+struct VS_out {
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0;
+ float2 TexCoord1 : TEXCOORD1;
+ float4 Color : COLOR0;
+ float4 ReflColor : COLOR1;
+};
+
+sampler2D tex0 : register(s0);
+sampler2D tex1 : register(s1);
+
+float4 fogColor : register(c0);
+
+float4 main(VS_out input) : COLOR
+{
+ float4 pass1 = input.Color;
+//#ifdef TEX
+ pass1 *= tex2D(tex0, input.TexCoord0.xy);
+//#endif
+ float3 envmap = tex2D(tex1, input.TexCoord1).rgb;
+ pass1.rgb = lerp(pass1.rgb, envmap, input.ReflColor.a);
+// pass1.rgb = envmap;
+// pass1.rgb *= input.ReflColor.a;
+ pass1.rgb = lerp(fogColor.rgb, pass1.rgb, input.TexCoord0.z);
+// pass1.rgb += input.ReflColor.rgb * input.TexCoord0.z;
+
+ float3 pass2 = input.ReflColor.rgb*input.TexCoord0.z;
+
+ float4 color;
+ color.rgb = pass1.rgb*pass1.a + pass2;
+ color.a = pass1.a;
+
+ return color;
+}
diff --git a/src/extras/shaders/neoVehicle_PS.inc b/src/extras/shaders/neoVehicle_PS.inc
new file mode 100644
index 00000000..8b77cec2
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_PS.inc
@@ -0,0 +1,42 @@
+static unsigned char neoVehicle_PS_cso[] = {
+ 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x38, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff,
+ 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xa4, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x02, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00, 0x94, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
+ 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x30,
+ 0x00, 0xab, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x65, 0x78, 0x31,
+ 0x00, 0xab, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x73, 0x5f, 0x32,
+ 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74,
+ 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68,
+ 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65,
+ 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33,
+ 0x31, 0x31, 0x31, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x07, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90,
+ 0x00, 0x08, 0x0f, 0xa0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90,
+ 0x01, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x01, 0x00, 0xe4, 0xb0, 0x01, 0x08, 0xe4, 0xa0, 0x42, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x01, 0x00, 0xe4, 0x81, 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0x90,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xff, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x12, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x07, 0x80, 0x00, 0x00, 0xaa, 0xb0, 0x00, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x08, 0x80,
+ 0x00, 0x00, 0xaa, 0xb0, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80,
+ 0x02, 0x00, 0xff, 0x80, 0x01, 0x00, 0xe4, 0x90, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x01, 0x00, 0xff, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80,
+ 0x01, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoVehicle_VS.cso b/src/extras/shaders/neoVehicle_VS.cso
new file mode 100644
index 00000000..6ea47987
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_VS.cso
Binary files differ
diff --git a/src/extras/shaders/neoVehicle_VS.hlsl b/src/extras/shaders/neoVehicle_VS.hlsl
new file mode 100644
index 00000000..de75e745
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_VS.hlsl
@@ -0,0 +1,64 @@
+#include "standardConstants.h"
+
+struct VS_in
+{
+ float4 Position : POSITION;
+ float3 Normal : NORMAL;
+ float2 TexCoord : TEXCOORD0;
+ float4 Prelight : COLOR0;
+};
+
+struct VS_out {
+ float4 Position : POSITION;
+ float3 TexCoord0 : TEXCOORD0; // also fog
+ float2 TexCoord1 : TEXCOORD1;
+ float4 Color : COLOR0;
+ float4 ReflColor : COLOR1;
+};
+
+float3 eye : register(c41);
+float4 reflProps : register(c42);
+Light specLights[5] : register(c43);
+
+
+#define fresnel (reflProps.x)
+#define lightStrength (reflProps.y) // speclight alpha
+#define shininess (reflProps.z)
+#define specularity (reflProps.w)
+
+VS_out main(in VS_in input)
+{
+ VS_out output;
+
+ output.Position = mul(combinedMat, input.Position);
+ float3 Vertex = mul(worldMat, input.Position).xyz;
+ float3 Normal = mul(normalMat, input.Normal);
+ float3 viewVec = normalize(eye - Vertex);
+
+ output.TexCoord0.xy = input.TexCoord;
+
+ output.Color = input.Prelight;
+ output.Color.rgb += ambientLight.rgb * surfAmbient*lightStrength;
+
+ int i;
+ for(i = 0; i < numDirLights; i++)
+ output.Color.xyz += DoDirLight(lights[i+firstDirLight], Normal)*surfDiffuse*lightStrength;
+ // PS2 clamps before material color
+ output.Color = clamp(output.Color, 0.0, 1.0);
+ output.Color *= matCol;
+
+ // reflect V along Normal
+ float3 uv2 = Normal*dot(viewVec, Normal)*2.0 - viewVec;
+ 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;
+
+ //Light mainLight = lights[0];
+ for(i = 0; i < 5; i++)
+ output.ReflColor.xyz += DoDirLightSpec(specLights[i], Normal, viewVec, specLights[i].direction.w)*specularity*lightStrength;
+
+ output.TexCoord0.z = clamp((output.Position.w - fogEnd)*fogRange, fogDisable, 1.0);
+
+ return output;
+}
diff --git a/src/extras/shaders/neoVehicle_VS.inc b/src/extras/shaders/neoVehicle_VS.inc
new file mode 100644
index 00000000..37c5858d
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_VS.inc
@@ -0,0 +1,160 @@
+static unsigned char neoVehicle_VS_cso[] = {
+ 0x00, 0x02, 0xfe, 0xff, 0xfe, 0xff, 0xab, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xff,
+ 0x0d, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x6f, 0x02, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0f, 0x00,
+ 0x01, 0x00, 0x3e, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00,
+ 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x29, 0x00, 0x01, 0x00, 0xa6, 0x00, 0x60, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00,
+ 0x01, 0x00, 0x42, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x3a, 0x00,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x11, 0x00, 0x18, 0x00, 0x46, 0x00, 0xe0, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x0c, 0x00,
+ 0x01, 0x00, 0x32, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xf7, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x03, 0x00, 0x22, 0x00,
+ 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x24, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0x02, 0x00, 0x2a, 0x00,
+ 0x01, 0x00, 0xaa, 0x00, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3e, 0x02, 0x00, 0x00, 0x02, 0x00, 0x2b, 0x00, 0x0f, 0x00, 0xae, 0x00,
+ 0x4c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x02, 0x00, 0x00,
+ 0x02, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x36, 0x00, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x02, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x12, 0x00, 0x4c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74,
+ 0x00, 0xab, 0xab, 0xab, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x6d, 0x62,
+ 0x69, 0x6e, 0x65, 0x64, 0x4d, 0x61, 0x74, 0x00, 0x03, 0x00, 0x03, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x65, 0x79, 0x65, 0x00, 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x69, 0x72, 0x73,
+ 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x00, 0xab, 0x01, 0x00, 0x02, 0x00,
+ 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x61, 0x00, 0x6c, 0x69, 0x67, 0x68,
+ 0x74, 0x73, 0x00, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0xab, 0xab,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e,
+ 0x00, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0xab,
+ 0x9b, 0x01, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00,
+ 0xa4, 0x01, 0x00, 0x00, 0xbd, 0x01, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x03, 0x00,
+ 0xc8, 0x01, 0x00, 0x00, 0x6d, 0x61, 0x74, 0x43, 0x6f, 0x6c, 0x00, 0x6e,
+ 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x4d, 0x61, 0x74, 0x00, 0xab, 0xab, 0xab,
+ 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6e, 0x75, 0x6d, 0x44, 0x69, 0x72, 0x4c, 0x69,
+ 0x67, 0x68, 0x74, 0x73, 0x00, 0xab, 0xab, 0xab, 0x00, 0x00, 0x02, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x72, 0x65, 0x66, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x00, 0x73, 0x70,
+ 0x65, 0x63, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x00, 0xab, 0xab, 0xab,
+ 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x05, 0x00, 0x03, 0x00,
+ 0xc8, 0x01, 0x00, 0x00, 0x73, 0x75, 0x72, 0x66, 0x50, 0x72, 0x6f, 0x70,
+ 0x73, 0x00, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x4d, 0x61, 0x74, 0x00, 0x76,
+ 0x73, 0x5f, 0x32, 0x5f, 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73,
+ 0x6f, 0x66, 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c,
+ 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70,
+ 0x69, 0x6c, 0x65, 0x72, 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35,
+ 0x32, 0x2e, 0x33, 0x31, 0x31, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05,
+ 0x0b, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40,
+ 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x51, 0x00, 0x00, 0x05,
+ 0x3a, 0x00, 0x0f, 0xa0, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x05,
+ 0x01, 0x00, 0x0f, 0xf0, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02,
+ 0x0a, 0x00, 0x00, 0x80, 0x03, 0x00, 0x0f, 0x90, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x55, 0x90, 0x01, 0x00, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x0f, 0x80, 0x02, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90,
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0f, 0x80,
+ 0x03, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xff, 0x90, 0x00, 0x00, 0xe4, 0x80,
+ 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0xe4, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0x55, 0x90,
+ 0x09, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80,
+ 0x08, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x90, 0x00, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x0a, 0x00, 0xe4, 0xa0,
+ 0x01, 0x00, 0xaa, 0x90, 0x00, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x01, 0x80, 0x0d, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0x00, 0x80, 0x0f, 0x00, 0xe4, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x2a, 0x00, 0x55, 0xa0, 0x03, 0x00, 0xe4, 0x90, 0x01, 0x00, 0x00, 0x02,
+ 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x08, 0x80, 0x0b, 0x00, 0x00, 0xa0, 0x26, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0xe4, 0xf0, 0x02, 0x00, 0x00, 0x03, 0x03, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0xff, 0x80, 0x10, 0x00, 0x00, 0xa0, 0x05, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x01, 0x80, 0x03, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x55, 0xa0,
+ 0x2e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0xb0, 0x03, 0x00, 0x00, 0x80,
+ 0x08, 0x00, 0x00, 0x04, 0x03, 0x00, 0x01, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x13, 0x20, 0xe4, 0xa1, 0x00, 0x00, 0x00, 0xb0, 0x0b, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x01, 0x80, 0x03, 0x00, 0x00, 0x80, 0x0b, 0x00, 0x00, 0xa0,
+ 0x05, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80, 0x03, 0x00, 0x00, 0x80,
+ 0x11, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x05, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x07, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x0d, 0x00, 0xaa, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x07, 0x80, 0x03, 0x00, 0xe4, 0x80,
+ 0x2a, 0x00, 0x55, 0xa0, 0x02, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x08, 0x80, 0x01, 0x00, 0xff, 0x80, 0x0b, 0x00, 0xaa, 0xa0,
+ 0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x00, 0x08, 0x80,
+ 0x03, 0x00, 0xff, 0x90, 0x0b, 0x00, 0x00, 0x03, 0x01, 0x00, 0x0f, 0x80,
+ 0x02, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0xaa, 0xa0,
+ 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0xd0, 0x01, 0x00, 0xe4, 0x80,
+ 0x0c, 0x00, 0xe4, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80,
+ 0x00, 0x00, 0x55, 0x90, 0x05, 0x00, 0xe4, 0xa0, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x07, 0x80, 0x04, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0x90,
+ 0x01, 0x00, 0xe4, 0x80, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80,
+ 0x06, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xaa, 0x90, 0x01, 0x00, 0xe4, 0x80,
+ 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x07, 0x00, 0xe4, 0xa0,
+ 0x00, 0x00, 0xff, 0x90, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x81, 0x29, 0x00, 0xe4, 0xa0,
+ 0x24, 0x00, 0x00, 0x02, 0x02, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x02, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x06, 0x80,
+ 0x00, 0x00, 0xd0, 0x80, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x06, 0x80, 0x01, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0xff, 0xa0,
+ 0x02, 0x00, 0xd0, 0x81, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x03, 0xe0,
+ 0x01, 0x00, 0xe9, 0x80, 0x3a, 0x00, 0x00, 0xa0, 0x3a, 0x00, 0x00, 0xa0,
+ 0x0b, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x80,
+ 0x0b, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x0b, 0x00, 0xaa, 0xa0, 0x02, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x01, 0x80, 0x01, 0x00, 0x00, 0x81, 0x0b, 0x00, 0xaa, 0xa0,
+ 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x02, 0x80, 0x01, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x02, 0x80,
+ 0x01, 0x00, 0x55, 0x80, 0x01, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x04, 0x80, 0x01, 0x00, 0x55, 0x80, 0x01, 0x00, 0x00, 0x81,
+ 0x0b, 0x00, 0xaa, 0xa0, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x01, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x55, 0x80, 0x04, 0x00, 0x00, 0x04,
+ 0x01, 0x00, 0x01, 0x80, 0x2a, 0x00, 0x00, 0xa0, 0x01, 0x00, 0xaa, 0x80,
+ 0x01, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x08, 0xd0,
+ 0x01, 0x00, 0x00, 0x80, 0x2a, 0x00, 0xaa, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x01, 0x00, 0x0f, 0x80, 0x0b, 0x00, 0x00, 0xa0, 0x26, 0x00, 0x00, 0x01,
+ 0x01, 0x00, 0xe4, 0xf0, 0x05, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x80,
+ 0x01, 0x00, 0xff, 0x80, 0x0b, 0x00, 0x55, 0xa0, 0x2e, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x01, 0xb0, 0x02, 0x00, 0xff, 0x80, 0x02, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x07, 0x80, 0x02, 0x00, 0xe4, 0x80, 0x2d, 0x20, 0xe4, 0xa1,
+ 0x00, 0x00, 0x00, 0xb0, 0x24, 0x00, 0x00, 0x02, 0x04, 0x00, 0x07, 0x80,
+ 0x03, 0x00, 0xe4, 0x80, 0x08, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x04, 0x00, 0xe4, 0x80, 0x0b, 0x00, 0x00, 0x03,
+ 0x02, 0x00, 0x08, 0x80, 0x02, 0x00, 0xff, 0x80, 0x0b, 0x00, 0x00, 0xa0,
+ 0x0a, 0x00, 0x00, 0x03, 0x02, 0x00, 0x08, 0x80, 0x02, 0x00, 0xff, 0x80,
+ 0x0b, 0x00, 0xaa, 0xa0, 0x20, 0x00, 0x00, 0x04, 0x03, 0x00, 0x01, 0x80,
+ 0x02, 0x00, 0xff, 0x80, 0x2d, 0x20, 0xff, 0xa0, 0x00, 0x00, 0x00, 0xb0,
+ 0x05, 0x00, 0x00, 0x04, 0x03, 0x00, 0x07, 0x80, 0x03, 0x00, 0x00, 0x80,
+ 0x2b, 0x20, 0xe4, 0xa0, 0x00, 0x00, 0x00, 0xb0, 0x05, 0x00, 0x00, 0x03,
+ 0x03, 0x00, 0x07, 0x80, 0x03, 0x00, 0xe4, 0x80, 0x2a, 0x00, 0xff, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x07, 0x80, 0x03, 0x00, 0xe4, 0x80,
+ 0x2a, 0x00, 0x55, 0xa0, 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x08, 0x80, 0x01, 0x00, 0xff, 0x80, 0x0b, 0x00, 0xaa, 0xa0,
+ 0x27, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x07, 0xd0,
+ 0x01, 0x00, 0xe4, 0x80, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80,
+ 0x00, 0x00, 0xff, 0x80, 0x0e, 0x00, 0x55, 0xa1, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80, 0x0e, 0x00, 0xaa, 0xa0,
+ 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x80,
+ 0x0e, 0x00, 0xff, 0xa0, 0x0a, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0xe0,
+ 0x00, 0x00, 0x00, 0x80, 0x0b, 0x00, 0xaa, 0xa0, 0x01, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x03, 0xe0, 0x02, 0x00, 0xe4, 0x90, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoVehicle_fs_gl3.inc b/src/extras/shaders/neoVehicle_fs_gl3.inc
new file mode 100644
index 00000000..c75ba717
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_fs_gl3.inc
@@ -0,0 +1,30 @@
+const char *neoVehicle_frag_src =
+"uniform sampler2D tex0;\n"
+"uniform sampler2D tex1;\n"
+
+"in vec4 v_color;\n"
+"in vec4 v_reflcolor;\n"
+"in vec2 v_tex0;\n"
+"in vec2 v_tex1;\n"
+"in float v_fog;\n"
+
+"out vec4 color;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 pass1 = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
+" vec3 envmap = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y)).rgb;\n"
+" pass1.rgb = mix(pass1.rgb, envmap, v_reflcolor.a);\n"
+" pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_fog);\n"
+"// pass1.rgb += v_reflcolor.rgb * v_fog;\n"
+
+" vec3 pass2 = v_reflcolor.rgb * v_fog;\n"
+
+" color.rgb = pass1.rgb*pass1.a + pass2;\n"
+" color.a = pass1.a;\n"
+
+"// color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
+" DoAlphaTest(color.a);\n"
+"}\n"
+;
diff --git a/src/extras/shaders/neoVehicle_vs_gl3.inc b/src/extras/shaders/neoVehicle_vs_gl3.inc
new file mode 100644
index 00000000..268180e1
--- /dev/null
+++ b/src/extras/shaders/neoVehicle_vs_gl3.inc
@@ -0,0 +1,56 @@
+const char *neoVehicle_vert_src =
+"uniform vec3 u_eye;\n"
+"uniform vec4 u_reflProps;\n"
+"uniform vec4 u_specDir[5];\n"
+"uniform vec4 u_specColor[5];\n"
+
+"#define fresnel (u_reflProps.x)\n"
+"#define lightStrength (u_reflProps.y) // speclight alpha\n"
+"#define shininess (u_reflProps.z)\n"
+"#define specularity (u_reflProps.w)\n"
+
+"layout(location = 0) in vec3 in_pos;\n"
+"layout(location = 1) in vec3 in_normal;\n"
+"layout(location = 2) in vec4 in_color;\n"
+"layout(location = 3) in vec2 in_tex0;\n"
+
+"out vec4 v_color;\n"
+"out vec4 v_reflcolor;\n"
+"out vec2 v_tex0;\n"
+"out vec2 v_tex1;\n"
+"out float v_fog;\n"
+
+"vec3 DoDirLightSpec(vec3 Ldir, vec3 Lcol, vec3 N, vec3 V, float power)\n"
+"{\n"
+" return pow(clamp(dot(N, normalize(V + -Ldir)), 0.0, 1.0), power)*Lcol;\n"
+"}\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
+" gl_Position = u_proj * u_view * Vertex;\n"
+" vec3 Normal = mat3(u_world) * in_normal;\n"
+" vec3 viewVec = normalize(u_eye - Vertex.xyz);\n"
+
+" v_tex0 = in_tex0;\n"
+
+" v_color = in_color;\n"
+" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
+" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse*lightStrength;\n"
+" v_color = clamp(v_color, 0.0, 1.0);\n"
+" v_color *= u_matColor;\n"
+
+" // reflect V along Normal\n"
+" vec3 uv2 = Normal*dot(viewVec, Normal)*2.0 - viewVec;\n"
+" 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"
+
+" 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"
+
+" v_fog = DoFog(gl_Position.w);\n"
+"}\n"
+;
diff --git a/src/extras/shaders/neoWorldVC.frag b/src/extras/shaders/neoWorldVC.frag
new file mode 100644
index 00000000..0270f305
--- /dev/null
+++ b/src/extras/shaders/neoWorldVC.frag
@@ -0,0 +1,25 @@
+uniform sampler2D tex0;
+uniform sampler2D tex1;
+
+uniform vec4 u_lightMap;
+
+in vec4 v_color;
+in vec2 v_tex0;
+in vec2 v_tex1;
+in float v_fog;
+
+out vec4 color;
+
+void
+main(void)
+{
+ vec4 t0 = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
+ vec4 t1 = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));
+
+ color = t0*v_color*(1 + u_lightMap*(t1-1));
+ color.a = v_color.a*t0.a*u_lightMap.a;
+
+ color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
+ DoAlphaTest(color.a);
+}
+
diff --git a/src/extras/shaders/neoWorldVC_PS.cso b/src/extras/shaders/neoWorldVC_PS.cso
new file mode 100644
index 00000000..5e8d1696
--- /dev/null
+++ b/src/extras/shaders/neoWorldVC_PS.cso
Binary files differ
diff --git a/src/extras/shaders/neoWorldVC_PS.hlsl b/src/extras/shaders/neoWorldVC_PS.hlsl
new file mode 100644
index 00000000..fc4f1de9
--- /dev/null
+++ b/src/extras/shaders/neoWorldVC_PS.hlsl
@@ -0,0 +1,25 @@
+sampler2D Diffuse : register(s0);
+sampler2D Light : register(s1);
+float4 fogColor : register(c0);
+float4 lm : register(c1);
+
+struct PS_INPUT
+{
+ float4 Color : COLOR0;
+ float3 Tex0 : TEXCOORD0;
+ float2 Tex1 : TEXCOORD1;
+};
+
+float4
+main(PS_INPUT IN) : COLOR
+{
+ float4 t0 = tex2D(Diffuse, IN.Tex0.xy);
+ float4 t1 = tex2D(Light, IN.Tex1);
+
+ float4 col = t0*IN.Color*(1 + lm*(t1-1));
+ col.a = IN.Color.a*t0.a*lm.a;
+
+ col.rgb = lerp(fogColor.rgb, col.rgb, IN.Tex0.z);
+
+ return col;
+}
diff --git a/src/extras/shaders/neoWorldVC_PS.inc b/src/extras/shaders/neoWorldVC_PS.inc
new file mode 100644
index 00000000..eb8bf2ee
--- /dev/null
+++ b/src/extras/shaders/neoWorldVC_PS.inc
@@ -0,0 +1,46 @@
+static unsigned char neoWorldVC_PS_cso[] = {
+ 0x00, 0x02, 0xff, 0xff, 0xfe, 0xff, 0x3e, 0x00, 0x43, 0x54, 0x41, 0x42,
+ 0x1c, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff,
+ 0x04, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0xbb, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x02, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x84, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x01, 0x00, 0x06, 0x00,
+ 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0xa8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x06, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x44, 0x69, 0x66, 0x66, 0x75, 0x73, 0x65, 0x00, 0x04, 0x00, 0x0c, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4c, 0x69, 0x67, 0x68, 0x74, 0x00, 0xab, 0xab, 0x04, 0x00, 0x0c, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x6f, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x00, 0xab, 0xab, 0xab,
+ 0x01, 0x00, 0x03, 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6d, 0x00, 0x70, 0x73, 0x5f, 0x32, 0x5f,
+ 0x30, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20,
+ 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61,
+ 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72,
+ 0x20, 0x39, 0x2e, 0x32, 0x39, 0x2e, 0x39, 0x35, 0x32, 0x2e, 0x33, 0x31,
+ 0x31, 0x31, 0x00, 0xab, 0x51, 0x00, 0x00, 0x05, 0x02, 0x00, 0x0f, 0xa0,
+ 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x0f, 0x90, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x07, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80,
+ 0x01, 0x00, 0x03, 0xb0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90,
+ 0x00, 0x08, 0x0f, 0xa0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90,
+ 0x01, 0x08, 0x0f, 0xa0, 0x42, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, 0x80,
+ 0x01, 0x00, 0xe4, 0xb0, 0x01, 0x08, 0xe4, 0xa0, 0x42, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0x0f, 0x80, 0x00, 0x00, 0xe4, 0xb0, 0x00, 0x08, 0xe4, 0xa0,
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0xe4, 0x80,
+ 0x02, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x80,
+ 0x02, 0x00, 0x55, 0xa0, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80,
+ 0x01, 0x00, 0xe4, 0xa0, 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xff, 0x80,
+ 0x05, 0x00, 0x00, 0x03, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0xe4, 0x90, 0x05, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x80,
+ 0x01, 0x00, 0xff, 0x80, 0x00, 0x00, 0xff, 0x90, 0x05, 0x00, 0x00, 0x03,
+ 0x02, 0x00, 0x08, 0x80, 0x00, 0x00, 0xff, 0x80, 0x01, 0x00, 0xff, 0xa0,
+ 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x80, 0x01, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0xe4, 0x80, 0x00, 0x00, 0xe4, 0xa1, 0x04, 0x00, 0x00, 0x04,
+ 0x02, 0x00, 0x07, 0x80, 0x00, 0x00, 0xaa, 0xb0, 0x00, 0x00, 0xe4, 0x80,
+ 0x00, 0x00, 0xe4, 0xa0, 0x01, 0x00, 0x00, 0x02, 0x00, 0x08, 0x0f, 0x80,
+ 0x02, 0x00, 0xe4, 0x80, 0xff, 0xff, 0x00, 0x00
+};
diff --git a/src/extras/shaders/neoWorldVC_fs_gl3.inc b/src/extras/shaders/neoWorldVC_fs_gl3.inc
new file mode 100644
index 00000000..c861d334
--- /dev/null
+++ b/src/extras/shaders/neoWorldVC_fs_gl3.inc
@@ -0,0 +1,27 @@
+const char *neoWorldVC_frag_src =
+"uniform sampler2D tex0;\n"
+"uniform sampler2D tex1;\n"
+
+"uniform vec4 u_lightMap;\n"
+
+"in vec4 v_color;\n"
+"in vec2 v_tex0;\n"
+"in vec2 v_tex1;\n"
+"in float v_fog;\n"
+
+"out vec4 color;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" vec4 t0 = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
+" vec4 t1 = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));\n"
+
+" color = t0*v_color*(1 + u_lightMap*(t1-1));\n"
+" color.a = v_color.a*t0.a*u_lightMap.a;\n"
+
+" color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
+" DoAlphaTest(color.a);\n"
+"}\n"
+
+;
diff --git a/src/extras/shaders/simple.frag b/src/extras/shaders/simple.frag
new file mode 100644
index 00000000..87157beb
--- /dev/null
+++ b/src/extras/shaders/simple.frag
@@ -0,0 +1,16 @@
+uniform sampler2D tex0;
+
+in vec4 v_color;
+in vec2 v_tex0;
+in float v_fog;
+
+out vec4 color;
+
+void
+main(void)
+{
+ color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
+ color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
+ DoAlphaTest(color.a);
+}
+
diff --git a/src/extras/shaders/simple_fs_gl3.inc b/src/extras/shaders/simple_fs_gl3.inc
new file mode 100644
index 00000000..47d89971
--- /dev/null
+++ b/src/extras/shaders/simple_fs_gl3.inc
@@ -0,0 +1,18 @@
+const char *simple_frag_src =
+"uniform sampler2D tex0;\n"
+
+"in vec4 v_color;\n"
+"in vec2 v_tex0;\n"
+"in float v_fog;\n"
+
+"out vec4 color;\n"
+
+"void\n"
+"main(void)\n"
+"{\n"
+" color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
+" color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
+" DoAlphaTest(color.a);\n"
+"}\n"
+
+;
diff --git a/src/extras/shaders/standardConstants.h b/src/extras/shaders/standardConstants.h
new file mode 100644
index 00000000..088df7dd
--- /dev/null
+++ b/src/extras/shaders/standardConstants.h
@@ -0,0 +1,28 @@
+float4x4 combinedMat : register(c0);
+float4x4 worldMat : register(c4);
+float3x3 normalMat : register(c8);
+float4 matCol : register(c12);
+float4 surfProps : register(c13);
+float4 fogData : register(c14);
+float4 ambientLight : register(c15);
+
+#define surfAmbient (surfProps.x)
+#define surfSpecular (surfProps.y)
+#define surfDiffuse (surfProps.z)
+
+#define fogStart (fogData.x)
+#define fogEnd (fogData.y)
+#define fogRange (fogData.z)
+#define fogDisable (fogData.w)
+
+#include "lighting.h"
+
+int numDirLights : register(i0);
+int numPointLights : register(i1);
+int numSpotLights : register(i2);
+int4 firstLight : register(c16);
+Light lights[8] : register(c17);
+
+#define firstDirLight (firstLight.x)
+#define firstPointLight (firstLight.y)
+#define firstSpotLight (firstLight.z)
diff --git a/src/modelinfo/PedModelInfo.cpp b/src/modelinfo/PedModelInfo.cpp
index 8d07737f..e4758a96 100644
--- a/src/modelinfo/PedModelInfo.cpp
+++ b/src/modelinfo/PedModelInfo.cpp
@@ -8,6 +8,7 @@
#include "NodeName.h"
#include "VisibilityPlugins.h"
#include "ModelInfo.h"
+#include "custompipes.h"
//--MIAMI: file done
@@ -39,6 +40,9 @@ RwObjectNameIdAssocation CPedModelInfo::m_pPedIds[PED_NODE_MAX] = {
void
CPedModelInfo::SetClump(RpClump *clump)
{
+#ifdef EXTENDED_PIPELINES
+ CustomPipes::AttachRimPipe(clump);
+#endif
CClumpModelInfo::SetClump(clump);
SetFrameIds(m_pPedIds); // not needed in VC actually
if(m_hitColModel == nil)
diff --git a/src/modelinfo/SimpleModelInfo.cpp b/src/modelinfo/SimpleModelInfo.cpp
index a7e6d56c..2e6e557e 100644
--- a/src/modelinfo/SimpleModelInfo.cpp
+++ b/src/modelinfo/SimpleModelInfo.cpp
@@ -4,6 +4,7 @@
#include "Camera.h"
#include "ModelInfo.h"
#include "AnimManager.h"
+#include "custompipes.h"
//--MIAMI: file done
@@ -88,6 +89,13 @@ CSimpleModelInfo::SetAtomic(int n, RpAtomic *atomic)
if(RpGeometryGetFlags(geo) & rpGEOMETRYNORMALS &&
RpGeometryGetNumTriangles(geo) > 200)
debug("%s has %d polys\n", m_name, RpGeometryGetNumTriangles(geo));
+
+#ifdef EXTENDED_PIPELINES
+ if(m_wetRoadReflection)
+ CustomPipes::AttachGlossPipe(atomic);
+ else
+ CustomPipes::AttachWorldPipe(atomic);
+#endif
}
void
diff --git a/src/modelinfo/VehicleModelInfo.cpp b/src/modelinfo/VehicleModelInfo.cpp
index 11f78495..5d69a921 100644
--- a/src/modelinfo/VehicleModelInfo.cpp
+++ b/src/modelinfo/VehicleModelInfo.cpp
@@ -19,6 +19,7 @@
#include "Bike.h"
#include "ModelIndices.h"
#include "ModelInfo.h"
+#include "custompipes.h"
//--MIAMI: done
@@ -210,7 +211,7 @@ CVehicleModelInfo::CreateInstance(void)
clumpframe = RpClumpGetFrame(clump);
comp1 = ChooseComponent();
- if(comp1 != -1){
+ if(comp1 != -1 && m_comps[comp1]){
atomic = RpAtomicClone(m_comps[comp1]);
f = RwFrameCreate();
RwFrameTransform(f,
@@ -223,7 +224,7 @@ CVehicleModelInfo::CreateInstance(void)
ms_compsUsed[0] = comp1;
comp2 = ChooseSecondComponent();
- if(comp2 != -1){
+ if(comp2 != -1 && m_comps[comp2]){
atomic = RpAtomicClone(m_comps[comp2]);
f = RwFrameCreate();
RwFrameTransform(f,
@@ -1124,6 +1125,10 @@ CVehicleModelInfo::SetEnvironmentMap(void)
for(i = 0; i < wheelmi->m_numAtomics; i++)
SetEnvironmentMapCB(wheelmi->m_atomics[i], nil);
}
+
+#ifdef EXTENDED_PIPELINES
+ CustomPipes::AttachVehiclePipe(m_clump);
+#endif
}
void
diff --git a/src/objects/ParticleObject.cpp b/src/objects/ParticleObject.cpp
index b2a77bc5..6ed74214 100644
--- a/src/objects/ParticleObject.cpp
+++ b/src/objects/ParticleObject.cpp
@@ -124,8 +124,6 @@ CParticleObject::AddObject(uint16 type, CVector const &pos, CVector const &targe
{
CParticleObject *pobj = pUnusedListHead;
- ASSERT(pobj != nil);
-
if ( pobj == nil )
{
printf("Error: No particle objects available!\n");
diff --git a/src/peds/Ped.cpp b/src/peds/Ped.cpp
index 4c8a29cc..390c3ccd 100644
--- a/src/peds/Ped.cpp
+++ b/src/peds/Ped.cpp
@@ -63,6 +63,7 @@
#include "Debug.h"
#include "GameLogic.h"
#include "Bike.h"
+#include "WindModifiers.h"
#include "CutsceneShadow.h"
#define CAN_SEE_ENTITY_ANGLE_THRESHOLD DEGTORAD(60.0f)
@@ -438,7 +439,7 @@ CPed::CPed(uint32 pedType) : m_pedIK(this)
bCrouchWhenScared = false;
bKnockedOffBike = false;
b158_8 = false;
- b158_10 = false;
+ bCollectBusFare = false;
bBoughtIceCream = false;
b158_40 = false;
@@ -2797,6 +2798,7 @@ CPed::SetModelIndex(uint32 mi)
{
m_pRTShadow = new CCutsceneShadow;
m_pRTShadow->Create(m_rwObject, 10, 1, 1, 1);
+ //m_pRTShadow->Create(m_rwObject, 8, 0, 0, 0);
}
#endif
}
@@ -2999,6 +3001,22 @@ CPed::CanBeDeleted(void)
}
}
+//--MIAMI: done
+bool
+CPed::CanBeDeletedEvenInVehicle(void)
+{
+ switch (CharCreatedBy) {
+ case RANDOM_CHAR:
+ return true;
+ case MISSION_CHAR:
+ return false;
+ case TODO_CHAR:
+ return false;
+ default:
+ return true;
+ }
+}
+
// --MIAMI: Done
bool
CPed::CanPedDriveOff(void)
@@ -3158,6 +3176,8 @@ CPed::SetStoredObjective(void)
case OBJECTIVE_GOTO_CHAR_ON_FOOT:
case OBJECTIVE_GOTO_CHAR_ON_FOOT_WALKING:
case OBJECTIVE_HASSLE_CHAR:
+ case OBJECTIVE_FOLLOW_CHAR_IN_FORMATION:
+ case OBJECTIVE_LEAVE_CAR:
case OBJECTIVE_ENTER_CAR_AS_PASSENGER:
case OBJECTIVE_ENTER_CAR_AS_DRIVER:
case OBJECTIVE_GOTO_AREA_ON_FOOT:
@@ -4728,9 +4748,11 @@ CPed::InflictDamage(CEntity *damagedBy, eWeaponType method, float damage, ePedPi
} else {
CDarkel::RegisterKillNotByPlayer(this, method);
}
- if (method == WEAPONTYPE_DROWNING)
+ if (method == WEAPONTYPE_DROWNING) {
bIsInTheAir = false;
- // TODO(Miami): timesDrowned
+ if (FindPlayerPed() == this)
+ CStats::TimesDrowned++;
+ }
return true;
}
@@ -11804,7 +11826,11 @@ CPed::ProcessControl(void)
CPed::Chat();
break;
case PED_AIM_GUN:
- if (m_pPointGunAt && m_pPointGunAt->IsPed() && ((CPed*)m_pPointGunAt)->CanSeeEntity(this, CAN_SEE_ENTITY_ANGLE_THRESHOLD * 2)) {
+ if (m_pPointGunAt && m_pPointGunAt->IsPed()
+#ifdef FIX_BUGS
+ && !GetWeapon()->IsTypeMelee()
+#endif
+ && ((CPed*)m_pPointGunAt)->CanSeeEntity(this, CAN_SEE_ENTITY_ANGLE_THRESHOLD * 2)) {
((CPed*)m_pPointGunAt)->ReactToPointGun(this);
}
PointGunAt();
@@ -12976,10 +13002,10 @@ CPed::PedSetInCarCB(CAnimBlendAssociation *animAssoc, void *arg)
ped->b157_40 = false;
ped->bRemoveFromWorld = true;
}
- if (ped->b158_10) {
- ped->b158_10 = false;
+ if (ped->bCollectBusFare) {
+ ped->bCollectBusFare = false;
if (FindPlayerPed())
- FindPlayerPed()->m_nPadUpPressedInMilliseconds += 5;
+ FindPlayerPed()->m_nLastBusFareCollected += 5;
}
if (!ped->IsNotInWreckedVehicle() || ped->DyingOrDead())
@@ -14601,7 +14627,7 @@ CPed::ProcessObjective(void)
if (m_pMyVehicle) {
m_pMyVehicle->AutoPilot.m_nCruiseSpeed = 0;
} else {
- float closestVehDist = 3600.0f;
+ float closestVehDist = SQR(60.0f);
int16 lastVehicle;
CEntity* vehicles[8];
CWorld::FindObjectsInRange(GetPosition(), 25.0f, true, &lastVehicle, 6, vehicles, false, true, false, false, false);
@@ -14614,11 +14640,11 @@ CPed::ProcessObjective(void)
CVector ourSpeed = GetSpeed();
*/
CVector vehDistVec = nearVeh->GetPosition() - GetPosition();
- if (vehDistVec.Magnitude() < closestVehDist
+ if (vehDistVec.MagnitudeSqr() < closestVehDist
&& m_pedInObjective->m_pMyVehicle != nearVeh)
{
foundVeh = nearVeh;
- closestVehDist = vehDistVec.Magnitude();
+ closestVehDist = vehDistVec.MagnitudeSqr();
}
}
m_pMyVehicle = foundVeh;
@@ -15166,7 +15192,7 @@ CPed::ProcessObjective(void)
b157_40 = true;
CPlayerPed *player = FindPlayerPed();
if (pBus->IsPassenger(player) || pBus->IsDriver(player)) {
- b158_10 = true;
+ bCollectBusFare = true;
}
}
}
@@ -16425,6 +16451,77 @@ CPed::PreRender(void)
}
#endif
+ bool bIsWindModifierTurnedOn = false;
+ float fAnyDirectionShift = 1.0f;
+ if (IsPlayer() && CWindModifiers::FindWindModifier(GetPosition(), &fAnyDirectionShift, &fAnyDirectionShift)
+ && !CCullZones::PlayerNoRain() && GetPedState() != PED_DRIVING)
+ bIsWindModifierTurnedOn = true;
+
+ bool bIsPedDrivingBikeOrOpenTopCar = false;
+ if (GetPedState() == PED_DRIVING && m_pMyVehicle) {
+ if (m_pMyVehicle->m_vehType == VEHICLE_TYPE_BIKE
+ || (m_pMyVehicle->m_vehType == VEHICLE_TYPE_CAR && m_pMyVehicle->IsOpenTopCar()))
+ bIsPedDrivingBikeOrOpenTopCar = true;
+ }
+
+ if (bIsWindModifierTurnedOn || bIsPedDrivingBikeOrOpenTopCar) {
+ float fWindMult = 0.0f;
+ if (bIsPedDrivingBikeOrOpenTopCar) {
+ fWindMult = DotProduct(m_pMyVehicle->m_vecMoveSpeed, GetForward());
+ if (fWindMult > 0.4f) {
+ float volume = (fWindMult - 0.4f) / 0.6f;
+ DMAudio.PlayOneShot(m_audioEntityId, SOUND_SET_202, volume); //TODO(MIAMI): revise when audio is done
+ }
+ }
+
+ if (bIsWindModifierTurnedOn)
+ fWindMult = Min(fWindMult, Abs(fAnyDirectionShift - 1.0f));
+
+ RpHAnimHierarchy* hier = GetAnimHierarchyFromSkinClump(GetClump());
+ int32 idx;
+ RwV3d scale;
+ float fScaleOffset;
+
+ fScaleOffset = fWindMult * 0.2f;
+ scale.x = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+ scale.y = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+ scale.z = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+
+ idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_NECK));
+ RwMatrix* neck = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
+ RwMatrixScale(neck, &scale, rwCOMBINEPRECONCAT);
+
+ fScaleOffset = fWindMult * 0.1f;
+ scale.x = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+ scale.y = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+ scale.z = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+
+ idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_CLAVICLEL));
+ RwMatrix* clavicleL = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
+ RwMatrixScale(clavicleL, &scale, rwCOMBINEPRECONCAT);
+
+ idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_CLAVICLER));
+ RwMatrix* clavicleR = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
+ RwMatrixScale(clavicleR, &scale, rwCOMBINEPRECONCAT);
+
+ idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_MID));
+ RwMatrix* mid = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
+ RwMatrixScale(mid, &scale, rwCOMBINEPRECONCAT);
+
+ fScaleOffset = fWindMult * 0.2f;
+ scale.x = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+ scale.y = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+ scale.z = CGeneral::GetRandomNumberInRange(1.0f - fScaleOffset, 1.0f + fScaleOffset);
+
+ idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_UPPERARML));
+ RwMatrix* upperArmL = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
+ RwMatrixScale(upperArmL, &scale, rwCOMBINEPRECONCAT);
+
+ idx = RpHAnimIDGetIndex(hier, ConvertPedNode2BoneTag(PED_UPPERARMR));
+ RwMatrix* upperArmR = &RpHAnimHierarchyGetMatrixArray(hier)[idx];
+ RwMatrixScale(upperArmR, &scale, rwCOMBINEPRECONCAT);
+ }
+
if (bBodyPartJustCameOff && bIsPedDieAnimPlaying && m_bodyPartBleeding != -1 && (CTimer::GetFrameCounter() & 7) > 3) {
CVector bloodDir(0.0f, 0.0f, 0.0f);
CVector bloodPos(0.0f, 0.0f, 0.0f);
diff --git a/src/peds/Ped.h b/src/peds/Ped.h
index 6b0cc5fb..56244752 100644
--- a/src/peds/Ped.h
+++ b/src/peds/Ped.h
@@ -485,7 +485,7 @@ public:
uint32 bCrouchWhenScared : 1;
uint32 bKnockedOffBike : 1;
uint32 b158_8 : 1;
- uint32 b158_10 : 1;
+ uint32 bCollectBusFare : 1;
uint32 bBoughtIceCream : 1;
uint32 b158_40 : 1;
//uint32 b158_80
@@ -911,6 +911,7 @@ public:
bool IsPedInControl(void);
bool CanPedDriveOff(void);
bool CanBeDeleted(void);
+ bool CanBeDeletedEvenInVehicle(void);
bool CanStrafeOrMouseControl(void);
bool CanPedReturnToState(void);
void SetMoveState(eMoveState);
diff --git a/src/peds/PedChat.cpp b/src/peds/PedChat.cpp
index 4480a8cd..73a8e59c 100644
--- a/src/peds/PedChat.cpp
+++ b/src/peds/PedChat.cpp
@@ -131,9 +131,9 @@ CPed::Say(uint16 audio)
case SOUND_PED_FLEE_SPRINT:
case SOUND_PED_TAXI_WAIT:
case SOUND_PED_EVADE:
- case SOUND_PED_CAR_COLLISION:
- case SOUND_PED_BOAT_COLLISION:
- case SOUND_PED_HORN_ACTIVE:
+ case SOUND_PED_CRASH_VEHICLE:
+ case SOUND_PED_CRASH_CAR:
+ case SOUND_PED_ANNOYED_DRIVER:
break;
default:
return;
diff --git a/src/peds/PlayerPed.cpp b/src/peds/PlayerPed.cpp
index cba01e31..041fb5e8 100644
--- a/src/peds/PlayerPed.cpp
+++ b/src/peds/PlayerPed.cpp
@@ -83,7 +83,7 @@ CPlayerPed::CPlayerPed(void) : CPed(PEDTYPE_PLAYER1)
m_pMeleeList[i] = nil;
}
m_nCheckPlayersIndex = 0;
- m_nPadUpPressedInMilliseconds = 0;
+ m_nLastBusFareCollected = 0;
idleAnimBlockIndex = CAnimManager::GetAnimationBlockIndex("playidles");
}
diff --git a/src/peds/PlayerPed.h b/src/peds/PlayerPed.h
index 3b8d8fcb..8a6e7576 100644
--- a/src/peds/PlayerPed.h
+++ b/src/peds/PlayerPed.h
@@ -43,7 +43,7 @@ public:
float m_fGunSpinSpeed; // for minigun
float m_fGunSpinAngle;
unsigned int m_nPadDownPressedInMilliseconds;
- unsigned int m_nPadUpPressedInMilliseconds;
+ unsigned int m_nLastBusFareCollected;
CPlayerPed();
~CPlayerPed();
diff --git a/src/peds/Population.cpp b/src/peds/Population.cpp
index f7e0973f..18c1ce04 100644
--- a/src/peds/Population.cpp
+++ b/src/peds/Population.cpp
@@ -127,8 +127,7 @@ CPopulation::Initialise()
void
CPopulation::RemovePed(CPed *ent)
{
- // CPed dtor already does that
- // CWorld::Remove((CEntity*)ent);
+ CWorld::Remove((CEntity*)ent);
delete ent;
}
diff --git a/src/render/Antennas.cpp b/src/render/Antennas.cpp
index 452069a0..b9da95cb 100644
--- a/src/render/Antennas.cpp
+++ b/src/render/Antennas.cpp
@@ -2,6 +2,8 @@
#include "Antennas.h"
+//--MIAMI: file done
+
CAntenna CAntennas::aAntennas[NUMANTENNAS];
void
diff --git a/src/render/Clouds.cpp b/src/render/Clouds.cpp
index c6ba0f10..15bae90b 100644
--- a/src/render/Clouds.cpp
+++ b/src/render/Clouds.cpp
@@ -71,6 +71,43 @@ CClouds::Update(void)
#endif
}
+float StarCoorsX[9] = { 0.0f, 0.05f, 0.13f, 0.4f, 0.7f, 0.6f, 0.27f, 0.55f, 0.75f };
+float StarCoorsY[9] = { 0.0f, 0.45f, 0.9f, 1.0f, 0.85f, 0.52f, 0.48f, 0.35f, 0.2f };
+float StarSizes[9] = { 1.0f, 1.4f, 0.9f, 1.0f, 0.6f, 1.5f, 1.3f, 1.0f, 0.8f };
+
+float LowCloudsX[12] = { 1.0f, 0.7f, 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, 0.8f, -0.8f, 0.4f, -0.4f };
+float LowCloudsY[12] = { 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f, 1.0f, 0.7f, 0.4f, 0.4f, -0.8f, -0.8f };
+float LowCloudsZ[12] = { 0.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0.3f, 0.9f, 0.4f, 1.3f, 1.4f, 1.2f, 1.7f };
+
+float CoorsOffsetX[37] = {
+ 0.0f, 60.0f, 72.0f, 48.0f, 21.0f, 12.0f,
+ 9.0f, -3.0f, -8.4f, -18.0f, -15.0f, -36.0f,
+ -40.0f, -48.0f, -60.0f, -24.0f, 100.0f, 100.0f,
+ 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f,
+ 100.0f, 100.0f, -30.0f, -20.0f, 10.0f, 30.0f,
+ 0.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f
+};
+float CoorsOffsetY[37] = {
+ 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f,
+ 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f,
+ 100.0f, 100.0f, 100.0f, 100.0f, -30.0f, 10.0f,
+ -25.0f, -5.0f, 28.0f, -10.0f, 10.0f, 0.0f,
+ 15.0f, 40.0f, -100.0f, -100.0f, -100.0f, -100.0f,
+ -100.0f, -40.0f, -20.0f, 0.0f, 10.0f, 30.0f, 35.0f
+};
+float CoorsOffsetZ[37] = {
+ 2.0f, 1.0f, 0.0f, 0.3f, 0.7f, 1.4f,
+ 1.7f, 0.24f, 0.7f, 1.3f, 1.6f, 1.0f,
+ 1.2f, 0.3f, 0.7f, 1.4f, 0.0f, 0.1f,
+ 0.5f, 0.4f, 0.55f, 0.75f, 1.0f, 1.4f,
+ 1.7f, 2.0f, 2.0f, 2.3f, 1.9f, 2.4f,
+ 2.0f, 2.0f, 1.5f, 1.2f, 1.7f, 1.5f, 2.1f
+};
+
+uint8 BowRed[6] = { 30, 30, 30, 10, 0, 15 };
+uint8 BowGreen[6] = { 0, 15, 30, 30, 0, 0 };
+uint8 BowBlue[6] = { 0, 0, 0, 10, 30, 30 };
+
void
CClouds::Render(void)
{
@@ -94,11 +131,10 @@ CClouds::Render(void)
float minute = CClock::GetHours()*60 + CClock::GetMinutes() + CClock::GetSeconds()/60.0f;
RwV3d campos = *(RwV3d*)&TheCamera.GetPosition();
- float coverage = Max(CWeather::Foggyness, CWeather::Foggyness);
-
// Moon
float moonfadeout = Abs(minute - 180.0f); // fully visible at 3AM
if((int)moonfadeout < 180){ // fade in/out 3 hours
+ float coverage = Max(CWeather::Foggyness, CWeather::CloudCoverage);
int brightness = (1.0f - coverage) * (180 - (int)moonfadeout);
RwV3d pos = { 0.0f, -100.0f, 15.0f };
RwV3dAdd(&worldpos, &campos, &pos);
@@ -122,11 +158,10 @@ CClouds::Render(void)
else if(CClock::GetHours() == 5)
starintens = 255 * (60 - CClock::GetMinutes())/60.0f;
if(starintens != 0){
- // R
- static float StarCoorsX[9] = { 0.0f, 0.05f, 0.13f, 0.4f, 0.7f, 0.6f, 0.27f, 0.55f, 0.75f };
- static float StarCoorsY[9] = { 0.0f, 0.45f, 0.9f, 1.0f, 0.85f, 0.52f, 0.48f, 0.35f, 0.2f };
- static float StarSizes[9] = { 1.0f, 1.4f, 0.9f, 1.0f, 0.6f, 1.5f, 1.3f, 1.0f, 0.8f };
+ float coverage = Max(CWeather::Foggyness, CWeather::CloudCoverage);
int brightness = (1.0f - coverage) * starintens;
+
+ // R
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[0]));
for(i = 0; i < 11; i++){
RwV3d pos = { 100.0f, 0.0f, 10.0f };
@@ -155,13 +190,7 @@ CClouds::Render(void)
}
// Low clouds
- static float LowCloudsX[12] = { 1.0f, 0.7f, 0.0f, -0.7f, -1.0f, -0.7f,
- 0.0f, 0.7f, 0.8f, -0.8f, 0.4f, -0.4f };
- static float LowCloudsY[12] = { 0.0f, -0.7f, -1.0f, -0.7f, 0.0f, 0.7f,
- 1.0f, 0.7f, 0.4f, 0.4f, -0.8f, -0.8f };
- static float LowCloudsZ[12] = { 0.0f, 1.0f, 0.5f, 0.0f, 1.0f, 0.3f,
- 0.9f, 0.4f, 1.3f, 1.4f, 1.2f, 1.7f };
- float lowcloudintensity = 1.0f - Max(coverage, CWeather::ExtraSunnyness);
+ float lowcloudintensity = 1.0f - Max(Max(CWeather::Foggyness, CWeather::CloudCoverage), CWeather::ExtraSunnyness);
int r = CTimeCycle::GetLowCloudsRed() * lowcloudintensity;
int g = CTimeCycle::GetLowCloudsGreen() * lowcloudintensity;
int b = CTimeCycle::GetLowCloudsBlue() * lowcloudintensity;
@@ -184,30 +213,6 @@ CClouds::Render(void)
float rot_cos = Cos(CloudRotation);
int fluffyalpha = 160 * (1.0f - Max(CWeather::Foggyness, CWeather::ExtraSunnyness));
if(fluffyalpha != 0){
- static float CoorsOffsetX[37] = {
- 0.0f, 60.0f, 72.0f, 48.0f, 21.0f, 12.0f,
- 9.0f, -3.0f, -8.4f, -18.0f, -15.0f, -36.0f,
- -40.0f, -48.0f, -60.0f, -24.0f, 100.0f, 100.0f,
- 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f,
- 100.0f, 100.0f, -30.0f, -20.0f, 10.0f, 30.0f,
- 0.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f, -100.0f
- };
- static float CoorsOffsetY[37] = {
- 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f,
- 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f,
- 100.0f, 100.0f, 100.0f, 100.0f, -30.0f, 10.0f,
- -25.0f, -5.0f, 28.0f, -10.0f, 10.0f, 0.0f,
- 15.0f, 40.0f, -100.0f, -100.0f, -100.0f, -100.0f,
- -100.0f, -40.0f, -20.0f, 0.0f, 10.0f, 30.0f, 35.0f
- };
- static float CoorsOffsetZ[37] = {
- 2.0f, 1.0f, 0.0f, 0.3f, 0.7f, 1.4f,
- 1.7f, 0.24f, 0.7f, 1.3f, 1.6f, 1.0f,
- 1.2f, 0.3f, 0.7f, 1.4f, 0.0f, 0.1f,
- 0.5f, 0.4f, 0.55f, 0.75f, 1.0f, 1.4f,
- 1.7f, 2.0f, 2.0f, 2.3f, 1.9f, 2.4f,
- 2.0f, 2.0f, 1.5f, 1.2f, 1.7f, 1.5f, 2.1f
- };
static bool bCloudOnScreen[37];
float sundist, hilight;
@@ -230,7 +235,7 @@ CClouds::Render(void)
int bb = CTimeCycle::GetFluffyCloudsBottomBlue();
int distLimit = (3*SCREEN_WIDTH)/4;
if(sundist < distLimit){
- hilight = (1.0f - coverage) * (1.0f - sundist/(float)distLimit);
+ hilight = (1.0f - Max(CWeather::Foggyness, CWeather::CloudCoverage)) * (1.0f - sundist/(float)distLimit);
tr = tr*(1.0f-hilight) + 255*hilight;
tg = tg*(1.0f-hilight) + 190*hilight;
tb = tb*(1.0f-hilight) + 190*hilight;
@@ -277,9 +282,6 @@ CClouds::Render(void)
// Rainbow
if(CWeather::Rainbow != 0.0f){
- static uint8 BowRed[6] = { 30, 30, 30, 10, 0, 15 };
- static uint8 BowGreen[6] = { 0, 15, 30, 30, 0, 0 };
- static uint8 BowBlue[6] = { 0, 0, 0, 10, 30, 30 };
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[0]));
for(i = 0; i < 6; i++){
RwV3d pos = { i*1.5f, 100.0f, 5.0f };
diff --git a/src/render/Coronas.cpp b/src/render/Coronas.cpp
index efe486fe..2d621d18 100644
--- a/src/render/Coronas.cpp
+++ b/src/render/Coronas.cpp
@@ -2,6 +2,7 @@
#include "main.h"
#include "General.h"
+#include "RenderBuffer.h"
#include "TxdStore.h"
#include "Camera.h"
#include "Sprite.h"
@@ -12,6 +13,8 @@
#include "Timecycle.h"
#include "Coronas.h"
+//--MIAMI: file done
+
struct FlareDef
{
float position;
@@ -130,13 +133,21 @@ void
CCoronas::RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha,
const CVector &coors, float size, float drawDist, RwTexture *tex,
int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle,
- bool longDist, float nearDist)
+ bool useNearDist, float nearDist)
{
int i;
if(sq(drawDist) < (TheCamera.GetPosition() - coors).MagnitudeSqr2D())
return;
+ if(useNearDist){
+ float dist = (TheCamera.GetPosition() - coors).Magnitude();
+ if(dist < 35.0f)
+ return;
+ if(dist < 50.0f)
+ alpha *= (dist - 35.0f)/(50.0f - 35.0f);
+ }
+
for(i = 0; i < NUMCORONAS; i++)
if(aCoronas[i].id == id)
break;
@@ -189,17 +200,19 @@ CCoronas::RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 al
aCoronas[i].reflection = reflection;
aCoronas[i].LOScheck = LOScheck;
aCoronas[i].drawStreak = drawStreak;
+ aCoronas[i].useNearDist = useNearDist;
+ aCoronas[i].nearDist = nearDist;
}
void
CCoronas::RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha,
const CVector &coors, float size, float drawDist, uint8 type,
int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle,
- bool longDist, float nearDist)
+ bool useNearDist, float nearDist)
{
RegisterCorona(id, red, green, blue, alpha, coors, size, drawDist,
gpCoronaTexture[type], flareType, reflection, LOScheck, drawStreak, someAngle,
- longDist, nearDist);
+ useNearDist, nearDist);
}
void
@@ -258,7 +271,10 @@ CCoronas::Render(void)
CVector spriteCoors;
float spritew, spriteh;
- if(CSprite::CalcScreenCoors(aCoronas[i].coors, spriteCoors, &spritew, &spriteh, true)){
+ if(!CSprite::CalcScreenCoors(aCoronas[i].coors, spriteCoors, &spritew, &spriteh, true)){
+ aCoronas[i].offScreen = true;
+ aCoronas[i].sightClear = false;
+ }else{
aCoronas[i].offScreen = false;
if(spriteCoors.x < 0.0f || spriteCoors.y < 0.0f ||
@@ -292,10 +308,7 @@ CCoronas::Render(void)
}
- if(aCoronas[i].fadeAlpha == 0)
- continue;
-
- if(spriteCoors.z < aCoronas[i].drawDist){
+ if(aCoronas[i].fadeAlpha && spriteCoors.z < aCoronas[i].drawDist){
float recipz = 1.0f/spriteCoors.z;
float fadeDistance = aCoronas[i].drawDist / 2.0f;
float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance;
@@ -312,7 +325,7 @@ CCoronas::Render(void)
if(CCoronas::aCoronas[i].id == SUN_CORE)
spriteCoors.z = 0.95f * RwCameraGetFarClipPlane(Scene.camera);
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(aCoronas[i].texture));
- spriteCoors.z -= 1.5f;
+ spriteCoors.z -= aCoronas[i].nearDist;
if(aCoronas[i].texture == gpCoronaTexture[8]){
// what's this?
@@ -370,14 +383,11 @@ CCoronas::Render(void)
recipz, 255);
}
}
- }else{
- aCoronas[i].offScreen = true;
- aCoronas[i].sightClear = false;
}
}
}
- RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
@@ -393,23 +403,24 @@ CCoronas::Render(void)
if(!aCoronas[i].hasValue[j] || !aCoronas[i].hasValue[j+1])
continue;
- int mod1 = (float)(6 - j) / 6 * 128;
- int mod2 = (float)(6 - (j+1)) / 6 * 128;
+ int alpha1 = (float)(6 - j) / 6 * 128;
+ int alpha2 = (float)(6 - (j+1)) / 6 * 128;
RwIm2DVertexSetScreenX(&vertexbufferX[0], aCoronas[i].prevX[j]);
RwIm2DVertexSetScreenY(&vertexbufferX[0], aCoronas[i].prevY[j]);
- RwIm2DVertexSetIntRGBA(&vertexbufferX[0], aCoronas[i].prevRed[j] * mod1 / 256, aCoronas[i].prevGreen[j] * mod1 / 256, aCoronas[i].prevBlue[j] * mod1 / 256, 255);
+ RwIm2DVertexSetIntRGBA(&vertexbufferX[0], aCoronas[i].prevRed[j] * alpha1 / 256, aCoronas[i].prevGreen[j] * alpha1 / 256, aCoronas[i].prevBlue[j] * alpha1 / 256, 255);
RwIm2DVertexSetScreenX(&vertexbufferX[1], aCoronas[i].prevX[j+1]);
RwIm2DVertexSetScreenY(&vertexbufferX[1], aCoronas[i].prevY[j+1]);
- RwIm2DVertexSetIntRGBA(&vertexbufferX[1], aCoronas[i].prevRed[j+1] * mod2 / 256, aCoronas[i].prevGreen[j+1] * mod2 / 256, aCoronas[i].prevBlue[j+1] * mod2 / 256, 255);
+ RwIm2DVertexSetIntRGBA(&vertexbufferX[1], aCoronas[i].prevRed[j+1] * alpha2 / 256, aCoronas[i].prevGreen[j+1] * alpha2 / 256, aCoronas[i].prevBlue[j+1] * alpha2 / 256, 255);
- // BUG: game doesn't do this
+#ifdef FIX_BUGS
RwIm2DVertexSetScreenZ(&vertexbufferX[0], RwIm2DGetNearScreenZ());
RwIm2DVertexSetCameraZ(&vertexbufferX[0], RwCameraGetNearClipPlane(Scene.camera));
RwIm2DVertexSetRecipCameraZ(&vertexbufferX[0], 1.0f/RwCameraGetNearClipPlane(Scene.camera));
RwIm2DVertexSetScreenZ(&vertexbufferX[1], RwIm2DGetNearScreenZ());
RwIm2DVertexSetCameraZ(&vertexbufferX[1], RwCameraGetNearClipPlane(Scene.camera));
RwIm2DVertexSetRecipCameraZ(&vertexbufferX[1], 1.0f/RwCameraGetNearClipPlane(Scene.camera));
+#endif
RwIm2DRenderLine(vertexbufferX, 2, 0, 1);
}
@@ -428,6 +439,8 @@ CCoronas::RenderReflections(void)
CEntity *entity;
if(CWeather::WetRoads > 0.0f){
+ CSprite::InitSpriteBuffer();
+
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
@@ -438,7 +451,8 @@ CCoronas::RenderReflections(void)
for(i = 0; i < NUMCORONAS; i++){
if(aCoronas[i].id == 0 ||
- aCoronas[i].fadeAlpha == 0 && aCoronas[i].alpha == 0)
+ aCoronas[i].fadeAlpha == 0 && aCoronas[i].alpha == 0 ||
+ aCoronas[i].reflection == 0)
continue;
// check if we want a reflection on this corona
@@ -453,11 +467,8 @@ CCoronas::RenderReflections(void)
}
}
- if(!aCoronas[i].renderReflection)
- continue;
-
// Don't draw if reflection is too high
- if(aCoronas[i].heightAboveRoad < 20.0f){
+ if(aCoronas[i].renderReflection && aCoronas[i].heightAboveRoad < 20.0f){
// don't draw if camera is below road
if(CCoronas::aCoronas[i].coors.z - aCoronas[i].heightAboveRoad > TheCamera.GetPosition().z)
continue;
@@ -469,13 +480,14 @@ CCoronas::RenderReflections(void)
float spritew, spriteh;
if(CSprite::CalcScreenCoors(coors, spriteCoors, &spritew, &spriteh, true)){
float drawDist = 0.75f * aCoronas[i].drawDist;
- drawDist = Min(drawDist, 50.0f);
+ drawDist = Min(drawDist, 55.0f);
if(spriteCoors.z < drawDist){
float fadeDistance = drawDist / 2.0f;
float distanceFade = spriteCoors.z < fadeDistance ? 1.0f : 1.0f - (spriteCoors.z - fadeDistance)/fadeDistance;
distanceFade = clamp(distanceFade, 0.0f, 1.0f);
float recipz = 1.0f/RwCameraGetNearClipPlane(Scene.camera);
- int intensity = (20.0f - aCoronas[i].heightAboveRoad) * 230.0 * distanceFade*CWeather::WetRoads * 0.05f;
+ float heightFade = (20.0f - aCoronas[i].heightAboveRoad)/20.0f;
+ int intensity = distanceFade*heightFade * 230.0 * CWeather::WetRoads;
CSprite::RenderBufferedOneXLUSprite(
spriteCoors.x, spriteCoors.y, RwIm2DGetNearScreenZ(),
@@ -504,6 +516,130 @@ CCoronas::RenderReflections(void)
}
}
+void
+CCoronas::RenderSunReflection(void)
+{
+ float sunZDir = CTimeCycle::GetSunDirection().z;
+ if(sunZDir > -0.05f){
+ float intensity = (0.3f - Abs(sunZDir - 0.25f))/0.3f *
+ (1.0f - CWeather::CloudCoverage) *
+ (1.0f - CWeather::Foggyness) *
+ (1.0f - CWeather::Wind);
+ if(intensity > 0.0f){
+ int r = (CTimeCycle::GetSunCoreRed() + CTimeCycle::GetSunCoronaRed())*intensity*0.25f;
+ int g = (CTimeCycle::GetSunCoreGreen() + CTimeCycle::GetSunCoronaGreen())*intensity*0.25f;
+ int b = (CTimeCycle::GetSunCoreBlue() + CTimeCycle::GetSunCoronaBlue())*intensity*0.25f;
+
+ CVector sunPos = 40.0f*CTimeCycle::GetSunDirection() + TheCamera.GetPosition();
+ sunPos.z = 0.5f*CWeather::Wind + 6.1f;
+ CVector sunDir = CTimeCycle::GetSunDirection();
+ sunDir.z = 0.0;
+ sunDir.Normalise();
+
+ TempBufferIndicesStored = 6;
+ TempBufferRenderIndexList[0] = 2;
+ TempBufferRenderIndexList[1] = 1;
+ TempBufferRenderIndexList[2] = 0;
+ TempBufferRenderIndexList[3] = 2;
+ TempBufferRenderIndexList[4] = 3;
+ TempBufferRenderIndexList[5] = 1;
+
+ // 60 unit square in sun direction
+ TempBufferVerticesStored = 4;
+ RwIm3DVertexSetRGBA(&TempBufferRenderVertices[0], r, g, b, 255);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[0],
+ sunPos.x + 30.0f*sunDir.y,
+ sunPos.y - 30.0f*sunDir.x,
+ sunPos.z);
+ RwIm3DVertexSetRGBA(&TempBufferRenderVertices[1], r, g, b, 255);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[1],
+ sunPos.x - 30.0f*sunDir.y,
+ sunPos.y + 30.0f*sunDir.x,
+ sunPos.z);
+ RwIm3DVertexSetRGBA(&TempBufferRenderVertices[2], r, g, b, 255);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[2],
+ sunPos.x + 60.0f*sunDir.x + 30.0f*sunDir.y,
+ sunPos.y + 60.0f*sunDir.y - 30.0f*sunDir.x,
+ sunPos.z);
+ RwIm3DVertexSetRGBA(&TempBufferRenderVertices[3], r, g, b, 255);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[3],
+ sunPos.x + 60.0f*sunDir.x - 30.0f*sunDir.y,
+ sunPos.y + 60.0f*sunDir.y + 30.0f*sunDir.x,
+ sunPos.z);
+
+ RwIm3DVertexSetU(&TempBufferRenderVertices[0], 0.0f);
+ RwIm3DVertexSetV(&TempBufferRenderVertices[0], 1.0f);
+ RwIm3DVertexSetU(&TempBufferRenderVertices[1], 1.0f);
+ RwIm3DVertexSetV(&TempBufferRenderVertices[1], 1.0f);
+ RwIm3DVertexSetU(&TempBufferRenderVertices[2], 0.0f);
+ RwIm3DVertexSetV(&TempBufferRenderVertices[2], 0.5f);
+ RwIm3DVertexSetU(&TempBufferRenderVertices[3], 1.0f);
+ RwIm3DVertexSetV(&TempBufferRenderVertices[3], 0.5f);
+
+ int timeInc = 0;
+ int sideInc = 0;
+ int fwdInc = 0;
+ for(int i = 0; i < 20; i++){
+ TempBufferRenderIndexList[TempBufferIndicesStored + 0] = TempBufferVerticesStored;
+ TempBufferRenderIndexList[TempBufferIndicesStored + 1] = TempBufferVerticesStored-1;
+ TempBufferRenderIndexList[TempBufferIndicesStored + 2] = TempBufferVerticesStored-2;
+ TempBufferRenderIndexList[TempBufferIndicesStored + 3] = TempBufferVerticesStored;
+ TempBufferRenderIndexList[TempBufferIndicesStored + 4] = TempBufferVerticesStored+1;
+ TempBufferRenderIndexList[TempBufferIndicesStored + 5] = TempBufferVerticesStored-1;
+ TempBufferIndicesStored += 6;
+
+ // What a weird way to do it...
+ float fwdLen = fwdInc/20 + 60;
+ float sideLen = sideInc/20 + 30;
+ sideLen += 10.0f*Sin((float)(CTimer::GetTimeInMilliseconds()+timeInc & 0x7FF)/0x800*TWOPI);
+ timeInc += 900;
+ sideInc += 970;
+ fwdInc += 1440;
+
+ RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored+0], r, g, b, 255);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored+0],
+ sunPos.x + fwdLen*sunDir.x + sideLen*sunDir.y,
+ sunPos.y + fwdLen*sunDir.y - sideLen*sunDir.x,
+ sunPos.z);
+
+ RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored+1], r, g, b, 255);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored+1],
+ sunPos.x + fwdLen*sunDir.x - sideLen*sunDir.y,
+ sunPos.y + fwdLen*sunDir.y + sideLen*sunDir.x,
+ sunPos.z);
+
+ RwIm3DVertexSetU(&TempBufferRenderVertices[TempBufferVerticesStored+0], 0.0f);
+ RwIm3DVertexSetV(&TempBufferRenderVertices[TempBufferVerticesStored+0], 0.5f);
+ RwIm3DVertexSetU(&TempBufferRenderVertices[TempBufferVerticesStored+1], 1.0f);
+ RwIm3DVertexSetV(&TempBufferRenderVertices[TempBufferVerticesStored+1], 0.5f);
+ TempBufferVerticesStored += 2;
+ }
+
+
+ RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
+ RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE);
+ RwRenderStateSet(rwRENDERSTATEFOGTYPE, (void*)rwFOGTYPELINEAR);
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpCoronaTexture[4]));
+ if(RwIm3DTransform(TempBufferRenderVertices, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){
+ RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, TempBufferRenderIndexList, TempBufferIndicesStored);
+ RwIm3DEnd();
+ }
+ RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)TRUE);
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)FALSE);
+ RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)FALSE);
+ TempBufferVerticesStored = 0;
+ TempBufferIndicesStored = 0;
+ }
+ }
+}
+
void
CCoronas::DoSunAndMoon(void)
{
@@ -520,7 +656,7 @@ CCoronas::DoSunAndMoon(void)
255, sunCoors, size,
999999.88f, TYPE_STAR, FLARE_NONE, REFLECTION_OFF, LOSCHECK_OFF, STREAK_OFF, 0.0f);
- if(CTimeCycle::GetSunDirection().z > 0.0f)
+ if(CTimeCycle::GetSunDirection().z > 0.0f && !CGame::IsInInterior())
RegisterCorona(SUN_CORONA,
CTimeCycle::GetSunCoronaRed(), CTimeCycle::GetSunCoronaGreen(), CTimeCycle::GetSunCoronaBlue(),
255, sunCoors, 25.0f * CTimeCycle::GetSunSize(),
diff --git a/src/render/Coronas.h b/src/render/Coronas.h
index cb4e8583..45f027d8 100644
--- a/src/render/Coronas.h
+++ b/src/render/Coronas.h
@@ -4,19 +4,21 @@ extern RwTexture *gpCoronaTexture[9];
struct CRegisteredCorona
{
+ CVector coors;
uint32 id;
uint32 lastLOScheck;
RwTexture *texture;
+ float size;
+ float someAngle;
+ float drawDist;
+ float nearDist;
+ float heightAboveRoad;
uint8 red;
uint8 green;
uint8 blue;
uint8 alpha; // alpha when fully visible
uint8 fadeAlpha; // actual value used for rendering, faded
- CVector coors;
- float size;
- float someAngle;
bool registeredThisFrame;
- float drawDist;
int8 flareType;
int8 reflection;
@@ -25,12 +27,11 @@ struct CRegisteredCorona
uint8 firstUpdate : 1;
uint8 drawStreak : 1;
uint8 sightClear : 1;
+ uint8 useNearDist : 1;
+ uint8 renderReflection : 1;
- bool renderReflection;
- float heightAboveRoad;
-
- float prevX[6];
- float prevY[6];
+ int16 prevX[6];
+ int16 prevY[6];
uint8 prevRed[6];
uint8 prevGreen[6];
uint8 prevBlue[6];
@@ -39,7 +40,7 @@ struct CRegisteredCorona
void Update(void);
};
-VALIDATE_SIZE(CRegisteredCorona, 0x80);
+VALIDATE_SIZE(CRegisteredCorona, 0x68);
class CCoronas
{
@@ -91,13 +92,14 @@ public:
static void RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha,
const CVector &coors, float size, float drawDist, RwTexture *tex,
int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle,
- bool longDist = false, float nearClip = 1.5f);
+ bool useNearDist = false, float nearDist = 1.5f);
static void RegisterCorona(uint32 id, uint8 red, uint8 green, uint8 blue, uint8 alpha,
const CVector &coors, float size, float drawDist, uint8 type,
int8 flareType, uint8 reflection, uint8 LOScheck, uint8 drawStreak, float someAngle,
- bool longDist = false, float nearClip = 1.5f);
+ bool useNearDist = false, float nearDist = 1.5f);
static void UpdateCoronaCoors(uint32 id, const CVector &coors, float drawDist, float someAngle);
static void Render(void);
static void RenderReflections(void);
+ static void RenderSunReflection(void);
static void DoSunAndMoon(void);
};
diff --git a/src/render/Fluff.cpp b/src/render/Fluff.cpp
index 5d8ccf47..77d2af2a 100644
--- a/src/render/Fluff.cpp
+++ b/src/render/Fluff.cpp
@@ -7,6 +7,7 @@
#include "Camera.h"
#include "Sprite.h"
#include "Coronas.h"
+#include "PointLights.h"
#include "Rubbish.h"
#include "Timecycle.h"
#include "General.h"
@@ -391,7 +392,7 @@ void CMovingThings::Init()
CPlaneTrails::Init();
CSmokeTrails::Init();
CPlaneBanners::Init();
- CEscalators::Init();
+ CPointLights::Init();
StartCloseList.m_pNext = &CMovingThings::EndCloseList;
StartCloseList.m_pPrev = nil;
@@ -399,6 +400,8 @@ void CMovingThings::Init()
EndCloseList.m_pPrev = &CMovingThings::StartCloseList;
Num = 0;
+ CEscalators::Init();
+
#ifndef MIAMI // something is still used here actually
// Initialize scroll bars
aScrollBars[0].Init(CVector( 228.3f, -669.0f, 39.0f ), SCROLL_BUSINESS, 0.0f, 0.5f, 0.5f, 255, 128, 0, 0.3f);
@@ -1517,4 +1520,197 @@ CEscalators::Shutdown(void) {
aEscalators[i].SwitchOff();
}
NumEscalators = 0;
+}
+
+
+CScriptPath CScriptPaths::aArray[3];
+
+void CScriptPath::FindCoorsFromDistanceOnPath(float t, float *pX, float *pY, float *pZ)
+{
+ int32 i;
+ for (i = 0; m_pNode[i + 1].t < t; i++)
+ if (i == m_numNodes - 1) {
+ // don't go beyond last node
+ *pX = m_pNode[m_numNodes - 1].p.x;
+ *pY = m_pNode[m_numNodes - 1].p.y;
+ *pZ = m_pNode[m_numNodes - 1].p.z;
+ return;
+ }
+ float f = (t - m_pNode[i].t) / (m_pNode[i + 1].t - m_pNode[i].t);
+ *pX = (1.0f - f)*m_pNode[i].p.x + f*m_pNode[i + 1].p.x;
+ *pY = (1.0f - f)*m_pNode[i].p.y + f*m_pNode[i + 1].p.y;
+ *pZ = (1.0f - f)*m_pNode[i].p.z + f*m_pNode[i + 1].p.z;
+}
+
+void CScriptPath::Update(void) {
+ if (m_state != SCRIPT_PATH_ACTIVE)
+ return;
+
+ m_fPosition += m_fSpeed * CTimer::GetTimeStepInSeconds();
+ m_fPosition = clamp(m_fPosition, 0.0f, m_fTotalLength);
+
+ if (m_pObjects[0] || m_pObjects[1] || m_pObjects[2] || m_pObjects[3]
+ || m_pObjects[4] || m_pObjects[5]) {
+
+ float t1, t2;
+ CVector pos1, pos2;
+
+ t1 = Max(m_fPosition - m_fObjectLength / 2.0f, 0.0f);
+ FindCoorsFromDistanceOnPath(t1, &pos1.x, &pos1.y, &pos1.z);
+ t2 = Min(m_fPosition + m_fObjectLength / 2.0f, m_fTotalLength);
+ FindCoorsFromDistanceOnPath(t2, &pos2.x, &pos2.y, &pos2.z);
+
+ CVector newForward, newUp(0.0f, 0.0f, 1.0f), newRight;
+
+ newForward = pos2 - pos1;
+ newForward.Normalise();
+ newRight = CrossProduct(newForward, newUp);
+ newRight.Normalise();
+ newUp = CrossProduct(newRight, newForward);
+
+ for (int i = 0; i < 6; i++) {
+ if (m_pObjects[i]) {
+ CMatrix prevMat(m_pObjects[i]->GetMatrix());
+ CVector prevPosition = m_pObjects[i]->GetPosition();
+
+ m_pObjects[i]->SetPosition((pos1 + pos2) / 2.0f);
+ m_pObjects[i]->GetRight() = newRight;
+ m_pObjects[i]->GetUp() = newUp;
+ m_pObjects[i]->GetForward() = newForward;
+ m_pObjects[i]->GetMatrix().UpdateRW();
+ m_pObjects[i]->UpdateRwFrame();
+
+ if (!m_pObjects[i]->bIsBIGBuilding && prevPosition != m_pObjects[i]->GetPosition())
+ m_pObjects[i]->RemoveAndAdd();
+
+ m_pObjects[i]->GetMatrix().UpdateRW();
+ m_pObjects[i]->UpdateRwFrame();
+
+ m_pObjects[i]->m_vecMoveSpeed = (m_pObjects[i]->GetPosition() - prevMat.GetPosition()) / CTimer::GetTimeStep();
+
+ float deltaAngle = m_pObjects[i]->GetForward().Heading() - prevMat.GetForward().Heading();
+ while (deltaAngle < (float)PI) deltaAngle += (float)TWOPI;
+ while (deltaAngle > (float)PI) deltaAngle -= (float)TWOPI;
+ float zTurnSpeed = deltaAngle / CTimer::GetTimeStep();
+
+ m_pObjects[i]->m_vecTurnSpeed = CVector(0.0f, 0.0f, zTurnSpeed);
+ m_pObjects[i]->m_vecMoveFriction = CVector(0.0f, 0.0f, 0.0f);
+ m_pObjects[i]->m_vecTurnFriction = CVector(0.0f, 0.0f, 0.0f);
+ }
+ }
+ }
+}
+
+void CScriptPath::Clear(void) {
+ if (m_pNode)
+ delete m_pNode;
+ m_pNode = nil;
+ m_numNodes = 0;
+ for (int i = 0; i < 6; i++)
+ m_pObjects[i] = nil;
+ m_state = SCRIPT_PATH_DISABLED;
+}
+
+void CScriptPath::InitialiseOne(int32 numNodes, float width) {
+ char Dest[32];
+ sprintf(Dest, "data\\paths\\spath%d.dat", numNodes);
+ m_pNode = CPlane::LoadPath(Dest, m_numNodes, m_fTotalLength, false);
+ m_fSpeed = 1.0f;
+ m_fPosition = 0.0f;
+ m_fObjectLength = width;
+ m_state = SCRIPT_PATH_INITIALIZED;
+}
+
+void CScriptPath::SetObjectToControl(CObject *pObj) {
+ int32 i = 0;
+ while (i < 6 && m_pObjects[i])
+ i++;
+ m_pObjects[i] = pObj;
+ pObj->RegisterReference((CEntity**)&m_pObjects[i]);
+ pObj->m_phy_flagA08 = false;
+ m_state = SCRIPT_PATH_ACTIVE;
+}
+
+void CScriptPaths::Init(void) {
+ for (int i = 0; i < 3; i++)
+ aArray[i].Clear();
+}
+
+void CScriptPaths::Shutdown(void) {
+ for (int i = 0; i < 3; i++)
+ aArray[i].Clear();
+}
+
+void CScriptPaths::Update(void) {
+ for (int i = 0; i < 3; i++)
+ aArray[i].Update();
+}
+
+bool CScriptPaths::IsOneActive(void) {
+ for (int i = 0; i < 3; i++)
+ if (aArray[i].m_state == SCRIPT_PATH_ACTIVE && aArray[i].m_fSpeed != 0.0f)
+ return true;
+
+ return false;
+}
+
+void CScriptPaths::Load(uint8 *buf, uint32 size) {
+INITSAVEBUF
+ for (int32 i = 0; i < 3; i++)
+ aArray[i].Clear();
+
+ for (int32 i = 0; i < 3; i++) {
+ aArray[i] = ReadSaveBuf<CScriptPath>(buf);
+
+ for (int32 j = 0; j < 6; j++) {
+ CScriptPath *pPath = &aArray[i];
+ if (pPath->m_pObjects[j] != nil) {
+ pPath->m_pObjects[j] = CPools::GetObjectPool()->GetSlot((uintptr)pPath->m_pObjects[j] - 1);
+ pPath->m_pObjects[j]->m_phy_flagA08 = false;
+ }
+ }
+
+ aArray[i].m_pNode = new CPlaneNode[aArray[i].m_numNodes];
+ for (int32 j = 0; j < aArray[i].m_numNodes; j++) {
+ aArray[i].m_pNode[j] = ReadSaveBuf<CPlaneNode>(buf);
+ }
+ }
+VALIDATESAVEBUF(size)
+}
+
+void CScriptPaths::Save(uint8 *buf, uint32 *size) {
+ *size = sizeof(aArray);
+INITSAVEBUF
+ for (int32 i = 0; i < 3; i++) {
+ CScriptPath *pPath = WriteSaveBuf(buf, aArray[i]);
+
+ for (int32 j = 0; j < 6; j++) {
+ if (pPath->m_pObjects[j] != nil)
+ pPath->m_pObjects[j] = (CObject*)(CPools::GetObjectPool()->GetJustIndex(pPath->m_pObjects[j]) + 1);
+ }
+
+ for (int32 j = 0; j < aArray[i].m_numNodes; j++) {
+ WriteSaveBuf(buf, aArray[i].m_pNode[j]);
+ *size += sizeof(aArray[i].m_pNode[j]);
+ }
+ }
+VALIDATESAVEBUF(*size);
+}
+
+CObject* g_pScriptPathObjects[18];
+
+void CScriptPaths::Load_ForReplay(void) {
+ for (int i = 0; i < 3; i++) {
+ for (int32 j = 0; j < 6; j++) {
+ aArray[i].m_pObjects[j] = g_pScriptPathObjects[6 * i + j];
+ }
+ }
+}
+
+void CScriptPaths::Save_ForReplay(void) {
+ for (int i = 0; i < 3; i++) {
+ for (int32 j = 0; j < 6; j++) {
+ g_pScriptPathObjects[6 * i + j] = aArray[i].m_pObjects[j];
+ }
+ }
} \ No newline at end of file
diff --git a/src/render/Fluff.h b/src/render/Fluff.h
index a938a4fe..a31ac335 100644
--- a/src/render/Fluff.h
+++ b/src/render/Fluff.h
@@ -2,17 +2,45 @@
#include "common.h"
#include "Vector.h"
#include "Object.h"
+#include "Plane.h"
+
+enum {
+ SCRIPT_PATH_DISABLED = 0,
+ SCRIPT_PATH_INITIALIZED,
+ SCRIPT_PATH_ACTIVE
+};
-// TODO
class CScriptPath
{
public:
+ int32 m_numNodes;
+ CPlaneNode *m_pNode;
+ float m_fTotalLength;
+ float m_fSpeed;
+ float m_fPosition;
+ float m_fObjectLength;
+ int32 m_state;
+ CObject *m_pObjects[6];
+
+ void Clear(void);
+ void Update(void);
+ void InitialiseOne(int32 numNodes, float width);
+ void FindCoorsFromDistanceOnPath(float t, float *pX, float *pY, float *pZ);
+ void SetObjectToControl(CObject *pObj);
};
-// TODO
class CScriptPaths
{
public:
+ static CScriptPath aArray[3];
+ static void Init(void);
+ static void Shutdown(void);
+ static void Update(void);
+ static bool IsOneActive(void);
+ static void Save(uint8 *buf, uint32 *size);
+ static void Load(uint8 *buf, uint32 size);
+ static void Save_ForReplay();
+ static void Load_ForReplay();
};
class CPlaneTrail
diff --git a/src/render/Hud.cpp b/src/render/Hud.cpp
index 10408355..cbf3c7f2 100644
--- a/src/render/Hud.cpp
+++ b/src/render/Hud.cpp
@@ -205,7 +205,8 @@ void CHud::Draw()
rect.right = f3rdX + SCREEN_SCALE_X(32.0f * 0.6f);
rect.bottom = f3rdY + SCREEN_SCALE_Y(32.0f * 0.6f);
- Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
+ Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
}
else {
rect.left = f3rdX - SCREEN_SCALE_X(32.0f * 0.4f);
@@ -213,7 +214,8 @@ void CHud::Draw()
rect.right = f3rdX + SCREEN_SCALE_X(32.0f * 0.4f);
rect.bottom = f3rdY + SCREEN_SCALE_Y(32.0f * 0.4f);
- Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
+ Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
}
} else {
if (Mode == CCam::MODE_M16_1STPERSON ||
@@ -223,7 +225,8 @@ void CHud::Draw()
rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(32.0f);
rect.right = (SCREEN_WIDTH / 2) + SCREEN_SCALE_X(32.0f);
rect.bottom = (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(32.0f);
- Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
+ Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
}
else if (Mode == CCam::MODE_1STPERSON_RUNABOUT) {
rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(32.0f * 0.7f);
@@ -231,7 +234,8 @@ void CHud::Draw()
rect.right = (SCREEN_WIDTH / 2) + SCREEN_SCALE_X(32.0f * 0.7f);
rect.bottom = (SCREEN_HEIGHT / 2) + SCREEN_SCALE_Y(32.0f * 0.7f);
- Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
+ Sprites[HUD_SITEM16].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
}
else if (Mode == CCam::MODE_ROCKETLAUNCHER || Mode == CCam::MODE_ROCKETLAUNCHER_RUNABOUT) {
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void *)TRUE);
@@ -248,29 +252,33 @@ void CHud::Draw()
// TODO(Miami)
// Sniper
- rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(210.0f);
- rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(210.0f);
- rect.right = SCREEN_WIDTH / 2;
- rect.bottom = SCREEN_HEIGHT / 2;
- Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
-
- rect.right = (SCREEN_WIDTH / 2);
- rect.top = (SCREEN_HEIGHT / 2) - SCREEN_SCALE_Y(210.0f);
- rect.left = SCREEN_SCALE_X(210.0f) + (SCREEN_WIDTH / 2);
- rect.bottom = SCREEN_HEIGHT / 2;
- Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
-
- rect.left = (SCREEN_WIDTH / 2) - SCREEN_SCALE_X(210.0f);
- rect.bottom = (SCREEN_HEIGHT / 2);
- rect.right = (SCREEN_WIDTH / 2);
- rect.top = SCREEN_SCALE_Y(210.0f) + (SCREEN_HEIGHT / 2);
- Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
-
- rect.right = (SCREEN_WIDTH / 2);
- rect.bottom = (SCREEN_HEIGHT / 2);
- rect.left = SCREEN_SCALE_X(210.0f) + (SCREEN_WIDTH / 2);
- rect.top = SCREEN_SCALE_Y(210.0f) + (SCREEN_HEIGHT / 2);
- Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255));
+ rect.left = SCREEN_WIDTH/2 - SCREEN_SCALE_X(210.0f);
+ rect.top = SCREEN_HEIGHT/2 - SCREEN_SCALE_Y(210.0f);
+ rect.right = SCREEN_WIDTH/2;
+ rect.bottom = SCREEN_HEIGHT/2;
+ Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.01f, 0.01f, 1.0f, 0.0f, 0.01f, 1.0f, 1.0f, 1.0f);
+
+ rect.left = SCREEN_WIDTH/2;
+ rect.top = SCREEN_HEIGHT/2 - SCREEN_SCALE_Y(210.0f);
+ rect.right = SCREEN_WIDTH/2 + SCREEN_SCALE_X(210.0f);
+ rect.bottom = SCREEN_HEIGHT/2;
+ Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.99f, 0.0f, 0.01f, 0.01f, 0.99f, 1.0f, 0.01f, 1.0f);
+
+ rect.left = SCREEN_WIDTH/2 - SCREEN_SCALE_X(210.0f);
+ rect.top = SCREEN_HEIGHT/2;
+ rect.right = SCREEN_WIDTH/2;
+ rect.bottom = SCREEN_HEIGHT/2 + SCREEN_SCALE_Y(210.0f);
+ Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.01f, 0.99f, 1.0f, 0.99f, 0.01f, 0.01f, 1.0f, 0.01f);
+
+ rect.left = SCREEN_WIDTH/2;
+ rect.top = SCREEN_HEIGHT/2;
+ rect.right = SCREEN_WIDTH/2 + SCREEN_SCALE_X(210.0f);
+ rect.bottom = SCREEN_HEIGHT/2 + SCREEN_SCALE_Y(210.0f);
+ Sprites[HUD_SITESNIPER].Draw(CRect(rect), CRGBA(255, 255, 255, 255),
+ 0.99f, 0.99f, 0.01f, 0.99f, 0.99f, 0.01f, 0.1f, 0.01f);
}
}
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void *)rwBLENDSRCALPHA);
diff --git a/src/render/MBlur.cpp b/src/render/MBlur.cpp
index 568a0bc1..08298a1f 100644
--- a/src/render/MBlur.cpp
+++ b/src/render/MBlur.cpp
@@ -11,6 +11,7 @@
#include "Camera.h"
#include "MBlur.h"
#include "Timer.h"
+#include "postfx.h"
// Originally taken from RW example 'mblur'
@@ -30,6 +31,10 @@ extern "C" D3DCAPS8 _RwD3D8DeviceCaps;
RwBool
CMBlur::MotionBlurOpen(RwCamera *cam)
{
+#ifdef EXTENDED_COLOURFILTER
+ CPostFX::Open(cam);
+ return TRUE;
+#else
#ifdef GTA_PS2
RwRect rect = {0, 0, 0, 0};
@@ -130,18 +135,22 @@ CMBlur::MotionBlurOpen(RwCamera *cam)
return TRUE;
#endif
+#endif
}
RwBool
CMBlur::MotionBlurClose(void)
{
+#ifdef EXTENDED_COLOURFILTER
+ CPostFX::Close();
+#else
if(pFrontBuffer){
RwRasterDestroy(pFrontBuffer);
pFrontBuffer = nil;
return TRUE;
}
-
+#endif
return FALSE;
}
@@ -197,8 +206,8 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect)
RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, 255);
- RwIm2DVertexSetScreenX(&Vertex2[0], zero);
- RwIm2DVertexSetScreenY(&Vertex2[0], zero);
+ RwIm2DVertexSetScreenX(&Vertex2[0], zero + 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[0], zero + 2.0f);
RwIm2DVertexSetScreenZ(&Vertex2[0], RwIm2DGetNearScreenZ());
RwIm2DVertexSetCameraZ(&Vertex2[0], RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetRecipCameraZ(&Vertex2[0], 1.0f/RwCameraGetNearClipPlane(cam));
@@ -206,8 +215,8 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect)
RwIm2DVertexSetV(&Vertex2[0], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetIntRGBA(&Vertex2[0], 255, 255, 255, 255);
- RwIm2DVertexSetScreenX(&Vertex2[1], zero);
- RwIm2DVertexSetScreenY(&Vertex2[1], ymax);
+ RwIm2DVertexSetScreenX(&Vertex2[1], 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[1], ymax + 2.0f);
RwIm2DVertexSetScreenZ(&Vertex2[1], RwIm2DGetNearScreenZ());
RwIm2DVertexSetCameraZ(&Vertex2[1], RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetRecipCameraZ(&Vertex2[1], 1.0f/RwCameraGetNearClipPlane(cam));
@@ -215,8 +224,8 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect)
RwIm2DVertexSetV(&Vertex2[1], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetIntRGBA(&Vertex2[1], 255, 255, 255, 255);
- RwIm2DVertexSetScreenX(&Vertex2[2], xmax);
- RwIm2DVertexSetScreenY(&Vertex2[2], ymax);
+ RwIm2DVertexSetScreenX(&Vertex2[2], xmax + 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[2], ymax + 2.0f);
RwIm2DVertexSetScreenZ(&Vertex2[2], RwIm2DGetNearScreenZ());
RwIm2DVertexSetCameraZ(&Vertex2[2], RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetRecipCameraZ(&Vertex2[2], 1.0f/RwCameraGetNearClipPlane(cam));
@@ -224,20 +233,22 @@ CMBlur::CreateImmediateModeData(RwCamera *cam, RwRect *rect)
RwIm2DVertexSetV(&Vertex2[2], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetIntRGBA(&Vertex2[2], 255, 255, 255, 255);
- RwIm2DVertexSetScreenX(&Vertex2[3], xmax);
- RwIm2DVertexSetScreenY(&Vertex2[3], zero);
+ RwIm2DVertexSetScreenX(&Vertex2[3], xmax + 2.0f);
+ RwIm2DVertexSetScreenY(&Vertex2[3], zero + 2.0f);
RwIm2DVertexSetScreenZ(&Vertex2[3], RwIm2DGetNearScreenZ());
RwIm2DVertexSetCameraZ(&Vertex2[3], RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetRecipCameraZ(&Vertex2[3], 1.0f/RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetU(&Vertex2[3], 1.0f, 1.0f/RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetV(&Vertex2[3], 0.0f, 1.0f/RwCameraGetNearClipPlane(cam));
RwIm2DVertexSetIntRGBA(&Vertex2[3], 255, 255, 255, 255);
-
}
void
CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, uint32 blur, int32 type, uint32 bluralpha)
{
+#ifdef EXTENDED_COLOURFILTER
+ CPostFX::Render(cam, red, green, blue, blur, type, bluralpha);
+#else
RwRGBA color = { (RwUInt8)red, (RwUInt8)green, (RwUInt8)blue, (RwUInt8)blur };
#ifdef GTA_PS2
if( pFrontBuffer )
@@ -253,8 +264,14 @@ CMBlur::MotionBlurRender(RwCamera *cam, uint32 red, uint32 green, uint32 blue, u
RwRasterPopContext();
}
#endif
+#endif
}
+static uint8 DrunkBlurRed = 128;
+static uint8 DrunkBlurGreen = 128;
+static uint8 DrunkBlurBlue = 128;
+static int32 DrunkBlurIncrement = 1;
+
void
CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type, int32 bluralpha)
{
@@ -367,7 +384,36 @@ CMBlur::OverlayRender(RwCamera *cam, RwRaster *raster, RwRGBA color, int32 type,
}
}
- // TODO(MIAMI): drunkness
+ int DrunkBlurAlpha = 175.0f * Drunkness;
+ if(DrunkBlurAlpha != 0){
+ RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDSRCALPHA);
+ RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
+ if(BlurOn){
+ RwIm2DVertexSetIntRGBA(&Vertex[0], 255, 255, 255, DrunkBlurAlpha);
+ RwIm2DVertexSetIntRGBA(&Vertex[1], 255, 255, 255, DrunkBlurAlpha);
+ RwIm2DVertexSetIntRGBA(&Vertex[2], 255, 255, 255, DrunkBlurAlpha);
+ RwIm2DVertexSetIntRGBA(&Vertex[3], 255, 255, 255, DrunkBlurAlpha);
+ }else{
+ RwIm2DVertexSetIntRGBA(&Vertex[0], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha);
+ RwIm2DVertexSetIntRGBA(&Vertex[1], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha);
+ RwIm2DVertexSetIntRGBA(&Vertex[2], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha);
+ RwIm2DVertexSetIntRGBA(&Vertex[3], DrunkBlurRed, DrunkBlurGreen, DrunkBlurBlue, DrunkBlurAlpha);
+ if(DrunkBlurIncrement){
+ if(DrunkBlurRed < 255) DrunkBlurRed++;
+ if(DrunkBlurGreen < 255) DrunkBlurGreen++;
+ if(DrunkBlurBlue < 255) DrunkBlurBlue++;
+ if(DrunkBlurRed == 255)
+ DrunkBlurIncrement = 0;
+ }else{
+ if(DrunkBlurRed > 128) DrunkBlurRed--;
+ if(DrunkBlurGreen > 128) DrunkBlurGreen--;
+ if(DrunkBlurBlue > 128) DrunkBlurBlue--;
+ if(DrunkBlurRed == 128)
+ DrunkBlurIncrement = 1;
+ }
+ }
+ RwIm2DRenderIndexedPrimitive(rwPRIMTYPETRILIST, Vertex, 4, Index, 6);
+ }
// TODO(MIAMI): OverlayRenderFx
diff --git a/src/render/PlayerSkin.cpp b/src/render/PlayerSkin.cpp
index d66f7ce4..b3e82cd9 100644
--- a/src/render/PlayerSkin.cpp
+++ b/src/render/PlayerSkin.cpp
@@ -15,6 +15,8 @@
#include "Timer.h"
#include "Lights.h"
+//--MIAMI: file done
+
RpClump *gpPlayerClump;
float gOldFov;
@@ -109,9 +111,7 @@ CPlayerSkin::GetSkinTexture(const char *texName)
tex = RwTextureCreate(raster);
RwTextureSetName(tex, texName);
-#ifdef FIX_BUGS
- RwTextureSetFilterMode(tex, rwFILTERLINEAR); // filtering bugfix from VC
-#endif
+ RwTextureSetFilterMode(tex, rwFILTERLINEAR);
RwTexDictionaryAddTexture(CTxdStore::GetSlot(m_txdSlot)->texDict, tex);
RwImageDestroy(image);
@@ -143,8 +143,7 @@ CPlayerSkin::RenderFrontendSkinEdit(void)
static float rotation = 0.0f;
RwRGBAReal AmbientColor = { 0.65f, 0.65f, 0.65f, 1.0f };
const RwV3d pos = { 1.35f, 0.35f, 7.725f };
- const RwV3d axis1 = { 1.0f, 0.0f, 0.0f };
- const RwV3d axis2 = { 0.0f, 0.0f, 1.0f };
+ const RwV3d axis = { 0.0f, 1.0f, 0.0f };
static uint32 LastFlash = 0;
RwFrame *frame = RpClumpGetFrame(gpPlayerClump);
@@ -157,8 +156,7 @@ CPlayerSkin::RenderFrontendSkinEdit(void)
}
RwFrameTransform(frame, RwFrameGetMatrix(RwCameraGetFrame(Scene.camera)), rwCOMBINEREPLACE);
RwFrameTranslate(frame, &pos, rwCOMBINEPRECONCAT);
- RwFrameRotate(frame, &axis1, -90.0f, rwCOMBINEPRECONCAT);
- RwFrameRotate(frame, &axis2, rotation, rwCOMBINEPRECONCAT);
+ RwFrameRotate(frame, &axis, rotation, rwCOMBINEPRECONCAT);
RwFrameUpdateObjects(frame);
SetAmbientColours(&AmbientColor);
RpClumpRender(gpPlayerClump);
diff --git a/src/render/PointLights.cpp b/src/render/PointLights.cpp
index 88b9aaea..b09b07bd 100644
--- a/src/render/PointLights.cpp
+++ b/src/render/PointLights.cpp
@@ -1,6 +1,7 @@
#include "common.h"
#include "main.h"
+#include "CutsceneMgr.h"
#include "Lights.h"
#include "Camera.h"
#include "Weather.h"
@@ -10,8 +11,23 @@
#include "Timer.h"
#include "PointLights.h"
+//--MIAMI: file done
+
int16 CPointLights::NumLights;
CRegisteredPointLight CPointLights::aLights[NUMPOINTLIGHTS];
+CVector CPointLights::aCachedMapReads[32];
+float CPointLights::aCachedMapReadResults[32];
+int32 CPointLights::NextCachedValue;
+
+void
+CPointLights::Init(void)
+{
+ for(int i = 0; i < ARRAY_SIZE(aCachedMapReads); i++){
+ aCachedMapReads[i] = CVector(0.0f, 0.0f, 0.0f);
+ aCachedMapReadResults[i] = 0.0f;
+ }
+ NextCachedValue = 0;
+}
void
CPointLights::InitPerFrame(void)
@@ -86,12 +102,11 @@ CPointLights::GenerateLightsAffectingObject(Const CVector *objCoors)
ret *= distNorm;
}else{
float intensity;
+ // distance fade
if(distNorm < 0.5f)
- // near enough
intensity = 1.0f;
else
- // attenuate
- intensity = 1.0f - (distNorm - 0.5f)*2.0f;
+ intensity = 1.0f - (distNorm - 0.5f)/(1.0f - 0.5f);
if(distance != 0.0f){
CVector dir = dist / distance;
@@ -143,17 +158,22 @@ CPointLights::RenderFogEffect(void)
CVector spriteCoors;
float spritew, spriteh;
+ if(CCutsceneMgr::IsRunning())
+ return;
+
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
RwRenderStateSet(rwRENDERSTATESRCBLEND, (void*)rwBLENDONE);
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, gpPointlightRaster);
+ CSprite::InitSpriteBuffer();
+
for(i = 0; i < NumLights; i++){
if(aLights[i].fogType != FOG_NORMAL && aLights[i].fogType != FOG_ALWAYS)
continue;
- fogginess = aLights[i].fogType == FOG_ALWAYS ? 1.0f : CWeather::Foggyness;
+ fogginess = aLights[i].fogType == FOG_NORMAL ? CWeather::Foggyness : 1.0f;
if(fogginess == 0.0f)
continue;
@@ -198,7 +218,7 @@ CPointLights::RenderFogEffect(void)
float distsq = sq(dx) + sq(dy);
float linedistsq = distsq - sq(dot);
if(dot > 0.0f && dot < FOG_AREA_LENGTH && linedistsq < sq(FOG_AREA_WIDTH)){
- CVector fogcoors(xi, yi, aLights[i].coors.z + 1.0f);
+ CVector fogcoors(xi, yi, aLights[i].coors.z + 10.0f);
if(CWorld::ProcessVerticalLine(fogcoors, fogcoors.z - 20.0f,
point, entity, true, false, false, false, true, false, nil)){
// Now same check again in xyz
@@ -220,9 +240,9 @@ CPointLights::RenderFogEffect(void)
intensity *= 1.0f - sq(Sqrt(linedistsq) / FOG_AREA_WIDTH);
if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){
- float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x1FFF;
+ float rotation = (CTimer::GetTimeInMilliseconds()&0x1FFF) * 2*3.14f / 0x2000;
float size = FogSizes[r>>1];
- CSprite::RenderOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z,
+ CSprite::RenderBufferedOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z,
spritew * size, spriteh * size,
aLights[i].red * intensity, aLights[i].green * intensity, aLights[i].blue * intensity,
intensity, 1/spriteCoors.z, rotation, 255);
@@ -234,9 +254,8 @@ CPointLights::RenderFogEffect(void)
}
}else if(aLights[i].type == LIGHT_POINT || aLights[i].type == LIGHT_FOGONLY || aLights[i].type == LIGHT_FOGONLY_ALWAYS){
- if(CWorld::ProcessVerticalLine(aLights[i].coors, aLights[i].coors.z - 20.0f,
- point, entity, true, false, false, false, true, false, nil)){
-
+ float groundZ;
+ if(ProcessVerticalLineUsingCache(aLights[i].coors, &groundZ)){
xmin = aLights[i].coors.x - FOG_AREA_RADIUS;
ymin = aLights[i].coors.y - FOG_AREA_RADIUS;
xmax = aLights[i].coors.x + FOG_AREA_RADIUS;
@@ -267,11 +286,11 @@ CPointLights::RenderFogEffect(void)
// more intensity the closer to light source
intensity *= 1.0f - sq(lightdist / FOG_AREA_RADIUS);
- CVector fogcoors(xi, yi, point.point.z + 1.6f);
+ CVector fogcoors(xi, yi, groundZ + 1.6f);
if(CSprite::CalcScreenCoors(fogcoors, spriteCoors, &spritew, &spriteh, true)){
- float rotation = (CTimer::GetTimeInMilliseconds()&0x3FFF) * 2*3.14f / 0x3FFF;
+ float rotation = (CTimer::GetTimeInMilliseconds()&0x3FFF) * 2*3.14f / 0x4000;
float size = FogSizes[r>>1];
- CSprite::RenderOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z,
+ CSprite::RenderBufferedOneXLUSprite_Rotate_Aspect(spriteCoors.x, spriteCoors.y, spriteCoors.z,
spritew * size, spriteh * size,
aLights[i].red * intensity, aLights[i].green * intensity, aLights[i].blue * intensity,
intensity, 1/spriteCoors.z, rotation, 255);
@@ -283,4 +302,27 @@ CPointLights::RenderFogEffect(void)
}
}
}
+
+ CSprite::FlushSpriteBuffer();
+}
+
+bool
+CPointLights::ProcessVerticalLineUsingCache(CVector coors, float *groundZ)
+{
+ for(int i = 0; i < ARRAY_SIZE(aCachedMapReads); i++)
+ if(aCachedMapReads[i] == coors){
+ *groundZ = aCachedMapReadResults[i];
+ return true;
+ }
+
+ CColPoint point;
+ CEntity *entity;
+ if(CWorld::ProcessVerticalLine(coors, coors.z - 20.0f, point, entity, true, false, false, false, true, false, nil)){
+ aCachedMapReads[NextCachedValue] = coors;
+ aCachedMapReadResults[NextCachedValue] = point.point.z;
+ NextCachedValue = (NextCachedValue+1) % ARRAY_SIZE(aCachedMapReads);
+ *groundZ = point.point.z;
+ return true;
+ }
+ return false;
}
diff --git a/src/render/PointLights.h b/src/render/PointLights.h
index 9e94328f..827200b9 100644
--- a/src/render/PointLights.h
+++ b/src/render/PointLights.h
@@ -20,6 +20,9 @@ class CPointLights
public:
static int16 NumLights;
static CRegisteredPointLight aLights[NUMPOINTLIGHTS];
+ static CVector aCachedMapReads[32];
+ static float aCachedMapReadResults[32];
+ static int32 NextCachedValue;
enum {
LIGHT_POINT,
@@ -37,9 +40,11 @@ public:
FOG_ALWAYS
};
+ static void Init(void);
static void InitPerFrame(void);
static void AddLight(uint8 type, CVector coors, CVector dir, float radius, float red, float green, float blue, uint8 fogType, bool castExtraShadows);
static float GenerateLightsAffectingObject(Const CVector *objCoors);
static void RemoveLightsAffectingObject(void);
static void RenderFogEffect(void);
+ static bool ProcessVerticalLineUsingCache(CVector coors, float *groundZ);
};
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 03ef1064..3b996b55 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -21,6 +21,7 @@
#include "PointLights.h"
#include "Occlusion.h"
#include "Renderer.h"
+#include "custompipes.h"
//--MIAMI: file done
@@ -243,6 +244,11 @@ CRenderer::RenderEverythingBarRoads(void)
if(IsRoad(e))
continue;
+#ifdef EXTENDED_PIPELINES
+ if(CustomPipes::bRenderingEnvMap && (e->IsPed() || e->IsVehicle()))
+ continue;
+#endif
+
if(e->IsVehicle() ||
e->IsPed() && CVisibilityPlugins::GetClumpAlpha((RpClump*)e->m_rwObject) != 255){
if(e->IsVehicle() && PutIntoSortedVehicleList((CVehicle*)e)){
@@ -883,6 +889,12 @@ CalcNewDelta(RwV2d *a, RwV2d *b)
return (b->x - a->x) / (b->y - a->y);
}
+#ifdef FIX_BUGS
+#define TOINT(x) ((int)Floor(x))
+#else
+#define TOINT(x) ((int)(x))
+#endif
+
void
CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrList *))
{
@@ -908,8 +920,8 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL
a2 = i;
}
}
- y = miny;
- yend = maxy;
+ y = TOINT(miny);
+ yend = TOINT(maxy);
// Go left in poly to find first edge b
b2 = a2;
@@ -917,8 +929,8 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL
b1 = b2--;
if(b2 < 0) b2 = numVertices-1;
if(poly[b1].x < xstart)
- xstart = poly[b1].x;
- if((int)poly[b1].y != (int)poly[b2].y)
+ xstart = TOINT(poly[b1].x);
+ if(TOINT(poly[b1].y) != TOINT(poly[b2].y))
break;
}
// Go right to find first edge a
@@ -926,8 +938,8 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL
a1 = a2++;
if(a2 == numVertices) a2 = 0;
if(poly[a1].x > xend)
- xend = poly[a1].x;
- if((int)poly[a1].y != (int)poly[a2].y)
+ xend = TOINT(poly[a1].x);
+ if(TOINT(poly[a1].y) != TOINT(poly[a2].y))
break;
}
@@ -938,17 +950,17 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL
xB = deltaB * (Ceil(poly[b1].y) - poly[b1].y) + poly[b1].x;
if(y != yend){
- if(deltaB < 0.0f && (int)xB < xstart)
- xstart = xB;
- if(deltaA >= 0.0f && (int)xA > xend)
- xend = xA;
+ if(deltaB < 0.0f && TOINT(xB) < xstart)
+ xstart = TOINT(xB);
+ if(deltaA >= 0.0f && TOINT(xA) > xend)
+ xend = TOINT(xA);
}
while(y <= yend && y < NUMSECTORS_Y){
// scan one x-line
if(y >= 0 && xstart < NUMSECTORS_X)
- for(x = xstart; x <= xend; x++)
- if(x >= 0 && x != NUMSECTORS_X)
+ for(x = xstart; x <= xend && x != NUMSECTORS_X; x++)
+ if(x >= 0)
scanfunc(CWorld::GetSector(x, y)->m_lists);
// advance one scan line
@@ -957,74 +969,74 @@ CRenderer::ScanSectorPoly(RwV2d *poly, int32 numVertices, void (*scanfunc)(CPtrL
xB += deltaB;
// update left side
- if(y == (int)poly[b2].y){
+ if(y == TOINT(poly[b2].y)){
// reached end of edge
if(y == yend){
if(deltaB < 0.0f){
do{
- xstart = poly[b2--].x;
+ xstart = TOINT(poly[b2--].x);
if(b2 < 0) b2 = numVertices-1;
- }while(xstart > (int)poly[b2].x);
+ }while(xstart > TOINT(poly[b2].x));
}else
- xstart = xB - deltaB;
+ xstart = TOINT(xB - deltaB);
}else{
// switch edges
if(deltaB < 0.0f)
- xstart = poly[b2].x;
+ xstart = TOINT(poly[b2].x);
else
- xstart = xB - deltaB;
+ xstart = TOINT(xB - deltaB);
do{
b1 = b2--;
if(b2 < 0) b2 = numVertices-1;
- if((int)poly[b1].x < xstart)
- xstart = poly[b1].x;
- }while(y == (int)poly[b2].y);
+ if(TOINT(poly[b1].x) < xstart)
+ xstart = TOINT(poly[b1].x);
+ }while(y == TOINT(poly[b2].y));
deltaB = CalcNewDelta(&poly[b1], &poly[b2]);
xB = deltaB * (Ceil(poly[b1].y) - poly[b1].y) + poly[b1].x;
- if(deltaB < 0.0f && (int)xB < xstart)
- xstart = xB;
+ if(deltaB < 0.0f && TOINT(xB) < xstart)
+ xstart = TOINT(xB);
}
}else{
if(deltaB < 0.0f)
- xstart = xB;
+ xstart = TOINT(xB);
else
- xstart = xB - deltaB;
+ xstart = TOINT(xB - deltaB);
}
// update right side
- if(y == (int)poly[a2].y){
+ if(y == TOINT(poly[a2].y)){
// reached end of edge
if(y == yend){
if(deltaA < 0.0f)
- xend = xA - deltaA;
+ xend = TOINT(xA - deltaA);
else{
do{
- xend = poly[a2++].x;
+ xend = TOINT(poly[a2++].x);
if(a2 == numVertices) a2 = 0;
- }while(xend < (int)poly[a2].x);
+ }while(xend < TOINT(poly[a2].x));
}
}else{
// switch edges
if(deltaA < 0.0f)
- xend = xA - deltaA;
+ xend = TOINT(xA - deltaA);
else
- xend = poly[a2].x;
+ xend = TOINT(poly[a2].x);
do{
a1 = a2++;
if(a2 == numVertices) a2 = 0;
- if((int)poly[a1].x > xend)
- xend = poly[a1].x;
- }while(y == (int)poly[a2].y);
+ if(TOINT(poly[a1].x) > xend)
+ xend = TOINT(poly[a1].x);
+ }while(y == TOINT(poly[a2].y));
deltaA = CalcNewDelta(&poly[a1], &poly[a2]);
xA = deltaA * (Ceil(poly[a1].y) - poly[a1].y) + poly[a1].x;
- if(deltaA >= 0.0f && (int)xA > xend)
- xend = xA;
+ if(deltaA >= 0.0f && TOINT(xA) > xend)
+ xend = TOINT(xA);
}
}else{
if(deltaA < 0.0f)
- xend = xA - deltaA;
+ xend = TOINT(xA - deltaA);
else
- xend = xA;
+ xend = TOINT(xA);
}
}
}
diff --git a/src/render/Rubbish.cpp b/src/render/Rubbish.cpp
index bfd50c07..dada2439 100644
--- a/src/render/Rubbish.cpp
+++ b/src/render/Rubbish.cpp
@@ -8,17 +8,18 @@
#include "World.h"
#include "Vehicle.h"
#include "ZoneCull.h"
+#include "Stats.h"
#include "TxdStore.h"
#include "RenderBuffer.h"
#include "Rubbish.h"
-#define RUBBISH_MAX_DIST (18.0f)
-#define RUBBISH_FADE_DIST (16.5f)
+//--MIAMI: file done
+
+#define RUBBISH_MAX_DIST (23.0f)
+#define RUBBISH_FADE_DIST (20.0f)
RwTexture *gpRubbishTexture[4];
RwImVertexIndex RubbishIndexList[6];
-RwImVertexIndex RubbishIndexList2[6]; // unused
-RwIm3DVertex RubbishVertices[4];
bool CRubbish::bRubbishInvisible;
int CRubbish::RubbishVisibility;
COneSheet CRubbish::aSheets[NUM_RUBBISH_SHEETS];
@@ -52,12 +53,16 @@ CRubbish::Render(void)
{
int type;
+ if(RubbishVisibility == 0)
+ return;
+
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEVERTEXALPHAENABLE, (void*)TRUE);
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE);
for(type = 0; type < 4; type++){
- RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpRubbishTexture[type]));
+ if(type < 3 || CStats::PamphletMissionPassed)
+ RwRenderStateSet(rwRENDERSTATETEXTURERASTER, RwTextureGetRaster(gpRubbishTexture[type]));
TempBufferIndicesStored = 0;
TempBufferVerticesStored = 0;
@@ -69,7 +74,7 @@ CRubbish::Render(void)
if(sheet->m_state == 0)
continue;
- uint32 alpha = 128;
+ uint32 alpha = 100;
CVector pos;
if(sheet->m_state == 1){
pos = sheet->m_basePos;
@@ -82,7 +87,7 @@ CRubbish::Render(void)
float t = (float)(CTimer::GetTimeInMilliseconds() - sheet->m_moveStart)/sheet->m_moveDuration;
float f1 = sheet->m_isVisible ? 1.0f-t : 0.0f;
float f2 = sheet->m_targetIsVisible ? t : 0.0f;
- alpha = 128 * (f1+f2);
+ alpha = 100 * (f1+f2);
}
}
@@ -92,17 +97,27 @@ CRubbish::Render(void)
alpha -= alpha*(camDist-RUBBISH_FADE_DIST)/(RUBBISH_MAX_DIST-RUBBISH_FADE_DIST);
alpha = (RubbishVisibility*alpha)/256;
- float vx = Sin(sheet->m_angle) * 0.4f;
- float vy = Cos(sheet->m_angle) * 0.4f;
+ float vx1, vy1, vx2, vy2;
+ if(type == 0 || type == 1){
+ vx1 = 0.9f*Sin(sheet->m_angle);
+ vy1 = 0.9f*Cos(sheet->m_angle);
+ vx2 = 0.3f*Cos(sheet->m_angle);
+ vy2 = -0.3f*Sin(sheet->m_angle);
+ }else{
+ vx1 = 0.3f*Sin(sheet->m_angle);
+ vy1 = 0.3f*Cos(sheet->m_angle);
+ vx2 = 0.3f*Cos(sheet->m_angle);
+ vy2 = -0.3f*Sin(sheet->m_angle);
+ }
int v = TempBufferVerticesStored;
- RwIm3DVertexSetPos(&TempBufferRenderVertices[v+0], pos.x + vx, pos.y + vy, pos.z);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[v+0], pos.x + vx1 + vx2, pos.y + vy1 + vy2, pos.z);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[v+1], pos.x + vx1 - vx2, pos.y + vy1 - vy2, pos.z);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[v+2], pos.x - vx1 + vx2, pos.y - vy1 + vy2, pos.z);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[v+3], pos.x - vx1 - vx2, pos.y - vy1 - vy2, pos.z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+0], 255, 255, 255, alpha);
- RwIm3DVertexSetPos(&TempBufferRenderVertices[v+1], pos.x - vy, pos.y + vx, pos.z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+1], 255, 255, 255, alpha);
- RwIm3DVertexSetPos(&TempBufferRenderVertices[v+2], pos.x + vy, pos.y - vx, pos.z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+2], 255, 255, 255, alpha);
- RwIm3DVertexSetPos(&TempBufferRenderVertices[v+3], pos.x - vx, pos.y - vy, pos.z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[v+3], 255, 255, 255, alpha);
RwIm3DVertexSetU(&TempBufferRenderVertices[v+0], 0.0f);
RwIm3DVertexSetV(&TempBufferRenderVertices[v+0], 0.0f);
@@ -373,24 +388,6 @@ CRubbish::Init(void)
EndMoversList.m_next = nil;
EndMoversList.m_prev = &StartMoversList;
- // unused
- RwIm3DVertexSetU(&RubbishVertices[0], 0.0f);
- RwIm3DVertexSetV(&RubbishVertices[0], 0.0f);
- RwIm3DVertexSetU(&RubbishVertices[1], 1.0f);
- RwIm3DVertexSetV(&RubbishVertices[1], 0.0f);
- RwIm3DVertexSetU(&RubbishVertices[2], 0.0f);
- RwIm3DVertexSetV(&RubbishVertices[2], 1.0f);
- RwIm3DVertexSetU(&RubbishVertices[3], 1.0f);
- RwIm3DVertexSetV(&RubbishVertices[3], 1.0f);
-
- // unused
- RubbishIndexList2[0] = 0;
- RubbishIndexList2[1] = 2;
- RubbishIndexList2[2] = 1;
- RubbishIndexList2[3] = 1;
- RubbishIndexList2[4] = 2;
- RubbishIndexList2[5] = 3;
-
RubbishIndexList[0] = 0;
RubbishIndexList[1] = 1;
RubbishIndexList[2] = 2;
@@ -414,19 +411,11 @@ void
CRubbish::Shutdown(void)
{
RwTextureDestroy(gpRubbishTexture[0]);
-#ifdef GTA3_1_1_PATCH
gpRubbishTexture[0] = nil;
-#endif
RwTextureDestroy(gpRubbishTexture[1]);
-#ifdef GTA3_1_1_PATCH
gpRubbishTexture[1] = nil;
-#endif
RwTextureDestroy(gpRubbishTexture[2]);
-#ifdef GTA3_1_1_PATCH
gpRubbishTexture[2] = nil;
-#endif
RwTextureDestroy(gpRubbishTexture[3]);
-#ifdef GTA3_1_1_PATCH
gpRubbishTexture[3] = nil;
-#endif
}
diff --git a/src/render/ShadowCamera.cpp b/src/render/ShadowCamera.cpp
index ae94f8ac..f69c234f 100644
--- a/src/render/ShadowCamera.cpp
+++ b/src/render/ShadowCamera.cpp
@@ -160,7 +160,7 @@ CShadowCamera::SetCenter(RwV3d *center)
ASSERT(m_pCamera != nil);
RwFrame *camFrame = RwCameraGetFrame(m_pCamera);
- RwMatrix *camMatrix = RwFrameGetMatrix(camFrame);
+ RwMatrix *camMatrix = RwFrameGetMatrix(camFrame);
*RwMatrixGetPos(camMatrix) = *center;
@@ -188,7 +188,7 @@ CShadowCamera::Update(RpClump *clump)
if ( RwCameraBeginUpdate(m_pCamera) )
{
- geometry = GetFirstAtomic(clump)->geometry;
+ geometry = RpAtomicGetGeometry(GetFirstAtomic(clump));
ASSERT(geometry != nil);
flags = RpGeometryGetFlags(geometry);
diff --git a/src/render/Shadows.cpp b/src/render/Shadows.cpp
index 5bb6a734..a964ceb6 100644
--- a/src/render/Shadows.cpp
+++ b/src/render/Shadows.cpp
@@ -715,7 +715,7 @@ CShadows::StoreShadowForVehicle(CVehicle *pCar, VEH_SHD_TYPE type)
}
void
-CShadows::StoreCarLightShadow(CAutomobile *pCar, int32 nID, RwTexture *pTexture, CVector *pPosn,
+CShadows::StoreCarLightShadow(CVehicle *pCar, int32 nID, RwTexture *pTexture, CVector *pPosn,
float fFrontX, float fFrontY, float fSideX, float fSideY, uint8 nRed, uint8 nGreen, uint8 nBlue,
float fMaxViewAngle)
{
diff --git a/src/render/Shadows.h b/src/render/Shadows.h
index 94b2981f..937ff4eb 100644
--- a/src/render/Shadows.h
+++ b/src/render/Shadows.h
@@ -159,7 +159,7 @@ public:
static void StoreShadowToBeRendered ( uint8 ShadowType, CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, int16 nIntensity, uint8 nRed, uint8 nGreen, uint8 nBlue);
static void StoreShadowToBeRendered ( uint8 ShadowType, RwTexture *pTexture, CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, int16 nIntensity, uint8 nRed, uint8 nGreen, uint8 nBlue, float fZDistance, bool bDrawOnWater, float fScale, CCutsceneShadow *pShadow, bool bDrawOnBuildings);
static void StoreShadowForVehicle (CVehicle *pCar, VEH_SHD_TYPE type);
- static void StoreCarLightShadow (CAutomobile *pCar, int32 nID, RwTexture *pTexture, CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, uint8 nRed, uint8 nGreen, uint8 nBlue, float fMaxViewAngle);
+ static void StoreCarLightShadow (CVehicle *pCar, int32 nID, RwTexture *pTexture, CVector *pPosn, float fFrontX, float fFrontY, float fSideX, float fSideY, uint8 nRed, uint8 nGreen, uint8 nBlue, float fMaxViewAngle);
static void StoreShadowForPed (CPed *pPed, float fDisplacementX, float fDisplacementY, float fFrontX, float fFrontY, float fSideX, float fSideY);
static void StoreShadowForPedObject (CEntity *pPedObject, float fDisplacementX, float fDisplacementY, float fFrontX, float fFrontY, float fSideX, float fSideY);
static void StoreShadowForCutscenePedObject(CCutsceneObject *pObject, float fDisplacementX, float fDisplacementY, float fFrontX, float fFrontY, float fSideX, float fSideY);
diff --git a/src/render/Skidmarks.cpp b/src/render/Skidmarks.cpp
index efd88387..f2a66db1 100644
--- a/src/render/Skidmarks.cpp
+++ b/src/render/Skidmarks.cpp
@@ -6,6 +6,8 @@
#include "Replay.h"
#include "Skidmarks.h"
+//--MIAMI: file done
+
CSkidmark CSkidmarks::aSkidmarks[NUMSKIDMARKS];
RwImVertexIndex SkidmarkIndexList[SKIDMARK_LENGTH * 6];
@@ -37,13 +39,6 @@ CSkidmarks::Init(void)
SkidmarkIndexList[i*6+5] = ix+3;
ix += 2;
}
-
- for(i = 0; i < SKIDMARK_LENGTH; i++){
- RwIm3DVertexSetU(&SkidmarkVertices[i*2 + 0], 0.0f);
- RwIm3DVertexSetV(&SkidmarkVertices[i*2 + 0], i*5.01f);
- RwIm3DVertexSetU(&SkidmarkVertices[i*2 + 1], 1.0f);
- RwIm3DVertexSetV(&SkidmarkVertices[i*2 + 1], i*5.01f);
- }
}
void
@@ -141,8 +136,12 @@ CSkidmarks::Render(void)
p2.y -= aSkidmarks[i].m_sideY[j];
RwIm3DVertexSetRGBA(&SkidmarkVertices[j*2+0], color.red, color.green, color.blue, alpha);
RwIm3DVertexSetPos(&SkidmarkVertices[j*2+0], p1.x, p1.y, p1.z+0.1f);
+ RwIm3DVertexSetU(&SkidmarkVertices[j*2+0], 0.0f);
+ RwIm3DVertexSetV(&SkidmarkVertices[j*2+0], j*5.01f);
RwIm3DVertexSetRGBA(&SkidmarkVertices[j*2+1], color.red, color.green, color.blue, alpha);
RwIm3DVertexSetPos(&SkidmarkVertices[j*2+1], p2.x, p2.y, p2.z+0.1f);
+ RwIm3DVertexSetU(&SkidmarkVertices[j*2+1], 1.0f);
+ RwIm3DVertexSetV(&SkidmarkVertices[j*2+1], j*5.01f);
}
LittleTest();
diff --git a/src/render/SpecialFX.cpp b/src/render/SpecialFX.cpp
index 3bc99a4d..fa8379f0 100644
--- a/src/render/SpecialFX.cpp
+++ b/src/render/SpecialFX.cpp
@@ -21,6 +21,9 @@
#include "Camera.h"
#include "Shadows.h"
#include "main.h"
+#include "ColStore.h"
+#include "Coronas.h"
+#include "Script.h"
RwIm3DVertex StreakVertices[4];
RwImVertexIndex StreakIndexList[12];
@@ -371,6 +374,8 @@ MarkerAtomicCB(RpAtomic *atomic, void *data)
return atomic;
}
+// --MIAMI: C3dMarker and C3dMarkers done
+
bool
C3dMarker::AddMarker(uint32 identifier, uint16 type, float fSize, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate)
{
@@ -415,6 +420,7 @@ C3dMarker::DeleteMarkerObject()
m_nIdentifier = 0;
m_nStartTime = 0;
m_bIsUsed = false;
+ m_bFindZOnNextPlacement = false;
m_nType = MARKERTYPE_INVALID;
frame = RpAtomicGetFrame(m_pAtomic);
@@ -458,6 +464,7 @@ C3dMarkers::Init()
m_aMarkerArray[i].m_pAtomic = nil;
m_aMarkerArray[i].m_nType = MARKERTYPE_INVALID;
m_aMarkerArray[i].m_bIsUsed = false;
+ m_aMarkerArray[i].m_bFindZOnNextPlacement = false;
m_aMarkerArray[i].m_nIdentifier = 0;
m_aMarkerArray[i].m_Color.red = 255;
m_aMarkerArray[i].m_Color.green = 255;
@@ -503,8 +510,15 @@ C3dMarkers::Render()
ActivateDirectional();
for (int i = 0; i < NUM3DMARKERS; i++) {
if (m_aMarkerArray[i].m_bIsUsed) {
- if (m_aMarkerArray[i].m_fCameraRange < 120.0f)
+ if (m_aMarkerArray[i].m_fCameraRange < 150.0f) {
m_aMarkerArray[i].Render();
+ if (m_aMarkerArray[i].m_nType == MARKERTYPE_ARROW) {
+ CCoronas::RegisterCorona((uintptr)&m_aMarkerArray[i],
+ SPHERE_MARKER_R, SPHERE_MARKER_G, SPHERE_MARKER_B, 192,
+ m_aMarkerArray[i].m_Matrix.GetPosition(), 1.2f * m_aMarkerArray[i].m_fSize, 50.0f * TheCamera.LODDistMultiplier,
+ CCoronas::TYPE_STAR, CCoronas::FLARE_NONE, CCoronas::REFLECTION_OFF, CCoronas::LOSCHECK_OFF, CCoronas::STREAK_ON, 0.0f, false);
+ }
+ }
NumActiveMarkers++;
m_aMarkerArray[i].m_bIsUsed = false;
} else if (m_aMarkerArray[i].m_pAtomic != nil) {
@@ -517,9 +531,9 @@ C3dMarker *
C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size, uint8 r, uint8 g, uint8 b, uint8 a, uint16 pulsePeriod, float pulseFraction, int16 rotateRate)
{
C3dMarker *pMarker;
-
+ CVector2D playerPos = FindPlayerCentreOfWorld(0);
pMarker = nil;
- float dist = Sqrt((pos.x - FindPlayerCentreOfWorld(0).x) * (pos.x - FindPlayerCentreOfWorld(0).x) + (pos.y - FindPlayerCentreOfWorld(0).y) * (pos.y - FindPlayerCentreOfWorld(0).y));
+ float dist = ((CVector2D)pos - playerPos).Magnitude();
if (type != MARKERTYPE_ARROW && type != MARKERTYPE_CYLINDER) return nil;
@@ -592,6 +606,15 @@ C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size
}
if (type == MARKERTYPE_ARROW)
pMarker->m_Matrix.GetPosition() = pos;
+
+ if (pMarker->m_bFindZOnNextPlacement) {
+ if ((playerPos - pos).MagnitudeSqr() < sq(100.f) && CColStore::HasCollisionLoaded(CVector2D(pos))) {
+ float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil);
+ if (z != 0.0f)
+ pMarker->m_Matrix.GetPosition().z = z - 0.05f * size;
+ pMarker->m_bFindZOnNextPlacement = false;
+ }
+ }
pMarker->m_bIsUsed = true;
return pMarker;
}
@@ -601,9 +624,14 @@ C3dMarkers::PlaceMarker(uint32 identifier, uint16 type, CVector &pos, float size
pMarker->AddMarker(identifier, type, size, r, g, b, a, pulsePeriod, pulseFraction, rotateRate);
if (type == MARKERTYPE_CYLINDER || type == MARKERTYPE_0 || type == MARKERTYPE_2) {
- float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil);
- if (z != 0.0f)
- pos.z = z - 0.05f * size;
+ if ((playerPos - pos).MagnitudeSqr() < sq(100.f) && CColStore::HasCollisionLoaded(CVector2D(pos))) {
+ float z = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z + 1.0f, nil);
+ if (z != 0.0f)
+ pos.z = z - 0.05f * size;
+ pMarker->m_bFindZOnNextPlacement = false;
+ } else {
+ pMarker->m_bFindZOnNextPlacement = true;
+ }
}
pMarker->m_Matrix.SetTranslate(pos.x, pos.y, pos.z);
if (type == MARKERTYPE_2) {
diff --git a/src/render/SpecialFX.h b/src/render/SpecialFX.h
index 55ad6cb9..8bd0d5e1 100644
--- a/src/render/SpecialFX.h
+++ b/src/render/SpecialFX.h
@@ -87,6 +87,7 @@ public:
RpMaterial *m_pMaterial;
uint16 m_nType;
bool m_bIsUsed;
+ bool m_bFindZOnNextPlacement;
uint32 m_nIdentifier;
RwRGBA m_Color;
uint16 m_nPulsePeriod;
diff --git a/src/render/Sprite.cpp b/src/render/Sprite.cpp
index f26f8e63..401eebd0 100644
--- a/src/render/Sprite.cpp
+++ b/src/render/Sprite.cpp
@@ -148,10 +148,10 @@ CSprite::RenderOneXLUSprite_Rotate_Aspect(float x, float y, float z, float w, fl
// Fade out when too near
// why not in buffered version?
- if(z < 3.0f){
- if(z < 1.5f)
+ if(z < 2.3f){
+ if(z < 1.3f)
return;
- int f = (z - 1.5f)/1.5f * 255;
+ int f = (z - 1.3f)/(2.3f-1.3f) * 255;
r = f*r >> 8;
g = f*g >> 8;
b = f*b >> 8;
diff --git a/src/render/Sprite2d.cpp b/src/render/Sprite2d.cpp
index cba64e7a..0cd0e8bb 100644
--- a/src/render/Sprite2d.cpp
+++ b/src/render/Sprite2d.cpp
@@ -9,6 +9,7 @@
float CSprite2d::RecipNearClip;
float CSprite2d::NearScreenZ;
+float CSprite2d::NearCamZ;
int CSprite2d::nextBufferVertex;
int CSprite2d::nextBufferIndex;
RwIm2DVertex CSprite2d::maVertices[8];
@@ -26,6 +27,9 @@ CSprite2d::InitPerFrame(void)
nextBufferIndex = 0;
RecipNearClip = 1.0f / RwCameraGetNearClipPlane(Scene.camera);
NearScreenZ = RwIm2DGetNearScreenZ();
+ // not original but you're supposed to set camera z too
+ // wrapping all this in FIX_BUGS is too ugly
+ NearCamZ = RwCameraGetNearClipPlane(Scene.camera);
}
void
CSprite2d::Delete(void)
@@ -71,7 +75,7 @@ CSprite2d::SetRenderState(void)
void
CSprite2d::Draw(float x, float y, float w, float h, const CRGBA &col)
{
- SetVertices(CRect(x, y, x + w, y + h), col, col, col, col, 0);
+ SetVertices(CRect(x, y, x + w, y + h), col, col, col, col);
SetRenderState();
RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4);
}
@@ -79,7 +83,7 @@ CSprite2d::Draw(float x, float y, float w, float h, const CRGBA &col)
void
CSprite2d::Draw(const CRect &rect, const CRGBA &col)
{
- SetVertices(rect, col, col, col, col, 0);
+ SetVertices(rect, col, col, col, col);
SetRenderState();
RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4);
}
@@ -96,7 +100,7 @@ CSprite2d::Draw(const CRect &rect, const CRGBA &col,
void
CSprite2d::Draw(const CRect &rect, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3)
{
- SetVertices(rect, c0, c1, c2, c3, 0);
+ SetVertices(rect, c0, c1, c2, c3);
SetRenderState();
RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4);
}
@@ -114,18 +118,9 @@ CSprite2d::Draw(float x1, float y1, float x2, float y2, float x3, float y3, floa
// | |
// 0---1
void
-CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, uint32 far)
+CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3)
{
- float screenz, z, recipz;
-
- if(far){
- screenz = RwIm2DGetFarScreenZ();
- z = RwCameraGetFarClipPlane(Scene.camera);
- }else{
- screenz = NearScreenZ;
- z = 1.0f/RecipNearClip;
- }
- recipz = 1.0f/z;
+ float offset = 1.0f/1024.0f;
// This is what we draw:
// 0---1
@@ -133,159 +128,141 @@ CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const C
// 3---2
RwIm2DVertexSetScreenX(&maVertices[0], r.left);
RwIm2DVertexSetScreenY(&maVertices[0], r.top);
- RwIm2DVertexSetScreenZ(&maVertices[0], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[0], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[0], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[0], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[0], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a);
- RwIm2DVertexSetU(&maVertices[0], 0.0f, recipz);
- RwIm2DVertexSetV(&maVertices[0], 0.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[0], 0.0f+offset, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[0], 0.0f+offset, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[1], r.right);
RwIm2DVertexSetScreenY(&maVertices[1], r.top);
- RwIm2DVertexSetScreenZ(&maVertices[1], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[1], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[1], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[1], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[1], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a);
- RwIm2DVertexSetU(&maVertices[1], 1.0f, recipz);
- RwIm2DVertexSetV(&maVertices[1], 0.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[1], 1.0f+offset, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[1], 0.0f+offset, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[2], r.right);
RwIm2DVertexSetScreenY(&maVertices[2], r.bottom);
- RwIm2DVertexSetScreenZ(&maVertices[2], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[2], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[2], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[2], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[2], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a);
- RwIm2DVertexSetU(&maVertices[2], 1.0f, recipz);
- RwIm2DVertexSetV(&maVertices[2], 1.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[2], 1.0f+offset, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[2], 1.0f+offset, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[3], r.left);
RwIm2DVertexSetScreenY(&maVertices[3], r.bottom);
- RwIm2DVertexSetScreenZ(&maVertices[3], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[3], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[3], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[3], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[3], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a);
- RwIm2DVertexSetU(&maVertices[3], 0.0f, recipz);
- RwIm2DVertexSetV(&maVertices[3], 1.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[3], 0.0f+offset, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[3], 1.0f+offset, RecipNearClip);
}
void
CSprite2d::SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3,
float u0, float v0, float u1, float v1, float u3, float v3, float u2, float v2)
{
- float screenz, z, recipz;
-
- screenz = NearScreenZ;
- z = 1.0f/RecipNearClip;
- recipz = 1.0f/z;
-
// This is what we draw:
// 0---1
// | / |
// 3---2
RwIm2DVertexSetScreenX(&maVertices[0], r.left);
RwIm2DVertexSetScreenY(&maVertices[0], r.top);
- RwIm2DVertexSetScreenZ(&maVertices[0], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[0], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[0], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[0], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[0], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a);
- RwIm2DVertexSetU(&maVertices[0], u0, recipz);
- RwIm2DVertexSetV(&maVertices[0], v0, recipz);
+ RwIm2DVertexSetU(&maVertices[0], u0, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[0], v0, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[1], r.right);
RwIm2DVertexSetScreenY(&maVertices[1], r.top);
- RwIm2DVertexSetScreenZ(&maVertices[1], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[1], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[1], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[1], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[1], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a);
- RwIm2DVertexSetU(&maVertices[1], u1, recipz);
- RwIm2DVertexSetV(&maVertices[1], v1, recipz);
+ RwIm2DVertexSetU(&maVertices[1], u1, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[1], v1, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[2], r.right);
RwIm2DVertexSetScreenY(&maVertices[2], r.bottom);
- RwIm2DVertexSetScreenZ(&maVertices[2], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[2], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[2], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[2], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[2], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a);
- RwIm2DVertexSetU(&maVertices[2], u2, recipz);
- RwIm2DVertexSetV(&maVertices[2], v2, recipz);
+ RwIm2DVertexSetU(&maVertices[2], u2, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[2], v2, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[3], r.left);
RwIm2DVertexSetScreenY(&maVertices[3], r.bottom);
- RwIm2DVertexSetScreenZ(&maVertices[3], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[3], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[3], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[3], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[3], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a);
- RwIm2DVertexSetU(&maVertices[3], u3, recipz);
- RwIm2DVertexSetV(&maVertices[3], v3, recipz);
+ RwIm2DVertexSetU(&maVertices[3], u3, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[3], v3, RecipNearClip);
}
void
CSprite2d::SetVertices(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4,
const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3)
{
- float screenz, recipz;
- float z = RwCameraGetNearClipPlane(Scene.camera); // not done by game
-
- screenz = NearScreenZ;
- recipz = RecipNearClip;
-
RwIm2DVertexSetScreenX(&maVertices[0], x3);
RwIm2DVertexSetScreenY(&maVertices[0], y3);
- RwIm2DVertexSetScreenZ(&maVertices[0], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[0], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[0], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[0], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[0], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[0], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[0], c2.r, c2.g, c2.b, c2.a);
- RwIm2DVertexSetU(&maVertices[0], 0.0f, recipz);
- RwIm2DVertexSetV(&maVertices[0], 0.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[0], 0.0f, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[0], 0.0f, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[1], x4);
RwIm2DVertexSetScreenY(&maVertices[1], y4);
- RwIm2DVertexSetScreenZ(&maVertices[1], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[1], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[1], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[1], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[1], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[1], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[1], c3.r, c3.g, c3.b, c3.a);
- RwIm2DVertexSetU(&maVertices[1], 1.0f, recipz);
- RwIm2DVertexSetV(&maVertices[1], 0.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[1], 1.0f, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[1], 0.0f, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[2], x2);
RwIm2DVertexSetScreenY(&maVertices[2], y2);
- RwIm2DVertexSetScreenZ(&maVertices[2], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[2], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[2], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[2], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[2], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[2], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[2], c1.r, c1.g, c1.b, c1.a);
- RwIm2DVertexSetU(&maVertices[2], 1.0f, recipz);
- RwIm2DVertexSetV(&maVertices[2], 1.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[2], 1.0f, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[2], 1.0f, RecipNearClip);
RwIm2DVertexSetScreenX(&maVertices[3], x1);
RwIm2DVertexSetScreenY(&maVertices[3], y1);
- RwIm2DVertexSetScreenZ(&maVertices[3], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[3], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[3], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[3], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[3], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[3], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[3], c0.r, c0.g, c0.b, c0.a);
- RwIm2DVertexSetU(&maVertices[3], 0.0f, recipz);
- RwIm2DVertexSetV(&maVertices[3], 1.0f, recipz);
+ RwIm2DVertexSetU(&maVertices[3], 0.0f, RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[3], 1.0f, RecipNearClip);
}
void
CSprite2d::SetVertices(int n, float *positions, float *uvs, const CRGBA &col)
{
int i;
- float screenz, recipz, z;
-
- screenz = NearScreenZ;
- recipz = RecipNearClip;
- z = RwCameraGetNearClipPlane(Scene.camera); // not done by game
-
for(i = 0; i < n; i++){
RwIm2DVertexSetScreenX(&maVertices[i], positions[i*2 + 0]);
RwIm2DVertexSetScreenY(&maVertices[i], positions[i*2 + 1]);
- RwIm2DVertexSetScreenZ(&maVertices[i], screenz + 0.0001f);
- RwIm2DVertexSetCameraZ(&maVertices[i], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[i], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[i], NearScreenZ + 0.0001f);
+ RwIm2DVertexSetCameraZ(&maVertices[i], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[i], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[i], col.r, col.g, col.b, col.a);
- RwIm2DVertexSetU(&maVertices[i], uvs[i*2 + 0], recipz);
- RwIm2DVertexSetV(&maVertices[i], uvs[i*2 + 1], recipz);
+ RwIm2DVertexSetU(&maVertices[i], uvs[i*2 + 0], RecipNearClip);
+ RwIm2DVertexSetV(&maVertices[i], uvs[i*2 + 1], RecipNearClip);
}
}
@@ -293,18 +270,13 @@ void
CSprite2d::SetMaskVertices(int n, float *positions)
{
int i;
- float screenz, recipz, z;
-
- screenz = NearScreenZ;
- recipz = RecipNearClip;
- z = RwCameraGetNearClipPlane(Scene.camera); // not done by game
for(i = 0; i < n; i++){
RwIm2DVertexSetScreenX(&maVertices[i], positions[i*2 + 0]);
RwIm2DVertexSetScreenY(&maVertices[i], positions[i*2 + 1]);
- RwIm2DVertexSetScreenZ(&maVertices[i], screenz);
- RwIm2DVertexSetCameraZ(&maVertices[i], z);
- RwIm2DVertexSetRecipCameraZ(&maVertices[i], recipz);
+ RwIm2DVertexSetScreenZ(&maVertices[i], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&maVertices[i], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&maVertices[i], RecipNearClip);
RwIm2DVertexSetIntRGBA(&maVertices[i], 255, 255, 255, 255); // 0, 0, 0, 0 on PC
}
}
@@ -313,53 +285,47 @@ void
CSprite2d::SetVertices(RwIm2DVertex *verts, const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3,
float u0, float v0, float u1, float v1, float u3, float v3, float u2, float v2)
{
- float screenz, recipz, z;
-
- screenz = NearScreenZ;
- recipz = RecipNearClip;
- z = RwCameraGetNearClipPlane(Scene.camera); // not done by game
-
RwIm2DVertexSetScreenX(&verts[0], r.left);
RwIm2DVertexSetScreenY(&verts[0], r.top);
- RwIm2DVertexSetScreenZ(&verts[0], screenz);
- RwIm2DVertexSetCameraZ(&verts[0], z);
- RwIm2DVertexSetRecipCameraZ(&verts[0], recipz);
+ RwIm2DVertexSetScreenZ(&verts[0], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&verts[0], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&verts[0], RecipNearClip);
RwIm2DVertexSetIntRGBA(&verts[0], c2.r, c2.g, c2.b, c2.a);
- RwIm2DVertexSetU(&verts[0], u0, recipz);
- RwIm2DVertexSetV(&verts[0], v0, recipz);
+ RwIm2DVertexSetU(&verts[0], u0, RecipNearClip);
+ RwIm2DVertexSetV(&verts[0], v0, RecipNearClip);
RwIm2DVertexSetScreenX(&verts[1], r.right);
RwIm2DVertexSetScreenY(&verts[1], r.top);
- RwIm2DVertexSetScreenZ(&verts[1], screenz);
- RwIm2DVertexSetCameraZ(&verts[1], z);
- RwIm2DVertexSetRecipCameraZ(&verts[1], recipz);
+ RwIm2DVertexSetScreenZ(&verts[1], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&verts[1], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&verts[1], RecipNearClip);
RwIm2DVertexSetIntRGBA(&verts[1], c3.r, c3.g, c3.b, c3.a);
- RwIm2DVertexSetU(&verts[1], u1, recipz);
- RwIm2DVertexSetV(&verts[1], v1, recipz);
+ RwIm2DVertexSetU(&verts[1], u1, RecipNearClip);
+ RwIm2DVertexSetV(&verts[1], v1, RecipNearClip);
RwIm2DVertexSetScreenX(&verts[2], r.right);
RwIm2DVertexSetScreenY(&verts[2], r.bottom);
- RwIm2DVertexSetScreenZ(&verts[2], screenz);
- RwIm2DVertexSetCameraZ(&verts[2], z);
- RwIm2DVertexSetRecipCameraZ(&verts[2], recipz);
+ RwIm2DVertexSetScreenZ(&verts[2], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&verts[2], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&verts[2], RecipNearClip);
RwIm2DVertexSetIntRGBA(&verts[2], c1.r, c1.g, c1.b, c1.a);
- RwIm2DVertexSetU(&verts[2], u2, recipz);
- RwIm2DVertexSetV(&verts[2], v2, recipz);
+ RwIm2DVertexSetU(&verts[2], u2, RecipNearClip);
+ RwIm2DVertexSetV(&verts[2], v2, RecipNearClip);
RwIm2DVertexSetScreenX(&verts[3], r.left);
RwIm2DVertexSetScreenY(&verts[3], r.bottom);
- RwIm2DVertexSetScreenZ(&verts[3], screenz);
- RwIm2DVertexSetCameraZ(&verts[3], z);
- RwIm2DVertexSetRecipCameraZ(&verts[3], recipz);
+ RwIm2DVertexSetScreenZ(&verts[3], NearScreenZ);
+ RwIm2DVertexSetCameraZ(&verts[3], NearCamZ);
+ RwIm2DVertexSetRecipCameraZ(&verts[3], RecipNearClip);
RwIm2DVertexSetIntRGBA(&verts[3], c0.r, c0.g, c0.b, c0.a);
- RwIm2DVertexSetU(&verts[3], u3, recipz);
- RwIm2DVertexSetV(&verts[3], v3, recipz);
+ RwIm2DVertexSetU(&verts[3], u3, RecipNearClip);
+ RwIm2DVertexSetV(&verts[3], v3, RecipNearClip);
}
void
CSprite2d::DrawRect(const CRect &r, const CRGBA &col)
{
- SetVertices(r, col, col, col, col, false);
+ SetVertices(r, col, col, col, col);
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
RwRenderStateSet(rwRENDERSTATESHADEMODE, (void*)rwSHADEMODEFLAT);
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
@@ -374,7 +340,7 @@ CSprite2d::DrawRect(const CRect &r, const CRGBA &col)
void
CSprite2d::DrawRect(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3)
{
- SetVertices(r, c0, c1, c2, c3, false);
+ SetVertices(r, c0, c1, c2, c3);
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
@@ -387,7 +353,7 @@ CSprite2d::DrawRect(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGB
void
CSprite2d::DrawRectXLU(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3)
{
- SetVertices(r, c0, c1, c2, c3, false);
+ SetVertices(r, c0, c1, c2, c3);
RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nil);
RwRenderStateSet(rwRENDERSTATEZTESTENABLE, (void*)FALSE);
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, (void*)FALSE);
diff --git a/src/render/Sprite2d.h b/src/render/Sprite2d.h
index 1adb5d49..5abd8d71 100644
--- a/src/render/Sprite2d.h
+++ b/src/render/Sprite2d.h
@@ -4,6 +4,7 @@ class CSprite2d
{
static float RecipNearClip;
static float NearScreenZ;
+ static float NearCamZ; // not original
static int nextBufferVertex;
static int nextBufferIndex;
static RwIm2DVertex maVertices[8];
@@ -27,7 +28,7 @@ public:
void Draw(const CRect &rect, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3);
void Draw(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, const CRGBA &col);
- static void SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3, uint32 far);
+ static void SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3);
static void SetVertices(const CRect &r, const CRGBA &c0, const CRGBA &c1, const CRGBA &c2, const CRGBA &c3,
float u0, float v0, float u1, float v1, float u3, float v3, float u2, float v2);
static void SetVertices(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4,
diff --git a/src/render/Timecycle.cpp b/src/render/Timecycle.cpp
index fe898412..b20a2443 100644
--- a/src/render/Timecycle.cpp
+++ b/src/render/Timecycle.cpp
@@ -10,60 +10,60 @@
#include "FileMgr.h"
#include "Timecycle.h"
-// TODO(MIAMI): change some of the types here
-
-int CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nDirectionalRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nDirectionalGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nDirectionalBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fSunSize[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fSpriteSize[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fSpriteBrightness[NUMHOURS][NUMWEATHERS];
-short CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS];
-short CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS];
-short CTimeCycle::m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fFogStart[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fFarClip[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS];
-int CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fBlurRed[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fBlurGreen[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fBlurBlue[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fWaterRed[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fWaterGreen[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fWaterBlue[NUMHOURS][NUMWEATHERS];
-float CTimeCycle::m_fWaterAlpha[NUMHOURS][NUMWEATHERS];
+//--MIAMI: done
+
+uint8 CTimeCycle::m_nAmbientRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nDirectionalRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nDirectionalGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nDirectionalBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSkyTopRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSkyTopGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSkyTopBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSkyBottomRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSunCoreRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSunCoreGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSunCoreBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSunCoronaRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS];
+int8 CTimeCycle::m_fSunSize[NUMHOURS][NUMWEATHERS];
+int8 CTimeCycle::m_fSpriteSize[NUMHOURS][NUMWEATHERS];
+int8 CTimeCycle::m_fSpriteBrightness[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nShadowStrength[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nLightShadowStrength[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS];
+int16 CTimeCycle::m_fFogStart[NUMHOURS][NUMWEATHERS];
+int16 CTimeCycle::m_fFarClip[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nLowCloudsRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fBlurRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fBlurGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fBlurBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fWaterRed[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fWaterGreen[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fWaterBlue[NUMHOURS][NUMWEATHERS];
+uint8 CTimeCycle::m_fWaterAlpha[NUMHOURS][NUMWEATHERS];
float CTimeCycle::m_fCurrentAmbientRed;
@@ -81,36 +81,36 @@ float CTimeCycle::m_fCurrentAmbientBlue_Obj_Bl;
float CTimeCycle::m_fCurrentDirectionalRed;
float CTimeCycle::m_fCurrentDirectionalGreen;
float CTimeCycle::m_fCurrentDirectionalBlue;
-int CTimeCycle::m_nCurrentSkyTopRed;
-int CTimeCycle::m_nCurrentSkyTopGreen;
-int CTimeCycle::m_nCurrentSkyTopBlue;
-int CTimeCycle::m_nCurrentSkyBottomRed;
-int CTimeCycle::m_nCurrentSkyBottomGreen;
-int CTimeCycle::m_nCurrentSkyBottomBlue;
-int CTimeCycle::m_nCurrentSunCoreRed;
-int CTimeCycle::m_nCurrentSunCoreGreen;
-int CTimeCycle::m_nCurrentSunCoreBlue;
-int CTimeCycle::m_nCurrentSunCoronaRed;
-int CTimeCycle::m_nCurrentSunCoronaGreen;
-int CTimeCycle::m_nCurrentSunCoronaBlue;
+int32 CTimeCycle::m_nCurrentSkyTopRed;
+int32 CTimeCycle::m_nCurrentSkyTopGreen;
+int32 CTimeCycle::m_nCurrentSkyTopBlue;
+int32 CTimeCycle::m_nCurrentSkyBottomRed;
+int32 CTimeCycle::m_nCurrentSkyBottomGreen;
+int32 CTimeCycle::m_nCurrentSkyBottomBlue;
+int32 CTimeCycle::m_nCurrentSunCoreRed;
+int32 CTimeCycle::m_nCurrentSunCoreGreen;
+int32 CTimeCycle::m_nCurrentSunCoreBlue;
+int32 CTimeCycle::m_nCurrentSunCoronaRed;
+int32 CTimeCycle::m_nCurrentSunCoronaGreen;
+int32 CTimeCycle::m_nCurrentSunCoronaBlue;
float CTimeCycle::m_fCurrentSunSize;
float CTimeCycle::m_fCurrentSpriteSize;
float CTimeCycle::m_fCurrentSpriteBrightness;
-int CTimeCycle::m_nCurrentShadowStrength;
-int CTimeCycle::m_nCurrentLightShadowStrength;
-int CTimeCycle::m_nCurrentPoleShadowStrength;
+int32 CTimeCycle::m_nCurrentShadowStrength;
+int32 CTimeCycle::m_nCurrentLightShadowStrength;
+int32 CTimeCycle::m_nCurrentPoleShadowStrength;
float CTimeCycle::m_fCurrentFogStart;
float CTimeCycle::m_fCurrentFarClip;
float CTimeCycle::m_fCurrentLightsOnGroundBrightness;
-int CTimeCycle::m_nCurrentLowCloudsRed;
-int CTimeCycle::m_nCurrentLowCloudsGreen;
-int CTimeCycle::m_nCurrentLowCloudsBlue;
-int CTimeCycle::m_nCurrentFluffyCloudsTopRed;
-int CTimeCycle::m_nCurrentFluffyCloudsTopGreen;
-int CTimeCycle::m_nCurrentFluffyCloudsTopBlue;
-int CTimeCycle::m_nCurrentFluffyCloudsBottomRed;
-int CTimeCycle::m_nCurrentFluffyCloudsBottomGreen;
-int CTimeCycle::m_nCurrentFluffyCloudsBottomBlue;
+int32 CTimeCycle::m_nCurrentLowCloudsRed;
+int32 CTimeCycle::m_nCurrentLowCloudsGreen;
+int32 CTimeCycle::m_nCurrentLowCloudsBlue;
+int32 CTimeCycle::m_nCurrentFluffyCloudsTopRed;
+int32 CTimeCycle::m_nCurrentFluffyCloudsTopGreen;
+int32 CTimeCycle::m_nCurrentFluffyCloudsTopBlue;
+int32 CTimeCycle::m_nCurrentFluffyCloudsBottomRed;
+int32 CTimeCycle::m_nCurrentFluffyCloudsBottomGreen;
+int32 CTimeCycle::m_nCurrentFluffyCloudsBottomBlue;
float CTimeCycle::m_fCurrentBlurRed;
float CTimeCycle::m_fCurrentBlurGreen;
float CTimeCycle::m_fCurrentBlurBlue;
@@ -118,13 +118,16 @@ float CTimeCycle::m_fCurrentWaterRed;
float CTimeCycle::m_fCurrentWaterGreen;
float CTimeCycle::m_fCurrentWaterBlue;
float CTimeCycle::m_fCurrentWaterAlpha;
-int CTimeCycle::m_nCurrentFogColourRed;
-int CTimeCycle::m_nCurrentFogColourGreen;
-int CTimeCycle::m_nCurrentFogColourBlue;
+int32 CTimeCycle::m_nCurrentFogColourRed;
+int32 CTimeCycle::m_nCurrentFogColourGreen;
+int32 CTimeCycle::m_nCurrentFogColourBlue;
-int CTimeCycle::m_FogReduction;
+int32 CTimeCycle::m_FogReduction;
+int32 CTimeCycle::m_bExtraColourOn;
+int32 CTimeCycle::m_ExtraColour;
+float CTimeCycle::m_ExtraColourInter;
-int CTimeCycle::m_CurrentStoredValue;
+int32 CTimeCycle::m_CurrentStoredValue;
CVector CTimeCycle::m_VectorToSun[16];
float CTimeCycle::m_fShadowFrontX[16];
float CTimeCycle::m_fShadowFrontY[16];
@@ -133,7 +136,6 @@ float CTimeCycle::m_fShadowSideY[16];
float CTimeCycle::m_fShadowDisplacementX[16];
float CTimeCycle::m_fShadowDisplacementY[16];
-
void
CTimeCycle::Initialise(void)
{
@@ -233,15 +235,15 @@ CTimeCycle::Initialise(void)
m_nSunCoronaRed[h][w] = sunCoronaR;
m_nSunCoronaGreen[h][w] = sunCoronaG;
m_nSunCoronaBlue[h][w] = sunCoronaB;
- m_fSunSize[h][w] = sunSz;
- m_fSpriteSize[h][w] = sprSz;
- m_fSpriteBrightness[h][w] = sprBght;
+ m_fSunSize[h][w] = sunSz * 10.0f;
+ m_fSpriteSize[h][w] = sprSz * 10.0f;
+ m_fSpriteBrightness[h][w] = sprBght * 10.0f;
m_nShadowStrength[h][w] = shad;
m_nLightShadowStrength[h][w] = lightShad;
m_nPoleShadowStrength[h][w] = poleShad;
m_fFarClip[h][w] = farClp;
m_fFogStart[h][w] = fogSt;
- m_fLightsOnGroundBrightness[h][w] = lightGnd;
+ m_fLightsOnGroundBrightness[h][w] = lightGnd * 10.0f;
m_nLowCloudsRed[h][w] = cloudR;
m_nLowCloudsGreen[h][w] = cloudG;
m_nLowCloudsBlue[h][w] = cloudB;
@@ -265,6 +267,51 @@ CTimeCycle::Initialise(void)
debug("CTimeCycle ready\n");
}
+static float interp_c0, interp_c1, interp_c2, interp_c3;
+
+float CTimeCycle::Interpolate(int8 *a, int8 *b)
+{
+ return a[CWeather::OldWeatherType] * interp_c0 +
+ b[CWeather::OldWeatherType] * interp_c1 +
+ a[CWeather::NewWeatherType] * interp_c2 +
+ b[CWeather::NewWeatherType] * interp_c3;
+}
+
+float CTimeCycle::Interpolate(uint8 *a, uint8 *b)
+{
+ return a[CWeather::OldWeatherType] * interp_c0 +
+ b[CWeather::OldWeatherType] * interp_c1 +
+ a[CWeather::NewWeatherType] * interp_c2 +
+ b[CWeather::NewWeatherType] * interp_c3;
+}
+
+float CTimeCycle::Interpolate(int16 *a, int16 *b)
+{
+ return a[CWeather::OldWeatherType] * interp_c0 +
+ b[CWeather::OldWeatherType] * interp_c1 +
+ a[CWeather::NewWeatherType] * interp_c2 +
+ b[CWeather::NewWeatherType] * interp_c3;
+}
+
+void
+CTimeCycle::StartExtraColour(int32 c, bool fade)
+{
+ m_bExtraColourOn = true;
+ m_ExtraColour = c;
+ if(fade)
+ m_ExtraColourInter = 0.0f;
+ else
+ m_ExtraColourInter = 1.0f;
+}
+
+void
+CTimeCycle::StopExtraColour(bool fade)
+{
+ m_bExtraColourOn = false;
+ if(!fade)
+ m_ExtraColourInter = 0.0f;
+}
+
void
CTimeCycle::Update(void)
{
@@ -274,12 +321,12 @@ CTimeCycle::Update(void)
int w2 = CWeather::NewWeatherType;
float timeInterp = (CClock::GetMinutes() + CClock::GetSeconds()/60.0f)/60.0f;
// coefficients for a bilinear interpolation
- float c0 = (1.0f-timeInterp) * (1.0f-CWeather::InterpolationValue);
- float c1 = timeInterp * (1.0f-CWeather::InterpolationValue);
- float c2 = (1.0f-timeInterp) * CWeather::InterpolationValue;
- float c3 = timeInterp * CWeather::InterpolationValue;
+ interp_c0 = (1.0f-timeInterp) * (1.0f-CWeather::InterpolationValue);
+ interp_c1 = timeInterp * (1.0f-CWeather::InterpolationValue);
+ interp_c2 = (1.0f-timeInterp) * CWeather::InterpolationValue;
+ interp_c3 = timeInterp * CWeather::InterpolationValue;
-#define INTERP(v) v[h1][w1]*c0 + v[h2][w1]*c1 + v[h1][w2]*c2 + v[h2][w2]*c3;
+#define INTERP(v) Interpolate(v[h1], v[h2])
m_nCurrentSkyTopRed = INTERP(m_nSkyTopRed);
m_nCurrentSkyTopGreen = INTERP(m_nSkyTopGreen);
@@ -317,15 +364,15 @@ CTimeCycle::Update(void)
m_nCurrentSunCoronaGreen = INTERP(m_nSunCoronaGreen);
m_nCurrentSunCoronaBlue = INTERP(m_nSunCoronaBlue);
- m_fCurrentSunSize = INTERP(m_fSunSize);
- m_fCurrentSpriteSize = INTERP(m_fSpriteSize);
- m_fCurrentSpriteBrightness = INTERP(m_fSpriteBrightness);
+ m_fCurrentSunSize = INTERP(m_fSunSize)/10.0f;
+ m_fCurrentSpriteSize = INTERP(m_fSpriteSize)/10.0f;
+ m_fCurrentSpriteBrightness = INTERP(m_fSpriteBrightness)/10.0f;
m_nCurrentShadowStrength = INTERP(m_nShadowStrength);
m_nCurrentLightShadowStrength = INTERP(m_nLightShadowStrength);
m_nCurrentPoleShadowStrength = INTERP(m_nPoleShadowStrength);
m_fCurrentFarClip = INTERP(m_fFarClip);
m_fCurrentFogStart = INTERP(m_fFogStart);
- m_fCurrentLightsOnGroundBrightness = INTERP(m_fLightsOnGroundBrightness);
+ m_fCurrentLightsOnGroundBrightness = INTERP(m_fLightsOnGroundBrightness)/10.0f;
m_nCurrentLowCloudsRed = INTERP(m_nLowCloudsRed);
m_nCurrentLowCloudsGreen = INTERP(m_nLowCloudsGreen);
@@ -347,6 +394,7 @@ CTimeCycle::Update(void)
m_fCurrentWaterGreen = INTERP(m_fWaterGreen);
m_fCurrentWaterBlue = INTERP(m_fWaterBlue);
m_fCurrentWaterAlpha = INTERP(m_fWaterAlpha);
+#undef INTERP
if(m_FogReduction != 0)
m_fCurrentFarClip = Max(m_fCurrentFarClip, m_FogReduction/64.0f * 650.0f);
@@ -360,7 +408,88 @@ CTimeCycle::Update(void)
sunPos.z = 0.2f - Cos(sunAngle);
sunPos.Normalise();
- // TODO(MIAMI): extra colours
+ if(m_bExtraColourOn)
+ m_ExtraColourInter = Min(1.0f, m_ExtraColourInter + CTimer::GetTimeStep()/120.0f);
+ else
+ m_ExtraColourInter = Max(-.0f, m_ExtraColourInter - CTimer::GetTimeStep()/120.0f);
+ if(m_ExtraColourInter > 0.0f){
+#define INTERP(extra,cur) (m_ExtraColourInter*extra[m_ExtraColour][WEATHER_EXTRACOLOURS] + (1.0f-m_ExtraColourInter)*cur)
+#define INTERPscl(extra,scl,cur) (m_ExtraColourInter*extra[m_ExtraColour][WEATHER_EXTRACOLOURS]/scl + (1.0f-m_ExtraColourInter)*cur)
+ if(m_nSkyTopRed[m_ExtraColour][WEATHER_EXTRACOLOURS] != 0 ||
+ m_nSkyTopGreen[m_ExtraColour][WEATHER_EXTRACOLOURS] != 0 ||
+ m_nSkyTopBlue[m_ExtraColour][WEATHER_EXTRACOLOURS] != 0){
+ m_nCurrentSkyTopRed = INTERP(m_nSkyTopRed,m_nCurrentSkyTopRed);
+ m_nCurrentSkyTopGreen = INTERP(m_nSkyTopGreen,m_nCurrentSkyTopGreen);
+ m_nCurrentSkyTopBlue = INTERP(m_nSkyTopBlue,m_nCurrentSkyTopBlue);
+
+ m_nCurrentSkyBottomRed = INTERP(m_nSkyBottomRed,m_nCurrentSkyBottomRed);
+ m_nCurrentSkyBottomGreen = INTERP(m_nSkyBottomGreen,m_nCurrentSkyBottomGreen);
+ m_nCurrentSkyBottomBlue = INTERP(m_nSkyBottomBlue,m_nCurrentSkyBottomBlue);
+
+ m_nCurrentSunCoreRed = INTERP(m_nSunCoreRed,m_nCurrentSunCoreRed);
+ m_nCurrentSunCoreGreen = INTERP(m_nSunCoreGreen,m_nCurrentSunCoreGreen);
+ m_nCurrentSunCoreBlue = INTERP(m_nSunCoreBlue,m_nCurrentSunCoreBlue);
+
+ m_nCurrentSunCoronaRed = INTERP(m_nSunCoronaRed,m_nCurrentSunCoronaRed);
+ m_nCurrentSunCoronaGreen = INTERP(m_nSunCoronaGreen,m_nCurrentSunCoronaGreen);
+ m_nCurrentSunCoronaBlue = INTERP(m_nSunCoronaBlue,m_nCurrentSunCoronaBlue);
+
+ m_fCurrentSunSize = INTERPscl(m_fSunSize,10.0f,m_fCurrentSunSize);
+
+ m_nCurrentLowCloudsRed = INTERP(m_nLowCloudsRed,m_nCurrentLowCloudsRed);
+ m_nCurrentLowCloudsGreen = INTERP(m_nLowCloudsGreen,m_nCurrentLowCloudsGreen);
+ m_nCurrentLowCloudsBlue = INTERP(m_nLowCloudsBlue,m_nCurrentLowCloudsBlue);
+
+ m_nCurrentFluffyCloudsTopRed = INTERP(m_nFluffyCloudsTopRed,m_nCurrentFluffyCloudsTopRed);
+ m_nCurrentFluffyCloudsTopGreen = INTERP(m_nFluffyCloudsTopGreen,m_nCurrentFluffyCloudsTopGreen);
+ m_nCurrentFluffyCloudsTopBlue = INTERP(m_nFluffyCloudsTopBlue,m_nCurrentFluffyCloudsTopBlue);
+
+ m_nCurrentFluffyCloudsBottomRed = INTERP(m_nFluffyCloudsBottomRed,m_nCurrentFluffyCloudsBottomRed);
+ m_nCurrentFluffyCloudsBottomGreen = INTERP(m_nFluffyCloudsBottomGreen,m_nCurrentFluffyCloudsBottomGreen);
+ m_nCurrentFluffyCloudsBottomBlue = INTERP(m_nFluffyCloudsBottomBlue,m_nCurrentFluffyCloudsBottomBlue);
+
+ m_fCurrentWaterRed = INTERP(m_fWaterRed,m_fCurrentWaterRed);
+ m_fCurrentWaterGreen = INTERP(m_fWaterGreen,m_fCurrentWaterGreen);
+ m_fCurrentWaterBlue = INTERP(m_fWaterBlue,m_fCurrentWaterBlue);
+ m_fCurrentWaterAlpha = INTERP(m_fWaterAlpha,m_fCurrentWaterAlpha);
+ }
+
+ m_fCurrentAmbientRed = INTERP(m_nAmbientRed,m_fCurrentAmbientRed);
+ m_fCurrentAmbientGreen = INTERP(m_nAmbientGreen,m_fCurrentAmbientGreen);
+ m_fCurrentAmbientBlue = INTERP(m_nAmbientBlue,m_fCurrentAmbientBlue);
+
+ m_fCurrentAmbientRed_Obj = INTERP(m_nAmbientRed_Obj,m_fCurrentAmbientRed_Obj);
+ m_fCurrentAmbientGreen_Obj = INTERP(m_nAmbientGreen_Obj,m_fCurrentAmbientGreen_Obj);
+ m_fCurrentAmbientBlue_Obj = INTERP(m_nAmbientBlue_Obj,m_fCurrentAmbientBlue_Obj);
+
+ m_fCurrentAmbientRed_Bl = INTERP(m_nAmbientRed_Bl,m_fCurrentAmbientRed_Bl);
+ m_fCurrentAmbientGreen_Bl = INTERP(m_nAmbientGreen_Bl,m_fCurrentAmbientGreen_Bl);
+ m_fCurrentAmbientBlue_Bl = INTERP(m_nAmbientBlue_Bl,m_fCurrentAmbientBlue_Bl);
+
+ m_fCurrentAmbientRed_Obj_Bl = INTERP(m_nAmbientRed_Obj_Bl,m_fCurrentAmbientRed_Obj_Bl);
+ m_fCurrentAmbientGreen_Obj_Bl = INTERP(m_nAmbientGreen_Obj_Bl,m_fCurrentAmbientGreen_Obj_Bl);
+ m_fCurrentAmbientBlue_Obj_Bl = INTERP(m_nAmbientBlue_Obj_Bl,m_fCurrentAmbientBlue_Obj_Bl);
+
+ m_fCurrentDirectionalRed = INTERP(m_nDirectionalRed,m_fCurrentDirectionalRed);
+ m_fCurrentDirectionalGreen = INTERP(m_nDirectionalGreen,m_fCurrentDirectionalGreen);
+ m_fCurrentDirectionalBlue = INTERP(m_nDirectionalBlue,m_fCurrentDirectionalBlue);
+
+ m_fCurrentSpriteSize = INTERPscl(m_fSpriteSize,10.0f,m_fCurrentSpriteSize);
+ m_fCurrentSpriteBrightness = INTERPscl(m_fSpriteBrightness,10.0f,m_fCurrentSpriteBrightness);
+ m_nCurrentShadowStrength = INTERP(m_nShadowStrength,m_nCurrentShadowStrength);
+ m_nCurrentLightShadowStrength = INTERP(m_nLightShadowStrength,m_nCurrentLightShadowStrength);
+ m_nCurrentPoleShadowStrength = INTERP(m_nPoleShadowStrength,m_nCurrentPoleShadowStrength);
+ m_fCurrentFarClip = INTERP(m_fFarClip,m_fCurrentFarClip);
+ m_fCurrentFogStart = INTERP(m_fFogStart,m_fCurrentFogStart);
+ m_fCurrentLightsOnGroundBrightness = INTERPscl(m_fLightsOnGroundBrightness,10.0f,m_fCurrentLightsOnGroundBrightness);
+
+ m_fCurrentBlurRed = INTERP(m_fBlurRed,m_fCurrentBlurRed);
+ m_fCurrentBlurGreen = INTERP(m_fBlurGreen,m_fCurrentBlurGreen);
+ m_fCurrentBlurBlue = INTERP(m_fBlurBlue,m_fCurrentBlurBlue);
+
+#undef INTERP
+#undef INTERPscl
+ }
if(TheCamera.m_BlurType == MOTION_BLUR_NONE || TheCamera.m_BlurType == MOTION_BLUR_LIGHT_SCENE)
TheCamera.SetMotionBlur(m_fCurrentBlurRed, m_fCurrentBlurGreen, m_fCurrentBlurBlue, 5, MOTION_BLUR_LIGHT_SCENE);
diff --git a/src/render/Timecycle.h b/src/render/Timecycle.h
index 832b36e2..da911b75 100644
--- a/src/render/Timecycle.h
+++ b/src/render/Timecycle.h
@@ -2,58 +2,58 @@
class CTimeCycle
{
- static int m_nAmbientRed[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientGreen[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientBlue[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS];
- static int m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS];
- static int m_nDirectionalRed[NUMHOURS][NUMWEATHERS];
- static int m_nDirectionalGreen[NUMHOURS][NUMWEATHERS];
- static int m_nDirectionalBlue[NUMHOURS][NUMWEATHERS];
- static int m_nSkyTopRed[NUMHOURS][NUMWEATHERS];
- static int m_nSkyTopGreen[NUMHOURS][NUMWEATHERS];
- static int m_nSkyTopBlue[NUMHOURS][NUMWEATHERS];
- static int m_nSkyBottomRed[NUMHOURS][NUMWEATHERS];
- static int m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS];
- static int m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS];
- static int m_nSunCoreRed[NUMHOURS][NUMWEATHERS];
- static int m_nSunCoreGreen[NUMHOURS][NUMWEATHERS];
- static int m_nSunCoreBlue[NUMHOURS][NUMWEATHERS];
- static int m_nSunCoronaRed[NUMHOURS][NUMWEATHERS];
- static int m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS];
- static int m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS];
- static float m_fSunSize[NUMHOURS][NUMWEATHERS];
- static float m_fSpriteSize[NUMHOURS][NUMWEATHERS];
- static float m_fSpriteBrightness[NUMHOURS][NUMWEATHERS];
- static short m_nShadowStrength[NUMHOURS][NUMWEATHERS];
- static short m_nLightShadowStrength[NUMHOURS][NUMWEATHERS];
- static short m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS];
- static float m_fFogStart[NUMHOURS][NUMWEATHERS];
- static float m_fFarClip[NUMHOURS][NUMWEATHERS];
- static float m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS];
- static int m_nLowCloudsRed[NUMHOURS][NUMWEATHERS];
- static int m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS];
- static int m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS];
- static int m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS];
- static int m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS];
- static int m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS];
- static int m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS];
- static int m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS];
- static int m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS];
- static float m_fBlurRed[NUMHOURS][NUMWEATHERS];
- static float m_fBlurGreen[NUMHOURS][NUMWEATHERS];
- static float m_fBlurBlue[NUMHOURS][NUMWEATHERS];
- static float m_fWaterRed[NUMHOURS][NUMWEATHERS];
- static float m_fWaterGreen[NUMHOURS][NUMWEATHERS];
- static float m_fWaterBlue[NUMHOURS][NUMWEATHERS];
- static float m_fWaterAlpha[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientRed_Obj[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientGreen_Obj[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientBlue_Obj[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientRed_Bl[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientGreen_Bl[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientBlue_Bl[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientRed_Obj_Bl[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientGreen_Obj_Bl[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nAmbientBlue_Obj_Bl[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nDirectionalRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nDirectionalGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nDirectionalBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSkyTopRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSkyTopGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSkyTopBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSkyBottomRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSkyBottomGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSkyBottomBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSunCoreRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSunCoreGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSunCoreBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSunCoronaRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSunCoronaGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nSunCoronaBlue[NUMHOURS][NUMWEATHERS];
+ static int8 m_fSunSize[NUMHOURS][NUMWEATHERS];
+ static int8 m_fSpriteSize[NUMHOURS][NUMWEATHERS];
+ static int8 m_fSpriteBrightness[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nShadowStrength[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nLightShadowStrength[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nPoleShadowStrength[NUMHOURS][NUMWEATHERS];
+ static int16 m_fFogStart[NUMHOURS][NUMWEATHERS];
+ static int16 m_fFarClip[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fLightsOnGroundBrightness[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nLowCloudsRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nLowCloudsGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nLowCloudsBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nFluffyCloudsTopRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nFluffyCloudsTopGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nFluffyCloudsTopBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nFluffyCloudsBottomRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nFluffyCloudsBottomGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_nFluffyCloudsBottomBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fBlurRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fBlurGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fBlurBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fWaterRed[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fWaterGreen[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fWaterBlue[NUMHOURS][NUMWEATHERS];
+ static uint8 m_fWaterAlpha[NUMHOURS][NUMWEATHERS];
static float m_fCurrentAmbientRed;
static float m_fCurrentAmbientGreen;
@@ -70,36 +70,36 @@ class CTimeCycle
static float m_fCurrentDirectionalRed;
static float m_fCurrentDirectionalGreen;
static float m_fCurrentDirectionalBlue;
- static int m_nCurrentSkyTopRed;
- static int m_nCurrentSkyTopGreen;
- static int m_nCurrentSkyTopBlue;
- static int m_nCurrentSkyBottomRed;
- static int m_nCurrentSkyBottomGreen;
- static int m_nCurrentSkyBottomBlue;
- static int m_nCurrentSunCoreRed;
- static int m_nCurrentSunCoreGreen;
- static int m_nCurrentSunCoreBlue;
- static int m_nCurrentSunCoronaRed;
- static int m_nCurrentSunCoronaGreen;
- static int m_nCurrentSunCoronaBlue;
+ static int32 m_nCurrentSkyTopRed;
+ static int32 m_nCurrentSkyTopGreen;
+ static int32 m_nCurrentSkyTopBlue;
+ static int32 m_nCurrentSkyBottomRed;
+ static int32 m_nCurrentSkyBottomGreen;
+ static int32 m_nCurrentSkyBottomBlue;
+ static int32 m_nCurrentSunCoreRed;
+ static int32 m_nCurrentSunCoreGreen;
+ static int32 m_nCurrentSunCoreBlue;
+ static int32 m_nCurrentSunCoronaRed;
+ static int32 m_nCurrentSunCoronaGreen;
+ static int32 m_nCurrentSunCoronaBlue;
static float m_fCurrentSunSize;
static float m_fCurrentSpriteSize;
static float m_fCurrentSpriteBrightness;
- static int m_nCurrentShadowStrength;
- static int m_nCurrentLightShadowStrength;
- static int m_nCurrentPoleShadowStrength;
+ static int32 m_nCurrentShadowStrength;
+ static int32 m_nCurrentLightShadowStrength;
+ static int32 m_nCurrentPoleShadowStrength;
static float m_fCurrentFogStart;
static float m_fCurrentFarClip;
static float m_fCurrentLightsOnGroundBrightness;
- static int m_nCurrentLowCloudsRed;
- static int m_nCurrentLowCloudsGreen;
- static int m_nCurrentLowCloudsBlue;
- static int m_nCurrentFluffyCloudsTopRed;
- static int m_nCurrentFluffyCloudsTopGreen;
- static int m_nCurrentFluffyCloudsTopBlue;
- static int m_nCurrentFluffyCloudsBottomRed;
- static int m_nCurrentFluffyCloudsBottomGreen;
- static int m_nCurrentFluffyCloudsBottomBlue;
+ static int32 m_nCurrentLowCloudsRed;
+ static int32 m_nCurrentLowCloudsGreen;
+ static int32 m_nCurrentLowCloudsBlue;
+ static int32 m_nCurrentFluffyCloudsTopRed;
+ static int32 m_nCurrentFluffyCloudsTopGreen;
+ static int32 m_nCurrentFluffyCloudsTopBlue;
+ static int32 m_nCurrentFluffyCloudsBottomRed;
+ static int32 m_nCurrentFluffyCloudsBottomGreen;
+ static int32 m_nCurrentFluffyCloudsBottomBlue;
static float m_fCurrentBlurRed;
static float m_fCurrentBlurGreen;
static float m_fCurrentBlurBlue;
@@ -107,14 +107,17 @@ class CTimeCycle
static float m_fCurrentWaterGreen;
static float m_fCurrentWaterBlue;
static float m_fCurrentWaterAlpha;
- static int m_nCurrentFogColourRed;
- static int m_nCurrentFogColourGreen;
- static int m_nCurrentFogColourBlue;
+ static int32 m_nCurrentFogColourRed;
+ static int32 m_nCurrentFogColourGreen;
+ static int32 m_nCurrentFogColourBlue;
- static int m_FogReduction;
+ static int32 m_FogReduction;
public:
- static int m_CurrentStoredValue;
+ static int32 m_bExtraColourOn;
+ static int32 m_ExtraColour;
+ static float m_ExtraColourInter;
+ static int32 m_CurrentStoredValue;
static CVector m_VectorToSun[16];
static float m_fShadowFrontX[16];
static float m_fShadowFrontY[16];
@@ -138,51 +141,56 @@ public:
static float GetDirectionalRed(void) { return m_fCurrentDirectionalRed; }
static float GetDirectionalGreen(void) { return m_fCurrentDirectionalGreen; }
static float GetDirectionalBlue(void) { return m_fCurrentDirectionalBlue; }
- static int GetSkyTopRed(void) { return m_nCurrentSkyTopRed; }
- static int GetSkyTopGreen(void) { return m_nCurrentSkyTopGreen; }
- static int GetSkyTopBlue(void) { return m_nCurrentSkyTopBlue; }
- static int GetSkyBottomRed(void) { return m_nCurrentSkyBottomRed; }
- static int GetSkyBottomGreen(void) { return m_nCurrentSkyBottomGreen; }
- static int GetSkyBottomBlue(void) { return m_nCurrentSkyBottomBlue; }
- static int GetSunCoreRed(void) { return m_nCurrentSunCoreRed; }
- static int GetSunCoreGreen(void) { return m_nCurrentSunCoreGreen; }
- static int GetSunCoreBlue(void) { return m_nCurrentSunCoreBlue; }
- static int GetSunCoronaRed(void) { return m_nCurrentSunCoronaRed; }
- static int GetSunCoronaGreen(void) { return m_nCurrentSunCoronaGreen; }
- static int GetSunCoronaBlue(void) { return m_nCurrentSunCoronaBlue; }
+ static int32 GetSkyTopRed(void) { return m_nCurrentSkyTopRed; }
+ static int32 GetSkyTopGreen(void) { return m_nCurrentSkyTopGreen; }
+ static int32 GetSkyTopBlue(void) { return m_nCurrentSkyTopBlue; }
+ static int32 GetSkyBottomRed(void) { return m_nCurrentSkyBottomRed; }
+ static int32 GetSkyBottomGreen(void) { return m_nCurrentSkyBottomGreen; }
+ static int32 GetSkyBottomBlue(void) { return m_nCurrentSkyBottomBlue; }
+ static int32 GetSunCoreRed(void) { return m_nCurrentSunCoreRed; }
+ static int32 GetSunCoreGreen(void) { return m_nCurrentSunCoreGreen; }
+ static int32 GetSunCoreBlue(void) { return m_nCurrentSunCoreBlue; }
+ static int32 GetSunCoronaRed(void) { return m_nCurrentSunCoronaRed; }
+ static int32 GetSunCoronaGreen(void) { return m_nCurrentSunCoronaGreen; }
+ static int32 GetSunCoronaBlue(void) { return m_nCurrentSunCoronaBlue; }
static float GetSunSize(void) { return m_fCurrentSunSize; }
static float GetSpriteBrightness(void) { return m_fCurrentSpriteBrightness; }
static float GetSpriteSize(void) { return m_fCurrentSpriteSize; }
- static int GetShadowStrength(void) { return m_nCurrentShadowStrength; }
- static int GetLightShadowStrength(void) { return m_nCurrentLightShadowStrength; }
+ static int32 GetShadowStrength(void) { return m_nCurrentShadowStrength; }
+ static int32 GetLightShadowStrength(void) { return m_nCurrentLightShadowStrength; }
static float GetLightOnGroundBrightness(void) { return m_fCurrentLightsOnGroundBrightness; }
static float GetFarClip(void) { return m_fCurrentFarClip; }
static float GetFogStart(void) { return m_fCurrentFogStart; }
- static int GetLowCloudsRed(void) { return m_nCurrentLowCloudsRed; }
- static int GetLowCloudsGreen(void) { return m_nCurrentLowCloudsGreen; }
- static int GetLowCloudsBlue(void) { return m_nCurrentLowCloudsBlue; }
- static int GetFluffyCloudsTopRed(void) { return m_nCurrentFluffyCloudsTopRed; }
- static int GetFluffyCloudsTopGreen(void) { return m_nCurrentFluffyCloudsTopGreen; }
- static int GetFluffyCloudsTopBlue(void) { return m_nCurrentFluffyCloudsTopBlue; }
- static int GetFluffyCloudsBottomRed(void) { return m_nCurrentFluffyCloudsBottomRed; }
- static int GetFluffyCloudsBottomGreen(void) { return m_nCurrentFluffyCloudsBottomGreen; }
- static int GetFluffyCloudsBottomBlue(void) { return m_nCurrentFluffyCloudsBottomBlue; }
- static int GetFogRed(void) { return m_nCurrentFogColourRed; }
- static int GetFogGreen(void) { return m_nCurrentFogColourGreen; }
- static int GetFogBlue(void) { return m_nCurrentFogColourBlue; }
- static int GetFogReduction(void) { return m_FogReduction; }
+ static int32 GetLowCloudsRed(void) { return m_nCurrentLowCloudsRed; }
+ static int32 GetLowCloudsGreen(void) { return m_nCurrentLowCloudsGreen; }
+ static int32 GetLowCloudsBlue(void) { return m_nCurrentLowCloudsBlue; }
+ static int32 GetFluffyCloudsTopRed(void) { return m_nCurrentFluffyCloudsTopRed; }
+ static int32 GetFluffyCloudsTopGreen(void) { return m_nCurrentFluffyCloudsTopGreen; }
+ static int32 GetFluffyCloudsTopBlue(void) { return m_nCurrentFluffyCloudsTopBlue; }
+ static int32 GetFluffyCloudsBottomRed(void) { return m_nCurrentFluffyCloudsBottomRed; }
+ static int32 GetFluffyCloudsBottomGreen(void) { return m_nCurrentFluffyCloudsBottomGreen; }
+ static int32 GetFluffyCloudsBottomBlue(void) { return m_nCurrentFluffyCloudsBottomBlue; }
+ static int32 GetFogRed(void) { return m_nCurrentFogColourRed; }
+ static int32 GetFogGreen(void) { return m_nCurrentFogColourGreen; }
+ static int32 GetFogBlue(void) { return m_nCurrentFogColourBlue; }
+ static int32 GetFogReduction(void) { return m_FogReduction; }
- static int GetBlurRed(void) { return m_fCurrentBlurRed; }
- static int GetBlurGreen(void) { return m_fCurrentBlurGreen; }
- static int GetBlurBlue(void) { return m_fCurrentBlurBlue; }
- static int GetWaterRed(void) { return m_fCurrentWaterRed; }
- static int GetWaterGreen(void) { return m_fCurrentWaterGreen; }
- static int GetWaterBlue(void) { return m_fCurrentWaterBlue; }
- static int GetWaterAlpha(void) { return m_fCurrentWaterAlpha; }
+ static int32 GetBlurRed(void) { return m_fCurrentBlurRed; }
+ static int32 GetBlurGreen(void) { return m_fCurrentBlurGreen; }
+ static int32 GetBlurBlue(void) { return m_fCurrentBlurBlue; }
+ static int32 GetWaterRed(void) { return m_fCurrentWaterRed; }
+ static int32 GetWaterGreen(void) { return m_fCurrentWaterGreen; }
+ static int32 GetWaterBlue(void) { return m_fCurrentWaterBlue; }
+ static int32 GetWaterAlpha(void) { return m_fCurrentWaterAlpha; }
static void Initialise(void);
static void Update(void);
+ static float Interpolate(int8 *a, int8 *b);
+ static float Interpolate(uint8 *a, uint8 *b);
+ static float Interpolate(int16 *a, int16 *b);
+ static void StartExtraColour(int32 c, bool fade);
+ static void StopExtraColour(bool fade);
static CVector &GetSunDirection(void) { return m_VectorToSun[m_CurrentStoredValue]; }
static float GetShadowFrontX(void) { return m_fShadowFrontX[m_CurrentStoredValue]; }
static float GetShadowFrontY(void) { return m_fShadowFrontY[m_CurrentStoredValue]; }
diff --git a/src/render/Weather.cpp b/src/render/Weather.cpp
index 945e1f5e..3f242362 100644
--- a/src/render/Weather.cpp
+++ b/src/render/Weather.cpp
@@ -19,6 +19,9 @@
#include "World.h"
#include "ZoneCull.h"
#include "SpecialFX.h"
+#include "Replay.h"
+
+//--MIAMI: file done
int32 CWeather::SoundHandle = -1;
@@ -33,6 +36,7 @@ uint32 CWeather::LightningStart;
uint32 CWeather::LightningFlashLastChange;
uint32 CWeather::WhenToPlayLightningSound;
uint32 CWeather::LightningDuration;
+int32 CWeather::StreamAfterRainTimer;
float CWeather::ExtraSunnyness;
float CWeather::Foggyness;
@@ -88,7 +92,7 @@ const int16 WeatherTypesList_WithHurricanes[] = {
WEATHER_EXTRA_SUNNY, WEATHER_EXTRA_SUNNY, WEATHER_EXTRA_SUNNY, WEATHER_EXTRA_SUNNY
};
-const float Windiness[] = {
+const float Windyness[] = {
0.25f,// WEATHER_SUNNY
0.7f, // WEATHER_CLOUDY
1.0f, // WEATHER_RAINY
@@ -140,22 +144,27 @@ void CWeather::Init(void)
void CWeather::Update(void)
{
- float fNewInterpolation = CClock::GetMinutes() * 1.0f / 60;
- if (fNewInterpolation < InterpolationValue) {
- // new hour
- OldWeatherType = NewWeatherType;
- if (ForcedWeatherType >= 0)
- NewWeatherType = ForcedWeatherType;
- else {
- WeatherTypeInList = (WeatherTypeInList + 1) % ARRAY_SIZE(WeatherTypesList);
- NewWeatherType = CStats::NoMoreHurricanes ? WeatherTypesList[WeatherTypeInList] : WeatherTypesList_WithHurricanes[WeatherTypeInList];
+ if(!CReplay::IsPlayingBack()){
+ float fNewInterpolation = (CClock::GetMinutes() + CClock::GetSeconds()/60.0f)/60.0f;
+ if (fNewInterpolation < InterpolationValue) {
+ // new hour
+ OldWeatherType = NewWeatherType;
+ if (ForcedWeatherType >= 0)
+ NewWeatherType = ForcedWeatherType;
+ else {
+ WeatherTypeInList = (WeatherTypeInList + 1) % ARRAY_SIZE(WeatherTypesList);
+ NewWeatherType = CStats::NoMoreHurricanes ? WeatherTypesList[WeatherTypeInList] : WeatherTypesList_WithHurricanes[WeatherTypeInList];
+ }
}
+ InterpolationValue = fNewInterpolation;
}
- InterpolationValue = fNewInterpolation;
+
+#ifndef FINAL
if (CPad::GetPad(1)->GetRightShockJustDown()) {
NewWeatherType = (NewWeatherType + 1) % WEATHER_TOTAL;
OldWeatherType = NewWeatherType;
}
+#endif
// Lightning
if (NewWeatherType != WEATHER_RAINY || OldWeatherType != WEATHER_RAINY) {
@@ -227,6 +236,7 @@ void CWeather::Update(void)
// if rain is ongoing for >24 minutes, values: 0.25, 0.5, 0.75, 1.0, switching every ~16.5s
fNewRain = 0.25f + ((uint16)CTimer::GetTimeInMilliseconds() >> 14) * 0.25f;
}
+ fNewRain = Max(fNewRain, 0.5f);
}
else
fNewRain = 0.0f;
@@ -257,7 +267,7 @@ void CWeather::Update(void)
ExtraSunnyness += InterpolationValue;
// Rainbow
- if (OldWeatherType == WEATHER_RAINY && (NewWeatherType == WEATHER_SUNNY || NewWeatherType == WEATHER_EXTRA_SUNNY) &&
+ if (OldWeatherType == WEATHER_CLOUDY && (NewWeatherType == WEATHER_SUNNY || NewWeatherType == WEATHER_EXTRA_SUNNY) &&
InterpolationValue < 0.5f && CClock::GetHours() > 6 && CClock::GetHours() < 21)
Rainbow = 1.0f - 4.0f * Abs(InterpolationValue - 0.25f) / 4.0f;
else
@@ -278,18 +288,21 @@ void CWeather::Update(void)
SunGlare *= (1.0f - (CGeneral::GetRandomNumber()&0x1F)*0.007f);
}
- Wind = InterpolationValue * Windiness[NewWeatherType] + (1.0f - InterpolationValue) * Windiness[OldWeatherType];
+ Wind = InterpolationValue * Windyness[NewWeatherType] + (1.0f - InterpolationValue) * Windyness[OldWeatherType];
WindClipped = Min(1.0f, Wind);
- if (CClock::GetHours() == 20)
+ if (CClock::GetHours() > 20)
+ TrafficLightBrightness = 1.0f;
+ else if (CClock::GetHours() > 19)
TrafficLightBrightness = CClock::GetMinutes() / 60.0f;
- else if (CClock::GetHours() > 6 && CClock::GetHours() < 20)
+ else if (CClock::GetHours() > 6)
TrafficLightBrightness = 0.0f;
- else if (CClock::GetHours() == 6)
+ else if (CClock::GetHours() > 5)
TrafficLightBrightness = 1.0f - CClock::GetMinutes() / 60.0f;
else
TrafficLightBrightness = 1.0f;
TrafficLightBrightness = Max(WetRoads, TrafficLightBrightness);
+ TrafficLightBrightness = Max(Foggyness, TrafficLightBrightness);
TrafficLightBrightness = Max(Rain, TrafficLightBrightness);
AddRain();
@@ -312,12 +325,32 @@ void CWeather::Update(void)
void CWeather::AddHeatHaze()
{
- /* TODO(MIAMI) */
+ if(TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOPDOWN ||
+ TheCamera.Cams[TheCamera.ActiveCam].Mode == CCam::MODE_TOP_DOWN_PED)
+ return;
+ CVector pos;
+ pos.x = SCREEN_WIDTH*0.5f;
+ if(TheCamera.GetLookingForwardFirstPerson())
+ pos.y = CGeneral::GetRandomNumberInRange(SCREEN_HEIGHT*0.25f, SCREEN_HEIGHT*0.9f);
+ else
+ pos.y = CGeneral::GetRandomNumberInRange(SCREEN_HEIGHT*0.4f, SCREEN_HEIGHT*0.9f);
+ pos.z = 100.0f;
+ CParticle::AddParticle(PARTICLE_HEATHAZE_IN_DIST, pos, CVector(0.0f, 0.0f, 0.0f));
}
void CWeather::AddBeastie()
{
- /* TODO(MIAMI) */
+ if(FindPlayerVehicle() || CTimer::GetFrameCounter()%10 || (CGeneral::GetRandomNumber()&5) == 0)
+ return;
+ CVector pos = TheCamera.GetPosition();
+ float dist = CGeneral::GetRandomNumberInRange(90.0f, 60.0f);
+ int angle = CGeneral::GetRandomNumber() % CParticle::SIN_COS_TABLE_SIZE;
+ float c = CParticle::m_CosTable[angle];
+ float s = CParticle::m_SinTable[angle];
+ pos.x += dist*(c - s);
+ pos.y += dist*(c + s);
+ pos.z += CGeneral::GetRandomNumberInRange(7.5f, 30.0f);
+ CParticle::AddParticle(PARTICLE_BEASTIE, pos, CVector(0.0f, 0.0f, 0.0f));
}
void CWeather::ForceWeather(int16 weather)
@@ -337,6 +370,62 @@ void CWeather::ReleaseWeather()
ForcedWeatherType = -1;
}
+void CWeather::AddSplashesDuringHurricane()
+{
+ RwRGBA colour = { 255, 255, 255, 32 };
+ CVector pos = TheCamera.pTargetEntity ? TheCamera.pTargetEntity->GetPosition() : TheCamera.GetPosition();
+ bool foundGround;
+ float groundZ = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &foundGround) + 0.1f;
+ if(!foundGround)
+ groundZ = pos.z + 0.5f;
+ for(int i = 0; i < 20; i++){
+ float dist = (CGeneral::GetRandomNumber()&0xFF)/255.0f +
+ CGeneral::GetRandomNumberInRange(-10.0f, 30.0f);
+ float angle;
+ uint8 rnd = CGeneral::GetRandomNumber();
+ if(rnd&1)
+ angle = (CGeneral::GetRandomNumber()&0x7F)/128.0f * TWOPI;
+ else
+ angle = TheCamera.Orientation + (rnd-128)/160.0f;
+ pos.x = TheCamera.GetPosition().x + dist*Sin(angle);
+ pos.y = TheCamera.GetPosition().y + dist*Cos(angle);
+ pos.z = groundZ;
+ if(foundGround)
+ CParticle::AddParticle(PARTICLE_GROUND_STEAM, pos, CVector(-0.002f, -0.002f, 0.015f), nil, 0.0f, colour);
+ }
+}
+
+static int startStreamAfterRain;
+
+void CWeather::AddStreamAfterRain()
+{
+ if(CClock::GetHours() > 6 && CClock::GetHours() < 18){
+ RwRGBA colour = { 255, 255, 255, 24 };
+ CVector pos = TheCamera.pTargetEntity ? TheCamera.pTargetEntity->GetPosition() : TheCamera.GetPosition();
+ bool foundGround;
+ float groundZ = CWorld::FindGroundZFor3DCoord(pos.x, pos.y, pos.z, &foundGround) + 0.2f;
+ if(!foundGround)
+ groundZ = pos.z + 0.75f;
+ for(int i = 0; i < 20; i++){
+ float dist = (CGeneral::GetRandomNumber()&0xFF)/255.0f +
+ CGeneral::GetRandomNumberInRange(-10.0f, 30.0f);
+ float angle;
+ uint8 rnd = CGeneral::GetRandomNumber();
+ if(rnd&1)
+ angle = (CGeneral::GetRandomNumber()&0x7F)/128.0f * TWOPI;
+ else
+ angle = TheCamera.Orientation + (rnd-128)/160.0f;
+ pos.x = TheCamera.GetPosition().x + dist*Sin(angle);
+ pos.y = TheCamera.GetPosition().y + dist*Cos(angle);
+ pos.z = groundZ;
+ CParticle::AddParticle(PARTICLE_GROUND_STEAM, pos, CVector(0.0f, 0.0f, 0.015f), nil, 0.0f, colour);
+ }
+ }else{
+ startStreamAfterRain = 0;
+ StreamAfterRainTimer = 800;
+ }
+}
+
void CWeather::AddRain()
{
if (CCullZones::CamNoRain() || CCullZones::PlayerNoRain())
@@ -348,104 +437,77 @@ void CWeather::AddRain()
return;
}
}
+
+ if(Rain > 0.0){
+ startStreamAfterRain = 1;
+ StreamAfterRainTimer = 800;
+ }else if(startStreamAfterRain){
+ if(StreamAfterRainTimer > 0){
+ AddStreamAfterRain();
+ StreamAfterRainTimer--;
+ }else{
+ startStreamAfterRain = 0;
+ StreamAfterRainTimer = 800;
+ }
+ }
+
+ if (Wind > 1.1f)
+ AddSplashesDuringHurricane();
+
if (Rain <= 0.1f)
return;
static RwRGBA colour;
- float screen_width = RsGlobal.width;
- float screen_height = RsGlobal.height;
- int cur_frame = (int)(3 * Rain) & 3;
- int num_drops = (int)(2 * Rain) + 2;
- static int STATIC_RAIN_ANGLE = -45;
- static int count = 1500;
- static int add_angle = 1;
- if (--count == 0) {
- count = 1;
- if (add_angle) {
- STATIC_RAIN_ANGLE += 12;
- if (STATIC_RAIN_ANGLE > 45) {
- count = 1500;
- add_angle = !add_angle;
- }
- }
- else {
- STATIC_RAIN_ANGLE -= 12;
- if (STATIC_RAIN_ANGLE < -45) {
- count = 1500;
- add_angle = !add_angle;
- }
- }
- }
- float rain_angle = DEGTORAD(STATIC_RAIN_ANGLE + ((STATIC_RAIN_ANGLE < 0) ? 360 : 0));
- float sin_angle = Sin(rain_angle);
- float cos_angle = Cos(rain_angle);
- float base_x = 0.0f * cos_angle - 1.0f * sin_angle;
- float base_y = 1.0f * cos_angle + 0.0f * sin_angle;
- CVector xpos(0.0f, 0.0f, 0.0f);
- for (int i = 0; i < 2 * num_drops; i++) {
- CVector dir;
- dir.x = (CGeneral::GetRandomNumberInRange(-0.5f, 0.5f) + base_x) * CGeneral::GetRandomNumberInRange(10.0f, 25.0f);
- dir.y = (CGeneral::GetRandomNumberInRange(-0.5f, 0.5f) + base_y) * CGeneral::GetRandomNumberInRange(10.0f, 25.0f);
- dir.z = 0;
- CParticle::AddParticle(PARTICLE_RAINDROP_2D, xpos, dir, nil, CGeneral::GetRandomNumberInRange(0.5f, 0.9f),
- colour, 0, rain_angle + CGeneral::GetRandomNumberInRange(-10, 10), cur_frame);
- xpos.x += screen_width / (2 * num_drops);
- xpos.x += CGeneral::GetRandomNumberInRange(-25.0f, 25.0f);
- }
- CVector ypos(0.0f, 0.0f, 0.0f);
- for (int i = 0; i < num_drops; i++) {
- CVector dir;
- dir.x = (CGeneral::GetRandomNumberInRange(-0.5f, 0.5f) + base_x) * CGeneral::GetRandomNumberInRange(10.0f, 25.0f);
- dir.y = (CGeneral::GetRandomNumberInRange(-0.5f, 0.5f) + base_y) * CGeneral::GetRandomNumberInRange(10.0f, 25.0f);
- dir.z = 0;
- CParticle::AddParticle(PARTICLE_RAINDROP_2D, ypos, dir, nil, CGeneral::GetRandomNumberInRange(0.5f, 0.9f),
- colour, 0, rain_angle + CGeneral::GetRandomNumberInRange(-10, 10), cur_frame);
- ypos.y += screen_width / num_drops;
- ypos.y += CGeneral::GetRandomNumberInRange(-25.0f, 25.0f);
- }
- CVector ypos2(0.0f, 0.0f, 0.0f);
- for (int i = 0; i < num_drops; i++) {
- CVector dir;
- dir.x = (CGeneral::GetRandomNumberInRange(-0.5f, 0.5f) + base_x) * CGeneral::GetRandomNumberInRange(10.0f, 25.0f);
- dir.y = (CGeneral::GetRandomNumberInRange(-0.5f, 0.5f) + base_y) * CGeneral::GetRandomNumberInRange(10.0f, 25.0f);
- dir.z = 0;
- CParticle::AddParticle(PARTICLE_RAINDROP_2D, ypos2, dir, nil, CGeneral::GetRandomNumberInRange(0.5f, 0.9f),
- colour, 0, rain_angle + CGeneral::GetRandomNumberInRange(-10, 10), cur_frame);
- ypos2.y += screen_width / num_drops;
- ypos2.y += CGeneral::GetRandomNumberInRange(-25.0f, 25.0f);
- }
- for (int i = 0; i < num_drops; i++) {
- CVector pos;
- pos.x = CGeneral::GetRandomNumberInRange(DROPLETS_LEFT_OFFSET, screen_width - DROPLETS_RIGHT_OFFSET);
- pos.y = CGeneral::GetRandomNumberInRange(DROPLETS_TOP_OFFSET, screen_height - DROPLETS_TOP_OFFSET);
+ int numDrops = 5.0f * Rain;
+ int numSplashes = 2.0f * Rain;
+ CVector pos, dir;
+ for(int i = 0; i < numDrops; i++){
+ pos.x = CGeneral::GetRandomNumberInRange(0, (int)SCREEN_WIDTH);
+ pos.y = CGeneral::GetRandomNumberInRange(0, (int)SCREEN_HEIGHT/5);
+ pos.z = 0.0f;
+ dir.x = 0.0f;
+ dir.y = CGeneral::GetRandomNumberInRange(30.0f, 40.0f);
+ dir.z = 0.0f;
+ CParticle::AddParticle(PARTICLE_RAINDROP_2D, pos, dir, nil, CGeneral::GetRandomNumberInRange(0.1f, 0.75f), 0, 0, (int)Rain&3, 0);
+
+ pos.x = CGeneral::GetRandomNumberInRange(0, (int)SCREEN_WIDTH);
+ pos.y = CGeneral::GetRandomNumberInRange((int)SCREEN_HEIGHT/5, (int)SCREEN_HEIGHT/2);
+ pos.z = 0.0f;
+ dir.x = 0.0f;
+ dir.y = CGeneral::GetRandomNumberInRange(30.0f, 40.0f);
+ dir.z = 0.0f;
+ CParticle::AddParticle(PARTICLE_RAINDROP_2D, pos, dir, nil, CGeneral::GetRandomNumberInRange(0.1f, 0.75f), 0, 0, (int)Rain&3, 0);
+
+ pos.x = CGeneral::GetRandomNumberInRange(0, (int)SCREEN_WIDTH);
+ pos.y = 0.0f;
+ pos.z = 0.0f;
+ dir.x = 0.0f;
+ dir.y = CGeneral::GetRandomNumberInRange(30.0f, 40.0f);
+ dir.z = 0.0f;
+ CParticle::AddParticle(PARTICLE_RAINDROP_2D, pos, dir, nil, CGeneral::GetRandomNumberInRange(0.1f, 0.75f), 0, 0, (int)Rain&3, 0);
+
+ float dist = CGeneral::GetRandomNumberInRange(0.0f, Max(10.0f*Rain, 40.0f)/2.0f);
+ float angle;
+ uint8 rnd = CGeneral::GetRandomNumber();
+ if(rnd&1)
+ angle = (CGeneral::GetRandomNumber()&0x7F)/128.0f * TWOPI;
+ else
+ angle = TheCamera.Orientation + (rnd-128)/160.0f;
+ pos.x = TheCamera.GetPosition().x + dist*Sin(angle);
+ pos.y = TheCamera.GetPosition().y + dist*Cos(angle);
pos.z = 0.0f;
- CParticle::AddParticle(PARTICLE_RAINDROP_2D, pos, CVector(0.0f, 0.0f, 0.0f), nil, CGeneral::GetRandomNumberInRange(0.5f, 0.9f),
- colour, CGeneral::GetRandomNumberInRange(-10, 10), 360 - rain_angle + CGeneral::GetRandomNumberInRange(-30, 30), cur_frame, 0);
- }
- int num_splash_attempts = (int)(3 * Rain) + 1;
- int num_splashes = (int)(3 * Rain) + 4;
- CVector splash_points[4];
- splash_points[0] = CVector(-RwCameraGetViewWindow(TheCamera.m_pRwCamera)->x, RwCameraGetViewWindow(TheCamera.m_pRwCamera)->y, 1.0f) *
- RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) / (RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) * *(CVector2D*)RwCameraGetViewWindow(TheCamera.m_pRwCamera)).Magnitude();
- splash_points[1] = CVector(RwCameraGetViewWindow(TheCamera.m_pRwCamera)->x, RwCameraGetViewWindow(TheCamera.m_pRwCamera)->y, 1.0f) *
- RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) / (RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) * *(CVector2D*)RwCameraGetViewWindow(TheCamera.m_pRwCamera)).Magnitude();
- splash_points[2] = 4.0f * CVector(-RwCameraGetViewWindow(TheCamera.m_pRwCamera)->x, RwCameraGetViewWindow(TheCamera.m_pRwCamera)->y, 1.0f) *
- RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) / (RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) * *(CVector2D*)RwCameraGetViewWindow(TheCamera.m_pRwCamera)).Magnitude();
- splash_points[3] = 4.0f * CVector(RwCameraGetViewWindow(TheCamera.m_pRwCamera)->x, RwCameraGetViewWindow(TheCamera.m_pRwCamera)->y, 1.0f) *
- RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) / (RwCameraGetFarClipPlane(TheCamera.m_pRwCamera) * *(CVector2D*)RwCameraGetViewWindow(TheCamera.m_pRwCamera)).Magnitude();
- RwV3dTransformPoints((RwV3d*)splash_points, (RwV3d*)splash_points, 4, RwFrameGetMatrix(RwCameraGetFrame(TheCamera.m_pRwCamera)));
- CVector fp = (splash_points[0] + splash_points[1] + splash_points[2] + splash_points[3]) / 4;
- for (int i = 0; i < num_splash_attempts; i++) {
CColPoint point;
- CEntity* entity;
- CVector np = fp + CVector(CGeneral::GetRandomNumberInRange(-SPLASH_CHECK_RADIUS, SPLASH_CHECK_RADIUS), CGeneral::GetRandomNumberInRange(-SPLASH_CHECK_RADIUS, SPLASH_CHECK_RADIUS), 0.0f);
- if (CWorld::ProcessVerticalLine(np + CVector(0.0f, 0.0f, 40.0f), -40.0f, point, entity, true, false, false, false, true, false, nil)) {
- for (int j = 0; j < num_splashes; j++)
- CParticle::AddParticle((CGeneral::GetRandomTrueFalse() ? PARTICLE_RAIN_SPLASH : PARTICLE_RAIN_SPLASHUP),
- CVector(
- np.x + CGeneral::GetRandomNumberInRange(-SPLASH_OFFSET_RADIUS, SPLASH_OFFSET_RADIUS),
- np.y + CGeneral::GetRandomNumberInRange(-SPLASH_OFFSET_RADIUS, SPLASH_OFFSET_RADIUS),
- point.point.z + 0.1f),
- CVector(0.0f, 0.0f, 0.0f), nil, 0.0f, colour);
+ CEntity *ent;
+ if(CWorld::ProcessVerticalLine(pos+CVector(0.0f, 0.0f, 40.0f), -40.0f, point, ent, true, false, false, false, true, false, nil)){
+ pos.z = point.point.z;
+ for(int j = 0; j < numSplashes+15; j++){
+ CVector pos2 = pos;
+ pos2.x += CGeneral::GetRandomNumberInRange(-15.0f, 15.0f);
+ pos2.y += CGeneral::GetRandomNumberInRange(-15.0f, 15.0f);
+ if(CGeneral::GetRandomNumber() & 1)
+ CParticle::AddParticle(PARTICLE_RAIN_SPLASH, pos2, CVector(0.0f, 0.0f, 0.0f), nil, 0.0f, colour);
+ else
+ CParticle::AddParticle(PARTICLE_RAIN_SPLASHUP, pos2, CVector(0.0f, 0.0f, 0.0f), nil, 0.0f, colour);
+ }
}
}
}
@@ -470,11 +532,11 @@ void RenderOneRainStreak(CVector pos, CVector unused, int intensity, bool scale,
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored + 0], 0, 0, 0, 0);
RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 0], pos.x + 11.0f * TheCamera.GetUp().x, pos.y + 11.0f * TheCamera.GetUp().y, pos.z + 11.0f * TheCamera.GetUp().z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored + 1], 0, 0, 0, 0);
- RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 1], pos.x - 9.0f * TheCamera.GetRight().x, pos.y - 9.0f * TheCamera.GetRight().y, pos.z - 9.0f * TheCamera.GetUp().z);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 1], pos.x - 9.0f * TheCamera.GetRight().x, pos.y - 9.0f * TheCamera.GetRight().y, pos.z - 9.0f * TheCamera.GetRight().z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored + 2], RAIN_COLOUR_R * intensity / 256, RAIN_COLOUR_G * intensity / 256, RAIN_COLOUR_B * intensity / 256, RAIN_ALPHA);
RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 2], pos.x, pos.y, pos.z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored + 3], 0, 0, 0, 0);
- RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 3], pos.x + 9.0f * TheCamera.GetRight().x, pos.y + 9.0f * TheCamera.GetRight().y, pos.z + 9.0f * TheCamera.GetUp().z);
+ RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 3], pos.x + 9.0f * TheCamera.GetRight().x, pos.y + 9.0f * TheCamera.GetRight().y, pos.z + 9.0f * TheCamera.GetRight().z);
RwIm3DVertexSetRGBA(&TempBufferRenderVertices[TempBufferVerticesStored + 4], 0, 0, 0, 0);
RwIm3DVertexSetPos(&TempBufferRenderVertices[TempBufferVerticesStored + 4], pos.x - 11.0f * TheCamera.GetUp().x, pos.y - 11.0f * TheCamera.GetUp().y, pos.z - 11.0f * TheCamera.GetUp().z);
float u = STREAK_U;
@@ -493,9 +555,9 @@ void RenderOneRainStreak(CVector pos, CVector unused, int intensity, bool scale,
u *= distance_coefficient;
v *= distance_coefficient;
if (!CTimer::GetIsPaused()) {
- RandomTex = ((CGeneral::GetRandomNumber() & 255) - 128) * 0.01f;
- RandomTexX = (CGeneral::GetRandomNumber() & 127) * 0.01f;
- RandomTexY = (CGeneral::GetRandomNumber() & 127) * 0.01f;
+ RandomTex = 0.0f;
+ RandomTexX = 0.0f;
+ RandomTexY = 0.0f;
}
RwIm3DVertexSetU(&TempBufferRenderVertices[TempBufferVerticesStored + 0], 0.5f * u - RandomTex + RandomTexX);
RwIm3DVertexSetV(&TempBufferRenderVertices[TempBufferVerticesStored + 0], -v * 0.5f + RandomTexY);
@@ -518,6 +580,8 @@ void CWeather::RenderRainStreaks(void)
int base_intensity = (64.0f - CTimeCycle::GetFogReduction()) / 64.0f * int(255 * Rain);
if (base_intensity == 0)
return;
+ if (TheCamera.m_CameraAverageSpeed > 1.75f)
+ return;
TempBufferIndicesStored = 0;
TempBufferVerticesStored = 0;
for (int i = 0; i < NUM_RAIN_STREAKS; i++) {
@@ -528,11 +592,11 @@ void CWeather::RenderRainStreaks(void)
else{
int intensity;
if (secondsElapsed < STREAK_INTEROLATION_TIME)
- intensity = base_intensity * 0.5f * secondsElapsed / STREAK_INTEROLATION_TIME;
+ intensity = base_intensity * 0.25f * secondsElapsed / STREAK_INTEROLATION_TIME;
else if (secondsElapsed > (STREAK_LIFETIME - STREAK_INTEROLATION_TIME))
- intensity = (STREAK_LIFETIME - secondsElapsed) * 0.5f * base_intensity / STREAK_INTEROLATION_TIME;
+ intensity = (STREAK_LIFETIME - secondsElapsed) * 0.25f * base_intensity / STREAK_INTEROLATION_TIME;
else
- intensity = base_intensity * 0.5f;
+ intensity = base_intensity * 0.25f;
CVector dir = Streaks[i].direction;
dir.Normalise();
CVector pos = Streaks[i].position + secondsElapsed * Streaks[i].direction;
@@ -546,7 +610,7 @@ void CWeather::RenderRainStreaks(void)
}
else if ((CGeneral::GetRandomNumber() & 0xF00) == 0){
// 1/16 probability
- Streaks[i].direction = CVector(4.0f, 4.0f, -4.0f);
+ Streaks[i].direction = CVector(0.0f, 0.0f, -12.0f);
Streaks[i].position = 6.0f * TheCamera.GetForward() + TheCamera.GetPosition() + CVector(-1.8f * Streaks[i].direction.x, -1.8f * Streaks[i].direction.y, 8.0f);
if (!CCutsceneMgr::IsRunning()) {
Streaks[i].position.x += 2.0f * FindPlayerSpeed().x * 60.0f;
@@ -554,8 +618,8 @@ void CWeather::RenderRainStreaks(void)
}
else
Streaks[i].position += (TheCamera.GetPosition() - TheCamera.m_RealPreviousCameraPosition) * 20.0f;
- Streaks[i].position.x += ((CGeneral::GetRandomNumber() & 255) - 128) * 0.08f;
- Streaks[i].position.y += ((CGeneral::GetRandomNumber() & 255) - 128) * 0.08f;
+ Streaks[i].position.x += ((CGeneral::GetRandomNumber() & 255) - 128) * 0.04f;
+ Streaks[i].position.y += ((CGeneral::GetRandomNumber() & 255) - 128) * 0.04f;
Streaks[i].timer = CTimer::GetTimeInMilliseconds();
}
}
diff --git a/src/render/Weather.h b/src/render/Weather.h
index ae09e5d1..ef62ebb6 100644
--- a/src/render/Weather.h
+++ b/src/render/Weather.h
@@ -6,7 +6,9 @@ enum {
WEATHER_FOGGY,
WEATHER_EXTRA_SUNNY,
WEATHER_HURRICANE,
- WEATHER_TOTAL
+ WEATHER_TOTAL,
+
+ WEATHER_EXTRACOLOURS = 6
};
class CWeather
@@ -25,6 +27,7 @@ public:
static uint32 LightningFlashLastChange;
static uint32 WhenToPlayLightningSound;
static uint32 LightningDuration;
+ static int32 StreamAfterRainTimer;
static float ExtraSunnyness;
static float Foggyness;
@@ -47,6 +50,8 @@ public:
static void ReleaseWeather();
static void ForceWeather(int16);
static void ForceWeatherNow(int16);
+ static void AddSplashesDuringHurricane();
+ static void AddStreamAfterRain();
static void AddRain();
static void AddHeatHaze();
static void AddBeastie();
diff --git a/src/render/WindModifiers.cpp b/src/render/WindModifiers.cpp
index 49e7c96a..2061df6a 100644
--- a/src/render/WindModifiers.cpp
+++ b/src/render/WindModifiers.cpp
@@ -1,13 +1,51 @@
#include "common.h"
#include "WindModifiers.h"
+#include "Camera.h"
+#include "General.h"
+
+#define MAX_HEIGHT_DIST 40.0f
+#define MIN_FADE_DIST 20.0f
+#define MAX_FADE_DIST 50.0f
+
+CWindModifiers Array[16];
+int32 CWindModifiers::Number;
void
-CWindModifiers::RegisterOne(CVector pos, int32 unk)
+CWindModifiers::RegisterOne(CVector pos, int32 type = 1)
{
+ if (CWindModifiers::Number < 16 && (pos - TheCamera.GetPosition()).Magnitude() < 100.0f) {
+ Array[Number].m_pos = pos;
+ Array[Number].m_type = type;
+ Number++;
+ }
}
-int32
+bool
CWindModifiers::FindWindModifier(CVector pos, float *x, float *y)
{
- return 0;
+ bool bWasWindModifierFound = false;
+ CVector2D dir;
+ for (int i = 0; i < Number; i++) {
+ if (Array[i].m_type == 1) {
+ float zDist = Abs(15.0f + pos.z - Array[i].m_pos.z);
+
+ if (zDist < MAX_HEIGHT_DIST) {
+ float dist = (pos - Array[i].m_pos).Magnitude();
+ if (dist < MAX_FADE_DIST) {
+ float distFade = dist < MIN_FADE_DIST ? 1.0f : 1.0f - (dist - MIN_FADE_DIST) / (MAX_FADE_DIST - MIN_FADE_DIST);
+ float heightFade = 1.0f - zDist / MAX_HEIGHT_DIST;
+ dir = (pos - Array[i].m_pos) * heightFade / dist;
+ bWasWindModifierFound = true;
+ }
+ }
+ }
+ }
+
+ if (bWasWindModifierFound) {
+ float directionMult = ((CGeneral::GetRandomNumber() & 0x1F) - 16) * 0.0035f + 1.0f;
+ *x += dir.x * directionMult;
+ *y += dir.y * directionMult;
+ }
+
+ return bWasWindModifierFound;
}
diff --git a/src/render/WindModifiers.h b/src/render/WindModifiers.h
index c42e185d..7c2e57bd 100644
--- a/src/render/WindModifiers.h
+++ b/src/render/WindModifiers.h
@@ -2,7 +2,10 @@
class CWindModifiers
{
+ CVector m_pos;
+ int32 m_type;
public:
- static void RegisterOne(CVector pos, int32 unk);
- static int32 FindWindModifier(CVector pos, float *x, float *y);
+ static int32 Number;
+ static void RegisterOne(CVector pos, int32 windSourceType);
+ static bool FindWindModifier(CVector pos, float *x, float *y);
};
diff --git a/src/rw/ClumpRead.cpp b/src/rw/ClumpRead.cpp
index 5f50f52d..b8d72d23 100644
--- a/src/rw/ClumpRead.cpp
+++ b/src/rw/ClumpRead.cpp
@@ -1,5 +1,6 @@
#include "common.h"
+//--MIAMI: done
struct rpGeometryList
{
diff --git a/src/rw/Lights.cpp b/src/rw/Lights.cpp
index cd45b81f..3657e2c7 100644
--- a/src/rw/Lights.cpp
+++ b/src/rw/Lights.cpp
@@ -10,6 +10,8 @@
#include "Frontend.h"
#include "MBlur.h"
+//--MIAMI: done
+
RpLight *pAmbient;
RpLight *pDirect;
RpLight *pExtraDirectionals[4] = { nil };
@@ -23,7 +25,13 @@ RwRGBAReal DirectionalLightColourForFrame;
RwRGBAReal AmbientLightColour;
RwRGBAReal DirectionalLightColour;
-//--MIAMI: done
+#ifdef EXTENDED_COLOURFILTER
+#include "postfx.h"
+#define USEBLURCOLORS CPostFX::UseBlurColours()
+#else
+#define USEBLURCOLORS CMBlur::BlurOn
+#endif
+
void
SetLightsWithTimeOfDayColour(RpWorld *)
{
@@ -31,7 +39,7 @@ SetLightsWithTimeOfDayColour(RpWorld *)
RwMatrix mat;
if(pAmbient){
- if(CMBlur::BlurOn){
+ if(USEBLURCOLORS){
AmbientLightColourForFrame.red = CTimeCycle::GetAmbientRed_Bl() * CCoronas::LightsMult;
AmbientLightColourForFrame.green = CTimeCycle::GetAmbientGreen_Bl() * CCoronas::LightsMult;
AmbientLightColourForFrame.blue = CTimeCycle::GetAmbientBlue_Bl() * CCoronas::LightsMult;
@@ -41,7 +49,7 @@ SetLightsWithTimeOfDayColour(RpWorld *)
AmbientLightColourForFrame.blue = CTimeCycle::GetAmbientBlue() * CCoronas::LightsMult;
}
- if(CMBlur::BlurOn){
+ if(USEBLURCOLORS){
AmbientLightColourForFrame_PedsCarsAndObjects.red = CTimeCycle::GetAmbientRed_Obj_Bl() * CCoronas::LightsMult;
AmbientLightColourForFrame_PedsCarsAndObjects.green = CTimeCycle::GetAmbientGreen_Obj_Bl() * CCoronas::LightsMult;
AmbientLightColourForFrame_PedsCarsAndObjects.blue = CTimeCycle::GetAmbientBlue_Obj_Bl() * CCoronas::LightsMult;
@@ -302,6 +310,14 @@ ActivateDirectional(void)
RpLightSetFlags(pDirect, rpLIGHTLIGHTATOMICS);
}
+RwRGBAReal FullLight = { 1.0f, 1.0f, 1.0f, 1.0f };
+
+void
+SetFullAmbient(void)
+{
+ RpLightSetColor(pAmbient, &FullLight);
+}
+
void
SetAmbientColours(void)
{
diff --git a/src/rw/Lights.h b/src/rw/Lights.h
index 6fdd51de..b296816b 100644
--- a/src/rw/Lights.h
+++ b/src/rw/Lights.h
@@ -1,5 +1,11 @@
#pragma once
+extern RpLight *pAmbient;
+extern RpLight *pDirect;
+extern RpLight *pExtraDirectionals[4];
+extern int LightStrengths[4];
+extern int NumExtraDirLightsInWorld;
+
void SetLightsWithTimeOfDayColour(RpWorld *);
RpWorld *LightsCreate(RpWorld *world);
void LightsDestroy(RpWorld *world);
diff --git a/src/rw/NodeName.cpp b/src/rw/NodeName.cpp
index ad4acffb..a7185e4f 100644
--- a/src/rw/NodeName.cpp
+++ b/src/rw/NodeName.cpp
@@ -50,8 +50,8 @@ NodeNameStreamWrite(RwStream *stream, RwInt32 binaryLength, const void *object,
RwInt32
NodeNameStreamGetSize(const void *object, RwInt32 offsetInObject, RwInt32 sizeInObject)
{
- // game checks for null pointer on node name extension but that really happen
- return (RwInt32)rwstrlen(NODENAMEEXT(object));
+ char *name = NODENAMEEXT(object); // can't be nil
+ return name ? (RwInt32)rwstrlen(name) : 0;
}
bool
diff --git a/src/rw/RwHelper.cpp b/src/rw/RwHelper.cpp
index 58791ce2..9633e56c 100644
--- a/src/rw/RwHelper.cpp
+++ b/src/rw/RwHelper.cpp
@@ -209,24 +209,11 @@ GetFirstTexture(RwTexDictionary *txd)
return tex;
}
-#ifdef PED_SKIN
-static RpAtomic*
-isSkinnedCb(RpAtomic *atomic, void *data)
-{
- RpAtomic **pAtomic = (RpAtomic**)data;
- if(*pAtomic)
- return nil; // already found one
- if(RpSkinGeometryGetSkin(RpAtomicGetGeometry(atomic)))
- *pAtomic = atomic; // we could just return nil here directly...
- return atomic;
-}
-
-RpAtomic*
+bool
IsClumpSkinned(RpClump *clump)
{
- RpAtomic *atomic = nil;
- RpClumpForAllAtomics(clump, isSkinnedCb, &atomic);
- return atomic;
+ RpAtomic *atomic = GetFirstAtomic(clump);
+ return atomic ? RpSkinGeometryGetSkin(RpAtomicGetGeometry(atomic)) : nil;
}
static RpAtomic*
@@ -264,17 +251,6 @@ GetAnimHierarchyFromClump(RpClump *clump)
return hier;
}
-RwFrame*
-GetHierarchyFromChildNodesCB(RwFrame *frame, void *data)
-{
- RpHAnimHierarchy **pHier = (RpHAnimHierarchy**)data;
- RpHAnimHierarchy *hier = RpHAnimFrameGetHierarchy(frame);
- if(hier == nil)
- RwFrameForAllChildren(frame, GetHierarchyFromChildNodesCB, &hier);
- *pHier = hier;
- return nil;
-}
-
void
SkinGetBonePositionsToTable(RpClump *clump, RwV3d *boneTable)
{
@@ -290,8 +266,7 @@ SkinGetBonePositionsToTable(RpClump *clump, RwV3d *boneTable)
if(boneTable == nil)
return;
-// atomic = GetFirstAtomic(clump); // mobile, also VC
- atomic = IsClumpSkinned(clump); // xbox, seems safer
+ atomic = GetFirstAtomic(clump); // mobile, also VC
assert(atomic);
skin = RpSkinGeometryGetSkin(RpAtomicGetGeometry(atomic));
assert(skin);
@@ -397,7 +372,6 @@ RenderSkeleton(RpHAnimHierarchy *hier)
par = stack[--sp];
}
}
-#endif
RwBool Im2DRenderQuad(RwReal x1, RwReal y1, RwReal x2, RwReal y2, RwReal z, RwReal recipCamZ, RwReal uvOffset)
@@ -560,6 +534,7 @@ CameraSize(RwCamera * camera, RwRect * rect,
}
}
+ // BUG: game just changes camera raster's sizes, but this is a hack
if (( origSize.w != rect->w ) && ( origSize.h != rect->h ))
{
RwRaster *raster;
@@ -844,4 +819,4 @@ RestoreAlphaTest()
RwD3D8SetRenderState(D3DRS_ALPHAREF, saved_alpharef);
#endif
}
-#endif \ No newline at end of file
+#endif
diff --git a/src/rw/RwHelper.h b/src/rw/RwHelper.h
index 3f1a3d19..cbcbb2e0 100644
--- a/src/rw/RwHelper.h
+++ b/src/rw/RwHelper.h
@@ -18,16 +18,13 @@ RwObject *GetFirstObject(RwFrame *frame);
RpAtomic *GetFirstAtomic(RpClump *clump);
RwTexture *GetFirstTexture(RwTexDictionary *txd);
-#ifdef PED_SKIN
-RpAtomic *IsClumpSkinned(RpClump *clump);
+bool IsClumpSkinned(RpClump *clump);
RpHAnimHierarchy *GetAnimHierarchyFromSkinClump(RpClump *clump); // get from atomic
RpHAnimHierarchy *GetAnimHierarchyFromClump(RpClump *clump); // get from frame
-RwFrame *GetHierarchyFromChildNodesCB(RwFrame *frame, void *data);
void SkinGetBonePositionsToTable(RpClump *clump, RwV3d *boneTable);
RpHAnimAnimation *HAnimAnimationCreateForHierarchy(RpHAnimHierarchy *hier);
RpAtomic *AtomicRemoveAnimFromSkinCB(RpAtomic *atomic, void *data);
void RenderSkeleton(RpHAnimHierarchy *hier);
-#endif
RwBool Im2DRenderQuad(RwReal x1, RwReal y1, RwReal x2, RwReal y2, RwReal z, RwReal recipCamZ, RwReal uvOffset);
RpClump *RpClumpGetBoundingSphere(RpClump *clump, RwSphere *sphere, bool useLTM);
@@ -38,6 +35,7 @@ RwTexDictionary *RwTexDictionaryGtaStreamRead2(RwStream *stream, RwTexDictionary
void ReadVideoCardCapsFile(uint32&, uint32&, uint32&, uint32&);
bool CheckVideoCardCaps(void);
void WriteVideoCardCapsFile(void);
+bool CanVideoCardDoDXT(void);
void ConvertingTexturesScreen(uint32, uint32, const char*);
void DealWithTxdWriteError(uint32, uint32, const char*);
bool CreateTxdImageForVideoCard();
diff --git a/src/rw/TexRead.cpp b/src/rw/TexRead.cpp
index 4087029b..ad7d8fec 100644
--- a/src/rw/TexRead.cpp
+++ b/src/rw/TexRead.cpp
@@ -1,7 +1,13 @@
#pragma warning( push )
#pragma warning( disable : 4005)
#pragma warning( pop )
+#ifndef LIBRW
+#define WITHD3D
+#endif
#include "common.h"
+#ifndef LIBRW
+#include "rpanisot.h"
+#endif
#include "crossplatform.h"
#include "platform.h"
@@ -47,6 +53,15 @@ RwTextureGtaStreamRead(RwStream *stream)
texLoadTime = (texNumLoaded * texLoadTime + (float)CTimer::GetCurrentTimeInCycles() / (float)CTimer::GetCyclesPerMillisecond() - preloadTime) / (float)(texNumLoaded+1);
texNumLoaded++;
}
+
+ if(tex == nil)
+ return nil;
+
+#ifndef LIBRW
+ if(RpAnisotTextureGetMaxAnisotropy(tex) > 1)
+ RpAnisotTextureSetMaxAnisotropy(tex, RpAnisotTextureGetMaxAnisotropy(tex));
+#endif
+
return tex;
}
@@ -152,6 +167,7 @@ RwTexDictionaryGtaStreamRead2(RwStream *stream, RwTexDictionary *texDict)
#ifdef GTA_PC
#ifdef RWLIBS
extern "C" RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags);
+extern "C" RwBool _rwD3D8CheckValidTextureFormat(RwInt32 format);
#else
RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags);
#endif
@@ -202,8 +218,20 @@ WriteVideoCardCapsFile(void)
}
}
-bool DoRWStuffStartOfFrame(int16 TopRed, int16 TopGreen, int16 TopBlue, int16 BottomRed, int16 BottomGreen, int16 BottomBlue, int16 Alpha);
-void DoRWStuffEndOfFrame(void);
+bool
+CanVideoCardDoDXT(void)
+{
+#ifdef LIBRW
+ // TODO
+#ifdef RW_OPENGL
+ return false;
+#else
+ return true;
+#endif
+#else
+ return _rwD3D8CheckValidTextureFormat(D3DFMT_DXT1) && _rwD3D8CheckValidTextureFormat(D3DFMT_DXT3);
+#endif
+}
void
ConvertingTexturesScreen(uint32 num, uint32 count, const char *text)
@@ -229,6 +257,7 @@ ConvertingTexturesScreen(uint32 num, uint32 count, const char *text)
CFont::SetBackgroundOff();
CFont::SetPropOn();
CFont::SetScale(SCREEN_SCALE_X(0.45f), SCREEN_SCALE_Y(0.7f));
+ CFont::SetCentreOff();
CFont::SetWrapx(SCREEN_SCALE_FROM_RIGHT(170.0f));
CFont::SetJustifyOff();
CFont::SetColor(CRGBA(255, 217, 106, 255));
@@ -289,6 +318,11 @@ CreateTxdImageForVideoCard()
ConvertingTexturesScreen(i, TXDSTORESIZE, "CVT_MSG");
if (CTxdStore::GetSlot(i) != nil && CStreaming::IsObjectInCdImage(i + STREAM_OFFSET_TXD)) {
+#ifdef FIX_BUGS
+ if(strcmp(CTxdStore::GetTxdName(i), "generic") == 0)
+ continue;
+#endif
+
CStreaming::RequestTxd(i, STREAMFLAGS_KEEP_IN_MEMORY);
CStreaming::RequestModelStream(0);
CStreaming::FlushChannels();
diff --git a/src/rw/TxdStore.cpp b/src/rw/TxdStore.cpp
index 51d018f6..0bd29718 100644
--- a/src/rw/TxdStore.cpp
+++ b/src/rw/TxdStore.cpp
@@ -13,7 +13,7 @@ void
CTxdStore::Initialise(void)
{
if(ms_pTxdPool == nil)
- ms_pTxdPool = new CPool<TxdDef,TxdDef>(TXDSTORESIZE);
+ ms_pTxdPool = new CPool<TxdDef,TxdDef>(TXDSTORESIZE, "TexDictionary");
}
void
@@ -58,11 +58,10 @@ CTxdStore::RemoveTxdSlot(int slot)
int
CTxdStore::FindTxdSlot(const char *name)
{
- char *defname;
int size = ms_pTxdPool->GetSize();
for(int i = 0; i < size; i++){
- defname = GetTxdName(i);
- if(defname && !CGeneral::faststricmp(defname, name))
+ TxdDef *def = GetSlot(i);
+ if(def && !CGeneral::faststricmp(def->name, name))
return i;
}
return -1;
@@ -71,8 +70,7 @@ CTxdStore::FindTxdSlot(const char *name)
char*
CTxdStore::GetTxdName(int slot)
{
- TxdDef *def = GetSlot(slot);
- return def ? def->name : nil;
+ return GetSlot(slot)->name;
}
void
@@ -91,9 +89,7 @@ CTxdStore::PopCurrentTxd(void)
void
CTxdStore::SetCurrentTxd(int slot)
{
- TxdDef *def = GetSlot(slot);
- if(def)
- RwTexDictionarySetCurrent(def->texDict);
+ RwTexDictionarySetCurrent(GetSlot(slot)->texDict);
}
void
@@ -118,7 +114,7 @@ void
CTxdStore::RemoveRef(int slot)
{
if(--GetSlot(slot)->refCount <= 0)
- CStreaming::RemoveModel(slot + STREAM_OFFSET_TXD);
+ CStreaming::RemoveTxd(slot);
}
void
diff --git a/src/rw/VisibilityPlugins.cpp b/src/rw/VisibilityPlugins.cpp
index ac80eff0..36a60117 100644
--- a/src/rw/VisibilityPlugins.cpp
+++ b/src/rw/VisibilityPlugins.cpp
@@ -9,6 +9,7 @@
#include "Camera.h"
#include "VisibilityPlugins.h"
#include "World.h"
+#include "custompipes.h"
//--MIAMI: file done
@@ -193,6 +194,10 @@ CVisibilityPlugins::RenderFadingEntities(CLinkList<AlphaObjectInfo> &list)
CEntity *e = node->item.entity;
if(e->m_rwObject == nil)
continue;
+#ifdef EXTENDED_PIPELINES
+ if(CustomPipes::bRenderingEnvMap && (e->IsPed() || e->IsVehicle()))
+ continue;
+#endif
mi = (CSimpleModelInfo *)CModelInfo::GetModelInfo(e->GetModelIndex());
if(mi->GetModelType() == MITYPE_SIMPLE && mi->m_noZwrite)
RwRenderStateSet(rwRENDERSTATEZWRITEENABLE, FALSE);
diff --git a/src/save/GenericGameStorage.cpp b/src/save/GenericGameStorage.cpp
index 52c1aef7..90e7e122 100644
--- a/src/save/GenericGameStorage.cpp
+++ b/src/save/GenericGameStorage.cpp
@@ -37,9 +37,11 @@
#include "Weather.h"
#include "World.h"
#include "Zones.h"
+#include "Timecycle.h"
+#include "Fluff.h"
#define BLOCK_COUNT 20
-#define SIZE_OF_SIMPLEVARS 0xBC
+#define SIZE_OF_SIMPLEVARS 0xD4
const uint32 SIZE_OF_ONE_GAME_IN_BYTES = 201729;
@@ -56,7 +58,7 @@ wchar SlotSaveDate[SLOT_COUNT][70];
int CheckSum;
eLevelName m_LevelToLoad;
char SaveFileNameJustSaved[260];
-int Slots[SLOT_COUNT+1];
+int Slots[SLOT_COUNT];
CDate CompileDateAndTime;
bool b_FoundRecentSavedGameWantToLoad;
@@ -187,6 +189,14 @@ GenericSave(int file)
WriteDataToBufferPointer(buf, TheCamera.CarZoomIndicator);
WriteDataToBufferPointer(buf, TheCamera.PedZoomIndicator);
#endif
+ WriteDataToBufferPointer(buf, CGame::currArea);
+ WriteDataToBufferPointer(buf, CVehicle::bAllTaxisHaveNitro);
+ // TODO(Miami): Pad invert Y
+ bool invertY = 0;
+ WriteDataToBufferPointer(buf, invertY);
+ WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColour);
+ WriteDataToBufferPointer(buf, CTimeCycle::m_bExtraColourOn);
+ WriteDataToBufferPointer(buf, CTimeCycle::m_ExtraColourInter);
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
// Save scripts, block is nested within the same block as simple vars for some reason
@@ -217,6 +227,7 @@ GenericSave(int file)
WriteSaveDataBlock(CTheCarGenerators::SaveAllCarGenerators);
WriteSaveDataBlock(CParticleObject::SaveParticle);
WriteSaveDataBlock(cAudioScriptObject::SaveAllAudioScriptObjects);
+ WriteSaveDataBlock(CScriptPaths::Save);
WriteSaveDataBlock(CWorld::Players[CWorld::PlayerInFocus].SavePlayerInfo);
WriteSaveDataBlock(CStats::SaveStats);
WriteSaveDataBlock(CSetPieces::Save);
@@ -315,6 +326,14 @@ GenericLoad()
ReadDataFromBufferPointer(buf, TheCamera.CarZoomIndicator);
ReadDataFromBufferPointer(buf, TheCamera.PedZoomIndicator);
#endif
+ ReadDataFromBufferPointer(buf, CGame::currArea);
+ ReadDataFromBufferPointer(buf, CVehicle::bAllTaxisHaveNitro);
+ // TODO(Miami): Pad invert Y
+ bool invertY = 0;
+ ReadDataFromBufferPointer(buf, invertY);
+ ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColour);
+ ReadDataFromBufferPointer(buf, CTimeCycle::m_bExtraColourOn);
+ ReadDataFromBufferPointer(buf, CTimeCycle::m_ExtraColourInter);
assert(buf - work_buff == SIZE_OF_SIMPLEVARS);
#ifdef MISSION_REPLAY
WaitForSave = 0;
@@ -360,6 +379,8 @@ GenericLoad()
LoadSaveDataBlock();
ReadDataFromBlock("Loading AudioScript Objects \n", cAudioScriptObject::LoadAllAudioScriptObjects);
LoadSaveDataBlock();
+ ReadDataFromBlock("Loading ScriptPaths \n", CScriptPaths::Load);
+ LoadSaveDataBlock();
ReadDataFromBlock("Loading Player Info \n", CWorld::Players[CWorld::PlayerInFocus].LoadPlayerInfo);
LoadSaveDataBlock();
ReadDataFromBlock("Loading Stats \n", CStats::LoadStats);
diff --git a/src/save/GenericGameStorage.h b/src/save/GenericGameStorage.h
index 069ba7cd..630b3b50 100644
--- a/src/save/GenericGameStorage.h
+++ b/src/save/GenericGameStorage.h
@@ -31,7 +31,7 @@ extern wchar SlotFileName[SLOT_COUNT][260];
extern wchar SlotSaveDate[SLOT_COUNT][70];
extern int CheckSum;
extern enum eLevelName m_LevelToLoad;
-extern int Slots[SLOT_COUNT+1];
+extern int Slots[SLOT_COUNT];
extern bool b_FoundRecentSavedGameWantToLoad;
extern bool JustLoadedDontFadeInYet;
diff --git a/src/save/PCSave.cpp b/src/save/PCSave.cpp
index da8134fc..8514a2b6 100644
--- a/src/save/PCSave.cpp
+++ b/src/save/PCSave.cpp
@@ -88,7 +88,7 @@ void
C_PcSave::PopulateSlotInfo()
{
for (int i = 0; i < SLOT_COUNT; i++) {
- Slots[i + 1] = SLOT_EMPTY;
+ Slots[i] = SLOT_EMPTY;
SlotFileName[i][0] = '\0';
SlotSaveDate[i][0] = '\0';
}
@@ -108,14 +108,14 @@ C_PcSave::PopulateSlotInfo()
if (file != 0) {
CFileMgr::Read(file, (char*)&header, sizeof(header));
if (strncmp((char*)&header, TopLineEmptyFile, sizeof(TopLineEmptyFile)-1) != 0) {
- Slots[i + 1] = SLOT_OK;
+ Slots[i] = SLOT_OK;
memcpy(SlotFileName[i], &header.FileName, sizeof(header.FileName));
SlotFileName[i][24] = '\0';
}
CFileMgr::CloseFile(file);
}
- if (Slots[i + 1] == SLOT_OK) {
+ if (Slots[i] == SLOT_OK) {
if (CheckDataNotCorrupt(i, savename)) {
SYSTEMTIME st;
memcpy(&st, &header.SaveDateTime, sizeof(SYSTEMTIME));
@@ -147,7 +147,7 @@ C_PcSave::PopulateSlotInfo()
} else {
CMessages::InsertNumberInString(TheText.Get("FEC_SLC"), i + 1, -1, -1, -1, -1, -1, SlotFileName[i]);
- Slots[i + 1] = SLOT_CORRUPTED;
+ Slots[i] = SLOT_CORRUPTED;
}
}
}
diff --git a/src/skel/glfw/glfw.cpp b/src/skel/glfw/glfw.cpp
index 9a4f2188..21b5c3c0 100644
--- a/src/skel/glfw/glfw.cpp
+++ b/src/skel/glfw/glfw.cpp
@@ -185,6 +185,22 @@ psCameraShowRaster(RwCamera *camera)
return;
}
+/*
+ *****************************************************************************
+ */
+RwImage *
+psGrabScreen(RwCamera *pCamera)
+{
+#ifndef LIBRW
+ RwRaster *pRaster = RwCameraGetRaster(pCamera);
+ if (RwImage *pImage = RwImageCreate(pRaster->width, pRaster->height, 32)) {
+ RwImageAllocatePixels(pImage);
+ RwImageSetFromRaster(pImage, pRaster);
+ return pImage;
+ }
+#endif
+ return nil;
+}
/*
*****************************************************************************
@@ -213,7 +229,11 @@ double
psTimer(void)
{
struct timespec start;
+#ifdef __linux__
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
+#else
+ clock_gettime(CLOCK_MONOTONIC, &start);
+#endif
return start.tv_sec * 1000.0 + start.tv_nsec/1000000.0;
}
#endif
@@ -1386,7 +1406,7 @@ WinMain(HINSTANCE instance,
RwChar** argv;
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, SPIF_SENDCHANGE);
-#if 0
+#if 1
// TODO: make this an option somewhere
AllocConsole();
freopen("CONIN$", "r", stdin);
diff --git a/src/skel/platform.h b/src/skel/platform.h
index 806c0a73..0475d20a 100644
--- a/src/skel/platform.h
+++ b/src/skel/platform.h
@@ -22,6 +22,7 @@ extern void psTerminate(void);
extern void psCameraShowRaster(RwCamera *camera);
extern RwBool psCameraBeginUpdate(RwCamera *camera);
+extern RwImage *psGrabScreen(RwCamera *camera);
extern void psMouseSetPos(RwV2d *pos);
diff --git a/src/skel/skeleton.cpp b/src/skel/skeleton.cpp
index 073155d6..99f44fed 100644
--- a/src/skel/skeleton.cpp
+++ b/src/skel/skeleton.cpp
@@ -53,6 +53,15 @@ RsCameraBeginUpdate(RwCamera * camera)
/*
*****************************************************************************
*/
+RwImage*
+RsGrabScreen(RwCamera *camera)
+{
+ return psGrabScreen(camera);
+}
+
+/*
+ *****************************************************************************
+ */
RwBool
RsRegisterImageLoader(void)
{
diff --git a/src/skel/skeleton.h b/src/skel/skeleton.h
index b5ea5abf..1c468179 100644
--- a/src/skel/skeleton.h
+++ b/src/skel/skeleton.h
@@ -274,6 +274,9 @@ RsCameraBeginUpdate(RwCamera *camera);
//extern void
//RsMouseSetVisibility(RwBool visible);
+extern RwImage*
+RsGrabScreen(RwCamera *camera);
+
extern void
RsMouseSetPos(RwV2d *pos);
diff --git a/src/skel/win/win.cpp b/src/skel/win/win.cpp
index 75a3a7c9..cc106e39 100644
--- a/src/skel/win/win.cpp
+++ b/src/skel/win/win.cpp
@@ -245,6 +245,23 @@ psCameraShowRaster(RwCamera *camera)
/*
*****************************************************************************
*/
+RwImage *
+psGrabScreen(RwCamera *pCamera)
+{
+#ifndef LIBRW
+ RwRaster *pRaster = RwCameraGetRaster(pCamera);
+ if (RwImage *pImage = RwImageCreate(pRaster->width, pRaster->height, 32)) {
+ RwImageAllocatePixels(pImage);
+ RwImageSetFromRaster(pImage, pRaster);
+ return pImage;
+ }
+#endif
+ return nil;
+}
+
+/*
+ *****************************************************************************
+ */
RwUInt32
psTimer(void)
{
@@ -1593,7 +1610,9 @@ psSelectDevice()
PSGLOBAL(fullScreen) = FALSE;
#endif
}
-
+#ifdef MULTISAMPLING
+ RwD3D8EngineSetMultiSamplingLevels(1 << FrontEndMenuManager.m_nPrefsMSAALevel);
+#endif
return TRUE;
}
@@ -1863,7 +1882,11 @@ void PlayMovieInWindow(int cmdShow, const char* szFile)
MultiByteToWideChar(CP_ACP, 0, szFile, -1, wFileName, sizeof(wFileName) - 1);
// Initialize COM
+#ifdef FIX_BUGS // will also return S_FALSE if it has already been inited in the same thread
+ CoInitialize(nil);
+#else
JIF(CoInitialize(nil));
+#endif
// Get the interface for DirectShow's GraphBuilder
JIF(CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC,
@@ -2233,9 +2256,10 @@ WinMain(HINSTANCE instance,
case GS_INIT_INTRO_MPEG:
{
+#ifndef NO_MOVIES
CloseClip();
-
CoUninitialize();
+#endif
if ( FrontEndMenuManager.OS_Language == LANG_FRENCH || FrontEndMenuManager.OS_Language == LANG_GERMAN )
PlayMovieInWindow(cmdShow, "movies\\GTAtitlesGER.mpg");
@@ -2269,8 +2293,10 @@ WinMain(HINSTANCE instance,
case GS_INIT_ONCE:
{
+#ifndef NO_MOVIES
CloseClip();
CoUninitialize();
+#endif
#ifdef FIX_BUGS
// draw one frame because otherwise we'll end up looking at black screen for a while if vsync is on
diff --git a/src/vehicles/Automobile.cpp b/src/vehicles/Automobile.cpp
index e06ce03b..eec44c35 100644
--- a/src/vehicles/Automobile.cpp
+++ b/src/vehicles/Automobile.cpp
@@ -49,7 +49,7 @@
#include "Object.h"
#include "Automobile.h"
-//--MIAMI: file done except TODOs
+//--MIAMI: file done
bool bAllCarCheat;
@@ -154,7 +154,7 @@ CAutomobile::CAutomobile(int32 id, uint8 CreatedBy)
m_fElasticity = 0.05f;
m_fBuoyancy = pHandling->fBuoyancy;
- m_fOrientation = m_auto_unk4 = 0.0f;
+ m_fOrientation = m_fPlaneSteer = 0.0f;
m_nBusDoorTimerEnd = 0;
m_nBusDoorTimerStart = 0;
@@ -4210,12 +4210,11 @@ CAutomobile::VehicleDamage(float impulse, uint16 damagedPiece)
pDriver &&
m_pDamageEntity && m_pDamageEntity->IsVehicle() &&
(this != FindPlayerVehicle() || ((CVehicle*)m_pDamageEntity)->VehicleCreatedBy == MISSION_VEHICLE) &&
-// TODO(MIAMI): enum
((CVehicle*)m_pDamageEntity)->pDriver){
if(GetVehicleAppearance() == VEHICLE_APPEARANCE_CAR)
- pDriver->Say(145);
+ pDriver->Say(SOUND_PED_CRASH_CAR);
else
- pDriver->Say(144);
+ pDriver->Say(SOUND_PED_CRASH_VEHICLE);
}
int oldHealth = m_fHealth;
@@ -4944,11 +4943,11 @@ CAutomobile::PlayCarHorn(void)
m_nCarHornTimer = 45;
}else if(r < 4){
if(pDriver)
- pDriver->Say(SOUND_PED_CAR_COLLISION);
+ pDriver->Say(SOUND_PED_ANNOYED_DRIVER);
m_nCarHornTimer = 45;
}else{
if(pDriver)
- pDriver->Say(SOUND_PED_CAR_COLLISION);
+ pDriver->Say(SOUND_PED_ANNOYED_DRIVER);
}
}
diff --git a/src/vehicles/Automobile.h b/src/vehicles/Automobile.h
index eaceef7b..3dee998d 100644
--- a/src/vehicles/Automobile.h
+++ b/src/vehicles/Automobile.h
@@ -54,7 +54,7 @@ public:
float m_fTraction;
float m_fTireTemperature;
float m_fOrientation; // for heli and plane go-to
- float m_auto_unk4; // related to the above
+ float m_fPlaneSteer; // related to the above
float m_fVelocityChangeForAudio;
float m_randomValues[6]; // used for what?
float m_fFireBlowUpTimer;
diff --git a/src/vehicles/Bike.cpp b/src/vehicles/Bike.cpp
index c32e72bc..62aeface 100644
--- a/src/vehicles/Bike.cpp
+++ b/src/vehicles/Bike.cpp
@@ -37,7 +37,7 @@
#include "Bike.h"
#include "Debug.h"
-//--MIAMI: done except for TODOs
+//--MIAMI: file done
// TODO: maybe put this somewhere else
inline void
@@ -1448,16 +1448,13 @@ CBike::PreRender(void)
fwd.Normalise();
float f = headLightPos.y + 6.0f;
pos += CVector(f*fwd.x, f*fwd.y, 2.0f);
-
-// TODO(MIAMI):
-// CShadows::StoreCarLightShadow(this, (uintptr)this + 22, gpShadowExplosionTex, &pos,
-// 7.0f*fwd.x, 7.0f*fwd.y, 3.5f*fwd.y, -3.5f*fwd.x, 45, 45, 45, 7.0f);
+ CShadows::StoreCarLightShadow(this, (uintptr)this + 22, gpShadowExplosionTex, &pos,
+ 7.0f*fwd.x, 7.0f*fwd.y, 3.5f*fwd.y, -3.5f*fwd.x, 45, 45, 45, 7.0f);
f = (tailLightPos.y - 2.5f) - (headLightPos.y + 6.0f);
pos += CVector(f*fwd.x, f*fwd.y, 0.0f);
-// TODO(MIAMI):
-// CShadows::StoreCarLightShadow(this, (uintptr)this + 25, gpShadowExplosionTex, &pos,
-// 3.0f, 0.0f, 0.0f, -3.0f, 35, 0, 0, 4.0f);
+ CShadows::StoreCarLightShadow(this, (uintptr)this + 25, gpShadowExplosionTex, &pos,
+ 3.0f, 0.0f, 0.0f, -3.0f, 35, 0, 0, 4.0f);
}
if(this == FindPlayerVehicle() && !alarmOff){
@@ -2137,8 +2134,7 @@ CBike::VehicleDamage(void)
m_pDamageEntity && m_pDamageEntity->IsVehicle() &&
(this != FindPlayerVehicle() || ((CVehicle*)m_pDamageEntity)->VehicleCreatedBy == MISSION_VEHICLE) &&
((CVehicle*)m_pDamageEntity)->pDriver)
-// TODO(MIAMI): enum
- pDriver->Say(144);
+ pDriver->Say(SOUND_PED_CRASH_VEHICLE);
int oldHealth = m_fHealth;
if(this == FindPlayerVehicle())
@@ -2545,11 +2541,11 @@ CBike::PlayCarHorn(void)
m_nCarHornTimer = 45;
}else if(r < 4){
if(pDriver)
- pDriver->Say(SOUND_PED_CAR_COLLISION);
+ pDriver->Say(SOUND_PED_ANNOYED_DRIVER);
m_nCarHornTimer = 45;
}else{
if(pDriver)
- pDriver->Say(SOUND_PED_CAR_COLLISION);
+ pDriver->Say(SOUND_PED_ANNOYED_DRIVER);
}
}
diff --git a/src/vehicles/Boat.cpp b/src/vehicles/Boat.cpp
index ae437f56..086a5002 100644
--- a/src/vehicles/Boat.cpp
+++ b/src/vehicles/Boat.cpp
@@ -242,7 +242,7 @@ CBoat::ProcessControl(void)
m_fHealth -= (collisionDamage-25.0f)/2.0f;
}else{
if(collisionDamage > 60.0f && pDriver)
- pDriver->Say(SOUND_PED_CAR_COLLISION);
+ pDriver->Say(SOUND_PED_ANNOYED_DRIVER);
if(bTakeLessDamage)
m_fHealth -= (collisionDamage-25.0f)/12.0f;
else
diff --git a/src/vehicles/Transmission.cpp b/src/vehicles/Transmission.cpp
index 5287055d..cc994ac6 100644
--- a/src/vehicles/Transmission.cpp
+++ b/src/vehicles/Transmission.cpp
@@ -4,6 +4,8 @@
#include "HandlingMgr.h"
#include "Transmission.h"
+//--MIAMI: done
+
void
cTransmission::InitGearRatios(void)
{
@@ -80,59 +82,51 @@ cTransmission::CalculateDriveAcceleration(const float &gasPedal, uint8 &gear, fl
if(fVelocity > pGearRatio->fShiftUpVelocity){
if(gear != 0 || gasPedal > 0.0f){
gear++;
- time = 0.0f;
return CalculateDriveAcceleration(gasPedal, gear, time, fVelocity, false);
}
}else if(fVelocity < pGearRatio->fShiftDownVelocity && gear != 0){
if(gear != 1 || gasPedal < 0.0f){
gear--;
- time = 0.0f;
return CalculateDriveAcceleration(gasPedal, gear, time, fVelocity, false);
}
}
- if(time > 0.0f){
- // changing gears currently, can't accelerate
- fAcceleration = 0.0f;
- time -= CTimer::GetTimeStepInSeconds();
- }else{
- float speedMul, accelMul;
+ float speedMul, accelMul;
- if(gear < 1){
- // going reverse
- accelMul = (Flags & HANDLING_2G_BOOST) ? 2.0f : 1.0f;
- speedMul = -1.0f;
- }else if(nNumberOfGears == 1){
- accelMul = 1.0f;
- speedMul = 1.0f;
- }else{
- // BUG or not? this is 1.0 normally but 0.0 in the highest gear
- float f = 1.0f - (gear-1)/(nNumberOfGears-1);
- speedMul = 3.0f*sq(f) + 1.0f;
- // This is pretty ugly, could be written more clearly
- if(Flags & HANDLING_2G_BOOST){
- if(gear == 1)
- accelMul = (Flags & HANDLING_1G_BOOST) ? 3.0f : 2.0f;
- else if(gear == 2)
- accelMul = 1.3f;
- else
- accelMul = 1.0f;
- }else if(Flags & HANDLING_1G_BOOST && gear == 1){
- accelMul = 3.0f;
- }else
+ if(gear < 1){
+ // going reverse
+ accelMul = (Flags & HANDLING_2G_BOOST) ? 2.0f : 1.0f;
+ speedMul = -1.0f;
+ }else if(nNumberOfGears == 1){
+ accelMul = 1.0f;
+ speedMul = 1.0f;
+ }else{
+ // BUG or not? this is 1.0 normally but 0.0 in the highest gear
+ float f = 1.0f - (gear-1)/(nNumberOfGears-1);
+ speedMul = 3.0f*sq(f) + 1.0f;
+ // This is pretty ugly, could be written more clearly
+ if(Flags & HANDLING_2G_BOOST){
+ if(gear == 1)
+ accelMul = (Flags & HANDLING_1G_BOOST) ? 2.0f : 1.6f;
+ else if(gear == 2)
+ accelMul = 1.3f;
+ else
accelMul = 1.0f;
- }
-
- if(cheat)
- fCheat = 1.2f;
- else
- fCheat = 1.0f;
- float targetVelocity = Gears[gear].fMaxVelocity*speedMul*fCheat;
- float accel = fEngineAcceleration*accelMul * (targetVelocity - fVelocity)/Abs(targetVelocity);
- if(Abs(fVelocity) < Abs(Gears[gear].fMaxVelocity*fCheat))
- fAcceleration = gasPedal * accel * CTimer::GetTimeStep();
- else
- fAcceleration = 0.0f;
+ }else if(Flags & HANDLING_1G_BOOST && gear == 1){
+ accelMul = 2.0f;
+ }else
+ accelMul = 1.0f;
}
+
+ if(cheat)
+ fCheat = 1.2f;
+ else
+ fCheat = 1.0f;
+ float targetVelocity = Gears[gear].fMaxVelocity*speedMul*fCheat;
+ float accel = fEngineAcceleration*accelMul * (targetVelocity - fVelocity)/Abs(targetVelocity);
+ if(Abs(fVelocity) < Abs(Gears[gear].fMaxVelocity*fCheat))
+ fAcceleration = gasPedal * accel * CTimer::GetTimeStep();
+ else
+ fAcceleration = 0.0f;
return fAcceleration;
}
diff --git a/utils/gxt/american.txt b/utils/gxt/american.txt
deleted file mode 100644
index 94074819..00000000
--- a/utils/gxt/american.txt
+++ /dev/null
@@ -1,7979 +0,0 @@
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
-
-[DEFNAM]
-Claude----------------------
-
-[IN_VEH]
-~g~Hey! Get back in the vehicle!
-
-[IN_VEH2]
-~g~You need some wheels for this job!
-
-[IN_BOAT]
-~g~You need a boat for this job!
-
-[HEY]
-~g~Don't go solo, keep your posse together!
-
-[HEY2]
-~g~Don't split up, keep the group together!
-
-[HEY3]
-~g~You've dropped your main man, go back and get 8-Ball!
-
-[HEY4]
-~g~Lose Misty and Luigi will lose your face! Go and get her!
-
-[HEY5]
-~g~One of the girls is AWOL, Go back and round her up!
-
-[HEY6]
-~g~You left your honor with the Yakuza Kanbu. You must protect him!
-
-[HEY7]
-~g~An extra gun could be useful. Go back and pick up your contact!
-
-[HEY8]
-~g~Protection means just that -Protect the Old Oriental Gentleman!
-
-[HEY9]
-~g~You want the word on the street? Go see the contact!
-
-[HELP2_A]
-Press the ~h~/ button~w~ when running to ~h~sprint.
-
-[HELP3]
-You can only sprint for short periods before becoming tired.
-
-[HELP4_A]
-Press the~h~ ~k~~VEHICLE_ACCELERATE~ button~w~ to ~h~accelerate.
-
-[HELP4_D]
-Push the~h~ right analog stick~w~ up to ~h~accelerate.
-
-[HELP5_A]
-Press the~h~ ~k~~VEHICLE_BRAKE~ button~w~ to ~h~brake~w~, or to ~h~reverse~w~ if the vehicle has stopped.
-
-[HELP5_D]
-Pull the ~h~right analog stick~w~ back to ~h~brake~w~, or to ~h~reverse~w~ if the vehicle has stopped.
-
-[HELP6_A]
-Press the~h~ ~k~~VEHICLE_HANDBRAKE~ button ~w~to apply the vehicle's ~h~handbrake.
-
-[HELP6_C]
-Press the~h~ ~k~~VEHICLE_HANDBRAKE~ button ~w~to apply the vehicle's ~h~handbrake.
-
-[HELP6_D]
-Press the~h~ ~k~~VEHICLE_HANDBRAKE~ button ~w~to apply the vehicle's ~h~handbrake.
-
-[HELP7_A]
-Press and hold the~h~ ~k~~PED_LOCK_TARGET~ button ~w~to ~h~target~w~ with the sniper rifle.
-
-[HELP7_D]
-Press and hold the~h~ ~k~~PED_LOCK_TARGET~ button ~w~to ~h~target ~w~with the sniper rifle.
-
-[HELP8_A]
-Press the~h~ ~k~~PED_SNIPER_ZOOM_IN~ button ~w~to ~h~zoom in ~w~with the rifle and the~h~ ~k~~PED_SNIPER_ZOOM_OUT~ button ~w~to ~h~zoom out ~w~again.
-
-[HELP9_A]
-Press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire~w~ the sniper rifle.
-
-[HELP10]
-This badge indicates you have a police wanted level.
-
-[HELP11]
-The more badges the higher your wanted level.
-
-[HELP13]
-Sometimes you may need to use pathways not shown on the radar.
-
-[TIMER]
-This is a timed mission, you must complete it before the timer counts down to zero.
-
-[MISTY1]
-~r~Misty is morgue-meat!
-
-[OUT_VEH]
-~g~Get out of the vehicle!
-
-[GARAGE]
-Drive the vehicle into the garage, then walk outside.
-
-[WANTED1]
-~g~Shake the cops and lose your wanted level!
-
-[NODOORS]
-~g~They ain't sardines! Get some wheels with enough seats.
-
-[TRASH]
-~g~You've junked your wheels real bad! Get your vehicle repaired!
-
-[WRECKED]
-~r~The vehicle is wrecked!
-
-[HORN]
-~g~Sound the horn.
-
-[NOMONEY]
-~g~You need more cash!
-
-[OUTTIME]
-~r~Too slow, man, too slow!
-
-[SPOTTED]
-~r~They're on to you!
-
-[REWARD]
-REWARD $~1~
-
-[GAMEOVR]
-GAME OVER
-
-[Z]
-Z-axis value: ~1~
-
-[M_FAIL]
-MISSION FAILED!
-
-[M_PASS]
-MISSION PASSED! $~1~
-
-[O_PASS]
-ODD JOB PASSED!
-
-[O_FAIL]
-ODD JOB FAILED!
-
-[DEAD]
-WASTED!
-
-[BUSTED]
-BUSTED!
-
-[S_PROMP]
-When not on a mission you can ~h~save your game here~w~, this will advance time six hours.
-
-[NUMBER]
-~1~
-
-[SCORE]
-$~1~
-
-[LOADCAR]
-LOADING VEHICLE... (PRESS L1 TO CANCEL)
-
-[CARSOFF]
-Cars turned off.
-
-[CARS_ON]
-Cars turned on.
-
-[TEXTXYZ]
-Writing coordinates to file...
-
-[CHEATON]
-Cheat mode ON
-
-[CHEATOF]
-Cheat mode OFF
-
-[UZI_IN]
-The Uzi is now in stock at Ammunation!
-
-[IMPORT1]
-Go outside and wait for your vehicle.
-
-[PAGEB1]
-Pistol delivered to hideout
-
-[PAGEB2]
-Uzi delivered to hideout
-
-[PAGEB3]
-Body armor delivered to hideout
-
-[PAGEB4]
-Shotgun delivered to hideout
-
-[PAGEB5]
-grenades delivered to hideout
-
-[PAGEB6]
-molotovs delivered to hideout
-
-[PAGEB7]
-AK47 delivered to hideout
-
-[PAGEB8]
-Sniper rifle delivered to hideout
-
-[PAGEB9]
-M16 delivered to hideout
-
-[PAGEB10]
-Rocket Launcher delivered to hideout
-
-[PAGEB11]
-Flamethrower delivered to hideout
-
-[WANT_A]
-You will only be arrested if you have a ~h~wanted level.
-
-[WANT_B]
-Your ~h~wanted level~w~ is represented by the row of stars in the top right of the screen.
-
-[WANT_C]
-You now have a ~h~wanted level~w~ of one...
-
-[WANT_D]
-two...
-
-[WANT_E]
-three...
-
-[WANT_F]
-As your ~h~wanted level~w~ increases you will attract more powerful forms of law enforcement.
-
-[WANT_G]
-When you are ~h~'busted'~w~ you are returned to the nearest police station.
-
-[WANT_H]
-The cops will take all your weapons and some of your cash as a bribe.
-
-[WANT_I]
-Any mission you were on will be failed.
-
-[WANT_J]
-You will find ways of reducing your wanted level the more you play.
-
-[WANT_K]
-If you are in a car, ~h~SPRAY SHOPS~w~ will ~h~clear your wanted level.
-
-[HEAL_B]
-When you are ~h~'wasted'~w~ you are returned to the nearest hospital.
-
-[HEAL_C]
-You will lose your weapons and the doctors will take some cash for patching you up.
-
-[HEAL_E]
-You will find ways of healing or protecting yourself the more you play the game.
-
-[DAM]
-DAMAGE:
-
-[KILLS]
-KILLS:
-
-[FARES]
-FARES:
-
-[BULL]
-BULLION:
-
-[EVID]
-EVIDENCE:
-
-[HEALTH]
-CAR HEALTH:
-
-[COLLECT]
-COLLECTED:
-
-[BOMB]
-Drive your vehicle into the bomb shop to attach a ~h~bomb~w~. Cost - ~h~$1000.
-
-[SAVE1]
-Walk through the doorway to ~h~Save the game~w~. You cannot save during a mission.
-
-[SAVE2]
-Any vehicle left in this garage will be stored when the game is saved.
-
-[AMMU]
-Go inside Ammu-Nation to buy a weapon.
-
-[BRIDGE1]
-When the Callahan Bridge is repaired you will be able to drive to Staunton Island.
-
-[TUNNEL]
-When the Porter Tunnel is opened you will be able to drive to Staunton Island.
-
-[LUIGI]
-LUIGI MISSIONS
-
-[TONI]
-TONI MISSIONS
-
-[JOEY]
-JOEY MISSIONS
-
-[FRANK]
-SALVATORE MISSIONS
-
-[DIABLO]
-DIABLO MISSIONS
-
-[ASUKA]
-ASUKA MISSIONS
-
-[B_SITE]
-ASUKA SUBURBAN MISSIONS
-
-[KENJI]
-KENJI MISSIONS
-
-[RAY]
-RAY MISSIONS
-
-[LOVE]
-LOVE MISSIONS
-
-[YARDIE]
-YARDIE MISSIONS
-
-[HOOD]
-HOOD MISSIONS
-
-[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]
-Portland Beach
-
-[LITTLEI]
-Saint Mark's
-
-[REDLIGH]
-Red Light District
-
-[TOWERS]
-Hepburn Heights
-
-[HARWOOD]
-Harwood
-
-[ROADBR1]
-Callahan Bridge
-
-[ROADBR2]
-Callahan Bridge
-
-[TUNNELP]
-Porter Tunnel
-
-[BOMB1]
-8-Ball's Garage
-
-[COM_ZON]
-Staunton Island
-
-[STADIUM]
-Aspatria
-
-[HOSPI_2]
-Rockford
-
-[UNIVERS]
-Liberty Campus
-
-[CONSTRU]
-Fort Staunton
-
-[PARK]
-Belleville Park
-
-[COM_EAS]
-Newport
-
-[SHOPING]
-Bedford Point
-
-[YAKUSA]
-Torrington
-
-[SUB_ZON]
-Shoreside Vale
-
-[AIRPORT]
-Francis Intl. Airport
-
-[PROJECT]
-Wichita Gardens
-
-[SUB_IND]
-Pike Creek
-
-[SWANKS]
-Cedar Grove
-
-[BIG_DAM]
-Cochrane Dam
-
-[SUB_ZO2]
-Shoreside Vale
-
-[SUB_ZO3]
-Shoreside Vale
-
-[CAR_1]
-Ambulance
-
-[CAR_2]
-Firetruck
-
-[CAR_3]
-Police
-
-[CAR_4]
-Enforcer
-
-[CAR_5]
-Barracks
-
-[CAR_6]
-Rhino
-
-[CAR_7]
-FBIcar
-
-[CAR_8]
-Securicar
-
-[CAR_9]
-Moonbeam
-
-[CAR_10]
-Coach
-
-[CAR_11]
-Flatbed
-
-[CAR_12]
-Linerunner
-
-[CAR_13]
-Trashmaster
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-Mr Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinel
-
-[CAR_25]
-Cheetah
-
-[CAR_26]
-Banshee
-
-[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]
-Stallion
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Cabbie
-
-[CAR_39]
-Buggy
-
-[LUIGIS]
-Luigi's Place
-
-[GOAWAY]
-~g~You are already on a mission!
-
-[LUIGGO]
-~g~Luigi's interviewing some new girls -Come back later!
-
-[JOEYGO]
-~g~Joey's out on the town with Misty -Drop by later!
-
-[TONIGO]
-~g~Toni's taken his Momma to the opera -Call in some other time!
-
-[KEMUGO]
-~g~Maria and Kemuri are all tied up at the moment -Drop by later!
-
-[KENJGO]
-~g~Kenji is attending a Yakuza meeting -Call by some other time!
-
-[RAYGO]
-~g~Ray has other toilets to hang around -Try again later!
-
-[LOVEGO]
-~g~Donald Love has other business to attend to -Make an appointment later!
-
-[KENSGO]
-~g~Kenji is busy! -Call by later!
-
-[HOODGO]
-~g~The Hoods are not available at this time!
-
-[WRONGT1]
-~g~Come back between 05:00 and 21:00 for a job
-
-[WRONGT2]
-~g~Come back between 06:00 and 14:00 for a job
-
-[WRONGT3]
-~g~Come back between 15:00 and 00:00 for a job
-
-[GUN_1A]
-Use the ~h~~k~~PED_CYCLE_WEAPON_RIGHT~ button ~w~and the ~h~~k~~PED_CYCLE_WEAPON_LEFT~ button ~w~to cycle through your weapons.
-
-[GUN_2A]
-Hold the ~h~~k~~PED_LOCK_TARGET~ button ~w~to ~h~auto-target~w~, press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire! Try shooting the targets...
-
-[GUN_2C]
-Hold the ~h~~k~~PED_LOCK_TARGET~ button ~w~to ~h~auto-target~w~, press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire! Try shooting the targets...
-
-[GUN_2D]
-Hold the ~h~~k~~PED_LOCK_TARGET~ button ~w~to ~h~auto-target~w~, press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire! Try shooting the targets...
-
-[GUN_3A]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button,~w~ press the ~h~~k~~PED_CYCLE_TARGET_LEFT~ button~w~ or the ~h~~k~~PED_CYCLE_TARGET_RIGHT~ button to switch target.
-
-[GUN_3B]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button,~w~ press the ~h~~k~~PED_CYCLE_TARGET_LEFT~ button~w~ or the ~h~~k~~PED_CYCLE_TARGET_RIGHT~ button to switch target.
-
-[GUN_4A]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button~w~ you can walk or run while remaining locked onto a target.
-
-[GUN_4B]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button~w~ you can walk or run while remaining locked onto a target.
-
-[GUN_5]
-You can practice targeting and shooting on these paper targets. When you are finished resume the mission.
-
-[TAXI1]
-~g~Look for a fare.
-
-[FARE1]
-~g~Destination ~w~'Meeouch Sex Kitten Club' ~g~in Redlight.
-
-[FARE2]
-~g~Destination ~w~'Supa Save' ~g~in Portland View.
-
-[FARE3]
-~g~Destination ~w~'old school hall' ~g~in Chinatown.
-
-[FARE4]
-~g~Destination ~w~'Greasy Joe's Cafe' ~g~in Callahan Point.
-
-[FARE5]
-~g~Destination ~w~'AmmuNation' ~g~in Redlight.
-
-[FARE6]
-~g~Destination ~w~'Easy Credit Autos' ~g~in Saint Mark's.
-
-[FARE7]
-~g~Destination ~w~'Woody's topless bar' ~g~in Redlight.
-
-[FARE8]
-~g~Destination ~w~'Marcos Bistro' ~g~in Saint Mark's.
-
-[FARE9]
-~g~Destination ~w~'import export garage' ~g~in Portland Harbor.
-
-[FARE10]
-~g~Destination ~w~'Punk Noodles' ~g~in Chinatown.
-
-[FARE12]
-~g~Destination ~w~'Football Stadium' ~g~in Aspatria.
-
-[FARE13]
-~g~Destination ~w~'The Church' ~g~in Bedford Point
-
-[FARE14]
-~g~Destination ~w~'The Casino' ~g~in Torrington
-
-[FARE15]
-~g~Destination ~w~'Liberty University' ~g~in Liberty Campus
-
-[FARE16]
-~g~Destination ~w~'Shopping Mall' ~g~in Belleville Park Area
-
-[FARE17]
-~g~Destination ~w~'Museum' ~g~in Newport
-
-[FARE18]
-~g~Destination ~w~'AmCo Building' ~g~in Torrington
-
-[FARE19]
-~g~Destination ~w~'Bolt Burgers' ~g~in Bedford Point
-
-[FARE20]
-~g~Destination ~w~'The Park' ~g~in Belleville
-
-[FARE21]
-~g~Destination ~w~'Francis intl. Airport'
-
-[FARE22]
-~g~Destination ~w~'Cochrane Dam'
-
-[FARE24]
-~g~Destination ~w~'The hospital' ~g~in Pike Creek
-
-[FARE25]
-~g~Destination ~w~'The Park' ~g~in Shoreside Vale
-
-[FARE26]
-~g~Destination ~w~'North West Towers' ~g~in Wichita Gardens
-
-[NEW_TAX]
-BIGGER! FASTER! HARDER! new Borgnine taxis open for business in Harwood. Call 555-BORGNINE today!
-
-[TSCORE2]
-$~1~
-
-[IN_ROW]
-~1~ IN A ROW bonus! $~1~
-
-[TTUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle taxi missions on or off.
-
-[TTUTOR2]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle taxi missions on or off.
-
-[A_TIME]
-+~1~ seconds
-
-[A_FULL]
-~r~Ambulance full!!
-
-[A_RANGE]
-~g~The ambulance radio is out of range, get closer to a hospital!
-
-[FTUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle fire truck missions on or off.
-
-[FTUTOR2]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle fire truck missions on or off.
-
-[F_PASS1]
-Fire extinguished!
-
-[F_RANGE]
-~g~The fire truck radio is out of range, get closer to a fire station!
-
-[C_BREIF]
-~g~Suspect last seen in the ~a~ area.
-
-[C_RANGE]
-~g~The police radio is out of range, get closer to a police station!
-
-[DODO_FT]
-You flew for ~1~ seconds!
-
-[EBAL_A]
-I know a place on the edge of the Red Light District where we can lay low,
-
-[EBAL_A1]
-but my hands are all messed up so you better drive, brother.
-
-[EBAL_1]
-Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a vehicle.
-
-[EBAL_1B]
-Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a vehicle.
-
-[EBAL_2]
-~g~Get back into the car!
-
-[EBAL_3]
-This is the ~h~radar~w~. Use it to navigate the city, follow the ~h~blip~w~ on the ~h~radar~w~ to find the hideout!
-
-[EBAL_D]
-I know a guy, he's connected, his name's Luigi.
-
-[EBAL_D1]
-Me an' him go back so I could probably get you some work. C'mon lets head over there.
-
-[EBAL_E]
-C'mon, lets drop by and I'll introduce you.
-
-[EBAL_I]
-The boss will be out to see you shortly...
-
-[EBAL_J]
-8-Ball's got some business up stairs.
-
-[EBAL_K]
-Maybe you can do me a favor.
-
-[EBAL_L]
-One of my girls needs a ride so grab a car and pick up Misty from the clinic. Then bring her back here.
-
-[EBAL_N]
-So keep your hands on the wheel!
-
-[EBAL_4]
-~r~8-Ball's dead!
-
-[EBAL_5]
-~g~Get a vehicle!
-
-[EBAL_6]
-~g~Pick up Misty!
-
-[LM1]
-'LUIGI'S GIRLS'
-
-[LM2]
-'DON'T SPANK MA BITCH UP'
-
-[LM3]
-'DRIVE MISTY FOR ME'
-
-[LM5]
-'THE FUZZ BALL'
-
-[LM1_2]
-~g~Take Misty to Luigi's Club.
-
-[LM1_3]
-~g~Press the horn to get the girl into the car.
-
-[LM1_6]
-~g~Get back into the car!
-
-[LM1_7]
-Stop the vehicle next to Misty and allow her to enter it.
-
-[LM1_8]
-You can go and see Luigi for more work or check out Liberty City.
-
-[LM2_A]
-There's a new high on the street goes by the name of SPANK.
-
-[LM2_E]
-Some wiseguy's been introducing this trash to my girls down Portland Harbor.
-
-[LM2_B]
-Go and introduce a bat to his face!
-
-[LM2_G]
-I want compensation for this insult!
-
-[LM2_1]
-~g~Take his car and get it resprayed.
-
-[LM2_2A]
-Use the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~punch ~w~and ~h~kick~w~ or ~h~swing ~w~the bat!
-
-[LM2_2C]
-Use the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~punch ~w~and ~h~kick~w~ or ~h~swing ~w~the bat~w~!
-
-[LM2_2D]
-Use the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~punch ~w~and ~h~kick~w~ or ~h~swing ~w~the bat~w~!
-
-[LM2_3]
-~g~Stash the car in Luigi's lockup!
-
-[LM2_4]
-~g~Respray the car!
-
-[LM3_A]
-Hey I've gotta talk to you... All right Mick I'll talk to yah later.
-
-[LM3_B]
-How yah doing kid?
-
-[LM3_C]
-The Don's son, Joey Leone, he wants some action from his regular girl Misty.
-
-[LM3_D]
-Go pick her up at Hepburn Heights...
-
-[LM3_E]
-but watch yourself that's Diablo turf.
-
-[LM3_F]
-Then run her over to his garage in Trenton and make it quick,
-
-[LM3_H]
-so keep your eyes on the road and off Misty!
-
-[LM3_2]
-~g~Take Misty to Joey's.
-
-[LM3_4]
-~g~Go pick up Misty!
-
-[LM3_5]
-You working regular for Luigi now huh? It's about time he got a driver we can trust!
-
-[LM3_7]
-I'll be with you in a minute spark plug.
-
-[LM3_10]
-~g~Get a vehicle!
-
-[LM4_B]
-Go and take care of things for me.
-
-[LM4_C]
-If you need a piece go around the back of AmmuNation opposite the subway.
-
-[LM5_A]
-The Policeman's Ball is being held at the old school hall near the Callahan Bridge
-
-[LM5_B]
-and they'll be looking for some 'old school' action.
-
-[LM5_C]
-Now I got girls all over town walking the streets.
-
-[LM5_D]
-Get'em to the ball they'll make a bundle.
-
-[LM5_1]
-~g~You pack these ladies too tight, they gonna bruise! ~g~Drop these girls off first, then come back for more.
-
-[LM5_2]
-~r~One of Luigi's girls is bodybag meat!
-
-[LM5_3]
-~g~You need a car!
-
-[LM5_4]
-~g~Pick up the girls working St. Marks.
-
-[LM5_5]
-~g~Take the girls to the Fuzz Ball!
-
-[LM5_8]
-~g~Girls working the Ball: ~1~
-
-[JM2]
-'FAREWELL 'CHUNKY' LEE CHONG'
-
-[JM4]
-'CIPRIANI'S CHAUFFEUR'
-
-[JM5]
-'DEAD SKUNK IN THE TRUNK'
-
-[JM1_1]
-~g~Take Forelli's car to 8-Ball's garage North of here, behind 'Easy Credit Autos'.
-
-[JM1_2]
-~g~Park the car back at Marco's Bistro.
-
-[JM1_3]
-~g~Activate the car bomb then get out of there!
-
-[JM1_4]
-~g~You're trashing the vehicle! Get it repaired!
-
-[JM1_5]
-~g~The car bomb's not set!
-
-[JM1_6]
-~g~Put the car back in the correct position.
-
-[JM1_8A]
-~y~Hey, it's my main man!
-
-[JM1_8B]
-~y~The bomb shop's automated. Just drive in, stop your car and the shop will do the rest.
-
-[JM1_8C]
-~y~Here, your first can be free, but after that it'll cost.
-
-[JM2_A]
-Chunky Lee Chong is pushing spank for some new gang from Colombia... or Colorado... or something....
-
-[JM2_B]
-I'm not really sure. Who needs details anyway.
-
-[JM2_D]
-That rat has sold his last stir fry.
-
-[JM2_E]
-I want you to take him out!
-
-[JM2_G]
-Sort yourself with a nine, you know where it is, right?
-
-[JM2_H]
-Well remember, just watch your back in China Town, it's Triad territory.
-
-[JM3_A]
-Alright, we're gonna hit the pay role van.
-
-[JM3_B]
-It leaves the edge of China Town everyday.
-
-[JM3_C]
-Bullets won't even dent the van's armor, so get a car and ram it off the road.
-
-[JM3_D]
-Now hit it hard and the punk ass security guards should bail.
-
-[JM3_E]
-Then take it to the warehouse at the docks and my guys are gonna take over from there.
-
-[JM3_F]
-Now it won't be doin' it's rounds all day, so don't hang around.
-
-[JM3_1]
-~g~Take the van to the lock up.
-
-[JM3_2]
-~g~Ram the van until its damage is below 70 percent.
-
-[JM4_B]
-Oh! Here's the guy I was telling you about!
-
-[JM4_C]
-Alright Listen. This guy ain't Italian and he's no mechanic but he can get things fixed.
-
-[JM4_D]
-This is Pops Capo, Toni Cipriani.
-
-[JM4_E]
-Yeah, I'm Toni Cipriani
-
-[JM4_F]
-Take him to Momma's restaurant at St Marks, alright.
-
-[JM4_G]
-Now listen to me, I'm planning a job that needs a good driver so drop by sometime later Ok?
-
-[JM4_2]
-Wait here! Keep the engine running. This ain't a social call.
-
-[JM4_3]
-It's a Triad ambush! Get us out of here kid!
-
-[JM4_4]
-The Triads think they can mess with me, the triads, with ME!
-
-[JM4_6]
-Hey watch the car! I said no fancy crap.
-
-[JM4_7]
-~g~Take Toni to his momma's restaurant.
-
-[JM4_8]
-~r~Toni's been wasted!
-
-[JM5_A]
-Beautiful! Just beautiful.
-
-[JM5_B]
-Alright, Just the guy I need to talk to!
-
-[JM5_D]
-One of the Forellis thought he was a wise guy, so he got what he had coming to him.
-
-[JM5_E]
-Take the corpse to the crusher in Harwood, alright?
-
-[JM5_1]
-~g~Take it to the crusher!
-
-[JM5_2]
-~g~It's the Forelli brothers!
-
-[JM6_A]
-What a ride she's gonna be, huh?
-
-[JM6_B]
-Alright, listen. Get some wheels to the safehouse at St. Marks and pick up a few friends of mine.
-
-[JM6_C]
-They're hittin' a bank and they need a driver.
-
-[JM6_D]
-I gave my word that you were the man, so don't screw this up.
-
-[JM6_E]
-Get them to the bank before five o'clock, not a minute after.
-
-[JM6_2]
-Keep the engine running we'll be in and out in no time.
-
-[JM6_3]
-Get us out of here!!
-
-[JM6_4]
-Shake the cops and get us to the safehouse!!
-
-[JM6_6]
-~g~Go and get a vehicle less conspicuous!
-
-[JM6_7]
-~g~You need all 3 to rob the bank!
-
-[TM1]
-'TAKING OUT THE LAUNDRY'
-
-[TM2]
-'THE PICK-UP'
-
-[TM3]
-'SALVATORE'S CALLED A MEETING'
-
-[TM4]
-'TRIADS AND TRIBULATIONS'
-
-[TM5]
-'BLOW FISH'
-
-[TONI_P]
-I've got some urgent work for you! -Toni
-
-[TM1_A]
-~w~Take a seat kid, take a god damned seat.
-
-[TM1_B]
-~w~So the laundry won't pay any protection eh?
-
-[TM1_C]
-~w~The Triads think they can mess with me?
-
-[TM1_D]
-~w~Let's teach these would be tough guys what it means to be a tough guy.
-
-[TM1_E]
-~w~Yeah, teach 'em some respect. No son of mine gets it from some Triads.
-
-[TM1_F]
-~w~Your father, god rest his soul, took no crap from no Triads back in Sicily.
-
-[TM1_G]
-~w~Sorry Ma. Yes Ma.
-
-[TM1_H]
-~w~I want you to destroy their laundry vans
-
-[TM1_I]
-~w~and mangle any triad gimp that gets in your way.
-
-[TM1_J]
-~w~8-Ball can supply you with what you're gonna need.
-
-[TM2_A]
-~w~TONI's off making people bleed or trying to.
-
-[TM2_AA]
-~w~He'll never be as tough as his Pop, but he left you a note on the table.
-
-[TM2_B]
-~w~The laundry has agreed to pay - you did real good kid!
-
-[TM2_C]
-~w~Go collect the cash and bring it back here. Watch out for the Triads.
-
-[TM2_D]
-~w~They may be shoving a firecracker up your ass, but don't take no crap.
-
-[TM2_E]
-~w~Nobody I mean nobody, messes with TONI CIPRIANI!
-
-[TM2_1]
-~g~Get the cash back to Toni's!!
-
-[TM2_2]
-~g~You iced them all!
-
-[TM3_MA]
-~w~I don't know where he is!
-
-[TM3_MB]
-~w~I swear that boy of mine don't know himself sometimes.
-
-[TM3_MC]
-~w~Now his father, he was different. Always on top, in charge, manful...
-
-[TM3_A]
-~w~Don Salvatore has called a meeting.
-
-[TM3_B]
-~w~I need you to collect the limo and his boy, Joey, from the garage.
-
-[TM3_C]
-~w~Then get Luigi from his club, come back here and pick me up,
-
-[TM3_D]
-~w~then we'll all drive over to the boss's place together.
-
-[TM3_E]
-~w~Those Triads, they don't know when to stop.
-
-[TM3_F]
-~w~They want a war. They got a war.
-
-[TM3_G]
-~w~Now get going.
-
-[TM3_1]
-~g~Pick up the Stretch from Joey's.
-
-[TM3_2]
-~g~Now go pick up Luigi.
-
-[TM3_3]
-~g~Now go pick up Toni.
-
-[TM3_4]
-~g~Drive the goodfellas to Salvatore's place.
-
-[TM3_5]
-~y~It's a triad ambush!!
-
-[TM4_B]
-~w~We're at WAR! The Triads have a fish factory as a front.
-
-[TM4_C]
-~w~Most of their business goes down at the fish market in Chinatown.
-
-[TM4_D]
-~w~That laundry still owes us protection.
-
-[TM4_E]
-~w~They reckon the Triads are protecting them now, so I say we exact a fitting punishment.
-
-[TM4_F]
-~w~Take these boys over and whack the Triad Warlords!
-
-[TM4_G]
-~w~Hell, if you get a chance, pop some of their soldiers too.
-
-[TM4_GAT]
-~g~You need a 'Triad fish van' to enter.
-
-[TM5_B]
-~w~OK, I've had enough of this shit.
-
-[TM5_C]
-~w~We're gonna finish the Triads in Liberty once and for all!
-
-[TM5_D]
-8-Ball's rigged a dustcart with a bomb.
-
-[TM5_E]
-~w~It's on a timer so if you mess up there'll be no evidence. Go and pick up the dustcart.
-
-[TM5_F]
-~w~Careful, 8-Ball says it's real sensitive and the slightest bump could set that thing off!
-
-[TM5_G]
-~w~Their fish factory will open its gates for a dustcart, so you can drive right in.
-
-[TM5_H]
-~w~Park up between the gas canisters and get the hell out of there!
-
-[TM5_I]
-~w~I want it to rain mackerel.
-
-[TM5_J]
-~w~We're talking real biblical here, nothing low budget.
-
-[FM2]
-'CUTTING THE GRASS'
-
-[FM4]
-'LAST REQUESTS'
-
-[FM1_A]
-~w~Me an' the fellas need to talk business
-
-[FM1_B]
-~w~so you're gonna look after my girl for the evening.
-
-[FM1_C]
-~w~HEY MARIA! MOVE YOUR BUTT!
-
-[FM1_D]
-~w~Dumb broad does this every time.
-
-[FM1_E]
-~w~And here she is, the one and only Queen of Sheba!
-
-[FM1_F]
-~w~What were you doing up there?
-
-[FM1_G]
-~w~Whatever it was, I bet it cost me money.
-
-[FM1_H]
-~w~Well, you don't think I hang around for the conversation, do you?
-
-[FM1_I]
-~w~Get in that car and keep your big mouth shut.
-
-[FM1_J]
-~w~Take the limo but bring it back in one piece, y'hear me?
-
-[FM1_K]
-~w~And watch her, she can be trouble.
-
-[FM1_L]
-~w~Yeah, yeah, yeah! I'm sure your new lap dog has everything covered,
-
-[FM1_M]
-~w~and isn't he big and strong?
-
-[FM1_N]
-~w~Hey Fido, Let's go visit Chico and get some party treats!
-
-[FM1_P]
-~g~That's Chico over there, pull up next to him.
-
-[FM1_S]
-~w~Here you go lady.
-
-[FM1_TT]
-~w~IT'S A POLICE RAID!
-
-[FM1_1]
-~g~Get back into the Stretch!
-
-[FM1_2]
-~g~Get into the Stretch!
-
-[FM1_3]
-~r~Leave Maria and Salvatore will have you whacked, go back and pick her up.
-
-[FM1_4]
-~g~You've dumped the Don's woman! Get back to the warehouse and wait for Maria!
-
-[FM1_5]
-~g~Get Maria safely back to Salvatore's!
-
-[FM1_6]
-~g~Chico won't be there forever, get Maria to the waterfront!
-
-[FM1_7]
-~r~Maria's dead! Salvatore won't be too pleased...
-
-[FM1_8]
-~r~You wasted Maria's supplier!
-
-[FM2_J]
-Leave us alone for a minute.
-
-[FM2_A]
-The Colombian Cartel is making SPANK somewhere in Liberty.
-
-[FM2_K]
-but we don't know where, and they seem to know everything we're doin' before we do.
-
-[FM2_L]
-There is a guy named Curly Bob works the bar at Luigi's.
-
-[FM2_M]
-He's been throwing more money around than he's earning.
-
-[FM2_N]
-He usually gets a taxi home after work. So follow him.
-
-[FM2_O]
-And if he's rattin' us out... kill him.
-
-[FM2_F]
-Here comes our little friend. Mr big mouth himself.
-
-[FM2_G]
-Were you followed? You know what goes on here is our little secret.
-
-[FM2_H]
-No..no, I wasn't followed. You got my stuff?
-
-[FM2_I]
-Here's your SPANK, squealer, now talk.
-
-[FM2_P]
-OK, so the Leone's are fighting wars on two fronts.
-
-[FM2_Q]
-They're in a turf war with the Triads with no sign of either side giving up.
-
-[FM2_R]
-Meanwhile Joey Leone has stirred up some bad blood with the Forellis.
-
-[FM2_S]
-Every day they're losing men and influence in the city.
-
-[FM2_T]
-Salvatore is becoming dangerous and paranoid. He suspects everybody and everything.
-
-[FM2_U]
-With loyalty like yours, what has he possibly got to worry about.
-
-[FM2_1]
-~g~There's Curly Bob!
-
-[FM2_2]
-~g~Curly's left the club, tail him!
-
-[FM2_5]
-~g~Take him to Portland Harbor.
-
-[FM2_6]
-~r~Curly won't get into a smashed-up taxi!
-
-[FM2_7]
-~r~Curly's spooked! The meeting's off!
-
-[FM2_8]
-~g~Whack Curly Bob!
-
-[FM2_9]
-~r~Curly Bob's dead!
-
-[FM2_10]
-~r~Curly got away!
-
-[FM2_11]
-~g~Park out the front of Luigi's Club, Curly Bob will be leaving shortly.
-
-[FM2_12]
-~r~He gave you the slip!
-
-[FM3_A]
-~w~We should take these Colombian bastards out,
-
-[FM3_B]
-~w~but while we're at war with the Triads we ain't strong enough.
-
-[FM3_C]
-~w~The Cartel has got bottomless funds from pushing that SPANK crap.
-
-[FM3_D]
-~w~If we make an open attack on them, they'll wipe the floor with us.
-
-[FM3_E]
-~w~They must be making SPANK on that big boat that Curly lead you to.
-
-[FM3_F]
-~w~So we gotta use our heads, or rather one head. Your head.
-
-[FM3_G]
-~w~I'm asking you to destroy that SPANK factory as a personal favor to me, Salvatore Leone.
-
-[FM3_H]
-~w~If you do this for me, you will be a made man, anything you want.
-
-[FM3_I]
-~w~Go and see 8-Ball, you'll need his expertise to blow-up that boat.
-
-[FM3_8A]
-~w~Yo my man! Salvatore phoned ahead,
-
-[FM3_8B]
-~w~but a job like this is gonna need a lot of fireworks.
-
-[FM3_8D]
-~w~but you know with me you get a lot of bang for your buck.
-
-[FM3_8E]
-~w~Okay, let's do this thing!
-
-[FM3_8F]
-~w~I can set this baby to detonate, but I still can't use a piece with these hands.
-
-[FM3_8G]
-~w~Here, this rifle should help you pop some heads!
-
-[FM3_4]
-~g~Stop the vehicle and let 8-Ball out!
-
-[FM3_7]
-~r~8-Ball's been iced!
-
-[FM3_8]
-~r~The guards have been alerted!
-
-[FM4_A]
-~w~It's my favorite cleaner.
-
-[FM4_B]
-~w~I'm proud of you my boy, you kicked the shit out of those grease balls.
-
-[FM4_C]
-~w~I've got just one little job for you before we can all celebrate.
-
-[FM4_D]
-~w~There's a car around the block from Luigi's club.
-
-[FM4_E]
-~w~The inside is covered in brains.
-
-[FM4_F]
-~w~We had to help some guy make up his mind and it proved a little messy.
-
-[FM4_H]
-~w~Take it to the crusher before the cops find it.
-
-[AM3]
-'PAPARAZZI PURGE'
-
-[AM4]
-'PAYDAY FOR RAY'
-
-[AM5]
-'TWO-FACED TANNER'
-
-[AM1_A]
-We have certain issues to clear up before we can continue any form of relationship,
-
-[AM1_B]
-business or otherwise. Lets lay our cards on the table.
-
-[AM1_C]
-I am Yakuza and I know you worked for Salvatore Leone's family.
-
-[AM1_D]
-I can give you work with our organization,
-
-[AM1_E]
-But first you must prove to me that your ties with the Mafia are truly broken.
-
-[AM1_G]
-Make sure he doesn't reach his club alive.
-
-[AM1_H]
-Meanwhile Maria and I will catch up on old times.
-
-[AM1_I]
-Oh..Asuka, you've got a massager.
-
-[AM1_J]
-That's not a massager.
-
-[AM1_1]
-~g~Salvatore is now leaving Luigi's!
-
-[AM1_2]
-~r~You have been spotted!
-
-[AM1_3]
-~r~You've missed Salvatore!
-
-[AM1_4]
-~r~Nice going, you scared off the target! Call yourself a hitman?
-
-[AM1_5]
-~g~Get to the Red Light District and wait for Salvatore to leave the club.
-
-[AM1_7]
-~r~Salvatore's home, safe and sipping a cocktail. Ain't no one gonna call you the 'Jackal'!
-
-[AM1_8]
-~g~Salvatore will be leaving Luigi's at about ~1~:~1~
-
-[AM2_4]
-~g~They seen you coming like a dayglow elephant!
-
-[AM3_A]
-A reporter has been nosing around.
-
-[AM3_B]
-Maria and I have taken a little holiday together until you can get rid of this perverted voyeur.
-
-[AM4_A]
-It's my handsome handyman!
-
-[AM4_B]
-Maria's all tied up at the moment but I'll tell her you called.
-
-[AM4_C]
-Who's that? Asuka? I know I've been a naughty girl but I really need to pee! OK?
-
-[AM4_D]
-It's time you met our man inside the LPD.
-
-[AM4_E]
-Here's his payment for the last little job he did for us.
-
-[AM4_F]
-He is understandably cautious.
-
-[AM4_G]
-Get to the pay phone in Torrington as quick as you can and await his instructions.
-
-[AM5_A]
-Maria and I have gone shopping.
-
-[AM5_B]
-Our source in the police has informed us that one of our drivers is a strangely animated undercover cop!
-
-[AM5_C]
-He's more or less useless out of his car, so we've tagged it with a tracer.
-
-[AM5_D]
-Make him bleed!
-
-[AM5_1]
-Tanner's on to you!
-
-[AS1]
-'BAIT'
-
-[AS2]
-'ESPRESSO-2-GO!'
-
-[AS4]
-'RANSOM'
-
-[AS1_A]
-~w~Miguel seems to think I'm mistreating him.
-
-[AS1_B]
-~w~Still, he's revealed the extent to which Catalina fears your quest for revenge.
-
-[AS2_A]
-~w~We underestimated Catalina's plans for SPANK.
-
-[AS2_B]
-~w~It reaches far beyond the Yardies selling it on the street corners.
-
-[AS2_D]
-~w~They've been selling SPANK through the street stalls.
-
-[AS2_1]
-~g~All espresso stalls in Portland wrecked!!
-
-[AS2_2]
-~g~All espresso stalls in Staunton Island wrecked!!
-
-[AS2_3]
-~g~All espresso stalls in Shoreside Vale wrecked!!
-
-[AS2_4]
-~r~The Cartel have warned their pushers!!
-
-[AS2_5]
-~g~There are still espresso stalls in Shoreside Vale and on Staunton Island!
-
-[AS2_6]
-~g~There are still espresso stalls in Shoreside Vale!
-
-[AS2_7]
-~g~There are still espresso stalls on Staunton Island!
-
-[AS2_8]
-~g~There are still espresso stalls in Portland!
-
-[AS2_9]
-~g~There are still espresso stalls in Portland and Shoreside Vale!
-
-[AS2_10]
-~g~There are still espresso stalls in Portland and on Staunton Island
-
-[AS2_12]
-~g~Cruise Liberty's districts to find ~b~Espresso-2-Go stalls!
-
-[AS3_A]
-~W~Do we tighten it some more now, or just wait for it to turn black and fall off?
-
-[AS3_B]
-~w~Give it a quick prod...
-
-[AS3_D]
-~w~My Handyman!
-
-[AS3_E]
-~w~I was bored so I came over to keep Asuka company.
-
-[AS3_1]
-~g~Find the ~r~boat~g~ and get to the ~b~marker buoy!
-
-[AS3_3]
-~g~Wait for the ~y~plane~g~ to start its approach!
-
-[AS3_5]
-~g~Collect the cargo!
-
-[AS3_4]
-~g~Use a rocket launcher to shoot the ~y~plane~g~ down!!
-
-[AS3_2]
-~b~Get to the runway marker buoys! ~y~The plane is on its final approach!!
-
-[AS3_6]
-~g~~1~ OF 8
-
-[KM1]
-'KANBU BUST-OUT'
-
-[KM3]
-'DEAL STEAL'
-
-[KM4]
-'SHIMA'
-
-[KM5]
-'SMACK DOWN'
-
-[KM1_A]
-My sister speaks highly of you,
-
-[KM1_E]
-though I am yet to be convinced that a gaijin can offer anything but disappointment.
-
-[KM1_B]
-Perhaps you could help deal with a situation that has me at a disadvantage.
-
-[KM1_F]
-Of course failure has its own disgrace.
-
-[KM1_C]
-A Yakuza Kanbu is in custody awaiting transfer for trial.
-
-[KM1_G]
-He is a valued member of the family.
-
-[KM1_H]
-Break him out of custody and get him to the dojo at Bedford Point.
-
-[KM1_D]
-We thankyou for your selfless actions. If you ever need help the dojo will be honoured to provide two men who will stand at your side.
-
-[KM1_1]
-~g~Steal a cop car!
-
-[KM1_2]
-~g~Rig the car with a bomb!
-
-[KM1_3]
-~g~Now get him to the Yakuza dojo.
-
-[KM1_5]
-~g~Okay now go to the police station.
-
-[KM1_6]
-~g~Fit the car with a bomb!
-
-[KM1_7]
-~g~Authorised police vehicles only!
-
-[KM1_9]
-~r~You did not use a car bomb to destroy the wall
-
-[KM1_10]
-~r~The Yakuza Kanbu is dead -along with your honor!
-
-[KM1_11]
-~r~You brought the heat down on yourself!
-
-[KM2_A]
-It is impossible to over-estimate the importance of etiquette in this line of work.
-
-[KM2_B]
-To my eternal shame, a man once did me a favor and I have never had the opportunity to repay his kindness.
-
-[KM2_C]
-The man's weakness is motor cars and he has requested that we acquire him certain models for his collection.
-
-[KM2_F]
-My honor demands it.
-
-[KM2_2]
-~g~Car delivered.
-
-[KM3_A]
-When trouble looms, the fool turns his back, while the wise man faces it down.
-
-[KM3_B]
-The Colombian Cartel have ignored repeated requests to leave our interests in Liberty well alone.
-
-[KM3_C]
-Now they are negotiating terms with the Jamaicans in order to humiliate us further.
-
-[KM3_D]
-They are finalizing a deal across town.
-
-[KM3_F]
-Take one of my men, steal a Yardie car, and go and pay your respects to the Colombians.
-
-[KM3_E]
-Our Honor demands that you leave no one alive.
-
-[KM3_2]
-~g~Go and pick up your contact.
-
-[KM3_3]
-~g~The meeting is being held in the hospital parking lot in Rockford!
-
-[KM3_4]
-~r~They got away!
-
-[KM3_6]
-~g~Kill them, kill them all!
-
-[KM3_8]
-~g~You need a Yardie car to get on with the job!
-
-[KM3_9]
-~r~One of the Colombians is dead, the deal's off.
-
-[KM3_10]
-~r~The contact is dead!
-
-[KM4_A]
-To be truly strong, it is important that you never show weakness.
-
-[KM4_C]
-Go and collect the money immediately, so we can enter it into the casino accounts.
-
-[KM4_1]
-I can't pay you and I wouldn't pay you if I could!
-
-[KM4_9]
-Some young gang just jacked out the place! They took everything!
-
-[KM4_2]
-You guys are useless.
-
-[KM4_10]
-What kind of Yakuza are YOU anyway...?
-
-[KM4_3]
-This ain't what I pay you goons for. If I wanted this kind of protection I'd have used the god damn police service
-
-[KM4_4]
-~g~Punish the gang responsible and retrieve the ~b~protection money~g~!
-
-[KM4_7]
-~r~The shopkeeper's breathed his last!
-
-[KM4_5]
-Donald Love wishes you to drop by his tea garden so you and he can talk.
-
-[KM4_6]
-There's the money its all there!
-
-[KM4_8]
-~g~Briefcase collected!
-
-[KM5_A]
-YOU! How fitting you should choose this moment to show your worthless face!
-
-[KM5_B]
-It would appear your attempts to dissuade the Jamaicans
-
-[KM5_B1]
-from becoming bed fellows with the Cartel were wholly inadequate!
-
-[KM5_C]
-Yardie pushers line Liberty's streets selling packets of SPANK like they were selling hotdogs!
-
-[KM5_D]
-Those Cartel pigs are laughing at us, at me!
-
-[KM5_E]
-I will give you one last chance to prove my sister's faith in you to be well founded!
-
-[KM5_F]
-Run these scumbags into the ground and wash your shame in rivers of our enemies' blood!!!
-
-[KM5_3]
-~r~You failed to kill at least ~1~ yardies.
-
-[KM5_4]
-~g~Congratulations you killed ~1~ Yardies.
-
-[KM5_5]
-~g~Congratulations you killed ~1~ Yardies. BONUS $~1~
-
-[RM1]
-'SILENCE THE SNEAK'
-
-[RM3]
-'EVIDENCE DASH'
-
-[RM4]
-'GONE FISHING'
-
-[RM5]
-'PLASTER BLASTER'
-
-[RM1_D]
-He's under armed protection in WitSec property down in Newport, some apartment behind the car park.
-
-[RM1_E]
-Torch that place, that should flush 'em out, and you'll hunt 'em down, make sure he never talks to nobody.
-
-[RM1_1]
-~g~Check out the witness protection house.
-
-[RM1_2]
-~g~Take out McAffrey!
-
-[RM2_A1]
-Hey kid over here!
-
-[RM2_A]
-An old army buddy of mine runs a business in Rockford.
-
-[RM2_D]
-He's gonna need some back-up and in return he'll give you knock-down rates on any hardware you buy.
-
-[RM2_E]
-Ray phoned ahead....but I thought there'd be more of you.
-
-[RM2_F]
-Well, three arms are better than one, so grab whatever you need.
-
-[RM2_G]
-~g~Go and check on Phil!
-
-[RM2_H]
-~r~Phil has been killed!!
-
-[RM2_L]
-Heh-hey! If I'd teamed up with you in Nicaragua maybe I'd still have my arm!
-
-[RM2_N]
-Leave the cash behind. Now get out of here, I'll handle the cops.
-
-[RM3_D]
-The evidence is being driven across town.
-
-[RM3_E]
-You are going to have to ram that car and collect each little bit of evidence as it falls out.
-
-[RM3_F]
-When you've got it all, leave it in the car and torch it.
-
-[RM3_G]
-We're both gonna do pretty well outta this kid.
-
-[RM3_1]
-~g~Leave the evidence in a car then torch the car.
-
-[RM3_4]
-~g~The Prosecution has dropped the evidence!
-
-[RM3_6]
-~r~The photos will be washed up all over Liberty!
-
-[RM3_7]
-~g~Now torch the car!
-
-[RM4_A]
-I think my partner's a rat.
-
-[RM4_C]
-He goes fishing out of his boat near the lighthouse on Portland Rock most nights.
-
-[RM4_D]
-Steal a police boat and make sure his back stabbing plans are sunk!
-
-[RM4_1]
-~g~Go and steal a police boat.
-
-[RM4_2]
-~g~Get to the lighthouse and 'rub out' Ray's partner!
-
-[RM5_A]
-You useless bastard!
-
-[RM5_A1]
-You totally messed up! My ass is on the line and you can't even kill a god damned fly.
-
-[RM5_B]
-I paid you good money to kill that witness and he ain't dead!
-
-[RM5_B1]
-And today he's gonna make a Federal Deposition!
-
-[RM5_C]
-He's being moved any second now from the Carson General Hospital up in Rockford.
-
-[RM5_D]
-If he squeals, I squeal....
-
-[RM5_E]
-so go do the job you were paid for!
-
-[RM5_1]
-~g~Intercept the ambulance.
-
-[RM5_2]
-~g~You've been spotted!!
-
-[RM5_3]
-~g~It was a decoy!
-
-[RM5_4]
-~g~Bullets won't get through that armored bodycast!!
-
-[RM5_5]
-~g~That armored bodycast is flame retardant!!
-
-[RM5_7]
-~r~Witness has been delivered!!
-
-[RM5_8]
-~g~Witness has drowned!!
-
-[LOVE2]
-'WAKA-GASHIRA WIPEOUT!'
-
-[LOVE3]
-'A DROP IN THE OCEAN'
-
-[LOVE1_A]
-First of all, let me thank you for dealing with that personal matter.
-
-[LOVE1_F]
-People will read something into anything these days.
-
-[LOVE1_D]
-They're trying to extort additional funds from me but I don't believe in re-negotiation.
-
-[LOVE1_E]
-A deal is a deal, so they'll not see a penny from me.
-
-[LOVE1_G]
-Go and rescue my friend, do whatever it takes.
-
-[LOVE1_2]
-~g~Rescue the Old Oriental Gentleman.
-
-[LOVE1_3]
-~g~Take the Old Oriental Gentleman back to Donald Love's building.
-
-[LOVE1_4]
-~g~The Old Oriental Gentleman must be in one of the garages....
-
-[LOVE1_6]
-~r~The Old Oriental Gentleman's guts are all over the street!
-
-[LOVE1_7]
-~g~The gate will only open for a Colombian Gang-car.
-
-[LOVE2_A]
-Nothing drives down real estate prices like a good old fashioned gang war,
-
-[LOVE2_B]
-apart from an outbreak of plague......but that might be going too far in this case.
-
-[LOVE2_C]
-I've noticed the Yakuza and the Colombians are far from friends.
-
-[LOVE2_D]
-Let's capitalise on this business opportunity.
-
-[LOVE2_E]
-I want you to kill the Yakuza Waka-gashira, Kenji Kasen.
-
-[LOVE2_F]
-Kenji is attending a meeting at the top of the multi-story carpark in Newport.
-
-[LOVE2_G]
-Get a Cartel gangcar and eliminate him!
-
-[LOVE2_H]
-The Yakuza must blame the Cartel for this declaration of war.
-
-[LOVE2_1]
-~g~Go to Fort Staunton and steal a Colombian gangcar!
-
-[LOVE2_2]
-~g~Now get to the ~p~multi-storey in Newport~g~ and whack Kenji!
-
-[LOVE2_3]
-~r~If you proceed without a Cartel car you will be identified!!
-
-[LOVE2_4]
-~r~The Yakuza have identified you!!
-
-[LOVE2_6]
-~r~You've killed all the witnesses!!
-
-[LOVE3_A]
-In these days of moral hypocrisy certain valuable commodities can be hard to import.
-
-[LOVE3_C]
-It will drop several packages into the water.
-
-[LOVE3_D]
-Make sure you pick them up before anyone else does.
-
-[LOVE3_1]
-~g~Get a ~r~boat~g~ and follow the ~y~plane~g~!
-
-[LOVE4]
-'GRAND THEFT AERO'
-
-[LOVE5]
-'ESCORT SERVICE'
-
-[LOVE4_A]
-Thank you for retrieving those packages, but they were only a decoy.
-
-[LOVE4_B]
-Sorry about that, but that's sometimes the way in business.
-
-[LOVE4_C]
-My real objective was hidden on the plane all along.
-
-[LOVE4_F]
-I've paid off the officials.
-
-[LOVE4_1]
-~r~The Colombian Cartel is here!!
-
-[LOVE4_2]
-~g~The package is gone! Track down the Colombians and retrieve it.
-
-[LOVE4_3]
-~g~Panlantic Construction...?
-
-[LOVE4_5]
-~g~The package should be in the plane....
-
-[LOVE4_6]
-~g~Take the lift up the tower!
-
-[LOVE5_B]
-My Oriental friend will need an escort while he takes my latest acquisition to be authenticated.
-
-[LOVE5_1]
-~g~Lets go!
-
-[LOVE5_2]
-~g~You'll need a car!
-
-[LOVE5_3]
-~g~Go ahead and scout the exit of the tunnel!
-
-[LOVE5_4]
-~r~Protect the truck!
-
-[RM6]
-'MARKED MAN'
-
-[RM6_A]
-You weren't followed? Good.
-
-[RM6_B]
-This is it, I'm way over my head and I'm starting to drown here!
-
-[RM6_D]
-I'm a marked man, so I'm getting out of here.
-
-[RM6_E]
-Get me to my flight at the airport and I'll make it worth your while!
-
-[RM6_666]
-Take care of my bullet proof Patriot. See you in Miami, Ray
-
-[CAT1]
-'RANSOM'
-
-[CAT2]
-'THE EXCHANGE'
-
-[CAT1_A]
-I've got your precious Maria. If you don't want her face to look like she fell out with the butcher.
-
-[CAT2_F]
-I broke a nail, and my hair's ruined. Can you believe it? This one cost me fifty dollars!
-
-[CAT2_G]
-I was so scared, but then I thought to myself, you're a big girl now.
-
-[CAT2_H]
-Oh we're going to have such fun, cause, you know, my sister said she wanted to come to stay with her two kids,
-
-[CAT2_I]
-because her husband's playing around again and..
-
-[CAT1_E]
-XXXX
-
-[CAT1_F]
-Get to Catalina before the time runs out!
-
-[CAT_MON]
-~g~You don't have enough money yet. You need $500,000.
-
-[BITCH_D]
-~g~Maria's dead!
-
-[WEATHER]
-FORCE WEATHER
-
-[WEATHE2]
-WEATHER NORMAL
-
-[8001]
-You failed miserably!!
-
-[1000]
-YOU ARE DEAD
-
-[1001]
-YOU ARE DEAD
-
-[1002]
-YOU ARE DEAD
-
-[1003]
-YOU ARE DEAD
-
-[1004]
-YOU ARE DEAD
-
-[1005]
-BUSTED
-
-[1006]
-BUSTED
-
-[1007]
-BUSTED
-
-[1008]
-BUSTED
-
-[1009]
-BUSTED
-
-[GA_4]
-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_7]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
-
-[GA_8]
-Use the detonator to activate the bomb.
-
-[GA_9]
-You collected ~1~ out of 10 special cars
-
-[GA_10]
-Nice one. Here's your $~1~
-
-[GA_11]
-We got these wheels already. It's worthless to us!
-
-[GA_12]
-Bomb armed
-
-[GA_13]
-Delivered like a pro. Complete the list and there'll be a bonus for you.
-
-[GA_14]
-All the cars. NICE! Here's a little something.
-
-[GA_15]
-Hope you like the new color.
-
-[GA_16]
-Respray is complementary.
-
-[GA_19]
-We're not interested in that model.
-
-[GA_20]
-We got more of these than we can shift. Sorry man, no deal.
-
-[CR_1]
-Crane cannot lift this vehicle.
-
-[PU_MONY]
-You don't have enough cash.
-
-[CO_ALL]
-You got all of them. Here's a little something...
-
-[PAUSED]
-GAME PAUSED
-
-[HEALTH1]
-Get outta here! You're perfectly healthy.
-
-[HEALTH2]
-Healthcare costs.
-
-[HEALTH3]
-I'll just fix you up.
-
-[HEALTH4]
-That will be $250.
-
-[FEB_STA]
-Stats
-
-[FEB_BRI]
-Briefs
-
-[FEB_CON]
-Controls
-
-[FEB_AUD]
-Audio
-
-[FEB_DIS]
-Display
-
-[FEB_LAN]
-Language
-
-[FEP_STA]
-STATS
-
-[FEP_BRI]
-BRIEFS
-
-[FEP_CON]
-CONTROLS
-
-[FEP_AUD]
-AUDIO
-
-[FEP_DIS]
-DISPLAY
-
-[FEP_LAN]
-LANGUAGE
-
-[FEF_ST1]
-Who's the bad man?
-
-[FEF_ST2]
-How much havoc have you caused
-
-[FEF_BR1]
-Lost the plot?
-
-[FEF_CO1]
-Need more control, freak?
-
-[FEF_CO2]
-Choose the best contoller set-up for your playing style
-
-[FEF_SA1]
-Keep your place in the pile!
-
-[FEF_SA2]
-Save and load your games
-
-[FEF_AU1]
-Pump up the volume!
-
-[FEF_AU2]
-Select a radio station and sound effect
-
-[FEF_DI1]
-Change the game!
-
-[FEF_DI2]
-Customize the game for your TV
-
-[FEF_LA1]
-What you talking about willis?
-
-[FEF_LA2]
-Choose your preferred parlance
-
-[FEB_PMB]
-Previous Mission Briefs:
-
-[FEC_NA]
-NA
-
-[FEC_CWL]
-Cycle Weapon left
-
-[FEC_CWR]
-Cycle Weapon right
-
-[FEC_LOF]
-Look forward
-
-[FEC_TAR]
-Target
-
-[FEC_MOV]
-Movement
-
-[FEC_CAM]
-Camera modes
-
-[FEC_PAU]
-Pause
-
-[FEC_ENV]
-Enter vehicle
-
-[FEC_JUM]
-Jump
-
-[FEC_ATT]
-Attack or Fire weapon
-
-[FEC_RUN]
-Run
-
-[FEC_FPC]
-First person camera
-
-[FEC_LL]
-Look left
-
-[FEC_LB1]
-Look
-
-[FEC_LB2]
-behind
-
-[FEC_LB]
-Look behind
-
-[FEC_LR]
-Look right
-
-[FEC_HOR]
-Horn
-
-[FEC_VES]
-Vehicle control
-
-[FEC_RSC]
-Radio station cycle
-
-[FEC_BRA]
-Brake or Reverse
-
-[FEC_HAB]
-Hand brake
-
-[FEC_CAW]
-Car weapon
-
-[FEC_ACC]
-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:
-
-[FEA_ST]
-Stereo
-
-[FEA_MNO]
-Mono
-
-[FEA_NON]
-None
-
-[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]
-CHATTERBOX 109
-
-[FED_DBG]
-Menu Debug
-
-[FED_RID]
-Reload IDE
-
-[FED_RIP]
-Reload 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]
-Debug Streaming Requests
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FEM_MCM]
-Memory Card Menu
-
-[FEM_RMC]
-Register MemCard One
-
-[FEM_TFM]
-Test Format MemCard One
-
-[FEM_TUM]
-Test UnFormat MemCard One
-
-[FEM_CRD]
-Create Root Dir
-
-[FEM_CLI]
-Create And Load Icons
-
-[FEM_FFF]
-Fill First File with Guff
-
-[FEM_SOG]
-Save Only The Game
-
-[FEM_CES]
-Check Every 0kB4 Save
-
-[FEM_STG]
-Save The Game
-
-[FEM_STS]
-Save The Game under GTA3 name
-
-[FEM_CPD]
-Create copy protected mag directory
-
-[FEM_MC2]
-Memory Card Menu 2
-
-[FEM_TS]
-Test Save:
-
-[FEM_TL]
-Test Load:
-
-[FEM_TD]
-Test Delete:
-
-[PL_STAT]
-Player stats
-
-[PE_WAST]
-People you've wasted
-
-[PE_WSOT]
-People wasted by others
-
-[CAR_EXP]
-Cars exploded
-
-[TM_BUST]
-Times busted
-
-[M_WASTE]
-Civilian males wasted
-
-[F_WASTE]
-Civilian females wasted
-
-[PIG_WST]
-Cops wasted
-
-[GNG_WST]
-Gang members wasted
-
-[MED_WST]
-Medics wasted
-
-[FIRE_WS]
-Firemen wasted
-
-[DED_CRI]
-Criminals wasted
-
-[DED_DED]
-Deadbeats wasted
-
-[DED_HOK]
-Hookers wasted
-
-[HEL_DST]
-Helicopters destroyed
-
-[PER_COM]
-Percentage completed
-
-[KGS_EXP]
-Kgs of explosives used
-
-[ACCURA]
-Accuracy
-
-[ELBURRO]
-Best Turismo time in secs
-
-[CAR_CRU]
-Cars crushed
-
-[HED_EX]
-Heads exploded
-
-[TM_DED]
-Hospital visits
-
-[DAYSPS]
-Days passed in game
-
-[MMRAIN]
-Mm rain fallen
-
-[MXCARD]
-Max. INSANE Jump dist. (ft)
-
-[MXCARJ]
-Max. INSANE Jump height (ft)
-
-[MXCARDM]
-Max. INSANE Jump dist. (m)
-
-[MXCARJM]
-Max. INSANE Jump height (m)
-
-[MXFLIP]
-Max. INSANE Jump flips
-
-[MXJUMP]
-Max. INSANE Jump rotation
-
-[BSTSTU]
-Best INSANE stunt so far:
-
-[INSTUN]
-Insane stunt
-
-[PRINST]
-Perfect insane stunt
-
-[DBINST]
-Double insane stunt
-
-[DBPINS]
-Perfect double insane stunt
-
-[TRINST]
-Triple insane stunt
-
-[PRTRST]
-Perfect triple insane stunt
-
-[QUINST]
-Quadruple insane stunt
-
-[PQUINS]
-Perfect quadruple insane stunt
-
-[NOSTUC]
-No INSANE stunts completed
-
-[NOUNIF]
-Unique Jumps completed
-
-[NOUNGM]
-Total Unique Jumps
-
-[NMISON]
-Mission attempts
-
-[NMMISP]
-Missions passed
-
-[PASDRO]
-Passengers dropped off
-
-[MONTAX]
-Cash made in taxi
-
-[DAYPLC]
-Daily police spending
-
-[CRIMRA]
-Criminal rating:
-
-[GMSTOR]
-Game Store
-
-[PREBRF]
-Previous Briefs
-
-[CNTLS]
-Controls
-
-[MUSMEN]
-Music/SFX
-
-[GAMSET]
-Game Settings
-
-[LANGUA]
-Language
-
-[DSPLAY]
-Display
-
-[DEBUGM]
-Debug Menu
-
-[QUITOP]
-Quit Options
-
-[CONTRL]
-Control Configuration
-
-[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]
-GoBack
-
-[SOUND]
-SOUND
-
-[MUSVOL]
-Music Volume
-
-[SFXVOL]
-SFX Volume
-
-[SCROPT]
-SCREEN OPTIONS
-
-[CTRSCR]
-Center Screen
-
-[SCRFOR]
-Screen format
-
-[GMSVLQ]
-GAME SAVE-LOAD-QUIT
-
-[GMREST]
-Restart Game
-
-[NOGMSV]
-Can save only at your hideout.
-
-[DLFILE]
-Delete Grand Theft Auto III Files
-
-[CHFILE]
-CHOOSE FILE TO LOAD
-
-[CHFIDL]
-CHOOSE FILE TO DELETE
-
-[SVCONF]
-SAVE CONFIRMATION
-
-[LANGSL]
-LANGUAGE SELECTION
-
-[ENGLIS]
-English
-
-[GERMAN]
-German
-
-[ITALIA]
-Italian
-
-[FRENCH]
-French
-
-[SPAIN]
-Spanish
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[PARSHP]
-Parse Heap
-
-[DBGFON]
-CTheScripts::DbgFlag On
-
-[DBFOFF]
-CTheScripts::DbgFlag Off
-
-[BGWHON]
-Big White Debug Light Switched On
-
-[BGWOFF]
-Big White Debug Light Switched Off
-
-[DSTRON]
-Debug Streaming Requests On
-
-[DSTROFF]
-Debug Streaming Requests Off
-
-[PDRGON]
-ShowPedRoadGroups On
-
-[PRGOFF]
-ShowPedRoadGroups Off
-
-[CRRGON]
-ShowCarRoadGroups On
-
-[CRGOFF]
-ShowCarRoadGroups Off
-
-[CLZOON]
-Show Cull Zones On
-
-[CLZOOF]
-Show Cull Zones Off
-
-[SHPLON]
-gbShowCollisionPolys On
-
-[SHPLOF]
-gbShowCollisionPolys Off
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[FORMM1]
-FormatMemCard 1 (teststuff)
-
-[UNFRM1]
-UnFormatMemCard 1 (teststuff)
-
-[GORLEV]
-Gore Level
-
-[SICASS]
-Sick Fuck
-
-[SICSIC]
-Sick Fucker
-
-[SCASSL]
-Sick Fuck Selected
-
-[SCSCSL]
-Sick Fucker Selected
-
-[PRVMEN]
-Previous Mission Briefs
-
-[FORMEN]
-Format Menu
-
-[MEMTST]
-MemoryCardTest screen
-
-[REGCAR]
-Register MemoryCard One
-
-[TEFONE]
-Test Format MemCard One
-
-[TEUFON]
-Test UnFormat MemCard One
-
-[CRROOT]
-CreateRootDir
-
-[CRLDIC]
-Create and Load Icons
-
-[FLFSGF]
-Fill First File With Guff
-
-[PUSAVE]
-Save Only the game
-
-[CHEVOK]
-CheckEveryOkB4Save
-
-[SVGMON]
-SaveTheGame
-
-[CNTSAV]
-Can't save the game. On a mission.
-
-[CNCSAV]
-Can't save the game. You're in a car
-
-[CRMGSV]
-Create copy protected magazine directory
-
-[MGSVCN]
-MagazineDirectory Created
-
-[MGSVNC]
-MagazineDirectory Not Created
-
-[YES]
-Yes
-
-[NO]
-No
-
-[X]
-x
-
-[LAST]
-Last message.
-
-[FEDS_XB]
-Select
-
-[FEDS_ST]
-START button - RESUME
-
-[FEST_OO]
-out of
-
-[FEC_TUC]
-Turret control
-
-[FEC_SM3]
-Special mission trigger (R3 button)
-
-[FEC_RS3]
-Radio station cycle (L3 button)
-
-[FEC_HO3]
-Horn (L3 button)
-
-[DIAB1]
-'TURISMO'
-
-[DIAB2]
-'I SCREAM, YOU SCREAM'
-
-[DIAB3]
-'TRIAL BY FIRE'
-
-[DIAB4]
-'BIG'N'VEINY'
-
-[DIAB1_A]
-El Burro wants to offer you an opportunity. Get to the payphone in Hepburn Heights if you want more info.
-
-[DIAB1_C]
-You drive a mean race. Drop by the payphone again and 'El Burro' may have some work for you.
-
-[DIAB1_1]
-~g~3..2..1.. GO GO GO!
-
-[DIAB1_4]
-~g~Get a fast car and get to the starting grid.
-
-[DIAB1_3]
-~r~You couldn't win a raffle, LOSER!
-
-[DIAB1_2]
-~g~Congratulations you won, with an incredible time of ~1~ seconds.
-
-[FIRST]
-~g~1st
-
-[SECOND]
-~g~2nd
-
-[THIRD]
-~g~3rd
-
-[FOURTH]
-~g~4th
-
-[DIAB2_1]
-~g~Pick up the briefcase in Harwood.
-
-[DIAB2_2]
-~g~Find an icecream van.
-
-[DIAB2_3]
-~g~Park the icecream van down at Atlantic Quays.
-
-[DIAB2_4]
-~g~Press the ~w~~k~~VEHICLE_HORN~ button ~g~to activate the Icecream jingle.
-
-[DIAB2_6]
-~g~Press the ~w~~k~~VEHICLE_HORN~ button ~g~to activate the Icecream jingle.
-
-[DIAB2_7]
-~g~Press the ~w~~k~~VEHICLE_HORN~ button ~g~to activate the Icecream jingle.
-
-[DIAB2_5]
-~g~Exit the van then use the remote to detonate the Icecream van.
-
-[YD1]
-'BLING-BLING SCRAMBLE'
-
-[YD2]
-'UZI RIDER'
-
-[YD3]
-'GANGCAR ROUND-UP'
-
-[YD4]
-'KINGDOM COME'
-
-[YD_P]
-King Courtney would like a word. Get to the payphone in Aspatria!!
-
-[YD1_A]
-~w~This is King Courtney.
-
-[YD1_A1]
-~w~My Yardie posse could do with a driver and you've got a reputation for hot moves.
-
-[YD1_B]
-~w~Get to the waste ground opposite the stadium in a car and wait for the other hopefuls.
-
-[YD1_C]
-~w~I've got men watching checkpoints all over Staunton.
-
-[YD1_D]
-~w~First driver to a checkpoint gets a Grand, then it's on to the next stop.
-
-[YD1_D1]
-~w~If you get more checkpoints than any other driver, I could have some work for you.
-
-[YD1_E]
-~g~Prepare to race!
-
-[YD1_F]
-~g~You jumped the start -I like your style!!
-
-[YD1_G]
-~r~This is a CAR RACE. You need a CAR fool!
-
-[YD1GO]
-~g~GO!!
-
-[YD1_1]
-~r~1
-
-[YD1_2]
-~r~2
-
-[YD1_3]
-~r~3
-
-[YD1_BON]
-$1000!!
-
-[Y1_1ST]
-~g~You came first with ~1~ successful checkpoints!
-
-[Y1_2ND]
-~y~2nd with ~1~ successful checkpoints. ~y~Close, but you just ain't the best!
-
-[Y1_3RD]
-~r~3rd with ~1~ successful checkpoints. ~r~I thought you said you were good!
-
-[Y1_LAST]
-~r~You were last! ~r~You wasted my time FOOL!
-
-[Y1_J1ST]
-~y~Joint 1st with ~1~ successful checkpoints. ~y~Good, but you gotta be the best to drive for Queen Lizzy!
-
-[Y1_J2ND]
-~r~Joint 2nd with ~1~ successful checkpoints. You drive like a crazed monkey!
-
-[Y1JLAST]
-~r~Joint last! You talk like a driver, but you drive like a talker!
-
-[Y1_TEST]
-CAR IN WATER!!
-
-[YD2_A]
-~w~I need to see if you're capable of doing my dirty work.
-
-[YD2_A1]
-~w~See if you can be trusted.
-
-[YD2_B]
-~w~Two of my boys will be there any second to take you for a ride,
-
-[YD2_B1]
-~w~see if you are who you say you are.
-
-[YD2_C]
-~w~We're going for a little ride into Hepburn Heights, whack us some filthy Diablos been dissing Queen Lizzy.
-
-[YD2_CC]
-~w~Here, you'll need a 'piece'.
-
-[YD2_D]
-~w~You do the driving and shooting. We'll make sure you don't get cold feet.
-
-[YD2_E]
-~w~Let's drive!!
-
-[YD2_F]
-~r~He's bailed out on us, cap his yellow ass!!!
-
-[YD2_G1]
-~w~Hepburn Heights..Let's kill me some filthy Diablos...
-
-[YD2_G2]
-~w~But remember, ~r~You don't leave this car!!
-
-[YD2_H]
-~w~OK, Get us back to Yardie turf! GO GO GO!!
-
-[YD2_L]
-~w~You did good, Reaperman!
-
-[YD2_M]
-~r~He's wrecked my car! Waste him!
-
-[YD2_N]
-~w~Get your ass back in this car!
-
-[YD3_A]
-I want you to boost some gang cars
-
-[YD3_A1]
-so we can do hits on our enemies' turf.
-
-[YD3_B]
-I need a Mafia Sentinel,
-
-[YD3_B1]
-a Yakuza Stinger and a
-
-[YD3_B2]
-Diablo Stallion so we can hit any gang in Liberty.
-
-[YD3_C]
-Drop them off at the garage in Newport and remember,
-
-[YD3_C1]
-they're no use to us wrecked!!
-
-[YD3_D]
-Spare text label
-
-[YD3_E]
-~r~You've already boosted a diablo gangcar!
-
-[YD3_F]
-~r~You've already boosted a Mafia gangcar!
-
-[YD3_G]
-~r~You've already boosted a Yakuza gangcar!
-
-[YD3_H]
-~g~Diablo gangcar boosted!
-
-[YD3_I]
-~g~Mafia gangcar boosted!
-
-[YD3_J]
-~g~Yakuza gangcar boosted!
-
-[YD3_K]
-~r~The car's nearly wrecked! Get it repaired!
-
-[YD3_L]
-~g~Take it to the ~p~garage!
-
-[YD3_M]
-~r~You've flipped it! Get another one!
-
-[YD4_A]
-Listen up!
-
-[YD4_A1]
-Get over to Bedford Point.
-
-[YD4_A2]
-There's a stash in an old car I need pronto!
-
-[YD4_B]
-LETTER: I hear you've been a busy boy. Well I've been a busy girl.
-
-[YD4_C]
-I think it's time you witnessed the real power of 'SPANK'! Besos y fuderes, Catalina, xxx.
-
-[YD4_D]
-PS: DIE PEEG DOG, DIE!!
-
-[YD4_1]
-~g~SPANKED-up madmen!
-
-[YD4_2]
-~g~Destroy the madmens' vans!!
-
-[HM_1]
-'UZI MONEY'
-
-[HM_2]
-'TOYMINATOR'
-
-[HM_3]
-'RIGGED TO BLOW'
-
-[HM_5]
-'RUMBLE'
-
-[HOOD1_A]
-Get to the payphone in Wichita Gardens and we'll talk business.
-
-[HM1_A]
-Yo! This is D-Ice of the Red Jacks!
-
-[HM1_C]
-These young punks, they come onto the streets and they got nothing but guns and SPANK on their minds.
-
-[HM1_3]
-~g~The 'Nines' walk their turf in Wichita Gardens.
-
-[HM2_3]
-If you hit a vehicle's wheels the RC buggy will detonate!
-
-[HM2_4]
-If it goes out of range the RC buggy will detonate!
-
-[HM2_5]
-~r~Out of range!
-
-[HM3_1]
-~g~Get to the garage but watch out if the car takes too much damage it will blow!
-
-[HM3_2]
-~g~Take the car back it has to be in perfect condition - no damage!
-
-[HM3_3]
-~g~Get the car repaired!
-
-[HM4_D]
-~g~Get a vehicle!
-
-[HM4_E]
-TEXT NO LONGER REQUIRED
-
-[HM4_1]
-~g~Head to the location where the cargo is scattered, you need to collect 30 pieces of bullion.
-
-[HM4_2]
-~g~Remember when the vehicle becomes too heavy and slow goto the garage and drop off the cargo.
-
-[HM5_3]
-~r~You were told to use a baseball bat only!
-
-[HM5_4]
-~r~Your contact's dead!
-
-[MEA1]
-'THE CROOK'
-
-[MEA2]
-'THE THIEVES'
-
-[MEA3]
-'THE WIFE'
-
-[MEA4]
-'HER LOVER'
-
-[MEAT1_A]
-A friend said you could fix some problems I got. Get to the payphone in Trenton if you think you can help.
-
-[MEA1_B3]
-~g~Go and meet the Bank Manager.
-
-[MEA1_B6]
-~g~Take the car to the crusher to get rid of evidence, get out of the car and the crane will pick it up.
-
-[MEA1_1]
-~r~The Bank Manager's dead!
-
-[MEA1_2]
-~r~You were told to crush the vehicle!
-
-[MEA1_3]
-~g~Get out of the car!
-
-[MEA1_4]
-~r~You have left the Bank Manager behind!
-
-[MEA2_B3]
-~g~Go and meet the thieves.
-
-[MEA2_B4]
-~g~Take them to the Bitch'n' Dog Food Factory
-
-[MEA2_B6]
-~g~Get the car resprayed to get rid of any evidence.
-
-[MEA2_1]
-~r~You were told to crush the vehicle!
-
-[MEA2_2]
-~r~A thief's dead!
-
-[MEA2_4]
-~r~You have left a thief behind!
-
-[MEA3_B3]
-~g~Go and collect Mrs. Chonks
-
-[MEA3_B6]
-~g~Take the car and dump it into the sea, this will get rid of any evidence.
-
-[MEA3_1]
-~r~The wife's dead!
-
-[MEA3_2]
-~r~You were supposed to dump the vehicle in the water!
-
-[MEA3_3]
-~r~You have left his wife behind!
-
-[MEA4_B3]
-~g~Pick up his wife's lover
-
-[MEA4_B6]
-It's far too late for that Marty. You had your chance, but now I'm taking over the business...
-
-[MEA4_1]
-~r~Carlos is dead!
-
-[MEA4_3]
-~r~You have left Carlos the loan shark behind!
-
-[LOOK_A]
-Press and hold the ~h~~k~~VEHICLE_LOOKLEFT~ button ~w~or the ~h~~k~~VEHICLE_LOOKRIGHT~ button~w~ to look ~h~left~w~ or ~h~right~w~ while in a vehicle. Press both to look ~h~behind~w~.
-
-[LOVE6_1]
-~g~Now lead the cops away from the warehouse!
-
-[LOVE6_2]
-~r~You failed to lead the police far enough away!
-
-[RM4_3]
-~r~Ray's partner has escaped!
-
-[RM6_C]
-The CIA seem to have a vested interest in SPANK
-
-[RM6_C1]
-and they don't like us screwing with the Cartel.
-
-[C_PASS]
-THREAT ELIMINATED!
-
-[CTUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Vigilante missions on or off.
-
-[CTUTOR2]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Vigilante missions on or off.
-
-[COPCART]
-~g~You have ~1~ seconds to return to a police vehicle before the mission ends.
-
-[C_FAIL]
-Vigilante mission ended!
-
-[C_CANC]
-~r~Vigilante mission cancelled!
-
-[C_ESCP]
-~r~The suspect has escaped!
-
-[C_TIME]
-~r~Your time as a law enforcer is over!
-
-[C_VIGIL]
-VIGILANTE BONUS!!
-
-[A_FAIL2]
-~r~Your lack of urgency has been fatal to the patient!
-
-[A_FAIL3]
-~r~The patient is dead!!
-
-[A_PASS]
-Rescued!
-
-[F_FAIL2]
-~r~You're too late!
-
-[A_COMP2]
-You will never get tired!
-
-[RM2_M]
-If you need any firepower just drop by and take what you need from the lockers.
-
-[HEAL_A]
-Your ~h~health~w~ is displayed in orange in the top right of the screen.
-
-[YD1_CNT]
-~1~ of 15!
-
-[FM1_9]
-~g~Thats the party up ahead, drop Maria off out front.
-
-[FM1_Y]
-~w~You know I enjoyed myself for the first time in a long while, and you treated me really good. With respect and everything.
-
-[FM1_AA]
-~w~Oh, I'd better go. I'll see you around I hope.
-
-[NOCONTE]
-Please re-insert the analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2) in controller port 1 to continue
-
-[WRCONT]
-The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto III requires an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2).
-
-[WRCONTE]
-The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto III requires an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2).
-
-[WRONGCD]
-Incorrect disc. Please insert correct disc.
-
-[NOCD]
-The disc tray is empty. Please insert disc.
-
-[OPENCD]
-The disc tray is open. Please close the disc tray.
-
-[CDERROR]
-Error reading the Grand Theft Auto III DVD
-
-[RESTART]
-Starting new game
-
-[GA_3]
-No more freebies. $1000 to respray!
-
-[GA_1]
-Whoa! I don't touch nothing THAT hot!
-
-[GA_1A]
-Come back when you're not so busy...
-
-[S_PROM2]
-The garage next door can store one vehicle when you save your game.
-
-[STOCK]
-out of stock
-
-[FM1_O]
-~w~He's at the rail station at the Chinatown waterfront I think.
-
-[EBAL_B]
-This is the place right here, let's get off the street and find a change of clothes!
-
-[EBAL_G]
-This is Luigi's club. Let's go round the back and use the service door.
-
-[AM4_3]
-You must be Asuka's new errand boy!
-
-[AM4_4]
-You got the money? Is it all here?
-
-[AM4_5]
-I know what you're thinking, another bent cop.
-
-[AM4_6]
-Well, it's a bent world.
-
-[AM4_7]
-Just 'cause I lost a few partners, those suckers from internal affairs have started sniffing around.
-
-[AM4_8]
-Reckon they can smell me.
-
-[AM4_9]
-Well, this city is just one big open sewer.
-
-[AM4_10]
-But I'm gonna need some non-union help.
-
-[AM4_11]
-And if you're interested you'll know where to find me.
-
-[CAM_A]
-Press the ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~ button~w~ to change ~h~camera ~w~modes when on foot or in a vehicle.
-
-[CAM_B]
-Press the ~h~directional button up~w~ and ~h~down~w~ to change ~h~camera ~w~modes when on foot or in a vehicle.
-
-[KM2_1]
-~g~Repair the car, it's gotta be mint.
-
-[LM3_6]
-Joey...
-
-[LM3_6A]
-Am I goin' to play with your big end again?
-
-[LM3_9A]
-there might be some work for you.
-
-[LM3_9B]
-Alright?
-
-[AWAY2]
-~r~They got away.
-
-[AWAY]
-~r~He's clean out of here!
-
-[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_7B]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
-
-[BAT1]
-~g~Pick up the bat!
-
-[EBAL_O]
-If you don't mess this up, maybe there be more work for you. Now get outta here!
-
-[HELP9_B]
-Press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire~w~ the sniper rifle.
-
-[HELP9_C]
-Press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire~w~ the sniper rifle.
-
-[JM6_8]
-~r~You've lost all the robbers!
-
-[COLT_IN]
-The Pistol is now in stock at Ammunation!
-
-[TAXI2]
-~r~You're out of time!
-
-[TAXI3]
-~r~Your passenger fled in terror!
-
-[TAXI7]
-~r~Your car is trashed, get it repaired.
-
-[TAXI4]
-Fare complete!
-
-[TAXI5]
-SPEED BONUS!!
-
-[TAXI6]
-Taxi mission over
-
-[FRANGO]
-~g~Salvatore wants you to help Toni deal with the Triads first!
-
-[PAGEB12]
-Police Bribe delivered to hideout
-
-[PAGEB13]
-Health delivered to hideout
-
-[PAGEB14]
-Adrenaline delivered to hideout
-
-[KM1_4]
-~g~You need a cop car to do the job!
-
-[CAT1_B]
-bring $500,000 to the Villa at Cedar Grove.
-
-[JM2_C]
-He's got a noodle stand down in China Town.
-
-[RM6_1]
-Here's a key to a lock-up.
-
-[RM6_2]
-You'll find some cash and some 'supplies' I'd stashed in case things got tight.
-
-[RM6_3]
-See y'around.
-
-[FE_INIP]
-Initialising and loading Pause Menu... Please wait.
-
-[FESZ_CA]
-Cancel
-
-[FESZ_QU]
-Quit
-
-[FESZ_L1]
-Game saved successfully!
-
-[FESZ_L2]
-Your saved filename is:
-
-[FESZ_OK]
-OK
-
-[FES_LGA]
-Load Game
-
-[FES_NGA]
-New Game
-
-[FES_CAN]
-Cancel
-
-[FESZ_QL]
-All unsaved progress in your current game will be lost. Proceed with loading?
-
-[FESZ_QD]
-Proceed with deleting this saved game?
-
-[FESZ_QO]
-Proceed with overwriting this saved game?
-
-[FESZ_QR]
-Are you sure you want to start a new game? All progress since the last save game will be lost. Proceed?
-
-[FESZ_QS]
-PROCEED WITH SAVE ?
-
-[T4X4_1]
-'PATRIOT PLAYGROUND'
-
-[T4X4_2]
-'A RIDE IN THE PARK'
-
-[T4X4_3]
-'GRIPPED!'
-
-[MM_1]
-'MULTISTOREY MAYHEM'
-
-[T4X4_1A]
-~g~You have ~y~5 minutes~g~ to collect ~y~15~g~ checkpoints. ~g~You may collect them in ~y~ANY ORDER.
-
-[T4X4_1B]
-~1~ of 15!
-
-[T4X4_1C]
-~y~PASS THROUGH~g~ the first checkpoint to start the timer. ~g~Each checkpoint will credit you with ~y~20 SECONDS~g~.
-
-[T4X4_2A]
-~g~You have ~y~2 minutes~g~ to collect ~y~12~g~ checkpoints!! ~g~You may collect them in ~y~ANY ORDER.
-
-[T4X4_2B]
-~1~ of 12!
-
-[T4X4_2C]
-~y~PASS THROUGH~g~ the first checkpoint to start the timer. ~g~Each checkpoint will credit you with ~y~10 SECONDS~g~.
-
-[T4X4_3A]
-~g~You have ~y~5 minutes~g~ to collect ~y~20~g~ checkpoints. ~g~You may collect them in ~y~ANY ORDER.
-
-[T4X4_3B]
-~y~PASS THROUGH~g~ the first checkpoint to start the timer. ~g~Each checkpoint will credit you with ~y~15 SECONDS~g~.
-
-[T4X4_3C]
-~1~ of 20!
-
-[T4X4_F]
-~r~You bailed! Too tough for you?!
-
-[MM_1_A]
-~g~You have ~y~2 minutes~g~ to collect ~y~20 checkpoints~g~ in the multistorey! ~g~You may collect them in ~y~ANY ORDER.
-
-[MM_1_B]
-~1~ of 20!
-
-[MM_1_C]
-~g~That's 20 seconds, plus ~y~5 SECONDS~g~ for each checkpoint. ~g~The timer will start ~y~IMMEDIATELY.
-
-[FM2_14]
-~r~You got too close and spooked Curly!
-
-[FM2_15]
-~g~Don't get too close or Curly will suspect something!
-
-[UPSIDE]
-~r~You flipped your wheels!
-
-[FM2_16]
-SPOOKOMETER:
-
-[LM3_11]
-~g~Misty won't ride in a bus get another vehicle!
-
-[LANDSTK]
-Landstalker
-
-[IDAHO]
-Idaho
-
-[STINGER]
-Stinger
-
-[LINERUN]
-Linerunner
-
-[PEREN]
-Perennial
-
-[SENTINL]
-Sentinel
-
-[PATRIOT]
-Patriot
-
-[FIRETRK]
-Firetruck
-
-[TRASHM]
-Trashmaster
-
-[STRETCH]
-Stretch
-
-[MANANA]
-Manana
-
-[INFERNS]
-Infernus
-
-[BLISTA]
-Blista
-
-[PONY]
-Pony
-
-[MULE]
-Mule
-
-[CHEETAH]
-Cheetah
-
-[AMBULAN]
-Ambulance
-
-[FBICAR]
-Fbi Car
-
-[MOONBM]
-Moonbeam
-
-[ESPERAN]
-Esperanto
-
-[TAXI]
-Taxi
-
-[KURUMA]
-Kuruma
-
-[BOBCAT]
-Bobcat
-
-[WHOOPEE]
-Mr Whoopee
-
-[BFINJC]
-BF Injection
-
-[POLICAR]
-Police
-
-[ENFORCR]
-Enforcer
-
-[SECURI]
-Securicar
-
-[BANSHEE]
-Banshee
-
-[PREDATR]
-Predator
-
-[BUS]
-Bus
-
-[RHINO]
-Rhino
-
-[BARRCKS]
-Barracks OL
-
-[TRAIN]
-Train
-
-[HELI]
-Helicopter
-
-[DODO]
-Dodo
-
-[COACH]
-Coach
-
-[CABBIE]
-Cabbie
-
-[STALION]
-Stallion
-
-[RUMPO]
-Rumpo
-
-[RCBANDT]
-RC Bandit
-
-[BELLYUP]
-Triad Fish Van
-
-[MRWONGS]
-Mr Wongs
-
-[MAFIACR]
-Mafia Sentinel
-
-[YARDICR]
-Yardie Lobo
-
-[YAKUZCR]
-Yakuza Stinger
-
-[DIABLCR]
-Diablo Stallion
-
-[COLOMCR]
-Cartel Cruiser
-
-[HOODSCR]
-Hoods Rumpo XL
-
-[AEROPL]
-Aeroplane
-
-[SPEEDER]
-Speeder
-
-[REEFER]
-Reefer
-
-[PANLANT]
-Panlantic
-
-[FLATBED]
-Flatbed
-
-[YANKEE]
-Yankee
-
-[BORGNIN]
-Borgnine
-
-[TOYZ]
-TOYZ
-
-[FEST_DF]
-Dist. travelled on foot (miles)
-
-[FEST_DC]
-Dist. travelled by car (miles)
-
-[FESTDFM]
-Distance travelled on foot (m)
-
-[FESTDCM]
-Distance travelled by car (m)
-
-[FEST_R1]
-Patriot Playground in secs
-
-[FEST_R2]
-A Ride In The Park in secs
-
-[FEST_R3]
-Gripped! in secs
-
-[FEST_RM]
-Multistorey Mayhem in secs
-
-[FEST_LS]
-People saved in an Ambulance
-
-[FEST_CC]
-Criminals killed on Vigilante Mission
-
-[FEST_FE]
-Total fires extinguished
-
-[FEST_LF]
-Longest flight in Dodo
-
-[FEST_BD]
-Best time for bomb defusal
-
-[FEST_RP]
-Rampages passed
-
-[FEST_MP]
-Missions passed
-
-[FEST_BB]
-Bling-bling Scramble:
-
-[FEST_H0]
-Most checkpoints
-
-[FEST_GC]
-Gang Cars Totalled:
-
-[FEST_H1]
-Diablo destruction
-
-[FEST_H2]
-Mafia Massacre
-
-[FEST_H3]
-Casino Calamity
-
-[FEST_H4]
-Rumpo Wrecker
-
-[USJI1]
-TEXT NO LONGER REQUIRED
-
-[USJI2]
-TEXT NO LONGER REQUIRED
-
-[USJI3]
-TEXT NO LONGER REQUIRED
-
-[USJ]
-UNIQUE STUNT BONUS!
-
-[SPRAY]
-Drive your vehicle into the spray shop to lose your ~h~wanted level~w~, ~h~repair ~w~and ~h~respray ~w~your vehicle. Cost - ~h~$1000.
-
-[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_8D]
-Press the~h~ ~k~~PED_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!
-
-[RATNG1]
-Pickpocket
-
-[RATNG2]
-Bully
-
-[RATNG3]
-Thug
-
-[RATNG4]
-Hustler
-
-[RATNG5]
-Goon
-
-[RATNG6]
-Wheelman
-
-[RATNG7]
-Hired muscle
-
-[RATNG8]
-Fixer
-
-[RATNG9]
-Associate
-
-[RATNG10]
-Cleaner
-
-[RATNG11]
-Assassin
-
-[RATNG12]
-Right-hand man
-
-[RATNG13]
-Executioner
-
-[RATNG14]
-Capo
-
-[RATNG15]
-Boss
-
-[1010]
-~r~Your vehicle is upside down
-
-[1011]
-~r~Your vehicle is upside down
-
-[1012]
-~r~Your vehicle is upside down
-
-[1013]
-~r~Your vehicle is upside down
-
-[1014]
-~r~Your vehicle is upside down
-
-[JM4_10]
-OK, Kid. Drive me to the laundry in Chinatown first, I got a bit of business to take care of.
-
-[JM4_11]
-Those washer women aint been payin' their protection money.
-
-[JM4_12]
-And watch the car, Joey just fixed this junk heap.
-
-[JM4_13]
-So no fancy crap, OK?
-
-[KM4_11]
-~g~Take the money back to the casino!
-
-[FEF_BR2]
-Find it again by reading any mission briefs collected to date.
-
-[TRAIN_1]
-Kurowski Station
-
-[TRAIN_2]
-Rothwell Station
-
-[TRAIN_3]
-Baillie Station
-
-[SUBWAY1]
-Portland Station
-
-[SUBWAY2]
-Rockford Station
-
-[SUBWAY3]
-Staunton South Station
-
-[SUBWAY4]
-Shoreside Terminal
-
-[MEA4_2]
-~r~Marty Chonks is dead!
-
-[SPRAY1]
-Drive your vehicle into the spray shop to lose your ~h~wanted level~w~, ~h~repair ~w~and ~h~respray ~w~your vehicle. Cost - ~h~$1000~w~. This time it's free.
-
-[JM4_A]
-Yeah, I know Toni, I've tuned her real sweet. She purrs, you know what I mean?
-
-[JM4_5]
-Drop by later and we'll give them something to launder, their own blood stained clothes!
-
-[AMMU_A]
-Luigi said you'd need a piece...
-
-[AMMU_B]
-Joey told me to tool you up...
-
-[AMMU_C]
-So go around back of the shop. I left you a nine in the yard.
-
-[AMMU_D]
-I got all your home defence needs.
-
-[AMMU_E]
-You want a license too?
-
-[AMMU_F]
-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_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.
-
-[RECORD]
-~g~NEW RECORD!!
-
-[NRECORD]
-~r~NO NEW RECORD!
-
-[RCHELP]
-Press ~k~~PED_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.
-
-[RC_1]
-You have 2 minutes to blow up as many Diablo Gang Cars as possible!
-
-[RC_2]
-You have 2 minutes to blow up as many Mafia Gang Cars as possible!
-
-[RC_3]
-You have 2 minutes to blow up as many Yakuza Gang Cars as possible!
-
-[RC_4]
-You have 2 minutes to blow up as many Yardie Gang Cars as possible!
-
-[RC_5]
-You have 2 minutes to blow up as many Hood Gang Cars as possible!
-
-[RC_6]
-You have 2 minutes to blow up as many Cartel Gang Cars as possible!
-
-[RAMPAGE]
-RAMPAGE!!
-
-[RAMP_P]
-RAMPAGE COMPLETE!
-
-[RAMP_F]
-RAMPAGE FAILED
-
-[PAGE_00]
-.
-
-[PAGE_01]
-Murder ~1~ Diablos in 120 seconds!
-
-[PAGE_02]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_03]
-Kill ~1~ Mafia in 120 seconds!
-
-[PAGE_04]
-Kill ~1~ Triads in 120 seconds!
-
-[PAGE_05]
-Kill ~1~ Triads in 120 seconds!
-
-[PAGE_06]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_07]
-Pop ~1~ Yardie heads in 120 seconds!
-
-[PAGE_08]
-Burn ~1~ Yakuza in 120 seconds!
-
-[PAGE_09]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_10]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_11]
-Annihialate ~1~ Yardies in 120 seconds!
-
-[PAGE_12]
-Torch ~1~ Yakuza in 120 seconds!
-
-[PAGE_13]
-Explode ~1~ Yardies in 120 seconds!
-
-[PAGE_14]
-Fry ~1~ Colombians in 120 seconds!
-
-[PAGE_15]
-Splatter ~1~ Hoods in 120 seconds!
-
-[PAGE_16]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_17]
-Splatter ~1~ Colombians with a car in 120 seconds!
-
-[PAGE_18]
-Driveby and Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_19]
-Remove ~1~ Colombian heads in 120 seconds!
-
-[PAGE_20]
-Behead ~1~ Hoods in 120 seconds!
-
-[JM1_A]
-Hey, I'm bored when you gonna drill me?
-
-[JM1_B]
-In a moment sweet heart, I got a little business to take care of.
-
-[JM1_C]
-I got a little job for you pal.
-
-[JM1_D]
-The Forelli brothers have owed me money for too long
-
-[JM1_E]
-and they need to be taught some respect.
-
-[JM1_F]
-Lips Forelli is stuffing his fat face in St Marks Bistro,
-
-[JM1_G]
-so steal his car and take it to 8-Ball's bomb shop up in Harwood.
-
-[JM1_H]
-You know 8-Ball right?
-
-[JM1_I]
-Once he's fitted it with a bomb, go park the car where you found it.
-
-[JM1_J]
-Then sit back and watch the whole show.
-
-[JM1_K]
-But hurry up, he won't be eating forever.
-
-[CAT2_A1]
-Come on you dumb bitch!
-
-[CAT2_A]
-The real question is, did you turn up to rescue Maria or to get me back?
-
-[CAT2_B]
-Well I got news for you,
-
-[CAT2_B2]
-shooting you will be a pleasure but dating you was only business.
-
-[CAT2_C]
-You are muy peccinno amigo!
-
-[CAT2_D]
-Throw over the cash.
-
-[CAT2_E]
-You have been a busy boy!
-
-[CAT2_E2]
-But you haven't learned, I'm not to be trusted.
-
-[CAT2_E3]
-Kill the idiot.
-
-[CAT2_J]
-Get this thing airborne!!
-
-[HM5_1]
-Yo, Ice said was comin'. There rules. Bats only. No guns, no cars.
-
-[HM5_5]
-This is a battle for respect, you cool?
-
-[HELP14]
-To collect weapons walk through them. These cannot be collected while in a vehicle.
-
-[CRUSH]
-Park in the marked area and exit your vehicle. The vehicle will then be crushed.
-
-[DIAB2_B]
-A gang of no-goods has threatened to remove my starring member if I don't pay them a cut.
-
-[DIAB2_C]
-They threaten the wrong man, amigo.
-
-[DIAB2_D]
-They have a weakness for the icecream.
-
-[DIAB2_E]
-Pick up the bomb I've hidden in Harwood,
-
-[DIAB2_F]
-hijack the regular icecream van on its rounds.
-
-[DIAB2_G]
-and lure these fools to their doom with the jeengle-jeengle.
-
-[DIAB2_H]
-They hide in a warehouse on Atlantic Quay.
-
-[DIAB3_A]
-Some insolent Triads stole my beautiful car last night,
-
-[DIAB3_B]
-wrecked it and left it burning.
-
-[DIAB3_C]
-Some of my most precious donkey memorabilia was in the trunk -
-
-[DIAB3_D]
-real collectibles that are irreplaceable my friend.
-
-[DIAB3_E]
-I've hidden a throbbing weapon on the edge of Chinatown.
-
-[DIAB3_F]
-Take it and teach these Triad vandals to fear El Burro's well-endowed wrath.
-
-[DIAB3_1]
-KILL 25 TRIADS
-
-[DIAB4_A]
-A thieving opportunist has stolen a van of my latest publication hot off the press!
-
-[DIAB4_B]
-But that SPANKED-up idiot has left the rear doors open
-
-[DIAB4_C]
-and now my beautifully produced,
-
-[DIAB4_D]
-tastefully photographed adult literature is being dropped all over Liberty!
-
-[DIAB4_E]
-Take the van and follow that trail of Donkey Does Dallas volumes 1, 2 and 3
-
-[DIAB4_F]
-collecting it as you go.
-
-[DIAB4_G]
-When you've followed the trail to that thieving SPANK-head, waste him!
-
-[DIAB4_H]
-Then deliver my donkey derby to XXX Mags in the Red Light District.
-
-[DIAB4_1]
-~g~Take the van to the back of XXX Magazines.
-
-[HM1_E]
-I want you to show these punk ass bitches how a real drive-by works.
-
-[HM1_H]
-Take these nines off of here!!
-
-[HM2_A]
-Those Nines are pressing me.
-
-[HM2_B]
-These Bitches got armored cars and now they're running SPANK...
-
-[HM2_C]
-and slinging it to brothers with no fear.
-
-[HM2_D]
-There's a car parked up the way.
-
-[HM2_E]
-There's some stuff in there to put these sissys on blass...
-
-[HM3_A]
-Some effa has wired my wheels to blow.
-
-[HM3_B]
-If I lose those wheels, my rep on the street will be dead.
-
-[HM3_C]
-Pick up my car and take it over to the garage on St. Marks, a'right yo.
-
-[HM3_D]
-Let them diffuse that, let them take care of that bomb.
-
-[HM3_E]
-The clocks ticking and the wiring is messed up.
-
-[HM3_F]
-One pot hole too many and that thing could blow.
-
-[HM3_G]
-Now move it!
-
-[HM4_A]
-Yo, a Federal Reserve flight just smashed down at Francis International.
-
-[HM4_B]
-There's platinum all over the strip.
-
-[HM4_C]
-Get a car and snatch up as much as you can.
-
-[HM4_F]
-You can drop the bling off at one of my garages.
-
-[HM4_G]
-This platinum is mad heavy and it will slow your wheels down some.
-
-[HM4_H]
-So make regular drop off's at the garage.
-
-[HM5_A]
-Them Nines are down to a few scabby herds...
-
-[HM5_B]
-but they still wanna bring it.
-
-[HM5_C]
-They agreed to go toe to toe.
-
-[HM5_D]
-A gang of them against two of us, or rather...
-
-[HM5_E]
-two of yaw
-
-[HM5_F]
-I'd join you but...
-
-[HM5_G]
-I ain't due my parole hearing for another three months now,
-
-[HM5_H]
-y'know what I mean?
-
-[HM5_I]
-Go and meet my baby brother,
-
-[HM5_J]
-He'll show you where they are fighting a'right son.
-
-[MEA1_B]
-The name's Chonks, Marty Chonks.
-
-[MEA1_C]
-I run the Bitchin' Dog Food factory around the corner.
-
-[MEA1_D]
-I got money troubles, but hey, who doesn't right?
-
-[MEA1_E]
-I'm meeting my bank manager later.
-
-[MEA1_F]
-He's a crooked bastard that keeps bumping up the loan repayments so he can cut a slice.
-
-[MEA1_G]
-Take my car, pick him up and bring him back here.
-
-[MEA1_H]
-I've got a little surprise for that blood sucking leech!!
-
-[MEA2_A]
-I hired some thieves to break into my apartment...
-
-[MEA2_C]
-The thieving bastards are threatening to tell the insurance company,
-
-[MEA2_D]
-if I don't give them a cut.
-
-[MEA2_E]
-Can you believe it?
-
-[MEA2_F]
-I've left a car inside the factory gates.
-
-[MEA2_G]
-Use it to go and pick them up from their turf in the Red Light district.
-
-[MEA2_H]
-Then bring 'em back to the factory so I can make 'em see Marty's point of view.
-
-[MEA3_A]
-The business is going to go under unless I get hold of some serious cash soon.
-
-[MEA3_B]
-My wife has an insurance policy and all she's ever been to me is a hole in my pocket.
-
-[MEA3_C]
-I've left a car in the usual place.
-
-[MEA3_D]
-Go and pick up my wife from Classic Nails and bring her back to the factory.
-
-[MEA4_A]
-Damn, I'm in trouble!
-
-[MEA4_B]
-Turns out my wife was seeing some guy I owe money to.
-
-[MEA4_C]
-He's got real angry and he's looking for payback!
-
-[MEA4_E]
-he thinks I'm gonna pay him off...
-
-[MEA4_F]
-but my guess is...
-
-[MEA4_G]
-Liberty's dogs are gonna get yet another flavor this month!
-
-[WELCOME]
-WELCOME TO
-
-[HM1_2]
-~g~Get a vehicle, remember only Uzi drive by kills count!
-
-[HELP8_B]
-Press the~h~ ~k~~PED_SNIPER_ZOOM_IN~ button ~w~to ~h~zoom in ~w~with the rifle and the~h~ ~k~~PED_SNIPER_ZOOM_OUT~ button ~w~to ~h~zoom out ~w~again.
-
-[LRQC_1]
-Asuka and I are gonna have to talk, uh,
-
-[LRQC_2]
-Why don't you go cruise around?
-
-[LRQC_3]
-You'll need a place to lie low.
-
-[LRQC_4]
-There's a warehouse at the edge of Belleville that should suit your needs.
-
-[LRQC_5]
-Come back here to my Condo when you are ready,
-
-[LRQC_6]
-and we can have a little chat.
-
-[JM6_5]
-~g~You need a getaway vehicle, Idiot!
-
-[JM2_F]
-If you need a piece go around back of AmmuNation opposite the subway.
-
-[LOVE4_7]
-~g~There's a construction yard in Staunton Island, maybe they took the package there.
-
-[LOVE4_8]
-~g~You'll need a car to open the garage.
-
-[TSCORE]
-EARNINGS: $~1~
-
-[AM1_9]
-~r~Salvatore has escaped back into Luigi's Club!
-
-[AM1_6]
-~g~If you hang around Luigi's club, the Mafia will spot you!
-
-[TM2_3]
-~g~It's a trap! Waste them all!!
-
-[FM4_1]
-This is Maria. The car's a trap! Meet me at the slip south of Callahan Bridge.
-
-[JM1_7]
-~g~Close the car door! He'll notice!
-
-[KM5_1]
-~g~DEALER MINCED!!.
-
-[KM5_6]
-~g~You must murder at least 8 Yardie dealers.
-
-[KM5_7]
-~g~Kill them quickly! Once they've pushed their SPANK they're off the streets.
-
-[RM3_8]
-~r~That car is a decoy!!
-
-[LM3_8]
-Hey, I'm Joey.
-
-[LM3_9]
-Luigi said you were reliable so come back later,
-
-[KM3_5]
-~g~Press the horn to get the deal going.
-
-[LOVE7]
-LOVE'S DISAPPEARANCE
-
-[LOVE2_5]
-~g~Kenji is fender meat! Get out of Newport and dump the car!
-
-[AS2_11]
-~g~~1~ OF 9!
-
-[GARAGE1]
-~g~Get out of the vehicle and walk outside.
-
-[KM3_11]
-~g~The Cartel have been attacked and the briefcase has not been recovered.
-
-[KM3_12]
-~g~Kill all of the Colombians, destory the vehicles and recover the briefcase.
-
-[KM3_13]
-~g~Take the briefcase back to the casino.
-
-[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_2]
-Press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire the boat cannons.
-
-[DIAB1_B]
-This is El Burro of the Diablos.
-
-[DIAB1_D]
-You're new in Liberty, but already you are gaining a reputation on the streets.
-
-[DIAB1_E]
-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_1A]
-Use the RC buggies to destroy the armored cars. Press the ~h~~k~~PED_FIREWEAPON~ button ~w~to detonate.
-
-[HM2_2]
-~r~You failed to destroy all the armored cars!
-
-[HM2_6]
-~g~Armored Car destroyed!
-
-[RM3_A]
-I know a real important man in town, a soft touch,
-
-[RM3_H]
-with shall we say, exotic tastes and the money to indulge them.
-
-[RM3_B]
-He's involved in a legal matter and the prosecution has some rather embarrassing photos of him
-
-[RM3_C]
-at a morgue party or something.
-
-[LOVE6_A]
-A lesson in business, my friend.
-
-[LOVE6_E]
-If you have a unique commodity, the world and his wife will try to wrestle it from your grasp...
-
-[LOVE6_C]
-SWAT teams have cordoned off the area around my associate and the package.
-
-[LOVE6_D]
-Get over there, pick up the van and act as a decoy.
-
-[LOVE6_F]
-Keep them busy and he should make good his escape.
-
-[AM3_C]
-He's probably out in the bay as you read this! Steal a police boat, and sink his career!
-
-[FESZ_UC]
-CANCEL
-
-[FEDS_SM]
-L1,R1-CHANGE MENU
-
-[FEDS_AS]
-;=-CHANGE SELECTION
-
-[FEDSAS2]
-<>-CHANGE SELECTION
-
-[FEDS_SS]
-L1,R1-CHANGE SELECTION
-
-[FEDSSC1]
-;-FASTER SCROLLING
-
-[FEDSSC2]
-=-STOP SCROLLING
-
-[MEA2_3]
-~g~Bring the car back to the factory.
-
-[RM1_3]
-~r~McAffrey escaped!
-
-[RM1_4]
-~g~You have used all the grenades! Get some more from ammunation!
-
-[RM1_5]
-~g~Go back and torch the safehouse!
-
-[RM6_4]
-~g~Go over to the lockup and collect Ray's stash.
-
-[RM6_5]
-~g~The CIA have the bridge under surveillance, find another route across.
-
-[HM2_F]
-and wreck all their armored stuff.
-
-[HM_4]
-'BULLION RUN'
-
-[MEA2_B5]
-TEXT NO LONGER NEEDED
-
-[MEA1_B5]
-TEXT NO LONGER NEEDED
-
-[MEA3_B5]
-TEXT NO LONGER NEEDED
-
-[MEA4_B7]
-but if you just step into my office...
-
-[MEA3_B4]
-Marty wants to see me? Well it better be quick because I have to get my hair done.
-
-[KM3_7]
-It's a Yakuza trap man!
-
-[FES_LOF]
-Load Failed.
-
-[FES_SLO]
-SAVE FILE
-
-[FES_ISC]
-IS CORRUPTED
-
-[FESZ_TI]
-SAVE Z1
-
-[FESZ_SA]
-Save game
-
-[MC_LDFL]
-Load Failed!
-
-[MC_NWRE]
-Now Restarting Game.
-
-[LOVE6_3]
-~g~You have ~1~ seconds to return to the Securicar before you fail the mission.
-
-[LOVE6_4]
-~r~You ditched the Decoy Securicar!
-
-[HELP1]
-Stop in the center of the blue marker.
-
-[HELP12]
-Walk into the center of the blue marker to trigger a mission.
-
-[HJSTAT]
-Distance: ~1~.~1~m Height: ~1~.~1~m Flips: ~1~ Rotation: ~1~_
-
-[HJSTATW]
-Distance: ~1~.~1~m Height: ~1~.~1~m Flips: ~1~ Rotation: ~1~_ And what a great landing!
-
-[DIAB1_5]
-RACE TIME:
-
-[LOVE3_4]
-~r~You destroyed the plane!!
-
-[F_FAIL1]
-Fire Truck mission ended.
-
-[F_CANC]
-~r~Fire Fighter mission cancelled!
-
-[F_EXTIN]
-FIRES:
-
-[A_COMP1]
-Paramedic missions complete!
-
-[A_CANC]
-~r~Paramedic mission cancelled!
-
-[A_COMP3]
-Paramedic missions complete! You will never get tired when running!
-
-[ATUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Paramedic missions on or off.
-
-[ATUTOR3]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Paramedic missions on or off.
-
-[ALEVEL]
-Paramedic Mission Level ~1~
-
-[A_FAIL1]
-Paramedic mission ended.
-
-[FEST_HA]
-Highest Paramedic Mission level
-
-[A_SAVES]
-PEOPLE SAVED: ~1~
-
-[C_KILLS]
-CRIMINALS KILLED: ~1~
-
-[HM1_B]
-I got a problem they tryin' to play me.
-
-[AM2_A]
-Salvatore's death comes as pleasurable news,
-
-[AM2_A2]
-you are an efficient killer. I like that in a man.
-
-[AM2_B]
-This is my brother Kenji.
-
-[AM2_C]
-Asuka has a little job for you, but when you're done, drop by my casino and we can talk.
-
-[AM2_D]
-Just like Kenji, always trying to play with my toys.
-
-[AM2_E]
-My police source indicates that the Mafia are watching our interests around the city
-
-[AM2_E2]
-in a bid to track you down.
-
-[AM2_F]
-We cannot continue our operations until they are dealt with.
-
-[AM2_G]
-Take out these spying fools and end this vendetta once and for all.
-
-[F_START]
-~g~Burning vehicle reported in the ~a~ area. Go and extinguish the fire.
-
-[AM4_1A]
-Get to the Phone in West Belleville Park.
-
-[AM4_1B]
-Get to the Phone on Liberty Campus.
-
-[AM4_1C]
-Get to the Phone in South Belleville Park.
-
-[AM4_1D]
-Meet me in the toilet block in the park.
-
-[HJSTATF]
-Distance: ~1~ft Height: ~1~ft Flips: ~1~ Rotation: ~1~_
-
-[HJSTAWF]
-Distance: ~1~ft Height: ~1~ft Flips: ~1~ Rotation: ~1~_ And what a great landing!
-
-[HM1_F]
-Watch your back though, there'll be Jacks on the street who'll think you're trying to blast them too!
-
-[HM1_D]
-'Nines' is their tag and purple is their flag and each day they rock their colors...
-
-[HM1_G]
-is another day the 'Jacks' look soft.
-
-[MEA2_B]
-and steal some stuff so I could claim on the insurance as you do.
-
-[TM3_H]
-~w~You did good back there kid, real good.
-
-[TM3_I]
-~w~Come on, let's introduce you to the Don.
-
-[TM3_J]
-~w~Heeyyy! Luigi!
-
-[TM3_K]
-~w~Oh my girls have been missing you so long Salvatore, you been away too long.
-
-[TM3_L]
-~w~You tell them that once this unfortunate business is taken care of,
-
-[TM3_M]
-~w~we'll all go down to the club and celebrate, ok?
-
-[TM3_N]
-~w~Here's my boy.
-
-[TM3_N2]
-~w~How you doin' pop?
-
-[TM3_O]
-~w~You got yourself a good woman yet?
-
-[TM3_P]
-~w~Hey, your mother, god bless her soul, would be turning over in her grave
-
-[TM3_Q]
-~w~to see you without a wife.
-
-[TM3_R]
-~w~I know Pop, I'm working on it.
-
-[TM3_S]
-~w~TONI! How's your Momma?
-
-[TM3_T]
-~w~She's a great woman you know. Strong. Firenze.
-
-[TM3_U]
-~w~She's good...fine.
-
-[TM3_V]
-~w~Terrific, Terrific. Now listen you guys, you go inside while I talk to our new friend here.
-
-[TM3_W]
-~w~I see nothing but good things for you my boy...
-
-[RM1_A]
-That scumbag McAffrey, he took more bribes than anyone.
-
-[RM1_B]
-He thinks he's gonna get an honorable discharge if he turns states evidence.
-
-[RM1_C]
-He just squealed!
-
-[RM4_B]
-We gotta shut him up, permanently.
-
-[RM4_E]
-I want him sleeping with the fishes, not eating them.
-
-[LOVE3_B]
-On its approach to the airport tonight, a light aircraft will pass over the bay.
-
-[LOVE4_D]
-Unfortunately the port authorities seized the plane and were stripping it down
-
-[LOVE4_H]
-until I intervened at great personal expense.
-
-[LOVE4_E]
-Cross the bridge to Shoreside Vale and go to Francis International Airport.
-
-[GTAB_A]
-Hey, let's get this out of here. God knows what it is
-
-[GTAB_B]
-but he seems to want it badly enough so it must be worth something.
-
-[GTAB_C]
-Who the Heck!
-
-[GTAB_D]
-YOU!
-
-[GTAB_E]
-Hey take it easy amigo! De nada! De nada!
-
-[GTAB_F]
-I left you pouring your heart out into the gutter!
-
-[GTAB_G]
-Don't shoot amigo. No problem. We all friends. Here, take this.
-
-[GTAB_H]
-Don't be such a pussy!
-
-[GTAB_I]
-We got no choice baby!
-
-[GTAB_J]
-We always got a choice you dumb bastard!
-
-[GTAB_K]
-I'm sorry about that crazy bitch man, they all the same...por favor??
-
-[GTAB_L]
-So the whore got away.
-
-[GTAB_M]
-But you've done me a favor,
-
-[GTAB_N]
-you're not the only one that has a score to settle with the Cartel,
-
-[GTAB_O]
-this worm killed my brother!
-
-[GTAB_P]
-I never killed no Yakuza!
-
-[GTAB_Q]
-LIAR! We all saw the Cartel assassin.
-
-[GTAB_R]
-We are going to hunt down and kill all you Colombian dogs!
-
-[GTAB_S]
-I'll be operating on our friend here to extract information and a little pleasure.
-
-[GTAB_T]
-You, drop by later, I'm sure I'll require your services.
-
-[GTAB_U]
-Please amigo, don't leave me with her, she psycho chica! Amigo? Hey AMEEEGO!!!...Aiiieeeeaaargghh!
-
-[LOVE5_A]
-You are proving to be a safe investment, a rare thing in these days of false hood.
-
-[KM3_1]
-~g~The Cartel are expecting a Yardie Posse go and steal a Yardie car! Head north you'll find one in Newport.
-
-[LOVE1_1]
-~g~Go 'jack a Colombian gang car, so you can infiltrate the hideout, head north you'll find one in Fort Staunton.
-
-[FM1_Q1]
-~w~You looking for some fun? A little...hmm? Some SPANK?
-
-[FM1_R]
-~w~Hi Chico. Nah, just the usual.
-
-[FM1_T]
-~w~Thanks Chico. See you around.
-
-[FM1_W]
-~w~Alright Fido, you wait here and look after the car while I go and shake my butt alright.
-
-[FM1_X]
-~w~OK Fido, let's get out of here. Wooooh!
-
-[FM1_Q]
-~w~Hey Maria! It's my favorite lady!
-
-[FM1_S1]
-~w~Hey, maybe you should check out the warehouse party at the east end of Atlantic Quays.
-
-[FM1_U]
-~w~Gracias and enjoy. That's good stuff.
-
-[FM1_V]
-~w~C'mon Fido, let's go and check out this party!
-
-[FM1_SS]
-~r~SCANNER: ~g~Four-five to all units: Assist narcotics raid Atlantic Quays...
-
-[LOVE6_B]
-even if they have little understanding as to its true value.
-
-[TM3_A1]
-~r~Joey's Fried!
-
-[TM3_A2]
-~r~Joey and Luigi have been cremated!
-
-[TM3_A3]
-~r~Joey, Luigi and Toni are Toast!
-
-[FM4_2]
-Listen, Salvatore thinks that we're going behind his back,
-
-[FM4_3]
-so he was offering you to the Cartel in order to make a deal.
-
-[FM4_4]
-I couldn't let him do that, I mean the worst thing is,
-
-[FM4_4B]
-it's all my fault... because I told him, we were an item.
-
-[FM4_5]
-Don't ask me why. I don't know.
-
-[FM4_6]
-Look you're a marked man on Mafia turf and I've got to get out of here too.
-
-[FM4_6B]
-I've seen too much killing. Too much blood!
-
-[FM4_7]
-This is a friend of mine ok, she's an old friend.. it's Asuka, she's someone we can trust.
-
-[FM4_8]
-C'mon, Enough of the speeches.
-
-[FM4_9]
-We better get out of here before we get more hysterical Italians wanting less friendly reunions.
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUCER
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-ART DIRECTOR
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-TECHNICAL DIRECTION
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-DESIGN
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-WRITTEN BY
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-CHARACTERS
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMATION & DIRECTION
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-AUTO DESIGN
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-ARTISTS
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODERS
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-SCORE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-SOUND DESIGN & MASTERING
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-AUDIO PROGRAMMING
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-TEST MANAGER
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-LEAD TESTERS
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRD050A]
-TESTERS
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-TECHNICAL SUPPORT
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-EXECUTIVE PRODUCER
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUCER
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRECTOR OF DEVELOPMENT
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-TECHNICAL PRODUCER
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-ASSOCIATE PRODUCER
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-MUSIC SUPERVISOR
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VP OF MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-TECHNICAL COORDINATOR
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-QA MANAGER
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-GAME ANALYST
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-TEST TEAM
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-LIBERTY TREE EDITORIAL
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-CUT-SCENES
-
-[CRED108]
-SCRIPT BY DAN HOUSER AND JAMES WORRALL
-
-[CRED109]
-AUDIO DIRECTED BY DAN HOUSER
-
-[CRED110]
-AUDIO PRODUCED BY RENAUD SEBBANE
-
-[CRED111]
-CAST
-
-[CRED112]
-FRANK VINCENT AS SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO AS LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN AS TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT AS JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR AS MARIA
-
-[CRED117]
-KYLE MACLACHLAN AS DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA AS RAY MACHOWSKI
-
-[CRED119]
-GURU AS 8-BALL
-
-[CRED120]
-SONDRA JAMES AS MOMMA
-
-[CRED121]
-LIANA PAI AS ASUKA
-
-[CRED122]
-LES MAU AS KENJI
-
-[CRED123]
-CYNTHIA FARRELL AS CATALINA
-
-[CRED124]
-AL ESPINOSA AS MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS AS EL BURRO
-
-[CRED126]
-HUNTER PLATIN AS CHICO
-
-[CRED127]
-WALTER MUDU AS D-ICE
-
-[CRED128]
-CURTIS MCCLARIN AS CURTLY
-
-[CRED129]
-BILL FIORE AS DARKEL
-
-[CRED130]
-CHRIS PHILLIPS AS MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN AS CURLY BOB
-
-[CRED132]
-WALTER MUDU AS KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN AS ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY AS MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATED BY
-
-[CRD136A]
-ALEX HORTON
-
-[CRED137]
-DIRECTED BY
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRED138]
-PRODUCED BY
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRED139]
-RECORDED AT MODERN UPRISING STUDIOS, BROOKLYN
-
-[CRED140]
-ACTORS
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS.
-
-[CRED141]
-PEDESTRIAN DIALOGUE
-
-[CRED142]
-WRITTEN BY DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRECTED BY CRAIG CONNER, DAN HOUSER AND LAZLOW
-
-[CRED144]
-PRODUCED BY RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-RADIO STATIONS AND MUSIC
-
-[CRED218]
-PRODUCERS FOR ROCKSTAR UK
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED219]
-SOUNDTRACK CO-ORDINATOR
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUCER FOR ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-EDITED BY
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER AND IMAGING WRITTEN BY
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-SPECIAL THANKS TO
-
-[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]
-ARTIST
-
-[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]
-Cinematic Camera
-
-[KM1_13]
-Drive the vehicle into the garage!
-
-[KM3_14]
-~r~You have been spotted the deal is off!
-
-[EBAL_H]
-Wait here man while I go in and talk to Luigi.
-
-[EBAL_M]
-Remember no one messes with my girls!
-
-[LM2_F]
-Then take his car, respray it.
-
-[LM2_D]
-here, here take it.
-
-[LM1_9]
-Hi I'm Misty.
-
-[LM4_A]
-Some Diablo scumbag has been pimping his skuzzy bitches in my backyard.
-
-[FM2_B]
-We got us a rat!
-
-[FM2_C]
-He ain't pimpin' or pushin' so he must be talking.
-
-[FM3_CC]
-~w~Come back brother when you have the money.
-
-[FEDS_AM]
-<>-CHANGE MENU
-
-[LOVE5_5]
-~r~You failed to protect the truck!
-
-[RM6_6]
-~r~Ray is dead!
-
-[RM6_7]
-~r~Ray has missed his flight.
-
-[RM6_8]
-~g~You have left Ray behind, go back and get him.
-
-[FM1_10]
-~g~You have left Maria behind, go back and pick her up.
-
-[LOVE4_9]
-~r~The plane has been destroyed!
-
-[LOV4_10]
-~r~The only lead to where the package has gone has been destroyed!
-
-[KM2_D]
-Needless to say, we must give him the cars as a gift, to repay the debt that I owe him.
-
-[KM4_B]
-The business's fortunate enough to have our protection settle their accounts today.
-
-[KM2_E]
-You must obtain the cars on this list and deliver them to a garage behind the car park in Newport.
-
-[FM3_8I]
-~w~Get a good vantage point then I'll head in when you fire the first shot.
-
-[LOVE1_B]
-Experience has taught me that a man like you can be very loyal for the right price,
-
-[LOVE1_H]
-but groups of men get greedy.
-
-[LOVE1_C]
-A valued resource, an old oriental gentleman I know,
-
-[LOVE1_I]
-has been kept hostage by some South Americans in Aspatria.
-
-[MEA4_D]
-I've agreed to see him...
-
-[MEA4_B4]
-Marty sent you huh? OK, I'm gonna show that creep the meaning of the word business.
-
-[MEA4_B5]
-Carl, hi! i eerr, I need more time to get your money.
-
-[MEA1_B4]
-Ah, Mr Chonks sent you did he. Let's go and pay the fellow a visit.
-
-[HM5_6]
-Let's go crack some skulls...
-
-[LOVE1_5]
-~g~Stop hanging around, get a Colombian Gang car and rescue Love's associate.
-
-[AS1_D]
-~w~Act as the bait, and get the death squads to follow you to Pike Creek
-
-[AS1_E]
-~w~where some of my men will be waiting for them.
-
-[AS2_C]
-~w~The Cartel have a front company, The Kappa Coffee House.
-
-[AS2_E]
-~w~We have no choice but to put these drug stands out of operation.
-
-[AS2_F]
-~w~Smash them to splinters!!
-
-[AS2_A1]
-~w~Miguel certainly has some of that famous Latin stamina.
-
-[AS2_A2]
-~w~I'm quite exhausted.
-
-[SIREN_3]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[SIREN_4]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[AS3_C]
-~w~Eeeeeeyoooo! What IS that gooey yellow stuff?
-
-[AS3_C1]
-~w~Oh hi Babe.
-
-[AS3_F]
-~w~She's got the makings of a natural this girl.
-
-[AS3_F1]
-~w~She's managed to extract this little gem from our guest.
-
-[AS3_G]
-~w~There is a plane coming into Francis International in 2 hours time.
-
-[AS3_G1]
-~w~It is full of Catalina's poison.
-
-[AS3_H]
-~w~You can avoid airport security by getting a boat out to the runway-light buoys
-
-[AS3_H1]
-and shooting the plane down on its approach.
-
-[AS3_I]
-~w~Collect the cargo from the debris and stash it!
-
-[AS3_J]
-~w~Oh you be careful now, OK baby?
-
-[AS3_K]
-~w~Now try the chilli oil.....
-
-[RM2_F1]
-Those Colombians'll be here any minute!
-
-[RM2_K]
-Goddam they're here!! LOCK'N'LOAD!!
-
-[LOVE2_7]
-~g~ Now dump the car!
-
-[LOVE2_8]
-~g~Now get out of Newport!
-
-[AM1_F]
-Salvatore Leone will be leaving Luigi's in about three hours time. (~1~:~1~)
-
-[LOVE5_C]
-I want you to follow him, and make sure both he and my package get to Pike Creek unharmed.
-
-[FESZ_SR]
-Save Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FESZ_FO]
-Would you like to format the Memory Card (PS2) in MEMORY CARD slot 1?
-
-[FELZ_FO]
-Memory Card (PS2) in MEMORY CARD slot 1 is unformatted.
-
-[FES_NOC]
-No Memory Card (PS2) in MEMORY CARD slot 1.
-
-[FES_LOE]
-Load Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FES_DEE]
-Deleting Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[SLONFM]
-Error formatting Memory Card (PS2) in MEMORY CARD slot 1.
-
-[SLONDR]
-Insufficient space to save. Please insert a Memory Card (PS2) with at least 500KB of free space available into MEMORY CARD slot 1.
-
-[SLNSP]
-Insufficient space to save. Please insert a Memory Card (PS2) with at least 200KB of free space available into MEMORY CARD slot 1.
-
-[FEFD_WR]
-Formatting Memory Card (PS2) in MEMORY CARD slot 1. Please do not remove the Memory Card (PS2), reset or switch off the console.
-
-[FES_ISF]
-NOT PRESENT
-
-[FES_SAG]
-PRESENT
-
-[SLONNO]
-No Memory Card (PS2) in MEMORY CARD slot 1.
-
-[SLONNF]
-Memory Card (PS2) in MEMORY CARD slot 1 is unformatted.
-
-[FESZ_FM]
-Memory Card (PS2) in MEMORY CARD slot 1 is unformatted. Would you like to format Memory Card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_FF]
-Format Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[MCDNSP]
-There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 500KB is needed to save this application data. Do you wish to start? (YES or NO)
-
-[MCGNSP]
-There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 200KB is needed to save this application data. Do you wish to start? (YES or NO)
-
-[FESZ_WR]
-Saving data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FESZ_OW]
-Overwriting data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FELD_WR]
-Loading data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FEDL_WR]
-Deleting data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[LM2_C]
-Luigi said to, to give you this so...
-
-[LM3_G]
-Joey ain't the kind you keep waiting, remember, this is your foot in the door...
-
-[LM5_E]
-Get as many of them as you can before the cops drink away their green.
-
-[JM5_C]
-Alright, there's a car stuffed with a stiff at the cafe near Callahan Point.
-
-[RM2_B]
-We saw action in Nicaragua, back when the country knew what it was doing.
-
-[RM2_C]
-Some Cartel scum roughed him up yesterday, said they'd be back for some of his stock today.
-
-[RM2_D1]
-I'd go myself but the old sciatica's playing up again -cough cough- so, eerr-hhrrmmm, good luck.
-
-[CATINF1]
-~g~Get Catalina!
-
-[CATINF2]
-~g~Follow the chopper to find Catalina.
-
-[BOATIN1]
-Jump into a boat and press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~to get in.
-
-[BOATIN2]
-You can press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~if you are near a boat to get in it.
-
-[BOATIN3]
-Jump into a boat and press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~to get in.
-
-[BOATIN4]
-You can press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~if you are near a boat to get in it.
-
-[JM6]
-'THE GETAWAY'
-
-[FM1]
-'CHAPERONE'
-
-[JM1]
-'MIKE LIPS LAST LUNCH'
-
-[FM21]
-'BOMB DA BASE: ACT I'
-
-[FM3]
-'BOMB DA BASE: ACT II'
-
-[AM1]
-'SAYONARA SALVATORE'
-
-[AM2]
-'UNDER SURVEILLANCE'
-
-[KM2]
-'GRAND THEFT AUTO'
-
-[AS3]
-'S.A.M.'
-
-[RM2]
-'ARMS SHORTAGE'
-
-[LOVE6]
-'DECOY'
-
-[LOVE1]
-'LIBERATOR'
-
-[RC1]
-'DIABLO DESTRUCTION'
-
-[RC2]
-'MAFIA MASSACRE'
-
-[RC3]
-'CASINO CALAMITY'
-
-[RC4]
-'RUMPO RAMPAGE'
-
-[RM2_E1]
-I can't believe those yellow-bellied bastards left me without proper cover again!
-
-[GREN_1]
-The longer you hold the ~h~~k~~PED_FIREWEAPON~ button~w~, the further you will throw the grenade.
-
-[GREN_2]
-The longer you hold the ~h~~k~~PED_FIREWEAPON~ button~w~, the further you will throw the grenade.
-
-[GREN_3]
-The longer you hold the ~h~~k~~PED_FIREWEAPON~ button~w~, the further you will throw the grenade.
-
-[LOVE4_G]
-My property will be waiting for you at the customs hanger in the aircraft's fuselage.
-
-[KABOOM]
-KABOOOM!
-
-[SPLAT]
-SPLAT!
-
-[PANCAK]
-PANCAKED!
-
-[SOAKED]
-SOAKED!
-
-[HEAD]
-Head Radio
-
-[DBL_CLF]
-Double Clef FM
-
-[FLASHB]
-Flashback FM
-
-[RISE]
-Rise FM
-
-[LIPS]
-Lips 106
-
-[CHAT]
-Chatterbox FM
-
-[K_JAH]
-K-Jah Radio
-
-[GAM_FM]
-Game Radio FM
-
-[MSX_FM]
-MSX FM
-
-[TUBE1]
-When the subway opens you will be able to catch a train to Staunton Island.
-
-[TUBE2]
-When Shoreside Vale opens you will be able to Exit Shoreside Terminal to Francis International Airport.
-
-[TUBE_2]
-To board a subway train, press the ~h~'enter vehicle' button~w~.
-
-[LEGAL]
-~g~Eliminate the criminal threat!
-
-[GA_2]
-New engine and paint job. The cops won't recognize you!
-
-[LM1_8A]
-To earn some extra cash, why not 'borrow' a taxi...
-
-[TAXIH1]
-Stop near a highlighted pedestrian to pick them up then drive them to their destination before the time runs out.
-
-[LM5_7]
-~g~Less than four girls working the ~p~Fuzz Ball~g~ and Luigi won't be happy!
-
-[KM2_3]
-~g~Remember the ~r~cars~g~ have to be in mint condition to be accepted by the ~p~garage~g~.
-
-[KM5_2]
-~g~A Yardie is off the streets.
-
-[BETRA_A]
-Sorry, babe.
-
-[BETRA_B]
-I'm an ambitious girl and you,
-
-[BETRA_C]
-you're just small time.
-
-[JAILB_C]
-*
-
-[JAILB_D]
-*
-
-[JAILB_E]
-*
-
-[JAILB_F]
-*
-
-[JAILB_G]
-*
-
-[JAILB_H]
-*
-
-[JAILB_I]
-*
-
-[JAILB_J]
-*
-
-[JAILB_P]
-*
-
-[JAILB_Q]
-Come on!
-
-[JAILB_R]
-Senor dickhead!
-
-[JAILB_S]
-It's no problem to kill you.
-
-[JAILB_T]
-You gonna be sorry.
-
-[JAILB_U]
-A'right, a'right. Get lost.
-
-[HELP15]
-When on foot press the ~h~~k~~PED_LOOKBEHIND~ button~w~ to ~h~look behind~w~.
-
-[FEC_LB3]
-Look behind
-
-[FEC_R3]
-(R3 button)
-
-[FES_AFO]
-This Memory Card (PS2) is already formatted.
-
-[FEA_UP]
-;
-
-[FEA_DO]
-=
-
-[FEA_LE]
-<
-
-[FEA_RI]
->
-
-[FEDSAS3]
-- CHANGE SELECTION
-
-[FEDSAS4]
-;=<> - CHANGE SELECTION
-
-[SPRAY_4]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
-
-[SPRAY_1]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
-
-[LITTLE]
-LITTLE T
-
-[NICK]
-NICK LOVE
-
-[AM1_10]
-~g~Salvatore will be leaving Luigi's at about 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]
-/ button - SELECT
-
-[FEDS_SB]
-/ button - SELECT " button - BACK
-
-[TM4_A]
-~w~Oh it's you. TONI ain't here.
-
-[TM4_A2]
-~w~But he left one of his sugary love letters for you.
-
-[DIAB2_A]
-I started my exotic entertainment business with nothing but the sizeable contents of my leather pants!
-
-[LM5_9]
-GIRLS:
-
-[PERPIC]
-Hidden Packages found
-
-[CO_ONE]
-Hidden Package ~1~ of ~1~
-
-[LOVE3_3]
-~g~The plane has dropped ~1~ of 6 packages.
-
-[FARE11]
-~g~Destination ~w~'Construction site' ~g~in Fort staunton.
-
-[GA_21]
-You cannot store any more cars in this garage.
-
-[CHEAT1]
-Cheat activated
-
-[CHEAT2]
-Weapon cheat
-
-[CHEAT3]
-Health cheat
-
-[CHEAT4]
-Armor cheat
-
-[CHEAT5]
-Wanted level cheat
-
-[CHEAT6]
-Money cheat
-
-[CHEAT7]
-Weather cheat
-
-[AS1_H]
-~r~You failed to lead the Deathsquad into the Yakuza trap!!
-
-[FEDS_BA]
-" button - BACK
-
-[RAMP_A]
-ALL RAMPAGES COMPLETED!
-
-[USJ_ALL]
-ALL UNIQUE STUNTS COMPLETED!
-
-[FARE23]
-~g~Destination ~w~'import export garage' ~g~in Cochrane Dam district
-
-[L_TRN_1]
-You can ride the L-train around Portland. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[L_TRN_2]
-You can ride the L-train around Portland. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[S_TRN_1]
-You can take the subway trains across Liberty. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[S_TRN_2]
-You can take the subway trains across Liberty. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[AS1_C]
-~w~She has three death squads dotted around Liberty, whose sole job is to hunt you down.
-
-[AS1_G]
-~r~All the Yakuza are dead!!
-
-[JAN]
-Jan
-
-[FEB]
-Feb
-
-[MAR]
-Mar
-
-[APR]
-Apr
-
-[MAY]
-May
-
-[JUN]
-Jun
-
-[JUL]
-Jul
-
-[AUG]
-Aug
-
-[SEP]
-Sept
-
-[OCT]
-Oct
-
-[NOV]
-Nov
-
-[DEC]
-Dec
-
-[DEFDT]
---:---:---- --:--:--
-
-[BUGGY]
-BUGGIES LEFT:
-
-[BONUS]
-~g~BONUS $~1~
-
-[HORN1]
-Press the ~h~L3 button ~w~to activate the ~h~horn.
-
-[HORN2]
-Press the ~h~L1 button ~w~to activate the ~h~horn
-
-[HORN3]
-Press the ~h~R1 button ~w~to activate the ~h~horn
-
-[LM3_1A]
-Press the~h~ ~k~~VEHICLE_HORN~ button~w~ to activate the ~h~horn~w~ and let Misty know you are here.
-
-[LM3_1B]
-Press the~h~ ~k~~VEHICLE_HORN~ button~w~ to activate the ~h~horn~w~ and let Misty know you are here.
-
-[LM3_1C]
-Press the~h~ ~k~~VEHICLE_HORN~ button~w~ to activate the ~h~horn~w~ and let Misty know you are here.
-
-[RADIO_A]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[RADIO_B]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[RADIO_C]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[RADIO_D]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[FEC_EXV]
-Enter and exit vehicle
-
-[TAXI_M]
-'TAXI DRIVER'
-
-[COP_M]
-'VIGILANTE'
-
-[FIRE_M]
-'FIREFIGHTER'
-
-[AMBUL_M]
-'PARAMEDIC'
-
-[HJ_IS]
-INSANE STUNT BONUS: $~1~
-
-[HJ_PIS]
-PERFECT INSANE STUNT BONUS: $~1~
-
-[HJ_DIS]
-DOUBLE INSANE STUNT BONUS: $~1~
-
-[HJ_PDIS]
-PERFECT DOUBLE INSANE STUNT BONUS: $~1~
-
-[HJ_TIS]
-TRIPLE INSANE STUNT BONUS: $~1~
-
-[HJ_PTIS]
-PERFECT TRIPLE INSANE STUNT BONUS: $~1~
-
-[HJ_QIS]
-QUADRUPLE INSANE STUNT BONUS: $~1~
-
-[HJ_PQIS]
-PERFECT QUADRUPLE INSANE STUNT BONUS: $~1~
-
-[AM1_K]
-Salvatore Leone will be leaving Luigi's in about three hours time. (0~1~:~1~)
-
-[IMPEXPP]
-Import/Export garage, Portland Harbor. We have orders for various vehicles. Check our notice board for our requirements.
-
-[VANHSTP]
-Any more Securicars you want cracked? Bring them to our garage in the Portland Harbor.
-
-[EMVHPUP]
-Great rates paid for new and used Emergency Vehicles. Bring them to the crane in the north east of Portland Harbor.
-
-[STANDS]
-STALLS WRECKED:
-
-[STASH]
-~g~Stash the SPANK back at the ~p~construction site!
-
-[MCSTNS]
-There is no Memory Card (PS2) in MEMORY CARD slot 1. Do you wish to start? (YES or NO)
-
-[LOVE3_5]
-~g~The plane is now in range.
-
-[LOVE3_6]
-~r~The Police got to the packages first!
-
-[SIREN_1]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[SIREN_2]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[FM3_8C]
-~w~I'll need $100,000 to cover expenses,
-
-[MCLOAD]
-Loading Data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FES_GME]
-Error Reading Memory Card (PS2) in MEMORY CARD slot 1 please check and try again.
-
-[FESZ_QF]
-Are you sure you wish to format the Memory Card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_LS]
-Load Successful.
-
-[RM3_5]
-~g~You have ~1~ of 6 evidence packages.
-
-[LOVE3_2]
-~g~You have all the packages! Take them back to Donald Love.
-
-[LOVE4_4]
-~g~Take the package back to Donald Love!
-
-[FEB_SAV]
-Load
-
-[FEP_SAV]
-LOAD GAME
-
-[AS2_12A]
-~g~After you trash the first stall, you will have 8 minutes before the Cartel warn their pushers!
-
-[AS3_1A]
-~g~Now get to the ~b~marker buoy!
-
-[NOCONT]
-Please reconnect an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2). to controller port 1 to continue
-
-[BET_JB]
-BETRAYED BY HIS LOVER CATALINA AND LEFT FOR DEAD. CONVICTED AND SENTENCED, HE BEGINS HIS JOURNEY TO LIBERTY CITY PENITENTIARY. BUT ONLY ONE THOUGHT BURNS IN HIS CRIMINAL MIND......REVENGE!
-
-[END_A]
-Residents in Cedar Grove have been coming to terms
-
-[END_B]
-with the emotional aftermath of a full blown war
-
-[END_C]
-that hit the area yesterday.
-
-[END_D]
-Local resident, Clive Denver described to police
-
-[END_E]
-a single gunman that he saw fleeing the scene, with a dark haired woman.
-
-[END_F]
-Oh, you know, we're gonna have such fun, 'cos you know, you know,
-
-[END_G]
-I love you, I, I, I, I really do, 'cos you're such a big strong man
-
-[END_H]
-and that's just what I need.
-
-[END_I]
-Anyway, what was I saying?
-
-[END_J]
-Oh, you know, I forget. But you know what it's like, don't you?
-
-[END_K]
-The sound of explosions shook nearby homes as people ran for cover.
-
-[END_L]
-Several citizens were injured in the panic as ground fire was exchanged
-
-[END_M]
-between ground forces and a helicopter circling the dam.
-
-[END_N]
-Yeah, we got a good view from down here in the gardens.
-
-[END_O]
-When the 'copter finally got taken out,
-
-[END_P]
-better than the fireworks on the 4th of July.
-
-[END_Q]
-With the death toll already over twenty,
-
-[END_R]
-police are still finding bodies.
-
-[END_S]
-There have been no official denials concerning rumours
-
-[END_T]
-that the dead were members of the Colombian Cartel,
-
-[END_U]
-and still no leads as to the cause of the massacre.
-
-[END_V]
-I broke a nail and my hair is ruined, I mean can you believe it?
-
-[END_W]
-This one cost me fifty dollars...
-
-[PAPER1]
-*
-
-[PAPER2]
-*
-
-[PAPER3]
-*
-
-[FEB_CPC]
-Control Configuration
-
-[FEC_PED]
-Controls On Foot
-
-[FEC_VEH]
-Controls In Vehicle
-
-[FEC_FPR]
-Controls For First Person
-
-[FEC_CMM]
-Common Controls
-
-[FEC_PWL]
-GO Left
-
-[FEC_PWR]
-Go Right
-
-[FEC_PWF]
-Walk Forward
-
-[FEC_PWT]
-Walk towards camera
-
-[FEC_PLB]
-Look Behind.
-
-[FEC_PFR]
-Fire Weapon
-
-[FEC_CLE]
-Cycle Weapon Left
-
-[FEC_CRI]
-Cycle Weapon Right
-
-[FEC_LKT]
-Lock Target
-
-[FEC_PJP]
-Ped Jump
-
-[FEC_PSP]
-Ped Sprint
-
-[FEC_PSH]
-Ped Shoot
-
-[FEC_TLF]
-Next Target To Left
-
-[FEC_TRG]
-Next Target to Right
-
-[FEC_CCM]
-Center Camera Behind player.
-
-[FEC_SZI]
-Sniper Rifle Zoom In
-
-[FEC_SZO]
-Sniper Rifle Zoom Out
-
-[FEC_LKL]
-First Person Look Left
-
-[FEC_LRT]
-First Person Look Right
-
-[FEC_LUP]
-1st Person Look Up
-
-[FEC_LDN]
-1st Person Look Down
-
-[FEC_LBH]
-Look Behind Vehicle
-
-[FEC_LLF]
-Look Left of Vehicle
-
-[FEC_LRG]
-Look Right of Vehicle
-
-[FEC_HRN]
-Horn
-
-[FEC_HBR]
-Vehicle Handbrake
-
-[FEC_ACL]
-Vehicle Accelerate
-
-[FEC_BRK]
-Vehicle Brake
-
-[FEC_TSM]
-Toggle SubMissions
-
-[FEC_CRD]
-Change Radio Station
-
-[FEC_ENT]
-Enter/Exit Vehicle
-
-[FEC_WPN]
-Fire Weapon
-
-[FEC_PAS]
-Pause
-
-[FEC_FPO]
-1st Person Weapons
-
-[FEC_SMS]
-Show mouse pointer
-
-[FEC_CMS]
-Change camera mode all situations.
-
-[FEC_TSS]
-Take Screen Shot
-
-[FEN_NET]
-Network
-
-[FEN_CON]
-Connection
-
-[FEN_GAM]
-Find game
-
-[FEN_TYP]
-Game type
-
-[FEN_TY0]
-Deathmatch
-
-[FEN_TY1]
-Deathmatch stealth
-
-[FEN_TY2]
-Team Deathmatch
-
-[FEN_TY3]
-Team Deathmatch stealth
-
-[FEN_TY4]
-Stash the Cash
-
-[FEN_TY5]
-Capture the Flag
-
-[FEN_TY6]
-Rat Race
-
-[FEN_TY7]
-Domination
-
-[FEN_NAM]
-Name:
-
-[FEN_GNA]
-Game name:
-
-[FEM_MAP]
-Select map
-
-[FEN_PLS]
-Player settings
-
-[FEN_PLC]
-Player color
-
-[FEM_MA0]
-Liberty City
-
-[FEM_MA1]
-RedLight
-
-[FEM_MA2]
-Chinatown
-
-[FEM_MA3]
-The Tower
-
-[FEM_MA4]
-The Sewer
-
-[FEM_MA5]
-Industrial Park
-
-[FEM_MA6]
-The Docks
-
-[FEM_MA7]
-Staunton
-
-[FEC_EMS]
-Unique Keyboard Keys only please.
-
-[FEC_DBG]
-DEBUG MENU
-
-[FEC_TGD]
-Toggle Pad Game/Debug
-
-[FEC_TDO]
-Turn Debug Camera Off
-
-[FEC_IVH]
-Invert Mouse Horizontally:
-
-[FEC_MSL]
-LMB
-
-[FEC_MSM]
-MMB
-
-[FEC_MSR]
-RMB
-
-[FEC_QUE]
-???
-
-[FEC_TWO]
-Only Two Keyboard Keys Allowed
-
-[FEC_UMS]
-Unique Mouse Keys only please.
-
-[FEC_OMS]
-Only One Mouse Keys Allowed
-
-[FEC_UJS]
-Unique Joystick buttons only please.
-
-[FEC_OJS]
-Only One Joystick Buttons per action allowed
-
-[FEC_PTL]
-Use LockTarget with Weapon Switch Left.
-
-[FEC_PTR]
-Use LockTarget with Weapon Switch Right.
-
-[FEC_LBC]
-Use Look Left With Look Right.
-
-[FEC_JBO]
-JOY ~1~
-
-[NO_PAUZ]
-Cannot pause in multiplayer. Press twice to quit!
-
-[FEM_SL1]
-Slot 1 is free
-
-[FEM_SL2]
-Slot 2 is free
-
-[FEM_SL3]
-Slot 3 is free
-
-[FEM_SL4]
-Slot 4 is free
-
-[FEM_SL5]
-Slot 5 is free
-
-[FEM_SL6]
-Slot 6 is free
-
-[FEM_SL7]
-Slot 7 is free
-
-[FEM_SL8]
-Slot 8 is free
-
-[FEM_MM]
-MAIN MENU
-
-[FEQ_SRE]
-Are you sure you want to quit? All progress since the last save game will be lost. Proceed?
-
-[FEQ_SRW]
-Are you sure you want to quit the game?
-
-[FEG_SRV]
-SERVER
-
-[FEG_MAP]
-MAP
-
-[FEG_PLY]
-PLAYERS
-
-[FEG_TYP]
-TYPE
-
-[FEG_PNG]
-PING
-
-[FET_FG]
-FIND GAME
-
-[FET_SP]
-SINGLE PLAYER
-
-[FET_MP]
-MULTIPLAYER
-
-[FET_HG]
-HOST GAME
-
-[FET_PS]
-PLAYER SETUP
-
-[FET_CON]
-CONNECTION
-
-[FET_AUD]
-AUDIO SETUP
-
-[FET_GFX]
-GFX SETUP
-
-[FET_DIS]
-DISPLAY SETUP
-
-[FET_LAN]
-LANGUAGE SETUP
-
-[FET_LG]
-LOAD GAME
-
-[FET_DG]
-DELETE GAME
-
-[FET_NG]
-NEW GAME
-
-[FET_SG]
-SAVE GAME
-
-[FET_MAP]
-SELECT MAP
-
-[FET_GT]
-GAME TYPE
-
-[FET_CTL]
-CONTROLLER SETUP
-
-[FET_OPT]
-OPTIONS
-
-[FET_QG]
-QUIT GAME
-
-[FET_STA]
-STATISTICS
-
-[FET_BRE]
-BRIEFS
-
-[FEC_WAR]
-Warning
-
-[FEC_OKK]
-O.K.
-
-[FED_CON]
-Delete File Confirmation
-
-[FES_SSC]
-Game successfully saved.
-
-[DEL_FNM]
-File Successfully Deleted.
-
-[PCLOAD]
-Loading File Data
-
-[PCRESRT]
-Restarting Grand Theft Auto III
-
-[FEC_DLF]
-Delete Failed.
-
-[FEC_SVU]
-Save Unsuccessful.
-
-[FEC_LUN]
-Load Unsuccessful. File Corrupted, Please delete.
-
-[FEN_PLA]
-Number of players:
-
-[FET_NON]
-NO GAMES AVAILABLE
-
-[FET_SFG]
-SEARCHING FOR GAMES...
-
-[FET_SRT]
-SORTING GAMES...
-
-[FEF_LAN]
-LAN
-
-[FEF_INT]
-INTERNET
-
-[FET_REF]
-Refresh
-
-[FET_FIL]
-Filter
-
-[FET_JG]
-Join
-
-[FEC_NTW]
-Talk To Network
-
-[FEC_ESR]
-Escape key is Restricted
-
-[FEC_GSL]
-Show head bob:
-
-[FIL_FLT]
-FILTER GAMES LIST
-
-[FET_SAN]
-START NEW GAME
-
-[FIL_MAP]
-Map:
-
-[FIL_SRV]
-Server:
-
-[FIL_TYP]
-Game type:
-
-[FIL_SPC]
-Games with Space available?
-
-[FIL_PNG]
-Ping:
-
-[FEN_UKH]
-Unknown host
-
-[FEN_UKM]
-Map not found
-
-[FEN_UKT]
-Game type not found
-
-[FEN_NCI]
-NOT CONNECTED TO THE INTERNET
-
-[FET_PAU]
-PAUSE MENU
-
-[FET_SGA]
-START GAME
-
-[FEC_SGJ]
-Set Game Joystick
-
-[FEC_PAD]
-Gamepad
-
-[FEC_JOY]
-Joystick
-
-[FEC_WHL]
-Steering wheel
-
-[FEC_CNT]
-Controller type:
-
-[FES_CSA]
-Select a skin from the list below:
-
-[FES_SKN]
-SKIN NAME
-
-[FES_DAT]
-DATE
-
-[FES_NON]
-NO SKINS AVAILABLE
-
-[FEA_FM9]
-MP3 PLAYER
-
-[FESZ_QZ]
-Are you sure you want to save this game?
-
-[FES_CGA]
-Current game slots available:
-
-[FES_SCG]
-Save the current game?
-
-[FES_LCG]
-Load the game and continue playing?
-
-[FEC_FIR]
-Fire
-
-[FEC_NWE]
-Next weapon
-
-[FEC_PWE]
-Previous weapon
-
-[FEC_FOR]
-Forward
-
-[FEC_BAC]
-Backwards
-
-[FEC_LEF]
-Left
-
-[FEC_RIG]
-Right
-
-[FEC_ZIN]
-Zoom in
-
-[FEC_ZOT]
-Zoom out
-
-[FEC_EEX]
-Enter /exit
-
-[FEC_RAD]
-Radio
-
-[FEC_SUB]
-Sub-mission
-
-[FEC_CMR]
-Change camera
-
-[FEC_JMP]
-Jump
-
-[FEC_SPN]
-Sprint
-
-[FEC_HND]
-Handbrake
-
-[FEC_TUL]
-Turret left
-
-[FEC_TUR]
-Turret right
-
-[FEC_LOL]
-Look left
-
-[FEC_LOR]
-Look right
-
-[FEC_NTR]
-Next target
-
-[FEC_PTT]
-Previous target
-
-[FEC_LBA]
-Look behind
-
-[FEC_CEN]
-Center camera
-
-[FEC_UND]
-(NO)
-
-[FET_CFT]
-ON FOOT
-
-[FET_CCR]
-IN CAR
-
-[CVT_MSG]
-Converting textures to optimal format for your video card
-
-[FET_CAC]
-ACTION
-
-[FEC_IBT]
--
-
-[FEC_SPC]
-SPC
-
-[FEC_MXO]
-MXB1
-
-[FEC_MXT]
-MXB2
-
-[FEC_UNB]
-UNBOUND
-
-[FET_CME]
-CONTROL METHOD
-
-[FET_RDK]
-REDEFINE CONTROLS
-
-[FET_AMS]
-MOUSE SETTINGS
-
-[FET_STI]
-STANDARD CONTROL CONFIGURATION
-
-[FET_CTI]
-CLASSIC CONTROL CONFIGURATION
-
-[FET_MTI]
-MOUSE CONTROL CONFIGURATION
-
-[FET_DAM]
-DYNAMIC ACOUSTIC MODELING
-
-[FEC_TFL]
-Turret Left
-
-[FEC_TFR]
-Turret Right
-
-[FEC_MWF]
-WHEEL UP
-
-[FEC_MWB]
-WHEEL DN
-
-[FEC_ORR]
-or
-
-[FEC_NUS]
-NOT USED
-
-[FEC_LUD]
-Look Up
-
-[FEC_LDU]
-Look Down
-
-[FEC_CMP]
-COMBO: LOOK L+R
-
-[FEC_NTT]
-No Text Yet For This Key
-
-[FEC_FNC]
-F~1~
-
-[FEC_IRT]
-INS
-
-[FEC_DLL]
-DEL
-
-[FEC_HME]
-HOME
-
-[FEC_END]
-END
-
-[FEC_PGU]
-PGUP
-
-[FEC_PGD]
-PGDN
-
-[FEC_UPA]
-UP
-
-[FEC_DWA]
-DOWN
-
-[FEC_LFA]
-LEFT
-
-[FEC_RFA]
-RIGHT
-
-[FEC_NUM]
-NUM
-
-[FEC_NMN]
-NUM~1~
-
-[FEC_FWS]
-NUM /
-
-[FEC_PLS]
-NUM +
-
-[FEC_MIN]
-NUM -
-
-[FEC_DOT]
-NUM .
-
-[FEC_NLK]
-NUMLOCK
-
-[FEC_ETR]
-ENT
-
-[FEC_SLK]
-SCROLL LOCK
-
-[FEC_PSB]
-BREAK
-
-[FEC_BSP]
-BSPACE
-
-[FEC_TAB]
-TAB
-
-[FEC_CLK]
-CAPSLOCK
-
-[FEC_RTN]
-RET
-
-[FEC_LSF]
-LSHIFT
-
-[FEC_RSF]
-RSHIFT
-
-[FEC_LCT]
-LCTRL
-
-[FEC_RCT]
-RCTRL
-
-[FEC_LAL]
-LALT
-
-[FEC_RAL]
-RALT
-
-[FEC_LWD]
-LWIN
-
-[FEC_RWD]
-RWIN
-
-[FEC_WRC]
-WINCLICK
-
-[WIN_TTL]
-Grand Theft Auto III
-
-[WIN_95]
-Grand Theft Auto III cannot run on Windows 95
-
-[WIN_DX]
-Grand Theft Auto III requires at least DirectX version 8.1
-
-[WIN_VDM]
-Grand Theft Auto III requires at least 12MB of available video memory
-
-[DIAB3_G]
-Arriba!
-
-[FEM_RES]
-RESUME GAME
-
-[FES_SNG]
-START NEW GAME
-
-[FEM_SP]
-SINGLE PLAYER
-
-[FEM_MP]
-MULTIPLAYER
-
-[FEM_QT]
-QUIT GAME
-
-[FES_SG]
-START NEW GAME
-
-[FES_LG]
-LOAD GAME
-
-[FEM_HST]
-HOST GAME
-
-[FEM_OPT]
-OPTIONS
-
-[FEM_DBG]
-DEBUG
-
-[FET_PSU]
-PLAYER SETUP
-
-[FET_DEF]
-RESTORE DEFAULTS
-
-[FED_BRI]
-BRIGHTNESS
-
-[FED_TRA]
-TRAILS
-
-[FEM_LOD]
-DRAW DISTANCE
-
-[FEM_VSC]
-FRAME SYNC
-
-[FEM_FRM]
-FRAME LIMITER
-
-[FED_RES]
-SCREEN RESOLUTION
-
-[FED_WIS]
-WIDE SCREEN
-
-[FEDS_TB]
-BACK
-
-[FEA_MUS]
-MUSIC VOLUME
-
-[FEA_SFX]
-SFX VOLUME
-
-[FEA_RSS]
-RADIO STATION
-
-[FEL_ENG]
-ENGLISH
-
-[FEL_FRE]
-FRENCH
-
-[FEL_GER]
-GERMAN
-
-[FEL_ITA]
-ITALIAN
-
-[FEL_SPA]
-SPANISH
-
-[FEA_3DH]
-AUDIO HARDWARE
-
-[FEA_SPK]
-SPEAKERS CONFIGURATION
-
-[FEA_2SP]
-2 SPEAKERS
-
-[FEA_4SP]
-MORE THAN 2 SPEAKERS
-
-[FEA_EAR]
-HEADPHONES
-
-[FEA_NAH]
-NO AUDIO HARDWARE
-
-[FET_SNG]
-START NEW GAME
-
-[FEN_STA]
-START GAME
-
-[GMLOAD]
-LOAD GAME
-
-[GMSAVE]
-SAVE GAME
-
-[FES_DGA]
-DELETE GAME
-
-[FEM_NON]
-NONE
-
-[FEC_IVV]
-INVERT MOUSE VERTICALLY
-
-[FEC_MSH]
-MOUSE SENSITIVITY
-
-[FET_CCN]
-CONTROLS: CLASSIC
-
-[FET_SCN]
-CONTROLS: STANDARD
-
-[FES_SET]
-USE SKIN
-
-[GHOST]
-Ghost
-
-[WIN_RSZ]
-Failed to select new screen resolution
-
-[FEC_TFU]
-Turret /Dodo up
-
-[FEC_TFD]
-Turret /Dodo down
-
-[FET_APL]
-APPLY
-
-[FET_APP]
-LMB,RETURN TO APPLY THE NEW SETTING
-
-[FET_HRD]
-DEFAULT SETTINGS RESTORED
-
-[FET_MST]
-MOUSE CONTROLLED STEERING
-
-[FEC_STR]
-NUM STAR
-
-[FET_MIG]
-LEFT,RIGHT,MOUSEWHEEL TO ADJUST
-
-[FET_CIG]
-BACKSPACE TO CLEAR - LMB,RETURN TO CHANGE
-
-[FET_RIG]
-SELECT A NEW CONTROL FOR THIS ACTION OR ESC TO CANCEL
-
-[FET_EIG]
-CANNOT SET A CONTROL FOR THIS ACTION
-
-[NO_PCCD]
-Please insert Grand Theft Auto III - disc 2 into the drive or press ESC to cancel
-
-[CVT_ERR]
-You have run out of disk space. Please make some space on your harddisk before continuing. Press ESC to cancel.
-
-[FED_SUB]
-SUBTITLES
-
-[FET_DSN]
-Default Player Skin.bmp
-
-[JM3]
-'VAN HEIST'
-
-[ATUTOR2]
-~g~Drive the patients to Hospital CAREFULLY. Each bump reduces their chances of survival.
-
-[EBAL]
-'GIVE ME LIBERTY'
-
-[LM4]
-'PUMP-ACTION PIMP'
-
-[REPLAY]
-REPLAY
-
-[FEC_SFT]
-SHIFT
-
-[CRED254]
-STUDIO MANAGER
-
-[CVT_CRT]
-Cannot convert textures for your video card. You must login to an Administrator account to do this. Press ESC to quit.
-
-[FEM_ON]
-ON
-
-[FEM_OFF]
-OFF
-
-[FEM_YES]
-YES
-
-[FEM_NO]
-NO
-
-[FES_WAR]
-Saving, please wait...
-
-[FED_DLW]
-Deleting, please wait...
-
-[FED_LDW]
-Loading, please wait...
-
-[FEC_SLC]
-Slot is corrupted
-
-[FED_LFL]
-Loading save game has failed. The game will restart now.
-
-[FET_RSO]
-ORIGINAL SETTING RESTORED
-
-[FET_RSC]
-HARDWARE NOT AVAILABLE - ORIGINAL SETTING RESTORED
-
-{ re3 updates }
-{ new languages }
-[FEL_JAP]
-JAPANESE
-
-[FEL_POL]
-POLISH
-
-[FEL_RUS]
-RUSSIAN
-
-{ new display menus }
-[FED_MIP]
-MIP MAPPING
-
-[FED_AAS]
-ANTI ALIASING
-
-[FED_FIL]
-TEXTURE FILTERING
-
-[FED_BIL]
-BILINEAR
-
-[FED_TRL]
-TRILINEAR
-
-{ 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/english.txt b/utils/gxt/english.txt
deleted file mode 100644
index 32a6f18f..00000000
--- a/utils/gxt/english.txt
+++ /dev/null
@@ -1,7026 +0,0 @@
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
-
-[DEFNAM]
-Claude----------------------
-
-[IN_VEH]
-~g~Hey! Get back in the vehicle!
-
-[IN_VEH2]
-~g~You need some wheels for this job!
-
-[IN_BOAT]
-~g~You need a boat for this job!
-
-[HEY]
-~g~Don't go solo, keep your posse together!
-
-[HEY2]
-~g~Don't split up, keep the group together!
-
-[HEY3]
-~g~You've dropped your main man, go back and get 8-Ball!
-
-[HEY4]
-~g~Lose Misty and Luigi will lose your face! Go and get her!
-
-[HEY5]
-~g~One of the girls is AWOL, Go back and round her up!
-
-[HEY6]
-~g~You left your honor with the Yakuza Kanbu. You must protect him!
-
-[HEY7]
-~g~An extra gun could be useful. Go back and pick up your contact!
-
-[HEY8]
-~g~Protection means just that -Protect the Old Oriental Gentleman!
-
-[HEY9]
-~g~You want the word on the street? Go see the contact!
-
-[HELP2_A]
-Press the ~h~/ button~w~ when running to ~h~sprint.
-
-[HELP3]
-You can only sprint for short periods before becoming tired.
-
-[HELP4_A]
-Press the~h~ ~k~~VEHICLE_ACCELERATE~ button~w~ to ~h~accelerate.
-
-[HELP4_D]
-Push the~h~ right analog stick~w~ up to ~h~accelerate.
-
-[HELP5_A]
-Press the~h~ ~k~~VEHICLE_BRAKE~ button~w~ to ~h~brake~w~, or to ~h~reverse~w~ if the vehicle has stopped.
-
-[HELP5_D]
-Pull the ~h~right analog stick~w~ back to ~h~brake~w~, or to ~h~reverse~w~ if the vehicle has stopped.
-
-[HELP6_A]
-Press the~h~ ~k~~VEHICLE_HANDBRAKE~ button ~w~to apply the vehicle's ~h~handbrake.
-
-[HELP6_C]
-Press the~h~ ~k~~VEHICLE_HANDBRAKE~ button ~w~to apply the vehicle's ~h~handbrake.
-
-[HELP6_D]
-Press the~h~ ~k~~VEHICLE_HANDBRAKE~ button ~w~to apply the vehicle's ~h~handbrake.
-
-[HELP7_A]
-Press and hold the~h~ ~k~~PED_LOCK_TARGET~ button ~w~to ~h~target~w~ with the sniper rifle.
-
-[HELP7_D]
-Press and hold the~h~ ~k~~PED_LOCK_TARGET~ button ~w~to ~h~target ~w~with the sniper rifle.
-
-[HELP8_A]
-Press the~h~ ~k~~PED_SNIPER_ZOOM_IN~ button ~w~to ~h~zoom in ~w~with the rifle and the~h~ ~k~~PED_SNIPER_ZOOM_OUT~ button ~w~to ~h~zoom out ~w~again.
-
-[HELP9_A]
-Press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire~w~ the sniper rifle.
-
-[HELP10]
-This badge indicates you have a police wanted level.
-
-[HELP11]
-The more badges the higher your wanted level.
-
-[HELP13]
-Sometimes you may need to use pathways not shown on the radar.
-
-[TIMER]
-This is a timed mission, you must complete it before the timer counts down to zero.
-
-[MISTY1]
-~r~Misty is morgue-meat!
-
-[OUT_VEH]
-~g~Get out of the vehicle!
-
-[GARAGE]
-Drive the vehicle into the garage, then walk outside.
-
-[WANTED1]
-~g~Shake the cops and lose your wanted level!
-
-[NODOORS]
-~g~They ain't sardines! Get some wheels with enough seats.
-
-[TRASH]
-~g~You've junked your wheels real bad! Get your vehicle repaired!
-
-[WRECKED]
-~r~The vehicle is wrecked!
-
-[HORN]
-~g~Sound the horn.
-
-[NOMONEY]
-~g~You need more cash!
-
-[OUTTIME]
-~r~Too slow, man, too slow!
-
-[SPOTTED]
-~r~They're on to you!
-
-[REWARD]
-REWARD $~1~
-
-[GAMEOVR]
-GAME OVER
-
-[Z]
-Z-axis value: ~1~
-
-[M_FAIL]
-MISSION FAILED!
-
-[M_PASS]
-MISSION PASSED! $~1~
-
-[O_PASS]
-ODD JOB PASSED!
-
-[O_FAIL]
-ODD JOB FAILED!
-
-[DEAD]
-WASTED!
-
-[BUSTED]
-BUSTED!
-
-[S_PROMP]
-When not on a mission you can ~h~save your game here~w~, this will advance time six hours.
-
-[NUMBER]
-~1~
-
-[SCORE]
-$~1~
-
-[LOADCAR]
-LOADING VEHICLE... (PRESS L1 TO CANCEL)
-
-[CARSOFF]
-Cars turned off.
-
-[CARS_ON]
-Cars turned on.
-
-[TEXTXYZ]
-Writing coordinates to file...
-
-[CHEATON]
-Cheat mode ON
-
-[CHEATOF]
-Cheat mode OFF
-
-[UZI_IN]
-The Uzi is now in stock at Ammunation!
-
-[IMPORT1]
-Go outside and wait for your vehicle.
-
-[PAGEB1]
-Pistol delivered to hideout
-
-[PAGEB2]
-Uzi delivered to hideout
-
-[PAGEB3]
-Body armor delivered to hideout
-
-[PAGEB4]
-Shotgun delivered to hideout
-
-[PAGEB5]
-grenades delivered to hideout
-
-[PAGEB6]
-molotovs delivered to hideout
-
-[PAGEB7]
-AK47 delivered to hideout
-
-[PAGEB8]
-Sniper rifle delivered to hideout
-
-[PAGEB9]
-M16 delivered to hideout
-
-[PAGEB10]
-Rocket Launcher delivered to hideout
-
-[PAGEB11]
-Flamethrower delivered to hideout
-
-[WANT_A]
-You will only be arrested if you have a ~h~wanted level.
-
-[WANT_B]
-Your ~h~wanted level~w~ is represented by the row of stars in the top right of the screen.
-
-[WANT_C]
-You now have a ~h~wanted level~w~ of one...
-
-[WANT_D]
-two...
-
-[WANT_E]
-three...
-
-[WANT_F]
-As your ~h~wanted level~w~ increases you will attract more powerful forms of law enforcement.
-
-[WANT_G]
-When you are ~h~'busted'~w~ you are returned to the nearest police station.
-
-[WANT_H]
-The cops will take all your weapons and some of your cash as a bribe.
-
-[WANT_I]
-Any mission you were on will be failed.
-
-[WANT_J]
-You will find ways of reducing your wanted level the more you play.
-
-[WANT_K]
-If you are in a car, ~h~SPRAY SHOPS~w~ will ~h~clear your wanted level.
-
-[HEAL_B]
-When you are ~h~'wasted'~w~ you are returned to the nearest hospital.
-
-[HEAL_C]
-You will lose your weapons and the doctors will take some cash for patching you up.
-
-[HEAL_E]
-You will find ways of healing or protecting yourself the more you play the game.
-
-[DAM]
-DAMAGE:
-
-[KILLS]
-KILLS:
-
-[FARES]
-FARES:
-
-[BULL]
-BULLION:
-
-[EVID]
-EVIDENCE:
-
-[HEALTH]
-CAR HEALTH:
-
-[COLLECT]
-COLLECTED:
-
-[BOMB]
-Drive your vehicle into the bomb shop to attach a ~h~bomb~w~. Cost - ~h~$1000.
-
-[SAVE1]
-Walk through the doorway to ~h~Save the game~w~. You cannot save during a mission.
-
-[SAVE2]
-Any vehicle left in this garage will be stored when the game is saved.
-
-[AMMU]
-Go inside Ammu-Nation to buy a weapon.
-
-[BRIDGE1]
-When the Callahan Bridge is repaired you will be able to drive to Staunton Island.
-
-[TUNNEL]
-When the Porter Tunnel is opened you will be able to drive to Staunton Island.
-
-[LUIGI]
-LUIGI MISSIONS
-
-[TONI]
-TONI MISSIONS
-
-[JOEY]
-JOEY MISSIONS
-
-[FRANK]
-SALVATORE MISSIONS
-
-[DIABLO]
-DIABLO MISSIONS
-
-[ASUKA]
-ASUKA MISSIONS
-
-[B_SITE]
-ASUKA SUBURBAN MISSIONS
-
-[KENJI]
-KENJI MISSIONS
-
-[RAY]
-RAY MISSIONS
-
-[LOVE]
-LOVE MISSIONS
-
-[YARDIE]
-YARDIE MISSIONS
-
-[HOOD]
-HOOD MISSIONS
-
-[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]
-Portland Beach
-
-[LITTLEI]
-Saint Mark's
-
-[REDLIGH]
-Red Light District
-
-[TOWERS]
-Hepburn Heights
-
-[HARWOOD]
-Harwood
-
-[ROADBR1]
-Callahan Bridge
-
-[ROADBR2]
-Callahan Bridge
-
-[TUNNELP]
-Porter Tunnel
-
-[BOMB1]
-8-Ball's Garage
-
-[COM_ZON]
-Staunton Island
-
-[STADIUM]
-Aspatria
-
-[HOSPI_2]
-Rockford
-
-[UNIVERS]
-Liberty Campus
-
-[CONSTRU]
-Fort Staunton
-
-[PARK]
-Belleville Park
-
-[COM_EAS]
-Newport
-
-[SHOPING]
-Bedford Point
-
-[YAKUSA]
-Torrington
-
-[SUB_ZON]
-Shoreside Vale
-
-[AIRPORT]
-Francis Intl. Airport
-
-[PROJECT]
-Wichita Gardens
-
-[SUB_IND]
-Pike Creek
-
-[SWANKS]
-Cedar Grove
-
-[BIG_DAM]
-Cochrane Dam
-
-[SUB_ZO2]
-Shoreside Vale
-
-[SUB_ZO3]
-Shoreside Vale
-
-[CAR_1]
-Ambulance
-
-[CAR_2]
-Firetruck
-
-[CAR_3]
-Police
-
-[CAR_4]
-Enforcer
-
-[CAR_5]
-Barracks
-
-[CAR_6]
-Rhino
-
-[CAR_7]
-FBIcar
-
-[CAR_8]
-Securicar
-
-[CAR_9]
-Moonbeam
-
-[CAR_10]
-Coach
-
-[CAR_11]
-Flatbed
-
-[CAR_12]
-Linerunner
-
-[CAR_13]
-Trashmaster
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-Mr Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinel
-
-[CAR_25]
-Cheetah
-
-[CAR_26]
-Banshee
-
-[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]
-Stallion
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Cabbie
-
-[CAR_39]
-Buggy
-
-[LUIGIS]
-Luigi's Place
-
-[GOAWAY]
-~g~You are already on a mission!
-
-[LUIGGO]
-~g~Luigi's interviewing some new girls -Come back later!
-
-[JOEYGO]
-~g~Joey's out on the town with Misty -Drop by later!
-
-[TONIGO]
-~g~Toni's taken his Momma to the opera -Call in some other time!
-
-[KEMUGO]
-~g~Maria and Kemuri are all tied up at the moment -Drop by later!
-
-[KENJGO]
-~g~Kenji is attending a Yakuza meeting -Call by some other time!
-
-[RAYGO]
-~g~Ray has other toilets to hang around -Try again later!
-
-[LOVEGO]
-~g~Donald Love has other business to attend to -Make an appointment later!
-
-[KENSGO]
-~g~Kenji is busy! -Call by later!
-
-[HOODGO]
-~g~The Hoods are not available at this time!
-
-[WRONGT1]
-~g~Come back between 05:00 and 21:00 for a job
-
-[WRONGT2]
-~g~Come back between 06:00 and 14:00 for a job
-
-[WRONGT3]
-~g~Come back between 15:00 and 00:00 for a job
-
-[GUN_1A]
-Use the ~h~~k~~PED_CYCLE_WEAPON_RIGHT~ button ~w~and the ~h~~k~~PED_CYCLE_WEAPON_LEFT~ button ~w~to cycle through your weapons.
-
-[GUN_2A]
-Hold the ~h~~k~~PED_LOCK_TARGET~ button ~w~to ~h~auto-target~w~, press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire! Try shooting the targets...
-
-[GUN_2C]
-Hold the ~h~~k~~PED_LOCK_TARGET~ button ~w~to ~h~auto-target~w~, press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire! Try shooting the targets...
-
-[GUN_2D]
-Hold the ~h~~k~~PED_LOCK_TARGET~ button ~w~to ~h~auto-target~w~, press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire! Try shooting the targets...
-
-[GUN_3A]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button,~w~ press the ~h~~k~~PED_CYCLE_TARGET_LEFT~ button~w~ or the ~h~~k~~PED_CYCLE_TARGET_RIGHT~ button to switch target.
-
-[GUN_3B]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button,~w~ press the ~h~~k~~PED_CYCLE_TARGET_LEFT~ button~w~ or the ~h~~k~~PED_CYCLE_TARGET_RIGHT~ button to switch target.
-
-[GUN_4A]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button~w~ you can walk or run while remaining locked onto a target.
-
-[GUN_4B]
-While holding the ~h~~k~~PED_LOCK_TARGET~ button~w~ you can walk or run while remaining locked onto a target.
-
-[GUN_5]
-You can practice targeting and shooting on these paper targets. When you are finished resume the mission.
-
-[TAXI1]
-~g~Look for a fare.
-
-[FARE1]
-~g~Destination ~w~'Meeouch Sex Kitten Club' ~g~in Redlight.
-
-[FARE2]
-~g~Destination ~w~'Supa Save' ~g~in Portland View.
-
-[FARE3]
-~g~Destination ~w~'old school hall' ~g~in Chinatown.
-
-[FARE4]
-~g~Destination ~w~'Greasy Joe's Cafe' ~g~in Callahan Point.
-
-[FARE5]
-~g~Destination ~w~'AmmuNation' ~g~in Redlight.
-
-[FARE6]
-~g~Destination ~w~'Easy Credit Autos' ~g~in Saint Mark's.
-
-[FARE7]
-~g~Destination ~w~'Woody's topless bar' ~g~in Redlight.
-
-[FARE8]
-~g~Destination ~w~'Marcos Bistro' ~g~in Saint Mark's.
-
-[FARE9]
-~g~Destination ~w~'import export garage' ~g~in Portland Harbor.
-
-[FARE10]
-~g~Destination ~w~'Punk Noodles' ~g~in Chinatown.
-
-[FARE12]
-~g~Destination ~w~'Football Stadium' ~g~in Aspatria.
-
-[FARE13]
-~g~Destination ~w~'The Church' ~g~in Bedford Point
-
-[FARE14]
-~g~Destination ~w~'The Casino' ~g~in Torrington
-
-[FARE15]
-~g~Destination ~w~'Liberty University' ~g~in Liberty Campus
-
-[FARE16]
-~g~Destination ~w~'Shopping Mall' ~g~in Belleville Park Area
-
-[FARE17]
-~g~Destination ~w~'Museum' ~g~in Newport
-
-[FARE18]
-~g~Destination ~w~'AmCo Building' ~g~in Torrington
-
-[FARE19]
-~g~Destination ~w~'Bolt Burgers' ~g~in Bedford Point
-
-[FARE20]
-~g~Destination ~w~'The Park' ~g~in Belleville
-
-[FARE21]
-~g~Destination ~w~'Francis intl. Airport'
-
-[FARE22]
-~g~Destination ~w~'Cochrane Dam'
-
-[FARE24]
-~g~Destination ~w~'The hospital' ~g~in Pike Creek
-
-[FARE25]
-~g~Destination ~w~'The Park' ~g~in Shoreside Vale
-
-[FARE26]
-~g~Destination ~w~'North West Towers' ~g~in Wichita Gardens
-
-[NEW_TAX]
-BIGGER! FASTER! HARDER! new Borgnine taxis open for business in Harwood. Call 555-BORGNINE today!
-
-[TSCORE2]
-$~1~
-
-[IN_ROW]
-~1~ IN A ROW bonus! $~1~
-
-[TTUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle taxi missions on or off.
-
-[TTUTOR2]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle taxi missions on or off.
-
-[ATUTOR2]
-~g~Drive the patients to Hospital CAREFULLY. Each bump reduces their chances of survival.
-
-[A_TIME]
-+~1~ seconds
-
-[A_FULL]
-~r~Ambulance full!!
-
-[A_RANGE]
-~g~The ambulance radio is out of range, get closer to a hospital!
-
-[FTUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle fire truck missions on or off.
-
-[FTUTOR2]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle fire truck missions on or off.
-
-[F_PASS1]
-Fire extinguished!
-
-[F_RANGE]
-~g~The fire truck radio is out of range, get closer to a fire station!
-
-[C_BREIF]
-~g~Suspect last seen in the ~a~ area.
-
-[C_RANGE]
-~g~The police radio is out of range, get closer to a police station!
-
-[DODO_FT]
-You flew for ~1~ seconds!
-
-[EBAL]
-'GIVE ME LIBERTY'
-
-[EBAL_A]
-I know a place on the edge of the Red Light District where we can lay low,
-
-[EBAL_A1]
-but my hands are all messed up so you better drive, brother.
-
-[EBAL_1]
-Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a vehicle.
-
-[EBAL_1B]
-Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a vehicle.
-
-[EBAL_2]
-~g~Get back into the car!
-
-[EBAL_3]
-This is the ~h~radar~w~. Use it to navigate the city, follow the ~h~blip~w~ on the ~h~radar~w~ to find the hideout!
-
-[EBAL_D]
-I know a guy, he's connected, his name's Luigi.
-
-[EBAL_D1]
-Me an' him go back so I could probably get you some work. C'mon lets head over there.
-
-[EBAL_E]
-C'mon, lets drop by and I'll introduce you.
-
-[EBAL_I]
-The boss will be out to see you shortly...
-
-[EBAL_J]
-8-Ball's got some business up stairs.
-
-[EBAL_K]
-Maybe you can do me a favor.
-
-[EBAL_L]
-One of my girls needs a ride so grab a car and pick up Misty from the clinic. Then bring her back here.
-
-[EBAL_N]
-So keep your hands on the wheel!
-
-[EBAL_4]
-~r~8-Ball's dead!
-
-[EBAL_5]
-~g~Get a vehicle!
-
-[EBAL_6]
-~g~Pick up Misty!
-
-[LM1]
-'LUIGI'S GIRLS'
-
-[LM2]
-'DON'T SPANK MA BITCH UP'
-
-[LM3]
-'DRIVE MISTY FOR ME'
-
-[LM4]
-'PUMP-ACTION PIMP'
-
-[LM5]
-'THE FUZZ BALL'
-
-[LM1_2]
-~g~Take Misty to Luigi's Club.
-
-[LM1_3]
-~g~Press the horn to get the girl into the car.
-
-[LM1_6]
-~g~Get back into the car!
-
-[LM1_7]
-Stop the vehicle next to Misty and allow her to enter it.
-
-[LM1_8]
-You can go and see Luigi for more work or check out Liberty City.
-
-[LM2_A]
-There's a new high on the street goes by the name of SPANK.
-
-[LM2_E]
-Some wiseguy's been introducing this trash to my girls down Portland Harbor.
-
-[LM2_B]
-Go and introduce a bat to his face!
-
-[LM2_G]
-I want compensation for this insult!
-
-[LM2_1]
-~g~Take his car and get it resprayed.
-
-[LM2_2A]
-Use the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~punch ~w~and ~h~kick~w~ or ~h~swing ~w~the bat!
-
-[LM2_2C]
-Use the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~punch ~w~and ~h~kick~w~ or ~h~swing ~w~the bat~w~!
-
-[LM2_2D]
-Use the~h~ ~k~~PED_FIREWEAPON~ button~w~ to ~h~punch ~w~and ~h~kick~w~ or ~h~swing ~w~the bat~w~!
-
-[LM2_3]
-~g~Stash the car in Luigi's lockup!
-
-[LM2_4]
-~g~Respray the car!
-
-[LM3_A]
-Hey I've gotta talk to you... All right Mick I'll talk to yah later.
-
-[LM3_B]
-How yah doing kid?
-
-[LM3_C]
-The Don's son, Joey Leone, he wants some action from his regular girl Misty.
-
-[LM3_D]
-Go pick her up at Hepburn Heights...
-
-[LM3_E]
-but watch yourself that's Diablo turf.
-
-[LM3_F]
-Then run her over to his garage in Trenton and make it quick,
-
-[LM3_H]
-so keep your eyes on the road and off Misty!
-
-[LM3_2]
-~g~Take Misty to Joey's.
-
-[LM3_4]
-~g~Go pick up Misty!
-
-[LM3_5]
-You working regular for Luigi now huh? It's about time he got a driver we can trust!
-
-[LM3_7]
-I'll be with you in a minute spark plug.
-
-[LM3_10]
-~g~Get a vehicle!
-
-[LM4_B]
-Go and take care of things for me.
-
-[LM4_C]
-If you need a piece go around the back of AmmuNation opposite the subway.
-
-[LM5_A]
-The Policeman's Ball is being held at the old school hall near the Callahan Bridge
-
-[LM5_B]
-and they'll be looking for some 'old school' action.
-
-[LM5_C]
-Now I got girls all over town walking the streets.
-
-[LM5_D]
-Get'em to the ball they'll make a bundle.
-
-[LM5_1]
-~g~You pack these ladies too tight, they gonna bruise! ~g~Drop these girls off first, then come back for more.
-
-[LM5_2]
-~r~One of Luigi's girls is bodybag meat!
-
-[LM5_3]
-~g~You need a car!
-
-[LM5_4]
-~g~Pick up the girls working St. Marks.
-
-[LM5_5]
-~g~Take the girls to the Fuzz Ball!
-
-[LM5_8]
-~g~Girls working the Ball: ~1~
-
-[JM2]
-'FAREWELL 'CHUNKY' LEE CHONG'
-
-[JM3]
-'VAN HEIST'
-
-[JM4]
-'CIPRIANI'S CHAUFFEUR'
-
-[JM5]
-'DEAD SKUNK IN THE TRUNK'
-
-[JM1_1]
-~g~Take Forelli's car to 8-Ball's garage North of here, behind 'Easy Credit Autos'.
-
-[JM1_2]
-~g~Park the car back at Marco's Bistro.
-
-[JM1_3]
-~g~Activate the car bomb then get out of there!
-
-[JM1_4]
-~g~You're trashing the vehicle! Get it repaired!
-
-[JM1_5]
-~g~The car bomb's not set!
-
-[JM1_6]
-~g~Put the car back in the correct position.
-
-[JM1_8A]
-~y~Hey, it's my main man!
-
-[JM1_8B]
-~y~The bomb shop's automated. Just drive in, stop your car and the shop will do the rest.
-
-[JM1_8C]
-~y~Here, your first can be free, but after that it'll cost.
-
-[JM2_A]
-Chunky Lee Chong is pushing spank for some new gang from Colombia... or Colorado... or something....
-
-[JM2_B]
-I'm not really sure. Who needs details anyway.
-
-[JM2_D]
-That rat has sold his last stir fry.
-
-[JM2_E]
-I want you to take him out!
-
-[JM2_G]
-Sort yourself with a nine, you know where it is, right?
-
-[JM2_H]
-Well remember, just watch your back in China Town, it's Triad territory.
-
-[JM3_A]
-Alright, we're gonna hit the pay role van.
-
-[JM3_B]
-It leaves the edge of China Town everyday.
-
-[JM3_C]
-Bullets won't even dent the van's armor, so get a car and ram it off the road.
-
-[JM3_D]
-Now hit it hard and the punk ass security guards should bail.
-
-[JM3_E]
-Then take it to the warehouse at the docks and my guys are gonna take over from there.
-
-[JM3_F]
-Now it won't be doin' it's rounds all day, so don't hang around.
-
-[JM3_1]
-~g~Take the van to the lock up.
-
-[JM3_2]
-~g~Ram the van until its damage is below 70 percent.
-
-[JM4_B]
-Oh! Here's the guy I was telling you about!
-
-[JM4_C]
-Alright Listen. This guy ain't Italian and he's no mechanic but he can get things fixed.
-
-[JM4_D]
-This is Pops Capo, Toni Cipriani.
-
-[JM4_E]
-Yeah, I'm Toni Cipriani
-
-[JM4_F]
-Take him to Momma's restaurant at St Marks, alright.
-
-[JM4_G]
-Now listen to me, I'm planning a job that needs a good driver so drop by sometime later Ok?
-
-[JM4_2]
-Wait here! Keep the engine running. This ain't a social call.
-
-[JM4_3]
-It's a Triad ambush! Get us out of here kid!
-
-[JM4_4]
-The Triads think they can mess with me, the triads, with ME!
-
-[JM4_6]
-Hey watch the car! I said no fancy crap.
-
-[JM4_7]
-~g~Take Toni to his momma's restaurant.
-
-[JM4_8]
-~r~Toni's been wasted!
-
-[JM5_A]
-Beautiful! Just beautiful.
-
-[JM5_B]
-Alright, Just the guy I need to talk to!
-
-[JM5_D]
-One of the Forellis thought he was a wise guy, so he got what he had coming to him.
-
-[JM5_E]
-Take the corpse to the crusher in Harwood, alright?
-
-[JM5_1]
-~g~Take it to the crusher!
-
-[JM5_2]
-~g~It's the Forelli brothers!
-
-[JM6_A]
-What a ride she's gonna be, huh?
-
-[JM6_B]
-Alright, listen. Get some wheels to the safehouse at St. Marks and pick up a few friends of mine.
-
-[JM6_C]
-They're hittin' a bank and they need a driver.
-
-[JM6_D]
-I gave my word that you were the man, so don't screw this up.
-
-[JM6_E]
-Get them to the bank before five o'clock, not a minute after.
-
-[JM6_2]
-Keep the engine running we'll be in and out in no time.
-
-[JM6_3]
-Get us out of here!!
-
-[JM6_4]
-Shake the cops and get us to the safehouse!!
-
-[JM6_6]
-~g~Go and get a vehicle less conspicuous!
-
-[JM6_7]
-~g~You need all 3 to rob the bank!
-
-[TM1]
-'TAKING OUT THE LAUNDRY'
-
-[TM2]
-'THE PICK-UP'
-
-[TM3]
-'SALVATORE'S CALLED A MEETING'
-
-[TM4]
-'TRIADS AND TRIBULATIONS'
-
-[TM5]
-'BLOW FISH'
-
-[TONI_P]
-I've got some urgent work for you! -Toni
-
-[TM1_A]
-~w~Take a seat kid, take a god damned seat.
-
-[TM1_B]
-~w~So the laundry won't pay any protection eh?
-
-[TM1_C]
-~w~The Triads think they can mess with me?
-
-[TM1_D]
-~w~Let's teach these would be tough guys what it means to be a tough guy.
-
-[TM1_E]
-~w~Yeah, teach 'em some respect. No son of mine gets it from some Triads.
-
-[TM1_F]
-~w~Your father, god rest his soul, took no crap from no Triads back in Sicily.
-
-[TM1_G]
-~w~Sorry Ma. Yes Ma.
-
-[TM1_H]
-~w~I want you to destroy their laundry vans
-
-[TM1_I]
-~w~and mangle any triad gimp that gets in your way.
-
-[TM1_J]
-~w~8-Ball can supply you with what you're gonna need.
-
-[TM2_A]
-~w~TONI's off making people bleed or trying to.
-
-[TM2_AA]
-~w~He'll never be as tough as his Pop, but he left you a note on the table.
-
-[TM2_B]
-~w~The laundry has agreed to pay - you did real good kid!
-
-[TM2_C]
-~w~Go collect the cash and bring it back here. Watch out for the Triads.
-
-[TM2_D]
-~w~They may be shoving a firecracker up your ass, but don't take no crap.
-
-[TM2_E]
-~w~Nobody I mean nobody, messes with TONI CIPRIANI!
-
-[TM2_1]
-~g~Get the cash back to Toni's!!
-
-[TM2_2]
-~g~You iced them all!
-
-[TM3_MA]
-~w~I don't know where he is!
-
-[TM3_MB]
-~w~I swear that boy of mine don't know himself sometimes.
-
-[TM3_MC]
-~w~Now his father, he was different. Always on top, in charge, manful...
-
-[TM3_A]
-~w~Don Salvatore has called a meeting.
-
-[TM3_B]
-~w~I need you to collect the limo and his boy, Joey, from the garage.
-
-[TM3_C]
-~w~Then get Luigi from his club, come back here and pick me up,
-
-[TM3_D]
-~w~then we'll all drive over to the boss's place together.
-
-[TM3_E]
-~w~Those Triads, they don't know when to stop.
-
-[TM3_F]
-~w~They want a war. They got a war.
-
-[TM3_G]
-~w~Now get going.
-
-[TM3_1]
-~g~Pick up the Stretch from Joey's.
-
-[TM3_2]
-~g~Now go pick up Luigi.
-
-[TM3_3]
-~g~Now go pick up Toni.
-
-[TM3_4]
-~g~Drive the goodfellas to Salvatore's place.
-
-[TM3_5]
-~y~It's a triad ambush!!
-
-[TM4_B]
-~w~We're at WAR! The Triads have a fish factory as a front.
-
-[TM4_C]
-~w~Most of their business goes down at the fish market in Chinatown.
-
-[TM4_D]
-~w~That laundry still owes us protection.
-
-[TM4_E]
-~w~They reckon the Triads are protecting them now, so I say we exact a fitting punishment.
-
-[TM4_F]
-~w~Take these boys over and whack the Triad Warlords!
-
-[TM4_G]
-~w~Hell, if you get a chance, pop some of their soldiers too.
-
-[TM4_GAT]
-~g~You need a 'Triad fish van' to enter.
-
-[TM5_B]
-~w~OK, I've had enough of this shit.
-
-[TM5_C]
-~w~We're gonna finish the Triads in Liberty once and for all!
-
-[TM5_D]
-8-Ball's rigged a dustcart with a bomb.
-
-[TM5_E]
-~w~It's on a timer so if you mess up there'll be no evidence. Go and pick up the dustcart.
-
-[TM5_F]
-~w~Careful, 8-Ball says it's real sensitive and the slightest bump could set that thing off!
-
-[TM5_G]
-~w~Their fish factory will open its gates for a dustcart, so you can drive right in.
-
-[TM5_H]
-~w~Park up between the gas canisters and get the hell out of there!
-
-[TM5_I]
-~w~I want it to rain mackerel.
-
-[TM5_J]
-~w~We're talking real biblical here, nothing low budget.
-
-[FM2]
-'CUTTING THE GRASS'
-
-[FM4]
-'LAST REQUESTS'
-
-[FM1_A]
-~w~Me an' the fellas need to talk business
-
-[FM1_B]
-~w~so you're gonna look after my girl for the evening.
-
-[FM1_C]
-~w~HEY MARIA! MOVE YOUR BUTT!
-
-[FM1_D]
-~w~Dumb broad does this every time.
-
-[FM1_E]
-~w~And here she is, the one and only Queen of Sheba!
-
-[FM1_F]
-~w~What were you doing up there?
-
-[FM1_G]
-~w~Whatever it was, I bet it cost me money.
-
-[FM1_H]
-~w~Well, you don't think I hang around for the conversation, do you?
-
-[FM1_I]
-~w~Get in that car and keep your big mouth shut.
-
-[FM1_J]
-~w~Take the limo but bring it back in one piece, y'hear me?
-
-[FM1_K]
-~w~And watch her, she can be trouble.
-
-[FM1_L]
-~w~Yeah, yeah, yeah! I'm sure your new lap dog has everything covered,
-
-[FM1_M]
-~w~and isn't he big and strong?
-
-[FM1_N]
-~w~Hey Fido, Let's go visit Chico and get some party treats!
-
-[FM1_P]
-~g~That's Chico over there, pull up next to him.
-
-[FM1_S]
-~w~Here you go lady.
-
-[FM1_TT]
-~w~IT'S A POLICE RAID!
-
-[FM1_1]
-~g~Get back into the Stretch!
-
-[FM1_2]
-~g~Get into the Stretch!
-
-[FM1_3]
-~r~Leave Maria and Salvatore will have you whacked, go back and pick her up.
-
-[FM1_4]
-~g~You've dumped the Don's woman! Get back to the warehouse and wait for Maria!
-
-[FM1_5]
-~g~Get Maria safely back to Salvatore's!
-
-[FM1_6]
-~g~Chico won't be there forever, get Maria to the waterfront!
-
-[FM1_7]
-~r~Maria's dead! Salvatore won't be too pleased...
-
-[FM1_8]
-~r~You wasted Maria's supplier!
-
-[FM2_J]
-Leave us alone for a minute.
-
-[FM2_A]
-The Colombian Cartel is making SPANK somewhere in Liberty.
-
-[FM2_K]
-but we don't know where, and they seem to know everything we're doin' before we do.
-
-[FM2_L]
-There is a guy named Curly Bob works the bar at Luigi's.
-
-[FM2_M]
-He's been throwing more money around than he's earning.
-
-[FM2_N]
-He usually gets a taxi home after work. So follow him.
-
-[FM2_O]
-And if he's rattin' us out... kill him.
-
-[FM2_F]
-Here comes our little friend. Mr big mouth himself.
-
-[FM2_G]
-Were you followed? You know what goes on here is our little secret.
-
-[FM2_H]
-No..no, I wasn't followed. You got my stuff?
-
-[FM2_I]
-Here's your SPANK, squealer, now talk.
-
-[FM2_P]
-OK, so the Leone's are fighting wars on two fronts.
-
-[FM2_Q]
-They're in a turf war with the Triads with no sign of either side giving up.
-
-[FM2_R]
-Meanwhile Joey Leone has stirred up some bad blood with the Forellis.
-
-[FM2_S]
-Every day they're losing men and influence in the city.
-
-[FM2_T]
-Salvatore is becoming dangerous and paranoid. He suspects everybody and everything.
-
-[FM2_U]
-With loyalty like yours, what has he possibly got to worry about.
-
-[FM2_1]
-~g~There's Curly Bob!
-
-[FM2_2]
-~g~Curly's left the club, tail him!
-
-[FM2_5]
-~g~Take him to Portland Harbor.
-
-[FM2_6]
-~r~Curly won't get into a smashed-up taxi!
-
-[FM2_7]
-~r~Curly's spooked! The meeting's off!
-
-[FM2_8]
-~g~Whack Curly Bob!
-
-[FM2_9]
-~r~Curly Bob's dead!
-
-[FM2_10]
-~r~Curly got away!
-
-[FM2_11]
-~g~Park out the front of Luigi's Club, Curly Bob will be leaving shortly.
-
-[FM2_12]
-~r~He gave you the slip!
-
-[FM3_A]
-~w~We should take these Colombian bastards out,
-
-[FM3_B]
-~w~but while we're at war with the Triads we ain't strong enough.
-
-[FM3_C]
-~w~The Cartel has got bottomless funds from pushing that SPANK crap.
-
-[FM3_D]
-~w~If we make an open attack on them, they'll wipe the floor with us.
-
-[FM3_E]
-~w~They must be making SPANK on that big boat that Curly lead you to.
-
-[FM3_F]
-~w~So we gotta use our heads, or rather one head. Your head.
-
-[FM3_G]
-~w~I'm asking you to destroy that SPANK factory as a personal favor to me, Salvatore Leone.
-
-[FM3_H]
-~w~If you do this for me, you will be a made man, anything you want.
-
-[FM3_I]
-~w~Go and see 8-Ball, you'll need his expertise to blow-up that boat.
-
-[FM3_8A]
-~w~Yo my man! Salvatore phoned ahead,
-
-[FM3_8B]
-~w~but a job like this is gonna need a lot of fireworks.
-
-[FM3_8D]
-~w~but you know with me you get a lot of bang for your buck.
-
-[FM3_8E]
-~w~Okay, let's do this thing!
-
-[FM3_8F]
-~w~I can set this baby to detonate, but I still can't use a piece with these hands.
-
-[FM3_8G]
-~w~Here, this rifle should help you pop some heads!
-
-[FM3_4]
-~g~Stop the vehicle and let 8-Ball out!
-
-[FM3_7]
-~r~8-Ball's been iced!
-
-[FM3_8]
-~r~The guards have been alerted!
-
-[FM4_A]
-~w~It's my favorite cleaner.
-
-[FM4_B]
-~w~I'm proud of you my boy, you kicked the shit out of those grease balls.
-
-[FM4_C]
-~w~I've got just one little job for you before we can all celebrate.
-
-[FM4_D]
-~w~There's a car around the block from Luigi's club.
-
-[FM4_E]
-~w~The inside is covered in brains.
-
-[FM4_F]
-~w~We had to help some guy make up his mind and it proved a little messy.
-
-[FM4_H]
-~w~Take it to the crusher before the cops find it.
-
-[AM3]
-'PAPARAZZI PURGE'
-
-[AM4]
-'PAYDAY FOR RAY'
-
-[AM5]
-'TWO-FACED TANNER'
-
-[AM1_A]
-We have certain issues to clear up before we can continue any form of relationship,
-
-[AM1_B]
-business or otherwise. Lets lay our cards on the table.
-
-[AM1_C]
-I am Yakuza and I know you worked for Salvatore Leone's family.
-
-[AM1_D]
-I can give you work with our organization,
-
-[AM1_E]
-But first you must prove to me that your ties with the Mafia are truly broken.
-
-[AM1_G]
-Make sure he doesn't reach his club alive.
-
-[AM1_H]
-Meanwhile Maria and I will catch up on old times.
-
-[AM1_I]
-Oh..Asuka, you've got a massager.
-
-[AM1_J]
-That's not a massager.
-
-[AM1_1]
-~g~Salvatore is now leaving Luigi's!
-
-[AM1_2]
-~r~You have been spotted!
-
-[AM1_3]
-~r~You've missed Salvatore!
-
-[AM1_4]
-~r~Nice going, you scared off the target! Call yourself a hitman?
-
-[AM1_5]
-~g~Get to the Red Light District and wait for Salvatore to leave the club.
-
-[AM1_7]
-~r~Salvatore's home, safe and sipping a cocktail. Ain't no one gonna call you the 'Jackal'!
-
-[AM1_8]
-~g~Salvatore will be leaving Luigi's at about ~1~:~1~
-
-[AM2_4]
-~g~They seen you coming like a dayglow elephant!
-
-[AM3_A]
-A reporter has been nosing around.
-
-[AM3_B]
-Maria and I have taken a little holiday together until you can get rid of this perverted voyeur.
-
-[AM4_A]
-It's my handsome handyman!
-
-[AM4_B]
-Maria's all tied up at the moment but I'll tell her you called.
-
-[AM4_C]
-Who's that? Asuka? I know I've been a naughty girl but I really need to pee! OK?
-
-[AM4_D]
-It's time you met our man inside the LPD.
-
-[AM4_E]
-Here's his payment for the last little job he did for us.
-
-[AM4_F]
-He is understandably cautious.
-
-[AM4_G]
-Get to the pay phone in Torrington as quick as you can and await his instructions.
-
-[AM5_A]
-Maria and I have gone shopping.
-
-[AM5_B]
-Our source in the police has informed us that one of our drivers is a strangely animated undercover cop!
-
-[AM5_C]
-He's more or less useless out of his car, so we've tagged it with a tracer.
-
-[AM5_D]
-Make him bleed!
-
-[AM5_1]
-Tanner's on to you!
-
-[AS1]
-'BAIT'
-
-[AS2]
-'ESPRESSO-2-GO!'
-
-[AS4]
-'RANSOM'
-
-[AS1_A]
-~w~Miguel seems to think I'm mistreating him.
-
-[AS1_B]
-~w~Still, he's revealed the extent to which Catalina fears your quest for revenge.
-
-[AS2_A]
-~w~We underestimated Catalina's plans for SPANK.
-
-[AS2_B]
-~w~It reaches far beyond the Yardies selling it on the street corners.
-
-[AS2_D]
-~w~They've been selling SPANK through the street stalls.
-
-[AS2_1]
-~g~All espresso stalls in Portland wrecked!!
-
-[AS2_2]
-~g~All espresso stalls in Staunton Island wrecked!!
-
-[AS2_3]
-~g~All espresso stalls in Shoreside Vale wrecked!!
-
-[AS2_4]
-~r~The Cartel have warned their pushers!!
-
-[AS2_5]
-~g~There are still espresso stalls in Shoreside Vale and on Staunton Island!
-
-[AS2_6]
-~g~There are still espresso stalls in Shoreside Vale!
-
-[AS2_7]
-~g~There are still espresso stalls on Staunton Island!
-
-[AS2_8]
-~g~There are still espresso stalls in Portland!
-
-[AS2_9]
-~g~There are still espresso stalls in Portland and Shoreside Vale!
-
-[AS2_10]
-~g~There are still espresso stalls in Portland and on Staunton Island
-
-[AS2_12]
-~g~Cruise Liberty's districts to find ~b~Espresso-2-Go stalls!
-
-[AS3_A]
-~W~Do we tighten it some more now, or just wait for it to turn black and fall off?
-
-[AS3_B]
-~w~Give it a quick prod...
-
-[AS3_D]
-~w~My Handyman!
-
-[AS3_E]
-~w~I was bored so I came over to keep Asuka company.
-
-[AS3_1]
-~g~Find the ~r~boat~g~ and get to the ~b~marker buoy!
-
-[AS3_3]
-~g~Wait for the ~y~plane~g~ to start its approach!
-
-[AS3_5]
-~g~Collect the cargo!
-
-[AS3_4]
-~g~Use a rocket launcher to shoot the ~y~plane~g~ down!!
-
-[AS3_2]
-~b~Get to the runway marker buoys! ~y~The plane is on its final approach!!
-
-[AS3_6]
-~g~~1~ OF 8
-
-[KM1]
-'KANBU BUST-OUT'
-
-[KM3]
-'DEAL STEAL'
-
-[KM4]
-'SHIMA'
-
-[KM5]
-'SMACK DOWN'
-
-[KM1_A]
-My sister speaks highly of you,
-
-[KM1_E]
-though I am yet to be convinced that a gaijin can offer anything but disappointment.
-
-[KM1_B]
-Perhaps you could help deal with a situation that has me at a disadvantage.
-
-[KM1_F]
-Of course failure has its own disgrace.
-
-[KM1_C]
-A Yakuza Kanbu is in custody awaiting transfer for trial.
-
-[KM1_G]
-He is a valued member of the family.
-
-[KM1_H]
-Break him out of custody and get him to the dojo at Bedford Point.
-
-[KM1_D]
-We thankyou for your selfless actions. If you ever need help the dojo will be honoured to provide two men who will stand at your side.
-
-[KM1_1]
-~g~Steal a cop car!
-
-[KM1_2]
-~g~Rig the car with a bomb!
-
-[KM1_3]
-~g~Now get him to the Yakuza dojo.
-
-[KM1_5]
-~g~Okay now go to the police station.
-
-[KM1_6]
-~g~Fit the car with a bomb!
-
-[KM1_7]
-~g~Authorised police vehicles only!
-
-[KM1_9]
-~r~You did not use a car bomb to destroy the wall
-
-[KM1_10]
-~r~The Yakuza Kanbu is dead -along with your honor!
-
-[KM1_11]
-~r~You brought the heat down on yourself!
-
-[KM2_A]
-It is impossible to over-estimate the importance of etiquette in this line of work.
-
-[KM2_B]
-To my eternal shame, a man once did me a favor and I have never had the opportunity to repay his kindness.
-
-[KM2_C]
-The man's weakness is motor cars and he has requested that we acquire him certain models for his collection.
-
-[KM2_F]
-My honor demands it.
-
-[KM2_2]
-~g~Car delivered.
-
-[KM3_A]
-When trouble looms, the fool turns his back, while the wise man faces it down.
-
-[KM3_B]
-The Colombian Cartel have ignored repeated requests to leave our interests in Liberty well alone.
-
-[KM3_C]
-Now they are negotiating terms with the Jamaicans in order to humiliate us further.
-
-[KM3_D]
-They are finalizing a deal across town.
-
-[KM3_F]
-Take one of my men, steal a Yardie car, and go and pay your respects to the Colombians.
-
-[KM3_E]
-Our Honor demands that you leave no one alive.
-
-[KM3_2]
-~g~Go and pick up your contact.
-
-[KM3_3]
-~g~The meeting is being held in the hospital parking lot in Rockford!
-
-[KM3_4]
-~r~They got away!
-
-[KM3_6]
-~g~Kill them, kill them all!
-
-[KM3_8]
-~g~You need a Yardie car to get on with the job!
-
-[KM3_9]
-~r~One of the Colombians is dead, the deal's off.
-
-[KM3_10]
-~r~The contact is dead!
-
-[KM4_A]
-To be truly strong, it is important that you never show weakness.
-
-[KM4_C]
-Go and collect the money immediately, so we can enter it into the casino accounts.
-
-[KM4_1]
-I can't pay you and I wouldn't pay you if I could!
-
-[KM4_9]
-Some young gang just jacked out the place! They took everything!
-
-[KM4_2]
-You guys are useless.
-
-[KM4_10]
-What kind of Yakuza are YOU anyway...?
-
-[KM4_3]
-This ain't what I pay you goons for. If I wanted this kind of protection I'd have used the god damn police service
-
-[KM4_4]
-~g~Punish the gang responsible and retrieve the ~b~protection money~g~!
-
-[KM4_7]
-~r~The shopkeeper's breathed his last!
-
-[KM4_5]
-Donald Love wishes you to drop by his tea garden so you and he can talk.
-
-[KM4_6]
-There's the money its all there!
-
-[KM4_8]
-~g~Briefcase collected!
-
-[KM5_A]
-YOU! How fitting you should choose this moment to show your worthless face!
-
-[KM5_B]
-It would appear your attempts to dissuade the Jamaicans
-
-[KM5_B1]
-from becoming bed fellows with the Cartel were wholly inadequate!
-
-[KM5_C]
-Yardie pushers line Liberty's streets selling packets of SPANK like they were selling hotdogs!
-
-[KM5_D]
-Those Cartel pigs are laughing at us, at me!
-
-[KM5_E]
-I will give you one last chance to prove my sister's faith in you to be well founded!
-
-[KM5_F]
-Run these scumbags into the ground and wash your shame in rivers of our enemies' blood!!!
-
-[KM5_3]
-~r~You failed to kill at least ~1~ yardies.
-
-[KM5_4]
-~g~Congratulations you killed ~1~ Yardies.
-
-[KM5_5]
-~g~Congratulations you killed ~1~ Yardies. BONUS $~1~
-
-[RM1]
-'SILENCE THE SNEAK'
-
-[RM3]
-'EVIDENCE DASH'
-
-[RM4]
-'GONE FISHING'
-
-[RM5]
-'PLASTER BLASTER'
-
-[RM1_D]
-He's under armed protection in WitSec property down in Newport, some apartment behind the car park.
-
-[RM1_E]
-Torch that place, that should flush 'em out, and you'll hunt 'em down, make sure he never talks to nobody.
-
-[RM1_1]
-~g~Check out the witness protection house.
-
-[RM1_2]
-~g~Take out McAffrey!
-
-[RM2_A1]
-Hey kid over here!
-
-[RM2_A]
-An old army buddy of mine runs a business in Rockford.
-
-[RM2_D]
-He's gonna need some back-up and in return he'll give you knock-down rates on any hardware you buy.
-
-[RM2_E]
-Ray phoned ahead....but I thought there'd be more of you.
-
-[RM2_F]
-Well, three arms are better than one, so grab whatever you need.
-
-[RM2_G]
-~g~Go and check on Phil!
-
-[RM2_H]
-~r~Phil has been killed!!
-
-[RM2_L]
-Heh-hey! If I'd teamed up with you in Nicaragua maybe I'd still have my arm!
-
-[RM2_N]
-Leave the cash behind. Now get out of here, I'll handle the cops.
-
-[RM3_D]
-The evidence is being driven across town.
-
-[RM3_E]
-You are going to have to ram that car and collect each little bit of evidence as it falls out.
-
-[RM3_F]
-When you've got it all, leave it in the car and torch it.
-
-[RM3_G]
-We're both gonna do pretty well outta this kid.
-
-[RM3_1]
-~g~Leave the evidence in a car then torch the car.
-
-[RM3_4]
-~g~The Prosecution has dropped the evidence!
-
-[RM3_6]
-~r~The photos will be washed up all over Liberty!
-
-[RM3_7]
-~g~Now torch the car!
-
-[RM4_A]
-I think my partner's a rat.
-
-[RM4_C]
-He goes fishing out of his boat near the lighthouse on Portland Rock most nights.
-
-[RM4_D]
-Steal a police boat and make sure his back stabbing plans are sunk!
-
-[RM4_1]
-~g~Go and steal a police boat.
-
-[RM4_2]
-~g~Get to the lighthouse and 'rub out' Ray's partner!
-
-[RM5_A]
-You useless bastard!
-
-[RM5_A1]
-You totally messed up! My ass is on the line and you can't even kill a god damned fly.
-
-[RM5_B]
-I paid you good money to kill that witness and he ain't dead!
-
-[RM5_B1]
-And today he's gonna make a Federal Deposition!
-
-[RM5_C]
-He's being moved any second now from the Carson General Hospital up in Rockford.
-
-[RM5_D]
-If he squeals, I squeal....
-
-[RM5_E]
-so go do the job you were paid for!
-
-[RM5_1]
-~g~Intercept the ambulance.
-
-[RM5_2]
-~g~You've been spotted!!
-
-[RM5_3]
-~g~It was a decoy!
-
-[RM5_4]
-~g~Bullets won't get through that armored bodycast!!
-
-[RM5_5]
-~g~That armored bodycast is flame retardant!!
-
-[RM5_7]
-~r~Witness has been delivered!!
-
-[RM5_8]
-~g~Witness has drowned!!
-
-[LOVE2]
-'WAKA-GASHIRA WIPEOUT!'
-
-[LOVE3]
-'A DROP IN THE OCEAN'
-
-[LOVE1_A]
-First of all, let me thank you for dealing with that personal matter.
-
-[LOVE1_F]
-People will read something into anything these days.
-
-[LOVE1_D]
-They're trying to extort additional funds from me but I don't believe in re-negotiation.
-
-[LOVE1_E]
-A deal is a deal, so they'll not see a penny from me.
-
-[LOVE1_G]
-Go and rescue my friend, do whatever it takes.
-
-[LOVE1_2]
-~g~Rescue the Old Oriental Gentleman.
-
-[LOVE1_3]
-~g~Take the Old Oriental Gentleman back to Donald Love's building.
-
-[LOVE1_4]
-~g~The Old Oriental Gentleman must be in one of the garages....
-
-[LOVE1_6]
-~r~The Old Oriental Gentleman's guts are all over the street!
-
-[LOVE1_7]
-~g~The gate will only open for a Colombian Gang-car.
-
-[LOVE2_A]
-Nothing drives down real estate prices like a good old fashioned gang war,
-
-[LOVE2_B]
-apart from an outbreak of plague......but that might be going too far in this case.
-
-[LOVE2_C]
-I've noticed the Yakuza and the Colombians are far from friends.
-
-[LOVE2_D]
-Let's capitalise on this business opportunity.
-
-[LOVE2_E]
-I want you to kill the Yakuza Waka-gashira, Kenji Kasen.
-
-[LOVE2_F]
-Kenji is attending a meeting at the top of the multi-story carpark in Newport.
-
-[LOVE2_G]
-Get a Cartel gangcar and eliminate him!
-
-[LOVE2_H]
-The Yakuza must blame the Cartel for this declaration of war.
-
-[LOVE2_1]
-~g~Go to Fort Staunton and steal a Colombian gangcar!
-
-[LOVE2_2]
-~g~Now get to the ~p~multi-storey in Newport~g~ and whack Kenji!
-
-[LOVE2_3]
-~r~If you proceed without a Cartel car you will be identified!!
-
-[LOVE2_4]
-~r~The Yakuza have identified you!!
-
-[LOVE2_6]
-~r~You've killed all the witnesses!!
-
-[LOVE3_A]
-In these days of moral hypocrisy certain valuable commodities can be hard to import.
-
-[LOVE3_C]
-It will drop several packages into the water.
-
-[LOVE3_D]
-Make sure you pick them up before anyone else does.
-
-[LOVE3_1]
-~g~Get a ~r~boat~g~ and follow the ~y~plane~g~!
-
-[LOVE4]
-'GRAND THEFT AERO'
-
-[LOVE5]
-'ESCORT SERVICE'
-
-[LOVE4_A]
-Thank you for retrieving those packages, but they were only a decoy.
-
-[LOVE4_B]
-Sorry about that, but that's sometimes the way in business.
-
-[LOVE4_C]
-My real objective was hidden on the plane all along.
-
-[LOVE4_F]
-I've paid off the officials.
-
-[LOVE4_1]
-~r~The Colombian Cartel is here!!
-
-[LOVE4_2]
-~g~The package is gone! Track down the Colombians and retrieve it.
-
-[LOVE4_3]
-~g~Panlantic Construction...?
-
-[LOVE4_5]
-~g~The package should be in the plane....
-
-[LOVE4_6]
-~g~Take the lift up the tower!
-
-[LOVE5_B]
-My Oriental friend will need an escort while he takes my latest acquisition to be authenticated.
-
-[LOVE5_1]
-~g~Lets go!
-
-[LOVE5_2]
-~g~You'll need a car!
-
-[LOVE5_3]
-~g~Go ahead and scout the exit of the tunnel!
-
-[LOVE5_4]
-~r~Protect the truck!
-
-[RM6]
-'MARKED MAN'
-
-[RM6_A]
-You weren't followed? Good.
-
-[RM6_B]
-This is it, I'm way over my head and I'm starting to drown here!
-
-[RM6_D]
-I'm a marked man, so I'm getting out of here.
-
-[RM6_E]
-Get me to my flight at the airport and I'll make it worth your while!
-
-[RM6_666]
-Take care of my bullet proof Patriot. See you in Miami, Ray
-
-[CAT1]
-'RANSOM'
-
-[CAT2]
-'THE EXCHANGE'
-
-[CAT1_A]
-I've got your precious Maria. If you don't want her face to look like she fell out with the butcher.
-
-[CAT2_F]
-I broke a nail, and my hair's ruined. Can you believe it? This one cost me fifty dollars!
-
-[CAT2_G]
-I was so scared, but then I thought to myself, you're a big girl now.
-
-[CAT2_H]
-Oh we're going to have such fun, cause, you know, my sister said she wanted to come to stay with her two kids,
-
-[CAT2_I]
-because her husband's playing around again and..
-
-[CAT1_E]
-XXXX
-
-[CAT1_F]
-Get to Catalina before the time runs out!
-
-[CAT_MON]
-~g~You don't have enough money yet. You need $500,000.
-
-[BITCH_D]
-~g~Maria's dead!
-
-[WEATHER]
-FORCE WEATHER
-
-[WEATHE2]
-WEATHER NORMAL
-
-[8001]
-You failed miserably!!
-
-[1000]
-YOU ARE DEAD
-
-[1001]
-YOU ARE DEAD
-
-[1002]
-YOU ARE DEAD
-
-[1003]
-YOU ARE DEAD
-
-[1004]
-YOU ARE DEAD
-
-[1005]
-BUSTED
-
-[1006]
-BUSTED
-
-[1007]
-BUSTED
-
-[1008]
-BUSTED
-
-[1009]
-BUSTED
-
-[GA_4]
-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_7]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
-
-[GA_8]
-Use the detonator to activate the bomb.
-
-[GA_9]
-You collected ~1~ out of 10 special cars
-
-[GA_10]
-Nice one. Here's your $~1~
-
-[GA_11]
-We got these wheels already. It's worthless to us!
-
-[GA_12]
-Bomb armed
-
-[GA_13]
-Delivered like a pro. Complete the list and there'll be a bonus for you.
-
-[GA_14]
-All the cars. NICE! Here's a little something.
-
-[GA_15]
-Hope you like the new color.
-
-[GA_16]
-Respray is complementary.
-
-[GA_19]
-We're not interested in that model.
-
-[GA_20]
-We got more of these than we can shift. Sorry man, no deal.
-
-[CR_1]
-Crane cannot lift this vehicle.
-
-[PU_MONY]
-You don't have enough cash.
-
-[CO_ALL]
-You got all of them. Here's a little something...
-
-[PAUSED]
-GAME PAUSED
-
-[HEALTH1]
-Get outta here! You're perfectly healthy.
-
-[HEALTH2]
-Healthcare costs.
-
-[HEALTH3]
-I'll just fix you up.
-
-[HEALTH4]
-That will be $250.
-
-[FEB_STA]
-Stats
-
-[FEB_BRI]
-Briefs
-
-[FEB_CON]
-Controls
-
-[FEB_AUD]
-Audio
-
-[FEB_DIS]
-Display
-
-[FEB_LAN]
-Language
-
-[FEP_STA]
-STATS
-
-[FEP_BRI]
-BRIEFS
-
-[FEP_CON]
-CONTROLS
-
-[FEP_AUD]
-AUDIO
-
-[FEP_DIS]
-DISPLAY
-
-[FEP_LAN]
-LANGUAGE
-
-[FEF_ST1]
-Who's the bad man?
-
-[FEF_ST2]
-How much havoc have you caused
-
-[FEF_BR1]
-Lost the plot?
-
-[FEF_CO1]
-Need more control, freak?
-
-[FEF_CO2]
-Choose the best contoller set-up for your playing style
-
-[FEF_SA1]
-Keep your place in the pile!
-
-[FEF_SA2]
-Save and load your games
-
-[FEF_AU1]
-Pump up the volume!
-
-[FEF_AU2]
-Select a radio station and sound effect
-
-[FEF_DI1]
-Change the game!
-
-[FEF_DI2]
-Customize the game for your TV
-
-[FEF_LA1]
-What you talking about willis?
-
-[FEF_LA2]
-Choose your preferred parlance
-
-[FEM_ON]
-On
-
-[FEM_OFF]
-Off
-
-[FEM_YES]
-Yes
-
-[FEM_NO]
-No
-
-[FEM_NON]
-None
-
-[FEB_PMB]
-Previous Mission Briefs:
-
-[FEC_NA]
-NA
-
-[FEC_CWL]
-Cycle Weapon left
-
-[FEC_CWR]
-Cycle Weapon right
-
-[FEC_LOF]
-Look forward
-
-[FEC_TAR]
-Target
-
-[FEC_MOV]
-Movement
-
-[FEC_CAM]
-Camera modes
-
-[FEC_PAU]
-Pause
-
-[FEC_ENV]
-Enter vehicle
-
-[FEC_JUM]
-Jump
-
-[FEC_ATT]
-Attack or Fire weapon
-
-[FEC_RUN]
-Run
-
-[FEC_FPC]
-First person camera
-
-[FEC_LL]
-Look left
-
-[FEC_LB1]
-Look
-
-[FEC_LB2]
-behind
-
-[FEC_LB]
-Look behind
-
-[FEC_LR]
-Look right
-
-[FEC_HOR]
-Horn
-
-[FEC_VES]
-Vehicle control
-
-[FEC_RSC]
-Radio station cycle
-
-[FEC_BRA]
-Brake or Reverse
-
-[FEC_HAB]
-Hand brake
-
-[FEC_CAW]
-Car weapon
-
-[FEC_ACC]
-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_MUS]
-Music Volume
-
-[FEA_SFX]
-SFX Volume
-
-[FEA_OUT]
-Output:
-
-[FEA_ST]
-Stereo
-
-[FEA_MNO]
-Mono
-
-[FEA_RSS]
-Radio station select:
-
-[FEA_NON]
-None
-
-[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]
-CHATTERBOX 109
-
-[FED_BRI]
-Brightness
-
-[FED_TRA]
-Trails:
-
-[FEL_ENG]
-English
-
-[FEL_FRE]
-French
-
-[FEL_GER]
-German
-
-[FEL_ITA]
-Italian
-
-[FEL_SPA]
-Spanish
-
-[FED_DBG]
-Menu Debug
-
-[FED_RID]
-Reload IDE
-
-[FED_RIP]
-Reload 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]
-Debug Streaming Requests
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FEM_MCM]
-Memory Card Menu
-
-[FEM_RMC]
-Register MemCard One
-
-[FEM_TFM]
-Test Format MemCard One
-
-[FEM_TUM]
-Test UnFormat MemCard One
-
-[FEM_CRD]
-Create Root Dir
-
-[FEM_CLI]
-Create And Load Icons
-
-[FEM_FFF]
-Fill First File with Guff
-
-[FEM_SOG]
-Save Only The Game
-
-[FEM_CES]
-Check Every 0kB4 Save
-
-[FEM_STG]
-Save The Game
-
-[FEM_STS]
-Save The Game under GTA3 name
-
-[FEM_CPD]
-Create copy protected mag directory
-
-[FEM_MC2]
-Memory Card Menu 2
-
-[FEM_TS]
-Test Save:
-
-[FEM_TL]
-Test Load:
-
-[FEM_TD]
-Test Delete:
-
-[FEM_SL0]
-Slot0
-
-[FEM_SL1]
-Slot1
-
-[FEM_SL2]
-Slot2
-
-[FEM_SL3]
-Slot3
-
-[FEM_SL4]
-Slot4
-
-[FEM_SL5]
-Slot5
-
-[FEM_SL6]
-Slot6
-
-[FEM_SL7]
-Slot7
-
-[PL_STAT]
-Player stats
-
-[PE_WAST]
-People you've wasted
-
-[PE_WSOT]
-People wasted by others
-
-[CAR_EXP]
-Cars exploded
-
-[TM_BUST]
-Times busted
-
-[M_WASTE]
-Civilian males wasted
-
-[F_WASTE]
-Civilian females wasted
-
-[PIG_WST]
-Cops wasted
-
-[GNG_WST]
-Gang members wasted
-
-[MED_WST]
-Medics wasted
-
-[FIRE_WS]
-Firemen wasted
-
-[DED_CRI]
-Criminals wasted
-
-[DED_DED]
-Deadbeats wasted
-
-[DED_HOK]
-Hookers wasted
-
-[HEL_DST]
-Helicopters destroyed
-
-[PER_COM]
-Percentage completed
-
-[KGS_EXP]
-Kgs of explosives used
-
-[ACCURA]
-Accuracy
-
-[ELBURRO]
-Best Turismo time in secs
-
-[CAR_CRU]
-Cars crushed
-
-[HED_EX]
-Heads exploded
-
-[TM_DED]
-Hospital visits
-
-[DAYSPS]
-Days passed in game
-
-[MMRAIN]
-Mm rain fallen
-
-[MXCARD]
-Max. INSANE Jump dist. (ft)
-
-[MXCARJ]
-Max. INSANE Jump height (ft)
-
-[MXCARDM]
-Max. INSANE Jump dist. (m)
-
-[MXCARJM]
-Max. INSANE Jump height (m)
-
-[MXFLIP]
-Max. INSANE Jump flips
-
-[MXJUMP]
-Max. INSANE Jump rotation
-
-[BSTSTU]
-Best INSANE stunt so far:
-
-[INSTUN]
-Insane stunt
-
-[PRINST]
-Perfect insane stunt
-
-[DBINST]
-Double insane stunt
-
-[DBPINS]
-Perfect double insane stunt
-
-[TRINST]
-Triple insane stunt
-
-[PRTRST]
-Perfect triple insane stunt
-
-[QUINST]
-Quadruple insane stunt
-
-[PQUINS]
-Perfect quadruple insane stunt
-
-[NOSTUC]
-No INSANE stunts completed
-
-[NOUNIF]
-Unique Jumps completed
-
-[NOUNGM]
-Total Unique Jumps
-
-[NMISON]
-Mission attempts
-
-[NMMISP]
-Missions passed
-
-[PASDRO]
-Passengers dropped off
-
-[MONTAX]
-Cash made in taxi
-
-[DAYPLC]
-Daily police spending
-
-[CRIMRA]
-Criminal rating
-
-[GMSTOR]
-Game Store
-
-[PREBRF]
-Previous Briefs
-
-[CNTLS]
-Controls
-
-[MUSMEN]
-Music/SFX
-
-[GAMSET]
-Game Settings
-
-[LANGUA]
-Language
-
-[DSPLAY]
-Display
-
-[DEBUGM]
-Debug Menu
-
-[QUITOP]
-Quit Options
-
-[CONTRL]
-Control Configuration
-
-[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]
-GoBack
-
-[SOUND]
-SOUND
-
-[MUSVOL]
-Music Volume
-
-[SFXVOL]
-SFX Volume
-
-[SCROPT]
-SCREEN OPTIONS
-
-[CTRSCR]
-Center Screen
-
-[SCRFOR]
-Screen format
-
-[GMSVLQ]
-GAME SAVE-LOAD-QUIT
-
-[GMREST]
-Restart Game
-
-[GMLOAD]
-Load Game
-
-[GMSAVE]
-Save Game
-
-[NOGMSV]
-Can save only at your hideout.
-
-[DLFILE]
-Delete Grand Theft Auto 3 Files
-
-[CHFILE]
-CHOOSE FILE TO LOAD
-
-[CHFIDL]
-CHOOSE FILE TO DELETE
-
-[SVCONF]
-SAVE CONFIRMATION
-
-[SVFNAM]
-Your saved file name is
-
-[LANGSL]
-LANGUAGE SELECTION
-
-[ENGLIS]
-English
-
-[GERMAN]
-German
-
-[ITALIA]
-Italian
-
-[FRENCH]
-French
-
-[SPAIN]
-Spanish
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[PARSHP]
-Parse Heap
-
-[DBGFON]
-CTheScripts::DbgFlag On
-
-[DBFOFF]
-CTheScripts::DbgFlag Off
-
-[BGWHON]
-Big White Debug Light Switched On
-
-[BGWOFF]
-Big White Debug Light Switched Off
-
-[DSTRON]
-Debug Streaming Requests On
-
-[DSTROFF]
-Debug Streaming Requests Off
-
-[PDRGON]
-ShowPedRoadGroups On
-
-[PRGOFF]
-ShowPedRoadGroups Off
-
-[CRRGON]
-ShowCarRoadGroups On
-
-[CRGOFF]
-ShowCarRoadGroups Off
-
-[CLZOON]
-Show Cull Zones On
-
-[CLZOOF]
-Show Cull Zones Off
-
-[SHPLON]
-gbShowCollisionPolys On
-
-[SHPLOF]
-gbShowCollisionPolys Off
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[FORMM1]
-FormatMemCard 1 (teststuff)
-
-[UNFRM1]
-UnFormatMemCard 1 (teststuff)
-
-[GORLEV]
-Gore Level
-
-[SICASS]
-Sick Fuck
-
-[SICSIC]
-Sick Fucker
-
-[SCASSL]
-Sick Fuck Selected
-
-[SCSCSL]
-Sick Fucker Selected
-
-[PRVMEN]
-Previous Mission Briefs
-
-[FORMEN]
-Format Menu
-
-[MEMTST]
-MemoryCardTest screen
-
-[REGCAR]
-Register MemoryCard One
-
-[TEFONE]
-Test Format MemCard One
-
-[TEUFON]
-Test UnFormat MemCard One
-
-[CRROOT]
-CreateRootDir
-
-[CRLDIC]
-Create and Load Icons
-
-[FLFSGF]
-Fill First File With Guff
-
-[PUSAVE]
-Save Only the game
-
-[CHEVOK]
-CheckEveryOkB4Save
-
-[SVGMON]
-SaveTheGame
-
-[CNTSAV]
-Can't save the game. On a mission.
-
-[CNCSAV]
-Can't save the game. You're in a car
-
-[CRMGSV]
-Create copy protected magazine directory
-
-[MGSVCN]
-MagazineDirectory Created
-
-[MGSVNC]
-MagazineDirectory Not Created
-
-[YES]
-Yes
-
-[NO]
-No
-
-[X]
-x
-
-[LAST]
-Last message.
-
-[FEDS_XB]
-Select
-
-[FEDS_TB]
-Back
-
-[FEDS_ST]
-START button - RESUME
-
-[FEST_OO]
-out of
-
-[FED_SUB]
-Subtitles:
-
-[FEC_TUC]
-Turret control
-
-[FEC_SM3]
-Special mission trigger (R3 button)
-
-[FEC_RS3]
-Radio station cycle (L3 button)
-
-[FEC_HO3]
-Horn (L3 button)
-
-[DIAB1]
-'TURISMO'
-
-[DIAB2]
-'I SCREAM, YOU SCREAM'
-
-[DIAB3]
-'TRIAL BY FIRE'
-
-[DIAB4]
-'BIG'N'VEINY'
-
-[DIAB1_A]
-El Burro wants to offer you an opportunity. Get to the payphone in Hepburn Heights if you want more info.
-
-[DIAB1_C]
-You drive a mean race. Drop by the payphone again and 'El Burro' may have some work for you.
-
-[DIAB1_1]
-~g~3..2..1.. GO GO GO!
-
-[DIAB1_4]
-~g~Get a fast car and get to the starting grid.
-
-[DIAB1_3]
-~r~You couldn't win a raffle, LOSER!
-
-[DIAB1_2]
-~g~Congratulations you won, with an incredible time of ~1~ seconds.
-
-[FIRST]
-~g~1st
-
-[SECOND]
-~g~2nd
-
-[THIRD]
-~g~3rd
-
-[FOURTH]
-~g~4th
-
-[DIAB2_1]
-~g~Pick up the briefcase in Harwood.
-
-[DIAB2_2]
-~g~Find an icecream van.
-
-[DIAB2_3]
-~g~Park the icecream van down at Atlantic Quays.
-
-[DIAB2_4]
-~g~Press the ~w~~k~~VEHICLE_HORN~ button ~g~to activate the Icecream jingle.
-
-[DIAB2_6]
-~g~Press the ~w~~k~~VEHICLE_HORN~ button ~g~to activate the Icecream jingle.
-
-[DIAB2_7]
-~g~Press the ~w~~k~~VEHICLE_HORN~ button ~g~to activate the Icecream jingle.
-
-[DIAB2_5]
-~g~Exit the van then use the remote to detonate the Icecream van.
-
-[YD1]
-'BLING-BLING SCRAMBLE'
-
-[YD2]
-'UZI RIDER'
-
-[YD3]
-'GANGCAR ROUND-UP'
-
-[YD4]
-'KINGDOM COME'
-
-[YD_P]
-King Courtney would like a word. Get to the payphone in Aspatria!!
-
-[YD1_A]
-~w~This is King Courtney.
-
-[YD1_A1]
-~w~My Yardie posse could do with a driver and you've got a reputation for hot moves.
-
-[YD1_B]
-~w~Get to the waste ground opposite the stadium in a car and wait for the other hopefuls.
-
-[YD1_C]
-~w~I've got men watching checkpoints all over Staunton.
-
-[YD1_D]
-~w~First driver to a checkpoint gets a Grand, then it's on to the next stop.
-
-[YD1_D1]
-~w~If you get more checkpoints than any other driver, I could have some work for you.
-
-[YD1_E]
-~g~Prepare to race!
-
-[YD1_F]
-~g~You jumped the start -I like your style!!
-
-[YD1_G]
-~r~This is a CAR RACE. You need a CAR fool!
-
-[YD1GO]
-~g~GO!!
-
-[YD1_1]
-~r~1
-
-[YD1_2]
-~r~2
-
-[YD1_3]
-~r~3
-
-[YD1_BON]
-$1000!!
-
-[Y1_1ST]
-~g~You came first with ~1~ successful checkpoints!
-
-[Y1_2ND]
-~y~2nd with ~1~ successful checkpoints. ~y~Close, but you just ain't the best!
-
-[Y1_3RD]
-~r~3rd with ~1~ successful checkpoints. ~r~I thought you said you were good!
-
-[Y1_LAST]
-~r~You were last! ~r~You wasted my time FOOL!
-
-[Y1_J1ST]
-~y~Joint 1st with ~1~ successful checkpoints. ~y~Good, but you gotta be the best to drive for Queen Lizzy!
-
-[Y1_J2ND]
-~r~Joint 2nd with ~1~ successful checkpoints. You drive like a crazed monkey!
-
-[Y1JLAST]
-~r~Joint last! You talk like a driver, but you drive like a talker!
-
-[Y1_TEST]
-CAR IN WATER!!
-
-[YD2_A]
-~w~I need to see if you're capable of doing my dirty work.
-
-[YD2_A1]
-~w~See if you can be trusted.
-
-[YD2_B]
-~w~Two of my boys will be there any second to take you for a ride,
-
-[YD2_B1]
-~w~see if you are who you say you are.
-
-[YD2_C]
-~w~We're going for a little ride into Hepburn Heights, whack us some filthy Diablos been dissing Queen Lizzy.
-
-[YD2_CC]
-~w~Here, you'll need a 'piece'.
-
-[YD2_D]
-~w~You do the driving and shooting. We'll make sure you don't get cold feet.
-
-[YD2_E]
-~w~Let's drive!!
-
-[YD2_F]
-~r~He's bailed out on us, cap his yellow ass!!!
-
-[YD2_G1]
-~w~Hepburn Heights..Let's kill me some filthy Diablos...
-
-[YD2_G2]
-~w~But remember, ~r~You don't leave this car!!
-
-[YD2_H]
-~w~OK, Get us back to Yardie turf! GO GO GO!!
-
-[YD2_L]
-~w~You did good, Reaperman!
-
-[YD2_M]
-~r~He's wrecked my car! Waste him!
-
-[YD2_N]
-~w~Get your ass back in this car!
-
-[YD3_A]
-I want you to boost some gang cars
-
-[YD3_A1]
-so we can do hits on our enemies' turf.
-
-[YD3_B]
-I need a Mafia Sentinel,
-
-[YD3_B1]
-a Yakuza Stinger and a
-
-[YD3_B2]
-Diablo Stallion so we can hit any gang in Liberty.
-
-[YD3_C]
-Drop them off at the garage in Newport and remember,
-
-[YD3_C1]
-they're no use to us wrecked!!
-
-[YD3_D]
-Spare text label
-
-[YD3_E]
-~r~You've already boosted a diablo gangcar!
-
-[YD3_F]
-~r~You've already boosted a Mafia gangcar!
-
-[YD3_G]
-~r~You've already boosted a Yakuza gangcar!
-
-[YD3_H]
-~g~Diablo gangcar boosted!
-
-[YD3_I]
-~g~Mafia gangcar boosted!
-
-[YD3_J]
-~g~Yakuza gangcar boosted!
-
-[YD3_K]
-~r~The car's nearly wrecked! Get it repaired!
-
-[YD3_L]
-~g~Take it to the ~p~garage!
-
-[YD3_M]
-~r~You've flipped it! Get another one!
-
-[YD4_A]
-Listen up!
-
-[YD4_A1]
-Get over to Bedford Point.
-
-[YD4_A2]
-There's a stash in an old car I need pronto!
-
-[YD4_B]
-LETTER: I hear you've been a busy boy. Well I've been a busy girl.
-
-[YD4_C]
-I think it's time you witnessed the real power of 'SPANK'! Besos y fuderes, Catalina, xxx.
-
-[YD4_D]
-PS: DIE PEEG DOG, DIE!!
-
-[YD4_1]
-~g~SPANKED-up madmen!!
-
-[YD4_2]
-~g~Destroy the madmens' vans!!
-
-[HM_1]
-'UZI MONEY'
-
-[HM_2]
-'TOYMINATOR'
-
-[HM_3]
-'RIGGED TO BLOW'
-
-[HM_5]
-'RUMBLE'
-
-[HOOD1_A]
-Get to the payphone in Wichita Gardens and we'll talk business.
-
-[HM1_A]
-Yo! This is D-Ice of the Red Jacks!
-
-[HM1_C]
-These young punks, they come onto the streets and they got nothing but guns and SPANK on their minds.
-
-[HM1_3]
-~g~The 'Nines' walk their turf in Wichita Gardens.
-
-[HM2_3]
-If you hit a vehicle's wheels the RC buggy will detonate!
-
-[HM2_4]
-If it goes out of range the RC buggy will detonate!
-
-[HM2_5]
-~r~Out of range!
-
-[HM3_1]
-~g~Get to the garage but watch out if the car takes too much damage it will blow!
-
-[HM3_2]
-~g~Take the car back it has to be in perfect condition - no damage!
-
-[HM3_3]
-~g~Get the car repaired!
-
-[HM4_D]
-~g~Get a vehicle!
-
-[HM4_E]
-TEXT NO LONGER REQUIRED
-
-[HM4_1]
-~g~Head to the location where the cargo is scattered, you need to collect 30 pieces of bullion.
-
-[HM4_2]
-~g~Remember when the vehicle becomes too heavy and slow goto the garage and drop off the cargo.
-
-[HM5_3]
-~r~You were told to use a baseball bat only!
-
-[HM5_4]
-~r~Your contact's dead!
-
-[MEA1]
-'THE CROOK'
-
-[MEA2]
-'THE THIEVES'
-
-[MEA3]
-'THE WIFE'
-
-[MEA4]
-'HER LOVER'
-
-[MEAT1_A]
-A friend said you could fix some problems I got. Get to the payphone in Trenton if you think you can help.
-
-[MEA1_B3]
-~g~Go and meet the Bank Manager.
-
-[MEA1_B6]
-~g~Take the car to the crusher to get rid of evidence, get out of the car and the crane will pick it up.
-
-[MEA1_1]
-~r~The Bank Manager's dead!
-
-[MEA1_2]
-~r~You were told to crush the vehicle!
-
-[MEA1_3]
-~g~Get out of the car!
-
-[MEA1_4]
-~r~You have left the Bank Manager behind!
-
-[MEA2_B3]
-~g~Go and meet the thieves.
-
-[MEA2_B4]
-~g~Take them to the Bitch'n' Dog Food Factory
-
-[MEA2_B6]
-~g~Get the car resprayed to get rid of any evidence.
-
-[MEA2_1]
-~r~You were told to crush the vehicle!
-
-[MEA2_2]
-~r~A thief's dead!
-
-[MEA2_4]
-~r~You have left a thief behind!
-
-[MEA3_B3]
-~g~Go and collect Mrs. Chonks
-
-[MEA3_B6]
-~g~Take the car and dump it into the sea, this will get rid of any evidence.
-
-[MEA3_1]
-~r~The wife's dead!
-
-[MEA3_2]
-~r~You were supposed to dump the vehicle in the water!
-
-[MEA3_3]
-~r~You have left his wife behind!
-
-[MEA4_B3]
-~g~Pick up his wife's lover
-
-[MEA4_B6]
-It's far too late for that Marty. You had your chance, but now I'm taking over the business...
-
-[MEA4_1]
-~r~Carlos is dead!
-
-[MEA4_3]
-~r~You have left Carlos the loan shark behind!
-
-[LOOK_A]
-Press and hold the ~h~~k~~VEHICLE_LOOKLEFT~ button ~w~or the ~h~~k~~VEHICLE_LOOKRIGHT~ button~w~ to look ~h~left~w~ or ~h~right~w~ while in a vehicle. Press both to look ~h~behind~w~.
-
-[LOVE6_1]
-~g~Now lead the cops away from the warehouse!
-
-[LOVE6_2]
-~r~You failed to lead the police far enough away!
-
-[RM4_3]
-~r~Ray's partner has escaped!
-
-[RM6_C]
-The CIA seem to have a vested interest in SPANK
-
-[RM6_C1]
-and they don't like us screwing with the Cartel.
-
-[C_PASS]
-THREAT ELIMINATED!
-
-[CTUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Vigilante missions on or off.
-
-[CTUTOR2]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Vigilante missions on or off.
-
-[COPCART]
-~g~You have ~1~ seconds to return to a police vehicle before the mission ends.
-
-[C_FAIL]
-Vigilante mission ended!
-
-[C_CANC]
-~r~Vigilante mission cancelled!
-
-[C_ESCP]
-~r~The suspect has escaped!
-
-[C_TIME]
-~r~Your time as a law enforcer is over!
-
-[C_VIGIL]
-VIGILANTE BONUS!!
-
-[A_FAIL2]
-~r~Your lack of urgency has been fatal to the patient!
-
-[A_FAIL3]
-~r~The patient is dead!!
-
-[A_PASS]
-Rescued!
-
-[F_FAIL2]
-~r~You're too late!
-
-[A_COMP2]
-You will never get tired!
-
-[RM2_M]
-If you need any firepower just drop by and take what you need from the lockers.
-
-[HEAL_A]
-Your ~h~health~w~ is displayed in orange in the top right of the screen.
-
-[YD1_CNT]
-~1~ of 15!
-
-[FM1_9]
-~g~Thats the party up ahead, drop Maria off out front.
-
-[FM1_Y]
-~w~You know I enjoyed myself for the first time in a long while, and you treated me really good. With respect and everything.
-
-[FM1_AA]
-~w~Oh, I'd better go. I'll see you around I hope.
-
-[NOCONTE]
-Please re-insert an analog controller (DUALSHOCK#) or analog controller (DUALSHOCK#2) in controller port 1 to continue.
-
-[WRCONT]
-The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto 3 requires an analog controller (DUALSHOCK#) or analog controller (DUALSHOCK#2).
-
-[WRCONTE]
-The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto 3 requires an analog controller (DUALSHOCK#) or analog controller (DUALSHOCK#2).
-
-[WRONGCD]
-Incorrect disc. Please insert correct disc.
-
-[NOCD]
-The disc tray is empty. Please insert disc.
-
-[OPENCD]
-The disc tray is open. Please close the disc tray.
-
-[CDERROR]
-Error reading the Grand Theft Auto 3 DVD
-
-[RESTART]
-Starting new game
-
-[GA_3]
-No more freebies. $1000 to respray!
-
-[GA_1]
-Whoa! I don't touch nothing THAT hot!
-
-[GA_1A]
-Come back when you're not so busy...
-
-[S_PROM2]
-The garage next door can store one vehicle when you save your game.
-
-[STOCK]
-out of stock
-
-[FM1_O]
-~w~He's at the rail station at the Chinatown waterfront I think.
-
-[EBAL_B]
-This is the place right here, let's get off the street and find a change of clothes!
-
-[EBAL_G]
-This is Luigi's club. Let's go round the back and use the service door.
-
-[AM4_3]
-You must be Asuka's new errand boy!
-
-[AM4_4]
-You got the money? Is it all here?
-
-[AM4_5]
-I know what you're thinking, another bent cop.
-
-[AM4_6]
-Well, it's a bent world.
-
-[AM4_7]
-Just 'cause I lost a few partners, those suckers from internal affairs have started sniffing around.
-
-[AM4_8]
-Reckon they can smell me.
-
-[AM4_9]
-Well, this city is just one big open sewer.
-
-[AM4_10]
-But I'm gonna need some non-union help.
-
-[AM4_11]
-And if you're interested you'll know where to find me.
-
-[CAM_A]
-Press the ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~ button~w~ to change ~h~camera ~w~modes when on foot or in a vehicle.
-
-[CAM_B]
-Press the ~h~directional button up~w~ and ~h~down~w~ to change ~h~camera ~w~modes when on foot or in a vehicle.
-
-[KM2_1]
-~g~Repair the car, it's gotta be mint.
-
-[LM3_6]
-Joey...
-
-[LM3_6A]
-Am I goin' to play with your big end again?
-
-[LM3_9A]
-there might be some work for you.
-
-[LM3_9B]
-Alright?
-
-[AWAY2]
-~r~They got away.
-
-[AWAY]
-~r~He's clean out of here!
-
-[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_7B]
-Arm with ~h~~k~~PED_FIREWEAPON~ button~w~. Bomb will go off when engine is started.
-
-[BAT1]
-~g~Pick up the bat!
-
-[EBAL_O]
-If you don't mess this up, maybe there be more work for you. Now get outta here!
-
-[HELP9_B]
-Press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire~w~ the sniper rifle.
-
-[HELP9_C]
-Press the~h~ ~k~~PED_FIREWEAPON~ button ~w~to ~h~fire~w~ the sniper rifle.
-
-[JM6_8]
-~r~You've lost all the robbers!
-
-[COLT_IN]
-The Pistol is now in stock at Ammunation!
-
-[TAXI2]
-~r~You're out of time!
-
-[TAXI3]
-~r~Your passenger fled in terror!
-
-[TAXI7]
-~r~Your car is trashed, get it repaired.
-
-[TAXI4]
-Fare complete!
-
-[TAXI5]
-SPEED BONUS!!
-
-[TAXI6]
-Taxi mission over
-
-[FRANGO]
-~g~Salvatore wants you to help Toni deal with the Triads first!
-
-[PAGEB12]
-Police Bribe delivered to hideout
-
-[PAGEB13]
-Health delivered to hideout
-
-[PAGEB14]
-Adrenaline delivered to hideout
-
-[KM1_4]
-~g~You need a cop car to do the job!
-
-[CAT1_B]
-bring $500,000 to the Villa at Cedar Grove.
-
-[JM2_C]
-He's got a noodle stand down in China Town.
-
-[RM6_1]
-Here's a key to a lock-up.
-
-[RM6_2]
-You'll find some cash and some 'supplies' I'd stashed in case things got tight.
-
-[RM6_3]
-See y'around.
-
-[FE_INIP]
-Initialising and loading Pause Menu... Please wait.
-
-[FESZ_CA]
-Cancel
-
-[FESZ_QU]
-Quit
-
-[FESZ_L1]
-Game saved successfully!
-
-[FESZ_L2]
-Your saved filename is:
-
-[FESZ_OK]
-OK
-
-[FES_LGA]
-Load Game
-
-[FES_DGA]
-Delete Game
-
-[FES_NGA]
-New Game
-
-[FES_CAN]
-Cancel
-
-[FESZ_QL]
-All unsaved progress in your current game will be lost. Proceed with loading?
-
-[FESZ_QD]
-Proceed with deleting this saved game?
-
-[FESZ_QO]
-Proceed with overwriting this saved game?
-
-[FESZ_QR]
-Are you sure you want to start a new game? All progress since the last save game will be lost. Proceed?
-
-[FESZ_QS]
-PROCEED WITH SAVE ?
-
-[T4X4_1]
-'PATRIOT PLAYGROUND'
-
-[T4X4_2]
-'A RIDE IN THE PARK'
-
-[T4X4_3]
-'GRIPPED!'
-
-[MM_1]
-'MULTISTOREY MAYHEM'
-
-[T4X4_1A]
-~g~You have ~y~5 minutes~g~ to collect ~y~15~g~ checkpoints. ~g~You may collect them in ~y~ANY ORDER.
-
-[T4X4_1B]
-~1~ of 15!
-
-[T4X4_1C]
-~y~PASS THROUGH~g~ the first checkpoint to start the timer. ~g~Each checkpoint will credit you with ~y~20 SECONDS~g~.
-
-[T4X4_2A]
-~g~You have ~y~2 minutes~g~ to collect ~y~12~g~ checkpoints!! ~g~You may collect them in ~y~ANY ORDER.
-
-[T4X4_2B]
-~1~ of 12!
-
-[T4X4_2C]
-~y~PASS THROUGH~g~ the first checkpoint to start the timer. ~g~Each checkpoint will credit you with ~y~10 SECONDS~g~.
-
-[T4X4_3A]
-~g~You have ~y~5 minutes~g~ to collect ~y~20~g~ checkpoints. ~g~You may collect them in ~y~ANY ORDER.
-
-[T4X4_3B]
-~y~PASS THROUGH~g~ the first checkpoint to start the timer. ~g~Each checkpoint will credit you with ~y~15 SECONDS~g~.
-
-[T4X4_3C]
-~1~ of 20!
-
-[T4X4_F]
-~r~You bailed! Too tough for you?!
-
-[MM_1_A]
-~g~You have ~y~2 minutes~g~ to collect ~y~20 checkpoints~g~ in the multistorey! ~g~You may collect them in ~y~ANY ORDER.
-
-[MM_1_B]
-~1~ of 20!
-
-[MM_1_C]
-~g~That's 20 seconds, plus ~y~5 SECONDS~g~ for each checkpoint. ~g~The timer will start ~y~IMMEDIATELY.
-
-[FM2_14]
-~r~You got too close and spooked Curly!
-
-[FM2_15]
-~g~Don't get too close or Curly will suspect something!
-
-[UPSIDE]
-~r~You flipped your wheels!
-
-[FM2_16]
-SPOOKOMETER:
-
-[LM3_11]
-~g~Misty won't ride in a bus get another vehicle!
-
-[LANDSTK]
-Landstalker
-
-[IDAHO]
-Idaho
-
-[STINGER]
-Stinger
-
-[LINERUN]
-Linerunner
-
-[PEREN]
-Perennial
-
-[SENTINL]
-Sentinel
-
-[PATRIOT]
-Patriot
-
-[FIRETRK]
-Firetruck
-
-[TRASHM]
-Trashmaster
-
-[STRETCH]
-Stretch
-
-[MANANA]
-Manana
-
-[INFERNS]
-Infernus
-
-[BLISTA]
-Blista
-
-[PONY]
-Pony
-
-[MULE]
-Mule
-
-[CHEETAH]
-Cheetah
-
-[AMBULAN]
-Ambulance
-
-[FBICAR]
-Fbi Car
-
-[MOONBM]
-Moonbeam
-
-[ESPERAN]
-Esperanto
-
-[TAXI]
-Taxi
-
-[KURUMA]
-Kuruma
-
-[BOBCAT]
-Bobcat
-
-[WHOOPEE]
-Mr Whoopee
-
-[BFINJC]
-BF Injection
-
-[POLICAR]
-Police
-
-[ENFORCR]
-Enforcer
-
-[SECURI]
-Securicar
-
-[BANSHEE]
-Banshee
-
-[PREDATR]
-Predator
-
-[BUS]
-Bus
-
-[RHINO]
-Rhino
-
-[BARRCKS]
-Barracks OL
-
-[TRAIN]
-Train
-
-[HELI]
-Helicopter
-
-[DODO]
-Dodo
-
-[COACH]
-Coach
-
-[CABBIE]
-Cabbie
-
-[STALION]
-Stallion
-
-[RUMPO]
-Rumpo
-
-[RCBANDT]
-RC Bandit
-
-[BELLYUP]
-Triad Fish Van
-
-[MRWONGS]
-Mr Wongs
-
-[MAFIACR]
-Mafia Sentinel
-
-[YARDICR]
-Yardie Lobo
-
-[YAKUZCR]
-Yakuza Stinger
-
-[DIABLCR]
-Diablo Stallion
-
-[COLOMCR]
-Cartel Cruiser
-
-[HOODSCR]
-Hoods Rumpo XL
-
-[AEROPL]
-Aeroplane
-
-[SPEEDER]
-Speeder
-
-[REEFER]
-Reefer
-
-[PANLANT]
-Panlantic
-
-[FLATBED]
-Flatbed
-
-[YANKEE]
-Yankee
-
-[BORGNIN]
-Borgnine
-
-[TOYZ]
-TOYZ
-
-[FEST_DF]
-Dist. travelled on foot (miles)
-
-[FEST_DC]
-Dist. travelled by car (miles)
-
-[FESTDFM]
-Distance travelled on foot (m)
-
-[FESTDCM]
-Distance travelled by car (m)
-
-[FEST_R1]
-Patriot Playground in secs
-
-[FEST_R2]
-A Ride In The Park in secs
-
-[FEST_R3]
-Gripped! in secs
-
-[FEST_RM]
-Multistorey Mayhem in secs
-
-[FEST_LS]
-People saved in an Ambulance
-
-[FEST_CC]
-Criminals killed on Vigilante Mission
-
-[FEST_FE]
-Total fires extinguished
-
-[FEST_LF]
-Longest flight in Dodo
-
-[FEST_BD]
-Best time for bomb defusal
-
-[FEST_RP]
-Rampages passed
-
-[FEST_MP]
-Missions passed
-
-[FEST_BB]
-Bling-bling Scramble:
-
-[FEST_H0]
-Most checkpoints
-
-[FEST_GC]
-Gang Cars Totalled:
-
-[FEST_H1]
-Diablo destruction
-
-[FEST_H2]
-Mafia Massacre
-
-[FEST_H3]
-Casino Calamity
-
-[FEST_H4]
-Rumpo Wrecker
-
-[USJI1]
-TEXT NO LONGER REQUIRED
-
-[USJI2]
-TEXT NO LONGER REQUIRED
-
-[USJI3]
-TEXT NO LONGER REQUIRED
-
-[USJ]
-UNIQUE STUNT BONUS!
-
-[SPRAY]
-Drive your vehicle into the spray shop to lose your ~h~wanted level~w~, ~h~repair ~w~and ~h~respray ~w~your vehicle. Cost - ~h~$1000.
-
-[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_8D]
-Press the~h~ ~k~~PED_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!
-
-[RATNG1]
-Pickpocket
-
-[RATNG2]
-Bully
-
-[RATNG3]
-Thug
-
-[RATNG4]
-Hustler
-
-[RATNG5]
-Goon
-
-[RATNG6]
-Wheelman
-
-[RATNG7]
-Hired muscle
-
-[RATNG8]
-Fixer
-
-[RATNG9]
-Associate
-
-[RATNG10]
-Cleaner
-
-[RATNG11]
-Assassin
-
-[RATNG12]
-Right-hand man
-
-[RATNG13]
-Executioner
-
-[RATNG14]
-Capo
-
-[RATNG15]
-Boss
-
-[1010]
-~r~Your vehicle is upside down
-
-[1011]
-~r~Your vehicle is upside down
-
-[1012]
-~r~Your vehicle is upside down
-
-[1013]
-~r~Your vehicle is upside down
-
-[1014]
-~r~Your vehicle is upside down
-
-[JM4_10]
-OK, Kid. Drive me to the laundry in Chinatown first, I got a bit of business to take care of.
-
-[JM4_11]
-Those washer women aint been payin' their protection money.
-
-[JM4_12]
-And watch the car, Joey just fixed this junk heap.
-
-[JM4_13]
-So no fancy crap, OK?
-
-[KM4_11]
-~g~Take the money back to the casino!
-
-[FEF_BR2]
-Find it again by reading any mission briefs collected to date.
-
-[TRAIN_1]
-Kurowski Station
-
-[TRAIN_2]
-Rothwell Station
-
-[TRAIN_3]
-Baillie Station
-
-[SUBWAY1]
-Portland Station
-
-[SUBWAY2]
-Rockford Station
-
-[SUBWAY3]
-Staunton South Station
-
-[SUBWAY4]
-Shoreside Terminal
-
-[MEA4_2]
-~r~Marty Chonks is dead!
-
-[SPRAY1]
-Drive your vehicle into the spray shop to lose your ~h~wanted level~w~, ~h~repair ~w~and ~h~respray ~w~your vehicle. Cost - ~h~$1000~w~. This time it's free.
-
-[JM4_A]
-Yeah, I know Toni, I've tuned her real sweet. She purrs, you know what I mean?
-
-[JM4_5]
-Drop by later and we'll give them something to launder, their own blood stained clothes!
-
-[AMMU_A]
-Luigi said you'd need a piece...
-
-[AMMU_B]
-Joey told me to tool you up...
-
-[AMMU_C]
-So go around back of the shop. I left you a nine in the yard.
-
-[AMMU_D]
-I got all your home defence needs.
-
-[AMMU_E]
-You want a license too?
-
-[AMMU_F]
-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_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.
-
-[RECORD]
-~g~NEW RECORD!!
-
-[NRECORD]
-~r~NO NEW RECORD!
-
-[RCHELP]
-Press ~k~~PED_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.
-
-[RC_1]
-You have 2 minutes to blow up as many Diablo Gang Cars as possible!
-
-[RC_2]
-You have 2 minutes to blow up as many Mafia Gang Cars as possible!
-
-[RC_3]
-You have 2 minutes to blow up as many Yakuza Gang Cars as possible!
-
-[RC_4]
-You have 2 minutes to blow up as many Yardie Gang Cars as possible!
-
-[RC_5]
-You have 2 minutes to blow up as many Hood Gang Cars as possible!
-
-[RC_6]
-You have 2 minutes to blow up as many Cartel Gang Cars as possible!
-
-[RAMPAGE]
-RAMPAGE!!
-
-[RAMP_P]
-RAMPAGE COMPLETE!
-
-[RAMP_F]
-RAMPAGE FAILED
-
-[PAGE_00]
-.
-
-[PAGE_01]
-Murder ~1~ Diablos in 120 seconds!
-
-[PAGE_02]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_03]
-Kill ~1~ Mafia in 120 seconds!
-
-[PAGE_04]
-Kill ~1~ Triads in 120 seconds!
-
-[PAGE_05]
-Kill ~1~ Triads in 120 seconds!
-
-[PAGE_06]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_07]
-Pop ~1~ Yardie heads in 120 seconds!
-
-[PAGE_08]
-Burn ~1~ Yakuza in 120 seconds!
-
-[PAGE_09]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_10]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_11]
-Annihialate ~1~ Yardies in 120 seconds!
-
-[PAGE_12]
-Torch ~1~ Yakuza in 120 seconds!
-
-[PAGE_13]
-Explode ~1~ Yardies in 120 seconds!
-
-[PAGE_14]
-Fry ~1~ Colombians in 120 seconds!
-
-[PAGE_15]
-Splatter ~1~ Hoods in 120 seconds!
-
-[PAGE_16]
-Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_17]
-Splatter ~1~ Colombians with a car in 120 seconds!
-
-[PAGE_18]
-Driveby and Destroy ~1~ vehicles in 120 seconds!
-
-[PAGE_19]
-Remove ~1~ Colombian heads in 120 seconds!
-
-[PAGE_20]
-Behead ~1~ Hoods in 120 seconds!
-
-[JM1_A]
-Hey, I'm bored when you gonna drill me?
-
-[JM1_B]
-In a moment sweet heart, I got a little business to take care of.
-
-[JM1_C]
-I got a little job for you pal.
-
-[JM1_D]
-The Forelli brothers have owed me money for too long
-
-[JM1_E]
-and they need to be taught some respect.
-
-[JM1_F]
-Lips Forelli is stuffing his fat face in St Marks Bistro,
-
-[JM1_G]
-so steal his car and take it to 8-Ball's bomb shop up in Harwood.
-
-[JM1_H]
-You know 8-Ball right?
-
-[JM1_I]
-Once he's fitted it with a bomb, go park the car where you found it.
-
-[JM1_J]
-Then sit back and watch the whole show.
-
-[JM1_K]
-But hurry up, he won't be eating forever.
-
-[CAT2_A1]
-Come on you dumb bitch!
-
-[CAT2_A]
-The real question is, did you turn up to rescue Maria or to get me back?
-
-[CAT2_B]
-Well I got news for you,
-
-[CAT2_B2]
-shooting you will be a pleasure but dating you was only business.
-
-[CAT2_C]
-You are muy peccinno amigo!
-
-[CAT2_D]
-Throw over the cash.
-
-[CAT2_E]
-You have been a busy boy!
-
-[CAT2_E2]
-But you haven't learned, I'm not to be trusted.
-
-[CAT2_E3]
-Kill the idiot.
-
-[CAT2_J]
-Get this thing airborne!!
-
-[HM5_1]
-Yo, Ice said was comin'. There rules. Bats only. No guns, no cars.
-
-[HM5_5]
-This is a battle for respect, you cool?
-
-[HELP14]
-To collect weapons walk through them. These cannot be collected while in a vehicle.
-
-[CRUSH]
-Park in the marked area and exit your vehicle. The vehicle will then be crushed.
-
-[DIAB2_B]
-A gang of no-goods has threatened to remove my starring member if I don't pay them a cut.
-
-[DIAB2_C]
-They threaten the wrong man, amigo.
-
-[DIAB2_D]
-They have a weakness for the icecream.
-
-[DIAB2_E]
-Pick up the bomb I've hidden in Harwood,
-
-[DIAB2_F]
-hijack the regular icecream van on its rounds.
-
-[DIAB2_G]
-and lure these fools to their doom with the jeengle-jeengle.
-
-[DIAB2_H]
-They hide in a warehouse on Atlantic Quay.
-
-[DIAB3_A]
-Some insolent Triads stole my beautiful car last night,
-
-[DIAB3_B]
-wrecked it and left it burning.
-
-[DIAB3_C]
-Some of my most precious donkey memorabilia was in the trunk -
-
-[DIAB3_D]
-real collectibles that are irreplaceable my friend.
-
-[DIAB3_E]
-I've hidden a throbbing weapon on the edge of Chinatown.
-
-[DIAB3_F]
-Take it and teach these Triad vandals to fear El Burro's well-endowed wrath.
-
-[DIAB3_G]
-Ariba!
-
-[DIAB3_1]
-KILL 25 TRIADS
-
-[DIAB4_A]
-A thieving opportunist has stolen a van of my latest publication hot off the press!
-
-[DIAB4_B]
-But that SPANKED-up idiot has left the rear doors open
-
-[DIAB4_C]
-and now my beautifully produced,
-
-[DIAB4_D]
-tastefully photographed adult literature is being dropped all over Liberty!
-
-[DIAB4_E]
-Take the van and follow that trail of Donkey Does Dallas volumes 1, 2 and 3
-
-[DIAB4_F]
-collecting it as you go.
-
-[DIAB4_G]
-When you've followed the trail to that thieving SPANK-head, waste him!
-
-[DIAB4_H]
-Then deliver my donkey derby to XXX Mags in the Red Light District.
-
-[DIAB4_1]
-~g~Take the van to the back of XXX Magazines.
-
-[HM1_E]
-I want you to show these punk ass bitches how a real drive-by works.
-
-[HM1_H]
-Take these nines off of here!!
-
-[HM2_A]
-Those Nines are pressing me.
-
-[HM2_B]
-These Bitches got armored cars and now they're running SPANK...
-
-[HM2_C]
-and slinging it to brothers with no fear.
-
-[HM2_D]
-There's a car parked up the way.
-
-[HM2_E]
-There's some stuff in there to put these sissys on blass...
-
-[HM3_A]
-Some effa has wired my wheels to blow.
-
-[HM3_B]
-If I lose those wheels, my rep on the street will be dead.
-
-[HM3_C]
-Pick up my car and take it over to the garage on St. Marks, a'right yo.
-
-[HM3_D]
-Let them diffuse that, let them take care of that bomb.
-
-[HM3_E]
-The clocks ticking and the wiring is messed up.
-
-[HM3_F]
-One pot hole too many and that thing could blow.
-
-[HM3_G]
-Now move it!
-
-[HM4_A]
-Yo, a Federal Reserve flight just smashed down at Francis International.
-
-[HM4_B]
-There's platinum all over the strip.
-
-[HM4_C]
-Get a car and snatch up as much as you can.
-
-[HM4_F]
-You can drop the bling off at one of my garages.
-
-[HM4_G]
-This platinum is mad heavy and it will slow your wheels down some.
-
-[HM4_H]
-So make regular drop off's at the garage.
-
-[HM5_A]
-Them Nines are down to a few scabby herds...
-
-[HM5_B]
-but they still wanna bring it.
-
-[HM5_C]
-They agreed to go toe to toe.
-
-[HM5_D]
-A gang of them against two of us, or rather...
-
-[HM5_E]
-two of yaw
-
-[HM5_F]
-I'd join you but...
-
-[HM5_G]
-I ain't due my parole hearing for another three months now,
-
-[HM5_H]
-y'know what I mean?
-
-[HM5_I]
-Go and meet my baby brother,
-
-[HM5_J]
-He'll show you where they are fighting a'right son.
-
-[MEA1_B]
-The name's Chonks, Marty Chonks.
-
-[MEA1_C]
-I run the Bitchin' Dog Food factory around the corner.
-
-[MEA1_D]
-I got money troubles, but hey, who doesn't right?
-
-[MEA1_E]
-I'm meeting my bank manager later.
-
-[MEA1_F]
-He's a crooked bastard that keeps bumping up the loan repayments so he can cut a slice.
-
-[MEA1_G]
-Take my car, pick him up and bring him back here.
-
-[MEA1_H]
-I've got a little surprise for that blood sucking leech!!
-
-[MEA2_A]
-I hired some thieves to break into my apartment...
-
-[MEA2_C]
-The thieving bastards are threatening to tell the insurance company,
-
-[MEA2_D]
-if I don't give them a cut.
-
-[MEA2_E]
-Can you believe it?
-
-[MEA2_F]
-I've left a car inside the factory gates.
-
-[MEA2_G]
-Use it to go and pick them up from their turf in the Red Light district.
-
-[MEA2_H]
-Then bring 'em back to the factory so I can make 'em see Marty's point of view.
-
-[MEA3_A]
-The business is going to go under unless I get hold of some serious cash soon.
-
-[MEA3_B]
-My wife has an insurance policy and all she's ever been to me is a hole in my pocket.
-
-[MEA3_C]
-I've left a car in the usual place.
-
-[MEA3_D]
-Go and pick up my wife from Classic Nails and bring her back to the factory.
-
-[MEA4_A]
-Damn, I'm in trouble!
-
-[MEA4_B]
-Turns out my wife was seeing some guy I owe money to.
-
-[MEA4_C]
-He's got real angry and he's looking for payback!
-
-[MEA4_E]
-he thinks I'm gonna pay him off...
-
-[MEA4_F]
-but my guess is...
-
-[MEA4_G]
-Liberty's dogs are gonna get yet another flavor this month!
-
-[WELCOME]
-WELCOME TO
-
-[HM1_2]
-~g~Get a vehicle, remember only Uzi drive by kills count!
-
-[HELP8_B]
-Press the~h~ ~k~~PED_SNIPER_ZOOM_IN~ button ~w~to ~h~zoom in ~w~with the rifle and the~h~ ~k~~PED_SNIPER_ZOOM_OUT~ button ~w~to ~h~zoom out ~w~again.
-
-[LRQC_1]
-Asuka and I are gonna have to talk, uh,
-
-[LRQC_2]
-Why don't you go cruise around?
-
-[LRQC_3]
-You'll need a place to lie low.
-
-[LRQC_4]
-There's a warehouse at the edge of Belleville that should suit your needs.
-
-[LRQC_5]
-Come back here to my Condo when you are ready,
-
-[LRQC_6]
-and we can have a little chat.
-
-[JM6_5]
-~g~You need a getaway vehicle, Idiot!
-
-[JM2_F]
-If you need a piece go around back of AmmuNation opposite the subway.
-
-[LOVE4_7]
-~g~There's a construction yard in Staunton Island, maybe they took the package there.
-
-[LOVE4_8]
-~g~You'll need a car to open the garage.
-
-[TSCORE]
-EARNINGS: $~1~
-
-[AM1_9]
-~r~Salvatore has escaped back into Luigi's Club!
-
-[AM1_6]
-~g~If you hang around Luigi's club, the Mafia will spot you!
-
-[TM2_3]
-~g~It's a trap! Waste them all!!
-
-[FM4_1]
-This is Maria. The car's a trap! Meet me at the slip south of Callahan Bridge.
-
-[JM1_7]
-~g~Close the car door! He'll notice!
-
-[KM5_1]
-~g~DEALER MINCED!!.
-
-[KM5_6]
-~g~You must murder at least 8 Yardie dealers.
-
-[KM5_7]
-~g~Kill them quickly! Once they've pushed their SPANK they're off the streets.
-
-[RM3_8]
-~r~That car is a decoy!!
-
-[LM3_8]
-Hey, I'm Joey.
-
-[LM3_9]
-Luigi said you were reliable so come back later,
-
-[KM3_5]
-~g~Press the horn to get the deal going.
-
-[LOVE7]
-LOVE'S DISAPPEARANCE
-
-[LOVE2_5]
-~g~Kenji is fender meat! Get out of Newport and dump the car!
-
-[AS2_11]
-~g~~1~ OF 9!
-
-[GARAGE1]
-~g~Get out of the vehicle and walk outside.
-
-[KM3_11]
-~g~The Cartel have been attacked and the briefcase has not been recovered.
-
-[KM3_12]
-~g~Kill all of the Colombians, destory the vehicles and recover the briefcase.
-
-[KM3_13]
-~g~Take the briefcase back to the casino.
-
-[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_2]
-Press the ~h~~k~~PED_FIREWEAPON~ button~w~ to fire the boat cannons.
-
-[DIAB1_B]
-This is El Burro of the Diablos.
-
-[DIAB1_D]
-You're new in Liberty, but already you are gaining a reputation on the streets.
-
-[DIAB1_E]
-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_1A]
-Use the RC buggies to destroy the armored cars. Press the ~h~~k~~PED_FIREWEAPON~ button ~w~to detonate.
-
-[HM2_2]
-~r~You failed to destroy all the armored cars!
-
-[HM2_6]
-~g~Armored Car destroyed!
-
-[RM3_A]
-I know a real important man in town, a soft touch,
-
-[RM3_H]
-with shall we say, exotic tastes and the money to indulge them.
-
-[RM3_B]
-He's involved in a legal matter and the prosecution has some rather embarrassing photos of him
-
-[RM3_C]
-at a morgue party or something.
-
-[LOVE6_A]
-A lesson in business, my friend.
-
-[LOVE6_E]
-If you have a unique commodity, the world and his wife will try to wrestle it from your grasp...
-
-[LOVE6_C]
-SWAT teams have cordoned off the area around my associate and the package.
-
-[LOVE6_D]
-Get over there, pick up the van and act as a decoy.
-
-[LOVE6_F]
-Keep them busy and he should make good his escape.
-
-[AM3_C]
-He's probably out in the bay as you read this! Steal a police boat, and sink his career!
-
-[FESZ_UC]
-CANCEL
-
-[FEDS_SM]
-L1,R1-CHANGE MENU
-
-[FEDS_AS]
-;=-CHANGE SELECTION
-
-[FEDSAS2]
-<>-CHANGE SELECTION
-
-[FEDS_SS]
-L1,R1-CHANGE SELECTION
-
-[FEDSSC1]
-;-FASTER SCROLLING
-
-[FEDSSC2]
-=-STOP SCROLLING
-
-[MEA2_3]
-~g~Bring the car back to the factory.
-
-[RM1_3]
-~r~McAffrey escaped!
-
-[RM1_4]
-~g~You have used all the grenades! Get some more from ammunation!
-
-[RM1_5]
-~g~Go back and torch the safehouse!
-
-[RM6_4]
-~g~Go over to the lockup and collect Ray's stash.
-
-[RM6_5]
-~g~The CIA have the bridge under surveillance, find another route across.
-
-[HM2_F]
-and wreck all their armored stuff.
-
-[HM_4]
-'BULLION RUN'
-
-[MEA2_B5]
-TEXT NO LONGER NEEDED
-
-[MEA1_B5]
-TEXT NO LONGER NEEDED
-
-[MEA3_B5]
-TEXT NO LONGER NEEDED
-
-[MEA4_B7]
-but if you just step into my office...
-
-[MEA3_B4]
-Marty wants to see me? Well it better be quick because I have to get my hair done.
-
-[KM3_7]
-It's a Yakuza trap man!
-
-[FES_LOF]
-Load Failed.
-
-[FES_SLO]
-SAVE FILE
-
-[FES_ISC]
-IS CORRUPTED
-
-[FESZ_TI]
-SAVE Z1
-
-[FESZ_SA]
-Save game
-
-[MC_LDFL]
-Load Failed!
-
-[MC_NWRE]
-Now Restarting Game.
-
-[LOVE6_3]
-~g~You have ~1~ seconds to return to the Securicar before you fail the mission.
-
-[LOVE6_4]
-~r~You ditched the Decoy Securicar!
-
-[HELP1]
-Stop in the center of the blue marker.
-
-[HELP12]
-Walk into the center of the blue marker to trigger a mission.
-
-[HJSTAT]
-Distance: ~1~.~1~m Height: ~1~.~1~m Flips: ~1~ Rotation: ~1~_
-
-[HJSTATW]
-Distance: ~1~.~1~m Height: ~1~.~1~m Flips: ~1~ Rotation: ~1~_ And what a great landing!
-
-[DIAB1_5]
-RACE TIME:
-
-[LOVE3_4]
-~r~You destroyed the plane!!
-
-[F_FAIL1]
-Fire Truck mission ended.
-
-[F_CANC]
-~r~Fire Fighter mission cancelled!
-
-[F_EXTIN]
-FIRES:
-
-[A_COMP1]
-Paramedic missions complete!
-
-[A_CANC]
-~r~Paramedic mission cancelled!
-
-[A_COMP3]
-Paramedic missions complete! You will never get tired when running!
-
-[ATUTOR]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Paramedic missions on or off.
-
-[ATUTOR3]
-Press the ~h~~k~~TOGGLE_SUBMISSIONS~ button~w~ to toggle Paramedic missions on or off.
-
-[ALEVEL]
-Paramedic Mission Level ~1~
-
-[A_FAIL1]
-Paramedic mission ended.
-
-[FEST_HA]
-Highest Paramedic Mission level
-
-[A_SAVES]
-PEOPLE SAVED: ~1~
-
-[C_KILLS]
-CRIMINALS KILLED: ~1~
-
-[HM1_B]
-I got a problem they tryin' to play me.
-
-[AM2_A]
-Salvatore's death comes as pleasurable news,
-
-[AM2_A2]
-you are an efficient killer. I like that in a man.
-
-[AM2_B]
-This is my brother Kenji.
-
-[AM2_C]
-Asuka has a little job for you, but when you're done, drop by my casino and we can talk.
-
-[AM2_D]
-Just like Kenji, always trying to play with my toys.
-
-[AM2_E]
-My police source indicates that the Mafia are watching our interests around the city
-
-[AM2_E2]
-in a bid to track you down.
-
-[AM2_F]
-We cannot continue our operations until they are dealt with.
-
-[AM2_G]
-Take out these spying fools and end this vendetta once and for all.
-
-[F_START]
-~g~Burning vehicle reported in the ~a~ area. Go and extinguish the fire.
-
-[AM4_1A]
-Get to the Phone in West Belleville Park.
-
-[AM4_1B]
-Get to the Phone on Liberty Campus.
-
-[AM4_1C]
-Get to the Phone in South Belleville Park.
-
-[AM4_1D]
-Meet me in the toilet block in the park.
-
-[HJSTATF]
-Distance: ~1~ft Height: ~1~ft Flips: ~1~ Rotation: ~1~_
-
-[HJSTAWF]
-Distance: ~1~ft Height: ~1~ft Flips: ~1~ Rotation: ~1~_ And what a great landing!
-
-[HM1_F]
-Watch your back though, there'll be Jacks on the street who'll think you're trying to blast them too!
-
-[HM1_D]
-'Nines' is their tag and purple is their flag and each day they rock their colors...
-
-[HM1_G]
-is another day the 'Jacks' look soft.
-
-[MEA2_B]
-and steal some stuff so I could claim on the insurance as you do.
-
-[TM3_H]
-~w~You did good back there kid, real good.
-
-[TM3_I]
-~w~Come on, let's introduce you to the Don.
-
-[TM3_J]
-~w~Heeyyy! Luigi!
-
-[TM3_K]
-~w~Oh my girls have been missing you so long Salvatore, you been away too long.
-
-[TM3_L]
-~w~You tell them that once this unfortunate business is taken care of,
-
-[TM3_M]
-~w~we'll all go down to the club and celebrate, ok?
-
-[TM3_N]
-~w~Here's my boy.
-
-[TM3_N2]
-~w~How you doin' pop?
-
-[TM3_O]
-~w~You got yourself a good woman yet?
-
-[TM3_P]
-~w~Hey, your mother, god bless her soul, would be turning over in her grave
-
-[TM3_Q]
-~w~to see you without a wife.
-
-[TM3_R]
-~w~I know Pop, I'm working on it.
-
-[TM3_S]
-~w~TONI! How's your Momma?
-
-[TM3_T]
-~w~She's a great woman you know. Strong. Firenze.
-
-[TM3_U]
-~w~She's good...fine.
-
-[TM3_V]
-~w~Terrific, Terrific. Now listen you guys, you go inside while I talk to our new friend here.
-
-[TM3_W]
-~w~I see nothing but good things for you my boy...
-
-[RM1_A]
-That scumbag McAffrey, he took more bribes than anyone.
-
-[RM1_B]
-He thinks he's gonna get an honorable discharge if he turns states evidence.
-
-[RM1_C]
-He just squealed!
-
-[RM4_B]
-We gotta shut him up, permanently.
-
-[RM4_E]
-I want him sleeping with the fishes, not eating them.
-
-[LOVE3_B]
-On its approach to the airport tonight, a light aircraft will pass over the bay.
-
-[LOVE4_D]
-Unfortunately the port authorities seized the plane and were stripping it down
-
-[LOVE4_H]
-until I intervened at great personal expense.
-
-[LOVE4_E]
-Cross the bridge to Shoreside Vale and go to Francis International Airport.
-
-[GTAB_A]
-Hey, let's get this out of here. God knows what it is
-
-[GTAB_B]
-but he seems to want it badly enough so it must be worth something.
-
-[GTAB_C]
-Who the Heck!
-
-[GTAB_D]
-YOU!
-
-[GTAB_E]
-Hey take it easy amigo! De nada! De nada!
-
-[GTAB_F]
-I left you pouring your heart out into the gutter!
-
-[GTAB_G]
-Don't shoot amigo. No problem. We all friends. Here, take this.
-
-[GTAB_H]
-Don't be such a pussy!
-
-[GTAB_I]
-We got no choice baby!
-
-[GTAB_J]
-We always got a choice you dumb bastard!
-
-[GTAB_K]
-I'm sorry about that crazy bitch man, they all the same...por favor??
-
-[GTAB_L]
-So the whore got away.
-
-[GTAB_M]
-But you've done me a favor,
-
-[GTAB_N]
-you're not the only one that has a score to settle with the Cartel,
-
-[GTAB_O]
-this worm killed my brother!
-
-[GTAB_P]
-I never killed no Yakuza!
-
-[GTAB_Q]
-LIAR! We all saw the Cartel assassin.
-
-[GTAB_R]
-We are going to hunt down and kill all you Colombian dogs!
-
-[GTAB_S]
-I'll be operating on our friend here to extract information and a little pleasure.
-
-[GTAB_T]
-You, drop by later, I'm sure I'll require your services.
-
-[GTAB_U]
-Please amigo, don't leave me with her, she psycho chica! Amigo? Hey AMEEEGO!!!...Aiiieeeeaaargghh!
-
-[LOVE5_A]
-You are proving to be a safe investment, a rare thing in these days of false hood.
-
-[KM3_1]
-~g~The Cartel are expecting a Yardie Posse go and steal a Yardie car! Head north you'll find one in Newport.
-
-[LOVE1_1]
-~g~Go 'jack a Colombian gang car, so you can infiltrate the hideout, head north you'll find one in Fort Staunton.
-
-[FM1_Q1]
-~w~You looking for some fun? A little...hmm? Some SPANK?
-
-[FM1_R]
-~w~Hi Chico. Nah, just the usual.
-
-[FM1_T]
-~w~Thanks Chico. See you around.
-
-[FM1_W]
-~w~Alright Fido, you wait here and look after the car while I go and shake my butt alright.
-
-[FM1_X]
-~w~OK Fido, let's get out of here. Wooooh!
-
-[FM1_Q]
-~w~Hey Maria! It's my favorite lady!
-
-[FM1_S1]
-~w~Hey, maybe you should check out the warehouse party at the east end of Atlantic Quays.
-
-[FM1_U]
-~w~Gracias and enjoy. That's good stuff.
-
-[FM1_V]
-~w~C'mon Fido, let's go and check out this party!
-
-[FM1_SS]
-~r~SCANNER: ~g~Four-five to all units: Assist narcotics raid Atlantic Quays...
-
-[LOVE6_B]
-even if they have little understanding as to its true value.
-
-[TM3_A1]
-~r~Joey's Fried!
-
-[TM3_A2]
-~r~Joey and Luigi have been cremated!
-
-[TM3_A3]
-~r~Joey, Luigi and Toni are Toast!
-
-[FM4_2]
-Listen, Salvatore thinks that we're going behind his back,
-
-[FM4_3]
-so he was offering you to the Cartel in order to make a deal.
-
-[FM4_4]
-I couldn't let him do that, I mean the worst thing is,
-
-[FM4_4B]
-it's all my fault... because I told him, we were an item.
-
-[FM4_5]
-Don't ask me why. I don't know.
-
-[FM4_6]
-Look you're a marked man on Mafia turf and I've got to get out of here too.
-
-[FM4_6B]
-I've seen too much killing. Too much blood!
-
-[FM4_7]
-This is a friend of mine ok, she's an old friend.. it's Asuka, she's someone we can trust.
-
-[FM4_8]
-C'mon, Enough of the speeches.
-
-[FM4_9]
-We better get out of here before we get more hysterical Italians wanting less friendly reunions.
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUCER
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-ART DIRECTOR
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-TECHNICAL DIRECTION
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-DESIGN
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-WRITTEN BY
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-CHARACTERS
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMATION & DIRECTION
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-AUTO DESIGN
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-ARTISTS
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODERS
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-SCORE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-SOUND DESIGN & MASTERING
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-AUDIO PROGRAMMING
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-TEST MANAGER
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-LEAD TESTERS
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRD050A]
-TESTERS
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-TECHNICAL SUPPORT
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-EXECUTIVE PRODUCER
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUCER
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRECTOR OF DEVELOPMENT
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-TECHNICAL PRODUCER
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-ASSOCIATE PRODUCER
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-MUSIC SUPERVISOR
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VP OF MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-TECHNICAL COORDINATOR
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-QA MANAGER
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-GAME ANALYST
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-TEST TEAM
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-LIBERTY TREE EDITORIAL
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-CUT-SCENES
-
-[CRED108]
-SCRIPT BY DAN HOUSER AND JAMES WORRALL
-
-[CRED109]
-AUDIO DIRECTED BY DAN HOUSER
-
-[CRED110]
-AUDIO PRODUCED BY RENAUD SEBBANE
-
-[CRED111]
-CAST
-
-[CRED112]
-FRANK VINCENT AS SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO AS LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN AS TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT AS JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR AS MARIA
-
-[CRED117]
-KYLE MACLACHLAN AS DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA AS RAY MACHOWSKI
-
-[CRED119]
-GURU AS 8-BALL
-
-[CRED120]
-SONDRA JAMES AS MOMMA
-
-[CRED121]
-LIANA PAI AS ASUKA
-
-[CRED122]
-LES MAU AS KENJI
-
-[CRED123]
-CYNTHIA FARRELL AS CATALINA
-
-[CRED124]
-AL ESPINOSA AS MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS AS EL BURRO
-
-[CRED126]
-HUNTER PLATIN AS CHICO
-
-[CRED127]
-WALTER MUDU AS D-ICE
-
-[CRED128]
-CURTIS MCCLARIN AS CURTLY
-
-[CRED129]
-BILL FIORE AS DARKEL
-
-[CRED130]
-CHRIS PHILLIPS AS MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN AS CURLY BOB
-
-[CRED132]
-WALTER MUDU AS KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN AS ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY AS MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATED BY
-
-[CRD136A]
-ALEX HORTON
-
-[CRED137]
-DIRECTED BY
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRED138]
-PRODUCED BY
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRED139]
-RECORDED AT MODERN UPRISING STUDIOS, BROOKLYN
-
-[CRED140]
-ACTORS
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS.
-
-[CRED141]
-PEDESTRIAN DIALOGUE
-
-[CRED142]
-WRITTEN BY DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRECTED BY CRAIG CONNER, DAN HOUSER AND LAZLOW
-
-[CRED144]
-PRODUCED BY RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-RADIO STATIONS AND MUSIC
-
-[CRED218]
-PRODUCERS FOR DMA DESIGN
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED219]
-SOUNDTRACK CO-ORDINATOR
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUCER FOR ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-EDITED BY
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER AND IMAGING WRITTEN BY
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-SPECIAL THANKS TO
-
-[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
-
-[CRED254]
-STUDIO MANAGER
-
-[CRED255]
-ANDREW SEMPLE
-
-[CRED256]
-ARTIST
-
-[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
-
-[CINCAM]
-Cinematic Camera
-
-[KM1_13]
-Drive the vehicle into the garage!
-
-[KM3_14]
-~r~You have been spotted the deal is off!
-
-[EBAL_H]
-Wait here man while I go in and talk to Luigi.
-
-[EBAL_M]
-Remember no one messes with my girls!
-
-[LM2_F]
-Then take his car, respray it.
-
-[LM2_D]
-here, here take it.
-
-[LM1_9]
-Hi I'm Misty.
-
-[LM4_A]
-Some Diablo scumbag has been pimping his skuzzy bitches in my backyard.
-
-[FM2_B]
-We got us a rat!
-
-[FM2_C]
-He ain't pimpin' or pushin' so he must be talking.
-
-[FM3_CC]
-~w~Come back brother when you have the money.
-
-[FEDS_AM]
-<>-CHANGE MENU
-
-[LOVE5_5]
-~r~You failed to protect the truck!
-
-[RM6_6]
-~r~Ray is dead!
-
-[RM6_7]
-~r~Ray has missed his flight.
-
-[RM6_8]
-~g~You have left Ray behind, go back and get him.
-
-[FM1_10]
-~g~You have left Maria behind, go back and pick her up.
-
-[LOVE4_9]
-~r~The plane has been destroyed!
-
-[LOV4_10]
-~r~The only lead to where the package has gone has been destroyed!
-
-[KM2_D]
-Needless to say, we must give him the cars as a gift, to repay the debt that I owe him.
-
-[KM4_B]
-The business's fortunate enough to have our protection settle their accounts today.
-
-[KM2_E]
-You must obtain the cars on this list and deliver them to a garage behind the car park in Newport.
-
-[FM3_8I]
-~w~Get a good vantage point then I'll head in when you fire the first shot.
-
-[LOVE1_B]
-Experience has taught me that a man like you can be very loyal for the right price,
-
-[LOVE1_H]
-but groups of men get greedy.
-
-[LOVE1_C]
-A valued resource, an old oriental gentleman I know,
-
-[LOVE1_I]
-has been kept hostage by some South Americans in Aspatria.
-
-[MEA4_D]
-I've agreed to see him...
-
-[MEA4_B4]
-Marty sent you huh? OK, I'm gonna show that creep the meaning of the word business.
-
-[MEA4_B5]
-Carl, hi! i eerr, I need more time to get your money.
-
-[MEA1_B4]
-Ah, Mr Chonks sent you did he. Let's go and pay the fellow a visit.
-
-[HM5_6]
-Let's go crack some skulls...
-
-[LOVE1_5]
-~g~Stop hanging around, get a Colombian Gang car and rescue Love's associate.
-
-[AS1_D]
-~w~Act as the bait, and get the death squads to follow you to Pike Creek
-
-[AS1_E]
-~w~where some of my men will be waiting for them.
-
-[AS2_C]
-~w~The Cartel have a front company, The Kappa Coffee House.
-
-[AS2_E]
-~w~We have no choice but to put these drug stands out of operation.
-
-[AS2_F]
-~w~Smash them to splinters!!
-
-[AS2_A1]
-~w~Miguel certainly has some of that famous Latin stamina.
-
-[AS2_A2]
-~w~I'm quite exhausted.
-
-[SIREN_3]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[SIREN_4]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[AS3_C]
-~w~Eeeeeeyoooo! What IS that gooey yellow stuff?
-
-[AS3_C1]
-~w~Oh hi Babe.
-
-[AS3_F]
-~w~She's got the makings of a natural this girl.
-
-[AS3_F1]
-~w~She's managed to extract this little gem from our guest.
-
-[AS3_G]
-~w~There is a plane coming into Francis International in 2 hours time.
-
-[AS3_G1]
-~w~It is full of Catalina's poison.
-
-[AS3_H]
-~w~You can avoid airport security by getting a boat out to the runway-light buoys
-
-[AS3_H1]
-and shooting the plane down on its approach.
-
-[AS3_I]
-~w~Collect the cargo from the debris and stash it!
-
-[AS3_J]
-~w~Oh you be careful now, OK baby?
-
-[AS3_K]
-~w~Now try the chilli oil.....
-
-[RM2_F1]
-Those Colombians'll be here any minute!
-
-[RM2_K]
-Goddam they're here!! LOCK'N'LOAD!!
-
-[LOVE2_7]
-~g~ Now dump the car!
-
-[LOVE2_8]
-~g~Now get out of Newport!
-
-[AM1_F]
-Salvatore Leone will be leaving Luigi's in about three hours time. (~1~:~1~)
-
-[LOVE5_C]
-I want you to follow him, and make sure both he and my package get to Pike Creek unharmed.
-
-[FESZ_SR]
-Save Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FESZ_FO]
-Would you like to format the memory card (PS2) in MEMORY CARD slot 1?
-
-[FELZ_FO]
-Memory card (PS2) in MEMORY CARD slot 1 is unformatted.
-
-[FES_NOC]
-No memory card (PS2) in MEMORY CARD slot 1.
-
-[FES_LOE]
-Load Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FES_DEE]
-Deleting Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[SLONFM]
-Error formatting memory card (PS2) in MEMORY CARD slot 1.
-
-[SLONDR]
-Insufficient space to save. Please insert a memory card (PS2) with at least 500KB of free space available into MEMORY CARD slot 1.
-
-[SLNSP]
-Insufficient space to save. Please insert a memory card (PS2) with at least 200KB of free space available into MEMORY CARD slot 1.
-
-[FEFD_WR]
-Formatting memory card (PS2) in MEMORY CARD slot 1. Please do not remove the memory card (PS2), reset or switch off the console.
-
-[FES_ISF]
-NOT PRESENT
-
-[FES_SAG]
-PRESENT
-
-[SLONNO]
-No memory card (PS2) in MEMORY CARD slot 1.
-
-[SLONNF]
-Memory card (PS2) in MEMORY CARD slot 1 is unformatted.
-
-[FESZ_FM]
-Memory card (PS2) in MEMORY CARD slot 1 is unformatted. Would you like to format memory card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_FF]
-Format Failed! Check memory card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[MCDNSP]
-There is insufficient space on the memory card (PS2) in MEMORY CARD slot 1. At least 500KB is needed to save this application data. Do you wish to start? (YES or NO)
-
-[MCGNSP]
-There is insufficient space on the memory card (PS2) in MEMORY CARD slot 1. At least 200KB is needed to save this application data. Do you wish to start? (YES or NO)
-
-[FESZ_WR]
-Saving data. Please do not remove the memory card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FESZ_OW]
-Overwriting data. Please do not remove the memory card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FELD_WR]
-Loading data. Please do not remove the memory card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FEDL_WR]
-Deleting data. Please do not remove the memory card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[LM2_C]
-Luigi said to, to give you this so...
-
-[LM3_G]
-Joey ain't the kind you keep waiting, remember, this is your foot in the door...
-
-[LM5_E]
-Get as many of them as you can before the cops drink away their green.
-
-[JM5_C]
-Alright, there's a car stuffed with a stiff at the cafe near Callahan Point.
-
-[RM2_B]
-We saw action in Nicaragua, back when the country knew what it was doing.
-
-[RM2_C]
-Some Cartel scum roughed him up yesterday, said they'd be back for some of his stock today.
-
-[RM2_D1]
-I'd go myself but the old sciatica's playing up again -cough cough- so, eerr-hhrrmmm, good luck.
-
-[CATINF1]
-~g~Get Catalina!
-
-[CATINF2]
-~g~Follow the chopper to find Catalina.
-
-[BOATIN1]
-Jump into a boat and press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~to get in.
-
-[BOATIN2]
-You can press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~if you are near a boat to get in it.
-
-[BOATIN3]
-Jump into a boat and press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~to get in.
-
-[BOATIN4]
-You can press the ~h~~k~~VEHICLE_ENTER_EXIT~ button ~w~if you are near a boat to get in it.
-
-[JM6]
-'THE GETAWAY'
-
-[FM1]
-'CHAPERONE'
-
-[JM1]
-'MIKE LIPS LAST LUNCH'
-
-[FM21]
-'BOMB DA BASE: ACT I'
-
-[FM3]
-'BOMB DA BASE: ACT II'
-
-[AM1]
-'SAYONARA SALVATORE'
-
-[AM2]
-'UNDER SURVEILLANCE'
-
-[KM2]
-'GRAND THEFT AUTO'
-
-[AS3]
-'S.A.M.'
-
-[RM2]
-'ARMS SHORTAGE'
-
-[LOVE6]
-'DECOY'
-
-[LOVE1]
-'LIBERATOR'
-
-[RC1]
-'DIABLO DESTRUCTION'
-
-[RC2]
-'MAFIA MASSACRE'
-
-[RC3]
-'CASINO CALAMITY'
-
-[RC4]
-'RUMPO RAMPAGE'
-
-[RM2_E1]
-I can't believe those yellow-bellied bastards left me without proper cover again!
-
-[GREN_1]
-The longer you hold the ~h~~k~~PED_FIREWEAPON~ button~w~, the further you will throw the grenade.
-
-[GREN_2]
-The longer you hold the ~h~~k~~PED_FIREWEAPON~ button~w~, the further you will throw the grenade.
-
-[GREN_3]
-The longer you hold the ~h~~k~~PED_FIREWEAPON~ button~w~, the further you will throw the grenade.
-
-[LOVE4_G]
-My property will be waiting for you at the customs hanger in the aircraft's fuselage.
-
-[KABOOM]
-KABOOOM!
-
-[SPLAT]
-SPLAT!
-
-[PANCAK]
-PANCAKED!
-
-[SOAKED]
-SOAKED!
-
-[HEAD]
-Head Radio
-
-[DBL_CLF]
-Double Clef FM
-
-[FLASHB]
-Flashback FM
-
-[RISE]
-Rise FM
-
-[LIPS]
-Lips 106
-
-[CHAT]
-Chatterbox FM
-
-[K_JAH]
-K-Jah Radio
-
-[GAM_FM]
-Game Radio FM
-
-[MSX_FM]
-MSX FM
-
-[TUBE1]
-When the subway opens you will be able to catch a train to Staunton Island.
-
-[TUBE2]
-When Shoreside Vale opens you will be able to Exit Shoreside Terminal to Francis International Airport.
-
-[TUBE_2]
-To board a subway train, press the ~h~'enter vehicle' button~w~.
-
-[LEGAL]
-~g~Eliminate the criminal threat!
-
-[GA_2]
-New engine and paint job. The cops won't recognize you!
-
-[LM1_8A]
-To earn some extra cash, why not 'borrow' a taxi...
-
-[TAXIH1]
-Stop near a highlighted pedestrian to pick them up then drive them to their destination before the time runs out.
-
-[LM5_7]
-~g~Less than four girls working the ~p~Fuzz Ball~g~ and Luigi won't be happy!
-
-[KM2_3]
-~g~Remember the ~r~cars~g~ have to be in mint condition to be accepted by the ~p~garage~g~.
-
-[KM5_2]
-~g~A Yardie is off the streets.
-
-[BETRA_A]
-Sorry, babe.
-
-[BETRA_B]
-I'm an ambitious girl and you,
-
-[BETRA_C]
-you're just small time.
-
-[JAILB_Q]
-Come on!
-
-[JAILB_R]
-Senor dickhead!
-
-[JAILB_S]
-It's no problem to kill you.
-
-[JAILB_T]
-You gonna be sorry.
-
-[JAILB_U]
-A'right, a'right. Get lost.
-
-[HELP15]
-When on foot press the ~h~~k~~PED_LOOKBEHIND~ button~w~ to ~h~look behind~w~.
-
-[FEC_LB3]
-Look behind
-
-[FEC_R3]
-(R3 button)
-
-[FES_AFO]
-This memory card (PS2) is already formatted.
-
-[FEA_UP]
-;
-
-[FEA_DO]
-=
-
-[FEA_LE]
-<
-
-[FEA_RI]
->
-
-[FEDSAS3]
-- CHANGE SELECTION
-
-[FEDSAS4]
-;=<> - CHANGE SELECTION
-
-[SPRAY_4]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
-
-[SPRAY_1]
-Use the ~h~~k~~PED_FIREWEAPON~ button ~w~to fire the water cannon.
-
-[LITTLE]
-LITTLE T
-
-[NICK]
-NICK LOVE
-
-[AM1_10]
-~g~Salvatore will be leaving Luigi's at about 0~1~:~1~
-
-[FEDS_SE]
-/ button - SELECT
-
-[FEDS_SB]
-/ button - SELECT " button - BACK
-
-[TM4_A]
-~w~Oh it's you. TONI ain't here.
-
-[TM4_A2]
-~w~But he left one of his sugary love letters for you.
-
-[DIAB2_A]
-I started my exotic entertainment business with nothing but the sizeable contents of my leather pants!
-
-[LM5_9]
-GIRLS:
-
-[PERPIC]
-Hidden Packages found
-
-[CO_ONE]
-Hidden Package ~1~ of ~1~
-
-[LOVE3_3]
-~g~The plane has dropped ~1~ of 6 packages.
-
-[FARE11]
-~g~Destination ~w~'Construction site' ~g~in Fort staunton.
-
-[GA_21]
-You cannot store any more cars in this garage.
-
-[CHEAT1]
-Cheat activated
-
-[CHEAT2]
-Weapon cheat
-
-[CHEAT3]
-Health cheat
-
-[CHEAT4]
-Armor cheat
-
-[CHEAT5]
-Wanted level cheat
-
-[CHEAT6]
-Money cheat
-
-[CHEAT7]
-Weather cheat
-
-[AS1_H]
-~r~You failed to lead the Deathsquad into the Yakuza trap!!
-
-[FEDS_BA]
-" button - BACK
-
-[FED_WIS]
-Wide Screen:
-
-[RAMP_A]
-ALL RAMPAGES COMPLETED!
-
-[USJ_ALL]
-ALL UNIQUE STUNTS COMPLETED!
-
-[FARE23]
-~g~Destination ~w~'import export garage' ~g~in Cochrane Dam district
-
-[L_TRN_1]
-You can ride the L-train around Portland. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[L_TRN_2]
-You can ride the L-train around Portland. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[S_TRN_1]
-You can take the subway trains across Liberty. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[S_TRN_2]
-You can take the subway trains across Liberty. Press the~h~ ~k~~VEHICLE_ENTER_EXIT~ button~w~ to ~h~enter ~w~or ~h~exit~w~ a train.
-
-[AS1_C]
-~w~She has three death squads dotted around Liberty, whose sole job is to hunt you down.
-
-[AS1_G]
-~r~All the Yakuza are dead!!
-
-[JAN]
-Jan
-
-[FEB]
-Feb
-
-[MAR]
-Mar
-
-[APR]
-Apr
-
-[MAY]
-May
-
-[JUN]
-Jun
-
-[JUL]
-Jul
-
-[AUG]
-Aug
-
-[SEP]
-Sept
-
-[OCT]
-Oct
-
-[NOV]
-Nov
-
-[DEC]
-Dec
-
-[DEFDT]
---:---:---- --:--:--
-
-[BUGGY]
-BUGGIES LEFT:
-
-[BONUS]
-~g~BONUS $~1~
-
-[HORN1]
-Press the ~h~L3 button ~w~to activate the ~h~horn.
-
-[HORN2]
-Press the ~h~L1 button ~w~to activate the ~h~horn
-
-[HORN3]
-Press the ~h~R1 button ~w~to activate the ~h~horn
-
-[LM3_1A]
-Press the~h~ ~k~~VEHICLE_HORN~ button~w~ to activate the ~h~horn~w~ and let Misty know you are here.
-
-[LM3_1B]
-Press the~h~ ~k~~VEHICLE_HORN~ button~w~ to activate the ~h~horn~w~ and let Misty know you are here.
-
-[LM3_1C]
-Press the~h~ ~k~~VEHICLE_HORN~ button~w~ to activate the ~h~horn~w~ and let Misty know you are here.
-
-[RADIO_A]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[RADIO_B]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[RADIO_C]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[RADIO_D]
-Press the ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ button~w~ to cycle through the ~h~radio stations.
-
-[FEC_EXV]
-Enter and exit vehicle
-
-[TAXI_M]
-'TAXI DRIVER'
-
-[COP_M]
-'VIGILANTE'
-
-[FIRE_M]
-'FIREFIGHTER'
-
-[AMBUL_M]
-'PARAMEDIC'
-
-[HJ_IS]
-INSANE STUNT BONUS: $~1~
-
-[HJ_PIS]
-PERFECT INSANE STUNT BONUS: $~1~
-
-[HJ_DIS]
-DOUBLE INSANE STUNT BONUS: $~1~
-
-[HJ_PDIS]
-PERFECT DOUBLE INSANE STUNT BONUS: $~1~
-
-[HJ_TIS]
-TRIPLE INSANE STUNT BONUS: $~1~
-
-[HJ_PTIS]
-PERFECT TRIPLE INSANE STUNT BONUS: $~1~
-
-[HJ_QIS]
-QUADRUPLE INSANE STUNT BONUS: $~1~
-
-[HJ_PQIS]
-PERFECT QUADRUPLE INSANE STUNT BONUS: $~1~
-
-[AM1_K]
-Salvatore Leone will be leaving Luigi's in about three hours time. (0~1~:~1~)
-
-[IMPEXPP]
-Import/Export garage, Portland Harbor. We have orders for various vehicles. Check our notice board for our requirements.
-
-[VANHSTP]
-Any more Securicars you want cracked? Bring them to our garage in the Portland Harbor.
-
-[EMVHPUP]
-Great rates paid for new and used Emergency Vehicles. Bring them to the crane in the north east of Portland Harbor.
-
-[STANDS]
-STALLS WRECKED:
-
-[STASH]
-~g~Stash the SPANK back at the ~p~construction site!
-
-[MCSTNS]
-There is no memory card (PS2) in MEMORY CARD slot 1. Do you wish to start? (YES or NO)
-
-[LOVE3_5]
-~g~The plane is now in range.
-
-[LOVE3_6]
-~r~The Police got to the packages first!
-
-[SIREN_1]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[SIREN_2]
-To turn on this vehicle's sirens tap the ~h~~k~~VEHICLE_HORN~ button~w~.
-
-[FM3_8C]
-~w~I'll need $100,000 to cover expenses,
-
-[MCLOAD]
-Loading Data. Please do not remove the memory card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FES_GME]
-Error Reading memory card (PS2) in MEMORY CARD slot 1 please check and try again.
-
-[FESZ_QF]
-Are you sure you wish to format the memory card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_LS]
-Load Successful.
-
-[RM3_5]
-~g~You have ~1~ of 6 evidence packages.
-
-[LOVE3_2]
-~g~You have all the packages! Take them back to Donald Love.
-
-[LOVE4_4]
-~g~Take the package back to Donald Love!
-
-[FEB_SAV]
-Load
-
-[FEP_SAV]
-LOAD GAME
-
-[AS2_12A]
-~g~After you trash the first stall, you will have 8 minutes before the Cartel warn their pushers!
-
-[AS3_1A]
-~g~Now get to the ~b~marker buoy!
-
-[NOCONT]
-Please reconnect analog controller (DUALSHOCK#) or analog controller (DUALSHOCK#2) to controller port 1 to continue
-
-[BET_JB]
-BETRAYED BY HIS LOVER CATALINA AND LEFT FOR DEAD. CONVICTED AND SENTENCED, HE BEGINS HIS JOURNEY TO LIBERTY CITY PENITENTIARY. BUT ONLY ONE THOUGHT BURNS IN HIS CRIMINAL MIND......REVENGE!
-
-[END_A]
-Residents in Cedar Grove have been coming to terms
-
-[END_B]
-with the emotional aftermath of a full blown war
-
-[END_C]
-that hit the area yesterday.
-
-[END_D]
-Local resident, Clive Denver described to police
-
-[END_E]
-a single gunman that he saw fleeing the scene, with a dark haired woman.
-
-[END_F]
-Oh, you know, we're gonna have such fun, 'cos you know, you know,
-
-[END_G]
-I love you, I, I, I, I really do, 'cos you're such a big strong man
-
-[END_H]
-and that's just what I need.
-
-[END_I]
-Anyway, what was I saying?
-
-[END_J]
-Oh, you know, I forget. But you know what it's like, don't you?
-
-[END_K]
-The sound of explosions shook nearby homes as people ran for cover.
-
-[END_L]
-Several citizens were injured in the panic as ground fire was exchanged
-
-[END_M]
-between ground forces and a helicopter circling the dam.
-
-[END_N]
-Yeah, we got a good view from down here in the gardens.
-
-[END_O]
-When the 'copter finally got taken out,
-
-[END_P]
-better than the fireworks on the 4th of July.
-
-[END_Q]
-With the death toll already over twenty,
-
-[END_R]
-police are still finding bodies.
-
-[END_S]
-There have been no official denials concerning rumours
-
-[END_T]
-that the dead were members of the Colombian Cartel,
-
-[END_U]
-and still no leads as to the cause of the massacre.
-
-[END_V]
-I broke a nail and my hair is ruined, I mean can you believe it?
-
-[END_W]
-This one cost me fifty dollars...
-
-[PAPER1]
-*
-
-[PAPER2]
-*
-
-[PAPER3]
-*
-
-[JAILB_V]
-*
-
-[JAILB_A]
-*
-
-[JAILB_B]
-*
-
-[JAILB_C]
-*
-
-[JAILB_E]
-*
-
-[JAILB_F]
-*
-
-[JAILB_G]
-*
-
-[JAILB_I]
-*
-
-[JAILB_W]
-*
-
-[JAILB_K]
-*
-
-[JAILB_L]
-*
-
-[JAILB_X]
-*
-
-[JAILB_M]
-*
-
-[JAILB_N]
-*
-
-[JAILB_O]
-*
-
-[JAILB_P]
-*
-
-[JAILB_D]
-*
-
-[JAILB_H]
-*
-
-[JAILB_J]
-*
-
-[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/french.txt b/utils/gxt/french.txt
deleted file mode 100644
index a6bbc0fd..00000000
--- a/utils/gxt/french.txt
+++ /dev/null
@@ -1,8211 +0,0 @@
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
-
-[DEFNAM]
-Claude----------------------
-
-[IN_VEH]
-~g~Hé! Retourne dans ta caisse!
-
-[IN_VEH2]
-~g~T'as besoin d'une caisse pour cette mission!
-
-[IN_BOAT]
-~g~T'as besoin d'un bateau pour cette mission!
-
-[HEY]
-~g~Te la joue pas perso, pense à tes potes!
-
-[HEY2]
-~g~Restez groupés!
-
-[HEY3]
-~g~T'as perdu ton meilleur homme, retournes-y et ramène-le!
-
-[HEY4]
-~g~Perds Misty, et Luigi te fera sauter la tête ! Alors, retourne la chercher!
-
-[HEY5]
-~g~L'une des filles manque à l'appel! Retourne la chercher!
-
-[HEY6]
-~g~Ton honneur est lié à celui du Yakuza Kanbu. Tu dois le protéger!
-
-[HEY7]
-~g~Un flingue de plus ferait pas de mal! Retourne en arrière et embarque ton contact!
-
-[HEY8]
-~g~Dans protection, y'a protection, compris ? Alors protège le vieux bridé!
-
-[HEY9]
-~g~Tu veux savoir ce qui se passe dans la rue ? Ben va voir ton contact!
-
-[HELP2_A]
-Appuie sur la ~h~touche /~w~ quand tu cours pour piquer un ~h~sprint.
-
-[HELP3]
-Tu ne peux sprinter que pendant une courte durée, avant d'être claqué!
-
-[HELP4_A]
-Appuie sur la ~h~touche ~k~~VEHICLE_ACCELERATE~~w~ pour ~h~accélérer.
-
-[HELP4_D]
-Pousse le ~h~stick analogique de droit~w~ vers le haut pour accélérer.
-
-[HELP5_A]
-Appuie sur la~h~ touche ~k~~VEHICLE_BRAKE~~w~ pour ~h~freiner~w~ ou pour ~h~passer la marche arrière~w~ si ta caisse est à l'arrêt.
-
-[HELP5_D]
-Pousse le ~h~stick analogique de droit~w~ vers le bas pour ~h~freiner~w~ ou pour ~h~passer la marche arrière~w~ si ta caisse est à l'arrêt.
-
-[HELP6_A]
-Appuie sur la ~h~touche ~k~~VEHICLE_HANDBRAKE~~w~ pour utiliser le ~h~frein à main du véhicule.
-
-[HELP6_C]
-Appuie sur la ~h~touche ~k~~VEHICLE_HANDBRAKE~~w~ pour utiliser le ~h~frein à main du véhicule.
-
-[HELP6_D]
-Appuie sur la ~h~touche ~k~~VEHICLE_HANDBRAKE~~w~ pour utiliser le ~h~frein à main du caisse.
-
-[HELP7_A]
-Maintiens la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée pour ~h~viser~w~ avec le fusil à lunette.
-
-[HELP7_D]
-Maintiens la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée pour ~h~viser~w~ avec le fusil à lunette.
-
-[HELP8_A]
-Appuie sur la ~h~touche ~k~~PED_SNIPER_ZOOM_IN~~w~ pour faire un ~h~zoom avant~w~ avec le fusil et sur la ~h~touche ~k~~PED_SNIPER_ZOOM_OUT~~w~ pour faire un ~h~zoom arrière~w~.
-
-[HELP9_A]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~tirer~w~ au fusil à lunette.
-
-[HELP10]
-Ce badge t'indique que la police te recherche.
-
-[HELP11]
-Plus il y a de badges, plus il y a de flics à tes trousses.
-
-[HELP13]
-Tu as parfois intérêt à utiliser des chemins qui n'apparaissent pas sur le radar.
-
-[TIMER]
-C'est une mission en temps limité, alors il faut la finir avant que le compte à rebours arrive à zéro!
-
-[MISTY1]
-~r~Misty bouffe les pissenlits par la racine!
-
-[OUT_VEH]
-~g~Sors du véhicule!
-
-[GARAGE]
-Conduis ta caisse dans le garage et repars à pied.
-
-[WANTED1]
-~g~Largue les flics pour en avoir moins à tes basques!
-
-[NODOORS]
-~g~Hé, c'est pas des sardines! Trouve une caisse avec assez de sièges!
-
-[TRASH]
-~g~T'as vachement bousillé ta bagnole ! Fais-la réparer !
-
-[WRECKED]
-~r~Le caisse est fortue!
-
-[HORN]
-~g~Klaxonne!
-
-[HORN4]
-Appuie sur la ~h~touche L3~w~ pour ~h~klaxonner.
-
-[NOMONEY]
-~g~T'as besoin de thune!
-
-[OUTTIME]
-~r~T'es lent, mec, t'es trop lent!
-
-[SPOTTED]
-~r~Ils en ont après ta peau!
-
-[REWARD]
-~1~$ de récompense
-
-[GAMEOVR]
-FIN DE PARTIE
-
-[Z]
-Valeur axe Z : ~1~
-
-[M_FAIL]
-ECHEC DE LA MISSION!
-
-[M_PASS]
-MISSION REUSSIE! ~1~$
-
-[O_PASS]
-PETIT BOULOT REUSSI!
-
-[O_FAIL]
-PETIT BOULOT RATE!
-
-[DEAD]
-T'ES MORT!
-
-[BUSTED]
-TU T'ES FAIT COFFRER!
-
-[S_PROMP]
-Si tu n'es pas en mission, tu peux ~h~sauvegarder le jeu ici~w~, ça fera avancer la montre de six heures.
-
-[NUMBER]
-~1~
-
-[SCORE]
-~1~$
-
-[LOADCAR]
-CHARGEMENT DU VEHICULE...
-
-[CARSOFF]
-Trafic désactivé
-
-[CARS_ON]
-Trafic activé
-
-[TEXTXYZ]
-Ecriture des coordonnées sur le fichier...
-
-[CHEATON]
-Mode Triche activé
-
-[CHEATOF]
-Fonction tricher OFF
-
-[UZI_IN]
-L'Uzi est disponible maintenant à Ammu-Nation!
-
-[IMPORT1]
-Va dehors et attends ton véhicule.
-
-[PAGEB1]
-Pistolet livré à la planque.
-
-[PAGEB2]
-Uzi livré à la planque.
-
-[PAGEB3]
-Armure livrée à la planque.
-
-[PAGEB4]
-Fusil à pompe livré à la planque.
-
-[PAGEB5]
-Grenades livrées à la planque.
-
-[PAGEB6]
-Cokctails molotov livrés à la planque.
-
-[PAGEB7]
-AK47 livré à la planque.
-
-[PAGEB8]
-Fusil à lunette livré à la planque.
-
-[PAGEB9]
-M16 livré à la planque.
-
-[PAGEB10]
-Lance-roquettes livré à la planque.
-
-[PAGEB11]
-Lance-flammes livré à la planque.
-
-[WANT_A]
-Tu ne seras arrêté que si tu possèdes un ~h~indice de recherche.
-
-[WANT_B]
-Ton ~h~indice de recherche~w~ est symbolisé par les étoiles dans le coin supérieur droit de l'écran.
-
-[WANT_C]
-Ton ~h~indice de recherche~w~ est de 1...
-
-[WANT_D]
-2...
-
-[WANT_E]
-3...
-
-[WANT_F]
-Plus ton ~h~indice de recherche~w~ augmente, plus les forces de l'ordre t'en veulent.
-
-[WANT_G]
-Quand tu te fais ~h~choper~w~, tu es amené au poste de police le plus proche.
-
-[WANT_H]
-Les flics se laisseront corrompre contre tes armes et une partie de ton oseille.
-
-[WANT_I]
-Toute mission en cours sera automatiquement un échec.
-
-[WANT_J]
-Plus tu joueras, plus tu trouveras de moyens de diminuer ton indice de recherche.
-
-[WANT_K]
-En voiture, les ~h~ateliers de peinture~w~ te permettront d'~h~enrayer ton indice de recherche.
-
-[HEAL_B]
-Quand tu es ~h~H.S.~w~, t'es amené à l'hosto le plus proche.
-
-[HEAL_C]
-On te confisque alors toute ton artillerie et les toubibs te pompent ton flouze pour recoller les bouts.
-
-[HEAL_E]
-En jouant, tu trouveras d'autres moyens de te soigner ou de te protéger.
-
-[DAM]
-DEGATS :
-
-[KILLS]
-VICTIMES :
-
-[FARES]
-FRAIS :
-
-[BULL]
-FRIC :
-
-[EVID]
-PREUVES :
-
-[HEALTH]
-ETAT DU VEHICULE :
-
-[COLLECT]
-RECUPERE :
-
-[BOMB]
-Conduis ton véhicule chez l'artificier et piège-le avec une ~h~bombe~w~. Coût - ~h~1.000 dollars.
-
-[SAVE1]
-Franchis la porte pour ~h~sauvegarder la partie~w~. Tu ne peux pas sauvegarder en cours de mission.
-
-[SAVE2]
-Tout véhicule laissé dans ce garage sera enregistré lors de la sauvegarde.
-
-[AMMU]
-Va chez Ma-Gnum pour acheter une arme.
-
-[BRIDGE1]
-Quand le pont Callahan sera réparé, tu pourras te rendre à l'île Staunton .
-
-[TUNNEL]
-Quand le tunnel Porter aura réouvert, tu pourras te rendre à l'île Staunton .
-
-[LUIGI]
-MISSIONS DE LUIGI
-
-[TONI]
-MISSIONS DE TONI
-
-[JOEY]
-MISSIONS DE JOEY
-
-[FRANK]
-MISSIONS DE SALVATORE
-
-[DIABLO]
-MISSIONS DE DIABLO
-
-[ASUKA]
-MISSIONS D'ASUKA
-
-[B_SITE]
-MISSIONS DE BANLIEUE D'ASUKA
-
-[KENJI]
-MISSIONS DE KENJI
-
-[RAY]
-MISSIONS DE RAY
-
-[LOVE]
-MISSIONS DE LOVE
-
-[YARDIE]
-MISSIONS DE YARDIE
-
-[HOOD]
-MISSIONS DE HOOD
-
-[CITYZON]
-Liberty City
-
-[IND_ZON]
-Portland
-
-[PORT_W]
-Point Callahan
-
-[PORT_S]
-Atlantic Quays
-
-[PORT_E]
-Port de Portland
-
-[PORT_I]
-Trenton
-
-[S_VIEW]
-Vue de Portland
-
-[CHINA]
-Chinatown
-
-[EASTBAY]
-Plage de Portland
-
-[LITTLEI]
-Saint Mark's
-
-[REDLIGH]
-Le Quartier Rouge
-
-[TOWERS]
-Hauteurs de Hepburn
-
-[HARWOOD]
-Harwood
-
-[ROADBR1]
-Pont Callahan
-
-[ROADBR2]
-Pont Callahan
-
-[TUNNELP]
-Tunnel Porter
-
-[BOMB1]
-Garage de 8-Ball
-
-[COM_ZON]
-Ile de Staunton
-
-[STADIUM]
-Aspatria
-
-[HOSPI_2]
-Rockford
-
-[UNIVERS]
-Campus Liberty
-
-[CONSTRU]
-Fort Staunton
-
-[PARK]
-Parc Belleville
-
-[COM_EAS]
-Newport
-
-[SHOPING]
-Point Bedford
-
-[YAKUSA]
-Torrington
-
-[SUB_ZON]
-Vallée Shoreside
-
-[AIRPORT]
-Aéroport intl. Francis
-
-[PROJECT]
-Jardins Wichita
-
-[SUB_IND]
-Crique de Pike
-
-[SWANKS]
-Bosquet Cedar
-
-[BIG_DAM]
-Ecluse Cochrane
-
-[SUB_ZO2]
-Vallée Shoreside
-
-[SUB_ZO3]
-Vallée Shoreside
-
-[CAR_1]
-Ambulance
-
-[CAR_2]
-Camion de pompier
-
-[CAR_3]
-Voiture de police
-
-[CAR_4]
-Enforcer
-
-[CAR_5]
-Barraquements
-
-[CAR_6]
-Rhino
-
-[CAR_7]
-Voiture du FBI
-
-[CAR_8]
-Sécuricar
-
-[CAR_9]
-Moonbeam
-
-[CAR_10]
-Autobus
-
-[CAR_11]
-Camion
-
-[CAR_12]
-Linerunner
-
-[CAR_13]
-Camion-poubelle
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-M. Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinelle
-
-[CAR_25]
-Guépard
-
-[CAR_26]
-Banshee
-
-[CAR_27]
-Stinger
-
-[CAR_28]
-Infernus
-
-[CAR_29]
-Esperanto
-
-[CAR_30]
-Kuruma
-
-[CAR_31]
-Stretch
-
-[CAR_32]
-Perennial
-
-[CAR_33]
-Tout-terrain
-
-[CAR_34]
-Manana
-
-[CAR_35]
-Idaho
-
-[CAR_36]
-Etalon
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Tacot
-
-[CAR_39]
-Buggy
-
-[LUIGIS]
-Chez Luigi
-
-[GOAWAY]
-~g~T'es déjà en mission, imbécile!
-
-[LUIGGO]
-~g~Luigi fait passer un entretien à de nouvelles filles. Reviens plus tard!
-
-[JOEYGO]
-~g~Joey est en ville avec Misty. Repasse plus tard!
-
-[TONIGO]
-~g~Toni a emmené sa mère à l'opéra. Rappelle plus tard!
-
-[KEMUGO]
-~g~Maria et Kenuri sont occupés. Reviens un peu plus tard!
-
-[KENJGO]
-~g~Kenji est à un congrès de Yakuzas. Repasse plus tard.
-
-[RAYGO]
-Ray a autre chose à faire que de voir ta tronche. Va faire un tour!
-
-[LOVEGO]
-~g~Donald Love a d'autres chats à fouetter. Prends rendez-vous la prochaine fois!
-
-[KENSGO]
-~g~Kenji est occupé. Repasse à un autre moment.
-
-[ASUSGO]
-~g~Asuka n'est pas dispo pour l'instant.
-
-[HOODGO]
-~g~Les Hoods ne sont pas là pour le moment.
-
-[WRONGT1]
-~g~Repasse entre 05:00 et 21:00 pour du boulot.
-
-[WRONGT2]
-~g~Repasse entre 06:00 et 14:00 pour du taf.
-
-[WRONGT3]
-~g~Ramène ta fraise entre 15:00 et 00:00 pour bosser.
-
-[GUN_1A]
-Sers-toi de la ~h~touche ~k~~PED_CYCLE_WEAPON_RIGHT~~w~ et de la ~h~touche ~k~~PED_CYCLE_WEAPON_LEFT~~w~ pour faire défiler tes armes.
-
-[GUN_2A]
-Maintiens la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée pour ~h~viser automatiquement~w~ tes ennemis et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer. Entraîne-toi sur les cibles...
-
-[GUN_2C]
-Maintiens la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée pour ~h~viser automatiquement~w~ tes ennemis et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer. Entraîne-toi sur les cibles...
-
-[GUN_2D]
-Maintiens la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée pour ~h~viser automatiquement~w~ tes ennemis et appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer. Entraîne-toi sur les cibles...
-
-[GUN_3A]
-Tout en appuyant sur la ~h~touche ~k~~PED_LOCK_TARGET~~w~, appuie sur la ~h~touche ~k~~PED_CYCLE_TARGET_LEFT~~w~ ou la ~h~touche ~k~~PED_CYCLE_TARGET_RIGHT~~w~ pour changer de cible.
-
-[GUN_3B]
-Tout en appuyant sur la ~h~touche ~k~~PED_LOCK_TARGET~~w~, appuie sur la ~h~touche ~k~~PED_CYCLE_TARGET_LEFT~~w~ ou la ~h~touche ~k~~PED_CYCLE_TARGET_RIGHT~~w~ pour changer de cible.
-
-[GUN_4A]
-Tu peux marcher ou courir tout en gardant la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée afin de verrouiller une cible.
-
-[GUN_4B]
-Tu peux marcher ou courir tout en gardant la ~h~touche ~k~~PED_LOCK_TARGET~~w~ enfoncée afin de verrouiller une cible.
-
-[GUN_5]
-Tu peux t'entraîner à cibler et tirer sur ces cibles en papier. Quand tu as finis, reprends ta mission.
-
-[TAXI1]
-~g~Cherche une course.
-
-[FARE1]
-~g~Destination : ~w~Le 'Club Sex Meeouch'~g~ dans Le Quartier Rouge.
-
-[FARE2]
-~g~Destination : ~w~'Pribas'~g~ au Belvédère de Portland.
-
-[FARE3]
-~g~Destination : ~w~la 'Vieille Ecole'~g~ à Chinatown.
-
-[FARE4]
-~g~Destination : ~w~le 'Cafe greasy Joes' ~g~au Point Callahan.
-
-[FARE5]
-~g~Destination : ~w~'AmmuNation'~g~ dans Le Quartier Rouge.
-
-[FARE6]
-~g~Destination : ~w~'Caisses à crédit'~g~ à Saint Mark's.
-
-[FARE7]
-~g~Destination : ~w~le 'Woody's topless bar' ~g~ dans le Quartier Rouge.
-
-[FARE8]
-~g~Destination : ~w~le 'Bistro de Marco'~g~ à Saint Mark's.
-
-[FARE9]
-~g~Destination : ~w~le 'Garage import export' ~g~au Port de Portland.
-
-[FARE10]
-~g~Destination : ~w~'Têtes de Punk' ~g~ à Chinatown.
-
-[FARE12]
-~g~Destination : ~w~le 'Stade de Football'~g~ à Aspatria.
-
-[FARE13]
-~g~Destination : ~w~'L'église'~g~ au Point Bedford.
-
-[FARE14]
-~g~Destination : ~w~'Le Casino'~g~ à Torrington.
-
-[FARE15]
-~g~Destination : ~w~'Université de Liberty'~g~ au Campus Liberty.
-
-[FARE16]
-~g~Destination : ~w~le 'Centre commercial~g~ dans le coin du Parc Belleville.
-
-[FARE17]
-~g~Destination : ~w~le 'Musée'~g~ de Newport
-
-[FARE18]
-~g~Destination : ~w~le 'Bâtiment Am'~g~ de Torrington.
-
-[FARE19]
-~g~Destination : ~w~'Burgers bourgeois'~g~ à Point Bedford.
-
-[FARE20]
-~g~Destination : ~w~'Le parc'~g~ à Belleville.
-
-[FARE21]
-~g~Destination : ~w~'Aéroport internationnal Francis'~g~.
-
-[FARE22]
-~g~Destination : ~w~'l'écluse de Cochrane'~g~.
-
-[FARE24]
-~g~Destination : ~w~'L'hôpital'~g~ de la Crique Pike.
-
-[FARE25]
-~g~Destination : ~w~le 'Parc'~g~ à la vallée Shoreside.
-
-[FARE26]
-~g~Destination : ~w~les 'Tours North West'~g~ des jardins Wichita.
-
-[NEW_TAX]
-PLUS GROS! PLUS RAPIDES! PLUS SOLIDES! Les taxis Borgnine s'installent à Harwood. Contactez-les dès aujourd'hui au 555-Borgnine!
-
-[TSCORE2]
-~1~$
-
-[IN_ROW]
-~1~ DE SUITE! Bonus : ~1~$
-
-[TTUTOR]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver l'affichage des missions taxi.
-
-[TTUTOR2]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver l'affichage des missions taxi.
-
-[ATUTOR2]
-~g~Conduis les patients à l'hôpital. DOUCEMENT. Chaque secousse réduit leurs chances de survie.
-
-[A_TIME]
-+~1~ secondes.
-
-[A_FULL]
-~r~Ambulance pleine!
-
-[A_RANGE]
-~g~La radio de l'ambulance ne capte plus rien. Rapproche-toi d'un hôpital!
-
-[FTUTOR]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver les missions camion de pompier.
-
-[FTUTOR2]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver les missions camion de pompier.
-
-[F_PASS1]
-Feu éteint!
-
-[F_RANGE]
-~g~La radio du camion de pompier ne capte plus rien. Rapproche-toi d'une caserne de pompiers!
-
-[C_BREIF]
-~g~Suspect aperçu pour la dernière fois dans le secteur : ~a~.
-
-[C_RANGE]
-~g~La radio de la voiture de police ne capte plus rien. Rapproche-toi d'un poste de police!
-
-[DODO_FT]
-Tu as 'volé' pendant ~1~ secondes!
-
-[EBAL_A]
-Je connais un coin dans Le Quartier Rouge où on pourra se planquer,
-
-[EBAL_A1]
-faut que tu prennes le volant, mes mains tremblent trop.
-
-[EBAL_1]
-Appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour ~h~monter~w~ ou ~h~sortir~w~ d'un véhicule.
-
-[EBAL_1B]
-Appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour ~h~monter~w~ ou ~h~sortir~w~ d'un véhicule.
-
-[EBAL_2]
-~g~Remonte dans la bagnole!
-
-[EBAL_3]
-C'est le ~h~radar~w~. Utilise-le pour te repérer dans la ville, et suis le ~h~symbole~w~ sur le ~h~radar~w~ pour trouver la planque!
-
-[EBAL_D]
-Je connais un mec qu'a des relations. Il s'appelle Luigi.
-
-[EBAL_D1]
-On est pote, alors il pourra certainement te trouver du boulot. Viens, on y va.
-
-[EBAL_E]
-Allez, viens, on va y faire un tour, histoire de te présenter.
-
-[EBAL_I]
-Le patron viendra bientôt vous voir...
-
-[EBAL_J]
-8-Ball a des trucs à faire en haut.
-
-[EBAL_K]
-Tu peux peut-être me rendre un service.
-
-[EBAL_L]
-Une de mes filles a besoin d'un taxi. Tire une bagnole et va chercher Misty à la clinique. Ensuite, ramène-la ici.
-
-[EBAL_N]
-Et garde bien tes mains sur le volant, compris ?
-
-[EBAL_4]
-~r~8-Ball est mort!
-
-[EBAL_5]
-~g~Prenez une caisse!
-
-[EBAL_6]
-~g~Va chercher Misty!
-
-[LM1]
-'LES FILLES DE LUIGI'
-
-[LM2]
-'PAS DE SPANK POUR LA PEPEE'
-
-[LM3]
-'LA MYSTERIEUSE MISTY'
-
-[LM5]
-'LE BAL A BALLES'
-
-[LM1_2]
-~g~Emmène Misty au club de Luigi.
-
-[LM1_3]
-~g~Klaxonne pour faire monter la fille.
-
-[LM1_6]
-~g~Rentre dans la caisse!
-
-[LM1_7]
-Arrête la bagnole près de Misty et laisse-la monter à bord.
-
-[LM1_8]
-Tu peux retourner voir Luigi pour le boulot, ou visiter Liberty City.
-
-[LM2_A]
-Y'a une nouvelle saloperie sur le marché. Ca s'appelle la SPANK.
-
-[LM2_E]
-Un petit malin fourgue cette merde à mes filles du Port de Portland.
-
-[LM2_B]
-Va lui foutre une raclée!
-
-[LM2_G]
-Je me vengerai!
-
-[LM2_1]
-~g~Pique sa caisse et fais-la repeindre.
-
-[LM2_2A]
-Sers-toi de la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~donner un coup de poing~w~, ~h~un coup de pied~w~ ou un ~h~coup de batte~w~.
-
-[LM2_2C]
-Sers-toi de la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~donner un coup de poing~w~, ~h~un coup de pied~w~ ou un ~h~coup de batte~w~.
-
-[LM2_2D]
-Sers-toi de la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~donner un coup de poing~w~, ~h~un coup de pied~w~ ou un ~h~coup de batte~w~.
-
-[LM2_3]
-~g~Planque la bagnole dans le garage de Luigi!
-
-[LM2_4]
-~g~Repeins la bagnole!
-
-[LM3_A]
-Hé, faut que je te cause... OK, Mick, je te parle plus tard.
-
-[LM3_B]
-Comment ça va, gamin ?
-
-[LM3_C]
-Le fils du Don, Joey Leone, il veut voir sa régulière, Misty.
-
-[LM3_D]
-Va la chercher à Hauteurs de Hepburn...
-
-[LM3_E]
-Mais fais gaffe, c'est le territoire de Diablo.
-
-[LM3_F]
-Amène-la ensuite au garage de joey, à Trenton et vite!
-
-[LM3_H]
-Donc tes yeux, ils regardent la route et pas Misty, ok ?
-
-[LM3_1D]
-Appuie sur la ~h~touche L3~w~ pour ~h~klaxonner~w~ et indiquer à Misty que tu es là.
-
-[LM3_2]
-~g~Emmène Misty chez Joey!
-
-[LM3_4]
-~g~Va chercher Misty!
-
-[LM3_5]
-Tu bosses pour Luigi, hein ? Il était temps qu'il se trouve un chauffeur digne de confiance.
-
-[LM3_7]
-Je suis à toi dans une minute, poupée.
-
-[LM3_10]
-~g~Trouve une caisse!
-
-[LM4_B]
-Va t'occuper de cette affaire pour moi.
-
-[LM4_C]
-Si t'as besoin d'un calibre, va derrière Ammu-Nation en face du métro.
-
-[LM5_A]
-Le Bal de la police a lieu dans la vieille école près du Pont de Callahan.
-
-[LM5_B]
-Alors les flics auront besoin d'action à l'ancienne!
-
-[LM5_C]
-J'ai des filles partout dans les rues.
-
-[LM5_D]
-Emmène-les au bal, histoire de faire d'une pierre deux coups : profit et détente!
-
-[LM5_1]
-~g~Si tu les serres trop, elles vont avoir des bleus! ~g~Livre d'abord celles-la et reviens en chercher d'autres.
-
-[LM5_2]
-~r~L'une des filles de Luigi est bonne pour la morgue!
-
-[LM5_3]
-~g~T'as besoin d'un véhicule!
-
-[LM5_4]
-~g~Va ramasser les filles qui tapinent à St. Mark's.
-
-[LM5_5]
-~g~Emmène les filles au bal!
-
-[LM5_8]
-~g~Filles au bal : ~1~
-
-[JM2]
-'AU REVOIR LEE'
-
-[JM4]
-'LE CHAUFFEUR DE MONSIEUR'
-
-[JM5]
-'TRANSPORT DE MARCHANDISES AVARIEES'
-
-[JM1_1]
-~g~Amène la voiture de Forelli au garage de 8-Ball, au nord, derrière 'Caisses à crédit'.
-
-[JM1_2]
-~g~Ramène la bagnole au Bistro de Marco.
-
-[JM1_3]
-~g~Arme la bombe et CASSE-TOI EN VITESSE!
-
-[JM1_4]
-~g~T'as bousillé la caisse! Fais-la réparer!
-
-[JM1_5]
-~g~T'as pas armé la bombe!
-
-[JM1_6]
-~g~Gare la bagnole correctement!
-
-[JM1_8A]
-~y~Hé, c'est mon gars préféré!
-
-[JM1_8B]
-~y~Chez l'artifier, tout est automatique. T'amènes la voiture, tu la gares, et le reste se fait tout seul!
-
-[JM1_8C]
-~y~Viens, le premier est gratuit, mais juste le premier, compris ?
-
-[JM2_A]
-Chunky Lee Chong fout la merde avec la Spank pour un nouveau gang de Colombie... ou du Colorado... un coin comme ça...
-
-[JM2_B]
-J'en sais rien. On s'en fout, après tout.
-
-[JM2_D]
-Il a dépassé les bornes!
-
-[JM2_E]
-Il faut lui régler son compte!
-
-[JM2_G]
-Débrouille-toi avec un 9 mm, tu sais où il se trouve, non ?
-
-[JM2_H]
-Et souviens-toi : fais gaffe à Chinatown, c'est le territoire de la Triade.
-
-[JM3_A]
-Bon, on va s'attaquer à un fourgon blindé.
-
-[JM3_B]
-Il part de Chinatown tous les jours.
-
-[JM3_C]
-Les balles traverseront pas son blindage, alors vole une caisse et rentre-lui dedans.
-
-[JM3_D]
-Cogne bien fort et les larbins de sécurité devraient pas demander leur reste!
-
-[JM3_E]
-Ensuite, t'emmènes le fourgon à l'entrepôt des docks et mes gars prennent le relais.
-
-[JM3_F]
-Mais bon, ils vont pas faire leur ronde toute la journée, alors traîne pas en route!
-
-[JM3_1]
-~g~Emmène le fourgon à la planque.
-
-[JM3_2]
-~g~Fonce dans le fourgon jusqu'à ce que ses dégâts soient inférieurs à 70%.
-
-[JM4_B]
-Hé! C'est le gars dont je te parlais!
-
-[JM4_C]
-Ok. Ce gars, c'est pas un Italien, c'est pas un mécano, mais il peut réparer les choses.
-
-[JM4_D]
-C'est Pops Capo, Toni Cipriani.
-
-[JM4_E]
-Ouais, je suis Toni Cipriani.
-
-[JM4_F]
-Emmène-le au resto de la Mamma, à St Mark's, ok ?
-
-[JM4_G]
-Maintenant, écoute. Je prépare un truc et j'ai besoin d'un bon conducteur. Alors, passe me voir, ok ?
-
-[JM4_2]
-Attends-moi ici. Et laisse tourner le moulin. C'est pas une visite de courtoisie.
-
-[JM4_3]
-Une embuscade de la Triade! Sors-nous d'ici, gamin!
-
-[JM4_4]
-La Triade pense qu'elle peut s'attaquer à moi! Hum! Tu te rends compte, A MOI!
-
-[JM4_6]
-Hé, fais gaffe à la bagnole! J'ai dit pas de lézards!
-
-[JM4_7]
-~g~Emmène Toni au restaurant de la Mamma.
-
-[JM4_8]
-~r~Toni sert d'engrais aux chrisantèmes!
-
-[JM5_A]
-Magnifique! Réellement magnifique!
-
-[JM5_B]
-Très bien, c'est l'homme qu'il me fallait!
-
-[JM5_D]
-Un des Forelli s'est cru un peu trop malin et il en a pris pour son grade!
-
-[JM5_E]
-Emmène le corps au broyeur de Harwood, ok ?
-
-[JM5_1]
-~g~Emmène-le au broyeur!
-
-[JM5_2]
-~g~C'est les frères Forelli!
-
-[JM6_A]
-Joli morceau, hein?
-
-[JM6_B]
-Ok, écoute : choisis une caisse dans l'entrepôt de Saint Mark's et va chercher quelques potes à moi.
-
-[JM6_C]
-Il font un retrait à la banque et ils ont besoin d'un taxi.
-
-[JM6_D]
-J'ai dit que tu ferais parfaitement l'affaire, alors me déçois pas!
-
-[JM6_E]
-Amène-les à la banque avant 5 heures, et sois pas en retard!
-
-[JM6_2]
-Laisse le moulin tourner, y'en a pas pour longtemps!
-
-[JM6_3]
-Sors-nous de là!
-
-[JM6_4]
-Débarrasse-toi des poulets et amène-nous à l'entrepôt!
-
-[JM6_6]
-~g~Va voler une caisse moins voyante!
-
-[JM6_7]
-~g~Faut que tu prennes les 3 pour voler la banque!
-
-[TM1]
-'LINGE SALE'
-
-[TM2]
-'LA LIVRAISON'
-
-[TM3]
-'LA RENCONTRE'
-
-[TM4]
-'LE TRIANGLE DES TRIADES'
-
-[TM5]
-'LA HUITIEME PLAIE'
-
-[TONI_P]
-J'ai un boulot urgent pour toi!
-
-[TM1_A]
-~w~Assieds-toi, gamin. Prends une de ces putains de chaises.
-
-[TM1_B]
-~w~Alors, la laverie veut pas payer pour sa protection, hein ?
-
-[TM1_C]
-~w~La Triade pense qu'elle peut se mêler de mes affaires ?
-
-[TM1_D]
-~w~On va apprendre à ces faux durs ce que c'est que des vrais hommes!
-
-[TM1_E]
-~w~Ouais, on va leur apprendre à nous respecter! Aucun de mes gars ne se laisse intimider par une Triade minable!
-
-[TM1_F]
-~w~Ton père, qu'il repose en paix, se laissait pas faire par les Triades, à l'époque, en Sicile!
-
-[TM1_G]
-~w~Pardon Ma. Oui Ma.
-
-[TM1_H]
-~w~Je veux que tu détruises les camionnettes de la laverie.
-
-[TM1_I]
-~w~Et roule sur tous les gars de la Triade que tu croiseras.
-
-[TM1_J]
-~w~8-Ball te donnera ce dont tu as besoin.
-
-[TM2_A]
-~w~Toni est parti en faire saigner plus d'un, ou du moins, il essaie.
-
-[TM2_AA]
-Il ne sera jamais aussi fort que son papa. Il t'a laissé un mot sur la table.
-
-[TM2_B]
-~w~La laverie a accepté de payer. C'est du bon boulot!
-
-[TM2_C]
-~w~Va chercher la thune et ramène-la ici. Et fais gaffe à la Triade.
-
-[TM2_D]
-~w~C'est comme les roquets : ça aboie, mais ça mord pas!
-
-[TM2_E]
-~w~Personne, je dis bien PERSONNE, ne se mêle des affaires de TONY CIPRIANI!
-
-[TM2_1]
-~g~Apporte le flouze à Toni!
-
-[TM2_2]
-~g~Tu les as tous refroidis!
-
-[TM3_MA]
-~w~Je ne sais pas où il est!
-
-[TM3_MB]
-~w~Ce gamin, des fois, il sait même pas où il se trouve!
-
-[TM3_MC]
-~w~Son père, c'est sûr, c'était différent. Toujours au top, sûr de lui, viril...
-
-[TM3_A]
-~w~Don Salvatore a convoqué une assemblée.
-
-[TM3_B]
-~w~J'ai besoin de toi pour aller chercher la Stretch et Joey, son fils, au garage.
-
-[TM3_C]
-~w~Alors va chercher Luigi à son club et reviens ensuite me chercher.
-
-[TM3_D]
-~w~On ira tous ensemble chez le don.
-
-[TM3_E]
-~w~Ces Triades, elles savent jamais quand s'arrêter.
-
-[TM3_F]
-~w~Elles veulent la guerre, elles auront la guerre.
-
-[TM3_G]
-~w~Maintenant, faut y aller.
-
-[TM3_1]
-~g~Prends la Stretch chez Joey.
-
-[TM3_2]
-~g~Va chercher Luigi.
-
-[TM3_3]
-~g~Va chercher Toni.
-
-[TM3_4]
-~g~Conduis tout le monde chez Salvatore.
-
-[TM3_5]
-~y~Une embuscade de la Triade!
-
-[TM4_B]
-~w~Nous sommes en GUERRE! La Triade se sert d'une conserverie de poisson comme façade!
-
-[TM4_C]
-~w~Ils règlent la majeure partie de leurs affaires au marché aux poissons de Chinatown.
-
-[TM4_D]
-~w~Cette laverie doit toujours payer son assurance...
-
-[TM4_E]
-~w~Ils pensent que la Triade les protège, donc il faut leur montrer que ce n'est pas le cas.
-
-[TM4_F]
-~w~Prends les garçons avec toi pour éliminer les chefs de la Triade!
-
-[TM4_G]
-~w~Et puis, si t'en as l'occasion, descends quelques-uns de leurs porte-flingues.
-
-[TM4_GAT]
-~g~Tu as besoin d'un 'Camion de poisson de la Triade' pour entrer.
-
-[TM5_A]
-TEXT NO LONGER REQUIRED
-
-[TM5_B]
-~w~Ok, j'en ai marre de toutes ces conneries.
-
-[TM5_C]
-~w~On va en finir une bonne fois pour toute avec la Triade de Liberty!.
-
-[TM5_D]
-8-Ball a installé une bombe sur une benne à ordures.
-
-[TM5_E]
-~w~Il y a un minuteur donc, si tu te chies dessus, y'aura pas de preuves. Va chercher la benne.
-
-[TM5_F]
-~w~Fais gaffe, 8-Ball dit que c'est super-sensible et que la moindre secousse peut tout faire sauter.
-
-[TM5_G]
-~w~La conserverie de poisson laissera entrer la benne, après ce sera à toi de jouer.
-
-[TM5_H]
-~w~Gare-toi entre les bonbonnes de gaz et casse-toi en vitesse!
-
-[TM5_I]
-~w~Je veux qu'il pleuve des maquereaux!
-
-[TM5_J]
-~w~C'est du Cecil B. DeMille que je veux, pas de la série Z!
-
-[FM2]
-'LA FILLE DU MOGHOL'
-
-[FM4]
-'DERNIERES VOLONTES'
-
-[FM1_A]
-~w~Moi et les gars, on a besoin de causer affaires.
-
-[FM1_B]
-~w~Alors tu vas veiller sur ma fille pendant la soirée.
-
-[FM1_C]
-~w~MARIA! RAMENE TES FESSES PAR ICI!
-
-[FM1_D]
-~w~Cette petite conne fait toujours ça.
-
-[FM1_E]
-~w~Et la voilà, la seule et unique reine de Saba!
-
-[FM1_F]
-~w~Qu'est-ce que tu faisais là-bas ?
-
-[FM1_G]
-~w~Enfin, peu importe, je parie que ça m'a coûté de l'argent!
-
-[FM1_H]
-~w~Bon, tu crois quand même pas que je suis dans le coin pour te faire la conversation ?
-
-[FM1_I]
-~w~Monte dans cette bagnole et ferme ta grande gueule!
-
-[FM1_J]
-~w~Prends la Stretch, mais tu la ramènes en un seul morceau, compris?
-
-[FM1_K]
-~w~Et surveille-la, elle peut foutre la merde!
-
-[FM1_L]
-~w~Ouais, ouais, ouais, je suis sûr que le neurone de ton nouveau larbin a tout enregistré!
-
-[FM1_M]
-~w~Et pis il est taillé comme une armoire normande, alors y'a pas de risque!
-
-[FM1_N]
-~w~Allez, Fido. On va chez Chico s'éclater un peu!
-
-[FM1_P]
-~g~C'est Chico, là! Arrête-moi à côté!
-
-[FM1_S]
-~w~Bonsoir, jolie dame.
-
-[FM1_TT]
-~w~22, V'LA LES FLICS!
-
-[FM1_1]
-~g~Retourne dans la Stretch!
-
-[FM1_2]
-~g~Monte dans la Stretch!
-
-[FM1_3]
-~r~Si tu laisses Maria, Salvatore va l'avoir mauvaise, alors retourne la chercher!
-
-[FM1_4]
-~g~Tu viens de larguer la femme du Don! Retourne à l'entrepôt et attends Maria!
-
-[FM1_5]
-~g~Ramène Maria chez Salvatore!
-
-[FM1_6]
-~g~Chico ne restera pas là tout le temps, alors emmène Maria voir la mer.
-
-[FM1_7]
-~r~Maria est morte! Salvatore va être furax...
-
-[FM1_8]
-~r~T'as trucidé le fournisseur de Maria!
-
-[FM2_J]
-Laisse-nous seuls un moment.
-
-[FM2_A]
-Le Cartel colombien fabrique de la SPANK quelque part à Liberty.
-
-[FM2_K]
-Mais on sait pas où, et on dirait qu'ils sont au courant de nos moindres faits et gestes.
-
-[FM2_L]
-Y'a un gars, Bob le frisé, qui bosse au bar chaz Luigi.
-
-[FM2_M]
-Il dépense plus qu'il ne gagne...
-
-[FM2_N]
-Il prend souvent un taxi pour rentrer chez lui après le boulot. Alors, suis-le.
-
-[FM2_O]
-Et si c'est lui la balance, descends-le...
-
-[FM2_F]
-Voilà notre copain. Monsieur grande gueule en personne.
-
-[FM2_G]
-T'as été suivi ? Tu sais que ce qui se passe ici, c'est notre petit secret...
-
-[FM2_H]
-Non, non, j'ai pas été suivi. T'as la came ?
-
-[FM2_I]
-Voilà ta SPANK, alors crache le morceau.
-
-[FM2_P]
-Ok, alors ce qui se passe, c'est que les Leone mènent la guerre sur deux fronts à la fois.
-
-[FM2_Q]
-Y'a une guerre de territoire avec la Triade qu'est pas prête de finir
-
-[FM2_R]
-et Joey Leone a foutu la merde avec les Forelli.
-
-[FM2_S]
-Ils perdent du terrain et des hommes tous les jours.
-
-[FM2_T]
-Salvatore devient de plus en plus irascible et parano chaque jour. Il soupçonne tout le monde.
-
-[FM2_U]
-Ben, quand je te vois, je me dis qu'il a pas forcément tort...
-
-[FM2_1]
-~g~Voilà Bob le frisé!
-
-[FM2_2]
-~g~Bob a quitté le club, suis-le!
-
-[FM2_5]
-~g~Amène-le au port de Portland.
-
-[FM2_6]
-~r~Bob montera jamais dans un taxi bousillé!
-
-[FM2_7]
-~r~Bob le frisé s'est dégonflé. Le rendez-vous est annulé.
-
-[FM2_8]
-~g~Cogne Bob le frisé!
-
-[FM2_9]
-~r~Bob le frisé est mort!
-
-[FM2_10]
-~r~Bob le frisé s'est fait la malle!
-
-[FM2_11]
-~g~Gare-toi devant le club de Luigi, Bob le frisé devrait pas tarder à sortir.
-
-[FM2_12]
-~r~Il t'a faussé compagnie!
-
-[FM3_A]
-~w~On devrait régler leur compte à ces bâtards de Colombiens.
-
-[FM3_B]
-~w~Mais tant qu'on est en guerre avec les Triades, on n'est pas assez fort.
-
-[FM3_C]
-~w~Les fonds du Cartel sont illimités, avec tout l'argent qu'ils se font sur la SPANK.
-
-[FM3_D]
-~w~Si on les attaquait de front, ils nous lamineraient!
-
-[FM3_E]
-~w~Ils doivent fabriquer la SPANK sur le bateau vers lequel Le frisé t'a conduit.
-
-[FM3_F]
-~w~Va falloir utiliser nos cerveaux, ou plutôt un. Le tien!
-
-[FM3_G]
-~w~Je te demande de détruire cette usine de SPANK comme une faveur, pour moi, Salvatore Leone.
-
-[FM3_H]
-~w~Si tu y arrives, ton avenir est assuré, tu auras tout ce que tu veux!
-
-[FM3_I]
-~w~Va voir 8-Ball, il te dira comment faire, c'est un expert en explosifs.
-
-[FM3_8A]
-~w~Salut mon gars! Salvatore m'a téléphoné.
-
-[FM3_8B]
-~w~Pour un boulot comme ça, il va te falloir un sacré paquet de feux d'artifices!
-
-[FM3_8D]
-~w~Mais tu sais que tu en as toujours pour ton pognon avec moi!
-
-[FM3_8E]
-~w~Ok, au boulot!
-
-[FM3_8F]
-~w~Je peux régler le détonateur de ce bébé, mais je peux toujours pas utiliser un flingue avec ces mains.
-
-[FM3_8G]
-~w~Tiens, cette pétoire devrait te servir à faire sauter quelques têtes.
-
-[FM3_4]
-~g~Arrête la bagnole et laisse 8-Ball sortir.
-
-[FM3_7]
-~r~8-Ball s'est fait refroidir!
-
-[FM3_8]
-~r~Les gardes ont été prévenus!
-
-[FM4_A]
-~w~Ah, voilà mon nettoyeur favori!
-
-[FM4_B]
-~w~Je suis fier de toi, mon garçon, tu leur en as mis plein la gueule!
-
-[FM4_C]
-~w~J'ai juste un autre petit travail à te confier avant de pouvoir sabrer le champagne.
-
-[FM4_D]
-~w~Il y a une voiture devant le club de Luigi.
-
-[FM4_E]
-~w~L'intérieur est tapissé de cervelle!
-
-[FM4_F]
-~w~On a aidé un gars à se faire une idée, et y'a eu quelques salissures.
-
-[FM4_H]
-~w~Emmène-le au broyeur avant que les flics ne le trouvent.
-
-[AM3]
-'PURGE DE PAPARAZZI'
-
-[AM4]
-'JOUR DE PAYE'
-
-[AM5]
-'TANNER L'AGENT DOUBLE'
-
-[AM1_A]
-Nous devons éclaircir certains points avant de poursuivre nos relations,
-
-[AM1_B]
-affaires ou autres. Mettons cartes sur table.
-
-[AM1_C]
-Moi, je suis Yakuza et je sais que tu travailles pour la famille de Salvatore Leone.
-
-[AM1_D]
-Nous pouvons te donner du travail,
-
-[AM1_E]
-mais il faut d'abord nous prouver que t'as plus aucun lien avec la mafia.
-
-[AM1_G]
-Débrouille-toi pour qu'il n'arrive pas vivant à son club.
-
-[AM1_H]
-Pendant ce temps-là, Maria et moi, nous nous remémorerons le bon vieux temps.
-
-[AM1_I]
-Oh... Asuka, tu t'es trouvé un messager.
-
-[AM1_J]
-Ce n'est pas un simple messager.
-
-[AM1_1]
-~g~Salvatore part de chez Luigi!
-
-[AM1_2]
-~r~Tu t'es fait repérer!
-
-[AM1_3]
-~r~Tu as raté Salvatore!
-
-[AM1_4]
-~r~Bravo, t'as effrayé la cible! Et t'es censé être un tireur d'élite, c'est ça ?
-
-[AM1_5]
-~g~Va au Le Quartier Rouge et attends que Salvatore sorte du club.
-
-[AM1_7]
-~r~Salvatore est chez lui, à siroter un whisky. T'es vraiment pas une flèche, toi!
-
-[AM1_8]
-~g~Salvatore va sortir de chez Luigi à environ ~1~:~1~.
-
-[AM2_4]
-~g~Ils t'ont vu venir aussi nettement que si t'étais un éléphant rose!
-
-[AM3_A]
-Y'a un journaliste qui nous tourne autour.
-
-[AM3_B]
-Maria et moi, on part en vacances, histoire de te laisser le temps de te débarrasser de ce voyeur pervers.
-
-[AM4_A]
-Ah, mon meilleur homme!
-
-[AM4_B]
-Maria est très occupée, mais je lui dirai que t'es passé.
-
-[AM4_C]
-Qui est là ? Asuka ? Je sais que je n'ai pas été très sage, mais j'ai le droit d'aller toute seule au petit coin, ok ?
-
-[AM4_D]
-Il est temps que tu rencontres notre homme au LPD.
-
-[AM4_E]
-Voilà sa paye pour le dernier service qu'il nous a rendu.
-
-[AM4_F]
-Il est terriblement prudent.
-
-[AM4_G]
-Va à la cabine de téléphone de Torrington aussi vite que tu peux et attends ses instructions.
-
-[AM5_A]
-Maria et moi, on est allé faire des courses.
-
-[AM5_B]
-Notre informateur dans la police nous a dit qu'un de nos conducteurs est un flic sous couverture!
-
-[AM5_C]
-Il ne vaut pas grand chose hors de sa voiture, alors on y a installé un capteur.
-
-[AM5_D]
-Je veux qu'il souffre!
-
-[AM5_1]
-Tanner est à tes trousses!
-
-[AS1]
-'L'APPAT'
-
-[AS2]
-'CAFE RAPIDO'
-
-[AS4]
-'LA RANCON'
-
-[AS1_A]
-~w~Miguel semble croire que je l'ai maltraité.
-
-[AS1_B]
-Il nous a néanmoins révélé à quel point Catalina s'inquiète de ta soif de vengeance.
-
-[AS2_A]
-~w~On a sous-estimé les ambitions de Catalina avec la SPANK.
-
-[AS2_B]
-~w~Cela va plus loin qu'une vente à la sauvette dans les rues.
-
-[AS2_D]
-~w~Il fourgue sa came sur des étals.
-
-[AS2_1]
-~g~Tous les étals des vendeurs de café de Portland ont été renversés!
-
-[AS2_2]
-~g~Tous les étals des vendeurs de café de l'île de Staunton ont été renversés!
-
-[AS2_3]
-~g~Tous les étals des vendeurs de café la vallée Shoreside ont été renversés!
-
-[AS2_4]
-~r~Le Cartel a mis en garde ses revendeurs!
-
-[AS2_5]
-~g~Il y a toujours des stands de café à la vallée Shoreside et sur l'île Staunton!
-
-[AS2_6]
-~g~Il y a toujours des stands de café à la vallée Shoreside!
-
-[AS2_7]
-~g~Il y a toujours des stands de café sur l'île Staunton!
-
-[AS2_8]
-~g~Il y a encore des étals de vendeurs de café à Portland!
-
-[AS2_9]
-~g~Il y a toujours des stands de café dans Portland et la vallée Shoreside!
-
-[AS2_10]
-~g~Il y a toujours des stands de café dans Portland et sur l'île Staunton!
-
-[AS2_12]
-~g~Parcours les districts de Liberty pour trouver ~b~les étals de Café Rapido!
-
-[AS3_A]
-~W~Est-ce qu'on le serre un peu plus maintenant ou on attend juste qu'il vire au noir et qu'il tombe tout seul?
-
-[AS3_B]
-~w~Allez, encore un peu...
-
-[AS3_D]
-~w~Mon homme à tout faire!
-
-[AS3_E]
-~w~Je m'ennuyais alors je suis venue tenir compagnie à Asuka.
-
-[AS3_1]
-~g~Trouve un ~r~bateau~g~ et rejoins la ~b~bouée repère!
-
-[AS3_3]
-~g~Attends que l'~y~avion~g~ s'approche!
-
-[AS3_5]
-~g~Récupère la marchandise!
-
-[AS3_4]
-~g~Sers-toi d'un lance-roquettes pour descendre l'~y~avion~g~!
-
-[AS3_2]
-~b~Va vers les bouées repères! ~y~L'avion est en phase d'approche!
-
-[AS3_6]
-~g~~1~ SUR 8
-
-[KM1]
-'LA GRANDE EVASION'
-
-[KM3]
-'NEGOCIATION'
-
-[KM4]
-'SHIMA'
-
-[KM5]
-'LES RIVIERES POURPRES'
-
-[KM1_A]
-Ma soeur m'a parlé de toi en des termes élogieux,
-
-[KM1_E]
-même si je suis toujours pas convaincu qu'un gaijin à autre chose à offrir que des déceptions.
-
-[KM1_B]
-Quoique, tu pourrais peut-être m'aider à régler un petit problème.
-
-[KM1_F]
-Bien sûr, un échec te serait fatal.
-
-[KM1_C]
-Un kanbu Yakuza est en garde à vue, en attente d'un transfert au palais de justice.
-
-[KM1_G]
-C'est un membre apprécié de notre famille.
-
-[KM1_H]
-Libère-le et amène-le au dojo de Bedford Point.
-
-[KM1_D]
-Nous te remercions pour ton aide désintéressée. Si toi aussi, tu as besoin d'aide un jour, le dojo te fournira avec plaisir deux hommes pour t'assister.
-
-[KM1_1]
-~g~Vole une bagnole de flics!
-
-[KM1_2]
-~g~Equipe-la d'une bombe!
-
-[KM1_3]
-~g~Maintenant, emmène-la au dojo des Yakuzas!
-
-[KM1_5]
-~g~Bien, maintenant, va au poste de police.
-
-[KM1_6]
-~g~Equipe la voiture d'une bombe!
-
-[KM1_7]
-~g~Réservé aux véhicules de police!
-
-[KM1_9]
-~r~Tu n'as pas utilisé de voiture piégée pour détruire le mur.
-
-[KM1_10]
-~r~Le Yakuza Kanbu est mort, tout comme ton honneur!
-
-[KM1_11]
-~r~Tu t'es fouré tout seul dans le pétrin!
-
-[KM2_A]
-Dans ce milieu, l'étiquette ne doit jamais être sous-estimée. Au contraire!
-
-[KM2_B]
-J'ai honte mais un homme m'a autrefois rendu service et je n'ai jamais eu l'occasion de lui montrer ma reconnaissance.
-
-[KM2_C]
-Cet homme est un passionné de voitures et il a demandé que nous lui fournissions certains modèles pour sa collection.
-
-[KM2_F]
-Mon honneur m'interdit de refuser.
-
-[KM2_2]
-~g~Voiture livrée.
-
-[KM3_A]
-Face au danger, l'inconscient tourne le dos alors que le sage fait front.
-
-[KM3_B]
-Nous avons prévenu à plusieurs reprises le Cartel colombien qu'il fallait laisser nos intérêts à Liberty tranquilles.
-
-[KM3_C]
-En ce moment même, ils négocient avec les Jamaïcains pour se moquer encore plus de nous.
-
-[KM3_D]
-Ils sont en train de passer un accord pour l'ensemble de la ville.
-
-[KM3_F]
-Prends un de mes hommes, vole une bagnole de Yardie et va présenter nos respects aux Colombiens.
-
-[KM3_E]
-Pour notre honneur, ils doivent tous mourir!
-
-[KM3_2]
-~g~Va prendre ton contact.
-
-[KM3_3]
-~g~La réunion a lieu sur le parking de l'hôpital de Rockford!
-
-[KM3_4]
-~r~Ils ont filé!
-
-[KM3_6]
-~g~Supprime-les, tue-les tous!
-
-[KM3_8]
-~g~Il te faut une bagnole de Yardie pour ce boulot!
-
-[KM3_9]
-~r~L'un des Colombiens est mort, l'accord est caduc.
-
-[KM3_10]
-~r~Le contact est mort!
-
-[KM4_A]
-La seule vraie force consiste à ne jamais montrer ses faiblesses.
-
-[KM4_C]
-Va récupérer l'argent immédiatement pour qu'on puisse le placer sur les comptes du casino.
-
-[KM4_1]
-Je peux pas vous payer et même si je pouvais, je le ferais pas!
-
-[KM4_9]
-Un gang de jeunes vient de dévaliser cet endroit! Ils ont tout pris!
-
-[KM4_2]
-Vous ne servez à rien!
-
-[KM4_10]
-Quel genre de Yakuza êtes-vous? hein?
-
-[KM4_3]
-C'est pas pour ça que je vous paye! Si j'avais voulu ce genre de protection, je me serais adressé directement aux flics!
-
-[KM4_4]
-~g~Réglez son compte au gang et récupérez ~b~l'argent de la protection~g~!
-
-[KM4_7]
-~r~Le commerçant est mort!
-
-[KM4_5]
-Donald Love aimerait que vous passiez prendre le thé chez lui afin d'avoir une conversation avec vous.
-
-[KM4_6]
-Tout l'argent est là!
-
-[KM4_8]
-~g~Malette récupérée!
-
-[KM5_A]
-TOI! Et c'est maintenant que tu te décides à te montrer!
-
-[KM5_B]
-Il semblerait que ta tentative pour empêcher les Jamaïcains
-
-[KM5_B1]
-de s'allier aux Colombiens ait complètement raté!
-
-[KM5_C]
-Y a des dealers du gang des Caraïbes dans tout Liberty qui vendent des sachets de SPANK comme si c'était des friandises!
-
-[KM5_D]
-Les membres du Cartel se foutent de nous et de moi surtout!
-
-[KM5_E]
-Je te donne une dernière chance de me prouver que ma soeur avait raison de te faire confiance!
-
-[KM5_F]
-Débarrasse-moi de tous ces rats et rachète-toi avec leur sang!
-
-[KM5_3]
-~r~Tu n'as pas réussi à tuer au moins ~1~ Yardies.
-
-[KM5_4]
-~g~Bravo, tu as tué ~1~ Yardies.
-
-[KM5_5]
-~g~Bravo! Tu as tué ~1~ Yardies. Bonus : ~1~$
-
-[RM1]
-'EQUILIBRER LA BALANCE'
-
-[RM3]
-'PREUVES A PROUVER'
-
-[RM4]
-'PECHE AU GROS'
-
-[RM5]
-'LE MARTEAU ET L'ENCLUME'
-
-[RM1_D]
-Il est sous protection dans une propriété de WitSec à Newport, des appartements à l'arrière du parking.
-
-[RM1_E]
-Enfume-moi cet endroit, ça devrait les faire sortir, et tu me les butes tous, fais en sorte que Mc Machin ne parle plus à personne.
-
-[RM1_1]
-~g~Vérifie la maison du programme de protection des témoins.
-
-[RM1_2]
-~g~Chope McAffrey!
-
-[RM2_A1]
-Hé, gamin, par là!
-
-[RM2_A]
-Un vieux pote à moi de l'armée a une affaire à Rockford.
-
-[RM2_D]
-Il a besoin d'un coup de main et, en échange, il te fera des prix d'enfer sur son matos.
-
-[RM2_E]
-Ray a téléphoné... mais je pensais que vous seriez plusieurs...
-
-[RM2_F]
-Bon, trois bras valent mieux qu'un, alors prends ce qu'il te faut.
-
-[RM2_G]
-~g~Va voir Phil!
-
-[RM2_H]
-~r~Phil a été tué!
-
-[RM2_L]
-Héhé! Si je t'avais eu comme partenaire au Nicaragua, j'aurais peut-être encore mes deux bras!
-
-[RM2_N]
-Laisse le fric. Maintenant, dégage, je m'occupe des poulets.
-
-[RM3_D]
-La pièce à conviction est en train de rouler dans la ville.
-
-[RM3_E]
-Va falloir que tu tamponnes cette caisse et que tu récupères les preuves au fur et à mesure qu'elles tombent!
-
-[RM3_F]
-Quand t'auras tout, laisse-les dans la voiture et brûle-la.
-
-[RM3_G]
-C'est une bonne affaire pour tous les deux, tu sais, gamin.
-
-[RM3_1]
-~g~Laisse les preuves dans la voiture et brûle-la.
-
-[RM3_4]
-~g~L'accusation n'a pas tenu compte des pièces à conviction!
-
-[RM3_6]
-~r~Ces photos seront dans tout Liberty!
-
-[RM3_7]
-~g~Brûle la voiture!
-
-[RM4_A]
-Mon partenaire est un rat.
-
-[RM4_C]
-Il va souvent pêcher en bateau près du phare de Portland Rock, la nuit.
-
-[RM4_D]
-Vole une vedette de la police et assure-toi que ses sales plans de traître tombent à l'eau!
-
-[RM4_1]
-~g~Vole une vedette de la police.
-
-[RM4_2]
-~g~Va jusqu'au phare et 'occupe-toi' du partenaire de Ray!
-
-[RM5_A]
-Espèce de bon à rien!
-
-[RM5_A1]
-Tu t'es chié dessus! Mon cul est en première ligne et t'es même pas foutu de buter une mouche!
-
-[RM5_B]
-Je t'ai filé de la thune pour buter ce témoin et il est encore en vie!
-
-[RM5_B1]
-Et il va faire une déposition devant les fédéraux aujourd'hui!
-
-[RM5_C]
-Ils vont le transférer d'un moment à l'autre de l'Hôpital Général Carson à Rockford!
-
-[RM5_D]
-S'il crache le morceau, je vais cracher mes dents, et plus encore...
-
-[RM5_E]
-Alors fais ce putain de boulot pour lequel je t'ai payé!
-
-[RM5_1]
-~g~Intercepte l'ambulance.
-
-[RM5_2]
-~g~Tu t'es fait repérer!
-
-[RM5_3]
-~g~C'était un piège à cons!
-
-[RM5_4]
-~g~Les balles ne peuvent pas traverser cette armure!
-
-[RM5_5]
-~g~Cette armure est recouverte d'amiante!
-
-[RM5_7]
-~r~Le témoin est arrivé à bon port!
-
-[RM5_8]
-~g~Le témoin s'est noyé!
-
-[LOVE2]
-'HARA-KIRI WAKA-SHIRA'
-
-[LOVE3]
-'RIEN QU'UNE GOUTTE DANS L'OCEAN'
-
-[LOVE1_A]
-Tout d'abord, je tiens à te remercier pour m'avoir aidé à régler cette affaire privée.
-
-[LOVE1_F]
-Les gens croient tout ce qu'on leur raconte de nos jours!
-
-[LOVE1_D]
-Ils essaient de m'extorquer plus d'argent, mais j'aime pas renégocier mes accords!
-
-[LOVE1_E]
-Un accord est un accord et il n'auront rien de plus de moi!
-
-[LOVE1_G]
-Va aider mon ami, tu as carte blanche.
-
-[LOVE1_2]
-~g~Sauve le vieux bridé.
-
-[LOVE1_3]
-~g~Amène le vieux bridé à l'appartement de Donald Love.
-
-[LOVE1_4]
-~g~Le vieux bridé doit se trouver dans un de ces garages...
-
-[LOVE1_6]
-~r~Les tripes du vieux bridé sont étalées sur le trottoir. Attention, ça glisse!
-
-[LOVE1_7]
-~g~Les portes ne s'ouvriront que pour laisser passer une voiture du gang des Colombiens.
-
-[LOVE2_A]
-Rien de mieux qu'une bonne vieille guerre des gangs pour faire marcher l'immobilier,
-
-[LOVE2_B]
-en dehors d'une bonne épidémie... mais ça serait peut-être un peu trop.
-
-[LOVE2_C]
-J'ai remarqué que les Yakuzas et les Colombiens n'étaient pas très copains.
-
-[LOVE2_D]
-C'est une opportunité que nous devons saisir!
-
-[LOVE2_E]
-Je veux que tu tues le waka-gashira des Yakuzas, Kenji Kasen.
-
-[LOVE2_F]
-Kenji est à une réunion au sommet du parking à plusieurs étages de Newport.
-
-[LOVE2_G]
-Procure-toi une voiture du Cartel et tue-le!
-
-[LOVE2_H]
-Les Yakuzas doivent accuser le Cartel de leur déclarer la guerre.
-
-[LOVE2_1]
-~g~Va à Fort Staunton et vole une voiture du gang des Colombiens.
-
-[LOVE2_2]
-~g~Maintenant, rends-toi au ~p~parking de Newport~g~ et élimine Kenji.
-
-[LOVE2_3]
-~r~Si tu n'as pas de voiture du Cartel, tu seras démasqué!
-
-[LOVE2_4]
-~r~Les Yakuzas t'ont reconnu!
-
-[LOVE2_6]
-~r~Tu as tué tous les témoins!
-
-[LOVE3_A]
-De nos jours, certaines marchandises de valeur sont difficiles à importer.
-
-[LOVE3_C]
-Plusieurs paquets vont être jetés à l'eau.
-
-[LOVE3_D]
-Récupère-les avant tout le monde.
-
-[LOVE3_1]
-~g~Procure-toi un ~r~bateau~g~ et suis l'~y~avion~g~!
-
-[LOVE4]
-'VOL AU VENT'
-
-[LOVE5]
-'ACCORTE ESCORTE!'
-
-[LOVE4_A]
-Merci beaucoup pour ces paquets, mais ils n'étaient qu'un leurre!
-
-[LOVE4_B]
-Je suis désolé pour ça, mais c'est quelque fois comme ça dans les affaires.
-
-[LOVE4_C]
-Mon réel objectif se trouvait depuis le début caché à bord de l'avion.
-
-[LOVE4_F]
-J'avais graissé la patte aux autorités.
-
-[LOVE4_1]
-~r~Les Colombiens sont là!
-
-[LOVE4_2]
-~g~Le paquet est parti! Suis les Colombiens et récupère-le!
-
-[LOVE4_3]
-~g~Panlantic construction ?
-
-[LOVE4_5]
-~g~Le paquet devrait être à bord de l'avion...
-
-[LOVE4_6]
-~g~Prends l'ascenseur pour accéder au sommet de la tour!
-
-[LOVE5_B]
-Mon ami oriental a besoin d'une escorte pour l'accompagner pendant l'authentification de ma dernière acquisition.
-
-[LOVE5_1]
-~g~Vas-y!
-
-[LOVE5_2]
-~g~Tu vas avoir besoin d'une caisse!
-
-[LOVE5_3]
-~g~Passe devant et contrôle la sortie du tunnel!
-
-[LOVE5_4]
-~r~Protège le camion!
-
-[RM6]
-'L'HOMME A ABATTRE!'
-
-[RM6_A]
-T'as pas été suivi ? Parfait!
-
-[RM6_B]
-Ca y est! Je suis cuit, déjà mort, en quelque sorte!
-
-[RM6_D]
-J'ai un contrat sur ma tête, alors je me casse!
-
-[RM6_E]
-Amène-moi à l'aéroport et t'auras un bon pourboire!
-
-[RM6_666]
-Prends soin de ma Patriot blindée. On se verra à Miami, Ray!
-
-[CAT1]
-'LA RANCON'
-
-[CAT2]
-'L'ECHANGE'
-
-[CAT1_A]
-C'est moi qui ai Maria. Je pense pas que t'aies l'envie que son visage ressemble à un foie de veau trop faisandé, hein ?
-
-[CAT2_F]
-Je me suis cassé un ongle et ma mise en plis est foutue! Tu le crois, ça ? Ca m'avait coûté 50 dollars!
-
-[CAT2_G]
-J'étais complètement flippée, mais, je me suis dit, Maria, t'es une grande fille maintenant.
-
-[CAT2_H]
-Oh on va bien s'amuser, tu sais, parce que ma soeur, elle a dit qu'elle voulait venir s'installer avec nous, elle et ses deux gosses.
-
-[CAT2_I]
-Son mec a recommencé à aller voir ailleurs et...
-
-[CAT1_F]
-Rattrape Catalina avant la fin du temps imparti!
-
-[CAT_MON]
-~g~T'as pas encore assez d'argent. T'as besoin de 500 000$.
-
-[BITCH_D]
-~g~Maria est morte!
-
-[WEATHER]
-METEO AGITEE
-
-[WEATHE2]
-METEO NORMALE
-
-[8001]
-Tu as échoué lamentablement!
-
-[1000]
-TU ES MORT
-
-[1001]
-TU ES MORT
-
-[1002]
-TU ES MORT
-
-[1003]
-TU ES MORT
-
-[1004]
-TU ES MORT
-
-[1005]
-CAPTURE!
-
-[1006]
-CAPTURE!
-
-[1007]
-CAPTURE!
-
-[1008]
-CAPTURE!
-
-[1009]
-CAPTURE!
-
-[GA_4]
-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_7]
-Arme la bombe avec la ~h~touche ~k~~PED_FIREWEAPON~~w~. Elle explose au démarrage.
-
-[GA_8]
-Utilise le détonateur pour armer la bombe.
-
-[GA_9]
-Tu as récupéré ~1~ des 10 voitures spéciales.
-
-[GA_10]
-Beau morceau. Voilà tes ~1~$.
-
-[GA_11]
-On en a déjà des comme ça. Ca nous sert à rien!
-
-[GA_12]
-Bombe armée.
-
-[GA_13]
-Comme un pro! Finis la liste et t'auras un bonus!
-
-[GA_14]
-Toutes les voitures! Parfait! Tiens, voilà un petit quelque chose!
-
-[GA_15]
-J'espère que t'aimes la nouvelle couleur!
-
-[GA_16]
-La peinture est en option!
-
-[GA_19]
-Ce modèle, ça nous intéresse pas!
-
-[GA_20]
-On en a trop des comme ça! Désolé, mec.
-
-[CR_1]
-La grue ne peut pas soulever ce véhicule.
-
-[PU_MONY]
-T'as pas assez d'argent.
-
-[CO_ALL]
-Tu les as toutes eues. Tiens, voilà pour toi...
-
-[PAUSED]
-PAUSE
-
-[HEALTH1]
-Sors de là! T'es en pleine forme!
-
-[HEALTH2]
-Coût des soins
-
-[HEALTH3]
-Je vais vous remettre sur pied!
-
-[HEALTH4]
-Ca fera 250$.
-
-[FEB_STA]
-Statistiques
-
-[FEB_BRI]
-Briefings
-
-[FEB_CON]
-Commandes
-
-[FEB_AUD]
-Son
-
-[FEB_DIS]
-Affichage
-
-[FEB_LAN]
-Langue
-
-[FEP_STA]
-STATISTIQUES
-
-[FEP_BRI]
-BRIEFINGS
-
-[FEP_CON]
-COMMANDES
-
-[FEP_AUD]
-SON
-
-[FEP_DIS]
-AFFICHAGE
-
-[FEP_LAN]
-LANGUE
-
-[FEF_ST1]
-C'est qui, le méchant ?
-
-[FEF_ST2]
-T'as foutu un sacré merdier!
-
-[FEF_BR1]
-T'as perdu le fil de l'histoire ?
-
-[FEF_CO1]
-Tu veux prendre les commandes, c'est ça ?
-
-[FEF_CO2]
-Choisis la configuration qui correspond le mieux à ta façon de jouer.
-
-[FEF_SA1]
-Fais la queue!
-
-[FEF_SA2]
-Sauvegarde et charge tes parties
-
-[FEF_AU1]
-Fais péter la sono!
-
-[FEF_AU2]
-Sélectionne une station de radio et des effets sonores
-
-[FEF_DI1]
-Change de partie!
-
-[FEF_DI2]
-Configure le jeu pour ta télé pourrie!
-
-[FEF_LA1]
-Mais qu'est-ce que tu racontes ?
-
-[FEF_LA2]
-Do tu hablar Deutsh ?
-
-[FEB_PMB]
-Briefings de mission précédents:
-
-[FEC_NA]
-Oups!
-
-[FEC_CWL]
-Montrer les armes à gauche
-
-[FEC_CWR]
-Montrer les armes à droite
-
-[FEC_LOF]
-Regarder devant
-
-[FEC_TAR]
-Cible
-
-[FEC_MOV]
-Déplacement
-
-[FEC_CAM]
-Modes caméra
-
-[FEC_PAU]
-Pause
-
-[FEC_ENV]
-Monter dans un véhicule
-
-[FEC_JUM]
-Sauter
-
-[FEC_ATT]
-Attaquer ou tirer
-
-[FEC_RUN]
-Courir
-
-[FEC_FPC]
-Vue subjective
-
-[FEC_LL]
-Regarder à gauche
-
-[FEC_LB1]
-Regarder
-
-[FEC_LB2]
-derrière
-
-[FEC_LB]
-Regarder derrière
-
-[FEC_LR]
-Regarder à droite
-
-[FEC_HOR]
-Klaxon
-
-[FEC_VES]
-Commandes du véhicule
-
-[FEC_RSC]
-Chang. les stations de radio
-
-[FEC_BRA]
-Frein ou marche arrière
-
-[FEC_HAB]
-Frein à main
-
-[FEC_CAW]
-Arme du véhicule
-
-[FEC_ACC]
-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:
-
-[FEA_ST]
-Stéréo
-
-[FEA_MNO]
-Mono
-
-[FEA_NON]
-Aucune
-
-[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]
-CHATTERBOX 109
-
-[FED_DBG]
-Menu Debug
-
-[FEM_MCM]
-Menu memory card
-
-[FEM_RMC]
-Enregistrer memory card 1
-
-[FEM_TFM]
-Test memory card 1 formatée
-
-[FEM_TUM]
-Test memory card 1 non formatée
-
-[FEM_CRD]
-Créer rép. racine
-
-[FEM_CLI]
-Créer et charger des icones
-
-[FEM_FFF]
-Remplir le premier fichier de conneries
-
-[FEM_SOG]
-Sauvegarder uniquement la partie
-
-[FEM_CES]
-Vérifier chaque sauvegarde de 0kb4
-
-[FEM_STG]
-Sauvegarder la partie
-
-[FEM_STS]
-Sauvegarder la partie sous le nom GTA3
-
-[FEM_CPD]
-Créer un répertoire protégé contre les copies
-
-[FEM_MC2]
-Menu memory card 2
-
-[FEM_TS]
-Test de sauvegarde :
-
-[FEM_TL]
-Test de chargement :
-
-[FEM_TD]
-Test de suppression :
-
-[PL_STAT]
-Statistiques du joueur
-
-[PE_WAST]
-Victimes
-
-[PE_WSOT]
-Personnes tuées par d'autres
-
-[CAR_EXP]
-Véhicules détruits
-
-[TM_BUST]
-Nb de fois capturé
-
-[M_WASTE]
-Hommes tués
-
-[F_WASTE]
-Femmes tuées
-
-[PIG_WST]
-Flics tués
-
-[GNG_WST]
-Gangsters tués
-
-[MED_WST]
-Toubibs tués
-
-[FIRE_WS]
-Pompiers tués
-
-[DED_CRI]
-Criminels tués
-
-[DED_DED]
-Parasites tués
-
-[DED_HOK]
-Putes tuées
-
-[HEL_DST]
-Hélicoptères détruits
-
-[PER_COM]
-Pourcentage accompli
-
-[KGS_EXP]
-Kilos d'explosif utilisés
-
-[ACCURA]
-Précision
-
-[ELBURRO]
-Meilleur temps en sec.
-
-[CAR_CRU]
-Véhicules défoncés
-
-[HED_EX]
-Têtes explosées
-
-[TM_DED]
-Visites à l'hôpital
-
-[DAYSPS]
-Jours de jeu
-
-[MMRAIN]
-Mm de pluie tombés
-
-[MXCARD]
-Distance max. de sauts dangereux (pieds)
-
-[MXCARJ]
-Hauteur max de sauts dangereux (pieds)
-
-[MXCARDM]
-Distance max. de sauts dangereux (m)
-
-[MXCARJM]
-Hauteur max de sauts dangereux (m)
-
-[MXFLIP]
-Saltos max. de sauts dangereux
-
-[MXJUMP]
-Rotation max. de sauts dangereux
-
-[BSTSTU]
-Meilleures cascades jusqu'à maintenant:
-
-[INSTUN]
-Cascade dangereuse
-
-[PRINST]
-Cascade dangereuse parfaite
-
-[DBINST]
-Double cascade dangereuse
-
-[DBPINS]
-Double cascade dangereuse parfaite
-
-[TRINST]
-Triple cascade dangereuse
-
-[PRTRST]
-Triple cascade dangereuse parfaite
-
-[QUINST]
-Quadruple cascade dangereuse
-
-[PQUINS]
-Quadruple cascade dangereuse parfaite
-
-[NOSTUC]
-Aucune cascade dangereuse accomplie
-
-[NOUNIF]
-Sauts uniques accomplis
-
-[NOUNGM]
-Total sauts uniques
-
-[NMISON]
-Missions commencées
-
-[NMMISP]
-Missions réussies
-
-[PASDRO]
-Passagers perdus
-
-[MONTAX]
-Total courses en taxi
-
-[DAYPLC]
-Dépenses quotidiennes de police
-
-[CRIMRA]
-Taux de criminalité
-
-[GMSTOR]
-Magasin du jeu
-
-[PREBRF]
-Briefings précédents
-
-[CNTLS]
-Commandes
-
-[MUSMEN]
-Musique/Effets
-
-[GAMSET]
-Paramètres du jeu
-
-[LANGUA]
-Langue
-
-[DSPLAY]
-Affichage
-
-[DEBUGM]
-Menu Debug
-
-[QUITOP]
-Options de fin
-
-[CONTRL]
-Configuration des manettes
-
-[SET1EN]
-Config 1. activée
-
-[SET1]
-Config 1.
-
-[SET2EN]
-Config 2. activée
-
-[SET2]
-Config 2.
-
-[SET3EN]
-Config 3. activée
-
-[SET3]
-Config 3.
-
-[SET4EN]
-Config 4. activée
-
-[SET4]
-Config 4.
-
-[GOBACK]
-Retour
-
-[SOUND]
-AUDIO
-
-[MUSVOL]
-Volume de la musique
-
-[SFXVOL]
-Volume des effets
-
-[SCROPT]
-OPTIONS D'AFFICHAGE
-
-[CTRSCR]
-Centrer l'écran
-
-[SCRFOR]
-Format d'écran
-
-[GMSVLQ]
-SAUVEGARDER-CHARGER-QUITTER
-
-[GMREST]
-Recommencer
-
-[NOGMSV]
-Tu ne peux sauvegarder que depuis ta planque.
-
-[DLFILE]
-Supprimer les fichiers de GTA3
-
-[CHFILE]
-CHOISIR LE FICHIER A CHARGER
-
-[CHFIDL]
-CHOISIR LE FICHIER A SUPPRIMER
-
-[SVCONF]
-CONFIRMER SAUVEGARDE
-
-[SVFNAM]
-Le nom du fichier de sauvegarde est
-
-[SAVEDN]
-Erreur. Echec de la sauvegarde.
-
-[LANGSL]
-CHOIX DE LA LANGUE
-
-[ENGLIS]
-Anglais
-
-[GERMAN]
-Allemand
-
-[ITALIA]
-Italien
-
-[FRENCH]
-Français
-
-[SPAIN]
-Espagnol
-
-[BGWHON]
-Big White Debug Light Switched On
-
-[BGWOFF]
-Big White Debug Light Switched Off
-
-[PRVMEN]
-Briefings de mission précédents
-
-[DOSVGM]
-Tu veux sauvegarder la partie ?
-
-[FORMEN]
-Menu formatage
-
-[MEMTST]
-Ecran de test memory card
-
-[REGCAR]
-Enregistrer memory card 1
-
-[TEFONE]
-Test memory card 1 formatée
-
-[TEUFON]
-Test memory card 1 non formatée
-
-[CRROOT]
-Créer rép. racine
-
-[CRLDIC]
-Créer et charger des icones
-
-[FLFSGF]
-Remplir le premier fichier de conneries
-
-[PUSAVE]
-Sauvegarder uniquement la partie
-
-[CHEVOK]
-Vérifier chaque sauvegarde de 0kb4
-
-[SVGMON]
-Sauvegarder
-
-[CNTSAV]
-Sauvegarde impossible. Tu es en mission.
-
-[CNCSAV]
-Sauvegarde impossible. Tu es en voiture.
-
-[CRMGSV]
-Créer un répertoire protégé contre les copies
-
-[MGSVCN]
-Répertoire créé
-
-[MGSVNC]
-Répertoire non créé
-
-[YES]
-Oui
-
-[NO]
-Non
-
-[X]
-x
-
-[LAST]
-Dernier message.
-
-[FEDS_XB]
-Choisir
-
-[FEDS_ST]
-touche START - REPRENDRE
-
-[FEST_OO]
-sur
-
-[FEC_TUC]
-Commandes tourelle
-
-[FEC_SM3]
-Déclencheur mission spéciale (touche R3)
-
-[FEC_RS3]
-Chang. les stations de radio (touche L3)
-
-[FEC_HO3]
-Klaxonner (touche L3)
-
-[DIAB1]
-'TOURISME'
-
-[DIAB2]
-'DE LA GLACE, T'ES REFROIDI'
-
-[DIAB3]
-'JUGÉ PAR LE FEU'
-
-[DIAB4]
-'STAR DU X'
-
-[DIAB1_A]
-El Burro veut te donner une chance. Va à la cabine téléphonique de Hauteurs de Hepburn si tu veux plus d'infos.
-
-[DIAB1_C]
-Tu t'es bien défendu. Retourne à la cabine et El Burro aura peut-être du boulot pour toi.
-
-[DIAB1_1]
-~g~3..2..1..GO GO GO!
-
-[DIAB1_4]
-~g~Trouve une voiture rapide et va sur la grille de départ.
-
-[DIAB1_3]
-~r~Tu ne pourrais même pas gagner à une tombol, blaireau!
-
-[DIAB1_2]
-~g~Félicitations tu as gagné, avec un temps incroyable de ~1~ secondes
-
-[FIRST]
-~g~1er
-
-[SECOND]
-~g~2e
-
-[THIRD]
-~g~3e
-
-[FOURTH]
-~g~4e
-
-[DIAB2_1]
-~g~Va prendre la malette à Harwood.
-
-[DIAB2_2]
-~g~Trouve une camionnette de vendeur de glaces.
-
-[DIAB2_3]
-~g~Gare la camionette à Atlantic Quays.
-
-[DIAB2_4]
-~g~Appuie sur la ~w~touche ~k~~VEHICLE_HORN~ ~g~pour actionner la clochette.
-
-[DIAB2_6]
-~g~Appuie sur la ~w~touche ~k~~VEHICLE_HORN~ ~g~pour actionner la clochette.
-
-[DIAB2_7]
-~g~Appuie sur la ~w~touche ~k~~VEHICLE_HORN~ ~g~pour actionner la clochette.
-
-[DIAB2_5]
-~g~Sors de la camionette et sers-toi de la télécommande pour faire exploser la camionnette.
-
-[YD1]
-'LES FOUS DU VOLANT'
-
-[YD2]
-'TOUS A L'UZI'
-
-[YD3]
-'LA VALSE DES VOITURES'
-
-[YD4]
-'A NOUS LE ROYAUME'
-
-[YD_P]
-King Courtney voudrait te dire un mot. Va à la cabine d'Aspatria!
-
-[YD1_A]
-~w~Voila King Courtney.
-
-[YD1_A1]
-~w~Mon gang de Yardies aurait besoin d'un bon chauffeur et t'as une réputation de rapide.
-
-[YD1_B]
-~w~Va à la décharge en face du stade et attends les autres joueurs.
-
-[YD1_C]
-~w~J'ai des gars qui surveillent tous les points de passage de Staunton.
-
-[YD1_D]
-~w~Le premier pilote qui franchit un point de passage gagne 1000$ et ainsi de suite.
-
-[YD1_D1]
-~w~Si tu passes plus de checkpoints que tous les autres pilotes, j'aurais peut-être du boulot pour toi.
-
-[YD1_E]
-~g~Prépare-toi à partir!
-
-[YD1_F]
-~g~T'as foncé dès le départ. J'adore ton style!
-
-[YD1_G]
-~r~C'est une course de bagnoles. T'as besoin d'une bagnole, patate!
-
-[YD1GO]
-~g~GO!
-
-[YD1_1]
-~r~1
-
-[YD1_2]
-~r~2
-
-[YD1_3]
-~r~3
-
-[YD1_BON]
-1000$!
-
-[Y1_1ST]
-~g~T'es arrivé premier en franchissant ~1~ points de passage!
-
-[Y1_2ND]
-~y~2e avec ~1~ points de passage gagnants. ~y~Pas mal, mais t'es pas le meilleur.
-
-[Y1_3RD]
-~r~3e avec ~1~ points de passage gagnants. ~r~Je croyais que t'étais bon!
-
-[Y1_LAST]
-~r~Tu es le dernier! ~r~Tu m'as fait perdre mon temps, imbécile!
-
-[Y1_J1ST]
-~y~1er ex aequo avec ~1~ points de passage gagnants. ~y~C'est bien, mais tu dois être le meilleur pour courir sur Queen lizzy!
-
-[Y1_J2ND]
-~r~2e ex aequo avec ~1~ points de passage gagnants. Tu conduis comme un vieux singe dingo!
-
-[Y1JLAST]
-~r~Dernier ex æquo! Tu parles comme un pilote, mais tu pilotes comme un beau-parleur!
-
-[Y1_TEST]
-VOITURE A L'EAU!
-
-[YD2_A]
-~w~J'ai besoin de voir si tu peux faire mon sale boulot.
-
-[YD2_A1]
-~w~Faut voir si on peut te faire confiance.
-
-[YD2_B]
-~w~Deux de mes gars seront là-bas dans peu de temps pour te faire faire un tour,
-
-[YD2_B1]
-~w~histoire de voir si tu vaux quelque chose...
-
-[YD2_C]
-~w~On va aller faire un tour à Hauteurs de Hepburn, flingue-nous quelques Diablos qui font des misères à Queen Lizzy.
-
-[YD2_CC]
-~w~Tiens, t'auras besoin d'un calibre.
-
-[YD2_D]
-~w~Tu conduis et tu tires. On s'arrangera pour que tu te fasses pas descendre.
-
-[YD2_E]
-~w~Allons-y!!
-
-[YD2_F]
-~r~Il nous a échappé, colle-lui au cul!!!
-
-[YD2_G1]
-~w~Hauteurs de Hepburn... On va se farcir quelques Diablos de malheur...
-
-[YD2_G2]
-~w~Mais n'oublie pas, ~r~tu restes dans la bagnole!!
-
-[YD2_H]
-~w~OK, ramène-nous sur le territoire des Yardies! Allez, FONCE!
-
-[YD2_L]
-~w~Tu t'es bien débrouillé, le bourreau.
-
-[YD2_M]
-~r~Il a bousillé ma bagnole! Descends-le!
-
-[YD2_N]
-~w~Ramène ta fraise dans cette bagnole!
-
-[YD3_A]
-Je veux que tu piques quelques bagnoles de gangs
-
-[YD3_A1]
-comme ça, on pourra faire un carton chez nos ennemis.
-
-[YD3_B]
-Je veux une Sentinelle de la Mafia,
-
-[YD3_B1]
-une Stinger des Yakuzas et une
-
-[YD3_B2]
-Stallion des Diablos comme ça, on pourra frapper dans tous les gangs de Liberty.
-
-[YD3_C]
-Tu les amènes au garage de Newport et souviens-toi,
-
-[YD3_C1]
-elles ne nous sont utiles qu'en bon état!
-
-[YD3_D]
-Spare text label
-
-[YD3_E]
-~r~Tu as déjà piqué une voiture des Diablos!
-
-[YD3_F]
-~r~Tu as déjà piqué une voiture de la Mafia!
-
-[YD3_G]
-~r~Tu as déjà piqué une voiture des Yazukas!
-
-[YD3_H]
-~g~Bagnole des Diablos chourrée!
-
-[YD3_I]
-~g~Bagnole de la Mafia chourrée!
-
-[YD3_J]
-~g~Bagnole des Yasukas chourrée!
-
-[YD3_K]
-~r~La bagnole est presque une épave! Fais-la réparer!
-
-[YD3_L]
-Emmène-la au garage!
-
-[YD3_M]
-~r~T'as fait un tonneau avec! Va en chercher une autre!
-
-[YD4_A]
-Ecoute-moi bien!
-
-[YD4_A1]
-Tu vas aller à Bedford Point.
-
-[YD4_A2]
-Il y a de la came dont j'ai besoin rapidos dans une vieille bagnole!
-
-[YD4_B]
-LETTRE : je sais que tu es très occupé. Eh bien moi aussi, je suis très occupée.
-
-[YD4_C]
-Je pense qu'il est temps que tu te rendes compte de ce que c'est, de la SPANK! Catalina, Bisous.
-
-[YD4_D]
-PS : CREVE SALE CHIEN, CREVE!
-
-[YD4_1]
-Des drogués défoncés !
-
-[YD4_2]
-Détruis les camionnettes de SPANK !!
-
-[HM_1]
-'DESCENTE A L'UZI'
-
-[HM_2]
-'BUGGY FAIT DES RAVAGES'
-
-[HM_3]
-'VOITURE PIEGEE'
-
-[HM_5]
-'LA RIXE'
-
-[HOOD1_A]
-Va à la cabine dans Wichita Gardens et on parlera affaires.
-
-[HM1_A]
-Salut! C'est D-Ice des Red Jacks!
-
-[HM1_C]
-Ces jeunes cons, ils viennent dans la rue et ils ont qu'une idée en tête, la SPANK et les flingues.
-
-[HM1_3]
-~g~Les 'Nines' font leur business dans Wichita Gardens.
-
-[HM2_3]
-Si tu touches les roues d'une bagnole, le buggy télécommandé explosera!
-
-[HM2_4]
-Si le buggy télécommandé est hors de portée, il explosera!
-
-[HM2_5]
-~r~Hors de portée!
-
-[HM3_1]
-~g~Va au garage mais fais gaffe, si tu brusques trop la bagnole, elle va exploser!
-
-[HM3_2]
-~g~Ramène la voiture en parfait état, pas de grabuge!
-
-[HM3_3]
-~g~Fais réparer la voiture!
-
-[HM4_D]
-~g~Trouve une caisse!
-
-[HM4_E]
-TEXT NO LONGER REQUIRED
-
-[HM4_1]
-~g~Va à l'endroit où la cargaison est tombée, tu dois ramasser 30 lingots.
-
-[HM4_2]
-~g~Souviens-toi que quand la bagnole est trop chargée, elle se traîne alors quand c'est le cas, fonce au garage pour livrer la marchandise.
-
-[HM5_3]
-~r~On t'a dit de te servir d'une batte de baseball et c'est tout!
-
-[HM5_4]
-~r~Ton contact est mort!
-
-[MEA1]
-'L'ESCROC'
-
-[MEA2]
-'LES BRAQUEURS'
-
-[MEA3]
-'LA FEMME'
-
-[MEA4]
-'SON AMANT'
-
-[MEAT1_A]
-Un ami m'a dit que tu pouvais régler certains de mes problèmes. Si tu penses que tu peux m'aider, va à la cabine de Trenton.
-
-[MEA1_B3]
-~g~Va voir le banquier.
-
-[MEA1_B6]
-~g~Amène la voiture à la casse pour se débarrasser des preuves. Une fois sur place, sors de la voiture et laisse faire la grue!
-
-[MEA1_1]
-~r~Le banquier est mort!
-
-[MEA1_2]
-~r~On t'a dit d'écrabouiller la voiture!
-
-[MEA1_3]
-~g~Sors de la bagnole!
-
-[MEA1_4]
-~r~T'as laissé le banquier derrière toi!
-
-[MEA2_B3]
-~g~Va voir les braqueurs.
-
-[MEA2_B4]
-~g~Amène-les à l'usine de pâtée pour chiens.
-
-[MEA2_B6]
-~g~Fais repeindre la voiture, comme ça y'aura pas de preuve.
-
-[MEA2_1]
-~r~On t'a dit d'écrabouiller la voiture!
-
-[MEA2_2]
-~r~Un braqueur est mort!
-
-[MEA2_4]
-~r~T'as laissé un des braqueurs derrière toi!
-
-[MEA3_B3]
-~g~Va chercher Mme Chonks.
-
-[MEA3_B6]
-~g~Prends la voiture et fous-la à l'eau, comme ça y'aura pas de preuve.
-
-[MEA3_1]
-~r~La femme est morte!
-
-[MEA3_2]
-~r~Tu étais censé balancer la bagnole à la mer!
-
-[MEA3_3]
-~r~T'as laissé sa femme derrière!
-
-[MEA4_B3]
-~g~Va chercher l'amant de sa femme.
-
-[MEA4_B6]
-C'est beaucoup trop tard, Marty. Je t'ai donné une chance, mais maintenant je reprends tout en charge!
-
-[MEA4_1]
-~r~Carlos est mort!
-
-[MEA4_3]
-~r~T'as laissé Carlos l'usurier derrière!
-
-[LOOK_A]
-Appuie et maintiens enfoncée la ~h~touche ~k~~VEHICLE_LOOKLEFT~ ~w~ou ~h~touche ~k~~VEHICLE_LOOKRIGHT~ ~w~ pour regarder ~h~à gauche~w~ ou ~h~à droite~w~ quand tu es en voiture. Appuie sur ces deux touches pour regarder ~h~derrière~w~.
-
-[LOVE6_1]
-~g~Maintenant, attire les flics loin de l'entrepôt!
-
-[LOVE6_2]
-~r~T'as pas réussi à attirer les flics assez loin!
-
-[RM4_3]
-~r~L'associé de Ray s'est échappé!
-
-[RM6_C]
-La CIA semble s'intéresser de près à la SPANK.
-
-[RM6_C1]
-Et elle n'aime pas qu'on cherche des noises au Cartel.
-
-[C_PASS]
-MENACE ENRAYEE!
-
-[CTUTOR]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver les missions de caisse.
-
-[CTUTOR2]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver les missions de caisse.
-
-[COPCART]
-~g~Tu as ~1~ secondes pour retourner à une voiture de police avant que la mission ne s'achève.
-
-[C_FAIL]
-Mission de caisse terminée!
-
-[C_CANC]
-~r~Mission de caisse annulée!
-
-[C_ESCP]
-~r~Le suspect s'est échappé!
-
-[C_TIME]
-~r~Ta carrière de flic est terminée!
-
-[C_VIGIL]
-BONUS POLICE!
-
-[A_FAIL2]
-~r~Ton manque de précipitation a été fatal pour le patient!
-
-[A_FAIL3]
-~r~Le patient est mort!
-
-[A_PASS]
-Sauvé!
-
-[F_FAIL2]
-~r~T'arrives trop tard!
-
-[A_COMP2]
-T'en as jamais assez ?
-
-[RM2_M]
-Si tu as besoin d'artillerie, passe prendre ce dont t'as besoin dans les armoires.
-
-[HEAL_A]
-Ton niveau de ~h~santé~w~ s'affiche en orange en haut à droite de l'écran.
-
-[YD1_CNT]
-~1~ sur 15!
-
-[FM1_9]
-~g~C'est la fête un peu plus haut. Dépose Maria devant.
-
-[FM1_Y]
-~w~Ça faisait longtemps que je m'étais pas amusée comme ça et tu m'as traitée vraiment bien ... avec respect et tout.
-
-[FM1_AA]
-~w~Oh, faut que j'y aille, à bientôt j'espère.
-
-[NOCONTE]
-Reconnecte la manette analogique (DUALSHOCK#) ou manette analogique (DUALSHOCK#2) au port de manette 1 pour continuer.
-
-[WRCONT]
-La manette connectée au port de manette 1 n'est pas une manette compatible. GTA3 nécessite une manette analogique (DUALSHOCK#) ou manette analogique (DUALSHOCK#2).
-
-[WRCONTE]
-La manette connectée au port de manette 1 n'est pas une manette compatible. GTA3 nécessite une manette analogique (DUALSHOCK#) ou manette analogique (DUALSHOCK#2).
-
-[WRONGCD]
-Disque invalide. Veuillez insérer le bon disque.
-
-[NOCD]
-Le compartiment à disque est vide. Veuillez insérer le disque.
-
-[OPENCD]
-Le compartiment à disque est ouvert. Veuillez refermer le compartiment à disque.
-
-[CDERROR]
-Erreur de lecture du DVD de GTA3
-
-[RESTART]
-Démarrage d'une nouvelle partie
-
-[GA_3]
-Plus de cadeaux. 1000$ pour repeindre!
-
-[GA_1]
-Oula! Je ne touche à rien d'aussi chaud, moi!
-
-[GA_1A]
-Reviens quand tu seras moins occupé...
-
-[S_PROM2]
-Le garage d'à côté peut garder une voiture quand tu sauvegardes la partie.
-
-[STOCK]
-Stock épuisé
-
-[FM1_O]
-~w~Je pense qu'il est à la gare sur le bord de mer de Chinatown.
-
-[EBAL_B]
-Tiens c'est là! Allez, on va se garer et on va trouver de nouvelles fringues!
-
-[EBAL_G]
-Ça, c'est la boîte de Luigi. Viens, on va rentrer par la porte de derrière.
-
-[AM4_3]
-T'es le nouveau coursier d'Azuka!
-
-[AM4_4]
-T'as le fric ? Le compte y est ?
-
-[AM4_5]
-Je sais ce que tu penses, encore un ripoux.
-
-[AM4_6]
-Ben, le monde est pourri.
-
-[AM4_7]
-Parce que j'ai perdu quelques équipiers, ces enfoirés de poulets commencent à renifler partout.
-
-[AM4_8]
-J'imagine qu'ils peuvent me sentir.
-
-[AM4_9]
-Et oui, cette ville est un vrai dépotoir.
-
-[AM4_10]
-Mais je vais avoir besoin d'aide.
-
-[AM4_11]
-Si ça t'intéresse, tu sais où me trouver.
-
-[CAM_A]
-Appuie sur la ~h~touche ~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~ pour changer les modes ~h~caméra ~w~quand tu es à pied ou en voiture.
-
-[CAM_B]
-~w~Appuie sur la ~h~touche directionnelle haut~w~ ou ~h~bas~w~ pour changer les modes ~h~caméra~w~ quand tu es à pied ou en voiture.
-
-[KM2_1]
-~g~Répare la voiture, elle doit être comme neuve.
-
-[LM3_6]
-Joey...
-
-[LM3_6A]
-Est-ce que je vais jouer avec ton gros canon ?
-
-[LM3_9A]
-Y'a peut-être du travail pour toi.
-
-[LM3_9B]
-D'accord ?
-
-[AWAY2]
-~r~Ils se sont enfuis.
-
-[AWAY]
-~r~Il s'est barré d'ici!
-
-[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_7B]
-Pour armer la bombe, appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~. Elle explosera au démarrage.
-
-[BAT1]
-~g~Ramasse la batte!
-
-[EBAL_O]
-Si t'es réglo, j'ai du travail pour toi. Et maintenant, casse-toi!
-
-[HELP9_B]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~tirer~w~ avec le fusil à lunettes.
-
-[HELP9_C]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour ~h~tirer~w~ avec le fusil à lunettes.
-
-[JM6_8]
-~r~T'as semé tous les braqueurs!
-
-[COLT_IN]
-Le pistolet est disponible au Ma-Gnum.
-
-[TAXI2]
-~r~Tu n'as plus le temps!
-
-[TAXI3]
-~r~Ton client est parti terrorisé!
-
-[TAXI7]
-~r~Ta voiture est endommagée, fais-la réparer.
-
-[TAXI4]
-La course est finie!
-
-[TAXI5]
-BONUS DE VITESSE!
-
-[TAXI6]
-La mission Taxi est finie.
-
-[FRANGO]
-~g~Salvatore veux que tu aides d'abord Toni à régler son affaire avec la Triade!
-
-[PAGEB12]
-Pot-de-vin des flics livré à la planque
-
-[PAGEB13]
-Santé livrée à la planque
-
-[PAGEB14]
-Adrénaline livrée à la planque
-
-[KM1_4]
-~g~T'as besoin d'une bagnole de flic pour ce job!
-
-[CAT1_B]
-Apporte 500 000$ à la Villa de Cedar Grove.
-
-[JM2_C]
-Il a un stand de nouilles dans Chinatown.
-
-[RM6_1]
-Voilà la clé d'un coffre.
-
-[RM6_2]
-T'y trouveras du cash et des provisions. J'avais mis ça de coté au cas où les choses tourneraient mal.
-
-[RM6_3]
-A plus.
-
-[FE_INIP]
-Initialisation et chargement du menu pause... Veuillez patienter.
-
-[FESZ_CA]
-Annuler
-
-[FESZ_QU]
-Quitter
-
-[FESZ_L1]
-Partie sauvegardée avec succès!
-
-[FESZ_L2]
-Le nom du fichier sauvegardé est :
-
-[FESZ_OK]
-OK
-
-[FES_NGA]
-Nouvelle partie
-
-[FES_CAN]
-Annuler
-
-[FESZ_QL]
-Toutes les étapes non sauvegardées de cette partie seront perdues. Charger la partie?
-
-[FESZ_QD]
-Effacer cette sauvegarde?
-
-[FESZ_QO]
-Ecraser cette sauvegarde?
-
-[FESZ_QR]
-Veux-tu vraiment commencer une autre partie? Toutes vos données depuis la dernière partie sauvegardée seront perdues. Continuer?
-
-[FESZ_QS]
-PASSEZ EN SAUVEGARDE?
-
-[SLONFP]
-Port 1 Fichier Protégé.
-
-[T4X4_1]
-'TERRAIN DE JEU DU PATRIOT'
-
-[T4X4_2]
-'UN TOUR DANS LE PARC'
-
-[T4X4_3]
-'ADHÉRENCE!'
-
-[MM_1]
-'GAZ À TOUS LES ÉTAGES'
-
-[T4X4_1A]
-~g~T'as ~y~5 minutes~g~ pour franchir ~y~15~g~ points de passage.
-
-[T4X4_1B]
-~1~ sur 15!
-
-[T4X4_1C]
-~g~Chaque point de passage te rapportera ~y~20 secondes~g~.
-
-[T4X4_2A]
-~g~Tu as ~y~2 minutes~g~ pour franchir ~y~12~g~ points de passage! ~g~Tu peux les franchir dans ~y~n'importe quel ordre.
-
-[T4X4_2B]
-~1~ sur 12!
-
-[T4X4_2C]
-~y~ Passe le premier point de passage pour déclencher le chrono. ~y~ Chaque point de passage te rapportera ~y~10 secondes~g~.
-
-[T4X4_3A]
-~g~Tu as ~y~5 minutes~g~ pour franchir ~y~20~g~ points de passage. ~g~Tu peux les franchir dans ~y~n'importe quel ordre.
-
-[T4X4_3B]
-~y~Franchis~g~ le premier point de passage pour déclencher le chrono. ~g~Chaque point de passage te rapportera ~y~15 secondes~g~.
-
-[T4X4_3C]
-~1~ sur 20!
-
-[T4X4_F]
-~r~Tu t'es barré! Trop dur pour toi ?!
-
-[MM_1_A]
-~g~Tu as ~y~2 minutes~g~ pour franchir les ~y~20 points de passage~g~ dans le parking à plusieurs étages! ~g~Tu peux les franchir dans n'importe quel ordre.
-
-[MM_1_B]
-~1~ sur 20!
-
-[MM_1_C]
-~g~Ca fait 20 secondes, plus ~y~5 secondes~g~ pour chaque point de passage. ~g~Le chrono commence ~y~immédiatement.
-
-[FM2_14]
-~r~Tu t'es trop approché et Bill t'a vu!
-
-[FM2_15]
-~g~Ne t'approche pas trop ou Bill va se douter de quelque chose!
-
-[UPSIDE]
-~r~Tu t'es retourné!
-
-[FM2_16]
-BALANÇOMETRE :
-
-[LM3_11]
-~g~Misty ne montera pas dans un bus, trouve un autre véhicule!
-
-[LANDSTK]
-Landstalker
-
-[IDAHO]
-Idaho
-
-[STINGER]
-Stinger
-
-[LINERUN]
-Linerunner
-
-[PEREN]
-Perennial
-
-[SENTINL]
-Sentinelle
-
-[PATRIOT]
-Patriot
-
-[FIRETRK]
-Camion de pompier
-
-[TRASHM]
-Trashmaster
-
-[STRETCH]
-Stretch
-
-[MANANA]
-Manana
-
-[INFERNS]
-Infernus
-
-[BLISTA]
-Blista
-
-[PONY]
-Pony
-
-[MULE]
-Mule
-
-[CHEETAH]
-Cheetah
-
-[AMBULAN]
-Ambulance
-
-[FBICAR]
-F.B.I.
-
-[MOONBM]
-Moonbeam
-
-[ESPERAN]
-Esperanto
-
-[TAXI]
-Taxi
-
-[KURUMA]
-Kuruma
-
-[BOBCAT]
-Bobcat
-
-[WHOOPEE]
-M. Whoopee
-
-[BFINJC]
-BF Injection
-
-[POLICAR]
-Police
-
-[ENFORCR]
-Enforcer
-
-[SECURI]
-Sécuricar
-
-[BANSHEE]
-Banshee
-
-[PREDATR]
-Predator
-
-[BUS]
-Bus
-
-[RHINO]
-Rhino
-
-[BARRCKS]
-Barracks OL
-
-[TRAIN]
-Train
-
-[HELI]
-Hélicoptère
-
-[DODO]
-Dodo
-
-[COACH]
-Coach
-
-[CABBIE]
-Cabbie
-
-[STALION]
-Stallion
-
-[RUMPO]
-Rumpo
-
-[RCBANDT]
-RC Bandit
-
-[BELLYUP]
-Triad
-
-[MRWONGS]
-M. Wongs
-
-[MAFIACR]
-Mafia
-
-[YARDICR]
-Yardie
-
-[YAKUZCR]
-Yakuza
-
-[DIABLCR]
-Diablo
-
-[COLOMCR]
-Cartel
-
-[HOODSCR]
-Hoods
-
-[AEROPL]
-Avion
-
-[SPEEDER]
-Speeder
-
-[REEFER]
-Reefer
-
-[PANLANT]
-Panlantic
-
-[FLATBED]
-Flatbed
-
-[YANKEE]
-Yankee
-
-[BORGNIN]
-Borgnine
-
-[TOYZ]
-TOYZ
-
-[FEST_DF]
-Distance parcourue à pied (miles)
-
-[FEST_DC]
-Distance parcourue en voiture (miles)
-
-[FESTDFM]
-Distance parcourue à pied (m)
-
-[FESTDCM]
-Distance parcourue en voiture (m)
-
-[FEST_R1]
-Terrain de jeu du Patriot en secondes
-
-[FEST_R2]
-Un tour dans le parc en secondes
-
-[FEST_R3]
-Adhérence en secondes
-
-[FEST_RM]
-Gaz à tous les étages en secondes
-
-[FEST_LS]
-Nbre de personnes sauvées dans l'ambulance
-
-[FEST_CC]
-Criminels tués dans la mission de police
-
-[FEST_FE]
-Nombre total de feux éteints
-
-[FEST_LF]
-Vol le plus long en Dodo
-
-[FEST_BD]
-Meilleur temps pour désamorcer la bombe
-
-[FEST_RP]
-Rodéos réussis
-
-[FEST_MP]
-Missions réussies
-
-[FEST_BB]
-Les fous du volants:
-
-[FEST_H0]
-La plupart des points de passage
-
-[FEST_GC]
-Nombre total de voitures de gang:
-
-[FEST_H1]
-Destruction de Diablo
-
-[FEST_H2]
-Massacre de la Mafia
-
-[FEST_H3]
-Le désastre du casino
-
-[FEST_H4]
-Le destructeur de Rumpo
-
-[USJI1]
-TEXT NO LONGER REQUIRED
-
-[USJI2]
-TEXT NO LONGER REQUIRED
-
-[USJI3]
-TEXT NO LONGER REQUIRED
-
-[USJ]
-BONUS POUR CASCADE UNIQUE!
-
-[SPRAY]
-Amène ton véhicule à l'atelier de peinture pour annuler ton ~h~indice de recherche~w~, ~h~répare ~w~et ~h~repeins ~w~ton véhicule. Coût -~h~ 1000$.
-
-[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_8D]
-Appuie sur la ~h~touche ~k~~PED_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!
-
-[RATNG1]
-Pickpocket
-
-[RATNG2]
-Rascal
-
-[RATNG3]
-Voyou
-
-[RATNG4]
-Prostituée
-
-[RATNG5]
-Idiot
-
-[RATNG6]
-Pilote
-
-[RATNG7]
-Gros Bras
-
-[RATNG8]
-Réparateur
-
-[RATNG9]
-Associé
-
-[RATNG10]
-Nettoyeur
-
-[RATNG11]
-Assassin
-
-[RATNG12]
-Bras droit
-
-[RATNG13]
-Exécutant
-
-[RATNG14]
-Capo
-
-[RATNG15]
-Patron
-
-[1010]
-~r~Ta bagnole est sur le toit
-
-[1011]
-~r~Ta bagnole est sur le toit
-
-[1012]
-~r~Ta bagnole est sur le toit
-
-[1013]
-~r~Ta bagnole est sur le toit
-
-[1014]
-~r~Ta bagnole est sur le toit
-
-[JM4_10]
-OK, Petit. Emmène-moi d'abord à la laverie de Chinatown, j'ai une affaire à régler.
-
-[JM4_11]
-Cette petite laveuse ne paie pas pour sa protection.
-
-[JM4_12]
-Et fais gaffe à la bagnole, Joey vient juste de la faire réparer.
-
-[JM4_13]
-Alors pas de conneries, ok ?
-
-[KM4_11]
-~g~Ramène la monnaie au casino!
-
-[FEF_BR2]
-Retrouve-les en lisant les précédents briefings de missions.
-
-[TRAIN_1]
-Station Kurowski
-
-[TRAIN_2]
-Station Rothwell
-
-[TRAIN_3]
-Station Baillie
-
-[SUBWAY1]
-Station Portland
-
-[SUBWAY2]
-Station Rockford
-
-[SUBWAY3]
-Station Staunton South
-
-[SUBWAY4]
-Terminal Shoreside
-
-[MEA4_2]
-~r~Marty Chonks est mort!
-
-[SPRAY1]
-Amène ton véhicule à l'atelier de peinture pour annuler ton ~h~indice de recherche~w~, ~h~répare ~w~et ~h~repeins ~w~ton véhicule. Coût -~h~ 1000$. Pour cette fois, c'est gratos.
-
-[JM4_A]
-Ouais, je sais Tony, je l'ai défoncée en douceur. Elle miaule, tu vois ce que je veux dire ?
-
-[JM4_5]
-Reviens plus tard et on leur donnera de la lessive à faire, leurs propres fringues avec leur sang dessus!
-
-[AMMU_A]
-Luigi m'a dit que t'as besoin d'un calibre...
-
-[AMMU_B]
-Joey m'a dit de t'équiper...
-
-[AMMU_C]
-Alors tu vas aller derrière le magasin. Je t'ai laissé un 9mm dans le jardin.
-
-[AMMU_D]
-J'ai tout ce qu'il faut en matière de sécurité.
-
-[AMMU_E]
-Tu veux un permis aussi ?
-
-[AMMU_F]
-J'ai pas besoin de tes papiers d'identité. Je pense qu'on peut te faire confiance.
-
-[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_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.
-
-[RECORD]
-~g~NOUVEAU RECORD!
-
-[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.
-
-[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.
-
-[RC_1]
-Tu as 2 minutes pour faire péter autant de voitures de Diablo que tu peux!
-
-[RC_2]
-Tu as 2 minutes pour faire péter autant de voitures de Mafia que tu peux!
-
-[RC_3]
-Tu as 2 minutes pour faire péter autant de voitures de Yasuka que tu peux!
-
-[RC_4]
-Tu as 2 minutes pour faire péter autant de voitures de Yardie que tu peux!
-
-[RC_5]
-Tu as 2 minutes pour faire péter autant de voitures des Hoods que tu peux!
-
-[RC_6]
-Tu as 2 minutes pour faire péter autant de voitures du Cartel que tu peux!
-
-[RAMPAGE]
-RODEO!
-
-[RAMP_P]
-RODEO REUSSI!
-
-[RAMP_F]
-RODEO RATE
-
-[PAGE_00]
-..
-
-[PAGE_01]
-Elimine ~1~ Diablos en 120 secondes!
-
-[PAGE_02]
-Détruis ~1~ véhicules en 120 secondes!
-
-[PAGE_03]
-Tue ~1~ Mafia en 120 secondes!
-
-[PAGE_04]
-Tue ~1~ Triades en 120 secondes!
-
-[PAGE_05]
-Tue ~1~ Triades en 120 secondes!
-
-[PAGE_06]
-Détruis ~1~ véhicules en 120 secondes!
-
-[PAGE_07]
-Dégomme ~1~ têtes de Yardies en 120 secondes!
-
-[PAGE_08]
-Brûle ~1~ Yakuzas en 120 secondes!
-
-[PAGE_09]
-Détruis ~1~ véhicules en 120 secondes!
-
-[PAGE_10]
-Détruis ~1~ véhicules en 120 secondes!
-
-[PAGE_11]
-Bute-moi ~1~ Yardies en 120 secondes!
-
-[PAGE_12]
-Flambe ~1~ Yakuzas en 120 secondes!
-
-[PAGE_13]
-Explose ~1~ Yardies en 120 secondes!
-
-[PAGE_14]
-Grille-moi ~1~ Colombiens en 120 secondes!
-
-[PAGE_15]
-Eclate ~1~ Hoods en 120 secondes!
-
-[PAGE_16]
-Détruis ~1~ véhicules en 120 secondes!
-
-[PAGE_17]
-Eclate ~1~ Colombiens avec une voiture en 120 secondes!
-
-[PAGE_18]
-Détruis ~1~ véhicules en 120 secondes!
-
-[PAGE_19]
-Fais sauter ~1~ têtes de Colombiens en 120 secondes!
-
-[PAGE_20]
-Décapite ~1~ Hoods en 120 secondes!
-
-[JM1_A]
-Hé, je m'fais chier, quand est-ce que tu me sautes ?
-
-[JM1_B]
-Ça va pas tarder mon coeur, je dois juste m'occuper d'un truc.
-
-[JM1_C]
-J'ai un petit boulot pour toi, mon gars.
-
-[JM1_D]
-Les frères Forelli me doivent du fric depuis trop longtemps
-
-[JM1_E]
-et ils ont besoin qu'on leur apprenne un peu ce que c'est que le respect.
-
-[JM1_F]
-Forelli Grosses Babines est en train de s'empiffrer au Bistro de St. Marks,
-
-[JM1_G]
-alors tu lui prends sa tire et tu l'amènes à l'atelier de 8-Ball, à Harwood.
-
-[JM1_H]
-Tu connais 8-Ball, pas vrai ?
-
-[JM1_I]
-Une fois qu'il l'a truffée avec une bombe, tu remets la voiture où tu l'as trouvée.
-
-[JM1_J]
-Et puis tu t'assois et tu regardes le spectacle.
-
-[JM1_K]
-Mais grouille, il va mettre trois plombes à bouffer.
-
-[CAT2_A1]
-Viens là, petite pute!
-
-[CAT2_A]
-La question est : tu es venu pour sauver Maria ou pour me récupérer ?
-
-[CAT2_B]
-Eh bien, j'ai des infos pour toi,
-
-[CAT2_B2]
-te tuer sera un vrai plaisir mais sortir avec toi faisait partie du business.
-
-[CAT2_C]
-Tu estas muy peccino amigo!
-
-[CAT2_D]
-Lance-moi l'argent
-
-[CAT2_E]
-T'as été très occupé!
-
-[CAT2_E2]
-Mais tu n'as rien appris, on ne peut pas me faire confiance.
-
-[CAT2_E3]
-Descends cet idiot.
-
-[CAT2_J]
-Fais-moi voler ça!
-
-[HM5_1]
-Salut. D-Ice a dit que tu venais. Y'a des règles : juste des battes, pas de flingue, pas de bagnole.
-
-[HM5_5]
-On se bat pour le respect, tu piges ?
-
-[HELP14]
-Pour ramasser les armes, marche dessus. Tu ne peux pas en récupérer depuis un véhicule.
-
-[CRUSH]
-Gare-toi sur l'emplacement indiqué et sors de la voiture. La voiture sera alors compressée.
-
-[DIAB2_B]
-Un gang de bons à rien m'a menacé de me couper mon outil de travail si je ne leur paye pas un impôt.
-
-[DIAB2_C]
-Ils ont menacé le mauvais gars, amigo.
-
-[DIAB2_D]
-Je sais qu'ils ont un faible pour les glaces.
-
-[DIAB2_E]
-Va chercher la bombe que j'ai planquée à Harwood
-
-[DIAB2_F]
-et pique la camionnette du vendeur de glaces pendant sa tournée.
-
-[DIAB2_G]
-Attire ces abrutis vers leur destinée fatale avec la clochette.
-
-[DIAB2_H]
-Ils se planquent dans un entrepôt à Atlantic Quays.
-
-[DIAB3_A]
-Des prétentieux de la Triade ont volé ma magnifique bagnole la nuit dernière,
-
-[DIAB3_B]
-ils l'ont bousillée et l'ont brûlée.
-
-[DIAB3_C]
-Quelques-uns de mes plus précieux objets étaient dans le coffre :
-
-[DIAB3_D]
-des collectors irremplaçables!
-
-[DIAB3_E]
-J'ai planqué une arme à la lisière de Chinatown.
-
-[DIAB3_F]
-Prends-la et montre à ces vandales de la Triade qu'El Burro est en colère!
-
-[DIAB3_1]
-TUE 25 TRIADES
-
-[DIAB4_A]
-Un petit malin a piqué un camion plein de mes dernières publications fraîchement imprimées.
-
-[DIAB4_B]
-Mais cet idiot camé à la Spank a laissé les portes de la camionette ouvertes
-
-[DIAB4_C]
-et toutes les belles photos
-
-[DIAB4_D]
-de ma dernière production pour adultes, sont semées à travers Liberty!
-
-[DIAB4_E]
-Prends le camion et suis la piste des magazines Le Taureau se fait Suelen, volumes 1, 2 et 3.
-
-[DIAB4_F]
-Dès que t'en trouves un, ramasse-le.
-
-[DIAB4_G]
-Quand tu auras retrouvé ce voleur bourré à la Spank, descends-le!
-
-[DIAB4_H]
-Après, tu iras livrer les magazines porno à XXX Mags dans Le Quartier Rouge.
-
-[DIAB4_1]
-~g~Amène la camionnette à l'arrière de XXX Magazines.
-
-[HM1_E]
-Je veux que tu montres à ces assoiffés de sang comment ça marche une vraie descente.
-
-[HM1_H]
-Fais-moi déguerpir tous ces 'Nines'!
-
-[HM2_A]
-Ces Nines me poussent à bout.
-
-[HM2_B]
-Ces salauds ont des voitures blindées et maintenant ils dealent de la SPANK...
-
-[HM2_C]
-et ils poussent à la conso chez nous sans être inquiétés.
-
-[HM2_D]
-Y'a une bagnole garée plus haut.
-
-[HM2_E]
-Y'a des trucs dedans pour mettre ces abrutis hors d'état de nuire...
-
-[HM3_A]
-Y'en a qui ont piégé ma bagnole pour qu'elle saute.
-
-[HM3_B]
-Si je perds ma bagnole, ma réputation est foutue.
-
-[HM3_C]
-Va chercher ma caisse et amène-la au garage en haut de St. Marks, t'as pigé ?
-
-[HM3_D]
-Laisse-les faire, laisse-les s'occuper de la bombe.
-
-[HM3_E]
-L'horloge tourne et le cablage est un vrai bordel.
-
-[HM3_F]
-Un nid de poule de trop et ça peut péter.
-
-[HM3_G]
-Maintenant grouille!
-
-[HM4_A]
-Un vol de la réserve fédérale s'est crashé à l'atterrissage, à l'aéroport Francis.
-
-[HM4_B]
-Y'a du platine partout sur la piste.
-
-[HM4_C]
-Prends une bagnole et va ramasser tout ce que tu peux.
-
-[HM4_F]
-Tu peux balancer les lingots dans un de mes garages.
-
-[HM4_G]
-Ce platine, ça pèse le poids d'un âne mort et ça va ralentir ta bagnole.
-
-[HM4_H]
-Alors fais plusieurs voyages au garage.
-
-[HM5_A]
-Les Nines se sont faits massacrer...
-
-[HM5_B]
-mais ils veulent toujours la guerre.
-
-[HM5_C]
-Ils sont d'accord pour un duel.
-
-[HM5_D]
-Un de leurs gangs contre 2 des nôtres, ou plutôt
-
-[HM5_E]
-deux des vôtres.
-
-[HM5_F]
-J'irais bien mais...
-
-[HM5_G]
-je suis en conditionnelle pour encore trois mois.
-
-[HM5_H]
-Tu vois ce que je veux dire ?
-
-[HM5_I]
-Va voir mon petit frère,
-
-[HM5_J]
-il te montrera où il faut que t'ailles.
-
-[MEA1_B]
-Mon nom est Chonks, Marty Chonks.
-
-[MEA1_C]
-Je dirige l'usine de pâtée pour chiens juste à coté.
-
-[MEA1_D]
-J'ai des problèmes de fric, mais qui n'en a pas, hein ?
-
-[MEA1_E]
-Je dois rencontrer mon banquier plus tard.
-
-[MEA1_F]
-C'est un sale voleur qui arrête pas d'augmenter les mensualités de mon emprunt pour s'en foutre une part dans la fouille.
-
-[MEA1_G]
-Prends ma bagnole, va le chercher et ramène-le ici.
-
-[MEA1_H]
-J'ai une petite surprise pour cette sangsue!
-
-[MEA2_A]
-J'ai engagé des cambrioleurs pour braquer mon appart...
-
-[MEA2_C]
-Ces bâtards menacent de tout dire à la compagnie d'assurance,
-
-[MEA2_D]
-si je les arrose pas plus.
-
-[MEA2_E]
-T'y crois toi ?
-
-[MEA2_F]
-J'ai laissé une voiture dans l'usine.
-
-[MEA2_G]
-Prends-la et va les chercher chez eux dans le Le Quartier Rouge.
-
-[MEA2_H]
-Et puis tu les ramènes à l'usine, comme ça je vais pouvoir leur expliquer le point de vue de Marty.
-
-[MEA3_A]
-si je trouve pas du cash tout de suite, mon affaire va couler.
-
-[MEA3_B]
-Ma femme a une assurance-vie et tout ce qu'elle a jamais fait pour moi, c'est un trou dans mon budget.
-
-[MEA3_C]
-J'ai laissé la voiture à sa place.
-
-[MEA3_D]
-Va checher ma femme chez la manucure Classic Nails et ramène-la à l'usine.
-
-[MEA4_A]
-Putain, je suis dans la merde!
-
-[MEA4_B]
-Ben, ma femme voyait un mec à qui je dois de l'argent.
-
-[MEA4_C]
-Il est est très fâché et lui, tout ce qu'il veut, c'est récupérer son pognon!
-
-[MEA4_E]
-Il pense que je vais le rembourser...
-
-[MEA4_F]
-mais moi je pense plutôt que...
-
-[MEA4_G]
-les chiens de Liberty vont devoir s'habituer à une nouvelle pâtée ce mois-ci!
-
-[WELCOME]
-BIENVENUE A
-
-[HM1_2]
-~g~Trouve une bagnole et souviens-toi que seuls les meurtres à l'Uzi sont pris en considération!
-
-[HELP8_B]
-Appuie sur la~h~ touche ~k~~PED_SNIPER_ZOOM_IN~ ~w~pour faire un ~h~zoom avant ~w~avec la lunette et sur la ~h~touche ~k~~PED_SNIPER_ZOOM_OUT~~w~ pour faire un ~h~zoom arrière~w~.
-
-[LRQC_1]
-Asuka et moi, on doit parler, hein,
-
-[LRQC_2]
-alors va faire un tour, ok ?
-
-[LRQC_3]
-T'auras besoin d'un endroit pour te planquer.
-
-[LRQC_4]
-Il y a un entrepôt au bord de Belleville qui te conviendra.
-
-[LRQC_5]
-Reviens ici dans mon Condo quand tu es prêt
-
-[LRQC_6]
-et on aura une petite conversation.
-
-[JM6_5]
-~g~Il te faut une caisse pour t'enfuir, imbécile!
-
-[JM2_F]
-Si t'as besoin d'un calibre, va derrière le AmmuNation, en face du métro.
-
-[LOVE4_7]
-~g~Il y a un chantier à l'île Staunton . Ils ont peut-être amené la marchandise là-bas.
-
-[LOVE4_8]
-~G~Tu auras besoin d'une voiture pour ouvrir le garage.
-
-[TSCORE]
-GAINS : ~1~$
-
-[AM1_9]
-~r~Salvatore est retourné au club de Luigi!
-
-[AM1_6]
-~g~Si tu restes autour du club de Luigi, la Mafia va te repérer!
-
-[TM2_3]
-~g~C'est un piège! Descends-les tous!
-
-[FM4_1]
-C'est Maria. La voiture est piégée! Rejoins-moi sur le quai au sud du pont de Callahan.
-
-[JM1_7]
-~g~Ferme la portière! Il va nous repérer!
-
-[KM5_1]
-~g~DEALER DESCENDU!
-
-[KM5_6]
-~g~Tu dois tuer au moins 8 dealers de Yardie.
-
-[KM5_7]
-~g~Ne perds pas de temps! Dès qu'ils auront dealer la SPANK, ils ne resteront pas dans les parages bien longtemps!
-
-[RM3_8]
-~r~Cette bagnole est un leurre!
-
-[LM3_8]
-Salut. Moi, c'est Joey.
-
-[LM3_9]
-Luigi m'a dit que t'étais réglo alors reviens plus tard.
-
-[KM3_5]
-~g~Klaxonne pour donner le signal.
-
-[LOVE7]
-LA DISPARITION DE LOVE
-
-[LOVE2_5]
-~g~Kenji est écrabouillé! Tire-toi de Newport et débarrasse-toi de la bagnole.
-
-[AS2_11]
-~g~~1~ SUR 9!
-
-[GARAGE1]
-~g~Sors de la bagnole et continue à pied.
-
-[KM3_11]
-~g~Le Cartel a été attaqué et la malette n'a pas été retrouvée.
-
-[KM3_12]
-~g~Tue tous les Colombiens, détruis les bagnoles et retrouve la malette.
-
-[KM3_13]
-~g~Ramène la malette au casino.
-
-[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_2]
-Appuie sur la ~h~touche ~k~~PED_FIREWEAPON~~w~ pour tirer avec les canons du bateau.
-
-[DIAB1_B]
-C'est El Burro des Diablos.
-
-[DIAB1_D]
-T'es nouveau à Liberty mais tu t'es déjà fait une sacrée réputation dans la rue.
-
-[DIAB1_E]
-Il y a une course de bagnoles qui va partir de la vieille école près du pont de Callahan.
-
-[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_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_2]
-~r~T'as pas réussi à détruire toutes leurs voitures blindées!
-
-[HM2_6]
-~g~Voiture blindée détruite!
-
-[RM3_A]
-Je connais un mec important en ville, un coeur tendre,
-
-[RM3_H]
-avec ce qu'on pourrait appeler des envies exotiques et l'argent pour les assouvir.
-
-[RM3_B]
-Il est compromis dans une affaire et l'avocat général a des photos assez embarrassantes de lui,
-
-[RM3_C]
-pendant une séance de tir ou quelque chose comme ça.
-
-[LOVE6_A]
-Une leçon en affaires, mon ami.
-
-[LOVE6_E]
-Si tu as quelque chose d'unique, le monde entier essaiera de te le subtiliser..
-
-[LOVE6_C]
-Les équipes spéciales de la police ont fermé le périmètre autour de mon associé et du paquet.
-
-[LOVE6_D]
-Va là-bas, prends la camionnette et fais diversion.
-
-[LOVE6_F]
-Occupe-les pour que nos hommes puissent s'échapper.
-
-[AM3_C]
-Il est sûrement dans la baie à l'heure qu'il est! Vole un bateau de la police et fais-le couler!
-
-[FESZ_UC]
-ANNULER
-
-[FEDS_SM]
-L1,R1-CHANGER MENU
-
-[FEDS_AS]
-;=-CHANGER SELECTION
-
-[FEDSAS2]
-<>-CHANGER SELECTION
-
-[FEDS_SS]
-L1,R1-CHANGER SELECTION
-
-[FEDSSC1]
-;-DEFILEMENT RAPIDE
-
-[FEDSSC2]
-=-ARRETER DEFILEMENT
-
-[MEA2_3]
-~g~Ramène la voiture à l'usine.
-
-[RM1_3]
-~r~McCaffrey s'est enfui!
-
-[RM1_4]
-~g~T'as utilisé toutes les grenades! Va en chercher chez Ma-Gnum!
-
-[RM1_5]
-~g~Retourne là-bas et brûle la barraque!
-
-[RM6_4]
-~g~Va aux coffres et ramasse la came de Ray.
-
-[RM6_5]
-~g~La CIA surveille le pont, trouve une autre route.
-
-[HM2_F]
-Et bousille tous leurs fourgons blindés.
-
-[HM_4]
-'LA COURSE AUX LINGOTS'
-
-[MEA2_B5]
-TEXT NO LONGER NEEDED
-
-[MEA1_B5]
-TEXT NO LONGER NEEDED
-
-[MEA3_B5]
-TEXT NO LONGER NEEDED
-
-[MEA4_B7]
-Mais si tu viens dans mon bureau...
-
-[MEA3_B4]
-Marty veut me voir ? Ben, il a intérêt à se dépêcher parce que j'ai rendez-vous chez le coiffeur après.
-
-[KM3_7]
-C'est un piège des Yakuzas, mec!
-
-[FES_LOF]
-Echec du chargement.
-
-[P1INSA]
-Port 1 carte mémoire insérée. ~1~Ko d'espace libre. ~1~Ko requis.
-
-[P1INSN]
-Port 1 carte mémoire. Espace libre insuffisant. Veuillez effacer certains fichiers.
-
-[FES_SLO]
-FICHIER
-
-[FES_ISC]
-EST CORROMPUE
-
-[FESZ_TI]
-SAUVEGARDER Z1
-
-[FESZ_SA]
-Sauvegarder la partie
-
-[P1NOIN]
-Port 1. Carte mémoire non insérée.
-
-[P1INSE]
-Port 1. Carte mémoire insérée.
-
-[MC_LDFL]
-Echec du chargement.
-
-[MC_NWRE]
-Redémarrage du jeu...
-
-[LOVE6_3]
-~g~Tu as ~1~ secondes pour retourner au fourgon blindé avant de rater la mission.
-
-[LOVE6_4]
-~r~Tu t'es débarrassé de la fausse Sécuricar!
-
-[HELP1]
-Arrête-toi au centre du repère bleu.
-
-[HELP12]
-Va au milieu du repère bleu pour lancer une mission.
-
-[HJSTAT]
-Distance : ~1~.~1~m Hauteur : ~1~.~1~m Saltos :~1~ Rotation : ~1~'
-
-[HJSTATW]
-Distance : ~1~.~1~m Hauteur : ~1~.~1~m Saltos : ~1~ Rotation : ~1~ Et quelle belle réception!
-
-[DIAB1_5]
-TEMPS DE COURSE :
-
-[LOVE3_4]
-~r~Tu as détruit l'avion!
-
-[F_FAIL1]
-Mission Camion de Pompier terminée.
-
-[F_CANC]
-~r~Mission Pompier annulée!
-
-[F_EXTIN]
-FEUX :
-
-[A_COMP1]
-Missions Ambulance réussies!
-
-[A_CANC]
-~r~Mission Ambulance annulée!
-
-[A_COMP3]
-Missions Ambulance réussies! Tu ne seras jamais fatigué en courant!
-
-[ATUTOR]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver les missions Ambulance.
-
-[ATUTOR3]
-Appuie sur la ~h~touche ~k~~TOGGLE_SUBMISSIONS~~w~ pour activer ou désactiver les missions Ambulance.
-
-[ALEVEL]
-Mission Ambulance Niveau ~1~
-
-[A_FAIL1]
-Mission Ambulance terminée.
-
-[FEST_HA]
-Mission Ambulance Niveau Maximum
-
-[A_SAVES]
-PERSONNES SAUVEES : ~1~
-
-[C_KILLS]
-CRIMINELS TUES : ~1~
-
-[HM1_B]
-J'ai un problème, ils essaient de me rouler.
-
-[AM2_A]
-La mort de Salvatore est une bonne nouvelle,
-
-[AM2_A2]
-tu es un tueur efficace, j'aime ça chez un homme.
-
-[AM2_B]
-Voilà mon frère, Kenji.
-
-[AM2_C]
-Asuka a un petit boulot pour toi, mais quand t'as fini, passe à mon casino et on va causer.
-
-[AM2_D]
-C'est bien Kenji, faut toujours qu'il joue avec mes jouets.
-
-[AM2_E]
-Mon indic à la police m'a dit que la Mafia surveille nos activités en ville
-
-[AM2_E2]
-et qu'elle est à tes trousses.
-
-[AM2_F]
-On ne peut pas reprendre nos activités, tant qu'ils sont dans les parages.
-
-[AM2_G]
-Elimine ces fouille-merde et mets un terme à cette vendetta une bonne fois pour toutes.
-
-[F_START]
-~g~Véhicule en feu signalé dans le secteur ~a~. Vas-y et éteins le feu.
-
-[AM4_1A]
-Va à la cabine de parc de Belleville ouest.
-
-[AM4_1B]
-Va à la cabine du campus de Liberty.
-
-[AM4_1C]
-Va à la cabine du parc de Belleville sud.
-
-[AM4_1D]
-Retrouve-moi dans les toilettes du parc.
-
-[HJSTATF]
-Distance : ~1~ft Hauteur : ~1~ft Saltos :~1~ Rotation : ~1~-
-
-[HJSTAWF]
-Distance : ~1~ft Hauteur : ~1~ft Saltos :~1~ Rotation : ~1~- Et quelle belle réception!
-
-[HM1_F]
-Mais fais gaffe à toi, y'aura aussi des Jacks dans la rue qui vont croire que tu veux aussi les buter.
-
-[HM1_D]
-Leur nom, c'est 'Nines' et leur drapeau est violet. Et chaque fois qu'ils font parader leurs couleurs...
-
-[HM1_G]
-les 'Jacks' perdent la face.
-
-[MEA2_B]
-et voler plein de trucs, comme ça l'assurance me remboursera.
-
-[TM3_H]
-~w~T'as fait du bon boulot là-bas petit, c'est très bien.
-
-[TM3_I]
-~w~Allez, on va te présenter au Don.
-
-[TM3_J]
-~w~Hé! Luigi!
-
-[TM3_K]
-~w~Oh tu as beaucoup manqué à mes filles, Salvatore, tu as été absent trop longtemps.
-
-[TM3_L]
-Tu leur diras que, quand tous ces emmerdes seront terminés,
-
-[TM3_M]
-on ira tous à la boîte pour fêter ça, ok ?
-
-[TM3_N]
-~w~Voila mon petit.
-
-[TM3_N2]
-~w~Comment ça va, Papa ?
-
-[TM3_O]
-~w~Alors tu t'es enfin trouvé une femme ?
-
-[TM3_P]
-~w~Ta mère, paix à son âme, se retournerait dans sa tombe
-
-[TM3_Q]
-~w~de te voir sans femme.
-
-[TM3_R]
-~w~Je sais 'Pa, j'y travaille.
-
-[TM3_S]
-~w~Toni! Comment va ta mère ?
-
-[TM3_T]
-~w~C'est une femme bien. Forte. De Florence.
-
-[TM3_U]
-~w~Ça va... elle va bien.
-
-[TM3_V]
-~w~Très bien. Bon les gars, entrez pendant que je parle à notre nouveau venu.
-
-[TM3_W]
-~w~Je ne vois que des bonnes choses pour toi, mon petit...
-
-[RM1_A]
-Cet enfoiré de McAffrey a accepté plus de pots-de-vin que n'importe qui.
-
-[RM1_B]
-Il pense qu'il ne va pas être poursuivi s'il donne des preuves aux condés.
-
-[RM1_C]
-Il a balancé!
-
-[RM4_B]
-Faut qu'on le réduise au silence définitivement.
-
-[RM4_E]
-Je le veux dormant avec les poissons, pas en train de les bouffer.
-
-[LOVE3_B]
-Ce soir en approchant de l'aéroport de Liberty, un petit avion passera au dessus de la baie.
-
-[LOVE4_D]
-Malheureusement, les autorités du port ont saisi l'avion et l'ont mis en pièces
-
-[LOVE4_H]
-avant que je puisse intervenir et ça m'a coûté cher.
-
-[LOVE4_E]
-Traverse le pont et va à l'aéroport International Francis.
-
-[GTAB_A]
-Hé, débarrasse-toi de ça. On ne sait pas ce que c'est
-
-[GTAB_B]
-mais il a l'air d'y tenir beaucoup, donc ça doit valoir quelque chose.
-
-[GTAB_C]
-Qui est-ce qui...
-
-[GTAB_D]
-TOI!
-
-[GTAB_E]
-Hé calme-toi amigo! De nada! De nada!
-
-[GTAB_F]
-Je t'ai laissé à moitié mort dans le caniveau!
-
-[GTAB_G]
-Ne tire pas amigo. Pas de problèmes. On est tous amis. Tiens, prends ça.
-
-[GTAB_H]
-Arrête de faire la tapette!
-
-[GTAB_I]
-On n'a pas le choix, bébé!
-
-[GTAB_J]
-On a toujours le choix, espèce d'abruti!
-
-[GTAB_K]
-Je m'excuse pour cette pute hystérique mec, elles sont toutes les mêmes... por favor ??
-
-[GTAB_L]
-Alors la pute s'est barrée.
-
-[GTAB_M]
-Mais tu m'as fait une fleur,
-
-[GTAB_N]
-tu n'es pas le seul à avoir à régler des comptes avec le Cartel,
-
-[GTAB_O]
-ce cafard a tué mon frère!
-
-[GTAB_P]
-Je n'ai jamais tué de Yakuza!
-
-[GTAB_Q]
-MENTEUR! On a tous vu l'assassin du Cartel.
-
-[GTAB_R]
-On va tous vous retrouver et vous descendre, vous, les chiens de Colombiens!
-
-[GTAB_S]
-Je vais travailler avec votre ami ici, pour obtenir des informations et un peu de plaisir.
-
-[GTAB_T]
-Toi, tu reviens plus tard, je suis sûr que je vais avoir besoin de tes services.
-
-[GTAB_U]
-S'il te plait amigo, ne me laisse pas avec elle, c'est une minette psychotique! Amigo ? Hé AMIIIGO!!!... Aïïïïïïïeeeeee!
-
-[LOVE5_A]
-Tu as prouvé que tu étais un bon investissement, ce qui est rare en ces jours de récession.
-
-[KM3_1]
-~g~Le Cartel s'attend à ce qu'un des Yardies vole une voiture de Yardie! Va vers le Nord, tu en trouveras une à Newport.
-
-[LOVE1_1]
-~g~Va piquer une voiture du gang des Colombiens, comme ça tu pourras rentrer dans leur planque. Dirige-toi vers le Nord, tu en trouveras une à Fort Stanton.
-
-[FM1_Q1]
-~w~Vous voulez vous amuser ? Un petit... hmm ? Du Spank ?
-
-[FM1_R]
-~w~Salut Chico. Non, comme d'habitude.
-
-[FM1_T]
-~w~Merci Chico. A plus tard.
-
-[FM1_W]
-. ~w~Ok Fido, tu attends ici et tu surveilles la caisse pendant que je vais m'éclater.
-
-[FM1_X]
-~w~Ok Fido, tirons-nous d'ici. Ouuulaa!
-
-[FM1_Q]
-~w~Hé Maria! C'est ma plus belle jument!
-
-[FM1_S1]
-~w~Tu devrais passer à la fête de l'entrepôt à l'est d'Atlantic Quays.
-
-[FM1_U]
-~w~Gracias et éclate-toi. C'est de la bombe.
-
-[FM1_V]
-~w~Allez Fido, on va aller faire un tour à cette fête!
-
-[FM1_SS]
-~r~SCANNER : ~w~Quatre-Cinq à toutes les unités : rejoignez les stups à Atlantic Quays...
-
-[LOVE6_B]
-Même s'ils n'ont pas la moindre idée de sa vraie valeur.
-
-[TM3_A1]
-~r~Joey s'est fait avoir!
-
-[TM3_A2]
-~r~Joey et Luigi se sont fait descendre!
-
-[TM3_A3]
-~r~Joey, Luigi et Toni se sont fait buter!
-
-[FM4_2]
-Salvatore pense qu'on le court-circuite,
-
-[FM4_3]
-alors il voulait te donner au Cartel pour pouvoir faire un deal.
-
-[FM4_4]
-Je pouvais pas le laisser faire, je veux dire,
-
-[FM4_4B]
-tout ça, c'est de ma faute... parce que je lui ai dit qu'on était ensemble.
-
-[FM4_5]
-Me demande pas pourquoi. J'en sais rien.
-
-[FM4_6]
-T'es sur la liste rouge dans la Mafia et je veux me tirer d'ici, moi aussi.
-
-[FM4_6B]
-J'ai vu trop de crimes. Trop de sang!
-
-[FM4_7]
-C'est une amie à moi Ok, une vieille copine... Elle s'appelle Asuka, on peut lui faire confiance.
-
-[FM4_8]
-Allez, on a assez causé.
-
-[FM4_9]
-On ferait mieux de se barrer avant d'avoir tous ces Italiens hystériques aux fesses.
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUCER
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-ART DIRECTOR
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-TECHNICAL DIRECTION
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-DESIGN
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-WRITTEN BY
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-CHARACTERS
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMATION & DIRECTION
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-AUTO DESIGN
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-ARTISTS
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODERS
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-SCORE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-SOUND DESIGN & MASTERING
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-AUDIO PROGRAMMING
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-TEST MANAGER
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-LEAD TESTERS
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRD050A]
-TESTERS
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-TECHNICAL SUPPORT
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-EXECUTIVE PRODUCER
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUCER
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRECTOR OF DEVELOPMENT
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-TECHNICAL PRODUCER
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-ASSOCIATE PRODUCER
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-MUSIC SUPERVISOR
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VP OF MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-TECHNICAL COORDINATOR
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-QA MANAGER
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-GAME ANALYST
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-TEST TEAM
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-LIBERTY TREE EDITORIAL
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-CUT-SCENES
-
-[CRED108]
-SCRIPT BY DAN HOUSER AND JAMES WORRALL
-
-[CRED109]
-AUDIO DIRECTED BY DAN HOUSER
-
-[CRED110]
-AUDIO PRODUCED BY RENAUD SEBBANE
-
-[CRED111]
-CAST
-
-[CRED112]
-FRANK VINCENT AS SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO AS LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN AS TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT AS JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR AS MARIA
-
-[CRED117]
-KYLE MACLACHLAN AS DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA AS RAY MACHOWSKI
-
-[CRED119]
-GURU AS 8-BALL
-
-[CRED120]
-SONDRA JAMES AS MOMMA
-
-[CRED121]
-LIANA PAI AS ASUKA
-
-[CRED122]
-LES MAU AS KENJI
-
-[CRED123]
-CYNTHIA FARRELL AS CATALINA
-
-[CRED124]
-AL ESPINOSA AS MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS AS EL BURRO
-
-[CRED126]
-HUNTER PLATIN AS CHICO
-
-[CRED127]
-WALTER MUDU AS D-ICE
-
-[CRED128]
-CURTIS MCCLARIN AS CURTLY
-
-[CRED129]
-BILL FIORE AS DARKEL
-
-[CRED130]
-CHRIS PHILLIPS AS MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN AS CURLY BOB
-
-[CRED132]
-WALTER MUDU AS KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN AS ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY AS MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATED BY
-
-[CRD136A]
-ALEX HORTON
-
-[CRED137]
-DIRECTED BY
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRED138]
-PRODUCED BY
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRED139]
-RECORDED AT MODERN UPRISING STUDIOS, BROOKLYN
-
-[CRED140]
-ACTORS
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS.
-
-[CRED141]
-PEDESTRIAN DIALOGUE
-
-[CRED142]
-WRITTEN BY DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRECTED BY CRAIG CONNER, DAN HOUSER AND LAZLOW
-
-[CRED144]
-PRODUCED BY RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-RADIO STATIONS AND MUSIC
-
-[CRED218]
-PRODUCERS FOR ROCKSTAR UK
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED219]
-SOUNDTRACK CO-ORDINATOR
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUCER FOR ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-EDITED BY
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER AND IMAGING WRITTEN BY
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-SPECIAL THANKS TO
-
-[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]
-ARTIST
-
-[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
-
-[J_EP]
-PRODUCTEUR EXECUTIF
-
-[N_EP]
-SAM HOUSER
-
-[J_PROD]
-PRODUCTEUR
-
-[N_PROD]
-LESLIE BENZIES
-
-[J_AD]
-DIRECTEUR ARTISTIQUE
-
-[N_AD]
-AARON GARBUT
-
-[J_TD]
-DIRECTEURS TECHNIQUES
-
-[N_TD1]
-OBBE VERMEIJ
-
-[N_TD2]
-ADAM FOWLER
-
-[J_COD]
-ENCODEURS
-
-[N_COD1]
-ALEXANDER ROGER
-
-[N_COD2]
-GRAEME WILLIAMSON
-
-[N_COD3]
-MARK HANLON
-
-[N_COD4]
-ALAN CAMPBELL
-
-[N_COD5]
-RAYMOND USHER
-
-[N_COD6]
-ANDRZEJ MADAJCZYK
-
-[J_ART]
-INFOGRAPHISTES
-
-[N_ART1]
-ADAM COCHRANE
-
-[N_ART2]
-ALISDAIR WOOD
-
-[N_ART3]
-GARY MCADAM
-
-[N_ART4]
-ANDREW SOOSAY
-
-[N_ART5]
-KEIRAN BAILLIE
-
-[J_AUTO]
-CONCEPTION AUTOMOBILE
-
-[N_AUTO]
-PAUL KUROWSKI
-
-[J_CHAR]
-PERSONNAGES
-
-[N_CHAR]
-IAN MCQUE
-
-[J_ANIM]
-ANIMATION ET REALISATION
-
-[N_ANIM1]
-ALEX HORTON
-
-[N_ANIM2]
-NAVID KHONSARI
-
-[N_ANIM3]
-LEE MONTGOMERY
-
-[J_SND]
-CONCEPTION SON
-
-[N_SND1]
-ALLAN WALKER
-
-[J_SCR]
-MUSIQUE
-
-[N_SCR1]
-CRAIG CONNER
-
-[N_SCR2]
-STUART ROSS
-
-[J_DSGN]
-CONCEPTION
-
-[N_DSGN1]
-CRAIG FILSHIE
-
-[N_DSGN2]
-WILLIAM MILLS
-
-[N_DSGN3]
-CHRIS ROTHWELL
-
-[N_DSGN4]
-JAMES WORRALL
-
-[J_WRT]
-SCENARIO
-
-[N_WRT1]
-JAMES WORRALL
-
-[N_WRT2]
-DAN HOUSER
-
-[N_WRT3]
-PAUL KUROWSKI
-
-[J_IT]
-ASSISTANCE TECHNIQUE
-
-[N_IT1]
-LORRAINE ROY
-
-[N_IT2]
-CHRISTINE CHALMERS
-
-[J_IQA]
-RESPONSABLE DES TESTS
-
-[N_IQA1]
-CRAIG ARBUTHNOTT
-
-[LEAD_T]
-TESTEURS PRINCIPAUX
-
-[N_IQA2]
-JOHN HAIME
-
-[N_IQA3]
-NEIL CORBETT
-
-[N_IQA4]
-ANDY DUTHIE
-
-[TEST]
-TESTEURS
-
-[N_IQA5]
-GRAEME JENNINGS
-
-[N_IQA6]
-DAVID MURDOCH
-
-[N_IQA7]
-DAVID BEDDOES
-
-[N_IQA8]
-EDWIN SMITH
-
-[N_IQA9]
-MARK FLETT
-
-[N_IQ10]
-MICHAEL SUTHERLAND
-
-[J_EQA]
-ROCKSTAR NEW YORK
-
-[N_EQA1]
-JEFF ROSA
-
-[LEAD_T2]
-TESTEUR PRINCIPAL
-
-[N_EQA2]
-ADAM DAVIDSON
-
-[N_EQA3]
-JOE HOWELL
-
-[N_EQA4]
-JOE GREEN
-
-[N_EQA5]
-RICH HUIE
-
-[N_EQA6]
-JEREMY POPE
-
-[N_EQA7]
-KAHLEEM POOLE
-
-[N_EQA8]
-HAKLIN NG
-
-[N_EQA9]
-MIKE HONG
-
-[N_EQA10]
-BRIAN PLANAR
-
-[N_EQA11]
-JAMEEL VEGA
-
-[CINCAM]
-Caméra Cinématique
-
-[KM1_13]
-Amène cette bagnole au garage!
-
-[KM3_14]
-~r~Tu t'es fait repérer, le marché est annulé!
-
-[EBAL_H]
-Attends-moi ici pendant que je vais aller parler à luigi.
-
-[EBAL_M]
-Rappelle-toi que personne n'embrouille mes filles!
-
-[LM2_F]
-Tu lui prends sa caisse et tu la repeins.
-
-[LM2_D]
-Ben voilà, prends-le.
-
-[LM1_9]
-Salut, je m'appelle Misty.
-
-[LM4_A]
-Y'a des connards de Diablos qui font tapiner leurs sales putes sur mon territoire.
-
-[FM2_B]
-On a une balance!
-
-[FM2_C]
-Il fait pas le maquereau,ni le dealer, donc il doit parler.
-
-[FM3_CC]
-~w~Reviens quand t'auras le pognon, frangin.
-
-[FEDS_AM]
-<>-CHANGER MENU
-
-[LOVE5_5]
-~r~T'as pas su protéger le camion!
-
-[RM6_6]
-~r~Ray est mort!
-
-[RM6_7]
-. ~r~Ray a raté son vol.
-
-[RM6_8]
-~g~Tu as laissé tomber Ray, retourne le chercher.
-
-[FM1_10]
-~g~Tu as laissé tomber Maria, retourne la chercher.
-
-[LOVE4_9]
-~r~L'avion a été détruit!
-
-[LOV4_10]
-~r~La seule piste pour retrouver le paquet est partie en fumée!
-
-[KM2_D]
-Cela va sans dire, on va lui en faire cadeau, pour éponger la dette que j'ai envers lui.
-
-[KM4_B]
-Les mecs qui ont la chance de bénéficier de notre protection, font leurs comptes aujourd'hui.
-
-[KM2_E]
-Tu dois trouver les voitures qui sont sur cette liste et les livrer au garage derrière le parking de Newport.
-
-[FM3_8I]
-~w~Trouve une bonne place et je rentrerai quand tu tireras le premier coup.
-
-[LOVE1_B]
-L'expérience m'a appris que quelqu'un comme toi peut être très loyal si on le paye bien,
-
-[LOVE1_H]
-mais ca fait des jaloux.
-
-[LOVE1_C]
-Un vieux bridé que je connais, un homme de confiance,
-
-[LOVE1_I]
-est retenu en otage par des Sud-Américains à Aspatria.
-
-[MEA4_D]
-J'ai accepté de le voir...
-
-[MEA4_B4]
-C'est Marty qui t'envoie, hein ? D'accord, je vais lui apprendre, moi, le sens des affaires.
-
-[MEA4_B5]
-Carl, salut! Euh... j'ai besoin de plus de temps pour ton pognon.
-
-[MEA1_B4]
-C'est M. Chonks qui t'envoie, n'est-ce pas ? Allons lui rendre visite.
-
-[HM5_6]
-Allons fracasser des crânes...
-
-[LOVE1_5]
-~g~Arrête de tourner en rond, trouve une bagnole des Colombiens et sauve l'associé de Love.
-
-[AS1_D]
-~w~T'as qu'à faire l'appât et attirer les escadrons de la mort dans la Crique de Pike.
-
-[AS1_E]
-~w~Mes hommes les attendront là-bas.
-
-[AS2_C]
-~w~Le Cartel a une couverture : l'usine de café Kappa.
-
-[AS2_E]
-~w~On a pas d'autre choix que de neutraliser ces charettes à drogue.
-
-[AS2_F]
-~w~Fais-en des allumettes!!
-
-[AS2_A1]
-~w~Miguel a sûrement un peu de cette fameuse énergie latine.
-
-[AS2_A2]
-~w~Je suis crevé.
-
-[SIREN_3]
-Pour activer la sirène, appuie sur la ~h~touche ~k~~VEHICLE_HORN~~w~.
-
-[SIREN_4]
-Pour activer la sirène, appuie sur la ~h~touche ~k~~VEHICLE_HORN~~w~.
-
-[AS3_C]
-~w~Oulala! C'est quoi ce truc jaune ?
-
-[AS3_C1]
-~w~Salut ma poule.
-
-[AS3_F]
-~w~Elle se classe tout de suite dans les meilleures, cette nana.
-
-[AS3_F1]
-~w~Elle s'est arrangée pour dérober ce joli petit bijou à notre invité.
-
-[AS3_G]
-~w~Y'a un avion qui arrive à l'aéroport international Francis dans 2 heures.
-
-[AS3_G1]
-~w~Il est rempli de poison de Catalina.
-
-[AS3_H]
-~w~Tu peux éviter la sécurité de l'aéroport en prenant un bateau jusqu'aux bouées lumineuses d'approche.
-
-[AS3_H1]
-~w~Et dès que l'avion descends, tu l'explose!
-
-[AS3_I]
-~w~Récupère la marchandise au milieu des débris.
-
-[AS3_J]
-~w~Maintenant, fais attention ma poule!
-
-[AS3_K]
-~w~Essaie avec l'huile pimentée...
-
-[RM2_F1]
-Ces Colombiens seront là d'une minute à l'autre!
-
-[RM2_K]
-Merde ils sont là!! Feu à volonté!!
-
-[LOVE2_7]
-~g~Maintenant, largue la bagnole!
-
-[LOVE2_8]
-~g~Dégage de Newport!
-
-[AM1_F]
-Salvatore Leone va partir de chez Luigi vers ~1~:~1~.
-
-[LOVE5_C]
-Je veux que tu le suives et que tu fasses en sorte que lui et mon paquet arrivent à la Crique de Pike sains et saufs.
-
-[FESZ_SR]
-Echec de la sauvegarde! Vérifie la memory card (PS2) dans la fente pour MEMORY CARD 1 et réessaie.
-
-[FESZ_FO]
-Veux-tu formater la memory card (PS2) dans la fente pour MEMORY CARD 1?
-
-[FELZ_FO]
-La memory card (PS2) dans la fente pour MEMORY CARD 1 n'est pas formatée.
-
-[FES_NOC]
-Aucune memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[FES_LOE]
-Echec du chargement! Vérifie la memory card (PS2) dans la fente pour MEMORY CARD 1 et réessaie.
-
-[FES_DEE]
-Echec de la suppression! Vérifie la memory card (PS2) dans la fente pour MEMORY CARD 1 et réessaie.
-
-[FORSUC]
-Formatage réussi de la memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[ERFOUN]
-Echec du formatage de la memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[ERMCNP]
-Aucune memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[SVMEM1]
-Sauvegarder sur la memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[FORSLO]
-Formater la memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[SLONFM]
-Erreur de formatage de la Memort Card (PS2) dans la fente pour MEMORY CARD 1.
-
-[SLONDR]
-Espace insuffisant pour sauvegarder. Insère une memory card (PS2) dotée d'au moins 500 Ko d'espace disponible, dans la fente pour MEMORY CARD 1.
-
-[SLNSP]
-Espace insuffisant pour sauvegarder. Insère une memory card (PS2) dotée d'au moins 200 Ko d'espace disponible, dans la fente pour MEMORY CARD 1.
-
-[FEFD_WR]
-Formatage de la memory card (PS2) dans la fente pour MEMORY CARD 1. Ne pas retirer la memory card (PS2), ni réinitialiser ou éteindre la console.
-
-[FES_ISF]
-ABSENT
-
-[FES_SAG]
-EXISTANT
-
-[SLONNO]
-Aucune memory card (PS2) dans la fente pour MEMORY CARD 1.
-
-[SLONNF]
-La memory card (PS2) dans la fente pour MEMORY CARD 1 pas formatée.
-
-[FESZ_FM]
-La memory card (PS2) dans la fente pour MEMORY CARD 1 n'est pas formatée. Veux-tu la formater?
-
-[FESZ_FF]
-Echec du formatage! Vérifie la memory card (PS2) dans la fente pour MEMORY CARD 1 et réessaie.
-
-[MCDNSP]
-Espace insuffisant sur la memory card (PS2) dans la fente pour MEMORY CARD 1. 500 Ko minimum sont requis pour sauvegarder. Veux-tu commencer? (OUI ou NON)
-
-[MCGNSP]
-Espace insuffisant sur la memory card (PS2) dans la fente pour MEMORY CARD 1. 200 Ko minimum sont requis pour sauvegarder. Veux-tu commencer ? (OUI ou NON)
-
-[FESZ_WR]
-Sauvegarde en cours. Ne pas retirer la memory card (PS2) de la fente pour MEMORY CARD 1, ni réinitialiser ou éteindre la console.
-
-[FESZ_OW]
-Ecrasement en cours. Ne pas retirer la memory card (PS2) de la fente pour MEMORY CARD 1, ni réinitialiser ou éteindre la console.
-
-[FELD_WR]
-Chargement en cours. Ne pas retirer la memory card (PS2) de la fente pour MEMORY CARD 1, ni réinitialiser ou éteindre la console.
-
-[FEDL_WR]
-Effacement en cours. Ne pas retirer la memory card (PS2) de la fente pour MEMORY CARD 1, ni réinitialiser ou éteindre la console.
-
-[LM2_C]
-Luigi m'a dit de te donner ça, alors...
-
-[LM3_G]
-Joey n'est pas du genre à être patient, rappelle-toi, c'est ton ticket d'entrée...
-
-[LM5_E]
-Ramènes-en autant que tu peux avant que ces poulets aient cramé tout leur blé.
-
-[JM5_C]
-Y'a une bagnole avec un macchabée devant le café à coté de Point Callahan.
-
-[RM2_B]
-On a fait le Nicaragua ensemble, à l'époque où ce pays savait ce qu'il faisait.
-
-[RM2_C]
-Un enfoiré du Cartel l'a bousculé hier et lui a dit qu'ils reviendraient aujourd'hui pour de la marchandise.
-
-[RM2_D1]
-J'y serais bien allé moi-même mais ma vieille sciatique s'est réveillée - hhurrh hhurrh - alors, bonne chance.
-
-[CATINF1]
-~g~Chope Catalina!
-
-[CATINF2]
-~g~Suis l'hélico pour trouver Catalina.
-
-[BOATIN1]
-Saute dans un bateau et appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour entrer dedans.
-
-[BOATIN2]
-Tu peux appuyer sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~ ~w~si tu es près d'un bateau pour te glisser à l'intérieur.
-
-[BOATIN3]
-Saute dans un bateau et appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~ ~w~pour entrer dedans.
-
-[BOATIN4]
-Tu peux appuyer sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~ ~w~si tu es près d'un bateau pour te glisser à l'intérieur.
-
-[JM6]
-'L'EVASION'
-
-[FM1]
-'LE CHAPERON'
-
-[JM1]
-'LE DERNIER REPAS DE MIKE 'BABINES'
-
-[FM21]
-'LA BOMBE : ACTE 1'
-
-[FM3]
-'LA BOMBE : ACTE 2'
-
-[AM1]
-'SAYONARA SALVATORE'
-
-[AM2]
-'SOUS SURVEILLANCE'
-
-[KM2]
-'GRAND THEFT AUTO'
-
-[AS3]
-'S.A.M.'
-
-[RM2]
-'PENURIE D'ARMES'
-
-[LOVE6]
-'L'APPAT'
-
-[LOVE1]
-'LIBERATEUR'
-
-[RC1]
-'DESTRUCTION DE DIABLO'
-
-[RC2]
-'MASSACRE DE LA MAFIA'
-
-[RC3]
-'CALAMITÉ AU CASINO'
-
-[RC4]
-'RODEO DE RUMPO'
-
-[RM2_E1]
-Je peux pas croire que ce trouillard m'ait encore laissé sans protection!
-
-[GREN_1]
-Plus tu maintiendras la ~h~touche ~k~~PED_FIREWEAPON~~w~ enfoncée, plus tu lanceras loin la grenade.
-
-[GREN_2]
-Plus tu maintiendras la ~h~touche ~k~~PED_FIREWEAPON~~w~ enfoncée, plus tu lanceras loin la grenade.
-
-[GREN_3]
-Plus tu maintiendras la ~h~touche ~k~~PED_FIREWEAPON~~w~ enfoncée, plus tu lanceras loin la grenade.
-
-[LOVE4_G]
-Mon bien t'attendra dans le hangar des douanes à l'intérieur du fuselage de l'avion.
-
-[KABOOM]
-KABOOOM!
-
-[SPLAT]
-DESSOUDE!
-
-[PANCAK]
-REFROIDI!
-
-[SOAKED]
-FLINGUE!
-
-[HEAD]
-Radio tête
-
-[DBL_CLF]
-Radio double FM
-
-[FLASHB]
-Nostalgia FM
-
-[RISE]
-Lévitation FM
-
-[LIPS]
-Love 106
-
-[CHAT]
-Causette FM
-
-[K_JAH]
-K-Jah Radio
-
-[GAM_FM]
-Echec FM
-
-[MSX_FM]
-MSX FM
-
-[TUBE1]
-Quand le métro ouvrira, tu pourras prendre une rame pour aller à l'île Staunton .
-
-[TUBE2]
-Quand Shoreside Vale sera ouvert, tu pourras sortir au Shoreside Terminal pour aller à l'aéroport international Francis.
-
-[TUBE_2]
-Pour prendre le métro, appuie sur la ~h~touche 'monter véhicule'~w~.
-
-[LEGAL]
-~g~Enraye toute menace criminelle!
-
-[GA_2]
-Nouveau moteur et nouvelle peinture. Les flics ne te reconnaîtront jamais!
-
-[LM1_8A]
-Pour te faire du fric en plus, tu pourrais peut-être 'emprunter' un taxi...
-
-[TAXIH1]
-Arrête-toi près d'un passage piéton pour prendre des passagers et emmène-les à destination avant la fin du temps imparti.
-
-[LM5_7]
-~g~Y'a moins de quatre filles qui bossent au ~p~Bal~g~, Luigi va pas être content!
-
-[KM2_3]
-~g~Rappelle-toi que les ~r~voitures~g~ doivent être en parfait état pour être acceptées par le ~p~garage~g~.
-
-[KM5_2]
-~g~Un homme du gang de Yardie est hors d'état de nuire.
-
-[BETRA_A]
-Désolé, chérie.
-
-[BETRA_B]
-Je suis une fille ambitieuse et toi,
-
-[BETRA_C]
-t'es juste un passe-temps.
-
-[HELP15]
-A pied, appuie sur la ~h~touche ~k~~PED_LOOKBEHIND~~w~ pour ~h~regarder derrière~w~.
-
-[FEC_LB3]
-Regarder derrière
-
-[FEC_R3]
-(touche R3)
-
-[FES_AFO]
-Cette memory card (PS2) est déjà formatée.
-
-[FEA_UP]
-;
-
-[FEA_DO]
-=
-
-[FEA_LE]
-<
-
-[FEA_RI]
->
-
-[FEDSAS3]
-- CHANGER SELECTION
-
-[FEDSAS4]
-;=<> - CHANGER SELECTION
-
-[SPRAY_4]
-Utilise la ~h~touche ~k~~PED_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.
-
-[AM1_10]
-~g~Salvatore Leone partira de chez Luigi vers 0~1~:~1~.
-
-[JAILB_V]
-Liberty City est en état de choc!
-
-[JAILB_A]
-La police et les services d'urgence s'occupent des conséquences
-
-[JAILB_B]
-d'une attaque lancée contre un convoi de la police ce matin.
-
-[JAILB_C]
-On n'a reçu aucune info sur les prisonniers qui étaient transférés ce matin.
-
-[JAILB_D]
-Et aucun groupe, n'a revendiqué cette attaque.
-
-[JAILB_E]
-Le convoi a quitté le Q.G. de la police tôt ce matin...
-
-[JAILB_F]
-pour un transfert vers le pénitencier de Liberty.
-
-[JAILB_G]
-L'attaque a eu lieu sur le pont de Callahan,
-
-[JAILB_H]
-laissant peu de témoins et un pont gravement endommagé.
-
-[JAILB_I]
-On suppose que certains prisonniers sont morts dans l'explosion...
-
-[JAILB_J]
-qui a suivi la première attaque.
-
-[JAILB_W]
-Le professionnalisme de cette attaque a pris de court la police,
-
-[JAILB_K]
-lorsque l'identification des prisonniers évadés a été ralentie...
-
-[JAILB_L]
-par la découverte d'un piratage informatique simultané des bases de données du Q.G. de la police.
-
-[JAILB_O]
-Le chantier du tunnel Porter prenant de plus en plus de retard,
-
-[JAILB_P]
-cette catastrophe laisse Portland isolé du reste de la ville.
-
-[JAILB_Q]
-Allez, viens!
-
-[JAILB_R]
-Monsieur tête de noeud
-
-[JAILB_S]
-Ca me pose aucun problème de te tuer.
-
-[JAILB_T]
-Tu vas le regretter.
-
-[JAILB_U]
-D'accord, d'accord. Allez, dégage!
-
-[JAILB_M]
-Le Maire O'Donovan a fait clairement comprendre que la police considérait
-
-[JAILB_N]
-*
-
-[JAILB_X]
-Dans une déclaration faite ce matin,
-
-[FEDS_SE]
-Touche / - SELECTIONNER
-
-[FEDS_SB]
-Touche / - SELECTIONNER Touche " - RETOUR
-
-[TM4_A]
-~w~Oh, c'est toi. Toni n'est pas là.
-
-[TM4_A2]
-~w~Mais il a laissé une de ses lettres d'amour pour toi.
-
-[DIAB2_A]
-J'ai commencé dans les loisirs exotiques avec rien d'autre que le contenu, pas si négligeable que ça, de mon pantalon de cuir!
-
-[LM5_9]
-FILLES :
-
-[PERPIC]
-Paquets cachés trouvés
-
-[CO_ONE]
-~1~ paquet caché sur ~1~ trouvé.
-
-[LOVE3_3]
-~g~L'avion a largué ~1~ paquets sur 6.
-
-[FARE11]
-~g~Destination : ~w~'Chantier'~g~ de Fort Staunton.
-
-[GA_21]
-Impossible de garer plus de véhicules dans ce garage.
-
-[CHEAT1]
-Codes activés
-
-[CHEAT2]
-Code d'arme
-
-[CHEAT3]
-Code de santé
-
-[CHEAT4]
-Code d'armure
-
-[CHEAT5]
-Code d'indice de recherche
-
-[CHEAT6]
-Code d'argent
-
-[CHEAT7]
-Code de météo
-
-[AS1_H]
-~r~T'as pas réussi à amener l'escadron de la mort dans le piège des Yakuzas!
-
-[FEDS_BA]
-Touche " - RETOUR
-
-[RAMP_A]
-TOUS LES RODEOS ONT ETE ACCOMPLIS!
-
-[USJ_ALL]
-TOUTES LES CASCADES ONT ETE ACCOMPLIES!
-
-[FARE23]
-~g~Destination : ~w~'Transport-Export'~g~ au Barrage Cochrane.
-
-[L_TRN_1]
-Tu peux prendre le train-L à Portland. Appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour ~h~monter~w~ ou ~h~descendre~w~ du train.
-
-[L_TRN_2]
-Tu peux prendre le train-L à Portland. Appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour ~h~monter~w~ ou ~h~descendre~w~ du train.
-
-[S_TRN_1]
-Tu peux prendre le métro à Liberty. Appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour ~h~monter~w~ ou ~h~descendre~w~ du train.
-
-[S_TRN_2]
-Tu peux prendre le métro à Liberty. Appuie sur la ~h~touche ~k~~VEHICLE_ENTER_EXIT~~w~ pour ~h~monter~w~ ou ~h~descendre~w~ du train.
-
-[AS1_C]
-~w~Il y a trois escadrons de la mort autour de Liberty et tout ce qu'ils veulent, c'est te buter!
-
-[AS1_G]
-~r~Tous les Yakuzas sont morts!
-
-[JAN]
-Jan
-
-[FEB]
-Fév
-
-[MAR]
-Mar
-
-[APR]
-Avr
-
-[MAY]
-Mai
-
-[JUN]
-Juin
-
-[JUL]
-Juil
-
-[AUG]
-Août
-
-[SEP]
-Sep
-
-[OCT]
-Oct
-
-[NOV]
-Nov
-
-[DEC]
-Déc
-
-[DEFDT]
-Date de sauvegarde invalide
-
-[BUGGY]
-BUGGIES RESTANTS :
-
-[BONUS]
-~g~BONUS ~1~$
-
-[HORN1]
-Appuie sur la ~h~touche L3 ~w~pour ~h~klaxonner.
-
-[HORN2]
-Appuie sur la ~h~touche L1 ~w~pour ~h~klaxonner.
-
-[HORN3]
-Appuie sur la ~h~touche R1 ~w~pour ~h~klaxonner.
-
-[LM3_1A]
-Appuie sur la ~h~touche ~k~~VEHICLE_HORN~ ~w~pour ~h~klaxonner~w~ et prévenir Misty de ton arrivée.
-
-[LM3_1B]
-Appuie sur la ~h~touche ~k~~VEHICLE_HORN~ ~w~pour ~h~klaxonner~w~ et prévenir Misty de ton arrivée.
-
-[LM3_1C]
-Appuie sur la ~h~touche ~k~~VEHICLE_HORN~ ~w~pour ~h~klaxonner~w~ et prévenir Misty de ton arrivée.
-
-[RADIO_A]
-Appuie sur la ~h~touche ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ pour faire défiler les ~h~stations de radio.
-
-[RADIO_B]
-Appuie sur la ~h~touche ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ pour faire défiler les ~h~stations de radio.
-
-[RADIO_C]
-Appuie sur la ~h~touche ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ pour faire défiler les ~h~stations de radio.
-
-[RADIO_D]
-Appuie sur la ~h~touche ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ pour faire défiler les ~h~stations de radio.
-
-[FEC_EXV]
-Entrer\sortir d'un véhicule
-
-[TAXI_M]
-'TAXI DRIVER'
-
-[COP_M]
-'POLICE'
-
-[FIRE_M]
-'POMPIER'
-
-[AMBUL_M]
-'AMBULANCE'
-
-[HJ_IS]
-BONUS DE CASCADE DANGEREUSE : ~1~$
-
-[HJ_PIS]
-BONUS DE CASCADE DANGEREUSE PARFAITE : ~1~$
-
-[HJ_DIS]
-BONUS DE DOUBLE CASCADE DANGEREUSE : ~1~$
-
-[HJ_PDIS]
-BONUS DE DOUBLE CASCADE DANGEREUSE PARFAITE : ~1~$
-
-[HJ_TIS]
-BONUS DE TRIPLE CASCADE DANGEREUSE : ~1~$
-
-[HJ_PTIS]
-BONUS DE TRIPLE CASCADE DANGEREUSE PARFAITE : ~1~$
-
-[HJ_QIS]
-BONUS DE QUADRUPLE CASCADE DANGEREUSE : ~1~$
-
-[HJ_PQIS]
-BONUS DE QUADRUPLE CASCADE DANGEREUSE PARFAITE : ~1~$
-
-[AM1_K]
-Salvatore Leone partira de chez Luigi dans environ trois heures. (0~1~:~1~)
-
-[IMPEXPP]
-Transport-Export, port de Portland. On a commandé différents véhicules. Consulte notre panneau d'affichage pour avoir plus d'infos.
-
-[VANHSTP]
-Si t'arrives à choper d'autres Sécuricars, amène-les à notre garage dans le port de Portland.
-
-[EMVHPUP]
-Achat de véhicules de secours neufs et d'occasion à très bons prix. Apporte-les à la grue, au nord-est du port de Portland.
-
-[STANDS]
-ETALS RENVERSES :
-
-[STASH]
-~g~Planque la SPANK sur le ~p~chantier!
-
-[MCSTNS]
-Aucune memory card (PS2) dans la fente pour MEMORY CARD 1. Veux-tu commencer? (OUI ou NON)
-
-[LOVE3_5]
-~g~L'avion est à portée.
-
-[LOVE3_6]
-~r~La police a réussi à récupérer les paquets!
-
-[SIREN_1]
-Pour déclencher la sirène de ce véhicule, appuie brièvement sur la ~h~touche ~k~~VEHICLE_HORN~~w~.
-
-[SIREN_2]
-Pour déclencher la sirène de ce véhicule, appuie brièvement sur la ~h~touche ~k~~VEHICLE_HORN~~w~.
-
-[FM3_8C]
-~w~J'ai besoin de 100 000$ pour couvrir mes dépenses,
-
-[MCLOAD]
-Chargement des données. Ne pas retirer la memory card (PS2) de la fente pour MEMORY CARD 1, ni réinitialiser ou éteindre la console.
-
-[FES_GME]
-Erreur de lecture sur la memory card (PS2) de la fente pour MEMORY CARD 1. Vérifie-la et réessaie.
-
-[FESZ_QF]
-Veux-tu vraiment formater la memory card (PS2) de la fente pour MEMORY CARD 1?
-
-[FESZ_LS]
-Chargement réussi.
-
-[RM3_5]
-~g~Tu as ~1~ des 6 paquets de preuves.
-
-[LOVE3_2]
-~g~Tu as récupéré tous les paquets! Rapporte-les à Donald Love.
-
-[LOVE4_4]
-~g~Rapporte le paquet à Donald Love!
-
-[CLZOON]
-Show Cull Zones On
-
-[CLZOOF]
-Show Cull Zones Off
-
-[CRRGON]
-ShowCarRoadGroups On
-
-[CRGOFF]
-ShowCarRoadGroups Off
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[DBGFON]
-CTheScripts::DbgFlag On
-
-[DBFOFF]
-CTheScripts::DbgFlag Off
-
-[DSTRON]
-Debug Streaming Requests On
-
-[DSTROFF]
-Debug Streaming Requests Off
-
-[FED_DFL]
-CTheScripts::DbgFlag
-
-[FED_DLS]
-Big White Debug Light Switched
-
-[FED_DSR]
-Debug Streaming Requests
-
-[FED_PAH]
-Parse Heap
-
-[FED_RCD]
-CCullZones::RecalculateCullZoneData
-
-[FED_RID]
-Reload IDE
-
-[FED_RIP]
-Reload IPL
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FED_SCR]
-Show Car Road Grups
-
-[FED_SCZ]
-Show Cull Zones
-
-[FED_SPR]
-Show Ped Road Groups
-
-[GORLEV]
-Gore Level
-
-[LITTLE]
-LITTLE T
-
-[NICK]
-NICK LOVE
-
-[PARSHP]
-Parse Heap
-
-[PDRGON]
-ShowPedRoadGroups On
-
-[PRGOFF]
-ShowPedRoadGroups Off
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[SCASSL]
-Sick Fuck Selected
-
-[SCSCSL]
-Sick Fucker Selected
-
-[SHPLON]
-gbShowCollisionPolys On
-
-[SHPLOF]
-gbShowCollisionPolys Off
-
-[SICSIC]
-Sick Fucker
-
-[SICASS]
-Sick Fuck
-
-[FEB_SAV]
-Charger
-
-[FEP_SAV]
-CHARGER PARTIE
-
-[AS2_12A]
-~g~Quand t'auras renversé le premier étal, t'auras plus que 8 minutes avant que le Cartel prévienne ses revendeurs!
-
-[AS3_1A]
-~g~Et maintenant, rejoins la ~b~bouée repère!
-
-[NOCONT]
-Reconnecte une manette analogique (DUALSHOCK#) ou manette analogique (DUALSHOCK#2) au port de manette 1 pour continuer.
-
-[BET_JB]
-TRAHI PAR CATALINA, SA PETITE AMIE, ET LAISSE POUR MORT. JUGE COUPABLE ET CONDAMNE A UNE PEINE DE PRISON, IL COMMENCE SA PEINE AU PENITENCIER DE LIBERTY. MAIS UNE SEULE ET UNIQUE PENSEE LE HANTE...... LA VENGEANCE !
-
-[END_A]
-Les habitants de Cedar Grove subissent les conséquences
-
-[END_B]
-psychologiques de l'attentat qui a frappé
-
-[END_C]
-leur quartier, hier.
-
-[END_D]
-Un riverain, Clive Denver, a donné à la police la description
-
-[END_E]
-d'un homme armé qu'il a vu fuir du secteur, accompagné d'une femme aux cheveux noirs.
-
-[END_F]
-Oh, tu sais, on va bien s'amuser, parce que, tu sais, oui, tu le sais,
-
-[END_G]
-je t'aime, hein, je t'aime de tout mon coeur, tu es si beau, si fort,
-
-[END_H]
-tu es l'homme que j'ai toujours rêvé d'avoir à mes côtés !
-
-[END_I]
-Peu importe, j'en étais où, moi ?
-
-[END_J]
-Oh, je sais plus. Mais tu sais ce que c'est, hein ?
-
-[END_K]
-Les explosions ont retenti près des habitations, semant Le trouble dans le quartier. Les gens couraient dans tous les sens à la recherche d'un abri.
-
-[END_L]
-Plusieurs civils ont été blessés dans la panique alors que les forces de l'ordre
-
-[END_M]
-échangeaient des coups de feu avec un hélicoptère qui survolait le barrage.
-
-[END_N]
-Ouais, d'ici, on a une vue imprenable sur les jardins.
-
-[END_O]
-Lorsque l'hélico a enfin été bousillé,
-
-[END_P]
-c'était encore plus grandiose qu'un feu d'artifices !
-
-[END_Q]
-On recense déjà plus de vingt morts mais
-
-[END_R]
-la police continue à découvrir des corps sous les décombres.
-
-[END_S]
-Les rumeurs selon lesquelles les morts appartenaient au cartel des Colombiens
-
-[END_T]
-n'ont pas été officiellement démenties.
-
-[END_U]
-Il n'y a toujours aucune piste qui expliquerait la raison de ce massacre.
-
-[END_V]
-Je me suis cassé un ongle et ma mise en plis est foutue ! Tu le crois, ça ?
-
-[END_W]
-Ca m'avait coûté 50 dollars...
-
-[PAPER1]
-UN CRIMINEL TRAHI PAR SA PETITE AMIE ET COMPLICE. LES JURES RECONNAISSENT, LE VOLEUR ARME, COUPABLE A L'UNANIMITE!
-
-[PAPER2]
-LOVE, CONDAMNE A DIX ANS FERME !
-
-[FEB_CPC]
-Configuration des commandes
-
-[FEC_PED]
-Commandes à pied
-
-[FEC_VEH]
-Commandes des véhicules
-
-[FEC_FPR]
-Commandes en vue subjective
-
-[FEC_CMM]
-Commandes principales
-
-[FEC_PWL]
-Aller à gauche
-
-[FEC_PWR]
-Aller à droite
-
-[FEC_PWF]
-Avancer
-
-[FEC_PWT]
-Avancer vers caméra
-
-[FEC_PLB]
-Vue arrière
-
-[FEC_PFR]
-Tirer
-
-[FEC_CLE]
-Défilement Gauche des armes
-
-[FEC_CRI]
-Défilement Droite des armes
-
-[FEC_LKT]
-Verrouiller cible
-
-[FEC_PJP]
-Saut à pied
-
-[FEC_PSP]
-Sprint à pied
-
-[FEC_PSH]
-Tir à pied
-
-[FEC_TLF]
-Cible suivante Gauche
-
-[FEC_TRG]
-Cible suivante Droite
-
-[FEC_CCM]
-Centrer caméra derrière joueur
-
-[FEC_SZI]
-Fusil à lunette zoom avant
-
-[FEC_SZO]
-Fusil à lunette zoom arrière
-
-[FEC_LKL]
-Regarder à gauche en vue subjective
-
-[FEC_LRT]
-Regarder à droite en vue subjective First Person Look Right
-
-[FEC_LUP]
-Regarder en haut en vue subjective
-
-[FEC_LDN]
-Regarder en bas en vue subjective
-
-[FEC_LBH]
-Regarder derrière le véhicule
-
-[FEC_LLF]
-Regarder à gauche du véhicule
-
-[FEC_LRG]
-Regarder à droite du véhicule
-
-[FEC_HRN]
-Klaxon
-
-[FEC_HBR]
-Frein à main
-
-[FEC_ACL]
-Accélérer
-
-[FEC_BRK]
-Freiner
-
-[FEC_TSM]
-Activer/Désactiver sous-missions
-
-[FEC_CRD]
-Changer la station de radio
-
-[FEC_ENT]
-Entrer/Sortir d'un véhicule
-
-[FEC_WPN]
-Tirer
-
-[FEC_PAS]
-Pause
-
-[FEC_FPO]
-Changer d'arme en vue subjective
-
-[FEC_SMS]
-Afficher/Masquer curseur
-
-[FEC_CMS]
-Changer de mode de caméra
-
-[FEC_TSS]
-Faire une capture d'écran
-
-[FEN_NET]
-Réseau
-
-[FEN_CON]
-Connexion
-
-[FEN_GAM]
-Trouver partie
-
-[FEN_TYP]
-Type de partie
-
-[FEN_TY0]
-Deathmatch
-
-[FEN_TY1]
-Furtif en Deathmatch
-
-[FEN_TY2]
-Deathmatch par équipes
-
-[FEN_TY3]
-Furtif en Deathmatch par équipes
-
-[FEN_TY4]
-Planquer l'argent
-
-[FEN_TY5]
-Capturer le drapeau
-
-[FEN_TY6]
-Rat Race
-
-[FEN_TY7]
-Domination
-
-[FEN_NAM]
-Nom :
-
-[FEN_GNA]
-Nom partie :
-
-[FEM_MAP]
-Choisir carte
-
-[FEN_PLS]
-Réglages joueur
-
-[FEN_PLC]
-Couleur joueur
-
-[FEM_MA0]
-Liberty City
-
-[FEM_MA1]
-Le Quartier Rouge
-
-[FEM_MA2]
-Chinatown
-
-[FEM_MA3]
-La Tour
-
-[FEM_MA4]
-Le Dépotoir
-
-[FEM_MA5]
-Le Parc Industriel
-
-[FEM_MA6]
-Les Docks
-
-[FEM_MA7]
-Staunton
-
-[FEC_EMS]
-Touches clavier uniquement
-
-[FEC_DBG]
-Menu Debug
-
-[FEC_TGD]
-Alterner manette jeu/debug
-
-[FEC_TDO]
-Désactiver caméra debug
-
-[FEC_IVH]
-Inverser souris horizontale
-
-[FEC_MSL]
-BGS
-
-[FEC_MSM]
-BMS
-
-[FEC_MSR]
-BDS
-
-[FEC_QUE]
-???
-
-[FEC_TWO]
-Deux touches clavier au maximum
-
-[FEC_UMS]
-Boutons souris uniquement
-
-[FEC_OMS]
-Un bouton souris au maximum
-
-[FEC_UJS]
-Un bouton joystick au maximum
-
-[FEC_OJS]
-Un bouton joystick maximum par action
-
-[FEC_PTL]
-Utiliser verrouillage de cible avec commande de tir gauche
-
-[FEC_PTR]
-Utiliser verrouillage de cible avec commande de tir droite
-
-[FEC_LBC]
-Utiliser regarder gauche avec regarder droite
-
-[FEC_JBO]
-JOY ~1~
-
-[NO_PAUZ]
-Impossible de mettre en pause en multijoueur. Appuyez deux fois pour quitter !
-
-[FEM_SL1]
-Emplacement 1 libre
-
-[FEM_SL2]
-Emplacement 2 libre
-
-[FEM_SL3]
-Emplacement 3 libre
-
-[FEM_SL4]
-Emplacement 4 libre
-
-[FEM_SL5]
-Emplacement 5 libre
-
-[FEM_SL6]
-Emplacement 6 libre
-
-[FEM_SL7]
-Emplacement 7 libre
-
-[FEM_SL8]
-Emplacement 8 libre
-
-[FEM_MM]
-MENU PRINCIPAL
-
-[FEM_SNG]
-Nouvelle partie
-
-[FEM_QTW]
-Quitter
-
-[FEQ_SRE]
-Etes-vous sûr de vouloir quitter ? Votre progression depuis la dernière sauvegarde sera perdue. Continuer ?
-
-[FEQ_SRW]
-Etes-vous sûr de vouloir quitter la partie ?
-
-[FEG_SRV]
-SERVEUR
-
-[FEG_MAP]
-CARTE
-
-[FEG_PLY]
-JOUEURS
-
-[FEG_TYP]
-TYPE
-
-[FEG_PNG]
-PING
-
-[FET_FG]
-TROUVER PARTIE
-
-[FET_SP]
-SOLO
-
-[FET_MP]
-MULTIJOUEUR
-
-[FET_HG]
-CREER UNE PARTIE
-
-[FET_PS]
-CONFIG. JOUEURS
-
-[FET_CON]
-CONNEXION
-
-[FET_AUD]
-CONFIG. AUDIO
-
-[FET_GFX]
-CONFIG. EFFETS SPECIAUX
-
-[FET_DIS]
-CONFIG. AFFICHAGE
-
-[FET_LAN]
-CHOIX LANGUE
-
-[FET_LG]
-CHARGER PARTIE
-
-[FET_DG]
-SUPPRIMER PARTIE
-
-[FET_NG]
-NOUVELLE PARTIE
-
-[FET_SG]
-SAUVEGARDER PARTIE
-
-[FET_MAP]
-CHOISIR CARTE
-
-[FET_GT]
-TYPE DE PARTIE
-
-[FET_CTL]
-CONFIG. PERIPHERIQUE
-
-[FET_OPT]
-OPTIONS
-
-[FET_QG]
-QUITTER PARTIE
-
-[FET_STA]
-STATISTIQUES
-
-[FET_BRE]
-BRIEFINGS
-
-[FEC_WAR]
-Avertissement
-
-[FEC_OKK]
-O.K.
-
-[FED_CON]
-Confirmation de suppression de fichier
-
-[FES_SSC]
-Sauvegarde de la partie effectuée
-
-[DEL_FNM]
-Suppression du fichier effectuée
-
-[PCLOAD]
-Chargement des données du fichier
-
-[PCRESRT]
-Redémarrage de Grand Theft Auto III
-
-[FEC_DLF]
-Erreur lors de suppression
-
-[FEC_SVU]
-Erreur lors de la sauvegarde
-
-[FEC_LUN]
-Erreur lors du chargement. Fichier corrompu, veuillez le supprimer.
-
-[FEN_PLA]
-Nombre de joueurs :
-
-[FET_NON]
-AUCUNE PARTIE DISPONIBLE
-
-[FET_SFG]
-RECHERCHE DE PARTIES...
-
-[FET_SRT]
-TRI DES PARTIES...
-
-[FEF_LAN]
-RESEAU
-
-[FEF_INT]
-INTERNET
-
-[FET_REF]
-Rafraîchir
-
-[FET_FIL]
-Filtre
-
-[FET_JG]
-Rejoindre
-
-[FEC_NTW]
-Talk To Network
-
-[FEC_ESR]
-Utilisation restreinte de la touche Echap
-
-[FEC_GSL]
-Show head bob:
-
-[FIL_FLT]
-FILTRER LISTE DES PARTIES
-
-[FET_SAN]
-NOUVELLE PARTIE
-
-[FIL_MAP]
-Carte :
-
-[FIL_SRV]
-Serveur :
-
-[FIL_TYP]
-Type de partie :
-
-[FIL_SPC]
-Parties avec espace disponible ?
-
-[FIL_PNG]
-Ping :
-
-[FEN_UKH]
-Hôte inconnu
-
-[FEN_UKM]
-Carte non trouvée
-
-[FEN_UKT]
-Type de partie non trouvé
-
-[FEN_NCI]
-VOUS N'ETES PAS CONNECTE A INTERNET
-
-[FET_PAU]
-MENU PAUSE
-
-[FET_SGA]
-COMMENCER PARTIE
-
-[FEC_SGJ]
-Régler joystick
-
-[FEC_PAD]
-Manette
-
-[FEC_JOY]
-Joystick
-
-[FEC_WHL]
-Volant
-
-[FEC_CNT]
-Type de périphérique :
-
-[FET_APL]
-APPLIQUER
-
-[FES_CSA]
-Sélectionnez une apparence dans la liste suivante :
-
-[FES_SKN]
-NOM DE L'APPARENCE
-
-[FES_DAT]
-DATE
-
-[FES_NON]
-AUCUNE APPARENCE DISPONIBLE
-
-[FEA_FM9]
-LECTEUR MP3
-
-[FESZ_QZ]
-Etes-vous sûr de vouloir sauvegarder cette partie ?
-
-[FES_CGA]
-Emplacements disponibles :
-
-[FES_SCG]
-Sauvegarder la partie actuelle ?
-
-[FES_LCG]
-Charger la partie et continuer à jouer ?
-
-[FEC_FIR]
-Tirer
-
-[FEC_NWE]
-Arme suivante
-
-[FEC_PWE]
-Arme précédente
-
-[FEC_FOR]
-Avant
-
-[FEC_BAC]
-Arrière
-
-[FEC_LEF]
-Gauche
-
-[FEC_RIG]
-Droite
-
-[FEC_ZIN]
-Zoom avant
-
-[FEC_ZOT]
-Zoom arrière
-
-[FEC_EEX]
-Entrer+sortir
-
-[FEC_RAD]
-Radio
-
-[FEC_SUB]
-Sous-mission
-
-[FEC_CMR]
-Changer caméra
-
-[FEC_JMP]
-Sauter
-
-[FEC_SPN]
-Sprint
-
-[FEC_HND]
-Frein à main
-
-[FEC_TUL]
-Tourelle gauche
-
-[FEC_TUR]
-Tourelle droite
-
-[FEC_LOL]
-Regarder à gauche
-
-[FEC_LOR]
-Regarder à droite
-
-[FEC_NTR]
-Cible suivante
-
-[FEC_PTT]
-Cible précédente
-
-[FEC_LBA]
-Regarder en arrière
-
-[FEC_CEN]
-Centrer caméra
-
-[FEC_UND]
-(NON)
-
-[FET_CFT]
-A PIED
-
-[FET_CCR]
-EN VOITURE
-
-[CVT_MSG]
-Conversion des textures vers un format optimal pour votre carte graphique
-
-[FET_CAC]
-ACTION
-
-[FEC_IBT]
--
-
-[FEC_SPC]
-ESP
-
-[FEC_MXO]
-MXB1
-
-[FEC_MXT]
-MXB2
-
-[FEC_UNB]
-NON UTILISE
-
-[FET_CME]
-TYPE DE COMMANDES
-
-[FET_RDK]
-REDEFINIR COMMANDES
-
-[FET_AMS]
-PARAMETRES SOURIS
-
-[FET_STI]
-CONFIG. COMMANDES STANDARD
-
-[FET_CTI]
-CONFIG. COMMANDES NORMALES
-
-[FET_MTI]
-CONFIG. SOURIS
-
-[FET_DAM]
-MODELAGE ACCOUST. DYNAMIQUE
-
-[FEC_TFL]
-Tourelle Gauche
-
-[FEC_TFR]
-Tourelle Droite
-
-[FEC_TFU]
-Tourelle /Dodo Haut
-
-[FEC_TFD]
-Tourelle /Dodo Bas
-
-[FEC_MWF]
-MOLETTE HAUT
-
-[FEC_MWB]
-MOLETTE BAS
-
-[FEC_ORR]
-ou
-
-[FEC_NUS]
-NON UTILISE
-
-[FEC_LUD]
-Regarder Haut
-
-[FEC_LDU]
-Regarder Bas
-
-[FEC_CMP]
-COMBO : REGARDER G+D
-
-[FEC_NTT]
-No Text Yet For This Key
-
-[FEC_FNC]
-F~1~
-
-[FEC_IRT]
-INSER
-
-[FEC_DLL]
-SUPPR
-
-[FEC_HME]
-ORIG
-
-[FEC_END]
-FIN
-
-[FEC_PGU]
-PAGE HAUT
-
-[FEC_PGD]
-PAGE BAS
-
-[FEC_UPA]
-HAUT
-
-[FEC_DWA]
-BAS
-
-[FEC_LFA]
-GAUCHE
-
-[FEC_RFA]
-DROITE
-
-[FEC_NUM]
-PAV.NUM
-
-[FEC_NMN]
-PAV.NUM~1~
-
-[FEC_FWS]
-PAV.NUM /
-
-[FEC_PLS]
-PAV.NUM +
-
-[FEC_MIN]
-PAV.NUM -
-
-[FEC_DOT]
-PAV.NUM .
-
-[FEC_NLK]
-VERR NUM
-
-[FEC_ETR]
-ENTR
-
-[FEC_SLK]
-ARRET DEFIL
-
-[FEC_PSB]
-PAUSE
-
-[FEC_BSP]
-RET. ARR.
-
-[FEC_TAB]
-TAB
-
-[FEC_CLK]
-VERR MAJ
-
-[FEC_RTN]
-RETOUR
-
-[FEC_LSF]
-MAJ. G
-
-[FEC_RSF]
-MAJ. D
-
-[FEC_LCT]
-CTRL G
-
-[FEC_RCT]
-CTRL D
-
-[FEC_LAL]
-ALT G
-
-[FEC_RAL]
-ALT D
-
-[FEC_LWD]
-WIN G
-
-[FEC_RWD]
-WIN D
-
-[FEC_WRC]
-CLIC WIN
-
-[WIN_TTL]
-Grand Theft Auto III
-
-[WIN_95]
-Grand Theft Auto III n'est pas compatible WINDOWS 95
-
-[WIN_DX]
-Grand Theft Auto III requiert la version 8.1 de DirectX minimum.
-
-[WIN_VDM]
-Grand Theft Auto III requiert au moins 12 Mo de mémoire vidéo libre.
-
-[DIAB3_G]
-Arriba !
-
-[FEM_RES]
-REPRENDRE PARTIE
-
-[FES_SNG]
-NOUVELLE PARTIE
-
-[FEM_SP]
-MODE SOLO
-
-[FEM_MP]
-MODE MULTIJOUEUR
-
-[FEM_QT]
-QUITTER
-
-[FES_SG]
-NOUVELLE PARTIE
-
-[FES_LG]
-CHARGER PARTIE
-
-[FEM_HST]
-HEBERGER PARTIE
-
-[FEM_OPT]
-OPTIONS
-
-[FEM_DBG]
-DEBUG
-
-[FET_PSU]
-PARAMETRES JOUEUR
-
-[FET_DEF]
-PAR DEFAUT
-
-[FED_BRI]
-LUMINOSITE
-
-[FED_TRA]
-TRAINEES
-
-[FEM_LOD]
-DISTANCE MODELES
-
-[FEM_VSC]
-SYNCHRO VIDEO
-
-[FEM_FRM]
-RESTRICTION VIDEO
-
-[FED_RES]
-RESOLUTION ECRAN
-
-[FED_WIS]
-PLEIN ECRAN
-
-[FEDS_TB]
-RETOUR
-
-[FEA_MUS]
-MUSIQUE
-
-[FEA_SFX]
-EFFETS SPECIAUX
-
-[FEA_RSS]
-STATION RADIO
-
-[FEL_ENG]
-ANGLAIS
-
-[FEL_FRE]
-FRANCAIS
-
-[FEL_GER]
-ALLEMAND
-
-[FEL_ITA]
-ITALIEN
-
-[FEL_SPA]
-ESPAGNOL
-
-[FEA_3DH]
-CONFIG. CARTE-SON
-
-[FEA_SPK]
-CONFIG. HAUT-PARLEURS
-
-[FEA_2SP]
-2 HAUT-PARLEURS
-
-[FEA_4SP]
-PLUS DE 2 HAUT-PARLEURS
-
-[FEA_EAR]
-CASQUE
-
-[FEA_NAH]
-PAS DE CARTE-SON
-
-[FET_SNG]
-NOUVELLE PARTIE
-
-[FEN_STA]
-COMMENCER PARTIE
-
-[GMLOAD]
-CHARGER PARTIE
-
-[GMSAVE]
-SAUVEGARDER PARTIE
-
-[FES_DGA]
-EFFACER PARTIE
-
-[FEM_NON]
-AUCUN
-
-[FEC_IVV]
-INVERSER SOURIS VERTIC.
-
-[FEC_MSH]
-SENSIBILITE SOURIS
-
-[FET_CCN]
-COMMANDES : NORMALES
-
-[FET_SCN]
-COMMANDES : STANDARD
-
-[FES_SET]
-UTILISER MODELE
-
-[GHOST]
-Fantôme
-
-[WIN_RSZ]
-Impossible de choisir la nouvelle résolution.
-
-[FET_APP]
-BGS, RETOUR POUR APPLIQUER LE NOUV. PARAMETRE
-
-[FET_HRD]
-PARAMETRES PAR DEFAUT RETABLIS
-
-[FET_MST]
-DIRECTION CONTROLEE PAR LA SOURIS
-
-[FEC_STR]
-ETOILE PAV.NUM.
-
-[FET_MIG]
-GAUCHE, DROITE, MOLETTE SOURIS POUR REGLER
-
-[FET_CIG]
-RETOUR ARRIERE POUR EFFACER - BGS, RETOUR POUR CHANGER
-
-[FET_RIG]
-SELECTIONNEZ NOUV. TOUCHE POUR CETTE ACTION OU ECHAP POUR ANNULER
-
-[FET_EIG]
-IMPOSSIBLE DE PARAMETRER UNE TOUCHE POUR CETTE ACTION
-
-[NO_PCCD]
-Insérez le disque 2 de Grand Theft Auto III dans le lecteur ou appuyez sur ECHAP pour annuler.
-
-[CVT_ERR]
-Espace disque épuisé. Libérez de la mémoire sur votre disque dur pour continuer. Appuyez sur ECHAP pour annuler.
-
-[FED_SUB]
-SOUS-TITRES
-
-[FET_DSN]
-Skin joueur par défaut.bmp
-
-[JM3]
-'HAUT LES MAINS'
-
-[EBAL]
-'A MOI LIBERTY'
-
-[LM4]
-'MAQUEREAU EN BOITE'
-
-[REPLAY]
-RALENTI
-
-[FEC_SFT]
-MAJ
-
-[CRED254]
-RESPONSABLE STUDIO
-
-[CVT_CRT]
-Pour convertir les textures pour votre carte graphique, connectez-vous à un compte Administrateur. Pour quitter, appuyez sur ECHAP.
-
-[FEM_ON]
-AVEC
-
-[FEM_OFF]
-SANS
-
-[FEM_YES]
-OUI
-
-[FEM_NO]
-NON
-
-[FES_WAR]
-Sauvegarde en cours...
-
-[FED_DLW]
-Suppression en cours...
-
-[FED_LDW]
-Chargement en cours...
-
-[FEC_SLC]
-Emplacement corrompu
-
-[FED_LFL]
-Echec du chargement de la sauvegarde. La partie va être relancée.
-
-[FET_RSO]
-PARAMETRE D'ORIGINE RETABLI
-
-[FET_RSC]
-MATERIEL INDISPONIBLE - PARAMETRE D'ORIGINE RETABLI
-
-[CRED270]
-MIKE HONG
-
-[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
deleted file mode 100644
index c48d7757..00000000
--- a/utils/gxt/german.txt
+++ /dev/null
@@ -1,8028 +0,0 @@
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
-
-[DEFNAM]
-Claude----------------------
-
-[ARSE]
-ü ß ã
-
-[IN_VEH]
-~g~Hey! Zurück ins Auto!!
-
-[IN_VEH2]
-~g~Du brauchst einen Schlitten für diesen Job!
-
-[IN_BOAT]
-~g~Du brauchst ein Boot für diesen Job!
-
-[HEY]
-~g~Keine Alleingãnge. Halt die Gang beisammen!
-
-[HEY2]
-~g~Nicht aufteilen. Halt die Leute zusammen!
-
-[HEY3]
-~g~Du hast deinen besten Mann verloren. Los, zurück! Hol 8-Ball!
-
-[HEY4]
-~g~Wenn du Misty verlierst, kriegst du's mit Luigi zu tun. Los, hol sie.
-
-[HEY5]
-~g~Eines der Girls fehlt. Los, zurück! Treib das Mãdchen auf!
-
-[HEY6]
-~g~Du stehst mit deiner Ehre für den Yakuza Kanbu ein. Du musst ihn beschützen!
-
-[HEY7]
-~g~Ein Mann mehr kann nicht schaden. Los, zurück. Hol deinen Kontaktmann ab!
-
-[HEY8]
-~g~Beschützen heißt so viel wie beschützen - Beschütze den alten Asiaten!
-
-[HEY9]
-~g~Du willst wissen, was so geredet wird? Sprich mit deinem Kontaktmann!
-
-[HELP2_A]
-Drücke die ~h~/-Taste~w~, um zu ~h~sprinten.
-
-[HELP3]
-Du kannst nur kurze Zeit sprinten, ohne müde zu werden.
-
-[HELP4_A]
-Drücke die~h~ ~k~~VEHICLE_ACCELERATE~-Taste~w~, um zu ~h~beschleunigen.
-
-[HELP4_D]
-Drücke den~h~ Rechten Analog-Stick nach oben, um zu ~h~beschleunigen.
-
-[HELP5_A]
-Drücke die~h~ ~k~~VEHICLE_BRAKE~-Taste~w~, um zu ~h~bremsen~w~, oder um ~h~zurückzusetzen~w~, wenn das Fahrzeug steht.
-
-[HELP5_D]
-Zieh den ~h~Rechten Analog-Stick~w~ zurück, um zu ~h~bremsen~w~, oder um ~h~zurückzusetzen~w~, wenn das Fahrzeug steht.
-
-[HELP6_A]
-Drücke die~h~ ~k~~VEHICLE_HANDBRAKE~-Taste~w~, um die ~h~Handbremse anzuziehen.
-
-[HELP6_C]
-Drücke die~h~ ~k~~VEHICLE_HANDBRAKE~-Taste~w~, um die ~h~Handbremse anzuziehen.
-
-[HELP6_D]
-Drücke die~h~ ~k~~VEHICLE_HANDBRAKE~-Taste~w~, um die ~h~Handbremse anzuziehen.
-
-[HELP7_A]
-Halte die~h~ ~k~~PED_LOCK_TARGET~-Taste ~w~gedrückt, um mit dem Prãzisionsgewehr zu zielen.
-
-[HELP7_D]
-Halte die~h~ ~k~~PED_LOCK_TARGET~-Taste ~w~gedrückt, um mit dem Prãzisionsgewehr zu zielen.
-
-[HELP8_A]
-Drücke die~h~ ~k~~PED_SNIPER_ZOOM_IN~-Taste~w~, um ~h~an das Ziel heranzuzoomen ~w~und die~h~ ~k~~PED_SNIPER_ZOOM_OUT~-Taste~w~,um ~h~herauszuzoomen ~w~.
-
-[HELP9_A]
-Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um das Prãzisionsgewehr abzufeuern.
-
-[HELP10]
-Dieser Stern zeigt an, dass du von der Polizei gesucht wirst.
-
-[HELP11]
-Je mehr Sterne, desto dringender wirst du gesucht.
-
-[HELP13]
-Manchmal musst du vielleicht Wege finden, die das Radar nicht zeigt.
-
-[TIMER]
-Diese Mission hat ein Zeitlimit. Du musst sie beendet haben, bevor die Zeit um ist.
-
-[MISTY1]
-~r~Misty ist hinüber!
-
-[OUT_VEH]
-~g~Raus aus dem Fahrzeug!
-
-[GARAGE]
-Fahr den Wagen in eine Garage und geh dann nach draußen.
-
-[WANTED1]
-~g~Schüttle die Cops ab. Verringere deinen Fahndungslevel.
-
-[NODOORS]
-~g~Das sind keine Sardinen! Besorg einen Wagen mit ausreichend Sitzplãtzen.
-
-[TRASH]
-~g~Du hast deine Karre ziemlich geschrottet! Repariere sie!
-
-[WRECKED]
-~r~Das Fahrzeug ist Schrott!
-
-[HORN]
-~g~Drück auf die Hupe.
-
-[HORN4]
-Drück die ~h~L3-Taste~w~, um zu hupen.
-
-[NOMONEY]
-~g~Du brauchst mehr Cash!
-
-[OUTTIME]
-~r~Zu langsam, Mann, zu langsam!
-
-[SPOTTED]
-~r~Sie sind dir auf den Fersen!
-
-[REWARD]
-BELOHNUNG $~1~
-
-[GAMEOVR]
-GAME OVER
-
-[Z]
-Z-Achse Wert: ~1~
-
-[M_FAIL]
-MISSION FEHLGESCHLAGEN!
-
-[M_PASS]
-MISSION ERFÜLLT! $~1~
-
-[O_PASS]
-JOB ERLEDIGT!
-
-[O_FAIL]
-JOB FEHLGESCHLAGEN!
-
-[DEAD]
-AUSSER GEFECHT!
-
-[BUSTED]
-VERHAFTET!
-
-[S_PROMP]
-Außerhalb einer Mission kannst du dein ~h~Spiel hier speichern~w~. Dies rückt die Uhr um sechs Stunden vor.
-
-[NUMBER]
-~1~
-
-[SCORE]
-$~1~
-
-[LOADCAR]
-LADE FAHRZEUG... (ABBRECHEN MIT L1)
-
-[CARSOFF]
-Deaktivierte Fahrzeuge.
-
-[CARS_ON]
-Aktivierte Fahrzeuge.
-
-[TEXTXYZ]
-Schreibe Koordinaten in Datei...
-
-[CHEATON]
-Cheat Modus AN
-
-[CHEATOF]
-Cheat Modus AUS
-
-[UZI_IN]
-Die Uzi ist jetzt im AmmuNation zu haben!
-
-[IMPORT1]
-Geh nach draußen und warte auf dein Fahrzeug.
-
-[PAGEB1]
-Pistole wurde im Versteck angeliefert.
-
-[PAGEB2]
-Uzi wurde im Versteck angeliefert.
-
-[PAGEB3]
-Kugelsichere Weste wurde im Versteck angeliefert.
-
-[PAGEB4]
-Schrotflinte wurde im Versteck angeliefert.
-
-[PAGEB5]
-Granaten wurden im Versteck angeliefert.
-
-[PAGEB6]
-Molotowcocktails wurden im Versteck angeliefert.
-
-[PAGEB7]
-AK47 wurde im Versteck angeliefert.
-
-[PAGEB8]
-Prãzisionsgewehr wurde im Versteck angeliefert.
-
-[PAGEB9]
-M16 wurde im Versteck angeliefert.
-
-[PAGEB10]
-Raketenwerfer wurde im Versteck angeliefert.
-
-[PAGEB11]
-Flammenwerfer wurde im Versteck angeliefert.
-
-[WANT_A]
-Verhaftet wirst du nur, wenn die Polizei nach dir ~h~fahndet.
-
-[WANT_B]
-Dein ~h~Fahndungslevel~w~ wird durch die Reihe von Sternen oben rechts auf dem Bildschirm dargestellt.
-
-[WANT_C]
-Du hast jetzt einen ~h~Fahndungslevel~w~ von eins...
-
-[WANT_D]
-zwei...
-
-[WANT_E]
-drei...
-
-[WANT_F]
-Steigt dein ~h~Fahndungslevel~w~, wirst du von besser ausgebildeten Polizisten gejagt.
-
-[WANT_G]
-Wirst du ~h~verhaftet~w~, wirst du zum nãchsten Polizeirevier gebracht.
-
-[WANT_H]
-Die Cops werden dir alle Waffen abnehmen und kassieren ein wenig Bestechungsgeld von dir.
-
-[WANT_I]
-Wenn dir das auf einer Mission passiert, ist die Mission fehlgeschlagen.
-
-[WANT_J]
-Im Verlauf des Spiels wirst du Möglichkeiten entdecken, deinen Fahndungslevel zu reduzieren.
-
-[WANT_K]
-Wenn du in einem Wagen sitzt, werden ~h~LACKIEREREIEN~w~ den Fahndungslevel ~h~annullieren.
-
-[HEAL_B]
-Wenn du ~h~'außer Gefecht'~w~ bist, wirst du zur nãchsten Klinik gebracht.
-
-[HEAL_C]
-Du verlierst alle Waffen, und die Ãrzte knöpfen dir ein wenig Cash für die Behandlung ab.
-
-[HEAL_E]
-Je lãnger du spielst, desto mehr Wege wirst du finden, dich selbst zu verarzten oder zu schützen.
-
-[DAM]
-SCHADEN:
-
-[KILLS]
-HITS:
-
-[FARES]
-FAHRTEN
-
-[BULL]
-GOLDBARREN
-
-[EVID]
-BEWEISMITTEL
-
-[HEALTH]
-ZUSTAND AUTO
-
-[COLLECT]
-GESAMMELT:
-
-[BOMB]
-Fahr deinen Wagen in die Bombenwerkstatt, um eine ~h~Bombe~w~ anzubringen. Kosten - ~h~$1000.
-
-[SAVE1]
-Geh durch den Eingang. So kannst du dein ~h~Spiel speichern~w~. Wãhrend einer Mission kannst du nicht speichern.
-
-[SAVE2]
-Jedes Fahrzeug, das in dieser Garage abgestellt wird, wird für dich aufbewahrt, wenn das Spiel gespeichert wird.
-
-[AMMU]
-Betritt den AmmuNation-Laden, um eine Waffe zu kaufen.
-
-[BRIDGE1]
-Wenn die Callahan Bridge repariert ist, kannst du nach Staunton Island rüber fahren.
-
-[TUNNEL]
-Wenn der Porter Tunnel geöffnet ist, kannst du nach Staunton Island rüber fahren.
-
-[LUIGI]
-LUIGI MISSIONEN
-
-[TONI]
-TONI MISSIONEN
-
-[JOEY]
-JOEY MISSIONEN
-
-[FRANK]
-SALVATORE MISSIONEN
-
-[DIABLO]
-DIABLO MISSIONEN
-
-[ASUKA]
-ASUKA MISSIONEN
-
-[B_SITE]
-ASUKA VORSTADT-MISSIONEN
-
-[KENJI]
-KENJI MISSIONEN
-
-[RAY]
-RAY MISSIONEN
-
-[LOVE]
-LOVE MISSIONEN
-
-[YARDIE]
-YARDIE MISSIONEN
-
-[HOOD]
-HOOD MISSIONEN
-
-[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]
-Portland Beach
-
-[LITTLEI]
-Saint Mark's
-
-[REDLIGH]
-Rotlichtbezirk
-
-[TOWERS]
-Hepburn Heights
-
-[HARWOOD]
-Harwood
-
-[ROADBR1]
-Callahan Bridge
-
-[ROADBR2]
-Callahan Bridge
-
-[TUNNELP]
-Porter Tunnel
-
-[BOMB1]
-8-Balls Werkstatt
-
-[COM_ZON]
-Staunton Island
-
-[STADIUM]
-Aspatria
-
-[HOSPI_2]
-Rockford
-
-[UNIVERS]
-Liberty Campus
-
-[CONSTRU]
-Fort Staunton
-
-[PARK]
-Belleville Park
-
-[COM_EAS]
-Newport
-
-[SHOPING]
-Bedford Point
-
-[YAKUSA]
-Torrington
-
-[SUB_ZON]
-Shoreside Vale
-
-[AIRPORT]
-Francis Int. Airport
-
-[PROJECT]
-Wichita Gardens
-
-[SUB_IND]
-Pike Creek
-
-[SWANKS]
-Cedar Grove
-
-[BIG_DAM]
-Cochrane Dam
-
-[SUB_ZO2]
-Shoreside Vale
-
-[SUB_ZO3]
-Shoreside Vale
-
-[CAR_1]
-Krankenwagen
-
-[CAR_2]
-Feuerwehrwagen
-
-[CAR_3]
-Polizei
-
-[CAR_4]
-Enforcer
-
-[CAR_5]
-Barracks
-
-[CAR_6]
-Rhino
-
-[CAR_7]
-FBI-Wagen
-
-[CAR_8]
-Securicar
-
-[CAR_9]
-Moonbeam
-
-[CAR_10]
-Kleinbus
-
-[CAR_11]
-Lkw
-
-[CAR_12]
-Linerunner
-
-[CAR_13]
-Trashmaster
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-Mr Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinel
-
-[CAR_25]
-Cheetah
-
-[CAR_26]
-Banshee
-
-[CAR_27]
-Stinger
-
-[CAR_28]
-Infernus
-
-[CAR_29]
-Esperanto
-
-[CAR_30]
-Kuruma
-
-[CAR_31]
-Stretch Limo
-
-[CAR_32]
-Perennial
-
-[CAR_33]
-Landstalker
-
-[CAR_34]
-Manana
-
-[CAR_35]
-Idaho
-
-[CAR_36]
-Stallion
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Cabbie
-
-[CAR_39]
-Buggy
-
-[LUIGIS]
-Luigis Club
-
-[GOAWAY]
-~g~Du bist bereits auf einer Mission!
-
-[LUIGGO]
-~g~Luigi checkt gerade ein paar neue Girls aus. Komm spãter wieder!
-
-[JOEYGO]
-~g~Joey ist mit Misty in der Stadt unterwegs. Komm spãter wieder!
-
-[TONIGO]
-~g~Toni ist mit seiner Mamma in der Oper. Probier's ein andermal!
-
-[KEMUGO]
-~g~Maria und Kemuri sind gerade beschãftigt. Versuch's spãter nochmal!
-
-[KENJGO]
-~g~Kenji ist bei einem Yakuza-Treffen. Schau ein andermal wieder vorbei.
-
-[RAYGO]
-~g~Ray hãngt gerade auf irgend einem anderen Klo rum. Komm spãter wieder!
-
-[LOVEGO]
-~g~Donald Love hat anderes zu tun. Vielleicht hat er spãter Zeit!
-
-[KENSGO]
-~g~Kenji hat zu tun! Komm spãter wieder!
-
-[ASUSGO]
-~g~Asuka hat gerade überhaupt keine Zeit!
-
-[HOODGO]
-~g~Die Hoods haben gerade keine Zeit!
-
-[WRONGT1]
-~g~Komm zwischen 05:00 und 21:00 wieder. Dann gibt's einen Job.
-
-[WRONGT2]
-~g~Komm zwischen 06:00 und 14:00 wieder. Dann gibt's einen Job.
-
-[WRONGT3]
-~g~Komm zwischen 15:00 und 00:00 wieder. Dann gibt's einen Job.
-
-[GUN_1A]
-Benutze die ~h~~k~~PED_CYCLE_WEAPON_RIGHT~-Taste ~w~und die ~h~~k~~PED_CYCLE_WEAPON_LEFT~-Taste~w~, um zwischen deinen Waffen zu wechseln.
-
-[GUN_2A]
-Halte die ~h~~k~~PED_LOCK_TARGET~-Taste ~w~gedrückt, um automatisch zu zielen. Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern! Versuch, die Ziele zu treffen...
-
-[GUN_2C]
-Halte die ~h~~k~~PED_LOCK_TARGET~-Taste ~w~gedrückt, um automatisch zu zielen. Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern! Versuch, die Ziele zu treffen...
-
-[GUN_2D]
-Halte die ~h~~k~~PED_LOCK_TARGET~-Taste ~w~gedrückt, um automatisch zu zielen. Drücke die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um zu feuern! Versuch, die Ziele zu treffen...
-
-[GUN_3A]
-Halte die ~h~~k~~PED_LOCK_TARGET~-Taste~w~ gedrückt und drücke die ~h~~k~~PED_CYCLE_TARGET_LEFT~-Taste~w~ oder die ~h~~k~~PED_CYCLE_TARGET_RIGHT~-Taste, um das Ziel zu wechseln.
-
-[GUN_3B]
-Halte die ~h~~k~~PED_LOCK_TARGET~-Taste~w~ gedrückt und drücke die ~h~~k~~PED_CYCLE_TARGET_LEFT~-Taste~w~ oder die ~h~~k~~PED_CYCLE_TARGET_RIGHT~-Taste, um das Ziel zu wechseln.
-
-[GUN_4A]
-Mit gedrückter ~h~~k~~PED_LOCK_TARGET~-Taste~w~ kannst du gehen oder laufen und behãltst dein Ziel im Visier.
-
-[GUN_4B]
-Mit gedrückter ~h~~k~~PED_LOCK_TARGET~-Taste~w~ kannst du gehen oder laufen und behãltst dein Ziel im Visier.
-
-[GUN_5]
-An diesen Pappkameraden kannst du zielen und schießen üben. Wenn du fertig bist, widme dich wieder deiner Mission.
-
-[TAXI1]
-~g~Besorg dir einen Passagier.
-
-[FARE1]
-~g~Fahrziel: ~w~'Meeouch Sex Kitten Club' ~g~im Rotlichtbezirk.
-
-[FARE2]
-~g~Fahrtziel: ~w~'Supa Save' ~g~in Portland View.
-
-[FARE3]
-~g~Fahrtziel: ~w~'Alte Schulhalle' ~g~in Chinatown.
-
-[FARE4]
-~g~Fahrtziel: ~w~'Greasy Joe's Cafe' ~g~in Callahan Point.
-
-[FARE5]
-~g~Fahrtziel: ~w~'AmmuNation' ~g~im Rotlichtbezirk.
-
-[FARE6]
-~g~Fahrtziel: ~w~'Easy Credit Autos' ~g~in Saint Mark's.
-
-[FARE7]
-~g~Fahrtziel: ~w~'Woody's Topless Bar' ~g~im Rotlichtbezirk.
-
-[FARE8]
-~g~Fahrtziel: ~w~'Marcos Bistro' ~g~in Saint Mark's.
-
-[FARE9]
-~g~Fahrtziel: ~w~'Import-Export Garage' ~g~in Portland Harbour.
-
-[FARE10]
-~g~Fahrtziel: ~w~'Punk Noodles' ~g~in Chinatown.
-
-[FARE12]
-~g~Fahrtziel: ~w~'Football Stadion' ~g~in Aspatria.
-
-[FARE13]
-~g~Fahrtziel: ~w~'Die Kirche' ~g~in Bedford Point.
-
-[FARE14]
-~g~Fahrtziel: ~w~'Das Casino' ~g~in Torrington.
-
-[FARE15]
-~g~Fahrtziel: ~w~'Liberty University' ~g~in Liberty Campus.
-
-[FARE16]
-~g~Fahrtziel: ~w~'Einkaufszentrum' ~g~in der Belleville Park Area.
-
-[FARE17]
-~g~Fahrtziel: ~w~'Museum' ~g~in Newport.
-
-[FARE18]
-~g~Fahrtziel: ~w~'AmCo Gebãude' ~g~in Torrington.
-
-[FARE19]
-~g~Fahrtziel: ~w~'Bolt Burgers' ~g~in Bedford Point.
-
-[FARE20]
-~g~Fahrtziel: ~w~'Der Park' ~g~in Belleville.
-
-[FARE21]
-~g~Fahrtziel: ~w~'Francis Int. Airport'.
-
-[FARE22]
-~g~Fahrtziel: ~w~'Cochrane Dam'.
-
-[FARE24]
-~g~Fahrtziel: ~w~'Die Klinik' ~g~in Pike Creek.
-
-[FARE25]
-~g~Fahrtziel: ~w~'Der Park' ~g~in Shoreside Vale.
-
-[FARE26]
-~g~Fahrtziel: ~w~'North West Towers' ~g~in Wichita Gardens.
-
-[NEW_TAX]
-GRÖSSER! SCHNELLER! HÃRTER! Neu! Borgnine Taxis jetzt in Harwood! Rufen Sie 555-BORGNINE! Heute noch!
-
-[TSCORE2]
-$~1~
-
-[IN_ROW]
-~1~ SERIEN-Bonus! $~1~
-
-[TTUTOR]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Taxi-Missionen an- oder abzuschalten.
-
-[TTUTOR2]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Taxi-Missionen an- oder abzuschalten.
-
-[ATUTOR2]
-~g~Fahre die Patienten VORSICHTIG in die Klinik.
-
-[A_TIME]
-+~1~ Sekunden
-
-[A_FULL]
-~r~Krankenwagen voll!!
-
-[A_RANGE]
-~g~Du bist außer Reichweite des Notarztfunks. Fahr nãher an die Klinik heran!
-
-[FTUTOR]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Feuerwehr Missionen an- oder abzuschalten.
-
-[FTUTOR2]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Feuerwehr Missionen an- oder abzuschalten.
-
-[F_PASS1]
-Feuer gelöscht!
-
-[F_RANGE]
-~g~Du bist außer Reichweite des Feuerwehrfunks. Fahr nãher an eine Feuerwache heran!
-
-[C_BREIF]
-~g~Verdãchtiger wurde zuletzt in der Gegend von ~a~ gesichtet.
-
-[C_RANGE]
-~g~Du bist außer Reichweite des Polizeifunks. Fahr nãher an ein Polizeirevier heran!
-
-[DODO_FT]
-Du bist ~1~ Sekunden geflogen!
-
-[EBAL_A]
-Ich kenn ein Plãtzchen im Rotlichtbezirk, wo wir untertauchen können.
-
-[EBAL_A1]
-Aber meine Hãnde sind im Eimer. Also, fahr du.
-
-[EBAL_1]
-Drücke die~h~ ~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um in ein Fahrzeug ~h~ein- oder auszusteigen~w~.
-
-[EBAL_1B]
-Drücke die~h~ ~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um in ein Fahrzeug ~h~ein- oder auszusteigen~w~.
-
-[EBAL_2]
-~g~Steig wieder in den Wagen!
-
-[EBAL_3]
-Dies ist das ~h~Radar~w~. Damit navigierst du durch die Stadt. Folge dem ~h~Leuchtpunkt~w~ auf dem ~h~Radar~w~, um das Versteck zu finden!
-
-[EBAL_D]
-Ich kenn einen, der hat Beziehungen zur Mafia. Er heißt Luigi.
-
-[EBAL_D1]
-Wir sind alte Bekannte. Vielleicht kann ich dir 'nen Job bei ihm verschaffen. Komm, hier rüber.
-
-[EBAL_E]
-Komm, wir gehen zu ihm. Ich stell dich vor.
-
-[EBAL_I]
-Der Boss kommt gleich zu dir raus...
-
-[EBAL_J]
-8-Ball hat oben was zu erledigen.
-
-[EBAL_K]
-Du könntest mir einen Gefallen tun.
-
-[EBAL_L]
-Eines meiner Girls braucht 'nen Fahrer. Schnapp dir ein Auto, hol Misty von der Klinik ab und bring sie her.
-
-[EBAL_N]
-Also lass die Hãnde am Lenkrad!
-
-[EBAL_4]
-~r~8-Ball ist tot!
-
-[EBAL_5]
-~g~Besorg dir ein Fahrzeug!
-
-[EBAL_6]
-~g~Hol Misty ab!
-
-[LM1]
-'LUIGIS GIRLS'
-
-[LM2]
-'KEIN SPANK FÜR DIE LADIES'
-
-[LM3]
-'MISTY UND DER MAFIOSO'
-
-[LM5]
-'DER BULLEN-BALL'
-
-[LM1_2]
-~g~Bring Misty zu Luigis Club.
-
-[LM1_3]
-~g~Drück auf die Hupe, damit die Kleine einsteigt.
-
-[LM1_6]
-~g~Steig wieder in den Wagen!
-
-[LM1_7]
-Halte neben Misty an und lass sie einsteigen.
-
-[LM1_8]
-Du kannst dir bei Luigi den nãchsten Job abholen oder Liberty City erkunden.
-
-[LM2_A]
-Da ist eine neue Droge in Umlauf, sie heißt SPANK.
-
-[LM2_E]
-Irgendein Kerl hat diesen Müll meinen Girls in Portland Harbour verabreicht.
-
-[LM2_B]
-Fahr hin und verabreich ihm ein paar mit 'nem Baseballschlãger!
-
-[LM2_G]
-Der Typ soll bezahlen für diese Beleidigung!
-
-[LM2_1]
-~g~Nimm sein Auto und spritz es um.
-
-[LM2_2A]
-Benutze die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um zu ~h~schlagen und zu treten~w~ oder um ~h~den Schlãger zu schwingen~w~!
-
-[LM2_2C]
-Benutze die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um zu ~h~schlagen und zu treten~w~ oder um ~h~den Schlãger zu schwingen~w~!
-
-[LM2_2D]
-Benutze die~h~ ~k~~PED_FIREWEAPON~-Taste~w~, um zu ~h~schlagen und zu treten~w~ oder um ~h~den Schlãger zu schwingen~w~!
-
-[LM2_3]
-~g~Stell das Auto in Luigis Garage ab!
-
-[LM2_4]
-~g~Lackiere das Auto um!
-
-[LM3_A]
-He, ich muss mit dir reden... Okay, Mick, wir reden spãter.
-
-[LM3_B]
-Na? Alles klar, mein Junge?
-
-[LM3_C]
-Der Sohn des Don, Joey Leone, will seine kleine Misty sehen.
-
-[LM3_D]
-Hol sie in Hepburn Heights ab.
-
-[LM3_E]
-Aber Vorsicht, das ist Diablo-Gebiet.
-
-[LM3_F]
-Dann bringst du sie rüber zu seiner Werkstatt in Trenton. Aber dalli.
-
-[LM3_H]
-Also, Augen auf die Straße und nicht auf Misty!
-
-[LM3_1D]
-Drücke die~h~ L3-Taste~w~, um zu ~h~hupen~w~. So weiß Misty, dass du da bist.
-
-[LM3_2]
-~g~Fahr Misty zu Joey.
-
-[LM3_4]
-~g~Hol Misty ab!
-
-[LM3_5]
-Du arbeitest jetzt fest für Luigi? War auch Zeit, dass er 'nen verlãsslichen Fahrer anbringt.
-
-[LM3_7]
-Ich bin gleich bei dir, Süße.
-
-[LM3_10]
-~g~Besorg dir ein Auto!
-
-[LM4_B]
-Fahr hin und regle das für mich.
-
-[LM4_C]
-Wenn du 'ne Knarre brauchst, geh zum Hintereingang von AmmuNation, gegenüber der U-Bahn.
-
-[LM5_A]
-Der Polizeiball findet in der alten Schulhalle nahe der Callahan Bridge statt,
-
-[LM5_B]
-und bei solchen Bãllen möchten auch Cops ein wenig 'Action' haben.
-
-[LM5_C]
-Ich hab Girls in der ganzen Stadt stehen.
-
-[LM5_D]
-Bring sie zu dem Ball. Das bringt 'nen Haufen Kohle.
-
-[LM5_1]
-~g~Wenn du zu viele Ladies ins Auto stopfst, holen sie sich Schrammen! ~g~Liefere erst diese Mãdchen ab und hol dann den Rest.
-
-[LM5_2]
-~r~Eins von Luigis Girls ist hinüber!
-
-[LM5_3]
-~g~Du brauchst ein Auto!
-
-[LM5_4]
-~g~Hol die Girls, die in St. Mark's arbeiten.
-
-[LM5_5]
-~g~Bring die Girls zum Polizeiball!
-
-[LM5_8]
-~g~Girls auf dem Ball: ~1~
-
-[JM2]
-'ADIEU, 'CHUNKY' LEE CHONG'
-
-[JM3]
-' DER GELDTRANSPORTER'
-
-[JM4]
-'CIPRIANIS CHAUFFEUR'
-
-[JM5]
-'DER TOTE PASSAGIER'
-
-[JM1_1]
-~g~Bring Forellis Wagen zu 8-Balls Werkstatt nördlich von hier, hinter 'Easy Credit Autos'.
-
-[JM1_2]
-~g~Park den Wagen wieder vor Marcos Bistro.
-
-[JM1_3]
-~g~Aktiviere die Autobombe und dann nichts wie weg!
-
-[JM1_4]
-~g~Du schrottest das Auto! Repariere es!
-
-[JM1_5]
-~g~Die Autobombe ist nicht aktiviert!
-
-[JM1_6]
-~g~Stell den Wagen wieder an den richtigen Platz.
-
-[JM1_8A]
-~y~Hey, mein alter Freund!
-
-[JM1_8B]
-~y~Die Bombenwerkstatt ist automatisiert. Einfach reinfahren und anhalten, der Rest passiert von selbst.
-
-[JM1_8C]
-~y~Hier, die erste ist umsonst, jede weitere kostet aber.
-
-[JM2_A]
-Chunky Lee Chong verhökert Spank für irgend so eine neue Gang aus Kolumbien oder Colorado oder so...
-
-[JM2_B]
-Ich weiß nicht genau. Aber wen interessieren schon die Details?
-
-[JM2_D]
-Diese Ratte hat seine letzte Frühlingsrolle verkauft.
-
-[JM2_E]
-Ich möchte, dass du ihn erledigst.
-
-[JM2_G]
-Besorg dir 'ne 9mm. Du weißt ja, wo du sie findest, oder?
-
-[JM2_H]
-Und sei vorsichtig in Chinatown. Das ist Triaden-Gebiet.
-
-[JM3_A]
-Also, wir überfallen den Transporter mit den Lohngeldern.
-
-[JM3_B]
-Er startet jeden Tag an der Grenze zu Chinatown.
-
-[JM3_C]
-Kugeln können der Karre nichts anhaben. Also besorg dir einen Wagen und ramm ihn von der Straße.
-
-[JM3_D]
-Fahr ihm voll rein, dann dürften die Wachmãnner schnell abhauen.
-
-[JM3_E]
-Fahr den Transporter dann zum Lagerhaus bei den Docks, von da an übernehmen meine Leute.
-
-[JM3_F]
-Der Transporter ist nicht ewig unterwegs, also beeil dich.
-
-[JM3_1]
-~g~Fahr den Transporter zu der Garage.
-
-[JM3_2]
-~g~Ramm den Wagen, bis der Schadenswert unter 70 Prozent liegt.
-
-[JM4_B]
-Oh! Da ist der Typ, von dem ich dir erzãhlt habe!
-
-[JM4_C]
-Okay, hör zu. Der Typ ist kein Italiener und kein Mechaniker, aber er kann alles 'richten'.
-
-[JM4_D]
-Das ist Paps' Capo, Toni Cipriani.
-
-[JM4_E]
-Ja, ich bin Toni Cipriani.
-
-[JM4_F]
-Bring ihn zu Mammas Restaurant in St. Mark's.
-
-[JM4_G]
-Hör zu, ich plane eine Sache, da brauche ich einen guten Fahrer. Also komm spãter wieder, okay?
-
-[JM4_2]
-Warte hier. Lass den Motor laufen. Das ist kein Freundschaftsbesuch.
-
-[JM4_3]
-Ein Hinterhalt der Triaden! Bring uns hier raus!
-
-[JM4_4]
-Die Triaden denken wohl, sie können mich fertigmachen. Die! MICH!
-
-[JM4_6]
-Hey, Vorsicht! Ich sagte, keine künstlerischen Einlagen!
-
-[JM4_7]
-~g~Fahr Toni zu Mammas Restaurant.
-
-[JM4_8]
-~r~Toni ist tot!
-
-[JM5_A]
-Großartig! Einfach großartig!
-
-[JM5_B]
-Na also. Genau der, mit dem ich jetzt reden muss!
-
-[JM5_D]
-Einer der Forellis meinte, er weiß zu viel, also hat er gekriegt, was er verdiente.
-
-[JM5_E]
-Schaff die Leiche zu der Schrottpresse in Harwood, okay?
-
-[JM5_1]
-~g~Bring ihn zu der Schrottpresse!
-
-[JM5_2]
-~g~Die Forelli Brüder!
-
-[JM6_A]
-Nicht schlecht, das Ding, was?
-
-[JM6_B]
-Hör zu. Fahr mit einem Wagen zu der sicheren Wohnung in St. Mark's und hol ein paar Freunde von mir ab.
-
-[JM6_C]
-Die überfallen eine Bank und brauchen einen Fahrer.
-
-[JM6_D]
-Ich hab ihnen gesagt, du bist der richtige. Also, vermassle es nicht.
-
-[JM6_E]
-Bring sie vor 5 Uhr zu der Bank, keine Minute spãter.
-
-[JM6_2]
-Lass den Motor laufen. Wir sind gleich wieder da.
-
-[JM6_3]
-Bring uns hier weg!!
-
-[JM6_4]
-Hãng die Cops ab und bring uns in die sichere Wohnung!
-
-[JM6_6]
-~g~Los, besorge ein weniger verdãchtiges Fahrzeug!
-
-[JM6_7]
-~g~Du brauchst alle 3 für den Überfall!
-
-[TM1]
-'SCHMUTZIGE WÃSCHE'
-
-[TM2]
-'DER GELDBOTE'
-
-[TM3]
-'DAS TREFFEN BEI SALVATORE'
-
-[TM4]
-'TRIADEN UND ANDERE KLEINE FISCHE'
-
-[TM5]
-'EXPLODIERENDE FISCHE'
-
-[TONI_P]
-Ich habe einen dringenden Job für dich! -Toni
-
-[TM1_A]
-~w~Setz dich, Junge. Los, mach's dir bequem.
-
-[TM1_B]
-~w~Die Wãscherei will also kein Schutzgeld zahlen, was?
-
-[TM1_C]
-~w~Denken die Triaden, sie können mich verscheißern?
-
-[TM1_D]
-~w~Diesen Möchtegern-Gangstern werden wir eine Lektion erteilen.
-
-[TM1_E]
-~w~Ja, ich werde denen Respekt beibringen. Die rühren keinen meiner Söhne ungestraft an.
-
-[TM1_F]
-~w~Dein Vater - Gott hab ihn selig - hat sich von den Triaden nie etwas gefallen lassen.
-
-[TM1_G]
-~w~Sorry, Ma. Ja, Ma.
-
-[TM1_H]
-~w~Ich will, dass du ihre Wãscherei-Transporter zerstörst
-
-[TM1_I]
-~w~und jeden Triaden-Tölpel niedermachst, der dir in die Quere kommt.
-
-[TM1_J]
-~w~8-Ball liefert dir alles, was du dazu brauchst.
-
-[TM2_A]
-~w~TONI ist unterwegs, um jemanden zu erledigen - oder er versucht es jedenfalls.
-
-[TM2_AA]
-Er wird nie so sein wie sein Papa. Auf dem Tisch hat er dir eine Nachricht hinterlassen.
-
-[TM2_B]
-~w~Die Wãscherei will jetzt bezahlen. Gute Arbeit, mein Junge!
-
-[TM2_C]
-~w~Hol das Geld ab und bring es hierher. Pass auf die Triaden auf.
-
-[TM2_D]
-~w~Die wollen dich wahrscheinlich zu Chop Suey verarbeiten, aber lass dir nichts gefallen.
-
-[TM2_E]
-~w~Niemand, wirklich niemand, macht TONI CIPRIANI fertig!
-
-[TM2_1]
-~g~Bring das Geld zu Toni!!
-
-[TM2_2]
-~g~Du hast sie alle erledigt!
-
-[TM3_MA]
-~w~Ich weiß nicht, wo er ist!
-
-[TM3_MB]
-~w~Ach, mein Sohn weiß manchmal selbst nicht, wer er ist.
-
-[TM3_MC]
-~w~Ja, sein Vater, der war da ganz anders. Immer auf Draht, top, ein echter Mann...
-
-[TM3_A]
-~w~Don Salvatore hat ein Treffen angesetzt.
-
-[TM3_B]
-~w~Du musst erst die Limo und seinen Sohn Joey aus der Werkstatt abholen.
-
-[TM3_C]
-~w~Dann holst du Luigi aus seinem Club ab und dann kommst du wieder her und holst mich ab.
-
-[TM3_D]
-~w~Dann fahren wir alle gemeinsam zum Boss.
-
-[TM3_E]
-~w~Diese Triaden wissen einfach nicht, wann Schluss ist.
-
-[TM3_F]
-~w~Wenn sie Krieg wollen, sollen sie Krieg haben.
-
-[TM3_G]
-~w~Also, los jetzt.
-
-[TM3_1]
-~g~Hol die Limousine bei Joey ab.
-
-[TM3_2]
-~g~Jetzt hol Luigi ab.
-
-[TM3_3]
-~g~Jetzt hol Toni ab.
-
-[TM3_4]
-~g~Jetzt fahr die Mãnner zu Salvatore.
-
-[TM3_5]
-~y~Ein Hinterhalt der Triaden!!
-
-[TM4_B]
-~w~Es herrscht KRIEG! Die Triaden betreiben zur Tarnung einen Fischmarkt in Chinatown.
-
-[TM4_C]
-~w~Die meisten ihrer Geschãfte werden auf diesem Fischmarkt durchgezogen.
-
-[TM4_D]
-~w~Diese Wãscherei schuldet uns immer noch Geld.
-
-[TM4_E]
-~w~Die denken, die Triaden beschützen sie jetzt. Ich schlage vor, wir führen eine Strafaktion durch.
-
-[TM4_F]
-~w~Nimm dir diese Jungs und knöpf dir die Köpfe der Triaden vor!
-
-[TM4_G]
-~w~Und wenn es geht, macht auch ein paar von deren Soldaten fertig.
-
-[TM4_GAT]
-~g~Du brauchst einen 'Triaden-Packwagon', um da reinzukommen.
-
-[TM5_A]
-TEXT NO LONGER REQUIRED
-
-[TM5_B]
-~w~Okay, jetzt hab ich aber die Schnauze voll.
-
-[TM5_C]
-~w~Wir machen die Triaden ein für alle Mal fertig.
-
-[TM5_D]
-8-Ball hat einen Müllkarren mit einer Bombe prãpariert.
-
-[TM5_E]
-~w~Sie hat einen Zeitzünder. Wenn du's vermasselst, hinterlassen wir keine Spuren. Hol den Müllkarren ab.
-
-[TM5_F]
-~w~Fahr vorsichtig. 8-Ball sagt, die Bombe ist extrem empfindlich, das kleinste Schlagloch und sie geht hoch.
-
-[TM5_G]
-~w~In ihrer Fischfabrik werden sie dich reinlassen mit dem Müllkarren.
-
-[TM5_H]
-~w~Stell das Ding zwischen den Benzinkanistern ab und dann nichts wie weg.
-
-[TM5_I]
-~w~Es soll rummsen, dass es Fische vom Himmel regnet.
-
-[TM5_J]
-~w~Ne biblische Apokalypse will ich haben, nichts popeliges.
-
-[FM2]
-'CURLYS GEHEIMKONTAKTE'
-
-[FM4]
-'DER LETZTE WUNSCH'
-
-[FM1_A]
-~w~Die Jungs und ich haben einiges zu besprechen,
-
-[FM1_B]
-~w~du wirst dich heute abend um meine Kleine kümmern.
-
-[FM1_C]
-~w~HEY, MARIA! WO BLEIBST DU?
-
-[FM1_D]
-~w~Dãmliche Ziege. Jedes Mal dasselbe.
-
-[FM1_E]
-~w~Und hier ist sie, die Königin der Nacht höchstpersönlich!
-
-[FM1_F]
-~w~Was hast du denn da oben getrieben?
-
-[FM1_G]
-~w~Was es auch war, jede Wette, es hat mich Geld gekostet.
-
-[FM1_H]
-~w~Du glaubst doch nicht, ich bin zum Palavern hier, oder?
-
-[FM1_I]
-~w~Halt die Klappe und steig in den Wagen.
-
-[FM1_J]
-~w~Nimm die Limo, aber bring sie mir heil wieder, hörst du?
-
-[FM1_K]
-~w~Und pass auf sie auf, sie kann eine Menge Ãrger machen.
-
-[FM1_L]
-~w~Ja, ja, ja! Dein neues Schoßhündchen wird schon alles im Griff haben.
-
-[FM1_M]
-~w~Er ist ja auch so groß und stark.
-
-[FM1_N]
-~w~Hey, Fiffi, los, wir besuchen Chico und besorgen uns was zum 'Naschen'!
-
-[FM1_P]
-~g~Da ist Chico. Halt neben ihm an.
-
-[FM1_S]
-~w~Bitte sehr, die Dame.
-
-[FM1_TT]
-~w~EINE POLIZEI-RAZZIA!
-
-[FM1_1]
-~g~Zurück in die Limo!
-
-[FM1_2]
-~g~Steig in die Limo!
-
-[FM1_3]
-~r~Wenn du Maria im Stich lãsst, bringt Salvatore dich um. Kehr um und hol sie!
-
-[FM1_4]
-~g~Du hast die Frau des Don im Stich gelassen! Los, zurück zur Lagerhalle! Warte dort auf Maria!
-
-[FM1_5]
-~g~Bring Maria wohlbehalten zu Salvatore zurück!
-
-[FM1_6]
-~g~Chico ist nicht ewig dort. Bring Maria zu diesem Ufer!
-
-[FM1_7]
-~r~Maria ist tot! Das wird Salvatore nicht gefallen...
-
-[FM1_8]
-~r~Du hast Marias Lieferanten erledigt!
-
-[FM2_J]
-Lasst uns eine Minute alleine.
-
-[FM2_A]
-Das kolumbianische Kartell stellt irgendwo in Liberty SPANK her.
-
-[FM2_K]
-Aber wir wissen nicht wo. Und die scheinen jeden unserer Schritte im Voraus zu kennen.
-
-[FM2_L]
-Es gibt da einen Typ namens Curly Bob. Er arbeitet in Luigis Bar.
-
-[FM2_M]
-Der verpulvert schon dauernd mehr Geld als er verdient.
-
-[FM2_N]
-Normalerweise fãhrt er nach der Arbeit mit dem Taxi nach Hause. Folge ihm.
-
-[FM2_O]
-Und wenn er der Verrãter ist, mach ihn fertig.
-
-[FM2_F]
-Da kommt ja unser kleiner, gesprãchiger Freund.
-
-[FM2_G]
-Ist man dir gefolgt? Du weißt, was hier lãuft, muss unter uns bleiben.
-
-[FM2_H]
-Nein, nein, niemand ist mir gefolgt. Hast du meinen Stoff?
-
-[FM2_I]
-Hier ist dein SPANK, du Ratte, und jetzt rede.
-
-[FM2_P]
-Okay. Die Leones führen einen Zwei-Fronten-Krieg.
-
-[FM2_Q]
-Sie kãmpfen mit den Triaden um ein Territorium, und keiner der beiden gibt nach.
-
-[FM2_R]
-Gleichzeitig hat Joey Leone Streit mit den Forellis angefangen.
-
-[FM2_S]
-Jeden Tag verlieren sie Leute und Einfluss in der Stadt.
-
-[FM2_T]
-Salvatore wird gefãhrlich und paranoid. Er verdãchtigt alles und jeden.
-
-[FM2_U]
-Bei treuen Gefolgsleuten wie dir, wie kann er sich da nur Sorgen machen?
-
-[FM2_1]
-~g~Da ist Curly Bob!
-
-[FM2_2]
-~g~Curly hat den Club verlassen. Folge ihm!
-
-[FM2_5]
-~g~Bring ihn nach Portland Harbour.
-
-[FM2_6]
-~r~Curly steigt in kein geschrottetes Taxi!
-
-[FM2_7]
-~r~Curly hat Angst! Das Treffen ist abgeblasen!
-
-[FM2_8]
-~g~Knöpf dir Curly Bob vor!
-
-[FM2_9]
-~r~Curly Bob ist tot!
-
-[FM2_10]
-~r~Curly ist entwischt!
-
-[FM2_11]
-~g~Parke vor Luigis Club, Curly Bob kommt gleich heraus.
-
-[FM2_12]
-~r~Er ist dir entwischt!
-
-[FM3_A]
-~w~Wir sollten diese kolumbianischen Mistkerle fertigmachen,
-
-[FM3_B]
-~w~aber durch den Krieg mit den Triaden sind wir dazu zu geschwãcht.
-
-[FM3_C]
-~w~Das Kartell hat unendlich Geld aus dem Handel mit diesem Mistzeug SPANK.
-
-[FM3_D]
-~w~Wenn wir sie offen angreifen, putzen sie uns weg.
-
-[FM3_E]
-~w~Die müssen das SPANK auf diesem großen Schiff machen, zu dem dich Curly geführt hat.
-
-[FM3_F]
-~w~Wir müssen also mit Köpfchen vorgehen. Genauer gesagt, mit DEINEM Köpfchen.
-
-[FM3_G]
-~w~Ich bitte dich, mir, Salvatore Leone zuliebe, dieses SPANK Labor zu zerstören.
-
-[FM3_H]
-~w~Wenn du das für mich tust, bist du ein gemachter Mann. Du kriegst alles, was du willst.
-
-[FM3_I]
-~w~Geh zu 8-Ball. Du brauchst einen Fachmann, um dieses Schiff hochzujagen.
-
-[FM3_8A]
-~w~Hi, Kumpel! Salvatore hat schon angerufen,
-
-[FM3_8B]
-~w~aber für so einen Job brauchst du eine Menge Chinaböller.
-
-[FM3_8D]
-~w~Aber du kennst mich. Dafür scheppert's dann auch gewaltig.
-
-[FM3_8E]
-~w~Okay, dann wollen wir mal!
-
-[FM3_8F]
-~w~Ich kann das Baby scharf machen, aber eine Knarre kann ich mit diesen Hãnden immer noch nicht halten.
-
-[FM3_8G]
-~w~Hier, das Gewehr hier wirst du sicher brauchen.
-
-[FM3_4]
-~g~Halt an und lass 8-Ball aussteigen!
-
-[FM3_7]
-~r~8-Ball hat's erwischt!
-
-[FM3_8]
-~r~Die Wachmãnner wurden alarmiert!
-
-[FM4_A]
-~w~Ah, sieh an! Mein bester Troubleshooter.
-
-[FM4_B]
-~w~Ich bin stolz auf dich, meine Junge. Du hast es diesen Mistkerlen gezeigt.
-
-[FM4_C]
-~w~Ich hab nur noch einen kleinen Job für dich, bevor wir alle feiern können.
-
-[FM4_D]
-~w~Um die Ecke von Luigis Club steht ein Wagen.
-
-[FM4_E]
-~w~Innen drin sieht's ziemlich aus.
-
-[FM4_F]
-~w~Wir haben so einem Typ versehentlich ein Loch in den Kopf gemacht.
-
-[FM4_H]
-~w~Bring den Wagen zur Schrottpresse, bevor die Cops ihn finden.
-
-[AM3]
-'DER PAPARAZZO'
-
-[AM4]
-'ZAHLTAG FÜR RAY'
-
-[AM5]
-'V-MANN TANNER'
-
-[AM1_A]
-Wir müssen ein paar Dinge klãren, bevor wir unsere Beziehungen fortsetzen,
-
-[AM1_B]
-geschãftlich oder sonstwie. Legen wir also die Karten auf den Tisch.
-
-[AM1_C]
-Ich bin eine Yakuza und ich weiß, dass du für Salvatore Leones Familie gearbeitet hast.
-
-[AM1_D]
-Ich kann dir einen Job in unserer Organisation verschaffen,
-
-[AM1_E]
-aber zuerst musst du mir beweisen, dass du dich wirklich von der Mafia losgesagt hast.
-
-[AM1_G]
-Sorge dafür, dass er seinen Club nicht lebend erreicht.
-
-[AM1_H]
-Maria und ich reden inzwischen ein bisschen über die alten Zeiten.
-
-[AM1_I]
-Oh, Asuka, du hast einen Massagestab.
-
-[AM1_J]
-Das ist kein Massagestab.
-
-[AM1_1]
-~g~Salvatore verlãsst jetzt Luigis Club!
-
-[AM1_2]
-~r~Man hat dich entdeckt!
-
-[AM1_3]
-~r~Du hast Salvatore verpasst!
-
-[AM1_4]
-~r~Na, prima! Du hast dein Opfer verscheucht. Und du willst ein Profi sein?
-
-[AM1_5]
-~g~Begib dich in den Rotlichtbezirk und warte, bis Salvatore den Club verlãsst.
-
-[AM1_7]
-~r~Salvatore sitzt bequem zu Hause und schlürft einen Cocktail. 'Der Schakal' bist du nicht gerade!
-
-[AM1_8]
-~g~Salvatore wird Luigis Club um zirka ~1~:~1~ verlassen.
-
-[AM2_4]
-~g~Du bist für die so unsichtbar wie ein Hochhaus!
-
-[AM3_A]
-Ein Reporter hat rumgeschnüffelt.
-
-[AM3_B]
-Maria und ich sind ein bisschen ins Grüne gefahren, bis du diesen miesen Voyeur beseitigt hast.
-
-[AM4_A]
-Ah, mein hübsches Helferlein!
-
-[AM4_B]
-Maria ist gerade beschãftigt, aber ich richte ihr aus, dass du hier warst.
-
-[AM4_C]
-Wer ist da? Asuka? Ich weiß, ich war ein böses Mãdchen, aber ich muss dringend pinkeln!
-
-[AM4_D]
-Wird Zeit dass du unseren Mann bei der Polizei kennenlernst.
-
-[AM4_E]
-Das ist seine Bezahlung für den letzten Job, den er für uns erledigt hat.
-
-[AM4_F]
-Verstãndlicherweise ist er vorsichtig.
-
-[AM4_G]
-Begib dich so schnell wie möglich zu dem öffentlichen Fernsprecher in Torrington und warte auf seine Anweisungen.
-
-[AM5_A]
-Maria und ich sind shoppen gegangen.
-
-[AM5_B]
-Unser Spitzel hat uns informiert, dass einer unserer Fahrer ein übereifriger Undercover Cop ist!
-
-[AM5_C]
-Ohne sein Auto ist er praktisch ein Nichts. Wir haben seinen Wagen mit einem Sender versehen.
-
-[AM5_D]
-Knöpf ihn dir vor!
-
-[AM5_1]
-Tanner hat dich bemerkt!
-
-[AS1]
-'DER KÖDER'
-
-[AS2]
-'ESPRESSO-2-GO!'
-
-[AS4]
-'DAS LÖSEGELD'
-
-[AS1_A]
-~w~Miguel findet anscheinend, dass ich ihn schlecht behandle.
-
-[AS1_B]
-~w~Trotzdem hat er uns mitgeteilt, wie sehr Catalina deine Rache fürchtet.
-
-[AS2_A]
-~w~Wir haben Catalinas Plãne mit dem SPANK unterschãtzt.
-
-[AS2_B]
-~w~Das beschrãnkt sich bei weitem nicht darauf, dass die Yardies es an der Straßenecke verkaufen.
-
-[AS2_D]
-~w~Die verkaufen SPANK über Kaffeestãnde.
-
-[AS2_1]
-~g~Alle Espressostãnde in Portland zerstört!!
-
-[AS2_2]
-~g~Alle Espressostãnde auf Staunton Island zerstört!!
-
-[AS2_3]
-~g~Alle Espressostãnde in Shoreside Vale zerstört!!
-
-[AS2_4]
-~r~Das Kartell hat seine Dealer gewarnt!!
-
-[AS2_5]
-~g~Da sind noch Espressostãnde in Shoreside Vale und auf Staunton Island!
-
-[AS2_6]
-~g~Da sind noch Espressostãnde in Shoreside Vale!
-
-[AS2_7]
-~g~Da sind noch Espressostãnde auf Staunton Island!
-
-[AS2_8]
-~g~Da sind noch Espressostãnde in Portland!
-
-[AS2_9]
-~g~Da sind noch Espressostãnde in Portland und Shoreside Vale!
-
-[AS2_10]
-~g~Da sind noch Espressostãnde in Portland und auf Staunton Island!
-
-[AS2_12]
-~g~Suche in den Sadtteilen von Liberty City nach ~b~Espresso-2-Go-Stãnden!
-
-[AS3_A]
-~W~Drücken wir noch fester zu oder warten wir, bis es von selbst abfãllt?
-
-[AS3_B]
-~w~Hau einfach drauf...
-
-[AS3_D]
-~w~Mein Helferlein!
-
-[AS3_E]
-~w~Mir war langweilig, da dachte ich mir, ich leiste Asuka Gesellschaft.
-
-[AS3_1]
-~g~Such dir ein ~r~Boot~g~ und fahre zu der ~b~Markierungsboje!
-
-[AS3_3]
-~g~Warte, bis die ~y~Maschine~g~ zur Landung ansetzt!
-
-[AS3_5]
-~g~Sammle die Ladung ein!
-
-[AS3_4]
-~g~Benutze einen Raketenwerfer, um das ~y~Flugzeug~g~ abzuschießen!!
-
-[AS3_2]
-~b~Fahr zu der Markierungsboje! ~y~Das Flugzeug landet gleich!!
-
-[AS3_6]
-~g~~1~ VON 8
-
-[KM1]
-'DIE BEFREIUNG DES KANBU'
-
-[KM3]
-'DER JAMAICA DEAL'
-
-[KM4]
-'DIE GANG'
-
-[KM5]
-'DIE ABRECHNUNG'
-
-[KM1_A]
-Meine Schwester hãlt große Stücke auf dich,
-
-[KM1_E]
-aber ich bin noch nicht überzeugt, dass ein Gajin wie du was auf dem Kasten hat.
-
-[KM1_B]
-Vielleicht kannst du mir bei einer etwas kniffligen Sache helfen.
-
-[KM1_F]
-Ein Fehlschlag wãre natürlich unverzeihlich.
-
-[KM1_C]
-Ein Yakuza Kanbu sitzt in Haft und wartet auf seine Überführung zum Prozess.
-
-[KM1_G]
-Er ist ein geschãtztes Mitglied der Familie.
-
-[KM1_H]
-Befreie ihn aus der Haft und bring ihn in das Dojo beim Bedford Point.
-
-[KM1_D]
-Wir danken dir für deinen selbstlosen Einsatz. Solltest du jemals Hilfe brauchen, wird das Dojo dir jederzeit zwei Mann zur Seite stellen.
-
-[KM1_1]
-~g~Klau ein Polizeiauto!
-
-[KM1_2]
-~g~Bau eine Bombe in den Wagen ein!
-
-[KM1_3]
-~g~Jetzt bring ihn zu dem Yakuza Dojo.
-
-[KM1_5]
-~g~Okay, jetzt fahr zum Polizeirevier.
-
-[KM1_6]
-~g~Bau eine Bombe in das Auto ein!
-
-[KM1_7]
-~g~Nur autorisierte Polizeifahrzeuge!
-
-[KM1_9]
-~r~Du hast keine Autobombe benutzt, um die Wand zu sprengen.
-
-[KM1_10]
-~r~Der Yakuza Kanbu ist tot - genau wie deine Ehre!
-
-[KM1_11]
-~r~Du hast dich selbst in Schwierigkeiten gebracht!
-
-[KM2_A]
-Gewisse Umgangsformen sind in diesem Beruf von nicht zu unterschãtzender Wichtigkeit.
-
-[KM2_B]
-Es ist eine Schande. Jemand hat mir einmal einen Gefallen getan, und ich konnte mich nie dafür erkenntlich zeigen.
-
-[KM2_C]
-Der Mann ist ein Autonarr, und er hat gebeten, dass wir ihm bestimmte Modelle für seine Sammlung besorgen.
-
-[KM2_F]
-Mein Ehrgefühl verlangt das von mir.
-
-[KM2_2]
-~g~Auto abgeliefert.
-
-[KM3_A]
-Wenn Ungemach droht, wendet der Narr sich ab, wãhrend der Weise sich ihm stellt.
-
-[KM3_B]
-Das kolumbianische Kartell hat unsere wiederholten Bitten ignoriert, unsere Interessen in Liberty zu berücksichtigen.
-
-[KM3_C]
-Jetzt verhandeln die mit den Jamaikanern, um uns weiter zu demütigen.
-
-[KM3_D]
-Sie wollen den Deal am anderen Ende der Stadt besiegeln.
-
-[KM3_F]
-Nimm einen meiner Mãnner, klau einen Yardie-Wagen und statte den Kolumbianern einen Besuch ab.
-
-[KM3_E]
-Unser Ehrgefühl verlangt es, dass niemand am Leben bleibt.
-
-[KM3_2]
-~g~Hole deinen Kontaktmann ab.
-
-[KM3_3]
-~g~Das Treffen findet auf dem Krankenhaus-Parkplatz in Rockford statt!
-
-[KM3_4]
-~r~Sie sind entkommen!
-
-[KM3_6]
-~g~Knöpf sie dir vor! Mach sie fertig!
-
-[KM3_8]
-~g~Du brauchst einen Yardie-Wagen für diesen Job!
-
-[KM3_9]
-~r~Einer der Kolumbianer ist tot. Der Deal ist geplatzt.
-
-[KM3_10]
-~r~Der Kontaktmann ist tot!
-
-[KM4_A]
-Um wahrhaft stark zu sein, darfst du niemals Schwãche zeigen.
-
-[KM4_C]
-Sammle die Gelder umgehend ein, damit wir sie in unsere Casinos stecken können.
-
-[KM4_1]
-Ich kann euch nicht bezahlen, und selbst wenn ich könnte, würde ich es nicht tun.
-
-[KM4_9]
-Eine Jugendbande hat mich gerade überfallen! Sie haben mir alles genommen!
-
-[KM4_2]
-Ihr seid zu nichts nutze.
-
-[KM4_10]
-Was sind SIE denn eigentlich für ein Yakuza..?
-
-[KM4_3]
-Dafür bezahle ich euch Gangster nicht. Diese Art von Schutz kann ich auch von der verdammten Polizei bekommen!
-
-[KM4_4]
-~g~Bestrafe die verantwortliche Gang und stelle das ~b~Schutzgeld~g~ sicher!
-
-[KM4_7]
-~r~Der Ladenbesitzer hat sein Leben verröchelt.
-
-[KM4_5]
-Donald Love möchte dich in seinem Teegarten sehen, um mit dir zu reden.
-
-[KM4_6]
-Da ist das Geld. Es ist alles da!
-
-[KM4_8]
-~g~Tasche aufgesammelt!
-
-[KM5_A]
-DU! Wie passend, dass du ausgerechnet jetzt dein ehrloses Gesicht zeigst!
-
-[KM5_B]
-Es scheint, deine Versuche, die Jamaikaner davon abzuhalten,
-
-[KM5_B1]
-sich mit dem Kartell einzulassen, sind komplett fehlgeschlagen!
-
-[KM5_C]
-Yardie-Pusher verdealen pãckchenweise SPANK in den Straßen von Liberty, als würden sie Hotdogs verkaufen!
-
-[KM5_D]
-Die Mistkerle vom Kartell lachen uns aus, lachen MICH aus!
-
-[KM5_E]
-Ich gebe dir eine letzte Chance das Vertrauen zu rechtfertigen, das meine Schwester in dich setzt!
-
-[KM5_F]
-Mach diese Dreckskerle fertig und wasch deine befleckte Ehre im Blut unserer Feinde rein!!!
-
-[KM5_3]
-~r~Du hast mindestens ~1~ der Yardies nicht erwischt.
-
-[KM5_4]
-~g~Du hast ~1~ der Yardies erwischt.
-
-[KM5_5]
-~g~Du hast ~1~ der Yardies erwischt. BONUS $~1~
-
-[RM1]
-'DAS SCHWEIGEN DES VERRÃTERS'
-
-[RM3]
-'BRENNENDE BEWEISE'
-
-[RM4]
-'TÖDLICHE BOOTSFAHRT'
-
-[RM5]
-'DER GEPANZERTE ZEUGE'
-
-[RM1_D]
-Er steht unter Zeugenschutz und sitzt mit bewaffneten Leibwãchtern in einer Wohnung in Newport, irgendwo hinter dem Parkplatz.
-
-[RM1_E]
-Zünde die Bude an, und wenn sie rausgerannt kommen, kannst du sie dir vornehmen. Sorge dafür, dass er mit niemandem redet.
-
-[RM1_1]
-~g~Check das Zeugenschutz-Haus aus.
-
-[RM1_2]
-~g~Knöpf dir McAffrey vor!
-
-[RM2_A1]
-Hey, Junge! Hier rüber!
-
-[RM2_A]
-Ein alter Kumpel aus der Army macht Geschãfte in Rockford.
-
-[RM2_D]
-Er braucht Hilfe. Zum Dank will er dir Superpreise machen für alles, was du bei ihm kaufst.
-
-[RM2_E]
-Ray hat schon angerufen... Aber ich dachte, er schickt mehr Leute.
-
-[RM2_F]
-Na ja, drei Arme sind besser als einer, also nimm dir, was du brauchst.
-
-[RM2_G]
-~g~Sieh nach Phil!
-
-[RM2_H]
-~r~Phil hat's erwischt!!
-
-[RM2_L]
-Heh-hey! Wãre ich mit DIR in Nicaragua gewesen, hãtte ich vielleicht meinen Arm noch!
-
-[RM2_N]
-Lass das Geld da. Und jetzt verschwinde. Ich regle das mit den Cops.
-
-[RM3_D]
-Das Beweismaterial wird gerade quer durch die Stadt transportiert.
-
-[RM3_E]
-Du wirst diesen Wagen rammen und jedes kleine Beweisstück einsammeln, wenn es rausfãllt.
-
-[RM3_F]
-Wenn du alles hast, lass das Zeug im Wagen und zünde ihn an.
-
-[RM3_G]
-Das bringt uns beiden eine Stange Geld ein, mein Junge.
-
-[RM3_1]
-~g~Lass das Beweismaterial in einem Auto und zünde das Auto dann an.
-
-[RM3_4]
-~g~Der Staatsanwalt hat die Beweisfotos verloren!
-
-[RM3_6]
-~r~Die Fotos werden sich über ganz Liberty verteilen!
-
-[RM3_7]
-~g~Steck jetzt das Auto in Brand!
-
-[RM4_A]
-Ich glaube, mein Partner ist ein Verrãter.
-
-[RM4_C]
-Meistens fãhrt er abends mit seinem Boot fischen, nahe dem Leuchtturm auf dem Portland Rock.
-
-[RM4_D]
-Klau ein Polizeiboot und mach seinen miesen Machenschaften ein Ende!
-
-[RM4_1]
-~g~Klau ein Polizeiboot.
-
-[RM4_2]
-~g~Fahr zum Leuchtturm und nimm dir Rays Partner vor!
-
-[RM5_A]
-Du unfãhiger Idiot!
-
-[RM5_A1]
-Du hast alles vermasselt! Es geht um mein Leben, und du kannst nicht mal eine Fliege totschlagen!
-
-[RM5_B]
-Ich hab dir viel Geld gezahlt, dafür, dass du diesen Zeugen beseitigst, aber er lebt!
-
-[RM5_B1]
-Und heute wird er vor dem FBI aussagen!
-
-[RM5_C]
-Er muss jeden Moment aus dem Carson General Hospital in Rockford rausgebracht werden.
-
-[RM5_D]
-Wenn er singt, singe ich auch...
-
-[RM5_E]
-Also los, erledige den Job, für den ich dich bezahlt habe!
-
-[RM5_1]
-~g~Fang den Krankenwagen ab.
-
-[RM5_2]
-~g~Man hat dich bemerkt!!
-
-[RM5_3]
-~g~Das war ein Ablenkungsmanöver!
-
-[RM5_4]
-~g~Kugel können den Panzer nicht durchschlagen!!
-
-[RM5_5]
-~g~Der Panzer ist feuersicher!!
-
-[RM5_7]
-~r~Zeuge wurde abgeliefert!!
-
-[RM5_8]
-~g~Zeuge ist ertrunken!!
-
-[LOVE2]
-'DAS KENJI-KOMPLOTT'
-
-[LOVE3]
-'NÃCHTLICHER FISCHZUG'
-
-[LOVE1_A]
-Zunãchst möchte ich dir danken, dass du diese Sache für mich geregelt hast.
-
-[LOVE1_F]
-Die Leute interpretieren heute in alles etwas hinein.
-
-[LOVE1_D]
-Sie versuchen, mir immer noch mehr Geld abzupressen, aber ich halte nichts von Verhandlungen.
-
-[LOVE1_E]
-Deal ist Deal, die sehen keinen Penny von mir.
-
-[LOVE1_G]
-Befreie meinen Freund, egal wie.
-
-[LOVE1_2]
-~g~Rette den alten asiatischen Gentleman.
-
-[LOVE1_3]
-~g~Bring den alten Asiaten zu Love.
-
-[LOVE1_4]
-~g~Der alte Asiate muss in einer der Garagen sein...
-
-[LOVE1_6]
-~r~Der alte Asiate ist von uns gegangen!
-
-[LOVE1_7]
-~g~Das Tor öffnet sich nur für Autos der kolumbianischen Gang.
-
-[LOVE2_A]
-Nichts lãsst die Grundstückspreise so tief purzeln wie ein guter alter Bandenkrieg,
-
-[LOVE2_B]
-außer vielleicht eine Pestepidemie... Aber das ginge hier wohl zu weit.
-
-[LOVE2_C]
-Wie ich bemerkt habe, sind die Yakuza und die Kolumbianer nicht eben Busenfreunde.
-
-[LOVE2_D]
-Daraus sollte man Kapital schlagen.
-
-[LOVE2_E]
-Ich möchte, dass du dir den Yakuza WAKA-Gashira Kenji Kasen vornimmst.
-
-[LOVE2_F]
-Kenji ist bei einem Treffen auf dem Dach der Parkgarage in Newport.
-
-[LOVE2_G]
-Besorg dir einen Wagen des Kartells und nimm ihn dir vor.
-
-[LOVE2_H]
-Die Yakuza werden das als Kriegserklãrung des Kartells auffassen.
-
-[LOVE2_1]
-~g~Klau in Fort Staunton einen Wagen der kolumbianischen Gang!
-
-[LOVE2_2]
-~g~Fahre jetzt zu dem ~p~Parkhaus in Newport~g~ und zieh Kenji aus dem Verkehr!
-
-[LOVE2_3]
-~r~Wenn du nicht mit einem Auto des Kartells aufkreuzt, wird man dich erkennen!
-
-[LOVE2_4]
-~r~Die Yakuza haben dich erkannt!
-
-[LOVE2_6]
-~r~ Du hast alle Zeugen aus dem Weg gerãumt!!
-
-[LOVE3_A]
-In scheinheiligen Zeiten wie diesen sind bestimmte wertvolle Waren schwer zu importieren.
-
-[LOVE3_C]
-Es wird einige kleine Pãckchen ins Wasser abwerfen.
-
-[LOVE3_D]
-Sammle sie ein, bevor es ein anderer tut.
-
-[LOVE3_1]
-~g~Besorg dir ein ~r~Boot~g~ und folge dem ~y~Flugzeug~g~!
-
-[LOVE4]
-'DER FLUGHAFEN-COUP'
-
-[LOVE5]
-'BODYGUARD ACTION'
-
-[LOVE4_A]
-Danke, dass du die Pãckchen geholt hast. Aber die sollten nur als Köder dienen.
-
-[LOVE4_B]
-Sorry, aber so lãuft das manchmal in dem Geschãft.
-
-[LOVE4_C]
-Die Ware, um die es mir wirklich geht, ist noch in dem Flugzeug versteckt.
-
-[LOVE4_F]
-Ich habe die Beamten bestochen.
-
-[LOVE4_1]
-~r~Das kolumbianische Kartell ist da!!
-
-[LOVE4_2]
-~g~Das Pãckchen ist weg! Du musst die Kolumbianer finden und es ihnen abjagen.
-
-[LOVE4_3]
-~g~Bauunternehmen Panlantic...?
-
-[LOVE4_5]
-~g~Das Pãckchen müsste im Flugzeug sein...
-
-[LOVE4_6]
-~g~Nimm den Lift nach oben in den Tower!
-
-[LOVE5_B]
-Mein asiatischer Freund braucht einen Bodyguard. Er lãsst meine neue Lieferung auf Qualitãt überprüfen.
-
-[LOVE5_1]
-~g~Los!
-
-[LOVE5_2]
-~g~Du wirst ein Auto brauchen!
-
-[LOVE5_3]
-~g~Los, sieh nach, ob am Tunnelende die Luft rein ist.
-
-[LOVE5_4]
-~r~Dem Truck darf nichts passieren!
-
-[RM6]
-'IM FADENKREUZ'
-
-[RM6_A]
-Dir ist niemand gefolgt? Gut.
-
-[RM6_B]
-Es wird langsam brenzlig, ich stecke bis zum Hals in der Scheiße!
-
-[RM6_D]
-Die haben mich im Visier, ich muss mich absetzen.
-
-[RM6_E]
-Wenn du mich rechtzeitig zum Flughafen bringst, lass ich ordentlich was springen.
-
-[RM6_666]
-Pass gut auf meinen kugelsicheren Patriot auf, Ray. Wir sehen uns in Miami.
-
-[CAT1]
-'LÖSEGELD'
-
-[CAT2]
-'DIE ÜBERGABE'
-
-[CAT1_A]
-Ich habe deine Maria. Wenn ihr Gesicht nicht aussehen soll, als wãr's in einen Fleischwolf geraten,
-
-[CAT2_F]
-Ich hab mir 'nen Fingernagel abgebrochen und meine Frisur ist hin! Fünfzig Dollar im Eimer!
-
-[CAT2_G]
-Mann, hatte ich Angst. Aber dann dachte ich mir, du bist doch kein kleines Mãdchen mehr.
-
-[CAT2_H]
-Du, das wird lustig, weißt du, meine Schwester will nãmlich mit ihren zwei Kindern eine zeitlang bei uns wohnen,
-
-[CAT2_I]
-weil ihr Mann gerade mal wieder fremdgeht und...
-
-[CAT1_C]
-XXXX
-
-[CAT1_D]
-XXXX
-
-[CAT1_E]
-XXXX
-
-[CAT1_F]
-Du musst rechtzeitig bei Catalina sein!
-
-[CAT1_G]
-XXXX
-
-[CAT1_H]
-XXXX
-
-[CAT1_I]
-XXXX
-
-[CAT1_J]
-XXXX
-
-[CAT1_K]
-XXXX
-
-[CAT1_L]
-XXXX
-
-[AS4_1]
-XXXX
-
-[CAT_MON]
-~g~Du hast noch nicht genug Geld. Du brauchst $500.000.
-
-[BITCH_D]
-~g~Maria ist tot!
-
-[WEATHER]
-WETTER ÃNDERN
-
-[WEATHE2]
-WETTER NORMAL
-
-[8001]
-Du hast komplett versagt!
-
-[1000]
-DU BIST TOT
-
-[1001]
-DU BIST TOT
-
-[1002]
-DU BIST TOT
-
-[1003]
-DU BIST TOT
-
-[1004]
-DU BIST TOT
-
-[1005]
-VERHAFTET
-
-[1006]
-VERHAFTET
-
-[1007]
-VERHAFTET
-
-[1008]
-VERHAFTET
-
-[1009]
-VERHAFTET
-
-[GA_4]
-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_7]
-Mach die Bombe mit der ~h~~k~~PED_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.
-
-[GA_9]
-Du hast ~1~ von zehn Spezialautos beschafft.
-
-[GA_10]
-Hübsche Karre. Hier sind deine $~1~.
-
-[GA_11]
-So eine Karre haben wir schon. Die können wir nicht gebrauchen.
-
-[GA_12]
-Bombe ist scharf.
-
-[GA_13]
-Auf dich ist Verlass. Wenn du alle, die auf der Liste stehen, abgeliefert hast, kriegst du einen Bonus.
-
-[GA_14]
-Du hast alle georderten Karren geliefert. Sehr gut. Hier, für dich.
-
-[GA_15]
-Hoffentlich gefãllt dir die neue Farbe.
-
-[GA_16]
-Das Umspritzen ist gratis.
-
-[GA_19]
-An dem Modell haben wir kein Interesse.
-
-[GA_20]
-Von der Sorte haben wir schon mehr als genug. Sorry, da kommen wir nicht ins Geschãft.
-
-[CR_1]
-Kran kann dieses Fahrzeug nicht anheben.
-
-[PU_MONY]
-Du hast nicht genug Geld.
-
-[CO_ALL]
-Du hast sie alle geliefert. Hier, für dich.
-
-[PAUSED]
-PAUSE
-
-[HEALTH1]
-Stell dich nicht so an! Dir fehlt doch überhaupt nichts.
-
-[HEALTH2]
-Medizinische Versorgung ist teuer.
-
-[HEALTH3]
-Ich flick dich wieder zusammen.
-
-[HEALTH4]
-Das macht $250.
-
-[FEB_STA]
-Statistik
-
-[FEB_BRI]
-Mission
-
-[FEB_CON]
-Steuerung
-
-[FEB_AUD]
-Audio
-
-[FEB_DIS]
-Anzeige
-
-[FEB_LAN]
-Sprache
-
-[FEP_STA]
-STATISTIKEN
-
-[FEP_BRI]
-MISSIONSINFOS
-
-[FEP_CON]
-STEUERUNG
-
-[FEP_AUD]
-AUDIO
-
-[FEP_DIS]
-ANZEIGE
-
-[FEP_LAN]
-SPRACHE
-
-[FEF_ST1]
-Wer ist der Schurke?
-
-[FEF_ST2]
-Wie viel Chaos hast du angerichtet?
-
-[FEF_BR1]
-Du blickst bei der Story nicht mehr durch?
-
-[FEF_CO1]
-Taste dich ran, Mann!
-
-[FEF_CO2]
-Wãhle das Controller-Setup, das zu deinem Spielstil am besten passt
-
-[FEF_SA1]
-Bring deine Daten in Sicherheit!
-
-[FEF_SA2]
-Spiele laden und speichern
-
-[FEF_AU1]
-Volle Dröhnung gefãllig?
-
-[FEF_AU2]
-Radiosender und Soundeffekt auswãhlen
-
-[FEF_DI1]
-Andere Optik?
-
-[FEF_DI2]
-Spiel für deinen Fernseher optimieren
-
-[FEF_LA1]
-Was für ein Gefasel!
-
-[FEF_LA2]
-Sprache auswãhlen
-
-[FEB_PMB]
-Vorherige Missionsinfos:
-
-[FEC_NA]
-Nicht verfügbar
-
-[FEC_CWL]
-Eine Waffe nach links
-
-[FEC_CWR]
-Eine Waffe nach rechts
-
-[FEC_LOF]
-Nach vorne schauen
-
-[FEC_TAR]
-Zielen
-
-[FEC_MOV]
-Bewegung
-
-[FEC_CAM]
-Blickwinkel
-
-[FEC_PAU]
-Pause
-
-[FEC_ENV]
-In Fahrzeug einsteigen
-
-[FEC_JUM]
-Springen
-
-[FEC_ATT]
-Angreifen\Waffe abfeuern
-
-[FEC_RUN]
-Rennen
-
-[FEC_FPC]
-Subjektive Kamera
-
-[FEC_LB1]
-Schau
-
-[FEC_LL]
-Nach links schauen
-
-[FEC_LB2]
-nach hinten
-
-[FEC_LB]
-Nach hinten schauen
-
-[FEC_LR]
-Nach rechts schauen
-
-[FEC_HOR]
-Hupe
-
-[FEC_VES]
-Fahrzeug steuern
-
-[FEC_RSC]
-Radiosender auswãhlen
-
-[FEC_BRA]
-Bremsen\rückwãrts fahren
-
-[FEC_HAB]
-Handbremse
-
-[FEC_CAW]
-Fahrzeugwaffe
-
-[FEC_ACC]
-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:
-
-[FEA_ST]
-Stereo
-
-[FEA_MNO]
-Mono
-
-[FEA_NON]
-Keinen
-
-[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]
-CHATTERBOX 109
-
-[FED_DBG]
-Menu Debug
-
-[FED_RID]
-Reload IDE
-
-[FED_RIP]
-Reload 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]
-Debug Streaming Requests
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FEM_MCM]
-Memory Card Menü
-
-[FEM_RMC]
-Register MemCard One
-
-[FEM_TFM]
-Test Format MemCard One
-
-[FEM_TUM]
-Test UnFormat MemCard One
-
-[FEM_CRD]
-Create Root Dir
-
-[FEM_CLI]
-Create And Load Icons
-
-[FEM_FFF]
-Fill First File with Guff
-
-[FEM_SOG]
-Save Only The Game
-
-[FEM_CES]
-Check Every 0kB4 Save
-
-[FEM_STG]
-Save The Game
-
-[FEM_STS]
-Save The Game under GTA3 name
-
-[FEM_CPD]
-Create copy protected mag directory
-
-[FEM_MC2]
-Memory Card Menu 2
-
-[FEM_TS]
-Test Save:
-
-[FEM_TL]
-Test Load:
-
-[FEM_TD]
-Test Delete:
-
-[PL_STAT]
-Spielerstatistiken
-
-[PE_WAST]
-Von dir abservierte Personen
-
-[PE_WSOT]
-Von anderen abservierte Personen
-
-[CAR_EXP]
-Explodierte Autos
-
-[TM_BUST]
-Zahl deiner Verhaftungen
-
-[M_WASTE]
-Mãnnliche Passanten
-
-[F_WASTE]
-Weibliche Passanten
-
-[PIG_WST]
-Cops
-
-[GNG_WST]
-Gang-Mitglieder
-
-[MED_WST]
-Sanitãter
-
-[FIRE_WS]
-Feuerwehrmãnner
-
-[DED_CRI]
-Kriminelle
-
-[DED_DED]
-Schnorrer
-
-[DED_HOK]
-Girls
-
-[HEL_DST]
-Zerstörte Helikopter
-
-[PER_COM]
-Absolviert (in Prozent)
-
-[KGS_EXP]
-Sprengstoffverbrauch in kg
-
-[ACCURA]
-Treffsicherheit
-
-[ELBURRO]
-Beste Turismo-Zeit in Sekunden
-
-[CAR_CRU]
-Geschrottete Autos
-
-[HED_EX]
-Köpfe
-
-[TM_DED]
-Krankenhausbesuche
-
-[DAYSPS]
-Im Spiel verstrichene Tage
-
-[MMRAIN]
-Regenfãlle in mm
-
-[MXCARD]
-Weitester IRRSINNS-Sprung (in Fuß)
-
-[MXCARJ]
-Höchster IRRSINNS-Sprung (in Fuß)
-
-[MXCARDM]
-Weitester IRRSINNS-Sprung (m)
-
-[MXCARJM]
-Höchster IRRSINNS-Sprung (m)
-
-[MXFLIP]
-Max. Anzahl Saltos
-
-[MXJUMP]
-Max. Drehungen im Sprung
-
-[BSTSTU]
-Bester IRRSINNS-Stunt bisher:
-
-[INSTUN]
-Irrsinns-Stunt
-
-[PRINST]
-Super Irrsinns-Stunt
-
-[DBINST]
-Doppelter Irrsinns-Stunt
-
-[DBPINS]
-Super-Doppel-Irrsinns-Stunt
-
-[TRINST]
-Dreifacher Irrsinns-Stunt
-
-[PRTRST]
-Super-Dreifach-Irrsinns-Stunt
-
-[QUINST]
-Vierfacher Irrsinns-Stunt
-
-[PQUINS]
-Super-Vierfach-Irrsinns-Stunt
-
-[NOSTUC]
-Bisher keine Stunts geschafft
-
-[NOUNIF]
-Monster-Stunts geschafft
-
-[NOUNGM]
-Monster-Stunts insgesamt
-
-[NMISON]
-Begonnene Missionen
-
-[NMMISP]
-Erfüllte Missionen
-
-[PASDRO]
-Beförderte Fahrgãste
-
-[MONTAX]
-Mit Taxi verdientes Geld
-
-[DAYPLC]
-Tagesetat für Polizei
-
-[CRIMRA]
-Punktzahl:
-
-[GMSTOR]
-Spielarchiv
-
-[PREBRF]
-Vorherige Missionsinfos
-
-[CNTLS]
-Steuerung
-
-[MUSMEN]
-Musik SFX
-
-[GAMSET]
-Spieleinstellungen
-
-[LANGUA]
-Sprache
-
-[DSPLAY]
-Anzeige
-
-[DEBUGM]
-Debug Menu
-
-[QUITOP]
-Optionen verlassen
-
-[CONTRL]
-Konfiguration d. Steuerung
-
-[SET1EN]
-Konfiguration 1 aktiviert
-
-[SET1]
-Konfiguration 1
-
-[SET2EN]
-Konfiguration 2 aktiviert
-
-[SET2]
-Konfiguration 2
-
-[SET3EN]
-Konfiguration 3 aktiviert
-
-[SET3]
-Konfiguration 3
-
-[SET4EN]
-Konfiguration 4 aktiviert
-
-[SET4]
-Konfiguration 4
-
-[GOBACK]
-Zurück
-
-[SOUND]
-SOUND
-
-[MUSVOL]
-Lautstãrke Musik
-
-[SFXVOL]
-Lautstãrke SFX
-
-[SCROPT]
-BILDSCHIRMOPTIONEN
-
-[CTRSCR]
-Bildschirm zentrieren
-
-[SCRFOR]
-Bildschirmformat
-
-[GMSVLQ]
-SPEICHERN-LADEN-BEENDEN
-
-[GMREST]
-Spiel neu starten
-
-[NOGMSV]
-Du kannst nur in deinem Unterschlupf speichern.
-
-[DLFILE]
-GTA3 Dateien löschen
-
-[CHFILE]
-ZU LADENDE DATEI AUSWÃHLEN
-
-[CHCDLD]
-Wãhle Memory Card (PS2) von der geladen werden soll
-
-[CDUNFR]
-Memory Card (PS2) ist nicht formatiert.
-
-[CHFIDL]
-ZU LÖSCHENDE DATEI AUSWÃHLEN
-
-[SVCONF]
-SPEICHERBESTÃTIGUNG
-
-[SVFNAM]
-Dateiname des gespeicherten Spiels:
-
-[SAVEDN]
-Fehler - Speicherung nicht vollstãndig.
-
-[LANGSL]
-SPRACHAUSWAHL
-
-[ENGLIS]
-Englisch
-
-[GERMAN]
-Deutsch
-
-[ITALIA]
-Italienisch
-
-[FRENCH]
-Französisch
-
-[SPAIN]
-Spanisch
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[PARSHP]
-Parse Heap
-
-[DBGFON]
-CTheScripts::DbgFlag On
-
-[DBFOFF]
-CTheScripts::DbgFlag Off
-
-[BGWHON]
-Big White Debug Light Switched On
-
-[BGWOFF]
-Big White Debug Light Switched Off
-
-[DSTRON]
-Debug Streaming Requests On
-
-[DSTROFF]
-Debug Streaming Requests Off
-
-[PDRGON]
-ShowPedRoadGroups On
-
-[PRGOFF]
-ShowPedRoadGroups Off
-
-[CRRGON]
-ShowCarRoadGroups On
-
-[CRGOFF]
-ShowCarRoadGroups Off
-
-[CLZOON]
-Show Cull Zones On
-
-[CLZOOF]
-Show Cull Zones Off
-
-[SHPLON]
-gbShowCollisionPolys On
-
-[SHPLOF]
-gbShowCollisionPolys Off
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[FORMM1]
-FormatMemCard 1 (teststuff)
-
-[UNFRM1]
-UnFormatMemCard 1 (teststuff)
-
-[GORLEV]
-Gewalt-Level
-
-[SICASS]
-Mittel
-
-[SICSIC]
-Hoch
-
-[SCASSL]
-Gewalt-Level 'mittel' gewãhlt
-
-[SCSCSL]
-Gewalt-Level 'hoch' gewãhlt
-
-[PRVMEN]
-Vorherige Missionsinfos
-
-[DOSVGM]
-Spiel speichern?
-
-[FORMEN]
-Formatierungsmenü
-
-[MEMTST]
-Memory Card-Testmenü
-
-[REGCAR]
-Memory Card 1 registrieren
-
-[TEFONE]
-Memory Card 1 testweise formatieren
-
-[TEUFON]
-Memory Card 1 testweise de-formatieren
-
-[CRROOT]
-CreateRootDir
-
-[CRLDIC]
-Create and Load Icons
-
-[FLFSGF]
-Fill First File With Guff
-
-[PUSAVE]
-Save Only the game
-
-[CHEVOK]
-CheckEveryOkB4Save
-
-[SVGMON]
-SaveTheGame
-
-[CNTSAV]
-Spiel kann nicht gespeichert werden. Mitten in Mission.
-
-[CNCSAV]
-Spiel kann nicht gespeichert werden. Du bist im Auto.
-
-[CRMGSV]
-Create copy protected magazine directory
-
-[MGSVCN]
-MagazineDirectory Created
-
-[MGSVNC]
-MagazineDirectory Not Created
-
-[YES]
-Ja
-
-[NO]
-Nein
-
-[X]
-x
-
-[LAST]
-Letzte Nachricht
-
-[FEDS_XB]
-Auswãhlen
-
-[FEDS_ST]
-START-Taste - WEITER
-
-[FEST_OO]
-von
-
-[FEC_TUC]
-Geschützsteuerung
-
-[FEC_SM3]
-Spezialmission aktivieren (R3-Taste)
-
-[FEC_RS3]
-Radiosender auswãhlen (L3-Taste)
-
-[FEC_HO3]
-Hupe (L3-Taste)
-
-[DIAB1]
-'GRAN TURISMO'
-
-[DIAB2]
-'BRANDHEISSE EISCREME'
-
-[DIAB3]
-'FEUERTAUFE'
-
-[DIAB4]
-'JÃGER DES VERLORENEN SCHUNDES'
-
-[DIAB1_A]
-El Burro bietet dir eine Chance. Über den öffentlichen Fernsprecher in Hepburn Heights erfãhrst du nãheres.
-
-[DIAB1_C]
-Du bist kein übler Fahrer. Komm wieder zu dem Telefon. Vielleicht hat El Burro noch mehr Jobs für dich.
-
-[DIAB1_1]
-~g~3...2...1... LOS. LOS, LOS!
-
-[DIAB1_4]
-~g~Schnapp dir einen schnellen Wagen und fahr zum Start.
-
-[DIAB1_3]
-~r~Du würdest nicht mal beim Sackhüpfen gewinnen, du LOSER!
-
-[DIAB1_2]
-~g~Gratulation! Du hast gesiegt. In der unglaublichen Zeit von ~1~ Sekunden.
-
-[FIRST]
-~g~1.
-
-[SECOND]
-~g~2.
-
-[THIRD]
-~g~3.
-
-[FOURTH]
-~g~4.
-
-[DIAB2_1]
-~g~Hol die Aktentasche in Harwood ab.
-
-[DIAB2_2]
-~g~Such dir einen Eis-Wagen.
-
-[DIAB2_3]
-~g~Parke den Eis-Wagen unten bei den Atlantic Quays.
-
-[DIAB2_4]
-~g~Drücke die ~w~~k~~VEHICLE_HORN~-Taste~g~, um den Eiscreme-Jingle abzuspielen.
-
-[DIAB2_6]
-~g~Drücke die ~w~~k~~VEHICLE_HORN~-Taste~g~, um den Eiscreme-Jingle abzuspielen.
-
-[DIAB2_7]
-~g~Drücke die ~w~~k~~VEHICLE_HORN~-Taste~g~, um den Eiscreme-Jingle abzuspielen.
-
-[DIAB2_5]
-~g~Steig aus und sprenge den Eis-Wagen mit dem Fernzünder.
-
-[YD1]
-'SCHNELLE AUTOS, SCHNELLES GELD'
-
-[YD2]
-'UZI RIDER'
-
-[YD3]
-'DER GROSSE AUTOKLAU'
-
-[YD4]
-'TAG DER RACHE'
-
-[YD_P]
-King Courtney will dich sprechen - am Telefon in Aspatria!!
-
-[YD1_A]
-~w~Hier spricht King Courtney.
-
-[YD1_A1]
-~w~Meine Yardies könnten einen Fahrer brauchen, und du hast keinen schlechten Ruf.
-
-[YD1_B]
-~w~Fahr mit einem Wagen zu dem Gelãnde gegenüber dem Stadion und warte auf die anderen Mitbewerber.
-
-[YD1_C]
-~w~Meine Mãnner beobachten Checkpoints überall in Staunton.
-
-[YD1_D]
-~w~Wer einen Checkpoint als erster erreicht, kriegt $1000. Dann geht's weiter zur nãchsten Station.
-
-[YD1_D1]
-~w~Wenn du mehr Checkpoints als die anderen gewinnst, habe ich vielleicht Arbeit für dich.
-
-[YD1_E]
-~g~Fertigmachen zum Start!
-
-[YD1_F]
-~g~Du bist zu früh gestartet. Das gefãllt mir!!
-
-[YD1_G]
-~r~Dies ist ein AUTORENNEN. Du brauchst ein AUTO, Hirni!
-
-[YD1GO]
-~g~LOS!!
-
-[YD1_1]
-~r~1
-
-[YD1_2]
-~r~2
-
-[YD1_3]
-~r~3
-
-[YD1_BON]
-$1000!!
-
-[Y1_1ST]
-~g~Du bist Erster mit ~1~ gewonnenen Checkpoints!
-
-[Y1_2ND]
-~y~Zweiter mit ~1~ gewonnenen Checkpoints. ~y~Tja, knapp daneben ist auch versagt!
-
-[Y1_3RD]
-~r~Dritter mit ~1~ gewonnenen Checkpoints. ~r~Findest du das okay?
-
-[Y1_LAST]
-~r~Du bist Letzter! ~r~Du vergeudest meine Zeit, BLÖDMANN!
-
-[Y1_J1ST]
-~y~Du teilst dir den 1. Platz. ~1~ gewonnene Checkpoints. ~y~Gut, aber du musst der Beste sein, um für Queen Lizzy zu fahren!
-
-[Y1_J2ND]
-~r~Du teilst dir den 2. Platz. ~1~ gewonnene Checkpoints. Du Schlãfer!
-
-[Y1JLAST]
-~r~Du bist unter den Letzten! Wo hast du deinen Führerschein gemacht?
-
-[Y1_TEST]
-AUTO IM WASSER!!
-
-[YD2_A]
-~w~Ich will sehen, ob du die Drecksjobs für mich machen kannst.
-
-[YD2_A1]
-Mal sehen, ob man dir trauen kann.
-
-[YD2_B]
-Gleich kommen zwei meiner Jungs und holen dich ab.
-
-[YD2_B1]
-Wollen sehen, ob du so gut bist, wie du sagst.
-
-[YD2_C]
-~w~Wir fahren nach Hepburn Heights und nehmen uns ein paar Diablos vor, die Queen Lizzy angemacht haben.
-
-[YD2_CC]
-~w~Hier, du wirst 'ne Knarre brauchen.
-
-[YD2_D]
-~w~Du fãhrst UND ballerst. Wir achten drauf, dass du keine kalten Füße kriegst.
-
-[YD2_E]
-~w~Los geht's!!
-
-[YD2_F]
-~r~Er haut ab! Schnapp dir den Feigling!!!
-
-[YD2_G1]
-~w~Hepburn Heights. Knöpf dir ein paar Diablos vor.
-
-[YD2_G2]
-~w~ Aber denk dran, ~r~du steigst nicht aus dem Wagen!!
-
-[YD2_H]
-~w~Okay, fahr uns zurück auf Yardie-Gebiet! LOS, LOS, LOS!!
-
-[YD2_L]
-~w~Gut gemacht, Sichler!
-
-[YD2_M]
-~r~Er hat mein Auto geschrottet! Mach ihn fertig!
-
-[YD2_N]
-~w~Steig sofort wieder in den Wagen!
-
-[YD3_A]
-Besorg ein paar Bandenautos,
-
-[YD3_A1]
-damit wir auf Feindgebiet operieren können.
-
-[YD3_B]
-Ich brauche einen Mafia Sentinel,
-
-[YD3_B1]
-einen Yakuza Stinger und einen
-
-[YD3_B2]
-Diablo Stallion. So können wir jede Gang in Liberty angreifen.
-
-[YD3_C]
-Stell sie in der Garage in Newport ab. Aber denk dran: ,
-
-[YD3_C1]
-Geschrottet nützen sie uns nichts!!
-
-[YD3_D]
-Spare text label
-
-[YD3_E]
-~r~Du hast bereits einen Diablo-Wagen!
-
-[YD3_F]
-~r~Du hast bereits einen Mafia-Wagen!
-
-[YD3_G]
-~r~Du hast bereits einen Yakuza-Wagen!
-
-[YD3_H]
-~g~Diablo-Wagen besorgt!
-
-[YD3_I]
-~g~Mafia-Wagen besorgt!
-
-[YD3_J]
-~g~Yakuza-Wagen besorgt!
-
-[YD3_K]
-~r~Das Auto ist praktisch Schrott! Repariere es!
-
-[YD3_L]
-~g~Fahr das Auto zu der ~p~Garage!
-
-[YD3_M]
-~r~Du hast dich überschlagen! Besorg ein anderes Auto!
-
-[YD4_A]
-Hör zu!
-
-[YD4_A1]
-Komm nach Bedford Point.
-
-[YD4_A2]
-In einem alten Wagen ist etwas versteckt. Das brauche ich pronto!
-
-[YD4_B]
-BRIEF: Man hört, du bist ein viel beschãftigter Mann. Nun, ich bin eine viel beschãftigte Frau.
-
-[YD4_C]
-Es wird Zeit, dass du die wahre Macht von 'SPANK' kennen lernst! Besos y fuderes, Catalina, xxx.
-
-[YD4_D]
-PS: FAHR ZUR HÖLLE!!
-
-[YD4_1]
-Irre auf SPANK!!
-
-[YD4_2]
-~g~Zerstöre die SPANK-Lieferwagen!!
-
-[HM_1]
-'DRIVE-BY ACTION'
-
-[HM_2]
-'TÖDLICHES SPIELZEUG'
-
-[HM_3]
-'DAS HÖLLENFAHRTSKOMMANDO'
-
-[HM_5]
-'SHOWDOWN'
-
-[HOOD1_A]
-Komm zu dem Fernsprecher in Wichita Gardens. Es gibt Arbeit.
-
-[HM1_A]
-Yo! Hier spricht D-Ice von den Red Jacks!
-
-[HM1_C]
-Diese pubertãren Idioten treiben sich hier rum und haben nichts als Knarren und SPANK im Sinn.
-
-[HM1_3]
-~g~Die 'Nines' hãngen in ihrem Gebiet in Wichita Gardens rum.
-
-[HM2_3]
-Wenn du die Reifen eines Wagens triffst, explodiert der Buggy!
-
-[HM2_4]
-Wenn er außer Reichweite kommt, explodiert der Buggy!
-
-[HM2_5]
-~r~Außer Reichweite!
-
-[HM3_1]
-~g~Fahr zur Garage. Aber Vorsicht: Wird der Wagen zu stark beschãdigt, explodiert er!
-
-[HM3_2]
-~g~Bring den Wagen zurück. Er muss in 1A Zustand sein. Keine Delle!
-
-[HM3_3]
-~g~Repariere den Wagen!
-
-[HM4_D]
-~g~Besorg dir ein Fahrzeug!
-
-[HM4_E]
-TEXT NO LONGER REQUIRED
-
-[HM4_1]
-~g~Begib dich an den Ort, wo die Ladung herumliegt. Du musst 30 Goldbarren einsammeln.
-
-[HM4_2]
-~g~Denk dran: Wird der Wagen zu schwer und zu langsam, fahr in die Garage und lade das Zeug aus.
-
-[HM5_3]
-~r~Du solltest nur einen Baseball-Schlãger verwenden!
-
-[HM5_4]
-~r~Deine Kontaktperson ist tot!
-
-[MEA1]
-'DER ABKOCHER'
-
-[MEA2]
-'DIE DIEBE'
-
-[MEA3]
-'DIE FRAU'
-
-[MEA4]
-'IHR LIEBHABER'
-
-[MEAT1_A]
-Man sagt, du kannst mir bei einigen Problemen helfen. Wenn das so ist, komm zu dem Fernsprecher in Trenton.
-
-[MEA1_B3]
-~g~Triff dich mit dem Bankier.
-
-[MEA1_B6]
-~g~Fahr das Auto zur Schrottpresse, um Beweise zu beseitigen. Steig aus, der Kran hebt das Auto rein.
-
-[MEA1_1]
-~r~Der Bankier ist tot!
-
-[MEA1_2]
-~r~Du solltest den Wagen doch verschrotten!
-
-[MEA1_3]
-~g~Steig aus dem Wagen!
-
-[MEA1_4]
-~r~Du hast den Bankier nicht mitgenommen!
-
-[MEA2_B3]
-~g~Triff dich mit den Dieben.
-
-[MEA2_B4]
-~g~Bring sie zur Bitchin' Dog Food Fleischfabrik.
-
-[MEA2_B6]
-~g~Spritz den Wagen um, um Beweise zu beseitigen.
-
-[MEA2_1]
-~r~Du solltest den Wagen doch verschrotten!
-
-[MEA2_2]
-~r~Ein Dieb ist tot!
-
-[MEA2_4]
-~r~Du hast einen Dieb nicht mitgenommen!
-
-[MEA3_B3]
-~g~Hole Mrs. Chonks ab.
-
-[MEA3_B6]
-~g~Versenke den Wagen im Meer, um Beweismaterial zu beseitigen.
-
-[MEA3_1]
-~r~Die Frau ist tot!
-
-[MEA3_2]
-~r~Du solltest den Wagen doch im Meer versenken!
-
-[MEA3_3]
-~r~Du hast die Frau nicht mitgenommen!
-
-[MEA4_B3]
-~g~Hol den Liebhaber seiner Frau ab.
-
-[MEA4_B6]
-Dazu ist es jetzt zu spãt, Marty. Du hattest deine Chance. Jetzt übernehme ich den Laden hier.
-
-[MEA4_1]
-~r~Carlos ist tot!
-
-[MEA4_3]
-~r~Du hast Carlos den Kredithai nicht mitgenommen!
-
-[LOOK_A]
-Halte die ~h~~k~~VEHICLE_LOOKLEFT~-Taste ~w~oder die ~h~~k~~VEHICLE_LOOKRIGHT~-Taste~w~ gedrückt, um im Wagen sitzend nach ~h~links~w~ oder ~h~rechts~w~ zu sehen. Drücke beide Tasten, um nach ~h~hinten~w~ zu sehen.
-
-[LOVE6_1]
-~g~Locke jetzt die Cops vom Lagerhaus weg!
-
-[LOVE6_2]
-~r~Du hast die Cops nicht weit genug weggelockt!
-
-[RM4_3]
-~r~Rays Partner ist entkommen!
-
-[RM6_C]
-Die CIA scheint sich sehr für SPANK zu interessieren.
-
-[RM6_C1]
-Sie wollen, dass wir das Kartell in Ruhe lassen.
-
-[C_PASS]
-BEDROHUNG AUSGERÃUMT!
-
-[CTUTOR]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Bürgerwehr Missionen zu aktivieren oder zu deaktivieren.
-
-[CTUTOR2]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Bürgerwehr Missionen zu aktivieren oder zu deaktivieren.
-
-[COPCART]
-~g~Du hast ~1~ Sekunden, um zu einem Polizeiwagen zurückzukehren, bevor die Mission endet.
-
-[C_FAIL]
-Mission beendet!
-
-[C_CANC]
-~r~Bürgerwehr Mission abgebrochen!
-
-[C_ESCP]
-~r~Der Verdãchtige ist entwischt!
-
-[C_TIME]
-~r~Deine Zeit als Gesetzeshüter ist vorbei!
-
-[C_VIGIL]
-BÜRGERWEHR BONUS!!
-
-[A_FAIL2]
-~r~Deine Bummelei war tödlich für den Patienten!
-
-[A_FAIL3]
-~r~Der Patient ist tot!!
-
-[A_PASS]
-Gerettet!
-
-[F_FAIL2]
-~r~Du kommst zu spãt!
-
-[A_COMP2]
-Du ermüdest nie!
-
-[RM2_M]
-Wenn du eine Waffe brauchst, komm vorbei und nimm dir aus den Kãsten, was du brauchst.
-
-[HEAL_A]
-Dein ~h~Gesundheit~w~ wird rechts oben auf dem Bildschirm in Orange angezeigt.
-
-[YD1_CNT]
-~1~ von 15!
-
-[FM1_9]
-~g~Da vorne ist die Party. Setz Maria vor dem Gebãude ab.
-
-[FM1_Y]
-~w~Das war seit langem mal wieder ein guter Abend. Und du hast mich wirklich gut behandelt, mit Respekt und so.
-
-[FM1_AA]
-~w~Oh, ich geh jetzt besser. Ich hoffe, wir sehen uns.
-
-[NOCONTE]
-Bitte stecken Sie einen Analog Controller (DUALSHOCK#) oder einen Analog Controller (DUALSHOCK#2) in Controller-Anschluss 1, um fortzufahren.
-
-[WRCONT]
-Der Controller an Controller-Anschluss 1 wird nicht unterstützt. GTA3 benötigt einen Analog Controller (DUALSHOCK#) oder einen Analog Controller (DUALSHOCK#2).
-
-[WRCONTE]
-Der Controller an Controller-Anschluss 1 wird nicht unterstützt. GTA3 benötigt einen Analog Controller (DUALSHOCK#) oder einen Analog Controller (DUALSHOCK#2).
-
-[WRONGCD]
-Falsche DVD. Bitte legen Sie die richtige DVD ein.
-
-[NOCD]
-Die DVD-Lade ist leer. Bitte DVD einlegen.
-
-[OPENCD]
-Die DVD-Lade ist offen. Bitte schließen.
-
-[CDERROR]
-Fehler beim Lesen der GTA3 DVD.
-
-[RESTART]
-Neues Spiel wird gestartet
-
-[GA_3]
-Keine Gratisjobs mehr. Umspritzen kostet $1000!
-
-[GA_1]
-So was heißes rühre ich nicht an!
-
-[GA_1A]
-Komm wieder, wenn du nicht so viel zu tun hast...
-
-[S_PROM2]
-In die Garage nebenan kann 1 Fahrzeug eingestellt werden, wenn du das Spiel speicherst.
-
-[STOCK]
-Nicht vorrãtig
-
-[FM1_O]
-~w~Er ist beim Bahnhof am Chinatown-Ufer, glaube ich.
-
-[EBAL_B]
-Hier ist es! Los, wir tauchen ab und besorgen uns neue Klamotten!
-
-[EBAL_G]
-Hier ist Luigis Club. Wir gehen hinten rum und nehmen den Lieferanteneingang.
-
-[AM4_3]
-Du musst Asukas neuer Botenjunge sein!
-
-[AM4_4]
-Hast du das Geld? Die ganze Summe?
-
-[AM4_5]
-Ich weiß, was du denkst. Wieder so ein korrupter Cop.
-
-[AM4_6]
-Tja, die Welt ist schlecht.
-
-[AM4_7]
-Nur weil ich ein paar Partner verloren habe, sitzen mir die Typen von der Dienstaufsicht im Genick.
-
-[AM4_8]
-Die glauben, ich habe Dreck am Stecken.
-
-[AM4_9]
-Tja, die ganze Stadt ist ein einziges Dreckloch.
-
-[AM4_10]
-Aber ich brauch Hilfe von außerhalb der Polizei.
-
-[AM4_11]
-Falls du interessiert bist... du weißt, wo du mich findest.
-
-[CAM_A]
-Drücke die ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~-taste~w~, um den ~h~Blickwinkel ~w~zu verãndern, wenn du zu Fuß oder in einem Fahrzeug unterwegs bist.
-
-[CAM_B]
-Drücke die ~h~Richtungstaste Oben~w~ und die ~h~Richtungstaste Unten~w~, um den ~h~Blickwinkel ~w~zu verãndern, wenn du zu Fuß oder in einem Fahrzeug unterwegs bist.
-
-[KM2_1]
-~g~Repariere den Wagen. Er muss top aussehen.
-
-[LM3_6]
-Joey...
-
-[LM3_6A]
-Na, ein bisschen Nahkampf mit deiner Braut gefãllig?
-
-[LM3_9A]
-Vielleicht gibt's Arbeit für dich.
-
-[LM3_9B]
-Okay?
-
-[AWAY2]
-~r~Sie sind entkommen.
-
-[AWAY]
-~r~Er ist verschwunden!
-
-[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_7B]
-Mach die Bombe mit der ~h~~k~~PED_FIREWEAPON~-Taste~w~ scharf. Sie geht hoch, wenn der Wagen angelassen wird.
-
-[BAT1]
-~g~Nimm dir den Schlãger!
-
-[EBAL_O]
-Wenn du deine Sache gut machst, gibt's vielleicht noch mehr Jobs für dich. Und jetzt verschwinde!
-
-[HELP9_B]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um mit dem Prãzisionsgewehr zu ~h~feuern~w~.
-
-[HELP9_C]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um mit dem Prãzisionsgewehr zu ~h~feuern~w~.
-
-[JM6_8]
-~r~Du hast alle Rãuber verloren!
-
-[COLT_IN]
-Die Pistole ist jetzt im AmmuNation vorrãtig!
-
-[TAXI2]
-~r~Die Zeit ist um!
-
-[TAXI3]
-~r~Dein Fahrgast ist entsetzt geflohen!
-
-[TAXI7]
-~r~Dein Wagen ist Schrott. Repariere ihn.
-
-[TAXI4]
-Fahrt abgeschlossen!
-
-[TAXI5]
-SPEED BONUS!!
-
-[TAXI6]
-Taxi-Mission beendet
-
-[FRANGO]
-~g~Salvatore sagt, du sollst zuerst Toni mit den Triaden helfen.
-
-[PAGEB12]
-Polizei-Schmiergelder wurde im Versteck angeliefert.
-
-[PAGEB13]
-Gesundheits-Powerups wurde im Versteck angeliefert.
-
-[PAGEB14]
-Adrenalin wurde im Versteck vorrãtig.
-
-[KM1_4]
-~g~Du brauchst einen Polizeiwagen für diesen Job!
-
-[CAT1_B]
-dann bring $500 000 zu der Villa in Cedar Grove.
-
-[JM2_C]
-Er hat eine Imbissbude in Chinatown.
-
-[RM6_1]
-Hier ist ein Schlüssel für eine Garage.
-
-[RM6_2]
-Darin findest du Bargeld und ein paar 'Requisiten' für alle Fãlle.
-
-[RM6_3]
-Bis dann.
-
-[FE_INIP]
-Initalisiere und lade Pausenmenü. Bitte warten.
-
-[FESZ_CA]
-Abbrechen
-
-[FESZ_QU]
-Beenden
-
-[FESZ_L1]
-Spiel erfolgreich gespeichert!
-
-[FESZ_L2]
-Spiel gespeichert unter:
-
-[FESZ_OK]
-OK
-
-[FES_LGA]
-Spiel laden
-
-[FES_NGA]
-Neues Spiel
-
-[FES_CAN]
-Abbrechen
-
-[FESZ_QL]
-Alle nicht gespeicherten Daten des aktuellen Spiels werden verlorengehen. Ladevorgang fortsetzen?
-
-[FESZ_QD]
-Dieses gespeicherte Spiel wirklich löschen?
-
-[FESZ_QO]
-Dieses gespeicherte Spiel wirklich überschreiben?
-
-[FESZ_QR]
-Wirklich ein neues Spiel beginnen? Alle Daten seit dem letzten Speichern werden verlorengehen. Weiter?
-
-[FESZ_QS]
-SPEICHERN FORTSETZEN?
-
-[SLONFP]
-MEMORY CARD-Steckplatz 1: Datei geschützt.
-
-[T4X4_1]
-'PATRIOT RALLYE'
-
-[T4X4_2]
-'SPAZIERFAHRT IM PARK'
-
-[T4X4_3]
-'CHECKPOINT FIEBER'
-
-[MM_1]
-'VOLLGAS IM PARKHAUS'
-
-[T4X4_1A]
-~g~Du hast ~y~5 Minuten~g~, um ~y~15~g~ Checkpoints abzufahren. ~g~Die ~y~REIHENFOLGE IST BELIEBIG.
-
-[T4X4_1B]
-~1~ von 15!
-
-[T4X4_1C]
-~y~PASSIERE~g~ den ersten Checkpoint, dann lãuft die Zeit. ~g~Jeder Checkpoint bringt dir ~y~20 SEKUNDEN~g~.
-
-[T4X4_2A]
-~g~Du hast ~y~2 Minuten~g~, um ~y~12~g~ Checkpoints abzufahren. ~g~Die ~y~REIHENFOLGE IST BELIEBIG.
-
-[T4X4_2B]
-~1~ von 12!
-
-[T4X4_2C]
-~y~PASSIERE~g~ den ersten Checkpoint, dann lãuft die Zeit. ~g~Jeder Checkpoint bringt dir ~y~10 SEKUNDEN~g~.
-
-[T4X4_3A]
-~g~Du hast ~y~5 Minuten~g~, um ~y~20~g~ Checkpoints abzufahren. ~g~Die ~y~REIHENFOLGE IST BELIEBIG.
-
-[T4X4_3B]
-~y~PASSIERE~g~ den ersten Checkpoint, dann lãuft die Zeit. ~g~Jeder Checkpoint bringt dir ~y~15 SEKUNDEN~g~.
-
-[T4X4_3C]
-~1~ von 20!
-
-[T4X4_F]
-~r~Du hast gekniffen! Schon überfordert?
-
-[MM_1_A]
-~g~Du hast ~y~2 Minuten~g~, um ~y~20 Checkpoints~g~ in dem Parkhaus abzufahren! ~g~Die ~y~REIHENFOLGE IST BELIEBIG.
-
-[MM_1_B]
-~1~ von 20!
-
-[MM_1_C]
-~g~Das macht 20 Sekunden plus ~y~5 SEKUNDEN~g~ für jeden Checkpoint. ~g~Die Zeit lãuft ~y~AB SOFORT.
-
-[FM2_14]
-~r~Du warst zu nah dran und hast Curly aufgeschreckt!
-
-[FM2_15]
-~g~Nicht zu nahe ran, sonst schöpft Curly Verdacht!
-
-[UPSIDE]
-~r~Du hast dich überschlagen!
-
-[FM2_16]
-SCHRECK-O-METER:
-
-[LM3_11]
-~g~Misty steigt in keinen Bus. Besorg ein anderes Fahrzeug!
-
-[LANDSTK]
-Landstalker
-
-[IDAHO]
-Idaho
-
-[STINGER]
-Stinger
-
-[LINERUN]
-Linerunner
-
-[PEREN]
-Perennial
-
-[SENTINL]
-Sentinel
-
-[PATRIOT]
-Patriot
-
-[FIRETRK]
-Feuerwehrwagen
-
-[TRASHM]
-Trashmaster
-
-[STRETCH]
-Stretch
-
-[MANANA]
-Manana
-
-[INFERNS]
-Infernus
-
-[BLISTA]
-Blista
-
-[PONY]
-Pony
-
-[MULE]
-Mule
-
-[CHEETAH]
-Cheetah
-
-[AMBULAN]
-Krankenwagen
-
-[FBICAR]
-F.B.I.
-
-[MOONBM]
-Moonbeam
-
-[ESPERAN]
-Esperanto
-
-[TAXI]
-Taxi
-
-[KURUMA]
-Kuruma
-
-[BOBCAT]
-Bobcat
-
-[WHOOPEE]
-Mr Whoopee
-
-[BFINJC]
-BF Injection
-
-[POLICAR]
-Polizei
-
-[ENFORCR]
-Enforcer
-
-[SECURI]
-Securicar
-
-[BANSHEE]
-Banshee
-
-[PREDATR]
-Predator
-
-[BUS]
-Bus
-
-[RHINO]
-Rhino
-
-[BARRCKS]
-Barracks OL
-
-[TRAIN]
-Zug
-
-[HELI]
-Helikopter
-
-[DODO]
-Dodo
-
-[COACH]
-Coach
-
-[CABBIE]
-Cabbie
-
-[STALION]
-Stallion
-
-[RUMPO]
-Rumpo
-
-[RCBANDT]
-RC Bandit
-
-[BELLYUP]
-Triad
-
-[MRWONGS]
-Mr Wongs
-
-[MAFIACR]
-Mafia
-
-[YARDICR]
-Yardie
-
-[YAKUZCR]
-Yakuza
-
-[DIABLCR]
-Diablo
-
-[COLOMCR]
-Cartel
-
-[HOODSCR]
-Hoods
-
-[AEROPL]
-Flugzeug
-
-[SPEEDER]
-Speeder
-
-[REEFER]
-Reefer
-
-[PANLANT]
-Panlantic
-
-[FLATBED]
-Flatbed
-
-[YANKEE]
-Yankee
-
-[BORGNIN]
-Borgnine
-
-[TOYZ]
-TOYZ
-
-[FEST_DF]
-Zu Fuß zurückgel. Meilen
-
-[FEST_DC]
-Mit Auto gefahrene Meilen
-
-[FESTDFM]
-Zu Fuß zurückgel. Meter
-
-[FESTDCM]
-Mit Auto gefahrene Meter
-
-[FEST_R1]
-Patriot Rallye in Sek.
-
-[FEST_R2]
-Spazierfahrt im Park in Sek.
-
-[FEST_R3]
-Checkpoint-Fieber in Sek.
-
-[FEST_RM]
-Vollgas durch die Parkgarage in Sek.
-
-[FEST_LS]
-Mit Krankenwagen gerettete Menschen
-
-[FEST_CC]
-Kriminelle bei Bürgerwehr Mission
-
-[FEST_FE]
-Gelöschte Feuer gesamt
-
-[FEST_LF]
-Lãngster Flug in Dodo
-
-[FEST_BD]
-Bestzeit Bombenentschãrfung
-
-[FEST_RP]
-Bestandene Amokfahrten
-
-[FEST_MP]
-Erledigte Missionen
-
-[FEST_BB]
-Schnelle Autos, Schnelles Geld:
-
-[FEST_H0]
-Meiste Checkpoints
-
-[FEST_GC]
-Geschrottete Gang-Autos:
-
-[FEST_H1]
-Im Dschungel der Diablos
-
-[FEST_H2]
-Mafia-Massaker
-
-[FEST_H3]
-Der Casino-Coup
-
-[FEST_H4]
-Rock'n'Roll mit Rumpo
-
-[USJI1]
-TEXT NO LONGER REQUIRED
-
-[USJI2]
-TEXT NO LONGER REQUIRED
-
-[USJI3]
-TEXT NO LONGER REQUIRED
-
-[USJ]
-MONSTER-STUNT-BONUS!
-
-[SPRAY]
-Fahre deinen Wagen in die Lackiererei, um deinen ~h~Fahndungslevel~w~ loszuwerden und das Auto zu ~h~reparieren~w~ und ~h~umzuspritzen~w~. Kosten - ~h~$1000.
-
-[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_8D]
-Drücke die~h~ ~k~~PED_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!
-
-[RATNG1]
-Taschendieb
-
-[RATNG2]
-Laufbursche
-
-[RATNG3]
-Gauner
-
-[RATNG4]
-Soldat
-
-[RATNG5]
-Profi
-
-[RATNG6]
-Fahrer
-
-[RATNG7]
-Gangster
-
-[RATNG8]
-Obergangster
-
-[RATNG9]
-Partner
-
-[RATNG10]
-Troubleshooter
-
-[RATNG11]
-Vollstrecker
-
-[RATNG12]
-Capo
-
-[RATNG13]
-Rechte Hand
-
-[RATNG14]
-Vize
-
-[RATNG15]
-Boss
-
-[1010]
-~r~Dein Fahrzeug liegt auf dem Kopf
-
-[1011]
-~r~Dein Fahrzeug liegt auf dem Kopf
-
-[1012]
-~r~Dein Fahrzeug liegt auf dem Kopf
-
-[1013]
-~r~Dein Fahrzeug liegt auf dem Kopf
-
-[1014]
-~r~Dein Fahrzeug liegt auf dem Kopf
-
-[JM4_10]
-Okay, Junge. Fahr mich zuerst in die Wãscherei in Chinatown. Ich hab da was zu erledigen.
-
-[JM4_11]
-Die Waschweiber da haben ihr Schutzgeld nicht bezahlt.
-
-[JM4_12]
-Und pass auf den Wagen auf. Joey hat ihn gerade repariert.
-
-[JM4_13]
-Also, keine Dummheiten, okay?
-
-[KM4_11]
-~g~Bring das Geld ins Casino!
-
-[FEF_BR2]
-Orientiere dich, indem du alle bisherigen Einsatzbesprechungen durchsiehst.
-
-[TRAIN_1]
-Kurowski Station
-
-[TRAIN_2]
-Rothwell Station
-
-[TRAIN_3]
-Baillie Station
-
-[SUBWAY1]
-Portland Station
-
-[SUBWAY2]
-Rockford Station
-
-[SUBWAY3]
-Staunton South Station
-
-[SUBWAY4]
-Shoreside Terminal
-
-[MEA4_2]
-~r~Marty Chonks ist tot!
-
-[SPRAY1]
-Fahre deinen Wagen in die Lackiererei, um deinen ~h~Fahndungslevel~w~ loszuwerden und das Auto zu ~h~reparieren~w~ und ~h~umzuspritzen~w~. Kosten - ~h~$1000~w~. Diesmal kostet es nichts.
-
-[JM4_A]
-Ja, ich weiß, Toni, ich hab sie gut erzogen. Sie schnurrt, falls du verstehst, was ich meine.
-
-[JM4_5]
-Komm spãter wieder, dann zeigen wir den Kerlen, was Sache ist.
-
-[AMMU_A]
-Luigi sagt, du brauchst 'ne Knarre...
-
-[AMMU_B]
-Joey sagt, ich soll dich 'ausrüsten'...
-
-[AMMU_C]
-Geh hinten um den Laden herum. Ich hab eine 9mm im Hof deponiert.
-
-[AMMU_D]
-Ich hab alles, was man so zur Selbstverteidigung braucht.
-
-[AMMU_E]
-Willst du auch 'nen Waffenschein?
-
-[AMMU_F]
-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_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.
-
-[RECORD]
-~g~NEUER REKORD!!
-
-[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.
-
-[RCHELPA]
-Drücke die ~k~~PED_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!
-
-[RC_2]
-Du hast 2 Minuten, um so viele Mafia-Autos wie möglich zu sprengen!
-
-[RC_3]
-Du hast 2 Minuten, um so viele Yakuza-Autos wie möglich zu sprengen!
-
-[RC_4]
-Du hast 2 Minuten, um so viele Yardie-Autos wie möglich zu sprengen!
-
-[RC_5]
-Du hast 2 Minuten, um so viele Hood-Autos wie möglich zu sprengen!
-
-[RC_6]
-Du hast 2 Minuten, um so viele Kartell-Autos wie möglich zu sprengen!
-
-[RAMPAGE]
-AMOKLAUF!!
-
-[RAMP_P]
-AMOKLAUF BEENDET!
-
-[RAMP_F]
-AMOKLAUF FEHLGESCHLAGEN
-
-[PAGE_00]
-.
-
-[PAGE_01]
-Dein Job: ~1~ Diablos in 120 Sekunden!
-
-[PAGE_02]
-Zerstöre ~1~ Fahrzeuge in 120 Sekunden!
-
-[PAGE_03]
-Dein Job: ~1~ Mafiosi in 120 Sekunden!
-
-[PAGE_04]
-Dein Job: ~1~ Triaden in 120 Sekunden!
-
-[PAGE_05]
-Dein Job: ~1~ Triaden in 120 Sekunden!
-
-[PAGE_06]
-Zerstöre ~1~ Fahrzeuge in 120 Sekunden!
-
-[PAGE_07]
-Dein Job: ~1~ Yardies in 120 Sekunden!
-
-[PAGE_08]
-Dein Job: ~1~Yakuza in 120 Sekunden!
-
-[PAGE_09]
-Zerstöre ~1~ Fahrzeuge in 120 Sekunden!
-
-[PAGE_10]
-Zerstöre ~1~ Fahrzeuge in 120 Sekunden!
-
-[PAGE_11]
-Dein Job: ~1~ Yardies in 120 Sekunden!
-
-[PAGE_12]
-Dein Job: ~1~Yakuza in 120 Sekunden!
-
-[PAGE_13]
-Dein Job: ~1~ Yardies in 120 Sekunden!
-
-[PAGE_14]
-Dein Job: ~1~ Kolumbianer in 120 Sekunden!
-
-[PAGE_15]
-Dein Job: ~1~ Hoods in 120 Sekunden!
-
-[PAGE_16]
-Zerstöre ~1~ Fahrzeuge in 120 Sekunden!
-
-[PAGE_17]
-Nimm dir mit einem Auto ~1~ Kolumbianer in 120 Sekunden vor!
-
-[PAGE_18]
-Zerstöre ~1~ Fahrzeuge mit einem Drive-by in 120 Sekunden!
-
-[PAGE_19]
-Dein Job: ~1~ Kolumbianer in 120 Sekunden!
-
-[PAGE_20]
-Dein Job: ~1~ Hoods in 120 Sekunden!
-
-[JM1_A]
-Mir ist langweilig. Wann lãuft hier endlich mal was ab?
-
-[JM1_B]
-Gleich, Schãtzchen. Muss nur schnell was erledigen.
-
-[JM1_C]
-Ich hab 'nen kleinen Job für dich.
-
-[JM1_D]
-Die Forelli Brüder zahlen ihre Schulden nicht.
-
-[JM1_E]
-Ich muss ihnen ein bisschen Respekt einblãuen.
-
-[JM1_F]
-Lips Forelli stopft sich gerade in Marcos Bistro seinen fetten Bauch voll.
-
-[JM1_G]
-Klau ihm sein Auto und bring es in 8-Balls Bombenwerkstatt in Harwood.
-
-[JM1_H]
-Du kennst doch 8-Ball, oder?
-
-[JM1_I]
-Sobald er 'ne Bombe eingebaut hat, parkst du die Karre an ihrem alten Platz.
-
-[JM1_J]
-Dann lehn dich zurück und sieh dir die Show an.
-
-[JM1_K]
-Aber Beeilung. Der Typ isst nicht ewig.
-
-[CAT2_A1]
-Komm schon, du dummes Luder!
-
-[CAT2_A]
-Bist du eigentlich gekommen, um Maria zu retten, oder weil du heiß auf mich bist?
-
-[CAT2_B]
-Falls du's noch nicht weißt:
-
-[CAT2_B2]
-Die Dates mit dir waren Arbeit - dich fertig zu machen, wird ein Vergnügen.
-
-[CAT2_C]
-Du bist ein armes Würstchen, Amigo.
-
-[CAT2_D]
-Wirf die Kohle rüber!
-
-[CAT2_E]
-Du bist an sich ein fãhiger Bursche.
-
-[CAT2_E2]
-Aber du kapierst nicht, dass man mir nicht trauen kann.
-
-[CAT2_E3]
-Macht den Idioten fertig.
-
-[CAT2_J]
-Bring das Ding in die Luft!!
-
-[HM5_1]
-Yo, Ice hat dich angekündigt. Es gibt hier Regeln. Nur Schlãger. Keine Knarren, keine Autos.
-
-[HM5_5]
-Hier geht's um Respekt und Achtung, klar?
-
-[HELP14]
-Um Waffen aufzunehmen, gehe darüber hinweg. Dies funktioniert nicht, wenn du in einem Fahrzeug sitzt.
-
-[CRUSH]
-Parke in der markierten Zone und steig aus. Das Fahrzeug wird dann geschrottet.
-
-[DIAB2_B]
-Eine Bande von Taugenichtsen will mir ans Leder, falls ich sie nicht an meinen Geschãften beteilige.
-
-[DIAB2_C]
-Aber da sind sie an den Falschen geraten, Amigo.
-
-[DIAB2_D]
-Die haben eine Schwãche für Eiscreme.
-
-[DIAB2_E]
-Hol die Bombe ab, die ich in Harwood versteckt habe,
-
-[DIAB2_F]
-schnapp dir einen normalen Eis-Wagen, der rumfãhrt
-
-[DIAB2_G]
-und locke diese Idioten mit dem Eis-Jingle in ihr Verderben.
-
-[DIAB2_H]
-Sie verstecken sich in einem Lagerhaus auf den Atlantic Quays.
-
-[DIAB3_A]
-Irgendwelche frechen Triaden haben gestern Nacht meinen Traumwagen geklaut,
-
-[DIAB3_B]
-geschrottet und ausbrennen lassen.
-
-[DIAB3_C]
-Im Kofferraum waren einige sehr wertvolle Erinnerungsstücke,
-
-[DIAB3_D]
-unersetzliche Sammlerstücke, mein Freund.
-
-[DIAB3_E]
-Ich hab eine ziemlich heiße Waffe am Rand von Chinatown versteckt.
-
-[DIAB3_F]
-Hol sie dir und lehre die Triaden, El Burros Zorn zu fürchten.
-
-[DIAB3_1]
-NIMM DIR 25 TRIADEN VOR
-
-[DIAB4_A]
-Ein mieser Dieb hat einen Transporter mit der gesamten neuen Ausgabe meines Magazins gestohlen!
-
-[DIAB4_B]
-Aber dieser SPANK-Junkie hat die Hecktüren offen gelassen
-
-[DIAB4_C]
-und jetzt verteilt sich mein wunderschönes,
-
-[DIAB4_D]
-geschmackvoll fotografiertes Magazin gleichmãßig über ganz Liberty!
-
-[DIAB4_E]
-Nimm den Transporter, folge der Spur von 'Donkey Does Dallas' Nr. 1, 2 und 3.
-
-[DIAB4_F]
-Und sammle das Zeug wieder ein.
-
-[DIAB4_G]
-Wenn du bei diesem diebischen Junkie angekommen bist, nimm ihn dir vor!
-
-[DIAB4_H]
-Und dann lieferst du meine Magazine an das XXX Mags im Rotlichtviertel.
-
-[DIAB4_1]
-~g~Fahr den Transporter zur Rückseite des XXX Mags.
-
-[HM1_E]
-Ich möchte, dass du diesen Vollidioten zeigst, wie ein echter Driveby aussieht.
-
-[HM1_H]
-Schaff mir diese Nines vom Hals!!
-
-[HM2_A]
-Die Nines bringen mich in die Klemme.
-
-[HM2_B]
-Die Kerle haben gepanzerte Autos, und jetzt verhökern sie SPANK
-
-[HM2_C]
-an meine Brüder, als wãre das gar nichts.
-
-[HM2_D]
-Auf dem Weg steht ein Wagen geparkt.
-
-[HM2_E]
-Da ist was drin, was diesen Feiglingen Beine machen wird.
-
-[HM3_A]
-Irgend so ein Mistkerl hat 'ne Bombe in meine Karre eingebaut.
-
-[HM3_B]
-Wenn ich die Karre verliere, stehe ich als Trottel da.
-
-[HM3_C]
-Hol meinen Wagen ab und bring ihn in die Werkstatt in St. Mark's.
-
-[HM3_D]
-Die sollen die Bombe da entschãrfen.
-
-[HM3_E]
-Die Uhr tickt und die Drãhte sind locker.
-
-[HM3_F]
-Ein Schlagloch zuviel, und das Ding geht hoch.
-
-[HM3_G]
-Also, Beeilung!
-
-[HM4_A]
-Yo, ein Flugzeug der Staatsbank ist gerade beim Francis Int. Airport abgestürzt.
-
-[HM4_B]
-Auf dem ganzen Rollfeld liegt Platin rum
-
-[HM4_C]
-Schnapp dir ein Auto und sack so viel wie möglich davon ein.
-
-[HM4_F]
-Du kannst das Zeug in einer meiner Garagen abladen.
-
-[HM4_G]
-Platin ist verdammt schwer. Dein Auto wird etwas langsamer laufen.
-
-[HM4_H]
-Also, lade regelmãßig etwas davon in einer Garage ab.
-
-[HM5_A]
-Die Nines sind nur noch ein versprengter Haufen...
-
-[HM5_B]
-aber sie machen immer noch Stress.
-
-[HM5_C]
-Jetzt wollen sie's endgültig wissen.
-
-[HM5_D]
-Eine Gang von denen gegen zwei von uns. Oder vielmehr...
-
-[HM5_E]
-zwei von euch.
-
-[HM5_F]
-Ich wãre ja dabei, aber...
-
-[HM5_G]
-ich hab noch drei Monate Bewãhrung,
-
-[HM5_H]
-verstehst du, was ich meine?
-
-[HM5_I]
-Triff dich mit meinem kleinen Bruder.
-
-[HM5_J]
-Er zeigt dir, wo der Fight stattfindet, okay?
-
-[MEA1_B]
-Mein Name ist Chonks, Marty Chonks.
-
-[MEA1_C]
-Mir gehört die Bitchin' Dog Food Fleischfabrik um die Ecke.
-
-[MEA1_D]
-Ich hab Geldsorgen, aber wer hat die nicht, was?
-
-[MEA1_E]
-Ich treff mich spãter mit meinem Banker.
-
-[MEA1_F]
-Das ist ein linker Sãger, der mir dauernd die Kreditraten raufsetzt, um sich 'ne Scheibe abzuschneiden.
-
-[MEA1_G]
-Nimm mein Auto, hol ihn ab und bring ihn hierher.
-
-[MEA1_H]
-Ich habe eine kleine Überraschung für diesen Blutsauger!!
-
-[MEA2_A]
-Ich hab Diebe angeheuert, um in meine Wohnung einzubrechen.
-
-[MEA2_C]
-Jetzt drohen diese Dreckskerle, sie erzãhlen alles der Versicherung,
-
-[MEA2_D]
-wenn ich sie nicht beteilige.
-
-[MEA2_E]
-Ist das zu fassen?
-
-[MEA2_F]
-Ich hab einen Wagen innerhalb der Fabrik abgestellt.
-
-[MEA2_G]
-Hol damit die Kerle in ihrem Revier im Rotlichtbezirk ab.
-
-[MEA2_H]
-Bring sie in die Fabrik, damit ich ihnen meinen Standpunkt klarmachen kann.
-
-[MEA3_A]
-Wenn nicht bald ein Haufen Geld ins Haus kommt, gehe ich pleite.
-
-[MEA3_B]
-Meine Frau hat eine Versicherung, aber mir hat sie immer nur das Geld aus der Tasche gezogen.
-
-[MEA3_C]
-Ich hab ein Auto am gewohnten Ort abgestellt.
-
-[MEA3_D]
-Hol damit meine Frau vom Classic Nails Studio ab und bring sie in die Fabrik.
-
-[MEA4_A]
-Mist, ich steck in der Klemme!
-
-[MEA4_B]
-Meine Frau hatte was mit einem Typen, dem ich Geld schulde.
-
-[MEA4_C]
-Der ist jetzt ziemlich sauer und will sich rãchen!
-
-[MEA4_E]
-Der denkt, er kann mich erpressen...
-
-[MEA4_F]
-aber ich glaube eher,
-
-[MEA4_G]
-dass auch dieser gute Mann als Hundefutter enden wird.
-
-[WELCOME]
-WILLKOMMEN IN
-
-[HM1_2]
-~g~Besorg dir ein Fahrzeug. Beachte: Hier zãhlt nur die Uzi!
-
-[HELP8_B]
-Drücke die ~h~~k~~PED_SNIPER_ZOOM_IN~-Taste~w~ zum ~h~Heranzoomen~w~ mit dem Gewehr, und die ~h~~k~~PED_SNIPER_ZOOM_OUT~-Taste~w~ zum ~h~Wegzoomen~w~.
-
-[LRQC_1]
-Asuka und ich haben was zu besprechen.
-
-[LRQC_2]
-Fahr doch ein bisschen durch die Gegend.
-
-[LRQC_3]
-Du wirst einen Unterschlupf brauchen.
-
-[LRQC_4]
-Am Rand von Belleville ist ein Lagerhaus. Das könnte was für dich sein.
-
-[LRQC_5]
-Komm wieder hierher, wenn du fertig bist.
-
-[LRQC_6]
-Dann können wir uns ein bisschen unterhalten.
-
-[JM6_5]
-~g~Du brauchst einen Fluchtwagen, du Idiot!
-
-[JM2_F]
-Wenn du 'ne Knarre brauchst, geh zum Hintereingang vom AmmuNation gegenüber der U-Bahn.
-
-[LOVE4_7]
-~g~Es gibt einen Bauhof auf Staunton Island. Vielleicht haben sie das Pãckchen dorthin gebracht.
-
-[LOVE4_8]
-~g~Du brauchst ein Auto, um die Garage zu öffnen.
-
-[TSCORE]
-EINKÜNFTE: $~1~
-
-[AM1_9]
-~r~Salvatore hat sich in Luigis Club abgesetzt!
-
-[AM1_6]
-~g~Wenn du vor Luigis Club rumhãngst, bemerken dich die Mafiosi!
-
-[TM2_3]
-~g~Das ist eine Falle! Nimm sie dir alle vor!
-
-[FM4_1]
-Hier Maria. Das mit dem Wagen ist eine Falle! Komm zu dem Steg südlich der Callahan Bridge.
-
-[JM1_7]
-~g~Mach die Wagentür zu, sonst merkt er was!
-
-[KM5_1]
-~g~DEALER ERLEDIGT!!
-
-[KM5_6]
-~g~Du musst mind. 8 Yardie Dealer außer Gefecht setzen.
-
-[KM5_7]
-~g~Beeilung! Sobald sie ihr SPANK verhökert haben, verschwinden sie wieder.
-
-[RM3_8]
-~r~Dieser Wagen dient nur zur Ablenkung!!
-
-[LM3_8]
-Hi, ich bin Joey.
-
-[LM3_9]
-Luigi sagt, du bist verlãsslich. Also komm spãter wieder.
-
-[KM3_5]
-~g~Drück die Hupe, damit der Deal in Gang kommt.
-
-[LOVE7]
-LOVES VERSCHWINDEN
-
-[LOVE2_5]
-~g~Auftrag erledigt. Verschwinde aus Newport und dann weg mit dem Wagen!
-
-[AS2_11]
-~g~~1~ VON 9!
-
-[GARAGE1]
-~g~Steig aus und geh nach draußen.
-
-[KM3_11]
-~g~Das Kartell wurde angegriffen. Die Aktentasche wurde nicht sichergestellt.
-
-[KM3_12]
-~g~Nimm dir sãmtliche Kolumbianer vor, zerstöre die Fahrzeuge und stell die Aktentasche sicher.
-
-[KM3_13]
-~g~Bring die Aktentasche ins Casino.
-
-[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_2]
-Drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~, um die Bordkanonen abzufeuern.
-
-[DIAB1_B]
-Hier El Burro, von den Diablos.
-
-[DIAB1_D]
-Du bist neu in Liberty, aber du hast bereits eine guten Ruf auf der Straße.
-
-[DIAB1_E]
-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_1A]
-Zerstöre die gepanzerten Fahrzeuge mit den Buggies. Zur Zündung drücke die ~h~~k~~PED_FIREWEAPON~-Taste~w~.
-
-[HM2_2]
-~r~Du hast nicht alle gepanzerten Fahrzeuge zerstört!
-
-[HM2_6]
-~g~Gepanzertes Fahrzeug zerstört!
-
-[RM3_A]
-Ich kenne einen wichtigen Mann in der Stadt, mit
-
-[RM3_H]
-sagen wir mal, einem Sinn für's Exotische und dem nötigen Kleingeld dafür.
-
-[RM3_B]
-Er steht unter Anklage und der Staatsanwalt hat einige ziemlich peinliche Fotos von ihm
-
-[RM3_C]
-auf einer Friedhofsparty oder so.
-
-[LOVE6_A]
-Kleine Lektion in Sachen Business, mein Freund:
-
-[LOVE6_E]
-Hast du eine hochinteressante Ware, wird Gott und die Welt sie dir abjagen wollen...
-
-[LOVE6_C]
-Spezialeinheiten haben die Gegend um meinen Geschãftsfreund und das Pãckchen abgeriegelt.
-
-[LOVE6_D]
-Mach, dass du hinkommst, nimm den Transporter und lenk sie ab.
-
-[LOVE6_F]
-Beschãftige die Typen, damit er sich absetzen kann.
-
-[AM3_C]
-Vermutlich ist er in der Bucht draußen, wãhrend du dies liest. Nimm mein Boot und mach seiner Karriere ein Ende!
-
-[FESZ_UC]
-ABBRECHEN
-
-[FEDS_SM]
-L1, R1-MENÜ WECHSELN
-
-[FEDS_AS]
-;=-AUSWAHL ÃNDERN
-
-[FEDSAS2]
-<>-AUSWAHL ÃNDERN
-
-[FEDS_SS]
-L1, R1-AUSWAHL ÃNDERN
-
-[FEDSSC1]
-;-SCHNELLER BILDLAUF
-
-[FEDSSC2]
-=-BILDLAUF STOP
-
-[MEA2_3]
-~g~Bring das Auto zurück zur Fabrik.
-
-[RM1_3]
-~r~McAffrey ist entkommen!
-
-[RM1_4]
-~g~Du hast alle Granaten verbraucht! Hol neue im AmmuNation!
-
-[RM1_5]
-~g~Zurück! Zünde die sichere Wohnung an!
-
-[RM6_4]
-~g~Du musst zu der Garage und Rays Auto mit den Waffen holen.
-
-[RM6_5]
-~g~Die Brücke wird von der CIA überwacht. Such dir eine andere Route.
-
-[HM2_F]
-Und zerstöre alle ihre gepanzerten Wagen.
-
-[HM_4]
-'GOLDRAUSCH'
-
-[MEA2_B5]
-TEXT NO LONGER NEEDED
-
-[MEA1_B5]
-TEXT NO LONGER NEEDED
-
-[MEA3_B5]
-TEXT NO LONGER NEEDED
-
-[MEA4_B7]
-aber wenn du in mein Büro kommst, könnte ich...
-
-[MEA3_B4]
-Marty will mich sehen? Das muss aber schnell gehen, ich hab nãmlich einen Friseurtermin.
-
-[KM3_7]
-Das ist eine Falle der Yakuza, Mann!
-
-[FES_LOF]
-Laden fehlgeschlagen.
-
-[P1INSA]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1: ~1~K freier Speicherplatz. Erforderlich: ~1~K.
-
-[P1INSN]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1: Kein freier Speicherplatz. Bitte einige Dateien löschen.
-
-[FES_SLO]
-DATEI
-
-[FES_ISC]
-IST BESCHÃDIGT
-
-[FESZ_TI]
-Z1 SPEICHERN
-
-[FESZ_SA]
-Spiel speichern
-
-[P1NOIN]
-Keine Memory Card (PS2) in MEMORY CARD-Steckplatz 1
-
-[P1INSE]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 vorhanden
-
-[MC_LDFL]
-Laden fehlgeschlagen!
-
-[MC_NWRE]
-Spiel wird neu gestartet
-
-[LOVE6_3]
-~g~Du hast ~1~ Sekunden, um zu dem Securicar zurückzukehren, bevor die Mission fehlschlãgt.
-
-[LOVE6_4]
-~r~Du hast den falschen Securicar abgehãngt!
-
-[HELP1]
-Halte in der Mitte der blauen Markierung.
-
-[HELP12]
-Geh ins Zentrum der blauen Markierung, um eine Mission zu starten.
-
-[HJSTAT]
-Distanz: ~1~.~1~m Höhe: ~1~.~1~m Saltos: ~1~ Drehungen: ~1~_
-
-[HJSTATW]
-Distanz: ~1~.~1~m Höhe: ~1~.~1~m Saltos: ~1~ Drehungen: ~1~_ Und was für eine Landung!
-
-[DIAB1_5]
-ZEIT:
-
-[LOVE3_4]
-~r~Du hast das Flugzeug zerstört!
-
-[F_FAIL1]
-Feuerwehr -Mission beendet
-
-[F_CANC]
-~r~Feuerwehr -Mission abgebrochen!
-
-[F_EXTIN]
-FEUER:
-
-[A_COMP1]
-Krankenwagen Missionen abgeschlossen!
-
-[A_CANC]
-~r~Krankenwagen Mission abgebrochen!
-
-[A_COMP3]
-Krankenwagen Missionen abgeschlossen! Du wirst beim Laufen nie ermüden!
-
-[ATUTOR]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Krankenwagen Missionen an- oder abzuschalten.
-
-[ATUTOR3]
-Drücke die ~h~~k~~TOGGLE_SUBMISSIONS~-Taste~w~, um Krankenwagen Missionen an- oder abzuschalten.
-
-[ALEVEL]
-Krankenwagen Mission Level ~1~
-
-[A_FAIL1]
-Krankenwagen Mission beendet
-
-[FEST_HA]
-Höchster Krankenwagen Missions Level
-
-[A_SAVES]
-GERETTETE MENSCHEN: ~1~
-
-[C_KILLS]
-KRIMINELLE: ~1~
-
-[HM1_B]
-Ich hab 'n Problem. Die wollen mich verscheißern.
-
-[AM2_A]
-Sehr erfreulich, dass Salvatore nicht mehr unter uns weilt.
-
-[AM2_A2]
-Du bist ein effizienter Mann - das gefãllt mir.
-
-[AM2_B]
-Das ist mein Bruder Kenji.
-
-[AM2_C]
-Asuka hat einen kleinen Job für dich, aber wenn du fertig bist, komm in mein Casino, dann reden wir.
-
-[AM2_D]
-Typisch Kenji, immer will er mit meinen Spielsachen spielen.
-
-[AM2_E]
-Mein Spitzel bei der Polizei hat mir gesteckt, dass die Mafia unsere Aktivitãten im Auge behãlt.
-
-[AM2_E2]
-Sie wollen dich aufstöbern.
-
-[AM2_F]
-Wir müssen unsere Operationen ruhen lassen, bis wir ihnen das Handwerk gelegt haben.
-
-[AM2_G]
-Zieh die Kerle aus dem Verkehr und mach dieser Vendetta ein für alle mal ein Ende.
-
-[F_START]
-~g~Brennendes Fahrzeug in der Gegend von ~a~ gemeldet. Lösche den Brand.
-
-[AM4_1A]
-Komm zu dem Fernsprecher im West Belleville Park.
-
-[AM4_1B]
-Komm zu dem Fernsprecher auf dem Liberty Campus.
-
-[AM4_1C]
-Komm zu dem Fernsprecher im South Belleville Park.
-
-[AM4_1D]
-Wir treffen uns im Toilettenhãuschen im Park.
-
-[HJSTATF]
-Distanz: ~1~Fuß Höhe: ~1~Fuß Saltos: ~1~ Drehungen: ~1~_
-
-[HJSTAWF]
-Distanz: ~1~Fuß Höhe: ~1~Fuß Saltos: ~1~ Drehungen: ~1~_ Und was für eine Landung!
-
-[HM1_F]
-Aber pass auf. Es werden Jacks da sein, und die werden denken, du willst auch ihnen ans Leder!
-
-[HM1_D]
-Sie nennen sich 'Nines' und ihre Farbe ist 'Lila'. Und jeder Tag im Zeichen dieser Farbe...
-
-[HM1_G]
-ist ein Tag, an dem die Jacks schlecht aussehen.
-
-[MEA2_B]
-Und stiehl ein paar Sachen, damit ich die Versicherung kassieren kann.
-
-[TM3_H]
-~w~Das hast du gut gemacht vorhin, wirklich gut, mein Junge.
-
-[TM3_I]
-~w~Komm, wir stellen dich dem Don vor.
-
-[TM3_J]
-~w~Heeyyy! Luigi!
-
-[TM3_K]
-~w~Meine Girls fragen andauernd nach dir, Salvatore. Du warst so lange nicht mehr bei uns.
-
-[TM3_L]
-~w~Sag ihnen, wenn diese lãstige Geschichte hier vorbei ist,
-
-[TM3_M]
-~w~gehen wir alle in den Club und feiern, okay?
-
-[TM3_N]
-~w~Ah, mein Junge!
-
-[TM3_N2]
-~w~ Hallo, Paps.
-
-[TM3_O]
-~w~Hast du endlich eine Frau gefunden?
-
-[TM3_P]
-~w~Hey, Deine Mutter - Gott hab sie selig - würde sich im Grab umdrehen,
-
-[TM3_Q]
-~w~wenn du keine abkriegen würdest.
-
-[TM3_R]
-~w~Ich weiß, Paps, ich arbeite dran.
-
-[TM3_S]
-~w~TONI! Wie geht's deiner Mamma?
-
-[TM3_T]
-~w~Sie ist eine großartige Frau! Stark. Florentinerin eben.
-
-[TM3_U]
-~w~Es geht ihr gut. Sehr gut.
-
-[TM3_V]
-~w~Hervorragend. Okay, geht schon mal vor, ich hab was mit unserem neuen Freund hier zu bereden.
-
-[TM3_W]
-~w~Ich sehe goldene Zeiten auf dich zukommen, mein Junge...
-
-[RM1_A]
-Dieser McAffrey! Der hat mehr Bestechungsgeld kassiert als jeder andere.
-
-[RM1_B]
-Jetzt denkt er, er wird ehrenhaft entlassen, wenn er als Kronzeuge aussagt.
-
-[RM1_C]
-Er ist einfach ein Verrãter.
-
-[RM4_B]
-Wir müssen ihn zum Schweigen bringen - für immer.
-
-[RM4_E]
-Er soll bei den Fischen schlafen, statt sie zu essen.
-
-[LOVE3_B]
-Beim Landeanflug auf den Flughafen wird ein kleines Flugzeug die Bucht überfliegen.
-
-[LOVE4_D]
-Leider hat sich die Hafenbehörde die Maschine geschnappt und wollte sie auseinandernehmen,
-
-[LOVE4_H]
-bis ich das mit erheblichen Unkosten verhindert habe.
-
-[LOVE4_E]
-Fahr über die Brücke nach Shoreside Vale und dann zum Francis Int. Airport.
-
-[GTAB_A]
-Hey, schaffen wir das hier weg. Weiß der Teufel, was das ist.
-
-[GTAB_B]
-Aber da er's unbedingt haben will, muss es wohl was wert sein.
-
-[GTAB_C]
-Wer zum Teufel...?
-
-[GTAB_D]
-DU!
-
-[GTAB_E]
-Hey, ganz ruhig, Amigo! De nada! De nada!
-
-[GTAB_F]
-Ich dachte, ich hãtte dich erledigt!
-
-[GTAB_G]
-Nicht schießen, Amigo! Kein Problem. Wir sind alle Freunde. Hier, nimm.
-
-[GTAB_H]
-Nicht so memmenhaft!
-
-[GTAB_I]
-Wir haben keine Wahl, Baby!
-
-[GTAB_J]
-Wir haben immer eine Wahl, du dãmlicher Idiot!
-
-[GTAB_K]
-Sorry wegen dem abgedrehten Flittchen, Mann. Die sind doch alle gleich. Por favor?
-
-[GTAB_L]
-Das Luder ist also entwischt.
-
-[GTAB_M]
-Aber du hast mir einen Gefallen getan.
-
-[GTAB_N]
-Du bist nicht der einzige, der eine Rechnung mit dem Kartell offen hat.
-
-[GTAB_O]
-Dieser Wurm hat meinen Bruder auf dem Gewissen!
-
-[GTAB_P]
-I hab nie einen Yakuza umgebracht!
-
-[GTAB_Q]
-Lügner! Wir alle haben den Kartell-Attentãter gesehen.
-
-[GTAB_R]
-Wir werden euch kolumbianische Hunde alle erledigen!
-
-[GTAB_S]
-Ich befasse mich mit unserem Freund. Mal sehen, was ich aus ihm rauskriege.
-
-[GTAB_T]
-Komm spãter wieder. Ich werde deine Dienste brauchen.
-
-[GTAB_U]
-Bitte, Amigo, lass mich nicht hier bei ihr! Die ist 'n Psycho! Amigo? Hey, AMIIIGO!!!...Aiiieeeeaaargghh!
-
-[LOVE5_A]
-Du bist eine sichere Bank. So etwas ist selten in diesen schlechten Zeiten.
-
-[KM3_1]
-~g~Das Kartell erwartet eine Yardie Gang. Klau einen Yardie-Wagen! Fahr nach Norden. In Newport fndest du einen.
-
-[LOVE1_1]
-~g~Mit einem Wagen der Kolumbianer kommst du in ihren Unterschlupf rein. Im Norden, in Fort Staunton, findest du einen.
-
-[FM1_Q1]
-~w~Na, kleine Erfrischung gefãllig? Ein bisschen SPANK?
-
-[FM1_R]
-~w~Hi, Chico. Nein, nur das übliche.
-
-[FM1_T]
-~w~Danke, Chico. Bis bald.
-
-[FM1_W]
-~w~Okay, Fiffi, du passt hier auf den Wagen auf, ich geh ein bisschen abtanzen.
-
-[FM1_X]
-~w~Okay, Fiffi, lass uns 'nen Abgang machen. Huuh!
-
-[FM1_Q]
-~w~ Hey, Maria! Meine Traumfrau!
-
-[FM1_S1]
-~w~Vielleicht solltest du mal die Party in der Lagerhalle am Ostende von Atlantic Quays auschecken.
-
-[FM1_U]
-~w~ Gracias. Und viel Spaß. Ist gutes Zeug.
-
-[FM1_V]
-~w~Na los, Fiffi, sehen wir uns mal die Party an!
-
-[FM1_SS]
-~r~SCANNER: ~g~4-5 an alle Einheiten: Assistieren Sie bei der Rauschgift-Razzia in Atlantic Quays...
-
-[LOVE6_B]
-Auch wenn kaum einer weiß, wie viel sie wirklich wert ist.
-
-[TM3_A1]
-~r~Joey ist hinüber!
-
-[TM3_A2]
-~r~Joey und Luigi sind hinüber!
-
-[TM3_A3]
-~r~Joey, Luigi und Toni sind hinüber!
-
-[FM4_2]
-Hör zu, Salvatore denkt, ich betrüge ihn mit dir,
-
-[FM4_3]
-da hat er dem Kartell deinen Kopf angeboten, um einen Deal mit denen zu machen.
-
-[FM4_4]
-Das kann ich nicht zulassen. Das ist alles meine Schuld.
-
-[FM4_4B]
-Ich hab ihm erzãhlt, dass wir uns gut verstehen.
-
-[FM4_5]
-Frag mich nicht wieso. Ich weiß es nicht.
-
-[FM4_6]
-Auf Mafia-Gebiet bist du Freiwild, und ich muss auch abhauen.
-
-[FM4_6B]
-Ich hab genug von all der Gewalt, all dem Blut.
-
-[FM4_7]
-Das ist eine Freundin von mir, eine alte Freundin. Sie heißt Asuka. Ihr können wir trauen.
-
-[FM4_8]
-Kommt. Genug geredet.
-
-[FM4_9]
-Wir verschwinden lieber, bevor uns noch mehr hysterische Italiener unbedingt wiedersehen möchten.
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUCER
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-ART DIRECTOR
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-TECHNICAL DIRECTION
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-DESIGN
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-WRITTEN BY
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-CHARACTERS
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMATION & DIRECTION
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-AUTO DESIGN
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-ARTISTS
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODERS
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-SCORE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-SOUND DESIGN & MASTERING
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-AUDIO PROGRAMMING
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-TEST MANAGER
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-LEAD TESTERS
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRD050A]
-TESTERS
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-TECHNICAL SUPPORT
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-EXECUTIVE PRODUCER
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUCER
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRECTOR OF DEVELOPMENT
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-TECHNICAL PRODUCER
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-ASSOCIATE PRODUCER
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-MUSIC SUPERVISOR
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VP OF MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-TECHNICAL COORDINATOR
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-QA MANAGER
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-GAME ANALYST
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-TEST TEAM
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-LIBERTY TREE EDITORIAL
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-CUT-SCENES
-
-[CRED108]
-SCRIPT BY DAN HOUSER AND JAMES WORRALL
-
-[CRED109]
-AUDIO DIRECTED BY DAN HOUSER
-
-[CRED110]
-AUDIO PRODUCED BY RENAUD SEBBANE
-
-[CRED111]
-CAST
-
-[CRED112]
-FRANK VINCENT AS SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO AS LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN AS TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT AS JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR AS MARIA
-
-[CRED117]
-KYLE MACLACHLAN AS DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA AS RAY MACHOWSKI
-
-[CRED119]
-GURU AS 8-BALL
-
-[CRED120]
-SONDRA JAMES AS MOMMA
-
-[CRED121]
-LIANA PAI AS ASUKA
-
-[CRED122]
-LES MAU AS KENJI
-
-[CRED123]
-CYNTHIA FARRELL AS CATALINA
-
-[CRED124]
-AL ESPINOSA AS MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS AS EL BURRO
-
-[CRED126]
-HUNTER PLATIN AS CHICO
-
-[CRED127]
-WALTER MUDU AS D-ICE
-
-[CRED128]
-CURTIS MCCLARIN AS CURTLY
-
-[CRED129]
-BILL FIORE AS DARKEL
-
-[CRED130]
-CHRIS PHILLIPS AS MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN AS CURLY BOB
-
-[CRED132]
-WALTER MUDU AS KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN AS ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY AS MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATED BY
-
-[CRD136A]
-ALEX HORTON
-
-[CRED137]
-DIRECTED BY
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRED138]
-PRODUCED BY
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRED139]
-RECORDED AT MODERN UPRISING STUDIOS, BROOKLYN
-
-[CRED140]
-ACTORS
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS.
-
-[CRED141]
-PEDESTRIAN DIALOGUE
-
-[CRED142]
-WRITTEN BY DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRECTED BY CRAIG CONNER, DAN HOUSER AND LAZLOW
-
-[CRED144]
-PRODUCED BY RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-RADIO STATIONS AND MUSIC
-
-[CRED218]
-PRODUCERS FOR ROCKSTAR UK
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED219]
-SOUNDTRACK CO-ORDINATOR
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUCER FOR ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-EDITED BY
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER AND IMAGING WRITTEN BY
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-SPECIAL THANKS TO
-
-[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]
-ARTIST
-
-[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
-
-[CINCAM]
-Cinematic-Kamera
-
-[KM1_13]
-Fahr das Fahrzeug in die Garage!
-
-[KM3_14]
-~r~Du bist gesehen worden. Der Deal fãllt flach!
-
-[EBAL_H]
-Warte hier. Ich gehe rein und rede mit Luigi.
-
-[EBAL_M]
-Und merk dir: Finger weg von meinen Girls.
-
-[LM2_F]
-Dann schnapp dir seine Karre und spritze sie um.
-
-[LM2_D]
-Hier. Hier, nimm.
-
-[LM1_9]
-Hi. Ich bin Misty.
-
-[LM4_A]
-So ein Mistkerl von den Diablos hat in meinem Gebiet Mãdchen laufen.
-
-[FM2_B]
-Wir haben einen Verrãter unter uns!
-
-[FM2_C]
-Er verdient kein Geld mit Mãdchen oder Dealen, also wird er Informationen verkaufen.
-
-[FM3_CC]
-~w~Komm wieder, wenn du die Kohle hast, Bruder.
-
-[FEDS_AM]
-<>-MENÜ WECHSELN
-
-[LOVE5_5]
-~r~Du hast es nicht geschafft, den Truck zu beschützen!
-
-[RM6_6]
-~r~Ray ist tot!
-
-[RM6_7]
-~r~Ray hat seinen Flug verpasst.
-
-[RM6_8]
-~g~Du hast Ray zurückgelassen. Kehr um und hol ihn.
-
-[FM1_10]
-~g~Du hast Maria zurückgelassen. Kehr um und hol sie.
-
-[LOVE4_9]
-~r~Das Flugzeug ist zerstört worden!
-
-[LOV4_10]
-~r~Die einzige Spur auf den Verbleib des Pãckchens ist vernichtet worden.
-
-[KM2_D]
-Unnötig zu sagen, dass wir ihm die Autos schenken müssen, um meine Schuld bei ihm zu begleichen.
-
-[KM4_B]
-Für Lãden, die das Glück haben, unter unserem Schutz zu stehen, ist heute Zahltag.
-
-[KM2_E]
-Du musst die Autos auf der Liste besorgen und zu einer Garage hinter dem Parkplatz in Newport bringen.
-
-[FM3_8I]
-~w~Such dir eine günstige Position. Ich geh rein, wenn du den ersten Schuss abfeuerst.
-
-[LOVE1_B]
-Ich weiß, dass einer wie du sehr loyal sein kann, wenn das Geld stimmt.
-
-[LOVE1_H]
-Aber je mehr Leute, desto größer die Gier.
-
-[LOVE1_C]
-Ein werter Geschãftsfreund, ein alter Asiate,
-
-[LOVE1_I]
-wird von irgendwelchen Südamerikanern in Aspatria als Geisel festgehalten.
-
-[MEA4_D]
-Ich habe ein Treffen mit ihm vereinbart...
-
-[MEA4_B4]
-Marty schickt dich also? Dem Penner werde ich zeigen, was es heißt, mit mir Geschãfte zu machen.
-
-[MEA4_B5]
-Carl, hi. Ich, ãh, ich brauche noch ein bisschen Zeit, um dein Geld aufzutreiben.
-
-[MEA1_B4]
-Mr Chonks schickt dich also. Wollen wir dem Burschen doch mal einen Besuch abstatten.
-
-[HM5_6]
-Dann wollen wir doch mal ein paar Leute aufmischen...
-
-[LOVE1_5]
-~g~Hãng hier nicht rum, besorg dir ein Auto der Kolumbianer und rette Loves Geschãftsfreund.
-
-[AS1_D]
-~w~Spiel den Köder und locke die Killerkommandos nach Pine Creek,
-
-[AS1_E]
-~w~wo meine Leute sie erwarten werden.
-
-[AS2_C]
-~w~Das Kartell betreibt eine Scheinfirma zur Tarnung - das Kappa Coffee House.
-
-[AS2_E]
-~w~Wir haben keine Wahl. Wir müssen diese Drogenbuden zerstören.
-
-[AS2_F]
-~w~Zerleg diese Dinger!!
-
-[AS2_A1]
-~w~Miguel ist ein echter Latin Lover. Der hat ein Stehvermögen!
-
-[AS2_A2]
-~w~Ich bin völlig erschöpft.
-
-[SIREN_3]
-Um die Sirenen dieses Fahrzeugs einzuschalten, drücke die ~h~~k~~VEHICLE_HORN~-Taste~w~.
-
-[SIREN_4]
-Um die Sirenen dieses Fahrzeugs einzuschalten, drücke die ~h~~k~~VEHICLE_HORN~-Taste~w~.
-
-[AS3_C]
-~w~Iiiiiiiiiiih! Was ist denn das für ein gelbes Glibberzeug?
-
-[AS3_C1]
-~w~Oh, hi, Baby.
-
-[AS3_F]
-~w~Das Mãdchen ist ein Naturtalent.
-
-[AS3_F1]
-~w~Sie hat unserem Gast eine kleine Info entlockt.
-
-[AS3_G]
-~w~In 2 Stunden landet ein Flugzeug auf dem Francis Int. Airport.
-
-[AS3_G1]
-~w~Es ist voll mit Catalinas Giftzeug.
-
-[AS3_H]
-~w~Du entgehst den Security Checks am Flughafen, wenn du dir ein Boot besorgst, zu den Leuchtbojen rausfãhrst
-
-[AS3_H1]
-und die Maschine im Anflug abschießt.
-
-[AS3_I]
-~w~Krame die Ladung aus den Trümmern!
-
-[AS3_J]
-~w~Und sei vorsichtig, okay, Baby?
-
-[AS3_K]
-~w~Versuch's mal mit Chili-Öl...
-
-[RM2_F1]
-Die Kolumbianer müssen jeden Moment hier sein!
-
-[RM2_K]
-Verdammt, da sind sie!! LOS, LADEN!!
-
-[LOVE2_7]
-~g~ Jetzt lass den Wagen stehen!
-
-[LOVE2_8]
-~g~Jetzt verschwinde aus Newport!
-
-[AM1_F]
-Salvatore Leone wird Luigis Club in zirka drei Stunden verlassen (~1~:~1~).
-
-[LOVE5_C]
-Folge ihm und sorg dafür, dass er und mein Pãckchen wohlbehalten in Pike Creek ankommen.
-
-[FESZ_SR]
-Speicherung fehlgeschlagen! Bitte Memory Card (PS2) in MEMORY CARD-Steckplatz 1 überprüfen und noch einmal versuchen.
-
-[FESZ_FO]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 formatieren?
-
-[FELZ_FO]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 ist nicht formatiert.
-
-[FES_NOC]
-Keine Memory Card (PS2) in MEMORY CARD-Steckplatz 1.
-
-[FES_LOE]
-Laden fehlgeschlagen! Bitte Memory Card (PS2) in MEMORY CARD-Steckplatz 1 überprüfen und noch einmal versuchen.
-
-[FES_DEE]
-Löschen fehlgeschlagen! Bitte Memory Card (PS2) in MEMORY CARD-Steckplatz 1 überprüfen und noch einmal versuchen.
-
-[FORSUC]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 wurde formatiert.
-
-[ERFOUN]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 konnte nicht formatiert werden.
-
-[ERMCNP]
-Keine Memory Card (PS2) in MEMORY CARD-Steckplatz 1.
-
-[SVMEM1]
-Speichern auf Memory Card (PS2) in MEMORY CARD-Steckplatz 1.
-
-[FORSLO]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 formatieren.
-
-[SLONFM]
-Fehler beim Formatieren der Memory Card (PS2) in MEMORY CARD-Steckplatz 1.
-
-[SLONDR]
-Nicht genug Speicherplatz. Bitte eine Memory Card (PS2) mit mindestens 500KB freiem Speicherplatz in MEMORY CARD-Steckplatz 1 einstecken.
-
-[SLNSP]
-Nicht genug Speicherplatz. Bitte eine Memory Card (PS2) mit mindestens 200KB freiem Speicherplatz in MEMORY CARD-Steckplatz 1 einstecken.
-
-[FEFD_WR]
-Formatiere Memory Card (PS2) in MEMORY CARD-Steckplatz 1. Bitte die Memory Card (PS2) nicht entfernen, kein Reset vornehmen und die Konsole nicht ausschalten.
-
-[FES_ISF]
-NICHT VORHANDEN
-
-[FES_SAG]
-VORHANDEN
-
-[SLONNO]
-Keine Memory Card (PS2) in MEMORY CARD-Steckplatz 1.
-
-[SLONNF]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 ist nicht formatiert.
-
-[FESZ_FM]
-Memory Card (PS2) in MEMORY CARD-Steckplatz 1 ist nicht formatiert. Soll die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 formatiert werden?
-
-[FESZ_FF]
-Formatierung fehlgeschlagen. Bitte die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 überprüfen und noch einmal versuchen.
-
-[MCDNSP]
-Nicht genug Platz auf Memory Card (PS2) in MEMORY CARD-Steckplatz 1. Es werden mind. 500KB Speicherplatz benötigt, um Spieldaten zu speichern. Trotzdem starten? (JA oder NEIN)
-
-[MCGNSP]
-Nicht genug Platz auf Memory Card (PS2) in MEMORY CARD-Steckplatz 1. Es werden mind. 200KB Speicherplatz benötigt, um Spieldaten zu speichern. Trotzdem starten? (JA oder NEIN)
-
-[FESZ_WR]
-Daten werden gespeichert. Bitte die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 nicht entfernen, kein Reset vornehmen und die Konsole nicht ausschalten.
-
-[FESZ_OW]
-Daten werden überschrieben. Bitte die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 nicht entfernen, kein Reset vornehmen und die Konsole nicht ausschalten.
-
-[FELD_WR]
-Daten werden geladen. Bitte die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 nicht entfernen, kein Reset vornehmen und die Konsole nicht ausschalten.
-
-[FEDL_WR]
-Daten werden gelöscht. Bitte die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 nicht entfernen, kein Reset vornehmen und die Konsole nicht ausschalten.
-
-[LM2_C]
-Luigi sagt, das soll ich dir geben...
-
-[LM3_G]
-Joey ist einer, den man nicht warten lãsst. Das ist deine Chance.
-
-[LM5_E]
-Bring so viele wie möglich hin, bevor die Cops ihr ganzes Geld versaufen.
-
-[JM5_C]
-Vor dem Cafe in der Nãhe vom Callahan Point steht ein Auto mit einem Toten drin.
-
-[RM2_B]
-Wir waren zusammen in Nicaragua, als dieses Land noch wusste, was es tut.
-
-[RM2_C]
-Irgendwelche Dreckskerle vom Kartell haben ihn gestern verprügelt und kommen heute wieder, um ihm seine Ware abzunehmen.
-
-[RM2_D1]
-Ich würde es selbst machen, aber meine Bronchien melden sich wieder. Tja, ãh, viel Glück.
-
-[CATINF1]
-~g~Schnapp dir Catalina!
-
-[CATINF2]
-~g~Um Catalina zu finden, folge dem Hubschrauber.
-
-[BOATIN1]
-Spring auf ein Boot und drücke die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um hinein zu gelangen.
-
-[BOATIN2]
-Wenn du in der Nãhe eines Bootes bist, kannst du die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste ~w~benutzen, um an Bord zu gelangen.
-
-[BOATIN3]
-Spring auf ein Boot und drücke die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um hinein zu gelangen.
-
-[BOATIN4]
-Wenn du in der Nãhe eines Bootes bist, kannst du die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste ~w~benutzen, um an Bord zu gelangen.
-
-[JM6]
-'DIE FLUCHT'
-
-[FM1]
-'AUF PISTE MIT MARIA'
-
-[JM1]
-'MIKE 'LIPS' LETZTE LASAGNE'
-
-[FM21]
-'DER BOMBENANSCHLAG, TEIL 1'
-
-[FM3]
-'DER BOMBENANSCHLAG, TEIL 2'
-
-[AM1]
-'SAYONARA SALVATORE'
-
-[AM2]
-'UNTER ÜBERWACHUNG'
-
-[KM2]
-'GTA'
-
-[AS3]
-'DER ABFANGJÃGER'
-
-[RM2]
-'DAS WAFFENARSENAL'
-
-[LOVE6]
-'LOCKVOGEL'
-
-[LOVE1]
-'DIE BEFREIUNGSAKTION'
-
-[RC1]
-'IM DSCHUNGEL DER DIABLOS'
-
-[RC2]
-'DAS MAFIA-MASSAKER'
-
-[RC3]
-'DER CASINO-COUP'
-
-[RC4]
-'ROCK'N ROLL MIT RUMPO'
-
-[RM2_E1]
-Unglaublich, dass die feigen Sãcke mich wieder ohne ausreichenden Schutz ins Gefecht schicken.
-
-[GREN_1]
-Je lãnger du die ~h~~k~~PED_FIREWEAPON~-Taste~w~ gedrückt hãltst, desto weiter kannst du die Granate werfen.
-
-[GREN_2]
-Je lãnger du die ~h~~k~~PED_FIREWEAPON~-Taste~w~ gedrückt hãltst, desto weiter kannst du die Granate werfen.
-
-[GREN_3]
-Je lãnger du die ~h~~k~~PED_FIREWEAPON~-Taste~w~ gedrückt hãltst, desto weiter kannst du die Granate werfen.
-
-[LOVE4_G]
-Die Maschine mit meiner Ware steht im Zollhangar.
-
-[KABOOM]
-KAWUMM!
-
-[SPLAT]
-WUSCH!
-
-[PANCAK]
-PLATT!
-
-[SOAKED]
-AARGH!
-
-[HEAD]
-Head Radio
-
-[DBL_CLF]
-Double Clef FM
-
-[FLASHB]
-Flashback FM
-
-[RISE]
-Rise FM
-
-[LIPS]
-Lips 106
-
-[CHAT]
-Chatterbox FM
-
-[K_JAH]
-K-Jah Radio
-
-[GAM_FM]
-Game Radio FM
-
-[MSX_FM]
-MSX FM
-
-[TUBE1]
-Wenn der U-Bahnhof öffnet, kannst du die U-Bahn nach Staunton Island nehmen.
-
-[TUBE2]
-Wenn der U-Bahnhof in Shoreside Vale aufmacht, dann kannst du das Shoreside Terminal in Richtung Francis Int. Airport verlassen.
-
-[TUBE_2]
-Um in eine U-Bahn einzusteigen, ~h~'Einsteigen'-Taste~w~ drücken.
-
-[LEGAL]
-~g~Schalte die kriminelle Bedrohung aus!
-
-[GA_2]
-Neuer Motor und neue Lackierung. Die Cops werden dich nicht identifizieren!
-
-[LM1_8A]
-Warum nicht ein Taxi 'ausleihen', um dir was dazu zu verdienen...?
-
-[TAXIH1]
-Halte neben einem gehighlighteten Fußgãnger, um ihn einsteigen zu lassen, dann bringe ihn rechtzeitig an sein Fahrtziel.
-
-[LM5_7]
-~g~Wenn weniger als vier Girls bei dem ~p~Polizeiball~g~ auftauchen, wird Luigi sauer!
-
-[KM2_3]
-~g~Die ~r~Autos~g~ müssen in 1A-Zustand sein, damit die ~p~Garage~g~ sie annimmt.
-
-[KM5_2]
-~g~Ein Yardie ist weg.
-
-[BETRA_A]
-Sorry, Baby.
-
-[BETRA_B]
-Ich bin ein anspruchsvolles Mãdchen und du...
-
-[BETRA_C]
-... du bist ein kleiner Fisch.
-
-[JAILB_C]
-Noch gibt es keine nãheren Informationen zu den Hãftlingen, die mit dem Konvoi transportiert wurden,
-
-[JAILB_E]
-Der Konvoi war am frühen Morgen vom Polizei-Hauptquartier aus
-
-[JAILB_F]
-zu einem Gefangenentransport mit Ziel Haftanstalt Liberty aufgebrochen.
-
-[JAILB_G]
-Der Anschlag erfolgte an der Callahan-Brücke.
-
-[JAILB_P]
-ist Portland durch diese Katastrophe vom Rest der Stadt abgeschnitten.
-
-[JAILB_Q]
-Los jetzt!
-
-[JAILB_R]
-Vollidiot!
-
-[JAILB_S]
-Kein Problem, dich alle zu machen.
-
-[JAILB_T]
-Das wird dir noch leid tun.
-
-[JAILB_U]
-Okay, okay. Hau ab.
-
-[HELP15]
-Wenn zu Fuß unterwegs, drücke die ~h~~k~~PED_LOOKBEHIND~-Taste~w~, um ~h~nach hinten zu schauen~w~.
-
-[FEC_LB3]
-Nach hinten schauen
-
-[FEC_R3]
-(R3-Taste)
-
-[FES_AFO]
-Diese Memory Card (PS2) ist bereits formatiert.
-
-[FEA_UP]
-;
-
-[FEA_DO]
-=
-
-[FEA_LE]
-<
-
-[FEA_RI]
->
-
-[FEDSAS3]
-- AUSWAHL ÃNDERN
-
-[FEDSAS4]
-;=<> - AUSWAHL ÃNDERN
-
-[SPRAY_4]
-~h~~k~~PED_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
-
-[SPRAY_1]
-~h~~k~~PED_FIREWEAPON~-Taste ~w~benutzen, um die Wasserkanone abzufeuern.
-
-[LITTLE]
-LITTLE T
-
-[NICK]
-NICK LOVE
-
-[AM1_10]
-~g~Salvatore Leone wird Luigis Club um zirka 0~1~:~1~ verlassen.
-
-[JAILB_V]
-Liberty City ist heute vom Schrecken gezeichnet.
-
-[JAILB_A]
-Polizei und Noteinsatzkrãfte arbeiten unter Hochdruck, nachdem heute morgen
-
-[JAILB_B]
-ein verheerender Anschlag auf einen Polizeikonvoi verübt wurde.
-
-[JAILB_W]
-Nach stundenlangen Ermittlungen wurde klar, dass der Anschlag das Werk von Profis war.
-
-[JAILB_K]
-Die Identifizierung der noch vermissten Kriminellen wurde darüber hinaus
-
-[JAILB_L]
-durch eine Hacker-Attacke auf den Zentral-Computer der Polizei erschwert.
-
-[JAILB_M]
-stellte Bürgermeister O'Donovan klar, dass die Polizei
-
-[JAILB_N]
-*
-
-[JAILB_O]
-Da die Fertigstellung des Porter Tunnels sich verzögert,
-
-[JAILB_X]
-In einer ersten Stellungnahme
-
-[FEDS_SE]
-/-Taste - AUSWAHL
-
-[FEDS_SB]
-/-Taste - AUSWAHL "-Taste - ZURÜCK
-
-[TM4_A]
-~w~Ach, du bist es. Toni ist nicht da.
-
-[TM4_A2]
-~w~Aber er hat wieder ein Liebesbriefchen für dich hinterlassen.
-
-[DIAB2_A]
-Ich habe mein Entertainment-Business mit nichts als dem üppigen Inhalt meiner Lederhose gestartet.
-
-[LM5_9]
-GIRLS:
-
-[PERPIC]
-Versteckte Pãckchen gefunden
-
-[CO_ONE]
-Verstecktes Pãckchen ~1~ von ~1~
-
-[LOVE3_3]
-~g~Das Flugzeug hat ~1~ von 6 Pãckchen abgeworfen.
-
-[FARE11]
-~g~Fahrziel: ~w~'Baustelle' ~g~in Fort Staunton.
-
-[GA_21]
-In dieser Garage bringst du keine Autos mehr unter.
-
-[CHEAT1]
-Cheat aktiviert
-
-[CHEAT2]
-Waffen-Cheat
-
-[CHEAT3]
-Health-Cheat
-
-[CHEAT4]
-Panzerungs-Cheat
-
-[CHEAT5]
-Fahndungslevel-Cheat
-
-[CHEAT6]
-Geld-Cheat
-
-[CHEAT7]
-Wetter-Cheat
-
-[AS1_H]
-~r~Es ist dir nicht gelungen, das Killerkommando in die Yakuza-Falle zu locken!
-
-[FEDS_BA]
-"-Taste - ZURÜCK
-
-[RAMP_A]
-ALLE AMOKLÃUFE BEENDET!
-
-[USJ_ALL]
-ALLE MONSTER-STUNTS ABSOLVIERT!
-
-[FARE23]
-~g~Fahrtziel: ~w~'Import-Export Garage' ~g~im Cochrane Dam Distrikt.
-
-[L_TRN_1]
-Mit der U-Bahnlinie L kannst du in Portland herumfahren. Drücke die~h~ ~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um in eine U-Bahn ~h~ein- oder auszusteigen~w~.
-
-[L_TRN_2]
-Mit der U-Bahnlinie L kannst du in Portland herumfahren. Drücke die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um in eine U-Bahn ~h~ein- oder auszusteigen~w~.
-
-[S_TRN_1]
-Mit der U-Bahn kannst du in Liberty herumfahren. Drücke die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um in eine U-Bahn ~h~ein- oder auszusteigen~w~.
-
-[S_TRN_2]
-Mit der U-Bahn kannst du in Liberty herumfahren. Drücke die ~h~~k~~VEHICLE_ENTER_EXIT~-Taste~w~, um in eine U-Bahn ~h~ein- oder auszusteigen~w~.
-
-[AS1_C]
-~w~Sie hat drei Killerkommandos in Liberty verteilt, die dich zur Strecke bringen sollen.
-
-[AS1_G]
-~r~Alle Yakuza sind erledigt!
-
-[JAN]
-Jan
-
-[FEB]
-Feb
-
-[MAR]
-Mãr
-
-[APR]
-Apr
-
-[MAY]
-Mai
-
-[JUN]
-Jun
-
-[JUL]
-Jul
-
-[AUG]
-Aug
-
-[SEP]
-Sept
-
-[OCT]
-Okt
-
-[NOV]
-Nov
-
-[DEC]
-Dez
-
-[DEFDT]
---:---:---- --:--:--
-
-[BUGGY]
-VERBLEIBENDE BUGGIES:
-
-[BONUS]
-~g~BONUS $~1~
-
-[HORN1]
-Drück die ~h~L3-Taste~w~, um zu ~h~hupen.
-
-[HORN2]
-Drück die ~h~L1-Taste~w~, um zu ~h~hupen.
-
-[HORN3]
-Drück die ~h~R1-Taste~w~, um zu ~h~hupen.
-
-[LM3_1A]
-Drück die ~h~~k~~VEHICLE_HORN~-Taste~w~, um zu ~h~hupen. So weiß Misty, dass du da bist.
-
-[LM3_1B]
-Drück die~h~ ~k~~VEHICLE_HORN~-Taste~w~, um zu ~h~hupen. So weiß Misty, dass du da bist.
-
-[LM3_1C]
-Drück die~h~ ~k~~VEHICLE_HORN~-Taste~w~, um zu ~h~hupen. So weiß Misty, dass du da bist.
-
-[RADIO_A]
-Drück die ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~-Taste~w~, um die verschiedenen ~h~Radiosender zu hören.
-
-[RADIO_B]
-Drück die ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~-taste~w~, um die verschiedenen ~h~Radiosender zu hören.
-
-[RADIO_C]
-Drück die ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~-Taste~w~, um die verschiedenen ~h~Radiosender zu hören.
-
-[RADIO_D]
-Drück die ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~-Taste~w~, um die verschiedenen ~h~Radiosender zu hören.
-
-[FEC_EXV]
-In Fahrzeug ein-\aussteigen
-
-[TAXI_M]
-'TAXI DRIVER'
-
-[COP_M]
-'BÜRGERWEHR'
-
-[FIRE_M]
-'FEUERWEHR'
-
-[AMBUL_M]
-'KRANKENWAGEN'
-
-[HJ_IS]
-IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_PIS]
-SUPER IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_DIS]
-DOPPELTER IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_PDIS]
-SUPER-DOPPEL-IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_TIS]
-DREIFACHER IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_PTIS]
-SUPER-DREIFACH-IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_QIS]
-VIERFACHER IRRSINNS-STUNT-BONUS: $~1~
-
-[HJ_PQIS]
-SUPER-VIERFACH-IRRSINNS-STUNT-BONUS: $~1~
-
-[AM1_K]
-Salvatore Leone wird Luigis Club in zirka drei Stunden verlassen. (0~1~:~1~)
-
-[IMPEXPP]
-Import-Export Garage, Portland Harbor. Wir haben Bestellungen für verschiedene Fahrzeuge. Nãheres steht auf unserem Schwarzen Brett.
-
-[VANHSTP]
-Willst du noch mehr Securicars aufgebrochen haben? Bring sie zu unserer Garage in Portland Harbor.
-
-[EMVHPUP]
-Zahlen Bestpreise für Neu- und Gebrauchtwagen. Bring sie zum Kran im Nordosten von Portland Harbor.
-
-[STANDS]
-ZERSTÖRTE ESPRESSOSTÃNDE:
-
-[STASH]
-~g~Deponiere das SPANK auf der ~p~Baustelle!
-
-[MCSTNS]
-Keine Memory Card (PS2) in MEMORY CARD-Steckplatz 1. Trotzdem starten? (JA oder NEIN)
-
-[LOVE3_5]
-~g~Das Flugzeug ist jetzt in Reichweite.
-
-[LOVE3_6]
-~r~Die Polizei war vor dir bei den Pãckchen!
-
-[SIREN_1]
-Um die Sirenen dieses Fahrzeugs einzuschalten, drücke die ~h~~k~~VEHICLE_HORN~-Taste~w~.
-
-[SIREN_2]
-Um die Sirenen dieses Fahrzeugs einzuschalten, drücke die ~h~~k~~VEHICLE_HORN~-Taste~w~.
-
-[FM3_8C]
-~w~Ich brauch $100 000 für Auslagen.
-
-[MCLOAD]
-Daten werden geladen. Bitte die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 nicht entfernen, kein Reset vornehmen und die Konsole nicht ausschalten.
-
-[FES_GME]
-Fehler beim Lesen der Memory Card (PS2) in MEMORY CARD-Steckplatz 1! Bitte überprüfen und noch einmal versuchen.
-
-[FESZ_QF]
-Soll die Memory Card (PS2) in MEMORY CARD-Steckplatz 1 wirklich formatiert werden?
-
-[FESZ_LS]
-Ladevorgang abgeschlossen.
-
-[RM3_5]
-~g~Du hast ~1~ von 6 Pãckchen mit Beweisfotos.
-
-[LOVE3_2]
-~g~Du hast alle Pãckchen. Bring sie zu Donald Love.
-
-[LOVE4_4]
-~g~Bring das Pãckchen zu Donald Love!
-
-[FEB_SAV]
-Laden
-
-[FEP_SAV]
-SPIEL LADEN
-
-[AS2_12A]
-~g~Wenn du den ersten Espressostand zerstört hast, hast du 8 Minuten Zeit, bis das Kartell seine Dealer warnt!
-
-[AS3_1A]
-~g~Jetzt fahr zu der ~b~Markierungsboje!
-
-[NOCONT]
-Bitte stecken Sie einen Analog Controller (DUALSHOCK#) oder einen Analog Controller (DUALSHOCK#2) in Controller-Anschluss 1, um fortzufahren.
-
-[BET_JB]
-VON CATALINA, SEINER GELIEBTEN, IM STICH GELASSEN, FÜR SCHULDIG BEFUNDEN UND VERURTEILT, BEFINDET ER SICH AUF DEM WEG INS GEFÃNGNIS VON LIBERTY CITY. DOCH IN SEINEM KOPF HÃMMERT EIN GEDANKE... MIT EUCH BIN ICH NOCH NICHT FERTIG!
-
-[END_A]
-Die Bewohner von Cedar Grove erholen sich langsam
-
-[END_B]
-von dem Schock der schrecklichen Ereignisse,
-
-[END_C]
-die sich gestern hier abgespielt haben.
-
-[END_D]
-Clive Denver, ein Augenzeuge, beschrieb der Polizei
-
-[END_E]
-den Tãter, den er zusammen mit einer dunkelhaarigen Frau flüchten sah.
-
-[END_F]
-Hör mal, wir werden sehr viel Spaß miteinander haben. Weißt du,
-
-[END_G]
-ich liebe dich nãmlich. Wirklich, du bist so groß und stark,
-
-[END_H]
-und genau so einen Mann brauche ich.
-
-[END_I]
-Jedenfalls - was wollte ich gerade sagen?
-
-[END_J]
-Weiß nicht mehr. Aber du verstehst doch, was ich meine, oder?
-
-[END_K]
-Der Donner von Explosionen erschütterte umliegende Hãuser. Menschen rannten in Deckung.
-
-[END_L]
-Mehrere Anwohner wurden verletzt, als es in dem Chaos zu einem Schusswechsel
-
-[END_M]
-zwischen Bodeneinheiten und einem Helikopter kam, der über dem Damm kreiste.
-
-[END_N]
-Ja, von hier in den Gãrten konnten wir alles genau beobachten.
-
-[END_O]
-Wie sie den Helikopter dann abgeschossen haben,
-
-[END_P]
-das war ein ziemliches Feuerwerk.
-
-[END_Q]
-Die Zahl der Toten ist inzwischen auf über 20 angestiegen
-
-[END_R]
-und die Polizei findet immer noch weitere Leichen.
-
-[END_S]
-Die Gerüchte, dass es sich bei den Opfern um Angehörige des kolumbianischen Kartells
-
-[END_T]
-handelt, wurden von offizieller Seite bisher nicht dementiert.
-
-[END_U]
-Und es gibt nach wie vor keine Anhaltspunkte für das Motiv der Tat.
-
-[END_V]
-Ich hab mir 'nen Fingernagel abgebrochen und meine Frisur ist hin!
-
-[END_W]
-Fünfzig Dollar im Eimer!
-
-[PAPER1]
-GANGSTER VON KOMPLIZIN, DIE ER LIEBT, VERRATEN. GERICHT BEFINDET RÃUBER EINSTIMMIG FÜR SCHULDIG.
-
-[PAPER2]
-ZEHN JAHRE AUS LIEBE!
-
-[JAILB_D]
-und es hat sich bisher auch keine kriminelle Vereinigung zu dem Attentat bekannt.
-
-[JAILB_H]
-Die meisten Zeugen kamen ums Leben und die Brücke wurde schwer beschãdigt.
-
-[JAILB_I]
-Man geht davon aus, dass auch einige der Hãftlinge bei der sich ereignenden Explosion umkamen.
-
-[JAILB_J]
-*
-
-[FEB_CPC]
-Konfiguration d. Steuerung
-
-[FEC_PED]
-Steuerung zu Fuß
-
-[FEC_VEH]
-Steuerung in Fahrzeug
-
-[FEC_FPR]
-Steuerung für First-Person
-
-[FEC_CMM]
-Allgemeine Steuerung
-
-[FEC_PWL]
-Nach links
-
-[FEC_PWR]
-Nach rechts
-
-[FEC_PWF]
-Vorwãrts gehen
-
-[FEC_PWT]
-Auf Kamera zugehen
-
-[FEC_PLB]
-Nach hinten schauen
-
-[FEC_PFR]
-Waffe abfeuern
-
-[FEC_CLE]
-Eine Waffe nach links
-
-[FEC_CRI]
-Eine Waffe nach rechts
-
-[FEC_LKT]
-Ziel fixieren
-
-[FEC_PJP]
-Fußgãnger springen
-
-[FEC_PSP]
-Fußgãnger sprinten
-
-[FEC_PSH]
-Fußgãnger schießen
-
-[FEC_TLF]
-Ein Ziel nach links
-
-[FEC_TRG]
-Ein Ziel nach rechts
-
-[FEC_CCM]
-Kamera hinter Spieler zentrieren
-
-[FEC_SZI]
-Mit Prãzisionsgewehr heranzoomen
-
-[FEC_SZO]
-Mit Prãzisionsgewehr herauszoomen
-
-[FEC_LKL]
-First-Person nach links schauen
-
-[FEC_LRT]
-First-Person nach rechts schauen
-
-[FEC_LUP]
-First-Person nach oben schauen
-
-[FEC_LDN]
-First-Person nach unten schauen
-
-[FEC_LBH]
-Aus Fahrzeug nach hinten schauen
-
-[FEC_LLF]
-Aus Fahrzeug nach links schauen
-
-[FEC_LRG]
-Aus Fahrzeug nach rechts schauen
-
-[FEC_HRN]
-Hupe
-
-[FEC_HBR]
-Handbremse
-
-[FEC_ACL]
-Gas geben
-
-[FEC_BRK]
-Bremsen
-
-[FEC_TSM]
-Spezialmissionen An/Aus
-
-[FEC_CRD]
-Radiosender wechseln
-
-[FEC_ENT]
-In Fahrzeug Ein-/Aussteigen
-
-[FEC_WPN]
-Waffe abfeuern
-
-[FEC_PAS]
-Pause
-
-[FEC_FPO]
-First Person Weapons Toggle.
-
-[FEC_SMS]
-Mauszeiger An/Aus
-
-[FEC_CMS]
-Blickwinkel wechseln.
-
-[FEC_TSS]
-Screen Shot
-
-[FEN_NET]
-Netzwerk
-
-[FEN_CON]
-Verbindung
-
-[FEN_GAM]
-Spiel suchen
-
-[FEN_TYP]
-Spiel-Typ
-
-[FEN_TY0]
-Deathmatch
-
-[FEN_TY1]
-Deathmatch Stealth
-
-[FEN_TY2]
-Team Deathmatch
-
-[FEN_TY3]
-Team Deathmatch Stealth
-
-[FEN_TY4]
-Stash the Cash
-
-[FEN_TY5]
-Capture the Flag
-
-[FEN_TY6]
-Rat Race
-
-[FEN_TY7]
-Domination
-
-[FEN_NAM]
-Name:
-
-[FEN_GNA]
-Spiel-Name:
-
-[FEM_MAP]
-Karte auswãhlen
-
-[FEN_PLS]
-Spieler-Einstellungen
-
-[FEN_PLC]
-Spieler-Farbe
-
-[FEM_MA0]
-Liberty City
-
-[FEM_MA1]
-Rotlichtbezirk
-
-[FEM_MA2]
-Chinatown
-
-[FEM_MA3]
-Der Tower
-
-[FEM_MA4]
-Die Kanalisation
-
-[FEM_MA5]
-Industriepark
-
-[FEM_MA6]
-Docks
-
-[FEM_MA7]
-Staunton
-
-[FEC_DBG]
-Debug-Menü
-
-[FEC_TGD]
-Mit Pad zwischen Spiel- u. Debug-Modus wechseln
-
-[FEC_TDO]
-Debug-Kamera Aus
-
-[FEC_IVH]
-Maus horizontal invertieren
-
-[FEC_MSL]
-MAUSTASTE L
-
-[FEC_MSM]
-MAUSTASTE M
-
-[FEC_MSR]
-MAUSTASTE R
-
-[FEC_QUE]
-???
-
-[FEC_TWO]
-Nur zwei Tastaturtasten erlaubt
-
-[FEC_OMS]
-Nur eine Maustaste erlaubt
-
-[FEC_OJS]
-Nur ein Joystick-Button pro Aktion erlaubt
-
-[FEC_PTL]
-"Ziel fixieren" u. "Waffenauswahl links" gleichzeitig drücken.
-
-[FEC_PTR]
-"Ziel fixieren" u. "Waffenauswahl rechts" gleichzeitig drücken.
-
-[FEC_LBC]
-"Nach links schauen" u. "Nach rechts schauen" gleichzeitig drücken.
-
-[FEC_JBO]
-JOY ~1~
-
-[NO_PAUZ]
-Pause in Multiplayer nicht möglich. Zum Beenden zwei Mal drücken!
-
-[FEM_SL1]
-Speicherplatz 1 ist frei
-
-[FEM_SL2]
-Speicherplatz 2 ist frei
-
-[FEM_SL3]
-Speicherplatz 3 ist frei
-
-[FEM_SL4]
-Speicherplatz 4 ist frei
-
-[FEM_SL5]
-Speicherplatz 5 ist frei
-
-[FEM_SL6]
-Speicherplatz 6 ist frei
-
-[FEM_SL7]
-Speicherplatz 7 ist frei
-
-[FEM_SL8]
-Speicherplatz 8 ist frei
-
-[FEM_MM]
-HAUPTMENÜ
-
-[FEM_SNG]
-Neues Spiel starten
-
-[FEM_QTW]
-Beenden
-
-[FEQ_SRE]
-Wirklich beenden? Alle Daten seit dem letzten Speichern werden verlorengehen. Weiter?
-
-[FEQ_SRW]
-Spiel wirklich beenden?
-
-[FEG_SRV]
-SERVER
-
-[FEG_MAP]
-KARTE
-
-[FEG_PLY]
-SPIELER
-
-[FEG_TYP]
-TYP
-
-[FEG_PNG]
-PING
-
-[FET_FG]
-SPIEL SUCHEN
-
-[FET_SP]
-SINGLEPLAYER
-
-[FET_MP]
-MULTIPLAYER
-
-[FET_HG]
-SPIEL HOSTEN
-
-[FET_PS]
-SPIELER SETUP
-
-[FET_CON]
-VERBINDUNG
-
-[FET_AUD]
-AUDIO-SETUP
-
-[FET_GFX]
-GRAFIK-SETUP
-
-[FET_DIS]
-ANZEIGEN-SETUP
-
-[FET_LAN]
-SPRACHEN-SETUP
-
-[FET_LG]
-SPIEL LADEN
-
-[FET_DG]
-SPIEL LÖSCHEN
-
-[FET_NG]
-NEUES SPIEL
-
-[FET_SG]
-SPIEL SPEICHERN
-
-[FET_MAP]
-KARTE AUSWÃHLEN
-
-[FET_GT]
-SPIEL-TYP
-
-[FET_CTL]
-CONTROLLER-SETUP
-
-[FET_OPT]
-OPTIONEN
-
-[FET_QG]
-SPIEL BEENDEN
-
-[FET_STA]
-STATISTIK
-
-[FET_BRE]
-MISSIONSINFOS
-
-[FEC_WAR]
-Achtung!
-
-[FEC_OKK]
-OK
-
-[FED_CON]
-Löschen bestãtigen
-
-[FES_SSC]
-Spiel wurde gespeichert.
-
-[DEL_FNM]
-Datei wurde gelöscht.
-
-[PCLOAD]
-Datei wird geladen
-
-[PCRESRT]
-GTA 3 wird neu gestartet
-
-[FEC_DLF]
-Löschen fehlgeschlagen.
-
-[FEC_SVU]
-Speichern fehlgeschlagen.
-
-[FEC_LUN]
-Laden fehlgeschlagen. Datei beschãdigt. Bitte löschen.
-
-[FEN_PLA]
-Anzahl der Spieler:
-
-[FET_NON]
-KEINE SPIELE VERFÜGBAR
-
-[FET_SFG]
-SPIELE WERDEN GESUCHT...
-
-[FET_SRT]
-SPIELE WERDEN SORTIERT...
-
-[FEF_LAN]
-LAN
-
-[FEF_INT]
-INTERNET
-
-[FET_REF]
-Aktualisieren
-
-[FET_FIL]
-Filter
-
-[FET_JG]
-Beitreten
-
-[FEC_NTW]
-Talk To Network
-
-[FEC_ESR]
-Esc-Taste nicht zugelassen
-
-[FEC_GSL]
-Show head bob:
-
-[FIL_FLT]
-SPIELE-LISTE FILTERN
-
-[FET_SAN]
-NEUES SPIEL STARTEN
-
-[FIL_MAP]
-Karte:
-
-[FIL_SRV]
-Server:
-
-[FIL_TYP]
-Spiel-Typ
-
-[FIL_SPC]
-Offene Spiele?
-
-[FIL_PNG]
-Ping:
-
-[FEN_UKH]
-Unbekannter Host
-
-[FEN_UKM]
-Map nicht gefunden
-
-[FEN_UKT]
-Spiel-Typ nicht gefunden
-
-[FEN_NCI]
-KEINE INTERNET-VERBINDUNG
-
-[FET_PAU]
-PAUSENMENÜ
-
-[FET_SGA]
-SPIEL STARTEN
-
-[FEC_PAD]
-Gamepad
-
-[FEC_JOY]
-Joystick
-
-[FEC_WHL]
-Lenkrad
-
-[FEC_CNT]
-Controller-Typ:
-
-[FET_APL]
-ÜBERNEHMEN
-
-[FES_CSA]
-Wãhlen Sie eine Skin aus der Liste aus:
-
-[FES_SKN]
-SKIN-NAME
-
-[FES_DAT]
-DATUM
-
-[FES_NON]
-KEINE SKINS VERFÜGBAR
-
-[FEA_FM9]
-SPIELER MP3
-
-[FESZ_QZ]
-Dieses Spiel wirklich speichern?
-
-[FES_CGA]
-Momentan verfügbare Speicherplãtze:
-
-[FES_SCG]
-Laufendes Spiel speichern?
-
-[FES_LCG]
-Spiel laden und weiterspielen?
-
-[FEC_FIR]
-Feuern
-
-[FEC_NWE]
-Nãchste Waffe
-
-[FEC_PWE]
-Vorherige Waffe
-
-[FEC_FOR]
-Vorwãrts
-
-[FEC_BAC]
-Rückwãrts
-
-[FEC_LEF]
-Links
-
-[FEC_RIG]
-Rechts
-
-[FEC_ZIN]
-Heranzoomen
-
-[FEC_ZOT]
-Herauszoomen
-
-[FEC_EEX]
-Ein-/Aussteigen
-
-[FEC_RAD]
-Radio
-
-[FEC_SUB]
-Spezialmission
-
-[FEC_CMR]
-Blickwinkel ãndern
-
-[FEC_JMP]
-Springen
-
-[FEC_SPN]
-Sprinten
-
-[FEC_HND]
-Handbremse
-
-[FEC_TUL]
-Geschütz links
-
-[FEC_TUR]
-Geschütz rechts
-
-[FEC_LOL]
-Nach links schauen
-
-[FEC_LOR]
-Nach rechts schauen
-
-[FEC_NTR]
-Nãchstes Ziel
-
-[FEC_PTT]
-Vorheriges Ziel
-
-[FEC_LBA]
-Nach hinten schauen
-
-[FEC_CEN]
-Kamera zentrieren
-
-[FEC_UND]
-(NEIN)
-
-[FET_CFT]
-ZU FUSS
-
-[FET_CCR]
-IN FAHRZEUG
-
-[CVT_MSG]
-Texturen werden in optimales Format für Ihre Grafikkarte konvertiert
-
-[FET_CAC]
-AKTION
-
-[FEC_IBT]
--
-
-[FEC_SPC]
-LEERT.
-
-[FEC_MXO]
-MXB1
-
-[FEC_MXT]
-MXB2
-
-[FEC_UNB]
-NICHT BEL.
-
-[FET_CME]
-STEUERUNGSART
-
-[FET_RDK]
-STEUERUNG ÃNDERN
-
-[FET_AMS]
-MAUS-EINSTELLG.
-
-[FET_STI]
-STANDARD STEURUNGSKONFIG.
-
-[FET_CTI]
-CLASSIC STEURUNGSKONFIG.
-
-[FET_MTI]
-MAUS STEURUNGSKONFIG.
-
-[FET_DAM]
-DYNAMISCHE AKUSTIK
-
-[FEC_TFL]
-Geschütz Links
-
-[FEC_TFR]
-Geschütz Rechts
-
-[FEC_TFU]
-Geschütz /Dodo aufwãrts
-
-[FEC_TFD]
-Geschütz /Dodo abwãrts
-
-[FEC_MWF]
-RAD AUFW.
-
-[FEC_MWB]
-RAD ABW.
-
-[FEC_ORR]
-oder
-
-[FEC_NUS]
-NICHT VERWENDET
-
-[FEC_LUD]
-Aufw. Sehen
-
-[FEC_LDU]
-Abw. Sehen
-
-[FEC_CMP]
-COMBO: L+R SEHEN
-
-[FEC_NTT]
-Noch kein Text für diese Taste
-
-[FEC_FNC]
-F~1~
-
-[FEC_IRT]
-EINFG
-
-[FEC_DLL]
-ENTF
-
-[FEC_HME]
-POS1
-
-[FEC_END]
-ENDE
-
-[FEC_PGU]
-BILD AUF
-
-[FEC_PGD]
-BILD AB
-
-[FEC_UPA]
-AUF
-
-[FEC_DWA]
-AB
-
-[FEC_LFA]
-LINKS
-
-[FEC_RFA]
-RECHTS
-
-[FEC_NUM]
-NUM
-
-[FEC_NMN]
-NUM~1~
-
-[FEC_FWS]
-NUM /
-
-[FEC_PLS]
-NUM +
-
-[FEC_MIN]
-NUM -
-
-[FEC_DOT]
-NUM ,
-
-[FEC_NLK]
-NUMLOCK
-
-[FEC_ETR]
-ENT
-
-[FEC_SLK]
-ROLLEN
-
-[FEC_PSB]
-UNTBR
-
-[FEC_BSP]
-RÜCKT.
-
-[FEC_TAB]
-TAB
-
-[FEC_CLK]
-CAPSLOCK
-
-[FEC_RTN]
-RET
-
-[FEC_LSF]
-LUMSCHALT
-
-[FEC_RSF]
-RUMSCHALT
-
-[FEC_LCT]
-LSTRG
-
-[FEC_RCT]
-RSTRG
-
-[FEC_LAL]
-LALT
-
-[FEC_RAL]
-RALT
-
-[FEC_LWD]
-LWIN
-
-[FEC_RWD]
-RWIN
-
-[FEC_WRC]
-WINKLICK
-
-[WIN_TTL]
-GTA 3
-
-[WIN_95]
-GTA 3 lãuft nicht unter Windows 95
-
-[WIN_DX]
-GTA 3 benötigt mind. DirectX Version 8.1
-
-[WIN_VDM]
-GTA 3 benötigt mind. 12MB freien Grafikspeicher
-
-[DIAB3_G]
-Arriba!
-
-[FEM_RES]
-SPIEL FORTSETZEN
-
-[FES_SNG]
-NEUES SPIEL STARTEN
-
-[FEM_SP]
-SINGLEPLAYER
-
-[FEM_MP]
-MULTIPLAYER
-
-[FEM_QT]
-SPIEL BEENDEN
-
-[FES_SG]
-NEUES SPIEL STARTEN
-
-[FES_LG]
-SPIEL LADEN
-
-[FEM_HST]
-SPIEL HOSTEN
-
-[FEM_OPT]
-OPTIONEN
-
-[FEM_DBG]
-DEBUG
-
-[FET_PSU]
-SPIELER SETUP
-
-[FET_DEF]
-STANDARD WIEDERHERST.
-
-[FED_BRI]
-HELLIGKEIT
-
-[FED_TRA]
-UNSCHÃRFE-FX
-
-[FEM_LOD]
-DISTANZ-DARSTELLG.
-
-[FEM_VSC]
-FRAME SYNC
-
-[FEM_FRM]
-FRAME LIMITER
-
-[FED_RES]
-BILDSCHIRMAUFLSG.
-
-[FED_WIS]
-BREITBILD
-
-[FEDS_TB]
-ZURÜCK
-
-[FEA_MUS]
-MUSIK VOLUME
-
-[FEA_SFX]
-SFX VOLUME
-
-[FEA_RSS]
-RADIOSENDER
-
-[FEL_ENG]
-ENGLISCH
-
-[FEL_FRE]
-FRANZ.
-
-[FEL_GER]
-DEUTSCH
-
-[FEL_ITA]
-ITALIEN.
-
-[FEL_SPA]
-SPANISCH
-
-[FEA_3DH]
-AUDIO HARDWARE
-
-[FEA_SPK]
-BOXEN KONFIGURATION
-
-[FEA_2SP]
-2 BOXEN
-
-[FEA_4SP]
-MEHR ALS 2 BOXEN
-
-[FEA_EAR]
-KOPFHÖRER
-
-[FEA_NAH]
-KEINE AUDIO HARDWARE
-
-[FET_SNG]
-NEUES SPIEL STARTEN
-
-[FEN_STA]
-SPIEL STARTEN
-
-[GMLOAD]
-SPIEL LADEN
-
-[GMSAVE]
-SPIEL SPEICHERN
-
-[FES_DGA]
-SPIEL LÖSCHEN
-
-[FEM_NON]
-KEIN
-
-[FEC_IVV]
-MAUS VERTIKAL INVERTIEREN
-
-[FEC_MSH]
-MAUSEMPFINDLICHKEIT
-
-[FET_CCN]
-STEUERUNG: CLASSIC
-
-[FET_SCN]
-STEUERUNG: STANDARD
-
-[FES_SET]
-SKIN VERWENDEN
-
-[GHOST]
-Ghost
-
-[WIN_RSZ]
-Neue Auflösung konnte nicht aktiviert werden
-
-[FET_APP]
-LMT,RETURN,UM NEUE EINSTLLG. ZU SPEICHERN
-
-[FET_HRD]
-STANDARDEINSTLLG. WIEDERHERGESTELLT
-
-[FET_MST]
-MAUSSTEUERUNG
-
-[FEC_STR]
-NUM STERN
-
-[FET_MIG]
-LINKS,RECHTS,MAUSRAD ZUR EINSTLLG.
-
-[FET_CIG]
-RÜCKT. ZUM LÖSCHEN - LMT,RETURN ZUM ÃNDERN
-
-[FET_RIG]
-NEUE STEUERUNG FÜR DIESE AKTION WÃHLEN ODER ESC FÜR ABBRUCH
-
-[FET_EIG]
-KANN DIESER AKTION KEINE STEUERUNG ZUWEISEN
-
-[NO_PCCD]
-Bitte legen Sie die GTA 3 Disk 2 ein oder drücken Sie ESC zum Abbrechen
-
-[CVT_ERR]
-Kein Platz mehr auf der Festplatte. Bitte schaffen Sie Speicherplatz, bevor Sie fortfahren. ESC zum Abbrechen.
-
-[FED_SUB]
-UNTERTITEL
-
-[FET_DSN]
-Standard-Player Skin.bmp
-
-[EBAL]
-'GIB MIR LIBERTY'
-
-[LM4]
-'PUMP-ACTION-THRILLER'
-
-[REPLAY]
-WIEDERHOLUNG
-
-[FEC_SFT]
-UMSCHALT
-
-[CRED254]
-STUDIO MANAGER
-
-[CVT_CRT]
-Texturen können nicht für Ihre Grafikkarte konvertiert werden. Sie müssen sich als Administrator einloggen, damit dies möglich ist. Verlassen mit ESC.
-
-[FEM_ON]
-AN
-
-[FEM_OFF]
-AUS
-
-[FEM_YES]
-JA
-
-[FEM_NO]
-NEIN
-
-[FES_WAR]
-Speichere Daten, bitte warten...
-
-[FED_DLW]
-Lösche Daten, bitte warten...
-
-[FED_LDW]
-Lade Daten, bitte warten...
-
-[FEC_SLC]
-Slot ist beschãdigt
-
-[FED_LFL]
-Spiel konnte nicht geladen werden. Das Spiel wird neu gestartet.
-
-[FET_RSO]
-ORIGINAL-EINSTELLG. WIEDERHERGESTELLT
-
-[FET_RSC]
-HARDWARE NICHT VERFÜGBAR - ORIGINAL-EINSTELLG. WIEDERHERGESTELLT
-
-[CRED270]
-MIKE HONG
-
-[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/gxt.exe b/utils/gxt/gxt.exe
index 0a39c0b1..ff264dad 100644
--- a/utils/gxt/gxt.exe
+++ b/utils/gxt/gxt.exe
Binary files differ
diff --git a/utils/gxt/italian.txt b/utils/gxt/italian.txt
deleted file mode 100644
index 822a30b8..00000000
--- a/utils/gxt/italian.txt
+++ /dev/null
@@ -1,8040 +0,0 @@
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBFàèéìòùÀÈÉÌÒÙ
-
-[DEFNAM]
-Claude----------------------
-
-[IN_VEH]
-~g~Ehi! Torna nel veicolo!
-
-[IN_VEH2]
-~g~Avrai bisogno di un veicolo per questo lavoro!
-
-[IN_BOAT]
-~g~Hai bisogno di un'imbarcazione per questo lavoro!
-
-[HEY]
-~g~Non procedere da solo, stai insieme ai tuoi compagni!
-
-[HEY2]
-~g~Non dividetevi, tieni il gruppo compatto!
-
-[HEY3]
-~g~Hai abbandonato il tuo uomo! Torna indietro e recupera 8-Ball!
-
-[HEY4]
-~g~Se abbandoni Misty, Luigi ti fa a pezzi! Vai a recuperarla!
-
-[HEY5]
-~g~Manca una ragazza alla lista! Vai a recuperarla!
-
-[HEY6]
-~g~Hai perso l'onore insieme a Yakuza Kanbu. Devi proteggerlo!
-
-[HEY7]
-~g~Un'arma extra può tornare utile. Torna indietro e recupera il tuo contatto!
-
-[HEY8]
-~g~Forse non hai ben presente il concetto di protezione: non abbandonare il vecchietto orientale!
-
-[HEY9]
-~g~Vuoi sapere cosa si dice in giro? Fa'una visita al tuo contatto!
-
-[HELP2_A]
-Premi il ~h~tasto /~w~ mentre corri per effettuare uno ~h~scatto~w~.
-
-[HELP3]
-Ricorda che puoi eseguire uno scatto solo per brevi tratti.
-
-[HELP4_A]
-Premi il ~h~tasto ~k~~VEHICLE_ACCELERATE~~w~ per ~h~accelerare~w~.
-
-[HELP4_D]
-Sposta la ~h~levetta analogica destra~w~ verso l'alto per ~h~accelerare~w~.
-
-[HELP5_A]
-Premi il ~h~tasto ~k~~VEHICLE_BRAKE~~w~ per ~h~frenare~w~ o, se il veicolo è fermo, per inserire la ~h~retromarcia~w~.
-
-[HELP5_D]
-Sposta la ~h~levetta analogica destra~w~ verso il basso per ~h~frenare~w~ o, se il veicolo è fermo, per inserire la ~h~retromarcia~w~.
-
-[HELP6_A]
-Premi il ~h~tasto ~k~~VEHICLE_HANDBRAKE~~w~ per tirare il ~h~freno a mano~w~.
-
-[HELP6_C]
-Premi il ~h~tasto ~k~~VEHICLE_HANDBRAKE~~w~ per tirare il ~h~freno a mano~w~.
-
-[HELP6_D]
-Premi il ~h~tasto ~k~~VEHICLE_HANDBRAKE~~w~ per tirare il ~h~freno a mano~w~.
-
-[HELP7_A]
-Tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~ per ~h~mirare~w~ con il fucile di precisione.
-
-[HELP7_D]
-Tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~ per ~h~mirare~w~ con il fucile di precisione.
-
-[HELP8_A]
-Premi il ~h~tasto ~k~~PED_SNIPER_ZOOM_IN~~w~ per ~h~zoomare~w~ col fucile e il ~h~tasto ~k~~PED_SNIPER_ZOOM_OUT~~w~ per ~h~allargare il campo~w~.
-
-[HELP9_A]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~sparare~w~ con il fucile di precisione.
-
-[HELP10]
-Questo distintivo indica che hai un livello di sospetto.
-
-[HELP11]
-Più distintivi hai, maggiore è il tuo livello di sospetto.
-
-[HELP13]
-In alcuni casi potresti dover utilizzare passaggi non indicati sul radar.
-
-[TIMER]
-Questa è una missione a tempo: devi completarla prima che il contatore raggiunga lo zero.
-
-[MISTY1]
-~r~Mistry è pronta per l'obitorio!
-
-[OUT_VEH]
-~g~Esci dal veicolo!
-
-[GARAGE]
-Porta l'auto dentro il garage e poi esci a piedi all'esterno.
-
-[WANTED1]
-~g~Semina i poliziotti per perdere il tuo livello di sospetto.
-
-[NODOORS]
-~g~Non sono sardine! Trova un veicolo con sedili a sufficienza.
-
-[TRASH]
-~g~Hai ridotto proprio male il tuo veicolo! Vedi di farlo riparare!
-
-[WRECKED]
-~g~Il veicolo è a pezzi!
-
-[HORN]
-~g~Suona il clacson.
-
-[HORN4]
-Premi il ~h~tasto R3~w~ per attivare il ~h~clacson~w~.
-
-[NOMONEY]
-~g~Ti servono più soldi!
-
-[OUTTIME]
-~r~Troppo lento, troppo lento!
-
-[SPOTTED]
-~r~Ti hanno visto!
-
-[REWARD]
-RICOMPENSA ~1~$
-
-[GAMEOVR]
-GAME OVER
-
-[Z]
-Valore asse Z: ~1~
-
-[M_FAIL]
-MISSIONE FALLITA!
-
-[M_PASS]
-MISSIONE COMPIUTA! ~1~$
-
-[O_PASS]
-LAVORO OCCASIONALE ESEGUITO!
-
-[O_FAIL]
-LAVORO OCCASIONALE FALLITO!
-
-[DEAD]
-MASSACRATO!
-
-[BUSTED]
-BECCATO!
-
-[S_PROMP]
-Quando non stai eseguendo una missione, puoi ~h~salvare la partita qui~w~ in questo modo il tempo avanzerà di sei ore.
-
-[NUMBER]
-~1~
-
-[SCORE]
-~1~$
-
-[LOADCAR]
-CARICAMENTO VEICOLO... (PREMI L1 PER ANNULLARE)
-
-[CARSOFF]
-Veicoli disabilitati.
-
-[CARS_ON]
-Veicoli attivati.
-
-[TEXTXYZ]
-Scrittura delle coordinate sul file...
-
-[CHEATON]
-Modalità trucchi attivata
-
-[CHEATOF]
-Modalità trucchi disattivata
-
-[UZI_IN]
-L'Uzi adesso e' disponibile da AmmuNation!
-
-[IMPORT1]
-Esci fuori e aspetta il tuo veicolo.
-
-[PAGEB1]
-Pistola depositata nel nascondiglio
-
-[PAGEB2]
-Uzi depositato nel nascondiglio
-
-[PAGEB3]
-Armatura depositata nel nascondiglio
-
-[PAGEB4]
-Fucile a pompa depositato nel nascondiglio
-
-[PAGEB5]
-Granate depositate nel nascondiglio
-
-[PAGEB6]
-Molotov depositate nel nascondiglio
-
-[PAGEB7]
-AK47 depositato nel nascondiglio
-
-[PAGEB8]
-Fucile di precisione depositato nel nascondiglio
-
-[PAGEB9]
-M16 depositato nel nascondiglio
-
-[PAGEB10]
-Lanciamissili depositato nel nascondiglio
-
-[PAGEB11]
-Lanciafiamme depositato nel nascondiglio
-
-[WANT_A]
-Non puoi essere arrestato se il tuo ~h~livello di sospetto~w~ è nullo.
-
-[WANT_B]
-Il tuo ~h~livello di sospetto~w~ è rappresentato da una riga di stelle nell'angolo superiore destro dello schermo.
-
-[WANT_C]
-Adesso hai un ~h~livello di sospetto~w~ pari a uno...
-
-[WANT_D]
-due...
-
-[WANT_E]
-tre...
-
-[WANT_F]
-Man mano che il tuo ~h~livello di sospetto~w~ aumenta, attirerai l'attenzione di forze dell'ordine sempre più potenti.
-
-[WANT_G]
-Se vieni ~h~'beccato'~w~, verrai portato alla più vicina stazione di polizia.
-
-[WANT_H]
-I poliziotti prenderanno tutte le tue armi e parte dei tuoi risparmi come bustarella.
-
-[WANT_I]
-Qualsiasi missione stessi affrontando, sarà considerata fallita.
-
-[WANT_J]
-Scoprirai alcuni modi per ridurre il tuo livello di sospetto procedendo nel gioco.
-
-[WANT_K]
-Se sei in un veicolo, i ~h~carozzieri~w~ potranno ~h~azzerare il tuo livello di sospetto~w~.
-
-[HEAL_B]
-Quando sei ~h~'massacrato'~w~, verrai trasportato al più vicino ospedale.
-
-[HEAL_C]
-Perderai tutte le tue armi e i dottori prenderanno parte dei tuoi risparmi per rimetterti in sesto.
-
-[HEAL_E]
-Scoprirai alcuni modi per curarti o per proteggerti dagli attacchi procedendo nel gioco.
-
-[DAM]
-DANNO:
-
-[KILLS]
-UCCISIONI:
-
-[FARES]
-CLIENTI:
-
-[BULL]
-LINGOTTI:
-
-[EVID]
-PROVE:
-
-[HEALTH]
-CONDIZIONI VEICOLO:
-
-[COLLECT]
-RACCOLTO:
-
-[BOMB]
-Guida il veicolo dentro un'armeria per installare una ~h~bomba~w~. Costo - ~h~1000$~w~.
-
-[SAVE1]
-Passa attraverso la porta per ~h~salvare la partita~w~. Non puoi salvare durante una missione.
-
-[SAVE2]
-Qualsiasi veicolo parcheggiato nel garage verrà salvato insieme alla partita.
-
-[AMMU]
-Entra in AmmuNation per comprare un'arma.
-
-[BRIDGE1]
-Quando verrà riparato il ponte Callahan, potrai raggiungere Staunton Island.
-
-[TUNNEL]
-Quando il sottopassaggio Porter verrà inaugurato, potrai raggiungere Staunton Island.
-
-[LUIGI]
-MISSIONI LUIGI
-
-[TONI]
-MISSIONI TONI
-
-[JOEY]
-MISSIONI JOEY
-
-[FRANK]
-MISSIONI SALVATORE
-
-[DIABLO]
-MISSIONI DIABLO
-
-[ASUKA]
-MISSIONI ASUKA
-
-[B_SITE]
-MISSIONI SUBURBANE ASUKA
-
-[KENJI]
-MISSIONI KENJI
-
-[RAY]
-MISSIONI RAY
-
-[LOVE]
-MISSIONI LOVE
-
-[YARDIE]
-MISSIONI YARDIE
-
-[HOOD]
-MISSIONI HOOD
-
-[CITYZON]
-Città di Liberty
-
-[IND_ZON]
-Portland
-
-[PORT_W]
-Callahan Point
-
-[PORT_S]
-Molo atlantico
-
-[PORT_E]
-Porto di Portland
-
-[PORT_I]
-Trenton
-
-[S_VIEW]
-Portland View
-
-[CHINA]
-Chinatown
-
-[EASTBAY]
-Spiaggia di Portland
-
-[LITTLEI]
-Saint Mark
-
-[REDLIGH]
-Distretto a luci rosse
-
-[TOWERS]
-Hepburn Heights
-
-[HARWOOD]
-Harwood
-
-[ROADBR1]
-Ponte Callahan
-
-[ROADBR2]
-Ponte Callahan
-
-[TUNNELP]
-Sottopassaggio Porter
-
-[BOMB1]
-Garage di 8-Ball
-
-[COM_ZON]
-Staunton Island
-
-[STADIUM]
-Aspatria
-
-[HOSPI_2]
-Rockford
-
-[UNIVERS]
-Campus Liberty
-
-[CONSTRU]
-Fort Staunton
-
-[PARK]
-Parco Belleville
-
-[COM_EAS]
-Newport
-
-[SHOPING]
-Bedford Point
-
-[YAKUSA]
-Torrington
-
-[SUB_ZON]
-Shoreside Vale
-
-[AIRPORT]
-Aeroporto Francis
-
-[PROJECT]
-Giardini Wichita
-
-[SUB_IND]
-Pike Creek
-
-[SWANKS]
-Cedar Grove
-
-[BIG_DAM]
-Diga Cochrane
-
-[SUB_ZO2]
-Shoreside Vale
-
-[SUB_ZO3]
-Shoreside Vale
-
-[CAR_1]
-Ambulanza
-
-[CAR_2]
-Camion dei pompieri
-
-[CAR_3]
-Polizia
-
-[CAR_4]
-Cellulare
-
-[CAR_5]
-Caserma
-
-[CAR_6]
-Rhino
-
-[CAR_7]
-Auto dell'FBI
-
-[CAR_8]
-Securicar
-
-[CAR_9]
-Moonbeam
-
-[CAR_10]
-Coach
-
-[CAR_11]
-Flatbed
-
-[CAR_12]
-Linerunner
-
-[CAR_13]
-Trashmaster
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-Mr Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinel
-
-[CAR_25]
-Cheetah
-
-[CAR_26]
-Banshee
-
-[CAR_27]
-Stinger
-
-[CAR_28]
-Infernus
-
-[CAR_29]
-Esperanto
-
-[CAR_30]
-Kuruma
-
-[CAR_31]
-Stretch
-
-[CAR_32]
-Familiare
-
-[CAR_33]
-Landstalker
-
-[CAR_34]
-Manana
-
-[CAR_35]
-Idaho
-
-[CAR_36]
-Stallion
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Vecchio taxi
-
-[CAR_39]
-Maggiolino
-
-[LUIGIS]
-Club Luigi's
-
-[GOAWAY]
-~g~Stai già svolgendo una missione!
-
-[LUIGGO]
-~g~Luigi sta intervistando delle nuove ragazze. Torna più tari!
-
-[JOEYGO]
-~g~Joey è fuori città con Misty. Passa più tardi!
-
-[TONIGO]
-~g~Toni ha portato sua madre a teatro. Passa un'altra volta!
-
-[KEMUGO]
-~g~Maria e Kemuri sono impegnati la momento. Passa più tardi!
-
-[KENJGO]
-~g~Kenji è a una riunione della Yakuza. Passa un'altra volta!
-
-[RAYGO]
-~g~Ray è andato a un centro estetico. Passa un'altra volta!
-
-[LOVEGO]
-~g~Donald Love si sta occupando di affari urgenti. Prendi un appuntamento più tardi!
-
-[KENSGO]
-~g~Kenji e' occupato! Torna più tardi!
-
-[ASUSGO]
-~g~Asuka adesso non è disponibile!
-
-[HOODGO]
-~g~Gli Hood non sono disponibili!
-
-[WRONGT1]
-~g~Passa tra le 05:00 e le 21:00 per un lavoro
-
-[WRONGT2]
-~g~Passa tra le 06:00 e le 14:00 per un lavoro
-
-[WRONGT3]
-~g~Passa tra le 15:00 e le 00:00 per un lavoro
-
-[GUN_1A]
-Usa il ~h~tasto ~k~~PED_CYCLE_WEAPON_RIGHT~~w~ e il ~h~tasto ~k~~PED_CYCLE_WEAPON_LEFT~~w~ per passare in rassegna le armi.
-
-[GUN_2A]
-Tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~ per la ~h~mira automatica~w~ e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare! Allenati con i bersagli...
-
-[GUN_2C]
-Tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~ per la ~h~mira automatica~w~ e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare! Allenati con i bersagli...
-
-[GUN_2D]
-Tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~ per la ~h~mira automatica~w~ e premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare! Allenati con i bersagli...
-
-[GUN_3A]
-Mentre tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~, premi il ~h~tasto ~k~~PED_CYCLE_TARGET_LEFT~~w~ o il ~h~tasto ~k~~PED_CYCLE_TARGET_RIGHT~~w~ per cambiare bersaglio.
-
-[GUN_3B]
-Mentre tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~, premi il ~h~tasto ~k~~PED_CYCLE_TARGET_LEFT~~w~ o il ~h~tasto ~k~~PED_CYCLE_TARGET_RIGHT~~w~ per cambiare bersaglio.
-
-[GUN_4A]
-Mentre tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~, puoi camminare o correre tenendo sotto mira il bersaglio.
-
-[GUN_4B]
-Mentre tieni premuto il ~h~tasto ~k~~PED_LOCK_TARGET~~w~, puoi camminare o correre tenendo sotto mira il bersaglio.
-
-[GUN_5]
-Puoi far pratica sparando a questi bersagli di carta. Quando hai finito, riprendi la missione.
-
-[TAXI1]
-~g~Trova un passeggero.
-
-[FARE1]
-~g~Destinazione: ~w~'Meeouch Sex Kitten Club' ~g~nel distretto a luci rosse.
-
-[FARE2]
-~g~Destinazione: ~w~'Supa Save' ~g~a Portland View.
-
-[FARE3]
-~g~Destinazione: ~w~'l'auditorio della scuola' ~g~a Chinatown.
-
-[FARE4]
-~g~Destinazione: ~w~'Greasy Joe's Cafe' ~g~a Callahan Point.
-
-[FARE5]
-~g~Destinazione: ~w~'AmmuNation' ~g~nel distretto a luci rosse.
-
-[FARE6]
-~g~Destinazione: ~w~'Easy Credit Autos' ~g~a Saint Mark.
-
-[FARE7]
-~g~Destinazione: ~w~'Woody's topless bar' ~g~nel distretto a luci rosse.
-
-[FARE8]
-~g~Destinazione: ~w~'Marcos Bistro' ~g~a Saint Mark.
-
-[FARE9]
-~g~Destinazione: ~w~'Garage importazioni-esportazioni' ~g~al porto di Portland.
-
-[FARE10]
-~g~Destinazione: ~w~'Punk Noodles' ~g~a Chinatown.
-
-[FARE12]
-~g~Destinazione: ~w~'lo stadio di football' ~g~in Aspatria.
-
-[FARE13]
-~g~Destinazione: ~w~'la chiesa' ~g~a Bedford Point.
-
-[FARE14]
-~g~Destinazione: ~w~'il Casinò' ~g~in Torrington.
-
-[FARE15]
-~g~Destinazione: ~w~'università di Liberty' ~g~al campus di Liberty.
-
-[FARE16]
-~g~Destinazione: ~w~'il grande magazzino' ~g~nel parco Belleville.
-
-[FARE17]
-~g~Destinazione: ~w~'il museo' ~g~a Newport.
-
-[FARE18]
-~g~Destinazione: ~w~'AmCo Building' ~g~a Torrington.
-
-[FARE19]
-~g~Destinazione: ~w~'Bolt Burgers' ~g~a Bedford Point.
-
-[FARE20]
-~g~Destinazione: ~w~'il parco' ~g~a Belleville.
-
-[FARE21]
-~g~Destinazione: ~w~'Aeroporto Francis'~g~.
-
-[FARE22]
-~g~Destinazione: ~w~'la diga di Cochrane'~g~.
-
-[FARE24]
-~g~Destinazione: ~w~'l'ospedale' ~g~a Pike Creek.
-
-[FARE25]
-~g~Destinazione: ~w~'il parco' ~g~a Shoreside Vale.
-
-[FARE26]
-~g~Destinazione: ~w~'North West Towers' ~g~ai giardini Wichita.
-
-[NEW_TAX]
-PIÙ GRANDI! PIÙ VELOCI! PIÙ ROBUSTI! I nuovi taxi Borgnine disponibili ad Harwood. Chiamate subito il numero 555-BORGNINE!
-
-[TSCORE2]
-~1~$
-
-[IN_ROW]
-Bonus ~1~ di seguito! ~1~$
-
-[TTUTOR]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Taxi.
-
-[TTUTOR2]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Taxi.
-
-[A_TIME]
-+~1~ secondi
-
-[A_FULL]
-~r~Ambulanza piena!
-
-[A_RANGE]
-~g~Sei fuori dal raggio d'azione della radio. Ritorna in prossimità dell'ospedale!
-
-[FTUTOR]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Camion dei pompieri.
-
-[FTUTOR2]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Camion dei pompieri.
-
-[F_PASS1]
-Incendio spento!
-
-[F_RANGE]
-~g~Sei fuori dal raggio d'azione della radio. Ritorna in prossimità della stazione dei pompieri!
-
-[C_BREIF]
-~g~Sospetto visto in prossimità dell'area ~a~.
-
-[C_RANGE]
-~g~Sei fuori dal raggio d'azione della radio. Ritorna in prossimità della stazione di polizia!
-
-[DODO_FT]
-Hai volato per ~1~ secondi!
-
-[EBAL_A]
-Conosco un posto nei dintorni del distretto a luci rosse dove si puo'parlare,
-
-[EBAL_A1]
-ma le mie mani sono a pezzi, quindi è meglio se guidi te, fratello.
-
-[EBAL_1]
-Premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per ~h~entrare~w~ o ~h~uscire~w~ da un veicolo.
-
-[EBAL_1B]
-Premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per ~h~entrare~w~ o ~h~uscire~w~ da un veicolo.
-
-[EBAL_2]
-~g~Rientra in macchina!
-
-[EBAL_3]
-Questo è il ~h~radar~w~: usalo per orientarti nella città. Segui il ~h~puntino~w~ sul ~h~radar~w~ per trovare il nascondiglio!
-
-[EBAL_D]
-Conosco un tipo, è nel giro. Si chiama Luigi.
-
-[EBAL_D1]
-Forza, raggiungiamolo, magari riesco a procurarti qualche lavoretto.
-
-[EBAL_E]
-Forza, facciamo un salto. Te lo voglio presentare.
-
-[EBAL_I]
-Il boss sara' con voi al più presto...
-
-[EBAL_J]
-8-Ball ha alcune faccende da sbrigare al piano di sopra.
-
-[EBAL_K]
-Forse potresti farmi un favore.
-
-[EBAL_L]
-Una delle mie ragazze ha bisogno di un passaggio, prendi una macchina, recupera Misty dalla clinica e portala qua.
-
-[EBAL_N]
-E tieni le mani sul volante!
-
-[EBAL_4]
-~r~8-Ball è morto!
-
-[EBAL_5]
-~g~Trova un veicolo!
-
-[EBAL_6]
-~g~Recupera Misty!
-
-[LM1]
-'LE RAGAZZE DI LUIGI'
-
-[LM2]
-'NIENTE SPANK PER LE RAGAZZE'
-
-[LM3]
-'PORTA IN GIRO MISTY PER ME'
-
-[LM5]
-'FESTA DEGLI SBIRRI'
-
-[LM1_2]
-~g~Porta Misty al club Luigi's.
-
-[LM1_3]
-~g~Premi il clacson per far entrare la ragazza in macchina.
-
-[LM1_6]
-~g~Torna in macchina!
-
-[LM1_7]
-~g~Ferma il veicolo in prossimità di Misty per permetterle di salire.
-
-[LM1_8]
-Puoi tornare da Luigi per altri lavori o gironzolare per la città di Liberty.
-
-[LM2_A]
-C'è una nuova droga in giro per la città chiamata SPANK.
-
-[LM2_E]
-Qualche farabutto ne ha passata un po' alle mie ragazze giù al porto di Portland.
-
-[LM2_B]
-Raggiungi lo spacciatore e gioca a baseball con la sua testa!
-
-[LM2_G]
-Voglio soddisfazione per questo insulto!
-
-[LM2_1]
-~g~Prendi la sua macchina e falla riverniciare.
-
-[LM2_2A]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per tirare ~h~pugni~w~ e ~h~calci~w~ o per ~h~usare~w~ la mazza!
-
-[LM2_2C]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per tirare ~h~pugni~w~ e ~h~calci~w~ o per ~h~usare~w~ la mazza!
-
-[LM2_2D]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per tirare ~h~pugni~w~ e ~h~calci~w~ o per ~h~usare~w~ la mazza!
-
-[LM2_3]
-~g~Parcheggia la macchina nel rifugio di Luigi!
-
-[LM2_4]
-~g~Rivernicia la macchina!
-
-[LM3_A]
-Ehi, devo parlarti... Va bene Mick, ne discutiamo più tardi.
-
-[LM3_B]
-Come va ragazzo?
-
-[LM3_C]
-Il figlio del Don, Joey Leone, ha bisogno delle doti di Misty, la sua ragazza.
-
-[LM3_D]
-Valla a prendere a Hepburn Heights...
-
-[LM3_E]
-ma fa attenzione: è il territorio dei Diablo.
-
-[LM3_F]
-Poi portala in fretta fino al suo garage in Trenton.
-
-[LM3_H]
-Mi raccomando, tieni gli occhi sulla strada e lontano da Misty!
-
-[LM3_1D]
-Premi il ~h~tasto L3~w~ per suonare il ~h~clacson~w~ e avvertire Misty che sei arrivato.
-
-[LM3_2]
-~g~Porta Misty da Joey.
-
-[LM3_4]
-~g~Vai a prendere Misty!
-
-[LM3_5]
-Adesso lavori regolarmente per Luigi, vero? Era ora che trovasse un autista di cui ci si può fidare!
-
-[LM3_7]
-Sarò da te fra un minuto, stellina mia.
-
-[LM3_10]
-~g~Recupera un veicolo!
-
-[LM4_B]
-Occupati di ciò che ti ho chiesto.
-
-[LM4_C]
-Se ti serve un'arma, vai sul retro di AmmuNation dal lato opposto della metropolitana.
-
-[LM5_A]
-La festa degli sbirri viene tenuta in una vecchia scuola presso il ponte Callahan.
-
-[LM5_B]
-A quanto sembra vogliono un po' di azione vecchio stile...
-
-[LM5_C]
-Ora ho ragazze su tutti i marciapiedi della città.
-
-[LM5_D]
-Portale alla festa il prima possibile.
-
-[LM5_1]
-~g~Non sovraffollate il mezzo o mi sciuperai le ragazze! ~g~Scarica subito queste e poi vai a cercarne altre.
-
-[LM5_2]
-~r~Una delle ragazze di Luigi è ridotta a pezzi!
-
-[LM5_3]
-~g~Hai bisogno di un mezzo!
-
-[LM5_4]
-~g~Raccogli le ragazze che lavorano presso St. Marks.
-
-[LM5_5]
-~g~Porta le ragazze alla festa degli sbirri!
-
-[LM5_8]
-~g~Ragazze alla festa: ~1~
-
-[JM2]
-'ADDIO 'CHUNKY' LEE CHONG'
-
-[JM4]
-'L'AUTISTA DI CIPRIANI'
-
-[JM5]
-'CADAVERE NEL BAGAGLIAIO'
-
-[JM1_1]
-~g~Porta la macchina di Forelli al garage di 8-Ball a nord di qui, dietro a 'Easy Credit Autos'.
-
-[JM1_2]
-~g~Parcheggia la macchina nuovamente di fronte al Marco's Bistro.
-
-[JM1_3]
-~g~Attiva la bomba e vattene in fretta!
-
-[JM1_4]
-~g~Hai rovinato il veicolo! Fallo riparare!
-
-[JM1_5]
-~g~La bomba non è stata piazzata!
-
-[JM1_6]
-~g~Parcheggia la macchina nel posto giusto.
-
-[JM1_8A]
-~y~Ehi, amico mio!
-
-[JM1_8B]
-~y~L'armeria è automatizzata: entra dentro, ferma la macchina e il resto dell'operazione verrà eseguito automaticamente.
-
-[JM1_8C]
-~y~La prima volta è gratis, ma le altre volte dovrai pagare.
-
-[JM2_A]
-Chunky Lee Chong sta spacciando SPANK per una nuova gang dalla Colombia... o dal Colorado...o qualcosa del genere...
-
-[JM2_B]
-Non ricordo bene... ma del resto che importa?
-
-[JM2_D]
-Quel verme ha venduto la sua roba per l'ultima volta.
-
-[JM2_E]
-Voglio che tu lo elimini!
-
-[JM2_G]
-Equipaggiati con una calibro nove: sai dove trovarla, vero?
-
-[JM2_H]
-Guardati le spalle a Chinatown: è territorio della Triade.
-
-[JM3_A]
-Bene, colpiremo il furgone portavalori.
-
-[JM3_B]
-Esce da Chinatown tutti i giorni.
-
-[JM3_C]
-I proiettili non scalfiscono neanche la sua blindatura, per cui prendi una macchina e fallo uscire fuori strada.
-
-[JM3_D]
-Colpiscilo forte e le guardie dovrebbero arrendersi.
-
-[JM3_E]
-Ora portalo fino al magazzino vicino agli impianti portuali e i miei ragazzi si occuperanno del resto.
-
-[JM3_F]
-Ricorda che non starà in giro per delle ore, per cui non perdere tempo.
-
-[JM3_1]
-~g~Porta il furgone a destinazione.
-
-[JM3_2]
-~g~Sperona il furgone finché non è danneggiato oltre al 70 percento.
-
-[JM4_B]
-Oh! Ecco il tipo di cui ti stavo parlando.
-
-[JM4_C]
-Bene, ascolta: questo tipo non è italiano e non è un meccanico, ma sa come riparare le cose.
-
-[JM4_D]
-Il suo nome è Toni Cipriani.
-
-[JM4_E]
-Piacere, Toni Cipriani.
-
-[JM4_F]
-Portalo al ristorante Momma's a St Marks, OK?
-
-[JM4_G]
-Adesso ascolta, sto pianificando un lavoro che richiede un buon autista, per cui passa a trovarmi un giorno di questi, OK?
-
-[JM4_2]
-Aspetta qua! Tieni il motore acceso, potrebbero esserci grane.
-
-[JM4_3]
-È un'imboscata della Triade! Portaci via di qua, ragazzo!
-
-[JM4_4]
-La Triade pensa di potersi prendere gioco di me, la Triade... di ME!
-
-[JM4_6]
-Fai attenzione alla macchina! Ti ho detto di non fare stronzate.
-
-[JM4_7]
-~g~Accompagna Toni al ristorante Momma's.
-
-[JM4_8]
-~r~Toni è stato ucciso!
-
-[JM5_A]
-Perfetto! Semplicemente perfetto.
-
-[JM5_B]
-Sei proprio la persona di cui avevo bisogno!
-
-[JM5_D]
-Uno dei Forelli ha voluto fare il furbo e si è beccato quello che si meritava.
-
-[JM5_E]
-Porta il cadavere al rottamatore ad Hardwood, OK?
-
-[JM5_1]
-~g~Porta il cadavere al rottamatore!
-
-[JM5_2]
-~g~Sono i fratelli Forelli!
-
-[JM6_A]
-Ci si prospetta una bella corsetta, vero?
-
-[JM6_B]
-Bene, recupera un veicolo e raggiungi il rifugio a St. Marks e recupera alcuni miei amici.
-
-[JM6_C]
-Stanno per fare un colpo a una banca e hanno bisogno dell'autista.
-
-[JM6_D]
-Ho dato loro la mia parola che tu sei il migliore sul mercato.
-
-[JM6_E]
-Portali in banca prima delle cinque, non un minuto più tardi!
-
-[JM6_2]
-Tieni il motore acceso: torneremo in un attimo!
-
-[JM6_3]
-Portaci via di qua!!
-
-[JM6_4]
-Semina i poliziotti e portaci al rifugio!
-
-[JM6_6]
-~g~Prendi un veicolo meno appariscente!
-
-[JM6_7]
-~g~Hai bisogno di tutti e tre per rapinare la banca!
-
-[TM1]
-'RIPULIRE LA LAVANDERIA'
-
-[TM2]
-'LA RACCOLTA'
-
-[TM3]
-'SALVATORE RICHIEDE UN INCONTRO'
-
-[TM4]
-'TRIADE E TRIBOLAZIONE'
-
-[TM5]
-'PESCE ESPLOSIVO'
-
-[TONI_P]
-Ho un lavoro urgente per te! -Toni
-
-[TM1_A]
-~w~Prendi una sedia, ragazzo, prendi una maledetta sedia.
-
-[TM1_B]
-~w~Allora la lavanderia non intende pagare il pizzo, eh?
-
-[TM1_C]
-~w~La Triade pensa di poter mettersi contro di me?
-
-[TM1_D]
-~w~Insegniamo a questi presuntuosi cosa significa fare sul serio.
-
-[TM1_E]
-~w~Sì, insegniamo loro un po' di rispetto. Nessun mio figliolo si fa fregare dalla Triade.
-
-[TM1_F]
-Tuo padre, pace all'anima sua, non si è mai fatto fregare da quelli della Triade in Sicilia.
-
-[TM1_G]
-~w~Scusa mamma. Sì mamma.
-
-[TM1_H]
-~w~Voglio che tu distrugga i furgoni della lavanderia
-
-[TM1_I]
-~w~e faccia a pezzi qualsiasi idiota della Triade che oserà mettersi in mezzo.
-
-[TM1_J]
-~w~8-Ball ti fornirà qualsiasi cosa di cui tu possa aver bisogno.
-
-[TM2_A]
-~w~Toni vuole fare il duro,
-
-[TM2_AA]
-ma non riuscirà mai a eguagliare suo padre. Ha lasciato una nota per te sul tavolo.
-
-[TM2_B]
-~w~La lavanderia ha accettato di pagare: bel lavoro, ragazzo!
-
-[TM2_C]
-~w~Vai a recuperare i contanti e portali qua. Fai attenzione alla Triade.
-
-[TM2_D]
-~w~Potrebbero volerti ficcare qualche petardo nel sedere, ma tu non farti impressionare.
-
-[TM2_E]
-~w~Nessuno, e intendo nessuno, fa le scarpe a TONI CIPRIANI!
-
-[TM2_1]
-~g~Riporta i contanti a Toni!!!
-
-[TM2_2]
-~g~Li hai freddati tutti!
-
-[TM3_MA]
-~w~Non so dove sia!
-
-[TM3_MB]
-~w~Giuro che ogni tanto anche lui non si rende conto di cosa fa.
-
-[TM3_MC]
-~w~Suo padre invece era diverso. Sempre in prima linea, sempre in carica, coraggioso...
-
-[TM3_A]
-~w~Don Salvatore richiede un incontro.
-
-[TM3_B]
-~w~Recupera la limousine da suo garage e il suo ragazzo, Joey.
-
-[TM3_C]
-~w~Poi passa a prendere Luigi dal suo club e torna qua a prendere me.
-
-[TM3_D]
-~w~Poi andremo tutti assieme al luogo dell'incontro.
-
-[TM3_E]
-~w~Quelli della Triade non sanno quando è l'ora di fermarsi.
-
-[TM3_F]
-~w~Se vogliono la guerra, avranno la guerra!
-
-[TM3_G]
-~w~Adesso muoviamoci.
-
-[TM3_1]
-~g~Prendi la limousine da Joey.
-
-[TM3_2]
-~g~Ora vai a prendere Luigi.
-
-[TM3_3]
-~g~Ora vai a prendere Toni.
-
-[TM3_4]
-~g~Porta i tuoi passeggeri da Salvatore.
-
-[TM3_5]
-~y~Un'imboscata della Triade!!!
-
-[TM4_B]
-~w~Siamo in GUERRA! La Triade utilizza uno stabilimento per il pesce come facciata.
-
-[TM4_C]
-~w~La maggior parte del loro lavoro si svolge nel mercato del pesce di Chinatown.
-
-[TM4_D]
-~w~La lavanderia ha smesso nuovamente di pagarci il pizzo.
-
-[TM4_E]
-~w~Pensano di essere sotto la protezione della Triade, per cui si meritano una punizione esemplare.
-
-[TM4_F]
-~w~Prendi questi ragazzi e fai fuori i signori della Triade!
-
-[TM4_G]
-~w~E se ne hai il tempo, elimina anche qualcuno dei loro scagnozzi.
-
-[TM4_GAT]
-~w~Avrai bisogno di un 'furgone del pesce della Triade' per riuscire a entrare.
-
-[TM5_A]
-TESTO NON PIÙ NECESSARIO
-
-[TM5_B]
-~w~Basta, ne ho avuto abbastanza!
-
-[TM5_C]
-~w~Elimineremo una volta per tutte la Triade da Liberty!
-
-[TM5_D]
-8-Ball ha messo una bomba in un camion della nettezza urbana.
-
-[TM5_E]
-~w~La bomba è collegata a un timer, per cui se fai errori non resteranno prove. Vai a prendere il camion.
-
-[TM5_F]
-~w~Fai attenzione: 8-Ball ha detto che il sistema è molto sensibile e potrebbe esplodere se prendi un colpo.
-
-[TM5_G]
-~w~Il loro stabilimento aprirà i cancelli al camion.
-
-[TM5_H]
-~w~Parcheggia tra i due serbatoi del gas e allontanati in fretta!
-
-[TM5_I]
-~w~Voglio che piovano sgombri.
-
-[TM5_J]
-~w~Stiamo facendo le cose in grande, basta con gli scherzi.
-
-[FM2]
-'TAGLIARE L'ERBA'
-
-[FM4]
-'ULTIME RICHIESTE'
-
-[FM1_A]
-~w~Io e i ragazzi dobbiamo parlare di lavoro,
-
-[FM1_B]
-~w~per cui dovrai occuparti della mia ragazza questa sera.
-
-[FM1_C]
-~w~EHI MARIA! MUOVI IL CULO!
-
-[FM1_D]
-~w~Quella vacca fa sempre così.
-
-[FM1_E]
-~w~Ed eccola qua, la vera e unica regina di Sheba!
-
-[FM1_F]
-~w~Cosa stavi facendo di sopra?
-
-[FM1_G]
-~w~Qualsiasi cosa fosse, sono certo che mi è costato molto.
-
-[FM1_H]
-~w~Beh, credevo non mi volessi attorno quando parli di lavoro, vero?
-
-[FM1_I]
-~w~Entra in macchina e tieni chiusa la boccaccia.
-
-[FM1_J]
-~w~Prendi la limousine, ma riportala indietro come nuova, capito?
-
-[FM1_K]
-~w~E fai attenzione alla ragazza, può causarti dei problemi.
-
-[FM1_L]
-~w~Tranquillo, sono certa che il tuo nuovo cagnolino sa cosa deve fare:
-
-[FM1_M]
-~w~non è grande e grosso a sufficienza?
-
-[FM1_N]
-~w~Ehi, Fido: andiamo a far visita a Chico e prendiamo della roba per divertirci.
-
-[FM1_P]
-~g~Ecco, quello è Chico. Fermati vicino a lui.
-
-[FM1_S]
-~w~Buongiorno signora.
-
-[FM1_TT]
-~w~È UN RETATA DELLA POLIZZIA!
-
-[FM1_1]
-~g~Torna nella limousine!
-
-[FM1_2]
-~g~Rientra nella limousine!
-
-[FM1_3]
-~r~Se abbandoni Maria, Salvatore ti farà ammazzare! Torna indietro a prenderla.
-
-[FM1_4]
-~g~Hai scaricato la donna del Don. Torna al magazzino e aspetta Maria!
-
-[FM1_5]
-~g~Riporta Maria sana e salva a Salvatore!
-
-[FM1_6]
-~g~Chico non aspetterà per sempre. Porta Maria al porto.
-
-[FM1_7]
-~r~Maria è morta! Salvatore non ne sarà entusiasta...
-
-[FM1_8]
-~r~Hai fatto fuori lo spacciatore di Maria!
-
-[FM2_J]
-Lasciaci da soli per un minuto.
-
-[FM2_A]
-Il Cartello Colombiano sta producendo SPANK da qualche parte a Liberty.
-
-[FM2_K]
-Non sappiamo però dove, e loro sembrano conoscere ogni nostra mossa in anticipo.
-
-[FM2_L]
-C'è un tipo chiamato Ricciolino Bob che lavora al bar di Luigi.
-
-[FM2_M]
-Sta spendendo molti più soldi di quanti ne guadagna.
-
-[FM2_N]
-Normalmente prende un taxi per tornare a casa. Voglio che tu lo segua.
-
-[FM2_O]
-E se ci sta vendendo... fallo fuori!
-
-[FM2_F]
-Ecco il nostro caro amico: mister bocca larga.
-
-[FM2_G]
-Sei stato seguito? Lo sai che questo deve restare un nostro segreto.
-
-[FM2_H]
-No, no... nessuno mi ha seguito. Hai la mia roba?
-
-[FM2_I]
-Ecco il tuo SPANK, e adesso parla!
-
-[FM2_P]
-OK, i Leone stanno combattendo su due fronti.
-
-[FM2_Q]
-Sono ai ferri corti con la Triade e sembra che nessuno dei due sia intenzionato a cedere.
-
-[FM2_R]
-Contemporaneamente, Joey Leone si è fatto dei nemici tra i Forelli.
-
-[FM2_S]
-Ogni giorno perdono uomini e influenza sulla città.
-
-[FM2_T]
-Salvatore sta diventando pericoloso e paranoico. Sospetta di tutto e di tutti.
-
-[FM2_U]
-Con persone fedeli come te, non capisco di cosa si preoccupi.
-
-[FM2_1]
-~g~Ecco Ricciolino Bob!
-
-[FM2_2]
-~g~Ricciolino ha lasciato il club: seguilo!
-
-[FM2_5]
-~g~Andiamo al porto di Portland.
-
-[FM2_6]
-~r~Ricciolino non salirà su un taxi distrutto!
-
-[FM2_7]
-~r~Ricciolino è spaventato! L'appuntamento è saltato!
-
-[FM2_8]
-~g~Elimina Ricciolino Bob!
-
-[FM2_9]
-~r~Ricciolino Bob è morto!
-
-[FM2_10]
-~r~Ricciolino è scappato!
-
-[FM2_11]
-~g~Parcheggia di fronte al club Luigi's: Ricciolino Bob uscirà fra poco.
-
-[FM2_12]
-~r~Ti ha seminato!
-
-[FM3_A]
-~w~Dovremmo eliminare i fottuti Colombiani,
-
-[FM3_B]
-~w~ma siamo già in guerra con la Triade e non siamo abbastanza forti.
-
-[FM3_C]
-~w~Il Cartello ha fondi infiniti grazie allo smercio dello SPANK.
-
-[FM3_D]
-~w~Se li attacchiamo apertamente, ci spazzeranno via come foglie secche.
-
-[FM3_E]
-~w~Probalbimente producono lo SPANK sull'imbarcazione dove si è diretto Ricciolino.
-
-[FM3_F]
-~w~Per cui dovremo usare la testa... meglio ancora la tua testa.
-
-[FM3_G]
-~w~Ti chiedo di distruggere la fabbrica di SPANK come favore personale a me, Salvatore Leone.
-
-[FM3_H]
-~w~Se ci riuscirai, sarai una persona felice: potrai avere tutto ciò che vuoi.
-
-[FM3_I]
-~w~Vai a trovare 8-Ball: avrai bisogno della sua esperienza per far saltare l'imbarcazione.
-
-[FM3_8A]
-~w~Ehi amico, Salvatore ha appena chiamato:
-
-[FM3_8B]
-~w~per un lavoro come questo avrai bisogno di una bella potenza di fuoco.
-
-[FM3_8D]
-~w~ma tu sai che sono soldi spesi bene.
-
-[FM3_8E]
-~w~OK, procediamo allora!
-
-[FM3_8F]
-~w~Posso impostare questo bambino e farlo esplodere, ma non posso sparare con queste mani.
-
-[FM3_8G]
-~w~Prendi questo fucile e fai saltare un po' di teste!
-
-[FM3_4]
-~g~Ferma il veicolo e fai scendere 8-Ball!
-
-[FM3_7]
-~r~8-Ball è stato freddato!
-
-[FM3_8]
-~r~Le guardie sono state messe in guardia!
-
-[FM4_A]
-~w~Sei l'uomo delle pulizie che preferisco.
-
-[FM4_B]
-~w~Sono fiero di te, hai saputo prendere a calci quei maledetti!
-
-[FM4_C]
-~w~Ho un ultimo lavoro per te prima di celebrare.
-
-[FM4_D]
-~w~C'è una macchina vicino al club Luigi's.
-
-[FM4_E]
-~w~All'interno è schizzato cervello dappertutto.
-
-[FM4_F]
-~w~Abbiamo dovuto far ragionare un tipo e la cosa si è rilevata un po', ehm, sporca.
-
-[FM4_H]
-~w~Portala al rottamatore prima che la trovino i poliziotti.
-
-[AM3]
-'STRONCA I PAPARAZZI'
-
-[AM4]
-'GIORNO DI PAGA PER RAY'
-
-[AM5]
-'DOPPIA FACCIA'
-
-[AM1_A]
-Ci sono alcuni punti da chiarire prima di procedere con la nostra relazione di lavoro.
-
-[AM1_B]
-Direi che è il caso di mostrare le carte.
-
-[AM1_C]
-Io sono della Yakuza e so che hai lavorato per la famiglia di Salvatore Leone.
-
-[AM1_D]
-La mia organizzazione può darti lavoro,
-
-[AM1_E]
-ma prima devi dimostrare che i tuoi legami con la Mafia sono definitivamente chiusi.
-
-[AM1_G]
-Assicurati che non raggiunga vivo il suo club.
-
-[AM1_H]
-Nel frattempo io e Maria discuteremo dei tempi passati.
-
-[AM1_I]
-Oh... Asuka, hai un massaggiatore.
-
-[AM1_J]
-Non è un massaggiatore.
-
-[AM1_1]
-~g~Salvatore sta lasciando adesso il club Luigi's!
-
-[AM1_2]
-~r~Sei stato avvistato!
-
-[AM1_3]
-~r~Hai mancato Salvatore!
-
-[AM1_4]
-~r~Ma bravo, hai spaventato il bersaglio! E tu dovresti essere un professionista?
-
-[AM1_5]
-~g~Raggiungi il distretto a luci rosse e aspetta che Salvatore esca dal club.
-
-[AM1_7]
-~r~Salvatore è arrivato a casa e si sta bevendo un cocktail. Ma non ti chiamavano lo sciacallo?
-
-[AM1_8]
-~g~Salvatore uscirà dal club Luigi's attorno alle ~1~:~1~
-
-[AM2_4]
-~g~Sei più appariscente di un elefante fluorescente!
-
-[AM3_A]
-Un reporter ci è ronzato troppo attorno.
-
-[AM3_B]
-Io e Maria ci prenderemo un po' di vacanza fino a quando non ti sarai liberato di questo guardone.
-
-[AM4_A]
-Il mio truffatore preferito!
-
-[AM4_B]
-Maria è molto presa al momento: le dirò che sei passato.
-
-[AM4_C]
-Chi è? Asuka? Lo so, sono stata una bambina cattiva, ma devo andare in bagno! OK?
-
-[AM4_D]
-È giunta l'ora che incontri il nostro uomo nella polizia.
-
-[AM4_E]
-Ecco la ricompensa per l'ultimo lavoro che ha svolto per noi.
-
-[AM4_F]
-È un tipo molto cauto.
-
-[AM4_G]
-Raggiungi in fretta il telefono pubblico a Torrington e aspetta le istruzioni.
-
-[AM5_A]
-Maria e io siamo andati a fare spese.
-
-[AM5_B]
-La nostra fonte alla polizia ci ha informato che uno dei nostri autisti è un maledetto infiltrato!
-
-[AM5_C]
-Fuori dalla sua macchina è particolarmente vulnerabile: gli abbiamo posizionato addosso un tracciante.
-
-[AM5_D]
-Fallo sanguinare!
-
-[AM5_1]
-Ben fatto!
-
-[AS1]
-'ESCA'
-
-[AS2]
-'ESPRESSO E VIA!'
-
-[AS4]
-'RISCATTO'
-
-[AS1_A]
-~w~Miguel pensa non lo stia trattando correttamente.
-
-[AS1_B]
-~w~Ciò nonostante, mi ha rilevato quanta paura ha Catalina di una tua possibile vendetta.
-
-[AS2_A]
-~w~Abbiamo sottovalutato i piani di Catalina per lo SPANK.
-
-[AS2_B]
-~w~È ben più avanti dei Yardie nelle vendite per strada.
-
-[AS2_D]
-~w~Sembra spaccino lo SPANK attraverso i chioschi per strada.
-
-[AS2_1]
-~g~Distrutti tutti i chioschi a Portland!!!
-
-[AS2_2]
-~g~Distrutti tutti i chioschi a Staunton Island!!!
-
-[AS2_3]
-~g~Distrutti tutti i chioschi a Shoreside Vale!!!
-
-[AS2_4]
-~r~Il Cartello ha avvertito i loro spacciatori!
-
-[AS2_5]
-~g~Ci sono ancora dei chioschi a Shoreside Vale e a Staunton Island!
-
-[AS2_6]
-~g~Ci sono ancora dei chioschi a Shoreside Vale!
-
-[AS2_7]
-~g~Ci sono ancora dei chioschi a Staunton Island!
-
-[AS2_8]
-~g~Ci sono ancora dei chioschi a Portland!
-
-[AS2_9]
-~g~Ci sono ancora dei chioschi a Portland e a Shoreside Vale!
-
-[AS2_10]
-~g~Ci sono ancora dei chioschi a Portland e a Staunton Island!
-
-[AS2_12]
-~g~Gira per Liberty alla ricerca dei ~b~chioschi~g~!
-
-[AS3_A]
-~w~Dovremmo stringerlo ancora un po' o aspettare che diventi nero e cada?
-
-[AS3_B]
-~w~Diamogli uno sprone...
-
-[AS3_D]
-~w~Caro il mio truffatore!
-
-[AS3_E]
-~w~Mi stavo annoiando, così sono venuto a fare compagnia a Asuka.
-
-[AS3_1]
-~g~Trova una ~r~barca~g~ e raggiungi la ~b~boa segnalatrice~g~!
-
-[AS3_3]
-~g~Attendi fino a quando l'~y~aeroplano~g~ non inizia l'atterraggio!
-
-[AS3_5]
-~g~Raccogli il carico!
-
-[AS3_4]
-~g~Usa un lanciamissili per abbattere l'~g~aeroplano~g~!!!
-
-[AS3_2]
-~b~Raggiungi la boa di segnalazione della pista! ~y~L'aereo sta per atterrare!
-
-[AS3_6]
-~g~~1~ SU 8
-
-[KM1]
-'LA FUGA DI KANBU'
-
-[KM3]
-'STRONCA IL PATTO'
-
-[KM4]
-'SHIMA'
-
-[KM5]
-'VENDETTA'
-
-[KM1_A]
-Mia sorella mi ha parlato bene di te,
-
-[KM1_E]
-anche se credo ancora che voi gaijin siete tutti quanti deludenti.
-
-[KM1_B]
-Forse mi potresti aiutare a risolvere una situazione che si sta rilevando svantaggiosa.
-
-[KM1_F]
-Chiaramente il fallimento ha le sue conseguenze.
-
-[KM1_C]
-Un Kambu della Yakuza è tenuto in custodia per essere processato.
-
-[KM1_G]
-È un elemento importante della famiglia.
-
-[KM1_H]
-Liberalo e portalo al dojo a Bedford Point.
-
-[KM1_D]
-Grazie per la tua azione altruista. Se avrai mai bisogno di aiuto, il dojo sarà onorato di fornirti due uomini pronti ad affiancarti.
-
-[KM1_1]
-~g~Ruba una macchina della polizia!
-
-[KM1_2]
-Installa una bomba sulla macchina!
-
-[KM1_3]
-~g~Raggiungi il dojo della Yakuza.
-
-[KM1_5]
-~g~Adesso raggiungi la stazione di polizia.
-
-[KM1_6]
-Installa una bomba sulla macchina!
-
-[KM1_7]
-~g~Solo mezzi della polizia autorizzati!
-
-[KM1_9]
-~r~Non hai utilizzato un'auto esplosiva per distruggere il muro!
-
-[KM1_10]
-~r~Il Kandu della Yakuza è morto - insieme al tuo onore!
-
-[KM1_11]
-~r~Hai attirato la sventura su di te!
-
-[KM2_A]
-Non è consigliabile sottovalutare l'importanza dell'etichetta in questo ambiente.
-
-[KM2_B]
-Un uomo mi ha fatto una volta un favore e io non ho avuto l'opportunità di ricambiare la sua gentilezza.
-
-[KM2_C]
-La persona in questione ha la passione delle automobili e mi ha richiesto alcuni modelli per la sua collezione.
-
-[KM2_F]
-Il mio onore lo richiede.
-
-[KM2_2]
-~g~Macchine consegnate.
-
-[KM3_A]
-Quando i problemi insorgono, lo stolto mostra la schiena mentre il saggio si prepara ad affrontarli.
-
-[KM3_B]
-Il Cartello Colombiano ha ignorato ripetutamente le nostre richieste di non interferire con i nostri interessi a Liberty.
-
-[KM3_C]
-Adesso stanno negoziando con i Giamaicani per nel tentativo di umiliarci ulteriormente.
-
-[KM3_D]
-Stanno completando un accordo in città.
-
-[KM3_F]
-Prendi uno dei miei uomini, ruba una macchina degli Yardie e vai a porgere i miei saluti ai Colombiani.
-
-[KM3_E]
-Il nostro onore richiede che nessuno di loro sopravviva.
-
-[KM3_2]
-~g~Vai a prendere il tuo contatto.
-
-[KM3_3]
-~g~L'incontro si svolge nel parcheggio dell'ospedale a Rockford!
-
-[KM3_4]
-~r~Sono fuggiti!
-
-[KM3_6]
-~g~Uccidili, uccidili tutti quanti!
-
-[KM3_8]
-~g~Hai bisogno di una macchia degli Yardie per completare questa missione!
-
-[KM3_9]
-~r~Uno dei Colombiani è morto: l'accordo è saltato.
-
-[KM3_10]
-~r~Il contatto è morto!
-
-[KM4_A]
-Per essere veramente forte, non devi mai mostrare debolezze.
-
-[KM4_C]
-Vai e raccogli immediatamente i soldi per farli riciclare dal Casinò.
-
-[KM4_1]
-Non ti posso pagare e non lo fare neanche se potessi!
-
-[KM4_9]
-Alcuni delinquenti da strapazzo mi hanno appena rapinato! Hanno preso tutto quanto!
-
-[KM4_2]
-La vostra protezione è nulla.
-
-[KM4_10]
-E tu saresti della Yakuza? Con quella faccia?
-
-[KM4_3]
-Non è per questo che vi pago; se volevo essere protetto così bene mi affidavo alla polizia.
-
-[KM4_4]
-~g~Punisci la gang responsabile del furto dei ~b~soldi~g~!
-
-[KM4_7]
-~r~Il negoziante ha respirato per l'ultima volta!
-
-[KM4_5]
-Donald Love vorrebbe che tu passassi a trovarlo nel suo giardino.
-
-[KM4_6]
-Ci sono soldi dappertutto!
-
-[KM4_8]
-~g~Valigetta raccolta!
-
-[KM5_A]
-TU! Che piacevole coincidenza vedere il tuo sporco muso proprio adesso!
-
-[KM5_B]
-Sembrerebbe che i tuoi vani tentativi di dissuadere i Giamaicani
-
-[KM5_B1]
-a collaborare con il Cartello siano miseramente falliti!
-
-[KM5_C]
-Gli spacciatori Yardie stanno vendendo lo SPANK per ogni strada come se si trattasse di hotdog!
-
-[KM5_D]
-I maiali del Cartello stanno ridendoci dietro!
-
-[KM5_E]
-Ti darò un'ultima possibilità per provarmi che la fiducia a te data da mia sorella non era del tutto infondata.
-
-[KM5_F]
-Abbatti tutti i nostri avversari e lava il tuo onore nel loro sangue!!!
-
-[KM5_3]
-~r~Hai fallito nell'eliminare almeno ~1~ Yardie.
-
-[KM5_4]
-~g~Congratulazioni, hai eliminato ~1~ Yardie.
-
-[KM5_5]
-~g~Congratulazioni, hai eliminato ~1~ Yardie. BONUS ~1~$
-
-[RM1]
-'FAI TACERE L'UCCELLINO'
-
-[RM3]
-'ELIMINA LE PROVE'
-
-[RM4]
-'FUORI A PESCARE'
-
-[RM5]
-'STRONCA L'INFILTRATO'
-
-[RM1_D]
-Si trova sotto protezione in un palazzo della sicurezza testimoni. Il suo appartamento è dietro al parcheggio.
-
-[RM1_E]
-Dai fuoco al palazzo per farlo uscire allo scoperto e fai in modo che non parli mai più.
-
-[RM1_1]
-~g~Controlla l'appartamento della sicurezza testimoni.
-
-[RM1_2]
-~g~Elimina McAffrey!
-
-[RM2_A1]
-Ehi ragazzo, da questa parte!
-
-[RM2_A]
-Un mio vecchio amico ha uno spaccio d'armi a Rockford.
-
-[RM2_D]
-Ha bisogno di una mano ed è pronto a farti uno scontro sui migliori armamenti in circolazione.
-
-[RM2_E]
-Ray ha appena chiamato... non credevo però che saresti venuto da solo.
-
-[RM2_F]
-Bene, tre pistole sono meglio di una: prendete ciò che vi serve.
-
-[RM2_G]
-~g~Vai a parlare con Phil!
-
-[RM2_H]
-~r~Phil è stato ucciso!!!
-
-[RM2_L]
-Ehi! Se avessi avuto te come compagno in Nicaragua, probabilmente avrei ancora il braccio.
-
-[RM2_N]
-Lascia qua il bottino e vattene: mi occuperò io dei poliziotti.
-
-[RM3_D]
-Le prove sono trasportate da un veicolo attraverso la città.
-
-[RM3_E]
-Dovrai speronare quella macchina e raccogliere ogni prova che lascerà cadere.
-
-[RM3_F]
-Quando le avrai raccolte tutte, lasciale in macchina e dalle fuoco.
-
-[RM3_G]
-Sono sicuro che non avrai problemi a gestire la faccenda.
-
-[RM3_1]
-~g~Lascia le prove in macchina e dalle fuoco.
-
-[RM3_4]
-~g~L'accusa ha fatto cadere delle prove!
-
-[RM3_6]
-~r~Le foro saranno sparse per tutta Liberty!
-
-[RM3_7]
-~g~Adesso dai fuco alla macchina!
-
-[RM4_A]
-Inizio a pensare che il mio socio sia una talpa.
-
-[RM4_C]
-Esce fuori a pescare sulla sua imbarcazione quasi tutte le notti vicino al faro di Portland.
-
-[RM4_D]
-Ruba una lancia della polizia e manda a fondo i suoi piani doppiogiochisti!
-
-[RM4_1]
-~g~Ruba una lancia della polizia.
-
-[RM4_2]
-~g~Raggiungi il faro e affonda il socio di Ray!
-
-[RM5_A]
-Fottuto inutile!
-
-[RM5_A1]
-Hai combinato un vero casino! Sono con il culo scoperto perché non sei neanche capace di ammazzare una mosca.
-
-[RM5_B]
-Ti ho pagato profumatamente per eliminare il testimone ed è ancora vivo!
-
-[RM5_B1]
-E oggi deve fare una deposizione ai federali!
-
-[RM5_C]
-Sta per essere trasferito dall'ospedale Carson fino a Rockford.
-
-[RM5_D]
-Se canta sono fregato...
-
-[RM5_E]
-per cui vai ed esegui il lavoro per cui sei stato pagato!
-
-[RM5_1]
-~g~Intercetta l'ambulanza.
-
-[RM5_2]
-~g~Sei stato individuato!!!
-
-[RM5_3]
-~g~Era un diversivo!
-
-[RM5_4]
-~g~I proiettili non scalfiranno la blindatura!!!
-
-[RM5_5]
-~g~La blindatura è ignifuga!!!
-
-[RM5_7]
-~r~Il testimone è arrivato a destinazione!!!
-
-[RM5_8]
-~g~Il testimone è affogato!!!
-
-[LOVE2]
-'SPAZZA VIA WAKA-GASHIRA'
-
-[LOVE3]
-'UNA GOCCIA NELL'OCEANO'
-
-[LOVE1_A]
-Prima di tutto grazie per aver risolto il problema personale...
-
-[LOVE1_F]
-La gente crede a tutto in questi giorni.
-
-[LOVE1_D]
-Stanno cercando di estorcermi altri fondi, ma a me non piace chi ritratta all'ultimo minuto.
-
-[LOVE1_E]
-Un patto è un patto, per cui non gli sgancerò neppure un altro penny.
-
-[LOVE1_G]
-Vai a salvare il mio amico: fai tutto ciò che si rivelerà necessario.
-
-[LOVE1_2]
-~g~Salva il vecchietto orientale.
-
-[LOVE1_3]
-~g~Riporta il vecchietto orientale all'edificio di Donald Love.
-
-[LOVE1_4]
-~g~Il vecchietto orientale deve trovarsi in uno dei garage...
-
-[LOVE1_6]
-~r~Le interiora del vecchietto orientale sono sparse per tutta la strada!
-
-[LOVE1_7]
-~g~Il cancello verrà aperto solo per un'auto dei Colombiani.
-
-[LOVE2_A]
-Niente abbassa i prezzi degli immobili quanto una bella guerra fra gang...
-
-[LOVE2_B]
-tranne forse un'epidemia di peste... ma potrebbe non essere la soluzione migliore in questo caso.
-
-[LOVE2_C]
-È evidente chi la Yakuza e i Colombiani non sono amici per la pelle.
-
-[LOVE2_D]
-Perché non investire in questa opportunità?
-
-[LOVE2_E]
-Voglio che tu uccida il Waka-Gashira della Yakuza, Kenji Kasen.
-
-[LOVE2_F]
-Kenji partecipa a un incontro al parcheggio all'ultimo piano di un palazzo a Newport.
-
-[LOVE2_G]
-Recupera una macchina del Cartello ed eliminalo!
-
-[LOVE2_H]
-La Yakuza deve dare la colpa al Cartello per questa dichiarazione di guerra.
-
-[LOVE2_1]
-~g~Raggiungi Fort Staunton e ruba una macchina dei Colombiani!
-
-[LOVE2_2]
-~g~Raggiungi il ~p~palazzo a Newport~g~ ed elimina Kenji!
-
-[LOVE2_3]
-~r~Se procedi con una macchina non del Cartello, verrai identificato!!!
-
-[LOVE2_4]
-~r~Gli uomini della Yakuza ti hanno identificato!!!
-
-[LOVE2_6]
-~r~Hai ucciso tutti i testimoni!!!
-
-[LOVE3_A]
-In questi giorni di ipocrisia globale, alcune piacevoli comodità potrebbero essere difficili da importare.
-
-[LOVE3_C]
-Farò depositare alcuni pacchi in mare.
-
-[LOVE3_D]
-Assicurati di raccoglierli prima che qualcun altro lo faccia.
-
-[LOVE3_1]
-~g~Recupera un'~r~imbarcazione~g~ e insegui l'~y~aeroplano~g~!
-
-[LOVE4]
-'GRAND THEFT AERO'
-
-[LOVE5]
-'SERVIZIO DI SCORTA'
-
-[LOVE4_A]
-Grazie per aver recuperato i pacchi, ma si trattava solo di un diversivo.
-
-[LOVE4_B]
-Mi dispiace, ma sono gli inconvenienti del mestiere.
-
-[LOVE4_C]
-Il mio vero obiettivo era nascosto all'interno dell'aereo.
-
-[LOVE4_F]
-Ho corrotto gli ufficiali.
-
-[LOVE4_1]
-~r~Il Cartello Colombiano è in zona!!!
-
-[LOVE4_2]
-~g~Il pacco è scomparso! Scova i Colombiani e recuperalo!
-
-[LOVE4_3]
-~g~Panlantic Construction...?
-
-[LOVE4_5]
-~g~Il pacco dovrebbe essere a bordo dell'aereo...
-
-[LOVE4_6]
-~g~Prendi l'ascensore fino alla cima della torre!
-
-[LOVE5_B]
-Il mio amico orientale ha bisogno di una scorta mentre porta la mia ultima acquisizione a far autenticare.
-
-[LOVE5_1]
-~g~Procedi!
-
-[LOVE5_2]
-~g~Avrai bisogno di una macchina!
-
-[LOVE5_3]
-~g~Vai avanti a esplorare l'uscita dal sottopassaggio!
-
-[LOVE5_4]
-~r~Proteggi il camion!
-
-[RM6]
-'RICERCATO'
-
-[RM6_A]
-Non sei stato seguito? Bene.
-
-[RM6_B]
-Adesso basta, sono nei guai fino alla gola e sto iniziando a sprofondare!
-
-[RM6_D]
-Sono ricercato, me la batto.
-
-[RM6_E]
-Portami al mio volo all'aeroporto e non te ne pentirai!
-
-[RM6_666]
-Prenditi cura della mia Patriot antiproiettile. Ci vediamo a Miami! Ray
-
-[CAT1]
-'RISCATTO'
-
-[CAT2]
-'LO SCAMBIO'
-
-[CAT1_A]
-Ho la tua cara Maria. Non credo tu voglia che la sua faccia finisca come una polpetta per cani, vero?
-
-[CAT2_F]
-Mi sono rotta un'unghia e i miei capelli sono un disastro. Ma ci puoi credere? Mi è costato 50 dollari!
-
-[CAT2_G]
-Ero così spaventata, ma mi sono detta: adesso sei una signorina.
-
-[CAT2_H]
-Oh, ci divertiremo un mondo! Mia sorella mi ha detto che verrà a stare con me insieme ai suoi due figli
-
-[CAT2_I]
-poiché suo marito continua a tradirla a ogni occasione...
-
-[CAT1_C]
-XXXX
-
-[CAT1_D]
-XXXX
-
-[CAT1_E]
-XXXX
-
-[CAT1_F]
-Raggiungi Catalina prima dello scadere del tempo!
-
-[CAT1_G]
-XXXX
-
-[CAT1_H]
-XXXX
-
-[CAT1_I]
-XXXX
-
-[CAT1_J]
-XXXX
-
-[CAT1_K]
-XXXX
-
-[CAT1_L]
-XXXX
-
-[AS4_1]
-XXXX
-
-[CAT_MON]
-~g~Non hai abbastanza soldi. Ti servono 500.000$.
-
-[BITCH_D]
-~g~Maria è morta!
-
-[WEATHER]
-TEMPO AVVERSO
-
-[WEATHE2]
-TEMPO NORMALE
-
-[8001]
-Hai fallito miseramente!!!
-
-[1000]
-SEI MORTO
-
-[1001]
-SEI MORTO
-
-[1002]
-SEI MORTO
-
-[1003]
-SEI MORTO
-
-[1004]
-SEI MORTO
-
-[1005]
-SEI STATO CATTURATO
-
-[1006]
-SEI STATO CATTURATO
-
-[1007]
-SEI STATO CATTURATO
-
-[1008]
-SEI STATO CATTURATO
-
-[1009]
-SEI STATO CATTURATO
-
-[GA_4]
-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_7]
-Arma la bomba con il ~h~tasto ~k~~PED_FIREWEAPON~~w~: esploderà non appena qualcuno cercherà di avviarla.
-
-[GA_8]
-Usa il detonatore per attivare la bomba.
-
-[GA_9]
-Hai raccolto ~1~ su 10 macchine speciali
-
-[GA_10]
-Non male. Eccoti ~1~$
-
-[GA_11]
-Ne abbiamo già una. A noi non serve!
-
-[GA_12]
-Bomba innescata
-
-[GA_13]
-Un furto da manuale. Completa la lista e ci sarà un bonus per te.
-
-[GA_14]
-Hai portato tutte le macchine. BENE! Eccoti un riconoscimento...
-
-[GA_15]
-Spero che ti piaccia il nuovo colore.
-
-[GA_16]
-La riverniciatura non è necessaria.
-
-[GA_19]
-Non siamo interessati a questo modello.
-
-[GA_20]
-Di questo modello ne abbiamo in abbondanza. Mi dispiace, non siamo interessati.
-
-[CR_1]
-La gru non può alzare questo veicolo.
-
-[PU_MONY]
-Non hai abbastanza soldi.
-
-[CO_ALL]
-Li hai presi tutti. Eccoti un piccolo extra...
-
-[PAUSED]
-PAUSA
-
-[HEALTH1]
-Via di qui! Sei in perfetta forma.
-
-[HEALTH2]
-L'assistenza medica costa.
-
-[HEALTH3]
-Ti rimetterò in sesto.
-
-[HEALTH4]
-Fanno 250$.
-
-[FEB_STA]
-Statistiche
-
-[FEB_BRI]
-Briefing
-
-[FEB_CON]
-Comandi
-
-[FEB_AUD]
-Audio
-
-[FEB_DIS]
-Video
-
-[FEB_LAN]
-Lingua
-
-[FEP_STA]
-STATISTICHE
-
-[FEP_BRI]
-BRIEFING
-
-[FEP_CON]
-COMANDI
-
-[FEP_AUD]
-AUDIO
-
-[FEP_DIS]
-VIDEO
-
-[FEP_LAN]
-LINGUA
-
-[FEF_ST1]
-Chi è il vero cattivo?
-
-[FEF_ST2]
-Che casino hai scatenato?
-
-[FEF_BR1]
-Hai perso il filo?
-
-[FEF_CO1]
-Hai bisogno di altri controlli?
-
-[FEF_CO2]
-Scegli la configurazione più adatta al tuo stile di gioco
-
-[FEF_SA1]
-Pensa alla tua posizione, salvala!
-
-[FEF_SA2]
-Salva e carica le partite
-
-[FEF_AU1]
-Pompa il volume!
-
-[FEF_AU2]
-Scegli la stazione radio e gli effetti
-
-[FEF_DI1]
-Cambia il gioco!
-
-[FEF_DI2]
-Personalizza il gioco per la tua TV
-
-[FEF_LA1]
-What you talking about willis? Che cavolo stai dicendo Willis?
-
-[FEF_LA2]
-Scegli il tuo gergo preferito
-
-[FEB_PMB]
-Brifing di missione precedenti:
-
-[FEC_NA]
-NA
-
-[FEC_CWL]
-Scorri armi a sinistra
-
-[FEC_CWR]
-Scorri armi a destra
-
-[FEC_LOF]
-Guarda avanti
-
-[FEC_TAR]
-Bersaglio
-
-[FEC_MOV]
-Movimento
-
-[FEC_CAM]
-Modalità telecamera
-
-[FEC_PAU]
-Pausa
-
-[FEC_ENV]
-Sali sul veicolo
-
-[FEC_JUM]
-Salta
-
-[FEC_ATT]
-Attacca o fuoco con arma
-
-[FEC_RUN]
-Corri
-
-[FEC_FPC]
-Visuale in prima persona
-
-[FEC_LL]
-Guarda a sinistra
-
-[FEC_LB1]
-Guarda
-
-[FEC_LB2]
-indietro
-
-[FEC_LB]
-Guarda indietro
-
-[FEC_LR]
-Guarda a destra
-
-[FEC_HOR]
-Clacson
-
-[FEC_VES]
-Comandi veicolo
-
-[FEC_RSC]
-Cambia stazione radio
-
-[FEC_BRA]
-Freno o retromarcia
-
-[FEC_HAB]
-Freno a mano
-
-[FEC_CAW]
-Arma vettura
-
-[FEC_ACC]
-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:
-
-[FEA_ST]
-Stereo
-
-[FEA_MNO]
-Mono
-
-[FEA_NON]
-Nessuna
-
-[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]
-CHATTERBOX 109
-
-[FED_DBG]
-Menu Debug
-
-[FED_RID]
-Reload IDE
-
-[FED_RIP]
-Reload 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]
-Debug Streaming Requests
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FEM_MCM]
-Memory Card Menu
-
-[FEM_RMC]
-Registra MEMORY CARD uno
-
-[FEM_TFM]
-Test Format MemCard One
-
-[FEM_TUM]
-Test UnFormat MemCard One
-
-[FEM_CRD]
-Create Root Dir
-
-[FEM_CLI]
-Crea e carica icone
-
-[FEM_FFF]
-Riempi il primo file con fuffa
-
-[FEM_SOG]
-Salva solo la partita
-
-[FEM_CES]
-Verifica ogni salvataggio 0kB4
-
-[FEM_STG]
-Salva la partita
-
-[FEM_STS]
-Salva la partita con il nome GTA3
-
-[FEM_CPD]
-Crea una cartella mag protetta
-
-[FEM_MC2]
-Memory Card Menu 2
-
-[FEM_TS]
-Prova salvataggio:
-
-[FEM_TL]
-Prova caricamento:
-
-[FEM_TD]
-Prova eliminazione:
-
-[PL_STAT]
-Statistiche giocatore
-
-[PE_WAST]
-Persone massacrate
-
-[PE_WSOT]
-Persone massacrate da altri
-
-[CAR_EXP]
-Macchine esplose
-
-[TM_BUST]
-Tempi battuti
-
-[M_WASTE]
-Uomini civili massacrati
-
-[F_WASTE]
-Donne civili massacrate
-
-[PIG_WST]
-Poliziotti massacrati
-
-[GNG_WST]
-Membri delle gang massacrati
-
-[MED_WST]
-Medici massacrati
-
-[FIRE_WS]
-Pompieri massacrati
-
-[DED_CRI]
-Criminali massacrati
-
-[DED_DED]
-Scrocconi massacrati
-
-[DED_HOK]
-Prostitute massacrate
-
-[HEL_DST]
-Elicotteri distrutti
-
-[PER_COM]
-Percentuale completata
-
-[KGS_EXP]
-Kg di esplosivi utilizzati
-
-[ACCURA]
-Accuratezza
-
-[ELBURRO]
-Miglior tempo di corsa in sec
-
-[CAR_CRU]
-Macchine distrutte
-
-[HED_EX]
-Teste esplose
-
-[TM_DED]
-Visite in ospedale
-
-[DAYSPS]
-Giorni trascorsi nel gioco
-
-[MMRAIN]
-Pioggia caduta in mm
-
-[MXCARD]
-Distanza max salto FOLLE (ft)
-
-[MXCARJ]
-Altezza max salto FOLLE (ft)
-
-[MXCARDM]
-Distanza max salto FOLLE (m)
-
-[MXCARJM]
-Altezza max salto FOLLE (m)
-
-[MXFLIP]
-Numero max ribaltamenti FOLLI in aria
-
-[MXJUMP]
-Numero max rotazioni FOLLI in aria
-
-[BSTSTU]
-Migliore acrobazia FOLLE:
-
-[INSTUN]
-Acrobazia folle
-
-[PRINST]
-Acrobazia folle perfetta
-
-[DBINST]
-Doppia acrobazia folle
-
-[DBPINS]
-Doppia acrobazia folle perfetta
-
-[TRINST]
-Tripla acrobazia folle
-
-[PRTRST]
-Tripla acrobazia folle perfetta
-
-[QUINST]
-Quadrupla acrobazia folle
-
-[PQUINS]
-Quadrupla acrobazia folle perfetta
-
-[NOSTUC]
-Nessuna acrobazia FOLLE effettuata
-
-[NOUNIF]
-Acrobazie uniche effettuate
-
-[NOUNGM]
-Acrobazie uniche complessive
-
-[NMISON]
-Missioni provate
-
-[NMMISP]
-Missioni superate
-
-[PASDRO]
-Passeggeri scaricati
-
-[MONTAX]
-Soldi guadagnati in taxi
-
-[DAYPLC]
-Spesa giornaliera polizia
-
-[CRIMRA]
-Livello criminalità:
-
-[GMSTOR]
-Negozio dei giochi
-
-[PREBRF]
-Briefing precedenti
-
-[CNTLS]
-Comandi
-
-[MUSMEN]
-Musica-FX
-
-[GAMSET]
-Impostazioni
-
-[LANGUA]
-Lingua
-
-[DSPLAY]
-Video
-
-[DEBUGM]
-Menu di debug
-
-[QUITOP]
-Esci dalle opzioni
-
-[CONTRL]
-Configurazione comandi
-
-[SET1EN]
-Configurazione 1. Abilitata.
-
-[SET1]
-Configurazione 1
-
-[SET2EN]
-Configurazione 2. Abilitata.
-
-[SET2]
-Configurazione 2
-
-[SET3EN]
-Configurazione 3. Abilitata.
-
-[SET3]
-Configurazione 3
-
-[SET4EN]
-Configurazione 4. Abilitata.
-
-[SET4]
-Configurazione 4
-
-[GOBACK]
-Indietro
-
-[SOUND]
-SONORO
-
-[MUSVOL]
-Volume musica
-
-[SFXVOL]
-Volume FX
-
-[SCROPT]
-OPZIONI SCHERMO
-
-[CTRSCR]
-Centra schermo
-
-[SCRFOR]
-Formato schermo
-
-[GMSVLQ]
-SALVA-CARICA-ESCI
-
-[GMREST]
-Ricomincia partita
-
-[NOGMSV]
-Puoi salvare solo al tuo nascondiglio.
-
-[DLFILE]
-Elimina i file di Grand Theft Auto III
-
-[CHFILE]
-SCEGLI IL FILE DA CARICARE
-
-[CHCDLD]
-Choose Card to Load From
-
-[CDUNFR]
-Card is unformatted.
-
-[CHFIDL]
-SCEGLI IL FILE DA CANCELLARE
-
-[SVCONF]
-SALVA CONFERMA
-
-[SVFNAM]
-Il nome del tuo salvataggio è
-
-[SAVEDN]
-Errore. Salvataggio non completato.
-
-[LANGSL]
-SCELTA LINGUA
-
-[ENGLIS]
-Inglese
-
-[GERMAN]
-Tedesco
-
-[ITALIA]
-Italiano
-
-[FRENCH]
-Francese
-
-[SPAIN]
-Spagnolo
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[PARSHP]
-Parse Heap
-
-[DBGFON]
-CTheScripts::DbgFlag On
-
-[DBFOFF]
-CTheScripts::DbgFlag Off
-
-[BGWHON]
-Big White Debug Light Switched On
-
-[BGWOFF]
-Big White Debug Light Switched Off
-
-[DSTRON]
-Debug Streaming Requests On
-
-[DSTROFF]
-Debug Streaming Requests Off
-
-[PDRGON]
-ShowPedRoadGroups On
-
-[PRGOFF]
-ShowPedRoadGroups Off
-
-[CRRGON]
-ShowCarRoadGroups On
-
-[CRGOFF]
-ShowCarRoadGroups Off
-
-[CLZOON]
-Show Cull Zones On
-
-[CLZOOF]
-Show Cull Zones Off
-
-[SHPLON]
-gbShowCollisionPolys On
-
-[SHPLOF]
-gbShowCollisionPolys Off
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[FORMM1]
-FormatMemCard 1 (teststuff)
-
-[UNFRM1]
-UnFormatMemCard 1 (teststuff)
-
-[GORLEV]
-Livello violenza
-
-[SICASS]
-Stupro
-
-[SICSIC]
-Stupratore
-
-[SCASSL]
-Stupro selezionato
-
-[SCSCSL]
-Stupratore selezionato
-
-[PRVMEN]
-Briefing di missione precedente
-
-[DOSVGM]
-Vuoi salvare la partita?
-
-[FORMEN]
-Format Menu
-
-[MEMTST]
-MemoryCardTest screen
-
-[REGCAR]
-Register MemoryCard One
-
-[TEFONE]
-Test Format MemCard One
-
-[TEUFON]
-Test UnFormat MemCard One
-
-[CRROOT]
-CreaDirRoot
-
-[CRLDIC]
-Crea e carica icone
-
-[FLFSGF]
-Riempi il primo file con fuffa
-
-[PUSAVE]
-Salva solo il gioco
-
-[CHEVOK]
-VerificaOgniSalvataggioOKB4
-
-[SVGMON]
-SalvaIlGioco
-
-[CNTSAV]
-Impossibile salvare il gioco, sei in missione.
-
-[CNCSAV]
-Impossibile salvare il gioco, sei in macchina.
-
-[CRMGSV]
-Crea cartella magazine protetta
-
-[MGSVCN]
-Cartella Magazine creata
-
-[MGSVNC]
-Cartella Magazine non creata
-
-[YES]
-Sì
-
-[NO]
-No
-
-[X]
-x
-
-[LAST]
-Ultimo messaggio.
-
-[FEDS_XB]
-Selezione
-
-[FEDS_ST]
-Tasto START - RIPRENDI
-
-[FEST_OO]
-su
-
-[FEC_TUC]
-Torretta di controllo
-
-[FEC_SM3]
-Attivazione missione speciale (tasto R3)
-
-[FEC_RS3]
-Stazioni radio (tasto L3)
-
-[FEC_HO3]
-Clacson (tasto L3)
-
-[DIAB1]
-'TURISMO'
-
-[DIAB2]
-'IO GRIDO, TU GRIDI'
-
-[DIAB3]
-'BATTESIMO DEL FUOCO'
-
-[DIAB4]
-'GROSSO E ARTERIOSO'
-
-[DIAB1_A]
-El Burro ti vuole offrire un'opportunità. Vai alla cabina telefonica di Hepburn Heights se vuoi saperne di più.
-
-[DIAB1_C]
-Sei un pilota provetto. Ripassa per la cabina telefonica, 'El Burro' potrebbe avere altro lavoro per te.
-
-[DIAB1_1]
-~g~3..2..1.. VIA VIA VIA!
-
-[DIAB1_4]
-~g~Procurati un'auto veloce e vai alla griglia di partenza.
-
-[DIAB1_3]
-~r~Non riusciresti a vincere neanche una lotteria, FALLITO!
-
-[DIAB1_2]
-~g~Congratulazioni, hai vinto con l'incredibile tempo di ~1~ secondi.
-
-[FIRST]
-~g~Primo
-
-[SECOND]
-~g~Secondo
-
-[THIRD]
-~g~Terzo
-
-[FOURTH]
-~g~Quarto
-
-[DIAB2_1]
-~g~Prendi la valigia ad Harwood.
-
-[DIAB2_2]
-~g~Trova un furgone dei gelati.
-
-[DIAB2_3]
-~g~Parcheggia il furgone dei gelati al molo atlantico.
-
-[DIAB2_4]
-~g~Premi il ~w~tasto ~k~~VEHICLE_HORN~ ~g~per attivare il campanello.
-
-[DIAB2_6]
-~g~Premi il ~w~tasto ~k~~VEHICLE_HORN~ ~g~per attivare il campanello.
-
-[DIAB2_7]
-~g~Premi il ~w~tasto ~k~~VEHICLE_HORN~ ~g~per attivare il campanello.
-
-[DIAB2_5]
-~g~Esci dal furgone dei gelati e usa il telecomando per farlo esplodere.
-
-[YD1]
-'BLING-BLING SCRAMBLE'
-
-[YD2]
-'UZI RIDER'
-
-[YD3]
-'CORSA TRA GANGSTER'
-
-[YD4]
-'VENGA IL TUO REGNO'
-
-[YD_P]
-King Courtney vuole parlarti. Vai alla cabina telefonica ad Aspatria!
-
-[YD1_A]
-~w~Sono King Courtney.
-
-[YD1_A1]
-~w~Alla mia cricca Yardie servirebbe un buon autista e tu hai un'ottima reputazione.
-
-[YD1_B]
-~w~Vai in macchina alla discarica dalla parte opposta dello stadio e aspetta gli altri aspiranti.
-
-[YD1_C]
-~w~Ho uomini di guardia in postazioni sparse per tutta Staunton.
-
-[YD1_D]
-~w~Il primo pilota che raggiunge una postazione prende $1000, e cosi via fino alla tappa successiva.
-
-[YD1_D1]
-~w~Se raggiungi per primo più postazioni degli altri piloti, potrei avere del lavoro per te.
-
-[YD1_E]
-~g~Preparati alla gara!
-
-[YD1_F]
-~g~Hai anticipato la partenza; mi piace il tuo stile!
-
-[YD1_G]
-~r~È una GARA AUTOMOBILISTICA. Ti serve un'AUTO, idiota!
-
-[YD1GO]
-~g~VIA!
-
-[YD1_1]
-~r~1
-
-[YD1_2]
-~r~2
-
-[YD1_3]
-~r~3
-
-[YD1_BON]
-$1000!
-
-[Y1_1ST]
-~g~Sei arrivato primo con ~1~ postazioni!
-
-[Y1_2ND]
-~y~Sei arrivato secondo con ~1~ postazioni. ~y~Non male, ma non sei il migliore!
-
-[Y1_3RD]
-~r~Sei arrivato terzo con ~1~ postazioni. ~r~Credevo avessi detto di essere in gamba!
-
-[Y1_LAST]
-~r~Sei arrivato ultimo! ~r~Mi hai fatto perdere tempo, IDIOTA!
-
-[Y1_J1ST]
-~y~Primo a pari merito con ~1~ postazioni. ~y~Bravo, ma devi essere il migliore per guidare per Queen Lizzy!
-
-[Y1_J2ND]
-~r~Secondo a pari merito con ~1~ postazioni. Guidi come una scimmia impazzita!
-
-[Y1JLAST]
-~r~Ultimo a pari merito! Sei più veloce con la lingua che con l'auto!
-
-[Y1_TEST]
-AUTO IN ACQUA!
-
-[YD2_A]
-~w~Devo vedere se sei in grado di eseguire certi lavoretti per me.
-
-[YD2_A1]
-~w~Vediamo se ci si può fidare di te.
-
-[YD2_B]
-~w~Due dei miei ragazzi saranno lì a momenti per accompagnarti in un giro:
-
-[YD2_B1]
-~w~vedremo se sei davvero chi dici di essere.
-
-[YD2_C]
-~w~Andiamo a fare un giro a Hepburn Heights: levaci di torno alcuni di quei luridi Diablo che mancano di rispetto a Queen Lizzy.
-
-[YD2_CC]
-~w~Prendi, ti serviranno 'i ferri del mestiere'.
-
-[YD2_D]
-~w~Dovrai guidare e sparare. Noi faremo in modo che tu non finisca al creatore.
-
-[YD2_E]
-~w~Comincia a guidare!
-
-[YD2_F]
-~r~Ci è scappato! Facciamo secco quel bastardo muso giallo!!!
-
-[YD2_G1]
-~w~Hepburn Heights... Facciamo fuori qualche lurido Diablo...
-
-[YD2_G2]
-~w~Ma ricorda: ~r~non pensare di uscire da quest'auto!
-
-[YD2_H]
-~w~OK, riportaci nel territorio di Yardie! VIA VIA VIA!!!
-
-[YD2_L]
-~w~Bel lavoro, Cecchino!
-
-[YD2_M]
-~r~Ha distrutto la mia auto! Fallo secco!
-
-[YD2_N]
-~w~Rimetti il culo in macchina!
-
-[YD3_A]
-Devi rubare alcune auto delle gang avversarie
-
-[YD3_A1]
-per poter colpire nel loro territorio.
-
-[YD3_B]
-Mi serve una Sentinel della Mafia,
-
-[YD3_B1]
-una Stinger della Yakuza e uno
-
-[YD3_B2]
-Stallion dei Diablo per poter attaccare qualunque gang di Liberty.
-
-[YD3_C]
-Parcheggiale nel garage a Newport e ricorda,
-
-[YD3_C1]
-se le distruggi sono inutilizzabili!
-
-[YD3_D]
-Etichetta testo aggiuntiva
-
-[YD3_E]
-~r~Hai già rubato un'auto dei Diablo!
-
-[YD3_F]
-~r~Hai già rubato un'auto della Mafia!
-
-[YD3_G]
-~r~Hai già rubato un'auto della Yakuza!
-
-[YD3_H]
-~g~Auto dei Diablo rubata!
-
-[YD3_I]
-~g~Auto della Mafia rubata!
-
-[YD3_J]
-~g~Auto della Yakuza rubata!
-
-[YD3_K]
-~r~L'auto è quasi un rottame! Falla riparare!
-
-[YD3_L]
-~g~Portala al ~p~garage!
-
-[YD3_M]
-~r~Hai cappottato l'auto! Procuratene un'altra!
-
-[YD4_A]
-Stammi a sentire!
-
-[YD4_A1]
-Arriva fino a Bedford Point.
-
-[YD4_A2]
-C'è della roba nascosta in una vecchia automobile che mi serve subito!
-
-[YD4_B]
-LETTERA: Ho saputo che ti sei dato da fare. Beh mi sono data da fare anch'io.
-
-[YD4_C]
-Credo sia ora che tu provi il vero potere dello 'SPANK'! Baci e abbracci, Catalina, con amore.
-
-[YD4_D]
-PS: MUORI CANE BASTARDO, MUORI!
-
-[YD4_1]
-Pazzi strafatti di SPANK!
-
-[YD4_2]
-Distruggi i camion di SPANK!
-
-[HM_1]
-'SOLDI E UZI'
-
-[HM_2]
-'STERMINATOR'
-
-[HM_3]
-'PRONTO A ESPLODERE'
-
-[HM_5]
-'RISSA'
-
-[HOOD1_A]
-Raggiungi il telefono pubblico dei giardini Wichita se vuoi parlare d'affari.
-
-[HM1_A]
-Ehi, sono D-Ice dei Red Jack!
-
-[HM1_C]
-Questi stronzetti scorrazzano per le strade con nient'altro che armi e SPANK nella testa.
-
-[HM1_3]
-~g~I 'Nine' controllano il territorio dei giardini Wichita.
-
-[HM2_3]
-Se colpisci i pneumatici, il maggiolino radiocomandato esploderà!
-
-[HM2_4]
-Se supera la portata massima, il maggiolino radiocomandato esploderà!
-
-[HM2_5]
-~r~Fuori dalla portata massima!
-
-[HM3_1]
-~g~Vai al garage, ma stai attento: se l'auto viene danneggiata troppo, salterà in aria!
-
-[HM3_2]
-~g~Riporta l'auto in ottime condizioni: nessun danno!
-
-[HM3_3]
-~g~Fai riparare l'auto!
-
-[HM4_D]
-~g~Prendi un veicolo!
-
-[HM4_E]
-TESTO NON PIÙ NECESSARIO
-
-[HM4_1]
-~g~Dirigiti nel posto dove il carico s'è rovesciato: dovrai raccogliere almeno 30 lingotti.
-
-[HM4_2]
-~g~Ricorda di raggiungere il garage e depositare il carico quando il veicolo diventa troppo pesante e lento.
-
-[HM5_3]
-~r~Dovevi usare solo una mazza da baseball!
-
-[HM5_4]
-~r~Il tuo intermediario è morto!
-
-[MEA1]
-'L'IMBROGLIONE'
-
-[MEA2]
-'I LADRI'
-
-[MEA3]
-'LA MOGLIE'
-
-[MEA4]
-'L'AMANTE'
-
-[MEAT1_A]
-Un amico mi ha detto che puoi risolvermi dei problemi. Vai alla cabina telefonica a Trenton se credi di essere la persona giusta.
-
-[MEA1_B3]
-~g~Devi incontrare il direttore della banca.
-
-[MEA1_B6]
-~g~Porta l'auto dal rottamatore per distruggere le prove: esci dall'auto e la gru la raccoglierà.
-
-[MEA1_1]
-~r~Il direttore della banca è morto!
-
-[MEA1_2]
-~r~Ti era stato detto di rottamare il veicolo!
-
-[MEA1_3]
-~g~Esci dalla macchina!
-
-[MEA1_4]
-~r~Ti sei dimenticato del direttore della banca!
-
-[MEA2_B3]
-~g~Vai a incontrare i ladri.
-
-[MEA2_B4]
-~g~Accompagnali alla fabbrica di cibo per cani Bitch'n' Dog.
-
-[MEA2_B6]
-~g~Fai riverniciare l'auto per eliminare ogni prova.
-
-[MEA2_1]
-~r~Ti era stato detto di far rottamare il veicolo!
-
-[MEA2_2]
-~r~Un ladro è morto!
-
-[MEA2_4]
-~r~Ti sei dimenticato un ladro!
-
-[MEA3_B3]
-~g~Vai a prelevare la signora Chonks.
-
-[MEA3_B6]
-~g~Prendi l'auto e scaricala in mare: questo cancellerà ogni prova.
-
-[MEA3_1]
-~r~La moglie è morta!
-
-[MEA3_2]
-~r~Dovevi scaricare il veicolo in mare!
-
-[MEA3_3]
-~r~Ti sei dimenticato di della moglie!
-
-[MEA4_B3]
-~g~Vai a prendere l'amante della moglie.
-
-[MEA4_B6]
-È davvero troppo tardi per farlo, Marty. Ti ho dato una chance, ma adesso prenderò io il controllo del tuo business...
-
-[MEA4_1]
-~r~Carlos è morto!
-
-[MEA4_3]
-~r~Ti sei dimenticato di Carlos lo strozzino!
-
-[LOOK_A]
-Tieni premuto il ~h~tasto ~k~~VEHICLE_LOOKLEFT~ ~w~o il ~h~tasto ~k~~VEHICLE_LOOKRIGHT~~w~ per guardare a ~h~sinistra~w~ o a ~h~destra~w~ mentre sei nel veicolo. Premi entrambi i tasti per guardare ~h~indietro~w~.
-
-[LOVE6_1]
-~g~Adesso attira gli sbirri lontano dai magazzini!
-
-[LOVE6_2]
-~r~Non sei riuscito ad attirare gli sbirri abbastanza lontano!
-
-[RM4_3]
-~r~Il socio di Ray è fuggito!
-
-[RM6_C]
-La CIA sembra interessata allo SPANK
-
-[RM6_C1]
-e non vogliono che interferiamo con il Cartello.
-
-[C_PASS]
-MINACCIA ELIMINATA!
-
-[CTUTOR]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Vigilante.
-
-[CTUTOR2]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Vigilante.
-
-[COPCART]
-~g~Hai ~1~ secondi per tornare a un mezzo della polizia prima che termini la missione.
-
-[C_FAIL]
-Missione Vigilante terminata!
-
-[C_CANC]
-~r~Missione Vigilante annullata!
-
-[C_ESCP]
-~r~Il sospetto è fuggito!
-
-[C_TIME]
-~r~È scaduto il tuo tempo come tutore della legge!
-
-[C_VIGIL]
-BONUS VIGILANTE!
-
-[A_FAIL2]
-~r~La tua scarsa sollecitudine è stata fatale al paziente!
-
-[A_FAIL3]
-~r~Il paziente è morto!
-
-[A_PASS]
-Salvato!
-
-[F_FAIL2]
-~r~Sei arrivato tardi!
-
-[A_COMP2]
-Non ti stancherai mai!
-
-[RM2_M]
-Se ti servono armi da fuoco, passa di qui e prendi ciò che ti serve dagli armadietti.
-
-[HEAL_A]
-La tua ~h~salute~w~ è indicata in color arancione in alto a destra sullo schermo.
-
-[YD1_CNT]
-~1~ su 15!
-
-[FM1_9]
-~g~Lì davanti c'è il party: fai scendere Maria all'ingresso.
-
-[FM1_Y]
-~w~Sai, non mi divertivo così tanto da una vita, e mi hai trattato proprio bene. Con molto rispetto.
-
-[FM1_AA]
-~w~Oh, devo andare. Spero di rivederti.
-
-[NOCONTE]
-Ricollega il controller analogico (DUALSHOCK#) o controller analogico (DUALSHOCK#2) all'ingresso controller 1 per continuare.
-
-[WRCONT]
-Il controller collegato all'ingresso controller 1 non è supportato. Grand Theft Auto III richiede un controller analogico (DUALSHOCK#) o (DUALSHOCK#2).
-
-[WRCONTE]
-Il controller collegato all'ingresso controller 1 non è supportato. Grand Theft Auto III richiede un controller analogico (DUALSHOCK#) o controller analogico (DUALSHOCK#2).
-
-[WRONGCD]
-Disco errato. Inserisci il disco corretto.
-
-[NOCD]
-Il vano cassetto del disco è vuoto. Inserisci il disco.
-
-[OPENCD]
-Il vano cassetto del disco è aperto. Chiudi il vano.
-
-[CDERROR]
-Errore di lettura del DVD Grand Theft Auto III.
-
-[RESTART]
-Avvio di una nuova partita
-
-[GA_3]
-Niente più sconti. $1000 per la riverniciatura!
-
-[GA_1]
-Wow! Non tocco niente di COSÌ caldo!
-
-[GA_1A]
-Torna quando non sarai così occupato...
-
-[S_PROM2]
-Nel garage qua accanto puoi parcheggiare un veicolo quando salvi la partita.
-
-[STOCK]
-scorte esaurite
-
-[FM1_O]
-~w~Credo si trovi alla stazione vicino al porto di Chinatown.
-
-[EBAL_B]
-Siamo arrivati, togliamoci dalla strada e cerchiamo di cambiarci d'abito!
-
-[EBAL_G]
-Questo è il club Luigi's. Passiamo dal retro attraverso la porta di servizio.
-
-[AM4_3]
-Tu devi essere il nuovo tuttofare di Asuka!
-
-[AM4_4]
-Hai i soldi? Tutto qui?
-
-[AM4_5]
-So cosa pensi, un altro sbirro corrotto.
-
-[AM4_6]
-Beh, il mondo è corrotto.
-
-[AM4_7]
-Solo perché ho perso dei partner, quegli idioti degli Affari Interni hanno cominciato a curiosare.
-
-[AM4_8]
-Immagino che sentano puzza di bruciato.
-
-[AM4_9]
-Beh, questa città è una grande fogna.
-
-[AM4_10]
-Mi servirà aiuto anche fuori dai sindacati.
-
-[AM4_11]
-Se sei interessato, sai dove trovarmi.
-
-[CAM_A]
-Premi il ~h~tasto ~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~ per cambiare le ~h~modalità di visuale ~w~quando sei a piedi o in un veicolo.
-
-[CAM_B]
-Premi il ~h~tasto direzionale in alto~w~ e ~h~in basso~w~ per cambiare le ~h~modalità di visuale ~w~quando sei a piedi o in un veicolo.
-
-[KM2_1]
-~g~Ripara l'auto, sarà come nuova.
-
-[LM3_6]
-Joey...
-
-[LM3_6A]
-Mi farai giocare ancora col tuo pistone?
-
-[LM3_9A]
-Potrebbe esserci del lavoro per te.
-
-[LM3_9B]
-OK?
-
-[AWAY2]
-~r~Sono scappati.
-
-[AWAY]
-~r~È scomparso nel nulla!
-
-[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_7B]
-Innescala col ~h~tasto ~k~~PED_FIREWEAPON~~w~. La bomba esploderà quando si tenterà di avviare il motore.
-
-[BAT1]
-~g~Prendi la mazza!
-
-[EBAL_O]
-Se andrà tutto liscio, forse potrei darti altro lavoro. Adesso fuori di qui!
-
-[HELP9_B]
-Premere il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~sparare~w~ col fucile di precisione.
-
-[HELP9_C]
-Premere il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per ~h~sparare~w~ col fucile di precisione.
-
-[JM6_8]
-~r~Hai perso tutti i rapinatori!
-
-[COLT_IN]
-La pistola è adesso disponibile da AmmuNation!
-
-[TAXI2]
-~r~Tempo scaduto!
-
-[TAXI3]
-~r~Il passeggero è fuggito terrorizzato!
-
-[TAXI7]
-~r~La tua auto è distrutta, falla riparare.
-
-[TAXI4]
-Tariffa completa!
-
-[TAXI5]
-BONUS VELOCITÀ!
-
-[TAXI6]
-Missione taxi terminata
-
-[FRANGO]
-~g~Salvatore vuole che tu aiuti prima Toni ad affrontare le Triadi!
-
-[PAGEB12]
-Tangente per la Polizia consegnata al nascondiglio
-
-[PAGEB13]
-Salute consegnata al nascondiglio
-
-[PAGEB14]
-Adrenalina consegnata al nascondiglio
-
-[KM1_4]
-~g~Ti serve un'auto della polizia per svolgere il lavoro!
-
-[CAT1_B]
-Porta 500.000$ alla Villa a Cedar Grove.
-
-[JM2_C]
-Ha un chiosco di spaghetti cinesi a China Town.
-
-[RM6_1]
-Eccoti la chiave di un deposito.
-
-[RM6_2]
-Troverai del denaro e alcune 'dotazioni' da utilizzare nei momenti difficili.
-
-[RM6_3]
-Ci vediamo.
-
-[FE_INIP]
-Inizializzazione e caricamento menu pausa... Un momento.
-
-[FESZ_CA]
-Annulla
-
-[FESZ_QU]
-Esci
-
-[FESZ_L1]
-Partita salvata con successo!
-
-[FESZ_L2]
-Il nome del file salvato è:
-
-[FESZ_OK]
-OK
-
-[FES_LGA]
-Carica partita
-
-[FES_NGA]
-Nuova partita
-
-[FES_CAN]
-Annulla
-
-[FESZ_QL]
-Tutti i progressi della partita attuale non ancora salvati andranno perduti. Vuoi procedere con il caricamento?
-
-[FESZ_QD]
-Vuoi eliminare questa partita salvata?
-
-[FESZ_QO]
-Vuoi procedere con la sovrascrittura di questa partita salvata?
-
-[FESZ_QR]
-Sei sicuro di voler iniziare una nuova partita? Tutti i progressi fatti fino all'ultimo salvataggio andranno perduti. Vuoi procedere?
-
-[FESZ_QS]
-VUOI PROCEDERE CON IL SALVATAGGIO?
-
-[SLONFP]
-Ingresso 1. File protetto.
-
-[T4X4_1]
-'CAMPO DEL PATRIOTA'
-
-[T4X4_2]
-'UN GIRO NEL PARCO'
-
-[T4X4_3]
-'AFFERRATO'
-
-[MM_1]
-'MASSACRO NEL PALAZZO'
-
-[T4X4_1A]
-~g~Hai ~y~5 minuti~g~ per attraversare ~y~15~g~ punti di controllo. ~g~Puoi attraversarli in ~y~QUALSIASI ORDINE~g~.
-
-[T4X4_1B]
-~1~ su 15!
-
-[T4X4_1C]
-~y~ATTRAVERSA~g~ il primo punto di controllo per attivare il timer. ~g~Ogni punto di controllo ti fornirà ~y~20 SECONDI~g~ extra.
-
-[T4X4_2A]
-~g~Hai ~y~2 minuti~g~ per attraversare ~y~12~g~ punti di controllo!!! ~g~Puoi attraversarli in ~y~QUALSIASI ORDINE~g~.
-
-[T4X4_2B]
-~1~ su 12!
-
-[T4X4_2C]
-~y~ATTRAVERSA~g~ il primo punto di controllo per attivare il timer. ~g~Ogni punto di controllo ti fornirà ~y~10 SECONDI~g~ extra.
-
-[T4X4_3A]
-~g~Hai ~y~5 minuti~g~ per attraversare ~y~20~g~ punti di controllo!!! ~g~Puoi attraversarli in ~y~QUALSIASI ORDINE~g~.
-
-[T4X4_3B]
-~y~ATTRAVERSA~g~ il primo punto di controllo per attivare il timer. ~g~Ogni punto di controllo ti fornirà ~y~10 SECONDI~g~ extra.
-
-[T4X4_3C]
-~1~ su 20!
-
-[T4X4_F]
-~r~Sei scappato! Troppo difficile per te?
-
-[MM_1_A]
-~g~Hai ~y~2 minuti~g~ per attraversare ~y~20 punti di controllo~g~ nel palazzo! ~g~Puoi attraversarli in ~y~QUALSIASI ORDINE~g~.
-
-[MM_1_B]
-~1~ su 20!
-
-[MM_1_C]
-~g~Sono 20 secondi più ~y~5 secondi~g~ per ogni punto di controllo. ~g~Il timer partirà ~y~IMMEDIATAMENTE~g~.
-
-[FM2_14]
-~r~Ti sei avvicinato troppo e hai spaventato Ricciolino!
-
-[FM2_15]
-~g~Non ti avvicinare troppo o Ricciolino si insospettirà!
-
-[UPSIDE]
-~r~Hai cappottato la macchina!
-
-[FM2_16]
-PAURIMETRO:
-
-[LM3_11]
-~g~Misty non sale su un autobus, prendi un altro veicolo!
-
-[LANDSTK]
-Landstalker
-
-[IDAHO]
-Idaho
-
-[STINGER]
-Stinger
-
-[LINERUN]
-Linerunner
-
-[PEREN]
-Perennial
-
-[SENTINL]
-Sentinel
-
-[PATRIOT]
-Patriot
-
-[FIRETRK]
-Camion dei pompieri
-
-[TRASHM]
-Trashmaster
-
-[STRETCH]
-Stretch
-
-[MANANA]
-Manana
-
-[INFERNS]
-Infernus
-
-[BLISTA]
-Blista
-
-[PONY]
-Pony
-
-[MULE]
-Mulo
-
-[CHEETAH]
-Cheetah
-
-[AMBULAN]
-Ambulanza
-
-[FBICAR]
-F.B.I.
-
-[MOONBM]
-Moonbeam
-
-[ESPERAN]
-Esperanto
-
-[TAXI]
-Taxi
-
-[KURUMA]
-Kuruma
-
-[BOBCAT]
-Bobcat
-
-[WHOOPEE]
-Mr Whoopee
-
-[BFINJC]
-BF Injection
-
-[POLICAR]
-Polizia
-
-[ENFORCR]
-Cellulare
-
-[SECURI]
-Securicar
-
-[BANSHEE]
-Banshee
-
-[PREDATR]
-Predator
-
-[BUS]
-Bus
-
-[RHINO]
-Rhino
-
-[BARRCKS]
-Caserma OL
-
-[TRAIN]
-Treno
-
-[HELI]
-Elicottero
-
-[DODO]
-Dodo
-
-[COACH]
-Coach
-
-[CABBIE]
-Cabbie
-
-[STALION]
-Stallion
-
-[RUMPO]
-Rumpo
-
-[RCBANDT]
-Bandito RC
-
-[BELLYUP]
-Triad
-
-[MRWONGS]
-Mr Wongs
-
-[MAFIACR]
-Mafia
-
-[YARDICR]
-Yardie
-
-[YAKUZCR]
-Yakuza
-
-[DIABLCR]
-Diablo
-
-[COLOMCR]
-Cartel
-
-[HOODSCR]
-Hoods
-
-[AEROPL]
-Aeroplano
-
-[SPEEDER]
-Speeder
-
-[REEFER]
-Reefer
-
-[PANLANT]
-Panlantic
-
-[FLATBED]
-Flatbed
-
-[YANKEE]
-Yankee
-
-[BORGNIN]
-Borgnine
-
-[TOYZ]
-TOYZ
-
-[FEST_DF]
-Distanza percorsa a piedi (miglia)
-
-[FEST_DC]
-Distanza percorsa in auto (miglia)
-
-[FESTDFM]
-Distanza percorsa a piedi (m)
-
-[FESTDCM]
-Distanza percorsa in auto (m)
-
-[FEST_R1]
-Campo del Patriota (secondi)
-
-[FEST_R2]
-un Giro nel Parco (secondi)
-
-[FEST_R3]
-Afferrato! (secondi)
-
-[FEST_RM]
-Massacro Multi-livello (secondi)
-
-[FEST_LS]
-Persone salvate in ambulanza
-
-[FEST_CC]
-Missione Vigilante - Criminali uccisi
-
-[FEST_FE]
-Totale incendi spenti
-
-[FEST_LF]
-Volo più lungo nel Dodo
-
-[FEST_BD]
-Disinnesco bomba - Miglior tempo
-
-[FEST_RP]
-Violenze eseguite
-
-[FEST_MP]
-Missioni eseguite
-
-[FEST_BB]
-Bling-bling Scramble:
-
-[FEST_H0]
-Maggior numero di checkpoints
-
-[FEST_GC]
-Auto delle gang distrutte:
-
-[FEST_H1]
-Distruzione Diablo
-
-[FEST_H2]
-Massacro Mafioso
-
-[FEST_H3]
-Calamità al Casinò
-
-[FEST_H4]
-Demolizioni Rumpo
-
-[USJI1]
-TESTO NON PIÙ RICHIESTO
-
-[USJI2]
-TESTO NON PIÙ RICHIESTO
-
-[USJI3]
-TESTO NON PIÙ RICHIESTO
-
-[USJ]
-BONUS PER ACROBAZIA UNICA!
-
-[SPRAY]
-Porta l'auto dal carrozziere per perdere il ~h~livello di sospetto~w~, ~h~riparare~w~ e ~h~riverniciare~w~ il veicolo. Costo - ~h~1000$~w~.
-
-[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_8D]
-Premi il ~h~tasto ~k~~PED_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!
-
-[RATNG1]
-Borsaiolo
-
-[RATNG2]
-Prepotente
-
-[RATNG3]
-Teppista
-
-[RATNG4]
-Attaccabrighe
-
-[RATNG5]
-Gorilla
-
-[RATNG6]
-Autista
-
-[RATNG7]
-Aiutante
-
-[RATNG8]
-Riparatore
-
-[RATNG9]
-Socio
-
-[RATNG10]
-Uomo delle pulizie
-
-[RATNG11]
-Assassino
-
-[RATNG12]
-Braccio destro
-
-[RATNG13]
-Boia
-
-[RATNG14]
-Capo
-
-[RATNG15]
-Boss
-
-[1010]
-~r~Il tuo veicolo si è ribaltato
-
-[1011]
-~r~Il tuo veicolo si è ribaltato
-
-[1012]
-~r~Il tuo veicolo si è ribaltato
-
-[1013]
-~r~Il tuo veicolo si è ribaltato
-
-[1014]
-~r~Il tuo veicolo si è ribaltato
-
-[JM4_10]
-OK, ragazzo. Accompagnami prima alla lavanderia di Chinatown, devo occuparmi di alcuni affari.
-
-[JM4_11]
-La donna della lavanderia non mi ha pagato i soldi del pizzo.
-
-[JM4_12]
-E bada all'auto: Joey ha appena riparato questo rottame.
-
-[JM4_13]
-Quindi, niente colpi di testa, OK?
-
-[KM4_11]
-~g~Riporta i soldi al Casinò!
-
-[FEF_BR2]
-Ritrovalo leggendo i sommari di missione che hai già ricevuto.
-
-[TRAIN_1]
-Stazione Kurowski
-
-[TRAIN_2]
-Stazione Rothwell
-
-[TRAIN_3]
-Stazione Baillie
-
-[SUBWAY1]
-Stazione Portland
-
-[SUBWAY2]
-Stazione Rockford
-
-[SUBWAY3]
-Stazione Sud Staunton
-
-[SUBWAY4]
-Capolinea Shoreside
-
-[MEA4_2]
-~r~Marty Chonks è morto!
-
-[SPRAY1]
-Porta l'auto dal carrozziere per perdere il ~h~livello di sospetto~w~, ~h~riparare~w~ e ~h~rivernicirea~w~ il veicolo. Costo - ~h~1000$~w~. Per questa volta è gratis.
-
-[JM4_A]
-Sì, lo so Toni, l'ho sistemata per bene. Il motore fa le fusa, non so se mi spiego.
-
-[JM4_5]
-Ripassa più tardi e darò loro qualcosa da lavare... i panni macchiati del loro sangue!
-
-[AMMU_A]
-Luigi dice che ti serve 'un ferro del mestiere'...
-
-[AMMU_B]
-Joey mi ha detto di equipaggiarti...
-
-[AMMU_C]
-Vai sul retro del negozio. Ti ho lasciato una calibro nove in cortile.
-
-[AMMU_D]
-Ho tutto quello che ti serve per la tua auto-difesa.
-
-[AMMU_E]
-Vuoi anche una licenza?
-
-[AMMU_F]
-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_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.
-
-[RECORD]
-~g~NUOVO RECORD!!!
-
-[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.
-
-[RCHELPA]
-Premi il tasto ~k~~PED_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!
-
-[RC_2]
-Hai 2 minuti per far esplodere quante più auto Mafiose possibile!
-
-[RC_3]
-Hai 2 minuti per far esplodere quante più auto della Yakuza possibile!
-
-[RC_4]
-Hai 2 minuti per far esplodere quante più auto degli Yardie possibile!
-
-[RC_5]
-Hai 2 minuti per far esplodere quante più auto degli Hood possibile!
-
-[RC_6]
-Hai 2 minuti per far esplodere quante più auto del Cartello possibile!
-
-[RAMPAGE]
-VIOLENZA!!
-
-[RAMP_P]
-VIOLENZA COMPIUTA!
-
-[RAMP_F]
-VIOLENZA FALLITA
-
-[PAGE_00]
-.
-
-[PAGE_01]
-Uccidi ~1~ Diablo in 120 secondi!
-
-[PAGE_02]
-Distruggi ~1~ veicoli in 120 secondi!
-
-[PAGE_03]
-Uccidi ~1~ Mafiosi in 120 secondi!
-
-[PAGE_04]
-Uccidi ~1~ elementi della Triade in 120 secondi!
-
-[PAGE_05]
-Uccidi ~1~ elementi della Triade in 120 secondi!
-
-[PAGE_06]
-Distruggi ~1~ veicoli in 120 secondi!
-
-[PAGE_07]
-Fai saltare la testa a ~1~ Yardie in 120 secondi!
-
-[PAGE_08]
-Brucia ~1~ elementi della Yakuza in 120 secondi!
-
-[PAGE_09]
-Distruggi ~1~ veicoli in 120 secondi!
-
-[PAGE_10]
-Distruggi ~1~ veicoli in 120 secondi!
-
-[PAGE_11]
-Annienta ~1~ Yardie in 120 secondi!
-
-[PAGE_12]
-Carbonizza ~1~ elementi della Yakuza in 120 secondi!
-
-[PAGE_13]
-Fai esplodere ~1~ Yardie in 120 secondi!
-
-[PAGE_14]
-Fai fuori ~1~ ColombianI in 120 secondi!
-
-[PAGE_15]
-Polverizza ~1~ Hood in 120 secondi!
-
-[PAGE_16]
-Distruggi ~1~ veicoli in 120 secondi!
-
-[PAGE_17]
-Investi in macchina ~1~ Colombiani in 120 secondi!
-
-[PAGE_18]
-Distruggi guidando ~1~ veicoli in 120 secondi!
-
-[PAGE_19]
-Stacca la testa a ~1~ Colombiani in 120 secondi!
-
-[PAGE_20]
-Decapita ~1~ Hood in 120 secondi!
-
-[JOEY_1]
-TESTO NON PIÙ RICHIESTO
-
-[JM1_A]
-Ehi, sono stufa, quand'è che si passa ai fatti?
-
-[JM1_B]
-Tra un minuto, cocca, ho una cosetta da sbrigare.
-
-[JM1_C]
-Ho un lavoretto per te, amico.
-
-[JM1_D]
-I fratelli Forelli mi devono soldi da troppo tempo
-
-[JM1_E]
-e occorre insegnargli un po' di rispetto.
-
-[JM1_F]
-'Labbra' Forelli si sta ingozzando come un porco al St Mark's Bistro,
-
-[JM1_G]
-quindi rubagli l'auto e portala nell'armeria di 8-Ball ad Harwood.
-
-[JM1_H]
-Conosci 8-Ball, vero?
-
-[JM1_I]
-Dopo che sarà stata installata una bomba, parcheggia l'auto dove l'hai trovata.
-
-[JM1_J]
-Poi rilassati e goditi lo spettacolo.
-
-[JM1_K]
-Ma fai in fretta, non starà a pranzo una vita.
-
-[CAT2_A1]
-Forza, brutta deficiente!
-
-[CAT2_A]
-La domanda è: sei venuto a salvare Maria o a riportarmi indietro?
-
-[CAT2_B]
-Beh, stammi a sentire,
-
-[CAT2_B2]
-spararti sarà un piacere, ma uscire con te è stato solo lavoro.
-
-[CAT2_C]
-Sei il mio peccinno amigo!
-
-[CAT2_D]
-Butta qui la grana.
-
-[CAT2_E]
-Ti sei dato molto da fare!
-
-[CAT2_E2]
-Ma non hai imparato che non devi fidarti di me.
-
-[CAT2_E3]
-Ammazzate quell'idiota.
-
-[CAT2_J]
-Fai decollare questo affare!
-
-[HM5_1]
-Ehi, Ice mi ha detto che saresti arrivato. Ecco le regole. Solo mazze. Niente pistole, niente auto.
-
-[HM5_5]
-È una battaglia per il rispetto, chiaro?.
-
-[HELP14]
-Per raccogliere le armi, passaci sopra a piedi. Non puoi raccoglierle mentre sei in un veicolo.
-
-[CRUSH]
-Parcheggia nell'area contrassegnata ed esci dal veicolo. Il veicolo verrà rottamato.
-
-[DIAB2_B]
-Un gruppo di gentaglia mi ha minacciato di asportare il mio attributo di tutto rispetto se non gli sgancio dei soldi.
-
-[DIAB2_C]
-Hanno minacciato l'uomo sbagliato, amigo.
-
-[DIAB2_D]
-Hanno un debole per il gelato.
-
-[DIAB2_E]
-Prendi la bomba che ho nascosto ad Harwood,
-
-[DIAB2_F]
-dirotta il furgone dei gelati durante i suoi spostamenti
-
-[DIAB2_G]
-e attira quegli idioti verso il loro destino con il campanello.
-
-[DIAB2_H]
-Si nascondono in un magazzino ad Atlantic Quay.
-
-[DIAB3_A]
-Qualche insolente della Triade ha rubato la mia stupenda macchina ieri notte,
-
-[DIAB3_B]
-l'ha distrutta e carbonizzata.
-
-[DIAB3_C]
-Uno dei miei più cari escrementi asinini si trovava nel bagagliaio
-
-[DIAB3_D]
-veri oggetti da collezione, insostituibili amico mio.
-
-[DIAB3_E]
-Ho nascosto un'arma lancinante alla periferia di Chinatown.
-
-[DIAB3_F]
-Prendila e insegna ai vandali della Triade a temere l'ira super-dotata di El Burro!
-
-[DIAB3_1]
-UCCIDI 25 ELEMENTI DELLA TRIADE
-
-[DIAB4_A]
-Un ladruncolo approfittatore ha rubato un furgone carico di copie delle mie ultime pubblicazioni!
-
-[DIAB4_B]
-Ma quell'idiota fatto di SPANK ha lasciato lo sportello posteriore aperto,
-
-[DIAB4_C]
-per cui tutto quello splendido capolavoro patinato
-
-[DIAB4_D]
-con intriganti foto pornografiche è stato sparso per tutta Liberty!
-
-[DIAB4_E]
-Prendi il furgone e segui la scia di copie di Un Asino si fa Dallas volume 1, 2 e 3
-
-[DIAB4_F]
-raccogliendole lungo la strada.
-
-[DIAB4_G]
-Quando raggiungi quel ladruncolo imbottito di SPANK, fallo fuori!
-
-[DIAB4_H]
-Poi consegna il mio materiale asinino a Riviste XXX nel quartiere a luci rosse.
-
-[DIAB4_1]
-~g~Porta il furgone nel retro di Riviste XXX.
-
-[HM1_E]
-Devi far vedere a queste depravate come si fa una vera sparatoria.
-
-[HM1_H]
-Togli di torno questi Nine!
-
-[HM2_A]
-Questi Nine mi stanno causando problemi.
-
-[HM2_B]
-Queste stronze hanno auto blindate e adesso stanno spacciando SPANK...
-
-[HM2_C]
-e lo smerciano senza paura ai miei fratelli.
-
-[HM2_D]
-C'è un'auto parcheggiata in strada.
-
-[HM2_E]
-Dentro c'è della roba che metterà le sorelline fuori combattimento...
-
-[HM3_A]
-Qualche bastardo ha messo una bomba nella mia auto.
-
-[HM3_B]
-Se perdo l'auto, la mia reputazione nel giro sarà finita.
-
-[HM3_C]
-Prendi la mia macchina e portala al garage a St. Marks, chiaro?
-
-[HM3_D]
-Fagli disinnescare la bomba, lascia che se ne occupino loro.
-
-[HM3_E]
-Il tempo corre e l'ordigno è tutto incasinato.
-
-[HM3_F]
-Se becchi una buca potrebbe saltare tutto in aria.
-
-[HM3_G]
-Adesso muoviti!
-
-[HM4_A]
-Ehi, un aereo federale portavalute si è appena schiantato all'aeroporto Francis.
-
-[HM4_B]
-C'è del platino sparso per tutta la pista.
-
-[HM4_C]
-Prendi un'auto e raccogline quanto ne puoi!
-
-[HM4_F]
-Puoi scaricare il malloppo in uno dei miei garage.
-
-[HM4_G]
-Il platino è molto pesante e rallenterà un po' l'automobile.
-
-[HM4_H]
-Quindi fai diverse consegne nel garage.
-
-[HM5_A]
-Quei Nine sono rimasti in una manciata di rognosi...
-
-[HM5_B]
-ma insistono ancora.
-
-[HM5_C]
-Ci siamo accordati per uno scontro.
-
-[HM5_D]
-Un gruppo dei loro contro due di noi, anzi...
-
-[HM5_E]
-due di te.
-
-[HM5_F]
-Ti accompagnerei, ma...
-
-[HM5_G]
-non sarò in libertà vigilata per altri tre mesi.
-
-[HM5_H]
-Tu mi capisci, vero?
-
-[HM5_I]
-Vai a trovare il mio fratellino,
-
-[HM5_J]
-Ti accompagnerà sul luogo della rissa, amico.
-
-[MEA1_B]
-Mi chiamo Chonks, Marty Chonks.
-
-[MEA1_C]
-Gestisco la fabbrica di cibo per cani Bitch'n'Dog qui vicino.
-
-[MEA1_D]
-Ho dei problemi finanziari, ma in fondo chi non ne ha?
-
-[MEA1_E]
-Più tardi mi incontrerò col direttore della mia banca.
-
-[MEA1_F]
-È un imbroglione schifoso che continua a far crescere gli interessi di un prestito per arricchirsi.
-
-[MEA1_G]
-Usa la mia auto, vallo a prendere e portalo qui.
-
-[MEA1_H]
-Ho una sorpresina per quella maledetta sanguisuga!
-
-[MEA2_A]
-Ho assunto dei ladri per entrare nel mio appartamento...
-
-[MEA2_C]
-Quei ladruncoli bastardi minacciano di dire tutto all'assicurazione,
-
-[MEA2_D]
-se non do loro una percentuale.
-
-[MEA2_E]
-Roba da non credere!
-
-[MEA2_F]
-Ho parcheggiato un'auto dietro i cancelli della fabbrica.
-
-[MEA2_G]
-Usala e valli a prelevare nel loro territorio nel quartiere a luci rosse.
-
-[MEA2_H]
-Poi portali qui in fabbrica così che comprendano il mio punto di vista.
-
-[MEA3_A]
-L'azienda farà bancarotta se non riesco a procurarmi in fretta parecchi contanti.
-
-[MEA3_B]
-Mia moglie ha un'assicurazione e l'unica cosa che sa fare è sperperare i miei soldi.
-
-[MEA3_C]
-Ho lasciato un'auto al solito posto.
-
-[MEA3_D]
-Vai a prendere mia moglie al salone di bellezza Classic Nails e accompagnala alla fabbrica.
-
-[MEA4_A]
-Maledizione, sono nei guai!
-
-[MEA4_B]
-Sembra che mia moglie avesse una storia con un tipo a cui devo dei soldi.
-
-[MEA4_C]
-È molto arrabiato e vuole vendetta!
-
-[MEA4_E]
-Lui si aspetta che cercherò di patteggiare...
-
-[MEA4_F]
-ma io credo che...
-
-[MEA4_G]
-i cani di Liberty assaggeranno dei bocconcini extra questo mese!
-
-[WELCOME]
-BENVENUTI A
-
-[HM1_2]
-~g~Prendi un veicolo e ricorda: contano solo le uccisioni fatte con l'Uzi mentre guidi!
-
-[HELP8_B]
-Premi il ~h~tasto ~k~~PED_SNIPER_ZOOM_IN~ ~w~per ~h~zoomare ~w~col fucile e il~h~ tasto ~k~~PED_SNIPER_ZOOM_OUT~~w~ per ~h~allargare il campo~w~.
-
-[LRQC_1]
-Asuka e io dobbiamo parlare, OK?
-
-[LRQC_2]
-Perché non ti fai un giro?
-
-[LRQC_3]
-Ti servira un posto dove nasconderti.
-
-[LRQC_4]
-C'è un magazzino al confine di Bellville che farà al caso tuo.
-
-[LRQC_5]
-Ritorna qui nel mio appartamento quando sei pronto,
-
-[LRQC_6]
-Così possiamo chiacchierare un po'.
-
-[JM6_5]
-~g~Ti serve un veicolo per la fuga, idiota!
-
-[JM2_F]
-Se ti serve un'arma, vai sul retro di AmmuNation dal lato opposto della metropolitana.
-
-[LOVE4_7]
-~g~C'è un cantiere edile a Staunton Island, forse hanno portato lì il pacco.
-
-[LOVE4_8]
-~g~Ti servirà un'auto per accedere al garage.
-
-[TSCORE]
-GUADAGNI: ~1~$
-
-[AM1_9]
-~r~Salvatore è fuggito di nuovo dentro il club Luigi's!
-
-[AM1_6]
-~g~Se ti aggiri attorno al club Luigi's, la Mafia ti avvisterà!
-
-[TM2_3]
-~g~È una trappola! Falli fuori tutti!!!
-
-[FM4_1]
-Sono Maria. L'auto è una trappola! Incontriamoci alla rampa a sud del ponte Callahan.
-
-[JM1_7]
-~g~Chiudi la portiera! Lo noterà!
-
-[KM5_1]
-~g~TRITATO DI SPACCIATORE!
-
-[KM5_6]
-~g~Devi uccidere almeno 8 spacciatori Yardie.
-
-[KM5_7]
-~g~Uccidili in fretta! Dopo aver venduto lo SPANK spariscono dalla circolazione.
-
-[RM3_8]
-~r~Quell'auto è un tranello!!!
-
-[LM3_8]
-Ehi, sono Joey.
-
-[LM3_9]
-Luigi mi ha detto che sei affidabile, quindi torna più tardi,
-
-[KM3_5]
-~g~Suona il clacson per avviare l'affare.
-
-[LOVE7]
-LA SCOMPARSA DI LOVE
-
-[LOVE2_5]
-~g~Kenji è un tritato di carne! Allontanati da Newport e abbandona l'auto!
-
-[AS2_11]
-~g~~1~ SU 9!
-
-[GARAGE1]
-~g~Esci dal veicolo ed esci fuori.
-
-[KM3_11]
-~g~Il Cartello è stato attaccato e la valigia non è stata recuperata.
-
-[KM3_12]
-~g~Uccidi tutti i Colombiani, distruggi i veicoli e recupera la valigia.
-
-[KM3_13]
-~g~Riconsegna la valigia al Casinò.
-
-[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_2]
-Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare con i cannoni della barca.
-
-[DIAB1_B]
-Sono El Burro dei Diablo.
-
-[DIAB1_D]
-Sei da poco a Liberty, ma ti sei già guadagnato una reputazione in città.
-
-[DIAB1_E]
-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_1A]
-Usa i maggiolini radiocomandati per distruggere le auto blindate. Premi il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per farli esplodere.
-
-[HM2_2]
-~r~Non sei riuscito a distruggere tutte le auto blindate!
-
-[HM2_6]
-~g~Auto blindata distrutta!
-
-[RM3_A]
-Conosco un uomo molto importante in città, di manica larga,
-
-[RM3_H]
-con gusti, diciamo, esotici e i soldi per permetterseli.
-
-[RM3_B]
-È coinvolto in un processo e l'accusa ha delle sue foto piuttosto imbarazzanti
-
-[RM3_C]
-in cui appare in un party all'obitorio.
-
-[LOVE6_A]
-Una lezione d'affari, amico.
-
-[LOVE6_E]
-Se possiedi qualcosa di unico, il mondo intero cercherà di strappartelo dalle mani...
-
-[LOVE6_C]
-Squadre speciali di polizia hanno circondato la zona attorno al mio socio e al pacco.
-
-[LOVE6_D]
-Vai li, prendi il furgone e fuggi per attirarli dietro di te.
-
-[LOVE6_F]
-Tienili occupati, così che lui possa sfuggire!
-
-[AM3_C]
-Probabilmente quando lo leggerai questo sarà in alto mare! Ruba un'imbarcazione della polizia e mandalo a picco!
-
-[FESZ_UC]
-ANNULLA
-
-[FEDS_SM]
-L1,R1-CAMBIA MENU
-
-[FEDS_AS]
-;=-CAMBIA SELEZIONE
-
-[FEDSAS2]
-<>-CAMBIA SELEZIONE
-
-[FEDS_SS]
-L1,R1-CAMBIA SELEZIONE
-
-[FEDSSC1]
-;-SCORRIMENTO RAPIDO
-
-[FEDSSC2]
-=-FERMA SCORRIMENTO
-
-[MEA2_3]
-~g~Riporta l'auto alla fabbrica.
-
-[RM1_3]
-~r~McAffrey è scappato!
-
-[RM1_4]
-~g~Hai usato tutte le granate! Procuratene altre da AmmuNation!
-
-[RM1_5]
-~g~Torna indietro e incendia il rifugio!
-
-[RM6_4]
-~g~Vai al nascondiglio e preleva la roba di Ray.
-
-[RM6_5]
-~g~La CIA ha messo il ponte sotto sorveglianza, trova un altro punto d'accesso.
-
-[HM2_F]
-e distruggi tutte le loro attrezzature blindate.
-
-[HM_4]
-'CORSA AL LINGOTTO'
-
-[MEA2_B5]
-TESTO NON PIÙ NECESSARIO
-
-[MEA1_B5]
-TESTO NON PIÙ NECESSARIO
-
-[MEA3_B5]
-TESTO NON PIÙ NECESSARIO
-
-[MEA4_B7]
-ma se entri un attimo nel mio ufficio...
-
-[MEA3_B4]
-Marty vuole vedermi? È meglio che si sbrighi perché devo acconciarmi i capelli.
-
-[KM3_7]
-È un esperto in trappole della Yakuza!
-
-[FES_LOF]
-Caricamento fallito.
-
-[P1INSA]
-Ingresso 1. memory card (PS2) inserita. ~1~ K di spazio disponibile per salvare. ~1~ K necessari.
-
-[P1INSN]
-Ingresso 1. memory card (PS2). Spazio disponibile insufficiente. Elimina alcuni file.
-
-[FES_SLO]
-SALVA FILE
-
-[FES_ISC]
-CORROTTO
-
-[FESZ_TI]
-SALVA Z1
-
-[FESZ_SA]
-Salva partita
-
-[P1NOIN]
-Ingresso 1. memory card (PS2) non inserita
-
-[P1INSE]
-Ingresso 1. memory card (PS2) inserita.
-
-[MC_LDFL]
-Caricamento fallito!
-
-[MC_NWRE]
-Partita in fase di riavvio.
-
-[LOVE6_3]
-~g~Hai ~1~ secondi per tornare alla Securicar prima di fallire la missione.
-
-[LOVE6_4]
-~r~Hai distrutto la Securicar da depistaggio!
-
-[HELP1]
-Fermati nel centro del segnale blu.
-
-[HELP12]
-Cammina nel centro del segnale blu per attivare una missione.
-
-[HJSTAT]
-Distanza: ~1~.~1~m Altezza: ~1~.~1~m Ribaltamenti: ~1~ Rotazioni: ~1~_
-
-[HJSTATW]
-Distanza: ~1~.~1~m Altezza: ~1~.~1~m Ribaltamenti: ~1~ Rotazioni: ~1~_ E che grande atterraggio!
-
-[DIAB1_5]
-TEMPO DI GARA:
-
-[LOVE3_4]
-~r~Hai distrutto l'aereo!!!
-
-[F_FAIL1]
-Missione Camion dei pompieri terminata.
-
-[F_CANC]
-~r~Missione Pompieri annullata!
-
-[F_EXTIN]
-INCENDI:
-
-[A_COMP1]
-Missioni Infermieri completate!
-
-[A_CANC]
-~r~Missione Infermieri annullata!
-
-[A_COMP3]
-Missioni Infermieri completate! Ora non ti stancherai mai mentre corri!
-
-[ATUTOR]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Infermieri.
-
-[ATUTOR3]
-Premi il ~h~tasto ~k~~TOGGLE_SUBMISSIONS~~w~ per attivare o disattivare le missioni Infermieri.
-
-[ALEVEL]
-Missione Infermieri Livello ~1~
-
-[A_FAIL1]
-Missione Infermieri terminata.
-
-[FEST_HA]
-Missione Infermieri - Livello Max.
-
-[A_SAVES]
-PERSONE SALVATE: ~1~
-
-[C_KILLS]
-CRIMINALI UCCISI: ~1~
-
-[HM1_B]
-Ho un problema. Stanno cercando di farsi gioco di me.
-
-[AM2_A]
-La morte di Salvatore è un'ottima notizia,
-
-[AM2_A2]
-sei un killer efficiente. Mi piace come qualità in un uomo.
-
-[AM2_B]
-Lui è mio fratello Kenji.
-
-[AM2_C]
-Asuka ha un lavoretto per te: quando hai finito, passa al Casinò così parliamo.
-
-[AM2_D]
-Proprio come Kenji, che cerca sempre di usare i miei giocattoli.
-
-[AM2_E]
-La mia fonte alla polizia mi ha informato che la Mafia sta studiando le nostre operazioni nella città
-
-[AM2_E2]
-nel tentativo di scovarti.
-
-[AM2_F]
-Non possiamo continuare le nostre operazioni fino a quando il problema non verrà risolto.
-
-[AM2_G]
-Elimina questi insulsi spioni e termina questa vendetta una volta per tutte.
-
-[F_START]
-~g~Veicolo in fiamme avvistato nell'area ~a~. Vai a spegnere il fuoco.
-
-[AM4_1A]
-Vai al telefono al parco Belleville ovest.
-
-[AM4_1B]
-Vai al telefono nel campus Liberty.
-
-[AM4_1C]
-Vai al telefono al parco Belleville sud.
-
-[AM4_1D]
-Incontriamoci nei bagni pubblici nel parco.
-
-[HJSTATF]
-Distanza: ~1~ piedi Altezza: ~1~ piedi Ribaltamenti: ~1~ Rotazioni: ~1~_
-
-[HJSTAWF]
-Distanza: ~1~ piedi Altezza: ~1~ piedi Ribaltamenti: ~1~ Rotazioni: ~1~_ E che grande atterraggio!
-
-[HM1_F]
-Stai in guardia, però. Ci saranno dei Jack in giro che penseranno che vuoi far fuori anche loro!
-
-[HM1_D]
-'Nine' è il loro nome e la loro bandiera è porpora e ogni giorno che portano i loro colori...
-
-[HM1_G]
-è un giorno in cui i 'Jack' appaiono rammolliti.
-
-[MEA2_B]
-e ruba qualcosa così che io possa incassare l'assicurazione come fai tu.
-
-[TM3_H]
-~w~Hai fatto un bel lavoro laggiù, molto bravo.
-
-[TM3_I]
-~w~Forza, adesso ti presento al Don.
-
-[TM3_J]
-~w~Eehi!!! Luigi!
-
-[TM3_K]
-~w~Oh, le mie ragazze hanno sentito la sua mancanza, Don Salvatore, è mancato per molto tempo.
-
-[TM3_L]
-~w~Dì loro che una volta risolta questa situazione spiacevole,
-
-[TM3_M]
-~w~andremo tutti al club a festeggiare, OK?
-
-[TM3_N]
-~w~Ecco il mio ragazzo!
-
-[TM3_N2]
-~w~Come va, papà?
-
-[TM3_O]
-~w~Ti sei trovato una brava mogliettina?
-
-[TM3_P]
-~w~Ehi, tua madre, pace all'anima sua, si rivolterebbe nella tomba
-
-[TM3_Q]
-~w~vedendoti ancora senza moglie.
-
-[TM3_R]
-~w~Lo so, papà, ci sto pensando su.
-
-[TM3_S]
-~w~TONI! Come sta tua madre?
-
-[TM3_T]
-~w~È una donna eccezionale. Forte.
-
-[TM3_U]
-~w~Sta bene... tutto OK.
-
-[TM3_V]
-~w~Bene, bene. Voi ragazzi entrate pure, mentre io chiacchiero col nostro nuovo amico.
-
-[TM3_W]
-~w~Vedo un futuro roseo per te, figghiu miu...
-
-[RM1_A]
-Quell'infame di McAffrey, si prende più bustarelle di chiunque.
-
-[RM1_B]
-Pensa di venir assolto dignitosamente presentando delle prove inequivocabili.
-
-[RM1_C]
-Ha appena cantato!
-
-[RM4_B]
-Dobbiamo metterlo a tacere, per sempre.
-
-[RM4_E]
-Voglio che dorma con i pesci, in senso letterale.
-
-[LOVE3_B]
-Avvicinandosi all'aeroporto stasera, un piccolo aereo sorvolerà la baia.
-
-[LOVE4_D]
-Sfortunatamente le autorità aeroportuali avevano già iniziato a smantellare l'aereo
-
-[LOVE4_H]
-finché non sono intervenuto sborsando una fortuna.
-
-[LOVE4_E]
-Attraversa il ponte per Shoreside Vale e vai all'aeroporto internazionale Francis.
-
-[GTAB_A]
-Ehi, portiamo questo fuori di qui. Dio solo sa cos'è
-
-[GTAB_B]
-ma sembra che lui lo voglia davvero, quindi dovrà pur valere qualcosa.
-
-[GTAB_C]
-Chi diavolo è!
-
-[GTAB_D]
-TU!
-
-[GTAB_E]
-Ehi, in gamba amigo, stai calmo, amigo! Di niente, di niente!
-
-[GTAB_F]
-Ti ho lasciato sfogare!
-
-[GTAB_G]
-Non sparare amigo. Nessun problema. Siamo tutti amici. Ecco, prendi questo.
-
-[GTAB_H]
-Non fare la femminuccia!
-
-[GTAB_I]
-Non abbiamo scelta, baby!
-
-[GTAB_J]
-C'è sempre una scelta, stupido bastardo!
-
-[GTAB_K]
-Mi spiace per quella cretina, amigo, sono tutte uguali... por favor?
-
-[GTAB_L]
-Allora la puttana è scappata.
-
-[GTAB_M]
-Ma mi hai fatto un favore,
-
-[GTAB_N]
-non sei il solo che ha un conto in sospeso col Cartello,
-
-[GTAB_O]
-questo verme ha ucciso mio fratello!
-
-[GTAB_P]
-Non ho mai ucciso nessun Yakuza!
-
-[GTAB_Q]
-BUGIARDO! Abbiamo visto tutti l'assassino del Cartello.
-
-[GTAB_R]
-Daremo la caccia ed elimineremo tutti voi cani Colombiani!
-
-[GTAB_S]
-Farò un'operazione al nostro amichetto per strappargli qualche informazione e per divertirmi.
-
-[GTAB_T]
-Tu, passa più tardi, sono certo che avrò bisogno del tuo aiuto.
-
-[GTAB_U]
-Ti prego, amigo, non lasciarmi con lei, è tutta matta! Amigo? Ehi Amiiigooo!!! Aieeeeeeaaaaahh!!!
-
-[LOVE5_A]
-Ti stai dimostrando un buon investimento, cosa rara in questi giorni.
-
-[KM3_1]
-~g~Il Cartello aspetta una gang di Yardie. Vai a rubare una loro auto! Dirigiti a nord, ne troverai una a Newport.
-
-[LOVE1_1]
-~g~Procurati un'auto dei gangster Colombiani per infiltrarti nel loro nascondiglio: dirigiti a nord, ne troverai una a Fort Staunton.
-
-[FM1_Q1]
-~w~Ti va di divertirti? Un po' di... hmmm? Un po' di SPANK?
-
-[FM1_R]
-~w~Ciao Chico. No, il solito.
-
-[FM1_T]
-~w~Grazie Chico, a presto.
-
-[FM1_W]
-~w~OK, Fido, aspetta qui e tieni d'occhio l'auto mentre io vado a sculettare un po'.
-
-[FM1_X]
-~w~OK, Fido, andiamocene via di qui. Uuuhhh!
-
-[FM1_Q]
-~w~Ehi, Maria! La mia ragazza preferita!
-
-[FM1_S1]
-~w~Ehi, forse dovresti dare un'occhiata al party nei magazzini sulla costa est del molo atlantico.
-
-[FM1_U]
-~w~Gracias e buon divertimento. È roba buona.
-
-[FM1_V]
-~w~Forza, Fido, facciamo un salto a questo party!
-
-[FM1_SS]
-~r~SCANNER: ~g~4-5 a tutte le unità: rinforzi per l'operazione antinarcotici al molo atlantico...
-
-[LOVE6_B]
-Anche se hanno scarsa comprensione del suo autentico valore.
-
-[TM3_A1]
-~r~Joey è spacciato!
-
-[TM3_A2]
-~r~Joey e Luigi sono stati cremati!
-
-[TM3_A3]
-~r~Joey, Luigi e Toni sono fritti!
-
-[FM4_2]
-Ascolta, Salvatore pensa che vogliamo tradirlo,
-
-[FM4_3]
-per cui ti stava per consegnare al Cartello per raggiungere un accordo.
-
-[FM4_4]
-Non potevo lasciarglielo fare, e poi la cosa peggiore è che
-
-[FM4_4B]
-è tutta colpa mia... perché gli ho detto che stavamo insieme.
-
-[FM4_5]
-Non chiedermi il perché. Non lo so.
-
-[FM4_6]
-Senti, sei un uomo spacciato in territorio mafioso, e anch'io devo svignarmela.
-
-[FM4_6B]
-Ho visto troppi omicidi. Troppo sangue!
-
-[FM4_7]
-Questa è una mia vecchia amica, OK, di vecchia data. È Asuka, ed è una tipa fidata.
-
-[FM4_8]
-Forza, basta con i discorsi.
-
-[FM4_9]
-Dovremmo andarcene prima che arrivino altri italiani isterici poco propensi a una discussione amichevole.
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUTTORE
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-DIREZIONE ARTISTICA
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-DIREZIONE TECNICA
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-DESIGN
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-SCRITTO DA
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-PERSONAGGI
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMAZIONE E REGIA
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-DESIGN AUTOMOBILI
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-GRAFICI
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODIFICATORI
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-MUSICHE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-DESIGN AUDIO E MASTERIZZAZIONE
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-PROGRAMMAZIONE AUDIO
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-DIRETTORE TESTING
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-TESTER PRINCIPALI
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRD050A]
-TESTER
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-SUPPORTO TECNICO
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-PRODUTTORE ESECUTIVO
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUTTORE
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRETTORE DI SVILUPPO
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-PRODUTTORE TECNICO
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-PRODUTTORE ASSOCIATO
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-SUPERVISORE MUSICHE
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VICEPRESIDENTE MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-COORDINATORE TECNICO
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-RESPONSABILE CONTROLLO QUALITÀ
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-ANALISTA DEL GIOCO
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-SQUADRA TESTING
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-PIANTA DI LIBERTY
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-SEQUENZE ANIMATE
-
-[CRED108]
-COPIONE SCRITTO DA DAN HOUSER E JAMES WORRALL
-
-[CRED109]
-REGISTRAZIONE AUDIO DIRETTA DA DAN HOUSER
-
-[CRED110]
-AUDIO PRODOTTO DA RENAUD SEBBANE
-
-[CRED111]
-CASTING
-
-[CRED112]
-FRANK VINCENT NEL RUOLO DI SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO NEL RUOLO DI LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN NEL RUOLO DI TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT NEL RUOLO DI JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR NEL RUOLO DI MARIA
-
-[CRED117]
-KYLE MACLACHLAN NEL RUOLO DI DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA NEL RUOLO DI RAY MACHOWSKI
-
-[CRED119]
-GURU NEL RUOLO DI 8-BALL
-
-[CRED120]
-SONDRA JAMES NEL RUOLO DI MOMMA
-
-[CRED121]
-LIANA PAI NEL RUOLO DI ASUKA
-
-[CRED122]
-LES MAU NEL RUOLO DI KENJI
-
-[CRED123]
-CYNTHIA FARRELL NEL RUOLO DI CATALINA
-
-[CRED124]
-AL ESPINOSA NEL RUOLO DI MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS NEL RUOLO DI EL BURRO
-
-[CRED126]
-HUNTER PLATIN NEL RUOLO DI CHICO
-
-[CRED127]
-WALTER MUDU NEL RUOLO DI D-ICE
-
-[CRED128]
-CURTIS MCCLARIN NEL RUOLO DI CURTLY
-
-[CRED129]
-BILL FIORE NEL RUOLO DI DARKEL
-
-[CRED130]
-CHRIS PHILLIPS NEL RUOLO DI MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN NEL RUOLO DI RICCIOLINO BOB
-
-[CRED132]
-WALTER MUDU NEL RUOLO DI KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN NEL RUOLO DI ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY NEL RUOLO DI MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATO DA
-
-[CRD136A]
-ALEX HORTON
-
-[CRED137]
-DIRETTO DA
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRED138]
-PRODOTTO DA
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRED139]
-REGISTRATO PRESSO GLI STUDI MODERN UPRISING, BROOKLYN
-
-[CRED140]
-ATTORI
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS
-
-[CRED141]
-DIALOGO DEI PEDONI
-
-[CRED142]
-SCRITTO DA DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRETTO DA CRAIG CONNER, DAN HOUSER E LAZLOW
-
-[CRED144]
-PRODOTTO DA RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-STAZIONI RADIO E MUSICA
-
-[CRED218]
-PRODUTTORI PER ROCKSTAR UK
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED219]
-COORDINATORE COLONNA SONORA
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUTTORE PER ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-POST-PRODOTTA DA
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER E IMAGING SCRITTE DA
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-RINGRAZIAMENTI SPECIALI A
-
-[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]
-ARTIST
-
-[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]
-Camera mobile
-
-[KM1_13]
-Entra in auto dentro il garage!
-
-[KM3_14]
-~r~Sei stato scoperto, l'affare è saltato!
-
-[EBAL_H]
-Aspetta qui mentre entro a parlare con Luigi.
-
-[EBAL_M]
-Ricorda, niente casini con le mie ragazze!
-
-[LM2_F]
-Poi prendi la sua macchina, riverniciala.
-
-[LM2_D]
-tieni, prendi.
-
-[LM1_9]
-Ciao, sono Misty.
-
-[LM4_A]
-I papponi dei Diablo hanno messo a battere le loro mignotte nella mia zona.
-
-[FM2_B]
-C'è di mezzo una spia.
-
-[FM2_C]
-Non è ne un pusher ne un pappone, quindi dev'essere una spia.
-
-[FM3_CC]
-~w~Fratello, torna quando avrai i soldi.
-
-[LOVE5_5]
-~r~Non sei riuscito a proteggere il camion!
-
-[RM6_6]
-~r~Ray è morto!
-
-[RM6_7]
-~r~Ray ha perso il volo.
-
-[RM6_8]
-~g~Ti sei dimenticato Ray, torna a prenderlo.
-
-[FM1_10]
-~g~Ti sei dimenticato Maria, torna a prenderla.
-
-[LOVE4_9]
-~r~L'aereo è stato distrutto!
-
-[LOV4_10]
-~r~Il solo indizio che indicasse dov'è finito il pacco è stato distrutto!
-
-[KM2_D]
-Non occorre dire che dobbiamo donargli le auto, per ripagare il debito che gli è dovuto.
-
-[KM4_B]
-Le imprese che godono della nostra protezione oggi salderanno i conti.
-
-[KM2_E]
-Devi procurarti le auto nella lista e consegnarle nel garage dietro il parcheggio a Newport.
-
-[FM3_8I]
-~w~Scegli una postazione vantaggiosa, poi io entrerò dopo che hai sparato il primo colpo.
-
-[LOVE1_B]
-L'esperienza mi ha insegnato che un uomo come te sa essere molto leale se ben pagato,
-
-[LOVE1_H]
-ma gruppi di uomini diventano avidi.
-
-[LOVE1_C]
-Un personaggio chiave, un vecchietto orientale che conosco,
-
-[LOVE1_I]
-è ostaggio di alcuni sud-americani in Aspatria.
-
-[MEA4_D]
-Ho preso accordi per vederlo...
-
-[MEA4_B4]
-Ti manda Marty, eh? OK, mostrerò a quello schifoso il significato della parola affari.
-
-[MEA4_B5]
-Carl, ciao! Mi, uh, mi serve più tempo per pagarti.
-
-[MEA1_B4]
-Ah, ti manda il signor Chonk, vero? Andiamo a fargli un visita.
-
-[HM5_6]
-Andiamo a spaccare qualche cranio...
-
-[LOVE1_5]
-~g~Non perdere altro tempo, procurati un'auto dei Colombiani e salva il socio di Love.
-
-[AS1_D]
-~w~Agisci da esca e fatti inseguire dai plotoni d'esecuzione fino a Pike Creek
-
-[AS1_E]
-~w~dove i miei uomini li aspetteranno.
-
-[AS2_C]
-~w~Il Cartello ha un negozio di copertura, la compagnia Kappa Coffee House.
-
-[AS2_E]
-~w~Non abbiamo scelta, dobbiamo mettere questi spacciatori ambulanti fuori combattimento.
-
-[AS2_F]
-~w~Riducili in poltiglia!!
-
-[AS2_A1]
-~w~Miguel ha di certo un po' di quella famosa prestanza latina.
-
-[AS2_A2]
-~w~Io non ce la faccio più.
-
-[SIREN_3]
-Per attivare la sirena di questo veicolo premi il ~h~tasto ~k~~VEHICLE_HORN~~w~.
-
-[SIREN_4]
-Per attivare la sirena di questo veicolo premi il ~h~tasto ~k~~VEHICLE_HORN~~w~.
-
-[AS3_C]
-~w~Eeeeyooo! Cos'è quella roba gialla e collosa?
-
-[AS3_C1]
-~w~Oh, ciao pupa.
-
-[AS3_F]
-~w~Ha un talento naturale questa ragazza.
-
-[AS3_F1]
-~w~È riuscita a strappare questa perla al nostro ospite.
-
-[AS3_G]
-~w~C'è un aereo in arrivo all'aeroporto internazionale Francis in 2 ore.
-
-[AS3_G1]
-~w~È pieno del veleno di Catalina.
-
-[AS3_H]
-~w~Puoi evitare la sicurezza dell'aeroporto andando in barca vicino alle boe di segnalazione della pista di atterraggio
-
-[AS3_H1]
-e abbattendo l'aereo quando si avvicina.
-
-[AS3_I]
-~w~Raccogli il carico dalle macerie!
-
-[AS3_J]
-~w~Oh, adesso fa attenzione, OK baby?
-
-[AS3_K]
-~w~Adesso prova l'olio di chili...
-
-[RM2_F1]
-Quei Colombiani dovrebbero essere qui a momenti!
-
-[RM2_K]
-Maledizione, sono arrivati!!! CARICA LE ARMI!!!
-
-[LOVE2_7]
-~g~Adesso abbandona l'auto!
-
-[LOVE2_8]
-~g~Ora allontanati da Newport!
-
-[AM1_F]
-Salvatore Leone lascerà Luigi's all'incirca alle ~1~:~1~.
-
-[LOVE5_C]
-Voglio che tu lo segua che ti accerti che lui e il mio pacco giungano a Pine Creex illesi.
-
-[FESZ_SR]
-Salvataggio fallito! Controlla la memory card (PS2) nell'ingresso MEMORY CARD 1 e riprova.
-
-[FESZ_FO]
-Vuoi formattare la memory card (PS2) nell'ingresso MEMORY CARD 1?
-
-[FELZ_FO]
-La memory card (PS2) nell'ingresso MEMORY CARD 1 non è formattata.
-
-[FES_NOC]
-Nessuna memory card (PS2) nell'ingresso MEMORY CARD 1.
-
-[FES_LOE]
-Caricamento fallito! Controlla la memory card (PS2) nell'ingresso MEMORY CARD 1 e riprova.
-
-[FES_DEE]
-Eliminazione fallita! Controlla la memory card (PS2) nell'ingresso MEMORY CARD 1 e riprova.
-
-[FORSUC]
-Formattazione della memory card (PS2) nell'ingresso MEMORY CARD 1 completata.
-
-[ERFOUN]
-Formattazione della memory card (PS2) nell'ingresso MEMORY CARD 1 fallita.
-
-[ERMCNP]
-Nessuna memory card (PS2) nell'ingresso MEMORY CARD 1.
-
-[SVMEM1]
-Salva sulla memory card (PS2) nell'ingresso MEMORY CARD 1.
-
-[FORSLO]
-Formatta la memory card (PS2) nell'ingresso MEMORY CARD 1.
-
-[SLONFM]
-Errore di formattazione della memory card (PS2) nell'ingresso MEMORY CARD 1.
-
-[SLONDR]
-Spazio insufficiente. Inserire una memory card (PS2) con almeno 500KB di spazio libero nell'ingresso MEMORY CARD 1.
-
-[SLNSP]
-Spazio insufficiente. Inserire una memory card (PS2) con almeno 200KB di spazio libero nell'ingresso MEMORY CARD 1.
-
-[FEFD_WR]
-Formattazione della memory card (PS2) nell'ingresso MEMORY CARD 1. Non rimuovere la memory card (PS2), riavviare o spegnere la console.
-
-[FES_ISF]
-NON PRESENTE
-
-[FES_SAG]
-PRESENTE
-
-[SLONNO]
-Nessuna memory card (PS2) nell'ingresso MEMORY CARD 1.
-
-[SLONNF]
-Memory card (PS2) nell'ingresso MEMORY CARD 1 non formattata.
-
-[FESZ_FM]
-Memory card (PS2) nell'ingresso MEMORY CARD 1 non formattata. Vuoi formattare la memory card (PS2) nell'ingresso MEMORY CARD 1?
-
-[FESZ_FF]
-Formattazione fallita! Controlla la memory card (PS2) nell'ingresso MEMORY CARD 1 e riprova.
-
-[MCDNSP]
-Spazio insufficiente sulla memory card (PS2) nell'ingresso MEMORY CARD 1. Sono necessari almeno 500KB di spazio libero. Si desidera procedere? (SÌ o NO)
-
-[MCGNSP]
-Spazio insufficiente sulla memory card (PS2) nell'ingresso MEMORY CARD 1. Sono necessari almeno 200KB di spazio libero. Si desidera procedere? (SÌ o NO)
-
-[FESZ_WR]
-Salvataggio dati. Non rimuovere la memory card (PS2) dall'ingresso MEMORY CARD 1, riavviare o spegnere la console.
-
-[FESZ_OW]
-Sovrascrittura dati. Non rimuovere la memory card (PS2) dall'ingresso MEMORY CARD 1, riavviare o spegnere la console.
-
-[FELD_WR]
-Caricamento dati. Non rimuovere la memory card (PS2) dall'ingresso MEMORY CARD 1, riavviare o spegnere la console.
-
-[FEDL_WR]
-Eliminazione dati. Non rimuovere la memory card (PS2) dall'ingresso MEMORY CARD 1, riavviare o spegnere la console.
-
-[LM2_C]
-Luigi dice di, di darti questo, quindi...
-
-[LM3_G]
-Joey non è tipo da aspettare: ricorda, questa è la tua grande occasione...
-
-[LM5_E]
-Portane più che puoi prima che gli sbirri si bevano tutto lo stipendio.
-
-[JM5_C]
-OK, c'è un'auto con ripieno di cadavere al bar vicino Callahan Point.
-
-[RM2_B]
-Abbiamo visto i casini in Nicaragua, ai tempi in cui la nazione aveva ancora un senso.
-
-[RM2_C]
-Qualche bastardo del Cartello l'ha maltrattato ieri e ha detto che ritornerà oggi per la sua merce.
-
-[RM2_D1]
-Andrei io, ma la mia vecchia sciatica si fa sentire -cough cough- quindi, uhh, in bocca al lupo.
-
-[CATINF1]
-~g~Prendi Catalina!
-
-[CATINF2]
-~g~Segui l'elicottero per trovare Catalina.
-
-[BOATIN1]
-Salta su una barca e premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per entrare.
-
-[BOATIN2]
-Se sei vicino a una barca, puoi premere il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per tirarla verso di te.
-
-[BOATIN3]
-Salta su una barca e premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per entrare.
-
-[BOATIN4]
-Se sei vicino a una barca, puoi premere il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per tirarla verso di te.
-
-[JM6]
-'LA PARTENZA'
-
-[FM1]
-L'AUTISTA
-
-[JM1]
-'L'ULTIMA CENA DI MIKE 'LABBRA''
-
-[FM21]
-'BOMBARDA LA BASE: ATTO PRIMO'
-
-[FM3]
-'BOMBARDA LA BASE: ATTO SECONDO'
-
-[AM1]
-'SAYONARA SALVATORE'
-
-[AM2]
-'SOTTO SORVEGLIANZA'
-
-[KM2]
-'GRAND THEFT AUTO'
-
-[AS3]
-'S.A.M.'
-
-[RM2]
-'A CORTO D'ARMI'
-
-[LOVE6]
-'TRANELLO'
-
-[LOVE1]
-'LIBERATORE'
-
-[RC1]
-'DISTRUZIONE DEI DIABLO'
-
-[RC2]
-'MASSACRO MAFIOSO'
-
-[RC3]
-'CALAMITÀ AL CASINÒ'
-
-[RC4]
-'LA FURIA DI RUMPO'
-
-[RM2_E1]
-Non posso credere che quei bastardi musi gialli se ne siano andati lasciandomi di nuovo senza copertura!
-
-[GREN_1]
-Quanto più a lungo tieni premuto il ~h~tasto ~k~~PED_FIREWEAPON~~w~, tanto più lontano lancerai la granata.
-
-[GREN_2]
-Quanto più a lungo tieni premuto il ~h~tasto ~k~~PED_FIREWEAPON~~w~, tanto più lontano lancerai la granata.
-
-[GREN_3]
-Quanto più a lungo tieni premuto il ~h~tasto ~k~~PED_FIREWEAPON~~w~, tanto più lontano lancerai la granata.
-
-[LOVE4_G]
-Le mie proprietà ti aspettano all'interno dell'aereo nell'hangar doganale.
-
-[KABOOM]
-KABOOOM!
-
-[SPLAT]
-SPIACCICATO!
-
-[PANCAK]
-SCHIACCIATO!
-
-[SOAKED]
-ANNEGATO!
-
-[HEAD]
-Head Radio
-
-[DBL_CLF]
-Double Clef FM
-
-[FLASHB]
-Flashback FM
-
-[RISE]
-Rise FM
-
-[LIPS]
-Lips 106
-
-[CHAT]
-Chatterbox FM
-
-[K_JAH]
-K-Jah Radio
-
-[GAM_FM]
-Game Radio FM
-
-[MSX_FM]
-MSX FM
-
-[TUBE1]
-Quando aprirà la metropolitana potrai prendere un treno verso Staunton Island.
-
-[TUBE2]
-Quando aprirà Shoreside Vale potrai uscire dallo Shoreside terminal verso l'aeroporto internazionale Francis.
-
-[TUBE_2]
-Per salire sulla metropolitana, premi il ~h~tasto 'entra nel veicolo'~w~.
-
-[LEGAL]
-~g~Elimina la minaccia criminale!
-
-[GA_2]
-Motore nuovo e carrozzeria riverniciata. Gli sbirri non ti riconosceranno!
-
-[LM1_8A]
-Per guadagnare qualche soldo extra, perché non 'prendere in prestito' un taxi...
-
-[TAXIH1]
-Fermati vicino a un pedone evidenziato per farlo salire a bordo e portarlo a destinazione prima che scada il tempo.
-
-[LM5_7]
-~g~Se ci sono meno di quattro ragazze alla ~p~festa degli sbirri~g~, Luigi sarà nero!
-
-[KM2_3]
-~g~Ricorda, le ~r~macchine~g~ devono essere in condizioni eccellenti per essere accolte nel ~p~garage~g~.
-
-[KM5_2]
-~g~Uno Yardie è in giro per strada.
-
-[BETRA_A]
-Scusa baby.
-
-[BETRA_B]
-Sono una ragazza ambiziosa e tu,
-
-[BETRA_C]
-sei una mezza calzetta.
-
-[JAILB_C]
-Nessun dettaglio è stato fornito riguardo i prigionieri che venivano trasferiti dalla scorta,
-
-[JAILB_E]
-La scorta aveva lasciato la centrale di polizia questa mattina presto...
-
-[JAILB_F]
-per un trasferimento ordinario verso il penitenziario di Liberty.
-
-[JAILB_G]
-L'attacco è avvenuto sul ponte Callahan,
-
-[JAILB_I]
-Alcuni dei detenuti sembrerebbero essere deceduti a seguito dell'esplosione...
-
-[JAILB_P]
-questo disastro lascia Portland isolata dal resto della città.
-
-[JAILB_Q]
-Forza!
-
-[JAILB_R]
-Signor stronzo!
-
-[JAILB_S]
-Non è un problema ucciderti.
-
-[JAILB_T]
-Te ne pentirai.
-
-[JAILB_U]
-Va bene, va bene. Sparisci.
-
-[HELP15]
-Quando sei a piedi, premi il ~h~tasto ~k~~PED_LOOKBEHIND~~w~ per ~h~guardare indietro~w~.
-
-[FEC_LB3]
-Guarda indietro
-
-[FEC_R3]
-(tasto R3)
-
-[FES_AFO]
-Questa memory card (PS2) è già formattata.
-
-[FEA_UP]
-;
-
-[FEA_DO]
-=
-
-[FEA_LE]
-<
-
-[FEA_RI]
->
-
-[FEDSAS3]
-- CAMBIA SELEZIONE
-
-[FEDSAS4]
-;=<> - CAMBIA SELEZIONE
-
-[SPRAY_4]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare col cannone ad acqua.
-
-[SPRAY_1]
-Usa il ~h~tasto ~k~~PED_FIREWEAPON~~w~ per sparare col cannone ad acqua.
-
-[LITTLE]
-LITTLE T
-
-[NICK]
-NICK LOVE
-
-[AM1_10]
-Salvatore uscirà da Luigi's attorno alle 0~1~:~1~.
-
-[JAILB_V]
-La città di Liberty è sotto shock.
-
-[JAILB_A]
-Mentre la polizia e i servizi di emergenza affrontano le conseguenze...
-
-[JAILB_B]
-di un devastante attacco alla scorta avvenuto questa mattina.
-
-[JAILB_W]
-Rivelazioni sulla professionalità dell'attacco hanno sconvolto le forze dell'ordine,
-
-[JAILB_K]
-Inoltre, l'identificazione dei detenuti scomparsi è stata ulteriormente ostacolata...
-
-[JAILB_L]
-da un attacco informatico al computer principale della centrale di Polizia.
-
-[JAILB_M]
-Il Sindaco O'Donovan ha dichiarato che la polizia considera l'attentato...
-
-[JAILB_N]
-*
-
-[JAILB_O]
-Considerato il ritardo nella costruzione del sottopassaggio Porter,
-
-[JAILB_X]
-In un'affermazione resa nota ieri,
-
-[FEDS_SE]
-Tasto / - SELEZIONA
-
-[FEDS_SB]
-Tasto / - SELEZIONA Tasto " - INDIETRO
-
-[TM4_A]
-~w~Oh, sei te. TONI non è qua.
-
-[TM4_A2]
-~w~Ma ha lasciato una delle sue dolci lettere per te.
-
-[DIAB2_A]
-Ho iniziato a lavorare nel business dell'intrattenimento solo grazie al voluminoso contenuto dei miei pantaloni di pelle!
-
-[LM5_9]
-RAGAZZE:
-
-[PERPIC]
-Pacchetti speciali recuperati
-
-[CO_ONE]
-Pacchetto speciale ~1~ su ~1~
-
-[LOVE3_3]
-~g~L'aeroplano ha fatto cadere ~1~ dei 6 pacchi.
-
-[FARE11]
-~g~Destinazione: ~w~'il cantiere costruzioni'~g~ a Fort Staunton.
-
-[GA_21]
-Non puoi parcheggiare altri veicoli in questo garage.
-
-[CHEAT1]
-Trucco attivato
-
-[CHEAT2]
-Trucco armi
-
-[CHEAT3]
-Trucco salute
-
-[CHEAT4]
-Trucco armatura
-
-[CHEAT5]
-Trucco livello di sospetto
-
-[CHEAT6]
-Trucco soldi
-
-[CHEAT7]
-Trucco tempo atmosferico
-
-[AS1_H]
-~r~Hai fallito nel far cadere la squadra della morte nella trappola della Yakuza!!!
-
-[FEDS_BA]
-Tasto " - INDIETRO
-
-[RAMP_A]
-TUTTE LE VIOLENZE COMPLETATE!
-
-[USJ_ALL]
-TUTTE LE ACROBAZIE UNICHE COMPLETATE
-
-[FARE23]
-~g~Destinazione: ~w~'Garage importazioni-esportazioni' ~g~nel distretto della diga Cochrane.
-
-[L_TRN_1]
-Puoi prendere il treno sopraelevato a Portland. Premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per ~h~entrare~w~ o ~h~uscire~w~ da un vagone.
-
-[L_TRN_2]
-Puoi prendere il treno sopraelevato a Portland. Premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per ~h~entrare~w~ o ~h~uscire~w~ da un vagone.
-
-[S_TRN_1]
-Puoi prendere la metropolitana attraverso Liberty. Premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per ~h~entrare~w~ o ~h~uscire~w~ da un vagone.
-
-[S_TRN_2]
-Puoi prendere la metropolitana attraverso Liberty. Premi il ~h~tasto ~k~~VEHICLE_ENTER_EXIT~~w~ per ~h~entrare~w~ o ~h~uscire~w~ da un vagone.
-
-[AS1_C]
-~w~Ha tre squadre della morte in giro per Liberty il cui unico scopo è beccarti.
-
-[AS1_G]
-~r~Tutti i membri della Yakuza sono morti!!!
-
-[JAN]
-Gen
-
-[FEB]
-Feb
-
-[MAR]
-Mar
-
-[APR]
-Apr
-
-[MAY]
-Mag
-
-[JUN]
-Giu
-
-[JUL]
-Lug
-
-[AUG]
-Ago
-
-[SEP]
-Set
-
-[OCT]
-Ott
-
-[NOV]
-Nov
-
-[DEC]
-Dic
-
-[DEFDT]
-Nessun salvataggio valido
-
-[BUGGY]
-MAGGIOLINI RIMASTI:
-
-[BONUS]
-~g~BONUS $~1~$
-
-[HORN1]
-Premi il ~h~tasto L3~w~ per suonare il ~h~clacson~w~.
-
-[HORN2]
-Premi il ~h~tasto L1~w~ per suonare il ~h~clacson~w~.
-
-[HORN3]
-Premi il ~h~tasto R1~w~ per suonare il ~h~clacson~w~.
-
-[LM3_1A]
-Premi il ~h~tasto ~k~~VEHICLE_HORN~~w~ per suonare il ~h~clacson~w~ e avvertire Misty che sei arrivato.
-
-[LM3_1B]
-Premi il ~h~tasto ~k~~VEHICLE_HORN~~w~ per suonare il ~h~clacson~w~ e avvertire Misty che sei arrivato.
-
-[LM3_1C]
-Premi il ~h~tasto ~k~~VEHICLE_HORN~~w~ per suonare il ~h~clacson~w~ e avvertire Misty che sei arrivato.
-
-[RADIO_A]
-Premi il ~h~tasto ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ per passare in rassegna le ~h~stazioni radio~w~.
-
-[RADIO_B]
-Premi il ~h~tasto ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ per passare in rassegna le ~h~stazioni radio~w~.
-
-[RADIO_C]
-Premi il ~h~tasto ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ per passare in rassegna le ~h~stazioni radio~w~.
-
-[RADIO_D]
-Premi il ~h~tasto ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ per passare in rassegna le ~h~stazioni radio~w~.
-
-[FEC_EXV]
-Entra o esci dal veicolo
-
-[TAXI_M]
-'TAXISTA'
-
-[COP_M]
-'VIGILANTE'
-
-[FIRE_M]
-'POMPIERE'
-
-[AMBUL_M]
-'PARAMEDICO'
-
-[HJ_IS]
-BONUS ACROBAZIA FOLLE: ~1~$
-
-[HJ_PIS]
-BONUS ACROBAZIA FOLLE PERFETTA: $~1~
-
-[HJ_DIS]
-BONUS DOPPIA ACROBAZIA FOLLE: $~1~
-
-[HJ_PDIS]
-BONUS DOPPIA ACROBAZIA FOLLE PERFETTA: $~1~
-
-[HJ_TIS]
-BONUS TRIPLA ACROBAZIA FOLLE: $~1~
-
-[HJ_PTIS]
-BONUS TRIPLA ACROBAZIA FOLLE PERFETTA: $~1~
-
-[HJ_QIS]
-BONUS QUADRUPLA ACROBAZIA FOLLE: $~1~
-
-[HJ_PQIS]
-BONUS QUADRUPLA ACROBAZIA FOLLE PERFETTA: $~1~
-
-[AM1_K]
-Salvatore Leone uscirà da Luigi's fra circa tre ore. (0~1~:~1~)
-
-[IMPEXPP]
-Garage importazioni-esportazioni, porto di Portland. Abbiamo richieste per vari mezzi: consulta la bacheca per le saperne di più.
-
-[VANHSTP]
-Hai scassinato altre Securicar? Portale al nostro garage al porto di Portland.
-
-[EMVHPUP]
-Ottimi prezzi per veicoli di soccorso nuovi o usati. Portali vicino alla gru a nord est del porto di Portland.
-
-[STANDS]
-CHIOSCHI DISTRUTTI:
-
-[STASH]
-~g~Nascondi lo SPANK nel ~p~cantiere edile~g~!
-
-[MCSTNS]
-Nessuna memory card (PS2) nell'ingresso MEMORY CARD 1. Vuoi procedere comunque? (SÌ o NO)
-
-[LOVE3_5]
-~g~L'aeroplano è a tiro.
-
-[LOVE3_6]
-~r~La polizia è arrivata ai pacchi per prima!
-
-[SIREN_1]
-Per accendere le sirene di questo veicolo, premi il ~h~tasto ~k~~VEHICLE_HORN~~w~.
-
-[SIREN_2]
-Per accendere le sirene di questo veicolo, premi il ~h~tasto ~k~~VEHICLE_HORN~~w~.
-
-[FM3_8C]
-~w~Avrò bisogno di 100.000$ per coprire le spese,
-
-[MCLOAD]
-Caricamento dati. Non rimuovere la memory card (PS2) dall'ingresso MEMORY CARD 1, riavviare o spegnere la console.
-
-[FES_GME]
-Errore di lettura della memory card (PS2) nell'ingresso MEMORY CARD 1! Controlla la memory card (PS2) e riprova.
-
-[FESZ_QF]
-Sei sicuro di voler formattare la memory card (PS2) nell'ingresso MEMORY CARD 1?
-
-[FESZ_LS]
-Caricamento riuscito.
-
-[RM3_5]
-~g~Hai raccolto ~1~ su 6 prove.
-
-[LOVE3_2]
-~g~Hai tutti i pacchi! Riportali subito a Donald Love.
-
-[LOVE4_4]
-~g~Riporta il pacco a Donald Love.
-
-[FEDS_AM]
-<>-CAMBIA MENU
-
-[FEB_SAV]
-Carica
-
-[FEP_SAV]
-CARICA PARTITA
-
-[AS2_12A]
-~g~Dopo aver distrutto il primo chiosco, avrai 8 minuti prima che il Cartello informi i propri spacciatori!
-
-[AS3_1A]
-~g~Adesso raggiungi la ~b~boa segnalatrice~g~!
-
-[NOCONT]
-Ricollega il controller analogico (DUALSHOCK#) o controller analogico (DUALSHOCK#2) all'ingresso controller 1 per continuare.
-
-[BET_JB]
-TRADITO DALLA SUA AMANTE CATALANA E ABBANDONATO MEZZO MORTO. GIUDICATO COLPEVOLE, INIZIA LA SUA AVVENTURA NEL PENITENZIARIO DELLA CITTÀ DI LIBERTY. HA UN SOLO PENSIERO FISSO NELLA TESTA... LA VENDETTA!
-
-[END_A]
-I residenti in Cedar Grove si sono finalmente ripresi
-
-[END_B]
-dallo spavento per i violenti scontri
-
-[END_C]
-avvenuti ieri nell'area.
-
-[END_D]
-Un abitante della zona, Clive Denver, ha dichiarato alla polizia
-
-[END_E]
-di aver visto un uomo armato che sia allontanava dalla scena del crimine con una donna dai capelli neri.
-
-[END_F]
-Oh, lo sai, vedrai che ci divertiremo, perché lo sai, cioè,
-
-[END_G]
-io ti amo, io... io ti amo davvero perché sei un vero uomo
-
-[END_H]
-ed è ciò di cui ho bisogno.
-
-[END_I]
-Comunque, cosa stavo dicendo?
-
-[END_J]
-Oh, lo sai, me lo sono dimenticato. Sai com'è che succede, vero?
-
-[END_K]
-Il suono delle esplosioni ha fatto tremare le case mentre la gente correva al riparo.
-
-[END_L]
-Molti cittadini sono rimasti feriti per il panico mentre venivano sparati colpi
-
-[END_M]
-tra le forze terrestri e l'elicottero che sorvolava la diga.
-
-[END_N]
-Sì, c'è proprio una bella vista da qui in giardino.
-
-[END_O]
-Quando hanno fatto saltare l'elicottero
-
-[END_P]
-è stato meglio dei fuochi d'artificio del 4 luglio.
-
-[END_Q]
-Il numero di cadaveri recuperati ha già superato la ventina,
-
-[END_R]
-ma la polizia continua a trovare nuovi corpi.
-
-[END_S]
-Non sono state smentite le voci secondo cui
-
-[END_T]
-i morti appartenessero al Cartello Colombiano,
-
-[END_U]
-ciò nonostante, non ci sono indizi sulle ragioni di questa strage.
-
-[END_V]
-Mi sono rotta un'unghia e i miei capelli sono un disastro. Ma ci puoi credere?
-
-[END_W]
-Mi è costato 50 dollari...
-
-[PAPER1]
-CRIMINALE FERITO DALLA FIDANZATA COMPLICE. LA CORTE GIUDICA IL RAPINATORE COLPEVOLE CON VERDETTO UNANIME.
-
-[PAPER2]
-DIECI ANNI PER L'AMORE!
-
-[JAILB_J]
-che è seguita all'attacco iniziale.
-
-[JAILB_D]
-E nessun gruppo ha rivendicato l'attentato.
-
-[JAILB_H]
-lasciando pochi testimoni e il ponte stesso seriamente danneggiato.
-
-[FEB_CPC]
-Configurazione comandi
-
-[FEC_PED]
-Comandi a piedi
-
-[FEC_VEH]
-Comandi in un veicolo
-
-[FEC_FPR]
-Comandi in prima persona
-
-[FEC_CMM]
-Comandi comuni
-
-[FEC_PWL]
-Cammina a sinistra
-
-[FEC_PWR]
-Cammina a destra
-
-[FEC_PWF]
-Cammina in avanti
-
-[FEC_PWT]
-Cammina verso la telecamera
-
-[FEC_PLB]
-Guardati indietro
-
-[FEC_PFR]
-Spara con l'arma
-
-[FEC_CLE]
-Arma precedente
-
-[FEC_CRI]
-Arma successiva
-
-[FEC_LKT]
-Aggancia bersaglio
-
-[FEC_PJP]
-Salto Ped
-
-[FEC_PSP]
-Scatto Ped
-
-[FEC_PSH]
-Sparo Ped
-
-[FEC_TLF]
-Bersaglio successivo a sinistra
-
-[FEC_TRG]
-Bersaglio successivo a destra
-
-[FEC_CCM]
-Centra visuale dietro al giocatore
-
-[FEC_SZI]
-Ingrandimento fucile di precisione
-
-[FEC_SZO]
-Riduzione fucile di precisione
-
-[FEC_LKL]
-Sguardo a sinistra
-
-[FEC_LRT]
-Sguardo a destra
-
-[FEC_LUP]
-Sguardo verso l'alto
-
-[FEC_LDN]
-Sguardo verso il basso
-
-[FEC_LBH]
-Guarda dietro al veicolo
-
-[FEC_LLF]
-Guarda a sinistra del veicolo
-
-[FEC_LRG]
-Guarda a destra del veicolo
-
-[FEC_HRN]
-Clacson
-
-[FEC_HBR]
-Freno a mano
-
-[FEC_ACL]
-Acceleratore
-
-[FEC_BRK]
-Freno
-
-[FEC_TSM]
-Attiva/Disattiva sottomissioni
-
-[FEC_CRD]
-Cambia stazione radio
-
-[FEC_ENT]
-Entra/Esci da un veicolo
-
-[FEC_WPN]
-Spara con l'arma
-
-[FEC_PAS]
-Pausa
-
-[FEC_FPO]
-Attiva/Disattiva visuale di puntamento
-
-[FEC_SMS]
-Mostra/Nascondi puntatore del mouse
-
-[FEC_CMS]
-Cambia la modalità di visuale in qualsiasi situazione
-
-[FEC_TSS]
-Salva un'immagine di gioco
-
-[FEN_NET]
-Rete
-
-[FEN_CON]
-Connessione
-
-[FEN_GAM]
-Trova partite
-
-[FEN_TYP]
-Modalità
-
-[FEN_TY0]
-Deathmatch
-
-[FEN_TY1]
-Deathmatch stealth
-
-[FEN_TY2]
-Deathmatch a squadre
-
-[FEN_TY3]
-Deathmatch stealth a squadre
-
-[FEN_TY4]
-Accumula denaro
-
-[FEN_TY5]
-Cattura la bandiera
-
-[FEN_TY6]
-Rat Race
-
-[FEN_TY7]
-Dominazione
-
-[FEN_NAM]
-Nome:
-
-[FEN_GNA]
-Nome partita:
-
-[FEM_MAP]
-Seleziona mappa
-
-[FEN_PLS]
-Impostazioni giocatore
-
-[FEN_PLC]
-Colore giocatore
-
-[FEM_MA0]
-Città di Liberty
-
-[FEM_MA1]
-Luci rosse
-
-[FEM_MA2]
-Chinatown
-
-[FEM_MA3]
-La torre
-
-[FEM_MA4]
-Le fogne
-
-[FEM_MA5]
-Area industriale
-
-[FEM_MA6]
-Porto
-
-[FEM_MA7]
-Staunton
-
-[FEC_EMS]
-Un tasto può essere assegnato a un solo comando!
-
-[FEC_DBG]
-Menu debug
-
-[FEC_TGD]
-Pad game/Debug
-
-[FEC_TDO]
-Disabilita visuale debug
-
-[FEC_IVH]
-Inverti mouse orizzontalmente
-
-[FEC_MSL]
-PULSANTE SX
-
-[FEC_MSM]
-PULSANTE CEN
-
-[FEC_MSR]
-PULSANTE DX
-
-[FEC_QUE]
-???
-
-[FEC_TWO]
-Un massimo di due tasti per comando.
-
-[FEC_UMS]
-Un pulsante del mouse può essere assegnato a un solo comando!
-
-[FEC_OMS]
-Solo un pulsante del mouse.
-
-[FEC_UJS]
-Un pulsante del joystick può essere usato per un solo comando!
-
-[FEC_OJS]
-Solo un pulsante del joystick.
-
-[FEC_PTL]
-Usa Aggancia bersaglio con Arma precedente
-
-[FEC_PTR]
-Usa Aggancia bersaglio con Arma successiva
-
-[FEC_LBC]
-Usa Guarda a sinistra con Guarda a destra
-
-[FEC_JBO]
-JOY ~1~
-
-[NO_PAUZ]
-Pausa non disponibile in modalità multigiocatore. Premi ancora per uscire.
-
-[FEM_SL1]
-Blocco 1 libero
-
-[FEM_SL2]
-Blocco 2 libero
-
-[FEM_SL3]
-Blocco 3 libero
-
-[FEM_SL4]
-Blocco 4 libero
-
-[FEM_SL5]
-Blocco 5 libero
-
-[FEM_SL6]
-Blocco 6 libero
-
-[FEM_SL7]
-Blocco 7 libero
-
-[FEM_SL8]
-Blocco 8 libero
-
-[FEM_MM]
-MENU PRINCIPALE
-
-[FEM_SNG]
-Nuova partita
-
-[FEM_QTW]
-Esci
-
-[FEQ_SRE]
-Sei sicuro di voler uscire? Tutti i progressi dall'ultimo salvataggio verranno persi. Vuoi procedere?
-
-[FEQ_SRW]
-Sei sicuro di voler uscire dal gioco?
-
-[FEG_SRV]
-SERVER
-
-[FEG_MAP]
-MAPPA
-
-[FEG_PLY]
-GIOCATORI
-
-[FEG_TYP]
-MODALITÀ
-
-[FEG_PNG]
-PING
-
-[FET_FG]
-TROVA PARTITA
-
-[FET_SP]
-GIOCATORE SINGOLO
-
-[FET_MP]
-MULTIGIOCATORE
-
-[FET_HG]
-OSPITA PARTITA
-
-[FET_PS]
-IMPOSTAZIONI GIOCATORE
-
-[FET_CON]
-CONNESSIONE
-
-[FET_AUD]
-IMPOSTAZIONI AUDIO
-
-[FET_GFX]
-IMPOSTAZIONI GRAFICA
-
-[FET_DIS]
-IMPOSTAZIONI VIDEO
-
-[FET_LAN]
-IMPOSTAZIONI LINGUA
-
-[FET_LG]
-CARICA PARTITA
-
-[FET_DG]
-ELIMINA PARTITA
-
-[FET_NG]
-NUOVA PARTITA
-
-[FET_SG]
-SALVA PARTITA
-
-[FET_MAP]
-SELEZIONA MAPPA
-
-[FET_GT]
-MODALITÀ DI GIOCO
-
-[FET_CTL]
-IMPOSTAZIONI DEI COMANDI
-
-[FET_OPT]
-OPZIONI
-
-[FET_QG]
-ESCI DAL GIOCO
-
-[FET_STA]
-STATISTICHE
-
-[FET_BRE]
-MISSIONI
-
-[FEC_WAR]
-Attenzione
-
-[FEC_OKK]
-OK
-
-[FED_CON]
-Conferma eliminazione file
-
-[FES_SSC]
-Partita salvata con successo
-
-[DEL_FNM]
-File eliminato con successo.
-
-[PCLOAD]
-Caricamento dati in corso
-
-[PCRESRT]
-Riavvio di Grand Theft Auto III
-
-[FEC_DLF]
-Eliminazione fallita.
-
-[FEC_SVU]
-Salvataggio fallito.
-
-[FEC_LUN]
-Caricamento fallito. File corrotto: è necessario eliminarlo.
-
-[FEN_PLA]
-Numero di giocatori:
-
-[FET_NON]
-NESSUNA PARTITA DISPONIBILE
-
-[FET_SFG]
-RICERCA DI PARTITE...
-
-[FET_SRT]
-CLASSIFICAZIONE PARTITE...
-
-[FEF_LAN]
-LAN
-
-[FEF_INT]
-INTERNET
-
-[FET_REF]
-Aggiorna
-
-[FET_FIL]
-Filtra
-
-[FET_JG]
-Partecipa
-
-[FEC_NTW]
-Talk To Network
-
-[FEC_ESR]
-Il tasto ESC è riservato
-
-[FEC_GSL]
-Show head bob:
-
-[FIL_FLT]
-FILTRA ELENCO PARTITE
-
-[FET_SAN]
-NUOVA PARTITA
-
-[FIL_MAP]
-Mappa:
-
-[FIL_SRV]
-Server:
-
-[FIL_TYP]
-Modalità:
-
-[FIL_SPC]
-Partite non piene?
-
-[FIL_PNG]
-Ping:
-
-[FEN_UKH]
-Host sconosciuto
-
-[FEN_UKM]
-Mappa non trovata
-
-[FEN_UKT]
-Modalità non trovata
-
-[FEN_NCI]
-NON CONNESSO A INTERNET
-
-[FET_PAU]
-MENU PAUSA
-
-[FET_SGA]
-AVVIA PARTITA
-
-[FEC_SGJ]
-Imposta joystick
-
-[FEC_PAD]
-Gamepad
-
-[FEC_JOY]
-Joystick
-
-[FEC_WHL]
-Volante
-
-[FEC_CNT]
-Periferica di controllo:
-
-[FET_APL]
-APPLICA
-
-[FES_CSA]
-Seleziona una skin dalla seguente lista:
-
-[FES_SKN]
-NOME SKIN
-
-[FES_DAT]
-DATA
-
-[FES_NON]
-NESSUNA SKIN DISPONIBILE
-
-[FEA_FM9]
-RIPRODUTTORE MP3
-
-[FESZ_QZ]
-Sei sicuro di voler salvare la partita?
-
-[FES_CGA]
-Blocchi di gioco disponibili:
-
-[FES_SCG]
-Vuoi salvare la partita attuale?
-
-[FES_LCG]
-Vuoi caricare e continuare la partita?
-
-[FEC_FIR]
-Fuoco
-
-[FEC_NWE]
-Arma successiva
-
-[FEC_PWE]
-Arma precedente
-
-[FEC_FOR]
-Avanti
-
-[FEC_BAC]
-Indietro
-
-[FEC_LEF]
-Sinistra
-
-[FEC_RIG]
-Destra
-
-[FEC_ZIN]
-Ingrandimento
-
-[FEC_ZOT]
-Riduzione
-
-[FEC_EEX]
-Entra/Esci
-
-[FEC_RAD]
-Radio
-
-[FEC_SUB]
-Sottomissioni
-
-[FEC_CMR]
-Cambia visuale
-
-[FEC_JMP]
-Salto
-
-[FEC_SPN]
-Scatto
-
-[FEC_HND]
-Freno a mano
-
-[FEC_TUL]
-Torretta a sx
-
-[FEC_TUR]
-Torretta a dx
-
-[FEC_LOL]
-Guarda a sinistra
-
-[FEC_LOR]
-Guarda a destra
-
-[FEC_NTR]
-Bersaglio successivo
-
-[FEC_PTT]
-Bersaglio precedente
-
-[FEC_LBA]
-Guarda indietro
-
-[FEC_CEN]
-Centra visuale
-
-[FEC_UND]
-(NO)
-
-[FET_CFT]
-A PIEDI
-
-[FET_CCR]
-IN MACCHINA
-
-[CVT_MSG]
-Conversione texture per prestazioni ottimali con la tua scheda video
-
-[FET_CAC]
-AZIONE
-
-[FEC_IBT]
--
-
-[FEC_SPC]
-BARRA
-
-[FEC_MXO]
-P1MX
-
-[FEC_MXT]
-P2MX
-
-[FEC_UNB]
-NESSUNO
-
-[FET_CME]
-METODO DI CONTROLLO
-
-[FET_RDK]
-RIDEFINISCI COMANDI
-
-[FET_AMS]
-IMPOSTAZIONI MOUSE
-
-[FET_STI]
-CONFIGURAZIONE PREDEFINITA
-
-[FET_CTI]
-CONFIGURAZIONE CLASSICA
-
-[FET_MTI]
-CONFIGURAZIONE COL MOUSE
-
-[FET_DAM]
-MODELLAZIONE ACUSTICA DINAMICA
-
-[FEC_TFL]
-Torretta a sinistra
-
-[FEC_TFR]
-Torretta a destra
-
-[FEC_TFU]
-Torretta /Aereo su
-
-[FEC_TFD]
-Torretta /Aereo giù
-
-[FEC_MWF]
-VOLANTE SU
-
-[FEC_MWB]
-VOLANTE GIÙ
-
-[FEC_ORR]
-o
-
-[FEC_NUS]
-NON USATO
-
-[FEC_LUD]
-Sguardo su
-
-[FEC_LDU]
-Sguardo giù
-
-[FEC_CMP]
-COMBO: SGUARDO S+D
-
-[FEC_NTT]
-Nessun testo assegnato a questo tasto
-
-[FEC_FNC]
-F~1~
-
-[FEC_IRT]
-INS
-
-[FEC_DLL]
-CANC
-
-[FEC_HME]
-HOME
-
-[FEC_END]
-FINE
-
-[FEC_PGU]
-PAG SU
-
-[FEC_PGD]
-PAG GIÙ
-
-[FEC_UPA]
-SU
-
-[FEC_DWA]
-GIÙ
-
-[FEC_LFA]
-SINISTRA
-
-[FEC_RFA]
-DESTRA
-
-[FEC_NUM]
-NUM
-
-[FEC_NMN]
-NUM~1~
-
-[FEC_FWS]
-NUM /
-
-[FEC_PLS]
-NUM +
-
-[FEC_MIN]
-NUM -
-
-[FEC_DOT]
-NUM .
-
-[FEC_NLK]
-BLOC NUM
-
-[FEC_ETR]
-INVIO
-
-[FEC_SLK]
-BLOC SCORR
-
-[FEC_PSB]
-PAUSA
-
-[FEC_BSP]
-INDIETRO
-
-[FEC_TAB]
-TAB
-
-[FEC_CLK]
-BLOC MAIUSC
-
-[FEC_RTN]
-RET
-
-[FEC_LSF]
-MAIUSC SX
-
-[FEC_RSF]
-MAIUSC DX
-
-[FEC_LCT]
-CTRL SX
-
-[FEC_RCT]
-CTRL DX
-
-[FEC_LAL]
-ALT SX
-
-[FEC_RAL]
-ALT DX
-
-[FEC_LWD]
-WIN SX
-
-[FEC_RWD]
-WIN DX
-
-[FEC_WRC]
-CLIC WIN
-
-[WIN_TTL]
-Grand Theft Auto III
-
-[WIN_95]
-Grand Theft Auto III non è supportato da Windows 95
-
-[WIN_DX]
-Grand Theft Auto III richiede DirectX versione 8.1 o superiore
-
-[WIN_VDM]
-Grand Theft Auto III richiede almeno 12 MB di memoria video disponibile
-
-[DIAB3_G]
-Arriba!
-
-[FEM_RES]
-RIPRENDI PARTITA
-
-[FES_SNG]
-NUOVA PARTITA
-
-[FEM_SP]
-GIOCATORE SINGOLO
-
-[FEM_MP]
-MULTIGIOCATORE
-
-[FEM_QT]
-ESCI DAL GIOCO
-
-[FES_SG]
-NUOVA PARTITA
-
-[FES_LG]
-CARICA PARTITA
-
-[FEM_HST]
-OSPITA PARTITA
-
-[FEM_OPT]
-OPZIONI
-
-[FEM_DBG]
-DEBUG
-
-[FET_PSU]
-IMPOSTAZIONI GIOCATORE
-
-[FET_DEF]
-RIPRISTINA PREDEFINITI
-
-[FED_BRI]
-LUMINOSITÀ
-
-[FED_TRA]
-TRACCE
-
-[FEM_LOD]
-DISTANZA VISUALE
-
-[FEM_VSC]
-SINCRONIA FRAME
-
-[FEM_FRM]
-LIMITATORE FRAME
-
-[FED_RES]
-RISOLUZIONE
-
-[FED_WIS]
-SCHERMO 16:9
-
-[FEDS_TB]
-INDIETRO
-
-[FEA_MUS]
-VOLUME MUSICA
-
-[FEA_SFX]
-VOLUME EFFETTI
-
-[FEA_RSS]
-STAZIONE RADIO
-
-[FEL_ENG]
-INGLESE
-
-[FEL_FRE]
-FRANCESE
-
-[FEL_GER]
-TEDESCO
-
-[FEL_ITA]
-ITALIANO
-
-[FEL_SPA]
-SPAGNOLO
-
-[FEA_3DH]
-HARDWARE AUDIO
-
-[FEA_SPK]
-CONFIGURAZIONE ALTOPARLANTI
-
-[FEA_2SP]
-DUE CASSE
-
-[FEA_4SP]
-PIÙ DI DUE CASSE
-
-[FEA_EAR]
-CUFFIE
-
-[FEA_NAH]
-NESSUN HARDWARE AUDIO
-
-[FET_SNG]
-NUOVA PARTITA
-
-[FEN_STA]
-AVVIA LA PARTITA
-
-[GMLOAD]
-CARICA PARTITA
-
-[GMSAVE]
-SALVA PARTITA
-
-[FES_DGA]
-ELIMINA PARTITA
-
-[FEM_NON]
-NESSUNO
-
-[FEC_IVV]
-INVERTI MOUSE VERTICALMENTE
-
-[FEC_MSH]
-SENSIBILITÀ MOUSE
-
-[FET_CCN]
-COMANDI: CLASSICO
-
-[FET_SCN]
-COMANDI: PREDEFINITO
-
-[FES_SET]
-USA SKIN
-
-[GHOST]
-Fantasma
-
-[WIN_RSZ]
-Impossibile impostare la nuova risoluzione
-
-[FET_APP]
-PULSANTE SX, INVIO PER APPLICARE LE NUOVE IMPOSTAZIONI
-
-[FET_HRD]
-IMPOSTAZIONI PREDEFINITE RIPRISTINATE
-
-[FET_MST]
-STERZO VIA MOUSE
-
-[FEC_STR]
-NUM ASTERISCO
-
-[FET_MIG]
-SINISTRA, DESTRA, ROTELLA PER MODIFICARE
-
-[FET_CIG]
-INDIETRO PER AZZERARE - PULSANTE SX, INVIO PER MODIFICARE
-
-[FET_RIG]
-SELEZIONA UN NUOVO COMANDO PER QUESTA AZIONE O PREMI ESC PER ANNULLARE
-
-[FET_EIG]
-IMPOSSIBILE ASSEGNARE UN COMANDO A QUESTA AZIONE
-
-[NO_PCCD]
-Inserisci il disco 2 di Grand Theft Auto III nel lettore o premi ESC per annullare
-
-[CVT_ERR]
-Spazio su disco esaurito; è necessario liberare dello spazio prima di poter procedere. Premi ESC per annullare.
-
-[FED_SUB]
-SOTTOTITOLI
-
-[FET_DSN]
-Skin predefinita.bmp
-
-[JM3]
-'RAPINA AL FURGONE'
-
-[EBAL]
-'GIVE ME LIBERTY'
-
-[LM4]
-'ARMI PRONTE ALL'AZIONE'
-
-[ATUTOR2]
-~g~Porta i pazienti all'ospedale! Qualsiasi scossone ridurrà le probabilità che arrivino vivi.
-
-[REPLAY]
-REPLAY
-
-[FEC_SFT]
-MAIUSC
-
-[CRED254]
-RESPONSABILE STUDIO
-
-[CVT_CRT]
-Impossibile convertire le texture per la scheda video. Deve collegarti come Amministratore per poterlo fare. Premi ESC per uscire.
-
-[FEM_ON]
-ON
-
-[FEM_OFF]
-OFF
-
-[FEM_YES]
-SÌ
-
-[FEM_NO]
-NO
-
-[FES_WAR]
-Salvataggio, attendere...
-
-[FED_DLW]
-Eliminazione, attendere...
-
-[FED_LDW]
-Caricamento, attendere...
-
-[FEC_SLC]
-Slot non valido
-
-[FED_LFL]
-Caricamento posizione salvata fallito. Il gioco verrà riavviato.
-
-[FET_RSO]
-RIPRISTINATE IMPOSTAZIONI ORIGINALI
-
-[FET_RSC]
-HARDWARE NON DISPONIBILE - RIPRISTINATE IMPOSTAZIONI ORIGINALI
-
-[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
deleted file mode 100644
index 4598dad5..00000000
--- a/utils/gxt/russian.txt
+++ /dev/null
@@ -1,7979 +0,0 @@
-[1000]
-ТЫ ПОКОЙНИК
-
-[1001]
-ТЫ ПОКОЙНИК
-
-[1002]
-ТЫ ПОКОЙНИК
-
-[1003]
-ТЫ ПОКОЙНИК
-
-[1004]
-ТЫ ПОКОЙНИК
-
-[1005]
-АРЕСТОВАН
-
-[1006]
-АРЕСТОВАН
-
-[1007]
-АРЕСТОВАН
-
-[1008]
-АРЕСТОВАН
-
-[1009]
-АРЕСТОВАН
-
-[1010]
-~r~Твоя тачка перевернулась
-
-[1011]
-~r~Твоя тачка перевернулась
-
-[1012]
-~r~Твоя тачка перевернулась
-
-[1013]
-~r~Твоя тачка перевернулась
-
-[1014]
-~r~Твоя тачка перевернулась
-
-[8001]
-Тебе крупно не повезло!!
-
-[ACCURA]
-Меткость
-
-[AEROPL]
-Самолет
-
-[AIRPORT]
-Аэропорт Фрэнсис
-
-[ALEVEL]
-Скорая помощь. Задание ~1~
-
-[AM1]
-'САЙОНАРА, САЛЬВАТОРЕ'
-
-[AM1_1]
-~g~Сейчас Сальваторе выходит из клуба Луиджи!
-
-[AM1_10]
-~g~Сальваторе уйдет от Луиджи в 0~1~:~1~
-
-[AM1_2]
-~r~Тебя засекли!
-
-[AM1_3]
-~r~Ты упустил Сальваторе!
-
-[AM1_4]
-~r~Кретин, ты его спугнул! Какой ты к черту киллер?
-
-[AM1_5]
-~g~Отправляйся в квартал красных фонарей и жди, когда Сальваторе выйдет из клуба.
-
-[AM1_6]
-~g~Если ты будешь болтаться около клуба Луиджи, то тебя увидит мафия!
-
-[AM1_7]
-~r~Сальваторе дома в безопасности попивает коктейль. Все с тобой ясно, шакал!
-
-[AM1_8]
-~g~Сальваторе уйдет от Луиджи примерно в ~1~:~1~
-
-[AM1_9]
-~r~Сальваторе скрылся в клубе Луиджи!
-
-[AM1_A]
-Нам нужно кое что прояснить, прежде чем начнем налаживать какие-либо отношения,
-
-[AM1_B]
-деловые или нет. Давай раскроем карты.
-
-[AM1_C]
-Я из Якудзы и знаю, что ты работал на семью Сальваторе Леоне.
-
-[AM1_D]
-Я могу дать тебе работу в нашей организации,
-
-[AM1_E]
-но сначала тебе придется доказать, что ты на самом деле порвал с мафией.
-
-[AM1_F]
-Сальваторе Леоне выйдет от Луиджи примерно через три часа. (~1~:~1~)
-
-[AM1_G]
-Постарайся, чтобы он не добрался до дома живым.
-
-[AM1_H]
-Ну а мы с Марией пока вспомним былые времена.
-
-[AM1_I]
-О, Асука, у тебя новый массажист.
-
-[AM1_J]
-Это не массажист.
-
-[AM1_K]
-Сальваторе Леоне выйдет от Луиджи примерно в три часа. (0~1~:~1~)
-
-[AM2]
-'ПОД НАДЗОРОМ'
-
-[AM2_4]
-~g~Они тебя засекли, ты шел как слепой слон!
-
-[AM2_A]
-Смерть Сальваторе - очень приятная новость,
-
-[AM2_A2]
-ты отличный киллер. Мне нравятся такие мужики.
-
-[AM2_B]
-Это мой брат Кенжи.
-
-[AM2_C]
-У Асуки для тебя есть работа, но как только освободишься - загляни ко мне в казино.
-
-[AM2_D]
-Кенжи как всегда тянет руки к моим игрушкам.
-
-[AM2_E]
-Мои люди в полиции собщили, что мафия следит за всеми нашими делами в городе,
-
-[AM2_E2]
-так они пытаются выйти на тебя.
-
-[AM2_F]
-Они мешают нам работать. Нужно устранить эту проблему.
-
-[AM2_G]
-Разберись с этими шпионами-самоучками и прекрати вендетту раз и навсегда.
-
-[AM3]
-'ПРОЩАЙ, ПАПАРАЦЦИ'
-
-[AM3_A]
-Тут один журналист что-то вынюхивает.
-
-[AM3_B]
-Мы с Марией немного отдохнем, пока ты не избавишься от этого назойливого писаки.
-
-[AM3_C]
-Пока ты это читаешь, он, вероятно, в гавани! Угони полицейский катер и 'потопи' его карьеру!
-
-[AM4]
-'ДЕНЬГИ ДЛЯ РЭЯ'
-
-[AM4_10]
-Знаешь, я тоже иногда могу подкинуть работенку.
-
-[AM4_11]
-Если что - ты знаешь, где меня найти.
-
-[AM4_1A]
-Доберись до телефона к западу от парка Бельвиль.
-
-[AM4_1B]
-Доберись до телефона в Учебном городке.
-
-[AM4_1C]
-Доберись до телефона к югу от парка Бельвиль.
-
-[AM4_1D]
-Встречаемся в туалете, расположенном в парке.
-
-[AM4_3]
-Ты, должно быть, новый посыльный Асуки!
-
-[AM4_4]
-Ты принес мне деньги? Это все?
-
-[AM4_5]
-Я знаю, ты думаешь - еще один продажный коп.
-
-[AM4_6]
-Да, мы живем в продажном мире.
-
-[AM4_7]
-Мной занялась служба внутреннего расследования только из-за того, что я потерял двух напарников.
-
-[AM4_8]
-Приходится быть начеку.
-
-[AM4_9]
-Да, весь этот город - одна большая помойная яма.
-
-[AM4_A]
-Да это же мой красавчик!
-
-[AM4_B]
-Мария сейчас очень занята, но я ей передам, что ты заходил.
-
-[AM4_C]
-Асука, кто это? Я бы и сама вышла, но я очень хочу писать, окей?
-
-[AM4_D]
-Ты должен встретиться с моим знакомым копом.
-
-[AM4_E]
-Это деньги за его последнюю работу, что он сделал для нас.
-
-[AM4_F]
-Разумеется, он очень осторожен.
-
-[AM4_G]
-Немедленно отправляйся к телефону-автомату в Торрингтоне и жди его инструкций.
-
-[AM5]
-'ДВУЛИКИЙ ТАННЕР'
-
-[AM5_1]
-Таннер у тебя на хвосте!
-
-[AM5_A]
-Мы с Марией пошли по магазинам.
-
-[AM5_B]
-Мой человек в полиции сообщил, что один из наших водил, на самом деле - полицейский под прикрытием!
-
-[AM5_C]
-Он не вылезает из своей тачки, поэтому мы прикрепили к ней маячок.
-
-[AM5_D]
-Пусти ему кровь!
-
-[AMBULAN]
-Скорая
-
-[AMBUL_M]
-'СКОРАЯ ПОМОЩЬ'
-
-[AMMU]
-Чтобы купить оружие - зайди в магазин.
-
-[AMMU_A]
-Луиджи сказал, тебе нужен ствол...
-
-[AMMU_B]
-Джоуи кое что для тебя заказал...
-
-[AMMU_C]
-Иди во двор магазина, я там тебе кое-что припас.
-
-[AMMU_D]
-У меня есть все что тебе понадобится.
-
-[AMMU_E]
-Тебе и лицензия нужна?
-
-[AMMU_F]
-Документов можешь не показывать, я и так тебе верю.
-
-[APR]
-Апр
-
-[AS1]
-'НАЖИВКА'
-
-[AS1_A]
-~w~Мигель считает, что я плохо с ним обращаюсь.
-
-[AS1_B]
-~w~Но он все-таки рассказал, что Каталина жутко боится твоей мести.
-
-[AS1_C]
-~w~Она послала в город три группы убийц, чтобы они выследили и прикончили тебя.
-
-[AS1_D]
-~w~Тебе придется побыть наживкой и постараться заманить их в Пайк Крик,
-
-[AS1_E]
-~w~там их уже будут поджидать мои люди.
-
-[AS1_G]
-~r~Все якудза перебиты!
-
-[AS1_H]
-~r~Тебе не удалось заманить убийц в ловушку Якудзы!
-
-[AS2]
-'КОФЕ НА ВЫНОС!'
-
-[AS2_1]
-~g~В Портланде уничтожены все кофейные ларьки!
-
-[AS2_10]
-~g~Кофейные ларьки еще стоят в Портланде и на острове Стаунтон.
-
-[AS2_11]
-~g~~1~ ИЗ 9!
-
-[AS2_12]
-~g~Объедь все районы города и отыщи ~b~кофейные ларьки~g~!
-
-[AS2_12A]
-~g~После того как ты уничтожишь первый ларек, у тебя будет 8 минут, прежде чем Картель забьет тревогу!
-
-[AS2_2]
-~g~На острове Стаунтон уничтожены все кофейные ларьки!
-
-[AS2_3]
-~g~В Шорсайд Вейл уничтожены все кофейные ларьки!
-
-[AS2_4]
-~r~Картель предупредил продавцов наркоты!
-
-[AS2_5]
-~g~Кофейные ларьки еще стоят в Шорсайд Вейл и на острове Стаунтон!
-
-[AS2_6]
-~g~Кофейные ларьки еще стоят в Шорсайд Вейл!
-
-[AS2_7]
-~g~Кофейные ларьки еще стоят на острове Стаунтон!
-
-[AS2_8]
-~g~Кофейные ларьки еще стоят в Портланде!
-
-[AS2_9]
-~g~Кофейные ларьки еще стоят в Портланде и в Шорсайд Вейл!
-
-[AS2_A]
-~w~Мы недооценили план Каталины по реализации СПАНКа.
-
-[AS2_A1]
-~w~Мигель вынослив, как настоящий латиноамериканец.
-
-[AS2_A2]
-~w~Я уже выдохлась.
-
-[AS2_B]
-~w~Ярди - торгующие СПАНКом по всему городу - это мелкие сошки.
-
-[AS2_C]
-~w~Картель действует через свою компанию 'The Kappa Coffee House'.
-
-[AS2_D]
-~w~Они продают СПАНК через сеть уличных ларьков.
-
-[AS2_E]
-~w~Нам не остается ничего другого, кроме как прикрыть все эти лавочки.
-
-[AS2_F]
-~w~Разнеси их в щепки!
-
-[AS3]
-'БЫЛО ВАШЕ, СТАЛО НАШЕ'
-
-[AS3_1]
-~g~Найди ~r~катер~g~ и встань около ~b~буя~g~!
-
-[AS3_1A]
-~g~Теперь двигайся к ~b~бую~g~!
-
-[AS3_2]
-~b~Двигайся к буям на посадочной полосе! ~y~Самолет уже на подлете!
-
-[AS3_3]
-~g~Подожди, пока не покажется ~y~самолет~g~!
-
-[AS3_4]
-~g~Сбей ~y~самолет~g~ из ракетницы!
-
-[AS3_5]
-~g~Собирай товар!
-
-[AS3_6]
-~g~~1~ ИЗ 8
-
-[AS3_A]
-~W~Ну что, затянем немного потуже, или просто подождем, пока почернеет и отвалится?
-
-[AS3_B]
-~w~Ну ка, давай посмотрим...
-
-[AS3_C]
-~w~Фууууууууу! что это за желтая липкая гадость?
-
-[AS3_C1]
-~w~Привет малыш.
-
-[AS3_D]
-~w~Мой работничек!
-
-[AS3_E]
-~w~Мне было скучно, и я решила составить Асуке компанию.
-
-[AS3_F]
-~w~Похоже она очень одаренная девочка.
-
-[AS3_F1]
-~w~Ей удалось узнать кое что важное у нашего гостя.
-
-[AS3_G]
-~w~В два часа в аэропорт Фрэнсис Интернешнл прибывает самолет.
-
-[AS3_G1]
-~w~Он просто набит отравой Каталины.
-
-[AS3_H]
-~w~Чтобы тебе не мешалась служба безопасности, возьми катер чтобы добраться до буев
-
-[AS3_H1]
-и взорвать самолет, когда тот пойдет на посадку.
-
-[AS3_I]
-~w~Найди среди обломков груз и забери его!
-
-[AS3_J]
-~w~Малыш, будь поосторожней там, Окей?
-
-[AS3_K]
-~w~Попробуй-ка соус чили...
-
-[AS4]
-'ВЫКУП'
-
-[ASUKA]
-ЗАДАНИЯ АСУКИ
-
-[ATUTOR]
-Чтобы получить задание Скорой или отказаться от него нажми ~h~~k~~TOGGLE_SUBMISSIONS~~w~.
-
-[ATUTOR2]
-~g~ОСТОРОЖНО отвози пациентов в больницу. Каждое столкновение ухудшает их состояние.
-
-[ATUTOR3]
-Чтобы получить задание Скорой или отказаться от него нажми ~h~~k~~TOGGLE_SUBMISSIONS~~w~.
-
-[AUG]
-Авг
-
-[AWAY]
-~r~Он свалил отсюда!
-
-[AWAY2]
-~r~Они свалили.
-
-[A_CANC]
-~r~Задание скорой отменено!
-
-[A_COMP1]
-Все задания скорой выполнены!
-
-[A_COMP2]
-Ты никогда не будешь уставать!
-
-[A_COMP3]
-Все задания скорой выполнены! Ты никогда не будешь уставать при быстром беге!
-
-[A_FAIL1]
-Задание скорой прервано.
-
-[A_FAIL2]
-~r~Из-за твоей медлительности скончался пациент!
-
-[A_FAIL3]
-~r~Пациент скончался!
-
-[A_FULL]
-~r~Скорая переполнена!
-
-[A_PASS]
-Спасен!
-
-[A_RANGE]
-~g~Рация в скорой не ловит сигнал, подъедь ближе к больнице!
-
-[A_SAVES]
-ЛЮДЕЙ СПАСЕНО: ~1~
-
-[A_TIME]
-+~1~ секунд
-
-[BANSHEE]
-Банши
-
-[BARRCKS]
-Барракс OL
-
-[BAT1]
-~g~Возьми биту!
-
-[BELLYUP]
-Фургон Триад
-
-[BETRA_A]
-Прости, детка.
-
-[BETRA_B]
-У меня свои планы, а ты...
-
-[BETRA_C]
-Ты мне больше не нужен.
-
-[BET_JB]
-ПРЕДАННЫЙ СВОЕЙ ВОЗЛЮБЛЕННОЙ КАТАЛИНОЙ, БРОСИВШЕЙ ЕГО УМИРАТЬ. ОСУЖДЕННЫЙ И ПРИГОВОРЕННЫЙ, ОН УЖЕ НА ПУТИ В ТЮРЬМУ. ОН НЕ МОЖЕТ ДУМАТЬ НИ О ЧЕМ ИНОМ, КРОМЕ...... МЕСТИ!
-
-[BFINJC]
-Иджэкшен BF
-
-[BGWHON]
-Big White Debug Light Switched On
-
-[BGWOFF]
-Big White Debug Light Switched Off
-
-[BIG_DAM]
-Плотина Кокрейн
-
-[BITCH_D]
-~g~Мария мертва!
-
-[BLISTA]
-Блиста
-
-[BOATIN1]
-Запрыгни в катер и нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~ чтобы сесть за руль.
-
-[BOATIN2]
-Если ты рядом с катером, то нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~, чтобы в него сесть.
-
-[BOATIN3]
-Запрыгни в катер и нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~ чтобы сесть за руль.
-
-[BOATIN4]
-Если ты рядом с катером, то нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~, чтобы в него сесть.
-
-[BOBCAT]
-Рысь
-
-[BOMB]
-Чтобы установить ~h~бомбу~w~ - поставь тачку в гараж. Стоимость бомбы - ~h~$1000~w~.
-
-[BOMB1]
-Гараж Лысого
-
-[BONUS]
-~g~ПРИЗ $~1~
-
-[BORGNIN]
-Борнини
-
-[BRIDGE1]
-Как только отремонтируют мост Каллахан, ты сможешь попасть на остров Стаунтон.
-
-[BSTSTU]
-Лучший БЕЗУМНЫЙ трюк:
-
-[BUGGY]
-ОСТАЛОСЬ:
-
-[BULL]
-СЛИТКОВ:
-
-[BUS]
-Автобус
-
-[BUSTED]
-АРЕСТОВАН!
-
-[B_SITE]
-ЗАДАНИЯ АСУКИ (ПРИГОРОД)
-
-[CABBIE]
-Кэб
-
-[CAM_A]
-Чтобы сменить расположение ~h~камеры~w~, нажми ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~.
-
-[CAM_B]
-Чтобы сменить расположение ~h~камеры~w~, нажми ~h~~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~.
-
-[CARSOFF]
-Машины выключены.
-
-[CARS_ON]
-Машины включены.
-
-[CAR_1]
-Ambulance
-
-[CAR_10]
-Coach
-
-[CAR_11]
-Flatbed
-
-[CAR_12]
-Linerunner
-
-[CAR_13]
-Trashmaster
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-Mr Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_2]
-Firetruck
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinel
-
-[CAR_25]
-Cheetah
-
-[CAR_26]
-Banshee
-
-[CAR_27]
-Stinger
-
-[CAR_28]
-Infernus
-
-[CAR_29]
-Esperanto
-
-[CAR_3]
-Police
-
-[CAR_30]
-Kuruma
-
-[CAR_31]
-Stretch
-
-[CAR_32]
-Perennial
-
-[CAR_33]
-Landstalker
-
-[CAR_34]
-Manana
-
-[CAR_35]
-Idaho
-
-[CAR_36]
-Stallion
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Cabbie
-
-[CAR_39]
-Buggy
-
-[CAR_4]
-Enforcer
-
-[CAR_5]
-Barracks
-
-[CAR_6]
-Rhino
-
-[CAR_7]
-FBIcar
-
-[CAR_8]
-Securicar
-
-[CAR_9]
-Moonbeam
-
-[CAR_CRU]
-Машин разбито
-
-[CAR_EXP]
-Машин взорвано
-
-[CAT1]
-'ВЫКУП'
-
-[CAT1_A]
-Твоя драгоценная Мария у меня. Если не хочешь, чтобы ее личико было похоже на мясной фарш,
-
-[CAT1_B]
-привези мне $500,000 на виллу в Кедровой роще.
-
-[CAT1_E]
-XXXX
-
-[CAT1_F]
-Езжай к Каталине, пока не вышло время!
-
-[CAT2]
-'ОБМЕН'
-
-[CAT2_A]
-Интересно, ты пришел ради того, чтобы спасти Марию или вернуться ко мне?
-
-[CAT2_A1]
-Да пошла ты, глупая сучка!
-
-[CAT2_B]
-Хочу сказать тебе кое-что,
-
-[CAT2_B2]
-мне так и хочется тебя пристрелить, но бизнес прежде всего.
-
-[CAT2_C]
-Ты просто находка для меня, амиго!
-
-[CAT2_D]
-Давай бабки.
-
-[CAT2_E]
-О, да ты без дела не шатался!
-
-[CAT2_E2]
-Но ты так и не понял, что мне нельзя верить.
-
-[CAT2_E3]
-Пристрелите кретина.
-
-[CAT2_F]
-Я сломала ноготь, и моя прическа растрепалась. А она обошлась мне в 50 долларов, представляешь?
-
-[CAT2_G]
-Я была так напугана, но потом я сказала себе - ты уже взрослая девочка.
-
-[CAT2_H]
-О, у нас будет так весело, потому что, ты знаешь, моя сестра сказала, что она поживет у нас со своими детьми,
-
-[CAT2_I]
-потому что у ее мужа снова интрижка и...
-
-[CAT2_J]
-Быстрее, взлетаем!
-
-[CATINF1]
-~g~Убей Каталину!
-
-[CATINF2]
-~g~Чтобы найти Каталину - следуй за вертушкой.
-
-[CAT_MON]
-~g~У тебя недостаточно зелени. Необходимо $500,000 баксов.
-
-[CDERROR]
-Ошибка чтения диска с игрой Grand Theft Auto III
-
-[CHAT]
-Chatterbox FM
-
-[CHEAT1]
-Чит-код активирован
-
-[CHEAT2]
-Чит-код: оружие
-
-[CHEAT3]
-Чит-код: здоровье
-
-[CHEAT4]
-Чит-код: броня
-
-[CHEAT5]
-Чит-код: в розыске
-
-[CHEAT6]
-Чит-код: деньги
-
-[CHEAT7]
-Чит-код: погода
-
-[CHEATOF]
-Режим чит-кодов Выкл.
-
-[CHEATON]
-Режим чит-кодов Вкл.
-
-[CHEETAH]
-Гепард
-
-[CHEVOK]
-CheckEveryOkB4Save
-
-[CHFIDL]
-ВЫБЕРИТЕ ЗАПИСЬ ДЛЯ УДАЛЕНИЯ
-
-[CHFILE]
-ВЫБЕРИТЕ ИГРУ ДЛЯ ЗАГРУЗКИ
-
-[CHINA]
-Чайнатаун
-
-[CINCAM]
-Вид из телекамеры
-
-[CITYZON]
-Либерти Сити
-
-[CLZOOF]
-Show Cull Zones Off
-
-[CLZOON]
-Show Cull Zones On
-
-[CNCSAV]
-Нельзя сохранить игру, сидя в тачке.
-
-[CNTLS]
-Управление
-
-[CNTSAV]
-Во время задания запись невозможна.
-
-[COACH]
-Автобус-люкс
-
-[COLLECT]
-СОБРАНО:
-
-[COLOMCR]
-Круизер картеля
-
-[COLT_IN]
-В магазин завезли пистолеты!
-
-[COM_EAS]
-Ньюпорт
-
-[COM_ZON]
-Остров Стаунтон
-
-[CONSTRU]
-Форт Стаунтон
-
-[CONTRL]
-Задание управления
-
-[COPCART]
-~g~У тебя есть ~1~ секунд чтобы вернуться в полицейскую машину, иначе задание будет отменено.
-
-[COP_M]
-'ПОЛИЦЕЙСКИЙ'
-
-[CO_ALL]
-Ты взял всех преступников. Вот тебе кое-что...
-
-[CO_ONE]
-Особые пакеты: ~1~ из ~1~
-
-[CRD050A]
-ТЕСТЕРЫ
-
-[CRD136A]
-ALEX HORTON
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS.
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUCER
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-ART DIRECTOR
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-TECHNICAL DIRECTION
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-ДИЗАЙН
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-АВТОРЫ СЮЖЕТА
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-ГЕРОИ
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMATION & DIRECTION
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-AUTO DESIGN
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-ARTISTS
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODERS
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-SCORE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-SOUND DESIGN & MASTERING
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-AUDIO PROGRAMMING
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-TEST MANAGER
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-LEAD TESTERS
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-TECHNICAL SUPPORT
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-EXECUTIVE PRODUCER
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUCER
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRECTOR OF DEVELOPMENT
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-TECHNICAL PRODUCER
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-ASSOCIATE PRODUCER
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-MUSIC SUPERVISOR
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VP OF MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-TECHNICAL COORDINATOR
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-QA MANAGER
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-GAME ANALYST
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-TEST TEAM
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-LIBERTY TREE EDITORIAL
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-CUT-SCENES
-
-[CRED108]
-SCRIPT BY DAN HOUSER AND JAMES WORRALL
-
-[CRED109]
-AUDIO DIRECTED BY DAN HOUSER
-
-[CRED110]
-AUDIO PRODUCED BY RENAUD SEBBANE
-
-[CRED111]
-CAST
-
-[CRED112]
-FRANK VINCENT AS SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO AS LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN AS TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT AS JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR AS MARIA
-
-[CRED117]
-KYLE MACLACHLAN AS DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA AS RAY MACHOWSKI
-
-[CRED119]
-GURU AS 8-BALL
-
-[CRED120]
-SONDRA JAMES AS MOMMA
-
-[CRED121]
-LIANA PAI AS ASUKA
-
-[CRED122]
-LES MAU AS KENJI
-
-[CRED123]
-CYNTHIA FARRELL AS CATALINA
-
-[CRED124]
-AL ESPINOSA AS MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS AS EL BURRO
-
-[CRED126]
-HUNTER PLATIN AS CHICO
-
-[CRED127]
-WALTER MUDU AS D-ICE
-
-[CRED128]
-CURTIS MCCLARIN AS CURTLY
-
-[CRED129]
-BILL FIORE AS DARKEL
-
-[CRED130]
-CHRIS PHILLIPS AS MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN AS CURLY BOB
-
-[CRED132]
-WALTER MUDU AS KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN AS ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY AS MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATED BY
-
-[CRED137]
-DIRECTED BY
-
-[CRED138]
-PRODUCED BY
-
-[CRED139]
-RECORDED AT MODERN UPRISING STUDIOS, BROOKLYN
-
-[CRED140]
-ACTORS
-
-[CRED141]
-PEDESTRIAN DIALOGUE
-
-[CRED142]
-WRITTEN BY DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRECTED BY CRAIG CONNER, DAN HOUSER AND LAZLOW
-
-[CRED144]
-PRODUCED BY RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-RADIO STATIONS AND MUSIC
-
-[CRED218]
-PRODUCERS FOR ROCKSTAR UK
-
-[CRED219]
-SOUNDTRACK CO-ORDINATOR
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUCER FOR ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-EDITED BY
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER AND IMAGING WRITTEN BY
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-SPECIAL THANKS TO
-
-[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
-
-[CRED254]
-STUDIO MANAGER
-
-[CRED255]
-ANDREW SEMPLE
-
-[CRED256]
-ARTIST
-
-[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
-
-[CRGOFF]
-ShowCarRoadGroups Off
-
-[CRIMRA]
-Ваш рейтинг:
-
-[CRLDIC]
-Создание и загрузка иконок
-
-[CRMGSV]
-Create copy protected magazine directory
-
-[CRRGON]
-ShowCarRoadGroups On
-
-[CRROOT]
-CreateRootDir
-
-[CRUSH]
-Поставь машину в голубой круг и выйди из нее. После этого машина будет утилизирована.
-
-[CR_1]
-Кран не может поднять эту машину.
-
-[CTRSCR]
-Центровка экрана
-
-[CTUTOR]
-Нажми ~h~~k~~TOGGLE_SUBMISSIONS~~w~, чтобы заняться работой полицейского или отказаться от нее.
-
-[CTUTOR2]
-Нажми ~h~~k~~TOGGLE_SUBMISSIONS~~w~, чтобы заняться работой полицейского или отказаться от нее.
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[CVT_CRT]
-Конвертация текстур не выполнена. Чтобы ее выполнить, вам нужно войти под администраторским паролем. Нажмите ESC для отмены.
-
-[CVT_ERR]
-У вас закончилось место на жестком диске. Пожалуйста, освободите место перед запуском игры. Нажмите ESC для отмены.
-
-[CVT_MSG]
-Конвертация текстур в формат оптимальный для вашей видеокарты.
-
-[C_BREIF]
-~g~~a~ - там в последний раз видели подозреваемого.
-
-[C_CANC]
-~r~Миссия полицейского прервана!
-
-[C_ESCP]
-~r~Подозреваемый скрылся!
-
-[C_FAIL]
-Миссия полицейского не выполнена!
-
-[C_KILLS]
-ПРЕСТУПНИКОВ УБИТО: ~1~
-
-[C_PASS]
-СПРАВЕДЛИВОСТЬ ВОСТОРЖЕСТВОВАЛА!
-
-[C_RANGE]
-~g~Полицейская рация не ловит сигнал, надо подъехать ближе к участку!
-
-[C_TIME]
-~r~Время выполнения задания вышло!
-
-[C_VIGIL]
-НАГРАДА ОТ ПОЛИЦИИ!
-
-[DAM]
-ПОВРЕЖДЕНИЯ:
-
-[DAYPLC]
-Ежедневные расходы полиции
-
-[DAYSPS]
-Дней проведенных за игрой
-
-[DBFOFF]
-CTheScripts::DbgFlag Off
-
-[DBGFON]
-CTheScripts::DbgFlag On
-
-[DBINST]
-Двойной безумный трюк
-
-[DBL_CLF]
-Double Clef FM
-
-[DBPINS]
-Идеальный безумный трюк
-
-[DEAD]
-ВЫРУБИЛСЯ!
-
-[DEBUGM]
-Отладочное меню
-
-[DEC]
-Дек
-
-[DED_CRI]
-Убито преступников
-
-[DED_DED]
-Убито должников
-
-[DED_HOK]
-Убито шлюх
-
-[DEFDT]
---:---:---- --:--:--
-
-[DEFNAM]
-Клод----------------------
-
-[DEL_FNM]
-Файл удален.
-
-[DETON]
-ВЗРЫВ ЧЕРЕЗ:
-
-[DIAB1]
-'ГОНКА'
-
-[DIAB1_1]
-~g~3..2..1.. СТАРТ!
-
-[DIAB1_2]
-~g~Поздравляем, ты победил с отличным результатом: ~1~ секунд.
-
-[DIAB1_3]
-~r~Куда тебе с нами тягаться, НЕУДАЧНИК!
-
-[DIAB1_4]
-~g~Найди быструю тачку, и приезжай на старт.
-
-[DIAB1_5]
-ВРЕМЯ:
-
-[DIAB1_A]
-Эль Бурро хочет предложить тебе одно дельце. Двигай к телефону в Хепберн Хейтс, если тебя это заинтересовало.
-
-[DIAB1_B]
-Это Эль Бурро из банды Дьяволов.
-
-[DIAB1_C]
-Не так уж ты и крут. Подойди к телефону, и возможно Эль Бурро предложит тебе работенку.
-
-[DIAB1_D]
-Ты новичок в городе, но на улицах о тебе уже ходят слухи.
-
-[DIAB1_E]
-Мы решили устроить гонку, которая начнется у старой школы, что у моста Каллахан.
-
-[DIAB1_F]
-Достань себе тачку получше, и если выиграешь гонку, получишь приз.
-
-[DIAB2]
-'СМЕРТЬ ОТ МОРОЖЕНОГО'
-
-[DIAB2_1]
-~g~Возьми дипломат в Харвуде.
-
-[DIAB2_2]
-~g~Найди фургон с мороженым.
-
-[DIAB2_3]
-~g~Припаркуй фургон с мороженым на пристани Атлантик.
-
-[DIAB2_4]
-~g~Понажимай ~w~~k~~VEHICLE_HORN~~g~ чтобы включить на фургоне колокольчик.
-
-[DIAB2_5]
-~g~Выйди из фургона и затем с помощью дистанционника взорви его.
-
-[DIAB2_6]
-~g~Понажимай ~w~~k~~VEHICLE_HORN~~g~ чтобы включить на фургоне колокольчик.
-
-[DIAB2_7]
-~g~Понажимай ~w~~k~~VEHICLE_HORN~~g~ чтобы включить колокольчик на фургоне.
-
-[DIAB2_A]
-Когда я начал свой экзотический бизнес, моим единственным активом было содержимое моих кожаных штанов!
-
-[DIAB2_B]
-Одна банда стала угрожать, что лишит меня этой штуки, если я не буду отстегивать им процент.
-
-[DIAB2_C]
-Они не с тем связались, амиго.
-
-[DIAB2_D]
-Эти кретины западают на мороженое.
-
-[DIAB2_E]
-Возьми бомбу, что я спрятал в Харвуде,
-
-[DIAB2_F]
-и угони фургон с мороженым, что катается по городу.
-
-[DIAB2_G]
-Эти глупцы побегут на верную смерть, услышав колокольчик фургона.
-
-[DIAB2_H]
-Они прячутся на складе пристани Атлантик.
-
-[DIAB3]
-'ИСПЫТАНИЕ ОГНЕМ'
-
-[DIAB3_1]
-УБЕЙ 25 ТРИАДОВЦЕВ
-
-[DIAB3_A]
-Какой-то наглый триадовец прошлой ночью спер мою тачку,
-
-[DIAB3_B]
-разбил ее и бросил догорать.
-
-[DIAB3_C]
-В багажнике было несколько моих любимых безделушек -
-
-[DIAB3_D]
-настоящая гордость коллекционера, таких сейчас не достать.
-
-[DIAB3_E]
-Неподалеку от Чайнатауна я припрятал огнемет.
-
-[DIAB3_F]
-Возьми его и научи этих вандалов из Триады бояться грозного орудия Эль Бурро.
-
-[DIAB3_G]
-Арриба!
-
-[DIAB4]
-'ПОРНОКРАД'
-
-[DIAB4_1]
-~g~Подгони фургон на задний двор магазина порнухи.
-
-[DIAB4_A]
-Один слишком шустрый делец угнал фургон с последним тиражом моего издания!
-
-[DIAB4_B]
-Но этот обкурившийся кретин не закрыл дверцы фургона,
-
-[DIAB4_C]
-и теперь все мои прекрасные
-
-[DIAB4_D]
-порножурналы с изумительными фотографиями разбросаны по всему городу!
-
-[DIAB4_E]
-Садись в фургон и иди по следу 'Петушка из Портленда' выпусков 1, 2 и 3,
-
-[DIAB4_F]
-ну и собирай их заодно по пути.
-
-[DIAB4_G]
-Как только выследишь этого шустрого отморозка - разберись с ним!
-
-[DIAB4_H]
-Затем отгони мой фургон с грузом к сексшопу в квартале красных фонарей.
-
-[DIABLCR]
-Жеребец Дьяволов
-
-[DIABLO]
-ЗАДАНИЯ ДЬЯВОЛОВ
-
-[DLFILE]
-Удаление файлов игры GTA3
-
-[DODO]
-Додо
-
-[DODO_FT]
-Вы были в воздухе ~1~ секунд!
-
-[DRIVE_A]
-Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~PED_FIREWEAPON~~w~ для выстрела.
-
-[DRIVE_B]
-Садясь в машину, возьми в руки Узи. Посмотри вправо или влево и нажми ~h~~k~~PED_FIREWEAPON~~w~ для выстрела.
-
-[DSPLAY]
-Экран
-
-[DSTROFF]
-Debug Streaming Requests Off
-
-[DSTRON]
-Debug Streaming Requests On
-
-[EASTBAY]
-Портланд Бич
-
-[EBAL]
-'НА СВОБОДУ'
-
-[EBAL_1]
-Нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~, чтобы ~h~сесть за руль ~w~или ~h~выйти~w~ из машины.
-
-[EBAL_1B]
-Нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~, чтобы ~h~сесть за руль ~w~или ~h~выйти~w~ из машины.
-
-[EBAL_2]
-~g~Возвращайся в машину!
-
-[EBAL_3]
-Это ~h~радар~w~. Он очень полезен для навигации в городе. Сейчас ~h~цветная отметка~w~ на нем показывает расположение укрытия!
-
-[EBAL_4]
-~r~Лысый погиб!
-
-[EBAL_5]
-~g~Достань тачку!
-
-[EBAL_6]
-~g~Подбери Мисти!
-
-[EBAL_A]
-Я знаю место на углу квартала Красных фонарей, где мы сможем залечь,
-
-[EBAL_A1]
-но я хреновый водитель, так что, браток, лучше садись ты за руль.
-
-[EBAL_B]
-Вот и приехали. Давай зайдем внутрь и сменим эти чертовы шмотки!
-
-[EBAL_D]
-Я знаю одного парня с большими связями, его зовут Луиджи.
-
-[EBAL_D1]
-Я с ним работал раньше, так что, может, он и тебе работенку подкинет. Давай, съездим к нему.
-
-[EBAL_E]
-Давай, пошли, я тебя представлю.
-
-[EBAL_G]
-Это клуб Луиджи. Давай не будем светиться и пройдем через черный ход.
-
-[EBAL_H]
-Погоди меня тут, пока я схожу и потолкую с Луиджи.
-
-[EBAL_I]
-Босс решил выйти и взглянуть на тебя...
-
-[EBAL_J]
-У Лысого какие-то дела там наверху.
-
-[EBAL_K]
-Сделай мне одолжение, парень.
-
-[EBAL_L]
-Одной из моих девиц нужно прокатиться, так что бери тачку, забирай Мисти из клиники и вези сюда.
-
-[EBAL_M]
-Запомни, никто не лапает моих девок!
-
-[EBAL_N]
-Так что держи свои руки на баранке!
-
-[EBAL_O]
-Если не завалишь это дело, то может найтись и другая работенка. Все, проваливай!
-
-[ELBURRO]
-Лучший результат в гонке (сек)
-
-[EMVHPUP]
-Мы заплатим хорошие бабки за старые и новые машины скорой помощи. Подгони их к крану на северо-востоке порта Портланда.
-
-[END_A]
-Жители Кедровой рощи едва успели оправиться
-
-[END_B]
-от шока, вызванного настоящей криминальной войной,
-
-[END_C]
-всполошившей вчера весь район.
-
-[END_D]
-Местный житель Клив Денвер рассказал полиции,
-
-[END_E]
-что видел, как с места происшествия убегал бандит и какая-то брюнетка.
-
-[END_F]
-Ой, ты знаешь, нам будет так клево, потому что, ну... знаешь,
-
-[END_G]
-я люблю тебя, я, я, я правда люблю, потому что ты такой крутой сильный мужик
-
-[END_H]
-и ты именно тот, кто мне нужен.
-
-[END_I]
-Ой, о чем это я?
-
-[END_J]
-Ну вот, я забыла. Но ты понял, что я имела в виду, правда?
-
-[END_K]
-Люди бросились в укрытия, когда взрывы стали сотрясать ближайшие дома.
-
-[END_L]
-Несколько жителей пострадало во время ожесточенной перестрелки
-
-[END_M]
-между бандитами и вертолетом, кружившим над плотиной.
-
-[END_N]
-Да, из садов открывался отличный вид на это зрелище!
-
-[END_O]
-Когда вертолет наконец сбили,
-
-[END_P]
-был фейерверк получше, чем на Четвертое июля!
-
-[END_Q]
-Хотя найдено уже более двадцати тел,
-
-[END_R]
-полиция все еще находит останки.
-
-[END_S]
-Мы не получили официального опровержения слухов, о том,
-
-[END_T]
-что все тела принадлежат членам колумбийского Картеля.
-
-[END_U]
-Истинные причины этой бойни до сих пор неизвестны.
-
-[END_V]
-Представляешь, я сломала ноготь и испортила прическу!
-
-[END_W]
-А она обошлась мне в пятьдесят баксов...
-
-[ENFORCR]
-Энфорсер
-
-[ENGLIS]
-English
-
-[ESPERAN]
-Эсперанто
-
-[EVID]
-УЛИКИ:
-
-[FARE1]
-~g~Едем в ~w~'Клуб секс кошечек' ~g~в Квартале красных фонарей.
-
-[FARE10]
-~g~Едем в ~w~'Лапшу по-китайски' ~g~в Чайнатауне.
-
-[FARE11]
-~g~Едем на ~w~строительную площадку ~g~в форте Стаунтон.
-
-[FARE12]
-~g~Едем на ~w~футбольный стадион ~g~на Аспатрии.
-
-[FARE13]
-~g~Едем в ~w~церковь ~g~в Бедфорд Поинт.
-
-[FARE14]
-~g~Едем в ~w~казино ~g~в Торрингтоне.
-
-[FARE15]
-~g~Едем к ~w~зданию университета ~g~в учебном городке.
-
-[FARE16]
-~g~Едем в ~w~торговый комплекс ~g~в в Районе парка Бельвиль.
-
-[FARE17]
-~g~Едем в ~w~музей ~g~в Ньюпорте.
-
-[FARE18]
-~g~Едем к ~w~зданию 'Амко' ~g~в Торрингтоне.
-
-[FARE19]
-~g~Едем в ~w~'Болт Бургер' ~g~в Бедфорд Поинт.
-
-[FARE2]
-~g~Едем в ~w~'Сюпа Сейв' ~g~на Портланд Вью.
-
-[FARE20]
-~g~Едем в ~w~парк ~g~в Бельвиле.
-
-[FARE21]
-~g~Едем в ~w~аэропорт Фрэнсис~g~.
-
-[FARE22]
-~g~Едем к ~w~плотине Кокрейн~g~.
-
-[FARE23]
-~g~Едем к ~w~автосалону ~g~ рядом с плотиной Кокрейн.
-
-[FARE24]
-~g~Едем в ~w~больницу ~g~в Пайк Крик.
-
-[FARE25]
-~g~Едем в ~w~парк ~g~в Шорсайд Вейл.
-
-[FARE26]
-~g~Едем к ~w~Северо-западным башням ~g~в Садах Вичита.
-
-[FARE3]
-~g~Едем к ~w~старой школе ~g~в Чайнатауне.
-
-[FARE4]
-~g~Едем в ~w~'Кафе Грейзи Джо' ~g~на мысе Каллахан.
-
-[FARE5]
-~g~Едем в ~w~оружейный магазин ~g~в квартале красных фонарей.
-
-[FARE6]
-~g~Едем в ~w~'Автомобили в кредит' ~g~на Сент-Марк.
-
-[FARE7]
-~g~Едем в ~w~'Топлесс-Бар Вуди' ~g~в квартале красных фонарей.
-
-[FARE8]
-~g~Едем в ~w~бистро Марко ~g~на Сент-Марк.
-
-[FARE9]
-~g~Едем в ~w~Автосалон ~g~в гавани Портланда.
-
-[FARES]
-ОТВЕЗЕНО:
-
-[FBICAR]
-Машина ФБР
-
-[FEA_2SP]
-ДВЕ КОЛОНКИ
-
-[FEA_3DH]
-СПОСОБ ВЫВОДА ЗВУКА
-
-[FEA_4SP]
-БОЛЬШЕ ДВУХ КОЛОНОК
-
-[FEA_DO]
-=
-
-[FEA_EAR]
-НАУШНИКИ
-
-[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]
-ПУСТОМЕЛЯ 109
-
-[FEA_FM9]
-ПРОИГРЫВАТЕЛЬ MP3
-
-[FEA_LE]
-<
-
-[FEA_MNO]
-Моно
-
-[FEA_MUS]
-ГРОМКОСТЬ МУЗЫКИ
-
-[FEA_NAH]
-НЕТ ЗВУКОВОЙ КАРТЫ
-
-[FEA_NON]
-Нет
-
-[FEA_OUT]
-Выход:
-
-[FEA_RI]
->
-
-[FEA_RSS]
-РАДИОСТАНЦИЯ
-
-[FEA_SFX]
-ГРОМКОСТЬ ЗВУКОВ
-
-[FEA_SPK]
-ТИП АКУСТИКИ
-
-[FEA_ST]
-Стерео
-
-[FEA_UP]
-;
-
-[FEB]
-Фев
-
-[FEB_AUD]
-Аудио
-
-[FEB_BRI]
-Сообщения
-
-[FEB_CON]
-Управление
-
-[FEB_CPC]
-Настройка управления
-
-[FEB_DIS]
-Экран
-
-[FEB_LAN]
-Язык
-
-[FEB_PMB]
-Задание предыдущей миссии:
-
-[FEB_SAV]
-Загрузить
-
-[FEB_STA]
-Статистика
-
-[FEC_ACC]
-Газ
-
-[FEC_ACL]
-Педаль газа
-
-[FEC_ATT]
-Удар или выстрел из оружия
-
-[FEC_BAC]
-Назад
-
-[FEC_BRA]
-Тормоз / Задний ход
-
-[FEC_BRK]
-Педаль тормоза
-
-[FEC_BSP]
-ЗАБОЙ
-
-[FEC_CAM]
-Расположение камеры
-
-[FEC_CAW]
-Оружие в машине
-
-[FEC_CCF]
-Конфигурация:
-
-[FEC_CCM]
-Поставить камеру сзади игрока.
-
-[FEC_CDP]
-Показ контроллера:
-
-[FEC_CEN]
-Центровка камеры
-
-[FEC_CF1]
-Setup1
-
-[FEC_CF2]
-Setup2
-
-[FEC_CF3]
-Setup3
-
-[FEC_CF4]
-Setup4
-
-[FEC_CLE]
-Прокрутка оружия влево
-
-[FEC_CLK]
-CAPSLOCK
-
-[FEC_CMM]
-Общее управления
-
-[FEC_CMP]
-ВМЕСТЕ: ВЗГЛЯД ВЛЕВО + ВЗГЛЯД ВПРАВО
-
-[FEC_CMR]
-Выбор позиции камеры
-
-[FEC_CMS]
-Изменение расположения камеры для всех вариантов.
-
-[FEC_CNT]
-Тип управления:
-
-[FEC_CRD]
-Перебор радиостанций
-
-[FEC_CRI]
-Прокрутка оружия вправо
-
-[FEC_CWL]
-Прокрутка оружия влево
-
-[FEC_CWR]
-Прокрутка оружия вправо
-
-[FEC_DBG]
-ОТЛАДОЧНОЕ МЕНЮ
-
-[FEC_DLF]
-Удаление невозможно.
-
-[FEC_DLL]
-DEL
-
-[FEC_DOT]
-ДОП.
-
-[FEC_DWA]
-СТРЕЛКА ВНИЗ
-
-[FEC_EEX]
-В машину /Из машины
-
-[FEC_EMS]
-Эту клавишу назначить нельзя.
-
-[FEC_END]
-END
-
-[FEC_ENT]
-В машину /Из машины
-
-[FEC_ENV]
-Сесть в машину
-
-[FEC_ESR]
-Клавишу ESC задавать нельзя
-
-[FEC_ETR]
-ДОП ВВОД
-
-[FEC_EXV]
-В машину /Из машины
-
-[FEC_FIR]
-Выстрел
-
-[FEC_FNC]
-F~1~
-
-[FEC_FOR]
-Вперед
-
-[FEC_FPC]
-Вид от первого лица
-
-[FEC_FPO]
-Оружие человека
-
-[FEC_FPR]
-Управление от первого лица
-
-[FEC_FWS]
-ДОП /
-
-[FEC_GSL]
-Покачивание камеры при ходьбе:
-
-[FEC_HAB]
-Ручной тормоз
-
-[FEC_HBR]
-Ручной тормоз машины
-
-[FEC_HME]
-HOME
-
-[FEC_HND]
-Тормоз
-
-[FEC_HO3]
-Сигнал (кнопка L3)
-
-[FEC_HOR]
-Сигнал
-
-[FEC_HRN]
-Сигнал
-
-[FEC_IBT]
--
-
-[FEC_INC]
-В машине
-
-[FEC_IRT]
-INS
-
-[FEC_IVH]
-Инвертирование мыши по горизонтали:
-
-[FEC_IVV]
-ИНВЕРТИРОВАНИЕ МЫШИ ПО ВЕРТИКАЛИ
-
-[FEC_JBO]
-ДЖ. ~1~
-
-[FEC_JMP]
-Прыжок
-
-[FEC_JOY]
-Джойстик
-
-[FEC_JUM]
-Прыжок
-
-[FEC_LAL]
-ЛЕВ.ALT
-
-[FEC_LB]
-Оглянуться назад
-
-[FEC_LB1]
-Взгляд
-
-[FEC_LB2]
-назад
-
-[FEC_LB3]
-Оглянуться назад
-
-[FEC_LBA]
-Оглянуться назад
-
-[FEC_LBC]
-Нажать взгляд Влево и Вправо.
-
-[FEC_LBH]
-Посмотреть назад
-
-[FEC_LCT]
-ЛЕВ.CTRL
-
-[FEC_LDN]
-Посмотреть вниз
-
-[FEC_LDU]
-Посмотреть вниз
-
-[FEC_LEF]
-Влево
-
-[FEC_LFA]
-СТРЕЛКА ВЛЕВО
-
-[FEC_LKL]
-Посмотреть влево
-
-[FEC_LKT]
-Зафиксировать цель
-
-[FEC_LL]
-Посмотреть налево
-
-[FEC_LLF]
-Взгляд налево из машины
-
-[FEC_LOF]
-Посмотреть вперед
-
-[FEC_LOL]
-Посмотреть налево
-
-[FEC_LOR]
-Посмотреть направо
-
-[FEC_LR]
-Посмотреть направо
-
-[FEC_LRG]
-Взгляд вправо из машины
-
-[FEC_LRT]
-Посмотреть вправо
-
-[FEC_LSF]
-ЛЕВ.SHIFT
-
-[FEC_LUD]
-Посмотреть вверх
-
-[FEC_LUN]
-Загрузка невозможна. Файл поврежден, пожалуйста удалите эту запись.
-
-[FEC_LUP]
-Посмотреть вверх
-
-[FEC_LWD]
-ЛЕВ.WIN
-
-[FEC_MIN]
-ДОП -
-
-[FEC_MOV]
-Движение
-
-[FEC_MSH]
-ЧУВСТВИТЕЛЬНОСТЬ МЫШИ
-
-[FEC_MSL]
-ЛЕВ.КН.МЫШИ
-
-[FEC_MSM]
-СРЕД.КН.МЫШИ
-
-[FEC_MSR]
-ПРАВ.КН.МЫШИ
-
-[FEC_MWB]
-КОЛЕСО МЫШИ ВНИЗ
-
-[FEC_MWF]
-КОЛЕСО МЫШИ ВВЕРХ
-
-[FEC_MXO]
-MXB1
-
-[FEC_MXT]
-MXB2
-
-[FEC_NA]
-НЕТ
-
-[FEC_NLK]
-NUMLOCK
-
-[FEC_NMN]
-ДОП ~1~
-
-[FEC_NTR]
-Следующая цель
-
-[FEC_NTT]
-Неизвестная клавиша
-
-[FEC_NTW]
-Разговор по сети
-
-[FEC_NUM]
-ДОП
-
-[FEC_NUS]
-НЕ ИСПОЛЬЗУЕТСЯ
-
-[FEC_NWE]
-Следующее оружие
-
-[FEC_OJS]
-Для каждого действия можно назначить лишь одну кнопку джойстика
-
-[FEC_OKK]
-О.К.
-
-[FEC_OMS]
-Для действия можно задать лишь одну кнопку мыши
-
-[FEC_ONF]
-Пешком
-
-[FEC_ORR]
-или
-
-[FEC_PAD]
-Геймпад
-
-[FEC_PAS]
-Пауза
-
-[FEC_PAU]
-Пауза
-
-[FEC_PED]
-Управление героем
-
-[FEC_PFR]
-Выстрел из оружия
-
-[FEC_PGD]
-PGDN
-
-[FEC_PGU]
-PGUP
-
-[FEC_PJP]
-Прыжок
-
-[FEC_PLB]
-Взгляд назад.
-
-[FEC_PLS]
-ДОП +
-
-[FEC_PSB]
-BREAK
-
-[FEC_PSH]
-Выстрел
-
-[FEC_PSP]
-Бежать
-
-[FEC_PTL]
-Use LockTarget with Weapon Switch Left.
-
-[FEC_PTR]
-Use LockTarget with Weapon Switch Right.
-
-[FEC_PTT]
-Предыдущая цель
-
-[FEC_PWE]
-Предыдущее оружие
-
-[FEC_PWF]
-Идти вперед
-
-[FEC_PWL]
-Идти влево
-
-[FEC_PWR]
-Идти вправо
-
-[FEC_PWT]
-Движение относительно камеры
-
-[FEC_QUE]
-???
-
-[FEC_R3]
-(R3 button)
-
-[FEC_RAD]
-Радио
-
-[FEC_RAL]
-ПР.ALT
-
-[FEC_RCT]
-ПР.CTRL
-
-[FEC_RFA]
-СТРЕЛКА ВПРАВО
-
-[FEC_RIG]
-Вправо
-
-[FEC_RS3]
-Перебор радиостанций (L3 button)
-
-[FEC_RSC]
-Перебор радиостанций
-
-[FEC_RSF]
-ПР.SHIFT
-
-[FEC_RTN]
-ВВОД
-
-[FEC_RUN]
-Бежать
-
-[FEC_RWD]
-ПР.WIN
-
-[FEC_SFT]
-SHIFT
-
-[FEC_SGJ]
-Настройка джойстика
-
-[FEC_SLC]
-Slot is corrupted
-
-[FEC_SLK]
-SCROLL LOCK
-
-[FEC_SM3]
-Special mission trigger (R3 button)
-
-[FEC_SMS]
-Показывать указатель мыши
-
-[FEC_SMT]
-Вызов спецзадания
-
-[FEC_SPC]
-ПРОБЕЛ
-
-[FEC_SPN]
-Бежать
-
-[FEC_STR]
-ДОП ЗВЕЗДОЧКА
-
-[FEC_SUB]
-Задание доп. миссий
-
-[FEC_SVU]
-Запись не удалась.
-
-[FEC_SZI]
-Снайперский прицел +
-
-[FEC_SZO]
-Снайперский прицел -
-
-[FEC_TAB]
-TAB
-
-[FEC_TAR]
-Цель
-
-[FEC_TDO]
-Камера отладки ВЫКЛ.
-
-[FEC_TFD]
-Башню /Додо вниз
-
-[FEC_TFL]
-Башню влево
-
-[FEC_TFR]
-Башню вправо
-
-[FEC_TFU]
-Башню /Додо вверх
-
-[FEC_TGD]
-Toggle Pad Game/Debug
-
-[FEC_TLF]
-Следующая цель слева
-
-[FEC_TRG]
-Следующая цель справа
-
-[FEC_TSM]
-Задание доп. миссий
-
-[FEC_TSS]
-Записать картинку с экрана
-
-[FEC_TUC]
-Управление башней
-
-[FEC_TUL]
-Башню влево
-
-[FEC_TUR]
-Башню вправо
-
-[FEC_TWO]
-Можно задать не более двух клавиш.
-
-[FEC_UJS]
-Эту кнопку джойстика назначить нельзя.
-
-[FEC_UMS]
-Эту кнопку мыши назначить нельзя.
-
-[FEC_UNB]
-НЕ ЗАДАНО
-
-[FEC_UND]
-(НЕТ)
-
-[FEC_UPA]
-СТРЕЛКА ВВЕРХ
-
-[FEC_VEH]
-Управление машиной
-
-[FEC_VES]
-Управление машиной
-
-[FEC_VIB]
-Vibration:
-
-[FEC_WAR]
-Внимание!
-
-[FEC_WHL]
-Рулевое управление
-
-[FEC_WPN]
-Выстрел из оружия
-
-[FEC_WRC]
-WINCLICK
-
-[FEC_ZIN]
-Приблизить
-
-[FEC_ZOT]
-Отдалить
-
-[FEDL_WR]
-Deleting data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FEDSAS2]
-<>-CHANGE SELECTION
-
-[FEDSAS3]
-- CHANGE SELECTION
-
-[FEDSAS4]
-;=<> - CHANGE SELECTION
-
-[FEDSSC1]
-;-FASTER SCROLLING
-
-[FEDSSC2]
-=-STOP SCROLLING
-
-[FEDS_AM]
-<>-CHANGE MENU
-
-[FEDS_AS]
-;=-CHANGE SELECTION
-
-[FEDS_BA]
-" button - BACK
-
-[FEDS_SB]
-/ button - SELECT " button - BACK
-
-[FEDS_SE]
-/ button - SELECT
-
-[FEDS_SM]
-L1,R1-CHANGE MENU
-
-[FEDS_SS]
-L1,R1-CHANGE SELECTION
-
-[FEDS_ST]
-START button - RESUME
-
-[FEDS_TB]
-НАЗАД
-
-[FEDS_XB]
-Выбор
-
-[FED_BRI]
-ЯРКОСТЬ
-
-[FED_CON]
-Подтвердите удаление записи
-
-[FED_DBG]
-Отладочное меню
-
-[FED_DFL]
-CTheScripts::DbgFlag
-
-[FED_DLS]
-Большая отладочная лампа переключена
-
-[FED_DLW]
-Идет удаление. Пожалуйста, подождите...
-
-[FED_DSR]
-Debug Streaming Requests
-
-[FED_LDW]
-Идет загрузка. Пожалуйста, подождите...
-
-[FED_LFL]
-Игру загрузить не удалось. Игра будет перезапущена.
-
-[FED_PAH]
-Parse Heap
-
-[FED_RCD]
-CCullZones::RecalculateCullZoneData
-
-[FED_RES]
-РАЗРЕШЕНИЕ ЭКРАНА
-
-[FED_RID]
-Reload IDE
-
-[FED_RIP]
-Reload IPL
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FED_SCR]
-Show Car Road Grups
-
-[FED_SCZ]
-Show Cull Zones
-
-[FED_SPR]
-Show Ped Road Groups
-
-[FED_SUB]
-СУБТИТРЫ
-
-[FED_TRA]
-ШЛЕЙФ ОТ ДВИЖУЩИХСЯ ОБЪЕКТОВ
-
-[FED_WIS]
-ШИРОКИЙ ЭКРАН
-
-[FEFD_WR]
-Formatting Memory Card (PS2) in MEMORY CARD slot 1. Please do not remove the Memory Card (PS2), reset or switch off the console.
-
-[FEF_AU1]
-Прибавьте громкости!
-
-[FEF_AU2]
-Выберите радиостанцию и звуковой эффект
-
-[FEF_BR1]
-Не знаете, что делать?
-
-[FEF_BR2]
-Прочтите тексты последних заданий, отсортированных по дате.
-
-[FEF_CO1]
-Вас не устраивает такой способ управления?
-
-[FEF_CO2]
-Выберите наиболее удобное для вас управление
-
-[FEF_DI1]
-Игра изменена!
-
-[FEF_DI2]
-Настройка игры под ваш телевизор
-
-[FEF_INT]
-ИНТЕРНЕТ
-
-[FEF_LA1]
-О чем ты, черт побери, говоришь?
-
-[FEF_LA2]
-Выбери такую манеру выражаться, какая тебя устроит.
-
-[FEF_LAN]
-ЛОКАЛЬНАЯ СЕТЬ
-
-[FEF_SA1]
-Борись за свое место в списке!
-
-[FEF_SA2]
-Загрузка и сохранение вашей игры
-
-[FEF_ST1]
-Кто тут у нас плохой?
-
-[FEF_ST2]
-Сколько ты вызвал аварий
-
-[FEG_MAP]
-КАРТА
-
-[FEG_PLY]
-ИГРОКИ
-
-[FEG_PNG]
-ПИНГ
-
-[FEG_SRV]
-СЕРВЕР
-
-[FEG_TYP]
-ТИП
-
-[FELD_WR]
-Loading data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FELZ_FO]
-Memory Card (PS2) in MEMORY CARD slot 1 is unformatted.
-
-[FEL_ENG]
-АНГЛИЙСКИЙ
-
-[FEL_FRE]
-ФРАНЦУЗСКИЙ
-
-[FEL_GER]
-НЕМЕЦКИЙ
-
-[FEL_ITA]
-ИТАЛЬЯНСКИЙ
-
-[FEL_SPA]
-ИСПАНСКИЙ
-
-[FEM_CES]
-Check Every 0kB4 Save
-
-[FEM_CLI]
-Создание и загрузка иконок
-
-[FEM_CPD]
-Create copy protected mag directory
-
-[FEM_CRD]
-Create Root Dir
-
-[FEM_DBG]
-ОТЛАДКА
-
-[FEM_FFF]
-Fill First File with Guff
-
-[FEM_FRM]
-ОГРАНИЧЕНИЕ КОЛИЧЕСТВА КАДРОВ
-
-[FEM_HST]
-СОЗДАТЕЛЬ ИГРЫ
-
-[FEM_LOD]
-ДАЛЬНОСТЬ ПРОРИСОВКИ
-
-[FEM_MA0]
-Либерти Сити
-
-[FEM_MA1]
-Кв. красных фонарей
-
-[FEM_MA2]
-Чайнатаун
-
-[FEM_MA3]
-Башня
-
-[FEM_MA4]
-Канализация
-
-[FEM_MA5]
-Промышленный парк
-
-[FEM_MA6]
-Доки
-
-[FEM_MA7]
-Стаунтон
-
-[FEM_MAP]
-Выбор карты
-
-[FEM_MC2]
-Memory Card Menu 2
-
-[FEM_MCM]
-Memory Card Menu
-
-[FEM_MM]
-ГЛАВНОЕ МЕНЮ
-
-[FEM_MP]
-ИГРА ПО СЕТИ
-
-[FEM_NO]
-НЕТ
-
-[FEM_NON]
-НЕТ
-
-[FEM_OFF]
-ВЫКЛ
-
-[FEM_ON]
-ВКЛ
-
-[FEM_OPT]
-НАСТРОЙКИ
-
-[FEM_QT]
-ВЫХОД
-
-[FEM_RES]
-ВЕРНУТЬСЯ В ИГРУ
-
-[FEM_RMC]
-Register MemCard One
-
-[FEM_SL1]
-Ячейка 1 свободна
-
-[FEM_SL2]
-Ячейка 2 свободна
-
-[FEM_SL3]
-Ячейка 3 свободна
-
-[FEM_SL4]
-Ячейка 4 свободна
-
-[FEM_SL5]
-Ячейка 5 свободна
-
-[FEM_SL6]
-Ячейка 6 свободна
-
-[FEM_SL7]
-Ячейка 7 свободна
-
-[FEM_SL8]
-Ячейка 8 свободна
-
-[FEM_SOG]
-Save Only The Game
-
-[FEM_SP]
-ОДИН ИГРОК
-
-[FEM_STG]
-Запись игры
-
-[FEM_STS]
-Save The Game under GTA3 name
-
-[FEM_TD]
-Test Delete:
-
-[FEM_TFM]
-Test Format MemCard One
-
-[FEM_TL]
-Test Load:
-
-[FEM_TS]
-Test Save:
-
-[FEM_TUM]
-Test UnFormat MemCard One
-
-[FEM_VSC]
-СИНХРОНИЗАЦИЯ КАДРОВ
-
-[FEM_YES]
-ДА
-
-[FEN_CON]
-Подключение
-
-[FEN_GAM]
-Поиск игр
-
-[FEN_GNA]
-Имя игры:
-
-[FEN_NAM]
-Имя:
-
-[FEN_NCI]
-НЕТ СВЯЗИ С ИНТЕРНЕТОМ
-
-[FEN_NET]
-Сеть
-
-[FEN_PLA]
-Число игроков:
-
-[FEN_PLC]
-Цвет игрока
-
-[FEN_PLS]
-Настройки игрока
-
-[FEN_STA]
-НАЧАТЬ ИГРУ
-
-[FEN_TY0]
-Сражение
-
-[FEN_TY1]
-Партизанская война
-
-[FEN_TY2]
-Командный бой
-
-[FEN_TY3]
-Командная партизанская война
-
-[FEN_TY4]
-Кража денег
-
-[FEN_TY5]
-Захват флага
-
-[FEN_TY6]
-Крысиные гонки
-
-[FEN_TY7]
-Доминатор
-
-[FEN_TYP]
-Тип игры
-
-[FEN_UKH]
-Неизвестный сервер
-
-[FEN_UKM]
-Карта не найдена
-
-[FEN_UKT]
-Неизвестный тип игры
-
-[FEP_AUD]
-ЗВУК
-
-[FEP_BRI]
-СООБЩЕНИЯ
-
-[FEP_CON]
-УПРАВЛЕНИЕ
-
-[FEP_DIS]
-ЭКРАН
-
-[FEP_LAN]
-ЯЗЫК
-
-[FEP_SAV]
-ПРОДОЛЖИТЬ ИГРУ
-
-[FEP_STA]
-СТАТИСТИКА
-
-[FEQ_SRE]
-Вы точно решили выйти? Все что вы успели сделать после последнего сохранения будет потеряно. Выходим?
-
-[FEQ_SRW]
-Вы точно решили выйти из игры?
-
-[FESTDCM]
-Расстояние, пройденное на машине (м)
-
-[FESTDFM]
-Расстояние, пройденное пешком (м)
-
-[FEST_BB]
-Быстрые тачки - легкие деньги:
-
-[FEST_BD]
-Лучшее время деактивации бомбы
-
-[FEST_CC]
-Убито преступников во время работы полицейским
-
-[FEST_DC]
-Расстояние, пройденное на машине (миль)
-
-[FEST_DF]
-Расстояние, пройденное пешком (миль)
-
-[FEST_FE]
-Потушено пожаров
-
-[FEST_GC]
-Взорвано бандитских машин:
-
-[FEST_H0]
-Пройдено контрольных точек
-
-[FEST_H1]
-Драка с Дьяволами
-
-[FEST_H2]
-Мордобой с мафией
-
-[FEST_H3]
-Катастрофа в казино
-
-[FEST_H4]
-Разборка с растаманами
-
-[FEST_HA]
-Максимальный уровень заданий 'скорой'
-
-[FEST_LF]
-Лучшее время полета на Додо
-
-[FEST_LS]
-Спасено людей во время работы на 'скорой'
-
-[FEST_MP]
-Заданий выполнено
-
-[FEST_OO]
-из
-
-[FEST_R1]
-'Пэтриот Ралли' (сек)
-
-[FEST_R2]
-'Гонка в парке' (сек)
-
-[FEST_R3]
-Догнал! за (сек)
-
-[FEST_RM]
-'Гонка по гаражу' (сек)
-
-[FEST_RP]
-Схваток завершено
-
-[FESZ_CA]
-Отмена
-
-[FESZ_FF]
-Format Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FESZ_FM]
-Memory Card (PS2) in MEMORY CARD slot 1 is unformatted. Would you like to format Memory Card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_FO]
-Would you like to format the Memory Card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_L1]
-Игра успешно сохранена!
-
-[FESZ_L2]
-Игра сохранена в файле:
-
-[FESZ_LS]
-Загрузка завершена.
-
-[FESZ_OK]
-OK
-
-[FESZ_OW]
-Overwriting data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FESZ_QD]
-Вы точно решили удалить эту запись игры?
-
-[FESZ_QF]
-Are you sure you wish to format the Memory Card (PS2) in MEMORY CARD slot 1?
-
-[FESZ_QL]
-Все что вы успели сделать после последнего сохранения будет потеряно. Вы точно решили загрузить сохраненную игру?
-
-[FESZ_QO]
-Вы решили записать игру на место предыдущей записи?
-
-[FESZ_QR]
-Вы точно решили начать новую игру? Все что вы успели сделать после последнего сохранения будет потеряно. Начнем?
-
-[FESZ_QS]
-ЗАПИСАТЬ ИГРУ ?
-
-[FESZ_QU]
-Выход
-
-[FESZ_QZ]
-Вы уверены, что хотите сохранить игру?
-
-[FESZ_SA]
-Запись игры
-
-[FESZ_SR]
-Save Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FESZ_TI]
-SAVE Z1
-
-[FESZ_UC]
-ОТМЕНА
-
-[FESZ_WR]
-Saving data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[FES_AFO]
-This Memory Card (PS2) is already formatted.
-
-[FES_CAN]
-Отмена
-
-[FES_CGA]
-Доступные ячейки для сохранения:
-
-[FES_CSA]
-Выберите одежду из списка:
-
-[FES_DAT]
- ДАТА
-
-[FES_DEE]
-Deleting Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FES_DGA]
-УДАЛЕНИЕ ЗАПИСЕЙ
-
-[FES_GME]
-Error Reading Memory Card (PS2) in MEMORY CARD slot 1 please check and try again.
-
-[FES_ISC]
-ПОВРЕЖДЕН
-
-[FES_ISF]
-ОТСУТСТВУЕТ
-
-[FES_LCG]
-Продолжить игру с того места, где вы записались?
-
-[FES_LG]
-ЗАГРУЗКА ИГРЫ
-
-[FES_LGA]
-Загрузить игру
-
-[FES_LOE]
-Load Failed! Check Memory Card (PS2) in MEMORY CARD slot 1 and please try again.
-
-[FES_LOF]
-Загрузка не удалась.
-
-[FES_NGA]
-Новая игра
-
-[FES_NOC]
-No Memory Card (PS2) in MEMORY CARD slot 1.
-
-[FES_NON]
-ВАРИАНТЫ ОДЕЖДЫ ОТСУТСТВУЮТ
-
-[FES_SAG]
-ИМЕЕТСЯ
-
-[FES_SCG]
-Сохранить текущую игру?
-
-[FES_SET]
-ПЕРЕОДЕТЬСЯ
-
-[FES_SG]
-НАЧАТЬ НОВУЮ ИГРУ
-
-[FES_SKN]
-НАЗВАНИЕ ОДЕЖДЫ
-
-[FES_SLO]
-ФАЙЛ ЗАПИСИ
-
-[FES_SNG]
-НАЧАТЬ НОВУЮ ИГРУ
-
-[FES_SSC]
-Игра успешно сохранена.
-
-[FES_WAR]
-Идет запись, подождите...
-
-[FET_AMS]
-НАСТРОЙКА МЫШИ
-
-[FET_APL]
- ОК?
-
-[FET_APP]
-ЛЕВАЯ КНОПКА МЫШИ ИЛИ ВВОД ДЛЯ ПРИНЯТИЯ ИЗМЕНЕНИЙ
-
-[FET_AUD]
-НАСТРОЙКА ЗВУКА
-
-[FET_BRE]
-СООБЩЕНИЯ
-
-[FET_CAC]
-ДЕЙСТВИЯ
-
-[FET_CCN]
-УПРАВЛЕНИЕ: СТАНДАРТНОЕ
-
-[FET_CCR]
-В МАШИНЕ
-
-[FET_CFT]
-ПЕШКОМ
-
-[FET_CIG]
-ЗАБОЙ - УБРАТЬ КЛАВИШИ, ЛЕВАЯ КНОПКА МЫШИ ИЛИ ВВОД - ЗАДАТЬ
-
-[FET_CME]
-ТИП УПРАВЛЕНИЯ
-
-[FET_CON]
-СОЕДИНЕНИЕ
-
-[FET_CTI]
-СТАНДАРТНЫЙ ТИП УПРАВЛЕНИЯ
-
-[FET_CTL]
-НАСТРОЙКА УПРАВЛЕНИЯ
-
-[FET_DAM]
-ДИНАМИЧЕСКАЯ МОДЕЛЬ АКУСТИКИ
-
-[FET_DEF]
-СТАНДАРТНЫЕ НАСТРОЙКИ
-
-[FET_DG]
-УДАЛЕНИЕ ИГРЫ
-
-[FET_DIS]
-НАСТРОЙКА ГРАФИКИ
-
-[FET_DSN]
-Обычная}одежда.bmp
-
-[FET_EIG]
-ДЛЯ ЭТОГО ДЕЙСТВИЯ НЕЛЬЗЯ ЗАДАТЬ КНОПКУ
-
-[FET_FG]
-НАЙТИ ИГРУ
-
-[FET_FIL]
-Фильтр
-
-[FET_GFX]
-НАСТРОЙКА ГРАФИКИ
-
-[FET_GT]
-ТИП ИГРЫ
-
-[FET_HG]
-СОЗДАТЬ ИГРУ
-
-[FET_HRD]
-УСТАНОВЛЕНЫ СТАНДАРТНЫЕ НАСТРОЙКИ
-
-[FET_JG]
-Подключиться
-
-[FET_LAN]
-ВЫБОР ЯЗЫКА
-
-[FET_LG]
-ЗАГРУЗКА ИГРЫ
-
-[FET_MAP]
-ВЫБОР КАРТЫ
-
-[FET_MIG]
-ВЫБОР ПАРАМЕТРА СТРЕЛКАМИ ВЛЕВО, ВПРАВО И КОЛЕСИКОМ МЫШИ
-
-[FET_MP]
-ИГРА ПО СЕТИ
-
-[FET_MST]
-РУЛИТЬ МЫШЬЮ
-
-[FET_MTI]
-ЗАДАНИЕ ПАРАМЕТРОВ МЫШИ
-
-[FET_NG]
-НОВАЯ ИГРА
-
-[FET_NON]
-НЕТ ДОСТУПНЫХ ИГР
-
-[FET_OPT]
-НАСТРОЙКИ
-
-[FET_PAU]
-ПАУЗА В ИГРЕ
-
-[FET_PS]
-ВЫБОР ОДЕЖДЫ
-
-[FET_PSU]
-ВЫБОР ОДЕЖДЫ
-
-[FET_QG]
-ВЫХОД
-
-[FET_RDK]
-ЗАДАТЬ УПРАВЛЕНИЕ
-
-[FET_REF]
-Частота обновления
-
-[FET_RIG]
-ВЫБЕРИТЕ КНОПКУ ДЛЯ ЭТОГО ДЕЙСТВИЯ ИЛИ НАЖМИТЕ ESC ДЛЯ ОТМЕНЫ
-
-[FET_RSC]
-НЕВОЗМОЖНО УСТАНОВИТЬ ЭТОТ ПАРАМЕТР
-
-[FET_RSO]
-ВОССТАНОВЛЕНЫ СТАНДАРТНЫЕ НАСТРОЙКИ
-
-[FET_SAN]
-НАЧАТЬ НОВУЮ ИГРУ
-
-[FET_SCN]
-УПРАВЛЕНИЕ: ОБЫЧНОЕ
-
-[FET_SFG]
-ПОИСК ИГР...
-
-[FET_SG]
-СОХРАНЕНИЕ ИГРЫ
-
-[FET_SGA]
-НАЧАТЬ ИГРУ
-
-[FET_SNG]
-НАЧАТЬ НОВУЮ ИГРУ
-
-[FET_SP]
-ОДИН ИГРОК
-
-[FET_SRT]
-СОРТИРОВКА ИГР...
-
-[FET_STA]
-СТАТИСТИКА
-
-[FET_STI]
-ОБЫЧНЫЙ ТИП УПРАВЛЕНИЯ
-
-[FE_INIP]
-Инициализация и загрузка меню... Подождите.
-
-[FIL_FLT]
-ФИЛЬТР СПИСКА ИГР
-
-[FIL_MAP]
-Карта:
-
-[FIL_PNG]
-Пинг:
-
-[FIL_SPC]
-Доступна игра одному?
-
-[FIL_SRV]
-Создатель:
-
-[FIL_TYP]
-Тип игры:
-
-[FIRETRK]
-Пожарная
-
-[FIRE_M]
-'ПОЖАРНЫЙ'
-
-[FIRE_WS]
-Пожарник погиб
-
-[FIRST]
-~g~первый
-
-[FLASHB]
-Flashback FM
-
-[FLATBED]
-Флетбед
-
-[FLFSGF]
-Fill First File With Guff
-
-[FM1]
-'ПРОГУЛКА'
-
-[FM1_1]
-~g~Вернись назад в Стретч!
-
-[FM1_10]
-~g~Ты проехал мимо Марии, возвращайся и посади ее в машину.
-
-[FM1_2]
-~g~Залезай в Стретч!
-
-[FM1_3]
-~r~Вернись за Марией, иначе Сальваторе с тобой рассчитается.
-
-[FM1_4]
-~g~Ты бросил дочь дона! Возвращайся на склад и жди Марию!
-
-[FM1_5]
-~g~Отвези Марию назад к Сальваторе!
-
-[FM1_6]
-~g~Чико не будет ждать вечно! Отвези Марию на берег!
-
-[FM1_7]
-~r~Мария мертва! Сальваторе это не понравится...
-
-[FM1_8]
-~r~Ты замочил дилера Марии!
-
-[FM1_9]
-~g~Там какая-то гулянка, высади Марию неподалеку.
-
-[FM1_A]
-~w~Мне с приятелями нужно поговорить о деле,
-
-[FM1_AA]
-~w~Я лучше пойду. Надеюсь, увидимся попозже.
-
-[FM1_B]
-~w~Этим вечером тебе придется присматривать за моей девочкой.
-
-[FM1_C]
-~w~ЭЙ МАРИЯ! ПОДНИМАЙ СВОЮ ЗАДНИЦУ!
-
-[FM1_D]
-~w~Эту глупую девку постоянно приходится звать.
-
-[FM1_E]
-~w~А вот и она, единственная и неповторимая королева красоты!
-
-[FM1_F]
-~w~Чем ты там занималась?
-
-[FM1_G]
-~w~Наверняка просаживала мои деньги.
-
-[FM1_H]
-~w~Ну ты же не хочешь, чтобы я крутилась тут и мешала вашему разговору?
-
-[FM1_I]
-~w~Заткнись и иди в машину.
-
-[FM1_J]
-~w~Возьми мой лимузин, но верни его в целости и сохранности, понял?
-
-[FM1_K]
-~w~И смотри чтобы она не влипла в историю.
-
-[FM1_L]
-~w~Да, да, да! Я думаю, твой новый пес может обо мне позаботиться -
-
-[FM1_M]
-~w~вон он какой здоровый.
-
-[FM1_N]
-~w~Эй, Тузик, давай разживемся гостинцами у Чико!
-
-[FM1_O]
-~w~Я думаю, он где-то на железнодорожной станции, у берега Чайнатауна.
-
-[FM1_P]
-~g~А вот и Чико, давай рули к нему.
-
-[FM1_Q]
-~w~Привет, Мария! Прелесть моя!
-
-[FM1_Q1]
-~w~Хочешь поразвлечься? Ну немного... а? Может СПАНКа?
-
-[FM1_R]
-~w~Привет, Чико. Нет, я как обычно.
-
-[FM1_S]
-~w~Держи, золотце.
-
-[FM1_S1]
-~w~Эй, может ты заглянешь ко мне на вечеринку на складе к востоку от пристаней Атлантик.
-
-[FM1_SS]
-~r~РАЦИЯ: ~g~Четыре-пять всем подразделениям: Требуется помощь в облаве на наркоторговцев у пристаней Атлантик...
-
-[FM1_T]
-~w~Спасибо Чико. До скорого.
-
-[FM1_TT]
-~w~ЭТО ОБЛАВА!
-
-[FM1_U]
-~w~Благодарствую, наслаждайтесь. Это хороший товар.
-
-[FM1_V]
-~w~Давай, Тузик, скатаемся на его вечеринку!
-
-[FM1_W]
-~w~Хорошо, Тузик, присматривай за тачкой и жди меня, а я пока пойду подвигаю попой.
-
-[FM1_X]
-~w~Эй, Тузик, давай сматываться отсюда. Ихууу!
-
-[FM1_Y]
-~w~Знаешь, я уже давно так не веселилась, и ты хорошо со мной обращался. С уважением и все такое.
-
-[FM2]
-'СТРИЖКА ТРАВЫ'
-
-[FM21]
-'БОМБА НА БАЗЕ: ЧАСТЬ I'
-
-[FM2_1]
-~g~А вот и Кудрявый Боб!
-
-[FM2_10]
-~r~Кудрявый слинял!
-
-[FM2_11]
-~g~Встань у клуба Луиджи, Кудрявый Боб скоро выйдет.
-
-[FM2_12]
-~r~Он улизнул от тебя!
-
-[FM2_14]
-~r~Ты подошел слишком близко к Кудрявому и спугнул его!
-
-[FM2_15]
-~g~Не приближайся к Кудрявому, а то он заподозрит неладное!
-
-[FM2_16]
-ИСПУГ БОБА:
-
-[FM2_2]
-~g~Кудрявый вышел из клуба, начинай следить!
-
-[FM2_5]
-~g~Отвези его в гавань Портланда.
-
-[FM2_6]
-~r~Кудрявый не сядет в разбитое такси!
-
-[FM2_7]
-~r~Кудрявый испугался! Оне не пойдет на встречу!
-
-[FM2_8]
-~g~Разделайся с Кудрявым Бобом!
-
-[FM2_9]
-~r~Кудрявый Боб мертв!
-
-[FM2_A]
-Колумбийский картель производит СПАНК где-то в городе,
-
-[FM2_B]
-У нас завелась крыса!
-
-[FM2_C]
-Телками или дурью он не торгует - значит, стучит.
-
-[FM2_F]
-А вот и наш дружок - мистер Болтун.
-
-[FM2_G]
-За тобой следили? Лучше, чтобы никто не знал про наш маленький секрет.
-
-[FM2_H]
-Нет..нет, за мной нет хвоста. Дурь у тебя?
-
-[FM2_I]
-Вот твой СПАНК, нытик, теперь выкладывай.
-
-[FM2_J]
-Оставь нас одних, нам нужно поговорить.
-
-[FM2_K]
-но мы не знаем где, а вот они, похоже, знают о каждом нашем шаге, еще до того как мы его сделаем.
-
-[FM2_L]
-Есть один парень - Кудрявый Боб, он работает в баре у Луиджи.
-
-[FM2_M]
-Он тратит больше бабок, чем зарабатывает.
-
-[FM2_N]
-Домой он обычно ездит на такси. Выследи его,
-
-[FM2_O]
-и, если он и есть та самая крыса... прикончи его.
-
-[FM2_P]
-В общем, так: семья Леоне воюет на два фронта.
-
-[FM2_Q]
-Они дерутся за сферы влияния с Триадой, но пока ни одна из сторон не уступает.
-
-[FM2_R]
-А тем временем Джоуи Леоне пустил немного крови Форелли.
-
-[FM2_S]
-Каждый день они теряют людей и свое влияние в городе.
-
-[FM2_T]
-Сальваторе становится опасным параноиком. Он всюду видит одни заговоры.
-
-[FM2_U]
-С такими преданными людьми, как ты, ему не о чем беспокоиться.
-
-[FM3]
-'БОМБА НА БАЗЕ: ЧАСТЬ II'
-
-[FM3_4]
-~g~Останови тачку и дай Лысому выйти!
-
-[FM3_7]
-~r~Лысого замочили!
-
-[FM3_8]
-~r~Охранники подняли тревогу!
-
-[FM3_8A]
-~w~Здорово, друган! Сальваторе мне уже звонил.
-
-[FM3_8B]
-~w~Для этой работенки потребуется много взрывчатки.
-
-[FM3_8C]
-~w~Мне нужно $100,000, чтобы покрыть расходы,
-
-[FM3_8D]
-~w~но ты же знаешь, что я отработаю каждый доллар.
-
-[FM3_8E]
-~w~Окей, давай провернем это дельце!
-
-[FM3_8F]
-~w~Я бы взорвал эту крошку, но пока еще не могу удержать оружие в руках.
-
-[FM3_8G]
-~w~Вот, это ружьишко поможет тебе снести несколько голов!
-
-[FM3_8I]
-~w~Займи удобную позицию, я пойду сразу, после твоего первого высрела.
-
-[FM3_A]
-~w~Мы должны убрать этих колумбийских ублюдков,
-
-[FM3_B]
-~w~но эта война с Триадой сильно истощила наши ряды.
-
-[FM3_C]
-~w~У Картеля очень много зелени, полученной с продажи этого СПАНКа.
-
-[FM3_CC]
-~w~Браток, приходи, когда наскребешь бабок.
-
-[FM3_D]
-~w~Если мы пойдем в открытую атаку, то они просто размажут нас по стенке.
-
-[FM3_E]
-~w~Похоже, они производят СПАНК на том большом корабле, к которому тебя вывел Кудрявый.
-
-[FM3_F]
-~w~Так что нам придется пораскинуть мозгами. Твоими мозгами.
-
-[FM3_G]
-~w~Я, Сальваторе Леоне, лично прошу тебя сделать мне одолжение и уничтожить эту фабрику по производству СПАНКа.
-
-[FM3_H]
-~w~Если ты провернешь для меня это дело - проси все что пожелаешь.
-
-[FM3_I]
-~w~Иди к Лысому. Без его помощи тебе эту работу не сделать.
-
-[FM4]
-'ПОСЛЕДНЯЯ ПРОСЬБА'
-
-[FM4_1]
-Это Мария. Эта машина - ловушка! Давай встретимся южнее моста Каллахан.
-
-[FM4_2]
-Послушай, Сальваторе думает что мы за его спиной крутим роман,
-
-[FM4_3]
-поэтому он заключил с картелем сделку и заложил тебя.
-
-[FM4_4]
-Я не могла этого допустить, ведь тебя бы прикончили,
-
-[FM4_4B]
-и это была бы моя вина... потому что я сказала, что мы были вместе.
-
-[FM4_5]
-Я сама не знаю, почему я это ему сказала.
-
-[FM4_6]
-Похоже теперь за тобой будет охотиться мафия, да и за мной, видимо, тоже.
-
-[FM4_6B]
-Я уже устала от убийств. От этих рек крови!
-
-[FM4_7]
-Это моя хорошая знакомая, она старый друг... это Асука, она из тех, кому можно доверять.
-
-[FM4_8]
-Пошли, хватит распинаться.
-
-[FM4_9]
-Нам лучше убираться, пока здесь не появились наши старые друзья, которым уже нельзя доверять.
-
-[FM4_A]
-~w~А, мой лучший чистильщик.
-
-[FM4_B]
-~w~Я горжусь тобой, мальчик, ты выбил дерьмо из этих жирных свиней.
-
-[FM4_C]
-~w~Но выполни еще одно маленькое задание, прежде чем мы отпразднуем победу.
-
-[FM4_D]
-~w~Рядом с клубом Луиджи стоит одна машина.
-
-[FM4_E]
-~w~Внутри все залито кровью.
-
-[FM4_F]
-~w~Мы вправили одному парню мозги, но получилось не очень аккуратно.
-
-[FM4_H]
-~w~Отгони машину в утилизатор, чтобы не смущать копов.
-
-[FORMEN]
-Format Menu
-
-[FORMM1]
-FormatMemCard 1 (teststuff)
-
-[FOURTH]
-~g~четвертый
-
-[FRANGO]
-~g~Сальваторе хочет, чтобы ты сперва помог Тони разобраться с Триадой!
-
-[FRANK]
-ЗАДАНИЯ САЛЬВАТОРЕ
-
-[FRENCH]
-Французкий
-
-[FTUTOR]
-Нажми кнопку ~h~~k~~TOGGLE_SUBMISSIONS~~w~, чтобы заняться работой пожарного, или отказаться от нее.
-
-[FTUTOR2]
-Нажми кнопку ~h~~k~~TOGGLE_SUBMISSIONS~~w~, чтобы заняться работой пожарного, или отказаться от нее.
-
-[F_CANC]
-~r~Задание пожарного прервано!
-
-[F_EXTIN]
-ПОЖАРЫ:
-
-[F_FAIL1]
-Задание не выполнено.
-
-[F_FAIL2]
-~r~Ты опоздал!
-
-[F_PASS1]
-Огонь потушен!
-
-[F_RANGE]
-~g~Рация в машине не ловит сигнал, подъедь поближе к пожарной части!
-
-[F_START]
-~g~Место возгорания машины: ~a~. Езжай и сбей огонь.
-
-[F_WASTE]
-Женщин убито
-
-[GAMEOVR]
-ИГРА ОКОНЧЕНА
-
-[GAMSET]
-Настройки игры
-
-[GAM_FM]
-Радио Game FM
-
-[GARAGE]
-Поставь машину в гараж и выйди наружу.
-
-[GARAGE1]
-~g~Вылазь из машины и выходи из гаража.
-
-[GA_1]
-Ух, ты! Я не трогал ничего БОЛЕЕ горячего!
-
-[GA_10]
-Отлично. Вот тебе ~1~ баксов.
-
-[GA_11]
-У нас уже есть такая тачка. Больше нам уже не нужно!
-
-[GA_12]
-Бомба активирована
-
-[GA_13]
-Отличная работа! Пригонишь остальные - получишь вознаграждение.
-
-[GA_14]
-Все тачки. КРУТО! Вот тебе за это.
-
-[GA_15]
-Надеюсь, тебе понравится этот цвет.
-
-[GA_16]
-Перекраска бесплатно.
-
-[GA_19]
-Нам такая колымага не нужна.
-
-[GA_1A]
-Возвращайся, когда будешь свободен...
-
-[GA_2]
-Машина отремонтирована и перекрашена. Теперь копы тебя не узнают!
-
-[GA_20]
-У нас этого хлама больше чем нужно. Прости, сделка не состоится.
-
-[GA_21]
-Больше в этот гараж поставить машин нельзя.
-
-[GA_3]
-Подарков больше не будет. Окраска стоит $1000!
-
-[GA_4]
-Установка бомбы в машину стоит $1000
-
-[GA_5]
-Я уже поставил в бомбу в эту тачку.
-
-[GA_6]
-Припаркуй тачку на место, нажми ~h~~k~~PED_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
-
-[GA_6B]
-Припаркуй тачку на место, нажми ~h~~k~~PED_FIREWEAPON~~w~ и ДЕЛАЙ НОГИ!
-
-[GA_7]
-Включи бомбу, нажав на ~h~~k~~PED_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
-
-[GA_7B]
-Включи бомбу, нажав на ~h~~k~~PED_FIREWEAPON~~w~. Бомба взорвется как только заведется мотор.
-
-[GA_8]
-Взорви бомбу с помощью детонатора.
-
-[GA_9]
-Ты собрал ~1~ из 10 особых тачек
-
-[GERMAN]
-German
-
-[GHOST]
-Призрак
-
-[GMLOAD]
-ПРОДОЛЖИТЬ ИГРУ
-
-[GMREST]
-Перезапуск игры
-
-[GMSAVE]
-СОХРАНЕНИЕ ИГРЫ
-
-[GMSTOR]
-Game Store
-
-[GMSVLQ]
-GAME SAVE-LOAD-QUIT
-
-[GNG_WST]
-Убито членов банд
-
-[GOAWAY]
-~g~Ты уже на задании!
-
-[GOBACK]
-GoBack
-
-[GORLEV]
-Уровень крови
-
-[GREN_1]
-Чем дольше ты держишь ~h~~k~~PED_FIREWEAPON~~w~, тем дальше ты бросишь гранату.
-
-[GREN_2]
-Чем дольше ты держишь ~h~~k~~PED_FIREWEAPON~~w~, тем дальше ты бросишь гранату.
-
-[GREN_3]
-Чем дольше ты держишь ~h~~k~~PED_FIREWEAPON~~w~, тем дальше ты бросишь гранату.
-
-[GTAB_A]
-Эй, давайте уберите это отсюда. Черт его знает, что это такое,
-
-[GTAB_B]
-но раз он так хотел это заполучить, то это, наверное, что-то ценное.
-
-[GTAB_C]
-Что за черт!
-
-[GTAB_D]
-ТЫ!
-
-[GTAB_E]
-Успокойся, амиго! Де нада! Де нада!
-
-[GTAB_F]
-Я порежу тебя и брошу в канаву истекать кровью!
-
-[GTAB_G]
-Не стреляй, амиго. Без базара. Мы все друзья. Вот, забирай.
-
-[GTAB_H]
-Не будь таким засранцем!
-
-[GTAB_I]
-У нас нет выбора, крошка!
-
-[GTAB_J]
-Выбор есть всегда, ты чертов ублюдок!
-
-[GTAB_K]
-Прости, это все эта бешеная сучка, это все она...пор фавор?
-
-[GTAB_L]
-Итак, этой сучки больше нет.
-
-[GTAB_M]
-Но ты оказал мне услугу,
-
-[GTAB_N]
-ты не единственный, у кого есть счеты с Картелем,
-
-[GTAB_O]
-эта мразь убила моего брата!
-
-[GTAB_P]
-Я никогда не убивал якудза!
-
-[GTAB_Q]
-ЛЖЕЦ. Мы все видели убийцу Картеля.
-
-[GTAB_R]
-Мы выследим и убьем всех вас, колумбийских собак!
-
-[GTAB_S]
-Я поиграю немного с твоим другом, чтобы получить информацию и доставить себе удовольствие.
-
-[GTAB_T]
-Я жду тебя позже, я уверена, мне понадобятся твои услуги.
-
-[GTAB_U]
-Пожалуйста, амиго, не оставляй меня с ней, она ненормальная! Друг? Эй, ДРУУУГ!!!... Аииииаааахххх!
-
-[GUN_1A]
-Для смены оружия используй ~h~~k~~PED_CYCLE_WEAPON_RIGHT~~w~ и ~h~~k~~PED_CYCLE_WEAPON_LEFT~.
-
-[GUN_2A]
-Держи ~h~~k~~PED_LOCK_TARGET~~w~, чтобы ~h~прицелиться~w~, а затем нажимай ~h~~k~~PED_FIREWEAPON~~w~, чтобы выстрелить! Потренируйся на мишенях...
-
-[GUN_2C]
-Держи ~h~~k~~PED_LOCK_TARGET~~w~, чтобы ~h~прицелиться~w~, а затем нажимай ~h~~k~~PED_FIREWEAPON~~w~, чтобы выстрелить! Потренируйся на мишенях...
-
-[GUN_2D]
-Держи ~h~~k~~PED_LOCK_TARGET~~w~ чтобы ~h~прицелиться~w~, а затем нажимай ~h~~k~~PED_FIREWEAPON~~w~ чтобы выстрелить! Потренируйся на мишенях...
-
-[GUN_3A]
-Чтобы сменить цель, удерживая ~h~~k~~PED_LOCK_TARGET~~w~, нажимай ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~ или ~h~~k~~PED_CYCLE_TARGET_RIGHT~~w~.
-
-[GUN_3B]
-Чтобы сменить цель, удерживая ~h~~k~~PED_LOCK_TARGET~~w~, нажимай ~h~~k~~PED_CYCLE_TARGET_LEFT~~w~ или ~h~~k~~PED_CYCLE_TARGET_RIGHT~~w~.
-
-[GUN_4A]
-Когда ты держишь ~h~~k~~PED_LOCK_TARGET~~w~, то можешь ходить или бегать, не выпуская цель из перекрестия.
-
-[GUN_4B]
-Когда ты держишь ~h~~k~~PED_LOCK_TARGET~~w~, то можешь ходить или бегать, не выпуская цель из перекрестия.
-
-[GUN_5]
-Ты можешь попрактиковаться на этих мишенях в прицеливании и стрельбе. Как только закончишь - возвращайся к заданию.
-
-[HARWOOD]
-Харвуд
-
-[HEAD]
-Head Radio
-
-[HEALTH]
-ЦЕЛОСТНОСТЬ:
-
-[HEALTH1]
-Проваливай! Ты полностью здоров.
-
-[HEALTH2]
-Лечение не бесплатное.
-
-[HEALTH3]
-Сейчас я тебя подлатаю.
-
-[HEALTH4]
-Это будет стоить тебе $250.
-
-[HEAL_A]
-Твое ~h~здоровье~w~ отображается оранжевыми цифрами в верхнем правом углу экрана.
-
-[HEAL_B]
-Когда ты ~h~вырубаешься,~w~ тебя отвозят в ближайший госпиталь
-
-[HEAL_C]
-При этом ты теряешь все свое оружие и доктора берут с тебя немного денег за лечение.
-
-[HEAL_E]
-Во время игры ты найдешь способы, как подлечиться или сберечь свое здоровье.
-
-[HED_EX]
-Голов расколото
-
-[HELI]
-Вертолет
-
-[HELP1]
-Остановите машину в центре голубого круга.
-
-[HELP10]
-Эти значки показывают, насколько сильно стремление копов арестовать тебя.
-
-[HELP11]
-Чем больше этих значков, тем более усердно тебя преследует полиция.
-
-[HELP12]
-Войди в голубой круг, чтобы получить новое задание.
-
-[HELP13]
-Иногда тебе придется ехать по дорогам, которые не показаны на радаре.
-
-[HELP14]
-Чтобы подобрать оружие, тебе нужно к нему подойти. Сидя в машине, ты оружие не возьмешь.
-
-[HELP15]
-Когда ты без машины, то, нажав ~h~~k~~PED_LOOKBEHIND~~w~, можешь ~h~оглянуться назад~w~.
-
-[HELP2_A]
-Чтобы ~h~разогнаться~w~, держи ~h~кнопку /~w~ во время бега.
-
-[HELP3]
-Мчаться ты можешь лишь до тех пор, пока не устанешь.
-
-[HELP4_A]
-Чтобы ~h~поехать вперед~w~, держи кнопку ~h~ ~k~~VEHICLE_ACCELERATE~~w~.
-
-[HELP4_D]
-Push the~h~ right analog stick~w~ up to ~h~accelerate.
-
-[HELP5_A]
-Держи кнопку~h~ ~k~~VEHICLE_BRAKE~~w~, чтобы ~h~затормозить~w~, или ~h~поехать назад~w~ после того, как машина остановится.
-
-[HELP5_D]
-Pull the ~h~right analog stick~w~ back to ~h~brake~w~, or to ~h~reverse~w~ if the vehicle has stopped.
-
-[HELP6_A]
-Держи кнопку~h~ ~k~~VEHICLE_HANDBRAKE~~w~, чтобы воспользоваться ~h~ручным тормозом.
-
-[HELP6_C]
-Держи кнопку~h~ ~k~~VEHICLE_HANDBRAKE~~w~, чтобы воспользоваться ~h~ручным тормозом.
-
-[HELP6_D]
-Держи кнопку~h~ ~k~~VEHICLE_HANDBRAKE~~w~, чтобы воспользоваться ~h~ручным тормозом.
-
-[HELP7_A]
-Нажми и удерживай~h~ ~k~~PED_LOCK_TARGET~~w~ кнопку, чтобы ~h~прицелиться~w~ из снайперской винтовки.
-
-[HELP7_D]
-Нажми и удерживай~h~ ~k~~PED_LOCK_TARGET~~w~ кнопку, чтобы ~h~прицелиться~w~ из снайперской винтовки.
-
-[HELP8_A]
-Нажми ~h~ ~k~~PED_SNIPER_ZOOM_IN~~w~, чтобы ~h~увеличить ~w~ изображение или ~h~ ~k~~PED_SNIPER_ZOOM_OUT~~w~, чтобы ~h~уменьшить~w~ его при при прицеливании из снайперской винтовки.
-
-[HELP8_B]
-Нажми ~h~ ~k~~PED_SNIPER_ZOOM_IN~~w~, чтобы ~h~увеличить ~w~ изображение или ~h~ ~k~~PED_SNIPER_ZOOM_OUT~~w~, чтобы ~h~уменьшить~w~ его при при прицеливании из снайперской винтовки.
-
-[HELP9_A]
-Нажми ~h~ ~k~~PED_FIREWEAPON~~w~, чтобы ~h~выстрелить~w~ из снайперской винтовки.
-
-[HELP9_B]
-Нажми ~h~ ~k~~PED_FIREWEAPON~~w~, чтобы ~h~выстрелить~w~ из снайперской винтовки.
-
-[HELP9_C]
-Нажми ~h~ ~k~~PED_FIREWEAPON~~w~, чтобы ~h~выстрелить~w~ из снайперской винтовки.
-
-[HEL_DST]
-Сбито вертолетов
-
-[HEY]
-~g~Не ходи в одиночку, иди с компанией!
-
-[HEY2]
-~g~Не разделяйтесь, идите вместе!
-
-[HEY3]
-~g~Ты потерял своего напарника, вернись к Лысому!
-
-[HEY4]
-~g~Потеряешь Мисти - к Луиджи лучше не возвращайся! Иди и найди ее!
-
-[HEY5]
-~g~Для полного кайфа не хватает еще одной телки. Сгоняй за ней!
-
-[HEY6]
-~g~Твоя честь зависит от якудза Канбу. Ты должен защищать его!
-
-[HEY7]
-~g~Возможно стоит получше вооружиться. Иди и забери своего напарника!
-
-[HEY8]
-~g~Защита - это значит 'защищать Старого Азиата'!
-
-[HEY9]
-~g~Хочешь совет? Иди, встреться с напарником!
-
-[HJSTAT]
-Дальность: ~1~.~1~м Высота: ~1~.~1~м Переворотов: ~1~ Поворот на: ~1~_
-
-[HJSTATF]
-Дальность: ~1~ft Высота: ~1~ft Переворотов: ~1~ Поворот на: ~1~_
-
-[HJSTATW]
-Дальность: ~1~.~1~м Высота: ~1~.~1~м Переворотов: ~1~ Поворот на: ~1~_ И отличное приземление!
-
-[HJSTAWF]
-Дальность: ~1~ft Высота: ~1~ft Переворотов: ~1~ Поворот на: ~1~_ И отличное приземление!
-
-[HJ_DIS]
-ПРИЗ ЗА ДВОЙНОЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_IS]
-ПРИЗ ЗА БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_PDIS]
-ПРИЗ ЗА ИДЕАЛЬНЫЙ ДВОЙНОЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_PIS]
-ПРИЗ ЗА ИДЕАЛЬНЫЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_PQIS]
-ПРИЗ ЗА ИДЕАЛЬНЫЙ ЧЕТВЕРНОЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_PTIS]
-ПРИЗ ЗА ИДЕАЛЬНЫЙ ТРОЙНОЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_QIS]
-ПРИЗ ЗА ЧЕТВЕРНОЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HJ_TIS]
-ПРИЗ ЗА ТРОЙНОЙ БЕЗУМНЫЙ ТРЮК: $~1~
-
-[HM1_1]
-~g~Прикончи 20 Пурпурных Девяток за 2 минуты 30 секунд.
-
-[HM1_2]
-~g~Возьми тачку, но не забывай, что из машины можно стрелять лишь из Узи!
-
-[HM1_3]
-~g~'Девятки' любят шататься в Садах Вичита.
-
-[HM1_A]
-Йо! Это ДиАйс из Красных Валетов!
-
-[HM1_B]
-Тут кое кто решил со мной поиграть.
-
-[HM1_C]
-У этих молодых панков, что заполонили весь город, головы забиты лишь СПАНком и оружием.
-
-[HM1_D]
-'Девятка' - это их знак, они придумали себе пурпурный флаг и готовы трясти им целыми днями...
-
-[HM1_E]
-Я хочу, чтобы ты показал этим малолетним ублюдкам, как работают профессионалы.
-
-[HM1_F]
-Будь поосторожней. На улицах могут оказаться Валеты, которые решат, что ты и их решил заодно мочкануть!
-
-[HM1_G]
-эти засранцы начинают теснить 'Валетов'.
-
-[HM1_H]
-Сделай так, чтобы этих Девяток здесь не было!
-
-[HM2_1]
-Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~PED_FIREWEAPON~~w~.
-
-[HM2_1A]
-Используй радоуправляемые машинки, чтобы подорвать броневики. Взрыв бомбы - ~h~~k~~PED_FIREWEAPON~~w~.
-
-[HM2_2]
-~r~Ты так и не смог подорвать все броневики!
-
-[HM2_3]
-Если машинка стукнется о колесо, то она взорвется!
-
-[HM2_4]
-Если машинка окажется вне действия радиоуправления, то она взорвется!
-
-[HM2_5]
-~r~Вне зоны приема сигнала!
-
-[HM2_6]
-~g~Броневик уничтожен!
-
-[HM2_A]
-Эти Девятки достали меня.
-
-[HM2_B]
-Уроды раздобыли где-то броневики и развозят на них СПАНК...
-
-[HM2_C]
-и без страха впаривают его желающим.
-
-[HM2_D]
-Выше по улице припаркована тачка.
-
-[HM2_E]
-В ней для тебя я кое-что припас, чтобы ты смог проучить этих тупиц...
-
-[HM2_F]
-и раздолбать их бронированные игрушки.
-
-[HM3_1]
-~g~Двигай к гаражу, но смотри, если сильно помнешь тачку - она взорвется!
-
-[HM3_2]
-~g~Забирай тачку, теперь она в полном порядке!
-
-[HM3_3]
-~g~Отремонтируй тачку!
-
-[HM3_A]
-Какая-то сволочь установила мне бомбу в тачку.
-
-[HM3_B]
-Если я потеряю колеса, то лишусь своей репутации в районе.
-
-[HM3_C]
-Давай отгони мою колымагу в гараж на Сент-Марк, ты понял, йо.
-
-[HM3_D]
-Как снять бомбу - это уже пусть они сами думают.
-
-[HM3_E]
-Часы уже тикают, давай, гони.
-
-[HM3_F]
-Но учти, одного столкновения достаточно, чтобы взлететь на воздух.
-
-[HM3_G]
-Ну же, вперед!
-
-[HM4_1]
-~g~Отправляйся к месту крушения самолета, тебе нужно собрать не менее 30 слитков.
-
-[HM4_2]
-~g~Запомни, по мере заполнения тачка будет тяжелеть и хуже слушаться руля, съезди в гараж и вывали там груз.
-
-[HM4_A]
-Йо, рейсовый самолет, перевозящий федеральные деньги разбился в аэропорту Фрэнсис.
-
-[HM4_B]
-Слитки платины валяются по всей взлетной полосе.
-
-[HM4_C]
-Бери тачку и сопри, сколько сможешь.
-
-[HM4_D]
-~g~Возьми тачку!
-
-[HM4_E]
-TEXT NO LONGER REQUIRED
-
-[HM4_F]
-Ты можешь возить слитки в один из моих гаражей.
-
-[HM4_G]
-Эти слитки чертовски тяжелые и будут замедлять движение.
-
-[HM4_H]
-Так что не забывай почаще сваливать груз.
-
-[HM5_1]
-Йо, Айс сказал ты придешь. Правила просты. Только биты. Никаких пушек, никаких машин.
-
-[HM5_3]
-~r~Тебе же сказали, что можно пускать в ход лишь биту!
-
-[HM5_4]
-~r~Твой напарник мертв!
-
-[HM5_5]
-Эта драка для поднятия авторитета, ты въехал?
-
-[HM5_6]
-Пошли, расколем несколько черепушек...
-
-[HM5_A]
-Эти Девятки уже в полном дерьме...
-
-[HM5_B]
-но им не терпится поквитаться.
-
-[HM5_C]
-Они согласились прийти на разборку.
-
-[HM5_D]
-Их банда против нас двоих, или точнее...
-
-[HM5_E]
-вас двоих,
-
-[HM5_F]
-я с тобой идти не могу...
-
-[HM5_G]
-мне еще три месяца нельзя светиться, у меня условное,
-
-[HM5_H]
-ты уловил, о чем я?
-
-[HM5_I]
-Мой младшенький встретит тебя,
-
-[HM5_J]
-он и покажет, где намечается устроить разборку, успехов, сынок.
-
-[HM_1]
-'РАБОТА ДЛЯ УЗИ'
-
-[HM_2]
-'ИГРУШЕЧНАЯ ВОЙНА'
-
-[HM_3]
-'ТАЧКА С БОМБОЙ'
-
-[HM_4]
-'МАННА НЕБЕСНАЯ'
-
-[HM_5]
-'РАЗБОРКА'
-
-[HOOD]
-ЗАДАНИЯ КАПЮШОНОВ
-
-[HOOD1_A]
-Сними трубку телефона стоящего в Садах Вичита, и мы обсудим одно дело.
-
-[HOODGO]
-~g~Сейчас у Капюшонов нет заданий!
-
-[HOODSCR]
-Рампо XL Капюшонов
-
-[HORN]
-~g~Посигналь.
-
-[HORN1]
-Press the ~h~L3 button ~w~to activate the ~h~horn.
-
-[HORN2]
-Press the ~h~L1 button ~w~to activate the ~h~horn
-
-[HORN3]
-Press the ~h~R1 button ~w~to activate the ~h~horn
-
-[HOSPI_2]
-Рокфорд
-
-[IDAHO]
-Айдахо
-
-[IMPEXPP]
-Автосалон в Портланде. Есть заказы на различные машины. Подробности - на нашей доске объявлений.
-
-[IMPORT1]
-Выйди наружу и жди, когда тебе подадут тачку.
-
-[IND_ZON]
-Портланд
-
-[INFERNS]
-Инфернус
-
-[INSTUN]
-Обычный безумный трюк
-
-[IN_BOAT]
-~g~Без катера тебе это задание не выполнить!
-
-[IN_ROW]
-Приз за ~1~ ПОДРЯД! $~1~
-
-[IN_VEH]
-~g~Эй! Ты куда? Давай садись за руль!
-
-[IN_VEH2]
-~g~Без машины тебе это задание не выполнить!
-
-[ITALIA]
-Italian
-
-[JAILB_A]
-Утром полиция и служба спасения напряженно работали над устранением
-
-[JAILB_B]
-чрезвычайной ситуации, вызванной нападением на полицейский конвой.
-
-[JAILB_C]
-У нас пока нет никаких сведений ни о том, кого сегодня перевозили,
-
-[JAILB_D]
-ни о том, какая преступная группировка ответственна за это дерзкое нападение.
-
-[JAILB_E]
-Как обычно, ранним утром полицейский конвой покинул участок,
-
-[JAILB_F]
-чтобы перевезти заключенных в городскую тюрьму.
-
-[JAILB_G]
-Нападение произошло на мосту Каллахан.
-
-[JAILB_H]
-Большинство свидетелей преступления погибло при взрыве, который сильно повредил мост.
-
-[JAILB_I]
-Полиция полагает, что при взрыве также могли погибнуть
-
-[JAILB_J]
-и некоторые заключенные.
-
-[JAILB_K]
-Выяснение личностей сбежавших преступников осложнено
-
-[JAILB_L]
-из-за атаки хакеров, испортивших базу данных полиции.
-
-[JAILB_M]
-Мэр ОТДонован объяснил, что полиция
-
-[JAILB_N]
-*
-
-[JAILB_O]
-Из-за этой катастрофы район Портланда оказался изолирован от города,
-
-[JAILB_P]
-так как прокладка туннеля Портер все еще не завершена.
-
-[JAILB_Q]
-Ну же, открывайте!
-
-[JAILB_R]
-А, мистер членоголовый!
-
-[JAILB_S]
-Я бы мог спокойно тебя пристрелить.
-
-[JAILB_T]
-Вы еще об этом пожалеете.
-
-[JAILB_U]
-Эй, вы, давайте, смывайтесь.
-
-[JAILB_V]
-Либерти Сити был потрясен сегодняшним преступлением.
-
-[JAILB_W]
-Полиция считает, что это нападение - несомненно, дело рук профессионалов.
-
-[JAILB_X]
-По предварительным данным
-
-[JAN]
-Янв
-
-[JM1]
-'ПОСЛЕДНИЙ УЖИН ГУБАСТОГО'
-
-[JM1_1]
-~g~Отгони машину Форелли в гараж к Лысому, он на севере отсюда за 'Автомобилями в кредит'.
-
-[JM1_2]
-~g~Припаркуй тачку на стоянке у бистро Марко.
-
-[JM1_3]
-~g~Включи бомбу и быстрее сваливай!
-
-[JM1_4]
-~g~Ты помял тачку! Ее нужно отремонтировать!
-
-[JM1_5]
-~g~Ты не включил бомбу!
-
-[JM1_6]
-~g~Поставь машину так, как она стояла раньше.
-
-[JM1_7]
-~g~Закрой дверцу машины, а то он заподозрит неладное!
-
-[JM1_8A]
-~y~Эй, это мой главный работник!
-
-[JM1_8B]
-~y~Здесь все автоматизировано. Просто заезжай внутрь и жди, пока установят бомбу.
-
-[JM1_8C]
-~y~Вот, первый раз даром, но потом плати бабки.
-
-[JM1_A]
-Эй, мне скучно, может, потрахаемся?
-
-[JM1_B]
-Погоди, дорогуша, мне тут нужно одно дельце провернуть.
-
-[JM1_C]
-Для тебя, друг, есть одна работенка.
-
-[JM1_D]
-Братья Форелли забыли мне вернуть старый должок.
-
-[JM1_E]
-Надо бы преподать им хороший урок, чтоб все знали.
-
-[JM1_F]
-Губастый Форелли сейчас набивает пузо в бистро на Сент-Марк,
-
-[JM1_G]
-отгони его машину в гараж Лысого, тот что в Харвуде.
-
-[JM1_H]
-Ты же знаком с Лысым?
-
-[JM1_I]
-Как только он установит бомбу, верни машину туда, где взял.
-
-[JM1_J]
-Ну а потом тебе останется только наблюдать.
-
-[JM1_K]
-Но давай живее, толстяк не будет жрать вечно.
-
-[JM2]
-'ПРОЩАЙ, ЧАНКИ ЛИ ЧОНГ'
-
-[JM2_A]
-Чанки Ли Чонг толкает СПАНК новой банде из Колумбии... или Колорадо... или как там...
-
-[JM2_B]
-Короче, я не знаю точно, да это и не важно.
-
-[JM2_C]
-У него киоск с лапшой в центре Чайнатауна.
-
-[JM2_D]
-Лучше бы этот крысеныш лишь свою жратву толкал.
-
-[JM2_E]
-Я хочу, чтобы ты с ним разобрался!
-
-[JM2_F]
-Если тебе нужен ствол, зайди во двор оружейного магазина, который рядом с метро.
-
-[JM2_G]
-Знаешь, где этот магазинчик? Возьмешь там пистолет.
-
-[JM2_H]
-Да, не забывай, что Чайнатаун - территория Триады, будь там поосторожней.
-
-[JM3]
-'ОГРАБЛЕНИЕ ФУРГОНА'
-
-[JM3_1]
-~g~Отгони фургон в гараж.
-
-[JM3_2]
-~g~Тарань фургон до тех пор, пока не разобьешь его на 70%.
-
-[JM3_A]
-Мы решили грабануть инкассаторский фургон.
-
-[JM3_B]
-Он каждый день выезжает из Чайнатауна.
-
-[JM3_C]
-Пули его броню не возьмут, так что тебе придется таранить его своей тачкой
-
-[JM3_D]
-Хорошенько его помни, и сраный охранник сам его бросит.
-
-[JM3_E]
-Потом отгони его на склад в доках, а мои парни сделают все остальное.
-
-[JM3_F]
-Давай за работу. Фургон не будет вечно кататься по городу.
-
-[JM4]
-'ШОФЕР СИПРИАНИ'
-
-[JM4_10]
-Окей, парень. Сначала мы заглянем в прачечную в Чайнатауне, у меня там есть кое-какие дела.
-
-[JM4_11]
-Эти прачки не желают платить крыше.
-
-[JM4_12]
-И поаккуратней веди, Джоуи только что починил эту развалюху.
-
-[JM4_13]
-Не превращай ее снова в груду металла, окей?
-
-[JM4_2]
-Подожди здесь! Не глуши мотор, мало ли что может случиться.
-
-[JM4_3]
-Это засада Триады! Парень, сваливаем отсюда!
-
-[JM4_4]
-Триада думает, что может безнаказанно перейти мне дорогу, Триада, МНЕ!
-
-[JM4_5]
-Зайди ко мне попозже, зададим им работенку - отстирывать с одежды собственную кровь!
-
-[JM4_6]
-Эй, аккуратней! Я же тебе говорил.
-
-[JM4_7]
-~g~Отвези Тони в мамочкин ресторан.
-
-[JM4_8]
-~r~Тони загасили!
-
-[JM4_A]
-Да, я знаю, Тони, я все отрегулировал. Она прямо мурлычет, послушай сам.
-
-[JM4_B]
-О! А вот и тот парень, о котором я тебе говорил!
-
-[JM4_C]
-Познакомься. Этот парень не итальянец, и не механик, но с работой справляется.
-
-[JM4_D]
-Это Папс Капо, Тони Сиприани.
-
-[JM4_E]
-Хай, я Тони Сиприани.
-
-[JM4_F]
-Отвези его в мамочкин ресторан на Сент-Марк, хорошо?
-
-[JM4_G]
-И еще, зайди ко мне попозже, я планирую одно дельце и мне понадобится хороший водила.
-
-[JM5]
-'КАТАФАЛК СО СКУНСОМ'
-
-[JM5_1]
-~g~Отвези его в утилизатор!
-
-[JM5_2]
-~g~Это братья Форелли!
-
-[JM5_A]
-Прекрасно! Просто великолепно.
-
-[JM5_B]
-Отлично, с тобой-то я и хотел поговорить!
-
-[JM5_C]
-В-общем, у кафе рядом с мысом Каллахан стоит катафалк со жмуриком.
-
-[JM5_D]
-Один из братьев Форелли решил, что он слишком умный, ну и получил за это по заслугам.
-
-[JM5_E]
-Отвези его тело к утилизатору в Харвуд, ладно?
-
-[JM6]
-'БЕГСТВО'
-
-[JM6_1]
-Поехали к банку по главной улице.
-
-[JM6_2]
-Не глуши мотор, мы по-быстрому. Туда и обратно.
-
-[JM6_3]
-Быстрее, сваливаем!
-
-[JM6_4]
-Стряхни копов с хвоста и гони в укрытие!
-
-[JM6_5]
-~g~Понадобится быстрая тачка, идиот!
-
-[JM6_6]
-~g~Иди, найди менее заметную тачку!
-
-[JM6_7]
-~g~Чтобы ограбить банк, тебе нужны все трое!
-
-[JM6_8]
-~r~Ты потерял всех налетчиков!
-
-[JM6_A]
-Классная будет тачка, да?
-
-[JM6_B]
-Короче слушай. Достань тачку получше и езжай к убежищу на Сент-Марк, где подберешь моих друзей.
-
-[JM6_C]
-Они решили взять банк, но им нужен водила.
-
-[JM6_D]
-Я замолвил за тебя словечко, так что не напортачь.
-
-[JM6_E]
-Отвези их к банку до пяти часов, и ни минутой позже.
-
-[JOEY]
-ЗАДАНИЯ ЗОУИ
-
-[JOEYGO]
-~g~Джоуи развлекается в городе вместе с Мисти. Приходи позже!
-
-[JUL]
-Июл
-
-[JUN]
-Июн
-
-[KABOOM]
-БАБАХ!
-
-[KEMUGO]
-~g~Мария и Кемури сейчас заняты. Загляни попозже!
-
-[KENJGO]
-~g~Кенжи сейчас на собрании Якудзы. Заходи как-нибудь потом!
-
-[KENJI]
-ЗАДАНИЯ КЕНДЖИ
-
-[KENSGO]
-~g~Кенжи занят! Зайди попозже!
-
-[KGS_EXP]
-Использовано взрывчатки (Кг.)
-
-[KILLS]
-УБИТО:
-
-[KM1]
-'ОСВОБОЖДЕНИЕ КАНБУ'
-
-[KM1_1]
-~g~Укради полицейскую машину!
-
-[KM1_10]
-~r~Якудза Канбу погиб - как и твоя честь!
-
-[KM1_11]
-~r~Ты поджарил сам себя!
-
-[KM1_12]
-~g~Отвези его к Доджо, но сперва разберись с полицейскими!
-
-[KM1_13]
-Поставь машину в гараж!
-
-[KM1_2]
-~g~Начини машину взрывчаткой!
-
-[KM1_3]
-~g~Теперь вези его к Доджо Якудзы.
-
-[KM1_4]
-~g~Для этого задания тебе понадобится полицейская машина!
-
-[KM1_5]
-~g~Отлично, теперь вали к полицейскому участку.
-
-[KM1_6]
-~g~Установи в машину бомбу!
-
-[KM1_7]
-~g~Проезд только для полицейских!
-
-[KM1_8A]
-Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~PED_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
-
-[KM1_8D]
-Чтобы ~h~подорвать бомбу~w~, нажми ~h~~k~~PED_FIREWEAPON~~w~, но не забудь отойти подальше от машины.
-
-[KM1_9]
-~r~Установленной в машине бомбой ты должен был взорвать стену!
-
-[KM1_A]
-Моя сестра хорошо о тебе отзывается,
-
-[KM1_B]
-Возможно, ты сможешь урегулировать одну ситуацию, которая ставит меня в неловкое положение.
-
-[KM1_C]
-Якудза Канбу сейчас в участке и ждет отправки в суд.
-
-[KM1_D]
-Мы благодарны тебе за такой самоотверженный поступок. Если тебе вдруг понадобится помощь, то Доджо даст тебе двух своих лучших людей.
-
-[KM1_E]
-но я, пока что, не видел от вас, гайдзинов, ничего, кроме разочарований.
-
-[KM1_F]
-Разумеется, в случае провала мы опозоримся.
-
-[KM1_G]
-Он очень ценный член семьи.
-
-[KM1_H]
-Вызволи его из заключения и отвези к Доджо на Бедфорд Поинт.
-
-[KM2]
-'ВЕЛИКИЙ АВТОВОР'
-
-[KM2_1]
-~g~Отремонтируй тачку, она должна сверкать.
-
-[KM2_2]
-~g~Тачка пригнана.
-
-[KM2_3]
-~g~Запомни, ~r~тачка~g~ должна быть в идеальном состоянии, иначе ее не примут в ~p~гараже~g~.
-
-[KM2_A]
-Ты даже не представляешь, сколько в нашей работе внимания приходится уделять этикету.
-
-[KM2_B]
-К моему великому стыду, один человек оказал мне услугу, а я так и не смог отплатить ему за его доброту.
-
-[KM2_C]
-Его слабость - машины. Он просил, чтобы мы приобрели для его коллекции несколько редких экземпляров.
-
-[KM2_D]
-Эти автомобили мы преподнесем ему как подарок, в счет погашения моего долга.
-
-[KM2_E]
-Ты должен раздобыть эти машины и доставить в гараж за стоянкой в Ньюпорте.
-
-[KM2_F]
-Для меня это дело чести.
-
-[KM3]
-'ДОГОВОР'
-
-[KM3_1]
-~g~Картель ожидает прибытия ямайцев, иди и укради тачку Ярди! Ты найдешь ее к северу отсюда, в Ньюпорте.
-
-[KM3_10]
-~r~Напарник убит!
-
-[KM3_11]
-~g~Картель атакован и дипломат забрать не удастся.
-
-[KM3_12]
-~g~Убей всех колумбийцев, взорви их тачки и забери дипломат.
-
-[KM3_13]
-~g~Отвези дипломат назад в казино.
-
-[KM3_14]
-~r~Тебя опознали, ты напортачил!
-
-[KM3_2]
-~g~Езжай и подбери своего напарника.
-
-[KM3_3]
-~g~Они встречаются на автостоянке больницы в Рокфорде!
-
-[KM3_4]
-~r~Они смылись!
-
-[KM3_5]
-~g~Чтобы дела пошли - посигналь.
-
-[KM3_6]
-~g~Убей их, убей их всех!
-
-[KM3_7]
-Это подстава Якудзы!
-
-[KM3_8]
-~g~Чтобы выполнить эту работу, тебе нужна тачка Ярди!
-
-[KM3_9]
-~r~Один из Колумбийцев мертв, дело не выгорит.
-
-[KM3_A]
-Дурак подставляет опасности спину, а умный смотрит ей в лицо.
-
-[KM3_B]
-Колумбийский Картель проигнорировал наши многочисленные требования убраться из нашей сферы влияния.
-
-[KM3_C]
-Сейчас они договариваются о сотрудничестве с Ямайцами, чтобы сообща выступить против нас.
-
-[KM3_D]
-Сейчас в городе они ведут последнюю стадию переговоров.
-
-[KM3_E]
-Это дело чести, чтобы ты их там всех порешил.
-
-[KM3_F]
-Возьми моего человека, укради машину Ярди, иди и окажи уважение Колумбийцам.
-
-[KM4]
-'ШИМА'
-
-[KM4_1]
-Мне нечем платить, но я не стал бы платить, даже если бы мог!
-
-[KM4_10]
-Да какие ВЫ к черту якудза...?
-
-[KM4_11]
-~g~Верни деньги назад в казино!
-
-[KM4_2]
-От вас никакого толка.
-
-[KM4_3]
-Я не за этим вам плачу. Если бы мне нужна была такая защита, я обратился бы к этим сраным копам.
-
-[KM4_4]
-~g~Разберись с этой бандой и верни ~b~дань~g~, принадлежащую Якудзе!
-
-[KM4_5]
-Дональд Лав желает принять тебя в своем чайном саду, и обсудить кое-какие дела.
-
-[KM4_6]
-Вот деньги, все как договаривались!
-
-[KM4_7]
-~r~Хозяин магазина сдох!
-
-[KM4_8]
-~g~Ты взял чемоданчик!
-
-[KM4_9]
-Какие-то юные бандиты обчистили это место! Они забрали все что было!
-
-[KM4_A]
-Чтобы быть действительно сильным, важно никогда не проявлять слабость.
-
-[KM4_B]
-Дела идут довольно успешно, сегодня как раз нужно собрать дань.
-
-[KM4_C]
-Иди и немедленно забери деньги, чтобы мы могли положить их на счет в казино.
-
-[KM5]
-'РАЗЪЯСНЕНИЯ'
-
-[KM5_1]
-~g~ПРОДАВЕЦ УБИТ!
-
-[KM5_2]
-~g~Ярди слинял.
-
-[KM5_3]
-~r~Ты не успел убить даже ~1~ Ярди.
-
-[KM5_4]
-~g~Поздравляем, ты прикончил ~1~ Ярди.
-
-[KM5_5]
-~g~Поздравляем, ты прикончил ~1~ Ярди. ПРИЗ $~1~
-
-[KM5_6]
-~g~Ты должен убить как минимум 8 торговцев-Ярди.
-
-[KM5_7]
-~g~Убивай их побыстрее! Продав СПАНК, они смоются.
-
-[KM5_A]
-ТЫ! Отличный момент чтобы прийти и показать свою тупую морду!
-
-[KM5_B]
-Ты в курсе, что твоя прошлая попытка объяснить ямайцам,
-
-[KM5_B1]
-что им не стоит водить дружбу с Картелем, не принесла никаких плодов?
-
-[KM5_C]
-Ярди заполонили весь город, и торгуют пакетиками со СПАНКом, словно горячими пирожками!
-
-[KM5_D]
-Эти Картельные свиньи смеются над нами, надо мной!
-
-[KM5_E]
-Я даю тебе последний шанс доказать, что моя сестра в тебе не ошиблась!
-
-[KM5_F]
-Иди же, прикончи этих подонков, и пусть твой позор смоют реки крови врагов!!!
-
-[KURUMA]
-Курума
-
-[K_JAH]
-Радио K-Jah
-
-[LANDSTK]
-Лэндсталкер
-
-[LANGSL]
-ВЫБОР ЯЗЫКА
-
-[LANGUA]
-Язык
-
-[LAST]
-Последнее сообщение.
-
-[LEGAL]
-~g~Разберитесь с преступником!
-
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBFабвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
-
-[LINERUN]
-Лайнранер
-
-[LIPS]
-Губки 106
-
-[LITTLE]
-LITTLE T
-
-[LITTLEI]
-Сент-Марк
-
-[LM1]
-'ДЕВОЧКИ ЛУИДЖИ'
-
-[LM1_2]
-~g~Отвези Мисти в клуб к Луиджи.
-
-[LM1_3]
-~g~Посигналь, чтобы девица подошла к машине.
-
-[LM1_6]
-~g~Вернись в машину!
-
-[LM1_7]
-Остановись рядом с Мисти и подожди, пока она не сядет в тачку.
-
-[LM1_8]
-Ты можешь пойти к Луиджи и получить у него задание, или покататься по городу.
-
-[LM1_8A]
-Чтобы подзаработать немного деньжат, можно 'одолжить' такси...
-
-[LM1_9]
-Привет, я Мисти.
-
-[LM2]
-'ОТВАЛИ ОТ МОИХ ТЕЛОК'
-
-[LM2_1]
-~g~Отгони его тачку в мастерскую для перекраски.
-
-[LM2_2A]
-Нажав на ~h~ ~k~~PED_FIREWEAPON~~w~ ты ~h~ударишь~w~, ~h~пнешь~w~, или ~h~двинешь~w~ битой противника!
-
-[LM2_2C]
-Нажав на ~h~ ~k~~PED_FIREWEAPON~~w~ ты ~h~ударишь~w~, ~h~пнешь~w~, или ~h~двинешь~w~ битой противника!
-
-[LM2_2D]
-Нажав на ~h~ ~k~~PED_FIREWEAPON~~w~ ты ~h~ударишь~w~, ~h~пнешь~w~, или ~h~двинешь~w~ битой противника!
-
-[LM2_3]
-~g~Отгони машину в гараж к Луиджи!
-
-[LM2_4]
-~g~Перекрась машину!
-
-[LM2_A]
-На улицах появился новый наркотик под названием СПАНК.
-
-[LM2_B]
-Иди и впарь ему битой по морде!
-
-[LM2_C]
-Луиджи велел передать тебе...
-
-[LM2_D]
-вот это, держи.
-
-[LM2_E]
-Какой-то умник впаривает эту дрянь моим девкам в Портландской гавани.
-
-[LM2_F]
-Потом возьми его тачку и перекрась ее.
-
-[LM2_G]
-Я требую возмещения морального ущерба!
-
-[LM3]
-'ПРИВЕЗИ МНЕ МИСТИ'
-
-[LM3_10]
-~g~Достань тачку!
-
-[LM3_11]
-~g~Мисти в автобусе не ездит, достань нормальную тачку!
-
-[LM3_1A]
-Нажми ~h~ ~k~~VEHICLE_HORN~~w~, чтобы ~h~посигналить~w~ и вызвать Мисти из дома.
-
-[LM3_1B]
-Нажми ~h~ ~k~~VEHICLE_HORN~~w~, чтобы ~h~посигналить~w~ и вызвать Мисти из дома.
-
-[LM3_1C]
-Нажми ~h~ ~k~~VEHICLE_HORN~~w~, чтобы ~h~посигналить~w~ и вызвать Мисти из дома.
-
-[LM3_2]
-~g~Отвези Мисти к Джоуи.
-
-[LM3_4]
-~g~Отправляйся за Мисти!
-
-[LM3_5]
-Ты работаешь на Луиджи, да? Похоже, он наконец нашел водилу, которому можно доверять!
-
-[LM3_6]
-Джоуи...
-
-[LM3_6A]
-Твоя большая штука опять по мне соскучилась?
-
-[LM3_7]
-Иди, я сейчас, заводная моя.
-
-[LM3_8]
-Хай, я Джоуи.
-
-[LM3_9]
-Луиджи сказал, что ты свой парень, так что заходи как-нибудь,
-
-[LM3_9A]
-может, и у меня будет для тебя работенка.
-
-[LM3_9B]
-Ладно.
-
-[LM3_A]
-Эй, иди сюда, потолкуем... Мик, я с тобой попозже закончу.
-
-[LM3_B]
-Как поживаешь, парень?
-
-[LM3_C]
-Джоуи Леоне, сын дона, хочет поразвлечься со своей девчонкой Мисти.
-
-[LM3_D]
-Сгоняй за ней в Хепберн Хейтс...
-
-[LM3_E]
-но учти, этот район контролируют Дьяволы.
-
-[LM3_F]
-Отвези ее к нему в гараж на Трентоне, да поживее,
-
-[LM3_G]
-Джоуи не из тех, кто привык ждать, так что одна нога здесь...
-
-[LM3_H]
-да, и советую смотреть на дорогу, а не на Мисти!
-
-[LM4]
-'ОСАТАНЕЛЫЙ СУТЕНЕР'
-
-[LM4_A]
-Какой-то урод из Дьяволов поставил своих потаскух работать на моей территории.
-
-[LM4_B]
-Иди, разберись с этим козлом.
-
-[LM4_C]
-Если нужен ствол - возьми его во дворе магазина, который напротив метро.
-
-[LM5]
-'ВЕЧЕРИНКА У КОПОВ'
-
-[LM5_1]
-~g~У тебя телок в тачке, как сельдей в бочке! ~g~Отвези их на вечеринку и приезжай за новыми.
-
-[LM5_2]
-~r~Девка Луиджи теперь похожа на мешок с мясом!
-
-[LM5_3]
-~g~Тебе нужна тачка!
-
-[LM5_4]
-~g~Подбери телок работающих на бульваре Св.Марка.
-
-[LM5_5]
-~g~Отвези девок на вечеринку к копам!
-
-[LM5_7]
-~g~Луиджи хочет, чтобы на ~p~вечеринке у копов~g~ было не менее четырех девок!
-
-[LM5_8]
-~g~Телок на вечеринке: ~1~
-
-[LM5_9]
-ДЕВОЧЕК:
-
-[LM5_A]
-Копы решили устроить вечеринку в зале старой школы, которая рядом с мостом Каллахан,
-
-[LM5_B]
-и их теперь потянуло на старые школьные забавы.
-
-[LM5_C]
-Но сейчас все мои девки работают на панели.
-
-[LM5_D]
-Привези им побольше моих телок, доставь всем удовольствие.
-
-[LM5_E]
-Привези побольше, пока копы не пропили все свои бабки.
-
-[LOADCAR]
-LOADING VEHICLE... (PRESS L1 TO CANCEL)
-
-[LOOK_A]
-Удерживай кнопку ~h~~k~~VEHICLE_LOOKLEFT~~w~ или ~h~~k~~VEHICLE_LOOKRIGHT~~w~, чтобы посмотреть из машины ~h~налево~w~ или ~h~направо~w~. Если нажать обе, то посмотришь ~h~назад~w~.
-
-[LOV4_10]
-~r~Ты уничтожил единственный способ выяснить, куда делся пакет!
-
-[LOVE]
-ЗАДАНИЯ ДОНАЛЬДА
-
-[LOVE1]
-'СПАСИТЕЛЬ'
-
-[LOVE1_1]
-~g~Чтобы попасть в логово колумбийцев, тебе понадобится одна из их тачек. Возможно, ты ее найдешь в форте Стаунтона.
-
-[LOVE1_2]
-~g~Спасай Старого Азиата.
-
-[LOVE1_3]
-~g~Отвези старого азиата к Дональду Лаву.
-
-[LOVE1_4]
-~g~Старый Азиат должен быть в одном из этих гаражей...
-
-[LOVE1_5]
-~g~Хватит болтаться без дела, достань машину колумбийцев и спаси товарища Дональда.
-
-[LOVE1_6]
-~r~Да... теперь кишки азиата размазаны по всей улице!
-
-[LOVE1_7]
-~g~Через эти ворота пропускают лишь машины колумбийской банды.
-
-[LOVE1_A]
-Во первых, я хочу поблагодарить вас за ту услугу, которую вы мне оказали.
-
-[LOVE1_B]
-Но, жизненный опыт подсказывает мне, что преданность такого человека, как вы, можно купить,
-
-[LOVE1_C]
-У меня есть один очень ценный знакомый - старый азиат.
-
-[LOVE1_D]
-Они пытаются увеличить сумму назначенного ранее выкупа, но я не привык менять условия сделки.
-
-[LOVE1_E]
-Сделка есть сделка, они не получат ни пенса больше.
-
-[LOVE1_F]
-Люди всегда пытаются истолковать все по-своему.
-
-[LOVE1_G]
-Вы должны спасти моего друга любой ценой.
-
-[LOVE1_H]
-в отличие от преданности банды.
-
-[LOVE1_I]
-Его держат в заложниках какие-то южноамериканцы в Аспатрии.
-
-[LOVE2]
-'КОНЕЦ ВАКАГАСИРА!'
-
-[LOVE2_1]
-~g~Отправляйся в форт Стаунтон и достань тачку колумбийцев!
-
-[LOVE2_2]
-~g~Теперь заезжай в ~p~многоэтажный гараж в Ньюпорте~g~ и прихлопни Кенжи!
-
-[LOVE2_3]
-~r~Если ты будешь без машины Картеля, тебя сразу узнают!
-
-[LOVE2_4]
-~r~Якудза узнали тебя!
-
-[LOVE2_5]
-~g~Кенжи теперь похож на бифштекс! Сваливай из Ньюпорта и уничтожь машину!
-
-[LOVE2_6]
-~r~Ты замочил всех свидетелей!
-
-[LOVE2_7]
-~g~Теперь уничтожь машину!
-
-[LOVE2_8]
-~g~Быстрее сваливай из Ньюпорта!
-
-[LOVE2_A]
-Ничто так не сбивает цены на недвижимость, как старая добрая гангстерская война,
-
-[LOVE2_B]
-не считая, конечно, вспышки чумы......но она может доставить куда больше проблем.
-
-[LOVE2_C]
-Я слышал о натянутых отношениях между Якудзой и колумбийцами.
-
-[LOVE2_D]
-Нам стоит погреть руки на их дурацкой вражде.
-
-[LOVE2_E]
-Я хочу чтобы вы прикончили вакагасира, Кенжи Касена.
-
-[LOVE2_F]
-Сейчас у Кенжи деловая встреча на крыше многоэтажного гаража а Ньюпорте.
-
-[LOVE2_G]
-Достаньте машину Картеля и разделайтесь с ним!
-
-[LOVE2_H]
-Якудза решит, что это убийство - дело рук картеля, и объявит войну.
-
-[LOVE3]
-'ГРУЗ В ОКЕАНЕ'
-
-[LOVE3_1]
-~g~Возьми ~r~катер~g~ и следуй за ~y~самолетом~g~!
-
-[LOVE3_2]
-~g~Ты собрал весь груз! Отвези его Дональду Лаву.
-
-[LOVE3_3]
-~g~Самолет сбросил ~1~ из 6 упаковок.
-
-[LOVE3_4]
-~r~Ты уничтожил самолет!
-
-[LOVE3_5]
-~g~Самолет уже рядом.
-
-[LOVE3_6]
-~r~Упаковка досталась полиции!
-
-[LOVE3_A]
-Некоторые ценные товары очень сложно импортировать из-за лицемерия властей.
-
-[LOVE3_B]
-Сегодня ночью один маленький самолетик на подлете к аэродрому откроет свой трюм.
-
-[LOVE3_C]
-Он сбросит в воду несколько ценных упаковок.
-
-[LOVE3_D]
-Постарайтесь опередить полицию и собрать груз первым.
-
-[LOVE4]
-'ВЕЛИКИЙ АЭРОВОР'
-
-[LOVE4_1]
-~r~Картель уже здесь!
-
-[LOVE4_2]
-~g~Посылки нет! Выследи колумбийцев и забери у них груз.
-
-[LOVE4_3]
-~g~Панлантик Констракшн...?
-
-[LOVE4_4]
-~g~Доставь посылку к Дональду Лаву!
-
-[LOVE4_5]
-~g~Посылка должна быть в самолете....
-
-[LOVE4_6]
-~g~Отправляйся на лифте в башню!
-
-[LOVE4_7]
-~g~На острове Стаунтон есть одна стройка, возможно они повезли груз туда.
-
-[LOVE4_8]
-~g~Без машины ты в гараж не попадешь.
-
-[LOVE4_9]
-~r~Самолет уничтожен!
-
-[LOVE4_A]
-Спасибо, что привезли мне этот груз, но он был всего лишь приманкой.
-
-[LOVE4_B]
-Простите, но ради крупного дела на это приходится идти.
-
-[LOVE4_C]
-По настоящему важный груз до сих пор все еще в самолете.
-
-[LOVE4_D]
-К несчастью, власти аэаропорта все же решили задержать и обыскать самолет,
-
-[LOVE4_E]
-Поезжайте через мост в Шорсайд Вейл и затем в Международный аэропорт Фрэнсис.
-
-[LOVE4_F]
-Деньги властям уже уплачены.
-
-[LOVE4_G]
-Моя посылка ожидает вас в фюзеляже самолета, который стоит в ангаре на таможне.
-
-[LOVE4_H]
-так что мне пришлось заплатить им за издержки.
-
-[LOVE5]
-'ЭСКОРТ'
-
-[LOVE5_1]
-~g~Поехали!
-
-[LOVE5_2]
-~g~Тебе нужна тачка!
-
-[LOVE5_3]
-~g~Езжай вперед и посмотри, что там в конце тоннеля!
-
-[LOVE5_4]
-~r~Защищай грузовик!
-
-[LOVE5_5]
-~r~Ты не сумел защитить грузовик!
-
-[LOVE5_A]
-На вас можно положиться, друг мой. Что ни говори, а это сейчас большая редкость.
-
-[LOVE5_B]
-Мой азиатский друг повезет доставленный вами товар по назначению, но ему потребуется эскорт.
-
-[LOVE5_C]
-Я бы хотел, чтобы вы помогли ему в целости и сохранности доставить этот груз в Пайк Крик
-
-[LOVE6]
-'ПРИМАНКА'
-
-[LOVE6_1]
-~g~Теперь уводи копов подальше от склада!
-
-[LOVE6_2]
-~r~Тебе не удалось увести полицию на достаточное расстояние!
-
-[LOVE6_3]
-У тебя ~1~ секунд, чтобы вернуться к инкассаторской машине, иначе задание будет провалено.
-
-[LOVE6_4]
-~r~Ты разбил приманку для копов!
-
-[LOVE6_A]
-Урок бизнеса, мой друг.
-
-[LOVE6_B]
-даже если она вообще не представляет его истинной ценности.
-
-[LOVE6_C]
-Полиция оцепила весь район, в котором сейчас находится мой друг с грузом.
-
-[LOVE6_D]
-Отправляйтесь туда и используйте фургон как приманку для копов.
-
-[LOVE6_E]
-Если у вас есть особый товар, то каждая собака будет пытаться его у вас отнять...
-
-[LOVE6_F]
-Пусть они за вами погоняются, а он тем временем уйдет.
-
-[LOVE7]
-ИСЧЕЗНОВЕНИЕ ЛАВА
-
-[LOVEGO]
-~g~У Дональда Лава возникли неотложные дела. Заходи попозже!
-
-[LRQC_1]
-Нам с Асукой нужно кое-что обсудить,
-
-[LRQC_2]
-а ты пока можешь тут осмотреться.
-
-[LRQC_3]
-Тебе нужно место, где бы ты мог залечь.
-
-[LRQC_4]
-На углу Бельвилля есть склад, в котором есть все, что тебе нужно.
-
-[LRQC_5]
-Приходи ко мне сюда, когда будешь готов,
-
-[LRQC_6]
-и я обсужу с тобой кое-какие дела.
-
-[LUIGGO]
-~g~Луиджи осматривает новых девочек. Загляни попозже!
-
-[LUIGI]
-ЗАДАНИЯ ЛУИДЖИ
-
-[LUIGIS]
-Жилище Луиджи
-
-[L_TRN_1]
-Ты можешь попасть в другой район Портланда, воспользовавшись метро. Нажми~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, чтобы ~h~сесть~w~ или ~h~выйти~w~ из поезда.
-
-[L_TRN_2]
-Ты можешь попасть в другой район Портланда, воспользовавшись метро. Нажми~h~ ~k~~VEHICLE_ENTER_EXIT~~w~, чтобы ~h~сесть~w~ или ~h~выйти~w~ из поезда.
-
-[MAFIACR]
-Сентинел Мафии
-
-[MANANA]
-Манана
-
-[MAR]
-Мар
-
-[MAY]
-Май
-
-[MCDNSP]
-There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 500KB is needed to save this application data. Do you wish to start? (YES or NO)
-
-[MCGNSP]
-There is insufficient space on the Memory Card (PS2) in MEMORY CARD slot 1. At least 200KB is needed to save this application data. Do you wish to start? (YES or NO)
-
-[MCLOAD]
-Loading Data. Please do not remove the Memory Card (PS2) in MEMORY CARD slot 1, reset or switch off the console.
-
-[MCSTNS]
-There is no Memory Card (PS2) in MEMORY CARD slot 1. Do you wish to start? (YES or NO)
-
-[MC_LDFL]
-Загрузка не прошла!
-
-[MC_NWRE]
-Идет перезапуск игры.
-
-[MEA1]
-'МОШЕННИК'
-
-[MEA1_1]
-~r~Управляющий банка мертв!
-
-[MEA1_2]
-~r~Тебе же сказали уничтожить машину!
-
-[MEA1_3]
-~g~Выбирайся из машины!
-
-[MEA1_4]
-~r~Ты проехал мимо управляющего банка!
-
-[MEA1_B]
-Я Чонкс, Марти Чонкс.
-
-[MEA1_B3]
-~g~Езжай и встреть управляющего банка.
-
-[MEA1_B4]
-А, тебя послал мистер Чонкс. Ну поехали, нанесем ему визит.
-
-[MEA1_B5]
-TEXT NO LONGER NEEDED
-
-[MEA1_B6]
-~g~Отгони машину в утилизатор, чтобы избавиться от улик. Выйди из машины и ее подцепит кран.
-
-[MEA1_C]
-Я тут на углу построил заводик по производству корма для кошек и собак.
-
-[MEA1_D]
-У меня возникли проблемы с финансами, но у кого их не бывает?
-
-[MEA1_E]
-Я собирался встретиться с управляющим из банка.
-
-[MEA1_F]
-Этот мерзкий мошенник решил поживиться за мой счет, и поднял процент займа.
-
-[MEA1_G]
-Возьми мою тачку, встреть его и привези сюда.
-
-[MEA1_H]
-Я приготовил небольшой сюрприз для этого кровопийцы!
-
-[MEA2]
-'КРАЖА'
-
-[MEA2_1]
-~r~Тебе же сказали уничтожить тачку!
-
-[MEA2_2]
-~r~Вор мертв!
-
-[MEA2_3]
-~g~Отгони машину назад на фабрику.
-
-[MEA2_4]
-~r~Ты проехал мимо вора!
-
-[MEA2_A]
-Я нанял воров, чтобы они забрались в мой офис...
-
-[MEA2_B]
-и кое-что вынесли. А я бы потом смог потребовать страховку.
-
-[MEA2_B3]
-~g~Езжай, встреть воров.
-
-[MEA2_B4]
-~g~Отвези их к фабрике по производству корма.
-
-[MEA2_B5]
-TEXT NO LONGER NEEDED
-
-[MEA2_B6]
-~g~Перекрась машину, чтобы избавиться от улик.
-
-[MEA2_C]
-Но эти ублюдки теперь угрожают тем, что расскажут все страховой компании,
-
-[MEA2_D]
-если я с ними не поделюсь.
-
-[MEA2_E]
-Нет, ты представляешь?
-
-[MEA2_F]
-За воротами фабрики я поставил машину.
-
-[MEA2_G]
-Возьми ее и сгоняй за ними. Они тусуются где-то в квартале красных фонарей.
-
-[MEA2_H]
-Привези их ко мне на фабрику и я покажу им кузькину мать.
-
-[MEA3]
-'ЖЕНА'
-
-[MEA3_1]
-~r~Жена мертва!
-
-[MEA3_2]
-~r~Ты должен был утопить тачку!
-
-[MEA3_3]
-~r~Ты проехал мимо его жены!
-
-[MEA3_A]
-Чтобы продолжить свой бизнес, мне нужно как быстрее решить финансовые проблемы.
-
-[MEA3_B]
-У моей жены хорошая страховка жизни, и к тому же она постоянно транжирит мои деньги.
-
-[MEA3_B3]
-~g~Езжай и подбери миссис Чонкс.
-
-[MEA3_B4]
-Марти хочет меня видеть? Давай быстрее, а то мне нужно еще успеть в парикмахерскую.
-
-[MEA3_B5]
-TEXT NO LONGER NEEDED
-
-[MEA3_B6]
-~g~Чтобы избавиться от улик, утопи тачку.
-
-[MEA3_C]
-Я поставил машину в обычном месте.
-
-[MEA3_D]
-Забери мою жену из маникюрного салона и привези ко мне на фабрику.
-
-[MEA4]
-'ЛЮБОВНИК'
-
-[MEA4_1]
-~r~Карлос мертв!
-
-[MEA4_2]
-~r~Марти Чонкс мертв!
-
-[MEA4_3]
-~r~Ты проехал мимо Карлоса!
-
-[MEA4_A]
-Проклятье, у меня проблемы!
-
-[MEA4_B]
-Оказалось, что моя жена спала с тем, кому я задолжал.
-
-[MEA4_B3]
-~g~Подбери любовника жены Чонкса.
-
-[MEA4_B4]
-Тебя послал Марти, да? Я объясню этой мерзкой крысе, что такое настоящий бизнес.
-
-[MEA4_B5]
-Карл, привет! Мне эээ... нужно время, чтобы отдать долг.
-
-[MEA4_B6]
-Нет, Марти, прошло и так много времени. У тебя был шанс, а теперь я забираю эту фабрику...
-
-[MEA4_B7]
-Ну ты хоть ко мне в офис зайди...
-
-[MEA4_C]
-Он очень зол и требует, чтобы я вернул ему деньги!
-
-[MEA4_D]
-Мне нужно с ним поговорить...
-
-[MEA4_E]
-он думает, что я отдам ему долг...
-
-[MEA4_F]
-но я решил...
-
-[MEA4_G]
-что в этом месяце городских дворняг ждет новое блюдо!
-
-[MEAT1_A]
-Друзья посоветовали мне обратиться к тебе, чтобы решить все мои проблемы. Если ты согласен, подойди к телефону в Трентоне.
-
-[MED_WST]
-Убито медиков
-
-[MEMTST]
-MemoryCardTest screen
-
-[MGSVCN]
-MagazineDirectory Created
-
-[MGSVNC]
-MagazineDirectory Not Created
-
-[MISTY1]
-~r~Мисти теперь лучше везти в морг!
-
-[MMRAIN]
-Количество выпавших осадков (мм)
-
-[MM_1]
-'ГОНКА ПО ГАРАЖУ'
-
-[MM_1_A]
-~g~У тебя ~y~2 минуты~g~, чтобы проехать ~y~20 контрольных пунктов~g~ в высотном гараже! ~g~Ты можешь проезжать их ~y~В ЛЮБОМ ПОРЯДКЕ~g~.
-
-[MM_1_B]
-~1~ из 20!
-
-[MM_1_C]
-~g~У тебя 20 секунд, после прохождения каждого контрольного пункта тебе будут добавлять по ~y~5 секунд~g~. ~g~Время ~y~УЖЕ~g~ пошло.
-
-[MONTAX]
-Денег заработано на такси
-
-[MOONBM]
-Лунный луч
-
-[MRWONGS]
-М-р.Вонг
-
-[MSX_FM]
-MSX FM
-
-[MULE]
-Тягач
-
-[MUSMEN]
-Музыка/Звуки
-
-[MUSVOL]
-Громкость музыки
-
-[MXCARD]
-Длина лучшего БЕЗУМНОГО прыжка (ft)
-
-[MXCARDM]
-Длина лучшего БЕЗУМНОГО прыжка (м)
-
-[MXCARJ]
-Высота лучшего БЕЗУМНОГО прыжка (ft)
-
-[MXCARJM]
-Высота лучшего БЕЗУМНОГО прыжка (м)
-
-[MXFLIP]
-Переворотов в лучшем БЕЗУМНОМ прыжке
-
-[MXJUMP]
-Разворот в лучшем БЕЗУМНОМ прыжке
-
-[M_FAIL]
-ЗАДАНИЕ ПРОВАЛЕНО!
-
-[M_PASS]
-ЗАДАНИЕ ВЫПОЛНЕНО! $~1~
-
-[M_WASTE]
-Мужчин убито
-
-[NEW_TAX]
-БОЛЬШЕ! БЫСТРЕЕ! ЛУЧШЕ! В Харвуде открылся новый таксопарк Борнини. Звоните 555-БОРНИНИ!
-
-[NICK]
-НИК ЛАВ
-
-[NMISON]
-Заданий начато
-
-[NMMISP]
-Заданий завершено
-
-[NO]
-Нет
-
-[NOCD]
-CD-привод пуст. Пожалуйста, вставьте диск.
-
-[NOCONT]
-Please reconnect an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2). to controller port 1 to continue
-
-[NOCONTE]
-Please re-insert the analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2) in controller port 1 to continue
-
-[NODOORS]
-~g~Они все туда не влезут! Достань тачку попросторней!
-
-[NOGMSV]
-Записаться можно лишь в твоем гараже.
-
-[NOMONEY]
-~g~У тебя не хватает денег!
-
-[NOSTUC]
-Не выполнено ни одного БЕЗУМНОГО трюка
-
-[NOUNGM]
-Всего уникальных прыжков
-
-[NOUNIF]
-Выполнено уникальных прыжков
-
-[NOV]
-Ноя
-
-[NO_PAUZ]
-При игре по сети пауза не работает. Чтобы выйти нажми ESC дважды!
-
-[NO_PCCD]
-Пожалуйста, вставьте второй диск игры GTA3 в CDROM привод, или нажмите ESC для выхода из игры.
-
-[NRECORD]
-~r~РЕКОРД НЕ ПОБИТ!
-
-[NUMBER]
-~1~
-
-[OCT]
-Окт
-
-[OPENCD]
-CRDOM-привод открыт. Пожалуйста, закройте CDROM-привод.
-
-[OUTTIME]
-~r~Очень медленно, друг, очень медленно!
-
-[OUT_VEH]
-~g~Выйди из тачки!
-
-[O_FAIL]
-ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ ПРОВАЛЕНО!
-
-[O_PASS]
-ДОПОЛНИТЕЛЬНОЕ ЗАДАНИЕ ВЫПОЛНЕНО!
-
-[PAGEB1]
-В убежище доставлен пистолет
-
-[PAGEB10]
-В убежище доставлена ракетница
-
-[PAGEB11]
-В убежище доставлен огнемет
-
-[PAGEB12]
-В убежище доставлена взятка для полиции
-
-[PAGEB13]
-В убежище доставлено лекарство
-
-[PAGEB14]
-В убежище доставлен адреналин
-
-[PAGEB2]
-В убежище доставлен 'Узи'
-
-[PAGEB3]
-В убежище доставлена броня
-
-[PAGEB4]
-В убежище доставлен дробовик
-
-[PAGEB5]
-В убежище доставлены гранаты
-
-[PAGEB6]
-В убежище доставлены коктейли Молотова
-
-[PAGEB7]
-В убежище доставлен AK-47
-
-[PAGEB8]
-В убежище доставлена снайперская винтовка
-
-[PAGEB9]
-В убежище доставлена винтовка M16
-
-[PAGE_00]
-.
-
-[PAGE_01]
-Убей ~1~ Дьяволов за 120 секунд!
-
-[PAGE_02]
-Уничтожь ~1~ машин за 120 секунд!
-
-[PAGE_03]
-Убей ~1~ мафиози за 120 секунд!
-
-[PAGE_04]
-Убей ~1~ триадовцев за 120 секунд!
-
-[PAGE_05]
-Убей ~1~ триадовцев за 120 секунд!
-
-[PAGE_06]
-Уничтожь ~1~ машин за 120 секунд!
-
-[PAGE_07]
-Расколи ~1~ голов Ярди за 120 секунд!
-
-[PAGE_08]
-Сожги ~1~ членов Якудзы за 120 секунд!
-
-[PAGE_09]
-Уничтож ~1~ машин за 120 секунд!
-
-[PAGE_10]
-Уничтожь ~1~ машин за 120 секунд!
-
-[PAGE_11]
-Истреби ~1~ Ярди за 120 секунд!
-
-[PAGE_12]
-Подожги ~1~ членов Якудзы за 120 секунд!
-
-[PAGE_13]
-Взорви ~1~ Ярди за 120 секунд!
-
-[PAGE_14]
-Поджарь ~1~ колумбийцев за 120 секунд!
-
-[PAGE_15]
-Задави ~1~ Капюшонов за 120 секунд!
-
-[PAGE_16]
-Уничтожь ~1~ машин за 120 секунд!
-
-[PAGE_17]
-Задави ~1~ колумбийцев за 120 секунд!
-
-[PAGE_18]
-Уничтожь ~1~ машин за 120 секунд!
-
-[PAGE_19]
-Лиши голов ~1~ колумбийцев за 120 секунд!
-
-[PAGE_20]
-Обезглавь ~1~ Капюшонов за 120 секунд!
-
-[PANCAK]
-РАСПЛЮЩИЛ!
-
-[PANLANT]
-Панлантик
-
-[PAPER1]
-*
-
-[PAPER2]
-*
-
-[PAPER3]
-*
-
-[PARK]
-Парк Бельвиль
-
-[PARSHP]
-Parse Heap
-
-[PASDRO]
-Потеряно пассажиров
-
-[PATRIOT]
-Пэтриот
-
-[PAUSED]
-ИГРА ОСТАНОВЛЕНА
-
-[PBOAT_1]
-Чтобы выстрелить из орудия катера нажми ~h~~k~~PED_FIREWEAPON~~w~.
-
-[PBOAT_2]
-Чтобы выстрелить из орудия катера нажми ~h~~k~~PED_FIREWEAPON~~w~.
-
-[PCLOAD]
-Loading File Data
-
-[PCRESRT]
-Перезапуск Grand Theft Auto III
-
-[PDRGON]
-ShowPedRoadGroups On
-
-[PEREN]
-Многолетник
-
-[PERPIC]
-Найдено особых пакетов
-
-[PER_COM]
-Процент завершения игры
-
-[PE_WAST]
-Убито вами людей
-
-[PE_WSOT]
-Убито преступниками людей
-
-[PIG_WST]
-Убито копов
-
-[PL_STAT]
-ДАННЫЕ ОБ ИГРОКЕ
-
-[POLICAR]
-Полицейская
-
-[PONY]
-Пони
-
-[PORT_E]
-Порт Портланда
-
-[PORT_I]
-Трентон
-
-[PORT_S]
-Пристань Атлантик
-
-[PORT_W]
-Мыс Каллахан
-
-[PQUINS]
-Идеальный четверной безумный трюк
-
-[PREBRF]
-Предыдущие сообщения
-
-[PREDATR]
-Хищник
-
-[PRGOFF]
-ShowPedRoadGroups Off
-
-[PRINST]
-Идеальный безумный трюк
-
-[PROJECT]
-Сады Вичита
-
-[PRTRST]
-Идеальный тройной безумный трюк
-
-[PRVMEN]
-Задание предыдущей миссии
-
-[PUSAVE]
-Save Only the game
-
-[PU_MONY]
-Не хватает денег.
-
-[QUINST]
-Четверной безумный трюк
-
-[QUITOP]
-Quit Options
-
-[RADIO_A]
-Нажимай ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ ~w~, чтобы менять ~h~ радиоволну.
-
-[RADIO_B]
-Нажимай ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ ~w~, чтобы менять ~h~ радиоволну.
-
-[RADIO_C]
-Нажимай ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ ~w~, чтобы менять ~h~ радиоволну.
-
-[RADIO_D]
-Нажимай ~h~~k~~VEHICLE_CHANGE_RADIO_STATION~ ~w~, чтобы менять ~h~ радиоволну.
-
-[RAMPAGE]
-СХВАТКА!!
-
-[RAMP_A]
-ВСЕ СХВАТКИ ПРОЙДЕНЫ!
-
-[RAMP_F]
-СХВАТКА ПРОИГРАНА
-
-[RAMP_P]
-СХВАТКА ВЫИГРАНА!
-
-[RATNG1]
-Воришка
-
-[RATNG10]
-Чистильщик
-
-[RATNG11]
-Профессионал
-
-[RATNG12]
-Киллер
-
-[RATNG13]
-Правая рука
-
-[RATNG14]
-Главарь
-
-[RATNG15]
-Босс
-
-[RATNG2]
-Мошенник
-
-[RATNG3]
-Хулиган
-
-[RATNG4]
-Шестерка
-
-[RATNG5]
-Грабитель
-
-[RATNG6]
-Громила
-
-[RATNG7]
-Бандит
-
-[RATNG8]
-Головорез
-
-[RATNG9]
-Братан
-
-[RAY]
-ЗАДАНИЯ РЭЯ
-
-[RAYGO]
-~g~Рэй пошел в другой туалет. Зайди сюда попозже!
-
-[RC1]
-'ДРАКА С ДЬЯВОЛАМИ'
-
-[RC2]
-'МОРДОБОЙ С МАФИЕЙ'
-
-[RC3]
-'КАТАСТРОФА В КАЗИНО'
-
-[RC4]
-'РАЗБОРКА С РАСТАМАНАМИ'
-
-[RCBANDT]
-Багги Бандит
-
-[RCHELP]
-Чтобы подорвать машинку, нажми ~k~~PED_FIREWEAPON~, или врежься в колесо жертвы.
-
-[RCHELPA]
-Чтобы подорвать машинку, нажми ~k~~PED_FIREWEAPON~, или врежься в колесо жертвы.
-
-[RC_1]
-У тебя 2 минуты, чтобы подорвать как можно больше машин Дьяволов!
-
-[RC_2]
-У тебя 2 минуты, чтобы подорвать как можно больше машин мафии!
-
-[RC_3]
-У тебя 2 минуты, чтобы подорвать как можно больше машин Якудзы!
-
-[RC_4]
-У тебя 2 минуты, чтобы подорвать как можно больше машин Ярди!
-
-[RC_5]
-У тебя 2 минуты, чтобы подорвать как можно больше машин Капюшонов!
-
-[RC_6]
-У тебя 2 минуты, чтобы подорвать как можно больше машин Картеля!
-
-[RECORD]
-~g~НОВЫЙ РЕКОРД!!
-
-[REDLIGH]
-Квартал красных фонарей
-
-[REEFER]
-Рифер
-
-[REGCAR]
-Register MemoryCard One
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[REPLAY]
-ПОВТОР
-
-[RESTART]
-Новая игра
-
-[REWARD]
-НАГРАДА $~1~
-
-[RHINO]
-Носорог
-
-[RISE]
-Rise FM
-
-[RM1]
-'КОНЕЦ СТУКАЧА'
-
-[RM1_1]
-~g~Осмотри дом защиты свидетелей.
-
-[RM1_2]
-~g~Прикончи МакАффри!
-
-[RM1_3]
-~r~МакАффри скрылся!
-
-[RM1_4]
-~g~Ты использовал все гранаты! Иди купи в магазине еще!
-
-[RM1_5]
-~g~Вернись и подожги дом!
-
-[RM1_A]
-Этот подонок МакАффри брал взяток больше, чем кто-либо.
-
-[RM1_B]
-Он решил всех заложить, и таким образом оправдать все свои темные делишки.
-
-[RM1_C]
-Хренов стукач!
-
-[RM1_D]
-Он в центре Ньюпорта под вооруженной охраной в здании защиты свидетелей, которое позади стоянки.
-
-[RM1_E]
-Чтобы выкурить его наружу - подожги этот дом, ну а потом, я думаю, ты сможешь заставить его замолчать.
-
-[RM2]
-'РУКА ПОМОЩИ'
-
-[RM2_A]
-Мой старый армейский друг организовал бизнес в Рокфорде.
-
-[RM2_A1]
-Эй, парень, сюда!
-
-[RM2_B]
-Мы с ним были в Никарагуа в те годы, когда правительство знало, что делает. Ну так вот.
-
-[RM2_C]
-Его вчера избили какие-то сволочи из Картеля, и сказали что сегодня заберут кое-что из его товара.
-
-[RM2_D]
-Ему нужно помочь. Ну, а он в долгу тоже не останется - даст тебе затовариться 'скобяными изделиями'.
-
-[RM2_D1]
-Я бы, конечно, и сам помог ему, но старость не радость - кхе кхе - вот, в-общем, удачи тебе.
-
-[RM2_E]
-Рэй мне звонил... но я думал, он пришлет побольше народу.
-
-[RM2_E1]
-Я не могу поверить, что эти трусливые ублюдки снова оставили меня без прикрытия!
-
-[RM2_F]
-Ну, три руки лучше чем одна, так что бери все, что тебе пригодится.
-
-[RM2_F1]
-Колумбийцы прибудут с минуты на минуту!
-
-[RM2_G]
-~g~Проверь, как дела у Фила!
-
-[RM2_H]
-~r~Фила убили!
-
-[RM2_K]
-Проклятье, вот они! ПОЛУЧАЙТЕ!
-
-[RM2_L]
-Эй! Если бы ты тогда был в Никарагуа, глядишь, я и не потерял бы руку!
-
-[RM2_M]
-Если тебе понадобится оружие, то не стесняйся, бери все что нужно из ящиков.
-
-[RM2_N]
-Только не забудь заплатить. А сейчас сваливай, с копами я все улажу.
-
-[RM3]
-'УНИЧТОЖЕНИЕ УЛИК'
-
-[RM3_1]
-~g~Оставь улики в машине и подожги ее.
-
-[RM3_4]
-~g~Обвинение лишилось улик!
-
-[RM3_5]
-~g~У тебя ~1~ из 6 пакетов с уликами.
-
-[RM3_6]
-~r~Фотографии разлетятся по всему городу!
-
-[RM3_7]
-~g~Теперь поджигай тачку!
-
-[RM3_8]
-~r~Эта тачка была приманкой!
-
-[RM3_A]
-Я знаю одного очень важного человека в городе,
-
-[RM3_B]
-Против него выдвинуто обвинение. Есть какие-то непристойные фотки, где его сняли
-
-[RM3_C]
-на вечеринке в морге или еще где.
-
-[RM3_D]
-Улики скоро собираются везти в суд.
-
-[RM3_E]
-Тебе нужно протаранить машину с уликами и собрать все до одной выпавшие фотографии.
-
-[RM3_F]
-Как только соберешь все улики - оставь их в машине и взорви ее.
-
-[RM3_G]
-Если ты это провернешь, то все будут в плюсе.
-
-[RM3_H]
-с довольно экзотическим вкусом и деньгами для его удовлетворения.
-
-[RM4]
-'РЫБАЛКА'
-
-[RM4_1]
-~g~Тебе нужно угнать полицейский катер.
-
-[RM4_2]
-~g~Отправляйся к маяку и пусти напарника Рэя на корм рыбам!
-
-[RM4_3]
-~r~Партнер Рэя скрылся!
-
-[RM4_A]
-Думаю, мой напарник - стукач.
-
-[RM4_B]
-Нужно побыстрее заткнуть ему пасть.
-
-[RM4_C]
-На своем катере он вечерами ходит рыбачить к маяку на утесе Портланда.
-
-[RM4_D]
-Возьми полицейский катер и разберись с этим чертовым стукачем!
-
-[RM4_E]
-Хватит ему рыбу ловить. Пусть он ее теперь покормит.
-
-[RM5]
-'ЖИВАЯ МУМИЯ'
-
-[RM5_1]
-~g~Перехвати скорую.
-
-[RM5_2]
-~g~Тебя засекли!
-
-[RM5_3]
-~g~Это была приманка!
-
-[RM5_4]
-~g~Пули эту загипсованную куклу не берут!
-
-[RM5_5]
-~g~Этой загипсованной кукле огнемет не страшен!
-
-[RM5_6]
-~g~Он вывалился! Раскатай его по асфальту, или взорви гранатами!
-
-[RM5_7]
-~r~Свидетеля доставили на место!
-
-[RM5_8]
-~g~Свидетеля больше нет!
-
-[RM5_A]
-Ты никчемный ублюдок!
-
-[RM5_A1]
-Ты все завалил! Я уже на крючке, а ты даже не смог поджарить этого хренова шпиона.
-
-[RM5_B]
-Я же тебе хорошо заплатил за то, чтобы ты убрал этого стукача!
-
-[RM5_B1]
-Сегодня этот урод собирается давать показания!
-
-[RM5_C]
-Его с минуты на минуту собираются перевезти из госпиталя Карсон в участок Рокфорда.
-
-[RM5_D]
-Если он заговорит, мне конец...
-
-[RM5_E]
-так что иди, и доделывай свою работу!
-
-[RM6]
-'НА МУШКЕ'
-
-[RM6_1]
-Вот тебе ключ от тайника.
-
-[RM6_2]
-В нем я на черный день припрятал наличные и кое какие полезные вещички.
-
-[RM6_3]
-Увидимся.
-
-[RM6_4]
-~g~Отправляйся к тайнику и забери вещички Рэя.
-
-[RM6_5]
-~g~Мост под наблюдением ЦРУ. Тебе придется найти другой путь.
-
-[RM6_6]
-~r~Рэй мертв!
-
-[RM6_666]
-Возьми мой пуленепробиваемый Пэтриот. Увидимся в Майами, Рэй
-
-[RM6_7]
-~r~Рэй опоздал на самолет.
-
-[RM6_8]
-~g~Ты проехал мимо Рэя, вернись и посади его.
-
-[RM6_A]
-За тобой хвоста нет? Хорошо.
-
-[RM6_B]
-Похоже, я прыгнул выше головы и перешел кое-кому дорогу!
-
-[RM6_C]
-Я так понял, что ЦРУ имеет долю от продажи СПАНКА
-
-[RM6_C1]
-и они убирают тех, кто мешает Картелю работать.
-
-[RM6_D]
-Я у них на мушке, мне нужно быстрее сваливать.
-
-[RM6_E]
-Мой самолет вот-вот отлетает, гони в аэропорт, я хорошо заплачу!
-
-[ROADBR1]
-Мост Каллахан
-
-[ROADBR2]
-Мост Каллахан
-
-[RUMPO]
-Рампо
-
-[SAVE1]
-Чтобы ~h~сохранить игру~w~ - пройди в дверь. Во время задания записаться нельзя.
-
-[SAVE2]
-Если в гараже оставить машину, то она будет сохранена при записи игры.
-
-[SCASSL]
-Sick Fuck Selected
-
-[SCORE]
-$~1~
-
-[SCRFOR]
-Screen format
-
-[SCROPT]
-НАСТРОЙКИ ЭКРАНА
-
-[SCSCSL]
-Sick Fucker Selected
-
-[SECOND]
-~g~второй
-
-[SECURI]
-Инкассатор
-
-[SENTINL]
-Сентинел
-
-[SEP]
-Сен
-
-[SET1]
-SetUp 1.
-
-[SET1EN]
-SetUp 1. Enabled
-
-[SET2]
-SetUp 2
-
-[SET2EN]
-SetUp 2. Enabled
-
-[SET3]
-SetUp 3
-
-[SET3EN]
-SetUp 3. Enabled
-
-[SET4]
-SetUp 4
-
-[SET4EN]
-SetUp 4. Enabled
-
-[SFXVOL]
-Громкость звуков
-
-[SHOPING]
-Бедфорд Поинт
-
-[SHPLOF]
-gbShowCollisionPolys Off
-
-[SHPLON]
-gbShowCollisionPolys On
-
-[SICASS]
-Sick Fuck
-
-[SICSIC]
-Sick Fucker
-
-[SIREN_1]
-Чтобы включить сирену, понажимай кнопку ~h~~k~~VEHICLE_HORN~~w~.
-
-[SIREN_2]
-Чтобы включить сирену, понажимай кнопку ~h~~k~~VEHICLE_HORN~~w~.
-
-[SIREN_3]
-Чтобы включить сирену, понажимай кнопку ~h~~k~~VEHICLE_HORN~~w~.
-
-[SIREN_4]
-Чтобы включить сирену, понажимай кнопку ~h~~k~~VEHICLE_HORN~~w~.
-
-[SLNSP]
-Insufficient space to save. Please insert a Memory Card (PS2) with at least 200KB of free space available into MEMORY CARD slot 1.
-
-[SLONDR]
-Insufficient space to save. Please insert a Memory Card (PS2) with at least 500KB of free space available into MEMORY CARD slot 1.
-
-[SLONFM]
-Error formatting Memory Card (PS2) in MEMORY CARD slot 1.
-
-[SLONNF]
-Memory Card (PS2) in MEMORY CARD slot 1 is unformatted.
-
-[SLONNO]
-No Memory Card (PS2) in MEMORY CARD slot 1.
-
-[SOAKED]
-ЧЕРТ!
-
-[SOUND]
-ЗВУК
-
-[SPAIN]
-Spanish
-
-[SPEEDER]
-Speeder
-
-[SPLAT]
-ГОТОВ!
-
-[SPOTTED]
-~r~Они у тебя на хвосте!
-
-[SPRAY]
-В мастерской твою тачку ~h~отремонтируют~w~ и ~h~перекрасят~w~. Копы тебя больше ~h~не узнают~w~. Стоимость - ~h~$1000~w~.
-
-[SPRAY1]
-В мастерской твою тачку ~h~отремонтируют~w~ и ~h~перекрасят~w~. Копы тебя больше ~h~не узнают~w~. Стоимость - ~h~$1000~w~. Первый раз это бесплатно.
-
-[SPRAY_1]
-Чтобы включить брандспойт, нажми на ~h~~k~~PED_FIREWEAPON~~w~.
-
-[SPRAY_4]
-Чтобы включить брандспойт, нажми на ~h~~k~~PED_FIREWEAPON~~w~.
-
-[STADIUM]
-Аспатрия
-
-[STALION]
-Жеребец
-
-[STANDS]
-ЛАРЬКОВ РАЗБИТО:
-
-[STASH]
-~g~Отвези СПАНК на ~p~стройку~g~!
-
-[STINGER]
-Стингер
-
-[STOCK]
-отсутствует
-
-[STRETCH]
-Стретч
-
-[SUBWAY1]
-Станция Портланд
-
-[SUBWAY2]
-Станция Рокфорд
-
-[SUBWAY3]
-Станция Южный Стаунтон
-
-[SUBWAY4]
-Вокзал Шорсайд
-
-[SUB_IND]
-Пайк Крик
-
-[SUB_ZO2]
-Шорсайд Вейл
-
-[SUB_ZO3]
-Шорсайд Вейл
-
-[SUB_ZON]
-Шорсайд Вейл
-
-[SVCONF]
-ПОДТВЕРДИТЕ ЗАПИСЬ
-
-[SVGMON]
-SaveTheGame
-
-[SWANKS]
-Кедровая роща
-
-[S_PROM2]
-Если в этот гараж поставить машину, то она будет сохранена при записи игры.
-
-[S_PROMP]
-Когда ты не на задании, то здесь можно ~h~сохранить игру~w~, но это добавит ко времени шесть часов.
-
-[S_TRN_1]
-Воспользовавшись метро, ты можешь попасть в другой район города. Нажми~h~ ~k~~VEHICLE_ENTER_EXIT~~w~ чтобы ~h~сесть~w~ или ~h~выйти~w~ из поезда.
-
-[S_TRN_2]
-Воспользовавшись метро, ты можешь попасть в другой район города. Нажми~h~ ~k~~VEHICLE_ENTER_EXIT~~w~ чтобы ~h~сесть~w~ или ~h~выйти~w~ из поезда.
-
-[S_VIEW]
-Портланд Вью
-
-[T4X4_1]
-'ПЭТРИОТ РАЛЛИ'
-
-[T4X4_1A]
-~g~У тебя ~y~5 минут~g~ чтобы пройти ~y~15 контрольных пунктов~g~. Ты можешь их проходить в ~y~ЛЮБОМ~g~ порядке.
-
-[T4X4_1B]
-~1~ из 15!
-
-[T4X4_1C]
-~g~Отсчет времени пойдет, как только ты ~y~ПРОЕДЕШЬ~g~ через первый контрольный пункт. После прохождения каждой точки тебе будет добавляться ~y~20 секунд~g~.
-
-[T4X4_2]
-'ГОНКА В ПАРКЕ'
-
-[T4X4_2A]
-~g~У тебя ~y~5 минут~g~ чтобы пройти ~y~12 контрольных пунктов~g~. Ты можешь их проходить в ~y~ЛЮБОМ~g~ порядке.
-
-[T4X4_2B]
-~1~ из 12!
-
-[T4X4_2C]
-~g~Отсчет времени пойдет, как только ты ~y~ПРОЕДЕШЬ~g~ через первый контрольный пункт. После прохождения каждой точке тебе будет добавляться ~y~10 секунд~g~.
-
-[T4X4_3]
-'ЖАРКАЯ ГОНКА'
-
-[T4X4_3A]
-~g~У тебя ~y~5 минут~g~, чтобы пройти ~y~20 контрольных пунктов~g~. Ты можешь их проходить в ~y~ЛЮБОМ~g~ порядке.
-
-[T4X4_3B]
-~g~Отсчет времени пойдет, как только ты ~y~ПРОЕДЕШЬ~g~ через первый контрольный пункт. После прохождения каждой точки тебе будет добавляться ~y~15 секунд~g~.
-
-[T4X4_3C]
-~1~ из 20!
-
-[T4X4_F]
-~r~Ты не успел! Слишком сложно для тебя?!
-
-[TAXI]
-Такси
-
-[TAXI1]
-~g~Ищи пассажира.
-
-[TAXI2]
-~r~Ты не успел вовремя!
-
-[TAXI3]
-~r~Твой пассажир бежал в ужасе!
-
-[TAXI4]
-Пассажир доставлен!
-
-[TAXI5]
-ПРИЗ ЗА СКОРОСТЬ!
-
-[TAXI6]
-Задание такси окончено
-
-[TAXI7]
-~r~Такси слишком помято, отремонтируй его.
-
-[TAXIH1]
-Остановись рядом с указанным пешеходом, подожди, пока он не сядет в такси и за указанное время отвези его куда он хочет.
-
-[TAXI_M]
-'ВОДИТЕЛЬ ТАКСИ'
-
-[TEFONE]
-Test Format MemCard One
-
-[TEUFON]
-Test UnFormat MemCard One
-
-[TEXTXYZ]
-Writing coordinates to file...
-
-[THIRD]
-~g~третий
-
-[TIMER]
-Это задание на время, ты должен успеть его выполнить, пока тикает таймер.
-
-[TM1]
-'БОЛЬШАЯ СТИРКА'
-
-[TM1_A]
-~w~Присаживайся, малыш, давай присаживайся.
-
-[TM1_B]
-~w~Итак, прачечная не хочет платить за защиту?
-
-[TM1_C]
-~w~Триадовцы думают, что могут тягаться со мной?
-
-[TM1_D]
-~w~Давай-ка покажем этим 'крутым парням', что значит быть действительно крутым.
-
-[TM1_E]
-~w~Да, преподай им урок. Еще никто из нас не отступал перед Триадой.
-
-[TM1_F]
-~w~Твой отец, упокой господь его душу, не цацкался с ними на Сицилии.
-
-[TM1_G]
-~w~Извини Ма. Да, Ма.
-
-[TM1_H]
-~w~Я хочу чтобы ты взорвал все фургоны прачечной
-
-[TM1_I]
-~w~и прикончил Триадовцев, что встанут у тебя на пути.
-
-[TM1_J]
-~w~Все, что для этого нужно, ты можешь взять у Лысого.
-
-[TM2]
-'МЗДА'
-
-[TM2_1]
-~g~Отвези деньги Тони!
-
-[TM2_2]
-~g~Ты загасил их всех!
-
-[TM2_3]
-~g~Это ловушка! Прикончи их!
-
-[TM2_A]
-~w~Тони пошел на очередное дело.
-
-[TM2_AA]
-~w~Он никогда не станет таким авторитетом, как отец. Вон тебе записка.
-
-[TM2_B]
-~w~Прачечная согласна платить - ты все сделал как нужно!
-
-[TM2_C]
-~w~Иди, забери деньги и принеси их мне. Но остерегайся триадовцев.
-
-[TM2_D]
-~w~Они решили поджарить твою задницу, но не бери это в голову, сынок.
-
-[TM2_E]
-~w~Никто, повторяю, никто не связывается с ТОНИ СИПРИАНИ!
-
-[TM3]
-'СОБРАНИЕ СЕМЬИ САЛЬВАТОРЕ'
-
-[TM3_1]
-~g~Возьми у Джоуи Стретч.
-
-[TM3_2]
-~g~Теперь езжай за Луиджи.
-
-[TM3_3]
-~g~Теперь забери Тони.
-
-[TM3_4]
-~g~Отвези приятелей в особняк Сальваторе.
-
-[TM3_5]
-~y~Это засада Триады!
-
-[TM3_A]
-~w~Дон Сальваторе решил нас всех собрать
-
-[TM3_A1]
-~r~Джоуи поджарился!
-
-[TM3_A2]
-~r~Джоуи и Луиджи кремированы!
-
-[TM3_A3]
-~r~Джоуи, Тони и Луиджи спеклись!
-
-[TM3_B]
-~w~Нужно заехать к Джоуи, и забрать лимузин и его самого из гаража.
-
-[TM3_C]
-~w~Затем отправишься в клуб за Луиджи, и потом заедешь за мной,
-
-[TM3_D]
-~w~Сегодня нам всем босс назначил встречу у него в особняке.
-
-[TM3_E]
-~w~Эти Триадовцы должны знать свое место.
-
-[TM3_F]
-~w~Им нужна война, они ее получат.
-
-[TM3_G]
-~w~Давай, отправляйся.
-
-[TM3_H]
-~w~Ты молодец, парень, просто молодец.
-
-[TM3_I]
-~w~Пошли, познакомлю тебя с доном.
-
-[TM3_J]
-~w~Эээй! Луиджи!
-
-[TM3_K]
-~w~О, Сальваторе, мои девочки по тебе уже соскучились, тебя так долго не было.
-
-[TM3_L]
-~w~Передай им, что как только мы закончим это небольшое дельце,
-
-[TM3_M]
-~w~то отправимся в клуб и отпразднуем, хорошо?
-
-[TM3_MA]
-~w~Да не знаю я, где он!
-
-[TM3_MB]
-~w~Я уверена, что он сам себя иногда не понимает.
-
-[TM3_MC]
-~w~Они с отцом такие разные. Отец, тот всегда при деле, решительный...
-
-[TM3_N]
-~w~Вот он, мой мальчик.
-
-[TM3_N2]
-~w~Как у тебя дела, пап?
-
-[TM3_O]
-~w~Ты еще не нашел себе хорошую девушку?
-
-[TM3_P]
-~w~Эй, твоя мама, упокой господь ее душу, перевернулась бы в могиле,
-
-[TM3_Q]
-~w~если бы увидела тебя без жены.
-
-[TM3_R]
-~w~Я знаю, па, я над этим работаю.
-
-[TM3_S]
-~w~Тони, как твоя мама?
-
-[TM3_T]
-~w~Знаешь, она чудесная женщина. Сильная. Умная.
-
-[TM3_U]
-~w~У нее все...хорошо.
-
-[TM3_V]
-~w~Прекрасно, прекрасно. Слушайте, парни, проходите внутрь, а я пока поговорю с нашим новым другом.
-
-[TM3_W]
-~w~Я смотрю ты многое для нас сделал, парень...
-
-[TM4]
-'ПЕРЕПОЛОХ В ЧАЙНАТАУНЕ'
-
-[TM4_A]
-~w~Ах, это ты. Тони сейчас нет.
-
-[TM4_A2]
-~w~Но он оставил тебе одно из своих любовных посланий.
-
-[TM4_B]
-~w~Мы в состоянии ВОЙНЫ! Триада использует рыбный завод в качестве прикрытия.
-
-[TM4_C]
-~w~Они проворачивают свои темные делишки на рыбном рынке в Чайнатауне.
-
-[TM4_D]
-~w~Прачечная опять задолжала нам деньги.
-
-[TM4_E]
-~w~Они считают, что за защиту лучше платить Триаде, так что придется их снова наказать.
-
-[TM4_F]
-~w~Накажи этих умников, и нанеси визит боссам Триады!
-
-[TM4_G]
-~w~Черт, если представится шанс, убей заодно и несколько их солдат.
-
-[TM4_GAT]
-~g~Чтобы тебя пропустили, возьми фургон Триады.
-
-[TM5]
-'ВЗРЫВ НА ЗАВОДЕ'
-
-[TM5_B]
-~w~OK, мне надоело это дерьмо.
-
-[TM5_C]
-~w~Нужно закончить разборки с Триадой раз и навсегда!
-
-[TM5_D]
-Лысый установил бомбу в мусоровоз.
-
-[TM5_E]
-~w~Бомба на таймере, так что много времени на размышления у тебя не будет. Бери машину.
-
-[TM5_F]
-~w~Будь осторожен на дороге, Лысый сказал. что бомба может рвануть от любого столкновения!
-
-[TM5_G]
-~w~Они откроют ворота для мусоровоза, так что ты без проблем проедешь на завод.
-
-[TM5_H]
-~w~Припаркуй мусорку между двумя резервуарами с бензином и быстрее уноси ноги!
-
-[TM5_I]
-~w~Пусть пойдет дождь из скумбрии.
-
-[TM5_J]
-~w~Нам нужен библейский апокалипсис, а не какая-то дешевка.
-
-[TM_BUST]
-Число ваших арестов
-
-[TM_DED]
-Число визитов в больницу
-
-[TONI]
-ЗАДАНИЯ ТОНИ
-
-[TONIGO]
-~g~Тони повез свою мамочку в оперу. Зайди позже!
-
-[TONI_P]
-У меня есть для тебя одно срочное дело! - Тони
-
-[TOWERS]
-Хепберн Хейтс
-
-[TOYZ]
-Фургон игрушек
-
-[TRAIN]
-Поезд
-
-[TRAIN_1]
-Станция Куровски
-
-[TRAIN_2]
-Станция Ротвелл
-
-[TRAIN_3]
-Станция Бейли
-
-[TRASH]
-~g~Ты сильно помял свою тачку! Езжай и отремонтируй ее!
-
-[TRASHM]
-Мусоровоз
-
-[TRINST]
-Тройной безумный трюк
-
-[TSCORE]
-ЗАРАБОТАНО: $~1~
-
-[TSCORE2]
-$~1~
-
-[TTUTOR]
-Чтобы заняться работой таксиста или отказаться от нее, нажми кнопку ~h~~k~~TOGGLE_SUBMISSIONS~~w~.
-
-[TTUTOR2]
-Чтобы заняться работой таксиста или отказаться от нее, нажми кнопку ~h~~k~~TOGGLE_SUBMISSIONS~~w~.
-
-[TUBE1]
-Как только откроется метро, ты сможешь на нем проехать на остров Стаунтон.
-
-[TUBE2]
-Как только откроется Шорсайд Вейл, ты сможешь выйти на вокзале Шорсайд, чтобы попасть в аэропорт Фрэнсис.
-
-[TUBE_2]
-чтобы сесть на электричку в метро - нажми ~h~~k~~VEHICLE_ENTER_EXIT~~w~.
-
-[TUNNEL]
-Как только откроется туннель Портер, ты сможешь проехать на остров Стаунтон.
-
-[TUNNELP]
-Туннель Портер
-
-[UNFRM1]
-UnFormatMemCard 1 (teststuff)
-
-[UNIVERS]
-Учебный городок
-
-[UPSIDE]
-~r~Ты перевернул тачку!
-
-[USJ]
-ПРИЗ ЗА ОСОБЫЙ ТРЮК!
-
-[USJI1]
-TEXT NO LONGER REQUIRED
-
-[USJI2]
-TEXT NO LONGER REQUIRED
-
-[USJI3]
-TEXT NO LONGER REQUIRED
-
-[USJ_ALL]
-ТЫ ИСПОЛНИЛ ВСЕ ОСОБЫЕ ТРЮКИ!
-
-[UZI_IN]
-В магазин оружия завезли 'Узи'!
-
-[VANHSTP]
-Решил вскрыть еще несколько Инкассаторов? Пригони их в наш гараж в гавани Портланда.
-
-[WANTED1]
-~g~Стряхни копов с хвоста и понизь их заинтересованность в тебе!
-
-[WANT_A]
-Тебя арестовывают лишь в том случае, если ты ~h~объявлен в розыск~w~.
-
-[WANT_B]
-Величина ~h~уровня розыска~w~ отображается строкой звездочек в верхнем правом углу экрана.
-
-[WANT_C]
-Сейчас твой ~h~уровень розыска~w~ равен одному...
-
-[WANT_D]
-двум...
-
-[WANT_E]
-трем...
-
-[WANT_F]
-Чем выше твой ~h~уровень розыска~w~, тем больше сил будет брошено на твой арест.
-
-[WANT_G]
-После ~h~ареста~w~ тебя отвозят в ближайший полицейский участок
-
-[WANT_H]
-Копы забирают у тебя все оружие и часть денег в качестве взятки.
-
-[WANT_I]
-Твое текущее задание будет считаться проваленным.
-
-[WANT_J]
-Во время игры ты найдешь разные способы понижать ~h~уровень розыска~w~.
-
-[WANT_K]
-~h~Уровень розыска~w~ сбрасывается после того, как машина будет ~h~ПЕРЕКРАШЕНА~w~.
-
-[WEATHE2]
-ОБЫЧНАЯ ПОГОДА
-
-[WEATHER]
-НЕНАСТЬЕ
-
-[WELCOME]
-ДОБРО ПОЖАЛОВАТЬ
-
-[WHOOPEE]
-М-р.Вупи
-
-[WIN_95]
-Grand Theft Auto III }u ~ytu‚ ~t Windows 95
-
-[WIN_DX]
-Grand Theft Auto III ‚Ђuqѓu‚ DirectX ruЂЃxx }u }xvu 8.1
-
-[WIN_RSZ]
-]u ѓtp{~ЃЊ ѓЃ‚p}~rx‚Њ }~r~u ЂpwЂu€u}xu ЌzЂp}p
-
-[WIN_TTL]
-Grand Theft Auto III
-
-[WIN_VDM]
-Grand Theft Auto III ‚Ђuqѓu‚ }p rxtu~zpЂ‚u }u |u}uu 12\q p|Џ‚x
-
-[WRCONT]
-The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto III requires an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2).
-
-[WRCONTE]
-The controller connected to controller port 1 is an unsupported controller. Grand Theft Auto III requires an analog controller (DUALSHOCK@) or analog controller (DUALSHOCK@2).
-
-[WRECKED]
-~r~Машина разбита!
-
-[WRONGCD]
-Неверный диск. Пожалуйст,а вставьте нужный диск.
-
-[WRONGT1]
-~g~За работой приходи между 05:00 и 21:00
-
-[WRONGT2]
-~g~За работой приходи между 06:00 и 14:00
-
-[WRONGT3]
-~g~За работой приходи между 15:00 и 00:00
-
-[X]
-x
-
-[Y1JLAST]
-~r~Пришел последним! Ты болтаешь как водила, а водишь как болтун!
-
-[Y1_1ST]
-~g~Ты пришел первым, пройдя ~1~ контрольных пунктов!
-
-[Y1_2ND]
-~y~Ты пришел вторым, пройдя ~1~ контрольных пунктов. ~y~Неплохо, но ты не победил!
-
-[Y1_3RD]
-~r~Ты пришел третьим, пройдя ~1~ контрольных пунктов. ~r~Я был о тебе более высокого мнения!
-
-[Y1_J1ST]
-~y~Ты пришел первым, пройдя ~1~ контрольных пунктов. ~y~Хорошо, но ты должен быть лучшим, чтобы получить Королеву Лиззи!
-
-[Y1_J2ND]
-~r~Ты пришел вторым, пройдя ~1~ контрольных пунктов. Ты водишь как бешеная макака!
-
-[Y1_LAST]
-~r~Ты пришел последним! ~r~Ты просто тратишь мое время, ДУРАК!
-
-[Y1_TEST]
-МАШИНА В ВОДЕ!
-
-[YAKUSA]
-Торрингтон
-
-[YAKUZCR]
-Стингер Якудзы
-
-[YANKEE]
-Янки
-
-[YARDICR]
-Лобо Ярди
-
-[YARDIE]
-ЗАДАНИЯ ЯРДИ
-
-[YD1]
-'БЫСТРЫЕ ТАЧКИ - ЛЕГКИЕ ДЕНЬГИ'
-
-[YD1GO]
-~g~СТАРТ!
-
-[YD1_1]
-~r~ОДИН
-
-[YD1_2]
-~r~ДВА
-
-[YD1_3]
-~r~ТРИ
-
-[YD1_A]
-~w~Это король Куртни.
-
-[YD1_A1]
-~w~Мои Ярди хотят устроить хорошую гонку, а я слышал, что ты крутой водила.
-
-[YD1_B]
-~w~Приезжай на своей тачке на пустырь за стадионом и жди там других участников заезда.
-
-[YD1_BON]
-$1000!!
-
-[YD1_C]
-~w~Мои люди будут наблюдать на всеми контрольными точками.
-
-[YD1_CNT]
-~1~ из 15!
-
-[YD1_D]
-~w~Тот кто пройдет контрольный пункт первым - получит приз, и так далее.
-
-[YD1_D1]
-~w~Если ты проедешь больше контрольных пунктов, чем мои ребята, я дам тебе работу.
-
-[YD1_E]
-~g~Готовься к гонке!
-
-[YD1_F]
-~g~Мощный старт - мне нравится твой стиль!
-
-[YD1_G]
-~r~Это гонка на МАШИНАХ. Тебе нужна МАШИНА, кретин!
-
-[YD2]
-'РЕЙД С 'УЗИ'
-
-[YD2_A]
-~w~Посмотрим, сможешь ли ты сделать за меня грязную работу.
-
-[YD2_A1]
-~w~Узнаем, можно ли тебе доверять.
-
-[YD2_B]
-~w~Сейчас подойдут двое моих парней, и ты пойдешь покатаешься с ними,
-
-[YD2_B1]
-~w~посмотрим, чего ты стоишь на самом деле.
-
-[YD2_C]
-~w~Давай, покатайся по Хепберн Хейтс и прикончи нескольких Дьяволов - они надоедают королеве Лиззи.
-
-[YD2_CC]
-~w~Вот, это тебе пригодится.
-
-[YD2_D]
-~w~Вести и стрелять будешь ты, ну а мы проследим чтобы ты не скопытился.
-
-[YD2_E]
-~w~Поехали!
-
-[YD2_F]
-~r~Он имел что-то против нас, пореши этого ублюдка!
-
-[YD2_G1]
-~w~Хепберн Хейтс...Давай ка прикончи несколько тупых Дьяволов...
-
-[YD2_G2]
-~w~Но запомни, ~r~Из машины тебе выходить нельзя!
-
-[YD2_H]
-~w~Ок, возвращаемся на нашу территорию! ВПЕРЕД!
-
-[YD2_L]
-~w~Отличная работа, Жнец!
-
-[YD2_M]
-~r~Он разбил мою тачку! Прикончи его!
-
-[YD2_N]
-~w~У тебя 5 секунд, чтобы вернуться в тачку!
-
-[YD3]
-'МАШИНЫ БАНД'
-
-[YD3_A]
-Я хотел бы получить тачки некоторых банд
-
-[YD3_A1]
-чтобы без помех провернуть дела на их территории.
-
-[YD3_B]
-Мне нужен Сентинел Мафии,
-
-[YD3_B1]
-Стингер Якудзы и
-
-[YD3_B2]
-Жеребец Дьяволов, для маскировки под их людей.
-
-[YD3_C]
-Отгони их в мой гараж в Ньюпорте, но запомни,
-
-[YD3_C1]
-мне не нужны помятые тачки!
-
-[YD3_D]
-Перебей номера
-
-[YD3_E]
-~r~Ты уже своровал тачку Дьяволов!
-
-[YD3_F]
-~r~Ты уже своровал тачку Мафии!
-
-[YD3_G]
-~r~Ты уже своровал тачку Якудзы!
-
-[YD3_H]
-~g~Тачка Дьяволов сворована!
-
-[YD3_I]
-~g~Тачка мафии сворована!
-
-[YD3_J]
-~g~Тачка Якудзы сворована!
-
-[YD3_K]
-~r~Машина сильно помята! Отремонтируй ее!
-
-[YD3_L]
-~g~Отгони ее в ~p~гараж~g~!
-
-[YD3_M]
-~r~Ты перевернулся! Ищи другую тачку!
-
-[YD4]
-'ПОДСТАВА'
-
-[YD4_1]
-~g~Обкурившиеся психи!
-
-[YD4_2]
-~g~Взорви фургоны камикадзе!
-
-[YD4_A]
-Короче, слушай!
-
-[YD4_A1]
-Отправляйся в Бедфорд Поинт.
-
-[YD4_A2]
-Там у меня тайник в старой тачке, сгоняй за ней!
-
-[YD4_B]
-ПИСЬМО: Говорят, ты нашел себе работу. Я тоже не сидела сложа руки.
-
-[YD4_C]
-Пришло тебе время почувствовать тебе силу СПАНКа! Besos y fuderes, Каталина, xxx.
-
-[YD4_D]
-PS: УМРИ, ПАРШИВЫЙ ПЕС, УМРИ!
-
-[YD_P]
-С тобой хочет побазарить король Куртни. Подойди к телефону на Аспатрии!
-
-[YES]
-Да
-
-[Z]
-Значение по оси Z: ~1~
-
-{ re3 updates }
-{ new languages }
-[FEL_JAP]
-ЯПОНСКИЙ
-
-[FEL_POL]
-ПОЛЬСКИЙ
-
-[FEL_RUS]
-РУССКИЙ
-
-{ new display menus }
-[FED_MIP]
-МИП-МАППИНГ
-
-[FED_AAS]
-СГЛАЖИВАНИЕ
-
-[FED_FIL]
-ТЕКСТУРНАЯ ФИЛЬТРАЦИЯ
-
-[FED_BIL]
-БИЛИНЕЙНАЯ
-
-[FED_TRL]
-ТРИЛИНЕЙНАЯ
-
-{ 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/spanish.txt b/utils/gxt/spanish.txt
deleted file mode 100644
index c0da2239..00000000
--- a/utils/gxt/spanish.txt
+++ /dev/null
@@ -1,8031 +0,0 @@
-[LETTER1]
-abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"$,.'-?!!SDBF
-
-[DEFNAM]
-Claude----------------------
-
-[IN_VEH]
-~g~¡Hey! ¡Vuelve al vehículo!
-
-[IN_VEH2]
-~g~¡Necesitarás un coche para este trabajo!
-
-[IN_BOAT]
-~g~¡Necesitarás un barco para este trabajo!
-
-[HEY]
-~g~¡No vayas solo, mantén tu grupo unido!
-
-[HEY2]
-~g~¡No os dividáis, mantened el grupo unido!
-
-[HEY3]
-~g~¡Has perdido a tu número uno, vuelve y recupera a 8-Ball!
-
-[HEY4]
-~g~¡Perder a Misty y Luigi te costará caro! ¡Ve y recógela!
-
-[HEY5]
-~g~Una de las chicas está ausente sin permiso, ¡vuelve y recógela!
-
-[HEY6]
-~g~Dejaste tu honor con el Yakuza Kanbu. ¡Debes protegerlo!
-
-[HEY7]
-~g~Sería útil un arma extra. ¡Vuelve y encuentra a tu contacto!
-
-[HEY8]
-~g~Protección significa exactamente eso: ¡Protege al viejo caballero oriental!
-
-[HEY9]
-~g~¿Quieres que corra la voz por las calles? ¡Ve a ver al contacto!
-
-[HELP2_A]
-Pulsa el ~h~botón /~w~ cuando corras para ~h~esprintar.
-
-[HELP3]
-Sólo puedes esprintar durante cortos períodos antes de cansarte.
-
-[HELP4_A]
-Pulsa el ~h~ botón ~k~~VEHICLE_ACCELERATE~~w~ para ~h~acelerar.
-
-[HELP4_D]
-Mueve el~h~ joystick analógico de la derecha ~w~ hacia arriba para ~h~acelerar.
-
-[HELP5_A]
-Pulsa el~h~ botón ~k~~VEHICLE_BRAKE~~w~ para ~h~frenar~w~, o para ~h~dar marcha atrás~w~ si el vehículo está detenido.
-
-[HELP5_D]
-Mueve del ~h~joystick analógico de la derecha~w~ hacia atrás para ~h~frenar~w~, o para ~h~dar marcha atrás~w~ si el vehículo se ha detenido.
-
-[HELP6_A]
-Pulsa el~h~ botón ~k~~VEHICLE_HANDBRAKE~ ~w~para utilizar el ~h~freno de mano del vehículo.
-
-[HELP6_C]
-Pulsa el~h~ botón ~k~~VEHICLE_HANDBRAKE~ ~w~para utilizar el ~h~freno de mano del vehículo.
-
-[HELP6_D]
-Pulsa el ~h~ botón ~k~~VEHICLE_HANDBRAKE~ ~w~ para utilizar el ~h~ freno de mano del vehículo.
-
-[HELP7_A]
-Pulsa y mantén el~h~ botón ~k~~PED_LOCK_TARGET~ ~w~para ~h~apuntar~w~ con el rifle de francotirador.
-
-[HELP7_D]
-Pulsa y mantén el ~h~ botón ~k~~PED_LOCK_TARGET~ ~w~para ~h~apuntar ~w~ con el rifle de francotirador.
-
-[HELP8_A]
-Pulsa el~h~ botón ~k~~PED_SNIPER_ZOOM_IN~ ~w~para ~h~ampliar el zoom ~w~con el rifle y el~h~ botón ~k~~PED_SNIPER_ZOOM_OUT~ ~w~para ~h~reducir el zoom ~w~de nuevo.
-
-[HELP9_A]
-Pulsa el~h~ botón ~k~~PED_FIREWEAPON~ ~w~para ~h~disparar~w~ el rifle de francotirador.
-
-[HELP10]
-Esta insignia indica que estás buscado por la policía.
-
-[HELP11]
-Cuantas más insignias tengas mayor será tu grado de peligrosidad asignado en la búsqueda y captura.
-
-[HELP13]
-Algunas veces puedes necesitar utilizar caminos no mostrados en el radar.
-
-[TIMER]
-Esta es una misión cronometrada, debes completarla antes de que el temporizador llegue a cero.
-
-[MISTY1]
-~r~¡Misty es carne de depósito de cadáveres!
-
-[OUT_VEH]
-~g~¡Fuera del vehículo!
-
-[GARAGE]
-Conduce el coche dentro del garaje, luego sal caminando.
-
-[WANTED1]
-~g~¡Despista a los polis y pierde tu grado de búsqueda y captura!
-
-[NODOORS]
-~g~¡No son sardinas! Consigue un coche con suficientes asientos.
-
-[TRASH]
-~g~¡Has dejado tu vehículo bien jodido! ¡Haz que lo reparen!
-
-[WRECKED]
-~r~¡El vehículo está destrozado!
-
-[HORN]
-~g~Toca el claxon.
-
-[HORN4]
-Pulsa el ~h~botón L3 ~w~para tocar el ~h~claxon
-
-[NOMONEY]
-~g~¡Necesitas más pasta!
-
-[OUTTIME]
-~r~¡Demasiado lento, tío, demasiado lento!
-
-[SPOTTED]
-~r~¡Te siguen la pista!
-
-[REWARD]
-RECOMPENSA $~1~
-
-[GAMEOVR]
-JUEGO ACABADO
-
-[Z]
-Eje-Z valor: ~1~
-
-[M_FAIL]
-¡FRACASO EN LA MISIÓN!
-
-[M_PASS]
-¡MISIÓN SUPERADA! $~1~
-
-[O_PASS]
-¡TRABAJO ESPORÁDICO SUPERADO!
-
-[O_FAIL]
-¡FRACASO EN TRABAJO ESPORÁDICO!
-
-[DEAD]
-¡LIQUIDADO!
-
-[BUSTED]
-¡REVENTADO!
-
-[S_PROMP]
-Cuando no estés en una misión puedes ~h~guardar tu partida aquí~w~, esto hará avanzar el tiempo seis horas.
-
-[NUMBER]
-~1~
-
-[SCORE]
-~1~$
-
-[LOADCAR]
-CARGANDO VEHÍCULO... (PULSA EL BOTÓN L1 PARA CANCELAR)
-
-[CARSOFF]
-Coches activados.
-
-[CARS_ON]
-Coches desactivados.
-
-[TEXTXYZ]
-Escribiendo coordenadas para archivar...
-
-[CHEATON]
-Modo trucos ACTIVADO
-
-[CHEATOF]
-Modo trucos DESACTIVADO
-
-[UZI_IN]
-¡La Uzi está ahora en el depósito de Municiones!
-
-[IMPORT1]
-Ve afuera y espera a tu vehículo.
-
-[PAGEB1]
-Pistola entregada en escondite
-
-[PAGEB2]
-Uzi entregada en escondite
-
-[PAGEB3]
-Armadura personal entregada en escondite
-
-[PAGEB4]
-Escopeta entregada en escondite
-
-[PAGEB5]
-granadas entregadas en escondite
-
-[PAGEB6]
-molotovs entregados en escondite
-
-[PAGEB7]
-AK47 entregada en escondite
-
-[PAGEB8]
-Rifle de francotirador entregado en escondite
-
-[PAGEB9]
-M16 entregado en escondite
-
-[PAGEB10]
-Lanzacohetes entregado en escondite
-
-[PAGEB11]
-Lanzallamas entregado en escondite
-
-[WANT_A]
-Sólo serás arrestado si tienes un ~h~grado de búsqueda y captura.
-
-[WANT_B]
-Tu ~h~grado de peligrosidad asignado a tu búsqueda y captura~w~ está representado por la hilera de estrellas en la parte superior derecha de la pantalla.
-
-[WANT_C]
-Ahora tienes un ~h~grado de búsqueda y captura~w~ de uno...
-
-[WANT_D]
-dos...
-
-[WANT_E]
-tres...
-
-[WANT_F]
-A medida que tu ~h~grado de búsqueda y captura ~w~ aumenta te verás acosado por formas más poderosa de cumplimiento de la ley.
-
-[WANT_G]
-Cuando seas ~h~'reventado'~w~ serás llevado a la comisaría de policía más cercana.
-
-[WANT_H]
-Los polis te requisarán todas tus armas y algo de tu dinero como soborno.
-
-[WANT_I]
-Habrás fracasado en cualquier misión que estuvieses llevando a cabo.
-
-[WANT_J]
-Encontrarás modos de reducir tu grado de búsqueda y captura cuanto más juegues.
-
-[WANT_K]
-Si estás en un coche, ~h~LOS LAVADEROS ~w~ limpiarán ~h~tu grado de búsqueda y captura.
-
-[HEAL_B]
-Cuando seas ~h~'liquidado'~w~ volverás al hospital más cercano.
-
-[HEAL_C]
-Perderás tus armas y los doctores te cobrarán algún dinero por remendarte.
-
-[HEAL_E]
-Encontrarás modos de curarte o de protegerte cuanto más juegues al juego.
-
-[DAM]
-DAÑO:
-
-[KILLS]
-MUERTES:
-
-[FARES]
-TARIFAS:
-
-[BULL]
-LINGOTES:
-
-[EVID]
-PRUEBAS:
-
-[HEALTH]
-ESTADO DEL COCHE:
-
-[COLLECT]
-RECOGIDOS:
-
-[BOMB]
-Conduce tu vehículo a la tienda de bombas para poner una ~h~bomba~w~. Coste - ~h~1.000$.
-
-[SAVE1]
-Atraviesa la puerta para ~h~guardar la partida ~w~. No puedes guardas durante una misión.
-
-[SAVE2]
-Cualquier vehículo dejado en este garaje será almacenado cuando la partida sea guardada.
-
-[AMMU]
-Ve dentro del depósito de Municiones para comprar un arma.
-
-[BRIDGE1]
-Cuando el Puente Callahan esté reparado podrás conducir hasta la isla Staunton.
-
-[TUNNEL]
-Cuando el túnel Porter esté abierto podrás conducir hasta la isla Staunton.
-
-[LUIGI]
-MISIONES DE LUIGI
-
-[TONI]
-MISIONES DE TONI
-
-[JOEY]
-MISIONES DE JOEY
-
-[FRANK]
-MISIONES DE SALVATORE
-
-[DIABLO]
-MISIONES DE DIABLO
-
-[ASUKA]
-MISIONES DE ASUKA
-
-[B_SITE]
-MISIONES SUBURBANAS DE ASUKA
-
-[KENJI]
-MISIONES DE KENJI
-
-[RAY]
-MISIONES DE RAY
-
-[LOVE]
-MISIONES DE LOVE
-
-[YARDIE]
-MISIONES DE YARDIE
-
-[HOOD]
-MISIONES DE HOOD
-
-[CITYZON]
-Liberty City
-
-[IND_ZON]
-Portland
-
-[PORT_W]
-Punta Callahan
-
-[PORT_S]
-Embarcadero Atlantic
-
-[PORT_E]
-Puerto de Portland
-
-[PORT_I]
-Trenton
-
-[S_VIEW]
-Mirador de Portland
-
-[CHINA]
-Chinatown
-
-[EASTBAY]
-Playa de Portland
-
-[LITTLEI]
-Saint Mark's
-
-[REDLIGH]
-Distrito Red Light
-
-[TOWERS]
-Altos de Hepburn
-
-[HARWOOD]
-Harwood
-
-[ROADBR1]
-Puerto de Callahan
-
-[ROADBR2]
-Puerto de Callahan
-
-[TUNNELP]
-Túnel Porter
-
-[BOMB1]
-Garaje de 8-Ball
-
-[COM_ZON]
-Isla Staunton
-
-[STADIUM]
-Aspatria
-
-[HOSPI_2]
-Rockford
-
-[UNIVERS]
-Campus de Liberty
-
-[CONSTRU]
-Fuerte Staunton
-
-[PARK]
-Belleville Park
-
-[COM_EAS]
-Newport
-
-[SHOPING]
-Punta de Bedford
-
-[YAKUSA]
-Torrington
-
-[SUB_ZON]
-Costa de Vale
-
-[AIRPORT]
-Aeropuerto internacional
-
-[PROJECT]
-Jardines de Wichita
-
-[SUB_IND]
-Cala de la Cúspide
-
-[SWANKS]
-Bosque de Cedros
-
-[BIG_DAM]
-Presa Cochrane
-
-[SUB_ZO2]
-Costa de Vale
-
-[SUB_ZO3]
-Costa de Vale
-
-[CAR_1]
-Ambulancia
-
-[CAR_2]
-Camión de bomberos
-
-[CAR_3]
-Policía
-
-[CAR_4]
-Oficial
-
-[CAR_5]
-Cuartel
-
-[CAR_6]
-Rinoceronte
-
-[CAR_7]
-Coche del FBI
-
-[CAR_8]
-Securicar
-
-[CAR_9]
-Moonbeam
-
-[CAR_10]
-Coach
-
-[CAR_11]
-Flatbed
-
-[CAR_12]
-Rápido
-
-[CAR_13]
-Trashmaster
-
-[CAR_14]
-Patriot
-
-[CAR_15]
-Sr. Whoopee
-
-[CAR_16]
-Mule
-
-[CAR_17]
-Yankee
-
-[CAR_18]
-Pony
-
-[CAR_19]
-Bobcat
-
-[CAR_20]
-Rumpo
-
-[CAR_21]
-Blista
-
-[CAR_22]
-Dodo
-
-[CAR_23]
-Bus
-
-[CAR_24]
-Sentinel
-
-[CAR_25]
-Cheetah
-
-[CAR_26]
-Banshee
-
-[CAR_27]
-Aguijón
-
-[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]
-Semental
-
-[CAR_37]
-Taxi
-
-[CAR_38]
-Cabbie
-
-[CAR_39]
-Buggy
-
-[LUIGIS]
-Casa de Luigi
-
-[GOAWAY]
-~g~¡Ya estás en una misión!
-
-[LUIGGO]
-~g~Luigi está entrevistando a algunas chicas nuevas -¡Vuelve más tarde!
-
-[JOEYGO]
-~g~Joey's está en la ciudad con Misty. ¡Pásate más tarde!
-
-[TONIGO]
-~g~Toni ha llevado a su mamá a la ópera -¡Llama en otro momento!
-
-[KEMUGO]
-~g~Maria y Kemuri están muy ocupadas en este momento - ¡Pásate más tarde!
-
-[KENJGO]
-~g~Kenji ha ido a encuentro con los Yakuza -¡Llama en otro momento!
-
-[RAYGO]
-~g~Ray tiene otros servicios por los que rondar -¡Inténtalo de nuevo más tarde!
-
-[LOVEGO]
-~g~Donald Love tiene otros asuntos que atender -¡Pide una cita más tarde!
-
-[KENSGO]
-~g~¡Kenji está ocupado! -¡Llama más tarde!
-
-[ASUSGO]
-~g~¡Asuka no está disponible en este momento!
-
-[HOODGO]
-~g~Los Capos no están disponibles en este momento!
-
-[WRONGT1]
-~g~Vuelve entre las 05:00 y las 21:00 para un trabajo
-
-[WRONGT2]
-~g~Vuelve entre las 06:00 y las 14:00 para un trabajo
-
-[WRONGT3]
-~g~Vuelve entre las 15:00 y las 00:00 para un trabajo
-
-[GUN_1A]
-Utiliza el ~h~botón ~k~~PED_CYCLE_WEAPON_RIGHT~ ~w~y el ~h~botón ~k~~PED_CYCLE_WEAPON_LEFT~ ~w~para pasar por tus armas.
-
-[GUN_2A]
-Mantén pulsado el ~h~botón ~k~~PED_LOCK_TARGET~ ~w~para ~h~apuntar de modo automático ~w~, ¡pulsa el ~h~ botón ~k~~PED_FIREWEAPON~ ~w~para ~h~disparar! Intenta disparar a los objetivos...
-
-[GUN_2C]
-Mantén pulsado el ~h~botón ~k~~PED_LOCK_TARGET~ ~w~para ~h~ apuntar de modo automático ~w~, ¡pulsa el~h~ botón ~k~~PED_FIREWEAPON~ ~w~para ~h~disparar! Intenta disparar a los objetivos...
-
-[GUN_2D]
-Mantén pulsado el ~h~ botón ~k~~PED_LOCK_TARGET~ ~w~ para ~h~ apuntar de modo automático,~w~ ¡pulsa el~h~ botón ~k~~PED_FIREWEAPON~ ~w~para ~h~disparar! Intenta disparar a los objetivos...
-
-[GUN_3A]
-Mientras que mantienes pulsado el ~h~ botón ~k~~PED_LOCK_TARGET~,~w~ pulsa el ~h~botón ~k~~PED_CYCLE_TARGET_LEFT~~w~ o el ~h~botón ~k~~PED_CYCLE_TARGET_RIGHT~ para cambiar de objetivo.
-
-[GUN_3B]
-Mientras que mantienes pulsado el ~h~ botón ~k~~PED_LOCK_TARGET~,~w~ pulsa el ~h~botón ~k~~PED_CYCLE_TARGET_LEFT~~w~ o el ~h~botón ~k~~PED_CYCLE_TARGET_RIGHT~ para cambiar de objetivo.
-
-[GUN_4A]
-Mientras que mantienes pulsado el ~h~ botón ~k~~PED_LOCK_TARGET~ ~w~ puedes caminar o correr mientras mantienes fijado un objetivo.
-
-[GUN_4B]
-Mientras que mantienes pulsado el ~h~ botón ~k~~PED_LOCK_TARGET~ ~w~ puedes caminar o correr mientras mantienes fijado un objetivo.
-
-[GUN_5]
-Puedes practicar el apuntar y disparar en estos objetivos de papel. Cuando hayas terminado retoma la misión.
-
-[TAXI1]
-~g~ Busca la tarifa.
-
-[FARE1]
-~g~Destino ~w~'Club Sex Kitten Miau' ~g~en Redlight.
-
-[FARE2]
-~g~Destino ~w~'Supa Save' ~g~en el Mirador de Portland.
-
-[FARE3]
-~g~Destino ~w~la 'sala de la vieja escuela' ~g~en Chinatown.
-
-[FARE4]
-~g~Destino ~w~el 'Café Greasy Joe' ~g~en Punta Callahan.
-
-[FARE5]
-~g~Destino ~w~'depósito de Municiones' ~g~en Redlight.
-
-[FARE6]
-~g~Destino ~w~'Autos de crédito fácil' ~g~en Saint Mark.
-
-[FARE7]
-~g~Destino ~w~'Bar de topless de Woody' ~g~en Redlight.
-
-[FARE8]
-~g~Destino ~w~'Restaurante Marcos' ~g~en Saint Mark.
-
-[FARE9]
-~g~Destino ~w~'garaje de importación y exportación' ~g~en Portland Harbor.
-
-[FARE10]
-~g~Destino ~w~'Punk Noodles' ~g~en Chinatown.
-
-[FARE12]
-~g~Destino ~w~'Estadio de Fútbol' ~g~en Aspatria.
-
-[FARE13]
-~g~Destino ~w~'La iglesia' ~g~en Punta de Bedford
-
-[FARE14]
-~g~Destino ~w~'El Casino' ~g~en Torrington
-
-[FARE15]
-~g~Destino ~w~'Universidad Liberty' ~g~en el Campus de Liberty
-
-[FARE16]
-~g~Destino ~w~'Centro comercial' ~g~en la zona de Belleville Park
-
-[FARE17]
-~g~Destino ~w~'Muso' ~g~en Newport
-
-[FARE18]
-~g~Destino ~w~'Edificio de AmCo' ~g~en Torrington
-
-[FARE19]
-~g~Destino ~w~'Bolt Burgers' ~g~en Punta de Bedford
-
-[FARE20]
-~g~Destino ~w~'El parque' ~g~en Belleville
-
-[FARE21]
-~g~Destino ~w~'Aeropuerto internacional de Francis'
-
-[FARE22]
-~g~Destino ~w~'el dique de Cochrane'
-
-[FARE24]
-~g~Destino ~w~'El hospital' ~g~en la Cúspide de la Cala
-
-[FARE25]
-~g~Destino ~w~'El parque' ~g~en la Costa de Vale
-
-[FARE26]
-~g~Destino ~w~'Torres del Noroeste' ~g~en los Jardines de Wichita
-
-[NEW_TAX]
-¡MÁS GRANDE! ¡MÁS RÁPIDO! ¡MÁS DURO! Nuevos taxis Borgnine abre su negocio en Harwood. ¡Llame hoy al 555-BORGNINE!
-
-[TSCORE2]
-$~1~
-
-[IN_ROW]
-~1~ ¡Prima EN UNA FILA! $~1~
-
-[TTUTOR]
-Pulsa el ~h~botón ~k~~TOGGLE_SUBMISSIONS~~w~ para activar o desactivar las misiones de taxi.
-
-[TTUTOR2]
-Pulsa el ~h~botón ~k~~TOGGLE_SUBMISSIONS~~w~ para activar o desactivar las misiones de taxi.
-
-[ATUTOR2]
-~g~Conduce CON CUIDADO a los pacientes hasta el hospital. Cada golpe reduce sus posibilidades de supervivencia.
-
-[A_TIME]
-+~1~ segundos
-
-[A_FULL]
-~r~¡¡Ambulancia completa!!
-
-[A_RANGE]
-~g~La radio de la ambulancia está fuera de alcance, ¡acércate hasta un hospital!
-
-[FTUTOR]
-Pulsa el ~h~botón ~k~~TOGGLE_SUBMISSIONS~~w~ para activar o desactivar las misiones del camión de bomberos.
-
-[FTUTOR2]
-Pulsa el ~h~botón ~k~~TOGGLE_SUBMISSIONS~~w~ para activar o desactivar las misiones del coche de bomberos.
-
-[F_PASS1]
-¡Fuego apagado!
-
-[F_RANGE]
-~g~La radio del camión de bomberos está fuera de cobertura, ¡acércate hasta una estación de bomberos!
-
-[C_BREIF]
-~g~Sospechoso visto por última vez en la zona ~a~.
-
-[C_RANGE]
-~g~La radio de la policía está fuera de alcance, ¡acércate a una comisaría!
-
-[DODO_FT]
-¡Huiste por ~1~ segundos!
-
-[EBAL_A]
-Conozco un lugar al borde del distrito Red Light donde podemos escondernos,
-
-[EBAL_A1]
-pero mis manos están hechas un desastre de modo que será mejor que conduzcas tú, hermano.
-
-[EBAL_1]
-Pulsa el ~h~ botón ~k~~VEHICLE_ENTER_EXIT~~w~ para ~h~entrar ~w~o ~h~salir~w~ de un vehículo.
-
-[EBAL_1B]
-Pulsa el ~h~ botón ~k~~VEHICLE_ENTER_EXIT~~w~ para ~h~entrar ~w~o ~h~salir~w~ de un vehículo.
-
-[EBAL_2]
-~g~¡Vuelve al coche!
-
-[EBAL_3]
-Este es el ~h~radar~w~. Utilízalo para surcar la ciudad, ¡sigue el ~h~pitido~w~ en el ~h~radar~w~ para encontrar el escondite!
-
-[EBAL_D]
-Conozco un tipo, tiene contactos, su nombre es Luigi.
-
-[EBAL_D1]
-Él y yo nos conocemos de antes de modo que probablemente podríamos conseguirte algún trabajo. Venga, vamos hacia allí.
-
-[EBAL_E]
-Venga, vamos a pasarnos por allí y te presentaré.
-
-[EBAL_I]
-El jefe saldrá para veros dentro de poco...
-
-[EBAL_J]
-8-Ball tiene un asunto arriba.
-
-[EBAL_K]
-Quizás puedes hacerme un favor
-
-[EBAL_L]
-Una de mis chicas necesita que la lleven de modo que consigue un coche y recoge a Misty en la clínica. Luego tráela de vuelta aquí.
-
-[EBAL_N]
-¡Así que mantén tus manos sobre el volante
-
-[EBAL_4]
-~r~¡8-Ball está muerto!
-
-[EBAL_5]
-~g~¡Consigue un vehículo!
-
-[EBAL_6]
-~g~¡Recoge a Misty!
-
-[LM1]
-'LAS CHICAS DE LUIGI'
-
-[LM2]
-'NO PEGUES A MI ZORRA'
-
-[LM3]
-'LLEVA A MISTY POR MÍ'
-
-[LM5]
-'EL BAILE DE LA POLICÍA'
-
-[LM1_2]
-~g~Lleva a Misty al Club de Luigi.
-
-[LM1_3]
-~g~Toca el claxon para conseguir que la chica entre en el coche.
-
-[LM1_6]
-~g~¡Vuelve al coche!
-
-[LM1_7]
-Detén el vehículo junto a Misty y déjala subir.
-
-[LM1_8]
-Puedes ir y ver a Luigi en busca de más trabajo o ver que se cuece en Liberty City.
-
-[LM2_A]
-Hay un nuevo tipo importante en la ciudad que responde al nombre de AZOTE.
-
-[LM2_E]
-Algún tipo listo ha estado mostrando esta basura a mis chicas abajo en el puerto de Portland.
-
-[LM2_B]
-¡Ve y muéstrale un bate de béisbol en su cara!
-
-[LM2_G]
-¡Quiero una compensación por este insulto!
-
-[LM2_1]
-~g~Coge su coche y haz que lo vuelvan a rociar.
-
-[LM2_2A]
-¡Utiliza el ~h~ botón ~k~~PED_FIREWEAPON~~w~ para ~h~dar un puñetazo ~w~y ~h~dar una patada~w~ o ~h~balancear ~w~el bate de béisbol!
-
-[LM2_2C]
-¡Utiliza el ~h~ botón ~k~~PED_FIREWEAPON~~w~ para ~h~dar un puñetazo ~w~y ~h~dar una patada~w~ o ~h~balancear ~w~el bate de béisbol ~w~!
-
-[LM2_2D]
-¡Utiliza el ~h~ botón ~k~~PED_FIREWEAPON~~w~ para ~h~dar un puñetazo ~w~y ~h~dar una patada~w~ o ~h~balancear ~w~el bate ~w~!
-
-[LM2_3]
-~g~¡Esconde el coche en el garaje de Luigi!
-
-[LM2_4]
-~g~¡Vuelve a rociar el coche!
-
-[LM3_A]
-Hey, tengo que hablar contigo... De acuerdo Mick, hablaré contigo más tarde.
-
-[LM3_B]
-¿Cómo te vá, chico?
-
-[LM3_C]
-El hijo del Don, Joey Leone, quiere un poco de acción de su chica de siempre, Misty.
-
-[LM3_D]
-Ve a recogerla en los Altos de Hepburn...
-
-[LM3_E]
-pero cuidado, ésa es la turba del Diablo.
-
-[LM3_F]
-Luego llévala hasta el garaje de él en Trenton y hazlo rápido,
-
-[LM3_H]
-¡así que mantén la vista sobre la carretera y lejos de Misty!
-
-[LM3_1D]
-Pulsa el ~h~ botón L3 ~w~ para tocar el ~h~claxon~w~ y hacer saber a Misty que estás aquí.
-
-[LM3_2]
-~g~Lleva a Misty a Joey's.
-
-[LM3_4]
-~g~¡Ve a recoger a Misty!
-
-[LM3_5]
-Ahora trabajas de forma regular para Luigi, ¿no? Ya era hora de que tuviese un conductor en el que pudiésemos confiar!
-
-[LM3_7]
-Estaré contigo en un minuto, bujía.
-
-[LM3_10]
-~g~¡Coge un vehículo!
-
-[LM4_B]
-Ve y ocúpate de las cosas por mí.
-
-[LM4_C]
-Si necesitas una pieza ve a la puerta trasera del depósito de Municiones en el lado contrario al metro.
-
-[LM5_A]
-El baile de la policía se está celebrando en la sala de la vieja escuela cerca del puente
-
-[LM5_B]
-y parece que están buscando un poco de acción a la 'antigua usanza'.
-
-[LM5_C]
-Ahora tengo chicas por toda la ciudad, pateando las calles.
-
-[LM5_D]
-Llévalas al baile, harán bulto.
-
-[LM5_1]
-~g~Estás embutiendo a esas damas demasiado, ¡les van a salir moratones! ~g~Primero deja a esas chicas, luego vuelve a por más.
-
-[LM5_2]
-~r~¡Una de las chicas de Luigi es un saco de grasa!
-
-[LM5_3]
-~g~¡Necesitas un coche!
-
-[LM5_4]
-~g~Recoge a las chicas que trabajan en St. Marks.
-
-[LM5_5]
-~g~Lleva a las chicas al Baile de la Policía!
-
-[LM5_8]
-~g~Chicas trabajando en el Baile: ~1~
-
-[JM2]
-'DESPEDIDA A LEE CHONG 'EL GORDO''
-
-[JM4]
-'EL CHOFER DE CIPRIANI'
-
-[JM5]
-'LA MOFETA MUERTA EN EL MALETERO'
-
-[JM1_1]
-~g~Lleva el coche de Forelli hasta el garaje de 8-Ball al Norte de aquí, detrás de 'Autos de crédito fácil'.
-
-[JM1_2]
-~g~Vuelve a aparcar el coche en el restaurante de Marco.
-
-[JM1_3]
-~g~¡Activa la bomba del coche y luego sal de ahí!
-
-[JM1_4]
-~g~¡Estás destrozando el vehículo! ¡Repáralo!
-
-[JM1_5]
-~g~¡La bomba del coche no está colocada!
-
-[JM1_6]
-~g~Vuelve a colocar el coche en la posición correcta.
-
-[JM1_8A]
-~y~¡Hey, es mi gran hombre!
-
-[JM1_8B]
-~y~La tienda de bombas está automatizada. Simplemente entra conduciendo, detén tu coche y la tienda hará el resto.
-
-[JM1_8C]
-~y~Ten, tu primer coche puede salirte gratis, pero después de eso te costará dinero.
-
-[JM2_A]
-Lee Chong 'el Gordo' está dando palizas para una nueva banda de Colombia... o Colorado... o algo así....
-
-[JM2_B]
-La verdad es que no estoy seguro. De todas formas, quién necesita detalles.
-
-[JM2_D]
-Esa rata a vendido su último refrito.
-
-[JM2_E]
-¡Quiero que le liquides!
-
-[JM2_G]
-Equípate con una nueve, sabes dónde está, ¿verdad?
-
-[JM2_H]
-Bueno, recuerda, vigila tu espalda en China Town, es territorio de las Tríadas.
-
-[JM3_A]
-De acuerdo vamos a por la furgoneta de la paga.
-
-[JM3_B]
-Sale de China Town todos los días.
-
-[JM3_C]
-Las balas ni siquiera abollarán el blindaje de la armadura de la furgoneta, de modo que coge un coche y échala de la carretera.
-
-[JM3_D]
-Ahora golpéala fuerte y los imbéciles de los guardias de seguridad se achicarán.
-
-[JM3_E]
-Luego llévala al almacén en los muelles y mis chicos se encargarán desde ahí.
-
-[JM3_F]
-Bueno, no estarán haciendo sus rondas todo el día, de modo que no pierdas el tiempo.
-
-[JM3_1]
-~g~Lleva la furgoneta al almacén.
-
-[JM3_2]
-~g~Carga contra la furgoneta hasta que su daño esté por debajo del 70 por ciento.
-
-[JM4_B]
-¡Oh! ¡Aquí está el tipo del que te hablaba!
-
-[JM4_C]
-De acuerdo, escucha. Este tío no es italiano y no es un mecánico, pero puede arreglar las cosas.
-
-[JM4_D]
-Este es el Capo, Toni Cipriani.
-
-[JM4_E]
-Sí, soy Toni Cipriani
-
-[JM4_F]
-Bien, llévale al restaurante de Mamá en St Marks.
-
-[JM4_G]
-Ahora escúchame, estoy planeando un trabajo que necesita un buen conductor de modo que pásate por aquí más tarde, ¿de acuerdo?
-
-[JM4_2]
-¡Espera aquí! Mantén el motor en marcha. Esto no es una visita social.
-
-[JM4_3]
-¡Es una emboscada de las Tríadas! ¡Sácanos de aquí, chico!
-
-[JM4_4]
-Las Tríadas creen que pueden meterse conmigo, las Tríadas, ¡CONMIGO!
-
-[JM4_6]
-¡Hey vigila el coche! Dije que nada de numeritos.
-
-[JM4_7]
-~g~Lleva a Toni al restaurante de su mamá.
-
-[JM4_8]
-~r~¡Toni ha sido liquidado!
-
-[JM5_A]
-¡Cojonudo! Estupendo.
-
-[JM5_B]
-De acuerdo, ¡justo el tipo con el que necesito hablar!
-
-[JM5_D]
-Uno de los Forellis pensó que era un tipo listo, de modo que se llevó lo que estaba buscando.
-
-[JM5_E]
-Lleva el cuerpo a la trituradora en Harwood, ¿de acuerdo?
-
-[JM5_1]
-~g~¡Llévalo a la trituradora!
-
-[JM5_2]
-~g~¡Son los hermanos Forelli!
-
-[JM6_A]
-Debe ser todo un viajecito, ¿eh?
-
-[JM6_B]
-De acuerdo, escucha. Lleva un coche hasta la casa franca en St. Marks y recoge a algunos de los míos.
-
-[JM6_C]
-Están atracando un banco y necesitan un conductor.
-
-[JM6_D]
-Di mi palabra de que eras el hombre, de modo que no fastidies esto.
-
-[JM6_E]
-Llévales al banco antes de las cinco en punto, ni un minuto después.
-
-[JM6_2]
-Mantén el motor en marcha, entraremos y saldremos enseguida.
-
-[JM6_3]
-¡¡¡Sácanos de aquí!!
-
-[JM6_4]
-¡¡¡Líbrate de los polis y llévanos a la casa franca!!
-
-[JM6_6]
-~g~¡Ve y consigue un vehículo menos llamativo!
-
-[JM6_7]
-~g~¡Necesitas a los 3 para robar el banco!
-
-[TM1]
-'SACANDO LA COLADA'
-
-[TM2]
-'EL ENCARGO'
-
-[TM3]
-'SALVATORE HA CONVOCADO UNA REUNIÓN'
-
-[TM4]
-'TRÍADAS Y TRIBULACIONES'
-
-[TM5]
-'EL PEZ GLOBO'
-
-[TONI_P]
-¡Tengo un trabajo urgente para ti! -Toni
-
-[TM1_A]
-~w~Toma asiento, chico, siéntate.
-
-[TM1_B]
-~w~Así que la lavandería no pagará protección, ¿eh?
-
-[TM1_C]
-~w~¿Las Tríadas creen que pueden meterse conmigo?
-
-[TM1_D]
-~w~Vamos a enseñar a esos aspirantes a tipos duros lo que significa ser un tipo duro.
-
-[TM1_E]
-~w~Sí, enséñales algo de respeto. Ningún hijo mío recibe de nadie de las Tríadas.
-
-[TM1_F]
-~w~Tu padre, Dios acoja su alma, no aguantó ninguna mierda de las Tríadas en Sicilia.
-
-[TM1_G]
-~w~Lo siento Ma. Sí Ma.
-
-[TM1_H]
-~w~Quiero que destruyas sus furgonetas de lavandería
-
-[TM1_I]
-~w~y destroces a cualquiera de las Tríadas que se interponga en tu camino.
-
-[TM1_J]
-~w~8-Ball puede suministrarte lo que necesites.
-
-[TM2_A]
-~w~TONI ha salido a machacar a la gente o a intentarlo.
-
-[TM2_AA]
-Nunca será tan duro como su padre, te dejó una nota en la mesa.
-
-[TM2_B]
-~w~La lavandería ha aceptado pagar. ¡Lo hiciste realmente bien, chico!
-
-[TM2_C]
-~w~Ve a recoger el dinero y tráelo de vuelta aquí. Cuidado con las Tríadas.
-
-[TM2_D]
-~w~Pueden estar metiéndote un petardo por el culo, y no mancharse.
-
-[TM2_E]
-~w~¡Nadie, quiero decir nadie, se mete con TONI CIPRIANI!
-
-[TM2_1]
-~g~¡¡Devuélvele el dinero a Toni!!
-
-[TM2_2]
-~g~¡Los dejaste tiesos a todos!
-
-[TM3_MA]
-~w~¡No sé dónde está!
-
-[TM3_MB]
-~w~Te juro que ese chico mío a veces no se conoce a sí mismo.
-
-[TM3_MC]
-~w~Ahora bien, su padre era diferente. Siempre en la cumbre, al cargo de todo, valiente...
-
-[TM3_A]
-~w~Don Salvatore ha convocado una reunión.
-
-[TM3_B]
-~w~Necesito que recojas la limusina y a su chico, Joey, del garaje.
-
-[TM3_C]
-~w~Luego recoge a Luigi en su club, vuelve aquí y recógeme a mí,
-
-[TM3_D]
-~w~luego todos iremos juntos a la casa del jefe.
-
-[TM3_E]
-~w~Esos Tríadas, no saben cuándo parar.
-
-[TM3_F]
-~w~Quieren una guerra. Tendrán una guerra.
-
-[TM3_G]
-~w~Ahora en marcha.
-
-[TM3_1]
-~g~Coge el Stretch de Joey's.
-
-[TM3_2]
-~g~Ahora ve a recoger a Luigi.
-
-[TM3_3]
-~g~Ahora ve a recoger a Toni.
-
-[TM3_4]
-~g~Lleva a los mafiosos hasta la casa de Salvatore.
-
-[TM3_5]
-~y~¡¡Es una emboscada de las Tríadas!!
-
-[TM4_B]
-~w~¡Estamos en GUERRA! Las Tríadas tienen una fábrica de pescado como fachada.
-
-[TM4_C]
-~w~La mayor parte de sus negocios se pierde en el mercado de pescado de Chinatown.
-
-[TM4_D]
-~w~Esa lavandería todavía nos debe por la protección.
-
-[TM4_E]
-~w~Consideran que las Tríadas les están protegiendo ahora, así que digo que les demos su merecido castigo.
-
-[TM4_F]
-~w~¡Toma a esos chicos y golpea a los Señores de la Guerra de las Tríadas!
-
-[TM4_G]
-~w~Demonios, si tienes la oportunidad, revienta también a algunos de sus soldados.
-
-[TM4_GAT]
-~g~Necesitas un 'Camión para pescado Tríada' para entrar.
-
-[TM5_A]
-TEXT NO LONGER REQUIRED
-
-[TM5_B]
-~w~Ya he tenido bastante de esta mierda.
-
-[TM5_C]
-~w~¡Vamos a acabar con las Tríadas en Liberty de una vez por todas!
-
-[TM5_D]
-8-Ball ha instalado una bomba en un camión de la basura.
-
-[TM5_E]
-~w~Tiene un temporizador, así que si la lías no quedarán evidencias. Vete y toma ese camión de basura.
-
-[TM5_F]
-~w~¡Cuidado, 8-Ball dice que es muy sensible y que cualquier movimiento puede hacerlo estallar!
-
-[TM5_G]
-~w~Su fábrica de pescado abrirá sus puertas a un camión de basura, así que puedes conducirlo allí directamente.
-
-[TM5_H]
-~w~Aparca entre las latas de gas y ¡sal pitando de ese infierno!
-
-[TM5_I]
-~w~Quiero que llueva trozos de caballa.
-
-[TM5_J]
-~w~Esto es realmente bíblico, nada de bajo presupuesto.
-
-[FM2]
-CORTANDO LA HIERBA
-
-[FM4]
-ÚLTIMOS DESEOS
-
-[FM1_A]
-~w~Yo y los chicos queremos hablar de negocios
-
-[FM1_B]
-~w~Así que esta tarde vas a vigilar a mi chica.
-
-[FM1_C]
-~w~¡OYE, MARÍA! ¡MUEVE ESE CULO!
-
-[FM1_D]
-~w~El grandísimo estúpido hace esto todo el tiempo.
-
-[FM1_E]
-~w~Y aquí está ella ¡La primera y única Reina de Saba!
-
-[FM1_F]
-~w~¿Qué hacíais ahí arriba?
-
-[FM1_G]
-~w~Fuera lo que fuera, seguro que me cuesta dinero.
-
-[FM1_H]
-~w~Bueno, no pensarás que me voy a quedar a conversar ¿no?
-
-[FM1_I]
-~w~Métete en ese coche y cierra la bocaza.
-
-[FM1_J]
-~w~Llévate la limusina, pero devuélvela de una pieza ¿me has oído?
-
-[FM1_K]
-~w~Y vigílala, puede causarte problemas.
-
-[FM1_L]
-~w~¡Sí, sí, sí! Estoy segura de que tu nuevo perrito faldero tiene todo previsto.
-
-[FM1_M]
-~w~¿Pues no es fuerte y grande?
-
-[FM1_N]
-~w~¡Eh, Fido, vayamos a visitar a Chico y hacer una fiestecita!
-
-[FM1_P]
-~g~Ese de ahí es Chico, párate cerca.
-
-[FM1_S]
-~w~Ahí vas, señora.
-
-[FM1_TT]
-~w~¡ES UNA REDADA POLICIAL!
-
-[FM1_1]
-~g~¡Vuelve al Stretch!
-
-[FM1_2]
-~g~¡Entra en el Stretch!
-
-[FM1_3]
-~r~Si abandonas a María y Salvatore te zurrará, vuelve y recógela.
-
-[FM1_4]
-~g~¡Te has deshecho de la mujer del Don! ¡Vuelve al almacén y espera a María!
-
-[FM1_5]
-~g~¡Lleva a María sana y salva con Salvatore!
-
-[FM1_6]
-~g~¡Chico no estará allí para siempre, lleva a María al muelle!
-
-[FM1_7]
-~r~¡María está muerta! A Salvatore no le va a gustar nada...
-
-[FM1_8]
-~r~¡Te cargaste al proveedor de Maria!
-
-[FM2_J]
-Déjanos solos un minuto.
-
-[FM2_A]
-El Cartel colombiano está haciendo SPANK en algún lugar de Liberty.
-
-[FM2_K]
-pero no sabemos dónde y parece como si supieran todo lo que hacemos antes de que lo hagamos.
-
-[FM2_L]
-Hay un tipo llamado Curly Bob que trabaja en el bar de Luigi.
-
-[FM2_M]
-Ha estado malgastando más dinero del que gana.
-
-[FM2_N]
-Normalmente toma un taxi de vuelta a casa tras el trabajo. Así que síguele.
-
-[FM2_O]
-Y si nos está traicionando... mátalo.
-
-[FM2_F]
-Aquí viene nuestro amiguito. El señor Bocazas en persona.
-
-[FM2_G]
-¿Te han seguido? Sabes que lo que pasa aquí es nuestro pequeño secreto.
-
-[FM2_H]
-No... no. No me han seguido. ¿Tienes mi mercancía?
-
-[FM2_I]
-Aquí está tu SPANK, soplón, ahora habla.
-
-[FM2_P]
-OK, así que los de Leone libran una guerra en dos frentes.
-
-[FM2_Q]
-Tienen una guerra territorial con las Tríadas y no hay signos de que ninguno se vaya a rendir.
-
-[FM2_R]
-Mientras tanto Joey Leone se ha hecho mala sangre con los Forellis.
-
-[FM2_S]
-Cada día que pasa pierden hombres e influencia en la ciudad.
-
-[FM2_T]
-Salvatore es cada vez más peligroso y paranoico. Sospecha de todos y de todo.
-
-[FM2_U]
-Con lealtades como la tuya, por qué tendría que preocuparse.
-
-[FM2_1]
-~g~¡Ahí está Curly Bob!
-
-[FM2_2]
-~g~¡Curly ha salido del club, síguele!
-
-[FM2_5]
-~g~Llévale al Puerto Portland.
-
-[FM2_6]
-~r~¡Curly no entrará en un taxi accidentado!
-
-[FM2_7]
-~r~¡Curly se ha esfumado! ¡Ya no hay encuentro!
-
-[FM2_8]
-~g~¡Golpea a Curly Bob!
-
-[FM2_9]
-~r~¡Curly Bob está muerto!
-
-[FM2_10]
-~r~¡Curly se largó!
-
-[FM2_11]
-~g~Aparca frente al club de Luigi, Curly Bob saldrá pronto.
-
-[FM2_12]
-~r~¡Os ha dado esquinazo!
-
-[FM3_A]
-~w~Tenemos que terminar con esos bastardos colombianos,
-
-[FM3_B]
-~w~pero mientras estamos en guerra con las Tríadas no somos lo bastante fuertes.
-
-[FM3_C]
-~w~El Cartel tiene fondos ilimitados procedentes de esa mierda de SPANK.
-
-[FM3_D]
-~w~si les atacamos abiertamente, fregarán el suelo con nosotros.
-
-[FM3_E]
-~w~Deben estar haciendo SPANK en ese barco grande al que os llevó Curly.
-
-[FM3_F]
-~w~Así que tenemos que usar las cabezas, o mejor, una cabeza. La tuya.
-
-[FM3_G]
-~w~Te estoy pidiendo que destruyas esa fábrica de SPANK como un favor personal hacia mí, Salvatore Leone.
-
-[FM3_H]
-~w~Si haces esto por mí, serás todo un hombre, cualquier cosa que quieras.
-
-[FM3_I]
-~w~Ve a ver a 8-Ball, necesitas su experiencia para volar ese barco.
-
-[FM3_8A]
-~w~¡Eh, hombre! Salvatore ha llamado,
-
-[FM3_8B]
-~w~pero un trabajo como este necesita muchos fuegos artificiales.
-
-[FM3_8D]
-~w~pero sabes que conmigo consigues mucho a cambio de tu pasta.
-
-[FM3_8E]
-~w~De acuerdo, ¡vamos a hacerlo!
-
-[FM3_8F]
-~w~Puedo hacer detonar este pequeño, pero aún no puedo usar una pieza con estas manos.
-
-[FM3_8G]
-~w~¡Toma, este rifle te ayudará a reventar algunas cabezas!
-
-[FM3_4]
-~g~¡Para el coche y deja que 8-Ball salga!
-
-[FM3_7]
-~r~¡¡8-Ball se ha helado!
-
-[FM3_8]
-~r~¡Los guardias han sido alertados!
-
-[FM4_A]
-~w~Es mi limpiador favorito.
-
-[FM4_B]
-~w~Estoy orgulloso de ti, hijo, sacudiste la mierda de esas pelotas grasientas.
-
-[FM4_C]
-~w~Tengo un trabajito más para ti antes de que podamos celebrarlo.
-
-[FM4_D]
-~w~Hay un coche a la vuelta del edificio del club de Luigi.
-
-[FM4_E]
-~w~El interior está pringado de sesos.
-
-[FM4_F]
-~w~Tuvimos que ayudar a un tipo a que se decidiera, y fue un poco -er- sucio.
-
-[FM4_H]
-~w~Llévalo a la trituradora antes de que los polis lo encuentren.
-
-[AM3]
-'SANGRA PAPARAZZI'
-
-[AM4]
-'DÍA DE PAGA PARA RAY'
-
-[AM5]
-'TANNER DOS CARAS'
-
-[AM1_A]
-Tenemos que aclarar ciertos temas antes de seguir con cualquier clase de relación,
-
-[AM1_B]
-de negocios o de lo que sea. Pongamos las cartas sobre la mesa.
-
-[AM1_C]
-Yo soy Yakuza y sé que trabajas para la familia de Salvatore Leone.
-
-[AM1_D]
-Puedo darte trabajo en nuestra organización,
-
-[AM1_E]
-Pero primero debes demostrarme que has cortado todos tus lazos con la Mafia.
-
-[AM1_G]
-Asegúrate de que no llega vivo a su club.
-
-[AM1_H]
-Mientras tanto María y yo nos pondremos al día por los viejos tiempos.
-
-[AM1_I]
-Oh.. Asuka, tienes masajista.
-
-[AM1_J]
-Eso no es un masajista.
-
-[AM1_1]
-~g~¡Salvatore está saliendo del club de Luigi!
-
-[AM1_2]
-~r~¡Te han descubierto!
-
-[AM1_3]
-~r~¡Has perdido a Salvatore!
-
-[AM1_4]
-~r~Buen intento, ¡has asustado al objetivo! ¿Y te llamas a ti mismo pistolero?
-
-[AM1_5]
-~g~Ve al Distrito de la Luz Roja y espera a que Salvatore salga del club.
-
-[AM1_7]
-~r~Salvatore está en casa, sano y salvo, tomándose un cóctel. ¡Nadie te va a llamar Chacal!
-
-[AM1_8]
-~g~Salvatore saldrá del club del Luigi aproximadamente a las ~1~:~1~
-
-[AM2_4]
-~g~¡Te han visto venir como a un elefante al galope!
-
-[AM3_A]
-Un periodista ha estado metiendo sus narices por aquí.
-
-[AM3_B]
-María y yo nos hemos tomado unas pequeñas vacaciones juntos hasta que puedas librarte de ese mirón pervertido.
-
-[AM4_A]
-¡Es mi guapo manitas!
-
-[AM4_B]
-María está muy ocupada en este momento, pero le diré que has llamado.
-
-[AM4_C]
-¿Quién es? ¿Asuka? Ya sé que he sido una niña traviesa, ¡pero es que necesitaba mear! ¿Vale?
-
-[AM4_D]
-Es el momento de que te encuentres con nuestro hombre dentro del DPL.
-
-[AM4_E]
-Aquí está su pago por el último trabajito que hizo para nosotros.
-
-[AM4_F]
-El es comprensiblemente cauteloso.
-
-[AM4_G]
-Ve a la cabina en Torrington tan rápido como puedas y espera sus instrucciones.
-
-[AM5_A]
-María y yo hemos ido de compras.
-
-[AM5_B]
-¡Nuestra fuente en la policía nos ha informado de que uno de nuestros conductores es un extrañamente animado poli camuflado!
-
-[AM5_C]
-El es un inútil fuera de su coche así que lo hemos marcado con un seguidor.
-
-[AM5_D]
-¡Hazle sangrar!
-
-[AM5_1]
-¡Tanner está sobre ti!
-
-[AS1]
-'CEBO'
-
-[AS2]
-'MARCHANDO UN EXPRESO'
-
-[AS4]
-'RESCATE'
-
-[AS1_A]
-~w~Parece que Miguel piensa que le maltrato
-
-[AS1_B]
-~w~Pero él ha revelado cuánto teme Catalina tu búsqueda de revancha.
-
-[AS2_A]
-~w~Infravaloramos los planes de Catalina para el SPANK
-
-[AS2_B]
-~w~Va mucho más allá de los Yardies vendiéndolo en las esquinas.
-
-[AS2_D]
-~w~Han vendido SPANK en puestos callejeros.
-
-[AS2_1]
-¡¡Todos los puestos de expreso en Portland destruidos!!
-
-[AS2_2]
-~g~¡¡Todos los puestos de expreso en Staunton Island destruidos!!
-
-[AS2_3]
-~g~¡¡Todos los puestos de expreso en Shoreside Vale destruidos!!
-
-[AS2_4]
-~r~¡¡El Cartel ha avisado a sus camellos!!
-
-[AS2_5]
-~g~¡Todavía hay puestos de expreso en Shoreside Vale y en Staunto Island!
-
-[AS2_6]
-~g~¡Todavía hay puestos de expreso en Shoreside Vale!
-
-[AS2_7]
-~g~¡Todavía hay puestos de expreso en Staunton Island!
-
-[AS2_8]
-~g~¡Todavía hay puestos de expreso en Portland!
-
-[AS2_9]
-~g~¡Todavía hay puestos de expreso en Portland y en Shoreside Vale!
-
-[AS2_10]
-~g~¡Todavía hay puestos de expreso en Portland y en Staunton Island!
-
-[AS2_12]
-~g~¡Cruza los distritos de Liberty para buscar puestos de ~b~Marchando un Expreso!
-
-[AS3_A]
-~W~¿Lo apretamos un poco más o esperamos a que se vuelva negro y caiga?
-
-[AS3_B]
-~w~Dale un pinchazo rápido...
-
-[AS3_D]
-~w~¡Mi manitas!
-
-[AS3_E]
-~w~Me aburría, así que vine a hacer compañía a Asuka.
-
-[AS3_1]
-~g~Busca un ~r~bote~g~ y ve al ~b~boya del aeropuerto!
-
-[AS3_3]
-~g~Espera a que el ~y~avión~g~ comience a acercarse!
-
-[AS3_5]
-~g~¡Recupera la carga!
-
-[AS3_4]
-~g~¡¡Usa un lanzador de cohetes para derribar ~y~el avión~g~!!
-
-[AS3_2]
-~b~¡Ve al boya del aeropuerto! ~y~¡¡El avión se está acercando!!
-
-[AS3_6]
-~g~~1~ DE 8
-
-[KM1]
-'KANBU REVIENTA'
-
-[KM3]
-'TRATO SIGILOSO'
-
-[KM4]
-'SHIMA'
-
-[KM5]
-'HEROÍNA'
-
-[KM1_A]
-Mi hermana habla muy bien de ti,
-
-[KM1_E]
-aunque todavía debo convencerme de que un gaijin puede ofrecerme algo más que contratiempos.
-
-[KM1_B]
-Tal vez puedas ayudar con una situación que me tiene en desventaja.
-
-[KM1_F]
-Desde luego que el fracaso lleva consigo su propia desgracia.
-
-[KM1_C]
-Un Yakuza Kanbu está bajo custodia esperando ser trasladado y juzgado.
-
-[KM1_G]
-Es un valioso miembro de la familia.
-
-[KM1_H]
-Libéralo y llévatelo al dojo de Bedford Point.
-
-[KM1_D]
-Te damos las gracias por tus generosas acciones. Si alguna vez necesitas ayuda el dojo tendrá el honor de proporcionarte dos hombres que permanecerán a tu lado.
-
-[KM1_1]
-~g~¡Roba un coche de la pasma!
-
-[KM1_2]
-~g~¡Carga el coche con una bomba!
-
-[KM1_3]
-~g~Ahora llévalo al dojo Yakuza.
-
-[KM1_5]
-~g~Vale, ahora ve a la comisaría.
-
-[KM1_6]
-~g~¡Pon una bomba en el coche!
-
-[KM1_7]
-~g~¡Sólo vehículos de policía autorizados!
-
-[KM1_9]
-~r~No usaste un coche bomba para destruir la pared.
-
-[KM1_10]
-~r~El Yakuza Kanbu está muerto - ¡y tu honor también!
-
-[KM1_11]
-~r~¡Trajiste la desgracia a ti mismo!
-
-[KM2_A]
-Es imposible sobreestimar la importancia del protocolo en esta sección de trabajo.
-
-[KM2_B]
-Para mi vergüenza eterna, un hombre me hizo una vez un favor y nunca tuve la oportunidad de devolver su amabilidad.
-
-[KM2_C]
-Su punto débil son los coches y nos ha pedido que adquiramos ciertos modelos para su colección.
-
-[KM2_F]
-Mi honor lo demanda.
-
-[KM2_2]
-~g~Coche entregado.
-
-[KM3_A]
-Cuando los problemas acechan, el tonto les da la espalda, mientras el hombre sabio los enfrenta.
-
-[KM3_B]
-El Cartel colombiano ha ignorado nuestras repetidas peticiones de que dejen en paz nuestros intereses en Liberty.
-
-[KM3_C]
-Ahora están negociando con los jamaicanos para humillarnos aún más.
-
-[KM3_D]
-Están cerrando un trato en toda la ciudad.
-
-[KM3_F]
-Llévate a uno de mis hombres, roba un coche Yardie y ve a presentar tus respetos a los colombianos.
-
-[KM3_E]
-Nuestro honor demanda que no dejes a nadie vivo.
-
-[KM3_2]
-~g~Ve y recoge a tu contacto.
-
-[KM3_3]
-~g~¡La reunión está teniendo lugar en el estacionamiento del hospital de Rockford!
-
-[KM3_4]
-~r~¡Han escapado!
-
-[KM3_6]
-~g~¡Mátalos, mátalos a todos!
-
-[KM3_8]
-~g~¡Necesitas un coche Yardie para hacer el trabajo!
-
-[KM3_9]
-~r~Uno de los colombianos está muerto, se acabó el trato.
-
-[KM3_10]
-~r~¡El contacto está muerto!
-
-[KM4_A]
-Para ser verdaderamente fuerte es importante que nunca demuestres debilidad.
-
-[KM4_C]
-Ve y recolecta el dinero inmediatamente, para que podamos ingresarlo en las cuentas del casino.
-
-[KM4_1]
-¡No puedo pagarte y no lo haría aunque pudiera!
-
-[KM4_9]
-¡Una banda de jóvenes acaban de arrasar el local! ¡Se han llevado todo!
-
-[KM4_2]
-No servís para nada.
-
-[KM4_10]
-De todas maneras, ¡qué clase de Yakuza eres TÚ?
-
-[KM4_3]
-Esto no es para lo que os pago, tíos. Si quisiera esta clase de protección habría llamado al maldito servicio de policía.
-
-[KM4_4]
-~g~¡Castiga a la banda responsable y recupera el dinero de la protección!
-
-[KM4_7]
-~r~¡El tendero la acaba de palmar!
-
-[KM4_5]
-Donald Love desea que te dejes caer en su jardín de té para que podáis hablar.
-
-[KM4_6]
-¡Aquí está todo el dinero!
-
-[KM4_8]
-~g~¡Maletín recolectado!
-
-[KM5_A]
-¡TÚ! ¡Qué adecuado que elijas este momento para enseñar tu cara culo!
-
-[KM5_B]
-Parece que tus intentos para disuadir a los jamaicanos
-
-[KM5_B1]
-que se conviertan en chicos malos en el Cartel, ¡son totalmente inadecuados!
-
-[KM5_C]
-¡Los camellos Yardie se alinean en las calles de Liberty vendiendo paquetes de SPANK como si fueran perritos calientes!
-
-[KM5_D]
-Estos cerdos del Cartel se están riendo de nosotros, ¡en mi cara!
-
-[KM5_E]
-¡Te daré una última oportunidad para demostrar que la fe que tiene mi hermana en ti tiene una base segura!
-
-[KM5_F]
-¡¡¡Entierra estos sacos de basura y lava tu vergüenza en ríos de la sangre de nuestros enemigos!!!
-
-[KM5_3]
-~r~Fallaste al matar al menos a ~1~ yardies.
-
-[KM5_4]
-~g~Felicitaciones, mataste a ~1~ yardies.
-
-[KM5_5]
-~g~Enhorabuena, mataste ~1~ yardies. ~1~$ EXTRA
-
-[RM1]
-'SILENCIA AL SOPLÓN'
-
-[RM3]
-'POCA EVIDENCIA'
-
-[RM4]
-'DE PESCA'
-
-[RM5]
-'PASTA DE YESO'
-
-[RM1_D]
-Se encuentra bajo protección armada en la propiedad de WitSec, en el centro de Newport, en algún piso que hay detrás del aparcamiento.
-
-[RM1_E]
-Incendia ese lugar, eso les hará salir y podrás cazarlos, asegúrate de que no hable con nadie.
-
-[RM1_1]
-~g~Comprueba la casa de protección de testigos.
-
-[RM1_2]
-~g~¡Saca a McAffrey!
-
-[RM2_A1]
-¡Eh tú, el chaval de ahí!
-
-[RM2_A]
-Un viejo colega del ejército lleva un asunto en Rockford.
-
-[RM2_D]
-Va a necesitar algún respaldo y a cambio te dará cualquier herramienta que compres a precios de ganga.
-
-[RM2_E]
-Ray se adelantó al llamar....pero pensé que serías algo más.
-
-[RM2_F]
-Bien, tres armas son mejor que una, así que hazte con lo que necesites.
-
-[RM2_G]
-~g~¡Ve a echar un vistazo a Phil!
-
-[RM2_H]
-~r~¡¡Han matado a Phil!!
-
-[RM2_L]
-¡Hey! ¡Si hubiera estado de tu bando en Nicaragua quizás todavía conservaría mi brazo!
-
-[RM2_N]
-No te preocupes por el dinero. Ahora lárgate de aquí, yo entretendré a los polis.
-
-[RM3_D]
-Están llevando la prueba por toda la ciudad.
-
-[RM3_E]
-Vas a tener que deshacerte del coche y recoger hasta la última prueba que quede por ahí.
-
-[RM3_F]
-Cuando lo tengas todo, déjalo en el coche y préndele fuego.
-
-[RM3_G]
-Lo vamos a llevar mucho mejor sin este chico.
-
-[RM3_1]
-~g~Deja la prueba en un coche y después préndele fuego.
-
-[RM3_4]
-~g~¡El Fiscal ha retirado la prueba!
-
-[RM3_6]
-~r~¡Las fotos habrán acabado con toda posibilidad de Libertad!
-
-[RM3_7]
-~g~¡Ahora préndele fuego al coche!
-
-[RM4_A]
-Creo que mi socio es una rata.
-
-[RM4_C]
-Casi todas las noches sale a pescar con su barca cerca del faro que hay en Portland Rock.
-
-[RM4_D]
-¡Roba una barca de la policía y asegúrate de que se vengan abajo sus planes de darte una puñalada trapera!
-
-[RM4_1]
-~g~Vete y roba una barca de la policía.
-
-[RM4_2]
-~g~¡Vete al faro y 'liquida' al socio de Ray!
-
-[RM5_A]
-¡Inútil de mierda!
-
-[RM5_A1]
-¡Eres un absoluto imbécil! Tengo el culo a tiro y ni siquiera eres capaz de matar a una maldita mosca.
-
-[RM5_B]
-¡Te he pagado una pasta para que mates al testigo y aún sigue vivo!
-
-[RM5_B1]
-¡Y hoy va a declarar ante los Federales!
-
-[RM5_C]
-Le van a llevar de un momento a otro del Hospital General Carson a Rockford.
-
-[RM5_D]
-Si se chiva, yo canto....
-
-[RM5_E]
-¡así que vete y haz el trabajo por el que se te pagó!
-
-[RM5_1]
-~g~¡¡Detén la ambulancia!!
-
-[RM5_2]
-~g~¡¡Te han chafado!!
-
-[RM5_3]
-~g~¡Ha sido una trampa!
-
-[RM5_4]
-~g~¡¡Las balas no van a atravesar ese chaleco antibalas!!
-
-[RM5_5]
-~g~¡¡Ese chaleco antibalas es a prueba de fuego!!
-
-[RM5_7]
-~r~¡¡Han llevado al testigo!!
-
-[RM5_8]
-~g~¡¡El testigo se ha ahogado!!
-
-[LOVE2]
-'¡EXTERMINA A WAKA-GASHIRA!'
-
-[LOVE3]
-'UNA GOTA EN EL OCÉANO'
-
-[LOVE1_A]
-Antes que nada, déjame que te agradezca que te hayas ocupado de ese asunto personal.
-
-[LOVE1_F]
-La gente tiende a malinterpretar las cosas últimamente.
-
-[LOVE1_D]
-Están intentando sacarme más de lo pactado, pero no soy precisamente partidario de revisar los tratos.
-
-[LOVE1_E]
-Un trato es un trato, así que no van a ver ni un duro mío.
-
-[LOVE1_G]
-Ve a rescatar a mi amigo, haz lo que haga falta.
-
-[LOVE1_2]
-~g~Rescata al Anciano Caballero Oriental.
-
-[LOVE1_3]
-~g~Lleva de vuelta al edificio de Donal Love al Anciano Caballero Oriental.
-
-[LOVE1_4]
-~g~El Anciano Caballero Oriental debe estar en uno de los aparcamientos....
-
-[LOVE1_6]
-~r~¡Las tripas del Anciano Caballero Oriental están esparcidas por las calles!
-
-[LOVE1_7]
-~g~Sólo se abrirá la puerta para un coche de la Banda Colombiana.
-
-[LOVE2_A]
-No hay nada como una de esas guerras de bandas pasadas de moda para hacer que bajen los precios de la vivienda,
-
-[LOVE2_B]
-excepto desencadenar una plaga......pero eso sería llegar demasiado lejos en este caso.
-
-[LOVE2_C]
-He observado que Yakuza y los Colombianos no son precisamente buenos amigos.
-
-[LOVE2_D]
-Vamos a aprovechar las posibilidades de negocio que se presentan.
-
-[LOVE2_E]
-Quiero que mates a Kanji Kase, el WAKA-cuchillera de Yakuza.
-
-[LOVE2_F]
-Kenji está asistiendo a una reunión en lo alto del aparcamiento de los almacenes de Newport.
-
-[LOVE2_G]
-¡Hazte con un coche de la banda del Cartel y elimínalo!
-
-[LOVE2_H]
-El Yakuza debe culpar al Cartel por esta declaración de guerra.
-
-[LOVE2_1]
-~g~¡Ve a Fort Staunton y roba un coche de la banda de los colombianos!
-
-[LOVE2_2]
-~g~¡Ahora ve a los ~p~almacenes de Newport~g~ y cárgate a Kenji!
-
-[LOVE2_3]
-~r~¡Si lo haces sin un coche del Cartel te identificarán!
-
-[LOVE2_4]
-~r~¡¡El Yakuza te ha identificado!!
-
-[LOVE2_6]
-~r~¡¡Has matado a todos los testigos!!
-
-[LOVE3_A]
-En estos días de hipocresía moral ciertos artículos pueden resultar difíciles de importar.
-
-[LOVE3_C]
-Echará varios paquetes en el agua.
-
-[LOVE3_D]
-Asegúrate de que los recoges antes que nadie más lo haga.
-
-[LOVE3_1]
-~g~¡Consigue una ~r~barca~g~ y sigue al ~y~avión~g~!
-
-[LOVE4]
-'GRAN LADRÓN AÉREO'
-
-[LOVE5]
-'SERVICIO DE ESCOLTA'
-
-[LOVE4_A]
-Gracias por hacerte con esos paquetes, pero no eran más que una trampa.
-
-[LOVE4_B]
-Lo siento, pero a veces así son los negocios.
-
-[LOVE4_C]
-Mi objetivo real se ocultaba por completo en el avión.
-
-[LOVE4_F]
-Tengo sobornados a los oficiales.
-
-[LOVE4_1]
-~r~¡Está aquí el Cartel Colombiano!!
-
-[LOVE4_2]
-~g~¡Ha desaparecido el paquete! Sigue la pista a los colombianos y recupéralo.
-
-[LOVE4_3]
-~g~¿Construcción Panlántica ...?
-
-[LOVE4_5]
-~g~El paquete debería estar en el avión....
-
-[LOVE4_6]
-~g~¡Sube en el ascensor a lo alto de la torre!
-
-[LOVE5_B]
-Mi amigo Oriental va a necesitar una escolta mientras trata de comprobar si mi última adquisición es auténtica o no.
-
-[LOVE5_1]
-~g~¡Vamos!
-
-[LOVE5_2]
-~g~¡Vas a necesitar un coche!
-
-[LOVE5_3]
-~g~¡Sigue hasta que puedas encontrar la salida del túnel!
-
-[LOVE5_4]
-~r~¡Protege el camión!
-
-[RM6]
-'HOMBRE SEÑALADO'
-
-[RM6_A]
-¿No te han seguido? Bien.
-
-[RM6_B]
-Así de fácil, ¡no tengo dónde meterme y me estoy empezando a hundir aquí mismo!
-
-[RM6_D]
-Soy un hombre señalado, así que tengo que largarme de aquí.
-
-[RM6_E]
-¡Consigue que no pierda mi vuelo en el aeropuerto y haré que haya merecido la pena tu trabajo!
-
-[RM6_666]
-Cuida de mi Patriot a prueba de balas. Nos vemos en Miami, Ray
-
-[CAT1]
-'RESCATE'
-
-[CAT2]
-'EL INTERCAMBIO'
-
-[CAT1_A]
-Tengo a la preciosa María. No creo que quieras que su cara parezca como si se hubiera enfadado con el carnicero.
-
-[CAT2_F]
-Me he roto una uña y se me ha estropeado el peinado. Es increíble. ¡Me había costado 50 $!
-
-[CAT2_G]
-Tenía tanto miedo, pero entonces me dije a mí misma, ahora eres una gran chica.
-
-[CAT2_H]
-Oh, nos lo vamos a pasar a lo grande, porque, ¿sabes?, mi hermana dijo que quería venirse a vivir con sus dos hijos,
-
-[CAT2_I]
-porque su marido a vuelto a enredar por ahí y.....
-
-[CAT1_C]
-XXXX
-
-[CAT1_D]
-XXXX
-
-[CAT1_E]
-XXXX
-
-[CAT1_F]
-¡Ve a donde está Catalina antes de que se acabe el tiempo!
-
-[CAT1_G]
-XXXX
-
-[CAT1_H]
-XXXX
-
-[CAT1_I]
-XXXX
-
-[CAT1_J]
-XXXX
-
-[CAT1_K]
-XXXX
-
-[CAT1_L]
-XXXX
-
-[AS4_1]
-XXXX
-
-[CAT_MON]
-~g~Todavía no tienes suficiente dinero. Necesitas 500.000 $.
-
-[BITCH_D]
-~g~¡María está muerta!
-
-[WEATHER]
-FORZAR EL CLIMA
-
-[WEATHE2]
-CLIMA NORMAL
-
-[8001]
-¡¡Has fallado miserablemente!!
-
-[1000]
-ESTÁS MUERTO
-
-[1001]
-ESTÁS MUERTO
-
-[1002]
-ESTÁS MUERTO
-
-[1003]
-ESTÁS MUERTO
-
-[1004]
-ESTÁS MUERTO
-
-[1005]
-AVERIADO
-
-[1006]
-AVERIADO
-
-[1007]
-AVERIADO
-
-[1008]
-AVERIADO
-
-[1009]
-AVERIADO
-
-[GA_4]
-Las bombas de coche valen 1000 $ cada una
-
-[GA_5]
-Tu coche ya tiene instalada una bomba.
-
-[GA_6]
-Apárcalo, prepáralo pulsando el ~h~botón ~k~~PED_FIREWEAPON~~w~ y SAL POR PATAS!
-
-[GA_7]
-Arma con el ~h~botón ~k~~PED_FIREWEAPON~~w~. La bomba estallará cuando se arranque el motor.
-
-[GA_8]
-Utiliza el detonador para activar la bomba.
-
-[GA_9]
-Ha conseguido ~1~de los 10 coches especiales
-
-[GA_10]
-Buen ejemplar. Aquí tienes tus ~1~$
-
-[GA_11]
-Las ruedas ya están listas. ¡No sirve para nada!
-
-[GA_12]
-Bomba armada
-
-[GA_13]
-Entregado como un profesional. Completa la lista y conseguirás una bonificación.
-
-[GA_14]
-Todos los coches. ¡ESTUPENDO! Aquí hay algo para ti.
-
-[GA_15]
-Espero que te guste el nuevo color.
-
-[GA_16]
-Repintarlo es adicional.
-
-[GA_19]
-No nos interesa ese modelo.
-
-[GA_20]
-Tenemos de esos más de los que podamos ocuparnos. Lo siento, tío, no hay negocio.
-
-[CR_1]
-La grúa no puede levantar este vehículo.
-
-[PU_MONY]
-No tienes suficiente dinero.
-
-[CO_ALL]
-Los tienes todos. Aquí hay algo para ti...
-
-[PAUSED]
-JUEGO EN PAUSA GAME PAUSED
-
-[HEALTH1]
-¡Lárgate de aquí! Estás completamente sano.
-
-[HEALTH2]
-La salud cuesta dinero.
-
-[HEALTH3]
-Te pondré como nuevo.
-
-[HEALTH4]
-Eso te va a costar 250 $.
-
-[FEB_STA]
-Estadísticas
-
-[FEB_BRI]
-Informes
-
-[FEB_CON]
-Controles
-
-[FEB_AUD]
-Sonido
-
-[FEB_DIS]
-Pantalla
-
-[FEB_LAN]
-Idioma
-
-[FEP_STA]
-ESTADÍSTICAS
-
-[FEP_BRI]
-INFORMES
-
-[FEP_CON]
-CONTROLES
-
-[FEP_AUD]
-SONIDO
-
-[FEP_DIS]
-PANTALLA
-
-[FEP_LAN]
-IDIOMA
-
-[FEF_ST1]
-¿Quién es el malo?
-
-[FEF_ST2]
-Cuánta destrucción has producido
-
-[FEF_BR1]
-¿Has perdido el hilo?
-
-[FEF_CO1]
-¿Necesitas más control, pirado?
-
-[FEF_CO2]
-Elige la mejor configuración del mando para tu estilo de juego
-
-[FEF_SA1]
-¡Mantén tu sitio en el bloque!
-
-[FEF_SA2]
-Guarda y carga tus partidas
-
-[FEF_AU1]
-¡Pon el volumen a tope!
-
-[FEF_AU2]
-Elige una emisora de radio y un efecto de sonido
-
-[FEF_DI1]
-¡Cambia el juego!
-
-[FEF_DI2]
-Personaliza el juego para tu televisión
-
-[FEF_LA1]
-¿Qué dices de los willis?
-
-[FEF_LA2]
-Elige la forma de hablar que prefieras
-
-[FEB_PMB]
-Informes de la Misión Previa:
-
-[FEC_NA]
-No Disponible
-
-[FEC_CWL]
-Cambiar al Arma izquierda
-
-[FEC_CWR]
-Cambiar al Arma izquierda
-
-[FEC_LOF]
-Mirar hacia delante
-
-[FEC_TAR]
-Objetivo
-
-[FEC_MOV]
-Movimiento
-
-[FEC_CAM]
-Modos de Cámara
-
-[FEC_PAU]
-Pausa
-
-[FEC_ENV]
-Entrar al vehículo
-
-[FEC_JUM]
-Saltar
-
-[FEC_ATT]
-Ataque o Arma de Fuego
-
-[FEC_RUN]
-Correr
-
-[FEC_FPC]
-Cámara en primera persona
-
-[FEC_LL]
-Mirar a la izquierda
-
-[FEC_LB1]
-Mirar
-
-[FEC_LB2]
-detrás
-
-[FEC_LB]
-Mirar detrás
-
-[FEC_LR]
-Mirar a la derecha
-
-[FEC_HOR]
-Bocina
-
-[FEC_VES]
-Control del vehículo
-
-[FEC_RSC]
-Cambiar de emisora de Radio
-
-[FEC_BRA]
-Freno o Marcha Atrás
-
-[FEC_HAB]
-Freno de mano
-
-[FEC_CAW]
-Arma del coche
-
-[FEC_ACC]
-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]
-Pantalla del mando:
-
-[FEC_ONF]
-A Pie
-
-[FEC_INC]
-En Coche
-
-[FEC_VIB]
-Vibración:
-
-[FEA_OUT]
-Salida:
-
-[FEA_ST]
-Estéreo
-
-[FEA_MNO]
-Mono
-
-[FEA_NON]
-Ninguna
-
-[FEA_FM0]
-HEAD RADIO
-
-[FEA_FM1]
-DOUBLE CLEFF FM
-
-[FEA_FM2]
-K-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]
-CHATTERBOX 109
-
-[FED_DBG]
-Menú de Depuración
-
-[FED_RID]
-Recargar IDE
-
-[FED_RIP]
-Recargar IPL
-
-[FED_PAH]
-Analizar pila
-
-[FED_RCD]
-CCullZones::RecalculateCullZoneData
-
-[FED_DFL]
-CTheScripts::DbgFlag
-
-[FED_DLS]
-Activada la Luz de Depuración Blanca Grande
-
-[FED_SPR]
-Mostrar Grupos de Carretera Ped
-
-[FED_SCR]
-Mostrar Grupos de Carretera de Coches
-
-[FED_SCZ]
-Mostrar Zonas 'A escoger'
-
-[FED_DSR]
-Compilar las Solicitudes de Streaming
-
-[FED_SCP]
-gbShowCollisionPolys
-
-[FEM_MCM]
-Memory Card Menu
-
-[FEM_RMC]
-Registrar MemCard Uno
-
-[FEM_TFM]
-Probar Formato de MemCard Uno
-
-[FEM_TUM]
-Probar Memcard Uno SinFormato
-
-[FEM_CRD]
-Crear Dir Raiz
-
-[FEM_CLI]
-Crear y Cargar Iconos
-
-[FEM_FFF]
-Llenar Primer Archivo con Necedades
-
-[FEM_SOG]
-Guardar Sólo El Juego
-
-[FEM_CES]
-Comprobar Cada 0kBpara Guardar
-
-[FEM_STG]
-Guardar El Juego
-
-[FEM_STS]
-Guardar El Juego bajo el nombre GTA3
-
-[FEM_CPD]
-Crear copia protegida del directorio Revista
-
-[FEM_MC2]
-Memory Card Menu 2
-
-[FEM_TS]
-Probar Guardar:
-
-[FEM_TL]
-Probar Guardar:
-
-[FEM_TD]
-Probar Borrar:
-
-[PL_STAT]
-Estadísticas del jugador
-
-[PE_WAST]
-Personas que has dilapilado
-
-[PE_WSOT]
-Personas dilapiladas por otros
-
-[CAR_EXP]
-Coches explotados
-
-[TM_BUST]
-Tiempos no conseguidos
-
-[M_WASTE]
-Hombres civiles dilapilados
-
-[F_WASTE]
-Mujeres civiles dilapiladas
-
-[PIG_WST]
-Polis dilapilados
-
-[GNG_WST]
-Miembros de bandas dilapilados
-
-[MED_WST]
-Personal médico dilapilado
-
-[FIRE_WS]
-Bomberos empleados
-
-[DED_CRI]
-Criminales dilapilado
-
-[DED_DED]
-Vagos dilapilados
-
-[DED_HOK]
-Prostitutas dilapiladas
-
-[HEL_DST]
-Helicópteros destruidos
-
-[PER_COM]
-Porcentaje cumplido
-
-[KGS_EXP]
-Kgs de explosivos empleados
-
-[ACCURA]
-Puntería
-
-[ELBURRO]
-Mejor tiempo de Turismo en segundos
-
-[CAR_CRU]
-Coches destrozados
-
-[HED_EX]
-Cabezas explotadas
-
-[TM_DED]
-Visitas al hospital
-
-[DAYSPS]
-Días de juego transcurridos
-
-[MMRAIN]
-mm de lluvia caídos
-
-[MXCARD]
-Máx. dist. Salto INSANO (pies)
-
-[MXCARJ]
-Máx. altitud Salto INSANO (pies)
-
-[MXCARDM]
-Máx. dist. Salto INSANO (metros)
-
-[MXCARJM]
-Máx. altura Salto INSANO (metros)
-
-[MXFLIP]
-Máx. vueltas Salto INSANO
-
-[MXJUMP]
-Máx. rotación Salto INSANO
-
-[BSTSTU]
-Mejor maniobra INSANA hasta ahora:
-
-[INSTUN]
-Maniobra Insana
-
-[PRINST]
-Maniobra insana perfecta
-
-[DBINST]
-Maniobra insana doble
-
-[DBPINS]
-Maniobra insana doble perfecta
-
-[TRINST]
-Maniobra insana triple
-
-[PRTRST]
-Maniobra insana triple perfecta
-
-[QUINST]
-Maniobra insana cuádruple
-
-[PQUINS]
-Maniobra insana cuádruple perfecta
-
-[NOSTUC]
-Ninguna maniobra insana completada
-
-[NOUNIF]
-Saltos Únicos completados
-
-[NOUNGM]
-Total de Saltos Únicos
-
-[NMISON]
-Misiones intentadas
-
-[NMMISP]
-Misiones conseguidas
-
-[PASDRO]
-Pasajeros tirados en marcha
-
-[MONTAX]
-Dinero conseguido en taxi
-
-[DAYPLC]
-Gasto diario en policias
-
-[CRIMRA]
-Porcentaje criminal:
-
-[GMSTOR]
-Almacén de Juego
-
-[PREBRF]
-Informes Previos
-
-[CNTLS]
-Controles
-
-[MUSMEN]
-Música / Efectos Especiales
-
-[GAMSET]
-Ajustes del Juego
-
-[LANGUA]
-Idioma
-
-[DSPLAY]
-Pantalla
-
-[DEBUGM]
-Menú de Depuración
-
-[QUITOP]
-Salir de las Opciones
-
-[CONTRL]
-Configuración de Control
-
-[SET1EN]
-Ajuste 1. Activado
-
-[SET1]
-Ajuste 1.
-
-[SET2EN]
-Ajuste 2. Activado
-
-[SET2]
-Ajuste 2
-
-[SET3EN]
-Ajuste 3. Activado
-
-[SET3]
-Ajuste 3
-
-[SET4EN]
-Ajuste 4. Activado
-
-[SET4]
-Ajuste 4
-
-[GOBACK]
-Volver
-
-[SOUND]
-SONIDO
-
-[MUSVOL]
-Volumen de la Música
-
-[SFXVOL]
-Volumen de los Efectos Especiales
-
-[SCROPT]
-OPCIONES DE PANTALLA
-
-[CTRSCR]
-Centrar Pantalla
-
-[SCRFOR]
-Formato de Pantalla
-
-[GMSVLQ]
-JUEGO GUARDAR-CARGAR-SALIR
-
-[GMREST]
-Reiniciar Juego
-
-[GMLOAD]
-Cargar Juego
-
-[NOGMSV]
-Sólo puedes guardar desde tu escondite.
-
-[DLFILE]
-Borrar Archivos de Grand Theft Auto III
-
-[CHFILE]
-ELEGIR ARCHIVO A CARGAR
-
-[CHCDLD]
-Elegir Tarjeta desde la que Cargar
-
-[CDUNFR]
-Tarjeta sin formato.
-
-[CHFIDL]
-ELIGE UN ARCHIVO A BORRAR
-
-[SVCONF]
-CONFIRMACIÓN DE GURDAR
-
-[SVFNAM]
-El nombre de tu archivo guardado es
-
-[SAVEDN]
-Error. Fallo al guardar.
-
-[LANGSL]
-SELECCIÓN DEL IDIOMA
-
-[ENGLIS]
-Inglés
-
-[GERMAN]
-Alemán
-
-[ITALIA]
-Italiano
-
-[FRENCH]
-Francés
-
-[SPAIN]
-Español
-
-[RELIDE]
-ReLoadIde
-
-[RELIPE]
-ReLoadIpl
-
-[PARSHP]
-Analizar Pila
-
-[DBGFON]
-Activado CTheScripts::DbgFlag
-
-[DBFOFF]
-Desactivado CTheScripts::DbgFlag
-
-[BGWHON]
-Activada Luz Blanca Grande de Depuración
-
-[BGWOFF]
-Desactivada Luz Blanca Grande de Depuración
-
-[DSTRON]
-Activadas Solicitudes de Depuración de Streaming
-
-[DSTROFF]
-Desactivadas Solicitudes de Depuración de Streaming
-
-[PDRGON]
-Activado ShowPedRoadGroups
-
-[PRGOFF]
-Desactivado ShowPedRoadGroups
-
-[CRRGON]
-Activado ShowCarRoadGroups
-
-[CRGOFF]
-Desactivado ShowCarRoadGroups
-
-[CLZOON]
-Activado Mostrar Zonas a escoger
-
-[CLZOOF]
-Desactivado Mostrar Zonas a escoger
-
-[SHPLON]
-gbShowCollisionPolys Sí
-
-[SHPLOF]
-gbShowCollisionPolys No
-
-[CULREC]
-CCullZones::RecalculateCullZoneData()
-
-[FORMM1]
-FormatMemCard 1 (materialprueba)
-
-[UNFRM1]
-UnFormatMemCard 1 (materialprueba)
-
-[GORLEV]
-Nivel Gore
-
-[SICASS]
-Joder de mala manera
-
-[SICSIC]
-Cabrón fastidioso
-
-[SCASSL]
-Seleccionado Joder de mala manera
-
-[SCSCSL]
-Seleccionado Cabrón fastidioso
-
-[PRVMEN]
-Informes de Misiones Previas
-
-[DOSVGM]
-¿Deseas guardar el juego?
-
-[FORMEN]
-Menú de Formato
-
-[MEMTST]
-Pantalla MemoryCardTest
-
-[REGCAR]
-Registrar MemoryCard Uno
-
-[TEFONE]
-Probar Formato de MemCard Uno
-
-[TEUFON]
-Probar MemCard Uno sin formato
-
-[CRROOT]
-CreateRootDir
-
-[CRLDIC]
-Crear y Cargar Iconos
-
-[FLFSGF]
-Llenar Primer Archivo Con Necedades
-
-[PUSAVE]
-Guardar Sólo el juego
-
-[CHEVOK]
-CheckEveryOkB4Save
-
-[SVGMON]
-SaveTheGame
-
-[CNTSAV]
-No se puede guardar el juego. En una misión.
-
-[CNCSAV]
-No se puede guardar el juego. Estás en un coche
-
-[CRMGSV]
-Crear directorio de revista con protección de copia
-
-[MGSVNC]
-No Creado MagazineDirectory
-
-[MGSVCN]
-Creado MagazineDirectory
-
-[YES]
-Sí
-
-[NO]
-No
-
-[X]
-x
-
-[LAST]
-Último Mensaje
-
-[FEDS_XB]
-Seleccionar
-
-[FEDS_ST]
-Botón START - CONTINUAR
-
-[FEST_OO]
-de
-
-[FEC_TUC]
-Control de Torreón
-
-[FEC_SM3]
-Activador de Misión Espacial (botón R3)
-
-[FEC_RS3]
-Cambiar de emisora de Radio (botón L3)
-
-[FEC_HO3]
-Bocina (botón L3)
-
-[DIAB1]
-'TURISMO'
-
-[DIAB2]
-'YO GRITO, TU GRITAS'
-
-[DIAB3]
-'JUICIO POR FUEGO'
-
-[DIAB4]
-'GRANDE Y VENOSO'
-
-[DIAB1_A]
-El burro quiere ofrecerte una oportunidad. Ve al teléfono público de Hepburn Heights si quieres más información.
-
-[DIAB1_C]
-Participas en una carrera desagradable. Pásate por el teléfono público de nuevo y puede que 'El Burro' tenga algo de trabajo para ti.
-
-[DIAB1_1]
-~g~3...2...1... ¡VAMOS VAMOS VAMOS!
-
-[DIAB1_4]
-~g~Hazte con un coche rápido y ve a la cuadrícula de inicio.
-
-[DIAB1_3]
-~r~No podrías ganar ni una rifa, ¡FRACASADO!
-
-[DIAB1_2]
-~g~Felicidades, ganaste con un tiempo increíble de ~1~ segundo.
-
-[FIRST]
-~g~ Primero (or ~g~1o)
-
-[SECOND]
-~g~ Segundo (or ~g~2o)
-
-[THIRD]
-~g~ Tercero (or ~g~3o)
-
-[FOURTH]
-~g~ Cuarto (or ~g~4o)
-
-[DIAB2_1]
-~g~ Recoge el maletín en Harwood.
-
-[DIAB2_2]
-~g~ Encuentra una furgoneta de helados.
-
-[DIAB2_3]
-~g~ Aparca la furgoneta de helados en Atlantic Quays.
-
-[DIAB2_4]
-~g~ Pulsa el ~w~ botón ~k~~VEHICLE_HORN~~g~ para activar el jingle del helado.
-
-[DIAB2_6]
-~g~ Pulsa el ~w~ botón ~k~~VEHICLE_HORN~~g~ para activar el jingle del helado.
-
-[DIAB2_7]
-~g~ Pulsa el ~w~ botón ~k~~VEHICLE_HORN~~g~ para activar el jingle del helado.
-
-[DIAB2_5]
-~g~ Sal de la furgoneta y luego usa el mando a distancia para detonar la furgoneta del helado.
-
-[YD1]
-'PELEA BLING-BLING'
-
-[YD2]
-'JINETE CON UZI'
-
-[YD3]
-'REUNIÓN DE COCHES DE GANGSTERS'
-
-[YD4]
-'LLEGÓ EL REINADO'
-
-[YD_P]
-El Rey Courtney quiere hablarte. ¡¡Ve al teléfono público de Aspatria!!
-
-[YD1_A]
-~w~Este es el Rey Courtney
-
-[YD1_A1]
-~w~Mi banda Yardie necesita un conductor y tú tienes reputación de ser hábil al volante.
-
-[YD1_B]
-~w~Ve al basurero que hay detrás del estadio y en un coche espera a los otros candidatos.
-
-[YD1_C]
-~w~Tengo hombres vigilando los puestos de control en todo Staunton.
-
-[YD1_D]
-~w~El primer conductor que llegue a un puesto de control se lleva un billete de los grandes, luego hay que ir a la siguiente parada.
-
-[YD1_D1]
-~w~Si ganas más puestos de control que cualquier otro conductor, podría tener algo de trabajo para ti.
-
-[YD1_E]
-~g~Preparado para una carrera!
-
-[YD1_F]
-~g~Te saltaste el comienzo -¡Me gusta tu estilo!!
-
-[YD1_G]
-~r~Esto es una CARRERA DE COCHES. ¡Necesitas un COCHE, idiota!
-
-[YD1GO]
-~g~VAMOS!!
-
-[YD1_1]
-~r~1
-
-[YD1_2]
-~r~2
-
-[YD1_3]
-~r~3
-
-[YD1_BON]
-¡¡1.000$!!
-
-[Y1_1ST]
-~G~¡Llegaste el primero con ~1~ exitosos puestos de control!
-
-[Y1_2ND]
-~y~Segundo con ~1~ exitosos puestos de control. ~y~Cerca, pero ¡no eres el mejor!
-
-[Y1_3RD]
-~r~Tercero con ~1~ exitosos puestos de control. ~r~¡Creí que dijiste que eras bueno!
-
-[Y1_LAST]
-~r~¡Fuiste el último! ~r~¡Malgastaste mi tiempo, IDIOTA!
-
-[Y1_J1ST]
-~y~Empatado el primero con ~1~ exitosos puestos de control. ~y~Bien, pero ¡debes ser el mejor si quieres conducir para la Reina Lizzy!
-
-[Y1_J2ND]
-~r~Empatado el segundo con ~1~ exitosos puestos de control. ¡Conduces como un mono loco!
-
-[Y1JLAST]
-~r~¡Empatado el último! Hablas como un conductor, pero conduces como un hablador!
-
-[Y1_TEST]
-COCHE AL AGUA!!
-
-[YD2_A]
-~w~Necesito ver si eres capaz de hacer mi trabajo sucio.
-
-[YD2_A1]
-~w~A ver si se puede confiar en ti.
-
-[YD2_B]
-~w~Dos de mis chicos estarán allí en cualquier momento para llevarte de paseo,
-
-[YD2_B1]
-~w~a ver si eres quien dices que eres.
-
-[YD2_C]
-~w~Nos vamos a dar un pequeño paseo a Hepburn Heights, acabaremos con los asquerosos Diablos que han estado metiéndose con la Reina Lizzy.
-
-[YD2_CC]
-~w~Toma, necesitaras una 'pieza'
-
-[YD2_D]
-~w~Tú te ocupas de conducir y disparar. Nosotros nos aseguraremos de que no te entren dudas.
-
-[YD2_E]
-~w~¡Vamos a conducir!
-
-[YD2_F]
-~r~Ha obtenido la libertad bajo fianza con nuestra pasta, ¡dispara a su culo amarillo!!!
-
-[YD2_G1]
-~w~Hepburn Heights... Vamos a matar algunos asquerosos Diablos...
-
-[YD2_G2]
-~w~Pero recuerda, ~r~¡No salgas de este coche!!
-
-[YD2_H]
-~w~VALE, Llévanos de vuelta a territorio Yardie! VAMOS VAMOS VAMOS!!!
-
-[YD2_L]
-~w~¡Lo hiciste bien, Reaperman!
-
-[YD2_M]
-~r~¡Ha destrozado mi coche! ¡Liquidale!
-
-[YD2_N]
-~w~¡Vuelve a poner tu culo en este coche!
-
-[YD3_A]
-Quiero que empujes algunos coches de gangsters
-
-[YD3_A1]
-para que podamos dar el golpe en territorio enemigo.
-
-[YD3_B]
-Necesito un Mafia Sentinel,
-
-[YD3_B1]
-un Yakuza Stinger y un
-
-[YD3_B2]
-Diablo Stallion para poder dar a cualquier gangster de Liberty.
-
-[YD3_C]
-Déjales en el garaje de Newport y recuerda,
-
-[YD3_C1]
-¡¡aniquilados no nos son de utilidad !!
-
-[YD3_D]
-Nivel de texto sobrante
-
-[YD3_E]
-~r~¡Ya le has dado a un coche de gangsters, diablo!
-
-[YD3_F]
-~r~¡Ya le has dado a un coche de gangsters Mafia!
-
-[YD3_G]
-~r~¡Ya le has dado a un coche de gangsters Yakuza!
-
-[YD3_H]
-~g~¡Coche de gangsters Diablo empujado!
-
-[YD3_I]
-~g~¡Coche de gangsters Mafia empujado!
-
-[YD3_J]
-~g~¡Coche de gangsters Yakuza empujado!
-
-[YD3_K]
-~r~¡El coche está casi destrozado!¡Haz que lo reparen!
-
-[YD3_L]
-~g~¡Llevalo al ~p~ garaje!
-
-[YD3_M]
-~r~¡Lo volcaste! ¡Consigue otro!
-
-[YD4_A]
-¡Escucha!
-
-[YD4_A1]
-Pásate por Bedford Point.
-
-[YD4_A2]
-¡Hay un cargamento en un viejo coche y lo necesito pronto!
-
-[YD4_B]
-CARTA: He oído que has sido un chico aplicado. Bien, yo he sido una chica aplicada.
-
-[YD4_C]
-Creo que es hora de que seas testigo del poder real del ¡'SPANK'! Besos y abrazos, Catalina, xxx
-
-[YD4_D]
-POSDATA: ¡¡MUERE PEEG DOG, MUERE!!
-
-[YD4_1]
-¡¡Te hemos pellado necio!!
-
-[YD4_2]
-¡¡Destruye las furgonetas de SPANK
-
-[HM_1]
-'DINERO UZI'
-
-[HM_2]
-'TOYMINATOR'
-
-[HM_3]
-'PREPARADO PARA ESTALLAR'
-
-[HM_5]
-'REDOBLE'
-
-[HOOD1_A]
-Ve al teléfono público de Wichita Gardens y hablaremos de negocios.
-
-[HM1_A]
-¡Tío, Soy D-Ice de los Red Jacks!
-
-[HM1_C]
-Esos jovenes macarras, salen a la calle y no tienen nada más que pistolas y SPANK en sus cabezas.
-
-[HM1_3]
-~g~Los 'Nines' tienen su territorio en Wichita Gardens.
-
-[HM2_3]
-Si golpeas las ruedas de un vehículo el RC buggy ¡se detonará!
-
-[HM2_4]
-Si se sale fuera de cobertura el RC buggy ¡se detonará!
-
-[HM2_5]
-~r~¡Fuera de cobertura!
-
-[HM3_1]
-~g~Ve al garaje pero pon atención porque si el coche se daña demasiado ¡explotará!
-
-[HM3_2]
-~g~Lleva el coche de vuelta, tiene que estar en perfectas condiciones ¡sin daños!
-
-[HM3_3]
-~g~¡Haz que reparen el coche!
-
-[HM4_D]
-~g~¡Hazte con un vehículo!
-
-[HM4_E]
-NO MAS TEXTO REQUERIDO
-
-[HM4_1]
-~g~Dirígete al lugar donde el cargamento ha sido esparcido, necesitas conseguir 30 lingotes de oro.
-
-[HM4_2]
-~g~Recuerda, cuando el vehículo es demasiado pesado y lento ve al garaje y deja el cargamento.
-
-[HM5_3]
-~r~¡Te han dicho que uses sólo un bate de béisbol!
-
-[HM5_4]
-~r~¡Tu contacto está muerto!
-
-[MEA1]
-'EL CRIMINAL'
-
-[MEA2]
-'LOS LADRONES'
-
-[MEA3]
-'LA MUJER'
-
-[MEA4]
-'SU AMANTE'
-
-[MEAT1_A]
-Un amigo dijo que tú podías arreglar algunos problemas que tengo. Ve al teléfono público de Trento si crees que puedes ayudar.
-
-[MEA1_B3]
-~g~Ve y reúnete con el Director del Banco.
-
-[MEA1_B6]
-~g~Lleva el coche a la trituradora para eliminar las evidencias, sal del coche y la grúa lo recogerá.
-
-[MEA1_1]
-~r~¡El director del banco está muerto!
-
-[MEA1_2]
-~r~¡Te dijeron que trituraras el coche!
-
-[MEA1_3]
-~g~¡Sal del coche!
-
-[MEA1_4]
-~r~Has dejado atrás al director del banco!
-
-[MEA2_B3]
-~g~Ve a encontrarte con los ladrones.
-
-[MEA2_B4]
-~g~Llévalos a la fábrica de comestibles Bitch'n'Dog
-
-[MEA2_B6]
-~g~Haz que repinten el coche para eliminar cualquier evidencia.
-
-[MEA2_1]
-~r~¡Te dijeron que trituraras el vehículo!
-
-[MEA2_2]
-~r~¡Un ladrón ha muerto!
-
-[MEA2_4]
-~r~¡Has dejado atrás a un ladrón!
-
-[MEA3_B3]
-~g~Ve y recoge a la Sra. Chonks
-
-[MEA3_B6]
-~g~Llévate el coche y tíralo al mar, así eliminaremos cualquier evidencia.
-
-[MEA3_1]
-~r~¡La mujer está muerta!
-
-[MEA3_2]
-~r~¡Se suponía que ibas a tirar el vehículo al agua!
-
-[MEA3_3]
-~r~¡Has dejado atrás a su mujer!
-
-[MEA4_B3]
-~g~Recoge al amante de su mujer.
-
-[MEA4_B6]
-Es demasiado tarde para eso, Marty. Tuviste tu oportunidad, pero ahora yo me ocuparé del negocio...
-
-[MEA4_1]
-~r~¡Carlos está muerto!
-
-[MEA4_3]
-~r~¡Has dejado atrás a Carlos el prestamista!
-
-[LOOK_A]
-Pulsa y mantén pulsado el ~h~botón ~k~~VEHICLE_LOOKLEFT~~w~ o el ~h~botón ~k~~VEHICLE_LOOKRIGHT~~w~ para mirar ~h~ a la izquierda ~w~ o ~h~ a la derecha ~w~ mientras te encuentres en un vehículo. Pulsa ambos para mirar ~h~ atrás ~w~.
-
-[LOVE6_1]
-~g~¡Ahora llévate a los policías lejos del almacén!
-
-[LOVE6_2]
-~r~¡No conseguiste llevar lejos a la policía!
-
-[RM4_3]
-¡El socio de Ray ha escapado!
-
-[RM6_C]
-La CIA parece tener intereses creados con el SPANK
-
-[RM6_C1]
-y a ellos no les gusta que nos metamos con el Cartel.
-
-[C_PASS]
-¡AMENAZA ELIMINADA!
-
-[CTUTOR]
-Pulsa el ~h~botón ~k~~TOGGLE_SUBMISSIONS~~w~ para activar o no misiones Vigilante.
-
-[CTUTOR2]
-Pulsa el ~h~botón ~k~~TOGGLE_SUBMISSIONS~~w~ para activar o no misiones Vigilante.
-
-[COPCART]
-~g~Tienes ~1~ segundos para retornar a un vehículo de la policía antes de que termine la misión.
-
-[C_FAIL]
-¡Misión Vigilante terminada!
-
-[C_CANC]
-~r~¡Misión Vigilante cancelada!
-
-[C_ESCP]
-~r~¡El sospechoso ha escapado!
-
-[C_TIME]
-~r~¡Tu trabajo como defensor de la ley ha terminado!
-
-[C_VIGIL]
-¡¡BONO VIGILANTE!!
-
-[A_FAIL2]
-~r~¡Tu falta de urgencia ha sido fatal para el paciente!
-
-[A_FAIL3]
-~r~¡¡El paciente está muerto!!
-
-[A_PASS]
-¡Rescatado!
-
-[F_FAIL2]
-~r~¡Llegas demasiado tarde!
-
-[A_COMP2]
-¡Nunca te cansarás!
-
-[RM2_M]
-Si necesitas un poco de pólvora pasa por aquí y coge lo que necesites de las taquillas.
-
-[HEAL_A]
-Tu ~h~salud ~w~ está marcada en naraja en la parte superior derecha de la pantalla.
-
-[YD1_CNT]
-¡~1~ de 15!
-
-[FM1_9]
-~g~Esa de allí es la fiesta, deja a María enfrente.
-
-[FM1_Y]
-~w~Quiero que sepas que me lo he pasado muy bien por primera vez en mucho tiempo, y que me has tratado muy bien. Con respeto y todo eso.
-
-[FM1_AA]
-~w~Oh, será mejor que me vaya. Espero que nos veamos pronto.
-
-[NOCONTE]
-Por favor vuelve a conectar el mando analógico (DUALSHOCK#) o mando analógico (DUALSHOCK#2) al puerto de mando 1 para continuar.
-
-[WRCONT]
-El mando conectado al puerto de mando 1 es un mando no soportado. Grand Theft Auto III necesita un mando analógico (DUALSHOCK#) o mando analógico (DUALSHOCK#2).
-
-[WRCONTE]
-El mando conectado al puerto de mando 1 es un mando no soportado. Grand Theft Auto III necesita un mando analógico (DUALSHOCK#) o mando analógico (DUALSHOCK#2).
-
-[WRONGCD]
-Disco incorrecto. Por favor inserta el disco correcto.
-
-[NOCD]
-La bandeja del disco está vacía. Por favor inserta un disco.
-
-[OPENCD]
-La bandeja del disco está abierta. Por favor ciera la bandeja de disco.
-
-[CDERROR]
-Error al leer el DVD de Grand Theft Auto III
-
-[RESTART]
-Empezando una juego nuevo
-
-[GA_3]
-¡No hay más freebies. 1000$ para repintar!
-
-[GA_1]
-¡Uauhh! ¡No toco nada TAN caliente!
-
-[GA_1A]
-Regresa cuando no estés tan ocupado...
-
-[S_PROM2]
-El garaje de al lado puede alojar un vehículo cuando tú guardas tu partida.
-
-[STOCK]
-mercancía agotada
-
-[FM1_O]
-~w~Creo que está en la estación de ferrocarril del muelle de Chinatown.
-
-[EBAL_B]
-Este es el lugar, justo aquí, dejemos la calle y ¡encontremos un cambio de ropas!
-
-[EBAL_G]
-Este es el club de Luigi. Vamos por la parte de atrás y usemos la puerta de servicio.
-
-[AM4_3]
-¡Tú debes de ser el nuevo chico de los recados de Asuka!
-
-[AM4_4]
-¿Tienes el dinero? ¿Está todo aquí?
-
-[AM4_5]
-Ya sé lo que estás pensando, otro policía corrupto.
-
-[AM4_6]
-Bueno, éste es un mundo corrupto.
-
-[AM4_7]
-Sólo porque perdí un par de socios, esos mamones de asuntos internos han empezado a meter las narices.
-
-[AM4_8]
-Cuento con que pueden pillarme.
-
-[AM4_9]
-Bien, esta ciudad es una gran alcantarilla.
-
-[AM4_10]
-Pero voy a necesitar un poco de ayuda fuera del sindicato.
-
-[AM4_11]
-Y si estás interesado ya sabes dónde encontrarme.
-
-[CAM_A]
-Pulsa el ~h~botón ~k~~CAMERA_CHANGE_VIEW_ALL_SITUATIONS~~w~ para cambiar ~h~cámara ~w~ modos cuando vayas a pié o estés en un vehículo.
-
-[CAM_B]
-Pulsa el ~h~botón de dirección hacia arriba ~w~ y ~h~ abajo ~w~ para cambiar los modos de ~h~cámara ~w~cuando vayas a pié o estés en un vehículo.
-
-[KM2_1]
-~g~Repara el coche, tiene que estar en perfecto estado.
-
-[LM3_6]
-Joey...
-
-[LM3_6A]
-¿Voy a jugar contigo otra vez?
-
-[LM3_9A]
-debe de haber algo de trabajo para ti.
-
-[LM3_9B]
-¿De acuerdo?
-
-[AWAY2]
-~r~Se escaparon.
-
-[AWAY]
-~r~¡Se ha pirado de aquí!
-
-[JM6_1]
-Ve al banco de la avenida principal.
-
-[GA_6B]
-Aparca, selecciónalo pulsando el ~h~botón ~k~~PED_FIREWEAPON~~w~ y ¡ADELANTE!
-
-[GA_7B]
-Armar con ~h~botón ~k~~PED_FIREWEAPON~~w~. La bomba explotará cuando el motor sea arrancado.
-
-[BAT1]
-~g~¡Coge el bate!
-
-[EBAL_O]
-Si no estropeas esto, puede que haya más trabajo para ti. Ahora ¡vete de aquí!
-
-[HELP9_B]
-Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para ~h~disparar ~w~ el rifle del francotirador.
-
-[HELP9_C]
-Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para ~h~ disparar ~w~ el rifle del francotirador.
-
-[JM6_8]
-~r~¡Has perdido a todos los ladrones!
-
-[COLT_IN]
-¡La pistola está ahora en el almacén de Munición!
-
-[TAXI2]
-~r~¡Se te acabó el tiempo!
-
-[TAXI3]
-~r~¡Tu pasajero se marchó aterrorizado!
-
-[TAXI7]
-~r~Tu coche está destrozado, haz que lo reparen.
-
-[TAXI4]
-¡Tarifa completa!
-
-[TAXI5]
-¡¡DE VELOCIDAD!!
-
-[TAXI6]
-Misión de taxi terminada
-
-[FRANGO]
-~g~¡Salvatore quiere que ayudes a Toni a tratar con los Triad primero!
-
-[PAGEB12]
-Policía Bribe entregado en el escondite
-
-[PAGEB13]
-Salud entregada en el escondite
-
-[PAGEB14]
-Adrenalina entregada en el escondite
-
-[KM1_4]
-~g~¡Necesitas un coche de policía para hacer el trabajo!
-
-[CAT1_B]
-trae 500.000 a la Villa en Cedar Grove.
-
-[JM2_C]
-Tiene un puesto de fideos en China Town.
-
-[RM6_1]
-Aquí está la llave de la cerradura.
-
-[RM6_2]
-Encontrarás algo de dinero en metálico y 'suministros' que he almacenado en caso de que las cosas se pongan feas.
-
-[RM6_3]
-Nos vemos pronto.
-
-[FE_INIP]
-Iniciando y cargando el Menú de Pausa... Por favor espera.
-
-[FESZ_CA]
-Cancelar
-
-[FESZ_QU]
-Abandonar
-
-[FESZ_L1]
-¡Partida guardada con éxito!
-
-[FESZ_L2]
-Tu nombre guardado es:
-
-[FESZ_OK]
-ACEPTAR
-
-[FES_NGA]
-Partida nueva
-
-[FES_CAN]
-Cancelar
-
-[FESZ_QL]
-Todo progreso en tu partida actual no guardado será perdido. ¿Proceder con la carga?
-
-[FESZ_QD]
-¿Quieres borrar esta partida guardada?
-
-[FESZ_QO]
-¿Quieres sobreescribir este partida guardado?
-
-[FESZ_QR]
-¿Estás seguro de que quieres empezar una nueva partida? Todo progreso desde la última partida guardada será perdido. ¿Proceder?
-
-[FESZ_QS]
-¿QUIERES GUARDAR?
-
-[SLONFP]
-Puerto 1. Archivo protegido.
-
-[T4X4_1]
-'LUGAR DE JUEGOS DEL PATRIOTA'
-
-[T4X4_2]
-'UN PASEO POR EL PARQUE'
-
-[T4X4_3]
-'AGARRADO!'
-
-[MM_1]
-'DISTURBIO DE DIFERENTES NIVELES'
-
-[T4X4_1A]
-~g~Tienes ~y~5 minutos ~g~ para conseguir ~y~ 15~g~ puestos de control. ~g~Puedes conseguirlos en ~y~CUALQUIER ORDEN
-
-[T4X4_1B]
-¡~1~ de 15!
-
-[T4X4_1C]
-~y~PASA A TRAVES ~g~ del primer puesto de control para que comience el cronómetro. ~g~Cada puesto de control te acreditará con ~y~20 SEGUNDOS ~g~.
-
-[T4X4_2A]
-¡¡~g~Tienes ~y~2 minutos ~g~ para conseguir ~y~12~g~ puestos de control!! ~g~Puedes conseguirlos en ~y~ CUALQUIER ORDEN.
-
-[T4X4_2B]
-¡~1~ de 12!
-
-[T4X4_2C]
-~y~PASA A TRAVÉS ~g~ del primer puesto de control para que comience el cronómetro. ~g~Cada puesto de control te premiará con ~y~10 SEGUNDOS~g~
-
-[T4X4_3A]
-~g~Tienes ~y~5 minutos ~g~ para conseguir ~y~20~g~ puestos de control. ~g~Puedes conseguirlos en ~y~CUALQUIER ORDEN.
-
-[T4X4_3B]
-~Y~PASA A TRAVES ~g~ del primer puesto de control para que comience el cronómetro. ~g~Cada puesto de control te premiará con ~y~15 SEGUNDOS ~g~.
-
-[T4X4_3C]
-¡~1~ de 20!
-
-[T4X4_F]
-¡~r~Saliste bajo fianza! ¿Demasiado duro para ti?
-
-[MM_1_A]
-¡~g~Tienes ~y~2 minutos ~g~ para conseguir ~y~20 puestos de control ~g~ en el multiniveles! ~g~Puedes conseguirlos en ~y~CUALQUIER ORDEN.
-
-[MM_1_B]
-¡~1~ de 20!
-
-[MM_1_C]
-~g~Eso son 20 segundos, más ~y~5 SEGUNDOS ~g~ por cada puesto de control. ~g~El cornómetro comenzará ~y~ INMEDIATAMENTE.
-
-[FM2_14]
-~r~¡Estuviste muy cerca y asustaste a Curly!
-
-[FM2_15]
-~g~No te acerques demasiado o Curly ¡sospechará algo!
-
-[UPSIDE]
-~r~¡Giraste las ruedas!
-
-[FM2_16]
-ASUSTOMETRO:
-
-[LM3_11]
-~g~Misty no irá en el autobús,¡hazte con otro vehículo!
-
-[LANDSTK]
-Landstalker
-
-[IDAHO]
-Idaho
-
-[STINGER]
-Stinger
-
-[LINERUN]
-Linerunner
-
-[PEREN]
-Perennial
-
-[SENTINL]
-Sentinel
-
-[PATRIOT]
-Patriot
-
-[FIRETRK]
-Coche de bomberos
-
-[TRASHM]
-Trashmaster
-
-[STRETCH]
-Stretch
-
-[MANANA]
-Manana
-
-[INFERNS]
-Infernus
-
-[BLISTA]
-Blista
-
-[PONY]
-Pony
-
-[MULE]
-Mule
-
-[CHEETAH]
-Cheetah
-
-[AMBULAN]
-Ambulancia
-
-[FBICAR]
-F.B.I.
-
-[MOONBM]
-Moonbeam
-
-[ESPERAN]
-Esperanto
-
-[TAXI]
-Taxi
-
-[KURUMA]
-Kuruma
-
-[BOBCAT]
-Bobcat
-
-[WHOOPEE]
-Mr Whoopee
-
-[BFINJC]
-Inyección BF
-
-[POLICAR]
-Policía
-
-[ENFORCR]
-Enforcer
-
-[SECURI]
-Securicar
-
-[BANSHEE]
-Banshee
-
-[PREDATR]
-Predator
-
-[BUS]
-Bus
-
-[RHINO]
-Rhino
-
-[BARRCKS]
-Barracas OL
-
-[TRAIN]
-Tren
-
-[HELI]
-Helicóptero
-
-[DODO]
-Dodo
-
-[COACH]
-Coach
-
-[CABBIE]
-Cabbie
-
-[STALION]
-Stallion
-
-[RUMPO]
-Rumpo
-
-[RCBANDT]
-Bandido RC
-
-[BELLYUP]
-Triad
-
-[MRWONGS]
-Mr Wongs
-
-[MAFIACR]
-Mafia
-
-[YARDICR]
-Yardie
-
-[YAKUZCR]
-Yakuza
-
-[DIABLCR]
-Diablo
-
-[COLOMCR]
-Cartel
-
-[HOODSCR]
-Hoods
-
-[AEROPL]
-Avioneta
-
-[SPEEDER]
-Veloz
-
-[REEFER]
-Chaquetón
-
-[PANLANT]
-Panlantic
-
-[FLATBED]
-Flatbed
-
-[YANKEE]
-Yankee
-
-[BORGNIN]
-Borgnine
-
-[TOYZ]
-TOYZ
-
-[FEST_DF]
-Distancia recorrida a pié (millas)
-
-[FEST_DC]
-Distancia recorrida en coche (millas)
-
-[FESTDFM]
-Distancia recorrida a pié (m)
-
-[FESTDCM]
-Distancia recorrida en coche (m)
-
-[FEST_R1]
-Área de juego Patriota en segundos
-
-[FEST_R2]
-Un paseo por el Parque en segundos
-
-[FEST_R3]
-¡Agarrado! en segundos
-
-[FEST_RM]
-Disturbio en el multiniveles en segundos
-
-[FEST_LS]
-Gente salvada en una ambulancia
-
-[FEST_CC]
-Criminales matados en Misión Vigilante
-
-[FEST_FE]
-Total de fuegos extinguidos
-
-[FEST_LF]
-Vuelo más largo en Dodo
-
-[FEST_BD]
-Mejor idoneo para desconectar la bomba
-
-[FEST_RP]
-Rampas pasadas
-
-[FEST_MP]
-Misiones pasada
-
-[FEST_BB]
-Pelea bling-bling:
-
-[FEST_H0]
-Máximos puestos de control
-
-[FEST_GC]
-Total de Coches de gangsters:
-
-[FEST_H1]
-Destrucción Diablo
-
-[FEST_H2]
-Masacre de Mafia
-
-[FEST_H3]
-Calamidad en el Casino
-
-[FEST_H4]
-Destructor Rumpo
-
-[USJI1]
-TEXTO NO MAS REQUERIDO
-
-[USJI2]
-TEXTO NO MAS REQUERIDO
-
-[USJI3]
-TEXTO NO MAS REQUERIDO
-
-[USJ]
-¡BONO DE ACROBACIA UNICA!
-
-[SPRAY]
-Conduce tu vehículo a la tienda de pintura para perder tu ~h~nivel de buscado~w~, ~h~reparar ~w~ y ~h~ repintar ~w~ tu vehículo. Coste - ~h~1.000$
-
-[HM1_1]
-~g~Congela 20 Purpura Nines en 2 minutos 30 segundos.
-
-[KM1_8A]
-Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para ~h~ activar la bomba, ~w~ recuerda apartarte del camino.
-
-[KM1_8D]
-Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para ~h~ activar la bomba, ~w~ recuerda apártarte del camino.
-
-[KM1_12]
-~g~¡Llévalo al dojo pero deshazte primero de los policías!
-
-[RATNG1]
-Carterista
-
-[RATNG2]
-Querido
-
-[RATNG3]
-Ladrón
-
-[RATNG4]
-Chorizo
-
-[RATNG5]
-Goon
-
-[RATNG6]
-Hombre sobre ruedas
-
-[RATNG7]
-Músculos de alquiler
-
-[RATNG8]
-Reparador
-
-[RATNG9]
-Asociado
-
-[RATNG10]
-Limpiador
-
-[RATNG11]
-Asesino
-
-[RATNG12]
-Hombre diestro
-
-[RATNG13]
-Ejecutor
-
-[RATNG14]
-Capo
-
-[RATNG15]
-Jefe
-
-[1010]
-~r~Tu vehículo está volcado
-
-[1011]
-~r~Tu vehículo está volcado
-
-[1012]
-~r~Tu vehículo está volcado
-
-[1013]
-~r~Tu vehículo está volcado
-
-[1014]
-~r~Tu vehículo está volcado
-
-[JM4_10]
-VALE, Chaval. Llévame a la lavandería de Chinatown primero, tengo un negocio del que ocuparme.
-
-[JM4_11]
-Esas mujeres que lavan no están recibiendo su dinero de protección.
-
-[JM4_12]
-Y vigila el coche, Joey acaba de arreglar ese montón de basura
-
-[JM4_13]
-Entonces no me vengas con cuentos, ¿VALE?
-
-[KM4_11]
-~g~¡Llévate el dinero de vuelta al casino!
-
-[FEF_BR2]
-Encuéntralo de nuevo leyendo cualquier informe de misión conseguido hasta la fecha.
-
-[TRAIN_1]
-Estación Kurowski
-
-[TRAIN_2]
-Estación Rothwell
-
-[TRAIN_3]
-Estación Baillie
-
-[SUBWAY1]
-Estación Portland
-
-[SUBWAY2]
-Estación Rockford
-
-[SUBWAY3]
-Estación Staunton South
-
-[SUBWAY4]
-Terminal Shoreside
-
-[MEA4_2]
-~r~¡Marty Chonks está muerta!
-
-[SPRAY1]
-Lleva tu vehículo a la tienda de pintura para perder tu ~h~nivel de buscado~w~, ~h~reparar~w~y ~h~repintar ~w~tu vehículo. Coste - ~h~ 1.000$ ~w~. Esta vez es gratis.
-
-[JM4_A]
-Sí, lo sé Toni, la he puesto a tono. Ella está a punto, ¿sabes lo que de digo?
-
-[JM4_5]
-Pasa más tarde y les daremos algo para que lave, ¡sus propias ropas manchadas de sangre!
-
-[AMMU_A]
-Luigi dijo que tú necesitabas una pieza...
-
-[AMMU_B]
-Joey me dijo que te armáramos...
-
-[AMMU_C]
-Así que ve por la parte de atrás de la tienda. Te dejé un nueve en el patio.
-
-[AMMU_D]
-Te conseguí todas las defensas necesarias para la casa.
-
-[AMMU_E]
-¿También quieres una licencia?
-
-[AMMU_F]
-No necesito ver ningún documento, pareces de fiar.
-
-[DETON]
-DETONACION:
-
-[DRIVE_A]
-Ten un Uzi seleccionado cuando entres en un vehículo, entonces mira a la izquierda o a la derecha y pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para disparar.
-
-[DRIVE_B]
-Ten un Uzi seleccionado cuando entres a un vehículo, entonces mira a la izquierda o a la derecha y pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para disparar.
-
-[RECORD]
-~g~¡¡NUEVO RECORD!!
-
-[NRECORD]
-~r~¡NO HAY NUEVO RECORD!
-
-[RCHELP]
-Pulsa botón ~k~~PED_FIREWEAPON~, o conduce el coche de RC hasta las ruedas de un coche para detonarlo.
-
-[RCHELPA]
-Pulsa el botón ~k~~PED_FIREWEAPON~, o conduce el coche RC hasta unas ruedas de coche para detonarlo.
-
-[RC_1]
-¡Tienes 2 minutos para volar cuantos coches de gangsters Diablo sean posibles!
-
-[RC_2]
-¡Tienes 2 minutos para bolar cuantos coches de gangsters Mafia sean posibles!
-
-[RC_3]
-Tienes 2 minutos para bolar cuantos coches de gangsters Yakuza sean posibles!
-
-[RC_4]
-¡Tienes 2 minutos para volar cuantos coches de gangsters Yardie sean posibles!
-
-[RC_5]
-Tienes 2 minutos para volar cuantos coches de gangsters Hood sean posibles!
-
-[RC_6]
-Tienes 2 minutos para volar cuantos coches de gangsters Cartel sean posibles!
-
-[RAMPAGE]
-¡¡ATAQUE!!
-
-[RAMP_P]
-¡ATAQUE COMPLETADO!
-
-[RAMP_F]
-ATAQUE FALLIDO
-
-[PAGE_00]
-.
-
-[PAGE_01]
-¡Mata ~1~ Diablo en 120 segundos!
-
-[PAGE_02]
-¡Destruye ~1~ vehículo en 120 segundos!
-
-[PAGE_03]
-¡Mata ~1~ Mafia en 120 segundos!
-
-[PAGE_04]
-¡Mata ~1~ Tríadas en 120 segundos!
-
-[PAGE_05]
-¡Mata ~1~ Tríada en 120 segundos!
-
-[PAGE_06]
-¡Destruye ~1~ vehículo en 120 segundos!
-
-[PAGE_07]
-¡Revienta ~1~ cabezas Yardie en 120 segundos!
-
-[PAGE_08]
-¡Quema ~1~ Yakuza en 120 segundos!
-
-[PAGE_09]
-¡Destruye ~1~ vehículo en 120 segundos!
-
-[PAGE_10]
-¡Destruye ~1~ vehículo en 120 segundos!
-
-[PAGE_11]
-¡Aniquila ~1~ Yardie en 120 segundos!
-
-[PAGE_12]
-¡Quema ~1~ Yakuza en 120 segundos!
-
-[PAGE_13]
-¡Vuela ~1~ Yardie en 120 segundos!
-
-[PAGE_14]
-¡Fríe ~1~ Colombianos en 120 segundos!
-
-[PAGE_15]
-¡Machaca ~1~ Hood en 120 segundos!
-
-[PAGE_16]
-¡Destruye ~1~ vehículo en 120 segundos!
-
-[PAGE_17]
-¡Machaca ~1~ Colombianos con un coche en 120 segundos!
-
-[PAGE_18]
-¡Conduce por ahí en coche y destruye ~1~ vehículo en 120 segundos!
-
-[PAGE_19]
-¡Corta ~1~ cabezas colombiana en 120 segundos!
-
-[PAGE_20]
-¡Córtale la cabeza a ~1~ Hoods en 120 segundos!
-
-[JM1_A]
-Ey, estoy aburrida, ¿cuándo vas a tomarme?
-
-[JM1_B]
-En un momento, cariño, tengo un pequeño negocio del que ocuparme.
-
-[JM1_C]
-Tengo un pequeño trabajo para ti, colega.
-
-[JM1_D]
-Los hermanos Forelli me deben dinero desde hace mucho tiempo
-
-[JM1_E]
-y ellos necesitan que alguien les enseñe un poco de respeto.
-
-[JM1_F]
-Labios Forelli está poniéndose como un cerdo en el St Marks Bistro
-
-[JM1_G]
-así que roba su coche y llévalo a la tienda de bombas 8-Ball en Harwood.
-
-[JM1_H]
-Conoces 8-Ball, ¿verdad?
-
-[JM1_I]
-Una vez que esté cargado con una bomba, ve a aparcar el coche donde lo encontraste.
-
-[JM1_J]
-Luego siéntate y contempla todo el espectáculo.
-
-[JM1_K]
-Pero cuidado, no va a estar comiendo toda la vida.
-
-[CAT2_A1]
-¡Vamos, perra estúpida!
-
-[CAT2_A]
-La verdadera cuestión es, lo que quieres es ¿rescatar a María o llevarme a mí de vuelta?
-
-[CAT2_B]
-Bueno, tengo noticias para ti,
-
-[CAT2_B2]
-dispararte será un placer pero salir contigo fue sólo un asunto de negocios.
-
-[CAT2_C]
-¡Eres muy peccino, amigo!
-
-[CAT2_D]
-Echame el dinero
-
-[CAT2_E]
-Has sido un chico aplicado!
-
-[CAT2_E2]
-Pero no has aprendido, yo no soy de fiar
-
-[CAT2_E3]
-Mata al idiota
-
-[CAT2_J]
-Atrapa esta cosa en el aire!
-
-[HM5_1]
-Tío, Ice dijo que vendría. Hay reglas. Bates sólo. No armas, no coches.
-
-[HM5_5]
-Esta es una batalla por el respeto, ¿vale?
-
-[HELP14]
-Para conseguir armas pasa sobre ellas. Estas no pueden conseguirse cuando se está dentro de un vehículo.
-
-[CRUSH]
-Aparca en el área señalada y sal de tu vehículo. El vehículo será entonces triturado.
-
-[DIAB2_B]
-Una banda de infames me ha amenazado con quitarme mi afiliación si no les pago una parte.
-
-[DIAB2_C]
-Amenazaron al hombre equivocado, amigo.
-
-[DIAB2_D]
-Ellos tienen debilidad por el helado.
-
-[DIAB2_E]
-Consigue la bomba que he ocultado en Harwood,
-
-[DIAB2_F]
-secuestra la furgoneta habitual de los helados en sus rondas.
-
-[DIAB2_G]
-y seduce a esos idiotas para que caigan en su ruina con el jeengle-jeengle
-
-[DIAB2_H]
-Se ocultan en un almacén de Atlantic Quay
-
-[DIAB3_A]
-Algunas Tríadas insolentes robaron mi bonito coche anoche,
-
-[DIAB3_B]
-destrózalo y deja que se queme.
-
-[DIAB3_C]
-Algunos de mi más preciosos artículos sobre burros estaban en el maletero -
-
-[DIAB3_D]
-objetos de colección que son irremplazables, amigo.
-
-[DIAB3_E]
-He escondido un arma punzante en el borde de Chinatown.
-
-[DIAB3_F]
-Tómalo y enseña a esos vándalos de las Tríadas a tenerle miedo a la ira bien fundada de El Burro.
-
-[DIAB3_1]
-MATA 25 TRIADS
-
-[DIAB4_A]
-¡Un ladrón oportunista ha robado mi furgoneta donde llevaba mis últimas publicaciones periodísticas!
-
-[DIAB4_B]
-Pero ese idiota colgado de SPANK ha dejado las puertas de atrás abiertas
-
-[DIAB4_C]
-y ahora toda mi bellamente editada,
-
-[DIAB4_D]
-literatura para adultos con tan buen gusto fotografiada está siendo esparcida por todo Liberty!
-
-[DIAB4_E]
-Coge la furgoneta y sigue el sendero de Donkey Does Dallas volúmenes 1,2 y 3
-
-[DIAB4_F]
-conseguido según vas.
-
-[DIAB4_G]
-Cuando hayas seguido el sendero de ese ladronzuelo con cabeza de SPANK, acaba con él!
-
-[DIAB4_H]
-Luego reparte mi material de Revistas XXX en el Red Light District (Distrito de la luz roja)
-
-[DIAB4_1]
-~g~Lleva la furgoneta a la parte de atrás de Revistas XXX
-
-[HM1_E]
-Quiero mostrarle a esos perros macarras cómo funciona un verdadero tiroteo desde un vehículo
-
-[HM1_H]
-¡Llévate a esos nueve fuera de aquí!!
-
-[HM2_A]
-Esos Nines me están presionando.
-
-[HM2_B]
-Esos perros tienen coches blindados y están traficando con SPANK...
-
-[HM2_C]
-y colocándoselo a los hermanos sin pudor.
-
-[HM2_D]
-Hay un coche aparcado arriba de la calle.
-
-[HM2_E]
-Hay algo de material allí dentro para poner a esos mariquitas en su sitio...
-
-[HM3_A]
-Algún effa ha cableado mis ruedas para bolarlas.
-
-[HM3_B]
-Si pierdo esas ruedas, mi reputación en la calle estará muerta.
-
-[HM3_C]
-Coge mi coche y llévalo al garaje de St Marks, ¿vale tío?
-
-[HM3_D]
-Déjales difundir eso, déjales que se ocupen de esa bomba.
-
-[HM3_E]
-Los relojes están avanzando y el cableado está liado.
-
-[HM3_F]
-Otro fallo más y esa cosa podría volar.
-
-[HM3_G]
-¡Ahora muévelo!
-
-[HM4_A]
-Tío, un vuelo de la Reserva federal se acaba de estrellar en el Francis International.
-
-[HM4_B]
-Hay platino por toda la pista.
-
-[HM4_C]
-Consigue un coche y agarra todo lo que puedas.
-
-[HM4_F]
-Puedes dejar el marrón en uno de mis garajes.
-
-[HM4_G]
-Este platino es muy pesado y va a hacer que tus ruedas se muevan más despacio.
-
-[HM4_H]
-Así que haz repartos regulares en el garaje.
-
-[HM5_A]
-Esos Nines se han quedado con pocos costrosos...
-
-[HM5_B]
-pero todavía quieren seguir.
-
-[HM5_C]
-Aceptaron un cuerpo a cuerpo. .
-
-[HM5_D]
-Uno de sus gangsters contra dos de los nuestros, o mejor...
-
-[HM5_E]
-dos de vosotros
-
-[HM5_F]
-Yo os apoyaré pero...
-
-[HM5_G]
-La vista de mi libertad bajo fianza no es hasta dentro de tres meses,
-
-[HM5_H]
-¿sabes lo que te digo?
-
-[HM5_I]
-Ve y reúnete con mi hermano pequeño,
-
-[HM5_J]
-Te enseñará dónde están peleando por una causa justa.
-
-[MEA1_B]
-El nombre es Chonks, Marty Chonks.
-
-[MEA1_C]
-Soy el dueño de la fábrica de comestibles Bitchin' Dog que está a la vuelta de la esquina.
-
-[MEA1_D]
-Tengo problemas económicos, pero ¡ey!, y quién no, ¿verdad?
-
-[MEA1_E]
-Voy a reunirme con el director de mi banco más tarde.
-
-[MEA1_F]
-Es un tramposo bastardo que sigue engordando los pagos del préstamo para llevarse una buena porción.
-
-[MEA1_G]
-Coge mi coche, ve a buscarle y traelé de vuelta.
-
-[MEA1_H]
-¡¡Tengo una pequeña sorpresa para ese parasito chupasangres!!
-
-[MEA2_A]
-Contraté algunos ladrones para que entraran en mi apartamento...
-
-[MEA2_C]
-Los bastardos ladrones amenazan con contárselo a la compañía de seguros,
-
-[MEA2_D]
-si no les doy una parte
-
-[MEA2_E]
-¿Puedes creerlo?
-
-[MEA2_F]
-He dejado un coche dentro de las puertas de la fábrica.
-
-[MEA2_G]
-Úsalo para ir a recogerles en su territorio en el Red Light District.
-
-[MEA2_H]
-Luego traelos de vuelta a la fábrica de manera que pueda hacerles ver el punto de vista de Marty.
-
-[MEA3_A]
-El negocio se va a hundir a no ser que me haga con una buena cantidad de dinero muy pronto.
-
-[MEA3_B]
-Mi esposa tiene una póliza de seguro y todo lo que ella ha sido para mí es un agujero en mis bolsillos.
-
-[MEA3_C]
-He dejado un coche en el lugar habitual
-
-[MEA3_D]
-Ve a recoger a mi esposa en Classic Nails y traela de vuelta a la fábrica.
-
-[MEA4_A]
-Diablos,¡tengo problemas!
-
-[MEA4_B]
-Resulta que mi esposa estaba viéndose con un tipo a quien le debo dinero.
-
-[MEA4_C]
-¡Parece muy enfadado y está tratando de recuperar su dinero!
-
-[MEA4_E]
-cree que voy a devolverle el dinero...
-
-[MEA4_F]
-pero yo creo que...
-
-[MEA4_G]
-¡los perros de Liberty van a disfrutar de un nuevo sabor este mes!
-
-[WELCOME]
-BIENVENIDO A
-
-[HM1_2]
-~g~Hazte con un vehículo, y recuerda que sólo cuentan los asesinatos con Uzi desde el coche.
-
-[HELP8_B]
-Pulsa el ~h~ botón ~k~~PED_SNIPER_ZOOM_IN~~w~ para ~h~ hacer zoom en ~w~ con el rifle y el ~h~botón ~k~~PED_SNIPER_ZOOM_OUT~~w~ para ~h~ retirar el zoom ~w~ otra vez.
-
-[LRQC_1]
-Asuka y yo vamos a tener que hablar, uh,
-
-[LRQC_2]
-¿Por qué no das un paseo por ahí?
-
-[LRQC_3]
-Necesitas un lugar para esconderte
-
-[LRQC_4]
-Hay un almacén en la orilla de Belleville que puede tener lo que necesitas.
-
-[LRQC_5]
-Regresa a mi apartamento cuando estés listo,
-
-[LRQC_6]
-y podemos tener una pequeña charla.
-
-[JM6_5]
-~g~Necesitas un vehículo para escapar, ¡idiota!
-
-[JM2_F]
-Si necesitas una pieza ve por detrás de AmmuNation, enfrente del metro.
-
-[LOVE4_7]
-~g~Hay una zona de construcción en Staunton Island, puede que llevaran el paquete allí.
-
-[LOVE4_8]
-~g~Necesitarás un coche para abrir el garaje.
-
-[TSCORE]
-GANANCIAS: ~1~ $
-
-[AM1_9]
-~r~¡Salvatore ha escapado de vuelta al club de Luigi!
-
-[AM1_6]
-~g~Si te dejas ver por el club de Luigi, ¡la Mafia te encontrará!
-
-[TM2_3]
-~g~¡Es una trampa! ¡Liquidadlos a todos!
-
-[FM4_1]
-Esta es María. ¡El coche es una trampa! Encuéntrame en el lado sur de Callahan Bridge.
-
-[JM1_7]
-~g~¡Cierra la puerta del coche! ¡Se dará cuenta!
-
-[KM5_1]
-~g~¡¡TRAFICANTE DESMENUZADO!!
-
-[KM5_6]
-~g~Debes matar al menos 8 traficantes Yardie.
-
-[KM5_7]
-~g~¡Mátalos rápido! Una vez que venden el SPANK se retiran de las calles.
-
-[RM3_8]
-~r~¡¡El coche es un señuelo!!
-
-[LM3_8]
-Hola, soy Joey.
-
-[LM3_9]
-Luigi dijo que tú eras de fiar, así que vuelve más tarde,
-
-[KM3_5]
-~g~Toca el claxon para poder hacer el trato.
-
-[LOVE7]
-DESAPARICION DEL AMOR
-
-[LOVE2_5]
-~g~¡Kenji es carne de parachoques! ¡Sal de Newport y deshazte del coche!
-
-[AS2_11]
-~g~ ~1~ DE 9!
-
-[GARAGE1]
-~g~Sal del vehículo y camina afuera.
-
-[KM3_11]
-~g~El Cartel ha sido atacado y el maletín no ha sido recuperado.
-
-[KM3_12]
-~g~Mata a todos los colombianos, destruye los vehículos y recupera el maletín.
-
-[KM3_13]
-~g~Lleva el maletín de vuelta al casino.
-
-[RM5_6]
-~g~¡Ha salido en libertad bajo fianza! ¡¡Destruye su chaleco salvavidas con un vehículo o una explosión!!
-
-[PBOAT_1]
-Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para disparar los cañones del barco.
-
-[PBOAT_2]
-Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para disparar los cañones del barco.
-
-[DIAB1_B]
-Este es El Burro de los Diablos.
-
-[DIAB1_D]
-Ahora estás en Liberty, pero ya te estás ganando una reputación en las calles.
-
-[DIAB1_E]
-Hay una carrera en la calle que empieza en la vieja escuela cerca de Callahan Bridge.
-
-[DIAB1_F]
-Consíguete unas ruedas y el primero que pase por todos los checkpoints gana el premio.
-
-[HM2_1]
-Usa los buggies RC para destruir los coches blindados. Pulsa el ~h~botón ~k~~PED_FIREWEAPON~ ~w~ para detonar.
-
-[HM2_1A]
-Usa los buggies RC para destruir los coches blindados. Pulsa el ~h~botón ~k~~PED_FIREWEAPON~~w~ para detonar.
-
-[HM2_2]
-~r~¡Fallaste en la destrucción de los coches blindados!
-
-[HM2_6]
-~g~¡Coche blindado destrozado!
-
-[RM3_A]
-Conozco un hombre muy importante en la ciudad, un tipo suave,
-
-[RM3_H]
-con gustos exóticos y el suficiente dinero para pagárselos.
-
-[RM3_B]
-Está involucrado en un asunto legal y la acusación tiene fotos de él muy comprometedoras
-
-[RM3_C]
-en una fiesta en la morgue o algo así.
-
-[LOVE6_A]
-Una lección en negocios, amigo mío.
-
-[LOVE6_E]
-Si tienes una mercancía única, el mundo y su mujer tratarán de quitártela de tus garras.
-
-[LOVE6_C]
-Equipos SWAT han acordonado el área alrededor de mi asociado y el paquete.
-
-[LOVE6_D]
-Ve hacia allí, recoge la furgoneta y actúa como un señuelo.
-
-[LOVE6_F]
-Mantenles ocupados y él podrá escaparse bien.
-
-[AM3_C]
-¡Está probablemente afuera en la bahía mientras lees esto! ¡Roba un barco de policía, y hunde su carrera!
-
-[FESZ_UC]
-CANCELAR
-
-[FEDS_SM]
-L1,R1-CAMBIAR MENU Mientras se busque un menú en particular:
-
-[FEDS_AS]
-;=-CAMBIAR SELECCION
-
-[FEDSAS2]
-<>-CAMBIAR SELECCION
-
-[FEDS_SS]
-L1,R1-CAMBIAR SELECCION
-
-[FEDSSC1]
-;-MOVIMIENTO MAS RAPIDO
-
-[FEDSSC2]
-=-DETENER MOVIMIENTO
-
-[MEA2_3]
-~g~Traer el coche de vuelta a la fábrica.
-
-[RM1_3]
-~r~¡McAffrey se escapó!
-
-[RM1_4]
-~g~¡Has usado todas las granadas! ¡Consigue más en Ammunation!
-
-[RM1_5]
-~g~¡Vuelve y quema la casa de seguridad!
-
-[RM6_4]
-~g~ Pásate por la taquilla y consigue el cargamento de Ray.
-
-[RM6_5]
-~g~La CIA tiene el puente bajo vigilancia, encuentra otra ruta para pasar
-
-[HM2_F]
-y destroza todo su material blindado.
-
-[HM_4]
-'LINGOTES DE ORO'
-
-[MEA2_B5]
-TEXTO NO MAS REQUERIDO
-
-[MEA1_B5]
-TEXTO NO MAS REQUERIDO
-
-[MEA3_B5]
-TEXTO NO MAS REQUERIDO
-
-[MEA4_B7]
-pero si pasas por mi oficina...
-
-[MEA3_B4]
-¿ Marty quiere verme? Bueno, pues que sea rápido porque tengo que ir a la peluquería.
-
-[KM3_7]
-¡Es una trampa Yakuza, tío!
-
-[FES_LOF]
-Fallo al cargar.
-
-[P1INSA]
-Memory card (PS2) insertada en la ranura para MEMORY CARD 1. ~1~K de espacio disponible para guardar. ~1~K necesario.
-
-[P1INSN]
-Memory card (PS2) insertada en la ranura para MEMORY CARD 1. No hay espacio disponible para guardar. Por favor borra algunos archivos.
-
-[FES_SLO]
-GUARDAR ARCHIVO
-
-[FES_ISC]
-ESTA CORRUPTO
-
-[FESZ_TI]
-GUARDAR Z1
-
-[FESZ_SA]
-Guardar Partida
-
-[P1NOIN]
-No hay memory card (PS2) insertada en la ranura para MEMORY CARD 1
-
-[P1INSE]
-Memory card (PS2) insertada en la ranura para MEMORY CARD 1.
-
-[MC_LDFL]
-¡Error al cargar!
-
-[MC_NWRE]
-Ahora, reinicio de partida
-
-[LOVE6_3]
-~g~Tienes ~1~ segundo para volver al Securicar antes de que falles en la misión.
-
-[LOVE6_4]
-~r~¡Te deshiciste del Securicar señuelo!
-
-[HELP1]
-Detente en el centro del marcador azul.
-
-[HELP12]
-Vaya hasta el centro del marcador azul para dar comienzo una misión.
-
-[HJSTAT]
-Distancia: ~1~. ~1~m. Altura: ~1~.~1~m. Vueltas: ~1~. Rotación: ~1~_
-
-[HJSTATW]
-Distancia: ~1~.~1~m. Altura: ~1~.~1~m. Vueltas: ~1~. Rotación: ~1~_ Y, ¡qué buen aterrizaje!
-
-[DIAB1_5]
-TIEMPO DE CARRERA
-
-[LOVE3_4]
-~r~¡Has destruído el avión!!
-
-[F_FAIL1]
-¡Misión de coche de bomberos terminada!
-
-[F_CANC]
-~r~ ¡Misión de coche de bomberos cancelada!
-
-[F_EXTIN]
-FUEGOS:
-
-[A_COMP1]
-¡Misión de paramédicos completada!
-
-[A_CANC]
-~r~¡Misión de paramédicos cancelada!
-
-[A_COMP3]
-¡Misión de paramédicos completada! ¡Nunca te cansarás cuando estés corriendo!
-
-[ATUTOR]
-Pulsa el ~h~ botón ~k~~TOGGLE_SUBMISSIONS~~w~ para conectar o desconectar misiones de paramédico.
-
-[ATUTOR3]
-Pulsa el ~h~ botón ~k~~TOGGLE_SUBMISSIONS~~w~ para conectar o desconectar misiones de paramédico.
-
-[ALEVEL]
-Nivel de misión de paramédico ~1~
-
-[A_FAIL1]
-Misión de paramédico terminada.
-
-[FEST_HA]
-Nivel más alto de misión de paramédico
-
-[A_SAVES]
-GENTE SALVADA: ~1~
-
-[C_KILLS]
-CRIMINALES MATADOS: ~1~
-
-[HM1_B]
-Tengo un problema, están tratando de camelarme.
-
-[AM2_A]
-La muerte de Salvatore es una placentera noticia,
-
-[AM2_A2]
-eres un asesino eficaz - Eso me gusta en un hombre.
-
-[AM2_B]
-Este es mi hermano Kenji.
-
-[AM2_C]
-Asuka tiene un pequeño trabajo para ti, pero cuando hayas terminado, pásate por mi casino y podremos hablar.
-
-[AM2_D]
-Justo como Kenji, siempre tratando de jugar con mis juguetes.
-
-[AM2_E]
-Mi fuente en la policía me dice que la Mafia está acechando nuestros intereses en la ciudad
-
-[AM2_E2]
-con el propósito de localizarte.
-
-[AM2_F]
-No podemos continuar con nuestras operaciones hasta que entablen negociaciones.
-
-[AM2_G]
-Liquida a esos estúpidos espías y acaba con esta vendetta de una vez por todas.
-
-[F_START]
-~g~Informe de vehículo en llamas en el ~a~área. Ve y extingue el fuego.
-
-[AM4_1A]
-Ve al teléfono de West Belleville Park.
-
-[AM4_1B]
-Ve al teléfono de Liberty Campus.
-
-[AM4_1C]
-Ve al teléfono de South Belleville Park.
-
-[AM4_1D]
-Encuéntrame en el bloque del baño en el parque.
-
-[HJSTATF]
-Distancia:~1~pies. Altura: ~1~pies. Vueltas: ~1~. Rotación: ~1~_
-
-[HJSTAWF]
-Distancia: ~1~pies. Altura: ~1~pies. Vueltas: ~1~. Rotación: ~1~_. Y, ¡qué buen aterrizaje!
-
-[HM1_F]
-Pero vigila a tus espaldas, habrá Jacks en las calles que creerán que estás tratando de volarles también la cabeza.
-
-[HM1_D]
-'Nueves' es su etiqueta y púrpura es su bandera y cada día ellos sacuden sus colores...
-
-[HM1_G]
-otro día más que los 'Jacks' parecen blanditos.
-
-[MEA2_B]
-y roba lo que encuentres para que así pueda reclamarle al seguro como haces tú.
-
-[TM3_H]
-~w~Te lo montaste bien allí, chaval, muy bien.
-
-[TM3_I]
-~w~Vamos, te presentaré al Don.
-
-[TM3_J]
-~w~¡Eeeyyyy! ¡Luigi!
-
-[TM3_K]
-~w~Oh, mis chicas han estado echándote de menos mucho tiempo, Salvatore, has estado fuera mucho tiempo.
-
-[TM3_L]
-~w~Diles que una vez que nos hayamos ocupado de este desgraciado incidente,
-
-[TM3_M]
-~w~iremos todos al club para celebrar, ¿vale?
-
-[TM3_N]
-~w~Ese es mi chico
-
-[TM3_N2]
-~w~¿Cómo lo llevas, papá?
-
-[TM3_O]
-~w~¿Has encontrado ya una buena mujer?
-
-[TM3_P]
-~w~Ey, tu madre, que en paz descanse, se retorcería en la tumba
-
-[TM3_Q]
-~w~si te viera sin una mujer.
-
-[TM3_R]
-~w~Lo sé, papá, me estoy ocupando de eso.
-
-[TM3_S]
-~w~¡TONI! ¿Cómo está tu madre?
-
-[TM3_T]
-~w~Ella es una gran mujer, ¿sabes? Fuerte. Firenze.
-
-[TM3_U]
-~w~Ella está bien... estupenda.
-
-[TM3_V]
-~w~Fantástico, fantástico. Ahora escuchadme, chavales, entrad dentro mientras yo hablo aquí con nuestro nuevo amigo.
-
-[TM3_W]
-~w~No veo más que cosas buenas para ti, hijo mío...
-
-[RM1_A]
-Esa bola de mierda, McAffrey, aceptó más sobornos que nadie.
-
-[RM1_B]
-Cree que va a conseguir una rebaja honorable de sus cargos si ofrece evidencias del estado
-
-[RM1_C]
-¡El ha cantado!
-
-[RM4_B]
-Tenemos que cerrarle la boca para siempre.
-
-[RM4_E]
-Quiero que se vaya a dormir con los peces en lugar de comérselos.
-
-[LOVE3_B]
-En su aproximación al aeropuerto esta noche, una avioneta ligera sobrevolará la bahía.
-
-[LOVE4_D]
-Desgraciadamente las autoridades aduaneras registraron el avión y lo estaban desguazando
-
-[LOVE4_H]
-hasta que yo intervine a pesar del gran coste personal.
-
-[LOVE4_E]
-Cruza el puente a Shoreside Vale, y ve al aeropuerto Francis International.
-
-[GTAB_A]
-Ey, saquemos esto de aquí. Dios sabe qué será.
-
-[GTAB_B]
-pero él parece quererlo a toda costa así que debe de tener algún valor.
-
-[GTAB_C]
-¡Quién diablos!
-
-[GTAB_D]
-¡TÚ!
-
-[GTAB_E]
-¡Ey, tranquilo, amigo! ¡De nada! De nada!
-
-[GTAB_F]
-¡Te dejé metiendo tu corazón en el charco!
-
-[GTAB_G]
-No dispares, amigo. No hay problema. Somos amigos. Mira, coge esto.
-
-[GTAB_H]
-¡No seas mariquita!
-
-[GTAB_I]
-¡No tenemos elección, nene!
-
-[GTAB_J]
-¡Siempre hay una elección, bastardo!
-
-[GTAB_K]
-¡Siento mucho lo de ese perro enloquecido, son todos iguales... ¿¿por favor??
-
-[GTAB_L]
-Así que la buscona se fué.
-
-[GTAB_M]
-Pero me has hecho un favor,
-
-[GTAB_N]
-no eres el único que tiene una cuenta pendiente con el Cartel,
-
-[GTAB_O]
-¡ese gusano mató a mi hermano!
-
-[GTAB_P]
-¡Nunca maté a ningún Yakuza!
-
-[GTAB_Q]
-¡MENTIROSO! Todos vimos al asesino del Cartel.
-
-[GTAB_R]
-¡Vamos a cazaros y a mataros a todos, perros colombianos!
-
-[GTAB_S]
-Estaré trabajando con nuestro querido amigo para extraerle información y un poco de placer.
-
-[GTAB_T]
-Tú, ven más tarde, estoy seguro que voy a necesitar tus servicios.
-
-[GTAB_U]
-Por favor, amigo, no me dejes con ella, ¡esa chica está loca! ¿Amigo?. Ey, ¡AMIIIGO!... ¡Aiiieeeaaaargghh!
-
-[LOVE5_A]
-Estás demostrando ser una inversión segura, algo muy raro en estos días que corren.
-
-[KM3_1]
-~g~¡El Cartel espera que una banda Yardie vaya y robe un coche Yardie! Dirígete hacia el norte, encontrarás uno en Newport.
-
-[LOVE1_1]
-~g~Ve a robar un coche de la banda Colombiana, para que puedas infiltrar el escondite, dirígete hacia el norte y encontrarás uno en Fort Staunton)
-
-[FM1_Q1]
-~w~¿Estás buscando un poco de diversión?. ¿Un poco de... hmmm? ¿Algo de zurra?
-
-[FM1_R]
-~w~Hola, chico. Hah, lo de siempre.
-
-[FM1_T]
-~w~Gracias Chico, nos vemos pronto.
-
-[FM1_W]
-~w~De acuerdo Fido, espera aquí y quédate pendiente del coche mientras yo voy a menear mi culo, ¿vale?
-
-[FM1_X]
-~w~VALE Fido, salgamos de aquí. ¡Uauhhh!
-
-[FM1_Q]
-~w~¡Ey María! ¡Es mi chica favorita!
-
-[FM1_S1]
-~w~Ey, a lo mejor deberías echar un vistazo en la fiesta del almacén en el lado este de Atlantic Quays.
-
-[FM1_U]
-~w~Gracias y disfruta. Es buen material
-
-[FM1_V]
-~w~Vamos Fido, ¡vamos a echar un vistazo a esa fiesta!
-
-[FM1_SS]
-~r~ESCÁNER: ~g~Cuatro-cinco a todas las unidades: Asistir redada de narcóticos en Atlantic Quays.
-
-[LOVE6_B]
-incluso aunque no sean conscientes de su verdadera valía.
-
-[TM3_A1]
-~r~¡El amigo de Joey!
-
-[TM3_A2]
-~r~¡Joey y Luigi han sido incinerados!
-
-[TM3_A3]
-~r~¡Joey, Luigi y Toni están quemados!
-
-[FM4_2]
-Escucha, Salvatore cree que estamos engañándole,
-
-[FM4_3]
-así que te ofreció al Cartel para poder hacer un trato.
-
-[FM4_4]
-No podía permitir que hiciera eso, o sea, lo peor es que,
-
-[FM4_4B]
-es mi culpa... porque le dije que éramos un asunto a tratar.
-
-[FM4_5]
-No me preguntes por qué. No lo sé.
-
-[FM4_6]
-Mira, eres un hombre marcado en terreno Mafia y yo tengo que salir de aquí también.
-
-[FM4_6B]
-¡He visto demasiados asesinatos. Demasiada sangre!
-
-[FM4_7]
-Es una amiga mía, ¿vale?, una vieja amiga... es Asuka, alguien en quien podemos confiar.
-
-[FM4_8]
-Vamos, ya vale de discursos.
-
-[FM4_9]
-Será mejor que salgamos de aquí antes de que haya más italianos histéricos pretendiendo hacer reuniones poco amistosas.
-
-[CRED001]
-ROCKSTAR STUDIOS
-
-[CRED002]
-PRODUCER
-
-[CRED003]
-LESLIE BENZIES
-
-[CRED004]
-ART DIRECTOR
-
-[CRED005]
-AARON GARBUT
-
-[CRED006]
-TECHNICAL DIRECTION
-
-[CRED007]
-OBBE VERMEIJ
-
-[CRED008]
-ADAM FOWLER
-
-[CRED009]
-DESIGN
-
-[CRED010]
-CRAIG FILSHIE
-
-[CRED011]
-WILLIAM MILLS
-
-[CRED012]
-CHRIS ROTHWELL
-
-[CRED013]
-JAMES WORRALL
-
-[CRED014]
-WRITTEN BY
-
-[CRED015]
-JAMES WORRALL
-
-[CRED016]
-PAUL KUROWSKI
-
-[CRED017]
-DAN HOUSER
-
-[CRED018]
-CHARACTERS
-
-[CRED019]
-IAN MCQUE
-
-[CRED020]
-ANIMATION & DIRECTION
-
-[CRED021]
-ALEX HORTON
-
-[CRED022]
-LEE MONTGOMERY
-
-[CRED023]
-AUTO DESIGN
-
-[CRED024]
-PAUL KUROWSKI
-
-[CRED025]
-ARTISTS
-
-[CRED026]
-KEIRAN BAILLIE
-
-[CRED027]
-ADAM COCHRANE
-
-[CRED028]
-GARY MCADAM
-
-[CRED029]
-MICHAEL PIRSO
-
-[CRED030]
-ANDREW SOOSAY
-
-[CRED031]
-ALISDAIR WOOD
-
-[CRED032]
-CODERS
-
-[CRED033]
-ALAN CAMPBELL
-
-[CRED034]
-MARK HANLON
-
-[CRED035]
-ANDRZEJ MADAJCZYK
-
-[CRED036]
-ALEXANDER ROGER
-
-[CRED037]
-GRAEME WILLIAMSON
-
-[CRED038]
-SCORE
-
-[CRED039]
-CRAIG CONNER
-
-[CRED040]
-STUART ROSS
-
-[CRED041]
-SOUND DESIGN & MASTERING
-
-[CRED042]
-ALLAN WALKER
-
-[CRED043]
-AUDIO PROGRAMMING
-
-[CRED044]
-RAYMOND USHER
-
-[CRED045]
-TEST MANAGER
-
-[CRED046]
-CRAIG ARBUTHNOTT
-
-[CRED047]
-LEAD TESTERS
-
-[CRED048]
-ANDY DUTHIE
-
-[CRED049]
-JOHN HAIME
-
-[CRED050]
-NEIL CORBETT
-
-[CRD050A]
-TESTERS
-
-[CRED051]
-GRAEME JENNINGS
-
-[CRED052]
-DAVID MURDOCH
-
-[CRED053]
-DAVID BEDDOES
-
-[CRED054]
-EDWIN SMITH
-
-[CRED055]
-MARK FLETT
-
-[CRED056]
-MICHAEL SUTHERLAND
-
-[CRED057]
-TECHNICAL SUPPORT
-
-[CRED058]
-LORRAINE ROY
-
-[CRED059]
-CHRISTINE CHALMERS
-
-[CRED060]
-ROCKSTAR
-
-[CRED061]
-EXECUTIVE PRODUCER
-
-[CRED062]
-SAM HOUSER
-
-[CRED063]
-PRODUCER
-
-[CRED064]
-DAN HOUSER
-
-[CRED065]
-DIRECTOR OF DEVELOPMENT
-
-[CRED066]
-JAMIE KING
-
-[CRED067]
-TECHNICAL PRODUCER
-
-[CRED068]
-GARY J. FOREMAN
-
-[CRED069]
-ASSOCIATE PRODUCER
-
-[CRED070]
-JEREMY POPE
-
-[CRED071]
-MUSIC SUPERVISOR
-
-[CRED072]
-TERRY DONOVAN
-
-[CRED073]
-ROCKSTAR PRODUCTION TEAM
-
-[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]
-VP OF MARKETING
-
-[CRED086]
-TERRY DONOVAN
-
-[CRED087]
-TECHNICAL COORDINATOR
-
-[CRED088]
-BRANDON ROSE
-
-[CRED089]
-QA MANAGER
-
-[CRED090]
-JEFF ROSA
-
-[CRED091]
-LEAD ANALYST
-
-[CRED092]
-ADAM DAVIDSON
-
-[CRED093]
-GAME ANALYST
-
-[CRED094]
-RICHARD HUIE
-
-[CRED095]
-TEST TEAM
-
-[CRED096]
-LANCE WILLIAMS
-
-[CRED097]
-JOE GREENE
-
-[CRED098]
-BRIAN PLANER
-
-[CRED099]
-OSWALD GREENE
-
-[CRED100]
-LIBERTY TREE EDITORIAL
-
-[CRED101]
-JAMES WORRALL
-
-[CRED102]
-DAN HOUSER
-
-[CRED103]
-ADAM TEDMAN
-
-[CRED104]
-PAUL YEATES
-
-[CRED105]
-JENEFER GROSS
-
-[CRED106]
-LAURA PATERSON
-
-[CRED107]
-CUT-SCENES
-
-[CRED108]
-SCRIPT BY DAN HOUSER AND JAMES WORRALL
-
-[CRED109]
-AUDIO DIRECTED BY DAN HOUSER
-
-[CRED110]
-AUDIO PRODUCED BY RENAUD SEBBANE
-
-[CRED111]
-CAST
-
-[CRED112]
-FRANK VINCENT AS SALVATORE LEONE
-
-[CRED113]
-JOE PANTOLIANO AS LUIGI GOTERELLI
-
-[CRED114]
-MICHAEL MADSEN AS TONI CIPRIANI
-
-[CRED115]
-MICHAEL RAPAPORT AS JOEY LEONE
-
-[CRED116]
-DEBBI MAZAR AS MARIA
-
-[CRED117]
-KYLE MACLACHAN AS DONALD LOVE
-
-[CRED118]
-ROBERT LOGGIA AS RAY MACHOWSKI
-
-[CRED119]
-GURU AS 8-BALL
-
-[CRED120]
-SONDRA JAMES AS MOMMA
-
-[CRED121]
-LIANA PAI AS ASUKA
-
-[CRED122]
-LES MAU AS KENJI
-
-[CRED123]
-CYNTHIA FARRELL AS CATALINA
-
-[CRED124]
-AL ESPINOSA AS MIGUEL
-
-[CRED125]
-CHRIS PHILLIPS AS EL BURRO
-
-[CRED126]
-HUNTER PLATIN AS CHICO
-
-[CRED127]
-WALTER MUDU AS D-ICE
-
-[CRED128]
-CURTIS MCCLARIN AS CURTLY
-
-[CRED129]
-BILL FIORE AS DARKEL
-
-[CRED130]
-CHRIS PHILLIPS AS MARTY CHONKS
-
-[CRED131]
-HUNTER PLATIN AS CURLY BOB
-
-[CRED132]
-WALTER MUDU AS KING COURTNEY
-
-[CRED133]
-HUNTER PLATIN AS ONE-ARMED PHIL
-
-[CRED134]
-KIM GURNEY AS MISTY
-
-[CRED135]
-MOTION CAPTURE
-
-[CRED136]
-ANIMATED BY
-
-[CRD136A]
-ALEX HORTON
-
-[CRED137]
-DIRECTED BY
-
-[CRD137A]
-NAVID KHONSARI
-
-[CRED138]
-PRODUCED BY
-
-[CRD138A]
-JAMIE KING
-
-[CRD138B]
-RENAUD SEBBANE
-
-[CRED139]
-RECORDED AT MODERN UPRISING STUDIOS, BROOKLYN
-
-[CRED140]
-ACTORS
-
-[CRD140A]
-RENAUD SEBBANE
-
-[CRD140B]
-GISELLE JONES
-
-[CRD140C]
-STEPHEN DANIELS
-
-[CRD140D]
-ROBERT STIO
-
-[CRD140E]
-JENNY GROSS.
-
-[CRED141]
-PEDESTRIAN DIALOGUE
-
-[CRED142]
-WRITTEN BY DAN HOUSER, NAVID KHONSARI & JAMES WORRALL
-
-[CRED143]
-DIRECTED BY CRAIG CONNER, DAN HOUSER AND LAZLOW
-
-[CRED144]
-PRODUCED BY RENAUD SEBBANE
-
-[CRED145]
-CAST
-
-[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]
-RADIO STATIONS AND MUSIC
-
-[CRED218]
-PRODUCERS FOR ROCKSTAR UK
-
-[CRD218A]
-CRAIG CONNER
-
-[CRD218B]
-STUART ROSS
-
-[CRED219]
-SOUNDTRACK CO-ORDINATOR
-
-[CRED220]
-TERRY DONOVAN
-
-[CRED221]
-PRODUCER FOR ROCKSTAR GAMES
-
-[CRED222]
-DAN HOUSER
-
-[CRED223]
-EDITED BY
-
-[CRED224]
-CRAIG CONNER
-
-[CRED225]
-ALLAN WALKER
-
-[CRED226]
-LAZLOW
-
-[CRED227]
-DJ BANTER AND IMAGING WRITTEN BY
-
-[CRED228]
-DAN HOUSER
-
-[CRED229]
-LAZLOW
-
-[CRED230]
-SPECIAL THANKS TO
-
-[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]
-ARTIST
-
-[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
-
-[CINCAM]
-Cámara Cinemática
-
-[KM1_13]
-Lleva el vehículo al garaje!
-
-[KM3_14]
-~r~¡Has sido ubicado, se rompió el trato!!
-
-[EBAL_H]
-Espera aquí tío, mientras voy y hablo con Luigi.
-
-[EBAL_M]
-¡Recuerda que nadie se mete con mis chicas!
-
-[LM2_F]
-Entonces coge su coche y repíntalo.
-
-[LM2_D]
-aquí, aquí, cógelo.
-
-[LM1_9]
-Hola, soy Misty.
-
-[LM4_A]
-Algún Diablo mal nacido ha estado vendiendo a sus putitas en mi patio de atrás.
-
-[FM2_B]
-¡Nos hicimos con una rata!
-
-[FM2_C]
-No está ni 'chuleando' ni 'traficando' así que debe de estar hablando.
-
-[FM3_CC]
-~w~Regresa, hermano, cuando tengas el dinero.
-
-[FEDS_AM]
-<>- CAMBIAR MENU
-
-[LOVE5_5]
-~r~¡Fallaste protegiendo el camión!
-
-[RM6_6]
-~r~¡Ray está muerto!
-
-[RM6_7]
-~r~¡Ray ha perdido su avión!
-
-[RM6_8]
-~g~Has dejado atrás a Ray, vuelve a por él.
-
-[FM1_10]
-~g~Has dejado atrás a María, vuelve y recógela.
-
-[LOVE4_9]
-~r~¡El avión ha sido destrozado!
-
-[LOV4_10]
-~r~¡La única pista del lugar donde está el paquete ha sido destruída!
-
-[KM2_D]
-No hace falta decir que debemos darle los coches como un regalo, para pagar la deduda que tenemos con él.
-
-[KM4_B]
-El negocio es lo suficientemente afortunado como para permitir que nuestra protección salde sus cuentas hoy mismo.
-
-[KM2_E]
-Debes obtener los coches de la lista y llevarlos a un garaje detrás del aparcamiento de Newport.
-
-[FM3_8I]
-~w~Consigue una posición ventajosa, entonces entraré cuando dispares el primer tiro.
-
-[LOVE1_B]
-La experiencia me ha enseñado que un hombre como tú puede ser muy leal por el precio correcto,
-
-[LOVE1_H]
-pero los grupos de hombres se hacen ambiciosos.
-
-[LOVE1_C]
-Un valioso recurso, un viejo caballero oriental que conozco,
-
-[LOVE1_I]
-ha sido tomado prisionero por unos sudamericanos en Aspatria.
-
-[MEA4_D]
-He aceptado verle...
-
-[MEA4_B4]
-Marty te envió, ¿ahh?. VALE, voy a enseñar a ese asqueroso el significado de la palabra negocio.
-
-[MEA4_B5]
-¡Carl, hola! y eehh... necesito más tiempo para conseguir tu dinero.
-
-[MEA1_B4]
-Ah, el Sr. Chonks te envió, ¿verdad?. Vamos a hacerle una visita al amiguete.
-
-[HM5_6]
-Vamos a romperle el cuello a algún que otro mamón.
-
-[LOVE1_5]
-~g~Deja de perder el tiempo, hazte con un coche de la mafia Colombiana y rescata al socio de Love.
-
-[AS1_D]
-~w~Actúa como cebo y consigue que los escuadrones de la muerte te sigan hasta Pike Creek.
-
-[AS1_E]
-~w~donde algunos de mis hombres estarán esperándoles.
-
-[AS2_C]
-~w~el Cartel tiene una compañía de tapadera, el Kappa Coffe House.
-
-[AS2_E]
-~w~No tenemos otra opción que poner esos puntos de venta de droga fuera de servicio.
-
-[AS2_F]
-~w~¡¡Redúcelos a astillas!!
-
-[AS2_A1]
-~w~Ciertamente Miguel tiene algo de esa famosa resistencia latina.
-
-[AS2_A2]
-~w~Estoy muy agotado.
-
-[SIREN_3]
-Para conectar las sirenas de este vehículo pulsa el ~h~ botón ~k~~VEHICLE_HORN~ ~w~.
-
-[SIREN_4]
-Para conectar las sirenas de este vehículo golpea el ~h~ botón ~k~~VEHICLE_HORN~ ~w~.
-
-[AS3_C]
-~w~¡Eeeeeeyoooo! ¿Qué ES esa cosa amarilla pegajosa?
-
-[AS3_C1]
-~w~Oh, hola nena.
-
-[AS3_F]
-~w~Tiene los atributos de una chica muy natural, esta nena.
-
-[AS3_F1]
-~w~Se las ha arreglado para quitarle esta pequeña joya a nuestro invitado.
-
-[AS3_G]
-~w~Hay un avión que está llegando al Francis International en 2 horas.
-
-[AS3_G1]
-~w~Está lleno de veneno de Catalina.
-
-[AS3_H]
-~w~Puedes evitar la seguridad del aeropuerto sacando un bote hasta las boyas luminosas.
-
-[AS3_H1]
-y disparando al avión en su aterrizaje.
-
-[AS3_I]
-~w~¡Recoge el cargamento de los escombros!
-
-[AS3_J]
-~w~Oh, ten cuidado ahora, ¿VALE nena?
-
-[AS3_K]
-~w~Ahora prueba el aceite picante...
-
-[RM2_F1]
-¡Esos colombianos estarán aquí en cualquier momento!
-
-[RM2_K]
-Maldición, ¡¡están aquí!! ¡¡ECHA EL PESTILLO Y CARGA!!
-
-[LOVE2_7]
-~g~ ¡Ahora tira el coche!
-
-[LOVE2_8]
-~g~¡Ahora sal de Newport!
-
-[AM1_F]
-Salvatore Leone saldrá de Luigis a eso de las (~1~: ~1~).
-
-[LOVE5_C]
-Quiero que le sigas, y asegúrate que tanto él como mi paquete llegan a Pike Creek sin daño alguno.
-
-[FESZ_SR]
-¡Error al guardar! Comprueba la memory card (PS2) de la ranura de MEMORY CARD 1 e inténtalo de nuevo.
-
-[FESZ_FO]
-¿Deseas formatear la memory card (PS2) en la ranura de MEMORY CARD 1?
-
-[FELZ_FO]
-La memory card (PS2) de la ranura de MEMORY CARD 1 no tiene formato.
-
-[FES_NOC]
-No hay memory card (PS2) en la ranura de MEMORY CARD 1.
-
-[FES_LOE]
-¡Error al cargar! Comprueba la memory card (PS2) de la ranura de MEMORY CARD 1 e inténtalo de nuevo.
-
-[FES_DEE]
-¡Error al borrar! Comprueba la memory card (PS2) de la ranura de MEMORY CARD 1 e inténtalo de nuevo.
-
-[FORSUC]
-Memory card (PS2) de la ranura de MEMORY CARD 1 formateada con éxito.
-
-[ERFOUN]
-¡Error al formatear la memory card (PS2)!
-
-[ERMCNP]
-No hay memory card (PS2) en la ranura de MEMORY CARD 1.
-
-[SVMEM1]
-Guardar en la memory card (PS2) de la ranura de MEMORY CARD 1.
-
-[FORSLO]
-Formatear memory card (PS2) de la ranura de MEMORY CARD 1.
-
-[SLONFM]
-¡Error al formatear la memory card (PS2)!
-
-[SLONDR]
-No hay espacio suficiente en la memory card (PS2). Inserta una memory card (PS2) con, al menos, 500KB de espacio libre en la ranura de MEMORY CARD 1.
-
-[SLNSP]
-No hay espacio suficiente en la memory card (PS2). Inserta una memory card (PS2) con, al menos, 200KB de espacio libre en la ranura de MEMORY CARD 1.
-
-[FEFD_WR]
-Formateando la memory card (PS2) de la ranura de MEMORY CARD 1. No extraigas la memory card (PS2), ni reinicies, o apagues la consola.
-
-[FES_ISF]
-NO PRESENTE
-
-[FES_SAG]
-PRESENTE
-
-[SLONNO]
-No hay memory card (PS2) en la ranura de MEMORY CARD 1.
-
-[SLONNF]
-La memory card (PS2) de la ranura de MEMORY CARD 1 no tiene formato.
-
-[FESZ_FM]
-La memory card (PS2) de la ranura de MEMORY CARD 1 no tiene formato. ¿Deseas formatear la memory card (PS2)?
-
-[FESZ_FF]
-Error al formatear! Por favor comprueba la memory card (PS2) de la ranura de MEMORY CARD 1 e inténtalo de nuevo.
-
-[MCDNSP]
-No hay espacio suficiente en la memory card (PS2) de la ranura de MEMORY CARD 1. Inserta una memory card (PS2) con, al menos, 500KB de espacio libre para guardar los datos de esta aplicación. ¿Deseas empezar? (SI o NO)
-
-[MCGNSP]
-No hay espacio suficiente en la memory card (PS2) de la ranura de MEMORY CARD 1. Se necesitan al menos 200KB para guardar los datos de esta aplicación. ¿Deseas empezar? (SI o NO)
-
-[FESZ_WR]
-Guardando datos. No extraigas la memory card (PS2) de la ranura de MEMORY CARD 1, ni reinicies, o apagues la consola.
-
-[FESZ_OW]
-Sobrescribiendo datos. No extraigas la memory card (PS2) de la ranura de MEMORY CARD 1, ni reinicies, o apagues la consola.
-
-[FELD_WR]
-Cargando datos. No extraigas la memory card (PS2) de la ranura de MEMORY CARD 1, ni reinicies, o apagues la consola.
-
-[FEDL_WR]
-Borrando datos. No extraigas la memory card (PS2) de la ranura de MEMORY CARD 1, ni reinicies, o apagues la consola.
-
-[LM2_C]
-Luigi dijo que, que te diera esto y así...
-
-[LM3_G]
-Joey no es a quien estabas esperando, ¿recuerdas?, tienes el pie en la puerta...
-
-[LM5_E]
-Consigue tanto dinero como puedas antes de que los policías se lo metan en el bolsillo.
-
-[JM5_C]
-De acuerdo, hay un coche cargado con un fiambre en el café cercano a Callahan Point.
-
-[RM2_B]
-Tuvimos acción en Nicaragua, en aquellos tiempos cuando el país sabía lo que estaba haciendo
-
-[RM2_C]
-Algunos cerdos del Cartel le asustaron ayer, y dijeron que volverían hoy para quitarle parte de su almacén.
-
-[RM2_D1]
-Iría yo mismo pero la vieja ciática está molestándome otra vez -achís, achís-, esto, ehhh... buena suerte.
-
-[CATINF1]
-~g~¡Captura a Catalina!
-
-[CATINF2]
-~g~Sigue al helicóptero para encontrar a Catalina.
-
-[BOATIN1]
-Sube a un bote y pulsa el ~h~botón ~k~~VEHICLE_ENTER_EXIT~~w~ para entrar.
-
-[BOATIN2]
-Puedes pulsar el ~h~botón ~k~~VEHICLE_ENTER_EXIT~~w~ si estás cerca de un bote para abordarlo.
-
-[BOATIN3]
-Sube a un bote y pulsa el ~h~botón ~k~~VEHICLE_ENTER_EXIT~~w~ para entrar.
-
-[BOATIN4]
-Puedes pulsar el ~h~botón ~k~~VEHICLE_ENTER_EXIT~~w~ si estás cerca de un bote para abordarlo.
-
-[JM6]
-'LA HUÍDA'
-
-[FM1]
-'CARABINA'
-
-[JM1]
-'EL ULTIMO ALMUERZO DE 'MIKE 'LABIOS'
-
-[FM21]
-'BOMBARDEA ESA BASE: ACTO I'
-
-[FM3]
-'BOMBARDEA ESA BASE: ACTO II'
-
-[AM1]
-'SAYONARA, SALVATORE'
-
-[AM2]
-'BAJO VIGILANCIA'
-
-[KM2]
-'GRAND THEFT AUTO'
-
-[AS3]
-'S.A.M.'
-
-[RM2]
-'SUMINISTRO DE ARMAS'
-
-[LOVE6]
-'SEÑUELO' '
-
-[LOVE1]
-'EL LIBERADOR'
-
-[RC1]
-'DESTRUCCIÓN DEL DIABLO'
-
-[RC2]
-'LA MASACRE DE LA MAFIA'
-
-[RC3]
-'CALAMIDAD EN EL CASINO'
-
-[RC4]
-'ATAQUE RUMPO'
-
-[RM2_E1]
-¡No puedo creer que esos bastardos de la barriga amarilla me dejaran sin la cobertura necesaria otra vez!
-
-[GREN_1]
-Cuanto más tiempo pulses el ~h~botón ~k~~PED_FIREWEAPON~~w~, más lejos lanzarás la granada.
-
-[GREN_2]
-Cuanto más tiempo pulses el ~h~botón ~k~~PED_FIREWEAPON~~w~, más lejos lanzarás la granada.
-
-[GREN_3]
-Cuanto más tiempo pulses el ~h~botón ~k~~PED_FIREWEAPON~~w~, más lejos lanzarás la granada.
-
-[LOVE4_G]
-Mi propiedad estará esperándote en el angar de aduanas del avión.
-
-[KABOOM]
-¡BOOM!
-
-[SPLAT]
-¡PLOF!
-
-[PANCAK]
-¡APLASTADO!
-
-[SOAKED]
-¡EMPAPADO!
-
-[HEAD]
-HEAD RADIO
-
-[DBL_CLF]
-DOUBLE CLEF FM
-
-[FLASHB]
-FLASHBACK FM
-
-[RISE]
-RISE FM
-
-[LIPS]
-LIPS 106
-
-[CHAT]
-CHATTERBOX FM
-
-[K_JAH]
-K-JAH Radio
-
-[GAM_FM]
-GAME FM
-
-[MSX_FM]
-MSX FM
-
-[TUBE1]
-Cuando el metro abra, podrás coger un tren hasta Staunton Island
-
-[TUBE2]
-Cuando Shoreside Vale abra podrás salir por la terminal de Shoreside al aeropuerto Francis International.
-
-[TUBE_2]
-Para abordar un tren del metro, pulsa el ~h~ botón 'entrar al vehículo' ~w~.
-
-[LEGAL]
-~g~¡Eliminar la amenaza criminal!
-
-[GA_2]
-Nuevo motor y trabajo de pintura. ¡Los policías no te reconocerán!
-
-[LM1_8A]
-Para ganar un poco de dinero extra, por qué no 'tomar prestado' un taxi...
-
-[TAXIH1]
-Para cerca de un peatón señalado para recogerlo, luego condúcelo a su destino antes de que se acabe el tiempo.
-
-[LM5_7]
-~g~¡Menos de cuatro chicas trabajando el ~p~ Fuzz Ball ~g~ y Luigi no será feliz!
-
-[KM2_3]
-~g~Recuerda los ~r~ coches ~g~ tienen que estar en perfecto estado para ser aceptados en el ~p~ garaje ~g~.
-
-[KM5_2]
-~g~Un Yardie anda por las calles.
-
-[BETRA_A]
-Perdón, cariño.
-
-[BETRA_B]
-Soy una chica ambiciosa ¿y tú?,
-
-[BETRA_C]
-eres tiempo perdido.
-
-[JAILB_Q]
-Vamos!
-
-[JAILB_R]
-Señor picha-boba!
-
-[JAILB_S]
-No hay problema en matarte.
-
-[JAILB_T]
-Vas a sentirlo.
-
-[JAILB_U]
-De acuerdo, de acuerdo. Piérdete.
-
-[HELP15]
-Cuando vayas a pié pulsa el ~h~botón ~k~~PED_LOOKBEHIND~~w~ para ~h~ mirar atrás ~w~.
-
-[FEC_LB3]
-Mira detrás
-
-[FEC_R3]
-(botón R3)
-
-[FES_AFO]
-Esta memory card (PS2) ya está formateada.
-
-[FEA_UP]
-;
-
-[FEA_DO]
-=
-
-[FEA_LE]
-<
-
-[FEA_RI]
->
-
-[FEDSAS3]
-- CAMBIAR SELECCION
-
-[FEDSAS4]
-;=<> - CAMBIAR SELECCION
-
-[SPRAY_4]
-Usa el ~h~ botón ~k~~PED_FIREWEAPON~~w~ para disparar el cañón de agua.
-
-[SPRAY_1]
-Usa el ~h~ botón ~k~~PED_FIREWEAPON~~w~ para disparar el cañón de agua.
-
-[LITTLE]
-LITTLE T
-
-[NICK]
-NICK LOVE
-
-[AM1_10]
-~g~Salvatore estará abandonando Luigi's aproximadamente a las 0~1~:~1~.
-
-[JAILB_V]
-la ciudad de Liberty hoy está conmocionada.
-
-[JAILB_A]
-Así la policía y los servicios de urgencias se encargan de las secuelas ...
-
-[JAILB_B]
-de un ataque devastador a un convoy policial ocurrido esta mañana.
-
-[JAILB_C]
-Ningún detalle se ha hecho público sobre los prisioneros que estaban siendo trasladados en el convoy,
-
-[JAILB_D]
-Y ningún grupo ha admitido su responsabilidad.
-
-[JAILB_E]
-El convoy abandonó las oficinas de la policía a primera hora de esta mañana...
-
-[JAILB_F]
-con el objeto de hacer una transferencia de rutina a la penitenciaría de Liberty.
-
-[JAILB_G]
-El ataque se produjo en el puente de Callahan,
-
-[JAILB_H]
-dejando pocos testigos y el puente notablemente dañado.
-
-[JAILB_I]
-Se cree que algunos de los convictos han perecido en la explosión...
-
-[JAILB_J]
-que siguió al ataque inicial.
-
-[JAILB_W]
-Pasadas las horas parece evidente que el ataque propinado a la policía se llevó a cabo por profesionales,
-
-[JAILB_K]
-Cuando la identificación de los delincuentes ausentes se había complicado más aún...
-
-[JAILB_L]
-por un ataque de piratas informático a las bases de datos de los cuarteles de la policía.
-
-[JAILB_O]
-Con el proyecto del túnel Porter fuera del plazo previsto,
-
-[JAILB_P]
-el desastre deja a Portland aislada del resto de la ciudad.
-
-[JAILB_M]
-*
-
-[JAILB_N]
-*
-
-[JAILB_X]
-En una declaración realizada hoy previamente,
-
-[FEDS_SE]
-Botón / - ELEGIR
-
-[FEDS_SB]
-Botón / - ELEGIR Botón " - VOLVER
-
-[TM4_A]
-~w~Oh, eres tú. TONI no está aquí.
-
-[TM4_A2]
-~w~Pero ha dejado para ti una de sus encantadoras cartas de amor.
-
-[DIAB2_A]
-¡Puse en marcha mi negocio de entretenimiento exótico de la nada, excepto lo que cabía en mis pantalones de cuero!
-
-[LM5_9]
-CHICAS:
-
-[PERPIC]
-Paquetes Ocultos encontrados
-
-[CO_ONE]
-Paquete Oculto ~1~ de ~1~
-
-[LOVE3_3]
-~g~El avión ha tirado ~1~de los 6 paquetes.
-
-[FARE11]
-~g~Destino ~w~'Lugar en obras' ~g~ en Fort Staunton.
-
-[GA_21]
-No puedes almacenar más coches en este aparcamiento.
-
-[CHEAT1]
-Trampas activadas
-
-[CHEAT2]
-Arma trucada
-
-[CHEAT3]
-Salud trucada
-
-[CHEAT4]
-Armadura trucada
-
-[CHEAT5]
-Nivel de Se Busca trucado
-
-[CHEAT6]
-Dinero trucado
-
-[CHEAT7]
-Clima trucado
-
-[AS1_H]
-~r~¡¡No has conseguido guiar al Escuadrón de la Muerte a la trampa del Yakuza!!
-
-[FEDS_BA]
-Botón "- VOLVER
-
-[RAMP_A]
-¡COMPLETADAS TODAS LAS RAMPAS!
-
-[USJ_ALL]
-¡COMPLETADAS TODAS LOS MANIOBRAS ÚNICAS!
-
-[FARE23]
-~g~Destino ~w~'garaje importación exportación' ~g~en el distrito de Cochrane Dam
-
-[L_TRN_1]
-Puedes alcanzar el tren-L que rodea Portland. Pulsa el ~h~ botón ~k~~VEHICLE_ENTER_EXIT~~w~ para ~h~entrar ~w~o salir~w~de un tren.
-
-[L_TRN_2]
-Puedes alcanzar el tren-L que rodea Portland. Pulsa el ~h~ botón ~k~~VEHICLE_ENTER_EXIT~~w~ para ~h~entrar ~w~o salir~w~de un tren.
-
-[S_TRN_1]
-Puedes tomar los trenes subterráneos que recorren Liberty. Pulsa el ~h~ botón ~k~~VEHICLE_ENTER_EXIT~~w~ para ~h~entrar ~w~o salir~w~de un tren.
-
-[S_TRN_2]
-Puedes tomar los trenes subterráneos que recorren Liberty. Pulsa el ~h~ botón ~k~~VEHICLE_ENTER_EXIT~~w~ para ~h~entrar ~w~o salir~w~de un tren.
-
-[AS1_C]
-~w~Ella cuenta con tres escuadrones de la muerte que patrullan por Liberty y cuyo único objetivo es el de darte caza.
-
-[AS1_G]
-~r~¡¡Todos los Yakuza están muertos!!
-
-[JAN]
-Ene
-
-[FEB]
-Feb
-
-[MAR]
-Mar
-
-[APR]
-Abr
-
-[MAY]
-May
-
-[JUN]
-Jun
-
-[JUL]
-Jul
-
-[AUG]
-Ago
-
-[SEP]
-Sept
-
-[OCT]
-Oct
-
-[NOV]
-Nov
-
-[DEC]
-Dic
-
-[DEFDT]
---:---:---- --:--:--
-
-[BUGGY]
-COCHES RESTANTES:
-
-[BONUS]
-~g~EXTRA ~1~$
-
-[HORN1]
-Pulsa el ~h~botón L3 ~w~ para tocar el ~h~claxon.
-
-[HORN2]
-Pulsa el ~h~botón L1 ~w~ para tocar el ~h~claxon.
-
-[HORN3]
-Pulsa el ~h~botón R1 ~w~ para tocar el ~h~claxon.
-
-[LM3_1A]
-Pulsa el ~h~botón ~k~~VEHICLE_HORN~~w~ para tocar el ~h~claxon y hacer saber a Misty que estás allí.
-
-[LM3_1B]
-Pulsa el ~h~botón ~k~~VEHICLE_HORN~~w~ para tocar el ~h~claxon y hacer saber a Misty que estás allí.
-
-[LM3_1C]
-Pulsa el ~h~botón ~k~~VEHICLE_HORN~~w~ para tocar el ~h~claxon y hacer saber a Misty que estás allí.
-
-[RADIO_A]
-Pulsa el ~h~botón ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ para moverte por las ~h~emisoras de radio.
-
-[RADIO_B]
-Pulsa el ~h~botón ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ para moverte por las ~h~emisoras de radio.
-
-[RADIO_C]
-Pulsa el ~h~botón ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ para moverte por las ~h~emisoras de radio.
-
-[RADIO_D]
-Pulsa el ~h~botón ~k~~VEHICLE_CHANGE_RADIO_STATION~~w~ para moverte por las ~h~emisoras de radio.
-
-[FEC_EXV]
-Entrar y salir del vehículo
-
-[TAXI_M]
-'TAXISTA'
-
-[COP_M]
-'VIGILANTE'
-
-[FIRE_M]
-'BOMBERO'
-
-[AMBUL_M]
-'PARAMÉDICO'
-
-[HJ_IS]
-PRIMA POR ESCENA LOCA: ~1~$
-
-[HJ_PIS]
-PRIMA POR ESCENA LOCA PERFECTA ~1~$
-
-[HJ_DIS]
-PRIMA POR DOBLE ESCENA LOCA ~1~$
-
-[HJ_PDIS]
-PRIMA POR DOBLE ESCENA LOCA PERFECTA ~1~$
-
-[HJ_TIS]
-PRIMA POR TRIPLE ESCENA LOCA ~1~$
-
-[HJ_PTIS]
-PRIMA POR TRIPLE ESCENA LOCA PERFECTA ~1~$
-
-[HJ_QIS]
-PRIMA POR CUÁDRUPLE ESCENA LOCA ~1~$
-
-[HJ_PQIS]
-PRIMA POR CUÁDRUPLE ESCENA LOCA PERFECTA ~1~$
-
-[AM1_K]
-Salvatore Leone estará saliendo de Luigi's en unas tres horas. (0~1~:~1~)
-
-[IMPEXPP]
-El garaje Importación Exportación, Puerto de Portland. Tenemos órdenes para varios vehículos. Revisa nuestro tablón de notas para ver necesidades.
-
-[VANHSTP]
-¿Algunos coches de seguridad cascados? Llévalos a nuestro garaje en el Puerto de Portland.
-
-[EMVHPUP]
-Se han pagado grandes porcentajes por coches nuevos/usados. Llévalos a la grúa que hay al noroeste del Puerto de Portland.
-
-[STANDS]
-ESCALERAS ROTAS:
-
-[STASH]
-¡~g~Guarda el SPANK en la parte trasera de la ~p~zona en construcción!
-
-[MCSTNS]
-No hay memory card (PS2) insertada en la ranura para MEMORY CARD 1. ¿Quieres empezar? (SI o NO)
-
-[LOVE3_5]
-~g~El avión está ahora a tu alcance.
-
-[LOVE3_6]
-¡~r~La Poli encontró antes los paquetes!
-
-[SIREN_1]
-Para poner en marcha las sirenas de estos coches, pulsa el ~h~botón ~k~~VEHICLE_HORN~~w~.
-
-[SIREN_2]
-Para poner en marcha las sirenas de estos coches, pulsa el ~h~botón ~k~~VEHICLE_HORN~~w~.
-
-[FM3_8C]
-~w~Necesitaré 100.000 $ para cubrir gastos.
-
-[MCLOAD]
-Cargando datos. No extraigas la memory card (PS2) de la ranura de MEMORY CARD 1, ni reinicies, o apagues la consola.
-
-[FES_GME]
-Error al leer la memory card (PS2) de la ranura de MEMORY CARD 1. Por favor compruébalo e inténtalo de nuevo.
-
-[FESZ_QF]
-¿Estás seguro que quieres formatear la memory card (PS2) de la ranura de MEMORY CARD 1?
-
-[FESZ_LS]
-Cargado con éxito.
-
-[RM3_5]
-~g~Tienes ~1~ de 6 paquetes de pruebas.
-
-[LOVE3_2]
-¡~g~Tienes todos los paquetes! Llévalos de vuelat a Donald Love.
-
-[LOVE4_4]
-¡~g~Lleva el paquete de vuelta a Donald Love!
-
-[FEB_SAV]
-Cargar
-
-[FEP_SAV]
-CARGAR JUEGO
-
-[AS2_12A]
-Después de destrozar el primer puesto, ¡tendrás 8 mintutos antes que el Cartel envíe a sus matones!
-
-[AS3_1A]
-¡~g~Ahora vete al ~b~boya del aeropuerto!
-
-[NOCONT]
-Por favor, para continuar vuelve a conectar un mando analógico (DUALSHOCK#) o mando analógico (DUALSHOCK#2) en el puerto de mando 1.
-
-[BET_JB]
-TRAICIONADO POR CATALINA, SU AMANTE Y ABANDONADO PARA QUE MURIERA. CONDENADO Y SENTENCIADO, INICIA SU VIAJE A LA PRISIÓN DE LIBERTY CITY. PERO SÓLO TIENE UN PENSAMIENTO... ¡VENGANZA!
-
-[END_A]
-Los Residentes de Cedar Groove se adaptan a las consecuencias
-
-[END_B]
-emocionales tras el estallido de la guerra
-
-[END_C]
-que se produjo ayer en la zona.
-
-[END_D]
-Un residente local, Clive Denver describió a la policía
-
-[END_E]
-a un hombre armado huyendo de la escena, acompañado de una mujer de pelo negro.
-
-[END_F]
-Oh, sabes, vamos a pasar un buen rato, porqué lo sabes.
-
-[END_G]
-Te quiero, Yo, yo, yo realmente te quiero, porque eres un hombre tan fuerte
-
-[END_H]
-y eso es todo lo que necesito.
-
-[END_I]
-Bueno, ¿qué estaba diciendo?
-
-[END_J]
-Oh, sabes, lo he olvidado. Pero sabes lo que quiero decir, ¿verdad?
-
-[END_K]
-El sonido de las explosiones sacudieros las casas más próximas, la gente se esconde.
-
-[END_L]
-Varios ciudadanos resultaron heridos a causa del tiroteo entre
-
-[END_M]
-las fuerzas terrestres y un helicóptero que rodeaba a la presa.
-
-[END_N]
-Sí, aquí en los jardínes tenemos una vista excelente.
-
-[END_O]
-Cuando finalmente el helicóptero consiguió escapar,
-
-[END_P]
-mejor que los fuegos artificiales del 4 de Julio.
-
-[END_Q]
-Con un número de víctimas superior a veinte,
-
-[END_R]
-la policía continúa buscando cuerpos.
-
-[END_S]
-No han habido desmentidos oficiales acerca de los rumores
-
-[END_T]
-de que los muertos eran miembros de Cartel Colombiano,
-
-[END_U]
-y se sigue sin pistas que aclaren las causas de la masacre.
-
-[END_V]
-Me he roto una uña y me pelo hecho un asco, ¿puedes creértelo?
-
-[PAPER1]
-UN DISPARO CRIMINAL REALIZADO POR SU NOVIA Y CÓMPLICE. EL TRIBUNAL CON UN VERDICTO ANÓNIMO, ENCUENTRA CULPABLE AL LADRÓN ARMADO.
-
-[PAPER2]
-¡DIEZ AÑOS POR AMOR!
-
-[END_W]
-Me ha costado cincuenta dólares...
-
-[FEB_CPC]
-Configuración del control
-
-[FEC_PED]
-Controles a pie
-
-[FEC_VEH]
-Controles en vehículo
-
-[FEC_FPR]
-Controles en primera persona
-
-[FEC_CMM]
-Controles comunes
-
-[FEC_PWL]
-IR a la izquierda
-
-[FEC_PWR]
-IR a la derecha
-
-[FEC_PWF]
-Andar hacia delante
-
-[FEC_PWT]
-Andar hacia la cámara
-
-[FEC_PLB]
-Mirar hacia atrás.
-
-[FEC_PFR]
-Disparar arma
-
-[FEC_CLE]
-Cambiar Arma a la Izq.
-
-[FEC_CRI]
-Cambiar Arma a la Dcha.
-
-[FEC_LKT]
-Bloquear objetivo
-
-[FEC_PJP]
-Salto Peatón
-
-[FEC_PSP]
-Sprint Peatón
-
-[FEC_PSH]
-Disparar Peatón
-
-[FEC_TLF]
-Siguiente objetivo a la izq.
-
-[FEC_TRG]
-Siguiente objetivo a la dcha.
-
-[FEC_CCM]
-Centrar cámara detrás del jugador.
-
-[FEC_SZI]
-Acercar rifle francotirador
-
-[FEC_SZO]
-Alejar rifle francotirador
-
-[FEC_LKL]
-Mirar izq. en primera persona
-
-[FEC_LRT]
-Mirar dcha. en primera persona
-
-[FEC_LUP]
-Mirar arr. en primera persona
-
-[FEC_LDN]
-Mirar abj. en primera persona
-
-[FEC_LBH]
-Mirar hacia atrás en vehículo
-
-[FEC_LLF]
-Mirar a la izq. en vehículo
-
-[FEC_LRG]
-Mirar a la dch. en vehículo
-
-[FEC_HRN]
-Claxon
-
-[FEC_HBR]
-Freno de mano del vehículo
-
-[FEC_ACL]
-Acelerar vehículo
-
-[FEC_BRK]
-Frenar vehículo
-
-[FEC_TSM]
-Intercambiar SubMisiones Sí/No
-
-[FEC_CRD]
-Cambiar emisoras de radio
-
-[FEC_ENT]
-Entrar/Salir del vehículo
-
-[FEC_WPN]
-Disparar arma
-
-[FEC_PAS]
-Pausa
-
-[FEC_FPO]
-Cambiar armas primera persona.
-
-[FEC_SMS]
-Cambiar puntero del ratón.
-
-[FEC_CMS]
-Cambiar modo cámara en todas situaciones.
-
-[FEC_TSS]
-Capturar pantalla
-
-[FEN_STA]
-INICIAR JUEGO
-
-[FEN_NET]
-Red
-
-[FEN_CON]
-Conexión
-
-[FEN_GAM]
-Buscar juego
-
-[FEN_TYP]
-Tipo de juego
-
-[FEN_TY0]
-Duelo a muerte
-
-[FEN_TY1]
-Duelo a muerte sigiloso
-
-[FEN_TY2]
-Equipo Duelo a muerte
-
-[FEN_TY3]
-Duelo a muerte sigiloso en equipo
-
-[FEN_TY4]
-Acumula efectivo
-
-[FEN_TY5]
-Captura la bandera
-
-[FEN_TY6]
-Rat race
-
-[FEN_TY7]
-Dominación
-
-[FEN_NAM]
-Nombre:
-
-[FEN_GNA]
-Nombre del juego:
-
-[FEM_MAP]
-Elegir mapa
-
-[FEN_PLS]
-Ajustes del jugador
-
-[FEN_PLC]
-Color del jugador
-
-[FEM_MA0]
-Liberty City
-
-[FEM_MA1]
-RedLight
-
-[FEM_MA2]
-Chinatown
-
-[FEM_MA3]
-La Torre
-
-[FEM_MA4]
-La alcantarilla
-
-[FEM_MA5]
-Zona industrial
-
-[FEM_MA6]
-Los muelles
-
-[FEM_MA7]
-Staunton
-
-[FEC_EMS]
-Por favor sólo teclas de teclado.
-
-[FEC_DBG]
-Menú de depuración
-
-[FEC_TGD]
-Cambiar mando de juego/depuración
-
-[FEC_TDO]
-Cambiar cámara depuración No
-
-[FEC_IVH]
-Invertir horizontalidad ratón
-
-[FEC_MSL]
-BIR
-
-[FEC_MSM]
-BCR
-
-[FEC_MSR]
-BDR
-
-[FEC_QUE]
-???
-
-[FEC_TWO]
-Permitidas sólo dos teclas del teclado
-
-[FEC_UMS]
-Por favor sólo teclas de ratón.
-
-[FEC_OMS]
-Permitida sólo una tecla del ratón
-
-[FEC_UJS]
-Por favor sólo botones de joystick.
-
-[FEC_OJS]
-Permitido sólo un botón de joystick por acción
-
-[FEC_PTL]
-Usar Bloquear objetivo al cambiar arma a izq.
-
-[FEC_PTR]
-Usar Bloquear objetivo al cambiar arma a dcha.
-
-[FEC_LBC]
-Usar Mirar a izq. con Mirar a la dcha.
-
-[FEC_JBO]
-JOY ~1~
-
-[NO_PAUZ]
-No se puede detener en multijugador. ¡Pulsa 2 veces para salir!
-
-[FEM_SL1]
-Hueco 1 libre
-
-[FEM_SL2]
-Hueco 2 libre
-
-[FEM_SL3]
-Hueco 3 libre
-
-[FEM_SL4]
-Hueco 4 libre
-
-[FEM_SL5]
-Hueco 5 libre
-
-[FEM_SL6]
-Hueco 6 libre
-
-[FEM_SL7]
-Hueco 7 libre
-
-[FEM_SL8]
-Hueco 8 libre
-
-[FEM_MM]
-MENÚ PRINCIPAL
-
-[FEM_SNG]
-Iniciar nuevo juego
-
-[FEM_QTW]
-Salir
-
-[FEQ_SRE]
-¿Estás seguro de querer salir? Se perderán todos los progresos desde la última partida guardada. ¿Quieres proceder?
-
-[FEQ_SRW]
-¿Estás seguro de querer salir del juego?
-
-[FEG_SRV]
-SERVIDOR
-
-[FEG_MAP]
-MAPA
-
-[FEG_PLY]
-JUGADORES
-
-[FEG_TYP]
-TIPO
-
-[FEG_PNG]
-PING
-
-[FET_FG]
-DETECTAR JUEGO
-
-[FET_SP]
-JUGADOR INDIVIDUAL
-
-[FET_MP]
-MULTIJUGADOR
-
-[FET_HG]
-ALOJAR JUEGO
-
-[FET_PS]
-CONFIG. JUGADOR
-
-[FET_CON]
-CONEXIÓN
-
-[FET_AUD]
-CONFIG. AUDIO
-
-[FET_GFX]
-CONFIG. GFX
-
-[FET_DIS]
-AJUSTE DE PANTALLA
-
-[FET_LAN]
-DEFINIR IDIOMA
-
-[FET_LG]
-CARGAR JUEGO
-
-[FET_DG]
-BORRAR JUEGO
-
-[FET_NG]
-PARTIDA NUEVA
-
-[FET_SG]
-GUARDAR JUEGO
-
-[FET_MAP]
-ELEGIR MAPA
-
-[FET_GT]
-TIPO DE JUEGO
-
-[FET_CTL]
-AJUSTE DEL MANDO
-
-[FET_OPT]
-OPCIONES
-
-[FET_QG]
-SALIR DEL JUEGO
-
-[FET_STA]
-ESTADÍSTICAS
-
-[FET_BRE]
-INFORMES
-
-[FEC_WAR]
-Aviso
-
-[FEC_OKK]
-Aceptar
-
-[FED_CON]
-Confirmación borrar archivo
-
-[FES_SSC]
-Juego guardado con éxito.
-
-[DEL_FNM]
-Juego eliminado con éxito.
-
-[PCLOAD]
-Cargando datos del juego
-
-[PCRESRT]
-Reiniciando Grand Theft Auto III
-
-[FEC_DLF]
-Error al borrar.
-
-[FEC_SVU]
-Error al guardar.
-
-[FEC_LUN]
-Error al cargar. Archivo dañado, por favor borrar.
-
-[FEN_PLA]
-Número de Jugadores:
-
-[FET_NON]
-NO HAY PARTIDAS DISPONIBLES
-
-[FET_SFG]
-BUSCANDO PARTIDAS...
-
-[FET_SRT]
-ORDENANDO PARTIDAS...
-
-[FEF_LAN]
-RED LOCAL
-
-[FEF_INT]
-INTERNET
-
-[FET_REF]
-Refrescar
-
-[FET_FIL]
-Filtro
-
-[FET_JG]
-Unirse
-
-[FEC_NTW]
-Talk To Network
-
-[FEC_ESR]
-Tecla Esc limitada
-
-[FEC_GSL]
-Show head bob:
-
-[FIL_FLT]
-FILTRAR LISTAS DE JUEGOS
-
-[FET_SAN]
-INICIAR NUEVA PARTIDA
-
-[FIL_MAP]
-Mapa:
-
-[FIL_SRV]
-Servidor:
-
-[FIL_TYP]
-Tipo de juego:
-
-[FIL_SPC]
-¿Juegos con espacio disponible?
-
-[FIL_PNG]
-Ping:
-
-[FEN_UKH]
-Anfitrión desconocido
-
-[FEN_UKM]
-Mapa no encontrado
-
-[FEN_UKT]
-Tipo de juego no encontrado
-
-[FEN_NCI]
-NO CONECTADO A INTERNET
-
-[FET_PAU]
-MENÚ PAUSA
-
-[FET_SGA]
-INICIAR JUEGO
-
-[FEC_SGJ]
-Establecer Joystick de juego
-
-[FEC_PAD]
-Gamepad
-
-[FEC_JOY]
-Joystick
-
-[FEC_WHL]
-Volante
-
-[FEC_CNT]
-Tipo de mando:
-
-[FET_APL]
-APLICAR
-
-[FES_CSA]
-Seleccionar aspecto de la lista inferior:
-
-[FES_SKN]
-NOMBRE DEL ASPECTO
-
-[FES_DAT]
-FECHA
-
-[FES_NON]
-NO HAY SKINS DISPONIBLES
-
-[FEA_FM9]
-REPRODUCTOR MP3
-
-[FESZ_QZ]
-¿Estás seguro que deseas guardar esta partida?
-
-[FES_CGA]
-Huecos del juego disponibles:
-
-[FES_SCG]
-¿Guardar el juego actual?
-
-[FES_LCG]
-¿Cargar el juego y seguir jugando?
-
-[FEC_FIR]
-Disparar
-
-[FEC_NWE]
-Siguiente arma
-
-[FEC_PWE]
-Arma anterior
-
-[FEC_FOR]
-Avanzar
-
-[FEC_BAC]
-Hacia atrás
-
-[FEC_LEF]
-Izquierda
-
-[FEC_RIG]
-Derecha
-
-[FEC_ZIN]
-Acercar zoom
-
-[FEC_ZOT]
-Alejar zoom
-
-[FEC_EEX]
-Entrar+salir
-
-[FEC_RAD]
-Radio
-
-[FEC_SUB]
-Rendición
-
-[FEC_CMR]
-Cambiar cámara
-
-[FEC_JMP]
-Saltar
-
-[FEC_SPN]
-Esprint
-
-[FEC_HND]
-Freno de mano
-
-[FEC_TUL]
-Torreta a la izqd.
-
-[FEC_TUR]
-Torreta a la dcha.
-
-[FEC_LOL]
-Mirar a la izq.
-
-[FEC_LOR]
-Mirar a la dcha.
-
-[FEC_NTR]
-Siguiente objetivo
-
-[FEC_PTT]
-Objetivo anterior
-
-[FEC_LBA]
-Mirar atrás
-
-[FEC_CEN]
-Centrar cámara
-
-[FEC_UND]
-(NO)
-
-[FET_CFT]
-A PIE
-
-[FET_CCR]
-EN VEHÍCULO
-
-[CVT_MSG]
-Convertir texturas a un formato óptimo para tu tarjeta de vídeo
-
-[FET_CAC]
-ACCIÓN
-
-[FEC_IBT]
--
-
-[FEC_SPC]
-BES
-
-[FEC_MXO]
-MXB1
-
-[FEC_MXT]
-MXB2
-
-[FEC_UNB]
-SIN ESTABLECER
-
-[FET_CME]
-MÉTODO DE CONTROL
-
-[FET_RDK]
-REDEFINIR CONTROLES
-
-[FET_AMS]
-AJUSTES DEL RATÓN
-
-[FET_STI]
-CONFIGURACIÓN DE CONTROL ESTÁNDAR
-
-[FET_CTI]
-CONFIGURACIÓN DE CONTROL CLÁSICA
-
-[FET_MTI]
-CONFIGURACIÓN DE CONTROL DEL RATÓN
-
-[FET_DAM]
-MODELADO ACÚSTICO DINÁMICO
-
-[FEC_TFL]
-Torre Izquierda
-
-[FEC_TFR]
-Torre derecha
-
-[FEC_TFU]
-Torre /Dodo arriba
-
-[FEC_TFD]
-Torre /Dodo abajo
-
-[FEC_MWF]
-RUEDA ARR
-
-[FEC_MWB]
-RUEDA AB
-
-[FEC_ORR]
-o
-
-[FEC_NUS]
-SIN USO
-
-[FEC_LUD]
-Mirar Ar
-
-[FEC_LDU]
-Mirar Ab
-
-[FEC_CMP]
-COMOBO: MIRAR I+D
-
-[FEC_NTT]
-No hay texto para esta tecla
-
-[FEC_FNC]
-F~1~
-
-[FEC_IRT]
-INS
-
-[FEC_DLL]
-SUP
-
-[FEC_HME]
-INICIO
-
-[FEC_END]
-FIN
-
-[FEC_PGU]
-REPAG
-
-[FEC_PGD]
-AVPAG
-
-[FEC_UPA]
-ARRIBA
-
-[FEC_DWA]
-ABAJO
-
-[FEC_LFA]
-IZQDA
-
-[FEC_RFA]
-DCHA
-
-[FEC_NUM]
-NUM.
-
-[FEC_NMN]
-NUM. ~1~
-
-[FEC_FWS]
-NUM. /
-
-[FEC_PLS]
-NUM. +
-
-[FEC_MIN]
-NUM. -
-
-[FEC_DOT]
-NUM. .
-
-[FEC_NLK]
-BLOQ NUM
-
-[FEC_ETR]
-INTRO
-
-[FEC_SLK]
-BLOQ DESPL
-
-[FEC_PSB]
-PAUSA INTER
-
-[FEC_BSP]
-RETROCEDER
-
-[FEC_TAB]
-TAB
-
-[FEC_CLK]
-BLOQ MAYÚS
-
-[FEC_RTN]
-INTRO
-
-[FEC_LSF]
-MAYÚS IZQ
-
-[FEC_RSF]
-MAYÚS DCH
-
-[FEC_LCT]
-CONTROL I
-
-[FEC_RCT]
-CONTROL D
-
-[FEC_LAL]
-ALT I
-
-[FEC_RAL]
-ALT D
-
-[FEC_LWD]
-WIN I
-
-[FEC_RWD]
-WIN D
-
-[FEC_WRC]
-APMENÚ
-
-[WIN_TTL]
-Grand Theft Auto III
-
-[WIN_95]
-Grand Theft Auto III no se puede ejecutar bajo W95
-
-[WIN_DX]
-Grand Theft Auto III necesita al menos la versión 8.1 de DirectX
-
-[WIN_VDM]
-Grand Theft Auto III necesita al menos 12MB de espacio de memoria de vídeo
-
-[DIAB3_G]
-¡Arriba!
-
-[FEM_RES]
-REANUDAR JUEGO
-
-[FES_SNG]
-INICIAR NUEVO JUEGO
-
-[FEM_SP]
-Jugador individual
-
-[FEM_MP]
-MULTIJUGADOR
-
-[FEM_QT]
-SALIR
-
-[FES_SG]
-INICIAR NUEVA PARTIDA
-
-[FES_LG]
-CARGAR JUEGO
-
-[FEM_HST]
-ALOJAR JUEGO
-
-[FEM_OPT]
-OPCIONES
-
-[FEM_DBG]
-Corregir errores
-
-[FET_PSU]
-CONFIG. JUGADOR
-
-[FET_DEF]
-RESTAURAR VALORES
-
-[FED_BRI]
-BRILLO
-
-[FED_TRA]
-RASTROS
-
-[FEM_LOD]
-DISTANCIA DE REPRESENTACIÓN
-
-[FEM_VSC]
-SINCRONÍA DE IMAGEN
-
-[FEM_FRM]
-LIMITADOR DE CUADROS
-
-[FED_RES]
-RESOLUCIÓN DE PANTALLA
-
-[FED_WIS]
-PANTALLA PANORÁMICA
-
-[FEDS_TB]
-ATRÁS
-
-[FEA_MUS]
-VOLUMEN DE LA MÚSICA
-
-[FEA_SFX]
-VOLUMEN DE EFECTOS
-
-[FEA_RSS]
-EMISORA DE RADIO
-
-[FEL_ENG]
-INGLÉS
-
-[FEL_FRE]
-FRANCÉS
-
-[FEL_GER]
-ALEMÁN
-
-[FEL_ITA]
-ITALIANO
-
-[FEL_SPA]
-ESPAÑOL
-
-[FEA_3DH]
-HARDWARE DE SONIDO
-
-[FEA_SPK]
-AJUSTE DE ALTAVOCES
-
-[FEA_2SP]
-2 ALTAVOCES
-
-[FEA_4SP]
-MÁS DE 2 ALTAVOCES
-
-[FEA_EAR]
-MICRÓFONOS
-
-[FEA_NAH]
-NO HAY HARDWARE DE SONIDO
-
-[FET_SNG]
-INICIAR NUEVO JUEGO
-
-[GMSAVE]
-GUARDAR JUEGO
-
-[FES_DGA]
-BORRAR JUEGO
-
-[FEC_IVV]
-INVERTIR VERTICALIDAD RATÓN
-
-[FEC_MSH]
-SENSIBILIDAD DEL RATÓN
-
-[FET_CCN]
-COTROLES: CLÁSICOS
-
-[FET_SCN]
-CONTROLES: ESTÁNDAR
-
-[FES_SET]
-Usar skin
-
-[GHOST]
-Ghost
-
-[WIN_RSZ]
-Error al seleccionar nueva pantalla de resolución
-
-[FET_APP]
-BIR, VOLVER A APLICAR LOS AJUSTES
-
-[FET_HRD]
-AJUSTES POR DEFECTO RESTAURADOS
-
-[FET_MST]
-CONDUCCIÓN CONTROLADA POR EL RATÓN
-
-[FEC_STR]
-NUM. INICIO
-
-[FET_MIG]
-IZQUIERDA, DERECHA, RUEDA DEL RATÓN PARA AJUSTAR
-
-[FET_CIG]
-RETROCESO PARA QUITAR - BIR, VOLVER A CAMBIAR
-
-[FET_RIG]
-SELECCIONAR NUEVO CONTROL PARA ESTA ACCIÓN O ESC PARA CANCELAR
-
-[FET_EIG]
-NO SE PUEDE DEFINIR UN CONTROL PARA ESTA ACCIÓN
-
-[NO_PCCD]
-Por favor, introduce el disco 2 de Grand Theft Auto III en la unidad o pulsa ESC para cancelar
-
-[CVT_ERR]
-Te has quedado sin espacio en el disco duro. Por favor, antes de seguir consigue algo de espacio en tu disco duro. Pulsa ESC para cancelar.
-
-[FED_SUB]
-SUBTÍTULOS
-
-[FET_DSN]
-Aspecto por defecto del jugador.bmp
-
-[JM3]
-'VAN HEIST'
-
-[EBAL]
-'DÁME LIBERTAD'
-
-[LM4]
-'EXPLOSIVA ACCIÓN MACARRA'
-
-[REPLAY]
-VOLVER A JUGAR
-
-[FEC_SFT]
-MAYÚS
-
-[CRED254]
-JEFE DE ESTUDIO
-
-[CVT_CRT]
-No se pueden convertir texturas con tu tarjeta de vídeo. Debes conectarte con una cuenta de Administrador para hacerlo. Pulsa ESC para salir.
-
-[FEM_ON]
-SÍ
-
-[FEM_OFF]
-NO
-
-[FEM_YES]
-SÍ
-
-[FEM_NO]
-NO
-
-[FES_WAR]
-Guardando, por favor espera...
-
-[FED_DLW]
-Borrando, por favor espera...
-
-[FED_LDW]
-Cargando, por favor espera...
-
-[FEC_SLC]
-Ranura en mal estado
-
-[FED_LFL]
-Error al cargar el juego. El juego se reiniciará.
-
-[FET_RSO]
-RESTAURADO AJUSTE ORIGINAL
-
-[FET_RSC]
-HARDAWARE NO DISPONIBLE. RESTAURADO AJUSTE ORIGINAL HARDWARE NOT AVAILABLE - ORIGINAL SETTING RESTORED
-
-[CRED270]
-MIKE HONG
-
-[DUMMY]
-THIS LABEL NEEDS TO BE HERE !!!
-AS THE LAST LABEL DOES NOT GET COMPILED \ No newline at end of file
diff --git a/vendor/librw b/vendor/librw
new file mode 160000
+Subproject 30b77b0b32b4113b5dce2b67813ce9b85d1e1e5
diff --git a/libsndfile.32/ChangeLog b/vendor/libsndfile/ChangeLog
index 62576177..62576177 100644
--- a/libsndfile.32/ChangeLog
+++ b/vendor/libsndfile/ChangeLog
diff --git a/libsndfile.32/NEWS b/vendor/libsndfile/NEWS
index d8f549f4..d8f549f4 100644
--- a/libsndfile.32/NEWS
+++ b/vendor/libsndfile/NEWS
diff --git a/libsndfile.32/dist/libsndfile-1.dll b/vendor/libsndfile/dist/Win32/libsndfile-1.dll
index 95ce5bd0..95ce5bd0 100644
--- a/libsndfile.32/dist/libsndfile-1.dll
+++ b/vendor/libsndfile/dist/Win32/libsndfile-1.dll
Binary files differ
diff --git a/libsndfile.64/dist/libsndfile-1.dll b/vendor/libsndfile/dist/Win64/libsndfile-1.dll
index 9817e8b0..9817e8b0 100644
--- a/libsndfile.64/dist/libsndfile-1.dll
+++ b/vendor/libsndfile/dist/Win64/libsndfile-1.dll
Binary files differ
diff --git a/libsndfile.32/include/sndfile.h b/vendor/libsndfile/include/sndfile.h
index 8a60fb09..8a60fb09 100644
--- a/libsndfile.32/include/sndfile.h
+++ b/vendor/libsndfile/include/sndfile.h
diff --git a/libsndfile.32/include/sndfile.hh b/vendor/libsndfile/include/sndfile.hh
index 0e1c1c20..0e1c1c20 100644
--- a/libsndfile.32/include/sndfile.hh
+++ b/vendor/libsndfile/include/sndfile.hh
diff --git a/libsndfile.32/lib/libsndfile-1.def b/vendor/libsndfile/lib/Win32/libsndfile-1.def
index 4194ff3e..4194ff3e 100644
--- a/libsndfile.32/lib/libsndfile-1.def
+++ b/vendor/libsndfile/lib/Win32/libsndfile-1.def
diff --git a/libsndfile.32/lib/libsndfile-1.lib b/vendor/libsndfile/lib/Win32/libsndfile-1.lib
index cc266ecd..cc266ecd 100644
--- a/libsndfile.32/lib/libsndfile-1.lib
+++ b/vendor/libsndfile/lib/Win32/libsndfile-1.lib
Binary files differ
diff --git a/libsndfile.32/lib/pkgconfig/sndfile.pc b/vendor/libsndfile/lib/Win32/pkgconfig/sndfile.pc
index 428d708a..428d708a 100644
--- a/libsndfile.32/lib/pkgconfig/sndfile.pc
+++ b/vendor/libsndfile/lib/Win32/pkgconfig/sndfile.pc
diff --git a/libsndfile.64/lib/libsndfile-1.def b/vendor/libsndfile/lib/Win64/libsndfile-1.def
index 4194ff3e..4194ff3e 100644
--- a/libsndfile.64/lib/libsndfile-1.def
+++ b/vendor/libsndfile/lib/Win64/libsndfile-1.def
diff --git a/libsndfile.64/lib/libsndfile-1.lib b/vendor/libsndfile/lib/Win64/libsndfile-1.lib
index 56546a20..56546a20 100644
--- a/libsndfile.64/lib/libsndfile-1.lib
+++ b/vendor/libsndfile/lib/Win64/libsndfile-1.lib
Binary files differ
diff --git a/libsndfile.64/lib/pkgconfig/sndfile.pc b/vendor/libsndfile/lib/Win64/pkgconfig/sndfile.pc
index 428d708a..428d708a 100644
--- a/libsndfile.64/lib/pkgconfig/sndfile.pc
+++ b/vendor/libsndfile/lib/Win64/pkgconfig/sndfile.pc
diff --git a/mpg123.32/dist/libmpg123-0.dll b/vendor/mpg123/dist/Win32/libmpg123-0.dll
index 07bfef0c..07bfef0c 100644
--- a/mpg123.32/dist/libmpg123-0.dll
+++ b/vendor/mpg123/dist/Win32/libmpg123-0.dll
Binary files differ
diff --git a/mpg123.64/dist/libmpg123-0.dll b/vendor/mpg123/dist/Win64/libmpg123-0.dll
index 545c9de3..545c9de3 100644
--- a/mpg123.64/dist/libmpg123-0.dll
+++ b/vendor/mpg123/dist/Win64/libmpg123-0.dll
Binary files differ
diff --git a/mpg123.32/include/fmt123.h b/vendor/mpg123/include/fmt123.h
index dcabf5e0..dcabf5e0 100644
--- a/mpg123.32/include/fmt123.h
+++ b/vendor/mpg123/include/fmt123.h
diff --git a/mpg123.32/include/mpg123.h b/vendor/mpg123/include/mpg123.h
index 7b0a8495..7b0a8495 100644
--- a/mpg123.32/include/mpg123.h
+++ b/vendor/mpg123/include/mpg123.h
diff --git a/mpg123.32/lib/libmpg123-0.lib b/vendor/mpg123/lib/Win32/libmpg123-0.lib
index 1dddc020..1dddc020 100644
--- a/mpg123.32/lib/libmpg123-0.lib
+++ b/vendor/mpg123/lib/Win32/libmpg123-0.lib
Binary files differ
diff --git a/mpg123.64/lib/libmpg123-0.lib b/vendor/mpg123/lib/Win64/libmpg123-0.lib
index 0b778c2b..0b778c2b 100644
--- a/mpg123.64/lib/libmpg123-0.lib
+++ b/vendor/mpg123/lib/Win64/libmpg123-0.lib
Binary files differ
diff --git a/vendor/ogg b/vendor/ogg
new file mode 160000
+Subproject 684c73773e7e2683245ffd6aa75f04115b51123
diff --git a/openal-soft/COPYING b/vendor/openal-soft/COPYING
index 8d5d0000..8d5d0000 100644
--- a/openal-soft/COPYING
+++ b/vendor/openal-soft/COPYING
diff --git a/openal-soft/dist/Win32/OpenAL32.dll b/vendor/openal-soft/dist/Win32/OpenAL32.dll
index 6fc789e5..6fc789e5 100644
--- a/openal-soft/dist/Win32/OpenAL32.dll
+++ b/vendor/openal-soft/dist/Win32/OpenAL32.dll
Binary files differ
diff --git a/openal-soft/dist/Win64/OpenAL32.dll b/vendor/openal-soft/dist/Win64/OpenAL32.dll
index 3c631e3a..3c631e3a 100644
--- a/openal-soft/dist/Win64/OpenAL32.dll
+++ b/vendor/openal-soft/dist/Win64/OpenAL32.dll
Binary files differ
diff --git a/openal-soft/include/AL/al.h b/vendor/openal-soft/include/AL/al.h
index 413b3833..413b3833 100644
--- a/openal-soft/include/AL/al.h
+++ b/vendor/openal-soft/include/AL/al.h
diff --git a/openal-soft/include/AL/alc.h b/vendor/openal-soft/include/AL/alc.h
index 5786bad2..5786bad2 100644
--- a/openal-soft/include/AL/alc.h
+++ b/vendor/openal-soft/include/AL/alc.h
diff --git a/openal-soft/include/AL/alext.h b/vendor/openal-soft/include/AL/alext.h
index bfc7c104..bfc7c104 100644
--- a/openal-soft/include/AL/alext.h
+++ b/vendor/openal-soft/include/AL/alext.h
diff --git a/openal-soft/include/AL/efx-creative.h b/vendor/openal-soft/include/AL/efx-creative.h
index 0a04c982..0a04c982 100644
--- a/openal-soft/include/AL/efx-creative.h
+++ b/vendor/openal-soft/include/AL/efx-creative.h
diff --git a/openal-soft/include/AL/efx-presets.h b/vendor/openal-soft/include/AL/efx-presets.h
index 8539fd51..8539fd51 100644
--- a/openal-soft/include/AL/efx-presets.h
+++ b/vendor/openal-soft/include/AL/efx-presets.h
diff --git a/openal-soft/include/AL/efx.h b/vendor/openal-soft/include/AL/efx.h
index 34085651..34085651 100644
--- a/openal-soft/include/AL/efx.h
+++ b/vendor/openal-soft/include/AL/efx.h
diff --git a/openal-soft/libs/Win32/OpenAL32.def b/vendor/openal-soft/libs/Win32/OpenAL32.def
index 32820731..32820731 100644
--- a/openal-soft/libs/Win32/OpenAL32.def
+++ b/vendor/openal-soft/libs/Win32/OpenAL32.def
diff --git a/openal-soft/libs/Win32/OpenAL32.lib b/vendor/openal-soft/libs/Win32/OpenAL32.lib
index 542f441a..542f441a 100644
--- a/openal-soft/libs/Win32/OpenAL32.lib
+++ b/vendor/openal-soft/libs/Win32/OpenAL32.lib
Binary files differ
diff --git a/openal-soft/libs/Win32/libOpenAL32.dll.a b/vendor/openal-soft/libs/Win32/libOpenAL32.dll.a
index 12c69099..12c69099 100644
--- a/openal-soft/libs/Win32/libOpenAL32.dll.a
+++ b/vendor/openal-soft/libs/Win32/libOpenAL32.dll.a
Binary files differ
diff --git a/openal-soft/libs/Win64/OpenAL32.def b/vendor/openal-soft/libs/Win64/OpenAL32.def
index 32820731..32820731 100644
--- a/openal-soft/libs/Win64/OpenAL32.def
+++ b/vendor/openal-soft/libs/Win64/OpenAL32.def
diff --git a/openal-soft/libs/Win64/OpenAL32.lib b/vendor/openal-soft/libs/Win64/OpenAL32.lib
index 2ea3cd9d..2ea3cd9d 100644
--- a/openal-soft/libs/Win64/OpenAL32.lib
+++ b/vendor/openal-soft/libs/Win64/OpenAL32.lib
Binary files differ
diff --git a/openal-soft/libs/Win64/libOpenAL32.dll.a b/vendor/openal-soft/libs/Win64/libOpenAL32.dll.a
index cbbd230d..cbbd230d 100644
--- a/openal-soft/libs/Win64/libOpenAL32.dll.a
+++ b/vendor/openal-soft/libs/Win64/libOpenAL32.dll.a
Binary files differ
diff --git a/openal-soft/readme.txt b/vendor/openal-soft/readme.txt
index ca30a1bc..ca30a1bc 100644
--- a/openal-soft/readme.txt
+++ b/vendor/openal-soft/readme.txt
diff --git a/vendor/opus b/vendor/opus
new file mode 160000
+Subproject 6bae366f9fef25191fc812c430e8abd40a13a23
diff --git a/vendor/opusfile b/vendor/opusfile
new file mode 160000
+Subproject 6452e838e68e8f4fc0b3599523c760ac6276ce8