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 (→‎Enemies killed since...: Removed redundancy.)
No edit summary
 
(22 intermediate revisions by 3 users not shown)
Line 2: Line 2:
{{rammap|game=The Legend of Zelda: Oracle of Seasons}}
{{rammap|game=The Legend of Zelda: Oracle of Seasons}}


=Bank 0 (C000 - CFFF)=
=Bank 0 ($C000 - $CFFF)=
<br />
<br />


==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;" | '''Length'''
! style="min-width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
|C5C0 - C5FF ||  || Unappraised rings carried ||
|'''$C5C0''' - '''$C5FF''' ||  || Unappraised rings carried ||
|-
|'''$C602''' - '''$C606''' || 5 Bytes || Player name ||
|-
|-
|C602 - C606 || || Player name ||
|'''$C616''' - '''$C61D''' || 8 Bytes || Rings owned ||
|-
|-
|C616 - C61D || || Rings owned ||
|'''$C61E''' - '''$C61F''' || 2 Bytes || Deaths ||
|-
|-
|C61E - C61F || 2 Bytes || Deaths ||
|'''$C620''' - '''$C621''' || 2 Bytes || Enemies killed since file creation || When total killed enemies reaches <code>0x3E8</code>, <code>0x01</code> is added to <code>$C6CA</code> to set a flag for Vasu to give the Slayer's Ring, and this no longer increments when killing enemies.
|-
|-
|C622 - C625 || 4 Bytes || Time passed since power-on ||
|'''$C622''' - '''$C625''' || 4 Bytes || Time passed since power-on ||
|-
|-
|C627 || 2 Bytes || Rupees earned since file creation || Value is represented in decimal
|'''$C627''' - '''$C628''' || 2 Bytes || Rupees earned since file creation || Value is represented in decimal.<br /><br />'''Example''': If the total earned rupee count is 8,473, the hexadecimal representation will be <code>0x8473</code>.<br /><br />When a rupee gain pushes the value over <code>0x9999</code>, the value is then set to 0x6363, the value will no longer change, and <code>$C6CA</code> is then incremented by <code>0x01</code> so that Vasu will give the Rupee Ring the next time he is spoken with.
|-
|-
|C63A || 1 Byte || Current level bank ||
|'''$C629''' || 1 Byte || Message Speed || <code>0x00 - 0x04</code><br /><br />Some higher values yield hilarious results such as a letter appearing once per few seconds.
|-
|-
|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>
|'''$C63A''' || 1 Byte || Current level bank ||
|-
|-
|C63C || 1 Byte || Current ''Absolute'' Dungeon Screen || Unlike with C63B, all squares 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>
|'''$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, <code>0x00 - 0xFF</code>.<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 <code>$C63B</code>, 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, <code>0x00 - 0xFF</code>.<span style="float: right;">[[File:Zelda OoS RAM C63C 01.png|200px]]</span>
|}
|}


<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;" | '''Length'''
! style="min-width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
|C63E || 1 Byte || Last Maple encounter ||
|'''$C63E''' || 1 Byte || Last Maple encounter ||
|-
|-
|C64C || 1 Byte || Gasha Seed planted at ?? ||
|'''$C64C''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C64D || 1 Byte || Gasha Seed planted at ?? ||
|'''$C64D''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C64E || 1 Byte || Gasha Seed planted at ?? ||
|'''$C64E''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C64F || 1 Byte || Gasha Seed planted at ?? ||
|'''$C64F''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C650 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C650''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C651 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C651''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C652 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C652''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C653 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C653''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C654 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C654''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C655 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C655''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C656 || 1 Byte || Gasha Seed planted at K7 ||
|'''$C656''' || 1 Byte || Gasha Seed planted at K7 ||
|-
|-
|C657 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C657''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C658 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C658''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C659 || 1 Byte || Gasha Seed planted at ?? ||
|'''$C659''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C65A || 1 Byte || Gasha Seed planted at ?? ||
|'''$C65A''' || 1 Byte || Gasha Seed planted at ?? ||
|-
|-
|C65B || 1 Byte || Gasha Seed planted at M9 ||
|'''$C65B''' || 1 Byte || Gasha Seed planted at M9 ||
|}
|}


<br />
 
 
 


