mirror of
https://github.com/YGGverse/hlsdk-portable.git
synced 2025-01-23 13:14:51 +00:00
Merge branch 'sohl1.2' into zombie-x
This commit is contained in:
commit
1bee90dd8c
@ -49,44 +49,32 @@ jobs:
|
|||||||
./steam-runtime/setup_chroot.sh --i386 --tarball ./com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz
|
./steam-runtime/setup_chroot.sh --i386 --tarball ./com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz
|
||||||
sudo sed -i 's/groups=sudo/groups=adm/g' /etc/schroot/chroot.d/steamrt_scout_i386.conf
|
sudo sed -i 's/groups=sudo/groups=adm/g' /etc/schroot/chroot.d/steamrt_scout_i386.conf
|
||||||
|
|
||||||
- name: Build with xash3d-fwgs input
|
- name: Build on Linux
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
if: startsWith(matrix.os, 'ubuntu')
|
||||||
run: |
|
run: |
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake -B build-fwgs -S . -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined"
|
schroot --chroot steamrt_scout_i386 -- cmake -B build -S . -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined" -DCMAKE_INSTALL_PREFIX="$PWD/dist"
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake --build build-fwgs --target all
|
|
||||||
- name: Build with goldsource input
|
|
||||||
if: startsWith(matrix.os, 'ubuntu')
|
|
||||||
run: |
|
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake -B build -S . -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined" -DGOLDSOURCE_SUPPORT=ON -DCMAKE_INSTALL_PREFIX="$PWD/dist"
|
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake --build build --target all
|
schroot --chroot steamrt_scout_i386 -- cmake --build build --target all
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake --build build --target install
|
schroot --chroot steamrt_scout_i386 -- cmake --build build --target install
|
||||||
- name: Build with goldsource input and vgui
|
- name: Build on Linux with vgui
|
||||||
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.cc, 'gcc')
|
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.cc, 'gcc')
|
||||||
run: |
|
run: |
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake -B build-vgui -S . -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined" -DGOLDSOURCE_SUPPORT=ON -DUSE_VGUI=ON -DCMAKE_INSTALL_PREFIX="$PWD/dist-vgui"
|
schroot --chroot steamrt_scout_i386 -- cmake -B build-vgui -S . -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined" -DUSE_VGUI=ON -DCMAKE_INSTALL_PREFIX="$PWD/dist-vgui"
|
||||||
cp vgui_support/vgui-dev/lib/vgui.so build-vgui/cl_dll
|
cp vgui_support/vgui-dev/lib/vgui.so build-vgui/cl_dll
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake --build build-vgui --target all
|
schroot --chroot steamrt_scout_i386 -- cmake --build build-vgui --target all
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake --build build-vgui --target install
|
schroot --chroot steamrt_scout_i386 -- cmake --build build-vgui --target install
|
||||||
|
|
||||||
- name: Build with mingw
|
|
||||||
if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.cc, 'gcc')
|
|
||||||
run: |
|
|
||||||
sudo apt-get install -y mingw-w64-i686-dev binutils-mingw-w64-i686 gcc-mingw-w64-i686 g++-mingw-w64-i686
|
|
||||||
cmake -B build-mingw -S . -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++
|
|
||||||
cmake --build build-mingw --target all
|
|
||||||
|
|
||||||
- name: Add msbuild to PATH
|
- name: Add msbuild to PATH
|
||||||
if: startsWith(matrix.os, 'windows')
|
if: startsWith(matrix.os, 'windows')
|
||||||
uses: microsoft/setup-msbuild@v1.0.2
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
- name: Build with msvc
|
- name: Build on Windows
|
||||||
if: startsWith(matrix.os, 'windows')
|
if: startsWith(matrix.os, 'windows')
|
||||||
run: |
|
run: |
|
||||||
cmake -G "Visual Studio 16 2019" -A Win32 -B build -DGOLDSOURCE_SUPPORT=ON -DCMAKE_INSTALL_PREFIX="dist"
|
cmake -G "Visual Studio 16 2019" -A Win32 -B build -DCMAKE_INSTALL_PREFIX="dist"
|
||||||
msbuild -verbosity:normal /property:Configuration=Release build/INSTALL.vcxproj
|
msbuild -verbosity:normal /property:Configuration=Release build/INSTALL.vcxproj
|
||||||
- name: Build with msvc and vgui
|
- name: Build on Windows with vgui
|
||||||
if: startsWith(matrix.os, 'windows')
|
if: startsWith(matrix.os, 'windows')
|
||||||
run: |
|
run: |
|
||||||
cmake -G "Visual Studio 16 2019" -A Win32 -B build -DGOLDSOURCE_SUPPORT=ON -DUSE_VGUI=ON -DCMAKE_INSTALL_PREFIX="dist-vgui"
|
cmake -G "Visual Studio 16 2019" -A Win32 -B build -DUSE_VGUI=ON -DCMAKE_INSTALL_PREFIX="dist-vgui"
|
||||||
msbuild -verbosity:normal /property:Configuration=Release build/INSTALL.vcxproj
|
msbuild -verbosity:normal /property:Configuration=Release build/INSTALL.vcxproj
|
||||||
|
|
||||||
- name: Extract branch name
|
- name: Extract branch name
|
113
.github/workflows/manual.yml
vendored
Normal file
113
.github/workflows/manual.yml
vendored
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
name: manual build
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
buildtype:
|
||||||
|
type: choice
|
||||||
|
description: Build Type
|
||||||
|
options:
|
||||||
|
- Release
|
||||||
|
- Debug
|
||||||
|
usevgui:
|
||||||
|
type: choice
|
||||||
|
description: Use VGUI
|
||||||
|
options:
|
||||||
|
- 'OFF'
|
||||||
|
- 'ON'
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: ubuntu-latest
|
||||||
|
cc: gcc
|
||||||
|
cxx: g++
|
||||||
|
- os: windows-2019
|
||||||
|
cc: cl
|
||||||
|
cxx: cl
|
||||||
|
env:
|
||||||
|
CC: ${{ matrix.cc }}
|
||||||
|
CXX: ${{ matrix.cxx }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
|
||||||
|
- name: Checkout steam-runtime
|
||||||
|
if: startsWith(matrix.os, 'ubuntu')
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: ValveSoftware/steam-runtime
|
||||||
|
path: steam-runtime
|
||||||
|
- name: Cache steam-runtime
|
||||||
|
if: startsWith(matrix.os, 'ubuntu')
|
||||||
|
id: cache-steam-runtime
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz
|
||||||
|
key: ${{ runner.os }}-steam-runtime
|
||||||
|
- name: Download steam-runtime
|
||||||
|
if: startsWith(matrix.os, 'ubuntu') && steps.cache-steam-runtime.outputs.cache-hit != 'true'
|
||||||
|
run: wget --no-verbose https://repo.steampowered.com/steamrt-images-scout/snapshots/0.20210610.0/com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz
|
||||||
|
- name: Install steam runtime
|
||||||
|
if: startsWith(matrix.os, 'ubuntu')
|
||||||
|
run: |
|
||||||
|
sudo apt update
|
||||||
|
./steam-runtime/setup_chroot.sh --i386 --tarball ./com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz
|
||||||
|
sudo sed -i 's/groups=sudo/groups=adm/g' /etc/schroot/chroot.d/steamrt_scout_i386.conf
|
||||||
|
|
||||||
|
- name: Copy vgui.so
|
||||||
|
if: ${{ startsWith(matrix.os, 'ubuntu') && github.event.inputs.usevgui == 'ON' }}
|
||||||
|
run: |
|
||||||
|
mkdir -p build/cl_dll
|
||||||
|
cp vgui_support/vgui-dev/lib/vgui.so build/cl_dll
|
||||||
|
- name: Build on Linux
|
||||||
|
if: startsWith(matrix.os, 'ubuntu')
|
||||||
|
run: |
|
||||||
|
schroot --chroot steamrt_scout_i386 -- cmake -B build -S . -DCMAKE_EXE_LINKER_FLAGS="-Wl,--no-undefined" -DCMAKE_BUILD_TYPE=${{ github.event.inputs.buildtype }} -DCMAKE_INSTALL_PREFIX="$PWD/dist" -DUSE_VGUI=${{ github.event.inputs.usevgui }}
|
||||||
|
schroot --chroot steamrt_scout_i386 -- cmake --build build --target all
|
||||||
|
schroot --chroot steamrt_scout_i386 -- cmake --build build --target install
|
||||||
|
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
if: startsWith(matrix.os, 'windows')
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.2
|
||||||
|
- name: Build on Windows
|
||||||
|
if: startsWith(matrix.os, 'windows')
|
||||||
|
run: |
|
||||||
|
cmake -G "Visual Studio 16 2019" -A Win32 -B build -DCMAKE_INSTALL_PREFIX="dist" -DUSE_VGUI=${{ github.event.inputs.usevgui }}
|
||||||
|
msbuild -verbosity:normal /property:Configuration=${{ github.event.inputs.buildtype }} build/INSTALL.vcxproj
|
||||||
|
|
||||||
|
- name: Extract branch name
|
||||||
|
shell: bash
|
||||||
|
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/} | tr '/' '_')"
|
||||||
|
id: extract_branch
|
||||||
|
- name: Extract gamedir
|
||||||
|
shell: bash
|
||||||
|
run: echo "##[set-output name=gamedir;]$(grep build/CMakeCache.txt -Ee 'GAMEDIR:STRING=[a-z]+' | cut -d '=' -f 2)"
|
||||||
|
id: extract_gamedir
|
||||||
|
- name: Copy pdbs to dist dir
|
||||||
|
if: ${{ startsWith(matrix.os, 'windows') && github.event.inputs.buildtype == 'Debug' }}
|
||||||
|
run: |
|
||||||
|
copy build/cl_dll/Debug/client.pdb dist/${{ steps.extract_gamedir.outputs.gamedir }}/cl_dlls/
|
||||||
|
copy build/dlls/Debug/hl.pdb dist/${{ steps.extract_gamedir.outputs.gamedir }}/dlls/
|
||||||
|
- name: Delete .lib files from dist
|
||||||
|
if: startsWith(matrix.os, 'windows')
|
||||||
|
run: |
|
||||||
|
Remove-Item -Force -Path dist/${{ steps.extract_gamedir.outputs.gamedir }}/cl_dlls/client.lib
|
||||||
|
Remove-Item -Force -Path dist/${{ steps.extract_gamedir.outputs.gamedir }}/dlls/hl.lib
|
||||||
|
- name: Upload linux artifact
|
||||||
|
if: startsWith(matrix.os, 'ubuntu')
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: hlsdk-${{ steps.extract_branch.outputs.branch }}-linux
|
||||||
|
path: dist/${{ steps.extract_gamedir.outputs.gamedir }}
|
||||||
|
- name: Upload windows artifact
|
||||||
|
if: startsWith(matrix.os, 'windows')
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: hlsdk-${{ steps.extract_branch.outputs.branch }}-windows
|
||||||
|
path: dist/${{ steps.extract_gamedir.outputs.gamedir }}
|
||||||
|
|
@ -33,7 +33,7 @@ include(CheckIncludeFile)
|
|||||||
include(CheckCSourceCompiles)
|
include(CheckCSourceCompiles)
|
||||||
include(VSForceXPToolchain) # Force XP toolchain for Visual Studio
|
include(VSForceXPToolchain) # Force XP toolchain for Visual Studio
|
||||||
|
|
||||||
project (HLSDK-XASH3D)
|
project (HLSDK-PORTABLE)
|
||||||
|
|
||||||
#--------------
|
#--------------
|
||||||
# USER DEFINES \
|
# USER DEFINES \
|
||||||
@ -45,7 +45,6 @@ option(USE_NOVGUI_SCOREBOARD "Prefer non-VGUI Scoreboard when USE_VGUI is enable
|
|||||||
option(USE_VOICEMGR "Enable VOICE MANAGER." OFF)
|
option(USE_VOICEMGR "Enable VOICE MANAGER." OFF)
|
||||||
option(BUILD_CLIENT "Build client dll" ON)
|
option(BUILD_CLIENT "Build client dll" ON)
|
||||||
option(BUILD_SERVER "Build server dll" ON)
|
option(BUILD_SERVER "Build server dll" ON)
|
||||||
option(GOLDSOURCE_SUPPORT "Build goldsource compatible client library" OFF)
|
|
||||||
|
|
||||||
if (CMAKE_SIZEOF_VOID_P EQUAL 4 OR
|
if (CMAKE_SIZEOF_VOID_P EQUAL 4 OR
|
||||||
((WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
((WIN32 OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
@ -53,8 +52,10 @@ if (CMAKE_SIZEOF_VOID_P EQUAL 4 OR
|
|||||||
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64"
|
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64"
|
||||||
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")))
|
OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")))
|
||||||
option(64BIT "Disable auto -m32 appending to compiler flags" OFF)
|
option(64BIT "Disable auto -m32 appending to compiler flags" OFF)
|
||||||
|
option(GOLDSOURCE_SUPPORT "Build goldsource compatible client library" ON)
|
||||||
else()
|
else()
|
||||||
option(64BIT "Disable auto -m32 appending to compiler flags" ON)
|
option(64BIT "Disable auto -m32 appending to compiler flags" ON)
|
||||||
|
option(GOLDSOURCE_SUPPORT "Build goldsource compatible client library" OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(BARNACLE_FIX_VISIBILITY "Enable barnacle tongue length fix" OFF)
|
option(BARNACLE_FIX_VISIBILITY "Enable barnacle tongue length fix" OFF)
|
||||||
@ -63,6 +64,9 @@ option(CROWBAR_IDLE_ANIM "Enable crowbar idle animation" OFF)
|
|||||||
option(CROWBAR_DELAY_FIX "Enable crowbar attack delay fix" OFF)
|
option(CROWBAR_DELAY_FIX "Enable crowbar attack delay fix" OFF)
|
||||||
option(CROWBAR_FIX_RAPID_CROWBAR "Enable rapid crowbar fix" OFF)
|
option(CROWBAR_FIX_RAPID_CROWBAR "Enable rapid crowbar fix" OFF)
|
||||||
option(GAUSS_OVERCHARGE_FIX "Enable gauss overcharge fix" OFF)
|
option(GAUSS_OVERCHARGE_FIX "Enable gauss overcharge fix" OFF)
|
||||||
|
option(TRIPMINE_BEAM_DUPLICATION_FIX "Enable fix of tripmine beam duplication on level transition" OFF)
|
||||||
|
option(HANDGRENADE_DEPLOY_FIX "Enable handgrenade deploy animation fix after finishing a throw" OFF)
|
||||||
|
option(WEAPONS_ANIMATION_TIMES_FIX "Enable animation times fix for some weapons" OFF)
|
||||||
option(OEM_BUILD "Enable OEM Build" OFF)
|
option(OEM_BUILD "Enable OEM Build" OFF)
|
||||||
option(HLDEMO_BUILD "Enable Demo Build" OFF)
|
option(HLDEMO_BUILD "Enable Demo Build" OFF)
|
||||||
|
|
||||||
@ -135,6 +139,21 @@ if(GAUSS_OVERCHARGE_FIX)
|
|||||||
add_definitions(-DGAUSS_OVERCHARGE_FIX)
|
add_definitions(-DGAUSS_OVERCHARGE_FIX)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(TRIPMINE_BEAM_DUPLICATION_FIX)
|
||||||
|
message(STATUS "Tripmine beam duplication fix enabled")
|
||||||
|
add_definitions(-DTRIPMINE_BEAM_DUPLICATION_FIX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(HANDGRENADE_DEPLOY_FIX)
|
||||||
|
message(STATUS "Handgrenade deploy animation fix enabled")
|
||||||
|
add_definitions(-DHANDGRENADE_DEPLOY_FIX)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WEAPONS_ANIMATION_TIMES_FIX)
|
||||||
|
message(STATUS "Weapons animation times fix enabled")
|
||||||
|
add_definitions(-DWEAPONS_ANIMATION_TIMES_FIX)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(OEM_BUILD)
|
if(OEM_BUILD)
|
||||||
message(STATUS "OEM build enabled")
|
message(STATUS "OEM build enabled")
|
||||||
add_definitions(-DOEM_BUILD)
|
add_definitions(-DOEM_BUILD)
|
||||||
|
281
README.md
281
README.md
@ -1,140 +1,261 @@
|
|||||||
# Half-Life SDK for Xash3D [![Build Status](https://github.com/FWGS/hlsdk-xash3d/actions/workflows/.github.yml/badge.svg?branch=master)](https://github.com/FWGS/hlsdk-xash3d/actions/workflows/.github.yml) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/github/FWGS/hlsdk-xash3d?svg=true)](https://ci.appveyor.com/project/a1batross/hlsdk-xash3d)
|
# Half-Life SDK for GoldSource and Xash3D [![Build Status](https://github.com/FWGS/hlsdk-portable/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/FWGS/hlsdk-portable/actions/workflows/build.yml) [![Windows Build Status](https://ci.appveyor.com/api/projects/status/github/FWGS/hlsdk-portable?svg=true)](https://ci.appveyor.com/project/a1batross/hlsdk-portable)
|
||||||
|
|
||||||
Half-Life SDK for Xash3D & GoldSource with some fixes.
|
Half-Life SDK for GoldSource & Xash3D with some bugfixes.
|
||||||
|
|
||||||
## How to build
|
<details><summary>Changelog</summary>
|
||||||
|
<p>
|
||||||
|
|
||||||
### CMake as most universal way
|
- Fixed an occasional bug when houndeyes stuck unable to do anything. Technical detail: now monster's `Activity` is set before the call to `SetYawSpeed`. [Patch](https://github.com/FWGS/hlsdk-portable/commit/467899b99aa225a95d90222137f18c141c929c86)
|
||||||
|
- Monsters now play idle sounds as it's supposed by the code. Technical detail: the problem was a check for a wrong variable. [Patch](https://github.com/FWGS/hlsdk-portable/commit/9fc712da019a1ca646171e912209a993e7c43976)
|
||||||
|
- Fixed a bug that caused talk monsters (scientists and security guards) to face a wrong direction during scripted sequence sometimes. [Patch](https://github.com/FWGS/hlsdk-portable/commit/3e2808de62e479e83068c075cb88b4f177f9acc7)
|
||||||
|
- Fixed squad member removal. This bug affected houndeye attacks as their attack depends on percieved number of squad members. [Patch](https://github.com/FWGS/hlsdk-portable/commit/b4502f71336a08f3f2c72b7b061b2838a149a11b)
|
||||||
|
- Scientists now react to smells. [Patch](https://github.com/FWGS/hlsdk-portable/commit/2de4e7ab003d5b1674d12525f5aefb1e57a49fa3)
|
||||||
|
- Tau-cannon (gauss) plays idle animations.
|
||||||
|
- Tau-cannon (gauss) beam color depends on the charge as it was before the prediction code was introduced in Half-Life. [Patch](https://github.com/FWGS/hlsdk-portable/commit/0a29ec49c8183ebb8da22a6d2ef395eae9c3dffe)
|
||||||
|
- Brought back gluon flare in singleplayer.
|
||||||
|
- Hand grenades don't stay primed after holster, preventing detonation after weapon switch. [Patch](https://github.com/FWGS/hlsdk-portable/commit/6e1059026faa90c5bfe5e3b3f4f58fde398d4524)
|
||||||
|
- Fixed flashlight battery appearing as depleted on restore.
|
||||||
|
- Fixed a potential overflow when reading sentences.txt. [Patch](https://github.com/FWGS/hlsdk-xash3d/commit/cb51d2aa179f1eb622e08c1c07b053ccd49e40a5)
|
||||||
|
- Fixed beam attachment invalidated on restore (that led to visual bugs). [Patch](https://github.com/FWGS/hlsdk-xash3d/commit/74b5543c83c5cdcb88e9254bacab08bc63c4c896)
|
||||||
|
- Fixed alien controllers facing wrong direction in non-combat state. [Patch](https://github.com/FWGS/hlsdk-portable/commit/e51878c45b618f9b3920b46357545cbb47befeda)
|
||||||
|
- Fixed weapon deploy animations not playing sometimes on fast switching between weapons. [Patch](https://github.com/FWGS/hlsdk-portable/commit/ed676a5413c2d26b2982e5b014e0731f0eda6a0d) [Patch2](https://github.com/FWGS/hlsdk-portable/commit/4053dca7a9cf999391cbd77224144da207e4540b)
|
||||||
|
- Fixed tripmine sometimes having wrong body on pickup [Patch](https://github.com/FWGS/hlsdk-portable/commit/abf08e4520e3b6cd12a40f269f4a256cf8496227)
|
||||||
|
|
||||||
mkdir build && cd build
|
Bugfix-related macros that can be enabled during the compilation:
|
||||||
cmake ../
|
|
||||||
make
|
|
||||||
|
|
||||||
Crosscompiling using mingw:
|
- **CROWBAR_DELAY_FIX** fixes a bug when crowbar has a longer delay after the first hit.
|
||||||
|
- **CROWBAR_FIX_RAPID_CROWBAR** fixes a "rapid crowbar" bug when hitting corpses of killed monsters.
|
||||||
|
- **GAUSS_OVERCHARGE_FIX** fixes tau-cannon (gauss) charge sound not stopping after the overcharge.
|
||||||
|
- **CROWBAR_IDLE_ANIM** makes crowbar play idle animations.
|
||||||
|
- **TRIPMINE_BEAM_DUPLICATION_FIX** fixes tripmine's beam duplication on level transition.
|
||||||
|
- **HANDGRENADE_DEPLOY_FIX** makes handgrenade play draw animation after finishing a throw.
|
||||||
|
- **WEAPONS_ANIMATION_TIMES_FIX** fixes deploy and idle animation times of some weapons.
|
||||||
|
|
||||||
mkdir build-mingw && cd build-mingw
|
Bugfix-related server cvars:
|
||||||
TOOLCHAIN_PREFIX=i686-w64-mingw32 # check up the actual mingw prefix of your mingw installation
|
|
||||||
cmake ../ -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER="$TOOLCHAIN_PREFIX-gcc" -DCMAKE_CXX_COMPILER="$TOOLCHAIN_PREFIX-g++"
|
|
||||||
|
|
||||||
You may enable or disable some build options by -Dkey=value. All available build options are defined in CMakeLists.txt at root directory.
|
- **satchelfix**: if set to 1, doors won't get blocked by satchels. Fixes an infamous exploit on `crossfire` map.
|
||||||
See below if you want to build the GoldSource compatible libraries.
|
- **explosionfix**: if set to 1, explosion damage won't propagate through thin bruses.
|
||||||
|
- **selfgauss**: if set to 0, players won't hurt themselves with secondary attack when shooting thick brushes.
|
||||||
|
|
||||||
See below, if CMake is not suitable for you:
|
*Note*: the macros and cvars were adjusted in [hlfixed](https://github.com/FWGS/hlsdk-portable/tree/hlfixed) branch. The bugfix macros are kept turned off in master branch to maintain the compatibility with vanilla servers and clients.
|
||||||
|
|
||||||
### Windows
|
Other server cvars:
|
||||||
|
|
||||||
#### Using msvc
|
- **mp_bhopcap**: if set to 1, enable bunny-hop.
|
||||||
|
- **chargerfix**: if set to 1, wall-mounted health and battery chargers will play reject sounds if player has the full health or armor.
|
||||||
|
- **corpsephysics**: if set to 1, corpses of killed monsters will fly a bit from an impact. It's a cut feature from Half-Life.
|
||||||
|
|
||||||
We use compilers provided with Microsoft Visual Studio 6. There're `compile.bat` scripts in both `cl_dll` and `dlls` directories.
|
</p>
|
||||||
Before running any of those files you must define `MSVCDir` variable which is the path to your msvc installation.
|
</details>
|
||||||
|
|
||||||
set MSVCDir=C:\Program Files\Microsoft Visual Studio
|
# Obtaining source code
|
||||||
compile.bat
|
|
||||||
|
|
||||||
These scripts also can be ran via wine:
|
Either clone the repository via [git](`https://git-scm.com/downloads`) or just download ZIP via **Code** button on github. The first option is more preferable as it also allows you to search through the repo history, switch between branches and clone the vgui submodule.
|
||||||
|
|
||||||
MSVCDir="z:\home\$USER\.wine\drive_c\Program Files\Microsoft Visual Studio" wine cmd /c compile.bat
|
To clone the repository with git type in Git Bash (on Windows) or in terminal (on Unix-like operating systems):
|
||||||
|
|
||||||
The libraries built this way are always GoldSource compatible.
|
```
|
||||||
|
git clone --recursive https://github.com/FWGS/hlsdk-portable
|
||||||
|
```
|
||||||
|
|
||||||
#### Using mingw
|
# Build Instructions
|
||||||
|
|
||||||
TODO
|
## Windows
|
||||||
|
|
||||||
### Unix-like
|
### Prerequisites
|
||||||
|
|
||||||
To use waf, you need to install python (2.7 minimum)
|
Install and run [Visual Studio Installer](https://visualstudio.microsoft.com/downloads/). The installer allows you to choose specific components. Select `Desktop development with C++`. You can untick everything you don't need in Installation details, but you must keep `MSVC` ticked. You may also keep `C++ CMake tools for Windows` ticked as you'll need **cmake**. Alternatively you can install **cmake** from the [cmake.org](https://cmake.org/download/) and during installation tick *Add to the PATH...*.
|
||||||
|
|
||||||
(./waf configure -T release)
|
### Opening command prompt
|
||||||
(./waf)
|
|
||||||
|
|
||||||
### Android
|
If **cmake** was installed with Visual Studio Installer, you'll need to run `Developer command prompt for VS` via Windows `Start` menu. If **cmake** was installed with cmake installer, you can run the regular Windows `cmd`.
|
||||||
|
|
||||||
Just typical `ndk-build`.
|
Inside the prompt navigate to the hlsdk directory, using `cd` command, e.g.
|
||||||
TODO: describe what it is.
|
```
|
||||||
|
cd C:\Users\username\projects\hlsdk-portable
|
||||||
|
```
|
||||||
|
|
||||||
### Building GoldSource-compatible libraries
|
Note: if hlsdk-portable is unpacked on another disk, nagivate there first:
|
||||||
|
```
|
||||||
|
D:
|
||||||
|
cd projects\hlsdk-portable
|
||||||
|
```
|
||||||
|
|
||||||
To enable building the goldsource compatible client library add GOLDSOURCE_SUPPORT flag when calling cmake:
|
### Building
|
||||||
|
|
||||||
cmake .. -DGOLDSOURCE_SUPPORT=ON
|
Сonfigure the project:
|
||||||
|
```
|
||||||
|
cmake -A Win32 -B build
|
||||||
|
```
|
||||||
|
Once you configure the project you don't need to call `cmake` anymore unless you modify `CMakeLists.txt` files or want to reconfigure the project with different parameters.
|
||||||
|
|
||||||
or when using waf:
|
The next step is to compile the libraries:
|
||||||
|
```
|
||||||
|
cmake --build build --config Release
|
||||||
|
```
|
||||||
|
`hl.dll` and `client.dll` will appear in the `build/dlls/Release` and `build/cl_dll/Release` directories.
|
||||||
|
|
||||||
./waf configure -T release --enable-goldsrc-support
|
If you have a mod and want to automatically install libraries to the mod directory, set **GAMEDIR** variable to the directory name and **CMAKE_INSTALL_PREFIX** to your Half-Life or Xash3D installation path:
|
||||||
|
```
|
||||||
|
cmake -A Win32 -B build -DGAMEDIR=mod -DCMAKE_INSTALL_PREFIX="C:\Program Files (x86)\Steam\steamapps\common\Half-Life"
|
||||||
|
```
|
||||||
|
Then call `cmake` with `--target install` parameter:
|
||||||
|
```
|
||||||
|
cmake --build build --config Release --target install
|
||||||
|
```
|
||||||
|
|
||||||
Unlike original client by Valve the resulting client library will not depend on vgui or SDL2 just like the one that's used in FWGS Xash3d.
|
#### Choosing Visual Studio version
|
||||||
|
|
||||||
Note for **Windows**: it's not possible to create GoldSource compatible libraries using mingw, only msvc builds will work.
|
You can explicitly choose a Visual Studio version on the configuration step by specifying cmake generator:
|
||||||
|
```
|
||||||
|
cmake -G "Visual Studio 16 2019" -A Win32 -B build
|
||||||
|
```
|
||||||
|
|
||||||
Note for **Linux**: GoldSource requires libraries (both client and server) to be compiled with libstdc++ bundled with g++ of major version 4 (versions from 4.6 to 4.9 should work).
|
### Editing code in Visual Studio
|
||||||
If your Linux distribution does not provide compatible g++ version you have several options.
|
|
||||||
|
|
||||||
#### Method 1: Statically build with c++ library
|
After the configuration step, `HLSDK-PORTABLE.sln` should appear in the `build` directory. You can open this solution in Visual Studio and continue developing there.
|
||||||
|
|
||||||
This one is the most simple but has a drawback.
|
## Windows. Using Microsoft Visual Studio 6
|
||||||
|
|
||||||
cmake ../ -DGOLDSOURCE_SUPPORT=ON -DCMAKE_C_FLAGS="-static-libstdc++ -static-libgcc"
|
Microsoft Visual Studio 6 is very old, but if you still have it installed, you can use it to build this hlsdk. There are no project files, but two `.bat` files, for server and client libraries. They require variable **MSVCDir** to be set to the installation path of Visual Studio:
|
||||||
|
|
||||||
The drawback is that the compiled libraries will be larger in size.
|
```
|
||||||
|
set MSVCDir=C:\Program Files\Microsoft Visual Studio
|
||||||
|
cd dlls && compile.bat && cd ../cl_dll && compile.bat
|
||||||
|
```
|
||||||
|
|
||||||
#### Method 2: Build in Steam Runtime chroot
|
`hl.dll` and `client.dll` will appear in `dlls/` and `cl_dll/` diretories. The libraries built with msvc6 should be compatible with Windows XP.
|
||||||
|
|
||||||
This is the official way to build Steam compatible games for Linux.
|
## Linux. Using Steam Runtime in chroot
|
||||||
|
|
||||||
Clone https://github.com/ValveSoftware/steam-runtime and follow instructions https://github.com/ValveSoftware/steam-runtime#building-in-the-runtime
|
### Prerequisites
|
||||||
|
|
||||||
sudo ./setup_chroot.sh --i386
|
The official way to build Steam compatible games for Linux is through steam-runtime.
|
||||||
|
|
||||||
Then use cmake and make as usual, but prepend the commands with `schroot --chroot steamrt_scout_i386 --`:
|
Install schroot. On Ubuntu or Debian:
|
||||||
|
|
||||||
mkdir build-in-steamrt && cd build-in-steamrt
|
```
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake ../ -DGOLDSOURCE_SUPPORT=ON
|
sudo apt install schroot
|
||||||
schroot --chroot steamrt_scout_i386 -- make
|
```
|
||||||
|
|
||||||
#### Method 3: Create your own chroot with older distro that includes g++ 4.
|
Clone https://github.com/ValveSoftware/steam-runtime and follow instructions: [download](https://github.com/ValveSoftware/steam-runtime/blob/e014a74f60b45a861d38a867b1c81efe8484f77a/README.md#downloading-a-steam-runtime) and [setup](https://github.com/ValveSoftware/steam-runtime/blob/e014a74f60b45a861d38a867b1c81efe8484f77a/README.md#using-schroot) the chroot.
|
||||||
|
|
||||||
Use the most suitable way for you to create an old distro 32-bit chroot. E.g. on Debian (and similar) you can use debootstrap.
|
```
|
||||||
|
sudo ./setup_chroot.sh --i386 --tarball ./com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
sudo debootstrap --arch=i386 jessie /var/chroot/jessie-debian-i386 # On Ubuntu type trusty instead of jessie
|
### Building
|
||||||
sudo chroot /var/chroot/jessie-debian-i386
|
|
||||||
|
|
||||||
Inside chroot install cmake, make, g++ and libsdl2-dev. Then exit the chroot.
|
Now you can use cmake and make prepending the commands with `schroot --chroot steamrt_scout_i386 --`:
|
||||||
|
```
|
||||||
|
schroot --chroot steamrt_scout_i386 -- cmake -B build-in-steamrt -S .
|
||||||
|
schroot --chroot steamrt_scout_i386 -- cmake --build build-in-steamrt
|
||||||
|
```
|
||||||
|
|
||||||
On the host system install schroot. Then create and adapt the following config in /etc/schroot/chroot.d/jessie.conf (you can choose a different name):
|
## Linux. Build without Steam Runtime
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Install C++ compilers, cmake and x86 development libraries for C, C++ and SDL2. On Ubuntu/Debian:
|
||||||
|
```
|
||||||
|
sudo apt install cmake build-essential gcc-multilib g++-multilib libsdl2-dev:i386
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake -B build -S .
|
||||||
|
cmake --build build
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the libraries built this way might be not compatible with Steam Half-Life. If you have such issue you can configure it to build statically with c++ and gcc libraries:
|
||||||
|
```
|
||||||
|
cmake .. -DCMAKE_C_FLAGS="-static-libstdc++ -static-libgcc"
|
||||||
|
```
|
||||||
|
To ensure portability it's still better to build using Steam Runtime or another chroot of some older distro.
|
||||||
|
|
||||||
|
## Linux. Build in your own chroot
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Use the most suitable way for you to create an old distro 32-bit chroot. E.g. on Ubuntu/Debian you can use debootstrap.
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo apt install debootstrap schroot
|
||||||
|
sudo mkdir -p /var/choots
|
||||||
|
sudo debootstrap --arch=i386 jessie /var/chroots/jessie-i386 # On Ubuntu type trusty instead of jessie
|
||||||
|
sudo chroot /var/chroots/jessie-i386
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
# inside chroot
|
||||||
|
apt install cmake build-essential gcc-multilib g++-multilib libsdl2-dev
|
||||||
|
exit
|
||||||
|
```
|
||||||
|
|
||||||
|
Create and adapt the following config in /etc/schroot/chroot.d/jessie.conf (you can choose a different name):
|
||||||
|
|
||||||
```
|
```
|
||||||
[jessie]
|
[jessie]
|
||||||
type=directory
|
type=directory
|
||||||
description=Debian jessie i386
|
description=Debian jessie i386
|
||||||
directory=/var/chroot/debian-jessie-i386/
|
directory=/var/chroots/jessie-i386/
|
||||||
users=yourusername
|
users=yourusername
|
||||||
groups=yourusername
|
groups=adm
|
||||||
root-groups=root
|
root-groups=root
|
||||||
preserve-environment=true
|
preserve-environment=true
|
||||||
personality=linux32
|
personality=linux32
|
||||||
```
|
```
|
||||||
|
|
||||||
Insert your actual user name in place of `yourusername`. Then prepend any make or cmake call with `schroot -c jessie --`:
|
Insert your actual user name in place of `yourusername`.
|
||||||
|
|
||||||
mkdir build-in-chroot && cd build-in-chroot
|
### Building
|
||||||
schroot --chroot jessie -- cmake ../ -DGOLDSOURCE_SUPPORT=ON
|
|
||||||
schroot --chroot jessie -- make
|
|
||||||
|
|
||||||
#### Method 4: Install the needed g++ version yourself
|
Prepend any make or cmake call with `schroot -c jessie --`:
|
||||||
|
```
|
||||||
TODO: describe steps.
|
schroot --chroot jessie -- cmake -B build-in-chroot -S .
|
||||||
|
schroot --chroot jessie -- cmake --build build-in-chroot
|
||||||
#### Configuring Qt Creator to use toolchain from chroot
|
|
||||||
|
|
||||||
Create a file with the following contents anywhere:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
#!/bin/sh
|
|
||||||
schroot --chroot steamrt_scout_i386 -- cmake "$@"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Make it executable.
|
## Android
|
||||||
In Qt Creator go to `Tools` -> `Options` -> `Build & Run` -> `CMake`. Add a new cmake tool and specify the path of previously created file.
|
|
||||||
Go to `Kits` tab, clone your default configuration and choose your CMake tool there.
|
TODO
|
||||||
Choose the new kit when opening CMakeLists.txt.
|
|
||||||
|
## Other platforms
|
||||||
|
|
||||||
|
Building on other Unix-like platforms (e.g. FreeBSD) is supported.
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Install C and C++ compilers (like gcc or clang), cmake and make (or gmake)
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake -B build -S .
|
||||||
|
cmake --build build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building with waf
|
||||||
|
|
||||||
|
To use waf, you need to install python (2.7 minimum)
|
||||||
|
|
||||||
|
```
|
||||||
|
(./waf configure -T release)
|
||||||
|
(./waf)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build options
|
||||||
|
|
||||||
|
Some useful build options that can be set during the cmake step.
|
||||||
|
|
||||||
|
* **GOLDSOURCE_SUPPORT** - allows to turn off/on the support for GoldSource input. Set to **ON** by default on Windows and Linux, **OFF** on other platforms.
|
||||||
|
* **USE_VGUI** - whether to use VGUI library. **OFF** by default. You need to init `vgui_support` submodule in order to build with VGUI.
|
||||||
|
|
||||||
|
This list is incomplete. Look at `CMakeLists.txt` to see all available options.
|
||||||
|
|
||||||
|
Prepend option names with `-D` when passing to cmake. Boolean options can take values **OFF** and **ON**. Example:
|
||||||
|
|
||||||
|
```
|
||||||
|
cmake .. -DUSE_VGUI=ON -DGOLDSOURCE_SUPPORT=ON -DCROWBAR_IDLE_ANIM=ON -DCROWBAR_FIX_RAPID_CROWBAR=ON
|
||||||
|
```
|
||||||
|
@ -8,7 +8,7 @@ environment:
|
|||||||
# - os: Visual Studio 2017
|
# - os: Visual Studio 2017
|
||||||
# GENERATOR_NAME: "Visual Studio 15 2017"
|
# GENERATOR_NAME: "Visual Studio 15 2017"
|
||||||
|
|
||||||
clone_folder: c:\projects\xash\hlsdk-xash3d
|
clone_folder: c:\projects\xash\hlsdk-portable
|
||||||
|
|
||||||
build:
|
build:
|
||||||
project: build/INSTALL.vcxproj
|
project: build/INSTALL.vcxproj
|
||||||
@ -20,7 +20,7 @@ configuration:
|
|||||||
|
|
||||||
before_build:
|
before_build:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- cmake -G "%GENERATOR_NAME%" -B build -DGOLDSOURCE_SUPPORT=ON -DCMAKE_INSTALL_PREFIX="dist"
|
- cmake -G "%GENERATOR_NAME%" -B build -DCMAKE_INSTALL_PREFIX="dist"
|
||||||
|
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: dist
|
- path: dist
|
||||||
|
@ -170,7 +170,7 @@ if (USE_VGUI)
|
|||||||
link_directories(${CMAKE_SOURCE_DIR}/vgui_support/vgui-dev/lib)
|
link_directories(${CMAKE_SOURCE_DIR}/vgui_support/vgui-dev/lib)
|
||||||
include_directories(../vgui_support/vgui-dev/include)
|
include_directories(../vgui_support/vgui-dev/include)
|
||||||
else()
|
else()
|
||||||
include_directories(../utils/false_vgui/include)
|
include_directories(../utils/fake_vgui/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(USE_VOICEMGR)
|
if(USE_VOICEMGR)
|
||||||
|
@ -137,7 +137,7 @@ void HUD_PlaybackEvent( int flags, const edict_t *pInvoker, unsigned short event
|
|||||||
|
|
||||||
// Weapon prediction events are assumed to occur at the player's origin
|
// Weapon prediction events are assumed to occur at the player's origin
|
||||||
org = g_finalstate->playerstate.origin;
|
org = g_finalstate->playerstate.origin;
|
||||||
ang = v_angles;
|
ang = v_client_aimangles;
|
||||||
gEngfuncs.pfnPlaybackEvent( flags, pInvoker, eventindex, delay, org, ang, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2 );
|
gEngfuncs.pfnPlaybackEvent( flags, pInvoker, eventindex, delay, org, ang, fparam1, fparam2, iparam1, iparam2, bparam1, bparam2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,6 +39,7 @@ extern cvar_t *cl_lw;
|
|||||||
|
|
||||||
extern int g_runfuncs;
|
extern int g_runfuncs;
|
||||||
extern vec3_t v_angles;
|
extern vec3_t v_angles;
|
||||||
|
extern vec3_t v_client_aimangles;
|
||||||
extern float g_lastFOV;
|
extern float g_lastFOV;
|
||||||
extern struct local_state_s *g_finalstate;
|
extern struct local_state_s *g_finalstate;
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,7 +7,7 @@ set PATH=%MSVCDir%\VC98\Bin;%MSVCDir%\Common\MSDev98\Bin\;%PATH%
|
|||||||
echo -- Compiler is MSVC6
|
echo -- Compiler is MSVC6
|
||||||
|
|
||||||
set XASH3DSRC=..\..\Xash3D_original
|
set XASH3DSRC=..\..\Xash3D_original
|
||||||
set INCLUDES=-I../common -I../engine -I../pm_shared -I../game_shared -I../public -I../external -I../dlls -I../utils/false_vgui/include
|
set INCLUDES=-I../common -I../engine -I../pm_shared -I../game_shared -I../public -I../external -I../dlls -I../utils/fake_vgui/include
|
||||||
set SOURCES=../dlls/crossbow.cpp ^
|
set SOURCES=../dlls/crossbow.cpp ^
|
||||||
../dlls/crowbar.cpp ^
|
../dlls/crowbar.cpp ^
|
||||||
../dlls/egon.cpp ^
|
../dlls/egon.cpp ^
|
||||||
@ -71,12 +71,11 @@ set SOURCES=../dlls/crossbow.cpp ^
|
|||||||
view.cpp ^
|
view.cpp ^
|
||||||
scoreboard.cpp ^
|
scoreboard.cpp ^
|
||||||
MOTD.cpp
|
MOTD.cpp
|
||||||
set DEFINES=/DCLIENT_DLL /DCLIENT_WEAPONS /Dsnprintf=_snprintf /DNO_VOICEGAMEMGR /DGOLDSOURCE_SUPPORT
|
set DEFINES=/DCLIENT_DLL /DCLIENT_WEAPONS /Dsnprintf=_snprintf /DNO_VOICEGAMEMGR /DGOLDSOURCE_SUPPORT /DNDEBUG
|
||||||
set LIBS=user32.lib Winmm.lib
|
set LIBS=user32.lib Winmm.lib
|
||||||
set OUTNAME=client.dll
|
set OUTNAME=client.dll
|
||||||
set DEBUG=/debug
|
|
||||||
|
|
||||||
cl %DEFINES% %LIBS% %SOURCES% %INCLUDES% -o %OUTNAME% /link /dll /out:%OUTNAME% %DEBUG%
|
cl %DEFINES% %LIBS% %SOURCES% %INCLUDES% -o %OUTNAME% /link /dll /out:%OUTNAME% /release
|
||||||
|
|
||||||
echo -- Compile done. Cleaning...
|
echo -- Compile done. Cleaning...
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ void DLLEXPORT HUD_TxferPredictionData( struct entity_state_s *ps, const struct
|
|||||||
VectorCopy( ppcd->vuser3, pcd->vuser3 );
|
VectorCopy( ppcd->vuser3, pcd->vuser3 );
|
||||||
VectorCopy( ppcd->vuser4, pcd->vuser4 );
|
VectorCopy( ppcd->vuser4, pcd->vuser4 );
|
||||||
|
|
||||||
memcpy( wd, pwd, 32 * sizeof(weapon_data_t) );
|
memcpy( wd, pwd, MAX_WEAPONS * sizeof(weapon_data_t) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -703,7 +703,7 @@ static void EV_FireGlock_Impl( event_args_t *args )
|
|||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
{
|
{
|
||||||
EV_MuzzleFlash();
|
EV_MuzzleFlash();
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? GLOCK_SHOOT_EMPTY : GLOCK_SHOOT, 2 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( empty ? GLOCK_SHOOT_EMPTY : GLOCK_SHOOT, 0 );
|
||||||
|
|
||||||
V_PunchAxis( 0, -2.0 );
|
V_PunchAxis( 0, -2.0 );
|
||||||
}
|
}
|
||||||
@ -861,7 +861,7 @@ void EV_FireShotGunDouble( event_args_t *args )
|
|||||||
{
|
{
|
||||||
// Add muzzle flash to current weapon model
|
// Add muzzle flash to current weapon model
|
||||||
EV_MuzzleFlash();
|
EV_MuzzleFlash();
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( SHOTGUN_FIRE2, 2 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( SHOTGUN_FIRE2, 0 );
|
||||||
V_PunchAxis( 0, -10.0 );
|
V_PunchAxis( 0, -10.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -915,7 +915,7 @@ void EV_FireShotGunSingle( event_args_t *args )
|
|||||||
{
|
{
|
||||||
// Add muzzle flash to current weapon model
|
// Add muzzle flash to current weapon model
|
||||||
EV_MuzzleFlash();
|
EV_MuzzleFlash();
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( SHOTGUN_FIRE, 2 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( SHOTGUN_FIRE, 0 );
|
||||||
|
|
||||||
V_PunchAxis( 0, -5.0 );
|
V_PunchAxis( 0, -5.0 );
|
||||||
}
|
}
|
||||||
@ -1207,7 +1207,7 @@ void EV_FireMP5( event_args_t *args )
|
|||||||
|
|
||||||
// Add muzzle flash to current weapon model
|
// Add muzzle flash to current weapon model
|
||||||
EV_MuzzleFlash();
|
EV_MuzzleFlash();
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( MP5_FIRE1 + gEngfuncs.pfnRandomLong( 0, 2 ), 2 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( MP5_FIRE1 + gEngfuncs.pfnRandomLong( 0, 2 ), 0 );
|
||||||
|
|
||||||
V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
|
V_PunchAxis( 0, gEngfuncs.pfnRandomFloat( -2, 2 ) );
|
||||||
}
|
}
|
||||||
@ -1244,7 +1244,7 @@ void EV_FireMP52( event_args_t *args )
|
|||||||
|
|
||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
{
|
{
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( MP5_LAUNCH, 2 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( MP5_LAUNCH, 0 );
|
||||||
V_PunchAxis( 0, -10 );
|
V_PunchAxis( 0, -10 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1652,7 +1652,7 @@ void EV_FireGauss( event_args_t *args )
|
|||||||
gEngfuncs.SetViewAngles( viewangles );
|
gEngfuncs.SetViewAngles( viewangles );
|
||||||
|
|
||||||
V_PunchAxis( 0.0f, -2.0f );
|
V_PunchAxis( 0.0f, -2.0f );
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( GAUSS_FIRE2, 2 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( GAUSS_FIRE2, 0 );
|
||||||
|
|
||||||
if( m_fPrimaryFire == false )
|
if( m_fPrimaryFire == false )
|
||||||
g_flApplyVel = flDamage;
|
g_flApplyVel = flDamage;
|
||||||
@ -1919,13 +1919,13 @@ void EV_Crowbar( event_args_t *args )
|
|||||||
switch( (g_iSwing++) % 3 )
|
switch( (g_iSwing++) % 3 )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROWBAR_ATTACK1MISS, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROWBAR_ATTACK1MISS, 0 );
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROWBAR_ATTACK2MISS, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROWBAR_ATTACK2MISS, 0 );
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROWBAR_ATTACK3MISS, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROWBAR_ATTACK3MISS, 0 );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2042,9 +2042,9 @@ void EV_FireCrossbow2( event_args_t *args )
|
|||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
{
|
{
|
||||||
if( args->iparam1 )
|
if( args->iparam1 )
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE, 0 );
|
||||||
else
|
else
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE3, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE3, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store off the old count
|
// Store off the old count
|
||||||
@ -2118,9 +2118,9 @@ void EV_FireCrossbow( event_args_t *args )
|
|||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
{
|
{
|
||||||
if( args->iparam1 )
|
if( args->iparam1 )
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE, 0 );
|
||||||
else
|
else
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE3, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( CROSSBOW_FIRE3, 0 );
|
||||||
|
|
||||||
V_PunchAxis( 0.0f, -2.0f );
|
V_PunchAxis( 0.0f, -2.0f );
|
||||||
}
|
}
|
||||||
@ -2160,7 +2160,7 @@ void EV_FireRpg( event_args_t *args )
|
|||||||
//Only play the weapon anims if I shot it.
|
//Only play the weapon anims if I shot it.
|
||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
{
|
{
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( RPG_FIRE2, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( RPG_FIRE2, 0 );
|
||||||
|
|
||||||
V_PunchAxis( 0, -5.0 );
|
V_PunchAxis( 0, -5.0 );
|
||||||
}
|
}
|
||||||
@ -2261,7 +2261,7 @@ void EV_EgonFire( event_args_t *args )
|
|||||||
|
|
||||||
//Only play the weapon anims if I shot it.
|
//Only play the weapon anims if I shot it.
|
||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( g_fireAnims1[gEngfuncs.pfnRandomLong( 0, 3 )], 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( g_fireAnims1[gEngfuncs.pfnRandomLong( 0, 3 )], 0 );
|
||||||
|
|
||||||
if( iStartup == 1 && EV_IsLocal( idx ) && !( pBeam || pBeam2 || pFlare ) && cl_lw->value ) //Adrian: Added the cl_lw check for those lital people that hate weapon prediction.
|
if( iStartup == 1 && EV_IsLocal( idx ) && !( pBeam || pBeam2 || pFlare ) && cl_lw->value ) //Adrian: Added the cl_lw check for those lital people that hate weapon prediction.
|
||||||
{
|
{
|
||||||
@ -2403,7 +2403,7 @@ void EV_HornetGunFire( event_args_t *args )
|
|||||||
if( EV_IsLocal( idx ) )
|
if( EV_IsLocal( idx ) )
|
||||||
{
|
{
|
||||||
V_PunchAxis( 0, gEngfuncs.pfnRandomLong( 0, 2 ) );
|
V_PunchAxis( 0, gEngfuncs.pfnRandomLong( 0, 2 ) );
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation( HGUN_SHOOT, 1 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation( HGUN_SHOOT, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
switch( gEngfuncs.pfnRandomLong( 0, 2 ) )
|
switch( gEngfuncs.pfnRandomLong( 0, 2 ) )
|
||||||
@ -2448,6 +2448,7 @@ void EV_TripmineFire( event_args_t *args )
|
|||||||
pmtrace_t tr;
|
pmtrace_t tr;
|
||||||
|
|
||||||
idx = args->entindex;
|
idx = args->entindex;
|
||||||
|
const bool last = args->bparam1 != 0;
|
||||||
VectorCopy( args->origin, vecSrc );
|
VectorCopy( args->origin, vecSrc );
|
||||||
VectorCopy( args->angles, angles );
|
VectorCopy( args->angles, angles );
|
||||||
|
|
||||||
@ -2470,7 +2471,7 @@ void EV_TripmineFire( event_args_t *args )
|
|||||||
gEngfuncs.pEventAPI->EV_PlayerTrace( vecSrc, vecSrc + forward * 128.0f, PM_NORMAL, -1, &tr );
|
gEngfuncs.pEventAPI->EV_PlayerTrace( vecSrc, vecSrc + forward * 128.0f, PM_NORMAL, -1, &tr );
|
||||||
|
|
||||||
//Hit something solid
|
//Hit something solid
|
||||||
if( tr.fraction < 1.0f )
|
if( tr.fraction < 1.0f && !last )
|
||||||
gEngfuncs.pEventAPI->EV_WeaponAnimation ( TRIPMINE_DRAW, 0 );
|
gEngfuncs.pEventAPI->EV_WeaponAnimation ( TRIPMINE_DRAW, 0 );
|
||||||
|
|
||||||
gEngfuncs.pEventAPI->EV_PopPMStates();
|
gEngfuncs.pEventAPI->EV_PopPMStates();
|
||||||
|
@ -36,7 +36,7 @@ extern globalvars_t *gpGlobals;
|
|||||||
extern int g_iUser1;
|
extern int g_iUser1;
|
||||||
|
|
||||||
// Pool of client side entities/entvars_t
|
// Pool of client side entities/entvars_t
|
||||||
static entvars_t ev[32];
|
static entvars_t ev[MAX_WEAPONS];
|
||||||
static int num_ents = 0;
|
static int num_ents = 0;
|
||||||
|
|
||||||
// The entity we'll use to represent the local client
|
// The entity we'll use to represent the local client
|
||||||
@ -45,8 +45,9 @@ static CBasePlayer player;
|
|||||||
// Local version of game .dll global variables ( time, etc. )
|
// Local version of game .dll global variables ( time, etc. )
|
||||||
static globalvars_t Globals;
|
static globalvars_t Globals;
|
||||||
|
|
||||||
static CBasePlayerWeapon *g_pWpns[32];
|
static CBasePlayerWeapon *g_pWpns[MAX_WEAPONS];
|
||||||
int g_iWaterLevel; //LRC - for DMC fog
|
int g_iWaterLevel; //LRC - for DMC fog
|
||||||
|
|
||||||
float g_flApplyVel = 0.0;
|
float g_flApplyVel = 0.0;
|
||||||
int g_irunninggausspred = 0;
|
int g_irunninggausspred = 0;
|
||||||
|
|
||||||
@ -815,7 +816,7 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
|||||||
if( !pWeapon )
|
if( !pWeapon )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for( i = 0; i < 32; i++ )
|
for( i = 0; i < MAX_WEAPONS; i++ )
|
||||||
{
|
{
|
||||||
pCurrent = g_pWpns[i];
|
pCurrent = g_pWpns[i];
|
||||||
if( !pCurrent )
|
if( !pCurrent )
|
||||||
@ -970,11 +971,7 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
|||||||
// over the wire ( fixes some animation glitches )
|
// over the wire ( fixes some animation glitches )
|
||||||
if( g_runfuncs && ( HUD_GetWeaponAnim() != to->client.weaponanim ) )
|
if( g_runfuncs && ( HUD_GetWeaponAnim() != to->client.weaponanim ) )
|
||||||
{
|
{
|
||||||
int body = 2;
|
int body = 0;
|
||||||
|
|
||||||
//Pop the model to body 0.
|
|
||||||
if( pWeapon == &g_Tripmine )
|
|
||||||
body = 0;
|
|
||||||
|
|
||||||
//Show laser sight/scope combo
|
//Show laser sight/scope combo
|
||||||
if( pWeapon == &g_Python && bIsMultiplayer() )
|
if( pWeapon == &g_Python && bIsMultiplayer() )
|
||||||
@ -984,7 +981,7 @@ void HUD_WeaponsPostThink( local_state_s *from, local_state_s *to, usercmd_t *cm
|
|||||||
HUD_SendWeaponAnim( to->client.weaponanim, body, 1 );
|
HUD_SendWeaponAnim( to->client.weaponanim, body, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( i = 0; i < 32; i++ )
|
for( i = 0; i < MAX_WEAPONS; i++ )
|
||||||
{
|
{
|
||||||
pCurrent = g_pWpns[i];
|
pCurrent = g_pWpns[i];
|
||||||
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "build.h"
|
||||||
|
|
||||||
#if !defined(INPUT_MOUSE_H)
|
#if !defined(INPUT_MOUSE_H)
|
||||||
#define INPUT_MOUSE_H
|
#define INPUT_MOUSE_H
|
||||||
#include "cl_dll.h"
|
#include "cl_dll.h"
|
||||||
@ -45,7 +48,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// No need for goldsource input support on the platforms that are not supported by GoldSource.
|
// No need for goldsource input support on the platforms that are not supported by GoldSource.
|
||||||
#if GOLDSOURCE_SUPPORT && (_WIN32 || __linux__ || __APPLE__) && (__i386 || _M_IX86)
|
#if GOLDSOURCE_SUPPORT && ( XASH_WIN32 || ( XASH_LINUX && !XASH_ANDROID ) || XASH_APPLE ) && XASH_X86
|
||||||
#define SUPPORT_GOLDSOURCE_INPUT 1
|
#define SUPPORT_GOLDSOURCE_INPUT 1
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
|
@ -294,7 +294,7 @@ void CHudMessage::MessageDrawScan( client_textmessage_t *pMessage, float time )
|
|||||||
|
|
||||||
for( j = 0; j < m_parms.lineLength; j++ )
|
for( j = 0; j < m_parms.lineLength; j++ )
|
||||||
{
|
{
|
||||||
m_parms.text = pLineStart[j];
|
m_parms.text = (unsigned char)pLineStart[j];
|
||||||
int next = m_parms.x + gHUD.m_scrinfo.charWidths[m_parms.text];
|
int next = m_parms.x + gHUD.m_scrinfo.charWidths[m_parms.text];
|
||||||
MessageScanNextChar();
|
MessageScanNextChar();
|
||||||
|
|
||||||
|
@ -90,6 +90,7 @@ float v_cameraFocusAngle = 35.0f;
|
|||||||
int v_cameraMode = CAM_MODE_FOCUS;
|
int v_cameraMode = CAM_MODE_FOCUS;
|
||||||
qboolean v_resetCamera = 1;
|
qboolean v_resetCamera = 1;
|
||||||
|
|
||||||
|
vec3_t v_client_aimangles;
|
||||||
vec3_t g_ev_punchangle;
|
vec3_t g_ev_punchangle;
|
||||||
|
|
||||||
cvar_t *scr_ofsx;
|
cvar_t *scr_ofsx;
|
||||||
@ -753,6 +754,7 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams )
|
|||||||
|
|
||||||
// Store off v_angles before munging for third person
|
// Store off v_angles before munging for third person
|
||||||
v_angles = pparams->viewangles;
|
v_angles = pparams->viewangles;
|
||||||
|
v_client_aimangles = pparams->cl_viewangles;
|
||||||
v_lastAngles = pparams->viewangles;
|
v_lastAngles = pparams->viewangles;
|
||||||
//v_cl_angles = pparams->cl_viewangles; // keep old user mouse angles !
|
//v_cl_angles = pparams->cl_viewangles; // keep old user mouse angles !
|
||||||
if( CL_IsThirdPerson() )
|
if( CL_IsThirdPerson() )
|
||||||
|
@ -96,7 +96,7 @@ def build(bld):
|
|||||||
'../pm_shared',
|
'../pm_shared',
|
||||||
'../game_shared',
|
'../game_shared',
|
||||||
'../public',
|
'../public',
|
||||||
'../utils/false_vgui/include'
|
'../utils/fake_vgui/include'
|
||||||
]
|
]
|
||||||
|
|
||||||
defines = ['CLIENT_DLL']
|
defines = ['CLIENT_DLL']
|
||||||
|
@ -954,7 +954,7 @@ void CBaseButton::ButtonSpark( void )
|
|||||||
SetThink( &CBaseButton::ButtonSpark );
|
SetThink( &CBaseButton::ButtonSpark );
|
||||||
SetNextThink( 0.1f + RANDOM_FLOAT( 0.0f, 1.5f ) );// spark again at random interval
|
SetNextThink( 0.1f + RANDOM_FLOAT( 0.0f, 1.5f ) );// spark again at random interval
|
||||||
|
|
||||||
DoSpark( pev, pev->mins );
|
DoSpark( pev, pev->absmin );
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -922,7 +922,7 @@ void ServerActivate( edict_t *pEdictList, int edictCount, int clientMax )
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Clients aren't necessarily initialized until ClientPutInServer()
|
// Clients aren't necessarily initialized until ClientPutInServer()
|
||||||
if( i < clientMax || !pEdictList[i].pvPrivateData )
|
if( (i > 0 && i <= clientMax) || !pEdictList[i].pvPrivateData )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pClass = CBaseEntity::Instance( &pEdictList[i] );
|
pClass = CBaseEntity::Instance( &pEdictList[i] );
|
||||||
@ -2274,6 +2274,7 @@ void RegisterEncoders( void )
|
|||||||
|
|
||||||
int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )
|
int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )
|
||||||
{
|
{
|
||||||
|
memset( info, 0, MAX_WEAPONS * sizeof(weapon_data_t) );
|
||||||
#if CLIENT_WEAPONS
|
#if CLIENT_WEAPONS
|
||||||
int i;
|
int i;
|
||||||
weapon_data_t *item;
|
weapon_data_t *item;
|
||||||
@ -2281,8 +2282,6 @@ int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )
|
|||||||
CBasePlayer *pl = (CBasePlayer *)CBasePlayer::Instance( pev );
|
CBasePlayer *pl = (CBasePlayer *)CBasePlayer::Instance( pev );
|
||||||
CBasePlayerWeapon *gun;
|
CBasePlayerWeapon *gun;
|
||||||
|
|
||||||
memset( info, 0, 32 * sizeof(weapon_data_t) );
|
|
||||||
|
|
||||||
if( !pl )
|
if( !pl )
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@ -2303,7 +2302,7 @@ int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )
|
|||||||
// Get The ID.
|
// Get The ID.
|
||||||
gun->GetItemInfo( &II );
|
gun->GetItemInfo( &II );
|
||||||
|
|
||||||
if( II.iId >= 0 && II.iId < 32 )
|
if( II.iId >= 0 && II.iId < MAX_WEAPONS )
|
||||||
{
|
{
|
||||||
item = &info[II.iId];
|
item = &info[II.iId];
|
||||||
|
|
||||||
@ -2329,8 +2328,6 @@ int GetWeaponData( struct edict_s *player, struct weapon_data_s *info )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
memset( info, 0, 32 * sizeof(weapon_data_t) );
|
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -108,12 +108,11 @@ set SOURCES=agrunt.cpp ^
|
|||||||
xen.cpp ^
|
xen.cpp ^
|
||||||
zombie.cpp ^
|
zombie.cpp ^
|
||||||
../pm_shared/pm_debug.c ../pm_shared/pm_math.c ../pm_shared/pm_shared.c
|
../pm_shared/pm_debug.c ../pm_shared/pm_math.c ../pm_shared/pm_shared.c
|
||||||
set DEFINES=/DCLIENT_WEAPONS /Dsnprintf=_snprintf /DNO_VOICEGAMEMGR
|
set DEFINES=/DCLIENT_WEAPONS /Dsnprintf=_snprintf /DNO_VOICEGAMEMGR /DNDEBUG
|
||||||
set LIBS=user32.lib
|
set LIBS=user32.lib
|
||||||
set OUTNAME=hl.dll
|
set OUTNAME=hl.dll
|
||||||
set DEBUG=/debug
|
|
||||||
|
|
||||||
cl %DEFINES% %LIBS% %SOURCES% %INCLUDES% -o %OUTNAME% /link /dll /out:%OUTNAME% %DEBUG% /def:".\hl.def"
|
cl %DEFINES% %LIBS% %SOURCES% %INCLUDES% -o %OUTNAME% /link /dll /out:%OUTNAME% /release /def:".\hl.def"
|
||||||
|
|
||||||
echo -- Compile done. Cleaning...
|
echo -- Compile done. Cleaning...
|
||||||
|
|
||||||
|
@ -700,8 +700,11 @@ void CController::RunTask( Task_t *pTask )
|
|||||||
case TASK_WAIT:
|
case TASK_WAIT:
|
||||||
case TASK_WAIT_FACE_ENEMY:
|
case TASK_WAIT_FACE_ENEMY:
|
||||||
case TASK_WAIT_PVS:
|
case TASK_WAIT_PVS:
|
||||||
MakeIdealYaw( m_vecEnemyLKP );
|
if (m_hEnemy != 0)
|
||||||
ChangeYaw( pev->yaw_speed );
|
{
|
||||||
|
MakeIdealYaw( m_vecEnemyLKP );
|
||||||
|
ChangeYaw( pev->yaw_speed );
|
||||||
|
}
|
||||||
|
|
||||||
if( m_fSequenceFinished )
|
if( m_fSequenceFinished )
|
||||||
{
|
{
|
||||||
|
@ -367,7 +367,7 @@ void CCrowbar::WeaponIdle( void )
|
|||||||
if( flRand > 0.5f )
|
if( flRand > 0.5f )
|
||||||
{
|
{
|
||||||
iAnim = CROWBAR_IDLE;
|
iAnim = CROWBAR_IDLE;
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 70.0f / 30.0f;
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 70.0f / 25.0f;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -169,7 +169,9 @@ void CHandGrenade::WeaponIdle( void )
|
|||||||
// player "shoot" animation
|
// player "shoot" animation
|
||||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||||
|
|
||||||
|
#if !HANDGRENADE_DEPLOY_FIX
|
||||||
m_flReleaseThrow = 0.0f;
|
m_flReleaseThrow = 0.0f;
|
||||||
|
#endif
|
||||||
m_flStartThrow = 0.0f;
|
m_flStartThrow = 0.0f;
|
||||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5f;
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5f;
|
||||||
|
@ -3658,7 +3658,9 @@ void CBasePlayer::SelectItem( const char *pstr )
|
|||||||
|
|
||||||
if( m_pActiveItem )
|
if( m_pActiveItem )
|
||||||
{
|
{
|
||||||
|
m_pActiveItem->pev->oldbuttons = 1;
|
||||||
m_pActiveItem->Deploy();
|
m_pActiveItem->Deploy();
|
||||||
|
m_pActiveItem->pev->oldbuttons = 0;
|
||||||
m_pActiveItem->UpdateItemInfo();
|
m_pActiveItem->UpdateItemInfo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3684,7 +3686,11 @@ void CBasePlayer::SelectLastItem( void )
|
|||||||
CBasePlayerItem *pTemp = m_pActiveItem;
|
CBasePlayerItem *pTemp = m_pActiveItem;
|
||||||
m_pActiveItem = m_pLastItem;
|
m_pActiveItem = m_pLastItem;
|
||||||
m_pLastItem = pTemp;
|
m_pLastItem = pTemp;
|
||||||
|
|
||||||
|
m_pActiveItem->pev->oldbuttons = 1;
|
||||||
m_pActiveItem->Deploy();
|
m_pActiveItem->Deploy();
|
||||||
|
m_pActiveItem->pev->oldbuttons = 0;
|
||||||
|
|
||||||
m_pActiveItem->UpdateItemInfo();
|
m_pActiveItem->UpdateItemInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5233,7 +5239,10 @@ BOOL CBasePlayer::SwitchWeapon( CBasePlayerItem *pWeapon )
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_pActiveItem = pWeapon;
|
m_pActiveItem = pWeapon;
|
||||||
|
|
||||||
|
pWeapon->pev->oldbuttons = 1;
|
||||||
pWeapon->Deploy();
|
pWeapon->Deploy();
|
||||||
|
pWeapon->pev->oldbuttons = 0;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -636,8 +636,11 @@ void CRpg::WeaponIdle( void )
|
|||||||
iAnim = RPG_FIDGET_UL;
|
iAnim = RPG_FIDGET_UL;
|
||||||
else
|
else
|
||||||
iAnim = RPG_FIDGET;
|
iAnim = RPG_FIDGET;
|
||||||
|
#if WEAPONS_ANIMATION_TIMES_FIX
|
||||||
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 6.1f;
|
||||||
|
#else
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3.0f;
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3.0f;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
SendWeaponAnim( iAnim );
|
SendWeaponAnim( iAnim );
|
||||||
|
@ -293,14 +293,20 @@ BOOL CSatchel::CanDeploy( void )
|
|||||||
BOOL CSatchel::Deploy()
|
BOOL CSatchel::Deploy()
|
||||||
{
|
{
|
||||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0f;
|
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0f;
|
||||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10.0f, 15.0f );
|
BOOL result;
|
||||||
|
|
||||||
if( m_chargeReady )
|
if( m_chargeReady )
|
||||||
return DefaultDeploy( "models/v_satchel_radio.mdl", "models/p_satchel_radio.mdl", SATCHEL_RADIO_DRAW, "hive" );
|
result = DefaultDeploy( "models/v_satchel_radio.mdl", "models/p_satchel_radio.mdl", SATCHEL_RADIO_DRAW, "hive" );
|
||||||
else
|
else
|
||||||
return DefaultDeploy( "models/v_satchel.mdl", "models/p_satchel.mdl", SATCHEL_DRAW, "trip" );
|
result = DefaultDeploy( "models/v_satchel.mdl", "models/p_satchel.mdl", SATCHEL_DRAW, "trip" );
|
||||||
|
|
||||||
return TRUE;
|
#if WEAPONS_ANIMATION_TIMES_FIX
|
||||||
|
if ( result )
|
||||||
|
{
|
||||||
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0f;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSatchel::Holster( int skiplocal /* = 0 */ )
|
void CSatchel::Holster( int skiplocal /* = 0 */ )
|
||||||
|
@ -639,6 +639,13 @@ void CScientist::HandleAnimEvent( MonsterEvent_t *pEvent )
|
|||||||
//=========================================================
|
//=========================================================
|
||||||
void CScientist::Spawn( void )
|
void CScientist::Spawn( void )
|
||||||
{
|
{
|
||||||
|
// We need to set it before precache so the right voice will be chosen
|
||||||
|
if( pev->body == -1 )
|
||||||
|
{
|
||||||
|
// -1 chooses a random head
|
||||||
|
pev->body = RANDOM_LONG( 0, NUM_SCIENTIST_HEADS - 1 );// pick a head, any head
|
||||||
|
}
|
||||||
|
|
||||||
Precache();
|
Precache();
|
||||||
|
|
||||||
if (pev->model)
|
if (pev->model)
|
||||||
@ -663,12 +670,6 @@ void CScientist::Spawn( void )
|
|||||||
// White hands
|
// White hands
|
||||||
pev->skin = 0;
|
pev->skin = 0;
|
||||||
|
|
||||||
if( pev->body == -1 )
|
|
||||||
{
|
|
||||||
// -1 chooses a random head
|
|
||||||
pev->body = RANDOM_LONG( 0, NUM_SCIENTIST_HEADS - 1 );// pick a head, any head
|
|
||||||
}
|
|
||||||
|
|
||||||
// Luther is black, make his hands black
|
// Luther is black, make his hands black
|
||||||
if( pev->body == HEAD_LUTHER )
|
if( pev->body == HEAD_LUTHER )
|
||||||
pev->skin = 1;
|
pev->skin = 1;
|
||||||
@ -742,7 +743,7 @@ void CScientist::TalkInit()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get voice for head
|
// get voice for head
|
||||||
switch( pev->body % 3 )
|
switch( pev->body % NUM_SCIENTIST_HEADS )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case HEAD_GLASSES:
|
case HEAD_GLASSES:
|
||||||
|
@ -469,7 +469,14 @@ BOOL CSqueak::Deploy()
|
|||||||
|
|
||||||
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
||||||
|
|
||||||
return DefaultDeploy( "models/v_squeak.mdl", "models/p_squeak.mdl", SQUEAK_UP, "squeak" );
|
const BOOL result = DefaultDeploy( "models/v_squeak.mdl", "models/p_squeak.mdl", SQUEAK_UP, "squeak" );
|
||||||
|
#if WEAPONS_ANIMATION_TIMES_FIX
|
||||||
|
if ( result )
|
||||||
|
{
|
||||||
|
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.7f;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSqueak::Holster( int skiplocal /* = 0 */ )
|
void CSqueak::Holster( int skiplocal /* = 0 */ )
|
||||||
|
@ -82,7 +82,9 @@ TYPEDESCRIPTION CTripmineGrenade::m_SaveData[] =
|
|||||||
DEFINE_FIELD( CTripmineGrenade, m_vecEnd, FIELD_POSITION_VECTOR ),
|
DEFINE_FIELD( CTripmineGrenade, m_vecEnd, FIELD_POSITION_VECTOR ),
|
||||||
DEFINE_FIELD( CTripmineGrenade, m_flBeamLength, FIELD_FLOAT ),
|
DEFINE_FIELD( CTripmineGrenade, m_flBeamLength, FIELD_FLOAT ),
|
||||||
DEFINE_FIELD( CTripmineGrenade, m_hOwner, FIELD_EHANDLE ),
|
DEFINE_FIELD( CTripmineGrenade, m_hOwner, FIELD_EHANDLE ),
|
||||||
|
#if !TRIPMINE_BEAM_DUPLICATION_FIX
|
||||||
DEFINE_FIELD( CTripmineGrenade, m_pBeam, FIELD_CLASSPTR ),
|
DEFINE_FIELD( CTripmineGrenade, m_pBeam, FIELD_CLASSPTR ),
|
||||||
|
#endif
|
||||||
DEFINE_FIELD( CTripmineGrenade, m_posOwner, FIELD_POSITION_VECTOR ),
|
DEFINE_FIELD( CTripmineGrenade, m_posOwner, FIELD_POSITION_VECTOR ),
|
||||||
DEFINE_FIELD( CTripmineGrenade, m_angleOwner, FIELD_VECTOR ),
|
DEFINE_FIELD( CTripmineGrenade, m_angleOwner, FIELD_VECTOR ),
|
||||||
DEFINE_FIELD( CTripmineGrenade, m_pRealOwner, FIELD_EDICT ),
|
DEFINE_FIELD( CTripmineGrenade, m_pRealOwner, FIELD_EDICT ),
|
||||||
@ -256,6 +258,9 @@ void CTripmineGrenade::MakeBeam( void )
|
|||||||
Vector vecTmpEnd = pev->origin + m_vecDir * 2048.0f * m_flBeamLength;
|
Vector vecTmpEnd = pev->origin + m_vecDir * 2048.0f * m_flBeamLength;
|
||||||
|
|
||||||
m_pBeam = CBeam::BeamCreate( g_pModelNameLaser, 10 );
|
m_pBeam = CBeam::BeamCreate( g_pModelNameLaser, 10 );
|
||||||
|
#if TRIPMINE_BEAM_DUPLICATION_FIX
|
||||||
|
m_pBeam->pev->spawnflags |= SF_BEAM_TEMPORARY;
|
||||||
|
#endif
|
||||||
m_pBeam->PointEntInit( vecTmpEnd, entindex() );
|
m_pBeam->PointEntInit( vecTmpEnd, entindex() );
|
||||||
m_pBeam->SetColor( CVAR_GET_FLOAT( "mp_minecolorred" ), CVAR_GET_FLOAT( "mp_minecolorgreen" ), CVAR_GET_FLOAT( "mp_minecolorblue" ) );
|
m_pBeam->SetColor( CVAR_GET_FLOAT( "mp_minecolorred" ), CVAR_GET_FLOAT( "mp_minecolorgreen" ), CVAR_GET_FLOAT( "mp_minecolorblue" ) );
|
||||||
m_pBeam->SetScrollRate( 255 );
|
m_pBeam->SetScrollRate( 255 );
|
||||||
@ -359,7 +364,12 @@ void CTripmine::Spawn()
|
|||||||
m_iId = WEAPON_TRIPMINE;
|
m_iId = WEAPON_TRIPMINE;
|
||||||
SET_MODEL( ENT( pev ), "models/v_tripmine.mdl" );
|
SET_MODEL( ENT( pev ), "models/v_tripmine.mdl" );
|
||||||
pev->frame = 0;
|
pev->frame = 0;
|
||||||
|
|
||||||
|
#ifdef CLIENT_DLL
|
||||||
|
pev->body = 0;
|
||||||
|
#else
|
||||||
pev->body = 3;
|
pev->body = 3;
|
||||||
|
#endif
|
||||||
pev->sequence = TRIPMINE_GROUND;
|
pev->sequence = TRIPMINE_GROUND;
|
||||||
// ResetSequenceInfo();
|
// ResetSequenceInfo();
|
||||||
pev->framerate = 0;
|
pev->framerate = 0;
|
||||||
@ -448,7 +458,7 @@ void CTripmine::PrimaryAttack( void )
|
|||||||
#else
|
#else
|
||||||
flags = 0;
|
flags = 0;
|
||||||
#endif
|
#endif
|
||||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usTripFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, 0, 0, 0 );
|
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usTripFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, 0, m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] == 1, 0 );
|
||||||
|
|
||||||
if( tr.flFraction < 1.0f )
|
if( tr.flFraction < 1.0f )
|
||||||
{
|
{
|
||||||
@ -487,6 +497,8 @@ void CTripmine::PrimaryAttack( void )
|
|||||||
|
|
||||||
void CTripmine::WeaponIdle( void )
|
void CTripmine::WeaponIdle( void )
|
||||||
{
|
{
|
||||||
|
pev->body = 0;
|
||||||
|
|
||||||
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -861,7 +861,7 @@ int CBasePlayerWeapon::UpdateClientData( CBasePlayer *pPlayer )
|
|||||||
void CBasePlayerWeapon::SendWeaponAnim( int iAnim, int skiplocal, int body )
|
void CBasePlayerWeapon::SendWeaponAnim( int iAnim, int skiplocal, int body )
|
||||||
{
|
{
|
||||||
if( UseDecrement() )
|
if( UseDecrement() )
|
||||||
skiplocal = 1;
|
skiplocal = !pev->oldbuttons;
|
||||||
else
|
else
|
||||||
skiplocal = 0;
|
skiplocal = 0;
|
||||||
|
|
||||||
|
@ -268,6 +268,9 @@ typedef struct enginefuncs_s
|
|||||||
void (*pfnQueryClientCvarValue)( const edict_t *player, const char *cvarName );
|
void (*pfnQueryClientCvarValue)( const edict_t *player, const char *cvarName );
|
||||||
void (*pfnQueryClientCvarValue2)( const edict_t *player, const char *cvarName, int requestID );
|
void (*pfnQueryClientCvarValue2)( const edict_t *player, const char *cvarName, int requestID );
|
||||||
int (*CheckParm)( char *parm, char **ppnext );
|
int (*CheckParm)( char *parm, char **ppnext );
|
||||||
|
|
||||||
|
// added in 8279
|
||||||
|
edict_t* (*pfnPEntityOfEntIndexAllEntities)( int iEntIndex );
|
||||||
} enginefuncs_t;
|
} enginefuncs_t;
|
||||||
// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 138
|
// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 138
|
||||||
|
|
||||||
|
@ -124,6 +124,20 @@ static char grgchTextureType[CTEXTURESMAX];
|
|||||||
|
|
||||||
int g_onladder = 0;
|
int g_onladder = 0;
|
||||||
|
|
||||||
|
static void PM_InitTrace( trace_t *trace, const vec3_t end )
|
||||||
|
{
|
||||||
|
memset( trace, 0, sizeof( *trace ));
|
||||||
|
VectorCopy( end, trace->endpos );
|
||||||
|
trace->allsolid = true;
|
||||||
|
trace->fraction = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PM_TraceModel( physent_t *pe, float *start, float *end, trace_t *trace )
|
||||||
|
{
|
||||||
|
PM_InitTrace( trace, end );
|
||||||
|
pmove->PM_TraceModel(pe, start, end, trace);
|
||||||
|
}
|
||||||
|
|
||||||
void PM_SwapTextures( int i, int j )
|
void PM_SwapTextures( int i, int j )
|
||||||
{
|
{
|
||||||
char chTemp;
|
char chTemp;
|
||||||
@ -2188,7 +2202,7 @@ void PM_LadderMove( physent_t *pLadder )
|
|||||||
onFloor = false;
|
onFloor = false;
|
||||||
|
|
||||||
pmove->gravity = 0;
|
pmove->gravity = 0;
|
||||||
pmove->PM_TraceModel( pLadder, pmove->origin, ladderCenter, &trace );
|
PM_TraceModel(pLadder, pmove->origin, ladderCenter, &trace);
|
||||||
if( trace.fraction != 1.0f )
|
if( trace.fraction != 1.0f )
|
||||||
{
|
{
|
||||||
float forward = 0, right = 0;
|
float forward = 0, right = 0;
|
||||||
|
@ -20,12 +20,12 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
ANDROID_NDK_ENVVARS = ['ANDROID_NDK_HOME', 'ANDROID_NDK']
|
ANDROID_NDK_ENVVARS = ['ANDROID_NDK_HOME', 'ANDROID_NDK']
|
||||||
ANDROID_NDK_SUPPORTED = [10, 19, 20, 23]
|
ANDROID_NDK_SUPPORTED = [10, 19, 20, 23, 25]
|
||||||
ANDROID_NDK_HARDFP_MAX = 11 # latest version that supports hardfp
|
ANDROID_NDK_HARDFP_MAX = 11 # latest version that supports hardfp
|
||||||
ANDROID_NDK_GCC_MAX = 17 # latest NDK that ships with GCC
|
ANDROID_NDK_GCC_MAX = 17 # latest NDK that ships with GCC
|
||||||
ANDROID_NDK_UNIFIED_SYSROOT_MIN = 15
|
ANDROID_NDK_UNIFIED_SYSROOT_MIN = 15
|
||||||
ANDROID_NDK_SYSROOT_FLAG_MAX = 19 # latest NDK that need --sysroot flag
|
ANDROID_NDK_SYSROOT_FLAG_MAX = 19 # latest NDK that need --sysroot flag
|
||||||
ANDROID_NDK_API_MIN = { 10: 3, 19: 16, 20: 16, 23: 16 } # minimal API level ndk revision supports
|
ANDROID_NDK_API_MIN = { 10: 3, 19: 16, 20: 16, 23: 16, 25: 19 } # minimal API level ndk revision supports
|
||||||
|
|
||||||
ANDROID_STPCPY_API_MIN = 21 # stpcpy() introduced in SDK 21
|
ANDROID_STPCPY_API_MIN = 21 # stpcpy() introduced in SDK 21
|
||||||
ANDROID_64BIT_API_MIN = 21 # minimal API level that supports 64-bit targets
|
ANDROID_64BIT_API_MIN = 21 # minimal API level that supports 64-bit targets
|
||||||
|
4
wscript
4
wscript
@ -28,8 +28,8 @@ def options(opt):
|
|||||||
grp.add_option('--enable-voicemgr', action = 'store_true', dest = 'VOICEMGR', default = False,
|
grp.add_option('--enable-voicemgr', action = 'store_true', dest = 'VOICEMGR', default = False,
|
||||||
help = 'enable voice manager [default: %default]')
|
help = 'enable voice manager [default: %default]')
|
||||||
|
|
||||||
grp.add_option('--enable-goldsrc-support', action = 'store_true', dest = 'GOLDSRC', default = False,
|
grp.add_option('--disable-goldsrc-support', action = 'store_false', dest = 'GOLDSRC', default = True,
|
||||||
help = 'enable GoldSource engine support [default: %default]')
|
help = 'disable GoldSource engine support [default: %default]')
|
||||||
|
|
||||||
opt.load('compiler_optimizations subproject')
|
opt.load('compiler_optimizations subproject')
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user