Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,548,704
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 05-06-24 01:20 PM
Guest: Register | Login

Main - Posts by Quick Curly

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

Quick Curly
Posted on 07-03-10 11:43 PM, in General SMB3 Hacking Thread Link | Quote | ID: 132599


Giant Red Paratroopa
Level: 77

Posts: 968/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Tools/utilities:
SMB3 Workshop - To edit the levels, level headers, and object palettes.
SMB3 Map Editor - To edit the World Maps.
SMB3TE - To edit the title screen.
FCEUXD - To edit everything else. Use this to edit palettes for enemies, Mario, Luigi, etc. that cannot be edited in SMB3 Workshop, as well as text, music, etc.

Information/references:
SMB3 Data Crystal Page - For quick ROM and RAM offsets, as well as the locations for palettes and text for editing purposes.
General SMB3 Hacking Thread (This Thread) - Definitely a good read.
SMB3 Music Data-Related Post - For an idea (a rough idea) about music.
A Little SMB3 Data - Another old small post. Mainly only really good for map animation speed (not much).
Small SMB3 Map Editor Pipe Editing Tutorial - A short, simple tutorial showing how to add a pipe system to the World 1 Map.
Small SMB3 Palette Editing Tutorial - A short tutorial showing how to use FCEUXD to edit the World Map palettes. Also refer to my previous post in this thread to take note that the palettes that each World Map uses are determined by the data at ranges 0x1842D-0x18435 (0x9) (object palettes) and 0x18436-0x1843E (0x9) (sprite palettes).
SMB3 Title Screen Palette Definitions - Courtesy of your friendly neighbourhood KP9000.

These links obviously don't cover everything there is to know, but hopefully this post provides you with a decent starting ground and helps you out. If you have any further questions, please feel free to PM me or post your questions in this thread so that others can help you out as well.

Quick Curly
Posted on 07-03-10 11:53 PM, in Happy birthday Quick Curly! Link | Quote | ID: 132600


Giant Red Paratroopa
Level: 77

Posts: 969/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
No worries, Insectduel! Thank you very much! I appreciate the positive wishes!

Quick Curly
Posted on 07-23-10 09:08 AM, in General SMB3 Hacking Thread Link | Quote | ID: 133309


Giant Red Paratroopa
Level: 77

Posts: 978/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Sorry to sound like a downer, but after all the time that's already passed by, I'm not going to bother with the collaborative SMB3 hack idea anymore. Anytime I was trying to get a hold of the people who said that they wanted to participate for ideas, or to simply get started on some basic level editing, they either were never available or they would intentionally not respond. Plus I started on the planned huge tutorial some time ago and asked the others for input/ideas on what they needed help/information on, and no one provided any. I was the only one who was trying to push the project forward, so in such a case, I might as well continue doing stuff on my own which has been the scenario for pretty much the whole time I've been ROM hacking anyway. So whatever. The point of the project was to help them gain some experience. If they don't want to do that, it doesn't upset me or anything. It's their choice. Again, whatever.

On top of that, now that I'm on my midnight schedule (as in, my day is night for the majority of everyone else) I doubt it would work now anyway.

Quick Curly
Posted on 07-28-10 02:02 PM, in General SMB3 Hacking Thread Link | Quote | ID: 133501


Giant Red Paratroopa
Level: 77

Posts: 979/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by zbyte
Oh well. At least you put forth some effort. I think you should finish up your own work as well. I recall you being in the testing stages of your SMB3 hack - is this correct? Sorry if it's not.
No worries. I've been stuck in the finishing stages for what seems like forever. It's difficult and frustrating sometimes having to do everything yourself... I'm getting there though.
Posted by zbyte
I forgot to mention this in my last chapter of a post - and that is that entering a pipe in the special world-specific Bonus Area will take you back to the level you came from. The only way the special pipe won't take you to the special Bonus Area is if you play the main level in another world.
I actually looked into this out of interest. More on that in a bit.
Posted by zbyte
Sorry that you missed out on your 'Nooki!
LOL!
Posted by zbyte
I chop up some unused level data sometimes to use secondary areas or bonus areas. You have to include a 9-byte level header in the number of extra bytes. Is this similar to unused enemy data? Usually I see 01 at the beginning of each enemy data offset; this must be some type of header. Any ideas? Should extra enemy data be handled the same way extra level data does?
Leave the FF that terminates the previous enemy data and replace the FF that follows with a 01. Enemy data doesn't require its own header. The header of the active level loads the enemy data through the appropriate code. The 01 is just there; however you want to put it. The last bit of enemy data terminates at 0xDA74. So you can make use of the free space from 0xDA75 onward. Just remember that the next bank begins at 0xE010, so you can only go as far as 0xE00F, if you even go that far. So I could put a 01 at 0xDA75, and then for whichever level is going to use that enemy data, point to 0xDA75 for the enemy data when loading it up for editing in SMB3 Workshop, or if adding the level to a pointer on your world map in the SMB3 Map Editor. It's pretty self-explanatory, so I don't want to continue rambling and building this wall of text concerning that.

As for the bonus areas... I looked it up out of interest to see where it could be changed in the ROM for whoever could make use of that data. Interestingly, a lot of the set offsets in SMB3 Workshop don't match the true offsets for the object data and enemy data. So here they are as they appear in the ROM (and loaded into RAM):