==Mysterious Counter==
==Mysterious Counter==
{| border="3" cellpadding="4"
{| border="3" cellpadding="4"
|+'''C65C - C65D'''
|+'''$C65C''' - '''$C65D'''
|+'''A counter for ??? for which various actions increment'''
|+'''A counter for ??? for which various actions increment'''
! style="text-align: center;" | '''Action'''  
! style="text-align: center;" | '''Action'''  
! '''Incrementation'''
! '''Incrementation'''
! '''Note'''
|-
|Collect a Heart Piece || <code>0x64</code> ||
|-
|-
|Great Fairy Heal || 0x40
|Great Fairy Heal || <code>0x40</code> ||
|-
|-
|Bomb a Wall || 0x32
|Bomb a Wall || <code>0x32</code> ||
|-
|-
|Collect a Fairy || 0x18
|Collect a Fairy || <code>0x18</code> ||
|-
|-
|Screen Transition (excluding entering and exiting structures) || 0x05
|Screen Transition || <code>0x05</code> || This excludes entering/exiting structures, or taking mini-boss warps in dungeons.<br />(TODO: Test Gale seeds)
|-
|-
|Collecting a Heart || 0x04
|Collect a Heart || <code>0x04</code> ||
|-
|-
|Slaying an Enemy || 0x03
|Slay an Enemy || <code>0x03</code> ||
|}
|}
<br />


==Items/Collectables==
 
