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
(Cutscenes)
(→‎Dungeons: Room of Rites; $C662 - $C67F complete.)
 
(19 intermediate revisions by the same user not shown)
Line 12: Line 12:


==Sound==
==Sound==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
! style="text-align: center; width: 100px;" | '''Address'''
|- style="background: #ccccff; font-size: 1.5em;"
! style="width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C024''' || 1 Byte || Sound Volume ||
|'''$C024''' || 1 Byte || Sound Volume ||
<center>
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
! colspan="8" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! 0
! 0
Line 49: Line 50:
<center>
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.5em;" | Volume Levels
! colspan="9" style="height: 35px; font-size: 1.3em;" | Volume Levels
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black;" |
! {{Diagonal split header | Speaker | Level | style=border-right: 2px solid black; width: 15%;}}
! 0
! 0
! 1
! 1
Line 94: Line 95:


==TBD==
==TBD==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C2EF''' || 1 Byte || Cutscene Index ||
|'''$C2EF''' || 1 Byte || Cutscene Index ||
Line 108: Line 110:
<center>
<center>
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="mw-collapsible mw-collapsed wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="3" style="height: 35px; font-size: 1.5em;" | Cutscenes
! colspan="3" style="height: 35px; font-size: 1.3em;" | Cutscenes
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black;" |
! {{Diagonal split header | Value | Info | style=border-right: 2px solid black; width: 10%;}}
! Cutscene<br />Description
! Cutscene<br />Description
! Notes
! Notes
Line 232: Line 234:


==TBD==
==TBD==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C5C0''' - '''$C5FF''' || 64 Bytes || Unappraised Rings ||
|'''$C5C0''' - '''$C5FF''' || 64 Bytes || Unappraised Rings || Todo: Map possible ring values.
|-
|-
|'''$C602''' - '''$C607''' || 6 Bytes || Player Name ||
|'''$C602''' - '''$C607''' || 6 Bytes || Player Name ||
<center>
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="6" style="height: 35px; font-size: 1.5em;" | Bytes
! colspan="6" style="height: 35px; font-size: 1.3em;" | Bytes
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! '''$C602'''
! '''$C602'''
Line 257: Line 260:
| Fourth Letter
| Fourth Letter
| Fifth Letter
| Fifth Letter
| Null Terminator<br /><br />This is always expected to be <code>0x00</code><br />Anything other than <code>0x00</code> will cause the game to softlock with either garbled graphics, or on a screen stating "This game can be played only on Game Boy® Color"
| Null Terminator<br /><br />This is always expected to be <code>0x00</code><br /><br />If the player name is 5 characters long, anything other than <code>0x00</code> will cause the game to softlock with either garbled graphics, or on a screen stating "This game can be played only on Game Boy® Color"
|}
|}
</center>
</center>




Todo: Map valid characters.
See the [[The_Legend_of_Zelda:_Oracle_of_Seasons/TBL|Text Map]] for a list of valid characters (though not all can be selected on file creation).
 
 
|-
|-
|'''$C616''' - '''$C61D''' || 8 Bytes || Rings Owned || Todo: Map which bits correspond to which rings.
|'''$C616''' - '''$C61D''' || 8 Bytes || Rings Owned || Todo: Map which bits correspond to which rings.
|}
|}


