SMB1 + SMB2J SRAM Plus (FDS hack)

A place where you can keep others updated about your NES-related projects through screenshots, videos or information in general.

Moderator: Moderators

User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

ShaneM wrote:

Okay. I now have a perfect understanding of what this EU difference does. I will get into more detail tomorrow when I get up and after I get some free time. In a nutshell, this really doesn't fix any glitch. Rather, if corrects an oversight on the NTSC programmer's part. It is customization, as well as optimization. It has to do with a very specific jump slightly over an enemy, so close to the head that it should be counted as a "stomp" in the NTSC but counts as a player injury if the enemy is #$06 or less. I tried changing the code and specifically testing with an enemy that sets Carry (Lakitu) to verify. The EU separates Cheep-Cheep frenzies from this because on the account of diagonal enemy jumping on their part since their bounding box data is different. I will incorporate this into my SMB2J build; it only takes 1 additional byte and I found an opportunity to optimize code in "KillPlayer" to earn two free bytes. --ShaneM, the Master of ASM

Okay, here is my more in-depth explanation. (Lakitu is my guinea pig in this example, since it will set the MSB thereby not cause the code to branch in ChkInj.)

Picture 1: For this to work, you must be no further from Lakitu than this.
Image

Picture 2: This demonstrates when the code is in action in the NTSC version. See how Mario is not exactly hitting Lakitu's head from the top, though collision is counted as Lakitu being stomped from the 800 pts. above? That's the CMP Enemy_Y_Position,x in action there.
Image

Picture 3: This is what happens when I NOP those nine bytes to see what happens. The player is injured instead of Lakitu being damaged. You can see Mario's swim animation, there. When the player takes damage and shrinks, there are actually two swim animations used in the process.

Image

I used savestates to test this to make sure everything is exactly the same to verify. Look at the timer and Spiny's on the ground. Everything is exact between photo 2 and 3.

The EU version changes it to include all enemies because there are instances where, for example, Goombas are going down stairs while the player is jumping up and Mario/Luigi wrongfully takes damage. It singles out Cheep-Cheeps because they can (and will) jump at a diagonal angle, which causes damage to the player if A still contained #$14 at the time. It was specifically changed to load #$07 with flying Cheep-Cheeps to fix that. (I tried changing the #$07 to a #$14 in the EU version to verify that I was correct.)

The new build is scheduled to be released tomorrow of SMB2J and will add this fix from the EU version. It will be RC5. RC2 of the manual is due tomorrow, too. --ShaneM, The Master of ASM
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

Alright. I was able to add the code into SMB2J by optimizing the routine "KillPlayer" to make room. Yay. ^_^

Here is a picture of the code in action against the Goomba that's loaded on 1-1 all the way at the top. Damage is no longer taken by the player but is counted as a stomp if at the right angle. --ShaneM, the Master of ASM

EDIT: Btw, the enemy keeps falling when stomped like it's supposed to do, too.

EDIT2: Turns out I was able to optimize enough code to earn me 3 free bytes. So I still have two more to spare from that optimization.
Attachments
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_004.png
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_004.png (3.37 KiB) Viewed 13552 times
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

I like how the SNES version gave purple for the night skies. I could add stars to M-tileset 3 to make them glow (by using the star metatile used on the titlescreen; tileset 3 contains glowing objects like coins, axe etc.) but I simply don't have PRG to do so. Or else I would add it to the scenery tileset as well as code it for night. To make up, I assign each stage type a new background. To ice levels I assign arctic blue, to regular levels sky blue, night stages black, sunset stages for pure cloud levels (only 8-2 ending, 8-3 and A-3) and dark purple skies for night snow (just like how the sky is colored in real life when it snows).

Thoughts? 5 different color in total, as pictured below. --ShaneM, the Master of ASM



Image

Image
Attachments
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_007.png
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_007.png (4.4 KiB) Viewed 13521 times
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_009.png
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_009.png (3.57 KiB) Viewed 13521 times
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_008.png
Super Mario Bros. 2 - The Lost Levels with SRAM (Japan)_008.png (5.13 KiB) Viewed 13521 times
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

Here is the next RC5, as promised. Though this still hasn't been tested yet. I'm releasing a rough build in assumption that it is fully stable. I will begin heavy testing in the first week of Feb. All ASM work on this SMB: The Lost Levels is final and complete. I will only correct errors I find, if any on my part. I will tackle SMB1 really soon. I want to release the manual now, too. But I will pass it by tepples to see if it's okay, first. Patch it to an SMB2J FDS ROM with a CRC16 of BA55. --ShaneM, the Master of ASM

Here is a copy of the .pal file, which keeps all the original colors in order, except replaces $3F with the dark purple used on Snow Night levels. No game that I know uses it anyway. (rename it from .ips to .pal)
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

