Hacker News new | past | comments | ask | show | jobs | submit login
Super Mario 64 Online Release [video] (youtube.com)
155 points by dEnigma on Sept 10, 2017 | hide | past | favorite | 21 comments



If you haven't heard, the person behind this mod (Kaze Emanuar) was also responsible for tons of amazing mods of the same game. For example, he also made the incredibly technically advanced Super Mario 64 Last Impact with all new levels, enemies, power ups, bosses and gimmicks:

http://sm64hacks.com/hack.php?id=59

As well as Super Mario Odyssey 64 (which let you possess anything from Mario 64 by chucking your hat at it):

https://www.youtube.com/watch?v=YGcsVQB1NAA

Super Mario 64 Maker:

https://www.youtube.com/watch?v=XNZk4ggJkcc

And Super Mario 64 3D World (where he set up the custom abilities the players for Mario 64 Online have):

https://www.youtube.com/watch?v=8ePa_FrSNkI

So if you're interested in this project, you should also check out his previous work. It's amazing.


He's also currently working on a "Super Mario 64"/"Zelda: Ocarina of Time" crossover (unless the project has been abandoned)

https://www.youtube.com/watch?v=_v2zXB-YUZ8


How do people do things like this? They manage to achieve pretty sophisticated modifications to compiled games without access to the source code. Is it really just disassembly and careful low-level work?


Debugging tools in n64 emulators (such as nemu64) are sufficient to make tracking down particular game logic more in the neighborhood of a fun puzzle than a slog through (roughly) a megabyte of assembly. Super Mario 64 in particular has had an active ROM hacking community for over a decade, so there is a large body of knowledge about the game's internals, though it resembles folklore more than a systematic approach. The hard parts to discover through disassembly are the 3d graphics api and memory-mapped IO, but that was already worked out quite a while ago for emulators (based largely on patent documents).

In fact, there are level editors for SM64! Kaze, the creator of this hack, occasionally streams development on twitch; it's a lot of cross-referencing different pieces of accumulated documentation.

Edit: An example of some of the documentation, a list of ROM addresses of various textures: http://wiki.origami64.net/super_mario_64/textures


I can't speak to the complexity of this project, but for ROM hacking in general, it's not all too complicated, but it does take some persisence.

First you need to find code relevant to what you want to do. You can take diffs of memory as you do things in the game to narrow down where the relevant addresses are, and then set breakpoints on read/write to those locations to find relevant code. After that, you can mostly just follow the assembly - you can even read backwards up the call stack by reading to what look like the beginning of a procedure, and searching for jumps to that address. Once you've found the code you want to modify, you just need to find some empty space in the ROM that you can branch out to to write your code.

The trickier bit is if you're in a spot where you need to worry about timing. On older consoles, this included things like changing the HUD or wave effects, etc., since you need to make sure whatever work you do gets done in time for HBlank/VBlank.

Some consoles also had some built in functions that would give you an idea of what code was for, like the lz77 compression on the GBA, which was mostly just used for graphics. Similarly, DMA was most often used for copying sprite data. On newer consoles where code was often compiled from C (rather than assembly with macros), I'm under the impression you can also do things like try to pattern match on the signature of standard library functions.


I don't know how this particular hack was done, but you may be interested in how notaz carried out the StarCraft ARM port:

https://hackaday.com/2014/07/31/playing-starcraft-on-an-arm/

https://pyra-handheld.com/boards/threads/starcraft.73844/


Amazing work. If you like this, check out Multi Theft Auto and San Andreas Multiplayer, two mods that add online multiplayer support and scripting capabilities to GTA Vice City and San Andreas. MTA:SA even adds a map editor that works inside the game client itself.


Oh goodness, MTA brought me so much fun.

Mostly of the Lua-script-that-made-cars-rain-from-the-sky-above-random-players kind.


Do they mostly work now? I remember trying a San Andreas Multiplayer Mod quite a long time ago, but it was ridden with bugs and basically unusable. Thank you for reminding me these exist, in any case.


Neat! Seems pretty freeform though, which I don't love - I like a bit more structure in my games. Also, Id be surprised if the levels that were all designed for Mario play well with a bunch of characters with alternative movement powers.

Still, this looks hella cool. Hope Nintendo doesn't get nasty about it, I want to try it with my kids (although I lack enough machines)


With all of the brand new models I'm assuming he either imported or created from scratch (e.g. Peach, Rosalina, Waluigi, Toad, etc), it's a little puzzling why his Luigi is still a palette-swapped Mario instead of going for the longer-thinner variety that's been pretty standard to Luigi's character for over a decade.


From the developer's comments on YouTube there was a previous Luigi model that someone had crafted with custom tools but they'd left the project and thus the Luigi model hasn't had as much work done for it.

There's also additional challenges where they have a limited amount of game RAM to work with and so additional textures and models are tough to fit in.


He IS longer and thinner. Pause the video at about 0:25, when they are standing in front of the castle bridge, to compare Luigi and Mario.


Quick link to download/mirror for the lazy: https://cdn.discordapp.com/attachments/347469400565219338/35...


Subreddit here: https://www.reddit.com/r/sm64online/

Threads are starting to form with public servers etc. Could be a good community to come of this, I'm excited.


Can someone explain this to me? How does the game/emulator communicate with his little server program?


No idea, sorry. But according to this interview[0] a guy named MelonSpeedruns "did the basic program that would allow sending bytes from each emulator to a server". Sadly I can't find any blogpost, video or any kind of forum, where he talks about this project. His github account shows nothing related to this either. Maybe there are further details in one of Kaze's videos[1], or you could try asking MelonSpeedruns directly on github[2] or reddit[3].

[0]https://www.redbull.com/sg-en/mario-64-online-interview

[1]https://www.youtube.com/channel/UCuvSqzfO_LV_QzHdmEj84SQ

[2]https://github.com/MelonSpeedruns

[3]https://www.reddit.com/user/MelonSpeedruns/


This is awesome, one of my fav games as a kid. I prefered better the DS version but still fantastic.


Countdown to Nintendo's cease and desist order in 3...


In the immortal words of Jason Scott: "Itsa me, cease and desist"

https://mobile.twitter.com/textfiles/status/7396378033450516...


Cease and Desist in 3... 2...




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: