Anyone Interested in Doing "SMB Special" for NES?

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

Previous topic - Next topic

Karatorian

Hey frantik, nice work on the inverted pipe ASM. It's nice to have a version that's properly labled and commented, unlike mine, which has arbitrary lables and no comments.

I've just gotten started on getting all the levels so far into the existing ROM. I've put in worlds 1-4 and am about to start looking at the changes needed to get world 5 in as well. On that note, I was wondering, how many rooms do you think you're going to need? SMB is set up for 34, but I'm sure I can change that if needed. I'd just like an estimate for now. Once you've got all the levels done, I can tweak it to the exact number needed so as to save space.
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

#181
I'd estimate about 50 rooms will be needed

Currently 27 rooms in 1-4.. i think i can consolidate room 42 and 43 though.
Quotewater
01 - 2-2
03 - 3-1

ground
20 - 3-3
21 - 4-2
22 - 4-1
24 - end 3-1
25 - 1-1
26 - 1-3
27 - 2-1
28 - pipe intro 1-2, 2-2 / end 1-2, 2-2 / bonus 2-4
2b - 4-3
2f - end 3-2
30 - 2-3
31 - pipe intro 3-1
32 - sky bonus  2-1, 4-1
33 - 3-2

underground
40 - 1-2
41 - underground midsection 4-2
42 - underground bonus 1-1, 1-4
43 - underground bonus 2-2 / end 2-3
44 - bonus 3-3
45 - bonus 4-3

castle
60 - 1-4
61 - 4-4
62 - 2-4
63 - 3-4

and 12 so far in worlds 5 and 6.  estimate another 10 rooms for the next 2 worlds
Quote
water
00 - bonus 5-2, 6-2

ground
23 - 6-2
26 - 5-3
2a - 5-1
2d - 6-3
2e - 6-1
31 - 5-2
34 - bonus 6-2

underground
40 - bonus 6-3
42 - bonus 5-3, 6-2

castle
60 - 6-4
62 - 5-4


unfortunately we're going to have room numbering conflicts.. not a big deal except for the pipe connection commands will have to be modified once the final room layout is determined.

oh also i removed a bug in the optimized code I posted on the last page in the Upsidedownpipe2 block of code.. if you've already inserted that code please be sure to update it

Karatorian

#182
Actually, once I got to work on the level insertion program, I realized that an estimate of the number of rooms wasn't neccessary. The game engine doesn't have the number of rooms hardcoded, it simply follows the pointers. Therefore, my code simply produces as many rooms as needed and will set up the pointers as required. But, thanks for the information.

As for room numbering conflicts, I'm aware of the problem and have a solution. My current code renumbers the rooms. This is to avoid conflicts and also make the segregation by type simple. Currently, I'm almost done with a stripped down proof of concept version.

It doesn't currently handle pipe connections, but I have a pretty good idea how I'll handle that as well. Basically, it'll go through the area data and record the pipe connections. Then, after the renumbering, it'll go through the list of pipe connections and patch them up.

A bigger issue is the fact that we can only have a max of 32 rooms of a given type as room numbers are stored as five bits (plus two bits for type). If we need more than that, we'll have to come up with an ASM hack of some sort. As one bit of the room numering bytes is unused, I could expand the max to 64 per type. However, as pipe pointers only have 7 bits for room, that won't work for them. The solution in that case would be to ensure that all rooms pointed at by pipe pointers are numbered less than 32.

Anyway, I'm going back to coding.

Edit:

Well, I've got the proof of concept level inserter working. At least it seems to be working. You can't do a whole lot of testing without pipes, but level 1-1, the pipe intro, and the first room of level 1-2 seem to be working anyway. Now I guess I'll have to start work on the pipe pointer functions.
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


Karatorian

#184
I've posted version 5 of the level renders at my website. Unless unknown bugs in the level renderer are discovered, this will be the final version. The only change is that the individual chunks are numbered for ease of use of the related level info files.
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

cheers :)  i just need to double check world 6 and i'll post it

Karatorian

Playtesters Wanted

I've implimented the pipe pointer handling code in the level inserter and produced an expanded ROM containing worlds one through five. You can download the patch here.

I've done some basic testing, but I suck at platformers. After dying about six times on level 1-3, I called it quits. Please report any bugs you find. Thanks in advance.

frantik

There seems to be something strange going on with room 0x43 in the world 1-4 ROM. It appears to have a pipe pointer to map 0x02, which isn't in the list you posted above. Map 0x2 has a bunch of pipe pointers to bogus maps (with pointer indexes of 34 or above. I suspect 0x02's pointer now points at garbage, which wouldn't be an issue, except that 0x43 points at it. Additionally, the bogus pipe-pointer and another one are only active on world 1, while 2 other pipe pointers are active on world 4, neither of which lines up with your numbers.

At least, that's what my code tells me. Of course, it could be a bug on my end. I wish SMB Utility ran under Wine so I could check it out myself. I guess I'll have to break out the hexeditor and look at the bits. Anyway, could you take a look at 0x43's pipe pointers and see if I'm correct?
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

