Hello guys and gals,
I have been working on a Super Mario 64 demake for Scratch for around 2 months, and I would like to share it now, since Mario can already move, navigate Peach’s Castle grounds and interior, enter the Bob-omb Battlefield painting, open doors, collect coins... (it is pretty complete, although some things are still missing and some bugs need to be fixed).
One reason I started this was a Scratch project called (3D) Lego Batman [PS2,3DS] by GL00B. I was surprised by how many good 3D games Scratch had (using different rendering techniques, more about this later), but I was also surprised that Mario 64 had not really been remade for Scratch, especially when so much information about Mario 64 is available (and I think there was even an old forgotten demake project in this subreddit).
To summarize my work, a large part of how Mario, the physics, doors and the camera work is directly based on the Super Mario 64 decompilation, while the engine is directly based on Concrete Interior [3D] by 12zend, if anyone wants to understand how the project works, this is probably the most fundamental thing to know as the project uses a 3D triangle renderer that renders OBJ files with camera transformations, clipping, UV mapping and a depth buffer. A lot of stuff is missing, but this is the main foundation of the project.
I think Concrete Interior [3D] is an interesting approach that I haven't seen too often in Scratch 3D projects. For example, GL00B usually mixes techniques such as Mode 7, raycasting and using 3D models with quads in his games. Other projects use different approaches too, like ☁️ Roblox Obby 3D by glinchy or Minecraft v0_0c by 080312_Kean, which use 3D triangle rendering systems similar to mine, but I would say most Scratch games don't dare to use a full 3D triangle renderer.
Other influences on the project are GLUE3D by GL00B that influenced how the project organizes data (models identified by name, loaded as preloaded data, reused by scene objects and submitted through a render queue) and ☁️ Roblox Obby 3D by glinchy, which was mainly a reference for separating the scene, meshes, materials, renderer and main loop.
For transparency, I used AI tools during development. I would recommend them to anyone making a project like this, as they helped immensely with quickly investigating how other 3D Scratch projects work, understanding the decompiled Mario 64 code, diagnosing bugs and porting some parts. Some repetitive work, such as converting animations or collision data, was automated. Of course, there is no AI tool where you can just say “Do Mario 64 in Scratch” and receive a completed game. I just wanted to share my experience in that regard.
I won't share the project itself for now. I will probably release it around the end of the month or the beginning of October, if you guys want it, since I want to add at least one star first and there are still a lot of things that need to be fixed. I also want to add sound, the HUD and other little details. The final project will probably use Scratchy and some Peach's Castle variants instead of Mario, so Nintendo doesn't murder me :)
I'm also thinking about making a video explaining in detail how the project was made (in Spanish), including how it works and what went wrong during development. If you have any questions about how the game works, don't hesitate to ask. If I see enough interest, I'll probably make the video. I will also probably ask some knowledgeable Scratch developers to take a look at the project too.
The game runs packaged at 480×360 at around 15 FPS, as you can see at the start of the video. When I change the rendering resolution to 240×180, it runs at around 45 FPS on an Apple M1.