Donkey Kong Land III/RAM map

From Data Crystal
Jump to navigation Jump to search

Chip tiny.png 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

HRAM

Data English Japanese
Current level FFA6 FFA5
Lives FFA9
Bananas FFAA
Current Kong
00 = Kiddy
01 = Dixie
FFAB
Number of hits remaining FFAC
Current world in world map screen
00 = Cape Codswallop
01 = Primate Plains
02 = Blackforest Plateau
03 = Great Ape Lakes
04 = Tin Can Valley
05 = The Lost World
06 = Northern Kremisphere
FFAD
Current level in world map screen FFAE
Total hours played FFAF
Total minutes played
(Total minutes in Time Attack mode)
FFB0
Total seconds played
(Total seconds in Time Attack mode)
FFB1
Bear Coins FFB2
Bonus Coins FFB3
DK Coins FFB4
Watches FFB5
Big-endian pointer for next button to be used in demo
(Bank 05 in English version; Bank 23 in Japanese version)
FFE2-FFE3 FFE1-FFE2
Frames remaining for current button in demo FFE4 FFE3
Current button press in demo
This is a bitflag, where the buttons are arranged like this (from left to right):
Down, Up, Left, Right, Start, Select, B, A
FFE5 FFE4
Cheat code bitflag
0x01 = Play the card game after the title screen
0x02 = Start with 50 lives
0x04 = All levels unlocked
FFF9 FFF8
On title screen: Demo to be played
Pressing Up, Left, Down, or Select increments this counter.
Only the rightmost three bits are used to determine the demo.

On Time Attack screen: Current cursor position

FFFB

Saved data

Miscellaneous data

  • A000-A04F = File 1
  • A050-A0BF = File 2
  • A0A0-A0EF = File 3
File 1 File 2 File 3 Description
A000-A001 A050-A051 A0A0-A0A1 16-bit big endian checksum of 4E bytes afterwards (e.g. A002-A04F for File 1)
A004 A054 A0A4 Last world visited
A006-A008 A056-A058 A0A6-A0A8 Time played (hours, minutes, seconds)
A00A A05A A0AA Bonus Coins collected
A00B A05B A0AB DK Coins collected
A00C A05C A0AC Watches collected
A015 A065 A0B5 Card Game record (starts out at 31 seconds in a new file)
A016-A01B A066-A06B A0B6-A0BB Bear data
  • Bit 6: 1 if DK Coin is collected, 0 if not
  • Bit 1: 1 if Watch is collected, 0 if not
  • Bit 0: 1 if attempted at least once, 0 if not
A01C-A03F A06C-A08F A0BC-A0DF Level data
  • Bit 7: 0 if cleared with Kiddy the first time, 1 if cleared with Dixie for the first time
  • Bit 6: 0 if missing at least one Bonus Coin, 1 if both Bonus Coins have been found
  • Bit 5: Unused?
  • Bit 4: 0 if Bonus Coin #2 is missing, 1 if Bonus Coin #2 is collected
  • Bit 3: 0 if Bonus Coin #1 is missing, 1 if Bonus Coin #1 is collected
  • Bit 2: Unused?
  • Bit 1: 0 if DK Coin is not collected, 1 if DK Coin is collected
  • Bit 0: 0 if not cleared, 1 if cleared
A040-A045 A090-A095 A0E0-A0E5 Boss level data
  • Bit 7: ???
  • Bit 6: 1 if Bonus Coin is collected
  • Bit 2: ???
  • Bit 0: 1 if cleared
A100-A14F
A200-A24F
A150-A19F
A250-A29F
A1A0-A1EF
A2A0-A2EF
Backup copies of given file, used if previous checksum fails

Checksum

For each 50-byte block, a 16-bit, big endian checksum is stored in the first two bytes. This is a sum of each 8-bit value in the rest of the 4E bytes. If the checksum fails, the checksum in the file's first backup copy is checked. If this also fails, the checksum in the file's second and final backup copy is checked. If they all fail, the file is erased. If any of them pass, the game always uses the data in the first block. This occurs even if the checksum failed in this block, but passed in either of the two backup blocks. This is a bug; the intended behavior is that the game would copy a valid backup block to the first block in this situation. Since the game always uses the data in the first block, this can cause glitches if the first block is corrupted, but the other two are intact.

Time Attack data

  • A350-A382: File 1
  • A383-A3B5: File 2
  • A3B6-A3E8: File 3
File 1 File 2 File 3 Description
A350-A373 A383-A3A6 A3B6-A3D9 Time Attack level records
  • Format: minutes, seconds, 1/100 seconds
A374-A37F A3A7-A3B2 A3DA-A3E5 Time Attack clear flags
  • 01 = Cleared; 00 = Not cleared
A380 A3B3 A3E6 Seems to be number of Time Attack records completed
A381 A3B4 A3E7 Time Attack unlocked?
  • 01 = Unlocked; 00 = Not unlocked
A382 A3B5 A3E8 Time Attack checksum

Time Attack checksum

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

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.