RAM map (Boktai 2): Difference between revisions
No edit summary |
(Solar bank/station) |
||
(26 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
This is the RAM map for Boktai 2 (U). <!-- Please create a new page for maps of other languages! For example "RAM map (Boktai 2, J)". --> | |||
= EWRAM = | |||
{| class="wikitable exportable" | |||
|- | |||
! Address || Type || Description | |||
|- | |||
| 0x0200184c || || Is full moon (*0x030047f6 == 4) | |||
|- | |||
| 0x02001469 || i8 || High-level solar sensor state: 0=disabled, 1=waiting for enable, 2=enabled. When going through a screen transition, this will change from 2 -> 0 -> 1 -> 2. | |||
|- | |||
| 0x0200146c || i16 || High-level solar sensor: Calibrated level (0=dark, 140=max brightness. Calibrated level = calibration - raw level, then clamp to 0-140) | |||
|- | |||
| 0x02001470 || i16 || High-level solar sensor delay: Used for delaying the state 0 -> 1 and 1 -> 2 transitions | |||
|- | |||
| 0x02002464 || i32 || Total EXP until next level | |||
|} | |||
== Stat struct == | |||
Access this struct via 0x030046a0. Size: 0x958 bytes. See also: [[Inventory (Boktai 2)]]. | |||
{| class="wikitable exportable" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0x28 || i16[6] || Stats (HP/ENE/VIT/SPR/STR/AGI) - updated from *0x03002be0 + 0x364 on screen transitions | |||
|- | |||
| 0x30 || i16[3] || Django(& Sabata?) position | |||
|- | |||
| 0x40 || i16 || Current level* | |||
|- | |||
| 0x42 || i16 || Allocatable stat points | |||
|- | |||
| 0x46 || i16[5] || Weapon skill EXP (Sword/Spear/Hammer/Fists/Gun; 100 exp = 1 skil level) | |||
|- | |||
| 0x50 || i32 || Total EXP | |||
|- | |||
| 0x54 || i32 || Magic [[Inventory (Boktai 2)|inventory]] (bitmask) | |||
|- | |||
| 0x70 || i16[48] || Item inventory slots | |||
|- | |||
| 0xd0 || i16[48] || Item inventory durability | |||
|- | |||
| 0x130 || i16[16] || Key item inventory | |||
|- | |||
| 0x150 || i16[32] || Protector inventory | |||
|- | |||
| 0x23a || i16 || Solar bank interest rate (stored as <code>(1+r)*64</code>, e.g. 14.0625% = 73). Defaults to 65 when starting a new game. When the date changes, the rate will change to <code>65 + ([[#STAT_2b4|IGT_frame_counter]] XOR [[#IWRAM_47e6|RTC_seconds]]) mod 13</code> (effectively uniformly distributed in the interval [1.5625%, 20.3125%]). | |||
|- | |||
| 0x242 || i16 || Current [[Maps (Boktai 2)|map ID]] | |||
|- | |||
| 0x250 || i16 || Current player form (Red Django/Black Django/Bat/Mouse/Unused/Sabata) | |||
|- | |||
| 0x254 || i16 || Current [[Maps (Boktai 2)#Areas|area ID]] | |||
|- | |||
| 0x24c || i32 || Current map's init script ID | |||
|- | |||
| id="STAT_2b4" | 0x2b4 || i32 || IGT frame counter for this save file | |||
|- | |||
| 0x2c0 || || Django: Kaamos progress | |||
|- | |||
| 0x2c4 || || Sabata: Kaamos progress | |||
|- | |||
| 0x2c8 || || Django: Kaamos status | |||
|- | |||
| 0x2ce || || Sabata: Kaamos status | |||
|- | |||
| 0x3bc || i32 || Solar Station | |||
|- | |||
| 0x3d0 || struct[16] || [[Inventory (Boktai 2)#Weapons|Weapon inventory]] | |||
|- | |||
| 0x910 || i32 || Solar Bank | |||
|} | |||
''* <small>Sabata's level is always Django's level +10. His stats are also spread evenly. Each point is added in the following order : VIT > SPR > STR > AGI > Repeat.</small>'' | |||
== World struct == | |||
Access this struct via 0x03004698. Size: 0x400 bytes. ''Note:'' In the Japanese version, this struct is laid out slightly differently. | |||
{| class="wikitable exportable" | |||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0x172 || u8[4] || Remains stone tablet locations (0=NW ... 8=SE) | |||
|- | |||
| 0x17d || u8 || Spiral tower axe+ puzzle: Sabata's amount | |||
|- | |||
| 0x17e || u8 || Spiral tower axe+ puzzle: Django's amount | |||
|- | |||
| 0x17f || u8 || Spiral tower axe+ puzzle: Django's direction (0=North, 1=South) | |||
|- | |||
| 0x180 || u8 || Spiral tower axe+ puzzle: Sabata's direction (0=East, 1=West) | |||
|- | |||
| 0x1ac:0 || bit || House of Time: Present/past flag | |||
|- | |||
| 0x1e8 || i16 || Current door ID | |||
|} | |||
== Scratch struct == | |||
Access this struct via 0x03004690. | |||
{| class="wikitable exportable" | |||
|- | |||
! Offset || Type || Description | |||
|} | |||
= IWRAM = | = IWRAM = | ||
{| class="wikitable" | {| class="wikitable exportable" | ||
|- | |- | ||
! Address || Type || Description | ! Address || Type || Description | ||
|- | |- | ||
| | | 0x030026b4 || i32 || Solar sensor interface: State (0=measuring, 1=resetting, 2=idle) | ||
|- | |||
| 0x030026b8 || i32 || Solar sensor interface: Counter (0-511, counts half-cycles of the 74LV4040 counter chip) | |||
|- | |||
| 0x030026c0 || i32 || Solar sensor interface: shift out (next value to be written to GPIO_DATA) | |||
|- | |||
| 0x03002be0 || struct* || Pointer to Django's actor data? | |||
|- | |||
| + 0x35c || i16[4] || Current VIT/SPR/STR/AGI | |||
|- | |||
| + 0x364 || i32[2] || Current HP/ENE | |||
|- | |||
| 0x03002cb8 || code* || Pointer to TM3 interrupt handler | |||
|- | |||
| 0x03002cf0 || i32 || Frames since reset | |||
|- | |||
| 0x030044bc || u32 || [[Actor]] disable flags | |||
|- | |||
| 0x030044e0 || u16 || Keypad: down buttons (active-high) | |||
|- | |||
| 0x030044e2 || u16 || Keypad: pressed buttons (down current frame, up on previous frame) | |||
|- | |||
| 0x030044e4 || u16 || Keypad: released buttons (up on current frame, down on previous frame) | |||
|- | |||
| 0x03004520 || Array || [[Actor]] list | |||
|- | |||
| 0x030045a0 || void* || [[Bytecode]]: Program counter | |||
|- | |||
| 0x03004690 || void* || Pointer to [[#Scratch struct]], defaults to 0x0203e200 on hard reset (but moves on soft resets) | |||
|- | |||
| 0x03004694 || void* || Pointer to backup of the world struct (created on screen transitions, reloaded on death, saved to save file when saving) | |||
|- | |||
| 0x03004698 || void* || Pointer to [[#World struct]], defaults to 0x0203da00 on hard reset (but moves on soft resets) | |||
|- | |||
| 0x0300469c || void* || Pointer to backup of the stat struct | |||
|- | |||
| 0x030046a0 || void* || Pointer to [[#Stat struct]], defaults to 0x0203c400 on hard reset (but moves on soft resets) | |||
|- | |||
| 0x030047a8 || struct* || Pointer to [[#Global save data]] (always 0x030016c0) | |||
|- | |||
| 0x030046b8 || i32 || [[Random number generator|RNG index]] | |||
|- | |||
| 0x030047e0 || u32 || RTC date (BCD, yyyymmdd) | |||
|- | |||
| 0x030047e4 || u8 || RTC hours | |||
|- | |||
| 0x030047e5 || u8 || RTC minutes | |||
|- | |||
| id="IWRAM_47e6" | 0x030047e6 || u8 || RTC seconds | |||
|- | |||
| 0x030047e7 || u8 || RTC frames | |||
|- | |||
| 0x030047cc || i32 || Solar sensor interface: Timer interval (TM3CNT_LO will be set to -this value) | |||
|- | |||
| 0x030047ea || u8 || [[Time|Sunrise]] hours | |||
|- | |||
| 0x030047eb || u8 || Sunrise minutes | |||
|- | |||
| 0x030047ec || u8 || Sunset hours | |||
|- | |||
| 0x030047ed || u8 || Sunset minutes | |||
|- | |||
| 0x030047f6 || i32 || Current moon phase | |||
|- | |||
| 0x030047f8 || i32 || [[Time|Region]] latitude | |||
|- | |- | ||
| | | 0x030047fc || i32 || Region longitude | ||
|- | |- | ||
| | | 0x03004800 || i32 || Region time zone offset | ||
|- | |- | ||
| | | 0x030057b8 || i32 || Solar sensor interface: Is enabled (true/false) | ||
|- | |- | ||
| | | 0x030057bc || i32 || Solar sensor interface: Last result (GPIO_DATA & 8) | ||
|- | |- | ||
| 0x030057c8 || i32 || Solar sensor interface: Raw level (counter / 2 when GPIO_DATA & 8 becomes nonzero. 0=max brightness, 255=dark) | |||
|} | |} | ||
= | == Global save data == | ||
[[ | {| class="wikitable exportable" | ||
|- | |||
! Offset || Type || Description | |||
|- | |||
| 0x00 || i32 || Global frame counter | |||
|- | |||
| 0x04 || i32 || Solar sensor calibration (<code>raw level - 2</code> at time of calibration) | |||
|- | |||
| 0x0b || u8 || Daylight savings time active | |||
|- | |||
| 0x18 || u16 || [[Downloadable_events|Unlock Blindbox Lv. 3 event]] | |||
|- | |||
| 0x1a || u16 || [[Downloadable_events|Unlock Blindbox Lv. 4 event]] | |||
|- | |||
| 0x1c || u16 || [[Downloadable_events|Unlock Blindbox Lv. 5 & valentine's day event]] | |||
|- | |||
| 0x1e || u16 || [[Downloadable_events|Unlock Something has happened to ???'s body event]] | |||
|} | |||
= | = EEPROM = | ||
''TODO'' | ''TODO'' | ||
[[Save data checksums]] | |||
[[Category:Documentation]] | [[Category:Documentation]] | ||
[[Category:Boktai 2]] | [[Category:Boktai 2]] |
Latest revision as of 20:19, 16 November 2024
This is the RAM map for Boktai 2 (U).
EWRAM
Address | Type | Description |
---|---|---|
0x0200184c | Is full moon (*0x030047f6 == 4) | |
0x02001469 | i8 | High-level solar sensor state: 0=disabled, 1=waiting for enable, 2=enabled. When going through a screen transition, this will change from 2 -> 0 -> 1 -> 2. |
0x0200146c | i16 | High-level solar sensor: Calibrated level (0=dark, 140=max brightness. Calibrated level = calibration - raw level, then clamp to 0-140) |
0x02001470 | i16 | High-level solar sensor delay: Used for delaying the state 0 -> 1 and 1 -> 2 transitions |
0x02002464 | i32 | Total EXP until next level |
Stat struct
Access this struct via 0x030046a0. Size: 0x958 bytes. See also: Inventory (Boktai 2).
Offset | Type | Description |
---|---|---|
0x28 | i16[6] | Stats (HP/ENE/VIT/SPR/STR/AGI) - updated from *0x03002be0 + 0x364 on screen transitions |
0x30 | i16[3] | Django(& Sabata?) position |
0x40 | i16 | Current level* |
0x42 | i16 | Allocatable stat points |
0x46 | i16[5] | Weapon skill EXP (Sword/Spear/Hammer/Fists/Gun; 100 exp = 1 skil level) |
0x50 | i32 | Total EXP |
0x54 | i32 | Magic inventory (bitmask) |
0x70 | i16[48] | Item inventory slots |
0xd0 | i16[48] | Item inventory durability |
0x130 | i16[16] | Key item inventory |
0x150 | i16[32] | Protector inventory |
0x23a | i16 | Solar bank interest rate (stored as (1+r)*64 , e.g. 14.0625% = 73). Defaults to 65 when starting a new game. When the date changes, the rate will change to 65 + (IGT_frame_counter XOR RTC_seconds) mod 13 (effectively uniformly distributed in the interval [1.5625%, 20.3125%]).
|
0x242 | i16 | Current map ID |
0x250 | i16 | Current player form (Red Django/Black Django/Bat/Mouse/Unused/Sabata) |
0x254 | i16 | Current area ID |
0x24c | i32 | Current map's init script ID |
0x2b4 | i32 | IGT frame counter for this save file |
0x2c0 | Django: Kaamos progress | |
0x2c4 | Sabata: Kaamos progress | |
0x2c8 | Django: Kaamos status | |
0x2ce | Sabata: Kaamos status | |
0x3bc | i32 | Solar Station |
0x3d0 | struct[16] | Weapon inventory |
0x910 | i32 | Solar Bank |
* Sabata's level is always Django's level +10. His stats are also spread evenly. Each point is added in the following order : VIT > SPR > STR > AGI > Repeat.
World struct
Access this struct via 0x03004698. Size: 0x400 bytes. Note: In the Japanese version, this struct is laid out slightly differently.
Offset | Type | Description |
---|---|---|
0x172 | u8[4] | Remains stone tablet locations (0=NW ... 8=SE) |
0x17d | u8 | Spiral tower axe+ puzzle: Sabata's amount |
0x17e | u8 | Spiral tower axe+ puzzle: Django's amount |
0x17f | u8 | Spiral tower axe+ puzzle: Django's direction (0=North, 1=South) |
0x180 | u8 | Spiral tower axe+ puzzle: Sabata's direction (0=East, 1=West) |
0x1ac:0 | bit | House of Time: Present/past flag |
0x1e8 | i16 | Current door ID |
Scratch struct
Access this struct via 0x03004690.
Offset | Type | Description |
---|
IWRAM
Address | Type | Description |
---|---|---|
0x030026b4 | i32 | Solar sensor interface: State (0=measuring, 1=resetting, 2=idle) |
0x030026b8 | i32 | Solar sensor interface: Counter (0-511, counts half-cycles of the 74LV4040 counter chip) |
0x030026c0 | i32 | Solar sensor interface: shift out (next value to be written to GPIO_DATA) |
0x03002be0 | struct* | Pointer to Django's actor data? |
+ 0x35c | i16[4] | Current VIT/SPR/STR/AGI |
+ 0x364 | i32[2] | Current HP/ENE |
0x03002cb8 | code* | Pointer to TM3 interrupt handler |
0x03002cf0 | i32 | Frames since reset |
0x030044bc | u32 | Actor disable flags |
0x030044e0 | u16 | Keypad: down buttons (active-high) |
0x030044e2 | u16 | Keypad: pressed buttons (down current frame, up on previous frame) |
0x030044e4 | u16 | Keypad: released buttons (up on current frame, down on previous frame) |
0x03004520 | Array | Actor list |
0x030045a0 | void* | Bytecode: Program counter |
0x03004690 | void* | Pointer to #Scratch struct, defaults to 0x0203e200 on hard reset (but moves on soft resets) |
0x03004694 | void* | Pointer to backup of the world struct (created on screen transitions, reloaded on death, saved to save file when saving) |
0x03004698 | void* | Pointer to #World struct, defaults to 0x0203da00 on hard reset (but moves on soft resets) |
0x0300469c | void* | Pointer to backup of the stat struct |
0x030046a0 | void* | Pointer to #Stat struct, defaults to 0x0203c400 on hard reset (but moves on soft resets) |
0x030047a8 | struct* | Pointer to #Global save data (always 0x030016c0) |
0x030046b8 | i32 | RNG index |
0x030047e0 | u32 | RTC date (BCD, yyyymmdd) |
0x030047e4 | u8 | RTC hours |
0x030047e5 | u8 | RTC minutes |
0x030047e6 | u8 | RTC seconds |
0x030047e7 | u8 | RTC frames |
0x030047cc | i32 | Solar sensor interface: Timer interval (TM3CNT_LO will be set to -this value) |
0x030047ea | u8 | Sunrise hours |
0x030047eb | u8 | Sunrise minutes |
0x030047ec | u8 | Sunset hours |
0x030047ed | u8 | Sunset minutes |
0x030047f6 | i32 | Current moon phase |
0x030047f8 | i32 | Region latitude |
0x030047fc | i32 | Region longitude |
0x03004800 | i32 | Region time zone offset |
0x030057b8 | i32 | Solar sensor interface: Is enabled (true/false) |
0x030057bc | i32 | Solar sensor interface: Last result (GPIO_DATA & 8) |
0x030057c8 | i32 | Solar sensor interface: Raw level (counter / 2 when GPIO_DATA & 8 becomes nonzero. 0=max brightness, 255=dark) |
Global save data
Offset | Type | Description |
---|---|---|
0x00 | i32 | Global frame counter |
0x04 | i32 | Solar sensor calibration (raw level - 2 at time of calibration)
|
0x0b | u8 | Daylight savings time active |
0x18 | u16 | Unlock Blindbox Lv. 3 event |
0x1a | u16 | Unlock Blindbox Lv. 4 event |
0x1c | u16 | Unlock Blindbox Lv. 5 & valentine's day event |
0x1e | u16 | Unlock Something has happened to ???'s body event |
EEPROM
TODO