+  RHDN Forum Archive
|-+  Romhacking
| |-+  ROM Hacking Discussion
| | |-+  Anyone Interested in Doing "SMB Special" for NES?
Pages: 1 2 [3] 4 5 ... 39
Author Topic: Anyone Interested in Doing "SMB Special" for NES?  (Read 12 times)
Karatorian
Guest
« Reply #30 on: February 26, 2008, 10:04:33 pm »

Well, my current renderer doesn't indicate the locations of the hidden blocks or the contents of the non-hidden blocks. (They're in the level data I dump, but the renderer uses the graphics the game does, so the levels are not compleatly rendered.) Once I get that taken care of, I'll post the renders and then people can start working on the layouts while I try and decipher the enemies and other data.

I should have the renderer producing usable output and get the renders posted later tonight or sometime tomorrow. Until then, thanks for your support. This is looking to be a nice project.

Edit:

Well alrighty, I've rendered all 32 levels and posted them here. They're not perfect and may have some bugs (unbeknownst to me), but they're a start. In particular, they have no sprites whatsoever. No enemies, no elevators, no falling platforms. Without which, a number of the levels (mostly the X-3 ones) would be compleatly unplayable, even if built. However, it should be enough to tide y'all over untill I can get that stuff worked out.

Some of the tiles have been tagged with letters, so you can tell what exactly they are. The key is as follows:
Code:
C block with a coin
M block with multiple coins
F block with a fire flower (or super mushroom if small)
1 block with a 1-up mushroom
S block with a starman
E pipe you can enter
V block with a vine
X block with unknown object one
H block with hammer (or super mushroom if small)
X block with unknown object two
T block with clock (adds 100 to the timer)
W block with wings (makes it so you can "swim" in air)

I don't know if the extra power-ups where used in the game or not (I didn't look that closely), but they are in the code. If they are, we may need to do some ASM hacking. Another thing that may require some ASM hacking is upsidedown pipes. I don't know if any of them are enterable, but there are some.

I didn't edit most of the levels and most of them contain extra junk at the end. I did, however edit level 4-4 as it seems to have been corrupted or something. A chunk of the level was missing (or never finished) and so the end wasn't aligned correctly. I edited the compressed level dump to shorten the corrupted chunk and align the end part correctly and made a render of that. I included both versions in the archive, just to be compleat.

« Last Edit: February 27, 2008, 05:39:54 am by Karatorian »
frantik
Guest
« Reply #31 on: February 27, 2008, 03:06:44 pm »

dude.. you rock!!!  this is really really cool Cheesy  i will begin entering the level data for the rest of world 1 when i get a chance

it definitely looks like there will be some asm hacking needed.. and unfortunately i'm not 100% sure if every power up will be able to be included in the game. Sad
deespence2929
Guest
« Reply #32 on: February 27, 2008, 04:19:29 pm »

what we dont need ported is the screen by screen progression. Screen scrolling would be fine by me, probably everyone.
frantik
Guest
« Reply #33 on: February 27, 2008, 04:27:09 pm »

lol of course.. thats half the reason to port it in the first place
Karatorian
Guest
« Reply #34 on: February 27, 2008, 06:19:44 pm »

I've been looking into the level's sprite data and it's actually in a pretty easy to use format. The sprite data starts at offset 0xA0 from the start of a given level (again, ignoring the sector headers). Each sprite's information is a block of four bytes. The first byte is the number of 8 pixel columns to advance from the column position of the last sprite. The second byte is the number of pixels down the column to position the sprite. The third byte is the sprite index. The last byte contains movement information.

While the position information is fairly straight forward and I've managed to figure out most of the sprites actually present in the level data, the movement information is giving me a bit of trouble. It doesn't seem to be that complicated, but I haven't muddled out all the details yet.

Unlike the level information, I can detect the end of the sprite data, because it has extra zero bytes between it and the tile data, so my code stops reading sprite data on a sprite data group that is four zeros. I should have a preliminary dumping program for the sprite data some time soon.

In regards to the extra power ups, as I said, I'm not sure they're even all present in the level data. Personally, I wouldn't worry about them until we come across a level that has them in it. As for getting the ASM hacks implimented, I'd be willing to help out.

With the availibility of cleaned up dissasemblies of the SMB source availible, I imagine they will be easier to impliment than they would be for some other games. If space becomes an issue, I'd be willing to look into ROM expansion. From what I've read about SMB rom expansion, it wouldn't be this complicated. (Of course, no ROM expansion is easy, but seeing as SMB uses no mapper, it's not a matter of mapper changing, just mapper adding.)

Anyway, we'll cross that bridge when we come to it.
deespence2929
Guest
« Reply #35 on: February 27, 2008, 07:27:10 pm »

If your able to hack smb special why not make a infinite lives and powerup cheat/ So in case any of us need to go into the game it will be possible.
frantik
Guest
« Reply #36 on: February 27, 2008, 07:44:17 pm »

Quote from: Karatorian on February 27, 2008, 06:19:44 pm
In regards to the extra power ups, as I said, I'm not sure they're even all present in the level data. Personally, I wouldn't worry about them until we come across a level that has them in it. As for getting the ASM hacks implimented, I'd be willing to help out.

With the availibility of cleaned up dissasemblies of the SMB source availible, I imagine they will be easier to impliment than they would be for some other games. If space becomes an issue, I'd be willing to look into ROM expansion. From what I've read about SMB rom expansion, it wouldn't be this complicated. (Of course, no ROM expansion is easy, but seeing as SMB uses no mapper, it's not a matter of mapper changing, just mapper adding.)

Anyway, we'll cross that bridge when we come to it.


how do you know about the power ups that may or not be used?

and expanding smb isn't too hard i've been hacking it extensively for super mario unlimited i know plenty of locations which can be edited to add space and i've implemented two different mappers on it as well so that wont be hard either Cheesy  looks like the first thing that needs to be done is upside down pipes though.  the way i did it loses the L pipes so i will look into other ways
Karatorian
Guest
« Reply #37 on: February 27, 2008, 10:57:40 pm »

Quote from: frantik on February 27, 2008, 07:44:17 pm
how do you know about the power ups that may or not be used?

I know about all the power-ups becaus I hacked them into level one. When I was compiling data to build my level dumping program, I hacked various blocks into level one's first screen so I could figure out what they do.

Edit:

Extra, extra, read all about it! New SMBS level renders avalible! New and improved, now with 100% more sprites!

Well, I hacked on the level renderer some more and now it's dumping sprite data as well as tile data. I've rendered all the levels and posted a second tarball at the adress I linked to above. While it may not be perfect, it seems to work, for the most part.

One bug I noticed is that a handful of sprites at the end of 8-4 seem to be off by one column. I'm not sure why. Also, due to level 4-4 being corrupted (or something), the sprite data during and after the messed up section isn't accuratly placed. (Or rather, it is, but the tile data isn't so it amounts to the same thing.)

I implimented a hack to crop the level renders based on the sprite data. The sprite data has information indicating empty space, even after the last sprite, so I used it to cut off the level size. It seemed to work for the couple of levels I checked out, but it's a hairy hack and may not work correctly. (I've really got to decipher that header data.) If any of the levels seem to simply cut off unexpectedly, check out the version one renders and see if they help. (Note level 8-4 simply cuts off in the level data, it's not a result of this change.)

If you find any levels that get prematurely cut off, or any other apparent bugs, please report it and I'll look into it.

I've managed to get the sprite movement code data mostly worked out. Most sprites only use one of a three movement codes, which are "move left", "move right", and "stand still". One movement code is only used by parakoopas and cheep cheeps, so it proably has something to do with moving up and down, but I haven't quite worked it out. One movement code is only used by fireballs and upsidedown pirana plants, I'm not sure what it does, perhaps downward movement. The movement codes for elevators/falling platforms and firebars are more complicated. I haven't even started working out what they do exactly.

Once I get the movement codes worked out, I intend to have the level dumping program produce a series of text files that indicate the position, type and movement attribues of each sprite. While the position and type can be fairly easily determined from the renders, I'm not sure how to indicate the movement type graphically without a lot of work. The other info will be useful for verifying which sprite each movement code belongs to.

After I get the movement codes worked out, I'll be done with both the tile and sprite data, so I'll start looking into the level headers. In particular, I'll be attempting to figure out where the data that indicates how the pipes connect up. As the enterable pipes are marked specially in the level data, it's easy to tell where the entrances are, but the exit pipes are not marked, so that data must be stored somewhere else.

Until next time, keep up the good work.

Quote from: deespence2929 on February 27, 2008, 07:27:10 pm
If your able to hack smb special why not make a infinite lives and powerup cheat/ So in case any of us need to go into the game it will be possible.

Well, to do that, I'd have to go into the ASM code. Hacking data is a lot easier than hacking code. While I've been able to locate and mess around with the level data, I located it by means of an educated guess. I don't know anything about the Z80, or the PC-8801. The emulator that was packaged with the disk image has no save states, no debugger, no code tracer, no memory viewer, etc. While I haven't looked into finding a better one, I doubt that one with the sort of features a ROM hacker really needs to get ASM hacks done is available for such an obscure platform.

I have, however, come up with a theoretical way to rearrange the level orders. While I haven't built a tool to do so yet, it is on my to do list. I didn't want to mention it, because I didn't want to get anyone's hopes up, in case it doesn't work for whatever reason. If it works out, I should be able to move an arbitrary level to level 1-1. While that's not as nice as an unlimited starman and infintite lives, it's better than nothing.

That said, if anyone here does want to try hacking on the ASM, I can provide some (limited) information and tools. Just ask and I'll provide what help I can.
« Last Edit: February 28, 2008, 06:31:46 am by Karatorian »
hybrid
Guest
« Reply #38 on: February 28, 2008, 01:55:07 pm »

i was able to get some cheat Engine / Cheat Search codes for this game the first four digits vary but its easy to come up with them i hope this helps. to get the first 4 digits to the codes just hack out the infinite lives codes. its a single byte search.  searching for the exact value of the lives.
Infinite Lives
Huh?ECC5 9

Infinite Time
Huh?ECA1 150

You will have to turn the code off to pass to the next level

Max Coins
Huh?EC9D 153

Always Big
Huh?EC9E 6

Always Able to shoot Fireballs
Huh?EC9F 1

Always Invincible (star)
Huh?EC7E 15

you will have to turn off if you land in a lava pit

Sub-World modifier
Huh?F019 ?
use 0-? it varies depending on which world you are in
World Modifier
Huh?F018 ?
use 0-7
you will have to beat World 1-1 in order to go the level set by the codes
Sub-World modifier
Huh?F019 ?
use 0-? it varies depending on which world you are in
World Modifier
Huh?F018 ?
use 0-7
you will have to beat World 1-1 in order to go the level set by the codes
« Last Edit: February 28, 2008, 09:45:12 pm by hybrid »
insectduel
Guest
« Reply #39 on: February 28, 2008, 02:39:42 pm »

What are the object or enemy level formats of SMB Special? Is it the same as the NES version. I got to encode the source and try to insert all levels into the NES rom if any space left out.
frantik
Guest
« Reply #40 on: February 28, 2008, 02:59:17 pm »

the formats are totally different..  plus to design the levels using the least amount bytes requires human interaction.

it wasn't too hard to design the levels i just loaded up the level map in one window and lined it up with the SMB editor in a window above it.  still time consuming but not too annoying.  one issue is the fact SMB special is one tile shorter which comes into play in underground and castle levels.  I'll have to edit the brick arrangements.  they're stored as pairs of binary values

Code:
; $93dc-$93fb ( 0x13ec - 0x140b ) terrain rendering control bits
TerrainRenderBits:
      .db %00000000, %00000000 ;no ceiling or floor
      .db %00000000, %00011000 ;no ceiling, floor 2
      .db %00000001, %00011000 ;ceiling 1, floor 2
      .db %00000111, %00011000 ;ceiling 3, floor 2
      .db %00001111, %00011000 ;ceiling 4, floor 2
      .db %11111111, %00011000 ;ceiling 8, floor 2
      .db %00000001, %00011111 ;ceiling 1, floor 5
      .db %00000111, %00011111 ;ceiling 3, floor 5
      .db %00001111, %00011111 ;ceiling 4, floor 5
      .db %10000001, %00011111 ;ceiling 1, floor 6
      .db %00000001, %00000000 ;ceiling 1, no floor
      .db %10001111, %00011111 ;ceiling 4, floor 6
      .db %11110001, %00011111 ;ceiling 1, floor 9
      .db %11111001, %00011000 ;ceiling 1, middle 5, floor 2
      .db %11110001, %00011000 ;ceiling 1, middle 4, floor 2
      .db %11111111, %00011111 ;completely solid top to bottom
« Last Edit: February 28, 2008, 03:06:08 pm by frantik »
Numonohi_Boi
Guest
« Reply #41 on: February 28, 2008, 05:39:41 pm »

I've brought this up before, along with other enhancement projects bringing older games into the newer game engine.
Karatorian
Guest
« Reply #42 on: February 28, 2008, 05:43:32 pm »

Couldn't you render the levels with an extra floor tile? Or are the allowed options only those you list? If so, would it be worth the effort to modify SMB's level renderer to do it?
frantik
Guest
« Reply #43 on: February 28, 2008, 06:29:23 pm »

all i need to do is modify the bits and it will lower the ceiling one tile.  i'm going to go through the underworlds and castles to determine which will be the most useful ground settings Smiley
Jorpho
Guest
« Reply #44 on: February 28, 2008, 08:31:20 pm »

Someone at Digital Press managed to make it to World 4-4 or so by exploiting an extra-lives trick somewhere in the game, but found he could not proceed, as the game appeared to be corrupted.
http://www.digitpress.com/forum/showthread.php?t=83082&page=2
Perhaps it was just a bad dump, but it seems rather unlikely that more than one dump of such a rare game would be floating around out there.

(Also note that apparently M88 has save states.)
Pages: 1 2 [3] 4 5 ... 39  


Powered by SMF 1.1.4 | SMF © 2006-2007, Simple Machines LLC