Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

The Legend of Zelda: Oracle of Seasons/RAM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
m (Amended C627 - C628 explanation.)
((Probably) mapped C662 - C66C + Made styles on the tables consistent + Split off into a new dungeon section.)
Line 6: Line 6:


==TBD==
==TBD==
{| border="3" cellpadding="7" style="max-width: 75%;"
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; min-width: 100px;" | '''RAM'''
! style="text-align: center; width: 100px;" | '''RAM'''
! style="min-width: 75px;" | '''Size'''
! style="width: 75px;" | '''Size'''
! style="min-width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
Line 28: Line 28:
|C63A || 1 Byte || Current level bank ||
|C63A || 1 Byte || Current level bank ||
|-
|-
|C63B || 1 Byte || Current ''Absolute'' Overworld Screen<br /><br /><center>'''OR'''</center><br />Current ''Relative'' Dungeon Screen || On the overworld, all 256 map tiles are represented in order; left to right, top to bottom, 0x00 - 0xFF.<br /><br /><br />Inside a dungeon, only map tiles that are valid rooms are represented while empty map tiles are not counted; the only empty map tiles that are counted are the ones leading up to the first valid room in order, then from there, the value only increases with each valid room. <span style="float: right; margin-left: 500px;">[[File:Zelda OoS RAM C63B 01.png|200px]]</span>
|C63B || 1 Byte || Current ''Absolute'' Overworld Screen<br /><br /><center>'''OR'''</center><br />Current ''Relative'' Dungeon Screen || On the overworld, all 256 map tiles are represented in order; left to right, top to bottom, 0x00 - 0xFF.<br /><br /><br />Inside a dungeon, only map tiles that are valid rooms are represented while empty map tiles are not counted; the only empty map tiles that are counted are the ones leading up to the first valid room in order, then from there, the value only increases with each valid room. <span style="float: right;">[[File:Zelda OoS RAM C63B 01.png|200px]]</span>
|-
|-
|C63C || 1 Byte || Current ''Absolute'' Dungeon Screen || Unlike with C63B, all tiles on the dungeon map, including ones that do not represent a valid room, are counted in order; left to right, top to bottom, 0x00 - 0xFF.<span style="float: right; margin-left: 500px;">[[File:Zelda OoS RAM C63C 01.png|200px]]</span>
|C63C || 1 Byte || Current ''Absolute'' Dungeon Screen || Unlike with C63B, all tiles on the dungeon map, including ones that do not represent a valid room, are counted in order; left to right, top to bottom, 0x00 - 0xFF.<span style="float: right;">[[File:Zelda OoS RAM C63C 01.png|200px]]</span>
|}
|}


<br />
<br /><br />


==Enemies killed since...==
==Enemies killed since...==
{| border="3" cellpadding="7" style="max-width: 75%;"
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; min-width: 100px;" | '''RAM'''
! style="text-align: center; width: 100px;" | '''RAM'''
! style="min-width: 75px;" | '''Size'''
! style="width: 75px;" | '''Size'''
! style="min-width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
Line 77: Line 77:
|}
|}


<br />
<br /><br />


==Mysterious Counter==
==Mysterious Counter==
Line 99: Line 99:
|Slay an Enemy || 0x03 ||
|Slay an Enemy || 0x03 ||
|}
|}
<br />


==Items/Collectables==
<br /><br />
{| border="3" cellpadding="7" style="max-width: 75%;"
 
! style="text-align: center; min-width: 100px;" | '''RAM'''
==Dungeon Things==
! style="min-width: 75px;" | '''Size'''
{| border="3" cellpadding="7" style="width: 75%;"
! style="min-width: 300px;" | '''Purpose'''
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Size'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
|C66E || 1 Byte || Small Keys — Hero's Cave ||
|C662 || 1 Byte || Has entered Hero's Cave ||
|-
|C663 || 1 Byte || Has entered Level 1: Gnarled Root Dungeon || Exiting a sublevel or using a mini-boss warp will also set this flag (though redundant).
|-
|C664 || 1 Byte || Has entered Level 2: Snake's Remains (?) ||
|-
|C665 || 1 Byte || Has entered Level 3: Poison Moth's Lair (?) ||
|-
|C666 || 1 Byte || Has entered Moblin's Keep (?) ||
|-
|-
|C66F || 1 Byte || Small Keys — Level 1: Gnarled Root Dungeon ||
|C667 || 1 Byte || Has entered Level 4: Dancing Dragon Dungeon (?) ||
|-
|-
|C670 || 1 Byte || Small Keys — Level 2: Snake's Remains (?) ||
|C668 || 1 Byte || Has entered Level 5: Unicorn's Cave (?) ||
|-
|-
|C671 || 1 Byte || Small Keys — Level 3: Poison Moth's Lair (?) ||
|C669 || 1 Byte || Has entered Level 6: Ancient Ruins (?) ||
|-
|-
|C672 || 1 Byte || Small Keys — Moblin's Keep (?) ||
|C66A || 1 Byte || Has entered Level 7: Explorer's Crypt (?) ||
|-
|-
|C673 || 1 Byte || Small Keys — Level 4: Dancing Dragon Dungeon (?) ||
|C66B || 1 Byte || Has entered Level 8: Sword & Shield Maze (?) ||
|-
|-
|C674 || 1 Byte || Small Keys — Level 5: Unicorn's Cave (?) ||
|C66C || 1 Byte || Has entered Onox's Castle (?) ||
|}
{| border="3" cellpadding="7" style="width: 75%;"
|-
|-
|C675 || 1 Byte || Small Keys — Level 6: Ancient Ruins (?) ||
| style="width: 100px;" | C66E || style="width: 75px;" | 1 Byte || style="width: 300px;" | Small Keys — Hero's Cave ||
|-
|-
|C676 || 1 Byte || Small Keys — Level 7: Explorer's Crypt (?) ||
| C66F || 1 Byte || Small Keys — Level 1: Gnarled Root Dungeon ||
|-
|-
|C677 || 1 Byte || Small Keys — Level 8: Sword & Shield Maze (?) ||
| C670 || 1 Byte || Small Keys — Level 2: Snake's Remains (?) ||
|-
|-
|C678 || 1 Byte || Small Keys — Onox's Castle (?) ||
| C671 || 1 Byte || Small Keys — Level 3: Poison Moth's Lair (?) ||
|-
|-
|C67A || 1 Byte || Has Boss Key || True if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F'''<br />(TODO: Determine why multiple values evaluate to True)
| C672 || 1 Byte || Small Keys — Moblin's Keep (?) ||
|-
|-
|C67C || 1 Byte || Has Compass || True if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F'''<br />(TODO: Determine why multiple values evaluate to True)
| C673 || 1 Byte || Small Keys — Level 4: Dancing Dragon Dungeon (?) ||
|-
|-
|C67E || 1 Byte || Has Dungeon Map || True if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F'''<br />(TODO: Determine why multiple values evaluate to True)
| C674 || 1 Byte || Small Keys — Level 5: Unicorn's Cave (?) ||
|-
| C675 || 1 Byte || Small Keys — Level 6: Ancient Ruins (?) ||
|-
| C676 || 1 Byte || Small Keys — Level 7: Explorer's Crypt (?) ||
|-
| C677 || 1 Byte || Small Keys — Level 8: Sword & Shield Maze (?) ||
|-
| C678 || 1 Byte || Small Keys — Onox's Castle (?) ||
|}
{| border="3" cellpadding="7" style="width: 75%;"
|-
| style="width: 100px;" | C67A || style="width: 75px;" | 1 Byte || style="width: 300px;" | Has Boss Key || True if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F'''<br />(TODO: Determine why multiple values evaluate to True)
|-
| C67C || 1 Byte || Has Compass || True if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F'''<br />(TODO: Determine why multiple values evaluate to True)
|-
| C67E || 1 Byte || Has Dungeon Map || True if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F'''<br />(TODO: Determine why multiple values evaluate to True)
|}
 
<br /><br />
 
==Items/Collectables==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Size'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
|-
|-
|C680 - C691 ||  || Items ||
|C680 - C691 ||  || Items ||
Line 174: Line 211:
|C6C6 || 1 Byte || Ring Box level ||
|C6C6 || 1 Byte || Ring Box level ||
|}
|}
<br />
 