==Totals Since File Creation==
==Totals Since File Creation==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C61E''' - '''$C61F''' || 2 Bytes || Deaths || <u>'''Value is represented in decimal'''</u>
|'''$C61E''' - '''$C61F''' || 2 Bytes || Deaths || <u>'''Value is represented in decimal'''</u>
Line 287: Line 289:
|'''$C622''' - '''$C625''' || 4 Bytes || Time Passed (in frames) ||
|'''$C622''' - '''$C625''' || 4 Bytes || Time Passed (in frames) ||
|-
|-
|'''$C626''' || 1 Byte || Signs Destroyed ||
|'''$C626''' || 1 Byte || Signs Destroyed || TODO: Explain.
|-
|-
|'''$C627''' - '''$C628''' || 2 Bytes || Rupees Collected || <u>'''Value is represented in decimal'''</u>.<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>0x02</code> so that Vasu will give the Rupee Ring the next time he is spoken with.
|'''$C627''' - '''$C628''' || 2 Bytes || Rupees Collected || <u>'''Value is represented in decimal'''</u>.<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>0x02</code> so that Vasu will give the Rupee Ring the next time he is spoken with.
|}
|}


==TBD==
==TBD==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$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.
|'''$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.
|-
|-
|'''$C63A''' || 1 Byte || Current Level Bank ||
|'''$C63A''' || 1 Byte || Current Level Bank || TODO: Explain.
|-
|-
|'''$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>
|'''$C63B''' || 1 Byte || Current Absolute Map Position || 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>
|'''$C63C''' || 1 Byte || Current Dungeon Map Position || All tiles on the current floor of 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>
|-
|-
|'''$C63D''' || 1 Byte || Current Dungeon Floor ||
|'''$C63D''' || 1 Byte || Current Dungeon Floor || TODO: Explain.
|}
|}


==Maple: Part 2==
==Maple: Part 2==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C63E''' || 1 Byte || Last Maple Encounter || Maple appears at the first available opportunity when this reaches <code>0x1E</code> (greater than or equal to <code>0x0F</code> when wearing Maple's Ring), then it resets to <code>0x00</code>.
|'''$C63E''' || 1 Byte || Last Maple Encounter || Maple appears at the first available opportunity when this reaches <code>0x1E</code> (greater than or equal to <code>0x0F</code> when wearing Maple's Ring), then it resets to <code>0x00</code>.
Line 333: Line 329:


==Gasha==
==Gasha==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C64C''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C64C''' || 1 Byte || Gasha Seed Planted at B-16 || TODO: Explain.
|-
|-
|'''$C64D''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C64D''' || 1 Byte || Gasha Seed Planted at C-3 || TODO: Explain.
|-
|-
|'''$C64E''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C64E''' || 1 Byte || Gasha Seed Planted at D-9 || TODO: Explain.
|-
|-
|'''$C64F''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C64F''' || 1 Byte || Gasha Seed Planted at D-12 || TODO: Explain.
|-
|-
|'''$C650''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C650''' || 1 Byte || Gasha Seed Planted at E-5 || TODO: Explain.
|-
|-
|'''$C651''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C651''' || 1 Byte || Gasha Seed Planted at D-16 || TODO: Explain.
|-
|-
|'''$C652''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C652''' || 1 Byte || Gasha Seed Planted at H-6 || TODO: Explain.
|-
|-
|'''$C653''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C653''' || 1 Byte || Gasha Seed Planted at I-1 || TODO: Explain.
|-
|-
|'''$C654''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C654''' || 1 Byte || Gasha Seed Planted at I-10 || TODO: Explain.
|-
|-
|'''$C655''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C655''' || 1 Byte || Gasha Seed Planted at J-6 || TODO: Explain.
|-
|-
|'''$C656''' || 1 Byte || Gasha Seed Planted at K7 ||
|'''$C656''' || 1 Byte || Gasha Seed Planted at K-7 || TODO: Explain.
|-
|-
|'''$C657''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C657''' || 1 Byte || Gasha Seed Planted at K-13 || TODO: Explain.
|-
|-
|'''$C658''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C658''' || 1 Byte || Gasha Seed Planted at M-1 || TODO: Explain.
|-
|-
|'''$C659''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C659''' || 1 Byte || Gasha Seed Planted at O-16 || TODO: Explain.
|-
|-
|'''$C65A''' || 1 Byte || Gasha Seed Planted at ?? ||
|'''$C65A''' || 1 Byte || Gasha Seed Planted at P-1 || TODO: Explain.
|-
|-
|'''$C65B''' || 1 Byte || Gasha Seed Planted at M9 ||
|'''$C65B''' || 1 Byte || Gasha Seed Planted at M-9 || TODO: Explain.
|-
|-
| '''$C65C''' - '''$C65D'''|| 2 Bytes || Gasha Prize Quality ||
| '''$C65C''' - '''$C65D'''|| 2 Bytes || Gasha Prize Quality ||
Line 400: Line 397:
|}
|}


 
==Dungeons==
 
{| border="3" cellpadding="7" style="width: 75%; margin-left: 1em; border-color: #8888cc;"
 
|- style="background: #ccccff; font-size: 1.5em;"
 
==Dungeon Things==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$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).<br /><br /><sub>[There's more to these addresses than originally thought. More exploration needed.]</sub>
| '''$C662''' || 1 Byte || Visited Floors of <u>Hero's Cave</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
|'''$C663''' || 1 Byte || Has entered Level 1: Gnarled Root Dungeon
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
| '''$C663''' || 1 Byte || Visited Floors of <u>Level 1: Gnarled Root Dungeon</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
|'''$C664''' || 1 Byte || Has entered Level 2: Snake's Remains
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
|'''$C665''' || 1 Byte || Has entered Level 3: Poison Moth's Lair (?)
| '''$C664''' || 1 Byte || Visited Floors of <u>Level 2: Snake's Remains</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
|'''$C666''' || 1 Byte || Has entered Level 4: Dancing Dragon Dungeon (?)
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
|'''$C667''' || 1 Byte || Has entered Level 5: Unicorn's Cave (?)
| '''$C665''' || 1 Byte || Visited Floors of <u>Level 3: Poison Moth's Lair</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
|'''$C668''' || 1 Byte || Has entered Level 6: Ancient Ruins (?)
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| B1
| 1
| colspan="6" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
|'''$C669''' || 1 Byte || Has entered Level 7: Explorer's Crypt (?)
| '''$C666''' || 1 Byte || Visited Floors of <u>Level 4: Dancing Dragon Dungeon</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
|'''$C66A''' || 1 Byte || Has entered Level 8: Sword & Shield Maze (?)
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| B1
| 1
| 2
| colspan="5" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
|}
{| border="3" cellpadding="7" style="width: 75%;"
</center>
 
|-
|-
| style="width: 100px;" | '''$C66E''' || style="width: 75px;" | 1 Byte || style="width: 300px;" | Small Keys — Hero's Cave ||
| '''$C667''' || 1 Byte || Visited Floors of <u>Level 5: Unicorn's Cave</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
| '''$C66F''' || 1 Byte || Small Keys — Level 1: Gnarled Root Dungeon ||
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
| '''$C670''' || 1 Byte || Small Keys — Level 2: Snake's Remains ||
| '''$C668''' || 1 Byte || Visited Floors of <u>Level 6: Ancient Ruins</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
| '''$C671''' || 1 Byte || Small Keys — Level 3: Poison Moth's Lair ||
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| 2
| 3
| 4
| 5
| colspan="3" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
| '''$C672''' || 1 Byte || Small Keys — Level 4: Dancing Dragon Dungeon ||
| '''$C669''' || 1 Byte || Visited Floors of <u>Level 7: Explorer's Crypt</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
| '''$C673''' || 1 Byte || Small Keys — Level 5: Unicorn's Cave ||
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| B2
| B1
| 1
| colspan="5" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
| '''$C674''' || 1 Byte || Small Keys — Level 6: Ancient Ruins ||
| '''$C66A''' || 1 Byte || Visited Floors of <u>Level 8: Sword & Shield Maze</u> ||
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
| '''$C675''' || 1 Byte || Small Keys — Level 7: Explorer's Crypt ||
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| B1
| 1
| colspan="6" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
| '''$C676''' || 1 Byte || Small Keys — Level 8: Sword & Shield Maze ||
| '''$C66B''' || 1 Byte || Visited Floors of <u>Onox's Castle</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
|}
{| border="3" cellpadding="7" style="width: 75%;"
</center>
 
|-
|-
| 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 />
| '''$C66C''' || 1 Byte || Visited Floors of <u>Room of Rites</u> ||


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 />
<center>
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 />
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
'''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>.-->
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
|-
| '''$C67C''' || 1 Byte || Has Compass(s)
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>
 
|-
|-
| '''$C67E''' || 1 Byte || Has Dungeon Map(s)
| '''$C66D''' || 1 Byte || Visited Floors of <u>Linked Hero's Cave</u> ||
 
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
! scope="row" style="border-right: 2px solid black; width: 12%;" | Floor
| 1
| colspan="7" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
|}
</center>


|-
| '''$C66E''' || 1 Byte || Small Keys — <u>Hero's Cave</u> || rowspan="12" | Any value from <code>0x00</code> - <code>0xFF</code> is valid in these addresses, but graphics no longer work properly above <code>0x09</code>.
|-
| '''$C66F''' || 1 Byte || Small Keys — <u>Level 1: Gnarled Root Dungeon</u>
|-
| '''$C670''' || 1 Byte || Small Keys — <u>Level 2: Snake's Remains</u>
|-
| '''$C671''' || 1 Byte || Small Keys — <u>Level 3: Poison Moth's Lair</u>
|-
| '''$C672''' || 1 Byte || Small Keys — <u>Level 4: Dancing Dragon Dungeon</u>
|-
| '''$C673''' || 1 Byte || Small Keys — <u>Level 5: Unicorn's Cave</u>
|-
| '''$C674''' || 1 Byte || Small Keys — <u>Level 6: Ancient Ruins</u>
|-
| '''$C675''' || 1 Byte || Small Keys — <u>Level 7: Explorer's Crypt</u>
|-
| '''$C676''' || 1 Byte || Small Keys — <u>Level 8: Sword & Shield Maze</u>
|-
| '''$C677''' || 1 Byte || Small Keys — <u>Onox's Castle</u>
|-
| '''$C678''' || 1 Byte || Small Keys — <u>Room of Rites</u>
|-
| '''$C679''' || 1 Byte || Small Keys — <u>Linked Hero's Cave</u>
|-
| '''$C67A - $C67B''' || 2 Bytes || Big Keys || rowspan="3" |


<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
! scope="row" style="border-right: 2px solid black;" | Dungeon
| <u>Hero's Cave</u>
| <u>Level 1: Gnarled Root Dungeon</u>
| <u>Level 2: Snake's Remains</u>
| <u>Level 3: Poison Moth's Lair</u>
| <u>Level 4: Dancing Dragon Dungeon</u>
| <u>Level 5: Unicorn's Cave</u>
| <u>Level 6: Ancient Ruins</u>
| <u>Level 7: Explorer's Crypt</u>
|}
</center>


