Half-Life Updated and Unified SDK released
Half-Life Updated, Half-Life: Opposing Force Updated, Half-Life: Blue Shift Updated and the Half-Life Unified SDK have been released:
Half-Life Updated:
https://github.com/twhl-community/halflife-updated/releases/tag/HLU-V1.0.0
Half-Life: Opposing Force Updated:
https://github.com/twhl-community/halflife-op4-updated/releases/tag/HLOP4U-V1.0.0
Half-Life: Blue Shift Updated:
https://github.com/twhl-community/halflife-bs-updated/releases/tag/HLBSU-V1.0.0
Half-Life Unified SDK:
https://github.com/twhl-community/halflife-unified-sdk/releases/tag/UNIFIED-V1.0.0
Notable changes for all games:
- Updated build and installation instructions
- Disabled GCC optimization that prevents mod dlls from unloading after engine calls dlclose on Linux
- Implemented Valve game directory detection check to prevent incorrect use of mod dlls
- Fixed third party libraries possibly not being linked to when building Linux server dll
Notable changes for the Unified SDK:
- Updated nonfunctional scripting system and networking system branches to a more recent version of the SDK
- Added note about adding HL Uplink maps to packages
- Reverted "Boost volume to match original engine" change to fix audio problems related to volume being too high
- Updated documentation to explain FastDL behavior
Valve game directory detection
Mods made with these SDKs will no longer run when used to replace the game dlls of Valve games. This check was added for a couple of reasons:
- VAC may detect the modified dlls and ban you
- Players might think Half-Life Updated refers to an updated version of the game that can replace original dlls (it can't, it's an updated SDK and is not compatible with original game dlls at the network protocol level)
I wanted to add a check to detect the use of incompatible server and client dlls to prevent cases where this happens by accident. There have been cases where people tried to make a mod and accidentally combined an updated server dll with the original Half-Life client dll which won't work.
Unfortunately there is no way to properly add compatibility checking that has no edge cases. It should really be implemented in the engine with a way to report which mod a dll belongs to and which version it is, which is a fairly complicated thing to implement.
VAC currently does not appear to ban players using modified dlls but that can always change in the future. I'm accounting for the possibility that VAC is made stricter for Valve games only and not mods and thus preventing players from getting VAC banned in error.
The check is easily disabled in code so there is nothing that can be done to prevent people from making custom builds but you are doing so at your own risk.
FastDL behavior when using the Unified SDK
I tested what happens when FastDL (HTTP downloads using the
sv_downloadurl
cvar) is used with the Unified SDK. Since the Unified SDK generates and precaches a JSON file every time a map is loaded it's required to download this file every time.
I assumed this would require special handling on the web server side but it turns out the engine's behavior and the code written for the JSON file is already working perfectly fine.
The client will download the file when it reconnects to the game server after downloading all files from the FastDL server. To avoid a bogus error message printed in the console the web server should have a dummy file which the client will download but the file is ignored and deleted automatically by the client when it reconnects.
Notably clients will only ever use FastDL to download files once per map per server per session. This means that if you launch the game, connect to a server using FastDL running, say,
crossfire
with custom content you'll download that content with FastDL, but if the server then changes which custom content it uses for that map and reloads the map you'll download that content from the game server directly instead.
This continues to be the case until you either restart the game or use the
httpstop
console command to clear the list of maps which have been downloaded using FastDL.
The documentation has been updated to clarify this behavior.
I've sorted out the project licenses as best I can.
The main repository continues to use only the HL SDK license since the MIT license permits sale of work which isn't really compatible there. It's hard to separate the parts that fall under the MIT license since pretty much all of it is specific to this engine so i've left it as-is to keep it simple.
The assets repository uses both the MIT and HL SDK licenses, with the readme specifying which directories fall under the HL SDK license based on whether they contain anything originally made by Valve.
The C# tools repository is all MIT licensed since it doesn't contain Valve's code. The Map Decompiler is GPL V2-only licensed since it's based on the Quake 3 SDK which also has that license.
In effect this means you can use all 4 projects to make your own mods, use the assets in your mod and distribute them. As long as you abide by the Half-Life SDK license you're fine.
Remaining work to be done
- MIT license all community-written Updated & Unified SDK code (done)
- Move projects to twhl-community organization (done)
- Add any required documentation on development process that is currently missing (done)
And that's it! All work for V1.0.0 is done.
I stated before that I was going to wait until Valve updated the SDK to integrate their changes. I decided to go ahead with V1.0.0's release because it looks like Valve will take a while to continue their work on Half-Life 1.
There has been no visible progress on any Half-Life 1 games since December 22. I assume this is because of the holidays and because they're working to update all games at the same time and avoid destabilizing the public versions, but this is based purely on assumptions.
There are still work-in-progress changes in the public build such as missing localization changes and of course the SDK update which they
announced so I'd expect to see some updates at some point in the future. It would be helpful to know what's going on but I don't know where we can ask for information about this so that's all I can say.
Even without the SDK update these SDKs will work with the anniversary version. You won't get the changes and fixes that need to be made in the SDK itself but you can run mods just like you can under the
steam_legacy
branch.
I've made Github issues tracking work that needs doing to integrate the SDK update as well as adapt the Unified SDK to work with the anniversary version (the map upgrades need reviewing since some maps were changed). Hopefully Valve released the SDK update soon so this process can be completed.
I've also added a list of contributors to the project README files. If you contributed to these projects and your name isn't listed (or is using the wrong name) then be sure to let us know so we can correct that.
With the release of V1.0.0 all 5 projects (including the Map Decompiler) have been moved to the
twhl-community Github organization. It is now up to the community to continue the development of these projects.
Make sure to update links to the repositories to point to the new locations! Especially Git repository links since clients may not accept redirects!
I've provided as much information as I can in the documentation and issues to help with this process. I hope that people can integrate the SDK update when it arrives and continue to update the projects as needed.
In the Unified SDK's case V1.0.0 is more of an initial version to start with; I fully expect people to continue expanding on it and change things as needed.
Special thanks to malortie for helping to develop the Unified SDK. Your help has been invaluable.
That just about wraps up everything. Thanks to everybody who helped make these projects a reality, and I hope people make awesome mods with them!