Kuribo64
Views: 7,025,230 Home | Forums | Uploader | Wiki | Object databases | IRC
Rules/FAQ | Memberlist | Calendar | Stats | Online users | Last posts | Search
06-25-17 04:58 AM
Guest:

0 users reading Minigame Hacking | 1 bot

Main - General SM64DS hacking - Minigame Hacking New reply


Sparsite
Posted on 09-11-16 07:01 PM (rev. 3 of 09-29-16 03:49 PM) Link | #77140
Post anything regarding minigame hacking here.

As of right now, all the minigames code needs to be documented before we can start making custom minigames. Graphics in root/MG are not as important, they will come in the next release of the file system documentation.

Minigame Hacking (EUR) Document By Sparsite

RAM Addresses:
0229293C - Rec Room Button Transparency Value on title screen, 2 byte (0 - 4096)
0209B304 - Which Minigame Screen (0 = first, 1 = second)
02191CA0 - Which Character Face Is Selected
02191CB4 - Yellow Moving Left And Right Arrow Animation Frame (0-63 frames)

Offsets:
BL 0x020214A4 (star and life count)
BL 0x02020994 (larger images like marios face)
BL 0x02021024 (images like back arrow)

Registers for offsets:
R0 determines the screen. 0 = top, 1 = bottom
R1 determines image loaded
R2 determines X location
R3 determines Y location

R1 Values:
Luigi Minigame Page Head Not Selected - 020C2C48
Mario Minigame Page Head Not Selected - 020C2DB0
Yoshi Minigame Page Head Selected - 020C2DF8
Wario Minigame Page Head Not Selected - 020C2E40
NEW Text - 020C2F68
Touch To Start Text - 020C2FD0
Back Arrow On Bottom Screen - 020C2E8C

ROM Map:
020C0EF4 - Set back arrow to bottom screen
020C0EF8 - Set back arrow's X position
020C0EFC - Set back arrow's Y position
020C0F00 - Branch to HUD Loading function for the back arrow

Tweaks:
//All Minigames Unlocked
EUR: ROM 0x13644 to 0xFF00A0E3
US: ROM 0x13520 to 0xFF00A0E3
US 1.1: ROM 0x13598 to 0xFF00A0E3
JAP: ROM 0x13598 to 0xFF00A0E3

//Disable Touch To Start Text
020C0B90: nop

____________________
ASMR:
*quietly whispers*
move r0 r7
push r4 to r14
load register r4 into r0
POP

Louiskovskie
Posted on 09-12-16 02:20 PM Link | #77183
Wow, interesting. Creating custom minigames would be nice! It would be a cool bonus for a sm64ds hack :D

Sparsite
Posted on 09-25-16 08:27 PM (rev. 5 of 10-15-16 07:37 PM) Link | #77989
Ok, looks like we are making progress, some new notes!

Minigames appear to reside in overlays, most of which I have found in overlay 6. I decided to put my focus on the sound chest minigame, just to get a feel of how it works.

It appears minigames have constructors. This seems to be where the tile data is stored for minigames. In overlay 6, at 0x7F484, you will see 12dScMgSound_c

Everything after _c seems to follow the whole minigames behaviour (most likely with some branch instructions). The tiles follow a pattern of XX 00 YY 00 (or maybe its 00 XX 00 YY but it shouldn't matter).

NOTE: Hitboxes DO update when these positions are changed so we are in luck

Overlay 06:

0x5C7B0 - Health On New Level Loaded
0x5CC40 - Starting Health On Game Loaded (Deafault 03)

0x7F858 - Top Left Chest X Position
0x7F85A - Top Left Chest Y Position

0x7F85C - Top Middle Chest X Position
0x7F85E - Top Middle Chest Y Position

0x7F860 - Top Right Chest X Position
0x7F862 - Top Right Chest Y Position

0x7F864 - Bottom Left Chest X Position
0x7F866 - Bottom Left Chest Y Position

0x7F868 - Bottom Middle Chest X Position
0x7F86A - Bottom Middle Chest Y Position

0x7F86C - Bottom Right Chest X Position
0x7F86C - Bottom Right Chest Y Position

Incase some were unaware, the game later swaps between 6 chest and 8 chest, these 8 chests are completely different objects from the 6 layout chests.

0x7F88C - Outer Top Left Chest X Position
0x7F88E - Outer Top Left Chest Y Position

0x7F890 - Inner Top Left Chest X Position
0x7F892 - Inner Top Left Chest Y Position

0x7F894 - Inner Top Right Chest X Position
0x7F896 - Inner Top Right Chest Y Position

0x7F898 - Outer Top Right Chest X Position
0x7F89A - Outer Top Right Chest Y Position

0x7F89C - Outer Bottom Left Chest X Position
0x7F89E - Outer Bottom Left Chest Y Position

0x7F8A0 - Inner Bottom Left Chest X Position
0x7F8A2 - Inner Bottom Left Chest Y Position

0x7F8A4 - Inner Bottom Right Chest X Position
0x7F8A6 - Inner Bottom Right Chest Y Position

0x7F8A8 - Outer Bottom Right Chest X Position
0x7F8AA - Outer Bottom Right Chest Y Position

Sound ID's are located below all the chest coordinates, I have not documented all of them but here is what I have so far.

Sound ID offsets:
Sound IDs follow a pattern of XX 00
0x7F928 - Return to lobby sound
0x7F92A - Enter warp pipe sound
0x7F92C - Bowsers laugh
0x7F92E - Enter secret level
0x7F930 - Collecting a red coin
0x7F932 - Collecting a secret
0x7F934 - Bwee sound
0x7F936 - Enter regular level

Variants
00 = Pause sound
46 = Return to lobby sound
47 = Enter warp pipe sound
48 = Bowsers laugh
49 = Enter secret level
4A = Collecting a red coin
4B = Collecting a secret
4C = Bwee sound
4D = Enter regular level

I also remember knocking out some sort of end detection where the text was always perfect even if I got some wrong. I'll look at this after all the sound is documented.

In NO$GBA Debugger, I found out a little bit of info:
(you can ignore this mess lol)
020B2638 - Branch to functions that load health hud
020AF948 - Beginning of some sort of minigame hud function
020AFA0C - Load Hearts in top left
020AFB0C - Loads "(A) RULES" text at the top. NOP to get rid of that text.
020B036C8 - Loads musical notes when treasure chest is touched
020B0288 - Branch to hud loading stuff
0211B904 - Subtract 1 from the health counter (r1)
0211B908 - Store r1 in r2, r2 being the health address
0211B90C - Update health if wrong treasure chest
0211C678 - set health related?
0211CB00 - set health to 3 on minigame boot
0211C054 - Play Chest Sounds

Sounds use method 0x02011E28

Somewhere below all the co-ordinates, there are sound IDs that are played, setting them all to 00 only plays the pause sound.

____________________
ASMR:
*quietly whispers*
move r0 r7
push r4 to r14
load register r4 into r0
POP


Main - General SM64DS hacking - Minigame Hacking New reply

Page rendered in 0.033 seconds. (2048KB of memory used)
MySQL - queries: 27, rows: 104/104, time: 0.023 seconds.
[powered by Acmlm] Acmlmboard 2.064 (2015-10-07)
© 2005-2008 Acmlm, Xkeeper, blackhole89 et al.