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
(Fully described $C6BB)
(Added several things, fixed several things, etc.)
 
(5 intermediate revisions by the same user not shown)
Line 12: Line 12:
! '''Note'''
! '''Note'''
|-
|-
|'''$C5C0''' - '''$C5FF''' || 64 Bytes || Unappraised rings carried ||
|'''$C5C0''' - '''$C5FF''' || 64 Bytes || Unappraised Rings ||
|-
|-
|'''$C602''' - '''$C606''' || 5 Bytes || Player name ||
|'''$C602''' - '''$C607''' || 6 Bytes || Player Name ||
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="6" style="height: 35px; font-size: 1.5em;" | Bytes
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! '''$C602'''
! '''$C603'''
! '''$C604'''
! '''$C605'''
! '''$C606'''
! '''$C607'''
|-
| First Letter
| Second Letter
| Third Letter
| Fourth 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"
|}
</center>
 
 
Todo: Map valid characters.
|-
|'''$C616''' - '''$C61D''' || 8 Bytes || Rings Owned || Todo: Map which bits correspond to which rings.
|}
 
 
 
 
 
==Totals Since File Creation==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
|-
|-
|'''$C616''' - '''$C61D''' || 8 Bytes || Rings owned ||
|'''$C61E''' - '''$C61F''' || 2 Bytes || Deaths || <u>'''Value is represented in decimal'''</u>
 
 
This value will display on the file select screen.
|-
|-
|'''$C61E''' - '''$C61F''' || 2 Bytes || Deaths ||
|'''$C620''' - '''$C621''' || 2 Bytes || Enemies Killed || When total killed enemies reaches <code>0x03E8</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.
|-
|-
|'''$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 (in frames) ||
|-
|-
|'''$C622''' - '''$C625''' || 4 Bytes || Time passed since power-on ||
|'''$C626''' || 1 Byte || Signs Destroyed ||
|-
|-
|'''$C627''' - '''$C628''' || 2 Bytes || Rupees earned since file creation || <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==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
|-
|-
|'''$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 ||
|-
|-
|'''$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'' 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>
|'''$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>
|-
|'''$C63D''' || 1 Byte || Current Dungeon Floor ||
|}
==Maple: Part 2==
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="width: 75px;" | '''Length'''
! style="width: 300px;" | '''Purpose'''
! '''Note'''
|-
|'''$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 39: Line 106:




==Enemies killed since...==
==Gasha==
{| border="3" cellpadding="7" style="width: 75%;"
{| border="3" cellpadding="7" style="width: 75%;"
! style="text-align: center; width: 100px;" | '''RAM'''
! style="text-align: center; width: 100px;" | '''RAM'''
Line 46: Line 113:
! '''Note'''
! '''Note'''
|-
|-
|'''$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 ||
| '''$C65C''' - '''$C65D'''|| 2 Bytes || Gasha Prize Quality ||
|}
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
 
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
 
! style="text-align: center;" | Action
 
! Incrementation
 
! Note
 
==Mysterious Counter==
{| border="3" cellpadding="4"
|+'''$C65C''' - '''$C65D'''
|+'''A counter for ??? for which various actions increment'''
! style="text-align: center;" | '''Action'''
! '''Incrementation'''
! '''Note'''
|-
|-
|Dig a Hole || <code>0x01</code> ||
|Dig a Hole || <code>0x01</code> ||
Line 108: Line 167:
|-
|-
|Collect a Heart Piece || <code>0x64</code> ||
|Collect a Heart Piece || <code>0x64</code> ||
|}
Todo: Complete map of values and fully explain how this works.
|}
|}


