Anyone Interested in Doing "SMB Special" for NES?

Started by SMB2J-2Q, February 06, 2008, 11:26:50 AM

Previous topic - Next topic

rbudrick

I'm of the opinion that we should first figure out what the hell the Bee does before it gets hacked for a different purpose in the NES version.  No matter what, I think the version should remain accurate. in every way, even if it involves major changes to the SMB code.  People say the Bee is a continue feature, but where's the proof?  I couldn't get it to do jack.  If there's some continue easter egg, then fine, but what is it?  And what's this hammer power up?

QuoteIf this is a accurate port of the pc game then that won't be nessesarry. Cause finding the stuff on your own should be totally doable with a joystick, and savestates. You can just take that knowledge with you if you switch to playing the other game. Sounds like the main thing you'll be playing that version for willl be to see the hudson bee, cause it sounds like they won't bother putting that in here. PC version probably will be the inferior port.

Here's my suggestion tho, if there are dead end pipes and they look to be intentionally put in the game, leave them. It might be sadistic, but at least it will be accurate.

Guide books are never necessary, but I still have my SMB guide book that was available for sale in the Nintendo Fun Club News back in '87.  I was just saying that a similar guide would rock.

Oh, and could someone refresh my memory?  What's wrong with 4-2 exactly?

-Rob

Karatorian

In 4-2, it looks like you can jump over the flagpole, which leads to a little bonus area. However, that area is partially corrupted.
Current ProjectsFinal Fantasy EngineSMB Special for NESStudio Karatorian
@loop: lda (src),y — sta (dst),y — iny — bne @loop — inc src+1 — inc dst+1 — dex — bne @loop

frantik

Quote from: rbudrick on March 07, 2008, 09:35:10 AM
I'm of the opinion that we should first figure out what the hell the Bee does before it gets hacked for a different purpose in the NES version.  No matter what, I think the version should remain accurate. in every way, even if it involves major changes to the SMB code.  People say the Bee is a continue feature, but where's the proof?  I couldn't get it to do jack.  If there's some continue easter egg, then fine, but what is it?

I'd like to see someone hack in the bee before we even worry about what effect the bee has once it's collected ;) additionally, from a priority standpoint I think invisible power up blocks are more important to implement than the bee. 

I'm pretty familiar with the SMB source, and as far as I can tell it is not particularly easy to add new block types without major changes.  it's much easier to replace blocks than to add them.  I did recover two blocks in the brown palette by switching the underwater sideways pipes to the same blocks which are used by the other sideways pipes. (i could do this since i also edited the palette for the water world so the pipe palette looks good)  also the climbing "vertical balls" (also brown palette) blocks could be repurposed though it'll still require checking for the right block numbers in the various block detection routines. 

Adding the other enemies are also a higher priority than the bee imo.  there's not a lot of slots for new enemy types either so that might be tricky.  i suppose maybe some of the firebars or lifts could be dropped if they aren't used

The SMB source does not have ANY room to add things, so anything which is added will require removing other things, so choices will likely have to be made when porting to the NES.  My current goal is to make a level port which is faithful to the overall gameplay as much as possible, then tile accurate as much as possible.  I have to take liberties sometimes when the original design is not possible, so already it's not going to be a 100% accurate port.

MathUser2929

I could of swore you mentioned adding amapper that would allow rom expansion. So at which point are you gonnna run out of memory? Are you going to be able to structure the layout of the levels faithfully or are you gonna run out of blocks on world 7 or something€?

frantik

Quote from: deespence2929 on March 07, 2008, 08:22:00 PM
I could of swore you mentioned adding amapper that would allow rom expansion. So at which point are you gonnna run out of memory? Are you going to be able to structure the layout of the levels faithfully or are you gonna run out of blocks on world 7 or something€?

yeah I'm going to add a mapper but only to increase the level data by simply swapping in the new data once you reach world 5.  The rest of the memory will be identical.. i'll basically be like swapping in a second rom with new level data once you get halfway through the game.  i suppose the mapper could be used for other stuff too though.  even then making sure there are slots for everything could be an issue

and yes i'm rapidly running out of blocks and i just finished world 3.  i'm hoping i can fit all of worlds 1 - 4 into the unexpanded rom and that i can fit 5-8 in the second rom.  I will post world 3 once I double check everything

Karatorian

Allright, I posted the extracted pipe information to my website. It's the tarball labled "info". However, the pipe connection info can be a little tricky to use. I'll try to give a decent explanation of how it works.

The game tracks pipe connections by the same twenty column chunks that it uses for other stuff. A pipe connection consists of an entrance chunk, an exit chunk, a pointer for sprite info, the exit level type and the vertical height you exit at.

The exit chunk is pretty straight forward. Once you go through the pipe, it drops you out the specified chunk. The horizontal position (whithin the chunk) is fixed at 40 pixels. The vertical position is controlled by the vertical position argument. The level type gives info such as what music to play, whether you jump or swim, etc.

The sprite info pointer isn't needed for our purposes and the version of the info files I posted doens't have it included.

The entry chunk is a little more complicated. Rather than specifing the chunk that the pipe is located in, it specifies the chunk which the far left of the screen is located in when you enter the pipe. This may or may not be the same chunk the pipe itself is located in. For instance, the second pipe in 2-1 is located in chunk 6, but when you get to it, the far left of the screen is still in chunk 5, so the pipe info data has the entry chunk as 5.

What this basically means in practice is that if you can't find an entry for the chunk you're looking at, check the previous chunk.

I'll try to post a new set of level renders that has the chunk boundries delineated. In the mean time, remember that a chunk is 20 columns, which is 320 pixels.
Current ProjectsFinal Fantasy EngineSMB Special for NESStudio Karatorian
@loop: lda (src),y — sta (dst),y — iny — bne @loop — inc src+1 — inc dst+1 — dex — bne @loop

SMB2J-2Q

Quote from: Karatorian on March 08, 2008, 08:52:54 PM
Allright, I posted the extracted pipe information to my website. It's the tarball labled "info". However, the pipe connection info can be a little tricky to use. I'll try to give a decent explanation of how it works.

The game tracks pipe connections by the same twenty column chunks that it uses for other stuff. A pipe connection consists of an entrance chunk, an exit chunk, a pointer for sprite info, the exit level type and the vertical height you exit at.

The exit chunk is pretty straight forward. Once you go through the pipe, it drops you out the specified chunk. The horizontal position (whithin the chunk) is fixed at 40 pixels. The vertical position is controlled by the vertical position argument. The level type gives info such as what music to play, whether you jump or swim, etc.

The sprite info pointer isn't needed for our purposes and the version of the info files I posted doesn't have it included.

The entry chunk is a little more complicated. Rather than specifing the chunk that the pipe is located in, it specifies the chunk which the far left of the screen is located in when you enter the pipe. This may or may not be the same chunk the pipe itself is located in. For instance, the second pipe in 2-1 is located in chunk 6, but when you get to it, the far left of the screen is still in chunk 5, so the pipe info data has the entry chunk as 5.

What this basically means in practice is that if you can't find an entry for the chunk you're looking at, check the previous chunk.

I'll try to post a new set of level renders that has the chunk boundries delineated. In the mean time, remember that a chunk is 20 columns, which is 320 pixels.

What SMB level editor are you and Frantik using for my NES SMB Special project? BTW, keep up the good work and I hope to see World 3 pretty soon...

Oh, one problem I noticed: A lift is missing in World 1-3 in the part where there's a wide gap you can't pass without jumping on it.

~Ben

frantik

#107
i'm using SMB Utility to do the level editing.  And I just checked 1-3 and the lift is there....