<br /><br />


==TBD==
==TBD==
Line 191: Line 229:
|CF00 - CFAF ||  || Current Screen Tile Data ||
|CF00 - CFAF ||  || Current Screen Tile Data ||
|}
|}
<br />
 
<br /><br />


==Unmapped==
==Unmapped==

Revision as of 00:18, 25 April 2023

NOTE: All values in Tables are Hexadecimal unless noted otherwise.

Chip tiny.png The following article is a RAM map for The Legend of Zelda: Oracle of Seasons.

Bank 0 (C000 - CFFF)


TBD

RAM Size Purpose Note
C5C0 - C5FF Unappraised rings carried
C602 - C606 5 Bytes Player name
C616 - C61D 8 Bytes Rings owned
C61E - C61F 2 Bytes Deaths
C622 - C625 4 Bytes Time passed since power-on
C627 - C628 2 Bytes Rupees earned since file creation Value is represented in decimal.

Example: If the total earned rupee count is 8,473, the hexadecimal representation will be 0x8473.

When a rupee gain puts the value is pushed over 0x9999, the value is then set to 0x6363, the value will no longer change, and a flag (somewhere) is then set so that Vasu will give the Rupee Ring the next time he is spoken with.
C629 1 Byte Message Speed 0x00 - 0x04

Some higher values yield hilarious results such as a letter appearing once per few seconds.
C63A 1 Byte Current level bank
C63B 1 Byte Current Absolute Overworld Screen

OR

Current Relative Dungeon Screen
On the overworld, all 256 map tiles are represented in order; left to right, top to bottom, 0x00 - 0xFF.


Inside a dungeon, only map tiles that are valid rooms are represented while empty map tiles are not counted; the only empty map tiles that are counted are the ones leading up to the first valid room in order, then from there, the value only increases with each valid room. Zelda OoS RAM C63B 01.png
C63C 1 Byte Current Absolute Dungeon Screen Unlike with C63B, all tiles on the dungeon map, including ones that do not represent a valid room, are counted in order; left to right, top to bottom, 0x00 - 0xFF.Zelda OoS RAM C63C 01.png



Enemies killed since...

RAM Size Purpose Note
C63E 1 Byte Last Maple encounter
C64C 1 Byte Gasha Seed planted at ??
C64D 1 Byte Gasha Seed planted at ??
C64E 1 Byte Gasha Seed planted at ??
C64F 1 Byte Gasha Seed planted at ??
C650 1 Byte Gasha Seed planted at ??
C651 1 Byte Gasha Seed planted at ??
C652 1 Byte Gasha Seed planted at ??
C653 1 Byte Gasha Seed planted at ??
C654 1 Byte Gasha Seed planted at ??
C655 1 Byte Gasha Seed planted at ??
C656 1 Byte Gasha Seed planted at K7
C657 1 Byte Gasha Seed planted at ??
C658 1 Byte Gasha Seed planted at ??
C659 1 Byte Gasha Seed planted at ??
C65A 1 Byte Gasha Seed planted at ??
C65B 1 Byte Gasha Seed planted at M9



Mysterious Counter

C65C - C65D A counter for ??? for which various actions increment
Action Incrementation Note
Great Fairy Heal 0x40
Bomb a Wall 0x32
Collect a Fairy 0x18
Screen Transition 0x05 This excludes entering/exiting structures, or taking mini-boss warps in dungeons.
(TODO: Test Gale seeds)
Collect a Heart 0x04
Slay an Enemy 0x03



Dungeon Things

