This is the RAM map for Boktai 1 (U). Go to ROM map.
EWRAM
Address |
Type |
Description
|
0x020011c0 |
i32 |
Solar sensor: Calibrated level (0=dark, 140=max brightness. Calibrated level = calibration - raw level, then clamp to 0-140)
|
0x020011c2 |
i32 |
Solar sensor: Bars. Calculated from calibrated level (0=dark, 8=max brightness)
|
0x02001b5e |
i16 |
Current boss health (read only)
|
0x02001b6a |
i16 |
Current trap health (read only)
|
0x02005610 |
i16 |
Link points in status room
|
0x02007542 |
i16 |
Permafrost: frost ceiling
|
0x02008436 |
i16 |
Purification: top left tower health
|
0x020086c6 |
i16 |
Purification: bottom right tower health
|
0x02008956 |
i16 |
Purification: top right tower health
|
0x02008be6 |
i16 |
Purification: bottom left tower health
|
0x0201a400 |
struct |
Decompressed tile map file (only used if the tile map file was compressed, uncompressed files are accessed directly from ROM)
|
0x0203c800 |
u16[1024] |
RNG table (generated by the bootstrap RNG once on power-on)
|
0x0203d800 |
byte[0x580] |
#Stat struct
|
0x0203e000 |
byte[0x580] |
Stat struct - backup (created on screen transitions, reloaded on death, saved to save file when saving)
|
0x0203e800 |
byte[0x400] |
#World struct
|
0x0203ec00 |
byte[0x400] |
World struct - backup
|
0x0203f000 |
byte[?] |
#Scratch struct
|
Stat struct
See also: Inventory (Boktai 1)
Address |
Type |
Description
|
0x0203d80a |
i16[7] |
Grenade amounts
|
0x0203d818 |
i16[7] |
Battery charges
|
0x0203d828 |
char[?] |
Player name
|
0x0203d840 |
i16 |
Max HP
|
0x0203d878 |
i32 |
Doomy debt
|
0x0203d88c |
i16 |
Equipped lens
|
0x0203d88e |
i16 |
Equipped frame
|
0x0203d890 |
i16 |
Equipped grenades
|
0x0203d892 |
i16 |
Equipped battery
|
0x0203d894 |
i16 |
Pineapple grenade charge
|
0x0203d898 |
i32[5] |
Solar plant progress
|
0x0203d8b0 |
i32 |
Unlock Astro battery (must be set to *(*0x03001c90 + 0x7dc) )
|
0x0203d8b6 |
i16 |
Playthrough count (0=New Game, 1=New Game+, 2=New Game++, etc.)
|
0x0203d8f0 |
i16[3] |
Django position
|
0x0203d8f6 |
i16 |
Django oritentation
|
0x0203d8fa |
i16 |
Current HP
|
0x0203d8fc |
i32 |
IGT frames since creating save file
|
0x0203d900 |
i16 |
Current Map ID
|
0x0203d90c |
u16 |
Current map's init script ID
|
0x0203d910 |
i32 |
Dungeon IGT
|
0x0203d914 |
i32 |
Dungeon charged energy
|
0x0203d918 |
i16 |
Dungeon detections
|
0x0203d91c |
u16 |
Room flags (bit 2=indoors (no sun))
|
0x0203d91e |
i32 |
Solar sensor: Calibrated level (see 0x020011c0)
|
0x0203d928 |
i32 |
Dungeon completion flags
|
0x0203dadc |
i32 |
Current Area ID
|
0x0203daf0 |
u16 |
Dungeon related flags?
|
0x0203daf4 |
i32 |
Purification: Immortal health
|
0x0203dc18 |
i16 |
Item inventory size
|
0x0203dc1a |
i16[42] |
Item inventory IDs
|
0x0203dc6e |
i16[42] |
Item inventory amounts
|
0x0203dcc2 |
i16 |
Grenade limit
|
0x0203dcc4 |
i32 |
Lens inventory (bitmask, 1 bit per lens and level)
|
0x0203dcc8 |
i32 |
Frame inventory (bitmask)
|
0x0203dcd0 |
i32 |
Battery inventory (bitmask)
|
0x0203dcd8 |
i16[8] |
Lens EXP
|
0x0203dce8 |
i32 |
Solar station
|
0x0203dd2c |
i16 |
Link points source
|
0x0203dd2e |
i16 |
Link battles total
|
0x0203dd30 |
i16 |
Link battles won
|
0x0203dd32 |
i16 |
Item exchange amount
|
0x0203dd38 |
char[?] |
Item exchange partner name
|
World struct
Address |
Type |
Description
|
0x0203e80e |
i16 |
Global story progress
|
0x0203e898:5 |
bit[6] |
Roadblock cleared flags: Fog castle, Dark castle (unlocks warp), Firetop, Permafrost, Sol City, Bloodrust
|
0x0203e8bc |
i32 |
Action difficulty (0=Easy, 1=Normal, 2=Hard)
|
0x0203e8c0:0 |
bit[30] |
Silver coin collection flags
|
0x0203e8c3:6 |
bit[16] |
Life fruit collection flags
|
0x0203e8c5:6 |
bit[64] |
"Chest opened" flags for current area (resets on area change)
|
0x0203e8cf |
u8 |
Last dungeon rank
|
0x0203e8d0:3 |
bit |
Undead: Trigger dungeon intro
|
0x0203e8d4 |
u8 |
Azure Sky Tower: Current room (0=NE, 1=SE, 2=NW, 3=SW)
|
0x0203e8dc |
u8 |
Azure Sky Tower: Enemy index of key holder (see 0x0203eab4 and 0x0203eac4)
|
0x0203e8dd |
u8 |
Azure Sky Tower: Current floor
|
0x0203e8e0 |
u8 |
Azure Sky Tower: Number of completions
|
0x0203e8de |
u8 |
Azure Sky Tower: Current palette (0-7)
|
0x0203e8e1 |
u8[4] |
Azure Sky Tower: Current floor room indices (indices: 0=NE, 1=SE, 2=NW, 3=SW). The index of the current room will be copied to 0x0203f2f6.
|
0x0203ea1a |
i16 |
Current door ID
|
0x0203ea1c |
i32 |
Current door script ID (used for respawning the player after using the bank/loans)
|
0x0203ea91 |
u8 |
Bloodrust mansion courtyard layout
|
0x0203eab4 |
u8[16] |
Azure Sky Tower: Current floor enemy types. Entries 0-3=NE room, 4-7=SE, 8-11=NW, 12-15=SW. (TODO: value list)
|
0x0203eac4 |
u8[32] |
Azure Sky Tower: Current floor enemy coordinates (TODO: how does this work?)
|
Scratch struct
Address |
Type |
Description
|
0x0203f01f |
u8 |
Current cutscene progress
|
0x0203f0cc |
i16 |
Dungeon base score
|
0x0203f140 |
u8 |
TAIYOJU: Tree palette (0=dark brown, 1=dark blue, 2=light brown)
|
0x0203f1b4 |
u8[13] |
Carmilla: Pattern list - one of 4 hardcoded lists will be chosen at random when starting the fight
|
0x0203f1c1 |
u8[3] |
Carmilla: Pattern pool (indices into pattern list)
|
0x0203f1c4 |
u8[3] |
Carmilla: ???
|
0x0203f1c7 |
u8 |
Carmilla: Next pool value
|
0x0203f1c8 |
u8 |
Carmilla: Pattern index (index into pattern pool) - the (current/next?) pattern is pattern_list[pattern_pool[next_pool_value]]
|
0x0203f2f6 |
u8 |
Azure Sky Tower: Current room index (0-31)
|
IWRAM
Address |
Type |
Description
|
0x03000600 |
void* |
ID of Tile map file that has been decompressed to 0x0201a400
|
0x03000630 |
i32 |
Solar sensor interface: State (0=measuring, 1=resetting, 2=idle)
|
0x03000634 |
i32 |
Solar sensor interface: Counter (0-511, counts half-cycles of the 74LV4040 counter chip)
|
0x0300063c |
i32 |
Solar sensor interface: shift out (next value to be written to GPIO_DATA)
|
0x03000648 |
void* |
Script directory: Script index pointer
|
0x03000648 |
void* |
Script directory: Script count
|
0x03000108 |
treasure_data* |
Pointer to this map's #Treasure data (NULL if map has no treasures)
|
0x03001c2c |
i16 |
Solar sensor: Bars. See 0x020011c2.
|
0x03001c40 |
u16 |
Active item effects (bitmask)
|
0x03001c54 |
i16 |
Grenade effect duration
|
0x03001c58 |
u16 |
Active grenade effect (bitmask)
|
0x03001c60 |
i16 |
Item effect duration
|
0x03001c90 |
void* |
Pointer to Django's actor data?
|
+ 0x18 |
i32 |
Current lens level
|
+ 0x11a |
|
Max HP - Current HP
|
+ 0x79a |
u16 |
Enduranut buffered damage
|
+ 0x7dc |
i32 |
Astro battery unlock password
|
0x03001cc8 |
void* |
Pointer to linked list of bat enemies?
|
0x03004438 |
u32 |
Actor disable flags
|
0x03004450 |
u16 |
Keypad: down buttons (active-high)
|
0x03004452 |
u16 |
Keypad: pressed buttons (down current frame, up on previous frame)
|
0x03004454 |
u16 |
Keypad: released buttons (up on current frame, down on previous frame)
|
0x03004478 |
i32 |
Bootstrap RNG seed
|
0x03004480 |
Array |
Actor list
|
0x030044f8 |
i32 |
Solar sensor interface: Is enabled (true/false)
|
0x030044fc |
i32 |
Solar sensor interface: Last result (GPIO_DATA & 8)
|
0x03004508 |
i32 |
Solar sensor interface: Raw level (counter / 2 when GPIO_DATA & 8 becomes nonzero. 0=max brightness, 255=dark)
|
0x03004520 |
void* |
Bytecode: Program counter
|
0x03004524 |
void* |
Bytecode: Return value
|
0x0300450c |
i32 |
Solar sensor interface: Timer interval (TM3CNT_LO will be set to -this value)
|
0x03004610 |
struct* |
Pointer to current Map file descriptor (usually/always 0x02000010)
|
+ 0x00 |
i32 |
Number of Zones
|
+ 0x04 |
void* |
Pointer to map file tile data
|
+ 0x0c |
void* |
Pointer to map file zones
|
+ 0x10 |
void* |
Pointer to map file unknown block 1
|
+ 0x14 |
void* |
Pointer to map file unknown block 2
|
+ 0x24 |
zone_callback[] |
List of zone callbacks:
struct zone_callback {
/* offset 0x08 */ u16 zone_id;
/* offset 0x24 */ void* bytecode_ptr; // Generally points into a Script
};
|
0x03004620 |
i32 |
RNG index
|
0x030046a8 |
struct* |
Pointer to #Save data header (usually/always? 0x03000768)
|
0x030046c4 |
struct* |
Pointer to #Global save data (always 0x03000750)
|
0x030046e8 |
i16[3] |
Camera position
|
Offset |
Type |
Description
|
0x2c |
char[?] |
Player name
|
Global save data
Offset |
Type |
Description
|
0x00 |
i32 |
Global frame counter
|
0x04 |
i32 |
Solar sensor calibration (raw level - 2 at time of calibration)
|
0x08 |
i32 |
Solar bank
|
Other structs
Treasure data
// pointer to this struct is at 0x03000108
struct treasure_data {
/* offset 0x24 */ treasure_node* list_head;
};
struct treasure_node {
/* offset 0x14 */ treasure_trigger* trigger;
/* offset 0x28 */ u32 callback_script_id;
/* offset 0x2c */ u32 callback_args[?];
/* offset 0xb8 */ treasure_node* list_next;
};
struct treasure_trigger {
/* offset 0x20 */ i16 position[3];
};
EEPROM
Each block is followed by its checksum, see Save data checksums.