Underground Bonus Areas

Object Data: 0x3491B - 0x3492A (0x10)
Enemy Data: 0x3492B - 0x3493A (0x10)
Object Set: 0x3493B - 0x34942 (0x8)

Object Data Enemy Data Object Set
$A90B (0x3491B) $A91B (0x3492B) $A92B (0x3493B)
---------------------- ---------------------- ----------------------
AF B1 = 0x1B1BF 76 C9 = 0xC986 0E = Underground
BC B1 = 0x1B1CC 78 C9 = 0xC988 0E = Underground
8B B2 = 0x1B29B 7D C9 = 0xC98D 0E = Underground
72 B3 = 0x1B382 88 C9 = 0xC998 0E = Underground
D8 B3 = 0x1B3E8 90 C9 = 0xC9A0 0E = Underground
70 B4 = 0x1B480 98 C9 = 0xC9A8 0E = Underground
E2 B5 = 0x1B5F2 A3 C9 = 0xC9B3 0E = Underground
5B B6 = 0x1B66B AB C9 = 0xC9BB 0E = Underground

Plains Bonus Areas
Object Data: 0x34B27 - 0x34B36 (0x10)
Enemy Data: 0x34B37 - 0x34B46 (0x10)
Object Set: 0x34B47 - 0x34B4E (0x8)

Object Data Enemy Data Object Set
$AB17 (0x34B27) $AB27 (0x34B37) $AB37 (0x34B47)
---------------------- ---------------------- ----------------------
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains
B8 BD = 0x1FDC8 60 C5 = 0xC570 01 = Plains
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains
68 BD = 0x1FD78 60 C5 = 0xC570 01 = Plains

Posted by one-off hacker
1) Which levels have been completed in the current world in the current game. Obviously this information is held in RAM somewhere, because when you die or beat a level, you go back to the world map, and it still has a record of the levels you've beaten / mushroom houses you've visited / etc. I'm assuming the game doesn't hold all the world map data in RAM while simultaneously holding the current level data in RAM, right?

2) Which level I'm currently in. Obviously the level data is held in the ROM, and the active level data is held in the RAM. I've found the current world in RAM. I've found the current position in a given level held in the RAM. What I can't find is any kind of pointer or value in RAM that I could use to determine the current level. I just need to know where the value is stored, I can reverse engineer how given values relate to give levels myself.

3) The return coordinates for the world map. Like, I'm in a level, and I die. I am returned to the last completed level or the start of the world. Where are the coordinates stored in RAM so that the game knows where to return me to? Does the game store coordinates, or just a pointer to the last completed level in the ROM, which in turn is used to determine the coordinates?
Hopefully the following findings help. There is more data than the specific data you were asking/searching for, but I was planning to post it all anyway, so I'm throwing it all into one collective post.

$0022 - Level length
$0023 - X-coordinate of column after far-right visible column on screen
$0024 - X-coordinate of column before far-left visible column on screen
$0075 - Map: Current Y-position (Mario)
- Level: Current screen number
$0076 - Map: Current Y-position (Luigi)
$0079 - Map: Current X-position (Mario)
$007A - Map: Current X-position (Luigi)
$007B - Remaining pixels for Mario's movement (#$20 = 32 pixels) (counts down as Mario moves)
$007C - Remaining pixels for Luigi's movement (#$20 = 32 pixels) (counts down as Luigi moves)
$007D - Mario's last map movement
01 = Right
02 = Left
04 = Down
08 = Up
$007E - Luigi's last map movement
01 = Right
02 = Left
04 = Down
08 = Up
$00E9 - Current X-coordinate
$00EE - Current character display (ex. 06 = Mario jumping; 4F = Mario jumping with fist in air)
$7950 - Mario's moving speed on map (max = #$18 by holding directional pad down; FF = not moving)
$7951 - Luigi's moving speed on map (max = #$18 by holding directional pad down; FF = not moving)
$7976 - Y-position of current level entered (Mario)
$7977 - Y-position of current level entered (Luigi)
$797A - X-position of current level entered (Mario)
$797B - X-position of current level entered (Luigi)
$797E - Y-position for return point if Mario dies
$797F - Y-position for return point if Luigi dies
$7982 - X-position for return point if Mario dies
$7983 - X-position for return point if Luigi dies
$7D00 - $7D3F - Mario's cleared levels
$7D40 - $7D7F - Luigi's cleared levels
$7DD5 - Last map movement (applies to both Mario and Luigi)
- Tells the game where the player came from to avoid them passing an incomplete level
but allows them to go back
- For example, you reach 1-2, moving from the left. The value is 01 (you moved right)
- This tells the game that you moved from the left. You cannot pass the level in any
other direction
- You can modify this value yourself with a hex editor while viewing RAM
- If we change it to 08, the game thinks we came from below (by moving up), thus we
can move "back" down
- Note: This differs from $7D/$7E. If you try to move in a direction that you cannot move in,
these values still change
$7DFE - $7DFF - Object data for next area (from level header) (ex. 1-1 Bonus: 93 BC = 0x1FCA3)
$7E00 - $7E01 - Enemy data for next area (from level header) (ex. 1-1 Bonus: 06 C0 = 0xC016)
$7EB9 - $7EBA - Object data for current active level (ex. 1-1: 82 BB = 0x1FB92)
$7EBB - $7EBC - Enemy data for current active level (ex. 1-1: 27 C5 = 0xC537)

