Not if you use an instant win code. It may not be fun but you'll never lose!

Here's today's hack:
Attachment:
File comment: FTW
mk64 hex dump hack.jpg [ 49.98 KiB | Viewed 20327 times ]
I added a bigass realtime memory viewer routine.

Still only works in 1-player mode though. Above the hex dump is two numbers, the first is the address you're viewing and the second is how much the address will change by when you press up or down on the D-pad. Left or right changes this amount. Be careful, going outside of RAM crashes the game.
This doesn't seem to work in Mupen64, probably because I don't see a way to force it to use the Expansion Pak.
Code:
D2400000 0080
81400000 8000
81001614 0810
81001616 0040
81400100 3C1B
81400102 8040
50001004 0004
81400106 1000
50000804 0001
81400104 AF61
50000604 0001
81400124 AF6D
8140013C AF6B
81400140 AF79
81400144 0C01
81400146 5DC4
81400148 AF7F
8140014A 1040
8140014C 2419
8140014E 0040
81400150 AF79
81400152 0004
81400154 AF79
81400156 000C
81400158 2404
8140015A 00B8
8140015C AF64
8140015E 0008
81400160 8F72
81400162 0000
81400164 3C0D
81400166 800F
81400168 85AD
8140016A 6916
8140016C 8F6F
8140016E 0010
81400170 31AE
81400172 0200
81400174 540E
81400176 000A
81400178 000F
8140017A 7840
8140017C 31AE
8140017E 0100
81400180 540E
81400182 0007
81400184 000F
81400186 7843
81400188 31AE
8140018A 0800
8140018C 540E
8140018E 0004
81400190 024F
81400192 9022
81400194 31AE
81400196 0400
81400198 540E
8140019A 0001
8140019C 024F
8140019E 9020
814001A0 3C0E
814001A2 8000
814001A4 024E
814001A6 9025
814001A8 AF72
814001AA 0000
814001AC 500F
814001AE 0001
814001B0 240F
814001B2 0001
814001B4 AF6F
814001B6 0010
814001B8 2764
814001BA 0004
814001BC 2485
814001BE 0004
814001C0 2411
814001C2 0003
814001C4 2407
814001C6 0010
814001C8 0C01
814001CA 5D8B
814001CC 0240
814001CE 3025
814001D0 2407
814001D2 0010
814001D4 0C01
814001D6 5D8B
814001D8 8F66
814001DA 0010
814001DC 8F70
814001DE 0008
814001E0 2610
814001E2 0009
814001E4 AF70
814001E6 0008
814001E8 8F79
814001EA 000C
814001EC AF79
814001EE 0004
814001F0 2410
814001F2 0007
814001F4 9246
814001F6 0000
814001F8 0006
814001FA 3103
814001FC 0C01
814001FE 5D8B
81400200 2407
81400202 0010
81400204 8F66
81400206 0004
81400208 24C6
8140020A FFF8
8140020C AF66
8140020E 0004
81400210 9246
81400212 0000
81400214 30C6
81400216 000F
81400218 0C01
8140021A 5D8B
8140021C 2407
8140021E 0010
81400220 2610
81400222 FFFF
81400224 0601
81400226 FFF3
81400228 2652
8140022A 0001
8140022C 8F70
8140022E 0008
81400230 2610
81400232 0009
81400234 2631
81400236 FFFF
81400238 0623
8140023A FFEB
8140023C AF70
8140023E 0008
50000804 0001
81400240 8F61
50000604 0001
81400260 8F6D
50001104 0004
81400242 1000
81400278 8F6B
8140027C 8F79
81400280 8F7F
81400284 0800
81400286 0587
81400288 9484
8140028A C520
Code:
80001614:
j 80400100
80400100:
;save regs
LUI $K1, 8040
SW $AT, 1000($K1) ;yes, the text/number routines
SW $V0, 1004($K1) ;appear to use all of these. @_@
SW $V1, 1008($K1) ;fortunately we can shrink this
SW $A0, 100C($K1) ;block using 50-type codes, because
SW $A1, 1010($K1) ;the output is largely sequential.
SW $A2, 1014($K1)
SW $A3, 1018($K1)
SW $T0, 101C($K1)
SW $T5, 1020($K1)
SW $T6, 1024($K1)
SW $T7, 1028($K1)
SW $S0, 102C($K1)
SW $S1, 1030($K1)
SW $S2, 1034($K1)
SW $T3, 1038($K1)
SW $T9, 103C($K1)
JAL 80057710 ;load font
SW $RA, 1040($K1)
;set coords
ADDIU $T9, $zero, 0040
SW $T9, 0004($K1) ;xpos
SW $T9, 000C($K1) ;init xpos
ADDIU $A0, $zero, 00B8
SW $A0, 0008($K1) ;ypos
LW $S2, 0000($K1) ;start addr
;handle dpad
LUI $T5, 800F
LH $T5, 6916($T5) ;buttons pressed
LW $T7, 0010($K1) ;addr adjust
ANDI $T6, $T5, 0200 ;left?
BNEL $T6, $zero, .update
SLL $T7, $T7, 0001 ;double amount
ANDI $T6, $T5, 0100 ;right?
BNEL $T6, $zero, .update
SRA $T7, $T7, 0001 ;halve amount
ANDI $T6, $T5, 0800 ;up?
BNEL $T6, $zero, .update
SUB $S2, $S2, $T7 ;decrease address
ANDI $T6, $T5, 0400 ;down?
BNEL $T6, $zero, .update
ADD $S2, $S2, $T7 ;increase address
.update:
LUI $T6, 8000
OR $S2, $S2, $T6
SW $S2, 0000($K1) ;update addr
BEQL $T7, $zero, .write
ADDIU $T7, $zero, 0001 ;set to 1 if 0
.write:
SW $T7, 0010($K1) ;update amount
;point to coords
ADDIU $A0, $K1, 0004
ADDIU $A1, $A0, 0004
ADDIU $S1, $zero, 0003 ;# rows (zero-based)
;print address
ADDIU $A3, $zero, 0010 ;base 16
JAL 8005762C ;Print addr
OR $A2, $S2, $zero ;copy address to A2
;print adjustment amount
ADDIU $A3, $zero, 0010 ;base 16
JAL 8005762C ;Print amount
LW $A2, 0010($K1)
;advance Y pos
LW $S0, 0008($K1)
ADDIU $S0, $S0, 0009
SW $S0, 0008($K1)
.loop:
LW $T9, 000C($K1) ;init xpos
SW $T9, 0004($K1) ;reset X pos
;print row
ADDIU $S0, $zero, 0007 ;bytes/row (zero-based)
.row:
LBU $A2, 0000($S2)
SRA $A2, $A2, 4
JAL 8005762C ;Print high digit
ADDIU $A3, $zero, 0010 ;base 16
LW $A2, 0004($K1) ;bring the X pos back 8 pixels,
ADDIU $A2, $A2, FFF8 ;since the number routine puts
SW $A2, 0004($K1) ;a space after the number.
LBU $A2, 0000($S2)
ANDI $A2, $A2, 000F
JAL 8005762C ;Print low digit
ADDIU $A3, $zero, 0010 ;base 16
ADDIU $S0, $S0, FFFF ;decrement byte count
BGEZ $S0, .row
ADDIU $S2, $S2, 0001 ;increment address
;done row, advance Y pos
LW $S0, 0008($K1)
ADDIU $S0, $S0, 0009
ADDIU $S1, $S1, FFFF ;decrement row count
BGEZL $S1, .loop
SW $S0, 0008($K1)
;restore regs
LW $AT, 1000($K1)
LW $V0, 1004($K1)
LW $V1, 1008($K1)
LW $A0, 100C($K1)
LW $A1, 1010($K1)
LW $A2, 1014($K1)
LW $A3, 1018($K1)
LW $T0, 101C($K1)
LW $T5, 1020($K1)
LW $T6, 1024($K1)
LW $T7, 1028($K1)
LW $S0, 102C($K1)
LW $S1, 1030($K1)
LW $S2, 1034($K1)
LW $T3, 1038($K1)
LW $T9, 103C($K1)
LW $RA, 1040($K1)
j 8000161C
LHU $A0, C520($A0)
Yeah, fucking long code, even after I shrunk all that register saving/restoring with 50-type codes. (Hm, Enhacklopdia article? I don't think I've seen anyone do that before...)
Oh yeah and I forgot to mention last time these codes are not to be hosted on GSCentral or any site or work run by Rune or his associates, DIAF, etc etc etc.