F-Zero X on Nintendo 3DS
hypnotize.works
hypnotize.works
64dd on original 3DS
Local & Online Multiplayer
QR Code sharing for Custom Courses
I hope ya'll check out the authors notes, post-morterm, and give it a try on your 3DS.
Something that the bot overlord didn't even think to say in its superdense page intro.
That's the problem with AI-generated text. They have no idea of what proper context is.
If I ever talk about Ocarina of Time, I don't feel the need to specify what platform it was on, or now that I realise, that it was even a Zelda game
You assume wrong. I would be interested and I didn’t know by name what the platform was. I never played F-Zero but I’m familiar with it thanks to Super Smash Bros.
> If I ever talk about Ocarina of Time, I don't feel the need to specify what platform it was on
Considering there’s a remake with the same name on the Switch 2, you do need to specify.
Except, nobody does that. So that’s not a real number.
People regularly blow through all their Claude Pro tokens every week. It’s relatively easy to do.
Since the Playdate doesn't have any of the sprite rendering hardware that made the gameboy both underpowered in compute and overpowered in graphics at the time, some of the tricks may be unnecessary.
I suppose you could do some kind of shift of a whole row of the framebuffer easily with a memmove sort of operation. The gameboy's shift registers and the per sprite drawing are what really made this both difficult and possible at such a slow CPU clock speed. The playdate CPU is about 40x faster than that on the gameboy, so probably all these kinds of tricks and more would work just fine.
Don’t get me wrong, the 3DS is a gem of a console, and it harks back to when Nintendo put more thought into what they released instead of just another Mario sports game; but since the Switch is so much more powerful, I’d expect ports to that be more of a priority.
[1] https://github.com/lovebrew/nest
edit: compared it to the GBA homebrew scene since it's a large dedicated community to derive pros and cons between the two from. Switch is still receiving updates from Nintendo to brick your system.
The 3DS is a fun pocketable form factor which a lot of people already own and easy to permanently mod on any firmware version or hardware revision.
At this point most people getting a 3DS are probably doing so specifically to jailbreak it
For example, if you play games on a virtual screen using a VR helmet, you pretty much always want the game to use stereoscopic 3D, because playing it without it would be strictly worse. (Okay, it would consume less GPU resources, which is good, but that would be the only difference, and this would also hold for things like lower resolution or frame rate.)
The 3DS is still a _console_, purpose built and limited in what it can do. It is also approachably easy to find a good one in working order, and still has the vibe of a retro console.
Also, for fun, I suspect.
I imagine that's a big part of it.
I had been working on getting claude to port Super Metroid to the Gameboy Advance. Was mostly curious if the GBA could run it at full speed. Looks like, yes!
I don't think the productivity gains from AI can be ignored for contexts like this. It's what they're best at.
I just hope it goes to good uses (more ports of fun games, more interoperability and opennesS) instead of bad ones (firing humans instead of retasking them), and that hope feels faint.
If you don't have a real dollar cost then can you tell us how much it actually cost in peanuts?
This of course assumes it's something anyone would consider worth paying a human to do (it's not).
Now I’ll have to do it and see how they compare. I purposefully avoided playing it again during development so it’ll be most curious.
The technical notes are dense and interesting in their own right, but I don't expect anyone not already familiar with the N64 to 3DS port scene to care.
Do you not see what you're doing? How do you know they don't think about things? You're attacking with unfounded accusations, and it's incredibly uncivil.
Why are you in this AI thread spewing hate?
Think about it a second.
This is an AI thread.
You do not have to be here.
One striking example is "No debugger, no stdout" which is baffling considering I implemented a GDB stub in the very first version of Rosalina which I released like... 10 years ago?
Stdout redirection is supported by both 3dslink and GDB stuff on 3ds, too.
I don't mean to be a party pooper - and the projects fullfills its role as a showcase of how far pure vibecoding can take someone - but it's this can of thing that gives the "absolutely no AI" crowd grounds to stand on.
Other F-Zero X ports feed the N64 display lists to an interpreter, command by command, with the T&L on CPU. Pre-v1.0 of this port took that approach but did some double buffering on another CPU core.
When porting to Old 3DS, that other core wasn't an option, so we had to make better batch calls to the GPU. It ended up being that now we walk that list the first time and group triangles that share the same material, and moved the position & rotation transformations to the GPU too.
Rather than creating the mesh for tracks out of the spline on the fly, it also precomputes at the start of the race.
I'm fairly certain this is a pretty novel implementation for a N64 to 3DS port.
Most of these optimizations are just for race elements, which is why some of the menus are still pretty laggy.
Have you, or rather your agents, tried to identify which CPU functions were the bottlenecks (e.g. in citro3d, perhaps)?
I find it surprising that your stuff is CPU bound. Are you doing one command-list submission for _both_ eyes (with one drawcall for each)? This should be relatively simple, only require viewproj matrix changes and avoid CPU<>GPU roundtrips.
If not, you are going to hit IRQ dispatching costs as well as shardmem dispatching costs as well as other costs.
The remaining bottleneck is the o3DS instruction cache. Our code is bigger than the 16KB L1, so the CPU spends a big chunk each frame waiting on instruction fetches.
We build the list for left eye, submit, and then re-submit the list offset for the right. Hadn't tried chaining both into one submission, it improved performance. Thanks so much for the suggestion!
Thanks for taking a look and the great questions. I really appreciate your contributions to the scene.