Karatorian thanks for the pipe data :D  I've already used it to double check some things.  when you update the renderer with the chunk lines can you also include the enemy movement data for the firebars and elevators (if possible)?  thanks

edit:  i was just watching the video of world 3's castle and I saw an appearance of the hammer power up.  the weird thing is on the rendered map there is a hidden coin block high in the air but in the video it's a hidden hammer block much lower on the screen.  it looks like the hammer weapon isn't like the hammer bros hammer it's more like from donkey kong where it can be used to presumably smash the barrels which are also in that area.  i replaced the barrels with spineys and buzzy beetles since we dont have barrel enemies yet

MathUser2929

Now I see that too. Soo this means if you add this hammer thing your gonna have one of the most epic hacks ever.

Karatorian

In regards to world 3-4, I'll have to check it out and see if there appears to be anything funny going on. It seems to me that some of the videos have been made from a different dump than the one I'm using. (Didn't someone say something about a non-corrupted version of 4-4?)

The disk image I have has an md5 sum of 94a92e15ad909b7510dccca26128b54c. Does anyone have a different version?

As for the firebar and eleveator movement data, I intend to integrate them into the next round of changes to the level renderer. Along with other movement data stuff and the chunk divisions. I don't know how long these changes will take, but I hope to get them done soon.
Current ProjectsFinal Fantasy EngineSMB Special for NESStudio Karatorian
@loop: lda (src),y — sta (dst),y — iny — bne @loop — inc src+1 — inc dst+1 — dex — bne @loop

frantik

yeah i dunno maybe the engine interprets that block as a hammer block based on other stuff?

anyways here's worlds 1-3 completed:

World 3 download


Karatorian

Well, the engine changing the interpretation of a block based on something rather arbitrary like that wouldn't really seem to go along with the way it appears to be designed. After all, there's a hammer block, so it's not as if such a thing would be neccessary.

I've posted version three of the level renders to my site. They incorporate a few changes. Firstly, the levels have dividing lines to seperate the chunks from one another. Secondly, they are all rendered at a fixed size of sixteen chunks. As far as I can tell, the game doesn't store the length of the level anywhere in the level header. The max level size is sixteen chunks and the levels all seem to have pointers for all chunks. They also have data for unused chunks. (Even if said data is rather boring.)

Included in the package is the restored version of level 4-4. The restoration of 4-2 is not included, because I haven't finished it yet. (I stopped working on it to work on dumping the pipe data and improving the renderer.)

More exciting are the changes I made to sprite rendering. I've included experimental support for incorporating some aspects of the sprite movement codes into the renders.

Platform movement codes are (should be) fully incorporated. They now render at the proper length and include an icon that indicates their movement type. Also included is additional platform movement code info I discovered in the course of checking my results. Such as a size of 0x03 indicating a cloud coin zone platform and a movement of 0x08 indicating a plaform that moves up and down. (Also, platform's positions are no longer off by 4 pixels.)

Also included is preliminary support for standard sprite movement codes. Sprites that are moving right have been flipped so that they are facing that direction. Sprites that are moving left (most sprites) or standing still use left facing images. The issue of telling the two apart isn't really a problem, because stationary positioning is only used by a handful of sprites (Toad, Princess, Flag, etc.) that never move, so it's easy to intuit which is which.

Unfortunately not included is firebar movement codes. I hope to get them intergrated sometime soon, but I haven't yet. Also not handled is the 0xC1 movement code who's meaning I still haven't fully investigated.

These changes are all rather experimental, so please report any bugs you find.
Current ProjectsFinal Fantasy EngineSMB Special for NESStudio Karatorian
@loop: lda (src),y — sta (dst),y — iny — bne @loop — inc src+1 — inc dst+1 — dex — bne @loop

frantik

sweet :D  and i agree it would make no sense for the block not to be a hammer block in the level data but the block is the wrong block and the wrong location, but there is no other corruption so it also seems like it's unlikely the level data is messed up.  course u would know better than i :)

btw about the firebar movement:  world 1 and 2 castles rotate the bars clockwise while world 3 castle rotates them all counter-clockwise

Googie

I'm taking it upon myself to beta test this as demos keep comin...  :D

A'ight here a little sumthin that goes down in 2-3...



I go down this pipe right fellas?

Only to wind up here...



But before I get there I gotta pass through here...



You can go down that pipe, it'll take you to here...



Now, pass it regularly'll take you to the 2nd castle, but like in the 2nd pic'll take you to world 3. I'm guessing it's a bug? Other than that I'm gonna play world 3 in a bit...  :thumbsup:   

frantik

#114
lol.. world 2-3 is a lil crazy :D :D  thanks for the testing googie  :thumbsup:

edit:  i updated the patch.. not sure what happened but some of the objects went missing lol  fixed now

linky

edit2:  karatorian it looks like you have the up/down arrows on the lifts switched.  in world 2-4 the first lift moves downward and the 2nd upward in this video: http://www.youtube.com/watch?v=ENuvrRJtFPY :)

Googie

Thanks for fixing it up, it's much better now. Yeah seeing that Hammer power up will really rock, seeing and playing through this hack makes me wanna work on my back burner smb hacks now.  :crazy:

MathUser2929

#116
WOn topic, good job on world 3.

SMB2J-2Q

Quote from: frantik on March 09, 2008, 08:53:10 PM
lol.. world 2-3 is a lil crazy :D :D  thanks for the testing googie  :thumbsup:

edit:  i updated the patch.. not sure what happened but some of the objects went missing lol  fixed now

linky

edit2:  karatorian it looks like you have the up/down arrows on the lifts switched.  in world 2-4 the first lift moves downward and the 2nd upward in this video: http://www.youtube.com/watch?v=ENuvrRJtFPY :)

Thank you again! That lift in 1-3 is back!

I can't wait to see 4-3!

~Ben

frantik

#118
glad to hear the lift is back :D

hey Karatorian whats up with the random dark block in world 4-1 above the hidden 1up?

also:

does anybody know if lakitu comes back if you go up the vine and return to the level?  perhaps the dark block is the lakitu continuation code or something?

and is that really a trap bonus room in 4-3?  there's pipe connection data but no enterable pipe.  the pipe connection data is also weird pointing to chunk 5 which has no exit pipe

Karatorian

The random dark block in world 4-1 was caused by a bug in the level renderer that caused a few tiles to be rendered incorrectly. The missing hammer in 3-4 was caused by the same bug. The effected levels are 2-1 (Half Brick Under Spring), 3-2 (Wings), 3-4 (Hammer), 4-1 (Wings and Unknown Object), 7-1 (Half Brick Under Spring), and 8-3 (Clock). The bug has been fixed.

The lift direction arrows where indeed backwards, which was caused by a simple error when saving my marker images. This problem has also been fixed.

I've finished correcting the corruption to level 4-2 and it now renders nicely.

I was going to make another set of renders that incorporate all the above improvements, however, it's the middle of the night, so I figure I might have time to get some more work done on the movement code integration before anyone is awake. In that case, the next set of renders will include the better movement code support. If I don't manage to get better movement code support implimented by morning, I'll post a new set of renders generated with the current codebase.

I don't know if Lakitu comes back or not, but I could check it out. Also, 4-3's pipe connections seem kinda weird. I'm not entirely sure what's up with them. In addition to not having any enterable pipes, the pipe connection that seems to go the the bonus room has a level type code not used anywhere else in the game. As far as I can tell, said bonus room cannot be accessed, but I haven't messed around with the level in the game to verify this.
Current ProjectsFinal Fantasy EngineSMB Special for NESStudio Karatorian
@loop: lda (src),y — sta (dst),y — iny — bne @loop — inc src+1 — inc dst+1 — dex — bne @loop