If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Donkey Kong Land III/RAM map: Difference between revisions
Jump to navigation
Jump to search
(Added rammap template and cleaned up a bit.) |
Blaziken257 (talk | contribs) No edit summary |
||
Line 3: | Line 3: | ||
Some notes: | Some notes: | ||
* Most, if not all, of these addresses apply to both the English and Japanese versions. | * Most, if not all, of these addresses apply to both the English and Japanese versions. | ||
* Many (but not all) of these addresses may also | * Many (but not all) of these addresses may also apply to Donkey Kong Land 2, as they run off the same game engine. | ||
* <tt>C5EE</tt> = Bonus timer | * <tt>C5EE</tt> = Bonus timer | ||
Line 17: | Line 16: | ||
** 07 = Toboggan | ** 07 = Toboggan | ||
* <tt>DF30</tt> = Invincibility timer | * <tt>DF30</tt> = Invincibility timer | ||
== Saved data == | |||
=== File 1 === | |||
* <tt>A000-A04F</tt>: Miscellaneous data | |||
** <tt>A005</tt>: Last world visited | |||
** <tt>A015</tt>: Card Game record | |||
* <tt>A100-A14F</tt>: Copy of <tt>A000-A04F</tt> (backup?) | |||
* <tt>A200-A24F</tt>: Copy of <tt>A000-A04F</tt> (backup?) | |||
* <tt>A350-A373</tt>: Time Attack records | |||
** Format: minutes, seconds, 1/100 seconds | |||
* <tt>A374-A37F</tt>: Time Attack clear flags | |||
** <tt>01</tt> = Cleared; <tt>00</tt> = Not cleared | |||
* <tt>A380</tt>: Seems to be number of Time Attack records completed | |||
* <tt>A381</tt>: ??? | |||
* <tt>A382</tt>: Time Attack checksum | |||
=== File 2 === | |||
* <tt>A050-A09F</tt>: Miscellaneous data | |||
** <tt>A055</tt>: Last world visited | |||
** <tt>A065</tt>: Card Game record | |||
* <tt>A150-A19F</tt>: Copy of <tt>A050-A09F</tt> (backup?) | |||
* <tt>A250-A29F</tt>: Copy of <tt>A050-A09F</tt> (backup?) | |||
* <tt>A383-A3A6</tt>: Time Attack records | |||
** Format: minutes, seconds, 1/100 seconds | |||
* <tt>A3A7-A3B2</tt>: Time Attack clear flags | |||
** <tt>01</tt> = Cleared; <tt>00</tt> = Not cleared | |||
* <tt>A3B3</tt>: Seems to be number of Time Attack records completed | |||
* <tt>A3B4</tt>: ??? | |||
* <tt>A3B5</tt>: Time Attack checksum | |||
=== File 3 === | |||
* <tt>A0A0-A0EF</tt>: Miscellaneous data | |||
** <tt>A0A5</tt>: Last world visited | |||
** <tt>A0B5</tt>: Card Game record | |||
* <tt>A1A0-A1EF</tt>: Copy of <tt>A0A0-A0EF</tt> (backup?) | |||
* <tt>A2A0-A2EF</tt>: Copy of <tt>A0A0-A0EF</tt> (backup?) | |||
* <tt>A3B6-A3D9</tt>: Time Attack records | |||
** Format: minutes, seconds, 1/100 seconds | |||
* <tt>A3DA-A3E5</tt>: Time Attack clear flags | |||
** <tt>01</tt> = Cleared; <tt>00</tt> = Not cleared | |||
* <tt>A3E6</tt>: Seems to be number of Time Attack records completed | |||
* <tt>A3E7</tt>: ??? | |||
* <tt>A3E8</tt>: Time Attack checksum | |||
=== Time Attack checksum === | |||
* In the prototype, the Time Attack checksum works as follows: | |||
** Take the values from the following RAM offsets (depending on the file) and add them all up, one byte at a time. (These contain time records, flags to determine whether a level is passed, etc.) | |||
*** File 1: <tt>A350-A381</tt> | |||
*** File 2: <tt>A383-A3B4</tt> | |||
*** File 3: <tt>A3B6-A3E7</tt> | |||
** Next, take only the last 8 bits of the sum. | |||
** Flip all the bits of this sum (essentially, the sum is subtracted from <tt>FF</tt>; alternately, the sum is XORed with <tt>FF</tt>.) | |||
** Add <tt>58</tt> to this result (Note: in the prototype, add <tt>50</tt> instead), and store it in one of these offsets depending on the file: | |||
*** File 1: <tt>A382</tt> | |||
*** File 2: <tt>A3B5</tt> | |||
*** File 3: <tt>A3E8</tt> | |||
** If this checksum fails, all Time Attack data is erased. | |||
== Velocity == | == Velocity == | ||
* <tt>DF10</tt> = Horizontal velocity | * <tt>DF10</tt> = Horizontal velocity | ||
* Some common values: | ** Some common values: | ||
{| border="1" style="border-collapse: collapse;" | {| border="1" style="border-collapse: collapse;" | ||
|- | |- | ||
! Action | ! Action | ||
! colspan="2" | Value(s) | ! colspan="2" | Value(s) | ||
Line 115: | Line 170: | ||
* <tt>DF11</tt> = Vertical velocity | * <tt>DF11</tt> = Vertical velocity | ||
* Some common values: | ** Some common values: | ||
{| border="1" style="border-collapse: collapse;" | {| border="1" style="border-collapse: collapse;" | ||
|- | |- | ||
! Action | ! Action | ||
! Value | ! Value |
Revision as of 00:44, 27 January 2013
The following article is a RAM map for Donkey Kong Land III.
Some notes:
- Most, if not all, of these addresses apply to both the English and Japanese versions.
- Many (but not all) of these addresses may also apply to Donkey Kong Land 2, as they run off the same game engine.
- C5EE = Bonus timer
- DF00 = Current character
- 00 = Kiddy Kong
- 01 = Dixie Kong
- 02 = Ellie
- 03 = Squawks
- 04 = Enguarde
- 05 = Squitter
- 06 = Rattly (glitched, simply leftover from DKL2)
- 07 = Toboggan
- DF30 = Invincibility timer
Saved data
File 1
- A000-A04F: Miscellaneous data
- A005: Last world visited
- A015: Card Game record
- A100-A14F: Copy of A000-A04F (backup?)
- A200-A24F: Copy of A000-A04F (backup?)
- A350-A373: Time Attack records
- Format: minutes, seconds, 1/100 seconds
- A374-A37F: Time Attack clear flags
- 01 = Cleared; 00 = Not cleared
- A380: Seems to be number of Time Attack records completed
- A381: ???
- A382: Time Attack checksum
File 2
- A050-A09F: Miscellaneous data
- A055: Last world visited
- A065: Card Game record
- A150-A19F: Copy of A050-A09F (backup?)
- A250-A29F: Copy of A050-A09F (backup?)
- A383-A3A6: Time Attack records
- Format: minutes, seconds, 1/100 seconds
- A3A7-A3B2: Time Attack clear flags
- 01 = Cleared; 00 = Not cleared
- A3B3: Seems to be number of Time Attack records completed
- A3B4: ???
- A3B5: Time Attack checksum
File 3
- A0A0-A0EF: Miscellaneous data
- A0A5: Last world visited
- A0B5: Card Game record
- A1A0-A1EF: Copy of A0A0-A0EF (backup?)
- A2A0-A2EF: Copy of A0A0-A0EF (backup?)
- A3B6-A3D9: Time Attack records
- Format: minutes, seconds, 1/100 seconds
- A3DA-A3E5: Time Attack clear flags
- 01 = Cleared; 00 = Not cleared
- A3E6: Seems to be number of Time Attack records completed
- A3E7: ???
- A3E8: Time Attack checksum
Time Attack checksum
- In the prototype, the Time Attack checksum works as follows:
- Take the values from the following RAM offsets (depending on the file) and add them all up, one byte at a time. (These contain time records, flags to determine whether a level is passed, etc.)
- File 1: A350-A381
- File 2: A383-A3B4
- File 3: A3B6-A3E7
- Next, take only the last 8 bits of the sum.
- Flip all the bits of this sum (essentially, the sum is subtracted from FF; alternately, the sum is XORed with FF.)
- Add 58 to this result (Note: in the prototype, add 50 instead), and store it in one of these offsets depending on the file:
- File 1: A382
- File 2: A3B5
- File 3: A3E8
- If this checksum fails, all Time Attack data is erased.
- Take the values from the following RAM offsets (depending on the file) and add them all up, one byte at a time. (These contain time records, flags to determine whether a level is passed, etc.)
Velocity
- DF10 = Horizontal velocity
- Some common values:
Action | Value(s) | Notes | |
---|---|---|---|
Walking | 19 | E7 | |
Running | 23 | DD | This is also Squitter's walking speed. |
Attacking (while standing still) | 0F | F1 | |
Attacking (while walking or running) | 23 | DD | |
Jumping (while walking) | 23 | DD | |
Jumping (while running) | 28 | D8 | |
Dixie's helicopter spin | 23 | DD | |
Jumping on enemy | 1E | E2 | Holding B does not seem to affect speed. |
Attacking an enemy | 2D | D3 | |
37 | C9 | If attacking two or more enemies in a row. | |
Holding a barrel while moving | 1E | E2 | |
Swimming (slow speed -- without holding B) | 0F | F1 | |
15 | EB | If pressing A to ascend. | |
Swimming (fast speed -- while holding B) | 14 | EC | |
1A | E6 | If pressing A to ascend. | |
Swimming (with Enguarde) | 1E | E2 | |
Stabbing (with Enguarde) | 23 | DD | |
Climbing | 0F | F1 | When not holding B. |
1E | E2 | When holding B. | |
Toboggan | 32 | ||
Jumping on enemy in Toboggan | 2B | Does not decrease to 2B right away; gradually decreases. Afterwards, gradually increases back to 32. |
- DF11 = Vertical velocity
- Some common values:
Action | Value | Notes |
---|---|---|
Gravity | 46 | This value remains at 46 even when standing on ground. |
Jumping | B3 | After jumping, this value slowly increases (which causes downward acceleration) until it reaches the gravity value of 46. However, when this value reaches BB, it can remain at BB for up to 7 frames, depending on how long A is held down. |
Dixie's helicopter spin | 0A | |
Jumping on enemy | 9F | Like normal jumping, this value slowly increases (causing downward acceleration) until it reaches 46. |
95 | If A is held down while hitting the enemy. | |
Descending while swimming | 0A | |
14 | If Down is pressed. | |
Ascending while swimming | F1 | Every time A is pressed, this slowly decreases to F1, then slowly increases back to normal swimming speed |
F7 | If Down is pressed. | |
E8 | If Up is pressed. | |
Swimming with Enguarde | 1E | While descending. |
E2 | While ascending. | |
Climbing | 0F/F1 | When not holding B. |
19/E7 | When holding B. | |
Toboggan | 6E | |
Jumping in Toboggan | C3 | As is always the case with jumping, this value increases until it reaches gravity speed. |
Jumping on enemy in Toboggan | 9F |
Note: For both vertical and horizontal velocity, both of these bytes are signed integers. Anything less than 00 (i.e. 80-FF) will be negative; for horizontal velocity, this will be to the left, and for vertical velocity, this will be up. Anything more than 00 (i.e. 01-7F) will be positive; for horizontal velocity, this will be to the right, and for vertical velocity, this will be down. 00 is stationary.
80 is the fastest speed for left or upward movement; 7F is the fastest speed for right or downward movement.