Additional notes:
-> $7976/$7977 + $797A/$797B are used to determine, if Mario/Luigi dies, from where they begin flying from.

-> $797E/$797F + $7982/$7983 are used to determine where they arrive after dying.


(Click image to enlarge.)

Here's a visual to help get an idea of how the data for the cleared levels per player is stored. Take note that for the bottom two rows, the game seems to determine which of the two rows the clear tile should appear on from the second-to-bottom row (seeing as how the only time the clear tile appears on the very bottom row is if the second-to-bottom row is not a level tile). Be sure to test different things out. I assume that the following rows for both Mario and Luigi apply to other map screens, but note that I did not test that theory out, so it'll be up to you to try that out.

Quick Curly
Posted on 07-29-10 02:02 AM, in General SMB3 Hacking Thread Link | Quote | ID: 133548


Giant Red Paratroopa
Level: 77

Posts: 982/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by zbyte
I don't understand this part. If you leave the FF that ends the main bit of the enemy data, and change the FF that would end the extra enemy data, then the level would load other enemy data, right? I'm not so sure, obviously.
Sorry. I guess the wording was a little incomplete. That was a long post, after all...

I started a little something for someone else a couple days ago, but didn't really get too far with it since a lot of other stuff was going on as well. So if you refer to the images, the instructions finish on an incomplete note. Basically, all that's left to be said is what was actually touched upon in the previous post, being that once you have a new enemy set ready for editing, when loading up the level you're going to be editing in SMB3 Workshop, point to the appropriate offset for the enemy data. There won't be any enemies, but you don't have to worry about any original limit either because you're building on unused space! So add your enemies in, save, and I'd advise double-checking in a hex editor afterward to make sure that everything is how it should be, as well as to find where that new enemy data set ends and where the next one can begin. As I always mention, I also recommend keeping notes in a book or a Notepad text file of any and all custom offsets for object and/or enemy data that you use. And don't forget, when editing pointers in the SMB3 Map Editor, you can easily enter custom offsets as well, so there should be no problem in entering the proper custom offsets for object and/or enemy data.


(Click images to enlarge.)
Posted by zbyte
Where will Einstein Curly's funeral be held at?
The strange thing is, no body was found. So everyone decided to just let it be and carry on with their normal lives.
Posted by zbyte
Hm. The special B0-BF pipes are just like the pipes used to go directly to the "ending" level.
I just noticed in my previous post... I should have noted that the Plains areas were level endings, not necessarily bonus areas. Oh well.
Posted by zbyte
How do you log data like the Map/Level data you posted last? I'm wondering where the offset is located for map animation types...
Do you mean which CHR-ROM banks are used to animate the tiles on the World Maps; or the code that determines which World Maps animate and which do not? If neither, could you please be a little more specific?

Quick Curly
Posted on 08-16-10 06:55 AM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 134450


Giant Red Paratroopa
Level: 77

Posts: 983/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by Trelior
Are you gonna be a crazy SMB3 hacker like your brother?
Posted by Static
Everyone thinks Quick is crazy? ME TOO!
You two really know how to cheer a guy up.

Anyway, welcome to the forum everyone! Hope you enjoy it here!

Just please don't take any cheap shots at me!

Quick Curly
Posted on 08-16-10 09:01 AM, in General SMB3 Hacking Thread Link | Quote | ID: 134456


Giant Red Paratroopa
Level: 77

Posts: 986/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by topchain
I've been making levels and stuff for the NES SMB3. All dungeons are edited. I have 10 extra bytes total out of all of them. How do I change unwanted "sky" levels into dungeons?
You could always change them into Ice levels instead if you prefer Ice levels over Sky levels. This is because they share the same bank though.

Interchangeable:
- Sky & Ice
- Piranha Plant, Giant & Cloudy
- Water & Pipe

1 - Plains: 0x1E509 - 0x2000F
2 - Fortress: 0x2A7F7 - 0x2C00F
*NOTE: 0x2A7F7 - 0x2A866 = 7 End Castles
3 - Hilly: 0x20587 - 0x2200F
4 - Sky: 0x227E0 - 0x2400F -----------------+
5 - Piranha Plant: 0x26A6F - 0x2800F -----+ |
6 - Water: 0x24BA7 - 0x2600F -----+-----+ |
8 - Pipe: 0x24BA7 - 0x2600F -----+-----+ |
9 - Desert: 0x28F3F - 0x2A00F | |
A - Ship: 0x2EC07 - 0x3000F | |
B - Giant: 0x26A6F - 0x2800F -----+ |
C - Ice: 0x227E0 - 0x2400F -----+-----------+
D - Cloudy: 0x26A6F - 0x2800F -----+
E - Underground: 0x1A587 - 0x1C00F

Also to note, there is unused space in a few of the ROM banks for the possible addition of more levels; some have more free space than others.

Free space (in respective order as the banks appear in the ROM, except for Underground
which I will present afterward):

Enemies: 0xDA75 - 0xE00F (0x59B)
Plains: 0x1FFD2 - 0x2000F (0x3E)
Hilly: 0x219FD - 0x2200F (0x613)
Sky/Ice: 0x23FAA - 0x2400F (0x66)
Water/Pipe: 0x257A6 - 0x2600F (0x86A)
Plant/Giant/Cloudy: 0x27FEC - 0x2800F (0x24)
Desert: 0x29F54 - 0x2A00F (0xBC)
Fortress: 0x2BFF6 - 0x2C00F (0x1A)
Ship: 0x2FDE1 - 0x3000F (0x22F)

For the Underground Object Set, there is some free space before some unused levels that were presumably early beta test levels outside of other Object Sets. Since the Underground Object Set comes first in the order of the level banks, it's reasonable to assume that they had it set up first, and they tried some level designs that they discovered would fit more appropriately in the other Object Sets which would soon be created afterward. If you want to view the level designs yourself, punch in the ROM offsets and load the object data sets up in SMB3 Workshop! (Put 0xC016 for the enemy data so that you don't have enemies in the way.)

0x1BADD - 0x1BC3A (0x15E) - Unused space.
0x1BC3B - Shows bits of the end of 1-1 (Plains).
0x1BCA3 - 1-1 Bonus Area (Plains) duplicate!
0x1BCF9 - Seems to be the ending of something; maybe an early Water/Pipe beginning/end.
0x1BD43 - Attempted 3-8 Ending (Plains) from what I can tell.
0x1BD78 - Really seems to be just a mess.
0x1BDC8 - See previous. (Not sure if it's actually a starting offset for something or a part
of the previous data set.)
0x1BDE8 - Attempted horizontal hilly-like level? (Again, not sure if it's really the start of
something.)
0x1BE0B - Looks like 0x1BDE8 only with a light blue background.
0x1BE2F - Messed up early 3-3 (Plains)!
0x1BE58 - Another early 3-3!
0x1BE79 - Another early 3-3! (Wow; how many attempts did they need to take?!)
0x1BFAA - Attempted 3-3 ending by the looks of it.
0x1BFD2 - 0x1C00F (0x3E) - Unused space.

So yeah, since those levels near the end of the Underground bank are unused as well, probably due to being early beta testing material, you can always use the space they occupy to make more levels for your own SMB3 hack. I've been having fun and going a bit overboard with the custom offsets lately in my attempts to FINALLY complete Luigi's Chronicles 2 so that I can FINALLY move onto something else. (Oh, and War in Hell, the Battle City hack that Googie previewed some time ago, was completed on my birthday almost 2 months ago, but I've been holding off on its release so that I can submit Luigi's Chronicles 2 and War in Hell to Romhacking.net together.)

I've used the free space in the Underground and Hilly banks, and I'm going to tackle the Water/Pipe bank next. I don't know how much space I'll actually get to use since I only have a few free bytes left for enemy data, but I definitely foresee it all working out proficiently. Then one more test run and it should be done! (Yeah, sorry about being over a year AFTER I originally predicted. Dang school. )

So I guess that's sort of an... open invitation, maybe? If I'm considerably worth that, that is. Despite the collaborative hack idea which was a failed attempt, I'd still be interested in possible future collaborative SMB3 projects, and considering how it seems SMB3 hacking is pretty dead again otherwise (unfortunately ) I'd like to possibly help to get thingymabobbers rolling again somehow or another... BUT I don't plan on doing anything like I had to go through with Luigi's Chronicles 2 ever again (i.e. doing a crap load of bloody crap all by my bloody self).

Out of curiosity, how are the SMB3 hacking projects for everyone else coming along? Obscure Kingdom (aside from Reuben being held off again due to an overseas shipment of some new mayonnaise)? Luigi's Quest? Mario's Trials? Googie's new SMB3 hacking attempt? Mario Adventure 3?!?!?! Well, anyway, hopefully things get rolling again.

As for the World Map animation-related code, I'll get to that later on if you don't mind. I already spent a while on this post and it's already long enough as it is, so next time. I edited it for Luigi's Chronicles 2, so it's not like I have to take time to search for it; it's just the matter of typing out an explanation for it and whatnot. As well, perhaps I'll post a little ASM-related surprise that can expand one's SMB3 hacking possibilities just a little bit in a way that actually reduces the length of the related code by a couple of bytes. Though yes, those things would best be posted as separate posts for referral purposes. So please post people so that I can post those thingies as well! Later, alligators. And remember - stay out of the water.

Quick Curly
Posted on 08-16-10 09:04 AM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 134457


Giant Red Paratroopa
Level: 77

Posts: 987/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
It was okay, either way. The posts were about the fun.

Thanks for that as well. Makes me feel like I have some sort of purpose after all.

Quick Curly
Posted on 08-17-10 08:28 AM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 134521


Giant Red Paratroopa
Level: 77

Posts: 988/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Welcome back!

Quick Curly
Posted on 01-12-11 05:20 AM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 139108


Giant Red Paratroopa
Level: 77

Posts: 990/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
I'm back from the insane asylum!

I mean... I'm just back!

Quick Curly
Posted on 01-12-11 05:22 AM, in Happy new year everyone! Link | Quote | ID: 139109


Giant Red Paratroopa
Level: 77

Posts: 991/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Even more late, but Happy New Year! Hope that everyone enjoys the months to come and uses them effectively!

Quick Curly
Posted on 01-12-11 05:50 AM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 139112


Giant Red Paratroopa
Level: 77

Posts: 993/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Considerably busy, I suppose, although things have sort of calmed down. I still want to continue hacking SMB3 some more, but with all the other SMB3 hackers disappearing it's sort of a slow process getting back into the swing of things. Hopefully I can be a part of some more wacky adventures around here now. How have you and everyone else been? Did I miss anything?

Quick Curly
Posted on 01-13-11 12:58 PM, in General SMB3 Hacking Thread Link | Quote | ID: 139130


Giant Red Paratroopa
Level: 77

Posts: 995/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
It's been quite a while so things might get a bit messy with me trying to fit everything in...

That Time/Music ASM Hack

It's not a big deal or anything; it's just the one that I implemented into Luigi's Chronicles 2 to allow any amount of "SMB3 time" divisible by 100 "SMB3 seconds", as well as manipulating the music for levels as well. Do note that the music does not speed up to signal/emphasize the remaining 100 seconds if you only set 100 seconds for the time though.

The code to modify is located at 0x3D8C4 in the ROM.

Here is the original code for comparison:

$98B4:B1 61     LDA ($61),Y @ $B467 = #$00
$98B6:29 C0 AND #$C0
$98B8:18 CLC
$98B9:2A ROL
$98BA:2A ROL
$98BB:2A ROL
$98BC:AA TAX
$98BD:BD A8 97 LDA $97A8,X @ $97A8 = #$03
$98C0:8D EE 05 STA $05EE = #$04

This is the modified code:

$98B4:B1 61     LDA ($61),Y @ $B467 = #$41     A: 41  X: 07  Y: 08
$98B6:29 F0 AND #$F0 A: 40 X: 07 Y: 08
$98B8:18 CLC A: 40 X: 07 Y: 08
$98B9:4A LSR A: 20 X: 07 Y: 08
$98BA:4A LSR A: 10 X: 07 Y: 08
$98BB:4A LSR A: 08 X: 07 Y: 08
$98BC:4A LSR A: 04 X: 07 Y: 08
$98BD:AA TAX A: 04 X: 04 Y: 08
$98BE:8D EE 05 STA $05EE = #$04 A: 04 X: 04 Y: 08
$98C1:EA NOP
$98C2:EA NOP

This is how it works. Instead of loading the values that determine the times from somewhere else in the ROM, which limits you to only four possible values, you can now use any amount of time thanks to the modified code and it takes care of it all for you without having to load any other values; just don't go past 9. You can select 0, 4, and 8 in SMB3 Workshop, but for anything else, you'll have to modify it directly in a hex editor yourself, which shouldn't be difficult at all, especially if you end up using a hex editor to modify the code in the first place.

Stuff:

Values to be loaded: 0x 1x 2x 3x 4x 5x 6x 7x 8x 9x

OPERATION HEX DEC 128 064 032 016 008 004 002 001
----------------------------------------------------------------
0x 0- 15 0 0 0 0 x x x x
1x 16- 31 0 0 0 1 x x x x
2x 32- 47 0 0 1 0 x x x x
3x 48- 63 0 0 1 1 x x x x
4x 64- 79 0 1 0 0 x x x x
5x 80- 95 0 1 0 1 x x x x
6x 96-111 0 1 1 0 x x x x
7x 112-127 0 1 1 1 x x x x
8x 128-143 1 0 0 0 x x x x
9x 144-159 1 0 0 1 x x x x

So AND #$F0:

F0 240 1 1 1 1 0 0 0 0

Original - AND #$C0:
C0 192 1 1 0 0 0 0 0 0

The first four bits are used for the time, leaving the last four bits for the music. With the original code, AND #$C0 limited you with only four possible values, as only the first two bits were used.

For the music, here is the original code:

$98C8:B1 61     LDA ($61),Y @ $B467 = #$00
$98CA:29 0F AND #$0F
$98CC:AA TAX
$98CD:BD AC 97 LDA $97AC,X @ $97AC = #$10

This is the modified code:

$98C8:B1 61     LDA ($61),Y @ $B467 = #$41     A: 41  X: 04  Y: 08
$98CA:29 0F AND #$0F A: 01 X: 04 Y: 08
$98CC:AA TAX A: 01 X: 01 Y: 08
$98CD:BD 1B 9F LDA $9F1B,X @ $9F1C = #$20 A: 20 X: 01 Y: 08

As you can see, this is where the original code loaded both the time and music values from $97A8:

$97A8:03 04 02 00
$97AC:10 20 30 40 50 60 70 80 90 0D 09 A9 00 8D 00 07

The reason the final music values might seem odd is because these values weren't actually intended to be loaded for music, but rather it is code following the music values.

$97B7:A9 00     LDA #$00
$97B9:8D 00 07 STA $0700 = #$00

Because of this, I just changed where the game loaded the music values from so that I wouldn't be destroying code, and this allows one to choose which music they want available as well. Here is where the modified code loads the selected music from:

$9F1B:10 20 30 40 50 60 70 80 90 0D 09 0A 00 0E 0F B0

With this combination of values, depending on the value loaded from the active level's header, the following music is possible (of course, you can customize the values as you wish):

Header   Music   Music
Value Value
-----------------------------
0 10 Plains
1 20 Underground
2 30 Water
3 40 Dungeon
4 50 Boss
5 60 Ship
6 70 Battle
7 80 Mushroom House
8 90 Hilly
9 0D Returning to Earth with the Wand
A 09 World 9 Map/Coin Heaven
B 0A Star Power
C 00 No Music
D 0E Game Theme
E 0F Princess Saved
F B0 Bowser Fight

As before, just to show you the possible values, even though AND #$0F is used in both cases and the code doesn't modify the number of possible values, but just for a visual of how it works:

Values to be loaded: x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF

OPERATION HEX DEC 128 064 032 016 008 004 002 001
----------------------------------------------------------------
x0 0 x x x x 0 0 0 0
x1 1 x x x x 0 0 0 1
x2 2 x x x x 0 0 1 0
x3 3 x x x x 0 0 1 1
x4 4 x x x x 0 1 0 0
x5 5 x x x x 0 1 0 1
x6 6 x x x x 0 1 1 0
x7 7 x x x x 0 1 1 1
x8 8 x x x x 1 0 0 0
x9 9 x x x x 1 0 0 1
xA 10 x x x x 1 0 1 0
xB 11 x x x x 1 0 1 1
xC 12 x x x x 1 1 0 0
xD 13 x x x x 1 1 0 1
xE 14 x x x x 1 1 1 0
xF 15 x x x x 1 1 1 1

AND #$0F:

0F 15 0 0 0 0 1 1 1 1

Editing Pipe/Door Pointers

Yes, it's been explained in the past, but this was requested; however, I don't really feel like making a video tutorial so here's a text and visual tutorial instead.

First, you must place a 3-byte pipe/door that can be entered and a 3-byte object which you'll use for its pointer. I normally just place a coin by the pipe/door so that I can change it into a pointer after I know where it will actually lead. Remember that you don't have to edit it into a pointer right away, so don't feel rushed.



Once you know where the exit will be (whether in the same area or another area, to which you must edit the next area in the active level's header accordingly) you'll need to know its horizontal placement in hex, as well as the vertical exit for where Mario/Luigi will appear.

As illustrated below, the starred values are possible exits (although it sometimes varies by a few blocks, but since testing your levels is a given, you'll be able to adjust it accordingly should it be necessary).

To find the horizontal hex position of the object, select it and look in the bottom-right corner to see 3 hex values (4 if it's a 4-byte object, with the additional one being the length). The value you want is the second/middle one. In this example, it's 1A. We also gather that the vertical exit should be 08, and the exit action should be that of a downward pipe.



Select the object to be used as the pointer for your pipe/door, change it to Bank 7, and press the Enter key to bring up the Pointer Properties screen.



Enter the information as required.

As seen in the first image, the pipe that is being entered has a horizontal hex position of 17. This means that the Entrance horizontal is within the range of 10-1F. Note that it's best to stick with one pointer per range/page, as having more than one might cause some undesired aftereffects.

The other 3 variables are for the exiting pipe/door, so that's where you gather the information from, which is why it's essential to know where the exit is before you actually set/edit the pointer. Again, the horizontal hex position is 1A, so that's what you put in for the Exit horizontal. The Exit vertical will be 08, although we'll have to test it out to make sure that no glitch sprites appear, as the pipe should block it if this variable is set properly. Finally, the Exit action will be "2 - Downward Pipe 2". As far as I know, there shouldn't be any difference if you use the "0" downward pipe, but since this is as the game originally does, it's probably a good habit to get used to this instead.



If I need to fix anything that I cannot currently see because of how long this post is already getting, please let me know and I'll try to get around to it when I can...

"Custom Offsets"/Your Own Level Sizes, etc.

Well I've touched upon it in the past, but here's a quick thingymabobber covering it.

If you're starting your hack fresh, this is much easier to manage since you're only just beginning to make your levels. Now, obviously if you stick with just editing the original SMB3 levels, you're restricting yourself to the original object and enemy data set sizes. However, if you clear all of it out before you start editing anything and keep track of the offsets that you use in a written notebook or a text file, you can set your own theoretical limits, and it should prove to be easier to accomplish what you want with your levels in the object and enemy data combination possibilities.

First, you must use a hex editor to clear out all of the original object and enemy data sets in the appropriate ROM banks. By "clearing out", all I really mean is to overwrite all the original data with "FF"s. As for data that the game points to by default, we'll get to that afterward.

Here are the ranges that you can clear out to be used for object/enemy data for the appropriate Object Sets:

          Enemies:  0xC010- 0xE00F (0x2000)
1 - Plains: 0x1E509-0x2000F (0x1B07)
2 - Fortress: 0x2A7F7-0x2C00F (0x1819)
3 - Hilly: 0x20587-0x2200F (0x1A89)
4 - Sky: 0x227E0-0x2400F (0x1830)
5 - Piranha Plant: 0x26A6F-0x2800F (0x15A1)
6 - Water: 0x24BA7-0x2600F (0x1469)
8 - Pipe: 0x24BA7-0x2600F (0x1469)
9 - Desert: 0x28F36-0x2A00F (0x10DA)
A - Ship: 0x2EC07-0x3000F (0x1409)
B - Giant: 0x26A6F-0x2800F (0x15A1)
C - Ice: 0x227E0-0x2400F (0x1830)
D - Clouds: 0x26A6F-0x2800F (0x15A1)
E - Underground: 0x1A587-0x1C00F (0x1A89)

Note: For 6 - Water/8 - Pipe, there is actually a little bit of object data preceding 0x24BA7 (basically just garbage) but it'll be up to you if you want to bother working with it.

Now, there might still be situations where you won't want to use enemies for your levels, so you'll need an enemy data set to point to in that case, similar to what 0xC016 was used for. So at 0xC010, you could simply add the following:

0xC010: 00 FF

Add to your text file for your own records that this can be used for levels with no enemies.

Now you'll need an enemy data set to point to for any Toad's Houses and Bonus Toad Houses. At 0xC012, you can add the following:

0xC012: 01 34 0D 14 FF

You'll have to also change where the game points to for the enemy data. These bytes are located and can be modified at 0x3C967 and 0x3C96E. The original values were 33 and C0 respectively (pointing to $C033 or 0xC043). So in this case, we would change 0x3C967 to 02 so that the game loads the correct enemy data from $C002 or 0xC012.

For the Worldly Hammer Brother Coin Ship, the game loads from offsets determined by the following:

0x19337-0x19346 (0x10) - Object Data ($BC15 = 0x2FC25)
15 BC 15 BC 15 BC 15 BC 15 BC 15 BC 15 BC 15 BC

0x19347-0x19356 (0x10) - Enemy Data ($DA04 = 0xDA14)
04 DA 04 DA 04 DA 04 DA 04 DA 04 DA 04 DA 04 DA

Underground Bonus and Plains Endings were documented earlier in this thread in the following post.

So as for editing levels. Say I want to make a Plains level first. First what I always do is set up the enemy data by replacing the first byte with "01". (I haven't bothered checking to see if SMB3 Workshop might do this itself, although I think it might actually, but this is just my process as it works for me.) After opening up SMB3 Workshop, I put in 0x1E509 for the Object Data and 0xC017 for the Enemy Data. You can now set the level header accordingly, and then add in the objects and enemies that you want.

After you've tested out your level and have it the way you want it, you can check in a hex editor for the ending of the object and enemy data sets. Be sure to continue documenting your object and enemy data offsets as well so that you can set the pointers properly in the SMB3 Map Editor once you're ready to edit and finalize your World Map(s). This is just an example of what your text file might look like:

Custom Offsets
-----------------------------------------------------------------
{NO ENEMIES: 0xC010}

1. 1E509, C012, 1-Plains

2. 20587, C032, 3-Hilly ->
28F36, C064, 9-Desert

3. 1E607, C09C, 1-Plains <->
1A587, C0AD, E-Underground

4. 227E0, C0D6, 4-Sky <->
26A6F, C010, D-Cloudy

5. 228DC, C0FC, 4-Sky [Points to itself]

6. 20727, C11F, 3-Hilly ->
22A34, C14B, C-Ice <->
22B0A, C186, C-Ice

{WORLD 1 UNDERGROUND BONUS PIPE}
1E6A0, C18B, 1-Plains

7. 2A867, C196, 2-Dungeon <->
2A996, C1C2, 2-Dungeon

{TOAD'S HOUSE}
24D70-24DD3, 7-Mushroom [Enemy Data Set Used: C1F1]
[Originally C043]
0x3C967 changed from 33 to E1.
0x3C96E changed from C0 to C1.

{BONUS TOAD'S HOUSE}
2522B-25288, 7-Mushroom {Same Enemy Data Set}

8. 1E7E2, C239, 1-Plains ->
1E6E4, C1F6, 1-Plains ->
1E78E, C22E, 1-Plains

{BOWSER'S CASTLE}
9. 2AA85, C273, 2-Dungeon ->
2AAE2, C28D, 2-Dungeon <->
2ABC7, C2B3, 2-Dungeon

{WORLD 1 COIN SHIP}
10. 2EC07, C2D6, A-Ship ($ABF7, $C2C6) ->
2EE9C, C31A, A-Ship ($AE8C, $C30A) ->
2F1C0, C355, A-Ship ($B1B0, $C345)

(Note that my offsets are different since I fit in the Toad's House differently to make things easier for myself.)

SMB3 Krunk Edition

This is an SMB3 hack that was started by YouTube user dbzisdakrunk, who has since closed his account and abandoned it. I was helping out with it and contributed quite a few levels. However, since he isn't bothering with it anymore, I don't really feel like finishing it by myself, specifically adding in a custom title screen and ending, so I'm going to release it as is.

It's a 1-World SMB3 hack. Consider it a demo, I suppose. Apply the patch to a "Super Mario Bros. (U) (PRG1) [!]" ROM. You can download the IPS patch here.



PHEW! I think that's all... for now.

Quick Curly
Posted on 01-16-11 09:32 AM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 139177


Giant Red Paratroopa
Level: 77

Posts: 997/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by Xeruss
Well as far as SMB3 hackers dwindling, you have something there. Though if I recall correctly KP still does. And sadly no wacky adventures of late. :/ Probably the most notable thing is Stark is gone now...
But yeah I'm doing fine myself, thank you for asking.
Glad to hear that you're doing well then. And wow, everyone seems to be disappearing. Guess the "next stages of life" are happening for everyone around the same time, regardless of age group. Well hopefully some wackiness will come along sooner or later.
Posted by GreyMario
What edge of the earth did DahrkDaiz fall off of, anyway?
The edge resulting from a 'quake'.
Posted by KP9000
And yeah, I still hack SMB3, but progress is slow since I have to hack around some things to get them to work right.
That's cool to hear. Hopefully you'll be able to continue your progress then. Still working on some ASM hacks of your own then?
Posted by Garoslaw
Well, If anything, Welcome back, Mr.Anderson... Quick Curly
Thanks! It's great to hear from you again too! "Say it loud, say it proud!"

P.S. Didn't mean to turn the introduction/leaving/returning thread into a conversation den. I just wanted to express my appreciation of all the hospitality! You guys rock.

Quick Curly
Posted on 01-24-11 04:35 AM, in Introduce yourself here! Don't clog up General Chat... (rev. 2 of 01-24-11 04:37 AM) Link | Quote | ID: 139293


Giant Red Paratroopa
Level: 77

Posts: 1000/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by zbyte
Well, you have to realize that you did have to do with some of it. Why aren't you giving me the same hospitality?
Come again? You just never quit, do you?
You actually have the nerve to ask me that?
I didn't want to bring the drama to the board, but I'm sick of you trying to manipulate the situation and portray me as the bad guy here, and you're obviously never going to let it go unless I set the record straight here.

I helped you with your start with SMB3 hacking. I was never anything but nice and willing towards you. Then - shortly after - I start receiving all these negative, flaming comments from multiple alternate accounts, with them referring right back to you, obviously because you're too much of a cowardly bigot to risk what others would think of you if they actually knew that it was you making those comments with those accounts. Although, considering that you've been banned from here multiple times in the past and there are comments posted directly by you that are evidently similar to the comments made by those alternative accounts, and that one of the accounts, JayMaster0, was the same as your name with your email (Jay Master) it's pretty evident why I would be peeved off of your consistency to play this self-obsessive game of yours.

When my friends and I called you out on obviously being Errdoo, you even apologized to us about it! However, you obviously weren't sincere in meaning a word because then last summer, you started flaming my friends and even my brother again! And you have the nerve to say that I'm not giving you the same hospitality?! Give me a darn reason to!

Quick Curly
Posted on 01-24-11 09:10 PM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 139305


Giant Red Paratroopa
Level: 77

Posts: 1004/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by blackhole89
Quick Curly/zbyte: Can we please keep the drama out of this thread? If you need to keep going at it, do it via PM...
I knew something like that would happen, so that's why I don't even know why he started. I apologize for my involvement, and thank you for understanding, blackhole89.
Posted by sspp03
Hey I'm sspp03, a SMB3 ROM hacker. I started hacking SMB3 ROMs back in 2006 (when the last incarnation of Board2 was in place but died in Feburary 2007.) but none of you knew me because I never regeistered back then since I felt that I wasn't mature enough but I knew many ROM hacking sites such as Jul, ROMHacking.net, and of course, acmlm. I made levels but they were crappy and sucky but now I improved and currently making a SMB3 hack which more details of it will come later in the appropriate section.
Welcome! It's great to know that there are still some SMB3 hackers out there! Best of luck with your new SMB3 hack!

Quick Curly
Posted on 01-24-11 09:16 PM, in Super Mario 64 DS editor Link | Quote | ID: 139306


Giant Red Paratroopa
Level: 77

Posts: 1005/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
I've never played this game myself - only the original on Nintendo 64 - but I have been keeping up with your updates! And yes, it is discouraging when there aren't a lot of posts. I think what you're doing with this program is amazing, Mega-Mario, and there will definitely be people who will be able to make good use of this utility! Best of luck with your continued progress!

Quick Curly
Posted on 01-24-11 10:03 PM, in Introduce yourself here! Don't clog up General Chat... Link | Quote | ID: 139308


Giant Red Paratroopa
Level: 77

Posts: 1006/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Posted by sspp03
Actually, it's two SMB3 hacks Quick Curly.
Cool! That's even more awesome then! The more SMB3 hacks, the better! Hopefully you can show us some progress soon then, whenever you're ready, of course. Best of luck!

Quick Curly
Posted on 01-27-11 04:12 AM, in Revenge of King Koopa (once called Bowser's Revenge) Link | Quote | ID: 139348


Giant Red Paratroopa
Level: 77

Posts: 1008/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
Looks good so far, sspp03. Just to say though, there is an SMB3 hack called Bowser's Revenge by a user named MR207, supposedly created back in 1999 (at least according to the title screen, anyway). You said that you started hacking back in 2006, so that leads me to believe that this is not a revision of that hack, which in that case, I just wanted to let you know that the name has already been taken/used in the past. (There was actually another person who was using the same name over a year ago for his SMB3 hack who I had to inform as well.) Unless you are/were MR207, in which case I apologize for any inconvenience! In addition, best of luck as you continue to work on this series of SMB3 hacks!

Quick Curly
Posted on 01-27-11 10:30 AM, in Music Thread - Listen! Link | Quote | ID: 139351


Giant Red Paratroopa
Level: 77

Posts: 1010/1443
EXP: 4175989
Next: 15140

Since: 06-15-08
From: Earth

Last post: 31 days
Last view: 31 days
I'll just post two quick ones for now.

Intruder X - Drive-Thru Girl (0:26 in)


Bad Acid Trip - Zombie Nation
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47


Main - Posts by Quick Curly

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.294 seconds. (348KB of memory used)
MySQL - queries: 150, rows: 182/200, time: 0.269 seconds.