I am thinking about trying to use local Ai to help preserve some legacy video games:
Savage: The Battle for Newerth
Alien Vs Predator 2: Primal Hunt
Why: I have fond memories of these games at lan parties. Just played both again at a LAN and had a great time. However, both are a pain to get running in Windows 11 and/or Linux.
Goals:
Update the games to include and/or support modern APIs like Vulkan instead of Directx8/9
Update network code so they are easier to host
Package them for easy install and updates
I am not a developer, I have basic coding and scripting(Much more scripting as I work in IT).
I what to figure out the how. I have the following:
PCs with a 9070xt and Intel A770.
2 node Proxmox cluster(version 9) - With 20 cores and 256 GB of RAM with 5TB of SSD storage.
What Ai tools would help me do this?
Should I be looking to use them to port the games from their legacy engines to modern Unreal(I would prefer not) or other engine?
I don’t have a lot of spare time, but would like to contribute. If this is something achievable, I would be open to assisting with other games if my hardware would help with this process.
I didn’t see it mentioned where you said you had the full source code, working build environment, and original gaming engine SDK setup. Those are required before even thinking about a plan for step 1.
I think a more realistic approach is a DOS wrapper on Linux.
KDE Plasma and Dolphin recently integrated Dosbox directly into the UI. So you just “click" and exe, install the container, and it executed the old win16/win32 binary in Dosbox and pipes the output.
I don’t yet know the details for creating a persisted install, like my old MechWarriors 2 installer would want to do.
I would image it’s just making a custom mount for the container. Then it’s a matter of executing the installed binary within that container.
The end result would be you archiving that particular Dosbox version/binary and game install folder in a zip. Then unzip whenever you want to play on a machine that supports Docker/Podman containers.
I think you are jumping to conclusions, some applications can be decompiled into code that resembles their original source code, but this is not true for all applications.
How easy or difficult it is to decompile an application depends on the programming language used to write the application and how it was originally compiled.
I don’t think it is feasible to decompile fully compiled games and edit those games to support modern graphics layers and then put them back together. Decompilation is typically used for reverse engineering or for research and ideas. So you can’t exactly take apart the game and just rework it into another game unless you have the original code, dependencies and build environment.
I think it’d be wishful thinking that you can just put AI in a cage with the game and have it do exactly what you want.
However, I don’t think it’s outright impossible. I mean Wendell and Eric S. Raymond have talked about ESR using an AI to decompile a program and get it running on modern hardware.
IMO, the key is making a proper setup for the AI to work in, being able to give it key rules to follow and tests to ensure it’s following them, and ways to confirm it’s finished properly. Also you likely need to be able to sit there and hold it’s hand along the way so you can nudge it and keep it in line.
The setup is something that I’ve been looking into lately because you can’t just give the AI free rein and expect it to just work. It needs a container to work in, access the programs/tools to let it work, and safe ways to download things that it needs (like libraries). Otherwise you are just asking it to google search it’s way into a virus.
In theory, LLMs could get powerful enough to just modify the binaries directly.
They understand C, assembly and by extension x86/x64 bytecode, so there’s no reason an LLM could not edit binaries without the source - if not now, soon.
A guy in sweden (i think) has been vibe coding his own X server in assembly - and assembly is essentially a 1:1 relationship with assembled binary code.
I use Claude daily at work for development work; you are delusional if you think this is something a frontier AI can do by reading the bytecode and shitting out a new binary.
I think we are getting hung up on the needing to decompile the game code.
For now, I want to focus on the open source game. I was more trying to engage the community to determine what tools would work best for locally using AI tools to help modernize the code. And if any of the hardware I have could be helpful in accomplishing this with the community’s assistance.
This was mostly a learning exercise for myself.
Also, from watching some of Wendel’s/Steve’s videos they both reference researchers using AI tools to decompile for security research. I was trying to gauge could the same tools be used to keep old games playable. If its not and I have misunderstood what was actually being done that is fine.
I don’t think you will understand, really, how this works. I mean, there are no models currently that can be useful with millions of tokens of context. And when it comes to editing the bytecode like this, it would be tens of millions of tokens. I mean, overall, even looking at tuning logs for my car from a 15-minute drive turns into 32 million tokens. And I had to write software to cut the tokens down by averaging the recorded intervals and capping the precision just so that I could get a five-minute slice down to a number of tokens that could be read by an LLM.
So it can definitely make tools that can scan for certain patterns in bytecode, and it is possible to bytecode patch certain pieces of software. However, being able to fully take an entire multi gigabyte software into context and just totally rewrite the bytecode I think is a ways away. The amount of resources that would be required is astronomical, and the problem that all of the AI companies are facing today is models ability to actually be useful at larger contexts. Many models lose track of their own context and the scope of the problem, so I think we are a ways away from doing what you are talking about.
Sure, but if you copy the actual assembly it will be much longer… for example my 36kb C++ application is 33.1k tokens for the raw hex.
My 77k Version of this application is 80k Tokens for the Raw Hex, its 135k tokens for the raw disassembly… but if you are going to rewrite the hex; you need both hex + disassembly.
If you have address + Hex + Disassembly (Standard Aligned Disassembler output) then its 401k tokens for my 77k application lol…