diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 29c3bdaa..3b5ae35c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,20 +22,20 @@ jobs: CXX: ${{ matrix.cxx }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: submodules: recursive - name: Checkout steam-runtime if: startsWith(matrix.os, 'ubuntu') - uses: actions/checkout@v2 + uses: actions/checkout@v3 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 + uses: actions/cache@v3 with: path: com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz key: ${{ runner.os }}-steam-runtime @@ -65,7 +65,7 @@ jobs: - name: Add msbuild to PATH if: startsWith(matrix.os, 'windows') - uses: microsoft/setup-msbuild@v1.0.2 + uses: microsoft/setup-msbuild@v1.1 - name: Build on Windows if: startsWith(matrix.os, 'windows') run: | @@ -79,33 +79,33 @@ jobs: - name: Extract branch name shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/} | tr '/' '_')" + run: echo "branch=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '_')" >> $GITHUB_OUTPUT 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)" + run: echo "gamedir=$(grep build/CMakeCache.txt -Ee 'GAMEDIR:STRING=[a-z]+' | cut -d '=' -f 2)" >> $GITHUB_OUTPUT id: extract_gamedir - name: Upload linux artifact if: startsWith(matrix.os, 'ubuntu') && matrix.cc == 'gcc' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: hlsdk-${{ steps.extract_branch.outputs.branch }}-linux path: dist/${{ steps.extract_gamedir.outputs.gamedir }} - name: Upload linux artifact with vgui if: startsWith(matrix.os, 'ubuntu') && matrix.cc == 'gcc' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: hlsdk-${{ steps.extract_branch.outputs.branch }}-linux-vgui path: dist-vgui/${{ steps.extract_gamedir.outputs.gamedir }} - name: Upload windows artifact if: startsWith(matrix.os, 'windows') - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: hlsdk-${{ steps.extract_branch.outputs.branch }}-windows path: dist/${{ steps.extract_gamedir.outputs.gamedir }} - name: Upload windows artifact with vgui if: startsWith(matrix.os, 'windows') - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: hlsdk-${{ steps.extract_branch.outputs.branch }}-windows-vgui path: dist-vgui/${{ steps.extract_gamedir.outputs.gamedir }} diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 19cf0201..9f03d110 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -32,20 +32,20 @@ jobs: CXX: ${{ matrix.cxx }} steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: submodules: recursive - name: Checkout steam-runtime if: startsWith(matrix.os, 'ubuntu') - uses: actions/checkout@v2 + uses: actions/checkout@v3 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 + uses: actions/cache@v3 with: path: com.valvesoftware.SteamRuntime.Sdk-i386-scout-sysroot.tar.gz key: ${{ runner.os }}-steam-runtime @@ -73,7 +73,7 @@ jobs: - name: Add msbuild to PATH if: startsWith(matrix.os, 'windows') - uses: microsoft/setup-msbuild@v1.0.2 + uses: microsoft/setup-msbuild@v1.1 - name: Build on Windows if: startsWith(matrix.os, 'windows') run: | @@ -82,11 +82,11 @@ jobs: - name: Extract branch name shell: bash - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/} | tr '/' '_')" + run: echo "branch=$(echo ${GITHUB_REF#refs/heads/} | tr '/' '_')" >> $GITHUB_OUTPUT 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)" + run: echo "gamedir=$(grep build/CMakeCache.txt -Ee 'GAMEDIR:STRING=[a-z]+' | cut -d '=' -f 2)" >> $GITHUB_OUTPUT id: extract_gamedir - name: Copy pdbs to dist dir if: ${{ startsWith(matrix.os, 'windows') && github.event.inputs.buildtype == 'Debug' }} @@ -100,13 +100,13 @@ jobs: 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 + uses: actions/upload-artifact@v3 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 + uses: actions/upload-artifact@v3 with: name: hlsdk-${{ steps.extract_branch.outputs.branch }}-windows path: dist/${{ steps.extract_gamedir.outputs.gamedir }} diff --git a/README.md b/README.md index c07deea0..3f7e36a6 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Half-Life SDK for GoldSource & Xash3D with some bugfixes. - 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. +- Brought back gluon flare in singleplayer. [Patch](https://github.com/FWGS/hlsdk-portable/commit/9d7ab6acf46a8b71ef119d9c252767865522d21d) - 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) @@ -37,7 +37,7 @@ Bugfix-related server cvars: - **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. -*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. +*Note*: the macros and cvars were adjusted in [hlfixed](https://github.com/FWGS/hlsdk-portable/tree/hlfixed) branch (for further information read [this](https://github.com/FWGS/hlsdk-portable/wiki/HL-Fixed)). The bugfix macros are kept turned off in `master` branch to maintain the compatibility with vanilla servers and clients. Other server cvars: @@ -48,6 +48,22 @@ Other server cvars:

+
Support for mods +

+ +This repository contains (re-)implementations of some mods as separate branches derived from `master`. The list of supported mods can be found [here](https://github.com/FWGS/hlsdk-portable/wiki/Mods). Note that some branches are unstable and incomplete. + +To get the mod branch locally run the following git command: + +``` +git fetch origin asheep:asheep +``` + +This is considering that you have set **FWGS/hlsdk-portable** as an `origin` remote and want to fetch `asheep` branch. + +

+
+ # Obtaining source code 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. @@ -87,7 +103,7 @@ cd projects\hlsdk-portable ``` 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. +Note that you must repeat the configuration step if you modify `CMakeLists.txt` files or want to reconfigure the project with different parameters. The next step is to compile the libraries: ``` diff --git a/cl_dll/vgui_SpectatorPanel.cpp b/cl_dll/vgui_SpectatorPanel.cpp index 4b2b897c..2d78b932 100644 --- a/cl_dll/vgui_SpectatorPanel.cpp +++ b/cl_dll/vgui_SpectatorPanel.cpp @@ -29,7 +29,7 @@ Sets the location of the input for chat text ========================== */ -void DLLEXPORT HUD_ChatInputPosition( int *x, int *y ) +extern "C" void DLLEXPORT HUD_ChatInputPosition( int *x, int *y ) { // RecClChatInputPosition( x, y ); diff --git a/cl_dll/view.cpp b/cl_dll/view.cpp index d6ba4dbd..c4569a73 100644 --- a/cl_dll/view.cpp +++ b/cl_dll/view.cpp @@ -763,7 +763,7 @@ void V_CalcNormalRefdef( struct ref_params_s *pparams ) // Apply this at all times { - float pitch = camAngles[0]; + float pitch = pparams->viewangles[0]; // Normalize angles if( pitch > 180.0f ) diff --git a/cl_dll/wscript b/cl_dll/wscript index b516fe5f..294d6c54 100644 --- a/cl_dll/wscript +++ b/cl_dll/wscript @@ -75,6 +75,9 @@ def build(bld): 'message.cpp', 'overview.cpp', 'parsemsg.cpp', + 'particlemgr.cpp', + 'particlemsg.cpp', + 'particlesys.cpp', 'saytext.cpp', 'scoreboard.cpp', 'status_icons.cpp', diff --git a/dlls/buttons.cpp b/dlls/buttons.cpp index c5c453c9..338e46eb 100644 --- a/dlls/buttons.cpp +++ b/dlls/buttons.cpp @@ -310,9 +310,11 @@ void CEnvState::Think( void ) { ALERT(at_console,"DEBUG: env_state \"%s\" turned itself off",STRING(pev->targetname)); if (pev->target) + { ALERT(at_console,": firing %s",STRING(pev->target)); if (pev->noise2) ALERT(at_console," and %s",STRING(pev->noise2)); + } else if (pev->noise2) ALERT(at_console,": firing %s",STRING(pev->noise2)); ALERT(at_console,".\n"); diff --git a/dlls/func_tank.cpp b/dlls/func_tank.cpp index a52405d2..8961756a 100644 --- a/dlls/func_tank.cpp +++ b/dlls/func_tank.cpp @@ -1144,12 +1144,14 @@ void CFuncTank::AdjustAnglesForBarrel( Vector &angles, float distance ) if( m_barrelPos.y ) { r2 = m_barrelPos.y * m_barrelPos.y; - angles.y += ( 180.0f / M_PI_F ) * atan2( m_barrelPos.y, sqrt( d2 - r2 ) ); + if( d2 > r2 ) + angles.y += ( 180.0f / M_PI_F ) * atan2( m_barrelPos.y, sqrt( d2 - r2 ) ); } if( m_barrelPos.z ) { r2 = m_barrelPos.z * m_barrelPos.z; - angles.x += ( 180.0f / M_PI_F ) * atan2( -m_barrelPos.z, sqrt( d2 - r2 ) ); + if( d2 > r2 ) + angles.x += ( 180.0f / M_PI_F ) * atan2( -m_barrelPos.z, sqrt( d2 - r2 ) ); } } } diff --git a/dlls/subs.cpp b/dlls/subs.cpp index f65fab80..fe62edc7 100644 --- a/dlls/subs.cpp +++ b/dlls/subs.cpp @@ -566,13 +566,6 @@ void CBaseToggle :: LinearMoveNow( void ) // divide vector length by speed to get time to reach dest float flTravelTime = vecDestDelta.Length() / m_flLinearMoveSpeed; - if( flTravelTime < 0.05f ) - { - UTIL_SetOrigin( this, m_vecFinalDest ); - LinearMoveDone(); - return; - } - // set nextthink to trigger a call to LinearMoveDone when dest is reached SetNextThink( flTravelTime, TRUE ); SetThink( &CBaseToggle::LinearMoveDone ); diff --git a/dlls/tripmine.cpp b/dlls/tripmine.cpp index 9fce7124..72b337d1 100644 --- a/dlls/tripmine.cpp +++ b/dlls/tripmine.cpp @@ -282,9 +282,23 @@ void CTripmineGrenade::BeamBreakThink( void ) // respawn detect. if( !m_pBeam ) { +#if TRIPMINE_BEAM_DUPLICATION_FIX + // Use the same trace parameters as the original trace above so the right entity is hit. + TraceResult tr2; + UTIL_TraceLine( pev->origin + m_vecDir * 8.0f, pev->origin - m_vecDir * 32.0f, dont_ignore_monsters, ENT( pev ), &tr2 ); +#endif MakeBeam(); +#if TRIPMINE_BEAM_DUPLICATION_FIX + if( tr2.pHit ) + { + // reset owner too + pev->owner = tr2.pHit; + m_hOwner = CBaseEntity::Instance( tr2.pHit ); + } +#else if( tr.pHit ) m_hOwner = CBaseEntity::Instance( tr.pHit ); // reset owner too +#endif } if( fabs( m_flBeamLength - tr.flFraction ) > 0.001f ) diff --git a/dlls/wscript b/dlls/wscript index cb394c69..c5e5776e 100644 --- a/dlls/wscript +++ b/dlls/wscript @@ -29,6 +29,7 @@ def build(bld): 'agrunt.cpp', 'airtank.cpp', 'aflock.cpp', + 'alias.cpp', 'animating.cpp', 'animation.cpp', 'apache.cpp', @@ -80,11 +81,13 @@ def build(bld): 'items.cpp', 'leech.cpp', 'lights.cpp', + 'locus.cpp', 'maprules.cpp', 'monstermaker.cpp', 'monsters.cpp', 'monsterstate.cpp', 'mortar.cpp', + 'movewith.cpp', 'mp5.cpp', 'multiplay_gamerules.cpp', 'nihilanth.cpp',