News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: Super Metroid - Virtual Console / Super NES Classic Changes  (Read 1657 times)

TDOMMX

  • Jr. Member
  • **
  • Posts: 18
  • I won't give up.
    • View Profile
    • Darkside Translations
Super Metroid - Virtual Console / Super NES Classic Changes
« on: December 23, 2017, 04:04:25 pm »
Hi, everyone.

I'm sure many of you have already figured out how the Wii / Wii U Virtual Console and Super Nintendo Classic Edition handle the audio for Super Nintendo titles: rather than load audio natively from the game ROM itself, the audio is converted to PCM beforehand and stored externally, either in the form of a .PCM file or a .SFROM footer.  The audio data in each game is replaced with pointers to the corresponding data in the external audio so that the Wii / Wii U / SNES Classic can load the converted PCM data whenever audio is called.

While exploring the ROM files for the Wii Virtual Console, I noticed that a couple of games included updated ROMs with valid internal checksums and the original audio completely intact (in addition to the external-audio version used by Virtual Console itself).  The updated ROMs include a variety of graphical, textual, and programmatic changes that may gamers have expressed interest in documenting.  Just for the hell of it, I decided to see if, for the ROMs with new internal checksums, I could replace the PCM pointers with the original audio data and rebuild the "official" updated ROMs, using the internal checksums to validate my results.

I started doing exactly that with the ROMs included in the Super NES Classic, As luck would have it, I've been for the most part successful, rebuilding "official" versions of Contra III, Kirby's Dream Course, Secret of Mana, Street Fighter II Turbo, Super Castlevania IV, and Super Mario RPG.  In the case of Super Mario RPG, the SNES Classic version of the game contains additional changes to the Virtual Console version despite both games having identical internal checksums.  Using the Virtual Console version of the game as a base instead of the SNES Classic one, I was able to rebuild the "official" ROM that the internal checksum was generated for just fine.

That brings me to Super Metroid.  The ROMs for Super Metroid in the SNES Classic and in the Virtual Console release are byte-for-byte identical.  However, when I replace the PCM pointers with the original audio data, I still get a bad checksum when I launch the game via emulator.  Given what happened with Super Mario RPG, I think it's safe to assume that some changes were made to the Super Metroid ROM before its new checksum was generated, then further changes were made before the audio data was extracted and pointers were added in their place.  I'd like to ask for some help in identifying which changes were made before the new checksum was implemented (and possibly determine if I screwed up somewhere along the way in restoring the original audio data).

I've uploaded IPS patches (here) to convert the headerless J/U version of the game (No-Intro) to both its Virtual Console equivalent and my current rebuild of the game.

Thanks in advance for your help.  I wish you a Merry Christmas and Happy Holidays.
« Last Edit: January 02, 2018, 10:36:38 pm by TDOMMX »
This is TDOMMX signing out.

phalanX

  • Jr. Member
  • **
  • Posts: 24
    • View Profile
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #1 on: December 23, 2017, 07:18:49 pm »
Nice job, man. I feel rather fascinated when I hear that a rom has been tweaked for a Virtual Console release or whatever. "What kind of changes have been made?", that always crosses my mind. Can you remember anything at all from the top of your head?

TDOMMX

  • Jr. Member
  • **
  • Posts: 18
  • I won't give up.
    • View Profile
    • Darkside Translations
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #2 on: December 23, 2017, 10:24:53 pm »
Thanks for the kind words, phalanX!

To answer your question, I haven't played through any of the games I've rebuilt just yet (I've only booted them up to make sure the checksums are valid and the games actually work).  Off the top of my head, I remember that Final Fight replaced the graphics for a soda can so that it wouldn't resemble a can of Pepsi, and the word "bugger" in Super Mario RPG was replaced with "pest".  I'm almost positive that the changes across all games include a ton of palette modifications made for the sake of preventing epileptic seizures.

So far, it doesn't seem like any of the changes to Super Metroid include any sprite changes (if they are, they'd have to be compressed since Tile Layer Pro only shows gibberish at the offsets of each modification).  I'm not particularly well-versed in assembly, so I'm hoping someone with that expertise (and/or familiarity with hacking Super Metroid) might be able to help me figure out what's what so I can pin down what belongs in the "official" Virtual Console ROM and what changes were made after the new checksum was calculated.
This is TDOMMX signing out.

Metaquarius

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #3 on: December 24, 2017, 03:47:38 am »
From what I can tell, the changes are fairly small:
- bunch of palette animations edits (bank $8D)
- some changes related to crocomire's melted face animation (bank $A4)
- mother brain's flashing effect adjusted -when the room crumbles before chicken form- (bank $A9) < this one is pretty noticeable

TDOMMX

  • Jr. Member
  • **
  • Posts: 18
  • I won't give up.
    • View Profile
    • Darkside Translations
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #4 on: December 24, 2017, 11:52:30 pm »
Thanks, Metaquarius.

I've been doing my rebuilding via hex editor, so please excuse me for not recognizing which bank corresponds to which offset.  By my count, there are five sets of changes; if we count the three you found plus the internal checksum, that leaves one set of changes unaccounted for.

The differences I noticed when comparing the ROMs:

- The revised internal checksum and checksum complement at 00032732.
- A 164-byte set of changes at 00456855.
- A 318-byte set of changes at 00457327.
- An 18-byte set of changes at 01194277.
- A 120-byte set of changes at 01364146.

Could you help me pin down what's what?  Note that these comparisons are using Hex Workshop's default Compare settings; I wouldn't be surprised if the changes are much smaller and more frequent within what I identified.

