There are multiple versions of Super Mario Bros. 3. To make sure we're talking about the same version, please use this process to provide the hash info: Go to
romhacking.net/hash and drag the original starting version of the Super Mario Bros. 3 NES file you are using into the "Load a ROM" spot. Once the results appear, click the copy button (the icon of two sheets of paper that is just to the right of the "Load a ROM" button) and paste the results in a message here.
Around 0x30CCD I change the bytes from A9 00 8D 46 07 8D 47 07 to A9 01 8D 26 07 EA EA EA
Can you give any more info about how you came up with this change?
...
I looked at the
captainsouthbird Disassembly of Super Mario Bros. 3 that is on GitHub. It is for the version "Super Mario Bros. 3 (USA) (Rev 1)". The download includes the nesasm assembler.
A "listing file" shows every line of the assembly code in one file, and each line starts with a bank number and CPU address and the hex bytes of the assembled code. I figured out the following process to make a listing file from this disassembly:
1. At the top of the smb3.asm file, add the following line:
.list
(That's space dot list )
2. In a Command Prompt window, change to the folder where the files are located and enter the following command:
nesasm -m -l 2 smb3.asm
This will generate a listing file called smb3.lst
(The -m option expands the macros. The code uses macros to create some shortcut fake instructions, BLT BGE BLS BGS ADD SUB NEG.
The -l 2 option generates the listing with every byte shown for .byte statements.)
...
If you look in the smb3.asm file and search for
.bank you'll find the start of the statements that map each of the 32 PRG ROM banks to a CPU address window. You can use this information to convert between NES file offsets (or PRG ROM addresses) and the bank and CPU address format. I can explain more about how to do this kind of conversion if you want.
...
Status: So far, I've figured out some changes that causes the "2 PLAYER GAME" main menu item to start a one-player Luigi game and will get Luigi to start on the right square, but you still have to use Controller 2 to control Luigi. And I can see various other code that updates things for both players in a 2-player game that probably needs to be changed so it always updates things for Luigi in a 1-player Luigi game, but I haven't done a complete search and tested changing everything like that yet.
I want to write up my findings so far, but first I want to make sure we're talking about the same version, and discuss how you came up with your change.
Also, you mentioned the Super Mario Bros. 3 hack Bio World. Have you looked at it to try to see how it does it? Maybe we can see if it might be doing something simpler.