Commented and labelled disassembly: gist.github.com/1wErt3r/4048722
Decompilation project: github.com/MitchellSternke/SuperMarioBros-C. That project does not produce the ROM however, it reimplements an emulator + game in a single binary.
OMG, the second half of the game where the world becomes quite open and all backstories are revealed, is one of the best gaming moments ever.
This is the one that hit Ciro Santilli the hardest, coming in at the point in which he started to discern between games and the real world a little better. His parents bought it for him during a trip to Disney World in Florida in 1996 (?), since electronics were much cheaper in the USA.
So as Ciro became older, and turned into a software engineer, he started to become more and more morbidly curious about "N64 internals": tool-assisted speedrun, how the devkit looks like, how games were developed for it, hardware leaks, etc.
Luckily Ciro's mind is not interested enough by that useless shit for Ciro to seriously study it himself. But that's what YouTube is for, right? Why do useless stuff when other more useless people can do it for you?
The console has only 4 MB of RAM memory. It is quite incredible what can be done with 8 MB, from the point of view of a 2020 worls where 16 GB laptops are the norm.
Ah, Ciro Santilli loved this one... games young Ciro Santilli played.
And as a result, adult Ciro really enjoys tool-assisted speedruns of the game.
It is interesting how the Etyptian level, Shifting Sand Land, clearly has Indian classical music, with sitar, tanpura and tabla:Apparenty we don't know what Egyptian music would have sounded like exactly.
No-A press 120 stars tool-assisted speedrun attempts by Pannenkoek:
OMG, both of those just fucking work on Ubuntu 20.04 with README instructions, it is unbelievable, those people don't have lives. And it builds the ROM byte by byte equal from source!
There are a few different versions:
- github.com/n64decomp/sm64 for emulator (i.e. or real hardware), tested at 9214dddabcce4723d9b6cda2ebccbac209f6447d
- github.com/sm64-port/sm64-port Ubuntu native, tested at 6b47859f757a40096fedd6237f2bc3573d0bc2a4Full screen with F10.
- github.com/sm64pc/sm64ex: fork of sm64-port, untested by Ciro Santilli, but more new amazing usability features, notably:
--skip-intro
: skips the annoying pipe intro and the need to wait for Lakitu to bring Peaches message!- in-game menu:
- cheats:
- hide HUD!
- no level selection yet, but a matter of time?
Also reported to work on ARM: www.reddit.com/r/linux/comments/ityg6w/pinephone_playing_super_mario_64_30fps/They also ported to browser with Emscripten: github.com/sm64pc/sm64ex/wiki/Compiling-for-the-web
Tested with the USA ROM at sha1sum 9bef1128717f958171a4afac3ed78ee2bb4e86ce (you need a ROM to extract assets, which the project automates), which is also documented in the project itself: github.com/sm64-port/sm64-port/blob/6b47859f757a40096fedd6237f2bc3573d0bc2a4/sm64.us.sha1. Disclaimer: Ciro Santilli owns a copy of Super Mario 64.
The only dependency missing from Ubuntu packages is the IRIX QEMU user mode which they need for their tooling. The project also has a QEMU fork for that, and provide a working deb.
From this project it was also noticed that certain ROM releases were not compiled with optimizations enabled, presumably because as a release title the compiler had optimization bugs! www.resetera.com/threads/so-apparently-the-ntsc-build-of-mario-64-didnt-use-any-compiler-optimizations.166277/ But now they do have a working compiler, and by turning that switch FPS increases in certain levels!!!
It is good to know that this game will "never die".
Some quick stupid patches:
- jump really high:
diff --git a/src/game/mario.c b/src/game/mario.c index 5b103fa..83c9f40 100644 --- a/src/game/mario.c +++ b/src/game/mario.c @@ -826,7 +826,7 @@ static u32 set_mario_action_airborne(struct MarioState *m, u32 action, u32 actio case ACT_JUMP: case ACT_HOLD_JUMP: m->marioObj->header.gfx.unk38.animID = -1; - set_mario_y_vel_based_on_fspeed(m, 42.0f, 0.25f); + set_mario_y_vel_based_on_fspeed(m, 200.0f, 0.25f); m->forwardVel *= 0.8f; break;
Interesting entry points:
src/game/game_init.c
TODO: enable the level select debug feature! tcrf.net/Super_Mario_64_(Nintendo_64)/Debug_Content#Classic_Debug_Display They actually shipped quite a few debug features into the retail game, and they have been reversed too. I tried this but it didn't work (or I don't know how to enable the level select menu):
diff --git a/src/game/main.c b/src/game/main.c
index 9e53e50..b7443a8 100644
--- a/src/game/main.c
+++ b/src/game/main.c
@@ -65,7 +65,7 @@ s8 sAudioEnabled = 1;
u32 sNumVblanks = 0;
s8 gResetTimer = 0;
s8 D_8032C648 = 0;
-s8 gDebugLevelSelect = 0;
+s8 gDebugLevelSelect = 1;
s8 D_8032C650 = 0;
s8 gShowProfiler = FALSE;
The
enhancements/
folder contains a few sample patches.Some tutorials of hacking it:
- www.youtube.com/watch?v=Jkb7Naczoww SM64 Decomp Tutorial 1: Setting Up and First Code Changes by Bitlytic (2021)
- www.youtube.com/watch?v=IuIpqX4neWg Rovert Decomp Tech Demo by Rovert (2019) Metal cap makes Mario huge.
- www.youtube.com/watch?v=5aG1Iyjo20w Is it Possible to Beat Super Mario 64 as Tiny Mario? (Mini Mario Challenge) coverts the obvious make Mario huge/tiny hack. Huge mario verion: www.youtube.com/watch?v=pR_gol6zlIo. There was a pre-decompilation ROM hack doing that trivial change already: Tiny Huge Mario 64. Sample tool-assisted speedrun: www.youtube.com/watch?v=C7BjzZ_Nkk0
Ciro Santilli really liked the battle mode on this.
It is a shame, but this game just doesn't feel good. The controls are just not as snappy as Mario Kart 64, the levels are too wide which limits player interaction, and the weapons feel clumsy weak and unexciting. These are all aspects that the closed source smashkarts.io gets pretty well.
Quite good, Ciro Santilli played this a lot in 2021/2022, his user ID: ofo5fNy7wRNC1Cw94YVB4KMOW5f2.
The physics not as good as the original Mario Kart 64, and it is notably missing jump gliding, and generally not as sharp! But it is really not bad.
Some of the weapons were too useless that you are just better firing them straight away at wall immediately to get something better, they could have a little better balancing there. I'm talking about you gatling that takes 10 seconds to finish firing, and does not kill enemies immediately. You are better off just firing that gun immediately when you get it to be able to get another gun ASAP. They seem to have done some balancing there however.
It had no chat option, but in a way it was cool to be forced to communicate non-verbally with people whose usernames you got familiar with. Funny you can love people like that, without ever talking to them. The best way of doing so being tea-bagging by going back and forth on a player after winning.
Performance was sometimes a problem. When Ciro tried it again on December 2022, it was unplayable due to the impossibly large lag. Tiings were much better again in 2023 however it seems.
Articles by others on the same topic
There are currently no matching articles.