mirror of
https://github.com/GTAmodding/re3.git
synced 2024-12-28 12:05:44 +00:00
Merge branch 'miami' into lcs
# Conflicts: # .github/workflows/reLCS_msvc_amd64.yml # .github/workflows/reLCS_msvc_x86.yml # premake5.lua # src/control/Script2.cpp # src/control/Script8.cpp
This commit is contained in:
commit
4bd7bafd7c
19 changed files with 392 additions and 76 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: 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
|
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:
|
||||
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:
|
||||
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 ReVCConan(ConanFile):
|
||||
name = "reVC"
|
||||
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("reVC with opus support requires a libsndfile built with external libs (=ogg/flac/opus/vorbis)")
|
||||
|
||||
@property
|
||||
def _reVC_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("{}" reVC)
|
||||
""").format(self.install_folder.replace("\\", "/"),
|
||||
self.source_folder.replace("\\", "/")))
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
cmake = CMake(self)
|
||||
cmake.definitions["REVC_AUDIO"] = self._reVC_audio
|
||||
cmake.definitions["REVC_WITH_OPUS"] = self.options.with_opus
|
||||
cmake.definitions["REVC_INSTALL"] = True
|
||||
cmake.definitions["REVC_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 {}
|
||||
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
|
||||
|
||||
filter "platforms:win*"
|
||||
|
|
|
@ -36,7 +36,7 @@ target_compile_definitions(${EXECUTABLE}
|
|||
PRIVATE
|
||||
$<IF:$<CONFIG:DEBUG>,DEBUG,NDEBUG>
|
||||
LIBRW
|
||||
${PROJECT}_NO_AUTOLINK
|
||||
CMAKE_NO_AUTOLINK
|
||||
)
|
||||
|
||||
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_fSpeedMultiplier = 4.0f;
|
||||
m_sQueueSample.m_fSoundIntensity = SOUND_INTENSITY;
|
||||
m_sQueueSample.m_bReleasingSoundFlag = false;
|
||||
m_sQueueSample.m_nReleasingVolumeDivider = 5;
|
||||
m_sQueueSample.m_bReverbFlag = true;
|
||||
m_sQueueSample.m_bRequireReflection = false; // todo port fix to re3
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#include "stream.h"
|
||||
#include "sampman.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
|
||||
#ifdef AUDIO_OAL_USE_SNDFILE
|
||||
#pragma comment( lib, "libsndfile-1.lib" )
|
||||
#endif
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
//TODO: max channels
|
||||
//TODO: loop count
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined _MSC_VER && !defined CMAKE_NO_AUTOLINK
|
||||
#pragma comment( lib, "OpenAL32.lib" )
|
||||
#endif
|
||||
|
||||
|
|
|
@ -507,12 +507,14 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
|||
|
||||
for(i = 0; i < model.numSpheres; i++){
|
||||
if(ignoreSeeThrough && IsSeeThrough(model.spheres[i].surface)) continue;
|
||||
if(ignoreShootThrough && IsShootThrough(model.spheres[i].surface)) continue;
|
||||
if(TestLineSphere(*(CColLine*)newline, model.spheres[i]))
|
||||
return true;
|
||||
}
|
||||
|
||||
for(i = 0; i < model.numBoxes; i++){
|
||||
if(ignoreSeeThrough && IsSeeThrough(model.boxes[i].surface)) continue;
|
||||
if(ignoreShootThrough && IsShootThrough(model.boxes[i].surface)) continue;
|
||||
if(TestLineBox(*(CColLine*)newline, model.boxes[i]))
|
||||
return true;
|
||||
}
|
||||
|
@ -522,6 +524,7 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
|||
VuTriangle vutri;
|
||||
for(i = 0; i < model.numTriangles; i++){
|
||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||
|
||||
CColTriangle *tri = &model.triangles[i];
|
||||
model.vertices[tri->a].Unpack(vutri.v0);
|
||||
|
@ -539,6 +542,7 @@ CCollision::TestLineOfSight(const CColLine &line, const CMatrix &matrix, CColMod
|
|||
#endif
|
||||
for(; i < model.numTriangles; i++){
|
||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||
|
||||
CColTriangle *tri = &model.triangles[i];
|
||||
model.vertices[tri->a].Unpack(vutri.v0);
|
||||
|
@ -1333,6 +1337,7 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
|||
float coldist = 1.0f;
|
||||
for(i = 0; i < model.numSpheres; i++){
|
||||
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))
|
||||
point.Set(0, 0, model.spheres[i].surface, model.spheres[i].piece);
|
||||
}
|
||||
|
@ -1348,6 +1353,7 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
|||
CColTriangle *lasttri = nil;
|
||||
for(i = 0; i < model.numTriangles; i++){
|
||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||
|
||||
CColTriangle *tri = &model.triangles[i];
|
||||
model.vertices[tri->a].Unpack(vutri.v0);
|
||||
|
@ -1367,6 +1373,7 @@ CCollision::ProcessLineOfSight(const CColLine &line,
|
|||
float dist;
|
||||
for(; i < model.numTriangles; i++){
|
||||
if(ignoreSeeThrough && IsSeeThrough(model.triangles[i].surface)) continue;
|
||||
if(ignoreShootThrough && IsShootThrough(model.triangles[i].surface)) continue;
|
||||
|
||||
CColTriangle *tri = &model.triangles[i];
|
||||
model.vertices[tri->a].Unpack(vutri.v0);
|
||||
|
@ -1466,13 +1473,13 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
|||
|
||||
float coldist = 1.0f;
|
||||
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))
|
||||
point.Set(0, 0, model.spheres[i].surface, model.spheres[i].piece);
|
||||
}
|
||||
|
||||
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))
|
||||
point.Set(0, 0, model.boxes[i].surface, model.boxes[i].piece);
|
||||
}
|
||||
|
@ -1484,7 +1491,7 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
|||
CColTriangle *lasttri = nil;
|
||||
VuTriangle vutri;
|
||||
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];
|
||||
model.vertices[tri->a].Unpack(vutri.v0);
|
||||
|
@ -1503,7 +1510,7 @@ CCollision::ProcessVerticalLine(const CColLine &line,
|
|||
CVuVector pnt, normal;
|
||||
float dist;
|
||||
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];
|
||||
model.vertices[tri->a].Unpack(vutri.v0);
|
||||
|
|
|
@ -95,8 +95,8 @@ int8 CRunningScript::ProcessCommands1200To1299(int32 command)
|
|||
CollectParameters(&m_nIp, 2);
|
||||
CPed* pPed = CPools::GetPedPool()->GetAt(ScriptParams[0]);
|
||||
script_assert(pPed);
|
||||
ScriptParams[0] = pPed->GetWeapon(ScriptParams[1]).m_eWeaponType;
|
||||
ScriptParams[1] = pPed->GetWeapon(ScriptParams[1]).m_nAmmoTotal;
|
||||
ScriptParams[0] = pPed->GetWeapon(ScriptParams[1] - 1).m_eWeaponType;
|
||||
ScriptParams[1] = pPed->GetWeapon(ScriptParams[1] - 1).m_nAmmoTotal;
|
||||
ScriptParams[2] = CPickups::ModelForWeapon((eWeaponType)ScriptParams[0]);
|
||||
StoreParameters(&m_nIp, 3);
|
||||
return 0;
|
||||
|
|
|
@ -66,7 +66,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||
return 0;
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||
CTheScripts::ReadTextLabelFromScript(&m_nIp, key);
|
||||
m_nIp += KEY_LENGTH_IN_SCRIPT;
|
||||
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
|
||||
return 0;
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ int8 CRunningScript::ProcessCommands1400To1499(int32 command)
|
|||
case COMMAND_CREATE_DUST_EFFECT_FOR_CUTSCENE_HELI:
|
||||
{
|
||||
CollectParameters(&m_nIp, 3);
|
||||
CObject *pHeli = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||
CObject* pHeli = CPools::GetObjectPool()->GetAt(ScriptParams[0]);
|
||||
bool found = false;
|
||||
float waterLevel = -1000.0f;
|
||||
CVector pos = pHeli->GetPosition();
|
||||
|
|
|
@ -4350,7 +4350,7 @@ CCam::ProcessArrestCamOne(void)
|
|||
((CPed*)TheCamera.pTargetEntity)->m_pedIK.GetComponentPosition(TargetPos, PED_MID);
|
||||
if(FindPlayerPed() && 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[1] = ARRESTCAM_ALONGGROUND;
|
||||
ArrestModes[2] = ARRESTCAM_OVERSHOULDER;
|
||||
|
@ -4372,7 +4372,7 @@ CCam::ProcessArrestCamOne(void)
|
|||
|
||||
if(FindPlayerPed() && 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[1] = ARRESTCAM_LAMPPOST;
|
||||
ArrestModes[2] = ARRESTCAM_ALONGGROUND;
|
||||
|
@ -4442,6 +4442,7 @@ CCam::ProcessArrestCamOne(void)
|
|||
pStoredCopPed = nil;
|
||||
}
|
||||
|
||||
Source = CamSource;
|
||||
CVector OrigSource = Source;
|
||||
TheCamera.AvoidTheGeometry(OrigSource, TargetPos, Source, FOV);
|
||||
Front = TargetPos - Source;
|
||||
|
@ -4468,8 +4469,9 @@ CCam::ProcessArrestCamOne(void)
|
|||
|
||||
if(nUsingWhichCamera == ARRESTCAM_OVERSHOULDER && pStoredCopPed){
|
||||
foundPos = GetLookOverShoulderPos(TheCamera.pTargetEntity, pStoredCopPed, TargetPos, CamSource);
|
||||
if(CamSource.z > Source.z + ARRESTCAM_S_ROTATION_UP*CTimer::GetTimeStep())
|
||||
CamSource.z = Source.z + ARRESTCAM_S_ROTATION_UP*CTimer::GetTimeStep();
|
||||
float newZ = 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){
|
||||
CamSource = Source;
|
||||
Front = TargetPos - CamSource;
|
||||
|
|
|
@ -81,6 +81,7 @@ inline bool
|
|||
IsShootThrough(uint8 surfType)
|
||||
{
|
||||
switch(surfType)
|
||||
case SURFACE_TRANSPARENT_CLOTH:
|
||||
case SURFACE_METAL_CHAIN_FENCE:
|
||||
case SURFACE_TRANSPARENT_STONE:
|
||||
case SURFACE_SCAFFOLD_POLE:
|
||||
|
|
|
@ -449,10 +449,10 @@ void CHud::Draw()
|
|||
}
|
||||
if (m_WeaponState != FADED_OUT) {
|
||||
CWeapon *weapon = playerPed->GetWeapon();
|
||||
uint32 AmmoAmount = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType)->m_nAmountofAmmunition;
|
||||
uint32 AmmoInClip = weapon->m_nAmmoInClip;
|
||||
uint32 TotalAmmo = weapon->m_nAmmoTotal;
|
||||
uint32 Ammo, Clip;
|
||||
int32 AmmoAmount = CWeaponInfo::GetWeaponInfo((eWeaponType)WeaponType)->m_nAmountofAmmunition;
|
||||
int32 AmmoInClip = weapon->m_nAmmoInClip;
|
||||
int32 TotalAmmo = weapon->m_nAmmoTotal;
|
||||
int32 Ammo, Clip;
|
||||
|
||||
if (AmmoAmount <= 1 || AmmoAmount >= 1000)
|
||||
sprintf(sTemp, "%d", TotalAmmo);
|
||||
|
|
|
@ -911,7 +911,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
|||
CWorld::bIncludeDeadPeds = 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::bIncludeBikers = false;
|
||||
}
|
||||
|
@ -924,7 +924,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
|||
shooterPed->TransformToNode(target, PED_HANDR);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -935,7 +935,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
|||
CWorld::bIncludeBikers = true;
|
||||
CWorld::bIncludeDeadPeds = 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::bIncludeDeadPeds = false;
|
||||
CWorld::bIncludeCarTyres = false;
|
||||
|
@ -981,7 +981,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
|||
target *= info->m_fRange;
|
||||
target += *fireSource;
|
||||
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;
|
||||
|
||||
int32 rotSpeed = 1;
|
||||
|
@ -1014,7 +1014,7 @@ CWeapon::FireInstantHit(CEntity *shooter, CVector *fireSource)
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
int32 rotSpeed = 1;
|
||||
|
@ -1683,7 +1683,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
|||
CWorld::bIncludeCarTyres = true;
|
||||
CWorld::bIncludeBikers = 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::bIncludeCarTyres = false;
|
||||
}
|
||||
|
@ -1716,7 +1716,7 @@ CWeapon::FireShotgun(CEntity *shooter, CVector *fireSource)
|
|||
CWorld::bIncludeDeadPeds = 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::bIncludeBikers = false;
|
||||
|
@ -2329,7 +2329,7 @@ CWeapon::FireM16_1stPerson(CEntity *shooter)
|
|||
CVector source = cam->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);
|
||||
}
|
||||
CWorld::pIgnoreEntity = nil;
|
||||
|
@ -3176,7 +3176,7 @@ CPed::IsPedDoingDriveByShooting(void)
|
|||
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)
|
||||
{
|
||||
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