There's a bunch of junk left at the end of room 43 which i should have cleared out but didn't..  the only relevant pointer is the one which points to room 01 page 7 in world 2.  hex bytes: 9e 01 27

I checked the rest of the pointers and they all point to room 43 in world 8 (the room used to be the world 8-4 castle which is why it has to many pointers to itself).  oh wait i do see one which points to room 02.  it is set for world 8 though so it's not a big deal and it's way past anywhere the player could get to so no big deal.  I suppose I should clean up all the levels though for the final version haha

Room 02 has no enemy data at all so i'm not sure why you're seeing pipe pointers in it

Karatorian

Well, I guess that explains it, for the most part. As for the pipe pointers in 02, I'm not sure what's going on there. My code simply follows the pointer and reads until it finds 0xFF, then it stops. If there's really no enemy data in room 02, I may have a bug, I'll have to check it out.

As for the room 43 pipe pointers active in world 8, I do have a bug there. As I only read two bits for the world active number (I'm not sure why, it seems pretty dumb), the world 8 pointers where being reported as the wrong world. Luckily, the code doesn't actually do anything with the pipe pointer world numbers other than display them as information, so the code produced shouldn't be effected.

As for cleaning up the extra junk in the levels, that would be a good idea for two reasons. Firstly, while I've added a lot of space to the ROM, it'd be nice if we could save as much as possible. I'm hoping that I can avoid any bank switching other than the sound code relocation, to keep things fairly simple. If I have to relocate more of the ROM, it'll get a lot more complicated. Secondly, my level insertion program is fairly simplistic. It simply loads the rooms for each world. Then it scans each of them for pipe pointers to get the rest of the rooms, which it also scans for pipes, etc. This means that any spurious pipe pointers will cause it to load extra data.

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

generalleoff

Exactly what do you want tested and what types of bugs do you want reported? I can point out several issues with worlds 1-5 ranging from simple graphics issues and nitpicks caused from improper use of background graphics, improper enemy placement causing erratic or incorrect enemy movement patterns, graphics issues caused by hacks, disappearing objects, glitching color issues, places where the original map was poorly designed and could be corrected or improved, and sometimes broken levels. I don't want to report stuff yer already well aware of or personal opinions and minor nitpicks you might not care about :)

Also me and a friend have been thinking of converting the game off and on for some time now but we really don't have the hacking skills required for many of the things needed by the conversion. So it's good to see other people had the same idea. We started some maps but never got far. We wanted to be a little less true to the original then you guys are being though. Like we wanted to replace the lame Hudson added enemy's from MB and DK with more traditional SMB enemy's.

I also wanted to add new enemy's to SMB in general (for use in other hacks) but again do to lack of hacking skills never could. For example blue and yellow Koopas that would change their direction of travel depending on the side Mario was on. Like if he was on the left side and the Koopa was walking left then you jumped to it's right side it would turn in place and walk right. Blues would be like greens and will walk of a ledge or into a pit and die if led to do so but yellows would stop at the edge of the ledge/pit and wait for Mario. We also wanted to add piranha plants that could shoot fire balls. They would come out of the pipe fire a few fireballs (in a straight line or in an ark to the left and right side) then go back down. They would be blue and yellow as well and blue would be the same as green and yellow the same as red as far as when they do and do not come out of the pipe. We also wanted support for piranhas that could come out of horizontal pipes. A Fire Brother is another enemy we wanted to add. They would use the same basic fireball pattern as Mario uses to attack. We also wanted to add Mario a flying power up like from Special and a new Hammer Brother power up. Also the ability to play as Toad and the Princess with their SMB2 (US) like play mechanics. Luigi would be the same as he is in SMB2 (Japan). Would also love to see the game hacked to allow left scrolling. That kinda stuff might be asking to much of the games engine and proly takes mad hacking skills to implement if it's even possible. Anyway just wanted to take this opportunity to share some of my ideas for SMB hacks but I don't want to ramble to much. :)

rbudrick

By the way, since the PC8801 version is 1 block taller vertically, was this cut out in the NES version from the top or the bottom?  Depending on the level, wouldn't it usually be best to remove the bottom layer of blocks since Marion walks on a ground that is two blocks high?

I'm sure some levels would call for top and some bottom, but to remain true, does what I say make sense?

-Rob

frantik

Quote from: generalleoff on March 24, 2008, 08:36:01 AM
I can point out several issues with worlds 1-5 ranging from simple graphics issues and nitpicks caused from improper use of background graphics, improper enemy placement causing erratic or incorrect enemy movement patterns, graphics issues caused by hacks, disappearing objects, glitching color issues, places where the original map was poorly designed and could be corrected or improved, and sometimes broken levels. I don't want to report stuff yer already well aware of or personal opinions and minor nitpicks you might not care about :)

well you certainly describe a lot of problems.. I would be interested to know about "graphics issues caused by hacks" and "glitching color issues".  as for the map design i'm only interested in knowing if there was an error in copying the level over.  broken levels of course I would like to know about.

