Super Mario 64 Online

SM64O, the first online hack!
  • rss
  • Home
  • Old Stuff
    • Buy SM64O (Modern)
    • SM64O Engine
    • Java 64 – Good ol’times
    • SM64O Classic Lua – Introduction
  • FlexROM III
  • Forum
  • SM64O M:X Alpha/Beta
  • Download
  • Credits
  • EULA

SM64O M:X r201 RELEASED!

Tarek701 | September 7, 2013

SM64O M:X has a lot of fixes and additions to the ROM. The main features are mostly about compiling MIPS R4300i Code. Yes, you might ask, how compiling binary code? Well, it’s not really compiling. More likely it’s a better method to “hardcode” things into game, through ASM. Let’s make an example.
We have the code:
LUI T0, $156C
LW T1, $3FFC(T0)
LW T2, $1880(T0)
BEQ T1, T2, Equal
NOP ; Delay Slot
LW T3, $3FFC(T0)
ADDIU T4, T3, $0001
SW T4, $3FFC(T0)
Equal:
JR ra
NOP ; Delay Slot

This code is a simple branch on equal code. Easily manipulative, as you see. I could simply set it to a branch on not equal code, the game wouldn’t even notice it. (With game I more likely meant the PJ64 Engine I’ve built in there, that checks for game changes, etc.) To prevent this, this code gets compiled to a shorter code, which parts the code into more than 20 parts! The code also changes and transfers itself on a lot of random addresses, so people cannot change it unless they find the current address part, which is nearly impossible. This was really hard work, as I had to do it for EVERY code. So, I’ve written with some help of Nexus some codes to make everything compatible. Instead of rewriting PJ64′s way on processing MIPS code, I simply wrote a code, which parts the “emulated” MIPS CPU into two Main MIPS CPU’s: The Main MIPS R4300i and the Pseudo MIPS R4300i. The difference is just, that pseudo MIPS is completly random and encrypted and compiled Main MIPS code.

So, the code up there is then compiled to pseudo MIPS:
LUI T0, $FFFF
LW T1, $000F(T0)
LW T2, $F000(T0)
JAL $9D00007C ; For example
NOP ; Delay Slot
LW T3, $0000(T0)
ADDIU T4, T3, $0000
SW T4, $0000(T0)

_0x0e39:
JR ra
NOP ; Delay Slot

You notice, that after JAL no values are given anymore aka $0000. This is one advantage in pseudo-MIPS. Instead of placing the values there, they’re declared through the JAL code and doesn’t interrupt the usual routine. So, those $0000 are more likely pointers to the values, but those pointers are not constant or static, they’re completly dynamic and even point to pointers, and these pointers point then to other (more than 5) pointers and the last one first, points to the actual value. Of course, this can be very frustrating for the game, as it starts to lag the game. (You know, every opcode takes a specific amount of machine cycles) To prevent that, the pseudo-MIPS is mostly done through the PC’s CPU. So, if you have a good processor, that haves more than 2.1GHz, then you can expect the usual 60FPS and you won’t even notice that something changed. Now, at the beginning of the code with LUI T0, $FFFF. You also noticed, that the code is $000F, then a $F000 follows. This is also made on purpose and gets aggregated with the pointer’s value. A really complex thing, I have to admit. But it prevents now a lot of online ASM hacks or any other kind of in-game modification. Of course, you could edit your ROM, but that wouldn’t change anything, as the ROM has already another encrypted format + when joining a server you WILL have to download the cache from that server, which automaticly replaces your whole ROM to original.

UPDATES:

  • Compiling MIPS code.
  • [ADD] Weapons! (Written in C and compiled to MIPS through MinGW) Added a pistol (the projectile is that bullet, which gets shoot from those things, ah damn I forgot the name.) -> Also, in PJ64 there’s a template code on how to create a weapon, with a projectile in C.
  • [ADD] Support for the SM64 Game Engine to be used with SM64 Online. (Attention! The professional version will of course not allow the source code of SM64O, but you can use C# for coding RAM Objects and stuff instead of using C. You also can use the animation editor, you can integrate some RSS Feed stuff and use output PHP in the dialog boxes, etc.)
  • [ADD] Added a better MIPS R4300i Manual. It includes now the basic stuff from loading/storing addresses and values, branching, subroutines, etc.
Categories
Uncategorized

« SM64O M:X r151 RELEASED! FlexROM III – Set up your own SM64 Server in HIGH-SPEED! »

Comments are closed.

Recent Posts

  • Regarding Net64+, Leaked SM64 source code, etc.
  • FlexROM III Updates – New devices came + |NEW| Requirements for FlexROM and changes ++ New Master Server Updates
  • SM64O M:X 0.8a (r329) RELEASED! + SM64O M:X 0.712 (r251) RELEASED ++ Forums Update
  • FlexROM III – Set up your own SM64 Server in HIGH-SPEED!
  • SM64O M:X r201 RELEASED!

Recent Comments

  • Messiaen on SM64O C:X 2.0b r1323 – Development Progress
  • Messiaen on SM64O C:X 2.0b r1323 – Development Progress
  • DarkMario8847 on SM64O C:X 2.0b r1323 – Development Progress
  • Killer23323 on SM64O C:X 2.0b r1323 – Development Progress
  • Citrine on SM64O C:X 2.0b r1323 – Development Progress

Archives

  • December 2021
  • February 2014
  • September 2013
  • August 2013
  • July 2013
  • June 2013
  • May 2013
  • February 2013
  • January 2013
  • November 2012
  • July 2012
  • June 2012
  • May 2012
  • April 2012
  • March 2012
  • February 2012
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011

Categories

  • Uncategorized

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox