Register | Login | |||||
Main
| Memberlist
| Active users
| Calendar
| Chat
| Online users Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album |
| |
0 users currently in ROM Hacking. |
User | Post |
Koolboyman Posts: 39/47 |
200 levels? Thats awesome, looking forward to it. Great job on expanding the levels, the original was 128 (4 types of levels), and x80 was the same as x00. I'll be looking forward to it. |
The 13th Prodigy Posts: 94/133 |
That's some seriously awesome crap. I rarely ever see a Superstars hack...this is definetely worth playing when it arrives. |
beneficii Posts: 215/310 |
DJ Bouche,
I was thinking about the same thing. Creating something that just allows you to set the objects/sprites and put what kind they are, then it would generate the level data that you could tell it to put back in the game. You could also tell it to load certain data and you can view the interface. I'm actually seriously considering opening up Bloodshed Dev C++ and getting to work on an editor like this. I already have something ideas about how the interface would be handled. Now, to just go about doing this, especially with work and school starting back up.... |
DJ Bouche Posts: 109/111 |
If you override the 3 memories addresses related to level type and such, then level numbers and map type won't matter anymore (I have code to do this), instead you will have 3 tables defining the level type, music, and background/tileset selection for each 128 levels. The "last bit" in the area number is actaully unused because of the exit pipe sprites. As you might know, the level format specifies the Most significant bit of the object/sprite number specifies that the object is the first object of the next page, the area number happens to be in place of the object number in this case. You'd have to asm hack the sprite loading engine to use 4 byte probably, shouldn't be too bad and I was planning to do it myself. Otherwise, levels 80-FF are just identical to 00-7F.
What I might try doing later on after implementing the full 00-FF level system, perhaps go for a 9-bit (like SMW) or 15-bit area numbers. Random access seems like a good idea to fit more levels. I thought about "alternate exits" bringing up alternate levels (eg 1-3A, or maybe even just 1-A, 1-B, etc like in NSMB for the NDS), maybe you could work something like that. Of course you can to using alphabet worlds too I'll be happy to beta test and look at the code, in fact, this inspires me to start taking a look at the game again, which I think i'm going to do yet again. I'm thinking about a simplistic editor that would at least just allow designing the levels and not necessarily nice and graphical to start off with, but no promises on that (don't want to put too many projects on hand :x). |
spel werdz rite Posts: 1256/1796 |
Good work explaining it DJB. As you would probably know, the last bit in the map data seems useless. I'll probably use it for more map types. DJ, I will make you a beta tester if you like.
Progress: I've hit a snag in level designing. As DJ knows, I'm limited to 32 levels for each map "type" so I can only do 32 Ground levels which can slow me down a bit. So I'm thinking of making a table for writing the map number consistently, so I can have 100 ground levels if I please. Either way, I'll be sending DJ Bouche the code to my level addressing since he seems to have the best idea of what's going on. This should also help him with his own level stuff. As for the invulnerable Fire Bar, I guess I can use the three non-moving to do this, so I don't have to sacrfice the old ones. My current progress is W1-6. I'm adding more than 4 levels to the first world so I actually can fit 200+ levels. I'm thinking of Random access levels and new physics for Luigi. I've also got Mario to run a little faster now. I've also found the GFX data, so there is a 99.9% chance that ExGFX will exist. I just need to find the STD GFX (Blocks, Coins, etc). Their indexed in every level, so they weren't in the same area. |
Chibi Gatomon Posts: 61/68 |
This looks promising, if an editior does rise from this I'd love to make an snes version of my smb 1 hack |
DJ Bouche Posts: 108/111 |
Originally posted by quaker3332 There are level number assigning possible for 128 levels (00-7F), the original game allows for 32 of each 4 level type(overworld (20-3F), underground (40-5F), water (00-1F), castle (60-7F)), though with ASM hacks you can get rid of the level type restrictions, and even expand it to 256 levels (you'll have to redesign the E row exit pipe sprites though, shoudlnt' be too difficult). As for assigning these to the world/area scheme, the world/area tables only allow (this is for SMAS SMB, not SMAS SMB2j.. actually applies to NES ver as well) space for 8 worlds and 36 levels spread across the 8 worlds (4 of those levels are actually x-2 entrance levels in the original game, though you can change them to non-entrance levels to create a 5-level world, and adjusting the world pointers give for a bit more freedom), as you'll see in my previous[, much too long of a] post, I allowed room definition of up to 256 worlds (yes, a little overkill ) and up to 256 levels to be spread across them. Defeating these original limitations are as easy as moving tables, and/or a bit of simple ASM hacking. |
Rex Zemenheart Posts: 8/17 |
This looks cool. I could never do Hex hacking though. It seems way too tedious. I'd rather learn C/++, ASM, and reverse asseble the ROM, and make an editor -.-'
I'd love to Hack Mario 3. It's my favorite |
PSlugworth Posts: 37/61 |
Here's a dumb question, but I'm curious:
Are you going to block out the selection of the other games from the main screen? Also, in regards to the graphics, which you mentioned possibly changing... Personally, I like the look of the originals, and it seems to fit well with the theme I think you're going for -- the screen shots look pretty decent as-is. Uh... as-are? On a more general note, I'd like to say that the work you've done so far sounds (and looks) pretty good, and hacking SMAS SMB1 will be a nice change from the usual SMB1 NES and SMW hacks -- doesn't anybody want to hack Mario 2 or 3 anymore? |
Dragon hellfire Posts: 10/162 |
I didn't even notice that. Though if there are going to be 200+ levels. This is a must play game. Good luck, and I will be sure to play it. |
quaker3332 Posts: 10/13 |
I am really excited about this. The instant death block is a good idea.
I'm curious, though. How is it possible that there can be 200+ levels? SMB only has 32. Did you remove other levels from the other games, expand it with a special program...? |
DJ Bouche Posts: 107/111 |
Ok, to begin with... SMAS SMB2j offsets, random crap i found in some notes:
some RAM: ($7E:00xx): $D0 game (SMAS) $D1 save (SMAS) $DB background/tileset $5C level type $BA music $FD = sprite lo byte $FE = sprite hi byte $FF = sprite bank $FA = obj lo byte $FB = obj hi byte $FC = obj bank ($7E:0xxx): $219 sprite x positions $237 sprite y positions $6CC hard mode $750 area number $75F world $760 level $76A second quest $7FB red plants? $E24 level icon offset? all ROM offsets in hex: E93B8 - DB palette sets fae02 - DB pattern offsets fb6a1 - DB patterns EC499 - world table EC4A6 - area table D9f64 - midway points EC3bd - important level load code (can't remember *what* exactly o.O but that's what i had it labeled as) dc274 - looping data (worlds) dc280 - looping data (pages) dc28c - looping data (positions) dc298 - looping data (unknown) ec4e0 - looping data (loopback offsets) 6DBDF - bowser true forms level pointer tables (banks originally hardcoded, easy fix through an asm hack) Enemy pointer tables: ec3f3 - asm code to load EC4EC - level type table EC4F0 - low EC537 - hi Objects: ec40b - asm code to load + bg EC57E - level type table EC582 - low EC5C9 - hi Level icon info (the scenery in the World x-x black screen before every level) e8eb3 - icon palette data selection e8ef4 - icon selection e8e7f - icon tileset selection e8dcf - icon tilemap offsets e9c4d - icon tilemap data block ff80a - icon enemy data (enemies to be used: 00 - green koopa troopa 01 - red koopa troopa 02 - buzzy beetle 03 - red koopa troopa 04 - green koopa troopa 05 - hammer bros 06 - goomba 07 - bloober 08 - bullet bill 09 - yellow paratroopa (on ground) 0A - upside down green cheep cheep 0B - red cheep cheep 0C - some fucked up thing 0D - nothing 0E - green paratroopa (in air) 0F - red paratroopa (in air) 10 - green paratroopa (in air) 11 - lakitu at the bottom 12 - spiny + lakitu 13 - fucked up 14 - red cheep cheep in mid air 15 - toad 16 - bowser 17 - green garbage 18 - spring fuck 1C - yellow troopa 21 - green buzzy beetle in air ) Objects List (SMB2j): 00 - ? Mushroom 01 - ? Poison 02 - ? Coin 03 - ? Coin Hidden 04 - ? 1-Up Hidden 05 - ? Poison Hidden 06 - ? Mushroom Hidden 07 - Brick Mushroom 08 - Brick Poison 09 - Brick Vine 0A - Brick Star 0B - Brick Multi-Coin 0C - Brick 1-Up 0D - Walk In Left Pipe Head 0E - Used ? Block 0F - Spring 10-1F - Mushroom Platform/Bullet Bill 20-2F - Brick 30-3F - Solid Block 40-4F - Coin 50-5F - Vertical Brick 60-6F - Vertical Solid Block 70-77 - Pipe 78-7F - Pipe Exit C Row: 00-0F - Gap 10-1F - Pulley High 20-2F - Bridge High (7) 30-3F - Bridge Mid (8) 40-4F - Bridge Low (A) 50-5F - Water (A) 60-6F - ? Coin (3) 70-7F - ? Coin (7) D Row: 00-1F - Skip 20-3F - Skip 40 - L Pipe 41 - Fagpole 42 - Axe (6) 43 - Drawbridge Chain (7) 44 - Drawbridge (8) 45-47 - Stop 48 - Cheep Cheep Frenzy 49 - Bullet Bill Frenzy 4A - Stop Frenzy 4B - Loop 4C - Wind 4F-51 - crash. 52 - no sprites. 53 - crash 55-56 crash 57 - mario bump up brick ... 58-5A - crash 5C-5D - crash 5F-6C - crash 6D - messd ol. 6E-6F - crash 70 - weird pipe thing. 72-73 - crash 74-76 - crash 77 - world skip? 78-79 - crash 7E-7F - crash E Row: Ground shit. F Row: (xy Fb a0) E88ee - routines ab 00-0F - platofrm line 10-1F - pulley line 20-2F - castle 30-3F - block step 40-4F - Long L pipe 50-5F - climbing flagpole tops 60-6F - upside down pipe (1) 70-7F - upside down pipe (4) (I devised a hack that uses F row to allow 5 byte direct map16 objects, didn't end up completing it as while doing it I did something with the level loading routine that messed up levels bigger than 256 bytes when the player passed that area) Sprites: ec6b2(1-1) 00 - green koopa troopa 01 - red koopa troopa 02 - buzzy beetle 03 - red koopa troopa 04 - stray upside down red pirahna plant 05 - hammer bros 06 - goomba 07 - bloober 08 - stray bullet bill 09 - yellow stationary paratroopa 0A - green cheep cheep (Green koopa troopa) 0B - red cheep cheep (Red koopa troopa) 0C - podobo 0D - stray green/red pirahna plant 0E - green bouncing paratroopa 0F - red up/down paratroopa 10 - green left/right paratroopa 11 - lakitu 12 - spiny 13 - stat 14 - cheep cheep frenzy 15 - bowser's fireball frenzy 16 - bullet bill frenzy 1B - clockwise firestick small 1C - clockwise firestick small fast 1D - c-clockwise firestick small 1E - c-clockwise firestick small fast 1F - clockwise firestick big 20 - stationary firestick small 21-22 - stationary firestick big 24 - fake platform 25 - pulley platform 26 - upward continous platform 27 - downward continous platform 28 - left/right platform 29 - stationary platform 2A - stationary rightward moving platform 2B - short string upward continuous platform 2C - short string downward continuous platform 2D - bowswhore 2E - mushroom 2F - somthing 32 - spring mid animation 35 - gay 36 - crash 37 - 2 goomba group 38 - 3 goomba group 39 - 2 elevated goomba group 3A - 3 elevated goomba group 3B - 2 green koopa troopa group 3C - 3 green koopa troopa group 3D - 2 elevated green koopa troopa group 3E - 3 elevated green koopa troopa group E row: Pipe exits (3 byte). F row: skip. --This is a plan I had to rearrange the data and expand tables to allow for a large amount of levels, worlds, levels in worlds, and such... (the thing in brackets is the memory address it deals with/overrides), the asterisked items I didn't implement. SMBTLL EXPANSION: Level Types: (5C) 0x210000-FF Music: (BA) 0x210100-FF *Music2: (1602) 0x210200-FF Backgrounds: (DB) 0x210300-FF World Table: 0x210400-FF Area Table: (750) 0x210500-FF *Level Icon Sets: (E21): 0x210600-FF *Level Icon Palettes: (E22): 0x210700-FF *Icon Enemy Data 0x210800-BFF *Icon Tileset Selection 0x210C00-FF *Icon Tilemap Offsets 0x210D00-FFF *Icon Tilemap Data Block 0x211000-3FFF Enemy Pointers: Lo: 0x214000-FF Hi: 0x214100-FF Bank: 0x214200-FF Object Pointers: Lo: 0x214300-FF Hi: 0x214400-FF Bank: 0x214500-FF *Level Palettes (use DB): 0x214F00-FF *DB Palette Sets: 0x215000-FFF e93b8 (eaca3) *Loop Worlds: 0x216000-3F *Loop Pages 0x216040-7F *Loop Positions 0x216080-BF *Loop unknown 0x2160C0-FF *Loop back Offsets 0x216100-3F *Loop Count 0x216140 **Midpoint table 0x216200 I also rewrote tables to map the World A-D overworld levels to 10-1F (level numbers mean nothing in my new system, since DB/5C/BA are overridden by table) as well as got rid of the cheap trick Nintendo put in to access those higher overworld levels, though this is only to make the existing SMB2j data work in the system, any user would be able to make any level number, any level type, for any world, arranged in whatever way they like. Old world/area tables for A-D: A 20 3F 45 21 6A B 22 3F 08 23 6B C 24 25 26 6C D 27 28 29 6D New Table for World A-D: A 10 29 45 11 6A B 12 29 08 13 6B C 14 15 16 6C D 17 18 19 6D With this the World A-D exclusive levels can also co-exist with the 1-9 levels (for pipe exit links etc). Hm.. that's enough for now. I'll look for my ASM source code/ROM when I get back from work. If any of this needs clearing let me know (and apologies for the casual messy notes) |
Sonicandfails Posts: 445/917 |
Is the space in the Rom limited? Are you reusing objects? Or did you figure out a way to add more space? |
Darkdata Posts: 449/983 |
Any other blocks planed?
Also I think your instant death block is a good idea. |
Raccoon Sam Posts: 734/1040 |
On a side note, you MUST use BMF's brick fix patch. |
Scatterheart Posts: 105/144 |
Like all of us, we do get sick of many repetitive SMW hacks though.
It seems that now, we need something special to keep us entertained. Level design is my main focus on any hack, and this one looks damn fine! I like the use of the brown blocks. Not too sure on the idea of Small Fire Mario. If someone can't run and duck to avoid low-hanging blocks, they can't play for crapix! I guess it wouldn't be too hard to make breakable blocks for Big Mario to destroy for alternate routes though. Good work! |
Ok Impala! Posts: 14/24 |
Ok!
Looks great to me! Seeing the succes of New Super Mario Bros. it's clear that people can't get enough of more and more Mario. I, for myself, like to play a great Mario hack from time to time. This one looks pretty promising so keep it up! |
DJ Bouche Posts: 105/111 |
Since I've put my SMAS SMB hacking into temp ice for a long long time and don't plan on doing on anything with it soon (I was originally gonna keep this all a surprise but eh), I'm happy to release the info and ASM hacks (if i find them) of mine if you want. I have quite a bit. The background layers are kinda fiddly and haven't really figured them out, as well as the object set stuff (closely related to background routines). Right now, I'm looking into learning to code homebrew instead... though who knows, I might go back to it.
I suggest looking at using the ported SMB2j engine instead, it has some nice features , and I do have info (and possibly ASM hacks) on it too. Yes the firebars harm regardless of starman status. |
icywarmtea Posts: 8/8 |
Originally posted by spel werdz rite perhaps the fire bar? (i have ever seen this phenomenon in some other hacks...) |
Deleted User Posts: 11/-7750 |
THAT's SO REALLY COOL. But take your time doing your hack and never rush your work. |
This is a long thread. Click here to view it. |