RAM map (Boktai 2): Difference between revisions

From Boktai Hacking Wiki
(Fix stat/world/scratch pointers)
Line 119: Line 119:
|-
|-
| 0x03002cf0 || i32 || Frames since reset
| 0x03002cf0 || i32 || Frames since reset
|-
| 0x030044bc || u32 || [[Actors|Actor]] disable flags
|-
|-
| 0x030044e0 || u16 || Keypad: down buttons (active-high)
| 0x030044e0 || u16 || Keypad: down buttons (active-high)
Line 125: Line 127:
|-
|-
| 0x030044e4 || u16 || Keypad: released buttons (up on current frame, down on previous frame)
| 0x030044e4 || u16 || Keypad: released buttons (up on current frame, down on previous frame)
|-
| 0x03004520 || Array || [[Actors|Actor]] list
|-
|-
| 0x030045a0 || void* || [[Bytecode]]: Program counter
| 0x030045a0 || void* || [[Bytecode]]: Program counter

Revision as of 16:24, 19 September 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. 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. 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)
0x03004698 void* Pointer to #World struct, defaults to 0x0203da00 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)
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