Line 187: Line 251:
|'''$C681''' || 1 Byte || Item on '''A''' Button ||
|'''$C681''' || 1 Byte || Item on '''A''' Button ||
|-
|-
|'''$C682''' || 1 Byte || Inventory Slot 1 ||
|'''$C682''' - '''$C691''' || 16 Bytes || Inventory Storage || Todo: Map possible items.
|-
|'''$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 ||
|}
|}


Line 229: Line 263:
! '''Note'''
! '''Note'''
|-
|-
|'''$C6A2''' || 1 Byte || Current Hearts ||
|'''$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>).
 
 
If this value is equal to or less than <code>$C6A3</code> divided by 2 (rounded up), the low health beep will play.
 
 
The maximum value this will reach normally is <code>0x40</code>. Values above <code>0x80</code> 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 <code>0x04</code>).
 
 
This value, despite being counted in quarter-hearts, is always a multiple of <code>0x04</code> unlike <code>$C6A2</code>
|-
|-
|'''$C6A3''' || 1 Byte || Max Hearts ||
|'''$C6A4''' || 1 Byte || Number of Heart Pieces || Valid values are <code>0x00</code> - <code>0x03</code>.
 
 
When a heart piece is collected while this value is at <code>0x03</code>, this will be reset to <code>0x00</code>, and <code>$C6A3</code> will be increased by <code>0x04</code>.
 
 
This address will effect what is displayed on the the third screen of the start menu. If the value is set above <code>0x03</code>, the graphics on that screen will progressively be filled with garbage.
|-
|-
|'''$C6A5''' - '''$C6A6''' || 2 Bytes || Rupees || <u>'''Value is represented in decimal'''</u>.<br /><br />'''Example''': If the total rupee count is 639, the hexadecimal representation will be <code>0x0639</code>.
|'''$C6A5''' - '''$C6A6''' || 2 Bytes || Rupees || <u>'''Value is represented in decimal'''</u>.
 
 
'''Example''': If the total rupee count is 639, the hexadecimal representation will be <code>0x0639</code>.
|-
|-
|'''$C6A7''' - '''$C6A8''' || 2 Bytes || Ore Chunks ||
|'''$C6A7''' - '''$C6A8''' || 2 Bytes || Ore Chunks ||
Line 239: Line 293:
|'''$C6A9''' || 1 Byte || Shield level ||
|'''$C6A9''' || 1 Byte || Shield level ||
|-
|-
|'''$C6AA''' || 1 Byte || Current Bombs ||
|'''$C6AA''' || 1 Byte || Current Bombs || <u>'''Value is represented in decimal'''</u>.
|-
|'''$C6AB''' || 1 Byte || Max bombs || <u>'''Value is represented in decimal'''</u>.
|-
|-
|'''$C6AC''' || 1 Byte || Sword level ||
|'''$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 ||
|'''$C6B1''' || 1 Byte || Boomerang level ||
|-
|'''$C6B2''' || 1 Byte || Magnetic Gloves Polarity ||
<center>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 7
|-
| 0 = South
| 0 = <font color="#d1d966">Default Flute Graphics</font>
| 0 = <font color="#d1d966">Dimitri Flute Graphics</font>
|rowspan="2"| <font color="red">'''UNUSED'''</font>
|rowspan="2"| <font color="red">'''UNUSED'''</font>
|rowspan="2"| <font color="red">'''UNUSED'''</font>
|rowspan="2"| <font color="red">'''UNUSED'''</font>
|rowspan="2"| <font color="red">'''UNUSED'''</font>
|-
| 1 = North
| 1 = <font color="#d1d966">Ricky Flute Graphics</font>
| 1 = <font color="#d1d966">Moosh Flute Graphics</font>
|}
</center>
|-
|-
|'''$C6B3''' || 1 Byte || Slingshot level ||
|'''$C6B3''' || 1 Byte || Slingshot level ||
Line 262: Line 355:
|-
|-
|'''$C6BB''' || 1 Byte || Essences ||
|'''$C6BB''' || 1 Byte || Essences ||
* <big>'''<code>0x01</code>'''</big>: <u>Fertile Soil</u>
<center>
* <big>'''<code>0x02</code>'''</big>: <u>Gift of Time</u>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
* <big>'''<code>0x04</code>'''</big>: <u>Bright Sun</u>
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
* <big>'''<code>0x08</code>'''</big>: <u>Soothing Rain</u>
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
* <big>'''<code>0x10</code>'''</big>: <u>Nurturing Warmth</u>
! 0
* <big>'''<code>0x20</code>'''</big>: <u>Blowing Wind</u>
! 1
* <big>'''<code>0x40</code>'''</big>: <u>Seed of Life</u>
! 2
* <big>'''<code>0x80</code>'''</big>: <u>Changing Seasons</u><br /><br />
! 3
! 4
! 5
! 6
! 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>
|}
</center>


Each essence has a corresponding value associated with it, each value being double the value of the previous one, and 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>, 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> (5/8 essences in sequence).




 
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:
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 as follows:




Line 287: Line 387:
|-
|-
|'''$C6CA''' || 1 Byte || Vasu Ring Flags ||
|'''$C6CA''' || 1 Byte || Vasu Ring Flags ||
* <big>'''<code>0x01</code>'''</big>: Slayed 1,000 Monsters — <u>Slayer's Ring</u>
<center>
* <big>'''<code>0x02</code>'''</big>: Collected 10,000 Rupees — <u>Rupee Ring</u>
{| class="wikitable" style="width: 100%; text-align: center; border: 2px solid black;"
* <big>'''<code>0x04</code>'''</big>: Saved the World — <u>Victory Ring</u><br /><br />
! colspan="8" style="height: 35px; font-size: 1.5em;" | Bits
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! 0
! 1
! 2
! 3
! 4
! 5
! 6
! 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>
|}
</center>


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


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




'''Example''': If the value is <code>0x03</code>, the player has collected 10,000 rupees and slayed 1,000 Monsters <code>[0x02 + 0x01]</code>. In this scenario, after the Rupee Ring is received, the value would then be <code>0x23</code> <code>[0x03 + (0x02 * 0x10)]</code>, and then when the Slayers Ring is received, the value is <code>0x33</code> <code>[0x23 + (0x01 * 0x10)]</code>.<br /><br />


<center>
'''Example''': If the value is <code>0x03</code> (bits 1 & 2 are set), the player has collected 10,000 rupees and slayed 1,000 Monsters. In this scenario, if the value is <code>0x23</code> (bits 1, 2, and 6 are set) then the Slayers Ring has been received from Vasu as well.
{| class="mw-collapsible mw-collapsed wikitable" style="width: 90%; text-align: center;"
 
! colspan="8" style="height: 35px; font-size: 1.5em;" | Possible Values
|- style="border-top: 2px solid black; border-bottom: 2px solid black; font-size: 1.2em;" |
! style="border-right: 2px solid black;" | #
! 1,000<br />Monsters<br />Slain
! 10,000<br />Rupees<br />Collected
! Saved<br />the<br />World
! Slayer's<br />Ring<br />Obtained
! Rupee<br />Ring<br />Obtained
! Victory<br />Ring<br />Obtained
! style="border-left: 2px solid black; font-weight: bold;" | VALUE
|-
| style="border-right: 2px solid black; font-weight: bold;" | 1
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x00</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 2
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x01</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 3
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x02</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 4
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x03</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 5
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x04</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 6
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x05</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 7
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x06</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 8
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x07</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 9
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x11</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 10
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x13</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 11
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x15</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 12
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x17</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 13
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x22</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 14
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x23</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 15
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x26</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 16
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x27</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 17
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x33</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 18
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x37</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 19
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x44</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 20
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x45</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 21
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x46</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 22
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x47</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 23
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x55</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 24
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x57</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 25
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x66</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 26
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #E06666; color: white;" | FALSE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x67</code>
|-
| style="border-right: 2px solid black; font-weight: bold;" | 27
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="background-color: #6AA84F; color: white;" | TRUE
| style="border-left: 2px solid black; font-weight: bold;" | <code>0x77</code>
|}
</center>




Line 572: Line 429:
! '''Note'''
! '''Note'''
|-
|-
|'''$C700''' - '''$C7FF''' || 256 Bytes || Overworld Screen Flags (used to track events and map exploration) || To do: 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.
|-
|-
|'''$CC30''' || 1 Byte || Enemies left on screen ||
|'''$CC30''' || 1 Byte || Enemies left on screen ||
Line 594: Line 451:
|'''$C600''' - '''$C601''' ||
|'''$C600''' - '''$C601''' ||
|-
|-
|'''$C607''' - '''$C615''' ||
|'''$C608''' - '''$C615''' ||
|-
|-
|'''$C620''' - '''$C621''' ||
|'''$C620''' - '''$C621''' ||
|-
|-
|'''$C626''' ||
|'''$C628''' - '''$C639''' ||
|-
|-
|'''$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?
|-
|-
|'''$C63D''' ||
|'''$C645''' || Moosh flags?
|-
|-
|'''$C63F''' - '''$C64B''' ||
|'''$C646''' - '''$C64B''' ||
|-
|-
|'''$C65E''' - '''$C661''' ||
|'''$C65E''' - '''$C661''' ||
Line 619: Line 486:
|-
|-
|'''$C692''' - '''$C6A1''' ||
|'''$C692''' - '''$C6A1''' ||
|-
|'''$C6A4''' ||
|-
|'''$C6AB''' ||
|-
|'''$C6AD''' - '''$C6B0''' ||
|-
|'''$C6B2''' ||
|-
|-
|'''$C6BC''' - '''$C6C5''' ||
|'''$C6BC''' - '''$C6C5''' ||

Latest revision as of 04:10, 8 July 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 64 Bytes Unappraised Rings
$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
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"


Todo: Map valid characters.

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



Totals Since File Creation

RAM Length Purpose Note
$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
$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

RAM Length Purpose Note
$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
$C63D 1 Byte Current Dungeon Floor



Maple: Part 2

RAM Length Purpose Note
$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

RAM Length Purpose Note
$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
$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.



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).

[There's more to these addresses than originally thought. More exploration needed.]
$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 - $C691 16 Bytes Inventory Storage Todo: Map possible items.



RAM Length Purpose Note
$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
0 1 2 3 4 5 6 7
0 = South 0 = Default Flute Graphics 0 = Dimitri Flute Graphics UNUSED UNUSED UNUSED UNUSED UNUSED
1 = North 1 = Ricky Flute Graphics 1 = Moosh Flute Graphics
$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

RAM Length Purpose Note
$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

RAM Note
$C000 - $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
$C66B - $C66C
$C677 - $C679
$C67B
$C67D
$C67F
$C692 - $C6A1
$C6BC - $C6C5
$C6C7 - $C6FF
$C800 - $CC2F
$CC31 - $CDFF
$CEB0 - $CEFF
$CFB0 - $CFFF