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
((Probably) mapped C662 - C66C + Made styles on the tables consistent + Split off into a new dungeon section.)
(Complete explanation of C627 - C628 + mapped C6CA + more styling/formatting)
Line 22: Line 22:
|C622 - C625 || 4 Bytes || Time passed since power-on ||
|C622 - C625 || 4 Bytes || Time passed since power-on ||
|-
|-
|C627 - C628 || 2 Bytes || Rupees earned since file creation || Value is represented in decimal.<br /><br />Example: If the total earned rupee count is 8,473, the hexadecimal representation will be 0x8473.<br /><br />When a rupee gain puts the value is pushed over 0x9999, the value is then set to 0x6363, the value will no longer change, and a flag (somewhere) is then set so that Vasu will give the Rupee Ring the next time he is spoken with.
|C627 - C628 || 2 Bytes || Rupees earned since file creation || Value is represented in decimal.<br /><br />Example: If the total earned rupee count is 8,473, the hexadecimal representation will be <code>0x8473</code>.<br /><br />When a rupee gain pushes the value over <code>0x9999</code>, the value is then set to 0x6363, the value will no longer change, and <code>C6CA</code> is then incremented by <code>0x01</code> so that Vasu will give the Rupee Ring the next time he is spoken with.
|-
|-
|C629 || 1 Byte || Message Speed || 0x00 - 0x04<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, 0x00 - 0xFF.<br /><br /><br />Inside a dungeon, only map tiles that are valid rooms are represented while empty map tiles are not counted; the only empty map tiles that are counted are the ones leading up to the first valid room in order, then from there, the value only increases with each valid room. <span style="float: right;">[[File:Zelda OoS RAM C63B 01.png|200px]]</span>
|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 C63B, all tiles on the dungeon map, including ones that do not represent a valid room, are counted in order; left to right, top to bottom, 0x00 - 0xFF.<span style="float: right;">[[File:Zelda OoS RAM C63C 01.png|200px]]</span>
|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>
|}
|}


Line 87: Line 87:
! '''Note'''
! '''Note'''
|-
|-
|Great Fairy Heal || 0x40 ||
|Great Fairy Heal || <code>0x40</code> ||
|-
|-
|Bomb a Wall || 0x32 ||
|Bomb a Wall || <code>0x32</code> ||
|-
|-
|Collect a Fairy || 0x18 ||
|Collect a Fairy || <code>0x18</code> ||
|-
|-
|Screen Transition || 0x05 || This excludes entering/exiting structures, or taking mini-boss warps in dungeons.<br />(TODO: Test Gale seeds)
|Screen Transition || <code>0x05</code> || This excludes entering/exiting structures, or taking mini-boss warps in dungeons.<br />(TODO: Test Gale seeds)
|-
|-
|Collect a Heart || 0x04 ||
|Collect a Heart || <code>0x04</code> ||
|-
|-
|Slay an Enemy || 0x03 ||
|Slay an Enemy || <code>0x03</code> ||
|}
|}


Line 179: Line 179:
|C6A3 || 1 Byte || Max Hearts ||
|C6A3 || 1 Byte || Max Hearts ||
|-
|-
|C6A5 - C6A6 || 2 Bytes || Rupees || Value is represented in decimal.<br /><br />Example: If the total rupee count is 639, the hexadecimal representation will be 0x0639.
|C6A5 - C6A6 || 2 Bytes || Rupees || Value is represented in decimal.<br /><br />Example: If the total rupee count is 639, the hexadecimal representation will be <code>0x0639</code>.
|-
|-
|C6A7 - C6A8 || 2 Bytes || Ore Chunks ||
|C6A7 - C6A8 || 2 Bytes || Ore Chunks ||
Line 208: Line 208:
|-
|-
|C6BB || 1 Byte || Essences ||
|C6BB || 1 Byte || Essences ||
|-
|C6CA || 1 Byte || Vasu Ring Flags || <big>'''<code>0x01</code>'''</big>: Slayed 1,000 Monsters — <u>Slayer's Ring</u><br /><big>'''<code>0x02</code>'''</big>: Collected 10,000 Rupees — <u>Rupee Ring</u><br /><big>'''<code>0x04</code>'''</big>: Saved the World — <u>Victory Ring</u><br /><br />
Based on what events have occurred, the above values get added to this address. Collecting each corresponding ring then adds the corresponding value multiplied by 0x10 to this address.<br /><br />
'''Example''': If the value is <code>0x03</code>, the player has collected 10,000 rupees and slayed 1,000 Monsters <code>[0x02 + 0x01]</code>. After the Rupee Ring is received, the value is then <code>0x23</code> <code>[0x03 + (0x03 * 0x10)]</code>, and then when the Slayers Ring is received, the value is <code>0x33</code> <code>[0x23 + (0x01 * 0x10)]</code>.
|-
|-
|C6C6 || 1 Byte || Ring Box level ||
|C6C6 || 1 Byte || Ring Box level ||

Revision as of 01:28, 25 April 2023

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

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

Bank 0 (C000 - CFFF)


TBD

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

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

When a rupee gain pushes the value over 0x9999, the value is then set to 0x6363, the value will no longer change, and C6CA is then incremented by 0x01 so that Vasu will give the Rupee Ring the next time he is spoken with.
C629 1 Byte Message Speed 0x00 - 0x04

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

OR

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


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



Enemies killed since...

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



Mysterious Counter

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



Dungeon Things

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



Items/Collectables

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

Example: If the total rupee count is 639, the hexadecimal representation will be 0x0639.
C6A7 - C6A8 2 Bytes Ore Chunks
C6A9 1 Byte Shield level
C6AA 1 Byte Current Bombs
C6AC 1 Byte Sword level
C6B1 1 Byte Boomerang level
C6B3 1 Byte Slingshot level
C6B4 1 Byte Roc's feather level
C6B5 1 Byte Ember Seeds
C6B6 1 Byte Scent Seeds
C6B7 1 Byte Pegasus Seeds
C6B8 1 Byte Gale Seeds
C6B9 1 Byte Mystery Seeds
C6BA 1 Byte Gasha Seeds
C6BB 1 Byte Essences
C6CA 1 Byte Vasu Ring Flags 0x01: Slayed 1,000 Monsters — Slayer's Ring
0x02: Collected 10,000 Rupees — Rupee Ring
0x04: Saved the World — Victory Ring

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

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

C6C6 1 Byte Ring Box level



TBD

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



Unmapped

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