RAM Size Purpose Note
C662 1 Byte Has entered Hero's Cave
C663 1 Byte Has entered Level 1: Gnarled Root Dungeon Exiting a sublevel or using a mini-boss warp will also set this flag (though redundant).
C664 1 Byte Has entered Level 2: Snake's Remains (?)
C665 1 Byte Has entered Level 3: Poison Moth's Lair (?)
C666 1 Byte Has entered Moblin's Keep (?)
C667 1 Byte Has entered Level 4: Dancing Dragon Dungeon (?)
C668 1 Byte Has entered Level 5: Unicorn's Cave (?)
C669 1 Byte Has entered Level 6: Ancient Ruins (?)
C66A 1 Byte Has entered Level 7: Explorer's Crypt (?)
C66B 1 Byte Has entered Level 8: Sword & Shield Maze (?)
C66C 1 Byte Has entered Onox's Castle (?)
C66E 1 Byte Small Keys — Hero's Cave
C66F 1 Byte Small Keys — Level 1: Gnarled Root Dungeon
C670 1 Byte Small Keys — Level 2: Snake's Remains (?)
C671 1 Byte Small Keys — Level 3: Poison Moth's Lair (?)
C672 1 Byte Small Keys — Moblin's Keep (?)
C673 1 Byte Small Keys — Level 4: Dancing Dragon Dungeon (?)
C674 1 Byte Small Keys — Level 5: Unicorn's Cave (?)
C675 1 Byte Small Keys — Level 6: Ancient Ruins (?)
C676 1 Byte Small Keys — Level 7: Explorer's Crypt (?)
C677 1 Byte Small Keys — Level 8: Sword & Shield Maze (?)
C678 1 Byte Small Keys — Onox's Castle (?)
C67A 1 Byte Has Boss Key True if value ends in 2, 3, 6, 7, A, B, E, or F
(TODO: Determine why multiple values evaluate to True)
C67C 1 Byte Has Compass True if value ends in 2, 3, 6, 7, A, B, E, or F
(TODO: Determine why multiple values evaluate to True)
C67E 1 Byte Has Dungeon Map True if value ends in 2, 3, 6, 7, A, B, E, or F
(TODO: Determine why multiple values evaluate to True)



Items/Collectables

RAM Size Purpose Note
C680 - C691 Items
C6A2 1 Byte Current Hearts
C6A3 1 Byte Max Hearts
C6A5 - C6A6 2 Bytes Rupees Value is represented in decimal.

Example: If the total rupee count is 639, the hexadecimal representation will be 0x0639.
C6A7 - C6A8 2 Bytes Ore Chunks
C6A9 1 Byte Shield level
C6AA 1 Byte Current Bombs
C6AC 1 Byte Sword level
C6B1 1 Byte Boomerang level
C6B3 1 Byte Slingshot level
C6B4 1 Byte Roc's feather level
C6B5 1 Byte Ember Seeds
C6B6 1 Byte Scent Seeds
C6B7 1 Byte Pegasus Seeds
C6B8 1 Byte Gale Seeds
C6B9 1 Byte Mystery Seeds
C6BA 1 Byte Gasha Seeds
C6BB 1 Byte Essences
C6C6 1 Byte Ring Box level



TBD

RAM Size Purpose Note
C700 - C7FF 256 Bytes Overworld Screen Flags (used to track events and map exploration)
CC30 1 Byte Enemies left on screen
CE00 - CEAF Current Screen Collision Data Dynamically generated from the screen tile data. This space is also used as a temporary store for compressed level data read from ROM.
CF00 - CFAF Current Screen Tile Data



Unmapped

RAM Note
C000 - C5BF
C600 - C601
C607 - C615
C620 - C621
C626
C628- C639
C63D
C63F - C64B
C65E - C66C
C679
C67B
C67D
C67F
C692 - C6A1
C6A4
C6AB
C6AD - C6B0
C6B2
C6BC - C6C5
C6C7 - C6FF
C800 - CC2F
CC31 - CDFF
CEB0 - CEFF
CFB0 - CFFF