ValveSoftware / halflife

Half-Life 1 engine based games
Other
3.74k stars 631 forks source link

[Opposing Force] Engine not properly updated to use new renderer #3358

Open CptFoxer opened 1 year ago

CptFoxer commented 1 year ago

While porting over a custom model from Sven Co-op into Opposing Force I came across an issue where animations would not blend properly.

The issue appears to be caused by an old version of the renderer that stops bones from being copied when it encounters Bip01 Spine: https://github.com/SamVanheer/Half-Life-Tools-Backup/blame/074c4325c78773610d64871803abdf73c5376936/src/cl_dll/StudioModelRenderer.cpp#L898-L904 The issue is not present with the new renderer: https://github.com/ValveSoftware/halflife/blob/c7240b965743a53a29491dd49320c88eecf6257b/cl_dll/StudioModelRenderer.cpp#L935-L951

Solokiller mentions that Opposing Force on Windows uses the old renderer, while on Linux it uses the new renderer in this thread: https://knockout.chat/thread/51835/1#post-1882240 As well as some additional information: https://knockout.chat/thread/51835/2#post-1883018

@SamVanheer should be able to offer a more in-depth explanation of the issues than I possibly could.

SamVanheer commented 1 year ago

Copying my comment from the forums:

Opposing Force generally seems to be a mix of different SDK versions. It has HUD_DirectorEvent from SDK 2.2: https://github.com/twhl-community/HalfLifeSDKHistory/blob/22d301d130fa0d97d62d74721b60cc3d8a6e80dd/cl_dll/cdll_int.cpp#L275-L286

Which was changed to HUD_DirectorMessage in SDK 2.3: https://github.com/twhl-community/HalfLifeSDKHistory/blob/45df836c0edd026c8fd79ccb9bb0f3180a58325a/cl_dll/cdll_int.cpp#L273-L284

And it was changed slightly in the Github SDK: https://github.com/twhl-community/HalfLifeSDKHistory/blob/5ceb227e702b3c952cdc8c774a4709bcbd794dbd/cl_dll/cdll_int.cpp#L292-L305

And of course the studio renderer which is completely missing. I'm guessing they forgot to add the files to the Visual Studio project but then when they made the Linux version they copied the Makefile from Half-Life and added Opposing Force files to it.

The studio renderer is pretty much isolated in SDK 2.3 so it won't fail to compile if it's missing.

The Github SDK does reference it in function "F": https://github.com/twhl-community/HalfLifeSDKHistory/blob/5ceb227e702b3c952cdc8c774a4709bcbd794dbd/cl_dll/cdll_int.cpp#L397

Which is also missing from Opposing Force.

The Glock was also using the wrong version, SDK 2.0 added weapon prediction and added a new implementation in hl_wpn_glock.cpp which replaced glock.cpp. That's already on the issue tracker: https://github.com/ValveSoftware/halflife/issues/856#issuecomment-776966600

This is probably also the reason why the Barnacle Grapple makes ladder sounds and why the CTF long jump module doesn't work; they copied over the HL version of the player movement code which erased that functionality.

These issues are related to that: https://github.com/ValveSoftware/halflife/issues/1025 https://github.com/ValveSoftware/halflife/issues/1857 https://github.com/ValveSoftware/halflife/issues/2103

It should be possible to fix issues like these by checking the changes that were made in each SDK update: https://github.com/twhl-community/HalfLifeSDKHistory/commits/multiplayer/

But i should note that these are only the public SDKs, they're missing changes that have been made to the games since then.