So I have been having fun with Claude and old barely maintained source ports.
The victim: OpenJK, the community engine for Star Wars Jedi Knight II: Jedi Outcast and Jedi Academy. It’s solid and keeps the games running, but it deliberately stays close to the 2002/2003 originals. I wanted to see how far I could push it toward what a game made today would have, while keeping the original look as the default. About five weeks later, my fork (OpenJK Shin) has a 1.0.0 release for Windows and Linux.
How it worked: I set direction, played and tested; Claude (Anthropic’s model, running as a coding agent) did the code, the build work and most of the debugging. It drove the games itself through config scripts and the engine’s own screenshot command, read the logs, compared screenshots and measured frame times. I mostly answered “yes, do that”, “no, keep the original art” and “that sounds off” after listening with headphones.
What changed, roughly:
Display: native resolution and refresh rate, real widescreen/ultrawide (more view to the sides, HUD and menus not stretched), and fixes so the game behaves the same at any frame rate (footsteps, view bob).
A Vulkan renderer for single player, with a fallback to OpenGL. On top of it, optional effects: SSAO, bloom, SMAA, light shafts, eye adaptation, and per-pixel saber/blaster light.
Shadows: soft shadow maps, and vendor-neutral ray tracing (Khronos ray query, so AMD, NVIDIA and Intel alike). Exact character shadows, sabers and explosions no longer light through walls, and duelists cast shadows from their own blades. Off/Medium/High in the menu. On my RX 7800 XT at 3440x1440, Medium is actually cheaper than the shadow maps.
Sound: HRTF for headphones, room reverb computed from the level geometry (so it works in mods), 128 voices instead of 32, playback at the device’s native rate, and a fix for a cinematic crackle.
Online: smoother interpolation on uneven connections, and lag compensation on servers running it.
Jedi Outcast multiplayer (1.04) on the modern engine, which OpenJK doesn’t do.
A few fixes sent upstream as pull requests.
Fun bugs along the way:
Blaster shots crashed the GPU (“device lost”). The cause was a scratch buffer freed while acceleration-structure builds already recorded in the same command buffer were still going to use it. Corrupt structures, and the first rays of a dynamic light through them hung the card. Freeing it two frames later fixed it.
Performance tests that measured nothing. They kept reading exactly 250 fps, which turned out to be the engine’s own frame cap.
The first Linux build only ran on Arch, because it needed glibc 2.43. The release is now built in an Ubuntu 22.04 container and runs on glibc 2.34 or newer.
Caveats:
The Windows build is cross-compiled with MinGW and has only been tested under Wine so far. Reports from real Windows machines are very welcome.
You need your own copy of the games; no game data is included.
Everything is GPLv2, like the original release.
Release and README: Release OpenJK Shin 1.0.0 · Rugaliz/OpenJK-Shin · GitHub
Happy to answer questions about the engine side or about what working this way was actually like.
Better yet give me fun suggestion on possible rendering improvements!