Skip to content

Latest commit

 

History

History
2001 lines (1679 loc) · 174 KB

CHANGELOG.md

File metadata and controls

2001 lines (1679 loc) · 174 KB

Half-Life Unified SDK Changelog

This page lists all changes made since the last release in the current development version.

Running changelog

Features

General

  • Added all Opposing Force and Blue Shift features
  • Added class MapState to contain per-map state
  • Added class GameLibrary to manage state shared between client and server
  • Added class ServerLibrary to manage server state
  • Added class ClientLibrary to manage client state
  • Added helper function to iterate over all entities using range for loop
  • Added special entity targetname game_playeractivate for player activation
  • Added virtual destructor to CGameRules
  • Added OnCreate & OnDestroy virtual functions to CBaseEntity
    • Call OnCreate when setting up entities on the client side
  • Added item keyvalue to monster_scientist and derived classes, set item bodygroup
  • Added formatter specializations for Vector and Vector2D
  • Added new keyvalues for Otis submodels & support random skin
  • Replaced ACT_SIGNAL3 in talk monster schedules with ACT_IDLE to fix allied human grunts playing incorrect animations
  • Replaced tracktrain event with proper throttled sound updates (message rate goes from once per frame (possibly 1000 per second) to one per speed change (on average less than one per second))
  • Reworked talk monsters to no longer depend on hard-coded list of friend class names
  • Reworked weapon selection client command to use actual named command selectweapon
  • Reworked spectator client command code to allow use of it outside CTF gamemode
  • Reworked "No use" spawnflag for scientists to a keyvalue
  • Reworked game title display to support multiple games
  • Reworked animation body groups for NPCs that use the new structure
  • Converted entities to use sound names instead of indices
  • Renamed UTIL_dtos1 - 4 to UTIL_ToString and remove the duplicate functions with the same code (Thanks hammermaps)
  • Renamed VModEnable client command to vmodenable to adhere to naming rules
    • Define dummy vmodenable command when singleplay gamerules are used to silence console errors
  • Fixed CBaseMonster::ReportAIState not handling all MONSTERSTATE enum values
  • Fixed crashes when GetClientColor returns null in CTF
  • Fixed sentence group percent comment
  • Fixed momentary_door trying to play null string_t
  • Merged server and player movement material system code, use IFileSystem to load file
  • Merged vgui_LoadTGANoInvertAlpha into vgui_LoadTGA
  • Don't reset skin value for Black Ops
  • Moved scientist voice initialization from TalkInit to Spawn
  • Ensure netadr_t is initialized on construction, add comparison operators
  • Escape hud text strings so newlines are treated correctly
  • Use proper constants for all SetBodygroup calls
  • Identify players consistently everywhere using IsPlayer()
  • Enumerate players using UTIL_FindPlayers instead of searching by classname
  • Use robust means of finding players
  • Forcefully reset monster ideal activity when released from Barnacle
  • Enabled ASSERT & ASSERTSZ macros in client dll, use spdlog logger to print assert messages
  • Include targetname & classname in SUB_Remove debug message
  • Fixed use of wrong base classes in enttiy save/restore logic
  • Removed duplicate field in CShotgun save table
  • Decrement RPG rocket count only if the rocket was successfully created
  • Added spawnflag to item_generic to make a entity solid and based on mins/maxs
  • Removed duplicate conditions in zombie code
  • Fixed c2a5 barrels not flying up as high as they're supposed to (Thanks Uncle Mike for pointing to the cause and fix, Streit and rbar1um43 for providing a link to this information)

New features

  • Implemented game system API to avoid tight coupling between game systems
  • Implemented command abstraction API to enable registration of console commands and cvars on client and server using the same code
    • Cvar values are automatically initialized from command line parameters if provided
  • Implemented spdlog logging system
    • Load logging configuration from JSON file
    • Initialize default log level to log_startup_level command line argument or developer setting
    • Update logger settings after loading config file
  • Implemented game configuration system with server, map and map change configuration files
    • Config files can include other config files
  • Implemented conditional evaluation system using Angelscript
  • Set up client side server engine interfaces on client load to ensure interfaces are initialized immediately
  • Reworked skill cfg to use JSON
    • Reworked skill system to no longer use cvars, streamline skill level definitions
    • Removed skilldata_t structure, query skill values directly
    • Removed obsolete RefreshSkillData method, load skill file on new map start
    • Added console commands to manage skill variables
    • Reworked skill.json to allow for conditional values
    • Allow skill.json variables to set values for all levels by omitting skill level
    • Remove hard-coded skill values for multiplayer
    • Removed sk_ prefix from skill variables, rename variables that had number as first character
    • Only store skill value for current skill level
  • Implemented string pool to eliminate out-of-memory issues with ALLOC_STRING
  • Implemented engine filesystem support
    • Replaced COM_LoadFile with IFileSystem, fixed incorrect buffer free calls
    • Replaced pfnLoadFileForMe with IFileSystem
    • Replaced most fopen uses with IFileSystem
  • Implemented OpenAL-based music playback
  • Implemented ambient_music
  • Implemented better client command system
    • Validate client command names
  • Implemented game sound system
    • Raised sentence limit to 65535
    • Raised sentence group limit to unlimited
    • Raised maximum sentence name length to 31 characters
  • Implemented custom health feature
  • Implemented custom model feature
  • Implemented global model replacement
  • Implemented global sentence replacement
  • Implemented global sound replacement
  • Added helper commands for debugging maps (Thanks JoelTroch)
  • Made string_t strongly typed

Hud changes

  • Reworked hud color
    • Refactored to use dedicated data type
    • Made hud color configurable by server
    • Added player_sethudcolor entity
    • Added set_hud_color cheat client command
    • Allow setting hud color from config files
  • Added option to switch between flashlight and night vision
    • Added player_setsuitlighttype entity
    • Added set_suit_light_type cheat client command
    • Allow setting suit light type from config files
  • Draw crosshair in client library instead of engine
    • Draw crosshair and autoaim separately to allow coloring crosshair
    • Added crosshair scale cvar crosshair_scale
  • Added entity info hud
  • Added project info hud

Tools

  • Added Asset Synchronizer
  • Added Map Upgrader
  • Added Packager
  • Added Installer
  • Added Skill2Json
  • Added Bsp2Obj

Scripts

  • Added MapCfgGenerator script
  • Added SourceFileFormatter script

StudioMDL compiler

  • Allow longer file paths when loading SMD files
  • Fixed one pixel loss in texture coordinate calculation
  • Made $cliptotextures option functional
  • Check for zero dimension textures

Project changes

  • Replaced Visual Studio projects and Linux Makefiles with CMake config files
  • Restructured source code directories
  • Restructured SDL2 files to encapsulate it as a CMake library
  • Enabled multi-processor compilation for Visual Studio projects
  • Automatically copy mod libraries to HLDS directory on install if specified
  • Provide CMake settings to automatically set up Visual Studio debugging command line arguments
    • Added option to enable developer mode for additional startup logging
  • Set C++ standard to C++ 20
  • Enabled solution folders for Visual Studio projects
  • Added Github Actions config file to enable automated Windows and Linux builds with downloadable artifacts (Thanks SmileyAG)
  • Link libstdc++ statically on Linux
  • Added toolchain files for Windows and Linux
  • Install delta.lst and liblist.gam to the mod directory
  • Added icon to liblist.gam
  • Only use OpenGL headers, don't link with it (SDL2 provides OpenGL implementation)
  • Renamed server library from hl to server
  • Added Visual Studio hint file to silence Intellisense warnings about macros that define code
  • Added natvis file with configuration for CBaseEntity and string_t to allow seeing pooled strings in the Visual Studio debugger
  • Added nlohmann JSON and JSON schema validator libraries
  • Added spdlog library
  • Added OpenAL and libnyquist libraries
  • Added fmtlib library
  • Added EASTL library
  • Ensured all libraries link statically with MSVC runtime
  • Use vcpkg to manage dependencies
  • Use delay loading to load OpenAL32.dll from mod directory

Code cleanup and refactoring

  • Improved const correctness
  • Added virtual functions GetWeaponData and SetWeaponData to simplify the networking of weapon data
  • Added debug-only check in entity method setters to validate usage
  • Moved code used by multiple entities to shared files to clean up code structure
  • Merged NPC classes that were largely copy pasted (mostly Opposing Force NPCs)
  • Resolved conflicts between client and server cvar utility code
  • Include extdll.h and util.h in cbase.h to eliminate the need to include them manually
  • Made cbase.h a precompiled header for the server library to speed up builds
  • Made hud.h a precompiled header for the client library to speed up builds
  • Include some common headers in precompiled headers and Platform.h to reduce header includes and speed up builds
  • Rewrote KB_ConvertString to use std::string
  • Converted CVoiceStatus::m_pchGameDir to std::string
  • Use local AngleVectors function instead of engine version
  • Define and use pointer to member function types for use with entities
  • Replaced ARRAYSIZE macro with std::size
  • Replaced IS_NAN macro with std::isnan
  • Replaced _rtor with std::rotr
  • Replaced clamp macro with std::clamp
  • Replaced ALERT macro with spdlog loggers
  • Replaced pfnGetPlayerWONId with pfnGetPlayerAuthId
  • Replaced UTIL_LogPrintf with spdlog loggers
  • Replaced CLIENT_PRINTF macro with UTIL_ConsolePrint
  • Replaced PRECACHE_MODEL macro with PrecacheModel and UTIL_PrecacheModel
  • Replaced SET_MODEL macro with SetModel
  • Replaced PRECACHE_SOUND macro with PrecacheSound and UTIL_PrecacheSound

Clang-tidy checks

  • modernize-use-bool-literals
  • modernize-use-nullptr
  • readability-delete-null-pointer
  • readability-implicit-bool-conversion

Removed code and functionality

  • Removed unused preprocessor definitions
  • Removed redundant interface.h and interface.cpp
  • Removed obsolete filecopy.bat
  • Removed unused files
  • Removed unused CHudAmmoSecondary class
  • Removed redundant pragma warning disable statements
  • Removed incorrect assert in CHud::MsgFunc_ResetHUD
  • Removed some unused constants
  • Removed some unused functions
  • Removed duplicate shared random function declarations
  • Removed some duplicate and unused global variable forward declarations
  • Removed some function declarations with no definition
  • Removed unnecessary extern keyword from function declarations
  • Removed unnecessary const casts
  • Removed unused trigger_changelevel functions
  • Removed obsolete Quake code used to handle powerups & code to handle cloak powerup changing player model
  • Removed trigger_cdaudio and target_cdaudio
  • Removed sounds keyvalue from worldspawn
  • Removed support for resolutions below 640x480
  • Removed superfluous Random value from monster_otis bodystate keyvalue
  • Removed obsolete trigger_secret check
  • Removed ALERT macro
  • Removed obsolete CBaseSpectator class
  • Removed obsolete cine entities
  • Removed non-functional cycler_prdroid entity

Notes

  • ChangeSchedule workaround from Opposing Force has not been added because the bug this works around was fixed.
  • gmsgOldWeapon from Opposing Force has not been added since the ability to switch weapon prediction behavior is not being added.

Half-Life Updated CMake changelog

Changes in V1.0.0 Beta 003

  • Added CMake project for tools #408
    • Removed duplicate winding_t, CopyWinding, FreeWinding, WindingCenter, pw functions
    • Resolved conflicts between wadlib & textures.cpp
    • renamed nummodels in studiomdl to numstudiomodels to avoid conflict with bspfile
    • Fixed include paths for tools that reference game SDK files
  • Create source groups for tool projects #408
  • Split smdlexp into its own CMake project. This library has been updated to use the 3DS Max 2023 SDK and has to be built as 64 bit

Changes in V1.0.0 Beta 002

  • Set C++ standard to 17 #266
  • Use function to add shared game sources #234
  • Fixed Linux setup not working correctly #267 (Thanks JoelTroch)
  • Fixed Linux libraries having visible symbols #268
  • Added OpenGL library to client, ensured 32 bit version is used on Linux

Changes in V1.0.0 Beta 001

  • Made the client link with the VGUI and SDL2 libraries using relative paths to avoid hard-coding developer's paths in the client library (matches the vanilla SDK's behavior)
  • Updated setup instructions to remove Windows XP support and use VS 2019 as the example
  • Removed unused linux files, update linux gitignore to account for out-of-tree builds #247
  • Removed unused files #235
  • Removed obsolete CBaseSpecator class #248
  • Removed obsolete cine entities #249
  • Removed obsolete cycler entity, refactor cycler classes #250
  • Removed unused skiplocal parameter from weapon methods #251
  • Formatted all files to use consistent formatting #252
  • Removed unused preprocessor definitions #253
  • Restructured source code directories #234
  • Restructured SDL2 files to encapsulate it as a CMake library #254
  • Only copy Linux libraries when building on Linux #255
  • Added Mac OSX support (.dylib files) #256
    • Note that this only concerns linking with the correct libraries. Mac support is untested.
  • Don't add hl.def for non-Windows builds #257
  • Moved vgui Linux libraries to utils/vgui/lib/linux #259
  • Enabled multi-processor compilation for faster compilation on Windows #260
  • Use CMAKE_DL_LIBS to link with dl library #261
  • The mod libraries are now automatically copied to the HLDS directory on install if the HLDS directory has been provided #262
  • Set CMake version to 3.21 #263
  • Removed use of HALFLIFE_DIRECTORY variable from CMakeLists (now auto-detected from CMAKE_INSTALL_PREFIX) #264
  • Added CMake settings to set up debugging command line arguments more easily #265

Half-Life: Blue Shift Updated changelog

Changes in V1.0.0 Beta 011

All changes from Half-Life Updated up until Beta 14 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-014

  • Applied bug fixing work done for Half-Life Updated to this project as well

Changes in V1.0.0 Beta 010

All changes from Half-Life Updated up until Beta 13 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-013

  • Fixed MP5 shooting animations sometimes playing a deploy animation #78 (Thanks to Ronin4862 for finding this, and thanks to malortie for fixing this)

Changes in V1.0.0 Beta 009

All changes from Half-Life Updated up until Beta 12 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-012

  • Applied bug fixing work done for Half-Life Updated to this project as well
  • Added Blue Shift FGD #2 (Thanks Veinhelm)

Changes in V1.0.0 Beta 008

All changes from Half-Life Updated up until Beta 11 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-011

  • Applied bug fixing work done for Half-Life Updated to this project as well

Changes in V1.0.0 Beta 007

All changes from Half-Life Updated up until Beta 10 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-010

  • Applied bug fixing work done for Half-Life Updated to this project as well

Changes in V1.0.0 Beta 006

All changes from Half-Life Updated up until Beta 9 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-009

  • Applied bug fixing work done for Half-Life Updated to this project as well

Changes in V1.0.0 Beta 005

All changes from Half-Life Updated up until Beta 8 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-008

  • Applied bug fixing work done for Half-Life Updated to this project as well

Changes in V1.0.0 Beta 004

All changes from Half-Life Updated up until Beta 7 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-007

  • Applied refactoring work done for Half-Life Updated to this project as well

Changes in V1.0.0 Beta 003

