RAM map (Boktai 2): Difference between revisions

From Boktai Hacking Wiki
No edit summary
m (Added missing dot)
 
(13 intermediate revisions by 2 users not shown)
Line 2: Line 2:


= EWRAM =
= EWRAM =
{| class="wikitable"
{| class="wikitable exportable"
|-
|-
! Address || Type || Description
! Address || Type || Description
Line 18: Line 18:


== Stat struct ==
== Stat struct ==
Access this struct via 0x03004690. See also: [[Inventory (Boktai 2)]].
Access this struct via 0x030046a0. Size: 0x958 bytes. See also: [[Inventory (Boktai 2)]].


{| class="wikitable"
{| class="wikitable exportable"
|-
|-
! Offset || Type || Description
! Offset || Type || Description
Line 28: Line 28:
| 0x30 || i16[3] || Django(& Sabata?) position
| 0x30 || i16[3] || Django(& Sabata?) position
|-
|-
| 0x40 || i16 || Current level
| 0x40 || i16 || Current level*
|-
|-
| 0x42 || i16 || Allocatable stat points
| 0x42 || i16 || Allocatable stat points
Line 46: Line 46:
| 0x150 || i16[32] || Protector inventory
| 0x150 || i16[32] || Protector inventory
|-
|-
| 0x23a || i16 || Solar bank interest rate (stored as <code>(1+r)*64<code>, e.g. 14.0625% = 73)
| 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]]
| 0x242 || i16 || Current [[Maps (Boktai 2)|map ID]]
Line 55: Line 55:
|-
|-
| 0x24c || i32 || Current map's init script 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
| 0x2c0 || || Django: Kaamos progress
Line 66: Line 68:
| 0x3d0 || struct[16] || [[Inventory (Boktai 2)#Weapons|Weapon inventory]]
| 0x3d0 || struct[16] || [[Inventory (Boktai 2)#Weapons|Weapon inventory]]
|}
|}
''* <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 ==
== World struct ==
Access this struct via 0x030046a0. ''Note:'' In the Japanese version, this struct is laid out slightly differently.
Access this struct via 0x03004698. Size: 0x400 bytes. ''Note:'' In the Japanese version, this struct is laid out slightly differently.


{| class="wikitable"
{| class="wikitable exportable"
|-
|-
! Offset || Type || Description
! 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)
|-
|-
| 0x1e8 || i16 || Current door ID
| 0x1e8 || i16 || Current door ID
Line 78: Line 91:


== Scratch struct ==
== Scratch struct ==
Access this struct via 0x03004698.
Access this struct via 0x03004690.


{| class="wikitable"
{| class="wikitable exportable"
|-
|-
! Offset || Type || Description
! Offset || Type || Description
Line 87: Line 100:
= IWRAM =
= IWRAM =


{| class="wikitable"
{| class="wikitable exportable"
|-
|-
! Address || Type || Description
! Address || Type || Description
Line 106: Line 119:
|-
|-
| 0x03002cf0 || i32 || Frames since reset
| 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
| 0x030045a0 || void* || [[Bytecode]]: Program counter
Line 111: Line 134:
| 0x03004690 || void* || Pointer to [[#Scratch struct]], defaults to 0x0203e200 on hard reset (but moves on soft resets)
| 0x03004690 || void* || Pointer to [[#Scratch struct]], defaults to 0x0203e200 on hard reset (but moves on soft resets)
|-
|-
| 0x03004698 || void* || Pointer to [[#World 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)
| 0x030046a0 || void* || Pointer to [[#Stat struct]], defaults to 0x0203c400 on hard reset (but moves on soft resets)
Line 125: Line 152:
| 0x030047e5 || u8 || RTC minutes
| 0x030047e5 || u8 || RTC minutes
|-
|-
| 0x030047e6 || u8 || RTC seconds
| 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)
| 0x030047cc || i32 || Solar sensor interface: Timer interval (TM3CNT_LO will be set to -this value)
|-
|-
| 0x030047ea || u8 || Sunrise hours
| 0x030047ea || u8 || [[Time|Sunrise]] hours
|-
|-
| 0x030047eb || u8 || Sunrise minutes
| 0x030047eb || u8 || Sunrise minutes
Line 138: Line 167:
|-
|-
| 0x030047f6 || i32 || Current moon phase
| 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)
| 0x030057b8 || i32 || Solar sensor interface: Is enabled (true/false)
Line 148: Line 183:
== Global save data ==
== Global save data ==


{| class="wikitable"
{| class="wikitable exportable"
|-
|-
! Offset || Type || Description
! Offset || Type || Description
Line 155: Line 190:
|-
|-
| 0x04 || i32 || Solar sensor calibration (<code>raw level - 2</code> at time of calibration)
| 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]]
| 0x18 || u16 || [[Downloadable_events|Unlock Blindbox Lv. 3 event]]

Latest revision as of 22:28, 10 October 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
0x3d0 struct[16] Weapon inventory

* 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)
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

Save data checksums