Xash3D engine supported movie playback for a long time, but it utilizes Video for Windows API, which has downsides from obviously being closed source and Windows exclusive and requiring the user to install third-party software. It also sometimes just outright doesn't work for an unknown reason.
This time I have implemented video player using ffmpeg to the Xash3D FWGS engine, which actually was in the plan for a whopping eight years already.
The obvious improvement of using ffmpeg is a wide variety of codecs. It successfully worked with movie intros from Half-Life, Opposing Force and Paranoia mod.
But very VFW specific internal engine logic, bites me. Instead of normal playback, the engine tracks frames by itself and tries to seek over the movie stream. Seeking itself is harmless, but it makes playback very suboptimal, and some frames may be lost, which doesn't make the decoder happy. A random Bink file my friend found for me works, but it absolutely fails on VP9 streams, from refusing playing them at all or just showing random artifacts.
Xash3D engine supported movie playback for a long time, but it utilizes Video for Windows API, which has downsides from obviously being closed source and Windows exclusive and requiring the user to install third-party software. It also sometimes just outright doesn't work for an unknown reason.
A few months ago, I wrote a simple program. It scans game servers list and reports anything suspicious, unexpected or if someone just tries to flood the list with curses or shady links. ;)
Despite the protocol isn't really defined, I decided to make validator especially strict. No extensions allowed! Or so I thought...
Unless our friends who maintain engine fork on old unsupported protocol suddenly decided to add an extension. And it broke validator. And validator automatically banned everyone who used that fork.
On this April Fools' Day, I found myself a fool.
A few months ago, I wrote a simple program. It scans game servers list and reports anything suspicious, unexpected or if someone just tries to flood the list with curses or shady links. ;)
Of course, I wouldn't be myself if I wasn't tried to run this mod under Xash. Moreover, mod author released a Linux port, so I don't even need to reboot to Windows or play with Wine.
First run was... almost fine if there wasn't a RED RECTANGLE OVER MY WHOLE SCREEN. I know that this can happen because of invalid HUD sprites drawing. My beloved GDB showed me a NULL pointer instead of sprite model pointer due to invalid HUD sprite index.
So I checked hud.txt, it was fine. I checked how mod runs under GoldSrc, it was fine. I ran GoldSrc under GDB and invalid index was there as well.
So I fired up Ghidra, found a function that's used to set HUD sprite model, and found out that it checks for valid index before sprite model pointer is set. I implemented similar check in Xash and BIG RED RECTANGLE was gone.
=================
But the red rectangle wasn't the only bug I fixed this night. This mod loves to showcase custom animations and cool particle effects and dlights. One of such features: our character legs in first person, was just gone.
I switched back to Ghidra and GoldSrc I left under GDB, traced all "hl1mmod_visuals_drawlegs" variable checks and after quick GDB session I found it's unusual technique to draw these legs: it's third person mode! But not actually.
The engine, before adding our player to the render list, checks if we're in third person mode. So mod author added a temporary variable, that's set to true at the beginning of each frame, and depending on its value in CL_IsThirdPerson it "lies" to the engine that we're in third person mode so our player model should be drawn but in the AddEntity call, it checks if engine was tricked and sets the variable to zero, so further Is Third Person checks are actually false.
In Xash the order of calling AddEntity and IsThirdPerson was swapped. I swapped it back and removed an additional check in the renderer, and was able to see the legs.
Thus, the current "master" version of Xash3D FWGS now runs this mod almost perfectly.
Half-Life: MMod was released just few hours ago.
Of course, I wouldn't be myself if I wasn't tried to run this mod under Xash. Moreover, mod author released a Linux port, so I don't even need to reboot to Windows or play with Wine.
Announcing clean-er re-implementation of original Valve's GUI library from Half-Life 1 under the work title `freevgui`. I'm working on it since last year in my free time of free time of free time. :)
This implementation is intended to be used within Xash3D FWGS as a drop-in FOSS and cross-platform alternative to the proprietary vgui.dll library, but potentially can be used as a replacement in Half-Life mods as well, as it's both API and ABI compatible.
Unlike Nagist's implementation, this library specifically hasn't been derived from HLSDK code, and every line of code has been carefully restored from DWARF debug information and decompilation using Ghidra.
Source code will be published as soon as I finish implementing the controls library and when I decide on licensing. For now, it has dependency on 3-clause BSD licensed C++ templates library, and C utilities library from Xash3D FWGS which is GPLv2 licensed. I'll probably drop GPL dependency to allow it included in Half-Life mods as a bug fixed replacement of original vgui code, when it will have bug fixes in the first place.
Announcing clean-er re-implementation of original Valve's GUI library from Half-Life 1 under the work title `freevgui`. I'm working on it since last year in my free time of free time of free time. :)
So apparently you can now play Half-Life 1 with ray tracing, which isn't exactly the version I waited for with a true Vulkan renderer, but hey, it's an incredible job by a very skilled developer.
And also it's a xash3d-fwgs, I'm glad to see what people can do with our open source engine.
So apparently you can now play Half-Life 1 with ray tracing, which isn't exactly the version I waited for with a true Vulkan renderer, but hey, it's an incredible job by a very skilled developer.
And also it's a xash3d-fwgs, I'm glad to see what people can do with our open source engine.
School building recreation demo, made in PrimeXT & Xash3D FWGS. As author says:
"This is a school project, required for admission to the 9th grade exams. Every real place has been thoroughly transferred to the game, using tons of photographic materials. Demo shows pretty impressive graphic capabilities of Xash3D FWGS engine with PrimeXT toolkit. "
For an unfinished school project, this really looks nice. Detail level is fine, although corridors feel a bit lifeless. But high chances they are empty IRL too, without kids and teachers roaming around. :)
In old Xash fork we had a feature, which helps on debugging mods and experiment with entities called enttools.
This is basically an analogue of Source's ent_create & ent_fire, but it also has a function to query entity information back to client.
Some of our users combined it with cvar expansion extension and customizable touchscreen controls to have very basic and generic sandbox mode for every game.
Merged enttools patch to new engine branch.
In old Xash fork we had a feature, which helps on debugging mods and experiment with entities called enttools.