Acmlm's Board - I2 Archive - Rom Hacking - SMB3 Starting Spaces--Dying and Gamover Fix
User | Post |
beneficii
Posts: 238/567 |
If you've already downloaded the ASM patch, you may want to download it again (download smb3dont.ips if you've already changed the start spaces), as I did some fixing of it. I am now 100% confident that it works. |
Ringodoggie
Posts: 219/281 |
Nice patches you have here benificii. These may come in useful. |
beneficii
Posts: 237/567 |
Remember, all numbers in hexadecimal unless otherwise mentioned!
http://www.freewebs.com/beneficii/startasm.ips
Above is the download of my fix of it. The problem was when you died (and when the starting space wasn't on the first screen) the game would not send you to the other screen. Also, I fixed the gameovers, since the game was not really designed to send you to a screen other than the first. You can now start at any space and get gameover anywhere and it would send you back to the correct starting space in the correct screen.
Now, if you already used the patch and put in values into the xpos and the screenpos values, then download this patch, which will preserve those values:
http://www.freewebs.com/beneficii/smb3dont.ips
Here's the old thread on the subject:
http://board.acmlm.org/thread.php?id=12970
Also, here's how you edit the starting space values for each world. Each world has one byte and the bytes are arranged in a table for worlds one through eight.
3C39A: Starting y position on the world map. yyyy 0000 y = y position in Discombobulator or Workshop + 2
17C88: Starting x position on the world map. xxxx ssss x = x position (low) s = x position (high)
17CAA: Starting position of the screen xxxx x000 x = each scroll of the screen
For some clarification of the 17CAA table, if it has a value of 08, then that is one scroll over (where just to the left of the screen is x position 80), 10 is two scrolls over. To calculate which scroll to use, use the following formula:
x = x position (e.g. 1E0, which would be stored in 17C88 as E1) R = result (use front end estimation--whole number)
R = (x - 40)/80
(Sometimes it works better if you subtract by 60 rather than 40.)
For example: x = 1C0
1C0 - 40 = 180
180/80 =~ 3
Now, take 3 and shift it left (bitwise) 3 times. You will have 18. Store that as the starting position of the screen.
Of course, this is just a recommendation. If your low x position (such as 5) isn't a multiple of 2, then you may be on your own a bit.
If you have any questions or comments, then don't hesitate to post here (unless the thread is old of course, in which case just PM me--and if I think the answer's important enough, I'll post it in a new thread).
EDIT: BTW, thanks to DahrkDaiz for pointing these issues out!
EDIT 2: If you downloaded it already, please download it again. I fixed a slight bug. |
|