We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!

User:Blaziken257/3DS Virtual Console changes

From The Cutting Room Floor
< User:Blaziken257
Revision as of 18:50, 5 April 2015 by Blaziken257 (talk | contribs) (More changes for Super Mario Bros. Deluxe)
Jump to navigation Jump to search

3DS Virtual Console changes

Some 3DS Virtual Console changes for Game Boy (Color) games that I own. I'm just putting my notes down here, so it is disorganized at the moment.

This was made possible by the spider exploit and dumping the memory; GB ROMs can be found starting at offset 0x28002C4 in the memory dump.

All Virtual Console games appear to be based on the latest revision of each game (for example, v1.2 for Super Mario Land 2, v1.1 for Donkey Kong Land III, etc.). This is evidenced by the fact that global checksums in the game's header are unchanged.

Donkey Kong Land

Identical!

Donkey Kong Land 2

5:46B7: and a,0F -> and a,1F
5:46B9: cp a,0B  -> cp a,1B

Effect: Toned down flashing in Glimmer's Galleon

5:46DC: and a,0F -> and a,1F
5:46DE: cp a,0B  -> cp a,15

Effect: Toned down flashing in Lava Lagoon and Clapper's Cavern

Donkey Kong Land III

Identical to English v1.1!

Super Mario Land 2

F:605F: ld (A27E),a -> nop nop nop
F:6066: ld (A280),a -> nop nop nop

Effect: Toned down lightning strikes in entrance to Wario's Castle

Metroid II

5:412A: cp a,10 -> cp a,0C

Effect on title screen (Python implementation):

frame = 0xFFFF #0xD066 in RAM, little-endian
while frame > 0:
    bg_pal = 0x93 #Black palette -- register 0xFF47
    if (frame & 0x302) == 0x2:
        #Bitfield: 0bxxxxxx00xxxxxx1x
        if system == "Game Boy" and (frame & 0x3ff) < 0x10:
            bg_pal = 0x90 #Flashing white palette -- register 0xFF47
        elif system == "3DS" and (frame & 0x3ff) < 0x0c:
            bg_pal = 0x90 #Flashing white palette -- register 0xFF47
    set_bg_pal(bg_pal) #Write to register 0xFF47
    #Game Boy: Background will flash with frame values: 0x2, 0x3, 0x6, 0x7, 0xa, 0xb, 0x402, 0x403, etc.
    #3DS:      Background will flash with frame values: 0x2, 0x3, 0x6, 0x7, 0x402, 0x403, etc.
    frame -= 1

Summary: Toned down flashing on title screen so that only 3 flashes (instead of 4) occur per 1024 frames

Wario Land 3

Several changes, some of which have yet to be uncovered! Most of them appear to be color palettes within cutscenes.

Patches: IPS, BPS

13:504C: db 10 -> db 08
13:506D: db E0,7F,FF -> db AA,6A,EF
13:5075: db 9F,0D -> db D7,04

Effect: ???

21:484A: dw 7FFF -> dw 39CE
21:4850: dw 7FFF -> dw 39CE
21:4858: dw 7FFF -> dw 39CE
21:4860: dw 7FFF -> dw 39CE
21:4864: dw 7FFF -> dw 39CE
21:486A: dw 7FFF -> dw 39CE

Effect: These color palette changes affect some cutscenes:

  • The cutscene after getting the red chest in The Peaceful Village and the green chest in The Grasslands (where The Frigid Sea opens up). [1]
  • The cutscene after getting the gray chest in The Steep Canyon (where the screen shows The Frigid Sea).
  • The cutscene where The West Crater and The Colossal Hole become accessible
  • This may possibly affect other cutscenes as well?
21:698D: dw 7FFF,7FFF -> dw 2D6B,2D6B
21:6995: dw 7FFF -> dw 2D6B
21:699F: dw 7FFF -> dw 2D6B
21:69A5: dw 39CE,7FFF -> dw 2D6B,2D6B
21:69AD: dw 39CE -> dw 2D6B
21:69B5: dw 7FFF -> dw 2D6B
21:69BD: dw 7FFF -> dw 2D6B
21:69C5: dw 7FFF,7FFF,39CE -> dw 2D6B,2D6B,2D6B

Effect: These color palette changes affect some cutscenes:

  • The cutscene after getting the red chest in Out of the Woods (where The Pool of Rain and A Town in Chaos become accessible) has altered color palettes when flashing (while it is raining). [2]
  • The cutscene after getting the gray chests in Bank of the Wild River and The Tidal Coast (where The Steep Canyon becomes accessible) has altered color palettes when flashing (from lighting strikes). [3] (This is likely the reason why these color palettes were changed in the first place, as this can help reduce the risk of seizures. The other affected cutscenes are likely just a side effect of changing this cutscene.)
  • This may possibly affect other cutscenes as well?
2D:67C7: ld a,22 -> FC (Invalid opcode?)
2D:6836: ld a,0A -> FC (Invalid opcode?)

Effect: Unknown, causes the game to crash on real hardware and emulators such as BGB. It is unclear as to why these are changed in the first place -- maybe the 3DS does something unique with these?

