RAM map (Boktai 2): Difference between revisions

From Boktai Hacking Wiki
(Solar bank/station)
 
(8 intermediate revisions by 2 users not shown)
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 exportable"
{| class="wikitable exportable"
Line 65: Line 65:
|-
|-
| 0x2ce || || Sabata: Kaamos status
| 0x2ce || || Sabata: Kaamos status
|-
| 0x3bc || i32 || Solar Station
|-
|-
| 0x3d0 || struct[16] || [[Inventory (Boktai 2)#Weapons|Weapon inventory]]
| 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>''
''* <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 exportable"
{| 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)
|-
| 0x1ac:0 || bit || House of Time: Present/past flag
|-
|-
| 0x1e8 || i16 || Current door ID
| 0x1e8 || i16 || Current door ID
Line 81: Line 97:


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


{| class="wikitable exportable"
{| class="wikitable exportable"
Line 109: Line 125:
|-
|-
| 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 114: Line 140:
| 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)

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

Save data checksums