<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="background-color: black; border-right: 2px solid black; width: auto;" |
! 8
! 9
! 10
! 11
! 12
! 13
! 14
! 15
|-
! scope="row" style="border-right: 2px solid black; width: 12%;" | Dungeon
| <u>Level 8: Sword and Shield Maze</u>
| <u>Onox's Castle</u>
| <u>Room of Rites</u>
| <u>Linked Hero's Cave</u>
| colspan="4" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
</center>


|-
| '''$C67C - $C67D''' || 2 Bytes || Compasses
|-
| '''$C67E - $C67F''' || 2 Bytes || Dungeon Maps
|}


==Items==
==Items==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C680''' || 1 Byte || Item on '''B''' Button ||
|'''$C680''' || 1 Byte || Item on '''B''' Button ||
Line 483: Line 789:




{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; width: 100px;" | '''Address'''
! style="text-align: center; width: 100px;" | '''Address'''
! style="width: 75px;" | '''Length'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C6A2''' || 1 Byte || Current Hearts || This represents the current number of quarter-hearts the player has (each full heart is equal to <code>0x04</code>).
|'''$C6A2''' || 1 Byte || Current Hearts || This represents the current number of quarter-hearts the player has (each full heart is equal to <code>0x04</code>).
Line 538: Line 845:
<center>
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! {{Diagonal split header | State | Bit | style=border-right: 2px solid black; width: 10%;}}
! 0
! 0
! 1
! 1
Line 549: Line 857:
! 7
! 7
|-
|-
| 0 = South
! style="border-right: 2px solid black;" | 0
| 0 = <font color="#d1d966">Default Flute Graphics</font>
| South
| 0 = <font color="#d1d966">Dimitri Flute Graphics</font>
| bgcolor="#d1d966" | Default Flute Icon
|rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
| bgcolor="#d1d966" | Dimitri Flute Icon
|rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
| rowspan="2" colspan="5" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|-
|-
| 1 = North
! style="border-right: 2px solid black;" | 1
| 1 = <font color="#d1d966">Ricky Flute Graphics</font>
| North
| 1 = <font color="#d1d966">Moosh Flute Graphics</font>
| bgcolor="#d1d966" | Ricky Flute Icon
| bgcolor="#d1d966" | Moosh Flute Icon
|}
|}
</center>
</center>
Line 583: Line 889:
<center>
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
! colspan="9" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! 0
! 0
Line 594: Line 900:
! 7
! 7
|-
|-
| <u>Fertile Soil</u> || <u>Gift of Time</u> || <u>Bright Sun</u> || <u>Soothing Rain</u> || <u>Nurturing Warmth</u> || <u>Blowing Wind</u> || <u>Seed of Life</u> || <u>Changing Seasons</u>
| Fertile Soil || Gift of Time || Bright Sun || Soothing Rain || Nurturing Warmth || Blowing Wind || Seed of Life || Changing Seasons
|}
|}
</center>
</center>
Line 601: Line 907:
Each bit corresponds to an essence. The value of this address will be the sum of all the essences collected up to <code>0xFF</code>.
Each bit corresponds to an essence. The value of this address will be the sum of all the essences collected up to <code>0xFF</code>.


'''Example''': If the value of this address is <code>0x1F</code>, bits 1 - 5 are set, and the collected essences will be <u>Fertile Soil</u>, <u>Gift of Time</u>, <u>Bright Sun</u>, <u>Soothing Rain</u>, and <u>Nurturing Warmth</u>.  
'''Example''': If the value of this address is <code>0x1F</code>, bits 1 - 5 are set, and the collected essences will be <code>Fertile Soil</code>, <code>Gift of Time</code>, <code>Bright Sun</code>, <code>Soothing Rain</code>, and <code>Nurturing Warmth</code>.  




Line 615: Line 921:
<center>
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
! colspan="8" style="height: 35px; font-size: 1.3em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! 0
! 0
Line 626: Line 932:
! 7
! 7
|-
|-
| <u>Slayed 1,000 Monsters</u> || <u>Collected 10,000 Rupees</u> || <u>Saved the World</u> || <font color="red">'''UNUSED'''</font> || <u>Slayer's Ring</u> || <u>Rupee Ring</u> || <u>Victory Ring</u> || <font color="red">'''UNUSED'''</font>
| Slayed 1,000 Monsters
| Collected 10,000 Rupees
| Saved the World
| rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
| Slayer's Ring
| Rupee Ring
| Victory Ring
| rowspan="2" bgcolor="red" | <font color="white">'''UNUSED'''</font>
|}
|}
</center>
</center>
Line 649: Line 962:


==TBD==
==TBD==
{| border="3" cellpadding="7" style="max-width: 75%;"
{| border="3" cellpadding="7" style="width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center; min-width: 100px;" | '''Address'''
! style="text-align: center; min-width: 100px;" | '''Address'''
! style="min-width: 75px;" | '''Length'''
! style="min-width: 75px;" | '''Length'''
! style="min-width: 300px;" | '''Purpose'''
! style="min-width: 300px;" | '''Purpose'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C700''' - '''$C7FF''' || 256 Bytes || Overworld Screen Flags (used to track events and map exploration) || Todo: Specify which each address tracks.
|'''$C700''' - '''$C7FF''' || 256 Bytes || Overworld Screen Flags (used to track events and map exploration) || Todo: Specify which each address tracks.
Line 669: Line 983:


==Unmapped==
==Unmapped==
{| border="3" cellpadding="7" style="max-width: 75%;"
{| border="3" cellpadding="7" style="max-width: 75%; margin: 0 0 1em 1em; border-color: #8888cc;"
|- style="background: #ccccff; font-size: 1.5em;"
! style="text-align: center;" | '''Address'''
! style="text-align: center;" | '''Address'''
! '''Note'''
! '''Info'''
|-
|-
|'''$C000''' - '''$C023''' ||
|'''$C000''' - '''$C023''' ||
Line 704: Line 1,019:
|-
|-
|'''$C65E''' - '''$C661''' ||
|'''$C65E''' - '''$C661''' ||
|-
|'''$C66B''' - '''$C66C''' ||
|-
|'''$C677''' - '''$C679''' ||
|-
|'''$C67B''' ||
|-
|'''$C67D''' ||
|-
|'''$C67F''' ||
|-
|-
|'''$C692''' - '''$C6A1''' ||
|'''$C692''' - '''$C6A1''' ||
Line 730: Line 1,035:
|}
|}
<div style="margin: 50px 0 100px;">
<div style="margin: 50px 0 100px;">
=External Links=
=External Links=
* [https://github.com/Stewmath/oracles-disasm/blob/master/include/wram.s Stewmath's Oracles Disassembly WRAM]
* [https://github.com/Stewmath/oracles-disasm/blob/master/include/wram.s Stewmath's Oracles Disassembly WRAM]
</div>
</div>
{{Internal Data}}
{{Internal Data}}

Latest revision as of 07:13, 15 July 2024

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


Note: All values in tables are hexadecimal unless noted otherwise.


Bank 0 ($C000 - $CFFF)

This map is a work in progress.

Sound

Address Length Purpose Info
$C024 1 Byte Sound Volume
Bits
0 1 2 3 4 5 6 7
Right Speaker Right Speaker Right Speaker UNUSED Left Speaker Left Speaker Left Speaker UNUSED


Bits 0-2 control the volume of the right speaker, and bits 4-6 control the volume of the left speaker.


Volume Levels
Level
Speaker
0 1 2 3 4 5 6 7
Right 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
Left 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70


Note: A value of 0 for either speaker does NOT turn the sound for that speaker off, it is instead the lowest volume level.



TBD

Address Length Purpose Info
$C2EF 1 Byte Cutscene Index


When this value is changed, the corresponding cutscene is played.


Cutscenes
Info
Value
Cutscene
Description
Notes
0x00 Loading Room This is used when the screen is transitioning to another screen.
0x01 In Game This is the default state when Link is controllable on a screen.
0x02 UNUSED
0x03 ???
0x04 ???
0x05 ???
0x06 Din Dancing
0x07 Din Imprisoned Onox seals Din in a crystal.
0x08 Temple Sinking The Temple of Seasons is sinking.
0x09 Din Crystal Descending Din appears after beating Onox.
0x0A Credits
0x0B Volcano Erupting
0x0C Pirates Depart
0x0D Pre-Game Intro "Accept our quest, hero!"
0x0E Onox Taunting Triggers after getting the Maku Seed.
0x0F Room of Rites Collapse
0x10 Flame of Destruction The flame is lit after beating Onox.
0x11 Zelda Villagers (Linked) Zelda encourages the villagers.
0x12 Zelda Kidnapped Zelda is kidnapped by Twinrova.
0x13 Onox Final Form
0x14 Onox Castle Force Link cannot enter Onox castle area.
0x15 ???
0x16 In Gale Seed Menu
0x17 Warp to Twinrova Fight Triggers after approaching Zelda.
0x18 Flames Flickering The flames burn blue before the Twinrova fight.
0x19 Twinrova Sacrifice
0x1A
-
0xFF
UNUSED




TBD

Address Length Purpose Info
$C5C0 - $C5FF 64 Bytes Unappraised Rings Todo: Map possible ring values.
$C602 - $C607 6 Bytes Player Name
Bytes
$C602 $C603 $C604 $C605 $C606 $C607
First Letter Second Letter Third Letter Fourth Letter Fifth Letter Null Terminator

This is always expected to be 0x00

If the player name is 5 characters long, anything other than 0x00 will cause the game to softlock with either garbled graphics, or on a screen stating "This game can be played only on Game Boy® Color"


See the Text Map for a list of valid characters (though not all can be selected on file creation).


$C616 - $C61D 8 Bytes Rings Owned Todo: Map which bits correspond to which rings.

Totals Since File Creation

Address Length Purpose Info
$C61E - $C61F 2 Bytes Deaths Value is represented in decimal


This value will display on the file select screen.

$C620 - $C621 2 Bytes Enemies Killed When total killed enemies reaches 0x03E8, 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 (in frames)
$C626 1 Byte Signs Destroyed TODO: Explain.
$C627 - $C628 2 Bytes Rupees Collected 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 0x02 so that Vasu will give the Rupee Ring the next time he is spoken with.

TBD

Address Length Purpose Info
$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 TODO: Explain.
$C63B 1 Byte Current Absolute Map Position On the overworld, all 256 map tiles are represented in order; left to right, top to bottom, 0x00 - 0xFF.
$C63C 1 Byte Current Dungeon Map Position All tiles on the current floor of 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
$C63D 1 Byte Current Dungeon Floor TODO: Explain.

Maple: Part 2

Address Length Purpose Info
$C63E 1 Byte Last Maple Encounter Maple appears at the first available opportunity when this reaches 0x1E (greater than or equal to 0x0F when wearing Maple's Ring), then it resets to 0x00.



Gasha

Address Length Purpose Info
$C64C 1 Byte Gasha Seed Planted at B-16 TODO: Explain.
$C64D 1 Byte Gasha Seed Planted at C-3 TODO: Explain.
$C64E 1 Byte Gasha Seed Planted at D-9 TODO: Explain.
$C64F 1 Byte Gasha Seed Planted at D-12 TODO: Explain.
$C650 1 Byte Gasha Seed Planted at E-5 TODO: Explain.
$C651 1 Byte Gasha Seed Planted at D-16 TODO: Explain.
$C652 1 Byte Gasha Seed Planted at H-6 TODO: Explain.
$C653 1 Byte Gasha Seed Planted at I-1 TODO: Explain.
$C654 1 Byte Gasha Seed Planted at I-10 TODO: Explain.
$C655 1 Byte Gasha Seed Planted at J-6 TODO: Explain.
$C656 1 Byte Gasha Seed Planted at K-7 TODO: Explain.
$C657 1 Byte Gasha Seed Planted at K-13 TODO: Explain.
$C658 1 Byte Gasha Seed Planted at M-1 TODO: Explain.
$C659 1 Byte Gasha Seed Planted at O-16 TODO: Explain.
$C65A 1 Byte Gasha Seed Planted at P-1 TODO: Explain.
$C65B 1 Byte Gasha Seed Planted at M-9 TODO: Explain.
$C65C - $C65D 2 Bytes Gasha Prize Quality
Action Incrementation Note
Dig a Hole 0x01
Slay an Enemy 0x03 This excludes using gale seeds on enemies, and knocking them into water/holes.
Collect a Heart 0x04
Screen Transition 0x05 This excludes entering/exiting structures, or taking mini-boss warps in dungeons.
Collect a Fairy 0x18
Bomb a Wall 0x32
Great Fairy Heal 0x40
Collect a Heart Piece 0x64


Todo: Complete map of values and fully explain how this works.

Dungeons

Address Length Purpose Info
$C662 1 Byte Visited Floors of Hero's Cave
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C663 1 Byte Visited Floors of Level 1: Gnarled Root Dungeon
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C664 1 Byte Visited Floors of Level 2: Snake's Remains
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C665 1 Byte Visited Floors of Level 3: Poison Moth's Lair
Bits
0 1 2 3 4 5 6 7
Floor B1 1 UNUSED
$C666 1 Byte Visited Floors of Level 4: Dancing Dragon Dungeon
Bits
0 1 2 3 4 5 6 7
Floor B1 1 2 UNUSED
$C667 1 Byte Visited Floors of Level 5: Unicorn's Cave
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C668 1 Byte Visited Floors of Level 6: Ancient Ruins
Bits
0 1 2 3 4 5 6 7
Floor 1 2 3 4 5 UNUSED
$C669 1 Byte Visited Floors of Level 7: Explorer's Crypt
Bits
0 1 2 3 4 5 6 7
Floor B2 B1 1 UNUSED
$C66A 1 Byte Visited Floors of Level 8: Sword & Shield Maze
Bits
0 1 2 3 4 5 6 7
Floor B1 1 UNUSED
$C66B 1 Byte Visited Floors of Onox's Castle
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C66C 1 Byte Visited Floors of Room of Rites
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C66D 1 Byte Visited Floors of Linked Hero's Cave
Bits
0 1 2 3 4 5 6 7
Floor 1 UNUSED
$C66E 1 Byte Small Keys — Hero's Cave Any value from 0x00 - 0xFF is valid in these addresses, but graphics no longer work properly above 0x09.
$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
$C677 1 Byte Small Keys — Onox's Castle
$C678 1 Byte Small Keys — Room of Rites
$C679 1 Byte Small Keys — Linked Hero's Cave
$C67A - $C67B 2 Bytes Big Keys
Bits
0 1 2 3 4 5 6 7
Dungeon Hero's Cave Level 1: Gnarled Root Dungeon Level 2: Snake's Remains Level 3: Poison Moth's Lair Level 4: Dancing Dragon Dungeon Level 5: Unicorn's Cave Level 6: Ancient Ruins Level 7: Explorer's Crypt
Bits
8 9 10 11 12 13 14 15
Dungeon Level 8: Sword and Shield Maze Onox's Castle Room of Rites Linked Hero's Cave UNUSED
$C67C - $C67D 2 Bytes Compasses
$C67E - $C67F 2 Bytes Dungeon Maps

Items

Address Length Purpose Info
$C680 1 Byte Item on B Button
$C681 1 Byte Item on A Button
$C682 - $C691 16 Bytes Inventory Storage Todo: Map possible items.



Address Length Purpose Info
$C6A2 1 Byte Current Hearts This represents the current number of quarter-hearts the player has (each full heart is equal to 0x04).


If this value is equal to or less than $C6A3 divided by 2 (rounded up), the low health beep will play.


The maximum value this will reach normally is 0x40. Values above 0x80 cause instant game over.

$C6A3 1 Byte Max Hearts This represents the maximum number of quarter-hearts the player can have (each full heart is equal to 0x04).


This value, despite being counted in quarter-hearts, is always a multiple of 0x04 unlike $C6A2

$C6A4 1 Byte Number of Heart Pieces Valid values are 0x00 - 0x03.


When a heart piece is collected while this value is at 0x03, this will be reset to 0x00, and $C6A3 will be increased by 0x04.


This address will effect what is displayed on the the third screen of the start menu. If the value is set above 0x03, the graphics on that screen will progressively be filled with garbage.

$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 Value is represented in decimal.
$C6AB 1 Byte Max bombs Value is represented in decimal.
$C6AC 1 Byte Sword level
$C6AD 1 Byte Current Bombchus
$C6AE 1 Byte Seed Satchel Level Determines satchel capacity.
$C6AF 1 Byte Flute Icon This will determine which song plays and what icon appears on the flute, but not which companion Link actually currently has.
$C6B0 1 Byte Obtained Seasons
$C6B1 1 Byte Boomerang level
$C6B2 1 Byte Magnetic Gloves Polarity
Bits
Bit
State
0 1 2 3 4 5 6 7
0 South Default Flute Icon Dimitri Flute Icon UNUSED
1 North Ricky Flute Icon Moosh Flute Icon
$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
Bits
0 1 2 3 4 5 6 7
Fertile Soil Gift of Time Bright Sun Soothing Rain Nurturing Warmth Blowing Wind Seed of Life Changing Seasons


Each bit corresponds to an essence. The value of this address will be the sum of all the essences collected up to 0xFF.

Example: If the value of this address is 0x1F, bits 1 - 5 are set, and the collected essences will be Fertile Soil, Gift of Time, Bright Sun, Soothing Rain, and Nurturing Warmth.


Any value in this address is valid, but many of them will not normally be used unless essences are collected out of sequence. Assuming all essences are collected in sequence, the value will progress setting each bit in sequence, as follows:


0x00 -> 0x01 -> 0x03 -> 0x07 -> 0x0F -> 0x1F -> 0x3F -> 0x7F -> 0xFF


$C6CA 1 Byte Vasu Ring Flags
Bits
0 1 2 3 4 5 6 7
Slayed 1,000 Monsters Collected 10,000 Rupees Saved the World UNUSED Slayer's Ring Rupee Ring Victory Ring UNUSED


Based on what events have occurred, the above bits get set.


Example: If the value is 0x03 (bits 1 & 2 are set), the player has collected 10,000 rupees and slayed 1,000 Monsters. In this scenario, if the value is 0x23 (bits 1, 2, and 6 are set) then the Slayers Ring has been received from Vasu as well.


$C6C6 1 Byte Ring Box level




TBD

Address Length Purpose Info
$C700 - $C7FF 256 Bytes Overworld Screen Flags (used to track events and map exploration) Todo: Specify which each address tracks.
$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

Address Info
$C000 - $C023
$C025 - $C2EE
$C2F0 - $C5BF
$C600 - $C601
$C608 - $C615
$C620 - $C621
$C628 - $C639
$C63F Shop 1 item flags?
$C640 Shop 2 item flags?
$C641 Maple flags?
$C642 Subrosian shop item flags?
$C643 Ricky flags?
$C644 Dimitri flags?
$C645 Moosh flags?
$C646 - $C64B
$C65E - $C661
$C692 - $C6A1
$C6BC - $C6C5
$C6C7 - $C6FF
$C800 - $CC2F
$CC31 - $CDFF
$CEB0 - $CEFF
$CFB0 - $CFFF

External Links