Notes before reading:
- There are 29 sprite slots, and 4 extended sprite slots;
- Their table sizes are doubled: 58 bytes table for 29 sprites, 8 bytes table for 4 extended sprites. The "high byte" of the pair is often unused, I guess the producers made the tables according to the X/Y position tables, that use the second byte of the pair;
- Extended sprites are Fred's projectiles (stones and bowling balls);
- I consider 256 subpixels per pixel;
Address | Size | Description |
---|---|---|
$7E0006 | 2 bytes | Controller 1 input (current) flags, format BYsS^v<>AXLR0123. |
$7E0008 | 2 bytes | Controller 2 input (current) flags, format BYsS^v<>AXLR0123. |
$7E000A | 2 bytes | Controller 1 input (newly pressed) flags, format BYsS^v<>AXLR0123. |
$7E000C | 2 bytes | Controller 2 input (newly pressed) flags, format BYsS^v<>AXLR0123. |
$7E000E | 2 bytes | Controller 1 input (current) flags, format BYsS^v<>AXLR0123, maybe just a mirror of $7E0006. |
$7E0010 | 2 bytes | Controller 1 input (newly pressed) flags, format BYsS^v<>AXLR0123, maybe just a mirror of $7E000A. |
$7E0012 | 2 bytes | Controller 1 input (current) flags, format BYsS^v<>AXLR0123, maybe just a mirror of $7E0006. |
$7E0014 | 2 bytes | Controller 2 input (current) flags, format BYsS^v<>AXLR0123, maybe just a mirror of $7E0008. |
$7E001C | 2 bytes | Camera X position. |
$7E001E | 2 bytes | Camera Y position. |
$7E003C | 1 byte | Graphics set, maybe[1]. A list of valid values can be found here. |
$7E0040 | 2 bytes | Game mode. A list of valid values can be found here. |
$7E004A | 1 byte | Mirror of $7E1E12. |
$7E008C | 2 bytes | Frame counter, maybe[1]. Resets to zero during screen transitions, and pauses when the game is paused. |
$7E00D7 | 2 bytes | [Considering a rectangle with corner 2 beign the opposite corner of 1] Fred's hitbox corner 1 x pos. |
$7E00D9 | 2 bytes | Fred's hitbox corner 2 x pos. |
$7E00DB | 2 bytes | Fred's hitbox corner 1 y pos. |
$7E00DD | 2 bytes | Fred's hitbox corner 2 y pos. |
$7E00DF | 2 bytes | Sprite platforming interaction left point x pos. |
$7E00E1 | 2 bytes | Sprite platforming interaction right point x pos. |
$7E00E3 | 2 bytes | Sprite platforming interaction left point y pos. |
$7E00E5 | 2 bytes | Sprite platforming interaction right point y pos. |
$7E00E7 | 2 bytes | [Considering a rectangle with corner 2 beign the opposite corner of 1] Club hitbox corner 1 x pos. |
$7E00E9 | 2 bytes | Club hitbox corner 2 x pos. |
$7E00EB | 2 bytes | Club hitbox corner 1 y pos. |
$7E00ED | 2 bytes | Club hitbox corner 2 y pos. |
$7E0622 | 2 bytes | Stage skip password flag. |
$7E0624 | 2 bytes | Invincibility password flag. |
$7E0634 | 2 bytes | Current cutscene ID. A list of valid values can be found here. |
$7E0636 | 1 byte | Is paused flag. |
$7E06E2 | 58 bytes | Sprite hitbox type table. The value is used as a pointer in rom ($01B9D9) to define the hitbox corners related to the sprite position. |
$7E0725 | 1 byte | Fred's graphical direction, maybe[1]: #40 = facing right, #104 = facing left. It's controlled by the effective direction ($7E0CB9). |
$7E0944 | 1 byte | Fred is loaded flag. #$01 = Fred is loaded, in levels, cutscenes, Password screen, Ocean intro. Also is #$02 when is walking in cutscenes and #$03 when jumping in cutscenes. |
$7E0946 | 58 bytes | Sprite type table. Can be interpreted as a status sometimes. |
$7E0980 | 8 bytes | Extended sprite type table. Uses the values #$10, #$11, #$14 and #$15 from the sprite type table. Can be interpreted as a status sometimes. |
$7E0988 | 2 bytes | X position. |
$7E098A | 58 bytes | Sprite X position table. |
$7E09C4 | 8 bytes | Extended sprite X position table. |
$7E09CC | 2 bytes | Y position. |
$7E09CE | 58 bytes | Sprite Y position table. |
$7E0A08 | 8 bytes | Extended sprite Y position table. |
$7E0A11 | 1 byte | Accumulated X subpixels. |
$7E0A13 | 58 bytes | Sprite accumulated X subpixels table. |
$7E0A4D | 8 bytes | Extended sprite accumulated X subpixels table. |
$7E0A55 | 1 byte | Accumulated Y subpixels. |
$7E0A57 | 58 bytes | Sprite accumulated Y subpixels table. |
$7E0A91 | 8 bytes | Extended sprite accumulated Y subpixels table. |
$7E0A98 | 2 bytes[1] | Fred's animation poses. A list of valid values can be found here. |
$7E0A9A | 58 bytes | Sprite animation table, maybe[1]. |
$7E0AD4 | 8 bytes | Extended sprite animation table, maybe[1]. |
$7E0ADC | 2 bytes | Player frame counter/timer for each action/status. |
$7E0ADE | 58 bytes | Sprite misc table 1. |
$7E0B18 | 8 bytes | Extended sprite misc table 1. |
$7E0B22 | 58 bytes | Sprite misc table 2. |
$7E0B5C | 8 bytes | Extended sprite misc table 2. |
$7E0B66 | 58 bytes | Sprite misc table 3. |
$7E0BA0 | 8 bytes | Extended sprite misc table 3. |
$7E0BAA | 58 bytes | Sprite misc table 4. |
$7E0BE4 | 8 bytes | Extended sprite misc table 4. |
$7E0CB9 | 1 byte | Fred's effective direction, maybe[1]: #00 = facing right, #64 = facing left. |
$7E0CFD | 1 byte | Something related with which layer does Fred overlay. #32 = in normal game, some stuff overlay Fred; #48 = in dying animation, Fred overlays everything execpt sprites. |
$7E0D84 | 2 bytes | X speed. The low byte is the subspeed, in subpixels/frame, and the high byte is the speed, in pixels/frame. |
$7E0D86 | 58 bytes | Sprite X speed table. The low byte is the subspeed, in subpixels/frame, and the high byte is the speed, in pixels/frame. |
$7E0DC0 | 8 bytes | Extended sprite X speed table. The low byte is the subspeed, in subpixels/frame, and the high byte is the speed, in pixels/frame. |
$7E0DC8 | 2 bytes | Y speed. The low byte is the subspeed, in subpixels/frame, and the high byte is the speed, in pixels/frame. |
$7E0DCA | 58 bytes | Sprite Y speed table. The low byte is the subspeed, in subpixels/frame, and the high byte is the speed, in pixels/frame. |
$7E0E04 | 8 bytes | Extended sprite Y speed table. The low byte is the subspeed, in subpixels/frame, and the high byte is the speed, in pixels/frame. |
$7E0E94 | 1 byte | Is on ground flag. #01 = yes, #00 = no. When set, Fred can jump. |
$7E0ED0 | 8 bytes | Extended sprite is on ground flag. |
$7E0FEE | 2 bytes | Mirror of X speed ($7E0D84). The low byte resets to 255 when not playing. |
$7E0FF0 | 2 bytes | Last valid X position to respawn (if the player falls on a pit). |
$7E0FF2 | 2 bytes | Last valid Y position to respawn (if the player falls on a pit). |
$7E0FF6 | 1 byte | Fred's status. A list of valid values can be found here. |
$7E0FF8 | 2 bytes | X starting position in levels, Game Over screen and Password screen. |
$7E0FFA | 2 bytes | Y starting position in levels, Game Over screen and Password screen. |
$7E1000 | 1 byte | Is smashing flag. When #01, Fred hits enemies and rocks. |
$7E1010 | 1 byte | Something related to be standing still, increments by 4 every 8 frames. |
$7E101A | 2 bytes | Selection cursor x position (in the table, not in pixels) in the Hiscore section when the player puts its name (when beats the game). |
$7E101C | 2 bytes | Selection cursor y position (in the table, not in pixels) in the Hiscore section when the player puts its name (when beats the game). |
$7E101E | 2 bytes | Position on Hiscore table, after beating the game. |
$7E1020 | 1 byte | Current character slot in the Hiscore section when the player puts its name (when beats the game). Can be interpreted as name size too. |
$7E1022 | 2 bytes | Only updated in the Hiscore section when the player puts its name (when beats the game). Increases every frame, looping between #00 and #07. |
$7E102E | 8 bytes | Player name in Hiscores (while choosing it when beats the game), each byte for each character. #65~#90 = A~Z, #32 = blank space, #46 = not writen (dot). There are other valid values too (for numbers and special characters), but inaccessible. |
$7E1066 | 1 byte | Platform in mud pointer, it's the number of the current platform to rise. Updates right when you step on these platforms. |
$7E140F | 1 byte | Language option: #00 = brittish english, #01 = american english, #02 = spanish, #03 = german, #04 = italian, #05 = french. |
$7E1485 | 2 bytes | Width of the current level, in blocks. $7E15B6 seems like a mirror of the low byte. |
$7E1487 | 2 bytes | Height of the current level, in blocks. |
$7E1491 | 2 bytes | Is on a platform-like sprite flag. When set, Fred can jump. |
$7E1D51 | 2 bytes | Invincibility timer. The player has 120 frames of invincibility after being hit or falling in a pit. |
$7E1D5B | 1 byte | Current level. A list of valid values can be found here. |
$7E1D65 | 2 bytes | Lives. |
$7E1D69 | 2 bytes | Health (Fred faces in the life counter, #02 = normal, #01 = tongue out, #00 = tongue out and spiked hair). |
$7E1D6D | 2 bytes | Stones. |
$7E1D71 | 2 bytes | Bowling balls. |
$7E1D75 | 2 bytes | Score. The maximum score you can see is 042767, which corresponds to $1D75 = 15 and $1D76 = 167, any point further the addresses are updated normally, but the counter becomes 000000, and you won't get in the Hiscores. Note: the first digit on the counter is never used, there isn't a RAM address for it. |
$7E1D8D | 2 bytes | Time. Each game second takes 64 frames, so in NTSC (60Hz), 16 game seconds = 15 real seconds. |
$7E1D95 | 1 byte | Score counter on screen, 6th digit. |
$7E1D97 | 1 byte | Score counter on screen, 5th digit. |
$7E1D99 | 1 byte | Score counter on screen, 4th digit. |
$7E1D9B | 1 byte | Score counter on screen, 3rd digit. |
$7E1D9D | 1 byte | Score counter on screen, 2nd digit. |
$7E1DA1 | 1 byte | Time counter on screen, 3rd digit. |
$7E1DA3 | 1 byte | Time counter on screen, 2nd digit. |
$7E1DA5 | 1 byte | Time counter on screen, 1st digit. |
$7E1DA7 | 1 byte | Live counter on screen, 2nd digit. |
$7E1DA9 | 1 byte | Live counter on screen, 1st digit. |
$7E1DAB | 1 byte | Bowling ball counter on screen, 2nd digit. |
$7E1DAD | 1 byte | Bowling ball counter on screen, 1st digit. |
$7E1DAF | 1 byte | Stone counter on screen, 2nd digit. |
$7E1DB1 | 1 byte | Stone counter on screen, 1st digit. |
$7E1DB3 | 1 byte | Mirror of $7E1D95. |
$7E1DB5 | 1 byte | Mirror of $7E1D97. |
$7E1DB7 | 1 byte | Mirror of $7E1D99. |
$7E1DB9 | 1 byte | Mirror of $7E1D9B. |
$7E1DBB | 1 byte | Mirror of $7E1D9D. |
$7E1DBF | 1 byte | Mirror of $7E1DA1. |
$7E1DC1 | 1 byte | Mirror of $7E1DA3. |
$7E1DC3 | 1 byte | Mirror of $7E1DA5. |
$7E1DC5 | 1 byte | Mirror of $7E1DA7. |
$7E1DC7 | 1 byte | Mirror of $7E1DA9. |
$7E1DC9 | 1 byte | Mirror of $7E1DAB. |
$7E1DCB | 1 byte | Mirror of $7E1DAD. |
$7E1DCD | 1 byte | Mirror of $7E1DAF. |
$7E1DCF | 1 byte | Mirror of $7E1DB1. |
$7E1DD5 | 2 bytes | Counter for how long you're holding a stone to throw (holding X). When hits #120 you burn you hand and waste the stone. This determines how far the stone can go. E.g.: if you hold for 20 frames the stone will float without y speed for 20 frames. The high byte is never used, but is updated if you poke a value bigger than #120. |
$7E1DD7 | 2 bytes | Idle timer. It's #300 when player is acting, then decrements whenever the player is idle. When reaches #00, activates the idle animation. |
$7E1DEB | 2 bytes | Lava wave (in Volcanic 3) x pos. |
$7E1DED | 2 bytes | Lava wave (in Volcanic 3) y pos. |
$7E1DEF | 2 bytes | Lava wave (in Volcanic 3) pointer. It sets the x pos (at $82EC64), the timer (at $82EC5D), and the next stopping x pos (at $82EC6B). It's used right when the timer ends, then it increments in 0x06 for the next wave. |
$7E1DF1 | 2 bytes | Lava wave (in Volcanic 3) timer. When reaches zero, the wave starts. |
$7E1DF3 | 2 bytes | Lava wave (in Volcanic 3) flag for when will damage Fred. Is set when the wave is running, disabled between waves. |
$7E1DF7 | 2 bytes | Lava wave (in Volcanic 3) stopping x pos. |
$7E1E0E | 2 bytes | Lava flood (in Volcanic 2) y pos (static). |
$7E1E10 | 2 bytes | Lava flood (in Volcanic 2) y pos (oscillating). |
$7E1E12 | 1 byte | Lava flood (in Volcanic 2) y pos in screen. |
$7E1ED6 | 1 byte | Boss HP. The Caveman boss (Quarry 3) has #15, the Tiger boss (Jungle 4) has #5. |
$7E2000 | 2 bytes | Width of the level loaded, in blocks. Is set during the level loading/name screen. |
$7E2002 | 2 bytes | Height of the level loaded, in blocks. Is set during the level loading/name screen. |
$7E2004 | ? bytes[1] | Map16 table of tiles (low byte). It's more like the ID of the tile, e.g.: #$9f = blank tile. A list of valid values can be found here. |
$7E2005 | ? bytes[1] | Map16 table of tiles (high byte). It's more like the properties of the tile. A list of valid values can be found here. |
- These addresses need further research, since I'm just one and started this study just some months ago.