Here's RC6 of both SMB1 and SMB2J. It has the latest fixes. I'll just list them, quickly. Also, you'll need the custom palette file above to enjoy the new night snowy palette which uses $3F.

Changelog:

*Added routine from EU SMB1 to void underwater block collision
*Fixed the Axe glitch
*Added the routine from the EU SMB1 for when hitting enemy from their upper sides
*Corrected some Flying Cheep-Cheep code that I messed up on
*Added customized palettes for various levels
*Fixed and corrected various "Engrish" text

*When I implemented the hitting enemy fix from the EU SMB1 I seemed to have overlooked the fact that the bounding boxes were changed for Tall Enemy (enemy ID $09), so this has been fixed, too.

Code: Select all

BoundBoxCtrlData:
      .db $02, $08, $0e, $20 
      .db $03, $14, $0d, $20
      .db $02, $14, $0e, $20
      .db $02, $09, $0e, $15
      .db $00, $00, $18, $06
      .db $00, $00, $20, $0d
      .db $00, $00, $30, $0d
      .db $00, $00, $08, $08
      .db $06, $04, $0a, $08
.ifdef Japan
      .db $03, $0e, $0d, $16
.else
      .db $03, $0c, $0d, $16
.endif
      .db $00, $02, $10, $15
      .db $04, $04, $0c, $1c

This is released as-is until early Feb., when intense testing begins. Like SMB2J, all ASM coding on this is complete unless some error on my part comes up. --ShaneM, the Master of ASM
Last edited by ShaneM on Sun Nov 01, 2015 10:59 am, edited 1 time in total.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

I forgot to post my wind fix http://themushroomkingdom.net/bugs/55. Here it is for those who want it, credit me if used:

Code: Select all

;Make all previous branches to "ImpedePlayerMove" branch to "windfix4" instead

windfix4:
lda WindFlag ;if wind is off, then branch
beq StopPlayerMove
dec Player_X_Position   ;otherwise decrement from the player's X position to neutralize movement
StopPlayerMove:
       jsr ImpedePlayerMove      ;stop player's movement
ExCSM: rts                       ;leave

ShaneM, The Master of ASM
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

The beta ground tiles unused in SMB2J is actually used in the game's manual! The manual was written on June 03rd, 1986; two months before the release. https://tcrf.net/Super_Mario_Bros._2_%2 ... _System%29

Glad I made use of the tiles!
Attachments
IMG_0023.JPG
IMG_0021.JPG
Last edited by ShaneM on Mon Jan 26, 2015 7:36 pm, edited 1 time in total.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

In the above post, that release date on TCRF is wrong, so if the author of it is reading this, correct it to being "unknown". The game was manufactured on Wednesday July 23rd, 1986, but the commercial release date is unknown. (That date listed is the written date of my manual.) --ShaneM
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

The saga continues with another look at the mysterious SMB2J manual. Today, for the first time in history, I share a look at an SMB2J beta stage! Nothing like this has been discovered by anyone else concerning SMB1 or SMB2J. Brace yourselves.

Here is the level in question: http://nesmaps.com/maps/SuperMarioBroth ... apC-1.html

Now, look at the attached picture below. You'll see the same clip of the beginning of C-1 except for: 1) It seems to take place at day, with a Snowy terrain (the All-Stars version has this level as a Snowy Night one). 2) The level is different with arrangement of blocks and slightly different spacing. 3) The level is assigned as 5-1 rather than C-1. Does this imply that 5-1 was changed at last minute and the original 5-1 was moved to C-1? In intrigues me whether what's now known as 5-1 may have been C-1 at the time and swapped before release or if the current 5-1 didn't exist at the time. 4) As usual, the beta ground tiles are also used.

EDIT: The pipes in the beta screenshot replaces the vertical blocks used in the final level with bricks.

Enjoy. --The Master of ASM
Attachments
IMG_0027.JPG
User avatar
yxkalle
Posts: 62
Joined: Sun Jan 27, 2013 7:30 pm

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by yxkalle »

Exactly what do you mean by SRAM? Ability to save your progress? When I think of SRAM I think of cartridges, not FDS floppies. :)

What I'm asking is: Does this run on real hardware?
User avatar
Hamtaro126
Posts: 818
Joined: Thu Jan 19, 2006 5:08 pm

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by Hamtaro126 »

SRAM is found built-in via FDS RAM around 6000-DFFF, But unlike NES's SRAM in carts (6000-7FFF), A seperate file is required to be loaded into ram from the disk.

As for testing: The easiest way is by PowerPak, otherwise you can try finding a good, empty FDS formatted disk (it's an officially modified Mitsumi Quickdisk, I think!) and the only way to write a disk is very hard and unreliable, and if you were to do one anyways, ask someone like Chris ''Toungeman'' Covell for instructions
AKA SmilyMZX/AtariHacker.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

The saga continues. So far, I've shared some beta images. I've got some more to share from the manual, but I wanted to take today's post to elaborate on one I've already shared. (The next post will have a new image.)

The level in question is 1-1 of SMB2J: http://nesmaps.com/maps/SuperMarioBroth ... ap1-1.html

Now compare it to the attached screenshot below. Some comments:

1) All the way up at the top the row of 8 coins was originally 2.

