yes, and its probably where this should go. The recompiler itself is plain C++ and builds for wasm easily, the heavy part is compiling its output (GoW2 becomes about 670k lines of Cpp), which would need clang running in the browser. The nicer route is to have the recompiler emit WebAssembly directly and let the browsers own engine compile it. I already do that for VU1 microprograms that were not seen AOT. It also solves distribution you'd pick your own ISO and the conversion would happen locally, so nothing derived from the game is ever hosted.
same lol. but hey, ive been able to play the xbox 360 version of NFS most wanted perfectly on steamdeck in one press of a button due to the efforts of the fine folks working on these recomps so ill take a small win here and there. ive heard theyve also got the original forza horizon working too. so im stoked.
With the slew of recomps these days enabled by AI, How much incentive is there for a game studio to pour their heart, soul and money in a product when it can be easily "stolen" and shared for free...
It's been 27 years since Napster. People are still making albums and movies. I don't think piracy moves the needle in any meaningful way, not with enforcement anyway.
People who want to support a game studio will buy the game anyway. People who do not want to support the studio will pirate the game anyway. It's the same reason why piracy does not matter at all, those people weren't going to pay for your game either way.
I don't understand this framing of recomps using the word "stolen". For most games the hard part and the valuable part is not "writing the code", it's everything else.
I think it's less that recompilation is stealing the code, and more that it is a piece of the puzzle to 'stealing' the game experience (the thing that you would pay for).
Emulators + ROM is one way to do that. Recompiling from the ROM is another. I think that for most people, your stance on if emulating is stealing or piracy, will well-predict how you feel about recompilation tools.
Because good stuff will defend itself regardless. If Pratchett or Carlin was alive, I would still be waiting for his new stuff.. maybe even more so in the age of AI. Hell, I am doing a ton of personal projects now and I am still waiting for new divinity, because by know I trust them to do the stuff right. And this is the point: no more corporate slop! All hail AI slop. Second golden gaming age is upon us brothers!
A better question: who would want to play Gran Turismo 3 or 4 without pressure sensitive controllers?
Even using the original ps2 or ps3 controller with the right drivers on PCSX2 doesn't really reproduce the same smooth acceleration/brake curve of the PS2.
Playing them on a keyboard or fully digital inputs is just a miserable experience.
>Even using the original ps2 or ps3 controller with the right drivers on PCSX2 doesn't really reproduce the same smooth acceleration/brake curve of the PS2.
why not? if we're at the point of byte perfect recomp of system firmware+games, surely we could find a patch that would fix that in both pcsx2 or this project
> These days you can map analog triggers to the sticks for a modern experience if you want that.
It gets wonky if you press both analog triggers at the same time though. I've also tried mapping them to X and O to simulate the pressure, but the range is also somewhat off, with a way steeper curve (half pressing a trigger gives nearly 100% intensity of the OG buttons).
An alternate solution I've seen around is using a GMIX or similar devices and mapping the g29 wheel controls from the game to a modern Xbox/PS controller, but I've never tried it myself.
I think the ergonomics of right stick for that is horrendous, but aside from that, for a racing sim game, you're gonna need to be able to hit the brake and the gas at the same time.
wow, how awesome it would be to play those games with Trackmania-like reload-times (if you restart the race in Trackmania, you're immediately at the starting line again).
I assume it would require some additional patching in those GT / NFS games though...
That's easy enough to simulate, too, isn't it? Just pause the game manually at the right spots to make time to get up, make a sandwich, eat the sandwich, take the dog out, walk the dog around the block, and then use the bathroom before resuming. No worries.
ITYM "Who would want to play Gran Turismo" [Preparing...] <fwsssssssssss rrrmp fssswsss grmp fsswsss grmp fssswsss grmp> <ejects disc, polishes on T-shirt> <fwsssssssssssssssssssssss> "without long CD" [Preparing...] <aw no not again...> "loading screens?"
Or without the very-much-needed hold-your-breath moment at startup, where you listen to the sounds to see if the DVD actually loaded correctly. You get a ~1 second moment in there where life itself suddenly stops, before you hear the "viump" that tells you everything is OK in the world.
It's really getting annoying. There are a lot of people advertising "decompilations" and "native PC ports" that just turn out to be the emulator packaged into an exe that immediately runs the game... Makes it hard to find actual recompilations of games now.
Theres a lot of lying going on with these types of AI projects. What I want to see is more 100% matching decompilation so that people who dont use AI can modify the rendering eyv glue and port them to new platforms
Fair point, the IOP is interpreted. Its the PS1-class I/O CPU, and here it only runs the driver modules a game ships on its disc (sound engine, pad, memory card). The IOP kernel and the 20 core Sony libraries are reimplemented natively. In a God of War2 fight that interpreter is about 2% of cpu time, so it hasnot been worth recompiling yet for me. Its the same relocatable module problem i already handle for SN systems overlays, so its on the list. The EE game code is fully recompiled AOT (a missing function is a hard error, there is no interpreter fallback), and VU1 microprograms are recompiled per game, with a JIT and an interpreter only for programs not seen before. Whats left is hardware; the GS runs on the GPU, plus DMA, VIF, SPU2 and CDVD. Every recomp has to model that part, the same way N64Recomp uses RT64 for the RDP as i checked.
From an ars technica review of the steam deck "friends", a portable device that is way ahead of the actual steam deck, specs wise, but since it runs plain unmodified windows is a pain in the ass to use as a portable :)
There is already a native Linux build (Vulkan through wgpu, SDL2 window, audio and gamepad support), so it can run on the Deck as a non-steam game, and the browser build should work in desktop mode too. Two things are missing, the native host still runs on one thread (the VU1 and GS threads only exist in the web host so far), and since i cant distribute anything built from a game, you currently have to convert your own ISO on a PC. Decks GPU is less than half of the laptop iGPU i test on, so 1x resolution is the realistic target for now.Please keep an eye on the repo update, i'll release the relevant update for u.
Impressive. How are you handling the PS2’s timing sensitive hardware, like the vector units, in a static recompilation? Curious how close you can get to correct behavior without emulating cycle by cycle.
Thanks:) it isn't cycle-accurate, and for the games i have tried so far it hasnt needed to be. EE code is translated AOT, and each block subtracts its instruction count from a cycle budget. Interrupts, timers, DMA and vblank are events on one emulated clock, delivered at block boundaries, so the order is right and the timing is approximate. Most games sync on interrupts and semaphores rather than cycle counts. When one does depend on timing, it shows up as a specific bug i can fix.for example, ran off an HBLANK timer I had set to the PAL period on an NTSC game. VU programs are not really part of the executable; games upload them over DMA. So i record each microprogram the first time its uploaded and compile it aot, and in the browser i JIT any program i havent seen to wasm. The pipeline details games actually observe are modeled: MAC/status/clip flags become visible four instructions late (getting that wrong put blotches on GT4s cars), and PS2 floats, which are nott IEEE (no inf/NaN, clamping instead), are done bit-exact. VU1 runs on its own thread, synced to the EE through the VIF/GIF streams
On the PSP recomp, I wish they could somehow target GL 2.1 video cards (ancient Intel iGPU's) so legacy users like me could play most of the games on an n270 netbook.
Man, the netbooks were amazing for their time, but even by 2008 standards, they were not powerful computers.
At the time you needed a fairly capable gaming PC for PS2 emulation, which is a far cry from the igpu in an atom. Given a PSP is basically a cut down PS2, I don’t think emulation on that calibre hardware is an achievable goal. An atom doesn’t even have a hardware programmable vertex shaders, on windows I don’t even think they had GL 2.1.
I never thought I’d see the day where an atom would be vintage tech, and people would still be rocking said vintage tech. It’s amazing you’ve kept it running and usable. Modern PCs can’t even keep up with modern OS, and you’re still rocking the good old days of single core single thread. Rock on!
'Recompiled' is not the same as emulated by any stretch. Native PSP games could perfectly run under an Atom if they used SSE2 instructions and GL 2.1 plus some hacks to mimick some FX (or just some reduced graphic settings).
I've got GL 2.1 running under n270 perfectly well, up to the point to test Yandex Maps to roam around Prypiat.
Even for emulation PPSSPP was far less demanding than PCSX2.
I know, but it still has lots of baggage and missing features, which is why game engines that support OpenGL tend to target OpenGL 3.3 as the minimum baseline, given that it used to be widely deployed.
But we're talking about AI generated code here, it shouldn't have any difficulty supporting the older API if it has the necessary features. For PS2 games I think GL 2.1 (or GL ES 2.0 or WebGL 1 which are all more or less the same thing) is largely sufficient.
Yeah, but I am speaking about what the hardware can do, also I don't see why target WebGL 1.0 in the days of WebGPU, WebGL 2.0 yes, because WebGPU isn't yet widely available.
Now, OpenGL ES 2.0 isn't OpenGL 2.0, this is the trap of those that think OpenGL is the same everywhere.
Also OpenGL 3.3 is from 2010, whereas OpenGL 2.1 was designed for 2006 hardware, how back you want to get?
> also I don't see why target WebGL 1.0 in the days of WebGPU, WebGL 2.0 yes, because WebGPU isn't yet widely available.
Because not every hardware capable of running PS2 level games supports the newer APIs.
> Also OpenGL 3.3 is from 2010, whereas OpenGL 2.1 was designed for 2006 hardware, how back you want to get?
Doesn't matter how old it is, what matters is if it has the required features or not. For the use case being discussed, GL 2.1 is sufficient so there's no good reason to not target it. That's my philosophy at least. When I write code, I always use the oldest library or API that has the stuff I need. I don't just go automatically for the latest one.
It's not an "and". GL 2.1 has all the features necessary for PS2 games and is still supported on modern systems. Older APIs may be slightly more verbose than newer APIs but that shouldn't matter to an AI.
What about compiling the compiler to WebAssembly so it can be hosted anywhere and convert a project directly from a browser?
Mentioned in other comment, but this is what I did at https://github.com/cretz/vitaslop for Vita. Generic ARM-to-WASM transpiler.
yes, and its probably where this should go. The recompiler itself is plain C++ and builds for wasm easily, the heavy part is compiling its output (GoW2 becomes about 670k lines of Cpp), which would need clang running in the browser. The nicer route is to have the recompiler emit WebAssembly directly and let the browsers own engine compile it. I already do that for VU1 microprograms that were not seen AOT. It also solves distribution you'd pick your own ISO and the conversion would happen locally, so nothing derived from the game is ever hosted.
All of this recomp stuff is pretty amazing. I really don't like how AI changed my profession, but hey at least I get something good from it.
same lol. but hey, ive been able to play the xbox 360 version of NFS most wanted perfectly on steamdeck in one press of a button due to the efforts of the fine folks working on these recomps so ill take a small win here and there. ive heard theyve also got the original forza horizon working too. so im stoked.
Does this means same can happen for ps3?
I did similar for PS Vita over the past few months: https://github.com/cretz/vitaslop
But instead of single games, I "built" an ARM-to-WASM transpiler in WASM. Also cool transcoding of WebGPU shaders, audio, and more.
Only have tested a few games so far, it's early days, but works quite well in Chrome mobile on flagship Android phones.
With the slew of recomps these days enabled by AI, How much incentive is there for a game studio to pour their heart, soul and money in a product when it can be easily "stolen" and shared for free...
It's been 27 years since Napster. People are still making albums and movies. I don't think piracy moves the needle in any meaningful way, not with enforcement anyway.
People who want to support a game studio will buy the game anyway. People who do not want to support the studio will pirate the game anyway. It's the same reason why piracy does not matter at all, those people weren't going to pay for your game either way.
I don't understand this framing of recomps using the word "stolen". For most games the hard part and the valuable part is not "writing the code", it's everything else.
I think it's less that recompilation is stealing the code, and more that it is a piece of the puzzle to 'stealing' the game experience (the thing that you would pay for).
Emulators + ROM is one way to do that. Recompiling from the ROM is another. I think that for most people, your stance on if emulating is stealing or piracy, will well-predict how you feel about recompilation tools.
The incentive will always be there for games that build an organic community. Good examples are a lot of Valve games.
Because good stuff will defend itself regardless. If Pratchett or Carlin was alive, I would still be waiting for his new stuff.. maybe even more so in the age of AI. Hell, I am doing a ton of personal projects now and I am still waiting for new divinity, because by know I trust them to do the stuff right. And this is the point: no more corporate slop! All hail AI slop. Second golden gaming age is upon us brothers!
[dead]
Who would want to play Gran Turismo without long CD loading screens?
A better question: who would want to play Gran Turismo 3 or 4 without pressure sensitive controllers?
Even using the original ps2 or ps3 controller with the right drivers on PCSX2 doesn't really reproduce the same smooth acceleration/brake curve of the PS2.
Playing them on a keyboard or fully digital inputs is just a miserable experience.
>Even using the original ps2 or ps3 controller with the right drivers on PCSX2 doesn't really reproduce the same smooth acceleration/brake curve of the PS2.
why not? if we're at the point of byte perfect recomp of system firmware+games, surely we could find a patch that would fix that in both pcsx2 or this project
Right analog should be accelerate and brake.
Analog buttons were always a bad idea and should never be used.
These days you can map analog triggers to the sticks for a modern experience if you want that.
> These days you can map analog triggers to the sticks for a modern experience if you want that.
It gets wonky if you press both analog triggers at the same time though. I've also tried mapping them to X and O to simulate the pressure, but the range is also somewhat off, with a way steeper curve (half pressing a trigger gives nearly 100% intensity of the OG buttons).
An alternate solution I've seen around is using a GMIX or similar devices and mapping the g29 wheel controls from the game to a modern Xbox/PS controller, but I've never tried it myself.
I think the ergonomics of right stick for that is horrendous, but aside from that, for a racing sim game, you're gonna need to be able to hit the brake and the gas at the same time.
wow, how awesome it would be to play those games with Trackmania-like reload-times (if you restart the race in Trackmania, you're immediately at the starting line again).
I assume it would require some additional patching in those GT / NFS games though...
That's easy enough to simulate, too, isn't it? Just pause the game manually at the right spots to make time to get up, make a sandwich, eat the sandwich, take the dog out, walk the dog around the block, and then use the bathroom before resuming. No worries.
ITYM "Who would want to play Gran Turismo" [Preparing...] <fwsssssssssss rrrmp fssswsss grmp fsswsss grmp fssswsss grmp> <ejects disc, polishes on T-shirt> <fwsssssssssssssssssssssss> "without long CD" [Preparing...] <aw no not again...> "loading screens?"
Or without the very-much-needed hold-your-breath moment at startup, where you listen to the sounds to see if the DVD actually loaded correctly. You get a ~1 second moment in there where life itself suddenly stops, before you hear the "viump" that tells you everything is OK in the world.
And you lose the acoustic error handling too: one seek noise meant resolve(), another meant reject().
This is good, I didn't know 3DS could handle PS2 emulation.
What's the performance like on heavier titles?
I will wait for MVG video
AI or no AI, this is amazing.
ah yes, another recomp that still emulates a core system component.
https://github.com/snuri00/ps2-web-recomp/blob/1066c9eea78c2...
It's really getting annoying. There are a lot of people advertising "decompilations" and "native PC ports" that just turn out to be the emulator packaged into an exe that immediately runs the game... Makes it hard to find actual recompilations of games now.
[dead]
its still under development, system components will compile to cpu and VU1 modules will translate to gpu shaders
This is how you know that most coders that use claude never read the code, nor their own READMEs.
Theres a lot of lying going on with these types of AI projects. What I want to see is more 100% matching decompilation so that people who dont use AI can modify the rendering eyv glue and port them to new platforms
I would say it could be less lying and more the various "authors" having not even the slightest idea what their creations actually do.
I don't see a difference tbh. The Human/AI cyborg knows what it is and is lying.
[dead]
Fair point, the IOP is interpreted. Its the PS1-class I/O CPU, and here it only runs the driver modules a game ships on its disc (sound engine, pad, memory card). The IOP kernel and the 20 core Sony libraries are reimplemented natively. In a God of War2 fight that interpreter is about 2% of cpu time, so it hasnot been worth recompiling yet for me. Its the same relocatable module problem i already handle for SN systems overlays, so its on the list. The EE game code is fully recompiled AOT (a missing function is a hard error, there is no interpreter fallback), and VU1 microprograms are recompiled per game, with a JIT and an interpreter only for programs not seen before. Whats left is hardware; the GS runs on the GPU, plus DMA, VIF, SPU2 and CDVD. Every recomp has to model that part, the same way N64Recomp uses RT64 for the RDP as i checked.
are there clean-room games?
No GitHub pages so I can play?
The games themselves are copyrighted, no?
Yes they are, and Cloudflare gets DMCA requests to take them down.
VERY cool. I wish you could make this work for steam deck (and friends) though.
Why would you want this to work on a dedicated gaming device that can emulate the titles outright?
Have a look at Decky loader and Emudeck.
I guess it might be a nice way to distribute homebrew PS2 games in a platform agnostic way
Can't get decky loader to work on my (Lenovo) steam deck
You can definitely still get PCSX2 working on it though, and it's fantastic. PS2 and PS3 games are among my favourite uses for handheld PCs.
What's a Lenovo Steamdeck?
From an ars technica review of the steam deck "friends", a portable device that is way ahead of the actual steam deck, specs wise, but since it runs plain unmodified windows is a pain in the ass to use as a portable :)
https://www.lenovo.com/us/en/p/handheld/legion-go-s/83n6000g...
there's an actual sku of one lenovo handheld that officially runs SteamOS, i assume that's what GP is referring to
Ohh that's new. I stand corrected then.
There is already a native Linux build (Vulkan through wgpu, SDL2 window, audio and gamepad support), so it can run on the Deck as a non-steam game, and the browser build should work in desktop mode too. Two things are missing, the native host still runs on one thread (the VU1 and GS threads only exist in the web host so far), and since i cant distribute anything built from a game, you currently have to convert your own ISO on a PC. Decks GPU is less than half of the laptop iGPU i test on, so 1x resolution is the realistic target for now.Please keep an eye on the repo update, i'll release the relevant update for u.
I hope they'll be able to do that with Forza too !
[dead]
Impressive. How are you handling the PS2’s timing sensitive hardware, like the vector units, in a static recompilation? Curious how close you can get to correct behavior without emulating cycle by cycle.
Thanks:) it isn't cycle-accurate, and for the games i have tried so far it hasnt needed to be. EE code is translated AOT, and each block subtracts its instruction count from a cycle budget. Interrupts, timers, DMA and vblank are events on one emulated clock, delivered at block boundaries, so the order is right and the timing is approximate. Most games sync on interrupts and semaphores rather than cycle counts. When one does depend on timing, it shows up as a specific bug i can fix.for example, ran off an HBLANK timer I had set to the PAL period on an NTSC game. VU programs are not really part of the executable; games upload them over DMA. So i record each microprogram the first time its uploaded and compile it aot, and in the browser i JIT any program i havent seen to wasm. The pipeline details games actually observe are modeled: MAC/status/clip flags become visible four instructions late (getting that wrong put blotches on GT4s cars), and PS2 floats, which are nott IEEE (no inf/NaN, clamping instead), are done bit-exact. VU1 runs on its own thread, synced to the EE through the VIF/GIF streams
[dead]
On the PSP recomp, I wish they could somehow target GL 2.1 video cards (ancient Intel iGPU's) so legacy users like me could play most of the games on an n270 netbook.
Man, the netbooks were amazing for their time, but even by 2008 standards, they were not powerful computers.
At the time you needed a fairly capable gaming PC for PS2 emulation, which is a far cry from the igpu in an atom. Given a PSP is basically a cut down PS2, I don’t think emulation on that calibre hardware is an achievable goal. An atom doesn’t even have a hardware programmable vertex shaders, on windows I don’t even think they had GL 2.1.
I never thought I’d see the day where an atom would be vintage tech, and people would still be rocking said vintage tech. It’s amazing you’ve kept it running and usable. Modern PCs can’t even keep up with modern OS, and you’re still rocking the good old days of single core single thread. Rock on!
'Recompiled' is not the same as emulated by any stretch. Native PSP games could perfectly run under an Atom if they used SSE2 instructions and GL 2.1 plus some hacks to mimick some FX (or just some reduced graphic settings).
I've got GL 2.1 running under n270 perfectly well, up to the point to test Yandex Maps to roam around Prypiat.
Even for emulation PPSSPP was far less demanding than PCSX2.
I used to play GTA San Andreas on an n270 netbook, I believe at 1024x600. Didn’t run well, but was definitely playable.
Sounds like the epitome of amazing for its time but not a powerful computer.
I agree with the sentiment, however it needs to be at least OpenGL 3.3, and take advantage of shaders.
GL 2.1 supports shaders.
I know, but it still has lots of baggage and missing features, which is why game engines that support OpenGL tend to target OpenGL 3.3 as the minimum baseline, given that it used to be widely deployed.
But we're talking about AI generated code here, it shouldn't have any difficulty supporting the older API if it has the necessary features. For PS2 games I think GL 2.1 (or GL ES 2.0 or WebGL 1 which are all more or less the same thing) is largely sufficient.
Yeah, but I am speaking about what the hardware can do, also I don't see why target WebGL 1.0 in the days of WebGPU, WebGL 2.0 yes, because WebGPU isn't yet widely available.
Now, OpenGL ES 2.0 isn't OpenGL 2.0, this is the trap of those that think OpenGL is the same everywhere.
Also OpenGL 3.3 is from 2010, whereas OpenGL 2.1 was designed for 2006 hardware, how back you want to get?
> also I don't see why target WebGL 1.0 in the days of WebGPU, WebGL 2.0 yes, because WebGPU isn't yet widely available.
Because not every hardware capable of running PS2 level games supports the newer APIs.
> Also OpenGL 3.3 is from 2010, whereas OpenGL 2.1 was designed for 2006 hardware, how back you want to get?
Doesn't matter how old it is, what matters is if it has the required features or not. For the use case being discussed, GL 2.1 is sufficient so there's no good reason to not target it. That's my philosophy at least. When I write code, I always use the oldest library or API that has the stuff I need. I don't just go automatically for the latest one.
I don’t think it’ll happen. The market is too small, and the token costs don’t seem worth the potential upside.
What do you mean by token costs? Does it cost more tokens to support an older graphics API than a newer one?
Yes, because it would not be an "or" but an "and", more features = more tokens.
It's not an "and". GL 2.1 has all the features necessary for PS2 games and is still supported on modern systems. Older APIs may be slightly more verbose than newer APIs but that shouldn't matter to an AI.
[dead]