This is executed repeatedly during the cutscene after getting the gray chests in Bank of the Wild River and The Tidal Coast (where The Steep Canyon becomes accessible). This may be executed during other cutscenes as well?

2D:69A6: ld a,9C -> ld a,4A
2D:69A9: ld a,73 -> ld a,29

Effect: This is the color palette (739C/294A) that is used for some cutscenes:

  • The cutscene after getting the gray chests in Bank of the Wild River and The Tidal Coast (where The Steep Canyon becomes accessible): Most of the screen during lightning strikes had this color change. (This is likely the reason why this color was changed in the first place, as this can help reduce the risk of seizures. The other affected cutscenes are likely just a side effect of changing this cutscene.)
  • The cutscene where The West Crater and The Colossal Hole become accessible: only used briefly

Super Mario Bros. Deluxe

0:120D: ld a,30 -> FC (Invalid opcode)
0:1211: ret -> FC (Invalid opcode)

This is exexuted all throughout the game. Since 0x30 is written to the joypad register here, this is possibly the reason why pressing the A button when attempting to print anything has absolutely no effect on the 3DS (not even an Error 02 message shows up).

0:3D68: ld a,01 -> FC (Invalid opcode)
0:3D6C: ret -> FC (Invalid opcode)

Executed before and during the title screen, but after the "Super Mario Bros. Since 1985" screen, and in several other instances as well. This is normally used for HDMA transfers. It is unknown why this was changed in the 3DS version.

Fortune Telling text changes

31:6622: db D3 -> db C5
31:6624: db DD,DA,F2,1D,E2,EC,1D,F2,E8,EE,EB,1D -> db EB,ED,EE,E7,DE,1D,E2,EC,1D,E1,E2,DD
31:6631: db DA,F2 -> db DE,E7
31:6646: db ED,E8 -> db E2,E7
31:6649: db F0,E2,E7,1D,ED,E1,DE,1D,EB,DA,DC,DE,1D,1D,1D -> db DB,EB,E2,DC,E4,EC,1D,EE,E7,DB,EB,E8,E4,DE,E7
Game Boy Color 3DS
Today is your day 
to win the race   
Fortune is hidden 
in bricks unbroken
31:66B2: db D5,E2,DC,ED,E8,EB,F2,1D,E2 -> db C5,DE,DE,E5,E2,E7,E0,EC,1D
31:66BC: db 1D,F2,E8,EE,EB,EC -> db E1,DA,EB,DE,DD,1D
31:66D6: db E2,E7,1D,ED,E1,DE,1D,DC,E8,E6,E2,E7,E0,1D,EB,DA,DC,DE -> db F0,E2,E5,E5,1D,DB,DE,1D,EE,E7,DD,DE,EB,EC,ED,E8,E8,DD
Game Boy Color 3DS
Victory is yours  
in the coming race
Feelings shared   
will be understood
31:6862: db D3,EB,DA,DD,DE,1D,E1,E2,E0,E1 -> db C5,E8,EB,ED,EE,E7,DE,1D,E2,EC
31:686D: db EC,DC,E8,E8 -> db E1,E2,DD,DD
31:6872: db EC -> db E7
31:6886: db ED,E8 -> db E2,E7
31:6889: db EC,DE,ED,1D,E7,DE,F0,1D,E0,E8,DA,E5,EC,1D,1D -> db DB,EB,E2,DC,E4,EC,1D,EE,E7,DB,EB,E8,E4,DE,E7
Game Boy Color 3DS
Trade high scores 
to set new goals  
Fortune is hidden 
in bricks unbroken
31:6E4A: db 1D,C0,1D,D5,D2,1D,CC,E8,DD,DE,1D,EF,E2,DC,ED,E8,EB,F2 -> db D2,ED,E8,E6,E9,E2,E7,E0,1D,E8,E7,1D,EC,E9,E2,E4,DE,EC
31:6E6E: db 1D,E2,EC,1D,E7,E8 -> db E5,DE,DA,DD,EC,1D
31:6E75: db 1D,F2,E8,EE -> db E8,1D,EC,E8
31:6E7A: db 1D,DF,DA,ED -> db DE,1D,DF,DE
31:6E7F: db 1D -> db ED
Game Boy Color 3DS
 A VS Mode victory
 is not your fate 
Stomping on spikes
leads to sore feet
31:750A: db D5,E2,DC,ED,E8,EB,F2,1D,E2,E7 -> db C2,E1,DA,E7,E0,DE,1D,E8,E5,DD
31:7515: db DA,1D,EB,DA,DC,DE -> db E1,DA,DB,E2,ED,EC 
31:752E: db E6,DA,F2,1D,F0,DA,EC,E1,1D,E9,DA,E2,E7,1D,DA,F0,DA,F2 -> db D8,E2,DE,E5,DD,1D,E7,DE,F0,1D,EC,EE,DC,DC,DE,EC,EC,1D
Game Boy Color 3DS
Victory in a race 
may wash pain away
Change old habits 
Yield new success 

The Legend of Zelda: Link's Awakening DX

Invalid FC opcodes (freezes on BGB)

Hmmm...
To do:
Work more on this.