mirror of
https://github.com/GTAmodding/re3.git
synced 2024-11-26 02:33:45 +00:00
sync
This commit is contained in:
commit
ef97134f50
21 changed files with 989 additions and 583 deletions
116
.github/workflows/build-cmake-conan.yml
vendored
Normal file
116
.github/workflows/build-cmake-conan.yml
vendored
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
name: reLCS 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 }} reLCS/master@ -if build -o reLCS: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 reLCS:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
|
||||||
|
env:
|
||||||
|
CONAN_SYSREQUIRES_MODE: enabled
|
||||||
|
- name: "Build reLCS (conan build)"
|
||||||
|
run: |
|
||||||
|
conan build ${{ github.workspace }} -if build -bf build -pf package
|
||||||
|
- name: "Package reLCS (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
|
2
.github/workflows/reLCS_msvc_amd64.yml
vendored
2
.github/workflows/reLCS_msvc_amd64.yml
vendored
|
@ -1,4 +1,4 @@
|
||||||
name: reLCS_msvc_amd64
|
name: reLCS premake amd64
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
2
.github/workflows/reLCS_msvc_x86.yml
vendored
2
.github/workflows/reLCS_msvc_x86.yml
vendored
|
@ -1,4 +1,4 @@
|
||||||
name: reLCS_msvc_x86
|
name: reLCS premake x86
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
44
.travis.yml
44
.travis.yml
|
@ -1,44 +0,0 @@
|
||||||
language: cpp
|
|
||||||
dist: focal
|
|
||||||
os: linux
|
|
||||||
jobs:
|
|
||||||
include:
|
|
||||||
- env: TARGET=release_linux-amd64-librw_gl3_glfw-oal
|
|
||||||
os: linux
|
|
||||||
- env: TARGET=debug_linux-amd64-librw_gl3_glfw-oal
|
|
||||||
os: linux
|
|
||||||
- env: TARGET=release_macosx-amd64-librw_gl3_glfw-oal PREMAKE5=premake-5.0.0-alpha15
|
|
||||||
compiler: clang
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode12u
|
|
||||||
- env: TARGET=debug_macosx-amd64-librw_gl3_glfw-oal PREMAKE5=premake-5.0.0-alpha15
|
|
||||||
compiler: clang
|
|
||||||
os: osx
|
|
||||||
osx_image: xcode12u
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
update: true
|
|
||||||
packages:
|
|
||||||
- linux-libc-dev
|
|
||||||
- libopenal-dev
|
|
||||||
- libglew-dev
|
|
||||||
- libglfw3-dev
|
|
||||||
- libsndfile1-dev
|
|
||||||
- libmpg123-dev
|
|
||||||
- gcc-8-multilib
|
|
||||||
- g++-8-multilib
|
|
||||||
homebrew:
|
|
||||||
packages:
|
|
||||||
- libsndfile
|
|
||||||
- mpg123
|
|
||||||
- glew
|
|
||||||
- glfw
|
|
||||||
- openal-soft
|
|
||||||
script:
|
|
||||||
- mkdir -p "$TRAVIS_BUILD_DIR/build"
|
|
||||||
- cd "$TRAVIS_BUILD_DIR"
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = linux ]; then ./premake5Linux --with-librw gmake2; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = osx ]; then curl -L -o "${PREMAKE5}.zip" "https://github.com/premake/premake-core/releases/download/v5.0.0-alpha15/${PREMAKE5}-src.zip" && unzip -q "${PREMAKE5}.zip" && cd "$PREMAKE5" && make -f Bootstrap.mak osx && cd .. && "./${PREMAKE5}/bin/release/premake5" --with-librw gmake2; fi
|
|
||||||
- cd build
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = linux ]; then env CC=gcc-8 CXX=g++-8 make config=$TARGET -j4 verbose=1; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" = osx ]; then make config=$TARGET -j4 verbose=1; fi
|
|
34
cmake/FindMilesSDK.cmake
Normal file
34
cmake/FindMilesSDK.cmake
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# - Find Miles SDK
|
||||||
|
# Find the Miles SDK header + import library
|
||||||
|
#
|
||||||
|
# MilesSDK_INCLUDE_DIR - Where to find mss.h
|
||||||
|
# MilesSDK_LIBRARIES - List of libraries when using MilesSDK.
|
||||||
|
# MilesSDK_FOUND - True if Miles SDK found.
|
||||||
|
# MilesSDK::MilesSDK - Imported library of Miles SDK
|
||||||
|
|
||||||
|
find_path(MilesSDK_INCLUDE_DIR mss.h
|
||||||
|
PATHS "${MilesSDK_DIR}"
|
||||||
|
PATH_SUFFIXES include
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
set(_miles_sdk_libname mss64)
|
||||||
|
else()
|
||||||
|
set(_miles_sdk_libname mss32)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_library(MilesSDK_LIBRARIES NAMES ${_miles_sdk_libname}
|
||||||
|
PATHS "${MilesSDK_DIR}"
|
||||||
|
PATH_SUFFIXES lib
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(MilesSDK DEFAULT_MSG MilesSDK_LIBRARIES MilesSDK_INCLUDE_DIR)
|
||||||
|
|
||||||
|
if(NOT TARGET MilesSDK::MilesSDK)
|
||||||
|
add_library(MilesSDK::MilesSDK UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(MilesSDK::MilesSDK PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${MilesSDK_LIBRARIES}
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${MilesSDK_INCLUDE_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
64
cmake/Findopusfile.cmake
Normal file
64
cmake/Findopusfile.cmake
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# - Try to find opusfile
|
||||||
|
#
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# OPUSFILE_FOUND - system has opusfile
|
||||||
|
# OPUSFILE_INCLUDE_DIRS - the opusfile include directories
|
||||||
|
# OPUSFILE_LIBRARIES - Link these to use opusfile
|
||||||
|
# OPUSFILE_CFLAGS - Compile options to use opusfile
|
||||||
|
# opusfile::opusfile - Imported library of opusfile
|
||||||
|
#
|
||||||
|
|
||||||
|
# FIXME: opusfile does not ship an official opusfile cmake script,
|
||||||
|
# rename this file/variables/target when/if it has.
|
||||||
|
|
||||||
|
find_package(PkgConfig QUIET)
|
||||||
|
if(PKG_CONFIG_FOUND)
|
||||||
|
pkg_search_module(PKG_OPUSFILE "opusfile")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_path(OPUSFILE_INCLUDE_DIR
|
||||||
|
NAMES
|
||||||
|
opusfile.h
|
||||||
|
PATH_SUFFIXES
|
||||||
|
opusfile
|
||||||
|
HINTS
|
||||||
|
${PKG_OPUSFILE_INCLUDE_DIRS}
|
||||||
|
PATHS
|
||||||
|
/usr/include
|
||||||
|
/usr/local/include
|
||||||
|
/opt/local/include
|
||||||
|
/sw/include
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(OPUSFILE_LIBRARY
|
||||||
|
NAMES
|
||||||
|
opusfile
|
||||||
|
HINTS
|
||||||
|
${PKG_OPUSFILE_LIBRARIES}
|
||||||
|
PATHS
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib
|
||||||
|
/opt/local/lib
|
||||||
|
/sw/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
set(OPUSFILE_CFLAGS "${PKG_OPUSFILE_CFLAGS_OTHER}" CACHE STRING "CFLAGS of opusfile")
|
||||||
|
|
||||||
|
set(OPUSFILE_INCLUDE_DIRS "${OPUSFILE_INCLUDE_DIR}")
|
||||||
|
set(OPUSFILE_LIBRARIES "${OPUSFILE_LIBRARY}")
|
||||||
|
|
||||||
|
if (OPUSFILE_INCLUDE_DIRS AND OPUSFILE_LIBRARIES)
|
||||||
|
set(OPUSFILE_FOUND TRUE)
|
||||||
|
endif (OPUSFILE_INCLUDE_DIRS AND OPUSFILE_LIBRARIES)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
find_package_handle_standard_args(opusfile DEFAULT_MSG OPUSFILE_INCLUDE_DIRS OPUSFILE_LIBRARIES)
|
||||||
|
|
||||||
|
if(NOT TARGET opusfile::opusfile)
|
||||||
|
add_library(__opusfile INTERFACE)
|
||||||
|
target_compile_options(__opusfile INTERFACE ${OPUSFILE_CFLAGS})
|
||||||
|
target_include_directories(__opusfile INTERFACE ${OPUSFILE_INCLUDE_DIRS})
|
||||||
|
target_link_libraries(__opusfile INTERFACE ${OPUSFILE_LIBRARIES})
|
||||||
|
add_library(opusfile::opusfile ALIAS __opusfile)
|
||||||
|
endif()
|
135
conanfile.py
Normal file
135
conanfile.py
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
from conans import ConanFile, CMake, tools
|
||||||
|
from conans.errors import ConanException, ConanInvalidConfiguration
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import textwrap
|
||||||
|
|
||||||
|
|
||||||
|
class ReLCSConan(ConanFile):
|
||||||
|
name = "reLCS"
|
||||||
|
version = "master"
|
||||||
|
license = "???" # FIXME: https://github.com/GTAmodding/re3/issues/794
|
||||||
|
settings = "os", "arch", "compiler", "build_type"
|
||||||
|
generators = "cmake", "cmake_find_package"
|
||||||
|
options = {
|
||||||
|
"audio": ["openal", "miles"],
|
||||||
|
"with_libsndfile": [True, False],
|
||||||
|
"with_opus": [True, False],
|
||||||
|
}
|
||||||
|
default_options = {
|
||||||
|
"audio": "openal",
|
||||||
|
"with_libsndfile": False,
|
||||||
|
"with_opus": False,
|
||||||
|
# "libsndfile:with_external_libs": False,
|
||||||
|
# "mpg123:flexible_resampling": False,
|
||||||
|
# "mpg123:network": False,
|
||||||
|
# "mpg123:icy": False,
|
||||||
|
# "mpg123:id3v2": False,
|
||||||
|
# "mpg123:ieeefloat": False,
|
||||||
|
# "mpg123:layer1": False,
|
||||||
|
# "mpg123:layer2": False,
|
||||||
|
# "mpg123:layer3": False,
|
||||||
|
# "mpg123:moreinfo": False,
|
||||||
|
# "sdl2:vulkan": False,
|
||||||
|
# "sdl2:opengl": True,
|
||||||
|
# "sdl2:sdl2main": True,
|
||||||
|
}
|
||||||
|
no_copy_source = True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _os_is_playstation2(self):
|
||||||
|
try:
|
||||||
|
return self.settings.os == "Playstation2"
|
||||||
|
except ConanException:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def configure(self):
|
||||||
|
if self.options.audio != "openal":
|
||||||
|
self.options.with_libsndfile = False
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.requires("librw/{}".format(self.version))
|
||||||
|
self.requires("mpg123/1.26.4")
|
||||||
|
if self.options.audio == "openal":
|
||||||
|
self.requires("openal/1.21.0")
|
||||||
|
elif self.options.audio == "miles":
|
||||||
|
self.requires("miles-sdk/{}".format(self.version))
|
||||||
|
if self.options.with_libsndfile:
|
||||||
|
self.requires("libsndfile/1.0.30")
|
||||||
|
if self.options.with_opus:
|
||||||
|
self.requires("opusfile/0.12")
|
||||||
|
|
||||||
|
def export_sources(self):
|
||||||
|
for d in ("cmake", "src"):
|
||||||
|
shutil.copytree(src=d, dst=os.path.join(self.export_sources_folder, d))
|
||||||
|
self.copy("CMakeLists.txt")
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
if self.options["librw"].platform == "gl3" and self.options["librw"].gl3_gfxlib != "glfw":
|
||||||
|
raise ConanInvalidConfiguration("Only `glfw` is supported as gl3_gfxlib.")
|
||||||
|
#if not self.options.with_opus:
|
||||||
|
# if not self.options["libsndfile"].with_external_libs:
|
||||||
|
# raise ConanInvalidConfiguration("reLCS with opus support requires a libsndfile built with external libs (=ogg/flac/opus/vorbis)")
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _reLCS_audio(self):
|
||||||
|
return {
|
||||||
|
"miles": "MSS",
|
||||||
|
"openal": "OAL",
|
||||||
|
}[str(self.options.audio)]
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
if self.source_folder == self.build_folder:
|
||||||
|
raise Exception("cannot build with source_folder == build_folder")
|
||||||
|
try:
|
||||||
|
os.unlink(os.path.join(self.install_folder, "Findlibrw.cmake"))
|
||||||
|
tools.save("FindOpenAL.cmake",
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
set(OPENAL_FOUND ON)
|
||||||
|
set(OPENAL_INCLUDE_DIR ${OpenAL_INCLUDE_DIRS})
|
||||||
|
set(OPENAL_LIBRARY ${OpenAL_LIBRARIES})
|
||||||
|
set(OPENAL_DEFINITIONS ${OpenAL_DEFINITIONS})
|
||||||
|
"""), append=True)
|
||||||
|
if self.options["librw"].platform == "gl3" and self.options["librw"].gl3_gfxlib == "glfw":
|
||||||
|
tools.save("Findglfw3.cmake",
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
if(NOT TARGET glfw)
|
||||||
|
message(STATUS "Creating glfw TARGET")
|
||||||
|
add_library(glfw INTERFACE IMPORTED)
|
||||||
|
set_target_properties(glfw PROPERTIES
|
||||||
|
INTERFACE_LINK_LIBRARIES CONAN_PKG::glfw)
|
||||||
|
endif()
|
||||||
|
"""), append=True)
|
||||||
|
tools.save("CMakeLists.txt",
|
||||||
|
textwrap.dedent(
|
||||||
|
"""
|
||||||
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
project(cmake_wrapper)
|
||||||
|
|
||||||
|
include("{}/conanbuildinfo.cmake")
|
||||||
|
conan_basic_setup(TARGETS NO_OUTPUT_DIRS)
|
||||||
|
|
||||||
|
add_subdirectory("{}" reLCS)
|
||||||
|
""").format(self.install_folder.replace("\\", "/"),
|
||||||
|
self.source_folder.replace("\\", "/")))
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.definitions["RELCS_AUDIO"] = self._reLCS_audio
|
||||||
|
cmake.definitions["RELCS_WITH_OPUS"] = self.options.with_opus
|
||||||
|
cmake.definitions["RELCS_INSTALL"] = True
|
||||||
|
cmake.definitions["RELCS_VENDORED_LIBRW"] = False
|
||||||
|
env = {}
|
||||||
|
if self._os_is_playstation2:
|
||||||
|
cmake.definitions["CMAKE_TOOLCHAIN_FILE"] = self.deps_user_info["ps2dev-cmaketoolchain"].cmake_toolchain_file
|
||||||
|
env["PS2SDK"] = self.deps_cpp_info["ps2dev-ps2sdk"].rootpath
|
||||||
|
|
||||||
|
with tools.environment_append(env):
|
||||||
|
cmake.configure(source_folder=self.build_folder)
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def package(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.install()
|
|
@ -309,7 +309,7 @@ project "reLCS"
|
||||||
|
|
||||||
filter {}
|
filter {}
|
||||||
if(os.getenv("GTA_LCS_RE_DIR")) then
|
if(os.getenv("GTA_LCS_RE_DIR")) then
|
||||||
setpaths("$(GTA_LCS_RE_DIR)/", "%(cfg.buildtarget.name)", "")
|
setpaths("$(GTA_LCS_RE_DIR)/", "%(cfg.buildtarget.name)")
|
||||||
end
|
end
|
||||||
|
|
||||||
filter "platforms:win*"
|
filter "platforms:win*"
|
||||||
|
|
|
@ -36,7 +36,7 @@ target_compile_definitions(${EXECUTABLE}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
$<IF:$<CONFIG:DEBUG>,DEBUG,NDEBUG>
|
$<IF:$<CONFIG:DEBUG>,DEBUG,NDEBUG>
|
||||||
LIBRW
|
LIBRW
|
||||||
${PROJECT}_NO_AUTOLINK
|
CMAKE_NO_AUTOLINK
|
||||||
)
|
)
|
||||||
|
|
||||||
if(LIBRW_PLATFORM_D3D9)
|
if(LIBRW_PLATFORM_D3D9)
|
||||||
|
|
|
@ -4106,6 +4106,7 @@ cAudioManager::SetupJumboFlySound(uint8 emittingVol)
|
||||||
m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex);
|
m_sQueueSample.m_nLoopEnd = SampleManager.GetSampleLoopEndOffset(m_sQueueSample.m_nSampleIndex);
|
||||||
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
m_sQueueSample.m_fSpeedMultiplier = 4.0f;
|
||||||
m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY;
|
m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY;
|
||||||
|
m_sQueueSample.m_bReleasingSoundFlag = false;
|
||||||
m_sQueueSample.m_nReleasingVolumeDivider = 5;
|
m_sQueueSample.m_nReleasingVolumeDivider = 5;
|
||||||
m_sQueueSample.m_bReverbFlag = true;
|
m_sQueueSample.m_bReverbFlag = true;
|
||||||
m_sQueueSample.m_bRequireReflection = false; // todo port fix to re3
|
m_sQueueSample.m_bRequireReflection = false; // todo port fix to re3
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "stream.h"
|
#include "stream.h"
|
||||||
#include "sampman.h"
|
#include "sampman.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
|
||||||
#ifdef AUDIO_OAL_USE_SNDFILE
|
#ifdef AUDIO_OAL_USE_SNDFILE
|
||||||
#pragma comment( lib, "libsndfile-1.lib" )
|
#pragma comment( lib, "libsndfile-1.lib" )
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
//TODO: max channels
|
//TODO: max channels
|
||||||
//TODO: loop count
|
//TODO: loop count
|
||||||
|
|
||||||
#ifdef _WIN32
|
#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
|
||||||
#pragma comment( lib, "OpenAL32.lib" )
|
#pragma comment( lib, "OpenAL32.lib" )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -996,11 +996,13 @@ cSampleManager::Initialise(void)
|
||||||
#ifdef AUDIO_CACHE
|
#ifdef AUDIO_CACHE
|
||||||
FILE *cacheFile = fcaseopen("audio\\sound.cache", "rb");
|
FILE *cacheFile = fcaseopen("audio\\sound.cache", "rb");
|
||||||
if (cacheFile) {
|
if (cacheFile) {
|
||||||
|
debug("Loadind audio cache (If game crashes around here, then your cache is corrupted, remove audio/sound.cache)\n");
|
||||||
fread(nStreamLength, sizeof(uint32), TOTAL_STREAMED_SOUNDS, cacheFile);
|
fread(nStreamLength, sizeof(uint32), TOTAL_STREAMED_SOUNDS, cacheFile);
|
||||||
fclose(cacheFile);
|
fclose(cacheFile);
|
||||||
} else
|
} else
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
|
debug("Cannot load audio cache\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( int32 i = 0; i < TOTAL_STREAMED_SOUNDS; i++ )
|
for ( int32 i = 0; i < TOTAL_STREAMED_SOUNDS; i++ )
|
||||||
{
|
{
|
||||||
|
@ -1019,10 +1021,15 @@ cSampleManager::Initialise(void)
|
||||||
}
|
}
|
||||||
#ifdef AUDIO_CACHE
|
#ifdef AUDIO_CACHE
|
||||||
cacheFile = fcaseopen("audio\\sound.cache", "wb");
|
cacheFile = fcaseopen("audio\\sound.cache", "wb");
|
||||||
|
if(cacheFile) {
|
||||||
|
debug("Saving audio cache\n");
|
||||||
fwrite(nStreamLength, sizeof(uint32), TOTAL_STREAMED_SOUNDS, cacheFile);
|
fwrite(nStreamLength, sizeof(uint32), TOTAL_STREAMED_SOUNDS, cacheFile);
|
||||||
fclose(cacheFile);
|
fclose(cacheFile);
|
||||||
#endif
|
} else {
|
||||||
|
debug("Cannot save audio cache\n");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
if ( !InitialiseSampleBanks() )
|
if ( !InitialiseSampleBanks() )
|
||||||
|
|
|
@ -507,12 +507,14 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
||||||
|
|
||||||
for(i = 0; i < model.numSpheres; i++){
|
for(i = 0; i < model.numSpheres; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.spheres[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.spheres[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.spheres[i].surface)) continue;
|
||||||
if(TestLineSphere(*(CColLine*)newline, model.spheres[i]))
|
if(TestLineSphere(*(CColLine*)newline, model.spheres[i]))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < model.numBoxes; i++){
|
for(i = 0; i < model.numBoxes; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.boxes[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.boxes[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.boxes[i].surface)) continue;
|
||||||
if(TestLineBox(*(CColLine*)newline, model.boxes[i]))
|
if(TestLineBox(*(CColLine*)newline, model.boxes[i]))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -522,6 +524,7 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
||||||
VuTriangle vutri;
|
VuTriangle vutri;
|
||||||
for(i = 0; i < model.numTriangles; i++){
|
for(i = 0; i < model.numTriangles; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||||
|
|
||||||
CColTriangle *tri = &model.triangles[i];
|
CColTriangle *tri = &model.triangles[i];
|
||||||
model.vertices[tri->a].Unpack(vutri.v0);
|
model.vertices[tri->a].Unpack(vutri.v0);
|
||||||
|
@ -539,6 +542,7 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
||||||
#endif
|
#endif
|
||||||
for(; i < model.numTriangles; i++){
|
for(; i < model.numTriangles; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||||
|
|
||||||
CColTriangle *tri = &model.triangles[i];
|
CColTriangle *tri = &model.triangles[i];
|
||||||
model.vertices[tri->a].Unpack(vutri.v0);
|
model.vertices[tri->a].Unpack(vutri.v0);
|
||||||
|
@ -1333,6 +1337,7 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
||||||
float coldist = 1.0f;
|
float coldist = 1.0f;
|
||||||
for(i = 0; i < model.numSpheres; i++){
|
for(i = 0; i < model.numSpheres; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.spheres[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.spheres[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.spheres[i].surface)) continue;
|
||||||
if(ProcessLineSphere(*(CColLine*)newline, model.spheres[i], point, coldist))
|
if(ProcessLineSphere(*(CColLine*)newline, model.spheres[i], point, coldist))
|
||||||
point.Set(0, 0, model.spheres[i].surface, model.spheres[i].piece);
|
point.Set(0, 0, model.spheres[i].surface, model.spheres[i].piece);
|
||||||
}
|
}
|
||||||
|
@ -1348,6 +1353,7 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
||||||
CColTriangle *lasttri = nil;
|
CColTriangle *lasttri = nil;
|
||||||
for(i = 0; i < model.numTriangles; i++){
|
for(i = 0; i < model.numTriangles; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||||
|
|
||||||
CColTriangle *tri = &model.triangles[i];
|
CColTriangle *tri = &model.triangles[i];
|
||||||
model.vertices[tri->a].Unpack(vutri.v0);
|
model.vertices[tri->a].Unpack(vutri.v0);
|
||||||
|
@ -1367,6 +1373,7 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
||||||
float dist;
|
float dist;
|
||||||
for(; i < model.numTriangles; i++){
|
for(; i < model.numTriangles; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||||
|
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||||
|
|
||||||
CColTriangle *tri = &model.triangles[i];
|
CColTriangle *tri = &model.triangles[i];
|
||||||
model.vertices[tri->a].Unpack(vutri.v0);
|
model.vertices[tri->a].Unpack(vutri.v0);
|
||||||
|
@ -1466,13 +1473,13 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
||||||
|
|
||||||
float coldist = 1.0f;
|
float coldist = 1.0f;
|
||||||
for(i = 0; i < model.numSpheres; i++){
|
for(i = 0; i < model.numSpheres; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.spheres[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThroughVertical(model.spheres[i].surface)) continue;
|
||||||
if(ProcessLineSphere(*(CColLine*)newline, model.spheres[i], point, coldist))
|
if(ProcessLineSphere(*(CColLine*)newline, model.spheres[i], point, coldist))
|
||||||
point.Set(0, 0, model.spheres[i].surface, model.spheres[i].piece);
|
point.Set(0, 0, model.spheres[i].surface, model.spheres[i].piece);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i = 0; i < model.numBoxes; i++){
|
for(i = 0; i < model.numBoxes; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.boxes[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThroughVertical(model.boxes[i].surface)) continue;
|
||||||
if(ProcessLineBox(*(CColLine*)newline, model.boxes[i], point, coldist))
|
if(ProcessLineBox(*(CColLine*)newline, model.boxes[i], point, coldist))
|
||||||
point.Set(0, 0, model.boxes[i].surface, model.boxes[i].piece);
|
point.Set(0, 0, model.boxes[i].surface, model.boxes[i].piece);
|
||||||
}
|
}
|
||||||
|
@ -1484,7 +1491,7 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
||||||
CColTriangle *lasttri = nil;
|
CColTriangle *lasttri = nil;
|
||||||
VuTriangle vutri;
|
VuTriangle vutri;
|
||||||
for(i = 0; i < model.numTriangles; i++){
|
for(i = 0; i < model.numTriangles; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThroughVertical(model.triangles[i].surface)) continue;
|
||||||
|
|
||||||
CColTriangle *tri = &model.triangles[i];
|
CColTriangle *tri = &model.triangles[i];
|
||||||
model.vertices[tri->a].Unpack(vutri.v0);
|
model.vertices[tri->a].Unpack(vutri.v0);
|
||||||
|
@ -1503,7 +1510,7 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
||||||
CVuVector pnt, normal;
|
CVuVector pnt, normal;
|
||||||
float dist;
|
float dist;
|
||||||
for(; i < model.numTriangles; i++){
|
for(; i < model.numTriangles; i++){
|
||||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
if(ignoreSeeThrough && IsSeeThroughVertical(model.triangles[i].surface)) continue;
|
||||||
|
|
||||||
CColTriangle *tri = &model.triangles[i];
|
CColTriangle *tri = &model.triangles[i];
|
||||||
model.vertices[tri->a].Unpack(vutri.v0);
|
model.vertices[tri->a].Unpack(vutri.v0);
|
||||||
|
|
|
@ -95,8 +95,8 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
|
||||||
CollectParameters(&m_nIp, 2);
|
CollectParameters(&m_nIp, 2);
|
||||||
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
||||||
script_assert(pPed);
|
script_assert(pPed);
|
||||||
ScriptParams[0] = pPed->GetWeapon(ScriptParams[1]).m_eWeaponType;
|
ScriptParams[0] = pPed->GetWeapon(ScriptParams[1] - 1).m_eWeaponType;
|
||||||
ScriptParams[1] = pPed->GetWeapon(ScriptParams[1]).m_nAmmoTotal;
|
ScriptParams[1] = pPed->GetWeapon(ScriptParams[1] - 1).m_nAmmoTotal;
|
||||||
ScriptParams[2] = CPickups::ModelForWeapon((eWeaponType)ScriptParams[0]);
|
ScriptParams[2] = CPickups::ModelForWeapon((eWeaponType)ScriptParams[0]);
|
||||||
StoreParameters(&m_nIp, 3);
|
StoreParameters(&m_nIp, 3);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -66,7 +66,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||||
return 0;
|
return 0;
|
||||||
case COMMAND_WANTED_STARS_ARE_FLASHING:
|
case COMMAND_WANTED_STARS_ARE_FLASHING:
|
||||||
{
|
{
|
||||||
CWanted *pWanted = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted;
|
CWanted* pWanted = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_pWanted;
|
||||||
UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->m_nWantedLevel > 0);
|
UpdateCompareFlag(pWanted->m_nMinWantedLevel - pWanted->m_nWantedLevel > 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||||
CTheScripts::ReadTextLabelFromScript(&m_nIp, key);
|
CTheScripts::ReadTextLabelFromScript(&m_nIp, key);
|
||||||
m_nIp += KEY_LENGTH_IN_SCRIPT;
|
m_nIp += KEY_LENGTH_IN_SCRIPT;
|
||||||
CVector pos = pPlayerInfo->GetPos();
|
CVector pos = pPlayerInfo->GetPos();
|
||||||
CZone *infoZone = CTheZones::FindInformationZoneForPosition(&pos);
|
CZone* infoZone = CTheZones::FindInformationZoneForPosition(&pos);
|
||||||
UpdateCompareFlag(strncmp(key, infoZone->name, 8) == 0); // original code doesn't seem to be using strncmp in here and compare 2 ints instead
|
UpdateCompareFlag(strncmp(key, infoZone->name, 8) == 0); // original code doesn't seem to be using strncmp in here and compare 2 ints instead
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -352,7 +352,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
||||||
case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI:
|
case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI:
|
||||||
{
|
{
|
||||||
CollectParameters(&m_nIp, 3);
|
CollectParameters(&m_nIp, 3);
|
||||||
CObject *pHeli = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
CObject* pHeli = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
float waterLevel = -1000.0f;
|
float waterLevel = -1000.0f;
|
||||||
CVector pos = pHeli->GetPosition();
|
CVector pos = pHeli->GetPosition();
|
||||||
|
|
|
@ -4350,7 +4350,7 @@ CCam::ProcessArrestCamOne(void)
|
||||||
((CPed*)TheCamera.pTargetEntity)->m_pedIK.GetComponentPosition(TargetPos, PED_MID);
|
((CPed*)TheCamera.pTargetEntity)->m_pedIK.GetComponentPosition(TargetPos, PED_MID);
|
||||||
if(FindPlayerPed() && FindPlayerPed()->m_pArrestingCop)
|
if(FindPlayerPed() && FindPlayerPed()->m_pArrestingCop)
|
||||||
cop = FindPlayerPed()->m_pArrestingCop;
|
cop = FindPlayerPed()->m_pArrestingCop;
|
||||||
if(cop && CGeneral::GetRandomNumberInRange(0.0f, 0.1f) > 0.5f){
|
if(cop && CGeneral::GetRandomNumberInRange(0.0f, 1.0f) > 0.5f){
|
||||||
ArrestModes[0] = ARRESTCAM_OVERSHOULDER;
|
ArrestModes[0] = ARRESTCAM_OVERSHOULDER;
|
||||||
ArrestModes[1] = ARRESTCAM_ALONGGROUND;
|
ArrestModes[1] = ARRESTCAM_ALONGGROUND;
|
||||||
ArrestModes[2] = ARRESTCAM_OVERSHOULDER;
|
ArrestModes[2] = ARRESTCAM_OVERSHOULDER;
|
||||||
|
@ -4372,7 +4372,7 @@ CCam::ProcessArrestCamOne(void)
|
||||||
|
|
||||||
if(FindPlayerPed() && FindPlayerPed()->m_pArrestingCop)
|
if(FindPlayerPed() && FindPlayerPed()->m_pArrestingCop)
|
||||||
cop = FindPlayerPed()->m_pArrestingCop;
|
cop = FindPlayerPed()->m_pArrestingCop;
|
||||||
if(cop && CGeneral::GetRandomNumberInRange(0.0f, 0.1f) > 0.65f){
|
if(cop && CGeneral::GetRandomNumberInRange(0.0f, 1.0f) > 0.65f){
|
||||||
ArrestModes[0] = ARRESTCAM_OVERSHOULDER;
|
ArrestModes[0] = ARRESTCAM_OVERSHOULDER;
|
||||||
ArrestModes[1] = ARRESTCAM_LAMPPOST;
|
ArrestModes[1] = ARRESTCAM_LAMPPOST;
|
||||||
ArrestModes[2] = ARRESTCAM_ALONGGROUND;
|
ArrestModes[2] = ARRESTCAM_ALONGGROUND;
|
||||||
|
@ -4442,6 +4442,7 @@ CCam::ProcessArrestCamOne(void)
|
||||||
pStoredCopPed = nil;
|
pStoredCopPed = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Source = CamSource;
|
||||||
CVector OrigSource = Source;
|
CVector OrigSource = Source;
|
||||||
TheCamera.AvoidTheGeometry(OrigSource, TargetPos, Source, FOV);
|
TheCamera.AvoidTheGeometry(OrigSource, TargetPos, Source, FOV);
|
||||||
Front = TargetPos - Source;
|
Front = TargetPos - Source;
|
||||||
|
@ -4468,8 +4469,9 @@ CCam::ProcessArrestCamOne(void)
|
||||||
|
|
||||||
if(nUsingWhichCamera == ARRESTCAM_OVERSHOULDER && pStoredCopPed){
|
if(nUsingWhichCamera == ARRESTCAM_OVERSHOULDER && pStoredCopPed){
|
||||||
foundPos = GetLookOverShoulderPos(TheCamera.pTargetEntity, pStoredCopPed, TargetPos, CamSource);
|
foundPos = GetLookOverShoulderPos(TheCamera.pTargetEntity, pStoredCopPed, TargetPos, CamSource);
|
||||||
if(CamSource.z > Source.z + ARRESTCAM_S_ROTATION_UP*CTimer::GetTimeStep())
|
float newZ = Source.z + ARRESTCAM_S_ROTATION_UP*CTimer::GetTimeStep();
|
||||||
CamSource.z = Source.z + ARRESTCAM_S_ROTATION_UP*CTimer::GetTimeStep();
|
if(CamSource.z > newZ)
|
||||||
|
CamSource.z = newZ;
|
||||||
}else if(nUsingWhichCamera >= ARRESTCAM_ALONGGROUND_RIGHT && nUsingWhichCamera <= ARRESTCAM_ALONGGROUND_LEFT_UP){
|
}else if(nUsingWhichCamera >= ARRESTCAM_ALONGGROUND_RIGHT && nUsingWhichCamera <= ARRESTCAM_ALONGGROUND_LEFT_UP){
|
||||||
CamSource = Source;
|
CamSource = Source;
|
||||||
Front = TargetPos - CamSource;
|
Front = TargetPos - CamSource;
|
||||||
|
|
|
@ -81,6 +81,7 @@ inline bool
|
||||||
IsShootThrough(uint8 surfType)
|
IsShootThrough(uint8 surfType)
|
||||||
{
|
{
|
||||||
switch(surfType)
|
switch(surfType)
|
||||||
|
case SURFACE_TRANSPARENT_CLOTH:
|
||||||
case SURFACE_METAL_CHAIN_FENCE:
|
case SURFACE_METAL_CHAIN_FENCE:
|
||||||
case SURFACE_TRANSPARENT_STONE:
|
case SURFACE_TRANSPARENT_STONE:
|
||||||
case SURFACE_SCAFFOLD_POLE:
|
case SURFACE_SCAFFOLD_POLE:
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -14,28 +14,28 @@ struct CFontDetails
|
||||||
float slant;
|
float slant;
|
||||||
float slantRefX;
|
float slantRefX;
|
||||||
float slantRefY;
|
float slantRefY;
|
||||||
bool justify;
|
bool8 justify;
|
||||||
bool centre;
|
bool8 centre;
|
||||||
bool rightJustify;
|
bool8 rightJustify;
|
||||||
bool background;
|
bool8 background;
|
||||||
bool backgroundOnlyText;
|
bool8 backgroundOnlyText;
|
||||||
bool proportional;
|
bool8 proportional;
|
||||||
bool bIsShadow;
|
bool8 bIsShadow;
|
||||||
bool bFlash;
|
bool8 bFlash;
|
||||||
bool bBold;
|
bool8 bBold;
|
||||||
float alphaFade;
|
float alphaFade;
|
||||||
CRGBA backgroundColor;
|
CRGBA backgroundColor;
|
||||||
float wrapX;
|
float wrapX;
|
||||||
float centreSize;
|
float centreSize;
|
||||||
float rightJustifyWrap;
|
float rightJustifyWrap;
|
||||||
int16 style;
|
int16 style;
|
||||||
bool bFontHalfTexture;
|
bool8 bFontHalfTexture;
|
||||||
uint32 bank;
|
uint32 bank;
|
||||||
int16 dropShadowPosition;
|
int16 dropShadowPosition;
|
||||||
CRGBA dropColor;
|
CRGBA dropColor;
|
||||||
bool bFlashState;
|
bool8 bFlashState;
|
||||||
int nFlashTimer;
|
int nFlashTimer;
|
||||||
bool anonymous_23;
|
bool8 anonymous_23;
|
||||||
uint32 anonymous_25;
|
uint32 anonymous_25;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -51,10 +51,10 @@ struct CFontRenderState
|
||||||
float slant;
|
float slant;
|
||||||
float slantRefX;
|
float slantRefX;
|
||||||
float slantRefY;
|
float slantRefY;
|
||||||
bool bIsShadow;
|
bool8 bIsShadow;
|
||||||
bool bFontHalfTexture;
|
bool8 bFontHalfTexture;
|
||||||
bool proportional;
|
bool8 proportional;
|
||||||
bool anonymous_14;
|
bool8 anonymous_14;
|
||||||
int16 style;
|
int16 style;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -168,72 +168,33 @@ public:
|
||||||
static uint16 *ParseToken(wchar *s, bool japShit = false);
|
static uint16 *ParseToken(wchar *s, bool japShit = false);
|
||||||
#else
|
#else
|
||||||
static uint16 *ParseToken(wchar *s);
|
static uint16 *ParseToken(wchar *s);
|
||||||
static uint16* ParseToken(wchar *s, CRGBA &color, bool &flash, bool &bold);
|
static uint16 *ParseToken(wchar *s, CRGBA &color, bool &flash, bool &bold);
|
||||||
#endif
|
#endif
|
||||||
static void DrawFonts(void);
|
static void DrawFonts(void);
|
||||||
static void RenderFontBuffer(void);
|
static void RenderFontBuffer(void);
|
||||||
static uint16 character_code(uint8 c);
|
static uint16 character_code(uint8 c);
|
||||||
|
|
||||||
static CFontDetails GetDetails() { return Details; }
|
|
||||||
static void SetScale(float x, float y);
|
static void SetScale(float x, float y);
|
||||||
static void SetSlantRefPoint(float x, float y) { Details.slantRefX = x; Details.slantRefY = y; }
|
static void SetSlantRefPoint(float x, float y);
|
||||||
static void SetSlant(float s) { Details.slant = s; }
|
static void SetSlant(float s);
|
||||||
static void SetJustifyOn(void) {
|
static void SetJustifyOn(void);
|
||||||
Details.justify = true;
|
static void SetJustifyOff(void);
|
||||||
Details.centre = false;
|
static void SetRightJustifyOn(void);
|
||||||
Details.rightJustify = false;
|
static void SetRightJustifyOff(void);
|
||||||
}
|
static void SetCentreOn(void);
|
||||||
static void SetJustifyOff(void) {
|
static void SetCentreOff(void);
|
||||||
Details.justify = false;
|
static void SetWrapx(float x);
|
||||||
Details.rightJustify = false;
|
static void SetCentreSize(float s);
|
||||||
}
|
static void SetBackgroundOn(void);
|
||||||
static void SetRightJustifyOn(void) {
|
static void SetBackgroundOff(void);
|
||||||
Details.rightJustify = true;
|
static void SetBackGroundOnlyTextOn(void);
|
||||||
Details.justify = false;
|
static void SetBackGroundOnlyTextOff(void);
|
||||||
Details.centre = false;
|
static void SetPropOn(void);
|
||||||
}
|
static void SetPropOff(void);
|
||||||
static void SetRightJustifyOff(void) {
|
|
||||||
Details.rightJustify = false;
|
|
||||||
Details.justify = false;
|
|
||||||
Details.centre = false;
|
|
||||||
}
|
|
||||||
static void SetCentreOn(void) {
|
|
||||||
Details.centre = true;
|
|
||||||
Details.justify = false;
|
|
||||||
Details.rightJustify = false;
|
|
||||||
}
|
|
||||||
static void SetCentreOff(void) {
|
|
||||||
Details.centre = false;
|
|
||||||
}
|
|
||||||
static void SetAlignment(uint8 alignment) {
|
|
||||||
if (alignment == ALIGN_LEFT) {
|
|
||||||
CFont::Details.justify = true;
|
|
||||||
CFont::Details.centre = false;
|
|
||||||
CFont::Details.rightJustify = false;
|
|
||||||
}
|
|
||||||
else if (alignment == ALIGN_CENTER) {
|
|
||||||
CFont::Details.justify = false;
|
|
||||||
CFont::Details.centre = true;
|
|
||||||
CFont::Details.rightJustify = false;
|
|
||||||
}
|
|
||||||
else if (alignment == ALIGN_RIGHT) {
|
|
||||||
CFont::Details.justify = false;
|
|
||||||
CFont::Details.centre = false;
|
|
||||||
CFont::Details.rightJustify = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
static void SetWrapx(float x) { Details.wrapX = x; }
|
|
||||||
static void SetCentreSize(float s) { Details.centreSize = s; }
|
|
||||||
static void SetBackgroundOn(void) { Details.background = true; }
|
|
||||||
static void SetBackgroundOff(void) { Details.background = false; }
|
|
||||||
static void SetBackGroundOnlyTextOn(void) { Details.backgroundOnlyText = true; }
|
|
||||||
static void SetBackGroundOnlyTextOff(void) { Details.backgroundOnlyText = false; }
|
|
||||||
static void SetPropOn(void) { Details.proportional = true; }
|
|
||||||
static void SetPropOff(void) { Details.proportional = false; }
|
|
||||||
static void SetFontStyle(int16 style);
|
static void SetFontStyle(int16 style);
|
||||||
static void SetRightJustifyWrap(float wrap) { Details.rightJustifyWrap = wrap; }
|
static void SetRightJustifyWrap(float wrap);
|
||||||
static void SetAlphaFade(float fade) { Details.alphaFade = fade; }
|
static void SetAlphaFade(float fade);
|
||||||
static void SetDropShadowPosition(int16 pos) { Details.dropShadowPosition = pos; }
|
static void SetDropShadowPosition(int16 pos);
|
||||||
static void SetBackgroundColor(CRGBA col);
|
static void SetBackgroundColor(CRGBA col);
|
||||||
static void SetColor(CRGBA col);
|
static void SetColor(CRGBA col);
|
||||||
static void SetDropColor(CRGBA col);
|
static void SetDropColor(CRGBA col);
|
||||||
|
|
|
@ -449,10 +449,10 @@ void CHud::Draw()
|
||||||
}
|
}
|
||||||
if (m_WeaponState != FADED_OUT) {
|
if (m_WeaponState != FADED_OUT) {
|
||||||
CWeapon *weapon = playerPed->GetWeapon();
|
CWeapon *weapon = playerPed->GetWeapon();
|
||||||
uint32 AmmoAmount = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType)->m_nAmountofAmmunition;
|
int32 AmmoAmount = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType)->m_nAmountofAmmunition;
|
||||||
uint32 AmmoInClip = weapon->m_nAmmoInClip;
|
int32 AmmoInClip = weapon->m_nAmmoInClip;
|
||||||
uint32 TotalAmmo = weapon->m_nAmmoTotal;
|
int32 TotalAmmo = weapon->m_nAmmoTotal;
|
||||||
uint32 Ammo, Clip;
|
int32 Ammo, Clip;
|
||||||
|
|
||||||
if (AmmoAmount <= 1 || AmmoAmount >= 1000)
|
if (AmmoAmount <= 1 || AmmoAmount >= 1000)
|
||||||
sprintf(sTemp, "%d", TotalAmmo);
|
sprintf(sTemp, "%d", TotalAmmo);
|
||||||
|
|
|
@ -911,7 +911,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
||||||
CWorld::bIncludeDeadPeds = true;
|
CWorld::bIncludeDeadPeds = true;
|
||||||
|
|
||||||
CWorld::bIncludeBikers = true;
|
CWorld::bIncludeBikers = true;
|
||||||
CWorld::ProcessLineOfSight(*fireSource, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(*fireSource, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, false, false);
|
||||||
CWorld::bIncludeDeadPeds = false;
|
CWorld::bIncludeDeadPeds = false;
|
||||||
CWorld::bIncludeBikers = false;
|
CWorld::bIncludeBikers = false;
|
||||||
}
|
}
|
||||||
|
@ -924,7 +924,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
||||||
shooterPed->TransformToNode(target, PED_HANDR);
|
shooterPed->TransformToNode(target, PED_HANDR);
|
||||||
|
|
||||||
CWorld::bIncludeBikers = true;
|
CWorld::bIncludeBikers = true;
|
||||||
CWorld::ProcessLineOfSight(*fireSource, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(*fireSource, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, false, false);
|
||||||
CWorld::bIncludeBikers = false;
|
CWorld::bIncludeBikers = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -935,7 +935,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
||||||
CWorld::bIncludeBikers = true;
|
CWorld::bIncludeBikers = true;
|
||||||
CWorld::bIncludeDeadPeds = true;
|
CWorld::bIncludeDeadPeds = true;
|
||||||
CWorld::bIncludeCarTyres = true;
|
CWorld::bIncludeCarTyres = true;
|
||||||
CWorld::ProcessLineOfSight(source, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(source, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, false, false);
|
||||||
CWorld::bIncludeBikers = false;
|
CWorld::bIncludeBikers = false;
|
||||||
CWorld::bIncludeDeadPeds = false;
|
CWorld::bIncludeDeadPeds = false;
|
||||||
CWorld::bIncludeCarTyres = false;
|
CWorld::bIncludeCarTyres = false;
|
||||||
|
@ -981,7 +981,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
||||||
target *= info->m_fRange;
|
target *= info->m_fRange;
|
||||||
target += *fireSource;
|
target += *fireSource;
|
||||||
CWorld::pIgnoreEntity = shooter;
|
CWorld::pIgnoreEntity = shooter;
|
||||||
CWorld::ProcessLineOfSight(*fireSource, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(*fireSource, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, true, false);
|
||||||
CWorld::pIgnoreEntity = nil;
|
CWorld::pIgnoreEntity = nil;
|
||||||
|
|
||||||
int32 rotSpeed = 1;
|
int32 rotSpeed = 1;
|
||||||
|
@ -1014,7 +1014,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
||||||
}
|
}
|
||||||
|
|
||||||
CWorld::bIncludeBikers = true;
|
CWorld::bIncludeBikers = true;
|
||||||
CWorld::ProcessLineOfSight(*fireSource, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(*fireSource, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, false, false);
|
||||||
CWorld::bIncludeBikers = false;
|
CWorld::bIncludeBikers = false;
|
||||||
|
|
||||||
int32 rotSpeed = 1;
|
int32 rotSpeed = 1;
|
||||||
|
@ -1683,7 +1683,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
||||||
CWorld::bIncludeCarTyres = true;
|
CWorld::bIncludeCarTyres = true;
|
||||||
CWorld::bIncludeBikers = true;
|
CWorld::bIncludeBikers = true;
|
||||||
CWorld::bIncludeDeadPeds = true;
|
CWorld::bIncludeDeadPeds = true;
|
||||||
CWorld::ProcessLineOfSight(source, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(source, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, false, false);
|
||||||
CWorld::bIncludeDeadPeds = false;
|
CWorld::bIncludeDeadPeds = false;
|
||||||
CWorld::bIncludeCarTyres = false;
|
CWorld::bIncludeCarTyres = false;
|
||||||
}
|
}
|
||||||
|
@ -1716,7 +1716,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
||||||
CWorld::bIncludeDeadPeds = true;
|
CWorld::bIncludeDeadPeds = true;
|
||||||
|
|
||||||
CWorld::bIncludeBikers = true;
|
CWorld::bIncludeBikers = true;
|
||||||
CWorld::ProcessLineOfSight(*fireSource, target, point, victim, true, true, true, true, true, false, false, true);
|
ProcessLineOfSight(*fireSource, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, false, false);
|
||||||
CWorld::bIncludeDeadPeds = false;
|
CWorld::bIncludeDeadPeds = false;
|
||||||
}
|
}
|
||||||
CWorld::bIncludeBikers = false;
|
CWorld::bIncludeBikers = false;
|
||||||
|
@ -2329,7 +2329,7 @@ CWeapon::FireM16_1stPerson(CEntity *shooter)
|
||||||
CVector source = cam->Source;
|
CVector source = cam->Source;
|
||||||
CVector target = cam->Front*info->m_fRange + source;
|
CVector target = cam->Front*info->m_fRange + source;
|
||||||
|
|
||||||
if (CWorld::ProcessLineOfSight(source, target, point, victim, true, true, true, true, true, false, false, true)) {
|
if (ProcessLineOfSight(source, target, point, victim, m_eWeaponType, shooter, true, true, true, true, true, true, false)) {
|
||||||
CheckForShootingVehicleOccupant(&victim, &point, m_eWeaponType, source, target);
|
CheckForShootingVehicleOccupant(&victim, &point, m_eWeaponType, source, target);
|
||||||
}
|
}
|
||||||
CWorld::pIgnoreEntity = nil;
|
CWorld::pIgnoreEntity = nil;
|
||||||
|
@ -3176,7 +3176,7 @@ CPed::IsPedDoingDriveByShooting(void)
|
||||||
bool
|
bool
|
||||||
CWeapon::ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects)
|
CWeapon::ProcessLineOfSight(CVector const &point1, CVector const &point2, CColPoint &point, CEntity *&entity, eWeaponType type, CEntity *shooter, bool checkBuildings, bool checkVehicles, bool checkPeds, bool checkObjects, bool checkDummies, bool ignoreSeeThrough, bool ignoreSomeObjects)
|
||||||
{
|
{
|
||||||
return CWorld::ProcessLineOfSight(point1, point2, point, entity, checkBuildings, checkVehicles, checkPeds, checkObjects, checkDummies, ignoreSeeThrough, ignoreSomeObjects);
|
return CWorld::ProcessLineOfSight(point1, point2, point, entity, checkBuildings, checkVehicles, checkPeds, checkObjects, checkDummies, false, ignoreSomeObjects, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue