Welcome, Guest
You have to register before you can post on our site.



Search Forums

(Advanced Search)

Forum Statistics
» Members: 432
» Latest member: captainphoton
» Forum threads: 1,480
» Forum posts: 8,518

Full Statistics

Online Users
There are currently 72 online users.
» 1 Member(s) | 69 Guest(s)
Bing, Google, Zeraora

Latest Threads
Make it to 10,000
Forum: General Discussion
Last Post: Fifty
08-09-2022, 08:45 PM
» Replies: 2,849
» Views: 2,049,957
Remove Countdown Font [Ve...
Forum: Visual & Sound Effects
Last Post: Vega
08-09-2022, 01:27 AM
» Replies: 0
» Views: 40
Start Boost Modifier [Veg...
Forum: Offline Non-Item
Last Post: Vega
08-09-2022, 01:12 AM
» Replies: 2
» Views: 54
Can someone explain this?
Forum: Code Support / Help / Requests
Last Post: Vega
08-01-2022, 07:43 PM
» Replies: 0
» Views: 162
Waltress (PPC Assembler +...
Forum: Hacking General Discussion
Last Post: Vega
07-30-2022, 11:41 PM
» Replies: 5
» Views: 545
All Mario Kart Wii File N...
Forum: Resources and References
Last Post: captainphoton
07-29-2022, 02:08 PM
» Replies: 2
» Views: 62,109
Mirror Mode TTs [vabold]
Forum: Time Trials & Battle
Last Post: vabold
07-26-2022, 04:46 AM
» Replies: 0
» Views: 147
Boot into any menu [Melg]
Forum: Misc/Other
Last Post: Zeraora
07-26-2022, 03:31 AM
» Replies: 2
» Views: 624
Instruction Breakpoint [V...
Forum: Code Support / Help / Requests
Last Post: Vega
07-24-2022, 01:38 AM
» Replies: 0
» Views: 185
Please help me with code ...
Forum: Code Support / Help / Requests
Last Post: Ryuk
07-22-2022, 02:05 PM
» Replies: 14
» Views: 820

  Remove Countdown Font [Vega]
Posted by: Vega - 08-09-2022, 01:27 AM - Forum: Visual & Sound Effects - No Replies

Remove Countdown Font [Vega]

I'm sure somebody has made this already, but it's not on the forum. So I went ahead and made my own version.

C25C3590 00000003
280E04B0 2B8E04B5
4C41E202 4D820020
9421FFD0 00000000

C25D00B0 00000003
280E04B0 2B8E04B5
4C41E202 4D820020
9421FFD0 00000000

C25CF98C 00000003
280E04B0 2B8E04B5
4C41E202 4D820020
9421FFD0 00000000

C25BE234 00000003
280E04B0 2B8E04B5
4C41E202 4D820020
9421FFD0 00000000

Code creator: Vega
Code credits: WhatIsLoaf (MSG ID's)

#NTSC-U = 805C3590
#PAL = 805D00B0
#NTSC-J = 805CF98C
#NTSC-K = 805BE234

#r14 = current MSG ID

#Check MSD ID one value past both lower and upper bound of IDs for "3", "2", "1", and "GO!"
cmplwi r14, 0x04B0
cmplwi cr7, r14, 0x4B5

#AND the results of both checks
crand 4*cr0+eq, 4*cr0+gt, 4*cr7+lt

#End function if MSG ID is in range

#Original Instruction; make Stack Frame for prologue
stwu sp, -0x0030 (sp)

Print this item

  Start Boost Modifier [Vega]
Posted by: Vega - 08-08-2022, 08:46 PM - Forum: Offline Non-Item - Replies (2)

Start Boost Modifier [Vega]

This code allows you to set what kind of start boost you get at the beginning of the race. There are two different configurations to this code. 1st config effects both you and CPUs. 2nd config allows you to choose between effecting you or effecting CPUs.

ZZZZ = Start Boost 'Index'

ZZZZ Values:
FFFF = Blowout
0000 = No Boost
0001 = Small Boost
0002 = Less Small Boost
0003 = Medium Boost
0004 = Good Boost
0005 = Perfect Boost / Perfect Start

X (2nd config only)

X Values
1 = Code only effects You
0 = Code only effects CPUs

1st Config~
0458F2A8 3880ZZZZ

04595ACC 3880ZZZZ

0459544C 3880ZZZZ

04583B24 3880ZZZZ

2nd Config~
C258F2A8 00000003
2C050001 809F00A0
4X820008 3880ZZZZ
60000000 00000000

C2595ACC 00000003
2C050001 809F00A0
4X820008 3880ZZZZ
60000000 00000000

C259544C 00000003
2C050001 809F00A0
4X820008 3880ZZZZ
60000000 00000000

C2583B24 00000003
2C050001 809F00A0
4X820008 3880ZZZZ
60000000 00000000

Code creator: Vega
Code credits: Stebler (player.h) and Seeky (mkw-structures)

First Source (effects everyone)
32-bit RAM Write: lwz r4, 0x00A0 (r31) changed to li r4, X

Second source

#NTSC-U = 8058F2A8
#PAL = 80595ACC
#NTSC-J = 8059544C
#NTSC-K = 80583B24

#r5 always equals 1 when address is hooked on CPU
cmpwi r5, 1

#Original Instruction
lwz r4, 0x00A0 (r31)

#Branch set for code to only effect you. Change branch to "bne-" to only effect CPUs
beq- the_end

#Set new start boost index
li r4, 5 #Perfect start used for compilation, adjust this accordingly


Print this item

  Can someone explain this?
Posted by: Vega - 08-01-2022, 07:43 PM - Forum: Code Support / Help / Requests - No Replies

Let's say I wrote a code that uses the Hollywood Registers or the GPIO unit.

I've noticed (from the PPC side via a simple Gecko code) if I write something like to light up the Disc Drive or change the output color of the VI_SOLID, it can only take effect via Virtual Mode.

If I execute the same snippets of code in Real Mode or during an Exception, there is zero effect. I've tried loading/storing to 0x0D00XXXX, 0x0D80XXXX, 0xCD00XXXX, and 0xCD80XXXX during Real Mode. No effects/changes happen. The game doesn't crash at all using any of those address schemes, it's just as if the snippets of code don't exist.

Can somebody explain this?

Print this item

  Mirror Mode TTs [vabold]
Posted by: vabold - 07-26-2022, 04:46 AM - Forum: Time Trials & Battle - No Replies

Enables the flag for mirror mode in time trials.

C253056C 00000003
2C180002 40820008
38E00001 90FF0B90
60000000 00000000

C252BA24 00000003
2C180002 40820008
38E00001 90FF0B90
60000000 00000000

C252FEEC 00000003
2C180002 40820008
38E00001 90FF0B90
60000000 00000000

C251E5C4 00000003
2C180002 40820008
38E00001 90FF0B90
60000000 00000000

# 8053056C - RMCP
# 8052BA24 - RMCE
# 8052FEEC - RMCJ
# 8051E5C4 - RMCK

cmpwi r24,2
bne end
li r7,1 # this flag should always be 0 in TTs
stw r7,0xb90(r31)

Print this item

  Instruction Breakpoint [Vega]
Posted by: Vega - 07-24-2022, 01:38 AM - Forum: Code Support / Help / Requests - No Replies

EDIT (7/25/2022): For unknown reasons, this code is having issues on MKWii (problems of IABR being set and 'overusing' Resume button). Code works fine on DBZ BT3. Code will reside in this forum for the time being.

Instruction Breakpoint [Vega]

GCN Port 1 Only

Works for all Wii Games that implement GCN usage. Obviously meant only for real Hardware, code is useless on Dolphin.

This code allows you to set an Instruction Breakpoint on any *Virtual* Address (for noobs: Virtual just means any plain jane address). Once the Breakpoint has been triggered, the game will be halted. At this point, you can press your "Resume" button to continue from the Instruction Breakpoint until you hit the Breakpoint again, thus the game now halts again. The code also has the feature of turning on/off the Instruction BP at any time.

With this code, you can set up an Instruction BP on an address that occurs once every frame, thus having the ability to "Frame-Step" on real Hardware.

  • XXXXXXXX = Instruction BP Address
  • WWWW = Button to Turn On Breakpoint
  • TTTT = Button to Turn Off Breakpoint (there are two TTTT values to fill in, make sure they both match)
  • RRRR = Resume Button (resume Game after a BP hit, but keep the BP on)

Use the WAVEBIRD button values! - https://mariokartwii.com/showthread.php?tid=44

READ THIS: This code is finicky (well at least on MKWii, works perfectly with 0 bugs in DBZ BT3). Sometimes the Instruction BP will refuse to be set (programmer's note: even though I have an isync after all IABR mods in the code...). Best tip to prevent this issue from ever occurring is to never press the Resume or Off button at anytime before you press the On button for its very first time use. Also, none of the buttons have a "one-shot" feature meaning if held down, they are read like "rapid fire". If you hold down the Resume button for "Frame Stepping", you will essentially start corrupting the game. Simply press and quickly release the Resume Button for situations like this, don't hold it down (on DBZ this doesn't matter, I can spam the hell out of the Resume button). If I ever get motivated enough, I'll change all the buttons to be "one-shot". Finally, if the code cannot find the PADRead function for GCN implementation, it will set the screen to a violet color and halt the Wii.

NOTE: This code makes use of the following...
  • Address's 0x800002FE & 800002F4
  • Address's 0x800009EC thru 0x80000A2F
  • Address's 0x80001500 thru 0x8000158F
  • Instruction Address BP Exception Vector
  • Program Exception Vector
  • Decrementer Exception Vector

Make sure no other codes you have equipped are using those items!

C0000000 0000000D
3C60CBFE 6063FCB1
3D808000 618C4000
3C00005F 6000B000
7C0903A6 854C0004
816C0004 7D405A78
7C001800 4182001C
4200FFEC 3C60CD80
3C007FFF 6000FF01
90030024 48000000
3C608000 398C0014
918309EC 3C004E80
60000020 900F0000
4E800020 00000000
C0000000 00000015
3C608000 380F0068
900309FC 9421FF80
7D8802A6 BC810008
800309EC 7C0803A6
60630A00 4E800021
3C608000 A0A30A00
70A0WWWW 40820014
70A0TTTT 41A2001C
38000000 4800000C
800309F0 60000003
7C12FBA6 4C00012C
B8810008 7D8803A6
38210080 4E800020
3C608000 800309EC
7C0803A6 60630A00
4E800021 3C608000
A0A30A00 70A0RRRR
40820018 70A0TTTT
4182FFD8 38000001
3C608000 980302FF
7FE00008 4E800020
06000700 0000005C
880002FF 2C000001
38000000 980002FF
41820014 38000001
980002FE 38000064
7C1603A6 38000000
7C12FBA6 800009F4
7C1A03A6 800009F8
7C1B03A6 BB801580
7F8103A6 7FA903A6
7FCFF120 7FE803A6
B8201504 80001500
4C000064 00000000
C2000900 00000007
7C9043A6 7C800026
7C9143A6 888002FE
2C040001 40820018
38800000 988002FE
808009F0 60840003
7C92FBA6 7C9142A6
7C8FF120 00000000
06001300 00000034
BC001500 7FE802A6
7FC00026 7FA902A6
7F8102A6 BF801580
7C1A02A6 900009F4
7C1B02A6 900009F8
800009FC 7C1A03A6
4C000064 00000000

Code creator: Vega



#RAM Write (place Instruction BP at EVA 0x800009F0)



#This C0 ASM (only executed once) will use a crude XOR checksum mechanism to find the game's PADRead function

#Set crude/nooby XOR checksum
lis r3, 0xCBFE
ori r3, r3, 0xFCB1

#Set Start Address for Search
lis r12, 0x8000
ori r12, r12, 0x4000

#Set Search Loop Ammount
#817F0000 - 80004000 = 17EC000
#17EC000 / 4 = 5FB000 amount of words to search
lis r0, 0x005F
ori r0, r0, 0xB000
mtctr r0

#Search Loop
lwzu r10, 0x4 (r12)
lwz r11, 0x4 (r12)
xor r0, r10, r11
cmpw r0, r3
beq- found

#Not yet found
bdnz+ search_loop

#If not found, make the screen violet
lis r3, 0xCD80
lis r0, 0x7FFF
ori r0, r0, 0xFF01
stw r0, 0x0024 (r3)
b 0x0 #Halt

#Found it
lis r3, 0x8000
addi r12, r12, 0x14
stw r12, 0x09EC (r3)

#Make it to where this C0 only executes once. We don't need to update the cache. Once next frame occurs and this C0 is executed again, cache will be updated by that time. Thus, C0 code will simply execute just a blr and return back to the Gecko Code Handler
lis r0, 0x4E80
ori r0, r0, 0x0020
stw r0, 0 (r15)

#Typical C0 ending blr. Uncomment this if NOT compiling with PyiiASMH.



#This C0 ASM will allow the user to turn on/off the IABR. Also there is a 'packet' of code within this C0 code that serves as a landing point (from the IABR exception routine). This packet of code will keep the game 'frozen' and constantly read the output of PADRead to see if the user presses the Resume or Turn-off-IABR button.

#User Fill in Values (FILL THESE IN FOR YOUR NEEDS!!!)
.set button_act, 0x0010 #Z button used for default compilation
.set button_deact, 0x0400 #X button used for default compilation
.set button_resume, 0x0800 #Y button used for default compilation

#IBAR SPR Number, and BE+TE updates for BreakPoint Address
.set IABR, 1010

#Store Location of this C0's Fake exception vector
lis r3, 0x8000
addi r0, r15, fake_vector_entrypoint_margin #r15 points to start of current C0 which is typical Gecko Code Handler protocol
stw r0, 0x09FC (r3)

#Make Frame
stwu sp, -0x80 (sp)
mflr r12 #r12 doesn't need to be preserved in C0 Codes
stmw r4, 0x8 (sp) #r0 and r3 don't need to be preserved in C0 Codes

#Check IABR Activator/Deactivator; load PADRead func
lwz r0, 0x9EC (r3)
mtlr r0
ori r3, r3, 0x0A00 #Only arg for PADRead, where to dump contents

#Was activator/de-act at least pressed?
lis r3, 0x8000
lhz r5, 0x0A00 (r3)
andi. r0, r5, button_act
bne- turn_on_iabr
andi. r0, r5, button_deact
beq+ pop_frame

#Deact was pressed. Turn off IABR
li r0, 0
b update_iabr

#Act was pressed. Turn on IABR
lwz r0, 0x09F0 (r3) #r3 already 0x80000000
ori r0, r0, 3

#Write to IABR
mtspr IABR, r0

#Pop Frame
lmw r4, 0x8 (sp)
mtlr r12
addi sp, sp, 0x80

#End C0 (rest of C0 code acts as a fake exception vector for IABR, code below will get executed if IABR gets trigged


#Assembler Macro Equation to get 16-bit Immediate Value for the earlier addi instruction
fake_vector_entrypoint_margin = fake_vector_entrypoint - _start

#Fake exception vector called by IABR
#Setup Arg and call PADRead
lis r3, 0x8000
lwz r0, 0x9EC (r3)
mtlr r0
ori r3, r3, 0x0A00

#Was Resume Button at least pressed?
lis r3, 0x8000
lhz r5, 0x0A00 (r3)
andi. r0, r5, button_resume
bne- invoke_program_exc

#Was Deact Button at least pressed?
andi. r0, r5, button_deact
beq+ call_pread

#Set special flag (KEEP IABR OFF) to make sure IABR isnt auto turned back on later after be temped turned off in the Program Exception Vector
li r0, 1
lis r3, 0x8000
stb r0, 0x2FF (r3)

#Button was at least pressed, invoke the Program Exception handler
#This instruction is really neat!


#START ASSEMBLY (06 String Write)

#This 06 String Write is the code that will be executed in the Program Exception Vector due to the trap instruction from the above C0 code. It will temp turn off IABR, so the instruction (that was BP'd) can be executed. If the user pressed Resume, it will set a special flag for the Decrementer Exception to handle. The Decrementer is set and will break shortly after thee Program Execption has ended.

#0x700 (Program Exception Vector)

#We arrive here if resume button was pressed because we need zero interrupts plus an ability to jump to other addresses w/o having to use the CTR or LR. Since program exception never gets called under regular circumstances, we can freely write to it in any arbritary sense for w/e we need to do

#SPR Variable Names
.set IABR, 1010

#Check Keep IABR OFF EVA flag if IABR was turned off during fake exception C0 vector
lbz r0, 0x2FF (r0)
cmpwi r0, 1
li r0, 0
stb r0, 0x2FF (r0) #Auto reset flag
beq- skip_dec_stuff

#Set DEC flag in EVA and set Decrementer amount to alarm, which will re-turn on IABR
li r0, 1
stb r0, 0x02FE (r0)
li r0, 100 #Should be enough to where it won't flag before this interrupt ends
mtdec r0

#Temp turn off Instruction BP until DEC exception is called
li r0, 0
mtspr IABR, r0 #We don't need as isync afterwards as rfi is instruction-synchronizing

#Place back in address to resume game at (the address IABR/DAR broke on)
lwz r0, 0x09F4 (r0)
mtsrr0 r0

#Place back in original MSR
lwz r0, 0x09F8 (r0)
mtsrr1 r0

#Epilogue for the IABR exception call, restore everything
lmw r28, 0x1580 (r0)
mtxer r28
mtctr r29
mtcr r30
mtlr r31
lmw sp, 0x1504 (r0) #Can't due lmw r0 with a source register of 0
lwz r0, 0x1500 (r0)

#End exception, resume game!



#Yes! this is a C2 Insert ASM Code. This C2 ASM (injected at the Decrementer Exception) will see if the special flag (from Resume button being pressed) is present. If so, it will flip back the IABR on.

#0x900 (Decrementer Exception Vector)

#This gets called sometime after the Program Exception has ended
#We need a way (w/o interference per say) to turn back on the Instruction BP shortly after the Trap Exception has ended
#We can't do this during the Program Exception or else IABR will just keep re-triggering the moment we leave the Program Exception, thus we end up in an infinite loop
#We can use the Decrementer Exception Vector as long as we have a flag check of some sorts
#SPR Variable Names
.set IABR, 1010

#Default/Original Instruction, backup r4 into spare register #0
mtsprg0 r4

#Backup CR into spare register #1
mfcr r4
mtsprg1 r4

#Check DEC flag in EVA
lbz r4, 0x2FE (r0)
cmpwi r4, 1
bne- end_code

#Reset flag
li r4, 0
stb r4, 0x02FE (r0)

#Turn back on IABR, we don't need as isync afterwards as rfi is instruction-synchronizing
lwz r4, 0x09F0 (r0)
ori r4, r4, 3
mtspr IABR, r4

#Recover CR, don't recover r4 due to original instruction saving it in sprg0, r4 is being overwritten later anyways
mfsprg1 r4
mtcr r4


#START ASSEMBLY (06 String Write)

#This ASM occurs when the BP is hit, and it will save/backup everything, then jump to the 'packet' of code in the C0 code that was explained earlier.

#0x1300 (IABR Exception Vector)

#r0 as source register for load/stores is treated as literal zero

#Backup everything that can be effected
stmw r0, 0x1500 (r0)
mflr r31
mfcr r30
mfctr r29
mfxer r28
stmw r28, 0x1580 (r0)

#Save srr0 (BP address) to 0x800009F4 (physically)
mfsrr0 r0
stw r0, 0x09F4 (r0)

#Save srr1 (breakpoint MSR) to 0x800009F8 (physically)
mfsrr1 r0
stw r0, 0x09F8 (r0)

#Load address to jump to Fake Exception Vector of C0 that initially setup the IABR
lwz r0, 0x09FC (r0)
mtsrr0 r0

#Call fake Vector! Pretty cool to call a function via rfi, ha.


Print this item

  Win VR/BR When Disconnecting [Unnamed]
Posted by: Unnamed - 07-08-2022, 09:26 AM - Forum: Online Non-Item - Replies (4)

Win VR/BR When Disconnecting [Unnamed]

As the name says, this code makes you win VR/BR if a DC occur. It gives you the same amount of VR/BR as if you would finish first.

04529DA4 4BFFEF01

0452E8EC 4BFFE82D

0452E26C 4BFFE82D

0451C944 4BFFE82D

## "bl Lower_Matrix_VrBr_Change_Calculation" changed to "bl Upper_Matrix_VrBr_Change_Calculation". This way, the VR/BR changes for an overall Victory is computed. ##

Code Creator: Unnamed

Print this item

  Flap Timer [Hibyehello]
Posted by: Hibyehello - 07-06-2022, 07:57 PM - Forum: Time Trials & Battle - No Replies

Flap Timer [Hibyehello]

Freezes the timer until the specified lap

* This code is not 100% accurate, it is accurate to around the frame

C2530DE0 00000006
3CA0809C 80A58F70
2C050000 41820020
80A5000C 80A50000
A0A50024 2C05000L
38000000 40820008
88030041 00000000

C2535928 00000006
3CA0809C 80A5D730
2C050000 41820020
80A5000C 80A50000
A0A50024 2C05000L
38000000 40820008
88030041 00000000

C25352A8 00000006
3CA0809C 80A5C790
2C050000 41820020
80A5000C 80A50000
A0A50024 2C05000L
38000000 40820008
88030041 00000000

C2523980 00000006
3CA0809B 80A5BD70
2C050000 41820020
80A5000C 80A50000
A0A50024 2C05000L
38000000 40820008
88030041 00000000

Change L to specify the Lap to unfreeze the timer

.set NTSCURaceInfoPtr, 0x809b8f70
.set PALRaceInfoPtr, 0x809bd730
.set NTSCJRaceInfoPtr, 0x809bc790
.set NTSCKRaceInfoPtr, 0x809abd70

# NTSCU Hook address 0x80530DE0
# PAL Hook address 0x80535928
# NTSCJ Hook address 0x805352A8
# NTSCK Hook address 0x80523980

    lis r5, NTSCURaceInfoPtr@ha
    lwz r5, NTSCURaceInfoPtr@l(r5)
    cmpwi r5, 0
    beq the_end
    lwz r5, 0xC(r5)
    lwz r5, 0x0(r5)
    lhz r5, 0x24(r5)

    cmpwi r5, 0x2
    li r0, 0
    bne the_end

    lbz r0, 0x0041(r3)


Print this item

  Upper/Lower VR/BR Change Matrix Modifier [Unnamed]
Posted by: Unnamed - 07-06-2022, 08:34 AM - Forum: Online Non-Item - Replies (2)

Upper/Lower VR/BR Change Matrix Modifier [Unnamed]

This code modifies the positive and/or the negative Values of the VR/BR Change Matrix. An Explanation what that means is found below.

04528D3C 3860XXXX
04528DEC 3860YYYY

0452D1B0 3860XXXX
0452D260 3860YYYY

0452CB30 3860XXXX
0452CBE0 3860YYYY

0451B208 3860XXXX
0451B2B8 3860YYYY

XXXX Values = New positive Values in Hex
YYYY Values = New negative Values in Hex

To understand how this code works I have to explain you briefly how the calculation of the VR/BR change works:

"For the purposes of rating calculation, each player is paired individually with each other player and a change is computed. The winner of those two players gains rating according to the change value and the loser of those two players loses rating according to the change. The total change in rating is simply the sum of the losses and gains of that player." (from wiki.tockdom.com/wiki/Player_Rating)

All the changes can be summarized in a Matrix containing the changes of all players. In the upper part of the Matrix, all positive Values are found, in the lower part of the Matrix, all negative Values are found. I have an example for you (this was calculated using Wiimms SZS tools, credits to Wiimm for his Tools):

              9000  8000  7000  5000    Sum
1. 9000     X       +9     +6      +2     +17
2. 8000    -9        X      +9      +4     +4
3. 7000    -6       -9       X       +6      -9
4. 5000    -2       -4      -6        X       -12

The new code now modifies the entries of the matrix. The upper code line changes all Values of the upper part of the Matrix, the blue values. The lower code line changes all Values of the lower part of the Matrix, the red values.
You can use this code for example to modify the lower part to 0, so that you will not be able to lose VR/BR anymore.

Important Note: Only you will see the effects on your screen. Other players will still have normal VR/BR Changes.

Code Creator: Unnamed

Print this item

  Please help me with code that doesn't understand the principle at all.
Posted by: Ryuk - 07-06-2022, 01:39 AM - Forum: Code Support / Help / Requests - Replies (14)


Print this item

  Waltress (PPC Assembler + Disassembler)
Posted by: Vega - 07-04-2022, 03:40 PM - Forum: Hacking General Discussion - Replies (5)


The first ever PPC Assembler+Disassembler that's entirely handwritten in PPC. It is 100% Broadway compliant. Waltress is also a Gecko Cheat Code compiler.

Current version: 0.5

[Image: waltressAPP.jpg]
[Image: waltressHBC.jpg]

Why the name Waltress? Waltress is one of Daysha's cats, and she is a shy black & brown long hair cat with a gigantic fluffy tail. Waltress is also the site mascot.

Waltress is designed for raw PPC assembling+disassembling. She can also compile+decompile certain Gecko Cheat codes.

This was a personal 'proof-of-work' for me, that I have decided to release. Enjoy? (lol)

To run Waltress you will need the following~
  • The Waltress HBC Application (Waltress folder; included in the Download link further below)
  • code.txt or code.bin (if disassembling)
  • source.s (if assembling)

Please be aware that strict formatting is required for the source.s and code.txt files. The only requirements for the code.bin file is that it can only contain assembled PPC instructions (and Gecko related stuff if applicable), nothing else.

Regarding the compilation of Gecko Cheat Codes, Waltress requires "Gecko Headers" to be included in the source.s. These "Gecko Headers" are a unique aspect of Waltress. 

Here's the Waltress Package Download Links~

https://mariokartwii.com/downloads/Waltress07302022.zip (v0.5)
https://mariokartwii.com/downloads/Waltr...022sha.txt (sha256sum hash for verifying download if desired)

I cannot stress this enough... READ THE README and READ THE FORMAT.txt!!! Do not skim over those documents, read them.

Old version downloads and hashes:




Quick guide on how to run Waltress~

1. Download the Waltress07302022.zip package.
2 (optional). Verify download with provided Hash.
3. Unzip the Download, there will be the following folders & files...
  • Engine
  • Examples
  • Source-HBC
  • Waltress
  • ERRORS.txt
  • FORMAT.txt (***READ THIS***)
  • HISTORY.txt
  • LICENSE.txt
  • README (****READ THIS****)

4. Copy-paste Waltress folder inside the apps folder of your SD/USB device.
5. Place your code.txt/bin or source.s file into apps/Waltress of SD/USB device.
6. Plug SD/USB device into Wii. Launch HBC.
7. Launch Waltress, follow the on-screen instructions.

Waltress HBC App has only been tested on Wii and Dolphin Emulator (virtual SD). It has not been tested on the Wii-U. Yes, you can compile the HBC App from its source. Guide for that is in the README.

The handwritten source files (for the 'Engine') are in the Engine folder. They are main_asm.s and main_dasm.s. These files are HUGE!!! Have fun reading over them. There will also be leftover scrap notes and comments that may not make sense. You can assemble the handwritten source files using Legacy version of PyiiASMH (RAW option).

And finally...

**YES**, you CAN disassemble & re-assemble Waltress using Waltress!! Smile What would be the point of releasing this if she couldn't preform such a task? Guide for that is in the README.

Video demo:

Print this item