2) The Starman on the left of the second row of bricks was originally 5 bricks to the right.

3) The Goomba is not seen on the top; perhaps it is there but just walked offscreen?

4) The 10 Coin Brick to the right of the 4-block stairs is absent.

5) The beta ground tiles are used (of course).

Other updates:
I've removed halfway pages to SMB1 when playing Hard Mode (after accumulating 8 stars on the titlescreen). The other enhancements to Hard Mode still stand. I was able to optimize another routine to earn 13 free bytes. (I found another routine that I could save 6 on but it's only loaded during the title screen routine.)

Here's the code and RC7.5 of both game attached at the bottom. For SMB2J I've done more thorough testing and fixed a couple of things. It seems stable. More testing to follow on both games this month. So far, no crashes and no bugs whatsoever; only Mario perfection and Nintendo-original glitches fixed. ^_^

Code: Select all

StillInGame: 
             lda gamesbeatencount     ;ShaneM code
             cmp #$08    ;ShaneM code
             bcs new_label  ;ShaneM code
             lda WorldNumber          ;multiply world number by 2 and use
             asl                      ;as offset
             tax
             lda LevelNumber          ;if in level 3 or 4, increment
             and #$02                 ;offset by one byte, otherwise
             beq GetHalfway           ;leave offset alone
             inx
GetHalfway:  ldy HalfwayPageNybbles,x ;get halfway page number with offset
             lda LevelNumber          ;check area number's LSB
             lsr
             tya                      ;if in level 2 or 4, use lower nybble
             bcs MaskHPNyb
             lsr                      ;move higher nybble to lower if
             lsr                      ;level number is 1 or 3
             lsr
             lsr
MaskHPNyb:   and #%00001111           ;mask out all but lower nybble
             cmp ScreenLeft_PageLoc
             beq SetHalfway           ;left side of screen must be at the halfway page,
             bcc SetHalfway           ;otherwise player must start at the
new_label:       ;ShaneM label       
	     lda #$00                 ;beginning of the level
SetHalfway:  sta HalfwayPage          ;store as halfway page for player
             jmp ContinueGame         ;continue the game
I've also found SMB1 FDS' proper header from a No-Intro clean dump. The true SMB1 FDS header is now used.

I've also corrected doppleganger on an error he made with his commentary on the SMB1 and SMB2J disassembly in "ChkStart:"; he's credited me. (My name on the disassembly is on line 16.) The new version can be found here: SMB1. I will remind him about the SMB2J one if he doesn't correct it.

Patch these to an SMB2J ROM with a CRC16 of BA55. --ShaneM, the Master of ASM
Attachments
IMG_0023.JPG
Last edited by ShaneM on Sun Nov 01, 2015 10:59 am, edited 1 time in total.
User avatar
Myask
Posts: 965
Joined: Sat Jul 12, 2014 3:04 pm

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by Myask »

6) The breakable brick above the bottom step is absent.
ShaneM wrote: 1) All the way up at the top the row of 8 coins was originally 2.
To play devil's advocate, the tester could've collected the leftmost ones by bonking the bricks, then circled around the platform...if some bricks didn't exist. I suppose the scenarios EXIST for doing it, but require more convolution than I thought. Nevermind.
User avatar
ShaneM
Posts: 353
Joined: Wed Apr 04, 2012 4:15 pm
Location: United States of America (USA)
Contact:

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by ShaneM »

Myask wrote:6) The breakable brick above the bottom step is absent.
ShaneM wrote: 1) All the way up at the top the row of 8 coins was originally 2.
To play devil's advocate, the tester could've collected the leftmost ones by bonking the bricks, then circled around the platform...if some bricks didn't exist. I suppose the scenarios EXIST for doing it, but require more convolution than I thought. Nevermind.
I can prove that that's not the case. Look at the number of coins on the status bar; they tally up to 3, so that is not possible. The possibility exists for up to five coins on the top bricks if they were indeed collected (counting that no other coins were collected earlier in the level). Either way, 8 is an impossibility. --ShaneM

EDIT: And the #6 that you listed is my #4. So that was not necessary.
ShaneM wrote:
4) The 10 Coin Brick to the right of the 4-block stairs is absent.
User avatar
Myask
Posts: 965
Joined: Sat Jul 12, 2014 3:04 pm

Re: SMB1 + SMB2J SRAM Plus (FDS hack)

Post by Myask »

Yeah, probably just fewer coins.

But I'm talking about the brick to the left of the stairs, not the one to the right. It doesn't look like the stairs moved, comparing scenery and the upper platform. Just those two bricks.
Attachments
comparison.png
Post Reply