All changes from Half-Life Updated up until Beta 6 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-006

  • Added rosenberg.cpp to Linux Makefile

Changes in V1.0.0 Beta 002

All changes from Half-Life Updated up until Beta 5 are included: https://github.com/Solokiller/halflife-updated/wiki/Changelog

  • Implemented monster_generic head turn support (Thanks vasiavasiavasia95)
  • Properly check if player should be frozen on restore
  • Fixed script in ba_yard4a that relied on a bug to break frozen Alien Slaves out of their frozen animation (halflife issue [[#3061|ValveSoftware/halflife#3061]])
  • Fixed LD and HD Revolver models not playing the reload sound (halflife issue [[2351|ValveSoftware/halflife#2351]])

Code cleanup

  • Removed void from functions taking no arguments (clang-tidy modernize-redundant-void-arg)
  • Used override specifier where needed (clang-tidy modernize-use-override)

Changes in V1.0.0 Beta 001

  • Added tool to convert Blue Shift BSP files to standard Half-Life BSP format
  • Fixed game potentially crashing when saving and/or loading the game in ba_outro (halflife issue [[#1014|ValveSoftware/halflife#1014]])

Half-Life Updated changelog

Changes in V1.0.0 Beta 014

Note: This beta has not been released yet.

Bug fixes

  • Correctly save and restore controller and blending variables #175 (Thanks vasiavasiavasia95)
  • Set activity before SetYawSpeed so it has the right activity #176 (Thanks FreeSlave and vasiavasiavasia95)
  • Fixed animation code accessing invalid sequence descriptor (halflife issue #3308) (Thanks FreeSlave)
  • Fixed weapon bits being incorrectly set and checked in HasAnyWeapons #178 (Thanks jay!)

Changes in V1.0.0 Beta 013

Bug fixes

  • Fixed Room DSP effects not always activating #164 (Thanks Ronin4862)
  • Try to unstuck player after level transition if stuck in the world #165 (Thanks Ronin4862)
  • Fixed MP5 not creating bullet decals half the time (halflife issue #383 and Updated issue #163) (Thanks Ronin4862 and Matthaiks)
  • Fixed Particle man removing more particles than expected #169 (Thanks FreeSlave)
  • Fixed domain errors in func_tank (halflife issue #3303) (Thanks pat and a1batross)
  • Fixed crash while parsing command menu with unsupported custom button (halflife issue #1730)
  • Fixed NPCs being able to speak scripted_sentences while dying #171
  • Fixed tripmines blowing up after loading save game in c1a3d #172 (Thanks λλλλλλ)
  • Fixed game crashing when triggering certain entities on an empty dedicated server with maxplayers 1 (halflife issue #3307)
    • Access world through global
    • Access local player through helper function
    • Removed some obsolete utility functions

Project changes

  • Cleaned up the Linux makefiles to remove obsolete logic and simplify the compilation process
  • Removed use of obsolete register keyword (caused compiler errors when using Clang++)
  • Added support for overriding the compiler used when using the Linux makefiles
  • Fixed the Linux makefiles not working when using Clang++ due to missing -mno-sse compiler flag
  • Added particle man sources to the object list in Linux client Makefile #168 (Thanks FreeSlave)
  • Added game icons for program icon and Steam library icon
  • Use post build event to copy dlls instead of using output directory #167

Note: you will need to clean solution and rebuild to remove remaining references to the old output directory.

Git repository changes

  • Added Github Actions CI configuration file based on Half-Life Unified SDK's version. Continuous Integration provides pre-built binaries for Windows and Linux. (Thanks to JoelTroch for providing the original file and providing the basis for this file)

Github wiki changes

  • Explicitly specified the scope of the projects
  • Added links to TWHL website, Discord server, SDK setup tutorial and Half-Life Updated status thread

Changes in V1.0.0 Beta 012

Bug fixes

  • Fixed func_button "Sparks" spawnflag using wrong origin (halflife issue #3269) (Thanks Descen)
  • Fixed func_rot_button "X Axis" spawnflag also enabling func_button "Sparks" behavior (halflife issue #3270) (Thanks Descen)
  • Fixed second case of incorrect timebase for button sparks (halflife issue #1681)
  • Fixed env_spark transitioning to other maps when it shouldn't (halflife issue #3280) (Thanks Ronin4862)
  • Fixed ServerActivate checking for player entities incorrectly (halflife #3282) (Thanks vasiavasiavasia95)
  • Fixed PM_TraceModel possibly returning uninitialized trace (halflife #3283) (Thanks a1batross)
  • Print error message if trigger_changelevel points to itself
  • Fixed ichthyosaur restarting death sequence on save game load #152 (Thanks Ronin4862)
  • Reset server's client FOV value so loading save games restores FOV correctly with weapon prediction disabled (halflife issue #3044) (Thanks Ronin4862)
  • Commented out fix for #131 to allow players to keep weapons and be given empty exhaustible weapons
  • Fixed players not being given exhaustible weapons when they get the ammo for them #153 (Thanks Ronin4862)
  • Fixed weapon deploy animations caused by lastinv command not working properly #154 (Thanks jay!)
  • Fixed alien controllers facing in non-combat state #155 (Thanks FreeSlave)
  • Fixed scientist voice pitch #156 (Thanks FreeSlave)
  • Cleaned up weapons code a bit (Note: some code has been moved which could break mods, make sure to double check these changes in your mod if you merge them in) #157
  • Fixed tripmine body value being influenced by events from other weapons during deploy #158 (Thanks FreeSlave)
  • Fixed incorrect body values being passed into EV_WeaponAnimation #159 (Thanks FreeSlave)
  • Fixed autoswitch from tripmine to RPG causing wrong animation to play when weapon prediction is off #160
  • Updated smdlexp to use 3DS Max 2023 SDK #149 (Thanks fel1x-developer)
    • Updated to fix configuration issues so both debug and release profiles compile and don't fail when trying to copy the library to the 3DS Max plugins directory
    • Added errors to stop compilation if the library is not built as 64 bit or if it does not use the Unicode character set (required for 3DS Max 2023 plugins)
    • Note: plugin has not been tested. Use this plugin instead: https://knockout.chat/thread/806/1
  • Added keyvalue allow_item_dropping to control whether NPCs can drop items (Opposing Force Updated #72)
  • Refactored env_sound code to use correct data type for room type, don't use goto to control think rate
  • Always send room_type changes to client, set room_type to 0 by default, reset room_type to 0 on map change, save room_type and restore it when loading same map (halflife issues #1144 and #2936)
  • Fixed weapon deploy animations on fast switching with user binds #161 (Thanks FreeSlave)
  • Added fixes from Marphy Black's Half-Life Fact Fixes (Thanks Marphy Black)

Project changes

  • Added fgd/halflife.fgd

Changes in V1.0.0 Beta 011

Bug fixes

  • Fixed node graphs being loaded from search paths other than GAMECONFIG path #145 (properly this time)
  • Fixed node graphs being loaded with a null byte appended #146
  • Fixed "fullupdate" call making a HUD disappear #147 (Thanks SmileyAG)
  • Fixed STL Algorithm Header Errors When Included with Platform.h #148 (Thanks edgarbarney)

Changes in V1.0.0 Beta 010

Bug fixes

  • Fixed Osprey crashing if it has no valid target (halflife issue #3259)
  • Fixed Osprey teleporting to world origin if it isn't moving at all (halflife issue #3260)
  • Fixed Osprey not firing trigger targets (halflife issue #3261)
  • Fixed Osprey engine damage effects showing on wrong engine (halflife issue #3263) (Thanks Hezus)
  • Fixed Apache not firing trigger targets (halflife issue #3262)
  • Fixed Error in ServerCtrl #135 (Thanks fel1x-developer)
  • Pass director stufftext commands to filtered client command function (halflife issue #1497)
  • Fixed RPG sometimes getting stuck unable to reload (halflife issue #3264) (Thanks Ronin4862)
  • Fixed monster_tentacle not interpolating (halflife issue #3228) (Thanks Anton)
  • Fixed node graphs being loaded from search paths other than GAME path #145
  • Fixed momentary_door restarting movement sound repeatedly when moving back to starting position (halflife issue #3265)

Project changes

  • Fixed symlinks to Linux and MacOS builds of SDL2 #137 (Thanks MegaBrutal)
  • Deleted Makefiles and libraries for MacOS X (Half-Life 1 is 32 bit, no longer supported by MacOS) #141 (Thanks fel1x-developer)
  • Upgraded tool projects to use Visual Studio 2019, fixed as many warnings as possible, all tools aside from smdlexp compile, all tools compiled as C++, most tools work as intended #138 (Thanks fel1x-developer for helping with this work)
    • Fixed missing archtypes.h header include #136
    • Updated readme.txt for latest methods installing MFC, smdlexp and SDL2 #140 (Thanks fel1x-developer)
    • Removed obsolete VS6 & makefile project files from tools code #142
    • Removed bsplib.h & bsplib.cpp (redundant) #143

Changes in V1.0.0 Beta 009

Weapons

  • Allow weapons to network data as needed
  • Initialize frametime value so weapon prediction code can use it
  • Fixed chainsaw hornetgun sounds and mostly fixed hornetgun not playing firing animation (halflife issue #556)
  • Fixed Gauss charge sound not always being reset (halflife issue #3188)
  • Show pickup icons in HUD for all weapons (halflife issue #3137)
  • Fixed picking up weapons that give free/regenerating ammo sometimes showing weapon icon as red (halflife issue #3250)
  • Fixed hand grenades staying primed when switching away or dropping the weapon (halflife issue #3251)
  • Don't give player exhaustible weapon if it has no ammo left #131
  • Applied Opposing Force weapon prediction timing fix to Half-Life (halflife issue #3252)
  • Fixed event code crashing if weapon prediction is disabled #132
  • Automatically switch away from exhaustible weapons that have no ammo left #133
  • Fixed controlling a func_tank with empty weapon deploying invisible weapon when stopping control #134

Bug fixes

  • Fixed hornets crashing the game if they hit you after a level transition (halflife issue #1598)
  • Fixed UTIL_IsServer returning inverted value #130 (Thanks tmp64)
  • Fixed m_rawinput changes not taking effect if a new map has started and less time has passed than on any previous map or if weapon prediction is disabled (halflife issue #3255)
  • Fixed FL_FAKECLIENT flag being cleared in some places (halflife issue #3256)
  • Fixed Osprey not interpolating (halflife issue #3228) (Thanks Hezus)

Project changes

  • Rewrote the installation and packing scripts to use C#

Changes in V1.0.0 Beta 008

Bug fixes

  • Fixed crowbar playing back swing events twice sometimes (halflife issue #3230)
  • Fixed weapon empty sound playing twice (halflife issue #3231)
  • Fixed Gauss sound not stopping when players are not in the PAS (halflife issue #3233)
  • Fixed command menu text not being localized (halflife issue #2387)
  • Fixed localization function cutting off text (halflife issue #2608)
  • Fixed chat text sometimes using the wrong color (halflife issue #3240)
  • Fixed status bar accepting out of range indices (halflife issue #3242)
  • Fixed explosions going through walls in certain cases (halflife issue #3244)
  • Fixed tripmine beams not using correctly start position sometimes (halflife issue #1670) (Thanks vasiavasiavasia95)
  • Fixed trip mine laser beam duplicating after going back and forth through level changes (halflife issue #3245) (Thanks vasiavasiavasia95)

UX improvements

  • Print the "SayText" messages instantly in the console (halflife issue #1440)

Changes in V1.0.0 Beta 007

Bug fixes

  • Fixed cycler_sprite not saving #43
  • Fixed rpg reload reading uninitialized variable #42
  • Fixed RPG client prediction results stored in wrong pointer #67 (Thanks malortie)
  • Fixed crossbow fire on empty sequence not playing #68 (Thanks malortie)
  • Fixed glock fire on empty sequence not playing #70 (Thanks malortie)
  • Fixed func_rotating not reporting keyvalue spawnorigin as handled #72
  • Fixed infodecal not reporting keyvalue texture as handled #73
  • Fixed beam attachment invalidated on restore #74 (Thanks malortie)
  • Fixed Snark movetype being changed unconditionally (halflife issue #3175)
  • Fixed Human Grunt checking enemy incorrectly in CheckMeleeAttack1 (halflife issue #3176)
  • Fixed CTalkMonster::RunTask not properly initializing variable (halflife issue #3177)
  • Fixed speaker entity not handling invalid preset values correctly (halflife issue #3178)
  • Reserved enough entvars for all weapons + local player in client weapon prediction code #97
  • Fixed crowbar not showing in weapon list if there are empty weapon slots with a lower id (halflife #3181)
  • Fixed invalidated linked entities in node graph #106 (Thanks zaklaus)
  • Fixed default implementation of HasTarget not checking the right variable #109 (Thanks malortie)
  • Implemented particle manager in client library #122
    • This change fixes halflife issue #2196 by embedding the particle manager in the client library. It also fixes compatibility issues caused by optimizations applied to the Vector type.
    • Reworked particle memory management to allow far more particles to be allocated before crashing by running out of memory (previous limit was around 100 particles at the same time, new limit closer to 1 million). Fixes halflife #1447
    • Fixed memory leak in the physics force list: halflife #3213
    • Fixed use-after-free bug that could cause difficult to debug problems in (hopefully) theoretical cases: #3214
    • Optimized some of the code to be more efficient
    • Reworked the CBaseParticle class to use a simpler design
  • Fixed the crowbar damage always being calculated halved (halflife issue #1600 (Thanks YaLTeR)
  • Fixed packing script creating empty directory in hd directory #120
  • Fixed V_CalcBob not initializing static variables #126
  • Fixed tripmine viewmodel having wrong body on first pickup #129
  • Fixed models stuttering due to client side interpolation (halflife issue #3228) (Thanks Uncle Mike, and vasiavasiavasia95 and Bacontsu for bringing this fix to my attention)
  • Fixed player physics hull sizes not initializing properly (halflife issue #3229) (Thanks vasiavasiavasia95)

Project changes

  • Rewrote installation scripts to use PowerShell
  • Enabled multiprocessor compilation for Windows builds #39
  • Changed default toolset to non-XP compatible one and set Windows SDK version to W10 #44
  • Added new cvar flags added by recent engine updates #46
  • Added new cvar flags for command filtering #121 (Thanks a1batross and vasiavasiavasia95)
  • Set C++ standard to 17 #85
  • Provided access to engine filesystem #86
  • Use engine filesystem to load and save node graph files #87
  • Define and use constants for maximum number of players and weapons #96
  • Added support for saving and restoring 64 bit integers #99
  • Added support for adding 64 weapons #98
  • Added missing tracerCount for EV_HLDM_FireBullets #107 (Thanks malortie)
  • Removed VS2017 projects #118
  • Fixed func_tanks not being usable #125 (Thanks suXinjke)
  • Fixed case sensitivity of OpenGL header inclusion
  • Fixed reworked CGamePlayerEquip::KeyValue method #128

Code cleanup

  • Made event playback functions const correct #41
  • Removed unused skiplocal parameter #38
  • Made CBaseEntity debug setters const correct
  • Made HUD string drawing methods const correct
  • Improved const correctness in engine APIs
  • Removed obsolete preprocessor macro checks #47
  • Cleaned up uses of the node graph global #48
  • Disabled as many Windows.h dependencies as possible #49
  • Removed benchmarking functionality #54
  • Removed game_controls.lib from the client project #55
  • Defined platform-agnostic types for common structures #56
  • Removed obsolete engine APIs related to security modules #57
  • Removed extern C wrappers around functions #58
  • Reworked some uses of platform-specific code to be cross-platform #59
  • Merged platform abstraction headers #53
  • Removed redundant include guards #52
  • Converted all include guards to pragma once #50
  • Removed duplicate interface.h/.cpp files #60
  • Added pragma once to all headers that need it #51
  • Use snprintf and vsnprintf everywhere instead of _snprintf and _vsnprintf #61
  • Use WIN32 preprocessor macro instead of _WIN32 #62
  • Removed unnecessary _cdecl in function declarations #63
  • Removed useless try-catch statement in command menu parsing code #64
  • Reworked some uses of platform-specific code to be cross-platform #59
  • Save FIELD_BOOLEAN as byte array #65
  • Reworked operator new and delete overloads to allocate memory directly #71
  • Removed identical line in conditional statement #75 (Thanks malortie)
  • Removed unused files (Thanks malortie):
    • AI_BaseNPC_Schedule.cpp #77
    • glock.cpp #78
    • mpstubb.cpp #80
    • MOTD.cpp #81
    • scoreboard.cpp #82
  • Removed DMC and Ricochet VS 2017 projects to match removal of VS 2019 projects #79 (Thanks malortie)
  • Fixed invalid conversions between bool and other types #69
  • Reworked all uses of int and int-like types to use bool when the value is boolean #83
  • Enabled certain Clang-tidy checks #66
  • Formatted all files and added clang-format configuration file #84
  • Removed unused types #88
  • Removed unused globals and duplicate global variable forward declarations #89
  • Removed obsolete interface APIs #90
  • Overhauled vector types to use constexpr, simplify code #92
  • Fixed or silence compiler warnings #91
  • Removed unused VGUI1 code in vgui_int.cpp #93
  • Reworked CSave & CRestore to eliminate null data pointers #94
  • Reworked mouse thread code to use standard types #95
  • Replaced stackalloc-based saytext code with fixed-size buffer to avoid using alloca (halflife issue #3179)
  • Use sound array macros (Thanks malortie):
  • Removed unused variables in the client side event playback code #105 (Thanks malortie)
  • Renamed hl_wpn_glock.cpp to glock.cpp #108 (Thanks malortie and JoelTroch for the Linux changes related to this)
  • Removed preprocessor checks for other games (Thanks malortie):
    • Team Fortress Classic #110
    • Condition Zero #111
    • Counter-Strike #112
    • Day Of Defeat #113
    • Blue Shift #114
    • Deathmatch Classic and Threewave #115

Changes in V1.0.0 Beta 006

  • Reverted "Fixed multisource having off-by-one error in trigger handling" (halflife issue [[#1737|ValveSoftware/halflife#1737]]) to avoid edge cases where entities triggering the multisource use a delayed trigger which is not supported by fixed code
  • Fixed func_breakable keyvalue "explosion" not working (#24) (Thanks ArroganceJustified)
  • Fixed saytext message handling potentially causing buffer overflow (halflife issue [[#3095|ValveSoftware/halflife#3095]])
  • Implemented skill cvars sk_plr_hornet_dmg1/2/3 for player Hornet gun damage
  • Fixed memory leak in VGUI1 image loading code (halflife issue [[#3101|ValveSoftware/halflife#3101]])
  • Fixed underwater breathing sounds playing when standing in shallow water (halflife issue [[#3110|ValveSoftware/halflife#3110]])
  • Fixed camera not being consistently centered when raw mouse input is enabled (Thanks IntriguingTiles) #32
  • Update Linux makefiles to use g++ instead of gcc to compile and link all code (Thanks MegaBrutal for bringing this to my attention) #33
  • Moved DMC & Ricochet source code and projects to their own repositories. See About page for more information: https://github.com/SamVanheer/halflife-updated/wiki/About
  • Deleted DMC & Ricochet fgds
  • Removed DMC & Ricochet Makefiles

Changes in V1.0.0 Beta 005

  • Fixed Egon flare sprite not showing (halflife issue [[#3066|ValveSoftware/halflife#3066]])
  • Fixed crosshair remaining present when starting new game (halflife issue [[#692|ValveSoftware/halflife#692]])
  • Ensure CBaseEntity::Instance(entvars_t*) does not cause crashes when given null pointer (halflife issue [[#3056|ValveSoftware/halflife#3056]])
  • Moved DMC & Ricochet projects to their own solution files. These projects were updated to work with VS2017 and VS2019 but will not receive any further changes.
  • Made Half-Life client dll depend on server dll to ensure server is built when launching a client debug session
  • Use RGB_YELLOWISH for health vertical bar & TFC concussion effect (was previously hardcoded to the same color)
  • Fixed incorrect idle time values for RPG fidget, satchel & snark grenade deploy animations (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Fixed hand grenade not playing deploy animation after finishing a throw (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Switch to no weapon if retired weapon could not be switched from (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Ensured PrimaryAmmoIndex & SecondaryAmmoIndex return valid values (halflife issue [[#3073|ValveSoftware/halflife#3073]])
  • Increased size of Health message to 2 to allow sending of signed short values (halflife issue [[#2149|ValveSoftware/halflife#2149]])
  • Increased number of digits allowed in health value to 5 (halflife issue [[#2149|ValveSoftware/halflife#2149]])
  • Fixed Gargantua stomp attack being framerate-dependent (halflife issue [[#2876|ValveSoftware/halflife#2876]])
  • Fixed trigger_camera rotation speed being framerate-dependent (halflife issue [[#2924|ValveSoftware/halflife#2924]])
  • Fixed flashlight icon not restoring properly on save game load (halflife issue [[#388|ValveSoftware/halflife#388]])
  • Set current time to time specified in save game data when saving & restoring entities (halflife issue [[#3065|ValveSoftware/halflife#3065]])
  • Initialize ItemInfoArray & AmmoInfoArray on the client (halflife issue [[#3071|ValveSoftware/halflife#3071]])
  • Use cached item info for client predicted reloads
  • Fixed gauss gun beams going in the wrong direction when player is viewing themselves through a camera (halflife issue [[#1744|ValveSoftware/halflife#1744]])
  • Fixed local player model using wrong pitch angles when seen through another entity (halflife issue [[#3075|ValveSoftware/halflife#3075]])
  • Fixed buttons not sparking in multiplayer (halflife issue [[#1681|ValveSoftware/halflife#1681]])
  • Fixed incorrect check for monster gag spawnflag (halflife issue [[#3076|ValveSoftware/halflife#3076]])
  • Fixed func_plat trigger accessing freed memory if platform is removed (halflife issue [[#1725|ValveSoftware/halflife#1725]])
  • Fixed multisource having off-by-one error in trigger handling (halflife issue [[#1737|ValveSoftware/halflife#1737]])
  • Fixed GetHullBounds & HUD_GetHullBounds using wrong syntax to copy vectors (halflife issue [[#1703|ValveSoftware/halflife#1703]])
  • Fixed CreateBaseline using player bounds parameters incorrectly (halflife issue [[#3078|ValveSoftware/halflife#3078]])
  • Fixed camera.h include guard (halflife issue [[#3035|ValveSoftware/halflife#3035]])
  • Added new variables to player_info_t struct (Thanks ArroganceJustified)
  • Linux compilation fixes (Thanks Shepard and LogicAndTrick)
  • Made IsFacing non-static so it can be used in other source files
  • Fixed HD Revolver model not playing the reload sound (halflife issue [[2351|ValveSoftware/halflife#2351]])
  • Added delta.lst and the resource directory to the game installation

Code cleanup

  • Ensured entity destructors are called
  • Removed void from functions taking no arguments (clang-tidy modernize-redundant-void-arg)
  • Used override specifier where needed (clang-tidy modernize-use-override) (Thanks LogicAndTrick for catching some missing ones)
  • Explicitly cast result of offsetof to int to silence warnings
  • Removed unnecessary returns and semicolons
  • Defined NOMINMAX to disable min & max macros defined in Windows header
  • Moved FindEntityForward to util.h/.cpp & rename to UTIL_FindEntityForward
  • Refactored ClientCommand to acquire the player pointer only once
  • Refactored Vector code to remove use of vec3_t
  • Removed duplicate Vector definitions in util_vector.h
  • Removed shared_vec3_origin
  • Removed unused vector functions
  • Consolidated math header includes
  • Removed duplicate PI constant definitions
  • Clean up animation.cpp header includes
  • Moved primitive types aliases to Platform.h when possible
  • Properly defined model_s & model_t in pm_defs.h to silence Intellisense errors
  • Added #pragma once to mathlib header
  • Made Vector constructors constexpr
  • Refactored g_vecZero & vec3_origin into constexpr constants
  • Made R_TempSprite dir parameter const
  • Made hull vectors constexpr constants
  • Removed duplicate player view constants
  • Defined constant for dead player view
  • Cleaned up magic numbers to use constants
  • Removed duplicate weapon animation enums
  • Consolidated damage constants
  • Removed duplicate Egon constants, move constants to weapons.h
  • Removed duplicate vector cone constants
  • Removed duplicate SND_CHANGE_PITCH constant
  • Moved ARRAYSIZE definition to Platform.h
  • Moved duplicated weapons code into weapons_shared.cpp
  • Moved clamp macro to Platform.h
  • Moved FNullEnt(CBaseEntity*) to cbase.h
  • Removed duplicate function declarations in player.cpp
  • Added common & engine headers to projects
  • Removed hud_iface.h (redundant)
  • Removed duplicate FTENT_FADEOUT constant
  • Removed VGUI1 server browser code (obsolete)
  • Removed unused soundsystem, console panel, control config panel files
  • Removed old project files & module definition files
  • Removed duplicate event function declarations, use event_args_t to ensure Intellisense can link declarations and definitions
  • Removed some double semicolons (Thanks LogicAndTrick)

Changes in V1.0.0 Beta 004

  • Added the option to change the default field of view to the Multiplayer Advanced dialog
  • Updated delta.lst to use latest one from vanilla Half-Life (includes spectator variables) (halflife issue [[#3062|ValveSoftware/halflife#3062]])
  • Use correct number of bits for iuser2 to ensure spectating player with index 32 works correctly (halflife issue [[#826|ValveSoftware/halflife#826]])
  • Fixed sprite attachment bug causing sprites to appear in seemingly random locations (halflife issue [[#3058|ValveSoftware/halflife#3058]])
  • Fixed monsters being resurrected if triggered while dying (halflife issue [[#3061|ValveSoftware/halflife#3061]])
  • Made default_fov cvar archived (halflife issue [[#2237|ValveSoftware/halflife#2237]])
  • Fixed Tripmine & Python having wrong bodies sometimes when weapon prediction is enabled
  • Reset flashlight HUD status on save game load (halflife issue [[#388|ValveSoftware/halflife#388]])
  • Fixed ammo HUD drawing last weapon ammo if player has all weapons stripped (halflife issue [[#3063|ValveSoftware/halflife#3063]])
  • Fixed train HUD not restoring (halflife issue [[#3064|ValveSoftware/halflife#3064]])
  • Changed game directory name to halflife_updated

Changes in V1.0.0 Beta 003

  • Made scientists aware of carcasses, meat and garbage so they can comment on it (halflife issue [[#2982|ValveSoftware/halflife#2982]]) (Thanks NongBenz)
  • Fixed Human Grunt shotgun damage not using correct skill values (halflife issue [[#3046|ValveSoftware/halflife#3046]])
  • Ensured flashlight sprites have enough space between them and death notice text (halflife issue [[#1047|ValveSoftware/halflife#1047]])
  • Removed all uses of pev->fov to simplify changing fov, and always let the server set the fov to ensure it restores correctly (halflife issue [[#3044|ValveSoftware/halflife#3044]])
  • Removed m_fInZoom from Python & Crossbow to ensure zoom state restores correctly (halflife issue [[#3045|ValveSoftware/halflife#3045]])
  • Made cheat protected commands give, fov and impulse check the value of sv_cheats on demand instead of caching the value, enabling the use of these cheats without having to restart the map (halflife issue [[#2511|ValveSoftware/halflife#2511]])
  • Fixed Crowbar using wrong time base for swing think (halflife issue [[#2296|ValveSoftware/halflife#2296]])
  • Refactored user messages globals to remove duplicate forward declarations
  • Added new engine functions added in the latest engine updates

Changes in V1.0.0 Beta 002

  • Re-implemented view roll (halflife issue [[#1544|ValveSoftware/halflife#1544]])
    • Cvars cl_rollangle (maximum roll angle) and cl_rollspeed (roll speed) control this feature, and can be changed in the Multiplayer Advanced dialog
  • Re-implemented view model tilt (halflife issue [[#1544|ValveSoftware/halflife#1544]])
    • Cvar cl_bobtilt controls this feature (default off), and can be changed in the Multiplayer Advanced dialog
  • Fixed Egon gun beam colors being too bright (halflife issue [[#3033|ValveSoftware/halflife#3033]])

Changes in V1.0.0 Beta 001

Project changes:

  • Added project files for Visual Studio 2017 and Visual Studio 2019
  • Removed project files for Visual Studio 2010

Fixes that were added by Valve to the game but not the SDK:

Fixes that have been reported but not yet fixed in the original game:

  • Updated codebase to use correct functions to allow compilation with newer versions of Visual Studio
  • Added null check to bullsquid spit attack animation event to prevent crash if enemy pointer is cleared between animation start and animation event occurrence (halflife issue [[#2834|ValveSoftware/halflife#2834]])
  • Fixed a bug that could cause a crash if an RPG weapon were removed from a player while a rocket fired from it is in flight (halflife issue [[#1719|ValveSoftware/halflife#1719]])
  • Fixed chainsaw crowbar effect when hitting corpse (halflife issue [[#2590|ValveSoftware/halflife#2590]])
  • Fixed server not staying in sync with client when handling weapon attack times (halflife issue [[#1621|ValveSoftware/halflife#1621]])
  • Fixed m_rawinput 1 getting mouse stuck in box (halflife issue [[#1377|ValveSoftware/halflife#1377]])
  • Fixed gauss gun beams having wrong color and brightness compared to WON (halflife issue [[#2865|ValveSoftware/halflife#2865]])
  • Fixed mp5 autoswitching when primary ammo is depleted, even if player still has secondary ammo (halflife issue [[#3001|ValveSoftware/halflife#3001]])
  • Always return m_iSecondaryAmmoType from CBasePlayerWeapon::SecondaryAmmoIndex (halflife issue [[#3029|ValveSoftware/halflife#3029]])
  • Stop controlling func_tank on disconnect (prevents crashes) (halflife issue [[#2594|ValveSoftware/halflife#2594]])
  • Fixed egon creating fake beam when holding secondary attack key (halflife issue [[#2612|ValveSoftware/halflife#2612]])
  • Fixed Egon looping fire sound playing twice sometimes (halflife issue [[#1750|ValveSoftware/halflife#1750]])
  • Fixed weapon prediction allowing multiple reload actions instead of just one (halflife issue [[#2301|ValveSoftware/halflife#2301]])
  • Use MAX_WEAPONS for array of weapons (halflife issue [[#3030|ValveSoftware/halflife#3030]])
  • The player view entity is now restored after loading a save game, which allows trigger_camera entities to work properly if you save while they're active (halflife issue [[#3031|ValveSoftware/halflife#3031]])
  • Fixed Python glitching animation when holding primary attack with empty magazine (halflife issue [[3028|ValveSoftware/halflife#3028]])
  • Fixed weapon being left behind when picking up ammo from it (halflife issue [[#3027|ValveSoftware/halflife#3027]])
  • Fixed autoaim angles not resetting if autoaim is disabled while aiming at a target (halflife issue [[#966|ValveSoftware/halflife#966]])

Half-Life: Opposing Force Updated changelog

Many changes have been made since 2019. All changes made after [[this|https://github.com/Solokiller/halflife-op4/commit/0acdeaea6c27c6b3e1f0ef458f58b98925bc201b]] commit are new.

Changes in V1.0.0 Beta 012

Note: this beta has not been released yet.

Bug fixes

  • Force Pitworm animations to interpolate to fix stuttering movement Unified SDK #434 (Thanks malortie)
  • Implemented snow footsteps and impact sounds, changed snow material type ID to O to match Opposing Force
  • Added missing EXPORT to a few Opposing Force entities
  • Fixed M249 using wrong spread in singleplayer when standing still and ducking
  • Fixed Capture The Flag items crashing on respawn
  • Fixed Health Charger recharge time not using the correct value in Co-op
  • Fixed Desert Eagle laser position not updating when holding down reload button #95 (Thanks Ronin4862)
  • Fixed Voltigore creating beams on death connecting to wrong entity #97 (Thanks LambdaLuke87)
  • Fixed ropes breaking at high framerates
  • Fixed allied human grunts continuing to fire for a few seconds after killing the last enemy in an area #100 (Thanks Ronin4862)

Changes in V1.0.0 Beta 011

Bug fixes

  • Fixed trigger_ctfgeneric printing wrong targetname in log #87
  • Fixed incorrect team check in SendTeamStatInfo #88
  • Fixed Gonome locking first player on the server when attacking anything #89 (Thanks LuckNukeHunter99)
  • Fixed Voltigore beam attack not updating beam attachment positions as it moves #90 (Thanks LuckNukeHunter99)
  • Fixed Baby Voltigore melee distance being twice its intended distance #91 (Thanks LuckNukeHunter99)
  • Fixed typo in Pit Drone sound name #92 (Thanks λλλλλλ)
  • Fix Penguin grenade not using correct spawn angles #93 (Thanks LuckNukeHunter99)

Changes in V1.0.0 Beta 010

Bug fixes

  • Fixed Shock Trooper health not matching original game #74 (Thanks Ronin4862)
  • Fixed MP5 shooting animations sometimes playing a deploy animation #78 (Thanks to Ronin4862 for finding this, and thanks to malortie for fixing this)
  • Fixed Shock Trooper weapon body being set incorrectly, removed some unused constants
  • Fixed Engineer not shutting off his blow torch properly #81 (Thanks Ronin4862)
  • Fixed NPC fired 556 and 762 bullets not creating bullet decals half the time (halflife issue #383 and Updated issue #163) (Thanks Ronin4862 and Matthaiks)
  • Fixed domain errors in func_tank_of (halflife issue #3303) (Thanks pat and a1batross)

Changes in V1.0.0 Beta 009

Bug fixes

  • Fixed Gonome calculating gut throw direction incorrectly #69 (Thanks orav104)
  • Fixed tentacle height values being incorrect for Opposing Force #70
  • Fixed info_ctfspawn_pickup not being called info_ctfspawn_powerup #71 (Thanks Suparsonik)
  • Changed Displacer room type from float to int
  • Fixed human grunts being able to drop weapons in the intro map

Project changes

  • Added fgd/halflife-op4.fgd

Changes in V1.0.0 Beta 008

Bug fixes

  • Fixed typo in shephard player model name #66
  • Fixed clients not getting ScoreInfo message for new players immediately in CTF #67
  • Fixed crashes when GetClientColor returns null in CTF #68

Changes in V1.0.0 Beta 007

Bug fixes

  • Fixed not being able to open team menu after a full CTF round has been played #63
  • Fixed npc_gonome trying to play non-existent sounds #64
  • Fixed monster_tentacle missing spawnflag 64 (different model option) #65 (Thanks malortie)

Changes in V1.0.0 Beta 006

Bug fixes

  • Fixed Black Ops Osprey crashing if it has no valid target (halflife issue #3259)
  • Fixed Black Ops Osprey teleporting to world origin if it isn't moving at all (halflife issue #3260)
  • Fixed Black Ops Osprey not firing trigger targets Resolves (halflife issue #3261)
  • Fixed Black Ops Osprey engine damage effects showing on wrong engine (halflife issue #3263)
  • Fixed Black Ops Apache not firing trigger targets (halflife issue #3262)
  • Fixed Otis Using Barney Voice Lines #62 (Thanks OpenRift412)

Changes in V1.0.0 Beta 005

  • Show pickup icons in HUD for all weapons (halflife issue #3137)
  • Fixed game crashing when loading singleplayer map due to null scoreboard pointer #59
  • Fixed pipe wrench big swing attack not cancelling when the wrench is unequipped (halflife issue #3253)
  • Fixed player saytext color being incorrect in deathmatch games #60
  • Fixed FL_FAKECLIENT flag being cleared in some places (halflife issue #3256)
  • Fixed TeamInfo message being sent to wrong player when initializing player hud in CTF gamemode #61
  • Fixed Black Ops Osprey not interpolating (halflife issue #3228)

Changes in V1.0.0 Beta 004

Bug fixes

Bugs that exist in Steam Opposing Force:

  • Fixed CTF backpack powerup causing glitches with Shotgun and Spore Launcher reload (halflife issue #3234)
  • Fixed M249 belt body not syncing between client and server (halflife issue #3237)
  • Fixed player info bar in CTF gamemode showing incorrect health for dead players (halflife issue #3243)
  • Fixed CTF time remaining text displaying on non-CTF maps (halflife issue #842)

Bugs that only existed in this project

  • Fixed CTF gamerules sending health value incorrectly #36
  • Fixed CTF jump pack item not playing sound when long jumping #37
  • Fixed CTF backpack not doubling clip size for most weapons #38
  • Fixed CTF backpack sound still playing when not giving ammo #39
  • Fixed FOV being set to 90 when first spawning in CTF gamemode #40
  • Fixed incorrect strncpy #45
  • Fixed player being invisible on first spawn in CTF gamemode #48
  • Fixed player CTF team being reset #50
  • Fixed Black Mesa team getting 10 points on flag pickup in CTF #52
  • Fixed VGUI1 menus using wrong border color #56
  • Fixed not being able to open team menu after closing it #57
  • Fixed HUD scoreboard not working properly in CTF #49 and #51
  • Fixed VGUI1 scoreboard not working properly #43, #44, #42, #47, #53, #54 and #55

UX improvements

  • Added missing titles.txt entries for observer mode #41
  • Added missing options to Create Server Game tab #46

Changes in V1.0.0 Beta 003

  • Fixed incorrect header include guard in CRopeSample.h #29
  • Fixed uses of bool in rope code that should be BOOL #30
  • Fixed "suspicious" keyvalue not being saved (makes certain friendly NPCs hostile) #31
  • Fixed cleansuit scientist using wrong skill value for health #32
  • Fixed cleansuit scientist using wrong skill value to heal characters #33
    • Note: cleansuit scientists in vanilla Opposing Force cannot heal characters
  • Added missing hud item color checks for when night vision is on
  • Added missing autoaim update to Displacer and Shock Rifle
  • Fixed typo in Black Ops Osprey tail gib debris model
  • Made cleansuit scientist smell carcasses, meat and garbage like regular scientists
  • Fixed COFSquadTalkMonster not chaining save data to COFAllyMonster
  • Removed incorrect precache calls from medic grunt
  • Disabled ally grunt player kicking behavior
  • Removed incorrect class scope specifiers
  • Applied refactoring work done for Half-Life Updated to this project as well
  • Fixed Knife not dealing correct damage amount #35

Changes in V1.0.0 Beta 002

All changes from Half-Life Updated up until Beta 6 are included: https://github.com/SamVanheer/halflife-updated/wiki/Changelog#changes-in-v100-beta-006

  • Updated Linux Makefiles to include all Opposing Force files

Changes in V1.0.0 Beta 001

All changes from Half-Life Updated up until Beta 5 are included: https://github.com/Solokiller/halflife-updated/wiki/Changelog

  • Fixed Pipe Wrench secondary attack delay being 1 second instead of 0.1 seconds (not in vanilla Op4) (Resolves [[#17|twhl-community/halflife-op4-updated#17]]) (Thanks OpenRift412)
  • Fixed scientists changing heads when healing player (not in vanilla) (Thanks OpenRift412)
  • Refactored hud color usage to use RGB_YELLOWISH & RGB_HUD_COLOR constants
  • Removed unnecessary sequence change in spore grenade (halflife issue [[#3074|ValveSoftware/halflife#3074]])
  • Fixed LD and HD Revolver models not playing the reload sound (halflife issue [[2351|ValveSoftware/halflife#2351]])

Code cleanup

  • Removed void from functions taking no arguments (clang-tidy modernize-redundant-void-arg)
  • Used override specifier where needed (clang-tidy modernize-use-override)
  • Removed workarounds for conflicts between server & client code

Changes in V1.0.0 Alpha 001

General

  • Fixed not being able to commit suicide using the kill command when not in a CTF team (halflife issue [[#1587|ValveSoftware/halflife#1587]])
  • Fixed spectators being able to choose characters and subsequently interact with flags and some other items (halflife issue [[#2897|ValveSoftware/halflife#2897]])
  • Don't send EF_BRIGHTLIGHT effect flag for players to prevent night vision goggles from lighting things up for everybody (NEEDS PUBLIC TESTING) (halflife issue [[#1858|ValveSoftware/halflife#1858]])
  • Fixed ropes leaking memory (halflife issue [[#3054|ValveSoftware/halflife#3054]])
  • Fixed CBaseEntity::Instance(entvars_t*) crashing the game if given a null pointer (halflife issue [[#3056|ValveSoftware/halflife#3056]])

Weapons

Items

Maps

  • Fixed "Temporal paradox" Xen map displaying a map title (halflife issue [[#963|ValveSoftware/halflife#963]])
  • Fixed Pit Worm's Nest boss death script unlocking the bridge too soon, which could cause players to get stuck with no way to progress (halflife issue [[#3043|ValveSoftware/halflife#3043]])

Monsters

Not fixed:

Can't be fixed:

  • ValveSoftware/halflife#939: Looks like a problem with r_dynamic, or lightmap texture mixing/uploading not working properly
  • ValveSoftware/halflife#912: impossible to fix without adding new attachments to models
  • ValveSoftware/halflife#968: Sounds like an issue with server framerate causing elevators to move too much to get into final position, causing clipping issues with any objects standing on them, no easy fix

Half-Life Updated changelog

Changes in V1.0.0 Beta 014

Note: This beta has not been released yet.

Bug fixes

  • Correctly save and restore controller and blending variables #175 (Thanks vasiavasiavasia95)
  • Set activity before SetYawSpeed so it has the right activity #176 (Thanks FreeSlave and vasiavasiavasia95)
  • Fixed animation code accessing invalid sequence descriptor (halflife issue #3308) (Thanks FreeSlave)
  • Fixed weapon bits being incorrectly set and checked in HasAnyWeapons #178 (Thanks jay!)

Changes in V1.0.0 Beta 013

Bug fixes

  • Fixed Room DSP effects not always activating #164 (Thanks Ronin4862)
  • Try to unstuck player after level transition if stuck in the world #165 (Thanks Ronin4862)
  • Fixed MP5 not creating bullet decals half the time (halflife issue #383 and Updated issue #163) (Thanks Ronin4862 and Matthaiks)
  • Fixed Particle man removing more particles than expected #169 (Thanks FreeSlave)
  • Fixed domain errors in func_tank (halflife issue #3303) (Thanks pat and a1batross)
  • Fixed crash while parsing command menu with unsupported custom button (halflife issue #1730)
  • Fixed NPCs being able to speak scripted_sentences while dying #171
  • Fixed tripmines blowing up after loading save game in c1a3d #172 (Thanks λλλλλλ)
  • Fixed game crashing when triggering certain entities on an empty dedicated server with maxplayers 1 (halflife issue #3307)
    • Access world through global
    • Access local player through helper function
    • Removed some obsolete utility functions

Project changes

  • Cleaned up the Linux makefiles to remove obsolete logic and simplify the compilation process
  • Removed use of obsolete register keyword (caused compiler errors when using Clang++)
  • Added support for overriding the compiler used when using the Linux makefiles
  • Fixed the Linux makefiles not working when using Clang++ due to missing -mno-sse compiler flag
  • Added particle man sources to the object list in Linux client Makefile #168 (Thanks FreeSlave)
  • Added game icons for program icon and Steam library icon
  • Use post build event to copy dlls instead of using output directory #167

Note: you will need to clean solution and rebuild to remove remaining references to the old output directory.

Git repository changes

  • Added Github Actions CI configuration file based on Half-Life Unified SDK's version. Continuous Integration provides pre-built binaries for Windows and Linux. (Thanks to JoelTroch for providing the original file and providing the basis for this file)

Github wiki changes

  • Explicitly specified the scope of the projects
  • Added links to TWHL website, Discord server, SDK setup tutorial and Half-Life Updated status thread

Changes in V1.0.0 Beta 012

Bug fixes

  • Fixed func_button "Sparks" spawnflag using wrong origin (halflife issue #3269) (Thanks Descen)
  • Fixed func_rot_button "X Axis" spawnflag also enabling func_button "Sparks" behavior (halflife issue #3270) (Thanks Descen)
  • Fixed second case of incorrect timebase for button sparks (halflife issue #1681)
  • Fixed env_spark transitioning to other maps when it shouldn't (halflife issue #3280) (Thanks Ronin4862)
  • Fixed ServerActivate checking for player entities incorrectly (halflife #3282) (Thanks vasiavasiavasia95)
  • Fixed PM_TraceModel possibly returning uninitialized trace (halflife #3283) (Thanks a1batross)
  • Print error message if trigger_changelevel points to itself
  • Fixed ichthyosaur restarting death sequence on save game load #152 (Thanks Ronin4862)
  • Reset server's client FOV value so loading save games restores FOV correctly with weapon prediction disabled (halflife issue #3044) (Thanks Ronin4862)
  • Commented out fix for #131 to allow players to keep weapons and be given empty exhaustible weapons
  • Fixed players not being given exhaustible weapons when they get the ammo for them #153 (Thanks Ronin4862)
  • Fixed weapon deploy animations caused by lastinv command not working properly #154 (Thanks jay!)
  • Fixed alien controllers facing in non-combat state #155 (Thanks FreeSlave)
  • Fixed scientist voice pitch #156 (Thanks FreeSlave)
  • Cleaned up weapons code a bit (Note: some code has been moved which could break mods, make sure to double check these changes in your mod if you merge them in) #157
  • Fixed tripmine body value being influenced by events from other weapons during deploy #158 (Thanks FreeSlave)
  • Fixed incorrect body values being passed into EV_WeaponAnimation #159 (Thanks FreeSlave)
  • Fixed autoswitch from tripmine to RPG causing wrong animation to play when weapon prediction is off #160
  • Updated smdlexp to use 3DS Max 2023 SDK #149 (Thanks fel1x-developer)
    • Updated to fix configuration issues so both debug and release profiles compile and don't fail when trying to copy the library to the 3DS Max plugins directory
    • Added errors to stop compilation if the library is not built as 64 bit or if it does not use the Unicode character set (required for 3DS Max 2023 plugins)
    • Note: plugin has not been tested. Use this plugin instead: https://knockout.chat/thread/806/1
  • Added keyvalue allow_item_dropping to control whether NPCs can drop items (Opposing Force Updated #72)
  • Refactored env_sound code to use correct data type for room type, don't use goto to control think rate
  • Always send room_type changes to client, set room_type to 0 by default, reset room_type to 0 on map change, save room_type and restore it when loading same map (halflife issues #1144 and #2936)
  • Fixed weapon deploy animations on fast switching with user binds #161 (Thanks FreeSlave)
  • Added fixes from Marphy Black's Half-Life Fact Fixes (Thanks Marphy Black)

Project changes

  • Added fgd/halflife.fgd

Changes in V1.0.0 Beta 011

Bug fixes

  • Fixed node graphs being loaded from search paths other than GAMECONFIG path #145 (properly this time)
  • Fixed node graphs being loaded with a null byte appended #146
  • Fixed "fullupdate" call making a HUD disappear #147 (Thanks SmileyAG)
  • Fixed STL Algorithm Header Errors When Included with Platform.h #148 (Thanks edgarbarney)

Changes in V1.0.0 Beta 010

Bug fixes

  • Fixed Osprey crashing if it has no valid target (halflife issue #3259)
  • Fixed Osprey teleporting to world origin if it isn't moving at all (halflife issue #3260)
  • Fixed Osprey not firing trigger targets (halflife issue #3261)
  • Fixed Osprey engine damage effects showing on wrong engine (halflife issue #3263) (Thanks Hezus)
  • Fixed Apache not firing trigger targets (halflife issue #3262)
  • Fixed Error in ServerCtrl #135 (Thanks fel1x-developer)
  • Pass director stufftext commands to filtered client command function (halflife issue #1497)
  • Fixed RPG sometimes getting stuck unable to reload (halflife issue #3264) (Thanks Ronin4862)
  • Fixed monster_tentacle not interpolating (halflife issue #3228) (Thanks Anton)
  • Fixed node graphs being loaded from search paths other than GAME path #145
  • Fixed momentary_door restarting movement sound repeatedly when moving back to starting position (halflife issue #3265)

Project changes

  • Fixed symlinks to Linux and MacOS builds of SDL2 #137 (Thanks MegaBrutal)
  • Deleted Makefiles and libraries for MacOS X (Half-Life 1 is 32 bit, no longer supported by MacOS) #141 (Thanks fel1x-developer)
  • Upgraded tool projects to use Visual Studio 2019, fixed as many warnings as possible, all tools aside from smdlexp compile, all tools compiled as C++, most tools work as intended #138 (Thanks fel1x-developer for helping with this work)
    • Fixed missing archtypes.h header include #136
    • Updated readme.txt for latest methods installing MFC, smdlexp and SDL2 #140 (Thanks fel1x-developer)
    • Removed obsolete VS6 & makefile project files from tools code #142
    • Removed bsplib.h & bsplib.cpp (redundant) #143

Changes in V1.0.0 Beta 009

Weapons

  • Allow weapons to network data as needed
  • Initialize frametime value so weapon prediction code can use it
  • Fixed chainsaw hornetgun sounds and mostly fixed hornetgun not playing firing animation (halflife issue #556)
  • Fixed Gauss charge sound not always being reset (halflife issue #3188)
  • Show pickup icons in HUD for all weapons (halflife issue #3137)
  • Fixed picking up weapons that give free/regenerating ammo sometimes showing weapon icon as red (halflife issue #3250)
  • Fixed hand grenades staying primed when switching away or dropping the weapon (halflife issue #3251)
  • Don't give player exhaustible weapon if it has no ammo left #131
  • Applied Opposing Force weapon prediction timing fix to Half-Life (halflife issue #3252)
  • Fixed event code crashing if weapon prediction is disabled #132
  • Automatically switch away from exhaustible weapons that have no ammo left #133
  • Fixed controlling a func_tank with empty weapon deploying invisible weapon when stopping control #134

Bug fixes

  • Fixed hornets crashing the game if they hit you after a level transition (halflife issue #1598)
  • Fixed UTIL_IsServer returning inverted value #130 (Thanks tmp64)
  • Fixed m_rawinput changes not taking effect if a new map has started and less time has passed than on any previous map or if weapon prediction is disabled (halflife issue #3255)
  • Fixed FL_FAKECLIENT flag being cleared in some places (halflife issue #3256)
  • Fixed Osprey not interpolating (halflife issue #3228) (Thanks Hezus)

Project changes

  • Rewrote the installation and packing scripts to use C#

Changes in V1.0.0 Beta 008

Bug fixes

  • Fixed crowbar playing back swing events twice sometimes (halflife issue #3230)
  • Fixed weapon empty sound playing twice (halflife issue #3231)
  • Fixed Gauss sound not stopping when players are not in the PAS (halflife issue #3233)
  • Fixed command menu text not being localized (halflife issue #2387)
  • Fixed localization function cutting off text (halflife issue #2608)
  • Fixed chat text sometimes using the wrong color (halflife issue #3240)
  • Fixed status bar accepting out of range indices (halflife issue #3242)
  • Fixed explosions going through walls in certain cases (halflife issue #3244)
  • Fixed tripmine beams not using correctly start position sometimes (halflife issue #1670) (Thanks vasiavasiavasia95)
  • Fixed trip mine laser beam duplicating after going back and forth through level changes (halflife issue #3245) (Thanks vasiavasiavasia95)

UX improvements

  • Print the "SayText" messages instantly in the console (halflife issue #1440)

Changes in V1.0.0 Beta 007

Bug fixes

  • Fixed cycler_sprite not saving #43
  • Fixed rpg reload reading uninitialized variable #42
  • Fixed RPG client prediction results stored in wrong pointer #67 (Thanks malortie)
  • Fixed crossbow fire on empty sequence not playing #68 (Thanks malortie)
  • Fixed glock fire on empty sequence not playing #70 (Thanks malortie)
  • Fixed func_rotating not reporting keyvalue spawnorigin as handled #72
  • Fixed infodecal not reporting keyvalue texture as handled #73
  • Fixed beam attachment invalidated on restore #74 (Thanks malortie)
  • Fixed Snark movetype being changed unconditionally (halflife issue #3175)
  • Fixed Human Grunt checking enemy incorrectly in CheckMeleeAttack1 (halflife issue #3176)
  • Fixed CTalkMonster::RunTask not properly initializing variable (halflife issue #3177)
  • Fixed speaker entity not handling invalid preset values correctly (halflife issue #3178)
  • Reserved enough entvars for all weapons + local player in client weapon prediction code #97
  • Fixed crowbar not showing in weapon list if there are empty weapon slots with a lower id (halflife #3181)
  • Fixed invalidated linked entities in node graph #106 (Thanks zaklaus)
  • Fixed default implementation of HasTarget not checking the right variable #109 (Thanks malortie)
  • Implemented particle manager in client library #122
    • This change fixes halflife issue #2196 by embedding the particle manager in the client library. It also fixes compatibility issues caused by optimizations applied to the Vector type.
    • Reworked particle memory management to allow far more particles to be allocated before crashing by running out of memory (previous limit was around 100 particles at the same time, new limit closer to 1 million). Fixes halflife #1447
    • Fixed memory leak in the physics force list: halflife #3213
    • Fixed use-after-free bug that could cause difficult to debug problems in (hopefully) theoretical cases: #3214
    • Optimized some of the code to be more efficient
    • Reworked the CBaseParticle class to use a simpler design
  • Fixed the crowbar damage always being calculated halved (halflife issue #1600 (Thanks YaLTeR)
  • Fixed packing script creating empty directory in hd directory #120
  • Fixed V_CalcBob not initializing static variables #126
  • Fixed tripmine viewmodel having wrong body on first pickup #129
  • Fixed models stuttering due to client side interpolation (halflife issue #3228) (Thanks Uncle Mike, and vasiavasiavasia95 and Bacontsu for bringing this fix to my attention)
  • Fixed player physics hull sizes not initializing properly (halflife issue #3229) (Thanks vasiavasiavasia95)

Project changes

  • Rewrote installation scripts to use PowerShell
  • Enabled multiprocessor compilation for Windows builds #39
  • Changed default toolset to non-XP compatible one and set Windows SDK version to W10 #44
  • Added new cvar flags added by recent engine updates #46
  • Added new cvar flags for command filtering #121 (Thanks a1batross and vasiavasiavasia95)
  • Set C++ standard to 17 #85
  • Provided access to engine filesystem #86
  • Use engine filesystem to load and save node graph files #87
  • Define and use constants for maximum number of players and weapons #96
  • Added support for saving and restoring 64 bit integers #99
  • Added support for adding 64 weapons #98
  • Added missing tracerCount for EV_HLDM_FireBullets #107 (Thanks malortie)
  • Removed VS2017 projects #118
  • Fixed func_tanks not being usable #125 (Thanks suXinjke)
  • Fixed case sensitivity of OpenGL header inclusion
  • Fixed reworked CGamePlayerEquip::KeyValue method #128

Code cleanup

  • Made event playback functions const correct #41
  • Removed unused skiplocal parameter #38
  • Made CBaseEntity debug setters const correct
  • Made HUD string drawing methods const correct
  • Improved const correctness in engine APIs
  • Removed obsolete preprocessor macro checks #47
  • Cleaned up uses of the node graph global #48
  • Disabled as many Windows.h dependencies as possible #49
  • Removed benchmarking functionality #54
  • Removed game_controls.lib from the client project #55
  • Defined platform-agnostic types for common structures #56
  • Removed obsolete engine APIs related to security modules #57
  • Removed extern C wrappers around functions #58
  • Reworked some uses of platform-specific code to be cross-platform #59
  • Merged platform abstraction headers #53
  • Removed redundant include guards #52
  • Converted all include guards to pragma once #50
  • Removed duplicate interface.h/.cpp files #60
  • Added pragma once to all headers that need it #51
  • Use snprintf and vsnprintf everywhere instead of _snprintf and _vsnprintf #61
  • Use WIN32 preprocessor macro instead of _WIN32 #62
  • Removed unnecessary _cdecl in function declarations #63
  • Removed useless try-catch statement in command menu parsing code #64
  • Reworked some uses of platform-specific code to be cross-platform #59
  • Save FIELD_BOOLEAN as byte array #65
  • Reworked operator new and delete overloads to allocate memory directly #71
  • Removed identical line in conditional statement #75 (Thanks malortie)
  • Removed unused files (Thanks malortie):
    • AI_BaseNPC_Schedule.cpp #77
    • glock.cpp #78
    • mpstubb.cpp #80
    • MOTD.cpp #81
    • scoreboard.cpp #82
  • Removed DMC and Ricochet VS 2017 projects to match removal of VS 2019 projects #79 (Thanks malortie)
  • Fixed invalid conversions between bool and other types #69
  • Reworked all uses of int and int-like types to use bool when the value is boolean #83
  • Enabled certain Clang-tidy checks #66
  • Formatted all files and added clang-format configuration file #84
  • Removed unused types #88
  • Removed unused globals and duplicate global variable forward declarations #89
  • Removed obsolete interface APIs #90
  • Overhauled vector types to use constexpr, simplify code #92
  • Fixed or silence compiler warnings #91
  • Removed unused VGUI1 code in vgui_int.cpp #93
  • Reworked CSave & CRestore to eliminate null data pointers #94
  • Reworked mouse thread code to use standard types #95
  • Replaced stackalloc-based saytext code with fixed-size buffer to avoid using alloca (halflife issue #3179)
  • Use sound array macros (Thanks malortie):
  • Removed unused variables in the client side event playback code #105 (Thanks malortie)
  • Renamed hl_wpn_glock.cpp to glock.cpp #108 (Thanks malortie and JoelTroch for the Linux changes related to this)
  • Removed preprocessor checks for other games (Thanks malortie):
    • Team Fortress Classic #110
    • Condition Zero #111
    • Counter-Strike #112
    • Day Of Defeat #113
    • Blue Shift #114
    • Deathmatch Classic and Threewave #115

Changes in V1.0.0 Beta 006

  • Reverted "Fixed multisource having off-by-one error in trigger handling" (halflife issue [[#1737|ValveSoftware/halflife#1737]]) to avoid edge cases where entities triggering the multisource use a delayed trigger which is not supported by fixed code
  • Fixed func_breakable keyvalue "explosion" not working (#24) (Thanks ArroganceJustified)
  • Fixed saytext message handling potentially causing buffer overflow (halflife issue [[#3095|ValveSoftware/halflife#3095]])
  • Implemented skill cvars sk_plr_hornet_dmg1/2/3 for player Hornet gun damage
  • Fixed memory leak in VGUI1 image loading code (halflife issue [[#3101|ValveSoftware/halflife#3101]])
  • Fixed underwater breathing sounds playing when standing in shallow water (halflife issue [[#3110|ValveSoftware/halflife#3110]])
  • Fixed camera not being consistently centered when raw mouse input is enabled (Thanks IntriguingTiles) #32
  • Update Linux makefiles to use g++ instead of gcc to compile and link all code (Thanks MegaBrutal for bringing this to my attention) #33
  • Moved DMC & Ricochet source code and projects to their own repositories. See About page for more information: https://github.com/SamVanheer/halflife-updated/wiki/About
  • Deleted DMC & Ricochet fgds
  • Removed DMC & Ricochet Makefiles

Changes in V1.0.0 Beta 005

  • Fixed Egon flare sprite not showing (halflife issue [[#3066|ValveSoftware/halflife#3066]])
  • Fixed crosshair remaining present when starting new game (halflife issue [[#692|ValveSoftware/halflife#692]])
  • Ensure CBaseEntity::Instance(entvars_t*) does not cause crashes when given null pointer (halflife issue [[#3056|ValveSoftware/halflife#3056]])
  • Moved DMC & Ricochet projects to their own solution files. These projects were updated to work with VS2017 and VS2019 but will not receive any further changes.
  • Made Half-Life client dll depend on server dll to ensure server is built when launching a client debug session
  • Use RGB_YELLOWISH for health vertical bar & TFC concussion effect (was previously hardcoded to the same color)
  • Fixed incorrect idle time values for RPG fidget, satchel & snark grenade deploy animations (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Fixed hand grenade not playing deploy animation after finishing a throw (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Switch to no weapon if retired weapon could not be switched from (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Ensured PrimaryAmmoIndex & SecondaryAmmoIndex return valid values (halflife issue [[#3073|ValveSoftware/halflife#3073]])
  • Increased size of Health message to 2 to allow sending of signed short values (halflife issue [[#2149|ValveSoftware/halflife#2149]])
  • Increased number of digits allowed in health value to 5 (halflife issue [[#2149|ValveSoftware/halflife#2149]])
  • Fixed Gargantua stomp attack being framerate-dependent (halflife issue [[#2876|ValveSoftware/halflife#2876]])
  • Fixed trigger_camera rotation speed being framerate-dependent (halflife issue [[#2924|ValveSoftware/halflife#2924]])
  • Fixed flashlight icon not restoring properly on save game load (halflife issue [[#388|ValveSoftware/halflife#388]])
  • Set current time to time specified in save game data when saving & restoring entities (halflife issue [[#3065|ValveSoftware/halflife#3065]])
  • Initialize ItemInfoArray & AmmoInfoArray on the client (halflife issue [[#3071|ValveSoftware/halflife#3071]])
  • Use cached item info for client predicted reloads
  • Fixed gauss gun beams going in the wrong direction when player is viewing themselves through a camera (halflife issue [[#1744|ValveSoftware/halflife#1744]])
  • Fixed local player model using wrong pitch angles when seen through another entity (halflife issue [[#3075|ValveSoftware/halflife#3075]])
  • Fixed buttons not sparking in multiplayer (halflife issue [[#1681|ValveSoftware/halflife#1681]])
  • Fixed incorrect check for monster gag spawnflag (halflife issue [[#3076|ValveSoftware/halflife#3076]])
  • Fixed func_plat trigger accessing freed memory if platform is removed (halflife issue [[#1725|ValveSoftware/halflife#1725]])
  • Fixed multisource having off-by-one error in trigger handling (halflife issue [[#1737|ValveSoftware/halflife#1737]])
  • Fixed GetHullBounds & HUD_GetHullBounds using wrong syntax to copy vectors (halflife issue [[#1703|ValveSoftware/halflife#1703]])
  • Fixed CreateBaseline using player bounds parameters incorrectly (halflife issue [[#3078|ValveSoftware/halflife#3078]])
  • Fixed camera.h include guard (halflife issue [[#3035|ValveSoftware/halflife#3035]])
  • Added new variables to player_info_t struct (Thanks ArroganceJustified)
  • Linux compilation fixes (Thanks Shepard and LogicAndTrick)
  • Made IsFacing non-static so it can be used in other source files
  • Fixed HD Revolver model not playing the reload sound (halflife issue [[2351|ValveSoftware/halflife#2351]])
  • Added delta.lst and the resource directory to the game installation

Code cleanup

  • Ensured entity destructors are called
  • Removed void from functions taking no arguments (clang-tidy modernize-redundant-void-arg)
  • Used override specifier where needed (clang-tidy modernize-use-override) (Thanks LogicAndTrick for catching some missing ones)
  • Explicitly cast result of offsetof to int to silence warnings
  • Removed unnecessary returns and semicolons
  • Defined NOMINMAX to disable min & max macros defined in Windows header
  • Moved FindEntityForward to util.h/.cpp & rename to UTIL_FindEntityForward
  • Refactored ClientCommand to acquire the player pointer only once
  • Refactored Vector code to remove use of vec3_t
  • Removed duplicate Vector definitions in util_vector.h
  • Removed shared_vec3_origin
  • Removed unused vector functions
  • Consolidated math header includes
  • Removed duplicate PI constant definitions
  • Clean up animation.cpp header includes
  • Moved primitive types aliases to Platform.h when possible
  • Properly defined model_s & model_t in pm_defs.h to silence Intellisense errors
  • Added #pragma once to mathlib header
  • Made Vector constructors constexpr
  • Refactored g_vecZero & vec3_origin into constexpr constants
  • Made R_TempSprite dir parameter const
  • Made hull vectors constexpr constants
  • Removed duplicate player view constants
  • Defined constant for dead player view
  • Cleaned up magic numbers to use constants
  • Removed duplicate weapon animation enums
  • Consolidated damage constants
  • Removed duplicate Egon constants, move constants to weapons.h
  • Removed duplicate vector cone constants
  • Removed duplicate SND_CHANGE_PITCH constant
  • Moved ARRAYSIZE definition to Platform.h
  • Moved duplicated weapons code into weapons_shared.cpp
  • Moved clamp macro to Platform.h
  • Moved FNullEnt(CBaseEntity*) to cbase.h
  • Removed duplicate function declarations in player.cpp
  • Added common & engine headers to projects
  • Removed hud_iface.h (redundant)
  • Removed duplicate FTENT_FADEOUT constant
  • Removed VGUI1 server browser code (obsolete)
  • Removed unused soundsystem, console panel, control config panel files
  • Removed old project files & module definition files
  • Removed duplicate event function declarations, use event_args_t to ensure Intellisense can link declarations and definitions
  • Removed some double semicolons (Thanks LogicAndTrick)

Changes in V1.0.0 Beta 004

  • Added the option to change the default field of view to the Multiplayer Advanced dialog
  • Updated delta.lst to use latest one from vanilla Half-Life (includes spectator variables) (halflife issue [[#3062|ValveSoftware/halflife#3062]])
  • Use correct number of bits for iuser2 to ensure spectating player with index 32 works correctly (halflife issue [[#826|ValveSoftware/halflife#826]])
  • Fixed sprite attachment bug causing sprites to appear in seemingly random locations (halflife issue [[#3058|ValveSoftware/halflife#3058]])
  • Fixed monsters being resurrected if triggered while dying (halflife issue [[#3061|ValveSoftware/halflife#3061]])
  • Made default_fov cvar archived (halflife issue [[#2237|ValveSoftware/halflife#2237]])
  • Fixed Tripmine & Python having wrong bodies sometimes when weapon prediction is enabled
  • Reset flashlight HUD status on save game load (halflife issue [[#388|ValveSoftware/halflife#388]])
  • Fixed ammo HUD drawing last weapon ammo if player has all weapons stripped (halflife issue [[#3063|ValveSoftware/halflife#3063]])
  • Fixed train HUD not restoring (halflife issue [[#3064|ValveSoftware/halflife#3064]])
  • Changed game directory name to halflife_updated

Changes in V1.0.0 Beta 003

  • Made scientists aware of carcasses, meat and garbage so they can comment on it (halflife issue [[#2982|ValveSoftware/halflife#2982]]) (Thanks NongBenz)
  • Fixed Human Grunt shotgun damage not using correct skill values (halflife issue [[#3046|ValveSoftware/halflife#3046]])
  • Ensured flashlight sprites have enough space between them and death notice text (halflife issue [[#1047|ValveSoftware/halflife#1047]])
  • Removed all uses of pev->fov to simplify changing fov, and always let the server set the fov to ensure it restores correctly (halflife issue [[#3044|ValveSoftware/halflife#3044]])
  • Removed m_fInZoom from Python & Crossbow to ensure zoom state restores correctly (halflife issue [[#3045|ValveSoftware/halflife#3045]])
  • Made cheat protected commands give, fov and impulse check the value of sv_cheats on demand instead of caching the value, enabling the use of these cheats without having to restart the map (halflife issue [[#2511|ValveSoftware/halflife#2511]])
  • Fixed Crowbar using wrong time base for swing think (halflife issue [[#2296|ValveSoftware/halflife#2296]])
  • Refactored user messages globals to remove duplicate forward declarations
  • Added new engine functions added in the latest engine updates

Changes in V1.0.0 Beta 002

  • Re-implemented view roll (halflife issue [[#1544|ValveSoftware/halflife#1544]])
    • Cvars cl_rollangle (maximum roll angle) and cl_rollspeed (roll speed) control this feature, and can be changed in the Multiplayer Advanced dialog
  • Re-implemented view model tilt (halflife issue [[#1544|ValveSoftware/halflife#1544]])
    • Cvar cl_bobtilt controls this feature (default off), and can be changed in the Multiplayer Advanced dialog
  • Fixed Egon gun beam colors being too bright (halflife issue [[#3033|ValveSoftware/halflife#3033]])

Changes in V1.0.0 Beta 001

Project changes:

  • Added project files for Visual Studio 2017 and Visual Studio 2019
  • Removed project files for Visual Studio 2010

Fixes that were added by Valve to the game but not the SDK:

Fixes that have been reported but not yet fixed in the original game:

  • Updated codebase to use correct functions to allow compilation with newer versions of Visual Studio
  • Added null check to bullsquid spit attack animation event to prevent crash if enemy pointer is cleared between animation start and animation event occurrence (halflife issue [[#2834|ValveSoftware/halflife#2834]])
  • Fixed a bug that could cause a crash if an RPG weapon were removed from a player while a rocket fired from it is in flight (halflife issue [[#1719|ValveSoftware/halflife#1719]])
  • Fixed chainsaw crowbar effect when hitting corpse (halflife issue [[#2590|ValveSoftware/halflife#2590]])
  • Fixed server not staying in sync with client when handling weapon attack times (halflife issue [[#1621|ValveSoftware/halflife#1621]])
  • Fixed m_rawinput 1 getting mouse stuck in box (halflife issue [[#1377|ValveSoftware/halflife#1377]])
  • Fixed gauss gun beams having wrong color and brightness compared to WON (halflife issue [[#2865|ValveSoftware/halflife#2865]])
  • Fixed mp5 autoswitching when primary ammo is depleted, even if player still has secondary ammo (halflife issue [[#3001|ValveSoftware/halflife#3001]])
  • Always return m_iSecondaryAmmoType from CBasePlayerWeapon::SecondaryAmmoIndex (halflife issue [[#3029|ValveSoftware/halflife#3029]])
  • Stop controlling func_tank on disconnect (prevents crashes) (halflife issue [[#2594|ValveSoftware/halflife#2594]])
  • Fixed egon creating fake beam when holding secondary attack key (halflife issue [[#2612|ValveSoftware/halflife#2612]])
  • Fixed Egon looping fire sound playing twice sometimes (halflife issue [[#1750|ValveSoftware/halflife#1750]])
  • Fixed weapon prediction allowing multiple reload actions instead of just one (halflife issue [[#2301|ValveSoftware/halflife#2301]])
  • Use MAX_WEAPONS for array of weapons (halflife issue [[#3030|ValveSoftware/halflife#3030]])
  • The player view entity is now restored after loading a save game, which allows trigger_camera entities to work properly if you save while they're active (halflife issue [[#3031|ValveSoftware/halflife#3031]])
  • Fixed Python glitching animation when holding primary attack with empty magazine (halflife issue [[3028|ValveSoftware/halflife#3028]])
  • Fixed weapon being left behind when picking up ammo from it (halflife issue [[#3027|ValveSoftware/halflife#3027]])
  • Fixed autoaim angles not resetting if autoaim is disabled while aiming at a target (halflife issue [[#966|ValveSoftware/halflife#966]])

Half-Life Updated changelog

Changes in V1.0.0 Beta 015

Note: this beta has not been released yet.

Bug fixes

  • Fixed tripmines not detonating if placed on breakable and a save game is loaded #192 (Thanks forklift.mdl)
  • Fixed func_friction not working properly in multiplayer (halflife issue #1542) (Thanks L453rh4wk)
  • Fixed spray logo using wrong decal after save game load when not using custom spray #193 (Thanks Ronin4862)
  • Fixed ammo pickup sound playing when picking up a weapon for the first time (bug introduced by #153 in Beta 12)
  • Fixed Gauss gun sometimes settting player uranium ammo to -1 (halflife issue #3343)
  • Fixed pistol not playing empty sound when using secondary attack
  • Fixed user interface coordinates and sizes being incorrectly adjusted for resolution (halflife issue #3344)
  • Fixed player weapons still receiving input when starting to use a func_tank (halflife issue #3345) (Thanks Oxofemple.)
  • Fixed alien slave beams staying forever if they exist during a level change (halflife issue #3104)
  • Fixed cycler_wreckage storing time value in int instead of float
  • Fixed limit in world weapons (e.g. Hand Grenade) respawning at wrong time if server is near edict limit
  • Fixed shotgun starting idle animations too quickly after exhausting all ammo using primary attack #195 (Thanks Ronin4862)
  • Fixed RPG not playing empty sound when attempting to fire with no ammo left #196 (Thanks Ronin4862)
  • Fixed Human Grunts dropping weapons again if the game is saved and loaded while the grunt is dying (Thanks Oxofemple.)
  • Added missing monster state name to ReportAIState (halflife issue #3220) (Thanks Shepard)
  • Fixed mouse movement during map load affecting initial view angles
  • Fixed being able to break scripted_sequence by +using friendly NPCs to make them follow player #200 (Thanks Oxofemple. for reporting this and FreeSlave for finding the solution)
  • Fixed potential incorrect facing in scripted sequence (Thanks FreeSlave)
  • Made the Linux version link statically to the C++ runtime to help avoid problems when running mods on older systems (Thanks a1ba and FreeSlave)
  • Fixed Egon not stopping its attack animation if the attack button is held down and ammo runs out (Thanks the man)
  • Fixed scientists crashing when speaking fear dialogue when enemy has been removed
  • Disabled fall think function for weapons when the player picks it up to prevent possible double-pickup which removes the weapon and crashes the game
  • Disabled jump sounds while player is frozen (e.g. trigger_camera, trigger_playerfreeze)
  • Fixed node graph code incorrectly flagging node graphs as out of date if an outdated graph exists in a search path other than the mod directory (e.g. a graph in halflife_updated_addon/map/graphs)

Changes in V1.0.0 Beta 014

Bug fixes

  • Correctly save and restore controller and blending variables #175 (Thanks vasiavasiavasia95)
  • Set activity before SetYawSpeed so it has the right activity #176 (Thanks FreeSlave and vasiavasiavasia95)
  • Fixed animation code accessing invalid sequence descriptor (halflife issue #3308) (Thanks FreeSlave)
  • Fixed weapon bits being incorrectly set and checked in HasAnyWeapons #178 (Thanks jay!)
  • Fixed projects with spaces in paths failing to execute post build step #179 (Thanks Shepard)
  • Fixed NPCs not being able to speak scripted sentences while in scripted death #180 (Thanks λλλλλλ)
  • Removed unnecessary semicolons (Thanks Shepard)
  • Updated source file encoding to UTF-8 #183 (Thanks anchurcn)
  • Renamed CWorld::Instance to CWorld::World to avoid conflicting with CBaseEntity::Instance function name
  • Added -flifetime-dse=1 flag to Linux Makefile to disable compiler optimization that removed entity memory zero-initialization, resulting in the game crashing when any entity touches the world #187 (Thanks FreeSlave)
  • Fixed game_player_equip crashing when given a null activator #189
  • Fixed Hornet gun recharging to full ammo after loading a save game #190
  • Fixed explosives that impact the underside of a brush dealing damage to entities on the other side of that brush (halflife issue #3244)
  • Fixed entities with an index greater than 2047 corrupting the client's heap if sent over the network #191

New features

  • Save and restore game_player_equip #188
  • Moved IsFacing function from barney.cpp to h_ai.cpp to help prevent linker errors when copy pasting source file
  • When using impulse 107 to get the name of a texture the texture type (as used in materials.txt) will also be printed
  • Made PM_FindTextureType const correct
  • Added WRITE_FLOAT function corresponding to the client's READ_FLOAT function
  • Set maximum edicts to 2048 in liblist.gam #181

Project changes

  • Added delta.lst to the game installation again (was accidentally removed in the previous beta)
  • Added game icons to the game installation

Changes in V1.0.0 Beta 013

Bug fixes

  • Fixed Room DSP effects not always activating #164 (Thanks Ronin4862)
  • Try to unstuck player after level transition if stuck in the world #165 (Thanks Ronin4862)
  • Fixed MP5 not creating bullet decals half the time (halflife issue #383 and Updated issue #163) (Thanks Ronin4862 and Matthaiks)
  • Fixed Particle man removing more particles than expected #169 (Thanks FreeSlave)
  • Fixed domain errors in func_tank (halflife issue #3303) (Thanks pat and a1batross)
  • Fixed crash while parsing command menu with unsupported custom button (halflife issue #1730)
  • Fixed NPCs being able to speak scripted_sentences while dying #171
  • Fixed tripmines blowing up after loading save game in c1a3d #172 (Thanks λλλλλλ)
  • Fixed game crashing when triggering certain entities on an empty dedicated server with maxplayers 1 (halflife issue #3307)
    • Access world through global
    • Access local player through helper function
    • Removed some obsolete utility functions

Project changes

  • Cleaned up the Linux makefiles to remove obsolete logic and simplify the compilation process
  • Removed use of obsolete register keyword (caused compiler errors when using Clang++)
  • Added support for overriding the compiler used when using the Linux makefiles
  • Fixed the Linux makefiles not working when using Clang++ due to missing -mno-sse compiler flag
  • Added particle man sources to the object list in Linux client Makefile #168 (Thanks FreeSlave)
  • Added game icons for program icon and Steam library icon
  • Use post build event to copy dlls instead of using output directory #167

Note: you will need to clean solution and rebuild to remove remaining references to the old output directory.

Git repository changes

  • Added Github Actions CI configuration file based on Half-Life Unified SDK's version. Continuous Integration provides pre-built binaries for Windows and Linux. (Thanks to JoelTroch for providing the original file and providing the basis for this file)

Github wiki changes

  • Explicitly specified the scope of the projects
  • Added links to TWHL website, Discord server, SDK setup tutorial and Half-Life Updated status thread

Changes in V1.0.0 Beta 012

Bug fixes

  • Fixed func_button "Sparks" spawnflag using wrong origin (halflife issue #3269) (Thanks Descen)
  • Fixed func_rot_button "X Axis" spawnflag also enabling func_button "Sparks" behavior (halflife issue #3270) (Thanks Descen)
  • Fixed second case of incorrect timebase for button sparks (halflife issue #1681)
  • Fixed env_spark transitioning to other maps when it shouldn't (halflife issue #3280) (Thanks Ronin4862)
  • Fixed ServerActivate checking for player entities incorrectly (halflife #3282) (Thanks vasiavasiavasia95)
  • Fixed PM_TraceModel possibly returning uninitialized trace (halflife #3283) (Thanks a1batross)
  • Print error message if trigger_changelevel points to itself
  • Fixed ichthyosaur restarting death sequence on save game load #152 (Thanks Ronin4862)
  • Reset server's client FOV value so loading save games restores FOV correctly with weapon prediction disabled (halflife issue #3044) (Thanks Ronin4862)
  • Commented out fix for #131 to allow players to keep weapons and be given empty exhaustible weapons
  • Fixed players not being given exhaustible weapons when they get the ammo for them #153 (Thanks Ronin4862)
  • Fixed weapon deploy animations caused by lastinv command not working properly #154 (Thanks jay!)
  • Fixed alien controllers facing in non-combat state #155 (Thanks FreeSlave)
  • Fixed scientist voice pitch #156 (Thanks FreeSlave)
  • Cleaned up weapons code a bit (Note: some code has been moved which could break mods, make sure to double check these changes in your mod if you merge them in) #157
  • Fixed tripmine body value being influenced by events from other weapons during deploy #158 (Thanks FreeSlave)
  • Fixed incorrect body values being passed into EV_WeaponAnimation #159 (Thanks FreeSlave)
  • Fixed autoswitch from tripmine to RPG causing wrong animation to play when weapon prediction is off #160
  • Updated smdlexp to use 3DS Max 2023 SDK #149 (Thanks fel1x-developer)
    • Updated to fix configuration issues so both debug and release profiles compile and don't fail when trying to copy the library to the 3DS Max plugins directory
    • Added errors to stop compilation if the library is not built as 64 bit or if it does not use the Unicode character set (required for 3DS Max 2023 plugins)
    • Note: plugin has not been tested. Use this plugin instead: https://knockout.chat/thread/806/1
  • Added keyvalue allow_item_dropping to control whether NPCs can drop items (Opposing Force Updated #72)
  • Refactored env_sound code to use correct data type for room type, don't use goto to control think rate
  • Always send room_type changes to client, set room_type to 0 by default, reset room_type to 0 on map change, save room_type and restore it when loading same map (halflife issues #1144 and #2936)
  • Fixed weapon deploy animations on fast switching with user binds #161 (Thanks FreeSlave)
  • Added fixes from Marphy Black's Half-Life Fact Fixes (Thanks Marphy Black)

Project changes

  • Added fgd/halflife.fgd

Changes in V1.0.0 Beta 011

Bug fixes

  • Fixed node graphs being loaded from search paths other than GAMECONFIG path #145 (properly this time)
  • Fixed node graphs being loaded with a null byte appended #146
  • Fixed "fullupdate" call making a HUD disappear #147 (Thanks SmileyAG)
  • Fixed STL Algorithm Header Errors When Included with Platform.h #148 (Thanks edgarbarney)

Changes in V1.0.0 Beta 010

Bug fixes

  • Fixed Osprey crashing if it has no valid target (halflife issue #3259)
  • Fixed Osprey teleporting to world origin if it isn't moving at all (halflife issue #3260)
  • Fixed Osprey not firing trigger targets (halflife issue #3261)
  • Fixed Osprey engine damage effects showing on wrong engine (halflife issue #3263) (Thanks Hezus)
  • Fixed Apache not firing trigger targets (halflife issue #3262)
  • Fixed Error in ServerCtrl #135 (Thanks fel1x-developer)
  • Pass director stufftext commands to filtered client command function (halflife issue #1497)
  • Fixed RPG sometimes getting stuck unable to reload (halflife issue #3264) (Thanks Ronin4862)
  • Fixed monster_tentacle not interpolating (halflife issue #3228) (Thanks Anton)
  • Fixed node graphs being loaded from search paths other than GAME path #145
  • Fixed momentary_door restarting movement sound repeatedly when moving back to starting position (halflife issue #3265)

Project changes

  • Fixed symlinks to Linux and MacOS builds of SDL2 #137 (Thanks MegaBrutal)
  • Deleted Makefiles and libraries for MacOS X (Half-Life 1 is 32 bit, no longer supported by MacOS) #141 (Thanks fel1x-developer)
  • Upgraded tool projects to use Visual Studio 2019, fixed as many warnings as possible, all tools aside from smdlexp compile, all tools compiled as C++, most tools work as intended #138 (Thanks fel1x-developer for helping with this work)
    • Fixed missing archtypes.h header include #136
    • Updated readme.txt for latest methods installing MFC, smdlexp and SDL2 #140 (Thanks fel1x-developer)
    • Removed obsolete VS6 & makefile project files from tools code #142
    • Removed bsplib.h & bsplib.cpp (redundant) #143

Changes in V1.0.0 Beta 009

Weapons

  • Allow weapons to network data as needed
  • Initialize frametime value so weapon prediction code can use it
  • Fixed chainsaw hornetgun sounds and mostly fixed hornetgun not playing firing animation (halflife issue #556)
  • Fixed Gauss charge sound not always being reset (halflife issue #3188)
  • Show pickup icons in HUD for all weapons (halflife issue #3137)
  • Fixed picking up weapons that give free/regenerating ammo sometimes showing weapon icon as red (halflife issue #3250)
  • Fixed hand grenades staying primed when switching away or dropping the weapon (halflife issue #3251)
  • Don't give player exhaustible weapon if it has no ammo left #131
  • Applied Opposing Force weapon prediction timing fix to Half-Life (halflife issue #3252)
  • Fixed event code crashing if weapon prediction is disabled #132
  • Automatically switch away from exhaustible weapons that have no ammo left #133
  • Fixed controlling a func_tank with empty weapon deploying invisible weapon when stopping control #134

Bug fixes

  • Fixed hornets crashing the game if they hit you after a level transition (halflife issue #1598)
  • Fixed UTIL_IsServer returning inverted value #130 (Thanks tmp64)
  • Fixed m_rawinput changes not taking effect if a new map has started and less time has passed than on any previous map or if weapon prediction is disabled (halflife issue #3255)
  • Fixed FL_FAKECLIENT flag being cleared in some places (halflife issue #3256)
  • Fixed Osprey not interpolating (halflife issue #3228) (Thanks Hezus)

Project changes

  • Rewrote the installation and packing scripts to use C#

Changes in V1.0.0 Beta 008

Bug fixes

  • Fixed crowbar playing back swing events twice sometimes (halflife issue #3230)
  • Fixed weapon empty sound playing twice (halflife issue #3231)
  • Fixed Gauss sound not stopping when players are not in the PAS (halflife issue #3233)
  • Fixed command menu text not being localized (halflife issue #2387)
  • Fixed localization function cutting off text (halflife issue #2608)
  • Fixed chat text sometimes using the wrong color (halflife issue #3240)
  • Fixed status bar accepting out of range indices (halflife issue #3242)
  • Fixed explosions going through walls in certain cases (halflife issue #3244)
  • Fixed tripmine beams not using correctly start position sometimes (halflife issue #1670) (Thanks vasiavasiavasia95)
  • Fixed trip mine laser beam duplicating after going back and forth through level changes (halflife issue #3245) (Thanks vasiavasiavasia95)

UX improvements

  • Print the "SayText" messages instantly in the console (halflife issue #1440)

Changes in V1.0.0 Beta 007

Bug fixes

  • Fixed cycler_sprite not saving #43
  • Fixed rpg reload reading uninitialized variable #42
  • Fixed RPG client prediction results stored in wrong pointer #67 (Thanks malortie)
  • Fixed crossbow fire on empty sequence not playing #68 (Thanks malortie)
  • Fixed glock fire on empty sequence not playing #70 (Thanks malortie)
  • Fixed func_rotating not reporting keyvalue spawnorigin as handled #72
  • Fixed infodecal not reporting keyvalue texture as handled #73
  • Fixed beam attachment invalidated on restore #74 (Thanks malortie)
  • Fixed Snark movetype being changed unconditionally (halflife issue #3175)
  • Fixed Human Grunt checking enemy incorrectly in CheckMeleeAttack1 (halflife issue #3176)
  • Fixed CTalkMonster::RunTask not properly initializing variable (halflife issue #3177)
  • Fixed speaker entity not handling invalid preset values correctly (halflife issue #3178)
  • Reserved enough entvars for all weapons + local player in client weapon prediction code #97
  • Fixed crowbar not showing in weapon list if there are empty weapon slots with a lower id (halflife #3181)
  • Fixed invalidated linked entities in node graph #106 (Thanks zaklaus)
  • Fixed default implementation of HasTarget not checking the right variable #109 (Thanks malortie)
  • Implemented particle manager in client library #122
    • This change fixes halflife issue #2196 by embedding the particle manager in the client library. It also fixes compatibility issues caused by optimizations applied to the Vector type.
    • Reworked particle memory management to allow far more particles to be allocated before crashing by running out of memory (previous limit was around 100 particles at the same time, new limit closer to 1 million). Fixes halflife #1447
    • Fixed memory leak in the physics force list: halflife #3213
    • Fixed use-after-free bug that could cause difficult to debug problems in (hopefully) theoretical cases: #3214
    • Optimized some of the code to be more efficient
    • Reworked the CBaseParticle class to use a simpler design
  • Fixed the crowbar damage always being calculated halved (halflife issue #1600 (Thanks YaLTeR)
  • Fixed packing script creating empty directory in hd directory #120
  • Fixed V_CalcBob not initializing static variables #126
  • Fixed tripmine viewmodel having wrong body on first pickup #129
  • Fixed models stuttering due to client side interpolation (halflife issue #3228) (Thanks Uncle Mike, and vasiavasiavasia95 and Bacontsu for bringing this fix to my attention)
  • Fixed player physics hull sizes not initializing properly (halflife issue #3229) (Thanks vasiavasiavasia95)

Project changes

  • Rewrote installation scripts to use PowerShell
  • Enabled multiprocessor compilation for Windows builds #39
  • Changed default toolset to non-XP compatible one and set Windows SDK version to W10 #44
  • Added new cvar flags added by recent engine updates #46
  • Added new cvar flags for command filtering #121 (Thanks a1batross and vasiavasiavasia95)
  • Set C++ standard to 17 #85
  • Provided access to engine filesystem #86
  • Use engine filesystem to load and save node graph files #87
  • Define and use constants for maximum number of players and weapons #96
  • Added support for saving and restoring 64 bit integers #99
  • Added support for adding 64 weapons #98
  • Added missing tracerCount for EV_HLDM_FireBullets #107 (Thanks malortie)
  • Removed VS2017 projects #118
  • Fixed func_tanks not being usable #125 (Thanks suXinjke)
  • Fixed case sensitivity of OpenGL header inclusion
  • Fixed reworked CGamePlayerEquip::KeyValue method #128

Code cleanup

  • Made event playback functions const correct #41
  • Removed unused skiplocal parameter #38
  • Made CBaseEntity debug setters const correct
  • Made HUD string drawing methods const correct
  • Improved const correctness in engine APIs
  • Removed obsolete preprocessor macro checks #47
  • Cleaned up uses of the node graph global #48
  • Disabled as many Windows.h dependencies as possible #49
  • Removed benchmarking functionality #54
  • Removed game_controls.lib from the client project #55
  • Defined platform-agnostic types for common structures #56
  • Removed obsolete engine APIs related to security modules #57
  • Removed extern C wrappers around functions #58
  • Reworked some uses of platform-specific code to be cross-platform #59
  • Merged platform abstraction headers #53
  • Removed redundant include guards #52
  • Converted all include guards to pragma once #50
  • Removed duplicate interface.h/.cpp files #60
  • Added pragma once to all headers that need it #51
  • Use snprintf and vsnprintf everywhere instead of _snprintf and _vsnprintf #61
  • Use WIN32 preprocessor macro instead of _WIN32 #62
  • Removed unnecessary _cdecl in function declarations #63
  • Removed useless try-catch statement in command menu parsing code #64
  • Reworked some uses of platform-specific code to be cross-platform #59
  • Save FIELD_BOOLEAN as byte array #65
  • Reworked operator new and delete overloads to allocate memory directly #71
  • Removed identical line in conditional statement #75 (Thanks malortie)
  • Removed unused files (Thanks malortie):
    • AI_BaseNPC_Schedule.cpp #77
    • glock.cpp #78
    • mpstubb.cpp #80
    • MOTD.cpp #81
    • scoreboard.cpp #82
  • Removed DMC and Ricochet VS 2017 projects to match removal of VS 2019 projects #79 (Thanks malortie)
  • Fixed invalid conversions between bool and other types #69
  • Reworked all uses of int and int-like types to use bool when the value is boolean #83
  • Enabled certain Clang-tidy checks #66
  • Formatted all files and added clang-format configuration file #84
  • Removed unused types #88
  • Removed unused globals and duplicate global variable forward declarations #89
  • Removed obsolete interface APIs #90
  • Overhauled vector types to use constexpr, simplify code #92
  • Fixed or silence compiler warnings #91
  • Removed unused VGUI1 code in vgui_int.cpp #93
  • Reworked CSave & CRestore to eliminate null data pointers #94
  • Reworked mouse thread code to use standard types #95
  • Replaced stackalloc-based saytext code with fixed-size buffer to avoid using alloca (halflife issue #3179)
  • Use sound array macros (Thanks malortie):
  • Removed unused variables in the client side event playback code #105 (Thanks malortie)
  • Renamed hl_wpn_glock.cpp to glock.cpp #108 (Thanks malortie and JoelTroch for the Linux changes related to this)
  • Removed preprocessor checks for other games (Thanks malortie):
    • Team Fortress Classic #110
    • Condition Zero #111
    • Counter-Strike #112
    • Day Of Defeat #113
    • Blue Shift #114
    • Deathmatch Classic and Threewave #115

Changes in V1.0.0 Beta 006

  • Reverted "Fixed multisource having off-by-one error in trigger handling" (halflife issue [[#1737|ValveSoftware/halflife#1737]]) to avoid edge cases where entities triggering the multisource use a delayed trigger which is not supported by fixed code
  • Fixed func_breakable keyvalue "explosion" not working (#24) (Thanks ArroganceJustified)
  • Fixed saytext message handling potentially causing buffer overflow (halflife issue [[#3095|ValveSoftware/halflife#3095]])
  • Implemented skill cvars sk_plr_hornet_dmg1/2/3 for player Hornet gun damage
  • Fixed memory leak in VGUI1 image loading code (halflife issue [[#3101|ValveSoftware/halflife#3101]])
  • Fixed underwater breathing sounds playing when standing in shallow water (halflife issue [[#3110|ValveSoftware/halflife#3110]])
  • Fixed camera not being consistently centered when raw mouse input is enabled (Thanks IntriguingTiles) #32
  • Update Linux makefiles to use g++ instead of gcc to compile and link all code (Thanks MegaBrutal for bringing this to my attention) #33
  • Moved DMC & Ricochet source code and projects to their own repositories. See About page for more information: https://github.com/SamVanheer/halflife-updated/wiki/About
  • Deleted DMC & Ricochet fgds
  • Removed DMC & Ricochet Makefiles

Changes in V1.0.0 Beta 005

  • Fixed Egon flare sprite not showing (halflife issue [[#3066|ValveSoftware/halflife#3066]])
  • Fixed crosshair remaining present when starting new game (halflife issue [[#692|ValveSoftware/halflife#692]])
  • Ensure CBaseEntity::Instance(entvars_t*) does not cause crashes when given null pointer (halflife issue [[#3056|ValveSoftware/halflife#3056]])
  • Moved DMC & Ricochet projects to their own solution files. These projects were updated to work with VS2017 and VS2019 but will not receive any further changes.
  • Made Half-Life client dll depend on server dll to ensure server is built when launching a client debug session
  • Use RGB_YELLOWISH for health vertical bar & TFC concussion effect (was previously hardcoded to the same color)
  • Fixed incorrect idle time values for RPG fidget, satchel & snark grenade deploy animations (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Fixed hand grenade not playing deploy animation after finishing a throw (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Switch to no weapon if retired weapon could not be switched from (halflife issue [[#2495|ValveSoftware/halflife#2495]])
  • Ensured PrimaryAmmoIndex & SecondaryAmmoIndex return valid values (halflife issue [[#3073|ValveSoftware/halflife#3073]])
  • Increased size of Health message to 2 to allow sending of signed short values (halflife issue [[#2149|ValveSoftware/halflife#2149]])
  • Increased number of digits allowed in health value to 5 (halflife issue [[#2149|ValveSoftware/halflife#2149]])
  • Fixed Gargantua stomp attack being framerate-dependent (halflife issue [[#2876|ValveSoftware/halflife#2876]])
  • Fixed trigger_camera rotation speed being framerate-dependent (halflife issue [[#2924|ValveSoftware/halflife#2924]])
  • Fixed flashlight icon not restoring properly on save game load (halflife issue [[#388|ValveSoftware/halflife#388]])
  • Set current time to time specified in save game data when saving & restoring entities (halflife issue [[#3065|ValveSoftware/halflife#3065]])
  • Initialize ItemInfoArray & AmmoInfoArray on the client (halflife issue [[#3071|ValveSoftware/halflife#3071]])
  • Use cached item info for client predicted reloads
  • Fixed gauss gun beams going in the wrong direction when player is viewing themselves through a camera (halflife issue [[#1744|ValveSoftware/halflife#1744]])
  • Fixed local player model using wrong pitch angles when seen through another entity (halflife issue [[#3075|ValveSoftware/halflife#3075]])
  • Fixed buttons not sparking in multiplayer (halflife issue [[#1681|ValveSoftware/halflife#1681]])
  • Fixed incorrect check for monster gag spawnflag (halflife issue [[#3076|ValveSoftware/halflife#3076]])
  • Fixed func_plat trigger accessing freed memory if platform is removed (halflife issue [[#1725|ValveSoftware/halflife#1725]])
  • Fixed multisource having off-by-one error in trigger handling (halflife issue [[#1737|ValveSoftware/halflife#1737]])
  • Fixed GetHullBounds & HUD_GetHullBounds using wrong syntax to copy vectors (halflife issue [[#1703|ValveSoftware/halflife#1703]])
  • Fixed CreateBaseline using player bounds parameters incorrectly (halflife issue [[#3078|ValveSoftware/halflife#3078]])
  • Fixed camera.h include guard (halflife issue [[#3035|ValveSoftware/halflife#3035]])
  • Added new variables to player_info_t struct (Thanks ArroganceJustified)
  • Linux compilation fixes (Thanks Shepard and LogicAndTrick)
  • Made IsFacing non-static so it can be used in other source files
  • Fixed HD Revolver model not playing the reload sound (halflife issue [[2351|ValveSoftware/halflife#2351]])
  • Added delta.lst and the resource directory to the game installation

Code cleanup

  • Ensured entity destructors are called
  • Removed void from functions taking no arguments (clang-tidy modernize-redundant-void-arg)
  • Used override specifier where needed (clang-tidy modernize-use-override) (Thanks LogicAndTrick for catching some missing ones)
  • Explicitly cast result of offsetof to int to silence warnings
  • Removed unnecessary returns and semicolons
  • Defined NOMINMAX to disable min & max macros defined in Windows header
  • Moved FindEntityForward to util.h/.cpp & rename to UTIL_FindEntityForward
  • Refactored ClientCommand to acquire the player pointer only once
  • Refactored Vector code to remove use of vec3_t
  • Removed duplicate Vector definitions in util_vector.h
  • Removed shared_vec3_origin
  • Removed unused vector functions
  • Consolidated math header includes
  • Removed duplicate PI constant definitions
  • Clean up animation.cpp header includes
  • Moved primitive types aliases to Platform.h when possible
  • Properly defined model_s & model_t in pm_defs.h to silence Intellisense errors
  • Added #pragma once to mathlib header
  • Made Vector constructors constexpr
  • Refactored g_vecZero & vec3_origin into constexpr constants
  • Made R_TempSprite dir parameter const
  • Made hull vectors constexpr constants
  • Removed duplicate player view constants
  • Defined constant for dead player view
  • Cleaned up magic numbers to use constants
  • Removed duplicate weapon animation enums
  • Consolidated damage constants
  • Removed duplicate Egon constants, move constants to weapons.h
  • Removed duplicate vector cone constants
  • Removed duplicate SND_CHANGE_PITCH constant
  • Moved ARRAYSIZE definition to Platform.h
  • Moved duplicated weapons code into weapons_shared.cpp
  • Moved clamp macro to Platform.h
  • Moved FNullEnt(CBaseEntity*) to cbase.h
  • Removed duplicate function declarations in player.cpp
  • Added common & engine headers to projects
  • Removed hud_iface.h (redundant)
  • Removed duplicate FTENT_FADEOUT constant
  • Removed VGUI1 server browser code (obsolete)
  • Removed unused soundsystem, console panel, control config panel files
  • Removed old project files & module definition files
  • Removed duplicate event function declarations, use event_args_t to ensure Intellisense can link declarations and definitions
  • Removed some double semicolons (Thanks LogicAndTrick)

Changes in V1.0.0 Beta 004

  • Added the option to change the default field of view to the Multiplayer Advanced dialog
  • Updated delta.lst to use latest one from vanilla Half-Life (includes spectator variables) (halflife issue [[#3062|ValveSoftware/halflife#3062]])
  • Use correct number of bits for iuser2 to ensure spectating player with index 32 works correctly (halflife issue [[#826|ValveSoftware/halflife#826]])
  • Fixed sprite attachment bug causing sprites to appear in seemingly random locations (halflife issue [[#3058|ValveSoftware/halflife#3058]])
  • Fixed monsters being resurrected if triggered while dying (halflife issue [[#3061|ValveSoftware/halflife#3061]])
  • Made default_fov cvar archived (halflife issue [[#2237|ValveSoftware/halflife#2237]])
  • Fixed Tripmine & Python having wrong bodies sometimes when weapon prediction is enabled
  • Reset flashlight HUD status on save game load (halflife issue [[#388|ValveSoftware/halflife#388]])
  • Fixed ammo HUD drawing last weapon ammo if player has all weapons stripped (halflife issue [[#3063|ValveSoftware/halflife#3063]])
  • Fixed train HUD not restoring (halflife issue [[#3064|ValveSoftware/halflife#3064]])
  • Changed game directory name to halflife_updated

Changes in V1.0.0 Beta 003

  • Made scientists aware of carcasses, meat and garbage so they can comment on it (halflife issue [[#2982|ValveSoftware/halflife#2982]]) (Thanks NongBenz)
  • Fixed Human Grunt shotgun damage not using correct skill values (halflife issue [[#3046|ValveSoftware/halflife#3046]])
  • Ensured flashlight sprites have enough space between them and death notice text (halflife issue [[#1047|ValveSoftware/halflife#1047]])
  • Removed all uses of pev->fov to simplify changing fov, and always let the server set the fov to ensure it restores correctly (halflife issue [[#3044|ValveSoftware/halflife#3044]])
  • Removed m_fInZoom from Python & Crossbow to ensure zoom state restores correctly (halflife issue [[#3045|ValveSoftware/halflife#3045]])
  • Made cheat protected commands give, fov and impulse check the value of sv_cheats on demand instead of caching the value, enabling the use of these cheats without having to restart the map (halflife issue [[#2511|ValveSoftware/halflife#2511]])
  • Fixed Crowbar using wrong time base for swing think (halflife issue [[#2296|ValveSoftware/halflife#2296]])
  • Refactored user messages globals to remove duplicate forward declarations
  • Added new engine functions added in the latest engine updates

Changes in V1.0.0 Beta 002

  • Re-implemented view roll (halflife issue [[#1544|ValveSoftware/halflife#1544]])
    • Cvars cl_rollangle (maximum roll angle) and cl_rollspeed (roll speed) control this feature, and can be changed in the Multiplayer Advanced dialog
  • Re-implemented view model tilt (halflife issue [[#1544|ValveSoftware/halflife#1544]])
    • Cvar cl_bobtilt controls this feature (default off), and can be changed in the Multiplayer Advanced dialog
  • Fixed Egon gun beam colors being too bright (halflife issue [[#3033|ValveSoftware/halflife#3033]])

Changes in V1.0.0 Beta 001

Project changes:

  • Added project files for Visual Studio 2017 and Visual Studio 2019
  • Removed project files for Visual Studio 2010

Fixes that were added by Valve to the game but not the SDK:

Fixes that have been reported but not yet fixed in the original game:

  • Updated codebase to use correct functions to allow compilation with newer versions of Visual Studio
  • Added null check to bullsquid spit attack animation event to prevent crash if enemy pointer is cleared between animation start and animation event occurrence (halflife issue [[#2834|ValveSoftware/halflife#2834]])
  • Fixed a bug that could cause a crash if an RPG weapon were removed from a player while a rocket fired from it is in flight (halflife issue [[#1719|ValveSoftware/halflife#1719]])
  • Fixed chainsaw crowbar effect when hitting corpse (halflife issue [[#2590|ValveSoftware/halflife#2590]])
  • Fixed server not staying in sync with client when handling weapon attack times (halflife issue [[#1621|ValveSoftware/halflife#1621]])
  • Fixed m_rawinput 1 getting mouse stuck in box (halflife issue [[#1377|ValveSoftware/halflife#1377]])
  • Fixed gauss gun beams having wrong color and brightness compared to WON (halflife issue [[#2865|ValveSoftware/halflife#2865]])
  • Fixed mp5 autoswitching when primary ammo is depleted, even if player still has secondary ammo (halflife issue [[#3001|ValveSoftware/halflife#3001]])
  • Always return m_iSecondaryAmmoType from CBasePlayerWeapon::SecondaryAmmoIndex (halflife issue [[#3029|ValveSoftware/halflife#3029]])
  • Stop controlling func_tank on disconnect (prevents crashes) (halflife issue [[#2594|ValveSoftware/halflife#2594]])
  • Fixed egon creating fake beam when holding secondary attack key (halflife issue [[#2612|ValveSoftware/halflife#2612]])
  • Fixed Egon looping fire sound playing twice sometimes (halflife issue [[#1750|ValveSoftware/halflife#1750]])
  • Fixed weapon prediction allowing multiple reload actions instead of just one (halflife issue [[#2301|ValveSoftware/halflife#2301]])
  • Use MAX_WEAPONS for array of weapons (halflife issue [[#3030|ValveSoftware/halflife#3030]])
  • The player view entity is now restored after loading a save game, which allows trigger_camera entities to work properly if you save while they're active (halflife issue [[#3031|ValveSoftware/halflife#3031]])
  • Fixed Python glitching animation when holding primary attack with empty magazine (halflife issue [[3028|ValveSoftware/halflife#3028]])
  • Fixed weapon being left behind when picking up ammo from it (halflife issue [[#3027|ValveSoftware/halflife#3027]])
  • Fixed autoaim angles not resetting if autoaim is disabled while aiming at a target (halflife issue [[#966|ValveSoftware/halflife#966]])