I suspect Karatorian was primarily asking for someone to test his expanded ROM to ensure it plays like the unexpanded rom


Quotethe PC8801 version is 1 block taller vertically, was this cut out in the NES version from the top or the bottom?

the PC8801 version is one block shorter.  this has been incorporated into the hack as much as possible

rbudrick

Oh, the PC8801 is *shorter* than the NES SMB.  Ok, I misunderstood and had it backwards.  That's a lot easier to handle than if it were taller.   Sorry. Carry on.

-Rob

frantik

 :thumbsup:



Hey Karatorian i noticed sometimes enemies aren't rendered exactly in the right place.. look at map 6-2 chunk 3 it looks like two enemies (buzzy beetle and last plant) are misplaced

Karatorian

In regards to the misplaced enemies, I'm aware of them, but as far as I can tell, they're like that in the original game. For instance, look at level 5-4. The two firebars next to the elevator are not in the center of thier blocks. I did my testing on world 5-4 because the misplaced sprites are near the begining of the level, unlike most of the others, which are near the end of their levels. Using my level relocator and a lot of patience, I managed to get the following screenshot.



As you can see, the firebar is off by one column. I'm assuming the other offset sprites are actually wrong in the game as well. I could do more testing, but I doubt I'd be able to reach the effected areas given my lack of skill. I really should package up my level relocator and release it so that others can test stuff like this. (It's on my to do list.)

As for bug testing, I guess I should have been more specific. I'm interested in any bugs in my expanded ROM that don't appear in the non-expanded ROMs produced by frantik. Of course, bugs in the other ROMs (or common to both) are good to know about as well. I wouldn't consider (supposed) poor level design inherited from the original game a bug.

As for various ideas about improving SMBS above and beyond a straight forward port, I think it's an idea with merit, but I feel that such a project should come later. (I've personally thought about producing a mega SMB with SMBJ2's Luigi and other physics changes and SMB, SMBS, and SMB2J's levels all in one. Of course, producing a patch for such a project would be problematic, to say the least.)

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

cool as long as you know about it and it's not a bug.. it was trivial anyways but i figured you'd want to know :)

generalleoff

Alright I'll just post some of the most problematic issues for now. Most I will screenshot but some I will just describe. I will not bother with tile placement errors, enemy placement errors, or places where the player can get stuck (both due to bad map design on Hudsons part and due to bugs present in the NES version of the game) for now.

Upside down pipes are graphically glitched on rim of the opening of the pipe. You are probably well aware of this already.




This balance lift will glitch.





This flag will glitch. It is caused by having inviable coin blocks so close to the pole. They also allow Mario to jump over the flag run further right and then die.




Mario can jump through this wall. It is a bug caused by having the invisible coin block right next to the wall.




Two objects from a block may not occupy the same screen. One will disappear if both are activated at the same time. In 3-2 it's a mushroom/flower x2. In 4-1 it's a vine and mushroom/flower.



This balance lift has a color glitch and the left pulley is glitched.




This is as far into the game as I can go. The map will no longer scroll past this pipe. Going into the pipe sends you to the cloud world without the vine filling the hole. Dropping through that hole or walking to the end of the cloud world will drop you back to the proper cloud world drop point.

I'll post more as I see them in future patches.

frantik

#197
thanks for pointing those out

3-1 balance error is due to me not correcting the ropes after i moved the balance thing down. - will fix

3-1 hidden coin errors - minor issues that can't be helped if the map is to be the same.  and i assume it's a deliberate trick to get you to go over the flag only to die.. later in the game there is another one which leads to a bonus room

3-3 wrong color rope.. dunno whats up with that  :o edit: looks like it was due to not having a rope object there before so the palette wasn't set

multiple object glitch - annoying but it's an engine/level design problem more than something i can fix easily

4-1 problems - dunno whats up will investigate.. edit:  well it's not showing up on my copy of the rom so either Karatorian thats a bug on your end or a bug in the patching or something.. i don't see the random floating mushroom bit at the top of the screen either.  there should be a hole after the pipe as well

thanks :)

MathUser2929

I'm glad that it's you guys that are doing the port tho. It sounds like others may of not taken the port as seriously, not to mention it requires alot more than a level editor to successfully make this.

Karatorian

Ok, the issue with 4-1 was due to a bug in my level extraction program. The level object data terminator is 0xFD as the coordinate information, however, my code was terminating on any 0xFD byte. As map 4-1 had two instances of object 0x7D with the new page bit, the extractor terminated prematurely. Of course, the game engine didn't, so it started reading data from the next map.

This may have also lead to additional bugs. I've rewritten the object data extration routine (and enemies extraction as well) to fix this. You can download the updated patch here.

However, the pipe going to the cloud area is present in the original patch and not related to this bug. According to the level render and pipe info file for 4-1, that pipe isn't supposed to be enterable.

Thanks for all the playtesting. Thanks especially for the speedy reply.

Hey frantik, any idea when world 6 will be up?
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