mirror of
https://gitlab.com/GaryOderNichts/re3-wiiu.git
synced 2025-02-08 22:43:24 +01:00
Merge branch 'miami' of https://github.com/GTAmodding/re3 into miami-wiiu
This commit is contained in:
commit
9967865476
13
.github/pull_request_template.md
vendored
Normal file
13
.github/pull_request_template.md
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are **completely** reversed code from original binaries.
|
||||||
|
|
||||||
|
We **don't** accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.
|
||||||
|
|
||||||
|
We accept only these kinds of PRs;
|
||||||
|
|
||||||
|
- A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
|
||||||
|
- Game, UI or UX bug fixes (if it's a fix to R* code, it should be behind FIX_BUGS)
|
||||||
|
- Platform-specific and/or unused code that's not been reversed yet
|
||||||
|
- Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
|
||||||
|
- A new cross-platform skeleton/compatibility layer, or improvements to them
|
||||||
|
- Translation fixes, for languages R* supported/outsourced
|
||||||
|
- Code that increase maintainability
|
116
.github/workflows/build-cmake-conan.yml
vendored
116
.github/workflows/build-cmake-conan.yml
vendored
@ -1,116 +0,0 @@
|
|||||||
name: reVC conan+cmake
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
push:
|
|
||||||
release:
|
|
||||||
types: published
|
|
||||||
jobs:
|
|
||||||
build-cmake:
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- os: 'windows-latest'
|
|
||||||
platform: 'gl3'
|
|
||||||
gl3_gfxlib: 'glfw'
|
|
||||||
audio: 'openal'
|
|
||||||
# - os: 'windows-latest'
|
|
||||||
# platform: 'gl3'
|
|
||||||
# gl3_gfxlib: 'sdl2'
|
|
||||||
# audio: 'openal'
|
|
||||||
- os: 'windows-latest'
|
|
||||||
platform: 'd3d9'
|
|
||||||
audio: 'openal'
|
|
||||||
# - os: 'windows-latest'
|
|
||||||
# platform: 'd3d9'
|
|
||||||
# audio: 'miles'
|
|
||||||
- os: 'ubuntu-latest'
|
|
||||||
platform: 'gl3'
|
|
||||||
gl3_gfxlib: 'glfw'
|
|
||||||
audio: 'openal'
|
|
||||||
# - os: 'ubuntu-latest'
|
|
||||||
# platform: 'gl3'
|
|
||||||
# gl3_gfxlib: 'sdl2'
|
|
||||||
# audio: 'openal'
|
|
||||||
- os: 'macos-latest'
|
|
||||||
platform: 'gl3'
|
|
||||||
gl3_gfxlib: 'glfw'
|
|
||||||
audio: 'openal'
|
|
||||||
# - os: 'macos-latest'
|
|
||||||
# platform: 'gl3'
|
|
||||||
# gl3_gfxlib: 'sdl2'
|
|
||||||
# audio: 'openal'
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
continue-on-error: ${{ matrix.platform == 'ps2' || matrix.gl3_gfxlib == 'sdl2' || matrix.audio == 'miles' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: "Checkout Miles SDK Import Library project"
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
if: ${{ matrix.audio == 'miles' }}
|
|
||||||
with:
|
|
||||||
repository: 'withmorten/re3mss'
|
|
||||||
path: 're3mss'
|
|
||||||
- uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: '3.x'
|
|
||||||
- name: "Use XCode 11 as default (conan-center-index does not provide XCode 12 binaries at the moment)"
|
|
||||||
if: startsWith(matrix.os, 'macos')
|
|
||||||
run: |
|
|
||||||
sudo xcode-select --switch /Applications/Xcode_11.7.app
|
|
||||||
- name: "Setup conan"
|
|
||||||
run: |
|
|
||||||
python -m pip install conan
|
|
||||||
conan config init
|
|
||||||
conan config set log.print_run_commands=True
|
|
||||||
conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
|
|
||||||
conan remote add madebr_ps2dev https://api.bintray.com/conan/madebr/ps2dev
|
|
||||||
- name: "Add os=playstation2 + gcc.version=3.2 to .conan/settings.yml"
|
|
||||||
shell: python
|
|
||||||
run: |
|
|
||||||
import os, yaml
|
|
||||||
settings_path = os.path.expanduser("~/.conan/settings.yml")
|
|
||||||
yml = yaml.safe_load(open(settings_path))
|
|
||||||
yml["os"]["playstation2"] = None
|
|
||||||
yml["compiler"]["gcc"]["version"].append("3.2")
|
|
||||||
yml["compiler"]["gcc"]["version"].sort()
|
|
||||||
yaml.safe_dump(yml, open(settings_path, "w"))
|
|
||||||
- name: "Create host profile"
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if test "${{ matrix.platform }}" = "ps2"; then
|
|
||||||
cp vendor/librw/conan/playstation2 host_profile
|
|
||||||
else
|
|
||||||
cp ~/.conan/profiles/default host_profile
|
|
||||||
fi
|
|
||||||
- name: "Export Playstation 2 CMake toolchain conan recipe"
|
|
||||||
run: |
|
|
||||||
conan export vendor/librw/cmake/ps2toolchain ps2dev-cmaketoolchain/master@
|
|
||||||
- name: "Export librw conan recipe"
|
|
||||||
run: |
|
|
||||||
conan export vendor/librw librw/master@
|
|
||||||
- name: "Export Miles SDK conan recipe"
|
|
||||||
if: ${{ matrix.audio == 'miles' }}
|
|
||||||
run: |
|
|
||||||
conan export re3mss miles-sdk/master@
|
|
||||||
- name: "Download/build dependencies (conan install)"
|
|
||||||
run: |
|
|
||||||
conan install ${{ github.workspace }} reVC/master@ -if build -o reVC:audio=${{ matrix.audio }} -o librw:platform=${{ matrix.platform }} -o librw:gl3_gfxlib=${{ matrix.gl3_gfxlib || 'glfw' }} --build missing -pr:h ./host_profile -pr:b default -s reVC:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
|
|
||||||
env:
|
|
||||||
CONAN_SYSREQUIRES_MODE: enabled
|
|
||||||
- name: "Build reVC (conan build)"
|
|
||||||
run: |
|
|
||||||
conan build ${{ github.workspace }} -if build -bf build -pf package
|
|
||||||
- name: "Package reVC (conan package)"
|
|
||||||
run: |
|
|
||||||
conan package ${{ github.workspace }} -if build -bf build -pf package
|
|
||||||
- name: "Create binary package (cpack)"
|
|
||||||
working-directory: ./build
|
|
||||||
run: |
|
|
||||||
cpack -C RelWithDebInfo
|
|
||||||
- name: "Archive binary package (github artifacts)"
|
|
||||||
uses: actions/upload-artifact@v2
|
|
||||||
with:
|
|
||||||
name: "${{ matrix.os }}-${{ matrix.platform }}"
|
|
||||||
path: build/*.tar.xz
|
|
||||||
if-no-files-found: error
|
|
67
.github/workflows/reVC_msvc_amd64.yml
vendored
67
.github/workflows/reVC_msvc_amd64.yml
vendored
@ -1,67 +0,0 @@
|
|||||||
name: reVC premake 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, Vanilla]
|
|
||||||
steps:
|
|
||||||
- name: Add msbuild to PATH
|
|
||||||
uses: microsoft/setup-msbuild@v1.0.2
|
|
||||||
- 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}}
|
|
68
.github/workflows/reVC_msvc_x86.yml
vendored
68
.github/workflows/reVC_msvc_x86.yml
vendored
@ -1,68 +0,0 @@
|
|||||||
name: reVC premake 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, Vanilla]
|
|
||||||
steps:
|
|
||||||
- name: Add msbuild to PATH
|
|
||||||
uses: microsoft/setup-msbuild@v1.0.2
|
|
||||||
- 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}}
|
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -359,6 +359,8 @@ codewarrior/reVC_Data/
|
|||||||
codewarrior/Release/
|
codewarrior/Release/
|
||||||
codewarrior/Debug/
|
codewarrior/Debug/
|
||||||
|
|
||||||
|
src/extras/GitSHA1.cpp
|
||||||
|
|
||||||
*.rpx
|
*.rpx
|
||||||
*.elf
|
*.elf
|
||||||
/.vscode
|
/.vscode
|
||||||
|
@ -6,6 +6,10 @@ set(PROJECT REVC)
|
|||||||
project(${EXECUTABLE} C CXX)
|
project(${EXECUTABLE} C CXX)
|
||||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
include(GetGitRevisionDescription)
|
||||||
|
get_git_head_revision(GIT_REFSPEC GIT_SHA1 "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
|
||||||
|
message(STATUS "Building ${CMAKE_PROJECT_NAME} GIT SHA1: ${GIT_SHA1}")
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(${PROJECT}_AUDIOS "OAL" "MSS")
|
set(${PROJECT}_AUDIOS "OAL" "MSS")
|
||||||
else()
|
else()
|
||||||
|
195
README.md
195
README.md
@ -1,5 +1,5 @@
|
|||||||
# reVC-wiiu
|
# reVC-wiiu
|
||||||
<img src="https://github.com/GaryOderNichts/re3-wiiu/blob/wiiu/logo.png?raw=true" alt="re3 logo" width="200">
|
<img src="https://github.com/GaryOderNichts/re3-wiiu/blob/miami-wiiu/logo.png?raw=true" alt="reVC logo" width="200">
|
||||||
|
|
||||||
This is a port of GTA Vice City to the Nintendo Wii U.
|
This is a port of GTA Vice City to the Nintendo Wii U.
|
||||||
|
|
||||||
@ -12,49 +12,192 @@ Then clone this repo using `git clone --recursive https://github.com/GaryOderNic
|
|||||||
To build the channel edit `CHANNEL_BUILD := 0` to `CHANNEL_BUILD := 1` in the `Makefile`.
|
To build the channel edit `CHANNEL_BUILD := 0` to `CHANNEL_BUILD := 1` in the `Makefile`.
|
||||||
|
|
||||||
# Original README
|
# Original README
|
||||||
|
|
||||||
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmiami&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=miami)
|
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FGTAmodding%2Fre3%2Fbadge%3Fref%3Dmiami&style=flat)](https://actions-badge.atrox.dev/GTAmodding/re3/goto?ref=miami)
|
||||||
<a href="https://discord.gg/aKYAwCx92H"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
|
<a href="https://discord.gg/ERYg58ttcE"><img src="https://img.shields.io/badge/discord-join-7289DA.svg?logo=discord&longCache=true&style=flat" /></a>
|
||||||
|
|
||||||
## Intro
|
## Intro
|
||||||
|
|
||||||
The aim of this project is to reverse GTA Vice City for PC.
|
In this repository you'll find the fully reversed source code for GTA III ([master](https://github.com/GTAmodding/re3/tree/master/) branch) and GTA VC ([miami](https://github.com/GTAmodding/re3/tree/miami/) branch).
|
||||||
|
|
||||||
|
It has been tested and works on Windows, Linux and FreeBSD, on x86, amd64, arm and arm64.\
|
||||||
|
Rendering is handled either by original RenderWare (D3D8)
|
||||||
|
or the reimplementation [librw](https://github.com/aap/librw) (D3D9, OpenGL 2.1 or above, OpenGL ES 2.0 or above).\
|
||||||
|
Audio is done with MSS (using dlls from original GTA) or OpenAL.
|
||||||
|
|
||||||
|
We cannot build for PS2 or Xbox yet. If you're interested in doing so, get in touch with us.
|
||||||
|
|
||||||
## How can I try it?
|
## How can I try it?
|
||||||
|
|
||||||
- reVC requires game assets to work, so you **must** own [a copy of GTA Vice City](https://store.steampowered.com/app/12110/Grand_Theft_Auto_Vice_City/).
|
- reVC requires game assets to work, so you **must** own [a copy of GTA Vice City](https://store.steampowered.com/app/12110/Grand_Theft_Auto_Vice_City/).
|
||||||
- Build reVC or download it from one of the above links (Debug or Release).
|
- Build reVC or download the latest nightly build:
|
||||||
- (Optional) If you want to use optional features, copy the files in /gamefiles folder to your game root folder.
|
- [Windows D3D9 MSS 32bit](https://nightly.link/GTAmodding/re3/workflows/reVC_msvc_x86/miami/reVC_Release_win-x86-librw_d3d9-mss.zip)
|
||||||
- Move reVC.exe to GTA VC directory and run it.
|
- [Windows D3D9 64bit](https://nightly.link/GTAmodding/re3/workflows/reVC_msvc_amd64/miami/reVC_Release_win-amd64-librw_d3d9-oal.zip)
|
||||||
|
- [Windows OpenGL 64bit](https://nightly.link/GTAmodding/re3/workflows/reVC_msvc_amd64/miami/reVC_Release_win-amd64-librw_gl3_glfw-oal.zip)
|
||||||
|
- [Linux 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/miami/ubuntu-latest-gl3.zip)
|
||||||
|
- [MacOS 64bit](https://nightly.link/GTAmodding/re3/workflows/build-cmake-conan/miami/macos-latest-gl3.zip)
|
||||||
|
- Extract the downloaded zip over your GTA VC directory and run reVC. The zip includes the gamefiles and in case of OpenAL the required dlls.
|
||||||
|
|
||||||
## Preparing the environment for building
|
## Screenshots
|
||||||
|
|
||||||
You may want to point GTA_VC_RE_DIR environment variable to GTA VC root folder if you want executable to be moved there via post-build script.
|
![screen_ 1613087332](https://user-images.githubusercontent.com/1521437/107714111-f84f3200-6ccc-11eb-902e-d757481d579a.png)
|
||||||
|
![screen_ 1613086852](https://user-images.githubusercontent.com/1521437/107714115-fa18f580-6ccc-11eb-9de5-eb4cd04865d3.png)
|
||||||
|
![screen_ 1613086989](https://user-images.githubusercontent.com/1521437/107714103-f38a7e00-6ccc-11eb-88a3-c8c2033c51d6.png)
|
||||||
|
![screen_ 1613087193](https://user-images.githubusercontent.com/1521437/107714106-f4bbab00-6ccc-11eb-96a9-13821d9b9684.png)
|
||||||
|
|
||||||
- For Linux, proceed: [Building on Linux](https://github.com/GTAmodding/re3/wiki/Building-on-Linux)
|
## Improvements
|
||||||
- For FreeBSD, proceed: [Building on FreeBSD](https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD)
|
|
||||||
- For Windows, assuming you have Visual Studio:
|
|
||||||
- Clone the repo using the argument `--recursive`.
|
|
||||||
- Run one of the `premake-vsXXXX.cmd` variants on root folder.
|
|
||||||
- Open the project via Visual Studio
|
|
||||||
|
|
||||||
**If you use 64-bit D3D9**: We don't ship 64-bit Dx9 SDK. You need to download it from Microsoft if you don't have it(although it should come pre-installed after some Windows version)
|
We have implemented a number of changes and improvements to the original game.
|
||||||
|
They can be configured in `core/config.h`.
|
||||||
|
Some of them can be toggled at runtime, some cannot.
|
||||||
|
|
||||||
There are various settings at the very bottom of [config.h](https://github.com/GTAmodding/re3/tree/miami/src/core/config.h), you may want to take a look there. i.e. FIX_BUGS define fixes the bugs we've come across.
|
* Fixed a lot of smaller and bigger bugs
|
||||||
|
* User files (saves and settings) stored in GTA root directory
|
||||||
|
* Settings stored in reVC.ini file instead of gta_vc.set
|
||||||
|
* Debug menu to do and change various things (Ctrl-M to open)
|
||||||
|
* Debug camera (Ctrl-B to toggle)
|
||||||
|
* Rotatable camera
|
||||||
|
* XInput controller support (Windows)
|
||||||
|
* No loading screens between islands ("map memory usage" in menu)
|
||||||
|
* Rendering
|
||||||
|
* Widescreen support (properly scaled HUD, Menu and FOV)
|
||||||
|
* PS2 MatFX (vehicle reflections)
|
||||||
|
* PS2 alpha test (better rendering of transparency)
|
||||||
|
* Xbox vehicle rendering
|
||||||
|
* Xbox world lightmap rendering (needs Xbox map)
|
||||||
|
* Xbox ped rim light
|
||||||
|
* Xbox screen rain droplets
|
||||||
|
* More customizable colourfilter
|
||||||
|
* Menu
|
||||||
|
* More options
|
||||||
|
* Controller configuration menu
|
||||||
|
* ...
|
||||||
|
* Can load DFFs and TXDs from other platforms, possibly with a performance penalty
|
||||||
|
* ...
|
||||||
|
|
||||||
> :information_source: **If you choose OpenAL on Windows** You must read [Running OpenAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows).
|
## To-Do
|
||||||
|
|
||||||
> :information_source: **Did you notice librw?** reVC uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of reVC, but you also can use LIBRW enviorenment variable to specify path to your own librw.
|
The following things would be nice to have/do:
|
||||||
|
|
||||||
|
* Fix physics for high FPS
|
||||||
|
* Improve performance on lower end devices, especially the OpenGL layer on the Raspberry Pi (if you have experience with this, please get in touch)
|
||||||
|
* [PS2 port](https://github.com/GTAmodding/re3/wiki/PS2-port)
|
||||||
|
* Xbox port (not quite as important)
|
||||||
|
* reverse remaining unused/debug functions
|
||||||
|
* compare CodeWarrior build with original binary for more accurate code (very tedious)
|
||||||
|
|
||||||
|
## Modding
|
||||||
|
|
||||||
|
Asset modifications (models, texture, handling, script, ...) should work the same way as with original GTA for the most part.
|
||||||
|
|
||||||
|
Mods that make changes to the code (dll/asi, CLEO, limit adjusters) will *not* work.
|
||||||
|
Some things these mods do are already implemented in re3 (much of SkyGFX, GInput, SilentPatch, Widescreen fix),
|
||||||
|
others can easily be achieved (increasing limis, see `config.h`),
|
||||||
|
others will simply have to be rewritten and integrated into the code directly.
|
||||||
|
Sorry for the inconvenience.
|
||||||
|
|
||||||
|
## Building from Source
|
||||||
|
|
||||||
|
When using premake, you may want to point GTA_VC_RE_DIR environment variable to GTA Vice City root folder if you want the executable to be moved there via post-build script.
|
||||||
|
|
||||||
|
Clone the repository with `git clone --recursive -b miami https://github.com/GTAmodding/re3.git reVC`. Then `cd reVC` into the cloned repository.
|
||||||
|
|
||||||
|
<details><summary>Linux Premake</summary>
|
||||||
|
|
||||||
|
For Linux using premake, proceed: [Building on Linux](https://github.com/GTAmodding/re3/wiki/Building-on-Linux)
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details><summary>Linux Conan</summary>
|
||||||
|
|
||||||
|
Install python and conan, and then run build.
|
||||||
|
```
|
||||||
|
conan export vendor/librw librw/master@
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
conan install .. reVC/master@ -if build -o reVC:audio=openal -o librw:platform=gl3 -o librw:gl3_gfxlib=glfw --build missing -s reVC:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
|
||||||
|
conan build .. -if build -bf build -pf package
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details><summary>FreeBSD</summary>
|
||||||
|
|
||||||
|
For FreeBSD using premake, proceed: [Building on FreeBSD](https://github.com/GTAmodding/re3/wiki/Building-on-FreeBSD)
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details><summary>Windows</summary>
|
||||||
|
|
||||||
|
Assuming you have Visual Studio 2015/2017/2019:
|
||||||
|
- Run one of the `premake-vsXXXX.cmd` variants on root folder.
|
||||||
|
- Open build/reVC.sln with Visual Studio and compile the solution.
|
||||||
|
|
||||||
|
Microsoft recently discontinued its downloads of the DX9 SDK. You can download an archived version here: https://archive.org/details/dxsdk_jun10
|
||||||
|
|
||||||
|
**If you choose OpenAL on Windows** You must read [Running OpenAL build on Windows](https://github.com/GTAmodding/re3/wiki/Running-OpenAL-build-on-Windows).
|
||||||
|
</details>
|
||||||
|
|
||||||
|
> :information_source: premake has an `--lto` option if you want the project to be compiled with Link Time Optimization.
|
||||||
|
|
||||||
|
> :information_source: There are various settings in [config.h](https://github.com/GTAmodding/re3/tree/miami/src/core/config.h), you may want to take a look there.
|
||||||
|
|
||||||
|
> :information_source: reVC uses completely homebrew RenderWare-replacement rendering engine; [librw](https://github.com/aap/librw/). librw comes as submodule of re3, but you also can use LIBRW enviorenment variable to specify path to your own librw.
|
||||||
|
|
||||||
|
If you feel the need, you can also use CodeWarrior 7 to compile reVC using the supplied codewarrior/reVC.mcp project - this requires the original RW34 libraries, and the DX8 SDK. The build is unstable compared to the MSVC builds though, and is mostly meant to serve as a reference.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
Please read the [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) Document
|
As long as it's not linux/cross-platform skeleton/compatibility layer, all of the code on the repo that's not behind a preprocessor condition(like FIX_BUGS) are **completely** reversed code from original binaries.
|
||||||
|
|
||||||
### Unreversed / incomplete classes
|
We **don't** accept custom codes, as long as it's not wrapped via preprocessor conditions, or it's linux/cross-platform skeleton/compatibility layer.
|
||||||
|
|
||||||
PS2/Mobile stuff:
|
We accept only these kinds of PRs;
|
||||||
|
|
||||||
src/core/Pad.cpp
|
- A new feature that exists in at least one of the GTAs (if it wasn't in III/VC then it doesn't have to be decompilation)
|
||||||
src/core/main.cpp
|
- Game, UI or UX bug fixes (if it's a fix to original code, it should be behind FIX_BUGS)
|
||||||
src/core/Frontend_PS2.cpp
|
- Platform-specific and/or unused code that's not been reversed yet
|
||||||
src/core/FrontEndControls.cpp
|
- Makes reversed code more understandable/accurate, as in "which code would produce this assembly".
|
||||||
src/save/MemoryCard.cpp
|
- A new cross-platform skeleton/compatibility layer, or improvements to them
|
||||||
|
- Translation fixes, for languages original game supported
|
||||||
|
- Code that increase maintainability
|
||||||
|
|
||||||
|
We have a [Coding Style](https://github.com/GTAmodding/re3/blob/master/CODING_STYLE.md) document that isn't followed or enforced very well.
|
||||||
|
|
||||||
|
Do not use features from C++11 or later.
|
||||||
|
|
||||||
|
|
||||||
|
## History
|
||||||
|
|
||||||
|
re3 was started sometime in the spring of 2018,
|
||||||
|
initially as a way to test reversed collision and physics code
|
||||||
|
inside the game.
|
||||||
|
This was done by replacing single functions of the game
|
||||||
|
with their reversed counterparts using a dll.
|
||||||
|
|
||||||
|
After a bit of work the project lay dormant for about a year
|
||||||
|
and was picked up again and pushed to github in May 2019.
|
||||||
|
At the time I (aap) had reversed around 10k lines of code and estimated
|
||||||
|
the final game to have around 200-250k.
|
||||||
|
Others quickly joined the effort (Fire_Head, shfil, erorcun and Nick007J
|
||||||
|
in time order, and Serge a bit later) and we made very quick progress
|
||||||
|
throughout the summer of 2019
|
||||||
|
after which the pace slowed down a bit.
|
||||||
|
|
||||||
|
Due to everyone staying home during the start of the Corona pandemic
|
||||||
|
everybody had a lot of time to work on re3 again and
|
||||||
|
we finally got a standalone exe in April 2020 (around 180k lines by then).
|
||||||
|
|
||||||
|
After the initial excitement and fixing and polishing the code further,
|
||||||
|
reVC was started in early May 2020 by starting from re3 code,
|
||||||
|
not by starting from scratch replacing functions with a dll.
|
||||||
|
After a few months of mostly steady progress we considered reVC
|
||||||
|
finished in December.
|
||||||
|
|
||||||
|
Since then we have started reLCS, which is currently work in progress.
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
We don't feel like we're in a position to give this code a license.\
|
||||||
|
The code should only be used for educational, documentation and modding purposes.\
|
||||||
|
We do not encourage piracy or commercial use.\
|
||||||
|
Please keep derivate work open source and give proper credit.
|
||||||
|
284
cmake/GetGitRevisionDescription.cmake
Normal file
284
cmake/GetGitRevisionDescription.cmake
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
# - Returns a version string from Git
|
||||||
|
#
|
||||||
|
# These functions force a re-configure on each git commit so that you can
|
||||||
|
# trust the values of the variables in your build system.
|
||||||
|
#
|
||||||
|
# get_git_head_revision(<refspecvar> <hashvar> [ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR])
|
||||||
|
#
|
||||||
|
# Returns the refspec and sha hash of the current head revision
|
||||||
|
#
|
||||||
|
# git_describe(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe on the source tree, and adjusting
|
||||||
|
# the output so that it tests false if an error occurs.
|
||||||
|
#
|
||||||
|
# git_describe_working_tree(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe on the working tree (--dirty option),
|
||||||
|
# and adjusting the output so that it tests false if an error occurs.
|
||||||
|
#
|
||||||
|
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
|
||||||
|
#
|
||||||
|
# Returns the results of git describe --exact-match on the source tree,
|
||||||
|
# and adjusting the output so that it tests false if there was no exact
|
||||||
|
# matching tag.
|
||||||
|
#
|
||||||
|
# git_local_changes(<var>)
|
||||||
|
#
|
||||||
|
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
|
||||||
|
# Uses the return code of "git diff-index --quiet HEAD --".
|
||||||
|
# Does not regard untracked files.
|
||||||
|
#
|
||||||
|
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2009-2020 Ryan Pavlik <ryan.pavlik@gmail.com> <abiryan@ryand.net>
|
||||||
|
# http://academic.cleardefinition.com
|
||||||
|
#
|
||||||
|
# Copyright 2009-2013, Iowa State University.
|
||||||
|
# Copyright 2013-2020, Ryan Pavlik
|
||||||
|
# Copyright 2013-2020, Contributors
|
||||||
|
# SPDX-License-Identifier: BSL-1.0
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
if(__get_git_revision_description)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(__get_git_revision_description YES)
|
||||||
|
|
||||||
|
# We must run the following at "include" time, not at function call time,
|
||||||
|
# to find the path to this module rather than the path to a calling list file
|
||||||
|
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
|
||||||
|
|
||||||
|
# Function _git_find_closest_git_dir finds the next closest .git directory
|
||||||
|
# that is part of any directory in the path defined by _start_dir.
|
||||||
|
# The result is returned in the parent scope variable whose name is passed
|
||||||
|
# as variable _git_dir_var. If no .git directory can be found, the
|
||||||
|
# function returns an empty string via _git_dir_var.
|
||||||
|
#
|
||||||
|
# Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and
|
||||||
|
# neither foo nor bar contain a file/directory .git. This wil return
|
||||||
|
# C:/bla/.git
|
||||||
|
#
|
||||||
|
function(_git_find_closest_git_dir _start_dir _git_dir_var)
|
||||||
|
set(cur_dir "${_start_dir}")
|
||||||
|
set(git_dir "${_start_dir}/.git")
|
||||||
|
while(NOT EXISTS "${git_dir}")
|
||||||
|
# .git dir not found, search parent directories
|
||||||
|
set(git_previous_parent "${cur_dir}")
|
||||||
|
get_filename_component(cur_dir ${cur_dir} DIRECTORY)
|
||||||
|
if(cur_dir STREQUAL git_previous_parent)
|
||||||
|
# We have reached the root directory, we are not in git
|
||||||
|
set(${_git_dir_var}
|
||||||
|
""
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(git_dir "${cur_dir}/.git")
|
||||||
|
endwhile()
|
||||||
|
set(${_git_dir_var}
|
||||||
|
"${git_dir}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(get_git_head_revision _refspecvar _hashvar)
|
||||||
|
_git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR)
|
||||||
|
|
||||||
|
if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR")
|
||||||
|
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE)
|
||||||
|
else()
|
||||||
|
set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE)
|
||||||
|
endif()
|
||||||
|
if(NOT "${GIT_DIR}" STREQUAL "")
|
||||||
|
file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}"
|
||||||
|
"${GIT_DIR}")
|
||||||
|
if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR)
|
||||||
|
# We've gone above the CMake root dir.
|
||||||
|
set(GIT_DIR "")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if("${GIT_DIR}" STREQUAL "")
|
||||||
|
set(${_refspecvar}
|
||||||
|
"GITDIR-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${_hashvar}
|
||||||
|
"GITDIR-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check if the current source dir is a git submodule or a worktree.
|
||||||
|
# In both cases .git is a file instead of a directory.
|
||||||
|
#
|
||||||
|
if(NOT IS_DIRECTORY ${GIT_DIR})
|
||||||
|
# The following git command will return a non empty string that
|
||||||
|
# points to the super project working tree if the current
|
||||||
|
# source dir is inside a git submodule.
|
||||||
|
# Otherwise the command will return an empty string.
|
||||||
|
#
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" rev-parse
|
||||||
|
--show-superproject-working-tree
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT "${out}" STREQUAL "")
|
||||||
|
# If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule
|
||||||
|
file(READ ${GIT_DIR} submodule)
|
||||||
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE
|
||||||
|
${submodule})
|
||||||
|
string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE)
|
||||||
|
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
|
||||||
|
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE}
|
||||||
|
ABSOLUTE)
|
||||||
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
|
else()
|
||||||
|
# GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree
|
||||||
|
file(READ ${GIT_DIR} worktree_ref)
|
||||||
|
# The .git directory contains a path to the worktree information directory
|
||||||
|
# inside the parent git repo of the worktree.
|
||||||
|
#
|
||||||
|
string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir
|
||||||
|
${worktree_ref})
|
||||||
|
string(STRIP ${git_worktree_dir} git_worktree_dir)
|
||||||
|
_git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR)
|
||||||
|
set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD")
|
||||||
|
endif()
|
||||||
|
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
|
||||||
|
if(NOT EXISTS "${GIT_DATA}")
|
||||||
|
file(MAKE_DIRECTORY "${GIT_DATA}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${HEAD_SOURCE_FILE}")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
set(HEAD_FILE "${GIT_DATA}/HEAD")
|
||||||
|
configure_file("${HEAD_SOURCE_FILE}" "${HEAD_FILE}" COPYONLY)
|
||||||
|
|
||||||
|
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
|
||||||
|
"${GIT_DATA}/grabRef.cmake" @ONLY)
|
||||||
|
include("${GIT_DATA}/grabRef.cmake")
|
||||||
|
|
||||||
|
set(${_refspecvar}
|
||||||
|
"${HEAD_REF}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${_hashvar}
|
||||||
|
"${HEAD_HASH}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_describe _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
get_git_head_revision(refspec hash)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
if(NOT hash)
|
||||||
|
set(${_var}
|
||||||
|
"HEAD-HASH-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO sanitize
|
||||||
|
#if((${ARGN}" MATCHES "&&") OR
|
||||||
|
# (ARGN MATCHES "||") OR
|
||||||
|
# (ARGN MATCHES "\\;"))
|
||||||
|
# message("Please report the following error to the project!")
|
||||||
|
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
|
||||||
|
#endif()
|
||||||
|
|
||||||
|
#message(STATUS "Arguments to execute_process: ${ARGN}")
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --tags --always ${hash} ${ARGN}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_describe_working_tree _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(NOT res EQUAL 0)
|
||||||
|
set(out "${out}-${res}-NOTFOUND")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_get_exact_tag _var)
|
||||||
|
git_describe(out --exact-match ${ARGN})
|
||||||
|
set(${_var}
|
||||||
|
"${out}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
function(git_local_changes _var)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
find_package(Git QUIET)
|
||||||
|
endif()
|
||||||
|
get_git_head_revision(refspec hash)
|
||||||
|
if(NOT GIT_FOUND)
|
||||||
|
set(${_var}
|
||||||
|
"GIT-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
if(NOT hash)
|
||||||
|
set(${_var}
|
||||||
|
"HEAD-HASH-NOTFOUND"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD --
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
|
RESULT_VARIABLE res
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(res EQUAL 0)
|
||||||
|
set(${_var}
|
||||||
|
"CLEAN"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
else()
|
||||||
|
set(${_var}
|
||||||
|
"DIRTY"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
43
cmake/GetGitRevisionDescription.cmake.in
Normal file
43
cmake/GetGitRevisionDescription.cmake.in
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#
|
||||||
|
# Internal file for GetGitRevisionDescription.cmake
|
||||||
|
#
|
||||||
|
# Requires CMake 2.6 or newer (uses the 'function' command)
|
||||||
|
#
|
||||||
|
# Original Author:
|
||||||
|
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
|
||||||
|
# http://academic.cleardefinition.com
|
||||||
|
# Iowa State University HCI Graduate Program/VRAC
|
||||||
|
#
|
||||||
|
# Copyright 2009-2012, Iowa State University
|
||||||
|
# Copyright 2011-2015, Contributors
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
# http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
# SPDX-License-Identifier: BSL-1.0
|
||||||
|
|
||||||
|
set(HEAD_HASH)
|
||||||
|
|
||||||
|
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
|
||||||
|
|
||||||
|
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
|
||||||
|
if(HEAD_CONTENTS MATCHES "ref")
|
||||||
|
# named branch
|
||||||
|
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
|
||||||
|
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
|
||||||
|
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
|
||||||
|
else()
|
||||||
|
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
|
||||||
|
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
|
||||||
|
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
|
||||||
|
set(HEAD_HASH "${CMAKE_MATCH_1}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# detached HEAD
|
||||||
|
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT HEAD_HASH)
|
||||||
|
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
|
||||||
|
string(STRIP "${HEAD_HASH}" HEAD_HASH)
|
||||||
|
endif()
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
gamefiles/models/frontend_ds2.txd
Normal file
BIN
gamefiles/models/frontend_ds2.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_ds3.txd
Normal file
BIN
gamefiles/models/frontend_ds3.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_ds4.txd
Normal file
BIN
gamefiles/models/frontend_ds4.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_x360.txd
Normal file
BIN
gamefiles/models/frontend_x360.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/frontend_xone.txd
Normal file
BIN
gamefiles/models/frontend_xone.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/generic.txd
Normal file
BIN
gamefiles/models/generic.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/particle.txd
Normal file
BIN
gamefiles/models/particle.txd
Normal file
Binary file not shown.
BIN
gamefiles/models/ps3btns.txd
Normal file
BIN
gamefiles/models/ps3btns.txd
Normal file
Binary file not shown.
Binary file not shown.
162
logo.svg
Normal file
162
logo.svg
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
sodipodi:docname="reVC.svg"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07, custom)"
|
||||||
|
id="svg8"
|
||||||
|
version="1.1"
|
||||||
|
viewBox="0 0 270.93331 270.93334"
|
||||||
|
height="1024"
|
||||||
|
width="1024"
|
||||||
|
inkscape:export-filename="/home/hazelnot/Design/re3_final.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96">
|
||||||
|
<defs
|
||||||
|
id="defs2">
|
||||||
|
<filter
|
||||||
|
style="color-interpolation-filters:sRGB"
|
||||||
|
inkscape:label="Drop Shadow"
|
||||||
|
id="filter1055">
|
||||||
|
<feFlood
|
||||||
|
flood-opacity="1"
|
||||||
|
flood-color="rgb(0,0,0)"
|
||||||
|
result="flood"
|
||||||
|
id="feFlood1045" />
|
||||||
|
<feComposite
|
||||||
|
in="flood"
|
||||||
|
in2="SourceGraphic"
|
||||||
|
operator="in"
|
||||||
|
result="composite1"
|
||||||
|
id="feComposite1047" />
|
||||||
|
<feGaussianBlur
|
||||||
|
in="composite1"
|
||||||
|
stdDeviation="0"
|
||||||
|
result="blur"
|
||||||
|
id="feGaussianBlur1049" />
|
||||||
|
<feOffset
|
||||||
|
dx="1"
|
||||||
|
dy="1"
|
||||||
|
result="offset"
|
||||||
|
id="feOffset1051" />
|
||||||
|
<feComposite
|
||||||
|
in="SourceGraphic"
|
||||||
|
in2="offset"
|
||||||
|
operator="over"
|
||||||
|
result="composite2"
|
||||||
|
id="feComposite1053" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<sodipodi:namedview
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-height="1359"
|
||||||
|
inkscape:window-width="2560"
|
||||||
|
inkscape:snap-page="true"
|
||||||
|
inkscape:showpageshadow="false"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
inkscape:current-layer="svg8"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:cy="624.20389"
|
||||||
|
inkscape:cx="108.63858"
|
||||||
|
inkscape:zoom="0.7"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
borderopacity="1"
|
||||||
|
bordercolor="#000000"
|
||||||
|
pagecolor="#606060"
|
||||||
|
id="base"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
lock-margins="false"
|
||||||
|
units="px" />
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="g837"
|
||||||
|
transform="matrix(2.1130708,0,0,2.1130708,14.956432,63.50059)"
|
||||||
|
style="display:none">
|
||||||
|
<path
|
||||||
|
id="path1450"
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.83595;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="M 0.91799998,0.91799998 V 54.101316 H 17.960888 v 2.33009 c 0,2.95453 1.347497,6.384348 3.911905,8.332308 2.564408,1.947971 5.514112,2.433445 8.500257,2.433445 h 46.367194 v -14.5464 c 2.171993,1.134845 4.548071,1.450557 6.948413,1.450557 h 17.042893 c 2.98614,0 5.93584,-0.485482 8.50025,-2.433442 2.5644,-1.94796 3.91191,-5.377273 3.91191,-8.331793 V 30.964744 c 0,-1.094128 -0.25094,-2.296243 -0.70487,-3.457153 0.45593,-1.16196 0.70487,-2.363609 0.70487,-3.453019 V 11.81656 c 0,-2.9682265 -1.29681,-6.3966108 -3.85713,-8.3907028 -2.56031,-1.9940909 -5.55104,-2.50785722 -8.55503,-2.50785722 H 83.819398 c -3.003989,0 -5.99213,0.51376632 -8.55245,2.50785722 C 74.832145,3.7645045 74.436551,4.1470248 74.074773,4.5591214 73.713016,4.1470532 73.317379,3.7644843 72.8826,3.4258572 70.322288,1.4317663 67.332073,0.91799998 64.328081,0.91799998 H 47.285195 c -2.976748,0 -5.937909,0.51342982 -8.482687,2.46289872 C 36.275393,1.4370808 33.325985,0.91799998 30.37305,0.91799998 Z"
|
||||||
|
inkscape:label="Border" />
|
||||||
|
<g
|
||||||
|
id="g1475"
|
||||||
|
inkscape:label="Text"
|
||||||
|
style="display:inline"
|
||||||
|
transform="translate(-51.547657,-77.439255)">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:11.136;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="m 84.566726,139.06892 c -4.562445,0 -6.843668,-1.73285 -6.843668,-5.19856 v -24.61088 c 0,-0.0877 -0.04387,-0.13161 -0.131609,-0.13161 h -3.22442 v 16.84595 H 60.679694 V 83.92475 h 23.887032 c 4.518575,0 6.777863,1.776721 6.777863,5.330164 v 12.239636 c 0,2.01801 -1.118676,3.15862 -3.356029,3.42183 2.281223,0.30709 3.421834,1.46964 3.421834,3.48764 v 20.07037 c 0,0.0877 0.04387,0.13161 0.131609,0.13161 h 33.823507 v 10.46292 z M 77.723058,94.585079 c 0,-0.08774 -0.04387,-0.131609 -0.131609,-0.131609 h -3.22442 v 6.31723 h 3.22442 c 0.08774,0 0.131609,-0.0439 0.131609,-0.13161 z m 33.955122,0 c 0,-0.08774 -0.0439,-0.131609 -0.13161,-0.131609 h -3.09281 c -0.0877,0 -0.13161,0.04387 -0.13161,0.131609 v 5.856601 h 3.35603 z m -10.1997,31.388741 c -4.562444,0 -6.843666,-1.73285 -6.843666,-5.19855 V 89.254914 c 0,-3.553443 2.281222,-5.330164 6.843666,-5.330164 h 17.04337 c 4.56244,0 6.84366,1.776721 6.84366,5.330164 v 20.991636 h -17.04336 v 5.13275 c 0,0.0877 0.0439,0.13161 0.13161,0.13161 h 3.09281 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -2.50057 h 13.68733 v 7.89654 c 0,3.4657 -2.28122,5.19855 -6.84366,5.19855 z"
|
||||||
|
id="path1452"
|
||||||
|
transform="translate(-2.6458322)"
|
||||||
|
inkscape:label="re" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:Pricedown;-inkscape-font-specification:Pricedown;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c60000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:11.1359;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="m 135.23613,125.97382 c -4.56245,0 -6.84367,-1.73285 -6.84367,-5.19855 v -7.89654 h 13.68733 v 2.50057 c 0,0.0877 0.0439,0.13161 0.13161,0.13161 h 3.09281 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -6.11982 c 0,-0.0877 -0.0439,-0.13161 -0.13161,-0.13161 h -16.71434 v -8.35717 h 16.71434 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -6.054011 c 0,-0.08774 -0.0439,-0.131609 -0.13161,-0.131609 h -3.09281 c -0.0877,0 -0.13161,0.04387 -0.13161,0.131609 v 2.434766 h -13.55572 v -7.764931 c 0,-3.553443 2.28122,-5.330164 6.84366,-5.330164 h 16.91176 c 4.56245,0 6.84367,1.776721 6.84367,5.330164 v 12.239636 c 0,2.01801 -1.14061,3.15862 -3.42184,3.42183 2.28123,0.30709 3.42184,1.46964 3.42184,3.48764 v 12.37125 c 0,3.4657 -2.28122,5.19855 -6.84367,5.19855 z"
|
||||||
|
id="path1458"
|
||||||
|
inkscape:label="3" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g3625-7"
|
||||||
|
inkscape:label="reVC_10"
|
||||||
|
transform="matrix(2.4113736,0,0,2.4113736,-122.44911,-160.08821)">
|
||||||
|
<path
|
||||||
|
style="display:inline;fill:#00bbe2;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 102.78895,112.11187 54.54276,9.96769 -30.34918,43.22598 z"
|
||||||
|
id="path1613-9"
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:label="triangle" />
|
||||||
|
<g
|
||||||
|
id="g3669-0"
|
||||||
|
style="display:inline;opacity:1"
|
||||||
|
inkscape:label="re">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#f17db2;stroke-width:1.60863;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="m 57.388672,80.632812 v 48.632808 h 17.042969 v 4.60547 c 0,2.45514 1.029322,5.01368 3.011718,6.51953 1.982397,1.50586 4.425056,1.97071 7.123047,1.97071 H 128.6582 v -17.04688 h -1.47851 c 0.87224,-1.37715 1.47851,-2.92106 1.47851,-4.53906 v -7.23633 -3.95312 -20.330081 c 0,-2.481169 -1.00049,-5.053605 -2.98047,-6.595703 -1.97997,-1.542097 -4.44771,-2.027344 -7.15625,-2.027344 h -17.04296 c -2.708546,10e-7 -5.176278,0.485247 -7.156254,2.027344 -0.588908,0.458669 -0.913121,1.140613 -1.328125,1.751953 -0.409812,-0.606749 -0.72664,-1.284534 -1.308594,-1.742187 -1.967878,-1.547555 -4.428385,-2.03711 -7.119141,-2.03711 z m 6.582031,6.583985 h 20.595703 c 1.827819,0 2.757419,0.399739 3.048828,0.628906 0.29141,0.229167 0.4375,0.331111 0.4375,1.410156 v 12.238281 c 0,0.0702 0.0022,0.0438 0.002,0.0801 0.03874,-0.0312 0.06635,0.0114 -0.451172,0.0723 l -0.05469,6.53321 c 0.66816,0.0899 0.752817,0.24295 0.65625,0.14453 -0.09657,-0.0984 -0.08594,-0.3087 -0.08594,0.0801 v 20.07031 c 0,0.59276 0.198598,1.6281 0.996093,2.42578 0.797496,0.79768 1.834701,0.99805 2.427735,0.99805 h 30.53125 v 3.8789 H 84.566406 c -1.864454,0 -2.841799,-0.40191 -3.140625,-0.6289 -0.298826,-0.227 -0.410156,-0.26677 -0.410156,-1.27735 v -24.61132 c 0,-0.59276 -0.200551,-1.6281 -0.998047,-2.42579 -0.797496,-0.79768 -1.832748,-0.99804 -2.425781,-0.99804 h -6.517578 v 16.8457 h -7.103516 z m 37.507817,0 h 17.04296 c 1.8539,0 2.80813,0.402095 3.10938,0.636719 0.30124,0.234623 0.44336,0.33007 0.44336,1.402343 V 106.95508 H 105.0293 v 8.42383 c 0,0.59313 0.20067,1.63031 0.99804,2.42773 0.79738,0.79742 1.83258,0.99609 2.42578,0.99609 h 3.09376 c 0.59313,0 1.62836,-0.19872 2.42578,-0.99609 0.51996,-0.51993 0.73732,-1.1028 0.85937,-1.63672 h 7.24219 v 4.60547 c 0,1.01057 -0.11133,1.05035 -0.41016,1.27734 -0.29882,0.227 -1.27812,0.62891 -3.14258,0.62891 h -17.04296 c -1.864458,0 -2.841803,-0.40191 -3.140629,-0.62891 -0.298826,-0.22699 -0.410157,-0.26677 -0.410157,-1.27734 V 89.255859 c 0,-1.072272 0.140161,-1.167719 0.441407,-1.402343 0.301246,-0.234625 1.255472,-0.636719 3.109379,-0.636719 z M 71.074219,91.162109 V 104.0625 h 6.517578 c 0.592903,0 1.628193,-0.20031 2.425781,-0.99805 0.797588,-0.79773 0.998047,-1.83309 0.998047,-2.42578 v -6.052732 c 0,-0.592528 -0.200189,-1.629881 -0.998047,-2.427735 -0.797858,-0.797853 -1.83326,-0.996094 -2.425781,-0.996094 z m 37.378901,0 c -0.59275,0 -1.62809,0.198598 -2.42578,0.996094 -0.79768,0.797496 -0.99804,1.834701 -0.99804,2.427735 v 9.148442 h 9.9414 v -9.148442 c 0,-0.592903 -0.20031,-1.630147 -0.99804,-2.427735 -0.79774,-0.797588 -1.8331,-0.996094 -2.42578,-0.996094 z"
|
||||||
|
id="path3671-2"
|
||||||
|
inkscape:label="outline" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:9.53813;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="m 84.566726,139.06892 c -4.562445,0 -6.843668,-1.73285 -6.843668,-5.19856 v -24.61088 c 0,-0.0877 -0.04387,-0.13161 -0.131609,-0.13161 h -3.22442 v 16.84595 H 60.679694 V 83.92475 h 23.887032 c 4.518575,0 6.777863,1.776721 6.777863,5.330164 v 12.239636 c 0,2.01801 -1.118676,3.15862 -3.356029,3.42183 2.281223,0.30709 3.421834,1.46964 3.421834,3.48764 v 20.07037 c 0,0.0877 0.04387,0.13161 0.131609,0.13161 h 33.823507 v 10.46292 z M 77.723058,94.585079 c 0,-0.08774 -0.04387,-0.131609 -0.131609,-0.131609 h -3.22442 v 6.31723 h 3.22442 c 0.08774,0 0.131609,-0.0439 0.131609,-0.13161 z m 33.955122,0 c 0,-0.08774 -0.0439,-0.131609 -0.13161,-0.131609 h -3.09281 c -0.0877,0 -0.13161,0.04387 -0.13161,0.131609 v 5.856601 h 3.35603 z m -10.1997,31.388741 c -4.562444,0 -6.843666,-1.73285 -6.843666,-5.19855 V 89.254914 c 0,-3.553443 2.281222,-5.330164 6.843666,-5.330164 h 17.04337 c 4.56244,0 6.84366,1.776721 6.84366,5.330164 v 20.991636 h -17.04336 v 5.13275 c 0,0.0877 0.0439,0.13161 0.13161,0.13161 h 3.09281 c 0.0877,0 0.13161,-0.0439 0.13161,-0.13161 v -2.50057 h 13.68733 v 7.89654 c 0,3.4657 -2.28122,5.19855 -6.84366,5.19855 z"
|
||||||
|
id="path3673-3"
|
||||||
|
inkscape:label="text" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g861-9-7"
|
||||||
|
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:#f17db2;stroke-opacity:1;filter:url(#filter1055)"
|
||||||
|
transform="matrix(1.3835644,0,0,1.3835644,-22.936608,36.936115)"
|
||||||
|
inkscape:label="Vc">
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f17db2;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="m 115.29478,55.979585 a 1.0583349,1.0583349 0 0 0 -0.94727,0.53711 l -13.61915,24.06445 -1.763667,-7.15234 a 1.0583349,1.0583349 0 0 0 -1.28125,-0.77344 1.0583349,1.0583349 0 0 0 -0.77344,1.28125 l 2.40235,9.73438 a 1.0584408,1.0584408 0 0 0 1.947257,0.26757 l 14.9297,-26.38086 a 1.0583349,1.0583349 0 0 0 -0.39844,-1.4414 1.0583349,1.0583349 0 0 0 -0.49609,-0.13672 z"
|
||||||
|
id="path892-1-5" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#f17db2;stroke-width:3.175;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1"
|
||||||
|
d="m 118.1854,69.604585 a 1.0583349,1.0583349 0 0 0 -0.27343,0.0391 c 0,0 -2.1903,0.59881 -4.46875,2.08789 -2.27846,1.48909 -4.77359,3.96951 -5.16602,7.69531 -0.20107,1.90898 0.49022,3.43086 1.68359,4.15821 1.19338,0.72735 2.6066,0.75222 3.94727,0.60547 2.68134,-0.29351 5.29297,-1.44336 5.29297,-1.44336 a 1.0583349,1.0583349 0 0 0 0.55078,-1.39063 1.0583349,1.0583349 0 0 0 -1.39063,-0.55273 c 0,0 -2.46507,1.04035 -4.68359,1.2832 -1.10926,0.12142 -2.10191,0.002 -2.61523,-0.31055 -0.51333,-0.31286 -0.82729,-0.72566 -0.67969,-2.12695 0.3049,-2.89473 2.23993,-4.85323 4.21875,-6.14648 1.97882,-1.29326 3.87305,-1.82032 3.87305,-1.82032 a 1.0583349,1.0583349 0 0 0 0.73828,-1.30078 1.0583349,1.0583349 0 0 0 -1.02735,-0.77734 z"
|
||||||
|
id="path896-2-9" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 21 KiB |
36
premake5.lua
36
premake5.lua
@ -1,10 +1,3 @@
|
|||||||
newoption {
|
|
||||||
trigger = "glewdir",
|
|
||||||
value = "PATH",
|
|
||||||
description = "Directory of GLEW",
|
|
||||||
default = "vendor/glew-2.1.0"
|
|
||||||
}
|
|
||||||
|
|
||||||
newoption {
|
newoption {
|
||||||
trigger = "glfwdir64",
|
trigger = "glfwdir64",
|
||||||
value = "PATH",
|
value = "PATH",
|
||||||
@ -158,7 +151,6 @@ workspace "reVC"
|
|||||||
|
|
||||||
filter "platforms:*librw_gl3_glfw*"
|
filter "platforms:*librw_gl3_glfw*"
|
||||||
defines { "RW_GL3" }
|
defines { "RW_GL3" }
|
||||||
includedirs { path.join(_OPTIONS["glewdir"], "include") }
|
|
||||||
if(not _OPTIONS["with-librw"]) then
|
if(not _OPTIONS["with-librw"]) then
|
||||||
libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") }
|
libdirs { path.join(Librw, "lib/%{getsys(cfg.system)}-%{getarch(cfg.architecture)}-gl3/%{cfg.buildcfg}") }
|
||||||
end
|
end
|
||||||
@ -169,9 +161,6 @@ workspace "reVC"
|
|||||||
filter "platforms:*amd64-librw_gl3_glfw*"
|
filter "platforms:*amd64-librw_gl3_glfw*"
|
||||||
includedirs { path.join(_OPTIONS["glfwdir64"], "include") }
|
includedirs { path.join(_OPTIONS["glfwdir64"], "include") }
|
||||||
|
|
||||||
filter "platforms:win*librw_gl3_glfw*"
|
|
||||||
defines { "GLEW_STATIC" }
|
|
||||||
|
|
||||||
filter {}
|
filter {}
|
||||||
|
|
||||||
function setpaths (gamepath, exepath)
|
function setpaths (gamepath, exepath)
|
||||||
@ -196,6 +185,7 @@ project "librw"
|
|||||||
targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
|
targetdir(path.join(Librw, "lib/%{cfg.platform}/%{cfg.buildcfg}"))
|
||||||
files { path.join(Librw, "src/*.*") }
|
files { path.join(Librw, "src/*.*") }
|
||||||
files { path.join(Librw, "src/*/*.*") }
|
files { path.join(Librw, "src/*/*.*") }
|
||||||
|
files { path.join(Librw, "src/gl/*/*.*") }
|
||||||
|
|
||||||
filter { "platforms:*x86*" }
|
filter { "platforms:*x86*" }
|
||||||
architecture "x86"
|
architecture "x86"
|
||||||
@ -204,6 +194,7 @@ project "librw"
|
|||||||
architecture "amd64"
|
architecture "amd64"
|
||||||
|
|
||||||
filter "platforms:win*"
|
filter "platforms:win*"
|
||||||
|
defines { "_CRT_SECURE_NO_WARNINGS", "_CRT_NONSTDC_NO_DEPRECATE" }
|
||||||
staticruntime "on"
|
staticruntime "on"
|
||||||
buildoptions { "/Zc:sizedDealloc-" }
|
buildoptions { "/Zc:sizedDealloc-" }
|
||||||
|
|
||||||
@ -235,6 +226,10 @@ project "reVC"
|
|||||||
targetname "reVC"
|
targetname "reVC"
|
||||||
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
targetdir "bin/%{cfg.platform}/%{cfg.buildcfg}"
|
||||||
|
|
||||||
|
if(_OPTIONS["with-librw"]) then
|
||||||
|
dependson "librw"
|
||||||
|
end
|
||||||
|
|
||||||
files { addSrcFiles("src") }
|
files { addSrcFiles("src") }
|
||||||
files { addSrcFiles("src/animation") }
|
files { addSrcFiles("src/animation") }
|
||||||
files { addSrcFiles("src/audio") }
|
files { addSrcFiles("src/audio") }
|
||||||
@ -258,6 +253,7 @@ project "reVC"
|
|||||||
files { addSrcFiles("src/vehicles") }
|
files { addSrcFiles("src/vehicles") }
|
||||||
files { addSrcFiles("src/weapons") }
|
files { addSrcFiles("src/weapons") }
|
||||||
files { addSrcFiles("src/extras") }
|
files { addSrcFiles("src/extras") }
|
||||||
|
files { "src/extras/GitSHA1.cpp" } -- this won't be in repo in first build
|
||||||
|
|
||||||
includedirs { "src" }
|
includedirs { "src" }
|
||||||
includedirs { "src/animation" }
|
includedirs { "src/animation" }
|
||||||
@ -308,7 +304,7 @@ project "reVC"
|
|||||||
|
|
||||||
filter {}
|
filter {}
|
||||||
if(os.getenv("GTA_VC_RE_DIR")) then
|
if(os.getenv("GTA_VC_RE_DIR")) then
|
||||||
setpaths("$(GTA_VC_RE_DIR)/", "%(cfg.buildtarget.name)")
|
setpaths(os.getenv("GTA_VC_RE_DIR") .. "/", "%(cfg.buildtarget.name)")
|
||||||
end
|
end
|
||||||
|
|
||||||
filter "platforms:win*"
|
filter "platforms:win*"
|
||||||
@ -322,6 +318,10 @@ project "reVC"
|
|||||||
-- external librw is dynamic
|
-- external librw is dynamic
|
||||||
staticruntime "on"
|
staticruntime "on"
|
||||||
end
|
end
|
||||||
|
prebuildcommands { '"%{prj.location}..\\printHash.bat" "%{prj.location}..\\src\\extras\\GitSHA1.cpp"' }
|
||||||
|
|
||||||
|
filter "platforms:not win*"
|
||||||
|
prebuildcommands { '"%{prj.location}/../printHash.sh" "%{prj.location}/../src/extras/GitSHA1.cpp"' }
|
||||||
|
|
||||||
filter "platforms:win*glfw*"
|
filter "platforms:win*glfw*"
|
||||||
staticruntime "off"
|
staticruntime "off"
|
||||||
@ -385,25 +385,23 @@ project "reVC"
|
|||||||
libdirs { "sdk/dx8sdk/lib" }
|
libdirs { "sdk/dx8sdk/lib" }
|
||||||
|
|
||||||
filter "platforms:win-x86*gl3_glfw*"
|
filter "platforms:win-x86*gl3_glfw*"
|
||||||
libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/Win32") }
|
|
||||||
libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
libdirs { path.join(_OPTIONS["glfwdir32"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||||
links { "opengl32", "glew32s", "glfw3" }
|
links { "opengl32", "glfw3" }
|
||||||
|
|
||||||
filter "platforms:win-amd64*gl3_glfw*"
|
filter "platforms:win-amd64*gl3_glfw*"
|
||||||
libdirs { path.join(_OPTIONS["glewdir"], "lib/Release/x64") }
|
|
||||||
libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
libdirs { path.join(_OPTIONS["glfwdir64"], "lib-" .. string.gsub(_ACTION or '', "vs", "vc")) }
|
||||||
links { "opengl32", "glew32s", "glfw3" }
|
links { "opengl32", "glfw3" }
|
||||||
|
|
||||||
filter "platforms:linux*gl3_glfw*"
|
filter "platforms:linux*gl3_glfw*"
|
||||||
links { "GL", "GLEW", "glfw" }
|
links { "GL", "glfw" }
|
||||||
|
|
||||||
filter "platforms:bsd*gl3_glfw*"
|
filter "platforms:bsd*gl3_glfw*"
|
||||||
links { "GL", "GLEW", "glfw", "sysinfo" }
|
links { "GL", "glfw", "sysinfo" }
|
||||||
includedirs { "/usr/local/include" }
|
includedirs { "/usr/local/include" }
|
||||||
libdirs { "/usr/local/lib" }
|
libdirs { "/usr/local/lib" }
|
||||||
|
|
||||||
filter "platforms:macosx*gl3_glfw*"
|
filter "platforms:macosx*gl3_glfw*"
|
||||||
links { "GLEW", "glfw" }
|
links { "glfw" }
|
||||||
linkoptions { "-framework OpenGL" }
|
linkoptions { "-framework OpenGL" }
|
||||||
includedirs { "/opt/local/include" }
|
includedirs { "/opt/local/include" }
|
||||||
includedirs { "/usr/local/include" }
|
includedirs { "/usr/local/include" }
|
||||||
|
26
printHash.bat
Normal file
26
printHash.bat
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
REM creates version.h with HEAD commit hash
|
||||||
|
REM params: $1=full path to output file (usually points version.h)
|
||||||
|
|
||||||
|
setlocal enableextensions enabledelayedexpansion
|
||||||
|
|
||||||
|
cd /d "%~dp0"
|
||||||
|
|
||||||
|
break> %1
|
||||||
|
|
||||||
|
<nul set /p=^"#define GIT_SHA1 ^"^"> %1
|
||||||
|
|
||||||
|
where git
|
||||||
|
if "%errorlevel%" == "0" ( goto :havegit ) else ( goto :writeending )
|
||||||
|
|
||||||
|
:havegit
|
||||||
|
for /f %%v in ('git rev-parse --short HEAD') do set version=%%v
|
||||||
|
<nul set /p="%version%" >> %1
|
||||||
|
|
||||||
|
:writeending
|
||||||
|
|
||||||
|
echo ^" >> %1
|
||||||
|
echo const char* g_GIT_SHA1 = GIT_SHA1; >> %1
|
||||||
|
|
||||||
|
EXIT /B
|
12
printHash.sh
Executable file
12
printHash.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
> $1
|
||||||
|
|
||||||
|
echo -n "#define GIT_SHA1 \"" > $1
|
||||||
|
|
||||||
|
if (command -v "git" >/dev/null) then
|
||||||
|
git rev-parse --short HEAD | tr -d '\n' >> $1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "\"" >> $1
|
||||||
|
echo "const char* g_GIT_SHA1 = GIT_SHA1;" >> $1
|
@ -1,5 +1,5 @@
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
|
||||||
file(GLOB_RECURSE ${PROJECT}_SOURCES "*.cpp" "*.h" "*.rc")
|
file(GLOB_RECURSE ${PROJECT}_SOURCES "*.cpp" "*.h" "*.rc")
|
||||||
|
|
||||||
@ -17,6 +17,9 @@ endfunction()
|
|||||||
|
|
||||||
header_directories(${PROJECT}_INCLUDES)
|
header_directories(${PROJECT}_INCLUDES)
|
||||||
|
|
||||||
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/extras/GitSHA1.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}/extras/GitSHA1.cpp" @ONLY)
|
||||||
|
list(APPEND ${PROJECT}_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/extras/GitSHA1.cpp")
|
||||||
|
|
||||||
add_executable(${EXECUTABLE} WIN32
|
add_executable(${EXECUTABLE} WIN32
|
||||||
${${PROJECT}_SOURCES}
|
${${PROJECT}_SOURCES}
|
||||||
)
|
)
|
||||||
@ -46,6 +49,8 @@ if(LIBRW_PLATFORM_D3D9)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(${EXECUTABLE} PRIVATE CMAKE_BUILD)
|
||||||
|
|
||||||
if(${PROJECT}_AUDIO STREQUAL "OAL")
|
if(${PROJECT}_AUDIO STREQUAL "OAL")
|
||||||
find_package(OpenAL REQUIRED)
|
find_package(OpenAL REQUIRED)
|
||||||
target_include_directories(${EXECUTABLE} PRIVATE ${OPENAL_INCLUDE_DIR})
|
target_include_directories(${EXECUTABLE} PRIVATE ${OPENAL_INCLUDE_DIR})
|
||||||
|
@ -20,216 +20,216 @@ CAnimBlendAssocGroup *CAnimManager::ms_aAnimAssocGroups;
|
|||||||
CLinkList<CAnimBlendHierarchy*> CAnimManager::ms_animCache;
|
CLinkList<CAnimBlendHierarchy*> CAnimManager::ms_animCache;
|
||||||
|
|
||||||
AnimAssocDesc aStdAnimDescs[] = {
|
AnimAssocDesc aStdAnimDescs[] = {
|
||||||
{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_RUNFAST, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_IDLE_STANCE, ASSOC_REPEAT },
|
{ ANIM_STD_IDLE, ASSOC_REPEAT },
|
||||||
{ ANIM_WALK_START, ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_STARTWALK, ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_RUN_STOP, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_RUNSTOP1, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_RUN_STOP_R, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_RUNSTOP2, ASSOC_DELETEFADEDOUT | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_IDLE_CAM, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_IDLE_CAM, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_HBHB, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_IDLE_HBHB, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_TIRED, ASSOC_REPEAT },
|
{ ANIM_STD_IDLE_TIRED, ASSOC_REPEAT },
|
||||||
{ ANIM_IDLE_ARMED, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_IDLE_BIGGUN, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_CHAT, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_TAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HAILTAXI, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_KO_SHOT_FRONT1, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_FRONT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FRONT2, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_LEFT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FRONT3, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_BACK, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FRONT4, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_RIGHT, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_SHOT_FACE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_STOM, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_KO_SHOT_STOMACH, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_KO_SHOT_ARML, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_SHOT_ARM_L, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_ARMR, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_KO_SHOT_ARM_R, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SHOT_LEGL, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_KO_SHOT_LEG_L, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_KO_SHOT_LEGR, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_KO_SHOT_LEG_R, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_KD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_SPINFORWARD_LEFT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_SPINFORWARD_RIGHT, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SKID_FRONT, ASSOC_PARTIAL },
|
{ ANIM_STD_HIGHIMPACT_FRONT, ASSOC_PARTIAL },
|
||||||
{ ANIM_KO_SPIN_R, ASSOC_PARTIAL },
|
{ ANIM_STD_HIGHIMPACT_LEFT, ASSOC_PARTIAL },
|
||||||
{ ANIM_KO_SKID_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_HIGHIMPACT_BACK, ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_KO_SPIN_L, ASSOC_PARTIAL },
|
{ ANIM_STD_HIGHIMPACT_RIGHT, ASSOC_PARTIAL },
|
||||||
{ ANIM_SHOT_FRONT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_SHOT_LEFT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_SHOT_BACK_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_SHOT_RIGHT_PARTIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_HITBYGUN_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FLOOR_HIT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_FLOOR, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_HIT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_CHEST, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_CHEST, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_WALK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HIT_WALL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FLOOR_HIT_F, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_HIT_FLOOR_FRONT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_HIT_BEHIND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_IDLE, ASSOC_REPEAT },
|
{ ANIM_STD_FIGHT_IDLE, ASSOC_REPEAT },
|
||||||
{ ANIM_FIGHT2_IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_2IDLE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_SH_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_SHUFFLE_F, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FIGHT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_BODYBLOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_HEAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_KNEE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_KNEE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_LHOOK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_LHOOK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_ROUNDHOUSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_LONGKICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FIGHT_PPUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_PARTIAL_PUNCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_FIGHT_JAB, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_JAB, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_ELBOW_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_ELBOW_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_ELBOW_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_ELBOW_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_BKICK_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_BKICK_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_BKICK_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_FIGHT_BKICK_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BOMBER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_DETONATE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_PUNCH_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_PUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_PPUNCH2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_PARTIALPUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_KICK_FLOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_KICKGROUND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_THROWU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_THROW_UNDER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_FIGHT_SH_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FIGHT_SHUFFLE_B, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_CAR_JACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LJACKED_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_LO_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_JACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LJACKED_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JACKEDCAR_LO_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_QJACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_QUICKJACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_QJACKED, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_QUICKJACKED, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGN_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGNHI_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGNHI_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_OPEN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_OPEN_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_DOORLOCKED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CARDOOR_LOCKED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ROLLDOOR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ROLLDOOR_LOW, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_JUMPIN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_JUMP_IN_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_LO_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSE_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGN_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ALIGNHI_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_ALIGNHI_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_OPEN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_OPEN_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_DOORLOCKED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CARDOOR_LOCKED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_PULLOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_PULL_OUT_PED_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETIN_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_GET_IN_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSEDOOR_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_DOOR_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_SHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_SHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_LSHUFFLE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_SHUFFLE_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_SIT, ASSOC_DELETEFADEDOUT},
|
{ ANIM_STD_CAR_SIT, ASSOC_DELETEFADEDOUT},
|
||||||
{ ANIM_CAR_LSIT, ASSOC_DELETEFADEDOUT},
|
{ ANIM_STD_CAR_SIT_LO, ASSOC_DELETEFADEDOUT},
|
||||||
{ ANIM_CAR_SITP, ASSOC_DELETEFADEDOUT},
|
{ ANIM_STD_CAR_SIT_P, ASSOC_DELETEFADEDOUT},
|
||||||
{ ANIM_CAR_SITPLO, ASSOC_DELETEFADEDOUT},
|
{ ANIM_STD_CAR_SIT_P_LO, ASSOC_DELETEFADEDOUT},
|
||||||
{ ANIM_DRIVE_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVE_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVE_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVE_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVE_LOW_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVE_LEFT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVE_LOW_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVE_RIGHT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVEBY_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVEBY_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVEBY_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVEBY_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVEBY_LOW_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVEBY_LEFT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVEBY_LOW_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_DRIVEBY_RIGHT_LO, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_CAR_LB, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_CAR_LOOKBEHIND, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVE_BOAT, ASSOC_DELETEFADEDOUT | ASSOC_DRIVING },
|
{ ANIM_STD_BOAT_DRIVE, ASSOC_DELETEFADEDOUT | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVE_BOAT_L, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_BOAT_DRIVE_LEFT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_DRIVE_BOAT_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_BOAT_DRIVE_RIGHT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BOAT_LB, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_STD_BOAT_LOOKBEHIND, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_PICKUP_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_BIKE_PICKUP_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_PICKUP_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_BIKE_PICKUP_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_PULLUP_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_BIKE_PULLUP_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_PULLUP_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_BIKE_PULLUP_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_ELBOW_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_BIKE_ELBOW_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_ELBOW_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_BIKE_ELBOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_FALL_OFF, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_BIKE_FALLOFF, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_BIKE_FALL_R, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_BIKE_FALLBACK, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_CAR_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_GETOUT_LOW_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_GETOUT_LO_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_CLOSE_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_CAR_HOOKERTALK, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_TRAIN_GETIN, ASSOC_PARTIAL },
|
{ ANIM_STD_TRAIN_GETIN, ASSOC_PARTIAL },
|
||||||
{ ANIM_TRAIN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_TRAIN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CRAWLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CRAWLOUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_CRAWLOUT_RHS2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_CRAWLOUT_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_CAR_ROLLOUT_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_ROLLOUT_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_CAR_ROLLOUT_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_ROLLOUT_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_GETUP1, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_GETUP2, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP_LEFT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_GETUP3, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP_RIGHT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_GETUP_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_GET_UP_FRONT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_JUMP_LAUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_JUMP_LAUNCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_JUMP_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_JUMP_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_JUMP_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_JUMP_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FALL_FALL, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_FALL, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_FALL_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_FALL_GLIDE, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FALL_LAND, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_FALL_COLLAPSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FALL_BACK, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_FALL_ONBACK, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_FALL_FRONT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
|
{ ANIM_STD_FALL_ONFRONT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_FRONTAL },
|
||||||
{ ANIM_EV_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_EVADE_STEP, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_EV_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
{ ANIM_STD_EVADE_DIVE, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_FRONTAL },
|
||||||
{ ANIM_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_IDLE },
|
{ ANIM_STD_XPRESS_SCRATCH, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_IDLE },
|
||||||
{ ANIM_ROAD_CROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_STD_ROADCROSS, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_TURN_180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_TURN180, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_ARREST_GUN, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_ARREST, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_DROWN, ASSOC_PARTIAL },
|
{ ANIM_STD_DROWN, ASSOC_PARTIAL },
|
||||||
{ ANIM_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_DUCK_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_DUCK_LOW, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_CROUCH, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_DUCK_WEAPON, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_RBLOCK_CSHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_RBLOCK_SHOOT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HANDSUP, ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_STD_HANDSCOWER, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
{ ANIM_STD_PARTIAL_FUCKU, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_NOWALK },
|
||||||
{ ANIM_PHONE_IN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_PHONE_IN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_PHONE_OUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_PHONE_TALK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
{ ANIM_SEAT_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_SEAT_DOWN, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_SEAT_UP, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_SEAT_UP, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_SEAT_IDLE, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_SEAT_IDLE, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_SEAT_DOWN2, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_SEAT_RVRS, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_ATM, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_ATM, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_ABSEIL, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
{ ANIM_STD_ABSEIL, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aVanAnimDescs[] = {
|
AnimAssocDesc aVanAnimDescs[] = {
|
||||||
{ ANIM_VAN_OPEN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_OPEN_DOOR_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETIN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_IN_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_CLOSE_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETOUT_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_OUT_REAR_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_OPEN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_OPEN_DOOR_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETIN, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_IN_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_CLOSE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_VAN_GETOUT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_VAN_GET_OUT_REAR_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aCoachAnimDescs[] = {
|
AnimAssocDesc aCoachAnimDescs[] = {
|
||||||
{ ANIM_COACH_OPEN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_OPEN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_OPEN_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_OPEN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_IN_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_GET_IN_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_IN_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_GET_IN_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_COACH_OUT_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STD_COACH_GET_OUT_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aBikeAnimDescs[] = {
|
AnimAssocDesc aBikeAnimDescs[] = {
|
||||||
{ ANIM_BIKE_RIDE, ASSOC_DELETEFADEDOUT},
|
{ ANIM_BIKE_RIDE, ASSOC_DELETEFADEDOUT},
|
||||||
{ ANIM_BIKE_STILL, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_READY, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_LEFT, ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_LEFT, ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_RIGHT, ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_RIGHT, ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_BACK, ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_LEANB, ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_FWD, ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_LEANF, ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_PUSHES, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_WALKBACK, ASSOC_REPEAT | ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_JUMPON_R, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_BIKE_JUMPON_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_JUMPON_L, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_BIKE_JUMPON_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_BIKE_KICK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_HIT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_BIKE_HIT, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_GETOFF_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
|
||||||
{ ANIM_BIKE_GETOFF_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_BIKE_GETOFF_LHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
|
{ ANIM_BIKE_GETOFF_RHS, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_BIKE_GETOFF_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
{ ANIM_BIKE_GETOFF_BACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION },
|
||||||
{ ANIM_BIKE_DRIVEBY_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
|
||||||
{ ANIM_BIKE_DRIVEBY_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_DRIVEBY_LHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_DRIVEBY_FT, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
{ ANIM_BIKE_DRIVEBY_RHS, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
{ ANIM_BIKE_PASSENGER, ASSOC_DELETEFADEDOUT | ASSOC_DRIVING },
|
{ ANIM_BIKE_DRIVEBY_FORWARD, ASSOC_DELETEFADEDOUT | ASSOC_PARTIAL | ASSOC_DRIVING },
|
||||||
|
{ ANIM_BIKE_RIDE_P, ASSOC_DELETEFADEDOUT | ASSOC_DRIVING },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aMeleeAnimDescs[] = {
|
AnimAssocDesc aMeleeAnimDescs[] = {
|
||||||
{ ANIM_MELEE_ATTACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_MELEE_ATTACK, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
@ -250,22 +250,22 @@ AnimAssocDesc aWeaponAnimDescs[] = {
|
|||||||
{ ANIM_WEAPON_CROUCHFIRE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_WEAPON_CROUCHFIRE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_WEAPON_RELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_CROUCHRELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_WEAPON_CROUCHRELOAD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_WEAPON_SPECIAL, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_WEAPON_FIRE_3RD, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aMedicAnimDescs[] = {
|
AnimAssocDesc aMedicAnimDescs[] = {
|
||||||
{ ANIM_CPR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_MEDIC_CPR, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aSunbatheAnimDescs[] = {
|
AnimAssocDesc aSunbatheAnimDescs[] = {
|
||||||
{ ANIM_SUNBATHE, ASSOC_REPEAT | ASSOC_PARTIAL },
|
{ ANIM_SUNBATHE_IDLE, ASSOC_REPEAT | ASSOC_PARTIAL },
|
||||||
{ ANIM_SUNBATHE_DOWN, ASSOC_REPEAT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_SUNBATHE_DOWN, ASSOC_REPEAT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_SUNBATHE_UP, ASSOC_REPEAT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_SUNBATHE_UP, ASSOC_REPEAT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
{ ANIM_SUNBATHE_ESCAPE, ASSOC_REPEAT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_SUNBATHE_ESCAPE, ASSOC_REPEAT | ASSOC_PARTIAL | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aPlayerIdleAnimDescs[] = {
|
AnimAssocDesc aPlayerIdleAnimDescs[] = {
|
||||||
{ ANIM_IDLE_STRETCH, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_PLAYER_IDLE1, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_TIME, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_PLAYER_IDLE2, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_SHOULDER, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_PLAYER_IDLE3, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_IDLE_STRETCH_LEG, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_PLAYER_IDLE4, ASSOC_DELETEFADEDOUT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aRiotAnimDescs[] = {
|
AnimAssocDesc aRiotAnimDescs[] = {
|
||||||
{ ANIM_RIOT_ANGRY, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_RIOT_ANGRY, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
@ -274,7 +274,7 @@ AnimAssocDesc aRiotAnimDescs[] = {
|
|||||||
{ ANIM_RIOT_PUNCHES, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_RIOT_PUNCHES, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_RIOT_SHOUT, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_RIOT_SHOUT, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_RIOT_CHALLENGE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_RIOT_CHALLENGE, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
{ ANIM_RIOT_FUKU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_RIOT_FUCKYOU, ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
};
|
};
|
||||||
AnimAssocDesc aStripAnimDescs[] = {
|
AnimAssocDesc aStripAnimDescs[] = {
|
||||||
{ ANIM_STRIP_A, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
{ ANIM_STRIP_A, ASSOC_REPEAT | ASSOC_FADEOUTWHENDONE | ASSOC_PARTIAL },
|
||||||
@ -287,11 +287,11 @@ AnimAssocDesc aStripAnimDescs[] = {
|
|||||||
};
|
};
|
||||||
#ifdef PC_PLAYER_CONTROLS
|
#ifdef PC_PLAYER_CONTROLS
|
||||||
AnimAssocDesc aStdAnimDescsSide[] = {
|
AnimAssocDesc aStdAnimDescsSide[] = {
|
||||||
{ ANIM_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_WALK, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_RUN, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_SPRINT, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION | ASSOC_WALK },
|
{ ANIM_STD_RUNFAST, ASSOC_REPEAT | ASSOC_MOVEMENT | ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION | ASSOC_WALK },
|
||||||
{ ANIM_IDLE_STANCE, ASSOC_REPEAT },
|
{ ANIM_STD_IDLE, ASSOC_REPEAT },
|
||||||
{ ANIM_WALK_START, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
{ ANIM_STD_STARTWALK, ASSOC_HAS_TRANSLATION | ASSOC_HAS_X_TRANSLATION },
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
char const* aStdAnimations[] = {
|
char const* aStdAnimations[] = {
|
||||||
|
@ -2,256 +2,272 @@
|
|||||||
|
|
||||||
enum AnimationId
|
enum AnimationId
|
||||||
{
|
{
|
||||||
ANIM_WALK,
|
ANIM_STD_WALK,
|
||||||
ANIM_RUN,
|
ANIM_STD_RUN,
|
||||||
ANIM_SPRINT,
|
ANIM_STD_RUNFAST,
|
||||||
ANIM_IDLE_STANCE,
|
ANIM_STD_IDLE,
|
||||||
ANIM_WALK_START,
|
ANIM_STD_STARTWALK,
|
||||||
ANIM_RUN_STOP,
|
ANIM_STD_RUNSTOP1,
|
||||||
ANIM_RUN_STOP_R,
|
ANIM_STD_RUNSTOP2,
|
||||||
ANIM_IDLE_CAM,
|
ANIM_STD_IDLE_CAM,
|
||||||
ANIM_IDLE_HBHB,
|
ANIM_STD_IDLE_HBHB,
|
||||||
ANIM_IDLE_TIRED,
|
ANIM_STD_IDLE_TIRED,
|
||||||
ANIM_IDLE_ARMED,
|
ANIM_STD_IDLE_BIGGUN,
|
||||||
ANIM_IDLE_CHAT,
|
ANIM_STD_CHAT,
|
||||||
ANIM_IDLE_TAXI,
|
ANIM_STD_HAILTAXI,
|
||||||
ANIM_KO_SHOT_FRONT1,
|
ANIM_STD_KO_FRONT,
|
||||||
ANIM_KO_SHOT_FRONT2,
|
ANIM_STD_KO_LEFT,
|
||||||
ANIM_KO_SHOT_FRONT3,
|
ANIM_STD_KO_BACK,
|
||||||
ANIM_KO_SHOT_FRONT4,
|
ANIM_STD_KO_RIGHT,
|
||||||
ANIM_KO_SHOT_FACE,
|
ANIM_STD_KO_SHOT_FACE,
|
||||||
ANIM_KO_SHOT_STOM,
|
ANIM_STD_KO_SHOT_STOMACH,
|
||||||
ANIM_KO_SHOT_ARML,
|
ANIM_STD_KO_SHOT_ARM_L,
|
||||||
ANIM_KO_SHOT_ARMR,
|
ANIM_STD_KO_SHOT_ARM_R,
|
||||||
ANIM_KO_SHOT_LEGL,
|
ANIM_STD_KO_SHOT_LEG_L,
|
||||||
ANIM_KO_SHOT_LEGR,
|
ANIM_STD_KO_SHOT_LEG_R,
|
||||||
ANIM_KD_LEFT,
|
ANIM_STD_SPINFORWARD_LEFT,
|
||||||
ANIM_KD_RIGHT,
|
ANIM_STD_SPINFORWARD_RIGHT,
|
||||||
ANIM_KO_SKID_FRONT,
|
ANIM_STD_HIGHIMPACT_FRONT,
|
||||||
ANIM_KO_SPIN_R, // named left in VC
|
ANIM_STD_HIGHIMPACT_LEFT,
|
||||||
ANIM_KO_SKID_BACK,
|
ANIM_STD_HIGHIMPACT_BACK,
|
||||||
ANIM_KO_SPIN_L, // named right in VC
|
ANIM_STD_HIGHIMPACT_RIGHT,
|
||||||
ANIM_SHOT_FRONT_PARTIAL,
|
ANIM_STD_HITBYGUN_FRONT,
|
||||||
ANIM_SHOT_LEFT_PARTIAL,
|
ANIM_STD_HITBYGUN_LEFT,
|
||||||
ANIM_SHOT_BACK_PARTIAL,
|
ANIM_STD_HITBYGUN_BACK,
|
||||||
ANIM_SHOT_RIGHT_PARTIAL,
|
ANIM_STD_HITBYGUN_RIGHT,
|
||||||
ANIM_HIT_FRONT,
|
ANIM_STD_HIT_FRONT,
|
||||||
ANIM_HIT_LEFT,
|
ANIM_STD_HIT_LEFT,
|
||||||
ANIM_HIT_BACK,
|
ANIM_STD_HIT_BACK,
|
||||||
ANIM_HIT_RIGHT,
|
ANIM_STD_HIT_RIGHT,
|
||||||
ANIM_FLOOR_HIT,
|
ANIM_STD_HIT_FLOOR,
|
||||||
ANIM_HIT_BODYBLOW,
|
|
||||||
ANIM_HIT_CHEST,
|
|
||||||
ANIM_HIT_HEAD,
|
|
||||||
ANIM_HIT_WALK,
|
|
||||||
ANIM_HIT_WALL,
|
|
||||||
ANIM_FLOOR_HIT_F,
|
|
||||||
ANIM_HIT_BEHIND,
|
|
||||||
ANIM_FIGHT_IDLE,
|
|
||||||
ANIM_FIGHT2_IDLE,
|
|
||||||
ANIM_FIGHT_SH_F,
|
|
||||||
ANIM_FIGHT_BODYBLOW,
|
|
||||||
ANIM_FIGHT_HEAD,
|
|
||||||
ANIM_FIGHT_KICK,
|
|
||||||
ANIM_FIGHT_KNEE,
|
|
||||||
ANIM_FIGHT_LHOOK,
|
|
||||||
ANIM_FIGHT_PUNCH,
|
|
||||||
ANIM_FIGHT_ROUNDHOUSE,
|
|
||||||
ANIM_FIGHT_LONGKICK,
|
|
||||||
ANIM_FIGHT_PPUNCH,
|
|
||||||
|
|
||||||
ANIM_FIGHT_JAB,
|
/* names made up */
|
||||||
ANIM_FIGHT_ELBOW_L,
|
ANIM_STD_HIT_BODYBLOW,
|
||||||
ANIM_FIGHT_ELBOW_R,
|
ANIM_STD_HIT_CHEST,
|
||||||
ANIM_FIGHT_BKICK_L,
|
ANIM_STD_HIT_HEAD,
|
||||||
ANIM_FIGHT_BKICK_R,
|
ANIM_STD_HIT_WALK,
|
||||||
|
/**/
|
||||||
|
|
||||||
ANIM_BOMBER,
|
ANIM_STD_HIT_WALL,
|
||||||
ANIM_PUNCH_R,
|
ANIM_STD_HIT_FLOOR_FRONT,
|
||||||
ANIM_FIGHT_PPUNCH2,
|
ANIM_STD_HIT_BEHIND,
|
||||||
ANIM_KICK_FLOOR,
|
ANIM_STD_FIGHT_IDLE,
|
||||||
|
ANIM_STD_FIGHT_2IDLE,
|
||||||
|
ANIM_STD_FIGHT_SHUFFLE_F,
|
||||||
|
|
||||||
ANIM_WEAPON_THROWU,
|
/* names made up */
|
||||||
ANIM_FIGHT_SH_BACK,
|
ANIM_STD_FIGHT_BODYBLOW,
|
||||||
|
ANIM_STD_FIGHT_HEAD,
|
||||||
|
ANIM_STD_FIGHT_KICK,
|
||||||
|
ANIM_STD_FIGHT_KNEE,
|
||||||
|
ANIM_STD_FIGHT_LHOOK,
|
||||||
|
ANIM_STD_FIGHT_PUNCH,
|
||||||
|
ANIM_STD_FIGHT_ROUNDHOUSE,
|
||||||
|
ANIM_STD_FIGHT_LONGKICK,
|
||||||
|
/**/
|
||||||
|
|
||||||
ANIM_CAR_JACKED_RHS,
|
ANIM_STD_PARTIAL_PUNCH,
|
||||||
ANIM_CAR_LJACKED_RHS,
|
|
||||||
ANIM_CAR_JACKED_LHS,
|
|
||||||
ANIM_CAR_LJACKED_LHS,
|
|
||||||
ANIM_CAR_QJACK,
|
|
||||||
ANIM_CAR_QJACKED,
|
|
||||||
ANIM_CAR_ALIGN_LHS,
|
|
||||||
ANIM_CAR_ALIGNHI_LHS,
|
|
||||||
ANIM_CAR_OPEN_LHS,
|
|
||||||
ANIM_CAR_DOORLOCKED_LHS,
|
|
||||||
ANIM_CAR_PULLOUT_LHS,
|
|
||||||
ANIM_CAR_PULLOUT_LOW_LHS,
|
|
||||||
ANIM_CAR_GETIN_LHS,
|
|
||||||
ANIM_CAR_GETIN_LOW_LHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_LHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_LOW_LHS,
|
|
||||||
ANIM_CAR_ROLLDOOR,
|
|
||||||
ANIM_CAR_ROLLDOOR_LOW,
|
|
||||||
ANIM_CAR_JUMPIN_LHS,
|
|
||||||
ANIM_CAR_GETOUT_LHS,
|
|
||||||
ANIM_CAR_GETOUT_LOW_LHS,
|
|
||||||
ANIM_CAR_CLOSE_LHS,
|
|
||||||
ANIM_CAR_ALIGN_RHS,
|
|
||||||
ANIM_CAR_ALIGNHI_RHS,
|
|
||||||
ANIM_CAR_OPEN_RHS,
|
|
||||||
ANIM_CAR_DOORLOCKED_RHS,
|
|
||||||
ANIM_CAR_PULLOUT_RHS,
|
|
||||||
ANIM_CAR_PULLOUT_LOW_RHS,
|
|
||||||
ANIM_CAR_GETIN_RHS,
|
|
||||||
ANIM_CAR_GETIN_LOW_RHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_RHS,
|
|
||||||
ANIM_CAR_CLOSEDOOR_LOW_RHS,
|
|
||||||
ANIM_CAR_SHUFFLE_RHS,
|
|
||||||
ANIM_CAR_LSHUFFLE_RHS,
|
|
||||||
ANIM_CAR_SIT,
|
|
||||||
ANIM_CAR_LSIT,
|
|
||||||
ANIM_CAR_SITP,
|
|
||||||
ANIM_CAR_SITPLO,
|
|
||||||
ANIM_DRIVE_L,
|
|
||||||
ANIM_DRIVE_R,
|
|
||||||
ANIM_DRIVE_LOW_L,
|
|
||||||
ANIM_DRIVE_LOW_R,
|
|
||||||
ANIM_DRIVEBY_L,
|
|
||||||
ANIM_DRIVEBY_R,
|
|
||||||
ANIM_DRIVEBY_LOW_L,
|
|
||||||
ANIM_DRIVEBY_LOW_R,
|
|
||||||
ANIM_CAR_LB,
|
|
||||||
ANIM_DRIVE_BOAT,
|
|
||||||
ANIM_DRIVE_BOAT_L,
|
|
||||||
ANIM_DRIVE_BOAT_R,
|
|
||||||
ANIM_BOAT_LB,
|
|
||||||
|
|
||||||
ANIM_BIKE_PICKUP_R,
|
/* names made up */
|
||||||
ANIM_BIKE_PICKUP_L,
|
ANIM_STD_FIGHT_JAB,
|
||||||
ANIM_BIKE_PULLUP_R,
|
ANIM_STD_FIGHT_ELBOW_L,
|
||||||
ANIM_BIKE_PULLUP_L,
|
ANIM_STD_FIGHT_ELBOW_R,
|
||||||
ANIM_BIKE_ELBOW_R,
|
ANIM_STD_FIGHT_BKICK_L,
|
||||||
ANIM_BIKE_ELBOW_L,
|
ANIM_STD_FIGHT_BKICK_R,
|
||||||
ANIM_BIKE_FALL_OFF,
|
/**/
|
||||||
ANIM_BIKE_FALL_R,
|
|
||||||
|
|
||||||
ANIM_CAR_GETOUT_RHS,
|
ANIM_STD_DETONATE,
|
||||||
ANIM_CAR_GETOUT_LOW_RHS,
|
ANIM_STD_PUNCH,
|
||||||
ANIM_CAR_CLOSE_RHS,
|
ANIM_STD_PARTIALPUNCH,
|
||||||
ANIM_CAR_HOOKERTALK,
|
ANIM_STD_KICKGROUND,
|
||||||
|
|
||||||
ANIM_TRAIN_GETIN,
|
ANIM_STD_THROW_UNDER,
|
||||||
ANIM_TRAIN_GETOUT,
|
ANIM_STD_FIGHT_SHUFFLE_B,
|
||||||
|
|
||||||
ANIM_CAR_CRAWLOUT_RHS,
|
ANIM_STD_JACKEDCAR_RHS,
|
||||||
ANIM_CAR_CRAWLOUT_RHS2,
|
ANIM_STD_JACKEDCAR_LO_RHS,
|
||||||
ANIM_CAR_ROLLOUT_LHS,
|
ANIM_STD_JACKEDCAR_LHS,
|
||||||
ANIM_CAR_ROLLOUT_RHS,
|
ANIM_STD_JACKEDCAR_LO_LHS,
|
||||||
|
ANIM_STD_QUICKJACK,
|
||||||
|
ANIM_STD_QUICKJACKED,
|
||||||
|
ANIM_STD_CAR_ALIGN_DOOR_LHS,
|
||||||
|
ANIM_STD_CAR_ALIGNHI_DOOR_LHS,
|
||||||
|
ANIM_STD_CAR_OPEN_DOOR_LHS,
|
||||||
|
ANIM_STD_CARDOOR_LOCKED_LHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_LHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_LO_LHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_LHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_LO_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_LO_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_ROLLING_LO_LHS,
|
||||||
|
ANIM_STD_CAR_JUMP_IN_LO_LHS,
|
||||||
|
ANIM_STD_GETOUT_LHS,
|
||||||
|
ANIM_STD_GETOUT_LO_LHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_LHS,
|
||||||
|
ANIM_STD_CAR_ALIGN_DOOR_RHS,
|
||||||
|
ANIM_STD_CAR_ALIGNHI_DOOR_RHS,
|
||||||
|
ANIM_STD_CAR_OPEN_DOOR_RHS,
|
||||||
|
ANIM_STD_CARDOOR_LOCKED_RHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_RHS,
|
||||||
|
ANIM_STD_CAR_PULL_OUT_PED_LO_RHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_RHS,
|
||||||
|
ANIM_STD_CAR_GET_IN_LO_RHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_RHS,
|
||||||
|
ANIM_STD_CAR_CLOSE_DOOR_LO_RHS,
|
||||||
|
ANIM_STD_CAR_SHUFFLE_RHS,
|
||||||
|
ANIM_STD_CAR_SHUFFLE_LO_RHS,
|
||||||
|
ANIM_STD_CAR_SIT,
|
||||||
|
ANIM_STD_CAR_SIT_LO,
|
||||||
|
ANIM_STD_CAR_SIT_P,
|
||||||
|
ANIM_STD_CAR_SIT_P_LO,
|
||||||
|
ANIM_STD_CAR_DRIVE_LEFT,
|
||||||
|
ANIM_STD_CAR_DRIVE_RIGHT,
|
||||||
|
ANIM_STD_CAR_DRIVE_LEFT_LO,
|
||||||
|
ANIM_STD_CAR_DRIVE_RIGHT_LO,
|
||||||
|
ANIM_STD_CAR_DRIVEBY_LEFT,
|
||||||
|
ANIM_STD_CAR_DRIVEBY_RIGHT,
|
||||||
|
ANIM_STD_CAR_DRIVEBY_LEFT_LO,
|
||||||
|
ANIM_STD_CAR_DRIVEBY_RIGHT_LO,
|
||||||
|
ANIM_STD_CAR_LOOKBEHIND,
|
||||||
|
ANIM_STD_BOAT_DRIVE,
|
||||||
|
ANIM_STD_BOAT_DRIVE_LEFT,
|
||||||
|
ANIM_STD_BOAT_DRIVE_RIGHT,
|
||||||
|
ANIM_STD_BOAT_LOOKBEHIND,
|
||||||
|
|
||||||
ANIM_GETUP1,
|
ANIM_STD_BIKE_PICKUP_LHS,
|
||||||
ANIM_GETUP2,
|
ANIM_STD_BIKE_PICKUP_RHS,
|
||||||
ANIM_GETUP3,
|
ANIM_STD_BIKE_PULLUP_LHS,
|
||||||
ANIM_GETUP_FRONT,
|
ANIM_STD_BIKE_PULLUP_RHS,
|
||||||
ANIM_JUMP_LAUNCH,
|
ANIM_STD_BIKE_ELBOW_LHS,
|
||||||
ANIM_JUMP_GLIDE,
|
ANIM_STD_BIKE_ELBOW_RHS,
|
||||||
ANIM_JUMP_LAND,
|
ANIM_STD_BIKE_FALLOFF,
|
||||||
ANIM_FALL_FALL,
|
ANIM_STD_BIKE_FALLBACK,
|
||||||
ANIM_FALL_GLIDE,
|
|
||||||
ANIM_FALL_LAND,
|
|
||||||
ANIM_FALL_COLLAPSE,
|
|
||||||
ANIM_FALL_BACK,
|
|
||||||
ANIM_FALL_FRONT,
|
|
||||||
|
|
||||||
ANIM_EV_STEP,
|
ANIM_STD_GETOUT_RHS,
|
||||||
ANIM_EV_DIVE,
|
ANIM_STD_GETOUT_LO_RHS,
|
||||||
ANIM_XPRESS_SCRATCH,
|
ANIM_STD_CAR_CLOSE_RHS,
|
||||||
ANIM_ROAD_CROSS,
|
ANIM_STD_CAR_HOOKERTALK,
|
||||||
ANIM_TURN_180,
|
|
||||||
ANIM_ARREST_GUN,
|
|
||||||
ANIM_DROWN,
|
|
||||||
ANIM_DUCK_DOWN,
|
|
||||||
ANIM_DUCK_LOW,
|
|
||||||
|
|
||||||
ANIM_WEAPON_CROUCH,
|
ANIM_STD_TRAIN_GETIN,
|
||||||
|
ANIM_STD_TRAIN_GETOUT,
|
||||||
|
|
||||||
ANIM_RBLOCK_CSHOOT,
|
ANIM_STD_CRAWLOUT_LHS,
|
||||||
ANIM_HANDSUP,
|
ANIM_STD_CRAWLOUT_RHS,
|
||||||
ANIM_HANDSCOWER,
|
ANIM_STD_ROLLOUT_LHS,
|
||||||
ANIM_FUCKU,
|
ANIM_STD_ROLLOUT_RHS,
|
||||||
ANIM_PHONE_IN,
|
|
||||||
ANIM_PHONE_OUT,
|
|
||||||
ANIM_PHONE_TALK,
|
|
||||||
|
|
||||||
ANIM_SEAT_DOWN,
|
ANIM_STD_GET_UP,
|
||||||
ANIM_SEAT_UP,
|
ANIM_STD_GET_UP_LEFT,
|
||||||
ANIM_SEAT_IDLE,
|
ANIM_STD_GET_UP_RIGHT,
|
||||||
ANIM_SEAT_DOWN2,
|
ANIM_STD_GET_UP_FRONT,
|
||||||
ANIM_ATM,
|
ANIM_STD_JUMP_LAUNCH,
|
||||||
ANIM_ABSEIL,
|
ANIM_STD_JUMP_GLIDE,
|
||||||
|
ANIM_STD_JUMP_LAND,
|
||||||
|
ANIM_STD_FALL,
|
||||||
|
ANIM_STD_FALL_GLIDE,
|
||||||
|
ANIM_STD_FALL_LAND,
|
||||||
|
ANIM_STD_FALL_COLLAPSE,
|
||||||
|
ANIM_STD_FALL_ONBACK,
|
||||||
|
ANIM_STD_FALL_ONFRONT,
|
||||||
|
|
||||||
NUM_STD_ANIMS,
|
ANIM_STD_EVADE_STEP,
|
||||||
|
ANIM_STD_EVADE_DIVE,
|
||||||
|
ANIM_STD_XPRESS_SCRATCH,
|
||||||
|
ANIM_STD_ROADCROSS,
|
||||||
|
ANIM_STD_TURN180,
|
||||||
|
ANIM_STD_ARREST,
|
||||||
|
ANIM_STD_DROWN,
|
||||||
|
ANIM_STD_DUCK_DOWN,
|
||||||
|
ANIM_STD_DUCK_LOW,
|
||||||
|
|
||||||
ANIM_VAN_OPEN_L,
|
ANIM_STD_DUCK_WEAPON,
|
||||||
ANIM_VAN_GETIN_L,
|
|
||||||
ANIM_VAN_CLOSE_L,
|
|
||||||
ANIM_VAN_GETOUT_L,
|
|
||||||
ANIM_VAN_OPEN,
|
|
||||||
ANIM_VAN_GETIN,
|
|
||||||
ANIM_VAN_CLOSE,
|
|
||||||
ANIM_VAN_GETOUT,
|
|
||||||
|
|
||||||
ANIM_COACH_OPEN_L,
|
ANIM_STD_RBLOCK_SHOOT,
|
||||||
ANIM_COACH_OPEN_R,
|
ANIM_STD_HANDSUP,
|
||||||
ANIM_COACH_IN_L,
|
ANIM_STD_HANDSCOWER,
|
||||||
ANIM_COACH_IN_R,
|
ANIM_STD_PARTIAL_FUCKU,
|
||||||
ANIM_COACH_OUT_L,
|
ANIM_STD_PHONE_IN,
|
||||||
|
ANIM_STD_PHONE_OUT,
|
||||||
|
ANIM_STD_PHONE_TALK,
|
||||||
|
|
||||||
|
ANIM_STD_SEAT_DOWN,
|
||||||
|
ANIM_STD_SEAT_UP,
|
||||||
|
ANIM_STD_SEAT_IDLE,
|
||||||
|
ANIM_STD_SEAT_RVRS,
|
||||||
|
ANIM_STD_ATM,
|
||||||
|
ANIM_STD_ABSEIL,
|
||||||
|
|
||||||
|
ANIM_STD_NUM,
|
||||||
|
|
||||||
|
ANIM_STD_VAN_OPEN_DOOR_REAR_LHS,
|
||||||
|
ANIM_STD_VAN_GET_IN_REAR_LHS,
|
||||||
|
ANIM_STD_VAN_CLOSE_DOOR_REAR_LHS,
|
||||||
|
ANIM_STD_VAN_GET_OUT_REAR_LHS,
|
||||||
|
ANIM_STD_VAN_OPEN_DOOR_REAR_RHS,
|
||||||
|
ANIM_STD_VAN_GET_IN_REAR_RHS,
|
||||||
|
ANIM_STD_VAN_CLOSE_DOOR_REAR_RHS,
|
||||||
|
ANIM_STD_VAN_GET_OUT_REAR_RHS,
|
||||||
|
|
||||||
|
ANIM_STD_COACH_OPEN_LHS,
|
||||||
|
ANIM_STD_COACH_OPEN_RHS,
|
||||||
|
ANIM_STD_COACH_GET_IN_LHS,
|
||||||
|
ANIM_STD_COACH_GET_IN_RHS,
|
||||||
|
ANIM_STD_COACH_GET_OUT_LHS,
|
||||||
|
|
||||||
ANIM_BIKE_RIDE,
|
ANIM_BIKE_RIDE,
|
||||||
ANIM_BIKE_STILL,
|
ANIM_BIKE_READY,
|
||||||
ANIM_BIKE_LEFT,
|
ANIM_BIKE_LEFT,
|
||||||
ANIM_BIKE_RIGHT,
|
ANIM_BIKE_RIGHT,
|
||||||
ANIM_BIKE_BACK,
|
ANIM_BIKE_LEANB,
|
||||||
ANIM_BIKE_FWD,
|
ANIM_BIKE_LEANF,
|
||||||
ANIM_BIKE_PUSHES,
|
ANIM_BIKE_WALKBACK,
|
||||||
ANIM_BIKE_JUMPON_R,
|
ANIM_BIKE_JUMPON_LHS,
|
||||||
ANIM_BIKE_JUMPON_L,
|
ANIM_BIKE_JUMPON_RHS,
|
||||||
ANIM_BIKE_KICK,
|
ANIM_BIKE_KICK,
|
||||||
ANIM_BIKE_HIT,
|
ANIM_BIKE_HIT,
|
||||||
ANIM_BIKE_GETOFF_RHS,
|
|
||||||
ANIM_BIKE_GETOFF_LHS,
|
ANIM_BIKE_GETOFF_LHS,
|
||||||
|
ANIM_BIKE_GETOFF_RHS,
|
||||||
ANIM_BIKE_GETOFF_BACK,
|
ANIM_BIKE_GETOFF_BACK,
|
||||||
ANIM_BIKE_DRIVEBY_RHS,
|
|
||||||
ANIM_BIKE_DRIVEBY_LHS,
|
ANIM_BIKE_DRIVEBY_LHS,
|
||||||
ANIM_BIKE_DRIVEBY_FT,
|
ANIM_BIKE_DRIVEBY_RHS,
|
||||||
ANIM_BIKE_PASSENGER,
|
ANIM_BIKE_DRIVEBY_FORWARD,
|
||||||
|
ANIM_BIKE_RIDE_P,
|
||||||
|
|
||||||
ANIM_WEAPON_FIRE,
|
ANIM_ATTACK_1,
|
||||||
|
ANIM_ATTACK_2,
|
||||||
|
ANIM_ATTACK_EXTRA1,
|
||||||
|
ANIM_ATTACK_EXTRA2,
|
||||||
|
ANIM_ATTACK_3,
|
||||||
|
|
||||||
|
// our synonyms... because originals are hard to understand
|
||||||
|
ANIM_WEAPON_FIRE = ANIM_ATTACK_1,
|
||||||
ANIM_WEAPON_CROUCHFIRE,
|
ANIM_WEAPON_CROUCHFIRE,
|
||||||
|
ANIM_WEAPON_FIRE_2ND = ANIM_WEAPON_CROUCHFIRE,
|
||||||
ANIM_WEAPON_RELOAD,
|
ANIM_WEAPON_RELOAD,
|
||||||
ANIM_WEAPON_CROUCHRELOAD,
|
ANIM_WEAPON_CROUCHRELOAD,
|
||||||
ANIM_WEAPON_SPECIAL,
|
ANIM_WEAPON_FIRE_3RD,
|
||||||
ANIM_MELEE_ATTACK = ANIM_WEAPON_FIRE,
|
ANIM_THROWABLE_THROW = ANIM_ATTACK_1,
|
||||||
|
ANIM_THROWABLE_THROWU,
|
||||||
|
ANIM_THROWABLE_START_THROW,
|
||||||
|
ANIM_MELEE_ATTACK = ANIM_ATTACK_1,
|
||||||
ANIM_MELEE_ATTACK_2ND,
|
ANIM_MELEE_ATTACK_2ND,
|
||||||
ANIM_MELEE_ATTACK_START,
|
ANIM_MELEE_ATTACK_START,
|
||||||
ANIM_MELEE_IDLE_FIGHTMODE,
|
ANIM_MELEE_IDLE_FIGHTMODE,
|
||||||
ANIM_MELEE_ATTACK_FINISH,
|
ANIM_MELEE_ATTACK_FINISH,
|
||||||
ANIM_THROWABLE_THROW = ANIM_WEAPON_FIRE,
|
|
||||||
ANIM_THROWABLE_THROWU,
|
|
||||||
ANIM_THROWABLE_START_THROW,
|
|
||||||
ANIM_WEAPON_FIRE_2ND = ANIM_WEAPON_CROUCHFIRE,
|
|
||||||
ANIM_WEAPON_FIRE_3RD = ANIM_WEAPON_SPECIAL,
|
|
||||||
|
|
||||||
ANIM_SUNBATHE,
|
ANIM_SUNBATHE_IDLE,
|
||||||
ANIM_SUNBATHE_DOWN,
|
ANIM_SUNBATHE_DOWN,
|
||||||
ANIM_SUNBATHE_UP,
|
ANIM_SUNBATHE_UP,
|
||||||
ANIM_SUNBATHE_ESCAPE,
|
ANIM_SUNBATHE_ESCAPE,
|
||||||
|
|
||||||
ANIM_CPR,
|
ANIM_MEDIC_CPR,
|
||||||
|
|
||||||
ANIM_IDLE_STRETCH,
|
ANIM_PLAYER_IDLE1,
|
||||||
ANIM_IDLE_TIME,
|
ANIM_PLAYER_IDLE2,
|
||||||
ANIM_IDLE_SHOULDER,
|
ANIM_PLAYER_IDLE3,
|
||||||
ANIM_IDLE_STRETCH_LEG,
|
ANIM_PLAYER_IDLE4,
|
||||||
|
|
||||||
ANIM_RIOT_ANGRY,
|
ANIM_RIOT_ANGRY,
|
||||||
ANIM_RIOT_ANGRY_B,
|
ANIM_RIOT_ANGRY_B,
|
||||||
@ -259,7 +275,7 @@ enum AnimationId
|
|||||||
ANIM_RIOT_PUNCHES,
|
ANIM_RIOT_PUNCHES,
|
||||||
ANIM_RIOT_SHOUT,
|
ANIM_RIOT_SHOUT,
|
||||||
ANIM_RIOT_CHALLENGE,
|
ANIM_RIOT_CHALLENGE,
|
||||||
ANIM_RIOT_FUKU,
|
ANIM_RIOT_FUCKYOU,
|
||||||
|
|
||||||
ANIM_STRIP_A,
|
ANIM_STRIP_A,
|
||||||
ANIM_STRIP_B,
|
ANIM_STRIP_B,
|
||||||
@ -268,6 +284,4 @@ enum AnimationId
|
|||||||
ANIM_STRIP_E,
|
ANIM_STRIP_E,
|
||||||
ANIM_STRIP_F,
|
ANIM_STRIP_F,
|
||||||
ANIM_STRIP_G,
|
ANIM_STRIP_G,
|
||||||
|
|
||||||
NUM_ANIMS
|
|
||||||
};
|
};
|
@ -2970,6 +2970,8 @@ cAudioManager::ProcessVehicleOneShots(cVehicleParams& params)
|
|||||||
int32 sampleIndex;
|
int32 sampleIndex;
|
||||||
int32 frequency;
|
int32 frequency;
|
||||||
CPed *pPed = params.m_pVehicle->pDriver;
|
CPed *pPed = params.m_pVehicle->pDriver;
|
||||||
|
if(!pPed)
|
||||||
|
break;
|
||||||
if(!pPed->HasWeaponSlot(WEAPONSLOT_SUBMACHINEGUN)) {
|
if(!pPed->HasWeaponSlot(WEAPONSLOT_SUBMACHINEGUN)) {
|
||||||
sampleIndex = SFX_UZI_LEFT;
|
sampleIndex = SFX_UZI_LEFT;
|
||||||
frequency = SampleManager.GetSampleBaseFrequency(sampleIndex);
|
frequency = SampleManager.GetSampleBaseFrequency(sampleIndex);
|
||||||
@ -8846,7 +8848,7 @@ cAudioManager::ProcessFrontEnd()
|
|||||||
break;
|
break;
|
||||||
case SOUND_PICKUP_BONUS:
|
case SOUND_PICKUP_BONUS:
|
||||||
case SOUND_FRONTEND_MENU_STARTING:
|
case SOUND_FRONTEND_MENU_STARTING:
|
||||||
case SOUND_HUD_SOUND:
|
case SOUND_HUD:
|
||||||
stereo = true;
|
stereo = true;
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_INFO_LEFT;
|
m_sQueueSample.m_nSampleIndex = SFX_INFO_LEFT;
|
||||||
center = true;
|
center = true;
|
||||||
@ -8882,11 +8884,11 @@ cAudioManager::ProcessFrontEnd()
|
|||||||
case SOUND_CLOCK_TICK:
|
case SOUND_CLOCK_TICK:
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_TIMER;
|
m_sQueueSample.m_nSampleIndex = SFX_TIMER;
|
||||||
break;
|
break;
|
||||||
case SOUND_FRONTEND_NO_RADIO:
|
case SOUND_FRONTEND_RADIO_TURN_OFF:
|
||||||
case SOUND_FRONTEND_RADIO_CHANGE:
|
case SOUND_FRONTEND_RADIO_TURN_ON:
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_RADIO_CLICK;
|
m_sQueueSample.m_nSampleIndex = SFX_RADIO_CLICK;
|
||||||
break;
|
break;
|
||||||
case SOUND_FRONTEND_RADIO_CHANGE_2:
|
case SOUND_FRONTEND_HURRICANE:
|
||||||
m_sQueueSample.m_nSampleIndex = SFX_HURRICANE_MA;
|
m_sQueueSample.m_nSampleIndex = SFX_HURRICANE_MA;
|
||||||
break;
|
break;
|
||||||
case SOUND_BULLETTRACE_1:
|
case SOUND_BULLETTRACE_1:
|
||||||
@ -8937,9 +8939,9 @@ cAudioManager::ProcessFrontEnd()
|
|||||||
|
|
||||||
sample = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i];
|
sample = m_asAudioEntities[m_sQueueSample.m_nEntityIndex].m_awAudioEvent[i];
|
||||||
|
|
||||||
if (sample == SOUND_FRONTEND_NO_RADIO)
|
if (sample == SOUND_FRONTEND_RADIO_TURN_OFF)
|
||||||
m_sQueueSample.m_nFrequency = 28509;
|
m_sQueueSample.m_nFrequency = 28509;
|
||||||
else if (sample == SOUND_FRONTEND_RADIO_CHANGE)
|
else if (sample == SOUND_FRONTEND_RADIO_TURN_ON)
|
||||||
m_sQueueSample.m_nFrequency = 32000;
|
m_sQueueSample.m_nFrequency = 32000;
|
||||||
else if (sample == SOUND_BULLETTRACE_1 || sample == SOUND_BULLETTRACE_2) {
|
else if (sample == SOUND_BULLETTRACE_1 || sample == SOUND_BULLETTRACE_2) {
|
||||||
m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex);
|
m_sQueueSample.m_nFrequency = SampleManager.GetSampleBaseFrequency(m_sQueueSample.m_nSampleIndex);
|
||||||
|
@ -21,6 +21,10 @@
|
|||||||
#include "DMAudio.h"
|
#include "DMAudio.h"
|
||||||
#include "GenericGameStorage.h"
|
#include "GenericGameStorage.h"
|
||||||
|
|
||||||
|
#if !defined FIX_BUGS && (defined RADIO_SCROLL_TO_PREV_STATION || defined RADIO_OFF_TEXT)
|
||||||
|
static_assert(false, "R*'s radio implementation is quite buggy, RADIO_SCROLL_TO_PREV_STATION and RADIO_OFF_TEXT won't work without FIX_BUGS");
|
||||||
|
#endif
|
||||||
|
|
||||||
cMusicManager MusicManager;
|
cMusicManager MusicManager;
|
||||||
int32 gNumRetunePresses;
|
int32 gNumRetunePresses;
|
||||||
int32 gRetuneCounter;
|
int32 gRetuneCounter;
|
||||||
@ -52,7 +56,7 @@ cMusicManager::cMusicManager()
|
|||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
m_nUpcomingMusicMode = MUSICMODE_DISABLED;
|
m_nUpcomingMusicMode = MUSICMODE_DISABLED;
|
||||||
m_nMusicMode = MUSICMODE_DISABLED;
|
m_nMusicMode = MUSICMODE_DISABLED;
|
||||||
field_2 = false;
|
m_bSetNextStation = false;
|
||||||
|
|
||||||
for (int i = 0; i < NUM_RADIOS; i++)
|
for (int i = 0; i < NUM_RADIOS; i++)
|
||||||
aListenTimeArray[i] = 0.0f;
|
aListenTimeArray[i] = 0.0f;
|
||||||
@ -71,27 +75,27 @@ cMusicManager::ResetMusicAfterReload()
|
|||||||
float afRadioTime[NUM_RADIOS];
|
float afRadioTime[NUM_RADIOS];
|
||||||
|
|
||||||
m_bRadioSetByScript = false;
|
m_bRadioSetByScript = false;
|
||||||
m_nRadioStation = WILDSTYLE;
|
m_nRadioStationScript = WILDSTYLE;
|
||||||
m_nRadioPosition = -1;
|
m_nRadioPosition = -1;
|
||||||
m_nAnnouncement = NO_TRACK;
|
m_nAnnouncement = NO_TRACK;
|
||||||
m_bAnnouncementInProgress = false;
|
m_bAnnouncementInProgress = false;
|
||||||
field_2 = false;
|
m_bSetNextStation = false;
|
||||||
RadioStaticTimer = 0;
|
RadioStaticTimer = 0;
|
||||||
gNumRetunePresses = 0;
|
gNumRetunePresses = 0;
|
||||||
gRetuneCounter = 0;
|
gRetuneCounter = 0;
|
||||||
m_nFrontendTrack = NO_TRACK;
|
m_nFrontendTrack = NO_TRACK;
|
||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
field_398E = false;
|
m_FrontendLoopFlag = false;
|
||||||
field_398F = false;
|
m_bTrackChangeStarted = false;
|
||||||
m_nStreamedTrack = NO_TRACK;
|
m_nNextTrack = NO_TRACK;
|
||||||
field_3994 = false;
|
m_nNextLoopFlag = false;
|
||||||
field_3995 = false;
|
m_bVerifyNextTrackStartedToPlay = false;
|
||||||
field_3996 = false;
|
m_bGameplayAllowsRadio = false;
|
||||||
field_3997 = false;
|
m_bRadioStreamReady = false;
|
||||||
nFramesSinceCutsceneEnded = -1;
|
nFramesSinceCutsceneEnded = -1;
|
||||||
field_3999 = false;
|
m_bUserResumedGame = false;
|
||||||
field_399A = false;
|
m_bMusicModeChangeStarted = false;
|
||||||
field_399C = false;
|
m_bEarlyFrontendTrack = false;
|
||||||
m_nVolumeLatency = 0;
|
m_nVolumeLatency = 0;
|
||||||
m_nCurrentVolume = 0;
|
m_nCurrentVolume = 0;
|
||||||
m_nMaxVolume = 0;
|
m_nMaxVolume = 0;
|
||||||
@ -108,7 +112,7 @@ cMusicManager::ResetMusicAfterReload()
|
|||||||
|
|
||||||
for (int i = 0; i < NUM_RADIOS; i++) {
|
for (int i = 0; i < NUM_RADIOS; i++) {
|
||||||
aListenTimeArray[i] = afRadioTime[i];
|
aListenTimeArray[i] = afRadioTime[i];
|
||||||
uint32 trackPos = GetSavedRadioStationPosition(i);
|
int32 trackPos = GetSavedRadioStationPosition(i);
|
||||||
if (trackPos != -1) {
|
if (trackPos != -1) {
|
||||||
if (trackPos > m_aTracks[i].m_nLength) {
|
if (trackPos > m_aTracks[i].m_nLength) {
|
||||||
debug("Radio Track %d saved position is %d, Length is only %d\n", i, trackPos, m_aTracks[i].m_nLength);
|
debug("Radio Track %d saved position is %d, Length is only %d\n", i, trackPos, m_aTracks[i].m_nLength);
|
||||||
@ -179,7 +183,7 @@ cMusicManager::Initialise()
|
|||||||
m_bResetTimers = false;
|
m_bResetTimers = false;
|
||||||
m_nResetTime = 0;
|
m_nResetTime = 0;
|
||||||
m_bRadioSetByScript = false;
|
m_bRadioSetByScript = false;
|
||||||
m_nRadioStation = WILDSTYLE;
|
m_nRadioStationScript = WILDSTYLE;
|
||||||
m_nRadioPosition = -1;
|
m_nRadioPosition = -1;
|
||||||
m_nRadioInCar = NO_TRACK;
|
m_nRadioInCar = NO_TRACK;
|
||||||
gRetuneCounter = 0;
|
gRetuneCounter = 0;
|
||||||
@ -188,18 +192,18 @@ cMusicManager::Initialise()
|
|||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
m_nUpcomingMusicMode = MUSICMODE_DISABLED;
|
m_nUpcomingMusicMode = MUSICMODE_DISABLED;
|
||||||
m_nMusicMode = MUSICMODE_DISABLED;
|
m_nMusicMode = MUSICMODE_DISABLED;
|
||||||
field_398E = false;
|
m_FrontendLoopFlag = false;
|
||||||
field_398F = false;
|
m_bTrackChangeStarted = false;
|
||||||
m_nStreamedTrack = NO_TRACK;
|
m_nNextTrack = NO_TRACK;
|
||||||
field_3994 = false;
|
m_nNextLoopFlag = false;
|
||||||
field_3995 = false;
|
m_bVerifyNextTrackStartedToPlay = false;
|
||||||
field_3996 = false;
|
m_bGameplayAllowsRadio = false;
|
||||||
field_3997 = false;
|
m_bRadioStreamReady = false;
|
||||||
nFramesSinceCutsceneEnded = -1;
|
nFramesSinceCutsceneEnded = -1;
|
||||||
field_3999 = false;
|
m_bUserResumedGame = false;
|
||||||
field_399A = false;
|
m_bMusicModeChangeStarted = false;
|
||||||
m_nMusicModeToBeSet = MUSICMODE_DISABLED;
|
m_nMusicModeToBeSet = MUSICMODE_DISABLED;
|
||||||
field_399C = false;
|
m_bEarlyFrontendTrack = false;
|
||||||
m_nVolumeLatency = 0;
|
m_nVolumeLatency = 0;
|
||||||
m_nCurrentVolume = 0;
|
m_nCurrentVolume = 0;
|
||||||
m_nMaxVolume = 0;
|
m_nMaxVolume = 0;
|
||||||
@ -227,7 +231,7 @@ cMusicManager::SetRadioChannelByScript(uint32 station, int32 pos)
|
|||||||
station = STREAMED_SOUND_CITY_AMBIENT;
|
station = STREAMED_SOUND_CITY_AMBIENT;
|
||||||
if (station <= STREAMED_SOUND_RADIO_POLICE) {
|
if (station <= STREAMED_SOUND_RADIO_POLICE) {
|
||||||
m_bRadioSetByScript = true;
|
m_bRadioSetByScript = true;
|
||||||
m_nRadioStation = station;
|
m_nRadioStationScript = station;
|
||||||
m_nRadioPosition = pos == -1 ? -1 : pos % m_aTracks[station].m_nLength;
|
m_nRadioPosition = pos == -1 ? -1 : pos % m_aTracks[station].m_nLength;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -292,7 +296,7 @@ cMusicManager::SetRadioInCar(uint32 station)
|
|||||||
void
|
void
|
||||||
cMusicManager::RecordRadioStats()
|
cMusicManager::RecordRadioStats()
|
||||||
{
|
{
|
||||||
if (m_nPlayingTrack < STREAMED_SOUND_CITY_AMBIENT) {
|
if (m_nPlayingTrack < NUM_RADIOS) {
|
||||||
double time /*Rusty*/ = CTimer::GetTimeInMillisecondsPauseMode();
|
double time /*Rusty*/ = CTimer::GetTimeInMillisecondsPauseMode();
|
||||||
if (time > m_nLastTrackServiceTime)
|
if (time > m_nLastTrackServiceTime)
|
||||||
aListenTimeArray[m_nPlayingTrack] += time - m_nLastTrackServiceTime;
|
aListenTimeArray[m_nPlayingTrack] += time - m_nLastTrackServiceTime;
|
||||||
@ -321,11 +325,11 @@ cMusicManager::ChangeMusicMode(uint8 mode)
|
|||||||
while (SampleManager.IsStreamPlaying(0))
|
while (SampleManager.IsStreamPlaying(0))
|
||||||
SampleManager.StopStreamedFile(0);
|
SampleManager.StopStreamedFile(0);
|
||||||
m_nMusicMode = m_nUpcomingMusicMode;
|
m_nMusicMode = m_nUpcomingMusicMode;
|
||||||
field_399A = false;
|
m_bMusicModeChangeStarted = false;
|
||||||
field_398F = false;
|
m_bTrackChangeStarted = false;
|
||||||
m_nStreamedTrack = NO_TRACK;
|
m_nNextTrack = NO_TRACK;
|
||||||
field_3994 = false;
|
m_nNextLoopFlag = false;
|
||||||
field_3995 = false;
|
m_bVerifyNextTrackStartedToPlay = false;
|
||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
m_nFrontendTrack = NO_TRACK;
|
m_nFrontendTrack = NO_TRACK;
|
||||||
m_bAnnouncementInProgress = false;
|
m_bAnnouncementInProgress = false;
|
||||||
@ -356,7 +360,7 @@ cMusicManager::Service()
|
|||||||
|
|
||||||
if (!m_bIsInitialised || m_bDisabled) return;
|
if (!m_bIsInitialised || m_bDisabled) return;
|
||||||
|
|
||||||
if (!field_399A)
|
if (!m_bMusicModeChangeStarted)
|
||||||
m_nMusicModeToBeSet = m_nUpcomingMusicMode;
|
m_nMusicModeToBeSet = m_nUpcomingMusicMode;
|
||||||
if (m_nMusicModeToBeSet == m_nMusicMode) {
|
if (m_nMusicModeToBeSet == m_nMusicMode) {
|
||||||
if (!AudioManager.m_nUserPause || AudioManager.m_nPreviousUserPause || m_nMusicMode != MUSICMODE_FRONTEND)
|
if (!AudioManager.m_nUserPause || AudioManager.m_nPreviousUserPause || m_nMusicMode != MUSICMODE_FRONTEND)
|
||||||
@ -371,13 +375,13 @@ cMusicManager::Service()
|
|||||||
else
|
else
|
||||||
m_nMusicMode = MUSICMODE_DISABLED;
|
m_nMusicMode = MUSICMODE_DISABLED;
|
||||||
} else {
|
} else {
|
||||||
field_399A = true;
|
m_bMusicModeChangeStarted = true;
|
||||||
if (!field_3999 && !AudioManager.m_nUserPause && AudioManager.m_nPreviousUserPause)
|
if (!m_bUserResumedGame && !AudioManager.m_nUserPause && AudioManager.m_nPreviousUserPause)
|
||||||
field_3999 = true;
|
m_bUserResumedGame = true;
|
||||||
if (AudioManager.m_FrameCounter % 4 == 0) {
|
if (AudioManager.m_FrameCounter % 4 == 0) {
|
||||||
gNumRetunePresses = 0;
|
gNumRetunePresses = 0;
|
||||||
gRetuneCounter = 0;
|
gRetuneCounter = 0;
|
||||||
field_2 = false;
|
m_bSetNextStation = false;
|
||||||
if (SampleManager.IsStreamPlaying(0)) {
|
if (SampleManager.IsStreamPlaying(0)) {
|
||||||
if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded)
|
if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded)
|
||||||
{
|
{
|
||||||
@ -390,14 +394,14 @@ cMusicManager::Service()
|
|||||||
} else {
|
} else {
|
||||||
bRadioStatsRecorded = false;
|
bRadioStatsRecorded = false;
|
||||||
m_nMusicMode = m_nMusicModeToBeSet;
|
m_nMusicMode = m_nMusicModeToBeSet;
|
||||||
field_399A = false;
|
m_bMusicModeChangeStarted = false;
|
||||||
field_398F = false;
|
m_bTrackChangeStarted = false;
|
||||||
m_nStreamedTrack = NO_TRACK;
|
m_nNextTrack = NO_TRACK;
|
||||||
field_3994 = false;
|
m_nNextLoopFlag = false;
|
||||||
field_3995 = false;
|
m_bVerifyNextTrackStartedToPlay = false;
|
||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
if (field_399C)
|
if (m_bEarlyFrontendTrack)
|
||||||
field_399C = false;
|
m_bEarlyFrontendTrack = false;
|
||||||
else
|
else
|
||||||
m_nFrontendTrack = NO_TRACK;
|
m_nFrontendTrack = NO_TRACK;
|
||||||
}
|
}
|
||||||
@ -417,19 +421,19 @@ cMusicManager::ServiceFrontEndMode()
|
|||||||
g_bAnnouncementReadPosAlready = false;
|
g_bAnnouncementReadPosAlready = false;
|
||||||
m_nAnnouncement = NO_TRACK;
|
m_nAnnouncement = NO_TRACK;
|
||||||
m_bAnnouncementInProgress = false;
|
m_bAnnouncementInProgress = false;
|
||||||
m_nStreamedTrack = NO_TRACK;
|
m_nNextTrack = NO_TRACK;
|
||||||
m_nFrontendTrack = NO_TRACK;
|
m_nFrontendTrack = NO_TRACK;
|
||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AudioManager.m_FrameCounter % 4 != 0) return;
|
if (AudioManager.m_FrameCounter % 4 != 0) return;
|
||||||
|
|
||||||
if (!field_398F && !field_3995) {
|
if (!m_bTrackChangeStarted && !m_bVerifyNextTrackStartedToPlay) {
|
||||||
m_nStreamedTrack = m_nFrontendTrack;
|
m_nNextTrack = m_nFrontendTrack;
|
||||||
field_3994 = field_398E;
|
m_nNextLoopFlag = m_FrontendLoopFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_nStreamedTrack == m_nPlayingTrack) {
|
if (m_nNextTrack == m_nPlayingTrack) {
|
||||||
if (SampleManager.IsStreamPlaying(0)) {
|
if (SampleManager.IsStreamPlaying(0)) {
|
||||||
if (m_nVolumeLatency > 0) m_nVolumeLatency--;
|
if (m_nVolumeLatency > 0) m_nVolumeLatency--;
|
||||||
else {
|
else {
|
||||||
@ -444,25 +448,25 @@ cMusicManager::ServiceFrontEndMode()
|
|||||||
ChangeMusicMode(MUSICMODE_GAME);
|
ChangeMusicMode(MUSICMODE_GAME);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
field_398F = true;
|
m_bTrackChangeStarted = true;
|
||||||
if (field_3995 || !SampleManager.IsStreamPlaying(0)) {
|
if (m_bVerifyNextTrackStartedToPlay || !SampleManager.IsStreamPlaying(0)) {
|
||||||
bRadioStatsRecorded = false;
|
bRadioStatsRecorded = false;
|
||||||
if (SampleManager.IsStreamPlaying(0) || m_nStreamedTrack == NO_TRACK) {
|
if (SampleManager.IsStreamPlaying(0) || m_nNextTrack == NO_TRACK) {
|
||||||
m_nPlayingTrack = m_nStreamedTrack;
|
m_nPlayingTrack = m_nNextTrack;
|
||||||
field_3995 = false;
|
m_bVerifyNextTrackStartedToPlay = false;
|
||||||
field_398F = false;
|
m_bTrackChangeStarted = false;
|
||||||
} else {
|
} else {
|
||||||
uint32 trackStartPos = (m_nStreamedTrack > STREAMED_SOUND_RADIO_POLICE) ? 0 : GetTrackStartPos(m_nStreamedTrack);
|
uint32 trackStartPos = (m_nNextTrack > STREAMED_SOUND_RADIO_POLICE) ? 0 : GetTrackStartPos(m_nNextTrack);
|
||||||
if (m_nStreamedTrack != NO_TRACK) {
|
if (m_nNextTrack != NO_TRACK) {
|
||||||
SampleManager.SetStreamedFileLoopFlag(field_3994, 0);
|
SampleManager.SetStreamedFileLoopFlag(m_nNextLoopFlag, 0);
|
||||||
SampleManager.StartStreamedFile(m_nStreamedTrack, trackStartPos, 0);
|
SampleManager.StartStreamedFile(m_nNextTrack, trackStartPos, 0);
|
||||||
m_nVolumeLatency = 3;
|
m_nVolumeLatency = 3;
|
||||||
m_nCurrentVolume = 0;
|
m_nCurrentVolume = 0;
|
||||||
m_nMaxVolume = 100;
|
m_nMaxVolume = 100;
|
||||||
SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0);
|
SampleManager.SetStreamedVolumeAndPan(m_nCurrentVolume, 63, 0, 0);
|
||||||
if (m_nStreamedTrack < STREAMED_SOUND_CITY_AMBIENT)
|
if (m_nNextTrack < STREAMED_SOUND_CITY_AMBIENT)
|
||||||
m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
|
m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
|
||||||
field_3995 = true;
|
m_bVerifyNextTrackStartedToPlay = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -483,8 +487,8 @@ cMusicManager::ServiceGameMode()
|
|||||||
{
|
{
|
||||||
CPed *ped = FindPlayerPed();
|
CPed *ped = FindPlayerPed();
|
||||||
CVehicle *vehicle = AudioManager.FindVehicleOfPlayer();
|
CVehicle *vehicle = AudioManager.FindVehicleOfPlayer();
|
||||||
field_3997 = field_3996;
|
m_bRadioStreamReady = m_bGameplayAllowsRadio;
|
||||||
field_3996 = false;
|
m_bGameplayAllowsRadio = false;
|
||||||
|
|
||||||
switch (CGame::currArea)
|
switch (CGame::currArea)
|
||||||
{
|
{
|
||||||
@ -495,29 +499,28 @@ cMusicManager::ServiceGameMode()
|
|||||||
case AREA_BLOOD:
|
case AREA_BLOOD:
|
||||||
case AREA_OVALRING:
|
case AREA_OVALRING:
|
||||||
case AREA_MALIBU_CLUB:
|
case AREA_MALIBU_CLUB:
|
||||||
field_3996 = false;
|
m_bGameplayAllowsRadio = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (SampleManager.GetMusicVolume()) {
|
if (SampleManager.GetMusicVolume()) {
|
||||||
if (PlayerInCar())
|
if (PlayerInCar())
|
||||||
field_3996 = true;
|
m_bGameplayAllowsRadio = true;
|
||||||
} else
|
} else
|
||||||
field_3996 = false;
|
m_bGameplayAllowsRadio = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!field_3996) {
|
if (!m_bGameplayAllowsRadio) {
|
||||||
nFramesSinceCutsceneEnded = -1;
|
nFramesSinceCutsceneEnded = -1;
|
||||||
gNumRetunePresses = 0;
|
gNumRetunePresses = 0;
|
||||||
gRetuneCounter = 0;
|
gRetuneCounter = 0;
|
||||||
field_2 = false;
|
m_bSetNextStation = false;
|
||||||
} else if (ped) {
|
} else if (ped) {
|
||||||
if(!ped->DyingOrDead()) {
|
if(!ped->DyingOrDead() && vehicle) {
|
||||||
#ifdef GTA_PC
|
#ifdef GTA_PC
|
||||||
if (SampleManager.IsMP3RadioChannelAvailable()
|
if (SampleManager.IsMP3RadioChannelAvailable()
|
||||||
&& vehicle->m_nRadioStation < USERTRACK
|
&& vehicle->m_nRadioStation < USERTRACK
|
||||||
&& ControlsManager.GetIsKeyboardKeyJustDown(rsF9)
|
&& ControlsManager.GetIsKeyboardKeyJustDown(rsF9))
|
||||||
&& vehicle)
|
|
||||||
{
|
{
|
||||||
if (!UsesPoliceRadio(vehicle) && !UsesTaxiRadio(vehicle)) {
|
if (!UsesPoliceRadio(vehicle) && !UsesTaxiRadio(vehicle)) {
|
||||||
gNumRetunePresses = 0;
|
gNumRetunePresses = 0;
|
||||||
@ -532,7 +535,7 @@ cMusicManager::ServiceGameMode()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (CPad::GetPad(0)->ChangeStationJustDown() && vehicle)
|
if (CPad::GetPad(0)->ChangeStationJustDown())
|
||||||
{
|
{
|
||||||
if (!UsesPoliceRadio(vehicle) && !UsesTaxiRadio(vehicle)) {
|
if (!UsesPoliceRadio(vehicle) && !UsesTaxiRadio(vehicle)) {
|
||||||
gNumRetunePresses++;
|
gNumRetunePresses++;
|
||||||
@ -540,147 +543,183 @@ cMusicManager::ServiceGameMode()
|
|||||||
RadioStaticCounter = 0;
|
RadioStaticCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
else if(CPad::GetPad(0)->GetMouseWheelDownJustDown() || CPad::GetPad(0)->GetMouseWheelUpJustDown()) {
|
||||||
|
if(!UsesPoliceRadio(vehicle) && !UsesTaxiRadio(vehicle)) {
|
||||||
|
int scrollNext = ControlsManager.GetControllerKeyAssociatedWithAction(VEHICLE_CHANGE_RADIO_STATION, MOUSE);
|
||||||
|
int scrollPrev = scrollNext == rsMOUSEWHEELUPBUTTON ? rsMOUSEWHEELDOWNBUTTON
|
||||||
|
: scrollNext == rsMOUSEWHEELDOWNBUTTON ? rsMOUSEWHEELUPBUTTON : -1;
|
||||||
|
|
||||||
|
if(scrollPrev != -1 && !ControlsManager.IsAnyVehicleActionAssignedToMouseKey(scrollPrev)) {
|
||||||
|
gNumRetunePresses--;
|
||||||
|
gRetuneCounter = 20;
|
||||||
|
RadioStaticCounter = 0;
|
||||||
|
int track = gNumRetunePresses + vehicle->m_nRadioStation;
|
||||||
|
while(track < 0) track += NUM_RADIOS + 1;
|
||||||
|
while(track >= NUM_RADIOS + 1) track -= NUM_RADIOS + 1;
|
||||||
|
if(!DMAudio.IsMP3RadioChannelAvailable() && track == USERTRACK) gNumRetunePresses--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field_3999)
|
if (m_bUserResumedGame)
|
||||||
{
|
{
|
||||||
field_3997 = false;
|
m_bRadioStreamReady = false;
|
||||||
field_3999 = false;
|
m_bUserResumedGame = false;
|
||||||
}
|
}
|
||||||
if (m_nPlayingTrack == NO_TRACK && m_nFrontendTrack == NO_TRACK)
|
if (m_nPlayingTrack == NO_TRACK && m_nFrontendTrack == NO_TRACK)
|
||||||
field_3997 = false;
|
m_bRadioStreamReady = false;
|
||||||
|
|
||||||
if (field_3996)
|
if (m_bGameplayAllowsRadio)
|
||||||
{
|
{
|
||||||
if (field_3997)
|
if (!m_bRadioStreamReady)
|
||||||
{
|
{
|
||||||
if (m_nAnnouncement < NO_TRACK) {
|
if(vehicle == nil) {
|
||||||
if ((m_bAnnouncementInProgress || m_nFrontendTrack == m_nPlayingTrack) && ServiceAnnouncement()) {
|
m_nFrontendTrack = STREAMED_SOUND_RADIO_WAVE; // huh?
|
||||||
if (m_bAnnouncementInProgress) {
|
|
||||||
field_2 = false;
|
|
||||||
gNumRetunePresses = 0;
|
|
||||||
gRetuneCounter = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(m_nAnnouncement == NO_TRACK) {
|
|
||||||
m_nStreamedTrack = NO_TRACK;
|
|
||||||
m_nFrontendTrack = GetCarTuning();
|
|
||||||
field_2 = false;
|
|
||||||
gRetuneCounter = 0;
|
|
||||||
gNumRetunePresses = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!m_bAnnouncementInProgress
|
|
||||||
&& m_nAnnouncement == NO_TRACK
|
|
||||||
&& m_nPlayingTrack == STREAMED_SOUND_RADIO_MP3_PLAYER
|
|
||||||
&& !SampleManager.IsStreamPlaying(0))
|
|
||||||
{
|
|
||||||
SampleManager.StartStreamedFile(STREAMED_SOUND_RADIO_MP3_PLAYER, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_bRadioSetByScript)
|
|
||||||
{
|
|
||||||
if (gNumRetunePresses != 0)
|
|
||||||
{
|
|
||||||
if (--gRetuneCounter == 0)
|
|
||||||
{
|
|
||||||
field_2 = true;
|
|
||||||
gRetuneCounter = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (gRetuneCounter)
|
|
||||||
{
|
|
||||||
int32 station = gNumRetunePresses + vehicle->m_nRadioStation;
|
|
||||||
while (station >= RADIO_OFF) station -= RADIO_OFF;
|
|
||||||
|
|
||||||
if (!DMAudio.IsMP3RadioChannelAvailable() && station == USERTRACK)
|
|
||||||
{
|
|
||||||
++gNumRetunePresses;
|
|
||||||
station = NUM_RADIOS;
|
|
||||||
}
|
|
||||||
if (station == NUM_RADIOS)
|
|
||||||
{
|
|
||||||
if (gRetuneCounter == NUM_RADIOS + 9)
|
|
||||||
{
|
|
||||||
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_NO_RADIO, 0.0f);
|
|
||||||
RadioStaticCounter = 5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (station == WILDSTYLE && gRetuneCounter == NUM_RADIOS + 9)
|
|
||||||
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE, 0.0f);
|
|
||||||
AudioManager.DoPoliceRadioCrackle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (RadioStaticCounter < 2 && CTimer::GetTimeInMilliseconds() > RadioStaticTimer + 800)
|
|
||||||
{
|
|
||||||
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_RADIO_CHANGE, 0.0f);
|
|
||||||
RadioStaticCounter++;
|
|
||||||
RadioStaticTimer = CTimer::GetTimeInMilliseconds();
|
|
||||||
}
|
|
||||||
if (field_2)
|
|
||||||
m_nFrontendTrack = GetNextCarTuning();
|
|
||||||
if (m_nFrontendTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nFrontendTrack <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
|
||||||
SetUpCorrectAmbienceTrack();
|
|
||||||
ServiceTrack(vehicle, ped);
|
|
||||||
if (field_2)
|
|
||||||
field_2 = false;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (UsesPoliceRadio(vehicle))
|
if(m_bRadioSetByScript) {
|
||||||
m_nFrontendTrack = STREAMED_SOUND_RADIO_POLICE;
|
if(UsesPoliceRadio(vehicle))
|
||||||
else if (UsesTaxiRadio(vehicle))
|
m_nFrontendTrack = STREAMED_SOUND_RADIO_POLICE;
|
||||||
m_nFrontendTrack = STREAMED_SOUND_RADIO_TAXI;
|
else if(UsesTaxiRadio(vehicle))
|
||||||
else {
|
m_nFrontendTrack = STREAMED_SOUND_RADIO_TAXI;
|
||||||
m_nFrontendTrack = m_nRadioStation;
|
else {
|
||||||
vehicle->m_nRadioStation = m_nRadioStation;
|
m_nFrontendTrack = m_nRadioStationScript;
|
||||||
|
vehicle->m_nRadioStation = m_nRadioStationScript;
|
||||||
|
}
|
||||||
|
if(m_nRadioPosition != -1) {
|
||||||
|
m_aTracks[m_nFrontendTrack].m_nPosition = m_nRadioPosition;
|
||||||
|
m_aTracks[m_nFrontendTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
|
||||||
|
}
|
||||||
|
m_bRadioSetByScript = false;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_nRadioPosition != -1) {
|
// This starts the radio when you enter the car.
|
||||||
m_aTracks[m_nFrontendTrack].m_nPosition = m_nRadioPosition;
|
m_nFrontendTrack = GetCarTuning();
|
||||||
m_aTracks[m_nFrontendTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
|
return;
|
||||||
|
}
|
||||||
|
if (m_nAnnouncement < NO_TRACK) {
|
||||||
|
if ((m_bAnnouncementInProgress || m_nFrontendTrack == m_nPlayingTrack) && ServiceAnnouncement()) {
|
||||||
|
if (m_bAnnouncementInProgress) {
|
||||||
|
m_bSetNextStation = false;
|
||||||
|
gNumRetunePresses = 0;
|
||||||
|
gRetuneCounter = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(m_nAnnouncement == NO_TRACK) {
|
||||||
|
m_nNextTrack = NO_TRACK;
|
||||||
|
m_nFrontendTrack = GetCarTuning();
|
||||||
|
m_bSetNextStation = false;
|
||||||
|
gRetuneCounter = 0;
|
||||||
|
gNumRetunePresses = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!m_bAnnouncementInProgress
|
||||||
|
&& m_nAnnouncement == NO_TRACK
|
||||||
|
&& m_nPlayingTrack == STREAMED_SOUND_RADIO_MP3_PLAYER
|
||||||
|
&& !SampleManager.IsStreamPlaying(0))
|
||||||
|
{
|
||||||
|
SampleManager.StartStreamedFile(STREAMED_SOUND_RADIO_MP3_PLAYER, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
gRetuneCounter = 0;
|
if (!m_bRadioSetByScript)
|
||||||
gNumRetunePresses = 0;
|
{
|
||||||
field_2 = false;
|
// Because when you switch radio back and forth, gNumRetunePresses will be 0 but gRetuneCounter won't.
|
||||||
m_bRadioSetByScript = false;
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
if(gRetuneCounter != 0) {
|
||||||
|
if(gRetuneCounter > 1)
|
||||||
|
gRetuneCounter--;
|
||||||
|
else if(gRetuneCounter == 1) {
|
||||||
|
m_bSetNextStation = true;
|
||||||
|
gRetuneCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (gNumRetunePresses != 0)
|
||||||
|
{
|
||||||
|
if (--gRetuneCounter == 0)
|
||||||
|
{
|
||||||
|
m_bSetNextStation = true;
|
||||||
|
gRetuneCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (gRetuneCounter)
|
||||||
|
{
|
||||||
|
int32 station = gNumRetunePresses + vehicle->m_nRadioStation;
|
||||||
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
while (station < 0) station += NUM_RADIOS + 1;
|
||||||
|
#endif
|
||||||
|
while (station >= NUM_RADIOS + 1) station -= NUM_RADIOS + 1;
|
||||||
|
|
||||||
|
// Scrolling back won't hit here, so increasing isn't problem
|
||||||
|
if (!DMAudio.IsMP3RadioChannelAvailable() && station == USERTRACK)
|
||||||
|
{
|
||||||
|
++gNumRetunePresses;
|
||||||
|
station = RADIO_OFF;
|
||||||
|
}
|
||||||
|
if (station == RADIO_OFF)
|
||||||
|
{
|
||||||
|
if (gRetuneCounter == 19) // One less then what switching radio sets, so runs right after turning off radio
|
||||||
|
{
|
||||||
|
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_TURN_OFF, 0.0f);
|
||||||
|
RadioStaticCounter = 5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
if (vehicle->m_nRadioStation == RADIO_OFF && gRetuneCounter == 19) // Right after turning on the radio
|
||||||
|
#else
|
||||||
|
if (station == 0 && gRetuneCounter == 19) // Right after turning on the radio
|
||||||
|
#endif
|
||||||
|
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_TURN_ON, 0.0f);
|
||||||
|
AudioManager.DoPoliceRadioCrackle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (RadioStaticCounter < 2 && CTimer::GetTimeInMilliseconds() > RadioStaticTimer + 800)
|
||||||
|
{
|
||||||
|
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_RADIO_CHANGE, 0.0f);
|
||||||
|
RadioStaticCounter++;
|
||||||
|
RadioStaticTimer = CTimer::GetTimeInMilliseconds();
|
||||||
|
}
|
||||||
|
if (m_bSetNextStation)
|
||||||
|
m_nFrontendTrack = GetNextCarTuning();
|
||||||
if (m_nFrontendTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nFrontendTrack <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
if (m_nFrontendTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nFrontendTrack <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
||||||
SetUpCorrectAmbienceTrack();
|
SetUpCorrectAmbienceTrack();
|
||||||
ServiceTrack(vehicle, ped);
|
ServiceTrack(vehicle, ped);
|
||||||
if (field_2)
|
if (m_bSetNextStation)
|
||||||
field_2 = false;
|
m_bSetNextStation = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (vehicle == nil)
|
if (UsesPoliceRadio(vehicle))
|
||||||
{
|
m_nFrontendTrack = STREAMED_SOUND_RADIO_POLICE;
|
||||||
m_nFrontendTrack = STREAMED_SOUND_RADIO_WAVE; // huh?
|
else if (UsesTaxiRadio(vehicle))
|
||||||
return;
|
m_nFrontendTrack = STREAMED_SOUND_RADIO_TAXI;
|
||||||
}
|
else {
|
||||||
if (m_bRadioSetByScript)
|
m_nFrontendTrack = m_nRadioStationScript;
|
||||||
{
|
vehicle->m_nRadioStation = m_nRadioStationScript;
|
||||||
if (UsesPoliceRadio(vehicle))
|
|
||||||
m_nFrontendTrack = STREAMED_SOUND_RADIO_POLICE;
|
|
||||||
else if (UsesTaxiRadio(vehicle))
|
|
||||||
m_nFrontendTrack = STREAMED_SOUND_RADIO_TAXI;
|
|
||||||
else {
|
|
||||||
m_nFrontendTrack = m_nRadioStation;
|
|
||||||
vehicle->m_nRadioStation = m_nRadioStation;
|
|
||||||
}
|
|
||||||
if (m_nRadioPosition != -1)
|
|
||||||
{
|
|
||||||
m_aTracks[m_nFrontendTrack].m_nPosition = m_nRadioPosition;
|
|
||||||
m_aTracks[m_nFrontendTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
|
|
||||||
}
|
|
||||||
m_bRadioSetByScript = false;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_nFrontendTrack = GetCarTuning();
|
if (m_nRadioPosition != -1) {
|
||||||
|
m_aTracks[m_nFrontendTrack].m_nPosition = m_nRadioPosition;
|
||||||
|
m_aTracks[m_nFrontendTrack].m_nLastPosCheckTimer = CTimer::GetTimeInMillisecondsPauseMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
gRetuneCounter = 0;
|
||||||
|
gNumRetunePresses = 0;
|
||||||
|
m_bSetNextStation = false;
|
||||||
|
m_bRadioSetByScript = false;
|
||||||
|
if (m_nFrontendTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nFrontendTrack <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
||||||
|
SetUpCorrectAmbienceTrack();
|
||||||
|
ServiceTrack(vehicle, ped);
|
||||||
|
if (m_bSetNextStation)
|
||||||
|
m_bSetNextStation = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -692,7 +731,7 @@ cMusicManager::ServiceGameMode()
|
|||||||
g_bAnnouncementReadPosAlready = false;
|
g_bAnnouncementReadPosAlready = false;
|
||||||
m_nAnnouncement = NO_TRACK;
|
m_nAnnouncement = NO_TRACK;
|
||||||
m_bAnnouncementInProgress = false;
|
m_bAnnouncementInProgress = false;
|
||||||
m_nStreamedTrack = NO_TRACK;
|
m_nNextTrack = NO_TRACK;
|
||||||
m_nFrontendTrack = NO_TRACK;
|
m_nFrontendTrack = NO_TRACK;
|
||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
}
|
}
|
||||||
@ -834,7 +873,7 @@ cMusicManager::ServiceAnnouncement()
|
|||||||
{
|
{
|
||||||
if (m_bAnnouncementInProgress) {
|
if (m_bAnnouncementInProgress) {
|
||||||
if (SampleManager.IsStreamPlaying(0))
|
if (SampleManager.IsStreamPlaying(0))
|
||||||
m_nPlayingTrack = m_nStreamedTrack;
|
m_nPlayingTrack = m_nNextTrack;
|
||||||
else if (m_nPlayingTrack != NO_TRACK) {
|
else if (m_nPlayingTrack != NO_TRACK) {
|
||||||
m_nAnnouncement = NO_TRACK;
|
m_nAnnouncement = NO_TRACK;
|
||||||
m_bAnnouncementInProgress = false;
|
m_bAnnouncementInProgress = false;
|
||||||
@ -852,9 +891,9 @@ cMusicManager::ServiceAnnouncement()
|
|||||||
} else {
|
} else {
|
||||||
g_bAnnouncementReadPosAlready = false;
|
g_bAnnouncementReadPosAlready = false;
|
||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
m_nStreamedTrack = m_nAnnouncement;
|
m_nNextTrack = m_nAnnouncement;
|
||||||
SampleManager.SetStreamedFileLoopFlag(0, false);
|
SampleManager.SetStreamedFileLoopFlag(0, 0);
|
||||||
SampleManager.StartStreamedFile(m_nStreamedTrack, 0, 0);
|
SampleManager.StartStreamedFile(m_nNextTrack, 0, 0);
|
||||||
SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 0, 0);
|
SampleManager.SetStreamedVolumeAndPan(MAX_VOLUME, 63, 0, 0);
|
||||||
m_bAnnouncementInProgress = true;
|
m_bAnnouncementInProgress = true;
|
||||||
}
|
}
|
||||||
@ -868,9 +907,9 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped)
|
|||||||
static bool bRadioStatsRecorded = false;
|
static bool bRadioStatsRecorded = false;
|
||||||
static bool bRadioStatsRecorded2 = false;
|
static bool bRadioStatsRecorded2 = false;
|
||||||
uint8 volume;
|
uint8 volume;
|
||||||
if (!field_398F)
|
if (!m_bTrackChangeStarted)
|
||||||
m_nStreamedTrack = m_nFrontendTrack;
|
m_nNextTrack = m_nFrontendTrack;
|
||||||
if (gRetuneCounter != 0 || field_2) {
|
if (gRetuneCounter != 0 || m_bSetNextStation) {
|
||||||
if (SampleManager.IsStreamPlaying(0)) {
|
if (SampleManager.IsStreamPlaying(0)) {
|
||||||
if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded) {
|
if (m_nPlayingTrack != NO_TRACK && !bRadioStatsRecorded) {
|
||||||
m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
|
m_aTracks[m_nPlayingTrack].m_nPosition = SampleManager.GetStreamedFilePosition(0);
|
||||||
@ -889,28 +928,35 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped)
|
|||||||
m_nPlayingTrack = NO_TRACK;
|
m_nPlayingTrack = NO_TRACK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_nStreamedTrack != m_nPlayingTrack)
|
if (m_nNextTrack != m_nPlayingTrack)
|
||||||
{
|
{
|
||||||
field_398F = true;
|
m_bTrackChangeStarted = true;
|
||||||
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
|
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
|
||||||
if (!(AudioManager.m_FrameCounter & 1)) {
|
if (!(AudioManager.m_FrameCounter & 1)) {
|
||||||
if (field_3995 || !SampleManager.IsStreamPlaying(0)) {
|
if (m_bVerifyNextTrackStartedToPlay || !SampleManager.IsStreamPlaying(0)) {
|
||||||
bRadioStatsRecorded2 = false;
|
bRadioStatsRecorded2 = false;
|
||||||
if (SampleManager.IsStreamPlaying(0)) {
|
if (SampleManager.IsStreamPlaying(0)) {
|
||||||
m_nPlayingTrack = m_nStreamedTrack;
|
m_nPlayingTrack = m_nNextTrack;
|
||||||
field_3995 = false;
|
m_bVerifyNextTrackStartedToPlay = false;
|
||||||
field_398F = false;
|
m_bTrackChangeStarted = false;
|
||||||
if (veh) {
|
if (veh) {
|
||||||
if (veh->m_nRadioStation < STREAMED_SOUND_CITY_AMBIENT || veh->m_nRadioStation > STREAMED_SOUND_AMBSIL_AMBIENT)
|
#ifdef FIX_BUGS
|
||||||
|
if (m_nPlayingTrack >= STREAMED_SOUND_CITY_AMBIENT && m_nPlayingTrack <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
||||||
|
veh->m_nRadioStation = RADIO_OFF;
|
||||||
|
else if (m_nPlayingTrack < STREAMED_SOUND_CITY_AMBIENT)
|
||||||
veh->m_nRadioStation = m_nPlayingTrack;
|
veh->m_nRadioStation = m_nPlayingTrack;
|
||||||
|
#else
|
||||||
|
if (veh->m_nRadioStation >= STREAMED_SOUND_CITY_AMBIENT && veh->m_nRadioStation <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
||||||
|
veh->m_nRadioStation = RADIO_OFF;
|
||||||
else
|
else
|
||||||
veh->m_nRadioStation = STREAMED_SOUND_CITY_AMBIENT;
|
veh->m_nRadioStation = m_nPlayingTrack;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
uint32 pos = GetTrackStartPos(m_nStreamedTrack);
|
uint32 pos = GetTrackStartPos(m_nNextTrack);
|
||||||
if (m_nStreamedTrack != NO_TRACK) {
|
if (m_nNextTrack != NO_TRACK) {
|
||||||
SampleManager.SetStreamedFileLoopFlag(1, 0);
|
SampleManager.SetStreamedFileLoopFlag(1, 0);
|
||||||
SampleManager.StartStreamedFile(m_nStreamedTrack, pos, 0);
|
SampleManager.StartStreamedFile(m_nNextTrack, pos, 0);
|
||||||
if (m_nFrontendTrack < STREAMED_SOUND_CITY_AMBIENT || m_nFrontendTrack > STREAMED_SOUND_AMBSIL_AMBIENT)
|
if (m_nFrontendTrack < STREAMED_SOUND_CITY_AMBIENT || m_nFrontendTrack > STREAMED_SOUND_AMBSIL_AMBIENT)
|
||||||
{
|
{
|
||||||
m_nVolumeLatency = 10;
|
m_nVolumeLatency = 10;
|
||||||
@ -923,9 +969,9 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped)
|
|||||||
ComputeAmbienceVol(true, volume);
|
ComputeAmbienceVol(true, volume);
|
||||||
SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0);
|
SampleManager.SetStreamedVolumeAndPan(volume, 63, 1, 0);
|
||||||
}
|
}
|
||||||
if (m_nStreamedTrack < STREAMED_SOUND_CITY_AMBIENT)
|
if (m_nNextTrack < STREAMED_SOUND_CITY_AMBIENT)
|
||||||
m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
|
m_nLastTrackServiceTime = CTimer::GetTimeInMillisecondsPauseMode();
|
||||||
field_3995 = true;
|
m_bVerifyNextTrackStartedToPlay = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -939,8 +985,8 @@ cMusicManager::ServiceTrack(CVehicle *veh, CPed *ped)
|
|||||||
RecordRadioStats();
|
RecordRadioStats();
|
||||||
if (m_nPlayingTrack >= STREAMED_SOUND_HAVANA_CITY_AMBIENT && m_nPlayingTrack <= STREAMED_SOUND_HAVANA_BEACH_AMBIENT)
|
if (m_nPlayingTrack >= STREAMED_SOUND_HAVANA_CITY_AMBIENT && m_nPlayingTrack <= STREAMED_SOUND_HAVANA_BEACH_AMBIENT)
|
||||||
{
|
{
|
||||||
if (m_nStreamedTrack >= STREAMED_SOUND_HAVANA_CITY_AMBIENT && m_nStreamedTrack <= STREAMED_SOUND_HAVANA_BEACH_AMBIENT)
|
if (m_nNextTrack >= STREAMED_SOUND_HAVANA_CITY_AMBIENT && m_nNextTrack <= STREAMED_SOUND_HAVANA_BEACH_AMBIENT)
|
||||||
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_RADIO_CHANGE_2, 0.0);
|
AudioManager.PlayOneShot(AudioManager.m_nFrontEndEntity, SOUND_FRONTEND_HURRICANE, 0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
|
SampleManager.SetStreamedVolumeAndPan(0, 63, 0, 0);
|
||||||
@ -1050,14 +1096,14 @@ cMusicManager::StopCutSceneMusic(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cMusicManager::PlayFrontEndTrack(uint32 track, uint8 bPlayInFrontend)
|
cMusicManager::PlayFrontEndTrack(uint32 track, uint8 loopFlag)
|
||||||
{
|
{
|
||||||
if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS && (m_nUpcomingMusicMode == MUSICMODE_FRONTEND || m_nMusicMode == MUSICMODE_FRONTEND))
|
if (IsInitialised() && !m_bDisabled && track < TOTAL_STREAMED_SOUNDS && (m_nUpcomingMusicMode == MUSICMODE_FRONTEND || m_nMusicMode == MUSICMODE_FRONTEND))
|
||||||
{
|
{
|
||||||
m_nFrontendTrack = track;
|
m_nFrontendTrack = track;
|
||||||
field_398E = bPlayInFrontend;
|
m_FrontendLoopFlag = loopFlag;
|
||||||
if (m_nMusicMode != MUSICMODE_FRONTEND)
|
if (m_nMusicMode != MUSICMODE_FRONTEND)
|
||||||
field_399C = true;
|
m_bEarlyFrontendTrack = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1083,10 +1129,18 @@ cMusicManager::GetNextCarTuning()
|
|||||||
if (UsesPoliceRadio(veh)) return STREAMED_SOUND_RADIO_POLICE;
|
if (UsesPoliceRadio(veh)) return STREAMED_SOUND_RADIO_POLICE;
|
||||||
if (UsesTaxiRadio(veh)) return STREAMED_SOUND_RADIO_TAXI;
|
if (UsesTaxiRadio(veh)) return STREAMED_SOUND_RADIO_TAXI;
|
||||||
if (gNumRetunePresses != 0) {
|
if (gNumRetunePresses != 0) {
|
||||||
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
// m_nRadioStation is unsigned, so...
|
||||||
|
int station = veh->m_nRadioStation + gNumRetunePresses;
|
||||||
|
while(station < 0) station += NUM_RADIOS + 1;
|
||||||
|
while(station >= NUM_RADIOS + 1) station -= NUM_RADIOS + 1;
|
||||||
|
veh->m_nRadioStation = station;
|
||||||
|
#else
|
||||||
veh->m_nRadioStation += gNumRetunePresses;
|
veh->m_nRadioStation += gNumRetunePresses;
|
||||||
while (veh->m_nRadioStation >= RADIO_OFF)
|
while(veh->m_nRadioStation >= NUM_RADIOS + 1)
|
||||||
veh->m_nRadioStation -= RADIO_OFF;
|
veh->m_nRadioStation -= NUM_RADIOS + 1;
|
||||||
DMAudio.IsMP3RadioChannelAvailable(); // woof, just call and do nothing =P
|
#endif
|
||||||
|
DMAudio.IsMP3RadioChannelAvailable(); // woof, just call and do nothing =P they manipulate gNumRetunePresses on DisplayRadioStationName in this case
|
||||||
gNumRetunePresses = 0;
|
gNumRetunePresses = 0;
|
||||||
}
|
}
|
||||||
return veh->m_nRadioStation;
|
return veh->m_nRadioStation;
|
||||||
@ -1129,7 +1183,7 @@ cMusicManager::GetTrackStartPos(uint32 track)
|
|||||||
uint32
|
uint32
|
||||||
cMusicManager::GetRadioPosition(uint32 station)
|
cMusicManager::GetRadioPosition(uint32 station)
|
||||||
{
|
{
|
||||||
if (station < STREAMED_SOUND_CITY_AMBIENT)
|
if (station < NUM_RADIOS)
|
||||||
return GetTrackStartPos(station);
|
return GetTrackStartPos(station);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1158,7 +1212,7 @@ cMusicManager::SetMalibuClubTrackPos(uint8 scriptObject)
|
|||||||
{
|
{
|
||||||
if (!IsInitialised())
|
if (!IsInitialised())
|
||||||
m_aTracks[STREAMED_SOUND_MALIBU_AMBIENT].m_nPosition = 8640;
|
m_aTracks[STREAMED_SOUND_MALIBU_AMBIENT].m_nPosition = 8640;
|
||||||
if (m_nStreamedTrack != STREAMED_SOUND_MALIBU_AMBIENT && m_nPlayingTrack != STREAMED_SOUND_MALIBU_AMBIENT) {
|
if (m_nNextTrack != STREAMED_SOUND_MALIBU_AMBIENT && m_nPlayingTrack != STREAMED_SOUND_MALIBU_AMBIENT) {
|
||||||
switch (scriptObject)
|
switch (scriptObject)
|
||||||
{
|
{
|
||||||
case SCRIPT_SOUND_NEW_BUILDING_MALIBU_1:
|
case SCRIPT_SOUND_NEW_BUILDING_MALIBU_1:
|
||||||
@ -1180,7 +1234,7 @@ cMusicManager::SetStripClubTrackPos(uint8 scriptObject)
|
|||||||
{
|
{
|
||||||
if (!IsInitialised())
|
if (!IsInitialised())
|
||||||
m_aTracks[STREAMED_SOUND_STRIPCLUB_AMBIENT].m_nPosition = 0;
|
m_aTracks[STREAMED_SOUND_STRIPCLUB_AMBIENT].m_nPosition = 0;
|
||||||
if (m_nStreamedTrack != STREAMED_SOUND_STRIPCLUB_AMBIENT && m_nPlayingTrack != STREAMED_SOUND_STRIPCLUB_AMBIENT)
|
if (m_nNextTrack != STREAMED_SOUND_STRIPCLUB_AMBIENT && m_nPlayingTrack != STREAMED_SOUND_STRIPCLUB_AMBIENT)
|
||||||
{
|
{
|
||||||
switch (scriptObject)
|
switch (scriptObject)
|
||||||
{
|
{
|
||||||
@ -1201,7 +1255,7 @@ cMusicManager::SetStripClubTrackPos(uint8 scriptObject)
|
|||||||
void
|
void
|
||||||
cMusicManager::DisplayRadioStationName()
|
cMusicManager::DisplayRadioStationName()
|
||||||
{
|
{
|
||||||
int8 gStreamedSound;
|
uint8 gStreamedSound;
|
||||||
static wchar *pCurrentStation = nil;
|
static wchar *pCurrentStation = nil;
|
||||||
static uint8 cDisplay = 0;
|
static uint8 cDisplay = 0;
|
||||||
|
|
||||||
@ -1211,23 +1265,28 @@ cMusicManager::DisplayRadioStationName()
|
|||||||
|
|
||||||
if (vehicle)
|
if (vehicle)
|
||||||
{
|
{
|
||||||
|
#if defined RADIO_SCROLL_TO_PREV_STATION || defined FIX_BUGS // Because m_nFrontendTrack can have NO_TRACK
|
||||||
|
int track;
|
||||||
|
#else
|
||||||
uint8 track;
|
uint8 track;
|
||||||
|
#endif
|
||||||
gStreamedSound = vehicle->m_nRadioStation;
|
gStreamedSound = vehicle->m_nRadioStation;
|
||||||
if (gStreamedSound >= STREAMED_SOUND_CITY_AMBIENT && gStreamedSound <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
if (gStreamedSound >= STREAMED_SOUND_CITY_AMBIENT && gStreamedSound <= STREAMED_SOUND_AMBSIL_AMBIENT)
|
||||||
gStreamedSound = STREAMED_SOUND_CITY_AMBIENT;
|
gStreamedSound = RADIO_OFF;
|
||||||
if (gNumRetunePresses != 0)
|
if (gNumRetunePresses != 0)
|
||||||
{
|
{
|
||||||
track = gNumRetunePresses + gStreamedSound;
|
track = gNumRetunePresses + gStreamedSound;
|
||||||
while (track >= RADIO_OFF) track -= RADIO_OFF;
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
while (track < 0) track += NUM_RADIOS + 1;
|
||||||
|
#endif
|
||||||
|
while (track >= NUM_RADIOS + 1) track -= NUM_RADIOS + 1;
|
||||||
|
|
||||||
|
// We already handle this condition while scrolling back, on key press. No need to change this.
|
||||||
if (!DMAudio.IsMP3RadioChannelAvailable() && track == USERTRACK)
|
if (!DMAudio.IsMP3RadioChannelAvailable() && track == USERTRACK)
|
||||||
gNumRetunePresses++;
|
gNumRetunePresses++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#ifdef FIX_BUGS
|
|
||||||
track = m_nFrontendTrack == NO_TRACK ? POLICE_RADIO : m_nFrontendTrack;
|
|
||||||
#else
|
|
||||||
track = m_nFrontendTrack;
|
track = m_nFrontendTrack;
|
||||||
#endif
|
|
||||||
|
|
||||||
wchar* string = nil;
|
wchar* string = nil;
|
||||||
switch (track) {
|
switch (track) {
|
||||||
@ -1244,7 +1303,23 @@ cMusicManager::DisplayRadioStationName()
|
|||||||
if (!SampleManager.IsMP3RadioChannelAvailable())
|
if (!SampleManager.IsMP3RadioChannelAvailable())
|
||||||
return;
|
return;
|
||||||
string = TheText.Get("FEA_MP3"); break;
|
string = TheText.Get("FEA_MP3"); break;
|
||||||
|
#ifdef RADIO_OFF_TEXT
|
||||||
|
case STREAMED_SOUND_RADIO_POLICE:
|
||||||
|
case STREAMED_SOUND_RADIO_TAXI:
|
||||||
|
return;
|
||||||
|
default: {
|
||||||
|
extern wchar WideErrorString[];
|
||||||
|
|
||||||
|
string = TheText.Get("FEA_NON");
|
||||||
|
if (string == WideErrorString) {
|
||||||
|
pCurrentStation = nil;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
default: return;
|
default: return;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
if (pCurrentStation != string) {
|
if (pCurrentStation != string) {
|
||||||
@ -1275,6 +1350,11 @@ cMusicManager::DisplayRadioStationName()
|
|||||||
CFont::DrawFonts();
|
CFont::DrawFonts();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Always show station text after entering car. Same behaviour as III and SA.
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
else
|
||||||
|
pCurrentStation = nil;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -18,7 +18,7 @@ class cMusicManager
|
|||||||
public:
|
public:
|
||||||
bool m_bIsInitialised;
|
bool m_bIsInitialised;
|
||||||
bool m_bDisabled;
|
bool m_bDisabled;
|
||||||
bool field_2;
|
bool m_bSetNextStation;
|
||||||
uint8 m_nVolumeLatency;
|
uint8 m_nVolumeLatency;
|
||||||
uint8 m_nCurrentVolume;
|
uint8 m_nCurrentVolume;
|
||||||
uint8 m_nMaxVolume;
|
uint8 m_nMaxVolume;
|
||||||
@ -28,25 +28,25 @@ public:
|
|||||||
bool m_bResetTimers;
|
bool m_bResetTimers;
|
||||||
uint32 m_nResetTime;
|
uint32 m_nResetTime;
|
||||||
bool m_bRadioSetByScript;
|
bool m_bRadioSetByScript;
|
||||||
uint8 m_nRadioStation;
|
uint8 m_nRadioStationScript;
|
||||||
int32 m_nRadioPosition;
|
int32 m_nRadioPosition;
|
||||||
uint32 m_nRadioInCar;
|
uint32 m_nRadioInCar;
|
||||||
uint32 m_nFrontendTrack;
|
uint32 m_nFrontendTrack;
|
||||||
uint32 m_nPlayingTrack;
|
uint32 m_nPlayingTrack;
|
||||||
uint8 m_nUpcomingMusicMode;
|
uint8 m_nUpcomingMusicMode;
|
||||||
uint8 m_nMusicMode;
|
uint8 m_nMusicMode;
|
||||||
bool field_398E;
|
bool m_FrontendLoopFlag;
|
||||||
bool field_398F;
|
bool m_bTrackChangeStarted;
|
||||||
uint32 m_nStreamedTrack;
|
uint32 m_nNextTrack;
|
||||||
bool field_3994;
|
bool m_nNextLoopFlag;
|
||||||
bool field_3995;
|
bool m_bVerifyNextTrackStartedToPlay;
|
||||||
bool field_3996;
|
bool m_bGameplayAllowsRadio;
|
||||||
bool field_3997;
|
bool m_bRadioStreamReady;
|
||||||
int8 nFramesSinceCutsceneEnded;
|
int8 nFramesSinceCutsceneEnded;
|
||||||
bool field_3999;
|
bool m_bUserResumedGame;
|
||||||
bool field_399A;
|
bool m_bMusicModeChangeStarted;
|
||||||
uint8 m_nMusicModeToBeSet;
|
uint8 m_nMusicModeToBeSet;
|
||||||
bool field_399C;
|
bool m_bEarlyFrontendTrack;
|
||||||
float aListenTimeArray[NUM_RADIOS];
|
float aListenTimeArray[NUM_RADIOS];
|
||||||
float m_nLastTrackServiceTime;
|
float m_nLastTrackServiceTime;
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ enum eRadioStation
|
|||||||
USERTRACK,
|
USERTRACK,
|
||||||
NUM_RADIOS = 10,
|
NUM_RADIOS = 10,
|
||||||
POLICE_RADIO = 10,
|
POLICE_RADIO = 10,
|
||||||
|
RADIO_OFF = 10,
|
||||||
//TAXI_RADIO,
|
//TAXI_RADIO,
|
||||||
RADIO_OFF,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eMusicMode
|
enum eMusicMode
|
||||||
|
@ -15,6 +15,8 @@ ALuint alFilters[MAXCHANNELS+MAX2DCHANNELS];
|
|||||||
ALuint alBuffers[MAXCHANNELS+MAX2DCHANNELS];
|
ALuint alBuffers[MAXCHANNELS+MAX2DCHANNELS];
|
||||||
bool bChannelsCreated = false;
|
bool bChannelsCreated = false;
|
||||||
|
|
||||||
|
int32 CChannel::channelsThatNeedService = 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
CChannel::InitChannels()
|
CChannel::InitChannels()
|
||||||
{
|
{
|
||||||
@ -59,7 +61,9 @@ void CChannel::SetDefault()
|
|||||||
|
|
||||||
Position[0] = 0.0f; Position[1] = 0.0f; Position[2] = 0.0f;
|
Position[0] = 0.0f; Position[1] = 0.0f; Position[2] = 0.0f;
|
||||||
Distances[0] = 0.0f; Distances[1] = FLT_MAX;
|
Distances[0] = 0.0f; Distances[1] = FLT_MAX;
|
||||||
LoopCount = 1;
|
|
||||||
|
LoopCount = 1;
|
||||||
|
LastProcessedOffset = UINT32_MAX;
|
||||||
LoopPoints[0] = 0; LoopPoints[1] = -1;
|
LoopPoints[0] = 0; LoopPoints[1] = -1;
|
||||||
|
|
||||||
Frequency = MAX_FREQ;
|
Frequency = MAX_FREQ;
|
||||||
@ -67,6 +71,10 @@ void CChannel::SetDefault()
|
|||||||
|
|
||||||
void CChannel::Reset()
|
void CChannel::Reset()
|
||||||
{
|
{
|
||||||
|
// Here is safe because ctor don't call this
|
||||||
|
if (LoopCount > 1)
|
||||||
|
channelsThatNeedService--;
|
||||||
|
|
||||||
ClearBuffer();
|
ClearBuffer();
|
||||||
SetDefault();
|
SetDefault();
|
||||||
}
|
}
|
||||||
@ -174,10 +182,51 @@ void CChannel::SetCurrentFreq(uint32 freq)
|
|||||||
SetPitch(ALfloat(freq) / Frequency);
|
SetPitch(ALfloat(freq) / Frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChannel::SetLoopCount(int32 loopCount) // fake. TODO:
|
void CChannel::SetLoopCount(int32 count)
|
||||||
{
|
{
|
||||||
if ( !HasSource() ) return;
|
if ( !HasSource() ) return;
|
||||||
alSourcei(alSources[id], AL_LOOPING, loopCount == 1 ? AL_FALSE : AL_TRUE);
|
|
||||||
|
// 0: loop indefinitely, 1: play one time, 2: play two times etc...
|
||||||
|
// only > 1 needs manual processing
|
||||||
|
|
||||||
|
if (LoopCount > 1 && count < 2)
|
||||||
|
channelsThatNeedService--;
|
||||||
|
else if (LoopCount < 2 && count > 1)
|
||||||
|
channelsThatNeedService++;
|
||||||
|
|
||||||
|
alSourcei(alSources[id], AL_LOOPING, count == 1 ? AL_FALSE : AL_TRUE);
|
||||||
|
LoopCount = count;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CChannel::Update()
|
||||||
|
{
|
||||||
|
if (!HasSource()) return false;
|
||||||
|
if (LoopCount < 2) return false;
|
||||||
|
|
||||||
|
ALint state;
|
||||||
|
alGetSourcei(alSources[id], AL_SOURCE_STATE, &state);
|
||||||
|
if (state == AL_STOPPED) {
|
||||||
|
debug("Looping channels(%d in this case) shouldn't report AL_STOPPED, but nvm\n", id);
|
||||||
|
SetLoopCount(1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(channelsThatNeedService > 0 && "Ref counting is broken");
|
||||||
|
|
||||||
|
ALint offset;
|
||||||
|
alGetSourcei(alSources[id], AL_SAMPLE_OFFSET, &offset);
|
||||||
|
|
||||||
|
// Rewound
|
||||||
|
if (offset < LastProcessedOffset) {
|
||||||
|
LoopCount--;
|
||||||
|
if (LoopCount == 1) {
|
||||||
|
// Playing last tune...
|
||||||
|
channelsThatNeedService--;
|
||||||
|
alSourcei(alSources[id], AL_LOOPING, AL_FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
LastProcessedOffset = offset;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CChannel::SetLoopPoints(ALint start, ALint end)
|
void CChannel::SetLoopPoints(ALint start, ALint end)
|
||||||
@ -209,6 +258,7 @@ void CChannel::SetPan(int32 pan)
|
|||||||
void CChannel::ClearBuffer()
|
void CChannel::ClearBuffer()
|
||||||
{
|
{
|
||||||
if ( !HasSource() ) return;
|
if ( !HasSource() ) return;
|
||||||
|
alSourcei(alSources[id], AL_LOOPING, AL_FALSE);
|
||||||
alSourcei(alSources[id], AL_BUFFER, AL_NONE);
|
alSourcei(alSources[id], AL_BUFFER, AL_NONE);
|
||||||
|
|
||||||
#ifdef BIGENDIAN
|
#ifdef BIGENDIAN
|
||||||
|
@ -19,7 +19,10 @@ class CChannel
|
|||||||
float Distances[2];
|
float Distances[2];
|
||||||
int32 LoopCount;
|
int32 LoopCount;
|
||||||
ALint LoopPoints[2];
|
ALint LoopPoints[2];
|
||||||
|
ALint LastProcessedOffset;
|
||||||
public:
|
public:
|
||||||
|
static int32 channelsThatNeedService;
|
||||||
|
|
||||||
static void InitChannels();
|
static void InitChannels();
|
||||||
static void DestroyChannels();
|
static void DestroyChannels();
|
||||||
|
|
||||||
@ -37,7 +40,7 @@ public:
|
|||||||
void SetVolume(int32 vol);
|
void SetVolume(int32 vol);
|
||||||
void SetSampleData(void *_data, size_t _DataSize, int32 freq);
|
void SetSampleData(void *_data, size_t _DataSize, int32 freq);
|
||||||
void SetCurrentFreq(uint32 freq);
|
void SetCurrentFreq(uint32 freq);
|
||||||
void SetLoopCount(int32 loopCount); // fake
|
void SetLoopCount(int32 count);
|
||||||
void SetLoopPoints(ALint start, ALint end);
|
void SetLoopPoints(ALint start, ALint end);
|
||||||
void SetPosition(float x, float y, float z);
|
void SetPosition(float x, float y, float z);
|
||||||
void SetDistances(float max, float min);
|
void SetDistances(float max, float min);
|
||||||
@ -45,6 +48,7 @@ public:
|
|||||||
void ClearBuffer();
|
void ClearBuffer();
|
||||||
void SetReverbMix(ALuint slot, float mix);
|
void SetReverbMix(ALuint slot, float mix);
|
||||||
void UpdateReverb(ALuint slot);
|
void UpdateReverb(ALuint slot);
|
||||||
|
bool Update();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -643,7 +643,7 @@ public:
|
|||||||
|
|
||||||
#ifdef AUDIO_OAL_USE_MPG123
|
#ifdef AUDIO_OAL_USE_MPG123
|
||||||
// fuzzy seek eliminates stutter when playing ADF but spams errors a lot (nothing breaks though)
|
// fuzzy seek eliminates stutter when playing ADF but spams errors a lot (nothing breaks though)
|
||||||
#define MP3_USE_FUZZY_SEEK
|
//#define MP3_USE_FUZZY_SEEK
|
||||||
static ssize_t mpg123_read_replacement(void* handle, void* data, size_t size)
|
static ssize_t mpg123_read_replacement(void* handle, void* data, size_t size)
|
||||||
{
|
{
|
||||||
return fread(data, 1, size, (FILE*)handle);
|
return fread(data, 1, size, (FILE*)handle);
|
||||||
@ -686,6 +686,8 @@ public:
|
|||||||
{
|
{
|
||||||
#ifdef MP3_USE_FUZZY_SEEK
|
#ifdef MP3_USE_FUZZY_SEEK
|
||||||
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS | MPG123_QUIET, 0.0);
|
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS | MPG123_QUIET, 0.0);
|
||||||
|
#else
|
||||||
|
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_SEEKBUFFER | MPG123_GAPLESS, 0.0);
|
||||||
#endif
|
#endif
|
||||||
long rate = 0;
|
long rate = 0;
|
||||||
int channels = 0;
|
int channels = 0;
|
||||||
@ -704,6 +706,7 @@ public:
|
|||||||
m_bOpened = mpg123_replace_reader_handle(m_pMH, mpg123_read_replacement, mpg123_seek_replacement, NULL) == MPG123_OK
|
m_bOpened = mpg123_replace_reader_handle(m_pMH, mpg123_read_replacement, mpg123_seek_replacement, NULL) == MPG123_OK
|
||||||
&& mpg123_open_handle(m_pMH, m_fileHandle) == MPG123_OK
|
&& mpg123_open_handle(m_pMH, m_fileHandle) == MPG123_OK
|
||||||
&& mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK;
|
&& mpg123_getformat(m_pMH, &rate, &channels, &encoding) == MPG123_OK;
|
||||||
|
|
||||||
m_nRate = rate;
|
m_nRate = rate;
|
||||||
m_nChannels = channels;
|
m_nChannels = channels;
|
||||||
|
|
||||||
@ -810,6 +813,8 @@ public:
|
|||||||
{
|
{
|
||||||
#ifdef MP3_USE_FUZZY_SEEK
|
#ifdef MP3_USE_FUZZY_SEEK
|
||||||
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS | MPG123_QUIET, 0.0);
|
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_FUZZY | MPG123_SEEKBUFFER | MPG123_GAPLESS | MPG123_QUIET, 0.0);
|
||||||
|
#else
|
||||||
|
mpg123_param(m_pMH, MPG123_FLAGS, MPG123_SEEKBUFFER | MPG123_GAPLESS, 0.0);
|
||||||
#endif
|
#endif
|
||||||
long rate = 0;
|
long rate = 0;
|
||||||
int channels = 0;
|
int channels = 0;
|
||||||
@ -1203,7 +1208,8 @@ CStream::CStream(char *filename, ALuint *sources, ALuint (&buffers)[NUM_STREAMBU
|
|||||||
m_bReset(false),
|
m_bReset(false),
|
||||||
m_nVolume(0),
|
m_nVolume(0),
|
||||||
m_nPan(0),
|
m_nPan(0),
|
||||||
m_nPosBeforeReset(0)
|
m_nPosBeforeReset(0),
|
||||||
|
m_nLoopCount(1)
|
||||||
|
|
||||||
{
|
{
|
||||||
// Be case-insensitive on linux (from https://github.com/OneSadCookie/fcaseopen/)
|
// Be case-insensitive on linux (from https://github.com/OneSadCookie/fcaseopen/)
|
||||||
@ -1303,7 +1309,7 @@ bool CStream::IsPlaying()
|
|||||||
ALint sourceState[2];
|
ALint sourceState[2];
|
||||||
alGetSourcei(m_pAlSources[0], AL_SOURCE_STATE, &sourceState[0]);
|
alGetSourcei(m_pAlSources[0], AL_SOURCE_STATE, &sourceState[0]);
|
||||||
alGetSourcei(m_pAlSources[1], AL_SOURCE_STATE, &sourceState[1]);
|
alGetSourcei(m_pAlSources[1], AL_SOURCE_STATE, &sourceState[1]);
|
||||||
if ( m_bActive || sourceState[0] == AL_PLAYING || sourceState[1] == AL_PLAYING)
|
if (sourceState[0] == AL_PLAYING || sourceState[1] == AL_PLAYING)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1375,6 +1381,7 @@ void CStream::SetPan(uint8 nPan)
|
|||||||
m_nPan = nPan;
|
m_nPan = nPan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Should only be called if source is stopped
|
||||||
void CStream::SetPosMS(uint32 nPos)
|
void CStream::SetPosMS(uint32 nPos)
|
||||||
{
|
{
|
||||||
if ( !IsOpened() ) return;
|
if ( !IsOpened() ) return;
|
||||||
@ -1457,10 +1464,16 @@ void CStream::ClearBuffers()
|
|||||||
alSourceUnqueueBuffers(m_pAlSources[1], 1, &value);
|
alSourceUnqueueBuffers(m_pAlSources[1], 1, &value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CStream::Setup()
|
bool CStream::Setup(bool imSureQueueIsEmpty)
|
||||||
{
|
{
|
||||||
if ( IsOpened() )
|
if ( IsOpened() )
|
||||||
{
|
{
|
||||||
|
alSourcei(m_pAlSources[0], AL_LOOPING, AL_FALSE);
|
||||||
|
alSourcei(m_pAlSources[1], AL_LOOPING, AL_FALSE);
|
||||||
|
if (!imSureQueueIsEmpty) {
|
||||||
|
SetPlay(false);
|
||||||
|
ClearBuffers();
|
||||||
|
}
|
||||||
m_pSoundFile->Seek(0);
|
m_pSoundFile->Seek(0);
|
||||||
//SetPosition(0.0f, 0.0f, 0.0f);
|
//SetPosition(0.0f, 0.0f, 0.0f);
|
||||||
SetPitch(1.0f);
|
SetPitch(1.0f);
|
||||||
@ -1471,6 +1484,13 @@ bool CStream::Setup()
|
|||||||
return IsOpened();
|
return IsOpened();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CStream::SetLoopCount(int32 count)
|
||||||
|
{
|
||||||
|
if ( !HasSource() ) return;
|
||||||
|
|
||||||
|
m_nLoopCount = count;
|
||||||
|
}
|
||||||
|
|
||||||
void CStream::SetPlay(bool state)
|
void CStream::SetPlay(bool state)
|
||||||
{
|
{
|
||||||
if ( !HasSource() ) return;
|
if ( !HasSource() ) return;
|
||||||
@ -1530,7 +1550,7 @@ void CStream::Update()
|
|||||||
|
|
||||||
if ( !m_bPaused )
|
if ( !m_bPaused )
|
||||||
{
|
{
|
||||||
ALint sourceState[2];
|
ALint totalBuffers[2] = { 0, 0 };
|
||||||
ALint buffersProcessed[2] = { 0, 0 };
|
ALint buffersProcessed[2] = { 0, 0 };
|
||||||
|
|
||||||
// Relying a lot on left buffer states in here
|
// Relying a lot on left buffer states in here
|
||||||
@ -1538,44 +1558,51 @@ void CStream::Update()
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
//alSourcef(m_pAlSources[0], AL_ROLLOFF_FACTOR, 0.0f);
|
//alSourcef(m_pAlSources[0], AL_ROLLOFF_FACTOR, 0.0f);
|
||||||
alGetSourcei(m_pAlSources[0], AL_SOURCE_STATE, &sourceState[0]);
|
alGetSourcei(m_pAlSources[0], AL_BUFFERS_QUEUED, &totalBuffers[0]);
|
||||||
alGetSourcei(m_pAlSources[0], AL_BUFFERS_PROCESSED, &buffersProcessed[0]);
|
alGetSourcei(m_pAlSources[0], AL_BUFFERS_PROCESSED, &buffersProcessed[0]);
|
||||||
//alSourcef(m_pAlSources[1], AL_ROLLOFF_FACTOR, 0.0f);
|
//alSourcef(m_pAlSources[1], AL_ROLLOFF_FACTOR, 0.0f);
|
||||||
alGetSourcei(m_pAlSources[1], AL_SOURCE_STATE, &sourceState[1]);
|
alGetSourcei(m_pAlSources[1], AL_BUFFERS_QUEUED, &totalBuffers[1]);
|
||||||
alGetSourcei(m_pAlSources[1], AL_BUFFERS_PROCESSED, &buffersProcessed[1]);
|
alGetSourcei(m_pAlSources[1], AL_BUFFERS_PROCESSED, &buffersProcessed[1]);
|
||||||
} while (buffersProcessed[0] != buffersProcessed[1]);
|
} while (buffersProcessed[0] != buffersProcessed[1]);
|
||||||
|
|
||||||
ALint looping = AL_FALSE;
|
|
||||||
alGetSourcei(m_pAlSources[0], AL_LOOPING, &looping);
|
|
||||||
|
|
||||||
if ( looping == AL_TRUE )
|
|
||||||
{
|
|
||||||
TRACE("stream set looping");
|
|
||||||
alSourcei(m_pAlSources[0], AL_LOOPING, AL_TRUE);
|
|
||||||
alSourcei(m_pAlSources[1], AL_LOOPING, AL_TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(buffersProcessed[0] == buffersProcessed[1]);
|
assert(buffersProcessed[0] == buffersProcessed[1]);
|
||||||
|
|
||||||
while( buffersProcessed[0]-- )
|
// Correcting OpenAL concepts here:
|
||||||
|
// AL_BUFFERS_QUEUED = Number of *all* buffers in queue, including processed, processing and pending
|
||||||
|
// AL_BUFFERS_PROCESSED = Index of the buffer being processing right now. Buffers coming after that(have greater index) are pending buffers.
|
||||||
|
// which means: totalBuffers[0] - buffersProcessed[0] = pending buffers
|
||||||
|
|
||||||
|
bool buffersRefilled = false;
|
||||||
|
|
||||||
|
// We should wait queue to be cleared to loop track, because position calculation relies on queue.
|
||||||
|
if (m_nLoopCount != 1 && m_bActive && totalBuffers[0] == 0)
|
||||||
{
|
{
|
||||||
ALuint buffer[2];
|
Setup(true);
|
||||||
|
buffersRefilled = FillBuffers() != 0;
|
||||||
alSourceUnqueueBuffers(m_pAlSources[0], 1, &buffer[0]);
|
if (m_nLoopCount != 0)
|
||||||
alSourceUnqueueBuffers(m_pAlSources[1], 1, &buffer[1]);
|
m_nLoopCount--;
|
||||||
|
}
|
||||||
if (m_bActive && FillBuffer(buffer))
|
else
|
||||||
|
{
|
||||||
|
while( buffersProcessed[0]-- )
|
||||||
{
|
{
|
||||||
alSourceQueueBuffers(m_pAlSources[0], 1, &buffer[0]);
|
ALuint buffer[2];
|
||||||
alSourceQueueBuffers(m_pAlSources[1], 1, &buffer[1]);
|
|
||||||
|
alSourceUnqueueBuffers(m_pAlSources[0], 1, &buffer[0]);
|
||||||
|
alSourceUnqueueBuffers(m_pAlSources[1], 1, &buffer[1]);
|
||||||
|
|
||||||
|
if (m_bActive && FillBuffer(buffer))
|
||||||
|
{
|
||||||
|
buffersRefilled = true;
|
||||||
|
alSourceQueueBuffers(m_pAlSources[0], 1, &buffer[0]);
|
||||||
|
alSourceQueueBuffers(m_pAlSources[1], 1, &buffer[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( sourceState[0] != AL_PLAYING )
|
// Two reasons: 1-Source may be starved to audio and stopped itself, 2- We're already waiting it to starve and die for looping track!
|
||||||
{
|
if (m_bActive && (buffersRefilled || (totalBuffers[1] - buffersProcessed[1] != 0)))
|
||||||
alGetSourcei(m_pAlSources[0], AL_BUFFERS_PROCESSED, &buffersProcessed[0]);
|
SetPlay(true);
|
||||||
SetPlay(buffersProcessed[0]!=0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1583,10 +1610,11 @@ void CStream::ProviderInit()
|
|||||||
{
|
{
|
||||||
if ( m_bReset )
|
if ( m_bReset )
|
||||||
{
|
{
|
||||||
if ( Setup() )
|
if ( Setup(true) )
|
||||||
{
|
{
|
||||||
SetPan(m_nPan);
|
SetPan(m_nPan);
|
||||||
SetVolume(m_nVolume);
|
SetVolume(m_nVolume);
|
||||||
|
SetLoopCount(m_nLoopCount);
|
||||||
SetPosMS(m_nPosBeforeReset);
|
SetPosMS(m_nPosBeforeReset);
|
||||||
if (m_bActive)
|
if (m_bActive)
|
||||||
FillBuffers();
|
FillBuffers();
|
||||||
|
@ -69,6 +69,7 @@ class CStream
|
|||||||
uint32 m_nVolume;
|
uint32 m_nVolume;
|
||||||
uint8 m_nPan;
|
uint8 m_nPan;
|
||||||
uint32 m_nPosBeforeReset;
|
uint32 m_nPosBeforeReset;
|
||||||
|
int32 m_nLoopCount;
|
||||||
|
|
||||||
IDecoder *m_pSoundFile;
|
IDecoder *m_pSoundFile;
|
||||||
|
|
||||||
@ -99,10 +100,12 @@ public:
|
|||||||
uint32 GetPosMS();
|
uint32 GetPosMS();
|
||||||
uint32 GetLengthMS();
|
uint32 GetLengthMS();
|
||||||
|
|
||||||
bool Setup();
|
bool Setup(bool imSureQueueIsEmpty = false);
|
||||||
void Start();
|
void Start();
|
||||||
void Stop();
|
void Stop();
|
||||||
void Update(void);
|
void Update(void);
|
||||||
|
void SetLoopCount(int32);
|
||||||
|
|
||||||
|
|
||||||
void ProviderInit();
|
void ProviderInit();
|
||||||
void ProviderTerm();
|
void ProviderTerm();
|
||||||
|
@ -46,7 +46,6 @@
|
|||||||
|
|
||||||
//TODO: fix eax3 reverb
|
//TODO: fix eax3 reverb
|
||||||
//TODO: max channels
|
//TODO: max channels
|
||||||
//TODO: loop count
|
|
||||||
|
|
||||||
#ifdef __WIIU__
|
#ifdef __WIIU__
|
||||||
extern "C" char *_getcwd (char *__buf, size_t __size);
|
extern "C" char *_getcwd (char *__buf, size_t __size);
|
||||||
@ -1711,7 +1710,7 @@ cSampleManager::PreloadStreamedFile(uint32 nFile, uint8 nStream)
|
|||||||
ASSERT(stream != NULL);
|
ASSERT(stream != NULL);
|
||||||
|
|
||||||
aStream[nStream] = stream;
|
aStream[nStream] = stream;
|
||||||
if ( !stream->IsOpened() )
|
if ( !stream->Setup() )
|
||||||
{
|
{
|
||||||
delete stream;
|
delete stream;
|
||||||
aStream[nStream] = NULL;
|
aStream[nStream] = NULL;
|
||||||
@ -1741,7 +1740,7 @@ cSampleManager::StartPreloadedStreamedFile(uint8 nStream)
|
|||||||
|
|
||||||
if ( stream )
|
if ( stream )
|
||||||
{
|
{
|
||||||
if ( stream->Setup() )
|
if ( stream->IsOpened() )
|
||||||
{
|
{
|
||||||
stream->Start();
|
stream->Start();
|
||||||
}
|
}
|
||||||
@ -1787,13 +1786,13 @@ cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
|||||||
|
|
||||||
aStream[nStream] = stream;
|
aStream[nStream] = stream;
|
||||||
|
|
||||||
if (stream->IsOpened()) {
|
if (stream->Setup()) {
|
||||||
if (stream->Setup()) {
|
stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1);
|
||||||
if (position != 0)
|
nStreamLoopedFlag[nStream] = true;
|
||||||
stream->SetPosMS(position);
|
if (position != 0)
|
||||||
|
stream->SetPosMS(position);
|
||||||
|
|
||||||
stream->Start();
|
stream->Start();
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -1814,10 +1813,8 @@ cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
|||||||
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream], IsThisTrackAt16KHz(nFile) ? 16000 : 32000);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aStream[nStream]->IsOpened()) {
|
if (aStream[nStream]->Setup()) {
|
||||||
if (aStream[nStream]->Setup()) {
|
aStream[nStream]->Start();
|
||||||
aStream[nStream]->Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -1843,13 +1840,13 @@ cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
|||||||
|
|
||||||
aStream[nStream] = stream;
|
aStream[nStream] = stream;
|
||||||
|
|
||||||
if (stream->IsOpened()) {
|
if (stream->Setup()) {
|
||||||
if (stream->Setup()) {
|
stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1);
|
||||||
if (position != 0)
|
nStreamLoopedFlag[nStream] = true;
|
||||||
stream->SetPosMS(position);
|
if (position != 0)
|
||||||
|
stream->SetPosMS(position);
|
||||||
|
|
||||||
stream->Start();
|
stream->Start();
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -1870,13 +1867,11 @@ cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
|||||||
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream]);
|
aStream[nStream] = new CStream(filename, ALStreamSources[nStream], ALStreamBuffers[nStream]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aStream[nStream]->IsOpened()) {
|
if (aStream[nStream]->Setup()) {
|
||||||
if (aStream[nStream]->Setup()) {
|
if (position != 0)
|
||||||
if (position != 0)
|
aStream[nStream]->SetPosMS(position);
|
||||||
aStream[nStream]->SetPosMS(position);
|
|
||||||
|
|
||||||
aStream[nStream]->Start();
|
aStream[nStream]->Start();
|
||||||
}
|
|
||||||
|
|
||||||
_bIsMp3Active = true;
|
_bIsMp3Active = true;
|
||||||
return true;
|
return true;
|
||||||
@ -1900,13 +1895,13 @@ cSampleManager::StartStreamedFile(uint32 nFile, uint32 nPos, uint8 nStream)
|
|||||||
|
|
||||||
aStream[nStream] = stream;
|
aStream[nStream] = stream;
|
||||||
|
|
||||||
if ( stream->IsOpened() ) {
|
if ( stream->Setup() ) {
|
||||||
if ( stream->Setup() ) {
|
stream->SetLoopCount(nStreamLoopedFlag[nStream] ? 0 : 1);
|
||||||
if (position != 0)
|
nStreamLoopedFlag[nStream] = true;
|
||||||
stream->SetPosMS(position);
|
if (position != 0)
|
||||||
|
stream->SetPosMS(position);
|
||||||
|
|
||||||
stream->Start();
|
stream->Start();
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
@ -1929,6 +1924,9 @@ cSampleManager::StopStreamedFile(uint8 nStream)
|
|||||||
{
|
{
|
||||||
delete stream;
|
delete stream;
|
||||||
aStream[nStream] = NULL;
|
aStream[nStream] = NULL;
|
||||||
|
|
||||||
|
if ( nStream == 0 )
|
||||||
|
_bIsMp3Active = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1941,7 +1939,21 @@ cSampleManager::GetStreamedFilePosition(uint8 nStream)
|
|||||||
|
|
||||||
if ( stream )
|
if ( stream )
|
||||||
{
|
{
|
||||||
return stream->GetPosMS();
|
if ( _bIsMp3Active )
|
||||||
|
{
|
||||||
|
tMP3Entry *mp3 = _GetMP3EntryByIndex(_CurMP3Index);
|
||||||
|
|
||||||
|
if ( mp3 != NULL )
|
||||||
|
{
|
||||||
|
return stream->GetPosMS() + mp3->nTrackStreamPos;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return stream->GetPosMS();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -2017,6 +2029,12 @@ cSampleManager::Service(void)
|
|||||||
if ( stream )
|
if ( stream )
|
||||||
stream->Update();
|
stream->Update();
|
||||||
}
|
}
|
||||||
|
int refCount = CChannel::channelsThatNeedService;
|
||||||
|
for ( int32 i = 0; refCount && i < MAXCHANNELS+MAX2DCHANNELS; i++ )
|
||||||
|
{
|
||||||
|
if ( aChannel[i].Update() )
|
||||||
|
refCount--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -171,22 +171,22 @@ enum eSound
|
|||||||
SOUND_CAR_PED_COLLISION,
|
SOUND_CAR_PED_COLLISION,
|
||||||
SOUND_CLOCK_TICK,
|
SOUND_CLOCK_TICK,
|
||||||
SOUND_PART_MISSION_COMPLETE,
|
SOUND_PART_MISSION_COMPLETE,
|
||||||
SOUND_FRONTEND_MENU_STARTING, // same with SOUND_HUD_SOUND
|
SOUND_FRONTEND_MENU_STARTING, // same sound as SOUND_HUD
|
||||||
|
|
||||||
// TODO(Miami): What are 170-175??
|
// TODO(Miami): What are 170-175??
|
||||||
|
|
||||||
SOUND_FRONTEND_NO_RADIO = 176, // those 3 are all same sound
|
SOUND_FRONTEND_RADIO_TURN_OFF = 176, // those 2 are same sound
|
||||||
SOUND_FRONTEND_RADIO_CHANGE,
|
SOUND_FRONTEND_RADIO_TURN_ON,
|
||||||
SOUND_FRONTEND_RADIO_CHANGE_2,
|
SOUND_FRONTEND_HURRICANE, // yes, frontend
|
||||||
SOUND_HUD_SOUND,
|
SOUND_HUD,
|
||||||
SOUND_180,
|
SOUND_180,
|
||||||
SOUND_181,
|
SOUND_181,
|
||||||
SOUND_182,
|
SOUND_182,
|
||||||
SOUND_LIGHTNING,
|
SOUND_LIGHTNING,
|
||||||
SOUND_BULLETTRACE_1,
|
SOUND_BULLETTRACE_1,
|
||||||
SOUND_BULLETTRACE_2,
|
SOUND_BULLETTRACE_2,
|
||||||
SOUND_186, // makes same sound with 40
|
SOUND_186, // makes same sound as 40
|
||||||
SOUND_187, // makes same sound with 46
|
SOUND_187, // makes same sound as 46
|
||||||
SOUND_MELEE_ATTACK_START,
|
SOUND_MELEE_ATTACK_START,
|
||||||
SOUND_SKATING,
|
SOUND_SKATING,
|
||||||
SOUND_WEAPON_MINIGUN_ATTACK,
|
SOUND_WEAPON_MINIGUN_ATTACK,
|
||||||
|
@ -52,8 +52,8 @@ void CAutoPilot::Save(uint8*& buf)
|
|||||||
WriteSaveBuf<int32>(buf, m_nCurrentRouteNode);
|
WriteSaveBuf<int32>(buf, m_nCurrentRouteNode);
|
||||||
WriteSaveBuf<int32>(buf, m_nNextRouteNode);
|
WriteSaveBuf<int32>(buf, m_nNextRouteNode);
|
||||||
WriteSaveBuf<int32>(buf, m_nPrevRouteNode);
|
WriteSaveBuf<int32>(buf, m_nPrevRouteNode);
|
||||||
WriteSaveBuf<uint32>(buf, m_nTimeEnteredCurve);
|
WriteSaveBuf<int32>(buf, m_nTimeEnteredCurve);
|
||||||
WriteSaveBuf<uint32>(buf, m_nTimeToSpendOnCurrentCurve);
|
WriteSaveBuf<int32>(buf, m_nTimeToSpendOnCurrentCurve);
|
||||||
WriteSaveBuf<uint32>(buf, m_nCurrentPathNodeInfo);
|
WriteSaveBuf<uint32>(buf, m_nCurrentPathNodeInfo);
|
||||||
WriteSaveBuf<uint32>(buf, m_nNextPathNodeInfo);
|
WriteSaveBuf<uint32>(buf, m_nNextPathNodeInfo);
|
||||||
WriteSaveBuf<uint32>(buf, m_nPreviousPathNodeInfo);
|
WriteSaveBuf<uint32>(buf, m_nPreviousPathNodeInfo);
|
||||||
@ -95,8 +95,8 @@ void CAutoPilot::Load(uint8*& buf)
|
|||||||
m_nCurrentRouteNode = ReadSaveBuf<int32>(buf);
|
m_nCurrentRouteNode = ReadSaveBuf<int32>(buf);
|
||||||
m_nNextRouteNode = ReadSaveBuf<int32>(buf);
|
m_nNextRouteNode = ReadSaveBuf<int32>(buf);
|
||||||
m_nPrevRouteNode = ReadSaveBuf<int32>(buf);
|
m_nPrevRouteNode = ReadSaveBuf<int32>(buf);
|
||||||
m_nTimeEnteredCurve = ReadSaveBuf<uint32>(buf);
|
m_nTimeEnteredCurve = ReadSaveBuf<int32>(buf);
|
||||||
m_nTimeToSpendOnCurrentCurve = ReadSaveBuf<uint32>(buf);
|
m_nTimeToSpendOnCurrentCurve = ReadSaveBuf<int32>(buf);
|
||||||
m_nCurrentPathNodeInfo = ReadSaveBuf<uint32>(buf);
|
m_nCurrentPathNodeInfo = ReadSaveBuf<uint32>(buf);
|
||||||
m_nNextPathNodeInfo = ReadSaveBuf<uint32>(buf);
|
m_nNextPathNodeInfo = ReadSaveBuf<uint32>(buf);
|
||||||
m_nPreviousPathNodeInfo = ReadSaveBuf<uint32>(buf);
|
m_nPreviousPathNodeInfo = ReadSaveBuf<uint32>(buf);
|
||||||
|
@ -64,8 +64,8 @@ public:
|
|||||||
int32 m_nCurrentRouteNode;
|
int32 m_nCurrentRouteNode;
|
||||||
int32 m_nNextRouteNode;
|
int32 m_nNextRouteNode;
|
||||||
int32 m_nPrevRouteNode;
|
int32 m_nPrevRouteNode;
|
||||||
uint32 m_nTimeEnteredCurve;
|
int32 m_nTimeEnteredCurve;
|
||||||
uint32 m_nTimeToSpendOnCurrentCurve;
|
int32 m_nTimeToSpendOnCurrentCurve;
|
||||||
uint32 m_nCurrentPathNodeInfo;
|
uint32 m_nCurrentPathNodeInfo;
|
||||||
uint32 m_nNextPathNodeInfo;
|
uint32 m_nNextPathNodeInfo;
|
||||||
uint32 m_nPreviousPathNodeInfo;
|
uint32 m_nPreviousPathNodeInfo;
|
||||||
|
@ -2757,7 +2757,7 @@ void CCarCtrl::SteerAIPlaneTowardsTargetCoors(CAutomobile* pPlane)
|
|||||||
up.Normalise();
|
up.Normalise();
|
||||||
CVector forward(Cos(pPlane->m_fOrientation), Sin(pPlane->m_fOrientation), fForwardZ);
|
CVector forward(Cos(pPlane->m_fOrientation), Sin(pPlane->m_fOrientation), fForwardZ);
|
||||||
forward.Normalise();
|
forward.Normalise();
|
||||||
CVector right = CrossProduct(forward, up);
|
CVector right = CrossProduct(up, forward);
|
||||||
right.z -= 5.0f * pPlane->m_fPlaneSteer;
|
right.z -= 5.0f * pPlane->m_fPlaneSteer;
|
||||||
right.Normalise();
|
right.Normalise();
|
||||||
up = CrossProduct(forward, right);
|
up = CrossProduct(forward, right);
|
||||||
|
@ -48,9 +48,9 @@ CPhoneInfo::Update(void)
|
|||||||
TheCamera.SetWideScreenOff();
|
TheCamera.SetWideScreenOff();
|
||||||
pPhoneDisplayingMessages = nil;
|
pPhoneDisplayingMessages = nil;
|
||||||
bDisplayingPhoneMessage = false;
|
bDisplayingPhoneMessage = false;
|
||||||
CAnimBlendAssociation *talkAssoc = RpAnimBlendClumpGetAssociation(player->GetClump(), ANIM_PHONE_TALK);
|
CAnimBlendAssociation *talkAssoc = RpAnimBlendClumpGetAssociation(player->GetClump(), ANIM_STD_PHONE_TALK);
|
||||||
if (talkAssoc && talkAssoc->blendAmount > 0.5f) {
|
if (talkAssoc && talkAssoc->blendAmount > 0.5f) {
|
||||||
CAnimBlendAssociation *endAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_PHONE_OUT, 8.0f);
|
CAnimBlendAssociation *endAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_OUT, 8.0f);
|
||||||
endAssoc->flags &= ~ASSOC_DELETEFADEDOUT;
|
endAssoc->flags &= ~ASSOC_DELETEFADEDOUT;
|
||||||
endAssoc->SetFinishCallback(PhonePutDownCB, player);
|
endAssoc->SetFinishCallback(PhonePutDownCB, player);
|
||||||
} else {
|
} else {
|
||||||
@ -107,7 +107,7 @@ CPhoneInfo::Update(void)
|
|||||||
CPad::GetPad(0)->SetDisablePlayerControls(PLAYERCONTROL_PHONE);
|
CPad::GetPad(0)->SetDisablePlayerControls(PLAYERCONTROL_PHONE);
|
||||||
TheCamera.SetWideScreenOn();
|
TheCamera.SetWideScreenOn();
|
||||||
playerInfo->MakePlayerSafe(true);
|
playerInfo->MakePlayerSafe(true);
|
||||||
CAnimBlendAssociation *phonePickAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_PHONE_IN, 4.0f);
|
CAnimBlendAssociation *phonePickAssoc = CAnimManager::BlendAnimation(player->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_IN, 4.0f);
|
||||||
phonePickAssoc->SetFinishCallback(PhonePickUpCB, &m_aPhones[phoneId]);
|
phonePickAssoc->SetFinishCallback(PhonePickUpCB, &m_aPhones[phoneId]);
|
||||||
bPickingUpPhone = true;
|
bPickingUpPhone = true;
|
||||||
pCallBackPed = player;
|
pCallBackPed = player;
|
||||||
@ -363,10 +363,10 @@ PhonePickUpCB(CAnimBlendAssociation *assoc, void *arg)
|
|||||||
|
|
||||||
CPed *ped = CPhoneInfo::pCallBackPed;
|
CPed *ped = CPhoneInfo::pCallBackPed;
|
||||||
ped->m_nMoveState = PEDMOVE_STILL;
|
ped->m_nMoveState = PEDMOVE_STILL;
|
||||||
CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_IDLE_STANCE, 8.0f);
|
CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_IDLE, 8.0f);
|
||||||
|
|
||||||
if (assoc->blendAmount > 0.5f && ped)
|
if (assoc->blendAmount > 0.5f && ped)
|
||||||
CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_PHONE_TALK, 8.0f);
|
CAnimManager::BlendAnimation(ped->GetClump(), ASSOCGRP_STD, ANIM_STD_PHONE_TALK, 8.0f);
|
||||||
|
|
||||||
CPhoneInfo::pCallBackPed = nil;
|
CPhoneInfo::pCallBackPed = nil;
|
||||||
}
|
}
|
||||||
|
@ -274,10 +274,11 @@ CPickup::CanBePickedUp(CPlayerPed *player, int playerId)
|
|||||||
{
|
{
|
||||||
assert(m_pObject != nil);
|
assert(m_pObject != nil);
|
||||||
bool cannotBePickedUp =
|
bool cannotBePickedUp =
|
||||||
(m_pObject->GetModelIndex() == MI_PICKUP_BODYARMOUR && player->m_fArmour > CWorld::Players[playerId].m_nMaxArmour - 0.5f)
|
(m_pObject->GetModelIndex() == MI_PICKUP_BODYARMOUR && player->m_fArmour > CWorld::Players[playerId].m_nMaxArmour - 0.2f)
|
||||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_HEALTH && player->m_fHealth > CWorld::Players[playerId].m_nMaxHealth - 0.5f)
|
|| (m_pObject->GetModelIndex() == MI_PICKUP_HEALTH && player->m_fHealth > CWorld::Players[playerId].m_nMaxHealth - 0.2f)
|
||||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_BRIBE && player->m_pWanted->GetWantedLevel() == 0)
|
|| (m_pObject->GetModelIndex() == MI_PICKUP_BRIBE && player->m_pWanted->GetWantedLevel() == 0)
|
||||||
|| (m_pObject->GetModelIndex() == MI_PICKUP_KILLFRENZY && (CTheScripts::IsPlayerOnAMission() || CDarkel::FrenzyOnGoing() || !CGame::nastyGame));
|
|| (m_pObject->GetModelIndex() == MI_PICKUP_KILLFRENZY && (CTheScripts::IsPlayerOnAMission() || CDarkel::FrenzyOnGoing() || !CGame::nastyGame))
|
||||||
|
|| (m_eType == PICKUP_ASSET_REVENUE && m_fRevenue < 10.0f);
|
||||||
return !cannotBePickedUp;
|
return !cannotBePickedUp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -521,7 +521,7 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState
|
|||||||
state->aFunctionCallbackID[i] = 0;
|
state->aFunctionCallbackID[i] = 0;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
state->aAnimId[i] = NUM_STD_ANIMS;
|
state->aAnimId[i] = ANIM_STD_NUM;
|
||||||
state->aCurTime[i] = 0;
|
state->aCurTime[i] = 0;
|
||||||
state->aSpeed[i] = 85;
|
state->aSpeed[i] = 85;
|
||||||
state->aFunctionCallbackID[i] = 0;
|
state->aFunctionCallbackID[i] = 0;
|
||||||
@ -548,7 +548,7 @@ void CReplay::StoreDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationState
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
state->aAnimId2[i] = NUM_STD_ANIMS;
|
state->aAnimId2[i] = ANIM_STD_NUM;
|
||||||
state->aCurTime2[i] = 0;
|
state->aCurTime2[i] = 0;
|
||||||
state->aSpeed2[i] = 85;
|
state->aSpeed2[i] = 85;
|
||||||
state->aFunctionCallbackID2[i] = 0;
|
state->aFunctionCallbackID2[i] = 0;
|
||||||
@ -611,13 +611,13 @@ bool HasAnimGroupLoaded(uint8 group)
|
|||||||
void CReplay::RetrievePedAnimation(CPed *ped, CStoredAnimationState *state)
|
void CReplay::RetrievePedAnimation(CPed *ped, CStoredAnimationState *state)
|
||||||
{
|
{
|
||||||
CAnimBlendAssociation* anim1;
|
CAnimBlendAssociation* anim1;
|
||||||
if (state->animId <= 3)
|
if (state->animId <= ANIM_STD_IDLE)
|
||||||
anim1 = CAnimManager::BlendAnimation(
|
anim1 = CAnimManager::BlendAnimation(
|
||||||
(RpClump*)ped->m_rwObject, ped->m_animGroup, (AnimationId)state->animId, 100.0f);
|
(RpClump*)ped->m_rwObject, ped->m_animGroup, (AnimationId)state->animId, 100.0f);
|
||||||
else if (HasAnimGroupLoaded(state->groupId))
|
else if (HasAnimGroupLoaded(state->groupId))
|
||||||
anim1 = CAnimManager::BlendAnimation((RpClump*)ped->m_rwObject, (AssocGroupId)state->groupId, (AnimationId)state->animId, 100.0f);
|
anim1 = CAnimManager::BlendAnimation((RpClump*)ped->m_rwObject, (AssocGroupId)state->groupId, (AnimationId)state->animId, 100.0f);
|
||||||
else
|
else
|
||||||
anim1 = CAnimManager::BlendAnimation((RpClump*)ped->m_rwObject, ASSOCGRP_STD, ANIM_WALK, 100.0f);
|
anim1 = CAnimManager::BlendAnimation((RpClump*)ped->m_rwObject, ASSOCGRP_STD, ANIM_STD_WALK, 100.0f);
|
||||||
|
|
||||||
anim1->SetCurrentTime(state->time * 4.0f / 255.0f);
|
anim1->SetCurrentTime(state->time * 4.0f / 255.0f);
|
||||||
anim1->speed = state->speed * 3.0f / 255.0f;
|
anim1->speed = state->speed * 3.0f / 255.0f;
|
||||||
@ -629,7 +629,7 @@ void CReplay::RetrievePedAnimation(CPed *ped, CStoredAnimationState *state)
|
|||||||
float blend = state->blendAmount * 2.0f / 255.0f;
|
float blend = state->blendAmount * 2.0f / 255.0f;
|
||||||
CAnimBlendAssociation* anim2 = CAnimManager::BlendAnimation(
|
CAnimBlendAssociation* anim2 = CAnimManager::BlendAnimation(
|
||||||
(RpClump*)ped->m_rwObject,
|
(RpClump*)ped->m_rwObject,
|
||||||
(state->secAnimId > 3) ? (AssocGroupId)state->secGroupId : ped->m_animGroup,
|
(state->secAnimId > ANIM_STD_IDLE) ? (AssocGroupId)state->secGroupId : ped->m_animGroup,
|
||||||
(AnimationId)state->secAnimId, 100.0f);
|
(AnimationId)state->secAnimId, 100.0f);
|
||||||
anim2->SetCurrentTime(time);
|
anim2->SetCurrentTime(time);
|
||||||
anim2->speed = speed;
|
anim2->speed = speed;
|
||||||
@ -641,7 +641,7 @@ void CReplay::RetrievePedAnimation(CPed *ped, CStoredAnimationState *state)
|
|||||||
float time = state->partAnimTime * 4.0f / 255.0f;
|
float time = state->partAnimTime * 4.0f / 255.0f;
|
||||||
float speed = state->partAnimSpeed * 3.0f / 255.0f;
|
float speed = state->partAnimSpeed * 3.0f / 255.0f;
|
||||||
float blend = state->partBlendAmount * 2.0f / 255.0f;
|
float blend = state->partBlendAmount * 2.0f / 255.0f;
|
||||||
if (blend > 0.0f && state->partAnimId != ANIM_IDLE_STANCE && HasAnimGroupLoaded(state->partGroupId)){
|
if (blend > 0.0f && state->partAnimId != ANIM_STD_IDLE && HasAnimGroupLoaded(state->partGroupId)){
|
||||||
CAnimBlendAssociation* anim3 = CAnimManager::BlendAnimation(
|
CAnimBlendAssociation* anim3 = CAnimManager::BlendAnimation(
|
||||||
(RpClump*)ped->m_rwObject, (AssocGroupId)state->partGroupId, (AnimationId)state->partAnimId, 1000.0f);
|
(RpClump*)ped->m_rwObject, (AssocGroupId)state->partGroupId, (AnimationId)state->partAnimId, 1000.0f);
|
||||||
anim3->SetCurrentTime(time);
|
anim3->SetCurrentTime(time);
|
||||||
@ -659,10 +659,10 @@ void CReplay::RetrieveDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationSt
|
|||||||
for (int i = 0; ((assoc = RpAnimBlendClumpGetMainPartialAssociation_N(ped->GetClump(), i))); i++)
|
for (int i = 0; ((assoc = RpAnimBlendClumpGetMainPartialAssociation_N(ped->GetClump(), i))); i++)
|
||||||
assoc->SetBlend(0.0f, -1.0f);
|
assoc->SetBlend(0.0f, -1.0f);
|
||||||
for (int i = 0; i < NUM_MAIN_ANIMS_IN_REPLAY; i++) {
|
for (int i = 0; i < NUM_MAIN_ANIMS_IN_REPLAY; i++) {
|
||||||
if (state->aAnimId[i] == NUM_STD_ANIMS)
|
if (state->aAnimId[i] == ANIM_STD_NUM)
|
||||||
continue;
|
continue;
|
||||||
CAnimBlendAssociation* anim = CAnimManager::AddAnimation(ped->GetClump(),
|
CAnimBlendAssociation* anim = CAnimManager::AddAnimation(ped->GetClump(),
|
||||||
state->aAnimId[i] > 3 ? (AssocGroupId)state->aGroupId[i] : ped->m_animGroup,
|
state->aAnimId[i] > ANIM_STD_IDLE ? (AssocGroupId)state->aGroupId[i] : ped->m_animGroup,
|
||||||
(AnimationId)state->aAnimId[i]);
|
(AnimationId)state->aAnimId[i]);
|
||||||
anim->SetCurrentTime(state->aCurTime[i] * 4.0f / 255.0f);
|
anim->SetCurrentTime(state->aCurTime[i] * 4.0f / 255.0f);
|
||||||
anim->speed = state->aSpeed[i] * 3.0f / 255.0f;
|
anim->speed = state->aSpeed[i] * 3.0f / 255.0f;
|
||||||
@ -677,10 +677,10 @@ void CReplay::RetrieveDetailedPedAnimation(CPed *ped, CStoredDetailedAnimationSt
|
|||||||
anim->SetDeleteCallback(FindCBFunction(callback & 0x7F), ped);
|
anim->SetDeleteCallback(FindCBFunction(callback & 0x7F), ped);
|
||||||
}
|
}
|
||||||
for (int i = 0; i < NUM_PARTIAL_ANIMS_IN_REPLAY; i++) {
|
for (int i = 0; i < NUM_PARTIAL_ANIMS_IN_REPLAY; i++) {
|
||||||
if (state->aAnimId2[i] == NUM_STD_ANIMS)
|
if (state->aAnimId2[i] == ANIM_STD_NUM)
|
||||||
continue;
|
continue;
|
||||||
CAnimBlendAssociation* anim = CAnimManager::AddAnimation(ped->GetClump(),
|
CAnimBlendAssociation* anim = CAnimManager::AddAnimation(ped->GetClump(),
|
||||||
state->aAnimId2[i] > 3 ? (AssocGroupId)state->aGroupId2[i] : ped->m_animGroup,
|
state->aAnimId2[i] > ANIM_STD_IDLE ? (AssocGroupId)state->aGroupId2[i] : ped->m_animGroup,
|
||||||
(AnimationId)state->aAnimId2[i]);
|
(AnimationId)state->aAnimId2[i]);
|
||||||
anim->SetCurrentTime(state->aCurTime2[i] * 4.0f / 255.0f);
|
anim->SetCurrentTime(state->aCurTime2[i] * 4.0f / 255.0f);
|
||||||
anim->speed = state->aSpeed2[i] * 3.0f / 255.0f;
|
anim->speed = state->aSpeed2[i] * 3.0f / 255.0f;
|
||||||
|
@ -4884,7 +4884,7 @@ int8 CRunningScript::ProcessCommands200To299(int32 command)
|
|||||||
pPlayer->m_pPed->m_pVehicleAnim->blendDelta = -1000.0f;
|
pPlayer->m_pPed->m_pVehicleAnim->blendDelta = -1000.0f;
|
||||||
pPlayer->m_pPed->m_pVehicleAnim = nil;
|
pPlayer->m_pPed->m_pVehicleAnim = nil;
|
||||||
pPlayer->m_pPed->SetMoveState(PEDMOVE_NONE);
|
pPlayer->m_pPed->SetMoveState(PEDMOVE_NONE);
|
||||||
CAnimManager::BlendAnimation(pPlayer->m_pPed->GetClump(), pPlayer->m_pPed->m_animGroup, ANIM_IDLE_STANCE, 1000.0f);
|
CAnimManager::BlendAnimation(pPlayer->m_pPed->GetClump(), pPlayer->m_pPed->m_animGroup, ANIM_STD_IDLE, 1000.0f);
|
||||||
pPlayer->m_pPed->RestartNonPartialAnims();
|
pPlayer->m_pPed->RestartNonPartialAnims();
|
||||||
AudioManager.PlayerJustLeftCar();
|
AudioManager.PlayerJustLeftCar();
|
||||||
pos.z += pPlayer->m_pPed->GetDistanceFromCentreOfMassToBaseOfModel();
|
pos.z += pPlayer->m_pPed->GetDistanceFromCentreOfMassToBaseOfModel();
|
||||||
|
@ -822,7 +822,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
pPed->m_pMyVehicle->m_nGettingOutFlags &= ~flags;
|
pPed->m_pMyVehicle->m_nGettingOutFlags &= ~flags;
|
||||||
pPed->m_pMyVehicle->ProcessOpenDoor(pPed->m_vehDoor, NUM_STD_ANIMS, 0.0f);
|
pPed->m_pMyVehicle->ProcessOpenDoor(pPed->m_vehDoor, ANIM_STD_NUM, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -839,7 +839,7 @@ int8 CRunningScript::ProcessCommands800To899(int32 command)
|
|||||||
pPed->m_pVehicleAnim = nil;
|
pPed->m_pVehicleAnim = nil;
|
||||||
pPed->RestartNonPartialAnims();
|
pPed->RestartNonPartialAnims();
|
||||||
pPed->SetMoveState(PEDMOVE_NONE);
|
pPed->SetMoveState(PEDMOVE_NONE);
|
||||||
CAnimManager::BlendAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_IDLE_STANCE, 1000.0f);
|
CAnimManager::BlendAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE, 1000.0f);
|
||||||
pos.z += pPed->GetDistanceFromCentreOfMassToBaseOfModel();
|
pos.z += pPed->GetDistanceFromCentreOfMassToBaseOfModel();
|
||||||
pPed->Teleport(pos);
|
pPed->Teleport(pos);
|
||||||
CTheScripts::ClearSpaceForMissionEntity(pos, pPed);
|
CTheScripts::ClearSpaceForMissionEntity(pos, pPed);
|
||||||
|
@ -2627,10 +2627,10 @@ bool CTheScripts::IsPlayerStopped(CPlayerInfo* pPlayer)
|
|||||||
CPed* pPed = pPlayer->m_pPed;
|
CPed* pPed = pPlayer->m_pPed;
|
||||||
if (pPed->InVehicle())
|
if (pPed->InVehicle())
|
||||||
return IsVehicleStopped(pPed->m_pMyVehicle);
|
return IsVehicleStopped(pPed->m_pMyVehicle);
|
||||||
if (RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_RUN_STOP) ||
|
if (RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_RUNSTOP1) ||
|
||||||
RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_RUN_STOP_R) ||
|
RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_RUNSTOP2) ||
|
||||||
RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_LAUNCH) ||
|
RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_JUMP_LAUNCH) ||
|
||||||
RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_JUMP_GLIDE))
|
RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_JUMP_GLIDE))
|
||||||
return false;
|
return false;
|
||||||
return (pPed->m_nMoveState == PEDMOVE_NONE || pPed->m_nMoveState == PEDMOVE_STILL) &&
|
return (pPed->m_nMoveState == PEDMOVE_NONE || pPed->m_nMoveState == PEDMOVE_STILL) &&
|
||||||
!pPed->bIsInTheAir && !pPed->bIsLanding && pPed->bIsStanding && pPed->m_vecAnimMoveDelta.x == 0.0f && pPed->m_vecAnimMoveDelta.y == 0.0f;
|
!pPed->bIsInTheAir && !pPed->bIsLanding && pPed->bIsStanding && pPed->m_vecAnimMoveDelta.x == 0.0f && pPed->m_vecAnimMoveDelta.y == 0.0f;
|
||||||
|
@ -431,12 +431,12 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
|
|||||||
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(pPed);
|
script_assert(pPed);
|
||||||
if (ScriptParams[1]) {
|
if (ScriptParams[1]) {
|
||||||
pPed->bIsDucking = true;
|
pPed->bCrouchWhenShooting = true;
|
||||||
pPed->SetDuck(ScriptParams[2], true);
|
pPed->SetDuck(ScriptParams[2], true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pPed->ClearDuck(true);
|
pPed->ClearDuck(true);
|
||||||
pPed->bIsDucking = false;
|
pPed->bCrouchWhenShooting = false;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||||||
((CPlayerPed*)pPed)->m_fMoveSpeed = 0.0f;
|
((CPlayerPed*)pPed)->m_fMoveSpeed = 0.0f;
|
||||||
else
|
else
|
||||||
pPed->m_nStoredMoveState = PEDMOVE_STILL;
|
pPed->m_nStoredMoveState = PEDMOVE_STILL;
|
||||||
CAnimManager::AddAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_IDLE_STANCE);
|
CAnimManager::AddAnimation(pPed->GetClump(), pPed->m_animGroup, ANIM_STD_IDLE);
|
||||||
pPed->bIsPedDieAnimPlaying = false;
|
pPed->bIsPedDieAnimPlaying = false;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -346,7 +346,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||||||
CollectParameters(&m_nIp, 1);
|
CollectParameters(&m_nIp, 1);
|
||||||
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(pPed);
|
script_assert(pPed);
|
||||||
UpdateCompareFlag(RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_DUCK_DOWN) != nil);
|
UpdateCompareFlag(RpAnimBlendClumpGetAssociation(pPed->GetClump(), ANIM_STD_DUCK_DOWN) != nil);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI:
|
case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI:
|
||||||
|
@ -260,8 +260,8 @@ void CSetPiece::Update(void)
|
|||||||
CCarAI::AddPoliceCarOccupants(pVehicle1);
|
CCarAI::AddPoliceCarOccupants(pVehicle1);
|
||||||
CVehicle* pVehicle2 = TryToGenerateCopCar(m_vSpawn2, m_vTarget2);
|
CVehicle* pVehicle2 = TryToGenerateCopCar(m_vSpawn2, m_vTarget2);
|
||||||
if (!pVehicle2) {
|
if (!pVehicle2) {
|
||||||
CWorld::Remove(pVehicle2);
|
CWorld::Remove(pVehicle1);
|
||||||
delete pVehicle2;
|
delete pVehicle1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pVehicle2->SetStatus(STATUS_PHYSICS);
|
pVehicle2->SetStatus(STATUS_PHYSICS);
|
||||||
|
@ -245,7 +245,7 @@ CAnimViewer::Update(void)
|
|||||||
if (modelInfo->GetModelType() == MITYPE_PED) {
|
if (modelInfo->GetModelType() == MITYPE_PED) {
|
||||||
int animGroup = ((CPedModelInfo*)modelInfo)->m_animGroup;
|
int animGroup = ((CPedModelInfo*)modelInfo)->m_animGroup;
|
||||||
|
|
||||||
if (animId > ANIM_IDLE_STANCE)
|
if (animId > ANIM_STD_IDLE)
|
||||||
animGroup = ASSOCGRP_STD;
|
animGroup = ASSOCGRP_STD;
|
||||||
|
|
||||||
if (reloadIFP) {
|
if (reloadIFP) {
|
||||||
@ -334,14 +334,14 @@ CAnimViewer::Update(void)
|
|||||||
CMessages::AddMessage(gUString, 1000, 0);
|
CMessages::AddMessage(gUString, 1000, 0);
|
||||||
|
|
||||||
} else if (pad->GetCircleJustDown()) {
|
} else if (pad->GetCircleJustDown()) {
|
||||||
PlayAnimation(pTarget->GetClump(), animGroup, ANIM_IDLE_STANCE);
|
PlayAnimation(pTarget->GetClump(), animGroup, ANIM_STD_IDLE);
|
||||||
AsciiToUnicode("Idle animation playing", gUString);
|
AsciiToUnicode("Idle animation playing", gUString);
|
||||||
CMessages::AddMessage(gUString, 1000, 0);
|
CMessages::AddMessage(gUString, 1000, 0);
|
||||||
|
|
||||||
} else if (pad->GetDPadUpJustDown()) {
|
} else if (pad->GetDPadUpJustDown()) {
|
||||||
animId--;
|
animId--;
|
||||||
if (animId < 0) {
|
if (animId < 0) {
|
||||||
animId = NUM_STD_ANIMS - 1;
|
animId = ANIM_STD_NUM - 1;
|
||||||
}
|
}
|
||||||
PlayAnimation(pTarget->GetClump(), animGroup, (AnimationId)animId);
|
PlayAnimation(pTarget->GetClump(), animGroup, (AnimationId)animId);
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ CAnimViewer::Update(void)
|
|||||||
CMessages::AddMessage(gUString, 1000, 0);
|
CMessages::AddMessage(gUString, 1000, 0);
|
||||||
|
|
||||||
} else if (pad->GetDPadDownJustDown()) {
|
} else if (pad->GetDPadDownJustDown()) {
|
||||||
animId = (animId == (NUM_STD_ANIMS - 1) ? 0 : animId + 1);
|
animId = (animId == (ANIM_STD_NUM - 1) ? 0 : animId + 1);
|
||||||
PlayAnimation(pTarget->GetClump(), animGroup, (AnimationId)animId);
|
PlayAnimation(pTarget->GetClump(), animGroup, (AnimationId)animId);
|
||||||
|
|
||||||
sprintf(gString, "Current anim: %d", animId);
|
sprintf(gString, "Current anim: %d", animId);
|
||||||
|
@ -1768,7 +1768,7 @@ CCamera::CamControl(void)
|
|||||||
(m_bLookingAtPlayer || WhoIsInControlOfTheCamera == CAMCONTROL_OBBE) &&
|
(m_bLookingAtPlayer || WhoIsInControlOfTheCamera == CAMCONTROL_OBBE) &&
|
||||||
!m_WideScreenOn &&
|
!m_WideScreenOn &&
|
||||||
(WhoIsInControlOfTheCamera != CAMCONTROL_OBBE || bSwitchedToObbeCam))
|
(WhoIsInControlOfTheCamera != CAMCONTROL_OBBE || bSwitchedToObbeCam))
|
||||||
DMAudio.PlayFrontEndSound(SOUND_HUD_SOUND, 0);
|
DMAudio.PlayFrontEndSound(SOUND_HUD, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// What a mess!
|
// What a mess!
|
||||||
|
@ -14,9 +14,9 @@ struct CdReadInfo
|
|||||||
void *pBuffer;
|
void *pBuffer;
|
||||||
char field_C;
|
char field_C;
|
||||||
bool bLocked;
|
bool bLocked;
|
||||||
bool bInUse;
|
bool bReading;
|
||||||
int32 nStatus;
|
int32 nStatus;
|
||||||
HANDLE hSemaphore; // used for CdStreamSync
|
HANDLE pDoneSemaphore; // used for CdStreamSync
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
OVERLAPPED Overlapped;
|
OVERLAPPED Overlapped;
|
||||||
};
|
};
|
||||||
@ -53,9 +53,9 @@ CdStreamInitThread(void)
|
|||||||
{
|
{
|
||||||
for ( int32 i = 0; i < gNumChannels; i++ )
|
for ( int32 i = 0; i < gNumChannels; i++ )
|
||||||
{
|
{
|
||||||
gpReadInfo[i].hSemaphore = CreateSemaphore(nil, 0, 2, nil);
|
gpReadInfo[i].pDoneSemaphore = CreateSemaphore(nil, 0, 2, nil);
|
||||||
|
|
||||||
if ( gpReadInfo[i].hSemaphore == nil )
|
if ( gpReadInfo[i].pDoneSemaphore == nil )
|
||||||
{
|
{
|
||||||
printf("%s: failed to create sync semaphore\n", "cdvd_stream");
|
printf("%s: failed to create sync semaphore\n", "cdvd_stream");
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
@ -183,7 +183,7 @@ CdStreamShutdown(void)
|
|||||||
CloseHandle(_gCdStreamThread);
|
CloseHandle(_gCdStreamThread);
|
||||||
|
|
||||||
for ( int32 i = 0; i < gNumChannels; i++ )
|
for ( int32 i = 0; i < gNumChannels; i++ )
|
||||||
CloseHandle(gpReadInfo[i].hSemaphore);
|
CloseHandle(gpReadInfo[i].pDoneSemaphore);
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalFree(gpReadInfo);
|
LocalFree(gpReadInfo);
|
||||||
@ -213,7 +213,7 @@ CdStreamRead(int32 channel, void *buffer, uint32 offset, uint32 size)
|
|||||||
|
|
||||||
if ( _gbCdStreamAsync )
|
if ( _gbCdStreamAsync )
|
||||||
{
|
{
|
||||||
if ( pChannel->nSectorsToRead != 0 || pChannel->bInUse )
|
if ( pChannel->nSectorsToRead != 0 || pChannel->bReading )
|
||||||
return STREAM_NONE;
|
return STREAM_NONE;
|
||||||
|
|
||||||
pChannel->nStatus = STREAM_NONE;
|
pChannel->nStatus = STREAM_NONE;
|
||||||
@ -271,7 +271,7 @@ CdStreamGetStatus(int32 channel)
|
|||||||
|
|
||||||
if ( _gbCdStreamAsync )
|
if ( _gbCdStreamAsync )
|
||||||
{
|
{
|
||||||
if ( pChannel->bInUse )
|
if ( pChannel->bReading )
|
||||||
return STREAM_READING;
|
return STREAM_READING;
|
||||||
|
|
||||||
if ( pChannel->nSectorsToRead != 0 )
|
if ( pChannel->nSectorsToRead != 0 )
|
||||||
@ -321,12 +321,21 @@ CdStreamSync(int32 channel)
|
|||||||
{
|
{
|
||||||
pChannel->bLocked = true;
|
pChannel->bLocked = true;
|
||||||
|
|
||||||
ASSERT( pChannel->hSemaphore != nil );
|
ASSERT( pChannel->pDoneSemaphore != nil );
|
||||||
|
|
||||||
WaitForSingleObject(pChannel->hSemaphore, INFINITE);
|
// Deadlock fix 1
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
// This is while loop on Posix streamer, for spurious wakeups
|
||||||
|
if (pChannel->bLocked && pChannel->nSectorsToRead != 0){
|
||||||
|
WaitForSingleObject(pChannel->pDoneSemaphore, INFINITE);
|
||||||
|
}
|
||||||
|
pChannel->bLocked = false;
|
||||||
|
#else
|
||||||
|
WaitForSingleObject(pChannel->pDoneSemaphore, INFINITE);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
pChannel->bInUse = false;
|
pChannel->bReading = false;
|
||||||
|
|
||||||
return pChannel->nStatus;
|
return pChannel->nStatus;
|
||||||
}
|
}
|
||||||
@ -398,7 +407,7 @@ WINAPI CdStreamThread(LPVOID lpThreadParameter)
|
|||||||
CdReadInfo *pChannel = &gpReadInfo[channel];
|
CdReadInfo *pChannel = &gpReadInfo[channel];
|
||||||
ASSERT( pChannel != nil );
|
ASSERT( pChannel != nil );
|
||||||
|
|
||||||
pChannel->bInUse = true;
|
pChannel->bReading = true;
|
||||||
|
|
||||||
if ( pChannel->nStatus == STREAM_NONE )
|
if ( pChannel->nStatus == STREAM_NONE )
|
||||||
{
|
{
|
||||||
@ -455,11 +464,15 @@ WINAPI CdStreamThread(LPVOID lpThreadParameter)
|
|||||||
|
|
||||||
if ( pChannel->bLocked )
|
if ( pChannel->bLocked )
|
||||||
{
|
{
|
||||||
ASSERT( pChannel->hSemaphore != nil );
|
ASSERT( pChannel->pDoneSemaphore != nil );
|
||||||
ReleaseSemaphore(pChannel->hSemaphore, 1, NULL);
|
// Deadlock fix 2
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
pChannel->bLocked = 0;
|
||||||
|
#endif
|
||||||
|
ReleaseSemaphore(pChannel->pDoneSemaphore, 1, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
pChannel->bInUse = false;
|
pChannel->bReading = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,11 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "CdStream.h"
|
#include "CdStream.h"
|
||||||
#include "rwcore.h"
|
#include "rwcore.h"
|
||||||
@ -33,21 +38,6 @@ typedef OSSemaphore sem_t;
|
|||||||
|
|
||||||
#define SEM_FAILED (NULL)
|
#define SEM_FAILED (NULL)
|
||||||
|
|
||||||
static sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value)
|
|
||||||
{
|
|
||||||
sem_t* sem = (sem_t*) calloc(1, sizeof(sem_t));
|
|
||||||
OSInitSemaphore(sem, value);
|
|
||||||
return sem;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sem_close(sem_t *sem)
|
|
||||||
{
|
|
||||||
free(sem);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sem_unlink(const char *name) { return 0; };
|
|
||||||
|
|
||||||
static int sem_post(sem_t *sem)
|
static int sem_post(sem_t *sem)
|
||||||
{
|
{
|
||||||
OSSignalSemaphore(sem);
|
OSSignalSemaphore(sem);
|
||||||
@ -104,6 +94,76 @@ static int wiiu_thread_create(OSThread *thread, const void *attr, void *(*start_
|
|||||||
bool flushStream[MAX_CDCHANNELS];
|
bool flushStream[MAX_CDCHANNELS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __WIIU__
|
||||||
|
|
||||||
|
#define RE3_SEM_OPEN(name, ...) sem_open()
|
||||||
|
#define RE3_SEM_CLOSE(sem, format, ...) sem_close(sem)
|
||||||
|
|
||||||
|
static sem_t *sem_open()
|
||||||
|
{
|
||||||
|
sem_t* sem = (sem_t*) calloc(1, sizeof(sem_t));
|
||||||
|
OSInitSemaphore(sem, 1);
|
||||||
|
return sem;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int sem_close(sem_t *sem)
|
||||||
|
{
|
||||||
|
free(sem);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(USE_UNNAMED_SEM)
|
||||||
|
|
||||||
|
#define RE3_SEM_OPEN(name, ...) re3_sem_open()
|
||||||
|
sem_t*
|
||||||
|
re3_sem_open(void)
|
||||||
|
{
|
||||||
|
sem_t* sem = (sem_t*)malloc(sizeof(sem_t));
|
||||||
|
if (sem_init(sem, 0, 1) == -1) {
|
||||||
|
sem = SEM_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RE3_SEM_CLOSE(sem, format, ...) re3_sem_close(sem)
|
||||||
|
void
|
||||||
|
re3_sem_close(sem_t* sem)
|
||||||
|
{
|
||||||
|
sem_destroy(sem);
|
||||||
|
free(sem);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define RE3_SEM_OPEN re3_sem_open
|
||||||
|
sem_t*
|
||||||
|
re3_sem_open(const char* format, ...)
|
||||||
|
{
|
||||||
|
char semName[21];
|
||||||
|
va_list va;
|
||||||
|
va_start(va, format);
|
||||||
|
vsprintf(semName, format, va);
|
||||||
|
|
||||||
|
return sem_open(semName, O_CREAT, 0644, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RE3_SEM_CLOSE re3_sem_close
|
||||||
|
void
|
||||||
|
re3_sem_close(sem_t* sem, const char* format, ...)
|
||||||
|
{
|
||||||
|
sem_close(sem);
|
||||||
|
|
||||||
|
char semName[21];
|
||||||
|
va_list va;
|
||||||
|
va_start(va, format);
|
||||||
|
vsprintf(semName, format, va);
|
||||||
|
|
||||||
|
sem_unlink(semName);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
struct CdReadInfo
|
struct CdReadInfo
|
||||||
{
|
{
|
||||||
uint32 nSectorOffset;
|
uint32 nSectorOffset;
|
||||||
@ -155,14 +215,13 @@ void
|
|||||||
CdStreamInitThread(void)
|
CdStreamInitThread(void)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
char semName[20];
|
|
||||||
#ifndef ONE_THREAD_PER_CHANNEL
|
#ifndef ONE_THREAD_PER_CHANNEL
|
||||||
gChannelRequestQ.items = (int32 *)calloc(gNumChannels + 1, sizeof(int32));
|
gChannelRequestQ.items = (int32 *)calloc(gNumChannels + 1, sizeof(int32));
|
||||||
gChannelRequestQ.head = 0;
|
gChannelRequestQ.head = 0;
|
||||||
gChannelRequestQ.tail = 0;
|
gChannelRequestQ.tail = 0;
|
||||||
gChannelRequestQ.size = gNumChannels + 1;
|
gChannelRequestQ.size = gNumChannels + 1;
|
||||||
ASSERT(gChannelRequestQ.items != nil );
|
ASSERT(gChannelRequestQ.items != nil );
|
||||||
gCdStreamSema = sem_open("/semaphore_cd_stream", O_CREAT, 0644, 0);
|
gCdStreamSema = RE3_SEM_OPEN("/semaphore_cd_stream");
|
||||||
|
|
||||||
|
|
||||||
if (gCdStreamSema == SEM_FAILED) {
|
if (gCdStreamSema == SEM_FAILED) {
|
||||||
@ -176,8 +235,7 @@ CdStreamInitThread(void)
|
|||||||
{
|
{
|
||||||
for ( int32 i = 0; i < gNumChannels; i++ )
|
for ( int32 i = 0; i < gNumChannels; i++ )
|
||||||
{
|
{
|
||||||
sprintf(semName,"/semaphore_done%d",i);
|
gpReadInfo[i].pDoneSemaphore = RE3_SEM_OPEN("/semaphore_done%d", i);
|
||||||
gpReadInfo[i].pDoneSemaphore = sem_open(semName, O_CREAT, 0644, 0);
|
|
||||||
|
|
||||||
if (gpReadInfo[i].pDoneSemaphore == SEM_FAILED)
|
if (gpReadInfo[i].pDoneSemaphore == SEM_FAILED)
|
||||||
{
|
{
|
||||||
@ -187,8 +245,7 @@ CdStreamInitThread(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ONE_THREAD_PER_CHANNEL
|
#ifdef ONE_THREAD_PER_CHANNEL
|
||||||
sprintf(semName,"/semaphore_start%d",i);
|
gpReadInfo[i].pStartSemaphore = RE3_SEM_OPEN("/semaphore_start%d", i);
|
||||||
gpReadInfo[i].pStartSemaphore = sem_open(semName, O_CREAT, 0644, 0);
|
|
||||||
|
|
||||||
if (gpReadInfo[i].pStartSemaphore == SEM_FAILED)
|
if (gpReadInfo[i].pStartSemaphore == SEM_FAILED)
|
||||||
{
|
{
|
||||||
@ -576,21 +633,14 @@ void *CdStreamThread(void *param)
|
|||||||
#ifndef ONE_THREAD_PER_CHANNEL
|
#ifndef ONE_THREAD_PER_CHANNEL
|
||||||
for ( int32 i = 0; i < gNumChannels; i++ )
|
for ( int32 i = 0; i < gNumChannels; i++ )
|
||||||
{
|
{
|
||||||
sem_close(gpReadInfo[i].pDoneSemaphore);
|
RE3_SEM_CLOSE(gpReadInfo[i].pDoneSemaphore, "/semaphore_done%d", i);
|
||||||
sprintf(semName,"/semaphore_done%d",i);
|
|
||||||
sem_unlink(semName);
|
|
||||||
}
|
}
|
||||||
sem_close(gCdStreamSema);
|
RE3_SEM_CLOSE(gCdStreamSema, "/semaphore_cd_stream");
|
||||||
sem_unlink("/semaphore_cd_stream");
|
|
||||||
free(gChannelRequestQ.items);
|
free(gChannelRequestQ.items);
|
||||||
#else
|
#else
|
||||||
sem_close(gpReadInfo[channel].pStartSemaphore);
|
RE3_SEM_CLOSE(gpReadInfo[channel].pStartSemaphore, "/semaphore_start%d", channel);
|
||||||
sprintf(semName,"/semaphore_start%d",channel);
|
|
||||||
sem_unlink(semName);
|
|
||||||
|
|
||||||
sem_close(gpReadInfo[channel].pDoneSemaphore);
|
RE3_SEM_CLOSE(gpReadInfo[channel].pDoneSemaphore, "/semaphore_done%d", channel);
|
||||||
sprintf(semName,"/semaphore_done%d",channel);
|
|
||||||
sem_unlink(semName);
|
|
||||||
#endif
|
#endif
|
||||||
if (gpReadInfo)
|
if (gpReadInfo)
|
||||||
free(gpReadInfo);
|
free(gpReadInfo);
|
||||||
|
@ -166,6 +166,9 @@ void CControllerConfigManager::LoadSettings(int32 file)
|
|||||||
{
|
{
|
||||||
bool bValid = true;
|
bool bValid = true;
|
||||||
int nVersion = 0;
|
int nVersion = 0;
|
||||||
|
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||||
|
bool skipVehicleFireWeapon = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
@ -183,11 +186,26 @@ void CControllerConfigManager::LoadSettings(int32 file)
|
|||||||
if (bValid && nVersion >= 3)
|
if (bValid && nVersion >= 3)
|
||||||
{
|
{
|
||||||
ControlsManager.MakeControllerActionsBlank();
|
ControlsManager.MakeControllerActionsBlank();
|
||||||
|
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||||
|
skipVehicleFireWeapon = nVersion < 4;
|
||||||
|
// Set the default settings of VEHICLE_FIREWEAPON
|
||||||
|
if (skipVehicleFireWeapon) {
|
||||||
|
SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, rsPADINS, KEYBOARD);
|
||||||
|
SetControllerKeyAssociatedWithAction(VEHICLE_FIREWEAPON, rsLCTRL, OPTIONAL_EXTRA);
|
||||||
|
if (m_bMouseAssociated)
|
||||||
|
SetMouseButtonAssociatedWithAction(VEHICLE_FIREWEAPON, 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (int32 i = 0; i < MAX_CONTROLLERTYPES; i++)
|
for (int32 i = 0; i < MAX_CONTROLLERTYPES; i++)
|
||||||
{
|
{
|
||||||
for (int32 j = 0; j < MAX_CONTROLLERACTIONS; j++)
|
for (int32 j = 0; j < MAX_CONTROLLERACTIONS; j++)
|
||||||
{
|
{
|
||||||
|
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||||
|
// Skip file read
|
||||||
|
if (skipVehicleFireWeapon && j == VEHICLE_FIREWEAPON)
|
||||||
|
continue;
|
||||||
|
#endif
|
||||||
CFileMgr::Read(file, (char *)&ControlsManager.m_aSettings[j][i], sizeof(tControllerConfigBind));
|
CFileMgr::Read(file, (char *)&ControlsManager.m_aSettings[j][i], sizeof(tControllerConfigBind));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -361,6 +379,11 @@ uint32 CControllerConfigManager::ms_padButtonsInited = 0;
|
|||||||
|
|
||||||
void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
|
void CControllerConfigManager::InitDefaultControlConfigJoyPad(uint32 buttons)
|
||||||
{
|
{
|
||||||
|
#ifdef XINPUT
|
||||||
|
// No manual bindings for you, honey.
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
m_bFirstCapture = true;
|
m_bFirstCapture = true;
|
||||||
|
|
||||||
uint32 btn = buttons;
|
uint32 btn = buttons;
|
||||||
@ -1800,6 +1823,51 @@ void CControllerConfigManager::DeleteMatching1rstPersonControls(e_ControllerActi
|
|||||||
|
|
||||||
#undef CLEAR_ACTION_IF_NEEDED
|
#undef CLEAR_ACTION_IF_NEEDED
|
||||||
|
|
||||||
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
#define CHECK_ACTION(action) \
|
||||||
|
if (key == GetControllerKeyAssociatedWithAction(action, type))\
|
||||||
|
return true;
|
||||||
|
|
||||||
|
bool CControllerConfigManager::IsAnyVehicleActionAssignedToMouseKey(int32 key)
|
||||||
|
{
|
||||||
|
const eControllerType type = MOUSE;
|
||||||
|
if (!GetIsKeyBlank(key, type))
|
||||||
|
{
|
||||||
|
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||||
|
CHECK_ACTION(VEHICLE_FIREWEAPON);
|
||||||
|
#endif
|
||||||
|
CHECK_ACTION(VEHICLE_LOOKBEHIND);
|
||||||
|
CHECK_ACTION(VEHICLE_LOOKLEFT);
|
||||||
|
CHECK_ACTION(VEHICLE_LOOKRIGHT);
|
||||||
|
CHECK_ACTION(VEHICLE_HORN);
|
||||||
|
CHECK_ACTION(VEHICLE_HANDBRAKE);
|
||||||
|
CHECK_ACTION(VEHICLE_ACCELERATE);
|
||||||
|
CHECK_ACTION(VEHICLE_BRAKE);
|
||||||
|
CHECK_ACTION(VEHICLE_CHANGE_RADIO_STATION);
|
||||||
|
CHECK_ACTION(TOGGLE_SUBMISSIONS);
|
||||||
|
CHECK_ACTION(VEHICLE_TURRETLEFT);
|
||||||
|
CHECK_ACTION(VEHICLE_TURRETRIGHT);
|
||||||
|
CHECK_ACTION(VEHICLE_TURRETUP);
|
||||||
|
CHECK_ACTION(VEHICLE_TURRETDOWN);
|
||||||
|
CHECK_ACTION(VEHICLE_ENTER_EXIT);
|
||||||
|
CHECK_ACTION(CAMERA_CHANGE_VIEW_ALL_SITUATIONS);
|
||||||
|
#ifndef BIND_VEHICLE_FIREWEAPON
|
||||||
|
CHECK_ACTION(PED_FIREWEAPON);
|
||||||
|
#endif
|
||||||
|
CHECK_ACTION(GO_LEFT);
|
||||||
|
CHECK_ACTION(GO_RIGHT);
|
||||||
|
CHECK_ACTION(NETWORK_TALK);
|
||||||
|
CHECK_ACTION(SWITCH_DEBUG_CAM_ON);
|
||||||
|
CHECK_ACTION(TOGGLE_DPAD);
|
||||||
|
CHECK_ACTION(TAKE_SCREEN_SHOT);
|
||||||
|
CHECK_ACTION(SHOW_MOUSE_POINTER_TOGGLE);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef CHECK_ACTION
|
||||||
|
#endif
|
||||||
|
|
||||||
void CControllerConfigManager::DeleteMatchingActionInitiators(e_ControllerAction action, int32 key, eControllerType type)
|
void CControllerConfigManager::DeleteMatchingActionInitiators(e_ControllerAction action, int32 key, eControllerType type)
|
||||||
{
|
{
|
||||||
if (!GetIsKeyBlank(key, type))
|
if (!GetIsKeyBlank(key, type))
|
||||||
@ -2406,7 +2474,7 @@ int32 CControllerConfigManager::GetNumOfSettingsForAction(e_ControllerAction act
|
|||||||
#define VFB(b)
|
#define VFB(b)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CONTROLLER_BUTTONS(T, O, X, Q, L1, L2, L3, R1, R2, R3, SELECT, RSL, RSR) \
|
#define CONTROLLER_BUTTONS(T, O, X, Q, L1, L2, L3, R1, R2, R3, SELECT, RSU, RSD, RSL, RSR) \
|
||||||
{{ \
|
{{ \
|
||||||
O, /* PED_FIREWEAPON */ \
|
O, /* PED_FIREWEAPON */ \
|
||||||
R2, /* PED_CYCLE_WEAPON_RIGHT */ \
|
R2, /* PED_CYCLE_WEAPON_RIGHT */ \
|
||||||
@ -2517,7 +2585,7 @@ int32 CControllerConfigManager::GetNumOfSettingsForAction(e_ControllerAction act
|
|||||||
O, /* PED_SPRINT */ \
|
O, /* PED_SPRINT */ \
|
||||||
R3, /* PED_LOOKBEHIND */ \
|
R3, /* PED_LOOKBEHIND */ \
|
||||||
L3, /* PED_DUCK */ \
|
L3, /* PED_DUCK */ \
|
||||||
L1, /* PED_ANSWER_PHONE */ \
|
T, /* PED_ANSWER_PHONE */ \
|
||||||
VFB(O) /* VEHICLE_FIREWEAPON */ \
|
VFB(O) /* VEHICLE_FIREWEAPON */ \
|
||||||
X, /* VEHICLE_ACCELERATE */ \
|
X, /* VEHICLE_ACCELERATE */ \
|
||||||
Q, /* VEHICLE_BRAKE */ \
|
Q, /* VEHICLE_BRAKE */ \
|
||||||
@ -2564,10 +2632,10 @@ int32 CControllerConfigManager::GetNumOfSettingsForAction(e_ControllerAction act
|
|||||||
X, /* PED_SPRINT */ \
|
X, /* PED_SPRINT */ \
|
||||||
R3, /* PED_LOOKBEHIND */ \
|
R3, /* PED_LOOKBEHIND */ \
|
||||||
L3, /* PED_DUCK */ \
|
L3, /* PED_DUCK */ \
|
||||||
L1, /* PED_ANSWER_PHONE */ \
|
O, /* PED_ANSWER_PHONE */ \
|
||||||
VFB(R1) /* VEHICLE_FIREWEAPON */ \
|
VFB(R1) /* VEHICLE_FIREWEAPON */ \
|
||||||
nil, /* VEHICLE_ACCELERATE */ \
|
RSU, /* VEHICLE_ACCELERATE */ \
|
||||||
nil, /* VEHICLE_BRAKE */ \
|
RSD, /* VEHICLE_BRAKE */ \
|
||||||
O, /* VEHICLE_CHANGE_RADIO_STATION */ \
|
O, /* VEHICLE_CHANGE_RADIO_STATION */ \
|
||||||
L3, /* VEHICLE_HORN */ \
|
L3, /* VEHICLE_HORN */ \
|
||||||
Q, /* TOGGLE_SUBMISSIONS */ \
|
Q, /* TOGGLE_SUBMISSIONS */ \
|
||||||
@ -2608,10 +2676,10 @@ int32 CControllerConfigManager::GetNumOfSettingsForAction(e_ControllerAction act
|
|||||||
#define RIGHT "RIGHT"
|
#define RIGHT "RIGHT"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *XboxButtons_noIcons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("Y", "B", "A", "X", "LB", "LT", "LS", "RB", "RT", "RS", "BACK", "right stick left", "right stick right");
|
const char *XboxButtons_noIcons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("Y", "B", "A", "X", "LB", "LT", "LS", "RB", "RT", "RS", "BACK", "right stick up", "right stick down", "right stick left", "right stick right");
|
||||||
|
|
||||||
#ifdef BUTTON_ICONS
|
#ifdef BUTTON_ICONS
|
||||||
const char *XboxButtons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("~T~", "~O~", "~X~", "~Q~", "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "BACK", "~(~", "~)~");
|
const char *XboxButtons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("~T~", "~O~", "~X~", "~Q~", "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "BACK", "~H~", "~L~", "~(~", "~)~");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -2620,11 +2688,6 @@ const char *XboxButtons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("~T~", "~O
|
|||||||
#define PS2_CIRCLE "|"
|
#define PS2_CIRCLE "|"
|
||||||
#define PS2_CROSS "/"
|
#define PS2_CROSS "/"
|
||||||
#define PS2_SQUARE "^"
|
#define PS2_SQUARE "^"
|
||||||
#elif defined(BUTTON_ICONS)
|
|
||||||
#define PS2_TRIANGLE "~T~"
|
|
||||||
#define PS2_CIRCLE "~O~"
|
|
||||||
#define PS2_CROSS "~X~"
|
|
||||||
#define PS2_SQUARE "~Q~"
|
|
||||||
#else
|
#else
|
||||||
#define PS2_TRIANGLE "TRIANGLE"
|
#define PS2_TRIANGLE "TRIANGLE"
|
||||||
#define PS2_CIRCLE "CIRCLE"
|
#define PS2_CIRCLE "CIRCLE"
|
||||||
@ -2633,11 +2696,11 @@ const char *XboxButtons[][MAX_CONTROLLERACTIONS] = CONTROLLER_BUTTONS("~T~", "~O
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
const char *PlayStationButtons_noIcons[][MAX_CONTROLLERACTIONS] =
|
const char *PlayStationButtons_noIcons[][MAX_CONTROLLERACTIONS] =
|
||||||
CONTROLLER_BUTTONS(PS2_TRIANGLE, PS2_CIRCLE, PS2_CROSS, PS2_SQUARE, "L1", "L2", "L3", "R1", "R2", "R3", "SELECT", "right stick left", "right stick right");
|
CONTROLLER_BUTTONS(PS2_TRIANGLE, PS2_CIRCLE, PS2_CROSS, PS2_SQUARE, "L1", "L2", "L3", "R1", "R2", "R3", "SELECT", "right stick up", "right stick down", "right stick left", "right stick right");
|
||||||
|
|
||||||
#ifdef BUTTON_ICONS
|
#ifdef BUTTON_ICONS
|
||||||
const char *PlayStationButtons[][MAX_CONTROLLERACTIONS] =
|
const char *PlayStationButtons[][MAX_CONTROLLERACTIONS] =
|
||||||
CONTROLLER_BUTTONS(PS2_TRIANGLE, PS2_CIRCLE, PS2_CROSS, PS2_SQUARE, "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "SELECT", "~(~", "~)~");
|
CONTROLLER_BUTTONS("~T~", "~O~", "~X~", "~Q~", "~K~", "~M~", "~A~", "~J~", "~V~", "~C~", "SELECT", "~H~", "~L~", "~(~", "~)~");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef PS2_TRIANGLE
|
#undef PS2_TRIANGLE
|
||||||
@ -2659,11 +2722,36 @@ void CControllerConfigManager::GetWideStringOfCommandKeys(uint16 action, wchar *
|
|||||||
if (CPad::GetPad(0)->IsAffectedByController) {
|
if (CPad::GetPad(0)->IsAffectedByController) {
|
||||||
wchar wstr[16];
|
wchar wstr[16];
|
||||||
|
|
||||||
// TODO: INI and/or menu setting for Xbox/PS switch
|
const char* (*Buttons)[MAX_CONTROLLERACTIONS];
|
||||||
|
|
||||||
#ifdef BUTTON_ICONS
|
#ifdef BUTTON_ICONS
|
||||||
const char *(*Buttons)[MAX_CONTROLLERACTIONS] = CFont::ButtonsSlot != -1 ? XboxButtons : XboxButtons_noIcons;
|
#ifdef GAMEPAD_MENU
|
||||||
|
switch (FrontEndMenuManager.m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CMenuManager::CONTROLLER_DUALSHOCK2:
|
||||||
|
case CMenuManager::CONTROLLER_DUALSHOCK3:
|
||||||
|
case CMenuManager::CONTROLLER_DUALSHOCK4:
|
||||||
|
Buttons = CFont::ButtonsSlot != -1 ? PlayStationButtons : PlayStationButtons_noIcons;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
#endif
|
||||||
|
Buttons = CFont::ButtonsSlot != -1 ? XboxButtons : XboxButtons_noIcons;
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
const char *(*Buttons)[MAX_CONTROLLERACTIONS] = XboxButtons_noIcons;
|
switch (FrontEndMenuManager.m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CMenuManager::CONTROLLER_DUALSHOCK2:
|
||||||
|
case CMenuManager::CONTROLLER_DUALSHOCK3:
|
||||||
|
case CMenuManager::CONTROLLER_DUALSHOCK4:
|
||||||
|
Buttons = PlayStationButtons_noIcons;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Buttons = XboxButtons_noIcons;
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
assert(Buttons[CPad::GetPad(0)->Mode][action] != nil); // we cannot use these
|
assert(Buttons[CPad::GetPad(0)->Mode][action] != nil); // we cannot use these
|
||||||
|
@ -209,6 +209,10 @@ public:
|
|||||||
void DeleteMatching1rstPersonControls (e_ControllerAction action, int32 key, eControllerType type);
|
void DeleteMatching1rstPersonControls (e_ControllerAction action, int32 key, eControllerType type);
|
||||||
void DeleteMatchingActionInitiators (e_ControllerAction action, int32 key, eControllerType type);
|
void DeleteMatchingActionInitiators (e_ControllerAction action, int32 key, eControllerType type);
|
||||||
|
|
||||||
|
#ifdef RADIO_SCROLL_TO_PREV_STATION
|
||||||
|
bool IsAnyVehicleActionAssignedToMouseKey(int32 key);
|
||||||
|
#endif
|
||||||
|
|
||||||
bool GetIsKeyBlank(int32 key, eControllerType type);
|
bool GetIsKeyBlank(int32 key, eControllerType type);
|
||||||
e_ControllerActionType GetActionType(e_ControllerAction action);
|
e_ControllerActionType GetActionType(e_ControllerAction action);
|
||||||
|
|
||||||
|
@ -339,6 +339,7 @@ CFileLoader::LoadCollisionModel(uint8 *buf, CColModel &model, char *modelname)
|
|||||||
buf += 4;
|
buf += 4;
|
||||||
if(model.numLines > 0){
|
if(model.numLines > 0){
|
||||||
//model.lines = (CColLine*)RwMalloc(model.numLines*sizeof(CColLine));
|
//model.lines = (CColLine*)RwMalloc(model.numLines*sizeof(CColLine));
|
||||||
|
REGISTER_MEMPTR(&model.lines);
|
||||||
for(i = 0; i < model.numLines; i++){
|
for(i = 0; i < model.numLines; i++){
|
||||||
//model.lines[i].Set(*(CVector*)buf, *(CVector*)(buf+12));
|
//model.lines[i].Set(*(CVector*)buf, *(CVector*)(buf+12));
|
||||||
buf += 24;
|
buf += 24;
|
||||||
|
@ -125,6 +125,10 @@ bool CMenuManager::m_PrefsMarketing = false;
|
|||||||
bool CMenuManager::m_PrefsDisableTutorials = false;
|
bool CMenuManager::m_PrefsDisableTutorials = false;
|
||||||
#endif // !MASTER
|
#endif // !MASTER
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
uint32 TimeToStopPadShaking;
|
||||||
|
#endif
|
||||||
|
|
||||||
const char* FrontendFilenames[][2] = {
|
const char* FrontendFilenames[][2] = {
|
||||||
{"background", ""},
|
{"background", ""},
|
||||||
{"vc_logo", "vc_logom"},
|
{"vc_logo", "vc_logom"},
|
||||||
@ -151,7 +155,14 @@ const char* FrontendFilenames[][2] = {
|
|||||||
{"downOff", "buttonA"},
|
{"downOff", "buttonA"},
|
||||||
{"downOn", "buttonA"},
|
{"downOn", "buttonA"},
|
||||||
{"upOff", "buttonA"},
|
{"upOff", "buttonA"},
|
||||||
{"upOn", "buttonA"}
|
{"upOn", "buttonA"},
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
{"fe_controller", "" },
|
||||||
|
{"fe_arrows1", "" },
|
||||||
|
{"fe_arrows2", "" },
|
||||||
|
{"fe_arrows3", "" },
|
||||||
|
{"fe_arrows4", "" },
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MENU_X_RIGHT_ALIGNED(x) SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH - (x))
|
#define MENU_X_RIGHT_ALIGNED(x) SCALE_AND_CENTER_X(DEFAULT_SCREEN_WIDTH - (x))
|
||||||
@ -530,6 +541,10 @@ CMenuManager::CMenuManager()
|
|||||||
#ifdef NO_ISLAND_LOADING
|
#ifdef NO_ISLAND_LOADING
|
||||||
m_PrefsIslandLoading = ISLAND_LOADING_LOW;
|
m_PrefsIslandLoading = ISLAND_LOADING_LOW;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
m_PrefsControllerType = CONTROLLER_XBOXONE;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1078,7 +1093,7 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (aScreens[m_nCurrScreen].m_aEntries[i].m_Action) {
|
switch (aScreens[m_nCurrScreen].m_aEntries[i].m_Action) {
|
||||||
#ifdef LEGACY_MENU_OPTIONS
|
#ifdef GAMEPAD_MENU
|
||||||
case MENUACTION_CTRLVIBRATION:
|
case MENUACTION_CTRLVIBRATION:
|
||||||
if (m_PrefsUseVibration)
|
if (m_PrefsUseVibration)
|
||||||
rightText = TheText.Get("FEM_ON");
|
rightText = TheText.Get("FEM_ON");
|
||||||
@ -1127,18 +1142,34 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
|||||||
#else
|
#else
|
||||||
switch (m_PrefsUseWideScreen) {
|
switch (m_PrefsUseWideScreen) {
|
||||||
case AR_AUTO:
|
case AR_AUTO:
|
||||||
sprintf(asciiTemp, "AUTO");
|
rightText = TheText.Get("FEM_AUT");
|
||||||
break;
|
break;
|
||||||
case AR_4_3:
|
case AR_4_3:
|
||||||
sprintf(asciiTemp, "4:3");
|
sprintf(asciiTemp, "4:3");
|
||||||
|
AsciiToUnicode(asciiTemp, unicodeTemp);
|
||||||
|
rightText = unicodeTemp;
|
||||||
|
break;
|
||||||
|
case AR_5_4:
|
||||||
|
sprintf(asciiTemp, "5:4");
|
||||||
|
AsciiToUnicode(asciiTemp, unicodeTemp);
|
||||||
|
rightText = unicodeTemp;
|
||||||
|
break;
|
||||||
|
case AR_16_10:
|
||||||
|
sprintf(asciiTemp, "16:10");
|
||||||
|
AsciiToUnicode(asciiTemp, unicodeTemp);
|
||||||
|
rightText = unicodeTemp;
|
||||||
break;
|
break;
|
||||||
case AR_16_9:
|
case AR_16_9:
|
||||||
sprintf(asciiTemp, "16:9");
|
sprintf(asciiTemp, "16:9");
|
||||||
|
AsciiToUnicode(asciiTemp, unicodeTemp);
|
||||||
|
rightText = unicodeTemp;
|
||||||
|
break;
|
||||||
|
case AR_21_9:
|
||||||
|
sprintf(asciiTemp, "21:9");
|
||||||
|
AsciiToUnicode(asciiTemp, unicodeTemp);
|
||||||
|
rightText = unicodeTemp;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
AsciiToUnicode(asciiTemp, unicodeTemp);
|
|
||||||
rightText = unicodeTemp;
|
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1543,6 +1574,11 @@ CMenuManager::DrawStandardMenus(bool activeScreen)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (m_nCurrScreen) {
|
switch (m_nCurrScreen) {
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
case MENUPAGE_CONTROLLER_SETTINGS:
|
||||||
|
PrintController();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case MENUPAGE_STATS:
|
case MENUPAGE_STATS:
|
||||||
case MENUPAGE_CONTROLLER_PC:
|
case MENUPAGE_CONTROLLER_PC:
|
||||||
case MENUPAGE_SOUND_SETTINGS:
|
case MENUPAGE_SOUND_SETTINGS:
|
||||||
@ -1832,8 +1868,13 @@ CMenuManager::DrawControllerBound(int32 yStart, int32 xStart, int32 unused, int8
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Print bindings, including seperator (-) between them
|
// Print bindings, including seperator (-) between them
|
||||||
|
|
||||||
CFont::SetScale(MENU_X(0.25f), MENU_Y(LISTITEM_Y_SCALE));
|
CFont::SetScale(MENU_X(0.25f), MENU_Y(LISTITEM_Y_SCALE));
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
for (; contSetOrder < MAX_SETORDERS && controllerAction >= 0; contSetOrder++) {
|
||||||
|
#else
|
||||||
for (; contSetOrder < MAX_SETORDERS && controllerAction != -1; contSetOrder++) {
|
for (; contSetOrder < MAX_SETORDERS && controllerAction != -1; contSetOrder++) {
|
||||||
|
#endif
|
||||||
wchar *settingText = ControlsManager.GetControllerSettingTextWithOrderNumber((e_ControllerAction)controllerAction, (eContSetOrder)contSetOrder);
|
wchar *settingText = ControlsManager.GetControllerSettingTextWithOrderNumber((e_ControllerAction)controllerAction, (eContSetOrder)contSetOrder);
|
||||||
if (settingText) {
|
if (settingText) {
|
||||||
++bindingsForThisOpt;
|
++bindingsForThisOpt;
|
||||||
@ -2963,12 +3004,19 @@ CMenuManager::LoadAllTextures()
|
|||||||
CTxdStore::AddRef(frontendTxdSlot2);
|
CTxdStore::AddRef(frontendTxdSlot2);
|
||||||
CTxdStore::SetCurrentTxd(frontendTxdSlot2);
|
CTxdStore::SetCurrentTxd(frontendTxdSlot2);
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
for (int i = 3; i < MENUSPRITE_CONTROLLER; i++) {
|
||||||
|
#else
|
||||||
for (int i = 3; i < NUM_MENU_SPRITES; i++) {
|
for (int i = 3; i < NUM_MENU_SPRITES; i++) {
|
||||||
|
#endif
|
||||||
m_aFrontEndSprites[i].SetTexture(FrontendFilenames[i][0], FrontendFilenames[i][1]);
|
m_aFrontEndSprites[i].SetTexture(FrontendFilenames[i][0], FrontendFilenames[i][1]);
|
||||||
m_aFrontEndSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
|
m_aFrontEndSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
CTxdStore::PopCurrentTxd();
|
CTxdStore::PopCurrentTxd();
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
LoadController(m_PrefsControllerType);
|
||||||
|
#endif
|
||||||
CStreaming::IHaveUsedStreamingMemory();
|
CStreaming::IHaveUsedStreamingMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3123,7 +3171,11 @@ CMenuManager::SaveSettings()
|
|||||||
{
|
{
|
||||||
#ifndef LOAD_INI_SETTINGS
|
#ifndef LOAD_INI_SETTINGS
|
||||||
static char RubbishString[48] = "stuffmorestuffevenmorestuff etc";
|
static char RubbishString[48] = "stuffmorestuffevenmorestuff etc";
|
||||||
|
#ifdef BIND_VEHICLE_FIREWEAPON
|
||||||
|
static int SomeVersion = 4;
|
||||||
|
#else
|
||||||
static int SomeVersion = 3;
|
static int SomeVersion = 3;
|
||||||
|
#endif
|
||||||
|
|
||||||
CFileMgr::SetDirMyDocuments();
|
CFileMgr::SetDirMyDocuments();
|
||||||
|
|
||||||
@ -4917,6 +4969,16 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
|||||||
|
|
||||||
if (changeAmount != 0) {
|
if (changeAmount != 0) {
|
||||||
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
|
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
case MENUACTION_CTRLCONFIG:
|
||||||
|
CPad::GetPad(0)->Mode += changeAmount;
|
||||||
|
if (CPad::GetPad(0)->Mode > 3)
|
||||||
|
CPad::GetPad(0)->Mode = 0;
|
||||||
|
else if (CPad::GetPad(0)->Mode < 0)
|
||||||
|
CPad::GetPad(0)->Mode = 3;
|
||||||
|
SaveSettings();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case MENUACTION_RADIO:
|
case MENUACTION_RADIO:
|
||||||
ChangeRadioStation(changeAmount);
|
ChangeRadioStation(changeAmount);
|
||||||
break;
|
break;
|
||||||
@ -4931,12 +4993,12 @@ CMenuManager::ProcessUserInput(uint8 goDown, uint8 goUp, uint8 optionSelected, u
|
|||||||
case MENUACTION_WIDESCREEN:
|
case MENUACTION_WIDESCREEN:
|
||||||
if (changeAmount > 0) {
|
if (changeAmount > 0) {
|
||||||
m_PrefsUseWideScreen++;
|
m_PrefsUseWideScreen++;
|
||||||
if (m_PrefsUseWideScreen > 2)
|
if (m_PrefsUseWideScreen > AR_MAX - 1)
|
||||||
m_PrefsUseWideScreen = 0;
|
m_PrefsUseWideScreen = 0;
|
||||||
} else {
|
} else {
|
||||||
m_PrefsUseWideScreen--;
|
m_PrefsUseWideScreen--;
|
||||||
if (m_PrefsUseWideScreen < 0)
|
if (m_PrefsUseWideScreen < 0)
|
||||||
m_PrefsUseWideScreen = 2;
|
m_PrefsUseWideScreen = AR_MAX - 1;
|
||||||
}
|
}
|
||||||
SaveSettings();
|
SaveSettings();
|
||||||
break;
|
break;
|
||||||
@ -5058,14 +5120,14 @@ void
|
|||||||
CMenuManager::ProcessOnOffMenuOptions()
|
CMenuManager::ProcessOnOffMenuOptions()
|
||||||
{
|
{
|
||||||
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
|
switch (aScreens[m_nCurrScreen].m_aEntries[m_nCurrOption].m_Action) {
|
||||||
#ifdef LEGACY_MENU_OPTIONS
|
#ifdef GAMEPAD_MENU
|
||||||
case MENUACTION_CTRLVIBRATION:
|
case MENUACTION_CTRLVIBRATION:
|
||||||
m_PrefsUseVibration = !m_PrefsUseVibration;
|
m_PrefsUseVibration = !m_PrefsUseVibration;
|
||||||
break;
|
if (m_PrefsUseVibration) {
|
||||||
case MENUACTION_CTRLCONFIG:
|
CPad::GetPad(0)->StartShake(350, 150);
|
||||||
CPad::GetPad(0)->Mode++;
|
TimeToStopPadShaking = CTimer::GetTimeInMillisecondsPauseMode() + 500;
|
||||||
if (CPad::GetPad(0)->Mode > 3)
|
}
|
||||||
CPad::GetPad(0)->Mode = 0;
|
SaveSettings();
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case MENUACTION_INVERTPADY:
|
case MENUACTION_INVERTPADY:
|
||||||
@ -5449,6 +5511,9 @@ CMenuManager::SwitchMenuOnAndOff()
|
|||||||
}
|
}
|
||||||
Initialise();
|
Initialise();
|
||||||
LoadAllTextures();
|
LoadAllTextures();
|
||||||
|
#ifdef FIX_BUGS
|
||||||
|
CPad::StopPadsShaking();
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
#ifdef EXTENDED_COLOURFILTER
|
#ifdef EXTENDED_COLOURFILTER
|
||||||
// we always expect CPostFX to be open
|
// we always expect CPostFX to be open
|
||||||
@ -5531,6 +5596,14 @@ CMenuManager::SwitchMenuOnAndOff()
|
|||||||
|
|
||||||
m_bStartUpFrontEndRequested = false;
|
m_bStartUpFrontEndRequested = false;
|
||||||
m_bShutDownFrontEndRequested = false;
|
m_bShutDownFrontEndRequested = false;
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
// Reset pad shaking.
|
||||||
|
if (TimeToStopPadShaking && TimeToStopPadShaking < CTimer::GetTimeInMillisecondsPauseMode()) {
|
||||||
|
CPad::StopPadsShaking();
|
||||||
|
TimeToStopPadShaking = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -5564,6 +5637,13 @@ CMenuManager::UnloadTextures()
|
|||||||
m_aFrontEndSprites[i].Delete();
|
m_aFrontEndSprites[i].Delete();
|
||||||
|
|
||||||
CTxdStore::RemoveTxd(frontend2);
|
CTxdStore::RemoveTxd(frontend2);
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
// Unload controller txd
|
||||||
|
int frontend_controller = CTxdStore::FindTxdSlot("frontend_controller");
|
||||||
|
if (frontend_controller != -1)
|
||||||
|
CTxdStore::RemoveTxd(frontend_controller);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
m_bSpritesLoaded = false;
|
m_bSpritesLoaded = false;
|
||||||
@ -5625,7 +5705,7 @@ CMenuManager::DrawQuitGameScreen(void)
|
|||||||
if (splash == nil)
|
if (splash == nil)
|
||||||
splash = LoadSplash("OUTRO");
|
splash = LoadSplash("OUTRO");
|
||||||
|
|
||||||
m_aFrontEndSprites[MENUSPRITE_VCLOGO].Draw(CRect(MENU_X(28.0f), MENU_Y(8.0f), MENU_X(157.0f), MENU_Y(138.0f)), CRGBA(255, 255, 255, 255 - alpha));
|
m_aFrontEndSprites[MENUSPRITE_VCLOGO].Draw(CRect(SCREEN_STRETCH_X(28.0f), MENU_Y(8.0f), SCREEN_STRETCH_X(27.0f) + MENU_X(130.f), MENU_Y(138.0f)), CRGBA(255, 255, 255, 255 - alpha));
|
||||||
|
|
||||||
// Or we can see menu background from sides
|
// Or we can see menu background from sides
|
||||||
#ifdef ASPECT_RATIO_SCALE
|
#ifdef ASPECT_RATIO_SCALE
|
||||||
@ -5815,5 +5895,753 @@ uint8 CMenuManager::GetNumberOfMenuOptions()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
const char* controllerTypesPaths[] = {
|
||||||
|
"MODELS/FRONTEND_DS2.TXD",
|
||||||
|
"MODELS/FRONTEND_DS3.TXD",
|
||||||
|
"MODELS/FRONTEND_DS4.TXD",
|
||||||
|
"MODELS/FRONTEND_X360.TXD",
|
||||||
|
"MODELS/FRONTEND_XONE.TXD",
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
CMenuManager::PrintController(void)
|
||||||
|
{
|
||||||
|
// Don't print anything if controller texture is missing
|
||||||
|
if (!m_aFrontEndSprites[MENUSPRITE_CONTROLLER].m_pTexture) return;
|
||||||
|
|
||||||
|
const float scale = 0.9f;
|
||||||
|
const float CONTROLLER_SIZE_X = 235.2f;
|
||||||
|
const float CONTROLLER_SIZE_Y = 175.2f;
|
||||||
|
const float CONTROLLER_POS_X = (DEFAULT_SCREEN_WIDTH - CONTROLLER_SIZE_X) / 2.0f;
|
||||||
|
const float CONTROLLER_POS_Y = 220.0f;
|
||||||
|
|
||||||
|
float centerX = CONTROLLER_POS_X + CONTROLLER_SIZE_X / 2;
|
||||||
|
float centerY = CONTROLLER_POS_Y + CONTROLLER_SIZE_Y / 2;
|
||||||
|
|
||||||
|
#define X(f) ((f)*scale + centerX)
|
||||||
|
#define Y(f) ((f)*scale + centerY)
|
||||||
|
|
||||||
|
m_aFrontEndSprites[MENUSPRITE_CONTROLLER].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, FadeIn(255)));
|
||||||
|
if (m_DisplayControllerOnFoot) {
|
||||||
|
if ((int)CTimer::GetTimeInMillisecondsPauseMode() & 0x400)
|
||||||
|
m_aFrontEndSprites[MENUSPRITE_ARROWS1].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, FadeIn(255)));
|
||||||
|
else
|
||||||
|
m_aFrontEndSprites[MENUSPRITE_ARROWS3].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, FadeIn(255)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ((int)CTimer::GetTimeInMillisecondsPauseMode() & 0x400)
|
||||||
|
m_aFrontEndSprites[MENUSPRITE_ARROWS2].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, FadeIn(255)));
|
||||||
|
else
|
||||||
|
m_aFrontEndSprites[MENUSPRITE_ARROWS4].Draw(MENU_X_LEFT_ALIGNED(X(-CONTROLLER_SIZE_X / 2)), MENU_Y(Y(-CONTROLLER_SIZE_Y / 2)), MENU_X(CONTROLLER_SIZE_X * scale), MENU_Y(CONTROLLER_SIZE_Y * scale), CRGBA(255, 255, 255, FadeIn(255)));
|
||||||
|
}
|
||||||
|
|
||||||
|
CFont::SetFontStyle(FONT_LOCALE(FONT_STANDARD));
|
||||||
|
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.9f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.9f)); // X
|
||||||
|
|
||||||
|
CFont::SetDropColor(CRGBA(0, 0, 0, FadeIn(255)));
|
||||||
|
CFont::SetDropShadowPosition(0);
|
||||||
|
CFont::SetColor(CRGBA(0, 0, 0, FadeIn(255)));
|
||||||
|
CFont::SetWrapx(SCREEN_WIDTH);
|
||||||
|
|
||||||
|
float TEXT_L2_X = 85.0f + CONTROLLER_POS_X - centerX, TEXT_L2_Y = -14.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_L1_X = -4.0f + CONTROLLER_POS_X - centerX, TEXT_L1_Y = 27.0f + CONTROLLER_POS_Y - centerY, TEXT_L1_Y_VEH = 3.0f + TEXT_L1_Y;
|
||||||
|
float TEXT_DPAD_X = -4.0f + CONTROLLER_POS_X - centerX, TEXT_DPAD_Y = 67.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_LSTICK_X = -4.0f + CONTROLLER_POS_X - centerX, TEXT_LSTICK_Y = 97.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_SELECT_X = 170.0f + CONTROLLER_POS_X - centerX, TEXT_SELECT_Y = 141.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_START_X = 130.0f + CONTROLLER_POS_X - centerX, TEXT_START_Y = 128.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_R2_X = 164.0f + CONTROLLER_POS_X - centerX, TEXT_R2_Y = -14.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_R1_X = 242.0f + CONTROLLER_POS_X - centerX, TEXT_R1_Y = 27.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
|
||||||
|
float TEXT_SQUARE_X = 147.0f + CONTROLLER_POS_X - centerX, TEXT_SQUARE_Y = 30.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_TRIANGLE_X = 242.0f + CONTROLLER_POS_X - centerX, TEXT_TRIANGLE_Y = 55.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_CIRCLE_X = 242.0f + CONTROLLER_POS_X - centerX, TEXT_CIRCLE_Y = 67.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_CROSS_X = 242.0f + CONTROLLER_POS_X - centerX, TEXT_CROSS_Y = 80.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_RSTICK_X = 242.0f + CONTROLLER_POS_X - centerX, TEXT_RSTICK_Y = 97.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_R3_X = 242.0f + CONTROLLER_POS_X - centerX, TEXT_R3_Y = 110.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_L3_X = 94.0f + CONTROLLER_POS_X - centerX, TEXT_L3_Y = 162.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
float TEXT_L2R2_X = 120.0f + CONTROLLER_POS_X - centerX, TEXT_L2R2_Y = -4.0f + CONTROLLER_POS_Y - centerY;
|
||||||
|
|
||||||
|
switch (m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CONTROLLER_DUALSHOCK4:
|
||||||
|
TEXT_L1_Y += 7.0f;
|
||||||
|
TEXT_L1_Y_VEH = TEXT_L1_Y;
|
||||||
|
TEXT_R1_Y += 7.0f;
|
||||||
|
TEXT_TRIANGLE_Y -= 1.0f;
|
||||||
|
TEXT_CIRCLE_Y -= 1.0f;
|
||||||
|
TEXT_CROSS_Y -= 1.0f;
|
||||||
|
TEXT_RSTICK_Y -= 4.0f;
|
||||||
|
TEXT_R3_Y -= 4.0f;
|
||||||
|
TEXT_DPAD_Y -= 2.0f;
|
||||||
|
TEXT_LSTICK_Y -= 6.0f;
|
||||||
|
TEXT_L3_X -= 2.0f;
|
||||||
|
break;
|
||||||
|
case CONTROLLER_XBOXONE:
|
||||||
|
TEXT_L2_X -= 2.0f;
|
||||||
|
TEXT_R2_X += 2.0f;
|
||||||
|
TEXT_L1_Y += 15.0f;
|
||||||
|
TEXT_L1_Y_VEH = TEXT_L1_Y;
|
||||||
|
TEXT_R1_Y += 15.0f;
|
||||||
|
TEXT_TRIANGLE_Y += 4.0f;
|
||||||
|
TEXT_CIRCLE_Y += 4.0f;
|
||||||
|
TEXT_CROSS_Y += 4.0f;
|
||||||
|
TEXT_RSTICK_Y += 1.0f;
|
||||||
|
TEXT_R3_Y += 1.0f;
|
||||||
|
TEXT_DPAD_Y += 29.0f;
|
||||||
|
TEXT_LSTICK_Y -= 20.0f;
|
||||||
|
TEXT_L3_X -= 36.0f;
|
||||||
|
TEXT_L2R2_Y += 5.0f;
|
||||||
|
TEXT_SELECT_X += 4.0f;
|
||||||
|
break;
|
||||||
|
case CONTROLLER_XBOX360:
|
||||||
|
TEXT_L2_X += 8.0f;
|
||||||
|
TEXT_R2_X -= 8.0f;
|
||||||
|
TEXT_L1_Y += 15.0f;
|
||||||
|
TEXT_L1_Y_VEH = TEXT_L1_Y;
|
||||||
|
TEXT_R1_Y += 15.0f;
|
||||||
|
TEXT_TRIANGLE_Y += 4.0f;
|
||||||
|
TEXT_CIRCLE_Y += 4.0f;
|
||||||
|
TEXT_CROSS_Y += 4.0f;
|
||||||
|
TEXT_RSTICK_Y += 4.0f;
|
||||||
|
TEXT_R3_Y += 4.0f;
|
||||||
|
TEXT_DPAD_Y += 30.0f;
|
||||||
|
TEXT_LSTICK_Y -= 19.0f;
|
||||||
|
TEXT_L3_X -= 36.0f;
|
||||||
|
TEXT_L2R2_Y += 5.0f;
|
||||||
|
TEXT_SELECT_X += 3.0f;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (m_DisplayControllerOnFoot) {
|
||||||
|
switch (CPad::GetPad(0)->Mode) {
|
||||||
|
case 0:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_L2_X -= 45.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)) - SCREEN_SCALE_X(85));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_LOF"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_MOV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_CR3"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 15.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_R2_X += 30.0f;
|
||||||
|
CFont::SetJustifyOff();
|
||||||
|
CFont::SetWrapx(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)) + SCREEN_SCALE_X(120));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::SetWrapx(SCREEN_WIDTH);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_ATT"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_L2_X -= 45.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)) - SCREEN_SCALE_X(85));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_LOF"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_CR3"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_NA"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X - 50)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_NA"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_R2_X += 30.0f;
|
||||||
|
CFont::SetJustifyOff();
|
||||||
|
CFont::SetWrapx(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)) + SCREEN_SCALE_X(120));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::SetWrapx(SCREEN_WIDTH);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_ATT"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_L2_X -= 45.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)) - SCREEN_SCALE_X(85));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_ENV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_MOV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_CR3"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 15.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_R2_X += 30.0f;
|
||||||
|
CFont::SetJustifyOff();
|
||||||
|
CFont::SetWrapx(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)) + SCREEN_SCALE_X(120));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::SetWrapx(SCREEN_WIDTH);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_TAR"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_LOF"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_RUN"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ATT"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_L2_X -= 45.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)) - SCREEN_SCALE_X(85));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_CWL"));
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y)), TheText.Get("FEC_TAR"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_NA"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_MOV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_CR3"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 15.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_R2_X += 30.0f;
|
||||||
|
CFont::SetJustifyOff();
|
||||||
|
CFont::SetWrapx(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)) + SCREEN_SCALE_X(120));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_CWR"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::SetWrapx(SCREEN_WIDTH);
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_ATT"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_JUM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_ENV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_LOF"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_RUN"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_FPC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_LB3"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y + 13.0f)), TheText.Get("FEC_R3"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CFont::SetCentreOn();
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_ITALIAN:
|
||||||
|
if (m_PrefsControllerType != CONTROLLER_XBOX360)
|
||||||
|
break;
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(0.0f)), MENU_Y(Y(TEXT_L2R2_Y)), TheText.Get("FEC_LB"));
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.9f), MENU_Y(SMALLESTTEXT_Y_SCALE* scale * 0.9f));
|
||||||
|
switch (CPad::GetPad(0)->Mode) {
|
||||||
|
case 0:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_RSC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_VES"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_HO3"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SELECT_X -= 5.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 15.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)) - SCREEN_SCALE_X(80));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_HAB"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_EXV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_CAW"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ACC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_TUC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_SM3"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CONTROLLER_XBOXONE:
|
||||||
|
case CONTROLLER_XBOX360:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SQUARE_X += 3.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(90));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SQUARE_X += 18.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(90));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SQUARE_X -= 15.0f;
|
||||||
|
TEXT_SQUARE_Y += 5.0f;
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SQUARE_X -= 15.0f;
|
||||||
|
TEXT_SQUARE_Y += 10.0f;
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE* scale * 0.65f));
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SQUARE_X += 15.0f;
|
||||||
|
case LANGUAGE_ITALIAN:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(100));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_BRA"));
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_HOR"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_NA"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 12.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)) - SCREEN_SCALE_X(80));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_RSC"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_HAB"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_EXV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_CAW"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ACC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_TUC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_SM3"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CONTROLLER_XBOXONE:
|
||||||
|
case CONTROLLER_XBOX360:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SQUARE_X += 3.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(90));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SQUARE_X += 18.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(90));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SQUARE_X -= 15.0f;
|
||||||
|
TEXT_SQUARE_Y += 5.0f;
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SQUARE_X -= 15.0f;
|
||||||
|
TEXT_SQUARE_Y += 10.0f;
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SQUARE_X += 15.0f;
|
||||||
|
case LANGUAGE_ITALIAN:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(100));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_BRA"));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_EXV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_VES"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_RS3"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SELECT_X -= 5.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 15.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)) - SCREEN_SCALE_X(80));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_HOR"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_HAB"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_CAW"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_ACC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_TUC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_SM3"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
switch (m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CONTROLLER_XBOXONE:
|
||||||
|
case CONTROLLER_XBOX360:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SQUARE_X += 3.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(90));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SQUARE_X += 18.0f;
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(90));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SQUARE_X -= 15.0f;
|
||||||
|
TEXT_SQUARE_Y += 5.0f;
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SQUARE_X -= 15.0f;
|
||||||
|
TEXT_SQUARE_Y += 10.0f;
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(60));
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SQUARE_X += 15.0f;
|
||||||
|
case LANGUAGE_ITALIAN:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
default:
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)) - SCREEN_SCALE_X(100));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_BRA"));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L2_X)), MENU_Y(Y(TEXT_L2_Y)), TheText.Get("FEC_LL"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L1_X)), MENU_Y(Y(TEXT_L1_Y_VEH)), TheText.Get("FEC_HAB"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_DPAD_X)), MENU_Y(Y(TEXT_DPAD_Y)), TheText.Get("FEC_TUC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_LSTICK_X)), MENU_Y(Y(TEXT_LSTICK_Y)), TheText.Get("FEC_VES"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_L3_X)), MENU_Y(Y(TEXT_L3_Y)), TheText.Get("FEC_HO3"));
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
TEXT_SELECT_X -= 5.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SELECT_X += 20.0f;
|
||||||
|
break;
|
||||||
|
case LANGUAGE_SPANISH:
|
||||||
|
TEXT_SELECT_X += 15.0f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
CFont::SetRightJustifyWrap(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)) - SCREEN_SCALE_X(80));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_SELECT_X)), MENU_Y(Y(TEXT_SELECT_Y)), TheText.Get("FEC_CAM"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_START_X)), MENU_Y(Y(TEXT_START_Y)), TheText.Get("FEC_PAU"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R2_X)), MENU_Y(Y(TEXT_R2_Y)), TheText.Get("FEC_LR"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R1_X)), MENU_Y(Y(TEXT_R1_Y)), TheText.Get("FEC_CAW"));
|
||||||
|
CFont::SetJustifyOn();
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_TRIANGLE_X)), MENU_Y(Y(TEXT_TRIANGLE_Y)), TheText.Get("FEC_EXV"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CIRCLE_X)), MENU_Y(Y(TEXT_CIRCLE_Y)), TheText.Get("FEC_RSC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_CROSS_X)), MENU_Y(Y(TEXT_CROSS_Y)), TheText.Get("FEC_NA"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_RSTICK_X)), MENU_Y(Y(TEXT_RSTICK_Y)), TheText.Get("FEC_ACC"));
|
||||||
|
CFont::PrintString(MENU_X_LEFT_ALIGNED(X(TEXT_R3_X)), MENU_Y(Y(TEXT_R3_Y)), TheText.Get("FEC_BRA"));
|
||||||
|
CFont::SetRightJustifyOn();
|
||||||
|
CFont::SetRightJustifyWrap(0);
|
||||||
|
switch (m_PrefsControllerType)
|
||||||
|
{
|
||||||
|
case CONTROLLER_XBOXONE:
|
||||||
|
case CONTROLLER_XBOX360:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_SMT"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
switch (m_PrefsLanguage)
|
||||||
|
{
|
||||||
|
case LANGUAGE_GERMAN:
|
||||||
|
TEXT_SQUARE_X += 5.0f;
|
||||||
|
case LANGUAGE_FRENCH:
|
||||||
|
case LANGUAGE_ITALIAN:
|
||||||
|
CFont::SetScale(MENU_X(SMALLESTTEXT_X_SCALE * 2 * scale * 0.65f), MENU_Y(SMALLESTTEXT_Y_SCALE * scale * 0.65f));
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_SMT"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::PrintStringFromBottom(MENU_X_LEFT_ALIGNED(X(TEXT_SQUARE_X + 16.0f)), MENU_Y(Y(TEXT_SQUARE_Y)), TheText.Get("FEC_SMT"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CFont::SetDropShadowPosition(0); // X
|
||||||
|
|
||||||
|
#undef X
|
||||||
|
#undef Y
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
CMenuManager::LoadController(int8 type)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case CONTROLLER_DUALSHOCK2:
|
||||||
|
case CONTROLLER_DUALSHOCK3:
|
||||||
|
case CONTROLLER_DUALSHOCK4:
|
||||||
|
CFont::LoadButtons("MODELS/PS3BTNS.TXD");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CFont::LoadButtons("MODELS/X360BTNS.TXD");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unload current textures
|
||||||
|
for (int i = MENUSPRITE_CONTROLLER; i <= MENUSPRITE_ARROWS4; i++)
|
||||||
|
m_aFrontEndSprites[i].Delete();
|
||||||
|
|
||||||
|
// Unload txd
|
||||||
|
int frontend_controller = CTxdStore::FindTxdSlot("frontend_controller");
|
||||||
|
if (frontend_controller != -1)
|
||||||
|
CTxdStore::RemoveTxd(frontend_controller);
|
||||||
|
|
||||||
|
// Find the new txd to load
|
||||||
|
bool bTxdMissing = true;
|
||||||
|
if (controllerTypesPaths[type])
|
||||||
|
if (int file = CFileMgr::OpenFile(controllerTypesPaths[type])) {
|
||||||
|
CFileMgr::CloseFile(file);
|
||||||
|
bTxdMissing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int txdSlot = -1;
|
||||||
|
|
||||||
|
if (bTxdMissing)
|
||||||
|
// Not found, fall back to original textures
|
||||||
|
txdSlot = CTxdStore::FindTxdSlot("frontend2");
|
||||||
|
else {
|
||||||
|
// Found, load txd
|
||||||
|
txdSlot = frontend_controller;
|
||||||
|
if (txdSlot == -1)
|
||||||
|
txdSlot = CTxdStore::AddTxdSlot("frontend_controller");
|
||||||
|
CTxdStore::LoadTxd(txdSlot, controllerTypesPaths[type]);
|
||||||
|
CTxdStore::AddRef(txdSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(txdSlot != -1);
|
||||||
|
// Load new textures
|
||||||
|
CTxdStore::SetCurrentTxd(txdSlot);
|
||||||
|
for (int i = MENUSPRITE_CONTROLLER; i <= MENUSPRITE_ARROWS4; i++) {
|
||||||
|
m_aFrontEndSprites[i].SetTexture(FrontendFilenames[i][0], FrontendFilenames[i][1]);
|
||||||
|
m_aFrontEndSprites[i].SetAddressing(rwTEXTUREADDRESSBORDER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif // GAMEPAD_MENU
|
||||||
|
|
||||||
#undef GetBackJustUp
|
#undef GetBackJustUp
|
||||||
#undef GetBackJustDown
|
#undef GetBackJustDown
|
||||||
|
@ -137,6 +137,13 @@ enum eMenuSprites
|
|||||||
MENUSPRITE_DOWNON,
|
MENUSPRITE_DOWNON,
|
||||||
MENUSPRITE_UPOFF,
|
MENUSPRITE_UPOFF,
|
||||||
MENUSPRITE_UPON,
|
MENUSPRITE_UPON,
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
MENUSPRITE_CONTROLLER,
|
||||||
|
MENUSPRITE_ARROWS1,
|
||||||
|
MENUSPRITE_ARROWS2,
|
||||||
|
MENUSPRITE_ARROWS3,
|
||||||
|
MENUSPRITE_ARROWS4,
|
||||||
|
#endif
|
||||||
NUM_MENU_SPRITES
|
NUM_MENU_SPRITES
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -192,8 +199,10 @@ enum eMenuScreen
|
|||||||
MENUPAGE_MOUSE_CONTROLS = 31,
|
MENUPAGE_MOUSE_CONTROLS = 31,
|
||||||
MENUPAGE_PAUSE_MENU = 32,
|
MENUPAGE_PAUSE_MENU = 32,
|
||||||
MENUPAGE_NONE = 33, // Then chooses main menu or pause menu
|
MENUPAGE_NONE = 33, // Then chooses main menu or pause menu
|
||||||
#ifdef LEGACY_MENU_OPTIONS
|
#ifdef GAMEPAD_MENU
|
||||||
MENUPAGE_CONTROLLER_SETTINGS,
|
MENUPAGE_CONTROLLER_SETTINGS,
|
||||||
|
#endif
|
||||||
|
#ifdef LEGACY_MENU_OPTIONS
|
||||||
MENUPAGE_DEBUG_MENU,
|
MENUPAGE_DEBUG_MENU,
|
||||||
MENUPAGE_CONTROLLER_PC_OLD1,
|
MENUPAGE_CONTROLLER_PC_OLD1,
|
||||||
MENUPAGE_CONTROLLER_PC_OLD2,
|
MENUPAGE_CONTROLLER_PC_OLD2,
|
||||||
@ -206,7 +215,7 @@ enum eMenuScreen
|
|||||||
#ifdef GRAPHICS_MENU_OPTIONS
|
#ifdef GRAPHICS_MENU_OPTIONS
|
||||||
MENUPAGE_GRAPHICS_SETTINGS,
|
MENUPAGE_GRAPHICS_SETTINGS,
|
||||||
#endif
|
#endif
|
||||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
MENUPAGE_DETECT_JOYSTICK,
|
MENUPAGE_DETECT_JOYSTICK,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -275,7 +284,7 @@ enum eMenuAction
|
|||||||
MENUACTION_DRAWDIST,
|
MENUACTION_DRAWDIST,
|
||||||
MENUACTION_MOUSESENS,
|
MENUACTION_MOUSESENS,
|
||||||
MENUACTION_MP3VOLUMEBOOST,
|
MENUACTION_MP3VOLUMEBOOST,
|
||||||
#ifdef LEGACY_MENU_OPTIONS
|
#ifdef GAMEPAD_MENU
|
||||||
MENUACTION_CTRLVIBRATION,
|
MENUACTION_CTRLVIBRATION,
|
||||||
MENUACTION_CTRLCONFIG,
|
MENUACTION_CTRLCONFIG,
|
||||||
#endif
|
#endif
|
||||||
@ -671,6 +680,18 @@ public:
|
|||||||
int8 m_nDisplayMSAALevel;
|
int8 m_nDisplayMSAALevel;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
CONTROLLER_DUALSHOCK2 = 0,
|
||||||
|
CONTROLLER_DUALSHOCK3,
|
||||||
|
CONTROLLER_DUALSHOCK4,
|
||||||
|
CONTROLLER_XBOX360,
|
||||||
|
CONTROLLER_XBOXONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
int8 m_PrefsControllerType;
|
||||||
|
#endif
|
||||||
enum LANGUAGE
|
enum LANGUAGE
|
||||||
{
|
{
|
||||||
LANGUAGE_AMERICAN,
|
LANGUAGE_AMERICAN,
|
||||||
@ -795,6 +816,10 @@ public:
|
|||||||
int8 GetPreviousPageOption();
|
int8 GetPreviousPageOption();
|
||||||
|
|
||||||
// uint8 GetNumberOfMenuOptions();
|
// uint8 GetNumberOfMenuOptions();
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
void LoadController(int8 type);
|
||||||
|
void PrintController(void);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef IMPROVED_VIDEOMODE
|
#ifndef IMPROVED_VIDEOMODE
|
||||||
|
@ -381,6 +381,11 @@ bool CGame::Initialise(const char* datFile)
|
|||||||
CTxdStore::Create(gameTxdSlot);
|
CTxdStore::Create(gameTxdSlot);
|
||||||
CTxdStore::AddRef(gameTxdSlot);
|
CTxdStore::AddRef(gameTxdSlot);
|
||||||
|
|
||||||
|
#ifdef EXTENDED_PIPELINES
|
||||||
|
// for generic fallback
|
||||||
|
CustomPipes::SetTxdFindCallback();
|
||||||
|
#endif
|
||||||
|
|
||||||
LoadingScreen("Loading the Game", "Loading particles", nil);
|
LoadingScreen("Loading the Game", "Loading particles", nil);
|
||||||
int particleTxdSlot = CTxdStore::AddTxdSlot("particle");
|
int particleTxdSlot = CTxdStore::AddTxdSlot("particle");
|
||||||
CTxdStore::LoadTxd(particleTxdSlot, "MODELS/PARTICLE.TXD");
|
CTxdStore::LoadTxd(particleTxdSlot, "MODELS/PARTICLE.TXD");
|
||||||
@ -440,10 +445,7 @@ bool CGame::Initialise(const char* datFile)
|
|||||||
|
|
||||||
CFileLoader::LoadLevel("DATA\\DEFAULT.DAT");
|
CFileLoader::LoadLevel("DATA\\DEFAULT.DAT");
|
||||||
CFileLoader::LoadLevel(datFile);
|
CFileLoader::LoadLevel(datFile);
|
||||||
#ifdef EXTENDED_PIPELINES
|
|
||||||
// for generic fallback
|
|
||||||
CustomPipes::SetTxdFindCallback();
|
|
||||||
#endif
|
|
||||||
LoadingScreen("Loading the Game", "Add Particles", nil);
|
LoadingScreen("Loading the Game", "Add Particles", nil);
|
||||||
CWorld::AddParticles();
|
CWorld::AddParticles();
|
||||||
CVehicleModelInfo::LoadVehicleColours();
|
CVehicleModelInfo::LoadVehicleColours();
|
||||||
|
@ -277,13 +277,6 @@ CMenuScreen aScreens[] = {
|
|||||||
{ "", 0, 0, },
|
{ "", 0, 0, },
|
||||||
|
|
||||||
#ifdef LEGACY_MENU_OPTIONS
|
#ifdef LEGACY_MENU_OPTIONS
|
||||||
// MENUPAGE_CONTROLLER_SETTINGS
|
|
||||||
{ "FET_CON", MENUPAGE_OPTIONS, 0,
|
|
||||||
MENUACTION_CTRLCONFIG, "FEC_CCF", SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS, 0, 0, 0,
|
|
||||||
MENUACTION_CTRLVIBRATION, "FEC_VIB", SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS, 0, 0, 0,
|
|
||||||
MENUACTION_GOBACK, "FEDS_TB", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
|
||||||
},
|
|
||||||
|
|
||||||
// MENUPAGE_DEBUG_MENU
|
// MENUPAGE_DEBUG_MENU
|
||||||
{ "FED_DBG", MENUPAGE_NONE, 0,
|
{ "FED_DBG", MENUPAGE_NONE, 0,
|
||||||
MENUACTION_RELOADIDE, "FED_RID", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
MENUACTION_RELOADIDE, "FED_RID", SAVESLOT_NONE, MENUPAGE_NONE, 0, 0, 0,
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#if defined DETECT_JOYSTICK_MENU && defined XINPUT
|
||||||
|
#include <windows.h>
|
||||||
|
#include <xinput.h>
|
||||||
|
#if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
|
||||||
|
#pragma comment( lib, "Xinput9_1_0.lib" )
|
||||||
|
#else
|
||||||
|
#pragma comment( lib, "Xinput.lib" )
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "crossplatform.h"
|
#include "crossplatform.h"
|
||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
@ -69,11 +78,17 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef INVERT_LOOK_FOR_PAD
|
#ifdef INVERT_LOOK_FOR_PAD
|
||||||
#define INVERT_PAD_SELECTOR MENUACTION_CFO_SELECT, "FEC_ILU", { new CCFOSelect((int8*)&CPad::bInvertLook4Pad, "Controller", "InvertPad", off_on, 2, false) }, 150, 0, MENUALIGN_LEFT,
|
#define INVERT_PAD_SELECTOR MENUACTION_CFO_SELECT, "FEC_ILU", { new CCFOSelect((int8*)&CPad::bInvertLook4Pad, "Controller", "InvertPad", off_on, 2, false) }, 0, 0, MENUALIGN_LEFT,
|
||||||
#else
|
#else
|
||||||
#define INVERT_PAD_SELECTOR
|
#define INVERT_PAD_SELECTOR
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
#define SELECT_CONTROLLER_TYPE MENUACTION_CFO_SELECT, "FEC_TYP", { new CCFOSelect((int8*)&FrontEndMenuManager.m_PrefsControllerType, "Controller", "Type", controllerTypes, ARRAY_SIZE(controllerTypes), false, ControllerTypeAfterChange) }, 0, 0, MENUALIGN_LEFT,
|
||||||
|
#else
|
||||||
|
#define SELECT_CONTROLLER_TYPE
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *filterNames[] = { "FEM_NON", "FEM_SIM", "FEM_NRM", "FEM_MOB" };
|
const char *filterNames[] = { "FEM_NON", "FEM_SIM", "FEM_NRM", "FEM_MOB" };
|
||||||
const char *off_on[] = { "FEM_OFF", "FEM_ON" };
|
const char *off_on[] = { "FEM_OFF", "FEM_ON" };
|
||||||
|
|
||||||
@ -277,11 +292,13 @@ void ScreenModeAfterChange(int8 before, int8 after)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
wchar selectedJoystickUnicode[128];
|
wchar selectedJoystickUnicode[128];
|
||||||
int cachedButtonNum = -1;
|
int cachedButtonNum = -1;
|
||||||
|
|
||||||
wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
|
wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
|
||||||
|
|
||||||
|
#if defined RW_GL3 && !defined LIBRW_SDL2
|
||||||
int numButtons;
|
int numButtons;
|
||||||
int found = -1;
|
int found = -1;
|
||||||
const char *joyname;
|
const char *joyname;
|
||||||
@ -312,6 +329,37 @@ wchar* DetectJoystickDraw(bool* disabled, bool userHovering) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PSGLOBAL(joy1id) == -1)
|
if (PSGLOBAL(joy1id) == -1)
|
||||||
|
#elif defined XINPUT
|
||||||
|
int found = -1;
|
||||||
|
XINPUT_STATE xstate;
|
||||||
|
memset(&xstate, 0, sizeof(XINPUT_STATE));
|
||||||
|
if (userHovering) {
|
||||||
|
for (int i = 0; i <= 3; i++) {
|
||||||
|
if (XInputGetState(i, &xstate) == ERROR_SUCCESS) {
|
||||||
|
if (xstate.Gamepad.bLeftTrigger || xstate.Gamepad.bRightTrigger) {
|
||||||
|
found = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
for (int j = XINPUT_GAMEPAD_DPAD_UP; j != XINPUT_GAMEPAD_Y << 1; j = (j << 1)) {
|
||||||
|
if (xstate.Gamepad.wButtons & j) {
|
||||||
|
found = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found != -1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found != -1 && CPad::XInputJoy1 != found) {
|
||||||
|
// We should never leave pads -1, so we can process them when they're connected and kinda support hotplug.
|
||||||
|
CPad::XInputJoy2 = (CPad::XInputJoy1 == -1 ? (found + 1) % 4 : CPad::XInputJoy1);
|
||||||
|
CPad::XInputJoy1 = found;
|
||||||
|
cachedButtonNum = 0; // fake too, because xinput bypass CControllerConfig
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sprintf(gSelectedJoystickName, "%d", CPad::XInputJoy1); // fake, on xinput we only store gamepad ids(thanks MS) so this is a temp variable to be used below
|
||||||
|
if (CPad::XInputJoy1 == -1)
|
||||||
|
#endif
|
||||||
AsciiToUnicode("Not found", selectedJoystickUnicode);
|
AsciiToUnicode("Not found", selectedJoystickUnicode);
|
||||||
else
|
else
|
||||||
AsciiToUnicode(gSelectedJoystickName, selectedJoystickUnicode);
|
AsciiToUnicode(gSelectedJoystickName, selectedJoystickUnicode);
|
||||||
@ -332,6 +380,14 @@ void DetectJoystickGoBack() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
const char* controllerTypes[] = { "FEC_DS2", "FEC_DS3", "FEC_DS4", "FEC_360", "FEC_ONE" };
|
||||||
|
void ControllerTypeAfterChange(int8 before, int8 after)
|
||||||
|
{
|
||||||
|
FrontEndMenuManager.LoadController(after);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
CMenuScreenCustom aScreens[] = {
|
CMenuScreenCustom aScreens[] = {
|
||||||
// MENUPAGE_STATS = 0
|
// MENUPAGE_STATS = 0
|
||||||
{ "FEH_STA", MENUPAGE_NONE, nil, nil,
|
{ "FEH_STA", MENUPAGE_NONE, nil, nil,
|
||||||
@ -567,11 +623,13 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
#else
|
#else
|
||||||
MENUACTION_KEYBOARDCTRLS,"FEC_RED", {nil, SAVESLOT_NONE, MENUPAGE_KEYBOARD_CONTROLS}, 320, 150, MENUALIGN_CENTER,
|
MENUACTION_KEYBOARDCTRLS,"FEC_RED", {nil, SAVESLOT_NONE, MENUPAGE_KEYBOARD_CONTROLS}, 320, 150, MENUALIGN_CENTER,
|
||||||
#endif
|
#endif
|
||||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
#ifdef GAMEPAD_MENU
|
||||||
|
MENUACTION_CHANGEMENU, "FET_AGS", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||||
|
#endif
|
||||||
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
MENUACTION_CHANGEMENU, "FEC_JOD", {nil, SAVESLOT_NONE, MENUPAGE_DETECT_JOYSTICK}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_CHANGEMENU, "FEC_JOD", {nil, SAVESLOT_NONE, MENUPAGE_DETECT_JOYSTICK}, 0, 0, MENUALIGN_CENTER,
|
||||||
#endif
|
#endif
|
||||||
MENUACTION_CHANGEMENU, "FEC_MOU", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_CHANGEMENU, "FEC_MOU", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 0, 0, MENUALIGN_CENTER,
|
||||||
INVERT_PAD_SELECTOR
|
|
||||||
MENUACTION_RESTOREDEF, "FET_DEF", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC}, 320, 0, MENUALIGN_CENTER,
|
MENUACTION_RESTOREDEF, "FET_DEF", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_PC}, 320, 0, MENUALIGN_CENTER,
|
||||||
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, 0}, 320, 0, MENUALIGN_CENTER,
|
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, 0}, 320, 0, MENUALIGN_CENTER,
|
||||||
},
|
},
|
||||||
@ -582,7 +640,7 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
MENUACTION_LOADRADIO, "FEO_AUD", {nil, SAVESLOT_NONE, MENUPAGE_SOUND_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_LOADRADIO, "FEO_AUD", {nil, SAVESLOT_NONE, MENUPAGE_SOUND_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||||
MENUACTION_CHANGEMENU, "FEO_DIS", {nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_CHANGEMENU, "FEO_DIS", {nil, SAVESLOT_NONE, MENUPAGE_DISPLAY_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||||
#ifdef GRAPHICS_MENU_OPTIONS
|
#ifdef GRAPHICS_MENU_OPTIONS
|
||||||
MENUACTION_CHANGEMENU, "FET_GRA", {nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_CHANGEMENU, "FET_GFX", {nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||||
#endif
|
#endif
|
||||||
MENUACTION_CHANGEMENU, "FEO_LAN", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_CHANGEMENU, "FEO_LAN", {nil, SAVESLOT_NONE, MENUPAGE_LANGUAGE_SETTINGS}, 0, 0, MENUALIGN_CENTER,
|
||||||
MENUACTION_PLAYERSETUP, "FET_PS", {nil, SAVESLOT_NONE, MENUPAGE_SKIN_SELECT}, 0, 0, MENUALIGN_CENTER,
|
MENUACTION_PLAYERSETUP, "FET_PS", {nil, SAVESLOT_NONE, MENUPAGE_SKIN_SELECT}, 0, 0, MENUALIGN_CENTER,
|
||||||
@ -611,8 +669,12 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
{ "FEC_MOU", MENUPAGE_CONTROLLER_PC, nil, nil,
|
{ "FEC_MOU", MENUPAGE_CONTROLLER_PC, nil, nil,
|
||||||
MENUACTION_MOUSESENS, "FEC_MSH", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 40, 170, MENUALIGN_LEFT,
|
MENUACTION_MOUSESENS, "FEC_MSH", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 40, 170, MENUALIGN_LEFT,
|
||||||
MENUACTION_INVVERT, "FEC_IVV", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 0, 0, MENUALIGN_LEFT,
|
MENUACTION_INVVERT, "FEC_IVV", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 0, 0, MENUALIGN_LEFT,
|
||||||
|
#ifndef GAMEPAD_MENU
|
||||||
|
INVERT_PAD_SELECTOR
|
||||||
|
#endif
|
||||||
MENUACTION_MOUSESTEER, "FET_MST", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 0, 0, MENUALIGN_LEFT,
|
MENUACTION_MOUSESTEER, "FET_MST", {nil, SAVESLOT_NONE, MENUPAGE_MOUSE_CONTROLS}, 0, 0, MENUALIGN_LEFT,
|
||||||
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, 0}, 320, 260, MENUALIGN_CENTER,
|
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, 0}, 320, 0, MENUALIGN_CENTER,
|
||||||
|
//MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, 0}, 320, 260, MENUALIGN_CENTER, // original y
|
||||||
},
|
},
|
||||||
|
|
||||||
// MENUPAGE_PAUSE_MENU = 32
|
// MENUPAGE_PAUSE_MENU = 32
|
||||||
@ -629,15 +691,17 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
// MENUPAGE_NONE = 33
|
// MENUPAGE_NONE = 33
|
||||||
{ "", 0, nil, nil, },
|
{ "", 0, nil, nil, },
|
||||||
|
|
||||||
|
#ifdef GAMEPAD_MENU
|
||||||
|
{ "FET_AGS", MENUPAGE_CONTROLLER_PC, new CCustomScreenLayout({40, 78, 25, true, true}), nil,
|
||||||
|
MENUACTION_CTRLCONFIG, "FEC_CCF", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS }, 40, 76, MENUALIGN_LEFT,
|
||||||
|
MENUACTION_CTRLDISPLAY, "FEC_CDP", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||||
|
INVERT_PAD_SELECTOR
|
||||||
|
MENUACTION_CTRLVIBRATION, "FEC_VIB", { nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||||
|
SELECT_CONTROLLER_TYPE
|
||||||
|
MENUACTION_GOBACK, "FEDS_TB", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, 0, 0, MENUALIGN_LEFT,
|
||||||
|
},
|
||||||
|
#endif
|
||||||
#ifdef LEGACY_MENU_OPTIONS
|
#ifdef LEGACY_MENU_OPTIONS
|
||||||
// MENUPAGE_CONTROLLER_SETTINGS = 4
|
|
||||||
{ "FET_CON", MENUPAGE_OPTIONS, nil, nil,
|
|
||||||
MENUACTION_CTRLCONFIG, "FEC_CCF", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS}, 0, 0, 0,
|
|
||||||
MENUACTION_CTRLVIBRATION, "FEC_VIB", {nil, SAVESLOT_NONE, MENUPAGE_CONTROLLER_SETTINGS}, 0, 0, 0,
|
|
||||||
MENUACTION_GOBACK, "FEDS_TB", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 0, 0, 0,
|
|
||||||
},
|
|
||||||
|
|
||||||
// MENUPAGE_DEBUG_MENU = 18
|
// MENUPAGE_DEBUG_MENU = 18
|
||||||
{ "FED_DBG", MENUPAGE_NONE, nil, nil,
|
{ "FED_DBG", MENUPAGE_NONE, nil, nil,
|
||||||
MENUACTION_RELOADIDE, "FED_RID", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 0, 0, 0,
|
MENUACTION_RELOADIDE, "FED_RID", {nil, SAVESLOT_NONE, MENUPAGE_NONE}, 0, 0, 0,
|
||||||
@ -692,7 +756,7 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
|
|
||||||
#ifdef GRAPHICS_MENU_OPTIONS
|
#ifdef GRAPHICS_MENU_OPTIONS
|
||||||
// MENUPAGE_GRAPHICS_SETTINGS
|
// MENUPAGE_GRAPHICS_SETTINGS
|
||||||
{ "FET_GRA", MENUPAGE_OPTIONS, new CCustomScreenLayout({40, 78, 25, true, true}), GraphicsGoBack,
|
{ "FET_GFX", MENUPAGE_OPTIONS, new CCustomScreenLayout({40, 78, 25, true, true}), GraphicsGoBack,
|
||||||
|
|
||||||
MENUACTION_SCREENRES, "FED_RES", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
MENUACTION_SCREENRES, "FED_RES", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||||
MENUACTION_WIDESCREEN, "FED_WIS", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
MENUACTION_WIDESCREEN, "FED_WIS", { nil, SAVESLOT_NONE, MENUPAGE_GRAPHICS_SETTINGS }, 0, 0, MENUALIGN_LEFT,
|
||||||
@ -715,7 +779,7 @@ CMenuScreenCustom aScreens[] = {
|
|||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
// MENUPAGE_DETECT_JOYSTICK
|
// MENUPAGE_DETECT_JOYSTICK
|
||||||
{ "FEC_JOD", MENUPAGE_CONTROLLER_PC, new CCustomScreenLayout({0, 0, 0, false, false, 30}), DetectJoystickGoBack,
|
{ "FEC_JOD", MENUPAGE_CONTROLLER_PC, new CCustomScreenLayout({0, 0, 0, false, false, 30}), DetectJoystickGoBack,
|
||||||
MENUACTION_LABEL, "FEC_JPR", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, 0, 0, 0,
|
MENUACTION_LABEL, "FEC_JPR", { nil, SAVESLOT_NONE, MENUPAGE_NONE }, 0, 0, 0,
|
||||||
|
@ -1589,8 +1589,14 @@ void CPad::AddToPCCheatString(char c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef XINPUT
|
#ifdef XINPUT
|
||||||
|
int CPad::XInputJoy1 = 0;
|
||||||
|
int CPad::XInputJoy2 = 1;
|
||||||
void CPad::AffectFromXinput(uint32 pad)
|
void CPad::AffectFromXinput(uint32 pad)
|
||||||
{
|
{
|
||||||
|
pad = pad == 0 ? XInputJoy1 : XInputJoy2;
|
||||||
|
if (pad == -1) // LoadINIControllerSettings can set it to -1
|
||||||
|
return;
|
||||||
|
|
||||||
XINPUT_STATE xstate;
|
XINPUT_STATE xstate;
|
||||||
memset(&xstate, 0, sizeof(XINPUT_STATE));
|
memset(&xstate, 0, sizeof(XINPUT_STATE));
|
||||||
if (XInputGetState(pad, &xstate) == ERROR_SUCCESS)
|
if (XInputGetState(pad, &xstate) == ERROR_SUCCESS)
|
||||||
|
@ -276,6 +276,8 @@ public:
|
|||||||
void SetDrunkInputDelay(int32 delay) { DrunkDrivingBufferUsed = delay; }
|
void SetDrunkInputDelay(int32 delay) { DrunkDrivingBufferUsed = delay; }
|
||||||
|
|
||||||
#ifdef XINPUT
|
#ifdef XINPUT
|
||||||
|
static int XInputJoy1;
|
||||||
|
static int XInputJoy2;
|
||||||
void AffectFromXinput(uint32 pad);
|
void AffectFromXinput(uint32 pad);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ CRopes::CreateRopeWithSwatComingDown(CVector pos)
|
|||||||
swat->bUsesCollision = false;
|
swat->bUsesCollision = false;
|
||||||
swat->m_pRopeEntity = (CEntity*)1;
|
swat->m_pRopeEntity = (CEntity*)1;
|
||||||
swat->m_nRopeID = 100 + ropeId;
|
swat->m_nRopeID = 100 + ropeId;
|
||||||
CAnimManager::BlendAnimation(swat->GetClump(), ASSOCGRP_STD, ANIM_ABSEIL, 4.0f);
|
CAnimManager::BlendAnimation(swat->GetClump(), ASSOCGRP_STD, ANIM_STD_ABSEIL, 4.0f);
|
||||||
ropeId++;
|
ropeId++;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2213,7 +2213,7 @@ CWorld::TriggerExplosionSectorList(CPtrList &list, const CVector &position, floa
|
|||||||
PEDPIECE_TORSO, direction);
|
PEDPIECE_TORSO, direction);
|
||||||
if(pPed->m_nPedState != PED_DIE)
|
if(pPed->m_nPedState != PED_DIE)
|
||||||
pPed->SetFall(2000,
|
pPed->SetFall(2000,
|
||||||
(AnimationId)(direction + ANIM_KO_SKID_FRONT), 0);
|
(AnimationId)(direction + ANIM_STD_HIGHIMPACT_FRONT), 0);
|
||||||
if(pCreator && pCreator->IsPed()) {
|
if(pCreator && pCreator->IsPed()) {
|
||||||
eEventType eventType = EVENT_SHOOT_PED;
|
eEventType eventType = EVENT_SHOOT_PED;
|
||||||
if(pPed->m_nPedType == PEDTYPE_COP) eventType = EVENT_SHOOT_COP;
|
if(pPed->m_nPedType == PEDTYPE_COP) eventType = EVENT_SHOOT_COP;
|
||||||
|
@ -389,7 +389,7 @@ __inline__ void TRACE(char *f, ...) { } // this is re3 only, and so the function
|
|||||||
#if !defined(MASTER) || defined(__WIIU__)
|
#if !defined(MASTER) || defined(__WIIU__)
|
||||||
#define assert(_Expression) (void)( (!!(_Expression)) || (re3_assert(#_Expression, __FILENAME__, __LINE__, __FUNCTION__), 0) )
|
#define assert(_Expression) (void)( (!!(_Expression)) || (re3_assert(#_Expression, __FILENAME__, __LINE__, __FUNCTION__), 0) )
|
||||||
#else
|
#else
|
||||||
#define assert(_Expression)
|
#define assert(_Expression) (_Expression)
|
||||||
#endif
|
#endif
|
||||||
#define ASSERT assert
|
#define ASSERT assert
|
||||||
|
|
||||||
|
@ -194,6 +194,10 @@ enum Config {
|
|||||||
|
|
||||||
// those infamous texts
|
// those infamous texts
|
||||||
#define DRAW_GAME_VERSION_TEXT
|
#define DRAW_GAME_VERSION_TEXT
|
||||||
|
#ifdef DRAW_GAME_VERSION_TEXT
|
||||||
|
// unlike R* development builds, ours has runtime switch on debug menu & .ini, and disabled as default.
|
||||||
|
#define USE_OUR_VERSIONING // If you disable this then game will fetch version from peds.col, as R* did while in development
|
||||||
|
#endif
|
||||||
|
|
||||||
// Memory allocation and compression
|
// Memory allocation and compression
|
||||||
// #define USE_CUSTOM_ALLOCATOR // use CMemoryHeap for allocation. use with care, not finished yet
|
// #define USE_CUSTOM_ALLOCATOR // use CMemoryHeap for allocation. use with care, not finished yet
|
||||||
@ -251,6 +255,12 @@ enum Config {
|
|||||||
#define FIX_BUGS_64 // Must have fixes to be able to run 64 bit build
|
#define FIX_BUGS_64 // Must have fixes to be able to run 64 bit build
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define ASCII_STRCMP // use faster ascii str comparisons
|
||||||
|
|
||||||
|
#if !defined _WIN32 || defined __MWERKS__ || defined __MINGW32__ || defined VANILLA_DEFINES
|
||||||
|
#undef ASCII_STRCMP
|
||||||
|
#endif
|
||||||
|
|
||||||
// Just debug menu entries
|
// Just debug menu entries
|
||||||
#ifdef DEBUGMENU
|
#ifdef DEBUGMENU
|
||||||
#define RELOADABLES // some debug menu options to reload TXD files
|
#define RELOADABLES // some debug menu options to reload TXD files
|
||||||
@ -294,8 +304,8 @@ enum Config {
|
|||||||
#if !defined(RW_GL3) && defined(_WIN32)
|
#if !defined(RW_GL3) && defined(_WIN32)
|
||||||
#define XINPUT
|
#define XINPUT
|
||||||
#endif
|
#endif
|
||||||
#if !defined(_WIN32) && !defined(__SWITCH__) && !defined(__WIIU__)
|
#if defined XINPUT || (defined RW_GL3 && !defined LIBRW_SDL2 && !defined __SWITCH__ && !defined __WIIU__)
|
||||||
#define DONT_TRUST_RECOGNIZED_JOYSTICKS // Then we'll only rely on GLFW gamepad DB, and expect user to enter Controller->Detect joysticks if his joystick isn't on that list.
|
#define DETECT_JOYSTICK_MENU // Then we'll expect user to enter Controller->Detect joysticks if his joystick isn't detected at the start.
|
||||||
#endif
|
#endif
|
||||||
#define DETECT_PAD_INPUT_SWITCH // Adds automatic switch of pad related stuff between controller and kb/m
|
#define DETECT_PAD_INPUT_SWITCH // Adds automatic switch of pad related stuff between controller and kb/m
|
||||||
#define KANGAROO_CHEAT
|
#define KANGAROO_CHEAT
|
||||||
@ -303,19 +313,22 @@ enum Config {
|
|||||||
#define BETTER_ALLCARSAREDODO_CHEAT
|
#define BETTER_ALLCARSAREDODO_CHEAT
|
||||||
#define WALLCLIMB_CHEAT
|
#define WALLCLIMB_CHEAT
|
||||||
#define REGISTER_START_BUTTON
|
#define REGISTER_START_BUTTON
|
||||||
//#define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls
|
#define BIND_VEHICLE_FIREWEAPON // Adds ability to rebind fire key for 'in vehicle' controls
|
||||||
#define BUTTON_ICONS // use textures to show controller buttons
|
#define BUTTON_ICONS // use textures to show controller buttons
|
||||||
|
|
||||||
// Hud, frontend and radar
|
// Hud, frontend and radar
|
||||||
#define PC_MENU
|
#define PC_MENU
|
||||||
|
|
||||||
#define FIX_RADAR // use radar size from early version before R* broke it
|
#define FIX_RADAR // use radar size from early version before R* broke it
|
||||||
|
#define RADIO_OFF_TEXT // Won't work without FIX_BUGS
|
||||||
|
|
||||||
#ifndef PC_MENU
|
#ifndef PC_MENU
|
||||||
# define PS2_MENU
|
# define PS2_MENU
|
||||||
//# define PS2_MENU_USEALLPAGEICONS
|
//# define PS2_MENU_USEALLPAGEICONS
|
||||||
#else
|
#else
|
||||||
# define MAP_ENHANCEMENTS // Adding waypoint and better mouse support
|
# define MAP_ENHANCEMENTS // Adding waypoint and better mouse support
|
||||||
|
# ifdef XINPUT
|
||||||
|
# define GAMEPAD_MENU // Add gamepad menu
|
||||||
|
# endif
|
||||||
//# define TRIANGLE_BACK_BUTTON
|
//# define TRIANGLE_BACK_BUTTON
|
||||||
# define CIRCLE_BACK_BUTTON
|
# define CIRCLE_BACK_BUTTON
|
||||||
#define LEGACY_MENU_OPTIONS // i.e. frame sync(vsync)
|
#define LEGACY_MENU_OPTIONS // i.e. frame sync(vsync)
|
||||||
@ -351,6 +364,10 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
|||||||
//#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
//#define USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
#define SCRIPT_LOG_FILE_LEVEL 0 // 0 == no log, 1 == overwrite every frame, 2 == full log
|
||||||
|
|
||||||
|
#if SCRIPT_LOG_FILE_LEVEL == 0
|
||||||
|
#undef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
#ifndef USE_ADVANCED_SCRIPT_DEBUG_OUTPUT
|
||||||
#define USE_BASIC_SCRIPT_DEBUG_OUTPUT
|
#define USE_BASIC_SCRIPT_DEBUG_OUTPUT
|
||||||
#endif
|
#endif
|
||||||
@ -380,6 +397,7 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
|||||||
#define FREE_CAM // Rotating cam
|
#define FREE_CAM // Rotating cam
|
||||||
|
|
||||||
// Audio
|
// Audio
|
||||||
|
#define RADIO_SCROLL_TO_PREV_STATION // Won't work without FIX_BUGS
|
||||||
#define AUDIO_CACHE // cache sound lengths to speed up the cold boot
|
#define AUDIO_CACHE // cache sound lengths to speed up the cold boot
|
||||||
//#define PS2_AUDIO_PATHS // changes audio paths for cutscenes and radio to PS2 paths (needs vbdec on MSS builds)
|
//#define PS2_AUDIO_PATHS // changes audio paths for cutscenes and radio to PS2 paths (needs vbdec on MSS builds)
|
||||||
#define AUDIO_OAL_USE_SNDFILE // use libsndfile to decode WAVs instead of our internal decoder
|
#define AUDIO_OAL_USE_SNDFILE // use libsndfile to decode WAVs instead of our internal decoder
|
||||||
@ -476,8 +494,10 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
|||||||
#undef BUTTON_ICONS
|
#undef BUTTON_ICONS
|
||||||
|
|
||||||
#undef FIX_RADAR
|
#undef FIX_RADAR
|
||||||
|
#undef RADIO_OFF_TEXT
|
||||||
|
|
||||||
#undef MAP_ENHANCEMENTS
|
#undef MAP_ENHANCEMENTS
|
||||||
|
#undef GAMEPAD_MENU
|
||||||
#undef MUCH_SHORTER_OUTRO_SCREEN
|
#undef MUCH_SHORTER_OUTRO_SCREEN
|
||||||
#undef CUSTOM_FRONTEND_OPTIONS
|
#undef CUSTOM_FRONTEND_OPTIONS
|
||||||
|
|
||||||
@ -504,4 +524,6 @@ static_assert(false, "SUPPORT_XBOX_SCRIPT and SUPPORT_MOBILE_SCRIPT are mutually
|
|||||||
#undef IMPROVED_CAMERA
|
#undef IMPROVED_CAMERA
|
||||||
#undef FREE_CAM
|
#undef FREE_CAM
|
||||||
#undef BIG_IMG
|
#undef BIG_IMG
|
||||||
|
|
||||||
|
#undef RADIO_SCROLL_TO_PREV_STATION
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include <time.h>
|
||||||
#include "rpmatfx.h"
|
#include "rpmatfx.h"
|
||||||
#include "rphanim.h"
|
#include "rphanim.h"
|
||||||
#include "rpskin.h"
|
#include "rpskin.h"
|
||||||
#include "rtbmp.h"
|
#include "rtbmp.h"
|
||||||
|
#include "rtpng.h"
|
||||||
#ifdef ANISOTROPIC_FILTERING
|
#ifdef ANISOTROPIC_FILTERING
|
||||||
#include "rpanisot.h"
|
#include "rpanisot.h"
|
||||||
#endif
|
#endif
|
||||||
@ -73,6 +75,9 @@
|
|||||||
#include "custompipes.h"
|
#include "custompipes.h"
|
||||||
#include "screendroplets.h"
|
#include "screendroplets.h"
|
||||||
#include "VarConsole.h"
|
#include "VarConsole.h"
|
||||||
|
#ifdef USE_OUR_VERSIONING
|
||||||
|
#include "GitSHA1.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
GlobalScene Scene;
|
GlobalScene Scene;
|
||||||
|
|
||||||
@ -89,6 +94,9 @@ bool gbModelViewer;
|
|||||||
#ifdef TIMEBARS
|
#ifdef TIMEBARS
|
||||||
bool gbShowTimebars;
|
bool gbShowTimebars;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DRAW_GAME_VERSION_TEXT
|
||||||
|
bool gDrawVersionText; // Our addition, we think it was always enabled on !MASTER builds
|
||||||
|
#endif
|
||||||
|
|
||||||
volatile int32 frameCount;
|
volatile int32 frameCount;
|
||||||
|
|
||||||
@ -331,7 +339,11 @@ RwGrabScreen(RwCamera *camera, RwChar *filename)
|
|||||||
strcpy(temp, CFileMgr::GetRootDirName());
|
strcpy(temp, CFileMgr::GetRootDirName());
|
||||||
strcat(temp, filename);
|
strcat(temp, filename);
|
||||||
|
|
||||||
|
#ifndef LIBRW
|
||||||
if (RtBMPImageWrite(pImage, &temp[0]) == nil)
|
if (RtBMPImageWrite(pImage, &temp[0]) == nil)
|
||||||
|
#else
|
||||||
|
if (RtPNGImageWrite(pImage, &temp[0]) == nil)
|
||||||
|
#endif
|
||||||
result = false;
|
result = false;
|
||||||
RwImageDestroy(pImage);
|
RwImageDestroy(pImage);
|
||||||
return result;
|
return result;
|
||||||
@ -350,6 +362,7 @@ DoRWStuffEndOfFrame(void)
|
|||||||
RsCameraShowRaster(Scene.camera);
|
RsCameraShowRaster(Scene.camera);
|
||||||
#ifndef MASTER
|
#ifndef MASTER
|
||||||
char s[48];
|
char s[48];
|
||||||
|
#ifdef THIS_IS_STUPID
|
||||||
if (CPad::GetPad(1)->GetLeftShockJustDown()) {
|
if (CPad::GetPad(1)->GetLeftShockJustDown()) {
|
||||||
// try using both controllers for this thing... crazy bastards
|
// try using both controllers for this thing... crazy bastards
|
||||||
if (CPad::GetPad(0)->GetRightStickY() > 0) {
|
if (CPad::GetPad(0)->GetRightStickY() > 0) {
|
||||||
@ -361,6 +374,12 @@ DoRWStuffEndOfFrame(void)
|
|||||||
RwGrabScreen(Scene.camera, s);
|
RwGrabScreen(Scene.camera, s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (CPad::GetPad(1)->GetLeftShockJustDown() || CPad::GetPad(0)->GetFJustDown(11)) {
|
||||||
|
sprintf(s, "screen_%11lld.png", time(nil));
|
||||||
|
RwGrabScreen(Scene.camera, s);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif // !MASTER
|
#endif // !MASTER
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1034,7 +1053,7 @@ DisplayGameDebugText()
|
|||||||
|
|
||||||
#ifndef FINAL
|
#ifndef FINAL
|
||||||
{
|
{
|
||||||
SETTWEAKPATH("GameDebugText");
|
SETTWEAKPATH("Debug");
|
||||||
TWEAKBOOL(bDisplayPosn);
|
TWEAKBOOL(bDisplayPosn);
|
||||||
TWEAKBOOL(bDisplayCheatStr);
|
TWEAKBOOL(bDisplayCheatStr);
|
||||||
}
|
}
|
||||||
@ -1049,12 +1068,55 @@ DisplayGameDebugText()
|
|||||||
#ifdef DRAW_GAME_VERSION_TEXT
|
#ifdef DRAW_GAME_VERSION_TEXT
|
||||||
wchar ver[200];
|
wchar ver[200];
|
||||||
|
|
||||||
|
if(gDrawVersionText) // This realtime switch is our thing
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef USE_OUR_VERSIONING
|
||||||
|
char verA[200];
|
||||||
|
sprintf(verA,
|
||||||
|
#if defined _WIN32
|
||||||
|
"Win "
|
||||||
|
#elif defined __linux__
|
||||||
|
"Linux "
|
||||||
|
#elif defined __APPLE__
|
||||||
|
"Mac OS X "
|
||||||
|
#elif defined __FreeBSD__
|
||||||
|
"FreeBSD "
|
||||||
|
#else
|
||||||
|
"Posix-compliant "
|
||||||
|
#endif
|
||||||
|
#if defined __LP64__ || defined _WIN64
|
||||||
|
"64-bit "
|
||||||
|
#else
|
||||||
|
"32-bit "
|
||||||
|
#endif
|
||||||
|
#if defined RW_D3D9
|
||||||
|
"D3D9 "
|
||||||
|
#elif defined RWLIBS
|
||||||
|
"D3D8 "
|
||||||
|
#elif defined RW_GL3
|
||||||
|
"OpenGL "
|
||||||
|
#endif
|
||||||
|
#if defined AUDIO_OAL
|
||||||
|
"OAL "
|
||||||
|
#elif defined AUDIO_MSS
|
||||||
|
"MSS "
|
||||||
|
#endif
|
||||||
|
#if defined _DEBUG || defined DEBUG
|
||||||
|
"DEBUG "
|
||||||
|
#endif
|
||||||
|
"%.8s",
|
||||||
|
g_GIT_SHA1);
|
||||||
|
AsciiToUnicode(verA, ver);
|
||||||
|
CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.7f));
|
||||||
|
#else
|
||||||
AsciiToUnicode(version_name, ver);
|
AsciiToUnicode(version_name, ver);
|
||||||
|
CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.5f));
|
||||||
|
#endif
|
||||||
|
|
||||||
CFont::SetPropOn();
|
CFont::SetPropOn();
|
||||||
CFont::SetBackgroundOff();
|
CFont::SetBackgroundOff();
|
||||||
CFont::SetFontStyle(FONT_STANDARD);
|
CFont::SetFontStyle(FONT_STANDARD);
|
||||||
CFont::SetScale(SCREEN_SCALE_X(0.5f), SCREEN_SCALE_Y(0.5f));
|
|
||||||
CFont::SetCentreOff();
|
CFont::SetCentreOff();
|
||||||
CFont::SetRightJustifyOff();
|
CFont::SetRightJustifyOff();
|
||||||
CFont::SetWrapx(SCREEN_WIDTH);
|
CFont::SetWrapx(SCREEN_WIDTH);
|
||||||
@ -1062,7 +1124,8 @@ DisplayGameDebugText()
|
|||||||
CFont::SetBackGroundOnlyTextOff();
|
CFont::SetBackGroundOnlyTextOff();
|
||||||
CFont::SetColor(CRGBA(255, 108, 0, 255));
|
CFont::SetColor(CRGBA(255, 108, 0, 255));
|
||||||
CFont::PrintString(SCREEN_SCALE_X(10.0f), SCREEN_SCALE_Y(10.0f), ver);
|
CFont::PrintString(SCREEN_SCALE_X(10.0f), SCREEN_SCALE_Y(10.0f), ver);
|
||||||
#endif
|
}
|
||||||
|
#endif // #ifdef DRAW_GAME_VERSION_TEXT
|
||||||
|
|
||||||
FrameSamples++;
|
FrameSamples++;
|
||||||
#ifdef FIX_HIGH_FPS_BUGS_ON_FRONTEND
|
#ifdef FIX_HIGH_FPS_BUGS_ON_FRONTEND
|
||||||
|
175
src/core/re3.cpp
175
src/core/re3.cpp
@ -1,6 +1,14 @@
|
|||||||
#include <csignal>
|
#include <csignal>
|
||||||
#define WITHWINDOWS
|
#define WITHWINDOWS
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#if defined DETECT_JOYSTICK_MENU && defined XINPUT
|
||||||
|
#include <xinput.h>
|
||||||
|
#if !defined(PSAPI_VERSION) || (PSAPI_VERSION > 1)
|
||||||
|
#pragma comment( lib, "Xinput9_1_0.lib" )
|
||||||
|
#else
|
||||||
|
#pragma comment( lib, "Xinput.lib" )
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
#include "Occlusion.h"
|
#include "Occlusion.h"
|
||||||
#include "Credits.h"
|
#include "Credits.h"
|
||||||
@ -254,8 +262,40 @@ const char *iniKeyboardButtons[] = {"ESC","F1","F2","F3","F4","F5","F6","F7","F8
|
|||||||
|
|
||||||
void LoadINIControllerSettings()
|
void LoadINIControllerSettings()
|
||||||
{
|
{
|
||||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
|
#ifdef XINPUT
|
||||||
|
int storedJoy1 = -1;
|
||||||
|
if (ReadIniIfExists("Controller", "JoystickName", &storedJoy1)) {
|
||||||
|
CPad::XInputJoy1 = -1;
|
||||||
|
CPad::XInputJoy2 = -1;
|
||||||
|
XINPUT_STATE xstate;
|
||||||
|
memset(&xstate, 0, sizeof(XINPUT_STATE));
|
||||||
|
|
||||||
|
// Firstly confirm & set joy 1
|
||||||
|
if (XInputGetState(storedJoy1, &xstate) == ERROR_SUCCESS) {
|
||||||
|
CPad::XInputJoy1 = storedJoy1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i <= 3; i++) {
|
||||||
|
if (XInputGetState(i, &xstate) == ERROR_SUCCESS) {
|
||||||
|
if (CPad::XInputJoy1 == -1)
|
||||||
|
CPad::XInputJoy1 = i;
|
||||||
|
else if (CPad::XInputJoy2 == -1 && i != CPad::XInputJoy1)
|
||||||
|
CPad::XInputJoy2 = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// There is no plug event on XInput, so let's leave XInputJoy1/2 as 0/1 respectively, and hotplug will be possible.
|
||||||
|
if (CPad::XInputJoy1 == -1) {
|
||||||
|
CPad::XInputJoy1 = 0;
|
||||||
|
CPad::XInputJoy2 = 1;
|
||||||
|
} else if (CPad::XInputJoy2 == -1) {
|
||||||
|
CPad::XInputJoy2 = (CPad::XInputJoy1 + 1) % 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
ReadIniIfExists("Controller", "JoystickName", gSelectedJoystickName, 128);
|
ReadIniIfExists("Controller", "JoystickName", gSelectedJoystickName, 128);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
// force to default GTA behaviour (never overwrite bindings on joy change/initialization) if user init'ed/set bindings before we introduced that
|
// force to default GTA behaviour (never overwrite bindings on joy change/initialization) if user init'ed/set bindings before we introduced that
|
||||||
if (!ReadIniIfExists("Controller", "PadButtonsInited", &ControlsManager.ms_padButtonsInited)) {
|
if (!ReadIniIfExists("Controller", "PadButtonsInited", &ControlsManager.ms_padButtonsInited)) {
|
||||||
@ -353,8 +393,12 @@ void SaveINIControllerSettings()
|
|||||||
StoreIni("Bindings", iniControllerActions[i], value, 128);
|
StoreIni("Bindings", iniControllerActions[i], value, 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DONT_TRUST_RECOGNIZED_JOYSTICKS
|
#ifdef DETECT_JOYSTICK_MENU
|
||||||
|
#ifdef XINPUT
|
||||||
|
StoreIni("Controller", "JoystickName", CPad::XInputJoy1);
|
||||||
|
#else
|
||||||
StoreIni("Controller", "JoystickName", gSelectedJoystickName, 128);
|
StoreIni("Controller", "JoystickName", gSelectedJoystickName, 128);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
StoreIni("Controller", "PadButtonsInited", ControlsManager.ms_padButtonsInited);
|
StoreIni("Controller", "PadButtonsInited", ControlsManager.ms_padButtonsInited);
|
||||||
#ifdef WIIU_CHANNEL
|
#ifdef WIIU_CHANNEL
|
||||||
@ -386,6 +430,7 @@ bool LoadINISettings()
|
|||||||
ReadIniIfExists("Controller", "HorizantalMouseSens", &TheCamera.m_fMouseAccelHorzntl);
|
ReadIniIfExists("Controller", "HorizantalMouseSens", &TheCamera.m_fMouseAccelHorzntl);
|
||||||
ReadIniIfExists("Controller", "InvertMouseVertically", &MousePointerStateHelper.bInvertVertically);
|
ReadIniIfExists("Controller", "InvertMouseVertically", &MousePointerStateHelper.bInvertVertically);
|
||||||
ReadIniIfExists("Controller", "DisableMouseSteering", &CVehicle::m_bDisableMouseSteering);
|
ReadIniIfExists("Controller", "DisableMouseSteering", &CVehicle::m_bDisableMouseSteering);
|
||||||
|
ReadIniIfExists("Controller", "Vibration", &FrontEndMenuManager.m_PrefsUseVibration);
|
||||||
ReadIniIfExists("Audio", "SfxVolume", &FrontEndMenuManager.m_PrefsSfxVolume);
|
ReadIniIfExists("Audio", "SfxVolume", &FrontEndMenuManager.m_PrefsSfxVolume);
|
||||||
ReadIniIfExists("Audio", "MusicVolume", &FrontEndMenuManager.m_PrefsMusicVolume);
|
ReadIniIfExists("Audio", "MusicVolume", &FrontEndMenuManager.m_PrefsMusicVolume);
|
||||||
ReadIniIfExists("Audio", "MP3BoostVolume", &FrontEndMenuManager.m_PrefsMP3BoostVolume);
|
ReadIniIfExists("Audio", "MP3BoostVolume", &FrontEndMenuManager.m_PrefsMP3BoostVolume);
|
||||||
@ -433,6 +478,10 @@ bool LoadINISettings()
|
|||||||
#ifdef FIX_SPRITES
|
#ifdef FIX_SPRITES
|
||||||
ReadIniIfExists("Draw", "FixSprites", &CDraw::ms_bFixSprites);
|
ReadIniIfExists("Draw", "FixSprites", &CDraw::ms_bFixSprites);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DRAW_GAME_VERSION_TEXT
|
||||||
|
extern bool gDrawVersionText;
|
||||||
|
ReadIniIfExists("General", "DrawVersionText", &gDrawVersionText);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CUSTOM_FRONTEND_OPTIONS
|
#ifdef CUSTOM_FRONTEND_OPTIONS
|
||||||
bool migrate = cfg.category_size("FrontendOptions") != 0;
|
bool migrate = cfg.category_size("FrontendOptions") != 0;
|
||||||
@ -478,6 +527,7 @@ void SaveINISettings()
|
|||||||
StoreIni("Controller", "HorizantalMouseSens", TheCamera.m_fMouseAccelHorzntl);
|
StoreIni("Controller", "HorizantalMouseSens", TheCamera.m_fMouseAccelHorzntl);
|
||||||
StoreIni("Controller", "InvertMouseVertically", MousePointerStateHelper.bInvertVertically);
|
StoreIni("Controller", "InvertMouseVertically", MousePointerStateHelper.bInvertVertically);
|
||||||
StoreIni("Controller", "DisableMouseSteering", CVehicle::m_bDisableMouseSteering);
|
StoreIni("Controller", "DisableMouseSteering", CVehicle::m_bDisableMouseSteering);
|
||||||
|
StoreIni("Controller", "Vibration", FrontEndMenuManager.m_PrefsUseVibration);
|
||||||
StoreIni("Audio", "SfxVolume", FrontEndMenuManager.m_PrefsSfxVolume);
|
StoreIni("Audio", "SfxVolume", FrontEndMenuManager.m_PrefsSfxVolume);
|
||||||
StoreIni("Audio", "MusicVolume", FrontEndMenuManager.m_PrefsMusicVolume);
|
StoreIni("Audio", "MusicVolume", FrontEndMenuManager.m_PrefsMusicVolume);
|
||||||
StoreIni("Audio", "MP3BoostVolume", FrontEndMenuManager.m_PrefsMP3BoostVolume);
|
StoreIni("Audio", "MP3BoostVolume", FrontEndMenuManager.m_PrefsMP3BoostVolume);
|
||||||
@ -525,6 +575,10 @@ void SaveINISettings()
|
|||||||
#ifdef FIX_SPRITES
|
#ifdef FIX_SPRITES
|
||||||
StoreIni("Draw", "FixSprites", CDraw::ms_bFixSprites);
|
StoreIni("Draw", "FixSprites", CDraw::ms_bFixSprites);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DRAW_GAME_VERSION_TEXT
|
||||||
|
extern bool gDrawVersionText;
|
||||||
|
StoreIni("General", "DrawVersionText", gDrawVersionText);
|
||||||
|
#endif
|
||||||
#ifdef CUSTOM_FRONTEND_OPTIONS
|
#ifdef CUSTOM_FRONTEND_OPTIONS
|
||||||
for (int i = 0; i < MENUPAGES; i++) {
|
for (int i = 0; i < MENUPAGES; i++) {
|
||||||
for (int j = 0; j < NUM_MENUROWS; j++) {
|
for (int j = 0; j < NUM_MENUROWS; j++) {
|
||||||
@ -657,18 +711,6 @@ SwitchCarCollision(void)
|
|||||||
FindPlayerVehicle()->bUsesCollision = !FindPlayerVehicle()->bUsesCollision;
|
FindPlayerVehicle()->bUsesCollision = !FindPlayerVehicle()->bUsesCollision;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int engineStatus;
|
|
||||||
static void
|
|
||||||
SetEngineStatus(void)
|
|
||||||
{
|
|
||||||
CVehicle *veh = FindPlayerVehicle();
|
|
||||||
if(veh == nil)
|
|
||||||
return;
|
|
||||||
if(!veh->IsCar())
|
|
||||||
return;
|
|
||||||
((CAutomobile*)veh)->Damage.SetEngineStatus(engineStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ToggleComedy(void)
|
ToggleComedy(void)
|
||||||
{
|
{
|
||||||
@ -891,13 +933,22 @@ DebugMenuPopulate(void)
|
|||||||
DebugMenuAddCmd("Spawn", "Spawn Skimmer", [](){ SpawnCar(MI_SKIMMER); });
|
DebugMenuAddCmd("Spawn", "Spawn Skimmer", [](){ SpawnCar(MI_SKIMMER); });
|
||||||
|
|
||||||
DebugMenuAddVarBool8("Render", "Draw hud", &CHud::m_Wants_To_Draw_Hud, nil);
|
DebugMenuAddVarBool8("Render", "Draw hud", &CHud::m_Wants_To_Draw_Hud, nil);
|
||||||
|
#ifdef PROPER_SCALING
|
||||||
|
DebugMenuAddVarBool8("Render", "Proper Scaling", &CDraw::ms_bProperScaling, nil);
|
||||||
|
#endif
|
||||||
|
#ifdef FIX_RADAR
|
||||||
|
DebugMenuAddVarBool8("Render", "Fix Radar", &CDraw::ms_bFixRadar, nil);
|
||||||
|
#endif
|
||||||
|
#ifdef FIX_SPRITES
|
||||||
|
DebugMenuAddVarBool8("Render", "Fix Sprites", &CDraw::ms_bFixSprites, nil);
|
||||||
|
#endif
|
||||||
DebugMenuAddVarBool8("Render", "Backface Culling", &gBackfaceCulling, nil);
|
DebugMenuAddVarBool8("Render", "Backface Culling", &gBackfaceCulling, nil);
|
||||||
DebugMenuAddVarBool8("Render", "PS2 Alpha test Emu", &gPS2alphaTest, nil);
|
DebugMenuAddVarBool8("Render", "PS2 Alpha test Emu", &gPS2alphaTest, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Frame limiter", &FrontEndMenuManager.m_PrefsFrameLimiter, nil);
|
DebugMenuAddVarBool8("Render", "Frame limiter", &FrontEndMenuManager.m_PrefsFrameLimiter, nil);
|
||||||
DebugMenuAddVarBool8("Render", "VSynch", &FrontEndMenuManager.m_PrefsVsync, nil);
|
DebugMenuAddVarBool8("Render", "VSynch", &FrontEndMenuManager.m_PrefsVsync, nil);
|
||||||
DebugMenuAddVar("Render", "Max FPS", &RsGlobal.maxFPS, nil, 1, 1, 1000, nil);
|
DebugMenuAddVar("Render", "Max FPS", &RsGlobal.maxFPS, nil, 1, 1, 1000, nil);
|
||||||
#ifdef NEW_RENDERER
|
#ifdef NEW_RENDERER
|
||||||
DebugMenuAddVarBool8("Render", "new renderer", &gbNewRenderer, nil);
|
DebugMenuAddVarBool8("Render", "New Renderer", &gbNewRenderer, nil);
|
||||||
extern bool gbRenderRoads;
|
extern bool gbRenderRoads;
|
||||||
extern bool gbRenderEverythingBarRoads;
|
extern bool gbRenderEverythingBarRoads;
|
||||||
extern bool gbRenderFadingInUnderwaterEntities;
|
extern bool gbRenderFadingInUnderwaterEntities;
|
||||||
@ -908,16 +959,16 @@ extern bool gbRenderVehicles;
|
|||||||
extern bool gbRenderWorld0;
|
extern bool gbRenderWorld0;
|
||||||
extern bool gbRenderWorld1;
|
extern bool gbRenderWorld1;
|
||||||
extern bool gbRenderWorld2;
|
extern bool gbRenderWorld2;
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderRoads", &gbRenderRoads, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderRoads", &gbRenderRoads, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderEverythingBarRoads", &gbRenderEverythingBarRoads, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderEverythingBarRoads", &gbRenderEverythingBarRoads, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderFadingInUnderwaterEntities", &gbRenderFadingInUnderwaterEntities, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderFadingInUnderwaterEntities", &gbRenderFadingInUnderwaterEntities, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderFadingInEntities", &gbRenderFadingInEntities, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderFadingInEntities", &gbRenderFadingInEntities, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderWater", &gbRenderWater, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderWater", &gbRenderWater, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderBoats", &gbRenderBoats, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderBoats", &gbRenderBoats, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderVehicles", &gbRenderVehicles, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderVehicles", &gbRenderVehicles, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderWorld0", &gbRenderWorld0, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderWorld0", &gbRenderWorld0, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderWorld1", &gbRenderWorld1, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderWorld1", &gbRenderWorld1, nil);
|
||||||
DebugMenuAddVarBool8("Render", "gbRenderWorld2", &gbRenderWorld2, nil);
|
DebugMenuAddVarBool8("Debug Render", "gbRenderWorld2", &gbRenderWorld2, nil);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef EXTENDED_COLOURFILTER
|
#ifdef EXTENDED_COLOURFILTER
|
||||||
@ -946,28 +997,27 @@ extern bool gbRenderWorld2;
|
|||||||
DebugMenuAddVarBool8("Render", "Neo Road Gloss enable", &CustomPipes::GlossEnable, nil);
|
DebugMenuAddVarBool8("Render", "Neo Road Gloss enable", &CustomPipes::GlossEnable, nil);
|
||||||
DebugMenuAddVar("Render", "Mult", &CustomPipes::GlossMult, nil, 0.1f, 0, 1.0f);
|
DebugMenuAddVar("Render", "Mult", &CustomPipes::GlossMult, nil, 0.1f, 0, 1.0f);
|
||||||
#endif
|
#endif
|
||||||
DebugMenuAddVarBool8("Render", "Show Ped Paths", &gbShowPedPaths, nil);
|
DebugMenuAddVarBool8("Debug Render", "Show Ped Paths", &gbShowPedPaths, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Show Car Paths", &gbShowCarPaths, nil);
|
DebugMenuAddVarBool8("Debug Render", "Show Car Paths", &gbShowCarPaths, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Show Car Path Links", &gbShowCarPathsLinks, nil);
|
DebugMenuAddVarBool8("Debug Render", "Show Car Path Links", &gbShowCarPathsLinks, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Show Collision Lines", &gbShowCollisionLines, nil);
|
DebugMenuAddVarBool8("Debug Render", "Show Collision Lines", &gbShowCollisionLines, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Show Collision Polys", &gbShowCollisionPolys, nil);
|
DebugMenuAddVarBool8("Debug Render", "Show Collision Polys", &gbShowCollisionPolys, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Don't render Buildings", &gbDontRenderBuildings, nil);
|
DebugMenuAddVarBool8("Debug Render", "Don't render Buildings", &gbDontRenderBuildings, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Don't render Big Buildings", &gbDontRenderBigBuildings, nil);
|
DebugMenuAddVarBool8("Debug Render", "Don't render Big Buildings", &gbDontRenderBigBuildings, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Don't render Peds", &gbDontRenderPeds, nil);
|
DebugMenuAddVarBool8("Debug Render", "Don't render Peds", &gbDontRenderPeds, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Don't render Vehicles", &gbDontRenderVehicles, nil);
|
DebugMenuAddVarBool8("Debug Render", "Don't render Vehicles", &gbDontRenderVehicles, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Don't render Objects", &gbDontRenderObjects, nil);
|
DebugMenuAddVarBool8("Debug Render", "Don't render Objects", &gbDontRenderObjects, nil);
|
||||||
DebugMenuAddVarBool8("Render", "Don't Render Water", &gbDontRenderWater, nil);
|
DebugMenuAddVarBool8("Debug Render", "Don't Render Water", &gbDontRenderWater, nil);
|
||||||
|
|
||||||
#ifdef PROPER_SCALING
|
|
||||||
DebugMenuAddVarBool8("Draw", "Proper Scaling", &CDraw::ms_bProperScaling, nil);
|
|
||||||
#endif
|
|
||||||
#ifdef FIX_RADAR
|
|
||||||
DebugMenuAddVarBool8("Draw", "Fix Radar", &CDraw::ms_bFixRadar, nil);
|
|
||||||
#endif
|
|
||||||
#ifdef FIX_SPRITES
|
|
||||||
DebugMenuAddVarBool8("Draw", "Fix Sprites", &CDraw::ms_bFixSprites, nil);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#ifdef DRAW_GAME_VERSION_TEXT
|
||||||
|
extern bool gDrawVersionText;
|
||||||
|
DebugMenuAddVarBool8("Debug", "Version Text", &gDrawVersionText, nil);
|
||||||
|
#endif
|
||||||
|
DebugMenuAddVarBool8("Debug", "Show DebugStuffInRelease", &gbDebugStuffInRelease, nil);
|
||||||
|
#ifdef TIMEBARS
|
||||||
|
DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil);
|
||||||
|
#endif
|
||||||
#ifndef FINAL
|
#ifndef FINAL
|
||||||
DebugMenuAddVarBool8("Debug", "Print Memory Usage", &gbPrintMemoryUsage, nil);
|
DebugMenuAddVarBool8("Debug", "Print Memory Usage", &gbPrintMemoryUsage, nil);
|
||||||
#ifdef USE_CUSTOM_ALLOCATOR
|
#ifdef USE_CUSTOM_ALLOCATOR
|
||||||
@ -979,28 +1029,23 @@ extern bool gbRenderWorld2;
|
|||||||
#ifdef GTA_SCENE_EDIT
|
#ifdef GTA_SCENE_EDIT
|
||||||
DebugMenuAddVarBool8("Debug", "Edit on", &CSceneEdit::m_bEditOn, nil);
|
DebugMenuAddVarBool8("Debug", "Edit on", &CSceneEdit::m_bEditOn, nil);
|
||||||
#endif
|
#endif
|
||||||
#ifdef MAP_ENHANCEMENTS
|
//DebugMenuAddCmd("Debug", "Start Credits", CCredits::Start);
|
||||||
DebugMenuAddCmd("Debug", "Teleport to map waypoint", TeleportToWaypoint);
|
//DebugMenuAddCmd("Debug", "Stop Credits", CCredits::Stop);
|
||||||
#endif
|
|
||||||
DebugMenuAddCmd("Debug", "Switch car collision", SwitchCarCollision);
|
|
||||||
DebugMenuAddVar("Debug", "Engine Status", &engineStatus, nil, 1, 0, 226, nil);
|
|
||||||
DebugMenuAddCmd("Debug", "Set Engine Status", SetEngineStatus);
|
|
||||||
DebugMenuAddCmd("Debug", "Fix Car", FixCar);
|
|
||||||
DebugMenuAddCmd("Debug", "Toggle Comedy Controls", ToggleComedy);
|
|
||||||
DebugMenuAddCmd("Debug", "Place Car on Road", PlaceOnRoad);
|
|
||||||
|
|
||||||
DebugMenuAddVarBool8("Debug", "Script Heli On", &CHeli::ScriptHeliOn, nil);
|
|
||||||
|
|
||||||
DebugMenuAddCmd("Debug", "Start Credits", CCredits::Start);
|
|
||||||
DebugMenuAddCmd("Debug", "Stop Credits", CCredits::Stop);
|
|
||||||
|
|
||||||
#ifdef RELOADABLES
|
#ifdef RELOADABLES
|
||||||
DebugMenuAddCmd("Reload", "HUD.TXD", CHud::ReloadTXD);
|
// maybe put it back if we have more to reload
|
||||||
|
// DebugMenuAddCmd("Reload", "HUD.TXD", CHud::ReloadTXD);
|
||||||
#endif
|
#endif
|
||||||
DebugMenuAddVarBool8("Debug", "Show DebugStuffInRelease", &gbDebugStuffInRelease, nil);
|
|
||||||
#ifdef TIMEBARS
|
#ifdef MAP_ENHANCEMENTS
|
||||||
DebugMenuAddVarBool8("Debug", "Show Timebars", &gbShowTimebars, nil);
|
DebugMenuAddCmd("Game", "Teleport to map waypoint", TeleportToWaypoint);
|
||||||
#endif
|
#endif
|
||||||
|
DebugMenuAddCmd("Game", "Fix Car", FixCar);
|
||||||
|
DebugMenuAddCmd("Game", "Place Car on Road", PlaceOnRoad);
|
||||||
|
DebugMenuAddCmd("Game", "Switch car collision", SwitchCarCollision);
|
||||||
|
DebugMenuAddCmd("Game", "Toggle Comedy Controls", ToggleComedy);
|
||||||
|
|
||||||
|
|
||||||
#ifdef MISSION_SWITCHER
|
#ifdef MISSION_SWITCHER
|
||||||
DebugMenuEntry *missionEntry;
|
DebugMenuEntry *missionEntry;
|
||||||
static const char* missions[] = {
|
static const char* missions[] = {
|
||||||
@ -1024,9 +1069,9 @@ extern bool gbRenderWorld2;
|
|||||||
"PIZZA BOY", "RC Raider Pickup", "RC Bandit Race", "RC Baron Race", "Checkpoint Charlie"
|
"PIZZA BOY", "RC Raider Pickup", "RC Bandit Race", "RC Baron Race", "Checkpoint Charlie"
|
||||||
};
|
};
|
||||||
|
|
||||||
missionEntry = DebugMenuAddVar("Debug", "Select mission", &nextMissionToSwitch, nil, 1, 0, ARRAY_SIZE(missions) - 1, missions);
|
missionEntry = DebugMenuAddVar("Game", "Select mission", &nextMissionToSwitch, nil, 1, 0, ARRAY_SIZE(missions) - 1, missions);
|
||||||
DebugMenuEntrySetWrap(missionEntry, true);
|
DebugMenuEntrySetWrap(missionEntry, true);
|
||||||
DebugMenuAddCmd("Debug", "Start selected mission ", SwitchToMission);
|
DebugMenuAddCmd("Game", "Start selected mission ", SwitchToMission);
|
||||||
#endif
|
#endif
|
||||||
extern bool PrintDebugCode;
|
extern bool PrintDebugCode;
|
||||||
extern int16 DebugCamMode;
|
extern int16 DebugCamMode;
|
||||||
|
2
src/extras/GitSHA1.cpp.in
Normal file
2
src/extras/GitSHA1.cpp.in
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#define GIT_SHA1 "@GIT_SHA1@"
|
||||||
|
const char* g_GIT_SHA1 = GIT_SHA1;
|
1
src/extras/GitSHA1.h
Normal file
1
src/extras/GitSHA1.h
Normal file
@ -0,0 +1 @@
|
|||||||
|
extern const char* g_GIT_SHA1;
|
@ -89,6 +89,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int vsBits;
|
int vsBits;
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
||||||
setIndices(header->indexBuffer);
|
setIndices(header->indexBuffer);
|
||||||
setVertexDeclaration(header->vertexDeclaration);
|
setVertexDeclaration(header->vertexDeclaration);
|
||||||
@ -120,7 +121,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
reflProps[3] = m->surfaceProps.specular == 0.0f ? 0.0f : VehicleSpecularity;
|
reflProps[3] = m->surfaceProps.specular == 0.0f ? 0.0f : VehicleSpecularity;
|
||||||
d3ddevice->SetVertexShaderConstantF(VSLOC_reflProps, reflProps, 1);
|
d3ddevice->SetVertexShaderConstantF(VSLOC_reflProps, reflProps, 1);
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
if(m->texture)
|
if(m->texture)
|
||||||
d3d::setTexture(0, m->texture);
|
d3d::setTexture(0, m->texture);
|
||||||
@ -150,11 +151,11 @@ CreateVehiclePipe(void)
|
|||||||
fp = ReadTweakValueTable(fp, SpecColor);
|
fp = ReadTweakValueTable(fp, SpecColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "shaders/neoVehicle_VS.inc"
|
#include "shaders/obj/neoVehicle_VS.inc"
|
||||||
neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
|
neoVehicle_VS = rw::d3d::createVertexShader(neoVehicle_VS_cso);
|
||||||
assert(neoVehicle_VS);
|
assert(neoVehicle_VS);
|
||||||
|
|
||||||
#include "shaders/neoVehicle_PS.inc"
|
#include "shaders/obj/neoVehicle_PS.inc"
|
||||||
neoVehicle_PS = rw::d3d::createPixelShader(neoVehicle_PS_cso);
|
neoVehicle_PS = rw::d3d::createPixelShader(neoVehicle_PS_cso);
|
||||||
assert(neoVehicle_PS);
|
assert(neoVehicle_PS);
|
||||||
|
|
||||||
@ -260,11 +261,11 @@ CreateWorldPipe(void)
|
|||||||
else
|
else
|
||||||
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
|
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
|
||||||
|
|
||||||
#include "shaders/default_UV2_VS.inc"
|
#include "shaders/obj/default_UV2_VS.inc"
|
||||||
neoWorld_VS = rw::d3d::createVertexShader(default_UV2_VS_cso);
|
neoWorld_VS = rw::d3d::createVertexShader(default_UV2_VS_cso);
|
||||||
assert(neoWorld_VS);
|
assert(neoWorld_VS);
|
||||||
|
|
||||||
#include "shaders/neoWorldVC_PS.inc"
|
#include "shaders/obj/neoWorldVC_PS.inc"
|
||||||
neoWorldVC_PS = rw::d3d::createPixelShader(neoWorldVC_PS_cso);
|
neoWorldVC_PS = rw::d3d::createPixelShader(neoWorldVC_PS_cso);
|
||||||
assert(neoWorldVC_PS);
|
assert(neoWorldVC_PS);
|
||||||
|
|
||||||
@ -347,11 +348,11 @@ glossRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
void
|
void
|
||||||
CreateGlossPipe(void)
|
CreateGlossPipe(void)
|
||||||
{
|
{
|
||||||
#include "shaders/neoGloss_VS.inc"
|
#include "shaders/obj/neoGloss_VS.inc"
|
||||||
neoGloss_VS = rw::d3d::createVertexShader(neoGloss_VS_cso);
|
neoGloss_VS = rw::d3d::createVertexShader(neoGloss_VS_cso);
|
||||||
assert(neoGloss_VS);
|
assert(neoGloss_VS);
|
||||||
|
|
||||||
#include "shaders/neoGloss_PS.inc"
|
#include "shaders/obj/neoGloss_PS.inc"
|
||||||
neoGloss_PS = rw::d3d::createPixelShader(neoGloss_PS_cso);
|
neoGloss_PS = rw::d3d::createPixelShader(neoGloss_PS_cso);
|
||||||
assert(neoGloss_PS);
|
assert(neoGloss_PS);
|
||||||
|
|
||||||
@ -421,6 +422,7 @@ rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int vsBits;
|
int vsBits;
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
setStreamSource(0, header->vertexStream[0].vertexBuffer, 0, header->vertexStream[0].stride);
|
||||||
setIndices(header->indexBuffer);
|
setIndices(header->indexBuffer);
|
||||||
setVertexDeclaration(header->vertexDeclaration);
|
setVertexDeclaration(header->vertexDeclaration);
|
||||||
@ -438,7 +440,7 @@ rimRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
|
|
||||||
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
|
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
if(m->texture){
|
if(m->texture){
|
||||||
d3d::setTexture(0, m->texture);
|
d3d::setTexture(0, m->texture);
|
||||||
@ -464,7 +466,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int vsBits;
|
int vsBits;
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
setStreamSource(0, (IDirect3DVertexBuffer9*)header->vertexStream[0].vertexBuffer,
|
setStreamSource(0, (IDirect3DVertexBuffer9*)header->vertexStream[0].vertexBuffer,
|
||||||
0, header->vertexStream[0].stride);
|
0, header->vertexStream[0].stride);
|
||||||
setIndices((IDirect3DIndexBuffer9*)header->indexBuffer);
|
setIndices((IDirect3DIndexBuffer9*)header->indexBuffer);
|
||||||
@ -485,7 +487,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::d3d9::InstanceDataHeader *header)
|
|||||||
|
|
||||||
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
|
SetRenderState(VERTEXALPHA, inst->vertexAlpha || m->color.alpha != 255);
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
if(inst->material->texture){
|
if(inst->material->texture){
|
||||||
d3d::setTexture(0, m->texture);
|
d3d::setTexture(0, m->texture);
|
||||||
@ -513,11 +515,11 @@ CreateRimLightPipes(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#include "shaders/neoRim_VS.inc"
|
#include "shaders/obj/neoRim_VS.inc"
|
||||||
neoRim_VS = rw::d3d::createVertexShader(neoRim_VS_cso);
|
neoRim_VS = rw::d3d::createVertexShader(neoRim_VS_cso);
|
||||||
assert(neoRim_VS);
|
assert(neoRim_VS);
|
||||||
|
|
||||||
#include "shaders/neoRimSkin_VS.inc"
|
#include "shaders/obj/neoRimSkin_VS.inc"
|
||||||
neoRimSkin_VS = rw::d3d::createVertexShader(neoRimSkin_VS_cso);
|
neoRimSkin_VS = rw::d3d::createVertexShader(neoRimSkin_VS_cso);
|
||||||
assert(neoRimSkin_VS);
|
assert(neoRimSkin_VS);
|
||||||
|
|
||||||
@ -611,6 +613,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
|
|||||||
assert(building->instHeader->platform == PLATFORM_D3D9);
|
assert(building->instHeader->platform == PLATFORM_D3D9);
|
||||||
building->fadeAlpha = 255;
|
building->fadeAlpha = 255;
|
||||||
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
|
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
|
|
||||||
bool setupDone = false;
|
bool setupDone = false;
|
||||||
bool defer = false;
|
bool defer = false;
|
||||||
@ -640,7 +643,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
|
|||||||
setupDone = true;
|
setupDone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
if(m->texture){
|
if(m->texture){
|
||||||
d3d::setTexture(0, m->texture);
|
d3d::setTexture(0, m->texture);
|
||||||
@ -703,7 +706,7 @@ RenderBlendPass(int pass)
|
|||||||
|
|
||||||
rw::RGBA color = m->color;
|
rw::RGBA color = m->color;
|
||||||
color.alpha = (color.alpha * building->fadeAlpha)/255;
|
color.alpha = (color.alpha * building->fadeAlpha)/255;
|
||||||
setMaterial(color, m->surfaceProps);
|
setMaterial(color, m->surfaceProps); // always modulate here
|
||||||
|
|
||||||
if(m->texture){
|
if(m->texture){
|
||||||
d3d::setTexture(0, m->texture);
|
d3d::setTexture(0, m->texture);
|
||||||
|
@ -87,6 +87,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
|
|
||||||
Material *m;
|
Material *m;
|
||||||
|
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
setWorldMatrix(atomic->getFrame()->getLTM());
|
setWorldMatrix(atomic->getFrame()->getLTM());
|
||||||
lightingCB(atomic);
|
lightingCB(atomic);
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
while(n--){
|
while(n--){
|
||||||
m = inst->material;
|
m = inst->material;
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
setTexture(0, m->texture);
|
setTexture(0, m->texture);
|
||||||
|
|
||||||
@ -160,8 +161,8 @@ CreateVehiclePipe(void)
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/neoVehicle_fs_gl.inc"
|
#include "shaders/obj/neoVehicle_frag.inc"
|
||||||
#include "shaders/neoVehicle_vs_gl.inc"
|
#include "shaders/obj/neoVehicle_vert.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil };
|
||||||
neoVehicleShader = Shader::create(vs, fs);
|
neoVehicleShader = Shader::create(vs, fs);
|
||||||
@ -271,8 +272,8 @@ CreateWorldPipe(void)
|
|||||||
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
|
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/neoWorldVC_fs_gl.inc"
|
#include "shaders/obj/neoWorldVC_frag.inc"
|
||||||
#include "shaders/default_UV2_gl.inc"
|
#include "shaders/obj/default_UV2_vert.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, neoWorldVC_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, neoWorldVC_frag_src, nil };
|
||||||
neoWorldShader = Shader::create(vs, fs);
|
neoWorldShader = Shader::create(vs, fs);
|
||||||
@ -379,8 +380,8 @@ CreateGlossPipe(void)
|
|||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/neoGloss_fs_gl.inc"
|
#include "shaders/obj/neoGloss_frag.inc"
|
||||||
#include "shaders/neoGloss_vs_gl.inc"
|
#include "shaders/obj/neoGloss_vert.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoGloss_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoGloss_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, neoGloss_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, neoGloss_frag_src, nil };
|
||||||
neoGlossShader = Shader::create(vs, fs);
|
neoGlossShader = Shader::create(vs, fs);
|
||||||
@ -449,6 +450,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
|
|
||||||
Material *m;
|
Material *m;
|
||||||
|
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
setWorldMatrix(atomic->getFrame()->getLTM());
|
setWorldMatrix(atomic->getFrame()->getLTM());
|
||||||
lightingCB(atomic);
|
lightingCB(atomic);
|
||||||
|
|
||||||
@ -472,7 +474,7 @@ rimSkinRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
while(n--){
|
while(n--){
|
||||||
m = inst->material;
|
m = inst->material;
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
setTexture(0, m->texture);
|
setTexture(0, m->texture);
|
||||||
|
|
||||||
@ -499,6 +501,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
|
|
||||||
Material *m;
|
Material *m;
|
||||||
|
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
setWorldMatrix(atomic->getFrame()->getLTM());
|
setWorldMatrix(atomic->getFrame()->getLTM());
|
||||||
lightingCB(atomic);
|
lightingCB(atomic);
|
||||||
|
|
||||||
@ -520,7 +523,7 @@ rimRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
while(n--){
|
while(n--){
|
||||||
m = inst->material;
|
m = inst->material;
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
setTexture(0, m->texture);
|
setTexture(0, m->texture);
|
||||||
|
|
||||||
@ -551,8 +554,8 @@ CreateRimLightPipes(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/simple_fs_gl.inc"
|
#include "shaders/obj/simple_frag.inc"
|
||||||
#include "shaders/neoRimSkin_gl.inc"
|
#include "shaders/obj/neoRimSkin_vert.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||||
neoRimSkinShader = Shader::create(vs, fs);
|
neoRimSkinShader = Shader::create(vs, fs);
|
||||||
@ -560,8 +563,8 @@ CreateRimLightPipes(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/simple_fs_gl.inc"
|
#include "shaders/obj/simple_frag.inc"
|
||||||
#include "shaders/neoRim_gl.inc"
|
#include "shaders/obj/neoRim_vert.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||||
neoRimShader = Shader::create(vs, fs);
|
neoRimShader = Shader::create(vs, fs);
|
||||||
@ -665,6 +668,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
|
|||||||
assert(building->instHeader->platform == PLATFORM_GL3);
|
assert(building->instHeader->platform == PLATFORM_GL3);
|
||||||
building->fadeAlpha = 255;
|
building->fadeAlpha = 255;
|
||||||
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
|
building->lighting = !!(atomic->geometry->flags & rw::Geometry::LIGHT);
|
||||||
|
rw::uint32 flags = atomic->geometry->flags;
|
||||||
|
|
||||||
WorldLights lights;
|
WorldLights lights;
|
||||||
lights.numAmbients = 1;
|
lights.numAmbients = 1;
|
||||||
@ -704,7 +708,7 @@ AtomicFirstPass(RpAtomic *atomic, int pass)
|
|||||||
setupDone = true;
|
setupDone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setMaterial(m->color, m->surfaceProps);
|
setMaterial(flags, m->color, m->surfaceProps);
|
||||||
|
|
||||||
setTexture(0, m->texture);
|
setTexture(0, m->texture);
|
||||||
|
|
||||||
@ -773,7 +777,7 @@ RenderBlendPass(int pass)
|
|||||||
|
|
||||||
rw::RGBA color = m->color;
|
rw::RGBA color = m->color;
|
||||||
color.alpha = (color.alpha * building->fadeAlpha)/255;
|
color.alpha = (color.alpha * building->fadeAlpha)/255;
|
||||||
setMaterial(color, m->surfaceProps);
|
setMaterial(color, m->surfaceProps); // always modulate here
|
||||||
|
|
||||||
setTexture(0, m->texture);
|
setTexture(0, m->texture);
|
||||||
|
|
||||||
|
@ -142,17 +142,17 @@ CPostFX::Open(RwCamera *cam)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef RW_D3D9
|
#ifdef RW_D3D9
|
||||||
#include "shaders/colourfilterVC_PS.inc"
|
#include "shaders/obj/colourfilterVC_PS.inc"
|
||||||
colourfilterVC_PS = rw::d3d::createPixelShader(colourfilterVC_PS_cso);
|
colourfilterVC_PS = rw::d3d::createPixelShader(colourfilterVC_PS_cso);
|
||||||
#include "shaders/contrastPS.inc"
|
#include "shaders/obj/contrastPS.inc"
|
||||||
contrast_PS = rw::d3d::createPixelShader(contrastPS_cso);
|
contrast_PS = rw::d3d::createPixelShader(contrastPS_cso);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RW_OPENGL
|
#ifdef RW_OPENGL
|
||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/im2d_gl.inc"
|
#include "shaders/obj/im2d_vert.inc"
|
||||||
#include "shaders/colourfilterVC_fs_gl.inc"
|
#include "shaders/obj/colourfilterVC_frag.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, colourfilterVC_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, colourfilterVC_frag_src, nil };
|
||||||
colourFilterVC = Shader::create(vs, fs);
|
colourFilterVC = Shader::create(vs, fs);
|
||||||
@ -160,8 +160,8 @@ CPostFX::Open(RwCamera *cam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#include "shaders/im2d_gl.inc"
|
#include "shaders/obj/im2d_vert.inc"
|
||||||
#include "shaders/contrast_fs_gl.inc"
|
#include "shaders/obj/contrast_frag.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil };
|
||||||
contrast = Shader::create(vs, fs);
|
contrast = Shader::create(vs, fs);
|
||||||
|
@ -112,14 +112,14 @@ ScreenDroplets::InitDraw(void)
|
|||||||
|
|
||||||
openim2d_uv2();
|
openim2d_uv2();
|
||||||
#ifdef RW_D3D9
|
#ifdef RW_D3D9
|
||||||
#include "shaders/screenDroplet_PS.inc"
|
#include "shaders/obj/screenDroplet_PS.inc"
|
||||||
screenDroplet_PS = rw::d3d::createPixelShader(screenDroplet_PS_cso);
|
screenDroplet_PS = rw::d3d::createPixelShader(screenDroplet_PS_cso);
|
||||||
#endif
|
#endif
|
||||||
#ifdef RW_GL3
|
#ifdef RW_GL3
|
||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
{
|
{
|
||||||
#include "shaders/im2d_UV2_gl.inc"
|
#include "shaders/obj/im2d_UV2_vert.inc"
|
||||||
#include "shaders/screenDroplet_fs_gl.inc"
|
#include "shaders/obj/screenDroplet_frag.inc"
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, im2d_UV2_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, im2d_UV2_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, screenDroplet_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, screenDroplet_frag_src, nil };
|
||||||
screenDroplet = Shader::create(vs, fs);
|
screenDroplet = Shader::create(vs, fs);
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
all: im2d_gl.inc simple_fs_gl.inc default_UV2_gl.inc \
|
|
||||||
colourfilterVC_fs_gl.inc contrast_fs_gl.inc \
|
|
||||||
neoRim_gl.inc neoRimSkin_gl.inc \
|
|
||||||
neoWorldVC_fs_gl.inc neoGloss_vs_gl.inc neoGloss_fs_gl.inc \
|
|
||||||
neoVehicle_vs_gl.inc neoVehicle_fs_gl.inc \
|
|
||||||
im2d_UV2_gl.inc screenDroplet_fs_gl.inc
|
|
||||||
|
|
||||||
im2d_gl.inc: im2d.vert
|
|
||||||
(echo 'const char *im2d_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' im2d.vert;\
|
|
||||||
echo ';') >im2d_gl.inc
|
|
||||||
|
|
||||||
colourfilterVC_fs_gl.inc: colourfilterVC.frag
|
|
||||||
(echo 'const char *colourfilterVC_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' colourfilterVC.frag;\
|
|
||||||
echo ';') >colourfilterVC_fs_gl.inc
|
|
||||||
simple_fs_gl.inc: simple.frag
|
|
||||||
(echo 'const char *simple_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' simple.frag;\
|
|
||||||
echo ';') >simple_fs_gl.inc
|
|
||||||
|
|
||||||
default_UV2_gl.inc: default_UV2.vert
|
|
||||||
(echo 'const char *default_UV2_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' default_UV2.vert;\
|
|
||||||
echo ';') >default_UV2_gl.inc
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
contrast_fs_gl.inc: contrast.frag
|
|
||||||
(echo 'const char *contrast_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' contrast.frag;\
|
|
||||||
echo ';') >contrast_fs_gl.inc
|
|
||||||
|
|
||||||
|
|
||||||
neoRim_gl.inc: neoRim.vert
|
|
||||||
(echo 'const char *neoRim_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoRim.vert;\
|
|
||||||
echo ';') >neoRim_gl.inc
|
|
||||||
|
|
||||||
neoRimSkin_gl.inc: neoRimSkin.vert
|
|
||||||
(echo 'const char *neoRimSkin_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoRimSkin.vert;\
|
|
||||||
echo ';') >neoRimSkin_gl.inc
|
|
||||||
|
|
||||||
neoWorldVC_fs_gl.inc: neoWorldVC.frag
|
|
||||||
(echo 'const char *neoWorldVC_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoWorldVC.frag;\
|
|
||||||
echo ';') >neoWorldVC_fs_gl.inc
|
|
||||||
|
|
||||||
neoGloss_fs_gl.inc: neoGloss.frag
|
|
||||||
(echo 'const char *neoGloss_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoGloss.frag;\
|
|
||||||
echo ';') >neoGloss_fs_gl.inc
|
|
||||||
|
|
||||||
neoGloss_vs_gl.inc: neoGloss.vert
|
|
||||||
(echo 'const char *neoGloss_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoGloss.vert;\
|
|
||||||
echo ';') >neoGloss_vs_gl.inc
|
|
||||||
|
|
||||||
neoVehicle_vs_gl.inc: neoVehicle.vert
|
|
||||||
(echo 'const char *neoVehicle_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoVehicle.vert;\
|
|
||||||
echo ';') >neoVehicle_vs_gl.inc
|
|
||||||
|
|
||||||
neoVehicle_fs_gl.inc: neoVehicle.frag
|
|
||||||
(echo 'const char *neoVehicle_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' neoVehicle.frag;\
|
|
||||||
echo ';') >neoVehicle_fs_gl.inc
|
|
||||||
|
|
||||||
im2d_UV2_gl.inc: im2d_UV2.vert
|
|
||||||
(echo 'const char *im2d_UV2_vert_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' im2d_UV2.vert;\
|
|
||||||
echo ';') >im2d_UV2_gl.inc
|
|
||||||
|
|
||||||
screenDroplet_fs_gl.inc: screenDroplet.frag
|
|
||||||
(echo 'const char *screenDroplet_frag_src =';\
|
|
||||||
sed 's/..*/"&\\n"/' screenDroplet.frag;\
|
|
||||||
echo ';') >screenDroplet_fs_gl.inc
|
|
@ -20,7 +20,7 @@ main(void)
|
|||||||
}
|
}
|
||||||
vec4 color;
|
vec4 color;
|
||||||
color.rgb = prev.rgb;
|
color.rgb = prev.rgb;
|
||||||
color.a = 1.0f;
|
color.a = 1.0;
|
||||||
|
|
||||||
FRAGCOLOR(color);
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,6 @@ float4 main(in float2 texcoord : TEXCOORD0) : COLOR0
|
|||||||
tmp += prev*blurcol;
|
tmp += prev*blurcol;
|
||||||
prev = saturate(tmp);
|
prev = saturate(tmp);
|
||||||
}
|
}
|
||||||
prev.a = 1.0f;
|
prev.a = 1.0;
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ main(void)
|
|||||||
vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||||
vec4 color;
|
vec4 color;
|
||||||
color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;
|
color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;
|
||||||
color.a = 1.0f;
|
color.a = 1.0;
|
||||||
|
|
||||||
FRAGCOLOR(color);
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
9
src/extras/shaders/make_glsl.sh
Normal file
9
src/extras/shaders/make_glsl.sh
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#!sh
|
||||||
|
for i in *.vert; do
|
||||||
|
echo $i
|
||||||
|
./makeinc_glsl.sh $i
|
||||||
|
done
|
||||||
|
for i in *.frag; do
|
||||||
|
echo $i
|
||||||
|
./makeinc_glsl.sh $i
|
||||||
|
done
|
@ -1,3 +1,3 @@
|
|||||||
@echo off
|
@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 (*PS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T ps_2_0 /nologo /E main /Fo obj\%%~nf.cso %%f
|
||||||
for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo %%~nf.cso %%f
|
for %%f in (*VS.hlsl) do "%DXSDK_DIR%\Utilities\bin\x86\fxc.exe" /T vs_2_0 /nologo /E main /Fo obj\%%~nf.cso %%f
|
6
src/extras/shaders/makeinc_glsl.sh
Normal file
6
src/extras/shaders/makeinc_glsl.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!sh
|
||||||
|
ext=${1##*.}
|
||||||
|
name=${1%.*}
|
||||||
|
(echo "const char *${name}_${ext}_src =";\
|
||||||
|
sed 's/..*/"&\\n"/' $1;\
|
||||||
|
echo ';') > obj/${name}_${ext}.inc
|
@ -1,4 +1,5 @@
|
|||||||
#!sh
|
#!sh
|
||||||
|
cd obj
|
||||||
for i in *cso; do
|
for i in *cso; do
|
||||||
(echo -n 'static '
|
(echo -n 'static '
|
||||||
xxd -i $i | grep -v '_len = ') > ${i%cso}inc
|
xxd -i $i | grep -v '_len = ') > ${i%cso}inc
|
@ -42,7 +42,7 @@ main(void)
|
|||||||
v_tex1 = uv2.xy*0.5 + 0.5;
|
v_tex1 = uv2.xy*0.5 + 0.5;
|
||||||
float b = 1.0 - clamp(dot(viewVec, Normal), 0.0, 1.0);
|
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 = vec4(0.0, 0.0, 0.0, 1.0);
|
||||||
v_reflcolor.a = mix(b*b*b*b*b, 1.0f, fresnel)*shininess;
|
v_reflcolor.a = mix(b*b*b*b*b, 1.0, fresnel)*shininess;
|
||||||
|
|
||||||
for(int i = 0; i < 5; i++)
|
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_reflcolor.rgb += DoDirLightSpec(u_specDir[i].xyz, u_specColor[i].rgb, Normal, viewVec, u_specDir[i].w)*specularity*lightStrength;
|
||||||
|
@ -52,7 +52,7 @@ VS_out main(in VS_in input)
|
|||||||
output.TexCoord1 = uv2.xy*0.5 + 0.5;
|
output.TexCoord1 = uv2.xy*0.5 + 0.5;
|
||||||
float b = 1.0 - saturate(dot(viewVec, Normal));
|
float b = 1.0 - saturate(dot(viewVec, Normal));
|
||||||
output.ReflColor = float4(0.0, 0.0, 0.0, 1.0);
|
output.ReflColor = float4(0.0, 0.0, 0.0, 1.0);
|
||||||
output.ReflColor.a = lerp(b*b*b*b*b, 1.0f, fresnel)*shininess;
|
output.ReflColor.a = lerp(b*b*b*b*b, 1.0, fresnel)*shininess;
|
||||||
|
|
||||||
//Light mainLight = lights[0];
|
//Light mainLight = lights[0];
|
||||||
for(i = 0; i < 5; i++)
|
for(i = 0; i < 5; i++)
|
||||||
|
@ -21,7 +21,7 @@ const char *colourfilterVC_frag_src =
|
|||||||
" }\n"
|
" }\n"
|
||||||
" vec4 color;\n"
|
" vec4 color;\n"
|
||||||
" color.rgb = prev.rgb;\n"
|
" color.rgb = prev.rgb;\n"
|
||||||
" color.a = 1.0f;\n"
|
" color.a = 1.0;\n"
|
||||||
|
|
||||||
" FRAGCOLOR(color);\n"
|
" FRAGCOLOR(color);\n"
|
||||||
"}\n"
|
"}\n"
|
@ -13,7 +13,7 @@ const char *contrast_frag_src =
|
|||||||
" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
" vec4 color;\n"
|
" vec4 color;\n"
|
||||||
" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n"
|
" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n"
|
||||||
" color.a = 1.0f;\n"
|
" color.a = 1.0;\n"
|
||||||
|
|
||||||
" FRAGCOLOR(color);\n"
|
" FRAGCOLOR(color);\n"
|
||||||
"}\n"
|
"}\n"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user