{| border="3" cellpadding="7" style="max-width: 75%;"
 
! style="text-align: center; min-width: 100px;" | '''RAM'''
 
! style="min-width: 75px;" | '''Size'''
 
! style="min-width: 300px;" | '''Purpose'''
==Dungeon Things==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
|-
|'''$C662''' || 1 Byte || Has entered Hero's Cave || rowspan="9" | Exiting a sublevel or using a mini-boss warp in the corresponding level will also set these flags (though redundant).
|-
|'''$C663''' || 1 Byte || Has entered Level 1: Gnarled Root Dungeon
|-
|'''$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 Level 4: Dancing Dragon Dungeon (?)
|-
|'''$C667''' || 1 Byte || Has entered Level 5: Unicorn's Cave (?)
|-
|'''$C668''' || 1 Byte || Has entered Level 6: Ancient Ruins (?)
|-
|'''$C669''' || 1 Byte || Has entered Level 7: Explorer's Crypt (?)
|-
|'''$C66A''' || 1 Byte || Has entered Level 8: Sword & Shield Maze (?)
|}
{| border="3" cellpadding="7" style="width: 75%;"
|-
| style="width: 100px;" | '''$C66E''' || style="width: 75px;" | 1 Byte || style="width: 300px;" | 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 — Level 4: Dancing Dragon Dungeon ||
|-
| '''$C673''' || 1 Byte || Small Keys — Level 5: Unicorn's Cave ||
|-
| '''$C674''' || 1 Byte || Small Keys — Level 6: Ancient Ruins ||
|-
| '''$C675''' || 1 Byte || Small Keys — Level 7: Explorer's Crypt ||
|-
| '''$C676''' || 1 Byte || Small Keys — Level 8: Sword & Shield Maze ||
|}
{| border="3" cellpadding="7" style="width: 75%;"
|-
| style="width: 100px;" | '''$C67A''' || style="width: 75px;" | 1 Byte || style="width: 300px;" | Has Big Key(s) ||rowspan="3"|<!--'''<code>0x01</code>''' — Hero's Cave<br />'''<code>0x02</code>''' — Level 1: Gnarled Root Dungeon<br />'''<code>0x04</code>''' — Level 2: Snake's Remains<br />'''<code>0x08</code>''' — Level 3: Poison Moth's Lair<br />'''<code>0x10</code>''' — Level 4: Dancing Dragon Dungeon<br />'''<code>0x20</code>''' — Level 5: Unicorn's Cave<br />'''<code>0x40</code>''' — Level 6: Ancient Ruins<br />'''<code>0x80</code>''' — Level 7: Explorer's Crypt<br /><br />'''<code>0xFF</code>''' — Level 8: Sword & Shield Maze<br /><br />
 
Different combinations of these values applied to one of these three addresses will result in having different combinations of <strong>Big Keys, Compasses, or Dungeon Maps</strong> respectively.<br /><br />
After each significant value, the amount of combinations of values until the next significant value are the amount of combinations before the last significant value multiplied by 2 and adding 1. There are therefore <code>0x7F</code> combinations after the value <code>0x80</code> which puts the byte's value at <code>0xFF</code> thus making it the perfect amount of space to describe 9 things and all their combinations including the possibility of nothing (<code>0x00</code>).<br /><br />
'''Example''': If you wanted to have one of these items in only Levels 1, 3, and 6, you would add the values for those levels together [<code>0x01 + 0x08 + 0x20</code>], the result of which is <code>0x29</code>, and apply that value to the corresponding address.<br />If you want one of these items in every level, that's [<code>0x01 + 0x02 + 0x04 + 0x08 + 0x10 + 0x20 + 0x40 + 0x80</code>] which is <code>0xFF</code>.-->
|-
| '''$C67C''' || 1 Byte || Has Compass(s)
|-
| '''$C67E''' || 1 Byte || Has Dungeon Map(s)
|}
 
 
 
 
 
==Items==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
|C66F || 1 Byte || Small Keys ||
|'''$C680''' || 1 Byte || Item on '''B''' Button ||
|-
|'''$C681''' || 1 Byte || Item on '''A''' Button ||
|-
|'''$C682''' || 1 Byte || Inventory Slot 1 ||
|-
|'''$C683''' || 1 Byte || Inventory Slot 2 ||
|-
|'''$C684''' || 1 Byte || Inventory Slot 3 ||
|-
|'''$C685''' || 1 Byte || Inventory Slot 4 ||
|-
|'''$C686''' || 1 Byte || Inventory Slot 5 ||
|-
|'''$C687''' || 1 Byte || Inventory Slot 6 ||
|-
|'''$C688''' || 1 Byte || Inventory Slot 7 ||
|-
|'''$C689''' || 1 Byte || Inventory Slot 8 ||
|-
|'''$C68A''' || 1 Byte || Inventory Slot 9 ||
|-
|'''$C68B''' || 1 Byte || Inventory Slot 10 ||
|-
|'''$C68C''' || 1 Byte || Inventory Slot 11 ||
|-
|'''$C68D''' || 1 Byte || Inventory Slot 12 ||
|-
|-
|C67A || 1 Byte || Has Boss Key<br />(if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F''') ||
|'''$C68E''' || 1 Byte || Inventory Slot 13 ||
|-
|-
|C67C || 1 Byte || Has Compass<br />(if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F''') ||
|'''$C68F''' || 1 Byte || Inventory Slot 14 ||
|-
|-
|C67E || 1 Byte || Has Dungeon Map<br />(if value ends in '''2''', '''3''', '''6''', '''7''', '''A''', '''B''', '''E''', or '''F''') ||
|'''$C690''' || 1 Byte || Inventory Slot 15 ||
|-
|'''$C691''' || 1 Byte || Inventory Slot 16 ||
|}
 
 
 
 
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
|-
|-
|C680 - C691 || || Items ||
|'''$C6A2''' || 1 Byte || Current Hearts ||
|-
|-
|C6A2 || 1 Byte || Current Hearts ||
|'''$C6A3''' || 1 Byte || Max Hearts ||
|-
|-
|C6A3 || 1 Byte || Max Hearts ||
|'''$C6A5''' - '''$C6A6''' || 2 Bytes || Rupees || Value is represented in decimal.<br /><br />'''Example''': If the total rupee count is 639, the hexadecimal representation will be <code>0x0639</code>.
|-
|-
|C6A5 - C6A6 || 2 Bytes || Rupees ||
|'''$C6A7''' - '''$C6A8''' || 2 Bytes || Ore Chunks ||
|-
|-
|C6A7 - C6A8 || 2 Bytes || Ore Chunks ||
|'''$C6A9''' || 1 Byte || Shield level ||
|-
|-
|C6A9 || 1 Byte || Shield level ||
|'''$C6AA''' || 1 Byte || Current Bombs ||
|-
|-
|C6AA || 1 Byte || Current Bombs ||
|'''$C6AC''' || 1 Byte || Sword level ||
|-
|-
|C6AC || 1 Byte || Sword level ||
|'''$C6B1''' || 1 Byte || Boomerang level ||
|-
|-
|C6B1 || 1 Byte || Boomerang level ||
|'''$C6B3''' || 1 Byte || Slingshot level ||
|-
|-
|C6B3 || 1 Byte || Slingshot level ||
|'''$C6B4''' || 1 Byte || Roc's feather level ||
|-
|-
|C6B4 || 1 Byte || Roc's feather level ||
|'''$C6B5''' || 1 Byte || Ember Seeds ||
|-
|-
|C6B5 || 1 Byte || Ember Seeds ||
|'''$C6B6''' || 1 Byte || Scent Seeds ||
|-
|-
|C6B6 || 1 Byte || Scent Seeds ||
|'''$C6B7''' || 1 Byte || Pegasus Seeds ||
|-
|-
|C6B7 || 1 Byte || Pegasus Seeds ||
|'''$C6B8''' || 1 Byte || Gale Seeds ||
|-
|-
|C6B8 || 1 Byte || Gale Seeds ||
|'''$C6B9''' || 1 Byte || Mystery Seeds ||
|-
|-
|C6B9 || 1 Byte || Mystery Seeds ||
|'''$C6BA''' || 1 Byte || Gasha Seeds ||
|-
|-
|C6BA || 1 Byte || Gasha Seeds ||
|'''$C6BB''' || 1 Byte || Essences ||
|-
|-
|C6BB || 1 Byte || Essences ||
|'''$C6CA''' || 1 Byte || Vasu Ring Flags || <big>'''<code>0x01</code>'''</big>: Slayed 1,000 Monsters — <u>Slayer's Ring</u><br /><big>'''<code>0x02</code>'''</big>: Collected 10,000 Rupees — <u>Rupee Ring</u><br /><big>'''<code>0x04</code>'''</big>: Saved the World — <u>Victory Ring</u><br /><br />
Based on what events have occurred, the above values get added to this address. Collecting each corresponding ring then adds the corresponding value multiplied by 0x10 to this address.
 
 
 
'''Example''': If the value is <code>0x03</code>, the player has collected 10,000 rupees and slayed 1,000 Monsters <code>[0x02 + 0x01]</code>. After the Rupee Ring is received, the value is then <code>0x23</code> <code>[0x03 + (0x03 * 0x10)]</code>, and then when the Slayers Ring is received, the value is <code>0x33</code> <code>[0x23 + (0x01 * 0x10)]</code>.
|-
|-
|C6C6 || 1 Byte || Ring Box level ||
|'''$C6C6''' || 1 Byte || Ring Box level ||
|}
|}
<br />
 
 
 
 


==TBD==
==TBD==
{| border="3" cellpadding="7" style="max-width: 75%;"
{| border="3" cellpadding="7" style="max-width: 75%;"
! style="text-align: center; min-width: 100px;" | '''RAM'''
! style="text-align: center; min-width: 100px;" | '''RAM'''
! style="min-width: 75px;" | '''Size'''
! style="min-width: 75px;" | '''Length'''
! style="min-width: 300px;" | '''Purpose'''
! style="min-width: 300px;" | '''Purpose'''
! '''Note'''
! '''Note'''
|-
|-
|C700 - C7FF || || Overworld Screen Flags (used to track events and map exploration) ||
|'''$C700''' - '''$C7FF''' || 256 Bytes || Overworld Screen Flags (used to track events and map exploration) ||
|-
|-
|CC30 || 1 Byte || Enemies left on screen ||
|'''$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) ||
|'''$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 ||
|'''$CF00''' - '''$CFAF''' ||  || Current Screen Tile Data ||
|}
|}
<br />
 
 
 
 


==Unmapped==
==Unmapped==
Line 174: Line 300:
! '''Note'''
! '''Note'''
|-
|-
|C000 - C5BF ||
|'''$C000''' - '''$C5BF''' ||
|-
|-
|C600 - C601 ||
|'''$C600''' - '''$C601''' ||
|-
|-
|C607 - C615 ||
|'''$C607''' - '''$C615''' ||
|-
|-
|C620 - C621 ||
|'''$C620''' - '''$C621''' ||
|-
|-
|C626 ||
|'''$C626''' ||
|-
|-
|C628- C639 ||
|'''$C628''' - '''$C639''' ||
|-
|-
|C63D ||
|'''$C63D''' ||
|-
|-
|C63F - C64B ||
|'''$C63F''' - '''$C64B''' ||
|-
|-
|C65E - C66E ||
|'''$C65E''' - '''$C661''' ||
|-
|-
|C670 - C679 ||
|'''$C66B''' - '''$C66C''' ||
|-
|-
|C67B ||
|'''$C677''' - '''$C679''' ||
|-
|-
|C67D ||
|'''$C67B''' ||
|-
|-
|C67F ||
|'''$C67D''' ||
|-
|-
|C692 - C6A1 ||
|'''$C67F''' ||
|-
|-
|C6A4 ||
|'''$C692''' - '''$C6A1''' ||
|-
|-
|C6AB ||
|'''$C6A4''' ||
|-
|-
|C6AD - C6B0 ||
|'''$C6AB''' ||
|-
|-
|C6B2 ||
|'''$C6AD''' - '''$C6B0''' ||
|-
|-
|C6BC - C6C5 ||
|'''$C6B2''' ||
|-
|-
|C6C7 - C6FF ||
|'''$C6BC''' - '''$C6C5''' ||
|-
|-
|C800 - CC2F ||
|'''$C6C7''' - '''$C6FF''' ||
|-
|-
|CC31 - CDFF ||
|'''$C800''' - '''$CC2F''' ||
|-
|-
|CEB0 - CEFF ||
|'''$CC31''' - '''$CDFF''' ||
|-
|-
|CFB0 - CFFF ||
|'''$CEB0''' - '''$CEFF''' ||
|-
|'''$CFB0''' - '''$CFFF''' ||
|}
|}
{{Internal Data}}

Latest revision as of 14:34, 24 January 2024

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 Length Purpose Note
$C5C0 - $C5FF Unappraised rings carried
$C602 - $C606 5 Bytes Player name
$C616 - $C61D 8 Bytes Rings owned
$C61E - $C61F 2 Bytes Deaths
$C620 - $C621 2 Bytes Enemies killed since file creation When total killed enemies reaches 0x3E8, 0x01 is added to $C6CA to set a flag for Vasu to give the Slayer's Ring, and this no longer increments when killing enemies.
$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 pushes the value over 0x9999, the value is then set to 0x6363, the value will no longer change, and $C6CA is then incremented by 0x01 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 Length 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
Collect a Heart Piece 0x64
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 Length Purpose Note
$C662 1 Byte Has entered Hero's Cave Exiting a sublevel or using a mini-boss warp in the corresponding level will also set these flags (though redundant).
$C663 1 Byte Has entered Level 1: Gnarled Root Dungeon
$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 Level 4: Dancing Dragon Dungeon (?)
$C667 1 Byte Has entered Level 5: Unicorn's Cave (?)
$C668 1 Byte Has entered Level 6: Ancient Ruins (?)
$C669 1 Byte Has entered Level 7: Explorer's Crypt (?)
$C66A 1 Byte Has entered Level 8: Sword & Shield Maze (?)
$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 — Level 4: Dancing Dragon Dungeon
$C673 1 Byte Small Keys — Level 5: Unicorn's Cave
$C674 1 Byte Small Keys — Level 6: Ancient Ruins
$C675 1 Byte Small Keys — Level 7: Explorer's Crypt
$C676 1 Byte Small Keys — Level 8: Sword & Shield Maze
$C67A 1 Byte Has Big Key(s)
$C67C 1 Byte Has Compass(s)
$C67E 1 Byte Has Dungeon Map(s)



Items

RAM Length Purpose Note
$C680 1 Byte Item on B Button
$C681 1 Byte Item on A Button
$C682 1 Byte Inventory Slot 1
$C683 1 Byte Inventory Slot 2
$C684 1 Byte Inventory Slot 3
$C685 1 Byte Inventory Slot 4
$C686 1 Byte Inventory Slot 5
$C687 1 Byte Inventory Slot 6
$C688 1 Byte Inventory Slot 7
$C689 1 Byte Inventory Slot 8
$C68A 1 Byte Inventory Slot 9
$C68B 1 Byte Inventory Slot 10
$C68C 1 Byte Inventory Slot 11
$C68D 1 Byte Inventory Slot 12
$C68E 1 Byte Inventory Slot 13
$C68F 1 Byte Inventory Slot 14
$C690 1 Byte Inventory Slot 15
$C691 1 Byte Inventory Slot 16



RAM Length Purpose Note
$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
$C6CA 1 Byte Vasu Ring Flags 0x01: Slayed 1,000 Monsters — Slayer's Ring
0x02: Collected 10,000 Rupees — Rupee Ring
0x04: Saved the World — Victory Ring

Based on what events have occurred, the above values get added to this address. Collecting each corresponding ring then adds the corresponding value multiplied by 0x10 to this address.


Example: If the value is 0x03, the player has collected 10,000 rupees and slayed 1,000 Monsters [0x02 + 0x01]. After the Rupee Ring is received, the value is then 0x23 [0x03 + (0x03 * 0x10)], and then when the Slayers Ring is received, the value is 0x33 [0x23 + (0x01 * 0x10)].

$C6C6 1 Byte Ring Box level



TBD

RAM Length 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 - $C661
$C66B - $C66C
$C677 - $C679
$C67B
$C67D
$C67F
$C692 - $C6A1
$C6A4
$C6AB
$C6AD - $C6B0
$C6B2
$C6BC - $C6C5
$C6C7 - $C6FF
$C800 - $CC2F
$CC31 - $CDFF
$CEB0 - $CEFF
$CFB0 - $CFFF