Also, I decided to have a look at the ROMs for the Japanese Virtual Console / Super Famicom Mini in case they contained an "earlier" version of the Super Metroid ROM (the physical releases for Japan and North America were identical, so it was worth a shot).  To my surprise, although these ROMs are a perfect match to each other, they contain 3 additional changes not present in the US Virtual Console ROM (yet they still have the same internal checksum):

- A 32-byte set of changes at 01291219.
- An identical 32-byte set of changes at 01291539.
- A 33-byte set of changes at 02176646.

Again, I've made IPS patches so you can have a look at the changes yourself (here).  I'm genuinely surprised that there were more changes in the Japanese ROM and not less; this makes identifying which changes are reflected in the valid checksum even more difficult...

In any event, thanks again for your help.  Merry Christmas!
« Last Edit: January 02, 2018, 10:36:12 pm by TDOMMX »
This is TDOMMX signing out.

KingMike

  • Forum Moderator
  • Hero Member
  • *****
  • Posts: 6614
  • *sigh* A changed avatar. Big deal.
    • View Profile
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #5 on: December 25, 2017, 05:52:36 pm »
Just a note: the "0x" means you are specifying an address in hexadecimal, and your addresses look like decimal.
It can be confusing to people.
"My watch says 30 chickens" Google, 2018

Metaquarius

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #6 on: December 26, 2017, 04:20:38 am »
US changes :

-checksum stuff
-tourian escape palette animation (brown instead of red)
-crateria escape palette animation (brown instead of red and less epileptic)
-crocomire melting face stuff (some DMA transfer were changed but I see no difference in-game)
-flashing effect when motherbrain's room crumbles (less epileptic)

JPN changes :

-BG2 Kraid hurt palette (grey instead of white)
-OBJ Kraid hurt palette (grey instead of white)
-Norfair heated room tileset palette (background pillars are kind of brown instead of purple)

Maybe they used an earlier version to build this ROM?

TDOMMX

  • Jr. Member
  • **
  • Posts: 18
  • I won't give up.
    • View Profile
    • Darkside Translations
Re: Super Metroid - Virtual Console / Super NES Classic Changes
« Reply #7 on: January 02, 2018, 11:29:51 pm »
Just a note: the "0x" means you are specifying an address in hexadecimal, and your addresses look like decimal.
It can be confusing to people.
Whoops.  I didn't realize the offsets in Hex Workshop were being displayed as decimal and not hexadecimal (I could have sworn I configured it to use hex).  My bad.

That said, I've gone over every Wii Virtual Console ROM as well as the Super Mario All-Stars ROM found in Super Mario All-Stars - 25th Anniversary Edition for Wii.  As with the Super NES Classic ROMs, I've succeeded in rebuilding the "official" internal Virtual Console versions (i.e.: prior to their audio being stripped) for all but one of the included titles.  I'll post my complete findings when my time permits.  For now, I figured I'd post my incomplete rebuild of the one exception (Super Street Fighter II - The New Challengers) and see if I can get the same kind of help from you all that I did with Super Metroid, trying to identify whatever changes were made between releases.

For Super Street Fighter II, the Virtual Console version is based on an (as of this writing) undumped Version 1.1 of the game (at least, GoodSNES and No-Intro make no mention of a v1.1 / Rev 1 outside of the audio-stripped VC version and a lossy audio-restored ROM).  This build is, curiously, US-only; the Super Famicom Mini uses the Japanese Version 1.0 of the game (whose "official" internal version I had no problems rebuilding whatsoever).

As usual, I've uploaded patches for the audio-stripped Virtual Console ROM and my partially-rebuilt version (here).  There are too many differences since the Version 1.0 / Rev 0 of the game to even begin to pinpoint which ones applied to the ROM before its new internal checksum was generated.  I'm sure that, if Version 1.1 / Rev 1 had been dumped correctly, I'd have no problems rebuilding the "official" Virtual Console ROM as I did with the other 18 US titles I rebuilt and the Japanese SSFII release.  Still, I'd appreciate it nonetheless if you would help me at least try.

On that note: since I'm sure many of you are curious, I've succeeded in restoring the following "official" ROMs (and validated the results with their unaltered internal checksums):

- Contra III - The Alien Wars
- Donkey Kong Country 2: Diddy's Kong-Quest
- Final Fantasy II
- Final Fight
- Final Fight 2
- Final Fight 3
- Kirby's Dream Course
- Ogre Battle - The March of The Black Queen
- R-Type III - The Third Lightning
- Secret of Mana
- Street Fighter II - The World Warrior
- Street Fighter II Turbo - Hyper Fighting
- Super Castlevania IV
- Super Mario All-Stars
- Super Mario RPG - Legend of the Seven Stars
- Super Turrican
- The Legend of the Mystical Ninja
- Zombies Ate My Neighbors

The other 59 titles have the same internal checksums as their latest No-Intro revisions.

Aside from Super Metroid and Super Street Fighter II - The New Challengers, I'm hoping to rebuild the remaining Super NES Virtual Console ROMs that weren't released on the Wii's Virtual Console (namely, Breath of Fire, Castlevania - Dracula X, Demon's Crest, Mega Man VII, Mega Man X3, and Pac-Man 2 - The New Adventures).  Unfortunately, I don't have a Wii U, so I have no means of dumping these myself (and Nintendo will be discontinuing the Wii Shop Channel later this year, so time is limited for these 6 titles).  If you know anyone able to dump these games with a modified Wii U, please, by all means, point them to this thread.

Well, that's enough out of me for the time being.  The next time I'm free, I'll upload IPS patches updating the No-Intro dumps of the above titles to their "official" internal VC builds.
« Last Edit: January 02, 2018, 11:44:28 pm by TDOMMX »
This is TDOMMX signing out.