Function map
Generated by tools/function_map.py from the comments in our sources and
docs/function_notes.md. Each entry: the exported C file, then where our code
ports or explains it. Regenerate after porting something new.
8154 functions identified out of 10035 exported.
sub_1FF8000
export/plan0/arm9_autoload1_itcm/sub_1FF8000_01FF8000.c
- docs/function_notes/agent_00.md:4 OS IRQ dispatcher: picks highest-priority pending bit of IE&IF (0x4000210/14), acknowledges it and jumps to its handler
sub_1FF8058
export/plan0/arm9_autoload1_itcm/sub_1FF8058_01FF8058.c
- docs/function_notes/agent_00.md:5 OS thread reschedule at IRQ exit: finds next runnable thread, saves/restores thread contexts and switches
sub_1FF81B4
export/plan0/arm9_autoload1_itcm/sub_1FF81B4_01FF81B4.c
- docs/function_notes/agent_00.md:6 NNS_G3dFuncSbc_POSSCALE: sends GX scale (cmd 27) of model position scale or inverse, advances SBC pointer
sub_1FF8220
export/plan0/arm9_autoload1_itcm/sub_1FF8220_01FF8220.c
- docs/function_notes/agent_00.md:7 NNS_G3dFuncSbc_NODEDESC: computes a joint's matrix from the NSBMD node data (or animation result) and sends it, calling callbacks
sub_1FF85D0
export/plan0/arm9_autoload1_itcm/sub_1FF85D0_01FF85D0.c
- docs/function_notes/agent_00.md:8 uncertain: SBC opcode handler that dispatches via a function table indexed by a 16-bit entry of the model block, advances 2 bytes
sub_1FF8648
export/plan0/arm9_autoload1_itcm/sub_1FF8648_01FF8648.c
- docs/function_notes/agent_00.md:9 uncertain: SBC shape draw helper: sends the shape's display list (sub_1FF9144), then calls the shape callback
sub_1FF86B4
export/plan0/arm9_autoload1_itcm/sub_1FF86B4_01FF86B4.c
- docs/function_notes/agent_00.md:10 uncertain: NNS_G3dFuncSbc_MAT: looks up the material record and dispatches to a material function table (skips if same material cached)
sub_1FF8738
export/plan0/arm9_autoload1_itcm/sub_1FF8738_01FF8738.c
- docs/function_notes/agent_00.md:11 uncertain: builds the render-state material record (diffuse/ambient/specular/emission, polygon attr, tex params) for a material index from NSBMD data
sub_1FF8B08
export/plan0/arm9_autoload1_itcm/sub_1FF8B08_01FF8B08.c
- docs/function_notes/agent_00.md:12 NNS_G3dFuncSbc_MTX: sends MTX_RESTORE (cmd 20) for a stack slot, calls matrix callback, advances 2 bytes
sub_1FF8B98
export/plan0/arm9_autoload1_itcm/sub_1FF8B98_01FF8B98.c
- docs/function_notes/agent_00.md:13 NNS_G3dFuncSbc_NODE: reads node index and visibility flag, optional visibility callback, advances 3 bytes
sub_1FF8C98
export/plan0/arm9_autoload1_itcm/sub_1FF8C98_01FF8C98.c
- docs/function_notes/agent_00.md:14 NNS_G3dFuncSbc_RET: calls the end callback and sets the "finished" flag 0x20
sub_1FF8CC4
export/plan0/arm9_autoload1_itcm/sub_1FF8CC4_01FF8CC4.c
- docs/function_notes/agent_00.md:15 uncertain: SBC opcode that calls an optional callback (a1+12) and advances 1 byte (NOP/step callback)
sub_1FF8CF0
export/plan0/arm9_autoload1_itcm/sub_1FF8CF0_01FF8CF0.c
- docs/function_notes/agent_00.md:16 uncertain: NNS_G3dDraw entry: clears render-state flags then runs the SBC interpreter (sub_1FF8E64), guarding against reentry
sub_1FF8DEC
export/plan0/arm9_autoload1_itcm/sub_1FF8DEC_01FF8DEC.c
- docs/function_notes/agent_00.md:17 uncertain: walks a linked list of records and sets bits in a bitmask for entries flagged 0x100
sub_1FF8E64
export/plan0/arm9_autoload1_itcm/sub_1FF8E64_01FF8E64.c
- docs/function_notes/agent_00.md:18 NNS_G3dRS init: clears 392-byte render-state, caches model-block pointers (nodes/mats/shapes), selects send functions by model type, runs SBC
sub_1FF8FF8
export/plan0/arm9_autoload1_itcm/sub_1FF8FF8_01FF8FF8.c
- docs/function_notes/agent_00.md:19 SBC interpreter loop: dispatches opcode (low 5 bits) through table until the finished flag 0x20 is set
sub_1FF9048
export/plan0/arm9_autoload1_itcm/sub_1FF9048_01FF9048.c
- docs/function_notes.md:31 send geometry commands to the GX FIFO (20 restore, 25 mult 4x3, 26 mult 3x3, 27 scale, 28 translate)
sub_1FF9144
export/plan0/arm9_autoload1_itcm/sub_1FF9144_01FF9144.c
- docs/function_notes/agent_00.md:20 sends a display list to the GX FIFO (direct for small lists, DMA via sub_214CCD4/214CED0 for >=256 bytes)
sub_1FF9210
export/plan0/arm9_autoload1_itcm/sub_1FF9210_01FF9210.c
- docs/function_notes/agent_00.md:21 DMA-complete callback: clears the busy flag
sub_1FF921C
export/plan0/arm9_autoload1_itcm/sub_1FF921C_01FF921C.c
- docs/function_notes/agent_00.md:22 spin-waits until the display-list DMA busy flag (0x021731E8) clears
sub_1FF9234
export/plan0/arm9_autoload1_itcm/sub_1FF9234_01FF9234.c
- docs/function_notes/agent_00.md:23 waits for outstanding display-list DMA and releases its lock/semaphore
sub_1FF92B4
export/plan0/arm9_autoload1_itcm/sub_1FF92B4_01FF92B4.c
- docs/function_notes/agent_00.md:24 waits for display-list DMA then clears the saved pointer 0x021731E4
sub_1FF92E0
export/plan0/arm9_autoload1_itcm/sub_1FF92E0_01FF92E0.c
- docs/function_notes/agent_00.md:25 stores a pointer into the global slot 0x021731E4 (zeroing the pointee if slot was empty)
sub_1FF9320
export/plan0/arm9_autoload1_itcm/sub_1FF9320_01FF9320.c
- docs/function_notes/agent_00.md:26 NNS texture SRT send: builds a 4x4 texture matrix (scale/rot/trans by flag) and sends it with MTX_MODE texture commands
sub_1FF946C
export/plan0/arm9_autoload1_itcm/sub_1FF946C_01FF946C.c
- docs/function_notes/agent_00.md:27 texture SRT matrix, identity case
sub_1FF9490
export/plan0/arm9_autoload1_itcm/sub_1FF9490_01FF9490.c
- vm_model/src/nitro.rs:727 cases sub_1FF9490 / sub_1FF96CC: Maya's T origin
- docs/function_notes.md:220 SDK scale-only texture matrix: S/T diagonal from scale, S offset zero, T offset height*(1-scaleT) in texel space; missing T-origin compensation caused duplicated half-wheel textures in native traffic
- docs/function_notes/agent_00.md:28 texture SRT matrix, scale-only case
sub_1FF94D4
export/plan0/arm9_autoload1_itcm/sub_1FF94D4_01FF94D4.c
- docs/function_notes/agent_00.md:29 texture SRT matrix, rotation case (sin/cos via sub_2147E28/2147D88)
sub_1FF9598
export/plan0/arm9_autoload1_itcm/sub_1FF9598_01FF9598.c
- docs/function_notes/agent_00.md:30 texture SRT matrix, scale + rotation case
sub_1FF9684
export/plan0/arm9_autoload1_itcm/sub_1FF9684_01FF9684.c
- docs/function_notes/agent_00.md:31 texture SRT matrix, translation-only case
sub_1FF96CC
export/plan0/arm9_autoload1_itcm/sub_1FF96CC_01FF96CC.c
- vm_model/src/nitro.rs:727 cases sub_1FF9490 / sub_1FF96CC: Maya's T origin
- docs/function_notes.md:221 SDK scale+translation texture matrix: S offset -widthscaleStranslateS, T offset height(1-scaleT+scaleTtranslateT); resource translations are normalized Maya coordinates, not texels
- docs/function_notes/agent_00.md:32 texture SRT matrix, scale + translation case
sub_1FF974C
export/plan0/arm9_autoload1_itcm/sub_1FF974C_01FF974C.c
- docs/function_notes/agent_00.md:33 texture SRT matrix, rotation + translation case
sub_1FF9828
export/plan0/arm9_autoload1_itcm/sub_1FF9828_01FF9828.c
- docs/function_notes/agent_00.md:34 texture SRT matrix, scale + rotation + translation case
sub_1FF9940
export/plan0/arm9_autoload1_itcm/sub_1FF9940_01FF9940.c
- docs/function_notes/agent_00.md:35 uncertain: fills a joint's cached translation/pivot from the NSBMD node record and tracks which cached pivot matrices are valid
sub_1FF9A94
export/plan0/arm9_autoload1_itcm/sub_1FF9A94_01FF9A94.c
- docs/function_notes/agent_00.md:36 sends a joint's transform to the GX FIFO: translate (28), scale (27), mult 4x3 (25) or 3x3 (26) per flags
sub_1FF9B70
export/plan0/arm9_autoload1_itcm/sub_1FF9B70_01FF9B70.c
- docs/function_notes.md:358 runs continuous/smoke/red/blue wheel callbacks before refreshing previous SPL velocity at kart+944; refresh copies velocity+164, subtracts vertical speed+608 when grounded and not resting (bit0x1000 clear), then >>4. Native bridge preserves previous-tick attachment input; source-derived call order
- docs/function_notes/agent_00.md:37 kart wheel particle update: starts/updates drift wheel effects (or disables them), copies kart +164..172 to +944..952 as SPL units (>>4)
sub_1FF9C40
export/plan0/arm9_autoload1_itcm/sub_1FF9C40_01FF9C40.c
- vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) |
sub_1FF9C9C
export/plan0/arm9_autoload1_itcm/sub_1FF9C9C_01FF9C9C.c
- docs/function_notes/agent_00.md:40 kart setter: stores bit 0x1000000 of a flags argument into kart +1216
sub_1FF9CB0
export/plan0/arm9_autoload1_itcm/sub_1FF9CB0_01FF9CB0.c
- docs/function_notes/agent_00.md:41 kart end-of-effect cleanup: plays kart sound 0 if not flagged, clears kart +68 bit 0x1000, calls cleanup if kart +520 object active, zeroes it
sub_1FF9D18
export/plan0/arm9_autoload1_itcm/sub_1FF9D18_01FF9D18.c
- vm_model/src/kart/mod.rs:15 | [
MiniTurbo::tick] |sub_1FF9D18(head) | mini-turbo countdown | - vm_model/src/kart/mod.rs:542
sub_1FF9D18head: counts down; the trigger tick itself counts. - vm_model/src/kart/speed.rs:178
sub_1FF9D18: the shove counts down with the mini-turbo.
sub_1FF9E5C
export/plan0/arm9_autoload1_itcm/sub_1FF9E5C_01FF9E5C.c
- vm_model/src/kart/movement.rs:8 | [
collide] |sub_1FFCB58(+sub_1FFA4B4contact,sub_1FF9E5Csurface,sub_1FFA0C4,sub_1FF9F60orientation) | - vm_model/src/kart/movement.rs:1183 a boost ramp sets the ramp state; other ground clears it (sub_1FF9E5C)
- vm_model/src/kart/movement.rs:1204
sub_1FF9E5C: grip switches at once; the speed multiplier drops gradually onto slower - docs/function_notes.md:1678 surface dispatch stores returned surface kind at kart+988; clears boost-ramp bit 0x40000000 only while grounded and returned kind is not 11. This is a boost-ramp lifetime, not a generic inverted-track flag.
sub_1FF9F60
export/plan0/arm9_autoload1_itcm/sub_1FF9F60_01FF9F60.c
- vm_model/src/kart/movement.rs:8 | [
collide] |sub_1FFCB58(+sub_1FFA4B4contact,sub_1FF9E5Csurface,sub_1FFA0C4,sub_1FF9F60orientation) | - vm_model/src/kart/movement.rs:30 Hop body tilt (
sub_1FF9F60:0x01FFA0B4,0x01FFA0B8,0x01FFA0BC). - vm_model/src/kart/movement.rs:158
sub_1FF9F60(end): orientation = ground tilt * yaw, tilted nose-up by the hop bounce, - vm_model/src/kart/movement.rs:887 sub_1FF9F60: ground alignment, then the orientation
- vm_model/src/kart/movement.rs:1055 Tilt easing rate in the air (literal in
sub_1FF9F60).
sub_1FFA0C4
export/plan0/arm9_autoload1_itcm/sub_1FFA0C4_01FFA0C4.c
- vm_model/src/kart/movement.rs:8 | [
collide] |sub_1FFCB58(+sub_1FFA4B4contact,sub_1FF9E5Csurface,sub_1FFA0C4,sub_1FF9F60orientation) |
sub_1FFA11C
export/plan0/arm9_autoload1_itcm/sub_1FFA11C_01FFA11C.c
- vm_model/src/kart/movement.rs:1058 (
sub_1FFA11C: 492, 0.9 = 3686, +20/tick). - vm_model/src/kart/movement.rs:1119
sub_1FFA11C: how fast the kart tilts toward the ground this tick.
sub_1FFA1F8
export/plan0/arm9_autoload1_itcm/sub_1FFA1F8_01FFA1F8.c
- docs/function_notes/agent_00.md:42 kart "fall into water/out of bounds" check: when kart +132 < 0 and not already flagged, sets +72 bit 0x800 and a respawn/fall state (uncertain), else clears kart flag masks
sub_1FFA350
export/plan0/arm9_autoload1_itcm/sub_1FFA350_01FFA350.c
- docs/function_notes/agent_00.md:43 clears given bits in kart +68, zeroes the object at kart +520, sets +988 = -1 and tail-calls sub_20839D8
sub_1FFA380
export/plan0/arm9_autoload1_itcm/sub_1FFA380_01FFA380.c
- docs/function_notes/agent_00.md:44 wall-contact predicate: true unless (horizontal normal length^2 > 1.0 or normal Y below a kart-scaled threshold)
sub_1FFA41C
export/plan0/arm9_autoload1_itcm/sub_1FFA41C_01FFA41C.c
- docs/function_notes/agent_00.md:45 wall-contact predicate: true unless wall normal is mostly horizontal or kart +68 bit 0x4000000 is set
sub_1FFA478
export/plan0/arm9_autoload1_itcm/sub_1FFA478_01FFA478.c
- vm_model/src/kart/movement.rs:1039 The ledge knock (default callback
sub_1FFA478): touching a type-16 wall with the lowest
sub_1FFA4B4
export/plan0/arm9_autoload1_itcm/sub_1FFA4B4_01FFA4B4.c
- vm_model/src/kart/damage.rs:14 | [
KartDamage::end_tick] |sub_1FFA4B4(tail, spin),sub_20641F0(the flipped body) | - vm_model/src/kart/damage.rs:418
sub_1FFA4B4(tail): one tick of spin; it stops pastspin_turnsfull turns. - vm_model/src/kart/movement.rs:8 | [
collide] |sub_1FFCB58(+sub_1FFA4B4contact,sub_1FF9E5Csurface,sub_1FFA0C4,sub_1FF9F60orientation) | - vm_model/src/kart/movement.rs:793 Ground contact after moving (
sub_1FFCB58/sub_1FFA4B4), wall reactions, then the - vm_model/src/kart/movement.rs:853 landing ends a jump-pad flight (sub_1FFA4B4), before the floor's own effect
- vm_model/src/kart/water.rs:11 The kart step (
sub_206FE08, run by the contact stepsub_1FFA4B4when the water object is - game/src/respawn.rs:148 sub_1FFA4B4 passes the movement query's accepted flags in r1 at
- docs/function_notes.md:126 movement terrain contact query; passes the same accepted swept sphere flags to sub_206FF50 at 0x01FFA868..0x01FFA894; suppresses type 10 while wall-contact flag is set unless type 11 also hit
sub_1FFAD14
export/plan0/arm9_autoload1_itcm/sub_1FFAD14_01FFAD14.c
- vm_model/src/kart/movement.rs:1131
sub_1FFAD14: the tilt target is the rotation from straight up to the ground normal,
sub_1FFAE14
export/plan0/arm9_autoload1_itcm/sub_1FFAE14_01FFAE14.c
- vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) | - vm_model/src/kart/movement.rs:746 sub_1FFAE14: air scale, |velocity|, capped
- vm_model/src/kart/speed.rs:38
|velocity|is clamped to this (sub_1FFAE14).
sub_1FFAF18
export/plan0/arm9_autoload1_itcm/sub_1FFAF18_01FFAF18.c
- vm_model/src/kart/mod.rs:11 | [
speed] |sub_1FFBE70…sub_1FFAF18| limit, acceleration, boost, friction, cap | - vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) | - vm_model/src/kart/speed.rs:8 | [
friction], [cap] |sub_1FFB9E0,sub_1FFAF18| coasting friction; cap at the limit, stop when slow (run from movement) | - vm_model/src/kart/speed.rs:268 Braking while already reversing caps the reverse speed at this (
sub_1FFAF18). - vm_model/src/kart/speed.rs:271
sub_1FFAF18: cap|forward_speed|at the limit (scaled by a wall hit's cap factor and the
sub_1FFB0CC
export/plan0/arm9_autoload1_itcm/sub_1FFB0CC_01FFB0CC.c
- docs/function_notes/agent_00.md:46 kart tick of an 8-entry cycling table: advances kart +1276 index (mod 8) and loads three values into kart +1264/1268/1272 from tables at 0x02154B64/84/A4
sub_1FFB130
export/plan0/arm9_autoload1_itcm/sub_1FFB130_01FFB130.c
- vm_model/src/kart/mod.rs:16 | [
movement] |sub_1FFB130,sub_1FFCB58| facing/travel direction, velocity, position, ground contact, orientation | - vm_model/src/kart/mod.rs:607 sub_1FFB130 (top): a flattened kart is held still at first
- vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) | - vm_model/src/kart/movement.rs:22 After this many airborne ticks the fall speed is capped at [
MAX_FALL_SPEED] (sub_1FFB130). - vm_model/src/kart/movement.rs:677
sub_1FFB130for a kart on ordinary ground: friction, gravity, facing, speed cap, lean - vm_model/src/kart/movement.rs:780 Per-tick bounce decay on the ground / in the air, and the stop threshold (
sub_1FFB130: - vm_model/src/kart/movement.rs:1156 Grounded facing from
sub_1FFB130: the ramp matrix precedes the drift matrix - vm_model/src/kart/slipstream.rs:3 countdown at the start of
sub_1FFB130). - vm_model/src/kart/slipstream.rs:23 Slipstream boost: speed-limit factor and length (
*0x02069130, literal insub_1FFB130). - docs/function_notes.md:59 kart update (per tick, ITCM): states, movement, object check, items
- docs/function_notes.md:286 (kart per-tick, ITCM) while +76 bit 0x40: sub_208181C follows the star sparkle particles, holds driver animation 2, counts the star timer and ends the star when it exceeds 450 (dword_1FFB908), i.e. 451 ticks: clears bit 0x40, sub_207B1A8, +668 = 0, sub_20817B8, sub_2068A64(kart,0,1), stops the jingle (sub_2106DC8, local player)
- docs/function_notes.md:1725 grounded facing is heading transformed by ramp-matrix times drift-matrix (sub_2146DFC), then sub_2146D78; fixed ramp sin582/cos4054 around body right comes from table entry29, no world-Y sign choice. Original2000-frame capture completed14731 facing calls,2004 ramp calls/854 inverted ramps. Rust ground_facing preserves matrix concatenation and truncation order; all14731 outputs replay exactly; old world-Y branch differs1129 times.
sub_1FFB930
export/plan0/arm9_autoload1_itcm/sub_1FFB930_01FFB930.c
- vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) | - vm_model/src/kart/movement.rs:25 Speed above which lean costs speed, and the cost factor (
sub_1FFB930,*0x01FFB9C8).
sub_1FFB9CC
export/plan0/arm9_autoload1_itcm/sub_1FFB9CC_01FFB9CC.c
- vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) |
sub_1FFB9E0
export/plan0/arm9_autoload1_itcm/sub_1FFB9E0_01FFB9E0.c
- vm_model/src/kart/movement.rs:7 | [
integrate] |sub_1FFB130(+sub_1FFB9E0,sub_1FFB9CC,sub_1FFAF18,sub_1FFB930,sub_1FF9C40,sub_1FFAE14) | - vm_model/src/kart/speed.rs:8 | [
friction], [cap] |sub_1FFB9E0,sub_1FFAF18| coasting friction; cap at the limit, stop when slow (run from movement) | - vm_model/src/kart/speed.rs:261
sub_1FFB9E0: coasting friction, and friction whenever the kart is damaged.
sub_1FFBA68
export/plan0/arm9_autoload1_itcm/sub_1FFBA68_01FFBA68.c
- vm_model/src/kart/mod.rs:637
sub_1FFBA68(tail): a wall's yaw kick turns the kart away, decaying ×0.9 per tick. - vm_model/src/kart/speed.rs:7 | [
accelerate] |sub_1FFBA68,sub_206CEB4| per-tick acceleration, boost countdown, coasting | - vm_model/src/kart/speed.rs:26 Acceleration in a jump-pad flight (
sub_1FFBA68). - vm_model/src/kart/speed.rs:34 Extra acceleration per unit of reverse speed when accelerating out of reverse (
sub_1FFBA68). - vm_model/src/kart/speed.rs:40 Speed ratio at which the acceleration curve starts to fall off (literal in
sub_1FFBA68). - vm_model/src/kart/speed.rs:201
sub_1FFBA68(with the boost countdown ofsub_206CEB4): adds this tick's acceleration to
sub_1FFBD9C
export/plan0/arm9_autoload1_itcm/sub_1FFBD9C_01FFBD9C.c
- vm_model/src/kart/movement.rs:6 | [
KartPose::update_heading] |sub_1FFBD9C(heading part) | - vm_model/src/kart/movement.rs:146
sub_1FFBD9C: on the ground the heading is the basis right axis crossed with the ground - vm_model/src/kart/speed.rs:6 | [
speed_ratio] |sub_1FFBD9C||velocity| / limit, input to the acceleration curve | - vm_model/src/kart/speed.rs:190
sub_1FFBD9C:|velocity| / limit, clamped to 1.0. When it clamps,|velocity|is pulled
sub_1FFBE04
export/plan0/arm9_autoload1_itcm/sub_1FFBE04_01FFBE04.c
- vm_model/src/kart/speed.rs:5 | [
SpeedLimit::update] |sub_1FFBE70,sub_1FFBE04| target limit from stats/terrain/boost; eased limit | - vm_model/src/kart/speed.rs:99 (
sub_207DE84, betweensub_1FFBE70andsub_1FFBE04).
sub_1FFBE70
export/plan0/arm9_autoload1_itcm/sub_1FFBE70_01FFBE70.c
- vm_model/src/kart/mod.rs:11 | [
speed] |sub_1FFBE70…sub_1FFAF18| limit, acceleration, boost, friction, cap | - vm_model/src/kart/speed.rs:5 | [
SpeedLimit::update] |sub_1FFBE70,sub_1FFBE04| target limit from stats/terrain/boost; eased limit | - vm_model/src/kart/speed.rs:99 (
sub_207DE84, betweensub_1FFBE70andsub_1FFBE04). - game/src/items.rs:269
sub_1FFBE70; measured on a CPU's star: 451 frames).
sub_1FFBFE4
export/plan0/arm9_autoload1_itcm/sub_1FFBFE4_01FFBFE4.c
- docs/function_notes/agent_00.md:47 kart VEC_MultAdd wrapper: kart +348 + kart +152 * (kart +464 + 1024)
sub_1FFC008
export/plan0/arm9_autoload1_itcm/sub_1FFC008_01FFC008.c
- vm_model/src/kart/movement.rs:197 Sphere centre after moving: position + body up · (radius + 1024) (
sub_1FFC008).
sub_1FFC064
export/plan0/arm9_autoload1_itcm/sub_1FFC064_01FFC064.c
- vm_model/src/kart/movement.rs:770 sub_1FFC064
sub_1FFC090
export/plan0/arm9_autoload1_itcm/sub_1FFC090_01FFC090.c
- vm_model/src/kart/mod.rs:12 | [
steer] |sub_1FFC27C,sub_1FFC158,sub_1FFC090,sub_206C494| steering, turn rate, yaw, pivot | - vm_model/src/kart/steer.rs:7 | [
apply_turn] |sub_1FFC090(+sub_1FFC500lean decay) | - vm_model/src/kart/steer.rs:165
sub_1FFC090: without steering, a drift turns by itself and the lean decays; the turn rate
sub_1FFC158
export/plan0/arm9_autoload1_itcm/sub_1FFC158_01FFC158.c
- vm_model/src/kart/mod.rs:12 | [
steer] |sub_1FFC27C,sub_1FFC158,sub_1FFC090,sub_206C494| steering, turn rate, yaw, pivot | - vm_model/src/kart/steer.rs:6 | [
steer] |sub_1FFC27C+sub_1FFC158| - vm_model/src/kart/steer.rs:17 Target turn rate when steering in the air outside a hop (literal in
sub_1FFC158). - vm_model/src/kart/steer.rs:140 sub_1FFC158
sub_1FFC27C
export/plan0/arm9_autoload1_itcm/sub_1FFC27C_01FFC27C.c
- vm_model/src/kart/mod.rs:12 | [
steer] |sub_1FFC27C,sub_1FFC158,sub_1FFC090,sub_206C494| steering, turn rate, yaw, pivot | - vm_model/src/kart/mod.rs:187 Held steering; left wins if both are held (
sub_1FFC27Ctests Left first, and the - vm_model/src/kart/steer.rs:6 | [
steer] |sub_1FFC27C+sub_1FFC158| - vm_model/src/kart/steer.rs:15 Yaw per tick during a hop, toward the drift side (literal in
sub_1FFC27C). - vm_model/src/kart/steer.rs:21 Below this |forward speed| the turn rate is reduced (literal in
sub_1FFC27C). - vm_model/src/kart/steer.rs:27 Air pitch change per tick (Up / Down) and its limit (
sub_1FFC27C,0x01FFC4F8). - vm_model/src/kart/steer.rs:87
sub_1FFC27C: sets this tick's target turn rate from the stick. Returns whether steering
sub_1FFC500
export/plan0/arm9_autoload1_itcm/sub_1FFC500_01FFC500.c
- vm_model/src/kart/steer.rs:7 | [
apply_turn] |sub_1FFC090(+sub_1FFC500lean decay) | - vm_model/src/kart/steer.rs:23 Lean: per-tick change while steering (
0x01FFC278), decay factor and dead zone (sub_1FFC500).
sub_1FFC558
export/plan0/arm9_autoload1_itcm/sub_1FFC558_01FFC558.c
- docs/function_notes/agent_00.md:48 in a given game mode (mode 4) and flag, writes constant 0xFF6 into the per-racer 92-byte record at 0x0217564A
sub_1FFC5A0
export/plan0/arm9_autoload1_itcm/sub_1FFC5A0_01FFC5A0.c
- vm_model/src/kart/mod.rs:210 Pedal intents for one tick (
sub_1FFC5A0, kart +0x48 bits 0x2 / 0x4 / 0x80).
sub_1FFC67C
export/plan0/arm9_autoload1_itcm/sub_1FFC67C_01FFC67C.c
- vm_model/src/battle.rs:64 The kart cannot act (
sub_1FFC67C, or controller flags & 3): both windows are cut. - vm_model/src/kart/damage.rs:11 | [
KartDamage::begin_control] |sub_1FFC6C0(head),sub_1FFC67C| - vm_model/src/kart/damage.rs:153 Buttons are ignored from the next input latch on (
sub_1FFC67C: the controller mask
sub_1FFC6C0
export/plan0/arm9_autoload1_itcm/sub_1FFC6C0_01FFC6C0.c
- vm_model/src/kart/damage.rs:11 | [
KartDamage::begin_control] |sub_1FFC6C0(head),sub_1FFC67C| - vm_model/src/kart/damage.rs:282
sub_1FFC6C0(head): the post-spin lock counts down, then decides whether the next - vm_model/src/kart/mod.rs:611 sub_1FFC6C0: a damaged kart is not driven at all
- game/src/effects.rs:345 sub_1FFC6C0 calls sub_206C494 only for undamaged, non-drifting karts.
- docs/function_notes.md:363 kart control dispatcher invokes sub_206C494 only when damage state+384 is zero and drift bit0x08 is clear, then steering/sub_206C5E4/acceleration. Native pivot-smoke gate now runs after input but before control and uses the same undamaged/non-drift guards
sub_1FFC8CC
export/plan0/arm9_autoload1_itcm/sub_1FFC8CC_01FFC8CC.c
- docs/function_notes/agent_00.md:49 kart countdown at +978: decrements and, at zero, calls sub_210B12C (sound/effect) with kart +972/+976
sub_1FFC920
export/plan0/arm9_autoload1_itcm/sub_1FFC920_01FFC920.c
- docs/function_notes/agent_00.md:50 thunk to sub_2024A88
sub_1FFC92C
export/plan0/arm9_autoload1_itcm/sub_1FFC92C_01FFC92C.c
- docs/function_notes/agent_00.md:51 kart rank-change check: reads current place (sub_203C8DC), if it changed notifies HUD (human players) and returns 1 when we dropped a place behind a still-racing kart
sub_1FFC9E8
export/plan0/arm9_autoload1_itcm/sub_1FFC9E8_01FFC9E8.c
- docs/function_notes/agent_00.md:52 plays a racer-indexed sound/voice (table at 0x0216CA38) via sub_210DDF4, different channel for human players
sub_1FFCA50
export/plan0/arm9_autoload1_itcm/sub_1FFCA50_01FFCA50.c
- vm_model/src/kart/damage.rs:559
sub_1FFCA50: the collision radius for this tick. - vm_model/src/kart/steer.rs:53 Start of tick:
sub_1FFCA50clears the target, the prologue mask clears the pivot flag.
sub_1FFCAC0
export/plan0/arm9_autoload1_itcm/sub_1FFCAC0_01FFCAC0.c
- docs/function_notes/agent_00.md:53 kart per-tick shift of previous-state copies (vectors +128->+140, +472->+484, +728/+740->+740/+752) and clear of per-tick flags, then calls kart handler at +544
sub_1FFCB58
export/plan0/arm9_autoload1_itcm/sub_1FFCB58_01FFCB58.c
- vm_model/src/kart/mod.rs:16 | [
movement] |sub_1FFB130,sub_1FFCB58| facing/travel direction, velocity, position, ground contact, orientation | - vm_model/src/kart/movement.rs:8 | [
collide] |sub_1FFCB58(+sub_1FFA4B4contact,sub_1FF9E5Csurface,sub_1FFA0C4,sub_1FF9F60orientation) | - vm_model/src/kart/movement.rs:793 Ground contact after moving (
sub_1FFCB58/sub_1FFA4B4), wall reactions, then the
sub_1FFCC50
export/plan0/arm9_autoload1_itcm/sub_1FFCC50_01FFCC50.c
- vm_model/src/kart/mod.rs:10 | [
step] |sub_1FFCC50| per-kart tick, in the original's order | - vm_model/src/kart/mod.rs:584 (
sub_1FFCC50): speed limit -> speed ratio and heading -> pedals -> pivot -> steering ->
sub_1FFCCD0
export/plan0/arm9_autoload1_itcm/sub_1FFCCD0_01FFCCD0.c
- docs/function_notes.md:227 quaternion-to-3x3 basis with truncated products shifted by 11; preserves unnormalized easing contraction; traffic renderer now applies this affine basis to body/axle globals and collider axes
- docs/function_notes/agent_00.md:54 quaternion (x,y,z,w) to 3x3 rotation matrix (fx12)
sub_1FFCD84
export/plan0/arm9_autoload1_itcm/sub_1FFCD84_01FFCD84.c
- vm_model/src/kart/fxmath.rs:326 Rotation matrix of a quaternion (
sub_1FFCD84).
sub_1FFCE48
export/plan0/arm9_autoload1_itcm/sub_1FFCE48_01FFCE48.c
- vm_model/src/kart/fxmath.rs:284 Per-component blend
self + rate·(o − self)(sub_1FFCE48; not renormalized).
sub_1FFCEBC
export/plan0/arm9_autoload1_itcm/sub_1FFCEBC_01FFCEBC.c
- vm_model/src/kart/fxmath.rs:304 Quaternion product (
sub_1FFCEBC).
sub_1FFCF7C
export/plan0/arm9_autoload1_itcm/sub_1FFCF7C_01FFCF7C.c
- vm_model/src/kart/fxmath.rs:293
sub_1FFCF7C.
sub_1FFD0E8
export/plan0/arm9_autoload1_itcm/sub_1FFD0E8_01FFD0E8.c
- vm_model/src/kart/fxmath.rs:272 Shortest rotation taking unit vector
ato unit vectorb(sub_1FFD0E8);None(the
sub_1FFD190
export/plan0/arm9_autoload1_itcm/sub_1FFD190_01FFD190.c
- vm_model/src/kart/fxmath.rs:264 Rotation by
angleabout a unitaxis(sub_1FFD190).
sub_1FFD224
export/plan0/arm9_autoload1_itcm/sub_1FFD224_01FFD224.c
- vm_model/src/cpu.rs:14 * Steering (
sub_1FFD224): the heading error is the angle (degrees, fx12) between the kart's - vm_model/src/cpu.rs:427 Ordinary direct steering in
sub_1FFD224; the caller handles recovery, - vm_model/src/cpu.rs:731 sub_1FFD224. Keep the cached error, but steer toward the new target
- vm_model/src/cpu_recovery.rs:7
sub_1FFD224state1 branch: steer back across the route by 200 angle units. - docs/function_notes.md:433 CPU recovery-state1 correction projects segment direction onto kart-up plane (rounded dot/truncated scale), requires body-forward dot above-819, then crosses world-Y-zeroed kart-minus-node with projected direction and turns200 angle units by kart-up dot sign. All863 labeled state1 steering probes match; current recording exercises correction branch only, fallback is source-derived. Native driver now applies this ahead of normal heading steering
- docs/function_notes.md:1722 ordinary direct-steering kernel now replay-exact on14000 original Rainbow calls (231 node transitions,875 inverted). Cached heading error controls turn magnitude; updated target controls sign. Using old target yields wrong sign65 times. Recovery/hop/damage/Bullet Bill/Blooper branches are outside this ordinary recording.
sub_1FFD648
export/plan0/arm9_autoload1_itcm/sub_1FFD648_01FFD648.c
- docs/function_notes/agent_00.md:55 object-vs-camera cull test: horizontal distance^2 against two radii and two plane checks, returns flag bits
sub_1FFD778
export/plan0/arm9_autoload1_itcm/sub_1FFD778_01FFD778.c
- docs/function_notes/agent_00.md:56 object-vs-camera cull test with five plane checks (wider variant of sub_1FFD648), returns flag bits
sub_1FFD900
export/plan0/arm9_autoload1_itcm/sub_1FFD900_01FFD900.c
- vm_model/src/kart/traffic.rs:4 sweep-and-prune structure (
sub_1FFDB70updates it once per tick,sub_1FFD900queries it): - vm_model/src/kart/traffic.rs:96
sub_1FFD900: entries overlapping entryme(x on the quantized endpoints, z exactly) - docs/function_notes.md:532 broadphase query: entries overlapping a racer's box whose flags match the mask (0x1000 = moving terrain, 0x2000/0x4000 objects)
sub_1FFDB70
export/plan0/arm9_autoload1_itcm/sub_1FFDB70_01FFDB70.c
- vm_model/src/kart_plugin.rs:72 The karts' boxes in the sweep-and-prune broadphase (
sub_1FFDB70), indexed by [KartId]. - vm_model/src/kart/traffic.rs:4 sweep-and-prune structure (
sub_1FFDB70updates it once per tick,sub_1FFD900queries it): - vm_model/src/kart/traffic.rs:75
sub_1FFDB70: refresh bounds, then insertion-sort both endpoint lists.
sub_1FFDEE4
export/plan0/arm9_autoload1_itcm/sub_1FFDEE4_01FFDEE4.c
- vm_model/src/shine.rs:43 Result of the course sweep of
sub_1FFDEE4: push-out, surface normal and surface flags. - vm_model/src/shine.rs:65
sub_1FFDEE4with the shine's sphere (probe point, radius, mask 8, -2). - vm_model/src/kart/kcl.rs:5 course. [
Kcl::sphere_test] is a port of the game's sphere query (sub_1FFDEE4, terrain part; - vm_model/src/kart/kcl.rs:20 in
sub_1FFDEE4). - vm_model/src/kart/kcl.rs:507 combine (tail of sub_1FFDEE4)
- vm_model/src/kart/movement.rs:10 Track collision itself (the game's KCL sphere test,
sub_1FFDEE4) is behind [Ground]. - vm_model/src/kart/movement.rs:378 Moving terrain (
sub_1FFDEE4queries objects flagged 0x1000 in the broadphase: lava blocks, - game/src/objects.rs:72 Moving terrain (
sub_1FFDEE4/sub_20E1D10): the lava blocks 0xCA (box,sub_20DFD64: - docs/function_notes.md:507 course KCL swept-sphere query; a6=-2 skips moving-object collision, a6=-1 queries nearby objects otherwise uses cached object index. Bowser terrain hit/no-hit, push and flags replay-exact in 96 controlled probes near 16 native fall positions (2026-10-10).
- docs/function_notes.md:533 course KCL swept-sphere query; also queries moving terrain (broadphase mask 0x1000) and tests each with sub_20E1D10
- docs/function_notes.md:1679 terrain sphere query; all 89 captured native Rainbow Road swept queries replay exactly in the original for hit/push/flags (previous center, facing, flag 1, terrain-only a6=-2). Fixture rainbow_swept.csv covers accepted fall contacts; not full trajectory parity.
sub_1FFEEF8
export/plan0/arm9_autoload1_itcm/sub_1FFEEF8_01FFEEF8.c
- docs/function_notes/agent_00.md:59 fragment: unconditional jump into the middle of the KCL candidate-triangle loop (0x01FFEF04)
sub_1FFEF08
export/plan0/arm9_autoload1_itcm/sub_1FFEF08_01FFEF08.c
- docs/function_notes/agent_00.md:60 fragment of the KCL sphere-vs-triangle loop: tests a triangle with sub_20E1D10, appends hits (max 16) to the lists at 0x027E0084/0x027E0064
sub_1FFF3E8
export/plan0/arm9_autoload1_itcm/sub_1FFF3E8_01FFF3E8.c
- docs/function_notes/agent_00.md:61 fragment: stores a computed x/z pair into an output vector, jumps back into the surrounding loop
sub_1FFF434
export/plan0/arm9_autoload1_itcm/sub_1FFF434_01FFF434.c
- vm_model/src/kart/kcl.rs:10 of
r² − d²; corners find the closest point on the edge line,sub_1FFF434); - vm_model/src/kart/kcl.rs:187
sub_1FFF434: closest point on the line where two edge planes meet. Returns the offset vector
sub_1FFF524
export/plan0/arm9_autoload1_itcm/sub_1FFF524_01FFF524.c
- docs/function_notes/agent_00.md:62 uncertain: race-object per-tick state flags (+492 word): re-evaluates "touching" via sub_20F0154 and sets flag words from constants 0x021595B0/B4
sub_1FFF694
export/plan0/arm9_autoload1_itcm/sub_1FFF694_01FFF694.c
- docs/function_notes/agent_00.md:63 uncertain: race-object update for an attached owner kart (+508): derives flags from the owner's 92-byte racer record, checks owner state (sub_2068EAC, sub_1FFC67C), then calls sub_20EDDB4/sub_1FFFD0A
sub_1FFF800
export/plan0/arm9_autoload1_itcm/sub_1FFF800_01FFF800.c
- docs/function_notes/agent_00.md:64 fragment: when flags (0x242) say so and mode != 19, runs sub_20EE2E4 then sub_20F4884 on the object
sub_1FFF860
export/plan0/arm9_autoload1_itcm/sub_1FFF860_01FFF860.c
- docs/function_notes/agent_00.md:65 fragment: object lookup in the 28-byte master object array at 0x0217BC28 then sub_20F8498/sub_20F47E4 update
sub_1FFF95C
export/plan0/arm9_autoload1_itcm/sub_1FFF95C_01FFF95C.c
- vm_model/src/kart/mushroom.rs:131 Size growth (generic item tick,
sub_1FFF95C): fast to the first size, then by steps to - docs/function_notes.md:253 generic item tick (actor in r1), clears transient flags, increments airborne counters, runs size growth and callback then collision/postupdate bookkeeping, saves previous position and increments age; export is truncated at ITCM jumpout, ARM continuation required; mushroom replay matches 538 calls
- docs/function_notes/agent_00.md:66 uncertain: object flag cleanup: clears low 12 bits of object +116, increments counters +276/+278 (cap 6), clears +252 if flag 0x8000 not set
sub_1FFFA34
export/plan0/arm9_autoload1_itcm/sub_1FFFA34_01FFFA34.c
- docs/function_notes/agent_00.md:67 fragment: object check using sub_20FA0B8/sub_20F9DC8/sub_20FA030, jumps into the common tail
sub_1FFFBA4
export/plan0/arm9_autoload1_itcm/sub_1FFFBA4_01FFFBA4.c
- docs/function_notes/agent_00.md:68 fragment: calls sub_208AB98 (particle/sound start with arg 20480) for the object's +124 slot
sub_1FFFCBA
export/plan0/arm9_autoload1_itcm/sub_1FFFCBA_01FFFCBA.c
- docs/function_notes/agent_00.md:69 fragment: unconditional jump to 0x01FFF7F8
sub_1FFFD0A
export/plan0/arm9_autoload1_itcm/sub_1FFFD0A_01FFFD0A.c
- docs/function_notes/agent_00.md:70 uncertain: large race-object update body (split by IDA): per-tick timers +276/+278/+280, sounds, collision-region triggers (sub_20F944C/sub_20F95D4), calls object callback +288
sub_1FFFE2C
export/plan0/arm9_autoload1_itcm/sub_1FFFE2C_01FFFE2C.c
- docs/function_notes/agent_00.md:71 starts DMA channel a1 (0x040000B0 + 12*a1): writes source, dest, control; channel 0 gets control 0x81400001 (32-bit, geometry FIFO sync)
sub_1FFFE8C
export/plan0/arm9_autoload1_itcm/sub_1FFFE8C_01FFFE8C.c
- docs/function_notes/agent_00.md:72 writes DMA channel a1 source/dest/control registers (0x040000B0 + 12*a1) without special handling
sub_1FFFEF4
export/plan0/arm9_autoload1_itcm/sub_1FFFEF4_01FFFEF4.c
- docs/function_notes/agent_00.md:73 fragment of a DMA-start function: sets channel registers (control 0x81400001) then calls sub_200FCB4 (restore IRQ)
sub_1FFFF38
export/plan0/arm9_autoload1_itcm/sub_1FFFF38_01FFFF38.c
- docs/function_notes/agent_00.md:74 DMA start with IRQs disabled: sub_200FCA0, writes DMA registers of channel a1, sub_200FCB4 (OS_RestoreInterrupts)
sub_2000142
export/plan0/arm9_main/sub_2000142_02000142.c
- docs/function_notes/agent_00.md:77 BIOS SWI 5 (VBlankIntrWait) wrapper
sub_20003D4
export/plan0/arm9_main/sub_20003D4_020003D4.c
- docs/function_notes/agent_00.md:78 BIOS SWI 0xB (CpuSet) wrapper
sub_2000472
export/plan0/arm9_main/sub_2000472_02000472.c
- docs/function_notes/agent_00.md:79 BIOS SWI 3 (WaitByLoop) wrapper
sub_2000476
export/plan0/arm9_main/sub_2000476_02000476.c
- docs/function_notes/agent_00.md:80 unclear: fragment storing four registers into a block header and a back-pointer word (heap/thread-context helper piece)
sub_2000920
export/plan0/arm9_main/sub_2000920_02000920.c
- docs/function_notes/agent_00.md:82 fills a memory range with a 32-bit value (CpuFill32)
sub_2000934
export/plan0/arm9_main/sub_2000934_02000934.c
- docs/function_notes/agent_00.md:83 MI_UncompressBackward: decompresses the backward-LZ compressed arm9 static module in place, then flushes data cache
sub_20009E0
export/plan0/arm9_main/sub_20009E0_020009E0.c
- docs/function_notes/agent_00.md:84 copies the autoload blocks (ITCM/DTCM data) from the module image to their RAM destinations and zeroes their BSS parts, flushing cache
sub_2000A5C
export/plan0/arm9_main/sub_2000A5C_02000A5C.c
- docs/function_notes/agent_00.md:85 CP15 setup: disables caches/MPU, configures 8 protection regions, ITCM/DTCM base and size, cache enables
sub_2001000
export/plan0/arm9_main/sub_2001000_02001000.c
- docs/function_notes/agent_00.md:90 flow step: if a flag byte is set, queries sub_2050320(7,...) and calls sub_20515B0 with it (wireless/menu check)
sub_200104C
export/plan0/arm9_main/sub_200104C_0200104C.c
- docs/function_notes/agent_00.md:91 flow step: sets state-block field +4 = 2, clears +130 and bit 3 of +139 in the structure at *0x0217A9E0
sub_20010E0
export/plan0/arm9_main/sub_20010E0_020010E0.c
- docs/function_notes/agent_00.md:92 flow state: after sub_2125F54/F88 checks, requests next flow state 11
sub_2001144
export/plan0/arm9_main/sub_2001144_02001144.c
- docs/function_notes/agent_00.md:93 flow state: fetches message strings 138 and 4 from the string table and shows them (sub_2126230)
sub_200118C
export/plan0/arm9_main/sub_200118C_0200118C.c
- docs/function_notes/agent_00.md:94 flow state: like sub_20010E0 but requests next state 10
sub_20011F0
export/plan0/arm9_main/sub_20011F0_020011F0.c
- docs/function_notes/agent_00.md:95 flow state: shows message strings 137 and 6 (sub_2126230)
sub_2001238
export/plan0/arm9_main/sub_2001238_02001238.c
- docs/function_notes/agent_00.md:96 flow state: requests next state 9 when mode is 3, else 11
sub_2001294
export/plan0/arm9_main/sub_2001294_02001294.c
- docs/function_notes/agent_00.md:98 flow state: on a condition plays/shows item 35, else requests next state 8
sub_2001300
export/plan0/arm9_main/sub_2001300_02001300.c
- docs/function_notes/agent_00.md:99 flow state: shows message strings 127 and 4 after sub_2125EBC(33)
sub_2001350
export/plan0/arm9_main/sub_2001350_02001350.c
- docs/function_notes/agent_00.md:100 flow state tick: counts frames in +52; after >90 frames (or a result) requests state 7, else state 8
sub_200148C
export/plan0/arm9_main/sub_200148C_0200148C.c
- docs/function_notes/agent_00.md:101 flow state exit: runs sub_2057130, if flag bit 0 shows string 126, resets frame counter
sub_2001500
export/plan0/arm9_main/sub_2001500_02001500.c
- docs/function_notes/agent_00.md:102 flow state: requests next state 8 or 6 depending on sub_2125F60
sub_2001598
export/plan0/arm9_main/sub_2001598_02001598.c
- docs/function_notes/agent_00.md:103 flow state: shows three strings (124, 0, 1) from a string table via sub_212611C
sub_20015F0
export/plan0/arm9_main/sub_20015F0_020015F0.c
- docs/function_notes/agent_00.md:104 flow state: like sub_2001294, requests next state 8
sub_200165C
export/plan0/arm9_main/sub_200165C_0200165C.c
- docs/function_notes/agent_00.md:105 flow state: shows message strings 128 and 4 after sub_2125EBC(33)
sub_20016AC
export/plan0/arm9_main/sub_20016AC_020016AC.c
- docs/function_notes/agent_00.md:106 flow state tick: counts frames, after >90 frames requests state 4
sub_2001770
export/plan0/arm9_main/sub_2001770_02001770.c
- docs/function_notes/agent_00.md:107 flow state exit: runs sub_2056E48 and shows string 126, resets frame counter
sub_20017CC
export/plan0/arm9_main/sub_20017CC_020017CC.c
- docs/function_notes/agent_00.md:108 flow state: requests next state 3
sub_2001830
export/plan0/arm9_main/sub_2001830_02001830.c
- docs/function_notes/agent_00.md:109 flow state: shows message strings 125 and 4
sub_2001878
export/plan0/arm9_main/sub_2001878_02001878.c
- docs/function_notes/agent_00.md:110 flow state: chooses next state (2, 5, 6 or 8) from mode value at +44 and the global at 0x021759B4
sub_20019B0
export/plan0/arm9_main/sub_20019B0_020019B0.c
- docs/function_notes/agent_00.md:112 flow state tick: after >120 frames requests state 1 and sets flag bit 0 if racer record (92-byte at 0x0217560A) flags 0xF03 are all set
sub_2001A44
export/plan0/arm9_main/sub_2001A44_02001A44.c
- docs/function_notes/agent_00.md:113 flow state exit: runs sub_2056F98 and clears flow-manager flag bit 1
sub_2001A74
export/plan0/arm9_main/sub_2001A74_02001A74.c
- docs/function_notes/agent_00.md:114 flow manager per-frame: ticks its object state machine (sub_2046B40), clears a field in the argument when state is 11, calls sub_2125928
sub_2001ABC
export/plan0/arm9_main/sub_2001ABC_02001ABC.c
- docs/function_notes/agent_00.md:115 flow state tick: after 90 frames fades both screens out by setting master brightness (0x4000050 / 0x4001050) from the frame counter
sub_2001B38
export/plan0/arm9_main/sub_2001B38_02001B38.c
- docs/function_notes/agent_00.md:116 flow state enter: maps a 2-bit mode field of the config (+49) to 1/2/0 and calls sub_2108E94 then sub_2125DA0
sub_2001BA0
export/plan0/arm9_main/sub_2001BA0_02001BA0.c
- docs/function_notes/agent_00.md:117 flow manager init: allocates a 60-byte block, loads two background sets (sub_2001D30), builds the 12-state machine at 0x02001080, shows first message
sub_2001D30
export/plan0/arm9_main/sub_2001D30_02001D30.c
- docs/function_notes/agent_00.md:118 loads one screen's graphics triple (character, palette, screen data) from three archive files and copies them to VRAM (main or sub engine by a2)
sub_2003000
export/plan0/arm9_main/sub_2003000_02003000.c
- docs/function_notes/agent_00.md:121 main entry (0x02003000): calls sub_20365F0 (init) then sub_20365BC with the main loop function 0x02039C98
sub_2003024
export/plan0/arm9_main/sub_2003024_02003024.c
- docs/function_notes/agent_00.md:124 FSi archive command executor: runs an FS command (read/seek/etc.) through the archive's callback or default table, handles blocking and completion (FS_ReturnResult)
sub_20031A0
export/plan0/arm9_main/sub_20031A0_020031A0.c
- docs/function_notes/agent_00.md:125 FSi_ReturnResult: unlinks a command from the archive queue, stores result, wakes the waiting thread
sub_2003204
export/plan0/arm9_main/sub_2003204_02003204.c
- docs/function_notes/agent_00.md:126 FS default archive callback stub (returns 0)
sub_200320C
export/plan0/arm9_main/sub_200320C_0200320C.c
- docs/function_notes/agent_00.md:127 FS directory iterator: resets current position fields from saved start values
sub_2003234
export/plan0/arm9_main/sub_2003234_02003234.c
- docs/function_notes/agent_00.md:128 FS read of one FNT directory-table entry (8 bytes) for a directory id, then dispatch command 7
sub_20032B0
export/plan0/arm9_main/sub_20032B0_020032B0.c
- docs/function_notes/agent_00.md:129 FS_GetPathName: builds the full path string of a file or directory id by walking parent directories in the FNT (with ":/" prefix)
sub_2003670
export/plan0/arm9_main/sub_2003670_02003670.c
- docs/function_notes/agent_00.md:130 FS path resolver: walks a path string component by component (handles "." and ".."), finding the directory or file id in the FNT
sub_200388C
export/plan0/arm9_main/sub_200388C_0200388C.c
- docs/function_notes/agent_00.md:131 FS reads one FNT entry (name length, directory flag, name, id) and updates iterator
sub_200399C
export/plan0/arm9_main/sub_200399C_0200399C.c
- docs/function_notes/agent_00.md:132 FS reads one 8-byte FAT entry (file start/end) for a file id
sub_2003A34
export/plan0/arm9_main/sub_2003A34_02003A34.c
- docs/function_notes/agent_00.md:133 FS archive write callback dispatch (vtable +76) with position advance
sub_2003A6C
export/plan0/arm9_main/sub_2003A6C_02003A6C.c
- docs/function_notes/agent_00.md:134 FS archive read callback dispatch (vtable +72) with position advance
sub_2003AA4
export/plan0/arm9_main/sub_2003AA4_02003AA4.c
- docs/function_notes/agent_00.md:135 FS seek-to-directory: marks the iterator and sends command 2 for a directory id
sub_2003AD8
export/plan0/arm9_main/sub_2003AD8_02003AD8.c
- docs/function_notes/agent_00.md:136 FS_ReadFNTData: reads bytes through the archive read callback (vtable +80) and advances position, waiting if async
sub_2003B7C
export/plan0/arm9_main/sub_2003B7C_02003B7C.c
- docs/function_notes/agent_00.md:137 case-insensitive memory compare (FS name comparison, ASCII only)
sub_2003BE0
export/plan0/arm9_main/sub_2003BE0_02003BE0.c
- docs/function_notes/agent_00.md:138 FS_ReturnResult for an archive: finishes the active command, wakes the waiter and starts the next one
sub_2003C60
export/plan0/arm9_main/sub_2003C60_02003C60.c
- docs/function_notes/agent_00.md:139 FS_SetArchiveProc: sets the archive's command-handler pointer and the command mask
sub_2003C80
export/plan0/arm9_main/sub_2003C80_02003C80.c
- docs/function_notes/agent_00.md:140 FS_UnlockArchive: clears the lock bit and starts pending commands
sub_2003CFC
export/plan0/arm9_main/sub_2003CFC_02003CFC.c
- docs/function_notes/agent_00.md:141 FS_LockArchive: takes the archive lock, sleeping if busy
sub_2003D8C
export/plan0/arm9_main/sub_2003D8C_02003D8C.c
- docs/function_notes/agent_00.md:142 FS_UnloadArchiveTables: restores FAT/FNT pointers and returns the table buffer
sub_2003E24
export/plan0/arm9_main/sub_2003E24_02003E24.c
- docs/function_notes/agent_00.md:143 FS_LoadArchiveTables: copies FNT and FAT of an archive into a caller buffer (32-byte aligned) and repoints the archive at the copies
sub_2003F50
export/plan0/arm9_main/sub_2003F50_02003F50.c
- docs/function_notes/agent_00.md:144 FS_ReleaseArchive/FS_ClearArchive: cancels all queued commands and resets the archive fields
sub_2004018
export/plan0/arm9_main/sub_2004018_02004018.c
- docs/function_notes/agent_00.md:145 FS_AttachArchive-style init: sets base, FAT, FNT offsets and sizes, read/write callbacks (defaults at 0x02004760/0x02004734)
sub_2004090
export/plan0/arm9_main/sub_2004090_02004090.c
- docs/function_notes/agent_00.md:146 FS_UnregisterArchive: unlinks an archive from the global archive list and clears its registered flag
sub_2004128
export/plan0/arm9_main/sub_2004128_02004128.c
- docs/function_notes/agent_00.md:147 FS_RegisterArchive: adds an archive (name up to 3 chars packed into a 32-bit id) to the global list; fails if the name exists
sub_20041E8
export/plan0/arm9_main/sub_20041E8_020041E8.c
- docs/function_notes/agent_00.md:148 FS_FindArchive: finds a registered archive by name (packed lowercase id)
sub_2004238
export/plan0/arm9_main/sub_2004238_02004238.c
- docs/function_notes/agent_00.md:149 FS_InitFile: zeroes a 92-byte FSFile struct
sub_2004270
export/plan0/arm9_main/sub_2004270_02004270.c
- docs/function_notes/agent_00.md:150 FSi_SendCommand: queues a command on the archive, runs it directly when the archive is idle (or sleeps until done for blocking calls)
sub_200442C
export/plan0/arm9_main/sub_200442C_0200442C.c
- docs/function_notes/agent_00.md:151 FSi_ExecuteSyncCommand: runs a command, returns its result and starts the next queued command
sub_2004474
export/plan0/arm9_main/sub_2004474_02004474.c
- docs/function_notes/agent_00.md:152 FSi_NextCommand: loops running queued archive commands until one goes asynchronous
sub_2004518
export/plan0/arm9_main/sub_2004518_02004518.c
- docs/function_notes/agent_00.md:153 FSi_PopCommand: selects the next pending command of an archive (cancelling flagged ones), or marks the archive idle
sub_2004710
export/plan0/arm9_main/sub_2004710_02004710.c
- docs/function_notes/agent_00.md:154 FS memory-archive read: copies a4 bytes from a2 to a3 (MI_CpuCopy)
sub_2004734
export/plan0/arm9_main/sub_2004734_02004734.c
- docs/function_notes/agent_00.md:155 FS ROM-archive read callback: copies bytes from archive base + offset to the destination
sub_2004760
export/plan0/arm9_main/sub_2004760_02004760.c
- docs/function_notes/agent_00.md:156 FS write callback: copies bytes from a buffer into archive base + offset
sub_2004788
export/plan0/arm9_main/sub_2004788_02004788.c
- docs/function_notes/agent_00.md:157 packs up to 3 characters of an archive name into a lowercase 32-bit id
sub_20047EC
export/plan0/arm9_main/sub_20047EC_020047EC.c
- docs/function_notes/agent_00.md:158 FS_SetCurrentDirectory: resolves a path and stores the result as the current directory (0x0216F324)
sub_2004840
export/plan0/arm9_main/sub_2004840_02004840.c
- docs/function_notes/agent_00.md:159 FS_SeekFile: sets a file's position from offset and origin (begin/current/end), clamped to its range
sub_20048AC
export/plan0/arm9_main/sub_20048AC_020048AC.c
- docs/function_notes/agent_00.md:160 FS_ReadFile (blocking): reads bytes via sub_2004B98 with the blocking flag
sub_20048BC
export/plan0/arm9_main/sub_20048BC_020048BC.c
- docs/function_notes/agent_00.md:161 FS_ReadFileAsync: same read with the async flag set
sub_20048CC
export/plan0/arm9_main/sub_20048CC_020048CC.c
- docs/function_notes/agent_00.md:162 FS_CancelFile: marks the command cancelled and flags the archive
sub_2004918
export/plan0/arm9_main/sub_2004918_02004918.c
- docs/function_notes/agent_00.md:163 FS_WaitAsync: sleeps until the async command of a file completes and returns whether it succeeded
sub_20049E8
export/plan0/arm9_main/sub_20049E8_020049E8.c
- docs/function_notes/agent_00.md:164 FS_CloseFile: sends the close command (8) and resets the file struct
sub_2004A30
export/plan0/arm9_main/sub_2004A30_02004A30.c
- docs/function_notes/agent_00.md:165 FS_OpenFile wrapper: looks up the path and opens the file by id
sub_2004A80
export/plan0/arm9_main/sub_2004A80_02004A80.c
- docs/function_notes/agent_00.md:166 FS_OpenFileFast: opens a file by its FAT range (start, end) via command 6
sub_2004AFC
export/plan0/arm9_main/sub_2004AFC_02004AFC.c
- docs/function_notes/agent_00.md:167 FS_OpenFileDirect: opens a file by archive, start and end offsets via command 7
sub_2004B54
export/plan0/arm9_main/sub_2004B54_02004B54.c
- docs/function_notes/agent_00.md:168 FS_OpenFile: resolves a path and returns whether it succeeded
sub_2004B98
export/plan0/arm9_main/sub_2004B98_02004B98.c
- docs/function_notes/agent_00.md:169 FS read worker: clamps the length to the file end, issues read command 0, waits when synchronous, returns bytes read or -1
sub_2004C20
export/plan0/arm9_main/sub_2004C20_02004C20.c
- docs/function_notes/agent_00.md:170 FS_FindPath: parses an optional "arc:" prefix and a path string and issues command 4 (find path) to get a file or directory id
sub_2004D80
export/plan0/arm9_main/sub_2004D80_02004D80.c
- docs/function_notes/agent_00.md:171 FS file/directory struct init (clears fields, sets state to 14)
sub_2004DB0
export/plan0/arm9_main/sub_2004DB0_02004DB0.c
- docs/function_notes/agent_00.md:172 FS_IsAvailable: returns the FS-initialised flag
sub_2004DC0
export/plan0/arm9_main/sub_2004DC0_02004DC0.c
- docs/function_notes/agent_00.md:173 FS_Init: first call sets the init flag and runs the init body (sub_2004E1C)
sub_2004DFC
export/plan0/arm9_main/sub_2004DFC_02004DFC.c
- docs/function_notes/agent_00.md:174 FS_LoadTables: loads the ROM archive's FAT/FNT into a buffer (FS_LoadArchiveTables on the "rom" archive)
sub_2004E1C
export/plan0/arm9_main/sub_2004E1C_02004E1C.c
- docs/function_notes/agent_00.md:175 FS_Init body: registers the "rom" archive and attaches the card FAT/FNT (from header at 0x027FFE40/48) with the card read callbacks
sub_2004FBC
export/plan0/arm9_main/sub_2004FBC_02004FBC.c
- docs/function_notes/agent_00.md:178 ROM archive callback: returns constant 4
sub_2004FC4
export/plan0/arm9_main/sub_2004FC4_02004FC4.c
- docs/function_notes/agent_00.md:179 ROM archive callback: returns constant 1
sub_2004FCC
export/plan0/arm9_main/sub_2004FCC_02004FCC.c
- docs/function_notes/agent_00.md:180 ROM archive command handler: command 1 returns 4, 9 locks the card bus (sub_21457CC), 10 unlocks it (sub_21457AC), others return 8
sub_200505C
export/plan0/arm9_main/sub_200505C_0200505C.c
- docs/function_notes/agent_00.md:181 ROM archive callback: returns constant 1
sub_2005064
export/plan0/arm9_main/sub_2005064_02005064.c
- docs/function_notes/agent_00.md:182 ROM archive read callback: starts a card read (sub_21461D8) of a bytes from offset a3 and returns 6 (async)
sub_20050B0
export/plan0/arm9_main/sub_20050B0_020050B0.c
- docs/function_notes/agent_00.md:183 card read completion callback: calls FS_ReturnResult (sub_2003BE0) with result 0
sub_20050C0
export/plan0/arm9_main/sub_20050C0_020050C0.c
- docs/function_notes/agent_00.md:184 registers the overlay table (offset, size) for ARM9 or ARM7, verifying its hash first and halting on mismatch
sub_2005144
export/plan0/arm9_main/sub_2005144_02005144.c
- docs/function_notes/agent_00.md:185 FS_LoadOverlay: reads an overlay's info and loads and clears it (info + image load)
sub_2005198
export/plan0/arm9_main/sub_2005198_02005198.c
- docs/function_notes/agent_00.md:186 FS_LoadOverlayImage (blocking): reads overlay info, loads the image, and calls its init (sub_2005314)
sub_20051F4
export/plan0/arm9_main/sub_20051F4_020051F4.c
- docs/function_notes/agent_00.md:187 runs unload callbacks (sub_2005210) after loading, returns 1
sub_2005210
export/plan0/arm9_main/sub_2005210_02005210.c
- docs/function_notes/agent_00.md:188 runs and removes the registered callbacks whose address range overlaps the overlay region (overlay unload hooks)
sub_2005304
export/plan0/arm9_main/sub_2005304_02005304.c
- docs/function_notes/agent_00.md:189 unclear: tail jump through a stacked function pointer
sub_2005414
export/plan0/arm9_main/sub_2005414_02005414.c
- docs/function_notes/agent_00.md:190 compares a 20-byte SHA1 hash computed over the overlay table with the stored one; true if equal
sub_20054B8
export/plan0/arm9_main/sub_20054B8_020054B8.c
- docs/function_notes/agent_00.md:191 loads an overlay image (blocking): opens the file, reads (compressed or not) into RAM, flushes cache, zeroes BSS
sub_2005558
export/plan0/arm9_main/sub_2005558_02005558.c
- docs/function_notes/agent_00.md:192 same as sub_20054B8 but asynchronous (read started with the async flag)
sub_20055F0
export/plan0/arm9_main/sub_20055F0_020055F0.c
- docs/function_notes/agent_00.md:193 FS_LoadOverlayInfo: reads a 32-byte overlay table entry (id a3, ARM9 or ARM7) and fills file range fields
sub_2005704
export/plan0/arm9_main/sub_2005704_02005704.c
- docs/function_notes/agent_00.md:194 FS_LoadOverlayInfo via direct card read: reads the 32-byte entry from the overlay table in ROM at 0x027FFE50/58
sub_2005814
export/plan0/arm9_main/sub_2005814_02005814.c
- docs/function_notes/agent_00.md:195 fills a file-selector pair (archive pointer 0x0216F34C, file id from overlay info +24)
sub_200583C
export/plan0/arm9_main/sub_200583C_0200583C.c
- docs/function_notes/agent_00.md:196 after an overlay load: flushes data cache, invalidates instruction cache, zeroes the overlay's BSS part
sub_2005880
export/plan0/arm9_main/sub_2005880_02005880.c
- docs/function_notes/agent_00.md:197 overlay image size: low 24 bits of +28 if compressed flag set, else +8
sub_200589C
export/plan0/arm9_main/sub_200589C_0200589C.c
- docs/function_notes/agent_00.md:200 uncertain: copies a 156-byte request block and per-node data, then sends it by request type (2, 4, 6, 10) through the matching packet builder
sub_2005A30
export/plan0/arm9_main/sub_2005A30_02005A30.c
- docs/function_notes/agent_00.md:201 uncertain: re-sends/continues a request per node bit in the node bitmap (types 2, 4/6, 10), picking builders sub_2006794/20066C0/200654C
sub_2005B18
export/plan0/arm9_main/sub_2005B18_02005B18.c
- docs/function_notes/agent_00.md:202 uncertain: sends a pending type-6 packet for node a2 (104-byte entry state 2 -> 1), builds it with sub_2006648
sub_2005B80
export/plan0/arm9_main/sub_2005B80_02005B80.c
- docs/function_notes/agent_00.md:203 uncertain: like sub_2005B18 but only sends when sub_20063F4 yields a non-zero length
sub_2005BEC
export/plan0/arm9_main/sub_2005BEC_02005BEC.c
- docs/function_notes/agent_00.md:204 uncertain: sends a pending type-4 packet for node a2 with sequence lookup, builds it with sub_200671C
sub_2005CC8
export/plan0/arm9_main/sub_2005CC8_02005CC8.c
- docs/function_notes/agent_00.md:205 uncertain: sends a pending type-10 packet for node a2 (sub_2006508)
sub_2005D08
export/plan0/arm9_main/sub_2005D08_02005D08.c
- docs/function_notes/agent_00.md:206 uncertain: sends a pending type-8 packet for node a2 (sub_20065A8)
sub_2005D4C
export/plan0/arm9_main/sub_2005D4C_02005D4C.c
- docs/function_notes/agent_00.md:207 uncertain: sends a pending type-2 packet for node a2 (sub_20067F0)
sub_2005DAC
export/plan0/arm9_main/sub_2005DAC_02005DAC.c
- docs/function_notes/agent_00.md:208 uncertain: incoming packet parser: field-by-field state machine (header, node mask, type, 2/4-byte fields, payload) filling a node's 104-byte entry
sub_2006144
export/plan0/arm9_main/sub_2006144_02006144.c
- docs/function_notes/agent_00.md:209 uncertain: completes a node's request: sets node bit, fires the completion callback at +16, clears the node from the pending mask
sub_20061D8
export/plan0/arm9_main/sub_20061D8_020061D8.c
- docs/function_notes/agent_00.md:210 uncertain: builds a completion event record (event id a2, node mask, seq, result) at +0x138 and invokes the user callback at +16
sub_200628C
export/plan0/arm9_main/sub_200628C_0200628C.c
- docs/function_notes/agent_00.md:211 uncertain: copies fragment a2 of a send buffer (last fragment is the remainder) to a3, using the fragment size
sub_20062F4
export/plan0/arm9_main/sub_20062F4_020062F4.c
- docs/function_notes/agent_00.md:212 uncertain: finds the next free (unset) fragment bit in a bitmap after the current one, wrapping; returns its index or -1 if all set
sub_200635C
export/plan0/arm9_main/sub_200635C_0200635C.c
- docs/function_notes/agent_00.md:213 uncertain: marks fragment a2 as received in the bitmap and counts it
sub_2006380
export/plan0/arm9_main/sub_2006380_02006380.c
- docs/function_notes/agent_00.md:214 uncertain: tests bit a2 of the fragment bitmap
sub_200639C
export/plan0/arm9_main/sub_200639C_0200639C.c
- docs/function_notes/agent_00.md:215 uncertain: initialises a send/receive transfer record (total size, fragment count via divide, bitmap pointer, data pointer) and clears the bitmap
sub_20063F4
export/plan0/arm9_main/sub_20063F4_020063F4.c
- docs/function_notes/agent_00.md:216 uncertain: returns the address of fragment a2 within the data of transfer a1 (id below 1000 indexes a fixed list, else searched by id)
sub_2006458
export/plan0/arm9_main/sub_2006458_02006458.c
- docs/function_notes/agent_00.md:217 uncertain: picks the next fragment to send for transfer a1 (skipping the last few sent), wrapping at the fragment count
sub_2006508
export/plan0/arm9_main/sub_2006508_02006508.c
- docs/function_notes/agent_00.md:218 packet builder, type 11: 1-byte type, u16 node mask, 1-byte seq; returns length 4
sub_200654C
export/plan0/arm9_main/sub_200654C_0200654C.c
- docs/function_notes/agent_00.md:219 packet builder, type 10: type, node mask, seq, flag byte and 9 payload bytes; returns length 14
sub_20065A8
export/plan0/arm9_main/sub_20065A8_020065A8.c
- docs/function_notes/agent_00.md:220 packet builder, type 9: type, mask, seq, 4-byte value; returns 8
sub_20065F8
export/plan0/arm9_main/sub_20065F8_020065F8.c
- docs/function_notes/agent_00.md:221 packet builder, type 8: type, mask, seq, 4-byte value; returns 8
sub_2006648
export/plan0/arm9_main/sub_2006648_02006648.c
- docs/function_notes/agent_00.md:222 packet builder, type 7: header + two 32-bit values + payload copy (or zeros); returns length 12 + payload size
sub_20066C0
export/plan0/arm9_main/sub_20066C0_020066C0.c
- docs/function_notes/agent_00.md:223 packet builder, type 6: header + two 32-bit values; returns 12
sub_200671C
export/plan0/arm9_main/sub_200671C_0200671C.c
- docs/function_notes/agent_00.md:224 packet builder, type 5: header + two 32-bit values + payload; returns 12 + payload size
sub_2006794
export/plan0/arm9_main/sub_2006794_02006794.c
- docs/function_notes/agent_00.md:225 packet builder, type 4: header + two 32-bit values; returns 12
sub_20067F0
export/plan0/arm9_main/sub_20067F0_020067F0.c
- docs/function_notes/agent_00.md:226 packet builder, type 3: header + three 16-bit values; returns 10
sub_2006858
export/plan0/arm9_main/sub_2006858_02006858.c
- docs/function_notes/agent_00.md:227 packet builder, type 2: header + two 16-bit values; returns 8
sub_20068B4
export/plan0/arm9_main/sub_20068B4_020068B4.c
- docs/function_notes/agent_00.md:228 packet builder, type 1 (keepalive/empty): type, node mask, seq; returns 4
sub_20068F4
export/plan0/arm9_main/sub_20068F4_020068F4.c
- docs/function_notes/agent_00.md:229 receive hook: if a data pointer and a node mask other than 0xFFFF, parses the incoming packet (sub_2006BEC)
sub_2006914
export/plan0/arm9_main/sub_2006914_02006914.c
- docs/function_notes/agent_00.md:230 send hook: if length > 0 and a buffer, builds the next outgoing packet (sub_2006B50)
sub_200692C
export/plan0/arm9_main/sub_200692C_0200692C.c
- docs/function_notes/agent_00.md:231 receive hook for a given node: parses a packet from a node unless mask is 0xFFFF
sub_2006954
export/plan0/arm9_main/sub_2006954_02006954.c
- docs/function_notes/agent_00.md:232 send hook for a node: returns the length built by sub_2006C2C (low 16 bits), 0 if none
sub_2006974
export/plan0/arm9_main/sub_2006974_02006974.c
- docs/function_notes/agent_00.md:233 shuts the packet layer down: clears the init flag, resets state and all 16 node entries (104 bytes each), clears callbacks
sub_2006A10
export/plan0/arm9_main/sub_2006A10_02006A10.c
- docs/function_notes/agent_00.md:234 starts the layer as parent: sets init flag, clears 16 node entries, stores a parameter (+0x148)
sub_2006AAC
export/plan0/arm9_main/sub_2006AAC_02006AAC.c
- docs/function_notes/agent_00.md:235 starts the layer as child: like sub_2006A10 with sizes offset by 14
sub_2006B50
export/plan0/arm9_main/sub_2006B50_02006B50.c
- docs/function_notes/agent_00.md:236 parent-side next outgoing packet: tries pending builders in priority order (types 10, 2, 6/4, 8, 4, 6) then data/ack, else keepalive
sub_2006BEC
export/plan0/arm9_main/sub_2006BEC_02006BEC.c
- docs/function_notes/agent_00.md:237 parent-side receive: runs the packet parser (sub_2005DAC) for node 0
sub_2006C0C
export/plan0/arm9_main/sub_2006C0C_02006C0C.c
- docs/function_notes/agent_00.md:238 child-side receive: parser for a given node when length > 0
sub_2006C2C
export/plan0/arm9_main/sub_2006C2C_02006C2C.c
- docs/function_notes/agent_00.md:239 child-side next packet to send, trying each of 15 nodes round-robin through the builders, falling back to keepalive
sub_2006D3C
export/plan0/arm9_main/sub_2006D3C_02006D3C.c
- docs/function_notes/agent_00.md:240 queues a type-10 command (up to 9 payload bytes) to the command queue
sub_2006D78
export/plan0/arm9_main/sub_2006D78_02006D78.c
- docs/function_notes/agent_00.md:241 queues a type-4 command with two 64-byte blocks
sub_2006DB0
export/plan0/arm9_main/sub_2006DB0_02006DB0.c
- docs/function_notes/agent_00.md:242 queues a type-6 command with one 64-byte block
sub_2006DDC
export/plan0/arm9_main/sub_2006DDC_02006DDC.c
- docs/function_notes/agent_00.md:243 queues a type-2 command with a value
sub_2006DF8
export/plan0/arm9_main/sub_2006DF8_02006DF8.c
- docs/function_notes/agent_00.md:244 removes the command with id a1 from the pending list and returns it
sub_2006E74
export/plan0/arm9_main/sub_2006E74_02006E74.c
- docs/function_notes/agent_00.md:247 MB: registers a game entry (id, name block 32 bytes, callback...) in the parent's linked list of download entries
sub_2006EF8
export/plan0/arm9_main/sub_2006EF8_02006EF8.c
- docs/function_notes/agent_00.md:248 MB: counts entries in the registered game list
sub_2006F14
export/plan0/arm9_main/sub_2006F14_02006F14.c
- docs/function_notes/agent_00.md:249 MB: sets the child-side packet size limits (a1-14, a2-14) unless the state is 4 or 6
sub_2006F50
export/plan0/arm9_main/sub_2006F50_02006F50.c
- docs/function_notes/agent_00.md:250 MB: for child a2, if in state 4 with matching game id, returns its two stored values (offset and size)
sub_2006F98
export/plan0/arm9_main/sub_2006F98_02006F98.c
- docs/function_notes/agent_00.md:251 MB: bytes needed for a fragment bitmap of a given data size (fragment count rounded up to 32-bit words)
sub_2006FDC
export/plan0/arm9_main/sub_2006FDC_02006FDC.c
- docs/function_notes/agent_00.md:252 returns the lowest set bit index (0..15) of a 16-bit mask, or -1
sub_2006FFC
export/plan0/arm9_main/sub_2006FFC_02006FFC.c
- docs/function_notes/agent_00.md:253 MB: getter for the current role/node id (global 0x02161780)
sub_2007008
export/plan0/arm9_main/sub_2007008_02007008.c
- docs/function_notes/agent_00.md:254 MB: setter for the role/node id
sub_2007014
export/plan0/arm9_main/sub_2007014_02007014.c
- docs/function_notes/agent_00.md:255 MB: finds a game registry entry by id in the game list, or null
sub_2007034
export/plan0/arm9_main/sub_2007034_02007034.c
- docs/function_notes/agent_00.md:256 MB: sets the game-list head pointer (0x0216F3B8)
sub_2007040
export/plan0/arm9_main/sub_2007040_02007040.c
- docs/function_notes/agent_00.md:257 MB: gets the game-list head pointer
sub_200704C
export/plan0/arm9_main/sub_200704C_0200704C.c
- docs/function_notes/agent_00.md:258 MB: copies a 156-byte command into the single-slot command buffer at 0x0216F458 if the layer is active and the slot is free
sub_20070B0
export/plan0/arm9_main/sub_20070B0_020070B0.c
- docs/function_notes/agent_00.md:259 MB: returns address of the command buffer (0x0216F458)
sub_20070B8
export/plan0/arm9_main/sub_20070B8_020070B8.c
- docs/function_notes/agent_00.md:260 MB: returns address of the comm work block (0x0216F3BC)
sub_20070C0
export/plan0/arm9_main/sub_20070C0_020070C0.c
- docs/function_notes/agent_00.md:261 MB: sets the send packet size (0x0216F3B4)
sub_20070CC
export/plan0/arm9_main/sub_20070CC_020070CC.c
- docs/function_notes/agent_00.md:262 MB: sets the receive packet size (0x0216F3B0)
sub_20070D8
export/plan0/arm9_main/sub_20070D8_020070D8.c
- docs/function_notes/agent_00.md:263 MB: gets the send packet size
sub_20070E4
export/plan0/arm9_main/sub_20070E4_020070E4.c
- docs/function_notes/agent_00.md:264 MB: gets the receive packet size
sub_20070F0
export/plan0/arm9_main/sub_20070F0_020070F0.c
- docs/function_notes/agent_00.md:265 MB: resets the command sequence counter to 0
sub_20070FC
export/plan0/arm9_main/sub_20070FC_020070FC.c
- docs/function_notes/agent_00.md:266 MB: increments the sequence counter (never 0)
sub_2007114
export/plan0/arm9_main/sub_2007114_02007114.c
- docs/function_notes/agent_00.md:267 MB: gets the sequence counter byte
sub_2007120
export/plan0/arm9_main/sub_2007120_02007120.c
- docs/function_notes/agent_00.md:268 MB: raises user callback event 13 with a 16-bit argument
sub_2007138
export/plan0/arm9_main/sub_2007138_02007138.c
- docs/function_notes/agent_00.md:269 MB: valid child aid check (1..15)
sub_2007148
export/plan0/arm9_main/sub_2007148_02007148.c
- docs/function_notes/agent_00.md:270 max of two unsigned values
sub_2007154
export/plan0/arm9_main/sub_2007154_02007154.c
- docs/function_notes/agent_00.md:271 MB: per-registry sequence counter step (keeps counter within 2 of the acknowledged one)
sub_20071B4
export/plan0/arm9_main/sub_20071B4_020071B4.c
- docs/function_notes/agent_00.md:272 MB parent: scans the 15 child states and issues the next response by priority (state 8, 2, 11, 4, 5, else default), starting from request types 5/1/6/2
sub_20072C0
export/plan0/arm9_main/sub_20072C0_020072C0.c
- docs/function_notes/agent_00.md:273 MB parent: serves a child's file/segment request: picks the next requesting child, round-robin, looks up the block in the download program, starts a card/FS read of a 32-byte aligned block
sub_2007478
export/plan0/arm9_main/sub_2007478_02007478.c
- docs/function_notes/agent_00.md:274 MB parent: read-completion step: reads the requested block from the archive into its cache entry and marks it ready
sub_20074D8
export/plan0/arm9_main/sub_20074D8_020074D8.c
- docs/function_notes/agent_00.md:275 MB parent: handles children in state 5: picks the next game id with waiting children (round-robin), builds the 228-byte reply from the registry and sends it
sub_20075F8
export/plan0/arm9_main/sub_20075F8_020075F8.c
- docs/function_notes/agent_00.md:276 MB parent: sends a one-byte response type then a bitmap-addressed broadcast (sub_2008908)
sub_2007624
export/plan0/arm9_main/sub_2007624_02007624.c
- docs/function_notes/agent_00.md:277 MB parent: after a beacon/scan: clears each child's flag word then reparses each child's received packet
sub_2007698
export/plan0/arm9_main/sub_2007698_02007698.c
- docs/function_notes/agent_00.md:278 MB parent: per-child incoming-message state machine (type 7 join request, 8 ack, etc.): updates child state, user info (22 bytes), game id and bitmaps
sub_20079C4
export/plan0/arm9_main/sub_20079C4_020079C4.c
- docs/function_notes/agent_00.md:279 MB parent: WM event handler (connect, disconnect, receive...), updating child states and bitmaps and raising callbacks
sub_2007CF8
export/plan0/arm9_main/sub_2007CF8_02007CF8.c
- docs/function_notes/agent_00.md:280 MB: calls the user callback stored in the work block (+0x14E4) if set
sub_2007D18
export/plan0/arm9_main/sub_2007D18_02007D18.c
- docs/function_notes/agent_00.md:281 MB: sets child aid a1's state to a2 and raises the user callback
sub_2007D50
export/plan0/arm9_main/sub_2007D50_02007D50.c
- docs/function_notes/agent_00.md:282 MB: sets a child's pending request type (0..3 mapped to state/type pairs) if it is in the expected state
sub_2007DF8
export/plan0/arm9_main/sub_2007DF8_02007DF8.c
- docs/function_notes/agent_00.md:283 MB: true if child a1 is in state 7
sub_2007E38
export/plan0/arm9_main/sub_2007E38_02007E38.c
- docs/function_notes/agent_00.md:284 MB: copies child a1's 22-byte user info to a scratch buffer and returns it
sub_2007EA0
export/plan0/arm9_main/sub_2007EA0_02007EA0.c
- docs/function_notes/agent_00.md:285 MB: sets the user callback pointer in the work block
sub_2007EC4
export/plan0/arm9_main/sub_2007EC4_02007EC4.c
- docs/function_notes/agent_00.md:286 MB: builds the parent beacon/parameters block: copies 60 bytes from the ROM header copy, sets max players 16, channel and flags
sub_2007F38
export/plan0/arm9_main/sub_2007F38_02007F38.c
- docs/function_notes/agent_00.md:287 MB: validates that a program segment's load range a2..a2+a3 lies in an allowed memory region for segment type a1 (main RAM, WRAM)
sub_2007FF0
export/plan0/arm9_main/sub_2007FF0_02007FF0.c
- docs/function_notes/agent_00.md:288 MB: validates a segment address range against the allowed regions for ARM9/ARM7 (RAM 0x02000000-0x02300000 and others)
sub_200806C
export/plan0/arm9_main/sub_200806C_0200806C.c
- docs/function_notes/agent_00.md:289 MB: maps a block index to a segment (0..2), computing the ROM offset, destination address and length of that block
sub_20080E8
export/plan0/arm9_main/sub_20080E8_020080E8.c
- docs/function_notes/agent_00.md:290 MB: precomputes per-segment block counts and offsets for a download program's three segments, validating each
sub_2008188
export/plan0/arm9_main/sub_2008188_02008188.c
- docs/function_notes/agent_00.md:291 MB: fills one segment record (ROM offset, RAM address, size, flags) from the ROM header fields for ARM9/ARM7/extra, checking address ranges
sub_20082B4
export/plan0/arm9_main/sub_20082B4_020082B4.c
- docs/function_notes/agent_00.md:292 MB: builds the download program's segment table (3 segments) and copies a 136-byte header
sub_2008310
export/plan0/arm9_main/sub_2008310_02008310.c
- docs/function_notes/agent_00.md:293 MB: registers a download program (game file) in a free slot of the 16-entry registry, building its blocks and game info
sub_200850C
export/plan0/arm9_main/sub_200850C_0200850C.c
- docs/function_notes/agent_00.md:294 MB: copies or zero-fills a range of the (clipped) download image within the 0x4000-0x8000 area
sub_2008570
export/plan0/arm9_main/sub_2008570_02008570.c
- docs/function_notes/agent_00.md:295 MB: reads the ROM header and segments from the ROM archive ("rom") and prepares the download image in RAM, patching the entry stub
sub_2008880
export/plan0/arm9_main/sub_2008880_02008880.c
- docs/function_notes/agent_00.md:296 MB: size of the download image: header-derived length, at least 0x10000
sub_20088DC
export/plan0/arm9_main/sub_20088DC_020088DC.c
- docs/function_notes/agent_00.md:297 16-bit ones-complement checksum over a halfword buffer (MB beacon checksum)
sub_2008908
export/plan0/arm9_main/sub_2008908_02008908.c
- docs/function_notes/agent_00.md:298 MB: flushes the data cache for a block and starts its send (sub_20099D8)
sub_2008934
export/plan0/arm9_main/sub_2008934_02008934.c
- docs/function_notes/agent_00.md:299 MB child (scanner): returns the pointer to game info slot a1 if its valid bit is set, else null
sub_200895C
export/plan0/arm9_main/sub_200895C_0200895C.c
- docs/function_notes/agent_00.md:300 MB child: invalidates game slot a1 (clears bits, counters) and zeroes its info
sub_20089D0
export/plan0/arm9_main/sub_20089D0_020089D0.c
- docs/function_notes/agent_00.md:301 MB child: clears slot a1's valid bits and zeroes its game info block
sub_2008A14
export/plan0/arm9_main/sub_2008A14_02008A14.c
- docs/function_notes/agent_00.md:302 MB child: signals the "scan done" state, calling the user callback and resetting counters
sub_2008A4C
export/plan0/arm9_main/sub_2008A4C_02008A4C.c
- docs/function_notes/agent_00.md:303 MB child: marks slot a1 as changed, calls the user callback with its info and sets the update timers
sub_2008AA0
export/plan0/arm9_main/sub_2008AA0_02008AA0.c
- docs/function_notes/agent_00.md:304 MB child: stores a received game-info fragment set (parent info, user infos) into a slot when sequence numbers match
sub_2008C08
export/plan0/arm9_main/sub_2008C08_02008C08.c
- docs/function_notes/agent_00.md:305 MB child: stores one received game-info chunk into slot a1's buffer and updates the received bitmaps
sub_2008CBC
export/plan0/arm9_main/sub_2008CBC_02008CBC.c
- docs/function_notes/agent_00.md:306 MB child: invalidates slots whose 6-byte MAC address matches the argument
sub_2008D30
export/plan0/arm9_main/sub_2008D30_02008D30.c
- docs/function_notes/agent_00.md:307 MB child: raises a slot update when the beacon's sequence differs from the stored one
sub_2008D68
export/plan0/arm9_main/sub_2008D68_02008D68.c
- docs/function_notes/agent_00.md:308 MB child: resets and updates a slot when the beacon's game-change counter differs
sub_2008DBC
export/plan0/arm9_main/sub_2008DBC_02008DBC.c
- docs/function_notes/agent_00.md:309 MB child: if the beacon checksum/id differs from the slot's, resets the slot and re-copies the beacon
sub_2008E10
export/plan0/arm9_main/sub_2008E10_02008E10.c
- docs/function_notes/agent_00.md:310 MB child: processes one received beacon for slot a2: updates the slot, counts repeats, copies the info and calls the right store function
sub_2008F00
export/plan0/arm9_main/sub_2008F00_02008F00.c
- docs/function_notes/agent_00.md:311 MB child: per-scan-tick timer update: ages every slot, reports lost parents through the callback, and finishes the scan
sub_2008FF0
export/plan0/arm9_main/sub_2008FF0_02008FF0.c
- docs/function_notes/agent_00.md:312 MB child: marks slot a1 complete when all fragments are received and calls the user callback (event 1 found / 2 lost)
sub_2009098
export/plan0/arm9_main/sub_2009098_02009098.c
- docs/function_notes/agent_00.md:313 MB child: finds the slot matching a beacon's MAC and game id, or allocates a free one; callback event 4 when full; returns slot or -1
sub_20091E0
export/plan0/arm9_main/sub_20091E0_020091E0.c
- docs/function_notes/agent_00.md:314 MB child: fills a 16-bit header (size 32, game id) in a game-info entry
sub_20091FC
export/plan0/arm9_main/sub_20091FC_020091FC.c
- docs/function_notes/agent_00.md:315 MB: true if a received WM beacon frame has the right flag and fixed field value
sub_200921C
export/plan0/arm9_main/sub_200921C_0200921C.c
- docs/function_notes/agent_00.md:316 MB child: processes a received beacon: verifies checksum, finds/creates the slot, reads it, updates completion
sub_20092A4
export/plan0/arm9_main/sub_20092A4_020092A4.c
- docs/function_notes/agent_00.md:317 MB child: clears the whole 0x5910-byte scan work area and sets the idle state
sub_20092D0
export/plan0/arm9_main/sub_20092D0_020092D0.c
- docs/function_notes/agent_00.md:318 MB parent: builds and sends the beacon (game info + 4 user infos + checksum) through WM (sub_21455A0)
sub_2009494
export/plan0/arm9_main/sub_2009494_02009494.c
- docs/function_notes/agent_00.md:319 MB parent: resets beacon send state to start (state 5, counters)
sub_20094B8
export/plan0/arm9_main/sub_20094B8_020094B8.c
- docs/function_notes/agent_00.md:320 MB parent: builds and sends the next 98-byte fragment of the game info in a beacon, advancing the fragment counter
sub_20095C4
export/plan0/arm9_main/sub_20095C4_020095C4.c
- docs/function_notes/agent_00.md:321 MB parent: switches beacon state 2 to 3 and selects the next data block (info or segment) to send
sub_20095FC
export/plan0/arm9_main/sub_20095FC_020095FC.c
- docs/function_notes/agent_00.md:322 MB parent: picks the next game in the beacon list (or wraps to the head), resets fragment counters and sets state 2
sub_200964C
export/plan0/arm9_main/sub_200964C_0200964C.c
- docs/function_notes/agent_00.md:323 MB parent: beacon state-machine step: dispatches on state (0/1 pick game, 2 select block, 3 send fragment, 4 reset, 5 send beacon)
sub_20096C0
export/plan0/arm9_main/sub_20096C0_020096C0.c
- docs/function_notes/agent_00.md:324 MB parent: clears the beacon fragment counters (+13..+17)
sub_20096D4
export/plan0/arm9_main/sub_20096D4_020096D4.c
- docs/function_notes/agent_00.md:325 MB parent: resets the beacon state machine (list head and state 1) and clears the callback pointer
sub_20096F4
export/plan0/arm9_main/sub_20096F4_020096F4.c
- docs/function_notes/agent_00.md:326 MB parent: appends a game entry to the end of the beacon game list
sub_2009724
export/plan0/arm9_main/sub_2009724_02009724.c
- docs/function_notes/agent_00.md:327 MB: length of a zero-terminated UTF-16 string (game name)
sub_200973C
export/plan0/arm9_main/sub_200973C_0200973C.c
- docs/function_notes/agent_00.md:328 MB parent: records a child set: counts active children from a mask, stores mask and send state in the game entry
sub_20097AC
export/plan0/arm9_main/sub_20097AC_020097AC.c
- docs/function_notes/agent_00.md:329 MB: reads a game's icon or 32-byte file part from the ROM into a buffer (icon size 0x200 or 32)
sub_2009828
export/plan0/arm9_main/sub_2009828_02009828.c
- docs/function_notes/agent_00.md:330 MB parent: builds a game's info block: loads icon data, copies name strings, zeroes buffers and sets the "valid" flags
sub_2009908
export/plan0/arm9_main/sub_2009908_02009908.c
- docs/function_notes/agent_00.md:331 MB: stores two user callbacks (0x0216FC14 / 0x0216FC18)
sub_200991C
export/plan0/arm9_main/sub_200991C_0200991C.c
- docs/function_notes/agent_00.md:332 MB: stores a work-area pointer (0x0216FC20)
sub_2009928
export/plan0/arm9_main/sub_2009928_02009928.c
- docs/function_notes/agent_00.md:333 MB: reports a WM call result to the user callback (255, status) unless the status is 0 or 2
sub_2009958
export/plan0/arm9_main/sub_2009958_02009958.c
- docs/function_notes/agent_00.md:334 MB: true if the parent state byte is 1 (running as parent)
sub_2009974
export/plan0/arm9_main/sub_2009974_02009974.c
- docs/function_notes/agent_00.md:335 MB: builds a 4-bit mask of which parent-info counters (at +14/+18/+20/+22) are non-zero
sub_20099C0
export/plan0/arm9_main/sub_20099C0_020099C0.c
- docs/function_notes/agent_00.md:336 MB: getter: 16-bit field +12 of the work block
sub_20099CC
export/plan0/arm9_main/sub_20099CC_020099CC.c
- docs/function_notes/agent_00.md:337 MB: getter: 32-bit field +8 of the work block
sub_20099D8
export/plan0/arm9_main/sub_20099D8_020099D8.c
- docs/function_notes/agent_00.md:338 MB: sends a data block through WM (sub_2009AA8) with the proper mode, marks a pending flag on partial success
sub_2009AA8
export/plan0/arm9_main/sub_2009AA8_02009AA8.c
- docs/function_notes/agent_00.md:339 MB: wrapper around WM_SetMPData (sub_2144048) that also reports the result
sub_2009ADC
export/plan0/arm9_main/sub_2009ADC_02009ADC.c
- docs/function_notes/agent_00.md:340 MB: stores a 16-bit value (+6) in the child-info work block
sub_2009AE8
export/plan0/arm9_main/sub_2009AE8_02009AE8.c
- docs/function_notes/agent_00.md:341 MB parent: handles a child disconnect: clears the child's state, user info, bitmaps and counts for aid a1
sub_2009C04
export/plan0/arm9_main/sub_2009C04_02009C04.c
- docs/function_notes/agent_00.md:342 MB: starts the beacon/data cycle under an interrupt lock; asserts the parent is initialised
sub_2009C34
export/plan0/arm9_main/sub_2009C34_02009C34.c
- docs/function_notes/agent_00.md:343 MB: sets the "beacon on" flag and starts WM (sub_2009C98) or defers it when the radio is busy
sub_2009C90
export/plan0/arm9_main/sub_2009C90_02009C90.c
- docs/function_notes/agent_00.md:344 thunk to sub_2009C98
sub_2009C98
export/plan0/arm9_main/sub_2009C98_02009C98.c
- docs/function_notes/agent_00.md:345 MB: calls WM_StartParent-like (sub_2143DD0) and reports the result
sub_2009CC8
export/plan0/arm9_main/sub_2009CC8_02009CC8.c
- docs/function_notes/agent_00.md:346 MB: sets the parent "running" flag and jumps to sub_2009CE4
sub_2009CE4
export/plan0/arm9_main/sub_2009CE4_02009CE4.c
- docs/function_notes/agent_00.md:347 MB_Init: initialises the parent work area (callbacks, buffers, 15 child slots, packet sizes) and starts the WM stack
sub_2009E70
export/plan0/arm9_main/sub_2009E70_02009E70.c
- docs/function_notes/agent_00.md:348 MB parent: after init, starts WM or waits for it (WM_Enable/start) and sets the ready flag
sub_2009F38
export/plan0/arm9_main/sub_2009F38_02009F38.c
- docs/function_notes/agent_00.md:349 MB: validates and stores parent info (game count, size) if not already running; returns 1 on success
sub_2009FAC
export/plan0/arm9_main/sub_2009FAC_02009FAC.c
- docs/function_notes/agent_00.md:350 MB: checks that the parent buffer size computation fits within the work-area limit
sub_2009FF4
export/plan0/arm9_main/sub_2009FF4_02009FF4.c
- docs/function_notes/agent_00.md:351 MB_Init body: aligns buffers, clears them, copies the user info (22 bytes), sets channel/callback, sets beacon period
sub_200A184
export/plan0/arm9_main/sub_200A184_0200A184.c
- docs/function_notes/agent_00.md:352 MB: computes a pseudo-random seed from the 6-byte MAC address and a RTC/tick word (0x027FFC3C)
sub_200A1BC
export/plan0/arm9_main/sub_200A1BC_0200A1BC.c
- docs/function_notes/agent_00.md:353 MB: WM event callback (child/parent connect, MP start, key events): dispatches indications and sets up the data transfer state
sub_200A77C
export/plan0/arm9_main/sub_200A77C_0200A77C.c
- docs/function_notes/agent_00.md:354 MB: forwards a WM completion to the user callback (event 9) when it signals a specific code (21)
sub_200A7B0
export/plan0/arm9_main/sub_200A7B0_0200A7B0.c
- docs/function_notes/agent_00.md:355 MB: WM callback for parent states (start parent, disconnect, MP data indications), forwarding events to the user callback
sub_200AD00
export/plan0/arm9_main/sub_200AD00_0200AD00.c
- docs/function_notes/agent_00.md:356 MB: restarts WM scanning: calls the end/stop function then WM_StartParent again with stored channel parameters
sub_200AD4C
export/plan0/arm9_main/sub_200AD4C_0200AD4C.c
- docs/function_notes/agent_00.md:357 MB parent: true when idle in state 1, not blocked, and a child has a pending flag (ready to accept/send)
sub_200ADA4
export/plan0/arm9_main/sub_200ADA4_0200ADA4.c
- docs/function_notes/agent_00.md:358 MB parent: advances the "current child" in a bitmask rotation to the next connected child aid (1..16)
sub_200ADFC
export/plan0/arm9_main/sub_200ADFC_0200ADFC.c
- docs/function_notes/agent_00.md:359 MB: copies data from a cached block (4 cache entries at +12) if the requested range is cached; returns 1 on hit
sub_200AE60
export/plan0/arm9_main/sub_200AE60_0200AE60.c
- docs/function_notes/agent_00.md:360 MB: stores a cache entry (offset, size, data ptr, state) in the first free of four slots
sub_200AEA8
export/plan0/arm9_main/sub_200AEA8_0200AEA8.c
- docs/function_notes/agent_00.md:361 MB: zeroes a 112-byte cache table
sub_200AEB4
export/plan0/arm9_main/sub_200AEB4_0200AEB4.c
- docs/function_notes/agent_00.md:362 MB task thread: runs the first queued task (sub_200AEEC) if the thread is active
sub_200AEEC
export/plan0/arm9_main/sub_200AEEC_0200AEEC.c
- docs/function_notes/agent_00.md:363 MB task queue: adds a task (function, callback) to a priority-sorted list and wakes the task thread
sub_200AFF8
export/plan0/arm9_main/sub_200AFF8_0200AFF8.c
- docs/function_notes/agent_00.md:364 MB task queue: true if a task is already queued (bit 0 of its flags)
sub_200B00C
export/plan0/arm9_main/sub_200B00C_0200B00C.c
- docs/function_notes/agent_00.md:365 zeroes a 32-byte task record
sub_200B018
export/plan0/arm9_main/sub_200B018_0200B018.c
- docs/function_notes/agent_00.md:366 MB task thread: true if it has been created
sub_200B02C
export/plan0/arm9_main/sub_200B02C_0200B02C.c
- docs/function_notes/agent_00.md:367 MB task thread init: creates the thread with stack of the given size and starts it
sub_200B08C
export/plan0/arm9_main/sub_200B08C_0200B08C.c
- docs/function_notes/agent_00.md:368 MB task thread main loop: sleeps until a task is queued, runs its function then its completion callback
sub_200B15C
export/plan0/arm9_main/sub_200B15C_0200B15C.c
- docs/function_notes/agent_00.md:369 MB: fills the WM connect/parameter fields (16 nodes, flags) of a parent beacon description
sub_200B1B0
export/plan0/arm9_main/sub_200B1B0_0200B1B0.c
- docs/function_notes/agent_00.md:370 MB child: copies the 192-byte game info of slot a1 into a buffer if the slot is valid
sub_200B200
export/plan0/arm9_main/sub_200B200_0200B200.c
- docs/function_notes/agent_00.md:371 MB child: connection step sender: builds and sends the request packet for the current child state (5 join, 7 ready, 9 / 10 data)
sub_200B344
export/plan0/arm9_main/sub_200B344_0200B344.c
- docs/function_notes/agent_00.md:372 MB child: handles a received parent response by type (1..6) and advances the child state machine
sub_200B43C
export/plan0/arm9_main/sub_200B43C_0200B43C.c
- docs/function_notes/agent_00.md:373 MB child: WM event callback: dispatches on event number and forwards data/state to sub_200B344 / sub_200B200
sub_200B610
export/plan0/arm9_main/sub_200B610_0200B610.c
- docs/function_notes/agent_00.md:374 MB child: starts connecting to game slot a1 (copies its info, sets state 1)
sub_200B698
export/plan0/arm9_main/sub_200B698_0200B698.c
- docs/function_notes/agent_00.md:375 MB child: WM_StartConnect completion: reports an error or proceeds to scan/setup
sub_200B6E8
export/plan0/arm9_main/sub_200B6E8_0200B6E8.c
- docs/function_notes/agent_00.md:376 MB child: re-issues the WM scan; on failure reports event 11
sub_200B72C
export/plan0/arm9_main/sub_200B72C_0200B72C.c
- docs/function_notes/agent_00.md:377 MB child: rotates to the next channel from the allowed channel mask
sub_200B794
export/plan0/arm9_main/sub_200B794_0200B794.c
- docs/function_notes/agent_00.md:378 MB child: scan callback: maps event 1/3 to scan start/stop forwarding
sub_200B7CC
export/plan0/arm9_main/sub_200B7CC_0200B7CC.c
- docs/function_notes/agent_00.md:379 MB child: clears the "connected" flag in the work area
sub_200B7E0
export/plan0/arm9_main/sub_200B7E0_0200B7E0.c
- docs/function_notes/agent_00.md:380 MB child: sets the "connected" flag and copies the 6-byte parent MAC address
sub_200B820
export/plan0/arm9_main/sub_200B820_0200B820.c
- docs/function_notes/agent_00.md:381 MB child: raises a user event with a 16-bit argument
sub_200B850
export/plan0/arm9_main/sub_200B850_0200B850.c
- docs/function_notes/agent_00.md:382 MB child: raises a user event with a pointer to the info buffer and an argument
sub_200B894
export/plan0/arm9_main/sub_200B894_0200B894.c
- docs/function_notes/agent_00.md:383 MB child: handles WM scan results: stores beacons into the game list, finishes scan and moves on
sub_200B934
export/plan0/arm9_main/sub_200B934_0200B934.c
- docs/function_notes/agent_00.md:384 MB child: starts a WM scan with the current channel mask (event 30 if no channel is allowed)
sub_200B9E0
export/plan0/arm9_main/sub_200B9E0_0200B9E0.c
- docs/function_notes/agent_00.md:385 MB child: initialises scan parameters and starts the scan
sub_200BA44
export/plan0/arm9_main/sub_200BA44_0200BA44.c
- docs/function_notes/agent_00.md:386 MB child: sets the state (+0x5F0E) and calls the state callback
sub_200BA84
export/plan0/arm9_main/sub_200BA84_0200BA84.c
- docs/function_notes/agent_00.md:387 MB child: sets the state callback pointer
sub_200BAA8
export/plan0/arm9_main/sub_200BAA8_0200BAA8.c
- docs/function_notes/agent_00.md:388 MB child: returns the size of the child work area (0x5F20)
sub_200BAB0
export/plan0/arm9_main/sub_200BAB0_0200BAB0.c
- docs/function_notes/agent_00.md:389 MB child: stops scanning, clears flags and reports event 20 (scan finished)
sub_200BAE0
export/plan0/arm9_main/sub_200BAE0_0200BAE0.c
- docs/function_notes/agent_00.md:390 MB child: scan-stop dispatcher by child state: ends connection, scan or handshake accordingly
sub_200BB98
export/plan0/arm9_main/sub_200BB98_0200BB98.c
- docs/function_notes/agent_00.md:391 MB child init: clears the 0x5F20-byte work area, copies the 22-byte user info, sets up the scan work and callbacks
sub_200BC0C
export/plan0/arm9_main/sub_200BC0C_0200BC0C.c
- docs/function_notes/agent_00.md:392 MB child: wrapper calling WM end/reset (sub_214358C) with args (1,0,0)
sub_200BC1C
export/plan0/arm9_main/sub_200BC1C_0200BC1C.c
- docs/function_notes/agent_00.md:393 MB child: WM_SetMPData completion callback: clears the sending flag and reports events 8/18/41 (success/error) plus 25 to the user callback
sub_200BC78
export/plan0/arm9_main/sub_200BC78_0200BC78.c
- docs/function_notes/agent_00.md:394 MB child: sends an MP data frame (WM_SetMPData, sub_2144048) from a buffer when the child is ready
sub_200BCD8
export/plan0/arm9_main/sub_200BCD8_0200BCD8.c
- docs/function_notes/agent_00.md:395 MB child: WM callback: reports event 9 when the result code is 21 (disconnected)
sub_200BD0C
export/plan0/arm9_main/sub_200BD0C_0200BD0C.c
- docs/function_notes/agent_00.md:396 MB child: true if the child is idle and ready to send (state 1, not sending, no pending)
sub_200BD34
export/plan0/arm9_main/sub_200BD34_0200BD34.c
- docs/function_notes/agent_00.md:397 MB child: WM callback: forwards a failed result, or event 15 on success, to the user callback
sub_200BD7C
export/plan0/arm9_main/sub_200BD7C_0200BD7C.c
- docs/function_notes/agent_00.md:398 MB child: starts WM connect (sub_2143DD0) and reports a failure result
sub_200BE00
export/plan0/arm9_main/sub_200BE00_0200BE00.c
- docs/function_notes/agent_00.md:399 MB child: sets the "connecting" flag, issues sub_2143DD0, clears flag and reports on failure
sub_200BE44
export/plan0/arm9_main/sub_200BE44_0200BE44.c
- docs/function_notes/agent_00.md:400 MB child: WM connect result callback: reports errors, or on success marks connected and raises events 20 and 25
sub_200BEF8
export/plan0/arm9_main/sub_200BEF8_0200BEF8.c
- docs/function_notes/agent_00.md:401 MB child: starts WM_StartConnect to the parent with the stored parameters (sub_2144230) and reports failure as event 14
sub_200BF90
export/plan0/arm9_main/sub_200BF90_0200BF90.c
- docs/function_notes/agent_00.md:402 MB child: WM callback for connect completion: reports event 11, 6 or 10 by status
sub_200C008
export/plan0/arm9_main/sub_200C008_0200C008.c
- docs/function_notes/agent_00.md:403 MB child: sets up the child receive buffer sizes from the parent's packet sizes and starts WM (sub_21437D8)
sub_200C090
export/plan0/arm9_main/sub_200C090_0200C090.c
- docs/function_notes/agent_00.md:404 MB child: stores the user callback pointer under an interrupt lock
sub_200C0AC
export/plan0/arm9_main/sub_200C0AC_0200C0AC.c
- docs/function_notes/agent_00.md:405 MB child: stores the work-area pointer and clears its state fields
sub_200C0D8
export/plan0/arm9_main/sub_200C0D8_0200C0D8.c
- docs/function_notes/agent_00.md:406 MB: decodes a parent-to-child message from bytes (types 1..6, type 4 has two 16-bit fields)
sub_200C12C
export/plan0/arm9_main/sub_200C12C_0200C12C.c
- docs/function_notes/agent_00.md:407 MB: stores a packet into the next slot of a ring of fixed-size entries and returns the slot index
sub_200C16C
export/plan0/arm9_main/sub_200C16C_0200C16C.c
- docs/function_notes/agent_00.md:408 MB: encodes a child-to-parent message (types 7..11) into bytes, with payload copy for types 7 and 9
sub_200C20C
export/plan0/arm9_main/sub_200C20C_0200C20C.c
- docs/function_notes/agent_00.md:409 MB parent: true when all expected fragment bits are set for child a1
sub_200C25C
export/plan0/arm9_main/sub_200C25C_0200C25C.c
- docs/function_notes/agent_00.md:410 MB parent: stores a received fragment for child a1 in its 32-byte buffer; returns the buffer when complete, else 0
sub_200C2E0
export/plan0/arm9_main/sub_200C2E0_0200C2E0.c
- docs/function_notes/agent_00.md:411 MB parent: decodes a child-to-parent message (types 7, 8, 9) and handles fragment assembly
sub_200C3A4
export/plan0/arm9_main/sub_200C3A4_0200C3A4.c
- docs/function_notes/agent_00.md:412 MB: encodes a parent-to-child message (types 1..6) into bytes (type 4 has two 16-bit fields)
sub_200C3FC
export/plan0/arm9_main/sub_200C3FC_0200C3FC.c
- docs/function_notes/agent_00.md:413 MB parent: clears child a1's reassembly buffer and fragment bits
sub_200C430
export/plan0/arm9_main/sub_200C430_0200C430.c
- docs/function_notes/agent_00.md:414 MB parent: sets the reassembly buffer pointer and zeroes it (0x21C bytes)
sub_200C448
export/plan0/arm9_main/sub_200C448_0200C448.c
- docs/function_notes/agent_00.md:415 MB: computes fragment payload size (a1-2) and the number of fragments needed for 30 bytes
sub_200C46C
export/plan0/arm9_main/sub_200C46C_0200C46C.c
- docs/function_notes/agent_00.md:416 retries a PXI send (command 13) until it succeeds, yielding with SWI 3 between tries
sub_200C4A4
export/plan0/arm9_main/sub_200C4A4_0200C4A4.c
- docs/function_notes/agent_00.md:417 unlocks the card bus after sub_200C4C0 (restores interrupts, releases the lock)
sub_200C4C0
export/plan0/arm9_main/sub_200C4C0_0200C4C0.c
- docs/function_notes/agent_00.md:418 locks the card/cartridge bus: disables interrupts, tries to take the hardware lock until free
sub_200C508
export/plan0/arm9_main/sub_200C508_0200C508.c
- docs/function_notes/agent_00.md:419 writes the saved bus-ownership bits back to EXMEMCNT (0x4000204)
sub_200C534
export/plan0/arm9_main/sub_200C534_0200C534.c
- docs/function_notes/agent_00.md:420 saves the EXMEMCNT bus-ownership bits and sets them to give the ARM9 access
sub_200C568
export/plan0/arm9_main/sub_200C568_0200C568.c
- docs/function_notes/agent_00.md:421 CTRDG: checks whether the GBA-slot cartridge header matches the saved one (game code, version, checksum); returns 0 if changed
sub_200C620
export/plan0/arm9_main/sub_200C620_0200C620.c
- docs/function_notes/agent_00.md:422 CTRDG: init step: BIOS CpuSet-type call then stores the result
sub_200C648
export/plan0/arm9_main/sub_200C648_0200C648.c
- docs/function_notes/agent_00.md:423 CTRDG: waits for the ARM7 (PXI command 2) and then halts (no return)
sub_200C65C
export/plan0/arm9_main/sub_200C65C_0200C65C.c
- docs/function_notes/agent_00.md:424 CTRDG PXI callback: checks the message tag is 0x11 and calls the registered callback; halts on mismatch
sub_200C690
export/plan0/arm9_main/sub_200C690_0200C690.c
- docs/function_notes/agent_00.md:425 CTRDG PXI callback: checks tag is 1 and sets the "ARM7 ready" flag
sub_200C6B8
export/plan0/arm9_main/sub_200C6B8_0200C6B8.c
- docs/function_notes/agent_00.md:426 CTRDG_Init: reads the cartridge header (64 words by DMA 1) into a buffer, copies game code to 0x027FFC30, and sends the init request to ARM7
sub_200C7F4
export/plan0/arm9_main/sub_200C7F4_0200C7F4.c
- docs/function_notes/agent_00.md:427 CTRDG_Init: takes the PXI channel, registers callbacks (0x200C691, 0x200C65D), runs the cartridge header read (sub_200C6B8)
sub_200C858
export/plan0/arm9_main/sub_200C858_0200C858.c
- docs/function_notes/agent_00.md:428 bounded string copy (strncpy-like): copies up to n-1 bytes then zero terminates
sub_200C894
export/plan0/arm9_main/sub_200C894_0200C894.c
- docs/function_notes/agent_00.md:429 OS_WaitIrq: optionally clears the given IRQ flag bits in the BIOS IRQ-check word (0x027E3FF8), then sleeps (thread wait) until any of them is set
sub_200C944
export/plan0/arm9_main/sub_200C944_0200C944.c
- docs/function_notes/agent_00.md:432 OS timer-style interrupt dispatch wrapper: calls IRQ-handler body with index 4
sub_200C984
export/plan0/arm9_main/sub_200C984_0200C984.c
- docs/function_notes/agent_00.md:433 same wrapper with index 0
sub_200C994
export/plan0/arm9_main/sub_200C994_0200C994.c
- docs/function_notes/agent_00.md:434 OS interrupt thread-wake handler: calls the registered per-source callback, sets the BIOS IRQ-check flag and wakes waiting threads
sub_200CA34
export/plan0/arm9_main/sub_200CA34_0200CA34.c
- docs/function_notes/agent_00.md:436 writes two fixed 32-bit magic values into the DTCM IRQ stack-guard area (0x027E0FE8..)
sub_200CA68
export/plan0/arm9_main/sub_200CA68_0200CA68.c
- docs/function_notes/agent_00.md:437 OS_SetIrqMask-style: with IME off swaps in a new IF value (acknowledge) and returns the old one
sub_200CA9C
export/plan0/arm9_main/sub_200CA9C_0200CA9C.c
- docs/function_notes/agent_00.md:438 OS_DisableIrqMask: clears the given bits in IE (0x4000210) with IME off, returns the old IE
sub_200CAE4
export/plan0/arm9_main/sub_200CAE4_0200CAE4.c
- docs/function_notes/agent_00.md:439 OS_EnableIrqMask: sets the given bits in IE, returns the old IE
sub_200CB1C
export/plan0/arm9_main/sub_200CB1C_0200CB1C.c
- docs/function_notes/agent_00.md:440 OS_SetIrqMask: writes IE directly, returns the old value
sub_200CB50
export/plan0/arm9_main/sub_200CB50_0200CB50.c
- docs/function_notes/agent_00.md:441 OS_SetIrqFunction for DMA-type sources: stores callback and argument for source a1 and enables its IE bit (a1+3)
sub_200CB9C
export/plan0/arm9_main/sub_200CB9C_0200CB9C.c
- docs/function_notes/agent_00.md:442 sets callback and argument for source a1 and enables IE bit (a1+8), remembering whether it was already enabled
sub_200CC74
export/plan0/arm9_main/sub_200CC74_0200CC74.c
- docs/function_notes/agent_00.md:443 OS_SetIrqFunction: installs handler a2 for each IRQ source set in the mask (22 sources), routing special ones to the per-source tables
sub_200CD04
export/plan0/arm9_main/sub_200CD04_0200CD04.c
- docs/function_notes/agent_00.md:444 clears the first two words of the IRQ DTCM table (0x027E0000)
sub_200CD1C
export/plan0/arm9_main/sub_200CD1C_0200CD1C.c
- docs/function_notes/agent_00.md:445 thunk to sub_200CE80
sub_200CD28
export/plan0/arm9_main/sub_200CD28_0200CD28.c
- docs/function_notes/agent_00.md:446 OS_AllocLock/OS_GetLockID: finds and claims a free lock id from the bitmaps at 0x027FFFB0 (ids 64..127); returns -3 if none
sub_200CD80
export/plan0/arm9_main/sub_200CD80_0200CD80.c
- docs/function_notes/agent_00.md:447 OS_FreeLockID: releases a lock id back to the shared bitmap
sub_200CDB0
export/plan0/arm9_main/sub_200CDB0_0200CDB0.c
- docs/function_notes/agent_00.md:448 OS_Wait: calls the delay routine with 4096 loops
sub_200CDC0
export/plan0/arm9_main/sub_200CDC0_0200CDC0.c
- docs/function_notes/agent_00.md:449 getter: 16-bit lock owner field (+4) of a lock struct
sub_200CDC8
export/plan0/arm9_main/sub_200CDC8_0200CDC8.c
- docs/function_notes/agent_00.md:450 sets bit 0x800 in EXMEMCNT (0x4000204)
sub_200CDE0
export/plan0/arm9_main/sub_200CDE0_0200CDE0.c
- docs/function_notes/agent_00.md:451 clears bit 0x800 in EXMEMCNT
sub_200CDF8
export/plan0/arm9_main/sub_200CDF8_0200CDF8.c
- docs/function_notes/agent_00.md:452 OS_LockCartridge-type: lock helper using the shared lock at 0x027FFFE0 with the set function
sub_200CE14
export/plan0/arm9_main/sub_200CE14_0200CE14.c
- docs/function_notes/agent_00.md:453 OS unlock helper for the same lock using the clear function
sub_200CE30
export/plan0/arm9_main/sub_200CE30_0200CE30.c
- docs/function_notes/agent_00.md:454 sets bit 0x80 in EXMEMCNT (card bus owner)
sub_200CE48
export/plan0/arm9_main/sub_200CE48_0200CE48.c
- docs/function_notes/agent_00.md:455 clears bit 0x80 in EXMEMCNT
sub_200CE60
export/plan0/arm9_main/sub_200CE60_0200CE60.c
- docs/function_notes/agent_00.md:456 OS_LockCard-type: lock helper using 0x027FFFE8 with the clear function (interrupt-safe)
sub_200CE80
export/plan0/arm9_main/sub_200CE80_0200CE80.c
- docs/function_notes/agent_00.md:457 OS lock helper using 0x027FFFE8 with the set function (interrupt-safe)
sub_200CEA0
export/plan0/arm9_main/sub_200CEA0_0200CEA0.c
- docs/function_notes/agent_00.md:458 OS_LockByWord: takes the hardware lock (sub_214D33C), runs the callback on success, records owner id; disables IRQs first
sub_200CF20
export/plan0/arm9_main/sub_200CF20_0200CF20.c
- docs/function_notes/agent_00.md:459 OS_LockByWord variant with no IRQ-safe flag (0)
sub_200CFC0
export/plan0/arm9_main/sub_200CFC0_0200CFC0.c
- docs/function_notes/agent_00.md:460 OS_UnlockByWord variant with no IRQ-safe flag (0)
sub_200D028
export/plan0/arm9_main/sub_200D028_0200D028.c
- docs/function_notes/agent_00.md:461 OS shared-memory init: sets up the lock structures at 0x027FFFF0, clears the work area, owns EXMEMCNT bits and locks IDs 126/127
sub_200D118
export/plan0/arm9_main/sub_200D118_0200D118.c
- docs/function_notes/agent_00.md:462 vsnprintf core: formats a string from a format and a va_list (flags, width, precision, h/l/ll, %s %c %d %u %x %o %p %n)
sub_200D9E0
export/plan0/arm9_main/sub_200D9E0_0200D9E0.c
- docs/function_notes/agent_00.md:463 OS_SPrintf-style wrapper: calls sub_200D118 with the caller's variable arguments
sub_200DA10
export/plan0/arm9_main/sub_200DA10_0200DA10.c
- docs/function_notes/agent_00.md:464 vsnprintf-like wrapper: formats with unlimited length (0x7FFFFFFF) via sub_200D118
sub_200DA28
export/plan0/arm9_main/sub_200DA28_0200DA28.c
- docs/function_notes/agent_00.md:465 OS_SPrintf: formats the variable arguments into a buffer (calls sub_200DA10)
sub_200DA58
export/plan0/arm9_main/sub_200DA58_0200DA58.c
- docs/function_notes/agent_00.md:466 sprintf output helper: appends a bytes of a source string to the bounded output buffer
sub_200DAB8
export/plan0/arm9_main/sub_200DAB8_0200DAB8.c
- docs/function_notes/agent_00.md:467 sprintf output helper: appends a repeated fill character (padding)
sub_200DB20
export/plan0/arm9_main/sub_200DB20_0200DB20.c
- docs/function_notes/agent_00.md:468 sprintf output helper: appends one character
sub_200DB4C
export/plan0/arm9_main/sub_200DB4C_0200DB4C.c
- docs/function_notes/agent_00.md:469 OS_GetThreadInfo-like getter: returns the pointer at 0x0216FF38
sub_200DB5C
export/plan0/arm9_main/sub_200DB5C_0200DB5C.c
- docs/function_notes/agent_00.md:470 OS_SetThreadDestructor: stores a callback at thread +180
sub_200DB64
export/plan0/arm9_main/sub_200DB64_0200DB64.c
- docs/function_notes/agent_00.md:471 OS thread scheduler lock: decrements the scheduler-disable count (returns the old count)
sub_200DB9C
export/plan0/arm9_main/sub_200DB9C_0200DB9C.c
- docs/function_notes/agent_00.md:472 OS thread scheduler lock: increments the count unless saturated (returns the old value)
sub_200DBD4
export/plan0/arm9_main/sub_200DBD4_0200DBD4.c
- docs/function_notes/agent_00.md:473 OS idle thread body: loops forever on the halt/wait function (never returns)
sub_200DBE8
export/plan0/arm9_main/sub_200DBE8_0200DBE8.c
- docs/function_notes/agent_00.md:474 OS_SetSwitchThreadCallback: stores the thread-switch callback, returns the previous one
sub_200DC1C
export/plan0/arm9_main/sub_200DC1C_0200DC1C.c
- docs/function_notes/agent_00.md:475 OS thread exit helper: clears the thread pointer's extra field and calls the thread-end routine
sub_200DC3C
export/plan0/arm9_main/sub_200DC3C_0200DC3C.c
- docs/function_notes/agent_00.md:476 OS_ExitThread/OS_Halt-like: marks the current thread's context, releases it and yields forever
sub_200DCD8
export/plan0/arm9_main/sub_200DCD8_0200DCD8.c
- docs/function_notes/agent_00.md:477 OS_GetThreadPriority: getter, thread +112
sub_200DCE0
export/plan0/arm9_main/sub_200DCE0_0200DCE0.c
- docs/function_notes/agent_00.md:478 OS_SetThreadPriority: re-sorts the thread in the priority-ordered thread list and reschedules
sub_200DD94
export/plan0/arm9_main/sub_200DD94_0200DD94.c
- docs/function_notes/agent_00.md:479 OS_YieldThread: moves the current thread behind other threads of the same priority and reschedules
sub_200DE50
export/plan0/arm9_main/sub_200DE50_0200DE50.c
- docs/function_notes/agent_00.md:480 OS_Rescheduler: picks the first runnable thread (state 1), calls the switch callback and switches context
sub_200DF3C
export/plan0/arm9_main/sub_200DF3C_0200DF3C.c
- docs/function_notes/agent_00.md:481 finds the first thread in the sorted list whose state is runnable (1), or null
sub_200DF68
export/plan0/arm9_main/sub_200DF68_0200DF68.c
- docs/function_notes/agent_00.md:482 OS_WakeupThreadDirect: marks the thread runnable (state 1) and reschedules
sub_200DF9C
export/plan0/arm9_main/sub_200DF9C_0200DF9C.c
- docs/function_notes/agent_00.md:483 OS_WakeupThread: wakes every thread waiting in a thread queue and reschedules
sub_200E01C
export/plan0/arm9_main/sub_200E01C_0200E01C.c
- docs/function_notes/agent_00.md:484 OS_SleepThread: puts the current thread on a wait queue (priority sorted), marks it waiting and reschedules
sub_200E070
export/plan0/arm9_main/sub_200E070_0200E070.c
- docs/function_notes/agent_00.md:485 thread state check: true if thread state is 2 (terminated)
sub_200E084
export/plan0/arm9_main/sub_200E084_0200E084.c
- docs/function_notes/agent_00.md:486 OS_JoinThread: sleeps on the thread's join queue unless it has already terminated
sub_200E0C0
export/plan0/arm9_main/sub_200E0C0_0200E0C0.c
- docs/function_notes/agent_00.md:487 OS_ReleaseThreadResources: calls the release routine for a thread's stack/context if it has one
sub_200E0EC
export/plan0/arm9_main/sub_200E0EC_0200E0EC.c
- docs/function_notes/agent_00.md:488 OS_ExitThread for another thread: unlinks and terminates it, wakes its joiners, then reschedules
sub_200E160
export/plan0/arm9_main/sub_200E160_0200E160.c
- docs/function_notes/agent_00.md:489 OS_ExitThread for the current thread: terminates, wakes joiners, reschedules (no return)
sub_200E1AC
export/plan0/arm9_main/sub_200E1AC_0200E1AC.c
- docs/function_notes/agent_00.md:490 thread entry return handler: runs the thread destructor then exits the thread
sub_200E1E0
export/plan0/arm9_main/sub_200E1E0_0200E1E0.c
- docs/function_notes/agent_00.md:491 unclear: tail jump through a stacked function pointer
sub_200E1F0
export/plan0/arm9_main/sub_200E1F0_0200E1F0.c
- docs/function_notes/agent_00.md:492 OS_InitThread-like: sets a thread's exit routine (0x0200E1AC), argument and priority, marks it ready and reschedules
sub_200E24C
export/plan0/arm9_main/sub_200E24C_0200E24C.c
- docs/function_notes/agent_00.md:493 unclear: tail jump through a stacked function pointer
sub_200E260
export/plan0/arm9_main/sub_200E260_0200E260.c
- docs/function_notes/agent_00.md:494 idle/exit trampoline: makes the head of the thread list exit via sub_200E1F0
sub_200E28C
export/plan0/arm9_main/sub_200E28C_0200E28C.c
- docs/function_notes/agent_00.md:495 OS_CreateThread: initialises a thread struct (id, priority, stack bounds, guard magic, entry), links it in the thread list and clears its queues
sub_200E388
export/plan0/arm9_main/sub_200E388_0200E388.c
- docs/function_notes/agent_00.md:496 OS_InitThread: builds the main thread and idle thread structures, stack guard words and links them in the thread list
sub_200E4E4
export/plan0/arm9_main/sub_200E4E4_0200E4E4.c
- docs/function_notes/agent_00.md:497 unlinks a thread from the global thread list
sub_200E52C
export/plan0/arm9_main/sub_200E52C_0200E52C.c
- docs/function_notes/agent_00.md:498 inserts a thread into the global list sorted by priority
sub_200E594
export/plan0/arm9_main/sub_200E594_0200E594.c
- docs/function_notes/agent_00.md:499 pops the first element of a singly linked queue (next at +16)
sub_200E5C4
export/plan0/arm9_main/sub_200E5C4_0200E5C4.c
- docs/function_notes/agent_00.md:500 pops the first thread from a thread queue (links at +124/+128), clearing its queue pointer
sub_200E5F8
export/plan0/arm9_main/sub_200E5F8_0200E5F8.c
- docs/function_notes/agent_00.md:501 inserts a thread into a priority-ordered thread queue (links at +124/+128)
sub_200E670
export/plan0/arm9_main/sub_200E670_0200E670.c
- docs/function_notes/agent_00.md:502 returns the next thread id (increments the counter at 0x0216FF2C)
sub_200E688
export/plan0/arm9_main/sub_200E688_0200E688.c
- docs/function_notes/agent_00.md:503 OS_InitContext: zeroes a thread's saved register block and sets CPSR (ARM or Thumb) and stack pointer
sub_200E6EC
export/plan0/arm9_main/sub_200E6EC_0200E6EC.c
- docs/function_notes/agent_00.md:504 OS_SaveContext: saves the current CPU registers/CPSR into a thread context block and returns 0 (setjmp-like)
sub_200E738
export/plan0/arm9_main/sub_200E738_0200E738.c
- docs/function_notes/agent_00.md:505 OS_LoadContext: restores registers and CPSR from a thread context and jumps to its saved PC (longjmp-like)
sub_200E77C
export/plan0/arm9_main/sub_200E77C_0200E77C.c
- docs/function_notes/agent_00.md:506 checks whether a flag word at 0x027FFC10 (or fallback) equals 1 (hardware/launch mode check)
sub_200E7B0
export/plan0/arm9_main/sub_200E7B0_0200E7B0.c
- docs/function_notes/agent_00.md:507 detects whether the GBA slot holds a cartridge with the "NINTENDO" logo pattern (0x08000000/04), under the card lock; returns a type flag
sub_200E884
export/plan0/arm9_main/sub_200E884_0200E884.c
- docs/function_notes/agent_00.md:508 OS_GetConsoleType: classifies the console (retail DS, debugger, emulator), caches the result at 0x021617CC
sub_200E8FC
export/plan0/arm9_main/sub_200E8FC_0200E8FC.c
- docs/function_notes/agent_00.md:509 stub returning 0 (platform check)
sub_200E904
export/plan0/arm9_main/sub_200E904_0200E904.c
- docs/function_notes/agent_00.md:510 OS message queue peek/receive without removing: returns the head message, blocking on the queue if the flag bit 0 is set
sub_200E988
export/plan0/arm9_main/sub_200E988_0200E988.c
- docs/function_notes/agent_00.md:511 OS_SendMessage (head insertion/ordered): pushes a message to the queue, blocking while full when requested
sub_200EA3C
export/plan0/arm9_main/sub_200EA3C_0200EA3C.c
- docs/function_notes/agent_00.md:512 OS_ReceiveMessage: removes the oldest message from the queue, blocking while empty when requested, wakes senders
sub_200EAE8
export/plan0/arm9_main/sub_200EAE8_0200EAE8.c
- docs/function_notes/agent_00.md:513 OS_SendMessage: appends a message at the tail of the ring buffer, blocking while full when requested, wakes receivers
sub_200EB90
export/plan0/arm9_main/sub_200EB90_0200EB90.c
- docs/function_notes/agent_00.md:514 OS_InitMessageQueue: sets the buffer pointer, capacity, and clears head/count
sub_200EBC0
export/plan0/arm9_main/sub_200EBC0_0200EBC0.c
- docs/function_notes/agent_00.md:515 unlinks a mutex from a thread's owned-mutex list (links at +16/+20)
sub_200EBE4
export/plan0/arm9_main/sub_200EBE4_0200EBE4.c
- docs/function_notes/agent_00.md:516 appends a mutex to the end of a thread's owned-mutex list
sub_200EC08
export/plan0/arm9_main/sub_200EC08_0200EC08.c
- docs/function_notes/agent_00.md:517 OS_TryLockMutex: takes the mutex if free (or already owned: counts recursion), returns whether it got it
sub_200EC7C
export/plan0/arm9_main/sub_200EC7C_0200EC7C.c
- docs/function_notes/agent_00.md:518 OS_UnlockAllMutex: releases and wakes every mutex owned by a thread
sub_200ECC4
export/plan0/arm9_main/sub_200ECC4_0200ECC4.c
- docs/function_notes/agent_00.md:519 OS_UnlockMutex: decrements the lock count and releases the mutex when it reaches zero, waking waiters
sub_200ED34
export/plan0/arm9_main/sub_200ED34_0200ED34.c
- docs/function_notes/agent_00.md:520 OS_LockMutex: takes the mutex or sleeps on it (priority-inheriting) until free
sub_200EDC0
export/plan0/arm9_main/sub_200EDC0_0200EDC0.c
- docs/function_notes/agent_00.md:521 OS_InitMutex: clears the queue head/tail, owner and count
sub_200EDDC
export/plan0/arm9_main/sub_200EDDC_0200EDDC.c
- docs/function_notes/agent_00.md:522 DC_FlushAll-like: cleans the whole data cache by index/way (CP15 c7 c10 2)
sub_200EE08
export/plan0/arm9_main/sub_200EE08_0200EE08.c
- docs/function_notes/agent_00.md:523 DC_FlushAll/Invalidate: cleans and invalidates the whole data cache by index/way
sub_200EE3C
export/plan0/arm9_main/sub_200EE3C_0200EE3C.c
- docs/function_notes/agent_00.md:524 DC_InvalidateRange: invalidates data-cache lines for an address range (32-byte lines)
sub_200EE58
export/plan0/arm9_main/sub_200EE58_0200EE58.c
- docs/function_notes/agent_00.md:525 DC_StoreRange: writes back data-cache lines for an address range
sub_200EE74
export/plan0/arm9_main/sub_200EE74_0200EE74.c
- docs/function_notes/agent_00.md:526 DC_FlushRange: cleans and invalidates data-cache lines for a range, with write-buffer drain
sub_200EE98
export/plan0/arm9_main/sub_200EE98_0200EE98.c
- docs/function_notes/agent_00.md:527 DC_WaitWriteBufferEmpty: drains the write buffer (CP15 c7 c10 4)
sub_200EEA4
export/plan0/arm9_main/sub_200EEA4_0200EEA4.c
- docs/function_notes/agent_00.md:528 IC_InvalidateRange: invalidates instruction-cache lines for an address range
sub_200EEC0
export/plan0/arm9_main/sub_200EEC0_0200EEC0.c
- docs/function_notes/agent_00.md:529 OS_Init: initialises the OS subsystems (arena, interrupts, locks, thread system, tick, alarm, cartridge...) in order
sub_200EF10
export/plan0/arm9_main/sub_200EF10_0200EF10.c
- docs/function_notes/agent_00.md:530 clears the "TCM/arena configured" flag at 0x02170198
sub_200EF24
export/plan0/arm9_main/sub_200EF24_0200EF24.c
- docs/function_notes/agent_00.md:531 OS_SetArenaHi: stores the high bound of arena a1 (table at 0x027FFDA0+)
sub_200EF38
export/plan0/arm9_main/sub_200EF38_0200EF38.c
- docs/function_notes/agent_00.md:532 OS_SetArenaLo: stores the low bound of arena a1 (table at 0x027FFDC4+)
sub_200EF4C
export/plan0/arm9_main/sub_200EF4C_0200EF4C.c
- docs/function_notes/agent_00.md:533 OS_GetInitArenaHi: default high bound for arena a1 (main RAM, ITCM/DTCM, WRAM, shared)
sub_200F038
export/plan0/arm9_main/sub_200F038_0200F038.c
- docs/function_notes/agent_00.md:534 OS_GetInitArenaLo: default low bound for arena a1 (main RAM, DTCM, WRAM)
sub_200F168
export/plan0/arm9_main/sub_200F168_0200F168.c
- docs/function_notes/agent_00.md:535 OS_GetArenaHi: reads the high bound of arena a1
sub_200F17C
export/plan0/arm9_main/sub_200F17C_0200F17C.c
- docs/function_notes/agent_00.md:536 OS_GetArenaLo: reads the low bound of arena a1
sub_200F190
export/plan0/arm9_main/sub_200F190_0200F190.c
- docs/function_notes/agent_00.md:537 OS_InitArena step: sets default bounds for arena 2 and programs MPU region 1 (0x0200002B) and region 2 (0x023E0021) when not in special mode
sub_200F210
export/plan0/arm9_main/sub_200F210_0200F210.c
- docs/function_notes/agent_00.md:538 OS_InitArena: sets lo/hi bounds for all arenas (0, 3, 4, 5, 6; arena 2 cleared)
sub_200F328
export/plan0/arm9_main/sub_200F328_0200F328.c
- docs/function_notes/agent_00.md:539 reads the DTCM base (CP15 c9 c1 0 masked)
sub_200F33C
export/plan0/arm9_main/sub_200F33C_0200F33C.c
- docs/function_notes/agent_00.md:540 enables the MPU/protection unit (CP15 c1 bit 0)
sub_200F34C
export/plan0/arm9_main/sub_200F34C_0200F34C.c
- docs/function_notes/agent_00.md:541 disables the MPU/protection unit
sub_200F35C
export/plan0/arm9_main/sub_200F35C_0200F35C.c
- docs/function_notes/agent_00.md:542 writes CP15 protection region 1 setting
sub_200F364
export/plan0/arm9_main/sub_200F364_0200F364.c
- docs/function_notes/agent_00.md:543 writes CP15 protection region 2 setting
sub_200F36C
export/plan0/arm9_main/sub_200F36C_0200F36C.c
- docs/function_notes/hk_00.md:8 fatal exception handler: calls optional hook at off_200F3D8, saves args and return address to a context block, then spins forever.
sub_200F3CC
export/plan0/arm9_main/sub_200F3CC_0200F3CC.c
- docs/function_notes/hk_00.md:9 thunk that calls through an uninitialized function pointer (sp-relative), probably a stripped indirect call.
sub_200F3E0
export/plan0/arm9_main/sub_200F3E0_0200F3E0.c
- docs/function_notes/NEEDS_REVIEW.md:5 probably exception/context helper: calls sub_200F3F4 (save CPU context), then passes its result to sub_200F484.
- docs/function_notes/hk_00.md:10 probably exception/context helper: calls sub_200F3F4 (save CPU context), then passes its result to sub_200F484.
sub_200F3F4
export/plan0/arm9_main/sub_200F3F4_0200F3F4.c
- docs/function_notes/NEEDS_REVIEW.md:6 probably saves full CPU state (r0-r12, lr, sp, CPSR, SPSR) into a context struct at off_200F480 and switches CPSR mode.
- docs/function_notes/hk_00.md:11 probably saves full CPU state (r0-r12, lr, sp, CPSR, SPSR) into a context struct at off_200F480 and switches CPSR mode.
sub_200F484
export/plan0/arm9_main/sub_200F484_0200F484.c
- docs/function_notes/hk_00.md:12 if callback at off_200F4E0 is set, restores saved CPSR, calls sub_200F33C, invokes callback with off_200F4EC, then returns sub_200F34C; else 0.
sub_200F4F0
export/plan0/arm9_main/sub_200F4F0_0200F4F0.c
- docs/function_notes/NEEDS_REVIEW.md:7 probably boot/debug init: range-checks pointer at off_200F56C (0x2600000..0x2800000), consults sub_200E884 (console type), installs handler, clears off_200F57C.
- docs/function_notes/hk_00.md:13 probably boot/debug init: range-checks pointer at off_200F56C (0x2600000..0x2800000), consults sub_200E884 (console type), installs handler, clears off_200F57C.
sub_200F580
export/plan0/arm9_main/sub_200F580_0200F580.c
- docs/function_notes/hk_00.md:14 sets bit (1<<a1) in the 16-bit flag word at off_200F598 and returns the new value.
sub_200F59C
export/plan0/arm9_main/sub_200F59C_0200F59C.c
- docs/function_notes/hk_00.md:15 getter returning the 16-bit word at off_200F5A8.
sub_200F5AC
export/plan0/arm9_main/sub_200F5AC_0200F5AC.c
- docs/function_notes/NEEDS_REVIEW.md:8 probably reads a hardware timer snapshot: sub_200FCA0 (IRQs off), 16-bit counter at off_200F64C plus overflow count at off_200F650 (+1 if IRQ bit 3 pending).
- docs/function_notes/hk_00.md:16 probably reads a hardware timer snapshot: sub_200FCA0 (IRQs off), 16-bit counter at off_200F64C plus overflow count at off_200F650 (+1 if IRQ bit 3 pending).
sub_200F65C
export/plan0/arm9_main/sub_200F65C_0200F65C.c
- docs/function_notes/NEEDS_REVIEW.md:9 probably timer reset: increments 64-bit tick counter at *off_200F6D0; if flag at off_200F6D4 is set, writes 0xC1 to timer control; calls sub_200CB50.
- docs/function_notes/hk_00.md:17 probably timer reset: increments 64-bit tick counter at *off_200F6D0; if flag at off_200F6D4 is set, writes 0xC1 to timer control; calls sub_200CB50.
sub_200F6E4
export/plan0/arm9_main/sub_200F6E4_0200F6E4.c
- docs/function_notes/hk_00.md:18 getter returning the 16-bit flag at off_200F6F0.
sub_200F6F4
export/plan0/arm9_main/sub_200F6F4_0200F6F4.c
- docs/function_notes/NEEDS_REVIEW.md:10 probably one-time start of timer channel 0: sets flag, sub_200F580(0), writes 0xC1 timer control, registers handler via sub_200CC74(8,...), enables IRQ 8.
- docs/function_notes/hk_00.md:19 probably one-time start of timer channel 0: sets flag, sub_200F580(0), writes 0xC1 timer control, registers handler via sub_200CC74(8,...), enables IRQ 8.
sub_200F790
export/plan0/arm9_main/sub_200F790_0200F790.c
- docs/function_notes/hk_00.md:20 thin wrapper that calls sub_200F7A0.
sub_200F7A0
export/plan0/arm9_main/sub_200F7A0_0200F7A0.c
- docs/function_notes/NEEDS_REVIEW.md:11 probably timer IRQ handler: reads count via sub_200F5AC, pops expired alarms from the list at off_200F8B4 and calls their callbacks, re-arms via sub_200FB80.
- docs/function_notes/hk_00.md:21 probably timer IRQ handler: reads count via sub_200F5AC, pops expired alarms from the list at off_200F8B4 and calls their callbacks, re-arms via sub_200FB80.
sub_200F8B8
export/plan0/arm9_main/sub_200F8B8_0200F8B8.c
- docs/function_notes/NEEDS_REVIEW.md:12 probably removes an alarm/timer node from the doubly linked list at off_200F94C under IRQ-off (sub_200FCA0/sub_200FCB4), clearing its fields.
- docs/function_notes/hk_00.md:22 probably removes an alarm/timer node from the doubly linked list at off_200F94C under IRQ-off (sub_200FCA0/sub_200FCB4), clearing its fields.
sub_200F950
export/plan0/arm9_main/sub_200F950_0200F950.c
- docs/function_notes/NEEDS_REVIEW.md:13 probably starts a timer/alarm: stores callback (a4) and arg (a5), computes expiry as now (sub_200F5AC) plus (a2,a3), inserts via sub_200F9C8.
- docs/function_notes/hk_00.md:23 probably starts a timer/alarm: stores callback (a4) and arg (a5), computes expiry as now (sub_200F5AC) plus (a2,a3), inserts via sub_200F9C8.
sub_200F9C8
export/plan0/arm9_main/sub_200F9C8_0200F9C8.c
- docs/function_notes/NEEDS_REVIEW.md:14 probably inserts a timer node into the expiry-sorted list at off_200FB04 (64-bit expiry at +12); periodic nodes use sub_2132E40; re-arms at head.
- docs/function_notes/hk_00.md:24 probably inserts a timer node into the expiry-sorted list at off_200FB04 (64-bit expiry at +12); periodic nodes use sub_2132E40; re-arms at head.
sub_200FB08
export/plan0/arm9_main/sub_200FB08_0200FB08.c
- docs/function_notes/NEEDS_REVIEW.md:15 probably list-node init: zeroes the link fields at offsets 0 and 8.
- docs/function_notes/hk_00.md:25 probably list-node init: zeroes the link fields at offsets 0 and 8.
sub_200FB18
export/plan0/arm9_main/sub_200FB18_0200FB18.c
- docs/function_notes/hk_00.md:26 getter returning the 16-bit flag at off_200FB24.
sub_200FB28
export/plan0/arm9_main/sub_200FB28_0200FB28.c
- docs/function_notes/NEEDS_REVIEW.md:16 probably one-time init of a second timer channel: sets flag, sub_200F580(1), clears list pointers, disables IRQ mask 16 via sub_200CA9C.
- docs/function_notes/hk_00.md:27 probably one-time init of a second timer channel: sets flag, sub_200F580(1), clears list pointers, disables IRQ mask 16 via sub_200CA9C.
sub_200FB80
export/plan0/arm9_main/sub_200FB80_0200FB80.c
- docs/function_notes/NEEDS_REVIEW.md:17 probably arms the hardware timer for the head alarm: ticks to expiry from sub_200F5AC, inverted 16-bit reload, control 0xC1, enables IRQ 16.
- docs/function_notes/hk_00.md:28 probably arms the hardware timer for the head alarm: ticks to expiry from sub_200F5AC, inverted 16-bit reload, control 0xC1, enables IRQ 16.
sub_200FC1C
export/plan0/arm9_main/sub_200FC1C_0200FC1C.c
- docs/function_notes/NEEDS_REVIEW.md:18 probably one-time init of a third timer/VCount list: sets flag, clears two list pointers, disables IRQ mask 4 via sub_200CA9C(4).
- docs/function_notes/hk_00.md:29 probably one-time init of a third timer/VCount list: sets flag, clears two list pointers, disables IRQ mask 4 via sub_200CA9C(4).
sub_200FC8C
export/plan0/arm9_main/sub_200FC8C_0200FC8C.c
- docs/function_notes/hk_00.md:30 disables IRQs (clears CPSR I bit) and returns the previous I-bit state.
sub_200FCA0
export/plan0/arm9_main/sub_200FCA0_0200FCA0.c
- docs/function_notes/hk_00.md:31 disables IRQs (sets CPSR I bit) and returns the previous I-bit state (critical-section enter).
sub_200FCB4
export/plan0/arm9_main/sub_200FCB4_0200FCB4.c
- docs/function_notes/hk_00.md:32 restores IRQ state: sets CPSR I bit from a1 and returns the previous state (critical-section exit).
sub_200FCCC
export/plan0/arm9_main/sub_200FCCC_0200FCCC.c
- docs/function_notes/hk_00.md:33 disables IRQ and FIQ (sets CPSR I and F bits) and returns the previous bits.
sub_200FCE0
export/plan0/arm9_main/sub_200FCE0_0200FCE0.c
- docs/function_notes/hk_00.md:34 sets CPSR I/F bits from a1 (restore) and returns the previous I/F bits.
sub_200FCF8
export/plan0/arm9_main/sub_200FCF8_0200FCF8.c
- docs/function_notes/hk_00.md:35 returns the current CPU processor mode (CPSR & 0x1F).
sub_200FD04
export/plan0/arm9_main/sub_200FD04_0200FD04.c
- docs/function_notes/hk_00.md:36 CP15 c7 wait-for-interrupt (mcr p15,0,c7,c0,4), halts the CPU until an interrupt.
sub_200FD10
export/plan0/arm9_main/sub_200FD10_0200FD10.c
- docs/function_notes/hk_00.md:37 returns a1 mod 4 via repeated subtraction.
sub_200FD1C
export/plan0/arm9_main/sub_200FD1C_0200FD1C.c
- docs/function_notes/hk_00.md:38 noreturn idle loop: disables IRQs and waits for interrupt forever (halt/panic loop).
sub_200FD30
export/plan0/arm9_main/sub_200FD30_0200FD30.c
- docs/function_notes/NEEDS_REVIEW.md:19 probably init with type check: calls sub_200FD1C (halt) if bits 8-14 of a2 are not 16, else sets flag at off_200FD70 to 1.
- docs/function_notes/hk_00.md:39 probably init with type check: calls sub_200FD1C (halt) if bits 8-14 of a2 are not 16, else sets flag at off_200FD70 to 1.
sub_200FD64
export/plan0/arm9_main/sub_200FD64_0200FD64.c
- docs/function_notes/hk_00.md:40 thunk calling through an uninitialized function pointer (same pattern as sub_200F3CC).
sub_200FD74
export/plan0/arm9_main/sub_200FD74_0200FD74.c
- docs/function_notes/NEEDS_REVIEW.md:20 probably one-time subsystem init: sets flag, calls sub_214D5B8, polls sub_214D79C(12,1) until ready, then sub_214D7C4(12, off_200FDD8).
- docs/function_notes/hk_00.md:41 probably one-time subsystem init: sets flag, calls sub_214D5B8, polls sub_214D79C(12,1) until ready, then sub_214D7C4(12, off_200FDD8).
sub_200FDDC
export/plan0/arm9_main/sub_200FDDC_0200FDDC.c
- docs/function_notes/NEEDS_REVIEW.md:21 probably copies fields from a config record at off_200FE54 (3-bit and 4-bit fields, bytes at +2..+4, +26, +80) into a1, then calls sub_214CFFC twice.
- docs/function_notes/hk_00.md:42 probably copies fields from a config record at off_200FE54 (3-bit and 4-bit fields, bytes at +2..+4, +26, +80) into a1, then calls sub_214CFFC twice.
sub_200FE58
export/plan0/arm9_main/sub_200FE58_0200FE58.c
- docs/function_notes/hk_00.md:43 thin wrapper: calls function pointer at off_200FE6C with dword_200FE70, a1 and 6 (probably a generic 6-arg dispatch).
sub_200FE74
export/plan0/arm9_main/sub_200FE74_0200FE74.c
- docs/function_notes/hk_00.md:44 CLZ wrapper (count leading zeros of a1).
sub_200FE7C
export/plan0/arm9_main/sub_200FE7C_0200FE7C.c
- docs/function_notes/NEEDS_REVIEW.md:22 probably with IRQs off, removes slots whose stored key equals a2 from a bitmap-indexed 16-bit slot table at off_200FF00, scanning with CLZ.
- docs/function_notes/hk_00.md:45 probably with IRQs off, removes slots whose stored key equals a2 from a bitmap-indexed 16-bit slot table at off_200FF00, scanning with CLZ.
sub_200FF04
export/plan0/arm9_main/sub_200FF04_0200FF04.c
- docs/function_notes/NEEDS_REVIEW.md:23 probably claims slots: with IRQs off, returns 0 if any slot in mask a1 holds a key other than a2; else stores key a2 into mask dword_200FFD4 slots, returns 1.
- docs/function_notes/hk_00.md:46 probably claims slots: with IRQs off, returns 0 if any slot in mask a1 holds a key other than a2; else stores key a2 into mask dword_200FFD4 slots, returns 1.
sub_200FFD8
export/plan0/arm9_main/sub_200FFD8_0200FFD8.c
- docs/function_notes/NEEDS_REVIEW.md:24 probably init: clears the flag at off_2010004 and zeroes nine 16-bit entries at off_2010008.
- docs/function_notes/hk_00.md:47 probably init: clears the flag at off_2010004 and zeroes nine 16-bit entries at off_2010008.
sub_201000C
export/plan0/arm9_main/sub_201000C_0201000C.c
- docs/function_notes/NEEDS_REVIEW.md:25 probably builds an 8-word state digest (XOR of global table words and the 16-bit value from sub_200F59C) into a1[0..7].
- docs/function_notes/hk_00.md:48 probably builds an 8-word state digest (XOR of global table words and the 16-bit value from sub_200F59C) into a1[0..7].
sub_20100FC
export/plan0/arm9_main/sub_20100FC_020100FC.c
- docs/function_notes/NEEDS_REVIEW.md:26 probably runs a per-entry update pass over the record list (count at +9), calling sub_20104A4 and sub_201023C on each entry; returns the count.
- docs/function_notes/hk_00.md:49 probably runs a per-entry update pass over the record list (count at +9), calling sub_20104A4 and sub_201023C on each entry; returns the count.
sub_2010168
export/plan0/arm9_main/sub_2010168_02010168.c
- docs/function_notes/NEEDS_REVIEW.md:27 probably checks all entries of the list, ANDing the results of sub_2010584 and sub_2010310 per entry; returns 1 only if all pass.
- docs/function_notes/hk_00.md:50 probably checks all entries of the list, ANDing the results of sub_2010584 and sub_2010310 per entry; returns 1 only if all pass.
sub_20101E8
export/plan0/arm9_main/sub_20101E8_020101E8.c
- docs/function_notes/NEEDS_REVIEW.md:28 probably resolves a handle via sub_20138B4; if the entry's bit 0 is set, clears it and returns 1 (consumes a pending-ready flag).
- docs/function_notes/hk_00.md:51 probably resolves a handle via sub_20138B4; if the entry's bit 0 is set, clears it and returns 1 (consumes a pending-ready flag).
sub_201023C
export/plan0/arm9_main/sub_201023C_0201023C.c
- docs/function_notes/NEEDS_REVIEW.md:29 probably clears the bit-0 pending flag on each sub-entry of the record (count at +1); returns that count.
- docs/function_notes/hk_00.md:52 probably clears the bit-0 pending flag on each sub-entry of the record (count at +1); returns that count.
sub_2010294
export/plan0/arm9_main/sub_2010294_02010294.c
- docs/function_notes/NEEDS_REVIEW.md:30 probably resolves two handles via sub_20138B4; if both are valid and the target entry's bit 0 is clear, calls sub_20103C0 and returns 1.
- docs/function_notes/hk_00.md:53 probably resolves two handles via sub_20138B4; if both are valid and the target entry's bit 0 is clear, calls sub_20103C0 and returns 1.
sub_2010310
export/plan0/arm9_main/sub_2010310_02010310.c
- docs/function_notes/NEEDS_REVIEW.md:31 probably iterates sub-entries; returns 0 if handle a2+52 is invalid, otherwise calls sub_20103C0 for each entry whose bit 0 is clear.
- docs/function_notes/hk_00.md:54 probably iterates sub-entries; returns 0 if handle a2+52 is invalid, otherwise calls sub_20103C0 for each entry whose bit 0 is clear.
sub_20103C0
export/plan0/arm9_main/sub_20103C0_020103C0.c
- docs/function_notes/NEEDS_REVIEW.md:32 probably writes a 16-bit value (a3+44 plus *a4, sign-trimmed when flag bit 0 is clear) into +28 of each indexed item and sets done bit 0 on a2.
- docs/function_notes/hk_00.md:55 probably writes a 16-bit value (a3+44 plus *a4, sign-trimmed when flag bit 0 is clear) into +28 of each indexed item and sets done bit 0 on a2.
sub_2010458
export/plan0/arm9_main/sub_2010458_02010458.c
- docs/function_notes/NEEDS_REVIEW.md:33 probably resolves a handle via sub_20138B4; if the entry is flagged (bit 0), calls sub_201063C and returns 1.
- docs/function_notes/hk_00.md:56 probably resolves a handle via sub_20138B4; if the entry is flagged (bit 0), calls sub_201063C and returns 1.
sub_20104A4
export/plan0/arm9_main/sub_20104A4_020104A4.c
- docs/function_notes/NEEDS_REVIEW.md:34 probably iterates sub-entries; for each with flag bit 0 set, calls sub_201063C; returns the entry count.
- docs/function_notes/hk_00.md:57 probably iterates sub-entries; for each with flag bit 0 set, calls sub_201063C; returns the entry count.
sub_201050C
export/plan0/arm9_main/sub_201050C_0201050C.c
- docs/function_notes/NEEDS_REVIEW.md:35 probably resolves handle a2+60 and an entry via sub_20138B4; if the entry is not flagged, calls sub_20106C8 and returns 1.
- docs/function_notes/hk_00.md:58 probably resolves handle a2+60 and an entry via sub_20138B4; if the entry is not flagged, calls sub_20106C8 and returns 1.
sub_2010584
export/plan0/arm9_main/sub_2010584_02010584.c
- docs/function_notes/NEEDS_REVIEW.md:36 probably iterates sub-entries; returns 0 if handle a2+60 is invalid, else calls sub_20106C8 for each entry whose bit 0 is clear.
- docs/function_notes/hk_00.md:59 probably iterates sub-entries; returns 0 if handle a2+60 is invalid, else calls sub_20106C8 for each entry whose bit 0 is clear.
sub_201063C
export/plan0/arm9_main/sub_201063C_0201063C.c
- docs/function_notes/NEEDS_REVIEW.md:37 probably resets the indexed sub-objects to identity: masks +20 with dword_20106C4, sets +36 and +40 to 4096 (1.0 in 4.12), clears pending bit 0 on a2.
- docs/function_notes/hk_00.md:60 probably resets the indexed sub-objects to identity: masks +20 with dword_20106C4, sets +36 and +40 to 4096 (1.0 in 4.12), clears pending bit 0 on a2.
sub_20106C8
export/plan0/arm9_main/sub_20106C8_020106C8.c
- docs/function_notes/NEEDS_REVIEW.md:38 probably updates the indexed sub-objects: ORs an attribute into +20, computes 4.12 ratios via sub_2147F34 (FX_Div) into +36/+40, sets pending bit 0 on a2.
- docs/function_notes/hk_00.md:61 probably updates the indexed sub-objects: ORs an attribute into +20, computes 4.12 ratios via sub_2147F34 (FX_Div) into +36/+40, sets pending bit 0 on a2.
sub_20107E4
export/plan0/arm9_main/sub_20107E4_020107E4.c
- docs/function_notes/NEEDS_REVIEW.md:39 probably detaches a pointer: clears the ready bit 0 at +50, zeroes the pointer at +44 and returns it.
- docs/function_notes/hk_00.md:62 probably detaches a pointer: clears the ready bit 0 at +50, zeroes the pointer at +44 and returns it.
sub_2010804
export/plan0/arm9_main/sub_2010804_02010804.c
- docs/function_notes/NEEDS_REVIEW.md:40 probably submits a buffered transfer of 8*count bytes via sub_214C418 from a1+56, sets ready bit 0 at +50; a2 brackets it with sub_214C48C/sub_214C3C0.
- docs/function_notes/hk_00.md:63 probably submits a buffered transfer of 8*count bytes via sub_214C418 from a1+56, sets ready bit 0 at +50; a2 brackets it with sub_214C48C/sub_214C3C0.
sub_2010870
export/plan0/arm9_main/sub_2010870_02010870.c
- docs/function_notes/hk_00.md:64 setter storing a2 into +44 of the object.
sub_2010878
export/plan0/arm9_main/sub_2010878_02010878.c
- docs/function_notes/hk_00.md:65 returns 8 * the 16-bit count at +48 (buffer size in bytes).
sub_2010884
export/plan0/arm9_main/sub_2010884_02010884.c
- docs/function_notes/hk_00.md:66 clears ready bits at +16 and +32, moves the pointers at +8 and +24 out into a2 and a3 (detach).
sub_20108BC
export/plan0/arm9_main/sub_20108BC_020108BC.c
- docs/function_notes/NEEDS_REVIEW.md:41 probably commits pending buffers: copies 8*count bytes via sub_214C544 from +20 (ready +16), then a second copy to a 0x20000-based address (ready +32).
- docs/function_notes/hk_00.md:67 probably commits pending buffers: copies 8*count bytes via sub_214C544 from +20 (ready +16), then a second copy to a 0x20000-based address (ready +32).
sub_2010998
export/plan0/arm9_main/sub_2010998_02010998.c
- docs/function_notes/hk_00.md:68 setter: stores a2 at +8 and a3 at +24 when nonzero.
sub_20109AC
export/plan0/arm9_main/sub_20109AC_020109AC.c
- docs/function_notes/hk_00.md:69 returns 8 * the 16-bit count at +28.
sub_20109B8
export/plan0/arm9_main/sub_20109B8_020109B8.c
- docs/function_notes/hk_00.md:70 returns 8 * the 16-bit count at +12.
sub_20109C4
export/plan0/arm9_main/sub_20109C4_020109C4.c
- docs/function_notes/hk_00.md:71 setter: stores a2 at +32 and bytes a4/a5 at +36/+37 (object parameters).
sub_20109D8
export/plan0/arm9_main/sub_20109D8_020109D8.c
- docs/function_notes/NEEDS_REVIEW.md:42 probably unlinks an item from up to three lists at a1+2/+4/+6 (via sub_2010A40) and sets flag 0x10 in *a1 on success.
- docs/function_notes/hk_00.md:72 probably unlinks an item from up to three lists at a1+2/+4/+6 (via sub_2010A40) and sets flag 0x10 in *a1 on success.
sub_2010A40
export/plan0/arm9_main/sub_2010A40_02010A40.c
- docs/function_notes/hk_00.md:73 singly-linked list removal: unlinks node a2 (next pointer at +16) from the list head *a1; returns 1 if found.
sub_2010AB4
export/plan0/arm9_main/sub_2010AB4_02010AB4.c
- docs/function_notes.md:99 attaches SDK animation to render object by category J/M/V and inserts into its animation list
sub_2010B50
export/plan0/arm9_main/sub_2010B50_02010B50.c
- docs/function_notes/hk_00.md:74 builds a 32-bit bitmask into result[] marking entries whose halfword has bit 8 set, across a linked list of nodes (count at +25).
sub_2010BC8
export/plan0/arm9_main/sub_2010BC8_02010BC8.c
- docs/function_notes/NEEDS_REVIEW.md:43 probably inserts node a2 into a singly-linked list kept sorted by the byte at +24 (priority insert).
- docs/function_notes/hk_00.md:75 probably inserts node a2 into a singly-linked list kept sorted by the byte at +24 (priority insert).
sub_2010CEC
export/plan0/arm9_main/sub_2010CEC_02010CEC.c
- docs/function_notes/hk_00.md:76 initializes a node (zeroes, scale 4096 at +4, priority 127 at +24, data at +8, arg at +20) and dispatches a handler when a 4-byte tag matches table off_2010D90.
sub_2010D98
export/plan0/arm9_main/sub_2010D98_02010D98.c
- docs/function_notes/hk_00.md:77 returns a section size from the tag byte at a1: 'J' or 'V' use the byte at +23, 'M' uses +24, each as (2*byte+28)&~3; otherwise 0.
sub_2010DE8
export/plan0/arm9_main/sub_2010DE8_02010DE8.c
- docs/function_notes/hk_00.md:78 lazily computes once (flag 0x80 at off_2010E24[63]) the cached transform via sub_2010E70, then returns off_2010E28.
sub_2010E2C
export/plan0/arm9_main/sub_2010E2C_02010E2C.c
- docs/function_notes/hk_00.md:79 same lazy-cache pattern as sub_2010DE8, for the cached matrix at off_2010E6C.
sub_2010E70
export/plan0/arm9_main/sub_2010E70_02010E70.c
- docs/function_notes/hk_00.md:80 builds a cached transform matrix via sub_214733C, sub_2147914 (multiply by table constants) and sub_214755C (store); probably a view/camera matrix.
sub_2010ED4
export/plan0/arm9_main/sub_2010ED4_02010ED4.c
- docs/function_notes/hk_00.md:81 lazily (flag 8 at off_2010F18[63]) computes a cached matrix via sub_214755C and returns off_2010F20.
sub_2010F24
export/plan0/arm9_main/sub_2010F24_02010F24.c
- docs/function_notes/hk_00.md:82 packs six parameters into a bitfield word stored at off_2010F4C[39]; probably a GX polygon-attribute word.
sub_2010F50
export/plan0/arm9_main/sub_2010F50_02010F50.c
- docs/function_notes/hk_00.md:83 packs a1, a2<<16 and enable bit 15 (a3 != 0) into a word at off_2010F70[38]; probably a GX texture-parameter word.
sub_2010F74
export/plan0/arm9_main/sub_2010F74_02010F74.c
- docs/function_notes/hk_00.md:84 same packing as sub_2010F50, stored at off_2010F94[37].
sub_2010F98
export/plan0/arm9_main/sub_2010F98_02010F98.c
- docs/function_notes/hk_00.md:85 stores a2 with a 2-bit index (result<<30) into table off_2010FA8[result]; probably a packed GX table entry.
sub_2010FAC
export/plan0/arm9_main/sub_2010FAC_02010FAC.c
- docs/function_notes/hk_00.md:86 packs three colour channels (>>3, 5-bit) into a BGR555 word with the index in the top 2 bits, stored at off_2010FE0[result].
sub_2010FE4
export/plan0/arm9_main/sub_2010FE4_02010FE4.c
- docs/function_notes/hk_00.md:87 copies a 12-byte record from a1 into the buffer at off_2011004[0] and clears status bits in off_2011008[63] (mask 0xFFFFFF5B).
sub_201100C
export/plan0/arm9_main/sub_201100C_0201100C.c
- docs/function_notes/hk_00.md:88 same as sub_2010FE4 but with buffer off_201102C[0] and status word off_2011030[63].
sub_2011034
export/plan0/arm9_main/sub_2011034_02011034.c
- docs/function_notes/hk_00.md:89 submits a 62-word GX command block via sub_1FF9048 and clears pending bits 0 and 1 in off_2011070[63].
sub_2011074
export/plan0/arm9_main/sub_2011074_02011074.c
- docs/function_notes/hk_00.md:90 initializes a 3D object record at off_2011198 with default state (scale 4096, type 2, flags) and matrices via sub_21471BC, sub_2147954, sub_2146CBC.
sub_20111E0
export/plan0/arm9_main/sub_20111E0_020111E0.c
- docs/function_notes/hk_00.md:91 iterates a node list; for nodes whose entry at a3 has bit 8 set, calls callback at +12 and ORs its output into *a1; returns whether any matched.
sub_2011254
export/plan0/arm9_main/sub_2011254_02011254.c
- docs/function_notes/NEEDS_REVIEW.md:44 probably blends child entries: sums weights (+4) of matched nodes; one match calls its callback, else accumulates via sub_2011558.
- docs/function_notes/hk_00.md:92 probably blends child entries: sums weights (+4) of matched nodes; one match calls its callback, else accumulates via sub_2011558.
sub_2011558
export/plan0/arm9_main/sub_2011558_02011558.c
- docs/function_notes/hk_00.md:93 accumulates a 3-word vector into the result: adds a3 directly if a4 is set, else adds (a3*a2[i])>>12 (4.12 weighted add).
sub_20115C8
export/plan0/arm9_main/sub_20115C8_020115C8.c
- docs/function_notes/hk_00.md:94 like sub_20111E0 without accumulation: for matching nodes (entry bit 8) calls callback at +12; returns 1 if any matched.
sub_2011624
export/plan0/arm9_main/sub_2011624_02011624.c
- docs/function_notes/NEEDS_REVIEW.md:45 probably per-object 3D draw submit: GX packets via sub_1FF9048 (ids 30/22/16/20/25/26/28/34/24) from record +176; callback at +64 in mode 3.
- docs/function_notes/hk_00.md:95 probably per-object 3D draw submit: GX packets via sub_1FF9048 (ids 30/22/16/20/25/26/28/34/24) from record +176; callback at +64 in mode 3.
sub_2011928
export/plan0/arm9_main/sub_2011928_02011928.c
- docs/function_notes/NEEDS_REVIEW.md:46 probably a second draw-submit variant (GX packet ids 27/34/24/16/26) using record +176 and callback at +60; counter +0 advances by 3.
- docs/function_notes/hk_00.md:96 probably a second draw-submit variant (GX packet ids 27/34/24/16/26) using record +176 and callback at +60; counter +0 advances by 3.
sub_2011BBC
export/plan0/arm9_main/sub_2011BBC_02011BBC.c
- docs/function_notes/hk_00.md:97 nns_g3d scene-bytecode op: when flag 0x100 is clear, sends a display list via sub_1FF9144 with address and size from the operands; mode 3 calls callback at +52.
sub_2011C58
export/plan0/arm9_main/sub_2011C58_02011C58.c
- docs/function_notes/NEEDS_REVIEW.md:47 probably multi-matrix blend (skinning) from bytecode: loads cached matrices (sub_214A4F8), accumulates weighted 4x3 matrices, stores via sub_214A514.
- docs/function_notes/hk_00.md:98 probably multi-matrix blend (skinning) from bytecode: loads cached matrices (sub_214A4F8), accumulates weighted 4x3 matrices, stores via sub_214A514.
sub_20122CC
export/plan0/arm9_main/sub_20122CC_020122CC.c
- docs/function_notes/NEEDS_REVIEW.md:48 probably scene-bytecode matrix-upload op: builds a matrix from cached matrices (sub_2010E2C/sub_2010ED4), multiplies (sub_21479B4), transfers via sub_214D044.
- docs/function_notes/hk_00.md:99 probably scene-bytecode matrix-upload op: builds a matrix from cached matrices (sub_2010E2C/sub_2010ED4), multiplies (sub_21479B4), transfers via sub_214D044.
sub_201261C
export/plan0/arm9_main/sub_201261C_0201261C.c
- docs/function_notes/hk_00.md:100 twin of sub_20122CC for a second matrix set (off_20128E0 area), same upload pattern and bytecode advance.
sub_201290C
export/plan0/arm9_main/sub_201290C_0201290C.c
- docs/function_notes/hk_00.md:101 draws one display-list entry: optional scale matrix (sub_1FF9048 id 27), optional material/vertex packet via callback off_2012B1C[type], then sub_1FF9144.
sub_2012B20
export/plan0/arm9_main/sub_2012B20_02012B20.c
- docs/function_notes/hk_00.md:102 setter storing a1 into the global at off_2012B2C.
sub_2012B30
export/plan0/arm9_main/sub_2012B30_02012B30.c
- docs/function_notes/NEEDS_REVIEW.md:49 probably a state-change handler: compares object state *result to thresholds; on matching transitions looks up the object (sub_20136F0) and detaches it.
- docs/function_notes/hk_00.md:103 probably a state-change handler: compares object state *result to thresholds; on matching transitions looks up the object (sub_20136F0) and detaches it.
sub_2012CBC
export/plan0/arm9_main/sub_2012CBC_02012CBC.c
- docs/function_notes/NEEDS_REVIEW.md:50 probably state-based resource activation: looks up the object (sub_20136F0), loads three resources via callbacks off_2012F14/F18; frees on failure.
- docs/function_notes/hk_00.md:104 probably state-based resource activation: looks up the object (sub_20136F0), loads three resources via callbacks off_2012F14/F18; frees on failure.
sub_2012F24
export/plan0/arm9_main/sub_2012F24_02012F24.c
- docs/function_notes/hk_00.md:105 init wrapper: calls sub_214AA58 and sub_2011074 (3D object init), then sets bit 31 and clears bit 30 in the flag word at off_2012F54.
sub_2012F58
export/plan0/arm9_main/sub_2012F58_02012F58.c
- docs/function_notes/hk_00.md:106 begins a GX command batch (sub_1FF9234), resets pending state at off_2012FEC/FF0/FF4, optionally loads a matrix via sub_2147980 with lock waits, sets state 2.
sub_2012FFC
export/plan0/arm9_main/sub_2012FFC_02012FFC.c
- docs/function_notes/hk_00.md:107 loops over entries (count at +24) calling per-entry worker sub_20133E0; probably a generic per-action dispatch loop.
sub_2013044
export/plan0/arm9_main/sub_2013044_02013044.c
- docs/function_notes/hk_00.md:108 same loop pattern as sub_2012FFC, calling per-entry worker sub_2013424.
sub_201308C
export/plan0/arm9_main/sub_201308C_0201308C.c
- docs/function_notes/hk_00.md:109 same loop pattern as sub_2012FFC, calling per-entry worker sub_2013468.
sub_20130D4
export/plan0/arm9_main/sub_20130D4_020130D4.c
- docs/function_notes/hk_00.md:110 same loop pattern as sub_2012FFC, calling per-entry worker sub_20134B0.
sub_201311C
export/plan0/arm9_main/sub_201311C_0201311C.c
- docs/function_notes/hk_00.md:111 same loop pattern as sub_2012FFC, calling per-entry worker sub_20134F8.
sub_2013164
export/plan0/arm9_main/sub_2013164_02013164.c
- docs/function_notes/hk_00.md:112 same loop pattern as sub_2012FFC, calling per-entry worker sub_2013540.
sub_20131AC
export/plan0/arm9_main/sub_20131AC_020131AC.c
- docs/function_notes/hk_00.md:113 same loop pattern as sub_2012FFC, calling per-entry worker sub_2013588.
sub_20131F4
export/plan0/arm9_main/sub_20131F4_020131F4.c
- docs/function_notes/hk_00.md:114 same loop pattern as sub_2012FFC, calling per-entry worker sub_20135D0.
sub_201323C
export/plan0/arm9_main/sub_201323C_0201323C.c
- docs/function_notes/hk_00.md:115 same loop pattern as sub_2012FFC, calling per-entry worker sub_2013618.
sub_2013284
export/plan0/arm9_main/sub_2013284_02013284.c
- docs/function_notes/hk_00.md:116 same loop pattern as sub_2012FFC, calling per-entry worker sub_2013660.
sub_20132CC
export/plan0/arm9_main/sub_20132CC_020132CC.c
- docs/function_notes/hk_00.md:117 same loop pattern as sub_2012FFC, calling per-entry worker sub_20136A8.
sub_2013314
export/plan0/arm9_main/sub_2013314_02013314.c
- docs/function_notes/hk_00.md:118 returns bit 0x8000 of the word at +12 of entry a2 in the record's index table; probably a per-entry flag test.
sub_2013344
export/plan0/arm9_main/sub_2013344_02013344.c
- docs/function_notes/NEEDS_REVIEW.md:52 probably getter; returns bits 16-20 of a word in an indexed sub-record found via a1+8 and the offset table (a2 = index)
- docs/function_notes/hk_01.md:3 probably getter; returns bits 16-20 of a word in an indexed sub-record found via a1+8 and the offset table (a2 = index)
sub_2013378
export/plan0/arm9_main/sub_2013378_02013378.c
- docs/function_notes/NEEDS_REVIEW.md:53 probably getter; returns bits 24-29 of the same indexed sub-record word (mask 0x3F000000)
- docs/function_notes/hk_01.md:4 probably getter; returns bits 24-29 of the same indexed sub-record word (mask 0x3F000000)
sub_20133AC
export/plan0/arm9_main/sub_20133AC_020133AC.c
- docs/function_notes/NEEDS_REVIEW.md:54 probably getter; returns bits 6-7 of the same indexed sub-record word (mask 0xC0)
- docs/function_notes/hk_01.md:5 probably getter; returns bits 6-7 of the same indexed sub-record word (mask 0xC0)
sub_20133E0
export/plan0/arm9_main/sub_20133E0_020133E0.c
- docs/function_notes/NEEDS_REVIEW.md:55 probably bit setter; sets or clears bit 11 (0x800) of the indexed sub-record word at +12, selected by a3
- docs/function_notes/hk_01.md:6 probably bit setter; sets or clears bit 11 (0x800) of the indexed sub-record word at +12, selected by a3
sub_2013424
export/plan0/arm9_main/sub_2013424_02013424.c
- docs/function_notes/NEEDS_REVIEW.md:56 probably bit setter; sets or clears bit 15 (0x8000) of the indexed sub-record word at +12, selected by a3
- docs/function_notes/hk_01.md:7 probably bit setter; sets or clears bit 15 (0x8000) of the indexed sub-record word at +12, selected by a3
sub_2013468
export/plan0/arm9_main/sub_2013468_02013468.c
- docs/function_notes/NEEDS_REVIEW.md:57 probably field setter; writes a3<<16 into bits 16-20 of the indexed sub-record word at +12
- docs/function_notes/hk_01.md:8 probably field setter; writes a3<<16 into bits 16-20 of the indexed sub-record word at +12
sub_20134B0
export/plan0/arm9_main/sub_20134B0_020134B0.c
- docs/function_notes/NEEDS_REVIEW.md:58 probably field setter; writes a3<<24 into bits 24-29 of the indexed sub-record word at +12
- docs/function_notes/hk_01.md:9 probably field setter; writes a3<<24 into bits 24-29 of the indexed sub-record word at +12
sub_20134F8
export/plan0/arm9_main/sub_20134F8_020134F8.c
- docs/function_notes/NEEDS_REVIEW.md:59 probably field setter; writes a3<<6 into bits 6-7 of the indexed sub-record word at +12
- docs/function_notes/hk_01.md:10 probably field setter; writes a3<<6 into bits 6-7 of the indexed sub-record word at +12
sub_2013540
export/plan0/arm9_main/sub_2013540_02013540.c
- docs/function_notes/NEEDS_REVIEW.md:60 probably field setter; writes a3<<4 into bits 4-5 of the indexed sub-record word at +12
- docs/function_notes/hk_01.md:11 probably field setter; writes a3<<4 into bits 4-5 of the indexed sub-record word at +12
sub_2013588
export/plan0/arm9_main/sub_2013588_02013588.c
- docs/function_notes/NEEDS_REVIEW.md:61 probably field setter; writes low 4 bits (a3) into the indexed sub-record word at +12
- docs/function_notes/hk_01.md:12 probably field setter; writes low 4 bits (a3) into the indexed sub-record word at +12
sub_20135D0
export/plan0/arm9_main/sub_20135D0_020135D0.c
- docs/function_notes/NEEDS_REVIEW.md:62 probably field setter; writes a3<<16 into the indexed sub-record word at +8, masked by dword_2013614 (water/effect param, guess)
- docs/function_notes/hk_01.md:13 probably field setter; writes a3<<16 into the indexed sub-record word at +8, masked by dword_2013614 (water/effect param, guess)
sub_2013618
export/plan0/arm9_main/sub_2013618_02013618.c
- docs/function_notes/NEEDS_REVIEW.md:63 probably field setter; writes low 15 bits (a3) into the indexed sub-record word at +8
- docs/function_notes/hk_01.md:14 probably field setter; writes low 15 bits (a3) into the indexed sub-record word at +8
sub_2013660
export/plan0/arm9_main/sub_2013660_02013660.c
- docs/function_notes/NEEDS_REVIEW.md:64 probably field setter; writes a3<<16 into the indexed sub-record word at +4, masked by dword_20136A4
- docs/function_notes/hk_01.md:15 probably field setter; writes a3<<16 into the indexed sub-record word at +4, masked by dword_20136A4
sub_20136A8
export/plan0/arm9_main/sub_20136A8_020136A8.c
- docs/function_notes/NEEDS_REVIEW.md:65 probably field setter; writes low 15 bits (a3) into the indexed sub-record word at +4
- docs/function_notes/hk_01.md:16 probably field setter; writes low 15 bits (a3) into the indexed sub-record word at +4
sub_20136F0
export/plan0/arm9_main/sub_20136F0_020136F0.c
- docs/function_notes/NEEDS_REVIEW.md:66 probably resolves an offset-table entry: returns a1+[entry+4] when type field at +14 is not 1, else a1+[entry] if id matches dword_201372C, else 0
- docs/function_notes/hk_01.md:17 probably resolves an offset-table entry: returns a1+[entry+4] when type field at +14 is not 1, else a1+[entry] if id matches dword_201372C, else 0
sub_2013730
export/plan0/arm9_main/sub_2013730_02013730.c
- docs/function_notes/hk_01.md:18 thin accessor; returns a1 + the word at a1 + offset(+12), i.e. a pointer fixup through the header offset table
sub_2013740
export/plan0/arm9_main/sub_2013740_02013740.c
- docs/function_notes/hk_01.md:19 thin accessor; like sub_2013730 but indexed by a2 (4*a2 into the table at a1+offset(+12)), returns resolved pointer
sub_2013754
export/plan0/arm9_main/sub_2013754_02013754.c
- docs/function_notes/NEEDS_REVIEW.md:67 probably searches a compact table (header at a1) for a 16-byte key (four words from a2) via a bit-tree walk or linear scan; returns entry index or -1
- docs/function_notes/hk_01.md:20 probably searches a compact table (header at a1) for a 16-byte key (four words from a2) via a bit-tree walk or linear scan; returns entry index or -1
sub_20138B4
export/plan0/arm9_main/sub_20138B4_020138B4.c
- docs/function_notes/hk_01.md:21 same key search as sub_2013754 but returns a pointer to the matching record (base + stride*index + 4), or 0 if not found
sub_2013A30
export/plan0/arm9_main/sub_2013A30_02013A30.c
- docs/function_notes/hk_01.md:22 thin wrapper; calls function pointer off_2013A40 with a1 and two constants dword_2013A44 and dword_2013A48
sub_2013C78
export/plan0/arm9_main/sub_2013C78_02013C78.c
- vm_model/src/nitro_anim.rs:11 sub_2013C78, sub_2013E18, sub_2014164, sub_201456C, sub_2014724,
sub_2013E18
export/plan0/arm9_main/sub_2013E18_02013E18.c
- vm_model/src/nitro_anim.rs:11 sub_2013C78, sub_2013E18, sub_2014164, sub_201456C, sub_2014724,
sub_2014164
export/plan0/arm9_main/sub_2014164_02014164.c
- vm_model/src/nitro_anim.rs:11 sub_2013C78, sub_2013E18, sub_2014164, sub_201456C, sub_2014724,
sub_201456C
export/plan0/arm9_main/sub_201456C_0201456C.c
- vm_model/src/nitro_anim.rs:11 sub_2013C78, sub_2013E18, sub_2014164, sub_201456C, sub_2014724,
sub_2014724
export/plan0/arm9_main/sub_2014724_02014724.c
- vm_model/src/nitro_anim.rs:11 sub_2013C78, sub_2013E18, sub_2014164, sub_201456C, sub_2014724,
sub_2014954
export/plan0/arm9_main/sub_2014954_02014954.c
- vm_model/src/nitro_anim.rs:12 sub_2014954, sub_2014AD0 and sub_2014C5C (rotation, scale, translation, flags).
sub_2014AD0
export/plan0/arm9_main/sub_2014AD0_02014AD0.c
- vm_model/src/nitro_anim.rs:12 sub_2014954, sub_2014AD0 and sub_2014C5C (rotation, scale, translation, flags).
sub_2014C5C
export/plan0/arm9_main/sub_2014C5C_02014C5C.c
- vm_model/src/nitro_anim.rs:12 sub_2014954, sub_2014AD0 and sub_2014C5C (rotation, scale, translation, flags).
- docs/function_notes.md:88 NSBCA joint evaluator; Mario drive decoder matched 1687 live node results; other clips not runtime verified
sub_2015044
export/plan0/arm9_main/sub_2015044_02015044.c
- docs/function_notes/NEEDS_REVIEW.md:68 probably animation/track sampler: decodes flagged keyframe entry (via off_2015190 table) into a1[10..18] or sets flags and calls sub_214D32C
- docs/function_notes/hk_01.md:23 probably animation/track sampler: decodes flagged keyframe entry (via off_2015190 table) into a1[10..18] or sets flags and calls sub_214D32C
sub_20151A4
export/plan0/arm9_main/sub_20151A4_020151A4.c
- docs/function_notes/NEEDS_REVIEW.md:69 probably computes the data pointer for an animation entry (flag bits 1, 2, 8 pick the offset) and calls vtable slot +232 with it
- docs/function_notes/hk_01.md:24 probably computes the data pointer for an animation entry (flag bits 1, 2, 8 pick the offset) and calls vtable slot +232 with it
sub_201520C
export/plan0/arm9_main/sub_201520C_0201520C.c
- docs/function_notes/NEEDS_REVIEW.md:70 probably animation attribute fetch; if entry flag bit0 is set sets result|=4, else copies three words from the entry into result[19..21]
- docs/function_notes/hk_01.md:25 probably animation attribute fetch; if entry flag bit0 is set sets result|=4, else copies three words from the entry into result[19..21]
sub_2015274
export/plan0/arm9_main/sub_2015274_02015274.c
- docs/function_notes.md:100 NSBCA node-evaluation wrapper: clamps fx12 frame to [0, duration-1] and calls sub_2014C5C
sub_20152BC
export/plan0/arm9_main/sub_20152BC_020152BC.c
- docs/function_notes/NEEDS_REVIEW.md:71 probably init of an index/mapping object: sets vtable from off_2015354, count from a3+23, clears 2*count bytes, fills 16-bit slots with HIBYTE(a2 entries)|0x100
- docs/function_notes/hk_01.md:26 probably init of an index/mapping object: sets vtable from off_2015354, count from a3+23, clears 2*count bytes, fills 16-bit slots with HIBYTE(a2 entries)|0x100
sub_2015358
export/plan0/arm9_main/sub_2015358_02015358.c
- docs/function_notes/NEEDS_REVIEW.md:72 probably samples packed/quantized values for a3 index: calls sub_20155D8 (x4) and sub_20154E4 (x1) and packs results into a1[1..3] bitfields
- docs/function_notes/hk_01.md:27 probably samples packed/quantized values for a3 index: calls sub_20155D8 (x4) and sub_20154E4 (x1) and packs results into a1[1..3] bitfields
sub_2015428
export/plan0/arm9_main/sub_2015428_02015428.c
- docs/function_notes/NEEDS_REVIEW.md:73 probably init plus track-to-object matching: sets vtable from off_20154E0, count from a3+24, clears slots, then sub_2013754 lookups mark matched slots with 0x100
- docs/function_notes/hk_01.md:28 probably init plus track-to-object matching: sets vtable from off_20154E0, count from a3+24, clears slots, then sub_2013754 lookups mark matched slots with 0x100
sub_20154E4
export/plan0/arm9_main/sub_20154E4_020154E4.c
- docs/function_notes/NEEDS_REVIEW.md:74 probably 8-bit keyframe sampler; returns a byte from a table at a1 selected by a2 mask and mode bits 30/31 (direct, or interpolated 1/2 or 1/4 steps)
- docs/function_notes/hk_01.md:29 probably 8-bit keyframe sampler; returns a byte from a table at a1 selected by a2 mask and mode bits 30/31 (direct, or interpolated 1/2 or 1/4 steps)
sub_20155D8
export/plan0/arm9_main/sub_20155D8_020155D8.c
- docs/function_notes/NEEDS_REVIEW.md:75 probably 16-bit (RGB555-style, mask 0x3E0) interpolating sampler; same mode logic as sub_20154E4 but with halfword reads and channel averaging
- docs/function_notes/hk_01.md:30 probably 16-bit (RGB555-style, mask 0x3E0) interpolating sampler; same mode logic as sub_20154E4 but with halfword reads and channel averaging
sub_2015788
export/plan0/arm9_main/sub_2015788_02015788.c
- docs/function_notes/NEEDS_REVIEW.md:76 probably sets sample state: calls sub_2015894(a2[2], a3, *a2>>12, a1), sets a1[4] bit 30 and a1[0] |= 8
- docs/function_notes/hk_01.md:31 probably sets sample state: calls sub_2015894(a2[2], a3, *a2>>12, a1), sets a1[4] bit 30 and a1[0] |= 8
sub_20157D8
export/plan0/arm9_main/sub_20157D8_020157D8.c
- docs/function_notes/NEEDS_REVIEW.md:77 probably same init and track matching as sub_2015428 but with vtable off_2015890 and count from a3+24 (duplicate variant)
- docs/function_notes/hk_01.md:32 probably same init and track matching as sub_2015428 but with vtable off_2015890 and count from a3+24 (duplicate variant)
sub_2015894
export/plan0/arm9_main/sub_2015894_02015894.c
- docs/function_notes/NEEDS_REVIEW.md:78 probably evaluates a keyframe entry at index a2 of table a1: calls sub_2015AA0 and sub_2015994 to set flags in a4[0] and store sampled values at a4[6..10]
- docs/function_notes/hk_01.md:33 probably evaluates a keyframe entry at index a2 of table a1: calls sub_2015AA0 and sub_2015994 to set flags in a4[0] and store sampled values at a4[6..10]
sub_2015994
export/plan0/arm9_main/sub_2015994_02015994.c
- docs/function_notes/NEEDS_REVIEW.md:79 probably 32-bit word sampler with interpolation modes (paired averaging, 1/3-2/3 weights); returns a word
- docs/function_notes/hk_01.md:34 probably 32-bit word sampler with interpolation modes (paired averaging, 1/3-2/3 weights); returns a word
sub_2015AA0
export/plan0/arm9_main/sub_2015AA0_02015AA0.c
- docs/function_notes/NEEDS_REVIEW.md:80 probably generic sampler choosing halfword (flag 0x10000000) or word reads with interpolation; returns the blended sample value
- docs/function_notes/hk_01.md:35 probably generic sampler choosing halfword (flag 0x10000000) or word reads with interpolation; returns the blended sample value
sub_2015B9C
export/plan0/arm9_main/sub_2015B9C_02015B9C.c
- docs/function_notes.md:87 applies NSBTP texture/palette pattern to material; index 255 preserves palette (C/SDK confirmed)
sub_2015C24
export/plan0/arm9_main/sub_2015C24_02015C24.c
- docs/function_notes/hk_01.md:36 looks up a record with sub_20138B4 at a1+52, adds a 16-bit value from a1+44 to the record's value and stores it at a3+20
sub_2015C7C
export/plan0/arm9_main/sub_2015C7C_02015C7C.c
- docs/function_notes/hk_01.md:37 looks up a record with sub_20138B4 at a1+60, masks a base word (a1+8 or a1+24) with dword_2015D58; writes a3+16, a3+44/46 and FX ratios (sub_2147F34) into a3+48/52
sub_2015D68
export/plan0/arm9_main/sub_2015D68_02015D68.c
- docs/function_notes/NEEDS_REVIEW.md:81 probably init plus track matching like sub_2015428 but with vtable off_2015E24, count from a2+13, and offset a2+18
- docs/function_notes/hk_01.md:38 probably init plus track matching like sub_2015428 but with vtable off_2015E24, count from a2+13, and offset a2+18
sub_2015E28
export/plan0/arm9_main/sub_2015E28_02015E28.c
- docs/function_notes/NEEDS_REVIEW.md:82 probably bit test; reads bit (a3 + (a2>>12)stride) of a bitmap in a2[2] and stores it to result (visibility flag, guess)
- docs/function_notes/hk_01.md:39 probably bit test; reads bit (a3 + (a2>>12)stride) of a bitmap in a2[2] and stores it to result (visibility flag, guess)
sub_2015E6C
export/plan0/arm9_main/sub_2015E6C_02015E6C.c
- docs/function_notes/NEEDS_REVIEW.md:83 probably init of an identity map: sets vtable from off_2015EB4, count from a3+23, and sets slot i = i|0x100 for each entry
- docs/function_notes/hk_01.md:40 probably init of an identity map: sets vtable from off_2015EB4, count from a3+23, and sets slot i = i|0x100 for each entry
sub_2015EB8
export/plan0/arm9_main/sub_2015EB8_02015EB8.c
- docs/function_notes/NEEDS_REVIEW.md:84 probably copies a 3-word vector from a2 into result[1..3] unless flag 4 is set (then sets bit 0), and sets result flags |= 0x18
- docs/function_notes/hk_01.md:41 probably copies a 3-word vector from a2 into result[1..3] unless flag 4 is set (then sets bit 0), and sets result flags |= 0x18
sub_2015EF4
export/plan0/arm9_main/sub_2015EF4_02015EF4.c
- docs/function_notes/NEEDS_REVIEW.md:85 probably GX-style command submit: calls sub_1FF9048 with ids 25/26/27/28 and word counts 12/9/3/3 depending on flags in a1 (matches existing guess)
- docs/function_notes/hk_01.md:42 probably GX-style command submit: calls sub_1FF9048 with ids 25/26/27/28 and word counts 12/9/3/3 depending on flags in a1 (matches existing guess)
sub_2015F78
export/plan0/arm9_main/sub_2015F78_02015F78.c
- docs/function_notes/hk_01.md:43 trivial stub; returns -1
sub_2015F80
export/plan0/arm9_main/sub_2015F80_02015F80.c
- docs/function_notes/hk_01.md:44 trivial stub; returns 0
sub_2015F88
export/plan0/arm9_main/sub_2015F88_02015F88.c
- docs/function_notes/hk_01.md:45 trivial stub; returns -1
sub_2015F90
export/plan0/arm9_main/sub_2015F90_02015F90.c
- docs/function_notes/hk_01.md:46 trivial stub; returns 0
sub_2015F98
export/plan0/arm9_main/sub_2015F98_02015F98.c
- docs/function_notes/hk_01.md:47 trivial stub; returns 0
sub_2015FA0
export/plan0/arm9_main/sub_2015FA0_02015FA0.c
- docs/function_notes/NEEDS_REVIEW.md:86 probably memory block allocator with 16-byte granularity; takes from one of several pools (off_2016128 pairs or off_201612C list) per a2, returns packed handle or 0
- docs/function_notes/hk_01.md:48 probably memory block allocator with 16-byte granularity; takes from one of several pools (off_2016128 pairs or off_201612C list) per a2, returns packed handle or 0
sub_2016134
export/plan0/arm9_main/sub_2016134_02016134.c
- docs/function_notes/NEEDS_REVIEW.md:87 probably resets five allocator pool records at off_20161B0 (6 words each): sets flags from off_20161AC and base values 0x10000 or 0x20000
- docs/function_notes/hk_01.md:49 probably resets five allocator pool records at off_20161B0 (6 words each): sets flags from off_20161AC and base values 0x10000 or 0x20000
sub_201625C
export/plan0/arm9_main/sub_201625C_0201625C.c
- docs/function_notes/NEEDS_REVIEW.md:88 probably sets five pointer slots in the off_20162AC array to entries of table off_20162A8 (6-word stride) selected by indices a1..a5
- docs/function_notes/hk_01.md:50 probably sets five pointer slots in the off_20162AC array to entries of table off_20162A8 (6-word stride) selected by indices a1..a5
sub_20162B0
export/plan0/arm9_main/sub_20162B0_020162B0.c
- docs/function_notes/NEEDS_REVIEW.md:89 probably resets/pops a list head at off_20162C8: zeroes its first word and copies its third word into the second
- docs/function_notes/hk_01.md:51 probably resets/pops a list head at off_20162C8: zeroes its first word and copies its third word into the second
sub_20162CC
export/plan0/arm9_main/sub_20162CC_020162CC.c
- docs/function_notes/hk_01.md:52 trivial stub; returns 0
sub_20162D4
export/plan0/arm9_main/sub_20162D4_020162D4.c
- docs/function_notes/NEEDS_REVIEW.md:90 probably memory allocator with 8- or 16-byte alignment from a bump/free range at off_201640C (front or back per a3); returns packed handle or 0
- docs/function_notes/hk_01.md:53 probably memory allocator with 8- or 16-byte alignment from a bump/free range at off_201640C (front or back per a3); returns packed handle or 0
sub_2016414
export/plan0/arm9_main/sub_2016414_02016414.c
- docs/function_notes/NEEDS_REVIEW.md:91 probably registers a callback: stores a1 at off_2016454+8, resets via sub_20162B0, and if a2 stores callback pointers from off_2016460/off_2016458
- docs/function_notes/hk_01.md:54 probably registers a callback: stores a1 at off_2016454+8, resets via sub_20162B0, and if a2 stores callback pointers from off_2016460/off_2016458
sub_2016468
export/plan0/arm9_main/sub_2016468_02016468.c
- docs/function_notes/NEEDS_REVIEW.md:92 probably queue push of a 4-word entry (a1, a3, a2, a4) into the queue at off_20164E4 via sub_20165B8/sub_20165D8, and adds a4 size to the counter at +16
- docs/function_notes/hk_01.md:55 probably queue push of a 4-word entry (a1, a3, a2, a4) into the queue at off_20164E4 via sub_20165B8/sub_20165D8, and adds a4 size to the counter at +16
sub_20164E8
export/plan0/arm9_main/sub_20164E8_020164E8.c
- docs/function_notes/NEEDS_REVIEW.md:93 probably queue flush: loops sub_2016574 pops, calls sub_2016638 to dispatch each entry, and subtracts its size from the counter at off_2016550
- docs/function_notes/hk_01.md:56 probably queue flush: loops sub_2016574 pops, calls sub_2016638 to dispatch each entry, and subtracts its size from the counter at off_2016550
sub_2016554
export/plan0/arm9_main/sub_2016554_02016554.c
- docs/function_notes/NEEDS_REVIEW.md:94 probably invokes a callback: stores a1 and a2 into the record at off_201656C and calls function pointer off_2016570 with it
- docs/function_notes/hk_01.md:57 probably invokes a callback: stores a1 and a2 into the record at off_201656C and calls function pointer off_2016570 with it
sub_2016574
export/plan0/arm9_main/sub_2016574_02016574.c
- docs/function_notes/NEEDS_REVIEW.md:95 probably queue pop: if sub_201694C reports not empty, advances the read index at a1+8 via sub_2016978 and decrements count at +12
- docs/function_notes/hk_01.md:58 probably queue pop: if sub_201694C reports not empty, advances the read index at a1+8 via sub_2016978 and decrements count at +12
sub_20165B8
export/plan0/arm9_main/sub_20165B8_020165B8.c
- docs/function_notes/NEEDS_REVIEW.md:96 probably returns the write slot address: base + 16 * write index (a1+10)
- docs/function_notes/hk_01.md:59 probably returns the write slot address: base + 16 * write index (a1+10)
sub_20165C8
export/plan0/arm9_main/sub_20165C8_020165C8.c
- docs/function_notes/NEEDS_REVIEW.md:97 probably returns the read slot address: base + 16 * read index (a1+8)
- docs/function_notes/hk_01.md:60 probably returns the read slot address: base + 16 * read index (a1+8)
sub_20165D8
export/plan0/arm9_main/sub_20165D8_020165D8.c
- docs/function_notes/NEEDS_REVIEW.md:98 probably queue push commit: fails if sub_2016960 reports full, advances write index at a1+10 via sub_2016978 and increments count at +12
- docs/function_notes/hk_01.md:61 probably queue push commit: fails if sub_2016960 reports full, advances write index at a1+10 via sub_2016978 and increments count at +12
sub_2016638
export/plan0/arm9_main/sub_2016638_02016638.c
- docs/function_notes/NEEDS_REVIEW.md:99 probably dispatches a queued entry: flushes cache for a1[1] (sub_200EE74 = DC_FlushRange) and calls handler off_2016678[*a1] with a1[1..3]
- docs/function_notes/hk_01.md:62 probably dispatches a queued entry: flushes cache for a1[1] (sub_200EE74 = DC_FlushRange) and calls handler off_2016678[*a1] with a1[1..3]
sub_201667C
export/plan0/arm9_main/sub_201667C_0201667C.c
- docs/function_notes/hk_01.md:63 trivial thunk; tail-calls function pointer off_2016684 and returns its result
sub_2016688
export/plan0/arm9_main/sub_2016688_02016688.c
- docs/function_notes/hk_01.md:64 trivial thunk; tail-calls function pointer off_2016690 and returns its result
sub_2016694
export/plan0/arm9_main/sub_2016694_02016694.c
- docs/function_notes/NEEDS_REVIEW.md:100 probably wrapper pipeline: calls sub_214B4DC, then sub_214B468(a1,a2,a3), then sub_214B41C on that result (SDK call chain, guess)
- docs/function_notes/hk_01.md:65 probably wrapper pipeline: calls sub_214B4DC, then sub_214B468(a1,a2,a3), then sub_214B41C on that result (SDK call chain, guess)
sub_20166C4
export/plan0/arm9_main/sub_20166C4_020166C4.c
- docs/function_notes/NEEDS_REVIEW.md:101 probably same wrapper pipeline as sub_2016694 with sub_214B3F8, sub_214B384 and sub_214B338 (SDK call chain, guess)
- docs/function_notes/hk_01.md:66 probably same wrapper pipeline as sub_2016694 with sub_214B3F8, sub_214B384 and sub_214B338 (SDK call chain, guess)
sub_20166F4
export/plan0/arm9_main/sub_20166F4_020166F4.c
- docs/function_notes/hk_01.md:67 trivial thunk; tail-calls function pointer off_20166FC with three args
sub_2016700
export/plan0/arm9_main/sub_2016700_02016700.c
- docs/function_notes/hk_01.md:68 trivial thunk; tail-calls function pointer off_2016708
sub_201670C
export/plan0/arm9_main/sub_201670C_0201670C.c
- docs/function_notes/hk_01.md:69 trivial thunk; tail-calls function pointer off_2016714
sub_2016718
export/plan0/arm9_main/sub_2016718_02016718.c
- docs/function_notes/hk_01.md:70 trivial thunk; tail-calls function pointer off_2016720
sub_2016724
export/plan0/arm9_main/sub_2016724_02016724.c
- docs/function_notes/hk_01.md:71 trivial thunk; tail-calls function pointer off_201672C
sub_2016730
export/plan0/arm9_main/sub_2016730_02016730.c
- docs/function_notes/hk_01.md:72 trivial thunk; tail-calls function pointer off_2016738
sub_201673C
export/plan0/arm9_main/sub_201673C_0201673C.c
- docs/function_notes/hk_01.md:73 trivial thunk; tail-calls function pointer off_2016744 with three args
sub_2016748
export/plan0/arm9_main/sub_2016748_02016748.c
- docs/function_notes/hk_01.md:74 trivial thunk; tail-calls function pointer off_2016750
sub_2016754
export/plan0/arm9_main/sub_2016754_02016754.c
- docs/function_notes/hk_01.md:75 trivial thunk; tail-calls function pointer off_201675C
sub_2016760
export/plan0/arm9_main/sub_2016760_02016760.c
- docs/function_notes/hk_01.md:76 trivial thunk; tail-calls function pointer off_2016768
sub_201676C
export/plan0/arm9_main/sub_201676C_0201676C.c
- docs/function_notes/hk_01.md:77 trivial thunk; tail-calls function pointer off_2016774 with three args
sub_2016778
export/plan0/arm9_main/sub_2016778_02016778.c
- docs/function_notes/hk_01.md:78 trivial thunk; tail-calls function pointer off_2016780
sub_2016784
export/plan0/arm9_main/sub_2016784_02016784.c
- docs/function_notes/hk_01.md:79 trivial thunk; tail-calls function pointer off_201678C
sub_2016790
export/plan0/arm9_main/sub_2016790_02016790.c
- docs/function_notes/hk_01.md:80 trivial thunk; tail-calls function pointer off_2016798
sub_201679C
export/plan0/arm9_main/sub_201679C_0201679C.c
- docs/function_notes/NEEDS_REVIEW.md:102 probably wrapper pipeline: calls sub_214B720, then sub_214B6A0(a1,a2,a3), then sub_214B63C on the result (SDK call chain, guess)
- docs/function_notes/hk_01.md:81 probably wrapper pipeline: calls sub_214B720, then sub_214B6A0(a1,a2,a3), then sub_214B63C on the result (SDK call chain, guess)
sub_20167CC
export/plan0/arm9_main/sub_20167CC_020167CC.c
- docs/function_notes/NEEDS_REVIEW.md:103 probably wrapper pipeline: calls sub_214B5CC, then sub_214B558(a1,a2,a3), then sub_214B500 on the result (SDK call chain, guess)
- docs/function_notes/hk_01.md:82 probably wrapper pipeline: calls sub_214B5CC, then sub_214B558(a1,a2,a3), then sub_214B500 on the result (SDK call chain, guess)
sub_20167FC
export/plan0/arm9_main/sub_20167FC_020167FC.c
- docs/function_notes/hk_01.md:83 trivial thunk; tail-calls function pointer off_2016804 with three args
sub_2016808
export/plan0/arm9_main/sub_2016808_02016808.c
- docs/function_notes/hk_01.md:84 trivial thunk; tail-calls function pointer off_2016810
sub_2016814
export/plan0/arm9_main/sub_2016814_02016814.c
- docs/function_notes/hk_01.md:85 trivial thunk; tail-calls function pointer off_201681C
sub_2016820
export/plan0/arm9_main/sub_2016820_02016820.c
- docs/function_notes/hk_01.md:86 trivial thunk; tail-calls function pointer off_2016828
sub_201682C
export/plan0/arm9_main/sub_201682C_0201682C.c
- docs/function_notes/hk_01.md:87 trivial thunk; tail-calls function pointer off_2016834
sub_2016838
export/plan0/arm9_main/sub_2016838_02016838.c
- docs/function_notes/hk_01.md:88 trivial thunk; tail-calls function pointer off_2016840
sub_2016844
export/plan0/arm9_main/sub_2016844_02016844.c
- docs/function_notes/hk_01.md:89 trivial thunk; tail-calls function pointer off_201684C with three args
sub_2016850
export/plan0/arm9_main/sub_2016850_02016850.c
- docs/function_notes/hk_01.md:90 trivial thunk; tail-calls function pointer off_2016858
sub_201685C
export/plan0/arm9_main/sub_201685C_0201685C.c
- docs/function_notes/hk_01.md:91 trivial thunk; tail-calls function pointer off_2016864
sub_2016868
export/plan0/arm9_main/sub_2016868_02016868.c
- docs/function_notes/hk_01.md:92 trivial thunk; tail-calls function pointer off_2016870
sub_2016874
export/plan0/arm9_main/sub_2016874_02016874.c
- docs/function_notes/hk_01.md:93 trivial thunk; tail-calls function pointer off_201687C with three args
sub_2016880
export/plan0/arm9_main/sub_2016880_02016880.c
- docs/function_notes/hk_01.md:94 trivial thunk; tail-calls function pointer off_2016888
sub_201688C
export/plan0/arm9_main/sub_201688C_0201688C.c
- docs/function_notes/NEEDS_REVIEW.md:104 probably wrapper pipeline: calls sub_214C2F8, then sub_214C214(a1,a3), then sub_214C1BC on the result (SDK call chain, guess)
- docs/function_notes/hk_01.md:95 probably wrapper pipeline: calls sub_214C2F8, then sub_214C214(a1,a3), then sub_214C1BC on the result (SDK call chain, guess)
sub_20168BC
export/plan0/arm9_main/sub_20168BC_020168BC.c
- docs/function_notes/NEEDS_REVIEW.md:105 probably wrapper pipeline: calls sub_214C2F8, then sub_214C288(a1,a3), then sub_214C1BC on the result (SDK call chain, guess)
- docs/function_notes/hk_01.md:96 probably wrapper pipeline: calls sub_214C2F8, then sub_214C288(a1,a3), then sub_214C1BC on the result (SDK call chain, guess)
sub_20168EC
export/plan0/arm9_main/sub_20168EC_020168EC.c
- docs/function_notes/NEEDS_REVIEW.md:106 probably wrapper pipeline: calls sub_214C48C, then sub_214C418(a1,a2,a3), then sub_214C3C0 on the result (SDK call chain, guess)
- docs/function_notes/hk_01.md:97 probably wrapper pipeline: calls sub_214C48C, then sub_214C418(a1,a2,a3), then sub_214C3C0 on the result (SDK call chain, guess)
sub_201691C
export/plan0/arm9_main/sub_201691C_0201691C.c
- docs/function_notes/NEEDS_REVIEW.md:107 probably wrapper pipeline: calls sub_214C6A8, then sub_214C544(a1,a2,a3), then sub_214C4D4 on the result (SDK call chain, guess)
- docs/function_notes/hk_01.md:98 probably wrapper pipeline: calls sub_214C6A8, then sub_214C544(a1,a2,a3), then sub_214C4D4 on the result (SDK call chain, guess)
sub_201694C
export/plan0/arm9_main/sub_201694C_0201694C.c
- docs/function_notes/hk_01.md:99 returns non-zero when the queue count at a1+12 is 0 (queue empty check)
sub_2016960
export/plan0/arm9_main/sub_2016960_02016960.c
- docs/function_notes/hk_01.md:100 returns non-zero when the queue count at a1+12 equals the capacity at a1+4 (queue full check)
sub_2016978
export/plan0/arm9_main/sub_2016978_02016978.c
- docs/function_notes/NEEDS_REVIEW.md:108 probably ring-buffer index advance: calls sub_2133274(a2+1); decompiled return value is uninitialized, so the wrap logic is unclear
- docs/function_notes/hk_01.md:101 probably ring-buffer index advance: calls sub_2133274(a2+1); decompiled return value is uninitialized, so the wrap logic is unclear
sub_20169A4
export/plan0/arm9_main/sub_20169A4_020169A4.c
- docs/function_notes/NEEDS_REVIEW.md:109 probably inserts a free range (start a3, size a4) into the sorted free list at a1, coalescing with neighbours and taking spare nodes from a2; returns 1 on success
- docs/function_notes/hk_01.md:102 probably inserts a free range (start a3, size a4) into the sorted free list at a1, coalescing with neighbours and taking spare nodes from a2; returns 1 on success
sub_2016B00
export/plan0/arm9_main/sub_2016B00_02016B00.c
- docs/function_notes/NEEDS_REVIEW.md:110 probably allocates from free list a1 with alignment a5 (first fit), splits the block, moves spare nodes via a2, writes the offset to *a3; returns 1 on success
- docs/function_notes/hk_01.md:103 probably allocates from free list a1 with alignment a5 (first fit), splits the block, moves spare nodes via a2, writes the offset to *a3; returns 1 on success
sub_2016C44
export/plan0/arm9_main/sub_2016C44_02016C44.c
- docs/function_notes/hk_01.md:104 thin wrapper; calls sub_2016B00 with alignment 0
sub_2016C64
export/plan0/arm9_main/sub_2016C64_02016C64.c
- docs/function_notes/NEEDS_REVIEW.md:111 probably pushes a node (a3 = start, a4 = size) onto list a1, taking a spare node from a2; returns 1 on success, 0 if no spare node
- docs/function_notes/hk_01.md:105 probably pushes a node (a3 = start, a4 = size) onto list a1, taking a spare node from a2; returns 1 on success, 0 if no spare node
sub_2016CD8
export/plan0/arm9_main/sub_2016CD8_02016CD8.c
- docs/function_notes/NEEDS_REVIEW.md:112 probably builds a free list of a2 16-byte nodes in the buffer at result, linked via +8 and +12, terminated with 0
- docs/function_notes/hk_01.md:106 probably builds a free list of a2 16-byte nodes in the buffer at result, linked via +8 and +12, terminated with 0
sub_2016D28
export/plan0/arm9_main/sub_2016D28_02016D28.c
- docs/function_notes/hk_01.md:107 trivial; clears the first word of the given list head to 0
sub_2016D34
export/plan0/arm9_main/sub_2016D34_02016D34.c
- docs/function_notes/NEEDS_REVIEW.md:113 probably re-initialises the memory pools: copies a 12-word table from off_2016F1C, splits sizes among pool heads off_2016F20/off_2016F24, rebuilds node lists, pushes free ranges (guess)
- docs/function_notes/hk_01.md:108 probably re-initialises the memory pools: copies a 12-word table from off_2016F1C, splits sizes among pool heads off_2016F20/off_2016F24, rebuilds node lists, pushes free ranges (guess)
sub_2016F2C
export/plan0/arm9_main/sub_2016F2C_02016F2C.c
- docs/function_notes/NEEDS_REVIEW.md:114 probably frees a block from packed handle a1 (size from mask dword_2016FAC, offset from dword_2016FA8) into list off_2016FB0 or off_2016FB8 per bit 31; returns 2 if size is 0
- docs/function_notes/hk_01.md:109 probably frees a block from packed handle a1 (size from mask dword_2016FAC, offset from dword_2016FA8) into list off_2016FB0 or off_2016FB8 per bit 31; returns 2 if size is 0
sub_2016FBC
export/plan0/arm9_main/sub_2016FBC_02016FBC.c
- docs/function_notes/NEEDS_REVIEW.md:115 probably allocates a 16-byte-aligned block from pool off_2017060 or off_2017068 (per a2 flag) via sub_2016C44; returns packed handle or 0
- docs/function_notes/hk_01.md:110 probably allocates a 16-byte-aligned block from pool off_2017060 or off_2017068 (per a2 flag) via sub_2016C44; returns packed handle or 0
sub_20170DC
export/plan0/arm9_main/sub_20170DC_020170DC.c
- docs/function_notes/hk_01.md:111 trivial; returns 16 * a1 (units of 16 bytes to bytes)
sub_20170E4
export/plan0/arm9_main/sub_20170E4_020170E4.c
- docs/function_notes/NEEDS_REVIEW.md:116 probably resets pool off_2017130: rebuilds node list via sub_2016CD8, clears the head, then pushes the full range into list off_2017134
- docs/function_notes/hk_01.md:112 probably resets pool off_2017130: rebuilds node list via sub_2016CD8, clears the head, then pushes the full range into list off_2017134
sub_2017138
export/plan0/arm9_main/sub_2017138_02017138.c
- docs/function_notes/NEEDS_REVIEW.md:117 probably frees a packed handle (size from dword_2017184 mask) into list off_2017188/off_201718C via sub_20169A4; returns non-zero when that insert fails
- docs/function_notes/hk_01.md:113 probably frees a packed handle (size from dword_2017184 mask) into list off_2017188/off_201718C via sub_20169A4; returns non-zero when that insert fails
sub_2017190
export/plan0/arm9_main/sub_2017190_02017190.c
- docs/function_notes/NEEDS_REVIEW.md:118 probably allocates a block of 8-byte (or 16-byte when a2 is 0) aligned size from list off_2017268 via sub_2016B00; rejects blocks past 0x10000; returns packed handle or 0
- docs/function_notes/hk_01.md:114 probably allocates a block of 8-byte (or 16-byte when a2 is 0) aligned size from list off_2017268 via sub_2016B00; rejects blocks past 0x10000; returns packed handle or 0
sub_20172D0
export/plan0/arm9_main/sub_20172D0_020172D0.c
- docs/function_notes/hk_01.md:115 trivial; returns 16 * a1
sub_20172D8
export/plan0/arm9_main/sub_20172D8_020172D8.c
- docs/function_notes/NEEDS_REVIEW.md:119 probably walks a linked list from head a1 by a2 steps using sub_201733C (next-node accessor); returns the node reached or 0
- docs/function_notes/hk_01.md:116 probably walks a linked list from head a1 by a2 steps using sub_201733C (next-node accessor); returns the node reached or 0
sub_2017328
export/plan0/arm9_main/sub_2017328_02017328.c
- docs/function_notes/NEEDS_REVIEW.md:120 probably list accessor: returns the next-link word at a2 + a1[10] when a2 is non-zero, else the head word at a1+4
- docs/function_notes/hk_01.md:117 probably list accessor: returns the next-link word at a2 + a1[10] when a2 is non-zero, else the head word at a1+4
sub_201733C
export/plan0/arm9_main/sub_201733C_0201733C.c
- docs/function_notes/NEEDS_REVIEW.md:121 probably list accessor: returns the next pointer from node a2 (via a1[5] offset) when a2 is non-zero, else the head word at *a1
- docs/function_notes/hk_01.md:118 probably list accessor: returns the next pointer from node a2 (via a1[5] offset) when a2 is non-zero, else the head word at *a1
sub_2017354
export/plan0/arm9_main/sub_2017354_02017354.c
- docs/function_notes/NEEDS_REVIEW.md:122 probably unlinks node a2 from the doubly-linked list at result (fixes prev and next links, clears the node, decrements count at +8)
- docs/function_notes/hk_01.md:119 probably unlinks node a2 from the doubly-linked list at result (fixes prev and next links, clears the node, decrements count at +8)
sub_20173C0
export/plan0/arm9_main/sub_20173C0_020173C0.c
- docs/function_notes/NEEDS_REVIEW.md:123 probably intrusive list insert of node a3 next to node a2 (link offset at list+10, count at list+8); falls back to sub_20174A4 (tail) or sub_2017440 (head).
- docs/function_notes/hk_02.md:3 probably intrusive list insert of node a3 next to node a2 (link offset at list+10, count at list+8); falls back to sub_20174A4 (tail) or sub_2017440 (head).
sub_2017440
export/plan0/arm9_main/sub_2017440_02017440.c
- docs/function_notes/NEEDS_REVIEW.md:124 probably prepends node a2 to the list whose head is at result[0]; empty list goes to sub_201750C; bumps count at list+8.
- docs/function_notes/hk_02.md:4 probably prepends node a2 to the list whose head is at result[0]; empty list goes to sub_201750C; bumps count at list+8.
sub_20174A4
export/plan0/arm9_main/sub_20174A4_020174A4.c
- docs/function_notes/NEEDS_REVIEW.md:125 probably appends node a2 to the list tail (tail at list+4); empty list goes to sub_201750C; bumps count at list+8.
- docs/function_notes/hk_02.md:5 probably appends node a2 to the list tail (tail at list+4); empty list goes to sub_201750C; bumps count at list+8.
sub_201750C
export/plan0/arm9_main/sub_201750C_0201750C.c
- docs/function_notes/NEEDS_REVIEW.md:126 probably initialises a list with the single node a2 (head = tail = a2, its links zeroed) and bumps the count.
- docs/function_notes/hk_02.md:6 probably initialises a list with the single node a2 (head = tail = a2, its links zeroed) and bumps the count.
sub_2017538
export/plan0/arm9_main/sub_2017538_02017538.c
- docs/function_notes/NEEDS_REVIEW.md:127 probably initialises a list header: head, tail and count set to 0, link offset (u16 at +10) set to a2.
- docs/function_notes/hk_02.md:7 probably initialises a list header: head, tail and count set to 0, link offset (u16 at +10) set to a2.
sub_2017550
export/plan0/arm9_main/sub_2017550_02017550.c
- docs/function_notes/hk_02.md:8 thin wrapper; calls the function pointer off_2017560 with off_2017564 and a1.
sub_2017568
export/plan0/arm9_main/sub_2017568_02017568.c
- docs/function_notes/hk_02.md:9 thin wrapper; gets the current heap/arena pointer from sub_2017614 and passes it with a1 to sub_2017354 (probably an allocate or insert).
sub_2017584
export/plan0/arm9_main/sub_2017584_02017584.c
- docs/function_notes/NEEDS_REVIEW.md:128 probably initialises a heap/arena block: stores a2, a3, a4, flag a5, sets up its free list (sub_2017538), one-time global init, appends to a parent list.
- docs/function_notes/hk_02.md:10 probably initialises a heap/arena block: stores a2, a3, a4, flag a5, sets up its free list (sub_2017538), one-time global init, appends to a parent list.
sub_2017614
export/plan0/arm9_main/sub_2017614_02017614.c
- docs/function_notes/NEEDS_REVIEW.md:129 probably returns the current arena pointer: looks up the block containing a1 via sub_2017640, returning block+12, else the default off_201763C.
- docs/function_notes/hk_02.md:11 probably returns the current arena pointer: looks up the block containing a1 via sub_2017640, returning block+12, else the default off_201763C.
sub_2017640
export/plan0/arm9_main/sub_2017640_02017640.c
- docs/function_notes/NEEDS_REVIEW.md:130 probably recursive search of an address-ordered block tree (walks via sub_201733C) for the block whose range [+24,+28) contains a2; returns it or 0.
- docs/function_notes/hk_02.md:12 probably recursive search of an address-ordered block tree (walks via sub_201733C) for the block whose range [+24,+28) contains a2; returns it or 0.
sub_20176B0
export/plan0/arm9_main/sub_20176B0_020176B0.c
- docs/function_notes/NEEDS_REVIEW.md:131 probably setter for a u16 field at a1+52 (through a1+36+16); returns the previous value.
- docs/function_notes/hk_02.md:13 probably setter for a u16 field at a1+52 (through a1+36+16); returns the previous value.
sub_20176C0
export/plan0/arm9_main/sub_20176C0_020176C0.c
- docs/function_notes/NEEDS_REVIEW.md:132 probably queries the largest free block in the list at a1+36 that can hold aligned size a2 (alignment via sub_2134420); returns its usable size.
- docs/function_notes/hk_02.md:14 probably queries the largest free block in the list at a1+36 that can hold aligned size a2 (alignment via sub_2134420); returns its usable size.
sub_2017748
export/plan0/arm9_main/sub_2017748_02017748.c
- docs/function_notes/NEEDS_REVIEW.md:133 probably sums the sizes of all blocks in the free list at a1+36 and returns total free bytes.
- docs/function_notes/hk_02.md:15 probably sums the sizes of all blocks in the free list at a1+36 and returns total free bytes.
sub_2017770
export/plan0/arm9_main/sub_2017770_02017770.c
- docs/function_notes/NEEDS_REVIEW.md:134 probably frees the block at a2-16: reads its range (sub_2017EF8), unlinks it from the list at a1+44 (sub_2017ED0), reinserts via sub_20179D4 (coalescing).
- docs/function_notes/hk_02.md:16 probably frees the block at a2-16: reads its range (sub_2017EF8), unlinks it from the list at a1+44 (sub_2017ED0), reinserts via sub_20179D4 (coalescing).
sub_20177B0
export/plan0/arm9_main/sub_20177B0_020177B0.c
- docs/function_notes/NEEDS_REVIEW.md:135 probably resizes allocated block a2 to aligned size a3: splits off and frees the tail, or absorbs a free neighbour; zero-fills if flag bit 1 set.
- docs/function_notes/hk_02.md:17 probably resizes allocated block a2 to aligned size a3: splits off and frees the tail, or absorbs a free neighbour; zero-fills if flag bit 1 set.
sub_2017938
export/plan0/arm9_main/sub_2017938_02017938.c
- docs/function_notes/NEEDS_REVIEW.md:136 probably allocation entry: rounds size a2 (min 1) to 4 bytes; a3 < 0 calls sub_2017ACC (back allocation), otherwise sub_2017B90 (front allocation).
- docs/function_notes/hk_02.md:18 probably allocation entry: rounds size a2 (min 1) to 4 bytes; a3 < 0 calls sub_2017ACC (back allocation), otherwise sub_2017B90 (front allocation).
sub_201797C
export/plan0/arm9_main/sub_201797C_0201797C.c
- docs/function_notes/hk_02.md:19 thunk; tail-calls the function pointer off_2017984 with a1.
sub_2017988
export/plan0/arm9_main/sub_2017988_02017988.c
- docs/function_notes/NEEDS_REVIEW.md:137 probably checks whether the aligned range [a1, a1+a2) holds at least 0x4C bytes; if so creates a sub-heap via sub_2017DEC, else returns 0.
- docs/function_notes/hk_02.md:20 probably checks whether the aligned range [a1, a1+a2) holds at least 0x4C bytes; if so creates a sub-heap via sub_2017DEC, else returns 0.
sub_20179D4
export/plan0/arm9_main/sub_20179D4_020179D4.c
- docs/function_notes/NEEDS_REVIEW.md:138 probably inserts free range a2[0]..a2[1] into the sorted free list at a1, merging neighbours (sub_2017ED0, sub_2017E70, sub_2017EA0); returns 1 if inserted.
- docs/function_notes/hk_02.md:21 probably inserts free range a2[0]..a2[1] into the sorted free list at a1, merging neighbours (sub_2017ED0, sub_2017E70, sub_2017EA0); returns 1 if inserted.
sub_2017ACC
export/plan0/arm9_main/sub_2017ACC_02017ACC.c
- docs/function_notes/NEEDS_REVIEW.md:139 probably finds a free block fitting size a2 with alignment a3, scanning the list at a1+36 from the back (exact or first fit), then carves via sub_2017C58.
- docs/function_notes/hk_02.md:22 probably finds a free block fitting size a2 with alignment a3, scanning the list at a1+36 from the back (exact or first fit), then carves via sub_2017C58.
sub_2017B90
export/plan0/arm9_main/sub_2017B90_02017B90.c
- docs/function_notes/NEEDS_REVIEW.md:140 probably the same search as sub_2017ACC but scanning from the front of the free list, then carves via sub_2017C58.
- docs/function_notes/hk_02.md:23 probably the same search as sub_2017ACC but scanning from the front of the free list, then carves via sub_2017C58.
sub_2017C58
export/plan0/arm9_main/sub_2017C58_02017C58.c
- docs/function_notes/NEEDS_REVIEW.md:141 probably carves an allocation of size a4 at a3 out of free block a2: links leftover free nodes (sub_2017E70, sub_2017EA0), writes header; returns a3.
- docs/function_notes/hk_02.md:24 probably carves an allocation of size a4 at a3 out of free block a2: links leftover free nodes (sub_2017E70, sub_2017EA0), writes header; returns a3.
sub_2017DEC
export/plan0/arm9_main/sub_2017DEC_02017DEC.c
- docs/function_notes/NEEDS_REVIEW.md:142 probably initialises a sub-heap object a1 over memory [a1[6], a1[7]) with a free block (sub_2017584 then sub_2017E70), clears its flag word and list pointers.
- docs/function_notes/hk_02.md:25 probably initialises a sub-heap object a1 over memory [a1[6], a1[7]) with a free block (sub_2017584 then sub_2017E70), clears its flag word and list pointers.
sub_2017E70
export/plan0/arm9_main/sub_2017E70_02017E70.c
- docs/function_notes/NEEDS_REVIEW.md:143 probably writes a block header at *a1: u16 type a2, cleared flags, size = end - (hdr+16), next and prev set to 0; returns the header.
- docs/function_notes/hk_02.md:26 probably writes a block header at *a1: u16 type a2, cleared flags, size = end - (hdr+16), next and prev set to 0; returns the header.
sub_2017EA0
export/plan0/arm9_main/sub_2017EA0_02017EA0.c
- docs/function_notes/NEEDS_REVIEW.md:144 probably inserts node a2 into the doubly linked list with head/tail at a1[0]/a1[1], after node a3 (a3 = 0 means at the head).
- docs/function_notes/hk_02.md:27 probably inserts node a2 into the doubly linked list with head/tail at a1[0]/a1[1], after node a3 (a3 = 0 means at the head).
sub_2017ED0
export/plan0/arm9_main/sub_2017ED0_02017ED0.c
- docs/function_notes/NEEDS_REVIEW.md:145 probably unlinks node a2 from the doubly linked list with head/tail at a1[0]/a1[1]; returns its former predecessor.
- docs/function_notes/hk_02.md:28 probably unlinks node a2 from the doubly linked list with head/tail at a1[0]/a1[1]; returns its former predecessor.
sub_2017EF8
export/plan0/arm9_main/sub_2017EF8_02017EF8.c
- docs/function_notes/NEEDS_REVIEW.md:146 probably computes the address range of block a2 into result[0] (start, from the size header) and result[1] (end = a2 + size + 16).
- docs/function_notes/hk_02.md:29 probably computes the address range of block a2 into result[0] (start, from the size header) and result[1] (end = a2 + size + 16).
sub_2017F24
export/plan0/arm9_main/sub_2017F24_02017F24.c
- docs/function_notes/NEEDS_REVIEW.md:147 probably rewinds a stack-style allocator: if a1[7] equals a1[10], resets a1[7] to a1[9] and returns the offset from a1, else 0.
- docs/function_notes/hk_02.md:30 probably rewinds a stack-style allocator: if a1[7] equals a1[10], resets a1[7] to a1[9] and returns the offset from a1, else 0.
sub_2017F58
export/plan0/arm9_main/sub_2017F58_02017F58.c
- docs/function_notes/NEEDS_REVIEW.md:148 probably looks up an entry by key a2 in the list at a1+44; on a match copies the entry's three words into a1+36..+44 and returns 1.
- docs/function_notes/hk_02.md:31 probably looks up an entry by key a2 in the list at a1+44; on a match copies the entry's three words into a1+36..+44 and returns 1.
sub_2017FB4
export/plan0/arm9_main/sub_2017FB4_02017FB4.c
- docs/function_notes/NEEDS_REVIEW.md:149 probably pushes a2 onto the list head at a1+44: allocates a 16-byte node from the frame heap (sub_20181F0) and links it; returns 1 on success.
- docs/function_notes/hk_02.md:32 probably pushes a2 onto the list head at a1+44: allocates a 16-byte node from the frame heap (sub_20181F0) and links it; returns 1 on success.
sub_201800C
export/plan0/arm9_main/sub_201800C_0201800C.c
- docs/function_notes/NEEDS_REVIEW.md:150 probably returns the free bytes left in the frame heap at a1 after reserving aligned size a2 (uses sub_2134420); returns 0 if it does not fit.
- docs/function_notes/hk_02.md:33 probably returns the free bytes left in the frame heap at a1 after reserving aligned size a2 (uses sub_2134420); returns 0 if it does not fit.
sub_201804C
export/plan0/arm9_main/sub_201804C_0201804C.c
- docs/function_notes/NEEDS_REVIEW.md:151 probably flag dispatcher on a2: bit 0 calls sub_201815C, bit 1 calls sub_201812C(a1) and returns its result.
- docs/function_notes/hk_02.md:34 probably flag dispatcher on a2: bit 0 calls sub_201815C, bit 1 calls sub_201812C(a1) and returns its result.
sub_201808C
export/plan0/arm9_main/sub_201808C_0201808C.c
- docs/function_notes/NEEDS_REVIEW.md:152 probably frame heap allocation wrapper: size a2 (min 1) rounded to 4; a3 < 0 allocates from the tail (sub_2018174), else from the head (sub_20181F0).
- docs/function_notes/hk_02.md:35 probably frame heap allocation wrapper: size a2 (min 1) rounded to 4; a3 < 0 allocates from the tail (sub_2018174), else from the head (sub_20181F0).
sub_20180D4
export/plan0/arm9_main/sub_20180D4_020180D4.c
- docs/function_notes/agent_01.md:6 thunk: calls the function pointer at 0x20180DC with a1
sub_20180E0
export/plan0/arm9_main/sub_20180E0_020180E0.c
- docs/function_notes/agent_01.md:7 create frame heap in region [a1,a1+a2) if aligned size >= 0x30, else returns 0
sub_201812C
export/plan0/arm9_main/sub_201812C_0201812C.c
- docs/function_notes/agent_01.md:8 frame heap helper: sets every node in list (+44) field +8 to heap +28, then +40 = +28 (reset/restore state)
sub_201815C
export/plan0/arm9_main/sub_201815C_0201815C.c
- docs/function_notes/agent_01.md:9 frame heap reset: +36 = +24, +44 = 0 (free-all style)
sub_2018174
export/plan0/arm9_main/sub_2018174_02018174.c
- docs/function_notes/agent_01.md:10 frame heap alloc from the tail (aligned down, fails if below head); optionally zero-fills
sub_20181F0
export/plan0/arm9_main/sub_20181F0_020181F0.c
- docs/function_notes/agent_01.md:11 frame heap alloc from the head (aligned up, fails if past tail); optionally zero-fills
sub_2018270
export/plan0/arm9_main/sub_2018270_02018270.c
- docs/function_notes/agent_01.md:12 frame heap init: calls base heap init then sets head/tail/state fields (+36,+40,+44)
sub_20182C0
export/plan0/arm9_main/sub_20182C0_020182C0.c
- docs/function_notes/agent_01.md:13 FS: opens a file and returns its absolute ROM offset (archive base + file start); 0 on failure
sub_2018314
export/plan0/arm9_main/sub_2018314_02018314.c
- docs/function_notes/agent_01.md:14 FS: if archive/file op sub_2003F50 succeeds, calls sub_2004090 and returns 1 (else 0)
sub_2018344
export/plan0/arm9_main/sub_2018344_02018344.c
- docs/function_notes/agent_01.md:15 mounts an in-memory NARC (checks header, finds BTAF/GMIF/BTNF chunks) as an FS archive and registers its name
sub_20184A0
export/plan0/arm9_main/sub_20184A0_020184A0.c
- docs/function_notes/agent_01.md:16 checks NARC header magic, byte-order and version (0x0100); returns 1 if valid
sub_20184E4
export/plan0/arm9_main/sub_20184E4_020184E4.c
- vm_model/src/nitro_particle_pool.rs:340 Primary portion of sub_20184E4: repeatedly pop active head and push free head.
- docs/function_notes.md:115 recycles primary/child particles, unlinks emitter and returns it to free pool
- docs/function_notes.md:346 immediate emitter cancellation: repeatedly pops primary then child list heads into shared free-particle head, removes emitter from active list and pushes it onto free-emitter head. Primary and child cancellation pools ported; reversal and reuse ordering covered by list-operation replay and synthetic child-pool tests
sub_2018578
export/plan0/arm9_main/sub_2018578_02018578.c
- docs/function_notes/agent_01.md:19 SPL: create/spawn emitter from resource entry a2: takes emitter from free list, inits it, optional callback, links into active list
sub_2018600
export/plan0/arm9_main/sub_2018600_02018600.c
- docs/function_notes.md:114 allocates and initializes SPL emitter from free pool, links active list; one-shot resource flag 0x4000 returns null despite successful creation
sub_2018674
export/plan0/arm9_main/sub_2018674_02018674.c
- docs/function_notes/agent_01.md:20 SPL_Draw: sets 3D control bits then iterates active emitter list (forward or reverse by flag) calling the emitter drawer
sub_201873C
export/plan0/arm9_main/sub_201873C_0201873C.c
- vm_model/src/nitro_particle_emitter.rs:1 SPL manager/emitter cadence (sub_201873C and scheduling in sub_20192E0).
- docs/function_notes.md:120 SPL manager activates emitters when age>=base start delay then resets age; simulation-pause bit2 skips updates, selector bits16..18 choose manager phase 0/1; manager advances phase after traversal. Recycles empty emitters only when stop bit0 is set or auto-expiry bit14 has a nonzero lifetime and age strictly exceeds it. Clock/cadence replay matches 1050 controlled original decisions, including 279 birth calls and 4 removals; pre-tick callback state is supplied separately
sub_2018874
export/plan0/arm9_main/sub_2018874_02018874.c
- docs/function_notes/agent_01.md:21 SPL: texture setup wrapper, calls function pointer with (a1, callback table)
sub_2018950
export/plan0/arm9_main/sub_2018950_02018950.c
- docs/function_notes/agent_01.md:22 SPL: loads each particle texture (via callback, 20-byte entries) into texture VRAM, shares duplicates
sub_2018A1C
export/plan0/arm9_main/sub_2018A1C_02018A1C.c
- vm_model/src/nitro_spa.rs:2 sub_2018A1C, emitter fields from sub_2019B28, texture parameters from sub_2019DF8.
- vm_model/src/nitro_spa.rs:47 Same flags, sizes and order as sub_2018A1C. Includes optional child
- docs/function_notes.md:116 SPA 1.2 resource loader: 88-byte emitter bases plus flag-selected blocks; TPS texture records traverse by record length at +28
sub_2018D94
export/plan0/arm9_main/sub_2018D94_02018D94.c
- vm_model/src/nitro_particle_pool.rs:75 sub_2018D94 zeroes slots and head-inserts them in ascending address order:
- docs/function_notes.md:117 allocates SPL manager and emitter/particle pools (76/156/68-byte structures) and initializes free lists
- docs/function_notes.md:345 SPL manager constructor: allocates/zeros 76-byte manager, initializes polygon min/max/current/fixed IDs, then zeros 156-byte emitter slots and 68-byte particle slots and head-inserts each in ascending address order. Highest-address slot allocated first; primary pool constructor ported; initial zero-fill/order source-derived
sub_2018F24
export/plan0/arm9_main/sub_2018F24_02018F24.c
- docs/function_notes/agent_01.md:23 texture VRAM helper: calls allocator function pointer then returns (result & mask) * 8
sub_2018F5C
export/plan0/arm9_main/sub_2018F5C_02018F5C.c
- docs/function_notes/agent_01.md:24 same as sub_2018F24 with a different allocator pointer (palette VRAM variant)
sub_2018F94
export/plan0/arm9_main/sub_2018F94_02018F94.c
- docs/function_notes/agent_01.md:25 uncertain: emitter setup for types 6/7: center = midpoint of two points, radius = half distance, normalized axis
sub_2019090
export/plan0/arm9_main/sub_2019090_02019090.c
- docs/function_notes/agent_01.md:26 SPL: draws one emitter, ordering child particles vs main particles by emitter flags
sub_201910C
export/plan0/arm9_main/sub_201910C_0201910C.c
- docs/function_notes/agent_01.md:27 SPL: draws all child particles of an emitter (picks draw routine from child draw type 0-4)
sub_20191F4
export/plan0/arm9_main/sub_20191F4_020191F4.c
- docs/function_notes/agent_01.md:28 SPL: draws all main particles of an emitter (picks draw routine from draw type 0-4)
sub_20192E0
export/plan0/arm9_main/sub_20192E0_020192E0.c
- vm_model/src/nitro_particle.rs:68 Evaluate one channel using the phase byte supplied by sub_20192E0.
- vm_model/src/nitro_particle_emitter.rs:1 SPL manager/emitter cadence (sub_201873C and scheduling in sub_20192E0).
- vm_model/src/nitro_particle_pool.rs:254 Full primary/child traversal from sub_20192E0. Saved-next order keeps
- vm_model/src/nitro_particle_pool.rs:267 sub_20192E0 tests resource flag 0x10000 before child emission.
- vm_model/src/nitro_particle_update.rs:1 Primary and child SPL particle ticks from sub_20192E0.
- docs/function_notes.md:121 emitter and particle simulation tick: spawn cadence, animated size/color/alpha/texture, behaviors, integration, death and child emission. Primary non-child tick now ported: life/repeat phase selection, follow-emitter bit15, ordered behaviors, wrapping32 drag multiply, parent translational velocity, polygon-ID allocation and strict age>lifetime expiry match 996 original updates across all eight drift resources; emitter scheduling and child emission remain separate
- docs/function_notes.md:1682 SPL manager tests SPA resource flag0x10000 before sub_201C74C child birth (v38); ordinary primary-only resources still update/recycle. PrimaryParticlePool::tick_with_children now delegates to primary-only tick for those resources, preventing drift runtime panic.
sub_2019334
(not in export)
- docs/function_notes.md:547 SPL emitter update now includes modeled primary-to-child cadence, shared recycled-slot allocation, same-tick newborn child updates, inherited behaviors, follow-position and separate fixed child polygon flag. tick_with_children replay matches all17 controlled original updates; native child drawing remains open.
sub_2019B28
export/plan0/arm9_main/sub_2019B28_02019B28.c
- vm_model/src/nitro_particle_birth.rs:31 Relevant initialization from sub_2019B28, before wheel callbacks override fields.
- vm_model/src/nitro_particle_draw.rs:49 Initial tiling/mirroring shorts at emitter +120/+122 (sub_2019B28).
- vm_model/src/nitro_spa.rs:2 sub_2018A1C, emitter fields from sub_2019B28, texture parameters from sub_2019DF8.
- docs/function_notes.md:118 initializes emitter from resource and supplied position: rate, size, lifetime, frequency, opacity, texture parameters and other state
- docs/function_notes.md:347 initializes emitter from 88-byte SPA base: position offset, signed-short direction, speed/size/lifetime/rate controls, opacity, zero age/fraction/velocity, INT_MIN plane override and texture repeat; point-birth field subset ported
sub_2019DF4
(not in export)
- docs/function_notes/agent_01.md:29 nullsub_13: empty function
sub_2019DF8
export/plan0/arm9_main/sub_2019DF8_02019DF8.c
- vm_model/src/nitro_spa.rs:2 sub_2018A1C, emitter fields from sub_2019B28, texture parameters from sub_2019DF8.
- docs/function_notes.md:119 converts SPA texture flags to GX texture parameters; palette-zero transparency comes from resource flag bit 16
- docs/function_notes.md:354 SPL binds particle texture and texture-size scaling matrix (texgen mode1); normalized quad UVs become texel coordinates; source-derived native texture bridge
sub_2019EE4
export/plan0/arm9_main/sub_2019EE4_02019EE4.c
- docs/function_notes/agent_01.md:30 uncertain: SPL draw one oriented polygon particle (builds basis from direction, scale, rotation, color, sends 3D commands)
sub_201A364
export/plan0/arm9_main/sub_201A364_0201A364.c
- docs/function_notes.md:351 SPL primary velocity-oriented world quad draw; builds cross-product basis and resource-selected rotation, scales then supplies view LOAD/local MULT; original drift spark local matrices/quad inputs replay-confirmed
- docs/function_notes/agent_01.md:31 uncertain: SPL draw one oriented polygon child particle (same as sub_2019EE4, child params)
sub_201A7E0
export/plan0/arm9_main/sub_201A7E0_0201A7E0.c
- docs/function_notes/agent_01.md:32 uncertain: SPL draw one billboard particle (rotation + scale matrix, color, texture coords)
sub_201AB30
export/plan0/arm9_main/sub_201AB30_0201AB30.c
- docs/function_notes/agent_01.md:33 uncertain: SPL draw one billboard child particle (same as sub_201A7E0, child params)
sub_201AE80
export/plan0/arm9_main/sub_201AE80_0201AE80.c
- docs/function_notes/agent_01.md:34 uncertain: SPL draw one direction-stretched billboard particle (aligned to velocity vs camera)
sub_201B560
export/plan0/arm9_main/sub_201B560_0201B560.c
- docs/function_notes.md:350 SPL primary velocity-aligned billboard draw; camera-forward cross product selects screen side, view-aligned speed stretch uses separately rounded dot terms; original drift flare matrix/quad inputs replay-confirmed
- docs/function_notes/agent_01.md:35 uncertain: SPL draw one direction-stretched billboard child particle (same as sub_201AE80, child params)
sub_201BC48
export/plan0/arm9_main/sub_201BC48_0201BC48.c
- docs/function_notes/agent_01.md:36 uncertain: SPL draw one billboard particle in view space (sin/cos table rotation, builds quad matrix, no matrix stack)
sub_201C09C
export/plan0/arm9_main/sub_201C09C_0201C09C.c
- docs/function_notes.md:349 SPL primary camera-facing billboard draw; native row-vector fx12 matrix port matches captured original drift smoke calls (part of 721 draw replay calls)
- docs/function_notes/agent_01.md:37 uncertain: SPL draw one billboard child particle (same as sub_201BC48, child params)
sub_201C4E8
export/plan0/arm9_main/sub_201C4E8_0201C4E8.c
- docs/function_notes.md:370 builds row-vector fx12 Y-axis rotation from sine/cosine into a3; used by the drift world-quads' selector0. Matrix order/output replay-confirmed within721 original draw calls
- docs/function_notes/agent_01.md:38 builds 3x3 fixed-point rotation matrix about the Y axis from sin a1 / cos a2 into a3
sub_201C528
export/plan0/arm9_main/sub_201C528_0201C528.c
- docs/function_notes.md:371 builds row-vector fx12 rotation about diagonal axis(1,1,1), using1365=1/3 and2365=1/sqrt3 approximations; source-derived selector1, not exercised by current drift resources. Corrects earlier generic annotation calling it a texture-center rotation
- docs/function_notes/agent_01.md:39 builds 3x3 2D texture-rotation matrix (about texture center) from sin a1 / cos a2 into a3
sub_201C5D4
export/plan0/arm9_main/sub_201C5D4_0201C5D4.c
- vm_model/src/nitro_particle_draw.rs:23 sub_201C690 / sub_201C5D4: signed16 corners quantized by VTX10.
- docs/function_notes.md:373 emits an XZ QUADS primitive with signed16 offset +/-4096 corners quantized into VTX10 and four tiled UV corners. Source-derived; current drift capture exercises XY only, not this helper
- docs/function_notes/agent_01.md:40 emits one textured quad (BEGIN_VTXS quads, TEXCOORD + 4 packed VTX_10) in the X/Z plane, center (a3,a4)
sub_201C690
export/plan0/arm9_main/sub_201C690_0201C690.c
- vm_model/src/nitro_particle_draw.rs:23 sub_201C690 / sub_201C5D4: signed16 corners quantized by VTX10.
- docs/function_notes.md:372 emits an XY QUADS primitive with signed16 offset +/-4096 corners quantized into VTX10 and four tiled UV corners. All721 drift captures verify its arguments; GPU vertex/UV command packing source-derived
- docs/function_notes/agent_01.md:41 emits one textured quad (4 packed VTX_10 vertices) in the X/Y plane, texcoords (a1,a2), center (a3,a4)
sub_201C74C
export/plan0/arm9_main/sub_201C74C_0201C74C.c
- vm_model/src/nitro_particle_child.rs:1 SPL child birth arithmetic from sub_201C74C (ARM9 0x0201C74C).
- docs/function_notes.md:355 SPL child birth from a primary particle into an allocated recycled slot: copied relative/emitter positions, rounded64 inherited velocity plus three signed random draws, wrapping32 scaled size, inherited effective opacity, optional child color, rotation modes 0..2 and untouched recycled angles for mode3. Child life comes from optional record; animation steps divide by parent life (SDK numerator fallback at zero). Ported in nitro_particle_child.rs; 40 controlled original births across all four rotation modes match every modeled field and RNG. Shared pool/cadence and child updates now ported; all17 controlled full emitter snapshots match particle fields, RNG, polygon state and list ownership/order. Drawing/native integration remain separate.
- docs/function_notes/agent_01.md:42 SPL: spawns child particles of a particle: takes nodes from free list, copies parent pos/vel with random spread, color, scale, alpha
sub_201CA6C
export/plan0/arm9_main/sub_201CA6C_0201CA6C.c
- vm_model/src/nitro_particle_birth.rs:1 Original point-emitter particle birth (
sub_201CA6C), used by all drift resources. - docs/function_notes.md:122 allocates primary particles from fractional fx12 emission-rate accumulator; point-emission birth port matches 280 original births and RNG states (details below); other emission shapes and pool exhaustion remain separate
- docs/function_notes.md:331 primary SPL birth consumes rate+fraction, retains low12 fraction; point-emitter branch now ported for all eight drift/wheel resources. Speed RNG draws precede random unit-vector generation; randomized size/color/angle/lifetime/texture/repeat phase follow in original order. All 280 captured particles match initialized fields and final RNG; non-point shapes and pool exhaustion remain separate
sub_201D798
export/plan0/arm9_main/sub_201D798_0201D798.c
- docs/function_notes/agent_01.md:43 SPL: converts emitter-local vector a2 to world using the emitter basis (axis at +132 plus cross product)
sub_201D8F8
export/plan0/arm9_main/sub_201D8F8_0201D8F8.c
- docs/function_notes/agent_01.md:44 SPL emitter: builds two perpendicular unit tangent vectors (at +132 and +138) for the emitter axis (+80, X, Y or Z)
sub_201DB80
export/plan0/arm9_main/sub_201DB80_0201DB80.c
- docs/function_notes.md:546 child particle fade channel: linear alpha31*(255-phase)/255; ported in nitro_particle_update.rs and full child-emitter replay.
- docs/function_notes/agent_01.md:45 SPL particle behavior: sets alpha (bits 5-9 of +46) from fade factor 255-a3 scaled to 0..31
sub_201DBD8
export/plan0/arm9_main/sub_201DBD8_0201DBD8.c
- docs/function_notes.md:545 child particle linear scale channel: signed end scale + trunc((end scale -4096)(phase-255)/255), phase is age256/lifetime castu8; ported in nitro_particle_update.rs and full child-emitter replay.
- docs/function_notes/agent_01.md:46 SPL particle behavior: scale (+52) interpolated toward 1.0 as time a3 goes 0..255
sub_201DC24
export/plan0/arm9_main/sub_201DC24_0201DC24.c
- vm_model/src/nitro_particle.rs:2 (color), sub_201DC88 (opacity), sub_201DC24 (texture). This is not yet
- docs/function_notes.md:192 particle texture sequence by phase/step; returns unchanged past sequence end rather than clamping; ported, matched blue flare 126 runtime captures
- docs/function_notes/agent_01.md:47 SPL particle behavior: texture animation, picks frame index (+44) from frame table by elapsed time
sub_201DC88
export/plan0/arm9_main/sub_201DC88_0201DC88.c
- vm_model/src/nitro_particle.rs:2 (color), sub_201DC88 (opacity), sub_201DC24 (texture). This is not yet
- docs/function_notes.md:191 particle opacity envelope and SPL RNG attenuation; preserves packed base-alpha/upper bits; C first-segment start is misleading, ARM confirms packed low five bits; ported and runtime matched
- docs/function_notes/agent_01.md:48 SPL particle behavior: alpha fade in/out over lifetime with random flicker
sub_201DD64
export/plan0/arm9_main/sub_201DD64_0201DD64.c
- vm_model/src/nitro_particle.rs:1 Original SPL channel evaluators: sub_201DF30 (scale), sub_201DD64
- docs/function_notes.md:190 BGR555 particle color envelope: start/base/end, optional per-channel integer interpolation; ported, matched original SPL captures
- docs/function_notes/agent_01.md:49 SPL particle behavior: color (+54) interpolated between start, middle and end RGB555 colors over lifetime
sub_201DF30
export/plan0/arm9_main/sub_201DF30_0201DF30.c
- vm_model/src/nitro_particle.rs:1 Original SPL channel evaluators: sub_201DF30 (scale), sub_201DD64
- docs/function_notes.md:189 signed fx12 particle scale envelope (rise/hold/fall); ported, matched original SPL captures
- docs/function_notes/agent_01.md:50 SPL particle behavior: three-phase scale animation (+52) over lifetime
sub_201DFC0
export/plan0/arm9_main/sub_201DFC0_0201DFC0.c
- vm_model/src/nitro_particle_motion.rs:186 sub_201DFC0: rounded position convergence (does not change velocity/acceleration).
- docs/function_notes.md:199 SPL converges particle local position toward target with rounded fx12 strength (direct position update)
- docs/function_notes.md:318 SPL rounded convergence changes local position toward target by signed-short strength, with +2048 rounding; leaves velocity and acceleration unchanged; source-derived, no runtime capture yet
- docs/function_notes/agent_01.md:51 SPL field "convergence": moves particle position (+8..+16) toward target by a fraction
sub_201E054
export/plan0/arm9_main/sub_201E054_0201E054.c
- vm_model/src/nitro_particle_motion.rs:158 sub_201E054: a strict crossing from the emitter origin clamps local Y.
- docs/function_notes.md:198 SPL horizontal plane behavior: emitter plane override or resource plane, kill or damped bounce on crossing, mode in low two flag bits
- docs/function_notes.md:317 SPL plane behavior uses emitter +116 override unless INT_MIN, strict crossing against emitter Y plus local Y; mode0 sets age to lifetime, mode1 clamps Y and negates rounded damped Y velocity; source-derived, no runtime capture yet
- docs/function_notes/agent_01.md:52 SPL field "collision plane": at height (emitter +116 or default) either kills the particle (mode 0) or bounces velocity with restitution (mode 1)
sub_201E170
export/plan0/arm9_main/sub_201E170_0201E170.c
- vm_model/src/nitro_particle_motion.rs:145 sub_201E170 and sub_2146D78: SDK quantized sine/cosine, unrounded matrix multiply.
- docs/function_notes.md:197 SPL rotates particle local position around selected coordinate axis using angle-indexed SDK rotation matrix
- docs/function_notes.md:315 SPL local-position rotation about selected X/Y/Z axis, angle quantized by >>4 SDK sine/cosine table; truncated matrix-vector products; runtime replay matches
- docs/function_notes/agent_01.md:53 SPL field: rotates particle position (+8..+16) about X/Y/Z axis using sin/cos table angle
sub_201E248
export/plan0/arm9_main/sub_201E248_0201E248.c
- vm_model/src/nitro_particle_motion.rs:139 sub_201E248: the multiply truncates to 32 bits before the arithmetic shift.
- docs/function_notes.md:196 SPL attraction acceleration toward target minus local position and velocity, scaled by signed fx12 strength
- docs/function_notes.md:316 SPL attraction adds strength*(target-localPosition-velocity)>>12 to acceleration; ARM MUL confirms product wraps to 32 bits before shift (not 64-bit fx12 multiplication); source-derived, no runtime capture yet
- docs/function_notes/agent_01.md:54 SPL field "magnet": accel += k * (target - position - velocity)
sub_201E2CC
export/plan0/arm9_main/sub_201E2CC_0201E2CC.c
- vm_model/src/nitro_particle_motion.rs:122 sub_201E2CC: age modulo interval; exactly three SPL RNG draws on active ticks.
- docs/function_notes.md:195 SPL random acceleration behavior: every configured particle-age interval draws independent signed perturbation per axis
- docs/function_notes.md:314 SPL periodic random acceleration: only age modulo interval zero draws RNG three times, each impulse is (strength*(state>>23) - (strength<<8))>>8; inactive ticks preserve RNG; runtime replay matches
- docs/function_notes/agent_01.md:55 SPL field "random": adds random acceleration when age is a multiple of the interval
sub_201E394
export/plan0/arm9_main/sub_201E394_0201E394.c
- vm_model/src/nitro_particle_motion.rs:120 sub_201E394: signed-short acceleration, no extra fx12 conversion.
- docs/function_notes.md:194 SPL constant acceleration behavior: adds three signed shorts to the tick acceleration accumulator
- docs/function_notes.md:313 SPL constant acceleration: adds three signed-short components directly to tick acceleration; controlled original resource replay matches all captured calls
- docs/function_notes/agent_01.md:56 SPL field "gravity": accel += constant vector
sub_201E3C8
export/plan0/arm9_main/sub_201E3C8_0201E3C8.c
- vm_model/src/nitro_particle_pool.rs:53 sub_201E3C8 removes the named node without reordering other nodes.
- docs/function_notes.md:344 SPL list remove-node: handles head/middle/tail/sole-node removal and decrements count without reordering survivors; all 343 recorded removes match stable slot/list identities and headers
- docs/function_notes/agent_01.md:57 doubly linked list (head, count, tail): unlinks node a2 and decrements count
sub_201E448
export/plan0/arm9_main/sub_201E448_0201E448.c
- vm_model/src/nitro_particle_pool.rs:2 Ordering follows sub_201E448/201E494/201E3C8, not a compacting particle vector.
- vm_model/src/nitro_particle_pool.rs:41 sub_201E448 removes the first node; empty lists return null.
- docs/function_notes.md:342 SPL list pop-head: returns null without changing an empty list, otherwise updates head/previous link and clears tail on last removal, decrements count. Ordering replay-confirmed as part of 1396 original list operations, including 20 empty allocations
- docs/function_notes/agent_01.md:58 list pop: removes and returns the head node (or 0 if empty)
sub_201E494
export/plan0/arm9_main/sub_201E494_0201E494.c
- vm_model/src/nitro_particle_pool.rs:45 sub_201E494 inserts at the head, retaining the old tail if nonempty.
- docs/function_notes.md:343 SPL list push-head: prepends node, sets old-head previous link; empty list sets both head and tail; increments count. New particles update before older particles and recycled slots are allocated first; replay-confirmed in 688 original pushes
- docs/function_notes/agent_01.md:59 list push: inserts node at the head, increments count
sub_201E4E4
export/plan0/arm9_main/sub_201E4E4_0201E4E4.c
- docs/function_notes/agent_01.md:60 random unit vector in the XY plane (z=0), via LCG, normalized
sub_201E540
export/plan0/arm9_main/sub_201E540_0201E540.c
- vm_model/src/nitro_particle_birth.rs:94 sub_201E540 generates signed components, then the SDK hardware normalize.
- docs/function_notes.md:193 SPL random direction: three signed high-24-bit RNG draws then SDK vector normalization (C confirmed, not yet ported)
- docs/function_notes.md:332 SPL random unit vector: three RNG states cast signed then shifted right8, followed by SDK hardware normalize; confirmed through all 280 point-particle births
- docs/function_notes/agent_01.md:61 random unit vector in 3D, via LCG, normalized
sub_201E5A8
(not in export)
- docs/function_notes/agent_01.md:62 nullsub_5: empty function
sub_201E5AC
export/plan0/arm9_main/sub_201E5AC_0201E5AC.c
- docs/function_notes/agent_01.md:63 uncertain: PXI (tag 15) receive callback: releases a lock on completion message and calls the stored completion callback with (arg, result)
sub_201E6B8
export/plan0/arm9_main/sub_201E6B8_0201E6B8.c
- docs/function_notes/agent_01.md:64 uncertain: sends a command (0x20000) on PXI tag 15 to the ARM7 and stores completion callback a1 and arg a2; returns status 1..5
sub_201E7A8
export/plan0/arm9_main/sub_201E7A8_0201E7A8.c
- docs/function_notes/agent_01.md:65 uncertain: takes a lock id then sends command (0x10000) with parameter 4, 8 or 12 on PXI tag 15, stores callback/arg; returns status 1..7
sub_201EA30
export/plan0/arm9_main/sub_201EA30_0201EA30.c
- docs/function_notes/agent_01.md:66 cell bank: get 8-byte entry a2 (bounds checked against count at +6), else 0
sub_201EA58
export/plan0/arm9_main/sub_201EA58_0201EA58.c
- docs/function_notes/agent_01.md:67 cell bank: get 12-byte entry a2 (bounds checked against count at +6), else 0
sub_201EA84
export/plan0/arm9_main/sub_201EA84_0201EA84.c
- docs/function_notes/agent_01.md:68 cell bank hit test: returns index of the 6-byte OBJ entry whose rectangle contains point (a2,a3), else -1
sub_201EB54
export/plan0/arm9_main/sub_201EB54_0201EB54.c
- docs/function_notes/agent_01.md:69 cell bank: get 6-byte OBJ attribute entry a2 (bounds checked), else 0
sub_201EB98
export/plan0/arm9_main/sub_201EB98_0201EB98.c
- docs/function_notes/agent_01.md:70 getter: OBJ count (u16 at +6)
sub_201EBA0
export/plan0/arm9_main/sub_201EBA0_0201EBA0.c
- docs/function_notes/agent_01.md:71 decodes an OBJ attribute's signed 12-bit Y position, adjusted for flip/size (a2 = size)
sub_201EBE8
export/plan0/arm9_main/sub_201EBE8_0201EBE8.c
- docs/function_notes/agent_01.md:72 decodes an OBJ attribute's signed 12-bit X position, adjusted for flip/size (same code as sub_201EBA0)
sub_201EC30
export/plan0/arm9_main/sub_201EC30_0201EC30.c
- docs/function_notes/agent_01.md:73 uncertain: microphone sample analysis: peak amplitude, loud-sample count, rising-edge intervals histogram, then pattern-matches thresholds to detect a blow/voice event; returns level
sub_20203D4
export/plan0/arm9_main/sub_20203D4_020203D4.c
- docs/function_notes/agent_01.md:76 setter: stores byte a1 into a global (mic analyzer setting)
sub_20203E4
export/plan0/arm9_main/sub_20203E4_020203E4.c
- docs/function_notes/agent_01.md:77 mic analyzer: if a buffer pointer is set, clears it and two companion globals
sub_202041C
export/plan0/arm9_main/sub_202041C_0202041C.c
- docs/function_notes/agent_01.md:78 mic analyzer: sets a global flag to 1
sub_2020430
export/plan0/arm9_main/sub_2020430_02020430.c
- docs/function_notes/agent_01.md:79 mic analyzer init: stores a1, sets flag, clears 4-entry histogram
sub_2020498
export/plan0/arm9_main/sub_2020498_02020498.c
- docs/function_notes/agent_01.md:80 mic sample to amplitude: distance of sample from the 127 midpoint
sub_20204B4
export/plan0/arm9_main/sub_20204B4_020204B4.c
- docs/function_notes/agent_01.md:81 clamps a mic sample of 255 to 254
sub_20204C0
export/plan0/arm9_main/sub_20204C0_020204C0.c
- docs/function_notes/agent_01.md:82 uncertain: validates a structure: a1+60 nonzero, a1+68 zero, 8-byte header at a1+80 matches one of two magic values and field 3 == 4
sub_202056C
export/plan0/arm9_main/sub_202056C_0202056C.c
- docs/function_notes/agent_01.md:83 popcount: number of set bits in a 32-bit word
sub_20205B0
export/plan0/arm9_main/sub_20205B0_020205B0.c
- docs/function_notes/agent_01.md:84 CRC32 of buffer a2 (length a3) using lookup table a1 (init 0xFFFFFFFF, final invert)
sub_20205E8
export/plan0/arm9_main/sub_20205E8_020205E8.c
- docs/function_notes/agent_01.md:85 CRC16 of buffer a2 (length a3) using lookup table a1 (init 0)
sub_202061C
export/plan0/arm9_main/sub_202061C_0202061C.c
- docs/function_notes/agent_01.md:86 CRC8 of buffer a2 (length a3) using lookup table a1 (init 0)
sub_2020650
export/plan0/arm9_main/sub_2020650_02020650.c
- docs/function_notes/agent_01.md:87 CRC32 update step over a buffer using table a1
sub_2020694
export/plan0/arm9_main/sub_2020694_02020694.c
- docs/function_notes/agent_01.md:88 builds the 256-entry CRC32 table (reflected) for polynomial a2
sub_20206D8
export/plan0/arm9_main/sub_20206D8_020206D8.c
- docs/function_notes/agent_01.md:89 CRC16 update step over a buffer using table a1
sub_2020720
export/plan0/arm9_main/sub_2020720_02020720.c
- docs/function_notes/agent_01.md:90 builds the 256-entry CRC16 table (reflected) for polynomial a2
sub_2020768
export/plan0/arm9_main/sub_2020768_02020768.c
- docs/function_notes/agent_01.md:91 CRC8 update step over a buffer using table a1
sub_20207A8
export/plan0/arm9_main/sub_20207A8_020207A8.c
- docs/function_notes/agent_01.md:92 builds the 256-entry CRC8 table (MSB-first) for polynomial a2
sub_20207EC
export/plan0/arm9_main/sub_20207EC_020207EC.c
- docs/function_notes/agent_01.md:95 SND command send: allocates a command slot, fills command id + 4 args, queues it
sub_2020844
export/plan0/arm9_main/sub_2020844_02020844.c
- docs/function_notes/agent_01.md:96 SND command 22 with one arg
sub_2020870
export/plan0/arm9_main/sub_2020870_02020870.c
- docs/function_notes/agent_01.md:97 SND command 7 (track parameter): args (player | size<<24, track mask, offset, value)
sub_20208A4
export/plan0/arm9_main/sub_20208A4_020208A4.c
- docs/function_notes/agent_01.md:98 SND command 6 (player parameter): 4 args passed through
sub_20208D8
export/plan0/arm9_main/sub_20208D8_020208D8.c
- docs/function_notes/agent_01.md:99 SND command 24 with arg -1 (all channels)
sub_2020904
export/plan0/arm9_main/sub_2020904_02020904.c
- docs/function_notes/agent_01.md:100 SND command 24 with one arg (channel mask)
sub_2020930
export/plan0/arm9_main/sub_2020930_02020930.c
- docs/function_notes/agent_01.md:101 SND command 25 with 4 args
sub_2020964
export/plan0/arm9_main/sub_2020964_02020964.c
- docs/function_notes/agent_01.md:102 SND command 23 with one arg (master volume style)
sub_2020990
export/plan0/arm9_main/sub_2020990_02020990.c
- docs/function_notes/agent_01.md:103 SND command 32 with 2 args
sub_20209BC
export/plan0/arm9_main/sub_20209BC_020209BC.c
- docs/function_notes/agent_01.md:104 SND command 31 with 2 args
sub_20209E8
export/plan0/arm9_main/sub_20209E8_020209E8.c
- docs/function_notes/agent_01.md:105 SND command 30 with 2 args
sub_2020A14
export/plan0/arm9_main/sub_2020A14_02020A14.c
- docs/function_notes/agent_01.md:106 SND command 14 (setup PCM channel): packs 10 args (channel, wave, loop, format, loop start/len, volume, div, timer, pan)
sub_2020A6C
export/plan0/arm9_main/sub_2020A6C_02020A6C.c
- docs/function_notes/agent_01.md:107 SND command 20 with 3 args (channel volume style)
sub_2020AA0
export/plan0/arm9_main/sub_2020AA0_02020AA0.c
- docs/function_notes/agent_01.md:108 SND command 27 with 2 args
sub_2020ACC
export/plan0/arm9_main/sub_2020ACC_02020ACC.c
- docs/function_notes/agent_01.md:109 SND command 26 with 2 args
sub_2020AF8
export/plan0/arm9_main/sub_2020AF8_02020AF8.c
- docs/function_notes/agent_01.md:110 SND command 8 (mute track): 3 args
sub_2020B2C
export/plan0/arm9_main/sub_2020B2C_02020B2C.c
- docs/function_notes/agent_01.md:111 SND command 18 (setup alarm): registers handler a4 / arg a5 in the alarm table, sends alarm id
sub_2020B70
export/plan0/arm9_main/sub_2020B70_02020B70.c
- docs/function_notes/agent_01.md:112 SND command 17 (setup capture): packs 7 args with flag bits into word 3
sub_2020BBC
export/plan0/arm9_main/sub_2020BBC_02020BBC.c
- docs/function_notes/agent_01.md:113 SND command 13 (stop timer): bumps generation of each selected alarm then sends (a1..a4)
sub_2020C2C
export/plan0/arm9_main/sub_2020C2C_02020C2C.c
- docs/function_notes/agent_01.md:114 SND command 12 (start timer): 4 args
sub_2020C60
export/plan0/arm9_main/sub_2020C60_02020C60.c
- docs/function_notes/agent_01.md:115 SND command 9 (alloc track): 3 args
sub_2020C94
export/plan0/arm9_main/sub_2020C94_02020C94.c
- docs/function_notes/agent_01.md:116 SND track-parameter helper: sets track param offset 25, size 1
sub_2020CBC
export/plan0/arm9_main/sub_2020CBC_02020CBC.c
- docs/function_notes/agent_01.md:117 SND track-parameter helper: sets track param offset 9, size 1
sub_2020CE4
export/plan0/arm9_main/sub_2020CE4_02020CE4.c
- docs/function_notes/agent_01.md:118 SND track-parameter helper: sets track param offset 12, size 2
sub_2020D0C
export/plan0/arm9_main/sub_2020D0C_02020D0C.c
- docs/function_notes/agent_01.md:119 SND track-parameter helper: sets track param offset 10, size 2
sub_2020D34
export/plan0/arm9_main/sub_2020D34_02020D34.c
- docs/function_notes/agent_01.md:120 SND command 10 (dealloc track): 3 args
sub_2020D68
export/plan0/arm9_main/sub_2020D68_02020D68.c
- docs/function_notes/agent_01.md:121 SND player-parameter helper: sets player param offset 4, size 1 via function pointer
sub_2020D80
export/plan0/arm9_main/sub_2020D80_02020D80.c
- docs/function_notes/agent_01.md:122 SND player-parameter helper: sets player param offset 6, size 2 via function pointer
sub_2020D98
export/plan0/arm9_main/sub_2020D98_02020D98.c
- docs/function_notes/agent_01.md:123 SND player-parameter helper: sets player param offset 26, size 2 via function pointer
sub_2020DB0
export/plan0/arm9_main/sub_2020DB0_02020DB0.c
- docs/function_notes/agent_01.md:124 SND command 3 (start prepared sequence): player a1
sub_2020DDC
export/plan0/arm9_main/sub_2020DDC_02020DDC.c
- docs/function_notes/agent_01.md:125 SND command 2 (prepare sequence): 4 args
sub_2020E10
export/plan0/arm9_main/sub_2020E10_02020E10.c
- docs/function_notes/agent_01.md:126 SND command 1 (stop sequence): player a1
sub_2020E3C
export/plan0/arm9_main/sub_2020E3C_02020E3C.c
- docs/function_notes/agent_01.md:127 unlocks the SND mutex (thunk to function pointer with mutex address)
sub_2020E50
export/plan0/arm9_main/sub_2020E50_02020E50.c
- docs/function_notes/agent_01.md:128 locks the SND mutex (thunk to function pointer with mutex address)
sub_2020E64
export/plan0/arm9_main/sub_2020E64_02020E64.c
- docs/function_notes/agent_01.md:129 SND init (once): init command queue then clears the alarm table
sub_2020EB0
export/plan0/arm9_main/sub_2020EB0_02020EB0.c
- docs/function_notes/agent_01.md:130 SND: checks whether the PXI FIFO to the ARM7 is ready (sets/reads a flag with IRQs off)
sub_2020EF8
export/plan0/arm9_main/sub_2020EF8_02020EF8.c
- docs/function_notes/agent_01.md:131 SND: pops a free command node from the free list (IRQs disabled), 0 if none
sub_2020F50
export/plan0/arm9_main/sub_2020F50_02020F50.c
- docs/function_notes/agent_01.md:132 SND: sends an empty PXI message on tag 7 to the ARM7, retrying until accepted
sub_2020F84
export/plan0/arm9_main/sub_2020F84_02020F84.c
- docs/function_notes/agent_01.md:133 SND: registers the PXI tag 7 receive callback and waits until the ARM7 side is ready
sub_2020FF0
export/plan0/arm9_main/sub_2020FF0_02020FF0.c
- docs/function_notes/agent_01.md:134 SND PXI callback: with IRQs off, dispatches the alarm callback for message a2
sub_2021020
export/plan0/arm9_main/sub_2021020_02021020.c
- docs/function_notes/agent_01.md:135 SND: number of free command slots (256 minus the two list counts)
sub_2021040
export/plan0/arm9_main/sub_2021040_02021040.c
- docs/function_notes/agent_01.md:136 SND: counts nodes in the pending command list
sub_2021080
export/plan0/arm9_main/sub_2021080_02021080.c
- docs/function_notes/agent_01.md:137 SND: counts nodes in the sent-command list
sub_20210C0
export/plan0/arm9_main/sub_20210C0_020210C0.c
- docs/function_notes/agent_01.md:138 SND: tests whether counter a1 has been reached (wrap-safe compare with the ARM7 counter)
sub_2021114
export/plan0/arm9_main/sub_2021114_02021114.c
- docs/function_notes/agent_01.md:139 getter: returns one of two global values depending on a flag (IRQs off)
sub_2021154
export/plan0/arm9_main/sub_2021154_02021154.c
- docs/function_notes/agent_01.md:140 SND: waits until command counter a1 has been processed, flushing and polling as needed
sub_20211E4
export/plan0/arm9_main/sub_20211E4_020211E4.c
- docs/function_notes/agent_01.md:141 SND flush: sends the queued commands to the ARM7 over PXI tag 7 (flag bit0 = block/retry, bit1 = notify)
sub_20213A4
export/plan0/arm9_main/sub_20213A4_020213A4.c
- docs/function_notes/agent_01.md:142 SND: appends command node a1 to the tail of the pending command list (IRQs off)
sub_20213EC
export/plan0/arm9_main/sub_20213EC_020213EC.c
- docs/function_notes/agent_01.md:143 SND: gets a free command node, flushing and waiting for the ARM7 if none is free and blocking is allowed
sub_2021488
export/plan0/arm9_main/sub_2021488_02021488.c
- docs/function_notes/agent_01.md:144 SND: collects commands processed by the ARM7 and moves them back to the free list
sub_20215BC
export/plan0/arm9_main/sub_20215BC_020215BC.c
- docs/function_notes/agent_01.md:145 SND command queue init: builds 255 free 24-byte command nodes, clears state, inits shared work and sends command 29
sub_20216D4
export/plan0/arm9_main/sub_20216D4_020216D4.c
- docs/function_notes/agent_01.md:146 SND alarm dispatch: if alarm generation matches, calls the alarm handler with its argument
sub_2021734
export/plan0/arm9_main/sub_2021734_02021734.c
- docs/function_notes/agent_01.md:147 SND_SetupAlarm: stores handler and arg for alarm a1, bumps generation, returns it
sub_2021764
export/plan0/arm9_main/sub_2021764_02021764.c
- docs/function_notes/agent_01.md:148 SND: bumps generation of alarm a1 (cancels pending alarm)
sub_2021784
export/plan0/arm9_main/sub_2021784_02021784.c
- docs/function_notes/agent_01.md:149 SND: clears the 8-entry alarm table (12 bytes each)
sub_20217B4
export/plan0/arm9_main/sub_20217B4_020217B4.c
- docs/function_notes/agent_01.md:150 SND shared work init: clears 16 player entries (36 bytes) with -1 variables, then flushes 640 bytes from cache
sub_2021834
export/plan0/arm9_main/sub_2021834_02021834.c
- docs/function_notes/agent_01.md:151 SND: reads the first word of the shared work (after cache invalidate), the ARM7 command counter
sub_2021868
export/plan0/arm9_main/sub_2021868_02021868.c
- docs/function_notes/agent_01.md:152 SND: reads local variable a2 (signed 16-bit) of player a1 from shared work
sub_20218BC
export/plan0/arm9_main/sub_20218BC_020218BC.c
- docs/function_notes/agent_01.md:153 SND: reads word at shared work +4 (after cache invalidate), likely playing/status mask
sub_20218F4
export/plan0/arm9_main/sub_20218F4_020218F4.c
- docs/function_notes/agent_01.md:154 SND decibel to volume: clamps a1 to table range, returns table byte plus shift (0-3) in bits 8-9
sub_2021968
export/plan0/arm9_main/sub_2021968_02021968.c
- docs/function_notes/agent_01.md:157 SDAT: reads entry a2 of the offset table (a1+60), converting file offset to absolute pointer, under the SND mutex
sub_20219B0
export/plan0/arm9_main/sub_20219B0_020219B0.c
- docs/function_notes/agent_01.md:158 SDAT: stores value a3 in entry a2 of the offset table (a1+60) under the SND mutex
sub_20219E8
export/plan0/arm9_main/sub_20219E8_020219E8.c
- docs/function_notes/agent_01.md:159 getter: entry count at +56
sub_20219F0
export/plan0/arm9_main/sub_20219F0_020219F0.c
- docs/function_notes/agent_01.md:160 uncertain: SDAT record iterator: walks the offset table, returns next 12-byte (or 16-byte) record by type 1-5, 0x10, 0x11
sub_2021BC8
export/plan0/arm9_main/sub_2021BC8_02021BC8.c
- docs/function_notes/agent_01.md:161 zeroes two words (list head init)
sub_2021BE8
export/plan0/arm9_main/sub_2021BE8_02021BE8.c
- docs/function_notes/agent_01.md:162 SDAT: clears the linked list of 8-byte nodes at a1+24 under the SND mutex
sub_2021C34
export/plan0/arm9_main/sub_2021C34_02021C34.c
- docs/function_notes/agent_01.md:163 SDAT: unlinks the four node lists (slots at a1+24) from their owners
sub_2021CD4
export/plan0/arm9_main/sub_2021CD4_02021CD4.c
- docs/function_notes/agent_01.md:164 SDAT: moves node a3 into slot a2 of a1's list, unlinking whatever was there
sub_2021DB0
export/plan0/arm9_main/sub_2021DB0_02021DB0.c
- docs/function_notes/agent_01.md:165 table accessor: base + 16*index if index < count (u16), else 0
sub_2021DC8
export/plan0/arm9_main/sub_2021DC8_02021DC8.c
- docs/function_notes/agent_01.md:166 SDAT: relocates offsets in a bank/wave table (header +4,+8,+12 and nested 16-byte/8-byte records) to absolute pointers
sub_2021E8C
export/plan0/arm9_main/sub_2021E8C_02021E8C.c
- docs/function_notes/agent_01.md:167 SDAT: relocates offsets of a record table (and +12 sub-block) to absolute pointers
sub_2021F1C
export/plan0/arm9_main/sub_2021F1C_02021F1C.c
- docs/function_notes/agent_01.md:168 table accessor: record i (16 bytes if flag bit0, else 8), or 0 if out of range
sub_2021F48
export/plan0/arm9_main/sub_2021F48_02021F48.c
- docs/function_notes/agent_01.md:169 table end address: base + count * record size
sub_2021F6C
export/plan0/arm9_main/sub_2021F6C_02021F6C.c
- docs/function_notes/agent_01.md:170 relocation: field at +20 += base
sub_2021F7C
export/plan0/arm9_main/sub_2021F7C_02021F7C.c
- docs/function_notes/agent_01.md:171 relocation: field at +20 += base (same code as sub_2021F6C)
sub_2021F8C
export/plan0/arm9_main/sub_2021F8C_02021F8C.c
- docs/function_notes/agent_01.md:172 relocation: field at +12 += base
sub_2021F9C
export/plan0/arm9_main/sub_2021F9C_02021F9C.c
- docs/function_notes/agent_01.md:173 finds a chunk by tag in a block-based binary file, returns pointer to its data (+8) in *a2
sub_2021FD0
export/plan0/arm9_main/sub_2021FD0_02021FD0.c
- docs/function_notes/agent_01.md:174 finds block with tag a2 in a file's block list (offset u16 at +12, count at +14), 0 if missing
sub_2022030
export/plan0/arm9_main/sub_2022030_02022030.c
- docs/function_notes/agent_01.md:175 stores a2 at a1+24 then jumps to a function pointer
sub_2022098
export/plan0/arm9_main/sub_2022098_02022098.c
- docs/function_notes/agent_01.md:176 zeroes a small 14-byte struct
sub_20220B0
export/plan0/arm9_main/sub_20220B0_020220B0.c
- docs/function_notes/agent_01.md:177 NNS_G2d animation controller init: speed 1.0, state 1, clears frame pointer and sub-struct
sub_20220F0
export/plan0/arm9_main/sub_20220F0_020220F0.c
- docs/function_notes/agent_01.md:178 animation controller: current frame index = (frame ptr - table base) / 8
sub_202210C
export/plan0/arm9_main/sub_202210C_0202210C.c
- docs/function_notes/agent_01.md:179 calls sub_20222EC; if it returns nonzero clears the elapsed-time field (+12)
sub_202212C
export/plan0/arm9_main/sub_202212C_0202212C.c
- docs/function_notes/agent_01.md:180 animation controller tick: adds scaled time, steps through 8-byte frames, handles loop/reverse and frame callbacks; returns 1 if frame changed
sub_20222E0
export/plan0/arm9_main/sub_20222E0_020222E0.c
- docs/function_notes/agent_01.md:183 getter: current animation frame record (dereferences pointer in a1)
sub_20222EC
export/plan0/arm9_main/sub_20222EC_020222EC.c
- docs/function_notes/agent_01.md:184 animation controller: sets current frame to index a2 (8-byte records) if in range; returns 1
sub_2022310
export/plan0/arm9_main/sub_2022310_02022310.c
- docs/function_notes/agent_01.md:185 animation controller: end-of-frame/sequence handling for play modes (forward, loop, reverse, ping-pong), clamps frame pointer
sub_2022438
export/plan0/arm9_main/sub_2022438_02022438.c
- docs/function_notes/agent_01.md:186 clears 24-byte cell transform and sets scale to 1.0 (4096)
sub_2022474
export/plan0/arm9_main/sub_2022474_02022474.c
- docs/function_notes/agent_01.md:187 cell transform: sets state a2 then calls function pointer on a1
sub_2022484
export/plan0/arm9_main/sub_2022484_02022484.c
- docs/function_notes/agent_01.md:188 cell transform: sets translation (+4,+8) and flag bit 1 (only when state == 1)
sub_20224A4
export/plan0/arm9_main/sub_20224A4_020224A4.c
- docs/function_notes/agent_01.md:189 cell transform: sets rotation (+16) and flag bit 2 (only when state == 1)
sub_20224C0
export/plan0/arm9_main/sub_20224C0_020224C0.c
- docs/function_notes/agent_01.md:190 cell transform: sets two shorts (+12,+14) and flag bit 3 (only when state == 1)
sub_20224E0
export/plan0/arm9_main/sub_20224E0_020224E0.c
- docs/function_notes/agent_01.md:191 copies cell OBJ attributes (6-byte source to 8-byte dest) for up to a2 OBJs, optionally applying 2x2 matrix a4 and offset a5
sub_2022890
export/plan0/arm9_main/sub_2022890_02022890.c
- docs/function_notes/agent_01.md:192 setter: field +16 = a2
sub_2022898
export/plan0/arm9_main/sub_2022898_02022898.c
- docs/function_notes/agent_01.md:193 cell animation: reset-time check (sub_202210C), re-applies frame if it returned nonzero
sub_20228C0
export/plan0/arm9_main/sub_20228C0_020228C0.c
- docs/function_notes/agent_01.md:194 cell animation tick: advances time, re-applies frame if the frame changed
sub_20228E8
export/plan0/arm9_main/sub_20228E8_020228E8.c
- docs/function_notes/agent_01.md:195 binds animation data a2 and applies the current frame
sub_2022904
export/plan0/arm9_main/sub_2022904_02022904.c
- docs/function_notes/agent_01.md:196 cell animation instance init: stores cell bank, clears OAM slot, inits transform and controller, binds animation a2
sub_202294C
export/plan0/arm9_main/sub_202294C_0202294C.c
- docs/function_notes/agent_01.md:197 applies the current animation frame: looks up its cell and sets transform (by frame type 0/1/2) and OBJ slot
sub_2022A60
export/plan0/arm9_main/sub_2022A60_02022A60.c
- docs/function_notes/agent_01.md:198 initializes 48-byte slot entry a1: marks field 9 = -1 and stores two words
sub_2022A90
export/plan0/arm9_main/sub_2022A90_02022A90.c
- docs/function_notes/agent_01.md:199 array accessor: base + 48 * index
sub_2022AA8
export/plan0/arm9_main/sub_2022AA8_02022AA8.c
- docs/function_notes/agent_01.md:200 uncertain: font text measure: max line width over lines, returns via a1 (a1[0]=0, a1[1]=-a4)
sub_2022B44
export/plan0/arm9_main/sub_2022B44_02022B44.c
- docs/function_notes/agent_01.md:201 font: text height = number of lines (newline 10) * (line spacing + glyph height) - spacing
sub_2022BBC
export/plan0/arm9_main/sub_2022BBC_02022BBC.c
- docs/function_notes/agent_01.md:202 font: width of one line of text (sum of glyph widths + spacing a2, stops at newline), optionally returns pointer after it
sub_2022C80
export/plan0/arm9_main/sub_2022C80_02022C80.c
- docs/function_notes/agent_01.md:203 font: glyph width entry for glyph index a2 (searches width-table blocks, default if none)
sub_2022CE4
export/plan0/arm9_main/sub_2022CE4_02022CE4.c
- docs/function_notes/agent_01.md:204 font: maps character code a2 to glyph index via the char-map blocks (returns default if not found)
sub_2022DD8
export/plan0/arm9_main/sub_2022DD8_02022DD8.c
- docs/function_notes/agent_01.md:205 font: one char-map block lookup (direct offset, table, or binary search of pairs)
sub_2022EB0
export/plan0/arm9_main/sub_2022EB0_02022EB0.c
- docs/function_notes/agent_01.md:206 recursive: builds OBJ attribute list (8 bytes each) tiling a w x h pixel rect with largest power-of-two sprite shapes; returns OBJ count
sub_20231E4
export/plan0/arm9_main/sub_20231E4_020231E4.c
- docs/function_notes/agent_01.md:207 uncertain: counts tiles/OBJs needed for a w x h rect via bit decomposition
sub_2023244
export/plan0/arm9_main/sub_2023244_02023244.c
- docs/function_notes/agent_01.md:208 fills a screen map rect (a2 x a3) with sequential tile numbers and palette a6 (row stride a4)
sub_20232B0
export/plan0/arm9_main/sub_20232B0_020232B0.c
- docs/function_notes/agent_01.md:209 same as sub_2023244 but for maps wider than 32 (handles the 32x32 screen-block layout)
sub_2023374
export/plan0/arm9_main/sub_2023374_02023374.c
- docs/function_notes/agent_01.md:210 text canvas init: sets up character canvas with the first function table
sub_2023408
export/plan0/arm9_main/sub_2023408_02023408.c
- docs/function_notes/agent_01.md:211 text canvas init: sets up character canvas with the second function table
sub_2023450
export/plan0/arm9_main/sub_2023450_02023450.c
- docs/function_notes/agent_01.md:212 font: draws one glyph (maps code to glyph, calls canvas draw function), returns advance width
sub_2023510
export/plan0/arm9_main/sub_2023510_02023510.c
- docs/function_notes/agent_01.md:213 char canvas struct init: stores char base, width, height (tiles), bit depth and function pointers
sub_2023548
export/plan0/arm9_main/sub_2023548_02023548.c
- docs/function_notes/agent_01.md:214 char canvas: fills rectangle with a color for 2D (non-linear) tile mapping
sub_2023764
export/plan0/arm9_main/sub_2023764_02023764.c
- docs/function_notes/agent_01.md:215 char canvas: fills rectangle with a color for linear tile mapping
sub_2023944
export/plan0/arm9_main/sub_2023944_02023944.c
- docs/function_notes/agent_01.md:216 char canvas: clears the whole canvas to color a2
sub_20239A8
export/plan0/arm9_main/sub_20239A8_020239A8.c
- docs/function_notes/agent_01.md:217 char canvas: blits glyph bitmap at (a3,a4) using 2D tile mapping, one 8x8 tile at a time
sub_2023BCC
export/plan0/arm9_main/sub_2023BCC_02023BCC.c
- docs/function_notes/agent_01.md:218 char canvas: blits glyph bitmap at (a3,a4) using linear tile mapping
sub_2023D84
export/plan0/arm9_main/sub_2023D84_02023D84.c
- docs/function_notes/agent_01.md:219 blits one 8x8 tile of glyph bitmap into 4bpp/8bpp tile data with a palette-index base
sub_2024000
export/plan0/arm9_main/sub_2024000_02024000.c
- docs/function_notes/agent_01.md:220 fills a sub-rectangle of one 8x8 tile of 4bpp/8bpp data with a color
sub_2024168
export/plan0/arm9_main/sub_2024168_02024168.c
- docs/function_notes/agent_01.md:221 table lookup: returns table[4 * a1[1] + a1[0]]
sub_2024184
export/plan0/arm9_main/sub_2024184_02024184.c
- docs/function_notes/agent_01.md:222 computes tile index for 2D-mapped canvases from tile coordinates and dimensions (Morton-like order)
sub_202427C
export/plan0/arm9_main/sub_202427C_0202427C.c
- docs/function_notes/NEEDS_REVIEW.md:153 probably indirect call through an uninitialised stack function pointer (decompiler artifact, likely a trampoline or thunk).
- docs/function_notes/hk_02.md:38 probably indirect call through an uninitialised stack function pointer (decompiler artifact, likely a trampoline or thunk).
sub_202428C
export/plan0/arm9_main/sub_202428C_0202428C.c
- docs/function_notes/NEEDS_REVIEW.md:154 probably text draw wrapper: adjusts the y origin for flags a7 (0x100 bottom, 0x80 centre) using the font text height from sub_2022B44, then calls sub_20243F0.
- docs/function_notes/hk_02.md:39 probably text draw wrapper: adjusts the y origin for flags a7 (0x100 bottom, 0x80 centre) using the font text height from sub_2022B44, then calls sub_20243F0.
sub_2024340
export/plan0/arm9_main/sub_2024340_02024340.c
- docs/function_notes/NEEDS_REVIEW.md:155 probably aligned text draw: measures the string with sub_2022AA8, shifts x (0x10 centre, 0x20 right) and y (0x2 centre, 0x4 bottom), then calls sub_20243F0.
- docs/function_notes/hk_02.md:40 probably aligned text draw: measures the string with sub_2022AA8, shifts x (0x10 centre, 0x20 right) and y (0x2 centre, 0x4 bottom), then calls sub_20243F0.
sub_20243F0
export/plan0/arm9_main/sub_20243F0_020243F0.c
- docs/function_notes/NEEDS_REVIEW.md:156 probably draws a multi-line string: per line computes x offset from flags 0x800/0x400 using sub_2022BBC width, calls sub_20244F4, advances y by line height.
- docs/function_notes/hk_02.md:41 probably draws a multi-line string: per line computes x offset from flags 0x800/0x400 using sub_2022BBC width, calls sub_20244F4, advances y by line height.
sub_20244F4
export/plan0/arm9_main/sub_20244F4_020244F4.c
- docs/function_notes/NEEDS_REVIEW.md:157 probably draws one text line: loops glyph codes from the reader at a1[1] (function pointer +4), draws each with sub_2023450 and advances x; stops at code 10.
- docs/function_notes/hk_02.md:42 probably draws one text line: loops glyph codes from the reader at a1[1] (function pointer +4), draws each with sub_2023450 and advances x; stops at code 10.
sub_20245A4
export/plan0/arm9_main/sub_20245A4_020245A4.c
- docs/function_notes/NEEDS_REVIEW.md:158 probably relocates a loaded resource tree by adding base pointer result to offset fields in entries whose tags match the globals at 0x202468C-0x2024694.
- docs/function_notes/hk_02.md:43 probably relocates a loaded resource tree by adding base pointer result to offset fields in entries whose tags match the globals at 0x202468C-0x2024694.
sub_202469C
export/plan0/arm9_main/sub_202469C_0202469C.c
- docs/function_notes/NEEDS_REVIEW.md:159 probably gets a tagged data block from a loaded file: checks magic dword_20247F4 and version, relocates (sub_20245A4), finds tag dword_20247F8 (sub_2021FD0).
- docs/function_notes/hk_02.md:44 probably gets a tagged data block from a loaded file: checks magic dword_20247F4 and version, relocates (sub_20245A4), finds tag dword_20247F8 (sub_2021FD0).
sub_20247FC
export/plan0/arm9_main/sub_20247FC_020247FC.c
- docs/function_notes/NEEDS_REVIEW.md:160 probably bit reader: reads a2 bits from the stream state at a1 (byte pointer at +0, cached bits at +4/+5), refilling one byte at a time (recursive on refill).
- docs/function_notes/hk_02.md:45 probably bit reader: reads a2 bits from the stream state at a1 (byte pointer at +0, cached bits at +4/+5), refilling one byte at a time (recursive on refill).
sub_2024868
export/plan0/arm9_main/sub_2024868_02024868.c
- docs/function_notes/NEEDS_REVIEW.md:161 probably reads one byte from the stream pointer *a1 and advances it.
- docs/function_notes/hk_02.md:46 probably reads one byte from the stream pointer *a1 and advances it.
sub_202487C
export/plan0/arm9_main/sub_202487C_0202487C.c
- docs/function_notes/NEEDS_REVIEW.md:162 probably reads one Shift-JIS character from the byte stream *a1: lead bytes 0x81-0x9F and 0xE0-0xFF consume two bytes; returns the code.
- docs/function_notes/hk_02.md:47 probably reads one Shift-JIS character from the byte stream *a1: lead bytes 0x81-0x9F and 0xE0-0xFF consume two bytes; returns the code.
sub_20248D0
export/plan0/arm9_main/sub_20248D0_020248D0.c
- docs/function_notes/NEEDS_REVIEW.md:163 probably reads one UTF-8 code point from the stream *a1, consuming 1, 2 or 3 bytes, and advances the pointer.
- docs/function_notes/hk_02.md:48 probably reads one UTF-8 code point from the stream *a1, consuming 1, 2 or 3 bytes, and advances the pointer.
sub_2024960
export/plan0/arm9_main/sub_2024960_02024960.c
- docs/function_notes/NEEDS_REVIEW.md:164 probably reads one little-endian u16 (UTF-16 code unit) from the stream *a1 and advances by 2.
- docs/function_notes/hk_02.md:49 probably reads one little-endian u16 (UTF-16 code unit) from the stream *a1 and advances by 2.
sub_2024974
export/plan0/arm9_main/sub_2024974_02024974.c
- docs/function_notes/NEEDS_REVIEW.md:165 probably maps flag a2, a1 and the a3 vs a4 relation to a sound/effect id in the range 304-311 (base 304 plus offset); exact meaning unclear.
- docs/function_notes/hk_02.md:50 probably maps flag a2, a1 and the a3 vs a4 relation to a sound/effect id in the range 304-311 (base 304 plus offset); exact meaning unclear.
sub_20249B8
export/plan0/arm9_main/sub_20249B8_020249B8.c
- docs/function_notes/NEEDS_REVIEW.md:166 probably starts a sound effect on emitter a1: derives volume (a2 >> 2, max 1024) and pan (0-127) from a2, uses sound id dword_2024A24 or 336, calls sub_2109078.
- docs/function_notes/hk_02.md:51 probably starts a sound effect on emitter a1: derives volume (a2 >> 2, max 1024) and pan (0-127) from a2, uses sound id dword_2024A24 or 336, calls sub_2109078.
sub_2024A28
export/plan0/arm9_main/sub_2024A28_02024A28.c
- docs/function_notes/hk_02.md:52 thin wrapper; calls sub_210C86C(a1), probably restarting the sound emitter (variant without the stop check of sub_210C610).
sub_2024A88
export/plan0/arm9_main/sub_2024A88_02024A88.c
- vm_model/src/engine_sound.rs:1 Kart engine sound (
sub_2024A88) and the positioned-sound model (sub_21092B0,sub_210920C). - vm_model/src/engine_sound.rs:110
sub_2024A88: one tick.Nonewhen the kart makes no engine sound this tick. - game/src/engine_audio.rs:2 follow the engine state machine (
vm_model::engine_sound,sub_2024A88) and the camera. Only the - docs/function_notes/NEEDS_REVIEW.md:167 probably per-frame engine-sound update for a kart (fields +672, +676, +1104...): pitch and volume from speed and race state; plays via sub_2109078.
- docs/function_notes/hk_02.md:53 probably per-frame engine-sound update for a kart (fields +672, +676, +1104...): pitch and volume from speed and race state; plays via sub_2109078.
sub_2024EEC
export/plan0/arm9_main/sub_2024EEC_02024EEC.c
- vm_model/src/engine_sound.rs:196
sub_2024EEC: ease the pitch towardtarget(snaps within the same 16.0 band, keeps the - docs/function_notes/NEEDS_REVIEW.md:168 probably ramps a sound parameter toward target a2 with fixed-point steps (tables off_2024FB4-off_2024FBC, state in a1[2..4]), clamped to 0..8912896.
- docs/function_notes/hk_02.md:54 probably ramps a sound parameter toward target a2 with fixed-point steps (tables off_2024FB4-off_2024FBC, state in a1[2..4]), clamped to 0..8912896.
sub_2024FC0
export/plan0/arm9_main/sub_2024FC0_02024FC0.c
- docs/function_notes/NEEDS_REVIEW.md:169 probably calls the function pointer off_2024FE4 with a1, the field at a2+92, the byte at a2+4 and the clamped value (a2+8) >> 12.
- docs/function_notes/hk_02.md:55 probably calls the function pointer off_2024FE4 with a1, the field at a2+92, the byte at a2+4 and the clamped value (a2+8) >> 12.
sub_2024FE8
export/plan0/arm9_main/sub_2024FE8_02024FE8.c
- docs/function_notes/NEEDS_REVIEW.md:170 probably starts a sound on emitter a1: id from sub_210BB74(3, a1+992, a1+996), volume byte a2+4, pitch (a2+8) >> 12, via sub_2109078.
- docs/function_notes/hk_02.md:56 probably starts a sound on emitter a1: id from sub_210BB74(3, a1+992, a1+996), volume byte a2+4, pitch (a2+8) >> 12, via sub_2109078.
sub_2025030
export/plan0/arm9_main/sub_2025030_02025030.c
- docs/function_notes/NEEDS_REVIEW.md:171 probably starts a sound on emitter a1 with the id stored at a2+88 (sub_2109078) and sets bit 0x80 at result+25 when it returns a handle.
- docs/function_notes/hk_02.md:57 probably starts a sound on emitter a1 with the id stored at a2+88 (sub_2109078) and sets bit 0x80 at result+25 when it returns a handle.
sub_202506C
export/plan0/arm9_main/sub_202506C_0202506C.c
- docs/function_notes/NEEDS_REVIEW.md:172 probably same as sub_2025030 but takes the sound id from the first word of a2.
- docs/function_notes/hk_02.md:58 probably same as sub_2025030 but takes the sound id from the first word of a2.
sub_20250A8
export/plan0/arm9_main/sub_20250A8_020250A8.c
- vm_model/src/engine_sound.rs:39 Ramp rates (
sub_20250A8): falling, rising under overspeed, rising otherwise. - docs/function_notes/NEEDS_REVIEW.md:173 probably init: allocates three 4096-byte buffers via sub_2147F34 and stores the pointers in globals (the weak guess FX_Div is probably wrong).
- docs/function_notes/hk_02.md:59 probably init: allocates three 4096-byte buffers via sub_2147F34 and stores the pointers in globals (the weak guess FX_Div is probably wrong).
sub_202511C
export/plan0/arm9_main/sub_202511C_0202511C.c
- docs/function_notes/NEEDS_REVIEW.md:174 probably maps game-event id a1 (0-15) to a 4-byte sound or effect descriptor written to a2 (record lookup sub_202553C); returns a code 41-54.
- docs/function_notes/hk_02.md:60 probably maps game-event id a1 (0-15) to a 4-byte sound or effect descriptor written to a2 (record lookup sub_202553C); returns a code 41-54.
sub_202553C
export/plan0/arm9_main/sub_202553C_0202553C.c
- game/src/music.rs:171 record (
sub_202553C) in the table at0x0215316C(4 bytes each), whose byte 1 is the sequence.
sub_202577C
export/plan0/arm9_main/sub_202577C_0202577C.c
- docs/function_notes/hk_02.md:61 table lookup; returns the word at off_2025788[a1].
sub_202578C
export/plan0/arm9_main/sub_202578C_0202578C.c
- vm_model/src/engine_sound.rs:44 The weight class (0..2) of a kart model id (
sub_202578C). - docs/function_notes/NEEDS_REVIEW.md:175 probably maps a1 (0-36) to a class value 0, 1 or 2 with a switch; default returns a2 unchanged.
- docs/function_notes/hk_02.md:62 probably maps a1 (0-36) to a class value 0, 1 or 2 with a switch; default returns a2 unchanged.
sub_2025854
export/plan0/arm9_main/sub_2025854_02025854.c
- docs/function_notes/NEEDS_REVIEW.md:176 probably loads a 2D screen resource set: calls sub_2025884 with the resource ids, then sub_2025954 to set up the VRAM and palette banks for index a6.
- docs/function_notes/hk_02.md:63 probably loads a 2D screen resource set: calls sub_2025884 with the resource ids, then sub_2025954 to set up the VRAM and palette banks for index a6.
sub_2025884
export/plan0/arm9_main/sub_2025884_02025884.c
- docs/function_notes/NEEDS_REVIEW.md:177 probably binds up to three NNS 2D resource ids via callback a6 into the table at a1 (sub_20B496C, sub_20B4A7C, sub_20B4810).
- docs/function_notes/hk_02.md:64 probably binds up to three NNS 2D resource ids via callback a6 into the table at a1 (sub_20B496C, sub_20B4A7C, sub_20B4810).
sub_20258D4
export/plan0/arm9_main/sub_20258D4_020258D4.c
- docs/function_notes/NEEDS_REVIEW.md:178 probably the release counterpart of sub_2025854: calls sub_2025904 then sub_2025954.
- docs/function_notes/hk_02.md:65 probably the release counterpart of sub_2025854: calls sub_2025904 then sub_2025954.
sub_2025904
export/plan0/arm9_main/sub_2025904_02025904.c
- docs/function_notes/NEEDS_REVIEW.md:179 probably the release counterpart of sub_2025884: unbinds up to three NNS 2D resource ids via callback a6 (sub_20B4934, sub_20B4A44, sub_20B47D8).
- docs/function_notes/hk_02.md:66 probably the release counterpart of sub_2025884: unbinds up to three NNS 2D resource ids via callback a6 (sub_20B4934, sub_20B4A44, sub_20B47D8).
sub_2025954
export/plan0/arm9_main/sub_2025954_02025954.c
- docs/function_notes/NEEDS_REVIEW.md:180 probably sets up VRAM and palette banks for a 2D screen: chooses bank ids (4-7 or 20-23) from a1, copies blocks from a2 via sub_2016468 for index a3 (0-3).
- docs/function_notes/hk_02.md:67 probably sets up VRAM and palette banks for a 2D screen: chooses bank ids (4-7 or 20-23) from a1, copies blocks from a2 via sub_2016468 for index a3 (0-3).
sub_2025A00
export/plan0/arm9_main/sub_2025A00_02025A00.c
- docs/function_notes/NEEDS_REVIEW.md:181 probably draws a sprite or cell: passes the 16-bit position and size fields from a4 and a3 to sub_21243AC, then calls sub_21241C0 with a1.
- docs/function_notes/hk_02.md:68 probably draws a sprite or cell: passes the 16-bit position and size fields from a4 and a3 to sub_21243AC, then calls sub_21241C0 with a1.
sub_2025A50
export/plan0/arm9_main/sub_2025A50_02025A50.c
- docs/function_notes/NEEDS_REVIEW.md:182 probably sets up a HUD sprite layout: calls sub_2124ED0, then loads palette or OAM blocks via sub_2016468 (layout chosen by flag a1).
- docs/function_notes/hk_02.md:69 probably sets up a HUD sprite layout: calls sub_2124ED0, then loads palette or OAM blocks via sub_2016468 (layout chosen by flag a1).
sub_2025ABC
export/plan0/arm9_main/sub_2025ABC_02025ABC.c
- docs/function_notes/NEEDS_REVIEW.md:183 probably binds 2D resource ids from callback a8 into the object at a1 (sub_20B49F4, sub_20B48EC, sub_20B4A7C) and stores a8() results in a1[3..5].
- docs/function_notes/hk_02.md:70 probably binds 2D resource ids from callback a8 into the object at a1 (sub_20B49F4, sub_20B48EC, sub_20B4A7C) and stores a8() results in a1[3..5].
sub_2025B20
export/plan0/arm9_main/sub_2025B20_02025B20.c
- docs/function_notes/NEEDS_REVIEW.md:184 probably the same binding as sub_2025ABC but with the sub_20B49BC, sub_20B48B4 and sub_20B4A44 helpers.
- docs/function_notes/hk_02.md:71 probably the same binding as sub_2025ABC but with the sub_20B49BC, sub_20B48B4 and sub_20B4A44 helpers.
sub_2025B84
export/plan0/arm9_main/sub_2025B84_02025B84.c
- docs/function_notes/NEEDS_REVIEW.md:185 probably fills a 4-word struct a2 with table getters for resource id a1: sub_20B4018, sub_20B400C, sub_20B4030 and sub_20B4000.
- docs/function_notes/hk_02.md:72 probably fills a 4-word struct a2 with table getters for resource id a1: sub_20B4018, sub_20B400C, sub_20B4030 and sub_20B4000.
sub_2025BB4
export/plan0/arm9_main/sub_2025BB4_02025BB4.c
- docs/function_notes/NEEDS_REVIEW.md:186 probably masked write of OBJ attributes 0 and 1 of cell-bank entry a1 (entry from sub_201EB54) using masks dword_2025BE8/dword_2025BEC.
- docs/function_notes/hk_02.md:73 probably masked write of OBJ attributes 0 and 1 of cell-bank entry a1 (entry from sub_201EB54) using masks dword_2025BE8/dword_2025BEC.
sub_2025BF0
export/plan0/arm9_main/sub_2025BF0_02025BF0.c
- docs/function_notes/NEEDS_REVIEW.md:187 probably reads a 12-byte cell-bank entry (sub_201EA58) into struct a2: sets +8 = 1, signed bounds fields at +12 and +14.
- docs/function_notes/hk_02.md:74 probably reads a 12-byte cell-bank entry (sub_201EA58) into struct a2: sets +8 = 1, signed bounds fields at +12 and +14.
sub_2025C1C
export/plan0/arm9_main/sub_2025C1C_02025C1C.c
- docs/function_notes/NEEDS_REVIEW.md:188 probably reads an 8-byte cell-bank entry (sub_201EA30) into struct a2: sets +8 = 1, signed fields at +12 and +14.
- docs/function_notes/hk_02.md:75 probably reads an 8-byte cell-bank entry (sub_201EA30) into struct a2: sets +8 = 1, signed fields at +12 and +14.
sub_2025C48
export/plan0/arm9_main/sub_2025C48_02025C48.c
- docs/function_notes/NEEDS_REVIEW.md:189 probably copies the word at +4 of cell entry a2 into cell entry a1 (both via sub_201EA30).
- docs/function_notes/hk_02.md:76 probably copies the word at +4 of cell entry a2 into cell entry a1 (both via sub_201EA30).
sub_2025C6C
export/plan0/arm9_main/sub_2025C6C_02025C6C.c
- docs/function_notes/NEEDS_REVIEW.md:190 probably copies two halfwords from cell entry a2 into cell entry a1 (both via sub_201EA30).
- docs/function_notes/hk_02.md:77 probably copies two halfwords from cell entry a2 into cell entry a1 (both via sub_201EA30).
sub_2025C94
export/plan0/arm9_main/sub_2025C94_02025C94.c
- docs/function_notes/NEEDS_REVIEW.md:191 probably masked write of two halfwords into cell-bank entry a1 (via sub_201EA30) using masks dword_2025CC8/dword_2025CCC.
- docs/function_notes/hk_02.md:78 probably masked write of two halfwords into cell-bank entry a1 (via sub_201EA30) using masks dword_2025CC8/dword_2025CCC.
sub_2025CD0
export/plan0/arm9_main/sub_2025CD0_02025CD0.c
- docs/function_notes/NEEDS_REVIEW.md:192 probably formats three 2-digit values (a2, a3, a4) as "AA:BB:CC" at a1 (digits via sub_2133274, colons at [2] and [5]); probably a race or lap time.
- docs/function_notes/hk_02.md:79 probably formats three 2-digit values (a2, a3, a4) as "AA:BB:CC" at a1 (digits via sub_2133274, colons at [2] and [5]); probably a race or lap time.
sub_2025D5C
export/plan0/arm9_main/sub_2025D5C_02025D5C.c
- docs/function_notes/hk_02.md:80 table lookup on off_2025D70[a1]; adds 4 unless the value is -1.
sub_2025D74
export/plan0/arm9_main/sub_2025D74_02025D74.c
- docs/function_notes/hk_02.md:81 table lookup on off_2025D88[a1]; subtracts 26 unless the value is -1.
sub_2025D8C
export/plan0/arm9_main/sub_2025D8C_02025D8C.c
- docs/function_notes/hk_02.md:82 table lookup; returns (*off_2025D94)[a1].
sub_2025D98
export/plan0/arm9_main/sub_2025D98_02025D98.c
- docs/function_notes/hk_02.md:83 table lookup; returns (*off_2025DA0)[a1].
sub_2025DA4
export/plan0/arm9_main/sub_2025DA4_02025DA4.c
- docs/function_notes/NEEDS_REVIEW.md:193 probably ranks value a3 among the enabled entries of a 36-entry cyclic table (start index from sub_2025E34, enable test sub_205FD2C); returns 1-based rank.
- docs/function_notes/hk_02.md:84 probably ranks value a3 among the enabled entries of a 36-entry cyclic table (start index from sub_2025E34, enable test sub_205FD2C); returns 1-based rank.
sub_2025DF4
export/plan0/arm9_main/sub_2025DF4_02025DF4.c
- docs/function_notes/NEEDS_REVIEW.md:194 probably counts how many of the 36 table entries pass the enable test sub_205FD2C(a1, a2, item).
- docs/function_notes/hk_02.md:85 probably counts how many of the 36 table entries pass the enable test sub_205FD2C(a1, a2, item).
sub_2025E28
export/plan0/arm9_main/sub_2025E28_02025E28.c
- docs/function_notes/hk_02.md:86 table lookup; returns (*off_2025E30)[a1] (36-entry permutation).
sub_2025E34
export/plan0/arm9_main/sub_2025E34_02025E34.c
- docs/function_notes/NEEDS_REVIEW.md:195 probably inverse lookup: returns the index of value a1 in the table at off_2025E5C (0-35), or -1 if a1 is 36 or absent.
- docs/function_notes/hk_02.md:87 probably inverse lookup: returns the index of value a1 in the table at off_2025E5C (0-35), or -1 if a1 is 36 or absent.
sub_2025E60
export/plan0/arm9_main/sub_2025E60_02025E60.c
- docs/function_notes/NEEDS_REVIEW.md:196 probably selects a table by the game mode at sub_2029930()+200 (modes 0, 1, 3, 5 use off_2025EA8; mode 2 uses off_2025EAC) and returns entry a1, else -1.
- docs/function_notes/hk_02.md:88 probably selects a table by the game mode at sub_2029930()+200 (modes 0, 1, 3, 5 use off_2025EA8; mode 2 uses off_2025EAC) and returns entry a1, else -1.
sub_2025EB0
export/plan0/arm9_main/sub_2025EB0_02025EB0.c
- docs/function_notes/hk_02.md:89 table lookup; returns (*off_2025EB8)[a1].
sub_2025EBC
export/plan0/arm9_main/sub_2025EBC_02025EBC.c
- docs/function_notes/hk_02.md:90 thin wrapper; calls sub_20AE4C0(1, halfwords a1+12/+14, words a1+4/+8).
sub_2025EDC
export/plan0/arm9_main/sub_2025EDC_02025EDC.c
- docs/function_notes/NEEDS_REVIEW.md:197 probably steps a 4-word menu cursor state machine: increments the counter toward its limit then sets state 1; or decrements in state 2 and sets state 3 at zero.
- docs/function_notes/hk_02.md:91 probably steps a 4-word menu cursor state machine: increments the counter toward its limit then sets state 1; or decrements in state 2 and sets state 3 at zero.
sub_2025F14
export/plan0/arm9_main/sub_2025F14_02025F14.c
- docs/function_notes/NEEDS_REVIEW.md:198 probably menu state transition helper: if a2 is nonzero (and not blocked when state > 1) or the state is 2 or 3, calls sub_2025F54 to reset.
- docs/function_notes/hk_02.md:92 probably menu state transition helper: if a2 is nonzero (and not blocked when state > 1) or the state is 2 or 3, calls sub_2025F54 to reset.
sub_2025F54
export/plan0/arm9_main/sub_2025F54_02025F54.c
- docs/function_notes/NEEDS_REVIEW.md:199 probably sets the menu state word to a2 and resets the timer word at +4 (0 for states 0/3, the stored value for states 1/2).
- docs/function_notes/hk_02.md:93 probably sets the menu state word to a2 and resets the timer word at +4 (0 for states 0/3, the stored value for states 1/2).
sub_2025F80
export/plan0/arm9_main/sub_2025F80_02025F80.c
- docs/function_notes/NEEDS_REVIEW.md:200 probably stores a3, a4 and a5 into the sprite struct at a1 (+8, +12, +14) and tail-calls the callback off_2025F8C.
- docs/function_notes/hk_02.md:94 probably stores a3, a4 and a5 into the sprite struct at a1 (+8, +12, +14) and tail-calls the callback off_2025F8C.
sub_2025F90
export/plan0/arm9_main/sub_2025F90_02025F90.c
- docs/function_notes/NEEDS_REVIEW.md:201 probably loads the select-character screen NNS 2D resources (cell, character, palette) via sub_2047A28 lookups, bound with sub_20B49F4 and sub_20B48EC.
- docs/function_notes/hk_02.md:95 probably loads the select-character screen NNS 2D resources (cell, character, palette) via sub_2047A28 lookups, bound with sub_20B49F4 and sub_20B48EC.
sub_2026058
export/plan0/arm9_main/sub_2026058_02026058.c
- docs/function_notes/NEEDS_REVIEW.md:202 probably sets BG and window registers for the 2D screen (engine A/B), picking value 24 or 25 from game state, then conditionally calls sub_202BA14.
- docs/function_notes/hk_02.md:96 probably sets BG and window registers for the 2D screen (engine A/B), picking value 24 or 25 from game state, then conditionally calls sub_202BA14.
sub_20260E4
export/plan0/arm9_main/sub_20260E4_020260E4.c
- docs/function_notes/NEEDS_REVIEW.md:203 probably tears down the current menu object: sub_211F498 under a mode check, sub_2036AB0 on its +92 pointer, clears off_202611C, returns the old pointer.
- docs/function_notes/hk_02.md:97 probably tears down the current menu object: sub_211F498 under a mode check, sub_2036AB0 on its +92 pointer, clears off_202611C, returns the old pointer.
sub_2026120
export/plan0/arm9_main/sub_2026120_02026120.c
- docs/function_notes/NEEDS_REVIEW.md:204 probably per-frame state machine (object at off_2026480, state +108 values 0-9) for the character or course select screen; drives sub_2027084, sub_20273C0.
- docs/function_notes/hk_02.md:98 probably per-frame state machine (object at off_2026480, state +108 values 0-9) for the character or course select screen; drives sub_2027084, sub_20273C0.
sub_2026910
export/plan0/arm9_main/sub_2026910_02026910.c
- docs/function_notes/NEEDS_REVIEW.md:205 probably constructor and loader for the select screen object: allocates it (sub_2036948, sub_2036BEC), sets fields +84..+128, binds 2D resources, builds layout.
- docs/function_notes/hk_02.md:99 probably constructor and loader for the select screen object: allocates it (sub_2036948, sub_2036BEC), sets fields +84..+128, binds 2D resources, builds layout.
sub_2027084
export/plan0/arm9_main/sub_2027084_02027084.c
- docs/function_notes/NEEDS_REVIEW.md:206 probably refreshes the select-screen cell entries: loops over the object's table (+40, count at +6) calling sub_2124B1C per 64-byte entry.
- docs/function_notes/hk_02.md:100 probably refreshes the select-screen cell entries: loops over the object's table (+40, count at +6) calling sub_2124B1C per 64-byte entry.
sub_20270D0
export/plan0/arm9_main/sub_20270D0_020270D0.c
- docs/function_notes/NEEDS_REVIEW.md:207 probably returns true if the select-screen object's +128 mode is nonzero and sub_202B8C0 reports ready.
- docs/function_notes/hk_02.md:101 probably returns true if the select-screen object's +128 mode is nonzero and sub_202B8C0 reports ready.
sub_20270FC
export/plan0/arm9_main/sub_20270FC_020270FC.c
- docs/function_notes/NEEDS_REVIEW.md:208 probably selects slot a1 on the select screen: stores it at +100, calls the layout routine for the slot count (sub_2027BE0, A58, 850, 648, 448), refreshes.
- docs/function_notes/hk_02.md:102 probably selects slot a1 on the select screen: stores it at +100, calls the layout routine for the slot count (sub_2027BE0, A58, 850, 648, 448), refreshes.
sub_2027188
export/plan0/arm9_main/sub_2027188_02027188.c
- docs/function_notes/NEEDS_REVIEW.md:209 probably refreshes the highlight: calls sub_202719C, then sub_20271E8 with its result.
- docs/function_notes/hk_02.md:103 probably refreshes the highlight: calls sub_202719C, then sub_20271E8 with its result.
sub_202719C
export/plan0/arm9_main/sub_202719C_0202719C.c
- docs/function_notes/NEEDS_REVIEW.md:210 probably marks the selected cell active: sets flags at object+52 and cell entry (off_20271DC[+96] + 1) << 6 fields +4 and +6 to 1; returns 1.
- docs/function_notes/hk_02.md:104 probably marks the selected cell active: sets flags at object+52 and cell entry (off_20271DC[+96] + 1) << 6 fields +4 and +6 to 1; returns 1.
sub_20271E8
export/plan0/arm9_main/sub_20271E8_020271E8.c
- docs/function_notes/NEEDS_REVIEW.md:211 probably copies cell entries for the selected item (table off_2027218 indexed by +96) into the highlight cells via sub_2025C6C (cells 24 and 25).
- docs/function_notes/hk_02.md:105 probably copies cell entries for the selected item (table off_2027218 indexed by +96) into the highlight cells via sub_2025C6C (cells 24 and 25).
sub_202721C
export/plan0/arm9_main/sub_202721C_0202721C.c
- docs/function_notes/NEEDS_REVIEW.md:212 probably applies sprite or BG updates for the selected item via sub_2124748 (twice), unless the flag at off_2027284 + dword_2027288 is already set.
- docs/function_notes/hk_02.md:106 probably applies sprite or BG updates for the selected item via sub_2124748 (twice), unless the flag at off_2027284 + dword_2027288 is already set.
sub_202728C
export/plan0/arm9_main/sub_202728C_0202728C.c
- docs/function_notes/NEEDS_REVIEW.md:213 probably stores u16 a1 at object+24+68 and at +132 when the mode is not 2 and the flag at off_20272B8 + dword_20272BC is clear.
- docs/function_notes/hk_02.md:107 probably stores u16 a1 at object+24+68 and at +132 when the mode is not 2 and the flag at off_20272B8 + dword_20272BC is clear.
sub_20272C0
export/plan0/arm9_main/sub_20272C0_020272C0.c
- docs/function_notes/NEEDS_REVIEW.md:214 probably stores halfword a1 at cell-object +6 and a2 at +198 under the same mode and flag checks as sub_202728C.
- docs/function_notes/hk_02.md:108 probably stores halfword a1 at cell-object +6 and a2 at +198 under the same mode and flag checks as sub_202728C.
sub_20272EC
export/plan0/arm9_main/sub_20272EC_020272EC.c
- docs/function_notes/NEEDS_REVIEW.md:215 probably clears highlight state: zeroes the flag word at +52 and cell flags +4/+6 for 12 slots from table off_2027348, sets the word at +dword_2027344 to 1.
- docs/function_notes/hk_02.md:109 probably clears highlight state: zeroes the flag word at +52 and cell flags +4/+6 for 12 slots from table off_2027348, sets the word at +dword_2027344 to 1.
sub_202734C
export/plan0/arm9_main/sub_202734C_0202734C.c
- docs/function_notes/NEEDS_REVIEW.md:216 probably writes value a1 into the cell entries of every slot (table off_20273B8, count at object+124) and into the flag word at dword_20273BC.
- docs/function_notes/hk_02.md:110 probably writes value a1 into the cell entries of every slot (table off_20273B8, count at object+124) and into the flag word at dword_20273BC.
sub_20273C0
export/plan0/arm9_main/sub_20273C0_020273C0.c
- docs/function_notes/NEEDS_REVIEW.md:217 probably moves the select-screen object into state 8 (+108 = 8, +140 = 2, +104 = 0), calls sub_2128310, sub_2027424, sub_2025F14 x3 and returns sub_20789D4.
- docs/function_notes/hk_02.md:111 probably moves the select-screen object into state 8 (+108 = 8, +140 = 2, +104 = 0), calls sub_2128310, sub_2027424, sub_2025F14 x3 and returns sub_20789D4.
sub_2027424
export/plan0/arm9_main/sub_2027424_02027424.c
- docs/function_notes/NEEDS_REVIEW.md:218 probably calls sub_202B7C0 (sound or animation stop) only if the flag at *off_2027440 + dword_2027444 is nonzero; returns result.
- docs/function_notes/hk_02.md:112 probably calls sub_202B7C0 (sound or animation stop) only if the flag at *off_2027440 + dword_2027444 is nonzero; returns result.
sub_2027448
export/plan0/arm9_main/sub_2027448_02027448.c
- docs/function_notes/NEEDS_REVIEW.md:219 probably applies the 12-entry layout for slot object+96: writes four halfwords (x, y, and two more) from a per-slot table into the sprite struct at +132..+138.
- docs/function_notes/hk_02.md:113 probably applies the 12-entry layout for slot object+96: writes four halfwords (x, y, and two more) from a per-slot table into the sprite struct at +132..+138.
sub_2027648
export/plan0/arm9_main/sub_2027648_02027648.c
- docs/function_notes/NEEDS_REVIEW.md:220 probably the same slot layout routine for the 11-entry variant (indices 0-10, slot 5 chooses by +100 == 2 or 9).
- docs/function_notes/hk_02.md:114 probably the same slot layout routine for the 11-entry variant (indices 0-10, slot 5 chooses by +100 == 2 or 9).
sub_2027850
export/plan0/arm9_main/sub_2027850_02027850.c
- docs/function_notes/NEEDS_REVIEW.md:221 probably the same slot layout routine for the 10-entry variant (indices 0-9, slots 1 and 8 choose by +100 == 5).
- docs/function_notes/hk_02.md:115 probably the same slot layout routine for the 10-entry variant (indices 0-9, slots 1 and 8 choose by +100 == 5).
sub_2027A58
export/plan0/arm9_main/sub_2027A58_02027A58.c
- docs/function_notes/NEEDS_REVIEW.md:222 probably the same slot layout routine for the 9-entry variant (indices 0-8).
- docs/function_notes/hk_02.md:116 probably the same slot layout routine for the 9-entry variant (indices 0-8).
sub_2027BE0
export/plan0/arm9_main/sub_2027BE0_02027BE0.c
- docs/function_notes/NEEDS_REVIEW.md:223 probably the same slot layout routine for the 8-entry variant (indices 0-7, several slots choose by +100 value 1/4/6/7).
- docs/function_notes/hk_02.md:117 probably the same slot layout routine for the 8-entry variant (indices 0-7, several slots choose by +100 value 1/4/6/7).
sub_2027DF8
export/plan0/arm9_main/sub_2027DF8_02027DF8.c
- docs/function_notes/NEEDS_REVIEW.md:224 probably loads the select-screen 2D resource set (counterpart of sub_2025F90): four resources via sub_2047A28, bound with sub_20B496C, sub_20B49F4, sub_20B48EC.
- docs/function_notes/hk_02.md:118 probably loads the select-screen 2D resource set (counterpart of sub_2025F90): four resources via sub_2047A28, bound with sub_20B496C, sub_20B49F4, sub_20B48EC.
sub_2027E78
export/plan0/arm9_main/sub_2027E78_02027E78.c
- docs/function_notes/NEEDS_REVIEW.md:225 probably sets up a results or menu screen BG and window display (as sub_2026058, via sub_2028074, sub_2028058, sub_202802C, sub_2027FD4), then sprites.
- docs/function_notes/hk_02.md:119 probably sets up a results or menu screen BG and window display (as sub_2026058, via sub_2028074, sub_2028058, sub_202802C, sub_2027FD4), then sprites.
sub_2027F1C
export/plan0/arm9_main/sub_2027F1C_02027F1C.c
- docs/function_notes/hk_03.md:2 packs two (hi<<8|lo) byte pairs into 16-bit values and stores them through off_2027F60 and off_2027F64 (probably a pair of 16-bit register or window values).
sub_2027F68
export/plan0/arm9_main/sub_2027F68_02027F68.c
- docs/function_notes/hk_03.md:3 read-modify-write of 16-bit register at off_2027F8C: low 6 bits from a1, bit 5 set when a2 is nonzero (probably a display/BG control field).
sub_2027F90
export/plan0/arm9_main/sub_2027F90_02027F90.c
- docs/function_notes/hk_03.md:4 same as sub_2027F68 but on the 16-bit register at off_2027FB4.
sub_2027FB8
export/plan0/arm9_main/sub_2027FB8_02027FB8.c
- docs/function_notes/hk_03.md:5 sets bits 13 and up of the 32-bit register at off_2027FD0 from a1 (probably a layer or attribute field).
sub_2027FD4
export/plan0/arm9_main/sub_2027FD4_02027FD4.c
- docs/function_notes/hk_03.md:6 thin wrapper, returns sub_214A40C(dword_202800C, a1, a2, a3, a4).
sub_2028010
export/plan0/arm9_main/sub_2028010_02028010.c
- docs/function_notes/hk_03.md:7 sets low 2 bits of 16-bit register at off_2028028 to a1 (clears bits 0-1, ORs a1).
sub_202802C
export/plan0/arm9_main/sub_202802C_0202802C.c
- docs/function_notes/hk_03.md:8 writes 32-bit register at off_2028054 = (a1 masked by dword_202804C) | (a2<<16 masked by dword_2028050) (probably packs an x/y offset pair).
sub_2028058
export/plan0/arm9_main/sub_2028058_02028058.c
- docs/function_notes/hk_03.md:9 sets bits 8-12 of the 32-bit register at off_2028070 from a1 (probably a BG or layer select field).
sub_2028074
export/plan0/arm9_main/sub_2028074_02028074.c
- docs/function_notes/hk_03.md:10 sets bits 8-12 of hardware DISPCNT (MEMORY[0x4000000]) from a1 (BG layer enable bits).
sub_202808C
export/plan0/arm9_main/sub_202808C_0202808C.c
- docs/function_notes/hk_03.md:11 screen exit: reads state at off_20280D4, may call sub_202811C/sub_21281FC, then sub_211F498 or sub_212B91C, frees via sub_2036AB0, clears off_20280D4.
sub_20280DC
export/plan0/arm9_main/sub_20280DC_020280DC.c
- docs/function_notes/hk_03.md:12 returns indirect call result off_20280E4() (probably a mode or state query).
sub_2028110
export/plan0/arm9_main/sub_2028110_02028110.c
- docs/function_notes/hk_03.md:13 returns global dword_2028118 (trivial getter).
sub_202811C
export/plan0/arm9_main/sub_202811C_0202811C.c
- docs/function_notes/hk_03.md:14 returns dword at field +0x20 of object at *off_202812C (getter).
sub_2028130
export/plan0/arm9_main/sub_2028130_02028130.c
- docs/function_notes/hk_03.md:15 1452-byte per-frame state machine (state at +148, cases 0-8) for the kart/menu select screen; uses sub_2029008, sub_2029930, sub_2124C30; returns selection.
sub_20286F4
export/plan0/arm9_main/sub_20286F4_020286F4.c
- docs/function_notes/hk_03.md:16 indirect predicate call off_202870C on record 92*a1 inside table off_2028708 (probably a per-racer record check).
sub_2028724
export/plan0/arm9_main/sub_2028724_02028724.c
- docs/function_notes/hk_03.md:17 indirect getter off_2028740 on record 92*a1+72 of table off_202873C (92-byte per-slot records).
sub_202874C
export/plan0/arm9_main/sub_202874C_0202874C.c
- docs/function_notes/hk_03.md:18 indirect getter off_2028768 on record 92*a1+72 of table off_2028764.
sub_2028774
export/plan0/arm9_main/sub_2028774_02028774.c
- docs/function_notes/hk_03.md:19 indirect predicate off_2028790 on record 92*a1+72 of table off_202878C (probably slot active check, used by sub_20290FC).
sub_20287C8
export/plan0/arm9_main/sub_20287C8_020287C8.c
- docs/function_notes/hk_03.md:20 returns true when u16 at a1+12 is zero and u16 at a1+4 is nonzero.
sub_20287EC
export/plan0/arm9_main/sub_20287EC_020287EC.c
- docs/function_notes/hk_03.md:21 returns true when sub_202881C() is zero and u16 at a1+16 is below 5.
sub_202881C
export/plan0/arm9_main/sub_202881C_0202881C.c
- docs/function_notes/hk_03.md:22 returns u16 at a1+4 (getter).
sub_2028824
export/plan0/arm9_main/sub_2028824_02028824.c
- docs/function_notes/hk_03.md:23 if sub_2028850() equals 8, stores byte a1 at *off_202884C+5623 (probably a per-mode flag store).
sub_2028850
export/plan0/arm9_main/sub_2028850_02028850.c
- docs/function_notes/hk_03.md:24 returns dword at *off_2028860+4 (getter).
sub_2028864
export/plan0/arm9_main/sub_2028864_02028864.c
- docs/function_notes/hk_03.md:25 1318-byte screen setup: heap alloc (sub_2036948/sub_2036BEC), sprite and layer init via sub_2025F80/sub_2025B20, BMG lookup sub_20B3F7C.
sub_2028D9C
export/plan0/arm9_main/sub_2028D9C_02028D9C.c
- docs/function_notes/hk_03.md:26 returns sub_2028DB8(sub_2028DD4()) (current entry lookup).
sub_2028DB8
export/plan0/arm9_main/sub_2028DB8_02028DB8.c
- docs/function_notes/hk_03.md:27 returns u16 at off_2028DD0 + 8a1 + 7762 (8-byte table lookup).
sub_2028DD4
export/plan0/arm9_main/sub_2028DD4_02028DD4.c
- docs/function_notes/hk_03.md:28 returns u16 at off_2028DFC+1074 when dword at off_2028DFC is 2, else 0.
sub_2028E00
export/plan0/arm9_main/sub_2028E00_02028E00.c
- docs/function_notes/hk_03.md:29 thin wrapper, returns off_2028E10(a1, 0, a2).
sub_2028E38
export/plan0/arm9_main/sub_2028E38_02028E38.c
- docs/function_notes/hk_03.md:30 when sub_20280DC is zero, reads six u16 stats from sub_2078B04 record and calls sub_2028EC0 for indices 10 to 5 (probably fills HUD bar values).
sub_2028EC0
export/plan0/arm9_main/sub_2028EC0_02028EC0.c
- docs/function_notes/hk_03.md:31 computes (100-a3)*(v[a2]-v[a1])/100 via sub_2133068 using sub_2028F08 lookups, stores u16 at a4[24]+(a1<<6)+4 (probably a bar width or position entry).
sub_2028F08
export/plan0/arm9_main/sub_2028F08_02028F08.c
- docs/function_notes/hk_03.md:32 thin wrapper, returns off_2028F1C(a2, a1).
sub_2028F20
export/plan0/arm9_main/sub_2028F20_02028F20.c
- docs/function_notes/hk_03.md:33 when sub_20280DC is zero, looks up a BMG string via sub_2025D98 and sub_20B3F7C and draws entries with sub_212426C (probably results or ranking text).
sub_2028F84
export/plan0/arm9_main/sub_2028F84_02028F84.c
- docs/function_notes/hk_03.md:34 returns true when dword at *off_2028FA8+252 is nonzero and sub_202B8C0() is true.
sub_2028FAC
export/plan0/arm9_main/sub_2028FAC_02028FAC.c
- docs/function_notes/hk_03.md:35 when not sub_20280DC, fills a table at +24 (stride 64, field +6) from sub_2025EBC for count sub_2029000()+sub_2028FF8() (probably builds a menu entry list).
sub_2028FF8
export/plan0/arm9_main/sub_2028FF8_02028FF8.c
- docs/function_notes/hk_03.md:36 returns u16 at a1+6 (getter).
sub_2029000
export/plan0/arm9_main/sub_2029000_02029000.c
- docs/function_notes/hk_03.md:37 returns u16 at a1+6 (same as sub_2028FF8).
sub_2029008
export/plan0/arm9_main/sub_2029008_02029008.c
- docs/function_notes/hk_03.md:38 if flag at *off_202908C+dword_2029090 is zero, caches five sub_2025EBC values into u16 slots of the +72 record buffer (probably per-frame input cache).
sub_20290AC
export/plan0/arm9_main/sub_20290AC_020290AC.c
- docs/function_notes/hk_03.md:39 true when dword at *off_20290F0+dword_20290F4 equals a1 and timer dword_20290F8 is 0 or >=60 with sub_2133068 result zero (probably timed trigger).
sub_20290FC
export/plan0/arm9_main/sub_20290FC_020290FC.c
- docs/function_notes/hk_03.md:40 184-byte per-frame hit test via sub_20291F0, sub_202874C, sub_2028724, sub_20291C4 (cell hit test), debounce at dword_20291C0; returns cell index or -1.
sub_20291C4
export/plan0/arm9_main/sub_20291C4_020291C4.c
- docs/function_notes/hk_03.md:41 thin wrapper, returns sub_201EA84(a3, a1, a2) (cell bank hit test, probably).
sub_20291F0
export/plan0/arm9_main/sub_20291F0_020291F0.c
- docs/function_notes/hk_03.md:42 indirect predicate off_202920C on record 92*a1+72 of table off_2029208 (probably a valid or pressed check on a slot).
sub_2029248
export/plan0/arm9_main/sub_2029248_02029248.c
- docs/function_notes/hk_03.md:43 110-byte selection step backwards through a 36-slot table (sub_2025E28, sub_205FD2C); updates index +156/+168, returns sub_2029330() (save-record navigation).
sub_20292BC
export/plan0/arm9_main/sub_20292BC_020292BC.c
- docs/function_notes/hk_03.md:44 same as sub_2029248 but steps forward with wrap at 36 (save-record navigation, next direction).
sub_2029330
export/plan0/arm9_main/sub_2029330_02029330.c
- docs/function_notes/hk_03.md:45 218-byte HUD update when not sub_20280DC: values via sub_2025DA4/sub_2025DF4, split by 10 with sub_2133068, digits via sub_2025C48 (probably 2-digit number).
sub_202941C
export/plan0/arm9_main/sub_202941C_0202941C.c
- docs/function_notes/hk_03.md:46 if flag at *off_2029438+dword_202943C is nonzero, returns sub_202B7C0() (conditional call).
sub_2029440
export/plan0/arm9_main/sub_2029440_02029440.c
- docs/function_notes/hk_03.md:47 stores byte a1 at *off_202944C+dword_2029450 (setter).
sub_2029454
export/plan0/arm9_main/sub_2029454_02029454.c
- docs/function_notes/hk_03.md:48 stores byte a1 at *off_2029460+dword_2029464 (setter).
sub_2029468
export/plan0/arm9_main/sub_2029468_02029468.c
- docs/function_notes/hk_03.md:49 stores u16 a1 at *off_2029474+dword_2029478 (setter).
sub_202947C
export/plan0/arm9_main/sub_202947C_0202947C.c
- docs/function_notes/hk_03.md:50 stores byte a1 at *off_2029488+253 (setter).
sub_202948C
export/plan0/arm9_main/sub_202948C_0202948C.c
- docs/function_notes/hk_03.md:51 stores byte a1 at *off_2029498+252 (setter).
sub_202949C
export/plan0/arm9_main/sub_202949C_0202949C.c
- docs/function_notes/hk_03.md:52 stores dword a1 at *off_20294A8+224 (setter).
sub_20294AC
export/plan0/arm9_main/sub_20294AC_020294AC.c
- docs/function_notes/hk_03.md:53 sets dword +20 of element a1 (24-byte stride, table off_20294BC) to a2 and returns the element pointer.
sub_20294C0
export/plan0/arm9_main/sub_20294C0_020294C0.c
- docs/function_notes/hk_03.md:54 sets dword +16 of element a1 (24-byte stride, table off_20294D0) to a2.
sub_20294D4
export/plan0/arm9_main/sub_20294D4_020294D4.c
- docs/function_notes/hk_03.md:55 sets dword +8 of element a1 (24-byte stride, table off_20294E4) to a2.
sub_20294E8
export/plan0/arm9_main/sub_20294E8_020294E8.c
- docs/function_notes/hk_03.md:56 sets dword +4 of element a1 (24-byte stride, table off_20294F8) to a2.
sub_20294FC
export/plan0/arm9_main/sub_20294FC_020294FC.c
- docs/function_notes/hk_03.md:57 stores dword a2 at element a1 (stride 24, table off_2029508), returns offset.
sub_202950C
export/plan0/arm9_main/sub_202950C_0202950C.c
- docs/function_notes/hk_03.md:58 sets dword +12 of element a1 (24-byte stride, table off_202951C) to a2.
sub_2029520
export/plan0/arm9_main/sub_2029520_02029520.c
- docs/function_notes/hk_03.md:59 clears dword +220 of *off_202952C and returns pointer (setter to 0).
sub_2029530
export/plan0/arm9_main/sub_2029530_02029530.c
- docs/function_notes/hk_03.md:60 sets dword +220 of *off_202953C to 1 and returns pointer.
sub_2029540
export/plan0/arm9_main/sub_2029540_02029540.c
- docs/function_notes/hk_03.md:61 stores dword a1 at +236 of *off_202954C (setter).
sub_2029550
export/plan0/arm9_main/sub_2029550_02029550.c
- docs/function_notes/hk_03.md:62 stores u16 a1 at +232 of *off_202955C (setter).
sub_2029560
export/plan0/arm9_main/sub_2029560_02029560.c
- docs/function_notes/hk_03.md:63 stores dword a1 at +240 of *off_202956C (setter).
sub_2029570
export/plan0/arm9_main/sub_2029570_02029570.c
- docs/function_notes/hk_03.md:64 stores dword a1 at +192 of *off_202957C (setter).
sub_2029580
export/plan0/arm9_main/sub_2029580_02029580.c
- docs/function_notes/hk_03.md:65 stores dword a1 at +208 of *off_202958C (setter, probably part of the message or dialog state).
sub_2029590
export/plan0/arm9_main/sub_2029590_02029590.c
- docs/function_notes/hk_03.md:66 stores dword a1 at +204 of *off_202959C (setter).
sub_20295A0
export/plan0/arm9_main/sub_20295A0_020295A0.c
- docs/function_notes/hk_03.md:67 clears dword +216 of *off_20295AC and returns pointer (setter to 0).
sub_20295B0
export/plan0/arm9_main/sub_20295B0_020295B0.c
- docs/function_notes/hk_03.md:68 sets dword +216 of *off_20295BC to 1 and returns pointer.
sub_20295C0
export/plan0/arm9_main/sub_20295C0_020295C0.c
- docs/function_notes/hk_03.md:69 stores dword a1 at +212 of *off_20295CC (setter).
sub_20295D0
export/plan0/arm9_main/sub_20295D0_020295D0.c
- docs/function_notes/hk_03.md:70 returns byte at *off_20295DC+dword_20295E0 (getter).
sub_20295E4
export/plan0/arm9_main/sub_20295E4_020295E4.c
- docs/function_notes/hk_03.md:71 returns byte at *off_20295F0+dword_20295F4 (getter).
sub_20295F8
export/plan0/arm9_main/sub_20295F8_020295F8.c
- docs/function_notes/hk_03.md:72 returns signed byte at *off_2029604+253 (getter).
sub_2029608
export/plan0/arm9_main/sub_2029608_02029608.c
- docs/function_notes/hk_03.md:73 returns signed byte at *off_2029614+252 (getter).
sub_2029618
export/plan0/arm9_main/sub_2029618_02029618.c
- docs/function_notes/hk_03.md:74 returns dword at off_2029628 + 24a1 + 12 (indexed getter).
sub_202962C
export/plan0/arm9_main/sub_202962C_0202962C.c
- docs/function_notes/hk_03.md:75 returns dword at +220 of *off_2029638 (getter).
sub_202963C
export/plan0/arm9_main/sub_202963C_0202963C.c
- docs/function_notes/hk_03.md:76 returns dword at +236 of *off_2029648 (getter).
sub_202964C
export/plan0/arm9_main/sub_202964C_0202964C.c
- docs/function_notes/hk_03.md:77 returns u16 at +232 of *off_2029658 (getter).
sub_202965C
export/plan0/arm9_main/sub_202965C_0202965C.c
- docs/function_notes/hk_03.md:78 returns dword at +240 of *off_2029668 (getter).
sub_202966C
export/plan0/arm9_main/sub_202966C_0202966C.c
- docs/function_notes/hk_03.md:79 returns dword at +192 of *off_2029678 (getter).
sub_202967C
export/plan0/arm9_main/sub_202967C_0202967C.c
- docs/function_notes/hk_03.md:80 returns dword at +216 of *off_2029688 (getter).
sub_202968C
export/plan0/arm9_main/sub_202968C_0202968C.c
- docs/function_notes/hk_03.md:81 returns dword at +204 of *off_2029698 (getter).
sub_202969C
export/plan0/arm9_main/sub_202969C_0202969C.c
- docs/function_notes/hk_03.md:82 returns dword at +212 of *off_20296A8 (getter).
sub_20296AC
export/plan0/arm9_main/sub_20296AC_020296AC.c
- docs/function_notes/hk_03.md:83 returns dword at off_20296BC + 24a1 + 8 (indexed getter).
sub_20296C0
export/plan0/arm9_main/sub_20296C0_020296C0.c
- docs/function_notes/hk_03.md:84 returns dword at off_20296D0 + 24a1 + 4 (indexed getter).
sub_20296D4
export/plan0/arm9_main/sub_20296D4_020296D4.c
- docs/function_notes/hk_03.md:85 returns dword at off_20296E0 + 24a1 (indexed getter).
sub_20296E4
export/plan0/arm9_main/sub_20296E4_020296E4.c
- docs/function_notes/hk_03.md:86 returns dword at +208 of *off_20296F0 (getter).
sub_20296F4
export/plan0/arm9_main/sub_20296F4_020296F4.c
- docs/function_notes/hk_03.md:87 loops 4 slots; for each active one (sub_21227F8) copies three dwords from record +32/+36/+40 into table off_2029754 (probably per-racer config).
sub_2029758
export/plan0/arm9_main/sub_2029758_02029758.c
- docs/function_notes/hk_03.md:88 reverse of sub_20296F4: copies three dwords from table off_20297B4 (24-byte stride) into records at +32/+36/+40 for each active slot (sub_2122794, sub_2122734).
sub_20297BC
export/plan0/arm9_main/sub_20297BC_020297BC.c
- docs/function_notes/hk_03.md:89 208-byte race setup: sub_20468B0 per active slot, fills up to 8 racer entries, sets config via sub_2029908/sub_20298F4, builds slot mask, calls sub_205CFD4.
sub_2029890
export/plan0/arm9_main/sub_2029890_02029890.c
- docs/function_notes/hk_03.md:90 stores dword a1 at +520 of *off_20298A0 (setter).
sub_20298A4
export/plan0/arm9_main/sub_20298A4_020298A4.c
- docs/function_notes/hk_03.md:91 stores dword a1 at +516 of *off_20298B4 (setter).
sub_20298B8
export/plan0/arm9_main/sub_20298B8_020298B8.c
- docs/function_notes/hk_03.md:92 stores byte a1 at +576 of *off_20298C8 (setter).
sub_20298CC
export/plan0/arm9_main/sub_20298CC_020298CC.c
- docs/function_notes/hk_03.md:93 stores byte a1 at +575 of *off_20298DC (setter).
sub_20298E0
export/plan0/arm9_main/sub_20298E0_020298E0.c
- docs/function_notes/hk_03.md:94 stores dword a1 at +504 of *off_20298F0 (setter).
sub_20298F4
export/plan0/arm9_main/sub_20298F4_020298F4.c
- docs/function_notes/hk_03.md:95 stores dword a1 at +488 of *off_2029904 (setter).
sub_2029908
export/plan0/arm9_main/sub_2029908_02029908.c
- docs/function_notes/hk_03.md:96 stores dword a1 at +496 of *off_2029918 (setter).
sub_202991C
export/plan0/arm9_main/sub_202991C_0202991C.c
- docs/function_notes/hk_03.md:97 stores dword a1 at +508 of *off_202992C (setter).
sub_2029930
export/plan0/arm9_main/sub_2029930_02029930.c
- docs/function_notes/hk_03.md:98 returns global pointer *off_2029938 (trivial getter for the shared object).
sub_202993C
export/plan0/arm9_main/sub_202993C_0202993C.c
- docs/function_notes/hk_03.md:99 156-byte reset of 8-entry, 24-byte-stride record table at *off_20299D8 (fields -1,-1,4,-1,3), flags +252/+253 set to 1, then sub_2029A24, sub_204799C.
sub_20299E4
export/plan0/arm9_main/sub_20299E4_020299E4.c
- docs/function_notes/hk_03.md:100 thin wrapper, tail-calls off_20299EC() (indirect call through a function pointer).
sub_2029A18
export/plan0/arm9_main/sub_2029A18_02029A18.c
- docs/function_notes/hk_03.md:101 returns global dword_2029A20 (trivial getter).
sub_2029A24
export/plan0/arm9_main/sub_2029A24_02029A24.c
- docs/function_notes/hk_03.md:102 returns dword at +32 of *off_2029A34 (getter).
sub_2029A38
export/plan0/arm9_main/sub_2029A38_02029A38.c
- docs/function_notes/hk_03.md:103 thin wrapper, returns off_2029A48(a1, 0, a2).
sub_2029A70
export/plan0/arm9_main/sub_2029A70_02029A70.c
- docs/function_notes/hk_03.md:104 allocates object via sub_2036BEC(a1, dword_2029A88) stored to *off_2029A8C, then calls sub_202993C (init of the 8-entry record table).
sub_2029A90
export/plan0/arm9_main/sub_2029A90_02029A90.c
- docs/function_notes/hk_03.md:105 thunk, tail-calls off_2029A94().
sub_2029A98
export/plan0/arm9_main/sub_2029A98_02029A98.c
- docs/function_notes/hk_03.md:106 thunk, tail-calls off_2029A9C().
sub_2029AA0
export/plan0/arm9_main/sub_2029AA0_02029AA0.c
- docs/function_notes/hk_03.md:107 756-byte per-frame update of a selection or results screen: two sub_2124C30 draws, state at +84 picks BMG message, sub_2045A2C(0/1) for player choice.
sub_2029DCC
export/plan0/arm9_main/sub_2029DCC_02029DCC.c
- docs/function_notes/hk_03.md:108 1358-byte screen init (96-byte heap object): sub_2047A28/sub_204799C lookups, sub_2038D88 setup, sub_2025ABC layers, BMG strings (common.bmg).
sub_202A340
export/plan0/arm9_main/sub_202A340_0202A340.c
- docs/function_notes/hk_03.md:109 calls sub_2025CD0 with four bytes/half from table off_202A35C at offset 152+4*a2 (probably copies a 4-byte display or palette entry into a1).
sub_202A360
export/plan0/arm9_main/sub_202A360_0202A360.c
- docs/function_notes/hk_03.md:110 538-byte result classifier returning 2..7 from per-racer values (sub_205DB28/sub_205DC7C, table *off_202A598): 7 tie, 5/6 order, 2/3/4 position (probably.
sub_202A5A0
export/plan0/arm9_main/sub_202A5A0_0202A5A0.c
- docs/function_notes/hk_03.md:111 calls sub_2032AA8 or sub_2029A90 depending on flag at +dword_202A5D0, then returns sub_20AE5F0(...) (probably a sub-screen text or list update).
sub_202A5D8
export/plan0/arm9_main/sub_202A5D8_0202A5D8.c
- docs/function_notes/hk_03.md:112 returns sub_212ABD0(v) where v is sub_2032AB0() or sub_2029A98() depending on a flag (probably keyboard sub-screen setup).
sub_202A604
export/plan0/arm9_main/sub_202A604_0202A604.c
- docs/function_notes/hk_03.md:113 per-frame update: if sub_2049B6C() is zero, runs sub_20AE6AC, sub_2032AC4 or sub_2029AA0, returns sub_212A920(sub_20AE630(...)) (probably keyboard or icons).
sub_202A658
export/plan0/arm9_main/sub_202A658_0202A658.c
- docs/function_notes/hk_03.md:114 174-byte screen open: heap alloc via sub_2036BEC, sub_214D05C, sub_20AE6D4, sub_2032F94 or sub_2029DCC, sub_212ABDC; sets bit 0x10 on off_202A71C/off_202A724.
sub_202A734
export/plan0/arm9_main/sub_202A734_0202A734.c
- docs/function_notes/hk_03.md:115 188-byte: fetches 13 values via sub_204799C, writes them into four buffers via sub_20B496C/sub_20B49F4/sub_20B48EC/sub_20B4A7C/sub_20B4810 (probably a stat.
sub_202A820
export/plan0/arm9_main/sub_202A820_0202A820.c
- docs/function_notes/hk_03.md:116 174-byte: sub_2148950(1,0,0), writes BG and window regs from sub_2025EBC values of *off_202A8E0+220, sets a 16-bit reg to value-64 (probably slider).
sub_202A90C
export/plan0/arm9_main/sub_202A90C_0202A90C.c
- docs/function_notes/hk_03.md:117 calls sub_2036AB0((+144)) to free, clears off_202A928 and returns the pointer (screen close, same pattern as sub_202808C).
sub_202A92C
export/plan0/arm9_main/sub_202A92C_0202A92C.c
- docs/function_notes/hk_03.md:118 482-byte per-frame state machine (state at +172, cases 0-7, 60-frame timers) via sub_202E4B0, sub_202B100, sub_2036C5C, sub_212ECC0; returns +176 (probably.
sub_202AB2C
export/plan0/arm9_main/sub_202AB2C_0202AB2C.c
- docs/function_notes/hk_04.md:3 2D screen init (0x3A0 bytes): fills screen object at *off_202AED0 (fields +128..+184), sets up 4 sprite slots and BG/cell objects via sub_2025F80/sub_20258D4/sub_2025B20, builds layout with sub_202E530, returns via sub_2036820.
sub_202AF60
export/plan0/arm9_main/sub_202AF60_0202AF60.c
- docs/function_notes/NEEDS_REVIEW.md:226 probably per-frame value update: writes 64-bit sum (sub_2133048 result + field +16) to object +148; then loops sub_2133068 to find an index whose entry at +92 matches table off_202AFE0 (4 slots).
- docs/function_notes/hk_04.md:4 probably per-frame value update: writes 64-bit sum (sub_2133048 result + field +16) to object +148; then loops sub_2133068 to find an index whose entry at +92 matches table off_202AFE0 (4 slots).
sub_202AFE4
export/plan0/arm9_main/sub_202AFE4_0202AFE4.c
- docs/function_notes/hk_04.md:5 countdown/timer HUD update: refreshes cell object via sub_2025EDC/sub_2025EBC, decrements counter at *off_202B0E4+dword_202B0F0 and writes two digits via sub_2124748 from table off_202B0FC; plays sound via sub_212ECC0 when low.
sub_202B100
export/plan0/arm9_main/sub_202B100_0202B100.c
- docs/function_notes/hk_04.md:6 refreshes 4 HUD slot icons: per-slot ids from sub_2122734/sub_2121E24, on change looks up BMG name with sub_20B3F7C and redraws via sub_212426C, plus sound sub_212ECC0.
sub_202B264
export/plan0/arm9_main/sub_202B264_0202B264.c
- docs/function_notes/hk_04.md:7 copies a 16-bit value (from sub_2025EBC) into a row of a table at object +100 for (count of two lists) entries.
sub_202B2BC
export/plan0/arm9_main/sub_202B2BC_0202B2BC.c
- docs/function_notes/hk_04.md:8 results-screen init: sets up 4 sprite slots at *off_202B3D0 with BMG text lookup sub_20B3F7C (id from sub_2121D94), draws via sub_212426C, stores size/palette words into object fields.
sub_202B3F4
export/plan0/arm9_main/sub_202B3F4_0202B3F4.c
- docs/function_notes/hk_04.md:9 per-frame: for 4 slots, looks up cell entries with sub_201EA30/sub_201EA58 and writes sub_20AE4C0 results (computed x from 96-16*w>>4) into cell attribute words.
sub_202B4BC
export/plan0/arm9_main/sub_202B4BC_0202B4BC.c
- docs/function_notes/hk_04.md:10 text/label update: if arg 1, picks BMG name (table off_202B550 or message 26) via sub_20B3F7C and draws with sub_212426C; if arg 0, loops 7 entries calling sub_2124100 with palette 14 for selected index, else 15.
sub_202B554
export/plan0/arm9_main/sub_202B554_0202B554.c
- docs/function_notes/hk_04.md:11 writes two-digit numbers (split by 10 via sub_2133068) into text cells with sub_2025C48, sets flag at +dword_202B5FC when a1>=10, and shows label 63 or 64 based on a2<10.
sub_202B604
export/plan0/arm9_main/sub_202B604_0202B604.c
- docs/function_notes/hk_04.md:12 trivial setter: writes 1 to flag at *off_202B610 + dword_202B614.
sub_202B618
export/plan0/arm9_main/sub_202B618_0202B618.c
- docs/function_notes/hk_04.md:13 setter for mode/state (a1) at *off_202B694+dword_202B698; on change to nonzero loops from the current slot count up to 8 calling sub_202CC44 and sub_202CB68, on zero calls sub_202CB2C for each slot.
sub_202B6A0
export/plan0/arm9_main/sub_202B6A0_0202B6A0.c
- docs/function_notes/hk_04.md:14 per-slot state setter: writes a2 to +76 of 44-byte record at *off_202B6E8 (index a1); if changed and flag set, calls sub_202CC18 with code 1 or 2.
sub_202B6F0
export/plan0/arm9_main/sub_202B6F0_0202B6F0.c
- docs/function_notes/hk_04.md:15 setter for an 8-slot mode (flag at *off_202B7AC+dword_202B7B0): nonzero loops slots calling sub_202CC18 with code 1/2 from slot state, toggles two cells via sub_2025F14; zero path calls sub_202CC18(i,1) and toggles the cells back.
sub_202B7C0
export/plan0/arm9_main/sub_202B7C0_0202B7C0.c
- docs/function_notes/NEEDS_REVIEW.md:227 probably UI mode dispatcher (arg 0..3) for object at *off_202B86C: resets three cells via sub_2025F14; modes 0/1 call sub_202CC18 per slot, mode 2 calls an unresolved function pointer, mode 3 calls sub_202CB2C per slot and sets a flag.
- docs/function_notes/hk_04.md:16 probably UI mode dispatcher (arg 0..3) for object at *off_202B86C: resets three cells via sub_2025F14; modes 0/1 call sub_202CC18 per slot, mode 2 calls an unresolved function pointer, mode 3 calls sub_202CB2C per slot and sets a flag.
sub_202B888
export/plan0/arm9_main/sub_202B888_0202B888.c
- docs/function_notes/hk_04.md:17 returns the AND of the field at +20 over all 24-byte per-entry records from sub_2029930, for the count at *off_202B8BC+72 (all-ready check).
sub_202B8C0
export/plan0/arm9_main/sub_202B8C0_0202B8C0.c
- docs/function_notes/hk_04.md:18 returns whether the field +64 of object *off_202B8D4 is zero (idle check).
sub_202B8D8
export/plan0/arm9_main/sub_202B8D8_0202B8D8.c
- docs/function_notes/hk_04.md:19 loads 9 layout/asset pointers (sub_204799C or sub_2047A28 depending on flag word off_202B9D0==2) and passes them to sub_20B496C, sub_20B49F4, sub_20B48EC, sub_20B4A7C, sub_20B4810 as parameter setup for a screen (probably 2D/menu asset binding).
sub_202BA14
export/plan0/arm9_main/sub_202BA14_0202BA14.c
- docs/function_notes/hk_04.md:20 updates display control/window registers: reads sub_2025EBC value, sets bit-masked words at off_202BB14..off_202BB28 and sub_2148950(1,0,flag); when state==2 writes attribute words 0x3D/0x3C and sprite size words.
sub_202BB60
export/plan0/arm9_main/sub_202BB60_0202BB60.c
- docs/function_notes/hk_04.md:21 destructor-like: calls sub_2036AB0 on object+60 of *off_202BB7C, then clears the pointer.
sub_202BB80
export/plan0/arm9_main/sub_202BB80_0202BB80.c
- docs/function_notes/hk_04.md:22 large per-frame HUD update (1334 bytes): ticks a timer at +64 with sound sub_212ECC0 when <=4 and sub_2133068 digit split, writes digits via sub_2025C48 from table off_202BEF0; iterates per-slot 24-byte records (sub_2029930) for item/status icons with sub_202CCA4 sounds, then sub_2124C30 draw.
sub_202C0D4
export/plan0/arm9_main/sub_202C0D4_0202C0D4.c
- docs/function_notes/hk_04.md:23 large state-machine refresh (1358 bytes) for the per-racer result/info panel: on state 1 loads per-slot data via sub_202056C, sub_214CFE4/sub_214CFFC, clears counters and calls sub_202C8DC; state 2 uses sub_20295D0/sub_20295E4 and sub_21202B0; then redraws sprites (sub_20258D4), text (sub_2124748, sub_2016468) and per-slot sub_202C884.
sub_202C65C
export/plan0/arm9_main/sub_202C65C_0202C65C.c
- docs/function_notes/hk_04.md:24 init of a 2D screen (414 bytes): allocates object via sub_2036948/sub_2036BEC into off_202C800, picks one of two pointer tables by off_202C804==2, sets up sprite tables with sub_2025B20, sub_2124ED0 layout, sub_2025A00 loop over 8 entries, resets 8 cell entries, calls sub_202CBF4, returns via sub_2036820.
sub_202C884
export/plan0/arm9_main/sub_202C884_0202C884.c
- docs/function_notes/hk_04.md:25 draws one per-slot entry: clears +20 of record a2, fills it via sub_20ADC7C, then draws sprite id from table off_202C8D8[a1] with sub_212426C.
sub_202C8DC
export/plan0/arm9_main/sub_202C8DC_0202C8DC.c
- docs/function_notes/hk_04.md:26 for slots from current count to 8, loads BMG string via sub_20B47CC/sub_20B3F7C (id 114), and writes per-slot text with sub_214CFFC and sub_213ED60 using (rank + 49 - count).
sub_202C960
export/plan0/arm9_main/sub_202C960_0202C960.c
- docs/function_notes/hk_04.md:27 per-frame HUD refresh (394 bytes): copies cell counters at object +24 via sub_2025EDC/sub_2025EBC, runs sub_202CBA4 animation step, computes 8 per-slot cell attributes with sub_20AE4C0 and highlights sub_202CCA0 entry.
sub_202CB2C
export/plan0/arm9_main/sub_202CB2C_0202CB2C.c
- docs/function_notes/hk_04.md:28 maps slot state at +84 (44-byte records of *off_202CB64): 1 -> sub_202CC18(i,0), 2 -> sub_202CC18(i,3), else returns unchanged.
sub_202CB68
export/plan0/arm9_main/sub_202CB68_0202CB68.c
- docs/function_notes/hk_04.md:29 maps slot state at +84 (records of *off_202CBA0): 0 -> sub_202CC18(i,1), 3 -> sub_202CC18(i,2).
sub_202CBA4
export/plan0/arm9_main/sub_202CBA4_0202CBA4.c
- docs/function_notes/hk_04.md:30 per-frame animation step over 8 slot records: increments counter at +80 while below 10, otherwise snaps it toward target at +84/+92 by one step.
sub_202CBF4
export/plan0/arm9_main/sub_202CBF4_0202CBF4.c
- docs/function_notes/hk_04.md:31 resets all 8 slots: sub_202CC44(i,0) then sub_202CC18(i,1).
sub_202CC18
export/plan0/arm9_main/sub_202CC18_0202CC18.c
- docs/function_notes/hk_04.md:32 sets state at +84 (44-byte records at *off_202CC40+80) for slot a1 to a2; if it equals the previous value, swaps fields and inverts the counter at +0 (10 - x) (probably a slot toggle/animation flip).
sub_202CC44
export/plan0/arm9_main/sub_202CC44_0202CC44.c
- docs/function_notes/hk_04.md:33 resets slot a1 record (44-byte at *off_202CC74+80): counter=10, state=a2, copies state into +84/+88 (slot init).
sub_202CC78
export/plan0/arm9_main/sub_202CC78_0202CC78.c
- docs/function_notes/hk_04.md:34 returns constant 57 or 58 depending on word at off_202CC88 == 2 (cell index helper).
sub_202CC8C
export/plan0/arm9_main/sub_202CC8C_0202CC8C.c
- docs/function_notes/hk_04.md:35 returns constant 56 or 57 depending on word at off_202CC9C == 2 (cell index helper).
sub_202CCA0
export/plan0/arm9_main/sub_202CCA0_0202CCA0.c
- docs/function_notes/hk_04.md:36 returns constant 8 (cell index helper).
sub_202CCA4
export/plan0/arm9_main/sub_202CCA4_0202CCA4.c
- docs/function_notes/hk_04.md:37 plays a sound/effect for cell id: unless (id==12 and a2==1), calls sub_2110720(sub_2025EB0(id), a2) (sound queue push).
sub_202CCC0
export/plan0/arm9_main/sub_202CCC0_0202CCC0.c
- docs/function_notes/hk_04.md:38 reads cell value at +204 of *off_202CD8C and updates window/blend registers (words at off_202CD94..off_202CDD0); nonzero sets sprite attribute bits, zero clears them (probably a fade/window toggle).
sub_202CDD4
export/plan0/arm9_main/sub_202CDD4_0202CDD4.c
- docs/function_notes/hk_04.md:39 destructor-like: sub_2036AB0 on object+220 of *off_202CDF0, then clears the pointer.
sub_202CDF4
export/plan0/arm9_main/sub_202CDF4_0202CDF4.c
- docs/function_notes/hk_04.md:40 large state machine (1042 bytes) for the menu/results flow: state at +176 (cases 0..13) driven by sub_2125F54 button checks, dialog setup (sub_202DDC4, sub_202D6A0, sub_202D674, sub_202D5F8, sub_202D5C0), input via sub_202E4A4/sub_202E468/sub_202E47C, sounds sub_212ECC0, confirm/save via sub_2054C98/sub_204EB08; ends drawing two entries with sub_2124C30.
sub_202D210
export/plan0/arm9_main/sub_202D210_0202D210.c
- docs/function_notes/hk_04.md:41 init of a 224-byte screen object (sub_2036BEC(v5,224) into *off_202D4F0): sets sprite/cell tables (sub_20258D4, sub_2025B20, sub_2025A50, sub_21249A8, sub_2124094), builds text via sub_202D720, layout via sub_202E530 with TimeAttack-related assets, sets state +176=1, returns sub_2036820.
sub_202D554
export/plan0/arm9_main/sub_202D554_0202D554.c
- docs/function_notes/hk_04.md:42 per-frame: writes the negated and positive value of cell counter sub_2025EBC(+204) into the +6 word of two groups of cell entries (scroll offset helper).
sub_202D5C0
export/plan0/arm9_main/sub_202D5C0_0202D5C0.c
- docs/function_notes/NEEDS_REVIEW.md:228 probably message panel show: calls sub_202DAA4 with state +164, sets BMG string 9 via sub_20B3F7C and displays with sub_21262F0, then sub_21282C8.
- docs/function_notes/hk_04.md:43 probably message panel show: calls sub_202DAA4 with state +164, sets BMG string 9 via sub_20B3F7C and displays with sub_21262F0, then sub_21282C8.
sub_202D5F8
export/plan0/arm9_main/sub_202D5F8_0202D5F8.c
- docs/function_notes/hk_04.md:44 shows a message box: BMG string a1 from table +172 via sub_20B3F7C, sub_214CFFC on +184, sub_212513C layout; if a2==0 calls sub_21262F0, else sub_2126230 with BMG string 4 as second text.
sub_202D674
export/plan0/arm9_main/sub_202D674_0202D674.c
- docs/function_notes/hk_04.md:45 shows BMG string 0 from table +172 via sub_20B3F7C and opens it with sub_212658C (dialog open).
sub_202D6A0
export/plan0/arm9_main/sub_202D6A0_0202D6A0.c
- docs/function_notes/hk_04.md:46 refreshes the entry panel for record index +164: calls sub_202DCF4, sub_202DC68, sub_202DBE8, sub_202DB68, sub_202DB04 to gather fields, then draws with sub_202DE00.
sub_202D720
export/plan0/arm9_main/sub_202D720_0202D720.c
- docs/function_notes/hk_04.md:47 draws two labels (BMG strings 86 and 87) with sub_212426C and two rank/count strings "nn/nn" built from digits (sub_2133068) with sub_2124224, using counts from sub_202DDB0 and sub_202DD9C.
sub_202D82C
export/plan0/arm9_main/sub_202D82C_0202D82C.c
- docs/function_notes/hk_04.md:48 shows BMG string 13 with sub_2126230 (second string 4) and sets state +176=8.
sub_202D868
export/plan0/arm9_main/sub_202D868_0202D868.c
- docs/function_notes/hk_04.md:49 per-entry result-list update: mode 1 draws BMG name (sub_2025D74 + sub_20B3F7C) and formatted text via sub_2124224 and sets cell flags from sub_202DD80; mode 2 refreshes the flags; mode 0 resets 7+7 cell entries (palette 14 for selected index a4, else 15).
sub_202D990
export/plan0/arm9_main/sub_202D990_0202D990.c
- docs/function_notes/hk_04.md:50 searches the 60-entry roster index table (sub_2061654 lookups at *off_202D9EC) for record a1; returns its slot index or -1.
sub_202D9FC
export/plan0/arm9_main/sub_202D9FC_0202D9FC.c
- docs/function_notes/hk_04.md:51 returns the first index 0..9 whose record flag via sub_206174C is clear (free-slot search), or -1.
sub_202DA44
export/plan0/arm9_main/sub_202DA44_0202DA44.c
- docs/function_notes/hk_04.md:52 same roster scan as sub_202D990 but returns 1 if record a1 is present and 0 otherwise.
sub_202DAA4
export/plan0/arm9_main/sub_202DAA4_0202DAA4.c
- docs/function_notes/NEEDS_REVIEW.md:229 probably shows a status/help line for entry a1: uses sub_20578FC with message from table off_202DAF8 when sub_202DD80 is nonzero, else sub_205798C.
- docs/function_notes/hk_04.md:53 probably shows a status/help line for entry a1: uses sub_20578FC with message from table off_202DAF8 when sub_202DD80 is nonzero, else sub_205798C.
sub_202DB04
export/plan0/arm9_main/sub_202DB04_0202DB04.c
- docs/function_notes/hk_04.md:54 returns the track/course id for entry a1: via sub_2061654 with index table off_202DB50 when sub_202DD80 is nonzero, else sub_202E43C(table entry).
sub_202DB68
export/plan0/arm9_main/sub_202DB68_0202DB68.c
- docs/function_notes/hk_04.md:55 getter returning a field of a 48-byte record: for valid index a1 (sub_202DD80) uses table off_202DBCC, else maps course via sub_202E43C and sub_204684C into the record array; calls sub_2061678.
sub_202DBE8
export/plan0/arm9_main/sub_202DBE8_0202DBE8.c
- docs/function_notes/hk_04.md:56 same lookup pattern as sub_202DB68 but reads through sub_206169C (record getter).
sub_202DC68
export/plan0/arm9_main/sub_202DC68_0202DC68.c
- docs/function_notes/hk_04.md:57 same lookup pattern, calls sub_20616C0 with a2 (record field read/write).
sub_202DCF4
export/plan0/arm9_main/sub_202DCF4_0202DCF4.c
- docs/function_notes/hk_04.md:58 same lookup pattern, calls sub_2061704 with a2 (record field read/write).
sub_202DD80
export/plan0/arm9_main/sub_202DD80_0202DD80.c
- docs/function_notes/hk_04.md:59 returns whether index a1 is at or beyond the count at *off_202DD94+dword_202DD98 (special/extra entry test).
sub_202DD9C
export/plan0/arm9_main/sub_202DD9C_0202DD9C.c
- docs/function_notes/hk_04.md:60 getter for a count field at *off_202DDA8+dword_202DDAC (list length).
sub_202DDB0
export/plan0/arm9_main/sub_202DDB0_0202DDB0.c
- docs/function_notes/hk_04.md:61 getter for a count field at *off_202DDBC+dword_202DDC0.
sub_202DDC4
export/plan0/arm9_main/sub_202DDC4_0202DDC4.c
- docs/function_notes/hk_04.md:62 getter for a field at *off_202DDD0+dword_202DDD4 (probably count).
sub_202DDD8
export/plan0/arm9_main/sub_202DDD8_0202DDD8.c
- docs/function_notes/hk_04.md:63 getter for a field at *off_202DDE4+dword_202DDE8.
sub_202DDEC
export/plan0/arm9_main/sub_202DDEC_0202DDEC.c
- docs/function_notes/hk_04.md:64 getter for a field at *off_202DDF8+dword_202DDFC.
sub_202DE00
export/plan0/arm9_main/sub_202DE00_0202DE00.c
- docs/function_notes/hk_04.md:65 draws one result/ghost card: BMG name via sub_20B3F7C and sub_212426C, digits via sub_2025CD0/sub_2124224, plus sub_212463C, sub_2124A68 and sub_21171A0 for the icon and bar.
sub_202DEC8
export/plan0/arm9_main/sub_202DEC8_0202DEC8.c
- docs/function_notes/NEEDS_REVIEW.md:230 probably cleanup/update: calls a vtable method at +12 of object *off_202DEF0, then sub_20AE5F0 on its buffer.
- docs/function_notes/hk_04.md:66 probably cleanup/update: calls a vtable method at +12 of object *off_202DEF0, then sub_20AE5F0 on its buffer.
sub_202DEFC
export/plan0/arm9_main/sub_202DEFC_0202DEFC.c
- docs/function_notes/NEEDS_REVIEW.md:231 probably input/state reset: clears two flag words masked with dword_202DF2C, then chains sub_2125DA0, sub_212ABD0, sub_2117218 and sub_204F7F4.
- docs/function_notes/hk_04.md:67 probably input/state reset: clears two flag words masked with dword_202DF2C, then chains sub_2125DA0, sub_212ABD0, sub_2117218 and sub_204F7F4.
sub_202DF34
export/plan0/arm9_main/sub_202DF34_0202DF34.c
- docs/function_notes/hk_04.md:68 per-frame icon-strip update: swaps sprite buffers with sub_20AE6AC/sub_20AE630, calls a callback from the object vtable, then sub_2125928 and sub_212A920 (icon strip frame update).
sub_202DFD4
export/plan0/arm9_main/sub_202DFD4_0202DFD4.c
- docs/function_notes/hk_04.md:69 init of the ghost/time-attack select screen: allocates object into *off_202E214, builds valid-entry index lists (32 and 10 slots) via sub_202E43C, sub_204684C and sub_206174C, calls sub_202E274 for asset binding, sub_2125DE0, sub_212ABDC, then a vtable state init.
sub_202E274
export/plan0/arm9_main/sub_202E274_0202E274.c
- docs/function_notes/hk_04.md:70 binds about 30 asset pointers from sub_204799C into sub_20B496C, sub_20B49F4, sub_20B48EC, sub_20B4A7C, sub_20B4810 setters, ends with sub_2117388 (probably asset table setup for the select screen).
sub_202E43C
export/plan0/arm9_main/sub_202E43C_0202E43C.c
- docs/function_notes/hk_04.md:71 small lookup helper: splits index a1 by 4 via sub_2133068 and returns an entry from table *off_202E464.
sub_202E468
export/plan0/arm9_main/sub_202E468_0202E468.c
- docs/function_notes/hk_04.md:72 getter for a flag at *off_202E474+dword_202E478 (probably a button/touch press flag).
sub_202E47C
export/plan0/arm9_main/sub_202E47C_0202E47C.c
- docs/function_notes/hk_04.md:73 getter for a flag at *off_202E488+dword_202E48C.
sub_202E490
export/plan0/arm9_main/sub_202E490_0202E490.c
- docs/function_notes/hk_04.md:74 setter: stores its argument into *off_202E49C+dword_202E4A0 and returns it.
sub_202E4A4
export/plan0/arm9_main/sub_202E4A4_0202E4A4.c
- docs/function_notes/hk_04.md:75 getter for field +64 of object *off_202E4AC.
sub_202E4B0
export/plan0/arm9_main/sub_202E4B0_0202E4B0.c
- docs/function_notes/hk_04.md:76 per-frame update for a result/ranking list: resets a counter at dword_202E524, runs sub_202EEC0 and sub_202ED04, then dispatches on state 0..5 to sub_202E9F0, sub_202E9AC, sub_202E968, sub_202E84C, sub_202E72C, sub_202E6C4 (default sub_202EE88).
sub_202E530
export/plan0/arm9_main/sub_202E530_0202E530.c
- docs/function_notes/hk_04.md:77 creates a scrollable list/menu object (allocated into *off_202E674 via sub_2036BEC): stores item count a2 and buffers, sets geometry words at +44/+46 and +48..+52, builds up to 6 visible rows with sub_202F120, clears sub_202EE3C slots, sets state 15.
sub_202E680
export/plan0/arm9_main/sub_202E680_0202E680.c
- docs/function_notes/hk_04.md:78 thunk: tail-calls function pointer off_202E688(a1).
sub_202E68C
export/plan0/arm9_main/sub_202E68C_0202E68C.c
- docs/function_notes/hk_04.md:79 thunk: tail-calls function pointer off_202E69C(a1, 0, a2).
sub_202E6C4
export/plan0/arm9_main/sub_202E6C4_0202E6C4.c
- docs/function_notes/hk_04.md:80 list-scroll state step (state 5): decrements counter at +56 of *off_202E71C; at zero writes the final row via sub_202F120 and sets the done flags at +8 and +dword_202E724/728.
sub_202E72C
export/plan0/arm9_main/sub_202E72C_0202E72C.c
- docs/function_notes/hk_04.md:81 per-frame list animation (state 4): decrements counter at +56, recomputes 7 row values via sub_202EE20 and sub_20AE4C0, and when the counter hits zero rolls row fields (+14 += +6), advances the selected index via sub_2133068 and sub_202F120.
sub_202E84C
export/plan0/arm9_main/sub_202E84C_0202E84C.c
- docs/function_notes/hk_04.md:82 same as sub_202E72C but for state 3 (opposite direction): uses selected index from sub_202EE68, decrements +64 and calls sub_202F120 with the new index.
sub_202E968
export/plan0/arm9_main/sub_202E968_0202E968.c
- docs/function_notes/hk_04.md:83 list state 2 handler: increments counters +64 and +68 of *off_202E9A4, reselects the highlighted row via sub_202EDD0/sub_202EDFC and sub_202F120, then clears the state word.
sub_202E9AC
export/plan0/arm9_main/sub_202E9AC_0202E9AC.c
- docs/function_notes/hk_04.md:84 list state 1 handler: decrements counters +64 and +68 of *off_202E9E8, same row reselect via sub_202F120, then clears the state word.
sub_202E9F0
export/plan0/arm9_main/sub_202E9F0_0202E9F0.c
- docs/function_notes/hk_04.md:85 main list navigation/input step (640 bytes): reads controller slot via sub_20435BC, tests buttons with sub_202ECD4, moves selection and scroll (+16/+20/+28/+32/+64/+68/+84), plays sounds via sub_202EC7C/sub_202ECAC and sets highlight rows with sub_202ED50.
sub_202EC7C
export/plan0/arm9_main/sub_202EC7C_0202EC7C.c
- docs/function_notes/hk_04.md:86 thunk: calls off_202EC94 with the 92-byte controller record at off_202EC90 + 92*a1.
sub_202ECAC
export/plan0/arm9_main/sub_202ECAC_0202ECAC.c
- docs/function_notes/hk_04.md:87 thunk: calls off_202ECB8(a1, 0).
sub_202ECD4
export/plan0/arm9_main/sub_202ECD4_0202ECD4.c
- docs/function_notes/hk_04.md:88 thunk: calls off_202ECEC with the 92-byte controller record at off_202ECE8 + 92*a1 (button test).
sub_202ED04
export/plan0/arm9_main/sub_202ED04_0202ED04.c
- docs/function_notes/hk_04.md:89 per-frame timer step: decrements the counter at +dword_202ED4C of *off_202ED44 while its flag is set; at zero calls sub_202ED50(0) and clears the flag.
sub_202ED50
export/plan0/arm9_main/sub_202ED50_0202ED50.c
- docs/function_notes/hk_04.md:90 sets the top 4 attribute bits (value a1<<12) on a 4-column strip of 18 rows in a cell buffer (highlight/color), stores state 5 and calls sub_2016468(27, ...) to refresh that layer.
sub_202EDD0
export/plan0/arm9_main/sub_202EDD0_0202EDD0.c
- docs/function_notes/hk_04.md:91 returns the cell at the current list position: copies the word at +14 from the row for index sub_202EDFC into the cell at +44 of the object.
sub_202EDFC
export/plan0/arm9_main/sub_202EDFC_0202EDFC.c
- docs/function_notes/hk_04.md:92 returns a row index in 0..6 via sub_2133068 applied to (+60 + +68 + 1) with modulus 7 (probably a wrap-around selection index).
sub_202EE20
export/plan0/arm9_main/sub_202EE20_0202EE20.c
- docs/function_notes/hk_04.md:93 returns the difference of the +14 cell words of rows a2 and a1 (delta helper for list animation).
sub_202EE3C
export/plan0/arm9_main/sub_202EE3C_0202EE3C.c
- docs/function_notes/hk_04.md:94 sets attribute a2 on every cell in the group list off_202EE64 offset by result (group clear/set helper).
sub_202EE68
export/plan0/arm9_main/sub_202EE68_0202EE68.c
- docs/function_notes/hk_04.md:95 returns a rotating row index via sub_2133068 of (+60 + 6) with modulus 7.
sub_202EE88
export/plan0/arm9_main/sub_202EE88_0202EE88.c
- docs/function_notes/hk_04.md:96 default list frame step: if the cell at the current row is nonzero, writes a value from sub_2133068 of (count * (+64 - +68)) into the +6 word (score or time display, probably).
sub_202EEC0
export/plan0/arm9_main/sub_202EEC0_0202EEC0.c
- docs/function_notes/hk_04.md:97 controller-driven per-frame update: reads controller slot via sub_20435BC, calls sub_202F0A8, sub_202F080, sub_202F058 and sub_20291C4 to compute a selected index, stores it at +28/+32, updates hold/repeat counters at +80 and +84, returns the +84 value.
sub_202EFC8
export/plan0/arm9_main/sub_202EFC8_0202EFC8.c
- docs/function_notes/hk_04.md:98 calls off_202EFE4 with the controller record at off_202EFE0 + 92*a1 + 72 (controller slot query).
sub_202F020
export/plan0/arm9_main/sub_202F020_0202F020.c
- docs/function_notes/hk_04.md:99 returns the halfword at +4 of its argument (record field getter).
sub_202F028
export/plan0/arm9_main/sub_202F028_0202F028.c
- docs/function_notes/hk_04.md:100 returns true when the halfword at +4 is zero and the halfword at +16 is below 5 (idle/available check).
sub_202F058
export/plan0/arm9_main/sub_202F058_0202F058.c
- docs/function_notes/hk_04.md:101 calls off_202F074 with the controller record at off_202F070 + 92*a1 + 72 (controller slot query).
sub_202F080
export/plan0/arm9_main/sub_202F080_0202F080.c
- docs/function_notes/hk_04.md:102 calls off_202F09C with the controller record at off_202F098 + 92*a1 + 72 (controller slot query).
sub_202F0A8
export/plan0/arm9_main/sub_202F0A8_0202F0A8.c
- docs/function_notes/hk_04.md:103 calls off_202F0C4 with the controller record at off_202F0C0 + 92*a1 + 72 (controller slot query).
sub_202F0FC
export/plan0/arm9_main/sub_202F0FC_0202F0FC.c
- docs/function_notes/hk_04.md:104 returns true when the halfword at +12 is zero and the halfword at +4 is nonzero (record predicate).
sub_202F120
export/plan0/arm9_main/sub_202F120_0202F120.c
- docs/function_notes/hk_04.md:105 notify helper: calls the function pointer at +40 of *off_202F148 when the arg is -1 or within the list count (+52); otherwise returns its argument unchanged (probably a row-change callback).
sub_202F14C
export/plan0/arm9_main/sub_202F14C_0202F14C.c
- docs/function_notes/hk_04.md:106 address getter returning *off_202F158 + dword_202F15C.
sub_202F160
export/plan0/arm9_main/sub_202F160_0202F160.c
- docs/function_notes/hk_04.md:107 destructor/flush: if sub_202F19C() is zero calls sub_21258F0, then a vtable method at +12 of *off_202F190, then sub_20AE5F0 on its buffer.
sub_202F19C
export/plan0/arm9_main/sub_202F19C_0202F19C.c
- docs/function_notes/hk_04.md:108 thin wrapper: returns the result of indirect call off_202F1A4().
sub_202F1D0
export/plan0/arm9_main/sub_202F1D0_0202F1D0.c
- docs/function_notes/hk_04.md:109 returns the global dword_202F1D8 (constant getter).
sub_202F1DC
export/plan0/arm9_main/sub_202F1DC_0202F1DC.c
- docs/function_notes/NEEDS_REVIEW.md:232 probably screen teardown: calls vtable method at +8 of *off_202F204, then sub_202F19C (or sub_2125DA0(0) if zero), then sub_212ABD0.
- docs/function_notes/hk_04.md:110 probably screen teardown: calls vtable method at +8 of *off_202F204, then sub_202F19C (or sub_2125DA0(0) if zero), then sub_212ABD0.
sub_202F20C
export/plan0/arm9_main/sub_202F20C_0202F20C.c
- docs/function_notes/hk_04.md:111 per-frame screen update, same pattern as sub_202DF34: swaps buffers via sub_20AE6AC/sub_20AE630, calls a callback from the object vtable, then sub_212A920 and sub_2125928 (probably icon strip update).
sub_202F2B4
export/plan0/arm9_main/sub_202F2B4_0202F2B4.c
- docs/function_notes/hk_04.md:112 init of a results/menu screen (378 bytes): allocates buffer via sub_2036B74 into *off_202F434, sets up the screen object via sub_202F51C, sub_2038D88, sub_202F4E0, sub_202F4AC, sets input/palette via sub_2125DE0, switches on mode from sub_202F498 (0..3) calling sub_203B0F8, sub_203B1FC, sub_203B1C8 or sub_203B194, binds assets via sub_202F554, then draws with sub_20AE6D4 and a vtable call.
sub_202F454
export/plan0/arm9_main/sub_202F454_0202F454.c
- docs/function_notes/hk_04.md:113 masked bit setter: writes (word at off_202F470 & mask) | a1 (probably a BG/layer control word).
sub_202F478
export/plan0/arm9_main/sub_202F478_0202F478.c
- docs/function_notes/hk_04.md:114 masked bit setter on the display control register MEMORY[0x4000000] (REG_DISPCNT): (reg & mask) | a1.
sub_202F498
export/plan0/arm9_main/sub_202F498_0202F498.c
- docs/function_notes/hk_04.md:115 getter for field +116 of object *off_202F4A8 (mode/state getter).
sub_202F4AC
export/plan0/arm9_main/sub_202F4AC_0202F4AC.c
- docs/function_notes/hk_04.md:116 thin wrapper: calls sub_2038CD8(a1 + 112, a2..a7) (sprite/background configuration).
sub_202F4E0
export/plan0/arm9_main/sub_202F4E0_0202F4E0.c
- docs/function_notes/hk_04.md:117 thin wrapper: calls sub_2038D28(a1 + 40).
sub_202F51C
export/plan0/arm9_main/sub_202F51C_0202F51C.c
- docs/function_notes/hk_04.md:118 thunk: calls off_202F52C(a1, 0, a2).
sub_202F554
export/plan0/arm9_main/sub_202F554_0202F554.c
- docs/function_notes/hk_04.md:119 binds about 25 asset pointers from sub_204799C into sub_20B496C, sub_20B49F4, sub_20B48EC, sub_20B4A7C and sub_20B4810 setters (asset table setup for the results screen, same pattern as sub_202E274).
sub_202F744
export/plan0/arm9_main/sub_202F744_0202F744.c
- docs/function_notes/hk_05.md:3 teardown; frees the object at *off_202F760 (via sub_2036AB0 on its +164 field), clears the global pointer, returns the old pointer.
sub_202F764
export/plan0/arm9_main/sub_202F764_0202F764.c
- docs/function_notes/hk_05.md:4 per-frame state machine (1118 B) for a menu/results screen; state at +76, counters +140/+144; uses sub_20435BC, sub_2036C5C, BMG lookup sub_20B3F7C +.
sub_202FBC8
export/plan0/arm9_main/sub_202FBC8_0202FBC8.c
- docs/function_notes/hk_05.md:5 init for a 2D screen; allocates 168-byte state from the heap (sub_2036948/sub_2036BEC), loads BMG strings via sub_20B3F7C, builds objects (sub_20258D4.
sub_202FD2C
export/plan0/arm9_main/sub_202FD2C_0202FD2C.c
- docs/function_notes/hk_05.md:6 per-frame update of the results/ranking screen state machine (state at +80 of struct at off_2030028); uses sub_205579C, touch tests sub_204FF14, text draw.
sub_203003C
export/plan0/arm9_main/sub_203003C_0203003C.c
- docs/function_notes/hk_05.md:7 updates 4 slot highlight/visibility cell flags (stride 12/25 entries) in a cell table, selected by current slot at state+72 and arg; draws via sub_2124100.
sub_2030200
export/plan0/arm9_main/sub_2030200_02030200.c
- docs/function_notes/NEEDS_REVIEW.md:233 probably fills a row of 64-byte-stride cell entries with a 16-bit value from state+144, count from two sub-struct fields.
- docs/function_notes/hk_05.md:8 probably fills a row of 64-byte-stride cell entries with a 16-bit value from state+144, count from two sub-struct fields.
sub_203023C
export/plan0/arm9_main/sub_203023C_0203023C.c
- docs/function_notes/hk_05.md:9 predicate; returns 1 if current slot (state+72) is 4, or its entry at +88 is zero, or its value at +96 is below 7; else 0 (probably "can advance").
sub_2030274
export/plan0/arm9_main/sub_2030274_02030274.c
- docs/function_notes/hk_05.md:10 linear search of a 3-entry u16 table at off_203029C for value a1; returns 1 if found, else 0.
sub_20302A0
export/plan0/arm9_main/sub_20302A0_020302A0.c
- docs/function_notes/hk_05.md:11 display/BG setup helper; calls sub_20303A8(22), sub_203038C, sub_2030364(31,1), sub_203033C(7,1) and sub_20302F0 with a value from state+56.
sub_20302F0
export/plan0/arm9_main/sub_20302F0_020302F0.c
- docs/function_notes/hk_05.md:12 ARM register setter; writes two packed 16-bit values ((a1<<8)|a3 and (a2<<8)|a4) to hardware-style registers at off_2030334/off_2030338 (probably window/blend).
sub_203033C
export/plan0/arm9_main/sub_203033C_0203033C.c
- docs/function_notes/hk_05.md:13 ARM read-modify-write of a 16-bit control reg at off_2030360; low 6 bits = a1, bit 5 set when a2 != 0 (probably BG control field).
sub_2030364
export/plan0/arm9_main/sub_2030364_02030364.c
- docs/function_notes/hk_05.md:14 same as sub_203033C but on the register at off_2030388.
sub_203038C
export/plan0/arm9_main/sub_203038C_0203038C.c
- docs/function_notes/hk_05.md:15 ARM; sets bits 13-14 of the 32-bit reg at off_20303A4 to a1 (probably a display mode/BG field).
sub_20303A8
export/plan0/arm9_main/sub_20303A8_020303A8.c
- docs/function_notes/hk_05.md:16 ARM; sets bits 8-12 of the 32-bit reg at off_20303C0 to a1 (probably a display field).
sub_20303C4
export/plan0/arm9_main/sub_20303C4_020303C4.c
- docs/function_notes/hk_05.md:17 teardown; calls sub_204F7F4(a1), frees the object at state+60 (sub_2036AB0), clears global off_20303E4, returns old pointer.
sub_20303E8
export/plan0/arm9_main/sub_20303E8_020303E8.c
- docs/function_notes/hk_05.md:18 per-frame menu/choice state machine (576 B), state at +48, counters +52/+56; slide-in via sub_20AE4C0, slot checks sub_2030708/sub_20306E0/sub_20306B8, touch.
sub_203062C
export/plan0/arm9_main/sub_203062C_0203062C.c
- docs/function_notes/hk_05.md:19 thin wrapper; calls function pointer at off_2030638 with (a1, 0).
sub_203063C
export/plan0/arm9_main/sub_203063C_0203063C.c
- docs/function_notes/hk_05.md:20 thin wrapper; calls function pointer at off_203064C with (off_2030650, a2, a1).
sub_2030654
export/plan0/arm9_main/sub_2030654_02030654.c
- docs/function_notes/hk_05.md:21 calls sub_212D5E0 on off_2030680, then sub_203063C(a1,0), then sub_212D5E0 on off_2030684 (probably a UI sequence/animation step).
sub_2030688
export/plan0/arm9_main/sub_2030688_02030688.c
- docs/function_notes/hk_05.md:22 thin wrapper; calls function pointer off_20306A0 on slot a1 (base off_203069C + 92*a1), probably a slot predicate.
sub_20306B8
export/plan0/arm9_main/sub_20306B8_020306B8.c
- docs/function_notes/hk_05.md:23 thin wrapper; calls function pointer off_20306D4 on slot a1's +72 sub-struct (slot getter).
sub_20306E0
export/plan0/arm9_main/sub_20306E0_020306E0.c
- docs/function_notes/hk_05.md:24 thin wrapper; calls function pointer off_20306FC on slot a1's +72 sub-struct (slot getter).
sub_2030708
export/plan0/arm9_main/sub_2030708_02030708.c
- docs/function_notes/hk_05.md:25 thin wrapper; calls function pointer off_2030724 on slot a1's +72 sub-struct (probably touch/slot test).
sub_203075C
export/plan0/arm9_main/sub_203075C_0203075C.c
- docs/function_notes/hk_05.md:26 predicate; returns true if u16 at a1+12 is 0 and u16 at a1+4 is nonzero.
sub_2030780
export/plan0/arm9_main/sub_2030780_02030780.c
- docs/function_notes/hk_05.md:27 predicate; returns !sub_20307B0() && (u16 at a1+16) < 5.
sub_20307B0
export/plan0/arm9_main/sub_20307B0_020307B0.c
- docs/function_notes/hk_05.md:28 trivial getter; returns u16 at a1+4.
sub_20307B8
export/plan0/arm9_main/sub_20307B8_020307B8.c
- docs/function_notes/hk_05.md:29 init for a second 2D screen (318 B); allocs 64-byte state, loads BMG strings (sub_204799C/sub_20B3F7C), sets up sub_20B49BC/B48B4/B4A44, sub_21243AC text loop.
sub_203091C
export/plan0/arm9_main/sub_203091C_0203091C.c
- docs/function_notes/hk_05.md:30 thin wrapper; calls off_203092C(a1, 0, a2).
sub_2030954
export/plan0/arm9_main/sub_2030954_02030954.c
- docs/function_notes/hk_05.md:31 updates a pair of toggle cells (i=0,1) whose on/off state follows state+40 == i && arg, writes cell attr bits and draws via sub_2124100.
sub_20309D8
export/plan0/arm9_main/sub_20309D8_020309D8.c
- docs/function_notes/NEEDS_REVIEW.md:234 probably fills a run of cell entries (stride 64) with a value from *off_2030A0C+56; range from sub_2030A18(state+12) + sub_2030A10(state+20).
- docs/function_notes/hk_05.md:32 probably fills a run of cell entries (stride 64) with a value from *off_2030A0C+56; range from sub_2030A18(state+12) + sub_2030A10(state+20).
sub_2030A10
export/plan0/arm9_main/sub_2030A10_02030A10.c
- docs/function_notes/hk_05.md:33 trivial getter; returns u16 at a1+6.
sub_2030A18
export/plan0/arm9_main/sub_2030A18_02030A18.c
- docs/function_notes/hk_05.md:34 trivial getter; returns u16 at a1+6 (same as sub_2030A10).
sub_2030A20
export/plan0/arm9_main/sub_2030A20_02030A20.c
- docs/function_notes/NEEDS_REVIEW.md:235 probably updates BG/window control regs (off_2030AC0/off_2030ACC/off_2030AD8..AE4) from a value from sub_2025EBC(state+192) and state+132/+148.
- docs/function_notes/hk_05.md:35 probably updates BG/window control regs (off_2030AC0/off_2030ACC/off_2030AD8..AE4) from a value from sub_2025EBC(state+192) and state+132/+148.
sub_2030AE8
export/plan0/arm9_main/sub_2030AE8_02030AE8.c
- docs/function_notes/hk_05.md:36 teardown; calls sub_2125EE8 and sub_212B91C (clears palette pointer), frees the object at off_2030B10 + dword (sub_2036AB0), clears global, returns old pointer.
sub_2030B18
export/plan0/arm9_main/sub_2030B18_02030B18.c
- docs/function_notes/hk_05.md:37 per-frame update of a selection/menu screen (848 B; struct off_2030E68, state at +132/+140/+128/+116/+156); runs sub_20317A0, sub_2032000 (slot count), touch.
sub_2030EA4
export/plan0/arm9_main/sub_2030EA4_02030EA4.c
- docs/function_notes/hk_05.md:38 per-frame update of another menu screen (800 B; struct off_20311C4, state at +148 switch 0..6); runs sub_2031960, sub_2031B6C, sub_2031BA4, sub_212B80C, timer.
sub_2031208
export/plan0/arm9_main/sub_2031208_02031208.c
- docs/function_notes/hk_05.md:39 draws two rows of 28-byte-stride entries via sub_2124C30 (from struct off_203124C+36) when state+148 != 6.
sub_2031250
export/plan0/arm9_main/sub_2031250_02031250.c
- docs/function_notes/hk_05.md:40 predicate; returns (state at off_2031264 +192) == 3.
sub_2031268
export/plan0/arm9_main/sub_2031268_02031268.c
- docs/function_notes/hk_05.md:41 predicate; returns (state at off_203127C +192) == 1.
sub_2031280
export/plan0/arm9_main/sub_2031280_02031280.c
- docs/function_notes/hk_05.md:42 setup/update of a result/prompt screen (454 B); calls sub_203154C, touch sub_204FE90/sub_204FF14, BMG message lookup sub_20B3F7C with sub_2126248/sub_2126638.
sub_203147C
export/plan0/arm9_main/sub_203147C_0203147C.c
- docs/function_notes/hk_05.md:43 draws a text panel; calls sub_203154C, two sub_212426C text draws (second from BMG index 9 via sub_2126638), sub_21281C8(-1), then sub_2036820 teardown.
sub_203154C
export/plan0/arm9_main/sub_203154C_0203154C.c
- docs/function_notes/hk_05.md:44 init for a 2D screen (508 B); allocs state from heap (sub_2036948/sub_2036BEC), loads BMG and resource strings (sub_204799C, sub_2047A28), creates objects.
sub_20317A0
export/plan0/arm9_main/sub_20317A0_020317A0.c
- docs/function_notes/hk_05.md:45 per-frame state machine (418 B); state at off_2031944 +112 (cases 2,4,...); uses touch sub_202F14C, sub_2055730 (result 1/2), sub_204AA28 (sound), sub_2032028.
sub_2031960
export/plan0/arm9_main/sub_2031960_02031960.c
- docs/function_notes/hk_05.md:46 per-frame state machine (430 B); state at off_2031B10 +112 (cases 0..4); sub_205579C, BMG message sub_2126248, sub_2025F14, sub_204DB6C, sub_2058CAC.
sub_2031B30
export/plan0/arm9_main/sub_2031B30_02031B30.c
- docs/function_notes/hk_05.md:47 sets a flag in struct at (off_2031B64+88) + dword_2031B68 to a1 and redraws cell 8 via sub_2124100 with (a1 != 0).
sub_2031B6C
export/plan0/arm9_main/sub_2031B6C_02031B6C.c
- docs/function_notes/hk_05.md:48 loops 8 cells and sets each cell's attribute to (index == state+116), i.e. radio-style highlight of the current entry.
sub_2031BA4
export/plan0/arm9_main/sub_2031BA4_02031BA4.c
- docs/function_notes/hk_05.md:49 per-frame animation/blink update (670 B) on struct off_2031E44; advances frame counters and selects table entries (off_2031E54) to set cell attribute bits.
sub_2031E80
export/plan0/arm9_main/sub_2031E80_02031E80.c
- docs/function_notes/hk_05.md:50 refreshes 7 slot labels (i=1..7): reads a slot value via sub_214CFFC, draws text with sub_212426C if filled else clears via sub_21241C0; stores filled count at.
sub_2031F5C
export/plan0/arm9_main/sub_2031F5C_02031F5C.c
- docs/function_notes/hk_05.md:51 refreshes 7 slot labels using sub_204FCEC (slot occupied test); draws text via sub_212426C or clears via sub_21241C0; marks state flags.
sub_2032000
export/plan0/arm9_main/sub_2032000_02032000.c
- docs/function_notes/hk_05.md:52 counts slots i=1..7 where sub_204FCEC(i,0) is true; returns the count.
sub_2032028
export/plan0/arm9_main/sub_2032028_02032028.c
- docs/function_notes/hk_05.md:53 sets state (off_2032068) +112=8, +148=5, looks up BMG strings 11 and 4 (sub_20B3F7C), shows a message box via sub_2126230 and sub_21282C8.
sub_203206C
export/plan0/arm9_main/sub_203206C_0203206C.c
- docs/function_notes/hk_05.md:54 loads/creates text label cells via BMG string lookups (sub_204799C) and sub_20B496C/B49F4/B48EC/B4A7C/B4810 (probably text/cell setup for a menu, runs fully.
sub_2032138
export/plan0/arm9_main/sub_2032138_02032138.c
- docs/function_notes/NEEDS_REVIEW.md:236 probably sets BG attribute/window regs (off_20321F8..off_2032238) from state+84 (==10 selects alt values) and state+96 (bar value), like sub_2030A20.
- docs/function_notes/hk_05.md:55 probably sets BG attribute/window regs (off_20321F8..off_2032238) from state+84 (==10 selects alt values) and state+96 (bar value), like sub_2030A20.
sub_203223C
export/plan0/arm9_main/sub_203223C_0203223C.c
- docs/function_notes/hk_05.md:56 teardown; if state+104 == 1 calls sub_202B604 (and sub_20CEE5C if flag bit 4 set), frees object at +64 (sub_2036AB0), clears global, returns old pointer.
sub_2032280
export/plan0/arm9_main/sub_2032280_02032280.c
- docs/function_notes/hk_05.md:57 per-frame state machine (970 B) for a choice/menu screen; state at +84 (<=10), cases 3/4 with slide animation (sub_20AE4C0), touch sub_2128210/sub_201EA84, BMG.
sub_2032654
export/plan0/arm9_main/sub_2032654_02032654.c
- docs/function_notes/hk_05.md:58 init for a select/menu screen (542 B); allocs 108-byte state, sets fields at +84/+72/+76, creates objects (sub_20258D4, sub_2025B20, sub_2025A50) and builds.
sub_20328C8
export/plan0/arm9_main/sub_20328C8_020328C8.c
- docs/function_notes/hk_05.md:59 writes the argument value into the 64-stride cell entries of the list whose count is the u16 at (struct+40)+6; probably sets a per-cell attribute.
sub_20328F8
export/plan0/arm9_main/sub_20328F8_020328F8.c
- docs/function_notes/hk_05.md:60 for each entry in the list at state+76 (count state+72), sets cell flag to (index == state+68) && arg; radio-style select.
sub_2032940
export/plan0/arm9_main/sub_2032940_02032940.c
- docs/function_notes/hk_05.md:61 copies state+96 into cell entries (list at struct+20 count) and state+92 into another list's entries (struct+40) via 64-byte stride writes.
sub_20329A0
export/plan0/arm9_main/sub_20329A0_020329A0.c
- docs/function_notes/hk_05.md:62 writes state+92 into the +4 field of cell entries from the index table at state+76 (count state+72).
sub_20329DC
export/plan0/arm9_main/sub_20329DC_020329DC.c
- docs/function_notes/hk_05.md:63 writes the argument into the 64-stride cell entries of the list at off_2032A1C (count state+72, index field +2); probably sets a per-cell attribute.
sub_2032A20
export/plan0/arm9_main/sub_2032A20_02032A20.c
- docs/function_notes/hk_05.md:64 sets flags on sub-object sub_2029930() (+200/+228) from state+104/+68, sets state+100=1, state+84=5 and calls sub_212ECC0 (menu transition/sfx).
sub_2032AA8
export/plan0/arm9_main/sub_2032AA8_02032AA8.c
- docs/function_notes/hk_05.md:65 thunk; tail-calls the function pointer at off_2032AAC.
sub_2032AB0
export/plan0/arm9_main/sub_2032AB0_02032AB0.c
- docs/function_notes/hk_05.md:66 sets state (off_2032ABC)+4 = 1, then tail-calls the function pointer at off_2032AC0.
sub_2032AC4
export/plan0/arm9_main/sub_2032AC4_02032AC4.c
- docs/function_notes/hk_05.md:67 per-frame countdown/timer update (1220 B); decrements frame counters at dword_2032E34/dword_2032E38 and splits values with sub_2133068 (probably base-60 time.
sub_2032F94
export/plan0/arm9_main/sub_2032F94_02032F94.c
- docs/function_notes/hk_05.md:68 init for a large results/battle-victory screen (1828 B); allocates a state struct (sub_2036BEC, dword_2033350 bytes), stores args, loads resources such as.
sub_20336EC
export/plan0/arm9_main/sub_20336EC_020336EC.c
- docs/function_notes/NEEDS_REVIEW.md:237 probably refreshes a cell list (318 B): clears 56 cell entries (stride 64), sets flags for a range from state+212 count, writes position values 58/68 and 56/57.
- docs/function_notes/hk_05.md:69 probably refreshes a cell list (318 B): clears 56 cell entries (stride 64), sets flags for a range from state+212 count, writes position values 58/68 and 56/57.
sub_2033840
export/plan0/arm9_main/sub_2033840_02033840.c
- docs/function_notes/NEEDS_REVIEW.md:238 probably the same kind of list refresh as sub_20336EC (174 B), with 70 cells and position 70/80; calls sub_2033AB8 per entry.
- docs/function_notes/hk_05.md:70 probably the same kind of list refresh as sub_20336EC (174 B), with 70 cells and position 70/80; calls sub_2033AB8 per entry.
sub_20338F8
export/plan0/arm9_main/sub_20338F8_020338F8.c
- docs/function_notes/hk_05.md:71 draws text lines (266 B): sub_2025A00 loop over a list, BMG string 122 via sub_20B3F7C, then per-entry labels via sub_20ADFF0 and sub_212426C.
sub_2033A0C
export/plan0/arm9_main/sub_2033A0C_02033A0C.c
- docs/function_notes/NEEDS_REVIEW.md:239 probably draws one entry label (164 B): sub_2025A00 loop, sub_20ADFF0 format, sub_212426C text draw, then sub_2033AB8.
- docs/function_notes/hk_05.md:72 probably draws one entry label (164 B): sub_2025A00 loop, sub_20ADFF0 format, sub_212426C text draw, then sub_2033AB8.
sub_2033AB8
export/plan0/arm9_main/sub_2033AB8_02033AB8.c
- docs/function_notes/hk_05.md:73 draws an icon/sprite via sub_212463C using table off_2033B74 (48-byte stride); for type 12 also computes position with sub_2124A68 and draws via sub_2016468.
sub_2033B80
export/plan0/arm9_main/sub_2033B80_02033B80.c
- docs/function_notes/hk_05.md:74 draws a decimal number (up to 3 digits, via sub_2133068 base-10 splits) with sub_2124224 at a cell and sets its visibility via sub_2025C48; otherwise clears.
sub_2033C80
export/plan0/arm9_main/sub_2033C80_02033C80.c
- docs/function_notes/NEEDS_REVIEW.md:240 probably updates per-entry highlight/visibility flags (cell tables at +124 and +24) from state+88 and whether the selection index equals state+208.
- docs/function_notes/hk_05.md:75 probably updates per-entry highlight/visibility flags (cell tables at +124 and +24) from state+88 and whether the selection index equals state+208.
sub_2033D9C
export/plan0/arm9_main/sub_2033D9C_02033D9C.c
- docs/function_notes/NEEDS_REVIEW.md:241 probably shows a two-option prompt; looks up BMG strings 93 and 95 (sub_20B3F7C) and calls sub_21277F8 with flag 0.
- docs/function_notes/hk_05.md:76 probably shows a two-option prompt; looks up BMG strings 93 and 95 (sub_20B3F7C) and calls sub_21277F8 with flag 0.
sub_2033DD0
export/plan0/arm9_main/sub_2033DD0_02033DD0.c
- docs/function_notes/hk_05.md:77 predicate; returns counter at dword_2033DF4 < dword_2033DF8 when state field dword_2033DF0 is nonzero, else 0 (probably a timer limit check).
sub_2033DFC
export/plan0/arm9_main/sub_2033DFC_02033DFC.c
- docs/function_notes/hk_05.md:78 predicate; returns (state field at off_2033E18 + dword_2033E20) == 0 when flag dword_2033E1C is set, else 0.
sub_2033E24
export/plan0/arm9_main/sub_2033E24_02033E24.c
- docs/function_notes/hk_05.md:79 predicate; returns 1 when every entry (count state+216, stride 12 from off_2033E68) has +228 == 0, else 0 (probably "no slot in use").
sub_2033E6C
export/plan0/arm9_main/sub_2033E6C_02033E6C.c
- docs/function_notes/hk_05.md:80 fills per-entry values at state+232 from an 80-byte-row table (off_203401C) indexed by sub_205DB28/sub_205DC7C (probably a ranking/stat lookup), then a second.
sub_2034024
export/plan0/arm9_main/sub_2034024_02034024.c
- docs/function_notes/NEEDS_REVIEW.md:242 probably ranks/sorts results (348 B): copies state+232 values into local arrays and builds index lists of active entries (flag at +116).
- docs/function_notes/hk_05.md:81 probably ranks/sorts results (348 B): copies state+232 values into local arrays and builds index lists of active entries (flag at +116).
sub_2034188
export/plan0/arm9_main/sub_2034188_02034188.c
- docs/function_notes/NEEDS_REVIEW.md:243 probably assigns rank positions (178 B): non-flagged entries get sequential ranks in +236 from 0, flagged ones ranked after them with minimum 4.
- docs/function_notes/hk_05.md:82 probably assigns rank positions (178 B): non-flagged entries get sequential ranks in +236 from 0, flagged ones ranked after them with minimum 4.
sub_2034244
export/plan0/arm9_main/sub_2034244_02034244.c
- docs/function_notes/NEEDS_REVIEW.md:244 probably updates ARM9 window/BG control regs (off_2034310..off_2034348) from sub_2025EBC(state+dword_2034308), same pattern as sub_2030A20 (192 B).
- docs/function_notes/hk_05.md:83 probably updates ARM9 window/BG control regs (off_2034310..off_2034348) from sub_2025EBC(state+dword_2034308), same pattern as sub_2030A20 (192 B).
sub_203434C
export/plan0/arm9_main/sub_203434C_0203434C.c
- docs/function_notes/hk_05.md:84 teardown; frees object at (off_2034368 + dword_203436C) via sub_2036AB0, clears global, returns old pointer.
sub_2034370
export/plan0/arm9_main/sub_2034370_02034370.c
- docs/function_notes/hk_05.md:85 large per-frame UI handler (2164 B) for a results/menu screen with message and touch handling; calls sub_201EA84 and sub_20435BC (not fully analyzed, probably).
sub_2034BF4
export/plan0/arm9_main/sub_2034BF4_02034BF4.c
- docs/function_notes/hk_05.md:86 init for a time-attack/ghost record screen (530 B); allocs state from heap (sub_2036BEC, dword_2034E08 bytes), loads resources via sub_2047A28/sub_204799C.
sub_2034E68
export/plan0/arm9_main/sub_2034E68_02034E68.c
- docs/function_notes/hk_05.md:87 equality check for two 11-entry u16 records plus fields (+24/+28/+32, bytes +38/+39, u16 +36); returns nonzero if they differ (probably dirty/changed test).
sub_2034EF0
export/plan0/arm9_main/sub_2034EF0_02034EF0.c
- docs/function_notes/hk_05.md:88 updates 4 selection cell pairs (i and i+4) to palette 14 (selected) or 15 via sub_2124100, then draws the cursor with sub_2025C6C at index state+128 (probably.
sub_2034F60
export/plan0/arm9_main/sub_2034F60_02034F60.c
- docs/function_notes/hk_05.md:89 sets visibility flags of list cells to (state+128 >= 0) and, if an index is selected, calls sub_202DE00 to update that sub-widget (130 B, probably).
sub_2034FEC
export/plan0/arm9_main/sub_2034FEC_02034FEC.c
- docs/function_notes/hk_05.md:90 writes per-cell offset values into two cell lists (negated and positive sub_2025EBC(state+dword_203505C)), probably a slide/scroll offset for two rows (106 B).
sub_2035060
export/plan0/arm9_main/sub_2035060_02035060.c
- docs/function_notes/hk_05.md:91 writes per-cell position values for 4 slots (sub_2025EDC/sub_2025EBC over state+200+) into cell entries using the offset table off_203510C (probably row.
sub_2035114
export/plan0/arm9_main/sub_2035114_02035114.c
- docs/function_notes/NEEDS_REVIEW.md:245 probably cursor/selection logic (162 B): if state+128 is valid, marks the matching entry; otherwise searches the 4 slots (stride 60, flag at +196) for the.
- docs/function_notes/hk_05.md:92 probably cursor/selection logic (162 B): if state+128 is valid, marks the matching entry; otherwise searches the 4 slots (stride 60, flag at +196) for the.
sub_20351C8
export/plan0/arm9_main/sub_20351C8_020351C8.c
- docs/function_notes/hk_05.md:93 shows a three-string message box: BMG lookups (sub_20B3F7C) of strings 8, 0 and 1 from the struct, then sub_2125ED0 and sub_2125FD4 (probably a dialog).
sub_2035228
export/plan0/arm9_main/sub_2035228_02035228.c
- docs/function_notes/hk_05.md:94 sets the selection highlight of a cell pair (base state+128) to palette 14 if a1 else 15 via sub_2124100 and records a1 at state+96 (probably toggle).
sub_2035280
export/plan0/arm9_main/sub_2035280_02035280.c
- docs/function_notes/hk_05.md:95 moves the selection forward to the next slot with flag +196 == 1 and +200 == 1 (wraps when a1 set), playing sfx sub_212ECC0 on change (probably cursor move.
sub_20352FC
export/plan0/arm9_main/sub_20352FC_020352FC.c
- docs/function_notes/hk_05.md:96 same as sub_2035280 but moves the selection backward (cursor move up), using sub_212ECC0 for feedback.
sub_2035378
export/plan0/arm9_main/sub_2035378_02035378.c
- docs/function_notes/hk_05.md:97 shows BMG string 1 (from struct+136) through sub_212658C (one-line message).
sub_20353A4
export/plan0/arm9_main/sub_20353A4_020353A4.c
- docs/function_notes/hk_05.md:98 message setup; loads BMG strings 17 and 4, calls sub_2125ED0 and sub_2126230 to show them, sets state+144=0 and state+148=15.
sub_20353F8
export/plan0/arm9_main/sub_20353F8_020353F8.c
- docs/function_notes/hk_05.md:99 updates a pair of ARM9 window/BG regs (off_20354C0..off_20354F8) from sub_2025EBC(state+144), same pattern as sub_2034244 (probably slider/bar position, 190 B).
sub_20354FC
export/plan0/arm9_main/sub_20354FC_020354FC.c
- docs/function_notes/hk_05.md:100 teardown; frees object at +164 (sub_2036AB0), clears global off_2035518, returns old pointer.
sub_203551C
export/plan0/arm9_main/sub_203551C_0203551C.c
- docs/function_notes/hk_05.md:101 per-frame state machine (650 B) for a menu/selection screen; state at +140 (cases 0..4); touch sub_2128210 over 92-byte-stride slot table, sub_2025EDC, message.
sub_20357DC
export/plan0/arm9_main/sub_20357DC_020357DC.c
- docs/function_notes/hk_05.md:102 init for a record/ghost list screen (614 B); allocs 168-byte state from heap (sub_2036948/sub_2036BEC), builds cell lists and text (probably.
sub_2035A9C
export/plan0/arm9_main/sub_2035A9C_02035A9C.c
- docs/function_notes/hk_05.md:103 draws one list row (104 B): record index from state+128 + sub_202DDB0, loads a record via sub_202DCF4/sub_202DC68, reads fields with.
sub_2035B0C
export/plan0/arm9_main/sub_2035B0C_02035B0C.c
- docs/function_notes/hk_05.md:104 sets per-cell y offsets for two cell lists (negated and positive sub_2025EBC(state+144)), probably a scroll offset (104 B, same as sub_2034FEC).
sub_2035B78
export/plan0/arm9_main/sub_2035B78_02035B78.c
- docs/function_notes/hk_05.md:105 draws a header/ info line (146 B): BMG strings 18, 0, 1; loads a record via sub_202DC68, formats text with sub_212513C, draws with sub_2125FD4.
sub_2035C14
export/plan0/arm9_main/sub_2035C14_02035C14.c
- docs/function_notes/hk_05.md:106 shows BMG string 3 with sub_2125EE8(-12, 0) and sub_2126638 (short message box, 56 B).
sub_2035C50
export/plan0/arm9_main/sub_2035C50_02035C50.c
- docs/function_notes/hk_05.md:107 draws a record row (194 B): result==1 draws a BMG-named label (sub_2025D74 index), a formatted number (sub_2025CD0 + sub_2124224); result==0 refreshes seven.
sub_2035D18
export/plan0/arm9_main/sub_2035D18_02035D18.c
- docs/function_notes/hk_05.md:108 thunk; tail-calls the function pointer at off_2035D1C.
sub_2035D48
export/plan0/arm9_main/sub_2035D48_02035D48.c
- docs/function_notes/hk_05.md:109 ARM register setter; combines a1 (masked by dword_2035D68) with (a2<<16) and writes the 32-bit reg at off_2035D70 (probably BG offset/affine field).
sub_2035D74
export/plan0/arm9_main/sub_2035D74_02035D74.c
- docs/function_notes/hk_05.md:110 ARM register setter; sets bits 8-12 of the 32-bit reg at off_2035D8C to a1 (same as sub_20303A8).
sub_2035D90
export/plan0/arm9_main/sub_2035D90_02035D90.c
- docs/function_notes/hk_05.md:111 teardown; frees object at (off_2035DAC + dword_2035DB0) via sub_2036AB0, clears global, returns old pointer.
sub_2035DB4
export/plan0/arm9_main/sub_2035DB4_02035DB4.c
- docs/function_notes/hk_05.md:112 small per-frame state machine (106 B) on struct off_2035E20 (state at +dword_2035E24: 9 -> 10 -> 11); checks sub_20591BC, may call sub_2035E44/sub_2035E38 and.
sub_2035E30
export/plan0/arm9_main/sub_2035E30_02035E30.c
- docs/function_notes/hk_05.md:113 setter; stores a2 as a 16-bit field at +4 of the struct at result; returns result.
sub_2035E38
export/plan0/arm9_main/sub_2035E38_02035E38.c
- docs/function_notes/hk_05.md:114 thunk; tail-calls the function pointer at off_2035E40.
sub_2035E44
export/plan0/arm9_main/sub_2035E44_02035E44.c
- docs/function_notes/hk_05.md:115 predicate; returns (byte at +1111 of struct off_2035E60) != 0.
sub_2035E64
export/plan0/arm9_main/sub_2035E64_02035E64.c
- docs/function_notes/hk_05.md:116 same state-machine pattern as sub_2035DB4 (106 B) on struct off_2035ED0, using sub_2058F20 for the ready check and sub_2035E30(a1, 10).
sub_2035EE0
export/plan0/arm9_main/sub_2035EE0_02035EE0.c
- docs/function_notes/hk_05.md:117 same state-machine pattern as sub_2035DB4 (106 B) on struct off_2035F4C, using loc_20591C4 for the ready check and sub_2035E30(a1, 2).
sub_2035F5C
export/plan0/arm9_main/sub_2035F5C_02035F5C.c
- docs/function_notes/hk_05.md:118 state machine (216 B) for a save/record flow; state at off_2036034+dword_2036038 (cases 0,2,4,6); uses sub_205579C, sub_2055730, sub_20360E4, sub_204AA28.
sub_2036044
export/plan0/arm9_main/sub_2036044_02036044.c
- docs/function_notes/hk_05.md:119 setter; stores a1 into the word at +8 of the struct at off_2036054 and returns it.
sub_2036058
export/plan0/arm9_main/sub_2036058_02036058.c
- docs/function_notes/hk_06.md:3 trivial setter; stores its argument into the dword at (*off_2036068)+4 and returns it.
sub_203606C
export/plan0/arm9_main/sub_203606C_0203606C.c
- docs/function_notes/hk_06.md:4 returns 1 if the byte at (*off_203609C)+40 is nonzero, else calls sub_20360A0 with that byte.
sub_20360A0
export/plan0/arm9_main/sub_20360A0_020360A0.c
- docs/function_notes/hk_06.md:5 if sub_20360D0() is nonzero returns the dword at (*off_20360CC)+16, otherwise 0.
sub_20360D0
export/plan0/arm9_main/sub_20360D0_020360D0.c
- docs/function_notes/hk_06.md:6 getter; returns the dword at +12 of the object pointed to by off_20360E0.
sub_20360E4
export/plan0/arm9_main/sub_20360E4_020360E4.c
- docs/function_notes/hk_06.md:7 flag test; returns bit 0x40 of the halfword at +1108 of the object pointed to by off_2036104.
sub_2036108
export/plan0/arm9_main/sub_2036108_02036108.c
- docs/function_notes/hk_06.md:8 thumb init; calls sub_2036438, fills two tile-entry rows in object off_2036238, uses sub_200EE58/sub_214BB64/sub_214BD04, then sub_2036820.
sub_2036258
export/plan0/arm9_main/sub_2036258_02036258.c
- docs/function_notes/hk_06.md:9 thunk; tail-calls the function pointer stored at off_2036260.
sub_2036264
export/plan0/arm9_main/sub_2036264_02036264.c
- docs/function_notes/hk_06.md:10 thunk; calls the function pointer at off_2036274 with (a1, 0, a2).
sub_203629C
export/plan0/arm9_main/sub_203629C_0203629C.c
- docs/function_notes/hk_06.md:11 thin wrapper; forwards six arguments to sub_2024340.
sub_20362C4
export/plan0/arm9_main/sub_20362C4_020362C4.c
- docs/function_notes/hk_06.md:12 struct initializer; stores four words (a2..a5) into result[0..3] and returns result.
sub_20362DC
export/plan0/arm9_main/sub_20362DC_020362DC.c
- docs/function_notes/hk_06.md:13 init variant for object off_203641C: dword fields via sub_20D1630/sub_2149FE0/sub_20B3F7C, fills tile rows, sub_214BB64/sub_214BD04, then sub_2036820.
sub_2036438
export/plan0/arm9_main/sub_2036438_02036438.c
- docs/function_notes/hk_06.md:14 setup helper; calls sub_2036948 and sub_2036BEC, stores into off_20364A0 object, calls sub_20364A8, sub_214B9C4, sub_214B824 and returns sub_214C0F8(...).
sub_20364A8
export/plan0/arm9_main/sub_20364A8_020364A8.c
- docs/function_notes/hk_06.md:15 builds a 16-bit control word from shifted args (14/7/8/2/13), merges with mask 0x43, writes halfword at off_20364DC (probably BG/OAM control reg).
sub_20364E0
export/plan0/arm9_main/sub_20364E0_020364E0.c
- docs/function_notes/hk_06.md:16 getter; returns the dword at +12 of its argument.
sub_20364E8
export/plan0/arm9_main/sub_20364E8_020364E8.c
- docs/function_notes/hk_06.md:17 getter; returns the dword pointed to by off_20364F4.
sub_20364F8
export/plan0/arm9_main/sub_20364F8_020364F8.c
- docs/function_notes/hk_06.md:18 push/pop callback runner; links a1 into list head off_2036584, calls a1+4 callback with a2, optional a1+8 callback, restores head, calls sub_2036AB0.
sub_2036588
export/plan0/arm9_main/sub_2036588_02036588.c
- docs/function_notes/hk_06.md:19 setter; sets result+4 = a2.
sub_2036590
export/plan0/arm9_main/sub_2036590_02036590.c
- docs/function_notes/hk_06.md:20 initializer for a 5-word struct: word0=0, word1=a2, words 2..4 = 0.
sub_20365AC
export/plan0/arm9_main/sub_20365AC_020365AC.c
- docs/function_notes/hk_06.md:21 trivial; returns the fourth word of the table off_20365B8 (off_20365B8[3]).
sub_20365BC
export/plan0/arm9_main/sub_20365BC_020365BC.c
- docs/function_notes/hk_06.md:22 stores a1 into object off_20365E8 via sub_2036588, then runs sub_20364F8 on that object with dword_20365EC.
sub_20365F0
export/plan0/arm9_main/sub_20365F0_020365F0.c
- docs/function_notes/hk_06.md:23 subsystem setup; calls sub_20366BC and sub_203907C, sets +4/+8/+0xC/+0x10 of off_203666C[0] via sub_200F168/sub_200F17C/sub_2036C4C, then sub_20394CC.
sub_2036678
export/plan0/arm9_main/sub_2036678_02036678.c
- docs/function_notes/hk_06.md:24 calls sub_200F168/sub_200F17C for indices 0, 3 and 4 (probably bound/range queries in pairs); returns the last result.
sub_20366BC
export/plan0/arm9_main/sub_20366BC_020366BC.c
- docs/function_notes/hk_06.md:25 major subsystem init; calls sub_200EF10, sub_200EEC0, sub_200F6F4, sub_2039C7C, sub_2039BD4, sub_200CC74/CAE4, sub_200FC8C, sub_2152B08, then sub_2039A1C.
sub_2036778
export/plan0/arm9_main/sub_2036778_02036778.c
- docs/function_notes/hk_06.md:26 short init; sub_200CC74(1, off_20367BC), sub_200CAE4(1), sets halfword off_20367C0=1, sub_200FC8C, returns sub_2148A58(1).
sub_20367C4
export/plan0/arm9_main/sub_20367C4_020367C4.c
- docs/function_notes/hk_06.md:27 if *off_2036818[0] is set calls sub_2037A04 and the callback at +184 of that object; sets bit 0 of off_203681C[4094] and returns off_203681C+3072.
sub_2036820
export/plan0/arm9_main/sub_2036820_02036820.c
- docs/function_notes/hk_06.md:28 calls sub_2017F24(a1) and sub_2017550(a1), then tail-returns sub_20177B0(v3, a1, v2) (probably list/queue wrapper).
sub_2036854
export/plan0/arm9_main/sub_2036854_02036854.c
- docs/function_notes/hk_06.md:29 dispatches on type tag *a1 (dword_20368D8/dword_20368DC); calls sub_2017938 or sub_201808C (IRQ-guarded by sub_200FCA0/sub_200FCB4), then sub_20180E0.
sub_20368E0
export/plan0/arm9_main/sub_20368E0_020368E0.c
- docs/function_notes/hk_06.md:30 same type-tag dispatch as sub_2036854 with dword_2036940/dword_2036944 and offset +4, then sub_20180E0.
sub_2036948
export/plan0/arm9_main/sub_2036948_02036948.c
- docs/function_notes/hk_06.md:31 type-tag dispatch (dword_20369F4/dword_20369F8); first stage sub_20176C0 or sub_201800C, second stage sub_2017938 or sub_201808C, then sub_20180E0.
sub_20369FC
export/plan0/arm9_main/sub_20369FC_020369FC.c
- docs/function_notes/hk_06.md:32 like sub_2036948 with tags dword_2036AA8/dword_2036AAC, but ends with sub_2017988 instead of sub_20180E0.
sub_2036AB0
export/plan0/arm9_main/sub_2036AB0_02036AB0.c
- docs/function_notes/hk_06.md:33 list removal/dispatch; *a1 == dword_2036B28 calls sub_201797C, dword_2036B2C calls sub_20180D4; returns sub_2017770 result on linked node or dword_2036B2C.
sub_2036B30
export/plan0/arm9_main/sub_2036B30_02036B30.c
- docs/function_notes/hk_06.md:34 if *a1 == dword_2036B6C returns sub_2017770(a1, a2), otherwise returns dword_2036B70.
sub_2036B74
export/plan0/arm9_main/sub_2036B74_02036B74.c
- docs/function_notes/hk_06.md:35 type-tag dispatch (dword_2036BE4 -> sub_2017938; dword_2036BE8 -> sub_201808C wrapped in sub_200FCA0/sub_200FCB4); returns 0 for other tags.
sub_2036BEC
export/plan0/arm9_main/sub_2036BEC_02036BEC.c
- docs/function_notes/hk_06.md:36 type-tag dispatch on dword_2036C44 (sub_2017938) and dword_2036C48 (sub_201808C), both with offset 4; returns 0 otherwise.
sub_2036C4C
export/plan0/arm9_main/sub_2036C4C_02036C4C.c
- docs/function_notes/hk_06.md:37 thunk; tail-calls the function pointer at off_2036C58 with (a1, a2).
sub_2036C5C
export/plan0/arm9_main/sub_2036C5C_02036C5C.c
- docs/function_notes/hk_06.md:38 returns true when the status halfword at *off_2036C88[0] and the word at off_2036C8C both equal 2.
sub_2036C90
export/plan0/arm9_main/sub_2036C90_02036C90.c
- docs/function_notes/hk_06.md:39 resets two 5-halfword records (off_2036CF8[0], off_2036CFC) to type 2 with zeroed fields, then sub_2148908 on dword_2036D00/dword_2036D04 with old values.
sub_2036D08
export/plan0/arm9_main/sub_2036D08_02036D08.c
- docs/function_notes/hk_06.md:40 returns true when both off_2036D34[0] and off_2036D38 are zero (both slots empty).
sub_2036D3C
export/plan0/arm9_main/sub_2036D3C_02036D3C.c
- docs/function_notes/hk_06.md:41 for records off_2036E18[0] and off_2036E1C not already type 3/flag 1: sets flag 1, type 3, value = result*field[4]/16 (type 1) or 0, result at +6.
sub_2036E20
export/plan0/arm9_main/sub_2036E20_02036E20.c
- docs/function_notes/hk_06.md:42 same record update as sub_2036D3C but for one record, chosen by a2 (off_2036F08 if nonzero, else off_2036F0C); returns result.
sub_2036F10
export/plan0/arm9_main/sub_2036F10_02036F10.c
- docs/function_notes/hk_06.md:43 like sub_2036D3C for records off_2036FE4 and off_2036FE8, but clears the flag (probably the release/stop variant of the same update).
sub_2036FEC
export/plan0/arm9_main/sub_2036FEC_02036FEC.c
- docs/function_notes/hk_06.md:44 like sub_2036E20 (record chosen by a2 from off_20370CC / off_20370D0) with the flag cleared.
sub_20370D4
(not in export)
- docs/function_notes/hk_06.md:45 for records off_20371A0[0] and off_20371A4, unless type is 1 or 2, clears flag, sets scaled value, type 1 and result at +6; returns result.
sub_20371A8
export/plan0/arm9_main/sub_20371A8_020371A8.c
- docs/function_notes/hk_06.md:46 like sub_20370D4 with the record chosen by a2 (off_2037280[0] or off_2037284).
sub_2037288
export/plan0/arm9_main/sub_2037288_02037288.c
- docs/function_notes/hk_06.md:47 like sub_20370D4 for records off_203732C[0] and off_2037330 (no flag write); returns result.
sub_2037334
export/plan0/arm9_main/sub_2037334_02037334.c
- docs/function_notes/hk_06.md:48 like sub_20371A8 with records off_20373E4[0] / off_20373E8 selected by a2.
sub_20373EC
export/plan0/arm9_main/sub_20373EC_020373EC.c
- docs/function_notes/hk_06.md:49 reads counter via sub_200F5AC(a1), calls callback off_203748C with 3, stores scaled deltas (64000*(now-field)) via sub_2132E40 into off_2037490 +208/+212.
sub_2037498
export/plan0/arm9_main/sub_2037498_02037498.c
- docs/function_notes/hk_06.md:50 display/sprite object update for off_2037644: toggles +216 flags, sub_20390F0 on sub-objects, sub_200C894 wait loop, updates +196/+200/+204, callbacks 1/2.
sub_2037658
export/plan0/arm9_main/sub_2037658_02037658.c
- docs/function_notes/hk_06.md:51 same family as sub_2037498 for object off_203783C (sub-objects off_2037834/off_2037838, callback off_2037830) with an a1-dependent gate on the wait loop.
sub_2037850
export/plan0/arm9_main/sub_2037850_02037850.c
- docs/function_notes/hk_06.md:52 same routine family as sub_2037498 without the argument gate, for object off_20379F0 (sub-objects off_20379E8/off_20379EC, callback off_20379E4).
sub_2037A04
export/plan0/arm9_main/sub_2037A04_02037A04.c
- docs/function_notes/hk_06.md:53 clears bit 0 of the byte at +216 of *off_2037A1C and returns the new value.
sub_2037A20
export/plan0/arm9_main/sub_2037A20_02037A20.c
- docs/function_notes/hk_06.md:54 returns true when bit 1 (0x2) of the byte at +216 of *off_2037A3C is set.
sub_2037A40
export/plan0/arm9_main/sub_2037A40_02037A40.c
- docs/function_notes/hk_06.md:55 stores sub_200F5AC(off_2037A8C) into +188/+192 of the object, calls sub_214A9D0 if +10 == 1, then runs callback off_2037A90 with 0 if set.
sub_2037A94
export/plan0/arm9_main/sub_2037A94_02037A94.c
- docs/function_notes/hk_06.md:56 calls sub_2039B24, zeroes the word at *off_2037AB8 and returns that pointer.
sub_2037ABC
export/plan0/arm9_main/sub_2037ABC_02037ABC.c
- docs/function_notes/hk_06.md:57 large display-state flush (1528 B): clears VRAM/palette via sub_214D05C, per-flag hooks at +14..+38, writes DISPCNT (0x4000000) and BG control via sub_214A700.
sub_203810C
export/plan0/arm9_main/sub_203810C_0203810C.c
- docs/function_notes/hk_06.md:58 BG layer register writer (switch on *result type 1..5); packs control fields (shifts 14/7/8/13, mask 0x43, bits 0x40/0x80/0x84); probably BGCNT main or sub.
sub_20386D0
export/plan0/arm9_main/sub_20386D0_020386D0.c
- docs/function_notes/hk_06.md:59 near-duplicate of sub_203810C for the other display bank (off_2038C80/off_2038C88, dword_2038C8C/dword_2038C90 pointers); same type 1..5 register packing.
sub_2038C94
export/plan0/arm9_main/sub_2038C94_02038C94.c
- docs/function_notes/hk_06.md:60 setter; stores halfword a2 at result+178.
sub_2038C9C
export/plan0/arm9_main/sub_2038C9C_02038C9C.c
- docs/function_notes/hk_06.md:61 sets bytes +2 and +3 of the struct at *(a1+108) to a2 and a3.
sub_2038CB0
export/plan0/arm9_main/sub_2038CB0_02038CB0.c
- docs/function_notes/hk_06.md:62 initializer; sets word +32 = 5 and halfwords +36..+44 from a2..a6.
sub_2038CD8
export/plan0/arm9_main/sub_2038CD8_02038CD8.c
- docs/function_notes/hk_06.md:63 initializer; stores six halfword args (a2..a7) into result[26..31].
sub_2038D00
export/plan0/arm9_main/sub_2038D00_02038D00.c
- docs/function_notes/hk_06.md:64 initializer; stores six halfword args (a2..a7) into result[18..23].
sub_2038D28
export/plan0/arm9_main/sub_2038D28_02038D28.c
- docs/function_notes/hk_06.md:65 setter; stores seven halfword args (a2..a8) into result[8..14].
sub_2038D58
export/plan0/arm9_main/sub_2038D58_02038D58.c
- docs/function_notes/hk_06.md:66 setter; stores seven halfword args (a2..a8) into result[0..6].
sub_2038D88
export/plan0/arm9_main/sub_2038D88_02038D88.c
- docs/function_notes/hk_06.md:67 object init; gets sub-object via sub_2036BEC(a1,220), runs sub_2038DE4 on it, and if its +10 is 1 allocates an 8-byte record stored at +108.
sub_2038DE4
export/plan0/arm9_main/sub_2038DE4_02038DE4.c
- docs/function_notes/hk_06.md:68 copies 40 bytes from a2 into a1, calls sub_2038E6C for a1+40 and a1+112, then zeroes the fields at +108..+212 and the flag byte at +216.
sub_2038E6C
export/plan0/arm9_main/sub_2038E6C_02038E6C.c
- docs/function_notes/hk_06.md:69 resets a 68-byte mode record and fills type/field values from a2 via two switches (cases 0..5 mapped to types 1..3); probably a sprite/OAM-style channel config.
sub_2039044
export/plan0/arm9_main/sub_2039044_02039044.c
- docs/function_notes/hk_06.md:70 calls sub_200C894(1, 1) and sub_21489C4, then sets bit 0x10000 in the word at *off_2039078 (probably an enable flag) and returns it.
sub_203907C
export/plan0/arm9_main/sub_203907C_0203907C.c
- docs/function_notes/hk_06.md:71 resets two 5-halfword records (off_20390E0[0] and off_20390E4) to type 0/1 with step 16, then calls sub_2148908 on dword_20390E8 and dword_20390EC.
sub_20390F0
export/plan0/arm9_main/sub_20390F0_020390F0.c
- docs/function_notes/hk_06.md:72 per-frame stepper for a fade/ramp record; types 1 and 3 advance counter +2 and recompute the value via sub_2133068 (type 1 counts down), type 2 holds at 0.
sub_20391D4
export/plan0/arm9_main/sub_20391D4_020391D4.c
- docs/function_notes/hk_06.md:73 initializer; sets 20 halfwords of result to defaults (halfword 0 = 1, halfword 3 = 1, rest 0).
sub_2039230
export/plan0/arm9_main/sub_2039230_02039230.c
- docs/function_notes/hk_06.md:74 bit-packed input reader from buffer off_20392C4 (one byte per bit when length is 1, else halfword); returns value and advances via sub_2039378.
sub_20392C8
export/plan0/arm9_main/sub_20392C8_020392C8.c
- docs/function_notes/hk_06.md:75 bit-packed output writer: writes a1 into buffer off_2039374[2] (byte mask or halfword), advances via sub_2039378, updates high-water mark off_2039374[3].
sub_2039378
export/plan0/arm9_main/sub_2039378_02039378.c
- docs/function_notes/hk_06.md:76 cursor setter for record off_2039408; new position from a1 and mode a2 (0/1/2) with stride off_2039408[5], clamped, wrapped via sub_2133274.
sub_203940C
export/plan0/arm9_main/sub_203940C_0203940C.c
- docs/function_notes/hk_06.md:77 picks value from sub_2039230() when flag word off_2039468+36 is set, else masked halfwords off_203946C/off_2039470; passes to sub_2039530.
sub_2039478
export/plan0/arm9_main/sub_2039478_02039478.c
- docs/function_notes/hk_06.md:78 zero-initializes a 40-byte record at off_20394C8 with defaults 20 at +14 and 8 at +16.
sub_20394CC
export/plan0/arm9_main/sub_20394CC_020394CC.c
- docs/function_notes/hk_06.md:79 same record init as sub_2039478 for the record at off_203951C.
sub_2039520
export/plan0/arm9_main/sub_2039520_02039520.c
- docs/function_notes/hk_06.md:80 setter; stores three halfwords (a2..a4) at result[6..8].
sub_2039530
export/plan0/arm9_main/sub_2039530_02039530.c
- docs/function_notes/hk_06.md:81 input edge/hold state machine for key-state record a2 (prev/current bitmasks, hold counters +10/+14/+16, timestamp sub_200F5AC); calls sub_20392C8 if a2+32 set.
sub_2039708
export/plan0/arm9_main/sub_2039708_02039708.c
- docs/function_notes/hk_06.md:82 zero-initializes six halfwords of result.
sub_2039728
export/plan0/arm9_main/sub_2039728_02039728.c
- docs/function_notes/hk_06.md:83 zero-init of a record: halfwords 0..12 cleared, +14 = 20, +16 = 8, then four dwords at +24..+36 cleared.
sub_2039774
export/plan0/arm9_main/sub_2039774_02039774.c
- docs/function_notes/hk_06.md:84 init of an 8-halfword record at off_20397A4 (fields cleared, result[3] and result[7] = 3).
sub_20397A8
export/plan0/arm9_main/sub_20397A8_020397A8.c
- vm_model/src/kart/fxmath.rs:44 Cross product, truncated (
VEC_CrossProduct,sub_20397A8).
sub_2039828
export/plan0/arm9_main/sub_2039828_02039828.c
- vm_model/src/kart/fxmath.rs:34 Dot product, truncated (
VEC_DotProductvariantsub_2039828).
sub_2039860
export/plan0/arm9_main/sub_2039860_02039860.c
- vm_model/src/kart/fxmath.rs:89 Unit vector and length (
VEC_Normalize,sub_2039860). Callers skip it when the squared
sub_20399A8
export/plan0/arm9_main/sub_20399A8_020399A8.c
- docs/function_notes/hk_06.md:85 spin-wait handshake on state word off_2039A14: sets 2, calls sub_201E6B8(off_2039A18,1) (probably queues a task), spins while state == 2.
sub_2039A1C
export/plan0/arm9_main/sub_2039A1C_02039A1C.c
- docs/function_notes/hk_06.md:86 if *off_2039AB0 set and not 3: sets 2, sub_21492D8(8), clears 0x20000 bytes via sub_214D05C, sub_2148DAC, sub_201E7A8; then spin-waits while state == 2.
sub_2039ABC
export/plan0/arm9_main/sub_2039ABC_02039ABC.c
- docs/function_notes/hk_06.md:87 stores a1 into off_2039B20 and calls its callback (off_2039B20[1]) with 1 or 0 by a1 (state-change notifier); if a2 nonzero calls sub_200FD1C first.
sub_2039B24
export/plan0/arm9_main/sub_2039B24_02039B24.c
- docs/function_notes/hk_06.md:88 chain of ten calls through loc_2148E6C..loc_2148D34 plus sub_2148DAC; if *off_2039B90 is 1 or 3 calls loc_2148DC0 (probably display teardown).
sub_2039B94
export/plan0/arm9_main/sub_2039B94_02039B94.c
- docs/function_notes/hk_06.md:89 if *off_2039BD0 is 1 or 3 calls loc_21492F8 (display-state helper), otherwise returns 0.
sub_2039BD4
export/plan0/arm9_main/sub_2039BD4_02039BD4.c
- docs/function_notes/hk_06.md:90 VRAM/bank setup switched on *off_2039C6C; case 0 clears regions via sub_214D05C (109051904/393216/147456), cases 1/3 clear 671744 bytes; ends with sub_2148DAC.
sub_2039C7C
export/plan0/arm9_main/sub_2039C7C_02039C7C.c
- docs/function_notes/hk_06.md:91 sets *off_2039C94 = 1 and word [1] = 0, returns that record (state reset).
sub_2039C98
export/plan0/arm9_main/sub_2039C98_02039C98.c
- docs/function_notes/hk_06.md:92 noreturn wrapper; calls sub_2039CBC and passes its result to sub_205DC84 (probably a fatal/exit path).
sub_2039CA8
export/plan0/arm9_main/sub_2039CA8_02039CA8.c
- docs/function_notes/hk_06.md:93 small entry stub; calls sub_2043AD4 and then an uninitialized function pointer with 0 (probably a noreturn/boot entry; decompiler output unreliable).
sub_2039CBC
export/plan0/arm9_main/sub_2039CBC_02039CBC.c
- docs/function_notes/hk_06.md:94 long boot/init sequence; reads state via sub_20364E8/sub_20364E0, sub_2039E08 for layer params, calls about twenty init functions, ends sub_20CEF1C.
sub_2039E00
export/plan0/arm9_main/sub_2039E00_02039E00.c
- docs/function_notes/hk_06.md:95 trivial; returns 1.
sub_2039E08
export/plan0/arm9_main/sub_2039E08_02039E08.c
- docs/function_notes/hk_06.md:96 fills output params from object a1: sub_2036854/sub_20368E0 with sizes 102400/112640/307200 by mode off_2039EE8 == 2, *a3 via sub_21087C4/sub_2036BEC.
sub_2039EEC
export/plan0/arm9_main/sub_2039EEC_02039EEC.c
- docs/function_notes/hk_06.md:97 copies eight dwords of config from off_2039F30 into a local array and calls sub_20487FC(a1, array); returns 0.
sub_2039F34
export/plan0/arm9_main/sub_2039F34_02039F34.c
- docs/function_notes/hk_06.md:98 chained getter; returns sub_20CB4C0(sub_20CB51C()).
sub_2039F50
export/plan0/arm9_main/sub_2039F50_02039F50.c
- docs/function_notes/hk_06.md:99 thunk; tail-calls the function pointer at off_2039F58.
sub_2039F5C
export/plan0/arm9_main/sub_2039F5C_02039F5C.c
- docs/function_notes/hk_06.md:100 calls sub_20CB9B8, clears bit 0 of the halfword at +80 of *off_2039F8C, then returns sub_204465C().
sub_2039F90
export/plan0/arm9_main/sub_2039F90_02039F90.c
- docs/function_notes/hk_06.md:101 thunk; tail-calls the function pointer at off_2039F98.
sub_2039F9C
export/plan0/arm9_main/sub_2039F9C_02039F9C.c
- docs/function_notes/hk_06.md:102 like sub_2039EEC but copies eight words from off_203A044, calls sub_2044940, calls sub_2043F28(1) if off_203A04C != 2, sub_20487FC.
sub_203A050
export/plan0/arm9_main/sub_203A050_0203A050.c
- docs/function_notes/hk_06.md:103 thunk; tail-calls the function pointer at off_203A058.
sub_203A05C
export/plan0/arm9_main/sub_203A05C_0203A05C.c
- docs/function_notes/hk_06.md:104 clears word +84 of off_203A0D0[0], calls sub_2046E84, loops while off_203A0D8 nonzero calling sub_2037A40, sub_2037850, sub_20373EC.
sub_203A0DC
export/plan0/arm9_main/sub_203A0DC_0203A0DC.c
- docs/function_notes/hk_06.md:105 per-frame game-state update (688 B); when no flag pending, switches on sub_203A50C() (states 1..6) to set next-state halfword at a1+4 (0/2/10/15).
sub_203A3A4
export/plan0/arm9_main/sub_203A3A4_0203A3A4.c
- docs/function_notes/hk_06.md:106 getter; returns the first dword of the object at *off_203A3B4.
sub_203A3B8
export/plan0/arm9_main/sub_203A3B8_0203A3B8.c
- docs/function_notes/hk_06.md:107 setter; stores result at *(off_203A3C8)+500.
sub_203A3CC
export/plan0/arm9_main/sub_203A3CC_0203A3CC.c
- docs/function_notes/hk_06.md:108 slot-status test over 92-byte records (off_203A420/424/428); returns 1 when slot a1 is in a ready/active state (probably busy check).
sub_203A42C
export/plan0/arm9_main/sub_203A42C_0203A42C.c
- docs/function_notes/hk_06.md:109 getter; returns the dword at +1232 of *off_203A43C.
sub_203A440
export/plan0/arm9_main/sub_203A440_0203A440.c
- docs/function_notes/hk_06.md:110 slot-status test over 92-byte records (off_203A484/488); returns 0 when the slot is flagged and 1 otherwise.
sub_203A48C
export/plan0/arm9_main/sub_203A48C_0203A48C.c
- docs/function_notes/hk_06.md:111 thin wrapper; calls off_203A4A0(off_203A4A4, 0, a1).
sub_203A4A8
export/plan0/arm9_main/sub_203A4A8_0203A4A8.c
- docs/function_notes/hk_06.md:112 returns the halfword at dword_203A4C8 + 92*a1 ANDed with a2 (status-bit test for slot a1).
sub_203A4CC
export/plan0/arm9_main/sub_203A4CC_0203A4CC.c
- docs/function_notes/hk_06.md:113 trivial; returns constant 8.
sub_203A4D4
export/plan0/arm9_main/sub_203A4D4_0203A4D4.c
- docs/function_notes/hk_06.md:114 sets or clears bit 0 of the halfword at +80 of *off_203A508 according to a1; returns the new value.
sub_203A50C
export/plan0/arm9_main/sub_203A50C_0203A50C.c
- docs/function_notes/hk_06.md:115 getter; returns the dword at +12 of *off_203A51C.
sub_203A520
export/plan0/arm9_main/sub_203A520_0203A520.c
- docs/function_notes/hk_06.md:116 state-transition handler (944 B); switches on a2 (1..10) to set halfword a1+4, consulting sub_2046740, sub_20458CC, sub_2045914, sub_2045874, sub_2045A2C.
sub_203A8E0
export/plan0/arm9_main/sub_203A8E0_0203A8E0.c
- docs/function_notes/hk_06.md:117 setter; stores result at *(off_203A8F0)+68.
sub_203A8F4
export/plan0/arm9_main/sub_203A8F4_0203A8F4.c
- docs/function_notes/hk_06.md:118 getter; returns the dword at +8 of *off_203A904.
sub_203A908
export/plan0/arm9_main/sub_203A908_0203A908.c
- docs/function_notes/hk_06.md:119 predicate; returns 1 when sub_2056DEC passes, a1 > 180, and flag word dword_203A9DC+736 & dword_203A9E0 is set or slot status at off_203A9E4+368 passes; else 0.
sub_203A9EC
export/plan0/arm9_main/sub_203A9EC_0203A9EC.c
- docs/function_notes/NEEDS_REVIEW.md:246 probably menu gate: a1 > dword_203AAA0 returns 1; else needs sub_2036C5C(), a sub_2060440 record hit in an 8x4 scan, and bit0 of a menu flag word at
- docs/function_notes/hk_07.md:3 probably menu gate: a1 > dword_203AAA0 returns 1; else needs sub_2036C5C(), a sub_2060440 record hit in an 8x4 scan, and bit0 of a menu flag word at
sub_203AAA8
export/plan0/arm9_main/sub_203AAA8_0203AAA8.c
- docs/function_notes/hk_07.md:4 thin wrapper chain: sub_20B2E58 -> sub_2055CBC -> nullsub_24 -> sub_20B0B8C (session state to result)
sub_203AACC
export/plan0/arm9_main/sub_203AACC_0203AACC.c
- docs/function_notes/NEEDS_REVIEW.md:247 probably per-frame screen update: state 5 clears flag at +3896 and sets mode word; picks scene via sub_2056DEC/sub_2056E24/sub_2057D9C, then sub_2046EE4 ->
- docs/function_notes/hk_07.md:5 probably per-frame screen update: state 5 clears flag at +3896 and sets mode word; picks scene via sub_2056DEC/sub_2056E24/sub_2057D9C, then sub_2046EE4 ->
sub_203ABDC
export/plan0/arm9_main/sub_203ABDC_0203ABDC.c
- docs/function_notes/NEEDS_REVIEW.md:248 probably screen enter/setup: gets object via sub_20364E8/E0, sub_2059DC8, picks sub_20399A8 or sub_2039A1C path, calls sub_203AD58 (2D setup), sub_20431E4
- docs/function_notes/hk_07.md:6 probably screen enter/setup: gets object via sub_20364E8/E0, sub_2059DC8, picks sub_20399A8 or sub_2039A1C path, calls sub_203AD58 (2D setup), sub_20431E4
sub_203AD58
export/plan0/arm9_main/sub_203AD58_0203AD58.c
- docs/function_notes/hk_07.md:7 builds 2D screen (menu/HUD) from off_203AFDC table indexed by mode at *off_203AFD8+12; sub_2038D88 creates layer, sub_2038D00/D28/D58 configure elements per
sub_203AFE4
export/plan0/arm9_main/sub_203AFE4_0203AFE4.c
- docs/function_notes/hk_07.md:8 gate: returns true unless mode at *off_203B010+12 == 6 and a1 >= dword_203B014
sub_203B018
export/plan0/arm9_main/sub_203B018_0203B018.c
- docs/function_notes/NEEDS_REVIEW.md:249 probably builds ghost file name: index from sub_204684C(a1) (-1 gives 0), formatted via sub_200D9E0 with off_203B06C and index into a2; returns 1 on success
- docs/function_notes/hk_07.md:9 probably builds ghost file name: index from sub_204684C(a1) (-1 gives 0), formatted via sub_200D9E0 with off_203B06C and index into a2; returns 1 on success
sub_203B070
export/plan0/arm9_main/sub_203B070_0203B070.c
- docs/function_notes/NEEDS_REVIEW.md:250 probably builds ghost file name (/data/ghost/ghost_%03d.bin style) into a2 via sub_200D9E0 with off_203B09C and a1; always returns 1
- docs/function_notes/hk_07.md:10 probably builds ghost file name (/data/ghost/ghost_%03d.bin style) into a2 via sub_200D9E0 with off_203B09C and a1; always returns 1
sub_203B0A0
export/plan0/arm9_main/sub_203B0A0_0203B0A0.c
- docs/function_notes/hk_07.md:11 3-byte record ordering compare (a1 < a2, bytes 0,1,2 lexicographic); probably roster/record sort key
sub_203B0F8
export/plan0/arm9_main/sub_203B0F8_0203B0F8.c
- docs/function_notes/NEEDS_REVIEW.md:251 probably text/banner setup: state word ==2 calls sub_204F240(a1,1) else sub_204799C(off_203B18C); then sub_204E928 and sub_205982C for modes 1/2, returns
- docs/function_notes/hk_07.md:12 probably text/banner setup: state word ==2 calls sub_204F240(a1,1) else sub_204799C(off_203B18C); then sub_204E928 and sub_205982C for modes 1/2, returns
sub_203B194
export/plan0/arm9_main/sub_203B194_0203B194.c
- docs/function_notes/NEEDS_REVIEW.md:252 probably race config getter wrapper: if state word ==2 maps a1 via sub_204F240, then returns sub_205949C(a1)
- docs/function_notes/hk_07.md:13 probably race config getter wrapper: if state word ==2 maps a1 via sub_204F240, then returns sub_205949C(a1)
sub_203B1C8
export/plan0/arm9_main/sub_203B1C8_0203B1C8.c
- docs/function_notes/NEEDS_REVIEW.md:253 probably race config getter wrapper, same pattern as sub_203B194 but returns sub_20594D4(a1)
- docs/function_notes/hk_07.md:14 probably race config getter wrapper, same pattern as sub_203B194 but returns sub_20594D4(a1)
sub_203B1FC
export/plan0/arm9_main/sub_203B1FC_0203B1FC.c
- docs/function_notes/NEEDS_REVIEW.md:254 probably race config getter wrapper, same pattern as sub_203B194 but returns sub_20445F8(a1) (uncertain)
- docs/function_notes/hk_07.md:15 probably race config getter wrapper, same pattern as sub_203B194 but returns sub_20445F8(a1) (uncertain)
sub_203B230
export/plan0/arm9_main/sub_203B230_0203B230.c
- docs/function_notes/NEEDS_REVIEW.md:255 probably checks racer state via sub_203C880 and config object at off_203B31C (fields +84/+85/+98); if allowed, sub_20569DC, sub_2056A04, sub_20563D8 queue an
- docs/function_notes/hk_07.md:16 probably checks racer state via sub_203C880 and config object at off_203B31C (fields +84/+85/+98); if allowed, sub_20569DC, sub_2056A04, sub_20563D8 queue an
sub_203B324
export/plan0/arm9_main/sub_203B324_0203B324.c
- docs/function_notes/NEEDS_REVIEW.md:256 probably computes a mode 0-3 from object *off_203B3D4 fields +132/+136/+140; sub_2056A7C and sub_203B4C8 fill two records; if sub_203B3D8 says ok, sub_2056B08
- docs/function_notes/hk_07.md:17 probably computes a mode 0-3 from object *off_203B3D4 fields +132/+136/+140; sub_2056A7C and sub_203B4C8 fill two records; if sub_203B3D8 says ok, sub_2056B08
sub_203B3D8
export/plan0/arm9_main/sub_203B3D8_0203B3D8.c
- docs/function_notes/hk_07.md:18 compares two 31-byte result records by fields at +24..+30 and a weighted score (+0/+2/+3 with dword_203B4C4); returns 1 when a1 ranks above a2 (ordering)
sub_203B4C8
export/plan0/arm9_main/sub_203B4C8_0203B4C8.c
- docs/function_notes/hk_07.md:19 fills 31-byte record a1: zeroes flags, copies 20 bytes via sub_214D1FC from **off_203B58C, sums 4 entries via sub_203B598, then sets bytes +24..+30 from config
sub_203B598
export/plan0/arm9_main/sub_203B598_0203B598.c
- docs/function_notes/NEEDS_REVIEW.md:257 probably adds two packed time-like records (u16 value mod 1000, minute/second bytes base 60 with carry) and writes the sum to a3 (+0..+3)
- docs/function_notes/hk_07.md:20 probably adds two packed time-like records (u16 value mod 1000, minute/second bytes base 60 with carry) and writes the sum to a3 (+0..+3)
sub_203B680
export/plan0/arm9_main/sub_203B680_0203B680.c
- docs/function_notes/hk_07.md:21 2D table read: byte at a1+8 + (a3-1) + (a2-1)*stride, stride = u16 at a1+6 (probably grid/tile lookup)
sub_203B69C
export/plan0/arm9_main/sub_203B69C_0203B69C.c
- docs/function_notes/hk_07.md:22 getter: returns u16 at +6 of a1 (probably row stride or width)
sub_203B6A4
export/plan0/arm9_main/sub_203B6A4_0203B6A4.c
- docs/function_notes/hk_07.md:23 getter: returns u16 at +4 of a1 (probably count or width field)
sub_203B6AC
export/plan0/arm9_main/sub_203B6AC_0203B6AC.c
- docs/function_notes/NEEDS_REVIEW.md:258 probably race setup (thumb): seeds random via sub_214DF78/sub_200F5AC, fills off_203B8AC fields, shuffles with sub_2133048 LCG to pick characters and an 8-slot
- docs/function_notes/hk_07.md:24 probably race setup (thumb): seeds random via sub_214DF78/sub_200F5AC, fills off_203B8AC fields, shuffles with sub_2133048 LCG to pick characters and an 8-slot
sub_203B8E4
export/plan0/arm9_main/sub_203B8E4_0203B8E4.c
- docs/function_notes/NEEDS_REVIEW.md:259 probably random racer pick: counts active slots via sub_203B96C(0..7), advances 64-bit random state at a1 with sub_2133048, returns the chosen slot index
- docs/function_notes/hk_07.md:25 probably random racer pick: counts active slots via sub_203B96C(0..7), advances 64-bit random state at a1 with sub_2133048, returns the chosen slot index
sub_203B96C
export/plan0/arm9_main/sub_203B96C_0203B96C.c
- docs/function_notes/NEEDS_REVIEW.md:260 probably per-slot availability flag for slot 0..8: slots 0,1,4,5 always 1; slots 2,3,6,7 depend on sub_2056DEC checks (decompiler lost the jump-table tail)
- docs/function_notes/hk_07.md:26 probably per-slot availability flag for slot 0..8: slots 0,1,4,5 always 1; slots 2,3,6,7 depend on sub_2056DEC checks (decompiler lost the jump-table tail)
sub_203BA70
export/plan0/arm9_main/sub_203BA70_0203BA70.c
- docs/function_notes/agent_02.md:6 wrapper: runs random character pick (sub_203BA84) then random kart pick (sub_203BC64) for the 8 slots
sub_203BA84
export/plan0/arm9_main/sub_203BA84_0203BA84.c
- docs/function_notes/agent_02.md:7 randomly assigns a distinct character (0-12, honouring unlock checks for ids 8-11) to each unlocked slot of a selection struct, using the MATH_Rand LCG
sub_203BC64
export/plan0/arm9_main/sub_203BC64_0203BC64.c
- docs/function_notes/agent_02.md:8 randomly assigns each slot a kart (3 per character, 3*char+0..2, only unlocked ones) using the MATH_Rand LCG
sub_203BE48
export/plan0/arm9_main/sub_203BE48_0203BE48.c
- docs/function_notes/agent_02.md:9 getter: slot a2's chosen character (+4+4i) and kart (+0x24+4i) written to out pointers
sub_203BE6C
export/plan0/arm9_main/sub_203BE6C_0203BE6C.c
- docs/function_notes/agent_02.md:10 setter: sets slot a2's character and kart in the selection struct and marks the slot locked
sub_203BE88
export/plan0/arm9_main/sub_203BE88_0203BE88.c
- docs/function_notes/agent_02.md:11 setter: marks slot locked (bit in byte 0) and stores kart id for slot (+0x24+4i)
sub_203BEA4
export/plan0/arm9_main/sub_203BEA4_0203BEA4.c
- docs/function_notes/agent_02.md:12 setter: marks slot locked (bit in byte 1) and stores character id for slot (+4+4i)
sub_203BEC0
export/plan0/arm9_main/sub_203BEC0_0203BEC0.c
- docs/function_notes/agent_02.md:13 clears selection struct: lock masks 0, all 8 character and kart entries set to -1
sub_203BEDC
export/plan0/arm9_main/sub_203BEDC_0203BEDC.c
- docs/function_notes/agent_02.md:14 allocates 72-byte selection struct from heap a1, stores kart-unlock table (sub_2056444) at +68, clears it
sub_203BF04
export/plan0/arm9_main/sub_203BF04_0203BF04.c
- docs/function_notes/agent_02.md:15 copies 48-byte header and 0xDCC-byte block from a1 to a2, then copies or clears a 512-byte (32x32 4bpp emblem?) bitmap
sub_203BFC4
export/plan0/arm9_main/sub_203BFC4_0203BFC4.c
- docs/function_notes/agent_02.md:16 uncertain: calls sub_214DF78 (system check); on success zeroes the 3 words at a1
sub_203BFEC
export/plan0/arm9_main/sub_203BFEC_0203BFEC.c
- docs/function_notes/agent_02.md:17 uncertain: calls sub_214E038; on success writes {5,1,1} to a1[0..2]
sub_203C018
export/plan0/arm9_main/sub_203C018_0203C018.c
- docs/function_notes/agent_02.md:18 copies the 8-pointer callback table at 0x02164798 to the stack and passes it to sub_20487FC (mode/scene start with callbacks)
sub_203C060
export/plan0/arm9_main/sub_203C060_0203C060.c
- docs/function_notes/agent_02.md:19 calls sub_2037A40 then sub_20ADA2C(a1)
sub_203C07C
export/plan0/arm9_main/sub_203C07C_0203C07C.c
- docs/function_notes/agent_02.md:20 thunk: tail-calls 0x020ADA94 (Thumb)
sub_203C088
export/plan0/arm9_main/sub_203C088_0203C088.c
- docs/function_notes/agent_02.md:21 thunk: tail-calls 0x020AD32C (Thumb)
sub_203C094
export/plan0/arm9_main/sub_203C094_0203C094.c
- docs/function_notes/agent_02.md:22 scene init callback: sets heap handle, sub_2039A1C, sub_20AD344, then sub_2043C14
sub_203C0BC
export/plan0/arm9_main/sub_203C0BC_0203C0BC.c
- docs/function_notes/agent_02.md:23 uncertain: bool test on local player's 92-byte profile entry (0x02175608 table) and a 900-tick (0x384) timer
sub_203C174
export/plan0/arm9_main/sub_203C174_0203C174.c
- docs/function_notes/agent_02.md:24 bool: results +0x4FA (race progress counter, u16) greater than config +0x38
sub_203C1A8
export/plan0/arm9_main/sub_203C1A8_0203C1A8.c
- docs/function_notes/agent_02.md:25 uncertain: runs kart test sub_204176C; if it hits, reports slot a2 result code 6 (or 0) via sub_203E788; battle-mode hook
sub_203C240
export/plan0/arm9_main/sub_203C240_0203C240.c
- docs/function_notes/agent_02.md:26 getter: racer a1 record +0x40
sub_203C25C
export/plan0/arm9_main/sub_203C25C_0203C25C.c
- docs/function_notes/agent_02.md:27 bool: racer not finished (state not 1/2/3) and record +0x38 equals sub_2044618()
sub_203C2E4
export/plan0/arm9_main/sub_203C2E4_0203C2E4.c
- docs/function_notes/agent_02.md:28 racer a1 finishes: assigns/shifts place numbers of other racers, sets state 4, runs per-mode finish handlers
sub_203C4D0
export/plan0/arm9_main/sub_203C4D0_0203C4D0.c
- docs/function_notes/agent_02.md:29 points lookup: reads place-points table (results +0x4DC) indexed by player count/mode and place a1
sub_203C598
export/plan0/arm9_main/sub_203C598_0203C598.c
- docs/function_notes/agent_02.md:30 getter: first word of results object
sub_203C5AC
export/plan0/arm9_main/sub_203C5AC_0203C5AC.c
- docs/function_notes/agent_02.md:31 getter: racer a1 record +0x5C
sub_203C5C8
export/plan0/arm9_main/sub_203C5C8_0203C5C8.c
- docs/function_notes/agent_02.md:32 getter: racer a1 record +0x58
sub_203C5E4
export/plan0/arm9_main/sub_203C5E4_0203C5E4.c
- docs/function_notes/agent_02.md:33 getter: results object +0x4F0
sub_203C5F8
export/plan0/arm9_main/sub_203C5F8_0203C5F8.c
- docs/function_notes/agent_02.md:34 finds racer a1's best (fastest) lap among all laps; returns lap number and its time (ms/sec/min)
sub_203C778
export/plan0/arm9_main/sub_203C778_0203C778.c
- docs/function_notes/agent_02.md:35 getter: racer a1's lap a2 time (min, sec, ms) from lap table at record +0x20
sub_203C7CC
export/plan0/arm9_main/sub_203C7CC_0203C7CC.c
- docs/function_notes/agent_02.md:36 getter: racer a1's total race time (+0x20/+0x22/+0x23) if finished, else zeros
sub_203C880
export/plan0/arm9_main/sub_203C880_0203C880.c
- vm_model/src/kart/blue_shell.rs:154
sub_203C880: racer state 1, 2 or 3 (finished or retired). - docs/function_notes/agent_02.md:37 bool: racer a1 state is 1, 2 or 3 (finished)
sub_203C8C0
export/plan0/arm9_main/sub_203C8C0_0203C8C0.c
- vm_model/src/mapobj/pinball.rs:184 (
sub_203C8C0, record +0x4E) for the waiting state. - game/src/objects.rs:1190 the racers' highest lap counter (
sub_203C8C0) releases the later balls - docs/function_notes/agent_02.md:38 getter: racer a1 record +0x4E (u16)
sub_203C8DC
export/plan0/arm9_main/sub_203C8DC_0203C8DC.c
- docs/function_notes/agent_02.md:39 getter: racer a1 place (+0x50 & 0xF); in mode 5 a value from a table >>1
sub_203C950
export/plan0/arm9_main/sub_203C950_0203C950.c
- docs/function_notes/agent_02.md:40 getter: results object total time bytes +0xA, +0xB and u16 +8
sub_203C98C
export/plan0/arm9_main/sub_203C98C_0203C98C.c
- docs/function_notes/agent_02.md:41 per-racer cleanup: for each racer calls sub_204A910 or sub_204A978 on its 92-byte profile entry depending on type
sub_203CA38
export/plan0/arm9_main/sub_203CA38_0203CA38.c
- docs/function_notes/agent_02.md:42 per-frame race-results manager: finish handling, place updates, VS/battle sub-updates
sub_203CD04
export/plan0/arm9_main/sub_203CD04_0203CD04.c
- docs/function_notes/agent_02.md:43 wrapper: sub_203E788(a1, 4)
sub_203CD14
export/plan0/arm9_main/sub_203CD14_0203CD14.c
- docs/function_notes/agent_02.md:44 per-frame check of local player's finish flags (record +0x30 bits 0x10/0x20), reports results via sub_203E788 with codes 2-4
sub_203CFB4
export/plan0/arm9_main/sub_203CFB4_0203CFB4.c
- docs/function_notes/agent_02.md:45 bool: in VS mode (2) with results +0x4CC clear, true only if no pending racer record state 0 was found
sub_203D078
export/plan0/arm9_main/sub_203D078_0203D078.c
- docs/function_notes/agent_02.md:48 marks racers reported finished (sub_20A1084/20A128C) as state 1 or 2, then runs the per-mode race-end handler if the race is over
sub_203D21C
export/plan0/arm9_main/sub_203D21C_0203D21C.c
- docs/function_notes/agent_02.md:49 ends the race: stores each racer's place and points, picks the winning team, sets results +0x4CC = 1 (race over)
sub_203D568
export/plan0/arm9_main/sub_203D568_0203D568.c
- docs/function_notes/agent_02.md:50 per-frame results step: updates UI, in VS/team modes drops absent network players (sub_204451C), clears per-racer profile entries
sub_203D848
export/plan0/arm9_main/sub_203D848_0203D848.c
- docs/function_notes/agent_02.md:51 results object init: allocates 0x524 bytes, loads /rankpoint.rpt and /ranktimeGP.rtt, sets up course checkpoints (sub_20401AC)
sub_203D8FC
export/plan0/arm9_main/sub_203D8FC_0203D8FC.c
- docs/function_notes/agent_02.md:52 picks the rank-time threshold entry for the current course and class and stores it in results +0xC
sub_203D9D4
export/plan0/arm9_main/sub_203D9D4_0203D9D4.c
- vm_model/src/race.rs:2 checkpoints, and race places (
sub_203D9D4once per frame after the karts; per kart - vm_model/src/race.rs:353
sub_203D9D4places: insertion sort from the previous order by laps, then race progress.
sub_203DF74
export/plan0/arm9_main/sub_203DF74_0203DF74.c
- vm_model/src/race.rs:3
sub_203DF74). - vm_model/src/race.rs:273
sub_203DF74: update from the kart's position (+0x80 x, z). - game/src/race.rs:122 sub_203DF74 -> sub_207A5C4 checks kart+72 bit0x800 for every racer.
sub_203E370
export/plan0/arm9_main/sub_203E370_0203E370.c
- vm_model/src/race.rs:318
sub_203E370: move to checkpointto, passing keys and the line.
sub_203E4C4
export/plan0/arm9_main/sub_203E4C4_0203E4C4.c
- docs/function_notes/agent_02.md:53 flags racer a1's result bits (+0x3C bits 8-9 = 1 or 2); if enough racers are done, ends the race
sub_203E550
export/plan0/arm9_main/sub_203E550_0203E550.c
- vm_model/src/race.rs:336 sub_203E550: a new lap
sub_203E74C
export/plan0/arm9_main/sub_203E74C_0203E74C.c
- vm_model/src/mission_step.rs:9 reaches the limit (
sub_203E74C). - vm_model/src/mission_step.rs:62
sub_203E74C: the mission racer finishes (code 0). - game/src/mission.rs:265
sub_203E74C->sub_203E788(racer, 0): the racer finishes; the race ends and - docs/function_notes/agent_02.md:54 in mode 4 (battle) reports racer a1 via sub_203E788 with code 0
sub_203E788
export/plan0/arm9_main/sub_203E788_0203E788.c
- vm_model/src/mission_step.rs:14 every other kind succeeds on reaching the end. A failure reports
sub_203E788(racer, 4). - game/src/mission.rs:265
sub_203E74C->sub_203E788(racer, 0): the racer finishes; the race ends and - docs/function_notes/agent_02.md:55 racer a1 finishes (a2 = 0) or is eliminated (a2 != 0): records time, sets flag 0x10/0x20, runs finalize and race-end checks
sub_203E9A0
export/plan0/arm9_main/sub_203E9A0_0203E9A0.c
- docs/function_notes/agent_02.md:56 finalizes a racer record: state 1 (finished) or 3, total time (or DNF time 6000000 ms), frees its profile entry, computes rating delta
sub_203EB38
export/plan0/arm9_main/sub_203EB38_0203EB38.c
- vm_model/src/mission_step.rs:11
sub_203EB38, the mode-4 results evaluation when the race ends: kind 4 succeeds when the - game/src/mission.rs:148 the race ended by crossing the finish line (
sub_203EB38): judge the mission by its kind - game/src/mission.rs:178 the clock and counts in the stats; the result is judged when the race ends (
sub_203EB38) - docs/function_notes/agent_02.md:57 mode 4 race end: gives every unfinished racer a time and reports them via sub_203E788 (code 0 or 4)
sub_203ECF0
export/plan0/arm9_main/sub_203ECF0_0203ECF0.c
- docs/function_notes/agent_02.md:58 mode 5 race end: gives every unfinished racer a time and finalizes it (sub_205AE8C then sub_203E9A0)
sub_203EE28
export/plan0/arm9_main/sub_203EE28_0203EE28.c
- docs/function_notes/agent_02.md:59 default-mode race end: gives every unfinished racer a time and finalizes it with sub_203E9A0
sub_203EF58
export/plan0/arm9_main/sub_203EF58_0203EF58.c
- docs/function_notes/agent_02.md:60 bool: has the race ended? Condition depends on game mode (all humans finished, enough racers done, etc.)
sub_203F280
export/plan0/arm9_main/sub_203F280_0203F280.c
- docs/function_notes/agent_02.md:61 getter: results +0x474 signed byte
sub_203F2A0
export/plan0/arm9_main/sub_203F2A0_0203F2A0.c
- docs/function_notes/agent_02.md:62 getter: config +0x1C
sub_203F2B4
export/plan0/arm9_main/sub_203F2B4_0203F2B4.c
- docs/function_notes/agent_02.md:63 bool: racer a1 state == 4
sub_203F2DC
export/plan0/arm9_main/sub_203F2DC_0203F2DC.c
- docs/function_notes/agent_02.md:64 bool: racer a1 config +0x70 type is 0, 2 or 3 (mask 0xD)
sub_203F320
export/plan0/arm9_main/sub_203F320_0203F320.c
- docs/function_notes/agent_02.md:65 getter: racer count (config +0x3D0)
sub_203F334
export/plan0/arm9_main/sub_203F334_0203F334.c
- docs/function_notes/agent_02.md:66 when a racer finishes, estimates the missing partial-lap time by walking the kart back along its velocity to the finish line and sums lap times
sub_203F544
export/plan0/arm9_main/sub_203F544_0203F544.c
- docs/function_notes/agent_02.md:67 adds two time records (u16 ms, u8 sec, u8 min) with carry, capped at 99:59.999
sub_203F5F0
export/plan0/arm9_main/sub_203F5F0_0203F5F0.c
- docs/function_notes/agent_02.md:68 converts a 60 fps frame count into min / sec / ms (cap 99:59.999), with optional sub-frame correction a4
sub_203F7C0
export/plan0/arm9_main/sub_203F7C0_0203F7C0.c
- vm_model/src/race.rs:20 Search depth around the last checkpoint (
sub_203F7C0/sub_203F91C). - vm_model/src/race.rs:220
sub_203F7C0: backwards fromcp.
sub_203F91C
export/plan0/arm9_main/sub_203F91C_0203F91C.c
- vm_model/src/race.rs:20 Search depth around the last checkpoint (
sub_203F7C0/sub_203F91C). - vm_model/src/race.rs:244
sub_203F91C: forwards fromcp.
sub_203FA60
export/plan0/arm9_main/sub_203FA60_0203FA60.c
- vm_model/src/race.rs:184
sub_203FA60: is the kart in checkpointcp's quad (leaving groupgroup)?
sub_203FCAC
export/plan0/arm9_main/sub_203FCAC_0203FCAC.c
- vm_model/src/race.rs:128
sub_203FCAC: fraction of the way from lineato lineb(-4096 if outside the quad).
sub_203FDE0
export/plan0/arm9_main/sub_203FDE0_0203FDE0.c
- vm_model/src/race.rs:116
sub_203FDE0: whetherpos(x, z) is on the inner side of both quad edges.
sub_203FED4
export/plan0/arm9_main/sub_203FED4_0203FED4.c
- game/src/items.rs:435 the race manager (
sub_203FED4) draws once from the race RNG every frame (found with tools/bizhawk/rng_pc.lua) - docs/function_notes/agent_02.md:69 per-frame race clock tick: advances frame counter, per-racer counters, handles time limit and updates displayed time
sub_2040144
(not in export)
- docs/function_notes.md:1673 race manager per-frame draw from the race RNG (one each frame, after the CPUs' draws; the writer seen for the ambient draw of sub_203FED4)
sub_20401AC
export/plan0/arm9_main/sub_20401AC_020401AC.c
- vm_model/src/race.rs:26 The course's checkpoints and the progress scales derived from them (
sub_20401AC).
sub_2040750
export/plan0/arm9_main/sub_2040750_02040750.c
- vm_model/src/race.rs:151
sub_2040750: at the start, on the checkpoint just before the line, no lap, no keys.
sub_20408F0
export/plan0/arm9_main/sub_20408F0_020408F0.c
- docs/function_notes/agent_02.md:70 computes racer a1's rating/score delta for the race (clamped to -9999..9999), summing 9 components
sub_2040A8C
export/plan0/arm9_main/sub_2040A8C_02040A8C.c
- docs/function_notes/agent_02.md:71 fills the 9 rating components for mode 0 from the rank-point table and racer's place/time
sub_2040BC0
export/plan0/arm9_main/sub_2040BC0_02040BC0.c
- docs/function_notes/agent_02.md:72 bool: local player's race is over for the results flow (depends on mode and finished state)
sub_2040D24
export/plan0/arm9_main/sub_2040D24_02040D24.c
- docs/function_notes/agent_02.md:73 2D fixed-point dot product (rounded fx12) of two int pairs
sub_2040D68
export/plan0/arm9_main/sub_2040D68_02040D68.c
- docs/function_notes/agent_02.md:74 2D fixed-point dot product (rounded fx12) of two int pairs (duplicate of sub_2040D24)
sub_2040DA8
export/plan0/arm9_main/sub_2040DA8_02040DA8.c
- docs/function_notes/agent_02.md:75 uncertain: course table lookup returning 48*value + base offset (+0xB8) for index a1
sub_2040DE0
export/plan0/arm9_main/sub_2040DE0_02040DE0.c
- docs/function_notes/agent_02.md:76 tests whether kart a1's position lies inside any area in zone list a2 (box/ellipsoid test, or sub_2041A70 for other types)
sub_2040F78
export/plan0/arm9_main/sub_2040F78_02040F78.c
- docs/function_notes/agent_02.md:77 course data lookup: returns pointer to the 40-byte entry referenced by index a1 (via +0xF8 and +0x24 tables), or 0
sub_2040FD8
export/plan0/arm9_main/sub_2040FD8_02040FD8.c
- docs/function_notes/agent_02.md:80 respawn point (KTPJ) a1: writes its position to a2 and direction to a3, returns pointer to its 48-byte enemy-point entry (+0xB8 table) or 0
sub_20410A4
export/plan0/arm9_main/sub_20410A4_020410A4.c
- docs/function_notes/agent_02.md:81 respawn point (KTPJ) a1: writes position to a2 and direction to a3, returns pointer to its 40-byte item-point entry (+0xA0 table) or 0
sub_2041170
export/plan0/arm9_main/sub_2041170_02041170.c
- game/src/respawn.rs:6 (
sub_2041170, checkpoint +0x22), 40 units above it, facing the point's direction
sub_20411E4
export/plan0/arm9_main/sub_20411E4_020411E4.c
- docs/function_notes/agent_02.md:82 finds the first type-1 AREA containing point a1; returns the area's byte +0x43, or -1
sub_20413A4
export/plan0/arm9_main/sub_20413A4_020413A4.c
- docs/function_notes/agent_02.md:83 finds the first type-4 AREA containing point a1; returns pointer to enemy-point entry (48*area+0x40 index + base) or 0
sub_2041588
export/plan0/arm9_main/sub_2041588_02041588.c
- vm_model/src/cpu_recovery.rs:29 Original 72-byte AREA record used by
sub_2041588to select a recovery node. - vm_model/src/cpu_recovery.rs:57 Box helper
sub_2041A70, and cylinder branch ofsub_2041588. - docs/function_notes.md:434 CPU recovery node selector scans AREA records in order for kind4, tests box or cylinder bounds, and returns runtime CPU route node at40*AREA.s16(+64); requires nonzero recovery-area count+258. Controlled state2 callbacks match218 selections (130 targets/88 misses) using12 original box volumes retyped as kind4 with node indices0..11; not a natural recovery race. Native reads72-byte AREA entries and consumes first matching valid node
- docs/function_notes/agent_02.md:84 finds the first type-4 AREA containing point a1; returns pointer to item-point entry (40-byte stride) or 0
sub_204176C
export/plan0/arm9_main/sub_204176C_0204176C.c
- docs/function_notes/agent_02.md:85 finds the first type-2 AREA containing point a1; sets *a2 = (area +0x3C == 0) and returns 1
sub_2041944
export/plan0/arm9_main/sub_2041944_02041944.c
- docs/function_notes/agent_02.md:86 tests whether point a1 lies in AREA a2 (shape 0 box via sub_2041A70, shape 1 cylinder)
sub_2041A70
export/plan0/arm9_main/sub_2041A70_02041A70.c
- vm_model/src/cpu_recovery.rs:57 Box helper
sub_2041A70, and cylinder branch ofsub_2041588. - docs/function_notes.md:435 inclusive AREA box test: rounded dot against Y-axis must be0..100scaleY; X/Z rounded projections within +/-50scaleX/Z. Matches box selection inside218 controlled callback probes. Cylinder branch in sub_2041588 uses50*scaleY upper bound without a lower check and separately rounded squares after >>4; cylinder path source-derived, not captured
- docs/function_notes/agent_02.md:87 point-in-oriented-box test for an AREA record (three axis dot products against half-extents)
sub_2041BB0
export/plan0/arm9_main/sub_2041BB0_02041BB0.c
- vm_model/src/cpu.rs:1 CPU drivers: where karts start (
sub_2041BB0/sub_2041DC8) and how a CPU follows the CPU - vm_model/src/cpu.rs:67 Start grid (
sub_2041BB0, race modes): forracerskarts, kart in grid slotslot
sub_2041DC8
export/plan0/arm9_main/sub_2041DC8_02041DC8.c
- vm_model/src/cpu.rs:1 CPU drivers: where karts start (
sub_2041BB0/sub_2041DC8) and how a CPU follows the CPU
sub_2042044
export/plan0/arm9_main/sub_2042044_02042044.c
- vm_model/src/mission_target.rs:279 range of the PATH count (
course +12); the game indexessub_2042044's 20-byte POIT array - docs/function_notes/agent_02.md:88 returns element a2 of the 20-byte-stride array at (sub_2042FC4()+4)
sub_2042064
export/plan0/arm9_main/sub_2042064_02042064.c
- vm_model/src/mission.rs:1 Mission mode data (
MissionRun/mrNN_tool.nkm, loaded bysub_2042064when the race mode - game/src/mission.rs:2
MissionRun/mrNN_tool.nkminstead ofcourse_map.nkm(whatsub_2042064does when the race - docs/function_notes/agent_02.md:89 loads the course's NKM (/course_map.nkm, mission tool or Net variant by mode), runs the 17 section parsers, computes max lap/checkpoint number
sub_2042170
export/plan0/arm9_main/sub_2042170_02042170.c
- docs/function_notes/agent_02.md:90 CAME section parser: stores camera array (76-byte entries), finds first intro/replay/type cameras
sub_2042280
export/plan0/arm9_main/sub_2042280_02042280.c
- docs/function_notes/agent_02.md:91 AREA section parser: stores 72-byte area array, builds per-id area lists and area counts
sub_20422C4
export/plan0/arm9_main/sub_20422C4_020422C4.c
- docs/function_notes/agent_02.md:92 counts type-2 AREAs (battle mode only) and stores the count in a byte of the course object (+0x10F)
sub_2042320
export/plan0/arm9_main/sub_2042320_02042320.c
- docs/function_notes/agent_02.md:93 counts type-4 AREAs and stores the count at +0x102
sub_204236C
export/plan0/arm9_main/sub_204236C_0204236C.c
- docs/function_notes/agent_02.md:94 builds, per area id (0-7), linked lists of the type-3 AREAs (heap nodes of 8 bytes)
sub_20423FC
export/plan0/arm9_main/sub_20423FC_020423FC.c
- docs/function_notes/agent_02.md:95 returns pointer to AREA record a1 (72-byte stride)
sub_2042410
export/plan0/arm9_main/sub_2042410_02042410.c
- docs/function_notes/agent_02.md:96 EPAT section parser: stores enemy path array in one of two slots depending on +0x20
sub_2042498
export/plan0/arm9_main/sub_2042498_02042498.c
- docs/function_notes/agent_02.md:97 EPOI section parser: stores enemy point array in one of two slots depending on +0x20
sub_2042520
export/plan0/arm9_main/sub_2042520_02042520.c
- docs/function_notes/agent_02.md:98 IPAT section parser: stores item path array and count
sub_2042558
export/plan0/arm9_main/sub_2042558_02042558.c
- docs/function_notes/agent_02.md:99 IPOI section parser: stores item point array and count
sub_2042590
export/plan0/arm9_main/sub_2042590_02042590.c
- docs/function_notes/agent_02.md:100 CPAT section parser: stores checkpoint path array (12-byte entries) and finds the last-lap checkpoint
sub_2042628
export/plan0/arm9_main/sub_2042628_02042628.c
- docs/function_notes/agent_02.md:101 CPOI section parser: stores checkpoint array (36-byte entries) and counts those with a valid key-checkpoint id
sub_20426AC
export/plan0/arm9_main/sub_20426AC_020426AC.c
- vm_model/src/course_map.rs:83
sub_20426AC): kart start position and rotation, then two s16 values - docs/function_notes/agent_02.md:102 KTPM (mission point) section parser, only if NKM version >= 0x24
sub_2042708
export/plan0/arm9_main/sub_2042708_02042708.c
- docs/function_notes/agent_02.md:103 KTPC (cannon/ pad point) section parser, only if version >= 0x1F; then builds its index table
sub_204274C
export/plan0/arm9_main/sub_204274C_0204274C.c
- docs/function_notes/agent_02.md:104 builds the id-to-index table (2 bytes each) for the 28-byte-entry section from entry +0x1A
sub_20427AC
export/plan0/arm9_main/sub_20427AC_020427AC.c
- docs/function_notes/agent_02.md:105 KTP2 (second start point) section parser
sub_20427D4
export/plan0/arm9_main/sub_20427D4_020427D4.c
- docs/function_notes/agent_02.md:106 shuffles the respawn index table (+0xF8) by swapping 100 random pairs with the LCG
sub_2042894
export/plan0/arm9_main/sub_2042894_02042894.c
- docs/function_notes/agent_02.md:107 KTPJ (respawn point) section parser: stores array, builds id-to-index table (+0xF8)
sub_2042990
export/plan0/arm9_main/sub_2042990_02042990.c
- docs/function_notes/agent_02.md:108 KTPS (start point) section parser: stores array and count
sub_20429B8
export/plan0/arm9_main/sub_20429B8_020429B8.c
- docs/function_notes/agent_02.md:109 STAG section parser: stores pointer to header record (+4)
sub_20429C8
export/plan0/arm9_main/sub_20429C8_020429C8.c
- docs/function_notes/agent_02.md:110 after loading the NKM, builds the item-path graph (if IPAT present) and the enemy-path graph (first or second EPAT set)
sub_2042A10
export/plan0/arm9_main/sub_2042A10_02042A10.c
- docs/function_notes/agent_02.md:111 builds the node graph for the second enemy-point set: 48-byte nodes with up to 8 next/prev links per path
sub_2042C3C
export/plan0/arm9_main/sub_2042C3C_02042C3C.c
- docs/function_notes/agent_02.md:112 builds the node graph for the first enemy-point set: 40-byte nodes (up to 3 next, 3 prev) per point, then links paths
sub_2042D34
export/plan0/arm9_main/sub_2042D34_02042D34.c
- docs/function_notes/agent_02.md:113 recursively links 40-byte enemy-point nodes along a path and into its successor paths
sub_2042E0C
export/plan0/arm9_main/sub_2042E0C_02042E0C.c
- docs/function_notes/agent_02.md:114 builds the node graph for the item points (IPOI/IPAT): 40-byte nodes with next/prev links
sub_2042EC0
export/plan0/arm9_main/sub_2042EC0_02042EC0.c
- docs/function_notes/agent_02.md:115 recursively links item-point nodes along a path and into its successor paths
sub_2042FC4
export/plan0/arm9_main/sub_2042FC4_02042FC4.c
- docs/function_notes/agent_02.md:116 returns entry a1 of the 8-byte (PATH header ptr, POIN data ptr) table at +0x94
sub_2042FD8
export/plan0/arm9_main/sub_2042FD8_02042FD8.c
- docs/function_notes/agent_02.md:117 builds the PATH table: for each PATH, pairs its header with the matching run of 20-byte POIN points
sub_2043038
export/plan0/arm9_main/sub_2043038_02043038.c
- docs/function_notes/agent_02.md:118 computes the total checkpoint-path length (sub_2043078(0), sub_2133274) and stores it at +0x104/+0x108
sub_2043078
export/plan0/arm9_main/sub_2043078_02043078.c
- docs/function_notes/agent_02.md:119 recursive sum of checkpoint lengths (+0x18 of CPOI) along checkpoint path a1, averaging over branches
sub_2043108
export/plan0/arm9_main/sub_2043108_02043108.c
- docs/function_notes/agent_02.md:120 POIN section parser: stores pointer and count
sub_204313C
export/plan0/arm9_main/sub_204313C_0204313C.c
- docs/function_notes/agent_02.md:121 PATH section parser: stores pointer and count
sub_2043170
export/plan0/arm9_main/sub_2043170_02043170.c
- docs/function_notes/agent_02.md:122 OBJI (course objects) section parser: stores pointer and count
sub_20431A4
export/plan0/arm9_main/sub_20431A4_020431A4.c
- docs/function_notes/agent_02.md:123 NKM section helper: skips the 4-byte tag, returns the u16 entry count and advances the cursor past the 8-byte header
sub_20431BC
export/plan0/arm9_main/sub_20431BC_020431BC.c
- docs/function_notes/agent_02.md:124 allocates the 0x110-byte course data object from heap a1
sub_20431CC
export/plan0/arm9_main/sub_20431CC_020431CC.c
- docs/function_notes/agent_02.md:125 returns constant 204800 (50.0 in fx12)
sub_20431D4
export/plan0/arm9_main/sub_20431D4_020431D4.c
- docs/function_notes/agent_02.md:126 returns constant 409600 (100.0 in fx12)
sub_20431DC
export/plan0/arm9_main/sub_20431DC_020431DC.c
- docs/function_notes/agent_02.md:127 returns constant 204800 (50.0 in fx12)
sub_20431E4
export/plan0/arm9_main/sub_20431E4_020431E4.c
- docs/function_notes/agent_02.md:130 race controller setup: initialises 10 controller slots and assigns each racer's controller type (1-7) from player kind and mode
sub_2043410
export/plan0/arm9_main/sub_2043410_02043410.c
- docs/function_notes/agent_02.md:131 initialises the 8 racer controller slots; marks network-absent players as type 4
sub_2043544
export/plan0/arm9_main/sub_2043544_02043544.c
- docs/function_notes/agent_02.md:132 sets or clears input flag bit 1 (only when scene id is 2 and a1 is non-zero)
sub_204359C
export/plan0/arm9_main/sub_204359C_0204359C.c
- docs/function_notes/agent_02.md:133 bool: input flags bit 0
sub_20435BC
export/plan0/arm9_main/sub_20435BC_020435BC.c
- docs/function_notes/agent_02.md:134 returns constant 9
sub_20435C4
export/plan0/arm9_main/sub_20435C4_020435C4.c
- docs/function_notes/agent_02.md:135 getter: u16 at 0x021759A0-area table 0x02175908 + 0x4E
sub_20435D4
export/plan0/arm9_main/sub_20435D4_020435D4.c
- docs/function_notes/agent_02.md:136 sets or clears input flags bit 0
sub_204360C
export/plan0/arm9_main/sub_204360C_0204360C.c
- vm_model/src/cpu.rs:19 * CPUs hold A (
sub_204360C).
sub_2043648
export/plan0/arm9_main/sub_2043648_02043648.c
- docs/function_notes/agent_02.md:137 per-frame controller poll: for each slot, builds the button mask by controller type (pad, replay, network, CPU)
sub_2043A20
export/plan0/arm9_main/sub_2043A20_02043A20.c
- docs/function_notes/agent_02.md:138 getter: current button mask (input struct +2)
sub_2043A34
export/plan0/arm9_main/sub_2043A34_02043A34.c
- docs/function_notes/agent_02.md:139 reads KEYINPUT (0x04000130) and the 0x027FFFA8 extension keys into the pressed-button mask (+2), then updates touch (sub_2046D7C)
sub_2043A9C
export/plan0/arm9_main/sub_2043A9C_02043A9C.c
- docs/function_notes/agent_02.md:140 sets or clears input flags bit 2
sub_2043AD4
export/plan0/arm9_main/sub_2043AD4_02043AD4.c
- docs/function_notes/agent_02.md:141 thunk: tail-calls sub_2046C74
sub_2043AE0
export/plan0/arm9_main/sub_2043AE0_02043AE0.c
- docs/function_notes/agent_02.md:142 sets input flags bit 3 and runs the controller poll (sub_2043648)
sub_2043B04
export/plan0/arm9_main/sub_2043B04_02043B04.c
- docs/function_notes/agent_02.md:143 clears the 10 controller slot records (sub_2039708)
sub_2043B3C
export/plan0/arm9_main/sub_2043B3C_02043B3C.c
- docs/function_notes/agent_02.md:144 thunk: tail-calls sub_2046F54
sub_2043B48
export/plan0/arm9_main/sub_2043B48_02043B48.c
- docs/function_notes/agent_02.md:145 resets the controller slots, runs a poll and clears the input mask and flags
sub_2043C14
export/plan0/arm9_main/sub_2043C14_02043C14.c
- docs/function_notes/agent_02.md:146 initialises 10 controller slot records and default types (slots 5/6 special)
sub_2043D10
export/plan0/arm9_main/sub_2043D10_02043D10.c
- docs/function_notes/agent_02.md:149 input and controller system init: allocates the 16-byte input struct, resets the 10 controller slots and takes a first key poll
sub_2043F28
export/plan0/arm9_main/sub_2043F28_02043F28.c
- docs/function_notes/agent_02.md:150 loads the sound groups needed by all racers (OR of per-character/kart sound masks from table 0x021540EC) via sub_21087F4
sub_2043FB0
export/plan0/arm9_main/sub_2043FB0_02043FB0.c
- docs/function_notes/agent_02.md:151 uncertain: clears valid bit 0 of the three profile slots (0x0217A9E8 +20/+24/+28) and refreshes the local profile (sub_2056700, sub_2057D9C)
sub_2044060
export/plan0/arm9_main/sub_2044060_02044060.c
- docs/function_notes/agent_02.md:152 uncertain: clears valid bits of the three profile slots, refreshes local profile, then loads a 128-byte block via sub_203B018 or zeroes memory at 0
sub_204419C
export/plan0/arm9_main/sub_204419C_0204419C.c
- docs/function_notes/agent_02.md:153 uncertain: like sub_2044060 but refreshes two profiles (local and sub_2056670(a2)) and re-clears slot valid bits
sub_20442D0
export/plan0/arm9_main/sub_20442D0_020442D0.c
- docs/function_notes/agent_02.md:154 uncertain: clears valid bit 0 of the three profile slots and refreshes the local profile (same as sub_2043FB0)
sub_2044380
export/plan0/arm9_main/sub_2044380_02044380.c
- docs/function_notes/agent_02.md:155 fills the pending race config from an 11-word settings block (course, cc, characters), puts the player in slot 0 and the opponent in slot 1 or CPU, others CPU
sub_204451C
export/plan0/arm9_main/sub_204451C_0204451C.c
- docs/function_notes/agent_02.md:156 adds network player a1 to the race config: sets its racer slot via sub_20468B0, copies its 16-byte name/data block, assigns an order index (+0x3E1)
sub_20445F8
export/plan0/arm9_main/sub_20445F8_020445F8.c
- docs/function_notes/agent_02.md:157 uncertain: calls sub_205950D with config course id (+0x1E8) and mode kind (+0x1F0)
sub_2044618
export/plan0/arm9_main/sub_2044618_02044618.c
- docs/function_notes/agent_02.md:158 returns the lap count: config +0x64 if positive, else the course STAG record's lap byte (NKM STAG +2); 1 in VS mode 2
sub_204465C
export/plan0/arm9_main/sub_204465C_0204465C.c
- docs/function_notes/agent_02.md:159 when config kind (+0x1F0) is 1, fills racer slots 1-7 with default CPU entries (character = kart = slot, type 4)
sub_20446E0
export/plan0/arm9_main/sub_20446E0_020446E0.c
- docs/function_notes/agent_02.md:160 derives config state from the course id: kind-specific +0x1F4, cup index (+0x1EC) and position in cup via the cup table at 0x02154128
sub_2044940
export/plan0/arm9_main/sub_2044940_02044940.c
- docs/function_notes/agent_02.md:161 commits the pending race config into the active one, picks local/remote profiles for each racer and sets the config state (+0x1F4)
sub_2044BF8
export/plan0/arm9_main/sub_2044BF8_02044BF8.c
- docs/function_notes/agent_02.md:162 loads profile slot 2 (+28 of 0x0217A9E8) into racer slot a2 if its valid bit is set, copies its 0xDCC profile block and name; returns success
sub_2044D4C
export/plan0/arm9_main/sub_2044D4C_02044D4C.c
- docs/function_notes/agent_02.md:163 loads profile slot 1 (+24 of 0x0217A9E8) into racer slot a2 if valid, copies profile and name; returns whether it was valid
sub_2044E9C
export/plan0/arm9_main/sub_2044E9C_02044E9C.c
- docs/function_notes/agent_02.md:164 loads profile slot 0 (+20 of 0x0217A9E8) into racer slot a2 if valid, copies profile and name; returns whether it was valid
sub_2044FC0
export/plan0/arm9_main/sub_2044FC0_02044FC0.c
- docs/function_notes/agent_02.md:165 counts local controllers and records which racer uses each of the first two controller indices (config +0x3D4/+0x3D5)
sub_2045084
export/plan0/arm9_main/sub_2045084_02045084.c
- docs/function_notes/agent_02.md:166 per-racer setup for racer a1: chooses the name pointer, profile pointer and flags from the local player, wireless players or CPU data
sub_2045590
export/plan0/arm9_main/sub_2045590_02045590.c
- docs/function_notes/agent_02.md:167 resets the race config to defaults (course 20, no cup, 8 slots with character=slot, kart=3*slot), clears counters
sub_2045874
export/plan0/arm9_main/sub_2045874_02045874.c
- docs/function_notes/agent_02.md:168 records the current course into the race history array (0x0217B468) and bumps the counter; true while at most 4 entries
sub_20458CC
export/plan0/arm9_main/sub_20458CC_020458CC.c
- docs/function_notes/agent_02.md:169 sets config state +0x1F4 to 0 or 4 depending on a session flag, then continues into sub_2045920
sub_2045914
export/plan0/arm9_main/sub_2045914_02045914.c
- docs/function_notes/agent_02.md:170 continues into sub_2045920 (mode/cup advance setup, shares its body)
sub_2045A2C
export/plan0/arm9_main/sub_2045A2C_02045A2C.c
- docs/function_notes/agent_02.md:171 sets up the 8 racer slots for a rank-ordered race (state 6): maps finishing positions to characters/karts, special-casing battle course 9
sub_2045BD4
export/plan0/arm9_main/sub_2045BD4_02045BD4.c
- docs/function_notes/agent_02.md:172 prepares the cup-end data in 0x0217B468 (rank, points table 0x0217A9FC, per-race results) and fills 3 racer slots by cup placing
sub_2045ED0
export/plan0/arm9_main/sub_2045ED0_02045ED0.c
- docs/function_notes/agent_02.md:173 after a race, advances cup progress by config kind: picks the next course from the cup table (0x02154128) or branches to sub_2046024
sub_2046024
export/plan0/arm9_main/sub_2046024_02046024.c
- docs/function_notes/agent_02.md:174 builds the list of selectable courses for random/next race selection (bytes at +0x3DC) honouring unlocked cups
sub_2046524
export/plan0/arm9_main/sub_2046524_02046524.c
- docs/function_notes/agent_02.md:175 random number in [0, a2) from the LCG state at a1 (64-bit multiply-add, high word scaling)
sub_2046594
export/plan0/arm9_main/sub_2046594_02046594.c
- docs/function_notes/agent_02.md:176 numbers the human-type racers in order (+0x26E) or sets -1, stores the count at +0x3E1
sub_2046648
export/plan0/arm9_main/sub_2046648_02046648.c
- docs/function_notes/agent_02.md:177 bool: course group a1 is available (always for groups 0,1,4,5; others test unlock bits via sub_205FBB8)
sub_204673C
(not in export)
- docs/function_notes/agent_02.md:178 nullsub_19: empty function
sub_2046740
export/plan0/arm9_main/sub_2046740_02046740.c
- docs/function_notes/agent_02.md:179 cup advance: race number (+0x248) = finished races + 1, sets next course id from the cup table (0x02154128), state 3
sub_20467A0
export/plan0/arm9_main/sub_20467A0_020467A0.c
- docs/function_notes/agent_02.md:180 resets cup results (sub_205DB50) and sets race number to 1
sub_20467D0
export/plan0/arm9_main/sub_20467D0_020467D0.c
- docs/function_notes/agent_02.md:181 finds which cup (0-7) contains course a1 in the 8x4 cup table; 9 if not found
sub_2046828
export/plan0/arm9_main/sub_2046828_02046828.c
- docs/function_notes/agent_02.md:182 course id at flat position a1 of the 8x4 cup table (cup = a1/4, race = a1%4)
sub_204684C
export/plan0/arm9_main/sub_204684C_0204684C.c
- docs/function_notes/agent_02.md:183 flat position (0-31) of course a1 in the cup table, or -1
sub_20468B0
export/plan0/arm9_main/sub_20468B0_020468B0.c
- docs/function_notes/agent_02.md:184 sets pending racer slot a1: character a2, kart a3, controller type a4, team a5, mode a6 (type 2 gets flag 0 else 3)
sub_2046968
export/plan0/arm9_main/sub_2046968_02046968.c
- docs/function_notes/agent_02.md:185 counts the first a1 racers: total non-absent, human (type 0 or 3) and per-team counts into config +0x3D0..+0x3D3
sub_2046A3C
export/plan0/arm9_main/sub_2046A3C_02046A3C.c
- docs/function_notes/agent_02.md:186 allocates the 1024-byte race config and 33-byte course list, then sets up cup state (sub_205D0BC, sub_205DC54)
sub_2046A88
export/plan0/arm9_main/sub_2046A88_02046A88.c
- docs/function_notes/agent_02.md:187 copies the 8-pointer callback table at 0x02164838 and starts a scene via sub_20487FC (first callback sub_2046AE4)
sub_2046AD0
(not in export)
- docs/function_notes/agent_02.md:188 nullsub_29: empty function
sub_2046AD4
(not in export)
- docs/function_notes/agent_02.md:189 nullsub_30: empty function
sub_2046AD8
export/plan0/arm9_main/sub_2046AD8_02046AD8.c
- docs/function_notes/agent_02.md:190 thunk: tail-calls sub_20446E0
sub_2046AE4
export/plan0/arm9_main/sub_2046AE4_02046AE4.c
- docs/function_notes/agent_02.md:191 scene init callback: creates a task/layer object (sub_2038D88/2038D28/2037ABC) from descriptor 0x02154868
sub_2046B40
export/plan0/arm9_main/sub_2046B40_02046B40.c
- vm_model/src/kart/blue_shell.rs:4 Item state machine (table
0x0216C694, run bysub_2046B40like the red shell's; a requested - vm_model/src/kart/bomb.rs:4 Item state machine (table
0x0216C6F4, run bysub_2046B40; a requested state starts on the - vm_model/src/kart/red_shell.rs:4 States are (enter, update) pairs run by
sub_2046B40: a requested change takes effect at - vm_model/src/mapobj/block.rs:62 the state machine (sub_2046B40): a pending state starts first
- vm_model/src/mapobj/cheep.rs:74 One tick of its state machine (
sub_2046B40). - vm_model/src/mapobj/chomp.rs:165 +0x90 the state to switch to at the start of the next tick (
sub_2046B40). - vm_model/src/mapobj/chomp.rs:272
sub_2046B40: a pending state starts, running its entry. - vm_model/src/mapobj/drum.rs:64 One tick (
sub_2046B40with the drum's states). - vm_model/src/mapobj/goomba.rs:105 sub_20DAF20 advances gait even while squashed. sub_2046B40 applies a
- docs/function_notes.md:134 object state machine tick: runs a pending state's enter, then the update
- docs/function_notes.md:243 shared state dispatcher: consume pending transition, reset elapsed ticks, run new entry and update in same call, then increment elapsed; Goomba timing matches all 600 captured updates
sub_2046BCC
export/plan0/arm9_main/sub_2046BCC_02046BCC.c
- docs/function_notes.md:133 object state machine: request a state (applied next tick)
sub_2046BE8
export/plan0/arm9_main/sub_2046BE8_02046BE8.c
- vm_model/src/mapobj/chomp.rs:4 machine (+0x80,
sub_2046BE8, states at0x0216BEDC) stays in state 5 (sub_20DC354): - docs/function_notes.md:132 object state machine init (+0x80: table of (enter, update) pairs, count, owner)
sub_2046C10
export/plan0/arm9_main/sub_2046C10_02046C10.c
- docs/function_notes/agent_02.md:192 touch input: returns packed pen position (x<<8 | y) when the pen is down, else 0xFFFF
sub_2046C74
export/plan0/arm9_main/sub_2046C74_02046C74.c
- docs/function_notes/agent_02.md:193 shuts down the microphone/touch handler (sub_210F114) and clears the global struct pointer
sub_2046CA8
export/plan0/arm9_main/sub_2046CA8_02046CA8.c
- docs/function_notes/agent_02.md:194 pushes a new touch sample into the 2-deep history (x, y, down flag), counting hold frames up to 6; stores mic state byte
sub_2046D7C
export/plan0/arm9_main/sub_2046D7C_02046D7C.c
- docs/function_notes/agent_02.md:195 reads and calibrates the touch panel sample (sub_214E6D4/sub_214E334), then sets mic-loud flag if sample level > 0x14
sub_2046E24
export/plan0/arm9_main/sub_2046E24_02046E24.c
- docs/function_notes/agent_02.md:196 if mic enabled and recording flag set, stops the microphone (sub_210F068) and clears the flag
sub_2046E84
export/plan0/arm9_main/sub_2046E84_02046E84.c
- docs/function_notes/agent_02.md:197 if mic enabled and not started, starts the microphone (sub_210F07C) and sets the started flag
sub_2046EE4
export/plan0/arm9_main/sub_2046EE4_02046EE4.c
- docs/function_notes/agent_02.md:198 shuts the microphone down (sub_210F0D8), clears its pointer and enable/started flags
sub_2046F54
export/plan0/arm9_main/sub_2046F54_02046F54.c
- docs/function_notes/agent_02.md:199 shuts down the touch panel (sub_214E6E4, sub_214E31C/308) and clears its enable flag
sub_2046FB4
export/plan0/arm9_main/sub_2046FB4_02046FB4.c
- docs/function_notes/agent_02.md:200 microphone init: allocates a 1056-byte 32-aligned buffer, initialises it and sets the enable flag
sub_2047054
export/plan0/arm9_main/sub_2047054_02047054.c
- docs/function_notes/agent_02.md:201 touch panel init: sub_214E788(10,4,...), sets sampling mode, sets the enable flag
sub_20470C4
export/plan0/arm9_main/sub_20470C4_020470C4.c
- docs/function_notes/agent_02.md:202 initialises a 2-deep touch history record (positions 255, down flag 0)
sub_2047104
export/plan0/arm9_main/sub_2047104_02047104.c
- docs/function_notes/agent_02.md:203 allocates the 64-byte touch/mic struct (*0x021759A4), clears its flags and does one-time hardware init (sub_210F1D4)
sub_2047178
export/plan0/arm9_main/sub_2047178_02047178.c
- docs/function_notes/agent_02.md:204 resets the touch hardware if present (sub_214EB88, sub_214EADC, sub_214E994)
sub_20471B0
export/plan0/arm9_main/sub_20471B0_020471B0.c
- docs/function_notes/agent_02.md:207 loads the resident "MAR" archive image from sub_20CADE8 into a heap block and mounts it as an in-memory NARC
sub_2047220
export/plan0/arm9_main/sub_2047220_02047220.c
- docs/function_notes/agent_02.md:208 shrinks or frees the loaded archive heap block (sub_20177B0)
sub_2047250
export/plan0/arm9_main/sub_2047250_02047250.c
- docs/function_notes/agent_02.md:209 if the 0x027FFC40 value is 2, returns sign of archive state +0xA0C, else 1
sub_2047274
export/plan0/arm9_main/sub_2047274_02047274.c
- docs/function_notes/agent_02.md:210 clears bit 31 in each of the 16 12-byte archive slot entries (marks slots not loaded)
sub_20472A8
export/plan0/arm9_main/sub_20472A8_020472A8.c
- docs/function_notes/agent_02.md:211 loads the result-screen archives (/data/Scene/ResultDL.carc and ResultDL_
) into slots 14 and 15
sub_20472E4
export/plan0/arm9_main/sub_20472E4_020472E4.c
- docs/function_notes/agent_02.md:212 loads Race.carc plus Race_vs or Race_mg (by mode a2 == 3) and course-specific archives for course a1 into slots 2-7
sub_20473A8
export/plan0/arm9_main/sub_20473A8_020473A8.c
- docs/function_notes/agent_02.md:213 loads the menu archives (/data/Scene/MenuDL.carc and MenuDL_
) into slots 0 and 1
sub_20473E4
export/plan0/arm9_main/sub_20473E4_020473E4.c
- docs/function_notes/agent_02.md:214 loads KartModelMainA/B.carc, MenuDL, MainRace.carc, Main2D.carc and MainEffect.carc into slots 0-13
sub_2047468
export/plan0/arm9_main/sub_2047468_02047468.c
- docs/function_notes/agent_02.md:215 loads "%s%s.carc" built from a1 and the language suffix (sub_2048440) into archive slot a2
sub_2047498
export/plan0/arm9_main/sub_2047498_02047498.c
- docs/function_notes/agent_02.md:216 loads file a1 into archive slot a2 (sub_204F4D0) and marks the slot loaded
sub_20474E4
export/plan0/arm9_main/sub_20474E4_020474E4.c
- docs/function_notes/agent_02.md:217 sets heap budgets for archive slots 9-12 (30/30/170/110 KB-ish units)
sub_2047544
export/plan0/arm9_main/sub_2047544_02047544.c
- docs/function_notes/agent_02.md:218 sets heap budgets for slots 0-15 and records three heap handles in the archive state
sub_2047634
export/plan0/arm9_main/sub_2047634_02047634.c
- docs/function_notes/agent_02.md:219 initialises archive slot a2: heap a1, size a3<<10 and two option bits
sub_20476AC
export/plan0/arm9_main/sub_20476AC_020476AC.c
- docs/function_notes/agent_02.md:220 scene archive load sequence by scene id: sub_2047CF0(10), sub_2048050 for slots 1, 5, 14, 16
sub_20476EC
export/plan0/arm9_main/sub_20476EC_020476EC.c
- docs/function_notes/hk_07.md:30 scene enter hook: sub_2047CF0(13) clears a slot; if sub_205E0A0(sub_2047B6C(0))==2 loads resources 5, 11, 0 via sub_2048050 (mode 2); returns sub_2047B6C(9)
sub_2047728
export/plan0/arm9_main/sub_2047728_02047728.c
- docs/function_notes/hk_07.md:31 clears slots 7 and 8 via sub_2047CF0; if sub_205E0A0 of current scene ==2 loads resource 3 via sub_2048050; returns sub_2047B6C(9)
sub_204775C
export/plan0/arm9_main/sub_204775C_0204775C.c
- docs/function_notes/hk_07.md:32 clears slot 6 via sub_2047CF0, loads resource 7 via sub_2048050(7,2); returns sub_2047B6C(9)
sub_2047780
export/plan0/arm9_main/sub_2047780_02047780.c
- docs/function_notes/NEEDS_REVIEW.md:261 probably resolves a file path for scene a1: format chosen by sub_205E0A0 type and leading '/', into a 140-byte buffer, then tries sub_2048504 (file read) over
- docs/function_notes/hk_07.md:33 probably resolves a file path for scene a1: format chosen by sub_205E0A0 type and leading '/', into a 140-byte buffer, then tries sub_2048504 (file read) over
sub_20478BC
export/plan0/arm9_main/sub_20478BC_020478BC.c
- docs/function_notes/NEEDS_REVIEW.md:262 probably the path resolver variant for other types: sub_205E0A0 type check, then tries sub_2047B30 over table off_204793C entries gated by flags at *off_2047940
- docs/function_notes/hk_07.md:34 probably the path resolver variant for other types: sub_205E0A0 type check, then tries sub_2047B30 over table off_204793C entries gated by flags at *off_2047940
sub_2047950
export/plan0/arm9_main/sub_2047950_02047950.c
- docs/function_notes/hk_07.md:35 dispatcher: sub_205E0A0(a1)==3 calls sub_20478BC, otherwise sub_2047780 (path resolve by type)
sub_2047974
export/plan0/arm9_main/sub_2047974_02047974.c
- docs/function_notes/hk_07.md:36 tries sub_2047B30 with table entry off_2047998[3], falls back to off_2047998[13]; returns first nonzero
sub_204799C
export/plan0/arm9_main/sub_204799C_0204799C.c
- docs/function_notes/hk_07.md:37 tries sub_2047B30 entries off_2047A14[5] then [9] (flag at *off_2047A18+dword_2047A1C); if type==2 tries entries [11] and [12] on flags; returns first nonzero
sub_2047A28
export/plan0/arm9_main/sub_2047A28_02047A28.c
- docs/function_notes/hk_07.md:38 chain of flag checks on *off_2047AE8 that call sub_2047B30 with table off_2047AF0 entries 17,16,15,14,19,2,1; first nonzero result returned
sub_2047B08
export/plan0/arm9_main/sub_2047B08_02047B08.c
- docs/function_notes/hk_07.md:39 tries sub_2047B30 with off_2047B2C[0], falls back to entry [18]; returns first nonzero
sub_2047B30
export/plan0/arm9_main/sub_2047B30_02047B30.c
- docs/function_notes/hk_07.md:40 formats a path into a 128-byte buffer (off_2047B64 for '/'-prefixed names, else off_2047B68) with a1 and a2, then calls sub_20182C0 (file lookup/open)
sub_2047B6C
export/plan0/arm9_main/sub_2047B6C_02047B6C.c
- docs/function_notes/hk_07.md:41 gets the current FS/archive object (sub_20364E8/sub_20364E0) and returns sub_20176B0(obj, a1) (probably slot-state getter)
sub_2047B88
export/plan0/arm9_main/sub_2047B88_02047B88.c
- docs/function_notes/hk_07.md:42 loops i=0..19 calling sub_2047CF0(i) to unload all 20 resource slots; returns last result
sub_2047BA0
export/plan0/arm9_main/sub_2047BA0_02047BA0.c
- docs/function_notes/hk_07.md:43 loads the resource group for scene id a1: always calls sub_2048050(1,a1), then a switch on a1 (0..15) issuing sub_2048050 for a fixed list of resource ids
sub_2047CF0
export/plan0/arm9_main/sub_2047CF0_02047CF0.c
- docs/function_notes/hk_07.md:44 unloads resource slot a1 (112-byte records at *off_2047DA0): if loaded and a1!=19, calls sub_2018314, updates a flag word in table dword_2047DAC when state 2
sub_2047DB8
export/plan0/arm9_main/sub_2047DB8_02047DB8.c
- docs/function_notes/hk_07.md:45 if a pending load exists in the slot record (+132), calls sub_2018344 with entry off_2047E08[index], sets +104=1 and +108=pointer; returns pointer
sub_2047E0C
export/plan0/arm9_main/sub_2047E0C_02047E0C.c
- docs/function_notes/hk_07.md:46 allocates a buffer via sub_2036B74 (top or bottom end chosen by flag +144), stores it at +132, copies via sub_214D344, flushes cache with sub_200EE58, then
sub_2047E94
export/plan0/arm9_main/sub_2047E94_02047E94.c
- docs/function_notes/hk_07.md:47 loads a file via sub_2004A30/sub_20048AC (FS): reads header, size>>8 must be <= dword_2047F74, allocates buffer via sub_2036B74, reads in chunks with
sub_2047F7C
export/plan0/arm9_main/sub_2047F7C_02047F7C.c
- docs/function_notes/hk_07.md:48 registers a loaded resource into slot record at *off_2048034+dword_2048038: copies 128-byte name via sub_213A228, stores id/flags; if state 2 and slot valid
sub_2048050
export/plan0/arm9_main/sub_2048050_02048050.c
- docs/function_notes/hk_07.md:49 resource loader by id a1 (0..18) and mode a2: if slot not loaded, builds a 128-byte path from off_204827C table via
sub_2048284
export/plan0/arm9_main/sub_2048284_02048284.c
- docs/function_notes/hk_07.md:50 formats path into a2 with sub_200D9E0 and off_20482A8, using a1 and locale/code string from sub_2048474 (probably "/data/Scene/%s_%s.carc" style)
sub_20482AC
export/plan0/arm9_main/sub_20482AC_020482AC.c
- docs/function_notes/hk_07.md:51 if *a2 nonzero, formats scene path into a1 via sub_200D9E0 with off_20482EC (.carc style) using a2, table entry from off_20482E4 and sub_2048474 code
sub_20482F0
export/plan0/arm9_main/sub_20482F0_020482F0.c
- docs/function_notes/hk_07.md:52 if *a2 nonzero formats constant path off_2048320 into result (scene path with %s%s); else returns result unchanged
sub_2048324
export/plan0/arm9_main/sub_2048324_02048324.c
- docs/function_notes/hk_07.md:53 formats StaffRoll_%s%s style carc path into a1 using sub_2048474 code and off_2048348
sub_2048350
export/plan0/arm9_main/sub_2048350_02048350.c
- docs/function_notes/hk_07.md:54 formats /data/Scene/%s%s_%s%s path into a1; suffix off_204838C or off_2048390 chosen by *off_2048388+120==1; plus sub_2048474 code
sub_20483A0
export/plan0/arm9_main/sub_20483A0_020483A0.c
- docs/function_notes/hk_07.md:55 formats scene path into a1 like sub_2048350, with suffix off_20483D0 or off_20483D4 chosen by field +120 of *off_20483CC
sub_20483E4
export/plan0/arm9_main/sub_20483E4_020483E4.c
- docs/function_notes/hk_07.md:56 if *a2 nonzero formats constant path off_2048408 into result; else unchanged
sub_204840C
export/plan0/arm9_main/sub_204840C_0204840C.c
- docs/function_notes/hk_07.md:57 if *a2 nonzero formats path with off_204843C, a2 and sub_2048474 code into a1; returns result otherwise
sub_2048440
export/plan0/arm9_main/sub_2048440_02048440.c
- docs/function_notes/hk_07.md:58 returns a string pointer from off_2048470[v], v = byte at *off_2048464+dword_2048468, plus 5 when state 2 and sub-state 1 (probably string/locale table lookup)
sub_2048474
export/plan0/arm9_main/sub_2048474_02048474.c
- docs/function_notes/hk_07.md:59 returns string from off_2048494[v], v = field +4 of *off_2048490, forced to 6 when state 2 and sub-state 1 (probably language/region code table)
sub_2048498
export/plan0/arm9_main/sub_2048498_02048498.c
- docs/function_notes/hk_07.md:60 formats /data/Course/%s%s%s.carc (or Tex) into a1; a2 selects entry from off_20484FC table, suffix from a3 and whether state==2 with entry 1
sub_2048504
export/plan0/arm9_main/sub_2048504_02048504.c
- docs/function_notes/hk_07.md:61 reads a whole file via sub_2004DB0/sub_2004A30 (FS): size = end-start, allocates heap buffer via sub_2036B74, reads with sub_20048AC, returns buffer pointer or
sub_2048590
export/plan0/arm9_main/sub_2048590_02048590.c
- docs/function_notes/hk_07.md:62 reads a file record at *off_2048634+dword_2048638: returns -1 if flag bit0 set; closes first if bit4; sub_2004A30 opens, sub_2036BEC allocates size
sub_204863C
export/plan0/arm9_main/sub_204863C_0204863C.c
- docs/function_notes/NEEDS_REVIEW.md:263 probably reads a fixed-size file chunk: sub_2004D80 + sub_2004A30 open the FS file, if a3 fits in the file size sub_20048AC reads a3 bytes into a2, sub_20049E8
- docs/function_notes/hk_07.md:63 probably reads a fixed-size file chunk: sub_2004D80 + sub_2004A30 open the FS file, if a3 fits in the file size sub_20048AC reads a3 bytes into a2, sub_20049E8
sub_2048684
export/plan0/arm9_main/sub_2048684_02048684.c
- docs/function_notes/NEEDS_REVIEW.md:264 probably FS file read into a2 (sub_20048AC) like sub_204863C, but a3 acts as a max size check (fails if file larger than a3 when a3 nonzero)
- docs/function_notes/hk_07.md:64 probably FS file read into a2 (sub_20048AC) like sub_204863C, but a3 acts as a max size check (fails if file larger than a3 when a3 nonzero)
sub_20486D4
export/plan0/arm9_main/sub_20486D4_020486D4.c
- docs/function_notes/NEEDS_REVIEW.md:265 probably FS/resource system init: allocates 20 x 112-byte slot records (sub_2036BEC) and a 32-byte buffer (sub_2036B74), optional sub_2004DFC reads, clears 16
- docs/function_notes/hk_07.md:65 probably FS/resource system init: allocates 20 x 112-byte slot records (sub_2036BEC) and a 32-byte buffer (sub_2036B74), optional sub_2004DFC reads, clears 16
sub_20487A0
export/plan0/arm9_main/sub_20487A0_020487A0.c
- docs/function_notes/hk_07.md:66 clears one of 16 entries (12-byte records at *off_20487CC+dword_20487D0): zeroes first word and sets/masks flag word via dword_20487D4/D8/DC
sub_20487E0
export/plan0/arm9_main/sub_20487E0_020487E0.c
- docs/function_notes/hk_07.md:67 copies a1 to a2 via sub_214D344 then flushes data cache with sub_200EE58 (DC_StoreRange); returns its result
sub_20487FC
export/plan0/arm9_main/sub_20487FC_020487FC.c
- docs/function_notes/NEEDS_REVIEW.md:266 probably scene main loop (4032 bytes): installs 8 callbacks from a2 into object at off_20497BC (+236..+264), sets state 6, loads scene via sub_2047BA0
- docs/function_notes/hk_07.md:68 probably scene main loop (4032 bytes): installs 8 callbacks from a2 into object at off_20497BC (+236..+264), sets state 6, loads scene via sub_2047BA0
sub_20497F0
export/plan0/arm9_main/sub_20497F0_020497F0.c
- docs/function_notes/hk_07.md:69 thunk: calls function pointer off_2049800 with dword_2049804 and a1 (probably display engine B dispatch)
sub_2049808
export/plan0/arm9_main/sub_2049808_02049808.c
- docs/function_notes/hk_07.md:70 thunk: calls function pointer off_2049818 with dword_204981C and a1 (probably display engine A dispatch)
sub_2049820
export/plan0/arm9_main/sub_2049820_02049820.c
- docs/function_notes/hk_07.md:71 getter: returns bit 15 of the word at off_2049834 (probably a status flag)
sub_2049838
export/plan0/arm9_main/sub_2049838_02049838.c
- docs/function_notes/hk_07.md:72 getter: returns state word at +268 of object *off_2049848 (current scene state)
sub_204984C
export/plan0/arm9_main/sub_204984C_0204984C.c
- docs/function_notes/NEEDS_REVIEW.md:267 probably per-frame input/HUD step: if off_2049978 object is active, sub_2120644 result maps to sub_2049E38 mode 4/5/6; else checks racer state at off_204997C
- docs/function_notes/hk_07.md:73 probably per-frame input/HUD step: if off_2049978 object is active, sub_2120644 result maps to sub_2049E38 mode 4/5/6; else checks racer state at off_204997C
sub_2049980
export/plan0/arm9_main/sub_2049980_02049980.c
- docs/function_notes/hk_07.md:74 thunk: tail-jumps through off_2049988 with a1
sub_204998C
export/plan0/arm9_main/sub_204998C_0204998C.c
- docs/function_notes/NEEDS_REVIEW.md:268 probably predicate: returns 1 if the current screen/object is blocked (state word off_2049A94 ==2, record at *off_2049A98 non-empty, or type checks via
- docs/function_notes/hk_07.md:75 probably predicate: returns 1 if the current screen/object is blocked (state word off_2049A94 ==2, record at *off_2049A98 non-empty, or type checks via
sub_2049AA4
export/plan0/arm9_main/sub_2049AA4_02049AA4.c
- docs/function_notes/NEEDS_REVIEW.md:269 probably predicate: returns 0 if blocked (state 2, or menu record busy, or field +22 of *off_2049B68 set); otherwise returns true when type checks via
- docs/function_notes/hk_07.md:76 probably predicate: returns 0 if blocked (state 2, or menu record busy, or field +22 of *off_2049B68 set); otherwise returns true when type checks via
sub_2049B6C
export/plan0/arm9_main/sub_2049B6C_02049B6C.c
- docs/function_notes/NEEDS_REVIEW.md:270 probably returns 1 when a UI flag is set: bit 0x10 at +1884 of off_2049C34 in mode 5, or flags +277 (0x80 clear, 0x10 set) of object off_2049C38
- docs/function_notes/hk_07.md:77 probably returns 1 when a UI flag is set: bit 0x10 at +1884 of off_2049C34 in mode 5, or flags +277 (0x80 clear, 0x10 set) of object off_2049C38
sub_2049C3C
export/plan0/arm9_main/sub_2049C3C_02049C3C.c
- docs/function_notes/NEEDS_REVIEW.md:271 probably allocates a 292-byte object at off_2049D44 (sub_2036BEC) plus 1024-byte buffer (sub_2036B74), sets state 6, copies 1024 bytes via sub_200E28C from
- docs/function_notes/hk_07.md:78 probably allocates a 292-byte object at off_2049D44 (sub_2036BEC) plus 1024-byte buffer (sub_2036B74), sets state 6, copies 1024 bytes via sub_200E28C from
sub_2049E38
export/plan0/arm9_main/sub_2049E38_02049E38.c
- docs/function_notes/NEEDS_REVIEW.md:272 probably sets scene mode a1 and flag into object *off_2049F54 (+280/+284), calls sub_2049F60 and sub_2105FCC, optional sub_204AC10(0); then sub_2148908 or a
- docs/function_notes/hk_07.md:79 probably sets scene mode a1 and flag into object *off_2049F54 (+280/+284), calls sub_2049F60 and sub_2105FCC, optional sub_204AC10(0); then sub_2148908 or a
sub_2049F60
export/plan0/arm9_main/sub_2049F60_02049F60.c
- docs/function_notes/NEEDS_REVIEW.md:273 probably per-frame screen step: clears +288, sub_212B144, sub_212AD28 mode, sub_2039478/sub_203940C, sub_2000142 (VBlank wait), sub_2105B48
- docs/function_notes/hk_07.md:80 probably per-frame screen step: clears +288, sub_212B144, sub_212AD28 mode, sub_2039478/sub_203940C, sub_2000142 (VBlank wait), sub_2105B48
sub_204A1A8
export/plan0/arm9_main/sub_204A1A8_0204A1A8.c
- docs/function_notes/hk_07.md:81 noreturn infinite frame loop, the same step as sub_2049F60 but for object at off_204A330 (sub_200E01C, sub_212B144, sub_2000142 VBlank wait)
sub_204A340
export/plan0/arm9_main/sub_204A340_0204A340.c
- docs/function_notes/NEEDS_REVIEW.md:274 probably predicate for allowing an action: switch on a1 (0,2,3,7,11,14) and a2 (sub-id) returns 0 for listed pairs; case 2/15 calls sub_219E098 and
- docs/function_notes/hk_07.md:82 probably predicate for allowing an action: switch on a1 (0,2,3,7,11,14) and a2 (sub-id) returns 0 for listed pairs; case 2/15 calls sub_219E098 and
sub_204A428
export/plan0/arm9_main/sub_204A428_0204A428.c
- docs/function_notes/NEEDS_REVIEW.md:275 probably maps a1 (0..11) to a result code in a2 (0, 4, 69, 70); for a1==2 checks type of object off_204A4D4 (53 gives 69, 54 gives 70); returns 1 when mapped
- docs/function_notes/hk_07.md:83 probably maps a1 (0..11) to a result code in a2 (0, 4, 69, 70); for a1==2 checks type of object off_204A4D4 (53 gives 69, 54 gives 70); returns 1 when mapped
sub_204A4D8
export/plan0/arm9_main/sub_204A4D8_0204A4D8.c
- docs/function_notes/hk_07.md:84 thunk: tail-calls off_204A4E0
sub_204A4E4
export/plan0/arm9_main/sub_204A4E4_0204A4E4.c
- docs/function_notes/hk_07.md:85 getter: returns s16 at +262 of object *off_204A504, or -1 when its state at +268 is 6
sub_204A508
export/plan0/arm9_main/sub_204A508_0204A508.c
- docs/function_notes/hk_07.md:86 getter: returns s16 at +260 of object *off_204A528, or -1 when its state at +268 is 6
sub_204A52C
export/plan0/arm9_main/sub_204A52C_0204A52C.c
- docs/function_notes/hk_07.md:87 getter: returns word +228 (step/frame counter) of object *off_204A53C
sub_204A540
export/plan0/arm9_main/sub_204A540_0204A540.c
- docs/function_notes/hk_07.md:88 stub, returns 0
sub_204A548
export/plan0/arm9_main/sub_204A548_0204A548.c
- docs/function_notes/hk_07.md:89 stub, returns 1
sub_204A550
export/plan0/arm9_main/sub_204A550_0204A550.c
- docs/function_notes/hk_07.md:90 packs 8 function pointers from table off_204A594 into a local array and calls sub_20487FC(a1, array) (scene main loop launcher); returns 0
sub_204A598
export/plan0/arm9_main/sub_204A598_0204A598.c
- docs/function_notes/NEEDS_REVIEW.md:276 probably queries sub_21A23A8; if a1 non-null and result nonzero, writes a1[2]=7 when *a1==7 else 0; returns the result
- docs/function_notes/hk_07.md:91 probably queries sub_21A23A8; if a1 non-null and result nonzero, writes a1[2]=7 when *a1==7 else 0; returns the result
sub_204A5E8
export/plan0/arm9_main/sub_204A5E8_0204A5E8.c
- docs/function_notes/hk_07.md:92 thunk: tail-calls off_204A5F0
sub_204A5F8
export/plan0/arm9_main/sub_204A5F8_0204A5F8.c
- docs/function_notes/NEEDS_REVIEW.md:277 probably controller/input init: object from sub_20364E8/E0, sub_20399A8, sub_2043C14 (controller slot records), then sub_21A23D4 on the result
- docs/function_notes/hk_07.md:94 probably controller/input init: object from sub_20364E8/E0, sub_20399A8, sub_2043C14 (controller slot records), then sub_21A23D4 on the result
sub_204A620
export/plan0/arm9_main/sub_204A620_0204A620.c
- docs/function_notes/hk_07.md:95 predicate: object type at +8 == 2 and 2 * u16 at +4 > dword_204A64C (probably stream has more entries)
sub_204A650
export/plan0/arm9_main/sub_204A650_0204A650.c
- docs/function_notes/hk_07.md:96 predicate: returns whether object type at +8 == 3
sub_204A664
export/plan0/arm9_main/sub_204A664_0204A664.c
- docs/function_notes/NEEDS_REVIEW.md:278 probably decodes the next 16-bit flag word from a packed byte stream (type 2 object; cursor +4/+6, bits 0x01..0x80 expanded to 0..0x180/0x40/0x80 fields)
- docs/function_notes/hk_07.md:97 probably decodes the next 16-bit flag word from a packed byte stream (type 2 object; cursor +4/+6, bits 0x01..0x80 expanded to 0..0x180/0x40/0x80 fields)
sub_204A798
export/plan0/arm9_main/sub_204A798_0204A798.c
- docs/function_notes/NEEDS_REVIEW.md:279 probably encodes one 16-bit flag word into a packed byte stream (type 1 object) with run-length style repeat; grows the buffer and flushes via sub_200EE58 when
- docs/function_notes/hk_07.md:98 probably encodes one 16-bit flag word into a packed byte stream (type 1 object) with run-length style repeat; grows the buffer and flushes via sub_200EE58 when
sub_204A904
export/plan0/arm9_main/sub_204A904_0204A904.c
- docs/function_notes/hk_07.md:99 resets stream object type at +8 to 0
sub_204A910
export/plan0/arm9_main/sub_204A910_0204A910.c
- docs/function_notes/hk_07.md:100 resets stream index and cursor to 0 and sets type +8 to 2 (start decoding)
sub_204A928
export/plan0/arm9_main/sub_204A928_0204A928.c
- docs/function_notes/hk_07.md:101 if type==1 (encoding), writes 2 * count into *result, sets type 0, and flushes with sub_200EE58
sub_204A978
export/plan0/arm9_main/sub_204A978_0204A978.c
- docs/function_notes/NEEDS_REVIEW.md:280 probably starts encoding: if buffer pointer set, zeroes it, clears flag, zero-fills via sub_214D168 once (size dword_204A9E0), sets type +8 = 1
- docs/function_notes/hk_07.md:102 probably starts encoding: if buffer pointer set, zeroes it, clears flag, zero-fills via sub_214D168 once (size dword_204A9E0), sets type +8 = 1
sub_204A9E4
export/plan0/arm9_main/sub_204A9E4_0204A9E4.c
- docs/function_notes/hk_07.md:103 resets stream object: index, cursor and type +8 to 0
sub_204A9F8
export/plan0/arm9_main/sub_204A9F8_0204A9F8.c
- docs/function_notes/hk_07.md:104 sets *result = 0 (clears a pointer slot)
sub_204AA04
export/plan0/arm9_main/sub_204AA04_0204AA04.c
- docs/function_notes/hk_07.md:105 allocates dword_204AA24 bytes from heap a2 via sub_2036BEC, stores the pointer at *a1 and returns it
sub_204AA28
export/plan0/arm9_main/sub_204AA28_0204AA28.c
- docs/function_notes/hk_07.md:106 if state at off_204AA58 != 2, sets bit 2 of word +28 of object *off_204AA5C from bit 0 of a1; returns the new word
sub_204AA60
export/plan0/arm9_main/sub_204AA60_0204AA60.c
- docs/function_notes/hk_07.md:107 returns a buffer pointer chosen by mode at +32 of off_204AAA8: mode 0/3 gives base+96, mode 1/2 gives off_204AAAC + dword_204AAB0, else 0
sub_204AAB4
export/plan0/arm9_main/sub_204AAB4_0204AAB4.c
- docs/function_notes/NEEDS_REVIEW.md:281 probably sets two sound/channel values at +72 and +76 of *off_204AB60 from a1/a2 (0 -> 1, 1 -> 0); calls sub_214FBA8(0/1, value) when changed; returns 1 if
- docs/function_notes/hk_07.md:108 probably sets two sound/channel values at +72 and +76 of *off_204AB60 from a1/a2 (0 -> 1, 1 -> 0); calls sub_214FBA8(0/1, value) when changed; returns 1 if
sub_204AB64
export/plan0/arm9_main/sub_204AB64_0204AB64.c
- docs/function_notes/hk_07.md:109 if bit0 of +28 of *off_204ABA4 is set, calls sub_210DCA8(handle at +8, a1) (probably sound stop/volume on a handle); returns sign-extended bit0
sub_204ABA8
export/plan0/arm9_main/sub_204ABA8_0204ABA8.c
- docs/function_notes/hk_07.md:110 if bit0 clear and bit1 set in +28 of *off_204AC0C, calls sub_210DC7C(handle at +8) to release the player, then clears bit1
sub_204AC10
export/plan0/arm9_main/sub_204AC10_0204AC10.c
- docs/function_notes/hk_07.md:111 if bit0 set in +28 of *off_204AC5C, reads master volume via sub_210D960, calls sub_210DCA8(handle +8, vol), then clears bit0
sub_204AC60
export/plan0/arm9_main/sub_204AC60_0204AC60.c
- docs/function_notes/hk_07.md:112 if bit1 set and bit0 clear in +28 of off_204ACC8, sets bit0 and calls sub_210DCB8(handle +8, off_204ACCC) to start a sequence
sub_204ACD0
export/plan0/arm9_main/sub_204ACD0_0204ACD0.c
- docs/function_notes/hk_07.md:113 if bit1 clear in +28 of *off_204AD20, sets bit1 and calls sub_210F8B0(handle +8, a1, 255, bit0) (sound start, reloads wave data)
sub_204AD24
export/plan0/arm9_main/sub_204AD24_0204AD24.c
- docs/function_notes/hk_07.md:114 calls off_204AD40 with field +36 of *off_204AD3C and constant 3 (thin wrapper)
sub_204AD44
export/plan0/arm9_main/sub_204AD44_0204AD44.c
- docs/function_notes/NEEDS_REVIEW.md:282 probably initialises a player/race record at off_204AF5C: sub_200FDDC reads 6 bytes, clears 20 bytes at +42, copies 2count bytes via sub_214D1FC, maps type
- docs/function_notes/hk_07.md:115 probably initialises a player/race record at off_204AF5C: sub_200FDDC reads 6 bytes, clears 20 bytes at +42, copies 2count bytes via sub_214D1FC, maps type
sub_204AF70
export/plan0/arm9_main/sub_204AF70_0204AF70.c
- docs/function_notes/NEEDS_REVIEW.md:283 probably allocates a 124-byte object at *off_204AFCC from heap a1 (sub_2036BEC), sets +36 to a buffer from sub_20180E0 over the range sub_200F168..sub_200F17C
- docs/function_notes/hk_07.md:116 probably allocates a 124-byte object at *off_204AFCC from heap a1 (sub_2036BEC), sets +36 to a buffer from sub_20180E0 over the range sub_200F168..sub_200F17C
sub_204AFD0
export/plan0/arm9_main/sub_204AFD0_0204AFD0.c
- docs/function_notes/hk_07.md:117 packs 8 function pointers from off_204B014 into a local array and calls sub_20487FC(a1, array) (scene main loop launcher, second table); returns 0
sub_204B018
export/plan0/arm9_main/sub_204B018_0204B018.c
- docs/function_notes/hk_07.md:118 thunk: tail-calls off_204B020 with a1
sub_204B024
export/plan0/arm9_main/sub_204B024_0204B024.c
- docs/function_notes/hk_07.md:119 thunk: tail-calls off_204B02C
sub_204B030
export/plan0/arm9_main/sub_204B030_0204B030.c
- docs/function_notes/hk_08.md:2 thunk; tail-calls indirect pointer off_204B038 with no arguments.
sub_204B03C
export/plan0/arm9_main/sub_204B03C_0204B03C.c
- docs/function_notes/hk_08.md:3 if state byte at *off_204B080+32 == 3 calls sub_2059C34/sub_2059EA4/sub_2059E1C; then chains sub_20364E8, sub_20364E0, sub_202F2B4 (probably per-frame step).
sub_204B084
export/plan0/arm9_main/sub_204B084_0204B084.c
- docs/function_notes/NEEDS_REVIEW.md:284 probably in-place XOR decrypt of 32-bit words with keystream from tables off_204B128..off_204B134 (11/17/19/29 counters); seed from sub_204B20C.
- docs/function_notes/hk_08.md:4 probably in-place XOR decrypt of 32-bit words with keystream from tables off_204B128..off_204B134 (11/17/19/29 counters); seed from sub_204B20C.
sub_204B138
export/plan0/arm9_main/sub_204B138_0204B138.c
- docs/function_notes/NEEDS_REVIEW.md:285 probably XOR encrypt of a buffer (inverse of sub_204B084); seed from sub_200F5AC and table off_204B1FC via sub_204B20C; returns final counter.
- docs/function_notes/hk_08.md:5 probably XOR encrypt of a buffer (inverse of sub_204B084); seed from sub_200F5AC and table off_204B1FC via sub_204B20C; returns final counter.
sub_204B20C
export/plan0/arm9_main/sub_204B20C_0204B20C.c
- docs/function_notes/NEEDS_REVIEW.md:286 probably reverse lookup over a 29-entry table off_204B254 xored with key sums; returns matching index or -1.
- docs/function_notes/hk_08.md:6 probably reverse lookup over a 29-entry table off_204B254 xored with key sums; returns matching index or -1.
sub_204B258
export/plan0/arm9_main/sub_204B258_0204B258.c
- docs/function_notes/hk_08.md:7 if a3==0 zeroes two bytes at a1+a2-4/-3; returns whether sub_204B2CC() == 0 (probably checksum verify).
sub_204B284
export/plan0/arm9_main/sub_204B284_0204B284.c
- docs/function_notes/NEEDS_REVIEW.md:287 probably writes a 4-byte trailer at buffer end (high half of sub_200F5AC when a3==0, then CRC16 from sub_204B2CC); returns crc>>8.
- docs/function_notes/hk_08.md:8 probably writes a 4-byte trailer at buffer end (high half of sub_200F5AC when a3==0, then CRC16 from sub_204B2CC); returns crc>>8.
sub_204B2CC
export/plan0/arm9_main/sub_204B2CC_0204B2CC.c
- docs/function_notes/hk_08.md:9 bitwise CRC-16 over a2 bytes at a1, polynomial from dword_204B340/off_204B33C; returns the 16-bit CRC.
sub_204B344
export/plan0/arm9_main/sub_204B344_0204B344.c
- docs/function_notes/hk_08.md:10 stores status 4 in state struct *off_204B3A0 with a1 at +4; for status 1 or 2 calls sub_2049980(1 or 2); else returns status.
sub_204B3A4
export/plan0/arm9_main/sub_204B3A4_0204B3A4.c
- docs/function_notes/hk_08.md:11 stores sub_200CD28() in struct off_204B3D8 +8; returns 0 if handle is -3, else calls sub_214579C and returns 1.
sub_204B3DC
export/plan0/arm9_main/sub_204B3DC_0204B3DC.c
- docs/function_notes/hk_08.md:12 if handle at struct off_204B414 +8 is not -3, calls sub_214578C and sub_200CD80 to release it, then sets it to -3.
sub_204B418
export/plan0/arm9_main/sub_204B418_0204B418.c
- docs/function_notes/hk_08.md:13 trivial wrapper; forwards a1,a2 to sub_204B458.
sub_204B430
export/plan0/arm9_main/sub_204B430_0204B430.c
- docs/function_notes/hk_08.md:14 stores a2 at struct off_204B454 +24, then forwards a1,a3 to sub_204B458.
sub_204B458
export/plan0/arm9_main/sub_204B458_0204B458.c
- docs/function_notes/hk_08.md:15 queues a transfer in struct off_204B510 (dst, src, len, mode, arg); mode 2 starts sub_2145E8C with off_204B514; else sub_204B284/sub_204B138 then sub_204B518.
sub_204B518
export/plan0/arm9_main/sub_204B518_0204B518.c
- docs/function_notes/hk_08.md:16 if struct off_204B56C is busy and sub_2145D2C ok, calls sub_204B3A4 then starts async sub_2145E8C with callback off_204B570; returns 1.
sub_204B574
export/plan0/arm9_main/sub_204B574_0204B574.c
- docs/function_notes/hk_08.md:17 if sub_21457EC() reports done, releases handle, clears +16 and returns sub_204B344(status); else sub_204BA7C and restarts sub_2145E8C.
sub_204B5DC
export/plan0/arm9_main/sub_204B5DC_0204B5DC.c
- docs/function_notes/hk_08.md:18 completion handler: reads status from sub_21457EC, releases handle, maps it to 0/1/2, chains via sub_204B458, then callback a1 or sub_204B344/sub_204BA7C.
sub_204B6CC
export/plan0/arm9_main/sub_204B6CC_0204B6CC.c
- docs/function_notes/hk_08.md:19 stores a2 at struct off_204B6F4 +24, then forwards to sub_204B714 with mode 1.
sub_204B6F8
export/plan0/arm9_main/sub_204B6F8_0204B6F8.c
- docs/function_notes/hk_08.md:20 trivial wrapper; forwards to sub_204B714 with mode 0.
sub_204B714
export/plan0/arm9_main/sub_204B714_0204B714.c
- docs/function_notes/hk_08.md:21 starts a mode-3 request in struct off_204B7B0 (busy check, sub_204B3A4, fill fields, sub_200EE3C, sub_2145E8C with callback off_204B7B4).
sub_204B7B8
export/plan0/arm9_main/sub_204B7B8_0204B7B8.c
- docs/function_notes/hk_08.md:22 completion handler for mode-3 request: maps status, runs sub_204B084 decrypt and sub_204B258/sub_204B960 checks, chains via sub_204B714, invokes callback a1.
sub_204B960
export/plan0/arm9_main/sub_204B960_0204B960.c
- docs/function_notes/hk_08.md:23 compares 8 bytes at a1 with an 8-byte signature from sub_2133458 (dword_204B9A4/dword_204B9A8); returns 1 on match.
sub_204B9AC
export/plan0/arm9_main/sub_204B9AC_0204B9AC.c
- docs/function_notes/hk_08.md:24 resets state struct off_204BA24 (zeroes fields, handles to -3) unless WORD at off_204BA20 == 2 or sub_200E8FC() is true, which only clears +12.
sub_204BA2C
export/plan0/arm9_main/sub_204BA2C_0204BA2C.c
- docs/function_notes/hk_08.md:25 allocates a 112-byte object via sub_2036BEC into off_204BA70; if word at off_204BA74 != 2 reads two 32-bit values via sub_2036B74; clears +12; returns it.
sub_204BA7C
export/plan0/arm9_main/sub_204BA7C_0204BA7C.c
- docs/function_notes/hk_08.md:26 trivial; zeroes the first word of struct *off_204BA88 and returns its previous value.
sub_204BA8C
export/plan0/arm9_main/sub_204BA8C_0204BA8C.c
- docs/function_notes/NEEDS_REVIEW.md:288 probably drains or initializes a 1024-byte ring buffer at off_204BAD4+1024 via sub_200E070, sub_200DF68, sub_200E084; returns the final flag.
- docs/function_notes/hk_08.md:27 probably drains or initializes a 1024-byte ring buffer at off_204BAD4+1024 via sub_200E070, sub_200DF68, sub_200E084; returns the final flag.
sub_204BAD8
export/plan0/arm9_main/sub_204BAD8_0204BAD8.c
- docs/function_notes/NEEDS_REVIEW.md:289 probably sets up a 1024-byte queue at off_204BB2C+256 via sub_200E28C with buffer off_204BB30, then sub_200DF68; returns its result.
- docs/function_notes/hk_08.md:28 probably sets up a 1024-byte queue at off_204BB2C+256 via sub_200E28C with buffer off_204BB30, then sub_200DF68; returns its result.
sub_204BB34
export/plan0/arm9_main/sub_204BB34_0204BB34.c
- docs/function_notes/NEEDS_REVIEW.md:290 probably worker loop: dequeues items from off_204BC9C under lock; status-1 items read two 1024-byte blocks then sub_204D18C, else sub_204D0BC.
- docs/function_notes/hk_08.md:29 probably worker loop: dequeues items from off_204BC9C under lock; status-1 items read two 1024-byte blocks then sub_204D18C, else sub_204D0BC.
sub_204BC88
export/plan0/arm9_main/sub_204BC88_0204BC88.c
- docs/function_notes/hk_08.md:30 IDA artifact; calls through an uninitialized stack function pointer, effectively an indirect tail call; probably a broken thunk.
sub_204BCA0
export/plan0/arm9_main/sub_204BCA0_0204BCA0.c
- docs/function_notes/hk_08.md:31 thunk; calls function pointer off_204BCAC with argument off_204BCB0.
sub_204BCB4
export/plan0/arm9_main/sub_204BCB4_0204BCB4.c
- docs/function_notes/hk_08.md:32 under a sub_200FCA0/sub_200FCB4 lock, stores a1 with bit 0 cleared into word 708 of struct off_204BCD8 (probably sets a current pointer).
sub_204BCDC
export/plan0/arm9_main/sub_204BCDC_0204BCDC.c
- docs/function_notes/hk_08.md:33 trivial getter; returns word 3 of table off_204BCE8.
sub_204BCEC
export/plan0/arm9_main/sub_204BCEC_0204BCEC.c
- docs/function_notes/NEEDS_REVIEW.md:291 probably stops a streaming session on struct off_204BE04: frees buffer via callback at +20, calls sub_204BA8C or sub_2003BE0, sub_2006974, sub_214358C.
- docs/function_notes/hk_08.md:34 probably stops a streaming session on struct off_204BE04: frees buffer via callback at +20, calls sub_204BA8C or sub_2003BE0, sub_2006974, sub_214358C.
sub_204BE0C
export/plan0/arm9_main/sub_204BE0C_0204BE0C.c
- docs/function_notes/NEEDS_REVIEW.md:292 probably starts or restarts a transfer state machine on struct off_204BF34 (busy flags, sub_2143520/sub_2007008/sub_2006DDC), then sub_2144048 read.
- docs/function_notes/hk_08.md:35 probably starts or restarts a transfer state machine on struct off_204BF34 (busy flags, sub_2143520/sub_2007008/sub_2006DDC), then sub_2144048 read.
sub_204BF48
export/plan0/arm9_main/sub_204BF48_0204BF48.c
- docs/function_notes/hk_08.md:36 wrapper; if a1 is nonzero calls sub_204C090 with flag 1, else calls sub_204BFAC.
sub_204BFAC
export/plan0/arm9_main/sub_204BFAC_0204BFAC.c
- docs/function_notes/NEEDS_REVIEW.md:293 probably one-time init guarded by *off_204C080[0]: calls sub_204C28C, builds a 16-entry pointer table at off_204C084+272, sub_2006A10; returns 1 on first call.
- docs/function_notes/hk_08.md:37 probably one-time init guarded by *off_204C080[0]: calls sub_204C28C, builds a 16-entry pointer table at off_204C084+272, sub_2006A10; returns 1 on first call.
sub_204C090
export/plan0/arm9_main/sub_204C090_0204C090.c
- docs/function_notes/NEEDS_REVIEW.md:294 probably one-time larger init guarded by *off_204C26C[0]: carves 560-word blocks via sub_2004D80, calls sub_204D6F4 and sub_2006E74, then sub_204BAD8.
- docs/function_notes/hk_08.md:38 probably one-time larger init guarded by *off_204C26C[0]: carves 560-word blocks via sub_2004D80, calls sub_204D6F4 and sub_2006E74, then sub_204BAD8.
sub_204C28C
export/plan0/arm9_main/sub_204C28C_0204C28C.c
- docs/function_notes/hk_08.md:39 resets request struct off_204C314 (a1 at +0x30, a2..a4 at +0x10..+0x18, +0x2C=14) and calls sub_214358C with callback off_204C31C; sub_200FD1C on failure.
sub_204C320
export/plan0/arm9_main/sub_204C320_0204C320.c
- docs/function_notes/NEEDS_REVIEW.md:295 probably message handler (command at a1, sub-id at +4) for a stream/file service on off_204C7D4; issues sub_2006D78/sub_2006DDC reads, calls sub_204CF5C.
- docs/function_notes/hk_08.md:40 probably message handler (command at a1, sub-id at +4) for a stream/file service on off_204C7D4; issues sub_2006D78/sub_2006DDC reads, calls sub_204CF5C.
sub_204C7E4
export/plan0/arm9_main/sub_204C7E4_0204C7E4.c
- docs/function_notes/NEEDS_REVIEW.md:296 probably cache/block request handler: command 10 registers entries in off_204CC7C via sub_204D110 and sub_204BCA0; command 13 sets up 1024-byte reads.
- docs/function_notes/hk_08.md:41 probably cache/block request handler: command 10 registers entries in off_204CC7C via sub_204D110 and sub_204BCA0; command 13 sets up 1024-byte reads.
sub_204CC94
export/plan0/arm9_main/sub_204CC94_0204CC94.c
- docs/function_notes/NEEDS_REVIEW.md:297 probably message dispatcher on struct off_204CE54: code 7 issues sub_2144048 read; 9 clears a bit; 21 sets a bit and calls sub_200692C or sub_20068F4.
- docs/function_notes/hk_08.md:42 probably message dispatcher on struct off_204CE54: code 7 issues sub_2144048 read; 9 clears a bit; 21 sets a bit and calls sub_200692C or sub_20068F4.
sub_204CE60
export/plan0/arm9_main/sub_204CE60_0204CE60.c
- docs/function_notes/NEEDS_REVIEW.md:298 probably busy-flag transfer starter on struct off_204CF50: sets flag, calls sub_204D28C, then sub_2144048 transfer with callback off_204CF58.
- docs/function_notes/hk_08.md:43 probably busy-flag transfer starter on struct off_204CF50: sets flag, calls sub_204D28C, then sub_2144048 transfer with callback off_204CF58.
sub_204CF5C
export/plan0/arm9_main/sub_204CF5C_0204CF5C.c
- docs/function_notes/NEEDS_REVIEW.md:299 probably queues a device read request from a1 (buffer at off_204D0B4 +0x1C..+0x28), reallocating off_204D0B0[703] when needed; submits via sub_2006D3C.
- docs/function_notes/hk_08.md:44 probably queues a device read request from a1 (buffer at off_204D0B4 +0x1C..+0x28), reallocating off_204D0B0[703] when needed; submits via sub_2006D3C.
sub_204D0A4
export/plan0/arm9_main/sub_204D0A4_0204D0A4.c
- docs/function_notes/hk_08.md:45 IDA artifact; indirect call through an uninitialized stack function pointer, probably a broken thunk.
sub_204D0BC
export/plan0/arm9_main/sub_204D0BC_0204D0BC.c
- docs/function_notes/NEEDS_REVIEW.md:300 probably releases a block: moves entry a2 between lists via sub_204D110, clears a2+128, decrements counter at a1+18148, returns a1+0x4000.
- docs/function_notes/hk_08.md:46 probably releases a block: moves entry a2 between lists via sub_204D110, clears a2+128, decrements counter at a1+18148, returns a1+0x4000.
sub_204D110
export/plan0/arm9_main/sub_204D110_0204D110.c
- docs/function_notes/NEEDS_REVIEW.md:301 probably list-move helper under a lock: unlinks node a3 from the singly linked list headed by *a1 and pushes it onto the list headed at a2.
- docs/function_notes/hk_08.md:47 probably list-move helper under a lock: unlinks node a3 from the singly linked list headed by *a1 and pushes it onto the list headed at a2.
sub_204D18C
export/plan0/arm9_main/sub_204D18C_0204D18C.c
- docs/function_notes/NEEDS_REVIEW.md:302 probably stream-block completion handler: under lock ORs bitmask a2[34] into a1+18124; on last block submits sub_2006E74, moves block via sub_204D110.
- docs/function_notes/hk_08.md:48 probably stream-block completion handler: under lock ORs bitmask a2[34] into a1+18124; on last block submits sub_2006E74, moves block via sub_204D110.
sub_204D28C
export/plan0/arm9_main/sub_204D28C_0204D28C.c
- docs/function_notes/NEEDS_REVIEW.md:303 probably periodic scheduler on struct off_204D5B4: when idle builds a pending bitmask from list heads and submits sub_2006D3C; else sub_2006F14 plus control.
- docs/function_notes/hk_08.md:49 probably periodic scheduler on struct off_204D5B4: when idle builds a pending bitmask from list heads and submits sub_2006D3C; else sub_2006F14 plus control.
sub_204D5BC
export/plan0/arm9_main/sub_204D5BC_0204D5BC.c
- docs/function_notes/hk_08.md:50 if off_204D60C[3] and *off_204D60C are set, clears word 4805 and calls sub_204D28C (probably scheduler kick).
sub_204D610
export/plan0/arm9_main/sub_204D610_0204D610.c
- docs/function_notes/NEEDS_REVIEW.md:304 probably builds layout for four 32-byte-aligned segments from a1, creates sub-allocator via sub_20041E8/sub_2004018.
- docs/function_notes/hk_08.md:51 probably builds layout for four 32-byte-aligned segments from a1, creates sub-allocator via sub_20041E8/sub_2004018.
sub_204D6F4
export/plan0/arm9_main/sub_204D6F4_0204D6F4.c
- docs/function_notes/NEEDS_REVIEW.md:305 probably packs a block header and four segments (96-byte copy from a1) into a heap block via callback at off_204DAB4+20, copying with sub_20048AC/sub_2004840.
- docs/function_notes/hk_08.md:52 probably packs a block header and four segments (96-byte copy from a1) into a heap block via callback at off_204DAB4+20, copying with sub_20048AC/sub_2004840.
sub_204DAB8
export/plan0/arm9_main/sub_204DAB8_0204DAB8.c
- docs/function_notes/hk_08.md:53 maps a2 and state off_204DB3C[3] to a status code: a2 nonzero gives 4 or 8; a2==0 in state 2 calls sub_204CF5C if a1+56 set and returns 6 or 0; else 5.
sub_204DB40
export/plan0/arm9_main/sub_204DB40_0204DB40.c
- docs/function_notes/hk_08.md:54 trivial stub; returns 1.
sub_204DB48
export/plan0/arm9_main/sub_204DB48_0204DB48.c
- docs/function_notes/hk_08.md:55 thin wrapper; calls sub_214D1FC(a3, a2, a4) and returns 0.
sub_204DB6C
export/plan0/arm9_main/sub_204DB6C_0204DB6C.c
- docs/function_notes/NEEDS_REVIEW.md:306 probably state dispatcher on struct off_204DC80: maps state 2 to 5, returns 0 while flag +16 set, else dispatches on mode +12 to sub_204E0BC and similar.
- docs/function_notes/hk_08.md:56 probably state dispatcher on struct off_204DC80: maps state 2 to 5, returns 0 while flag +16 set, else dispatches on mode +12 to sub_204E0BC and similar.
sub_204DC8C
export/plan0/arm9_main/sub_204DC8C_0204DC8C.c
- docs/function_notes/NEEDS_REVIEW.md:307 probably polls a 16-bit counter at off_204DCE0+dword_204DCE8 against dword_204DCEC; on overflow recomputes a flag byte via sub_204DCF0 or calls sub_2050E60(5).
- docs/function_notes/hk_08.md:57 probably polls a 16-bit counter at off_204DCE0+dword_204DCE8 against dword_204DCEC; on overflow recomputes a flag byte via sub_204DCF0 or calls sub_2050E60(5).
sub_204DCF0
export/plan0/arm9_main/sub_204DCF0_0204DCF0.c
- docs/function_notes/hk_08.md:58 small bit helper; returns a byte with bit 0 of a1 kept and output bits 1..7 set per set bit of a1 (probably bit-expansion encode).
sub_204DD24
export/plan0/arm9_main/sub_204DD24_0204DD24.c
- docs/function_notes/hk_08.md:59 per-state step on struct off_204DF3C (state word +12, values 1-11, 26-36), calling sub_204E03C, sub_204DFE0, sub_204E474 and others; menu state machine.
sub_204DF5C
export/plan0/arm9_main/sub_204DF5C_0204DF5C.c
- docs/function_notes/hk_08.md:60 if counter at off_204DF84+dword_204DF88 is within limit dword_204DF8C calls sub_20533A0; otherwise sub_2050E60(5) error path.
sub_204DF90
export/plan0/arm9_main/sub_204DF90_0204DF90.c
- docs/function_notes/NEEDS_REVIEW.md:308 probably sets state 26 on struct off_204DFD4, calls sub_2007EC4 on buffer at +36 with length 54, then rounds field +36+72 with mask dword_204DFDC.
- docs/function_notes/hk_08.md:61 probably sets state 26 on struct off_204DFD4, calls sub_2007EC4 on buffer at +36 with length 54, then rounds field +36+72 with mask dword_204DFDC.
sub_204DFE0
export/plan0/arm9_main/sub_204DFE0_0204DFE0.c
- docs/function_notes/NEEDS_REVIEW.md:309 probably sets state 35 and calls sub_200B15C with a1, buffer at +36 and length 54, rounds field +36+72 with mask dword_204E038; sub_2050E60(5) on failure.
- docs/function_notes/hk_08.md:62 probably sets state 35 and calls sub_200B15C with a1, buffer at +36 and length 54, rounds field +36+72 with mask dword_204E038; sub_2050E60(5) on failure.
sub_204E03C
export/plan0/arm9_main/sub_204E03C_0204E03C.c
- docs/function_notes/NEEDS_REVIEW.md:310 probably sets state 34 and calls sub_200B610(a1); sub_2050E60(5) on failure.
- docs/function_notes/hk_08.md:63 probably sets state 34 and calls sub_200B610(a1); sub_2050E60(5) on failure.
sub_204E074
export/plan0/arm9_main/sub_204E074_0204E074.c
- docs/function_notes/hk_08.md:64 sets state 33 on struct off_204E088 and tail-calls indirect pointer off_204E08C.
sub_204E090
export/plan0/arm9_main/sub_204E090_0204E090.c
- docs/function_notes/hk_08.md:65 sets state 27 on struct off_204E0B0, clears bit 1 of flag byte at +dword_204E0B4, tail-calls indirect off_204E0B8.
sub_204E0BC
export/plan0/arm9_main/sub_204E0BC_0204E0BC.c
- docs/function_notes/hk_08.md:66 sets state 25 on struct off_204E11C and flag bit 1; probes channels 1..15 with sub_2007D50(ch, 3); if none found clears the flag and returns 2.
sub_204E128
export/plan0/arm9_main/sub_204E128_0204E128.c
- docs/function_notes/hk_08.md:67 if flag byte at off_204E198 is set, sets state 24 and probes channels 1..15 via sub_2007D50(ch, 2); none found clears flag bit 0 and returns 1.
sub_204E1A8
export/plan0/arm9_main/sub_204E1A8_0204E1A8.c
- docs/function_notes/hk_08.md:68 dispatcher on struct off_204E200: returns 0 while busy (+16); state 1 calls sub_204E29C, state 2 calls sub_204E204; state 0 sets state 1 or 2 from a1.
sub_204E204
export/plan0/arm9_main/sub_204E204_0204E204.c
- docs/function_notes/NEEDS_REVIEW.md:311 probably step function on struct off_204E294: word off_204E290 == 2 handles state 0 (flag 0x40), state 1 calls sub_204E4D8, state 28 calls sub_204E498.
- docs/function_notes/hk_08.md:69 probably step function on struct off_204E294: word off_204E290 == 2 handles state 0 (flag 0x40), state 1 calls sub_204E4D8, state 28 calls sub_204E498.
sub_204E29C
export/plan0/arm9_main/sub_204E29C_0204E29C.c
- docs/function_notes/NEEDS_REVIEW.md:312 probably step on struct off_204E2FC: state 0 sets flag 0x40 and calls sub_20536E0; state 1 calls sub_2053094(0); state 4 calls sub_204F814, sub_204E568.
- docs/function_notes/hk_08.md:70 probably step on struct off_204E2FC: state 0 sets flag 0x40 and calls sub_20536E0; state 1 calls sub_2053094(0); state 4 calls sub_204F814, sub_204E568.
sub_204E304
export/plan0/arm9_main/sub_204E304_0204E304.c
- docs/function_notes/hk_08.md:71 IDA jump-table dispatcher on code 0..20: some codes tail-call indirect pointers, 7 sets state 6, 4 calls sub_2050E60(5), 20 stores a 16-bit value.
sub_204E3B4
export/plan0/arm9_main/sub_204E3B4_0204E3B4.c
- docs/function_notes/hk_08.md:72 switch on result code: 2 calls sub_2050E60(5), 3 clears busy field at off_204E3EC+16; other codes return unchanged.
sub_204E3F0
export/plan0/arm9_main/sub_204E3F0_0204E3F0.c
- docs/function_notes/NEEDS_REVIEW.md:313 probably searches 16 slots from sub_200B1B0 (224-byte stride at off_204E46C+dword_204E470) for a 6-byte match built from a1; returns slot index or -1.
- docs/function_notes/hk_08.md:73 probably searches 16 slots from sub_200B1B0 (224-byte stride at off_204E46C+dword_204E470) for a 6-byte match built from a1; returns slot index or -1.
sub_204E474
export/plan0/arm9_main/sub_204E474_0204E474.c
- docs/function_notes/hk_08.md:74 sets state 30 on struct off_204E48C, then calls indirect off_204E494(off_204E490, 37).
sub_204E498
export/plan0/arm9_main/sub_204E498_0204E498.c
- docs/function_notes/hk_08.md:75 sets state 29 on struct off_204E4B0, then calls indirect off_204E4B8(off_204E4B4, 37).
sub_204E4BC
export/plan0/arm9_main/sub_204E4BC_0204E4BC.c
- docs/function_notes/hk_08.md:76 sets state 31 on struct off_204E4D0, then tail-calls indirect off_204E4D4.
sub_204E4D8
export/plan0/arm9_main/sub_204E4D8_0204E4D8.c
- docs/function_notes/NEEDS_REVIEW.md:314 probably sends a 2-byte header (0x90 | channel nibble, length 10) and 20-byte payload via sub_214D1FC, then sub_200BB98 and sub_200BA84; sets state 28.
- docs/function_notes/hk_08.md:77 probably sends a 2-byte header (0x90 | channel nibble, length 10) and 20-byte payload via sub_214D1FC, then sub_200BB98 and sub_200BA84; sets state 28.
sub_204E568
export/plan0/arm9_main/sub_204E568_0204E568.c
- docs/function_notes/NEEDS_REVIEW.md:315 probably sends a 37-byte message via sub_2009FF4 (header 0x80 | channel nibble) after sub_204E65C and sub_2052C5C; then sub_2009F38, sub_2007EA0, sub_204EA3C.
- docs/function_notes/hk_08.md:78 probably sends a 37-byte message via sub_2009FF4 (header 0x80 | channel nibble) after sub_204E65C and sub_2052C5C; then sub_2009F38, sub_2007EA0, sub_204EA3C.
sub_204E65C
export/plan0/arm9_main/sub_204E65C_0204E65C.c
- docs/function_notes/NEEDS_REVIEW.md:316 probably resets a per-channel control struct at a1: clears eight words at +20, bytes +56..+66 (+66 set to 0xFF) and +68, clears two buffers via sub_214D168.
- docs/function_notes/hk_08.md:79 probably resets a per-channel control struct at a1: clears eight words at +20, bytes +56..+66 (+66 set to 0xFF) and +68, clears two buffers via sub_214D168.
sub_204E6E8
export/plan0/arm9_main/sub_204E6E8_0204E6E8.c
- docs/function_notes/NEEDS_REVIEW.md:317 probably per-channel event handler (channel a1, event a2 in 1..14) on struct off_204E908: updates bitmask bytes, calls sub_2007D50 or indirect callbacks.
- docs/function_notes/hk_08.md:80 probably per-channel event handler (channel a1, event a2 in 1..14) on struct off_204E908: updates bitmask bytes, calls sub_2007D50 or indirect callbacks.
sub_204E928
export/plan0/arm9_main/sub_204E928_0204E928.c
- docs/function_notes/NEEDS_REVIEW.md:318 probably sets up transfer context off_204E9E8: stores a1, timing via sub_200BAA8 clamped to dword_204E9F4, then sub_2008880/sub_204EA14/sub_204E65C.
- docs/function_notes/hk_08.md:81 probably sets up transfer context off_204E9E8: stores a1, timing via sub_200BAA8 clamped to dword_204E9F4, then sub_2008880/sub_204EA14/sub_204E65C.
sub_204EA14
export/plan0/arm9_main/sub_204EA14_0204EA14.c
- docs/function_notes/hk_08.md:82 stores results of sub_20B3F7C(a1, 0) and sub_20B3F7C(a1, 1) into off_204EA38 +4 and +8; returns the second.
sub_204EA3C
export/plan0/arm9_main/sub_204EA3C_0204EA3C.c
- docs/function_notes/NEEDS_REVIEW.md:319 probably readiness check: true when sub_2008880(0) meets dword_204EA80 and sub_2008570 succeeds, then sub_2008310 on off_204EA90 is nonzero.
- docs/function_notes/hk_08.md:83 probably readiness check: true when sub_2008880(0) meets dword_204EA80 and sub_2008570 succeeds, then sub_2008310 on off_204EA90 is nonzero.
sub_204EA94
export/plan0/arm9_main/sub_204EA94_0204EA94.c
- docs/function_notes/hk_08.md:84 validates header pair (10, 11), calls sub_2050E60(8) on mismatch; otherwise clears busy flag +16 of struct off_204EACC and returns it.
sub_204EAD0
export/plan0/arm9_main/sub_204EAD0_0204EAD0.c
- docs/function_notes/hk_08.md:85 sets state 46 on struct off_204EB00 and sends the 4-byte word a2 on channel a1 via sub_2006D3C with callback off_204EB04; clears busy when it returns 0.
sub_204EB08
export/plan0/arm9_main/sub_204EB08_0204EB08.c
- docs/function_notes/NEEDS_REVIEW.md:320 probably pops a pending 20-byte message: checks state 1 and a flag bit in struct off_204EBA4, finds a free slot bit in mask +135, copies 20 bytes.
- docs/function_notes/hk_08.md:86 probably pops a pending 20-byte message: checks state 1 and a flag bit in struct off_204EBA4, finds a free slot bit in mask +135, copies 20 bytes.
sub_204EBB8
export/plan0/arm9_main/sub_204EBB8_0204EBB8.c
- docs/function_notes/NEEDS_REVIEW.md:321 probably unpacks an 8-byte record for index a1 from table off_204EC20 (after sub_204FF14) into six outputs: bytes +0..+4 and a 16-bit word at +6.
- docs/function_notes/hk_08.md:87 probably unpacks an 8-byte record for index a1 from table off_204EC20 (after sub_204FF14) into six outputs: bytes +0..+4 and a 16-bit word at +6.
sub_204EC28
export/plan0/arm9_main/sub_204EC28_0204EC28.c
- docs/function_notes/NEEDS_REVIEW.md:322 probably the inverse of sub_204EBB8: packs bitfields from a2 (+21, +24) into the 8-byte record for index a1 in table off_204EC98 (sub_2046828 for one field).
- docs/function_notes/hk_08.md:88 probably the inverse of sub_204EBB8: packs bitfields from a2 (+21, +24) into the 8-byte record for index a1 in table off_204EC98 (sub_2046828 for one field).
sub_204ECA0
export/plan0/arm9_main/sub_204ECA0_0204ECA0.c
- docs/function_notes/hk_08.md:89 sets state 45 on struct off_204ECD4, calls sub_2006974 on its handle, clears a masked bit field and clears busy.
sub_204ECE0
export/plan0/arm9_main/sub_204ECE0_0204ECE0.c
- docs/function_notes/NEEDS_REVIEW.md:323 probably if sub_20501B0() succeeds, writes byte a1 into buffer at off_204ECFC+dword_204ED00; returns the index.
- docs/function_notes/hk_08.md:90 probably if sub_20501B0() succeeds, writes byte a1 into buffer at off_204ECFC+dword_204ED00; returns the index.
sub_204ED04
export/plan0/arm9_main/sub_204ED04_0204ED04.c
- docs/function_notes/NEEDS_REVIEW.md:324 probably message receive: if field +2 is zero and length (+16) within limit, copies payload via sub_200EE3C/sub_214D1FC; code 21 calls sub_200692C/sub_20068F4.
- docs/function_notes/hk_08.md:91 probably message receive: if field +2 is zero and length (+16) within limit, copies payload via sub_200EE3C/sub_214D1FC; code 21 calls sub_200692C/sub_20068F4.
sub_204ED84
export/plan0/arm9_main/sub_204ED84_0204ED84.c
- docs/function_notes/NEEDS_REVIEW.md:325 probably sends a pending message from off_204EE14 when flag bit 0 is clear: sub_2050650, then clears flag bit 0 on success.
- docs/function_notes/hk_08.md:92 probably sends a pending message from off_204EE14 when flag bit 0 is clear: sub_2050650, then clears flag bit 0 on success.
sub_204EE30
export/plan0/arm9_main/sub_204EE30_0204EE30.c
- docs/function_notes/hk_08.md:93 clears flag bit 0 of the byte at off_204EE44+dword_204EE48; returns 1.
sub_204EE4C
export/plan0/arm9_main/sub_204EE4C_0204EE4C.c
- docs/function_notes/hk_08.md:94 stores a2 into per-channel record in off_204EE5C at stride 136 (field offset dword_204EE60) for index a1; returns that offset.
sub_204EE64
export/plan0/arm9_main/sub_204EE64_0204EE64.c
- docs/function_notes/hk_08.md:95 resets 12 channel slots: calls sub_2006DF8 on each channel number, zeroes one field at stride 136, then zeroes a 16-bit field at dword_204EEA8.
sub_204EEAC
export/plan0/arm9_main/sub_204EEAC_0204EEAC.c
- docs/function_notes/hk_08.md:96 thunk; tail-calls indirect pointer off_204EEB0.
sub_204EF1C
export/plan0/arm9_main/sub_204EF1C_0204EF1C.c
- docs/function_notes/hk_08.md:97 sets state 11 on struct off_204EF70 and calls sub_2144230 with buffers and sizes from the struct; sub_2050E60(2) if result is not 2.
sub_204EF88
export/plan0/arm9_main/sub_204EF88_0204EF88.c
- docs/function_notes/hk_08.md:98 if state at off_204EFC0 is 2, calls sub_2050E60(8) when the channel field equals dword_204EFC8, otherwise sub_2007008 on that channel.
sub_204EFCC
export/plan0/arm9_main/sub_204EFCC_0204EFCC.c
- docs/function_notes/hk_08.md:99 validates header pair (4, 5), calls sub_2050E60(8) on mismatch; otherwise clears busy flag +16 of struct off_204F004 and returns it.
sub_204F008
export/plan0/arm9_main/sub_204F008_0204F008.c
- docs/function_notes/NEEDS_REVIEW.md:326 probably sends a stream block: state 44 on off_204F064, stores pointer in slot, calls sub_2006D78 with callback off_204F07C; restores state on failure.
- docs/function_notes/hk_08.md:100 probably sends a stream block: state 44 on off_204F064, stores pointer in slot, calls sub_2006D78 with callback off_204F07C; restores state on failure.
sub_204F080
export/plan0/arm9_main/sub_204F080_0204F080.c
- docs/function_notes/hk_08.md:101 validates header pair (6, 7), calls sub_2050E60(8) on mismatch; second word not 7 forwards to sub_204F0B8; else clears busy flag +16 of struct off_204F0B4.
sub_204F0B8
export/plan0/arm9_main/sub_204F0B8_0204F0B8.c
- docs/function_notes/NEEDS_REVIEW.md:327 probably sends a request via sub_2006DB0 with state 43 on struct off_204F0F0; restores previous state and clears busy when the call fails.
- docs/function_notes/hk_08.md:102 probably sends a request via sub_2006DB0 with state 43 on struct off_204F0F0; restores previous state and clears busy when the call fails.
sub_204F100
export/plan0/arm9_main/sub_204F100_0204F100.c
- docs/function_notes/hk_08.md:103 validates header pair (2, 3), calls sub_2050E60(8) on mismatch; stores the 16-bit word at a1+20 into off_204F140 +dword_204F144 and clears busy.
sub_204F148
export/plan0/arm9_main/sub_204F148_0204F148.c
- docs/function_notes/NEEDS_REVIEW.md:328 probably sends a request via sub_2006DDC with channel from struct off_204F190 +135 (or 1) and callback off_204F194, state 42; restores state on failure.
- docs/function_notes/hk_08.md:104 probably sends a request via sub_2006DDC with channel from struct off_204F190 +135 (or 1) and callback off_204F194, state 42; restores state on failure.
sub_204F19C
export/plan0/arm9_main/sub_204F19C_0204F19C.c
- docs/function_notes/NEEDS_REVIEW.md:329 probably notification handler on code a1+4: code 10 calls sub_204F220; codes 2 and 8 advance a per-slot state byte at off_204F214+dword_204F218.
- docs/function_notes/hk_08.md:106 probably notification handler on code a1+4: code 10 calls sub_204F220; codes 2 and 8 advance a per-slot state byte at off_204F214+dword_204F218.
sub_204F220
export/plan0/arm9_main/sub_204F220_0204F220.c
- docs/function_notes/hk_08.md:107 if a2 == 4 and the pointer *result is null, marks flag at off_204F238+dword_204F23C as 1; returns the pointer.
sub_204F240
export/plan0/arm9_main/sub_204F240_0204F240.c
- docs/function_notes/NEEDS_REVIEW.md:330 probably resets a 12-slot channel table at off_204F2F4+dword_204F2F8 (136-byte stride) and init fields; a2==2 calls sub_204F33C and sub_204EE64.
- docs/function_notes/hk_08.md:108 probably resets a 12-slot channel table at off_204F2F4+dword_204F2F8 (136-byte stride) and init fields; a2==2 calls sub_204F33C and sub_204EE64.
sub_204F33C
export/plan0/arm9_main/sub_204F33C_0204F33C.c
- docs/function_notes/NEEDS_REVIEW.md:331 probably deserializes a config block from stream a1 via repeated sub_2036B74 reads (32-bit fields, eight 40/4-word pairs) into the struct at off_204F3DC.
- docs/function_notes/hk_08.md:109 probably deserializes a config block from stream a1 via repeated sub_2036B74 reads (32-bit fields, eight 40/4-word pairs) into the struct at off_204F3DC.
sub_204F408
export/plan0/arm9_main/sub_204F408_0204F408.c
- docs/function_notes/NEEDS_REVIEW.md:332 probably resets a timer or status object: state 41 on off_204F450, sub_2006A10 on off_204F454, clears a 16-bit field and bit 0; restores state.
- docs/function_notes/hk_08.md:110 probably resets a timer or status object: state 41 on off_204F450, sub_2006A10 on off_204F454, clears a 16-bit field and bit 0; restores state.
sub_204F468
export/plan0/arm9_main/sub_204F468_0204F468.c
- docs/function_notes/NEEDS_REVIEW.md:333 probably like sub_204F408: state 40 on off_204F4B4, sub_2006AAC(dword_204F4B8, 14, off_204F4BC), clears a 16-bit field and bit 0; restores state.
- docs/function_notes/hk_08.md:111 probably like sub_204F408: state 40 on off_204F4B4, sub_2006AAC(dword_204F4B8, 14, off_204F4BC), clears a 16-bit field and bit 0; restores state.
sub_204F4D0
export/plan0/arm9_main/sub_204F4D0_0204F4D0.c
- docs/function_notes/NEEDS_REVIEW.md:334 probably allocates a free entry among 12 slots (136-byte stride at off_204F5B0), reads 64 bytes from a1 via sub_214D1FC; returns slot index.
- docs/function_notes/hk_08.md:112 probably allocates a free entry among 12 slots (136-byte stride at off_204F5B0), reads 64 bytes from a1 via sub_214D1FC; returns slot index.
sub_204F5E4
export/plan0/arm9_main/sub_204F5E4_0204F5E4.c
- docs/function_notes/NEEDS_REVIEW.md:335 probably resets 12 channel slots at off_204F630+dword_204F634 (136 stride) like sub_204F240, then sets counter word at dword_204F640 to 12.
- docs/function_notes/hk_08.md:113 probably resets 12 channel slots at off_204F630+dword_204F634 (136 stride) like sub_204F240, then sets counter word at dword_204F640 to 12.
sub_204F644
export/plan0/arm9_main/sub_204F644_0204F644.c
- docs/function_notes/NEEDS_REVIEW.md:336 probably streaming pump: returns 0 while busy or a slot is pending; otherwise loads next block via sub_2004A30, copies with sub_20048BC; returns 1 when done.
- docs/function_notes/hk_08.md:114 probably streaming pump: returns 0 while busy or a slot is pending; otherwise loads next block via sub_2004A30, copies with sub_20048BC; returns 1 when done.
sub_204F770
export/plan0/arm9_main/sub_204F770_0204F770.c
- docs/function_notes/NEEDS_REVIEW.md:337 probably finalizes the last slot: allocates buffer via sub_2036B74 when missing, calls sub_214D344, clears masked bits at +dword_204F7EC, returns dword_204F7F0.
- docs/function_notes/hk_08.md:115 probably finalizes the last slot: allocates buffer via sub_2036B74 when missing, calls sub_214D344, clears masked bits at +dword_204F7EC, returns dword_204F7F0.
sub_204F7F4
export/plan0/arm9_main/sub_204F7F4_0204F7F4.c
- docs/function_notes/hk_08.md:116 thunk; tail-calls indirect pointer off_204F800 with argument 0.
sub_204F804
export/plan0/arm9_main/sub_204F804_0204F804.c
- docs/function_notes/hk_08.md:117 thunk; tail-calls indirect pointer off_204F810 with argument 15.
sub_204F814
export/plan0/arm9_main/sub_204F814_0204F814.c
- docs/function_notes/hk_08.md:118 scans slots 1..13 for the smallest 16-bit value at struct off_204F898 +140 and stores that index in byte +136; if none valid, sets it to -1 and status 3 at +8.
sub_204F8A0
export/plan0/arm9_main/sub_204F8A0_0204F8A0.c
- docs/function_notes/NEEDS_REVIEW.md:338 probably conditional passthrough: if ctrl flag +1108 bit 0x40 and mode checks pass, calls sub_204BCB4(result); else returns result.
- docs/function_notes/hk_09.md:2 probably conditional passthrough: if ctrl flag +1108 bit 0x40 and mode checks pass, calls sub_204BCB4(result); else returns result.
sub_204F938
export/plan0/arm9_main/sub_204F938_0204F938.c
- docs/function_notes/NEEDS_REVIEW.md:339 probably builds 64-byte session record at off_204FB24 from a1 (20 bytes from a1+12), packs a1+4/a1+8 bitfields into ctrl word, adds time/random id, len 28.
- docs/function_notes/hk_09.md:3 probably builds 64-byte session record at off_204FB24 from a1 (20 bytes from a1+12), packs a1+4/a1+8 bitfields into ctrl word, adds time/random id, len 28.
sub_204FB40
export/plan0/arm9_main/sub_204FB40_0204FB40.c
- docs/function_notes/NEEDS_REVIEW.md:340 probably race-setup record builder: clears ctrl bits, sets id from sub_203BFC4 time and sub_200F59C random (or +5776 in flag mode), len 28, type 7.
- docs/function_notes/hk_09.md:4 probably race-setup record builder: clears ctrl bits, sets id from sub_203BFC4 time and sub_200F59C random (or +5776 in flag mode), len 28, type 7.
sub_204FCEC
export/plan0/arm9_main/sub_204FCEC_0204FCEC.c
- docs/function_notes/NEEDS_REVIEW.md:341 probably per-player query: mode 1 tests bit a1 of +135 (or +5782 via sub_2007E38 in MB mode), mode 2 tests +1085; on hit copies 20-byte info to a2, returns 1.
- docs/function_notes/hk_09.md:5 probably per-player query: mode 1 tests bit a1 of +135 (or +5782 via sub_2007E38 in MB mode), mode 2 tests +1085; on hit copies 20-byte info to a2, returns 1.
sub_204FE1C
export/plan0/arm9_main/sub_204FE1C_0204FE1C.c
- docs/function_notes/NEEDS_REVIEW.md:342 probably returns BYTE2 of table word at 56*a1+97 (table off_204FE88) for player a1 when mode 2, not state 2, and bit0 of +98 set; else 0.
- docs/function_notes/hk_09.md:6 probably returns BYTE2 of table word at 56*a1+97 (table off_204FE88) for player a1 when mode 2, not state 2, and bit0 of +98 set; else 0.
sub_204FE90
export/plan0/arm9_main/sub_204FE90_0204FE90.c
- docs/function_notes/NEEDS_REVIEW.md:343 probably returns 1 when mode 2, not state 2, and player a1 has bits 0x1 and 0x20 set in +98 of table off_204FF0C; else 0.
- docs/function_notes/hk_09.md:7 probably returns 1 when mode 2, not state 2, and player a1 has bits 0x1 and 0x20 set in +98 of table off_204FF0C; else 0.
sub_204FF14
export/plan0/arm9_main/sub_204FF14_0204FF14.c
- docs/function_notes/NEEDS_REVIEW.md:344 probably mode-2 check; if player a1 is active (bit0 of 56*a1+98 in table off_204FFB0), copies 20 bytes to a2 and returns 1; else 0.
- docs/function_notes/hk_09.md:8 probably mode-2 check; if player a1 is active (bit0 of 56*a1+98 in table off_204FFB0), copies 20 bytes to a2 and returns 1; else 0.
sub_204FFBC
export/plan0/arm9_main/sub_204FFBC_0204FFBC.c
- docs/function_notes/hk_09.md:9 returns 1 if game mode (*off_204FFE4 +4) is 8 or 9, else 0.
sub_204FFE8
export/plan0/arm9_main/sub_204FFE8_0204FFE8.c
- docs/function_notes/NEEDS_REVIEW.md:345 probably returns halfword at table off_2050030+5576 indexed by a1 (8-byte stride) when game mode is 8 or 9; else 0.
- docs/function_notes/hk_09.md:10 probably returns halfword at table off_2050030+5576 indexed by a1 (8-byte stride) when game mode is 8 or 9; else 0.
sub_2050034
export/plan0/arm9_main/sub_2050034_02050034.c
- docs/function_notes/hk_09.md:11 stores byte a1 into active-player mask (+5622 of *off_2050060), calls sub_2050080 to rebuild slot maps, passes result to sub_2058B10.
sub_2050064
export/plan0/arm9_main/sub_2050064_02050064.c
- docs/function_notes/hk_09.md:12 returns halfword at off_205007C+7836+2a1, a slot-index lookup table entry.
sub_2050080
export/plan0/arm9_main/sub_2050080_02050080.c
- docs/function_notes/hk_09.md:13 if state nonzero and not 13, rebuilds player-slot maps (+7762/+7820/+7836) from mask +5622, fills remaining slots, dispatches to sub_20431E4 or sub_2043410.
sub_20501B0
export/plan0/arm9_main/sub_20501B0_020501B0.c
- docs/function_notes/NEEDS_REVIEW.md:346 probably for slot a1 (<4): in mode 2 and active calls sub_204E074, returns 1; else clears flags and, if slot bit0 (+220) set.
- docs/function_notes/hk_09.md:14 probably for slot a1 (<4): in mode 2 and active calls sub_204E074, returns 1; else clears flags and, if slot bit0 (+220) set.
sub_2050300
export/plan0/arm9_main/sub_2050300_02050300.c
- docs/function_notes/hk_09.md:15 sets bit 0x1 in ctrl halfword +1108 of object *off_205031C; returns its +1024 sub-block pointer.
sub_2050320
export/plan0/arm9_main/sub_2050320_02050320.c
- docs/function_notes/hk_09.md:16 if ctrl bit0 (+1108) set, clears it, sets message type 24, sends 8-byte payload (a1, a2, a3) via sub_2050650; on failure restores bit and returns 0, else 1.
sub_20503CC
export/plan0/arm9_main/sub_20503CC_020503CC.c
- docs/function_notes/NEEDS_REVIEW.md:347 probably sends type-9 message for slot a1: 4 bytes from table 556*a1+1664 plus slot id, length 18, via sub_2050650; gated on ctrl bit0.
- docs/function_notes/hk_09.md:17 probably sends type-9 message for slot a1: 4 bytes from table 556*a1+1664 plus slot id, length 18, via sub_2050650; gated on ctrl bit0.
sub_20504A4
export/plan0/arm9_main/sub_20504A4_020504A4.c
- docs/function_notes/NEEDS_REVIEW.md:348 probably sends type-6 message with 20-byte slot data plus slot id via sub_2050650 (len 24); gated on bit0 of +277 and ctrl bit0.
- docs/function_notes/hk_09.md:18 probably sends type-6 message with 20-byte slot data plus slot id via sub_2050650 (len 24); gated on bit0 of +277 and ctrl bit0.
sub_20505A8
export/plan0/arm9_main/sub_20505A8_020505A8.c
- docs/function_notes/NEEDS_REVIEW.md:349 probably sends type-2 message carrying halfword a1 via sub_2050650 (len 2, descriptor off_205064C); gated on ctrl bit0.
- docs/function_notes/hk_09.md:19 probably sends type-2 message carrying halfword a1 via sub_2050650 (len 2, descriptor off_205064C); gated on ctrl bit0.
sub_2050650
export/plan0/arm9_main/sub_2050650_02050650.c
- docs/function_notes/hk_09.md:20 generic send helper: mode 1 needs +135 nonzero, mode 2 blocks when +1074 equals dword_2050760; clamps length, copies payload, transmits via sub_2144048.
sub_2050764
export/plan0/arm9_main/sub_2050764_02050764.c
- docs/function_notes/NEEDS_REVIEW.md:350 probably packet dispatcher: if a1+2 is zero and buffer a1+12 is valid (length 2..24), copies payload and calls sub_205081C for type 21.
- docs/function_notes/hk_09.md:21 probably packet dispatcher: if a1+2 is zero and buffer a1+12 is valid (length 2..24), copies payload and calls sub_205081C for type 21.
sub_205081C
export/plan0/arm9_main/sub_205081C_0205081C.c
- docs/function_notes/hk_09.md:22 switch on message type 1..9 for link/session control: 1 sets mask via sub_2050080; 2 sets state byte; 3/4 clear/set player bit +7508; 5 flag.
sub_2050B88
export/plan0/arm9_main/sub_2050B88_02050B88.c
- docs/function_notes/hk_09.md:23 for player index (arg-1) updates bitmask state; if mask changed clears per-player bits, may call sub_204BCB4, sets flag 8 at +139.
sub_2050D80
export/plan0/arm9_main/sub_2050D80_02050D80.c
- docs/function_notes/NEEDS_REVIEW.md:351 probably appends record to slot table at off_2050E58: if count (+132) < 7, stores slot index, copies 6 id bytes and 20 bytes from a3 at 556*a1; sets flag 8.
- docs/function_notes/hk_09.md:24 probably appends record to slot table at off_2050E58: if count (+132) < 7, stores slot index, copies 6 id bytes and 20 bytes from a3 at 556*a1; sets flag 8.
sub_2050E60
export/plan0/arm9_main/sub_2050E60_02050E60.c
- docs/function_notes/hk_09.md:25 stores a1 at +8 of object *off_2050E7C, clears its +16 field, returns the object pointer.
sub_2050E80
export/plan0/arm9_main/sub_2050E80_02050E80.c
- docs/function_notes/NEEDS_REVIEW.md:352 probably if halfword a1+2 nonzero sets +8 of object *off_2050EBC to 8 and clears +16; else clears first dword; returns object pointer.
- docs/function_notes/hk_09.md:26 probably if halfword a1+2 nonzero sets +8 of object *off_2050EBC to 8 and clears +16; else clears first dword; returns object pointer.
sub_2050EC0
export/plan0/arm9_main/sub_2050EC0_02050EC0.c
- docs/function_notes/hk_09.md:27 recursive state-machine step: sets code 21 at +12, calls sub_2143D88; depending on ctrl flags 0x100/0x200 calls sub_20510E4/sub_20510C8/sub_20510AC.
sub_205108C
export/plan0/arm9_main/sub_205108C_0205108C.c
- docs/function_notes/hk_09.md:28 sets +12 of object *off_20510A8 to a1 and +16 to 1; returns the object pointer.
sub_20510AC
export/plan0/arm9_main/sub_20510AC_020510AC.c
- docs/function_notes/hk_09.md:29 returns 1 if halfword at *off_20510C4 equals 2 (mode check), else 0.
sub_20510C8
export/plan0/arm9_main/sub_20510C8_020510C8.c
- docs/function_notes/hk_09.md:30 returns first dword of object *off_20510E0 if non-null, else 0.
sub_20510E4
export/plan0/arm9_main/sub_20510E4_020510E4.c
- docs/function_notes/hk_09.md:31 returns 1 if ctrl halfword +1108 of object *off_2051104 has bit 0x40 set (mode-2 flag), else 0.
sub_2051108
export/plan0/arm9_main/sub_2051108_02051108.c
- docs/function_notes/NEEDS_REVIEW.md:353 probably session-phase event handler: subtype 1 with bit1 of +1078 clears it and calls sub_2053FA8; others call sub_20533A0.
- docs/function_notes/hk_09.md:32 probably session-phase event handler: subtype 1 with bit1 of +1078 clears it and calls sub_2053FA8; others call sub_20533A0.
sub_2051230
export/plan0/arm9_main/sub_2051230_02051230.c
- docs/function_notes/NEEDS_REVIEW.md:354 probably phase handler: in state 1 scans slot table (+17 array) for match with dword_205135C, stores index at +133, sends code 20 via sub_21436D0.
- docs/function_notes/hk_09.md:33 probably phase handler: in state 1 scans slot table (+17 array) for match with dword_205135C, stores index at +133, sends code 20 via sub_21436D0.
sub_2051364
export/plan0/arm9_main/sub_2051364_02051364.c
- docs/function_notes/hk_09.md:34 thin wrapper: clears +16 of *off_20513A8; nonzero subtype calls sub_20533A0, else sub_2053FA8.
sub_20513AC
export/plan0/arm9_main/sub_20513AC_020513AC.c
- docs/function_notes/hk_09.md:35 sets message code 19 at +12 of *off_20513F8, +16 = 1, sends via sub_2143B7C(off_20513FC); on failure calls sub_20533A0.
sub_2051400
export/plan0/arm9_main/sub_2051400_02051400.c
- docs/function_notes/hk_09.md:36 clears ctrl bit0 (+1108) of *off_2051468 and +16; nonzero subtype calls sub_20533A0; state (+4) 11 becomes 12.
sub_205146C
export/plan0/arm9_main/sub_205146C_0205146C.c
- docs/function_notes/hk_09.md:37 same pattern as sub_20513AC with message code 18, sent via sub_2143FBC(off_20514BC).
sub_20514C0
export/plan0/arm9_main/sub_20514C0_020514C0.c
- docs/function_notes/hk_09.md:38 sets message code 17, calls sub_2145030 with field +5564, clears +16; nonzero result calls sub_20533A0.
sub_2051528
export/plan0/arm9_main/sub_2051528_02051528.c
- docs/function_notes/hk_09.md:39 clears +16 of *off_20515AC; for subtype 0 or 7 in state 1 with mode 8/9, ORs pending mask +138 into +7852; clears +138.
sub_20515B0
export/plan0/arm9_main/sub_20515B0_020515B0.c
- docs/function_notes/hk_09.md:40 sets message code 16, calls sub_2143634(off_205163C, a1); if result 7 in mode 9 state 1 clears +138; clears +16.
sub_2051640
export/plan0/arm9_main/sub_2051640_02051640.c
- docs/function_notes/hk_09.md:41 trivial: clears +16 of *off_2051654 and returns the object pointer.
sub_2051658
export/plan0/arm9_main/sub_2051658_02051658.c
- docs/function_notes/NEEDS_REVIEW.md:355 probably if state is 1, sets +12 to 15, merges low nibble of +132 into ctrl byte +20, sends via sub_21455A0 (args 28, 37); clears +16 unless result 2.
- docs/function_notes/hk_09.md:42 probably if state is 1, sets +12 to 15, merges low nibble of +132 into ctrl byte +20, sends via sub_21455A0 (args 28, 37); clears +16 unless result 2.
sub_2051734
export/plan0/arm9_main/sub_2051734_02051734.c
- docs/function_notes/hk_09.md:43 sets message code 14, calls sub_21450EC(+5564, 12, 255, 8, 1); on success calls sub_2054208(obj + dword_20517D0), else sets +8 to 2.
sub_20517D4
export/plan0/arm9_main/sub_20517D4_020517D4.c
- docs/function_notes/hk_09.md:44 clears +16 of *off_2051810; nonzero subtype calls sub_20533A0; returns subtype.
sub_2051814
export/plan0/arm9_main/sub_2051814_02051814.c
- docs/function_notes/hk_09.md:45 if (ptr at +24 +14 != 0) differs from a1, sets message code 13 and sends via sub_21453EC(off_2051890); failure calls sub_20533A0.
sub_2051894
export/plan0/arm9_main/sub_2051894_02051894.c
- docs/function_notes/hk_09.md:46 clears +16 of *off_20518C4; nonzero subtype sets +8 to 2 and clears +16.
sub_20518C8
export/plan0/arm9_main/sub_20518C8_020518C8.c
- docs/function_notes/hk_09.md:47 sets message code 12, calls sub_21441D0(off_2051954, a1); on nonzero non-2 result sets +8 to 2; clears +16 either way.
sub_2051A24
export/plan0/arm9_main/sub_2051A24_02051A24.c
- docs/function_notes/hk_09.md:48 sets message code 11, calls sub_2144230 with object fields +60, +56, +52, +48 and fixed flags; on result != 2 sets +8 to 2 and clears +16.
sub_2051AD4
export/plan0/arm9_main/sub_2051AD4_02051AD4.c
- docs/function_notes/hk_09.md:49 large event dispatcher on subtype (+2) and code (+8): subtypes 1/12 call hook +1100; subtype 0 code 7 sets +1074, timing word +7912, calls callback +1096.
sub_2051D24
export/plan0/arm9_main/sub_2051D24_02051D24.c
- docs/function_notes/NEEDS_REVIEW.md:356 probably sends a 48-byte block from a1 plus a 20/24-byte header into *(off_2051E4C)+36 via sub_21437D8 code 10; stores callbacks a3/a4/a5 at +1096/+1100/+1104.
- docs/function_notes/hk_09.md:50 probably sends a 48-byte block from a1 plus a 20/24-byte header into *(off_2051E4C)+36 via sub_21437D8 code 10; stores callbacks a3/a4/a5 at +1096/+1100/+1104.
sub_2051E58
export/plan0/arm9_main/sub_2051E58_02051E58.c
- docs/function_notes/hk_09.md:51 clears +16 of *off_2051E94; nonzero subtype calls sub_20533A0; returns subtype.
sub_2051E98
export/plan0/arm9_main/sub_2051E98_02051E98.c
- docs/function_notes/hk_09.md:52 clears bit0 of ctrl +1078 of *off_2051EF8, sets message code 9, sends via sub_21438A8(off_2051EFC); failure calls sub_20533A0.
sub_2051F00
export/plan0/arm9_main/sub_2051F00_02051F00.c
- docs/function_notes/hk_09.md:53 state-7 event handler: subtype 0 with code 4 bumps counter +1081; code 5 parses a 192-byte slot block (type 13 via sub_20204C0, else hooks or sub_2052288).
sub_2052288
export/plan0/arm9_main/sub_2052288_02052288.c
- docs/function_notes/NEEDS_REVIEW.md:357 probably slot matcher for received 192-byte packets: finds 224-byte slot (4 slots at off+172) whose 6-byte id (+192..+197) matches a2.
- docs/function_notes/hk_09.md:54 probably slot matcher for received 192-byte packets: finds 224-byte slot (4 slots at off+172) whose 6-byte id (+192..+197) matches a2.
sub_20525A8
export/plan0/arm9_main/sub_20525A8_020525A8.c
- docs/function_notes/NEEDS_REVIEW.md:358 probably writes a 192-byte packet from a3 into slot a2 (ids at +192..+197, flags, 20-byte header at +198 from a4) in state-dependent variants.
- docs/function_notes/hk_09.md:55 probably writes a 192-byte packet from a3 into slot a2 (ids at +192..+197, flags, 20-byte header at +198 from a4) in state-dependent variants.
sub_20527C0
export/plan0/arm9_main/sub_20527C0_020527C0.c
- docs/function_notes/NEEDS_REVIEW.md:359 probably starts a channel send (state 2, code 7): reads channel bitmask via sub_2143280; 0x8000 goes to state 8, none found to state 3; else picks channel.
- docs/function_notes/hk_09.md:56 probably starts a channel send (state 2, code 7): reads channel bitmask via sub_2143280; 0x8000 goes to state 8, none found to state 3; else picks channel.
sub_20529B8
export/plan0/arm9_main/sub_20529B8_020529B8.c
- docs/function_notes/hk_09.md:57 packet handler for subtype 0: code 7 calls sub_2050D80 with id at +16; code 9 calls sub_2050B88 and sets mask bit in +7852.
sub_2052B60
export/plan0/arm9_main/sub_2052B60_02052B60.c
- docs/function_notes/hk_09.md:58 sets message code 6 on *off_2052BB0 and sends via sub_2143BC4(a1, default off_2052BB4 when NULL); failure calls sub_20533A0.
sub_2052BB8
export/plan0/arm9_main/sub_2052BB8_02052BB8.c
- docs/function_notes/hk_09.md:59 clears +16 of *off_2052BF4; nonzero subtype calls sub_20533A0.
sub_2052BF8
export/plan0/arm9_main/sub_2052BF8_02052BF8.c
- docs/function_notes/hk_09.md:60 sets *off_2052C54 to 1, message code 5, sends via sub_2143C80(off_2052C58, +24 field); failure calls sub_20533A0.
sub_2052C5C
export/plan0/arm9_main/sub_2052C5C_02052C5C.c
- docs/function_notes/hk_09.md:61 generates a 16-bit random-style id from sub_203BFC4 time and sub_200F59C random via a multiply/add LCG; returns result | 0x8000.
sub_2052CF4
export/plan0/arm9_main/sub_2052CF4_02052CF4.c
- docs/function_notes/hk_09.md:62 sets message code 38 on *off_2052D9C; in mode 2 with state/flag gating calls sub_204BCEC and clears ctrl bit 0x100; clears +16.
sub_2052DA4
export/plan0/arm9_main/sub_2052DA4_02052DA4.c
- docs/function_notes/hk_09.md:63 sets message code 37; same gating as sub_2052CF4; calls sub_204BE0C, clears +7732, sets ctrl bit 0x100 on *off_2052E5C.
sub_2052E64
export/plan0/arm9_main/sub_2052E64_02052E64.c
- docs/function_notes/hk_09.md:64 if message code (+12) of *off_2052EC8 is 36, calls sub_204BCDC and on result 2 clears +16 and calls sub_204F5E4; else returns 0.
sub_2052ECC
export/plan0/arm9_main/sub_2052ECC_02052ECC.c
- docs/function_notes/hk_09.md:65 sets message code 36 on *off_2052F94; when gating passes calls sub_204BF48 (flags 4, 340, off_2052FA0, off_2052F9C[0]); clears +16, returns sub_204F5E4().
sub_2052FA4
export/plan0/arm9_main/sub_2052FA4_02052FA4.c
- docs/function_notes/hk_09.md:66 wraps a buffer op in IRQ-style guard (sub_200FCA0/sub_200FCB4) on *(off_205301C)+7428: a3 nonzero calls sub_2036B30, else sub_2036B74 with -32.
sub_2053020
export/plan0/arm9_main/sub_2053020_02053020.c
- docs/function_notes/hk_09.md:67 if subtype (+2) nonzero calls sub_20533A0; else adds a1[5] to 16-bit counter at off_2053090+140 indexed by a1[4] (negatives reset), then calls sub_2053094.
sub_2053094
export/plan0/arm9_main/sub_2053094_02053094.c
- docs/function_notes/NEEDS_REVIEW.md:360 probably channel/sequence allocator step: sends via sub_2143280 bitmask; 0x8000 sets state 8, none sets state 3; advances 4-bit sequence nibble +137.
- docs/function_notes/hk_09.md:68 probably channel/sequence allocator step: sends via sub_2143280 bitmask; 0x8000 sets state 8, none sets state 3; advances 4-bit sequence nibble +137.
sub_205329C
export/plan0/arm9_main/sub_205329C_0205329C.c
- docs/function_notes/hk_09.md:69 clears +16 of *off_20532D8; nonzero subtype calls sub_20533A0; returns subtype.
sub_20532DC
export/plan0/arm9_main/sub_20532DC_020532DC.c
- docs/function_notes/hk_09.md:70 sets message code 3 on *off_205333C and sends via sub_21454C4(off_2053344, dword_2053340, a1, ...); failure calls sub_20533A0.
sub_2053348
export/plan0/arm9_main/sub_2053348_02053348.c
- docs/function_notes/hk_09.md:71 clears +16 of *off_205339C; zero subtype calls sub_2053FA8, else sets +8 to 1 and clears +16.
sub_20533A0
export/plan0/arm9_main/sub_20533A0_020533A0.c
- docs/function_notes/hk_09.md:72 abort/recovery state machine: if ctrl bit 0x100 set sends code 38 and calls sub_204BCEC when gated; bit 0x200 calls sub_204ECA0.
sub_2053664
export/plan0/arm9_main/sub_2053664_02053664.c
- docs/function_notes/hk_09.md:73 calls sub_214358C(15, off_20536D4, 0); if that returns 0 and subtype is 0, optionally calls sub_214358C(1, off_20536DC) when +7424 is set, then sub_2053FA8.
sub_20536E0
export/plan0/arm9_main/sub_20536E0_020536E0.c
- docs/function_notes/hk_09.md:74 sets message code 1 on *off_2053734 and sends via sub_2143E10(+20, off_2053738, 2); clears +16 on success.
sub_205373C
export/plan0/arm9_main/sub_205373C_0205373C.c
- docs/function_notes/hk_09.md:75 refreshes per-slot records for active players: reads up to 8 entries via sub_214461C (mask +5622; sub_203C2E4 on mode 9), copies 8-byte records to +12 table.
sub_2053AB0
export/plan0/arm9_main/sub_2053AB0_02053AB0.c
- docs/function_notes/hk_09.md:76 fills status block at *(+5572) (byte 5 from +5623 in mode 8, byte 4 from +7852, halfword from sub_2043A20, flags from sub_2055AFC) and sends via sub_2144C6C.
sub_2053D00
export/plan0/arm9_main/sub_2053D00_02053D00.c
- docs/function_notes/NEEDS_REVIEW.md:361 probably session reinitialization: zeroes header and mode fields of object off_2053E48, sets slot ids to 0xFF.
- docs/function_notes/hk_09.md:77 probably session reinitialization: zeroes header and mode fields of object off_2053E48, sets slot ids to 0xFF.
sub_2053E54
export/plan0/arm9_main/sub_2053E54_02053E54.c
- docs/function_notes/hk_09.md:78 clears ctrl bit 0x8 (+1108) of *off_2053E70 and returns its +1024 sub-block pointer.
sub_2053E74
export/plan0/arm9_main/sub_2053E74_02053E74.c
- docs/function_notes/hk_09.md:79 resets a per-player record at off_2053F90+dword_2053F94 (zeroes +96, +104 and 24 halfwords), sets ctrl bit 0x8, clears 0x10, writes timing word +1966.
sub_2053FA8
export/plan0/arm9_main/sub_2053FA8_02053FA8.c
- docs/function_notes/hk_09.md:80 full session state reset: zeroes slot entries and counters (7 entries stride 8, 4 entries stride 224), copies 20-byte header to +124, sets +1074.
sub_2054208
export/plan0/arm9_main/sub_2054208_02054208.c
- docs/function_notes/hk_09.md:81 clears per-session buffers of object a1 (+48..+74 fields, 8 counters and 8-byte blocks at +12) and a 3x8 halfword table at dword_205432C.
sub_2054330
export/plan0/arm9_main/sub_2054330_02054330.c
- docs/function_notes/hk_09.md:82 loops sub_2054F58 until it returns 1, then clears bit0 of byte +1110 of *off_2054364; drains the pending-action queue.
sub_2054368
export/plan0/arm9_main/sub_2054368_02054368.c
- docs/function_notes/hk_09.md:83 session init: allocates about 16 buffers from heap a1 via sub_2036B74 (sizes 3840, 64, 32, 192, 1024, 448, 2080, 512, 8, 24, 28, ...).
sub_20545E8
export/plan0/arm9_main/sub_20545E8_020545E8.c
- docs/function_notes/hk_09.md:84 allocates a 7936-byte session object from heap a1 via sub_2036B74 into off_2054658, zeroes its header (mode 9), clears +1110 bit0, returns the pointer.
sub_205465C
export/plan0/arm9_main/sub_205465C_0205465C.c
- docs/function_notes/NEEDS_REVIEW.md:362 probably readiness query: returns 0 in mode 1 when a slot/flag byte is set, 1 when session active with +1934 nonzero, otherwise 2.
- docs/function_notes/hk_09.md:85 probably readiness query: returns 0 in mode 1 when a slot/flag byte is set, 1 when session active with +1934 nonzero, otherwise 2.
sub_20546D8
export/plan0/arm9_main/sub_20546D8_020546D8.c
- docs/function_notes/hk_09.md:86 if state nonzero and mode != 13, sets mode 7, clears ctrl bit0 of +139, toggles flag at +4096+1516; always returns 1.
sub_2054754
export/plan0/arm9_main/sub_2054754_02054754.c
- docs/function_notes/NEEDS_REVIEW.md:363 probably periodic poll: when mode != 13 and flag 4 set (and sub_204FFBC false), checks slot ready bits and switches mode to 8 or 9.
- docs/function_notes/hk_09.md:87 probably periodic poll: when mode != 13 and flag 4 set (and sub_204FFBC false), checks slot ready bits and switches mode to 8 or 9.
sub_2054938
export/plan0/arm9_main/sub_2054938_02054938.c
- docs/function_notes/NEEDS_REVIEW.md:364 probably command gate query for codes 40..46: returns 3 when busy, 2 when a matching halfword equals dword_2054A9C, 0 when +4 set, 1 in state 1.
- docs/function_notes/hk_09.md:88 probably command gate query for codes 40..46: returns 3 when busy, 2 when a matching halfword equals dword_2054A9C, 0 when +4 set, 1 in state 1.
sub_2054AA0
export/plan0/arm9_main/sub_2054AA0_02054AA0.c
- docs/function_notes/hk_09.md:89 if state object mode is 11, handles code 44 via sub_2006F50 on buffer +7584; counts down timer +7746 and at zero calls sub_204ED84(result, v3, obj+7680).
sub_2054B44
export/plan0/arm9_main/sub_2054B44_02054B44.c
- docs/function_notes/hk_09.md:90 same gate as sub_2054938; codes 40/41 call sub_204F148; code 42 changes code to 40 (state 1) or 41 (state 2); returns 1 on state-1 path.
sub_2054C98
export/plan0/arm9_main/sub_2054C98_02054C98.c
- docs/function_notes/hk_09.md:91 large phase command dispatcher on code +12 after gating: 0/21 call sub_20536E0; 1/2 call sub_20532DC(40) or sub_20527C0; 3 sub_2053094.
sub_2054F38
export/plan0/arm9_main/sub_2054F38_02054F38.c
- docs/function_notes/hk_09.md:92 sets halfword +1074 of object *off_2054F50+1024 to dword_2054F54 and returns the +1024 pointer.
sub_2054F58
export/plan0/arm9_main/sub_2054F58_02054F58.c
- docs/function_notes/hk_09.md:93 runs one step of sub_2055030; if that returns other than 3 returns it; else dispatches on code (+12) to sub_204E090/sub_204E4BC/sub_204ECA0/sub_20533A0.
sub_2055030
export/plan0/arm9_main/sub_2055030_02055030.c
- docs/function_notes/hk_09.md:94 pending-action runner: when +4 nonzero clears wait flags or calls sub_204E074/sub_204E4BC; if +16 pending returns 0; else switches on code to sub_2052CF4.
sub_2055340
export/plan0/arm9_main/sub_2055340_02055340.c
- docs/function_notes/hk_09.md:95 per-tick handler: code 2 advances slot counter +130 and calls sub_20504A4 for the matching slot; codes 7/8/9 call sub_205373C (flag 0x10 on failure).
sub_20554E4
export/plan0/arm9_main/sub_20554E4_020554E4.c
- docs/function_notes/hk_09.md:96 if +16 pending returns 0; code 11 with flag 8 calls sub_2051658; code 15 clears flag 8 and sets code 11; returns 0.
sub_2055564
export/plan0/arm9_main/sub_2055564_02055564.c
- docs/function_notes/hk_09.md:97 gated dispatcher for codes 2/10/7/9/11: 2/10 call sub_2051A24 or set result 2; 7 sub_2051E98; 9 sub_2051D24 with off_2055704.
sub_2055710
export/plan0/arm9_main/sub_2055710_02055710.c
- docs/function_notes/hk_09.md:98 sets halfword +1074 of object *off_2055728+1024 to dword_205572C and returns the +1024 pointer.
sub_2055730
export/plan0/arm9_main/sub_2055730_02055730.c
- docs/function_notes/hk_09.md:99 clears ctrl bit0 (+1078) of *off_2055794; if state is 2 or sub_204FE90(a1), calls sub_204DD24(a1), else sub_2055564(a1).
sub_205579C
export/plan0/arm9_main/sub_205579C_0205579C.c
- docs/function_notes/hk_09.md:100 if a1 and a2 nonzero calls sub_204E1A8(a1); if a1 zero and state is 2 calls sub_204E1A8(0); otherwise calls sub_2055808().
sub_2055808
export/plan0/arm9_main/sub_2055808_02055808.c
- docs/function_notes/hk_09.md:101 gated dispatcher on code (+12, jump table 0..21, plus 36): code 36 calls sub_20532DC(20) if a1, else code 3 and sub_20527C0(1,0,0); default sub_20533A0.
sub_20559EC
export/plan0/arm9_main/sub_20559EC_020559EC.c
- docs/function_notes/NEEDS_REVIEW.md:365 probably records one player's 20-byte info from off_2055A44+dword_2055A48+556a2 into a1 and sets bit (1<<a2) in byte +1085 after masking with a3.
- docs/function_notes/hk_09.md:102 probably records one player's 20-byte info from off_2055A44+dword_2055A48+556a2 into a1 and sets bit (1<<a2) in byte +1085 after masking with a3.
sub_2055A4C
export/plan0/arm9_main/sub_2055A4C_02055A4C.c
- docs/function_notes/hk_09.md:103 copies a constant 32-byte table from off_2055A90 to a local buffer and calls sub_20487FC(a1, buffer); returns 0.
sub_2055A94
export/plan0/arm9_main/sub_2055A94_02055A94.c
- docs/function_notes/NEEDS_REVIEW.md:366 probably sets bit 0x8 in halfword +8 of *off_2055AF8 when session is inactive or in mode 1 state; returns the new halfword.
- docs/function_notes/hk_09.md:104 probably sets bit 0x8 in halfword +8 of *off_2055AF8 when session is inactive or in mode 1 state; returns the new halfword.
sub_2055AFC
export/plan0/arm9_main/sub_2055AFC_02055AFC.c
- docs/function_notes/hk_09.md:105 returns 1 if bit 0x8 of halfword +8 of object *off_2055B18 is set, else 0.
sub_2055B1C
export/plan0/arm9_main/sub_2055B1C_02055B1C.c
- docs/function_notes/NEEDS_REVIEW.md:367 probably ready-state query: with no session returns bit 0x8 of +8 of *off_2055BD0; in mode 9 returns bit 0x4 of byte +6 of table at +5576; else 0.
- docs/function_notes/hk_09.md:106 probably ready-state query: with no session returns bit 0x8 of +8 of *off_2055BD0; in mode 9 returns bit 0x4 of byte +6 of table at +5576; else 0.
sub_2055BD4
export/plan0/arm9_main/sub_2055BD4_02055BD4.c
- docs/function_notes/hk_09.md:107 calls sub_2049838; on result 2 sets bit 0x4 in +8 of *off_2055C14 and calls sub_20371A8(a1, 1); else returns that result.
sub_2055C18
export/plan0/arm9_main/sub_2055C18_02055C18.c
- docs/function_notes/hk_09.md:108 same as sub_2055BD4 but for object *off_2055C58, calling sub_2036FEC(a1, 1).
sub_2055C5C
export/plan0/arm9_main/sub_2055C5C_02055C5C.c
- docs/function_notes/hk_09.md:109 if state of *off_2055C7C is 2, clears bit 0x2 in halfword +8 of that object; returns the state value.
sub_2055C80
export/plan0/arm9_main/sub_2055C80_02055C80.c
- docs/function_notes/hk_09.md:110 if state of *off_2055CB8 is 2, sets bit 0x2 in +8, sets +12 to 4096 and stores the argument at +10; returns the argument.
sub_2055CBC
export/plan0/arm9_main/sub_2055CBC_02055CBC.c
- docs/function_notes/hk_09.md:111 per-tick handler: state 1 with a1 == 0 calls sub_2055E54; state 2 calls sub_2055D5C; when flag 0x4 set and sub_2036C5C succeeds, clears bits 0x4 and 0x8 in +8.
sub_2055D5C
export/plan0/arm9_main/sub_2055D5C_02055D5C.c
- docs/function_notes/NEEDS_REVIEW.md:368 probably fader/volume step: computes 16.12 fixed-point level from +10 and +12, writes it to off_2055E48, and when a1 == 0 ramps +12 up or down by fixed steps.
- docs/function_notes/hk_09.md:112 probably fader/volume step: computes 16.12 fixed-point level from +10 and +12, writes it to off_2055E48, and when a1 == 0 ramps +12 up or down by fixed steps.
sub_2055E54
export/plan0/arm9_main/sub_2055E54_02055E54.c
- docs/function_notes/NEEDS_REVIEW.md:369 probably toggles display/screen-swap mode: flips bit0 of +8 in *off_2055F54, writes MMIO DISPCNT (0x4000000) and VRAM bank control at off_2055F58.
- docs/function_notes/hk_09.md:113 probably toggles display/screen-swap mode: flips bit0 of +8 in *off_2055F54, writes MMIO DISPCNT (0x4000000) and VRAM bank control at off_2055F58.
sub_2055F68
export/plan0/arm9_main/sub_2055F68_02055F68.c
- docs/function_notes/hk_09.md:114 dispatch on *off_2055FC4: 1 calls sub_2055FC8, 2 calls sub_2148950(14, 0, 1), otherwise returns the value unchanged.
sub_2055FC8
export/plan0/arm9_main/sub_2055FC8_02055FC8.c
- docs/function_notes/NEEDS_REVIEW.md:370 probably rebuilds a 128-entry tile/OAM-style table at (*off_2056100)+4, loads palette via sub_214A428, flushes via sub_200EE74/sub_214BF64.
- docs/function_notes/hk_09.md:115 probably rebuilds a 128-entry tile/OAM-style table at (*off_2056100)+4, loads palette via sub_214A428, flushes via sub_200EE74/sub_214BF64.
sub_2056114
export/plan0/arm9_main/sub_2056114_02056114.c
- docs/function_notes/hk_09.md:116 stores a1 into the slot pointed to by off_205613C; returns off_2056140's value when set, otherwise clears the head slot and returns it (probable queue push).
sub_2056144
export/plan0/arm9_main/sub_2056144_02056144.c
- docs/function_notes/hk_09.md:117 returns pointer off_2056154 after zeroing the dword it points to (probable queue pop/reset).
sub_2056158
export/plan0/arm9_main/sub_2056158_02056158.c
- docs/function_notes/hk_09.md:118 allocates a 16-byte object from heap a1 via sub_2036BEC into *off_2056200; allocates 1024 bytes via sub_2036B74 when state +12 is 3 or 5; sets +12 to 4096.
sub_2056208
export/plan0/arm9_main/sub_2056208_02056208.c
- docs/function_notes/hk_10.md:3 scans an 8x4 grid via sub_2060364(i,j) for the lowest rank value (9 = none); returns 1/2/3 for best value 5/6/7, else 0. Probably a tier/rank summary.
sub_2056284
export/plan0/arm9_main/sub_2056284_02056284.c
- docs/function_notes/NEEDS_REVIEW.md:371 probably checks sub_2048684 against the word at (off_20562AC+28) and dword_20562B0; returns that word on success, else 0.
- docs/function_notes/hk_10.md:4 probably checks sub_2048684 against the word at (off_20562AC+28) and dword_20562B0; returns that word on success, else 0.
sub_20562B4
export/plan0/arm9_main/sub_20562B4_020562B4.c
- docs/function_notes/hk_10.md:5 resets accumulator bytes: +48..+51 and +52..+55 cleared for 4 slots, plus bytes +56 and +57 of the object at *off_20562E4.
sub_20562E8
export/plan0/arm9_main/sub_20562E8_020562E8.c
- docs/function_notes/hk_10.md:6 calls sub_20562B4, then for each set bit of a flags byte merges 4 source bytes into accumulators (AND/OR at +48/+52) and tracks max/min at +56/+57 via loc_2056DAC.
sub_20563D8
export/plan0/arm9_main/sub_20563D8_020563D8.c
- docs/function_notes/hk_10.md:7 trivial thin wrapper: indirect call via off_20563E8 with field +16 of *off_20563E4.
sub_20563EC
export/plan0/arm9_main/sub_20563EC_020563EC.c
- docs/function_notes/hk_10.md:8 thin wrapper: sub_2057AF4 on field +12 of *off_2056404, then tail-calls sub_20574A0.
sub_2056408
export/plan0/arm9_main/sub_2056408_02056408.c
- docs/function_notes/hk_10.md:9 trivial thin wrapper: indirect call via off_2056418 with field +12 of *off_2056414.
sub_205641C
export/plan0/arm9_main/sub_205641C_0205641C.c
- docs/function_notes/hk_10.md:10 trivial thin wrapper: indirect call via off_205642C with field +8 of *off_2056428.
sub_2056430
export/plan0/arm9_main/sub_2056430_02056430.c
- docs/function_notes/hk_10.md:11 trivial thin wrapper: indirect call via off_2056440 with field +4 of *off_205643C.
sub_2056444
export/plan0/arm9_main/sub_2056444_02056444.c
- docs/function_notes/hk_10.md:12 allocates a 4-byte block with sub_2036BEC, stores sub_2047A28(off_2056460) into it and returns the pointer. Probably loads kart_appear.ktbl-related data.
sub_2056464
export/plan0/arm9_main/sub_2056464_02056464.c
- docs/function_notes/hk_10.md:13 fills a per-entry block at a1: 20-byte copy via sub_214D1FC, flag byte from record bits 0/3, 4-byte copy, packs two nibbles, stores sub_2056208() result, then copies 12 bytes or calls sub_2152490.
sub_2056574
export/plan0/arm9_main/sub_2056574_02056574.c
- docs/function_notes/hk_10.md:14 dispatches on a1 (0 or 1) to sub_20565E4 with record field +20 or +24 of *off_20565A8; returns 0 for other a1.
sub_20565AC
export/plan0/arm9_main/sub_20565AC_020565AC.c
- docs/function_notes/hk_10.md:15 same 0/1 dispatch as sub_2056574 but calls sub_205660C with an extra argument a3.
sub_20565E4
export/plan0/arm9_main/sub_20565E4_020565E4.c
- docs/function_notes/hk_10.md:16 if bit0 of word +8 is set, unpacks bitfields (bits 17-23, 10-16, 22-31) into a2+2, a2+3 and a2 (u16) and returns 1; else returns 0.
sub_205660C
export/plan0/arm9_main/sub_205660C_0205660C.c
- docs/function_notes/hk_10.md:17 reads a 3-byte packed entry at a1+32+3*(a2-1) (if record valid bit0 at +8), unpacks 7-bit fields to a3+2/a3+3 and masked u16 to a3; returns 1 or 0.
sub_2056670
export/plan0/arm9_main/sub_2056670_02056670.c
- docs/function_notes/hk_10.md:18 gets dest from *off_20566A4+24; if sub_20573C8() is true tail-calls sub_20578FC(a1,v2), else clears bit0 at v2+8 and returns 1.
sub_20566A8
export/plan0/arm9_main/sub_20566A8_020566A8.c
- docs/function_notes/NEEDS_REVIEW.md:372 probably message/dialog setup. Sets bit0 of a2+8, copies a2 into the object at +24 (sub_214D1FC), calls sub_2057944 and sub_20573C8; on failure calls sub_205746C and sub_20574A0.
- docs/function_notes/hk_10.md:19 probably message/dialog setup. Sets bit0 of a2+8, copies a2 into the object at +24 (sub_214D1FC), calls sub_2057944 and sub_20573C8; on failure calls sub_205746C and sub_20574A0.
sub_2056700
export/plan0/arm9_main/sub_2056700_02056700.c
- docs/function_notes/hk_10.md:20 looks up flat course position via sub_204684C(a1); if valid and loc_20573F8 returns nonzero, tail-calls sub_205798C; else clears bit0 at v2+8 and returns 1.
sub_2056750
export/plan0/arm9_main/sub_2056750_02056750.c
- docs/function_notes/hk_10.md:21 large (540 B) record builder for a course slot: fills a 20-byte record at *off_2056970+20 with bitfields from sub_203BFEC and sub_203C7CC, packs 15 bytes of 3-byte entries via sub_203C778 over sub_2044618 slots, then sub_20579D0 and loc_20573F8; on failure sub_205746C + sub_20574A0.
sub_20569A8
export/plan0/arm9_main/sub_20569A8_020569A8.c
- docs/function_notes/hk_10.md:22 copies a1 into *off_20569D4+4 +8 (sub_214D1FC), sets bit0 of the flag byte at +4, then tail-calls sub_2056430.
sub_20569DC
export/plan0/arm9_main/sub_20569DC_020569DC.c
- docs/function_notes/hk_10.md:23 wrapper: calls sub_2056A2C on pointer off_2056A00+16+4+a2+9(a1-1)-1 (9-byte entry stride) with a3; returns 1.
sub_2056A04
export/plan0/arm9_main/sub_2056A04_02056A04.c
- docs/function_notes/hk_10.md:24 wrapper: tail-calls sub_2056A4C with the same 9-byte entry pointer computation as sub_20569DC.
sub_2056A2C
export/plan0/arm9_main/sub_2056A2C_02056A2C.c
- docs/function_notes/hk_10.md:25 decoder for a 2-byte entry: if bit0 of a1 set, writes 1 to a2 and value (a1 >> 1) to a2[1] and returns it; else writes 0 to a2.
sub_2056A4C
export/plan0/arm9_main/sub_2056A4C_02056A4C.c
- docs/function_notes/hk_10.md:26 encoder counterpart of sub_2056A2C: if a2 is set, sets bit0 of result and stores (a2[1] & 0x7F) << 1 into it; else clears bit0.
sub_2056A7C
export/plan0/arm9_main/sub_2056A7C_02056A7C.c
- docs/function_notes/hk_10.md:27 wrapper: calls sub_2056AA4 with pointer off_2056AA0+8+4+224a2+28*a1 and returns 1.
sub_2056AA4
export/plan0/arm9_main/sub_2056AA4_02056AA4.c
- docs/function_notes/hk_10.md:28 unpacks a 28-byte packed record at a1 into a2: 20-byte copy from a1+8, bitfields from words at a1+0 and a1+4, bytes +24..+30; returns the valid flag.
sub_2056B08
export/plan0/arm9_main/sub_2056B08_02056B08.c
- docs/function_notes/hk_10.md:29 wrapper: calls sub_2056B30 with pointer off_2056B2C+8+4+224a2+28*a1.
sub_2056B30
export/plan0/arm9_main/sub_2056B30_02056B30.c
- docs/function_notes/hk_10.md:30 packs the 28-byte display record at a2 (valid flag at +24) back into the packed record at a1; returns the valid flag.
sub_2056BC0
export/plan0/arm9_main/sub_2056BC0_02056BC0.c
- docs/function_notes/hk_10.md:31 resolves a1 to a course index via sub_204684C; if valid, calls sub_2056C0C on the record at off_2056C04+12+4+a2dword_2056C08+28*idx and returns 1, else clears a3+24 and returns 0.
sub_2056C0C
export/plan0/arm9_main/sub_2056C0C_02056C0C.c
- docs/function_notes/hk_10.md:32 unpacks a 28-byte packed record at a1 into a2 (like sub_2056AA4 with a1+4 for byte +26); zeroes 32 bytes at a2 and returns 0 when invalid.
sub_2056C6C
export/plan0/arm9_main/sub_2056C6C_02056C6C.c
- docs/function_notes/hk_10.md:33 resolves a1 to a course index via sub_204684C; if valid calls sub_2056CAC on the record at off_2056CA4+12+4+a2dword_2056CA8+28*idx, else returns -1.
sub_2056CAC
export/plan0/arm9_main/sub_2056CAC_02056CAC.c
- docs/function_notes/hk_10.md:34 packs a2 (valid flag at +24) into a 28-byte packed record at a1; zeroes 28 bytes at a1 when invalid.
sub_2056D40
export/plan0/arm9_main/sub_2056D40_02056D40.c
- docs/function_notes/hk_10.md:35 trivial thin wrapper: indirect call via off_2056D50 with (off_2056D4C).
sub_2056D54
export/plan0/arm9_main/sub_2056D54_02056D54.c
- docs/function_notes/hk_10.md:36 clamps a count: sets flag bits 8, 4 and 2 in byte +34 of the object at *off_2056D94 for values above 3, 2 and 1; returns min(value, 2).
sub_2056D98
export/plan0/arm9_main/sub_2056D98_02056D98.c
- docs/function_notes/hk_10.md:37 trivial thin wrapper: indirect call via off_2056DA8 with (off_2056DA4)+32.
sub_2056DEC
export/plan0/arm9_main/sub_2056DEC_02056DEC.c
- docs/function_notes/hk_10.md:38 trivial thin wrapper: indirect call via off_2056DFC(a1, (off_2056DF8)+32).
sub_2056E00
export/plan0/arm9_main/sub_2056E00_02056E00.c
- docs/function_notes/hk_10.md:39 bit test: returns whether bit (a1 & 7) is set in byte a2+(a1>>3) of a bitset.
sub_2056E24
export/plan0/arm9_main/sub_2056E24_02056E24.c
- docs/function_notes/hk_10.md:40 bit set: sets bit (a1 & 7) in byte (a1>>3) of the bitset at (off_2056E44)+32 and returns the bit index.
sub_2056E48
export/plan0/arm9_main/sub_2056E48_02056E48.c
- docs/function_notes/hk_10.md:41 flow-state setup: sub_2057514 (set pending flag +40), sub_2057DF0(off_2056E68) (queue a callback), then sets word +248 of *off_2056E6C to 1.
sub_2056E70
export/plan0/arm9_main/sub_2056E70_02056E70.c
- docs/function_notes/hk_10.md:42 per-frame flag dispatch: for each set bit in word +42 of *off_2056F8C[0] (0x2,4,8,0x10,0x20,1) calls a subsystem handler pair (sub_2057C14/B84/AF4/A60/577B4/CA4) plus notify sub_2145D38, then clears flags and calls sub_2057504.
sub_2056F98
export/plan0/arm9_main/sub_2056F98_02056F98.c
- docs/function_notes/hk_10.md:43 flow-state reset: sets bit0 of word +68 in off_2056FD0, clears byte +60 and word +42, calls sub_2057514 and sub_2057DF0(off_2056FD4), then sets word +248 of off_2056FD8 to 1.
sub_2056FDC
export/plan0/arm9_main/sub_2056FDC_02056FDC.c
- docs/function_notes/hk_10.md:44 larger (328 B) state tick: runs sub_2057C60 then handlers BCC/B40/AAC/A18/764 per subsystem, builds a flags word stored at +42 and a state id at +44 (0, 3 or 4), then sub_2057504.
sub_2057130
export/plan0/arm9_main/sub_2057130_02057130.c
- docs/function_notes/hk_10.md:45 calls sub_205721C with a flag check on word at off_2057168; if the value is not 2, calls sub_2057514, sub_2057DF0(off_205716C) and sets word +248 of *off_2057170 to 1.
sub_2057174
export/plan0/arm9_main/sub_2057174_02057174.c
- docs/function_notes/hk_10.md:46 flushes dirty subsystems: runs handler/notify pairs sub_2057C14, B84, AF4, A60, 577B4, CA4 on fields +4..+32 of *off_2057214[0], then sub_2057504.
sub_205721C
export/plan0/arm9_main/sub_205721C_0205721C.c
- docs/function_notes/hk_10.md:47 init/reset chain: sub_20572E8, sub_20572CC, sub_20572B0, sub_2057294, sub_2057260, sub_2057244 and finally sub_2057304(a1).
sub_2057244
export/plan0/arm9_main/sub_2057244_02057244.c
- docs/function_notes/hk_10.md:48 trivial thin wrapper: indirect call via off_205725C((off_2057254+32), 0, dword_2057258).
sub_2057260
export/plan0/arm9_main/sub_2057260_02057260.c
- docs/function_notes/hk_10.md:49 clears two sub-buffers with sub_214D168 at (off_2057288)+20 and +24 (sizes from dword_205728C and dword_2057290).
sub_2057294
export/plan0/arm9_main/sub_2057294_02057294.c
- docs/function_notes/hk_10.md:50 trivial thin wrapper: indirect call via off_20572AC((off_20572A4+16), 0, dword_20572A8).
sub_20572B0
export/plan0/arm9_main/sub_20572B0_020572B0.c
- docs/function_notes/hk_10.md:51 trivial thin wrapper: indirect call via off_20572C8((off_20572C0+12), 0, dword_20572C4).
sub_20572CC
export/plan0/arm9_main/sub_20572CC_020572CC.c
- docs/function_notes/hk_10.md:52 trivial thin wrapper: indirect call via off_20572E4((off_20572DC+8), 0, dword_20572E0).
sub_20572E8
export/plan0/arm9_main/sub_20572E8_020572E8.c
- docs/function_notes/hk_10.md:53 trivial thin wrapper: indirect call via off_2057300((off_20572F8+4), 0, dword_20572FC).
sub_2057304
export/plan0/arm9_main/sub_2057304_02057304.c
- docs/function_notes/hk_10.md:54 resets the object at off_20573B4 (clear buffer, flags bit0/3/4), and if a1 is set copies 2word(+62) bytes from *off_20573BC+42; sets word +36, calls thunk sub_209119C and sub_2152690.
sub_20573C8
export/plan0/arm9_main/sub_20573C8_020573C8.c
- docs/function_notes/hk_10.md:55 trivial thin wrapper: indirect call via off_20573DC(a1, (off_20573D8)+42, 2); a state/condition query.
sub_205746C
export/plan0/arm9_main/sub_205746C_0205746C.c
- docs/function_notes/hk_10.md:56 sets bit a1 in a byte bitset returned by sub_2057498(), after sub_2133068(a1, 8); returns the bit index.
sub_2057498
export/plan0/arm9_main/sub_2057498_02057498.c
- docs/function_notes/hk_10.md:57 address helper: returns a2 + ((a1 << 21) >> 24), i.e. a byte slot from bits 3-10 of a1 added to a2.
sub_20574A0
export/plan0/arm9_main/sub_20574A0_020574A0.c
- docs/function_notes/hk_10.md:58 flow-state setup, same shape as sub_2056E48: calls sub_2057514, sub_2057DF0(off_20574C0), sets word +248 of *off_20574C4 to 1.
sub_20574C8
export/plan0/arm9_main/sub_20574C8_020574C8.c
- docs/function_notes/hk_10.md:59 notify/flush: sub_2145D38 if field +12 is set, then sub_2057CA4 on *off_2057500, notify again and sub_2057504.
sub_2057504
export/plan0/arm9_main/sub_2057504_02057504.c
- docs/function_notes/hk_10.md:60 clears byte +40 of the object at *off_2057510 (change-pending flag = 0).
sub_2057514
export/plan0/arm9_main/sub_2057514_02057514.c
- docs/function_notes/hk_10.md:61 sets byte +40 of the object at *off_2057520 (change-pending flag = 1).
sub_2057524
export/plan0/arm9_main/sub_2057524_02057524.c
- docs/function_notes/hk_10.md:62 allocates a 72-byte object at *off_2057600 via sub_2036BEC and fills 9 pointer-sized fields with sub_2036B74 reads, plus field +36; calls sub_205721C(1), clears +42, +44 and flag bits.
sub_2057624
export/plan0/arm9_main/sub_2057624_02057624.c
- docs/function_notes/hk_10.md:63 zero-inits a 36-byte struct at a1: clears words 0..10, sets bits in the word at +12 from dword_20576AC/B0/B4, clears bits 0..3 of byte +34; returns 8.
sub_20576B8
export/plan0/arm9_main/sub_20576B8_020576B8.c
- docs/function_notes/hk_10.md:64 if the object at off_20576FC has active flag (+12), stores result at +104, sets +92 to -1 and calls sub_204B6CC with addresses offset by a2dword_20576F8.
sub_2057710
export/plan0/arm9_main/sub_2057710_02057710.c
- docs/function_notes/hk_10.md:65 if active flag at +12 is set, copies dword_2057750 bytes from result into the buffer at +96, writes a header dword and calls sub_204B430; else returns result.
sub_2057764
export/plan0/arm9_main/sub_2057764_02057764.c
- docs/function_notes/hk_10.md:66 same shape as sub_20576B8 with fixed addresses from dword_20577A8..B0: sets +104 and +92 = -1, calls sub_204B6CC.
sub_20577B4
export/plan0/arm9_main/sub_20577B4_020577B4.c
- docs/function_notes/hk_10.md:67 if active at *off_20577EC+12, copies bytes from result into the +96 buffer, writes a header dword and calls sub_204B430.
sub_2057800
export/plan0/arm9_main/sub_2057800_02057800.c
- docs/function_notes/hk_10.md:68 if the object at *off_2057848 is active, picks one of two parameter sets from the result flag, stores a3 at +104 and calls sub_204B6F8 with a computed address.
sub_205786C
export/plan0/arm9_main/sub_205786C_0205786C.c
- docs/function_notes/hk_10.md:69 same pattern as sub_2057800 with the object at *off_20578B0, calls sub_204B6F8 with its own table pointers.
sub_20578D0
export/plan0/arm9_main/sub_20578D0_020578D0.c
- docs/function_notes/hk_10.md:70 trivial thin wrapper: indirect call via off_20578E4(a1, (off_20578DC+104), dword_20578E0).
sub_20578E8
export/plan0/arm9_main/sub_20578E8_020578E8.c
- docs/function_notes/hk_10.md:71 trivial thin wrapper: indirect call via off_20578F8(a1, (off_20578F4)+104, 48).
sub_20578FC
export/plan0/arm9_main/sub_20578FC_020578FC.c
- docs/function_notes/hk_10.md:72 if the object at *off_2057930 is active, stores a2 at +104, byte result at +108 and calls sub_204B6F8 with (result << 12) + base.
sub_2057944
export/plan0/arm9_main/sub_2057944_02057944.c
- docs/function_notes/hk_10.md:73 if active at *off_205797C+12, copies from a2 into the +96 buffer, writes a header dword and calls sub_204B418 with (a1 << 12) + constant.
sub_205798C
export/plan0/arm9_main/sub_205798C_0205798C.c
- docs/function_notes/hk_10.md:74 if active, sets +104 = a2 and calls sub_204B6F8 with a1*dword_20579BC + base; otherwise returns the product.
sub_20579D0
export/plan0/arm9_main/sub_20579D0_020579D0.c
- docs/function_notes/hk_10.md:75 if active at off_2057A0C+12, copies a2 bytes into the +96 buffer, writes a header dword and calls sub_204B418 with a1dword_2057A08 + constant.
sub_2057A18
export/plan0/arm9_main/sub_2057A18_02057A18.c
- docs/function_notes/hk_10.md:76 if active at *off_2057A48+12, sets +104 = result and calls sub_204B6CC with fixed addresses.
sub_2057A60
export/plan0/arm9_main/sub_2057A60_02057A60.c
- docs/function_notes/hk_10.md:77 if active at *off_2057A98+12, copies result bytes into the +96 buffer, writes a header dword and calls sub_204B430.
sub_2057AAC
export/plan0/arm9_main/sub_2057AAC_02057AAC.c
- docs/function_notes/hk_10.md:78 if active at *off_2057ADC+12, sets +104 = result and calls sub_204B6CC with fixed addresses.
sub_2057AF4
export/plan0/arm9_main/sub_2057AF4_02057AF4.c
- docs/function_notes/hk_10.md:79 if active at *off_2057B2C+12, copies result bytes into the +96 buffer, writes a header dword and calls sub_204B430.
sub_2057B40
export/plan0/arm9_main/sub_2057B40_02057B40.c
- docs/function_notes/hk_10.md:80 if active at *off_2057B70+12, sets +104 = result and calls sub_204B6CC with fixed addresses.
sub_2057B84
export/plan0/arm9_main/sub_2057B84_02057B84.c
- docs/function_notes/hk_10.md:81 if active at *off_2057BBC+12, copies result bytes into the +96 buffer, writes a header dword and calls sub_204B430.
sub_2057BCC
export/plan0/arm9_main/sub_2057BCC_02057BCC.c
- docs/function_notes/hk_10.md:82 if active at *off_2057BFC+12, sets +104 = result and calls sub_204B6CC with fixed addresses.
sub_2057C14
export/plan0/arm9_main/sub_2057C14_02057C14.c
- docs/function_notes/hk_10.md:83 if active at *off_2057C4C+12, copies result bytes into the +96 buffer, writes a header dword and calls sub_204B430.
sub_2057C60
export/plan0/arm9_main/sub_2057C60_02057C60.c
- docs/function_notes/hk_10.md:84 if active at *off_2057C90+12, sets +104 = result and calls sub_204B6CC with a final mode argument of 1.
sub_2057CA4
export/plan0/arm9_main/sub_2057CA4_02057CA4.c
- docs/function_notes/hk_10.md:85 if active at *off_2057CE4+12, copies result bytes into the +96 buffer, writes three header words and calls sub_204B430.
sub_2057CFC
export/plan0/arm9_main/sub_2057CFC_02057CFC.c
- docs/function_notes/hk_10.md:86 trivial thin wrapper: indirect call via off_2057D0C(a1, (off_2057D08)+104, a2).
sub_2057D10
export/plan0/arm9_main/sub_2057D10_02057D10.c
- docs/function_notes/hk_10.md:87 ARM: copies 8 pointer-sized words from table off_2057D54 into a stack array and calls sub_20487FC(a1, array); returns 0. Probably registers a callback table.
sub_2057D58
export/plan0/arm9_main/sub_2057D58_02057D58.c
- docs/function_notes/hk_10.md:88 ARM thunk: tail-calls indirect via off_2057D60(a1). Part of the flow-manager per-frame hooks.
sub_2057D64
export/plan0/arm9_main/sub_2057D64_02057D64.c
- docs/function_notes/hk_10.md:89 ARM thunk: indirect call via off_2057D6C, which calls sub_2001ABC (flow state tick, fades after 90 frames).
sub_2057D70
export/plan0/arm9_main/sub_2057D70_02057D70.c
- docs/function_notes/hk_10.md:90 ARM thunk: indirect call via off_2057D78, which calls sub_2001B38 (flow state enter; maps a 2-bit mode field).
sub_2057D7C
export/plan0/arm9_main/sub_2057D7C_02057D7C.c
- docs/function_notes/hk_10.md:91 ARM init chain: sub_20364E8, then sub_20364E0, then sub_2001BA0 (flow manager init, allocates a 60-byte block).
sub_2057D9C
export/plan0/arm9_main/sub_2057D9C_02057D9C.c
- docs/function_notes/hk_10.md:92 ARM wait loop: while word +248 of *off_2057DEC is nonzero, calls sub_200C894(1,1) (OS_WaitIrq); returns the final value.
sub_2057DF0
export/plan0/arm9_main/sub_2057DF0_02057DF0.c
- docs/function_notes/hk_10.md:93 ARM push into a 10-slot ring at *off_2057E80 (slot index from counter +40, skipping occupied slots); stores a1 and the slot index; returns 1, or 0 if busy at +248 or full.
sub_2057E8C
export/plan0/arm9_main/sub_2057E8C_02057E8C.c
- docs/function_notes/hk_10.md:94 ARM noreturn main loop: if pending flag +248 of *off_2057ED0 is set, pops a callback via sub_2057F8C and calls it (or clears the flag), then calls sub_200DC3C each iteration.
sub_2057ED8
export/plan0/arm9_main/sub_2057ED8_02057ED8.c
- docs/function_notes/hk_10.md:96 ARM init: allocates a 252-byte object at off_2057F84 via sub_2036BEC, allocates a 2048-byte buffer and calls sub_200E28C and sub_200DF68; clears the 10-slot ring and index +40.
sub_2057F8C
export/plan0/arm9_main/sub_2057F8C_02057F8C.c
- docs/function_notes/hk_10.md:97 ARM queue pop: scans the 10-slot ring backwards from the index at +40, clears the found slot and returns its value (0 if empty).
sub_2057FE8
export/plan0/arm9_main/sub_2057FE8_02057FE8.c
- docs/function_notes/hk_10.md:99 state update on a counter byte in *off_205807C (bitmask test via sub_20503CC); when the counter exceeds 8 sets word +16 to 11 and returns 1. Probably menu/selection stepping.
sub_2058090
export/plan0/arm9_main/sub_2058090_02058090.c
- docs/function_notes/hk_10.md:100 clears a byte at *off_205809C+dword_20580A0 and returns that offset value.
sub_20580A4
export/plan0/arm9_main/sub_20580A4_020580A4.c
- docs/function_notes/NEEDS_REVIEW.md:373 probably input/menu event step: if state at *off_2058120 is 1 and bitmask matches, sets event word +16 to 14; otherwise calls sub_20503CC with a word from +dword_205812C.
- docs/function_notes/hk_10.md:101 probably input/menu event step: if state at *off_2058120 is 1 and bitmask matches, sets event word +16 to 14; otherwise calls sub_20503CC with a word from +dword_205812C.
sub_2058130
export/plan0/arm9_main/sub_2058130_02058130.c
- docs/function_notes/hk_10.md:102 clears a byte at off_205817C, copies 4 bytes from a computed table entry into off_2058188+32 via sub_214D1FC, sets a flag bit, returns 1.
sub_2058198
export/plan0/arm9_main/sub_2058198_02058198.c
- docs/function_notes/hk_10.md:103 event dispatch on field +12 of *off_20581EC: values 37..39 call sub_2051734, value 14 sets state 7 and event word +16 to 5, value 12 calls sub_2051734.
sub_20581F4
export/plan0/arm9_main/sub_20581F4_020581F4.c
- docs/function_notes/hk_10.md:104 if state at *off_2058218 is 1, calls sub_20518C8(1); returns the state value.
sub_205821C
export/plan0/arm9_main/sub_205821C_0205821C.c
- docs/function_notes/NEEDS_REVIEW.md:374 probably cursor/counter step: in state 1 advances a counter at dword_20582C4 through sub_20504A4 bitmask test and sets event word to 6 at 8; in state 2 sets event 6 when the mask matches.
- docs/function_notes/hk_10.md:105 probably cursor/counter step: in state 1 advances a counter at dword_20582C4 through sub_20504A4 bitmask test and sets event word to 6 at 8; in state 2 sets event 6 when the mask matches.
sub_20582D4
export/plan0/arm9_main/sub_20582D4_020582D4.c
- docs/function_notes/hk_10.md:106 clears a byte at *off_20582E8+dword_20582EC and a byte at dword_20582F0; returns dword_20582F0.
sub_20582F4
export/plan0/arm9_main/sub_20582F4_020582F4.c
- docs/function_notes/hk_10.md:107 if field +16 is zero, reads field +12 of *off_2058330: value 11 calls sub_2052DA4; value 37 sets event word +16 to 6 at off+dword_2058334.
sub_2058338
export/plan0/arm9_main/sub_2058338_02058338.c
- docs/function_notes/hk_10.md:108 calls sub_214358C(14,0,0), stores a nibble of a byte into off_20583A4; if mode word at off_20583B0 is 2 copies a byte into off_20583B4+4; clears 7 blocks of size dword_20583B8 whose bits are unset.
sub_20583C4
export/plan0/arm9_main/sub_20583C4_020583C4.c
- docs/function_notes/NEEDS_REVIEW.md:375 probably packet/transfer step: in state 1, if a bit is set and bitmask allows, calls sub_205867C to find a chunk and sub_20586AC to queue it; advances a counter and sets event word +16 to 10 when over threshold.
- docs/function_notes/hk_10.md:109 probably packet/transfer step: in state 1, if a bit is set and bitmask allows, calls sub_205867C to find a chunk and sub_20586AC to queue it; advances a counter and sets event word +16 to 10 when over threshold.
sub_20584F0
export/plan0/arm9_main/sub_20584F0_020584F0.c
- docs/function_notes/hk_10.md:110 sets word +4 of the object at off_2058514 to 10 and clears word/bytes at dword_2058518..2058524; returns 0.
sub_2058528
export/plan0/arm9_main/sub_2058528_02058528.c
- docs/function_notes/NEEDS_REVIEW.md:376 probably transfer step: in state 1 with a bit check, calls sub_20586AC(254,0,...) for an end-of-data record and sets event word +16 to 9; otherwise advances a counter and calls sub_205867C/sub_20586AC to send the next chunk.
- docs/function_notes/hk_10.md:111 probably transfer step: in state 1 with a bit check, calls sub_20586AC(254,0,...) for an end-of-data record and sets event word +16 to 9; otherwise advances a counter and calls sub_205867C/sub_20586AC to send the next chunk.
sub_205867C
export/plan0/arm9_main/sub_205867C_0205867C.c
- docs/function_notes/hk_10.md:112 chunk helper: remaining = dword_20586A8 - a2a3; returns 0 when none remain, else writes min(remaining, a3) to a5, pointer a1+a2a3 to a4, and returns 1.
sub_20586AC
export/plan0/arm9_main/sub_20586AC_020586AC.c
- docs/function_notes/hk_10.md:113 queue-send: if the busy bit at *off_2058744+dword_2058748 is set, writes header (a1, a4, length a3) into a queue buffer, copies a2 data, calls sub_200EE58 (DC_StoreRange), then sub_2050650 to submit.
sub_2058754
export/plan0/arm9_main/sub_2058754_02058754.c
- docs/function_notes/hk_10.md:114 sets bit0 of the byte at *off_2058768+dword_205876C (request pending) and returns 1.
sub_2058770
export/plan0/arm9_main/sub_2058770_02058770.c
- docs/function_notes/hk_10.md:115 calls sub_2056464 on a per-slot entry (size dword_20587C8, base dword_20587C4 plus word index if state 2); sets bit0 at dword_20587CC, clears dword_20587D0, zeroes word dword_20587D4.
sub_20587D8
export/plan0/arm9_main/sub_20587D8_020587D8.c
- docs/function_notes/hk_10.md:116 state step: if event field +16 is zero and field +12 is 11, sets event 8 at +dword_205881C; if 12 sets state 11; otherwise calls sub_2050E60(2).
sub_2058820
export/plan0/arm9_main/sub_2058820_02058820.c
- docs/function_notes/hk_10.md:117 reset-all: calls sub_214358C(14, off_2058898, 0), sub_20518C8(0) when state 1, clears 8 slot blocks (18 or 2 bytes each depending on state), then clears byte dword_20588A4.
sub_20588A8
export/plan0/arm9_main/sub_20588A8_020588A8.c
- docs/function_notes/hk_10.md:118 calls sub_2058DC0(off_20588CC); if it returns 1, sets event word +16 to 12 on the object at *off_20588D0+dword_20588D4.
sub_20588D8
export/plan0/arm9_main/sub_20588D8_020588D8.c
- docs/function_notes/hk_10.md:119 resets state: clears the int at *off_2058900+dword_2058904, clears bit1 of byte dword_2058908 and byte dword_205890C; returns 0.
sub_2058910
export/plan0/arm9_main/sub_2058910_02058910.c
- docs/function_notes/hk_11.md:3 archive/FS loader step; calls sub_2059CE8 (FS check); if nonzero and state is 2, calls sub_205A108 and sub_20474E4 (heap budgets); sets event word +16=3, +18=1.
sub_2058950
export/plan0/arm9_main/sub_2058950_02058950.c
- docs/function_notes/hk_11.md:4 thunk-like state dispatcher; reads 16-bit state at off_2058968; if 2 returns sub_2059EA4(2), else returns the state.
sub_205896C
export/plan0/arm9_main/sub_205896C_0205896C.c
- docs/function_notes/hk_11.md:5 gated on kart flag bit 0x40 and a state word; calls sub_204BCDC and on result 2 calls sub_204F8A0; on success sets event word +16=2, +18=1.
sub_20589EC
export/plan0/arm9_main/sub_20589EC_020589EC.c
- docs/function_notes/hk_11.md:6 if sub_205955C() returns 1, sets event word +16=4, +18=1 in the owning struct and returns 1.
sub_2058A18
export/plan0/arm9_main/sub_2058A18_02058A18.c
- docs/function_notes/hk_11.md:7 reset helper; clears a dword and bit 1 of a byte in the struct at off_2058A34; returns 2.
sub_2058A40
export/plan0/arm9_main/sub_2058A40_02058A40.c
- docs/function_notes/hk_11.md:8 if state is 1 and flag bit 0 is set, calls sub_2050320(2, byte, byte); on success sets event word +16=1, +18=1.
sub_2058AA0
export/plan0/arm9_main/sub_2058AA0_02058AA0.c
- docs/function_notes/hk_11.md:9 if state is 1, either calls sub_2050320(1,...) then sub_2050034 when sub_2059784() is true, or increments a 16-bit counter (sub_2050E60(7) on overflow).
sub_2058B10
export/plan0/arm9_main/sub_2058B10_02058B10.c
- docs/function_notes/hk_11.md:10 calls sub_20562E8, then sets event word +16=15, +18=1 and returns 1.
sub_2058B74
export/plan0/arm9_main/sub_2058B74_02058B74.c
- docs/function_notes/hk_11.md:11 decrements a 16-bit counter in a struct; when it goes negative sets event word +16=7, +18=1 and returns 1.
sub_2058BA4
export/plan0/arm9_main/sub_2058BA4_02058BA4.c
- docs/function_notes/NEEDS_REVIEW.md:377 probably computes a 16-bit angle/position from sub_200F5AC(a1) via 64-bit helper sub_2133048 (+120 offset) and stores it; default 180 when state is not 2.
- docs/function_notes/hk_11.md:12 probably computes a 16-bit angle/position from sub_200F5AC(a1) via 64-bit helper sub_2133048 (+120 offset) and stores it; default 180 when state is not 2.
sub_2058C10
export/plan0/arm9_main/sub_2058C10_02058C10.c
- docs/function_notes/hk_11.md:13 if struct+16 is zero and state is 1, checks a racer state (11/15 call sub_2051814(0), 13 sets event word 7); if state is not 1 sets event word 22.
sub_2058CAC
export/plan0/arm9_main/sub_2058CAC_02058CAC.c
- docs/function_notes/hk_11.md:14 object state machine; compares a 16-bit field with dword_2058DAC; on match returns 3 or 2 (sub_2050E60 when state 2), else sub_2046B40 and maybe sub_2050E60(7).
sub_2058DC0
export/plan0/arm9_main/sub_2058DC0_02058DC0.c
- docs/function_notes/hk_11.md:15 switch state machine (states 0-7) on a struct at off_2058EDC using sub_2057DF0, sub_20505A8(3/4/5, ...) and flag bits; returns bit 1 of a byte when in state 1.
sub_2058EFC
export/plan0/arm9_main/sub_2058EFC_02058EFC.c
- docs/function_notes/hk_11.md:16 calls sub_210E680 (sound data open); on zero result sets byte flag at off_2058F18+dword to 1; returns the result.
sub_2058F20
export/plan0/arm9_main/sub_2058F20_02058F20.c
- docs/function_notes/hk_11.md:17 thunk; tail-calls through function pointer at off_2058F24.
sub_2058F28
export/plan0/arm9_main/sub_2058F28_02058F28.c
- docs/function_notes/hk_11.md:18 calls sub_2058DC0; if it returns 1 sets event word +16=15, +18=1 and returns 1.
sub_2058F58
export/plan0/arm9_main/sub_2058F58_02058F58.c
- docs/function_notes/hk_11.md:19 calls sub_210E524 (loads wave groups); on zero result sets a flag byte to 1.
sub_2058F7C
export/plan0/arm9_main/sub_2058F7C_02058F7C.c
- docs/function_notes/hk_11.md:20 reset helper; clears a dword, bit 1 of a byte, and a byte in the struct at off_2058FA4; returns 0.
sub_2058FB4
export/plan0/arm9_main/sub_2058FB4_02058FB4.c
- docs/function_notes/hk_11.md:21 calls sub_205905C; if 1 sets event word +16=19, +18=1 and returns 1.
sub_2058FE0
export/plan0/arm9_main/sub_2058FE0_02058FE0.c
- docs/function_notes/hk_11.md:22 if state at off_2059004 is 1 returns sub_20518C8(0), else returns the state.
sub_2059008
export/plan0/arm9_main/sub_2059008_02059008.c
- docs/function_notes/hk_11.md:23 calls sub_205910C; if 1 sets event word +16=20, +18=1 and returns 1.
sub_2059034
export/plan0/arm9_main/sub_2059034_02059034.c
- docs/function_notes/hk_11.md:24 same pattern as sub_2058FE0 with off_2059058 (sub_20518C8(0) when state is 1).
sub_205905C
export/plan0/arm9_main/sub_205905C_0205905C.c
- docs/function_notes/hk_11.md:25 reads racer/object state at off_2059104 and its flags; returns 3 if blocked, 1 if inactive, else sub_2059700() for state 1 or sub_20595E8(2,0,0) for state 2.
sub_205910C
export/plan0/arm9_main/sub_205910C_0205910C.c
- docs/function_notes/hk_11.md:26 same as sub_205905C with off_20591B4, calling sub_20595E8(3,0,0) for state 2.
sub_20591BC
export/plan0/arm9_main/sub_20591BC_020591BC.c
- docs/function_notes/hk_11.md:27 thunk; tail-calls through function pointer at off_20591C0.
sub_205928C
export/plan0/arm9_main/sub_205928C_0205928C.c
- docs/function_notes/hk_11.md:28 if struct+16 word is zero, sets event word +16=15, +18=1 at off_20592A4 and returns 1.
sub_20592AC
export/plan0/arm9_main/sub_20592AC_020592AC.c
- docs/function_notes/hk_11.md:29 if state at off_20592D0 is 1 returns sub_20518C8(1), else returns the state.
sub_20592D4
export/plan0/arm9_main/sub_20592D4_020592D4.c
- docs/function_notes/hk_11.md:30 calls sub_2058DC0; if 1 sets event word +16=20, +18=1 and returns 1.
sub_2059304
export/plan0/arm9_main/sub_2059304_02059304.c
- docs/function_notes/hk_11.md:31 reset helper; clears a dword, bit 1 of a byte, and a byte in the struct at off_205932C; returns 0.
sub_205933C
export/plan0/arm9_main/sub_205933C_0205933C.c
- docs/function_notes/hk_11.md:32 calls sub_210E5E4 with two dwords from a struct (load request); if state is 2 calls sub_2043F28(0); on failure sets a flag byte.
sub_2059388
export/plan0/arm9_main/sub_2059388_02059388.c
- docs/function_notes/hk_11.md:33 calls sub_20593DC; if 1 sets event word +16=17, +18=1 and returns 1.
sub_20593B4
export/plan0/arm9_main/sub_20593B4_020593B4.c
- docs/function_notes/hk_11.md:34 same pattern as sub_2058FE0 with off_20593D8 (sub_20518C8(0) when state is 1).
sub_20593DC
export/plan0/arm9_main/sub_20593DC_020593DC.c
- docs/function_notes/hk_11.md:35 same family as sub_205905C with off_205948C; calls sub_20595E8(1, dword, dword) for state 2.
sub_205949C
export/plan0/arm9_main/sub_205949C_0205949C.c
- docs/function_notes/hk_11.md:36 reset helper; clears a dword and bit 1 of a byte, then sets event word +16=21, +18=1 and returns 1.
sub_20594D4
export/plan0/arm9_main/sub_20594D4_020594D4.c
- docs/function_notes/hk_11.md:37 same as sub_205949C with off_20594FC, event word 18.
sub_205955C
export/plan0/arm9_main/sub_205955C_0205955C.c
- docs/function_notes/hk_11.md:38 same family as sub_205905C with off_20595E0; calls sub_2059700() for state 1 or sub_20595E8(0,0,0) for state 2.
sub_20595E8
export/plan0/arm9_main/sub_20595E8_020595E8.c
- docs/function_notes/hk_11.md:39 archive load state machine (states 0-5); in state 2 dispatches a1 0..3 to sub_20473E4 / sub_20472E4 / sub_20472A8 / sub_20473A8; inits FS via sub_2004D80.
sub_2059700
export/plan0/arm9_main/sub_2059700_02059700.c
- docs/function_notes/hk_11.md:40 small state machine (states 0,1,6,7) that waits on a bit mask at off_2059778 and calls sub_20505A8(5,255); returns 1 in state 1.
sub_2059784
export/plan0/arm9_main/sub_2059784_02059784.c
- docs/function_notes/hk_11.md:41 loops bits 1..7 of byte at +135 of off_20597C8; returns 1 if every set bit has a zero dword at 4i+dword_20597CC, else 0.
sub_20597D0
export/plan0/arm9_main/sub_20597D0_020597D0.c
- docs/function_notes/hk_11.md:42 if struct field +4 is not 11 calls sub_20559EC; otherwise, if bit a3 is clear in a byte, copies 20 bytes via sub_214D1FC and sets that bit.
sub_205982C
export/plan0/arm9_main/sub_205982C_0205982C.c
- docs/function_notes/hk_11.md:43 stores a value from sub_2036B74(a1,...) and fills an 8-entry dword array with sub_2036BEC(a1,18); probably a stream/data reader init.
sub_2059878
export/plan0/arm9_main/sub_2059878_02059878.c
- docs/function_notes/hk_11.md:44 calls sub_2046BE8 with a 23-byte block at off_20598F8; clears several bytes in a struct; if state is 1 copies a byte to +134; clears a dword at +205991C.
sub_2059920
export/plan0/arm9_main/sub_2059920_02059920.c
- docs/function_notes/hk_11.md:45 if half-word +2 is zero and ptr +12 is nonzero and count +16 >= 4, calls sub_200EE58 (DC_StoreRange); if type is 21 then calls sub_2059954(ptr).
sub_2059954
export/plan0/arm9_main/sub_2059954_02059954.c
- docs/function_notes/hk_11.md:46 large dispatcher on packet/slot bytes (index 252..255); writes per-slot tables, sends events via sub_20586AC (255/253), checks completion via sub_2059B28.
sub_2059B28
export/plan0/arm9_main/sub_2059B28_02059B28.c
- docs/function_notes/hk_11.md:47 reads pointer at off_2059B70[a1]; returns 1 if the first N bytes (N=18 if state is 1, else 2) are all nonzero, else 0.
sub_2059B78
export/plan0/arm9_main/sub_2059B78_02059B78.c
- docs/function_notes/hk_11.md:48 copies an 8-entry function-pointer table from off_2059BBC to a local array and passes it to sub_20487FC(a1, table); returns 0. Probably callback registration.
sub_2059BC0
export/plan0/arm9_main/sub_2059BC0_02059BC0.c
- docs/function_notes/hk_11.md:49 thunk; tail-calls through function pointer at off_2059BC8.
sub_2059BCC
export/plan0/arm9_main/sub_2059BCC_02059BCC.c
- docs/function_notes/hk_11.md:50 thunk; tail-calls through function pointer at off_2059BD4.
sub_2059BD8
export/plan0/arm9_main/sub_2059BD8_02059BD8.c
- docs/function_notes/hk_11.md:51 thunk; tail-calls through function pointer at off_2059BE0.
sub_2059BE4
export/plan0/arm9_main/sub_2059BE4_02059BE4.c
- docs/function_notes/hk_11.md:52 chains sub_20364E8 -> sub_20364E0 -> sub_202A658; probably a getter/lookup chain.
sub_2059C04
export/plan0/arm9_main/sub_2059C04_02059C04.c
- docs/function_notes/hk_11.md:53 range check; returns 1 if a1 lies within [off_2059C30+168, off_2059C30+172].
sub_2059C34
export/plan0/arm9_main/sub_2059C34_02059C34.c
- docs/function_notes/hk_11.md:54 if state at off_2059CE4 is 1 or 2, calls sub_2005144 (overlay load); on success sets state 4, clears +4, frees buffer +164 via sub_201797C.
sub_2059CE8
export/plan0/arm9_main/sub_2059CE8_02059CE8.c
- docs/function_notes/hk_11.md:55 file state helper; returns 1 if state (+4) is 2; if state 1 with flag +100 bit 0 clear, calls sub_2005314 and sub_20049E8 (FS close), sets state 2.
sub_2059D80
export/plan0/arm9_main/sub_2059D80_02059D80.c
- docs/function_notes/hk_11.md:56 frees the heap buffer at +164 of *off_2059DC4 with sub_201797C and clears the pointer.
sub_2059DC8
export/plan0/arm9_main/sub_2059DC8_02059DC8.c
- docs/function_notes/hk_11.md:57 if state word at *off_2059E14 is 1, allocates 133120 bytes (128 KB) via sub_2017988 and stores the pointer at +164.
sub_2059E1C
export/plan0/arm9_main/sub_2059E1C_02059E1C.c
- docs/function_notes/hk_11.md:58 loops over table off_2059EA0; state-1 entries with flag bit clear get sub_2005314 and sub_20049E8 (FS close) and move to state 2; repeats until one is found.
sub_2059EA4
export/plan0/arm9_main/sub_2059EA4_02059EA4.c
- docs/function_notes/hk_11.md:59 overlay/archive load request; switch on state (0, 2, 3) at off_205A0E0+4; load path calls sub_2005558 / sub_2004D80, sets state 1 with the index.
sub_205A0E4
export/plan0/arm9_main/sub_205A0E4_0205A0E4.c
- docs/function_notes/hk_11.md:60 reset helper; sets the state word at off_205A104 to 4 and clears +4; returns the struct pointer.
sub_205A108
export/plan0/arm9_main/sub_205A108_0205A108.c
- docs/function_notes/hk_11.md:61 creates a frame heap of 327680 bytes (320 KB) with sub_20180E0 from dword_205A138; stores the heap handle at +160 of *off_205A13C.
sub_205A140
export/plan0/arm9_main/sub_205A140_0205A140.c
- docs/function_notes/hk_11.md:62 init helper; allocates 176 bytes via sub_2036BEC into off_205A284, fills three function-pointer entries, tracks min/max range at +168/+172, clears +160/+164.
sub_205A2AC
export/plan0/arm9_main/sub_205A2AC_0205A2AC.c
- docs/function_notes/hk_11.md:63 per-slot query; reads 16-bit field at +376 of a 136-byte slot in *off_205A308 plus dword_205A30C; returns 19 if that is above 1, else the slot dword at +364.
sub_205A310
export/plan0/arm9_main/sub_205A310_0205A310.c
- docs/function_notes/hk_11.md:64 per-slot predicate; returns 1 if the 16-bit field at +376 of slot a1 plus dword_205A34C is <= 1 (inverse of sub_205A2AC).
sub_205A350
export/plan0/arm9_main/sub_205A350_0205A350.c
- docs/function_notes/hk_11.md:65 per-frame update of 4 active slots (136-byte stride at +364 of *off_205A4AC); dispatches on slot state +12 to sub_205A71C, sub_205A4B0, timer path, reset.
sub_205A4B0
export/plan0/arm9_main/sub_205A4B0_0205A4B0.c
- docs/function_notes/hk_11.md:66 initializes a 136-byte slot: clears +14, sets state +12=2, stores a2 at +0, +8 = global counter at +1832 plus 120, +4 = 19.
sub_205A4E8
export/plan0/arm9_main/sub_205A4E8_0205A4E8.c
- docs/function_notes/hk_11.md:67 returns the address of a halfword in the slot array at off_205A508 + 260 + 136a1 + 32 + 2a2.
sub_205A50C
export/plan0/arm9_main/sub_205A50C_0205A50C.c
- docs/function_notes/hk_11.md:68 returns whether bit a1 is set in the byte at +1865 of *off_205A530 (active-slot mask).
sub_205A534
export/plan0/arm9_main/sub_205A534_0205A534.c
- docs/function_notes/hk_11.md:69 marks a slot done; sets +4 = dword at +0 and state +12 = 4; returns its argument.
sub_205A548
export/plan0/arm9_main/sub_205A548_0205A548.c
- docs/function_notes/hk_11.md:70 sets both dwords (+364 and +368) of slot a1 to a2 and calls sub_20F40DC with an address from a 528-byte-stride table indexed by a byte of the slot's table.
sub_205A5B0
export/plan0/arm9_main/sub_205A5B0_0205A5B0.c
- docs/function_notes/hk_11.md:71 if slot state +12 is 0, sets +4 = 19 and calls sub_20F4718 on a 528-byte-stride table entry; otherwise returns its argument.
sub_205A630
export/plan0/arm9_main/sub_205A630_0205A630.c
- docs/function_notes/hk_11.md:72 calls sub_20EFD84 with a table-derived address and slot +368; on success sets slot +368 = 19 and returns 1.
sub_205A6B4
export/plan0/arm9_main/sub_205A6B4_0205A6B4.c
- docs/function_notes/hk_11.md:73 initializes all 4 slots (136-byte stride at +364 of *off_205A718) to 19/0 values and state 0; returns 136.
sub_205A71C
export/plan0/arm9_main/sub_205A71C_0205A71C.c
- docs/function_notes/hk_11.md:74 thin wrapper; calls the function pointer at off_205A74C with a 528-byte-stride table address.
sub_205A750
export/plan0/arm9_main/sub_205A750_0205A750.c
- docs/function_notes/hk_11.md:75 init helper; gets slot index from sub_219BB1C and fills the 136-byte slot at off_205A7A8 (state 2, +0 = a1, +8 = counter+120, +4 = 19); returns 19.
sub_205A7AC
export/plan0/arm9_main/sub_205A7AC_0205A7AC.c
- docs/function_notes/hk_11.md:76 clears a 16-bit field in a per-slot table at (off_205A7D4+1876)+36+2a1 by calling off_205A7D8 with size 2.
sub_205A7DC
export/plan0/arm9_main/sub_205A7DC_0205A7DC.c
- docs/function_notes/hk_11.md:77 packs three bit fields into the 16-bit entry at +36+2a1 of the table at off_205A854+1876: 7 bits from a2, 5 bits from a3 (shift 7), 2 bits from a4 (shift 12).
sub_205A858
export/plan0/arm9_main/sub_205A858_0205A858.c
- docs/function_notes/hk_11.md:78 message allocator; finds a free entry (+8 == 0) among 16 entries (12-byte stride at +804) of *off_205A904, sets type/subtype/timestamp, copies a4 bytes from a3.
sub_205A908
export/plan0/arm9_main/sub_205A908_0205A908.c
- docs/function_notes/hk_11.md:79 chains sub_205AB78 -> sub_205AC38 -> sub_205AA60 -> sub_205A92C; per-frame network/item-message update.
sub_205A92C
export/plan0/arm9_main/sub_205A92C_0205A92C.c
- docs/function_notes/hk_11.md:80 for each active remote slot, walks 16 queued entries; type 15 is cleared, unsent ones go to sub_20FE5B8(type, subtype, data, slot) and are marked sent.
sub_205AA60
export/plan0/arm9_main/sub_205AA60_0205AA60.c
- docs/function_notes/hk_11.md:81 for each active remote slot, unpacks 16 entries from a 32-byte record at +40 (5-bit type, 3-bit subtype), sizes via sub_20FA0E8, copies payload.
sub_205AB78
export/plan0/arm9_main/sub_205AB78_0205AB78.c
- docs/function_notes/hk_11.md:82 ages 16 queued entries (12-byte stride at +804): state 1 becomes 2 when timestamp is below the counter; timed-out state 2 entries reset to type 15.
sub_205AC38
export/plan0/arm9_main/sub_205AC38_0205AC38.c
- docs/function_notes/hk_11.md:83 packs the 16 queued entries into a 48-byte output buffer at +44 of the slot record (type byte plus payload copies) and stores the remaining size at +1828.
sub_205AD44
export/plan0/arm9_main/sub_205AD44_0205AD44.c
- docs/function_notes/hk_11.md:84 returns 1 if any of the 16 entries (flag at +812, 12-byte stride) is free; else 0.
sub_205AD88
export/plan0/arm9_main/sub_205AD88_0205AD88.c
- docs/function_notes/hk_11.md:85 resets the queued-message table (16 entries set to type 15 with cleared fields and buffers, plus a 16x4 byte table at +1764); sets size +1828 = 48.
sub_205AE8C
export/plan0/arm9_main/sub_205AE8C_0205AE8C.c
- docs/function_notes/hk_11.md:86 computes a 7-bit priority for racer slot a1 from off_205AF80 by counting higher-priority rivals; writes it into the slot table keeping the low bit.
sub_205AF90
export/plan0/arm9_main/sub_205AF90_0205AF90.c
- docs/function_notes/hk_11.md:87 sets dword +1836 = 1 in the struct at *off_205AFA4; returns the struct pointer.
sub_205AFA8
export/plan0/arm9_main/sub_205AFA8_0205AFA8.c
- docs/function_notes/NEEDS_REVIEW.md:378 probably builds a packed race-status word for racer id from the table at off_205B0A4, combining sub_205D27C, sub_203C240, sub_203C880, sub_203C8C0 bitfields.
- docs/function_notes/hk_11.md:88 probably builds a packed race-status word for racer id from the table at off_205B0A4, combining sub_205D27C, sub_203C240, sub_203C880, sub_203C8C0 bitfields.
sub_205B0B4
export/plan0/arm9_main/sub_205B0B4_0205B0B4.c
- docs/function_notes/hk_11.md:89 if flag bit 0x80 at +1884 of *off_205B0F0 is set, calls sub_205B0F4 with it; then returns sub_2046B40 on the struct.
sub_205B0F4
export/plan0/arm9_main/sub_205B0F4_0205B0F4.c
- docs/function_notes/hk_11.md:90 per-frame race timing; bumps counters at +1856 per active remote racer, flags them at +1864 past 300/600 frames; when all flagged releases racers and ends race.
sub_205B32C
export/plan0/arm9_main/sub_205B32C_0205B32C.c
- docs/function_notes/hk_11.md:91 per-racer 16-bit score (sub_2120220 start values, adjusted by sub_203C8DC rank checks vs off_205B4FC table), sent via sub_2120200. Probably rubber-band.
sub_205B504
export/plan0/arm9_main/sub_205B504_0205B504.c
- docs/function_notes/hk_11.md:92 handles a 4-byte packet from a remote racer; decodes sender slot (a2[0] & 3), resets its +1856 timeout, dispatches on type nibble to sub_205B6BC / sub_205B778.
sub_205B6BC
export/plan0/arm9_main/sub_205B6BC_0205B6BC.c
- docs/function_notes/hk_11.md:93 applies received value a2 to racer state; if state +14 is 2 sets a bit in +250, else accumulates a smoothed delta into +1792+54. Probably position smoothing.
sub_205B778
export/plan0/arm9_main/sub_205B778_0205B778.c
- docs/function_notes/hk_11.md:94 if state (+14) is 4 or 5 and the stored 24-bit timestamp is zero or older than the packet's, marks the slot dirty and copies the packet payload via sub_214D1FC.
sub_205B824
export/plan0/arm9_main/sub_205B824_0205B824.c
- docs/function_notes/hk_11.md:95 updates a per-racer sample history (56-byte stride at off_205B94C, up to 12 samples) with a 64-bit time delta; probably latency/jitter; sets bit 1864 past 0x40.
sub_205B954
export/plan0/arm9_main/sub_205B954_0205B954.c
- docs/function_notes/hk_11.md:96 returns the 24-bit timestamp/counter stored at +260 of slot a1 (136-byte stride) in *off_205B974.
sub_205B978
export/plan0/arm9_main/sub_205B978_0205B978.c
- docs/function_notes/hk_11.md:97 returns the address of slot a1's +260 field if its low 24 bits equal a2, else 0.
sub_205B9A8
export/plan0/arm9_main/sub_205B9A8_0205B9A8.c
- docs/function_notes/hk_11.md:98 per-frame racer status update; calls sub_205A908 and sub_205A350, writes counter and field at +1876, chains sub_205C234 -> sub_205BE0C -> sub_205BA60.
sub_205BA60
export/plan0/arm9_main/sub_205BA60_0205BA60.c
- docs/function_notes/hk_11.md:99 race-phase state machine on phase word at *off_205BBA4+1880; phases 3/4 wait for other racers' state bytes (+1870) to leave 4/5, then phase 5.
sub_205BBA8
export/plan0/arm9_main/sub_205BBA8_0205BBA8.c
- docs/function_notes/hk_11.md:100 returns 9 if phase (+1880) is 3, 2 if phase is 5 with flag 0x100 set, else 0.
sub_205BBE8
export/plan0/arm9_main/sub_205BBE8_0205BBE8.c
- docs/function_notes/hk_11.md:101 clears flag 0x100 at +1884 of *off_205BC04; returns the address of its +1792 block.
sub_205BC08
export/plan0/arm9_main/sub_205BC08_0205BC08.c
- docs/function_notes/hk_11.md:102 per-frame racer update; calls sub_205A908, sub_205A350, writes status block at +1876, chains sub_205C234 -> sub_205BE0C; phase 2 advances via sub_20B2E34.
sub_205BE0C
export/plan0/arm9_main/sub_205BE0C_0205BE0C.c
- docs/function_notes/hk_11.md:103 computes per-racer ordering: sorts 4 slots by key from sub_205AFA8 / entry +388; writes a rank byte per racer into dword_205C230 via sub_203C880 / sub_203E4C4.
sub_205C234
export/plan0/arm9_main/sub_205C234_0205C234.c
- docs/function_notes/hk_11.md:104 round-robin network send scheduler; for up to one active remote slot calls sub_205C340(slot, 3, a1); stores the next slot index times 2 at +1850.
sub_205C340
export/plan0/arm9_main/sub_205C340_0205C340.c
- docs/function_notes/hk_11.md:105 sends a network packet of type a2 to remote slot a1 via sub_2120340 (flushed by sub_200EE58); sets flag bit 4 at +1884 while in flight; returns the send result.
sub_205C470
export/plan0/arm9_main/sub_205C470_0205C470.c
- docs/function_notes/hk_11.md:106 resets network/race session state: flags at +1884, counters, phase +1880 = 2, clears 108 bytes at +1876; sets entry +388 for valid ids.
sub_205C594
export/plan0/arm9_main/sub_205C594_0205C594.c
- docs/function_notes/hk_11.md:107 decrements a countdown at +1846 of *off_205C608; while positive calls sub_205C800(+1844, off_205C60C); on zero sets event word 4, returns 1.
sub_205C610
export/plan0/arm9_main/sub_205C610_0205C610.c
- docs/function_notes/hk_11.md:108 records slot a1 and a timing delta (+1846 minus slot +392) into the status block; calls sub_205C340(a1, 2, 8) and on success stores a1 at +1844.
sub_205C684
export/plan0/arm9_main/sub_205C684_0205C684.c
- docs/function_notes/hk_11.md:109 sets countdown +1846 = 240 and +1844 = 0; returns the address of the +1792 block.
sub_205C6B0
export/plan0/arm9_main/sub_205C6B0_0205C6B0.c
- docs/function_notes/hk_11.md:110 scans 4 slots for a pending dword at +68; copies 40 bytes and sends via sub_205C340(slot, 0, 40); on clean mask sets event 3.
sub_205C7A0
export/plan0/arm9_main/sub_205C7A0_0205C7A0.c
- docs/function_notes/hk_11.md:111 if the index a1 is valid and its slot is active, calls sub_205C340(a1, 1, 8) and on success stores a1 at +248.
sub_205C800
export/plan0/arm9_main/sub_205C800_0205C800.c
- docs/function_notes/hk_11.md:112 finds the next active non-local slot after index a1 (wrapping over 4) and calls callback a2 with it; returns -1 if none.
sub_205C898
export/plan0/arm9_main/sub_205C898_0205C898.c
- docs/function_notes/hk_11.md:113 initializes the send state: +250 = local slot bit, +1846 = 127, +248 = 0; for each slot computes a 16-bit latency-like value via sub_2132E40, stored at +392.
sub_205C98C
export/plan0/arm9_main/sub_205C98C_0205C98C.c
- docs/function_notes/hk_11.md:114 per-frame send/receive handler; builds a mask of slots that are local or have >= 12 queued entries, posts event 2 on match; sends buffers via sub_205C340.
sub_205CBE4
export/plan0/arm9_main/sub_205CBE4_0205CBE4.c
- docs/function_notes/hk_11.md:115 session-state init; clears 4 racer records (56-byte stride), zeroes +248/+251/+244, sets +1846 = 127 and phase +1880 = 1, sets flag 0x80 at +1884.
sub_205CCEC
export/plan0/arm9_main/sub_205CCEC_0205CCEC.c
- docs/function_notes/hk_11.md:116 if the state word at *off_205CD20 is 4 or 5, increments the frame counter at +1832; returns the counter.
sub_205CD24
export/plan0/arm9_main/sub_205CD24_0205CD24.c
- docs/function_notes/hk_11.md:117 when phase at *off_205CFC0+8 is 5, allocates a 1888-byte race-session struct and deserializes tables via sub_2036B74; calls sub_205AD88. Probably race load.
sub_205CFD4
export/plan0/arm9_main/sub_205CFD4_0205CFD4.c
- docs/function_notes/hk_11.md:118 builds a compact index table from the 4-bit slot mask at off_205D078 (index per slot, -1 if unset), stores the mask at +4, then tail-calls a pointer.
sub_205D07C
export/plan0/arm9_main/sub_205D07C_0205D07C.c
- docs/function_notes/hk_11.md:119 resets the 4-entry index table at off_205D0B8 to -1 and sets byte +5 to 0; returns the table pointer.
sub_205D0BC
export/plan0/arm9_main/sub_205D0BC_0205D0BC.c
- docs/function_notes/NEEDS_REVIEW.md:379 probably race-config setup: allocs 10 bytes via sub_2036BEC, stores pointer in off_205D0E4, returns 10
- docs/function_notes/hk_12.md:3 probably race-config setup: allocs 10 bytes via sub_2036BEC, stores pointer in off_205D0E4, returns 10
sub_205D0E8
export/plan0/arm9_main/sub_205D0E8_0205D0E8.c
- docs/function_notes/hk_12.md:4 copies a 4-row block of 10-byte records (stride 80) with sub_214D1FC, from table off_205D13C at offsets 10a1 and 10a2 (probably swap/copy of per-slot rows)
sub_205D140
export/plan0/arm9_main/sub_205D140_0205D140.c
- docs/function_notes/hk_12.md:5 buckets the value at +320 of the state in off_205D18C into 2..7 (thresholds 100/90/70/50/0), probably a rank or score tier
sub_205D190
export/plan0/arm9_main/sub_205D190_0205D190.c
- docs/function_notes/hk_12.md:6 combines a +320 threshold bucket (1000/700/400/200/0) with a position-derived term (u16 at +96, byte at +98), returns 7 - clamp(sum, 7)
sub_205D27C
export/plan0/arm9_main/sub_205D27C_0205D27C.c
- docs/function_notes/hk_12.md:7 table lookup off_205D35C (stride 80, 10 per slot, byte +3) using a place index from racer u16 +96 and kind byte at +8; fallback is byte +976 minus a1
sub_205D360
export/plan0/arm9_main/sub_205D360_0205D360.c
- docs/function_notes/hk_12.md:8 returns byte at off_205D3EC + 80place + 10a1 + 5, or 0 when place index is negative (place index from racer +96, kind check)
sub_205D3F0
export/plan0/arm9_main/sub_205D3F0_0205D3F0.c
- docs/function_notes/hk_12.md:9 returns u16 at off_205D47C + 80place + 10a1, or 0 when place index is negative
sub_205D480
export/plan0/arm9_main/sub_205D480_0205D480.c
- docs/function_notes/hk_12.md:10 scans bit0 of byte +3 of two 8-byte entries at off_205D4E4+324; returns first index with the bit set, else -1
sub_205D4E8
export/plan0/arm9_main/sub_205D4E8_0205D4E8.c
- docs/function_notes/hk_12.md:11 returns byte +2 of the 80-byte row at off_205D554 for the current place when kind is 0, 3 or 5; else 0
sub_205D558
export/plan0/arm9_main/sub_205D558_0205D558.c
- docs/function_notes/hk_12.md:12 for slots 0..1 rewrites per-slot record (+324 array): byte +2 from table off_205D6C8 (+1 if slot == arg), sums u16 counters for flagged entries, caps at dword_205D6CC
sub_205D6D0
export/plan0/arm9_main/sub_205D6D0_0205D6D0.c
- docs/function_notes/hk_12.md:13 sets flag bit0 on the record of slot a1 and clears it on the other slot's record (in two arrays at +324), probably ready/finished flags
sub_205D76C
export/plan0/arm9_main/sub_205D76C_0205D76C.c
- docs/function_notes/hk_12.md:14 returns pointer to the 10-byte record at off_205D7C4 + 80place + 10a1 and stores byte a2 at its +2
sub_205D7C8
export/plan0/arm9_main/sub_205D7C8_0205D7C8.c
- docs/function_notes/hk_12.md:15 copies a 10-byte record from table off_205D814 (80a3 + 10a2): bytes +8/+9 to result+2/+3 and halfword +6 to result
sub_205D818
export/plan0/arm9_main/sub_205D818_0205D818.c
- docs/function_notes/hk_12.md:16 inverse of sub_205D7C8: writes a 10-byte record (halfword +6, bytes +8/+9) into table off_205D888 at the current place row
sub_205D88C
export/plan0/arm9_main/sub_205D88C_0205D88C.c
- docs/function_notes/hk_12.md:17 resets the record for slot a1 in table off_205D970: flag byte +3 = 1, +4 = 0, halfword 0, position byte +5 = old+1 if a2 (cap 99); returns 1 or old+1
sub_205D974
export/plan0/arm9_main/sub_205D974_0205D974.c
- docs/function_notes/hk_12.md:18 zeroes the halfword at record a1 (stride 10) in the place row from off_205D9D0; returns that row pointer
sub_205D9D4
export/plan0/arm9_main/sub_205D9D4_0205D9D4.c
- docs/function_notes/hk_12.md:19 updates record a1 in table off_205DB20: sets bytes +3 = a2 and +4 = a3, halfword = prev + a3 capped at dword_205DB24, byte +5 incremented when a2 == 1 (cap 99)
sub_205DB28
export/plan0/arm9_main/sub_205DB28_0205DB28.c
- docs/function_notes/hk_12.md:20 returns the current place index 0..3 derived from u16 at +96 minus 1 (signed rounding trick), probably lap or section index
sub_205DB50
export/plan0/arm9_main/sub_205DB50_0205DB50.c
- docs/function_notes/agent_03.md:4 clears 4 x 8 ten-byte entries and 4 x 2 four-byte entries in state block *0x0217A9FC, sets flag bit 0 from mode, zeroes +320
sub_205DC54
export/plan0/arm9_main/sub_205DC54_0205DC54.c
- docs/function_notes/agent_03.md:5 allocates 360-byte state block from heap, stores pointer at 0x0217A9FC
sub_205DC7C
export/plan0/arm9_main/sub_205DC7C_0205DC7C.c
- docs/function_notes/agent_03.md:6 returns low byte of argument (zero-extend to u8)
sub_205DC84
export/plan0/arm9_main/sub_205DC84_0205DC84.c
- docs/function_notes/agent_03.md:7 sets scene-manager state (+8 = 9, +0 = 0); if game mode 2 sets mode vars, then loops forever running scene state machine via sub_2036590/20364F8 (noreturn)
sub_205DD38
export/plan0/arm9_main/sub_205DD38_0205DD38.c
- docs/function_notes/agent_03.md:8 top-level scene loop: runs scene state table (0x0215490C), updates previous/current scene ids, handles transitions, on exit frees heap and starts next game part
sub_205DEE0
export/plan0/arm9_main/sub_205DEE0_0205DEE0.c
- docs/function_notes/agent_03.md:9 scene transition teardown/reinit: frees old scene heap, resets display/IRQ/VRAM (REG_IME, DISPCNT 0x400006C), allocates new 0x40000 block and scene heap
sub_205E090
export/plan0/arm9_main/sub_205E090_0205E090.c
- docs/function_notes/agent_03.md:10 getter: third word (+8) of scene id table at 0x021653B8
sub_205E0A0
export/plan0/arm9_main/sub_205E0A0_0205E0A0.c
- docs/function_notes/agent_03.md:11 getter: second word (+4) of scene id table at 0x021653B8
sub_205E0B0
export/plan0/arm9_main/sub_205E0B0_0205E0B0.c
- docs/function_notes/agent_03.md:12 scene init by mode (0/1/2): calls mode-specific setup (sub_212055C or sub_2054368) and allocates scene heap block, stores at 0x0217AA00+12
sub_205E180
export/plan0/arm9_main/sub_205E180_0205E180.c
- docs/function_notes/agent_03.md:13 allocates 16-byte scene manager struct at 0x0217AA00, state=3, +12=0
sub_205E1C4
export/plan0/arm9_main/sub_205E1C4_0205E1C4.c
- docs/function_notes/agent_03.md:14 checks mission/challenge-like objectives: counts matching course objects per entry and returns 1 when a counter exceeds a limit
sub_205E2B8
export/plan0/arm9_main/sub_205E2B8_0205E2B8.c
- docs/function_notes/agent_03.md:15 clears pointer at 0x0217AA04
sub_205E2CC
export/plan0/arm9_main/sub_205E2CC_0205E2CC.c
- docs/function_notes/agent_03.md:16 builds table of 12-byte entries for every course object of type 5, computing a distance/size value (sqrt of summed squares) per entry
sub_205E4E4
export/plan0/arm9_main/sub_205E4E4_0205E4E4.c
- docs/function_notes/agent_03.md:17 copies 32-byte table at 0x021653C0 to stack and calls sub_20487FC with it; returns 0
sub_205E518
export/plan0/arm9_main/sub_205E518_0205E518.c
- docs/function_notes/agent_03.md:18 thunk: calls function pointer at 0x0202DF35 (Thumb) with its argument
sub_205E520
export/plan0/arm9_main/sub_205E520_0205E520.c
- docs/function_notes/agent_03.md:19 thunk: calls Thumb function at 0x0202DEC9, no args
sub_205E528
export/plan0/arm9_main/sub_205E528_0205E528.c
- docs/function_notes/agent_03.md:20 thunk: calls Thumb function at 0x0202DEFD, no args
sub_205E530
export/plan0/arm9_main/sub_205E530_0205E530.c
- docs/function_notes/agent_03.md:21 calls sub_202DFD4 with the current heap handle
sub_205E548
export/plan0/arm9_main/sub_205E548_0205E548.c
- docs/function_notes/agent_03.md:22 counts how many of 60 record slots (36 bytes each, base *(0x0217A9E8)+32) have valid flag bit 0 at +38
sub_205E5C4
export/plan0/arm9_main/sub_205E5C4_0205E5C4.c
- docs/function_notes/agent_03.md:23 if arg non-zero, picks a save/record rebuild routine (sub_205E900 or sub_205E67C) depending on connection state and runs it, sets flag +248
sub_205E67C
export/plan0/arm9_main/sub_205E67C_0205E67C.c
- docs/function_notes/agent_03.md:24 rebuilds record blocks for 4 players: loads each player's 512-byte data into 12 blocks of 5 entries and writes them back
sub_205E900
export/plan0/arm9_main/sub_205E900_0205E900.c
- docs/function_notes/agent_03.md:25 same as sub_205E67C for up to 8 players with an extra validity check, then calls sub_2057CA4
sub_205EC14
export/plan0/arm9_main/sub_205EC14_0205EC14.c
- docs/function_notes/agent_03.md:26 selects block index (value/5) and loads it via sub_20576B8 if valid; stores index in a1[0], else -1
sub_205ECA4
export/plan0/arm9_main/sub_205ECA4_0205ECA4.c
- docs/function_notes/agent_03.md:27 copies one 36-byte record, checks flags bits 0 and 4 and copies the matching 512-byte block into output
sub_205EDA0
export/plan0/arm9_main/sub_205EDA0_0205EDA0.c
- docs/function_notes/agent_03.md:28 allocates a 2820-byte buffer, sets first byte to 0xFF
sub_205EDCC
export/plan0/arm9_main/sub_205EDCC_0205EDCC.c
- docs/function_notes/agent_03.md:29 calls sub_20577B4 on record table then sub_20574A0
sub_205EDF8
export/plan0/arm9_main/sub_205EDF8_0205EDF8.c
- docs/function_notes/agent_03.md:30 calls function pointer 0x020577B5 with the record table pointer
sub_205EE14
export/plan0/arm9_main/sub_205EE14_0205EE14.c
- docs/function_notes/agent_03.md:31 copies 36-byte record number a1 to a2 if given; returns whether valid flag bit 0 is set
sub_205EE74
export/plan0/arm9_main/sub_205EE74_0205EE74.c
- docs/function_notes/agent_03.md:32 copies 36-byte record number a1 out to buffer a2
sub_205EEB0
export/plan0/arm9_main/sub_205EEB0_0205EEB0.c
- docs/function_notes/agent_03.md:33 dispatches by state (+12 or +8) to sub_205F218/205F498 (2), sub_205F700 (3), sub_203B230 (4), sub_205EF70 (5)
sub_205EF70
export/plan0/arm9_main/sub_205EF70_0205EF70.c
- docs/function_notes/agent_03.md:34 end-of-match tally (mode 5): compares own score to each other racer and bumps win/lose/draw counters (cap 1000000), updates 36-byte records
sub_205F218
export/plan0/arm9_main/sub_205F218_0205F218.c
- docs/function_notes/agent_03.md:35 end-of-race tally variant A (mode 2, sub-mode 1): per opponent decides win/lose/draw, updates counters at +60/+64 (cap 1000000), saves records
sub_205F498
export/plan0/arm9_main/sub_205F498_0205F498.c
- docs/function_notes/agent_03.md:36 end-of-race tally variant B (mode 2, other sub-mode): same as sub_205F218 without the sub_203C8DC call
sub_205F700
export/plan0/arm9_main/sub_205F700_0205F700.c
- docs/function_notes/agent_03.md:37 end-of-race tally for mode 3 (teams/ranked): per opponent win/lose/draw by score or team id, updates counters at +52/+56 (cap 1000000)
sub_205FA00
export/plan0/arm9_main/sub_205FA00_0205FA00.c
- docs/function_notes/agent_03.md:38 updates one opponent's 36-byte record: bumps one of its 16-bit win/lose/draw counters (cap 0xFFFF) and stores packed race date/time
sub_205FBB8
export/plan0/arm9_main/sub_205FBB8_0205FBB8.c
- docs/function_notes/agent_03.md:39 byte-array bit test: if connected mode uses *0x0217A9E8+52 table else default table (sub_2056E00 / sub_2056DEC)
sub_205FC28
export/plan0/arm9_main/sub_205FC28_0205FC28.c
- docs/function_notes/agent_03.md:40 same as sub_205FBB8 but with table at +48
sub_205FC98
export/plan0/arm9_main/sub_205FC98_0205FC98.c
- docs/function_notes/agent_03.md:41 checks a 13-byte-stride table entry is non-zero and <= unlocked limit (from record +57 or sub_2056D98)
sub_205FD2C
export/plan0/arm9_main/sub_205FD2C_0205FD2C.c
- docs/function_notes/agent_03.md:42 same as sub_205FC98 but always uses limit sub_2056D98()
sub_205FD78
export/plan0/arm9_main/sub_205FD78_0205FD78.c
- docs/function_notes/agent_03.md:43 reads a record via sub_20569DC, returns whether its type is 1 and outputs a second field
sub_205FDB4
export/plan0/arm9_main/sub_205FDB4_0205FDB4.c
- docs/function_notes/agent_03.md:44 reads a ghost time record for a course and builds its 16-character share code (sub_205FE1C); 0 if no record
sub_205FE1C
export/plan0/arm9_main/sub_205FE1C_0205FE1C.c
- docs/function_notes/agent_03.md:45 ghost share code generator: packs time (ms, < 240000), course id and character info, XOR-chains it, outputs 16 chars from alphabet S7LCX3JZE8FG4HBKWN52YPA6RTU9VMDQ
sub_2060004
export/plan0/arm9_main/sub_2060004_02060004.c
- docs/function_notes/agent_03.md:46 clears the 6 ghost slots of a course (zeroes 32-byte records via sub_2056C6C) and calls a save routine
sub_20600B4
export/plan0/arm9_main/sub_20600B4_020600B4.c
- docs/function_notes/agent_03.md:47 course id lookup (sub_20467D0) then sub_203B96C on it
sub_20600D0
export/plan0/arm9_main/sub_20600D0_020600D0.c
- docs/function_notes/agent_03.md:48 copies the 20-byte name/data of a valid ghost record into buffer a3; returns 1 if record valid
sub_2060134
export/plan0/arm9_main/sub_2060134_02060134.c
- docs/function_notes/agent_03.md:49 copies a valid ghost record's time (u16 min, u8 sec, u8 ms/frac) to a3; returns 1 if valid
sub_20601A0
export/plan0/arm9_main/sub_20601A0_020601A0.c
- docs/function_notes/agent_03.md:50 getter: ghost record field +26 (or -1 if record invalid)
sub_20601E4
export/plan0/arm9_main/sub_20601E4_020601E4.c
- docs/function_notes/agent_03.md:51 getter: ghost record field +25 (or -1 if record invalid)
sub_2060228
export/plan0/arm9_main/sub_2060228_02060228.c
- docs/function_notes/agent_03.md:52 returns whether ghost record (course,slot) is valid
sub_2060268
export/plan0/arm9_main/sub_2060268_02060268.c
- docs/function_notes/agent_03.md:53 returns 1 if no ghost slot of the course is valid (all 6 empty or course unmapped)
sub_2060318
export/plan0/arm9_main/sub_2060318_02060318.c
- docs/function_notes/agent_03.md:54 copies 4 bytes of a mission/rank record if valid; returns 1/0
sub_2060364
export/plan0/arm9_main/sub_2060364_02060364.c
- docs/function_notes/agent_03.md:55 getter: ranking record field +30 (9 if invalid)
sub_2060390
export/plan0/arm9_main/sub_2060390_02060390.c
- docs/function_notes/agent_03.md:56 getter: ranking record field +29 (-1 if invalid)
sub_20603BC
export/plan0/arm9_main/sub_20603BC_020603BC.c
- docs/function_notes/agent_03.md:57 getter: cup/class rank (star rank) from record +28; 3 if record invalid
sub_20603E8
export/plan0/arm9_main/sub_20603E8_020603E8.c
- docs/function_notes/agent_03.md:58 getter: ranking record field +26 (-1 if invalid)
sub_2060414
export/plan0/arm9_main/sub_2060414_02060414.c
- docs/function_notes/agent_03.md:59 getter: ranking record field +25 (-1 if invalid)
sub_2060440
export/plan0/arm9_main/sub_2060440_02060440.c
- docs/function_notes/agent_03.md:60 getter: whether the cup/class record exists (returns record's valid field, 0 if none)
sub_2060468
export/plan0/arm9_main/sub_2060468_02060468.c
- docs/function_notes/agent_03.md:61 if 36-byte record a1 is valid and flagged, copies/converts its 12-byte data via sub_2152584/sub_2152918 with a2; returns 1
sub_2060510
export/plan0/arm9_main/sub_2060510_02060510.c
- docs/function_notes/agent_03.md:62 merges player record a2 into a1: adds five 16-bit counters, copies 20 bytes and packed date, clears a2 (used when moving/combining records)
sub_20607B0
export/plan0/arm9_main/sub_20607B0_020607B0.c
- docs/function_notes/agent_03.md:63 clears 36-byte record a1 (and its 12-byte companion), saves; returns whether it was valid
sub_2060880
export/plan0/arm9_main/sub_2060880_02060880.c
- docs/function_notes/agent_03.md:66 sets/clears flag bit 3 (a1's record) from a2; returns 0 if record not valid
sub_20608FC
export/plan0/arm9_main/sub_20608FC_020608FC.c
- docs/function_notes/agent_03.md:67 copies the 20-byte name of valid friend record a1 to a2; returns 1 if valid
sub_2060950
export/plan0/arm9_main/sub_2060950_02060950.c
- docs/function_notes/agent_03.md:68 unpacks friend record's packed date into a2 (7-bit year, 4-bit month, 5-bit day); returns 1 if valid
sub_20609C4
export/plan0/arm9_main/sub_20609C4_020609C4.c
- docs/function_notes/agent_03.md:69 getter: friend record counter field A (-1 if record invalid)
sub_20609F8
export/plan0/arm9_main/sub_20609F8_020609F8.c
- docs/function_notes/agent_03.md:70 getter: friend record counter field B (-1 if record invalid)
sub_2060A2C
export/plan0/arm9_main/sub_2060A2C_02060A2C.c
- docs/function_notes/agent_03.md:71 getter: friend record counter field C (-1 if record invalid)
sub_2060A60
export/plan0/arm9_main/sub_2060A60_02060A60.c
- docs/function_notes/agent_03.md:72 getter: friend record counter field D (-1 if record invalid)
sub_2060A94
export/plan0/arm9_main/sub_2060A94_02060A94.c
- docs/function_notes/agent_03.md:73 getter: friend record counter field E (-1 if record invalid)
sub_2060AC8
export/plan0/arm9_main/sub_2060AC8_02060AC8.c
- docs/function_notes/agent_03.md:74 getter: friend record first counter (-1 if record invalid)
sub_2060AFC
export/plan0/arm9_main/sub_2060AFC_02060AFC.c
- docs/function_notes/agent_03.md:75 getter: friend record flag bit 3 (0 if invalid)
sub_2060B34
export/plan0/arm9_main/sub_2060B34_02060B34.c
- docs/function_notes/agent_03.md:76 returns whether friend record a1 is valid (flag byte bit 0)
sub_2060B68
export/plan0/arm9_main/sub_2060B68_02060B68.c
- docs/function_notes/agent_03.md:77 loops 60 records; clears flag bit 1 on valid ones whose friend code fails check sub_2152A24
sub_2060C0C
export/plan0/arm9_main/sub_2060C0C_02060C0C.c
- docs/function_notes/agent_03.md:78 MI_CpuCopy-style copy of 720 bytes (60 friend codes x 12) from roster code table to a1
sub_2060C38
export/plan0/arm9_main/sub_2060C38_02060C38.c
- docs/function_notes/agent_03.md:79 copies 720 bytes from a1 into the roster friend-code table
sub_2060C68
export/plan0/arm9_main/sub_2060C68_02060C68.c
- docs/function_notes/agent_03.md:80 adds/updates a friend from a player struct (name at +536, flag +532): wrapper of sub_2060D1C
sub_2060CB4
export/plan0/arm9_main/sub_2060CB4_02060CB4.c
- docs/function_notes/agent_03.md:81 adds a friend with the local friend code (sub_21528BC) via sub_2060D1C, name a2
sub_2060D1C
export/plan0/arm9_main/sub_2060D1C_02060D1C.c
- docs/function_notes/agent_03.md:82 finds or allocates a friend slot (60 max) by friend code, replacing oldest if full; stores code, name, date, flags; returns slot or -1
sub_206105C
export/plan0/arm9_main/sub_206105C_0206105C.c
- docs/function_notes/agent_03.md:83 finds slot index of friend whose friend code matches a1 (-1 if none)
sub_2061104
export/plan0/arm9_main/sub_2061104_02061104.c
- docs/function_notes/agent_03.md:84 checks local friend code: returns 1 if invalid/own code, 2 if found in roster, 0 if not (game code 0x414D434A)
sub_2061220
export/plan0/arm9_main/sub_2061220_02061220.c
- docs/function_notes/agent_03.md:85 friend-code conversion of own code (stored at *0x0217A9E0+76) via sub_2152918 into a1
sub_2061250
export/plan0/arm9_main/sub_2061250_02061250.c
- docs/function_notes/agent_03.md:86 returns whether the local WFC friend code (at +76) is non-zero
sub_2061290
export/plan0/arm9_main/sub_2061290_02061290.c
- docs/function_notes/agent_03.md:87 calls Thumb helper (0x02152639) on the local friend code field
sub_20612B0
export/plan0/arm9_main/sub_20612B0_020612B0.c
- docs/function_notes/agent_03.md:88 finalise online match: copies pending score, adds it to total (cap 1000000+3 limit), saves roster
sub_2061358
export/plan0/arm9_main/sub_2061358_02061358.c
- docs/function_notes/agent_03.md:89 starts saving friend/rating block: stores buffer pointer at +64, sets async save callback sub_20613A0, flag +248
sub_20613A0
export/plan0/arm9_main/sub_20613A0_020613A0.c
- docs/function_notes/agent_03.md:90 save callback: for 32 entries copies 560-byte records (sub_204863C) from buffer, ends save, clears +64
sub_2061418
export/plan0/arm9_main/sub_2061418_02061418.c
- docs/function_notes/agent_03.md:91 allocates 17920 bytes (32 x 560) from heap
sub_2061428
export/plan0/arm9_main/sub_2061428_02061428.c
- docs/function_notes/agent_03.md:92 starts save of a record block (callback sub_2061470), same pattern as sub_2061358
sub_2061470
export/plan0/arm9_main/sub_2061470_02061470.c
- docs/function_notes/agent_03.md:93 save callback: for 10 entries loads 560-byte records via sub_2057800, clears flag bit 0, ends save
sub_206152C
export/plan0/arm9_main/sub_206152C_0206152C.c
- docs/function_notes/agent_03.md:94 allocates a block (size constant dword_206153C) from heap
sub_2061540
export/plan0/arm9_main/sub_2061540_02061540.c
- docs/function_notes/agent_03.md:95 starts save of 48-byte record block (callback sub_2061588), same pattern
sub_2061588
export/plan0/arm9_main/sub_2061588_02061588.c
- docs/function_notes/agent_03.md:96 save callback: for 32 entries loads 48-byte records via sub_205786C, clears flag bit 0, ends save
sub_2061644
export/plan0/arm9_main/sub_2061644_02061644.c
- docs/function_notes/agent_03.md:97 allocates 1536 bytes (32 x 48) from heap
sub_2061654
export/plan0/arm9_main/sub_2061654_02061654.c
- docs/function_notes/agent_03.md:98 getter: bits 10..15 of record word +4 (0 if record flag clear)
sub_2061678
export/plan0/arm9_main/sub_2061678_02061678.c
- docs/function_notes/agent_03.md:99 getter: bits 4..9 of record word +4 (-1 if flag clear)
sub_206169C
export/plan0/arm9_main/sub_206169C_0206169C.c
- docs/function_notes/agent_03.md:100 getter: low 4 bits of record word +4 (-1 if flag clear)
sub_20616C0
export/plan0/arm9_main/sub_20616C0_020616C0.c
- docs/function_notes/agent_03.md:101 copies the 20-byte name from a 560/48-byte save record (+12) to a2 if record valid (flag bit 0 at +8)
sub_2061704
export/plan0/arm9_main/sub_2061704_02061704.c
- docs/function_notes/agent_03.md:102 unpacks record's packed time/date word (+8) into a2 (u16 at +0, bytes at +2/+3); returns 1 if valid
sub_206174C
export/plan0/arm9_main/sub_206174C_0206174C.c
- docs/function_notes/agent_03.md:103 returns whether the record's valid flag (bit 0 of +8) is set
sub_2061768
export/plan0/arm9_main/sub_2061768_02061768.c
- docs/function_notes/agent_03.md:104 returns 45 if scene-state field +8 == 4 else 30 (scene/menu id selector)
sub_2061788
export/plan0/arm9_main/sub_2061788_02061788.c
- docs/function_notes/agent_03.md:105 returns 46 if scene-state field +8 == 4 else 31 (scene/menu id selector)
sub_20617A8
export/plan0/arm9_main/sub_20617A8_020617A8.c
- docs/function_notes/agent_03.md:106 outputs (race frame counter minus saved frame +60) into a1; returns 1 if a saved frame exists
sub_20617D8
export/plan0/arm9_main/sub_20617D8_020617D8.c
- docs/function_notes/agent_03.md:107 copies current frame counter (+4) to saved-frame field (+60) in 0x0217AA34 state
sub_20617F0
export/plan0/arm9_main/sub_20617F0_020617F0.c
- docs/function_notes/agent_03.md:108 sets flag +52 = 1 in race-scene state
sub_2061808
export/plan0/arm9_main/sub_2061808_02061808.c
- docs/function_notes/agent_03.md:109 getter: global at 0x0217AA4C pointer value
sub_2061818
export/plan0/arm9_main/sub_2061818_02061818.c
- vm_model/src/mapobj/bats.rs:194
sub_2061818() == 2(a race state): starts throwing without looking at karts. - vm_model/src/mapobj/boo.rs:26 race (
sub_2061818() == 0) 4 Boos with at most 6 alive (sub_20952DC(6, 4, 10, 20)), then a - vm_model/src/mapobj/boo.rs:146
sub_2061818() == 0.race_kindis*(global+8),modeissub_2061818(). - vm_model/src/mapobj/boo.rs:463
sub_2094E8C: one tick.mode=sub_2061818(),live= Boos alive now (counted after - vm_model/src/mapobj/boo.rs:596
sub_2095544.mode=sub_2061818();kart= the view kart. Returns the effect when - docs/function_notes/agent_03.md:110 getter: field +592 of struct at 0x0217AA4C
sub_206182C
export/plan0/arm9_main/sub_206182C_0206182C.c
- docs/function_notes/agent_03.md:111 getter: global at 0x0217AA5C
sub_206183C
export/plan0/arm9_main/sub_206183C_0206183C.c
- docs/function_notes/agent_03.md:112 getter: global at 0x0217AA44 (fade/transition flag)
sub_206184C
export/plan0/arm9_main/sub_206184C_0206184C.c
- docs/function_notes/agent_03.md:113 sets screen fade counter 0x0217AA0C = 72 (fade length in frames)
sub_2061860
export/plan0/arm9_main/sub_2061860_02061860.c
- docs/function_notes/agent_03.md:114 clears screen fade counter 0x0217AA0C
sub_2061874
export/plan0/arm9_main/sub_2061874_02061874.c
- docs/function_notes/agent_03.md:117 starts a screen fade: resets fade state, sets counter to 72, calls sub_2061944, stores saved target brightness values
sub_2061944
export/plan0/arm9_main/sub_2061944_02061944.c
- docs/function_notes/agent_03.md:118 applies fade level a1 (0..31): scales master bright/colours by 57/4096 factors and updates the 8-word brightness (4 bytes each) table for the fade
sub_2061C28
export/plan0/arm9_main/sub_2061C28_02061C28.c
- docs/function_notes/agent_03.md:119 sets up fade tables for the race scene: builds 32-step ramp (quadratic in/out or linear) into 8 words and programs it via sub_214A7EC/sub_214A748 (fog/edge-marking table)
sub_2061F7C
export/plan0/arm9_main/sub_2061F7C_02061F7C.c
- docs/function_notes/agent_03.md:120 getter: field +16 of struct at 0x0217AA34
sub_2061F90
export/plan0/arm9_main/sub_2061F90_02061F90.c
- vm_model/src/mission_step.rs:104 Second half of
sub_2181840(kinds 1 and 5).frozenissub_2061F90(). - docs/function_notes.md:223 returns shared update slot at scheduler +12; traffic samples its floor normal only when slot equals instance index +212 modulo eight (collision flight bypasses staggering)
- docs/function_notes/agent_03.md:121 getter: field +12 of struct at 0x0217AA34
sub_2061FA4
export/plan0/arm9_main/sub_2061FA4_02061FA4.c
- vm_model/src/mapobj/chomp.rs:351 one kart a tick, in turn (sub_2061FA4)
- game/src/objects.rs:901 to be looked at this tick (
sub_2061FA4, one kart a tick in slot order). - docs/function_notes.md:155 kart slot whose turn it is this tick (round robin)
sub_2061FB8
export/plan0/arm9_main/sub_2061FB8_02061FB8.c
- docs/function_notes/agent_03.md:122 getter: field +4 of struct at 0x0217AA34
sub_2061FCC
export/plan0/arm9_main/sub_2061FCC_02061FCC.c
- docs/function_notes/agent_03.md:123 sets a halfword global to 1 then tail-calls a function pointer
sub_2061FEC
export/plan0/arm9_main/sub_2061FEC_02061FEC.c
- docs/function_notes/agent_03.md:124 getter: signed halfword global
sub_2062004
export/plan0/arm9_main/sub_2062004_02062004.c
- docs/function_notes/agent_03.md:126 race scene teardown: frees kart/camera objects (sub_20848FC), clears pointers, copies saved flag
sub_2062078
export/plan0/arm9_main/sub_2062078_02062078.c
- docs/function_notes/agent_03.md:127 draws the 3D race scene: camera, two lights, kart/course/objects draw calls via sub_1FF9048, then effects and HUD 3D parts
sub_2062254
export/plan0/arm9_main/sub_2062254_02062254.c
- docs/function_notes/agent_03.md:128 stores 3 halfwords from a1 (light/ambient colour or direction) into race state +64/+66/+68
sub_2062284
export/plan0/arm9_main/sub_2062284_02062284.c
- docs/function_notes/agent_03.md:129 per-frame race render driver: applies fog/brightness if changed, calls sub_2062078 (draw), particles, sound, advances frame counter +8
sub_2062464
export/plan0/arm9_main/sub_2062464_02062464.c
- docs/function_notes.md:228 race scheduler update: derives shared eight-slot terrain-probe phase (+12) from race tick counter (+4 & 7), parity at +16 and kart round-robin index at +20; some race states freeze tick advancement
- docs/function_notes/agent_03.md:130 per-frame race logic update: collision/kart tick, camera select (follow/replay), object and effect ticks, fade counter, frame counters
sub_2062860
export/plan0/arm9_main/sub_2062860_02062860.c
- docs/function_notes/agent_03.md:131 sets up GX lights and material (4 lights, fog, edge mark) for the race and allocates a 772-byte buffer
sub_20629A4
export/plan0/arm9_main/sub_20629A4_020629A4.c
- docs/function_notes/agent_03.md:132 computes active-player count from bitmask (sub_2148D24) and sets up ids via sub_20161B4/2016414/208533C
sub_2062A0C
export/plan0/arm9_main/sub_2062A0C_02062A0C.c
- docs/function_notes/agent_03.md:133 initialises race-scene state: zeroes fields, copies 3 light halfwords, sets flags from game mode (3..5, 4, 5/6)
sub_2062B50
export/plan0/arm9_main/sub_2062B50_02062B50.c
- docs/function_notes/agent_03.md:134 race scene initialiser: allocates state, loads karts, course, objects, camera, effects, sound, HUD and palette; calls many module inits in order
sub_2062EB0
export/plan0/arm9_main/sub_2062EB0_02062EB0.c
- docs/function_notes/agent_03.md:135 getter: field +56 of race-scene state
sub_2062EC4
export/plan0/arm9_main/sub_2062EC4_02062EC4.c
- docs/function_notes/agent_03.md:136 getter: field +40 of race-scene state
sub_2062ED8
export/plan0/arm9_main/sub_2062ED8_02062ED8.c
- docs/function_notes/agent_03.md:137 returns a fixed-point value >> 12 from table if its flag halfword is set, else -1
sub_2062EF8
export/plan0/arm9_main/sub_2062EF8_02062EF8.c
- docs/function_notes/agent_03.md:138 shows/hides course model material layers (sub_2013044/2013424) depending on flag a1 and cached masks
sub_206302C
export/plan0/arm9_main/sub_206302C_0206302C.c
- docs/function_notes/agent_03.md:139 caches which course model mesh/material entries are visible (masks) depending on course id (18, 27, 29, 45)
sub_20631B0
export/plan0/arm9_main/sub_20631B0_020631B0.c
- docs/function_notes/agent_03.md:140 if course id == 32 sets light 2 colour/direction from constants
sub_2063228
export/plan0/arm9_main/sub_2063228_02063228.c
- docs/function_notes/agent_03.md:141 wrapper: calls sub_20849F8 with course-model animation and constants if present
sub_206326C
export/plan0/arm9_main/sub_206326C_0206326C.c
- docs/function_notes/agent_03.md:142 calls function pointer with course model, constants (course model second draw hook)
sub_2063294
export/plan0/arm9_main/sub_2063294_02063294.c
- docs/function_notes/agent_03.md:143 advances up to three course model animations (sub_2087DE0) if their active flags are set
sub_206331C
export/plan0/arm9_main/sub_206331C_0206331C.c
- docs/function_notes/agent_03.md:144 loads/sets up course sub-models and their animations (NSBCA/NSBTP via sub_2047974), hides unneeded nodes, special-case for course ids 12 and 22
sub_20636F8
export/plan0/arm9_main/sub_20636F8_020636F8.c
- docs/function_notes/agent_03.md:145 records kart state into a replay/ghost frame: position>>10, speed, rotation, flags (+68, +72), item and charge values
sub_20637C4
export/plan0/arm9_main/sub_20637C4_020637C4.c
- docs/function_notes/agent_03.md:146 kart per-tick: sub_2064F50 then sub_20641F0
sub_20637E0
export/plan0/arm9_main/sub_20637E0_020637E0.c
- docs/function_notes/agent_03.md:147 kart per-tick: updates ghost recorder, handles flag 0x1000 via sub_206D138, then sub_20651FC
sub_2063830
export/plan0/arm9_main/sub_2063830_02063830.c
- docs/function_notes/agent_03.md:150 kart per-tick (variant): records ghost frame if recording, handles flag 0x1000 via sub_206D138, then sub_1FFCC50
sub_2063880
export/plan0/arm9_main/sub_2063880_02063880.c
- docs/function_notes/agent_03.md:151 kart per-tick (variant): sub_1FFCB58, records replay frame if recording flag set, then sub_20641F0
sub_20638C0
export/plan0/arm9_main/sub_20638C0_020638C0.c
- docs/function_notes/agent_03.md:152 calls kart's function pointer at +556 (per-kart update hook)
sub_20638DC
export/plan0/arm9_main/sub_20638DC_020638DC.c
- docs/function_notes/agent_03.md:153 calls sub_20109C4 with kart, table 0x02063908, 0, 6, 3 (model joint/anim helper)
sub_206390C
export/plan0/arm9_main/sub_206390C_0206390C.c
- docs/function_notes/agent_03.md:154 finds the "KillerItem" joint in kart model; when matching, builds its world position (matrix * scale) and calls sub_2081618 (Bullet Bill attach point)
sub_2063A68
export/plan0/arm9_main/sub_2063A68_02063A68.c
- docs/function_notes.md:437 final CPU recovery callback invokes kart+548; local Figure-8 race-start RAM resolves this pointer to sub_2072EB8 for player and CPU karts. Native requests immediate placement through its existing respawn bridge, without the fall-animation delay; original placement/spread now replay-tested in kart/respawn.rs; fall/carry timing remains unported
- docs/function_notes/agent_03.md:155 calls kart hook +548 unless flag 0x400; toggles bit 0x10000 of kart sub-struct flags when flag 0x200 is set; clears kart flag 0x200 in mode 2
sub_2063AD0
export/plan0/arm9_main/sub_2063AD0_02063AD0.c
- docs/function_notes/agent_03.md:156 calls kart hook +548 unless flag 0x400; toggles bit 0x10000 of sub-struct +44 when flag 0x200 is set
sub_2063B10
export/plan0/arm9_main/sub_2063B10_02063B10.c
- docs/function_notes.md:69 kart forward axis (+0x138)
sub_2063B30
export/plan0/arm9_main/sub_2063B30_02063B30.c
- docs/function_notes.md:70 kart up axis (+0x12C)
- docs/function_notes.md:378 copies kart-up vector from kart+300/+304/+308 into caller output; yaw steering sub_1FFD224 uses this same up vector to project its target and choose cross-product turn sign
sub_2063B50
export/plan0/arm9_main/sub_2063B50_02063B50.c
- docs/function_notes/agent_03.md:157 getter: copies kart vector at +0x120 (3 words) to a2
sub_2063B70
export/plan0/arm9_main/sub_2063B70_02063B70.c
- docs/function_notes/agent_03.md:158 draws a kart's shadow-like/overlay model: builds matrix (4x3) from +436 matrix, adds position, applies scale, issues GX commands, draws via sub_208AB4C
sub_2063CC4
export/plan0/arm9_main/sub_2063CC4_02063CC4.c
- docs/function_notes/agent_03.md:159 draws one kart: sets matrices (restore/mult/scale), draws body model, wheels, driver, tires with steering rotation, shadow and flames via GX commands
sub_2064180
export/plan0/arm9_main/sub_2064180_02064180.c
- docs/function_notes/agent_03.md:160 starts kart sound/animation by id: sets kart +64 from sub_2086080 and plays sound via sub_210B7EC
sub_20641B8
export/plan0/arm9_main/sub_20641B8_020641B8.c
- docs/function_notes/agent_03.md:161 sets kart +64 from sub_2086080(kart id, a2) (no sound)
sub_20641D4
export/plan0/arm9_main/sub_20641D4_020641D4.c
- docs/function_notes/agent_03.md:162 kart per-tick: sub_1FFCB58 then sub_20641F0
sub_20641F0
export/plan0/arm9_main/sub_20641F0_020641F0.c
- vm_model/src/kart/damage.rs:14 | [
KartDamage::end_tick] |sub_1FFA4B4(tail, spin),sub_20641F0(the flipped body) | - vm_model/src/kart/damage.rs:51 The body flips about a point this far along its up axis (5 units,
sub_20641F0). - vm_model/src/kart/movement.rs:68 The body as the collision sphere sees it (second matrix, +0x150,
sub_20641F0): its up
sub_20646C0
export/plan0/arm9_main/sub_20646C0_020646C0.c
- docs/function_notes/agent_03.md:163 kart per-tick: ghost recorder update then sub_1FFCC50
sub_20646F0
export/plan0/arm9_main/sub_20646F0_020646F0.c
- docs/function_notes/agent_03.md:164 initialises kart start position/orientation from start grid (or fixed table in mode 5), snaps to ground by KCL test, builds rotation matrices
sub_20649EC
export/plan0/arm9_main/sub_20649EC_020649EC.c
- docs/function_notes/agent_03.md:166 kart object init: picks per-mode update/draw function pointers (+524..+544), links vectors/matrices, init camera-follow, animation, sound, etc.
sub_2064D44
export/plan0/arm9_main/sub_2064D44_02064D44.c
- docs/function_notes/agent_03.md:167 calls sub_1FFC064 with kart +452, +140, size 1024 (copy/transform kart matrix)
sub_2064D60
export/plan0/arm9_main/sub_2064D60_02064D60.c
- docs/function_notes/agent_03.md:168 kart orientation update: blends yaw toward target, builds rotation matrices from lean/drift angles
sub_2064F50
export/plan0/arm9_main/sub_2064F50_02064F50.c
- docs/function_notes/agent_03.md:169 kart per-tick main (before collision): copies matrix, runs physics sub-steps, KCL ground collision of wheel positions, updates previous position
sub_20651FC
export/plan0/arm9_main/sub_20651FC_020651FC.c
- docs/function_notes/agent_03.md:170 kart per-tick main (pre-update): handles start/dead flags, applies impulse-scaled values, runs speed/steer sub-steps, then sub_1FFB130 (full kart update)
sub_20653D0
export/plan0/arm9_main/sub_20653D0_020653D0.c
- docs/function_notes/agent_03.md:171 online remote-kart sync: applies a received 36-byte kart snapshot (pos, speed, angle, flag words) with dead-reckoning, then fires state-change reactions (star, mega, shrink, spin, items, sounds) for each flag bit that differs
sub_2066AC0
export/plan0/arm9_main/sub_2066AC0_02066AC0.c
- docs/function_notes/agent_03.md:172 online remote-kart tick: picks the received snapshot for the current frame from a ring buffer (sub_205B954/205B978), applies it via sub_20653D0 or interpolates, handles queued sound/effect events
sub_2066DE8
export/plan0/arm9_main/sub_2066DE8_02066DE8.c
- docs/function_notes/agent_03.md:173 kart wobble/shake decay tick: advances phase +1440, decays amplitude +1428, builds a small rotation matrix applied to +388
sub_2066FE0
export/plan0/arm9_main/sub_2066FE0_02066FE0.c
- docs/function_notes/agent_03.md:174 kart race-start/first-frame init: sets flag 0x1000, sets up per-mode AI/net flags, resets animations, sound and HUD hooks; picks start sound
sub_2067488
export/plan0/arm9_main/sub_2067488_02067488.c
- docs/function_notes/agent_03.md:175 updates kart flag 0x8000000 (near local player) from squared distance to the viewed kart; also hides HUD marker if needed
sub_20675B4
export/plan0/arm9_main/sub_20675B4_020675B4.c
- docs/function_notes/agent_03.md:176 returns whether any of 3 input-state words (+52/+56/+60/+64) of per-player data (sub_208C5B8) is non-zero
sub_20675F8
export/plan0/arm9_main/sub_20675F8_020675F8.c
- docs/function_notes/agent_03.md:177 damage/reaction state table lookup: plays sound sub_2083F6C(table[kart+0x3E4]) and returns state 0
sub_2067630
export/plan0/arm9_main/sub_2067630_02067630.c
- vm_model/src/kart/movement.rs:1148
sub_2067778,sub_2067630from the per-type table at0x02154D8C): a 60-tick boost that - docs/function_notes.md:1675 boost-ramp surface handler returns surface kind 11 and sets kart+72 bits 0x40000001; refreshes 60-tick boost when remaining on kind 11. Native KartMotion.ramp represents bit 0x40000000.
sub_20676C4
export/plan0/arm9_main/sub_20676C4_020676C4.c
- docs/function_notes/agent_03.md:178 same pattern with table at 0x02154AA4; returns damage state 10
sub_20676FC
export/plan0/arm9_main/sub_20676FC_020676FC.c
- docs/function_notes/agent_03.md:179 plays sound 0, in modes 2/4 sets spin effect, sets flag 0x10000 and returns damage state 9
sub_2067778
export/plan0/arm9_main/sub_2067778_02067778.c
- vm_model/src/kart/movement.rs:1148
sub_2067778,sub_2067630from the per-type table at0x02154D8C): a 60-tick boost that
sub_2067834
export/plan0/arm9_main/sub_2067834_02067834.c
- vm_model/src/kart/movement.rs:1170 Jump pads (type 12,
sub_2067834): by variant, the vertical speed they launch with and the
sub_20678D4
export/plan0/arm9_main/sub_20678D4_020678D4.c
- vm_model/src/kart/movement.rs:1147 Boost panels and boost road (collision types 7, 18, 19; the handlers
sub_20678D4,
sub_2067984
export/plan0/arm9_main/sub_2067984_02067984.c
- docs/function_notes/agent_03.md:180 damage reaction: plays sound from table 0x02154A64[kart+0x3E4], returns state 6
sub_20679BC
export/plan0/arm9_main/sub_20679BC_020679BC.c
- docs/function_notes/agent_03.md:181 damage reaction: sub_207A6C0, plays sound from table 0x02154BC4, returns state 4
sub_20679F4
export/plan0/arm9_main/sub_20679F4_020679F4.c
- docs/function_notes/agent_03.md:182 damage reaction: sub_207A6C0, plays sound from table 0x02154B44, returns state 3
sub_2067A2C
export/plan0/arm9_main/sub_2067A2C_02067A2C.c
- docs/function_notes/agent_03.md:183 damage reaction: sub_207A6C0, plays sound from table 0x02154B24, returns state 2
sub_2067A64
export/plan0/arm9_main/sub_2067A64_02067A64.c
- docs/function_notes/agent_03.md:184 damage reaction: plays sound from table 0x02154AE4, returns state 5
sub_2067A9C
export/plan0/arm9_main/sub_2067A9C_02067A9C.c
- docs/function_notes/agent_03.md:185 damage reaction: plays sound from table 0x02154AC4, returns state 0
sub_2067AD4
export/plan0/arm9_main/sub_2067AD4_02067AD4.c
- docs/function_notes/agent_03.md:186 damage reaction: plays sound from table 0x02154A84, returns state 0
sub_2067B0C
export/plan0/arm9_main/sub_2067B0C_02067B0C.c
- vm_model/src/obj_collision.rs:243 11 (
sub_2067B0C->sub_206A24C): flattened (a Thwomp landing on the kart). - docs/function_notes.md:50 handler 11, item box
sub_2067B60
export/plan0/arm9_main/sub_2067B60_02067B60.c
- docs/function_notes/agent_03.md:187 damage/spin-out end handler: *a2 = 12, clears flags, for local player stops effects, calls sub_206BCB0(kart,1,0), returns state 5
sub_2067BF4
export/plan0/arm9_main/sub_2067BF4_02067BF4.c
- docs/function_notes/agent_03.md:188 same as sub_2067B60 but zeroes forward speed instead of spin-out call; returns state 5
sub_2067C70
export/plan0/arm9_main/sub_2067C70_02067C70.c
- docs/function_notes/agent_03.md:189 damage handler stub: *a2 = 12, returns 5
sub_2067C80
export/plan0/arm9_main/sub_2067C80_02067C80.c
- docs/function_notes/agent_03.md:190 damage handler stub: *a2 = 10, returns 2
sub_2067C90
export/plan0/arm9_main/sub_2067C90_02067C90.c
- docs/function_notes/agent_03.md:191 damage handler stub: *a2 = 9, returns 2
sub_2067CA0
export/plan0/arm9_main/sub_2067CA0_02067CA0.c
- docs/function_notes/agent_03.md:192 damage handler stub: *a2 = 8, returns 2
sub_2067CB0
export/plan0/arm9_main/sub_2067CB0_02067CB0.c
- vm_model/src/obj_collision.rs:236 7 (
sub_2067CB0): flips the kart (sub_206B4D0), slowing it by how head-on it was. - docs/function_notes.md:49 handler 7, tumble (sub_206B4D0)
sub_2067D0C
export/plan0/arm9_main/sub_2067D0C_02067D0C.c
- vm_model/src/obj_collision.rs:232 5 (
sub_2067D0C): spins the kart out for 2 turns, no bump. - docs/function_notes.md:47 handler 5, spin 2 turns
sub_2067D88
export/plan0/arm9_main/sub_2067D88_02067D88.c
- vm_model/src/obj_collision.rs:234 6 (
sub_2067D88): above 3 units/tick spins the kart out for 2 turns, no bump. - docs/function_notes.md:48 handler 6, spin 2 turns above 3 units/tick
sub_2067E10
export/plan0/arm9_main/sub_2067E10_02067E10.c
- vm_model/src/obj_collision.rs:229 3, 4 (
sub_2067EC4/sub_2067E10): solid, and above 3 units/tick it spins the kart - docs/function_notes.md:46 handler 4, solid + spin 2 turns above 3 units/tick
sub_2067EC4
export/plan0/arm9_main/sub_2067EC4_02067EC4.c
- vm_model/src/obj_collision.rs:229 3, 4 (
sub_2067EC4/sub_2067E10): solid, and above 3 units/tick it spins the kart - docs/function_notes.md:45 handler 3, solid + spin 1 turn above 3 units/tick
sub_2067F78
export/plan0/arm9_main/sub_2067F78_02067F78.c
- vm_model/src/obj_collision.rs:227 2 (
sub_2067F78): a solid object, bumped like a wall. - docs/function_notes.md:44 handler 2, solid object
sub_2067F88
export/plan0/arm9_main/sub_2067F88_02067F88.c
- docs/function_notes/agent_03.md:193 damage handler stub: *a2 = 0, returns 0
sub_2067F94
export/plan0/arm9_main/sub_2067F94_02067F94.c
- vm_model/src/obj_collision.rs:238 8, 10 (
sub_20680E0/sub_2067F94): blows the kart away (sub_206ADD0; 10 is - docs/function_notes.md:53 reaction 10, damage state 5 (sub_206A980)
sub_2068094
export/plan0/arm9_main/sub_2068094_02068094.c
- vm_model/src/obj_collision.rs:241 9 (
sub_2068094→sub_206B020): run over (taken as blown away here). - docs/function_notes.md:52 reaction 9, run over (sub_206B020)
sub_20680E0
export/plan0/arm9_main/sub_20680E0_020680E0.c
- vm_model/src/obj_collision.rs:238 8, 10 (
sub_20680E0/sub_2067F94): blows the kart away (sub_206ADD0; 10 is - docs/function_notes.md:51 reaction 8, blown away (sub_206ADD0)
sub_20681E4
export/plan0/arm9_main/sub_20681E4_020681E4.c
- docs/function_notes/agent_03.md:195 damage handler stub: *a2 = 0, returns 0
sub_20681F0
export/plan0/arm9_main/sub_20681F0_020681F0.c
- vm_model/src/kart/mod.rs:14 | [
KartDrift::count_counter_steer] |sub_20681F0| counter-steer presses -> charge | - vm_model/src/kart/mod.rs:73 Constants (literal pools of sub_206C5E4 / sub_206CC60 / sub_20681F0)
- vm_model/src/kart/mod.rs:84 Ticks between counted counter-steer presses (literal in
sub_20681F0). - vm_model/src/kart/mod.rs:198 Newly pressed steering; left wins if both are pressed (
sub_20681F0tests Left first). - vm_model/src/kart/mod.rs:467
sub_20681F0: counts alternating counter-steer presses. A press away from the drift must - docs/function_notes.md:104 mini-turbo countersteer charge transitions: stage 2 blue flare 126 and SE 210; stage 3 switches wheel effects and starts red flares 22/23 when drift contact allows
sub_2068440
export/plan0/arm9_main/sub_2068440_02068440.c
- vm_model/src/cpu.rs:39 mini-turbo at once (
sub_2068440(kart, 3)).
sub_2068494
export/plan0/arm9_main/sub_2068494_02068494.c
- docs/function_notes/agent_03.md:196 kart reset to last checkpoint/respawn point: copies position from respawn data, re-inits orientation (sub_20646F0), restores speed, sets drift/flag bits
sub_2068640
export/plan0/arm9_main/sub_2068640_02068640.c
- docs/function_notes/agent_03.md:197 kart respawn finish (Lakitu drop): sets flags, orients to course start dir, re-registers KCL collision handles, calls sub_2068494, sound/HUD notify
sub_20688A0
export/plan0/arm9_main/sub_20688A0_020688A0.c
- docs/function_notes/agent_03.md:198 uncertain: kart race-finished handler: sets flags 0x10000008, picks AI/auto-drive mode by setting, notifies HUD
sub_2068A00
export/plan0/arm9_main/sub_2068A00_02068A00.c
- docs/function_notes/agent_03.md:199 calls sub_210AD58(kart, kart+972) (kart engine sound update)
sub_2068A10
export/plan0/arm9_main/sub_2068A10_02068A10.c
- docs/function_notes/agent_03.md:200 kart update: if driver animation flag set, update driver clip, face pattern; then engine sound update
sub_2068A64
export/plan0/arm9_main/sub_2068A64_02068A64.c
- vm_model/src/nitro_driver.rs:1 Driver presentation from sub_207B734, sub_2068A64, sub_207B708, and sub_208823C.
- game/src/driver_animation.rs:2 Sources: sub_207954C (resources), sub_207B734 (steering), sub_2068A64
- docs/function_notes.md:94 selects detailed driver clip and face: spin=1 with closed face; result flags force win=2 or lose=3 (closed); handles one-shot return state
- docs/function_notes.md:557 driver clip request: +0x7C bit 0x10000 forces win, 0x20000 lose; face pattern lose/spin = 1
sub_2068B5C
export/plan0/arm9_main/sub_2068B5C_02068B5C.c
- docs/function_notes/agent_03.md:201 sets kart flag 0x40000 once and calls sub_2068EC0 (kart disable/finish)
sub_2068B98
export/plan0/arm9_main/sub_2068B98_02068B98.c
- docs/function_notes/agent_03.md:202 kart finish-line/post-race tick: counts frames in +968, runs a 185-frame fly-away/slowdown sequence with fixed ramp tables, then sets finished flags
sub_2068EAC
export/plan0/arm9_main/sub_2068EAC_02068EAC.c
- vm_model/src/kart/blue_shell.rs:156
sub_2068EAC: kart +124 & 0x60. - docs/function_notes/agent_03.md:203 returns whether kart flags 0x60 (finished/disabled) are set
sub_2068EC0
export/plan0/arm9_main/sub_2068EC0_02068EC0.c
- docs/function_notes/agent_03.md:204 kart "finished racing" action: sets flag 0x20, frees collision handles, plays goal sound, resets frame counter +968
sub_2069044
export/plan0/arm9_main/sub_2069044_02069044.c
- docs/function_notes/agent_03.md:205 kart finish with fanfare: sub_2068EC0 then sets flag 0x800000
sub_2069068
export/plan0/arm9_main/sub_2069068_02069068.c
- vm_model/src/kart/slipstream.rs:2 staying there long enough triggers a slipstream boost (
sub_206D578,sub_2069068, and the
sub_2069134
export/plan0/arm9_main/sub_2069134_02069134.c
- game/src/items.rs:59 Blooper (
sub_21031F4,sub_206924C,sub_2069134): victims are chosen when the actor is 63 - docs/function_notes/agent_03.md:206 kart tick during star/boost-like overlay: counts timer +0x538+28 up to limit, sets render colour/model scale, clears flag when done
sub_206924C
export/plan0/arm9_main/sub_206924C_0206924C.c
- game/src/items.rs:59 Blooper (
sub_21031F4,sub_206924C,sub_2069134): victims are chosen when the actor is 63 - docs/function_notes/agent_03.md:207 kart reset of render state: clears timer +1364, resets colour/scale, driver pose, engine sound, toggles sub-struct bit 0x80000 for local kart
sub_206938C
export/plan0/arm9_main/sub_206938C_0206938C.c
- game/src/items.rs:50 Bullet Bill (
sub_206938C): it ends once it has run more than 480 ticks, or more than 180 when - docs/function_notes/agent_03.md:208 mega/boost-style timed state tick (kart +0x538 block): timer +30, grows or shrinks scale +1224 by 82 per tick, spawns particles and ends the state after 480 ticks or when conditions are met
sub_20695C4
export/plan0/arm9_main/sub_20695C4_020695C4.c
- docs/function_notes.md:58 shrink on (+0x29C = 3)
- docs/function_notes.md:292 Bullet Bill on (kart +668 = 3, sets +76 bit 0x10000000); also ends a star/Boo in progress
sub_206988C
export/plan0/arm9_main/sub_206988C_0206988C.c
- game/src/items.rs:964 Boo ghost state length (
sub_206988C: ends when its counter exceeds 450). - docs/function_notes/agent_03.md:209 kart item/boost timer tick: counts 80-step ramp, toggles flag 0x8000, ends effect after limit, plays sound 249 and notifies HUD
sub_2069AA0
export/plan0/arm9_main/sub_2069AA0_02069AA0.c
- docs/function_notes.md:57 mega mushroom on (+0x29C = 2)
- docs/function_notes.md:293 Boo on (+668 = 2, +124 bit 0x2000); ends a star in progress
sub_2069C38
export/plan0/arm9_main/sub_2069C38_02069C38.c
- game/src/items.rs:865 (refused under a Bullet Bill:
sub_2069C38) - docs/function_notes.md:56 star on (kart +0x29C = 1, +0x4C bit 0x40)
- docs/function_notes.md:285 star on (skipped if kart +76 bit 0x10000000, i.e. a kart under Bullet Bill cannot start a star): ends a running Boo (clears +124 bits 0x2000/0xC000, +668, +76 bits 0x08000000/0x20000; SE 249 for the local player or stops mega particles via sub_208C5B8/sub_208C4E8; sub_210FA40(0,..)), sets +76 bit 0x40, +668 = 1, star timer = 0, sub_207B284, sub_2081A40, starts the star jingle (sub_2106E78, local player, once) and sub_2068A64(kart, 2, 1) (driver star pose)
sub_2069DB8
export/plan0/arm9_main/sub_2069DB8_02069DB8.c
- docs/function_notes/agent_03.md:210 starts a timed state: sub_206D020(kart,0,90), sets flag 0x100000, timer +1336 = 90
sub_2069E10
export/plan0/arm9_main/sub_2069E10_02069E10.c
- vm_model/src/kart_plugin.rs:287 Lightning lands after the karts' update (
sub_2069E10runs from the item's own update). - vm_model/src/kart/damage.rs:10 | [
strike_lightning] |sub_206A624(each kart but the user's,sub_2069E10) |
sub_2069EA8
export/plan0/arm9_main/sub_2069EA8_02069EA8.c
- docs/function_notes/agent_03.md:211 resets kart visual scales (+188..+196, +1052.., +1064.., +916, +920, +1076) to 4096 (1.0) and clears size-effect flags
sub_2069F6C
export/plan0/arm9_main/sub_2069F6C_02069F6C.c
- vm_model/src/kart/damage.rs:434 Thwomp (+0x4C bit 0x10000,
sub_206A24C/sub_2069F6C). - vm_model/src/kart/damage.rs:515
sub_2069F6C, at the start of the kart's tick: count down (held still at first, drawn - docs/function_notes.md:159 flattened kart tick: squash, unpin, spring back (25 ticks)
sub_206A24C
export/plan0/arm9_main/sub_206A24C_0206A24C.c
- vm_model/src/kart_plugin.rs:146 Flattened (
sub_206A24C): a Thwomp landing on the kart. - vm_model/src/obj_collision.rs:243 11 (
sub_2067B0C->sub_206A24C): flattened (a Thwomp landing on the kart). - vm_model/src/kart/damage.rs:434 Thwomp (+0x4C bit 0x10000,
sub_206A24C/sub_2069F6C). - vm_model/src/kart/damage.rs:500
sub_206A24C: flattened (a Thwomp landing on the kart; again while flat restarts it). - docs/function_notes.md:158 flatten a kart (Thwomp): 600 ticks, pinned 150, size 0.7
sub_206A354
export/plan0/arm9_main/sub_206A354_0206A354.c
- vm_model/src/kart/damage.rs:12 | [
KartShrink::tick] |sub_206A354| - vm_model/src/kart/damage.rs:483
sub_206A354(physics part): count down, then grow back; full size on the tick after the
sub_206A624
export/plan0/arm9_main/sub_206A624_0206A624.c
- vm_model/src/kart_plugin.rs:296
sub_206A624refuses a starred or bullet kart (mask 0x10000040). - vm_model/src/kart_plugin.rs:609 sub_206BCB0 / sub_206B4D0 / sub_206A624 all test kart +0x4C & 0x10000040
- vm_model/src/kart/damage.rs:10 | [
strike_lightning] |sub_206A624(each kart but the user's,sub_2069E10) | - vm_model/src/kart/damage.rs:565
sub_206A624: another kart's lightning hits this one (place1..8 decides how long it stays - vm_model/src/kart/speed.rs:86 lightning are refused (mask 0x10000040 in
sub_206BCB0,sub_206B4D0,sub_206A624). - docs/function_notes.md:290 lightning strike on a kart; refused if +76 & 0x10000040 (star or bullet), +124 & 0x402000 or +72 & 0x10040
sub_206A784
export/plan0/arm9_main/sub_206A784_0206A784.c
- vm_model/src/kart/damage.rs:8 | [
KartDamage::ram] |sub_206A980->sub_206BF88(kart, 5)(state 5; ticksub_206A784): a Bullet Bill's touch | - vm_model/src/kart/damage.rs:62 Rammed (a Bullet Bill's touch,
sub_206A980/sub_206A784): like a blow but a faster roll - vm_model/src/kart/damage.rs:89 Rammed by a Bullet Bill (5): launched and rolled twice (
sub_206A980/sub_206A784). - docs/function_notes/agent_03.md:212 damage state tick (hit/spin): counts 10 frames, spins heading by +864 velocity, then returns kart to normal (+384 = 0)
sub_206A980
export/plan0/arm9_main/sub_206A980_0206A980.c
- vm_model/src/kart_plugin.rs:137 Rammed by a Bullet Bill along a direction (damage state 5,
sub_206A980). - vm_model/src/obj_collision.rs:239
sub_206A980, damage state 5, taken as the same here). - vm_model/src/kart/damage.rs:8 | [
KartDamage::ram] |sub_206A980->sub_206BF88(kart, 5)(state 5; ticksub_206A784): a Bullet Bill's touch | - vm_model/src/kart/damage.rs:62 Rammed (a Bullet Bill's touch,
sub_206A980/sub_206A784): like a blow but a faster roll - vm_model/src/kart/damage.rs:89 Rammed by a Bullet Bill (5): launched and rolled twice (
sub_206A980/sub_206A784). - vm_model/src/kart/damage.rs:235
sub_206A980: rammed by a Bullet Bill alongdir(unit, fx12): pushed, launched and rolled twice
sub_206AC10
export/plan0/arm9_main/sub_206AC10_0206AC10.c
- vm_model/src/kart/damage.rs:7 | [
KartDamage::blow] |sub_206ADD0(state 4; ticksub_206AC10) | - vm_model/src/kart/damage.rs:53 Blown (
sub_206ADD0/sub_206AC10): push along the hit direction (x 1.7), first roll rate - vm_model/src/kart/damage.rs:87 (
sub_206ADD0/sub_206AC10).
sub_206ADD0
export/plan0/arm9_main/sub_206ADD0_0206ADD0.c
- vm_model/src/kart_plugin.rs:139 Blown away along a direction (unit, fx12): a star's touch, a blast (
sub_206ADD0). - vm_model/src/obj_collision.rs:238 8, 10 (
sub_20680E0/sub_2067F94): blows the kart away (sub_206ADD0; 10 is - vm_model/src/kart/damage.rs:7 | [
KartDamage::blow] |sub_206ADD0(state 4; ticksub_206AC10) | - vm_model/src/kart/damage.rs:53 Blown (
sub_206ADD0/sub_206AC10): push along the hit direction (x 1.7), first roll rate - vm_model/src/kart/damage.rs:87 (
sub_206ADD0/sub_206AC10). - vm_model/src/kart/damage.rs:210
sub_206ADD0: blown away alongdir(unit, fx12) from what hit it: pushed (through the
sub_206B020
export/plan0/arm9_main/sub_206B020_0206B020.c
- vm_model/src/obj_collision.rs:241 9 (
sub_2068094→sub_206B020): run over (taken as blown away here).
sub_206B16C
export/plan0/arm9_main/sub_206B16C_0206B16C.c
- vm_model/src/kart/damage.rs:13 | [
KartDamage::settle] | state handlers (table at0x021655C4):sub_206BB04(2),sub_206B16C(3) | - vm_model/src/kart/damage.rs:40 Shell tumble (
sub_206B358/sub_206B16C): speed bump and factor at the hit, flip rate and - vm_model/src/kart/damage.rs:292 control comes back after [
RECOVERY_TICKS]. Tumble (sub_206B16C): launch, two bounces
sub_206B358
export/plan0/arm9_main/sub_206B358_0206B358.c
- vm_model/src/kart/damage.rs:6 | [
KartDamage::tumble] |sub_206B4D0->sub_206B358->sub_206BF88| - vm_model/src/kart/damage.rs:40 Shell tumble (
sub_206B358/sub_206B16C): speed bump and factor at the hit, flip rate and - vm_model/src/kart/damage.rs:188
sub_206B4D0/sub_206B358: a shell throws the kart up and flips it (also out of a
sub_206B4D0
export/plan0/arm9_main/sub_206B4D0_0206B4D0.c
- vm_model/src/kart_plugin.rs:222 Spin-outs and tumbles (
sub_206BCB0,sub_206B4D0) are refused under a star (+0x4C - vm_model/src/kart_plugin.rs:609 sub_206BCB0 / sub_206B4D0 / sub_206A624 all test kart +0x4C & 0x10000040
- vm_model/src/obj_collision.rs:236 7 (
sub_2067CB0): flips the kart (sub_206B4D0), slowing it by how head-on it was. - vm_model/src/kart/damage.rs:6 | [
KartDamage::tumble] |sub_206B4D0->sub_206B358->sub_206BF88| - vm_model/src/kart/damage.rs:188
sub_206B4D0/sub_206B358: a shell throws the kart up and flips it (also out of a - vm_model/src/kart/speed.rs:86 lightning are refused (mask 0x10000040 in
sub_206BCB0,sub_206B4D0,sub_206A624).
sub_206B5B4
export/plan0/arm9_main/sub_206B5B4_0206B5B4.c
- vm_model/src/kart/damage.rs:9 | [
KartDamage::launch] |sub_206BAB8->sub_206B914(state 6; ticksub_206B5B4): blue shell and bob-omb blasts | - vm_model/src/kart/damage.rs:59 Launched (
sub_206B914/sub_206B5B4, a blast's first 22 ticks): vertical launch speed, first - vm_model/src/kart/damage.rs:91 Launched high and flipped (6): blue shell and bob-omb blasts (
sub_206B914/sub_206B5B4). - vm_model/src/kart/damage.rs:324 (
sub_206B5B4) in the air: no forward speed, the flip winds down, a touchdown - docs/function_notes/agent_03.md:213 damage state 6 tick (flip/tumble): rotates body by accumulated rate, bounces, finishes after 30 frames or on landing
sub_206B914
export/plan0/arm9_main/sub_206B914_0206B914.c
- vm_model/src/kart/damage.rs:9 | [
KartDamage::launch] |sub_206BAB8->sub_206B914(state 6; ticksub_206B5B4): blue shell and bob-omb blasts | - vm_model/src/kart/damage.rs:59 Launched (
sub_206B914/sub_206B5B4, a blast's first 22 ticks): vertical launch speed, first - vm_model/src/kart/damage.rs:91 Launched high and flipped (6): blue shell and bob-omb blasts (
sub_206B914/sub_206B5B4). - vm_model/src/kart/damage.rs:259
sub_206BAB8->sub_206B914: launched straight up by a blast (blue shell, bob-omb) and - docs/function_notes/agent_03.md:214 starts damage state 6 (tumble): clears speed, sets +384 = 6, upward speed 24576, init rotation vectors, notify HUD/sound
sub_206BAB8
export/plan0/arm9_main/sub_206BAB8_0206BAB8.c
- vm_model/src/kart_plugin.rs:141 Launched straight up and flipped (
sub_206BAB8, damage state 6): the first 22 ticks of a - vm_model/src/kart/damage.rs:9 | [
KartDamage::launch] |sub_206BAB8->sub_206B914(state 6; ticksub_206B5B4): blue shell and bob-omb blasts | - vm_model/src/kart/damage.rs:259
sub_206BAB8->sub_206B914: launched straight up by a blast (blue shell, bob-omb) and - docs/function_notes/agent_03.md:215 tries to start tumble: if sub_206BE54(kart,6) allows it, runs sub_206B914 and toggles net-sync bit 0x20000
sub_206BB04
export/plan0/arm9_main/sub_206BB04_0206BB04.c
- vm_model/src/kart/damage.rs:13 | [
KartDamage::settle] | state handlers (table at0x021655C4):sub_206BB04(2),sub_206B16C(3) | - vm_model/src/kart/damage.rs:291 The state handler, run in movement before gravity. Spin (
sub_206BB04): once stopped,
sub_206BBB4
export/plan0/arm9_main/sub_206BBB4_0206BBB4.c
- vm_model/src/kart/damage.rs:5 | [
KartDamage::spin_out] |sub_206BCB0->sub_206BBB4->sub_206BF88| - vm_model/src/kart/damage.rs:24 Spin speed in angle units per tick (
sub_206BBB4). - vm_model/src/kart/damage.rs:179 sub_206BBB4: the drift flags were just cleared, so the lean picks the direction
sub_206BCB0
export/plan0/arm9_main/sub_206BCB0_0206BCB0.c
- vm_model/src/kart_plugin.rs:144 Spun out for this many turns (
sub_206BCB0): course hazards. - vm_model/src/kart_plugin.rs:222 Spin-outs and tumbles (
sub_206BCB0,sub_206B4D0) are refused under a star (+0x4C - vm_model/src/kart_plugin.rs:609 sub_206BCB0 / sub_206B4D0 / sub_206A624 all test kart +0x4C & 0x10000040
- vm_model/src/kart/damage.rs:5 | [
KartDamage::spin_out] |sub_206BCB0->sub_206BBB4->sub_206BF88| - vm_model/src/kart/damage.rs:163
sub_206BCB0(kind2, spin): spin out forturnsturns, or one more turn if already - vm_model/src/kart/speed.rs:86 lightning are refused (mask 0x10000040 in
sub_206BCB0,sub_206B4D0,sub_206A624). - docs/function_notes.md:55 spin out for N turns
sub_206BE54
export/plan0/arm9_main/sub_206BE54_0206BE54.c
- docs/function_notes/agent_03.md:216 checks kart can take damage type a2 (not finished, not invincible, not already hit); if so calls sub_206BF88(kart,a2) and returns 1
sub_206BF88
export/plan0/arm9_main/sub_206BF88_0206BF88.c
- vm_model/src/kart/damage.rs:5 | [
KartDamage::spin_out] |sub_206BCB0->sub_206BBB4->sub_206BF88| - vm_model/src/kart/damage.rs:6 | [
KartDamage::tumble] |sub_206B4D0->sub_206B358->sub_206BF88| - vm_model/src/kart/damage.rs:8 | [
KartDamage::ram] |sub_206A980->sub_206BF88(kart, 5)(state 5; ticksub_206A784): a Bullet Bill's touch | - vm_model/src/kart/damage.rs:95 The parts of a kart a hit resets (
sub_206BF88): drift, boosts, slipstream boost. - game/src/driver_animation.rs:3 (clip/expression), sub_206BF88 (damage), sub_207B44C (finish classification).
- game/src/effects.rs:429 HitReset clears drift without emitting DriftEnded. sub_206BF88 also
- docs/function_notes.md:368 damage HitReset also stops wheel smoke and requests continuous red cleanup via sub_208C534, after clearing drift state. Native effects now observe new damage states because HitReset clears drift without emitting DriftEnded; prevents red emitters surviving a hit indefinitely (source-derived bridge)
sub_206C094
export/plan0/arm9_main/sub_206C094_0206C094.c
- docs/function_notes/agent_03.md:217 getter: kart flag 0x800000 of +76
sub_206C0A8
export/plan0/arm9_main/sub_206C0A8_0206C0A8.c
- docs/function_notes/agent_03.md:218 getter: kart +1216 (0x4C0)
sub_206C0B0
export/plan0/arm9_main/sub_206C0B0_0206C0B0.c
- vm_model/src/kart/blue_shell.rs:119 Not trackable now (
sub_206C0B0): the shell keeps the last position it saw. - vm_model/src/kart/blue_shell.rs:152
sub_206C0B0: kart +124 & 0x400020 or +76 & 0x800. - docs/function_notes/agent_03.md:219 returns whether kart is invulnerable/disabled (flags 0x400020 in +124 or 0x800 in +76)
sub_206C0E0
export/plan0/arm9_main/sub_206C0E0_0206C0E0.c
- vm_model/src/kart/red_shell.rs:71
sub_206C0E0. - vm_model/src/kart/shell.rs:57 whether it is already damaged (
sub_206C0E0, halves the pull). - vm_model/src/mapobj/chomp.rs:200 Damaged, invisible or respawning (
sub_206C0E0): not a target. - game/src/items.rs:1088 a Boo ghost cannot be targeted (+0x7C bit 0x2000:
sub_206C0E0,sub_20F1258) - docs/function_notes.md:157 kart cannot be targeted (damaged / invisible / respawning)
sub_206C11C
export/plan0/arm9_main/sub_206C11C_0206C11C.c
- docs/function_notes/agent_03.md:220 for local player kart (flag 2): sub_208C188 on its HUD struct
sub_206C14C
export/plan0/arm9_main/sub_206C14C_0206C14C.c
- docs/function_notes/agent_03.md:221 for local player kart (flag 2): sub_208C1AC on its HUD struct
sub_206C17C
export/plan0/arm9_main/sub_206C17C_0206C17C.c
- docs/function_notes/agent_03.md:222 sets kart flag 0x400000 (+76) and clears timer fields +1286/+1284 unless disabled
sub_206C1AC
export/plan0/arm9_main/sub_206C1AC_0206C1AC.c
- docs/function_notes/agent_03.md:223 computes effect position from kart (position + offset along vector +0x138 scaled by +0x1D0) into effect struct a1 (+40..+48) and angle (+80..+84)
sub_206C2B4
export/plan0/arm9_main/sub_206C2B4_0206C2B4.c
- docs/function_notes/agent_03.md:224 sets effect velocity (a1+64..) from kart vector +944 scaled by 0xE66 (0.9)
sub_206C354
export/plan0/arm9_main/sub_206C354_0206C354.c
- docs/function_notes/agent_03.md:225 spawns particle effects for a kart flame/exhaust points (1 or 4 emitters) using sub_208B748 with callback sub_206C450
sub_206C450
export/plan0/arm9_main/sub_206C450_0206C450.c
- docs/function_notes/agent_03.md:226 particle callback: copies kart vector +944 into particle velocity, then sub_2080E88
sub_206C488
export/plan0/arm9_main/sub_206C488_0206C488.c
- docs/function_notes/agent_03.md:227 thunk to sub_2080E88
sub_206C494
export/plan0/arm9_main/sub_206C494_0206C494.c
- vm_model/src/nitro_particle_wheel.rs:14 sub_206C494 smoke branch. Caller excludes damaged/already-drifting karts
- vm_model/src/kart/mod.rs:12 | [
steer] |sub_1FFC27C,sub_1FFC158,sub_1FFC090,sub_206C494| steering, turn rate, yaw, pivot | - vm_model/src/kart/steer.rs:5 | [
pivot] |sub_206C494| - vm_model/src/kart/steer.rs:31 A+B pivot: only below this |velocity|, yaw per tick (
sub_206C494). - vm_model/src/kart/steer.rs:60
sub_206C494: with both pedals held at low speed, steering turns the kart in place - game/src/effects.rs:345 sub_1FFC6C0 calls sub_206C494 only for undamaged, non-drifting karts.
- docs/function_notes.md:361 A+B low-speed pivot branch (velocity magnitude below6144) also starts grounded wheel smoke if absent, resetting continuous controller first; direction chooses +/-500 yaw adjustment. Native steering pivot is ported, but pivot-only wheel smoke remains outside the new drift-effects bridge
- docs/function_notes.md:364 native pivot-smoke wiring now implemented at pre-control velocity magnitude below6144 with both pedals held; creates smoke only when grounded and not already active, preserves handles while airborne in pivot branch, stops births when pivot condition fails. Reset/attachment arithmetic uses already verified wheel modules; lifecycle gate source-derived
- docs/function_notes.md:366 pivot wheel-smoke start/keep/stop gate and resulting smoke-active handle state replay-confirmed across3993 original calls with A+B pivot followed by acceleration/drift; pre-control native bridge uses this tested predicate. Native renderer currently assumes effects permitted (+76 bit0x8000); visibility-based original suppression remains unported
sub_206C5E4
export/plan0/arm9_main/sub_206C5E4_0206C5E4.c
- vm_model/src/mission_step.rs:13
sub_206CDD4/sub_206C5E4increment), kind 6 when the racer is first (+60 & 0xF == 1), - vm_model/src/kart/mod.rs:13 | (in [
step]) |sub_206C5E4| hop, drift direction, drift start/continue/end, landing alignment | - vm_model/src/kart/mod.rs:73 Constants (literal pools of sub_206C5E4 / sub_206CC60 / sub_20681F0)
- vm_model/src/kart/mod.rs:90 Airborne ticks (not counting hops) after which holding drift picks a direction.
sub_206C5E4. - vm_model/src/kart/mod.rs:95 Slide bonus on landing into a drift:
|velocity| * 26 / 4096(sub_206C5E4). - vm_model/src/kart/mod.rs:755 First grounded tick after a hop (
sub_206C5E4, tail): the yaw turned during the hop becomes - docs/function_notes.md:360 successful grounded drift activation resets continuous-wheel controller via sub_208CCF0 before starting smoke via sub_208D6B0; native DriftStarted now preserves this cleanup order, including a new drift during delayed red-effect shutdown (source-derived wiring)
sub_206CC60
export/plan0/arm9_main/sub_206CC60_0206CC60.c
- vm_model/src/kart/mod.rs:73 Constants (literal pools of sub_206C5E4 / sub_206CC60 / sub_20681F0)
- vm_model/src/kart/mod.rs:82 Per-tick step back when the angle is beyond the limit (literal in
sub_206CC60). - vm_model/src/kart/mod.rs:92 Slide bonus floor and per-tick decay while drifting (
sub_206CC60,0x0206CDD0). - vm_model/src/kart/mod.rs:501
sub_206CC60(first half): move the drift angle toward the limit on the drift side. - vm_model/src/kart/mod.rs:516
sub_206CC60(second half, while drifting): the slide bonus decays toward its floor.
sub_206CDD4
export/plan0/arm9_main/sub_206CDD4_0206CDD4.c
- vm_model/src/mission_step.rs:13
sub_206CDD4/sub_206C5E4increment), kind 6 when the racer is first (+60 & 0xF == 1), - docs/function_notes/agent_03.md:228 kart finish of a damage/respawn state: clears damage vars (+764,+768,+780), notifies HUD (sub_208C534), counts a hit in stats
sub_206CEB4
export/plan0/arm9_main/sub_206CEB4_0206CEB4.c
- vm_model/src/kart/speed.rs:7 | [
accelerate] |sub_1FFBA68,sub_206CEB4| per-tick acceleration, boost countdown, coasting | - vm_model/src/kart/speed.rs:28 Acceleration while a boost runs (
sub_206CEB4). - vm_model/src/kart/speed.rs:201
sub_1FFBA68(with the boost countdown ofsub_206CEB4): adds this tick's acceleration to
sub_206D020
export/plan0/arm9_main/sub_206D020_0206D020.c
- vm_model/src/start.rs:8 mushroom's (
sub_206D020, kind 2: ignores the terrain). - vm_model/src/kart/items.rs:98
sub_206D18Ccase 3: a boost that ignores terrain (refused while damaged,sub_206D020), - vm_model/src/kart/speed.rs:166 mini-turbos (
sub_206D020), so a mini-turbo on grass stays slowed by the grass. - vm_model/src/kart/speed.rs:183
sub_206D020: extends the boost to at leastticks. - game/src/items.rs:839 (a Bullet Bill rider cannot start a boost:
sub_206D020)
sub_206D138
export/plan0/arm9_main/sub_206D138_0206D138.c
- docs/function_notes/agent_03.md:229 kart sound/anim: plays engine sound variant 8 and driver pose 2 if kart is drivable
sub_206D18C
export/plan0/arm9_main/sub_206D18C_0206D18C.c
- vm_model/src/kart_plugin.rs:214 Mushrooms and item hits (
sub_206D18C). - vm_model/src/kart/items.rs:1 Items used by this kart, and what they do to it (
sub_206D18C, run for each kart between - vm_model/src/kart/items.rs:12 A mushroom's boost and shove length in ticks (
sub_206D18C, case 3). - vm_model/src/kart/items.rs:15 An item object touching the kart (
sub_206D18Ccases 2 and 0/1/7). - vm_model/src/kart/items.rs:24 Item object kinds (+0x44), as
sub_206D18Cdispatches them. - vm_model/src/kart/items.rs:57 What touching it does to a kart (
sub_206D18C). Blue-shell blasts and bombs are not - vm_model/src/kart/items.rs:98
sub_206D18Ccase 3: a boost that ignores terrain (refused while damaged,sub_206D020), - game/src/items.rs:494 a star or Bullet Bill deflects the item (
sub_206D18C: SE 233) - game/src/items.rs:602 a Boo ghost goes through item boxes (
sub_206D18Creturns early for +0x7C & 0x402020) - docs/function_notes.md:291 touching an item object: dispatches on object type (v2[17]): 0,1,7 tumble, 2 spin(1), 3 mushroom (boost 90, shove 0x100000), 4 star on (sub_2069C38), 6 lightning, 5/9 spin(2) or sub_206BAB8; plays SE 233 once per kart when the target is star/bullet (deflected)
sub_206D578
export/plan0/arm9_main/sub_206D578_0206D578.c
- vm_model/src/kart_plugin.rs:365 Slipstream check (
sub_206D578): the karts whose draft zones the broadphase returns. - vm_model/src/kart/movement.rs:767 sub_206D578 (head): the draft zone sits 4 radii behind the sphere's base point
- vm_model/src/kart/slipstream.rs:2 staying there long enough triggers a slipstream boost (
sub_206D578,sub_2069068, and the - vm_model/src/kart/slipstream.rs:15 Minimum own |velocity| to look for a kart to draft, and the other kart's (
sub_206D578). - vm_model/src/kart/slipstream.rs:62 End of movement (
sub_206D578).my_turn: this kart's id equals the round-robin slot. - vm_model/src/kart/traffic.rs:20 Mask the kart queries with (
sub_206D578/ movement:0xE800).
sub_206D7C8
export/plan0/arm9_main/sub_206D7C8_0206D7C8.c
- vm_model/src/kart/traffic.rs:177 Weight ratio cap in a push (
sub_206D7C8). - vm_model/src/kart/traffic.rs:235
sub_206D7C8with the other kart pushing this one alongn: the part of the push across
sub_206DBF8
export/plan0/arm9_main/sub_206DBF8_0206DBF8.c
- docs/function_notes/agent_03.md:230 kart-vs-kart hit: if kart a2 may be hit, computes direction, applies hit reaction sub_206A980, plays sound 232, toggles net-sync bit by player index
sub_206DE18
export/plan0/arm9_main/sub_206DE18_0206DE18.c
- game/src/items.rs:577 a star blows the other kart away from it (sub_206DE18)
- game/src/sfx.rs:29 Crash (blown away,
sub_206DE18). - docs/function_notes.md:288 star touch (a1 = star kart, a2 = victim, a3 = direction): victim is blown away (sub_206ADD0 mode 1, SE 232) unless victim +76 has 0x400000 or mask 0x10000040 (star/bullet); local player victims also need +384 == 0 and +72 & 0x1800 == 0; other karts +384 in 0..2; sets item-HUD bits (+1300 -> +44) per victim index
sub_206DFD0
export/plan0/arm9_main/sub_206DFD0_0206DFD0.c
- vm_model/src/kart_plugin.rs:169 Kart-to-kart contact (
sub_206DFD0). The original updates karts one after another, so a kart - vm_model/src/kart_plugin.rs:183 a ghost is not there for the others (
sub_206DFD0: +0x7C bit 0x2000) - vm_model/src/kart/speed.rs:90 Boo ghost (+0x7C bit 0x2000): no contact with other karts (
sub_206DFD0). - vm_model/src/kart/traffic.rs:182
sub_206DFD0for one kart (shoving: this kart's mushroom shove, [super::Boost::shove_ticks]): every kart whose contact box the broadphase returned and whose
sub_206E874
export/plan0/arm9_main/sub_206E874_0206E874.c
- vm_model/src/obj_collision.rs:1 Karts against course objects (
sub_206E874): each collidable object carries a collision - vm_model/src/kart/items.rs:5 contact
sub_206E874reports no push, wall or slow-down flags for them). Which item objects - vm_model/src/kart/mod.rs:379 Bumped into a solid object this tick (+0x44 bit 0x40,
sub_206E874). - vm_model/src/kart/movement.rs:956
sub_206F04Cfrom the object check (sub_206E874, flag 8 handlers): bumping into a solid - game/src/objects.rs:8 Collision is the game's (
vm_model::obj_collision,sub_206E874): objects with a collision - game/src/objects.rs:1528
sub_206E874: karts against course objects. The kart's sphere is tested against every - docs/function_notes.md:43 kart vs course objects: handler, wall bump (flag 8), speed scale (2), moving-object shove (1), push out
sub_206EDAC
export/plan0/arm9_main/sub_206EDAC_0206EDAC.c
- vm_model/src/kart/movement.rs:1090 Hard landings (
sub_206EDAC): a long or high fall bounces back up, and landing nose-down - vm_model/src/kart/movement.rs:1100
sub_206EDAC, on the first grounded tick.
sub_206F04C
export/plan0/arm9_main/sub_206F04C_0206F04C.c
- vm_model/src/obj_collision.rs:266 The handler's result flags: 8 wall bump (
sub_206F04Cwith full speed kept), 2 speed - vm_model/src/kart/mod.rs:357 Wall reaction state (
sub_206F574,sub_206F04C,sub_206F694). - vm_model/src/kart/movement.rs:936
sub_206F574+sub_206F04C: hitting a wall. Returns whether this was a fresh hit. - vm_model/src/kart/movement.rs:956
sub_206F04Cfrom the object check (sub_206E874, flag 8 handlers): bumping into a solid - vm_model/src/kart/movement.rs:974 The body of
sub_206F04C:a4caps the speed (times how head-on the hit is),fresh - docs/function_notes.md:54 wall reaction (KCL walls with a4 3277, objects with a4 4096)
sub_206F574
export/plan0/arm9_main/sub_206F574_0206F574.c
- vm_model/src/kart/mod.rs:357 Wall reaction state (
sub_206F574,sub_206F04C,sub_206F694). - vm_model/src/kart/movement.rs:936
sub_206F574+sub_206F04C: hitting a wall. Returns whether this was a fresh hit.
sub_206F694
export/plan0/arm9_main/sub_206F694_0206F694.c
- vm_model/src/kart/mod.rs:357 Wall reaction state (
sub_206F574,sub_206F04C,sub_206F694). - vm_model/src/kart/movement.rs:909
sub_206F694: the sphere test's slide vector (on moving terrain: how far the object carried
sub_206F824
export/plan0/arm9_main/sub_206F824_0206F824.c
- docs/function_notes/agent_03.md:231 kart pushed by bump: computes push direction from sub_20E73A0 pos, accumulates +628 push amount (cap 150 * sub_20E7388)
sub_206F914
export/plan0/arm9_main/sub_206F914_0206F914.c
- vm_model/src/cpu.rs:45 * Start (
sub_207E088, decided when the driver is set up; applied at "GO" bysub_206F914): - vm_model/src/start.rs:1 The start boost (
sub_206F914): holding the accelerator during the countdown builds a charge
sub_206FE08
export/plan0/arm9_main/sub_206FE08_0206FE08.c
- vm_model/src/kart/water.rs:11 The kart step (
sub_206FE08, run by the contact stepsub_1FFA4B4when the water object is - vm_model/src/kart/water.rs:154
sub_206FE08for a kart at heighty(andprevious_ylast tick, vertical speedvy) with - game/src/water.rs:3 (
sub_206FE08, only where the water object is active). - game/src/water.rs:80 sub_206FE08 after the contact step (karts move before the water object, so they see its
- docs/function_notes.md:501 kart water step: v = sub_20D3D48(kart y) (y minus the water surface); when v < 0 (below the surface) and not flag +76 bit 0x4000000: +220 (speed/gravity scale) = max(((+1012 * +196 >> 12) * v >> 12) + 4096, *(+716)+120) and kart+0x500 = -v (depth below the water), then
sub_207A6C0; a splash effectsub_208D978when the previous frame was above -40960 and the vertical speed < -8192; otherwise +0x500 = 0 - docs/function_notes/agent_03.md:232 kart slope/ground-height reaction: scales gravity/speed (+220) with terrain drop sub_20D3D48, spawns effect on steep drops
sub_206FF50
export/plan0/arm9_main/sub_206FF50_0206FF50.c
- vm_model/src/kart/mod.rs:330 passes this same result to sub_206FF50; a fresh unswept query can hit backfaces.
- game/src/respawn.rs:4 one (0x8000) starts it (
sub_206FF50); race progress is frozen meanwhile (kart +0x48 bit - game/src/respawn.rs:19 Fall surfaces (types 10, 11). Type 15 is a cannon (
sub_206FF50->sub_20710B0). - game/src/respawn.rs:42 sub_206FF50 snapshots checkpoint respawn id at fall start (kart+964).
- docs/function_notes.md:127 handles accepted fall/cannon terrain contact; flags 0xC00 begin fall state, signed type-15 flag routes cannon/off-course handling; caller's second argument omitted by C cast but retained in ARM r1
- docs/function_notes.md:461 fall start stores the checkpoint's respawn id in kart+964 immediately (or the battle cycling index) before the carry/placement phase. Native now caches the race checkpoint id at fall start rather than recomputing it after its placeholder delay; battle selection still needs porting
sub_2070398
export/plan0/arm9_main/sub_2070398_02070398.c
- vm_model/src/kart/movement.rs:865 sub_2070398: stopped on the ground -> rest in place
sub_2070484
export/plan0/arm9_main/sub_2070484_02070484.c
- vm_model/src/kart/mod.rs:319 points along it (+0x3F8,
sub_2070484;None= 1.0). - vm_model/src/kart/movement.rs:1063
sub_2070484: in the air (moving, not upside down) the tilt target is the attitude given by
sub_20705FC
export/plan0/arm9_main/sub_20705FC_020705FC.c
- docs/function_notes/agent_03.md:233 respawn the kart at checkpoint a2: places it at that checkpoint's position, orientation toward next, speed 5 units, resets HUD
sub_20708A4
export/plan0/arm9_main/sub_20708A4_020708A4.c
- vm_model/src/kart/cannon.rs:1 Cannons (
sub_20710B0on touching collision type 15, thensub_20708A4in place of the usual - vm_model/src/kart/cannon.rs:40
sub_20708A4: one tick of flight. Returnsfalseonce the target is passed (the flight ends
sub_2070F8C
export/plan0/arm9_main/sub_2070F8C_02070F8C.c
- docs/function_notes/agent_03.md:234 spawns respawn/lightning particle effects at a fixed location if camera within range; ids depend on local player flag
sub_20710B0
export/plan0/arm9_main/sub_20710B0_020710B0.c
- vm_model/src/kart/cannon.rs:1 Cannons (
sub_20710B0on touching collision type 15, thensub_20708A4in place of the usual - game/src/respawn.rs:19 Fall surfaces (types 10, 11). Type 15 is a cannon (
sub_206FF50->sub_20710B0).
sub_2071318
export/plan0/arm9_main/sub_2071318_02071318.c
- docs/function_notes/agent_03.md:235 sets drift/wheelie animation parameters (+1020..+1024) when damage state 0 or 6; sets flag +76 bit 8
sub_20713A0
export/plan0/arm9_main/sub_20713A0_020713A0.c
- docs/function_notes/agent_03.md:236 kart body-shake/wobble tick: integrates angular rate +1248 (clamped 210 or 380) into angle +1246, damped by factor +1236
sub_2071568
export/plan0/arm9_main/sub_2071568_02071568.c
- docs/function_notes/agent_03.md:237 kart exhaust/boost flame wobble: advances phase +1260, interpolates 3 sine-table values into scale vector +1264..+1272, scaled by speed ratio
sub_2071788
export/plan0/arm9_main/sub_2071788_02071788.c
- docs/function_notes/agent_03.md:238 kart squash-and-stretch animation tick (+1020 mode 0/1/2): sets scale vector +1028..+1048 from tables over +1024 frames, then clears flag 8
sub_2071894
export/plan0/arm9_main/sub_2071894_02071894.c
- docs/function_notes/agent_03.md:239 plays engine sound variant 7 for the kart unless sound disabled (flags 0x840)
sub_20718C8
export/plan0/arm9_main/sub_20718C8_020718C8.c
- docs/function_notes/agent_03.md:240 starts kart sound by id: computes sound index (sub_2086080 + sub_210A588) and plays via sub_210DDF4 with callback sub_2071914
sub_2071914
export/plan0/arm9_main/sub_2071914_02071914.c
- docs/function_notes/agent_03.md:241 plays kart sound a2 (sub_2109078, vol 127); remembers id in +1160 if it started
sub_2071944
export/plan0/arm9_main/sub_2071944_02071944.c
- docs/function_notes/agent_03.md:242 plays kart sound a2 at vol 127 (sub_21090C4)
sub_2071958
export/plan0/arm9_main/sub_2071958_02071958.c
- docs/function_notes/agent_03.md:243 kart engine sound update (sub_210B564) using kart fields +992/+996/+1280
sub_2071980
export/plan0/arm9_main/sub_2071980_02071980.c
- docs/function_notes.md:500 thunk
sub_210B2A8(kart, a2, kart+992, kart+996, kart+1280): the kart's rolling/wading sound step (a5 = water depth, see sub_206FE08) - docs/function_notes/agent_03.md:244 kart engine sound update variant (sub_210B2A8) using kart fields +992/+996/+1280
sub_20719A8
export/plan0/arm9_main/sub_20719A8_020719A8.c
- docs/function_notes/agent_03.md:245 wrapper: sub_2109078(kart, id, 127, 0)
sub_20719BC
export/plan0/arm9_main/sub_20719BC_020719BC.c
- docs/function_notes/agent_03.md:246 wrapper: sub_21090C4(kart, id, 127, 0) (kart sound)
sub_20719D0
export/plan0/arm9_main/sub_20719D0_020719D0.c
- docs/function_notes/agent_03.md:247 initialises kart sound/voice struct at +1104: sets pitch, volume parameters from kart class, picks voice bank per character (13 characters)
sub_2071C18
export/plan0/arm9_main/sub_2071C18_02071C18.c
- docs/function_notes/agent_03.md:248 kart sound init: resets sound state, sets character voice id +972 from character index, sets engine sound slot, starts engine sound
sub_2071DDC
export/plan0/arm9_main/sub_2071DDC_02071DDC.c
- docs/function_notes/agent_03.md:249 zeroes a 42-byte timer/counter block (many halfwords) used by kart effect state
sub_2071E28
export/plan0/arm9_main/sub_2071E28_02071E28.c
- docs/function_notes/agent_03.md:250 initialises kart flags +124: bit0 local player, 0x200 online, 0x400 AI-less/remote, 0x4 CPU, 0x10 has driver, 0x8000000 visible
sub_2071F44
export/plan0/arm9_main/sub_2071F44_02071F44.c
- docs/function_notes/agent_03.md:251 for remote karts (flag 0x400): copies position/orientation into the network sub-struct (+1300) and resets its interpolation
sub_2071FB8
export/plan0/arm9_main/sub_2071FB8_02071FB8.c
- docs/function_notes/agent_03.md:252 initialises the kart network/replay sub-struct (+1300): position, rotation, zero vectors, and a 30-entry ring buffer of 36-byte frames allocated from heap
sub_20720DC
export/plan0/arm9_main/sub_20720DC_020720DC.c
- game/src/respawn.rs:136 sub_20720DC (kart+528 reset callback) clears lean, air pitch
- docs/function_notes.md:456 base kart reset callback (kart+528 resolves here in Figure-8 RAM): clears motion/status masks, velocity, drift, tilt, lean+724, air-pitch+564, target/eased turn+1004/+1008, restores default scale/friction/gravity, respawn-id+964=-1. Native respawn now also clears KartSteering while preserving host CPU classification; full item/controller reset audit remains open
- docs/function_notes/agent_03.md:253 zeroes/initialises the whole kart struct (positions, matrices, scales, timers, speeds, flags) to defaults before spawn
sub_2072600
export/plan0/arm9_main/sub_2072600_02072600.c
- docs/function_notes/agent_03.md:254 resets part of the kart struct (scales 4096, vectors at +604..+760 to zero, drift/jump state) after respawn
sub_20726BC
export/plan0/arm9_main/sub_20726BC_020726BC.c
- vm_model/src/roster.rs:2 way the game builds them (
sub_208AEA8copies the kart's entry,sub_20726BCadjusts it). - vm_model/src/kart/water.rs:161 +0x3F4 (
sub_20726BC): how fast the multiplier falls with depth - docs/function_notes.md:1694 kart init part: +0x3F4 = FX_Div(4096 - stats+0x78 (surface_speed[4]), 2 x stats+0x00 (radius)): how fast water slows the kart with depth
sub_20727D4
export/plan0/arm9_main/sub_20727D4_020727D4.c
- docs/function_notes/agent_03.md:255 kart reset to course start (flag 0x20 set): gets start grid pos, yaw, rebuilds matrices, registers KCL colliders, restores scale to default
sub_2072930
export/plan0/arm9_main/sub_2072930_02072930.c
- docs/function_notes.md:294 full effect reset (respawn/finish): ends star, Boo and Bullet states
- docs/function_notes.md:457 respawn/reset cleanup: stops per-kart effect controllers, resets driver controller and audio state, ends status-specific transforms, cleans bullet/shrink state and emits original disappearance effects/sounds where flagged; called before the base kart reset
- docs/function_notes/agent_03.md:256 kart full effect reset: clears damage/boost/star states, particles, sounds, HUD item state, visuals back to 1.0 scale, plays reset sound 253
sub_2072B94
export/plan0/arm9_main/sub_2072B94_02072B94.c
- vm_model/src/kart/respawn.rs:22 sub_2072B94 derives yaw again from the quantized direction using FX_Atan2,
- docs/function_notes.md:455 reset-and-place kart: cleanup2072930, controller2079C0C, invokes kart+528 reset callback, sets position, derives yaw from FX_Atan2(forward.x,forward.z) with truncated constant0x28BE60D >>24, rebuilds basis/facing/travel and position histories, resets CPU cursor to supplied route point or racer route; player camera reset. Captured306 reset-yaw results match Rust; this does not establish all reset fields/camera parity
- docs/function_notes/agent_03.md:257 places kart at position a2 with orientation a3 (reset/respawn core): resets effects, copies position into all history slots, updates network struct, camera
sub_2072D84
export/plan0/arm9_main/sub_2072D84_02072D84.c
- docs/function_notes/agent_03.md:258 kart invincibility (star/mega) decay tick: scales +1212, counts +960 frames, fires item-end sounds at frames 22/25/85, ends after 120
sub_2072EB8
export/plan0/arm9_main/sub_2072EB8_02072EB8.c
- vm_model/src/kart/respawn.rs:1 Respawn placement from
sub_2072EB8. Timing and the kart-reset callback are separate. - game/src/racers.rs:312 Original kart+548 resolves to sub_2072EB8: put back immediately,
- game/src/respawn.rs:7 (
sub_2072EB8). Not measured yet: the timing of the fall and of the carry, so the delays - docs/function_notes.md:454 respawn placement: checkpoint JGPT (battle cycles the respawn index; helper returns the battle route pointer), SDK quantized yaw, per-racer 30-unit side/forward grid offsets except mode1 time trial, pitch (-alongsinX) and roll (sidesinZ) height adjustments, then +40 units. Placement and reset yaw match306 controlled original calls (102 time-trial /204 spread) in vm_model/src/kart/respawn.rs; native bridge wired. Rescue timing/visuals and full reset parity remain open
sub_20732D8
export/plan0/arm9_main/sub_20732D8_020732D8.c
- docs/function_notes/agent_03.md:259 kart "finished/falling" tick: sets kart state byte, if flag 0x20 runs sub_2068B98 else plays 25-frame scale ramp on visual scales
sub_20733EC
export/plan0/arm9_main/sub_20733EC_020733EC.c
- docs/function_notes/agent_03.md:261 kart object creation: sets update hook, init flags, sound, allocates HUD struct (344 bytes) and net struct (184 bytes), registers collision handles
sub_2073630
export/plan0/arm9_main/sub_2073630_02073630.c
- docs/function_notes/agent_03.md:262 builds the kart-vs-object reaction handler tables at 0x0217ABF8 / 0x0217AC34 (15 entries each) by game/course mode; also sets mega-size constant
sub_20738F8
export/plan0/arm9_main/sub_20738F8_020738F8.c
- docs/function_notes/agent_03.md:264 abs(x): returns absolute value of a1
sub_2073904
export/plan0/arm9_main/sub_2073904_02073904.c
- docs/function_notes/agent_03.md:265 camera noise/shake: advances 64-bit LCG state, builds two jitter vectors from camera right/up axes and low-pass filters them into camera position/target
sub_2073E04
export/plan0/arm9_main/sub_2073E04_02073E04.c
- docs/function_notes/agent_03.md:266 camera helper: dot of (point - camera eye) with camera axis, scaled by halfword +620
sub_2073E4C
export/plan0/arm9_main/sub_2073E4C_02073E4C.c
- docs/function_notes/agent_03.md:267 camera helper: dot of (point - camera eye) with camera vector at +348
sub_2073E88
export/plan0/arm9_main/sub_2073E88_02073E88.c
- docs/function_notes/agent_03.md:268 getter: global 0x0217AC88 (camera mode/flag)
sub_2073E98
export/plan0/arm9_main/sub_2073E98_02073E98.c
- docs/function_notes/agent_03.md:269 clears camera globals 0x0217AC88 and 0x0217AC8C
sub_2073EB8
export/plan0/arm9_main/sub_2073EB8_02073EB8.c
- vm_model/src/camera.rs:21 the shake (
sub_2073EB8), the roll with drifting (+0x16C), the zoom out on a star. - vm_model/src/camera.rs:309 (
sub_2075FE0) on the ground; the shake (sub_2073EB8) is not exercised by this run. - docs/function_notes.md:68 camera shake
sub_2073F90
export/plan0/arm9_main/sub_2073F90_02073F90.c
- docs/function_notes/agent_03.md:270 calls helper with constant 0x5000, 0, 4096 (camera distance constants)
sub_207409C
export/plan0/arm9_main/sub_207409C_0207409C.c
- docs/function_notes/agent_03.md:271 camera: places eye at position a1 minus view axis scaled, resets smoothing state, registers camera collision shape
sub_20741A0
export/plan0/arm9_main/sub_20741A0_020741A0.c
- vm_model/src/camera.rs:6 - Eye (
sub_20741A0): carried along with the kart, then pulled toward a point 58 units - vm_model/src/camera.rs:180
sub_20741A0. - vm_model/src/camera.rs:308 Bit-exact check of the eye follow (
sub_20741A0) and the slope height offset - docs/function_notes.md:64 race camera eye
sub_20745D4
export/plan0/arm9_main/sub_20745D4_020745D4.c
- vm_model/src/camera.rs:4 - Target (
sub_20745D4): the kart's position raised 20 units along its up axis; the height - vm_model/src/camera.rs:141
sub_20745D4. - docs/function_notes.md:65 race camera target
sub_20747F4
export/plan0/arm9_main/sub_20747F4_020747F4.c
- docs/function_notes/agent_03.md:272 camera: sets flag +584 (a1) and copies eye position to +204 when set
sub_2074828
export/plan0/arm9_main/sub_2074828_02074828.c
- docs/function_notes/agent_03.md:273 camera: sets timers +100/+96 from constant 0x157C (+5)
sub_2074854
export/plan0/arm9_main/sub_2074854_02074854.c
- docs/function_notes/agent_03.md:274 camera: sets timer +100 from constant 0x157C
sub_2074874
export/plan0/arm9_main/sub_2074874_02074874.c
- docs/function_notes/agent_03.md:275 camera: sets +100 = a1
sub_2074888
export/plan0/arm9_main/sub_2074888_02074888.c
- docs/function_notes/agent_03.md:276 getter: global 0x0217AC94
sub_2074898
export/plan0/arm9_main/sub_2074898_02074898.c
- docs/function_notes/agent_03.md:277 getter: global 0x0217AC9C
sub_20748A8
export/plan0/arm9_main/sub_20748A8_020748A8.c
- vm_model/src/mapobj/boo.rs:137 camera (
sub_20748A8: eye +0x24, target +0x18). - docs/function_notes/agent_03.md:278 getter: camera struct pointer 0x0217AC74
sub_20748B8
export/plan0/arm9_main/sub_20748B8_020748B8.c
- docs/function_notes/agent_03.md:279 intro-camera path interpolation: lerps position between key points by param +580 and advances it by key's step (max 4096)
sub_2074978
export/plan0/arm9_main/sub_2074978_02074978.c
- docs/function_notes/agent_03.md:280 intro camera update: sub_20749A4, then sub_20748B8, then sub_2076ED4
sub_20749A4
export/plan0/arm9_main/sub_20749A4_020749A4.c
- docs/function_notes/agent_03.md:281 intro/replay camera eye/target update: interpolates between two course camera points (by index) or runs spline sub_207BC9C
sub_2074B00
export/plan0/arm9_main/sub_2074B00_02074B00.c
- docs/function_notes/agent_03.md:282 race camera type 6 (goal/replay orbit): blends eye and target toward the followed kart with lookahead, updates fov from camera record, sets light direction (sub_2062254)
sub_2074E6C
export/plan0/arm9_main/sub_2074E6C_02074E6C.c
- docs/function_notes/agent_03.md:283 race camera (types 5/6, chase with offset angles): places eye/target around the followed kart using sine tables and camera record angles, KCL-collides the eye
sub_2075390
export/plan0/arm9_main/sub_2075390_02075390.c
- docs/function_notes/agent_03.md:284 camera type 1 update: intro/area spline point via sub_20749A4, then sets target above followed kart and builds the view matrix
sub_2075424
export/plan0/arm9_main/sub_2075424_02075424.c
- docs/function_notes/agent_03.md:285 advances camera to next camera record (course camera area chain, 76-byte records at *0x02175600+124) when its time elapses; resets interpolation
sub_207564C
export/plan0/arm9_main/sub_207564C_0207564C.c
- docs/function_notes/agent_03.md:286 camera tick (single-camera mode): runs sub_2075424 and builds the view matrix; returns camera pos pointer (+48)
sub_2075694
export/plan0/arm9_main/sub_2075694_02075694.c
- docs/function_notes/agent_03.md:287 camera tick (two-camera mode): handles second camera, copies state between them, builds view matrices
sub_20757D8
export/plan0/arm9_main/sub_20757D8_020757D8.c
- docs/function_notes/agent_03.md:288 activates the camera record stored at *0x02175600+212 (replay/intro start camera) with transition, resets smoothing
sub_2075900
export/plan0/arm9_main/sub_2075900_02075900.c
- docs/function_notes/agent_03.md:289 camera update dispatcher by camera record type (+62): 0 fixed, 1 follow, 2 path, 3 intro, 5/6 chase, default fov blend
sub_2075A94
export/plan0/arm9_main/sub_2075A94_02075A94.c
- docs/function_notes/agent_03.md:290 per-frame camera selector: picks camera record from the followed kart's position (sub_20411E4), handles transitions and special modes, calls sub_2075900
sub_2075CF0
export/plan0/arm9_main/sub_2075CF0_02075CF0.c
- docs/function_notes/agent_03.md:291 sets camera flag +564 = 1 (camera locked)
sub_2075D08
export/plan0/arm9_main/sub_2075D08_02075D08.c
- docs/function_notes/agent_03.md:292 camera lock/unlock (a1): when unlocking, re-selects camera record from kart position and activates it
sub_2075EB8
export/plan0/arm9_main/sub_2075EB8_02075EB8.c
- docs/function_notes/agent_03.md:293 activates camera record at *0x02175600+204 (goal camera), flag +552 = 1, resets smoothing
sub_2075FE0
export/plan0/arm9_main/sub_2075FE0_02075FE0.c
- vm_model/src/camera.rs:9 - Slopes (
sub_2075FE0): on the ground the eye's aim point drops by 45 x the forward - vm_model/src/camera.rs:164
sub_2075FE0: lower the eye going uphill, raise it on steep descents. - vm_model/src/camera.rs:309 (
sub_2075FE0) on the ground; the shake (sub_2073EB8) is not exercised by this run. - docs/function_notes.md:66 race camera slope height offset
sub_20760EC
export/plan0/arm9_main/sub_20760EC_020760EC.c
- vm_model/src/camera.rs:11 - Collision (
sub_20760EC): the eye is a 10-unit sphere tested against the course; floors - vm_model/src/camera.rs:212
sub_20760EC: the eye against the course. - docs/function_notes.md:67 race camera eye vs course (KCL)
sub_2076528
export/plan0/arm9_main/sub_2076528_02076528.c
- vm_model/src/camera.rs:1 The race camera behind a kart (
sub_2076528, run once a tick): where the eye and the - game/src/main.rs:127 The race camera (
vm_model::camera, the game'ssub_2076528), stepped with the karts. - docs/function_notes.md:63 race camera update (per tick)
sub_2076A5C
export/plan0/arm9_main/sub_2076A5C_02076A5C.c
- docs/function_notes/agent_03.md:294 camera init for the viewed kart: places eye behind kart (offset by view axis), sets fov constants, starts camera, sets target height
sub_2076BCC
export/plan0/arm9_main/sub_2076BCC_02076BCC.c
- docs/function_notes/agent_03.md:295 stores camera eye/target/up into global vectors and builds view matrix (NNS lookAt sub_214ABB4) for 3D draw
sub_2076C50
export/plan0/arm9_main/sub_2076C50_02076C50.c
- docs/function_notes/agent_03.md:296 applies camera projection: perspective (sub_214B048) with fov/aspect/near/far from camera struct; a2 chooses alternate fov
sub_2076CC4
export/plan0/arm9_main/sub_2076CC4_02076CC4.c
- docs/function_notes/agent_03.md:297 getter: pointer to global camera-related struct at 0x0217ACA0
sub_2076CD0
export/plan0/arm9_main/sub_2076CD0_02076CD0.c
- docs/function_notes/agent_03.md:298 computes camera basis (view vector, right, up) from eye and target, applies shake (sub_2073904) and builds LookAt matrix; writes 0x04000440 mode 2
sub_2076ED4
export/plan0/arm9_main/sub_2076ED4_02076ED4.c
- docs/function_notes/agent_03.md:299 camera basis and LookAt matrix for camera path/intro modes; target offset by +94*
sub_2077060
export/plan0/arm9_main/sub_2077060_02077060.c
- docs/function_notes/agent_03.md:300 sets the 3D projection each frame: eases fov index (+96 toward +100), computes frustum left/right/top/bottom from fov and aspect, applies perspective (sub_214B048), per-camera x-shift in two-camera modes
sub_207729C
export/plan0/arm9_main/sub_207729C_0207729C.c
- docs/function_notes/agent_03.md:301 initialises the camera struct (eye/target/up, fov table index 0x157C+5, near/far, filters, state flags) to defaults
sub_20775E4
export/plan0/arm9_main/sub_20775E4_020775E4.c
- docs/function_notes/agent_03.md:302 single-camera setup: allocates 0x270-byte camera struct at 0x0217AC98, inits it, assigns first camera record from course data
sub_207767C
export/plan0/arm9_main/sub_207767C_0207767C.c
- docs/function_notes/agent_03.md:303 two-camera setup: allocates two camera structs (0x0217AC98 and 0x0217AC84) with two course camera records
sub_2077750
export/plan0/arm9_main/sub_2077750_02077750.c
- docs/function_notes/agent_03.md:304 initialises one intro-camera key record (136 bytes) from a course camera record (type 7): time, spline data via sub_207BE40/sub_207BD6C
sub_20777AC
export/plan0/arm9_main/sub_20777AC_020777AC.c
- docs/function_notes/agent_03.md:305 creates the intro/demo camera struct for kart a1: allocates 0x270 bytes, collects all type-7 camera records of the course into an array
sub_2077944
export/plan0/arm9_main/sub_2077944_02077944.c
- docs/function_notes/agent_03.md:306 camera final init: allocate camera, init for viewed kart (sub_2076A5C), copy kart orientation, set projection
sub_2077998
export/plan0/arm9_main/sub_2077998_02077998.c
- docs/function_notes/agent_03.md:307 initialises GX viewport/clear and camera globals; picks camera height/distance constants from a 12-byte table (+0x54 based, mode 4) and course 19 special distance
sub_2077A28
export/plan0/arm9_main/sub_2077A28_02077A28.c
- docs/function_notes/agent_03.md:308 loads palette file emblem_s_b.NCLR into a buffer via sub_207913C/sub_20B4A7C
sub_2077A4C
export/plan0/arm9_main/sub_2077A4C_02077A4C.c
- docs/function_notes/agent_03.md:309 getter: halfword at +8 of struct 0x0217ACE8 (current index)
sub_2077A5C
export/plan0/arm9_main/sub_2077A5C_02077A5C.c
- docs/function_notes/agent_03.md:310 getter: halfword +4 of struct 0x0217ACE8 plus one
sub_2077A70
export/plan0/arm9_main/sub_2077A70_02077A70.c
- docs/function_notes/agent_03.md:311 for unlock index a2: finds which of 8 slots/cup groups (a2/3) is available per unlock table and stores it in *a1; returns whether found (uncertain meaning: cup/course unlock check)
sub_2077B1C
export/plan0/arm9_main/sub_2077B1C_02077B1C.c
- docs/function_notes/agent_03.md:312 clears two counters at +0x260 / +0x25C in struct 0x0217ACE8
sub_2077B3C
export/plan0/arm9_main/sub_2077B3C_02077B3C.c
- docs/function_notes/agent_03.md:313 if a transition is pending, marks current page entry (52-byte records) done, copies selection state and starts async load callback; sets flag +248
sub_2077C1C
export/plan0/arm9_main/sub_2077C1C_02077C1C.c
- docs/function_notes/agent_03.md:314 per-frame menu page loader step: finalises loaded page resources (model, palettes, animations), swaps double-buffer entries, starts next load
sub_2077D68
export/plan0/arm9_main/sub_2077D68_02077D68.c
- docs/function_notes/agent_03.md:315 loads the menu page's 3D assets: driver model, face, clip, kart model, emblem etc. via filename builders (sub_20887D8, sub_2088728, sub_207B8F4, ...) into 9 slots
sub_2077EB4
export/plan0/arm9_main/sub_2077EB4_02077EB4.c
- docs/function_notes/agent_03.md:316 initialises a menu page record: allocates 0xF000-byte heap block, zeroes 8 pointer slots and counters
sub_2077F00
export/plan0/arm9_main/sub_2077F00_02077F00.c
- docs/function_notes/agent_03.md:317 getter: global 0x0217ACE4
sub_2077F0C
export/plan0/arm9_main/sub_2077F0C_02077F0C.c
- docs/function_notes/agent_03.md:318 angle lerp helper: moves 16-bit angle *a1 toward a2 by a3 fraction (wraps at 0xFFFF)
sub_2077F48
export/plan0/arm9_main/sub_2077F48_02077F48.c
- docs/function_notes/agent_03.md:319 setter: stores a1 to struct 0x0217ACE8 +0x1D8
sub_2077F5C
export/plan0/arm9_main/sub_2077F5C_02077F5C.c
- docs/function_notes/agent_03.md:320 sets +0x1DC = 1 and clears halfword +0x1F0 in struct 0x0217ACE8
sub_2077F7C
export/plan0/arm9_main/sub_2077F7C_02077F7C.c
- docs/function_notes/agent_03.md:321 returns pointer to slot a1's 32-byte record in table at *0x0217ACE0+20 (or 0)
sub_2077F9C
export/plan0/arm9_main/sub_2077F9C_02077F9C.c
- docs/function_notes/agent_03.md:322 loads a driver's 3D material/texture ("P_main" for player or "E_main" otherwise) palette data into buffer a3 (32 bytes) using NSBMD lookup
sub_207800C
export/plan0/arm9_main/sub_207800C_0207800C.c
- docs/function_notes/agent_03.md:323 for each of the player slots with state 12, loads its texture palette via sub_2077F7C/sub_2077F9C
sub_2078078
export/plan0/arm9_main/sub_2078078_02078078.c
- docs/function_notes/agent_03.md:324 copies 8 halfwords from table at 0x0217B468+0x10C into array at 0x0217ACE0+24
sub_20780B0
export/plan0/arm9_main/sub_20780B0_020780B0.c
- docs/function_notes/agent_03.md:325 draws the current menu page (3D model of selected character/kart) via sub_20787F4/sub_2078580, flushes GX
sub_20780F4
export/plan0/arm9_main/sub_20780F4_020780F4.c
- docs/function_notes/agent_03.md:326 draws current menu page variant with an extra parameter (+0x1E4); skips if resources missing
sub_2078158
export/plan0/arm9_main/sub_2078158_02078158.c
- docs/function_notes/agent_03.md:329 kart-select input: L/R pages through 36 entries (kart/driver list), up/down rotate and zoom the 3D preview, triggers load of the new page
sub_20783C8
export/plan0/arm9_main/sub_20783C8_020783C8.c
- docs/function_notes/agent_03.md:330 per-frame animation tick of the current kart-select preview and emblem palette upload
sub_2078420
export/plan0/arm9_main/sub_2078420_02078420.c
- docs/function_notes/agent_03.md:331 kart-select preview animation: spin/slide easing toward target angle, updates model animation, emblem palette
sub_207851C
export/plan0/arm9_main/sub_207851C_0207851C.c
- docs/function_notes/agent_03.md:332 applies model light/material to the preview model (sub_2010458/201050C/2010294)
sub_2078580
export/plan0/arm9_main/sub_2078580_02078580.c
- docs/function_notes/agent_03.md:333 draws the kart-select preview: builds rotation from angles, draws kart body, driver, tires (4) with offsets, shadow
sub_20787F4
export/plan0/arm9_main/sub_20787F4_020787F4.c
- docs/function_notes/agent_03.md:334 sets up GX lights and the select-screen camera (LookAt) before drawing the preview
sub_2078934
export/plan0/arm9_main/sub_2078934_02078934.c
- docs/function_notes/agent_03.md:335 sets the select-screen orthographic/perspective projection (aspect-adjusted, uses sub_214B048)
sub_20789D4
export/plan0/arm9_main/sub_20789D4_020789D4.c
- docs/function_notes/agent_03.md:336 sets zoom direction flag +84 = 1 (zoom in)
sub_20789E4
export/plan0/arm9_main/sub_20789E4_020789E4.c
- docs/function_notes/agent_03.md:337 sets zoom direction flag +84 = 0 (zoom out)
sub_20789F4
export/plan0/arm9_main/sub_20789F4_020789F4.c
- docs/function_notes/agent_03.md:338 applies zoom: moves camera distance (+80) by 21 per tick, clamped to -250..-46
sub_2078A34
export/plan0/arm9_main/sub_2078A34_02078A34.c
- docs/function_notes/agent_03.md:339 selects kart index a1 (<=37) in select screen if not loading; marks page dirty
sub_2078A9C
export/plan0/arm9_main/sub_2078A9C_02078A9C.c
- docs/function_notes/agent_03.md:340 selects driver index a1 (<=13) in select screen if not loading; marks page dirty
sub_2078B04
export/plan0/arm9_main/sub_2078B04_02078B04.c
- docs/function_notes/agent_03.md:341 copies a 12-byte kart offset record (from kartoffsetdata.bin table) into select struct +12..+22, adds y offset
sub_2078B48
export/plan0/arm9_main/sub_2078B48_02078B48.c
- docs/function_notes/agent_03.md:342 kart-select state allocator: allocates 0x26C block, zeroes fields, loads emblem palette and kartoffsetdata.bin, inits two page records
sub_2078C58
export/plan0/arm9_main/sub_2078C58_02078C58.c
- docs/function_notes/agent_03.md:343 kart-select screen init (full): 3D setup, load assets, counts available entries (of 36), inits two pages and loads first page
sub_2078D64
export/plan0/arm9_main/sub_2078D64_02078D64.c
- docs/function_notes/agent_03.md:344 kart-select screen init (menu variant): loads charmenuparam.bin and kartmenuparam.bin, select.nsbmd/nsbtx
sub_2078E4C
export/plan0/arm9_main/sub_2078E4C_02078E4C.c
- docs/function_notes/agent_03.md:345 uploads two palettes (emblem "kart_emblem" and a 32-byte palette) of the current kart to VRAM via sub_2016468
sub_2078EE0
export/plan0/arm9_main/sub_2078EE0_02078EE0.c
- docs/function_notes/agent_03.md:346 resets select-view state (angles, scale 1.0, zoom -250 or 0)
sub_2078F18
export/plan0/arm9_main/sub_2078F18_02078F18.c
- docs/function_notes/agent_03.md:347 allocates a select page's sub-buffers (3 x 108 bytes, 116, 56 bytes) from heap
sub_2078F78
export/plan0/arm9_main/sub_2078F78_02078F78.c
- docs/function_notes/agent_03.md:348 stores handle from sub_20136F0 into +0x1D4 and calls sub_2012CBC (model resource setup)
sub_2078F9C
export/plan0/arm9_main/sub_2078F9C_02078F9C.c
- docs/function_notes/agent_03.md:349 loads kart/select/select.nsbmd and .nsbtx and creates the select-screen backdrop model
sub_2079008
export/plan0/arm9_main/sub_2079008_02079008.c
- docs/function_notes/agent_03.md:350 wrapper: sub_207AFA8(a1, a2, 3)
sub_2079014
export/plan0/arm9_main/sub_2079014_02079014.c
- docs/function_notes/agent_03.md:351 creates a model instance from nsbmd/nsbtx (sub_2084D3C), sets it up and marks visible
sub_2079038
export/plan0/arm9_main/sub_2079038_02079038.c
- docs/function_notes/agent_03.md:352 creates the tire model instance and hides the "kart_tire" material node
sub_2079078
export/plan0/arm9_main/sub_2079078_02079078.c
- docs/function_notes/agent_03.md:353 creates the driver model instance and its joint animation, selects clip 0 (drive)
sub_20790E0
export/plan0/arm9_main/sub_20790E0_020790E0.c
- docs/function_notes/agent_03.md:354 loads select-screen character parameter data (sub_2056444) and sets state flags
sub_207913C
export/plan0/arm9_main/sub_207913C_0207913C.c
- docs/function_notes/agent_03.md:355 builds path "/data/KartModelMenu/%s" from file name a2 and loads it into *a3 via sub_2048590
sub_207916C
export/plan0/arm9_main/sub_207916C_0207916C.c
- docs/function_notes/agent_03.md:356 loads character/common/KillerItem.nsbmd/.nsbtx/.nsbca (Bullet Bill model) and its animation, sets up model instance
sub_2079220
export/plan0/arm9_main/sub_2079220_02079220.c
- docs/function_notes/agent_03.md:357 loads a driver model by character id (sub_20884BC name) and allocates a 116-byte instance
sub_207926C
export/plan0/arm9_main/sub_207926C_0207926C.c
- docs/function_notes/agent_03.md:358 loads a kart model by kart id, allocates a 108-byte instance and init it
sub_20792C8
export/plan0/arm9_main/sub_20792C8_020792C8.c
- docs/function_notes/hk_12.md:26 thumb; if a1[44] set and a1[1] is 34/35 loads a face palette/texture pair via sub_2013754 and VRAM upload helpers (sub_214C48C/418/3C0); for a1[0]==11 loads two more pairs (64 or 16 colors by a2)
sub_207940C
export/plan0/arm9_main/sub_207940C_0207940C.c
- docs/function_notes/NEEDS_REVIEW.md:380 probably kart palette upload: calls sub_2133068(a2,3) then sub_200EE74 on a3+32*idx, resolves a named entry via sub_2013754 and uploads 16 colors with sub_214C418
- docs/function_notes/hk_12.md:27 probably kart palette upload: calls sub_2133068(a2,3) then sub_200EE74 on a3+32*idx, resolves a named entry via sub_2013754 and uploads 16 colors with sub_214C418
sub_2079478
export/plan0/arm9_main/sub_2079478_02079478.c
- docs/function_notes/NEEDS_REVIEW.md:381 probably resource getter: sub_207913C loads entry off_2079498, sub_20B4A7C resolves it, returns the word at +12
- docs/function_notes/hk_12.md:28 probably resource getter: sub_207913C loads entry off_2079498, sub_20B4A7C resolves it, returns the word at +12
sub_207949C
export/plan0/arm9_main/sub_207949C_0207949C.c
- docs/function_notes/NEEDS_REVIEW.md:382 probably resource getter: sub_2047950 on off_20794B8 then sub_20B4A7C, returns the word at +12
- docs/function_notes/hk_12.md:29 probably resource getter: sub_2047950 on off_20794B8 then sub_20B4A7C, returns the word at +12
sub_20794BC
export/plan0/arm9_main/sub_20794BC_020794BC.c
- docs/function_notes/NEEDS_REVIEW.md:383 probably kart-select setup: loads a file via sub_208867C/sub_2047950, allocs 108 bytes into a1+20, sets 2D params (sub_20849C0, sub_207A14C), optional named load, then calls sub_207940C
- docs/function_notes/hk_12.md:30 probably kart-select setup: loads a file via sub_208867C/sub_2047950, allocs 108 bytes into a1+20, sets 2D params (sub_20849C0, sub_207A14C), optional named load, then calls sub_207940C
sub_207954C
export/plan0/arm9_main/sub_207954C_0207954C.c
- game/src/driver_animation.rs:2 Sources: sub_207954C (resources), sub_207B734 (steering), sub_2068A64
- docs/function_notes.md:74 character renderer setup: loads four joint clips and shared face-pattern wrapper; see analysis/CODEX_ANIMATION_MAP.md (C/resources confirmed)
sub_2079678
export/plan0/arm9_main/sub_2079678_02079678.c
- docs/function_notes/NEEDS_REVIEW.md:384 probably per-racer kart model/palette refresh over the 180-byte racer array at off_20797D4; calls sub_207954C/sub_20794BC for selected slots; for a2 builds 4 scaled 12-byte vectors and sub_2147F34
- docs/function_notes/hk_12.md:31 probably per-racer kart model/palette refresh over the 180-byte racer array at off_20797D4; calls sub_207954C/sub_20794BC for selected slots; for a2 builds 4 scaled 12-byte vectors and sub_2147F34
sub_20797D8
export/plan0/arm9_main/sub_20797D8_020797D8.c
- docs/function_notes/hk_12.md:32 kart/character select scene init: allocs racer array (180*a2) and 224-byte buffers, loads named resources via sub_2047950, per-racer sub_2079A3C/A14/988, then sub_2079678 twice and sub_20792C8
sub_2079988
export/plan0/arm9_main/sub_2079988_02079988.c
- docs/function_notes/hk_12.md:33 sub_2133068(a2,3) result stored as halfword at a1+104 (probably a 16-bit field from a lookup)
sub_20799A0
export/plan0/arm9_main/sub_20799A0_020799A0.c
- docs/function_notes/hk_12.md:34 returns boolean for whether racer index a1 matches the player/slot test (byte +98 or +99 of the state, +8 mode == 4, sub_2062EB0, +8 == 1)
sub_2079A04
export/plan0/arm9_main/sub_2079A04_02079A04.c
- docs/function_notes/hk_12.md:35 zeroes five fields of a small sub-struct (+0, +4, +16, +20, +24); reset helper
sub_2079A14
export/plan0/arm9_main/sub_2079A14_02079A14.c
- docs/function_notes/hk_12.md:36 gets a value from sub_2087D0C(off_2079A34+dword_2079A38) and inits the animation clock at a1+152 with sub_2087CD0 (looping)
sub_2079A3C
export/plan0/arm9_main/sub_2079A3C_02079A3C.c
- docs/function_notes/hk_12.md:37 resets a 180-byte racer record (fields +0..+176, halfwords +104..+148) and calls sub_2079A04 on a1+36; init helper
sub_2079B40
export/plan0/arm9_main/sub_2079B40_02079B40.c
- docs/function_notes/hk_12.md:38 returns halfword +104 of racer record a1 (stride 180, base via off_2079B5C)
sub_2079B60
export/plan0/arm9_main/sub_2079B60_02079B60.c
- docs/function_notes/hk_12.md:39 returns global base (off_2079B70) + 268; getter
sub_2079B74
export/plan0/arm9_main/sub_2079B74_02079B74.c
- docs/function_notes/hk_12.md:40 returns global base (off_2079B84) + 152; getter, probably the animation clock struct
sub_2079B88
export/plan0/arm9_main/sub_2079B88_02079B88.c
- docs/function_notes/hk_12.md:41 returns global base (off_2079B98) + 44; getter
sub_2079B9C
export/plan0/arm9_main/sub_2079B9C_02079B9C.c
- docs/function_notes/hk_12.md:42 thin wrapper: calls function pointer off_2079BC8 with a value from a1+20 and the flag a2 (31 or 0)
sub_2079BCC
export/plan0/arm9_main/sub_2079BCC_02079BCC.c
- docs/function_notes/hk_12.md:43 returns the word at +4 of the sub-struct at +20 of racer record a1; getter
sub_2079BF0
export/plan0/arm9_main/sub_2079BF0_02079BF0.c
- docs/function_notes/hk_12.md:44 returns pointer to racer record a1 (base at off_2079C08 + 180*a1); getter
sub_2079C0C
export/plan0/arm9_main/sub_2079C0C_02079C0C.c
- docs/function_notes/NEEDS_REVIEW.md:385 probably applies per-object colour/attribute words from table off_2079CDC+4 to objects at a1[4], a1[5], a1[6] via sub_20132CC/sub_20131F4/sub_2013284
- docs/function_notes/hk_12.md:45 probably applies per-object colour/attribute words from table off_2079CDC+4 to objects at a1[4], a1[5], a1[6] via sub_20132CC/sub_20131F4/sub_2013284
sub_2079CE0
export/plan0/arm9_main/sub_2079CE0_02079CE0.c
- docs/function_notes/hk_12.md:46 per-frame fixed-point interpolation of three 3-component parameter vectors (at a1+106, weight at +148, cap 4096), pushes results to objects via sub_20132CC/20131F4/2013284; returns 1 when weight saturates
sub_2079F70
export/plan0/arm9_main/sub_2079F70_02079F70.c
- docs/function_notes/hk_12.md:47 unpacks two 15-bit BGR colours (a2..a4 and a1[53..55]) into 5-bit R/G/B values and per-channel deltas; probably colour-fade setup
sub_207A104
export/plan0/arm9_main/sub_207A104_0207A104.c
- docs/function_notes/hk_12.md:48 returns halfword +2 of the struct at *(off_207A118)+4; getter
sub_207A11C
export/plan0/arm9_main/sub_207A11C_0207A11C.c
- docs/function_notes/hk_12.md:49 returns halfword +6 of the struct at *(off_207A130)+4; getter
sub_207A134
export/plan0/arm9_main/sub_207A134_0207A134.c
- docs/function_notes/hk_12.md:50 returns first halfword of the struct at *(off_207A148)+4; getter
sub_207A14C
export/plan0/arm9_main/sub_207A14C_0207A14C.c
- docs/function_notes/hk_12.md:51 switch on a2 (0..3) picks four default attribute words from globals, then sets them on object a1 via sub_20132CC/2013284/201323C/20131F4; probably default animation or material setup
sub_207A218
export/plan0/arm9_main/sub_207A218_0207A218.c
- docs/function_notes/hk_12.md:52 returns 0 when racer kind (+8) == 4 and the entry's flags (+96, +18 mask, +17 bit 0x10, sub_2181694) block it, else 1; probably a selectable/accept-item check
sub_207A2A8
export/plan0/arm9_main/sub_207A2A8_0207A2A8.c
- docs/function_notes/hk_12.md:53 if global off_207A2CC[0] is nonzero, stores value from off_207A2D0 into result and returns 1; else returns 0
sub_207A2D4
export/plan0/arm9_main/sub_207A2D4_0207A2D4.c
- docs/function_notes/hk_12.md:54 stores arg into off_207A304[0] when it is negative or smaller than the current value, and sets flag off_207A308 = 1; min tracker
sub_207A30C
export/plan0/arm9_main/sub_207A30C_0207A30C.c
- docs/function_notes/hk_12.md:55 stores halfword arg into global off_207A318; setter
sub_207A31C
export/plan0/arm9_main/sub_207A31C_0207A31C.c
- docs/function_notes/hk_12.md:56 returns halfword global off_207A328; getter
sub_207A32C
export/plan0/arm9_main/sub_207A32C_0207A32C.c
- docs/function_notes/NEEDS_REVIEW.md:386 probably item/rank selection for player racers: sub_203C8DC on racer, sets flag 0x8000 on three entries when kind == 5, else sets 0x8000/0x40000 on neighbour records found via sub_2085408
- docs/function_notes/hk_12.md:57 probably item/rank selection for player racers: sub_203C8DC on racer, sets flag 0x8000 on three entries when kind == 5, else sets 0x8000/0x40000 on neighbour records found via sub_2085408
sub_207A4FC
export/plan0/arm9_main/sub_207A4FC_0207A4FC.c
- docs/function_notes/hk_12.md:58 returns bit 0x1000 of word +72 of the current racer record (stride dword_207A534); flag test
sub_207A538
export/plan0/arm9_main/sub_207A538_0207A538.c
- docs/function_notes/hk_12.md:59 returns true if word +68 of the current racer record has bits 0xC0; flag test
sub_207A574
export/plan0/arm9_main/sub_207A574_0207A574.c
- docs/function_notes/hk_12.md:60 returns true if word +384 is nonzero or word +72 has bit 0x4000000 for the current racer; flag test
sub_207A5C4
export/plan0/arm9_main/sub_207A5C4_0207A5C4.c
- game/src/race.rs:122 sub_203DF74 -> sub_207A5C4 checks kart+72 bit0x800 for every racer.
- docs/function_notes.md:460 per-racer checkpoint freeze predicate: reads kart+72 bit0x800 using the requested racer index, not just the player. sub_203DF74 returns before checkpoint lookup when true. Native race tracker now skips falling CPUs as well as the player
- docs/function_notes/hk_12.md:61 returns bit 0x800 of word +72 of racer record a1 (stride dword_207A5EC); flag test
sub_207A5F0
export/plan0/arm9_main/sub_207A5F0_0207A5F0.c
- docs/function_notes/hk_12.md:62 loops over racer list (count off_207A680) and calls sub_2013044 three times on the objects in the sub-struct at +1424 with arg; probably per-kart alpha or frame set
sub_207A68C
export/plan0/arm9_main/sub_207A68C_0207A68C.c
- docs/function_notes/hk_12.md:63 thin wrapper: calls function pointer off_207A6AC with racer record pointer (base off_207A6A4 + dword_207A6A8*a1)
sub_207A6B0
export/plan0/arm9_main/sub_207A6B0_0207A6B0.c
- vm_model/src/mission_step.rs:12 racer made at least
limitmini-turbos (the stats counter*(sub_207A6B0 + 4)that - docs/function_notes/hk_12.md:64 returns global off_207A6BC; getter
sub_207A6C0
export/plan0/arm9_main/sub_207A6C0_0207A6C0.c
- vm_model/src/kart/water.rs:18 wading counter (
sub_207A6C0), the tide's sounds and its surface wobble (+0x3C .. +0x5C). - docs/function_notes/hk_12.md:65 if racer +116 equals the current racer index and flag 0x40 is clear and bit 0x20000000 is clear, increments counter at off_207A708+12; probably lap or checkpoint counter
sub_207A70C
export/plan0/arm9_main/sub_207A70C_0207A70C.c
- docs/function_notes/hk_12.md:66 if a1 equals the current racer index, increments counter at off_207A738+8; probably a per-player event counter
sub_207A73C
export/plan0/arm9_main/sub_207A73C_0207A73C.c
- docs/function_notes/hk_12.md:67 stores arg into global off_207A748; setter
sub_207A74C
export/plan0/arm9_main/sub_207A74C_0207A74C.c
- docs/function_notes/hk_12.md:68 fixed-point multiply a1 * *off_207A778 with rounding; returns high word, stores low part >> 12 into global off_207A77C
sub_207A780
export/plan0/arm9_main/sub_207A780_0207A780.c
- docs/function_notes/hk_12.md:69 returns global off_207A78C; getter
sub_207A790
export/plan0/arm9_main/sub_207A790_0207A790.c
- docs/function_notes/hk_12.md:70 builds an 8-bit mask at off_207A7E8: bit i is set when sub_2040DE0(a1, i) is true
sub_207A7EC
export/plan0/arm9_main/sub_207A7EC_0207A7EC.c
- docs/function_notes/hk_12.md:71 returns global off_207A7F8; getter
sub_207A7FC
export/plan0/arm9_main/sub_207A7FC_0207A7FC.c
- docs/function_notes/hk_12.md:72 returns bit 0x1 of word +72 of racer record a1 (stride dword_207A824); flag test
sub_207A828
export/plan0/arm9_main/sub_207A828_0207A828.c
- docs/function_notes/hk_12.md:73 thin wrapper: calls function pointer off_207A848 with racer record pointer (base off_207A840, stride dword_207A844)
sub_207A84C
export/plan0/arm9_main/sub_207A84C_0207A84C.c
- docs/function_notes/hk_12.md:74 thin wrapper: calls function pointer off_207A86C with racer record pointer, returns BOOL
sub_207A870
export/plan0/arm9_main/sub_207A870_0207A870.c
- docs/function_notes/hk_12.md:75 returns global off_207A87C; getter
sub_207A880
export/plan0/arm9_main/sub_207A880_0207A880.c
- docs/function_notes/hk_12.md:76 returns halfword +566 of racer record a1 (stride dword_207A8A0)
sub_207A8A4
export/plan0/arm9_main/sub_207A8A4_0207A8A4.c
- docs/function_notes/hk_12.md:77 returns word +668 of racer record a1 (stride dword_207A8C0)
sub_207A8C4
export/plan0/arm9_main/sub_207A8C4_0207A8C4.c
- docs/function_notes/hk_12.md:78 copies the 3-word vector at +188..+196 of racer a2 into a1 and returns its first word
sub_207A8F0
export/plan0/arm9_main/sub_207A8F0_0207A8F0.c
- docs/function_notes/hk_12.md:79 copies the 3-word vector at +140..+148 of racer a2 into a1 and returns its first word
sub_207A91C
export/plan0/arm9_main/sub_207A91C_0207A91C.c
- docs/function_notes/hk_12.md:80 copies a 3-word vector via the pointer at +1332 of racer a2 into a1
sub_207A948
export/plan0/arm9_main/sub_207A948_0207A948.c
- docs/function_notes.md:1723 copies the racer position via kart+1288 pointer; in all14000 Rainbow steering calls this copied origin equals kart+128 world position, so no extra steering position offset was observed.
- docs/function_notes/hk_12.md:81 copies a 3-word vector via the pointer at +1288 of racer a2 into a1
sub_207A974
export/plan0/arm9_main/sub_207A974_0207A974.c
- vm_model/src/mapobj/boo.rs:22 kart (the kart the camera follows,
sub_207A974(*(global+98))) against the spawner: - vm_model/src/mapobj/boo.rs:136 What the Boos look at: the view kart (
sub_207A974(*(global+98)), +0x80/+0x88) and the - docs/function_notes.md:156 kart struct by slot (0x5A8 bytes each from *0x0217ACF8)
sub_207A990
export/plan0/arm9_main/sub_207A990_0207A990.c
- docs/function_notes/hk_12.md:82 loops over the racer list (count off_207A9E8) calling sub_20638C0 on each entry, then clears *off_207A9EC and returns it; probably teardown
sub_207A9F4
export/plan0/arm9_main/sub_207A9F4_0207A9F4.c
- docs/function_notes/hk_12.md:83 sets word +96 of the sub-struct at +1424 of the current racer to 1, then calls sub_2063CC4 on each racer from the index list returned by sub_2086058 (draws each kart)
sub_207AA7C
export/plan0/arm9_main/sub_207AA7C_0207AA7C.c
- docs/function_notes/hk_12.md:84 loops over the kart list (count off_207AAE0) calling vtable entry +532 of each kart; per-frame update dispatch
sub_207AAEC
export/plan0/arm9_main/sub_207AAEC_0207AAEC.c
- docs/function_notes/hk_12.md:85 kart tick driver: calls sub_1FFCAC0 per kart, then sub_207A32C, then vtable +536 and +540 over the kart list
sub_207ABEC
export/plan0/arm9_main/sub_207ABEC_0207ABEC.c
- docs/function_notes/hk_12.md:86 race-start kart init: allocs a kart array (a1 * stride dword_207AD54) and 28-byte sub-struct, sets fields, calls sub_2073630/sub_208C284/sub_20845CC, then sub_20649EC per kart
sub_207AD88
export/plan0/arm9_main/sub_207AD88_0207AD88.c
- docs/function_notes/hk_12.md:87 if flags halfword +112 bit 0 is set, calls sub_2084AD8, vtable off_207ADF4[+88], sub_2084A88 with +108/+110 bytes, then the vtable entry again; object update
sub_207ADF8
export/plan0/arm9_main/sub_207ADF8_0207ADF8.c
- docs/function_notes/hk_12.md:88 same pattern as sub_207AD88 but uses table off_207AE54 indexed by +88 and halfwords +108/+110
sub_207AE58
export/plan0/arm9_main/sub_207AE58_0207AE58.c
- docs/function_notes/hk_12.md:89 same pattern as sub_207AD88 with table off_207AEC4
sub_207AEC8
export/plan0/arm9_main/sub_207AEC8_0207AEC8.c
- docs/function_notes/hk_12.md:90 if flags +112 bit 0 is set, sends commands via sub_1FF9048 (ids 20, 25, 27; the last takes 3 words from a3) then calls sub_2084AD8, vtable off_207AFA4, sub_2084A88; probably a draw/emit step
sub_207AFA8
export/plan0/arm9_main/sub_207AFA8_0207AFA8.c
- docs/function_notes/hk_12.md:91 calls sub_2084E28, sets halfword +108 = a3, +110 = 13, flag |= 1 on +112, calls sub_2013540 and sub_2013588 on object +4; object init
sub_207B000
export/plan0/arm9_main/sub_207B000_0207B000.c
- docs/function_notes/hk_12.md:92 like sub_207AFA8 but calls sub_2084F10 and returns the result of sub_2013588; object init variant
sub_207B054
export/plan0/arm9_main/sub_207B054_0207B054.c
- docs/function_notes.md:95 starts one-shot driver clip, saves return clip at driver +60, disables its looping and marks +56 active
sub_207B0D0
export/plan0/arm9_main/sub_207B0D0_0207B0D0.c
- docs/function_notes/hk_12.md:93 if v1[25] is 0 (inactive), calls sub_2013164(...,0) and sub_207A14C on the two objects at v1[4]/v1[5]; probably hide/reset state
sub_207B13C
export/plan0/arm9_main/sub_207B13C_0207B13C.c
- docs/function_notes/hk_12.md:94 same as sub_207B0D0 with args 2 and 3; probably the alternate active state
sub_207B1A8
export/plan0/arm9_main/sub_207B1A8_0207B1A8.c
- docs/function_notes/hk_12.md:95 teardown of the object trio at v1[4..6]: sub_2013164, sub_2010584 (animation set), sub_2010AB4 if an animation is attached, sub_207A14C; clears v1[25]
sub_207B284
export/plan0/arm9_main/sub_207B284_0207B284.c
- docs/function_notes/hk_12.md:96 activation counterpart of sub_207B1A8: sub_2013164(...,2), sub_20104A4, sub_20109D8 if no animation attached, sets v1[25] = 1
sub_207B354
export/plan0/arm9_main/sub_207B354_0207B354.c
- vm_model/src/driver_presentation.rs:2 alternation between the win clip and driving (
sub_207B354). - vm_model/src/driver_presentation.rs:57
sub_207B354, one tick: the clip to switch to, if it is time. - game/src/driver_animation.rs:27 (
sub_207B354). - game/src/driver_animation.rs:84 (table 0x021551DC); a winner then alternates win and driving (
sub_207B354). Time - docs/function_notes.md:96 victory presentation alternates win/drive after random 150..349 ticks when enabled; kart +124 bit 0x40 forces drive (not yet ported)
- docs/function_notes.md:556 winner's alternation: the wait counts down; at 0 win -> drive (or drive while +0x7C bit 0x40) / drive -> win, new wait 150 + rand(200)
sub_207B44C
export/plan0/arm9_main/sub_207B44C_0207B44C.c
- vm_model/src/driver_presentation.rs:1 How drivers present themselves once they finish a race (
sub_207B44C) and a winner's - vm_model/src/driver_presentation.rs:27 The clip a racer who finished in
place(1-based) ofracerstakes (sub_207B44C, normal - vm_model/src/driver_presentation.rs:52 Started with the win clip (
sub_207B44C). - game/src/driver_animation.rs:3 (clip/expression), sub_206BF88 (damage), sub_207B44C (finish classification).
- game/src/driver_animation.rs:26 The clip taken at the finish (
sub_207B44C) and a winner's win/drive alternation - game/src/driver_animation.rs:83 the finish (
sub_207B44C): win / keep driving / lose by place and racer count - docs/function_notes.md:97 chooses finished driver presentation by mode/team/place; normal eight-racer table at 0x021551DC gives win for 1..3, unchanged for 4..6, lose for 7..8
- docs/function_notes.md:555 finish presentation: normal race: table 0x021551DC (row per racer count 2..8, per place 0 win / 1 keep driving / 2 lose; 8 racers: 1-3 win, 4-6 drive, 7-8 lose); time trial: win if a record (sub_20C7148 / sub_20C70EC) else lose; team/special win sets +0x7C 0x2000000; a plain win starts the win/drive alternation with wait 150 + rand(200) (race RNG at global + 0x498)
sub_207B6C0
export/plan0/arm9_main/sub_207B6C0_0207B6C0.c
- docs/function_notes.md:92 driver clip selector wrapper: crossfade via sub_2087E90 when requested, otherwise immediate selection via sub_2087F84
sub_207B708
export/plan0/arm9_main/sub_207B708_0207B708.c
- vm_model/src/nitro_driver.rs:1 Driver presentation from sub_207B734, sub_2068A64, sub_207B708, and sub_208823C.
- docs/function_notes.md:93 selects face-pattern frame from fx12 table 0x021551A4: normal=0, closed=4096
sub_207B734
export/plan0/arm9_main/sub_207B734_0207B734.c
- vm_model/src/nitro_driver.rs:1 Driver presentation from sub_207B734, sub_2068A64, sub_207B708, and sub_208823C.
- game/src/driver_animation.rs:2 Sources: sub_207954C (resources), sub_207B734 (steering), sub_2068A64
- docs/function_notes.md:77 driver steering pose update or active non-drive animation tick; drive frame is steering offset plus center, not an ordinary looping timer (C confirmed)
sub_207B8C4
export/plan0/arm9_main/sub_207B8C4_0207B8C4.c
- docs/function_notes/hk_12.md:97 zeroes word +36 and +56 and halfword +60 of a1, returns a1+36; sub-struct init
sub_207B8DC
export/plan0/arm9_main/sub_207B8DC_0207B8DC.c
- docs/function_notes.md:76 joint-clip playback flag lookup, 12-byte records at 0x021551B0: drive=0, spin/win/lose=1
sub_207B8F4
export/plan0/arm9_main/sub_207B8F4_0207B8F4.c
- docs/function_notes.md:75 character joint-animation filename builder (character and clip index; second argument recovered from ARM, omitted in C)
sub_207B960
export/plan0/arm9_main/sub_207B960_0207B960.c
- docs/function_notes/hk_12.md:98 four-point weighted blend of three 3-vectors using fixed-point weights from a2[12] (cubic-style curve), writes a 3-component result; probably path/spline interpolation
sub_207BC9C
export/plan0/arm9_main/sub_207BC9C_0207BC9C.c
- docs/function_notes/hk_12.md:99 advances a path parameter a2[12] by a4; past 4096 it shifts the three stored points and loads the next via sub_2042044, then calls sub_207B960; path follow
sub_207BD6C
export/plan0/arm9_main/sub_207BD6C_0207BD6C.c
- docs/function_notes/hk_12.md:100 initialises a 3-point path buffer a1 from sub_2042044 points (indices 2 and up to the last), sets counters a1[12..14]; path init
sub_207BE40
export/plan0/arm9_main/sub_207BE40_0207BE40.c
- docs/function_notes/hk_12.md:101 initialises a 4-point path buffer a1 from sub_2042044 for the racer's table row, sets a1[13]; path init variant
sub_207BECC
export/plan0/arm9_main/sub_207BECC_0207BECC.c
- docs/function_notes/NEEDS_REVIEW.md:387 probably randomised timer setup: pointer from off_207BFA8 + 12(table entry +88), value from sub_208537C scaled into a1+2 with base at +8
- docs/function_notes/hk_12.md:102 probably randomised timer setup: pointer from off_207BFA8 + 12(table entry +88), value from sub_208537C scaled into a1+2 with base at +8
sub_207BFAC
export/plan0/arm9_main/sub_207BFAC_0207BFAC.c
- docs/function_notes/hk_12.md:103 decrements the halfword at a1+2 and returns 1 when it reaches 0 (clamped); countdown tick
sub_207BFD4
export/plan0/arm9_main/sub_207BFD4_0207BFD4.c
- docs/function_notes/hk_12.md:104 randomised timer reload: a1+2 = base(+8) + scaled sub_208537C value; same as sub_207BECC with a different source
sub_207C078
export/plan0/arm9_main/sub_207C078_0207C078.c
- docs/function_notes/hk_12.md:105 decrements halfword at a1 and returns 1 when it reaches 0 (clamped); countdown tick
sub_207C0A0
export/plan0/arm9_main/sub_207C0A0_0207C0A0.c
- docs/function_notes/hk_12.md:106 reloads halfword at a1 from the base at +8 of *(a1+4) plus a scaled sub_208537C value; timer reload
sub_207C144
export/plan0/arm9_main/sub_207C144_0207C144.c
- vm_model/src/cpu.rs:50 * Items ([
CpuItems],sub_207C144/sub_207C2ECand the handlers in the per-class tables - vm_model/src/cpu.rs:245
sub_207C144: an item (slot index 0..16) arrived.
sub_207C270
export/plan0/arm9_main/sub_207C270_0207C270.c
- docs/function_notes/hk_12.md:107 returns sub_203C880(racer) when nonzero; else if the racer's kind at row+48 is not 14 calls sub_207C2EC, else returns word +36 of a2+8 when > 1, else sub_207C2EC; probably CPU item decision
sub_207C2EC
export/plan0/arm9_main/sub_207C2EC_0207C2EC.c
- vm_model/src/cpu.rs:50 * Items ([
CpuItems],sub_207C144/sub_207C2ECand the handlers in the per-class tables
sub_207C448
export/plan0/arm9_main/sub_207C448_0207C448.c
- docs/function_notes/hk_12.md:108 zeroes a 36-byte struct (halfwords at +0/+2/+28/+30 and dwords at +4..+32); init helper
sub_207C47C
export/plan0/arm9_main/sub_207C47C_0207C47C.c
- docs/function_notes/hk_12.md:109 calls sub_204360C(racer +120, 1536), sets +24 = 1, halfword +30 = 2, +16 = 0, reloads the timer at +2 from +8 like sub_207BECC; probably CPU item-use init
sub_207C548
export/plan0/arm9_main/sub_207C548_0207C548.c
- docs/function_notes/hk_12.md:110 like sub_207C47C with +20 = 1 and halfword +28 = 2; CPU init variant
sub_207C614
export/plan0/arm9_main/sub_207C614_0207C614.c
- docs/function_notes/hk_12.md:111 calls sub_204360C, clears +16, reloads the timer at +2; CPU init variant
sub_207C6D0
export/plan0/arm9_main/sub_207C6D0_0207C6D0.c
- docs/function_notes/hk_12.md:112 like sub_207C614 but reloads the halfword at a1 from *(a1+4); timer reload variant
sub_207C8D8
export/plan0/arm9_main/sub_207C8D8_0207C8D8.c
- docs/function_notes/hk_12.md:113 CPU item state machine: kind from row+48; if +16 is zero calls sub_207CD74 at once, else counts timer +2 down and calls sub_207CD74 on expiry (probably throw aimed by place)
sub_207C978
export/plan0/arm9_main/sub_207C978_0207C978.c
- docs/function_notes/hk_12.md:114 same as sub_207C8D8 but calls sub_207D194 (probably throw aimed at a target racer)
sub_207CA18
export/plan0/arm9_main/sub_207CA18_0207CA18.c
- docs/function_notes/hk_12.md:115 decrements timer at result+2; when it reaches 0 calls sub_207CD74; probably CPU item throw timer
sub_207CA60
export/plan0/arm9_main/sub_207CA60_0207CA60.c
- docs/function_notes/hk_12.md:116 decrements timer at result+2; when it reaches 0 calls sub_207D194; probably CPU item timer variant
sub_207CAA8
export/plan0/arm9_main/sub_207CAA8_0207CAA8.c
- docs/function_notes/hk_12.md:117 dispatches on racer kind at row+96: if 3 calls off_207CB04 else off_207CB08; thin dispatch
sub_207CB0C
export/plan0/arm9_main/sub_207CB0C_0207CB0C.c
- docs/function_notes/hk_12.md:118 dispatches on racer kind at row+96: if 4 calls off_207CB68 else off_207CB6C; thin dispatch
sub_207CB74
export/plan0/arm9_main/sub_207CB74_0207CB74.c
- vm_model/src/cpu.rs:171
sub_207CC74/sub_207CB74: only when within 20 degrees of the target.
sub_207CC74
export/plan0/arm9_main/sub_207CC74_0207CC74.c
- vm_model/src/cpu.rs:171
sub_207CC74/sub_207CB74: only when within 20 degrees of the target.
sub_207CD74
export/plan0/arm9_main/sub_207CD74_0207CD74.c
- vm_model/src/cpu.rs:164
sub_207D35C: throw, aimed by place (sub_207CD74).
sub_207D194
export/plan0/arm9_main/sub_207D194_0207D194.c
- vm_model/src/cpu.rs:166
sub_207D3A4: at a target racer if there is one (sub_207D194), else asThrow.
sub_207D35C
export/plan0/arm9_main/sub_207D35C_0207D35C.c
- vm_model/src/cpu.rs:164
sub_207D35C: throw, aimed by place (sub_207CD74).
sub_207D3A4
export/plan0/arm9_main/sub_207D3A4_0207D3A4.c
- vm_model/src/cpu.rs:166
sub_207D3A4: at a target racer if there is one (sub_207D194), else asThrow.
sub_207D3EC
export/plan0/arm9_main/sub_207D3EC_0207D3EC.c
- vm_model/src/cpu.rs:168
sub_207D3EC/sub_207D474: a rival whose pick-up roll is within the limit keeps it
sub_207D474
export/plan0/arm9_main/sub_207D474_0207D474.c
- vm_model/src/cpu.rs:168
sub_207D3EC/sub_207D474: a rival whose pick-up roll is within the limit keeps it
sub_207D4CC
export/plan0/arm9_main/sub_207D4CC_0207D4CC.c
- vm_model/src/cpu.rs:173
sub_207D4CC/sub_207D5B8: use at once.
sub_207D5B8
export/plan0/arm9_main/sub_207D5B8_0207D5B8.c
- vm_model/src/cpu.rs:173
sub_207D4CC/sub_207D5B8: use at once.
sub_207D6A4
export/plan0/arm9_main/sub_207D6A4_0207D6A4.c
- docs/function_notes/NEEDS_REVIEW.md:388 probably per-kart speed update: clamps kart speed (*kart+204) to 40960, ramps it down when a2[28] > 20480 (dword_207D7DC), then integrates it via sub_207FE70 unless flag dword_207D7E0 is set.
- docs/function_notes/hk_13.md:3 probably per-kart speed update: clamps kart speed (*kart+204) to 40960, ramps it down when a2[28] > 20480 (dword_207D7DC), then integrates it via sub_207FE70 unless flag dword_207D7E0 is set.
sub_207D7E4
export/plan0/arm9_main/sub_207D7E4_0207D7E4.c
- docs/function_notes/hk_13.md:4 trivial init of a 7-word state struct: copies *result into [1] and [4], zeros [2],[3],[4], sets [5]=-1, [6]=0.
sub_207D814
export/plan0/arm9_main/sub_207D814_0207D814.c
- docs/function_notes/hk_13.md:5 init of a 7-word state struct from track scale ((a2+716)+16); then by type field of off_207D8E0 stores into kart+680 (type 5) or scaled via sub_207FE70 into +680/+204/+208 (type 6); else tail-calls sub_207E088.
sub_207D8E4
export/plan0/arm9_main/sub_207D8E4_0207D8E4.c
- vm_model/src/cpu.rs:122 Start-boost levels (1..5) per class: rivals take the last (
sub_207D8E4).
sub_207D9F0
export/plan0/arm9_main/sub_207D9F0_0207D9F0.c
- vm_model/src/cpu.rs:40 * Pace (rubber-banding,
sub_207DE84/sub_207D9F0, see [CpuPace]): each CPU's speed - vm_model/src/cpu.rs:834 A CPU's speed target (driver +0xE8,
sub_207E200/sub_207DE84/sub_207D9F0). - vm_model/src/cpu.rs:888 whose rank and slot become 1 (
sub_207D9F0). - vm_model/src/cpu.rs:911
sub_207D9F0.
sub_207DE84
export/plan0/arm9_main/sub_207DE84_0207DE84.c
- vm_model/src/cpu.rs:40 * Pace (rubber-banding,
sub_207DE84/sub_207D9F0, see [CpuPace]): each CPU's speed - vm_model/src/cpu.rs:834 A CPU's speed target (driver +0xE8,
sub_207E200/sub_207DE84/sub_207D9F0). - vm_model/src/cpu.rs:886
sub_207DE84, on this kart's turn: a new speed target.peersholds every kart's pace - vm_model/src/kart/speed.rs:88 Blooper ink on a CPU kart (+0x4C bit 0x8000000): the target is scaled by 0.7 (
sub_207DE84). - vm_model/src/kart/speed.rs:99 (
sub_207DE84, betweensub_1FFBE70andsub_1FFBE04).
sub_207E088
export/plan0/arm9_main/sub_207E088_0207E088.c
- vm_model/src/cpu.rs:45 * Start (
sub_207E088, decided when the driver is set up; applied at "GO" bysub_206F914): - vm_model/src/cpu.rs:135
sub_207E088: the start for a CPU ofrank(1..7) in engine class 0..2.
sub_207E1D4
export/plan0/arm9_main/sub_207E1D4_0207E1D4.c
- vm_model/src/cpu.rs:463 sub_207E1D4 resets transient pacing, preserving base/rank/slot/rival.
- docs/function_notes.md:485 reset transient CPU pace fields +4/+16 to preserved base+0, +8/+12/+24=0, cpu-place+20=-1. Preserve rank/slot/rival and gap fields beyond the reset range. Native supplied-node respawn now performs this instead of preserving stale target/cap/bonus
- docs/function_notes/hk_13.md:6 trivial init of a 6-word state struct (copies *result into [1],[4]; zeros [2],[3]; [5]=-1; [6]=0).
sub_207E200
export/plan0/arm9_main/sub_207E200_0207E200.c
- vm_model/src/cpu.rs:613 Skill from the CPU's rank 1..7 (
sub_207FA74,sub_207E200): drift and mini-turbo - vm_model/src/cpu.rs:834 A CPU's speed target (driver +0xE8,
sub_207E200/sub_207DE84/sub_207D9F0). - vm_model/src/cpu.rs:872
sub_207E200.
sub_207E268
export/plan0/arm9_main/sub_207E268_0207E268.c
- vm_model/src/cpu.rs:111
*0x0217AE2C, set bysub_207E268).
sub_207E35C
export/plan0/arm9_main/sub_207E35C_0207E35C.c
- docs/function_notes/NEEDS_REVIEW.md:389 probably CPU driver per-frame steering step: picks target offset (kart+80 or +312 by a1[36]==2), calls sub_207A948 and sub_207F6F0, then if kart+384 is 0 calls sub_204360C, sub_21484D0 and sub_1FFD224; ends in sub_207EBFC.
- docs/function_notes/hk_13.md:7 probably CPU driver per-frame steering step: picks target offset (kart+80 or +312 by a1[36]==2), calls sub_207A948 and sub_207F6F0, then if kart+384 is 0 calls sub_204360C, sub_21484D0 and sub_1FFD224; ends in sub_207EBFC.
sub_207E400
export/plan0/arm9_main/sub_207E400_0207E400.c
- docs/function_notes/NEEDS_REVIEW.md:390 probably CPU driver init: stores kart ptr, copies u16 from +116, sets a1[136]=4096 and a1[156] from track scale times dword_207E4A0, calls sub_2080D34 and sub_207F9CC(a1,0), returns 1.
- docs/function_notes/hk_13.md:8 probably CPU driver init: stores kart ptr, copies u16 from +116, sets a1[136]=4096 and a1[156] from track scale times dword_207E4A0, calls sub_2080D34 and sub_207F9CC(a1,0), returns 1.
sub_207E4A4
export/plan0/arm9_main/sub_207E4A4_0207E4A4.c
- docs/function_notes/NEEDS_REVIEW.md:391 probably CPU driver per-frame step; calls sub_207E668 when state off_207E560 is 4, then same steering path as sub_207E35C (sub_207F6F0, sub_204360C, sub_1FFD224, sub_207EBFC).
- docs/function_notes/hk_13.md:9 probably CPU driver per-frame step; calls sub_207E668 when state off_207E560 is 4, then same steering path as sub_207E35C (sub_207F6F0, sub_204360C, sub_1FFD224, sub_207EBFC).
sub_207E564
export/plan0/arm9_main/sub_207E564_0207E564.c
- docs/function_notes/hk_13.md:10 thin wrapper: sub_2080CD0(a1+8), then sub_207F9CC(a1,1) (called twice, returns second result).
sub_207E594
export/plan0/arm9_main/sub_207E594_0207E594.c
- docs/function_notes/NEEDS_REVIEW.md:392 probably CPU driver init variant of sub_207E400: a1[140] is 0 or 4096 depending on off_207E644 type ==5, a1[156] scaled by dword_207E648; calls sub_2080D34, sub_207F9CC(a1,0).
- docs/function_notes/hk_13.md:11 probably CPU driver init variant of sub_207E400: a1[140] is 0 or 4096 depending on off_207E644 type ==5, a1[156] scaled by dword_207E648; calls sub_2080D34, sub_207F9CC(a1,0).
sub_207E64C
export/plan0/arm9_main/sub_207E64C_0207E64C.c
- docs/function_notes/hk_13.md:12 trivial getter returning int at a1+180.
sub_207E654
export/plan0/arm9_main/sub_207E654_0207E654.c
- docs/function_notes/hk_13.md:13 trivial predicate, returns (a1+176) != 0.
sub_207E668
export/plan0/arm9_main/sub_207E668_0207E668.c
- vm_model/src/cpu_recovery.rs:1 Wall-stall recovery timer from
sub_207E668. Callback effects are returned - game/src/racers.rs:259 Original sub_207E668 calls run in ascending racer ID (codex_cpu_order capture).
- docs/function_notes.md:382 CPU wall-stall recovery timer: kart flags+68 mask0xC0 and speed+676 below12288 refresh signed16 contact latch+172 to10; otherwise decrements latch. Active latch advances unsigned16 counter+120 to limit+122; no active latch resets state+168=0,counter0,limit20. Transitions0->1(limit120),1->2(limit180, previous-node target),2->3(limit180, area-selected recovery target),3->4(kart callback); mode2 skips state2. Timer fields replay-confirmed in7000 calls,6782 natural state0 calls plus218 labeled state0 probes (78 transitions0->1). Later callbacks/mode2 are source-derived, not runtime replay-covered; native wiring pending
- docs/function_notes.md:1672 CPU wall-stall/recovery timer entry is called in ascending racer ID1..7 in52 complete original Bowser frames (364 read-only hooks; CPU+0 kart, kart+116 ID). Native drive_cpus now sorts by Racer.index before consuming shared race RNG; player0 takeover order and full trajectory parity remain unverified.
- docs/function_notes/NEEDS_REVIEW.md:393 probably per-kart item/AI action timer state machine: decrements u16 at a1+172, resets to 10 when kart flags (+68 & 0xC0) set and speed (+676) < 12288; cycles state a1[42] 0..3 calling sub_2080AC0, sub_208C1F4, sub_2063A68.
- docs/function_notes/hk_13.md:14 probably per-kart item/AI action timer state machine: decrements u16 at a1+172, resets to 10 when kart flags (+68 & 0xC0) set and speed (+676) < 12288; cycles state a1[42] 0..3 calling sub_2080AC0, sub_208C1F4, sub_2063A68.
sub_207E7F0
export/plan0/arm9_main/sub_207E7F0_0207E7F0.c
- vm_model/src/cpu.rs:12 starts from where the kart stands across the route (
sub_207E7F0), is reset to where the - vm_model/src/cpu.rs:507 sub_207E7F0: aim across the route where the kart already is
sub_207E944
export/plan0/arm9_main/sub_207E944_0207E944.c
- vm_model/src/cpu.rs:11 ±0.15 at every node reached once the countdown is over, within ±0.7 (
sub_207E944). It - vm_model/src/cpu.rs:329 Largest random step of the lateral factor, and its limit (
sub_207E944). - vm_model/src/cpu.rs:535
sub_207E944: a random step for the lateral factor (two draws; the first is unused).
sub_207EAFC
export/plan0/arm9_main/sub_207EAFC_0207EAFC.c
- docs/function_notes/hk_13.md:15 computes a signed scalar between two vectors: sub_21484D0 difference, sub_214848C scale, sub_20397A8 cross, sub_21482CC length, sub_2039828 dot; sign from dot with a3; scaled by dword_207EBF8.
sub_207EBFC
export/plan0/arm9_main/sub_207EBFC_0207EBFC.c
- vm_model/src/cpu.rs:20 * Drifting (
sub_207F05Con reaching a node,sub_207EBFCper tick): a node's drift hint - vm_model/src/cpu.rs:335 Ticks into a drift at which the mini-turbo roll happens (
sub_207EBFC). - vm_model/src/cpu.rs:653
sub_207EBFC: the drift's buttons this tick.
sub_207F05C
export/plan0/arm9_main/sub_207F05C_0207F05C.c
- vm_model/src/cpu.rs:20 * Drifting (
sub_207F05Con reaching a node,sub_207EBFCper tick): a node's drift hint - vm_model/src/cpu.rs:625
sub_207F05C: on reaching a node, its drift hint may start or end a drift.
sub_207F2E4
export/plan0/arm9_main/sub_207F2E4_0207F2E4.c
- vm_model/src/cpu.rs:222 A human races right ahead / anyone right behind (150cc aiming,
sub_207F2E4).
sub_207F554
export/plan0/arm9_main/sub_207F554_0207F554.c
- docs/function_notes/NEEDS_REVIEW.md:394 probably predicate for whether kart a2 is a valid target for kart a1 (group/slot compare at struct+116, sub_2085824 distance check, flag dword_207F5FC on sub_207A974(a2)+124); returns 1 if valid.
- docs/function_notes/hk_13.md:16 probably predicate for whether kart a2 is a valid target for kart a1 (group/slot compare at struct+116, sub_2085824 distance check, flag dword_207F5FC on sub_207A974(a2)+124); returns 1 if valid.
sub_207F600
export/plan0/arm9_main/sub_207F600_0207F600.c
- docs/function_notes/hk_13.md:17 predicate: returns true when object sub_207A974(a1)+124 lacks flag dword_207F62C.
sub_207F630
export/plan0/arm9_main/sub_207F630_0207F630.c
- docs/function_notes/hk_13.md:18 initializer: copies position vector from (a2+24)+4 into a1[17..19], constant vector from off_207F664 into a1[24..26], zeros a1[29], returns 0.
sub_207F668
export/plan0/arm9_main/sub_207F668_0207F668.c
- vm_model/src/cpu.rs:9 * The target point is the node's position plus a sideways offset (
sub_207F668): the route's - vm_model/src/cpu.rs:597 sub_207F668 copies the node position, then returns immediately on a ramp.
- docs/function_notes.md:1676 CPU target update copies current route-node position; boost-ramp flag kart+72 bit 0x40000000 returns before lateral wander or offset addition, preserving offset and RNG. Rust CpuDriver::update_target now follows this guard.
sub_207F6F0
export/plan0/arm9_main/sub_207F6F0_0207F6F0.c
- vm_model/src/cpu.rs:16 kart per frame in turn (
sub_207F6F0). While it exceeds 2 degrees the yaw turns toward the - vm_model/src/cpu.rs:416
sub_207F6F0: absolute heading error in fx12 degrees. The SDK's quantized - vm_model/src/cpu.rs:553 sub_207F6F0: ramp flight must cross the node plane; XZ proximity alone
- vm_model/src/cpu.rs:715 sub_207F6F0's override branch applies hints at the old node and
- vm_model/src/cpu.rs:730 sub_207F8F8 calls sub_207F6F0 (heading/reach/target update) before
- docs/function_notes.md:376 CPU route-following update: on the racer round-robin turn projects target minus kart position onto kart-up plane using rounded SDK dot then truncated scale, takes truncated cross/dot against facing or body-forward, SDK quantized atan2 and rounded fx12 radians-to-degrees constant0x394BB834C8, stores absolute heading error at driver+112. Kart+68 bit0x2000 recenters target via sub_207E7F0 before calculation; separately advances reached route nodes and applies drift hints. Rust floating-point angle replaced with original integer pipeline; numeric replay fixtures cover Figure-8 and Rainbow Road
- docs/function_notes.md:380 heading-error integer pipeline replay-confirmed against3500 original calls (875 Figure-8,2625 Rainbow Road including inverted track with upY=-4093); floating atan2 differed on3499. Capture records target after reset recentering. Native seed1 sweep has five falls before/six after; angle parity does not establish spiral-fall resolution
- docs/function_notes.md:1677 CPU heading and route-node reach update; node crossing-plane test sub_2080BF4 always runs, XZ-radius fallback sub_2080C64 only runs when boost-ramp bit 0x40000000 is clear. Rust cursor now receives KartMotion.ramp.
sub_207F8F8
export/plan0/arm9_main/sub_207F8F8_0207F8F8.c
- vm_model/src/cpu.rs:730 sub_207F8F8 calls sub_207F6F0 (heading/reach/target update) before
- docs/function_notes.md:377 main CPU driving-state update: refreshes driver state, selects facing kart+80 when driver drift-state+144 equals2 or body-forward+312 otherwise, obtains tracked kart position, invokes sub_207F6F0, presses accelerator and yaw-steers through sub_1FFD224 when damage-state+384 is clear, then updates drift buttons and item-target selection
- docs/function_notes.md:1721 CPU driving pipeline runs recovery, chooses facing/body-forward from the pre-update drift state, calls sub_207F6F0 heading/reach/target update, then sub_1FFD224 direct steering using updated target minus copied position, then drift/item logic. Rust now advances target before steering on the same tick.
- docs/function_notes/NEEDS_REVIEW.md:395 probably CPU driver per-frame step: calls sub_207E668, picks target offset (+20 or +78), sub_207A948, sub_207F6F0, steering via sub_204360C/sub_21484D0/sub_1FFD224 when !v4[96]; then sub_207EBFC and sub_207F2E4.
- docs/function_notes/hk_13.md:19 probably CPU driver per-frame step: calls sub_207E668, picks target offset (+20 or +78), sub_207A948, sub_207F6F0, steering via sub_204360C/sub_21484D0/sub_1FFD224 when !v4[96]; then sub_207EBFC and sub_207F2E4.
sub_207F9A8
export/plan0/arm9_main/sub_207F9A8_0207F9A8.c
- vm_model/src/cpu.rs:441 Supplied-node respawn reset (
sub_208C0C8->sub_207F9A8). - docs/function_notes.md:483 supplied route reset: forwards original r1 through sub_2080CD0(a1+8,node), then sub_207F9CC(a1,1). ARM disassembly confirms r1 is not overwritten before CD0, resolving missing argument in exported C
- docs/function_notes/hk_13.md:20 thin wrapper: sub_2080CD0(a1+8) then sub_207F9CC(a1,1).
sub_207F9CC
export/plan0/arm9_main/sub_207F9CC_0207F9CC.c
- docs/function_notes/hk_13.md:21 resets a CPU driver/AI state struct: copies position pointer chain into +68..76, constant vector from off_207FA70 into +96..104, zeros many fields, sets +132=a2, tail-calls sub_207E7F0.
sub_207FA74
export/plan0/arm9_main/sub_207FA74_0207FA74.c
- vm_model/src/cpu.rs:35 * Skill (
sub_207FA74): each CPU has a rank (sub_2085AD8: the two rivals named by the race - vm_model/src/cpu.rs:613 Skill from the CPU's rank 1..7 (
sub_207FA74,sub_207E200): drift and mini-turbo
sub_207FBA0
export/plan0/arm9_main/sub_207FBA0_0207FBA0.c
- vm_model/src/cpu.rs:324 Yaw controller speed scale (
sub_207FBA0points*0x0217AE40at 0x021557C0 in races,
sub_207FD28
export/plan0/arm9_main/sub_207FD28_0207FD28.c
- docs/function_notes/NEEDS_REVIEW.md:396 probably CPU route/waypoint advance: picks next index from u16 +28 (scaled via dword_207FE64/68 on a repeat flag), indexes path table, maps via off_207FE6C to sub_2068A64, sets kart flag 0x40, updates normalized direction a1+2.
- docs/function_notes/hk_13.md:22 probably CPU route/waypoint advance: picks next index from u16 +28 (scaled via dword_207FE64/68 on a repeat flag), indexes path table, maps via off_207FE6C to sub_2068A64, sets kart flag 0x40, updates normalized direction a1+2.
sub_207FE70
export/plan0/arm9_main/sub_207FE70_0207FE70.c
- docs/function_notes/hk_13.md:23 helper returning (41 * u16 at ((a1+32)+2) << 12 + 2048) >> 12, a fixed-point scale of a track/kart unit.
sub_207FEC0
export/plan0/arm9_main/sub_207FEC0_0207FEC0.c
- docs/function_notes/NEEDS_REVIEW.md:397 probably CPU route advance without randomization: next index from u16 +28 when path length > 1, state via off_207FF58 table and sub_2068A64, updates normalized direction a1+2.
- docs/function_notes/hk_13.md:24 probably CPU route advance without randomization: next index from u16 +28 when path length > 1, state via off_207FF58 table and sub_2068A64, updates normalized direction a1+2.
sub_207FF5C
export/plan0/arm9_main/sub_207FF5C_0207FF5C.c
- docs/function_notes/hk_13.md:25 advances a two-pointer list (a1+4 = old, a1 = *a1) and recomputes normalized direction a1+8 from position pointers via sub_21484D0 and sub_2039860.
sub_207FFA4
export/plan0/arm9_main/sub_207FFA4_0207FFA4.c
- docs/function_notes/hk_13.md:26 init of a 7-word struct: constant vector from off_2080018 into a1+8..16, stores ptr a3, computes normalized direction a1+8, zeros a1+20/+24, sets u16 a1+28 = a2.
sub_208001C
export/plan0/arm9_main/sub_208001C_0208001C.c
- docs/function_notes/NEEDS_REVIEW.md:398 probably direction-vector update: shifts a1 into a1[1], sets a1=a2, copies constant vector from off_208009C into a1[2..4], computes difference vector and normalizes it when length^2 >= 16.
- docs/function_notes/hk_13.md:27 probably direction-vector update: shifts a1 into a1[1], sets a1=a2, copies constant vector from off_208009C into a1[2..4], computes difference vector and normalizes it when length^2 >= 16.
sub_20800A0
export/plan0/arm9_main/sub_20800A0_020800A0.c
- docs/function_notes/hk_13.md:28 returns scaled first u16 of the pointer at (*a1)+40 times dword_20800F0 >> 12; returns 0 if that u16 is zero.
sub_20800F4
export/plan0/arm9_main/sub_20800F4_020800F4.c
- docs/function_notes/hk_13.md:29 large (2 KB) probably CPU target selection: scans kart list (*a1, count u16 +44) with flag byte +46 bitmask, picks nearest/ahead/behind candidates via sub_2039828 dot and sub_214848C distance; writes target into a1[0], direction a1[2..4].
sub_20808D4
export/plan0/arm9_main/sub_20808D4_020808D4.c
- docs/function_notes/hk_13.md:30 init: a1[0]=a1[1]=a2, copies constant vector from off_2080904 into a1[2..4], zeros a1[5..6], returns 0.
sub_2080908
export/plan0/arm9_main/sub_2080908_02080908.c
- docs/function_notes/NEEDS_REVIEW.md:399 probably nearest-kart search: scans list at *off_2080AB8+132 (count +136), keeps 3 closest by sub_21482CC, picks the one with best dot (sub_2039828) against a3; writes result to a1[0..1], constant vector a1[2..4].
- docs/function_notes/hk_13.md:31 probably nearest-kart search: scans list at *off_2080AB8+132 (count +136), keeps 3 closest by sub_21482CC, picks the one with best dot (sub_2039828) against a3; writes result to a1[0..1], constant vector a1[2..4].
sub_2080AC0
export/plan0/arm9_main/sub_2080AC0_02080AC0.c
- docs/function_notes.md:383 if route-cursor override+20 is null, latches previous-node pointer+4 into override+20 and clears override-progress+24. CPU recovery state2 thereby targets its predecessor; does not reverse or swap the route graph
- docs/function_notes.md:438 previous-node override now wired into native CPU cursor. sub_207F6F0 applies old-node drift hints then switches to override node and refreshes target without angle/reached checks on that call; passing a node consumes the override. Cursor integration regression covers predecessor override and empty AREA replacement
- docs/function_notes/hk_13.md:32 small helper: if result[5]==0, sets result[5]=result[1] and result[6]=0 (latches a value once).
sub_2080ADC
export/plan0/arm9_main/sub_2080ADC_02080ADC.c
- docs/function_notes/hk_13.md:33 shifts a1[0] into a1[1], sets a1[0]=a2, computes normalized direction a1+2 from position pointers (+24) via sub_21484D0 and sub_2039860.
sub_2080B1C
export/plan0/arm9_main/sub_2080B1C_02080B1C.c
- vm_model/src/cpu.rs:8 next node is picked at random (
sub_2080B1C). - vm_model/src/cpu.rs:378 Driving a Bullet Bill: always the first branch at a fork, no random pick (
sub_2080B1C). - vm_model/src/cpu.rs:562
sub_2080B1C: on to the next node (random pick at a fork).
sub_2080BF4
export/plan0/arm9_main/sub_2080BF4_02080BF4.c
- vm_model/src/cpu.rs:7 along that direction, or inside its radius (
sub_2080BF4/sub_2080C64). At a fork the - vm_model/src/cpu.rs:546
sub_2080BF4/sub_2080C64: has the kart reached the node it is heading for?
sub_2080C64
export/plan0/arm9_main/sub_2080C64_02080C64.c
- vm_model/src/cpu.rs:7 along that direction, or inside its radius (
sub_2080BF4/sub_2080C64). At a fork the - vm_model/src/cpu.rs:546
sub_2080BF4/sub_2080C64: has the kart reached the node it is heading for?
sub_2080CC0
export/plan0/arm9_main/sub_2080CC0_02080CC0.c
- docs/function_notes/hk_13.md:34 trivial getter: returns the u16 at ((a1)+32), i.e. a numeric field of the object's data block.
sub_2080CD0
export/plan0/arm9_main/sub_2080CD0_02080CD0.c
- docs/function_notes.md:484 cursor initialization to supplied node, first predecessor at node+12, clears override/latch, normalizes target-position minus predecessor-position. Target is the supplied node itself, not its next node. Native respawn previously used nearest point then next; replaced with this branch
- docs/function_notes/hk_13.md:35 init of a 7-word direction state for kart a1: stores ptr, copies a1[1] from *(kart+12), zeros a1[5..6], copies constant vector from off_2080D30 into a1[2..4], sub_21484D0 diff of positions +24, normalizes via sub_2039860.
sub_2080D34
export/plan0/arm9_main/sub_2080D34_02080D34.c
- docs/function_notes/NEEDS_REVIEW.md:400 probably CPU/AI init of a 9-word struct: a1[0] from off_2080DB4 +164 object, a1[1] from its +12, constant vector off_2080DB8 into a1+8..16, normalized direction, zeros a1+20/+24, sets u16 a1+28 = a2 and byte a1+30 = 0.
- docs/function_notes/hk_13.md:36 probably CPU/AI init of a 9-word struct: a1[0] from off_2080DB4 +164 object, a1[1] from its +12, constant vector off_2080DB8 into a1+8..16, normalized direction, zeros a1+20/+24, sets u16 a1+28 = a2 and byte a1+30 = 0.
sub_2080DBC
export/plan0/arm9_main/sub_2080DBC_02080DBC.c
- docs/function_notes/hk_13.md:37 predicate: if a1[2..4] (stored vector) is nonzero, computes direction to (a1+32) via sub_21484D0 and returns 1 when dot sub_2039828 > 0 (target is ahead).
sub_2080E2C
export/plan0/arm9_main/sub_2080E2C_02080E2C.c
- docs/function_notes/hk_13.md:38 predicate: returns true when squared distance from (a1+32) point to a2 is less than ((a1+36))^2 (range check).
sub_2080E88
export/plan0/arm9_main/sub_2080E88_02080E88.c
- docs/function_notes/hk_13.md:39 setter: copies s16 at a2+196 into result+108.
sub_2080E9C
export/plan0/arm9_main/sub_2080E9C_02080E9C.c
- docs/function_notes/hk_13.md:40 destroys a particle emitter stored in slot table off_2080EE0 indexed by u16 kart+116 via sub_208B710, clears that slot, returns the old table value.
sub_2080EE4
export/plan0/arm9_main/sub_2080EE4_02080EE4.c
- docs/function_notes/hk_13.md:41 marks the particle/emitter in slot table off_2080F3C[kart+116]: clears byte +154, sets byte +153 = 5 and callback at +144 = off_2080F40, clears slot.
sub_2080FB8
export/plan0/arm9_main/sub_2080FB8_02080FB8.c
- docs/function_notes/hk_13.md:42 same as sub_2080E9C but for slot table off_2080FFC (destroy particle via sub_208B710, clear slot).
sub_2081000
export/plan0/arm9_main/sub_2081000_02081000.c
- docs/function_notes/hk_13.md:43 same as sub_2080EE4 but for slot table off_2081058 with type byte 3 and callback off_208105C.
sub_20810E4
export/plan0/arm9_main/sub_20810E4_020810E4.c
- docs/function_notes/hk_13.md:44 destroys the particle at offset 48 of the 88-byte effect record indexed by a1 (off_208111C), via sub_208B710, clears it.
sub_2081120
export/plan0/arm9_main/sub_2081120_02081120.c
- docs/function_notes/hk_13.md:45 per-frame update of an effect/emitter object (88-byte record, +154/+155 fields): sets position from kart data (*(sub_207A974(kart)+1288) >> 4), advances +154 step counter up to +153; when finished clears slot record +48, else copies u16 from kart+196 into +108.
sub_2081298
export/plan0/arm9_main/sub_2081298_02081298.c
- docs/function_notes/hk_13.md:46 advances the byte counter at +152 (caps at 7, then sets +153 = 1); calls sub_208335C first.
sub_20812D0
export/plan0/arm9_main/sub_20812D0_020812D0.c
- docs/function_notes/hk_13.md:47 spawns two particle emitters via sub_208B7BC from off_2081330/off_2081334 when kart flag 0x8000 (at +76) is set; each gets owner ptr at +148 and index byte at +155.
sub_2081338
export/plan0/arm9_main/sub_2081338_02081338.c
- docs/function_notes/hk_13.md:48 destroys the particle at offset 40 of the 88-byte record indexed by a1 (off_2081370), via sub_208B710, clears it.
sub_2081374
export/plan0/arm9_main/sub_2081374_02081374.c
- docs/function_notes/hk_13.md:49 on effect finish, if owner kart's flags (+72 bit 0x400, +68 bit 0x80, speed +676 threshold) allow, clears matching slot pointer at record +40 and sets done bit 1 on the emitter.
sub_20813EC
export/plan0/arm9_main/sub_20813EC_020813EC.c
- docs/function_notes/NEEDS_REVIEW.md:401 probably effect spawn/update: if kart flag 0x8000 set and no emitter in slot +40 and speed (+169) > 4096, spawns particle type 83 via sub_208B7BC; then updates its position/velocity from kart vectors and sets kart flag 0x400.
- docs/function_notes/hk_13.md:50 probably effect spawn/update: if kart flag 0x8000 set and no emitter in slot +40 and speed (+169) > 4096, spawns particle type 83 via sub_208B7BC; then updates its position/velocity from kart vectors and sets kart flag 0x400.
sub_208155C
export/plan0/arm9_main/sub_208155C_0208155C.c
- docs/function_notes/hk_13.md:51 sets bit 8 on the emitter at slot +44 of record indexed by result, by (a2 == 0).
sub_20815A0
export/plan0/arm9_main/sub_20815A0_020815A0.c
- docs/function_notes/hk_13.md:52 destroys the particle at offset 44 of the 88-byte record indexed by a1 (off_20815D8) via sub_208B710, clears the slot.
sub_20815DC
export/plan0/arm9_main/sub_20815DC_020815DC.c
- docs/function_notes/hk_13.md:53 marks the emitter at slot +44 of record result (off_2081614) as done (sets bit 1) and clears the slot pointer.
sub_2081618
export/plan0/arm9_main/sub_2081618_02081618.c
- docs/function_notes/hk_13.md:54 positions the emitter in slot +44 of record result (off_208171C): sets its world position from a2 plus kart base position, and velocity/scale vector from kart fields 236..238 scaled by dword_2081720.
sub_2081724
export/plan0/arm9_main/sub_2081724_02081724.c
- docs/function_notes/hk_13.md:55 spawns particle type 99 via sub_208B7BC into slot +44 of record a1 (off_2081760), destroying any existing one first.
sub_2081768
export/plan0/arm9_main/sub_2081768_02081768.c
- docs/function_notes/hk_13.md:56 destroys up to 3 particle pointers stored at off_20817B4 + 12*a1 via sub_208B710, clearing each.
sub_20817B8
export/plan0/arm9_main/sub_20817B8_020817B8.c
- docs/function_notes/hk_13.md:57 marks up to 3 particle pointers at off_2081818 + 12*a1 as done (bit 1 on +36) and clears the slots.
sub_208181C
export/plan0/arm9_main/sub_208181C_0208181C.c
- docs/function_notes.md:287 per-tick position/scale update of the 3 star sparkle particle objects around the kart
- docs/function_notes/hk_13.md:58 updates 3 effect emitters for kart a1 (table off_2081A20, 12-byte per kart): sets positions from kart vectors (+128, +300), velocity/size from kart fields 944..952 scaled by 3072, and a scale field at +92 from kart+196.
sub_2081A40
export/plan0/arm9_main/sub_2081A40_02081A40.c
- docs/function_notes/hk_13.md:59 spawns 3 particle emitters via sub_208B7BC (types from off_2081AB4, owner kart+472) into slot table off_2081AB0 + 12*a1, destroying any existing ones first.
sub_2081AB8
export/plan0/arm9_main/sub_2081AB8_02081AB8.c
- docs/function_notes/hk_13.md:60 per-frame effect step: calls sub_2081CA0 on the kart's record, advances step byte +154 up to +153; when done sets done bit 1 on +36.
sub_2081B30
export/plan0/arm9_main/sub_2081B30_02081B30.c
- docs/function_notes/hk_13.md:61 if a2==0, fetches kart via sub_207A974(byte +155) and calls sub_2081CA0 on the record with owner ptr +148; otherwise returns input unchanged.
sub_2081B64
export/plan0/arm9_main/sub_2081B64_02081B64.c
- docs/function_notes/hk_13.md:62 computes effect world position: kart vector (a2[322]) >> 4 plus scaled offsets (sub_2147FD8 with a2[48..49]) plus owner base; stores position at a1+40..48 and negated direction from sub_2063B10 at a1+80..84.
sub_2081CA0
export/plan0/arm9_main/sub_2081CA0_02081CA0.c
- docs/function_notes/hk_13.md:63 effect transform update: calls sub_2081B64 with dword_2081D6C/70 (flag a3 set) and sets a1[27] from kart+196 and bit 8 of a1[9] from kart flags; else uses dword_2081D64/68 and sets a1[23].
sub_2081D78
export/plan0/arm9_main/sub_2081D78_02081D78.c
- docs/function_notes/hk_13.md:64 per-frame emitter step: sets position a1+40..48 from owner kart base plus vector (+236..238) copied to a1+64..72; advances state byte +154 up to +153 and sets done bit on finish.
sub_2081E3C
export/plan0/arm9_main/sub_2081E3C_02081E3C.c
- docs/function_notes/hk_13.md:65 init of an effect record: clears +154, sets +153 = a3 (duration), +155 = a2 (owner kart index), callback at +144 = off_2081E58.
sub_2081E5C
export/plan0/arm9_main/sub_2081E5C_02081E5C.c
- docs/function_notes.md:334 kart attached transient emitter pre-tick callback: attaches kart+1288 XYZ shifted right4 plus resource offset; byte+154 advances to byte+153 limit, then sets emitter stop bit0. Controlled trace confirms callback can stop emission before the manager's birth test; callback arithmetic not yet replay-ported
- docs/function_notes/hk_13.md:66 per-frame effect step: sets position from owner's +1288 vector plus kart base; advances state byte +154 up to +153, sets done bit on finish.
sub_2081F10
export/plan0/arm9_main/sub_2081F10_02081F10.c
- vm_model/src/shine.rs:82 Effect 124 at the owner (
sub_208B7BC+sub_2081F10(.., 22)) when a carried shine vanishes. - docs/function_notes/hk_13.md:67 same init as sub_2081E3C but with callback off_2081F2C.
sub_2081F30
export/plan0/arm9_main/sub_2081F30_02081F30.c
- docs/function_notes/hk_13.md:68 effect switcher keyed by **off_2082018[0] id: id 16 sets callback of off_208201C record and destroys emitter at off_2082028; id 37 respawns emitters via sub_208B7BC (types 60 and 63).
sub_2082034
export/plan0/arm9_main/sub_2082034_02082034.c
- docs/function_notes/hk_13.md:69 per-frame position update for an effect: base from sub_2061808 (+348..356 velocity, normalized), optional offset via sub_203C5E4/sub_2148714 when set, sets a1 position +40..48 and scale +88 = 2048.
sub_20821CC
export/plan0/arm9_main/sub_20821CC_020821CC.c
- docs/function_notes/hk_13.md:70 per-frame effect position update from sub_20748A8 velocity (+87..89) and owner kart speed (+676, clamped 4096); flag 0x100 on kart adds offset -22528; sets position and scale +88.
sub_2082368
export/plan0/arm9_main/sub_2082368_02082368.c
- docs/function_notes/hk_13.md:71 per-frame effect update: position from sub_20748A8 velocity (+348/+356, normalized) offset by 22528 along it; scale +88 from kart speed (+676) clamped to 4096.
sub_20824D0
export/plan0/arm9_main/sub_20824D0_020824D0.c
- docs/function_notes/hk_13.md:72 per-frame effect update: normalized velocity from sub_2061808, rotation via sub_21483A0 written to a1+80..84 and +104 = 4096, position from sub_2147FD8 with owner offset.
sub_208266C
export/plan0/arm9_main/sub_208266C_0208266C.c
- docs/function_notes/hk_13.md:73 per-frame effect position update: normalized velocity from sub_2061808 (+348/+356) scaled by off_208274C, fixed Y offset 128000, sets position a1+40..48.
sub_2082750
export/plan0/arm9_main/sub_2082750_02082750.c
- docs/function_notes/hk_13.md:74 per-frame effect update oriented by kart speed (+676, clamped 4096, negated if flag 0x100): rotation via sub_21483A0/sub_2146F98/sub_2146D78 from a table off_2082A04 indexed by speed; sets position and orientation.
sub_2082A10
export/plan0/arm9_main/sub_2082A10_02082A10.c
- docs/function_notes/hk_13.md:75 per-frame effect position update like sub_2082368: velocity from sub_20748A8 (+348/+356, normalized) offset 22528 along it, fixed Y 128000, sets a1 position +40..48 from owner base.
sub_2082AEC
export/plan0/arm9_main/sub_2082AEC_02082AEC.c
- docs/function_notes/hk_13.md:76 spawns a set of kart effect emitters (types 36/37/39/41/60/61/62/63 via sub_208B7BC) into slot globals off_2082D3C/off_2082D40, chosen by kart mode (*off_2082D28 type 16 or 37) and a speed table.
sub_2082D64
export/plan0/arm9_main/sub_2082D64_02082D64.c
- docs/function_notes/hk_13.md:77 per-frame effect update: picks kart index from state bytes +152/+154, sets position from kart vector (+118..120 >> 4) plus owner base, visibility bit 8 from kart flags (dword_2082E48), lifetime counter +148 finishes at 50 (sets done bit 1).
sub_2082E4C
export/plan0/arm9_main/sub_2082E4C_02082E4C.c
- docs/function_notes/hk_13.md:78 builds a 4x2 spawn table from off_2082F7C (per-kart row) and spawns up to 8 effect records via sub_208B60C, initializing callbacks, +152..155 state and lifetime +148; trailing entries marked -1.
sub_2082F94
export/plan0/arm9_main/sub_2082F94_02082F94.c
- docs/function_notes/hk_13.md:79 effect step: calls sub_2082D64, increments frame byte +155; at 2 frames toggles +154 and resets the counter.
sub_2082FEC
export/plan0/arm9_main/sub_2082FEC_02082FEC.c
- docs/function_notes/hk_13.md:80 per-frame kart effect update (88-byte per-kart slot from off_20831B0): visibility bit 2 from input check sub_20675B4 or speed +676 < dword_20831B8 and height +1280; frame counter +154 sets done at 10; position from table row plus kart +1280 >> 4; vectors +64..72 scaled by off_20831B4.
sub_20831BC
export/plan0/arm9_main/sub_20831BC_020831BC.c
- docs/function_notes.md:333 kart wheel emitter pre-tick callback: birth pause from sub_20675B4 and kart+676 threshold; optional byte timer stops at10; attaches direction/position from 88-byte wheel record and sets initial particle velocity from kart+944 vector times emitter-specific table factor. Captured callback changes scheduling flags before SPL birth tests; this callback itself is not yet ported
- docs/function_notes/hk_13.md:81 per-frame kart effect update like sub_2082FEC using table off_2083350 and speed threshold dword_2083358 (with sub_20675B4 input check); vectors scaled by off_2083354.
sub_208335C
export/plan0/arm9_main/sub_208335C_0208335C.c
- docs/function_notes/hk_13.md:82 per-frame kart effect update using table off_208347C, speed threshold dword_2083480 (sub_20675B4 check); sets position +40..48 and visibility bit 2.
sub_2083484
export/plan0/arm9_main/sub_2083484_02083484.c
- docs/function_notes/hk_13.md:83 per-frame effect update that rotates a fixed vector (-20480 scale of kart +312..320) by the kart matrix (sub_2148504 with v3[322]); scales velocity vectors by off_2083678 table; speed threshold dword_208367C.
sub_2083680
export/plan0/arm9_main/sub_2083680_02083680.c
- docs/function_notes.md:335 kart emitter pre-tick callback: stops on sub_2061818 or paused age>5; otherwise pauses when kart+72 lacks bit0x20, attaches to camera-facing offset and negates direction shorts. Retained by resource-selection experiment; full callback not ported
- docs/function_notes/hk_13.md:84 per-frame effect update: reads sub_20748A8 velocity (+39..41), if sub_2061818 or repeat counter (+38 > 5) ends, sets done bit 1 and clears off_2083830; else sets bit 2, scales vector by 20480 via sub_2148504 and writes position +40..48 and rotation +80..84.
sub_2083834
export/plan0/arm9_main/sub_2083834_02083834.c
- docs/function_notes/hk_13.md:85 full cleanup of a kart's effect slots (88-byte record off_20838D8 by kart+116): destroys emitter at +12 via sub_208B710, calls sub_2083928(a1,1), then destroys emitters at +32 and +36.
sub_20838DC
export/plan0/arm9_main/sub_20838DC_020838DC.c
- vm_model/src/kart/water.rs:17 Not ported: the splash and wading effects (
sub_208D978,sub_2083EC4,sub_20838DC), the - docs/function_notes/hk_13.md:86 marks the emitters at +32 and +36 of kart's slot record (off_2083924) as done (byte +153 = 1) and clears those slots; returns 0 or 88.
sub_2083928
export/plan0/arm9_main/sub_2083928_02083928.c
- docs/function_notes/hk_13.md:87 for each of 2 emitter pairs in kart slot record off_20839D4: if a2 destroys them via sub_208B710, else marks them done (+153 = 1); then clears the pair.
sub_20839D8
export/plan0/arm9_main/sub_20839D8_020839D8.c
- docs/function_notes/hk_13.md:88 destroys the emitter at slot +12 of record off_2083A1C for kart a1 (marks done, clears), then tail-calls function pointer off_2083A20(a1,0).
sub_2083A24
export/plan0/arm9_main/sub_2083A24_02083A24.c
- docs/function_notes/hk_13.md:89 spawns 2 emitters (types from a1+4, parameters off_2083AD8, callback off_2083ADC) for kart a3 into slots +32/+36 of record off_2083AD4; returns 0 if already occupied, else 1.
sub_2083AE0
export/plan0/arm9_main/sub_2083AE0_02083AE0.c
- docs/function_notes/NEEDS_REVIEW.md:402 probably spawns/updates emitter pairs for up to *a1 entries of a table: replaces slots whose type changed (marks old done, spawns new via sub_208B7BC with off_2083C14); tail-calls function pointer (stack-corrupted decompile).
- docs/function_notes/hk_13.md:90 probably spawns/updates emitter pairs for up to *a1 entries of a table: replaces slots whose type changed (marks old done, spawns new via sub_208B7BC with off_2083C14); tail-calls function pointer (stack-corrupted decompile).
sub_2083C18
export/plan0/arm9_main/sub_2083C18_02083C18.c
- docs/function_notes/hk_13.md:91 same as sub_2083AE0 but using tables off_2083D40/off_2083D44 and callback off_2083D48 (probably a second effect family).
sub_2083D4C
export/plan0/arm9_main/sub_2083D4C_02083D4C.c
- docs/function_notes/hk_13.md:92 spawns one emitter (type from a1+4, callback off_2083DE4) into slot +12 of record off_2083DDC for kart a3, marking the previous one done; returns 1 if type changed.
sub_2083DE8
export/plan0/arm9_main/sub_2083DE8_02083DE8.c
- docs/function_notes/NEEDS_REVIEW.md:403 probably effect dispatch: looks up a per-kart table entry at off_2083EB8 by a1, calls its function pointer (v3[6]) and, when true, writes +114 of the emitters in kart slot record off_2083EBC from off_2083EC0.
- docs/function_notes/hk_13.md:93 probably effect dispatch: looks up a per-kart table entry at off_2083EB8 by a1, calls its function pointer (v3[6]) and, when true, writes +114 of the emitters in kart slot record off_2083EBC from off_2083EC0.
sub_2083EC4
export/plan0/arm9_main/sub_2083EC4_02083EC4.c
- vm_model/src/kart/water.rs:17 Not ported: the splash and wading effects (
sub_208D978,sub_2083EC4,sub_20838DC), the - docs/function_notes/hk_13.md:94 effect dispatch: if kart flag 0x8000 (+76) set, calls sub_2083A24 with table off_2083F64 indexed by kart type; else destroys emitters at +32/+36 of record off_2083F68.
sub_2083F6C
export/plan0/arm9_main/sub_2083F6C_02083F6C.c
- docs/function_notes/hk_13.md:95 effect dispatch variant: if flag 0x8000 set calls function table off_208402Ca1; else clears emitter +12 (marks done), calls sub_2083928(a2,0), destroys emitters at +32/+36 of record off_2084030.
sub_2084034
export/plan0/arm9_main/sub_2084034_02084034.c
- docs/function_notes/hk_13.md:96 spawns an effect of type (*off_20840B4)[a1] via sub_208B7BC for owner a2, stores its ptr in global off_20840B0 after marking the previous one done; returns the new record or 0 when sub_2061818 is set.
sub_20840C0
export/plan0/arm9_main/sub_20840C0_020840C0.c
- docs/function_notes/hk_13.md:97 effect dispatch: calls table entry off_2084110[slot] (+24 function, +28 arg) with kart a1, then sub_2083928(a1,0) to mark emitter pairs done.
sub_2084114
export/plan0/arm9_main/sub_2084114_02084114.c
- docs/function_notes/hk_13.md:98 destroys the emitter at slot +12 of record off_2084190 for kart a1 (marks done, clears), then dispatches via function table off_2084198 [kart slot].
sub_208419C
export/plan0/arm9_main/sub_208419C_0208419C.c
- docs/function_notes/hk_13.md:99 same pattern as sub_2084114 with tables off_2084218/off_2084220 and index off_208421C.
sub_2084224
export/plan0/arm9_main/sub_2084224_02084224.c
- docs/function_notes/hk_13.md:100 same pattern as sub_2084114 with tables off_20842A0/off_20842A8 and index off_20842A4.
sub_20842AC
export/plan0/arm9_main/sub_20842AC_020842AC.c
- docs/function_notes/hk_13.md:101 same pattern as sub_2084114 with tables off_2084328/off_2084330 and index off_208432C.
sub_2084334
export/plan0/arm9_main/sub_2084334_02084334.c
- docs/function_notes/hk_13.md:102 destroys the emitter at slot +12 of record off_208437C for kart a1 (marks done, clears), then calls off_2084380(2, a1).
sub_2084384
export/plan0/arm9_main/sub_2084384_02084384.c
- docs/function_notes/hk_13.md:103 effect dispatch via off_20843D4 table (entry chosen by off_20843D0 index, function at [6]) with kart a1, then sub_2083928(a1,0).
sub_20843D8
export/plan0/arm9_main/sub_20843D8_020843D8.c
- docs/function_notes/hk_13.md:104 effect dispatch via off_2084428 table (index off_2084424), then sub_2083928(a1,0); same shape as sub_2084384.
sub_2084478
export/plan0/arm9_main/sub_2084478_02084478.c
- vm_model/src/nitro_particle_wheel.rs:33 sub_2084478: ground-level rear contacts in SPL units and spray directions.
- docs/function_notes.md:356 rear-wheel particle contact/direction update: ignores wheel Y, offsets X outward by +6144/-6144, scales X/Z, transforms by kart second matrix then position >>4; spray vectors (+/-1843,3277,-1843). Both contacts/directions match all 645 natural original calls
- docs/function_notes/hk_13.md:105 per-frame kart effect vector update: copies kart+1288 vector to a1+372, computes two emitter positions from the model at (*(a1+1424)+32) with constant table off_20845C4, rotates via sub_2147288 and sub_2146D78 (matrix a1+336), writes results into record off_20845C0.
sub_20845CC
export/plan0/arm9_main/sub_20845CC_020845CC.c
- docs/function_notes/hk_13.md:106 allocates the effect pool for a1 entries (88 bytes each) from the heap via sub_2036BEC (heap from sub_20364E8/sub_20364E0), clears each record's emitter slots, stores count in *off_20846A0, returns off_20846A4 (cleared).
sub_20846A8
export/plan0/arm9_main/sub_20846A8_020846A8.c
- docs/function_notes/hk_13.md:107 returns pointer to effect record a1 in the 88-byte record table at off_20846BC.
sub_20846C0
export/plan0/arm9_main/sub_20846C0_020846C0.c
- docs/function_notes/hk_13.md:108 allocates per-kart effect arrays (2, 12, 4 bytes per entry, count = byte +976 of the track/game data) from the heap via sub_2036BEC, zeroes them, sets a few parameter globals (dword_20848D4/E0/E4/DC/F4/F8) from the mode field at +16.
sub_20848FC
export/plan0/arm9_main/sub_20848FC_020848FC.c
- docs/function_notes/hk_13.md:109 walks a linked list at off_2084954 via sub_201733C and frees each node's buffer with sub_2012B30.
sub_2084958
export/plan0/arm9_main/sub_2084958_02084958.c
- docs/function_notes/hk_13.md:110 thin wrapper: indirect call off_2084964 on object *(a1+4) with a2.
sub_2084968
export/plan0/arm9_main/sub_2084968_02084968.c
- docs/function_notes/hk_13.md:111 sets three parameters on object *(a1+4) via sub_20130D4, sub_20131AC and sub_20131F4 (probably object/sprite property setup).
sub_20849A0
export/plan0/arm9_main/sub_20849A0_020849A0.c
- docs/function_notes/hk_13.md:112 thin indirect wrapper: calls off_20849AC on object *(a1+4) with a2.
sub_20849B0
export/plan0/arm9_main/sub_20849B0_020849B0.c
- docs/function_notes/hk_13.md:113 thin indirect wrapper: calls off_20849BC on object *(a1+4) with a2.
sub_20849C0
export/plan0/arm9_main/sub_20849C0_020849C0.c
- docs/function_notes/hk_13.md:114 thin indirect wrapper: calls off_20849CC on object *(a1+4) with a2.
sub_20849D0
export/plan0/arm9_main/sub_20849D0_020849D0.c
- docs/function_notes/hk_13.md:115 indirect dispatch: calls off_20849F4[*(a1+88)] with no arguments (state/mode switch).
sub_20849F8
export/plan0/arm9_main/sub_20849F8_020849F8.c
- docs/function_notes/hk_13.md:116 sets up a geometry/draw command block via sub_1FF9048 (ids 20, 25 with 12 words, optional 3-vector id 27), then dispatches off_2084A84a1[22] by mode.
sub_2084A88
export/plan0/arm9_main/sub_2084A88_02084A88.c
- docs/function_notes/hk_13.md:117 sets draw parameters on object a1+4 via sub_20134B0 (arg a3), sub_20134F8 (mode 1 or 2 from a1+84) and sub_2013468 (arg a2).
sub_2084AD8
export/plan0/arm9_main/sub_2084AD8_02084AD8.c
- docs/function_notes/hk_13.md:118 same as sub_2084A88 with a zero first argument and mode 1 or 2 chosen by a1+84.
sub_2084B2C
export/plan0/arm9_main/sub_2084B2C_02084B2C.c
- docs/function_notes/NEEDS_REVIEW.md:404 probably loads a menu/select-screen object: looks up objects via sub_2013730 and sub_20136F0, clears their flags, calls sub_20850C4 and sub_2010168 for a matching type (dword_2084C50), then sub_2084FB0 and sub_214D1FC to copy data through sub_2036BEC.
- docs/function_notes/hk_13.md:119 probably loads a menu/select-screen object: looks up objects via sub_2013730 and sub_20136F0, clears their flags, calls sub_20850C4 and sub_2010168 for a matching type (dword_2084C50), then sub_2084FB0 and sub_214D1FC to copy data through sub_2036BEC.
sub_2084C54
export/plan0/arm9_main/sub_2084C54_02084C54.c
- docs/function_notes/NEEDS_REVIEW.md:405 probably kart select-screen object setup (variant flag 0): gets objects via sub_2013730/sub_20136F0, clears their flag bits, calls sub_20850C4, then
- docs/function_notes/hk_14.md:3 probably kart select-screen object setup (variant flag 0): gets objects via sub_2013730/sub_20136F0, clears their flag bits, calls sub_20850C4, then
sub_2084D3C
export/plan0/arm9_main/sub_2084D3C_02084D3C.c
- docs/function_notes/hk_14.md:4 same setup as sub_2084C54 with a separate second object (a3) and off_2084E20 template; calls sub_2084FB0 with flag 1.
sub_2084E28
export/plan0/arm9_main/sub_2084E28_02084E28.c
- docs/function_notes/hk_14.md:5 same setup pattern as sub_2084C54 using off_2084F08 template; calls sub_2084FB0 with flag 1.
sub_2084F10
export/plan0/arm9_main/sub_2084F10_02084F10.c
- docs/function_notes/hk_14.md:6 thunk; returns off_2084F1C(a1, a2, 1).
sub_2084F20
export/plan0/arm9_main/sub_2084F20_02084F20.c
- docs/function_notes/hk_14.md:7 loops over entries of the object at a1+4 (count byte +24), calling sub_20134F8(obj, i, 2) on each; returns the count.
sub_2084F68
export/plan0/arm9_main/sub_2084F68_02084F68.c
- docs/function_notes/hk_14.md:8 same loop as sub_2084F20 but calls sub_20134F8 with mode 1.
sub_2084FB0
export/plan0/arm9_main/sub_2084FB0_02084FB0.c
- docs/function_notes/hk_14.md:9 sets a1[21] (from sub_205E0A0()==2 and byte +87 of off_20850C0 when a3 is set), sets a1[22] if both bytes +24/+25 are 1, calls sub_2010C84, then per-entry
sub_20850C4
export/plan0/arm9_main/sub_20850C4_020850C4.c
- docs/function_notes/hk_14.md:10 if flags in a1[8]/a1[16]/a1[25] (bit 0) are clear, creates three sub-objects via sub_20109B8/sub_20109AC/sub_2010878 and off_208525C callbacks; on any failure
sub_208526C
export/plan0/arm9_main/sub_208526C_0208526C.c
- docs/function_notes/hk_14.md:11 init variant with a1 as the struct base (fields +8/+12); calls sub_20174A4 with off_2085334, then sub_20850C4 and sub_2010168 when the object type matches
sub_208533C
export/plan0/arm9_main/sub_208533C_0208533C.c
- docs/function_notes/hk_14.md:12 thunk; returns off_208534C(off_2085350, 0).
sub_2085354
export/plan0/arm9_main/sub_2085354_02085354.c
- docs/function_notes/hk_14.md:13 thunk; tail-calls off_208535C(a1).
sub_2085360
export/plan0/arm9_main/sub_2085360_02085360.c
- docs/function_notes/NEEDS_REVIEW.md:406 probably wrapper; returns off_2085378(*(a1+4), 0, 0, 1).
- docs/function_notes/hk_14.md:14 probably wrapper; returns off_2085378(*(a1+4), 0, 0, 1).
sub_208537C
export/plan0/arm9_main/sub_208537C_0208537C.c
- docs/function_notes/hk_14.md:15 getter; returns the word at +296 (0x128) of the struct pointed to by off_208538C.
sub_2085390
export/plan0/arm9_main/sub_2085390_02085390.c
- docs/function_notes/hk_14.md:16 getter; returns the word at +288 (0x120) of the struct pointed to by off_20853A0.
sub_20853A4
export/plan0/arm9_main/sub_20853A4_020853A4.c
- docs/function_notes/NEEDS_REVIEW.md:407 probably fixed-point scale of a per-racer value: (sub_203C5C8(a1) * field(+264 of off_20853D8) + 2048) >> 12, using 64-bit multiply.
- docs/function_notes/hk_14.md:17 probably fixed-point scale of a per-racer value: (sub_203C5C8(a1) * field(+264 of off_20853D8) + 2048) >> 12, using 64-bit multiply.
sub_20853DC
export/plan0/arm9_main/sub_20853DC_020853DC.c
- docs/function_notes/hk_14.md:18 getter; returns the word at +312 (0x138) of the struct pointed to by off_20853EC.
sub_20853F0
export/plan0/arm9_main/sub_20853F0_020853F0.c
- docs/function_notes/hk_14.md:19 indexed getter; returns the word at +144 + 4*a1 of the struct at off_2085404.
sub_2085408
export/plan0/arm9_main/sub_2085408_02085408.c
- docs/function_notes/hk_14.md:20 indexed getter; returns the word at +32 + 4*(a1-1) of the struct at off_2085420.
sub_2085424
export/plan0/arm9_main/sub_2085424_02085424.c
- docs/function_notes/hk_14.md:21 getter; returns *off_2085430 (a global word).
sub_2085434
export/plan0/arm9_main/sub_2085434_02085434.c
- docs/function_notes/hk_14.md:22 getter; returns entry (field +292 of off_2085454 minus 1) from the table at +96.
sub_2085458
export/plan0/arm9_main/sub_2085458_02085458.c
- docs/function_notes/hk_14.md:23 indexed getter; returns table entry (a1-2) at +64 of the struct at off_2085474, or -1 when a1 < 2.
sub_2085478
export/plan0/arm9_main/sub_2085478_02085478.c
- docs/function_notes/hk_14.md:24 getter; returns the word at +64 of the struct at off_2085488.
sub_208548C
export/plan0/arm9_main/sub_208548C_0208548C.c
- docs/function_notes/hk_14.md:25 getter; returns the word at +140 (0x8C) of the struct at off_208549C.
sub_20854A0
export/plan0/arm9_main/sub_20854A0_020854A0.c
- docs/function_notes/hk_14.md:26 indexed getter; returns table entry (a1+a2-1) at +64 of the struct at off_20854BC.
sub_20854C0
export/plan0/arm9_main/sub_20854C0_020854C0.c
- docs/function_notes/hk_14.md:27 linear search of the +64 table (count byte +976 of the struct at off_2085524[0]) for a1; returns the 1-based index or -1.
sub_208552C
export/plan0/arm9_main/sub_208552C_0208552C.c
- vm_model/src/cpu.rs:785 (
sub_208552C). - vm_model/src/cpu.rs:791 Where every kart stands (the CPU manager,
sub_208552C), refreshed every frame. - game/src/racers.rs:245 the CPU manager's view of the race (
sub_208552C) and every CPU's pace, as of last tick
sub_2085778
export/plan0/arm9_main/sub_2085778_02085778.c
- docs/function_notes/hk_14.md:28 if off_2085818 is set, calls sub_208552C and loops over racers (count +976), using sub_203C8DC(i) to record best and minimal indices into off_2085820 fields
sub_2085824
export/plan0/arm9_main/sub_2085824_02085824.c
- docs/function_notes/NEEDS_REVIEW.md:408 probably sums per-slot counters (off_20858A8 +316 and +318+2i), skipping slot i equal to the record's +116 value; returns the +316 value when the flag byte at
- docs/function_notes/hk_14.md:29 probably sums per-slot counters (off_20858A8 +316 and +318+2i), skipping slot i equal to the record's +116 value; returns the +316 value when the flag byte at
sub_20858AC
export/plan0/arm9_main/sub_20858AC_020858AC.c
- docs/function_notes/hk_14.md:30 if racer record state (+112 of 48-byte record) is in mask 0xD, decrements a per-slot counter (off_208597C +318+2i, or the +316 counter); probably releases a
sub_2085984
export/plan0/arm9_main/sub_2085984_02085984.c
- docs/function_notes.md:738 per-player turn/slot helper: when the player state (+112 of record 48a1+112) is 0..3 with the mask 0xD, decrements a2 and returns it; otherwise scans the 2-entry table for a1 and returns slot 1 or 2 (or -1 when absent)
- docs/function_notes/NEEDS_REVIEW.md:468 per-player (a1) turn/slot helper: if player state +112 is 0,2 or 3 decrements *a2, else scans a 2-entry table for a1 and picks a slot id 1/2 [REVIEW]
- docs/function_notes/hk_14.md:120 per-player (a1) turn/slot helper: if player state +112 is 0,2 or 3 decrements *a2, else scans a 2-entry table for a1 and picks a slot id 1/2 [REVIEW]
sub_2085AD8
export/plan0/arm9_main/sub_2085AD8_02085AD8.c
- vm_model/src/cpu.rs:35 * Skill (
sub_207FA74): each CPU has a rank (sub_2085AD8: the two rivals named by the race - game/src/racers.rs:147 CPU ranks (
sub_2085AD8): the two rivals 1 and 2, the others draw 3..7 at random
sub_2085BEC
export/plan0/arm9_main/sub_2085BEC_02085BEC.c
- docs/function_notes.md:739 clears the 2-entry per-player table and flags, then loops players via sub_205D3F0 to find the first eligible one
- docs/function_notes/NEEDS_REVIEW.md:469 clears a 2-entry per-player table and flags, then loops players via sub_205D3F0 checking state +112 to find the first eligible one [REVIEW]
- docs/function_notes/hk_14.md:121 clears a 2-entry per-player table and flags, then loops players via sub_205D3F0 checking state +112 to find the first eligible one [REVIEW]
sub_2085D1C
export/plan0/arm9_main/sub_2085D1C_02085D1C.c
- docs/function_notes/hk_14.md:33 clears two per-slot counters in off_2085DF0 and tallies racers by state (+112 mask 0xD) into those counters; returns the racer count byte.
sub_2085E04
export/plan0/arm9_main/sub_2085E04_02085E04.c
- docs/function_notes/NEEDS_REVIEW.md:409 probably per-frame race-position/order update: calls sub_20364E0/sub_2036BEC, resets 8 slot arrays in off_2085FA4 to -1, sets mode from +16/+20, then calls
- docs/function_notes/hk_14.md:34 probably per-frame race-position/order update: calls sub_20364E0/sub_2036BEC, resets 8 slot arrays in off_2085FA4 to -1, sets mode from +16/+20, then calls
sub_2085FD8
export/plan0/arm9_main/sub_2085FD8_02085FD8.c
- vm_model/src/cpu.rs:755 The race's CPU difficulty (
kartAIparam.bin: 12 bytes per course and class,sub_2085FD8).
sub_2086058
export/plan0/arm9_main/sub_2086058_02086058.c
- docs/function_notes/hk_14.md:35 getter; returns off_2086068 struct pointer +148.
sub_208606C
export/plan0/arm9_main/sub_208606C_0208606C.c
- docs/function_notes/hk_14.md:36 indexed halfword getter; returns the u16 at off_208607C + 2*a1 (table lookup).
sub_2086080
export/plan0/arm9_main/sub_2086080_02086080.c
- docs/function_notes/hk_14.md:37 indexed getter; returns the word at +292 + 4*a1 of the struct at off_2086094.
sub_2086098
export/plan0/arm9_main/sub_2086098_02086098.c
- docs/function_notes/NEEDS_REVIEW.md:410 probably draws one billboard or sprite quad with 3D matrix setup: sub_21471BC/sub_214733C transforms, writes GXFIFO-style regs via off_2086238/off_2086248
- docs/function_notes/hk_14.md:38 probably draws one billboard or sprite quad with 3D matrix setup: sub_21471BC/sub_214733C transforms, writes GXFIFO-style regs via off_2086238/off_2086248
sub_2086250
export/plan0/arm9_main/sub_2086250_02086250.c
- docs/function_notes/NEEDS_REVIEW.md:411 probably per-frame draw of kart indicator sprites; for each slot (count +976) with a nonzero racer and state check, computes screen position via sub_2147288
- docs/function_notes/hk_14.md:39 probably per-frame draw of kart indicator sprites; for each slot (count +976) with a nonzero racer and state check, computes screen position via sub_2147288
sub_20865EC
export/plan0/arm9_main/sub_20865EC_020865EC.c
- docs/function_notes/hk_14.md:40 insertion-sort style pass over the 4-byte array at +164 (struct off_20866B0), swapping entries and updating index tables at +148/+132.
sub_20866B4
export/plan0/arm9_main/sub_20866B4_020866B4.c
- docs/function_notes/hk_14.md:41 same sort pass as sub_20865EC over array at +84 (struct off_2086778), using index tables at +68/+52.
sub_208677C
export/plan0/arm9_main/sub_208677C_0208677C.c
- docs/function_notes/hk_14.md:42 per-frame kart update loop: picks state from sub_2061818, calls sub_2086A04, then for each racer computes display position (>>4 of 1288 vector), speed scaling
sub_2086A04
export/plan0/arm9_main/sub_2086A04_02086A04.c
- docs/function_notes/NEEDS_REVIEW.md:412 probably ranks racers: for each slot computes distance-squared from sub_21484D0/sub_214848C over the racer's position vector (+1288), updates per-slot arrays
- docs/function_notes/hk_14.md:43 probably ranks racers: for each slot computes distance-squared from sub_21484D0/sub_214848C over the racer's position vector (+1288), updates per-slot arrays
sub_2086E8C
export/plan0/arm9_main/sub_2086E8C_02086E8C.c
- docs/function_notes/NEEDS_REVIEW.md:413 probably OAM/VRAM-style sprite or texture commit: masks a1 fields with dword_2086F18, calls sub_214C6A8/sub_214C544/sub_214C4D4 for a bank slot, optionally
- docs/function_notes/hk_14.md:44 probably OAM/VRAM-style sprite or texture commit: masks a1 fields with dword_2086F18, calls sub_214C6A8/sub_214C544/sub_214C4D4 for a bank slot, optionally
sub_2086F24
export/plan0/arm9_main/sub_2086F24_02086F24.c
- docs/function_notes/NEEDS_REVIEW.md:414 probably loads one 2D sprite/texture from a container (sub_2079BCC, sub_2013754) and commits it via sub_200EE74 and sub_214C544/sub_214C4D4/sub_214C418 with
- docs/function_notes/hk_14.md:45 probably loads one 2D sprite/texture from a container (sub_2079BCC, sub_2013754) and commits it via sub_200EE74 and sub_214C544/sub_214C4D4/sub_214C418 with
sub_2086FAC
export/plan0/arm9_main/sub_2086FAC_02086FAC.c
- docs/function_notes/hk_14.md:46 loops over the count at (off_2086FEC + dword_2086FF0) and calls sub_2086F24 for each entry, using pointer tables at off_2086FF4.
sub_2087000
export/plan0/arm9_main/sub_2087000_02087000.c
- docs/function_notes/hk_14.md:47 per-entry setup loop over the array at off_20870D4 (48-byte records): picks a name via sub_2088338 or sub_2088390 (texture/emblem path), resolves it via
sub_20870EC
export/plan0/arm9_main/sub_20870EC_020870EC.c
- docs/function_notes/NEEDS_REVIEW.md:415 probably builds a palette/texture-mode mask buffer for slot a2: picks threshold 7/4/-1 from byte +150 of the 48-byte record, calls sub_214D1FC and sub_200EE74
- docs/function_notes/hk_14.md:48 probably builds a palette/texture-mode mask buffer for slot a2: picks threshold 7/4/-1 from byte +150 of the 48-byte record, calls sub_214D1FC and sub_200EE74
sub_20871A4
export/plan0/arm9_main/sub_20871A4_020871A4.c
- docs/function_notes/hk_14.md:49 writes sub_20873E4(a2) as a halfword into struct a1+16 and flushes it with sub_200EE74(ptr, 8).
sub_20871C0
export/plan0/arm9_main/sub_20871C0_020871C0.c
- docs/function_notes/NEEDS_REVIEW.md:416 probably fills a small GX/OAM-style 8-byte record (dword_2087220 header, sub_20873E4 value, 31) and commits it via sub_214D168 and sub_20ADDDC; stores pointers
- docs/function_notes/hk_14.md:50 probably fills a small GX/OAM-style 8-byte record (dword_2087220 header, sub_20873E4 value, 31) and commits it via sub_214D168 and sub_20ADDDC; stores pointers
sub_2087228
export/plan0/arm9_main/sub_2087228_02087228.c
- docs/function_notes/NEEDS_REVIEW.md:417 probably fills a 16-byte attribute record: picks a value (dword_2087298 or table off_20872A0 indexed by slot count) and commits via sub_214D1FC/sub_200EE74
- docs/function_notes/hk_14.md:51 probably fills a 16-byte attribute record: picks a value (dword_2087298 or table off_20872A0 indexed by slot count) and commits via sub_214D1FC/sub_200EE74
sub_20872A4
export/plan0/arm9_main/sub_20872A4_020872A4.c
- docs/function_notes/hk_14.md:52 per-frame setup of kart sprite/OAM heap: calls sub_2086FAC, allocates four buffers with sub_2036B74 (sizes 32, dword_20873C8, 8, dword_20873D4), then per racer
sub_20873E4
export/plan0/arm9_main/sub_20873E4_020873E4.c
- docs/function_notes/hk_14.md:53 returns a per-slot value: table off_208744C indexed by byte +149 when struct mode (+8) is 5, else table off_2087450 by +116, else (class 12) sub_2077F7C(a1)+4
sub_2087458
export/plan0/arm9_main/sub_2087458_02087458.c
- docs/function_notes/NEEDS_REVIEW.md:418 probably converts two 3-bit size codes (bits 20-22 and 23-25 of *a1) to pixel sizes (8/17/33/65/128 or dword_20874FC/2087500/2087504) and stores them as <<12
- docs/function_notes/hk_14.md:54 probably converts two 3-bit size codes (bits 20-22 and 23-25 of *a1) to pixel sizes (8/17/33/65/128 or dword_20874FC/2087500/2087504) and stores them as <<12
sub_2087508
export/plan0/arm9_main/sub_2087508_02087508.c
- docs/function_notes/hk_14.md:55 initializes a racer render/ghost record: allocates 144 bytes via sub_2036BEC, copies four 4-entry vector tables from off_20875A0/A4/A8/AC into it, and sets
sub_20875B4
export/plan0/arm9_main/sub_20875B4_020875B4.c
- docs/function_notes/NEEDS_REVIEW.md:419 probably per-frame racer render-list setup: allocates the slot array and 40-byte records via sub_2036BEC, counts active racers (sub_2062EB0 and state checks)
- docs/function_notes/hk_14.md:56 probably per-frame racer render-list setup: allocates the slot array and 40-byte records via sub_2036BEC, counts active racers (sub_2062EB0 and state checks)
sub_208784C
export/plan0/arm9_main/sub_208784C_0208784C.c
- docs/function_notes/NEEDS_REVIEW.md:420 probably writes a 3D GX packed command set (display list words) from a1/a2 vertex params via off_208790C/off_2087914 and table at off_2087910; returns the FIFO
- docs/function_notes/hk_14.md:57 probably writes a 3D GX packed command set (display list words) from a1/a2 vertex params via off_208790C/off_2087914 and table at off_2087910; returns the FIFO
sub_2087918
export/plan0/arm9_main/sub_2087918_02087918.c
- docs/function_notes/hk_14.md:58 thunk wrapper; calls sub_20879E8() and returns sub_2087934(a3).
sub_2087934
export/plan0/arm9_main/sub_2087934_02087934.c
- docs/function_notes/NEEDS_REVIEW.md:421 probably writes a 12-word GX material/texture command block from table off_20879E0 into the FIFO at off_20879E4, with a1 stored at off_20879CC; returns the
- docs/function_notes/hk_14.md:59 probably writes a 12-word GX material/texture command block from table off_20879E0 into the FIFO at off_20879E4, with a1 stored at off_20879CC; returns the
sub_20879E8
export/plan0/arm9_main/sub_20879E8_020879E8.c
- docs/function_notes/NEEDS_REVIEW.md:422 probably writes a 12-word GX command block (matrix/vertex setup) from table off_2087AA8 into the FIFO at off_2087AAC; uses a1/a2 high bytes as packed params.
- docs/function_notes/hk_14.md:60 probably writes a 12-word GX command block (matrix/vertex setup) from table off_2087AA8 into the FIFO at off_2087AAC; uses a1/a2 high bytes as packed params.
sub_2087AB0
export/plan0/arm9_main/sub_2087AB0_02087AB0.c
- docs/function_notes/hk_14.md:61 same packed-command writer as sub_20879E8 using table off_2087B70 and FIFO off_2087B74 (duplicate with different globals).
sub_2087B78
export/plan0/arm9_main/sub_2087B78_02087B78.c
- vm_model/src/nitro_playback.rs:1 MKDS animation clock, recovered from ARM9
sub_2087B78/sub_2087C9C. - vm_model/src/nitro_playback.rs:36
sub_2087B78, including its indirect continuation at0x02087B9C. - docs/function_notes.md:78 fx12 animation clock tick: stop, loop, counted loops; C omits indirect continuation at 0x02087B9C; ARM recovered, 541 live mode-1 transitions matched
sub_2087C9C
export/plan0/arm9_main/sub_2087C9C_02087C9C.c
- vm_model/src/nitro_playback.rs:1 MKDS animation clock, recovered from ARM9
sub_2087B78/sub_2087C9C. - vm_model/src/nitro_playback.rs:22
sub_2087C9C: any nonzero loop argument initially selects mode 1. - docs/function_notes.md:79 animation clock initializer: duration, speed=4096, frame/counters=0, boolean loop mode (C and ARM confirmed)
sub_2087CD0
export/plan0/arm9_main/sub_2087CD0_02087CD0.c
- docs/function_notes.md:80 initializes animation clock with looping mode 1 (C confirmed)
sub_2087CFC
export/plan0/arm9_main/sub_2087CFC_02087CFC.c
- docs/function_notes.md:81 sets per-clip playback flag and current clock mode (C confirmed)
sub_2087D0C
export/plan0/arm9_main/sub_2087D0C_02087D0C.c
- docs/function_notes.md:82 selected animation duration converted to fx12 frames (C confirmed)
sub_2087D44
export/plan0/arm9_main/sub_2087D44_02087D44.c
- docs/function_notes.md:83 advances animation crossfade weights without advancing frame (C confirmed)
sub_2087DE0
export/plan0/arm9_main/sub_2087DE0_02087DE0.c
- docs/function_notes.md:84 advances blend, ticks clock and publishes frame to selected SDK animation (C confirmed)
sub_2087E90
export/plan0/arm9_main/sub_2087E90_02087E90.c
- docs/function_notes.md:85 selects joint clip with crossfade, initializes playback clock (C confirmed)
sub_2087F84
export/plan0/arm9_main/sub_2087F84_02087F84.c
- docs/function_notes.md:86 selects joint clip immediately, clears prior blend and initializes playback clock (C confirmed)
sub_208805C
export/plan0/arm9_main/sub_208805C_0208805C.c
- docs/function_notes/hk_14.md:62 loop that fetches per-entry pointers via loc_2013A4C/loc_2013B00-style dispatch selected by a1+40 (0-4), and for each entry calls sub_2010D98 and sub_2036BEC
sub_20881B0
export/plan0/arm9_main/sub_20881B0_020881B0.c
- docs/function_notes/NEEDS_REVIEW.md:423 probably stores a per-entry value into the racer arrays of struct a1 (index a2); when a5 is set, hashes the name via sub_2010D98, allocates via sub_2036BEC and
- docs/function_notes/hk_14.md:63 probably stores a per-entry value into the racer arrays of struct a1 (index a2); when a5 is set, hashes the name via sub_2010D98, allocates via sub_2036BEC and
sub_208823C
export/plan0/arm9_main/sub_208823C_0208823C.c
- vm_model/src/nitro_driver.rs:1 Driver presentation from sub_207B734, sub_2068A64, sub_207B708, and sub_208823C.
- docs/function_notes.md:98 allocates 56-byte animation wrapper and per-clip arrays, binds SDK animation; crossfade increment literal at 0x020882F8 is 410 fx12
sub_20882FC
export/plan0/arm9_main/sub_20882FC_020882FC.c
- docs/function_notes/hk_14.md:64 getter; returns the u16 at +4 of the struct at a1+8.
sub_2088308
export/plan0/arm9_main/sub_2088308_02088308.c
- docs/function_notes/hk_14.md:65 getter; returns the u16 at +4 of the struct at a1+8 (identical to sub_20882FC).
sub_2088314
export/plan0/arm9_main/sub_2088314_02088314.c
- docs/function_notes/hk_14.md:66 getter; returns the u16 at +4 of the struct at a1+8 (identical to sub_20882FC).
sub_2088320
export/plan0/arm9_main/sub_2088320_02088320.c
- docs/function_notes/hk_14.md:67 getter; returns the u16 at +4 of the struct at a1+8 (identical to sub_20882FC).
sub_208832C
export/plan0/arm9_main/sub_208832C_0208832C.c
- docs/function_notes/hk_14.md:68 getter; returns the u16 at +4 of the struct at a1+8 (identical to sub_20882FC).
sub_2088338
export/plan0/arm9_main/sub_2088338_02088338.c
- docs/function_notes/NEEDS_REVIEW.md:424 probably formats a team emblem path (%semblem/Team%s_emblem.nsbtx) into a static 256-byte buffer via sub_2135048 and returns that buffer.
- docs/function_notes/hk_14.md:69 probably formats a team emblem path (%semblem/Team%s_emblem.nsbtx) into a static 256-byte buffer via sub_2135048 and returns that buffer.
sub_2088390
export/plan0/arm9_main/sub_2088390_02088390.c
- docs/function_notes/NEEDS_REVIEW.md:425 probably formats a per-player emblem path (%semblem/%s_emblem.nsbtx) into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:70 probably formats a per-player emblem path (%semblem/%s_emblem.nsbtx) into a static 256-byte buffer via sub_2135048 and returns it.
sub_20883E4
export/plan0/arm9_main/sub_20883E4_020883E4.c
- docs/function_notes/NEEDS_REVIEW.md:426 probably formats a face-animation path (%scommon/P_faceanim.nsbtp) into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:71 probably formats a face-animation path (%scommon/P_faceanim.nsbtp) into a static 256-byte buffer via sub_2135048 and returns it.
sub_2088430
export/plan0/arm9_main/sub_2088430_02088430.c
- docs/function_notes/NEEDS_REVIEW.md:427 probably formats a path into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:72 probably formats a path into a static 256-byte buffer via sub_2135048 and returns it.
sub_208848C
export/plan0/arm9_main/sub_208848C_0208848C.c
- docs/function_notes/hk_14.md:73 returns a name string from a 3-pointer-per-entry table (off_20884B4 or off_20884B8), selected by a2, indexed by a1 (probably E_MR / P_MR character-name pair).
sub_20884BC
export/plan0/arm9_main/sub_20884BC_020884BC.c
- docs/function_notes/NEEDS_REVIEW.md:428 probably formats a shadow model path (%s%sshadow/sh_%s.nsbmd) into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:74 probably formats a shadow model path (%s%sshadow/sh_%s.nsbmd) into a static 256-byte buffer via sub_2135048 and returns it.
sub_2088518
export/plan0/arm9_main/sub_2088518_02088518.c
- docs/function_notes/NEEDS_REVIEW.md:429 probably formats a tire model path (%s%stire/%s.%s) into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:75 probably formats a tire model path (%s%stire/%s.%s) into a static 256-byte buffer via sub_2135048 and returns it.
sub_2088574
export/plan0/arm9_main/sub_2088574_02088574.c
- docs/function_notes/NEEDS_REVIEW.md:430 probably formats a tire model path (%s%stire/%s.%s) into a second static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:76 probably formats a tire model path (%s%stire/%s.%s) into a second static 256-byte buffer via sub_2135048 and returns it.
sub_20885D0
export/plan0/arm9_main/sub_20885D0_020885D0.c
- docs/function_notes/NEEDS_REVIEW.md:431 probably formats a kart resource path (%s%s%skart_%s.%s) into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:77 probably formats a kart resource path (%s%s%skart_%s.%s) into a static 256-byte buffer via sub_2135048 and returns it.
sub_208867C
export/plan0/arm9_main/sub_208867C_0208867C.c
- docs/function_notes/NEEDS_REVIEW.md:432 probably formats a kart resource path (kart_%s.%s-style) into a static 256-byte buffer via sub_2135048 and returns it.
- docs/function_notes/hk_14.md:78 probably formats a kart resource path (kart_%s.%s-style) into a static 256-byte buffer via sub_2135048 and returns it.
sub_2088728
export/plan0/arm9_main/sub_2088728_02088728.c
- docs/function_notes/NEEDS_REVIEW.md:433 probably formats a path in two steps (sub_2135048 twice) into static buffer off_20887CC and returns it.
- docs/function_notes/hk_14.md:79 probably formats a path in two steps (sub_2135048 twice) into static buffer off_20887CC and returns it.
sub_20887D8
export/plan0/arm9_main/sub_20887D8_020887D8.c
- docs/function_notes/NEEDS_REVIEW.md:434 probably formats a path in two steps (sub_2135048 twice) into static buffer off_208887C and returns it.
- docs/function_notes/hk_14.md:80 probably formats a path in two steps (sub_2135048 twice) into static buffer off_208887C and returns it.
sub_2088888
export/plan0/arm9_main/sub_2088888_02088888.c
- docs/function_notes/hk_14.md:81 selects one of two candidate pointers (off_20888A8 when a1 is nonzero, else off_20888B0), stores it in off_20888AC and returns it.
sub_20888B4
export/plan0/arm9_main/sub_20888B4_020888B4.c
- docs/function_notes/NEEDS_REVIEW.md:435 probably nearest-object search: walks up to the list count from sub_21000C8 starting at struct +212, skipping entries with flag bit 0 set, keeps the closest
- docs/function_notes/hk_14.md:82 probably nearest-object search: walks up to the list count from sub_21000C8 starting at struct +212, skipping entries with flag bit 0 set, keeps the closest
sub_2088A0C
export/plan0/arm9_main/sub_2088A0C_02088A0C.c
- docs/function_notes/NEEDS_REVIEW.md:436 probably per-frame target/collision logic for a kart: uses the cached target at a1[52] (distance vs dword_2088C6C, height vs off_2088C68), builds a direction
- docs/function_notes/hk_14.md:83 probably per-frame target/collision logic for a kart: uses the cached target at a1[52] (distance vs dword_2088C6C, height vs off_2088C68), builds a direction
sub_2088C7C
export/plan0/arm9_main/sub_2088C7C_02088C7C.c
- docs/function_notes/NEEDS_REVIEW.md:437 probably maps a value from sub_208537C to a level index 1..3 by comparing against 3 thresholds in off_2088D30+12, storing it as a halfword at a1+192.
- docs/function_notes/hk_14.md:84 probably maps a value from sub_208537C to a level index 1..3 by comparing against 3 thresholds in off_2088D30+12, storing it as a halfword at a1+192.
sub_2088D34
export/plan0/arm9_main/sub_2088D34_02088D34.c
- docs/function_notes/NEEDS_REVIEW.md:438 probably a per-kart trigger check: clears flag +196, tests sub_1FFC67C, uses sub_20A1154/sub_20A10D4 rankings and a counter at +194 vs the table limit, then
- docs/function_notes/hk_14.md:85 probably a per-kart trigger check: clears flag +196, tests sub_1FFC67C, uses sub_20A1154/sub_20A10D4 rankings and a counter at +194 vs the table limit, then
sub_2088E44
export/plan0/arm9_main/sub_2088E44_02088E44.c
- docs/function_notes/NEEDS_REVIEW.md:439 probably computes a target or follow point for the player's kart (compares slot to sub_2061F90, checks kart record fields +88/+48/+76 and sub_207F554), stores
- docs/function_notes/hk_14.md:86 probably computes a target or follow point for the player's kart (compares slot to sub_2061F90, checks kart record fields +88/+48/+76 and sub_207F554), stores
sub_20892BC
export/plan0/arm9_main/sub_20892BC_020892BC.c
- docs/function_notes/NEEDS_REVIEW.md:440 probably per-frame speed/scale update: transforms a constant vector via sub_21483A0 into a1+96, cycles a counter at +108 to refresh scale at +116 (clamped by
- docs/function_notes/hk_14.md:87 probably per-frame speed/scale update: transforms a constant vector via sub_21483A0 into a1+96, cycles a counter at +108 to refresh scale at +116 (clamped by
sub_2089494
export/plan0/arm9_main/sub_2089494_02089494.c
- docs/function_notes/NEEDS_REVIEW.md:441 probably per-frame kart physics and steering driver: reads the kart record via sub_207A948, checks flags 0x3840, runs sub_2080E2C/sub_2080DBC/sub_20800F4 path
- docs/function_notes/hk_14.md:88 probably per-frame kart physics and steering driver: reads the kart record via sub_207A948, checks flags 0x3840, runs sub_2080E2C/sub_2080DBC/sub_20800F4 path
sub_20896E0
export/plan0/arm9_main/sub_20896E0_020896E0.c
- docs/function_notes/hk_14.md:89 per-kart update driver: calls sub_2088D34, optionally sub_207E668, then sub_2089494, then sub_2088E44 or sub_2088A0C depending on the flag at off_2089750+24.
sub_2089754
export/plan0/arm9_main/sub_2089754_02089754.c
- docs/function_notes/NEEDS_REVIEW.md:442 probably kart init/update: calls sub_20808D4 with a2 on the component at a1+40, copies the resulting vector to a1+68..+76, then calls sub_20898BC.
- docs/function_notes/hk_14.md:90 probably kart init/update: calls sub_20808D4 with a2 on the component at a1+40, copies the resulting vector to a1+68..+76, then calls sub_20898BC.
sub_2089788
export/plan0/arm9_main/sub_2089788_02089788.c
- docs/function_notes/NEEDS_REVIEW.md:443 probably initializes a kart state record: stores the kart pointer at a1, id from +116, sets a vector via sub_2080908, copies to a1+68..+76, calls sub_20898BC
- docs/function_notes/hk_14.md:91 probably initializes a kart state record: stores the kart pointer at a1, id from +116, sets a vector via sub_2080908, copies to a1+68..+76, calls sub_20898BC
sub_20898BC
export/plan0/arm9_main/sub_20898BC_020898BC.c
- docs/function_notes/NEEDS_REVIEW.md:444 probably resets a kart's physics/state record: copies default vector from off_2089970 into a1+96..+104, clears counters and flags (+108..+220), and sets
- docs/function_notes/hk_14.md:92 probably resets a kart's physics/state record: copies default vector from off_2089970 into a1+96..+104, clears counters and flags (+108..+220), and sets
sub_2089974
export/plan0/arm9_main/sub_2089974_02089974.c
- docs/function_notes/NEEDS_REVIEW.md:445 probably selects a kart speed/physics table pointer (off_2089A1C or off_2089A18 by class value +20 of 2 or 3), or sets a fixed speed constant (1638400 /
- docs/function_notes/hk_14.md:93 probably selects a kart speed/physics table pointer (off_2089A1C or off_2089A18 by class value +20 of 2 or 3), or sets a fixed speed constant (1638400 /
sub_2089A24
export/plan0/arm9_main/sub_2089A24_02089A24.c
- docs/function_notes/NEEDS_REVIEW.md:446 probably start-boost check: for a kart not in state mask 0xD, when a class-specific threshold (dword_2089B40/44/48 by +20) is met, sets a2+44=1 and a2+48 =
- docs/function_notes/hk_14.md:94 probably start-boost check: for a kart not in state mask 0xD, when a class-specific threshold (dword_2089B40/44/48 by +20) is met, sets a2+44=1 and a2+48 =
sub_2089B4C
export/plan0/arm9_main/sub_2089B4C_02089B4C.c
- docs/function_notes/NEEDS_REVIEW.md:447 probably computes a per-kart scale factor at result+16 from speed a2[28] above 20480 (linear ramp clamped to 4096), halved when a2[52] is set and a2[54] >
- docs/function_notes/hk_14.md:95 probably computes a per-kart scale factor at result+16 from speed a2[28] above 20480 (linear ramp clamped to 4096), halved when a2[52] is set and a2[54] >
sub_2089C3C
export/plan0/arm9_main/sub_2089C3C_02089C3C.c
- docs/function_notes/NEEDS_REVIEW.md:448 probably speed cap for the player kart: for slot == sub_2061F90 it sets a1[3]=0, caps +204 at 40960, calls sub_2089B4C, then caps a1[1] by a2[41]; writes the
- docs/function_notes/hk_14.md:96 probably speed cap for the player kart: for slot == sub_2061F90 it sets a1[3]=0, caps +204 at 40960, calls sub_2089B4C, then caps a1[1] by a2[41]; writes the
sub_2089CE4
export/plan0/arm9_main/sub_2089CE4_02089CE4.c
- docs/function_notes/NEEDS_REVIEW.md:449 probably initializes a 5-word speed/scale record from kart chain (+716 then +16): result[0..1] = value, result[2] = 20480, result[3..4] = 0.
- docs/function_notes/hk_14.md:97 probably initializes a 5-word speed/scale record from kart chain (+716 then +16): result[0..1] = value, result[2] = 20480, result[3..4] = 0.
sub_2089D14
export/plan0/arm9_main/sub_2089D14_02089D14.c
- docs/function_notes/hk_14.md:98 indexed dispatch; stores off_2089D60[a1] at struct +1940 and off_2089D68[a1] at +1944, then calls the +1940 function with struct + dword_2089D6C.
sub_2089D70
export/plan0/arm9_main/sub_2089D70_02089D70.c
- docs/function_notes/NEEDS_REVIEW.md:450 probably sets geometry/GX command words in off_2089DFC/off_2089E00 (fixed constants 573440, 450560, 40960), flag at off_2089E04, then loads four table entries
- docs/function_notes/hk_14.md:99 probably sets geometry/GX command words in off_2089DFC/off_2089E00 (fixed constants 573440, 450560, 40960), flag at off_2089E04, then loads four table entries
sub_2089E10
export/plan0/arm9_main/sub_2089E10_02089E10.c
- docs/function_notes/hk_14.md:100 loads entry a1 of a 3-halfword table at off_2089E60: packs the first two halfwords into the word at off_2089E64 and returns the third halfword.
sub_2089E68
export/plan0/arm9_main/sub_2089E68_02089E68.c
- docs/function_notes/NEEDS_REVIEW.md:451 probably per-frame timer step: decrements the halfword at *result, sets result[1] = scaled value by dword_2089EC8, and clears the word at +8 once the timer
- docs/function_notes/hk_14.md:101 probably per-frame timer step: decrements the halfword at *result, sets result[1] = scaled value by dword_2089EC8, and clears the word at +8 once the timer
sub_2089ECC
export/plan0/arm9_main/sub_2089ECC_02089ECC.c
- docs/function_notes/NEEDS_REVIEW.md:452 probably initializes a 12-byte record: halfwords 10 and 12, a halfword from dword_2089EF0, and int 1 at +8.
- docs/function_notes/hk_14.md:102 probably initializes a 12-byte record: halfwords 10 and 12, a halfword from dword_2089EF0, and int 1 at +8.
sub_2089EF4
export/plan0/arm9_main/sub_2089EF4_02089EF4.c
- docs/function_notes/NEEDS_REVIEW.md:453 probably sets the race-phase state at off_2089F98+1852 (9 = finished); on a state change calls sub_208A31C, resets the counter at +1856, and for states 1/3
- docs/function_notes/hk_14.md:103 probably sets the race-phase state at off_2089F98+1852 (9 = finished); on a state change calls sub_208A31C, resets the counter at +1856, and for states 1/3
sub_2089FA0
export/plan0/arm9_main/sub_2089FA0_02089FA0.c
- docs/function_notes/NEEDS_REVIEW.md:454 probably per-frame render setup: copies the camera matrix from sub_21471BC into off_208A1CC; if state is not 9, loops over the record list calling sub_214AD4C
- docs/function_notes/hk_14.md:105 probably per-frame render setup: copies the camera matrix from sub_21471BC into off_208A1CC; if state is not 9, loops over the record list calling sub_214AD4C
sub_208A218
export/plan0/arm9_main/sub_208A218_0208A218.c
- docs/function_notes/NEEDS_REVIEW.md:455 probably per-frame phase tick: advances the counter at +1856 and moves state to 9 when it exceeds +1858; calls sub_2087DE0 on up to three child objects per
- docs/function_notes/hk_14.md:106 probably per-frame phase tick: advances the counter at +1856 and moves state to 9 when it exceeds +1858; calls sub_2087DE0 on up to three child objects per
sub_208A31C
export/plan0/arm9_main/sub_208A31C_0208A31C.c
- docs/function_notes/NEEDS_REVIEW.md:456 probably sets the phase/animation state: stores table entry a1 (off_208A45C+4*a1) at struct+32, sets mode +1852 = a1, and for each entry calls sub_2087F84 with
- docs/function_notes/hk_14.md:107 probably sets the phase/animation state: stores table entry a1 (off_208A45C+4*a1) at struct+32, sets mode +1852 = a1, and for each entry calls sub_2087F84 with
sub_208A460
export/plan0/arm9_main/sub_208A460_0208A460.c
- docs/function_notes/NEEDS_REVIEW.md:457 probably allocates per-kart object arrays via sub_2036BEC(20) for slots 0..2 and fills them via sub_208A69C; then builds extra objects depending on the mode at
- docs/function_notes/hk_14.md:108 probably allocates per-kart object arrays via sub_2036BEC(20) for slots 0..2 and fills them via sub_208A69C; then builds extra objects depending on the mode at
sub_208A69C
export/plan0/arm9_main/sub_208A69C_0208A69C.c
- docs/function_notes/NEEDS_REVIEW.md:458 probably builds a model/animation object set from count bytes in a3 (108-byte entries, then 56-byte entries): formats names via sub_2135048, loads via
- docs/function_notes/hk_14.md:109 probably builds a model/animation object set from count bytes in a3 (108-byte entries, then 56-byte entries): formats names via sub_2135048, loads via
sub_208AA30
export/plan0/arm9_main/sub_208AA30_0208AA30.c
- docs/function_notes/NEEDS_REVIEW.md:459 probably allocates the race-object state (off_208AAEC, size dword_208AAE8), calls sub_208A460, sets state +1852 = 9, calls sub_214AD4C, and zeroes the +1924
- docs/function_notes/hk_14.md:110 probably allocates the race-object state (off_208AAEC, size dword_208AAE8), calls sub_208A460, sets state +1852 = 9, calls sub_214AD4C, and zeroes the +1924
sub_208AB00
export/plan0/arm9_main/sub_208AB00_0208AB00.c
- docs/function_notes/NEEDS_REVIEW.md:460 probably sends two command words (dword_208AB44, dword_208AB48) through sub_1FF9048 with id 51, as a small GX/command queue write.
- docs/function_notes/hk_14.md:111 probably sends two command words (dword_208AB44, dword_208AB48) through sub_1FF9048 with id 51, as a small GX/command queue write.
sub_208AB4C
export/plan0/arm9_main/sub_208AB4C_0208AB4C.c
- docs/function_notes/NEEDS_REVIEW.md:461 probably sends two command words through sub_1FF9048 with id 51: the value a1 and a1 | 0x40000000.
- docs/function_notes/hk_14.md:112 probably sends two command words through sub_1FF9048 with id 51: the value a1 and a1 | 0x40000000.
sub_208AB98
export/plan0/arm9_main/sub_208AB98_0208AB98.c
- docs/function_notes/NEEDS_REVIEW.md:462 probably steps a 16-bit colour/palette fade: finds the lowest bit i in a2 that is not in result[7], loads the target 5-bit RGB from table off_208AD70
- docs/function_notes/hk_14.md:113 probably steps a 16-bit colour/palette fade: finds the lowest bit i in a2 that is not in result[7], loads the target 5-bit RGB from table off_208AD70
sub_208AD74
export/plan0/arm9_main/sub_208AD74_0208AD74.c
- docs/function_notes/NEEDS_REVIEW.md:463 probably sets *result to the colour entry from table off_208ADC4+24 indexed by the lowest set bit i of a2, and stores result[7] = 1 << i.
- docs/function_notes/hk_14.md:114 probably sets *result to the colour entry from table off_208ADC4+24 indexed by the lowest set bit i of a2, and stores result[7] = 1 << i.
sub_208ADC8
export/plan0/arm9_main/sub_208ADC8_0208ADC8.c
- docs/function_notes/NEEDS_REVIEW.md:464 probably like sub_208AD74 (table off_208AE5C, bit index i) and additionally unpacks the 5-bit RGB channels into result[1..3], zeroes result[5..6] and sets
- docs/function_notes/hk_14.md:115 probably like sub_208AD74 (table off_208AE5C, bit index i) and additionally unpacks the 5-bit RGB channels into result[1..3], zeroes result[5..6] and sets
sub_208AE60
export/plan0/arm9_main/sub_208AE60_0208AE60.c
- docs/function_notes/hk_14.md:116 getter; returns the word at +8 of the struct at off_208AE70.
sub_208AE74
export/plan0/arm9_main/sub_208AE74_0208AE74.c
- docs/function_notes/NEEDS_REVIEW.md:465 probably address helper; returns (off_208AE88+4) + 8a1 (8-byte record indexed by a1).
- docs/function_notes/hk_14.md:117 probably address helper; returns (off_208AE88+4) + 8a1 (8-byte record indexed by a1).
sub_208AE8C
export/plan0/arm9_main/sub_208AE8C_0208AE8C.c
- docs/function_notes/NEEDS_REVIEW.md:466 probably address helper; returns (off_208AEA4) + 152*a1 (152-byte record indexed by a1).
- docs/function_notes/hk_14.md:118 probably address helper; returns (off_208AEA4) + 152*a1 (152-byte record indexed by a1).
sub_208AEA8
export/plan0/arm9_main/sub_208AEA8_0208AEA8.c
- vm_model/src/roster.rs:2 way the game builds them (
sub_208AEA8copies the kart's entry,sub_20726BCadjusts it).
sub_208AF40
export/plan0/arm9_main/sub_208AF40_0208AF40.c
- docs/function_notes/NEEDS_REVIEW.md:467 probably allocates a 20-byte header plus 152a2 records and 8a2 entries via sub_2036BEC; sets +12 and +16 from sub_20478BC lookups (off_208AFDC, off_208AFE0)
- docs/function_notes/hk_14.md:119 probably allocates a 20-byte header plus 152a2 records and 8a2 entries via sub_2036BEC; sets +12 and +16 from sub_20478BC lookups (off_208AFDC, off_208AFE0)
sub_208AFE4
export/plan0/arm9_main/sub_208AFE4_0208AFE4.c
- docs/function_notes/NEEDS_REVIEW.md:470 probably spawns effect emitters at table-driven positions (off_208B180/off_208B18C) via sub_2018600, setting emitter +128 priority bits from resource flags
- docs/function_notes/hk_15.md:2 probably spawns effect emitters at table-driven positions (off_208B180/off_208B18C) via sub_2018600, setting emitter +128 priority bits from resource flags
sub_208B190
export/plan0/arm9_main/sub_208B190_0208B190.c
- docs/function_notes/NEEDS_REVIEW.md:471 probably per-frame update of 6 kart-relative emitter slots: kills old ones (sub_20184E4), picks nearest of 6 positions (sub_214848C), respawns via sub_2018600
- docs/function_notes/hk_15.md:3 probably per-frame update of 6 kart-relative emitter slots: kills old ones (sub_20184E4), picks nearest of 6 positions (sub_214848C), respawns via sub_2018600
sub_208B458
export/plan0/arm9_main/sub_208B458_0208B458.c
- docs/function_notes/NEEDS_REVIEW.md:472 probably maps an id (<1000 direct, else id-1000 via off_208B47C) to a table entry; stores the reduced index in *a1 and returns the table value
- docs/function_notes/hk_15.md:4 probably maps an id (<1000 direct, else id-1000 via off_208B47C) to a table entry; stores the reduced index in *a1 and returns the table value
sub_208B484
export/plan0/arm9_main/sub_208B484_0208B484.c
- docs/function_notes/hk_15.md:5 stores a2 into *a1 and returns the pointer loaded from off_208B494
sub_208B498
export/plan0/arm9_main/sub_208B498_0208B498.c
- docs/function_notes/hk_15.md:6 finds object via off_208B5AC lookup, spawns SPL emitter at pos>>4 via sub_2018600, sets +128 priority bits, scales slot vector by a4>>12 into emitter +64..+72
sub_208B5B0
export/plan0/arm9_main/sub_208B5B0_0208B5B0.c
- game/src/effects.rs:45 (world fx12 divided by 16), as in sub_208B5B0. Stop leaves existing particles
- docs/function_notes/hk_15.md:7 sets emitter world position (+40..+48) = resource base position (+4/+8/+12) plus a2 vector >>4
sub_208B60C
export/plan0/arm9_main/sub_208B60C_0208B60C.c
- docs/function_notes/hk_15.md:8 spawns SPL emitter at a2 position (>>4) using resource off_208B6AC via sub_2018600 and sets +128 priority bits from resource flags
sub_208B6B0
export/plan0/arm9_main/sub_208B6B0_0208B6B0.c
- vm_model/src/mission_target.rs:4 (
sub_219B1E8,sub_208B6B0) report the call as a [Call] for the host. - vm_model/src/mission_target.rs:36
sub_2187AD4->sub_208B6B0on emitter slotk(+208 + 24k was non-zero). - docs/function_notes/hk_15.md:9 marks handle result as killed (sets bit 0 of +36 on its object) and clears result
sub_208B6D0
export/plan0/arm9_main/sub_208B6D0_0208B6D0.c
- docs/function_notes/NEEDS_REVIEW.md:473 probably frees an emitter: gets a handle via off_208B70C, calls sub_20184E4 to recycle it, zeroes *a1
- docs/function_notes/hk_15.md:10 probably frees an emitter: gets a handle via off_208B70C, calls sub_20184E4 to recycle it, zeroes *a1
sub_208B710
export/plan0/arm9_main/sub_208B710_0208B710.c
- docs/function_notes.md:113 immediately destroys a game particle emitter via sub_20184E4
sub_208B748
export/plan0/arm9_main/sub_208B748_0208B748.c
- docs/function_notes/hk_15.md:11 gets resource via off_208B7B8 and creates/spawns an SPL emitter at a2>>4 via sub_2018578, passing callback a4
sub_208B7BC
export/plan0/arm9_main/sub_208B7BC_0208B7BC.c
- vm_model/src/nitro_particle_emitter.rs:30 Kart wrapper sub_208B7BC overrides the update selector from base[84].
- vm_model/src/shine.rs:82 Effect 124 at the owner (
sub_208B7BC+sub_2081F10(.., 22)) when a carried shine vanishes. - vm_model/src/mapobj/airship.rs:14 Not ported (all of them): sounds and effects (
sub_210B7A8/sub_208B7BC/sub_20D275C), - docs/function_notes.md:112 game particle factory: converts world position to SPL units with arithmetic right shift4, selects resource and spawns emitter; base[84] bit7 selects manager phase0, otherwise bit6 selects phase1, otherwise updates every manager frame (ported wrapper clock)
sub_208B870
export/plan0/arm9_main/sub_208B870_0208B870.c
- docs/function_notes/hk_15.md:12 calls sub_2018674 (SPL draw) on three emitter handles (off_208B8BC, off_208B8C0, off_208B8C4) with a1
sub_208B8C8
export/plan0/arm9_main/sub_208B8C8_0208B8C8.c
- docs/function_notes/hk_15.md:13 optionally calls callback off_208B924, then ticks three emitter handles (off_208B928/92C/930) via sub_201873C
sub_208BD04
export/plan0/arm9_main/sub_208BD04_0208BD04.c
- docs/function_notes/hk_15.md:14 thunk; calls function pointer off_208BD1C with object *off_208BD18 and a1
sub_208BD20
export/plan0/arm9_main/sub_208BD20_0208BD20.c
- docs/function_notes/NEEDS_REVIEW.md:474 probably object init: sub_207E35C(a1) then sub_207D6A4 on a1+232
- docs/function_notes/hk_15.md:15 probably object init: sub_207E35C(a1) then sub_207D6A4 on a1+232
sub_208BD44
export/plan0/arm9_main/sub_208BD44_0208BD44.c
- docs/function_notes/NEEDS_REVIEW.md:475 probably kart-object init for slot a2: sub_207A974 lookup, zeroes a1+340/+276/+280, sub_207E400, sub_207D814, sets kart flag 0x40 at +124 on a global mismatch
- docs/function_notes/hk_15.md:17 probably kart-object init for slot a2: sub_207A974 lookup, zeroes a1+340/+276/+280, sub_207E400, sub_207D814, sets kart flag 0x40 at +124 on a global mismatch
sub_208BDC0
export/plan0/arm9_main/sub_208BDC0_0208BDC0.c
- docs/function_notes/NEEDS_REVIEW.md:476 probably object teardown: sub_207E4A4(a1) then sub_207D6A4 on a1+232
- docs/function_notes/hk_15.md:18 probably object teardown: sub_207E4A4(a1) then sub_207D6A4 on a1+232
sub_208BDE0
export/plan0/arm9_main/sub_208BDE0_0208BDE0.c
- docs/function_notes/NEEDS_REVIEW.md:477 probably object release: sub_207E564(a1) then returns sub_207D7E4(a1+232)
- docs/function_notes/hk_15.md:19 probably object release: sub_207E564(a1) then returns sub_207D7E4(a1+232)
sub_208BE00
export/plan0/arm9_main/sub_208BE00_0208BE00.c
- docs/function_notes/hk_15.md:20 like sub_208BD44 for another slot type: sub_207A974, sub_207E594, sub_207D814; sets +276/+280 to (1,4) when global type is 4 else (0,0); returns a1+256
sub_208BE7C
export/plan0/arm9_main/sub_208BE7C_0208BE7C.c
- docs/function_notes/hk_15.md:21 thunk; calls off_208BE8C(a1+284)
sub_208BE90
export/plan0/arm9_main/sub_208BE90_0208BE90.c
- docs/function_notes/hk_15.md:22 thunk; calls off_208BEA0(a1+284)
sub_208BEA4
export/plan0/arm9_main/sub_208BEA4_0208BEA4.c
- docs/function_notes/hk_15.md:23 copies object's 3-vector at (*(a3+40)+32) into a1[0..2] and the vector at a3+40 +8..+16 into a2[0..2]; returns the x component
sub_208BEE0
export/plan0/arm9_main/sub_208BEE0_0208BEE0.c
- docs/function_notes/hk_15.md:24 returns nonzero when a1+60 is non-null
sub_208BEF4
export/plan0/arm9_main/sub_208BEF4_0208BEF4.c
- docs/function_notes/hk_15.md:25 lazily caches the course AREA (type-4) containing *a1+128 in a1[15] via sub_20413A4; a1[16] is the cache-valid flag; returns 1 when found
sub_208BF40
export/plan0/arm9_main/sub_208BF40_0208BF40.c
- docs/function_notes/NEEDS_REVIEW.md:478 probably init chain: sub_20896E0, sub_2089C3C(a1+80), then thunk sub_209033C on a1+71
- docs/function_notes/hk_15.md:26 probably init chain: sub_20896E0, sub_2089C3C(a1+80), then thunk sub_209033C on a1+71
sub_208BF6C
export/plan0/arm9_main/sub_208BF6C_0208BF6C.c
- docs/function_notes/NEEDS_REVIEW.md:479 probably teardown chain: sub_2089754, sub_2089CE4(a1+80), then thunk sub_2090348 on a1+71
- docs/function_notes/hk_15.md:27 probably teardown chain: sub_2089754, sub_2089CE4(a1+80), then thunk sub_2090348 on a1+71
sub_208BF94
export/plan0/arm9_main/sub_208BF94_0208BF94.c
- docs/function_notes/NEEDS_REVIEW.md:480 probably init for kart slot a2: sub_207A974 lookup, sub_2089788, sub_2089CE4(a1+320), sub_2090348(a1+284), sub_2089A24(a1, a1+232)
- docs/function_notes/hk_15.md:28 probably init for kart slot a2: sub_207A974 lookup, sub_2089788, sub_2089CE4(a1+320), sub_2090348(a1+284), sub_2089A24(a1, a1+232)
sub_208BFD8
export/plan0/arm9_main/sub_208BFD8_0208BFD8.c
- docs/function_notes/hk_15.md:29 thunk; calls off_208BFE8(a1+284, a1)
sub_208BFEC
export/plan0/arm9_main/sub_208BFEC_0208BFEC.c
- docs/function_notes/hk_15.md:30 thunk; calls off_208BFFC(a1+284, a1)
sub_208C000
export/plan0/arm9_main/sub_208C000_0208C000.c
- docs/function_notes.md:387 copies current CPU cursor node position via driver+8/node+24 into first output and segment direction driver+16/+20/+24 into second; these drive steering-recovery state1 calculations
- docs/function_notes/hk_15.md:31 mirror of sub_208BEA4 with other offsets: copies 3-vector from (*(a3+8)+24) into a1 and a3+8 +8..+16 into a2; returns x component
sub_208C03C
export/plan0/arm9_main/sub_208C03C_0208C03C.c
- docs/function_notes/hk_15.md:32 returns nonzero when a1+28 is non-null
sub_208C050
export/plan0/arm9_main/sub_208C050_0208C050.c
- docs/function_notes.md:385 recovery target controller lazily calls sub_2041588(kart position+128) if target+28 is absent or active+32 is clear; stores returned record pointer at+28 and marks+32=1 only when non-null
- docs/function_notes.md:436 native recovery callback now selects AREA kind4 CPU node, replacing an inactive predecessor override or preserving an already-active area target; node selection and active latch match218 controlled original callbacks
- docs/function_notes/hk_15.md:33 lazily caches the course AREA (type-4) containing *a1+128 in a1[7] via sub_2041588; a1[8] is the cache-valid flag; returns 1 when found
sub_208C09C
export/plan0/arm9_main/sub_208C09C_0208C09C.c
- docs/function_notes/NEEDS_REVIEW.md:481 probably CPU-driver init: sub_207F8F8, sub_207DE84 (pace logic) on a1+232, sub_207C270 on a1+284
- docs/function_notes/hk_15.md:34 probably CPU-driver init: sub_207F8F8, sub_207DE84 (pace logic) on a1+232, sub_207C270 on a1+284
sub_208C0C8
export/plan0/arm9_main/sub_208C0C8_0208C0C8.c
- vm_model/src/cpu.rs:441 Supplied-node respawn reset (
sub_208C0C8->sub_207F9A8). - docs/function_notes.md:482 supplied-node CPU reset: sub_207F9A8 resets driving cursor/state, sub_207E1D4 clears transient pacing, sub_207C448 clears CPU item-controller state. Driving geometry/recovery/drift/pace fields match306 controlled original callbacks across all37 Figure-8 route nodes; native supplied-node reset wired. CPU item-controller reset remains separate/unported
- docs/function_notes/NEEDS_REVIEW.md:482 probably CPU-driver teardown: sub_207F9A8, sub_207E1D4 on a1+232, sub_207C448 on a1+284
- docs/function_notes/hk_15.md:35 probably CPU-driver teardown: sub_207F9A8, sub_207E1D4 on a1+232, sub_207C448 on a1+284
sub_208C0F0
export/plan0/arm9_main/sub_208C0F0_0208C0F0.c
- docs/function_notes/NEEDS_REVIEW.md:483 probably CPU-driver init for slot a2: sub_207A974 lookup, sets +340 from a table flag, then sub_207FA74, sub_207E200, sub_207C448, sub_207E088
- docs/function_notes/hk_15.md:36 probably CPU-driver init for slot a2: sub_207A974 lookup, sets +340 from a table flag, then sub_207FA74, sub_207E200, sub_207C448, sub_207E088
sub_208C16C
export/plan0/arm9_main/sub_208C16C_0208C16C.c
- docs/function_notes/hk_15.md:37 getter; returns u16 at a1+280
sub_208C178
export/plan0/arm9_main/sub_208C178_0208C178.c
- docs/function_notes/hk_15.md:38 getter; returns word at a1+276
sub_208C180
export/plan0/arm9_main/sub_208C180_0208C180.c
- docs/function_notes/hk_15.md:39 getter; returns word at a1+272
sub_208C188
export/plan0/arm9_main/sub_208C188_0208C188.c
- docs/function_notes/hk_15.md:40 thunk; calls no-arg function pointer at off_208C1A8
sub_208C1AC
export/plan0/arm9_main/sub_208C1AC_0208C1AC.c
- docs/function_notes/hk_15.md:41 thunk; calls no-arg function pointer at off_208C1CC
sub_208C1D0
export/plan0/arm9_main/sub_208C1D0_0208C1D0.c
- docs/function_notes.md:386 route position/direction thunk through runtime slot0x0217B044, pointing to sub_208C000 in Figure-8 race-start dump; caller arguments are forwarded despite no-argument C cast
- docs/function_notes/hk_15.md:42 thunk; calls no-arg function pointer at off_208C1F0
sub_208C1F4
export/plan0/arm9_main/sub_208C1F4_0208C1F4.c
- docs/function_notes.md:384 recovery callback thunk via runtime slot0x0217B050, pointing to sub_208C050 in the local Figure-8 race-start RAM dump; C omits forwarded argument, caller passes kart+784 controller. Target-selection side effects remain source-derived
- docs/function_notes/hk_15.md:43 thunk; calls no-arg function pointer at off_208C214
sub_208C218
export/plan0/arm9_main/sub_208C218_0208C218.c
- docs/function_notes/hk_15.md:44 thunk; calls no-arg function pointer at off_208C238
sub_208C23C
export/plan0/arm9_main/sub_208C23C_0208C23C.c
- docs/function_notes.md:481 CPU supplied-route reset thunk; Figure-8 runtime slot0217B040 resolves to sub_208C0C8. Argument r1 carries the JGPT route pointer despite no arguments shown by the C thunk. Native bridge now passes RespawnPoint.cpu_point to CpuDriver.reset_respawn
- docs/function_notes/hk_15.md:45 thunk; calls no-arg function pointer at off_208C25C
sub_208C260
export/plan0/arm9_main/sub_208C260_0208C260.c
- docs/function_notes.md:486 fallback CPU reset thunk; Figure-8 runtime slot0217B03C resolves to sub_208C0F0. Used when respawn point has no route pointer; native still retains nearest-route fallback pending this branch's reset/RNG/skill replay
- docs/function_notes/hk_15.md:46 thunk; calls no-arg function pointer at off_208C280
sub_208C4E8
export/plan0/arm9_main/sub_208C4E8_0208C4E8.c
- docs/function_notes/hk_15.md:47 calls the function pointer stored at a1+128 (per-object vtable-style hook)
sub_208C504
export/plan0/arm9_main/sub_208C504_0208C504.c
- docs/function_notes/hk_15.md:48 calls the function pointer stored at a1+124 (per-object vtable-style hook)
sub_208C520
export/plan0/arm9_main/sub_208C520_0208C520.c
- vm_model/src/nitro_particle_wheel.rs:132 sub_208C520 restarts the pending-switch timer without replacing handles yet.
- docs/function_notes.md:109 enables continuous drift wheel effect and resets timer
- docs/function_notes.md:336 marks continuous-wheel switch pending and resets unsigned switch timer +98; existing handles stay alive until eleven drifting controller updates (ported request_switch)
sub_208C534
export/plan0/arm9_main/sub_208C534_0208C534.c
- vm_model/src/nitro_particle_wheel.rs:137 Continuous portion of sub_208C534. The detailed callback pauses births;
- game/src/effects.rs:430 calls sub_208C534, so a hit must stop births and request red cleanup.
- docs/function_notes.md:110 disables drift wheel effect, stops/detaches active wheel emitters and invokes cleanup callback when active
- docs/function_notes.md:337 stops wheel smoke pair by setting emitter stop bit0 and dropping handles; active continuous controller invokes +120 callback then sets shutdown pending +52, clears switch timer/request. Detailed +120 pauses continuous births for delayed removal; low-detail +120 removes pair and clears clocks immediately before caller sets pending (continuous request ported, smoke handle ownership separate)
sub_208C5B8
export/plan0/arm9_main/sub_208C5B8_0208C5B8.c
- docs/function_notes.md:105 gets the racer-indexed 136-byte wheel-particle controller
sub_208C5D0
export/plan0/arm9_main/sub_208C5D0_0208C5D0.c
- docs/function_notes.md:203 resets wheel particle controller: detaches continuous effects, destroys red/blue flares, clears timers and callbacks' active state
sub_208C6DC
export/plan0/arm9_main/sub_208C6DC_0208C6DC.c
- vm_model/src/nitro_particle_wheel.rs:1 Rear-wheel transient callbacks sub_208C6DC / sub_208C930.
- docs/function_notes.md:200 attaches blue-flare pair to rear wheel positions/directions for eight ticks; pauses continuous wheel emitters meanwhile, destroys flares and resumes continuous emitters on tick nine. Timer and 16 emitter attachments match nine natural original callbacks; pause/resume flag actions source-derived, continuous emitter flags not included in this capture
- docs/function_notes.md:374 blue flare attaches for8 ticks then cancels on9; its pause/resume target is the SMOKE pair at controller+0/+4 when smoke-active+60, not the red continuous list at+16/+24 (active+56). Native bridge passes smoke-active to the transient clock; pause/resume flags source-derived, timers/16 attachments replay-confirmed
sub_208C884
export/plan0/arm9_main/sub_208C884_0208C884.c
- docs/function_notes.md:106 starts blue charge flare emitter 126 twice, one per rear wheel, after stopping prior flares
sub_208C930
export/plan0/arm9_main/sub_208C930_0208C930.c
- vm_model/src/nitro_particle_wheel.rs:1 Rear-wheel transient callbacks sub_208C6DC / sub_208C930.
- docs/function_notes.md:201 attaches both red-flare pairs to rear wheel positions/directions for ten ticks, destroys them on tick eleven. Timer and 40 emitter attachments match eleven natural original callbacks
sub_208CACC
export/plan0/arm9_main/sub_208CACC_0208CACC.c
- docs/function_notes.md:107 starts red charge flares 22 and 23 at both rear wheels, resets red-flare timer
sub_208CB8C
export/plan0/arm9_main/sub_208CB8C_0208CB8C.c
- vm_model/src/nitro_particle_wheel.rs:167 Original sub_208CB8C order: delayed stop, drift-gated switch, attachment,
- docs/function_notes.md:202 continuous red drift-wheel lifecycle now ported: pending switch increments unsigned +98 only while kart+68 bit0x08 (drifting), activates on update11; signed shutdown +48 runs regardless of drift and clears pending switch on update11. Active controller attaches then resumes births on kart bit0x10 (grounded) unless shutting down, otherwise pauses births. All 645 natural and 645 controlled airborne-probe clocks/callback orders/emitter flags match; correction: bit0x08 is drift, not ground
sub_208CCF0
export/plan0/arm9_main/sub_208CCF0_0208CCF0.c
- vm_model/src/nitro_particle_wheel.rs:157 Continuous portion of immediate reset sub_208CCF0.
- docs/function_notes.md:204 clears continuous wheel effect via cleanup callback and resets activation/expiry timers
- docs/function_notes.md:338 immediate continuous-wheel reset: invokes remove callback if active, clears active/delay/switch fields (ported reset)
sub_208CD2C
export/plan0/arm9_main/sub_208CD2C_0208CD2C.c
- docs/function_notes/hk_15.md:49 clears flag bit 0x8 at +36 on the two objects in a1[4..5] (if a1+56 set), then calls sub_208CDDC; probably hides/unmarks effects
sub_208CD7C
export/plan0/arm9_main/sub_208CD7C_0208CD7C.c
- docs/function_notes/hk_15.md:50 same as sub_208CD2C but clears 0x8 on both +16 and +24 pointer pairs, then sub_208CDDC
sub_208CDDC
export/plan0/arm9_main/sub_208CDDC_0208CDDC.c
- docs/function_notes/hk_15.md:51 clears flag 0x8 at +36 on cached object sets in result[0..1], result[8..11] and result[2..3] (each guarded by result[15]/[16]/[17])
sub_208CEAC
export/plan0/arm9_main/sub_208CEAC_0208CEAC.c
- docs/function_notes/hk_15.md:52 sets flag bit 0x8 at +36 on the a1+16/+20 objects (if a1+56), then calls sub_208CF5C
sub_208CEFC
export/plan0/arm9_main/sub_208CEFC_0208CEFC.c
- docs/function_notes/hk_15.md:53 sets flag bit 0x8 on the +16/+24 object pairs (if a1+56), then calls sub_208CF5C
sub_208CF5C
export/plan0/arm9_main/sub_208CF5C_0208CF5C.c
- docs/function_notes/hk_15.md:54 sets flag bit 0x8 at +36 on the same cached object sets as sub_208CDDC (inverse operation)
sub_208D02C
export/plan0/arm9_main/sub_208D02C_0208D02C.c
- docs/function_notes/hk_15.md:55 for 2 entries copies a u16 triple from a2 into object +80..+84 and sets its world position (+40..+48) = a3 vector + base from object +32
sub_208D0DC
export/plan0/arm9_main/sub_208D0DC_0208D0DC.c
- docs/function_notes/hk_15.md:56 for 2 entries copies a u16 triple into two objects (+16 and +24 pairs) and writes their world positions from a3 plus base (+32)
sub_208D1EC
export/plan0/arm9_main/sub_208D1EC_0208D1EC.c
- docs/function_notes.md:205 clears active continuous wheel effect via cleanup callback and resets timers only when active
- docs/function_notes.md:341 low-detail stop-request callback: if continuous active, invokes remove callback and clears continuous active/delay/switch clocks; differs from detailed pause-only callback sub_208D234 (source-derived)
sub_208D234
export/plan0/arm9_main/sub_208D234_0208D234.c
- docs/function_notes/hk_15.md:57 sets flag bit 0x2 at +36 on the +16/+24 object pairs (if result+56 set)
sub_208D298
export/plan0/arm9_main/sub_208D298_0208D298.c
- docs/function_notes/hk_15.md:58 destroys two emitter handles at result+16/+20 via sub_208B710 and zeroes them
sub_208D2D8
export/plan0/arm9_main/sub_208D2D8_0208D2D8.c
- docs/function_notes/hk_15.md:59 destroys emitter handles at +16 and +24 pairs via sub_208B710 and zeroes them
sub_208D328
export/plan0/arm9_main/sub_208D328_0208D328.c
- docs/function_notes/hk_15.md:60 clears flag bit 0x2 at +36 on the +16 object pair
sub_208D358
export/plan0/arm9_main/sub_208D358_0208D358.c
- docs/function_notes/hk_15.md:61 clears flag bit 0x2 at +36 on the +16/+24 object pairs
sub_208D3A8
export/plan0/arm9_main/sub_208D3A8_0208D3A8.c
- docs/function_notes/hk_15.md:62 sets flag bit 0x2 at +36 on the +16 object pair
sub_208D3D8
export/plan0/arm9_main/sub_208D3D8_0208D3D8.c
- docs/function_notes/hk_15.md:63 sets flag bit 0x2 at +36 on the +16/+24 object pairs
sub_208D428
export/plan0/arm9_main/sub_208D428_0208D428.c
- docs/function_notes/hk_15.md:64 fills the +16/+20 emitter handles by spawning from table off_208D468 via sub_208B7BC with kart a1+80 as the source object
sub_208D46C
export/plan0/arm9_main/sub_208D46C_0208D46C.c
- docs/function_notes/hk_15.md:65 spawns emitters into the +16 (from a1+80) and +24 (from a1+84) handle pairs via sub_208B7BC with table off_208D4C0
sub_208D4C4
export/plan0/arm9_main/sub_208D4C4_0208D4C4.c
- vm_model/src/nitro_particle_wheel.rs:67 sub_208D4C4: smoke anticipates movement by subtracting its initial velocity.
- docs/function_notes.md:357 wheel smoke attach: initial SPL velocity=kart+944 displacement times2867 truncated fx12; emitter position=wheel minus velocity plus resource offset; grounded bit0x10 clears birth pause, airborne sets pause. Position/velocity match 100 original wheel records; pause flag handling source-derived
- docs/function_notes/hk_15.md:66 updates two effect emitters per kart: scales kart offsets (+944..+952) by dword_208D64C, transforms via sub_2148504, writes world positions, flag 0x2 by kart
sub_208D650
export/plan0/arm9_main/sub_208D650_0208D650.c
- docs/function_notes.md:111 stops and detaches the two continuous wheel emitters by setting emitter +36 bit 1
sub_208D6B0
export/plan0/arm9_main/sub_208D6B0_0208D6B0.c
- docs/function_notes/NEEDS_REVIEW.md:484 probably resets a kart effect: frees old pair via sub_208B6D0 if a1+60 set, respawns two emitters from table off_208D750 (sub_208B7BC), sets +108/+114/+129
- docs/function_notes/hk_15.md:67 probably resets a kart effect: frees old pair via sub_208B6D0 if a1+60 set, respawns two emitters from table off_208D750 (sub_208B7BC), sets +108/+114/+129
sub_208D758
export/plan0/arm9_main/sub_208D758_0208D758.c
- docs/function_notes.md:108 allocates per-racer wheel controllers: detailed smoke/red resources 20/17/18, low-detail CPU resources 21/19, red flares 22/23
sub_208D978
export/plan0/arm9_main/sub_208D978_0208D978.c
- vm_model/src/kart/water.rs:17 Not ported: the splash and wading effects (
sub_208D978,sub_2083EC4,sub_20838DC), the - docs/function_notes/NEEDS_REVIEW.md:485 probably per-frame spawner: when off_208DA88 flag set and a2 nonzero, takes a pooled record via sub_20172D8, links it, spawns emitters from off_208DA90
- docs/function_notes/hk_15.md:68 probably per-frame spawner: when off_208DA88 flag set and a2 nonzero, takes a pooled record via sub_20172D8, links it, spawns emitters from off_208DA90
sub_208DA94
export/plan0/arm9_main/sub_208DA94_0208DA94.c
- docs/function_notes/hk_15.md:69 anim-blend tick: while a1[42] < 0x37 calls sub_2087DE0 on three anim handles (+144/+148/+152); otherwise sets a1[34]=1 and returns 1 (finished)
sub_208DAD4
export/plan0/arm9_main/sub_208DAD4_0208DAD4.c
- docs/function_notes/hk_15.md:70 resets three anim handles (sub_2087F84) and scale fields +156..+164 to 4096; if a2 spawns effects 8/9/10 via sub_208B7BC, then calls a function pointer
sub_208DB58
export/plan0/arm9_main/sub_208DB58_0208DB58.c
- docs/function_notes/hk_15.md:71 anim tick: while a1[42] < a1[43] calls sub_2087DE0 on handles +144/+148; otherwise sets a1[34]=1 and returns 1
sub_208DB94
export/plan0/arm9_main/sub_208DB94_0208DB94.c
- docs/function_notes/hk_15.md:72 resets anim handle +144 and scale fields to 22528, sets a1[43]=39, resets +148; if a2 spawns effects 64 and 65
sub_208DC08
export/plan0/arm9_main/sub_208DC08_0208DC08.c
- docs/function_notes/hk_15.md:73 anim tick on handles +144/+148 with completion check a1[42] >= a1[43], which sets a1[34]=1
sub_208DC50
export/plan0/arm9_main/sub_208DC50_0208DC50.c
- docs/function_notes/hk_15.md:74 sets scale fields to dword_208DCB0, resets anim handles +144/+148 via sub_2087F84, sets a1[43]=32, spawns effects dword_208DCB4 and dword_208DCB8
sub_208DCBC
export/plan0/arm9_main/sub_208DCBC_0208DCBC.c
- docs/function_notes/hk_15.md:75 sets a1[43] from the current animation duration (sub_2087D0C, converted to 16-bit frames) and resets anim handles via sub_2087F84
sub_208DD10
export/plan0/arm9_main/sub_208DD10_0208DD10.c
- docs/function_notes/hk_15.md:76 if a1[42]==38 spawns effect 3; if below 0x37 ticks three anim handles; otherwise sets a1[34]=1 and returns 1
sub_208DD6C
export/plan0/arm9_main/sub_208DD6C_0208DD6C.c
- docs/function_notes/hk_15.md:77 resets three anim handles and scale fields from dword_208DDF0; if a2 spawns effects 34, 1 and 2 then calls a function pointer
sub_208DDF4
export/plan0/arm9_main/sub_208DDF4_0208DDF4.c
- docs/function_notes/hk_15.md:78 spawns a scene effect group from 22-word records in table off_208E084 indexed by category a2; positions via sub_2013730/sub_2084F10, emitters via sub_208823C
sub_208E098
export/plan0/arm9_main/sub_208E098_0208E098.c
- docs/function_notes/hk_15.md:79 allocates the five effect-emitter groups from table off_208E230 (sub_2036BEC heap, 56-byte sub-objects at +36..+38), sets per-slot params, links them
sub_208E23C
export/plan0/arm9_main/sub_208E23C_0208E23C.c
- docs/function_notes/NEEDS_REVIEW.md:486 probably samples two boolean state flags (sub_2047974) into a 3-field status record at off_208E2BC; zeroes it when sub_20D2BE8 fails
- docs/function_notes/hk_15.md:80 probably samples two boolean state flags (sub_2047974) into a 3-field status record at off_208E2BC; zeroes it when sub_20D2BE8 fails
sub_208E2C8
export/plan0/arm9_main/sub_208E2C8_0208E2C8.c
- docs/function_notes/NEEDS_REVIEW.md:487 probably writes a 3-field status record at a1 from sub_20D2BB0/sub_20D2B78 with level a2; on failure stores -1 sentinels at off_208E354
- docs/function_notes/hk_15.md:81 probably writes a 3-field status record at a1 from sub_20D2BB0/sub_20D2B78 with level a2; on failure stores -1 sentinels at off_208E354
sub_208E358
export/plan0/arm9_main/sub_208E358_0208E358.c
- docs/function_notes/hk_15.md:82 iterates the active list at off_208E3FC; for entries with +180 set, copies position (>>4) and updates matrix via sub_20849C0/sub_20849F8
sub_208E400
export/plan0/arm9_main/sub_208E400_0208E400.c
- docs/function_notes/hk_15.md:83 iterates the active list at off_208E48C, calls per-entry callback at +132, increments +168, and moves finished entries (+136==1) back to the pool
sub_208E490
export/plan0/arm9_main/sub_208E490_0208E490.c
- vm_model/src/mapobj/boo.rs:56 effect (
sub_208E490(3, ..)) and sounds 390/391 (reported as [BakuEvent]). - vm_model/src/mapobj/boo.rs:537
sub_208E490(3, position, 1)particle effect, and the sound id ofsub_210B7A8 - docs/function_notes/NEEDS_REVIEW.md:488 probably allocates a pooled effect record for slot a1 via sub_20172D8, sets position from a2, calls callback +128 with a3, links it, bumps pool counter (cap 10)
- docs/function_notes/hk_15.md:84 probably allocates a pooled effect record for slot a1 via sub_20172D8, sets position from a2, calls callback +128 with a3, links it, bumps pool counter (cap 10)
sub_208E570
export/plan0/arm9_main/sub_208E570_0208E570.c
- docs/function_notes/NEEDS_REVIEW.md:489 probably initializes the kart-effect system: 96-byte context (sub_2036BEC), list heads, sub-systems sub_208E2C8/sub_208E23C/sub_208E098, sub_208DDF4 category
- docs/function_notes/hk_15.md:85 probably initializes the kart-effect system: 96-byte context (sub_2036BEC), list heads, sub-systems sub_208E2C8/sub_208E23C/sub_208E098, sub_208DDF4 category
sub_208E808
export/plan0/arm9_main/sub_208E808_0208E808.c
- docs/function_notes/hk_15.md:86 stores its argument into off_208E828 when the game-state type at +12 equals 5
sub_208E82C
export/plan0/arm9_main/sub_208E82C_0208E82C.c
- docs/function_notes/NEEDS_REVIEW.md:490 probably builds a billboard matrix from a4 scale fields (+28/+32 >>8) and a2/a3 vectors (sub_2147218, sub_214733C, sub_214A514), written via off_208E990/994
- docs/function_notes/hk_15.md:87 probably builds a billboard matrix from a4 scale fields (+28/+32 >>8) and a2/a3 vectors (sub_2147218, sub_214733C, sub_214A514), written via off_208E990/994
sub_208E99C
export/plan0/arm9_main/sub_208E99C_0208E99C.c
- docs/function_notes/hk_15.md:88 updates effect list at a1+8: ages entries against table off_208EB04, returns expired ones to the pool at off_208EB08, spawns new ones via callback off_208EB0C
sub_208EB10
export/plan0/arm9_main/sub_208EB10_0208EB10.c
- docs/function_notes/hk_15.md:89 sets flag +24 = 1 on the object (marks it active)
sub_208EB1C
export/plan0/arm9_main/sub_208EB1C_0208EB1C.c
- docs/function_notes/NEEDS_REVIEW.md:491 probably spawns a kart-attached effect record from pool off_208EC54 when game-state type +12 == 5; positions from kart data (sub_207A974, +68..+76 x16)
- docs/function_notes/hk_15.md:90 probably spawns a kart-attached effect record from pool off_208EC54 when game-state type +12 == 5; positions from kart data (sub_207A974, +68..+76 x16)
sub_208EC64
export/plan0/arm9_main/sub_208EC64_0208EC64.c
- docs/function_notes/hk_15.md:91 allocates a pooled record from off_208ECD4 (stores a1 at +20, +24=0, +28=1024 scale) and links it into the active list; returns the record
sub_208ECD8
export/plan0/arm9_main/sub_208ECD8_0208ECD8.c
- docs/function_notes/NEEDS_REVIEW.md:492 probably initializes an effect emitter a1 for kart a2[8]: composes three scaled kart-matrix vectors via sub_2148504, sets a1+8 from a2[7], position >>4
- docs/function_notes/hk_15.md:92 probably initializes an effect emitter a1 for kart a2[8]: composes three scaled kart-matrix vectors via sub_2148504, sets a1+8 from a2[7], position >>4
sub_208EE40
export/plan0/arm9_main/sub_208EE40_0208EE40.c
- docs/function_notes/hk_15.md:93 copies an emitter start position from source a2 (vector at +20, scale +28) into result+8..+24, position values >>4
sub_208EE7C
export/plan0/arm9_main/sub_208EE7C_0208EE7C.c
- docs/function_notes/hk_15.md:94 per-frame draw of effect list at off_208F060: sets GPU/3D state (off_208F06C..08C), calls sub_208E82C per child pair to draw billboard sprites
sub_208F0A0
export/plan0/arm9_main/sub_208F0A0_0208F0A0.c
- docs/function_notes/hk_15.md:95 iterates the effect list at off_208F0F4 and calls sub_208E99C (effect list update) on each entry
sub_208F0F8
export/plan0/arm9_main/sub_208F0F8_0208F0F8.c
- docs/function_notes/NEEDS_REVIEW.md:493 probably builds a kart/racer effect set: resource chosen by game-state type (+12 == 5), allocates 56-byte header and 48/28-byte arrays (sub_2036BEC), 3D
- docs/function_notes/hk_15.md:96 probably builds a kart/racer effect set: resource chosen by game-state type (+12 == 5), allocates 56-byte header and 48/28-byte arrays (sub_2036BEC), 3D
sub_208F3D0
export/plan0/arm9_main/sub_208F3D0_0208F3D0.c
- docs/function_notes/hk_15.md:97 wrapper: if sub_207BFAC(a1) is true calls sub_207C47C(a1,a2); otherwise calls it when a2+184 is below dword_208F430 (threshold check on a2+176)
sub_208F434
export/plan0/arm9_main/sub_208F434_0208F434.c
- docs/function_notes/hk_15.md:98 sets a1+16=1; if sub_207BFAC(a1) is true, calls sub_207C47C when a2 fields +44..+47 meet thresholds dword_208F4E0/dword_208F4E4
sub_208F4E8
export/plan0/arm9_main/sub_208F4E8_0208F4E8.c
- docs/function_notes/hk_15.md:99 if sub_207BFAC(a1) true, computes fixed-point value via sub_208537C and calls sub_207C548 or sub_207C47C vs dword_208F5BC; else threshold check on a2+184
sub_208F5C4
export/plan0/arm9_main/sub_208F5C4_0208F5C4.c
- docs/function_notes/hk_15.md:100 like sub_208F434 but with thresholds dword_208F668/dword_208F66C and sub_207C548 for the second branch
sub_208F670
export/plan0/arm9_main/sub_208F670_0208F670.c
- docs/function_notes/hk_15.md:101 dispatch: if kart type at off_208F6C8 + 528idx + 96 == 3 calls the function at off_208F6CC, else the function at off_208F6D0 (no-arg)
sub_208F6D4
export/plan0/arm9_main/sub_208F6D4_0208F6D4.c
- docs/function_notes/agent_04.md:4 CPU item handler: when wait timer expired and aim flags (+0xB0/+0xB4, angle +0xB8 below limit) hold, uses item via sub_207C614
sub_208F754
export/plan0/arm9_main/sub_208F754_0208F754.c
- docs/function_notes/agent_04.md:5 CPU item handler: same as sub_208F6D4 with a different angle limit literal
sub_208F7D4
export/plan0/arm9_main/sub_208F7D4_0208F7D4.c
- docs/function_notes/agent_04.md:6 CPU item handler: when wait timer expired, uses item immediately (sub_207C614)
sub_208F810
export/plan0/arm9_main/sub_208F810_0208F810.c
- docs/function_notes/agent_04.md:7 CPU item handler: when timer expired and aim flags/angle window (+0xB8 below, +0xBC above limits) hold, uses item
sub_208F8AC
export/plan0/arm9_main/sub_208F8AC_0208F8AC.c
- docs/function_notes/agent_04.md:8 CPU item handler: same as sub_208F810 with different angle limits
sub_208F948
export/plan0/arm9_main/sub_208F948_0208F948.c
- docs/function_notes/agent_04.md:9 dispatch by kart state (kart +0x60 == 4) to one of two item callbacks via function pointers
sub_208F9AC
export/plan0/arm9_main/sub_208F9AC_0208F9AC.c
- docs/function_notes/agent_04.md:10 CPU item handler: when timer expired, rolls rank-based random and throws one way (sub_207C47C) or the other (sub_207C548)
sub_208FA50
export/plan0/arm9_main/sub_208FA50_0208FA50.c
- docs/function_notes/agent_04.md:11 CPU item handler: sets flag +16, when timer expired and aim flags hold picks throw direction from angle (sub_207C548 or sub_207C47C)
sub_208FAFC
export/plan0/arm9_main/sub_208FAFC_0208FAFC.c
- docs/function_notes/agent_04.md:12 CPU item handler: same as sub_208F9AC with different random threshold
sub_208FBA0
export/plan0/arm9_main/sub_208FBA0_0208FBA0.c
- docs/function_notes/agent_04.md:13 CPU item handler: rank-random throw direction, else aim-flag/angle based throw direction
sub_208FCAC
export/plan0/arm9_main/sub_208FCAC_0208FCAC.c
- docs/function_notes/agent_04.md:14 CPU item handler: aim-flag and angle test selects throw direction (sub_207C548 / sub_207C47C)
sub_208FD24
export/plan0/arm9_main/sub_208FD24_0208FD24.c
- docs/function_notes/agent_04.md:15 dispatch by kart state (kart +0x60 == 4) to one of two item callbacks via function pointers
sub_208FDCC
export/plan0/arm9_main/sub_208FDCC_0208FDCC.c
- docs/function_notes/agent_04.md:17 CPU item handler (second wait-timer variant): when timer at +0 expired and kart +0x70 below 40960, uses item (sub_207C6D0)
sub_208FE1C
export/plan0/arm9_main/sub_208FE1C_0208FE1C.c
- docs/function_notes/agent_04.md:18 CPU item handler: when timer at +0 expired, uses item (sub_207C614)
sub_208FE58
export/plan0/arm9_main/sub_208FE58_0208FE58.c
- docs/function_notes/agent_04.md:19 CPU item handler: when timer expired, rank-random picks throw direction
sub_208FEFC
export/plan0/arm9_main/sub_208FEFC_0208FEFC.c
- docs/function_notes/agent_04.md:20 CPU item handler: rank-random throw direction when timer expired, else +0xB0/+0xB8 angle test throws (sub_207C47C)
sub_208FFD8
export/plan0/arm9_main/sub_208FFD8_0208FFD8.c
- docs/function_notes/agent_04.md:21 sets item-state flag +16 = 1
sub_208FFE4
export/plan0/arm9_main/sub_208FFE4_0208FFE4.c
- docs/function_notes/agent_04.md:22 CPU item handler: like sub_208FE58 with reversed direction choice
sub_2090088
export/plan0/arm9_main/sub_2090088_02090088.c
- docs/function_notes/agent_04.md:23 CPU item handler: rank-random throw direction, else aim-flag/angle based throw direction
sub_2090194
export/plan0/arm9_main/sub_2090194_02090194.c
- docs/function_notes/agent_04.md:24 sets item-state flag +16 = 1
sub_20901A0
export/plan0/arm9_main/sub_20901A0_020901A0.c
- docs/function_notes/agent_04.md:25 CPU item handler: when timer expired and kart +0x70 below 40960, uses item (sub_207C614)
sub_20901F0
export/plan0/arm9_main/sub_20901F0_020901F0.c
- docs/function_notes/agent_04.md:26 CPU item handler: when timer expired or +0xB0 set, and kart +0x70 below 40960, uses item
sub_209024C
export/plan0/arm9_main/sub_209024C_0209024C.c
- docs/function_notes/agent_04.md:27 CPU item handler: when timer expired, uses item (sub_207C614)
sub_2090288
export/plan0/arm9_main/sub_2090288_02090288.c
- docs/function_notes/agent_04.md:28 CPU item handler: uses item when timer expired, or when +0xB0 flag is set
sub_20902D0
export/plan0/arm9_main/sub_20902D0_020902D0.c
- docs/function_notes/agent_04.md:29 CPU item handler: uses item when +0xB0 flag is set
sub_209033C
export/plan0/arm9_main/sub_209033C_0209033C.c
- docs/function_notes/agent_04.md:30 thunk: calls function pointer at 0x02090344 with same args (CPU item callback)
sub_2090348
export/plan0/arm9_main/sub_2090348_02090348.c
- docs/function_notes/agent_04.md:31 thunk: calls function pointer at 0x02090350 with same args
sub_2090354
export/plan0/arm9_main/sub_2090354_02090354.c
- docs/function_notes.md:584 NOT battle AI. Picks the CPU item-handler table by class ((0x021759A0+20) == 1/2/3/else) into 7 callback slots (0x217B07C data table, 0x217B084/80/70/78/74/8C/88 = handlers sub_208FAFC/F7D4/F9AC/F6D4/F4E8/F3D0 ...). Already ported as cpu::CpuItems; battle CPUs use the same class tables. Battle CPU driving = same driver as races (route follow with random fork pick, cpu.rs advance(); turn scale 4096), no separate hunting AI found.
sub_20905A8
export/plan0/arm9_main/sub_20905A8_020905A8.c
- docs/function_notes/agent_04.md:33 CPU tick: counts frames while kart flags +0x44 & 0xC0 (item held behind), wraps counter at 120, 5-tick grace
sub_2090638
export/plan0/arm9_main/sub_2090638_02090638.c
- docs/function_notes/agent_04.md:34 CPU steering: eases kart yaw (+0x236) toward target angle from path/steer table (92-byte records at kart +0x78)
sub_2090748
export/plan0/arm9_main/sub_2090748_02090748.c
- vm_model/src/kart/speed.rs:92 Bullet Bill: the speed limit is this on any terrain, whatever the class (
sub_2090748 - game/src/racers.rs:262 a Bullet Bill rider: fixed speed 43008, first branch at forks (
sub_2090748) - game/src/racers.rs:267 forward speed is 43008 from the first tick (
sub_2090748); the slow rise of |velocity| - docs/function_notes/agent_04.md:35 CPU driver update: gets target node (sub_207EAFC), tests node reached (sub_2080BF4/2080C64), sets speed fields +0x2A8, then steer or advance node
sub_209081C
export/plan0/arm9_main/sub_209081C_0209081C.c
- docs/function_notes/agent_04.md:36 CPU driver tick: runs sub_2090748 then sub_20905A8
sub_2090838
export/plan0/arm9_main/sub_2090838_02090838.c
- docs/function_notes/agent_04.md:37 CPU driver: if target slot changed, switches item/path state (sub_207FFA4)
sub_209086C
export/plan0/arm9_main/sub_209086C_0209086C.c
- docs/function_notes/agent_04.md:38 CPU driver init for kart slot: stores slot, sets state, clears counters and kart +0x388, calls sub_206CDD4
sub_20908D0
export/plan0/arm9_main/sub_20908D0_020908D0.c
- docs/function_notes/agent_04.md:40 record time compare: minutes? + seconds? + ms < stored best time for course a1-1
sub_2090920
export/plan0/arm9_main/sub_2090920_02090920.c
- docs/function_notes/agent_04.md:41 loads staff ghost time file (/data/Ghost/staff_ghost_time.bin) via callback with course id
sub_2090940
export/plan0/arm9_main/sub_2090940_02090940.c
- docs/function_notes/agent_04.md:43 returns 1 if all 8 cups x 4 classes have a record and every record has rank value 0 (all gold), else 0
sub_20909CC
export/plan0/arm9_main/sub_20909CC_020909CC.c
- docs/function_notes/agent_04.md:44 checks cup-record completion for the current mode/class (+132/+136/+140/+124 of a global) and returns 2, 1 or 0
sub_2090B24
export/plan0/arm9_main/sub_2090B24_02090B24.c
- docs/function_notes/agent_04.md:45 unlock check: for flags 20-23 sets unlock if cup records 3/7 are complete; returns bitmask of newly unlocked items
sub_2090CF8
export/plan0/arm9_main/sub_2090CF8_02090CF8.c
- docs/function_notes/agent_04.md:46 unlock check: for each of 4 classes tests cup records 0-7 and sets unlock flags 0-16; returns bitmask of newly unlocked items
sub_2090FF4
export/plan0/arm9_main/sub_2090FF4_02090FF4.c
- docs/function_notes/agent_04.md:47 runs sub_2090CF8 and sub_2090B24, then raises unlock level (sub_2056D54) to 2,3,4 on cup 3/7 completion; returns bitmask
sub_209119C
export/plan0/arm9_main/sub_209119C_0209119C.c
- docs/function_notes/agent_04.md:48 thunk: calls function pointer at 0x020911A4
sub_20911A8
export/plan0/arm9_main/sub_20911A8_020911A8.c
- docs/function_notes/agent_04.md:49 after results, if game mode is 10 runs the unlock check, then updates save/state (sub_2056D40, sub_2057D9C)
sub_2091214
export/plan0/arm9_main/sub_2091214_02091214.c
- docs/function_notes/agent_04.md:51 registers a decoration draw descriptor (sub_209BEF0) with load/draw/delete callbacks
sub_2091238
export/plan0/arm9_main/sub_2091238_02091238.c
- docs/function_notes/agent_04.md:52 registers a second decoration draw descriptor (sub_209BEF0) with its own callbacks
sub_209125C
export/plan0/arm9_main/sub_209125C_0209125C.c
- docs/function_notes/agent_04.md:53 allocates an actor-family class (sub_209BF70) for an object type
sub_20912A0
export/plan0/arm9_main/sub_20912A0_020912A0.c
- vm_model/src/mapobj/snowman.rs:1 Snowman (0x19D, DK Pass): tick
sub_20912A0, initsub_209151C, kart callbacksub_2091828 - vm_model/src/mapobj/snowman.rs:73
sub_20912A0, one tick. - docs/function_notes.md:427 snowman tick: 0 sway; 1 head flies (gravity 1024, min -24576) to the ground (2*scale), or removed below 0 if setting0 lo > 0; 2 lies 299 ticks; 3 head rises back while body regrows (64 a tick after 10), contact back -> 0
- docs/function_notes/agent_04.md:54 uncertain: snowman-like object tick: fall with gravity -1024, bounce, plays sound 354, wobble angle
sub_209151C
export/plan0/arm9_main/sub_209151C_0209151C.c
- vm_model/src/mapobj/snowman.rs:1 Snowman (0x19D, DK Pass): tick
sub_20912A0, initsub_209151C, kart callbacksub_2091828 - docs/function_notes.md:428 snowman init: scales 4096, head rest 0xF333scale, floor 2scale
- docs/function_notes/agent_04.md:55 per-object init loop: sets scale +0xB0/+0xB4 to 4096 and derives radii +0xC0..+0xC4 from +0x20
sub_20915C0
export/plan0/arm9_main/sub_20915C0_020915C0.c
- vm_model/src/mapobj/snowman.rs:2 (item callback
sub_20917D0), drawn assman_bottomscaled by +0xB4 (sub_20915C0) and - game/src/objects.rs:224 the snowman (
sub_20915C0/sub_20916A0): body, then the head raised by its height - docs/function_notes.md:429 snowman body draw (sman_bottom, billboard, scale +0xB4)
- docs/function_notes/agent_04.md:56 draw: matrix push, billboard matrix, scale, per-object scale, then model draw (sub_209BB2C)
sub_2091654
export/plan0/arm9_main/sub_2091654_02091654.c
- docs/function_notes/agent_04.md:57 thunk: calls function pointer with the model-resource pointer (class load)
sub_209166C
export/plan0/arm9_main/sub_209166C_0209166C.c
- docs/function_notes/agent_04.md:58 loads sman_bottom.nsbmd model
sub_20916A0
export/plan0/arm9_main/sub_20916A0_020916A0.c
- vm_model/src/mapobj/snowman.rs:3
sman_topraised by +0xB8 and swayed about z by +0xA4 (sub_20916A0), both as sprites. - game/src/objects.rs:224 the snowman (
sub_20915C0/sub_20916A0): body, then the head raised by its height - docs/function_notes.md:430 snowman head draw (sman_top, billboard, raised +0xB8, z sway +0xA4)
- docs/function_notes/agent_04.md:59 draw: translate by +0xB8/16 on Y, scale, rotation from table indexed by angle +0xA4, model draw
sub_2091784
export/plan0/arm9_main/sub_2091784_02091784.c
- docs/function_notes/agent_04.md:60 thunk: calls function pointer with a model-resource pointer
sub_209179C
export/plan0/arm9_main/sub_209179C_0209179C.c
- docs/function_notes/agent_04.md:61 loads sman_top.nsbmd model
sub_20917D0
export/plan0/arm9_main/sub_20917D0_020917D0.c
- vm_model/src/mapobj/snowman.rs:2 (item callback
sub_20917D0), drawn assman_bottomscaled by +0xB4 (sub_20915C0) and - docs/function_notes.md:426 snowman item callback: same knock as sub_2091828
- docs/function_notes/agent_04.md:62 object hit callback: on hit kind 1 starts bounce (state +0xC8 = 1, velocity 0x8000)
sub_2091828
export/plan0/arm9_main/sub_2091828_02091828.c
- vm_model/src/mapobj/snowman.rs:1 Snowman (0x19D, DK Pass): tick
sub_20912A0, initsub_209151C, kart callbacksub_2091828 - vm_model/src/mapobj/snowman.rs:62
sub_2091828: own-reaction 1 (a star kart) knocks its head off. - docs/function_notes.md:425 snowman kart callback: code 1 -> head thrown up (0xF333, 0x8000), body scales 0, no contact, state 1
- docs/function_notes/agent_04.md:63 object hit callback: like sub_20917D0 plus sub_20D26F8 (hit effect)
sub_209188C
export/plan0/arm9_main/sub_209188C_0209188C.c
- docs/function_notes/agent_04.md:64 sets flag bit in object flags (+2)
sub_20918CC
export/plan0/arm9_main/sub_20918CC_020918CC.c
- docs/function_notes/agent_04.md:65 draw: matrix, billboard, scale, set model animation frame from class data, model draw
sub_209196C
export/plan0/arm9_main/sub_209196C_0209196C.c
- docs/function_notes/agent_04.md:66 loads cow.nsbmd and cow.nsbtp
sub_20919E8
export/plan0/arm9_main/sub_20919E8_020919E8.c
- docs/function_notes/agent_04.md:67 uncertain: object tick: when triggered spawns 3 random debris objects (sub_209219C), plays sound 392, otherwise checks kart proximity
sub_2091F24
export/plan0/arm9_main/sub_2091F24_02091F24.c
- docs/function_notes/agent_04.md:68 table lookup: second entry of 8-byte sin/cos table at index angle>>4 (cos)
sub_2091F44
export/plan0/arm9_main/sub_2091F44_02091F44.c
- docs/function_notes/agent_04.md:69 fx12 multiply (a*b)>>12
sub_2091F54
export/plan0/arm9_main/sub_2091F54_02091F54.c
- docs/function_notes/agent_04.md:70 table lookup: first entry of sin/cos table at index angle>>4 (sin)
sub_2091F6C
export/plan0/arm9_main/sub_2091F6C_02091F6C.c
- vm_model/src/mapobj/boo.rs:17
sub_2091F6C(ctx, n)is(next * n) >> 32(and 0 without drawing when n is 0), and - vm_model/src/mapobj/boo.rs:161
(rand * n) >> 32assub_2091F6C(ctx, n)(no draw when n is 0). - docs/function_notes/agent_04.md:71 random in [0, a2) using the object RNG (returns 0 if a2 == 0)
sub_2091FD8
export/plan0/arm9_main/sub_2091FD8_02091FD8.c
- docs/function_notes/agent_04.md:72 re-seeds each object's random wait timer (+0xA4 = 200 + rand*25)
sub_20920A0
export/plan0/arm9_main/sub_20920A0_020920A0.c
- docs/function_notes/agent_04.md:73 draw: sets model frame, matrix with position/16, scale, model draw
sub_2092140
export/plan0/arm9_main/sub_2092140_02092140.c
- docs/function_notes/agent_04.md:74 loads kanoke_64.nsbmd model
sub_2092194
export/plan0/arm9_main/sub_2092194_02092194.c
- docs/function_notes/agent_04.md:75 getter: object +0xC0 (16-bit)
sub_209219C
export/plan0/arm9_main/sub_209219C_0209219C.c
- vm_model/src/mapobj/bats.rs:4 The bats sit in a pool that the 0x19E object creates;
sub_209219Ctakes a free one and fills - vm_model/src/mapobj/bats.rs:77
sub_209219C(0x8C, pos, vel, 0xF, first, kind): takes two numbers fromrng(sleep 0..29, - docs/function_notes.md:440 takes a bat from the 6 bat pool (sub_2100138/sub_209BBFC, none free: nothing, no draws), sets lifetimes +0xB0=rnd(30), +0xB4=15, +0xB8=0x8C+rnd(8), position (+4), velocity (+0xA0), first (+0xBC), kind (+0xC0), state +0xD4=0, hit mask +0xD0=0; the wobble +0xC4.. is not reset
- docs/function_notes/agent_04.md:76 spawns a short-lived debris/effect object with random lifetime, velocity and size from args
sub_2092484
export/plan0/arm9_main/sub_2092484_02092484.c
- docs/function_notes/agent_04.md:77 registers a decoration draw descriptor (sub_209BEF0)
sub_20924A8
export/plan0/arm9_main/sub_20924A8_020924A8.c
- vm_model/src/mapobj/bats.rs:2
sub_2092B3C) and the bats it throws (0x19F, def0x2166664, factorysub_20924A8, tick - docs/function_notes/agent_04.md:78 wrapper: calls sub_209BFA8 with a class record
sub_20924D8
export/plan0/arm9_main/sub_20924D8_020924D8.c
- vm_model/src/mapobj/bats.rs:3
sub_20924D8, kart callbacksub_209297C, deletesub_2092B20, drawsub_209280C). - vm_model/src/mapobj/bats.rs:95
sub_20924D8: one tick; false when the bat is deleted (sub_20D2398). - docs/function_notes.md:441 bat tick: wobble +0xC4 += +0xC8 (+60 a tick, turns at 8160); state 0 sleeps +0xB0 ticks, then accelerates 0.1 along facing (+0x40/+0x48) and -0.1 down for +0xB4 ticks; 1 +0.1 up until vy>0 (vy=0); 2 glide +0xB8 ticks; 3 fly away (vy +1 a tick, facing -0.05) and delete (sub_20D2398) at y>=1802240; flap frame +0xAC and sound 357 not ported
- docs/function_notes/agent_04.md:79 debris object tick: gravity-like accel, 4-state flight (rise, fall, hold, drop), animation frame advance, deleted below y limit
sub_209280C
export/plan0/arm9_main/sub_209280C_0209280C.c
- vm_model/src/mapobj/bats.rs:3
sub_20924D8, kart callbacksub_209297C, deletesub_2092B20, drawsub_209280C). - docs/function_notes/agent_04.md:80 draw: matrix with billboard 2, rotation by angle table (sign by +0xCC), scale, model draw
sub_2092928
export/plan0/arm9_main/sub_2092928_02092928.c
- docs/function_notes/agent_04.md:81 thunk: calls function pointer with a model-resource pointer
sub_2092940
export/plan0/arm9_main/sub_2092940_02092940.c
- docs/function_notes/agent_04.md:82 loads basabasa.nsbmd and basabasa.nsbtp
sub_209297C
export/plan0/arm9_main/sub_209297C_0209297C.c
- vm_model/src/mapobj/bats.rs:3
sub_20924D8, kart callbacksub_209297C, deletesub_2092B20, drawsub_209280C). - vm_model/src/mapobj/bats.rs:20 [
Bat::hit] (sub_209297C) follows the code; the push (+0x10) it sets was not seen in a - vm_model/src/mapobj/bats.rs:53 +0x10: the shove a kart gave it (
sub_209297C); the generic object mover uses it. - vm_model/src/mapobj/bats.rs:153
sub_209297C: kart numberkart_indextouched it (once per kart): its push becomes 1.2 - game/src/objects.rs:1653
sub_209297C: pushed aside by each kart once - docs/function_notes.md:442 bat kart callback (handler 12 for mode 0 karts): once per kart (mask +0xD0), sets the object push +0x10 to 1.2 units along the kart-bat vector minus its part along the bat facing (y kept), or along the facing if that is shorter than 4 units
- docs/function_notes/agent_04.md:83 object vs kart overlap callback: pushes object velocity away from kart (sideways), marks kart bit as touched
sub_2092B20
export/plan0/arm9_main/sub_2092B20_02092B20.c
- vm_model/src/mapobj/bats.rs:3
sub_20924D8, kart callbacksub_209297C, deletesub_2092B20, drawsub_209280C). - docs/function_notes.md:443 bat delete (sub_20D2398, sub_20D28E0); sub_2092B3C: spawner init (registers tick sub_2092B5C); sub_20924A8: bat factory; sub_2092484/sub_2092928/sub_2092940: bat pool/manager glue (0x19E)
- docs/function_notes/agent_04.md:84 deletes the object (sub_20D2398) and frees its slot (sub_20D28E0)
sub_2092B3C
export/plan0/arm9_main/sub_2092B3C_02092B3C.c
- vm_model/src/mapobj/bats.rs:2
sub_2092B3C) and the bats it throws (0x19F, def0x2166664, factorysub_20924A8, tick - game/src/objects.rs:955 the spawner itself is not drawn (
sub_2092B3Cregisters the bats' draw) - docs/function_notes/agent_04.md:85 registers a decoration draw descriptor (sub_209BEF0) via function pointer
sub_2092B5C
export/plan0/arm9_main/sub_2092B5C_02092B5C.c
- vm_model/src/mapobj/bats.rs:1 Banshee Boardwalk bats (
basabasa): the spawner (NKM object 0x1A0, ticksub_2092B5C, init - vm_model/src/mapobj/bats.rs:176 The spawner (
sub_2092B5C). - game/src/objects.rs:1112 the karts a bat spawner watches (
sub_2092B5C: racer types 0, 2, 3 and the player) - docs/function_notes.md:439 bat spawner (NKM 0x1A0, Banshee Boardwalk old_hyudoro_64) tick, state +0xAC: 0 waits for a counted kart within sqrt(5625)*256=1200 units and atan2 minus yaw (+0x7E) in +-8000 (flag 0x800: timed, +0xA4 counts down), or sub_2061818()==2; 1 runs a 50 tick cycle (+0xA0), at tick 20 throws 2 bats (6 RNG draws each: x+-5, y+35+-5, z+-40 units, speed 2..3 units, angle yaw-3000+rnd(6000), vy -0.625..-0.375), +0xA8 burst counter 0..2, after 5 cycles (+0xA4 from 4) back to 0. Ported in vm_model/src/mapobj/bats.rs, replay-tested
- docs/function_notes/agent_04.md:86 uncertain: similar to sub_20919E8: object tick that spawns 2 debris objects in a burst and plays a sound
sub_2093080
export/plan0/arm9_main/sub_2093080_02093080.c
- docs/function_notes/agent_04.md:87 table lookup: second entry of 8-byte sin/cos table at index angle>>4
sub_20930A0
export/plan0/arm9_main/sub_20930A0_020930A0.c
- docs/function_notes/agent_04.md:88 fx12 multiply (a*b)>>12
sub_20930B0
export/plan0/arm9_main/sub_20930B0_020930B0.c
- docs/function_notes/agent_04.md:89 table lookup: first entry of sin/cos table at index angle>>4
sub_20930C8
export/plan0/arm9_main/sub_20930C8_020930C8.c
- docs/function_notes/agent_04.md:90 re-seeds each object's random wait timer (+0xA4 = 200 + rand*25)
sub_2093190
export/plan0/arm9_main/sub_2093190_02093190.c
- docs/function_notes/agent_04.md:91 allocates object class record via function pointer (size 8)
sub_20931AC
export/plan0/arm9_main/sub_20931AC_020931AC.c
- docs/function_notes/agent_04.md:92 classifies progress +0xA8: >=4096 returns 3, above lower threshold 2, above next threshold 1, else 0
sub_2093210
export/plan0/arm9_main/sub_2093210_02093210.c
- docs/function_notes/agent_04.md:93 registers a decoration draw descriptor (sub_209BEF0)
sub_2093234
export/plan0/arm9_main/sub_2093234_02093234.c
- docs/function_notes/agent_04.md:94 allocates an actor-family class (sub_209BF70)
sub_2093270
export/plan0/arm9_main/sub_2093270_02093270.c
- vm_model/src/mapobj/airship.rs:11 | 0x1A4 |
sub_2093270|sub_2093484| - vm_model/src/mapobj/airship.rs:160 A model sliding to and fro along its path (0x1A4,
sub_2093270, state 4). - docs/function_notes.md:324 sliding hazard (0x1A4) tick (not growth/shrink only): states 0..3 open/close cycle, state 4 follows its path (sub_20D8CC8, sub_20D8A5C) hanging 80 x scale below it; animation clock +0xA4 mod frame count
- docs/function_notes/agent_04.md:95 uncertain: object growth/shrink state machine (4 states: advance frame, scale +123, scale -41), updates height +0x5C
sub_2093484
export/plan0/arm9_main/sub_2093484_02093484.c
- vm_model/src/mapobj/airship.rs:11 | 0x1A4 |
sub_2093270|sub_2093484| - docs/function_notes.md:325 0x1A4 init-all: path follower from settings (speed = setting1.hi x 4096 / 100), picks state 4 when settings word 0 and word1.lo are zero
- docs/function_notes/agent_04.md:96 per-object init loop: places object at path start, sets scale, path speed, resets frame counters
sub_20935FC
export/plan0/arm9_main/sub_20935FC_020935FC.c
- docs/function_notes/agent_04.md:97 draw: if scale +0xA8 > 0, animation frame set, matrix, translate Y, scale, model draw
sub_20936F0
export/plan0/arm9_main/sub_20936F0_020936F0.c
- docs/function_notes/agent_04.md:98 thunk: calls function pointer with a model pointer
sub_2093708
export/plan0/arm9_main/sub_2093708_02093708.c
- docs/function_notes/agent_04.md:99 loads mkd_ef_burner.nsbmd (flame effect model) and sets it up
sub_2093754
export/plan0/arm9_main/sub_2093754_02093754.c
- vm_model/src/mapobj/airship.rs:16 public numbers below), and the karts' contact handlers (
sub_2093754,sub_2093B7C: the - docs/function_notes/agent_04.md:100 object hit callback: if kart not recently hit, sets flag and a 31-tick cooldown for that kart slot
sub_20937B8
export/plan0/arm9_main/sub_20937B8_020937B8.c
- docs/function_notes/agent_04.md:101 thunk: calls function pointer at 0x020937C0
sub_20937C4
export/plan0/arm9_main/sub_20937C4_020937C4.c
- vm_model/src/mapobj/airship.rs:10 | 0x1A2 |
sub_2093910| spawned bysub_20937C4| - vm_model/src/mapobj/airship.rs:40
sub_20937C4: a bullet at a launcher's position, 42 units up, flying along its facing - vm_model/src/mapobj/airship.rs:150 sub_20937C4
- docs/function_notes.md:321 spawns a Bullet Bill (0x1A2) at the launcher +42 units, velocity = facing (+0x40) x 6, life 600
- docs/function_notes/agent_04.md:102 spawns a flame/burner projectile at a position with velocity (lifetime 600)
sub_20938A0
export/plan0/arm9_main/sub_20938A0_020938A0.c
- docs/function_notes/agent_04.md:103 registers a decoration draw descriptor (sub_209BEF0)
sub_20938C0
export/plan0/arm9_main/sub_20938C0_020938C0.c
- docs/function_notes/agent_04.md:104 allocates actor class (sub_209BF70) with extents 204800 / -409600
sub_2093910
export/plan0/arm9_main/sub_2093910_02093910.c
- vm_model/src/mapobj/airship.rs:10 | 0x1A2 |
sub_2093910| spawned bysub_20937C4| - vm_model/src/mapobj/airship.rs:23 A Bullet Bill in flight (0x1A2,
sub_2093910; spawned by [BulletLauncher]). - vm_model/src/mapobj/airship.rs:64
sub_2093910, one tick; false once the bullet has gone. - docs/function_notes.md:322 Bullet Bill (0x1A2) tick: life countdown, moves by velocity; knocked down (+0xA4 = 1) it falls (-1024 a tick); deleted when life runs out
- docs/function_notes/agent_04.md:105 flame object tick: visible only for the right viewer, falls (y velocity -1024) with sound, deleted at timeout
sub_2093A50
export/plan0/arm9_main/sub_2093A50_02093A50.c
- docs/function_notes/agent_04.md:106 draw: if timer > 0, matrix, rotate by angle table, scale, draws two models
sub_2093B30
export/plan0/arm9_main/sub_2093B30_02093B30.c
- docs/function_notes/agent_04.md:107 loads NsKiller2.nsbmd and NsKiller2_s.nsbmd (Bullet Bill / killer models)
sub_2093B7C
export/plan0/arm9_main/sub_2093B7C_02093B7C.c
- vm_model/src/mapobj/airship.rs:16 public numbers below), and the karts' contact handlers (
sub_2093754,sub_2093B7C: the - vm_model/src/mapobj/airship.rs:55
sub_2093B7C(a kart hits it): 120 ticks of falling, velocity / 4, thrown up at 4 units. - game/src/objects.rs:1670 a star kart knocks a Bullet Bill down (
sub_2093B7C) and bounces an iron - docs/function_notes.md:323 Bullet Bill kart-hit handler: life 120, state 1, velocity / 4, y velocity 0x4000
- docs/function_notes.md:417 Bullet Bill kart callback: code 1 (star) -> knocked down: 120 ticks falling, velocity / 4, up 4, no contact
- docs/function_notes/agent_04.md:108 object hit callback: sets timer 120, scales velocity, sets upward speed, plays hit effect
sub_2093C64
export/plan0/arm9_main/sub_2093C64_02093C64.c
- docs/function_notes/agent_04.md:109 object delete/hit finish: removes object, starts sound, hooks callback pointer
sub_2093CF4
export/plan0/arm9_main/sub_2093CF4_02093CF4.c
- vm_model/src/mapobj/airship.rs:9 | 0x1A1 |
sub_2093CF4|sub_2093FA4/sub_2093EAC| - vm_model/src/mapobj/airship.rs:81 The Bullet Bill launcher (0x1A1,
sub_2093CF4). - docs/function_notes.md:319 Bullet Bill launcher (0x1A1) tick: state 0 wait (+0xA0, then speed 0x2000), 1 walk the straightened path (sub_20D8CC8, sub_20D879C), 2 wait 45+1, 3 fire a bullet (sub_20937C4) and wait 75; ported in vm_model/src/mapobj/airship.rs
- docs/function_notes/agent_04.md:110 killer/Bullet Bill style object tick: waits, follows path (sub_20D8CC8), at step 45 plays sound/spawns effect
sub_2093EAC
export/plan0/arm9_main/sub_2093EAC_02093EAC.c
- vm_model/src/mapobj/airship.rs:9 | 0x1A1 |
sub_2093CF4|sub_2093FA4/sub_2093EAC| - docs/function_notes/agent_04.md:111 clears timer +0xA0 of every object in the list
sub_2093EE8
export/plan0/arm9_main/sub_2093EE8_02093EE8.c
- docs/function_notes/agent_04.md:112 draw: matrix, scale, position/16 to matrix, model draw
sub_2093F78
export/plan0/arm9_main/sub_2093F78_02093F78.c
- docs/function_notes/agent_04.md:113 loads NsKiller1.nsbmd
sub_2093FA4
export/plan0/arm9_main/sub_2093FA4_02093FA4.c
- vm_model/src/mapobj/airship.rs:9 | 0x1A1 |
sub_2093CF4|sub_2093FA4/sub_2093EAC| - docs/function_notes.md:320 launcher init: follower start (sub_20D7DA8) and straighten all segments (sub_20D7D80: length/inverse := straight ones)
- docs/function_notes/agent_04.md:114 object init: sets path follower start, spawns child (sub_20AC588), sets class +0x70
sub_2093FF0
export/plan0/arm9_main/sub_2093FF0_02093FF0.c
- docs/function_notes/agent_04.md:115 getter: returns a global pointer
sub_2094000
export/plan0/arm9_main/sub_2094000_02094000.c
- vm_model/src/mapobj/boo.rs:13
sub_2094000/sub_2095228work on the context at*0x021755FC + 0x498(MATH_Rand32 as - vm_model/src/mapobj/boo.rs:284
sub_2094000: takes a free pool Boo and fills it in (12 draws fromrng, mode 0 uses - docs/function_notes.md:494 takes a free pool Boo (sub_209BBFC) and fills it from 12 draws: speed +0xD4, amp +0xCC, centre +0xC8 (camera heading via sub_2148714(target.z-eye.z, target.x-eye.x) +-60 deg in mode 0), phase +0xBC, bob (+0xE8..+0xF8), radius +0x10C, fade bounds, wait +0xB4 0..74, life +0xB8 300..449; ++live count (*0x217B0B8)
- docs/function_notes/agent_04.md:116 object factory with many setup steps: allocates object, copies position into +0xA0.., random placement per game mode, sets up path
sub_20946B8
export/plan0/arm9_main/sub_20946B8_020946B8.c
- vm_model/src/mapobj/boo.rs:28
+0xB4/+0xB8are zeroed (sub_20946B8: they fade out) and the spawner goes idle. Other - vm_model/src/mapobj/boo.rs:333
sub_20946B8on this Boo:+0xB4 = +0xB8 = 0, so it starts to fade out. - vm_model/src/mapobj/boo.rs:416 Set by a tick that ran
sub_20946B8: the caller must call [Boo::dismiss] on every Boo. - docs/function_notes/agent_04.md:117 clears +0xB4/+0xB8 of every object in the list
sub_2094768
export/plan0/arm9_main/sub_2094768_02094768.c
- vm_model/src/mapobj/boo.rs:6 class init
sub_2094C24, ticksub_2094768, drawsub_2094C70, deletesub_2094DF4, model - vm_model/src/mapobj/boo.rs:339
sub_2094768: one tick; false when it is deleted (the caller decrements the live count - docs/function_notes.md:495 Boo tick: fade +0xFC bounces between 2.0 and 14..26, alpha +0xAC = fade>>12; orbit the view kart at +0x10C radius with two damped oscillators; after life ends fades 1.0 a tick then sub_20D2398 and --live
- docs/function_notes/agent_04.md:119 uncertain: Boo (teresa) tick: flicker/fade value +0xFC bounces between limits, states 0/1/2 with countdowns, fades in/out
sub_2094BD0
export/plan0/arm9_main/sub_2094BD0_02094BD0.c
- docs/function_notes/agent_04.md:120 table lookup: second entry of 8-byte sin/cos table at index angle>>4 (cos)
sub_2094BF0
export/plan0/arm9_main/sub_2094BF0_02094BF0.c
- vm_model/src/mapobj/boo.rs:36 (
sub_2094BF0= rounding fx12 multiply) turn the angle (+0xBCphase,+0xC0value, centre - vm_model/src/mapobj/boo.rs:151
sub_2094BF0: fx12 multiply with rounding. - docs/function_notes/agent_04.md:121 fx12 multiply with rounding ((a*b+2048)>>12)
sub_2094C0C
export/plan0/arm9_main/sub_2094C0C_02094C0C.c
- docs/function_notes/agent_04.md:122 table lookup: first entry of sin/cos table at index angle>>4 (sin)
sub_2094C24
export/plan0/arm9_main/sub_2094C24_02094C24.c
- vm_model/src/mapobj/boo.rs:6 class init
sub_2094C24, ticksub_2094768, drawsub_2094C70, deletesub_2094DF4, model - vm_model/src/mapobj/boo.rs:172 Index in the pool (
sub_2094C24sets the draw variants from it). - vm_model/src/mapobj/boo.rs:247 A pool Boo as the spawner ctor leaves it (everything 0,
sub_2094C24variants). - game/src/objects.rs:499 its face: pattern frame slot & 1 (
sub_2094C24) - docs/function_notes/agent_04.md:123 per-object init loop: sets +0xAE = i&1, +0xB0 = (i/2)&1 (alternating spin/side flags)
sub_2094C70
export/plan0/arm9_main/sub_2094C70_02094C70.c
- vm_model/src/mapobj/boo.rs:6 class init
sub_2094C24, ticksub_2094768, drawsub_2094C70, deletesub_2094DF4, model - docs/function_notes.md:496 Boo draw: alpha +0xAC, frame +0xAE (slot&1), flip +0xB0 ((slot/2)&1), billboard matrix sub_20E6CF8, scale +0x1C (x2 in mode 2); sub_2094C24 sets frame/flip from the pool index
- docs/function_notes/agent_04.md:124 Boo draw: sets model alpha, frame, matrix with billboard, scale (0x2000 in mode 2), model draw
sub_2094DB4
export/plan0/arm9_main/sub_2094DB4_02094DB4.c
- vm_model/src/mapobj/boo.rs:7 load
sub_2094DB4=teresa.nsbmd+teresa.nsbtp), and the bakubaku (0x13C, def - docs/function_notes/agent_04.md:125 loads teresa.nsbmd and teresa.nsbtp (Boo model)
sub_2094DF4
export/plan0/arm9_main/sub_2094DF4_02094DF4.c
- vm_model/src/mapobj/boo.rs:6 class init
sub_2094C24, ticksub_2094768, drawsub_2094C70, deletesub_2094DF4, model - docs/function_notes/agent_04.md:126 Boo object delete: removes object and clears global pointer
sub_2094E3C
export/plan0/arm9_main/sub_2094E3C_02094E3C.c
- vm_model/src/mapobj/boo.rs:3 Boo spawner (NKM 0x13D, def
0x2166814, ctorsub_20954E4, factorysub_2094E3C, class init - vm_model/src/mapobj/boo.rs:145
sub_2094E3C: the factory makes no spawner in game modes 3 and 5 (*(global+8)) when - docs/function_notes/agent_04.md:127 returns 0 in some game modes (3 or 5, no race), else calls sub_209BF8C
sub_2094E8C
export/plan0/arm9_main/sub_2094E8C_02094E8C.c
- vm_model/src/mapobj/boo.rs:4
sub_2095228, ticksub_2094E8C), the Boos (0x13B, def0x21667c0, pool made by the - vm_model/src/mapobj/boo.rs:463
sub_2094E8C: one tick.mode=sub_2061818(),live= Boos alive now (counted after - docs/function_notes.md:491 Boo spawner (NKM 0x13D) tick; +0xA0 15-tick kart check (range = setting0 low16 units, view kart xz), +0xA4 near, +0xA8 delay, +0xAC state 0 start / 1 idle / 2 spawning; mode 0 spawns 4 (max 6 alive), then 1 per 0..19 ticks; kart leaving -> sub_20946B8 and idle. Ported in vm_model/src/mapobj/boo.rs
- docs/function_notes/agent_04.md:128 Boo spawner tick: 15-tick cycle, kart-distance check, spawns Boo ring (sub_20952DC) or clears them
sub_209516C
export/plan0/arm9_main/sub_209516C_0209516C.c
- docs/function_notes/agent_04.md:129 table lookup: second entry of sin/cos table at index angle>>4
sub_209518C
export/plan0/arm9_main/sub_209518C_0209518C.c
- vm_model/src/mapobj/boo.rs:156
sub_209518C: fx12 multiply. - docs/function_notes/agent_04.md:130 fx12 multiply (a*b)>>12
sub_209519C
export/plan0/arm9_main/sub_209519C_0209519C.c
- docs/function_notes/agent_04.md:131 table lookup: first entry of sin/cos table at index angle>>4
sub_20951B4
export/plan0/arm9_main/sub_20951B4_020951B4.c
- vm_model/src/mapobj/boo.rs:18
sub_20951B4returns the high 16 bits of the next word. - docs/function_notes/agent_04.md:132 advances object RNG (MATH_Rand32 style) and returns its high 16 bits
sub_209520C
export/plan0/arm9_main/sub_209520C_0209520C.c
- vm_model/src/mapobj/boo.rs:12 The Boos do NOT use the objects' generator ([
ObjRng] at*0x0217B49C):sub_209520C/ - docs/function_notes/agent_04.md:133 returns pointer to the object RNG context (global + 1176)
sub_2095228
export/plan0/arm9_main/sub_2095228_02095228.c
- vm_model/src/mapobj/boo.rs:4
sub_2095228, ticksub_2094E8C), the Boos (0x13B, def0x21667c0, pool made by the - vm_model/src/mapobj/boo.rs:13
sub_2094000/sub_2095228work on the context at*0x021755FC + 0x498(MATH_Rand32 as - vm_model/src/mapobj/boo.rs:421 From the NKM object.
sub_2095228(class init) draws the first countdown, 0..14. - docs/function_notes/agent_04.md:134 re-seeds each object's +0xA0 with random in [0,15) from the RNG
sub_20952DC
export/plan0/arm9_main/sub_20952DC_020952DC.c
- vm_model/src/mapobj/boo.rs:26 race (
sub_2061818() == 0) 4 Boos with at most 6 alive (sub_20952DC(6, 4, 10, 20)), then a - vm_model/src/mapobj/boo.rs:31 height (
sub_20952DC). - vm_model/src/mapobj/boo.rs:285 the camera's heading).
offsetis fromsub_20952DC. A reused Boo keeps the values the - vm_model/src/mapobj/boo.rs:441
sub_20952DC(max_live, num, radius, delay_range): if fewer thanmax_liveBoos live, spawn - docs/function_notes.md:493 spawn group (max alive, count, radius units, delay range): offset = random radius (sub_2091F6C = randn>>32) at random angle (sub_20951B4 = high 16 bits), y = spawner y; then sub_2094000 per Boo; finally +0xA8 = randdelay>>32
- docs/function_notes/agent_04.md:135 spawns a group of a3 Boo objects around a point with random radius/angle via sub_2094000, then advances RNG
sub_20954E4
(not in export)
- vm_model/src/mapobj/boo.rs:3 Boo spawner (NKM 0x13D, def
0x2166814, ctorsub_20954E4, factorysub_2094E3C, class init - docs/function_notes.md:492 Boo spawner ctor: sub_20AC588(0x13B, setting0 high16) creates the pool of Boos; sub_2095228 (class init) draws the first +0xA0 = 15rand>>32; sub_2094E3C factory makes no spawner when (g+8) is 3 or 5 and sub_2061818()==0
sub_2095544
export/plan0/arm9_main/sub_2095544_02095544.c
- vm_model/src/mapobj/boo.rs:8
0x2166848, class initsub_20957EC, ticksub_2095544, drawsub_2095848, model load - vm_model/src/mapobj/boo.rs:596
sub_2095544.mode=sub_2061818();kart= the view kart. Returns the effect when - docs/function_notes.md:498 bakubaku (0x13C) tick, +0xB0 state: 0 waits for the view kart within 800 units of the trigger point (sub_20957EC: nkm pos + 800*facing), 1 rises from 50 units below at 12 units/tick up and 0.25 gravity, 2 above ground (only drawn then, sound 390 on entry), 3 sinks (sound 391), 4 waits 1800 ticks
- docs/function_notes/agent_04.md:136 bakubaku object tick: when kart is near, rises from below ground, bounces, plays sound, state machine
sub_20957EC
export/plan0/arm9_main/sub_20957EC_020957EC.c
- vm_model/src/mapobj/boo.rs:8
0x2166848, class initsub_20957EC, ticksub_2095544, drawsub_2095848, model load - vm_model/src/mapobj/boo.rs:558 +0xA4: the trigger point (
home + 800 * dir,sub_20957EC). - docs/function_notes/agent_04.md:137 per-object init loop: places objects with sub_2147FD8 (VEC_MultAdd) along their direction
sub_2095848
export/plan0/arm9_main/sub_2095848_02095848.c
- vm_model/src/mapobj/boo.rs:8
0x2166848, class initsub_20957EC, ticksub_2095544, drawsub_2095848, model load - vm_model/src/mapobj/boo.rs:578
sub_2095848: the shadow model's tilt,(sin, cos)foratan2idx(-vy, 12.0) - game/src/objects.rs:371 the bakubaku's shadow model (
sub_2095848draws it at the same spot, tilted about x only) - docs/function_notes.md:499 bakubaku draw: matrix + scale, body model (bakubaku) then baku_shadow tilted by atan2(-vy, 12.0) about x
- docs/function_notes/agent_04.md:138 bakubaku draw: matrix, scale, draws body model and rotated shadow model (baku_shadow)
sub_2095958
export/plan0/arm9_main/sub_2095958_02095958.c
- vm_model/src/mapobj/boo.rs:9
sub_2095958=bakubaku.nsbmd+baku_shadow.nsbmd). - docs/function_notes/agent_04.md:139 loads bakubaku.nsbmd and baku_shadow.nsbmd
sub_20959DC
export/plan0/arm9_main/sub_20959DC_020959DC.c
- docs/function_notes/agent_04.md:140 registers decoration draw descriptor (sub_209BEF0) for the bakubaku class
sub_20959FC
export/plan0/arm9_main/sub_20959FC_020959FC.c
- docs/function_notes/agent_04.md:141 allocates actor-family class (sub_209BF70) for the bakubaku class
sub_2095A3C
export/plan0/arm9_main/sub_2095A3C_02095A3C.c
- vm_model/src/mapobj/walker.rs:48
sub_2095A3C: walking (+0xD8 = 1) until a point is reached, then stopped: a stopped tick - docs/function_notes/agent_04.md:142 move_tree tick: path follower walk (sub_20D8CC8), animation frame advance, footstep sound 287 and effect
sub_2095D1C
export/plan0/arm9_main/sub_2095D1C_02095D1C.c
- docs/function_notes/agent_04.md:143 move_tree per-object init: computes speed from +0x28 and initialises its shadow/collision (sub_20E516C)
sub_2095DB8
export/plan0/arm9_main/sub_2095DB8_02095DB8.c
- docs/function_notes/agent_04.md:144 move_tree draw: matrix, scale, model with animation (near) or static (far), plus shadow
sub_2095EB4
export/plan0/arm9_main/sub_2095EB4_02095EB4.c
- docs/function_notes/agent_04.md:145 loads move_tree.nsbmd (moving tree)
sub_2095EFC
export/plan0/arm9_main/sub_2095EFC_02095EFC.c
- docs/function_notes/agent_04.md:146 object hit callback: restarts a 30-tick timer if in first two states
sub_2095F18
export/plan0/arm9_main/sub_2095F18_02095F18.c
- vm_model/src/mapobj/walker.rs:2 (0x1A3,
sub_2095F18): setting 0 x 4096 / 100 units a tick round their path, stopping at a - docs/function_notes/agent_04.md:147 path follower start for the object (sub_20D7DA9 at +0xB4 with path +0x9C)
sub_2095F30
export/plan0/arm9_main/sub_2095F30_02095F30.c
- docs/function_notes/agent_04.md:148 getter: object +0xB4
sub_2095F38
export/plan0/arm9_main/sub_2095F38_02095F38.c
- docs/function_notes/agent_04.md:150 returns 1 if object state +0xB0 is 1 or 4
sub_2095F5C
export/plan0/arm9_main/sub_2095F5C_02095F5C.c
- docs/function_notes/agent_04.md:151 registers an object class with sub_209BF49 callbacks (init/draw) via function pointer
sub_2095F7C
export/plan0/arm9_main/sub_2095F7C_02095F7C.c
- docs/function_notes/agent_04.md:152 registers a decoration draw descriptor (sub_209BEF0) for the poo object
sub_2095F9C
export/plan0/arm9_main/sub_2095F9C_02095F9C.c
- docs/function_notes/agent_04.md:153 allocates actor-family class (sub_209BF70) with callback and sets class +0x28 to 432
sub_2095FEC
export/plan0/arm9_main/sub_2095FEC_02095FEC.c
- vm_model/src/mapobj/airship.rs:12 | 0x1A7 |
sub_2095FEC|sub_20968F4| - vm_model/src/mapobj/airship.rs:201 A Rocky Wrench hatch (0x1A7,
sub_2095FEC; models cover / poo / hole). - docs/function_notes.md:326 Rocky Wrench hatch (0x1A7) tick: six-state cycle rise/offset (+0xA0/+0xA4), timer +0xAC, state +0xB0, random waits; ported in airship.rs
- docs/function_notes/agent_04.md:154 poo object tick: big state machine (+0x104): fall with gravity, bounce, squish, plays sound 364, resets
sub_20968C0
export/plan0/arm9_main/sub_20968C0_020968C0.c
- docs/function_notes/agent_04.md:155 fx12 multiply with rounding ((a*b+2048)>>12)
sub_20968DC
export/plan0/arm9_main/sub_20968DC_020968DC.c
- docs/function_notes/agent_04.md:156 table lookup: first entry of sin/cos table at index angle>>4
sub_20968F4
export/plan0/arm9_main/sub_20968F4_020968F4.c
- vm_model/src/mapobj/airship.rs:12 | 0x1A7 |
sub_2095FEC|sub_20968F4| - vm_model/src/mapobj/airship.rs:262
sub_20968F4: closed, waitingsettings0 +- 30ticks. - docs/function_notes.md:327 0x1A7 init-all: scale 4096, timer = setting0 +- 30 random, state 0, rise 0x2000
- docs/function_notes/agent_04.md:157 poo per-object init loop: scale 4096, random timer from class, state (3 in mode 4), height 0x2000, offset -53248
sub_2096A04
export/plan0/arm9_main/sub_2096A04_02096A04.c
- docs/function_notes/agent_04.md:158 poo draw: pushes matrices, draws cover model then poo/hole models depending on state (+0xB0), with height offsets
sub_2096D68
export/plan0/arm9_main/sub_2096D68_02096D68.c
- docs/function_notes/agent_04.md:159 loads cover.nsbmd, poo.nsbmd, poo.nsbtp and hole.nsbmd
sub_2096DF0
export/plan0/arm9_main/sub_2096DF0_02096DF0.c
- vm_model/src/mapobj/airship.rs:242
sub_2096DF0(its shape-5 test): a sphere atpof radiusragainst the hatch at - game/src/objects.rs:1619 a Rocky Wrench hatch (
sub_2096DF0): solid, and knocking karts (its table handler), - docs/function_notes.md:489 Rocky Wrench hatch shape test (0x1A7 shape 5): below the cover height (+0xA0) + r and within radius (+0x58) + r; pushed out radially only while the wrench is up (state 4, or 5 above 30720), else touch only
- docs/function_notes/agent_04.md:160 kart sphere vs object test: returns 1 and push vector if kart within height/radius of the object (state dependent)
sub_2096F54
export/plan0/arm9_main/sub_2096F54_02096F54.c
- docs/function_notes/agent_04.md:161 object hit callback (kart hit state 4): starts fall (state 1), sets velocity/params, flags
sub_209702C
export/plan0/arm9_main/sub_209702C_0209702C.c
- game/src/objects.rs:1620 only while the wrench is up (
sub_209702C) - docs/function_notes.md:490 hatch kart callback (own codes 3/4): while up, non-star karts get the knock (table handler 7) and the hatch's velocity 14336 up; otherwise per-kart landing bits, sound, cover bounce
- docs/function_notes/agent_04.md:162 object vs kart collision handler: on kinds 3/4 sets push velocity or knock, plays sound 366/367 and effects
sub_2097520
export/plan0/arm9_main/sub_2097520_02097520.c
- docs/function_notes/agent_04.md:163 sets flag bit in object flags (+2)
sub_209753C
export/plan0/arm9_main/sub_209753C_0209753C.c
- vm_model/src/mapobj/pinball.rs:24 200..299 the flipper launch (
sub_209753C(code - 200)when the next point has the same - vm_model/src/mapobj/pinball.rs:47 A flipper is kicked (
sub_209753C(n)): callFlipper::kickon flipper n. - vm_model/src/mapobj/pinball.rs:507
sub_209753C(n): an iron ball launches the flipper. - game/src/objects.rs:906 Flippers kicked by iron balls (
sub_209753C(n)), applied when they tick. - docs/function_notes/agent_04.md:164 spawns a flipper-class child from a parent, setting a countdown of 170 at +0xEBC
sub_209758C
export/plan0/arm9_main/sub_209758C_0209758C.c
- docs/function_notes/agent_04.md:165 registers a decoration draw descriptor (sub_209BEF0) for flipper
sub_20975AC
export/plan0/arm9_main/sub_20975AC_020975AC.c
- docs/function_notes/agent_04.md:166 allocates actor-family class (sub_209BF70) for flipper with size 464
sub_20975EC
export/plan0/arm9_main/sub_20975EC_020975EC.c
- vm_model/src/mapobj/pinball.rs:433 A flipper (
sub_20975ECtick,sub_20979C8init,sub_2097ED0collision,sub_20980EC - vm_model/src/mapobj/pinball.rs:512 One tick of
sub_20975EC. - docs/function_notes/agent_04.md:167 flipper tick: countdown, 6-state machine rotating yaw by 364/728 (about 2/4 degrees) per tick, spawns effect 95
sub_20979C8
export/plan0/arm9_main/sub_20979C8_020979C8.c
- vm_model/src/mapobj/pinball.rs:433 A flipper (
sub_20975ECtick,sub_20979C8init,sub_2097ED0collision,sub_20980EC - docs/function_notes/agent_04.md:168 flipper per-object init: reads facing from class, sets initial angle 0x2000, builds 2 base matrices
sub_2097D80
export/plan0/arm9_main/sub_2097D80_02097D80.c
- game/src/objects.rs:1208 drawn with the swing's orientation for this phase (
sub_2097D80) - docs/function_notes/agent_04.md:169 flipper draw: matrix for current frame, position/16, scale, texture-SRT animation values, model draw
sub_2097E84
export/plan0/arm9_main/sub_2097E84_02097E84.c
- docs/function_notes/agent_04.md:170 loads flipper.nsbmd and flipper.nsbta
sub_2097ED0
export/plan0/arm9_main/sub_2097ED0_02097ED0.c
- vm_model/src/mapobj/pinball.rs:433 A flipper (
sub_20975ECtick,sub_20979C8init,sub_2097ED0collision,sub_20980EC - vm_model/src/mapobj/pinball.rs:583
sub_2097ED0's shapes: does a sphere atpof radiusrtouch the flipper? The push-out - vm_model/src/mapobj/pinball.rs:619
sub_2097ED0itself: astouches, and remembers the spin side (spinis reset to 0 first). - vm_model/src/mapobj/pinball.rs:806 Recorded calls of
sub_2097ED0(collision) andsub_20980EC(shove) on the first flipper - game/src/objects.rs:1589 pinball flippers test their swinging boxes themselves (
sub_2097ED0), then shove the - docs/function_notes/agent_04.md:171 flipper collision: oriented-box tests (sub_20EAFC4) on several boxes, cylinder fallback (sub_20EAD80); sets spin direction +0xA0
sub_20980EC
export/plan0/arm9_main/sub_20980EC_020980EC.c
- vm_model/src/mapobj/pinball.rs:433 A flipper (
sub_20975ECtick,sub_20979C8init,sub_2097ED0collision,sub_20980EC - vm_model/src/mapobj/pinball.rs:626
sub_20980EC: the shove a swinging flipper gives a racer (kart_posthe racer's position, - vm_model/src/mapobj/pinball.rs:806 Recorded calls of
sub_2097ED0(collision) andsub_20980EC(shove) on the first flipper - game/src/objects.rs:1590 kart while swinging (
sub_20980EC: handler 12 / 14), else stop it (the table's 2) - docs/function_notes/agent_04.md:172 flipper hit reaction: pushes kart along flipper direction by speed scaled -410/+410, plays sound 465
sub_209828C
export/plan0/arm9_main/sub_209828C_0209828C.c
- docs/function_notes.md:1662 Large articulated Piranha 0x1AA tick factory; object definition 0x021669BC points here, callback literal 0x020982CC is sub_20983C4. Distinct from small sprite 0x1A6.
- docs/function_notes/agent_04.md:173 creates Piranha Plant class record (sub_209BF48) and registers it
sub_20982D4
export/plan0/arm9_main/sub_20982D4_020982D4.c
- docs/function_notes/agent_04.md:174 creates Piranha Plant draw descriptor (body) via sub_209BEF0 and registers it
sub_2098328
export/plan0/arm9_main/sub_2098328_02098328.c
- docs/function_notes/agent_04.md:175 creates Piranha Plant draw descriptor (head) via sub_209BEF0 and registers it
sub_2098374
export/plan0/arm9_main/sub_2098374_02098374.c
- docs/function_notes/agent_04.md:176 creates a Piranha Plant class record (sub_209BF1C) and registers it
sub_20983C4
export/plan0/arm9_main/sub_20983C4_020983C4.c
- vm_model/src/mapobj/piranha.rs:1 Large Piranha (0x1AA),
sub_20983C4. This is distinct from the small - docs/function_notes.md:1663 Large Piranha 0x1AA scalar tick: target selection via object RNG; yaw steps 109; seven bite states; 30-tick windup/cooldown; bob velocity +4/reset -82; stretch velocity starts 123 then -8; NSBCA clock and frame-10 projectile spawn/sound. Rust scalar outputs/RNG match 2400 original calls across all seven states; native body/mouth clock and projectile plugin wired, full GPU parity pending.
- docs/function_notes/agent_04.md:177 Piranha Plant tick: 3+-state machine, picks next target height, bobs by 109 per tick, bites, sound 369
sub_209886C
export/plan0/arm9_main/sub_209886C_0209886C.c
- vm_model/src/mapobj/piranha.rs:234
sub_2098D4C/sub_209886C: compact the seven signed target-path - docs/function_notes.md:1665 Large Piranha animation initialization: clock starts 0, advances 4096, wraps at (PakkunMouth NSBCA frame count minus 1)*4096; initial windup -164. ROM-backed initialization replay checks clock end 118784.
- docs/function_notes/agent_04.md:178 Piranha Plant per-object init: random start phase from model frame count, scale 4096, height -164
sub_2098954
export/plan0/arm9_main/sub_2098954_02098954.c
- docs/function_notes.md:1668 Piranha body draw: transverse scale 12288-bob-stretch, Y scale bob+stretch-4096, followed by object scale; separate from animated mouth. Native transform source-backed; original draw trace pending.
- docs/function_notes/agent_04.md:179 Piranha Plant body draw: matrix, scale from heights, model draw
sub_20989FC
export/plan0/arm9_main/sub_20989FC_020989FC.c
- docs/function_notes/agent_04.md:180 thunk: calls function (sub_209BBD0) with Piranha body model
sub_2098A14
export/plan0/arm9_main/sub_2098A14_02098A14.c
- docs/function_notes/agent_04.md:181 loads PakkunBody.nsbmd
sub_2098A58
export/plan0/arm9_main/sub_2098A58_02098A58.c
- docs/function_notes.md:1670 Piranha PakkunZHead sprite draw: position plus scalar height +504, camera-facing cached matrix, uniform stretch +496 and object scale. Drawn as a concurrent third part beside PakkunBody and PakkunMouth, not a LOD fallback; omitting it leaves white mouth/teeth without the textured head.
- docs/function_notes/agent_04.md:182 Piranha Plant head draw: matrix at position + height offset, scale, model with frame, draw
sub_2098B1C
export/plan0/arm9_main/sub_2098B1C_02098B1C.c
- docs/function_notes/agent_04.md:183 thunk: calls function (sub_209BBD0) with Piranha head model
sub_2098B34
export/plan0/arm9_main/sub_2098B34_02098B34.c
- docs/function_notes/agent_04.md:184 loads PakkunZHead.nsbmd
sub_2098B68
export/plan0/arm9_main/sub_2098B68_02098B68.c
- docs/function_notes.md:1669 Piranha animated mouth draw: translate up by +504, rotate Y +476 then X +480, uniform stretch +496 then object scale; integer NSBCA frame from +164. Native separate mouth meshes are posed by this clock; GPU parity pending.
- docs/function_notes/agent_04.md:186 Piranha Plant draw: segmented neck/head, per-segment rotation from angle tables, scale, model draw (PakkunMouth etc.)
sub_2098D04
export/plan0/arm9_main/sub_2098D04_02098D04.c
- docs/function_notes/agent_04.md:187 loads PakkunMouth.nsbmd
sub_2098D4C
export/plan0/arm9_main/sub_2098D4C_02098D4C.c
- vm_model/src/mapobj/piranha.rs:234
sub_2098D4C/sub_209886C: compact the seven signed target-path - docs/function_notes.md:1664 Large Piranha 0x1AA init: seven signed s16 NKM settings are target path ids, negative omitted; packed target index/count +440/+442; angles +444, yaw +476, bob/stretch +488/+496; separate from sub_20E5AEC small plant init.
- docs/function_notes/agent_04.md:188 Piranha Plant init: sets neck segment angles and lengths from class data, 7 segments, scale 4096, base height 286720
sub_2098F18
export/plan0/arm9_main/sub_2098F18_02098F18.c
- vm_model/src/mapobj/piranha.rs:27 The plant's projectile, 0x1AB (
sub_2098F18/sub_209905C). - docs/function_notes.md:1666 Large Piranha launches object 0x1AB from selected target path; follower speed 30720, height offset spawn-to-target-ground+70, initial vertical velocity -20480, SPA emitter 51. This creates a separate attacking projectile, not a plant-path update.
- docs/function_notes/agent_04.md:189 spawns a path-following object (path from arg, speed 30720, start particle effect 51), initial height arg, velocity -20480
sub_2099020
export/plan0/arm9_main/sub_2099020_02099020.c
- docs/function_notes/agent_04.md:190 allocates actor-family class (sub_209BF70) for the path-following object (id 397)
sub_209905C
export/plan0/arm9_main/sub_209905C_0209905C.c
- vm_model/src/nitro_particle_pool.rs:133 sub_209905C ends a projectile by setting each primary's age to its
- vm_model/src/mapobj/piranha.rs:27 The plant's projectile, 0x1AB (
sub_2098F18/sub_209905C). - game/src/piranha.rs:271 emulated frame (captured sub_209905C), before their emitter draws.
- docs/function_notes.md:1667 Piranha projectile 0x1AB tick: height += vertical speed; speed -=4096; floor clamp0 and bounce22528, sound431. Advances straight target-path follower; ends when open path reverses; adds height+61440 to path Y. Rust replay matches686 original calls including bounce/end, using ROM paths; precise SPL emitter expiry still unverified.
- docs/function_notes/agent_04.md:191 path-following object tick: gravity-bounce on height, sound 431, advances along path (sub_20D8CC8), deleted at end
sub_2099208
export/plan0/arm9_main/sub_2099208_02099208.c
- docs/function_notes/agent_04.md:192 object hit callback: on kind 1 sets flag and state 1, sets hit flag on kart-type bits, hit effect
sub_2099278
export/plan0/arm9_main/sub_2099278_02099278.c
- docs/function_notes/agent_04.md:193 marks object flag, deletes the object and frees its slot
sub_20992AC
export/plan0/arm9_main/sub_20992AC_020992AC.c
- docs/function_notes/agent_04.md:194 registers decoration draw descriptor (sub_209BEF0) for the mini_dokan decoration
sub_20992D0
export/plan0/arm9_main/sub_20992D0_020992D0.c
- docs/function_notes/agent_04.md:195 draw (mini_dokan): matrix, billboard, scale, model draw
sub_2099344
export/plan0/arm9_main/sub_2099344_02099344.c
- docs/function_notes/agent_04.md:196 thunk: calls sub_209BBD0 with the mini_dokan model
sub_209935C
export/plan0/arm9_main/sub_209935C_0209935C.c
- docs/function_notes/agent_04.md:197 loads mini_dokan.nsbmd (small pipe)
sub_2099390
export/plan0/arm9_main/sub_2099390_02099390.c
- docs/function_notes/agent_04.md:198 registers decoration draw descriptor (sub_209BEF0) for BankEgg1
sub_20993B4
export/plan0/arm9_main/sub_20993B4_020993B4.c
- docs/function_notes/agent_04.md:199 draw (BankEgg1): matrix, billboard, scale, model draw
sub_2099428
export/plan0/arm9_main/sub_2099428_02099428.c
- docs/function_notes/agent_04.md:200 thunk: calls sub_209BBD0 with the BankEgg1 model
sub_2099440
export/plan0/arm9_main/sub_2099440_02099440.c
- docs/function_notes/agent_04.md:201 loads BankEgg1.nsbmd
sub_2099474
export/plan0/arm9_main/sub_2099474_02099474.c
- docs/function_notes/agent_04.md:202 registers decoration draw descriptor (sub_209BEF0) for Of6Tree1
sub_2099498
export/plan0/arm9_main/sub_2099498_02099498.c
- docs/function_notes/agent_04.md:203 draw (Of6Tree1): matrix, billboard, scale, model draw
sub_209950C
export/plan0/arm9_main/sub_209950C_0209950C.c
- docs/function_notes/agent_04.md:204 thunk: calls sub_209BBD0 with the Of6Tree1 model
sub_2099524
export/plan0/arm9_main/sub_2099524_02099524.c
- docs/function_notes/agent_04.md:205 loads Of6Tree1.nsbmd (tree)
sub_2099558
export/plan0/arm9_main/sub_2099558_02099558.c
- docs/function_notes/agent_04.md:206 registers decoration draw descriptor (sub_209BEF0) for om6Tree1
sub_209957C
export/plan0/arm9_main/sub_209957C_0209957C.c
- docs/function_notes/agent_04.md:207 draw (om6Tree1): matrix, billboard, scale, model draw
sub_20995F0
export/plan0/arm9_main/sub_20995F0_020995F0.c
- docs/function_notes/agent_04.md:208 thunk: calls sub_209BBD0 with the om6Tree1 model
sub_2099608
export/plan0/arm9_main/sub_2099608_02099608.c
- docs/function_notes/agent_04.md:209 loads om6Tree1.nsbmd (tree)
sub_209963C
export/plan0/arm9_main/sub_209963C_0209963C.c
- docs/function_notes/agent_04.md:210 registers decoration draw descriptor (sub_209BEF0) for KinoMount2
sub_2099660
export/plan0/arm9_main/sub_2099660_02099660.c
- docs/function_notes/agent_04.md:211 draw (KinoMount2): matrix, billboard, scale, model draw
sub_20996D4
export/plan0/arm9_main/sub_20996D4_020996D4.c
- docs/function_notes/agent_04.md:212 thunk: calls sub_209BBD0 with the KinoMount2 model
sub_20996EC
export/plan0/arm9_main/sub_20996EC_020996EC.c
- docs/function_notes/agent_04.md:213 loads KinoMount2.nsbmd (mushroom mountain)
sub_2099720
export/plan0/arm9_main/sub_2099720_02099720.c
- docs/function_notes/agent_04.md:214 registers decoration draw descriptor (sub_209BEF0) for KinoMount1
sub_2099744
export/plan0/arm9_main/sub_2099744_02099744.c
- docs/function_notes/agent_04.md:215 draw (KinoMount1): matrix, billboard, scale, model draw
sub_20997B8
export/plan0/arm9_main/sub_20997B8_020997B8.c
- docs/function_notes/agent_04.md:216 thunk: calls sub_209BBD0 with the KinoMount1 model
sub_20997D0
export/plan0/arm9_main/sub_20997D0_020997D0.c
- docs/function_notes/agent_04.md:217 loads KinoMount1.nsbmd (mushroom mountain)
sub_2099804
export/plan0/arm9_main/sub_2099804_02099804.c
- docs/function_notes/agent_04.md:218 registers decoration draw descriptor (sub_209BEF0) for KinoHouse2
sub_2099828
export/plan0/arm9_main/sub_2099828_02099828.c
- docs/function_notes/agent_04.md:219 draw (KinoHouse2): matrix, billboard, scale, model draw
sub_209989C
export/plan0/arm9_main/sub_209989C_0209989C.c
- docs/function_notes/agent_04.md:220 thunk: calls sub_209BBD0 with the KinoHouse2 model
sub_20998B4
export/plan0/arm9_main/sub_20998B4_020998B4.c
- docs/function_notes/agent_04.md:221 loads KinoHouse2.nsbmd (mushroom house)
sub_20998E8
export/plan0/arm9_main/sub_20998E8_020998E8.c
- docs/function_notes/agent_04.md:222 registers decoration draw descriptor (sub_209BEF0) for KinoHouse1
sub_209990C
export/plan0/arm9_main/sub_209990C_0209990C.c
- docs/function_notes/agent_04.md:223 draw (KinoHouse1): matrix, billboard, scale, model draw
sub_2099980
export/plan0/arm9_main/sub_2099980_02099980.c
- docs/function_notes/agent_04.md:224 thunk: calls sub_209BBD0 with the KinoHouse1 model
sub_2099998
export/plan0/arm9_main/sub_2099998_02099998.c
- docs/function_notes/agent_04.md:225 loads KinoHouse1.nsbmd (mushroom house)
sub_20999CC
export/plan0/arm9_main/sub_20999CC_020999CC.c
- docs/function_notes/agent_04.md:227 registers decoration draw descriptor (sub_209BEF0) for osaTree1c.nsbmd
sub_20999F0
export/plan0/arm9_main/sub_20999F0_020999F0.c
- docs/function_notes/agent_04.md:228 draw (osaTree1c.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099A64
export/plan0/arm9_main/sub_2099A64_02099A64.c
- docs/function_notes/agent_04.md:229 thunk: calls sub_209BBD0 with the osaTree1c.nsbmd model (delete/free callback)
sub_2099A7C
export/plan0/arm9_main/sub_2099A7C_02099A7C.c
- docs/function_notes/agent_04.md:230 loads osaTree1c.nsbmd (decoration model)
sub_2099AB0
export/plan0/arm9_main/sub_2099AB0_02099AB0.c
- docs/function_notes/agent_04.md:231 registers decoration draw descriptor (sub_209BEF0) for olaTree1c.nsbmd
sub_2099AD4
export/plan0/arm9_main/sub_2099AD4_02099AD4.c
- docs/function_notes/agent_04.md:232 draw (olaTree1c.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099B48
export/plan0/arm9_main/sub_2099B48_02099B48.c
- docs/function_notes/agent_04.md:233 thunk: calls sub_209BBD0 with the olaTree1c.nsbmd model (delete/free callback)
sub_2099B60
export/plan0/arm9_main/sub_2099B60_02099B60.c
- docs/function_notes/agent_04.md:234 loads olaTree1c.nsbmd (decoration model)
sub_2099B94
export/plan0/arm9_main/sub_2099B94_02099B94.c
- docs/function_notes/agent_04.md:235 registers decoration draw descriptor (sub_209BEF0) for DeTree1.nsbmd
sub_2099BB8
export/plan0/arm9_main/sub_2099BB8_02099BB8.c
- docs/function_notes/agent_04.md:236 draw (DeTree1.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099C2C
export/plan0/arm9_main/sub_2099C2C_02099C2C.c
- docs/function_notes/agent_04.md:237 thunk: calls sub_209BBD0 with the DeTree1.nsbmd model (delete/free callback)
sub_2099C44
export/plan0/arm9_main/sub_2099C44_02099C44.c
- docs/function_notes/agent_04.md:238 loads DeTree1.nsbmd (decoration model)
sub_2099C78
export/plan0/arm9_main/sub_2099C78_02099C78.c
- docs/function_notes/agent_04.md:239 registers decoration draw descriptor (sub_209BEF0) for Snow_Tree1.nsbmd
sub_2099C9C
export/plan0/arm9_main/sub_2099C9C_02099C9C.c
- docs/function_notes/agent_04.md:240 draw (Snow_Tree1.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099D10
export/plan0/arm9_main/sub_2099D10_02099D10.c
- docs/function_notes/agent_04.md:241 thunk: calls sub_209BBD0 with the Snow_Tree1.nsbmd model (delete/free callback)
sub_2099D28
export/plan0/arm9_main/sub_2099D28_02099D28.c
- docs/function_notes/agent_04.md:242 loads Snow_Tree1.nsbmd (decoration model)
sub_2099D5C
export/plan0/arm9_main/sub_2099D5C_02099D5C.c
- docs/function_notes/agent_04.md:243 registers decoration draw descriptor (sub_209BEF0) for MarioTree3.nsbmd
sub_2099D80
export/plan0/arm9_main/sub_2099D80_02099D80.c
- docs/function_notes/agent_04.md:244 draw (MarioTree3.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099DF4
export/plan0/arm9_main/sub_2099DF4_02099DF4.c
- docs/function_notes/agent_04.md:245 thunk: calls sub_209BBD0 with the MarioTree3.nsbmd model (delete/free callback)
sub_2099E0C
export/plan0/arm9_main/sub_2099E0C_02099E0C.c
- docs/function_notes/agent_04.md:246 loads MarioTree3.nsbmd (decoration model)
sub_2099E40
export/plan0/arm9_main/sub_2099E40_02099E40.c
- docs/function_notes/agent_04.md:247 registers decoration draw descriptor (sub_209BEF0) for TownTree1.nsbmd
sub_2099E64
export/plan0/arm9_main/sub_2099E64_02099E64.c
- docs/function_notes/agent_04.md:248 draw (TownTree1.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099ED8
export/plan0/arm9_main/sub_2099ED8_02099ED8.c
- docs/function_notes/agent_04.md:249 thunk: calls sub_209BBD0 with the TownTree1.nsbmd model (delete/free callback)
sub_2099EF0
export/plan0/arm9_main/sub_2099EF0_02099EF0.c
- docs/function_notes/agent_04.md:250 loads TownTree1.nsbmd (decoration model)
sub_2099F24
export/plan0/arm9_main/sub_2099F24_02099F24.c
- docs/function_notes/agent_04.md:251 registers decoration draw descriptor (sub_209BEF0) for GardenTree1.nsbmd
sub_2099F48
export/plan0/arm9_main/sub_2099F48_02099F48.c
- docs/function_notes/agent_04.md:252 draw (GardenTree1.nsbmd): matrix, billboard rotation, scale, model draw
sub_2099FBC
export/plan0/arm9_main/sub_2099FBC_02099FBC.c
- docs/function_notes/agent_04.md:253 thunk: calls sub_209BBD0 with the GardenTree1.nsbmd model (delete/free callback)
sub_2099FD4
export/plan0/arm9_main/sub_2099FD4_02099FD4.c
- docs/function_notes/agent_04.md:254 loads GardenTree1.nsbmd (decoration model)
sub_209A008
export/plan0/arm9_main/sub_209A008_0209A008.c
- docs/function_notes/agent_04.md:255 registers decoration draw descriptor (sub_209BEF0) for Bank_Tree1.nsbmd
sub_209A02C
export/plan0/arm9_main/sub_209A02C_0209A02C.c
- docs/function_notes/agent_04.md:256 draw (Bank_Tree1.nsbmd): matrix, billboard rotation, scale, model draw
sub_209A0A0
export/plan0/arm9_main/sub_209A0A0_0209A0A0.c
- docs/function_notes/agent_04.md:257 thunk: calls sub_209BBD0 with the Bank_Tree1.nsbmd model (delete/free callback)
sub_209A0B8
export/plan0/arm9_main/sub_209A0B8_0209A0B8.c
- docs/function_notes/agent_04.md:258 loads Bank_Tree1.nsbmd (decoration model)
sub_209A0EC
export/plan0/arm9_main/sub_209A0EC_0209A0EC.c
- docs/function_notes/agent_04.md:259 registers decoration draw descriptor (sub_209BEF0) for CrossTree1.nsbmd
sub_209A110
export/plan0/arm9_main/sub_209A110_0209A110.c
- docs/function_notes.md:27 tree draw: billboard matrix (sub_20E6CBC) + scale, then the model
sub_209A184
export/plan0/arm9_main/sub_209A184_0209A184.c
- docs/function_notes/agent_04.md:260 thunk: calls sub_209BBD0 with the CrossTree1.nsbmd model (delete/free callback)
sub_209A19C
export/plan0/arm9_main/sub_209A19C_0209A19C.c
- docs/function_notes/agent_04.md:261 loads CrossTree1.nsbmd (decoration model)
sub_209A1D0
export/plan0/arm9_main/sub_209A1D0_0209A1D0.c
- docs/function_notes/agent_04.md:262 registers decoration draw descriptor (sub_209BEF0) for NsCannon1.nsbmd
sub_209A1F4
export/plan0/arm9_main/sub_209A1F4_0209A1F4.c
- docs/function_notes/agent_04.md:263 draw (NsCannon1.nsbmd): matrix, billboard rotation, scale, model draw
sub_209A268
export/plan0/arm9_main/sub_209A268_0209A268.c
- docs/function_notes/agent_04.md:264 thunk: calls sub_209BBD0 with the NsCannon1.nsbmd model (delete/free callback)
sub_209A280
export/plan0/arm9_main/sub_209A280_0209A280.c
- docs/function_notes/agent_04.md:265 loads NsCannon1.nsbmd (decoration model)
sub_209A2B4
export/plan0/arm9_main/sub_209A2B4_0209A2B4.c
- docs/function_notes/agent_04.md:266 registers decoration draw descriptor (sub_209BEF0) for of6yoshi1.nsbmd
sub_209A2D8
export/plan0/arm9_main/sub_209A2D8_0209A2D8.c
- docs/function_notes/agent_04.md:267 draw (of6yoshi1.nsbmd): matrix, billboard rotation, scale, model draw
sub_209A34C
export/plan0/arm9_main/sub_209A34C_0209A34C.c
- docs/function_notes/agent_04.md:268 thunk: calls sub_209BBD0 with the of6yoshi1.nsbmd model (delete/free callback)
sub_209A364
export/plan0/arm9_main/sub_209A364_0209A364.c
- docs/function_notes/agent_04.md:269 loads of6yoshi1.nsbmd (decoration model)
sub_209A398
export/plan0/arm9_main/sub_209A398_0209A398.c
- docs/function_notes/agent_04.md:270 registers decoration draw descriptor (sub_209BEF0) for OlgPipe1.nsbmd
sub_209A3BC
export/plan0/arm9_main/sub_209A3BC_0209A3BC.c
- docs/function_notes/agent_04.md:271 draw (OlgPipe1.nsbmd): matrix, billboard rotation, scale, model draw
sub_209A430
export/plan0/arm9_main/sub_209A430_0209A430.c
- docs/function_notes/agent_04.md:272 thunk: calls sub_209BBD0 with the OlgPipe1.nsbmd model (delete/free callback)
sub_209A448
export/plan0/arm9_main/sub_209A448_0209A448.c
- docs/function_notes/agent_04.md:273 loads OlgPipe1.nsbmd (decoration model)
sub_209A47C
export/plan0/arm9_main/sub_209A47C_0209A47C.c
- docs/function_notes/agent_04.md:274 registers decoration draw descriptor (sub_209BEF0) for OlgMush1.nsbmd
sub_209A4A0
export/plan0/arm9_main/sub_209A4A0_0209A4A0.c
- docs/function_notes/agent_04.md:275 draw (OlgMush1.nsbmd): matrix, billboard rotation, scale, model draw
sub_209A514
export/plan0/arm9_main/sub_209A514_0209A514.c
- docs/function_notes/agent_04.md:276 thunk: calls sub_209BBD0 with the OlgMush1.nsbmd model (delete/free callback)
sub_209A52C
export/plan0/arm9_main/sub_209A52C_0209A52C.c
- docs/function_notes/agent_04.md:277 loads OlgMush1.nsbmd (decoration model)
sub_209A560
export/plan0/arm9_main/sub_209A560_0209A560.c
- docs/function_notes/agent_04.md:278 registers decoration draw descriptor (sub_209BEF0) for opa_tree1.nsbmd
sub_209A584
export/plan0/arm9_main/sub_209A584_0209A584.c
- docs/function_notes/agent_04.md:279 draw (opa_tree1.nsbmd): matrix, billboard rotation, scale, model draw
sub_209A5F8
export/plan0/arm9_main/sub_209A5F8_0209A5F8.c
- docs/function_notes/agent_04.md:280 thunk: calls sub_209BBD0 with the opa_tree1.nsbmd model (delete/free callback)
sub_209A610
export/plan0/arm9_main/sub_209A610_0209A610.c
- docs/function_notes/agent_04.md:281 loads opa_tree1.nsbmd (decoration model)
sub_209A644
export/plan0/arm9_main/sub_209A644_0209A644.c
- docs/function_notes/agent_04.md:283 registers decoration draw descriptor (sub_209BEF0) for BeachTree1
sub_209A668
export/plan0/arm9_main/sub_209A668_0209A668.c
- docs/function_notes/agent_04.md:284 draw (BeachTree1): matrix, billboard, scale, model draw
sub_209A6DC
export/plan0/arm9_main/sub_209A6DC_0209A6DC.c
- docs/function_notes/agent_04.md:285 thunk: calls sub_209BBD0 with the BeachTree1 model
sub_209A6F4
export/plan0/arm9_main/sub_209A6F4_0209A6F4.c
- docs/function_notes/agent_04.md:286 loads BeachTree1.nsbmd
sub_209A728
export/plan0/arm9_main/sub_209A728_0209A728.c
- docs/function_notes.md:28 decoration factory (generic, no collision class of its own)
sub_209A748
export/plan0/arm9_main/sub_209A748_0209A748.c
- docs/function_notes/agent_04.md:287 registers crab object class callbacks (init/update via sub_209BF49)
sub_209A768
export/plan0/arm9_main/sub_209A768_0209A768.c
- docs/function_notes/agent_04.md:288 registers crab draw descriptor (sub_209BEF0)
sub_209A78C
export/plan0/arm9_main/sub_209A78C_0209A78C.c
- docs/function_notes/agent_04.md:289 allocates actor-family class (sub_209BF70) for the crab (id 270/271)
sub_209A7DC
export/plan0/arm9_main/sub_209A7DC_0209A7DC.c
- vm_model/src/mapobj/crab.rs:1 Crab (0x1AC, Cheep Cheep Beach): tick
sub_209A7DC, initsub_209AF98. - vm_model/src/mapobj/crab.rs:87
sub_209A7DC, one tick. - docs/function_notes.md:275 crab tick (pause 30..90 random ticks, walk the path at 0.5, knocked / rising states)
- docs/function_notes.md:421 crab tick: 0 wait (idle clock), 1 walk, 2 flying (gravity 1024, roll; timeout -> path start, 5 units under spawn y, wobble start), 3 rising 512 a tick to spawn y -> wait (rng) state 0
- docs/function_notes/agent_04.md:290 crab tick: large state machine: sideways scuttle, claw animation, random timers, hit reaction, sounds (id 455)
sub_209AF64
export/plan0/arm9_main/sub_209AF64_0209AF64.c
- docs/function_notes/agent_04.md:291 fx12 multiply with rounding ((a*b+2048)>>12)
sub_209AF80
export/plan0/arm9_main/sub_209AF80_0209AF80.c
- docs/function_notes/agent_04.md:292 table lookup: first entry of sin/cos table at index angle>>4
sub_209AF98
export/plan0/arm9_main/sub_209AF98_0209AF98.c
- vm_model/src/mapobj/crab.rs:1 Crab (0x1AC, Cheep Cheep Beach): tick
sub_209A7DC, initsub_209AF98. - docs/function_notes.md:276 crab init (random first pause)
- docs/function_notes/agent_04.md:293 crab per-object init: clears state, sets initial velocity from constants, random start timer 30..90
sub_209B088
export/plan0/arm9_main/sub_209B088_0209B088.c
- vm_model/src/mapobj/crab.rs:55
sub_209B088: body uses +0xA8, claw uses +0xAC. Both retain their - game/src/objects.rs:353
sub_209B088draws the body and claw separately, each from its - docs/function_notes.md:3 crab draw: body frame is walk clock +0xA8 >> 12, claw frame is idle clock +0xAC >> 12; draws crab and crab_hand independently, with body/claw roll matrices. Rust pattern_frames and native CrabPattern now consume the two clocks. Original update clocks/wait/RNG replayed across 600 controlled calls in all four states; fresh draw-hook coverage remains unavailable.
- docs/function_notes/agent_04.md:294 crab draw: matrix, rotation by angle, sets claw frame, draws body (crab) and hand (crab_hand) models
sub_209B1FC
export/plan0/arm9_main/sub_209B1FC_0209B1FC.c
- docs/function_notes/agent_04.md:296 loads crab.nsbmd, crab.nsbtp, crab_hand.nsbmd and crab_hand.nsbtp
sub_209B270
export/plan0/arm9_main/sub_209B270_0209B270.c
- docs/function_notes/agent_04.md:297 crab class hit callback: on kind 1 computes push away from the hitting kart/object (sub_209B388)
sub_209B344
export/plan0/arm9_main/sub_209B344_0209B344.c
- vm_model/src/mapobj/crab.rs:7 A star kart knocks it flying (
sub_209B344->sub_209B388): state 2, 1.5 units a tick - vm_model/src/mapobj/crab.rs:61
sub_209B344: own-reaction 1 (a star kart, atkartmoving alongtravel(+0x68) with - docs/function_notes.md:35 crab (0x1AC) class callback
- docs/function_notes.md:419 crab kart callback: code 1 -> sub_209B388 with kart position, travel (+0x68), velocity
sub_209B388
export/plan0/arm9_main/sub_209B388_0209B388.c
- vm_model/src/mapobj/crab.rs:7 A star kart knocks it flying (
sub_209B344->sub_209B388): state 2, 1.5 units a tick - vm_model/src/mapobj/crab.rs:62
velocity) knocks it flying (sub_209B388). - docs/function_notes.md:420 crab knocked flying: 1.5 units sideways off the kart's travel (side by cross sign), + half kart velocity, up 4, roll 0x71C/-0x71C, 300 ticks, state 2
- docs/function_notes/agent_04.md:298 crab knockback: sets crab velocity (6144 scaled) and turn direction away from, or randomly if no, hitter
sub_209B60C
export/plan0/arm9_main/sub_209B60C_0209B60C.c
- docs/function_notes/agent_04.md:299 model wrapper: frame count of the animation at +0x20 (field +12 >> 12 style)
sub_209B620
export/plan0/arm9_main/sub_209B620_0209B620.c
- docs/function_notes/agent_04.md:300 model wrapper: frame count of the animation at +0x1C
sub_209B634
export/plan0/arm9_main/sub_209B634_0209B634.c
- vm_model/src/shine.rs:53
sub_209B634of the shine's animation: its frame count. - vm_model/src/mapobj/bats.rs:19 flap animation frame (+0xAC,
sub_209B634), the flap sound (sub_20D275C, 357) and the draw. - docs/function_notes.md:4 object model wrapper animation length: sprite helper +12 -> u16 +26, otherwise joint/pattern helper +16 -> sub_2087D0C(+32) converted to integer frames. Original reference crab body/claw wrappers both return 2.
- docs/function_notes/agent_04.md:301 model wrapper: number of frames of the model animation (texture-pattern or joint anim)
sub_209B688
export/plan0/arm9_main/sub_209B688_0209B688.c
- docs/function_notes.md:5 set object wrapper animation frame: write sprite helper u16 +24, otherwise helper +32 frame +12 and animation object frame as a2 << 12. Crab draw passes separate walk/idle frame indices.
- docs/function_notes/agent_04.md:302 model wrapper: sets current animation frame (texture-pattern frame or joint-animation frame)
sub_209B6C8
export/plan0/arm9_main/sub_209B6C8_0209B6C8.c
- docs/function_notes/agent_04.md:303 model wrapper: sets frame of the animation at +0x28
sub_209B6EC
export/plan0/arm9_main/sub_209B6EC_0209B6EC.c
- docs/function_notes/agent_04.md:304 model wrapper: frame count of the animation at +0x28
sub_209B710
export/plan0/arm9_main/sub_209B710_0209B710.c
- vm_model/src/mission_step.rs:273
framesthe animation's frame count (sub_209B710). - docs/function_notes/agent_04.md:305 model wrapper: frame count of the animation at +0x24
sub_209B734
export/plan0/arm9_main/sub_209B734_0209B734.c
- docs/function_notes/agent_04.md:306 model wrapper: sets frame of the animation at +0x24
sub_209B758
export/plan0/arm9_main/sub_209B758_0209B758.c
- docs/function_notes/agent_04.md:307 model wrapper: frame count of the animation at +0x1C
sub_209B77C
export/plan0/arm9_main/sub_209B77C_0209B77C.c
- docs/function_notes/agent_04.md:308 model wrapper: sets frame of the animation at +0x1C
sub_209B7A0
export/plan0/arm9_main/sub_209B7A0_0209B7A0.c
- docs/function_notes/agent_04.md:309 model wrapper: sets flip/mirror flags (x, y) on the model and its texture animation; writes scale signs +/-4096
sub_209B8AC
export/plan0/arm9_main/sub_209B8AC_0209B8AC.c
- docs/function_notes/agent_04.md:310 model wrapper: sets/clears render flag 0x8000 on the model and forwards to its animation
sub_209B904
export/plan0/arm9_main/sub_209B904_0209B904.c
- docs/function_notes/agent_04.md:311 model wrapper: forwards a parameter to the texture-pattern animation (sub_20134B0)
sub_209B940
export/plan0/arm9_main/sub_209B940_0209B940.c
- docs/function_notes/agent_04.md:312 model wrapper: sets model material/polygon-ID field (bits 24-29) and animation equivalent
sub_209B9A4
export/plan0/arm9_main/sub_209B9A4_0209B9A4.c
- docs/function_notes/agent_04.md:313 model wrapper: sets model alpha field (bits 16-20) and animation equivalent
sub_209BA08
export/plan0/arm9_main/sub_209BA08_0209BA08.c
- docs/function_notes/agent_04.md:314 model wrapper: sets low 4 bits (light mask) of model flags and animation equivalent
sub_209BA58
export/plan0/arm9_main/sub_209BA58_0209BA58.c
- docs/function_notes/agent_04.md:315 draws model shadow/volume for an object (sub_20EA740) with object +0x66
sub_209BA88
export/plan0/arm9_main/sub_209BA88_0209BA88.c
- docs/function_notes/agent_04.md:316 draws model: sends scale, renders model with position, and joint/texture animations (object +0x66, +4)
sub_209BB2C
export/plan0/arm9_main/sub_209BB2C_0209BB2C.c
- docs/function_notes/agent_04.md:317 draws model: like sub_209BA88 but with no position argument
sub_209BBD0
export/plan0/arm9_main/sub_209BBD0_0209BBD0.c
- docs/function_notes/agent_04.md:318 draws model's render object (sub_20E6A18) if present
sub_209BBFC
export/plan0/arm9_main/sub_209BBFC_0209BBFC.c
- docs/function_notes/agent_04.md:319 finds the first free object slot in a pool (flag 0x100 set) and returns it, 0 if none
sub_209BC5C
export/plan0/arm9_main/sub_209BC5C_0209BC5C.c
- docs/function_notes/agent_04.md:320 gets object pointer by index from a pool (sub_210008C)
sub_209BC74
export/plan0/arm9_main/sub_209BC74_0209BC74.c
- docs/function_notes/agent_04.md:321 loads model + texture-pattern wrapper (44 bytes): allocs wrapper and render obj, sets flags, copies scale
sub_209BD08
export/plan0/arm9_main/sub_209BD08_0209BD08.c
- docs/function_notes/agent_04.md:322 loads model-only wrapper (44 bytes) from an nsbmd file: allocs wrapper and render obj, sets flags, copies scale
sub_209BD90
export/plan0/arm9_main/sub_209BD90_0209BD90.c
- docs/function_notes/agent_04.md:324 loads a model-with-joint-animation wrapper (44 bytes, anim object 116 bytes, init sub_207AFA8) from file
sub_209BDE8
export/plan0/arm9_main/sub_209BDE8_0209BDE8.c
- docs/function_notes/agent_04.md:325 attaches a texture-SRT/pattern animation (type 2) from an nsbta/nsbtp file to a model wrapper (alloc 56 bytes)
sub_209BE1C
export/plan0/arm9_main/sub_209BE1C_0209BE1C.c
- docs/function_notes/agent_04.md:326 attaches a texture animation of type 1 (nsbta) to a model wrapper (alloc 56 bytes)
sub_209BE50
export/plan0/arm9_main/sub_209BE50_0209BE50.c
- docs/function_notes/agent_04.md:327 attaches an animation of type 0 (nsbca-like) to a model wrapper (alloc 56 bytes)
sub_209BE84
export/plan0/arm9_main/sub_209BE84_0209BE84.c
- docs/function_notes/agent_04.md:328 loads an nsbmd into a wrapper with a 108-byte render object (sub_2084E28) and sets default animation/light bits
sub_209BEF0
export/plan0/arm9_main/sub_209BEF0_0209BEF0.c
- docs/function_notes.md:26 decoration draw descriptor (load / draw / delete callbacks)
sub_209BF1C
export/plan0/arm9_main/sub_209BF1C_0209BF1C.c
- docs/function_notes/agent_04.md:329 allocates a 44-byte object class record (callbacks: init a1, draw a2, delete a3)
sub_209BF48
export/plan0/arm9_main/sub_209BF48_0209BF48.c
- docs/function_notes/agent_04.md:330 allocates a 40-byte object class record (callbacks a1, a2, a3)
sub_209BF70
export/plan0/arm9_main/sub_209BF70_0209BF70.c
- docs/function_notes.md:25 actor-family class allocation (callback, flags; sizes set by the object's init)
sub_209BF8C
export/plan0/arm9_main/sub_209BF8C_0209BF8C.c
- docs/function_notes/agent_04.md:331 wrapper: calls sub_209BFA8 with a1 = 0
sub_209BFA8
export/plan0/arm9_main/sub_209BFA8_0209BFA8.c
- docs/function_notes/agent_04.md:332 allocates a 64-byte actor-family class record (callbacks a1/a2, a3 draw, a4 flag, a5 flag)
sub_209BFE0
export/plan0/arm9_main/sub_209BFE0_0209BFE0.c
- vm_model/src/mapobj/pinball.rs:23 - 100..199 a bumper hit (
sub_209BFE0(code - 100), an event for the caller), speed 61440; - vm_model/src/mapobj/pinball.rs:45 A bumper is struck (
sub_209BFE0(n)). - docs/function_notes/agent_04.md:333 sets up a bounce/wobble state on an object in the pool (bound/cream object), plays sound 463 once
sub_209C0F4
export/plan0/arm9_main/sub_209C0F4_0209C0F4.c
- docs/function_notes/agent_04.md:334 registers object class callbacks (sub_209BF1D) for berry
sub_209C114
export/plan0/arm9_main/sub_209C114_0209C114.c
- docs/function_notes/agent_04.md:335 registers object class callbacks (sub_209BF1D) for cream
sub_209C134
export/plan0/arm9_main/sub_209C134_0209C134.c
- docs/function_notes/agent_04.md:336 registers object class callbacks (sub_209BF1D) for bound
sub_209C154
export/plan0/arm9_main/sub_209C154_0209C154.c
- docs/function_notes/agent_04.md:337 allocates actor-family class for berry (id 341)
sub_209C198
export/plan0/arm9_main/sub_209C198_0209C198.c
- docs/function_notes/agent_04.md:338 allocates actor-family class for cream (id 342)
sub_209C1DC
export/plan0/arm9_main/sub_209C1DC_0209C1DC.c
- docs/function_notes/agent_04.md:339 allocates actor-family class for bound (id 463)
sub_209C220
export/plan0/arm9_main/sub_209C220_0209C220.c
- docs/function_notes/agent_04.md:340 berry/cream/bound tick: follows path (sub_20D8CC8/20D8BF8), advances animation frame, wobble scale spring
sub_209C4BC
export/plan0/arm9_main/sub_209C4BC_0209C4BC.c
- docs/function_notes/agent_04.md:341 fx12 multiply with rounding ((a*b+2048)>>12)
sub_209C4D8
export/plan0/arm9_main/sub_209C4D8_0209C4D8.c
- docs/function_notes/agent_04.md:342 table lookup: first entry of sin/cos table at index angle>>4
sub_209C4F0
export/plan0/arm9_main/sub_209C4F0_0209C4F0.c
- docs/function_notes/agent_04.md:343 per-object init loop: starts path follower, speed 12288 (3.0), sets path progress
sub_209C5B8
export/plan0/arm9_main/sub_209C5B8_0209C5B8.c
- docs/function_notes/agent_04.md:344 draw (berry): matrix, position/16, wobble scale when state 1, model draw
sub_209C678
export/plan0/arm9_main/sub_209C678_0209C678.c
- docs/function_notes/agent_04.md:345 draw (cream): matrix, position/16, wobble scale when state 1, model draw
sub_209C738
export/plan0/arm9_main/sub_209C738_0209C738.c
- docs/function_notes/agent_04.md:346 loads berry.nsbmd and cream_effect.nsbmd
sub_209C770
export/plan0/arm9_main/sub_209C770_0209C770.c
- docs/function_notes/agent_04.md:347 loads cream.nsbmd and cream_effect.nsbmd
sub_209C7A8
export/plan0/arm9_main/sub_209C7A8_0209C7A8.c
- docs/function_notes/agent_04.md:348 draw (bound): matrix, position/16, wobble scale, set frame from +0xA0, model draw
sub_209C878
export/plan0/arm9_main/sub_209C878_0209C878.c
- docs/function_notes/agent_04.md:349 loads bound.nsbmd and bound.nsbtp
sub_209C8B0
export/plan0/arm9_main/sub_209C8B0_0209C8B0.c
- vm_model/src/obj_collision.rs:327 the pinball bumper's own test (
sub_209C8B0): a cylinder up its axis from its base - docs/function_notes/agent_04.md:350 bound collision: upright cylinder push-out (sub_20EAD80) with radius scaled by wobble when active
sub_209C964
export/plan0/arm9_main/sub_209C964_0209C964.c
- docs/function_notes/agent_04.md:351 object hit callback: on hit kind 2 starts wobble spring (state 1) and sets kart bit
sub_209C9FC
export/plan0/arm9_main/sub_209C9FC_0209C9FC.c
- game/src/objects.rs:1722 a pinball bumper struck by a kart (
sub_209C9FC, own-table kind 3 or 4) throws it - docs/function_notes/agent_04.md:352 object vs kart collision handler: computes push direction from kart velocity, sets bounce, plays sounds 341/342/437/463
sub_209CEBC
export/plan0/arm9_main/sub_209CEBC_0209CEBC.c
- docs/function_notes/agent_04.md:353 object delete callback: marks object, resets random state, stores +0x1C into +0xB4
sub_209CF34
export/plan0/arm9_main/sub_209CF34_0209CF34.c
- docs/function_notes/agent_04.md:354 sun tick: waits for kart proximity or timer, follows path, bobbing; sounds 546/5625
sub_209D394
export/plan0/arm9_main/sub_209D394_0209D394.c
- docs/function_notes/agent_04.md:355 per-object init loop: sets timer +0xA8 from class by game mode (1 or 5)
sub_209D3FC
export/plan0/arm9_main/sub_209D3FC_0209D3FC.c
- docs/function_notes/agent_04.md:356 sun draw: matrix, circular offset using angle tables, scale, model draw with LOD
sub_209D5EC
export/plan0/arm9_main/sub_209D5EC_0209D5EC.c
- docs/function_notes/agent_04.md:358 loads sun.nsbmd, sun.nsbca and sun_LOD.nsbmd
sub_209D650
export/plan0/arm9_main/sub_209D650_0209D650.c
- docs/function_notes/agent_04.md:359 object init: path follower start (sub_20D7DA8), spawns child (sub_20AC588), zero velocity
sub_209D694
export/plan0/arm9_main/sub_209D694_0209D694.c
- docs/function_notes/agent_04.md:360 spawns an object at a position with velocity (lifetime 450 frames) from the pool
sub_209D800
export/plan0/arm9_main/sub_209D800_0209D800.c
- docs/function_notes/agent_04.md:361 allocates actor-family class (sub_209BF70) for the object (ids 397 / 406)
sub_209D84C
export/plan0/arm9_main/sub_209D84C_0209D84C.c
- docs/function_notes/agent_04.md:362 falling-object tick: state 0 countdown then sound, state 1 falls with gravity -410 and KCL ground test (sub_1FFDEE4)
sub_209DD44
export/plan0/arm9_main/sub_209DD44_0209DD44.c
- docs/function_notes/agent_04.md:365 object hit callback: on hit kind 1 (if not already hit) sets flags, timer 360, pops up (vy 12288), sets two child bounds
sub_209DDEC
export/plan0/arm9_main/sub_209DDEC_0209DDEC.c
- docs/function_notes.md:38 0x1AE class callback
sub_209DEAA
(not in export)
- vm_model/src/lib.rs:7 (the SDK sequence player, which runs on the ARM7; first seen as
sub_209DEAA, - vm_model/src/seq.rs:3 Source IR:
sub_209DEAA(baseline; mis-decoded in places), cross-checked against the clean - vm_model/src/ir/vm_sub_209deaa.rs:1 Opcode model generated by tools/vm_scan.py from
sub_209DEAA_0209DEAA.c(baseline VM). - vm_model/src/ir/vm_sub_209deaa.rs:3 Dispatcher
sub_209DEAA@ 0x209deaa: 42 switch cases, cyclomatic 111. - vm_model/src/ir/vm_sub_209deaa.rs:194 Interpreter context as observed through
v15insub_209DEAA.
sub_209DECC
export/plan0/arm9_main/sub_209DECC_0209DECC.c
- docs/function_notes/agent_04.md:366 marks object flag, deletes object and frees its slot
sub_209DF20
export/plan0/arm9_main/sub_209DF20_0209DF20.c
- docs/function_notes/agent_04.md:367 registers decoration draw descriptor (sub_209BEF0) for fireball2
sub_209DF44
export/plan0/arm9_main/sub_209DF44_0209DF44.c
- docs/function_notes/agent_04.md:368 allocates actor-family class (sub_209BF70) for fireball2 (id 397)
sub_209DF84
export/plan0/arm9_main/sub_209DF84_0209DF84.c
- vm_model/src/mapobj/fire_ring.rs:1 Wario Stadium's fire rings (0x1AF): init
sub_209EA90/sub_209E310, ticksub_209DF84, - docs/function_notes/agent_04.md:369 fireball emitter tick: checks kart within 60 units radius of the emitter, spawns/moves ring of fireballs, sounds 450/1310
sub_209E310
export/plan0/arm9_main/sub_209E310_0209E310.c
- vm_model/src/mapobj/fire_ring.rs:1 Wario Stadium's fire rings (0x1AF): init
sub_209EA90/sub_209E310, ticksub_209DF84, - docs/function_notes/agent_04.md:370 fireball per-object init loop: random phase from frame count, angle and speed from class data
sub_209E508
export/plan0/arm9_main/sub_209E508_0209E508.c
- docs/function_notes/agent_04.md:371 fireball draw: for each fireball (up to count at +0xA0), matrix with rotation, scale, model draw; faces camera
sub_209E938
export/plan0/arm9_main/sub_209E938_0209E938.c
- docs/function_notes/agent_04.md:372 thunk: calls sub_209BBD0 with the fireball2 model
sub_209E950
export/plan0/arm9_main/sub_209E950_0209E950.c
- docs/function_notes/agent_04.md:373 loads fireball2.nsbmd
sub_209E988
export/plan0/arm9_main/sub_209E988_0209E988.c
- vm_model/src/mapobj/fire_ring.rs:2 hit test
sub_209E988. - vm_model/src/mapobj/fire_ring.rs:76
sub_209E988: does a sphere touch an outer-layer fireball? - game/src/objects.rs:1565 fire rings test their outer fireballs themselves (
sub_209E988) - docs/function_notes/agent_04.md:374 fireball collision test: true if a point is within (radius+60 units) of any of the fireballs (320-byte records)
sub_209EA10
export/plan0/arm9_main/sub_209EA10_0209EA10.c
- docs/function_notes/agent_04.md:375 fireball hit callback: sets knock flag on kart (11-tick cooldown per kart), hit effect
sub_209EA90
export/plan0/arm9_main/sub_209EA90_0209EA90.c
- vm_model/src/mapobj/fire_ring.rs:1 Wario Stadium's fire rings (0x1AF): init
sub_209EA90/sub_209E310, ticksub_209DF84, - docs/function_notes/agent_04.md:376 fireball object init/reset: copies counts from class, clears visibility flags, sets pool slot
sub_209EB04
export/plan0/arm9_main/sub_209EB04_0209EB04.c
- docs/function_notes/agent_04.md:377 registers decoration draw descriptor (sub_209BEF0) for puddle
sub_209EB28
export/plan0/arm9_main/sub_209EB28_0209EB28.c
- docs/function_notes/agent_04.md:378 allocates default actor-family class record (sub_209BFA8 with zero args)
sub_209EB54
export/plan0/arm9_main/sub_209EB54_0209EB54.c
- docs/function_notes/agent_04.md:379 puddle draw: matrix at position with +7373 height offset, rotation, scale, model draw
sub_209EC00
export/plan0/arm9_main/sub_209EC00_0209EC00.c
- docs/function_notes/agent_04.md:380 thunk: calls sub_209BBD0 with the puddle model
sub_209EC18
export/plan0/arm9_main/sub_209EC18_0209EC18.c
- docs/function_notes/agent_04.md:381 loads puddle.nsbmd
sub_209EC80
export/plan0/arm9_main/sub_209EC80_0209EC80.c
- game/src/objects.rs:714 Paintings (0x151 / 0x152,
sub_209EC80): wait a random 60..179 ticks, play once, again. - docs/function_notes.md:476 painting tick: state 1 waits, state 2 plays picture1/2.nsbca once (sounds at set frames), then a new wait 60 + rand(120)
- docs/function_notes/agent_04.md:382 picture tick: 3 states, countdown, then animates frame and plays sounds 277/278/279/280 (picture1/picture2, painting that attacks)
sub_209EFB4
export/plan0/arm9_main/sub_209EFB4_0209EFB4.c
- docs/function_notes.md:477 painting draw (picture1 or picture2 by +0xA4, frame +0xA0)
- docs/function_notes/agent_04.md:383 picture draw: matrix, scale, sets animation frame on picture1 or picture2 model, draw
sub_209F0A8
export/plan0/arm9_main/sub_209F0A8_0209F0A8.c
- docs/function_notes/agent_04.md:384 loads picture1.nsbmd/.nsbca and picture2.nsbmd/.nsbca
sub_209F124
export/plan0/arm9_main/sub_209F124_0209F124.c
- docs/function_notes.md:478 0x152 painting ctor: kind 1 (picture2)
- docs/function_notes/agent_04.md:385 sets object state +0xA4 = 1
sub_209F130
export/plan0/arm9_main/sub_209F130_0209F130.c
- docs/function_notes.md:479 0x151 painting ctor: kind 0 (picture1)
- docs/function_notes/agent_04.md:386 sets object state +0xA4 = 0
sub_209F13C
export/plan0/arm9_main/sub_209F13C_0209F13C.c
- docs/function_notes/agent_04.md:387 registers object class callbacks (sub_209BF49) with tick sub_209F178
sub_209F178
export/plan0/arm9_main/sub_209F178_0209F178.c
- docs/function_notes/agent_04.md:388 RainStar tick: advances animation frame, rotates yaw by 273 (about 1.5 degrees) per tick
sub_209F1C8
export/plan0/arm9_main/sub_209F1C8_0209F1C8.c
- docs/function_notes/agent_04.md:389 RainStar draw: matrix, position/16, yaw rotation from table, scale, sets frame, model draw
sub_209F2B0
export/plan0/arm9_main/sub_209F2B0_0209F2B0.c
- docs/function_notes/agent_04.md:390 loads RainStar.nsbmd and RainStar.nsbta
sub_209F338
export/plan0/arm9_main/sub_209F338_0209F338.c
- game/src/objects.rs:711 Chandelier (0x140,
sub_209F338): after a random 60..119 ticks (sub_209F514), swings for - docs/function_notes.md:473 chandelier tick: state 0 waits (+0xA4), state 1 plays chandelier.nsbca once (sounds at frames 70, 175, 250), back to 0 (no wait after the first)
- docs/function_notes/agent_04.md:391 chandelier tick: state 0/1 with frame counter, plays sounds 281/282/283 at frames 70, 175, 250
sub_209F514
export/plan0/arm9_main/sub_209F514_0209F514.c
- game/src/objects.rs:711 Chandelier (0x140,
sub_209F338): after a random 60..119 ticks (sub_209F514), swings for - docs/function_notes.md:474 chandelier init: wait 60 + rand(60) (race RNG at global + 1176)
- docs/function_notes/agent_04.md:392 chandelier per-object init: random start delay 60..120
sub_209F5CC
export/plan0/arm9_main/sub_209F5CC_0209F5CC.c
- docs/function_notes.md:475 chandelier draw (billboard-free matrix, nsbca frame +0xA0)
- docs/function_notes/agent_04.md:393 chandelier draw: matrix, billboard, scale, sets animation frame, model draw
sub_209F650
export/plan0/arm9_main/sub_209F650_0209F650.c
- docs/function_notes/agent_04.md:394 loads chandelier.nsbmd and chandelier.nsbca
sub_209F6D8
export/plan0/arm9_main/sub_209F6D8_0209F6D8.c
- docs/function_notes/agent_04.md:395 TownMonte tick: moves up with accel 0x4000, flips direction at 1490944, handles event with sound
sub_209F800
export/plan0/arm9_main/sub_209F800_0209F800.c
- docs/function_notes/agent_04.md:396 TownMonte per-object init: random frame offset from model animation length, timers cleared
sub_209FB0C
export/plan0/arm9_main/sub_209FB0C_0209FB0C.c
- docs/function_notes/agent_04.md:397 TownMonte draw: scale by remaining height (1490944 minus pos), scale matrix, set frame, model draw
sub_209FBE4
export/plan0/arm9_main/sub_209FBE4_0209FBE4.c
- docs/function_notes/agent_04.md:398 loads TownMonte.nsbmd and TownMonte.nsbtp, sets class +0x14 callback
sub_209FC2C
export/plan0/arm9_main/sub_209FC2C_0209FC2C.c
- docs/function_notes/agent_04.md:399 thunk: calls function pointer at 0x020E6C0C-region (draw helper)
sub_209FC38
export/plan0/arm9_main/sub_209FC38_0209FC38.c
- docs/function_notes/agent_04.md:400 clears 19 global words and creates class record (sub_209BF8C)
sub_209FC78
export/plan0/arm9_main/sub_209FC78_0209FC78.c
- docs/function_notes/agent_04.md:401 lazily allocates a 64-byte copy of a template record (per type index at class +0x28)
sub_209FDB4
export/plan0/arm9_main/sub_209FDB4_0209FDB4.c
- docs/function_notes/agent_04.md:402 bobbing object tick: spring on height (+0xAC..), sine from angle table, 3-state sequence
sub_20A0028
export/plan0/arm9_main/sub_20A0028_020A0028.c
- docs/function_notes/agent_04.md:403 fx12 multiply with rounding ((a*b+2048)>>12)
sub_20A0044
export/plan0/arm9_main/sub_20A0044_020A0044.c
- docs/function_notes/agent_04.md:404 table lookup: second entry of sin/cos table at index angle>>4 (cos)
sub_20A0064
export/plan0/arm9_main/sub_20A0064_020A0064.c
- docs/function_notes/agent_04.md:406 per-object init loop: starts path follower (sub_20D7DA8), speed from path length (20480 * count / ..), progress init
sub_20A018C
export/plan0/arm9_main/sub_20A018C_020A018C.c
- docs/function_notes/agent_04.md:407 airship draw: matrix, translate Y by bob height, yaw rotation from table, scale, model draw
sub_20A0294
export/plan0/arm9_main/sub_20A0294_020A0294.c
- docs/function_notes/agent_04.md:408 loads airship.nsbmd
sub_20A02C8
export/plan0/arm9_main/sub_20A02C8_020A02C8.c
- docs/function_notes/agent_04.md:409 returns (520192 - first object's +0xA4) >> 12 (airship progress remaining in units)
sub_20A02F8
export/plan0/arm9_main/sub_20A02F8_020A02F8.c
- docs/function_notes/agent_04.md:410 registers object class callbacks (sub_209BF49) for the airship
sub_20A0318
export/plan0/arm9_main/sub_20A0318_020A0318.c
- docs/function_notes/agent_04.md:411 airship tick: 15-tick cadence, kart distance bands (near/mid/far), path follow, bobbing, random cannon timers
sub_20A066C
export/plan0/arm9_main/sub_20A066C_020A066C.c
- docs/function_notes/agent_04.md:412 airship per-object init loop: course-specific (course ids 18 and 31) start position/height and child offsets
sub_20A089C
export/plan0/arm9_main/sub_20A089C_020A089C.c
- docs/function_notes/agent_04.md:413 sets airship sound ids by course (course 18 -> 289, course 31 -> 273/266, else 525)
sub_20A08EC
export/plan0/arm9_main/sub_20A08EC_020A08EC.c
- vm_model/src/battle.rs:2 (
sub_20A3FA8, one 56-byte block per racer at manager +164) and score manager (sub_20A08EC, - vm_model/src/battle.rs:119 The score manager's button windows (
sub_20A08EC) for one tick. - vm_model/src/battle.rs:144 One tick (
sub_20A08ECthensub_20A3FA8), after the start. - docs/function_notes/agent_04.md:414 battle score manager tick: updates every racer's record, handles eliminations and rank re-sorting
sub_20A0E00
export/plan0/arm9_main/sub_20A0E00_020A0E00.c
- docs/function_notes/agent_04.md:415 allocates and initialises the per-racer score/rank records (960 bytes, 112 per racer, rank slots -2)
sub_20A0F0C
export/plan0/arm9_main/sub_20A0F0C_020A0F0C.c
- vm_model/src/shine.rs:59
sub_20A0F0C: the next random point of the course's point table (advances its cursor). - game/src/shine.rs:41 The magnet's point table (
sub_20A0F0C). - game/src/shine.rs:118
sub_20A0F0C: step the cursor over the point table by 1..5. - docs/function_notes/agent_04.md:416 advances a random number and bumps a global counter (+0x3B8 index) modulo a limit
sub_20A0FF0
export/plan0/arm9_main/sub_20A0FF0_020A0FF0.c
- vm_model/src/shine.rs:55
sub_20A0FF0: position of racerid. - docs/function_notes/agent_04.md:417 returns pointer to racer record +12 (112-byte record array)
sub_20A100C
export/plan0/arm9_main/sub_20A100C_020A100C.c
- docs/function_notes/agent_04.md:418 returns whether the leader count equals the racer's rank limit and a global is negative
sub_20A1048
export/plan0/arm9_main/sub_20A1048_020A1048.c
- docs/function_notes/agent_04.md:419 returns whether the target score differs from the racer's score when it equals the global target
sub_20A1084
export/plan0/arm9_main/sub_20A1084_020A1084.c
- vm_model/src/mission_step.rs:155 active): a racer whose record is live (
sub_20A1084) and whose counter is non-zero - vm_model/src/mission_step.rs:201
sub_20A1084(player racer): the player's record is live. - docs/function_notes/agent_04.md:420 returns racer record state +8 != 0 (racer finished/eliminated flag)
sub_20A10AC
export/plan0/arm9_main/sub_20A10AC_020A10AC.c
- docs/function_notes/agent_04.md:421 adds a2 to racer record +0x50 (16-bit counter)
sub_20A10D4
export/plan0/arm9_main/sub_20A10D4_020A10D4.c
- docs/function_notes/agent_04.md:422 getter: racer record +0x50 (16-bit counter)
sub_20A10F0
export/plan0/arm9_main/sub_20A10F0_020A10F0.c
- vm_model/src/battle.rs:17 takes one up (
sub_20A10F0(-1)); a kart with none up is out (sub_20A16D0). - docs/function_notes/agent_04.md:423 adds a2 to racer score (+0x4C) and re-sorts the ranking up or down (sub_20A1B6C / sub_20A19F8)
sub_20A1154
export/plan0/arm9_main/sub_20A1154_020A1154.c
- vm_model/src/mission_step.rs:156 (
sub_20A1154) is ended (sub_20A1748) once this counter passes 15. - docs/function_notes/agent_04.md:424 getter: racer score (+0x4C) clamped to >= 0
sub_20A1180
export/plan0/arm9_main/sub_20A1180_020A1180.c
- docs/function_notes/agent_04.md:425 getter: global target/limit value (+0x3AC) as 16-bit
sub_20A119C
export/plan0/arm9_main/sub_20A119C_020A119C.c
- vm_model/src/shine.rs:385
heldthe sum of the karts' scores (sub_20A119C),neededthe course's shine count - docs/function_notes/agent_04.md:426 sum of all racers' non-negative scores
sub_20A1218
export/plan0/arm9_main/sub_20A1218_020A1218.c
- vm_model/src/shine.rs:78
sub_20A1218(-1): one live shine less. - docs/function_notes/agent_04.md:427 adds a1 to global 16-bit counter +0x3A0
sub_20A1238
export/plan0/arm9_main/sub_20A1238_020A1238.c
- vm_model/src/shine.rs:384
sub_20A6D8C: the Shine Runners spawner.liveissub_20A1238(shines in the world), - docs/function_notes/agent_04.md:428 getter: global 16-bit counter +0x3A0
sub_20A1250
export/plan0/arm9_main/sub_20A1250_020A1250.c
- docs/function_notes/agent_04.md:429 getter: racer rank (+0x48 16-bit)
sub_20A126C
export/plan0/arm9_main/sub_20A126C_020A126C.c
- vm_model/src/mission_step.rs:89
sub_2181A80.manager_activeismode == 4 && sub_20A126C(): the step does nothing then. - vm_model/src/mission_step.rs:199
mode == 4 && sub_20A126C(). - docs/function_notes/agent_04.md:430 returns whether global +0x3B4 >= 0 (score mode active)
sub_20A128C
export/plan0/arm9_main/sub_20A128C_020A128C.c
- docs/function_notes/agent_04.md:431 returns whether score mode active and global +0x3A8 negative
sub_20A12B8
export/plan0/arm9_main/sub_20A12B8_020A12B8.c
- vm_model/src/mission_target.rs:855 (
def +0); the caller runs the mission hooks (sub_21817C0before,sub_20A12B8on a kill). - game/src/mission.rs:242 a defeated boss ends the mission (
sub_20A12B8) whatever the kind - docs/function_notes/agent_04.md:432 end-of-round placement: computes each racer's final placement from scores and ranks (modes 2/4)
sub_20A1520
export/plan0/arm9_main/sub_20A1520_020A1520.c
- game/src/shine.rs:304 Time up (
sub_20A1520): each round the racers on the lowest score are out (unless all are - docs/function_notes/agent_04.md:433 advances the round/step counter and finalises results (resets records, picks winner racers)
sub_20A16D0
export/plan0/arm9_main/sub_20A16D0_020A16D0.c
- vm_model/src/battle.rs:17 takes one up (
sub_20A10F0(-1)); a kart with none up is out (sub_20A16D0). - vm_model/src/battle.rs:86 Out of the match (
sub_20A16D0). - vm_model/src/battle.rs:240 left up is out (
sub_20A16D0). - vm_model/src/battle.rs:255 out (
sub_20A16D0). (sub_20A4F54swaps one balloon each, so the counts do not change.) - docs/function_notes/agent_04.md:434 marks a racer for entry if not yet present (sub_20A1904 then sub_20A1790)
sub_20A1728
(not in export)
- docs/function_notes/agent_04.md:435 clears racer record state +8
sub_20A1748
export/plan0/arm9_main/sub_20A1748_020A1748.c
- vm_model/src/mission_step.rs:156 (
sub_20A1154) is ended (sub_20A1748) once this counter passes 15. - docs/function_notes/agent_04.md:436 resets a racer's rank slots (-2) and calls the per-racer init callback at +0x388
sub_20A1790
export/plan0/arm9_main/sub_20A1790_020A1790.c
- game/src/shine.rs:52 Racers still in the match (
sub_20A1790state 0). - game/src/shine.rs:305 level), a new 30 s round starts, until one is left (
sub_20A1790). - docs/function_notes/agent_04.md:437 flags all karts with bit 0x2000 and recomputes ranks for racers with equal score (tie handling)
sub_20A1904
export/plan0/arm9_main/sub_20A1904_020A1904.c
- docs/function_notes/agent_04.md:438 marks a racer present (+8 = 1), calls enter callback, sets initial score, re-sorts, init kart for mode
sub_20A19F8
export/plan0/arm9_main/sub_20A19F8_020A19F8.c
- docs/function_notes/agent_04.md:439 bubble ranking down: swaps rank values with next-ranked racers that now score higher
sub_20A1B6C
export/plan0/arm9_main/sub_20A1B6C_020A1B6C.c
- docs/function_notes/agent_04.md:440 bubble ranking up: swaps rank values with lower-ranked racers that now score lower
sub_20A1CD8
export/plan0/arm9_main/sub_20A1CD8_020A1CD8.c
- docs/function_notes/agent_04.md:441 points for a racer by placement: formula depends on mode (2 or 4); clamps to 1..3
sub_20A1DDC
export/plan0/arm9_main/sub_20A1DDC_020A1DDC.c
- docs/function_notes/agent_04.md:442 clears column a1 of the pairwise records (+0x24) for all racers
sub_20A1E40
export/plan0/arm9_main/sub_20A1E40_020A1E40.c
- docs/function_notes/agent_04.md:444 sets racer team/index (+0x44) from kart +0x78 when kart condition holds
sub_20A1EE4
export/plan0/arm9_main/sub_20A1EE4_020A1EE4.c
- docs/function_notes/agent_04.md:445 pairwise hit tracking between racers a1 and a2: updates counts, triggers score callbacks
sub_20A21BC
export/plan0/arm9_main/sub_20A21BC_020A21BC.c
- docs/function_notes/agent_04.md:447 if a2 non-zero, calls score-change callback stored at global +0x39C (if set), returns a1
sub_20A2204
export/plan0/arm9_main/sub_20A2204_020A2204.c
- docs/function_notes/agent_04.md:448 getter: racer record +0x6C
sub_20A2220
export/plan0/arm9_main/sub_20A2220_020A2220.c
- docs/function_notes/agent_04.md:449 setter: racer record +0x6C = a2
sub_20A223C
export/plan0/arm9_main/sub_20A223C_020A223C.c
- docs/function_notes/agent_04.md:450 getter: racer record +0x68 (returns -1 when score mode inactive)
sub_20A2264
export/plan0/arm9_main/sub_20A2264_020A2264.c
- docs/function_notes/agent_04.md:451 getter: racer record +0x64 (returns -1 when score mode inactive)
sub_20A228C
export/plan0/arm9_main/sub_20A228C_020A228C.c
- docs/function_notes/agent_04.md:452 sets racer record +0x64 = -1
sub_20A22AC
export/plan0/arm9_main/sub_20A22AC_020A22AC.c
- docs/function_notes/agent_04.md:453 if game mode 1 and kart condition (sub_1FFC67C) false, sets racer record +0x64 = 10 (invulnerability/flash timer)
sub_20A2300
export/plan0/arm9_main/sub_20A2300_020A2300.c
- docs/function_notes/agent_04.md:454 sets score callback global +0x39C
sub_20A2314
export/plan0/arm9_main/sub_20A2314_020A2314.c
- docs/function_notes/agent_04.md:455 sets score callback global +0x390
sub_20A2328
export/plan0/arm9_main/sub_20A2328_020A2328.c
- docs/function_notes/agent_04.md:456 sets score callback global +0x38C
sub_20A233C
export/plan0/arm9_main/sub_20A233C_020A233C.c
- docs/function_notes/agent_04.md:457 sets score callback global +0x388
sub_20A2350
export/plan0/arm9_main/sub_20A2350_020A2350.c
- docs/function_notes/agent_04.md:458 sets score callback global +0x384
sub_20A2364
export/plan0/arm9_main/sub_20A2364_020A2364.c
- docs/function_notes/agent_04.md:459 sets score callback global +0x380
sub_20A2378
export/plan0/arm9_main/sub_20A2378_020A2378.c
- docs/function_notes/agent_04.md:460 getter: score manager global +0x3BC
sub_20A238C
export/plan0/arm9_main/sub_20A238C_020A238C.c
- docs/function_notes/agent_04.md:461 setter: score manager global +0x3BC
sub_20A23A0
export/plan0/arm9_main/sub_20A23A0_020A23A0.c
- vm_model/src/shine.rs:57
sub_20A23A0: extra height of racerid's head. - docs/function_notes/agent_04.md:462 lookup: base table value indexed by object's first field plus per-entry value (12-byte records at +0x48)
sub_20A23CC
export/plan0/arm9_main/sub_20A23CC_020A23CC.c
- docs/function_notes/agent_04.md:463 Toad (T_kino) display draw: set up 3D state, scale 1, translate, rotate by angle, draw models
sub_20A2558
export/plan0/arm9_main/sub_20A2558_020A2558.c
- docs/function_notes/agent_04.md:464 Toad display tick: advances angle by 109, bounce spring on height, calls sub_208B8C8 when state < 3
sub_20A2668
export/plan0/arm9_main/sub_20A2668_020A2668.c
- docs/function_notes/agent_04.md:465 fx12 multiply with rounding ((a*b+2048)>>12)
sub_20A2684
export/plan0/arm9_main/sub_20A2684_020A2684.c
- docs/function_notes/agent_04.md:466 table lookup: first entry of sin/cos table at index angle>>4
sub_20A269C
export/plan0/arm9_main/sub_20A269C_020A269C.c
- docs/function_notes/agent_04.md:467 creates the Toad display (292 bytes): loads T_kino.nsbmd and T_kino.nsbtp, sets per-character light colours and positions
sub_20A29CC
export/plan0/arm9_main/sub_20A29CC_020A29CC.c
- docs/function_notes/agent_04.md:468 Toad display render: set viewport/lights (sub_2010FAC), builds camera and draws the Toad model and shadows
sub_20A2E4C
export/plan0/arm9_main/sub_20A2E4C_020A2E4C.c
- docs/function_notes/agent_04.md:469 setter: object +0xF4 = a2, +0xF8 = a3
sub_20A2E58
export/plan0/arm9_main/sub_20A2E58_020A2E58.c
- docs/function_notes/agent_04.md:470 setter: object +0xA4 = a2
sub_20A2E60
export/plan0/arm9_main/sub_20A2E60_020A2E60.c
- docs/function_notes/agent_04.md:471 getter: object +0xD0
sub_20A2E68
export/plan0/arm9_main/sub_20A2E68_020A2E68.c
- docs/function_notes/agent_04.md:472 sets object +0xE0 = 0
sub_20A2E74
export/plan0/arm9_main/sub_20A2E74_020A2E74.c
- docs/function_notes/agent_04.md:473 VEC_Add(a1+16, a2, a1+16): adds a2 to the object velocity
sub_20A2E88
export/plan0/arm9_main/sub_20A2E88_020A2E88.c
- docs/function_notes/agent_04.md:474 copies two vectors into object +0x2C and +0x2F (12 bytes each)
sub_20A2EBC
export/plan0/arm9_main/sub_20A2EBC_020A2EBC.c
- docs/function_notes/agent_04.md:475 resets follower state (+0xA0=30, +0xA4=-1, +0xF4=1), places at a2 position + height offset
sub_20A2F0C
export/plan0/arm9_main/sub_20A2F0C_020A2F0C.c
- docs/function_notes/agent_04.md:476 ends follower: owner = -1, flags reset, deletes object (sub_20D2398)
sub_20A2F30
export/plan0/arm9_main/sub_20A2F30_020A2F30.c
- docs/function_notes/agent_04.md:477 follower shrinks by a3 per tick; at zero size resets state and deletes object
sub_20A2F9C
export/plan0/arm9_main/sub_20A2F9C_020A2F9C.c
- vm_model/src/battle.rs:231 A new balloon starts growing (
sub_20A2FE4thensub_20A2F9C): one spare used. - docs/function_notes/agent_04.md:478 follower grows by a3 per tick; at full size (4096) fixes at 600 timer and flag
sub_20A2FE4
export/plan0/arm9_main/sub_20A2FE4_020A2FE4.c
- vm_model/src/battle.rs:231 A new balloon starts growing (
sub_20A2FE4thensub_20A2F9C): one spare used. - docs/function_notes/agent_04.md:479 spawns a follower object (108-byte class) at position a2 with owner/type a1
sub_20A305C
export/plan0/arm9_main/sub_20A305C_020A305C.c
- docs/function_notes/agent_04.md:480 per-object init loop: assigns owner kart to followers, sets scale 4096, clears state
sub_20A3154
export/plan0/arm9_main/sub_20A3154_020A3154.c
- docs/function_notes/agent_04.md:481 follower tick: bobbing spring, kart-following movement, spawns particle effect 91, timers, deletes at end
sub_20A35B0
export/plan0/arm9_main/sub_20A35B0_020A35B0.c
- docs/function_notes/agent_04.md:482 orients follower yaw toward the camera/viewer kart based on relative position
sub_20A3690
export/plan0/arm9_main/sub_20A3690_020A3690.c
- docs/function_notes/agent_04.md:483 getter: object +0x78 & 0x3FFFFFE0
sub_20A369C
export/plan0/arm9_main/sub_20A369C_020A369C.c
- docs/function_notes/agent_04.md:484 getter: object flags +2 & 0x12
sub_20A36A8
export/plan0/arm9_main/sub_20A36A8_020A36A8.c
- docs/function_notes/agent_04.md:485 follower position update: follows owner kart velocity (x1.5) or floats up, pulls toward target with spring
sub_20A392C
export/plan0/arm9_main/sub_20A392C_020A392C.c
- docs/function_notes/agent_04.md:486 effect callback: sets object +0x72 from sub_208606C of effect handle at +0xA8
sub_20A3948
export/plan0/arm9_main/sub_20A3948_020A3948.c
- docs/function_notes/agent_04.md:488 balloon tick (one balloon): follows owner kart, spring wobble, detach/pop states, sound 3942, uses scales by distance 10000/40000
sub_20A3E38
export/plan0/arm9_main/sub_20A3E38_020A3E38.c
- docs/function_notes/agent_04.md:489 balloon draw prep: sets light/camera-relative vectors (kart pos >>1 and >>3) then draws balloon model (sub_209BBD0)
sub_20A3EB8
export/plan0/arm9_main/sub_20A3EB8_020A3EB8.c
- docs/function_notes/agent_04.md:490 loads balloon.nsbmd and balloon.nsbtp, sets alpha/light, hides it
sub_20A3F48
export/plan0/arm9_main/sub_20A3F48_020A3F48.c
- docs/function_notes/agent_04.md:491 balloon class factory: only in modes 2 (variant 0) and 4, else returns 0
sub_20A3FA8
export/plan0/arm9_main/sub_20A3FA8_020A3FA8.c
- vm_model/src/battle.rs:2 (
sub_20A3FA8, one 56-byte block per racer at manager +164) and score manager (sub_20A08EC, - vm_model/src/battle.rs:106 The start (
sub_20A3FA8's delay running out):settingsare the battle object's settings 0 - vm_model/src/battle.rs:144 One tick (
sub_20A08ECthensub_20A3FA8), after the start. - game/src/battle.rs:6 balloon manager
sub_20A3FA8): hold the button to pump, release and it deflates. Not ported: - game/src/battle.rs:72 the manager's start delay runs out (
sub_20A3FA8): each kart blows up its first balloon - docs/function_notes/agent_04.md:492 balloon manager tick: per racer balloon state machine (spawn, pop, steal), positions each balloon above its kart, sound 614/338
sub_20A49D4
export/plan0/arm9_main/sub_20A49D4_020A49D4.c
- docs/function_notes/agent_04.md:493 balloon manager init: pool setup (id 108), per-racer team/ team balloon colour index, installs callbacks
sub_20A4B70
export/plan0/arm9_main/sub_20A4B70_020A4B70.c
- docs/function_notes/agent_04.md:494 balloon: moves all of a racer's balloons by an offset (vector a2) and calls a hook
sub_20A4C20
export/plan0/arm9_main/sub_20A4C20_020A4C20.c
- docs/function_notes/agent_04.md:495 in mode 2 initialises the shine/follower objects (sub_20A305C), else nothing
sub_20A4C58
export/plan0/arm9_main/sub_20A4C58_020A4C58.c
- docs/function_notes/agent_04.md:496 removes all of a racer's balloons one by one (sub_20A10F0 -1), updating balloon list pointers
sub_20A4D94
export/plan0/arm9_main/sub_20A4D94_020A4D94.c
- docs/function_notes/agent_04.md:497 removes one balloon from a racer (swapping list entries), plays loss effect (sound 339) if present
sub_20A4F54
export/plan0/arm9_main/sub_20A4F54_020A4F54.c
- vm_model/src/battle.rs:255 out (
sub_20A16D0). (sub_20A4F54swaps one balloon each, so the counts do not change.) - docs/function_notes/agent_04.md:498 balloon steal: moves a balloon from racer a1 to racer a2 (list swaps and counts), sound 335
sub_20A5268
export/plan0/arm9_main/sub_20A5268_020A5268.c
- vm_model/src/battle.rs:252 The balloon steal (
sub_20A5268):victimloses its top balloon. Ifthiefhas fewer than - docs/function_notes/agent_04.md:499 balloon steal variant: checks a2 balloon count < 3 and a1 has balloons, transfers one, sounds 335/339
sub_20A5608
export/plan0/arm9_main/sub_20A5608_020A5608.c
- vm_model/src/shine.rs:2
sub_20A5744/sub_20A5608(spawns),sub_20A6AE4(pick-up) and the Shine Runners spawner - vm_model/src/shine.rs:140
sub_20A5608: a shine knocked out of kartfromby kartby; it first flies to a - docs/function_notes/agent_04.md:500 spawns a popped-balloon/shine object (pool 106) at kart a1 with owner ids from a1 and a2, vy 4096
sub_20A5744
export/plan0/arm9_main/sub_20A5744_020A5744.c
- vm_model/src/shine.rs:2
sub_20A5744/sub_20A5608(spawns),sub_20A6AE4(pick-up) and the Shine Runners spawner - vm_model/src/shine.rs:125
sub_20A5744: a popped object.heavyis the original's third argument (falls from - vm_model/src/shine.rs:430 to
sub_20A5744); it then falls to 20 units above it. - docs/function_notes/agent_04.md:501 spawns a popped object (pool 106) at a position a1 (optional extra lift a3), vy 10240
sub_20A5848
export/plan0/arm9_main/sub_20A5848_020A5848.c
- docs/function_notes/agent_04.md:502 deletes all pool-106 objects that are not flagged persistent (0x100)
sub_20A58B4
export/plan0/arm9_main/sub_20A58B4_020A58B4.c
- docs/function_notes/agent_04.md:503 registers object class callbacks (sub_209BF49) for pool-106 object
sub_20A58D0
export/plan0/arm9_main/sub_20A58D0_020A58D0.c
- docs/function_notes/agent_04.md:504 registers object class callbacks (sub_209BF1D) for pool-107 object (shine)
sub_20A58F4
export/plan0/arm9_main/sub_20A58F4_020A58F4.c
- docs/function_notes/agent_04.md:505 registers decoration draw descriptor (sub_209BEF0) for shine
sub_20A5918
export/plan0/arm9_main/sub_20A5918_020A5918.c
- docs/function_notes/agent_04.md:506 allocates actor-family class (sub_209BFA8) for shine, extents +/-1638400
sub_20A5958
export/plan0/arm9_main/sub_20A5958_020A5958.c
- vm_model/src/shine.rs:1 Shine / popped-balloon objects of the battle modes (pool 106),
sub_20A5958(tick), - vm_model/src/shine.rs:213
sub_20A5958: one tick. - game/src/shine.rs:5 The shine object itself is the game's code (
sub_20A5958and friends); what is approximated - docs/function_notes.md:639 pool-106 popped balloon / shine object tick (states 0 fall,1 rest,2 carried,3 magnet,4 flung,5 up,6 fade); ported in vm_model/src/shine.rs (replay vs BizHawk not done).
- docs/function_notes/agent_04.md:507 shine/dropped-balloon tick: big state machine (falls, bounces, magnetise to karts, timers), sounds 313/334
sub_20A683C
export/plan0/arm9_main/sub_20A683C_020A683C.c
- docs/function_notes/agent_04.md:508 shine draw: matrix, billboard, scale if < 4096, rotation by angle table (+0xA4), model draw
sub_20A697C
export/plan0/arm9_main/sub_20A697C_020A697C.c
- docs/function_notes/agent_04.md:509 advances shared animation phase counter (0..2)
sub_20A69A0
export/plan0/arm9_main/sub_20A69A0_020A69A0.c
- docs/function_notes/agent_04.md:510 resets shared animation phase counter to 0
sub_20A69B4
export/plan0/arm9_main/sub_20A69B4_020A69B4.c
- docs/function_notes/agent_04.md:511 shine16 draw: matrix, billboard, scale, flip flags, sets frame, model draw
sub_20A6A90
export/plan0/arm9_main/sub_20A6A90_020A6A90.c
- docs/function_notes/agent_04.md:512 thunk: calls sub_209BBD0 with the shine16 model
sub_20A6AA8
export/plan0/arm9_main/sub_20A6AA8_020A6AA8.c
- docs/function_notes/agent_04.md:513 loads shine16.nsbmd and shine16.nsbtp (Shine Sprite model)
sub_20A6AE4
export/plan0/arm9_main/sub_20A6AE4_020A6AE4.c
- vm_model/src/shine.rs:2
sub_20A5744/sub_20A5608(spawns),sub_20A6AE4(pick-up) and the Shine Runners spawner - vm_model/src/shine.rs:158
sub_20A6AE4: a kart touches the shine and picks it up. Returns whether it did. - game/src/shine.rs:252 resting: a kart in reach picks it up (
sub_20A6AE4) - docs/function_notes/agent_04.md:514 shine pickup collision: if kart touches shine (not already carrying/invincible), picks it up, sets cooldown 25
sub_20A6C64
export/plan0/arm9_main/sub_20A6C64_020A6C64.c
- docs/function_notes/agent_04.md:515 shine pickup finish: deletes object and plays pickup sound (110 id) via sound handle
sub_20A6CB4
export/plan0/arm9_main/sub_20A6CB4_020A6CB4.c
- vm_model/src/shine.rs:80
sub_20A6CB4(index): the next shine of the spawner becomes the current one. - vm_model/src/shine.rs:448
sub_20A6CB4(slot): the shine ofslotis gone; that spot is free again but blocked for the - docs/function_notes/agent_04.md:516 marks the shine object with index a1 as current/active, others inactive
sub_20A6D20
export/plan0/arm9_main/sub_20A6D20_020A6D20.c
- docs/function_notes/agent_04.md:517 registers object class callbacks (sub_209BF49) for the shine spawner
sub_20A6D40
export/plan0/arm9_main/sub_20A6D40_020A6D40.c
- docs/function_notes/agent_04.md:518 shine spawner class factory: only in mode 2 variant 1 (Shine Runners), else 0
sub_20A6D8C
export/plan0/arm9_main/sub_20A6D8C_020A6D8C.c
- vm_model/src/shine.rs:3
sub_20A6D8C/sub_20A6F94. - vm_model/src/shine.rs:384
sub_20A6D8C: the Shine Runners spawner.liveissub_20A1238(shines in the world), - game/src/shine.rs:272
sub_20A6D8C: top up - docs/function_notes/agent_04.md:519 shine spawner tick: if total shines + held below needed, counts up timer 90 then spawns a new shine
sub_20A6E70
export/plan0/arm9_main/sub_20A6E70_020A6E70.c
- vm_model/src/shine.rs:429 appears at the spot's own position (
sub_20A6F94/sub_20A6E70pass the spot's+4vector - game/src/shine.rs:104
sub_20A6E70: a shine, resting at once, on the spots whose first setting is non-zero - docs/function_notes/agent_04.md:520 shine spawner init: initialises each non-human kart's shine state, spawns initial shines
sub_20A6F94
export/plan0/arm9_main/sub_20A6F94_020A6F94.c
- vm_model/src/shine.rs:3
sub_20A6D8C/sub_20A6F94. - vm_model/src/shine.rs:393
countsreturns(live, held, needed);spawntries to add one shine (sub_20A6F94) and - vm_model/src/shine.rs:408
sub_20A6F94: which free slot (+160 == 0 && +164 == 0... flags+160,+164) gets the - vm_model/src/shine.rs:429 appears at the spot's own position (
sub_20A6F94/sub_20A6E70pass the spot's+4vector - vm_model/src/shine.rs:461
sub_20A6F94: spawn one shine on a random free spot. Returns the spot index and the shine. - docs/function_notes/agent_04.md:521 counts free (inactive) shines and picks a random one to activate/respawn at a point
sub_20A7148
export/plan0/arm9_main/sub_20A7148_020A7148.c
- docs/function_notes/agent_04.md:522 battle objects init: creates pool 106 and 112 objects, installs score callbacks (sub_20A233C/2328/2314)
sub_20A71C8
export/plan0/arm9_main/sub_20A71C8_020A71C8.c
- docs/function_notes/agent_04.md:523 battle objects cleanup: deletes all pool-107 and pool-112 non-persistent objects, then sub_20A5848
sub_20A7270
export/plan0/arm9_main/sub_20A7270_020A7270.c
- vm_model/src/battle.rs:16 A hit that pops a balloon (
sub_20A7270/sub_20A72C8, through the score manager's callback) - vm_model/src/battle.rs:239 A hit pops a balloon (
sub_20A7270/sub_20A72C8); true if there was one. A kart with none - game/src/battle.rs:86 a hit pops a balloon (
sub_20A7270); a kart with none up is out - docs/function_notes/agent_04.md:524 score callback: when racer loses a balloon (sub_20A10F0 -1), spawns popped object at the kart
sub_20A72C8
export/plan0/arm9_main/sub_20A72C8_020A72C8.c
- vm_model/src/battle.rs:16 A hit that pops a balloon (
sub_20A7270/sub_20A72C8, through the score manager's callback) - vm_model/src/battle.rs:239 A hit pops a balloon (
sub_20A7270/sub_20A72C8); true if there was one. A kart with none - docs/function_notes/agent_04.md:525 score callback: if racer has a balloon, removes it and spawns popped object at hitter a2 (or self); returns 1
sub_20A7338
export/plan0/arm9_main/sub_20A7338_020A7338.c
- docs/function_notes/agent_04.md:526 registers object class callbacks (sub_209BF49) for Pokey
sub_20A7358
export/plan0/arm9_main/sub_20A7358_020A7358.c
- docs/function_notes/agent_04.md:527 registers decoration draw descriptor (sub_209BEF0) for Pokey
sub_20A737C
export/plan0/arm9_main/sub_20A737C_020A737C.c
- docs/function_notes/agent_04.md:528 allocates actor-family class (sub_209BFA8) for Pokey (callback sub_20A7FC4)
sub_20A73B0
export/plan0/arm9_main/sub_20A73B0_020A73B0.c
- vm_model/src/mapobj/pokey.rs:1 Pokey (0x1B2, Desert Hills): walk in
sub_20A73B0. - vm_model/src/mapobj/pokey.rs:90 The parts' state (
sub_20A73B0states 2 and 3). - docs/function_notes.md:33 Pokey update (path walk, segment states)
- docs/function_notes.md:277 Pokey walk (stops at points, turns back at path ends; speed setting 0 x 4096 / 100)
- docs/function_notes.md:424 Pokey tick: walk; state 2 segments fly while y > 0 (gravity 1024), spin; unless setting0 hi, after 300 ticks state 3 regrows segments one by one (scale +205) up to 4
sub_20A7894
export/plan0/arm9_main/sub_20A7894_020A7894.c
- docs/function_notes/agent_04.md:529 fx12 multiply with rounding ((a*b+2048)>>12)
sub_20A78B0
export/plan0/arm9_main/sub_20A78B0_020A78B0.c
- docs/function_notes/agent_04.md:530 table lookup: first entry of sin/cos table at index angle>>4
sub_20A78C8
export/plan0/arm9_main/sub_20A78C8_020A78C8.c
- docs/function_notes/agent_04.md:531 Pokey per-object init loop: 4 body segments, wave phases and speed from path length (class +0x28)
sub_20A79C4
export/plan0/arm9_main/sub_20A79C4_020A79C4.c
- game/src/objects.rs:215
sub_20A79C4: three body segments and the head, 10 units up then 20 apart, each a little - docs/function_notes.md:32 Pokey (0x1B2) draw: 3 body sprites + head, 10 up then 20 apart
sub_20A7EB4
export/plan0/arm9_main/sub_20A7EB4_020A7EB4.c
- docs/function_notes/NEEDS_REVIEW.md:494 probably creates two object instances via sub_209BD08 (from off_20A7F08 and off_20A7F10), stores them at off_20A7F0C/off_20A7F14, initializes both via
- docs/function_notes/hk_15.md:108 probably creates two object instances via sub_209BD08 (from off_20A7F08 and off_20A7F10), stores them at off_20A7F0C/off_20A7F14, initializes both via
sub_20A7F18
export/plan0/arm9_main/sub_20A7F18_020A7F18.c
- docs/function_notes/NEEDS_REVIEW.md:495 probably item/hit handler: if *a3==1 calls sub_20A8098 and ORs flags from off_20A7FB8/FBC into a1+2; else plays a sound if a1+164 is 0, sets a1+164=60
- docs/function_notes/hk_15.md:109 probably item/hit handler: if *a3==1 calls sub_20A8098 and ORs flags from off_20A7FB8/FBC into a1+2; else plays a sound if a1+164 is 0, sets a1+164=60
sub_20A7FC4
export/plan0/arm9_main/sub_20A7FC4_020A7FC4.c
- vm_model/src/mapobj/pokey.rs:7 A star kart knocks it apart (
sub_20A7FC4->sub_20A8098): state 2, each of its 4 - vm_model/src/mapobj/pokey.rs:69
sub_20A7FC4: own-reaction 1 (a star kart) knocks it apart (sub_20A8098). - docs/function_notes.md:34 Pokey class callback (hit by a kart: break apart)
- docs/function_notes.md:422 Pokey kart callback: code 1 -> sub_20A8098 + no-contact flags; else the bump sound and 60-tick cooldown
sub_20A8098
export/plan0/arm9_main/sub_20A8098_020A8098.c
- vm_model/src/mapobj/pokey.rs:7 A star kart knocks it apart (
sub_20A7FC4->sub_20A8098): state 2, each of its 4 - vm_model/src/mapobj/pokey.rs:69
sub_20A7FC4: own-reaction 1 (a star kart) knocks it apart (sub_20A8098). - docs/function_notes.md:423 Pokey knocked apart: each segment flies 2 units in a random direction (rng angle), up 4, spin +-0xAAB (rng), 300-tick timer, state 2
- docs/function_notes/NEEDS_REVIEW.md:496 probably initializes up to a1+464 effect items: random values via sub_20D22D0, 18-word records with velocity/position fields from a1, a1+168=300, a1+508=2
- docs/function_notes/hk_15.md:110 probably initializes up to a1+464 effect items: random values via sub_20D22D0, 18-word records with velocity/position fields from a1, a1+168=300, a1+508=2
sub_20A826C
export/plan0/arm9_main/sub_20A826C_020A826C.c
- docs/function_notes/NEEDS_REVIEW.md:500 probably per-racer item/effect state machine (state a2[60] 1..6): compares timer a2[43] to per-item thresholds (table off_20A8A64 by a2[42]), calls
- docs/function_notes/hk_15.md:117 probably per-racer item/effect state machine (state a2[60] 1..6): compares timer a2[43] to per-item thresholds (table off_20A8A64 by a2[42]), calls
sub_20A8A6C
export/plan0/arm9_main/sub_20A8A6C_020A8A6C.c
- docs/function_notes/NEEDS_REVIEW.md:499 probably per-object effect setup over an object list: if sub_2062EC4 spawns sub-effect pairs via sub_2108E6C (ids 8/9/10), else dispatches on state 20/22/25
- docs/function_notes/hk_15.md:116 probably per-object effect setup over an object list: if sub_2062EC4 spawns sub-effect pairs via sub_2108E6C (ids 8/9/10), else dispatches on state 20/22/25
sub_20A8ED8
export/plan0/arm9_main/sub_20A8ED8_020A8ED8.c
- docs/function_notes/NEEDS_REVIEW.md:498 probably computes a target position from game-state id at *off_20A91A4 (20 or 25); state 20 picks an offset via sub_2148714 and table off_20A91B4, writes
- docs/function_notes/hk_15.md:115 probably computes a target position from game-state id at *off_20A91A4 (20 or 25); state 20 picks an offset via sub_2148714 and table off_20A91B4, writes
sub_20A91E0
export/plan0/arm9_main/sub_20A91E0_020A91E0.c
- docs/function_notes/hk_15.md:112 thunk; calls off_20A91F4 with objects from off_20A91F8/off_20A91FC and off_20A9200
sub_20A9204
export/plan0/arm9_main/sub_20A9204_020A9204.c
- docs/function_notes/hk_15.md:111 thunk; calls off_20A9218 with the object at off_20A921C and 0
sub_20A9224
export/plan0/arm9_main/sub_20A9224_020A9224.c
- docs/function_notes/NEEDS_REVIEW.md:497 probably allocates a class record via sub_209BFA8 and sets its fixed-point fields +56 = 1638400 and +60 = -2048000
- docs/function_notes/hk_15.md:113 probably allocates a class record via sub_209BFA8 and sets its fixed-point fields +56 = 1638400 and +60 = -2048000
sub_20A9268
export/plan0/arm9_main/sub_20A9268_020A9268.c
- vm_model/src/mapobj/pinball.rs:4 # Iron ball (
sub_20A9268tick,sub_20A9A5Cinit) - vm_model/src/mapobj/pinball.rs:183 One tick of
sub_20A9268.racers: the largest of the racers' counters - docs/function_notes/NEEDS_REVIEW.md:501 probably per-frame update of an item/projectile object: decrements +168 timer, state machine on +304 (0/1/2), item effects via sub_209753C/sub_209BFE0, physics
- docs/function_notes/hk_15.md:118 probably per-frame update of an item/projectile object: decrements +168 timer, state machine on +304 (0/1/2), item effects via sub_209753C/sub_209BFE0, physics
sub_20A9A5C
export/plan0/arm9_main/sub_20A9A5C_020A9A5C.c
- vm_model/src/mapobj/pinball.rs:4 # Iron ball (
sub_20A9268tick,sub_20A9A5Cinit) - docs/function_notes/hk_15.md:114 iterates an object list (count at +2); per object sets flag bits from off_20A9C3C/40/44, derives timers and speed from item data +156, runs
sub_20A9C54
export/plan0/arm9_main/sub_20A9C54_020A9C54.c
- docs/function_notes/NEEDS_REVIEW.md:502 probably per-object update: if obj+300 set and obj+120 masked is below dword_20A9CCC and obj+280 is 1..0x1C, calls sub_20E53AC on obj+232; else returns the value.
- docs/function_notes/hk_16.md:2 probably per-object update: if obj+300 set and obj+120 masked is below dword_20A9CCC and obj+280 is 1..0x1C, calls sub_20E53AC on obj+232; else returns the value.
sub_20A9CD4
export/plan0/arm9_main/sub_20A9CD4_020A9CD4.c
- docs/function_notes/NEEDS_REVIEW.md:503 probably draw/submit routine for object a2: sub_1FF9048 writes params (ids 20,25,26,27), sub_20E6CF8(a2+4), a color lookup via sub_2146D60 from off_20A9D90, then sub_209BB2C.
- docs/function_notes/hk_16.md:4 probably draw/submit routine for object a2: sub_1FF9048 writes params (ids 20,25,26,27), sub_20E6CF8(a2+4), a color lookup via sub_2146D60 from off_20A9D90, then sub_209BB2C.
sub_20A9D98
export/plan0/arm9_main/sub_20A9D98_020A9D98.c
- docs/function_notes/hk_16.md:5 thin wrapper calling off_20A9DAC with a1 and *off_20A9DA8.
sub_20A9DB0
export/plan0/arm9_main/sub_20A9DB0_020A9DB0.c
- docs/function_notes/hk_16.md:6 creates an object via sub_209BD08(a1, off_20A9DDC), stores it in *off_20A9DE0, and initialises it with sub_209B940(obj, 63).
sub_20A9DE4
export/plan0/arm9_main/sub_20A9DE4_020A9DE4.c
- game/src/objects.rs:1671 ball up 10 units a tick (
sub_20A9DE4) - docs/function_notes.md:418 iron ball kart callback: code 1 (star) -> vertical speed 40960 (+0xC0), kart reaction 0
- docs/function_notes/hk_16.md:7 callback: if a3 != 1 returns a4; otherwise sets a1+192 = 0xA000 and returns 0.
sub_20A9E04
export/plan0/arm9_main/sub_20A9E04_020A9E04.c
- docs/function_notes/NEEDS_REVIEW.md:504 probably object init: copies a 3-word table from off_20A9E78 and calls sub_20D29CC; allocates 68 bytes from heap via sub_20364E0/sub_2036BEC; sub_2109110 id 10; sets a1[28] and a1[74] (via sub_20D2178).
- docs/function_notes/hk_16.md:8 probably object init: copies a 3-word table from off_20A9E78 and calls sub_20D29CC; allocates 68 bytes from heap via sub_20364E0/sub_2036BEC; sub_2109110 id 10; sets a1[28] and a1[74] (via sub_20D2178).
sub_20A9E80
export/plan0/arm9_main/sub_20A9E80_020A9E80.c
- docs/function_notes/hk_16.md:9 thumb thin wrapper calling off_20A9E8C with (u16)*off_20A9E88.
sub_20A9E90
export/plan0/arm9_main/sub_20A9E90_020A9E90.c
- docs/function_notes/hk_16.md:10 thin wrapper returning byte_20A9E9C(field 17 of *off_20A9E98).
sub_20A9EA0
export/plan0/arm9_main/sub_20A9EA0_020A9EA0.c
- docs/function_notes/NEEDS_REVIEW.md:505 probably state refresh: reads sub_20AB338 into off_20A9ED4[17]; if hook [19] is set, calls it via sub_20AB2A4 and re-reads sub_20AB338 when it returns nonzero.
- docs/function_notes/hk_16.md:11 probably state refresh: reads sub_20AB338 into off_20A9ED4[17]; if hook [19] is set, calls it via sub_20AB2A4 and re-reads sub_20AB338 when it returns nonzero.
sub_20A9ED8
export/plan0/arm9_main/sub_20A9ED8_020A9ED8.c
- docs/function_notes/hk_16.md:12 wrapper of sub_20A9F20 with context off_20A9EF8.
sub_20A9EFC
export/plan0/arm9_main/sub_20A9EFC_020A9EFC.c
- docs/function_notes/hk_16.md:13 wrapper of sub_20A9F20 with context off_20A9F1C.
sub_20A9F20
export/plan0/arm9_main/sub_20A9F20_020A9F20.c
- docs/function_notes/hk_16.md:14 null-safe fill of an 8-byte record at result: x=a2, y=a3, w=a4-a2, h=a5-a3, flags=0, halfword 6 = dword_20A9F3C.
sub_20A9F40
export/plan0/arm9_main/sub_20A9F40_020A9F40.c
- docs/function_notes/hk_16.md:15 clears two halfwords of the record at off_20A9F64[0], then calls sub_20AA028(a1,a2,0,4,a3,off_20A9F68).
sub_20A9F6C
export/plan0/arm9_main/sub_20A9F6C_020A9F6C.c
- docs/function_notes/hk_16.md:16 same pattern as sub_20A9F40 with off_20A9F90 and sub_20AA028(...,4,...,*off_20A9F94).
sub_20A9F98
export/plan0/arm9_main/sub_20A9F98_020A9F98.c
- docs/function_notes/hk_16.md:17 same pattern as sub_20A9F40 with off_20A9FBC and sub_20AA028(...,4,...,*off_20A9FC0).
sub_20A9FC4
export/plan0/arm9_main/sub_20A9FC4_020A9FC4.c
- docs/function_notes/hk_16.md:18 same pattern as sub_20A9F40 with off_20A9FE8, passing off_20A9FF0 and size 6 to sub_20AA028.
sub_20A9FF4
export/plan0/arm9_main/sub_20A9FF4_020A9FF4.c
- docs/function_notes/hk_16.md:19 sets first halfword to 4 and second to 0 on off_20AA01C[0], then calls sub_20AA028 with off_20AA024 and size 9.
sub_20AA028
export/plan0/arm9_main/sub_20AA028_020AA028.c
- docs/function_notes/NEEDS_REVIEW.md:506 probably sets up an item descriptor (a1, a2, a3, size a4-1/a5, a6+2) at off_20AA090+44; if field 4 set, computes a position; then runs sub_20AAFA8, sub_20AAD9C, sub_20AAB70, sub_20AA300.
- docs/function_notes/hk_16.md:20 probably sets up an item descriptor (a1, a2, a3, size a4-1/a5, a6+2) at off_20AA090+44; if field 4 set, computes a position; then runs sub_20AAFA8, sub_20AAD9C, sub_20AAB70, sub_20AA300.
sub_20AA094
export/plan0/arm9_main/sub_20AA094_020AA094.c
- docs/function_notes/NEEDS_REVIEW.md:507 probably remaps a value: looks up a2 in two tables a1[0..1] via sub_213ECF8, indexes a 16-bit table by sub_2133068; returns a2 if the result equals dword_20AA0E8.
- docs/function_notes/hk_16.md:21 probably remaps a value: looks up a2 in two tables a1[0..1] via sub_213ECF8, indexes a 16-bit table by sub_2133068; returns a2 if the result equals dword_20AA0E8.
sub_20AA0EC
export/plan0/arm9_main/sub_20AA0EC_020AA0EC.c
- docs/function_notes/NEEDS_REVIEW.md:508 probably edge/collision scan for object a2 with direction bits a1 (0x40/0x80/0x20/0x10): returns early if handler off_20AA2EC+19 says so; otherwise sweeps tiles calling sub_20AAEA0 and returns the first hit.
- docs/function_notes/hk_16.md:22 probably edge/collision scan for object a2 with direction bits a1 (0x40/0x80/0x20/0x10): returns early if handler off_20AA2EC+19 says so; otherwise sweeps tiles calling sub_20AAEA0 and returns the first hit.
sub_20AA300
export/plan0/arm9_main/sub_20AA300_020AA300.c
- docs/function_notes/NEEDS_REVIEW.md:509 probably advances a cursor at a1+68: computes a position from a2 (sub_2133068 on the bytes) and calls sub_20AAEA0; if no hit or no cursor, sets it to the list entry at a1+44.
- docs/function_notes/hk_16.md:23 probably advances a cursor at a1+68: computes a position from a2 (sub_2133068 on the bytes) and calls sub_20AAEA0; if no hit or no cursor, sets it to the list entry at a1+44.
sub_20AA3A0
export/plan0/arm9_main/sub_20AA3A0_020AA3A0.c
- docs/function_notes/hk_16.md:24 loops over 8x8 cells in the clip rectangle [a4,a6) x [a5,a7) and calls sub_20AA4E8 on each cell with buffer a1+32*(cell index) and value a3.
sub_20AA47C
export/plan0/arm9_main/sub_20AA47C_020AA47C.c
- docs/function_notes/hk_16.md:25 draws a rectangle outline by calling sub_20AA3A0 four times (top, bottom, left, right edges).
sub_20AA4E8
export/plan0/arm9_main/sub_20AA4E8_020AA4E8.c
- docs/function_notes/NEEDS_REVIEW.md:510 probably writes one row of 4-bit pixel nibbles into buffer a1 (value built from a2 over width a5-a3), masking against dword_20AA5A8..D4 and 0xF0/0xF tests.
- docs/function_notes/hk_16.md:26 probably writes one row of 4-bit pixel nibbles into buffer a1 (value built from a2 over width a5-a3), masking against dword_20AA5A8..D4 and 0xF0/0xF tests.
sub_20AA5D8
export/plan0/arm9_main/sub_20AA5D8_020AA5D8.c
- docs/function_notes/hk_16.md:27 returns whether sub_213ECF8(off_20AA5FC[1], a1) finds a match (wrapper lookup test).
sub_20AA600
export/plan0/arm9_main/sub_20AA600_020AA600.c
- docs/function_notes/hk_16.md:28 same lookup test as sub_20AA5D8 using off_20AA624[1].
sub_20AA628
export/plan0/arm9_main/sub_20AA628_020AA628.c
- docs/function_notes/hk_16.md:29 same lookup test as sub_20AA5D8 using off_20AA64C[1]; used as a predicate by sub_20AA6E0.
sub_20AA650
export/plan0/arm9_main/sub_20AA650_020AA650.c
- docs/function_notes/NEEDS_REVIEW.md:511 probably maps a1 to a neighbour code: finds its index in table off_20AA6DC via sub_213ECF8 and returns the first entry differing from dword_20AA6D8, else a1.
- docs/function_notes/hk_16.md:30 probably maps a1 to a neighbour code: finds its index in table off_20AA6DC via sub_213ECF8 and returns the first entry differing from dword_20AA6D8, else a1.
sub_20AA6E0
export/plan0/arm9_main/sub_20AA6E0_020AA6E0.c
- docs/function_notes/NEEDS_REVIEW.md:512 probably remaps a1 through sub_20AA094 (table off_20AA734); if sub_20AA628(a1) matches, first applies sub_20AA790 and returns a1 when unchanged.
- docs/function_notes/hk_16.md:31 probably remaps a1 through sub_20AA094 (table off_20AA734); if sub_20AA628(a1) matches, first applies sub_20AA790 and returns a1 when unchanged.
sub_20AA738
export/plan0/arm9_main/sub_20AA738_020AA738.c
- docs/function_notes/hk_16.md:32 same remap as sub_20AA6E0 but using dword_20AA788 and table off_20AA78C; calls sub_20AA628 predicate and sub_20AA790 when matched.
sub_20AA790
export/plan0/arm9_main/sub_20AA790_020AA790.c
- docs/function_notes/NEEDS_REVIEW.md:513 probably remap chain: uses sub_20AA600 / sub_20AA5D8 predicates to pick sub_20AA738 or sub_20AA6E0 and then maps via sub_20AA094 with table off_20AA80C.
- docs/function_notes/hk_16.md:33 probably remap chain: uses sub_20AA600 / sub_20AA5D8 predicates to pick sub_20AA738 or sub_20AA6E0 and then maps via sub_20AA094 with table off_20AA80C.
sub_20AA810
export/plan0/arm9_main/sub_20AA810_020AA810.c
- docs/function_notes/hk_16.md:34 getter: returns u16 at index 31 of the struct at off_20AA818.
sub_20AA81C
export/plan0/arm9_main/sub_20AA81C_020AA81C.c
- docs/function_notes/NEEDS_REVIEW.md:514 probably reads keypad input: sub_20AB604 check, drains queue with sub_214E8F4/sub_214E89C, then computes a masked key state from off_20AA890/894 and passes it to sub_20AA89C.
- docs/function_notes/hk_16.md:35 probably reads keypad input: sub_20AB604 check, drains queue with sub_214E8F4/sub_214E89C, then computes a masked key state from off_20AA890/894 and passes it to sub_20AA89C.
sub_20AA89C
export/plan0/arm9_main/sub_20AA89C_020AA89C.c
- docs/function_notes/NEEDS_REVIEW.md:515 probably menu/cursor input handler: sub_20AB660 and sub_20AB528 setup, then state transitions on sub_20AB640/650/4D4 results, sub_20AA0EC, sub_20AAEA0, and invokes a callback at struct+8.
- docs/function_notes/hk_16.md:36 probably menu/cursor input handler: sub_20AB660 and sub_20AB528 setup, then state transitions on sub_20AB640/650/4D4 results, sub_20AA0EC, sub_20AAEA0, and invokes a callback at struct+8.
sub_20AAB40
export/plan0/arm9_main/sub_20AAB40_020AAB40.c
- docs/function_notes/hk_16.md:37 predicate: true when struct+16 and struct+20 are both set and their 16-bit field at +6 match.
sub_20AAB70
export/plan0/arm9_main/sub_20AAB70_020AAB70.c
- docs/function_notes/hk_16.md:38 per-frame draw: clears a 32-byte buffer via sub_214D05C and for each of struct+64/66 cells calls sub_20AA3A0 or sub_20AA47C (outline) to draw tile regions.
sub_20AAD9C
export/plan0/arm9_main/sub_20AAD9C_020AAD9C.c
- docs/function_notes/NEEDS_REVIEW.md:516 probably draws sprite cells from a list: for each cell >1 px in size, looks up sub-entry via sub_2022CE4/sub_2022C80 (font-like glyph table) and calls callback v16 with computed position.
- docs/function_notes/hk_16.md:39 probably draws sprite cells from a list: for each cell >1 px in size, looks up sub-entry via sub_2022CE4/sub_2022C80 (font-like glyph table) and calls callback v16 with computed position.
sub_20AAEA0
export/plan0/arm9_main/sub_20AAEA0_020AAEA0.c
- docs/function_notes/NEEDS_REVIEW.md:517 probably hit-test: returns the entry (in table at struct+44) whose rectangle contains point (a2,a3), checking first the rect at +0 and then +8; returns 0 if none.
- docs/function_notes/hk_16.md:40 probably hit-test: returns the entry (in table at struct+44) whose rectangle contains point (a2,a3), checking first the rect at +0 and then +8; returns 0 if none.
sub_20AAF70
export/plan0/arm9_main/sub_20AAF70_020AAF70.c
- docs/function_notes/hk_16.md:41 returns index within the list at struct+0 whose 16-bit field at +6 equals struct+12 plus 1; 0 if not found.
sub_20AAFA8
export/plan0/arm9_main/sub_20AAFA8_020AAFA8.c
- docs/function_notes/NEEDS_REVIEW.md:518 probably fills a tile-attribute table (off_20AB024) with sub_214CFE4 clear, then writes (palette<<12 | index) entries per cell in a v2 x v7 grid.
- docs/function_notes/hk_16.md:42 probably fills a tile-attribute table (off_20AB024) with sub_214CFE4 clear, then writes (palette<<12 | index) entries per cell in a v2 x v7 grid.
sub_20AB028
export/plan0/arm9_main/sub_20AB028_020AB028.c
- docs/function_notes/hk_16.md:43 calls function pointer at off_20AB054+80 with sub_20AB1D0 value and a1; on success clears the halfword at +60.
sub_20AB058
export/plan0/arm9_main/sub_20AB058_020AB058.c
- docs/function_notes/hk_16.md:44 setter: stores a1 into off_20AB060+80 (callback slot).
sub_20AB064
export/plan0/arm9_main/sub_20AB064_020AB064.c
- docs/function_notes/hk_16.md:45 setter: stores a1 into off_20AB06C+76.
sub_20AB070
export/plan0/arm9_main/sub_20AB070_020AB070.c
- docs/function_notes/hk_16.md:46 setter: stores a1 into off_20AB078[8].
sub_20AB07C
export/plan0/arm9_main/sub_20AB07C_020AB07C.c
- docs/function_notes/hk_16.md:47 setter: stores a1 into off_20AB084[6].
sub_20AB088
export/plan0/arm9_main/sub_20AB088_020AB088.c
- docs/function_notes/NEEDS_REVIEW.md:519 probably init of a 84-byte input/UI state block at off_20AB0FC: zeroes it, sets fields, calls sub_20AB714 and sub_20AB5E4, sub_20AB580 with a mask built from off_20AB108 bytes.
- docs/function_notes/hk_16.md:48 probably init of a 84-byte input/UI state block at off_20AB0FC: zeroes it, sets fields, calls sub_20AB714 and sub_20AB5E4, sub_20AB580 with a mask built from off_20AB108 bytes.
sub_20AB11C
export/plan0/arm9_main/sub_20AB11C_020AB11C.c
- docs/function_notes/NEEDS_REVIEW.md:520 probably computes an 8-byte record's x/y extents (x, y, x+w, y+h) from current object at off_20AB188+68 and adds offsets off_20AB18C/190 when field +6 <= 0xFF.
- docs/function_notes/hk_16.md:49 probably computes an 8-byte record's x/y extents (x, y, x+w, y+h) from current object at off_20AB188+68 and adds offsets off_20AB18C/190 when field +6 <= 0xFF.
sub_20AB194
export/plan0/arm9_main/sub_20AB194_020AB194.c
- docs/function_notes/hk_16.md:50 setter pair: stores a1 through off_20AB1A0[0] and a2 into off_20AB1A4.
sub_20AB1A8
export/plan0/arm9_main/sub_20AB1A8_020AB1A8.c
- docs/function_notes/hk_16.md:51 stores three 16-bit values into off_20AB1C8 and calls function pointer off_20AB1CC with a combined mask (|0xF0).
sub_20AB1D0
export/plan0/arm9_main/sub_20AB1D0_020AB1D0.c
- docs/function_notes/NEEDS_REVIEW.md:521 probably maps a 16-bit key/button code a1 to a table value via a table at off_20AB294+48 with special cases for codes 1..5 (returns 8,10,32,4,5).
- docs/function_notes/hk_16.md:52 probably maps a 16-bit key/button code a1 to a table value via a table at off_20AB294+48 with special cases for codes 1..5 (returns 8,10,32,4,5).
sub_20AB2A4
export/plan0/arm9_main/sub_20AB2A4_020AB2A4.c
- docs/function_notes/hk_16.md:53 returns a code for a tile/record pointer a1 (1 or 2 for special pointers, 8/10/32 for first three entries, else looked-up value from a table).
sub_20AB338
export/plan0/arm9_main/sub_20AB338_020AB338.c
- docs/function_notes/NEEDS_REVIEW.md:522 probably looks up an entry pointer for code a1 in the list at off_20AB3E0; special codes 0,1,2,8,10 return fixed pointers, else scans records via a lookup table.
- docs/function_notes/hk_16.md:54 probably looks up an entry pointer for code a1 in the list at off_20AB3E0; special codes 0,1,2,8,10 return fixed pointers, else scans records via a lookup table.
sub_20AB3EC
export/plan0/arm9_main/sub_20AB3EC_020AB3EC.c
- docs/function_notes/NEEDS_REVIEW.md:523 probably state machine for a 2-option toggle at struct+60/64/66: sets mode 4 or 5 and updates struct+48 with a pointer from off_20AB454/off_20AB458.
- docs/function_notes/hk_16.md:55 probably state machine for a 2-option toggle at struct+60/64/66: sets mode 4 or 5 and updates struct+48 with a pointer from off_20AB454/off_20AB458.
sub_20AB45C
export/plan0/arm9_main/sub_20AB45C_020AB45C.c
- docs/function_notes/NEEDS_REVIEW.md:524 probably toggles the selected option (4 <-> 0, 5 <-> 0) at struct+66 and updates struct+48 from off_20AB4C8/4CC/4D0 table pointers.
- docs/function_notes/hk_16.md:56 probably toggles the selected option (4 <-> 0, 5 <-> 0) at struct+66 and updates struct+48 from off_20AB4C8/4CC/4D0 table pointers.
sub_20AB4D4
export/plan0/arm9_main/sub_20AB4D4_020AB4D4.c
- docs/function_notes/hk_16.md:57 returns a button/key mask: sub_20AB650 on dword_20AB4FC if non-zero, else sub_20AB500.
sub_20AB500
export/plan0/arm9_main/sub_20AB500_020AB500.c
- docs/function_notes/hk_16.md:58 returns a 16-bit value from sub_20AB640 of the record at off_20AB524+10 if sub_20AB59C matches, else 0.
sub_20AB528
export/plan0/arm9_main/sub_20AB528_020AB528.c
- docs/function_notes/NEEDS_REVIEW.md:525 probably updates the selected-item field at off_20AB57C+10 from the record at +8, clearing it when the item is invalid; wraps sub_20AB650/640/5BC/5B4.
- docs/function_notes/hk_16.md:59 probably updates the selected-item field at off_20AB57C+10 from the record at +8, clearing it when the item is invalid; wraps sub_20AB650/640/5BC/5B4.
sub_20AB580
export/plan0/arm9_main/sub_20AB580_020AB580.c
- docs/function_notes/NEEDS_REVIEW.md:526 probably resets a control record at off_20AB598 via sub_20AB5F4, then stores a1 into its halfword +8 and clears +10.
- docs/function_notes/hk_16.md:60 probably resets a control record at off_20AB598 via sub_20AB5F4, then stores a1 into its halfword +8 and clears +10.
sub_20AB59C
export/plan0/arm9_main/sub_20AB59C_020AB59C.c
- docs/function_notes/hk_16.md:61 predicate: true when the 16-bit value at a1[0] equals a1[1] or a1[2].
sub_20AB5B4
export/plan0/arm9_main/sub_20AB5B4_020AB5B4.c
- docs/function_notes/hk_16.md:62 resets a 4-halfword cursor/range record (fields 0 and 3 cleared).
sub_20AB5BC
export/plan0/arm9_main/sub_20AB5BC_020AB5BC.c
- docs/function_notes/hk_16.md:63 advances a range cursor record: increments field 0, sets flag field 3 at the bounds, wraps to field1+1 past field2.
sub_20AB5E4
export/plan0/arm9_main/sub_20AB5E4_020AB5E4.c
- docs/function_notes/hk_16.md:64 initialises a range record: cursor 0, flag 0, start = a2, end = a2 + a3.
sub_20AB5F4
export/plan0/arm9_main/sub_20AB5F4_020AB5F4.c
- docs/function_notes/hk_16.md:65 initialises a range record with fixed bounds 40..45 (cursor 0, flag 0).
sub_20AB604
export/plan0/arm9_main/sub_20AB604_020AB604.c
- docs/function_notes/hk_16.md:66 getter: returns off_20AB60C[9] (a flag in the input/UI state block).
sub_20AB610
export/plan0/arm9_main/sub_20AB610_020AB610.c
- docs/function_notes/hk_16.md:67 getter: returns u16 at index 11 of the record at off_20AB618.
sub_20AB61C
export/plan0/arm9_main/sub_20AB61C_020AB61C.c
- docs/function_notes/hk_16.md:68 getter: returns u16 at index 10 of the record at off_20AB624 (cursor X-like value used by sub_20AAEA0 callers).
sub_20AB628
export/plan0/arm9_main/sub_20AB628_020AB628.c
- docs/function_notes/hk_16.md:69 getter: returns off_20AB630[7] (input event state).
sub_20AB634
export/plan0/arm9_main/sub_20AB634_020AB634.c
- docs/function_notes/hk_16.md:70 getter: returns u16 at index 16 of the record at off_20AB63C.
sub_20AB640
export/plan0/arm9_main/sub_20AB640_020AB640.c
- docs/function_notes/hk_16.md:71 masks a1 with the 16-bit field at off_20AB64C+6 and returns the result (bitmask test helper).
sub_20AB650
export/plan0/arm9_main/sub_20AB650_020AB650.c
- docs/function_notes/hk_16.md:72 masks a1 with the low halfword of off_20AB65C[1] and returns the result (bitmask test helper).
sub_20AB660
export/plan0/arm9_main/sub_20AB660_020AB660.c
- docs/function_notes/NEEDS_REVIEW.md:527 probably input-state update for a 16-bit key mask a1: computes pressed/released edges vs the previous state at off_20AB710, updates a repeat counter and stores the touch/key coordinates from a2/a3 into the state block.
- docs/function_notes/hk_16.md:73 probably input-state update for a 16-bit key mask a1: computes pressed/released edges vs the previous state at off_20AB710, updates a repeat counter and stores the touch/key coordinates from a2/a3 into the state block.
sub_20AB714
export/plan0/arm9_main/sub_20AB714_020AB714.c
- docs/function_notes/hk_16.md:74 init: calls sub_20AB72C to clear the block at off_20AB728 and sets its field 9 to 1.
sub_20AB72C
export/plan0/arm9_main/sub_20AB72C_020AB72C.c
- docs/function_notes/hk_16.md:75 clears 40 bytes at off_20AB744 via sub_214D05C.
sub_20AB748
export/plan0/arm9_main/sub_20AB748_020AB748.c
- docs/function_notes/hk_16.md:76 getter: returns u16 at +70 of the struct at *off_20AB754 (list count / index).
sub_20AB758
export/plan0/arm9_main/sub_20AB758_020AB758.c
- docs/function_notes/NEEDS_REVIEW.md:528 probably pushes a1 into a 16-bit list at struct+64 (index limit at struct+74), decrementing the count and zero-terminating when full.
- docs/function_notes/hk_16.md:77 probably pushes a1 into a 16-bit list at struct+64 (index limit at struct+74), decrementing the count and zero-terminating when full.
sub_20AB798
export/plan0/arm9_main/sub_20AB798_020AB798.c
- docs/function_notes/hk_16.md:78 getter: returns the list pointer at +64 of *off_20AB7A0.
sub_20AB7A4
export/plan0/arm9_main/sub_20AB7A4_020AB7A4.c
- docs/function_notes/NEEDS_REVIEW.md:529 probably copies a zero-terminated 16-bit string from a1 into the list at struct+64 (clearing old entries first, count at +70, limit at +74); used by the keyboard/text entry UI.
- docs/function_notes/hk_16.md:79 probably copies a zero-terminated 16-bit string from a1 into the list at struct+64 (clearing old entries first, count at +70, limit at +74); used by the keyboard/text entry UI.
sub_20AB848
export/plan0/arm9_main/sub_20AB848_020AB848.c
- docs/function_notes/NEEDS_REVIEW.md:530 probably converts a rect (a1..a4) from sub_20AB11C to local coordinates by subtracting offsets at struct+80/+84, then wraps negative values by dword_20AB8C0.
- docs/function_notes/hk_16.md:80 probably converts a rect (a1..a4) from sub_20AB11C to local coordinates by subtracting offsets at struct+80/+84, then wraps negative values by dword_20AB8C0.
sub_20AB8C4
export/plan0/arm9_main/sub_20AB8C4_020AB8C4.c
- docs/function_notes/hk_16.md:81 thunk: calls off_20AB8C8.
sub_20AB8CC
export/plan0/arm9_main/sub_20AB8CC_020AB8CC.c
- docs/function_notes/hk_16.md:82 thunk: calls off_20AB8D0.
sub_20AB8D4
export/plan0/arm9_main/sub_20AB8D4_020AB8D4.c
- docs/function_notes/hk_16.md:83 stores a1..a4 at struct+104..116 (box offsets) and calls sub_20A9ED8 with the computed rectangle from struct fields 20-29.
sub_20AB910
export/plan0/arm9_main/sub_20AB910_020AB910.c
- docs/function_notes/hk_16.md:84 stores a1..a4 at struct+88..100 and calls sub_20A9EFC with a rectangle from struct fields 20-25.
sub_20AB94C
export/plan0/arm9_main/sub_20AB94C_020AB94C.c
- docs/function_notes/hk_16.md:85 stores a1/a2 at struct+80/+84, calls sub_20AB194, computes a mask into off_20AB9CC, then draws two rects via sub_20A9EFC and sub_20A9ED8 from struct offsets.
sub_20AB9D0
export/plan0/arm9_main/sub_20AB9D0_020AB9D0.c
- docs/function_notes/hk_16.md:86 switch over a1 0..5 calls sub_20A9F40/sub_20A9FF4/sub_20A9FC4/sub_20A9F98/sub_20A9F6C with per-index args from off_20ABA8C and off_20ABA90, then stores a1 at struct+76.
sub_20ABA94
export/plan0/arm9_main/sub_20ABA94_020ABA94.c
- docs/function_notes/hk_16.md:87 thunk: calls off_20ABA98 with a1.
sub_20ABA9C
export/plan0/arm9_main/sub_20ABA9C_020ABA9C.c
- docs/function_notes/NEEDS_REVIEW.md:531 probably clears two buffers: sub_200EE74 (DC_FlushRange) and sub_214BC34 for the first region, and sub_214B8F4 for the second, from off_20ABADC.
- docs/function_notes/hk_16.md:88 probably clears two buffers: sub_200EE74 (DC_FlushRange) and sub_214BC34 for the first region, and sub_214B8F4 for the second, from off_20ABADC.
sub_20ABAE0
export/plan0/arm9_main/sub_20ABAE0_020ABAE0.c
- docs/function_notes/NEEDS_REVIEW.md:532 probably per-frame menu/input handler: reads key state (sub_20AA810/sub_20AA81C), appends or changes entries in the 16-bit list at struct+64 using sub_20AA790/738/6E0/650 remaps, plays a sound through sub_212ECC0.
- docs/function_notes/hk_16.md:89 probably per-frame menu/input handler: reads key state (sub_20AA810/sub_20AA81C), appends or changes entries in the 16-bit list at struct+64 using sub_20AA790/738/6E0/650 remaps, plays a sound through sub_212ECC0.
sub_20ABCF4
export/plan0/arm9_main/sub_20ABCF4_020ABCF4.c
- docs/function_notes/NEEDS_REVIEW.md:533 probably constructs a 120-byte UI/menu object: allocates object plus two arrays via sub_2036BEC/sub_2036B74, calls sub_20AB088 and sub_20AB058/064/07C/070 setup, and loads many sub_204799C resource handles into struct fields.
- docs/function_notes/hk_16.md:90 probably constructs a 120-byte UI/menu object: allocates object plus two arrays via sub_2036BEC/sub_2036B74, calls sub_20AB088 and sub_20AB058/064/07C/070 setup, and loads many sub_204799C resource handles into struct fields.
sub_20ABFF4
export/plan0/arm9_main/sub_20ABFF4_020ABFF4.c
- docs/function_notes/NEEDS_REVIEW.md:534 probably maps a key/direction code a2 (flags 0x10/0x20/0x40/0x80) to a menu index using per-state tables for a1 == 1 or 2; calls sub_2105AC0 on dword_20AC0B0 for feedback.
- docs/function_notes/hk_16.md:91 probably maps a key/direction code a2 (flags 0x10/0x20/0x40/0x80) to a menu index using per-state tables for a1 == 1 or 2; calls sub_2105AC0 on dword_20AC0B0 for feedback.
sub_20AC0B4
export/plan0/arm9_main/sub_20AC0B4_020AC0B4.c
- docs/function_notes/NEEDS_REVIEW.md:535 probably input/menu event handler for code a1: plays feedback sounds via sub_212ECC0 (dword_20AC22C..234) and returns 3 when the sub_20AA790/738/6E0 remap confirms the current list entry.
- docs/function_notes/hk_16.md:92 probably input/menu event handler for code a1: plays feedback sounds via sub_212ECC0 (dword_20AC22C..234) and returns 3 when the sub_20AA790/738/6E0 remap confirms the current list entry.
sub_20AC238
export/plan0/arm9_main/sub_20AC238_020AC238.c
- docs/function_notes/NEEDS_REVIEW.md:536 probably returns the index of the last valid entry (>= 0x20) in the 16-bit list at struct+64 (count at +70, limit at +74), else 0.
- docs/function_notes/hk_16.md:93 probably returns the index of the last valid entry (>= 0x20) in the 16-bit list at struct+64 (count at +70, limit at +74), else 0.
sub_20AC284
export/plan0/arm9_main/sub_20AC284_020AC284.c
- docs/function_notes/NEEDS_REVIEW.md:537 probably unpacks 4-bit nibble pairs from a1 into bytes at a2 (low nibble to even index, high nibble to odd); count is (a3*a3)/2 via sub_2133068.
- docs/function_notes/hk_16.md:94 probably unpacks 4-bit nibble pairs from a1 into bytes at a2 (low nibble to even index, high nibble to odd); count is (a3*a3)/2 via sub_2133068.
sub_20AC2C4
export/plan0/arm9_main/sub_20AC2C4_020AC2C4.c
- docs/function_notes/NEEDS_REVIEW.md:538 probably packs two 4-bit values per byte from a1 pairs (low | high<<4) into a2; count derived from a3*a3.
- docs/function_notes/hk_16.md:95 probably packs two 4-bit values per byte from a1 pairs (low | high<<4) into a2; count derived from a3*a3.
sub_20AC2FC
export/plan0/arm9_main/sub_20AC2FC_020AC2FC.c
- docs/function_notes/NEEDS_REVIEW.md:539 probably de-tiles/reorders an a3 x a3 block of bytes from a1 into a2 using 8x8 tile index math (sub_2133068 shift helpers).
- docs/function_notes/hk_16.md:96 probably de-tiles/reorders an a3 x a3 block of bytes from a1 into a2 using 8x8 tile index math (sub_2133068 shift helpers).
sub_20AC390
export/plan0/arm9_main/sub_20AC390_020AC390.c
- docs/function_notes/NEEDS_REVIEW.md:540 probably like sub_20AC2FC but also unpacks 4-bit pairs, writing packed nibble bytes into tiled layout at a2.
- docs/function_notes/hk_16.md:97 probably like sub_20AC2FC but also unpacks 4-bit pairs, writing packed nibble bytes into tiled layout at a2.
sub_20AC454
export/plan0/arm9_main/sub_20AC454_020AC454.c
- docs/function_notes/NEEDS_REVIEW.md:541 probably like sub_20AC390 in reverse: splits packed bytes from a1 into two 4-bit values written to tiled positions in a2.
- docs/function_notes/hk_16.md:98 probably like sub_20AC390 in reverse: splits packed bytes from a1 into two 4-bit values written to tiled positions in a2.
sub_20AC524
export/plan0/arm9_main/sub_20AC524_020AC524.c
- docs/function_notes/NEEDS_REVIEW.md:542 probably finds the first object in the list from sub_210008C(sub_2100138(a1)) whose flag halfword at +2 has bit 0x100 set; returns it or 0.
- docs/function_notes/hk_16.md:99 probably finds the first object in the list from sub_210008C(sub_2100138(a1)) whose flag halfword at +2 has bit 0x100 set; returns it or 0.
sub_20AC588
export/plan0/arm9_main/sub_20AC588_020AC588.c
- vm_model/src/mapobj/boo.rs:5 spawner ctor:
sub_20AC588(0x13B, settings0 >> 16)creates that many and frees them again; - vm_model/src/mapobj/boo.rs:436 The pool the ctor creates (
sub_20AC588): Boos with their draw variants set. - docs/function_notes/hk_16.md:100 loops a2 times calling sub_20D34D4 and sub_20D2398 on entries lacking flag 0x100 (probably frees or steps through objects).
sub_20AC5E4
export/plan0/arm9_main/sub_20AC5E4_020AC5E4.c
- docs/function_notes/NEEDS_REVIEW.md:543 probably allocates a 112-byte object via sub_2100138/sub_209BBFC, zeroes its fields 1..6 and 40..44, and sets field 43 to a1 (object class init).
- docs/function_notes/hk_16.md:101 probably allocates a 112-byte object via sub_2100138/sub_209BBFC, zeroes its fields 1..6 and 40..44, and sets field 43 to a1 (object class init).
sub_20AC63C
export/plan0/arm9_main/sub_20AC63C_020AC63C.c
- docs/function_notes/hk_16.md:102 thunk-like wrapper: returns off_20AC650(0, off_20AC654, 0), a class allocation helper.
sub_20AC658
export/plan0/arm9_main/sub_20AC658_020AC658.c
- docs/function_notes/hk_16.md:103 thunk-like wrapper: returns off_20AC66C(off_20AC670[0], off_20AC674[0], off_20AC678), probably a decoration draw descriptor call.
sub_20AC67C
export/plan0/arm9_main/sub_20AC67C_020AC67C.c
- docs/function_notes/hk_16.md:104 wrapper: returns sub_209BFA8(0, 0, 0, 1, 0), allocating a default class record.
sub_20AC6A8
export/plan0/arm9_main/sub_20AC6A8_020AC6A8.c
- docs/function_notes/NEEDS_REVIEW.md:544 probably racer-state animation step: state machine at a2+176 (0..3) that uses sub_20A1154 (score/state check) and adds to a2+160 over a countdown; copies three model fields from a2+172 into a2+4..12.
- docs/function_notes/hk_16.md:105 probably racer-state animation step: state machine at a2+176 (0..3) that uses sub_20A1154 (score/state check) and adds to a2+160 over a countdown; copies three model fields from a2+172 into a2+4..12.
sub_20AC890
export/plan0/arm9_main/sub_20AC890_020AC890.c
- docs/function_notes/NEEDS_REVIEW.md:545 probably draws an object if a2's struct+900 is non-zero: sends sub_1FF9048 commands (ids 20, 25, 27, 28), computes colors via sub_21484D0/sub_21482CC, then sub_209BB2C.
- docs/function_notes/hk_16.md:106 probably draws an object if a2's struct+900 is non-zero: sends sub_1FF9048 commands (ids 20, 25, 27, 28), computes colors via sub_21484D0/sub_21482CC, then sub_209BB2C.
sub_20AC9B0
export/plan0/arm9_main/sub_20AC9B0_020AC9B0.c
- docs/function_notes/hk_16.md:107 thunk-like wrapper: calls off_20AC9C4 with a1 and *off_20AC9C0 (draws a model's render object).
sub_20AC9C8
export/plan0/arm9_main/sub_20AC9C8_020AC9C8.c
- docs/function_notes/hk_16.md:108 allocates an object via sub_209BD08(a1, off_20AC9F4), stores pointer in *off_20AC9F8, and initialises it with sub_209B940(obj, 63).
sub_20AC9FC
export/plan0/arm9_main/sub_20AC9FC_020AC9FC.c
- docs/function_notes/hk_16.md:109 thunk: calls off_20ACA04 with a1.
sub_20ACA08
export/plan0/arm9_main/sub_20ACA08_020ACA08.c
- docs/function_notes/hk_16.md:110 if a1 non-null, sets its halfword +4 to 11 and calls sub_2105E98 (stops/fades a sound handle).
sub_20ACA24
export/plan0/arm9_main/sub_20ACA24_020ACA24.c
- docs/function_notes/NEEDS_REVIEW.md:546 probably chooses a sound id from a 5-entry table copied from off_20ACA9C based on state at *off_20ACAA0+84, sets a1+4 to it, and plays it via sub_2105E98.
- docs/function_notes/hk_16.md:112 probably chooses a sound id from a 5-entry table copied from off_20ACA9C based on state at *off_20ACAA0+84, sets a1+4 to it, and plays it via sub_2105E98.
sub_20ACAA4
export/plan0/arm9_main/sub_20ACAA4_020ACAA4.c
- docs/function_notes/hk_16.md:113 setter: stores a1 into *off_20ACAB4+116.
sub_20ACAB8
export/plan0/arm9_main/sub_20ACAB8_020ACAB8.c
- docs/function_notes/hk_16.md:114 setter: stores a1 into *off_20ACAC8+32.
sub_20ACAD0
export/plan0/arm9_main/sub_20ACAD0_020ACAD0.c
- docs/function_notes/NEEDS_REVIEW.md:547 probably chooses and starts a track/sound: calls sub_20ADAF8 and sub_20AE488, stores result at *off_20ACAFC+96, and calls sub_20ADAD0 when the first value is 10 or more before sub_20ACFF4.
- docs/function_notes/hk_16.md:116 probably chooses and starts a track/sound: calls sub_20ADAF8 and sub_20AE488, stores result at *off_20ACAFC+96, and calls sub_20ADAD0 when the first value is 10 or more before sub_20ACFF4.
sub_20ACB08
export/plan0/arm9_main/sub_20ACB08_020ACB08.c
- docs/function_notes/NEEDS_REVIEW.md:548 probably fills a 15 x 2 tile grid (halfword +4 per 64-byte row) with value 248 or sub_20AE4C0 results, then calls sub_20ACFF4 with a computed entry from sub_20ADAD0.
- docs/function_notes/hk_16.md:118 probably fills a 15 x 2 tile grid (halfword +4 per 64-byte row) with value 248 or sub_20AE4C0 results, then calls sub_20ACFF4 with a computed entry from sub_20ADAD0.
sub_20ACBC0
export/plan0/arm9_main/sub_20ACBC0_020ACBC0.c
- docs/function_notes/hk_17.md:3 returns bit 0 of byte +49 of the object at *off_20ACBE4 (boolean flag getter).
sub_20ACBE8
export/plan0/arm9_main/sub_20ACBE8_020ACBE8.c
- docs/function_notes/hk_17.md:4 returns u16 at +6 of its argument (field getter).
sub_20ACBF8
export/plan0/arm9_main/sub_20ACBF8_020ACBF8.c
- docs/function_notes/NEEDS_REVIEW.md:549 probably per-frame menu cursor handler; uses sub_20AE408 as button tests, toggles state at *off_20ACDBC +76/+84/+92, calls sub_2105AC0 and sub_20ACFF4.
- docs/function_notes/hk_17.md:5 probably per-frame menu cursor handler; uses sub_20AE408 as button tests, toggles state at *off_20ACDBC +76/+84/+92, calls sub_2105AC0 and sub_20ACFF4.
sub_20ACDC4
export/plan0/arm9_main/sub_20ACDC4_020ACDC4.c
- docs/function_notes/NEEDS_REVIEW.md:550 probably per-entry table getter: calls indirect off_20ACDE0 on record off_20ACDDC + 92*a1 + 72 (92-byte entries).
- docs/function_notes/hk_17.md:6 probably per-entry table getter: calls indirect off_20ACDE0 on record off_20ACDDC + 92*a1 + 72 (92-byte entries).
sub_20ACDEC
export/plan0/arm9_main/sub_20ACDEC_020ACDEC.c
- docs/function_notes/hk_17.md:7 same pattern as sub_20ACDC4 with table off_20ACE04 and indirect off_20ACE08.
sub_20ACE14
export/plan0/arm9_main/sub_20ACE14_020ACE14.c
- docs/function_notes/hk_17.md:8 same pattern with table off_20ACE2C and indirect off_20ACE30; predicate used by sub_20ACBF8.
sub_20ACE68
export/plan0/arm9_main/sub_20ACE68_020ACE68.c
- docs/function_notes/hk_17.md:9 returns true if u16 at +12 is 0 and u16 at +4 is nonzero (state predicate).
sub_20ACE8C
export/plan0/arm9_main/sub_20ACE8C_020ACE8C.c
- docs/function_notes/hk_17.md:10 returns !sub_20ACEBC() && u16 at +16 < 5.
sub_20ACEBC
export/plan0/arm9_main/sub_20ACEBC_020ACEBC.c
- docs/function_notes/hk_17.md:11 returns u16 at +4 of its argument (field getter).
sub_20ACEC4
export/plan0/arm9_main/sub_20ACEC4_020ACEC4.c
- docs/function_notes/hk_17.md:12 predicate via indirect off_20ACEDC on record off_20ACED8 + 92*a1.
sub_20ACEF4
export/plan0/arm9_main/sub_20ACEF4_020ACEF4.c
- docs/function_notes/hk_17.md:13 trivial stub, returns constant 8.
sub_20ACF04
export/plan0/arm9_main/sub_20ACF04_020ACF04.c
- docs/function_notes/hk_17.md:14 switches on state +84 of *off_20ACF40: calls sub_2105AC0 with 9 for states 0-2, 8 for states 3-4.
sub_20ACF44
export/plan0/arm9_main/sub_20ACF44_020ACF44.c
- docs/function_notes/hk_17.md:15 fills a 15+2 entry list (64-byte stride, u16 at +4) at +104 of *off_20ACFE8 with sub_20AE4C0 values (zeros if sub_20ADAF8() >= 10), then sub_20ADAD0(2,8).
sub_20ACFF4
export/plan0/arm9_main/sub_20ACFF4_020ACFF4.c
- docs/function_notes/hk_17.md:17 calls sub_20AD028, then sub_2124C30 with fields of *off_20AD020 (+104, +108, +116, +168) and offset dword_20AD024 (display commit).
sub_20AD028
export/plan0/arm9_main/sub_20AD028_020AD028.c
- docs/function_notes/NEEDS_REVIEW.md:551 probably builds a 2-layer tile/sprite buffer from *off_20AD1EC state, calls sub_2124100 for layers 0 and 1, switch on state +84 sets per-cell flags.
- docs/function_notes/hk_17.md:18 probably builds a 2-layer tile/sprite buffer from *off_20AD1EC state, calls sub_2124100 for layers 0 and 1, switch on state +84 sets per-cell flags.
sub_20AD234
export/plan0/arm9_main/sub_20AD234_020AD234.c
- docs/function_notes/hk_17.md:20 threshold is 107 if *(off_20AD260+80) is 0, else 0; calls sub_20ADAD0(1,8) when sub_20ADAF8() >= threshold, then tail-calls sub_20AD268.
sub_20AD268
export/plan0/arm9_main/sub_20AD268_020AD268.c
- docs/function_notes/NEEDS_REVIEW.md:552 probably timed fade/transition: frame counter at +100 of *off_20AD2D8, sub_20AD2F0 calls for frames below 107, at 107 sets +80 = 1 and calls sub_20AD2DC(1).
- docs/function_notes/hk_17.md:22 probably timed fade/transition: frame counter at +100 of *off_20AD2D8, sub_20AD2F0 calls for frames below 107, at 107 sets +80 = 1 and calls sub_20AD2DC(1).
sub_20AD2DC
export/plan0/arm9_main/sub_20AD2DC_020AD2DC.c
- docs/function_notes/hk_17.md:23 stores its argument into (off_20AD2EC) and returns it (setter).
sub_20AD2F0
export/plan0/arm9_main/sub_20AD2F0_020AD2F0.c
- docs/function_notes/hk_17.md:24 wrapper of sub_214A40C(dword_20AD328, a1..a4), probably an engine A display window/blend call.
sub_20AD32C
export/plan0/arm9_main/sub_20AD32C_020AD32C.c
- docs/function_notes/hk_17.md:25 calls sub_2125DA0(a1), clears the global pointer *off_20AD340 and returns it (reset helper).
sub_20AD344
export/plan0/arm9_main/sub_20AD344_020AD344.c
- docs/function_notes/NEEDS_REVIEW.md:553 probably init of the 2D title/menu screen: heap-allocates state into *off_20AD704, sets fields +4..+100, loads UI assets (sub_20B47C0), sprites (sub_2038D88).
- docs/function_notes/hk_17.md:26 probably init of the 2D title/menu screen: heap-allocates state into *off_20AD704, sets fields +4..+100, loads UI assets (sub_20B47C0), sprites (sub_2038D88).
sub_20AD820
export/plan0/arm9_main/sub_20AD820_020AD820.c
- docs/function_notes/hk_17.md:27 stores argument at +20 of *off_20AD830 (setter).
sub_20AD834
export/plan0/arm9_main/sub_20AD834_020AD834.c
- docs/function_notes/hk_17.md:28 stores argument at +16 of *off_20AD844 (setter).
sub_20AD848
export/plan0/arm9_main/sub_20AD848_020AD848.c
- docs/function_notes/hk_17.md:29 stores argument at +8 of *off_20AD858 (setter).
sub_20AD85C
export/plan0/arm9_main/sub_20AD85C_020AD85C.c
- docs/function_notes/hk_17.md:30 stores argument at +4 of *off_20AD86C (setter).
sub_20AD870
export/plan0/arm9_main/sub_20AD870_020AD870.c
- docs/function_notes/hk_17.md:31 sets the 3-bit field at bits 13-15 of the register at off_20AD888 (window/BG control) to a1 and returns it.
sub_20AD88C
export/plan0/arm9_main/sub_20AD88C_020AD88C.c
- docs/function_notes/hk_17.md:32 sets the 3-bit field at bits 13-15 of DISPCNT (0x04000000, engine A) to a1.
sub_20AD8A4
export/plan0/arm9_main/sub_20AD8A4_020AD8A4.c
- docs/function_notes/hk_17.md:33 wrapper of sub_214A40C(dword_20AD8DC, a1..a4), probably the engine B counterpart of sub_20AD2F0.
sub_20AD8E0
export/plan0/arm9_main/sub_20AD8E0_020AD8E0.c
- docs/function_notes/hk_17.md:34 writes (*off_20AD8FC & dword_20AD900) | a1 to the register at off_20AD8FC (probably blend control).
sub_20AD904
export/plan0/arm9_main/sub_20AD904_020AD904.c
- docs/function_notes/hk_17.md:35 DISPCNT (0x04000000) = (DISPCNT & dword_20AD920) | a1, i.e. OR-in display flags on engine A.
sub_20AD924
export/plan0/arm9_main/sub_20AD924_020AD924.c
- docs/function_notes/hk_17.md:36 wrapper of sub_2038CD8 on (a1+112) with six 16-bit args (sprite/BG setup).
sub_20AD958
export/plan0/arm9_main/sub_20AD958_020AD958.c
- docs/function_notes/hk_17.md:37 wrapper of sub_2038CD8 on (a1+40) with six 16-bit args.
sub_20AD98C
export/plan0/arm9_main/sub_20AD98C_020AD98C.c
- docs/function_notes/hk_17.md:38 wrapper of sub_2038D00 on (a1+40) with six 16-bit args.
sub_20AD9C0
export/plan0/arm9_main/sub_20AD9C0_020AD9C0.c
- docs/function_notes/hk_17.md:39 wrapper of sub_2038D28 on (a1+40) with eight 16-bit args.
sub_20AD9FC
export/plan0/arm9_main/sub_20AD9FC_020AD9FC.c
- docs/function_notes/NEEDS_REVIEW.md:554 probably a getter returning (off_20ADA0C), a global flag or value.
- docs/function_notes/hk_17.md:40 probably a getter returning (off_20ADA0C), a global flag or value.
sub_20ADA10
export/plan0/arm9_main/sub_20ADA10_020ADA10.c
- docs/function_notes/hk_17.md:41 returns sub_20364E0(sub_20364E8()), a heap/allocator handle getter (same as sub_20AE754).
sub_20ADA2C
export/plan0/arm9_main/sub_20ADA2C_020ADA2C.c
- docs/function_notes/NEEDS_REVIEW.md:555 probably per-frame screen update: sub_20AE6AC clears a buffer pair, calls a function-pointer entry with a1, then sub_20ADA7C, sub_2125928, sub_20AE630.
- docs/function_notes/hk_17.md:42 probably per-frame screen update: sub_20AE6AC clears a buffer pair, calls a function-pointer entry with a1, then sub_20ADA7C, sub_2125928, sub_20AE630.
sub_20ADA7C
export/plan0/arm9_main/sub_20ADA7C_020ADA7C.c
- docs/function_notes/hk_17.md:43 saturating increment of the u32 at *result (stops at 0x7FFFFFFF), returns the pointer.
sub_20ADA94
export/plan0/arm9_main/sub_20ADA94_020ADA94.c
- docs/function_notes/NEEDS_REVIEW.md:556 probably screen teardown: calls a function-pointer table entry, clears +4, calls sub_21258F0, then sub_20AE5F0 on the buffer pair.
- docs/function_notes/hk_17.md:44 probably screen teardown: calls a function-pointer table entry, clears +4, calls sub_21258F0, then sub_20AE5F0 on the buffer pair.
sub_20ADAD0
export/plan0/arm9_main/sub_20ADAD0_020ADAD0.c
- docs/function_notes/hk_17.md:45 pushes a record in the state object at *off_20ADAF4: +8 = old +12, +12 = a1, +16 = a2, +4 = 1 (state history); returns the record.
sub_20ADAF8
export/plan0/arm9_main/sub_20ADAF8_020ADAF8.c
- docs/function_notes/hk_17.md:46 returns (off_20ADB00), a counter or state getter (used by sub_20ACF44, sub_20AD028, sub_20AD234).
sub_20ADB04
export/plan0/arm9_main/sub_20ADB04_020ADB04.c
- docs/function_notes/hk_17.md:47 copies 7 pairs from table off_20ADB2C into entries at +20/+24 (stride 8) of *off_20ADB30; returns the table pointer.
sub_20ADB34
export/plan0/arm9_main/sub_20ADB34_020ADB34.c
- docs/function_notes/NEEDS_REVIEW.md:557 probably a completion check over a 6x9 grid of saved records read via sub_205FD78; current cell must not be 5-7, all other cells must be 5, 6 or 7.
- docs/function_notes/hk_17.md:48 probably a completion check over a 6x9 grid of saved records read via sub_205FD78; current cell must not be 5-7, all other cells must be 5, 6 or 7.
sub_20ADBC4
export/plan0/arm9_main/sub_20ADBC4_020ADBC4.c
- docs/function_notes/hk_17.md:49 returns byte +85 of *off_20ADBE0 when u32 +8 == 4, else -1 (validated row/column getter).
sub_20ADBE4
export/plan0/arm9_main/sub_20ADBE4_020ADBE4.c
- docs/function_notes/hk_17.md:50 returns byte +84 of *off_20ADC00 when u32 +8 == 4, else -1 (validated column/row getter).
sub_20ADC04
export/plan0/arm9_main/sub_20ADC04_020ADC04.c
- docs/function_notes/hk_17.md:51 returns sub_205FD78(sub_20ADBE4(), sub_20ADBC4(), &v), the record for the current grid cell.
sub_20ADC24
export/plan0/arm9_main/sub_20ADC24_020ADC24.c
- docs/function_notes/hk_17.md:52 less-than comparator on two packed 4-byte keys: a[0] + a[3]dword_20ADC5C + a[2]dword_20ADC60 (sort key).
sub_20ADC64
export/plan0/arm9_main/sub_20ADC64_020ADC64.c
- docs/function_notes/hk_17.md:53 clamps a1 to 0..5 and returns the s16 entry at off_20ADC78[a1] (small lookup table).
sub_20ADC7C
export/plan0/arm9_main/sub_20ADC7C_020ADC7C.c
- docs/function_notes/NEEDS_REVIEW.md:558 probably text fitting: copies up to 10 u16 entries from a1 into a2 while summed glyph widths (sub_20ADCE0) stay <= 48; returns count.
- docs/function_notes/hk_17.md:54 probably text fitting: copies up to 10 u16 entries from a1 into a2 while summed glyph widths (sub_20ADCE0) stay <= 48; returns count.
sub_20ADCE0
export/plan0/arm9_main/sub_20ADCE0_020ADCE0.c
- docs/function_notes/hk_17.md:55 wrapper: glyph lookup via sub_20ADD90, then sub_20ADD18(a1, a2, result).
sub_20ADD18
export/plan0/arm9_main/sub_20ADD18_020ADD18.c
- docs/function_notes/hk_17.md:56 stores sub_2022C80(font, glyph) into *a1 and sub_20ADD50(font, glyph) into a1[1] (glyph metrics helper).
sub_20ADD50
export/plan0/arm9_main/sub_20ADD50_020ADD50.c
- docs/function_notes/hk_17.md:57 returns ((a1)+8) + 8 + a2 * sub_20ADD80(), the glyph data offset for glyph index a2.
sub_20ADD80
export/plan0/arm9_main/sub_20ADD80_020ADD80.c
- docs/function_notes/hk_17.md:58 returns u16 at +2 of the font info at (a1+8) (glyph cell stride).
sub_20ADD90
export/plan0/arm9_main/sub_20ADD90_020ADD90.c
- docs/function_notes/hk_17.md:59 maps character code a2 via sub_2022CE4; if the result equals dword_20ADDB4 returns u16 at +2 of the font, else the result.
sub_20ADDB8
export/plan0/arm9_main/sub_20ADDB8_020ADDB8.c
- docs/function_notes/hk_17.md:60 wrapper of sub_214CFE4(a2, a1, a3), probably a VRAM/memory fill or copy helper.
sub_20ADDDC
export/plan0/arm9_main/sub_20ADDDC_020ADDDC.c
- docs/function_notes/hk_17.md:61 gets sub_20ADF00() and sub_212B090() of it, then sub_20ADE08(v8, a2, a3, a4, off_20ADE04): tile-grid draw via callback.
sub_20ADE08
export/plan0/arm9_main/sub_20ADE08_020ADE08.c
- docs/function_notes/hk_17.md:62 loops a 16x16 grid of 16-bit tile words from a1; for each nibble equal to 1 or 2 calls callback a5 with palette a3 or a4.
sub_20ADEC0
export/plan0/arm9_main/sub_20ADEC0_020ADEC0.c
- docs/function_notes/hk_17.md:63 writes a 2-bit field (value a4) into a 16-bit word array at a1 at the cell offset from sub_2133068 (tile attribute setter).
sub_20ADF00
export/plan0/arm9_main/sub_20ADF00_020ADF00.c
- docs/function_notes/NEEDS_REVIEW.md:559 probably renders a 2D screen image: clears words of the buffer from sub_212B090, composes with sub_2023408 and 3x3 sub_20ADFB0 blits, text from sub_20ADFF0.
- docs/function_notes/hk_17.md:64 probably renders a 2D screen image: clears words of the buffer from sub_212B090, composes with sub_2023408 and 3x3 sub_20ADFB0 blits, text from sub_20ADFF0.
sub_20ADFB0
export/plan0/arm9_main/sub_20ADFB0_020ADFB0.c
- docs/function_notes/hk_17.md:65 wrapper of sub_2024340(a1..a6), probably a tile/image blit.
sub_20ADFD8
export/plan0/arm9_main/sub_20ADFD8_020ADFD8.c
- docs/function_notes/hk_17.md:66 trivial initializer: writes four words (a2..a5) into the 4-word struct at result.
sub_20ADFF0
export/plan0/arm9_main/sub_20ADFF0_020ADFF0.c
- docs/function_notes/hk_17.md:67 zeroes an 11-entry u16 array at a2, then builds caption text into a2 via sub_213EDBC from sub_20AE178, a common-table string (sub_20B47CC), or sub_20ADC7C.
sub_20AE0AC
export/plan0/arm9_main/sub_20AE0AC_020AE0AC.c
- docs/function_notes/hk_17.md:68 returns byte +134 of the 48-byte record at *off_20AE0C4 for index a1.
sub_20AE0C8
export/plan0/arm9_main/sub_20AE0C8_020AE0C8.c
- docs/function_notes/hk_17.md:69 returns u32 at +104 of the 48-byte record at *off_20AE0E0 for index a1.
sub_20AE0E4
export/plan0/arm9_main/sub_20AE0E4_020AE0E4.c
- docs/function_notes/hk_17.md:70 returns u32 at +8 of *off_20AE0F4 (mode/state getter).
sub_20AE0F8
export/plan0/arm9_main/sub_20AE0F8_020AE0F8.c
- docs/function_notes/hk_17.md:71 returns u32 at +136 of the 48-byte record at *off_20AE110 for index a1.
sub_20AE114
export/plan0/arm9_main/sub_20AE114_020AE114.c
- docs/function_notes/hk_17.md:72 predicate: true if sub_20AE15C() is 0 or sub_20AE15C(a1) is 2 or 3 (state check).
sub_20AE15C
export/plan0/arm9_main/sub_20AE15C_020AE15C.c
- docs/function_notes/hk_17.md:73 returns u32 at +112 of the 48-byte record at *off_20AE174 for index a1.
sub_20AE178
export/plan0/arm9_main/sub_20AE178_020AE178.c
- docs/function_notes/hk_17.md:74 picks a message id (33/34 for special a1 when a2 is set, else table[a1] from off_20AE1C8), returns sub_20B3F7C(sub_20B47CC(off_20AE1CC), id), a string lookup.
sub_20AE1D0
export/plan0/arm9_main/sub_20AE1D0_020AE1D0.c
- docs/function_notes/hk_17.md:75 byte-reverses a 32-bit value (endian swap) and returns it.
sub_20AE1F4
export/plan0/arm9_main/sub_20AE1F4_020AE1F4.c
- docs/function_notes/hk_17.md:76 indirect per-entry getter: calls off_20AE210 on record off_20AE20C + 92*a1 + 72.
sub_20AE21C
export/plan0/arm9_main/sub_20AE21C_020AE21C.c
- docs/function_notes/hk_17.md:77 indirect per-entry getter: calls off_20AE238 on record off_20AE234 + 92*a1 + 72.
sub_20AE244
export/plan0/arm9_main/sub_20AE244_020AE244.c
- docs/function_notes/hk_17.md:78 rectangle hit-test: returns 1 if entry a1 is enabled (sub_20AE290) and the point lies inside the box given by a2 and a3.
sub_20AE290
export/plan0/arm9_main/sub_20AE290_020AE290.c
- docs/function_notes/hk_17.md:79 indirect per-entry flag getter: calls off_20AE2AC on record off_20AE2A8 + 92*a1 + 72.
sub_20AE2E4
export/plan0/arm9_main/sub_20AE2E4_020AE2E4.c
- docs/function_notes/hk_17.md:80 returns true if u16 at +12 is 0 and u16 at +4 is nonzero (same predicate as sub_20ACE68).
sub_20AE308
export/plan0/arm9_main/sub_20AE308_020AE308.c
- docs/function_notes/hk_17.md:81 returns !sub_20AE338() && u16 at +16 < 5 (same as sub_20ACE8C).
sub_20AE338
export/plan0/arm9_main/sub_20AE338_020AE338.c
- docs/function_notes/hk_17.md:82 returns u16 at +4 of its argument (same as sub_20ACEBC).
sub_20AE340
export/plan0/arm9_main/sub_20AE340_020AE340.c
- docs/function_notes/hk_17.md:83 searches the mission table (sub_2047A28, sub_203B680) for the cell equal to a1, writes its row/column to a2, a3; returns row count.
sub_20AE3A4
export/plan0/arm9_main/sub_20AE3A4_020AE3A4.c
- docs/function_notes/hk_17.md:84 returns entry [4a1 + a2] of the 2D int table off_20AE3B0 (lookup).
sub_20AE3B4
export/plan0/arm9_main/sub_20AE3B4_020AE3B4.c
- docs/function_notes/hk_17.md:85 returns a random value in [0, a1) via sub_2046524, seeded from sub_20AE3D8 when sub_20AE3F4 is set, else sub_204AA60.
sub_20AE3D8
export/plan0/arm9_main/sub_20AE3D8_020AE3D8.c
- docs/function_notes/hk_17.md:86 returns *off_20AE3EC + dword_20AE3F0 (computed address/offset).
sub_20AE3F4
export/plan0/arm9_main/sub_20AE3F4_020AE3F4.c
- docs/function_notes/hk_17.md:87 returns u32 at +32 of *off_20AE404 (flag getter).
sub_20AE408
export/plan0/arm9_main/sub_20AE408_020AE408.c
- docs/function_notes/hk_17.md:88 returns sub_20AE458() OR sub_20AE428(a1); used as an input/button bit test by sub_20ACBF8 (a2 unused in the decompile).
sub_20AE428
export/plan0/arm9_main/sub_20AE428_020AE428.c
- docs/function_notes/hk_17.md:89 indirect per-entry query: calls off_20AE440 on record off_20AE43C + 92*a1.
sub_20AE458
export/plan0/arm9_main/sub_20AE458_020AE458.c
- docs/function_notes/hk_17.md:90 indirect single-entry query: calls off_20AE470 on record off_20AE46C.
sub_20AE488
export/plan0/arm9_main/sub_20AE488_020AE488.c
- docs/function_notes/hk_17.md:91 maps index a1 to a signed offset: 0 for a<0 or a>=10, -3a for 0-2, -9 for 3-6, 3(a-7)-9 for 7-9.
sub_20AE4C0
export/plan0/arm9_main/sub_20AE4C0_020AE4C0.c
- docs/function_notes/hk_17.md:92 interpolation helper: mode 0 is linear lerp a2->a3 by a4/a5; mode 1 is eased lerp via sub_2132440 and table dword_20AE544; returns s16.
sub_20AE54C
export/plan0/arm9_main/sub_20AE54C_020AE54C.c
- docs/function_notes/hk_17.md:93 returns a1 >> 12 (fixed-point shift).
sub_20AE554
export/plan0/arm9_main/sub_20AE554_020AE554.c
- docs/function_notes/hk_17.md:94 returns (a1 * a2) >> 12 (64-bit fixed-point multiply).
sub_20AE564
export/plan0/arm9_main/sub_20AE564_020AE564.c
- docs/function_notes/hk_17.md:95 returns off_20AE580[2*(a1 >> 4) + 1], a sine-style table lookup.
sub_20AE584
export/plan0/arm9_main/sub_20AE584_020AE584.c
- docs/function_notes/hk_17.md:96 copies an 18-word table from off_20AE5C0 to the stack, returns entry a1 (0..14), 0 for negative, -40 for a1 >= 15.
sub_20AE5C4
export/plan0/arm9_main/sub_20AE5C4_020AE5C4.c
- docs/function_notes/hk_17.md:97 post-increments the u16 counter at a1 + dword_20AE5D0, returns the old value.
sub_20AE5D4
export/plan0/arm9_main/sub_20AE5D4_020AE5D4.c
- docs/function_notes/hk_17.md:98 pre-increments the u16 counter at a1 + dword_20AE5E0, returns its pointer.
sub_20AE5E4
export/plan0/arm9_main/sub_20AE5E4_020AE5E4.c
- docs/function_notes/hk_17.md:99 returns u16 at a1 + dword_20AE5EC (counter getter).
sub_20AE5F0
export/plan0/arm9_main/sub_20AE5F0_020AE5F0.c
- docs/function_notes/hk_17.md:100 DC_FlushRange (sub_200EE74) on each non-null buffer of the pair, then sub_214BFCC / sub_214BF64 to clear them.
sub_20AE630
export/plan0/arm9_main/sub_20AE630_020AE630.c
- docs/function_notes/hk_17.md:101 flushes each non-null buffer and fills the rest (128 - count) of 8-byte entries with a pattern (dword_20AE6A4/6A8), a sprite/OAM-style clear.
sub_20AE6AC
export/plan0/arm9_main/sub_20AE6AC_020AE6AC.c
- docs/function_notes/hk_17.md:102 zeroes u16 counters at dword_20AE6CC and dword_20AE6D0 in each non-null struct of the pair (reset).
sub_20AE6D4
export/plan0/arm9_main/sub_20AE6D4_020AE6D4.c
- docs/function_notes/hk_17.md:103 zeroes two u16 fields in each non-null struct of the pair and calls sub_214CC04(3, ptr, 192) (DMA-style clear of 192 bytes).
sub_20AE718
export/plan0/arm9_main/sub_20AE718_020AE718.c
- docs/function_notes/hk_17.md:104 calls sub_200F5AC(a1) and stores the 64-bit result into the global pair at off_20AE72C (probably a timer or handle setter).
sub_20AE730
export/plan0/arm9_main/sub_20AE730_020AE730.c
- docs/function_notes/hk_17.md:105 if a1 > 0, allocates a2*a1 bytes from the heap via sub_2036BEC on the handle from sub_20AE754(); otherwise returns 0.
sub_20AE754
export/plan0/arm9_main/sub_20AE754_020AE754.c
- docs/function_notes/hk_17.md:106 returns sub_20364E0(sub_20364E8()), a heap/allocator handle getter.
sub_20AE770
export/plan0/arm9_main/sub_20AE770_020AE770.c
- docs/function_notes/hk_17.md:107 bubble-style sort of index array a1 (length a3) ascending by keys a2[index]; returns a3 - 1.
sub_20AE7C4
export/plan0/arm9_main/sub_20AE7C4_020AE7C4.c
- docs/function_notes/hk_17.md:108 splits a1 and a2 (two-digit) and a3 (three-digit) into decimal digits, writes the 7-word array a4 (probably a time or score formatter).
sub_20AE824
export/plan0/arm9_main/sub_20AE824_020AE824.c
- docs/function_notes/NEEDS_REVIEW.md:560 probably per-frame draw dispatcher for the race/game screen: mode 3 calls sub_20C4AE8, mode 6 calls sub_20D12E0; else draw chains, switch on +2088.
- docs/function_notes/hk_17.md:109 probably per-frame draw dispatcher for the race/game screen: mode 3 calls sub_20C4AE8, mode 6 calls sub_20D12E0; else draw chains, switch on +2088.
sub_20AEB7C
export/plan0/arm9_main/sub_20AEB7C_020AEB7C.c
- docs/function_notes/NEEDS_REVIEW.md:561 probably race-screen per-frame state machine (2772 bytes): mode switch at *off_20AF650, flags +2092/+2108/+2112, sound ids 23/24/25 via sub_212ECC0, draws.
- docs/function_notes/hk_17.md:110 probably race-screen per-frame state machine (2772 bytes): mode switch at *off_20AF650, flags +2092/+2108/+2112, sound ids 23/24/25 via sub_212ECC0, draws.
sub_20AF66C
export/plan0/arm9_main/sub_20AF66C_020AF66C.c
- docs/function_notes/NEEDS_REVIEW.md:562 probably the per-frame update counterpart of sub_20AE824 (500 bytes): mode 3 calls sub_20C4BB0, mode 6 calls sub_212B204, else updates +2268/+2272.
- docs/function_notes/hk_17.md:111 probably the per-frame update counterpart of sub_20AE824 (500 bytes): mode 3 calls sub_20C4BB0, mode 6 calls sub_212B204, else updates +2268/+2272.
sub_20AF86C
export/plan0/arm9_main/sub_20AF86C_020AF86C.c
- docs/function_notes/NEEDS_REVIEW.md:563 probably screen exit/reset (284 bytes): sub_214A40C window setup, chain of getter/handler calls, clears DISPCNT bits 13-15 and the register at off_20AF998.
- docs/function_notes/hk_17.md:112 probably screen exit/reset (284 bytes): sub_214A40C window setup, chain of getter/handler calls, clears DISPCNT bits 13-15 and the register at off_20AF998.
sub_20AF99C
export/plan0/arm9_main/sub_20AF99C_020AF99C.c
- docs/function_notes/NEEDS_REVIEW.md:564 probably one-time 2D screen setup (908 bytes): palette RAM writes at 0x05000000, DISPCNT bits 0xE000, VRAM clears, calls sub_20B17A4 and sub_20B18B0.
- docs/function_notes/hk_17.md:113 probably one-time 2D screen setup (908 bytes): palette RAM writes at 0x05000000, DISPCNT bits 0xE000, VRAM clears, calls sub_20B17A4 and sub_20B18B0.
sub_20AFD68
export/plan0/arm9_main/sub_20AFD68_020AFD68.c
- docs/function_notes/NEEDS_REVIEW.md:565 probably loads 2D screen tile/palette graphics (1516 bytes): heap-allocates 1024 bytes, remaps tile data (bit flips, 0x400 XOR), copies to VRAM.
- docs/function_notes/hk_17.md:114 probably loads 2D screen tile/palette graphics (1516 bytes): heap-allocates 1024 bytes, remaps tile data (bit flips, 0x400 XOR), copies to VRAM.
sub_20B03BC
export/plan0/arm9_main/sub_20B03BC_020B03BC.c
- docs/function_notes/NEEDS_REVIEW.md:566 probably init of a 2D screen state object (1924 bytes): heap-allocates state into *off_20B0B48, zeroes fields +2060..+2332, loads asset ids via sub_20B47C0.
- docs/function_notes/hk_17.md:115 probably init of a 2D screen state object (1924 bytes): heap-allocates state into *off_20B0B48, zeroes fields +2060..+2332, loads asset ids via sub_20B47C0.
sub_20B0B8C
export/plan0/arm9_main/sub_20B0B8C_020B0B8C.c
- docs/function_notes/NEEDS_REVIEW.md:567 probably per-frame update of the 2D screen object (2992 bytes): mode 3 calls sub_20C4E48, mode 6 calls sub_212B1C0, writes DISPCNT/BG control and VRAM.
- docs/function_notes/hk_17.md:116 probably per-frame update of the 2D screen object (2992 bytes): mode 3 calls sub_20C4E48, mode 6 calls sub_212B1C0, writes DISPCNT/BG control and VRAM.
sub_20B17A4
export/plan0/arm9_main/sub_20B17A4_020B17A4.c
- docs/function_notes/NEEDS_REVIEW.md:568 probably BG layer setup (232 bytes): writes DISPCNT bits 0x1E00 via off_20B188C, calls sub_2148934(0), sets BG control registers at off_20B1894/89C/A4/A8.
- docs/function_notes/hk_17.md:117 probably BG layer setup (232 bytes): writes DISPCNT bits 0x1E00 via off_20B188C, calls sub_2148934(0), sets BG control registers at off_20B1894/89C/A4/A8.
sub_20B18B0
export/plan0/arm9_main/sub_20B18B0_020B18B0.c
- docs/function_notes/NEEDS_REVIEW.md:569 probably BG mode config (220 bytes): DISPCNT bits 0x1C00 or 0x1400 chosen by sub_20B64E8(a1), calls sub_2148934(5), writes BG control.
- docs/function_notes/hk_17.md:118 probably BG mode config (220 bytes): DISPCNT bits 0x1C00 or 0x1400 chosen by sub_20B64E8(a1), calls sub_2148934(5), writes BG control.
sub_20B19A0
export/plan0/arm9_main/sub_20B19A0_020B19A0.c
- docs/function_notes/hk_17.md:119 returns u32 at +2312 of *off_20B19B0 (flag getter, the field also set in sub_20AF66C and sub_20AF86C).
sub_20B19B4
export/plan0/arm9_main/sub_20B19B4_020B19B4.c
- docs/function_notes/NEEDS_REVIEW.md:570 probably writes two values (global base plus two constants) through a1 and a2 and returns the second; reads a global pointer off_20B19EC
- docs/function_notes/hk_18.md:3 probably writes two values (global base plus two constants) through a1 and a2 and returns the second; reads a global pointer off_20B19EC
sub_20B19F8
export/plan0/arm9_main/sub_20B19F8_020B19F8.c
- docs/function_notes/hk_18.md:4 getter, returns int at global object +0x8E4
sub_20B1A0C
export/plan0/arm9_main/sub_20B1A0C_020B1A0C.c
- docs/function_notes/hk_18.md:5 getter, returns int at global object +0x8E0
sub_20B1A20
export/plan0/arm9_main/sub_20B1A20_020B1A20.c
- docs/function_notes/hk_18.md:6 getter, returns int at global object +0x8DC
sub_20B1A34
export/plan0/arm9_main/sub_20B1A34_020B1A34.c
- docs/function_notes/hk_18.md:7 race-end standings step: sums per-racer values (sub_203C778, sub_20B4D2C), formats time via sub_20B1BF8, calls sub_20AE7C4, stores results in global
sub_20B1BF8
export/plan0/arm9_main/sub_20B1BF8_020B1BF8.c
- docs/function_notes/hk_18.md:8 time-difference formatter: converts two min/sec/cs triples to a ms difference, splits it into min/sec/cs bytes into a3, clamps at 99 min
sub_20B1CDC
export/plan0/arm9_main/sub_20B1CDC_020B1CDC.c
- docs/function_notes/hk_18.md:9 setter, stores a2 into global array element at +0x89C + 4*a1 and returns its address
sub_20B1CF4
export/plan0/arm9_main/sub_20B1CF4_020B1CF4.c
- docs/function_notes/hk_18.md:10 getter, returns global array element at +0x89C + 4*a1
sub_20B1D0C
export/plan0/arm9_main/sub_20B1D0C_020B1D0C.c
- docs/function_notes/hk_18.md:11 getter, returns int at global object +0x84C
sub_20B1D20
export/plan0/arm9_main/sub_20B1D20_020B1D20.c
- docs/function_notes/hk_18.md:12 getter, returns int at global object +0x848
sub_20B1D34
export/plan0/arm9_main/sub_20B1D34_020B1D34.c
- docs/function_notes/hk_18.md:13 returns a global pointer plus a constant (address computation, no side effects)
sub_20B1D50
export/plan0/arm9_main/sub_20B1D50_020B1D50.c
- docs/function_notes/hk_18.md:14 getter, returns int at global object +0x854
sub_20B1D64
export/plan0/arm9_main/sub_20B1D64_020B1D64.c
- docs/function_notes/hk_18.md:15 sets state fields on global object: +0x828=6, +0x82C=1, +0x834=1; returns the object (mode-6 activation)
sub_20B1D90
export/plan0/arm9_main/sub_20B1D90_020B1D90.c
- docs/function_notes/hk_18.md:16 sets state fields on global object: +0x828=5, +0x82C=1, +0x830=1; returns the object (mode-5 activation)
sub_20B1DBC
export/plan0/arm9_main/sub_20B1DBC_020B1DBC.c
- docs/function_notes/hk_18.md:17 getter, returns state/mode int at global object +0x828
sub_20B1DD0
export/plan0/arm9_main/sub_20B1DD0_020B1DD0.c
- docs/function_notes/hk_18.md:18 getter, returns first word of the object referenced by off_20B1DE0
sub_20B1DE4
export/plan0/arm9_main/sub_20B1DE4_020B1DE4.c
- docs/function_notes/hk_18.md:19 thumb; clears a global word at off_20B1DEC to 0 and returns its address
sub_20B1DF0
export/plan0/arm9_main/sub_20B1DF0_020B1DF0.c
- docs/function_notes/hk_18.md:20 2D screen layout builder for race mode: allocates screen object, switches on sub_20B252C() mode 0-5 to place sprites (sub_20B31B8), builds OBJ/cell lists
sub_20B24A4
export/plan0/arm9_main/sub_20B24A4_020B24A4.c
- docs/function_notes/hk_18.md:21 wrapper, forwards 6 args to sub_2024340 (2D cell/sprite add)
sub_20B24CC
export/plan0/arm9_main/sub_20B24CC_020B24CC.c
- docs/function_notes/hk_18.md:22 fills a 4-word list header at result (a2, a3, a4, a5); no other side effects
sub_20B24E4
export/plan0/arm9_main/sub_20B24E4_020B24E4.c
- docs/function_notes/hk_18.md:23 getter, returns int at global object +0xC (menu/session state)
sub_20B24F8
export/plan0/arm9_main/sub_20B24F8_020B24F8.c
- docs/function_notes/agent_05.md:4 getter: u16 at session-state struct +0x60 (menu/mode sub-state)
sub_20B250C
export/plan0/arm9_main/sub_20B250C_020B250C.c
- docs/function_notes/agent_05.md:5 true when sub_20B252C()==0 is false and sub_20B24F8()==4 (mode check)
sub_20B252C
export/plan0/arm9_main/sub_20B252C_020B252C.c
- docs/function_notes/agent_05.md:6 getter: session-state +0x8 (current screen/mode id)
sub_20B2540
export/plan0/arm9_main/sub_20B2540_020B2540.c
- docs/function_notes/agent_05.md:7 returns the heap handle (sub_20364E8 then sub_20364E0) for menu allocations
sub_20B255C
export/plan0/arm9_main/sub_20B255C_020B255C.c
- docs/function_notes/agent_05.md:8 if sub_20B2E98(a,b) true then calls sub_20B2C68 (redraw menu), returns result
sub_20B2574
export/plan0/arm9_main/sub_20B2574_020B2574.c
- docs/function_notes/agent_05.md:9 per-frame menu update: frame counter wraps at 50, handles open/close, selection and button input (large state machine)
sub_20B29B0
export/plan0/arm9_main/sub_20B29B0_020B29B0.c
- docs/function_notes/agent_05.md:10 getter: menu state +0x20
sub_20B29C4
export/plan0/arm9_main/sub_20B29C4_020B29C4.c
- docs/function_notes/agent_05.md:11 boolean: whether menu may be opened, from sub_20B33D8/sub_20B33F4 timers and mode (sub_20B252C) checks
sub_20B2A4C
export/plan0/arm9_main/sub_20B2A4C_020B2A4C.c
- docs/function_notes/agent_05.md:12 getter: global +0x4CC (flag at 1228)
sub_20B2A60
export/plan0/arm9_main/sub_20B2A60_020B2A60.c
- docs/function_notes/agent_05.md:13 setter: menu state +0x14 = value
sub_20B2A74
export/plan0/arm9_main/sub_20B2A74_020B2A74.c
- docs/function_notes/agent_05.md:14 calls function pointer on entry a1 of 92-byte table at +72 (per-slot record handler)
sub_20B2AC8
export/plan0/arm9_main/sub_20B2AC8_020B2AC8.c
- docs/function_notes/agent_05.md:15 true if record u16 +0xC is 0 and u16 +4 non-zero
sub_20B2AEC
export/plan0/arm9_main/sub_20B2AEC_020B2AEC.c
- docs/function_notes/agent_05.md:16 true if u16 +4 is zero and u16 +0x10 < 5
sub_20B2B1C
export/plan0/arm9_main/sub_20B2B1C_020B2B1C.c
- docs/function_notes/agent_05.md:17 getter: record u16 +4
sub_20B2B24
export/plan0/arm9_main/sub_20B2B24_020B2B24.c
- docs/function_notes/agent_05.md:18 calls function pointer on 92-byte table entry a1 (record handler)
sub_20B2B54
export/plan0/arm9_main/sub_20B2B54_020B2B54.c
- docs/function_notes/agent_05.md:19 returns constant 8
sub_20B2B5C
export/plan0/arm9_main/sub_20B2B5C_020B2B5C.c
- docs/function_notes/agent_05.md:20 getter: menu state +0x10
sub_20B2B70
export/plan0/arm9_main/sub_20B2B70_020B2B70.c
- docs/function_notes/agent_05.md:21 boolean: menu allowed now (chain of conditions on sub_20B33D8, sub_20C5DC4, sub_20C3DA0, sub_20C70BC and others)
sub_20B2BC8
export/plan0/arm9_main/sub_20B2BC8_020B2BC8.c
- docs/function_notes/agent_05.md:22 boolean: sub_20B2A4C() nonzero, or mode==2 and sub_20B33F4(2)>240
sub_20B2BF0
export/plan0/arm9_main/sub_20B2BF0_020B2BF0.c
- docs/function_notes/agent_05.md:23 returns 1 if menu state byte +0x28 set, else sub_20B2C24(that byte)
sub_20B2C24
export/plan0/arm9_main/sub_20B2C24_020B2C24.c
- docs/function_notes/agent_05.md:24 returns menu state +0x10 if sub_20B2C54() nonzero, else 0
sub_20B2C54
export/plan0/arm9_main/sub_20B2C54_020B2C54.c
- docs/function_notes/agent_05.md:25 getter: menu state +0xC
sub_20B2C68
export/plan0/arm9_main/sub_20B2C68_020B2C68.c
- docs/function_notes/agent_05.md:26 redraw menu: clears via sub_20B2DA4 then draws selection highlight via sub_20B2C80
sub_20B2C80
export/plan0/arm9_main/sub_20B2C80_020B2C80.c
- docs/function_notes/agent_05.md:27 draws the selected-item highlight rows (tile fills via sub_20B4428/sub_20B44A4) for the current menu
sub_20B2D04
export/plan0/arm9_main/sub_20B2D04_020B2D04.c
- docs/function_notes/agent_05.md:28 picks which menu (0-3) is active from mode and flags (sub_20B24E4, sub_20B2A4C, sub_20B252C)
sub_20B2D54
export/plan0/arm9_main/sub_20B2D54_020B2D54.c
- docs/function_notes/agent_05.md:29 returns global +0x4E0 if sub_203C880(sub_20B2D90()) else 6
sub_20B2D90
export/plan0/arm9_main/sub_20B2D90_020B2D90.c
- docs/function_notes/agent_05.md:30 getter: signed byte at +0x62 (player/slot index)
sub_20B2DA4
export/plan0/arm9_main/sub_20B2DA4_020B2DA4.c
- docs/function_notes/agent_05.md:31 clears the active menu's tile area (per-item rows then full 32x24 fill)
sub_20B2E00
export/plan0/arm9_main/sub_20B2E00_020B2E00.c
- docs/function_notes/agent_05.md:32 fills two consecutive tile rows via sub_20B4428
sub_20B2E34
export/plan0/arm9_main/sub_20B2E34_020B2E34.c
- docs/function_notes/agent_05.md:33 returns menu state +0x24, or 7 if it is 2 and sub_20C3DB4()
sub_20B2E58
export/plan0/arm9_main/sub_20B2E58_020B2E58.c
- docs/function_notes/agent_05.md:34 getter: state +0x4
sub_20B2E64
export/plan0/arm9_main/sub_20B2E64_020B2E64.c
- docs/function_notes/agent_05.md:35 opens/closes menu: calls sub_20B2F88 and plays sound sub_2105D70 when menu became open
sub_20B2E98
export/plan0/arm9_main/sub_20B2E98_020B2E98.c
- docs/function_notes/agent_05.md:36 boolean: sub_20B2EC0(a1) or state +0x8 nonzero
sub_20B2EC0
export/plan0/arm9_main/sub_20B2EC0_020B2EC0.c
- docs/function_notes/agent_05.md:37 getter: first dword of menu state (menu open flag)
sub_20B2ECC
export/plan0/arm9_main/sub_20B2ECC_020B2ECC.c
- docs/function_notes/agent_05.md:38 boolean: mode-specific check using sub_20B2F38/sub_20B2F18 and sub_205FD78 result in 5..7
sub_20B2F18
export/plan0/arm9_main/sub_20B2F18_020B2F18.c
- docs/function_notes/agent_05.md:39 returns signed byte +0x55 of state if mode is 4, else -1
sub_20B2F38
export/plan0/arm9_main/sub_20B2F38_020B2F38.c
- docs/function_notes/agent_05.md:40 returns signed byte +0x54 of state if mode is 4, else -1
sub_20B2F58
export/plan0/arm9_main/sub_20B2F58_020B2F58.c
- docs/function_notes/agent_05.md:41 true if (sub_20B2F38,sub_20B2F18) is (6,9) or (7,9)
sub_20B2F88
export/plan0/arm9_main/sub_20B2F88_020B2F88.c
- docs/function_notes/agent_05.md:42 set menu open/closed flag (a1), resets selection via sub_20B3008 when allowed
sub_20B3008
export/plan0/arm9_main/sub_20B3008_020B3008.c
- docs/function_notes/agent_05.md:43 resets menu selection (+0x24=0) and cursor item (+0x28) to the active menu's first item
sub_20B302C
export/plan0/arm9_main/sub_20B302C_020B302C.c
- docs/function_notes/agent_05.md:44 builds touch-screen button rectangles (x 8..248, 32-pixel rows) for the active menu items
sub_20B3120
export/plan0/arm9_main/sub_20B3120_020B3120.c
- docs/function_notes/agent_05.md:45 moves menu selection by a1 steps (wrapping modulo item count) and returns old index
sub_20B31B8
export/plan0/arm9_main/sub_20B31B8_020B31B8.c
- docs/function_notes/agent_05.md:46 appends item id a2 to menu a1's item list (28-byte menu records)
sub_20B31E4
export/plan0/arm9_main/sub_20B31E4_020B31E4.c
- docs/function_notes/agent_05.md:47 clears item counts of the 4 menu records
sub_20B320C
export/plan0/arm9_main/sub_20B320C_020B320C.c
- docs/function_notes/agent_05.md:48 picks a message id (common.bmg) for item a2 from a 6-entry table with mode-specific overrides, then draws it via sub_20B3F7C
sub_20B3260
export/plan0/arm9_main/sub_20B3260_020B3260.c
- docs/function_notes/agent_05.md:49 returns 0 if a1<0, a1<<11 if a1>=2, else constant
sub_20B3278
export/plan0/arm9_main/sub_20B3278_020B3278.c
- docs/function_notes/agent_05.md:50 starts menu BGM/sound by selection (sub_2105B64 with 0,1,4,5 depending on item)
sub_20B32EC
export/plan0/arm9_main/sub_20B32EC_020B32EC.c
- docs/function_notes/agent_05.md:51 getter: state +0xC
sub_20B32F8
export/plan0/arm9_main/sub_20B32F8_020B32F8.c
- docs/function_notes/agent_05.md:52 returns the active menu's sub-object pointer +12 (by menu id 0-3)
sub_20B3374
export/plan0/arm9_main/sub_20B3374_020B3374.c
- docs/function_notes/agent_05.md:53 sets the active menu object's +0x14 from state and returns it
sub_20B33C4
export/plan0/arm9_main/sub_20B33C4_020B33C4.c
- docs/function_notes/agent_05.md:54 getter: global field via large offset
sub_20B33D8
export/plan0/arm9_main/sub_20B33D8_020B33D8.c
- docs/function_notes/agent_05.md:55 returns *(+4) of global object if present, else 0
sub_20B33F4
export/plan0/arm9_main/sub_20B33F4_020B33F4.c
- docs/function_notes/agent_05.md:56 returns *(+8) of global object if present, else -120 (frame counter/timer)
sub_20B3410
export/plan0/arm9_main/sub_20B3410_020B3410.c
- game/src/sfx.rs:33 Countdown beeps at race ticks 0, 60, 120 and the GO tone at 175 (
sub_20B3410). - docs/function_notes/agent_05.md:57 per-frame timer-driven effect: at timer values -21/0/60/120/175 runs sound/screen-fade calls (sub_212C6F0, sub_212ECC0)
sub_20B3584
export/plan0/arm9_main/sub_20B3584_020B3584.c
- docs/function_notes/agent_05.md:58 advances global timer (+8) each frame, triggers events at 180 and handles state change to mode 5
sub_20B36A4
export/plan0/arm9_main/sub_20B36A4_020B36A4.c
- docs/function_notes/agent_05.md:59 init: *state=0 and timer=-120
sub_20B36C8
export/plan0/arm9_main/sub_20B36C8_020B36C8.c
- docs/function_notes/agent_05.md:60 clears a global pointer to 0
sub_20B36DC
export/plan0/arm9_main/sub_20B36DC_020B36DC.c
- docs/function_notes/agent_05.md:61 allocates 12-byte state block from heap and zeroes it
sub_20B3728
export/plan0/arm9_main/sub_20B3728_020B3728.c
- docs/function_notes/agent_05.md:65 uncertain: per-frame update of a results/ranking-style screen: counts to 10 frames, then picks a jingle by mode and sets up rankings (uses 140-byte per-player records)
sub_20B3ADC
export/plan0/arm9_main/sub_20B3ADC_020B3ADC.c
- docs/function_notes/agent_05.md:66 clears first dword of a global state block to 0
sub_20B3AF4
export/plan0/arm9_main/sub_20B3AF4_020B3AF4.c
- docs/function_notes/agent_05.md:67 clears a global pointer to 0
sub_20B3B08
export/plan0/arm9_main/sub_20B3B08_020B3B08.c
- docs/function_notes/agent_05.md:68 allocates 16-byte state block from heap and zeroes it
sub_20B3B58
export/plan0/arm9_main/sub_20B3B58_020B3B58.c
- docs/function_notes/agent_05.md:69 uncertain: compares two per-player values (8-byte records at +324, u16 or u8 by mode) to decide an ordering/result flag
sub_20B3CD8
export/plan0/arm9_main/sub_20B3CD8_020B3CD8.c
- docs/function_notes/agent_05.md:70 uncertain: computes per-player sort keys (16rank+8flag+8-index) for the result list and orders players
sub_20B3F64
export/plan0/arm9_main/sub_20B3F64_020B3F64.c
- docs/function_notes/agent_05.md:71 sets state flag +4 = 1
sub_20B3F7C
export/plan0/arm9_main/sub_20B3F7C_020B3F7C.c
- docs/function_notes/agent_05.md:72 BMG message lookup: scans BMG sections (sub_20B3FB0), returns pointer to string a2 in the DAT1 text block
sub_20B3FB0
export/plan0/arm9_main/sub_20B3FB0_020B3FB0.c
- docs/function_notes/agent_05.md:73 walks BMG file sections, remembers pointers to the DAT1 and INF1 blocks
sub_20B4000
export/plan0/arm9_main/sub_20B4000_020B4000.c
- docs/function_notes/agent_05.md:74 table getter: off_20B4008[a1]
sub_20B400C
export/plan0/arm9_main/sub_20B400C_020B400C.c
- docs/function_notes/agent_05.md:75 table getter: dword array [a1]
sub_20B4018
export/plan0/arm9_main/sub_20B4018_020B4018.c
- docs/function_notes/agent_05.md:76 table getter: dword array [a1]
sub_20B4024
export/plan0/arm9_main/sub_20B4024_020B4024.c
- docs/function_notes/agent_05.md:77 table getter: dword array [a1]
sub_20B4030
export/plan0/arm9_main/sub_20B4030_020B4030.c
- docs/function_notes/agent_05.md:78 table getter: dword array [a1]
sub_20B403C
export/plan0/arm9_main/sub_20B403C_020B403C.c
- docs/function_notes/agent_05.md:79 table getter: array [a1]
sub_20B4048
export/plan0/arm9_main/sub_20B4048_020B4048.c
- docs/function_notes/agent_05.md:80 zeroes the loaded-resource pointer tables (3 fonts, plus 5 parallel player-graphic tables)
sub_20B409C
export/plan0/arm9_main/sub_20B409C_020B409C.c
- docs/function_notes/agent_05.md:81 loads fonts LC_Font_s/LC_Font_m/marioFont.NFTR and player_character_M/L (NCLR, NCGR, NCER, bncl) resources for the menu
sub_20B41D4
export/plan0/arm9_main/sub_20B41D4_020B41D4.c
- docs/function_notes/agent_05.md:82 getter: field +0x68 of 112-byte record a1 (resource-loaded flag)
sub_20B41E8
export/plan0/arm9_main/sub_20B41E8_020B41E8.c
- docs/function_notes/agent_05.md:83 uncertain: draws the current player's character portrait/cell (NCER) from the loaded tables, character id 12 is special
sub_20B4428
export/plan0/arm9_main/sub_20B4428_020B4428.c
- docs/function_notes/agent_05.md:84 tile map rect fill: sets tile index (low 10 bits) over a w x h area of 32-wide screen map
sub_20B44A4
export/plan0/arm9_main/sub_20B44A4_020B44A4.c
- docs/function_notes/agent_05.md:85 tile map rect fill: sets palette number (bits 12-15) over a w x h area of 32-wide screen map
sub_20B4520
export/plan0/arm9_main/sub_20B4520_020B4520.c
- docs/function_notes/agent_05.md:86 copies a rect of 16-bit screen-map entries between two 32-wide maps
sub_20B45B0
export/plan0/arm9_main/sub_20B45B0_020B45B0.c
- docs/function_notes/agent_05.md:87 copies a rect of tiles between maps with 90-degree rotation/transposition
sub_20B46D0
export/plan0/arm9_main/sub_20B46D0_020B46D0.c
- docs/function_notes/agent_05.md:88 loops over a rect calling sub_214CFFC per cell (per-tile conversion/clear)
sub_20B47B4
export/plan0/arm9_main/sub_20B47B4_020B47B4.c
- docs/function_notes/agent_05.md:89 thunk to function pointer (resource loader hook)
sub_20B47C0
export/plan0/arm9_main/sub_20B47C0_020B47C0.c
- docs/function_notes/agent_05.md:90 thunk to function pointer
sub_20B47CC
export/plan0/arm9_main/sub_20B47CC_020B47CC.c
- docs/function_notes/agent_05.md:91 thunk to function pointer (BMG message-file loader)
sub_20B47D8
export/plan0/arm9_main/sub_20B47D8_020B47D8.c
- docs/function_notes/agent_05.md:92 NNS: finds NSCR screen block in file a2 and stores pointer in a1
sub_20B4810
export/plan0/arm9_main/sub_20B4810_020B4810.c
- docs/function_notes/agent_05.md:93 NNS: loads NSCR screen data, finds block, applies sub_2021F9C and registers
sub_20B486C
export/plan0/arm9_main/sub_20B486C_020B486C.c
- docs/function_notes/agent_05.md:94 NNS: finds NANR animation bank block in file a2, inits via sub_2021DC8
sub_20B48B4
export/plan0/arm9_main/sub_20B48B4_020B48B4.c
- docs/function_notes/agent_05.md:95 NNS: finds a block in file a2 and stores pointer in a1 (NCLR/NCER family)
sub_20B48EC
export/plan0/arm9_main/sub_20B48EC_020B48EC.c
- docs/function_notes/agent_05.md:96 NNS: finds NCER cell bank block in file a2 and inits via sub_2021E8C
sub_20B4934
export/plan0/arm9_main/sub_20B4934_020B4934.c
- docs/function_notes/agent_05.md:97 NNS: finds a block in file a2 and stores pointer in a1
sub_20B496C
export/plan0/arm9_main/sub_20B496C_020B496C.c
- docs/function_notes/agent_05.md:98 NNS: loads NCGR character data block into VRAM-ready form (sub_2021F6C then sub_200EE74 copy)
sub_20B49BC
export/plan0/arm9_main/sub_20B49BC_020B49BC.c
- docs/function_notes/agent_05.md:99 NNS: finds a block in file a2 and stores pointer in a1
sub_20B49F4
export/plan0/arm9_main/sub_20B49F4_020B49F4.c
- docs/function_notes/agent_05.md:100 NNS: loads NCGR character block (variant) via sub_2021F7C
sub_20B4A44
export/plan0/arm9_main/sub_20B4A44_020B4A44.c
- docs/function_notes/agent_05.md:101 NNS: finds a block in file a2 and stores pointer in a1
sub_20B4A7C
export/plan0/arm9_main/sub_20B4A7C_020B4A7C.c
- docs/function_notes/agent_05.md:102 NNS: loads NCLR palette (PLTT block) via sub_2021F8C
sub_20B4ACC
export/plan0/arm9_main/sub_20B4ACC_020B4ACC.c
- docs/function_notes/agent_05.md:103 state switch: returns 1 if state +4 is 0, 0 for states 1-5
sub_20B4B10
export/plan0/arm9_main/sub_20B4B10_020B4B10.c
- docs/function_notes/agent_05.md:104 state switch: returns 1 if state +4 is 0, -1 for states 1-5
sub_20B4B54
export/plan0/arm9_main/sub_20B4B54_020B4B54.c
- docs/function_notes/agent_05.md:105 state switch: returns 1 if state +4 is 0, 0 for states 1-5
sub_20B4B98
export/plan0/arm9_main/sub_20B4B98_020B4B98.c
- docs/function_notes/agent_05.md:108 state switch: for state +4==2 returns a1>=2, otherwise a1!=1
sub_20B4BF8
export/plan0/arm9_main/sub_20B4BF8_020B4BF8.c
- docs/function_notes/agent_05.md:109 builds 2x2 rotation matrix from sin/cos table at angle a3 (>>4), scaled by 1/a2 (FX_Div), fx 20.12
sub_20B4C74
export/plan0/arm9_main/sub_20B4C74_020B4C74.c
- docs/function_notes/agent_05.md:110 builds 2x2 rotation matrix (-cos? form) from angle a2 via sin/cos table, no scaling
sub_20B4CB0
export/plan0/arm9_main/sub_20B4CB0_020B4CB0.c
- docs/function_notes/agent_05.md:111 builds 2x2 rotation matrix (transposed variant) from angle a2 via sin/cos table
sub_20B4CEC
export/plan0/arm9_main/sub_20B4CEC_020B4CEC.c
- docs/function_notes/agent_05.md:112 builds diagonal scale matrix with 1/a2 (4096 if a2 is 0)
sub_20B4D2C
export/plan0/arm9_main/sub_20B4D2C_020B4D2C.c
- docs/function_notes/agent_05.md:113 uncertain: count/rank value (sub_203C8C0) for the viewed player, minus 1 if sub_203C880 is false
sub_20B4D9C
export/plan0/arm9_main/sub_20B4D9C_020B4D9C.c
- docs/function_notes/agent_05.md:114 viewed player index: byte +0x63 if state +0xC==1 else signed byte +0x62
sub_20B4DC4
export/plan0/arm9_main/sub_20B4DC4_020B4DC4.c
- docs/function_notes/agent_05.md:115 uncertain: returns 1 if sub_20B4DF8()==1 and a1 set, else sub_207A68C(a1)
sub_20B4DF8
export/plan0/arm9_main/sub_20B4DF8_020B4DF8.c
- docs/function_notes/agent_05.md:116 getter: state +0x8 (game mode)
sub_20B4E0C
export/plan0/arm9_main/sub_20B4E0C_020B4E0C.c
- docs/function_notes/agent_05.md:117 returns 1 (out of map bounds) for courses 17/19 using the viewed kart position, else 1 by default
sub_20B4E5C
export/plan0/arm9_main/sub_20B4E5C_020B4E5C.c
- docs/function_notes/agent_05.md:118 getter: current course id (first dword of course global)
sub_20B4E70
export/plan0/arm9_main/sub_20B4E70_020B4E70.c
- docs/function_notes/agent_05.md:119 bounds test of a position vector against per-course limits for course 17 and 19; returns nonzero if outside
sub_20B4F64
export/plan0/arm9_main/sub_20B4F64_020B4F64.c
- docs/function_notes/agent_05.md:120 lerps position vector a2 to a3 by fraction (sub_20C0D9C based) into a1
sub_20B502C
export/plan0/arm9_main/sub_20B502C_020B502C.c
- docs/function_notes/agent_05.md:121 fx multiply: (a*b)>>12 (64-bit)
sub_20B503C
export/plan0/arm9_main/sub_20B503C_020B503C.c
- docs/function_notes/agent_05.md:122 per-frame map scroll/zoom update: derives scroll vector and angle from the viewed kart, rotates by sin/cos tables
sub_20B523C
export/plan0/arm9_main/sub_20B523C_020B523C.c
- docs/function_notes/agent_05.md:123 getter: signed byte +0x57 (map rotates with kart flag)
sub_20B5250
export/plan0/arm9_main/sub_20B5250_020B5250.c
- docs/function_notes/agent_05.md:124 converts fx 20.12 to integer (>>12)
sub_20B5258
export/plan0/arm9_main/sub_20B5258_020B5258.c
- docs/function_notes/agent_05.md:125 sin table lookup: table[2*(angle>>4)]
sub_20B5270
export/plan0/arm9_main/sub_20B5270_020B5270.c
- docs/function_notes/agent_05.md:126 cos table lookup: table[2*(angle>>4)+1]
sub_20B5290
export/plan0/arm9_main/sub_20B5290_020B5290.c
- docs/function_notes/agent_05.md:127 map zoom/scroll controller: reads key bits (32, 16) to adjust zoom (+0x90 clamp) and scroll for the viewed kart
sub_20B5628
export/plan0/arm9_main/sub_20B5628_020B5628.c
- docs/function_notes/agent_05.md:128 calls function pointer on 92-byte table entry a1 (same pattern as sub_20B2B24)
sub_20B5658
export/plan0/arm9_main/sub_20B5658_020B5658.c
- docs/function_notes/agent_05.md:129 converts viewed kart position to map-space coordinates using stored map scale/offset
sub_20B57B4
export/plan0/arm9_main/sub_20B57B4_020B57B4.c
- docs/function_notes/agent_05.md:130 32x64-bit multiply with rounding, returns high word (a1 * (a3:a2)) >> 32
sub_20B57E4
export/plan0/arm9_main/sub_20B57E4_020B57E4.c
- docs/function_notes/agent_05.md:131 getter: state +0x2C
sub_20B57F8
export/plan0/arm9_main/sub_20B57F8_020B57F8.c
- docs/function_notes/agent_05.md:132 map-space position of viewed kart (variant for mode 3 using sub_20B57E4)
sub_20B58F8
export/plan0/arm9_main/sub_20B58F8_020B58F8.c
- docs/function_notes/agent_05.md:133 map-space position of a point/kart with scale, handles mode 3
sub_20B5AE8
export/plan0/arm9_main/sub_20B5AE8_020B5AE8.c
- docs/function_notes/agent_05.md:134 world position to map pixel position with scale and rotation (matrix multiply)
sub_20B5DCC
export/plan0/arm9_main/sub_20B5DCC_020B5DCC.c
- docs/function_notes/agent_05.md:135 map pixel position for kart a1 (via sub_207A948) with rotation
sub_20B5F68
export/plan0/arm9_main/sub_20B5F68_020B5F68.c
- docs/function_notes/agent_05.md:136 box overlap test: is point (+0x10,+0x14) within radius +0x18 of a1's x/z
sub_20B5FE4
export/plan0/arm9_main/sub_20B5FE4_020B5FE4.c
- docs/function_notes/agent_05.md:137 world (x,z) to integer map pixel coordinates (scaled by +0x5C..+0x68)
sub_20B6078
export/plan0/arm9_main/sub_20B6078_020B6078.c
- docs/function_notes/agent_05.md:138 world position of kart a1 to map coordinates with per-course special cases (courses 11, 20, 22)
sub_20B6338
export/plan0/arm9_main/sub_20B6338_020B6338.c
- docs/function_notes/agent_05.md:139 converts kart angle to map angle: 98304 - angle, 16-bit result
sub_20B6368
export/plan0/arm9_main/sub_20B6368_020B6368.c
- docs/function_notes/agent_05.md:140 map rotation angle: from the viewed target's direction (modes 1 and 3)
sub_20B6430
export/plan0/arm9_main/sub_20B6430_020B6430.c
- docs/function_notes/agent_05.md:141 course-id classifier: returns 1 for certain course ids (1, 34-48 range, 50)
sub_20B64E8
export/plan0/arm9_main/sub_20B64E8_020B64E8.c
- docs/function_notes/agent_05.md:142 course-id switch returning a flag (many course ids 1,11,14,16-20,23-27...)
sub_20B65DC
export/plan0/arm9_main/sub_20B65DC_020B65DC.c
- docs/function_notes/agent_05.md:143 clears map-state global pointer
sub_20B65F0
export/plan0/arm9_main/sub_20B65F0_020B65F0.c
- docs/function_notes/agent_05.md:144 allocates 156-byte map state block, zeroes it and loads per-course map rect
sub_20B6800
export/plan0/arm9_main/sub_20B6800_020B6800.c
- docs/function_notes/agent_05.md:145 returns heap handle (sub_20364E8 then sub_20364E0)
sub_20B681C
export/plan0/arm9_main/sub_20B681C_020B681C.c
- docs/function_notes/agent_05.md:146 sets map world rectangle (two corner points) per course id via sub_20B6B18
sub_20B6A18
export/plan0/arm9_main/sub_20B6A18_020B6A18.c
- docs/function_notes/agent_05.md:147 copies a 110-entry short table and returns the map corner points for a course
sub_20B6A98
export/plan0/arm9_main/sub_20B6A98_020B6A98.c
- docs/function_notes/agent_05.md:148 copies a 110-entry short table and returns the map corner points (second table)
sub_20B6B18
export/plan0/arm9_main/sub_20B6B18_020B6B18.c
- docs/function_notes/agent_05.md:149 stores two corner points (a3,a4) and (a5,a6) as fx 20.12 into a1 and a2
sub_20B6B54
export/plan0/arm9_main/sub_20B6B54_020B6B54.c
- docs/function_notes/agent_05.md:150 copies a 110-entry short table and returns the map corner points (third table)
sub_20B6BD4
export/plan0/arm9_main/sub_20B6BD4_020B6BD4.c
- docs/function_notes/agent_05.md:151 interpolates map corner coordinates between two rectangles with a scale constant
sub_20B6C74
export/plan0/arm9_main/sub_20B6C74_020B6C74.c
- docs/function_notes/agent_05.md:152 uncertain: fills an 11-halfword array describing a player entry (from sub_2056BC0 record)
sub_20B6D98
export/plan0/arm9_main/sub_20B6D98_020B6D98.c
- docs/function_notes/agent_05.md:153 draws the map: calls sub_20B80A8 then sub_20B6E00
sub_20B6DC4
export/plan0/arm9_main/sub_20B6DC4_020B6DC4.c
- docs/function_notes/agent_05.md:154 sub_212B090 then draws a character cell (sub_20B41E8 with 12)
sub_20B6E00
export/plan0/arm9_main/sub_20B6E00_020B6E00.c
- docs/function_notes/agent_05.md:155 builds the touch-screen map graphics: loads race_transfer_s_o.NCGR and race_transfer_map_s_o NCLR palettes, places player icons
sub_20B7A80
export/plan0/arm9_main/sub_20B7A80_020B7A80.c
- docs/function_notes/agent_05.md:156 builds the map graphics for mirror mode: race_transfer_map_mr_s_o NCGR/NCLR, per-course tile setup
sub_20B7EE8
export/plan0/arm9_main/sub_20B7EE8_020B7EE8.c
- docs/function_notes/agent_05.md:157 reads a player record (sub_2056BC0) and maps its state value to an icon style id (e.g. 7)
sub_20B7FD8
export/plan0/arm9_main/sub_20B7FD8_020B7FD8.c
- docs/function_notes/agent_05.md:160 reads player record +0x68 (character id) of 48-byte entry and maps it to two icon style ids (7, 8, ...) via a switch
sub_20B80A8
export/plan0/arm9_main/sub_20B80A8_020B80A8.c
- docs/function_notes/agent_05.md:161 draws the player icons for the map: per player draws icon cell sub_20ADFF0, highlights the viewed player
sub_20B8220
export/plan0/arm9_main/sub_20B8220_020B8220.c
- docs/function_notes/agent_05.md:162 switch mapping index a2 (0..) to an icon/cell id (27, 20, 34, 23, 17, ...)
sub_20B837C
export/plan0/arm9_main/sub_20B837C_020B837C.c
- docs/function_notes/agent_05.md:163 table getter: HUD resource table entry [a1] at +0x7D0 (2000)
sub_20B8394
export/plan0/arm9_main/sub_20B8394_020B8394.c
- docs/function_notes/agent_05.md:164 table getter: HUD resource table entry [a1] at +0x74C (1868)
sub_20B83AC
export/plan0/arm9_main/sub_20B83AC_020B83AC.c
- docs/function_notes/agent_05.md:165 table getter: HUD resource table entry [a1] at +0x6AC (1708)
sub_20B83C4
export/plan0/arm9_main/sub_20B83C4_020B83C4.c
- docs/function_notes/agent_05.md:166 table getter: HUD resource table entry [a1] at +0x5FC (1532)
sub_20B83DC
export/plan0/arm9_main/sub_20B83DC_020B83DC.c
- docs/function_notes/agent_05.md:167 table getter: HUD resource table entry [a1] at +0x2D8 (728) (character icon cell table)
sub_20B83F4
export/plan0/arm9_main/sub_20B83F4_020B83F4.c
- docs/function_notes/agent_05.md:168 table getter: HUD resource table entry [a1] at +0x2B8 (696)
sub_20B840C
export/plan0/arm9_main/sub_20B840C_020B840C.c
- docs/function_notes/agent_05.md:169 table getter: HUD resource table entry [a1] at +0x260 (608)
sub_20B8424
export/plan0/arm9_main/sub_20B8424_020B8424.c
- docs/function_notes/agent_05.md:170 table getter: HUD resource table entry [a1] at +0x22C (556)
sub_20B843C
export/plan0/arm9_main/sub_20B843C_020B843C.c
- docs/function_notes/agent_05.md:171 table getter: HUD resource table entry [a1] at +0x1F0 (496)
sub_20B8454
export/plan0/arm9_main/sub_20B8454_020B8454.c
- docs/function_notes/agent_05.md:172 table getter: HUD resource table entry [a1] at +0xE0 (224)
sub_20B846C
export/plan0/arm9_main/sub_20B846C_020B846C.c
- docs/function_notes/agent_05.md:173 switch mapping index a1 (0..) to an icon/cell id (18, 16, 23, 20, ...)
sub_20B85DC
export/plan0/arm9_main/sub_20B85DC_020B85DC.c
- docs/function_notes/agent_05.md:174 table getter: HUD resource table entry [a1] at +0
sub_20B85F0
export/plan0/arm9_main/sub_20B85F0_020B85F0.c
- docs/function_notes/agent_05.md:175 returns pointer to 16-byte table entry a1 in a global array
sub_20B8610
export/plan0/arm9_main/sub_20B8610_020B8610.c
- docs/function_notes/agent_05.md:176 clears HUD resource global pointer
sub_20B8624
export/plan0/arm9_main/sub_20B8624_020B8624.c
- docs/function_notes/agent_05.md:177 HUD init: allocates the HUD resource block and loads race_m_o / race_goal_m_o / race_battle_m_o / race_start_battle_m_o / mirror-mode NCLR+NCGR sets and message files
sub_20B9994
export/plan0/arm9_main/sub_20B9994_020B9994.c
- docs/function_notes/agent_05.md:178 draws a HUD text/number element into a character buffer using sub_20224E0 (NNS cell/text draw) with per-digit glyph tables
sub_20B9DFC
export/plan0/arm9_main/sub_20B9DFC_020B9DFC.c
- docs/function_notes/agent_05.md:179 draws the main per-mode HUD element (e.g. item/lap/position display), switch on game mode, uses sub_204A650 and glyph tables
sub_20BA3EC
export/plan0/arm9_main/sub_20BA3EC_020BA3EC.c
- docs/function_notes/agent_05.md:180 updates a HUD counter (u16, 0-8 wrapping) from per-player value sub_20A1154 or increment on event sub_20A2204
sub_20BA50C
export/plan0/arm9_main/sub_20BA50C_020BA50C.c
- docs/function_notes/agent_05.md:181 clears HUD state global pointer
sub_20BA520
export/plan0/arm9_main/sub_20BA520_020BA520.c
- docs/function_notes/agent_05.md:182 allocates 12-byte HUD state, initialises counters from sub_20A1154/sub_20A10D4 for the viewed player
sub_20BA620
export/plan0/arm9_main/sub_20BA620_020BA620.c
- docs/function_notes/agent_05.md:183 getter: +8 of HUD state if allocated, else 0
sub_20BA63C
export/plan0/arm9_main/sub_20BA63C_020BA63C.c
- docs/function_notes/agent_05.md:184 draws a HUD element (rank/lap style) choosing glyph set by player state, scaled via FX_Div
sub_20BAB54
export/plan0/arm9_main/sub_20BAB54_020BAB54.c
- game/src/sfx.rs:36 Item box smashed (
sub_20DEB2C), roulette spinning, item obtained (sub_20BAB54: - docs/function_notes/agent_05.md:185 uncertain: per-frame HUD animation state machine for the viewed player's kart status (uses 528-byte per-slot records, timer up to 214)
sub_20BB51C
export/plan0/arm9_main/sub_20BB51C_020BB51C.c
- docs/function_notes/agent_05.md:186 clears HUD state global pointer
sub_20BB530
export/plan0/arm9_main/sub_20BB530_020BB530.c
- docs/function_notes/agent_05.md:187 allocates 44-byte HUD effect state (initial scale 4096, ids 19)
sub_20BB5CC
export/plan0/arm9_main/sub_20BB5CC_020BB5CC.c
- docs/function_notes/agent_05.md:188 sub_212C6F0(sub_2108E88(), 0): releases/stops a sound-or-resource handle
sub_20BB5EC
export/plan0/arm9_main/sub_20BB5EC_020BB5EC.c
- docs/function_notes/agent_05.md:189 uncertain: draws an animated HUD element using two copied 8-word tables (positions) and scale
sub_20BBBB4
export/plan0/arm9_main/sub_20BBBB4_020BBBB4.c
- docs/function_notes/agent_05.md:190 uncertain: positions a 3D/2D HUD element at viewed player's location (sub_203C778/sub_203C7CC/sub_203C950 lookups, sub_20AE7C4 draw)
sub_20BC108
export/plan0/arm9_main/sub_20BC108_020BC108.c
- docs/function_notes/agent_05.md:191 clears HUD state global pointer
sub_20BC11C
export/plan0/arm9_main/sub_20BC11C_020BC11C.c
- docs/function_notes/agent_05.md:192 allocates 56-byte HUD state, zeroed; extra init for mode 2 flag 1
sub_20BC208
export/plan0/arm9_main/sub_20BC208_020BC208.c
- docs/function_notes/agent_05.md:193 uncertain: draws HUD element whose behaviour depends on mode 4 sub-mode byte (+0x2F values 2,4,6,10)
sub_20BC958
export/plan0/arm9_main/sub_20BC958_020BC958.c
- docs/function_notes/agent_05.md:194 uncertain: per-frame update for the same element depending on mode (2 or 4) and sub-mode byte
sub_20BCB60
export/plan0/arm9_main/sub_20BCB60_020BCB60.c
- docs/function_notes/agent_05.md:195 clears HUD state global pointer
sub_20BCB74
export/plan0/arm9_main/sub_20BCB74_020BCB74.c
- docs/function_notes/agent_05.md:196 allocates 20-byte HUD state with course/time count initialised
sub_20BCBE8
export/plan0/arm9_main/sub_20BCBE8_020BCBE8.c
- docs/function_notes/agent_05.md:197 draws the ranking list of player icons for one layout (loops over players in rank order, uses sub_20BE15C icon id, sub_20224E0 draw)
sub_20BD178
export/plan0/arm9_main/sub_20BD178_020BD178.c
- docs/function_notes/agent_05.md:198 draws the ranking list of player icons for a second layout (offset +69 instead of +18)
sub_20BD7F8
export/plan0/arm9_main/sub_20BD7F8_020BD7F8.c
- docs/function_notes/agent_05.md:199 dispatch on layout type: draws list background (sub_20BDF08) then sub_20BDB34 or sub_20BD850
sub_20BD850
export/plan0/arm9_main/sub_20BD850_020BD850.c
- docs/function_notes/agent_05.md:200 draws ranking list icons (variant used for layouts 1-3)
sub_20BDB34
export/plan0/arm9_main/sub_20BDB34_020BDB34.c
- docs/function_notes/agent_05.md:201 draws ranking list icons (variant used for layout 0)
sub_20BDF08
export/plan0/arm9_main/sub_20BDF08_020BDF08.c
- docs/function_notes/agent_05.md:202 draws the ranking list frame/background using a copied 16-word transform
sub_20BE15C
export/plan0/arm9_main/sub_20BE15C_020BE15C.c
- docs/function_notes/agent_05.md:203 returns HUD icon id for player a1 (37 / 36 special, 201 hidden, or from per-player table)
sub_20BE2F4
export/plan0/arm9_main/sub_20BE2F4_020BE2F4.c
- docs/function_notes/agent_05.md:204 per-frame ranking HUD update: after frame 360 stores rank and dispatches by game mode to the list draw functions
sub_20BE3E4
export/plan0/arm9_main/sub_20BE3E4_020BE3E4.c
- docs/function_notes/agent_05.md:205 uncertain: draws a HUD element using 16-word table copied on the stack (large layout routine)
sub_20BE7E8
export/plan0/arm9_main/sub_20BE7E8_020BE7E8.c
- docs/function_notes/agent_05.md:206 clears HUD state global pointer
sub_20BE7FC
export/plan0/arm9_main/sub_20BE7FC_020BE7FC.c
- docs/function_notes/agent_05.md:207 allocates 348-byte ranking HUD state and initialises per-player arrays
sub_20BE8E4
export/plan0/arm9_main/sub_20BE8E4_020BE8E4.c
- docs/function_notes/agent_05.md:208 sets per-player override entry a1 (flag, value a2, value a3) in the 12-byte array at +0xFC
sub_20BE930
export/plan0/arm9_main/sub_20BE930_020BE930.c
- docs/function_notes/agent_05.md:209 clears per-player override flag for player a1
sub_20BE950
export/plan0/arm9_main/sub_20BE950_020BE950.c
- docs/function_notes/agent_05.md:212 per-frame dispatch by layout (sub_20B1DBC): layout 0 calls sub_20C8DBC, layouts 1-3 loop over a list
sub_20BE9D4
export/plan0/arm9_main/sub_20BE9D4_020BE9D4.c
- docs/function_notes/agent_05.md:213 layout-dispatched timing helper: layout 0 calls sub_20C97C0, others compute a fixed-point value from player count (sub_20B1D50)
sub_20BEB40
export/plan0/arm9_main/sub_20BEB40_020BEB40.c
- docs/function_notes/agent_05.md:214 teardown: calls each registered cleanup function pointer in the list at +16, then clears the global pointer
sub_20BEB9C
export/plan0/arm9_main/sub_20BEB9C_020BEB9C.c
- docs/function_notes/agent_05.md:215 goal/results screen init: allocates 604-byte block and builds the list of per-section callbacks by game mode/layout (huge setup routine)
sub_20C06C4
export/plan0/arm9_main/sub_20C06C4_020C06C4.c
- docs/function_notes/agent_05.md:216 draws list entries (animation frame range u16 +12..+14) with optional rotation from sub_20B6368
sub_20C092C
export/plan0/arm9_main/sub_20C092C_020C092C.c
- docs/function_notes/agent_05.md:217 same as sub_20C06C4 for a different record layout (frame range test, optional rotation)
sub_20C0B84
export/plan0/arm9_main/sub_20C0B84_020C0B84.c
- docs/function_notes/agent_05.md:218 clears a list object's header fields (+0, +12, +16)
sub_20C0BA8
export/plan0/arm9_main/sub_20C0BA8_020C0BA8.c
- docs/function_notes/agent_05.md:219 allocates a list object (20 bytes) with a2 slots, an 8a2 buffer and an a220 array (sub_20AE730)
sub_20C0C2C
export/plan0/arm9_main/sub_20C0C2C_020C0C2C.c
- docs/function_notes/agent_05.md:220 uncertain: validates/looks up resource a2 (sub_21000D0, sub_2100138) and fills the list entry
sub_20C0D9C
export/plan0/arm9_main/sub_20C0D9C_020C0D9C.c
- docs/function_notes/agent_05.md:221 getter: state +0x8
sub_20C0DB0
export/plan0/arm9_main/sub_20C0DB0_020C0DB0.c
- docs/function_notes/agent_05.md:222 getter: state +0x4
sub_20C0DC4
export/plan0/arm9_main/sub_20C0DC4_020C0DC4.c
- docs/function_notes/agent_05.md:223 getter: u16 at first global dword
sub_20C0DD8
export/plan0/arm9_main/sub_20C0DD8_020C0DD8.c
- docs/function_notes/agent_05.md:224 computes goal-screen flag +0xB4: viewed player's lap/count (from 8-byte table at +324) >= required total (+984)
sub_20C0EE4
export/plan0/arm9_main/sub_20C0EE4_020C0EE4.c
- docs/function_notes/agent_05.md:225 goal screen: set next state handler (+172) and reset frame counter (+176)
sub_20C0F0C
export/plan0/arm9_main/sub_20C0F0C_020C0F0C.c
- docs/function_notes/agent_05.md:226 goal screen: calls sub_20C1060 then sets next state handler and resets counter
sub_20C0F48
export/plan0/arm9_main/sub_20C0F48_020C0F48.c
- docs/function_notes/agent_05.md:227 goal screen slide-in: 20-frame eased scroll (sub_20AE4C0, from 128) then switches handler
sub_20C0FD0
export/plan0/arm9_main/sub_20C0FD0_020C0FD0.c
- docs/function_notes/agent_05.md:228 goal screen slide-in: 20-frame eased scroll (to 256) then sub_20B1D90 and switches handler
sub_20C1060
export/plan0/arm9_main/sub_20C1060_020C1060.c
- docs/function_notes/agent_05.md:229 goal screen: builds per-player rank/ordering table (characters, team flags) for the results list
sub_20C13D0
export/plan0/arm9_main/sub_20C13D0_020C13D0.c
- docs/function_notes/agent_05.md:230 clears goal state +0xA4 flag
sub_20C13E8
export/plan0/arm9_main/sub_20C13E8_020C13E8.c
- docs/function_notes/agent_05.md:231 goal screen state: after 60 frames computes the viewed player's finish flag (+0xB4) then switches handler
sub_20C155C
export/plan0/arm9_main/sub_20C155C_020C155C.c
- docs/function_notes/agent_05.md:232 goal screen state: periodic (every N frames) steps through per-player reveal counter (+0xA8), switches handler when done
sub_20C1728
export/plan0/arm9_main/sub_20C1728_020C1728.c
- docs/function_notes/agent_05.md:233 goal screen state: after 45 frames rebuilds ordering, otherwise reveals players one at a time on a timer
sub_20C195C
export/plan0/arm9_main/sub_20C195C_020C195C.c
- docs/function_notes/agent_05.md:234 goal screen state: after 90 frames picks the next handler by mode, flag +0x58 or u16 +0x60 == 1
sub_20C1BC0
export/plan0/arm9_main/sub_20C1BC0_020C1BC0.c
- docs/function_notes/agent_05.md:235 goal screen state: periodic update of per-player points/score display, with team/character checks
sub_20C1DE4
export/plan0/arm9_main/sub_20C1DE4_020C1DE4.c
- docs/function_notes/agent_05.md:236 goal screen state: after 90 frames (or 45 with key bit 1) switches handler
sub_20C1E70
export/plan0/arm9_main/sub_20C1E70_020C1E70.c
- docs/function_notes/agent_05.md:237 goal screen slide-out: 20-frame eased scroll (to -256) then switches handler
sub_20C1EF8
export/plan0/arm9_main/sub_20C1EF8_020C1EF8.c
- docs/function_notes/agent_05.md:238 goal screen state: sets flag +0xA4 and picks next handler by mode 2 / flag +0x58 (starts end sequence)
sub_20C2118
export/plan0/arm9_main/sub_20C2118_020C2118.c
- docs/function_notes/agent_05.md:239 draw dispatch: layout 5 -> sub_20C214C else sub_20C28DC
sub_20C214C
export/plan0/arm9_main/sub_20C214C_020C214C.c
- docs/function_notes/agent_05.md:240 draws goal screen for layout 5 using two copied 2-word tables and player data
sub_20C2304
export/plan0/arm9_main/sub_20C2304_020C2304.c
- docs/function_notes/agent_05.md:241 draws a multi-digit number: splits a2 into decimal digits (/10, /100, /1000...) and emits digit glyphs
sub_20C2570
export/plan0/arm9_main/sub_20C2570_020C2570.c
- docs/function_notes/agent_05.md:242 draws a player's score/points number (digits split of value at +0x20+4*a2) with icon cell
sub_20C28DC
export/plan0/arm9_main/sub_20C28DC_020C28DC.c
- docs/function_notes/agent_05.md:243 draws the goal/results list (large): rank, character icon, name, points, using copied 8-word tables
sub_20C31C0
export/plan0/arm9_main/sub_20C31C0_020C31C0.c
- docs/function_notes/agent_05.md:244 calls current state handler (+172) and passes result to sub_20C3654
sub_20C31EC
export/plan0/arm9_main/sub_20C31EC_020C31EC.c
- docs/function_notes/agent_05.md:245 clears goal screen global pointer
sub_20C3200
export/plan0/arm9_main/sub_20C3200_020C3200.c
- docs/function_notes/agent_05.md:246 goal screen resource loader: allocates block, loads race_goal_s_b NCLR/NCGR and race_goal_s_bg / space1 / space2 / team_bg NSCR
sub_20C3B6C
export/plan0/arm9_main/sub_20C3B6C_020C3B6C.c
- docs/function_notes/agent_05.md:247 draws goal screen background using a 8-word transform copied from table and a1/a2
sub_20C3DA0
export/plan0/arm9_main/sub_20C3DA0_020C3DA0.c
- docs/function_notes/agent_05.md:248 getter: goal state +0xA4
sub_20C3DB4
export/plan0/arm9_main/sub_20C3DB4_020C3DB4.c
- docs/function_notes/agent_05.md:249 returns goal flag +0xB4 only in modes 2,3,5 with a nonzero field, else 0
sub_20C3E00
export/plan0/arm9_main/sub_20C3E00_020C3E00.c
- docs/function_notes/agent_05.md:250 getter: goal state +0xA0
sub_20C3E14
export/plan0/arm9_main/sub_20C3E14_020C3E14.c
- docs/function_notes/agent_05.md:251 table getter: goal state +0xC0+4*a1
sub_20C3E2C
export/plan0/arm9_main/sub_20C3E2C_020C3E2C.c
- docs/function_notes/agent_05.md:252 returns pointer to 8-byte entry a1 at +0xB8 of a global
sub_20C3E44
export/plan0/arm9_main/sub_20C3E44_020C3E44.c
- docs/function_notes/agent_05.md:253 goal/score screen per-frame logic for mode 1: computes fixed-point values from player count (sub_20B1D50, sub_2132440 etc.)
sub_20C43C4
export/plan0/arm9_main/sub_20C43C4_020C43C4.c
- docs/function_notes/agent_05.md:254 per-frame update of a per-player text/name overlay (toggles on key bit 4, scans 528-byte kart records)
sub_20C476C
export/plan0/arm9_main/sub_20C476C_020C476C.c
- docs/function_notes/agent_05.md:255 clears overlay global pointer
sub_20C4780
export/plan0/arm9_main/sub_20C4780_020C4780.c
- docs/function_notes/agent_05.md:256 allocates 2320-byte overlay state (per-player arrays, 40 entries of 24 bytes), mode 1 only
sub_20C4A04
export/plan0/arm9_main/sub_20C4A04_020C4A04.c
- docs/function_notes/agent_05.md:257 clears the 40 entries of 24 bytes for player a1 in mode 1
sub_20C4AB8
export/plan0/arm9_main/sub_20C4AB8_020C4AB8.c
- docs/function_notes/agent_05.md:258 clears a per-player flag (+4) for player a1 in mode 1
sub_20C4AE8
export/plan0/arm9_main/sub_20C4AE8_020C4AE8.c
- docs/function_notes/agent_05.md:259 draws one text/cell object (sub_20224E0) at a fixed position (0x80000, 0x60000) into the OAM buffer
sub_20C4BB0
export/plan0/arm9_main/sub_20C4BB0_020C4BB0.c
- docs/function_notes/agent_05.md:260 increments a frame counter and returns u16 global (display/power reg helper)
sub_20C4BD8
export/plan0/arm9_main/sub_20C4BD8_020C4BD8.c
- docs/function_notes/agent_05.md:261 clears global pointer
sub_20C4BEC
export/plan0/arm9_main/sub_20C4BEC_020C4BEC.c
- docs/function_notes/agent_05.md:262 race-start GP screen loader: allocates block, sets 128 OAM entries to priority/mode bits, loads race_start_gp_m_o NCLR/NCGR, race_start_gp_m NCER, common.bmg
sub_20C4E48
export/plan0/arm9_main/sub_20C4E48_020C4E48.c
- docs/function_notes/agent_05.md:263 clears and uploads OAM buffer (1024 bytes) and sets/clears an OBJ-enable bit in DISPCNT (0x04000000)
sub_20C4F08
export/plan0/arm9_main/sub_20C4F08_020C4F08.c
- docs/function_notes/agent_05.md:264 draws start-screen element (cell from table sub_20B8454/sub_20B85DC by mode 5 or not)
sub_20C525C
export/plan0/arm9_main/sub_20C525C_020C525C.c
- docs/function_notes/agent_05.md:265 start-screen resource refresh: reacquires sprite and palette handles (sub_21205E8, sub_212A8D0) when active
sub_20C53B0
export/plan0/arm9_main/sub_20C53B0_020C53B0.c
- docs/function_notes/agent_05.md:266 clears global pointer
sub_20C53C4
export/plan0/arm9_main/sub_20C53C4_020C53C4.c
- docs/function_notes/agent_05.md:269 allocates 20-byte overlay state and zeroes it
sub_20C541C
export/plan0/arm9_main/sub_20C541C_020C541C.c
- docs/function_notes/agent_05.md:270 draws an eased slide-in banner cell (sub_20AE4C0 ease, 20 frames) tied to counter/index at +0x14, with timing window checks
sub_20C55B0
export/plan0/arm9_main/sub_20C55B0_020C55B0.c
- docs/function_notes/agent_05.md:271 draws an eased slide-in cell at fixed x=98304 (sub_20B8454 cell table), position eased from 64 over 20 frames
sub_20C5804
export/plan0/arm9_main/sub_20C5804_020C5804.c
- docs/function_notes/agent_05.md:272 dispatch draw by mode (0 -> sub_20C55B0; 3,5 -> other variants)
sub_20C5940
export/plan0/arm9_main/sub_20C5940_020C5940.c
- docs/function_notes/agent_05.md:273 per-frame update of the race overlay state: counter at +4, branches by mode/viewed player and starting-sequence checks
sub_20C5CCC
export/plan0/arm9_main/sub_20C5CCC_020C5CCC.c
- docs/function_notes/agent_05.md:274 clears overlay global pointer
sub_20C5CE0
export/plan0/arm9_main/sub_20C5CE0_020C5CE0.c
- docs/function_notes/agent_05.md:275 allocates 28-byte overlay state (initial state 1)
sub_20C5DB0
export/plan0/arm9_main/sub_20C5DB0_020C5DB0.c
- docs/function_notes/agent_05.md:276 getter: state +0x4
sub_20C5DC4
export/plan0/arm9_main/sub_20C5DC4_020C5DC4.c
- docs/function_notes/agent_05.md:277 getter: first dword of overlay state
sub_20C5DD8
export/plan0/arm9_main/sub_20C5DD8_020C5DD8.c
- docs/function_notes/agent_05.md:278 clears overlay +0xDC (220) field
sub_20C5DF0
export/plan0/arm9_main/sub_20C5DF0_020C5DF0.c
- docs/function_notes/agent_05.md:279 overlay state: after 60 frames switches handler and resets counter
sub_20C5E30
export/plan0/arm9_main/sub_20C5E30_020C5E30.c
- docs/function_notes/agent_05.md:280 overlay slide-out: 20-frame eased value (to -256) stored at +0xE0 then switches handler
sub_20C5EB8
export/plan0/arm9_main/sub_20C5EB8_020C5EB8.c
- docs/function_notes/agent_05.md:281 overlay state: if sub_20B1A20() false calls sub_20B1D64, sets next handler, resets counter
sub_20C5F08
export/plan0/arm9_main/sub_20C5F08_020C5F08.c
- docs/function_notes/agent_05.md:282 overlay state: if no lap-time display active, clears +0x18 and sets next handler
sub_20C5F7C
export/plan0/arm9_main/sub_20C5F7C_020C5F7C.c
- docs/function_notes/agent_05.md:283 overlay state: waits for sub_20BA620/mode conditions then advances
sub_20C610C
export/plan0/arm9_main/sub_20C610C_020C610C.c
- docs/function_notes/agent_05.md:284 per-frame lap-time check: converts viewed player's time (sub_203C7CC) to ms and compares with 5 stored best-time entries
sub_20C6428
export/plan0/arm9_main/sub_20C6428_020C6428.c
- docs/function_notes/agent_05.md:285 updates best-lap record comparison for viewed player (time minutes*60000-style compare), returns 0 if not better
sub_20C657C
export/plan0/arm9_main/sub_20C657C_020C657C.c
- docs/function_notes/agent_05.md:286 finds insertion index of viewed player's time in the stored sorted time list (28-byte entries)
sub_20C676C
export/plan0/arm9_main/sub_20C676C_020C676C.c
- docs/function_notes/agent_05.md:287 draws a cell from table sub_20B8394(0) at x=(+0xE0 + 128), y=0xC000
sub_20C692C
export/plan0/arm9_main/sub_20C692C_020C692C.c
- docs/function_notes/agent_05.md:288 draws a time-record row (digit cells from 32-byte entries) at given position
sub_20C6ADC
export/plan0/arm9_main/sub_20C6ADC_020C6ADC.c
- docs/function_notes/agent_05.md:289 draws the lap-time display (minutes:seconds.ms digits) with copied 8-word position tables
sub_20C6F14
export/plan0/arm9_main/sub_20C6F14_020C6F14.c
- docs/function_notes/agent_05.md:290 per-frame call of the time-display callback in mode 1, advancing counter +0xE4 modulo 24
sub_20C6F84
export/plan0/arm9_main/sub_20C6F84_020C6F84.c
- docs/function_notes/agent_05.md:291 mode 1: clears time-display global pointer
sub_20C6FAC
export/plan0/arm9_main/sub_20C6FAC_020C6FAC.c
- docs/function_notes/agent_05.md:292 mode 1: allocates 232-byte time-display state and sets its handler
sub_20C70A0
export/plan0/arm9_main/sub_20C70A0_020C70A0.c
- docs/function_notes/agent_05.md:293 getter: overlay +0xDC if allocated else 0
sub_20C70BC
export/plan0/arm9_main/sub_20C70BC_020C70BC.c
- docs/function_notes/agent_05.md:294 getter: overlay +0x18 if allocated else 0
sub_20C70D8
export/plan0/arm9_main/sub_20C70D8_020C70D8.c
- docs/function_notes/agent_05.md:295 getter: u16 at +0x14 of overlay state
sub_20C70EC
export/plan0/arm9_main/sub_20C70EC_020C70EC.c
- vm_model/src/driver_presentation.rs:9 Not ported: time trials (win when a record is set,
sub_20C7148/sub_20C70EC, else lose), - docs/function_notes/agent_05.md:296 getter: overlay +0x10 if allocated else 0
sub_20C7108
export/plan0/arm9_main/sub_20C7108_020C7108.c
- docs/function_notes/agent_05.md:297 true if overlay allocated and +8 set and +0xC clear
sub_20C7148
export/plan0/arm9_main/sub_20C7148_020C7148.c
- vm_model/src/driver_presentation.rs:9 Not ported: time trials (win when a record is set,
sub_20C7148/sub_20C70EC, else lose), - docs/function_notes/agent_05.md:298 getter: overlay +0x8 if allocated else 0
sub_20C7164
export/plan0/arm9_main/sub_20C7164_020C7164.c
- docs/function_notes/agent_05.md:299 updates lap-time record list in mode 1 (compares viewed time to 5 stored times, 24-byte-wise)
sub_20C72F4
export/plan0/arm9_main/sub_20C72F4_020C72F4.c
- docs/function_notes/agent_05.md:300 calls helper (function pointer) with fixed arg: loads minimap marker list set 1
sub_20C7310
export/plan0/arm9_main/sub_20C7310_020C7310.c
- docs/function_notes/agent_05.md:301 minimap markers set 1: loops items, tests visibility (sub_20B5F68) and draws each (list +8 count, +12 array)
sub_20C7450
export/plan0/arm9_main/sub_20C7450_020C7450.c
- docs/function_notes/agent_05.md:302 calls function pointer with a constant (loads marker resource set)
sub_20C7464
export/plan0/arm9_main/sub_20C7464_020C7464.c
- docs/function_notes/agent_05.md:303 picks first available of two resource ids (sub_21000D0) and loads it
sub_20C7550
export/plan0/arm9_main/sub_20C7550_020C7550.c
- docs/function_notes/agent_05.md:304 calls helper (function pointer) with fixed arg: marker list set 2
sub_20C756C
export/plan0/arm9_main/sub_20C756C_020C756C.c
- docs/function_notes/agent_05.md:305 minimap markers set 2: loop over list entries with visibility test and draw
sub_20C767C
export/plan0/arm9_main/sub_20C767C_020C767C.c
- docs/function_notes/agent_05.md:306 calls function pointer with constant (marker resource)
sub_20C7690
export/plan0/arm9_main/sub_20C7690_020C7690.c
- docs/function_notes/agent_05.md:307 calls function pointer with two constants (marker resource)
sub_20C76AC
export/plan0/arm9_main/sub_20C76AC_020C76AC.c
- docs/function_notes/agent_05.md:308 calls helper (function pointer) with fixed arg: marker list set 3
sub_20C76C8
export/plan0/arm9_main/sub_20C76C8_020C76C8.c
- docs/function_notes/agent_05.md:309 minimap markers set 3: loop draws entries positioned by sub_20B5AE8
sub_20C778C
export/plan0/arm9_main/sub_20C778C_020C778C.c
- docs/function_notes/agent_05.md:310 calls function pointer with constant (marker resource)
sub_20C77A0
export/plan0/arm9_main/sub_20C77A0_020C77A0.c
- docs/function_notes/agent_05.md:311 picks first available of two resource ids and loads it into list (sub_20C0C2C)
sub_20C7820
export/plan0/arm9_main/sub_20C7820_020C7820.c
- docs/function_notes/agent_05.md:312 calls helper (function pointer) with fixed arg: marker list set 4
sub_20C783C
export/plan0/arm9_main/sub_20C783C_020C783C.c
- docs/function_notes/agent_05.md:313 minimap markers set 4: loop over entries with scale-aware draw
sub_20C79C0
export/plan0/arm9_main/sub_20C79C0_020C79C0.c
- docs/function_notes/agent_05.md:314 calls function pointer with constant (marker resource)
sub_20C79D4
export/plan0/arm9_main/sub_20C79D4_020C79D4.c
- docs/function_notes/agent_05.md:315 calls function pointer with two constants (marker resource)
sub_20C79F0
export/plan0/arm9_main/sub_20C79F0_020C79F0.c
- docs/function_notes/agent_05.md:316 calls helper (function pointer) with fixed arg: marker list set 5
sub_20C7A0C
export/plan0/arm9_main/sub_20C7A0C_020C7A0C.c
- docs/function_notes/agent_05.md:317 minimap markers set 5: loop over entries and draw
sub_20C7AF8
export/plan0/arm9_main/sub_20C7AF8_020C7AF8.c
- docs/function_notes/agent_05.md:318 calls function pointer with constant (marker resource)
sub_20C7B0C
export/plan0/arm9_main/sub_20C7B0C_020C7B0C.c
- docs/function_notes/agent_05.md:319 calls function pointer with two constants (marker resource)
sub_20C7B28
export/plan0/arm9_main/sub_20C7B28_020C7B28.c
- docs/function_notes/agent_05.md:320 calls helper (function pointer) with fixed arg: marker list set 6
sub_20C7B44
export/plan0/arm9_main/sub_20C7B44_020C7B44.c
- docs/function_notes/agent_05.md:321 minimap markers set 6: loop draws entries positioned by sub_20B5AE8
sub_20C7C08
export/plan0/arm9_main/sub_20C7C08_020C7C08.c
- docs/function_notes/agent_05.md:322 calls function pointer with constant (marker resource)
sub_20C7C1C
export/plan0/arm9_main/sub_20C7C1C_020C7C1C.c
- docs/function_notes/agent_05.md:323 calls function pointer with two constants (marker resource)
sub_20C7C38
export/plan0/arm9_main/sub_20C7C38_020C7C38.c
- docs/function_notes/agent_05.md:324 calls helper (function pointer) with fixed arg: marker list set 7
sub_20C7C54
export/plan0/arm9_main/sub_20C7C54_020C7C54.c
- docs/function_notes/agent_05.md:325 minimap markers set 7: loop over entries and draw
sub_20C7D40
export/plan0/arm9_main/sub_20C7D40_020C7D40.c
- docs/function_notes/agent_05.md:326 calls function pointer with constant (marker resource)
sub_20C7D54
export/plan0/arm9_main/sub_20C7D54_020C7D54.c
- docs/function_notes/agent_05.md:327 calls function pointer with two constants (marker resource)
sub_20C7D70
export/plan0/arm9_main/sub_20C7D70_020C7D70.c
- docs/function_notes/agent_05.md:328 calls helper (function pointer) with fixed arg: marker list set 8
sub_20C7D8C
export/plan0/arm9_main/sub_20C7D8C_020C7D8C.c
- docs/function_notes/agent_05.md:331 minimap markers set 8: loop over list entries, visibility test, draw each with scale
sub_20C7F70
export/plan0/arm9_main/sub_20C7F70_020C7F70.c
- docs/function_notes/agent_05.md:332 calls function pointer with constant (marker resource)
sub_20C7F84
export/plan0/arm9_main/sub_20C7F84_020C7F84.c
- docs/function_notes/agent_05.md:333 calls function pointer with two constants (marker resource)
sub_20C7FA0
export/plan0/arm9_main/sub_20C7FA0_020C7FA0.c
- docs/function_notes/agent_05.md:334 calls helper (function pointer) with fixed arg: marker list set 9
sub_20C7FBC
export/plan0/arm9_main/sub_20C7FBC_020C7FBC.c
- docs/function_notes/agent_05.md:335 minimap markers set 9: loop over entries and draw
sub_20C8084
export/plan0/arm9_main/sub_20C8084_020C8084.c
- docs/function_notes/agent_05.md:336 calls function pointer with constant (marker resource)
sub_20C8098
export/plan0/arm9_main/sub_20C8098_020C8098.c
- docs/function_notes/agent_05.md:337 calls function pointer with constant 202 (marker resource id)
sub_20C80B0
export/plan0/arm9_main/sub_20C80B0_020C80B0.c
- docs/function_notes/agent_05.md:338 calls helper (function pointer) with fixed arg and flag 1: marker list set 10
sub_20C80CC
export/plan0/arm9_main/sub_20C80CC_020C80CC.c
- docs/function_notes/agent_05.md:339 minimap markers set 10: loop over entries and draw
sub_20C8240
export/plan0/arm9_main/sub_20C8240_020C8240.c
- docs/function_notes/agent_05.md:340 calls function pointer with constant (marker resource)
sub_20C8254
export/plan0/arm9_main/sub_20C8254_020C8254.c
- docs/function_notes/agent_05.md:341 picks first available of three resource ids (sub_21000D0) and loads it (sub_20C0C2C)
sub_20C82DC
export/plan0/arm9_main/sub_20C82DC_020C82DC.c
- docs/function_notes/agent_05.md:342 draws the minimap in full: kart markers rotated by map angle (sub_20B4CB0 matrix), per player sprites, large routine
sub_20C8BDC
export/plan0/arm9_main/sub_20C8BDC_020C8BDC.c
- docs/function_notes/agent_05.md:343 minimap: draws item/object marker list entries using 64-bit scaled positions
sub_20C8D1C
export/plan0/arm9_main/sub_20C8D1C_020C8D1C.c
- docs/function_notes/agent_05.md:344 clears a global pointer
sub_20C8D30
export/plan0/arm9_main/sub_20C8D30_020C8D30.c
- docs/function_notes/agent_05.md:345 loads resource id 205 and allocates a 68-byte minimap resource record
sub_20C8DBC
export/plan0/arm9_main/sub_20C8DBC_020C8DBC.c
- docs/function_notes/agent_05.md:346 draws per-player ranking row elements (loop over players, layout switch via sub_20B1DBC)
sub_20C97C0
export/plan0/arm9_main/sub_20C97C0_020C97C0.c
- docs/function_notes/agent_05.md:347 initialises the per-player ordering arrays (index table at +304, sorting keys via sub_203C8DC) for the ranking list
sub_20C9F84
export/plan0/arm9_main/sub_20C9F84_020C9F84.c
- docs/function_notes/agent_05.md:348 frees list (sub_20C0B84 at +400) and clears the global pointer
sub_20C9FB8
export/plan0/arm9_main/sub_20C9FB8_020C9FB8.c
- docs/function_notes/agent_05.md:349 allocates 404-byte ranking list state with a 24-entry list at +400 and zeroes arrays
sub_20CA058
export/plan0/arm9_main/sub_20CA058_020CA058.c
- docs/function_notes/agent_05.md:350 calls helper (function pointer) with fixed arg: ranking list draw setup
sub_20CA074
export/plan0/arm9_main/sub_20CA074_020CA074.c
- docs/function_notes/agent_05.md:351 draws ranking-list entries (68-byte resource records indexed by rank) with copied 8-word table
sub_20CA3D0
export/plan0/arm9_main/sub_20CA3D0_020CA3D0.c
- docs/function_notes/agent_05.md:352 calls function pointer with constant (resource)
sub_20CA3E4
export/plan0/arm9_main/sub_20CA3E4_020CA3E4.c
- docs/function_notes/agent_05.md:353 sums counts of 10 resource groups (168-byte records) then allocates a list of that size
sub_20CA438
export/plan0/arm9_main/sub_20CA438_020CA438.c
- docs/function_notes/agent_05.md:354 calls helper (function pointer) with fixed arg
sub_20CA454
export/plan0/arm9_main/sub_20CA454_020CA454.c
- docs/function_notes/agent_05.md:355 loops list entries and draws each (ranking list variant)
sub_20CA520
export/plan0/arm9_main/sub_20CA520_020CA520.c
- docs/function_notes/agent_05.md:356 calls function pointer with constant (resource)
sub_20CA534
export/plan0/arm9_main/sub_20CA534_020CA534.c
- docs/function_notes/agent_05.md:357 calls function pointer with constant 428 (resource id)
sub_20CA54C
export/plan0/arm9_main/sub_20CA54C_020CA54C.c
- docs/function_notes/agent_05.md:358 calls helper (function pointer) with fixed arg
sub_20CA568
export/plan0/arm9_main/sub_20CA568_020CA568.c
- docs/function_notes/agent_05.md:359 loops list entries and processes each (list update)
sub_20CA65C
export/plan0/arm9_main/sub_20CA65C_020CA65C.c
- docs/function_notes/agent_05.md:360 calls function pointer with constant (resource)
sub_20CA670
export/plan0/arm9_main/sub_20CA670_020CA670.c
- docs/function_notes/agent_05.md:361 calls function pointer with constant 106 (resource id)
sub_20CA688
(not in export)
- docs/function_notes/agent_05.md:362 stores a1 into a global then tail-calls sub_20CAC9C (choice menu reset)
sub_20CA698
export/plan0/arm9_main/sub_20CA698_020CA698.c
- docs/function_notes/agent_05.md:363 getter: choice menu state +0x1C
sub_20CA6A8
export/plan0/arm9_main/sub_20CA6A8_020CA6A8.c
- docs/function_notes/agent_05.md:364 sets choice menu state +8 = 1
sub_20CA6B8
export/plan0/arm9_main/sub_20CA6B8_020CA6B8.c
- docs/function_notes/agent_05.md:365 clears choice-menu global pointer
sub_20CA6C4
export/plan0/arm9_main/sub_20CA6C4_020CA6C4.c
- docs/function_notes/agent_05.md:366 choice menu init: allocates 108-byte state, loads choises_s_b NCLR/NCGR, choises_s_3 NSCR and emblem.bmg
sub_20CA7E0
export/plan0/arm9_main/sub_20CA7E0_020CA7E0.c
- docs/function_notes/agent_05.md:367 wrapper of sub_2024340 (passes 6 args through)
sub_20CA808
export/plan0/arm9_main/sub_20CA808_020CA808.c
- docs/function_notes/agent_05.md:368 stores four values (a2..a5) into a 4-word struct
sub_20CA820
export/plan0/arm9_main/sub_20CA820_020CA820.c
- docs/function_notes/agent_05.md:369 returns heap handle (sub_20364E8 then sub_20364E0)
sub_20CA83C
(not in export)
- docs/function_notes/agent_05.md:370 thunk: branches to sub_20CAB8C (draw choice menu)
sub_20CA844
(not in export)
- docs/function_notes/agent_05.md:371 choice menu per-frame update: frame counter wrap at 50, input handling, opens menu via sub_20CACC0 (clone of sub_20B2574 logic)
sub_20CA984
export/plan0/arm9_main/sub_20CA984_020CA984.c
- docs/function_notes/agent_05.md:372 calls function pointer with (a1, 0)
sub_20CA9AC
export/plan0/arm9_main/sub_20CA9AC_020CA9AC.c
- docs/function_notes/agent_05.md:373 calls function pointer on 92-byte table entry a1 (record handler, as sub_20B2B24)
sub_20CA9DC
export/plan0/arm9_main/sub_20CA9DC_020CA9DC.c
- docs/function_notes/agent_05.md:374 returns constant 8
sub_20CA9E4
export/plan0/arm9_main/sub_20CA9E4_020CA9E4.c
- docs/function_notes/agent_05.md:375 choice menu teardown: DMA-copies tilemap/palette data (sub_214C0F8, sub_214BA94, sub_214BDD4) back and resets fade/brightness
sub_20CAAAC
export/plan0/arm9_main/sub_20CAAAC_020CAAAC.c
- docs/function_notes/agent_05.md:376 wrapper of sub_214A40C with a fixed dword arg (engine B graphics call)
sub_20CAAE8
export/plan0/arm9_main/sub_20CAAE8_020CAAE8.c
- docs/function_notes/agent_05.md:377 wrapper of sub_214A390 with a fixed dword arg (engine B graphics call)
sub_20CAB2C
export/plan0/arm9_main/sub_20CAB2C_020CAB2C.c
- docs/function_notes/agent_05.md:378 writes a 32-bit display register: (a1 & mask) | (a2<<16 & mask2)
sub_20CAB58
export/plan0/arm9_main/sub_20CAB58_020CAB58.c
- docs/function_notes/agent_05.md:379 sets the 5-bit field in bits 8-12 of a display register (screen/BG enable bits) to a1
sub_20CAB74
export/plan0/arm9_main/sub_20CAB74_020CAB74.c
- docs/function_notes/agent_05.md:380 reads bits 8-12 of a display register (BG/OBJ enable bits)
sub_20CAB8C
export/plan0/arm9_main/sub_20CAB8C_020CAB8C.c
- docs/function_notes/agent_05.md:381 choice menu redraw: clears (sub_20CAC18), picks selection (sub_20CADAC) then highlights (sub_20CABA4)
sub_20CABA4
export/plan0/arm9_main/sub_20CABA4_020CABA4.c
- docs/function_notes/agent_05.md:382 draws selected-item highlight tiles for the choice menu (clone of sub_20B2C80)
sub_20CAC18
export/plan0/arm9_main/sub_20CAC18_020CAC18.c
- docs/function_notes/agent_05.md:383 clears choice menu tile area (clone of sub_20B2DA4)
sub_20CAC68
export/plan0/arm9_main/sub_20CAC68_020CAC68.c
- docs/function_notes/agent_05.md:384 fills two tile rows with tiles 4 and 36 (clone of sub_20B2E00)
sub_20CAC9C
export/plan0/arm9_main/sub_20CAC9C_020CAC9C.c
- docs/function_notes/agent_05.md:385 resets choice-menu state (selection -1, counters 0)
sub_20CACC0
export/plan0/arm9_main/sub_20CACC0_020CACC0.c
- docs/function_notes/agent_05.md:386 builds touch rectangles for choice menu items (clone of sub_20B302C)
sub_20CADAC
export/plan0/arm9_main/sub_20CADAC_020CADAC.c
- docs/function_notes/agent_05.md:387 moves choice-menu selection by a1 (wrapping, plays sound sub_2105AC0) and returns old index (clone of sub_20B3120)
sub_20CADE8
export/plan0/arm9_main/sub_20CADE8_020CADE8.c
- docs/function_notes/agent_05.md:388 returns address of a global array
sub_20CADF4
export/plan0/arm9_main/sub_20CADF4_020CADF4.c
- docs/function_notes/agent_05.md:389 sets u16 +4 of record to 6 (and flag 1) if sub_20CAE54 and sub_20CAE38 true, else to 2
sub_20CAE24
export/plan0/arm9_main/sub_20CAE24_020CAE24.c
- docs/function_notes/agent_05.md:390 setter: choice menu state +0x74 = value
sub_20CAE38
export/plan0/arm9_main/sub_20CAE38_020CAE38.c
- docs/function_notes/agent_05.md:393 getter: bit 2 of choice-menu state +0x1C, sign-extended (flag)
sub_20CAE54
export/plan0/arm9_main/sub_20CAE54_020CAE54.c
- docs/function_notes/agent_05.md:394 getter: choice menu state +0x20
sub_20CAE6C
export/plan0/arm9_main/sub_20CAE6C_020CAE6C.c
- docs/function_notes/agent_05.md:396 sets u16 +4 of record to 13 if record non-null
sub_20CAE7C
export/plan0/arm9_main/sub_20CAE7C_020CAE7C.c
- docs/function_notes/agent_05.md:398 sets u16 +4 of record to 0 if record non-null
sub_20CAE8C
export/plan0/arm9_main/sub_20CAE8C_020CAE8C.c
- docs/function_notes/agent_05.md:400 copies an 11-word table (message ids) to stack and picks a message by mode; draws it
sub_20CAF00
export/plan0/arm9_main/sub_20CAF00_020CAF00.c
- docs/function_notes/agent_05.md:401 thunk to function pointer
sub_20CAF08
export/plan0/arm9_main/sub_20CAF08_020CAF08.c
- docs/function_notes/agent_05.md:402 choice screen layout A: sets sprite scroll values (-40) and 15 sprite-entry x positions (240) when option count >= 10
sub_20CAF90
export/plan0/arm9_main/sub_20CAF90_020CAF90.c
- docs/function_notes/agent_05.md:403 thunk to function pointer
sub_20CAF98
export/plan0/arm9_main/sub_20CAF98_020CAF98.c
- docs/function_notes/agent_05.md:404 choice screen input handler: tests touch buttons (sub_20CB1F4 ids 1,2,...), sets choice and plays sounds, then redraws
sub_20CB0CC
export/plan0/arm9_main/sub_20CB0CC_020CB0CC.c
- docs/function_notes/agent_05.md:405 calls function pointer on 92-byte button table entry a1+72 (button visual 1)
sub_20CB0F4
export/plan0/arm9_main/sub_20CB0F4_020CB0F4.c
- docs/function_notes/agent_05.md:406 calls function pointer on 92-byte button table entry a1+72 (button visual 2)
sub_20CB11C
export/plan0/arm9_main/sub_20CB11C_020CB11C.c
- docs/function_notes/agent_05.md:407 calls function pointer on 92-byte button table entry a1+72 (button visual 3)
sub_20CB170
export/plan0/arm9_main/sub_20CB170_020CB170.c
- docs/function_notes/agent_05.md:408 true if record u16 +0xC is 0 and u16 +4 non-zero (button pressed/active)
sub_20CB194
export/plan0/arm9_main/sub_20CB194_020CB194.c
- docs/function_notes/agent_05.md:409 true if u16 +4 is zero and u16 +0x10 < 5
sub_20CB1C4
export/plan0/arm9_main/sub_20CB1C4_020CB1C4.c
- docs/function_notes/agent_05.md:410 getter: record u16 +4
sub_20CB1CC
export/plan0/arm9_main/sub_20CB1CC_020CB1CC.c
- docs/function_notes/agent_05.md:411 calls function pointer with (a1, 0)
sub_20CB1F4
export/plan0/arm9_main/sub_20CB1F4_020CB1F4.c
- docs/function_notes/agent_05.md:412 calls function pointer on 92-byte button table entry a1 (button state query)
sub_20CB224
export/plan0/arm9_main/sub_20CB224_020CB224.c
- docs/function_notes/agent_05.md:413 returns constant 8
sub_20CB234
export/plan0/arm9_main/sub_20CB234_020CB234.c
- docs/function_notes/agent_05.md:414 choice screen layout B: hides sprites/clears 15 entries when option count >= 10, resets state
sub_20CB2CC
export/plan0/arm9_main/sub_20CB2CC_020CB2CC.c
- docs/function_notes/agent_05.md:415 thunk to function pointer
sub_20CB2D4
export/plan0/arm9_main/sub_20CB2D4_020CB2D4.c
- docs/function_notes/agent_05.md:416 choice screen: redraws via sub_20CB340 and issues two sub_2124C30 calls (sprite/OAM updates)
sub_20CB340
export/plan0/arm9_main/sub_20CB340_020CB340.c
- docs/function_notes/agent_05.md:417 sets sprite visibility flags for 15 choice entries (first 10 on, next 5 off, adjusted by sub_20CCCA8 mode)
sub_20CB3E4
export/plan0/arm9_main/sub_20CB3E4_020CB3E4.c
- docs/function_notes/agent_05.md:418 choice screen close: sets BG enable (24), copies palette/tilemap (sub_214C090/sub_214BF04) to VRAM
sub_20CB48C
export/plan0/arm9_main/sub_20CB48C_020CB48C.c
- docs/function_notes/agent_05.md:419 sets bits 8-12 (layer enable) of engine B display control
sub_20CB4A8
export/plan0/arm9_main/sub_20CB4A8_020CB4A8.c
- docs/function_notes/agent_05.md:420 sets bits 8-12 (layer enable) of engine A display control (0x04000000)
sub_20CB4C0
export/plan0/arm9_main/sub_20CB4C0_020CB4C0.c
- docs/function_notes/agent_05.md:421 calls sub_20AE630 on UI buffers unless sub_2049B6C() or specific choice mode state
sub_20CB51C
export/plan0/arm9_main/sub_20CB51C_020CB51C.c
- docs/function_notes/agent_05.md:422 advances choice screen sub-state when sub_20546D8/sub_2054754 report ready (flags at big offsets)
sub_20CB600
export/plan0/arm9_main/sub_20CB600_020CB600.c
- docs/function_notes/agent_05.md:423 saturating increment of *a1 (stops at 0x7FFFFFFF)
sub_20CB618
export/plan0/arm9_main/sub_20CB618_020CB618.c
- docs/function_notes/agent_05.md:424 screen loader: switch on screen id (4..0x19) calls the per-screen overlay init (e.g. sub_21A1818 for screen 4)
sub_20CB6C0
export/plan0/arm9_main/sub_20CB6C0_020CB6C0.c
- docs/function_notes/agent_05.md:425 screen transition handler: when requested screen differs, switches on screen id and runs per-screen teardown/update (sub_21A1838 for 4, etc.)
sub_20CB99C
export/plan0/arm9_main/sub_20CB99C_020CB99C.c
- docs/function_notes/agent_05.md:426 returns heap handle (sub_20364E8 then sub_20364E0)
sub_20CB9B8
export/plan0/arm9_main/sub_20CB9B8_020CB9B8.c
- docs/function_notes/agent_05.md:427 starts screen change: moves requested screen into current, sets next to 31, calls sub_20CB618 and sub_20CBAD0, loads files
sub_20CBA30
export/plan0/arm9_main/sub_20CBA30_020CBA30.c
- docs/function_notes/agent_05.md:428 wrapper of sub_214A40C with a fixed first arg (engine graphics setup)
sub_20CBA6C
export/plan0/arm9_main/sub_20CBA6C_020CBA6C.c
- docs/function_notes/agent_05.md:429 wrapper of sub_214A40C with a different fixed first arg
sub_20CBAA8
export/plan0/arm9_main/sub_20CBAA8_020CBAA8.c
- docs/function_notes/agent_05.md:430 setter: screen manager +0x10 = value
sub_20CBABC
export/plan0/arm9_main/sub_20CBABC_020CBABC.c
- docs/function_notes/agent_05.md:431 setter: screen manager +0x8 = value (requested screen id)
sub_20CBAD0
export/plan0/arm9_main/sub_20CBAD0_020CBAD0.c
- docs/function_notes/agent_05.md:432 calls function pointer (screen busy/ready query)
sub_20CBB04
export/plan0/arm9_main/sub_20CBB04_020CBB04.c
- docs/function_notes/agent_05.md:433 returns a constant dword
sub_20CBB10
export/plan0/arm9_main/sub_20CBB10_020CBB10.c
- docs/function_notes/agent_05.md:434 main-menu screen manager init: allocates 2400-byte state, builds 3D/UI sprites, loads common/single_play_select_mode_m NCLR/NCGR/NCER/bncl and others
sub_20CC0E4
export/plan0/arm9_main/sub_20CC0E4_020CC0E4.c
- docs/function_notes/agent_05.md:435 getter: screen manager +0x14
sub_20CC0F8
export/plan0/arm9_main/sub_20CC0F8_020CC0F8.c
- docs/function_notes/agent_05.md:436 getter: screen manager +0x10
sub_20CC10C
export/plan0/arm9_main/sub_20CC10C_020CC10C.c
- docs/function_notes/agent_05.md:437 setter: screen manager +0x4 = value
sub_20CC120
export/plan0/arm9_main/sub_20CC120_020CC120.c
- docs/function_notes/agent_05.md:438 getter: screen manager +0x8
sub_20CC134
export/plan0/arm9_main/sub_20CC134_020CC134.c
- docs/function_notes/agent_05.md:439 sets bits 13-15 (BG mode/screen) of engine B display control
sub_20CC150
export/plan0/arm9_main/sub_20CC150_020CC150.c
- docs/function_notes/agent_05.md:440 sets bits 13-15 of engine A display control (0x04000000)
sub_20CC168
export/plan0/arm9_main/sub_20CC168_020CC168.c
- docs/function_notes/agent_05.md:441 engine B display control: (reg & mask) | a1
sub_20CC18C
export/plan0/arm9_main/sub_20CC18C_020CC18C.c
- docs/function_notes/agent_05.md:442 engine A display control (0x04000000): (reg & mask) | a1
sub_20CC1AC
export/plan0/arm9_main/sub_20CC1AC_020CC1AC.c
- docs/function_notes/agent_05.md:443 wrapper: calls sub_2038CD8 on object at a1+112 (rect/window set variant 1)
sub_20CC1E0
export/plan0/arm9_main/sub_20CC1E0_020CC1E0.c
- docs/function_notes/agent_05.md:444 wrapper: calls sub_2038D00 on object at a1+112
sub_20CC214
export/plan0/arm9_main/sub_20CC214_020CC214.c
- docs/function_notes/agent_05.md:445 wrapper: calls sub_2038D28 on object at a1+112
sub_20CC250
export/plan0/arm9_main/sub_20CC250_020CC250.c
- docs/function_notes/agent_05.md:446 wrapper: calls sub_2038D58 on object at a1+112
sub_20CC28C
export/plan0/arm9_main/sub_20CC28C_020CC28C.c
- docs/function_notes/agent_05.md:447 wrapper: calls sub_2038CD8 on object at a1+40
sub_20CC2C0
export/plan0/arm9_main/sub_20CC2C0_020CC2C0.c
- docs/function_notes/agent_05.md:448 wrapper: calls sub_2038D00 on object at a1+40
sub_20CC2F4
export/plan0/arm9_main/sub_20CC2F4_020CC2F4.c
- docs/function_notes/agent_05.md:449 wrapper: calls sub_2038D28 on object at a1+40
sub_20CC330
export/plan0/arm9_main/sub_20CC330_020CC330.c
- docs/function_notes/agent_05.md:450 wrapper: calls sub_2038D58 on object at a1+40
sub_20CC36C
export/plan0/arm9_main/sub_20CC36C_020CC36C.c
- docs/function_notes/agent_05.md:451 screen teardown step: runs current screen's callback table entry (+20+8*screen) and refreshes UI buffers
sub_20CC3B8
export/plan0/arm9_main/sub_20CC3B8_020CC3B8.c
- docs/function_notes/agent_05.md:452 copies a 30-entry table of (a,b) pairs into the screen manager's table at +20
sub_20CC3E8
export/plan0/arm9_main/sub_20CC3E8_020CC3E8.c
- docs/function_notes/agent_05.md:453 builds player slot descriptors for 8 slots (calls sub_20CC728/sub_20CC70C/sub_20CC6F0 getters) into a global array
sub_20CC598
export/plan0/arm9_main/sub_20CC598_020CC598.c
- docs/function_notes/agent_05.md:454 returns signed byte +0x55 of state if mode is 4, else -1 (same as sub_20B2F18)
sub_20CC5B8
export/plan0/arm9_main/sub_20CC5B8_020CC5B8.c
- docs/function_notes/agent_05.md:455 returns signed byte +0x54 of state if mode is 4, else -1 (same as sub_20B2F38)
sub_20CC5D8
export/plan0/arm9_main/sub_20CC5D8_020CC5D8.c
- docs/function_notes/agent_05.md:456 getter: state +0x1C
sub_20CC5EC
export/plan0/arm9_main/sub_20CC5EC_020CC5EC.c
- docs/function_notes/agent_05.md:457 getter: u16 at +0x3D8 (984) of state (race count / total laps)
sub_20CC604
export/plan0/arm9_main/sub_20CC604_020CC604.c
- docs/function_notes/hk_18.md:28 getter, returns int at global object +0x18
sub_20CC618
export/plan0/arm9_main/sub_20CC618_020CC618.c
- docs/function_notes/hk_18.md:29 getter, returns signed byte at global object +0x57
sub_20CC62C
export/plan0/arm9_main/sub_20CC62C_020CC62C.c
- docs/function_notes/hk_18.md:30 getter, returns int at global object +0x10
sub_20CC640
export/plan0/arm9_main/sub_20CC640_020CC640.c
- docs/function_notes/hk_18.md:31 getter, returns first word of the object referenced by off_20CC650
sub_20CC654
export/plan0/arm9_main/sub_20CC654_020CC654.c
- docs/function_notes/hk_18.md:32 getter, returns int at global object +0x8
sub_20CC668
export/plan0/arm9_main/sub_20CC668_020CC668.c
- docs/function_notes/hk_18.md:33 getter, returns unsigned byte at global object +0x3D0
sub_20CC67C
export/plan0/arm9_main/sub_20CC67C_020CC67C.c
- docs/function_notes/hk_18.md:34 getter, returns int at global object +0x14
sub_20CC690
export/plan0/arm9_main/sub_20CC690_020CC690.c
- docs/function_notes/hk_18.md:35 getter, returns int at global object +0x4
sub_20CC6A4
export/plan0/arm9_main/sub_20CC6A4_020CC6A4.c
- docs/function_notes/hk_18.md:36 getter, returns int at racer-table entry a1 (stride 48) +0x78
sub_20CC6C0
export/plan0/arm9_main/sub_20CC6C0_020CC6C0.c
- docs/function_notes/hk_18.md:37 getter, returns int at racer-table entry a1 (stride 48) +0x74
sub_20CC6DC
export/plan0/arm9_main/sub_20CC6DC_020CC6DC.c
- docs/function_notes/hk_18.md:38 getter, returns signed byte at global object +0x58
sub_20CC6F0
export/plan0/arm9_main/sub_20CC6F0_020CC6F0.c
- docs/function_notes/hk_18.md:39 getter, returns int at racer-table entry a1 (stride 48) +0x70
sub_20CC70C
export/plan0/arm9_main/sub_20CC70C_020CC70C.c
- docs/function_notes/hk_18.md:40 getter, returns int at racer-table entry a1 (stride 48) +0x6C
sub_20CC728
export/plan0/arm9_main/sub_20CC728_020CC728.c
- docs/function_notes/hk_18.md:41 getter, returns int at racer-table entry a1 (stride 48) +0x68
sub_20CC744
export/plan0/arm9_main/sub_20CC744_020CC744.c
- docs/function_notes/hk_18.md:42 race/menu state dispatcher: reads mode at object +0xC8, picks config builder (sub_20CCBB8/CCB78/CCAB0), pushes state via setters, mode 4 calls sub_2044380
sub_20CC994
export/plan0/arm9_main/sub_20CC994_020CC994.c
- docs/function_notes/hk_18.md:43 getter, returns int at global object +0x4
sub_20CC9A8
export/plan0/arm9_main/sub_20CC9A8_020CC9A8.c
- docs/function_notes/hk_18.md:44 setter, stores a1 into global object +0x78, returns it
sub_20CC9BC
export/plan0/arm9_main/sub_20CC9BC_020CC9BC.c
- docs/function_notes/hk_18.md:45 setter, stores a1 into global object +0x208, returns it
sub_20CC9D0
export/plan0/arm9_main/sub_20CC9D0_020CC9D0.c
- docs/function_notes/hk_18.md:46 setter, stores a1 into global object +0x204, returns it
sub_20CC9E4
export/plan0/arm9_main/sub_20CC9E4_020CC9E4.c
- docs/function_notes/hk_18.md:47 setter, stores 16-bit a1 into global object +0x3D8, returns it
sub_20CC9FC
export/plan0/arm9_main/sub_20CC9FC_020CC9FC.c
- docs/function_notes/hk_18.md:48 setter, stores byte a1 into global object +0x240, returns it
sub_20CCA10
export/plan0/arm9_main/sub_20CCA10_020CCA10.c
- docs/function_notes/hk_18.md:49 setter, stores a1 into global object +0x200, returns it
sub_20CCA24
export/plan0/arm9_main/sub_20CCA24_020CCA24.c
- docs/function_notes/hk_18.md:50 setter, stores a1 into global object +0x20C, returns it
sub_20CCA38
export/plan0/arm9_main/sub_20CCA38_020CCA38.c
- docs/function_notes/hk_18.md:51 setter, stores byte a1 into global object +0x23F, returns it
sub_20CCA4C
export/plan0/arm9_main/sub_20CCA4C_020CCA4C.c
- docs/function_notes/hk_18.md:52 setter, stores a1 into global object +0x1F8, returns it
sub_20CCA60
export/plan0/arm9_main/sub_20CCA60_020CCA60.c
- docs/function_notes/hk_18.md:53 setter, stores a1 into global object +0x1E8, returns it
sub_20CCA74
export/plan0/arm9_main/sub_20CCA74_020CCA74.c
- docs/function_notes/hk_18.md:54 setter, stores a1 into global object +0x1EC, returns it
sub_20CCA88
export/plan0/arm9_main/sub_20CCA88_020CCA88.c
- docs/function_notes/hk_18.md:55 setter, stores a1 into global object +0x1F0, returns it
sub_20CCA9C
export/plan0/arm9_main/sub_20CCA9C_020CCA9C.c
- docs/function_notes/hk_18.md:56 setter, stores a1 into global object +0x1FC, returns it
sub_20CCAB0
export/plan0/arm9_main/sub_20CCAB0_020CCAB0.c
- docs/function_notes/hk_18.md:57 loops 8 racer slots, calls sub_20468B0 with per-slot character/kart/type from config tables; uses sub_20CCB48 for default slots
sub_20CCB48
export/plan0/arm9_main/sub_20CCB48_020CCB48.c
- docs/function_notes/hk_18.md:58 thin wrapper, calls sub_20468B0(a1, -1, -1, 4, -1, 3) to set a racer slot to a default CPU entry
sub_20CCB78
export/plan0/arm9_main/sub_20CCB78_020CCB78.c
- docs/function_notes/hk_18.md:59 sets racer slot 0 from config (via sub_20468B0), then fills slots 1-7 with defaults via sub_20CCB48 (1-player/cup start variant)
sub_20CCBB8
export/plan0/arm9_main/sub_20CCBB8_020CCBB8.c
- docs/function_notes/hk_18.md:60 random race-roster builder: draws random characters via sub_203BE6C, sub_203BA70 and sub_203BE48, assigns slot types 0/1/3 and calls sub_20468B0 per slot
sub_20CCC74
export/plan0/arm9_main/sub_20CCC74_020CCC74.c
- docs/function_notes/hk_18.md:61 pushes two values into a small 4-entry history record (shifts +12 to +8, stores a1 at +12 and a2 at +16)
sub_20CCC9C
export/plan0/arm9_main/sub_20CCC9C_020CCC9C.c
- docs/function_notes/hk_18.md:62 getter, returns int at global object +0x10
sub_20CCCA8
export/plan0/arm9_main/sub_20CCCA8_020CCCA8.c
- docs/function_notes/hk_18.md:63 getter, returns int at global object +0xC
sub_20CCCB4
export/plan0/arm9_main/sub_20CCCB4_020CCCB4.c
- docs/function_notes/hk_18.md:64 getter, returns int at global object +0x8
sub_20CCCC0
export/plan0/arm9_main/sub_20CCCC0_020CCCC0.c
- docs/function_notes/hk_18.md:65 getter, returns int at global object +0x4
sub_20CCCCC
export/plan0/arm9_main/sub_20CCCCC_020CCCCC.c
- docs/function_notes/hk_18.md:66 getter, returns first word of the object referenced by off_20CCCD4
sub_20CCCD8
export/plan0/arm9_main/sub_20CCCD8_020CCCD8.c
- docs/function_notes/hk_18.md:67 thin wrapper, indirect call through off_20CCCF0(a1, *off_20CCCEC, 1)
sub_20CCCF4
export/plan0/arm9_main/sub_20CCCF4_020CCCF4.c
- docs/function_notes/hk_18.md:68 builds on-screen icon list (race goal/results): walks object list at off_20CCE0C, keeps flag-0x2-clear objects passing sub_20B5AE8, appends 20-byte entries
sub_20CCE10
export/plan0/arm9_main/sub_20CCE10_020CCE10.c
- docs/function_notes/hk_18.md:69 thin wrapper, indirect call off_20CCE1C(off_20CCE20)
sub_20CCE24
export/plan0/arm9_main/sub_20CCE24_020CCE24.c
- docs/function_notes/hk_18.md:70 thin wrapper, indirect call off_20CCE34(off_20CCE38, 207)
sub_20CCE3C
export/plan0/arm9_main/sub_20CCE3C_020CCE3C.c
- docs/function_notes/hk_18.md:71 thin wrapper, indirect call off_20CCE54(a1, *off_20CCE50, 1)
sub_20CCE58
export/plan0/arm9_main/sub_20CCE58_020CCE58.c
- docs/function_notes/hk_18.md:72 icon-list builder like sub_20CCCF4 but filters flags 0x1 and 0x2 clear and emits type 3 entries with sub_20B83DC(173)
sub_20CCF58
export/plan0/arm9_main/sub_20CCF58_020CCF58.c
- docs/function_notes/hk_18.md:73 thin wrapper, indirect call off_20CCF64(off_20CCF68)
sub_20CCF6C
export/plan0/arm9_main/sub_20CCF6C_020CCF6C.c
- docs/function_notes/hk_18.md:74 thin wrapper, indirect call off_20CCF7C(off_20CCF80, dword_20CCF84)
sub_20CCF88
export/plan0/arm9_main/sub_20CCF88_020CCF88.c
- docs/function_notes/hk_18.md:75 minimap sprite emitter: rotates each list entry (sub_20B6368, sub_20B4C74/sub_20B4CB0), writes OAM attrs into a1 (sub_20AE5C4), appends cells via sub_20224E0
sub_20CD1C0
export/plan0/arm9_main/sub_20CD1C0_020CD1C0.c
- docs/function_notes/hk_18.md:76 icon-list builder like sub_20CCCF4 with sub_20B83DC(144) resource and flag bit 0x400 copied into entry
sub_20CD2DC
export/plan0/arm9_main/sub_20CD2DC_020CD2DC.c
- docs/function_notes/hk_18.md:77 thin wrapper, indirect call off_20CD2E8(off_20CD2EC)
sub_20CD2F0
export/plan0/arm9_main/sub_20CD2F0_020CD2F0.c
- docs/function_notes/hk_18.md:78 thin wrapper, indirect call off_20CD300(off_20CD304, dword_20CD308)
sub_20CD30C
export/plan0/arm9_main/sub_20CD30C_020CD30C.c
- docs/function_notes/hk_18.md:79 thin wrapper, indirect call off_20CD324(a1, *off_20CD320, 0)
sub_20CD328
export/plan0/arm9_main/sub_20CD328_020CD328.c
- docs/function_notes/hk_18.md:80 icon-list builder over object pool (sub_20B5F68 check, flag 0x1 filter, sub_20B83DC(92) resource), appends 20-byte entries, writes count at list +4
sub_20CD438
export/plan0/arm9_main/sub_20CD438_020CD438.c
- docs/function_notes/hk_18.md:81 thin wrapper, indirect call off_20CD444(off_20CD448)
sub_20CD44C
export/plan0/arm9_main/sub_20CD44C_020CD44C.c
- docs/function_notes/hk_18.md:82 thin wrapper, indirect call off_20CD45C(off_20CD460, 103)
sub_20CD464
export/plan0/arm9_main/sub_20CD464_020CD464.c
- docs/function_notes/hk_18.md:83 thin wrapper, indirect call off_20CD47C(a1, *off_20CD478, 1)
sub_20CD480
export/plan0/arm9_main/sub_20CD480_020CD480.c
- docs/function_notes/hk_18.md:84 icon-list builder like sub_20CCCF4 with sub_20B83DC(153) resource; sets +16 |= 1024 on each entry
sub_20CD584
export/plan0/arm9_main/sub_20CD584_020CD584.c
- docs/function_notes/hk_18.md:85 thin wrapper, indirect call off_20CD590(off_20CD594)
sub_20CD598
export/plan0/arm9_main/sub_20CD598_020CD598.c
- docs/function_notes/hk_18.md:86 thin wrapper, indirect call off_20CD5A8(off_20CD5AC, dword_20CD5B0)
sub_20CD5B4
export/plan0/arm9_main/sub_20CD5B4_020CD5B4.c
- docs/function_notes/hk_18.md:87 thin wrapper, indirect call off_20CD5CC(a1, *off_20CD5C8, 0)
sub_20CD5D0
export/plan0/arm9_main/sub_20CD5D0_020CD5D0.c
- docs/function_notes/hk_18.md:88 icon-list builder over object pool like sub_20CD328 with sub_20B83DC(142) resource
sub_20CD6E0
export/plan0/arm9_main/sub_20CD6E0_020CD6E0.c
- docs/function_notes/hk_18.md:89 thin wrapper, indirect call off_20CD6EC(off_20CD6F0)
sub_20CD6F4
export/plan0/arm9_main/sub_20CD6F4_020CD6F4.c
- docs/function_notes/hk_18.md:90 thin wrapper, indirect call off_20CD704(off_20CD708, dword_20CD70C)
sub_20CD710
export/plan0/arm9_main/sub_20CD710_020CD710.c
- docs/function_notes/hk_18.md:91 thin wrapper, indirect call off_20CD728(a1, *off_20CD724, 1)
sub_20CD72C
export/plan0/arm9_main/sub_20CD72C_020CD72C.c
- docs/function_notes/hk_18.md:92 icon-list builder like sub_20CCCF4 with sub_20B83DC(143) resource; sets +16 |= 1024 on each entry
sub_20CD830
export/plan0/arm9_main/sub_20CD830_020CD830.c
- docs/function_notes/hk_18.md:93 thin wrapper, indirect call off_20CD83C(off_20CD840)
sub_20CD844
export/plan0/arm9_main/sub_20CD844_020CD844.c
- docs/function_notes/hk_18.md:94 thin wrapper, indirect call off_20CD854(off_20CD858, dword_20CD85C)
sub_20CD860
export/plan0/arm9_main/sub_20CD860_020CD860.c
- docs/function_notes/hk_18.md:95 thin wrapper, indirect call off_20CD878(a1, *off_20CD874, 0)
sub_20CD87C
export/plan0/arm9_main/sub_20CD87C_020CD87C.c
- docs/function_notes/hk_18.md:96 icon/label list builder over object pool: subtracts sub_2095F30(obj)>>14 from entry +4, picks resource 171 or 170 via sub_2095F38, emits type 2/3 entries
sub_20CD9C8
export/plan0/arm9_main/sub_20CD9C8_020CD9C8.c
- docs/function_notes/hk_18.md:97 thin wrapper, indirect call off_20CD9D4(off_20CD9D8)
sub_20CD9DC
export/plan0/arm9_main/sub_20CD9DC_020CD9DC.c
- docs/function_notes/hk_18.md:98 thin wrapper, indirect call off_20CD9EC(off_20CD9F0, dword_20CD9F4)
sub_20CD9F8
export/plan0/arm9_main/sub_20CD9F8_020CD9F8.c
- docs/function_notes/hk_18.md:99 thin wrapper, indirect call off_20CDA10(a1, *off_20CDA0C, 0)
sub_20CDA14
export/plan0/arm9_main/sub_20CDA14_020CDA14.c
- docs/function_notes/hk_18.md:100 icon-list builder over object pool; resource 162 or 161 chosen by bit 0x10 of object +0xB8; emits type 2/3 entries
sub_20CDB40
export/plan0/arm9_main/sub_20CDB40_020CDB40.c
- docs/function_notes/hk_18.md:101 thin wrapper, indirect call off_20CDB4C(off_20CDB50)
sub_20CDB54
export/plan0/arm9_main/sub_20CDB54_020CDB54.c
- docs/function_notes/hk_18.md:102 thin wrapper, indirect call off_20CDB64(off_20CDB68, dword_20CDB6C)
sub_20CDB70
export/plan0/arm9_main/sub_20CDB70_020CDB70.c
- docs/function_notes/hk_18.md:103 thin wrapper, indirect call off_20CDB88(a1, *off_20CDB84, 0)
sub_20CDB8C
export/plan0/arm9_main/sub_20CDB8C_020CDB8C.c
- docs/function_notes/hk_18.md:104 icon-list builder like sub_20CCCF4 with sub_20B83DC(163) resource, no extra flag
sub_20CDC7C
export/plan0/arm9_main/sub_20CDC7C_020CDC7C.c
- docs/function_notes/hk_18.md:105 thin wrapper, indirect call off_20CDC88(off_20CDC8C)
sub_20CDC90
export/plan0/arm9_main/sub_20CDC90_020CDC90.c
- docs/function_notes/hk_18.md:106 thin wrapper, indirect call off_20CDCA0(off_20CDCA4, dword_20CDCA8)
sub_20CDCAC
export/plan0/arm9_main/sub_20CDCAC_020CDCAC.c
- docs/function_notes/hk_18.md:107 thin wrapper, indirect call off_20CDCC4(a1, *off_20CDCC0, 0)
sub_20CDCC8
export/plan0/arm9_main/sub_20CDCC8_020CDCC8.c
- docs/function_notes/hk_18.md:108 icon-list builder like sub_20CCCF4 with sub_20B83DC(146) resource; copies flag 0x20 into entry +14
sub_20CDDD0
export/plan0/arm9_main/sub_20CDDD0_020CDDD0.c
- docs/function_notes/hk_18.md:109 thin wrapper, indirect call off_20CDDDC(off_20CDDE0)
sub_20CDDE4
export/plan0/arm9_main/sub_20CDDE4_020CDDE4.c
- docs/function_notes/hk_18.md:110 thin wrapper, indirect call off_20CDDF4(off_20CDDF8, 432)
sub_20CDDFC
export/plan0/arm9_main/sub_20CDDFC_020CDDFC.c
- docs/function_notes/hk_18.md:111 thin wrapper, indirect call off_20CDE14(a1, *off_20CDE10, 0)
sub_20CDE18
export/plan0/arm9_main/sub_20CDE18_020CDE18.c
- docs/function_notes/hk_18.md:112 icon-list builder with flag 0x1 filter, sub_20B83DC(141) resource, emits type 2/3 entries
sub_20CDF04
export/plan0/arm9_main/sub_20CDF04_020CDF04.c
- docs/function_notes/hk_18.md:113 thin wrapper, indirect call off_20CDF10(off_20CDF14)
sub_20CDF18
export/plan0/arm9_main/sub_20CDF18_020CDF18.c
- docs/function_notes/hk_18.md:114 thin wrapper, indirect call off_20CDF28(off_20CDF2C, dword_20CDF30)
sub_20CDF34
export/plan0/arm9_main/sub_20CDF34_020CDF34.c
- docs/function_notes/hk_18.md:115 thin wrapper, indirect call off_20CDF4C(a1, *off_20CDF48, 0)
sub_20CDF50
export/plan0/arm9_main/sub_20CDF50_020CDF50.c
- docs/function_notes/hk_18.md:116 icon-list builder with frame counter (wraps at 8) in list +12; resource 174 or 178 by *off_20CE0E4==19; stores per-entry timing (4096 or dword_20CE0E8)
sub_20CE0EC
export/plan0/arm9_main/sub_20CE0EC_020CE0EC.c
- docs/function_notes/hk_18.md:117 thin wrapper, indirect call off_20CE0F8(off_20CE0FC)
sub_20CE100
export/plan0/arm9_main/sub_20CE100_020CE100.c
- docs/function_notes/hk_18.md:118 thin wrapper, indirect call off_20CE110(off_20CE114, 420)
sub_20CE118
export/plan0/arm9_main/sub_20CE118_020CE118.c
- docs/function_notes/hk_18.md:119 thin wrapper, indirect call off_20CE130(a1, *off_20CE12C, 1)
sub_20CE134
export/plan0/arm9_main/sub_20CE134_020CE134.c
- docs/function_notes/NEEDS_REVIEW.md:571 probably race-goal marker list builder: for each racer in list at off_20CE248, bounds-tests (sub_20B5AE8), appends 20-byte entry (label 145, type 2/3).
- docs/function_notes/hk_19.md:3 probably race-goal marker list builder: for each racer in list at off_20CE248, bounds-tests (sub_20B5AE8), appends 20-byte entry (label 145, type 2/3).
sub_20CE250
export/plan0/arm9_main/sub_20CE250_020CE250.c
- docs/function_notes/hk_19.md:4 thin wrapper; indirect call off_20CE25C with off_20CE260.
sub_20CE264
export/plan0/arm9_main/sub_20CE264_020CE264.c
- docs/function_notes/hk_19.md:5 thin wrapper; indirect call off_20CE274(off_20CE278, 424).
sub_20CE27C
export/plan0/arm9_main/sub_20CE27C_020CE27C.c
- docs/function_notes/hk_19.md:6 thin wrapper; indirect call off_20CE294(a1, *off_20CE290, 0).
sub_20CE298
export/plan0/arm9_main/sub_20CE298_020CE298.c
- docs/function_notes/NEEDS_REVIEW.md:572 probably touch-map marker list builder: filters with sub_20B5F68, bounds test, appends entries with label 177 and type 2/3, sets count.
- docs/function_notes/hk_19.md:7 probably touch-map marker list builder: filters with sub_20B5F68, bounds test, appends entries with label 177 and type 2/3, sets count.
sub_20CE3CC
export/plan0/arm9_main/sub_20CE3CC_020CE3CC.c
- docs/function_notes/hk_19.md:8 thin wrapper; indirect call off_20CE3D8(off_20CE3DC).
sub_20CE3E0
export/plan0/arm9_main/sub_20CE3E0_020CE3E0.c
- docs/function_notes/hk_19.md:9 thin wrapper; indirect call off_20CE3F0(off_20CE3F4, 408).
sub_20CE3F8
export/plan0/arm9_main/sub_20CE3F8_020CE3F8.c
- docs/function_notes/hk_19.md:10 thin wrapper; indirect call off_20CE410(a1, *off_20CE40C, 0).
sub_20CE414
export/plan0/arm9_main/sub_20CE414_020CE414.c
- docs/function_notes/NEEDS_REVIEW.md:573 probably result marker list builder over list at off_20CE530, skipping flagged entries; sub_2092194 kind picks label 181 or 180; type 2/3.
- docs/function_notes/hk_19.md:11 probably result marker list builder over list at off_20CE530, skipping flagged entries; sub_2092194 kind picks label 181 or 180; type 2/3.
sub_20CE534
export/plan0/arm9_main/sub_20CE534_020CE534.c
- docs/function_notes/hk_19.md:12 thin wrapper; indirect call off_20CE540(off_20CE544).
sub_20CE548
export/plan0/arm9_main/sub_20CE548_020CE548.c
- docs/function_notes/hk_19.md:13 thin wrapper; indirect call off_20CE558(off_20CE55C, dword_20CE560).
sub_20CE564
export/plan0/arm9_main/sub_20CE564_020CE564.c
- docs/function_notes/hk_19.md:14 thin wrapper; indirect call off_20CE57C(a1, *off_20CE578, 1).
sub_20CE580
export/plan0/arm9_main/sub_20CE580_020CE580.c
- docs/function_notes/hk_19.md:15 marker list builder over list at off_20CE690: bounds test, label 179, type 2/3, copies racer field +126 into entry +16; sets count.
sub_20CE694
export/plan0/arm9_main/sub_20CE694_020CE694.c
- docs/function_notes/hk_19.md:16 thin wrapper; indirect call off_20CE6A0(off_20CE6A4).
sub_20CE6A8
export/plan0/arm9_main/sub_20CE6A8_020CE6A8.c
- docs/function_notes/hk_19.md:17 thin wrapper; indirect call off_20CE6B8(off_20CE6BC, 340).
sub_20CE6C0
export/plan0/arm9_main/sub_20CE6C0_020CE6C0.c
- docs/function_notes/hk_19.md:18 thumb; maps sub_211E51C result 1/2 to sub_20CCC74 calls with ids 13/11 (page 31), otherwise returns the result unchanged.
sub_20CE6EC
export/plan0/arm9_main/sub_20CE6EC_020CE6EC.c
- docs/function_notes/NEEDS_REVIEW.md:574 probably 2D screen transition: if sub_20CCCC0 is set, picks layout via sub_20CE778 (sub_20CE760 24/25, sub_20CE744 18/30), finishes via sub_211E4E8.
- docs/function_notes/hk_19.md:19 probably 2D screen transition: if sub_20CCCC0 is set, picks layout via sub_20CE778 (sub_20CE760 24/25, sub_20CE744 18/30), finishes via sub_211E4E8.
sub_20CE744
export/plan0/arm9_main/sub_20CE744_020CE744.c
- docs/function_notes/hk_19.md:20 read-modify-write of the word at off_20CE75C, setting bits 8-12 (mask 0xFFFFE0FF) to a1; a BG/layer mode-field setter.
sub_20CE760
export/plan0/arm9_main/sub_20CE760_020CE760.c
- docs/function_notes/hk_19.md:21 same as sub_20CE744 but on MEMORY[0x4000000] (engine A DISPCNT); sets bits 8-12 to a1.
sub_20CE778
export/plan0/arm9_main/sub_20CE778_020CE778.c
- docs/function_notes/hk_19.md:22 thin wrapper; indirect call off_20CE780() returning a flag.
sub_20CE7AC
export/plan0/arm9_main/sub_20CE7AC_020CE7AC.c
- docs/function_notes/hk_19.md:23 trivial getter returning dword_20CE7B4.
sub_20CE7B8
export/plan0/arm9_main/sub_20CE7B8_020CE7B8.c
- docs/function_notes/hk_19.md:24 thumb; maps sub_2118E64 result 1/2 to sub_20CCC74 ids 29/12 (page 31), otherwise returns result.
sub_20CE7E4
export/plan0/arm9_main/sub_20CE7E4_020CE7E4.c
- docs/function_notes/hk_19.md:25 same pattern as sub_20CE6EC (sub_20CE760 24/25/28, sub_20CE744 18/30), finishes via sub_2118E30.
sub_20CE83C
export/plan0/arm9_main/sub_20CE83C_020CE83C.c
- docs/function_notes/hk_19.md:26 thumb switch on sub_2117418: 1 -> sub_20CCC74(12), 2 -> (10), 3 -> (14 or 0 via sub_20CE8BC), then sub_20CE8A8(0) and sub_20CE894(1).
sub_20CE894
export/plan0/arm9_main/sub_20CE894_020CE894.c
- docs/function_notes/hk_19.md:27 setter; writes arg to field +4 of the object at *off_20CE8A4.
sub_20CE8A8
export/plan0/arm9_main/sub_20CE8A8_020CE8A8.c
- docs/function_notes/hk_19.md:28 setter; writes arg to field +8 of the object at *off_20CE8B8.
sub_20CE8BC
export/plan0/arm9_main/sub_20CE8BC_020CE8BC.c
- docs/function_notes/hk_19.md:29 trivial getter for field +32 of the object at *off_20CE8CC.
sub_20CE8D0
export/plan0/arm9_main/sub_20CE8D0_020CE8D0.c
- docs/function_notes/hk_19.md:30 same pattern as sub_20CE6EC (sub_20CE760 24/25, sub_20CE744 18/22), finishes via sub_21173E4.
sub_20CE928
export/plan0/arm9_main/sub_20CE928_020CE928.c
- docs/function_notes/hk_19.md:31 thumb; on sub_211A7BC result 1 sets sub_20CCC74(29) if object +240 is 2 (and +208=20), else id 11; result 2 -> id 9.
sub_20CE974
export/plan0/arm9_main/sub_20CE974_020CE974.c
- docs/function_notes/hk_19.md:32 if sub_20CCCC0 is set, sub_20CE744(31) and sub_2148934; finishes via sub_211A794.
sub_20CE998
export/plan0/arm9_main/sub_20CE998_020CE998.c
- docs/function_notes/hk_19.md:33 thumb; sub_2028130 result 1 -> sub_20CCC74(10), result 2 -> sub_20CCC74(8), otherwise returns result.
sub_20CE9C4
export/plan0/arm9_main/sub_20CE9C4_020CE9C4.c
- docs/function_notes/hk_19.md:34 if sub_20CCCC0, sub_20CE760(11) and sub_2148950(1,0,1); then sub_20CE744(18); tail-calls sub_2027E78.
sub_20CE9F0
export/plan0/arm9_main/sub_20CE9F0_020CE9F0.c
- docs/function_notes/hk_19.md:35 thumb switch on sub_2026120 result: 1 -> sub_20CCC74(9), 2 -> (0), 3 -> (10).
sub_20CEA28
export/plan0/arm9_main/sub_20CEA28_020CEA28.c
- docs/function_notes/hk_19.md:36 like sub_20CE9C4 with sub_20CE760(11), sub_20CE744(8) and sub_2148934; tail-calls sub_2026058.
sub_20CEA60
export/plan0/arm9_main/sub_20CEA60_020CEA60.c
- docs/function_notes/hk_19.md:37 copies a 3-entry table from off_20CEAF4, calls sub_219C7EC (dialog result); switch sets object +208 from the table (id 29) or handles errors via sub_20CCC74.
sub_20CEAF8
export/plan0/arm9_main/sub_20CEAF8_020CEAF8.c
- docs/function_notes/hk_19.md:38 setter; writes arg to field +4 of the object at *off_20CEB08.
sub_20CEB0C
export/plan0/arm9_main/sub_20CEB0C_020CEB0C.c
- docs/function_notes/hk_19.md:39 setter; writes arg to field +8 of the object at *off_20CEB1C.
sub_20CEB20
export/plan0/arm9_main/sub_20CEB20_020CEB20.c
- docs/function_notes/hk_19.md:40 if sub_20CCCC0, sub_20CEB70(30), sub_2148950, sub_20CEB54(31), sub_2148934; tail-calls through function pointer dword_219C764.
sub_20CEB54
export/plan0/arm9_main/sub_20CEB54_020CEB54.c
- docs/function_notes/hk_19.md:41 read-modify-write of the word at off_20CEB6C, setting bits 8-12 to a1 (mask 0xFFFFE0FF); same as sub_20CE744 with another target.
sub_20CEB70
export/plan0/arm9_main/sub_20CEB70_020CEB70.c
- docs/function_notes/hk_19.md:42 sets bits 8-12 of engine A DISPCNT (MEMORY[0x4000000]) to a1; same as sub_20CE760.
sub_20CEB88
export/plan0/arm9_main/sub_20CEB88_020CEB88.c
- docs/function_notes/hk_19.md:43 thumb; on sub_211A7BC result 1, if sub_20CEBE4() sets object +240=2; then +208=44 and sub_20CCC74(29) if +240==2, else id 17; result 2 -> id 15.
sub_20CEBE4
export/plan0/arm9_main/sub_20CEBE4_020CEBE4.c
- docs/function_notes/hk_19.md:44 flag getter; returns bit 2 (sign-extended) of field +28 of the object at *off_20CEBFC.
sub_20CEC00
export/plan0/arm9_main/sub_20CEC00_020CEC00.c
- docs/function_notes/hk_19.md:45 if sub_20CCCC0, sub_20CEB54(31) and sub_2148934; finishes via sub_211A794.
sub_20CEC24
export/plan0/arm9_main/sub_20CEC24_020CEC24.c
- docs/function_notes/hk_19.md:46 thumb; sub_2026120 result 1 or 3 -> sub_20CCC74(16), 2 -> sub_20CCC74(14), otherwise returns result.
sub_20CEC50
export/plan0/arm9_main/sub_20CEC50_020CEC50.c
- docs/function_notes/hk_19.md:47 engine B variant of the screen transition: sub_20CEB70(11), sub_2148950, sub_20CEB54(8), sub_20CEB54(18); tail-calls sub_2026058.
sub_20CEC88
export/plan0/arm9_main/sub_20CEC88_020CEC88.c
- docs/function_notes/hk_19.md:48 thumb switch on sub_2032280: 1 -> checks field +200 of the session object (2 -> id 15, 3 -> id 8); 2 -> id 0; 3 -> id 27.
sub_20CECDC
export/plan0/arm9_main/sub_20CECDC_020CECDC.c
- docs/function_notes/hk_19.md:49 if sub_20CCCC0, sub_20CEB70(24), sub_2148950, sub_20CEB54(18), sub_2148934; returns sub_2032138().
sub_20CED10
export/plan0/arm9_main/sub_20CED10_020CED10.c
- docs/function_notes/hk_19.md:50 thin wrapper; indirect call off_20CED28(a1, *off_20CED24, 0).
sub_20CED2C
export/plan0/arm9_main/sub_20CED2C_020CED2C.c
- docs/function_notes/hk_19.md:51 marker list builder over list at off_20CEDF4: skips flagged entries, bounds-tests with sub_20B5AE8, appends label 164 entries, sets count.
sub_20CEDF8
export/plan0/arm9_main/sub_20CEDF8_020CEDF8.c
- docs/function_notes/hk_19.md:52 thin wrapper; indirect call off_20CEE04(off_20CEE08).
sub_20CEE0C
export/plan0/arm9_main/sub_20CEE0C_020CEE0C.c
- docs/function_notes/hk_19.md:53 thin wrapper; indirect call off_20CEE1C(off_20CEE20, dword_20CEE24).
sub_20CEE28
export/plan0/arm9_main/sub_20CEE28_020CEE28.c
- docs/function_notes/hk_19.md:54 zeroes 8 dwords plus one more (at dword_20CEE58) in the array at *off_20CEE50 + dword_20CEE54; clears per-screen state.
sub_20CEE5C
export/plan0/arm9_main/sub_20CEE5C_020CEE5C.c
- docs/function_notes/hk_19.md:55 if state word is 0 and sub_20CEF08 is 1 or 2, shuffles an 8-entry index array with sub_20951B4 RNG draws, then sets the state word to 1.
sub_20CEEEC
export/plan0/arm9_main/sub_20CEEEC_020CEEEC.c
- docs/function_notes/hk_19.md:56 returns *off_20CEF00 + dword_20CEF04 (pointer-offset getter).
sub_20CEF08
export/plan0/arm9_main/sub_20CEF08_020CEF08.c
- docs/function_notes/hk_19.md:57 trivial getter for field +32 of the object at *off_20CEF18.
sub_20CEF1C
export/plan0/arm9_main/sub_20CEF1C_020CEF1C.c
- docs/function_notes/hk_19.md:58 calls sub_20CEF68, then zeroes fields +0..+28, byte +84, +88 and +112 of the object at *off_20CEF60 (reset).
sub_20CEF68
export/plan0/arm9_main/sub_20CEF68_020CEF68.c
- docs/function_notes/hk_19.md:59 thin wrapper; indirect call off_20CEF78(a1, 0, a2).
sub_20CEFA0
export/plan0/arm9_main/sub_20CEFA0_020CEFA0.c
- docs/function_notes/hk_19.md:60 allocates via sub_2036BEC(a1, dword_20CEFB8) into *off_20CEFBC, then calls sub_20CEF1C (init).
sub_20CEFC0
export/plan0/arm9_main/sub_20CEFC0_020CEFC0.c
- docs/function_notes/hk_19.md:61 thin wrapper; indirect call off_20CEFD8(a1, *off_20CEFD4, 0).
sub_20CEFDC
export/plan0/arm9_main/sub_20CEFDC_020CEFDC.c
- docs/function_notes/hk_19.md:62 builds map marker list from two world-object lists (+632/+616, +360/+344) via sub_20FD308 and sub_20FAD9C; bounds test, labels 99/100.
sub_20CF2FC
export/plan0/arm9_main/sub_20CF2FC_020CF2FC.c
- docs/function_notes/hk_19.md:63 thin wrapper; indirect call off_20CF308(off_20CF30C).
sub_20CF310
export/plan0/arm9_main/sub_20CF310_020CF310.c
- docs/function_notes/hk_19.md:64 thin wrapper; indirect call off_20CF338(off_20CF33C, sum of fields +852 and +1524 of the object at *off_20CF334).
sub_20CF340
export/plan0/arm9_main/sub_20CF340_020CF340.c
- docs/function_notes/hk_19.md:65 large (2308-byte) ARM routine, probably 2D screen/menu state update; calls sub_214B468, sub_214B4DC, sub_213250C, sub_20B64E8, sub_200EE74.
sub_20CFCA4
export/plan0/arm9_main/sub_20CFCA4_020CFCA4.c
- docs/function_notes/hk_19.md:66 copies palette entries from palette RAM (0x05000400) into per-mode buffers, switch on **off_20CFF90 (modes 15, 17, 28, 31, 46).
sub_20CFFA0
export/plan0/arm9_main/sub_20CFFA0_020CFFA0.c
- docs/function_notes/hk_19.md:67 allocates 56 bytes from the heap via sub_20364E8/sub_20364E0/sub_2036BEC into *off_20CFFCC.
sub_20CFFD0
export/plan0/arm9_main/sub_20CFFD0_020CFFD0.c
- docs/function_notes/hk_19.md:68 thin wrapper; indirect call off_20CFFE8(a1, *off_20CFFE4, 1).
sub_20CFFEC
export/plan0/arm9_main/sub_20CFFEC_020CFFEC.c
- docs/function_notes/hk_19.md:69 marker list builder over list at off_20D0100, same shape as sub_20CE134 with label 183 and a scaled value from dword_20D0104 at entry +28.
sub_20D0108
export/plan0/arm9_main/sub_20D0108_020D0108.c
- docs/function_notes/hk_19.md:70 thin wrapper; indirect call off_20D0114(off_20D0118).
sub_20D011C
export/plan0/arm9_main/sub_20D011C_020D011C.c
- docs/function_notes/hk_19.md:71 thin wrapper; indirect call off_20D012C(off_20D0130, 436).
sub_20D0134
export/plan0/arm9_main/sub_20D0134_020D0134.c
- docs/function_notes/hk_19.md:72 thin wrapper; indirect call off_20D014C(a1, *off_20D0148, 1).
sub_20D0150
export/plan0/arm9_main/sub_20D0150_020D0150.c
- docs/function_notes/hk_19.md:73 marker list builder over list at off_20D0264, same shape as sub_20CE134 with label 184 and a scaled value from dword_20D0268.
sub_20D026C
export/plan0/arm9_main/sub_20D026C_020D026C.c
- docs/function_notes/hk_19.md:74 thin wrapper; indirect call off_20D0278(off_20D027C).
sub_20D0280
export/plan0/arm9_main/sub_20D0280_020D0280.c
- docs/function_notes/hk_19.md:75 thin wrapper; indirect call off_20D0290(off_20D0294, dword_20D0298).
sub_20D029C
export/plan0/arm9_main/sub_20D029C_020D029C.c
- docs/function_notes/NEEDS_REVIEW.md:575 probably draws a set of up to 9 cell sprites (sub_20224E0 with sub_20B8454 cell lookups) at positions from table off_20D06B4; helper for sub_20D06B8.
- docs/function_notes/hk_19.md:76 probably draws a set of up to 9 cell sprites (sub_20224E0 with sub_20B8454 cell lookups) at positions from table off_20D06B4; helper for sub_20D06B8.
sub_20D06B8
export/plan0/arm9_main/sub_20D06B8_020D06B8.c
- docs/function_notes/NEEDS_REVIEW.md:576 probably draws HUD/map entry icons: cell copies via sub_20224E0 with sub_20B8454 ids 67, 21, 22, 33; loops over sub_2044618 items calling sub_20D029C.
- docs/function_notes/hk_19.md:77 probably draws HUD/map entry icons: cell copies via sub_20224E0 with sub_20B8454 ids 67, 21, 22, 33; loops over sub_2044618 items calling sub_20D029C.
sub_20D0A18
export/plan0/arm9_main/sub_20D0A18_020D0A18.c
- docs/function_notes/hk_19.md:78 updates per-racer lap/time entries: sub_203C7CC/sub_203C778 for lap time, sub_20AE7C4 stores entries; cycles counter +168 (0..15), sets +172 to 0/13/26.
sub_20D0BBC
export/plan0/arm9_main/sub_20D0BBC_020D0BBC.c
- docs/function_notes/hk_19.md:79 take-and-null getter; returns global at off_20D0BCC and clears it.
sub_20D0BD0
export/plan0/arm9_main/sub_20D0BD0_020D0BD0.c
- docs/function_notes/hk_19.md:80 allocates 176 bytes via sub_2036BEC into *off_20D0CB8 and zeroes the header and five 28-byte entries.
sub_20D0CBC
export/plan0/arm9_main/sub_20D0CBC_020D0CBC.c
- docs/function_notes/hk_19.md:81 thin wrapper; indirect call off_20D0CD4(a1, *off_20D0CD0, 1).
sub_20D0CD8
export/plan0/arm9_main/sub_20D0CD8_020D0CD8.c
- docs/function_notes/hk_19.md:82 increments counter +4 of the sub-object (wraps at 20); bounds-tests entries with sub_20B5AE8 and appends label 165 (counter<10) or 166, type 1; sets count.
sub_20D0E28
export/plan0/arm9_main/sub_20D0E28_020D0E28.c
- docs/function_notes/hk_19.md:83 thin wrapper; indirect call off_20D0E34(off_20D0E38).
sub_20D0E3C
export/plan0/arm9_main/sub_20D0E3C_020D0E3C.c
- docs/function_notes/hk_19.md:84 thin wrapper; indirect call off_20D0E4C(off_20D0E50, dword_20D0E54).
sub_20D0E58
export/plan0/arm9_main/sub_20D0E58_020D0E58.c
- docs/function_notes/hk_19.md:85 returns (off_20D0E78+8)+12 if sub_20D0EC4() is true, else 0 (message/dialog pointer getter).
sub_20D0E7C
export/plan0/arm9_main/sub_20D0E7C_020D0E7C.c
- docs/function_notes/hk_19.md:86 if sub_20D0EC4() is true, returns field +20 of the object at (off_20D0E9C+4); else 0.
sub_20D0EA0
export/plan0/arm9_main/sub_20D0EA0_020D0EA0.c
- docs/function_notes/hk_19.md:87 if sub_20D0EC4() is true, returns field +12 of the object at **off_20D0EC0; else 0.
sub_20D0EC4
export/plan0/arm9_main/sub_20D0EC4_020D0EC4.c
- docs/function_notes/hk_19.md:88 returns true when *off_20D0EE4 is nonzero and sub_20D0EE8() is zero (dialog-available check).
sub_20D0EE8
export/plan0/arm9_main/sub_20D0EE8_020D0EE8.c
- docs/function_notes/hk_19.md:89 trivial getter for field +248 of the object at *off_20D0EF8.
sub_20D0EFC
export/plan0/arm9_main/sub_20D0EFC_020D0EFC.c
- docs/function_notes/hk_19.md:90 if table entry off_20D0F4C[2*a1] is set and the dialog is available and field +12 differs, stores a1, calls sub_2057DF0 x3 and sub_20D0F60; returns 1.
sub_20D0F60
export/plan0/arm9_main/sub_20D0F60_020D0F60.c
- docs/function_notes/hk_19.md:91 sets field +248 of the object at *off_20D0F74 to 1.
sub_20D0F78
export/plan0/arm9_main/sub_20D0F78_020D0F78.c
- docs/function_notes/NEEDS_REVIEW.md:577 probably loads a cup picture asset: sub_2135048 formats a path (dword_20D0FE8, off_20D0FEC), then sub_2048684 and sub_20B4810 load it.
- docs/function_notes/hk_19.md:92 probably loads a cup picture asset: sub_2135048 formats a path (dword_20D0FE8, off_20D0FEC), then sub_2048684 and sub_20B4810 load it.
sub_20D0FFC
export/plan0/arm9_main/sub_20D0FFC_020D0FFC.c
- docs/function_notes/NEEDS_REVIEW.md:578 probably the same loader as sub_20D0F78 for a second picture object (off_20D1054), finishing with sub_20B496C.
- docs/function_notes/hk_19.md:93 probably the same loader as sub_20D0F78 for a second picture object (off_20D1054), finishing with sub_20B496C.
sub_20D1080
export/plan0/arm9_main/sub_20D1080_020D1080.c
- docs/function_notes/NEEDS_REVIEW.md:579 probably the same loader as sub_20D0F78 for another picture object (off_20D10D4), finishing with sub_20B4A7C.
- docs/function_notes/hk_19.md:94 probably the same loader as sub_20D0F78 for another picture object (off_20D10D4), finishing with sub_20B4A7C.
sub_20D10FC
export/plan0/arm9_main/sub_20D10FC_020D10FC.c
- docs/function_notes/hk_19.md:95 take-and-null getter; returns global at off_20D1104 and clears it.
sub_20D1108
export/plan0/arm9_main/sub_20D1108_020D1108.c
- docs/function_notes/hk_19.md:96 if sub_20D1158() is 0, allocates via sub_2036BEC(sub_20D113C(), dword_20D1134) into *off_20D1138, zeroes +12, then calls sub_20D0EFC(20).
sub_20D113C
export/plan0/arm9_main/sub_20D113C_020D113C.c
- docs/function_notes/hk_19.md:97 returns sub_20364E0(sub_20364E8()); heap handle getter.
sub_20D1158
export/plan0/arm9_main/sub_20D1158_020D1158.c
- docs/function_notes/hk_19.md:98 thin wrapper; indirect call off_20D1160().
sub_20D118C
export/plan0/arm9_main/sub_20D118C_020D118C.c
- docs/function_notes/hk_19.md:99 trivial getter returning dword_20D1194.
sub_20D1198
export/plan0/arm9_main/sub_20D1198_020D1198.c
- docs/function_notes/hk_19.md:100 clears a bit in MEMORY[0x4000000], then builds two cell-OBJ copies with sub_20B837C and sub_20224E0 at a1+8*count; updates the count at a1+1024.
sub_20D129C
export/plan0/arm9_main/sub_20D129C_020D129C.c
- docs/function_notes/hk_19.md:102 take-and-null getter; returns global at off_20D12AC and clears it.
sub_20D12B0
export/plan0/arm9_main/sub_20D12B0_020D12B0.c
- docs/function_notes/hk_19.md:103 allocates 4 bytes via sub_2036BEC into *off_20D12DC from the heap handle of sub_20364E0.
sub_20D12E0
export/plan0/arm9_main/sub_20D12E0_020D12E0.c
- docs/function_notes/NEEDS_REVIEW.md:580 probably rebuilds a cell/OAM list from +12 via sub_20224E0 (limit 540), sets count at +1040, flushes with sub_200EE74, then sub_214CC04.
- docs/function_notes/hk_19.md:104 probably rebuilds a cell/OAM list from +12 via sub_20224E0 (limit 540), sets count at +1040, flushes with sub_200EE74, then sub_214CC04.
sub_20D13F8
export/plan0/arm9_main/sub_20D13F8_020D13F8.c
- docs/function_notes/NEEDS_REVIEW.md:581 probably frame/timer counter: increments the dword at *off_20D1448 (saturating), calls sub_212B1A8 at 780, returns the 16-bit value at off_20D144C.
- docs/function_notes/hk_19.md:105 probably frame/timer counter: increments the dword at *off_20D1448 (saturating), calls sub_212B1A8 at 780, returns the 16-bit value at off_20D144C.
sub_20D1450
export/plan0/arm9_main/sub_20D1450_020D1450.c
- docs/function_notes/hk_19.md:106 take-and-null getter; returns global at off_20D1460 and clears it.
sub_20D1464
export/plan0/arm9_main/sub_20D1464_020D1464.c
- docs/function_notes/hk_19.md:107 initializes a 128-entry OBJ attribute table: allocates via sub_2036BEC, clears attribute bits, loads assets via sub_20B47C0, clears memory, sets DISPCNT bit 4.
sub_20D159C
export/plan0/arm9_main/sub_20D159C_020D159C.c
- docs/function_notes/hk_19.md:108 flushes and clears 1024 bytes at *off_20D1628+16; if state is 420 calls sub_2036FEC(120,1), or sub_20371A8(120,1) when it equals dword_20D162C.
sub_20D1630
export/plan0/arm9_main/sub_20D1630_020D1630.c
- docs/function_notes/hk_19.md:109 trivial getter returning *off_20D163C.
sub_20D1640
export/plan0/arm9_main/sub_20D1640_020D1640.c
- docs/function_notes/NEEDS_REVIEW.md:582 probably builds a 44-byte text/message resource object at *off_20D1888 from sub_2047A28 asset lookups, plus sub_20B49F4, sub_20B48EC, sub_20B4A7C, sub_20B478C.
- docs/function_notes/hk_19.md:110 probably builds a 44-byte text/message resource object at *off_20D1888 from sub_2047A28 asset lookups, plus sub_20B49F4, sub_20B48EC, sub_20B4A7C, sub_20B478C.
sub_20D18D4
export/plan0/arm9_main/sub_20D18D4_020D18D4.c
- docs/function_notes/hk_19.md:111 draws three cell sprites via sub_20B85DC and sub_20224E0 at a1+8count, attributes from object off_20D1A94, coords <<12; updates count at a1+1024.
sub_20D1A98
export/plan0/arm9_main/sub_20D1A98_020D1A98.c
- docs/function_notes/hk_19.md:112 draws up to five cell sprites with sub_20B85DC and sub_20224E0, count derived from a scaled value at *off_20D1DDC and dword_20D1DE0; updates count at a1+1024.
sub_20D1DE8
export/plan0/arm9_main/sub_20D1DE8_020D1DE8.c
- docs/function_notes/hk_19.md:113 copies a 20-entry table from off_20D1FCC to the stack, writes OBJ placement/scale attributes for a2 (sub_20B4CEC, sub_20AE5C4, sub_20AE4C0).
sub_20D1FD4
export/plan0/arm9_main/sub_20D1FD4_020D1FD4.c
- docs/function_notes/hk_19.md:114 gets value via sub_20B33F4; if state conditions hold, calls sub_20D1DE8, then sub_20D18D4 (count<10) or sub_20D1A98.
sub_20D2094
export/plan0/arm9_main/sub_20D2094_020D2094.c
- docs/function_notes/hk_19.md:116 take-and-null getter; returns global at off_20D20A4 and clears it.
sub_20D20A8
export/plan0/arm9_main/sub_20D20A8_020D20A8.c
- docs/function_notes/hk_19.md:117 allocates 40 bytes via sub_2036BEC into *off_20D2174, sets a mode field from state (5 -> 4, 3 with +28==2 -> +984 16-bit, else 0), sub_20B4CEC with scale 4096.
sub_20D2178
export/plan0/arm9_main/sub_20D2178_020D2178.c
- docs/function_notes/NEEDS_REVIEW.md:583 probably encodes a number into a digit bitmask: divides a1 by dword_20D21E8, 100 and 10 via sub_2133068 and returns OR of 1<<digit for each place.
- docs/function_notes/hk_19.md:118 probably encodes a number into a digit bitmask: divides a1 by dword_20D21E8, 100 and 10 via sub_2133068 and returns OR of 1<<digit for each place.
sub_20D21EC
export/plan0/arm9_main/sub_20D21EC_020D21EC.c
- docs/function_notes.md:278 loads MapObj/
from the course archive - docs/function_notes/NEEDS_REVIEW.md:584 probably formats a "MapObj/%s"-style path via sub_2135048 with dword_20D2208 and off_20D220C, then loads it with sub_2047974.
- docs/function_notes/hk_19.md:119 probably formats a "MapObj/%s"-style path via sub_2135048 with dword_20D2208 and off_20D220C, then loads it with sub_2047974.
sub_20D2210
export/plan0/arm9_main/sub_20D2210_020D2210.c
- docs/function_notes.md:279 loads MapObj/
from the course texture archive - docs/function_notes/NEEDS_REVIEW.md:585 formats a name into a 264-byte stack buffer via sub_2135048 (MapObj/%s-style string) and passes it to sub_2047B08 [REVIEW]
- docs/function_notes/hk_20.md:3 formats a name into a 264-byte stack buffer via sub_2135048 (MapObj/%s-style string) and passes it to sub_2047B08 [REVIEW]
sub_20D2234
export/plan0/arm9_main/sub_20D2234_020D2234.c
- docs/function_notes/NEEDS_REVIEW.md:586 splits u16 id *a1 into hundreds and remainder (base 100) and returns sub_20D6D8C(...) && sub_20D6D34(...)==2 on object +68 [REVIEW]
- docs/function_notes/hk_20.md:4 splits u16 id *a1 into hundreds and remainder (base 100) and returns sub_20D6D8C(...) && sub_20D6D34(...)==2 on object +68 [REVIEW]
- docs/function_notes/review_haiku1.md:1 Divides value from a1[0] by 100 to get quotient and remainder, calls sub_20D6D8C and sub_20D6D34 with these values
sub_20D22C0
export/plan0/arm9_main/sub_20D22C0_020D22C0.c
- docs/function_notes/hk_20.md:5 trivial getter, returns the int behind global pointer off_20D22CC
sub_20D22D0
export/plan0/arm9_main/sub_20D22D0_020D22D0.c
- vm_model/src/mapobj/mod.rs:27 The objects' random numbers (
sub_20D22D0: NitroSDKMATH_Rand32, - game/src/objects.rs:900 What the objects share: their random numbers (
sub_20D22D0) and the kart whose turn it is - docs/function_notes.md:154 the objects' random context (NitroSDK MATH_Rand32 at *0x0217B49C)
- docs/function_notes.md:445 returns the objects' RNG state pointer (arg ignored); sub_2091F6C(rng, n) = (hi word after step * n) >> 32; sub_2046524 same truncated to u16
sub_20D22E0
export/plan0/arm9_main/sub_20D22E0_020D22E0.c
- docs/function_notes/NEEDS_REVIEW.md:587 picks one of two global value sets based on (off_20D2328[0]+8)==5, writes a computed value to a global pointer and stores the sum with dword_20D2334 into off_20D2338 [REVIEW]
- docs/function_notes/hk_20.md:6 picks one of two global value sets based on (off_20D2328[0]+8)==5, writes a computed value to a global pointer and stores the sum with dword_20D2334 into off_20D2338 [REVIEW]
- docs/function_notes/review_haiku1.md:2 Conditionally calculates offset and value based on pointer dereference, returns computed result
sub_20D233C
export/plan0/arm9_main/sub_20D233C_020D233C.c
- docs/function_notes/hk_20.md:7 resets object flags a1[1] (folds low nibble into high nibble, clears bit 0x100), sets a1[51]=31 when bit 1 is clear, calls sub_20D50EC(a1[50],-1) if slot valid
sub_20D2398
export/plan0/arm9_main/sub_20D2398_020D2398.c
- vm_model/src/shine.rs:76 The object deletes itself (
sub_20D2398). - vm_model/src/mapobj/bats.rs:95
sub_20924D8: one tick; false when the bat is deleted (sub_20D2398). - docs/function_notes/NEEDS_REVIEW.md:588 rebuilds object flag word a1+2: keeps low 12 bits, copies low nibble to top, ORs four global flag words, calls sub_20D5114 if a1+100 != -1 [REVIEW]
- docs/function_notes/hk_20.md:8 rebuilds object flag word a1+2: keeps low 12 bits, copies low nibble to top, ORs four global flag words, calls sub_20D5114 if a1+100 != -1 [REVIEW]
sub_20D2450
export/plan0/arm9_main/sub_20D2450_020D2450.c
- docs/function_notes/NEEDS_REVIEW.md:589 probes collision with sub_1FFDEE4 (a1+4, mask 0xA000); on hit converts the result via sub_20D7B88 and stores it at a1+40 with sub_1FFCCD0 [REVIEW]
- docs/function_notes/hk_20.md:9 probes collision with sub_1FFDEE4 (a1+4, mask 0xA000); on hit converts the result via sub_20D7B88 and stores it at a1+40 with sub_1FFCCD0 [REVIEW]
- docs/function_notes/review_haiku1.md:3 Allocates memory via sub_1FFDEE4 with flags 40960, calls sub_20D7B88 and sub_1FFCCD0 to transform and return result
sub_20D24D8
export/plan0/arm9_main/sub_20D24D8_020D24D8.c
- docs/function_notes/NEEDS_REVIEW.md:590 stores a2 into result+108 (speed-like field); racer state 3 forces dword_20D2524, otherwise clamps to a limit at +32 of a global struct [REVIEW]
- docs/function_notes/hk_20.md:10 stores a2 into result+108 (speed-like field); racer state 3 forces dword_20D2524, otherwise clamps to a limit at +32 of a global struct [REVIEW]
- docs/function_notes/review_haiku1.md:4 Sets field at a1+108 to a2, clamps to max value or uses alternate if condition at a2+12 equals 3
sub_20D252C
export/plan0/arm9_main/sub_20D252C_020D252C.c
- docs/function_notes.md:521 object broadphase radius: |sizes| for shapes 3..5, else size x
- docs/function_notes/hk_20.md:11 switch on *(a1+152)+8; types 3-5 return sub_21482CC(a1+88) (vector length), other types return raw a1+88
sub_20D2584
export/plan0/arm9_main/sub_20D2584_020D2584.c
- docs/function_notes/NEEDS_REVIEW.md:591 sets a1+92 = (a2*a1[32])>>12 (fixed-point scale); if slot a1+100 >= 0 calls sub_20D5148(slot, value) with the same type-based magnitude choice [REVIEW]
- docs/function_notes/hk_20.md:12 sets a1+92 = (a2*a1[32])>>12 (fixed-point scale); if slot a1+100 >= 0 calls sub_20D5148(slot, value) with the same type-based magnitude choice [REVIEW]
- docs/function_notes/review_haiku1.md:5 Sets field at a1+92 with scaled multiplication, calls sub_21482CC or uses value at +88 based on condition at +152+8
sub_20D2600
export/plan0/arm9_main/sub_20D2600_020D2600.c
- docs/function_notes/NEEDS_REVIEW.md:592 gets value from sub_20D4EF4, compares to a per-type threshold in off_20D2664 (type 2 vs others); if below it queues an event via sub_210B7A8 [REVIEW]
- docs/function_notes/hk_20.md:13 gets value from sub_20D4EF4, compares to a per-type threshold in off_20D2664 (type 2 vs others); if below it queues an event via sub_210B7A8 [REVIEW]
- docs/function_notes/review_haiku1.md:6 Calls sub_20D4EF4 to compute value, conditionally calls sub_210B7A8 if result below table threshold
sub_20D2668
export/plan0/arm9_main/sub_20D2668_020D2668.c
- docs/function_notes.md:39 the object's own reaction to a kart touching it
- docs/function_notes.md:237 object sound-context selection wrapper around sub_2024A28 when class sound entry is enabled; not the own-object reaction dispatcher (earlier project notes attributed reactions here incorrectly)
sub_20D26E0
export/plan0/arm9_main/sub_20D26E0_020D26E0.c
- vm_model/src/mapobj/boo.rs:55 Not ported: the ambient sound
sub_20D26E0(.., 286)while Boos live, the bakubaku's landing - vm_model/src/mapobj/boo.rs:708 the generator is the game's shared one: the ambient sound (sub_20D26E0, 286)
- docs/function_notes/hk_20.md:14 thunk, tail-calls function pointer off_20D26E8(a1,a2)
sub_20D26EC
export/plan0/arm9_main/sub_20D26EC_020D26EC.c
- docs/function_notes/hk_20.md:15 thunk, tail-calls function pointer off_20D26F4(a1,a2)
sub_20D26F8
export/plan0/arm9_main/sub_20D26F8_020D26F8.c
- docs/function_notes.md:238 traffic crash sound 232 for kart mode 1 or 3; physics kick itself is dispatched separately through sub_20E2494
sub_20D275C
export/plan0/arm9_main/sub_20D275C_020D275C.c
- vm_model/src/mapobj/airship.rs:14 Not ported (all of them): sounds and effects (
sub_210B7A8/sub_208B7BC/sub_20D275C), - vm_model/src/mapobj/bats.rs:19 flap animation frame (+0xAC,
sub_209B634), the flap sound (sub_20D275C, 357) and the draw. - vm_model/src/mapobj/drawbridge.rs:12 angular-velocity vectors at +0x124..), the creak sound (
sub_20D275C, effect 393), the upper - vm_model/src/mapobj/rock.rs:12 Not ported: the roll of the model (
sub_20D275C), the burst effects (84..87). - vm_model/src/mapobj/thwomp.rs:11 the turn it does while moving with setting 0 set (
sub_20D275C), the landing's camera shake,
sub_20D2774
export/plan0/arm9_main/sub_20D2774_020D2774.c
- docs/function_notes/hk_20.md:16 plays a sound/effect through off_20D2788 with handle a1+148, volume 127, flag 0
sub_20D278C
export/plan0/arm9_main/sub_20D278C_020D278C.c
- docs/function_notes/hk_20.md:17 creates a 68-byte sound/effect object (sub_2036BEC from heap pool sub_20364E0), stores it at a1+148, init with sub_2109110 type 4, sets a1+112 from table off_20D27F8, sets flags via sub_210CFBC if bit0 set
sub_20D27FC
export/plan0/arm9_main/sub_20D27FC_020D27FC.c
- docs/function_notes/NEEDS_REVIEW.md:593 same sound/effect object creator as sub_20D278C but type 3 and table off_20D2868 [REVIEW]
- docs/function_notes/hk_20.md:18 same sound/effect object creator as sub_20D278C but type 3 and table off_20D2868 [REVIEW]
- docs/function_notes/review_haiku1.md:7 Initializes object via sub_20364E8/sub_20364E0, sets field at a1+148, calls sub_2109110 with type 3
sub_20D286C
export/plan0/arm9_main/sub_20D286C_020D286C.c
- docs/function_notes/hk_20.md:19 same creator pattern with a 96-byte object, type 2, table off_20D28DC; returns object+68
sub_20D28E0
export/plan0/arm9_main/sub_20D28E0_020D28E0.c
- docs/function_notes/NEEDS_REVIEW.md:594 same creator pattern with a 68-byte object, type 2, table off_20D294C [REVIEW]
- docs/function_notes/hk_20.md:20 same creator pattern with a 68-byte object, type 2, table off_20D294C [REVIEW]
- docs/function_notes/review_haiku1.md:8 Initializes object, sets field at a1+148, calls sub_2109110 with type 2
sub_20D2950
export/plan0/arm9_main/sub_20D2950_020D2950.c
- docs/function_notes/hk_20.md:21 sets a1+88 = (a2*a1[28])>>12; if slot a1+100 >= 0 calls sub_20D5148 with type-based magnitude (mirror of sub_20D2584)
sub_20D29CC
export/plan0/arm9_main/sub_20D29CC_020D29CC.c
- vm_model/src/obj_collision.rs:3
sub_20D29CC).sub_20D41E0tests the kart's sphere against every registered object - vm_model/src/obj_collision.rs:299
sub_20D29CC: class sizes times the object's scale. - docs/function_notes.md:20 object sizes = class sizes x object scale (+88/+92/+96)
sub_20D2B78
export/plan0/arm9_main/sub_20D2B78_020D2B78.c
- docs/function_notes/NEEDS_REVIEW.md:595 getter; returns field +12 of the global active object if set, else +dword_20D2BAC of a second global struct when its counter is nonzero, else 0 [REVIEW]
- docs/function_notes/hk_20.md:22 getter; returns field +12 of the global active object if set, else +dword_20D2BAC of a second global struct when its counter is nonzero, else 0 [REVIEW]
- docs/function_notes/review_haiku1.md:9 Returns value from conditional pointer dereference chain or 0 if conditions fail
sub_20D2BB0
export/plan0/arm9_main/sub_20D2BB0_020D2BB0.c
- docs/function_notes/NEEDS_REVIEW.md:596 same getter pattern as sub_20D2B78, returning field +8 [REVIEW]
- docs/function_notes/hk_20.md:23 same getter pattern as sub_20D2B78, returning field +8 [REVIEW]
- docs/function_notes/review_haiku1.md:10 Returns value from conditional pointer dereference chain or 0 if conditions fail
sub_20D2BE8
export/plan0/arm9_main/sub_20D2BE8_020D2BE8.c
- docs/function_notes/NEEDS_REVIEW.md:597 same getter pattern as sub_20D2B78, returning field +4 [REVIEW]
- docs/function_notes/hk_20.md:24 same getter pattern as sub_20D2B78, returning field +4 [REVIEW]
- docs/function_notes/review_haiku1.md:11 Returns value from conditional pointer dereference chain or 0 if conditions fail
sub_20D2C20
export/plan0/arm9_main/sub_20D2C20_020D2C20.c
- docs/function_notes/hk_20.md:25 trivial getter, returns *off_20D2C28
sub_20D2C2C
export/plan0/arm9_main/sub_20D2C2C_020D2C2C.c
- docs/function_notes.md:23 item/other sphere vs objects (same shape test)
sub_20D2D94
export/plan0/arm9_main/sub_20D2D94_020D2D94.c
- docs/function_notes/NEEDS_REVIEW.md:598 clears 24 pointer slots (zeroing a back-pointer at +40 when set) then 16 slots (back-pointer at +36) in a global table [REVIEW]
- docs/function_notes/hk_20.md:26 clears 24 pointer slots (zeroing a back-pointer at +40 when set) then 16 slots (back-pointer at +36) in a global table [REVIEW]
- docs/function_notes/review_haiku1.md:12 Iterates 24 items and 16 items, zeros each and their dereferenced pointers at +40 and +36
sub_20D2DEC
export/plan0/arm9_main/sub_20D2DEC_020D2DEC.c
- docs/function_notes/NEEDS_REVIEW.md:599 runs the +8 callback of each entry in a table (count is a u16 from a header); generic update dispatcher [REVIEW]
- docs/function_notes/hk_20.md:27 runs the +8 callback of each entry in a table (count is a u16 from a header); generic update dispatcher [REVIEW]
- docs/function_notes/review_haiku1.md:13 Gets count from data, iterates array calling functions at +8 offset until count reached
sub_20D2E24
export/plan0/arm9_main/sub_20D2E24_020D2E24.c
- docs/function_notes/NEEDS_REVIEW.md:600 water surface update: calls sub_20D9900 (water model setup) if a global is set, then sub_20E52BC, then runs +8 callbacks of list entries [REVIEW]
- docs/function_notes/hk_20.md:28 water surface update: calls sub_20D9900 (water model setup) if a global is set, then sub_20E52BC, then runs +8 callbacks of list entries [REVIEW]
- docs/function_notes/review_haiku1.md:14 Gets count from data, calls sub_20D9900/sub_20E52BC, then iterates array calling functions at +8 offset
sub_20D2E6C
export/plan0/arm9_main/sub_20D2E6C_020D2E6C.c
- docs/function_notes.md:1646 race/course object-list initialiser (1584 bytes): allocates the heap blocks (sub_2036BEC on the pool from sub_20364E8 / sub_20364E0), sets the list counters from sub_2061788 and the table at off_20D319C, and calls sub_20D22E0
- docs/function_notes/NEEDS_REVIEW.md:601 race/course object-list initialiser (1.5KB): allocates heap blocks, resets slot tables, classifies 60-byte object records by type into lists, calls sub_20D34E4 and sub_20E6FC4 etc., ends with sub_20D2DEC [REVIEW]
- docs/function_notes/hk_20.md:29 race/course object-list initialiser (1.5KB): allocates heap blocks, resets slot tables, classifies 60-byte object records by type into lists, calls sub_20D34E4 and sub_20E6FC4 etc., ends with sub_20D2DEC [REVIEW]
sub_20D34C4
export/plan0/arm9_main/sub_20D34C4_020D34C4.c
- docs/function_notes/hk_20.md:30 thunk, tail-calls off_20D34D0(a2, a1, 0)
sub_20D34D4
export/plan0/arm9_main/sub_20D34D4_020D34D4.c
- docs/function_notes/hk_20.md:31 thunk, tail-calls off_20D34E0(a2, 0, a1)
sub_20D34E4
export/plan0/arm9_main/sub_20D34E4_020D34E4.c
- docs/function_notes.md:1645 1.5 KB per-object record registration: walks the object list at off_20D37E8 (count), tests per-object flags through several predicates (sub_20DFF70, sub_20E4320, sub_20E3AF0, sub_20FFABC) and rebuilds the global object lists
- docs/function_notes/NEEDS_REVIEW.md:602 1.5KB per-object record registration: tests per-object flags via sub_20DFF70, sub_20E4320, sub_20E3AF0, sub_20FFABC and rebuilds lists in the global list struct [REVIEW]
- docs/function_notes/hk_20.md:32 1.5KB per-object record registration: tests per-object flags via sub_20DFF70, sub_20E4320, sub_20E3AF0, sub_20FFABC and rebuilds lists in the global list struct [REVIEW]
sub_20D3AE0
export/plan0/arm9_main/sub_20D3AE0_020D3AE0.c
- docs/function_notes/NEEDS_REVIEW.md:603 if a1 >= dword_20D3B08 sets a2 flag bits from off_20D3B0C and subtracts it; then stores sub_20D2178(a1) into a2+116 [REVIEW]
- docs/function_notes/hk_20.md:33 if a1 >= dword_20D3B08 sets a2 flag bits from off_20D3B0C and subtracts it; then stores sub_20D2178(a1) into a2+116 [REVIEW]
- docs/function_notes/review_haiku1.md:15 Compares a1 with dword_20D3B08, optionally sets flag at a2+2, calls sub_20D2178, stores result at a2+116
sub_20D3B10
export/plan0/arm9_main/sub_20D3B10_020D3B10.c
- docs/function_notes/NEEDS_REVIEW.md:604 pass over an object-pointer list (count u16 at +4): for objects with flag 0x80 set, clears it, rebuilds the 0xFFF0 flag nibble mask from dword_20D3B70 and calls sub_20D50EC on slot +100 [REVIEW]
- docs/function_notes/hk_20.md:34 pass over an object-pointer list (count u16 at +4): for objects with flag 0x80 set, clears it, rebuilds the 0xFFF0 flag nibble mask from dword_20D3B70 and calls sub_20D50EC on slot +100 [REVIEW]
- docs/function_notes/review_haiku1.md:16 Iterates items checking flag at +2, clears 0x80 bit, masks and shifts bits, optionally calls sub_20D50EC for some
sub_20D3B74
export/plan0/arm9_main/sub_20D3B74_020D3B74.c
- docs/function_notes/NEEDS_REVIEW.md:605 second flag-refresh pass over another object list: for flag 0x80 objects, clears it if bit in dword_20D3BF0 set, else masks with dword_20D3BF4, folds nibble, ORs global and calls sub_20D5114 [REVIEW]
- docs/function_notes/hk_20.md:35 second flag-refresh pass over another object list: for flag 0x80 objects, clears it if bit in dword_20D3BF0 set, else masks with dword_20D3BF4, folds nibble, ORs global and calls sub_20D5114 [REVIEW]
- docs/function_notes/review_haiku1.md:17 Iterates items checking flag at +2, clears or masks bits conditionally, optionally calls sub_20D5114
sub_20D3BF8
export/plan0/arm9_main/sub_20D3BF8_020D3BF8.c
- docs/function_notes/NEEDS_REVIEW.md:606 counts entries in the list at *off_20D3C28 whose first u16 equals a1 (linear search count) [REVIEW]
- docs/function_notes/hk_20.md:36 counts entries in the list at *off_20D3C28 whose first u16 equals a1 (linear search count) [REVIEW]
- docs/function_notes/review_haiku1.md:18 Counts items in array that match a1 value, returns count
sub_20D3C2C
export/plan0/arm9_main/sub_20D3C2C_020D3C2C.c
- docs/function_notes/hk_20.md:37 post-increment counter: returns the u16 at *off_20D3C40 and stores value+1 back (simple ID allocator)
sub_20D3C44
export/plan0/arm9_main/sub_20D3C44_020D3C44.c
- vm_model/src/mapobj/boo.rs:47 polygon alpha; 0 = not drawn), the polygon id cycling per
sub_20D3C44, scale [Boo::scale] - docs/function_notes/NEEDS_REVIEW.md:607 cyclic index: increments u16 at off_20D3C74, wraps to off_20D3C78 when it exceeds 0x3E, returns the new value [REVIEW]
- docs/function_notes/hk_20.md:38 cyclic index: increments u16 at off_20D3C74, wraps to off_20D3C78 when it exceeds 0x3E, returns the new value [REVIEW]
sub_20D3C7C
export/plan0/arm9_main/sub_20D3C7C_020D3C7C.c
- docs/function_notes/hk_20.md:39 sets the int at +696 of global struct *off_20D3C90 to 1 (dirty/needs-refresh flag) and returns the pointer; stub-like setter
sub_20D3C94
export/plan0/arm9_main/sub_20D3C94_020D3C94.c
- vm_model/src/shine.rs:63
sub_20D3C94: sphere of the shine against the moving objects; push-out if it touches one. - docs/function_notes/hk_20.md:40 thin wrapper; calls sub_20D2C2C(a1+4, a1+16, a1+88, s16 a1+100, a2, a3) (sphere vs objects, same shape test)
sub_20D3CC8
export/plan0/arm9_main/sub_20D3CC8_020D3CC8.c
- docs/function_notes/NEEDS_REVIEW.md:608 loops over u16 count at +372 of a global struct, calling sub_20E6FD4 on each object pointer at +308 [REVIEW]
- docs/function_notes/hk_20.md:41 loops over u16 count at +372 of a global struct, calling sub_20E6FD4 on each object pointer at +308 [REVIEW]
- docs/function_notes/review_haiku1.md:19 Iterates items at offset +308, calls sub_20E6FD4 on each item
sub_20D3D10
export/plan0/arm9_main/sub_20D3D10_020D3D10.c
- docs/function_notes.md:503 true when y is more than 50 units (-204800) below the water surface (**0x217B4B8)
- docs/function_notes/NEEDS_REVIEW.md:609 returns TRUE when a1 - (off_20D3D44) < -204800 (range/distance threshold test against a reference value) [REVIEW]
- docs/function_notes/hk_20.md:42 returns TRUE when a1 - (off_20D3D44) < -204800 (range/distance threshold test against a reference value) [REVIEW]
sub_20D3D48
export/plan0/arm9_main/sub_20D3D48_020D3D48.c
- docs/function_notes.md:502 height of a point above the water surface: y - (0x217B4C4 water object)+4 when that object (+368 active), else y - *0x217B4B8, else 9999.0 (no water)
- docs/function_notes/NEEDS_REVIEW.md:610 returns a1 minus a reference value taken from global object +4 (if +368 set) or *off_20D3D8C, else default dword_20D3D90 [REVIEW]
- docs/function_notes/hk_20.md:43 returns a1 minus a reference value taken from global object +4 (if +368 set) or *off_20D3D8C, else default dword_20D3D90 [REVIEW]
sub_20D3D94
export/plan0/arm9_main/sub_20D3D94_020D3D94.c
- docs/function_notes.md:504 water object (*0x217B4C4) active flag (+368); sub_20D3E18: a course water pointer (0x217B4B8 side) exists
- docs/function_notes.md:1693 kart water step gate: the water object is active (+0x170); only then sub_1FFA4B4 runs sub_206FE08
- docs/function_notes/hk_20.md:44 returns TRUE when global object (off_20D3DB8) has nonzero field +368; flag getter
sub_20D3DBC
export/plan0/arm9_main/sub_20D3DBC_020D3DBC.c
- docs/function_notes/hk_20.md:45 returns u16 at +44 of global object off_20D3DD4, or 0 when absent; getter
sub_20D3DD8
export/plan0/arm9_main/sub_20D3DD8_020D3DD8.c
- docs/function_notes/hk_20.md:46 returns int at +48 of global object off_20D3DF0, or 0 when absent; getter
sub_20D3DF4
export/plan0/arm9_main/sub_20D3DF4_020D3DF4.c
- docs/function_notes/NEEDS_REVIEW.md:611 returns a1 minus int at +4 of global object off_20D3E10, else dword_20D3E14 (camera-relative offset) [REVIEW]
- docs/function_notes/hk_20.md:47 returns a1 minus int at +4 of global object off_20D3E10, else dword_20D3E14 (camera-relative offset) [REVIEW]
- docs/function_notes/review_haiku1.md:20 Returns a1 minus value from pointer dereference at +4, or returns dword_20D3E14
sub_20D3E18
export/plan0/arm9_main/sub_20D3E18_020D3E18.c
- docs/function_notes/hk_20.md:48 returns TRUE when the global pointer at off_20D3E30 is non-null
sub_20D3E34
export/plan0/arm9_main/sub_20D3E34_020D3E34.c
- vm_model/src/obj_collision.rs:4 (
sub_20D3E34) and sums the pushes; the object's id picks a hit handler from the per-group - vm_model/src/obj_collision.rs:294 Object flag +2 bit 0; sub_20D3E34 rejects before any shape callback.
- vm_model/src/obj_collision.rs:307
sub_20D3E34: does a sphere (p, radiusr) touch the object? Returns the push that - docs/function_notes.md:15 rejects object flag +2 bit 0 before any shape test; then class shape (+152 -> +8): 1 sphere, 2 cylinder, 3 tilted cylinder, 4 box, 5 callback; traffic bounce-pending bit therefore disables contact until first rebound
sub_20D4104
export/plan0/arm9_main/sub_20D4104_020D4104.c
- docs/function_notes/hk_20.md:49 returns address of 12-byte table entry a1 (off_20D4118 + 12a1)
sub_20D411C
export/plan0/arm9_main/sub_20D411C_020D411C.c
- docs/function_notes/hk_20.md:50 returns the word at index a1 of the table at *off_20D412C (4-byte entries)
sub_20D4130
export/plan0/arm9_main/sub_20D4130_020D4130.c
- docs/function_notes/NEEDS_REVIEW.md:612 builds the near-object list via sub_20D5180(a1,a2,0x2000), then collects entries whose type == a3 within distance a2 (squared compare, x and z) of a1; returns count [REVIEW]
- docs/function_notes/hk_20.md:51 builds the near-object list via sub_20D5180(a1,a2,0x2000), then collects entries whose type == a3 within distance a2 (squared compare, x and z) of a1; returns count [REVIEW]
- docs/function_notes/review_haiku1.md:21 Filters items by distance, calls sub_20D5180 with flag 0x2000, returns count of matching items
sub_20D41E0
export/plan0/arm9_main/sub_20D41E0_020D41E0.c
- vm_model/src/obj_collision.rs:3
sub_20D29CC).sub_20D41E0tests the kart's sphere against every registered object - vm_model/src/obj_collision.rs:470
sub_20D41E0: every object the kart's sphere touches (at most 32), and the combined push: - docs/function_notes.md:13 kart sphere vs every registered object (near list), sums the pushes (min + max per axis)
sub_20D4418
export/plan0/arm9_main/sub_20D4418_020D4418.c
- docs/function_notes/NEEDS_REVIEW.md:613 dispatch on enable flags of global object at +380/+384/+388: calls sub_20DFF88, sub_20E435C or sub_20E3B28 on a1+48 when set [REVIEW]
- docs/function_notes/hk_20.md:52 dispatch on enable flags of global object at +380/+384/+388: calls sub_20DFF88, sub_20E435C or sub_20E3B28 on a1+48 when set [REVIEW]
- docs/function_notes/review_haiku1.md:22 Conditionally calls sub_20DFF88, sub_20E435C, and sub_20E3B28 on a1+48 based on flags
sub_20D4484
export/plan0/arm9_main/sub_20D4484_020D4484.c
- docs/function_notes/NEEDS_REVIEW.md:614 object-manager tick: sub_20D4D44(a1+48), optional sub_20D9E60, then two object lists (counts at +298 and +300) each calling +12 and +20 callbacks around sub_20D4C28; ends with sub_20E6A74 [REVIEW]
- docs/function_notes/hk_20.md:53 object-manager tick: sub_20D4D44(a1+48), optional sub_20D9E60, then two object lists (counts at +298 and +300) each calling +12 and +20 callbacks around sub_20D4C28; ends with sub_20E6A74 [REVIEW]
- docs/function_notes/review_haiku1.md:23 Calls sub_20D4D44, iterates items calling virtual functions at +12 and +20, calls sub_20D4C28 on each
sub_20D4590
export/plan0/arm9_main/sub_20D4590_020D4590.c
- docs/function_notes/NEEDS_REVIEW.md:615 per-frame update: handles sub_20B33F4 state (-115 calls sub_20D3B74, 360 calls sub_20D3B10), runs +12/+20 callbacks and sub_20E705C on the object list at +308 when flag +696 set, then sub_20D4698 or sub_20D47E0 by sub_20D50B4, then sub_20D9F8C [REVIEW]
- docs/function_notes/hk_20.md:54 per-frame update: handles sub_20B33F4 state (-115 calls sub_20D3B74, 360 calls sub_20D3B10), runs +12/+20 callbacks and sub_20E705C on the object list at +308 when flag +696 set, then sub_20D4698 or sub_20D47E0 by sub_20D50B4, then sub_20D9F8C [REVIEW]
- docs/function_notes/review_haiku1.md:24 Calls sub_20B33F4, conditionally calls sub_20D3B74/sub_20D3B10, iterates items calling functions, calls either sub_20D4698 or sub_20D47E0
sub_20D4698
export/plan0/arm9_main/sub_20D4698_020D4698.c
- docs/function_notes/NEEDS_REVIEW.md:616 per-object visibility/cull pass over list at *off_20D47D4: clears flag 8 at +120 and either applies global flags (if owner id matches) or recomputes via sub_1FFD648/sub_1FFD778 and sets timer +102 to 0 or 31 [REVIEW]
- docs/function_notes/hk_20.md:55 per-object visibility/cull pass over list at *off_20D47D4: clears flag 8 at +120 and either applies global flags (if owner id matches) or recomputes via sub_1FFD648/sub_1FFD778 and sets timer +102 to 0 or 31 [REVIEW]
- docs/function_notes/review_haiku1.md:25 Iterates items, manipulates flags at +120 and +2, conditionally calls sub_1FFD648 or sub_1FFD778 for collision
sub_20D47E0
export/plan0/arm9_main/sub_20D47E0_020D47E0.c
- docs/function_notes/NEEDS_REVIEW.md:617 staggered variant of sub_20D4698 (only objects with index&3 == frame&3): decrements or increments timer +102 (cap 0x1F) and runs the same cull tests [REVIEW]
- docs/function_notes/hk_20.md:56 staggered variant of sub_20D4698 (only objects with index&3 == frame&3): decrements or increments timer +102 (cap 0x1F) and runs the same cull tests [REVIEW]
- docs/function_notes/review_haiku1.md:26 Iterates items, increments/decrements counter at +102, conditionally calls sub_1FFD648 or sub_1FFD778 for collision
sub_20D4970
export/plan0/arm9_main/sub_20D4970_020D4970.c
- docs/function_notes/hk_20.md:57 trivial setter, stores a1 into global off_20D497C
sub_20D4980
export/plan0/arm9_main/sub_20D4980_020D4980.c
- docs/function_notes/hk_20.md:58 trivial setter, stores a1 into global off_20D498C
sub_20D4990
export/plan0/arm9_main/sub_20D4990_020D4990.c
- docs/function_notes/NEEDS_REVIEW.md:618 allocates a copy of the pointer array (4count at +2) from the heap into a1[9] when a1[7] is set, otherwise aliases a1[9] to a1 [REVIEW]
- docs/function_notes/hk_20.md:59 allocates a copy of the pointer array (4count at +2) from the heap into a1[9] when a1[7] is set, otherwise aliases a1[9] to a1 [REVIEW]
- docs/function_notes/review_haiku1.md:27 Checks a1[7], allocates memory via sub_20364E8/sub_20364E0 and copies data to a1[9]
sub_20D49D8
export/plan0/arm9_main/sub_20D49D8_020D49D8.c
- docs/function_notes/hk_20.md:60 stores pointer a1 into the +40 field of the object at *a1 (back-pointer setter)
sub_20D49E0
export/plan0/arm9_main/sub_20D49E0_020D49E0.c
- docs/function_notes/hk_20.md:61 appends pointer a2 to a list (list at *a1, count u16 at +4); returns byte offset of the new slot
sub_20D49F0
export/plan0/arm9_main/sub_20D49F0_020D49F0.c
- docs/function_notes/hk_20.md:62 allocates a zeroed-count pointer array of 4capacity (capacity u16 at +4) from the heap into a1, count reset to 0
sub_20D4A10
export/plan0/arm9_main/sub_20D4A10_020D4A10.c
- docs/function_notes/hk_20.md:63 adds s16 a2 to the u16 count at +4 of list a1 (count adjust), returns a1
sub_20D4A18
export/plan0/arm9_main/sub_20D4A18_020D4A18.c
- docs/function_notes/hk_20.md:64 resets list a1 to empty (pointer 0, count 0)
sub_20D4A20
export/plan0/arm9_main/sub_20D4A20_020D4A20.c
- docs/function_notes/NEEDS_REVIEW.md:619 436-byte setup of a box/basis for global object off_20D4BD4: writes scaled extents (16a5, 16a6), negates axes when byte +87 of a global is set, normalises axis vectors via sub_2039860 [REVIEW]
- docs/function_notes/hk_20.md:65 436-byte setup of a box/basis for global object off_20D4BD4: writes scaled extents (16a5, 16a6), negates axes when byte +87 of a global is set, normalises axis vectors via sub_2039860 [REVIEW]
- docs/function_notes/review_haiku1.md:28 Performs matrix/transformation calculations using sub_2133048, sets up matrix values with conditional bit flipping
sub_20D4BF0
export/plan0/arm9_main/sub_20D4BF0_020D4BF0.c
- docs/function_notes/NEEDS_REVIEW.md:620 sets flags +80=1, +84=0 on global off_20D4C14 and selects dword_20D4C1C (racer type 2) or dword_20D4C24 into off_20D4C20 [REVIEW]
- docs/function_notes/hk_20.md:66 sets flags +80=1, +84=0 on global off_20D4C14 and selects dword_20D4C1C (racer type 2) or dword_20D4C24 into off_20D4C20 [REVIEW]
- docs/function_notes/review_haiku1.md:29 Sets fields at +20 and +21, conditionally sets value based on a2+12 equals 2
sub_20D4C28
export/plan0/arm9_main/sub_20D4C28_020D4C28.c
- docs/function_notes.md:131 object manager: calls the kind's +0x10 callback (draw) for each live instance
sub_20D4D44
export/plan0/arm9_main/sub_20D4D44_020D4D44.c
- docs/function_notes/hk_20.md:67 calls sub_20E6DF0 then sub_20D7BEC(a1) (angle computation wrapper)
sub_20D4D60
export/plan0/arm9_main/sub_20D4D60_020D4D60.c
- docs/function_notes/NEEDS_REVIEW.md:621 visibility test: TRUE if a2 > a1[28], else TRUE when a1[2] is outside the Z range +56/+60 of global object, or a1[29] overlaps sub_207A780() [REVIEW]
- docs/function_notes/hk_20.md:68 visibility test: TRUE if a2 > a1[28], else TRUE when a1[2] is outside the Z range +56/+60 of global object, or a1[29] overlaps sub_207A780() [REVIEW]
- docs/function_notes/review_haiku1.md:30 Checks a2 against bounds, returns bounds check result based on values at offset +38
sub_20D4DDC
export/plan0/arm9_main/sub_20D4DDC_020D4DDC.c
- docs/function_notes/NEEDS_REVIEW.md:622 visibility test: TRUE if a1[30] bit 4 set, else TRUE when a1[2] is outside the Z range +56/+60 of a global object [REVIEW]
- docs/function_notes/hk_20.md:69 visibility test: TRUE if a1[30] bit 4 set, else TRUE when a1[2] is outside the Z range +56/+60 of a global object [REVIEW]
- docs/function_notes/review_haiku1.md:31 Checks flag at +30, compares bounds using offset +38, returns out-of-bounds condition
sub_20D4E28
export/plan0/arm9_main/sub_20D4E28_020D4E28.c
- docs/function_notes/NEEDS_REVIEW.md:623 enables or disables an effect/sound object at a1 (sub_210CFBC) based on flag bit 4 of a3 or on distance a2+4 against thresholds -1228800 and *off_20D4EF0 [REVIEW]
- docs/function_notes/hk_20.md:70 enables or disables an effect/sound object at a1 (sub_210CFBC) based on flag bit 4 of a3 or on distance a2+4 against thresholds -1228800 and *off_20D4EF0 [REVIEW]
- docs/function_notes/review_haiku1.md:32 Checks flags to determine distance/visibility, conditionally calls sub_210CFBC for visibility updates
sub_20D4EF4
export/plan0/arm9_main/sub_20D4EF4_020D4EF4.c
- docs/function_notes/hk_20.md:71 returns squared horizontal distance (x,z in 4096 fixed units, >>12) from object a1 to reference point in off_20D4F30; 0 if a1 is null
sub_20D4F34
export/plan0/arm9_main/sub_20D4F34_020D4F34.c
- docs/function_notes/NEEDS_REVIEW.md:624 squared horizontal distance from object a1 to reference off_20D4F8C; packs it as (dist & 0x3FFFFFE0) | flag bit from *off_20D4F90 when dist > a4, plus low bits 3 [REVIEW]
- docs/function_notes/hk_20.md:72 squared horizontal distance from object a1 to reference off_20D4F8C; packs it as (dist & 0x3FFFFFE0) | flag bit from *off_20D4F90 when dist > a4, plus low bits 3 [REVIEW]
- docs/function_notes/review_haiku1.md:33 Calculates distance squared from position, masks bits and conditionally sets flag bit, returns visibility mask
sub_20D4F94
export/plan0/arm9_main/sub_20D4F94_020D4F94.c
- docs/function_notes/NEEDS_REVIEW.md:625 builds a transform: copies a1 matrix via sub_2146D0C, multiplies row vectors via sub_2146D78 into four vector outputs (off_20D5090..50AC) scaled by 16, and toggles latch flags +20/+21 [REVIEW]
- docs/function_notes/hk_20.md:73 builds a transform: copies a1 matrix via sub_2146D0C, multiplies row vectors via sub_2146D78 into four vector outputs (off_20D5090..50AC) scaled by 16, and toggles latch flags +20/+21 [REVIEW]
- docs/function_notes/review_haiku1.md:34 Calls sub_2146D0C and sub_2146D78 for transformation, manipulates matrix at multiple offsets
sub_20D50B4
export/plan0/arm9_main/sub_20D50B4_020D50B4.c
- docs/function_notes/NEEDS_REVIEW.md:626 returns the state word off_20D50C0[21]; selects between sub_20D4698 and sub_20D47E0 [REVIEW]
- docs/function_notes/hk_20.md:74 returns the state word off_20D50C0[21]; selects between sub_20D4698 and sub_20D47E0 [REVIEW]
- docs/function_notes/review_haiku1.md:35 Returns boolean flag from offset +21
sub_20D50C4
export/plan0/arm9_main/sub_20D50C4_020D50C4.c
- docs/function_notes/hk_20.md:75 sets off_20D50DC[20]=1 and [21]=0 (dirty flag setter), returns the pointer
sub_20D50E0
export/plan0/arm9_main/sub_20D50E0_020D50E0.c
- docs/function_notes/hk_20.md:76 trivial getter, returns global pointer off_20D50E8
sub_20D50EC
export/plan0/arm9_main/sub_20D50EC_020D50EC.c
- docs/function_notes/hk_20.md:77 clears bit 0x200 of the u16 at +20 of 28-byte slot entry a1 (object flag clear) in table *off_20D5110
sub_20D5114
export/plan0/arm9_main/sub_20D5114_020D5114.c
- docs/function_notes/hk_20.md:78 sets the flag bits from *off_20D5144 in the u16 at +20 of 28-byte slot entry a1 (object flag set)
sub_20D5148
export/plan0/arm9_main/sub_20D5148_020D5148.c
- docs/function_notes/NEEDS_REVIEW.md:627 stores value a2 at +16 of 28-byte slot entry a1 (table off_20D5178); if bit 0x400 of +20 set, ORs in mask off_20D517C [REVIEW]
- docs/function_notes/hk_20.md:79 stores value a2 at +16 of 28-byte slot entry a1 (table off_20D5178); if bit 0x400 of +20 set, ORs in mask off_20D517C [REVIEW]
- docs/function_notes/review_haiku1.md:36 Sets field at 28*a1+16 to a2, sets bit flag at +20 if 0x400 is already set
sub_20D5180
export/plan0/arm9_main/sub_20D5180_020D5180.c
- docs/function_notes.md:14 builds the near-object list (<=128) from the sorted master array (*0x0217B598, 28-byte entries, object at +24)
sub_20D5344
export/plan0/arm9_main/sub_20D5344_020D5344.c
- docs/function_notes.md:1634 removes slot a1 (< 0x100) from the 256-entry interval index (28-byte entries at *off_20D5544): returns -1 when the slot is empty; otherwise shifts the bucket pointer entries after it and returns the freed index
- docs/function_notes/NEEDS_REVIEW.md:628 removes slot a1 (<0x100) from the 256-entry interval index (28-byte entries at *off_20D5544): shifts bucket pointer entries, decrements bucket counts, returns to free list [REVIEW]
- docs/function_notes/hk_20.md:80 removes slot a1 (<0x100) from the 256-entry interval index (28-byte entries at *off_20D5544): shifts bucket pointer entries, decrements bucket counts, returns to free list [REVIEW]
sub_20D555C
export/plan0/arm9_main/sub_20D555C_020D555C.c
- docs/function_notes.md:519 broadphase registration (28-byte records: x range, object, radius, flags, owner); turning platforms, lava blocks, 204 and 11 get flag 0x1000
- docs/function_notes/NEEDS_REVIEW.md:629 inserts a new entry into the 256-slot interval index: pops a free slot id, fills 28-byte entry (a1[2]+-a2 bounds, pointer a1, radius a2, a3, a4), updates bucket arrays; returns slot or -1 if full [REVIEW]
- docs/function_notes/hk_20.md:81 inserts a new entry into the 256-slot interval index: pops a free slot id, fills 28-byte entry (a1[2]+-a2 bounds, pointer a1, radius a2, a3, a4), updates bucket arrays; returns slot or -1 if full [REVIEW]
sub_20D58C0
export/plan0/arm9_main/sub_20D58C0_020D58C0.c
- docs/function_notes/NEEDS_REVIEW.md:630 init for the interval index: allocates 1024, 1024, 7168 (256*28), 512, 256, 256 and 512 byte arrays from the heap, fills free-list ids and clears entry data; returns 256 [REVIEW]
- docs/function_notes/hk_20.md:82 init for the interval index: allocates 1024, 1024, 7168 (256*28), 512, 256, 256 and 512 byte arrays from the heap, fills free-list ids and clears entry data; returns 256 [REVIEW]
- docs/function_notes/review_haiku1.md:37 Allocates multiple memory blocks for arrays using sub_20364E8/sub_2036BEC, initializes counters
sub_20D59F8
export/plan0/arm9_main/sub_20D59F8_020D59F8.c
- vm_model/src/kart/kcl.rs:121
sub_20D59F8: the hit whose flags overlapmaskthe most (first wins ties).
sub_20D5A68
export/plan0/arm9_main/sub_20D5A68_020D5A68.c
- docs/function_notes/NEEDS_REVIEW.md:631 validity test: TRUE when a2 < 0, or (a1+4) is nonzero, or a3 differs from *a1 [REVIEW]
- docs/function_notes/hk_20.md:83 validity test: TRUE when a2 < 0, or (a1+4) is nonzero, or a3 differs from *a1 [REVIEW]
- docs/function_notes/review_haiku1.md:38 Returns validation condition - a2 < 0 OR (a1 + 4) != 0 OR a3 != *a1
sub_20D5AA0
export/plan0/arm9_main/sub_20D5AA0_020D5AA0.c
- vm_model/src/kart/banana.rs:6 bounce budget; bananas have none), bananas resting on moving collision (
sub_20D5AA0), and the
sub_20D5B8C
export/plan0/arm9_main/sub_20D5B8C_020D5B8C.c
- docs/function_notes/NEEDS_REVIEW.md:632 calls sub_2047974(off_20D5BA4) and passes the result to sub_20D5BAC(off_20D5BA8, v0) (struct copy/rebase wrapper) [REVIEW]
- docs/function_notes/hk_20.md:84 calls sub_2047974(off_20D5BA4) and passes the result to sub_20D5BAC(off_20D5BA8, v0) (struct copy/rebase wrapper) [REVIEW]
- docs/function_notes/review_haiku1.md:39 Calls sub_2047974 then sub_20D5BAC with result and off_20D5BA8
sub_20D5BAC
export/plan0/arm9_main/sub_20D5BAC_020D5BAC.c
- docs/function_notes/NEEDS_REVIEW.md:633 copies a 60-byte struct from a2 into a1, adds base a2 to pointers a1[0..3], clears *off_20D5BEC and returns it [REVIEW]
- docs/function_notes/hk_20.md:85 copies a 60-byte struct from a2 into a1, adds base a2 to pointers a1[0..3], clears *off_20D5BEC and returns it [REVIEW]
- docs/function_notes/review_haiku1.md:40 Copies 16 words from a2 to a1, adjusts pointers by a2 offset, zeros off_20D5BEC
sub_20D5BF0
export/plan0/arm9_main/sub_20D5BF0_020D5BF0.c
- vm_model/src/mapobj/rock.rs:1 Rolling rocks and snowballs (0x192 DK Pass, 0x1B1 Choco Mountain): init
sub_20D5BF0/ - vm_model/src/mapobj/rock.rs:60
sub_20D5BF0:settingsare the object's four setting words,scale_yits scale. - docs/function_notes.md:263 rolling rock / snowball init (speed, bounce, growth, max size, restart delay from settings)
sub_20D5D80
export/plan0/arm9_main/sub_20D5D80_020D5D80.c
- docs/function_notes/NEEDS_REVIEW.md:634 converts two values via sub_20D21EC into sub_20EA588 and sub_20EA55C, then sets up the hardware via sub_2084968 and returns sub_20849C0(...,7) [REVIEW]
- docs/function_notes/hk_20.md:86 converts two values via sub_20D21EC into sub_20EA588 and sub_20EA55C, then sets up the hardware via sub_2084968 and returns sub_20849C0(...,7) [REVIEW]
- docs/function_notes/review_haiku1.md:41 Processes parameters via sub_20D21EC, calls sub_20EA588/sub_20EA55C, returns sub_20849C0
sub_20D5DD0
export/plan0/arm9_main/sub_20D5DD0_020D5DD0.c
- vm_model/src/mapobj/rock.rs:2
sub_20D5DD0, ticksub_20D5FB4, burst and restartsub_20D634C. - vm_model/src/mapobj/rock.rs:102
sub_20D5DD0: back to the start of the path. - docs/function_notes.md:264 rolling rock restart at its path start (hidden for the delay)
- docs/function_notes.md:416 rock (re)start: back to path start, hidden for the restart delay, vy 0x8000, size reset
sub_20D5F64
export/plan0/arm9_main/sub_20D5F64_020D5F64.c
- docs/function_notes/NEEDS_REVIEW.md:635 if a3 == 1 calls sub_20D634C(a1,1); returns byte a4 (event/callback thunk) [REVIEW]
- docs/function_notes/hk_20.md:87 if a3 == 1 calls sub_20D634C(a1,1); returns byte a4 (event/callback thunk) [REVIEW]
- docs/function_notes/review_haiku1.md:42 Conditionally calls sub_20D634C if a3 == 1, returns a4
sub_20D5F8C
export/plan0/arm9_main/sub_20D5F8C_020D5F8C.c
- vm_model/src/mapobj/rock.rs:120
sub_20D5F8C: a kart touched it with own-reactioncode; 1 (a star kart) bursts it - docs/function_notes.md:415 rock kart callback: code 1 (star) bursts and restarts it (sub_20D634C)
- docs/function_notes/NEEDS_REVIEW.md:636 same as sub_20D5F64 (identical body: conditional sub_20D634C(a1,1), returns byte *a4) [REVIEW]
- docs/function_notes/hk_20.md:88 same as sub_20D5F64 (identical body: conditional sub_20D634C(a1,1), returns byte *a4) [REVIEW]
sub_20D5FB4
export/plan0/arm9_main/sub_20D5FB4_020D5FB4.c
- vm_model/src/mapobj/rock.rs:2
sub_20D5DD0, ticksub_20D5FB4, burst and restartsub_20D634C. - vm_model/src/mapobj/rock.rs:119
sub_20D5FB4, one tick. - docs/function_notes.md:265 rolling rock tick (eased path walk, gravity, bounce with sideways kick, growth, burst at the end)
sub_20D634C
export/plan0/arm9_main/sub_20D634C_020D634C.c
- vm_model/src/mapobj/rock.rs:2
sub_20D5DD0, ticksub_20D5FB4, burst and restartsub_20D634C. - vm_model/src/mapobj/rock.rs:121 (
sub_20D634C) and it starts again. - docs/function_notes.md:266 rolling rock burst (effects 84..87) and restart
sub_20D6538
export/plan0/arm9_main/sub_20D6538_020D6538.c
- docs/function_notes/hk_20.md:89 copies a 4-field header from a2 into result: u32 at +92 and three s16 values into +100/+104/+108 (vector/position copy)
sub_20D655C
export/plan0/arm9_main/sub_20D655C_020D655C.c
- docs/function_notes/NEEDS_REVIEW.md:637 when sub_20B2EC0() is false, computes a kart-relative basis (cross product via sub_20397A8, normalise via sub_2039860, dot via sub_214848C) from matrices in a2; stores position>>4 at a2+19..21 and submits via sub_20EA8A8 and sub_20EA868 [REVIEW]
- docs/function_notes/hk_20.md:90 when sub_20B2EC0() is false, computes a kart-relative basis (cross product via sub_20397A8, normalise via sub_2039860, dot via sub_214848C) from matrices in a2; stores position>>4 at a2+19..21 and submits via sub_20EA8A8 and sub_20EA868 [REVIEW]
- docs/function_notes/review_haiku1.md:43 Large transformation function - calls sub_20B2EC0, performs matrix operations via sub_20397A8/sub_2148504
sub_20D673C
export/plan0/arm9_main/sub_20D673C_020D673C.c
- docs/function_notes/NEEDS_REVIEW.md:638 looks up sin/cos style pair in off_20D6790 using the angle from sub_2061FB8 (index = (v<<9)>>4) and rotates the vector at object+44 via sub_2146D44 [REVIEW]
- docs/function_notes/hk_20.md:91 looks up sin/cos style pair in off_20D6790 using the angle from sub_2061FB8 (index = (v<<9)>>4) and rotates the vector at object+44 via sub_2146D44 [REVIEW]
- docs/function_notes/review_haiku1.md:44 Calls sub_2061FB8 to get rotation angle, indexes table with scaled angle, returns matrix result
sub_20D6794
export/plan0/arm9_main/sub_20D6794_020D6794.c
- docs/function_notes/NEEDS_REVIEW.md:639 allocates a 40-byte block from the heap into *off_20D67E8, copies 10 words from off_20D67EC into it and calls sub_20E6F50 [REVIEW]
- docs/function_notes/hk_20.md:92 allocates a 40-byte block from the heap into *off_20D67E8, copies 10 words from off_20D67EC into it and calls sub_20E6F50 [REVIEW]
- docs/function_notes/review_haiku1.md:45 Allocates 40 bytes via sub_20364E8/sub_2036BEC, copies data from template, calls sub_20E6F50
sub_20D67F0
export/plan0/arm9_main/sub_20D67F0_020D67F0.c
- docs/function_notes/NEEDS_REVIEW.md:640 allocates a 92-byte block from the heap, copies a 22-word template from off_20D684C into it, stores it in off_20D6848 and registers it via sub_20D49D8 [REVIEW]
- docs/function_notes/hk_20.md:93 allocates a 92-byte block from the heap, copies a 22-word template from off_20D684C into it, stores it in off_20D6848 and registers it via sub_20D49D8 [REVIEW]
- docs/function_notes/review_haiku1.md:46 Allocates 92 bytes, copies 23 values in loop, calls sub_20D49D8
sub_20D6850
export/plan0/arm9_main/sub_20D6850_020D6850.c
- docs/function_notes/NEEDS_REVIEW.md:641 same as sub_20D67F0 with template off_20D68AC and global off_20D68A8 [REVIEW]
- docs/function_notes/hk_20.md:94 same as sub_20D67F0 with template off_20D68AC and global off_20D68A8 [REVIEW]
- docs/function_notes/review_haiku1.md:47 Similar to 67F0 - allocates 92 bytes, copies 23 values, calls sub_20D49D8
sub_20D68B0
export/plan0/arm9_main/sub_20D68B0_020D68B0.c
- docs/function_notes/NEEDS_REVIEW.md:642 allocates a 64-byte block, copies a 16-word template from off_20D690C and sets the two range words to +4096000 / -4096000 [REVIEW]
- docs/function_notes/hk_20.md:95 allocates a 64-byte block, copies a 16-word template from off_20D690C and sets the two range words to +4096000 / -4096000 [REVIEW]
- docs/function_notes/review_haiku1.md:48 Allocates 64 bytes, copies 16 function pointers from table
sub_20D6910
export/plan0/arm9_main/sub_20D6910_020D6910.c
- docs/function_notes/NEEDS_REVIEW.md:643 table lookup: splits u16 id *a2 into hundreds and remainder (base 100), returns byte from off_20D6964 table for slot a1; returns 0 when a2[1] bit 0x800 is set [REVIEW]
- docs/function_notes/hk_20.md:96 table lookup: splits u16 id *a2 into hundreds and remainder (base 100), returns byte from off_20D6964 table for slot a1; returns 0 when a2[1] bit 0x800 is set [REVIEW]
- docs/function_notes/review_haiku1.md:49 Divides a2[0] by 100, indexes collision table by quotient and a1, returns value or 0 if flag set
sub_20D6968
export/plan0/arm9_main/sub_20D6968_020D6968.c
- docs/function_notes/NEEDS_REVIEW.md:644 same id split as sub_20D6910 using table off_20D69E0; returns TRUE when the value is nonzero (value upgraded to 2 for flagged object with +32 set) [REVIEW]
- docs/function_notes/hk_20.md:97 same id split as sub_20D6910 using table off_20D69E0; returns TRUE when the value is nonzero (value upgraded to 2 for flagged object with +32 set) [REVIEW]
- docs/function_notes/review_haiku1.md:50 Similar to 6910 - indexes table but checks flag at +32 and may return 2
sub_20D69E4
export/plan0/arm9_main/sub_20D69E4_020D69E4.c
- vm_model/src/obj_collision.rs:274 Whether the kart is pushed out of the object (
sub_20D69E4: any handler but 0). - docs/function_notes.md:22 object solid for this kart (same table, non-zero)
sub_20D6A54
export/plan0/arm9_main/sub_20D6A54_020D6A54.c
- vm_model/src/mission_step.rs:23 When touching mission target
idcounts (sub_20D6BE0/sub_20D6A54callsub_218173C(id) - docs/function_notes/NEEDS_REVIEW.md:645 id split plus two table lookups (off_20D6BD4 and off_20D6BD8) keyed by object +68; optional callback at the struct +4, special case calls sub_218173C; returns the result [REVIEW]
- docs/function_notes/hk_20.md:98 id split plus two table lookups (off_20D6BD4 and off_20D6BD8) keyed by object +68; optional callback at the struct +4, special case calls sub_218173C; returns the result [REVIEW]
- docs/function_notes/review_haiku1.md:51 Large collision detection function - indexes tables, calls collision handler at +4 if present
sub_20D6BE0
export/plan0/arm9_main/sub_20D6BE0_020D6BE0.c
- vm_model/src/arm9.rs:255 Kart-touch tables of
sub_20D6BE0: handlers (pointers at 0x0216B94C) and the object's own - vm_model/src/mission_step.rs:23 When touching mission target
idcounts (sub_20D6BE0/sub_20D6A54callsub_218173C(id) - vm_model/src/mission_step.rs:456 count on touch with no state requirement; the car rules follow
sub_20D6BE0's tables): - vm_model/src/obj_collision.rs:5 tables at
0x0216B94C(sub_20D6BE0), which decides what the touch does: a wall bump, - vm_model/src/obj_collision.rs:120 Hit handler of an object id (
sub_20D6BE0's tables at0x0216B94C), by id / 100 group, - vm_model/src/obj_collision.rs:142 The object's own reaction to a kart touching it (
sub_20D6BE0's table at0x0216B9AC), - vm_model/src/obj_collision.rs:202
sub_20D6BE0(own part): the reaction code the object's kart callback gets; objects flagged - vm_model/src/obj_collision.rs:210
sub_20D6BE0(table part): the handler for an object id when the kart is inmode; - game/src/objects.rs:1531 solid ones. Traffic's own reaction is dispatched separately by sub_20D6BE0.
- docs/function_notes.md:21 picks the kart-vs-object hit handler from tables at 0x0216B94C (id/100 group, kart +0x29C mode, id%100)
- docs/function_notes.md:235 separate own-object reaction table 0216B9AC and kart response table 0216B94C; traffic own modes [normal,Star,mega,shrunk]=[0,1,0,1]; object flag 0800 suppresses own responses other than 2/4, flag 0080 bypasses dynamic callback; decompiler omits callback args holding response-byte pointers
- docs/function_notes.md:388 kart-object dispatch; own-reaction table 0x0216B9AC (now ported as obj_collision::own_reaction), kart handler table 0x0216B94C; flag 0x800 keeps only own codes 2/4
sub_20D6D34
export/plan0/arm9_main/sub_20D6D34_020D6D34.c
- docs/function_notes/NEEDS_REVIEW.md:646 table lookup off_20D6D88[14*a3+a2][a4]; when a1 is nonzero and the value is 1 it calls a function pointer (a5 selects value 2) [REVIEW]
- docs/function_notes/hk_20.md:99 table lookup off_20D6D88[14*a3+a2][a4]; when a1 is nonzero and the value is 1 it calls a function pointer (a5 selects value 2) [REVIEW]
- docs/function_notes/review_haiku1.md:52 Indexes collision table 14*a3+a2+a4, returns value, may return 2 if a5 and a1 != 0
sub_20D6D8C
export/plan0/arm9_main/sub_20D6D8C_020D6D8C.c
- docs/function_notes/NEEDS_REVIEW.md:647 table lookup off_20D6DBC[14*a3+a2][a4]; returns the value only when a1 is zero, else 0 [REVIEW]
- docs/function_notes/hk_20.md:100 table lookup off_20D6DBC[14*a3+a2][a4]; returns the value only when a1 is zero, else 0 [REVIEW]
- docs/function_notes/review_haiku1.md:53 Indexes collision table 14*a3+a2+a4, returns value only if a1 == 0, else returns 0
sub_20D6DC0
export/plan0/arm9_main/sub_20D6DC0_020D6DC0.c
- game/src/objects.rs:1700 sub_20D6DC0(.., 4, 4): the handler table's group 4, entry 4
- docs/function_notes.md:164 handler table lookup for an explicit id group/index
sub_20D6DF0
export/plan0/arm9_main/sub_20D6DF0_020D6DF0.c
- vm_model/src/kart/moving_terrain.rs:5 Map-object Euler matrix (
sub_20D6DF0): quantized X, then Y, then Z, - docs/function_notes.md:531 map-object fx12-degree Euler axes: rounded binary-angle conversion via0xB60B60B60B then quantized SDK trig; row matrices XYZ, products truncate via sub_2146DFC. Bowser blocks all have1-degree X and captured up=(0,4095,69); native box initialization now uses this helper instead of floating Euler.
- docs/function_notes/NEEDS_REVIEW.md:648 builds a fixed-point rotation from the vector a1 via sine/cosine tables off_20D6F1C and composes matrices with sub_2146D28/sub_2146D44/sub_2146D60/sub_2146DFC into a2 [REVIEW]
- docs/function_notes/hk_20.md:101 builds a fixed-point rotation from the vector a1 via sine/cosine tables off_20D6F1C and composes matrices with sub_2146D28/sub_2146D44/sub_2146D60/sub_2146DFC into a2 [REVIEW]
sub_20D6F20
export/plan0/arm9_main/sub_20D6F20_020D6F20.c
- docs/function_notes/NEEDS_REVIEW.md:649 builds a rotation matrix for angle a2 from table off_20D6F74 and multiplies it into a3 with sub_2146D78 [REVIEW]
- docs/function_notes/hk_20.md:102 builds a rotation matrix for angle a2 from table off_20D6F74 and multiplies it into a3 with sub_2146D78 [REVIEW]
- docs/function_notes/review_haiku1.md:54 Performs matrix transformation using sub_2146D44 and sub_2146D78
sub_20D6F78
export/plan0/arm9_main/sub_20D6F78_020D6F78.c
- vm_model/src/kart/moving_cylinder.rs:28 What the world sees of
sub_20D6F78's fallback unit vector (a global constant, (1, 0, 0)). - vm_model/src/kart/moving_cylinder.rs:59 the radial unit vector in world space and the radial length (
sub_20D6F78) - docs/function_notes/NEEDS_REVIEW.md:650 normalises the x,z vector (a1[0], a1[2]) using the hardware square root/divide registers; returns 0 if squared length < 16, otherwise writes scaled x,z to a2 [REVIEW]
- docs/function_notes/hk_20.md:103 normalises the x,z vector (a1[0], a1[2]) using the hardware square root/divide registers; returns 0 if squared length < 16, otherwise writes scaled x,z to a2 [REVIEW]
sub_20D70AC
export/plan0/arm9_main/sub_20D70AC_020D70AC.c
- vm_model/src/mapobj/path.rs:52
sub_20D70AC: unit vector and rounded length with the DS's divider and square root units - docs/function_notes.md:137 unit vector and rounded length with the hardware divider and sqrt
- docs/function_notes.md:530 SDK vector length+normalization combined; squared length<16 returns0, hardware reciprocal and sqrt with rounded unit components; moving-box edge/corner callers use input scaled1024 to preserve precision.
sub_20D720C
export/plan0/arm9_main/sub_20D720C_020D720C.c
- docs/function_notes/NEEDS_REVIEW.md:651 builds a 4-component rotation (quaternion-like) from two table-driven angles (off_20D73EC indexed by a1[0] and a1[1]/a1[2]) into a2 [REVIEW]
- docs/function_notes/hk_20.md:104 builds a 4-component rotation (quaternion-like) from two table-driven angles (off_20D73EC indexed by a1[0] and a1[1]/a1[2]) into a2 [REVIEW]
- docs/function_notes/review_haiku1.md:55 Complex matrix multiplication with sin/cos lookups and fixed-point math
sub_20D73F0
export/plan0/arm9_main/sub_20D73F0_020D73F0.c
- docs/function_notes/NEEDS_REVIEW.md:652 normalises a 4-component vector a1 (quaternion) via hardware sqrt/divide when its squared length is outside a range; otherwise copies it to a2 [REVIEW]
- docs/function_notes/hk_20.md:105 normalises a 4-component vector a1 (quaternion) via hardware sqrt/divide when its squared length is outside a range; otherwise copies it to a2 [REVIEW]
- docs/function_notes/review_haiku1.md:56 Validates quaternion magnitude, normalizes via hardware sqrt or copies as-is
sub_20D759C
export/plan0/arm9_main/sub_20D759C_020D759C.c
- vm_model/src/mapobj/presentation.rs:29 sub_20D759C: sign-corrected component blend, without normalization.
- docs/function_notes.md:219 sign-corrected per-component quaternion easing (negates target if dot product is negative), without normalization; traffic helper matches 899 original bus transitions with recorded tilt/yaw/rate inputs
sub_20D76A8
export/plan0/arm9_main/sub_20D76A8_020D76A8.c
- vm_model/src/mapobj/chomp.rs:85 Its draw pitch: +0xE8 plus the hop lean (
sub_20D76A8), u16 angle units. - docs/function_notes/NEEDS_REVIEW.md:653 rotates the 2D pair a1[1],a1[3] by table-driven sin/cos of angle a2 (off_20D7730) and writes 4 products to a3 [REVIEW]
- docs/function_notes/hk_20.md:106 rotates the 2D pair a1[1],a1[3] by table-driven sin/cos of angle a2 (off_20D7730) and writes 4 products to a3 [REVIEW]
sub_20D7734
export/plan0/arm9_main/sub_20D7734_020D7734.c
- vm_model/src/mapobj/pendulum.rs:8 The game turns the arm with a quaternion (
sub_20D7734); here sine and cosine directly. - docs/function_notes/NEEDS_REVIEW.md:654 rotates a 4-component value a1 by table-driven angle a2 (off_20D77DC) into a3 (quaternion-style multiply) [REVIEW]
- docs/function_notes/hk_20.md:107 rotates a 4-component value a1 by table-driven angle a2 (off_20D77DC) into a3 (quaternion-style multiply) [REVIEW]
sub_20D77E0
export/plan0/arm9_main/sub_20D77E0_020D77E0.c
- docs/function_notes/NEEDS_REVIEW.md:655 rotates a 4-component value a1 by table-driven angle a2 (off_20D7888) into a3, a variant of sub_20D7734 with a different axis [REVIEW]
- docs/function_notes/hk_20.md:108 rotates a 4-component value a1 by table-driven angle a2 (off_20D7888) into a3, a variant of sub_20D7734 with a different axis [REVIEW]
- docs/function_notes/review_haiku1.md:57 Applies 3D rotation using sin/cos table lookup based on a2 angle parameter
sub_20D788C
export/plan0/arm9_main/sub_20D788C_020D788C.c
- docs/function_notes/NEEDS_REVIEW.md:656 rotates a 4-component value a1 by table-driven angle a2 (off_20D7934) into a3, another axis variant [REVIEW]
- docs/function_notes/hk_20.md:109 rotates a 4-component value a1 by table-driven angle a2 (off_20D7934) into a3, another axis variant [REVIEW]
- docs/function_notes/review_haiku1.md:58 Applies 3D rotation to quaternion using sin/cos lookup table
sub_20D7938
export/plan0/arm9_main/sub_20D7938_020D7938.c
- docs/function_notes/NEEDS_REVIEW.md:657 quaternion product of a1 with the sin/cos pair at a2+4/+12, writes 4 components to a3 [REVIEW]
- docs/function_notes/hk_20.md:110 quaternion product of a1 with the sin/cos pair at a2+4/+12, writes 4 components to a3 [REVIEW]
- docs/function_notes/review_haiku1.md:59 Transforms vector using 2x2 matrix at offsets +4 and +12
sub_20D79B0
export/plan0/arm9_main/sub_20D79B0_020D79B0.c
- vm_model/src/mapobj/presentation.rs:21 sub_20D79B0: combine terrain tilt with the object's explicit XZ heading.
- docs/function_notes.md:218 combines terrain tilt quaternion's X/Z/W with half-angle XZ heading; traffic heading helper verified as part of all 899 bus orientation transitions
sub_20D7A3C
export/plan0/arm9_main/sub_20D7A3C_020D7A3C.c
- docs/function_notes/NEEDS_REVIEW.md:658 computes a 3-value offset from angle a2 (table off_20D7B30) using the hardware divide/sqrt helpers sub_2147D88, sub_2147DC0 and sub_2147E28 [REVIEW]
- docs/function_notes/hk_20.md:111 computes a 3-value offset from angle a2 (table off_20D7B30) using the hardware divide/sqrt helpers sub_2147D88, sub_2147DC0 and sub_2147E28 [REVIEW]
- docs/function_notes/review_haiku1.md:60 Complex calculation involving hardware square root via sub_2147E28
sub_20D7B34
export/plan0/arm9_main/sub_20D7B34_020D7B34.c
- game/src/objects.rs:1398 facing its travel (sub_20D7B34 from the walk's direction)
sub_20D7B88
export/plan0/arm9_main/sub_20D7B88_020D7B88.c
- vm_model/src/mapobj/presentation.rs:5 sub_20D7B88: quaternion taking world up to the sampled floor normal.
- docs/function_notes.md:222 traffic terrain tilt: denominator FX_Sqrt(2*(normalY+4096)); quaternion [FX_Div(normalZ,denominator),0,FX_Div(-normalX,denominator),denominator/2]; native KCL probe plus tilt/heading/easing/body matrix matches all 899 bus transitions
sub_20D7BEC
export/plan0/arm9_main/sub_20D7BEC_020D7BEC.c
- docs/function_notes/NEEDS_REVIEW.md:659 computes FX_Atan2 of object +8 and +32 via sub_2148538, maps the angle to a sin/cos pair from off_20D7C80 and stores it in the global at off_20D7C7C (+4/+12) [REVIEW]
- docs/function_notes/hk_20.md:112 computes FX_Atan2 of object +8 and +32 via sub_2148538, maps the angle to a sin/cos pair from off_20D7C80 and stores it in the global at off_20D7C7C (+4/+12) [REVIEW]
- docs/function_notes/review_haiku1.md:61 Computes angle, indexes lookup table via sub_2148538, returns table values
sub_20D7C84
export/plan0/arm9_main/sub_20D7C84_020D7C84.c
- vm_model/src/kart/blue_shell.rs:1014 at forks), the overshoot carried into the new segment (
sub_20F3FA8/sub_20D7C84). - vm_model/src/mapobj/chomp.rs:332 sub_20D7C84: the overshoot carries into the new segment
- docs/function_notes.md:151 single-segment curve advance to new points (carry)
sub_20D7D18
export/plan0/arm9_main/sub_20D7D18_020D7D18.c
- docs/function_notes.md:150 single-segment curve build (wander curves)
sub_20D7D4C
export/plan0/arm9_main/sub_20D7D4C_020D7D4C.c
- vm_model/src/mapobj/path.rs:314 A follower whose speed eases between per-point speeds (
sub_20D7D4C,sub_20D859C, - vm_model/src/mapobj/path.rs:337
sub_20D7D4C:unitandpercentgive the speeds (unit / 100 a point step, unit x - vm_model/src/mapobj/path.rs:348
sub_20D7D4Cthensub_20D859C(.., start, 1): like [EasedFollower::new] but starting at - vm_model/src/mapobj/path_box.rs:4 Init: the plain box init (
sub_20DE6A8), then an eased path follower (sub_20D7D4C, unit speed - docs/function_notes.md:143 eased follower init (unit speed / 100, object speed)
sub_20D7D80
export/plan0/arm9_main/sub_20D7D80_020D7D80.c
- vm_model/src/mapobj/airship.rs:94 The route with straight segments (
sub_20D7D80at init). - vm_model/src/mapobj/airship.rs:106
sub_20D7D80makes every segment's length and step the straight line's, so it walks - docs/function_notes/hk_20.md:113 for each of the count entries (count at +4) in an 84-byte record array, copies the current value +16/+17 into the previous slots +12/+13 (save-previous-frame step)
sub_20D7DA8
export/plan0/arm9_main/sub_20D7DA8_020D7DA8.c
- docs/function_notes/hk_20.md:114 thunk, tail-calls off_20D7DB0(a1, u16 at a2+38)
sub_20D7DF8
export/plan0/arm9_main/sub_20D7DF8_020D7DF8.c
- docs/function_notes/NEEDS_REVIEW.md:660 allocates a 12-byte-per-entry array (count u16 at +12 of a global) from the heap into off_20D7E40 and zeroes the first word of each entry [REVIEW]
- docs/function_notes/hk_20.md:115 allocates a 12-byte-per-entry array (count u16 at +12 of a global) from the heap into off_20D7E40 and zeroes the first word of each entry [REVIEW]
- docs/function_notes/review_haiku1.md:62 Allocates 12 bytes per item count, initializes array with zeros
sub_20D7E44
export/plan0/arm9_main/sub_20D7E44_020D7E44.c
- vm_model/src/mapobj/path.rs:3
sub_20D7E44turns each path into segments (84-byte records,sub_20D80E4): the two end - vm_model/src/mapobj/path.rs:97
sub_20D7E44: the segments of a path from its points. - docs/function_notes.md:135 builds a path's 84-byte Bezier segment records
sub_20D80E4
export/plan0/arm9_main/sub_20D80E4_020D80E4.c
- vm_model/src/mapobj/path.rs:3
sub_20D7E44turns each path into segments (84-byte records,sub_20D80E4): the two end - vm_model/src/mapobj/path.rs:16 One segment (
sub_20D80E4). - vm_model/src/mapobj/path.rs:70
sub_20D80E4;plain(its second argument) makes the tangents the segment's length - docs/function_notes.md:136 one path segment: control points, curve and straight lengths and inverses
sub_20D8460
export/plan0/arm9_main/sub_20D8460_020D8460.c
- docs/function_notes/hk_20.md:116 thunk, tail-calls off_20D8470(a1, a1+92, a2)
sub_20D8474
export/plan0/arm9_main/sub_20D8474_020D8474.c
- docs/function_notes.md:153 single-segment curve x/z
sub_20D8488
export/plan0/arm9_main/sub_20D8488_020D8488.c
- docs/function_notes/hk_20.md:117 thunk, tail-calls off_20D8498(a1, a1+92, a2)
sub_20D849C
export/plan0/arm9_main/sub_20D849C_020D849C.c
- docs/function_notes.md:152 single-segment curve progress step
sub_20D84C0
export/plan0/arm9_main/sub_20D84C0_020D84C0.c
- vm_model/src/kart/blue_shell.rs:1004
sub_20D84C0: progress per tick atspeedalong a segment (a whole segment if it has no length). - vm_model/src/mapobj/chomp.rs:262 sub_20D84C0: speed 1.0
sub_20D84E4
export/plan0/arm9_main/sub_20D84E4_020D84E4.c
- vm_model/src/mapobj/path.rs:315
sub_20D84E4): a point's setting 1 (POIT+0xE) times a unit speed, or the object's own - vm_model/src/mapobj/path.rs:373
sub_20D84E4: one tick; true when a point was reached. - docs/function_notes.md:145 eased follower advance (speed blends between point speeds)
sub_20D859C
export/plan0/arm9_main/sub_20D859C_020D859C.c
- vm_model/src/mapobj/path.rs:314 A follower whose speed eases between per-point speeds (
sub_20D7D4C,sub_20D859C, - vm_model/src/mapobj/path.rs:348
sub_20D7D4Cthensub_20D859C(.., start, 1): like [EasedFollower::new] but starting at - vm_model/src/mapobj/path.rs:364 Back to point 0 going forward (
sub_20D859C(.., 0, 1)). - vm_model/src/mapobj/path_box.rs:6 (
sub_20D859C(.., start, 1)). Each tick (sub_20DF48C): the follower advances; arriving at a - docs/function_notes.md:144 eased follower start with per-point speeds
sub_20D8620
export/plan0/arm9_main/sub_20D8620_020D8620.c
- vm_model/src/mapobj/path.rs:262
sub_20D8620: turn round. - docs/function_notes.md:141 follower reverse
sub_20D8648
export/plan0/arm9_main/sub_20D8648_020D8648.c
- docs/function_notes/hk_20.md:118 sets field +20 of a1 to 0x1000000 (fixed-point 1.0 blend weight), returns a1
sub_20D8654
export/plan0/arm9_main/sub_20D8654_020D8654.c
- vm_model/src/mapobj/rock.rs:64 sub_20D8654: across each segment, horizontally
- docs/function_notes.md:267 table of horizontal directions across each path segment
sub_20D879C
export/plan0/arm9_main/sub_20D879C_020D879C.c
- vm_model/src/mapobj/airship.rs:136 sub_20D879C: x and z on the straight line
- docs/function_notes/NEEDS_REVIEW.md:661 interpolates two consecutive 84-byte records of the path/array at *a1 using blend weight a1+20 (0..0x1000000); writes the lerped values to a2 [REVIEW]
- docs/function_notes/hk_20.md:119 interpolates two consecutive 84-byte records of the path/array at *a1 using blend weight a1+20 (0..0x1000000); writes the lerped values to a2 [REVIEW]
sub_20D8828
export/plan0/arm9_main/sub_20D8828_020D8828.c
- docs/function_notes/NEEDS_REVIEW.md:662 Scans a list of 84-byte track records for the largest squared XZ distance from point a2 (checks two points per record), writes it to the DS SQRT unit (off_20D88F0), busy-waits on bit 15, returns the hardware square root. [REVIEW]
- docs/function_notes/hk_21.md:3 Scans a list of 84-byte track records for the largest squared XZ distance from point a2 (checks two points per record), writes it to the DS SQRT unit (off_20D88F0), busy-waits on bit 15, returns the hardware square root. [REVIEW]
- docs/function_notes/review_haiku1.md:63 Finds nearest collision point via distance squared calculation
sub_20D88FC
export/plan0/arm9_main/sub_20D88FC_020D88FC.c
- docs/function_notes/hk_21.md:4 Accessor: returns pointer to record (index at a1+12 in array **a1) plus offset 72. Trivial getter.
sub_20D8918
export/plan0/arm9_main/sub_20D8918_020D8918.c
- vm_model/src/mapobj/pinball.rs:128
sub_20D8918: the base point and direction on the straight line; the base is lifted by 4096. - vm_model/src/mapobj/piranha.rs:250 sub_20D8918 normalizes through its quantized fx24 speed step
- vm_model/src/mapobj/pokey.rs:4 (
sub_20D8918; on looped paths the curves,sub_20D8BF8), stops at a point for the point's - docs/function_notes/NEEDS_REVIEW.md:663 Fixed-point (24-bit fraction, t=a1+20) lerp of a 3D position between two 84-byte track records (second point at +36) into a2[0..2]; computes a tangent via sub_21484D0 into a3, scales by a1+16, negates it when a1+24 is 0. [REVIEW]
- docs/function_notes/hk_21.md:5 Fixed-point (24-bit fraction, t=a1+20) lerp of a 3D position between two 84-byte track records (second point at +36) into a2[0..2]; computes a tangent via sub_21484D0 into a3, scales by a1+16, negates it when a1+24 is 0. [REVIEW]
sub_20D8A5C
export/plan0/arm9_main/sub_20D8A5C_020D8A5C.c
- vm_model/src/mapobj/path.rs:9 round looped paths and reverses at the ends of open ones.
sub_20D8A5Cplaces the object - vm_model/src/mapobj/path.rs:268
sub_20D8A5C: the position on the straight line of the current segment. - docs/function_notes.md:140 follower position on the straight segment
sub_20D8B18
export/plan0/arm9_main/sub_20D8B18_020D8B18.c
- vm_model/src/mapobj/vehicle.rs:48 sub_20D8B18 / sub_20D9270: initial direction is the Bezier derivative
- docs/function_notes.md:224 initializes curved-path position/velocity via sub_20D9270, negates X/Z velocity when following backward; traffic uses this derivative to initialize heading
sub_20D8B88
export/plan0/arm9_main/sub_20D8B88_020D8B88.c
- vm_model/src/mapobj/path.rs:288
sub_20D8B88/sub_20D9340: x and z on the segment's Bezier curve (y is left to the - docs/function_notes.md:146 follower x/z on the Bezier segment
sub_20D8BC0
export/plan0/arm9_main/sub_20D8BC0_020D8BC0.c
- docs/function_notes.md:269 follower position via sub_20D91DC
- docs/function_notes/NEEDS_REVIEW.md:664 Thin wrapper: calls sub_20D91DC on the current track record with a1+20 and a2. [REVIEW]
- docs/function_notes/hk_21.md:6 Thin wrapper: calls sub_20D91DC on the current track record with a1+20 and a2. [REVIEW]
sub_20D8BF8
export/plan0/arm9_main/sub_20D8BF8_020D8BF8.c
- vm_model/src/mapobj/pinball.rs:141
sub_20D8BF8(sub_20D939C): the base point and direction on the segment's Bezier curve. - vm_model/src/mapobj/pokey.rs:4 (
sub_20D8918; on looped paths the curves,sub_20D8BF8), stops at a point for the point's - docs/function_notes/NEEDS_REVIEW.md:665 Calls sub_20D939C(record, a1+20, a1+16, a2, a3) to get a point and tangent, then negates the tangent vector a3 when a1+24 is 0. Same pattern as sub_20D8918. [REVIEW]
- docs/function_notes/hk_21.md:7 Calls sub_20D939C(record, a1+20, a1+16, a2, a3) to get a point and tangent, then negates the tangent vector a3 when a1+24 is 0. Same pattern as sub_20D8918. [REVIEW]
sub_20D8C74
export/plan0/arm9_main/sub_20D8C74_020D8C74.c
- vm_model/src/mapobj/path_box.rs:8 curve (
sub_20D8C74->sub_20D9480) 16 units up plus a hover that follows the box - docs/function_notes/NEEDS_REVIEW.md:666 Thin wrapper: calls sub_20D9480 on the current track record with a1+20 and a2. [REVIEW]
- docs/function_notes/hk_21.md:8 Thin wrapper: calls sub_20D9480 on the current track record with a1+20 and a2. [REVIEW]
sub_20D8CAC
export/plan0/arm9_main/sub_20D8CAC_020D8CAC.c
- vm_model/src/mapobj/path.rs:283
sub_20D8CAC: progress through the segment in the walking direction, 0..4096. - docs/function_notes.md:142 follower fraction through the segment (0..4096)
sub_20D8CC8
export/plan0/arm9_main/sub_20D8CC8_020D8CC8.c
- vm_model/src/mapobj/path.rs:7
sub_20D90A8/sub_20D8CC8) carries a 24-bit progress along the current segment, steps - vm_model/src/mapobj/path.rs:187
sub_20D8CC8: one tick; true when a point was reached. - docs/function_notes.md:139 path follower advance (24-bit progress, carry, loop / turn back)
sub_20D90A8
export/plan0/arm9_main/sub_20D90A8_020D90A8.c
- vm_model/src/mapobj/path.rs:7
sub_20D90A8/sub_20D8CC8) carries a 24-bit progress along the current segment, steps - vm_model/src/mapobj/path.rs:155
sub_20D90A8: start at pointstart, walking forward or back. - vm_model/src/mapobj/pinball.rs:178
sub_20D90A8(follower, point, 1). - docs/function_notes.md:138 path follower start (point, direction)
sub_20D91DC
export/plan0/arm9_main/sub_20D91DC_020D91DC.c
- vm_model/src/kart/blue_shell.rs:989
sub_20D91DC: the point at progresst(0..2^24) on a segment: x and z on its Bezier curve, the - vm_model/src/mapobj/rock.rs:17
sub_20D91DC: x and z on the segment's Bezier curve, y straight between its ends. - vm_model/src/mapobj/vehicle.rs:4 Bezier, height straight between the points,
sub_20D91DC). - docs/function_notes.md:268 path position: Bezier x/z, straight y between the segment's ends
sub_20D9270
export/plan0/arm9_main/sub_20D9270_020D9270.c
- vm_model/src/mapobj/vehicle.rs:48 sub_20D8B18 / sub_20D9270: initial direction is the Bezier derivative
- docs/function_notes.md:225 curved-path initialization: evaluates cubic Bernstein position and derivative weights, multiplies X/Z derivative by follower step in fx24
sub_20D9340
export/plan0/arm9_main/sub_20D9340_020D9340.c
- vm_model/src/mapobj/path.rs:288
sub_20D8B88/sub_20D9340: x and z on the segment's Bezier curve (y is left to the - vm_model/src/mapobj/path.rs:296
sub_20D9340: x and z at progresst(0..2^24) on a segment's Bezier curve. - docs/function_notes.md:147 Bezier x/z from a segment and progress
sub_20D939C
export/plan0/arm9_main/sub_20D939C_020D939C.c
- vm_model/src/mapobj/pinball.rs:141
sub_20D8BF8(sub_20D939C): the base point and direction on the segment's Bezier curve. - docs/function_notes/NEEDS_REVIEW.md:667 Evaluates a curve point via sub_20D970C (splits parameters into 8 values), computes two points with sub_20D95C0 into a4 and a5, then scales a5 by a3 in 24-bit fixed point. [REVIEW]
- docs/function_notes/hk_21.md:9 Evaluates a curve point via sub_20D970C (splits parameters into 8 values), computes two points with sub_20D95C0 into a4 and a5, then scales a5 by a3 in 24-bit fixed point. [REVIEW]
sub_20D9480
export/plan0/arm9_main/sub_20D9480_020D9480.c
- vm_model/src/mapobj/goomba.rs:4 three axes,
sub_20D9480), with a stepping gait: a counter runs 0..40 and the Goomba only - vm_model/src/mapobj/goomba.rs:39
sub_20D9480/sub_20D95C0: the point at progresston a segment's Bezier curve. - vm_model/src/mapobj/path_box.rs:8 curve (
sub_20D8C74->sub_20D9480) 16 units up plus a hover that follows the box - docs/function_notes.md:148 Bezier x/y/z from a segment and progress
sub_20D94DC
export/plan0/arm9_main/sub_20D94DC_020D94DC.c
- docs/function_notes/NEEDS_REVIEW.md:668 Weighted sum of four control values from an int array (weights a3..a6, 24-bit fixed point) written to a2[0] and a2[2] (X and Z only; Y not touched). [REVIEW]
- docs/function_notes/hk_21.md:10 Weighted sum of four control values from an int array (weights a3..a6, 24-bit fixed point) written to a2[0] and a2[2] (X and Z only; Y not touched). [REVIEW]
- docs/function_notes/review_haiku1.md:64 Matrix-vector multiplication with 24-bit shift arithmetic
sub_20D95C0
export/plan0/arm9_main/sub_20D95C0_020D95C0.c
- vm_model/src/mapobj/goomba.rs:39
sub_20D9480/sub_20D95C0: the point at progresston a segment's Bezier curve.
sub_20D970C
export/plan0/arm9_main/sub_20D970C_020D970C.c
- docs/function_notes.md:226 computes cubic Bernstein position and derivative weights in fx24 for initial curved-path velocity
sub_20D9810
export/plan0/arm9_main/sub_20D9810_020D9810.c
- vm_model/src/mapobj/path.rs:301 sub_20D9810: Bernstein weights in 24-bit
- docs/function_notes.md:149 cubic Bernstein weights (24-bit)
sub_20D98A4
export/plan0/arm9_main/sub_20D98A4_020D98A4.c
- vm_model/src/kart/water.rs:9 and the course water objects 0x5 / 0xE / 0xF (
sub_20D98A4) only give a height to other code. - docs/function_notes.md:1687 course water object (NKM ids 0x5 / 0xE / 0xF; Delfino, Banshee Boardwalk, Bowser's Castle lava): its y is the water height **0x217B4B8 (used by the 50-units-under check sub_20D3D10, not by the kart water step); loads water_efct
- docs/function_notes/agent_06.md:8 loads MapObj/water_efct nsbmd/nsbca/nsbma into a 16-byte record at 0x0217B654 and registers it
sub_20D9900
export/plan0/arm9_main/sub_20D9900_020D9900.c
- docs/function_notes/agent_06.md:9 water surface model setup: binds two animations (+0x68, +0xD4), sets frames from +0x58/+0x5A and looks up material "waterC"
sub_20D99F8
export/plan0/arm9_main/sub_20D99F8_020D99F8.c
- vm_model/src/kart/water.rs:3 The water object (
*0x0217B4C4, made per course bysub_20D99F8..sub_20D9C54through - vm_model/src/kart/water.rs:49 sub_20D99F8 / sub_20D9A90 / sub_20D9B20: still water (Banshee Boardwalk, Yoshi Falls, Delfino)
- docs/function_notes/agent_06.md:10 Luigi's Mansion (hyudoro) water creator: allocs 0x180-byte wave object, inits wave params via sub_20D9CF4, loads hyudoro_waterA/C models
sub_20D9A90
export/plan0/arm9_main/sub_20D9A90_020D9A90.c
- vm_model/src/kart/water.rs:49 sub_20D99F8 / sub_20D9A90 / sub_20D9B20: still water (Banshee Boardwalk, Yoshi Falls, Delfino)
- docs/function_notes/agent_06.md:11 Yoshi Falls water creator: allocs wave object, inits wave params via sub_20D9CF4, loads yoshi_waterC model
sub_20D9B20
export/plan0/arm9_main/sub_20D9B20_020D9B20.c
- vm_model/src/kart/water.rs:49 sub_20D99F8 / sub_20D9A90 / sub_20D9B20: still water (Banshee Boardwalk, Yoshi Falls, Delfino)
- docs/function_notes/agent_06.md:12 Delfino Square (town) water creator: allocs wave object, wave params, loads town_waterA/C models
sub_20D9BB8
export/plan0/arm9_main/sub_20D9BB8_020D9BB8.c
- vm_model/src/kart/water.rs:45 sub_20D9BB8: Cheep Cheep Beach's tide
- docs/function_notes.md:1689 Cheep Cheep Beach water: beach_waterA/C, tide 120..98 units, period 500, holds 150/150, active
- docs/function_notes/agent_06.md:13 Cheep Cheep Beach water creator: allocs wave object, wave params, loads beach_waterA/C models
sub_20D9C54
export/plan0/arm9_main/sub_20D9C54_020D9C54.c
- vm_model/src/kart/water.rs:3 The water object (
*0x0217B4C4, made per course bysub_20D99F8..sub_20D9C54through - vm_model/src/kart/water.rs:47 sub_20D9C54: Palm Shore's tide
- docs/function_notes.md:1690 Palm Shore water: mini_stage3_waterA/C, tide 232..197 units, period 300, holds 300/300, active
- docs/function_notes/agent_06.md:14 mini-stage-3 battle course water creator: allocs wave object, wave params, loads mini_stage3_waterA/C models
sub_20D9CF4
export/plan0/arm9_main/sub_20D9CF4_020D9CF4.c
- vm_model/src/kart/water.rs:4
sub_20D9CF4, ticked bysub_20D9F8C) only affects karts when it is active (+0x170): on - vm_model/src/kart/water.rs:23 The per-course tide (
sub_20D9CF4arguments): high and low water, period (ticks for a full - docs/function_notes.md:1688 water object init (*0x217B4C4): middle/half range from high/low, model circles +0x44/+0x48 and lag +0x50, step 0x10000/period, holds +0x34/+0x36, active flag +0x170
- docs/function_notes/agent_06.md:15 water wave object init: stores centre/amplitude from two heights, angular speeds, phase and period limits, ring sizes from the args
sub_20D9DE0
export/plan0/arm9_main/sub_20D9DE0_020D9DE0.c
- docs/function_notes/agent_06.md:16 allocates 64 bytes from the heap and zeroes them
sub_20D9E60
export/plan0/arm9_main/sub_20D9E60_020D9E60.c
- docs/function_notes/agent_06.md:17 water draw: unless object flags 0x12 set, draws the two water model layers at wave position >>4 (sub_20849F8)
sub_20D9F8C
export/plan0/arm9_main/sub_20D9F8C_020D9F8C.c
- vm_model/src/kart/water.rs:4
sub_20D9CF4, ticked bysub_20D9F8C) only affects karts when it is active (+0x170): on - vm_model/src/kart/water.rs:116
sub_20D9F8C, one tick. - docs/function_notes.md:1692 water object tick: tide states 0 up to high (phase past 0x3FFF), 1 hold, 2 down to low (past 0xBFFF), 3 hold; height = middle + half x sin(phase); models A/C circle by +0x3C (step +0x40 = tide step / 4), C lagging +0x50; tide sounds at the turns
- docs/function_notes/agent_06.md:18 water wave per-tick: 4-state sine bob of wave heights (table 0x0215D4B4), plays water splash sound on phase change
sub_20DA384
export/plan0/arm9_main/sub_20DA384_020DA384.c
- docs/function_notes.md:210 Goomba renderer loader: loads three shared resources into object-manager slots +372/+376/+380, after common render setup
- docs/function_notes/agent_06.md:19 water object init: clears flag bits 2/8, sets +0x66=31, runs course water creator callback, loads water_efct nsbmd/nsbca/nsbma
sub_20DA414
export/plan0/arm9_main/sub_20DA414_020DA414.c
- docs/function_notes/agent_06.md:20 allocates 64 bytes from the heap and zeroes them
sub_20DA494
export/plan0/arm9_main/sub_20DA494_020DA494.c
- vm_model/src/mapobj/goomba.rs:1 Goomba (0x191): init
sub_20DA494, ticksub_20DAF20, walking statesub_20DADFC. - vm_model/src/mapobj/goomba.rs:55
sub_20DA494:speed_settingis setting 0's low half,startthe starting point - docs/function_notes.md:179 Goomba init
sub_20DA5F0
export/plan0/arm9_main/sub_20DA5F0_020DA5F0.c
- docs/function_notes/agent_06.md:23 loads kuribo.nsbmd and kuribo.nsbtp (Goomba model + texture pattern) into the render object at 0x0217B668
sub_20DA628
export/plan0/arm9_main/sub_20DA628_020DA628.c
- docs/function_notes/agent_06.md:24 Goomba corpse/flattened object init: scale +0xF8=4096, copies two 16-byte vectors to +0xA4/+0xB4, requests state 1, zeroes velocity
sub_20DA684
export/plan0/arm9_main/sub_20DA684_020DA684.c
- docs/function_notes.md:250 Goomba item callback: qualifying own response in state 0/1/5 queues squash, consumes/marks the hitting item via sub_20F8DDC and drops a mushroom using that item velocity; ordinary response initializes spring velocity from a literal only at rest; native item dispatch remains pending
- docs/function_notes/agent_06.md:25 Goomba item-hit handler: own response 1 in state 0/1/5 queues squash, consumes/marks the hitting item via sub_20F8DDC and drops a mushroom using item velocity (sub_20DA820); ordinary response initializes wobble only at rest
sub_20DA73C
export/plan0/arm9_main/sub_20DA73C_020DA73C.c
- vm_model/src/mapobj/goomba.rs:76 sub_20DA73C: own-response 1 starts squash; response 0 adds ordinary wobble.
- vm_model/src/mapobj/goomba.rs:87 Kart own-hit dispatch and its optional pickup (
sub_20DA73C/sub_20DA820). - docs/function_notes.md:182 Goomba kart callback: own response 1 in state 0/1/5 queues state 2 and disables contact; response 0 adds 82*forwardSpeed>>12 spring velocity only from resting squash 4096/velocity 0; two normal contacts and one qualifying hit replayed exactly
sub_20DA820
export/plan0/arm9_main/sub_20DA820_020DA820.c
- vm_model/src/kart/mushroom.rs:68
sub_20DA820followed bysub_20F6630, normal race branch. - vm_model/src/mapobj/goomba.rs:87 Kart own-hit dispatch and its optional pickup (
sub_20DA73C/sub_20DA820). - docs/function_notes.md:251 Goomba mushroom pickup drop (corrected from debris): map setting 1 low half zero enables it; projects hitter XZ velocity perpendicular to the path, normalizes, allocates item type 3 with owner 8, offsets spawn by the initial launch velocity, then uses shared item launch sub_20F6630. normal-race native drop implemented; launch plus all 538 original item ticks match for flight/growth/landing/spring
- docs/function_notes/agent_06.md:26 Goomba mushroom pickup drop (item type 3, neutral owner 8), corrected from the earlier uncertain debris label by allocator/runtime capture; full normal-race flight/growth/landing port matches 538 captured item ticks (see central function_notes.md and CODEX_NPC_MAP.md)
sub_20DAA10
export/plan0/arm9_main/sub_20DAA10_020DAA10.c
- docs/function_notes.md:183 Goomba state 5 spring-back: velocity += (4096-squash)>>3, decay by 3481/4096, add to squash; elapsed >60 queues walking state 0 on next tick; exact 600-update runtime replay
sub_20DAAA0
export/plan0/arm9_main/sub_20DAAA0_020DAAA0.c
- docs/function_notes.md:245 Goomba spring-back state 5 entry: plays recovery sound, clears collision-disabled bit 0, zeroes squash velocity without restoring squash height
- docs/function_notes/agent_06.md:27 Goomba squash state: plays sound 0x183 at its position (variant by kart sound table), clears flag bit 1, resets +0xC8
sub_20DAB2C
export/plan0/arm9_main/sub_20DAB2C_020DAB2C.c
- docs/function_notes.md:244 Goomba flat state 4: respawning objects queue state 5 when elapsed >300 (302 update calls); one-shot objects decrement draw alpha +256 and remove at zero
- docs/function_notes/agent_06.md:28 Goomba timed state tick: if +0xFC set and state counter >300 switches to state 5, else counts down +0x100 and deletes object (sub_20D2398)
sub_20DAB9C
export/plan0/arm9_main/sub_20DAB9C_020DAB9C.c
- docs/function_notes.md:184 Goomba state 3 compression: squash *=3481/4096; below 819 queues flat state 4 on next tick
sub_20DAC00
export/plan0/arm9_main/sub_20DAC00_020DAC00.c
- docs/function_notes.md:185 Goomba state 2 initial stretch: squash *=4710/4096; above 6144 queues compression state 3 on next tick (earlier squash-only label hid this initial stretch)
sub_20DAC58
export/plan0/arm9_main/sub_20DAC58_020DAC58.c
- docs/function_notes.md:246 Goomba stretch state 2 entry sets collision-disabled bit 0
- docs/function_notes/agent_06.md:31 sets object flag bit 0 (visible) in +2
sub_20DAC74
export/plan0/arm9_main/sub_20DAC74_020DAC74.c
- docs/function_notes/agent_06.md:32 Goomba corpse physics: gravity -1024 per tick, sphere vs KCL ground (sub_1FFDEE4), snaps up and bounces; blends orientation, caps at 180
sub_20DADE8
export/plan0/arm9_main/sub_20DADE8_020DADE8.c
- docs/function_notes.md:248 airborne Goomba state 1 entry restores squash 4096 and spring velocity zero
- docs/function_notes/agent_06.md:33 resets scale +0xC4 to 4096 and +0xC8 to 0
sub_20DADFC
export/plan0/arm9_main/sub_20DADFC_020DADFC.c
- vm_model/src/mapobj/goomba.rs:1 Goomba (0x191): init
sub_20DA494, ticksub_20DAF20, walking statesub_20DADFC. - docs/function_notes.md:181 Goomba walking state (stepping gait along its path)
- docs/function_notes.md:249 Goomba walking update: advances follower only during gait 10..19/30..39, updates curved position, applies 1/8 restoring spring with 3481/4096 damping; snaps to squash 4096/velocity zero inside strict +/-41 windows
sub_20DAF0C
export/plan0/arm9_main/sub_20DAF0C_020DAF0C.c
- docs/function_notes.md:247 Goomba walking state 0 entry restores squash 4096 and spring velocity zero
- docs/function_notes/agent_06.md:34 resets scale +0xC4 to 4096 and +0xC8 to 0
sub_20DAF20
export/plan0/arm9_main/sub_20DAF20_020DAF20.c
- vm_model/src/mapobj/goomba.rs:1 Goomba (0x191): init
sub_20DA494, ticksub_20DAF20, walking statesub_20DADFC. - vm_model/src/mapobj/goomba.rs:105 sub_20DAF20 advances gait even while squashed. sub_2046B40 applies a
- docs/function_notes.md:180 Goomba tick (step counter, state machine)
sub_20DB050
export/plan0/arm9_main/sub_20DB050_020DB050.c
- vm_model/src/mapobj/presentation.rs:43 sub_20DB050: reuse frames 0..19, mirror X during steps 20..39;
- game/src/object_animation.rs:2 Goomba draw routine sub_20DB050 selects counter 0..19 and mirrors the second step.
- docs/function_notes.md:209 Goomba draw: texture-pattern frame is step counter 0..19; counters >=20 mirror X and subtract 20; squash scales Y and widens X; native gait presentation now uses the simulation counter
- docs/function_notes/agent_06.md:35 Goomba draw callback: builds matrix from orientation or path follower, squash scale (+0xC4), animation frame, draws model (sub_20E67C4)
sub_20DB1B0
export/plan0/arm9_main/sub_20DB1B0_020DB1B0.c
- docs/function_notes/agent_06.md:36 Goomba logic class record factory (40 bytes, tick = sub_20DAF20), global 0x0217B664
sub_20DB20C
export/plan0/arm9_main/sub_20DB20C_020DB20C.c
- docs/function_notes/agent_06.md:37 Goomba draw class record factory (44 bytes, loader = sub_20DA5F0, draw = sub_20DB050), global 0x0217B660
sub_20DB268
export/plan0/arm9_main/sub_20DB268_020DB268.c
- docs/function_notes/agent_06.md:38 Goomba collision record factory (64 bytes, kart-hit handlers sub_20DA73C/sub_20DA684, shape 2, id 0x184/0x185)
sub_20DB2B8
export/plan0/arm9_main/sub_20DB2B8_020DB2B8.c
- vm_model/src/mapobj/thwomp.rs:1 Thwomp (object 0x193): init
sub_20DB2B8/sub_20DB430, ticksub_20DB760. - vm_model/src/mapobj/thwomp.rs:52
sub_20DB2B8:settingsare the object's (+0x28 s16 = setting 0 low, +0x2A = start - docs/function_notes.md:160 Thwomp init
sub_20DB3E4
export/plan0/arm9_main/sub_20DB3E4_020DB3E4.c
- docs/function_notes/agent_06.md:41 loads dossun.nsbmd and dossun_shadow.nsbmd (Thwomp model and shadow)
sub_20DB430
export/plan0/arm9_main/sub_20DB430_020DB430.c
- vm_model/src/mapobj/thwomp.rs:1 Thwomp (object 0x193): init
sub_20DB2B8/sub_20DB430, ticksub_20DB760. - docs/function_notes.md:161 Thwomp start on its path
sub_20DB4C4
export/plan0/arm9_main/sub_20DB4C4_020DB4C4.c
- docs/function_notes/agent_06.md:42 Thwomp path factor: follower fraction (sub_20D8CAC) mapped to 0..4096 depending on state (+0xA0) and direction
sub_20DB548
export/plan0/arm9_main/sub_20DB548_020DB548.c
- vm_model/src/mapobj/thwomp.rs:10 Not ported: being knocked about by a star / mega kart (
sub_20DB548, +0xB4 modes 1 and 2), - game/src/objects.rs:1557 a Thwomp slamming down or just landed crushes karts in the cone under it (
sub_20DB548) - docs/function_notes.md:163 Thwomp class callback (star knock, crush handler 11 for karts below)
sub_20DB760
export/plan0/arm9_main/sub_20DB760_020DB760.c
- vm_model/src/mapobj/thwomp.rs:1 Thwomp (object 0x193): init
sub_20DB2B8/sub_20DB430, ticksub_20DB760. - vm_model/src/mapobj/thwomp.rs:82
sub_20DB760, one tick. - docs/function_notes.md:162 Thwomp tick (shudder, hop, slam, wait, rise; glide)
sub_20DBDAC
export/plan0/arm9_main/sub_20DBDAC_020DBDAC.c
- docs/function_notes/agent_06.md:43 Thwomp draw callback: optional tilt from sine table by +0xBA, position >>4, draws body and shadow (sub_20EA8A8/20EA868)
sub_20DBE74
export/plan0/arm9_main/sub_20DBE74_020DBE74.c
- docs/function_notes/agent_06.md:44 Thwomp logic class record factory (40 bytes, tick = sub_20DB760), global 0x0217B670
sub_20DBED0
export/plan0/arm9_main/sub_20DBED0_020DBED0.c
- docs/function_notes/agent_06.md:45 Thwomp draw class record factory (44 bytes, loader sub_20DB3E5, draw sub_20DBDAC), global 0x0217B678
sub_20DBF2C
export/plan0/arm9_main/sub_20DBF2C_020DBF2C.c
- docs/function_notes/agent_06.md:46 Thwomp collision record factory (64 bytes, hit handler sub_20DB548, shape 2, sizes 0x24000/0x2D000, id 0x18A)
sub_20DBF7C
export/plan0/arm9_main/sub_20DBF7C_020DBF7C.c
- vm_model/src/mapobj/chomp.rs:57
sub_20DC11C(+sub_20DBF7C):position/scale_yand the settings from the object. - vm_model/src/mapobj/chomp.rs:211
sub_20DC1D8(+sub_20DBF7Cand state 0's entry).rightandforwardare the - docs/function_notes.md:167 Chain Chomp reset to its stake
sub_20DC11C
export/plan0/arm9_main/sub_20DC11C_020DC11C.c
- vm_model/src/mapobj/chomp.rs:3 0x1A5 (
sub_20DC11C): a loose Chomp hopping along its path (Peach Gardens). Its state - vm_model/src/mapobj/chomp.rs:57
sub_20DC11C(+sub_20DBF7C):position/scale_yand the settings from the object. - docs/function_notes.md:165 path Chain Chomp init (0x1A5)
sub_20DC1D8
export/plan0/arm9_main/sub_20DC1D8_020DC1D8.c
- vm_model/src/mapobj/chomp.rs:10 0x196 (
sub_20DC1D8): a Chomp on a chain (GCN Luigi Circuit). State 0 (sub_20DD0D8/ - vm_model/src/mapobj/chomp.rs:211
sub_20DC1D8(+sub_20DBF7Cand state 0's entry).rightandforwardare the - docs/function_notes.md:166 chained Chain Chomp init (0x196)
sub_20DC308
export/plan0/arm9_main/sub_20DC308_020DC308.c
- docs/function_notes/agent_06.md:49 loads wanwan.nsbmd and rock_shadow.nsbmd (Chain Chomp model and shadow)
sub_20DC354
export/plan0/arm9_main/sub_20DC354_020DC354.c
- vm_model/src/mapobj/chomp.rs:4 machine (+0x80,
sub_2046BE8, states at0x0216BEDC) stays in state 5 (sub_20DC354): - vm_model/src/mapobj/chomp.rs:90 One tick (
sub_20DD27Cwith state 5sub_20DC354). - docs/function_notes.md:176 Chain Chomp state 5 path walk
sub_20DC428
export/plan0/arm9_main/sub_20DC428_020DC428.c
- docs/function_notes.md:175 Chain Chomp state 5 enter (path)
- docs/function_notes.md:414 Chomp state 5 enter: pitch 0x555, slerp rate 0x1C2
sub_20DC448
export/plan0/arm9_main/sub_20DC448_020DC448.c
- docs/function_notes/agent_06.md:51 uncertain: Chain Chomp init constants: sets +0xE8/+0xEC to 0x555/0x1C2 and linked object +0xA8 to 0x599
sub_20DC474
export/plan0/arm9_main/sub_20DC474_020DC474.c
- vm_model/src/mapobj/chomp.rs:16 the stake by the chain. State 3 (
sub_20DC5DC/sub_20DC474): drawn back toward the - vm_model/src/mapobj/chomp.rs:425 State 3's update
sub_20DC474: back toward the stake. - docs/function_notes.md:174 Chain Chomp state 3 return toward the stake
sub_20DC5DC
export/plan0/arm9_main/sub_20DC5DC_020DC5DC.c
- vm_model/src/mapobj/chomp.rs:16 the stake by the chain. State 3 (
sub_20DC5DC/sub_20DC474): drawn back toward the - docs/function_notes.md:173 Chain Chomp state 3 enter
sub_20DC608
export/plan0/arm9_main/sub_20DC608_020DC608.c
- vm_model/src/mapobj/chomp.rs:20 state 2 (
sub_20DC788/sub_20DC608): up at 8 units a tick, its pitch (+0xE8) thrown - vm_model/src/mapobj/chomp.rs:449 sub_20DC608, on a chain
- docs/function_notes.md:178 Chain Chomp state 2 (hit jump)
- docs/function_notes.md:413 Chomp state 2 update: path Chomp walks, vy -= 614 for 40 ticks then pitch += 512, past 0x10555 -> state 5; chained: pitch += 256 after 120 ticks -> state 3
sub_20DC788
export/plan0/arm9_main/sub_20DC788_020DC788.c
- vm_model/src/mapobj/chomp.rs:20 state 2 (
sub_20DC788/sub_20DC608): up at 8 units a tick, its pitch (+0xE8) thrown - vm_model/src/mapobj/chomp.rs:284 sub_20DC788
- docs/function_notes.md:177 Chain Chomp state 2 enter (hit)
- docs/function_notes.md:412 Chomp state 2 enter: pitch 0xD000, slerp rate 0x1C2, vy 0x8000
sub_20DC7C0
export/plan0/arm9_main/sub_20DC7C0_020DC7C0.c
- vm_model/src/mapobj/chomp.rs:14 stake it lunges. State 1 (
sub_20DCC0C/sub_20DC7C0): for 180 ticks it chases a point - vm_model/src/mapobj/chomp.rs:369 State 1's update
sub_20DC7C0: chase a point ahead of the prey, on the chain. - vm_model/src/mapobj/chomp.rs:561 uninitialised stack word (
v17[1]in sub_20DC7C0) whose 3D length overflows, - docs/function_notes.md:172 Chain Chomp state 1 lunge (chase predicted kart, chain limit)
sub_20DCC0C
export/plan0/arm9_main/sub_20DCC0C_020DCC0C.c
- vm_model/src/mapobj/chomp.rs:14 stake it lunges. State 1 (
sub_20DCC0C/sub_20DC7C0): for 180 ticks it chases a point - vm_model/src/mapobj/chomp.rs:278 sub_20DCC0C
- docs/function_notes.md:171 Chain Chomp state 1 enter (lunge)
sub_20DCCC8
export/plan0/arm9_main/sub_20DCCC8_020DCCC8.c
- vm_model/src/mapobj/chomp.rs:11
sub_20DCCC8): wanders round its stake on one Bezier segment at a time through random - vm_model/src/mapobj/chomp.rs:298 State 0's update
sub_20DCCC8. - docs/function_notes.md:170 Chain Chomp state 0 wander (random points, lunge trigger)
sub_20DD0D8
export/plan0/arm9_main/sub_20DD0D8_020DD0D8.c
- vm_model/src/mapobj/chomp.rs:10 0x196 (
sub_20DC1D8): a Chomp on a chain (GCN Luigi Circuit). State 0 (sub_20DD0D8/ - vm_model/src/mapobj/chomp.rs:251
sub_20DD0D8: the first segment goes straight ahead, then turns to the side. - vm_model/src/mapobj/chomp.rs:289 sub_20DD0D8: wander on, starting ahead of it
- docs/function_notes.md:169 Chain Chomp state 0 enter (wander curve ahead)
sub_20DD1F4
export/plan0/arm9_main/sub_20DD1F4_020DD1F4.c
- docs/function_notes/agent_06.md:52 Chain Chomp kart-hit handler: on hit type 1 (unless already state 2 and low), requests state 2
sub_20DD230
export/plan0/arm9_main/sub_20DD230_020DD230.c
- vm_model/src/mapobj/chomp.rs:19 Hit by a star kart (
sub_20DD230, own-reaction 1, unless already flying up in state 2): - vm_model/src/mapobj/chomp.rs:78
sub_20DD230: a kart touched it with own-reactioncode(1: knocked up). - vm_model/src/mapobj/chomp.rs:362
sub_20DD230: own-reaction 1 (a star kart) knocks it up (state 2). - docs/function_notes.md:411 Chain Chomp kart callback: code 1 -> state 2 unless already in 2 with vy >= 0x4000
- docs/function_notes/agent_06.md:53 Chain Chomp kart-hit handler: as sub_20DD1F4 and also runs the object's own hit reaction (sub_20D26F8)
sub_20DD27C
export/plan0/arm9_main/sub_20DD27C_020DD27C.c
- vm_model/src/mapobj/chomp.rs:6 tick (a point's setting 1 x 122 where set). The tick (
sub_20DD27C) adds the hops: falling - vm_model/src/mapobj/chomp.rs:90 One tick (
sub_20DD27Cwith state 5sub_20DC354). - vm_model/src/mapobj/chomp.rs:443 One tick (
sub_20DD27C): the state, then the hop on the plane under the stake. - docs/function_notes.md:168 Chain Chomp tick (state machine, hop physics on plane or course)
sub_20DD6C8
export/plan0/arm9_main/sub_20DD6C8_020DD6C8.c
- docs/function_notes/agent_06.md:54 Chain Chomp draw: while state 4 and not paused moves by velocity, draws body (sub_20EA8A8) and shadow (sub_20EA868)
sub_20DD7A8
export/plan0/arm9_main/sub_20DD7A8_020DD7A8.c
- docs/function_notes/agent_06.md:55 Chain Chomp logic class record factory (40 bytes, tick = sub_20DD27C), global 0x0217B6B4
sub_20DD804
export/plan0/arm9_main/sub_20DD804_020DD804.c
- docs/function_notes/agent_06.md:56 Chain Chomp draw class record factory (44 bytes, loader sub_20DC309, draw sub_20DD6C8), global 0x0217B6B8
sub_20DD860
export/plan0/arm9_main/sub_20DD860_020DD860.c
- docs/function_notes/agent_06.md:57 Chain Chomp collision record factory (64 bytes, hit handlers sub_20DD230/20DD1F4, shape 1, id 0x12E)
sub_20DD8B0
export/plan0/arm9_main/sub_20DD8B0_020DD8B0.c
- docs/function_notes/agent_06.md:58 chain init: lays out link positions from anchor to ball in equal steps, zeroes link velocities
sub_20DD950
export/plan0/arm9_main/sub_20DD950_020DD950.c
- docs/function_notes/agent_06.md:59 chain struct init: allocs link position/velocity arrays (12 bytes per link), computes link spacing and gravity constants, lays out links
sub_20DDA2C
export/plan0/arm9_main/sub_20DDA2C_020DDA2C.c
- docs/function_notes/agent_06.md:60 chain: clears flag +8 (chain not locked)
sub_20DDA38
export/plan0/arm9_main/sub_20DDA38_020DDA38.c
- docs/function_notes/agent_06.md:61 chain end-ball draw: sets shadow/alpha bits, billboard matrix (sub_20E6CBC), draws (sub_20E67C4)
sub_20DDAA0
export/plan0/arm9_main/sub_20DDAA0_020DDAA0.c
- docs/function_notes/agent_06.md:62 chain links draw: for each middle link draws the link model with the second billboard matrix (sub_20E6CF8)
sub_20DDB44
export/plan0/arm9_main/sub_20DDB44_020DDB44.c
- docs/function_notes/agent_06.md:63 chain physics step: verlet-style relaxation with gravity, link length constraints, ground clamp, damping
sub_20DE000
export/plan0/arm9_main/sub_20DE000_020DE000.c
- docs/function_notes/agent_06.md:64 chain-stake object init: anchor from the owner chomp, link count 4 or 7, spacing; sets flag 1 and angle factor
sub_20DE130
export/plan0/arm9_main/sub_20DE130_020DE130.c
- docs/function_notes/agent_06.md:65 loads wanwan_chain.nsbmd and (if file exists) MapObj/wanwan_kui.nsbmd (stake)
sub_20DE184
export/plan0/arm9_main/sub_20DE184_020DE184.c
- docs/function_notes/agent_06.md:66 chain re-anchors to the owner's position/offset (sub_20DD8B0)
sub_20DE204
export/plan0/arm9_main/sub_20DE204_020DE204.c
- docs/function_notes/agent_06.md:67 stub kart-hit handler: returns argument a4 unchanged
sub_20DE20C
export/plan0/arm9_main/sub_20DE20C_020DE20C.c
- docs/function_notes/agent_06.md:68 stub kart-hit handler: returns argument a4 unchanged
sub_20DE214
export/plan0/arm9_main/sub_20DE214_020DE214.c
- docs/function_notes/agent_06.md:69 chain tick: copies owner pos if not locked, then chain physics step (sub_20DDB44)
sub_20DE270
export/plan0/arm9_main/sub_20DE270_020DE270.c
- docs/function_notes/agent_06.md:70 chain draw: links (sub_20DDAA0) then end ball (sub_20DDA38) when present
sub_20DE2D8
export/plan0/arm9_main/sub_20DE2D8_020DE2D8.c
- docs/function_notes/agent_06.md:71 chain logic class record factory (40 bytes, tick = sub_20DE214), global 0x0217B6C0
sub_20DE334
export/plan0/arm9_main/sub_20DE334_020DE334.c
- docs/function_notes/agent_06.md:72 chain draw class record factory (44 bytes, loader sub_20DE131, draw sub_20DE270), global 0x0217B6BC
sub_20DE390
export/plan0/arm9_main/sub_20DE390_020DE390.c
- docs/function_notes/agent_06.md:73 chain collision record factory (64 bytes, stub handlers sub_20DE20C/20DE204, shape 2, id 0x12F)
sub_20DE3E0
export/plan0/arm9_main/sub_20DE3E0_020DE3E0.c
- vm_model/src/mapobj/knock.rs:57 Used by the Piranha Plant (0x1A6,
sub_20E5AEC) and 0x197 (sub_20DE3E0). - docs/function_notes/agent_06.md:76 uncertain: pipe plant motion: advances +8 by speed * 0xD000 and updates plant positioning (sub_20EC854/sub_20EC884)
sub_20DE438
export/plan0/arm9_main/sub_20DE438_020DE438.c
- docs/function_notes/agent_06.md:77 loads earthen_pipe1.nsbmd and earthen_pipe2.nsbmd
sub_20DE488
export/plan0/arm9_main/sub_20DE488_020DE488.c
- docs/function_notes/agent_06.md:78 pipe hit handler: calls sub_20EC41C and returns a4
sub_20DE4A0
export/plan0/arm9_main/sub_20DE4A0_020DE4A0.c
- docs/function_notes/agent_06.md:79 pipe hit handler: if sub_20EC450 says hit, runs object hit reaction (sub_20D26F8)
sub_20DE4D4
export/plan0/arm9_main/sub_20DE4D4_020DE4D4.c
- docs/function_notes/agent_06.md:80 object state machine tick (sub_2046B40 on +0x80)
sub_20DE4E4
export/plan0/arm9_main/sub_20DE4E4_020DE4E4.c
- docs/function_notes/agent_06.md:81 pipe draw: billboard matrix at object pos; draws one or two pipe models depending on state
sub_20DE5A0
export/plan0/arm9_main/sub_20DE5A0_020DE5A0.c
- docs/function_notes/agent_06.md:82 pipe logic class record factory (40 bytes, tick = sub_20DE4D4), global 0x0217B6CC
sub_20DE5FC
export/plan0/arm9_main/sub_20DE5FC_020DE5FC.c
- docs/function_notes/agent_06.md:83 pipe draw class record factory (44 bytes, loader sub_20DE439, draw sub_20DE4E4), global 0x0217B6D8
sub_20DE658
export/plan0/arm9_main/sub_20DE658_020DE658.c
- docs/function_notes.md:24 pipe (0x12F) collision class factory (copies static class record 0x02158528)
sub_20DE6A8
export/plan0/arm9_main/sub_20DE6A8_020DE6A8.c
- vm_model/src/mapobj/path_box.rs:4 Init: the plain box init (
sub_20DE6A8), then an eased path follower (sub_20D7D4C, unit speed - game/src/items.rs:321 the box sits 12 units above its placement (
sub_20DE6A8: y += 49152)
sub_20DE84C
export/plan0/arm9_main/sub_20DE84C_020DE84C.c
- docs/function_notes/agent_06.md:84 item box loader: loads box.nsbmd and question.nsbmd, builds 300-entry and 130-entry sine/cos tables for the bobbing
sub_20DE9EC
export/plan0/arm9_main/sub_20DE9EC_020DE9EC.c
- docs/function_notes/agent_06.md:85 sets halfword +0xA4 = 128
sub_20DE9F8
export/plan0/arm9_main/sub_20DE9F8_020DE9F8.c
- docs/function_notes/agent_06.md:86 returns 0x270F000 if +0xF8 set, else path distance (sub_20D8828) if +0xA8 set, else 0
sub_20DEA50
export/plan0/arm9_main/sub_20DEA50_020DEA50.c
- vm_model/src/mapobj/path_box.rs:2 (tick),
sub_20DF58C(hover),sub_20DEA50(the same kart-hit handler as the plain box). - docs/function_notes/agent_06.md:87 item box kart-hit handler: unless kart flag 0x400000, marks box used (+0xA4=0), spawns break effect (sub_20DEB2C), may delete
sub_20DEB2C
export/plan0/arm9_main/sub_20DEB2C_020DEB2C.c
- game/src/sfx.rs:36 Item box smashed (
sub_20DEB2C), roulette spinning, item obtained (sub_20BAB54: - docs/function_notes/agent_06.md:88 item box break effects: particles 45/46/47 for the local player, then item roll (sub_20FA78C)
sub_20DEBEC
export/plan0/arm9_main/sub_20DEBEC_020DEBEC.c
- docs/function_notes/agent_06.md:89 item box animation counters: three timers (300, 130, 128 ticks) wrapping, clears flag bit 0 when done
sub_20DEC4C
export/plan0/arm9_main/sub_20DEC4C_020DEC4C.c
- docs/function_notes/agent_06.md:90 item box draw: scale fade (26/20/13 by respawn timer), draws the box and "?" at position, distance culling
sub_20DEE8C
export/plan0/arm9_main/sub_20DEE8C_020DEE8C.c
- docs/function_notes/agent_06.md:91 item box per-tick: advances rotation angle by 202 and builds rotation matrix from sine table (sub_2147250)
sub_20DEF00
export/plan0/arm9_main/sub_20DEF00_020DEF00.c
- docs/function_notes/agent_06.md:92 item box "?" draw: per-frame rotation matrix from table, alpha/colour bits, draws (sub_20E67C4)
sub_20DF07C
export/plan0/arm9_main/sub_20DF07C_020DF07C.c
- docs/function_notes/agent_06.md:93 item box cube draw: draws rotated cube model, optional custom matrix callback (+0x100)
sub_20DF238
export/plan0/arm9_main/sub_20DF238_020DF238.c
- docs/function_notes/agent_06.md:94 item box logic class record factory (40 bytes, tick = sub_20DEBEC), global 0x0217B6F8
sub_20DF294
export/plan0/arm9_main/sub_20DF294_020DF294.c
- docs/function_notes/agent_06.md:95 item box draw class record A (44 bytes, unload sub_20DEE8C, draw sub_20DEC4C), global 0x0217B6F4
sub_20DF2F0
export/plan0/arm9_main/sub_20DF2F0_020DF2F0.c
- docs/function_notes/agent_06.md:96 item box draw class record B (44 bytes, draw sub_20DEF00), global 0x0217B6E0
sub_20DF34C
export/plan0/arm9_main/sub_20DF34C_020DF34C.c
- docs/function_notes/agent_06.md:97 item box draw class record C (44 bytes, loader sub_20DE84D, draw sub_20DF07C), global 0x0217B6EC
sub_20DF3A8
export/plan0/arm9_main/sub_20DF3A8_020DF3A8.c
- vm_model/src/mapobj/path_box.rs:24 Collision class sizes (
sub_20DF6780xF000, plain boxsub_20DF3A80xA000). - docs/function_notes/agent_06.md:98 item box collision record factory (64 bytes, hit sub_20DEA50, shape 1, size 0xA000)
sub_20DF3F8
export/plan0/arm9_main/sub_20DF3F8_020DF3F8.c
- docs/function_notes/agent_06.md:99 resets rotation globals 0x0217B730/34 to 0 and scales at 0x0217B73C/40 to 4096
sub_20DF428
export/plan0/arm9_main/sub_20DF428_020DF428.c
- vm_model/src/mapobj/path_box.rs:1 Item boxes that ride a path (object 0xC9, Luigi's Mansion):
sub_20DF428(init),sub_20DF48C - game/src/items.rs:112 A path box (object 0xC9,
sub_20DF428): rides its path. - game/src/items.rs:323 a path box with a path rides it (
sub_20DF428); without one it stays put - docs/function_notes/agent_06.md:100 uncertain: item-box variant init: base init (sub_20DE6A8) then path-follower init (sub_20D7D4C/20D859C/20D8C74) unless +0xF8 set
sub_20DF48C
export/plan0/arm9_main/sub_20DF48C_020DF48C.c
- vm_model/src/mapobj/path_box.rs:1 Item boxes that ride a path (object 0xC9, Luigi's Mansion):
sub_20DF428(init),sub_20DF48C - vm_model/src/mapobj/path_box.rs:6 (
sub_20D859C(.., start, 1)). Each tick (sub_20DF48C): the follower advances; arriving at a - vm_model/src/mapobj/path_box.rs:19 Lift above the path (
sub_20DF48C:+= 0x10000). - vm_model/src/mapobj/path_box.rs:68 One tick (
sub_20DF48C);tickscounts the box rotation updates so far. - game/src/items.rs:589 path boxes ride their path whether or not they are broken (
sub_20DF48C) - docs/function_notes/agent_06.md:101 item box variant tick: walks path follower, flags visible when both path points enabled, adds hover offsets, then animation counters (sub_20DEBEC)
sub_20DF58C
export/plan0/arm9_main/sub_20DF58C_020DF58C.c
- vm_model/src/mapobj/path_box.rs:2 (tick),
sub_20DF58C(hover),sub_20DEA50(the same kart-hit handler as the plain box). - vm_model/src/mapobj/path_box.rs:9 rotation counter (
sub_20DF58C: the counter grows 728 a tick, the hover issin * 4). The - vm_model/src/mapobj/path_box.rs:21 The rotation counter's step per tick and the hover's amplitude factor (
sub_20DF58C). - vm_model/src/mapobj/path_box.rs:36 The hover for the box rotation counter after
ticksupdates (sub_20DF58C). - docs/function_notes/agent_06.md:102 item box rotation update: advances angle by 728, sets bobbing height and scale globals from sine table
sub_20DF61C
export/plan0/arm9_main/sub_20DF61C_020DF61C.c
- docs/function_notes/agent_06.md:103 item box variant logic class record factory (40 bytes, loader sub_20DF3F9, unload sub_20DF58C, tick sub_20DF48C), global 0x0217B738
sub_20DF678
export/plan0/arm9_main/sub_20DF678_020DF678.c
- vm_model/src/mapobj/path_box.rs:24 Collision class sizes (
sub_20DF6780xF000, plain boxsub_20DF3A80xA000). - docs/function_notes/agent_06.md:104 item box variant collision record factory (64 bytes, hit sub_20DEA50, shape 1, size 0xF000)
sub_20DF6C8
export/plan0/arm9_main/sub_20DF6C8_020DF6C8.c
- docs/function_notes/agent_06.md:105 bubble object init (mkd_ef_bubble): state machine setup (table 0x0216BFA0), start height +0xA4, records start Y, inits emitter (sub_20E516C)
sub_20DF758
export/plan0/arm9_main/sub_20DF758_020DF758.c
- docs/function_notes/agent_06.md:106 loads mkd_ef_bubble.nsbmd/.nsbta, allocs 56-byte animation clock, binds animation (sub_20EA514)
sub_20DF7D0
export/plan0/arm9_main/sub_20DF7D0_020DF7D0.c
- docs/function_notes/agent_06.md:107 stub kart-hit handler: returns argument a4 unchanged
sub_20DF7D8
export/plan0/arm9_main/sub_20DF7D8_020DF7D8.c
- docs/function_notes/agent_06.md:108 bubble kart-hit handler: first hit per kart slot (bitmask +0xE4) runs hit reaction (sub_20D26F8) and sets flag 0x40000000
sub_20DF83C
export/plan0/arm9_main/sub_20DF83C_020DF83C.c
- docs/function_notes/agent_06.md:109 bubble state: when state timer reaches +0xA0 requests state 0
sub_20DF85C
export/plan0/arm9_main/sub_20DF85C_020DF85C.c
- docs/function_notes/agent_06.md:110 bubble state entry: sets flags 2 and 8 in +2
sub_20DF890
export/plan0/arm9_main/sub_20DF890_020DF890.c
- docs/function_notes/agent_06.md:111 bubble rising state: gravity-like decel of vertical speed (min -12288), spins, requests state 1 when below start height
sub_20DF938
export/plan0/arm9_main/sub_20DF938_020DF938.c
- docs/function_notes/agent_06.md:112 bubble pop state entry: resets, plays sound 396, spawns particle effects 69 and 70 (stored +0xE8/+0xEC)
sub_20DFA50
export/plan0/arm9_main/sub_20DFA50_020DFA50.c
- docs/function_notes/agent_06.md:113 bubble tick: state machine tick, then shows/hides and moves the two particle emitters
sub_20DFAE4
export/plan0/arm9_main/sub_20DFAE4_020DFAE4.c
- docs/function_notes/agent_06.md:114 ticks bubble animation clock (sub_2087DE0)
sub_20DFAFC
export/plan0/arm9_main/sub_20DFAFC_020DFAFC.c
- docs/function_notes/agent_06.md:115 bubble draw: matrix with billboard, rotation from sine table, scale, draws model and emitter (sub_20E53AC)
sub_20DFC44
export/plan0/arm9_main/sub_20DFC44_020DFC44.c
- docs/function_notes/agent_06.md:116 bubble logic class record factory (44 bytes, unload sub_20DFAE4, tick sub_20DFA50)
sub_20DFCB8
export/plan0/arm9_main/sub_20DFCB8_020DFCB8.c
- docs/function_notes/agent_06.md:117 bubble draw class record factory (44 bytes, loader sub_20DF759, draw sub_20DFAFC), global 0x0217B754
sub_20DFD14
export/plan0/arm9_main/sub_20DFD14_020DFD14.c
- docs/function_notes/agent_06.md:118 bubble collision record factory (64 bytes, hit handlers sub_20DF7D8/20DF7D0, shape 1, id 0x18D)
sub_20DFD64
export/plan0/arm9_main/sub_20DFD64_020DFD64.c
- vm_model/src/mapobj/block.rs:1 Bowser's Castle's sliding blocks (0xCA): init
sub_20DFD64, ticksub_20E01F0, states at - game/src/objects.rs:72 Moving terrain (
sub_1FFDEE4/sub_20E1D10): the lava blocks 0xCA (box,sub_20DFD64: - docs/function_notes.md:270 Bowser's Castle sliding block init (top speed setting 0 x 4096 / 100)
- docs/function_notes.md:537 lava block init: path, moving terrain box 400 x scale x, 50 x scale y, 175 x scale z, top attribute 1 (floor), sides 0
sub_20DFF08
export/plan0/arm9_main/sub_20DFF08_020DFF08.c
- docs/function_notes/agent_06.md:119 loads koopa_block.nsbmd (Koopa block / sliding block) and sets render flags
sub_20DFF4C
export/plan0/arm9_main/sub_20DFF4C_020DFF4C.c
- docs/function_notes/agent_06.md:120 path follower factor for the block at +0x144: fraction through segment, inverted when direction +0x15C is 0
sub_20DFF70
export/plan0/arm9_main/sub_20DFF70_020DFF70.c
- docs/function_notes.md:516 is a lava block (id 202)
- docs/function_notes/agent_06.md:121 returns whether argument == 202
sub_20DFF88
export/plan0/arm9_main/sub_20DFF88_020DFF88.c
- docs/function_notes/agent_06.md:122 tail thunk: calls sub_20E1E38 with the block render object (0x0217B764) and callback sub_20E1DEC
sub_20DFFAC
export/plan0/arm9_main/sub_20DFFAC_020DFFAC.c
- vm_model/src/mapobj/block.rs:2
0x0216xxxx(sub_20E012Cspeeding up,sub_20E005Ccruising,sub_20DFFACslowing). - vm_model/src/mapobj/block.rs:39 Speed on the sine of the progress x 64 (
sub_20E012C/sub_20DFFAC), at least 512. - docs/function_notes.md:274 sliding block state 2: slow down on a sine
sub_20E005C
export/plan0/arm9_main/sub_20E005C_020E005C.c
- vm_model/src/mapobj/block.rs:2
0x0216xxxx(sub_20E012Cspeeding up,sub_20E005Ccruising,sub_20DFFACslowing). - docs/function_notes.md:273 sliding block state 1: cruise, brake before a stop
sub_20E00F8
export/plan0/arm9_main/sub_20E00F8_020E00F8.c
- docs/function_notes/agent_06.md:124 copies +0x168 to +0x148 and sets +0x154 = value * table entry (+0x34 of 84-byte records at *(+0x144))
sub_20E012C
export/plan0/arm9_main/sub_20E012C_020E012C.c
- vm_model/src/mapobj/block.rs:2
0x0216xxxx(sub_20E012Cspeeding up,sub_20E005Ccruising,sub_20DFFACslowing). - vm_model/src/mapobj/block.rs:39 Speed on the sine of the progress x 64 (
sub_20E012C/sub_20DFFAC), at least 512. - docs/function_notes.md:272 sliding block state 0: speed up on a sine over the first 1/16
sub_20E01F0
export/plan0/arm9_main/sub_20E01F0_020E01F0.c
- vm_model/src/mapobj/block.rs:1 Bowser's Castle's sliding blocks (0xCA): init
sub_20DFD64, ticksub_20E01F0, states at - vm_model/src/mapobj/block.rs:47
sub_20E01F0, one tick. - docs/function_notes.md:271 sliding block tick (waits at points, state machine for the speed curve)
sub_20E0340
export/plan0/arm9_main/sub_20E0340_020E0340.c
- docs/function_notes/hk_21.md:16 Heap-allocates a 40-byte object, copies a 40-byte template from off_20E0398 into it, stores the pointer in off_20E0394, calls sub_20E6F50 on the global, returns the pointer.
sub_20E039C
export/plan0/arm9_main/sub_20E039C_020E039C.c
- docs/function_notes/hk_21.md:17 Heap-allocates a 44-byte object, copies a 44-byte template from off_20E03F4 into it, stores pointer in off_20E03F0, calls sub_20D49D8 on it, returns the pointer.
sub_20E03F8
export/plan0/arm9_main/sub_20E03F8_020E03F8.c
- docs/function_notes/NEEDS_REVIEW.md:669 Heap-allocates a 64-byte block (16 words), copies a 4x4 table from *off_20E0444 into it, returns the new pointer. [REVIEW]
- docs/function_notes/hk_21.md:18 Heap-allocates a 64-byte block (16 words), copies a 4x4 table from *off_20E0444 into it, returns the new pointer. [REVIEW]
- docs/function_notes/review_haiku1.md:65 Allocates 64 bytes, copies function pointers from table
sub_20E0448
export/plan0/arm9_main/sub_20E0448_020E0448.c
- docs/function_notes/NEEDS_REVIEW.md:670 If object a1 has flag +312 set and type word 203, returns whether the squared XZ distance from (a1[1],a1[3]) is at least the squared radius at +340; otherwise returns the flag at +312. Kart-area guess. [REVIEW]
- docs/function_notes/hk_21.md:19 If object a1 has flag +312 set and type word 203, returns whether the squared XZ distance from (a1[1],a1[3]) is at least the squared radius at +340; otherwise returns the flag at +312. Kart-area guess. [REVIEW]
- docs/function_notes/review_haiku1.md:66 Checks if distance squared exceeds threshold at +340, returns boolean
sub_20E04B0
export/plan0/arm9_main/sub_20E04B0_020E04B0.c
- docs/function_notes/NEEDS_REVIEW.md:671 If object *a1 is non-null, transforms a1+1 by matrix at +40 into a2 and applies sub_2148504 to it; if flag +304 is set, transforms a1+4 into a3 and returns 1 when a3[1] is below the threshold at +288. [REVIEW]
- docs/function_notes/hk_21.md:20 If object *a1 is non-null, transforms a1+1 by matrix at +40 into a2 and applies sub_2148504 to it; if flag +304 is set, transforms a1+4 into a3 and returns 1 when a3[1] is below the threshold at +288. [REVIEW]
- docs/function_notes/review_haiku1.md:67 Transforms vectors, checks visibility against distance at +288
sub_20E0538
export/plan0/arm9_main/sub_20E0538_020E0538.c
- docs/function_notes/NEEDS_REVIEW.md:672 If *result is non-null, transforms result+1 by the matrix at +40 into a2 and calls sub_2148504 on it; returns result. [REVIEW]
- docs/function_notes/hk_21.md:21 If *result is non-null, transforms result+1 by the matrix at +40 into a2 and calls sub_2148504 on it; returns result. [REVIEW]
- docs/function_notes/review_haiku1.md:68 Transforms vector using sub_2146D78 and sub_2148504
sub_20E0584
export/plan0/arm9_main/sub_20E0584_020E0584.c
- docs/function_notes/NEEDS_REVIEW.md:673 Transforms a2 into a local 10-int matrix via sub_21484D0, dots it with three vectors of a1 (offsets +10, +13, +16) into a4[1..3]; if a3 is non-null and a1[76] is set, dots a3 with the same vectors into a4[4..6], else zeroes them; stores a1 in a4[0]. [REVIEW]
- docs/function_notes/hk_21.md:22 Transforms a2 into a local 10-int matrix via sub_21484D0, dots it with three vectors of a1 (offsets +10, +13, +16) into a4[1..3]; if a3 is non-null and a1[76] is set, dots a3 with the same vectors into a4[4..6], else zeroes them; stores a1 in a4[0]. [REVIEW]
- docs/function_notes/review_haiku1.md:69 Computes cross products for plane equations via sub_21484D0 and sub_2039828
sub_20E0650
export/plan0/arm9_main/sub_20E0650_020E0650.c
- docs/function_notes/hk_21.md:23 Heap-allocates a 28-byte object, stores the pointer in *a1, zeroes its first word, returns it.
sub_20E0680
export/plan0/arm9_main/sub_20E0680_020E0680.c
- vm_model/src/kart/movement.rs:226 carried the contact point (
sub_20E0680). - vm_model/src/kart/movement.rs:228 Moving terrain's turn of the kart (
sub_20E0680's 16-bit output, added to the yaw). - vm_model/src/kart/movement.rs:394 A moving-terrain object's motion this tick, as
sub_20E0680reads it: velocity (+16), current - vm_model/src/kart/movement.rs:624 sub_20E1A80 -> sub_20E0680: the object carries the kart (the last floor
- vm_model/src/kart/movement.rs:1262 (sub_20E0680) and turned by the same step (+0x124 . cap axis)
- vm_model/src/kart/moving_cylinder.rs:11
sub_20E0680are not modelled), like the box. - vm_model/src/kart/platform_motion.rs:2 (
sub_20E0680, called fromsub_20E1A80/sub_20E16DCfor floor contacts). - game/src/objects.rs:60 the kart's own contact:
sub_20E0680).turning: the turning platforms' motion, in - game/src/objects.rs:183 reads (
sub_20E0680: carried round and turned with it). - docs/function_notes.md:514 moving-terrain contact motion outputs; uses object velocity +16/+20/+24 and old basis +160/+172/+184 to compute displacement at the contact point, plus direction dotted with object+292 to optional signed 16-bit output.
- docs/function_notes/NEEDS_REVIEW.md:674 Writes negated vector a1[4..6] to a4 when set, transforms a2 into a local matrix and accumulates three scaled vectors (a1+40/+43/+46) into a4 via sub_2147FD8; if a5 is set, stores dot(a1+73, a3) into *a5. [REVIEW]
- docs/function_notes/hk_21.md:24 Writes negated vector a1[4..6] to a4 when set, transforms a2 into a local matrix and accumulates three scaled vectors (a1+40/+43/+46) into a4 via sub_2147FD8; if a5 is set, stores dot(a1+73, a3) into *a5. [REVIEW]
sub_20E0764
export/plan0/arm9_main/sub_20E0764_020E0764.c
- vm_model/src/kart/movement.rs:371 half length +0x104 (
sub_20E0764). - vm_model/src/kart/movement.rs:428 Replay-verified cylinder response (
sub_20E0764), retaining the original face normal. - vm_model/src/kart/moving_cylinder.rs:1 Moving-terrain cylinder contacts (
sub_20E0764, edge casesub_20E16DC, result writer - docs/function_notes.md:526 sphere (centre a2, radius a3) against a cylinder object: object centre +244 (
a1+61), axes x +40 (a1+10), y/cylinder axis +52 (a1+13), z +64 (a1+16), radius +256 (a1[64]), half length +260 (a1[65]), side attributes +272 (a1[68]), cap attributes +276 (a1[69]). Radial test|(d.x, d.z)|^2 < (R + r)^2else miss; axial test|d.y| <= half + relse miss. Zone flags: base 0x1000-or-other from two literal words (inside the radius vs in the ring), then 0x50/0x60 (below: within / past the end) or 0x90/0xA0 (above); 0x1000 + 0x10 = cap contact (depthhalf + r -/+ d.y, result viasub_20E1A80(r, depth, ..., 128, ..., cap attrs)), otherwise side/edge viasub_20D6F78(2D normalise) andsub_20E1A80(..., 12288, ..., side attrs)or the edge casesub_20E16DC. The RustMovingSolid::contactis a generic closest-point stand-in for this; exact port needssub_20E1A80,sub_20E16DCand the two flag literals. - docs/function_notes.md:536 moving terrain cylinder along the object's y: centre +0xF4, radius +0x100, half length +0x104; cap/side/rim contacts (sub_20E1A80 plane, sub_20E16DC rim) with attributes +0x110 (side) / +0x114 (caps)
- docs/function_notes/NEEDS_REVIEW.md:675 Kart/object proximity-and-region test (1068 bytes): transforms a2 by matrix a1+61, compares XZ dot products against radius a1[64]+a3, classifies a flag word, then calls sub_20E1A80 or sub_20E16DC to record a hit; returns 1 on hit. [REVIEW]
- docs/function_notes/hk_21.md:25 Kart/object proximity-and-region test (1068 bytes): transforms a2 by matrix a1+61, compares XZ dot products against radius a1[64]+a3, classifies a flag word, then calls sub_20E1A80 or sub_20E16DC to record a hit; returns 1 on hit. [REVIEW]
sub_20E0B90
export/plan0/arm9_main/sub_20E0B90_020E0B90.c
- docs/function_notes/NEEDS_REVIEW.md:676 Stub: indirect call through an unresolved function pointer (decompiler stack warning). [REVIEW]
- docs/function_notes/hk_21.md:26 Stub: indirect call through an unresolved function pointer (decompiler stack warning). [REVIEW]
- docs/function_notes/review_haiku1.md:70 Calls function pointer from stack (undefined behavior)
sub_20E0BAC
export/plan0/arm9_main/sub_20E0BAC_020E0BAC.c
- vm_model/src/kart/movement.rs:370 extents (+0x100, +0x104, +0x108;
sub_20E0BAC), 1 a cylinder along its y axis, radius +0x100, - vm_model/src/kart/moving_terrain.rs:1 Moving-terrain box contacts (
sub_20E0BAC,sub_20E16DC,sub_20E1A80). - docs/function_notes.md:512 moving-terrain sphere versus oriented box; center object+244, axes +40/+52/+64, x half extent +256, y +260, asymmetric z +264/+268. Classifies inside/outside each slab and face/edge/corner contact; not just a top rectangle test. Bowser block initializes half extents 400/50/175/175 times scale; tick sub_20E01F0 uses sub_2147FD8: position + signed scale(-half-height, local up); negative signed truncation matters. Ordinary box contact is now replay-backed in kart/moving_terrain.rs; special flags and other output paths remain open.
- docs/function_notes.md:528 ordinary moving-terrain oriented-box contact now ported in kart/moving_terrain.rs;30 original Bowser probes match hit/push/normal/floor-wall classification and installed WithFloors adapter flags. SDK truncated local projections, minimum-face tie order, 1024-scaled edge/corner normalization; configured face and signed normal y threshold determine floor. Special flags/asymmetric z/alternate surfaces/multiple contact merge remain unverified.
- docs/function_notes.md:535 moving terrain box: centre +0xF4, half extents +0x100/+0x104/+0x108 along the object's axes; face/edge/corner contacts with attributes +0x110 (sides) / +0x114 (top, bottom)
- docs/function_notes/NEEDS_REVIEW.md:677 Large kart contact test (2864 bytes): transforms a2 into local space with matrix a1+61, classifies against extents a1[64..67] into a flag word, dispatches to sub_20E1A80 / sub_20E16DC per case, computes a contact normal (sub_20D70AC, sub_21482CC), updates min/max accumulators in a5, writes status to *a8 (0/8/30), returns 1 on contact. [REVIEW]
- docs/function_notes/hk_21.md:27 Large kart contact test (2864 bytes): transforms a2 into local space with matrix a1+61, classifies against extents a1[64..67] into a flag word, dispatches to sub_20E1A80 / sub_20E16DC per case, computes a contact normal (sub_20D70AC, sub_21482CC), updates min/max accumulators in a5, writes status to *a8 (0/8/30), returns 1 on contact. [REVIEW]
sub_20E16DC
export/plan0/arm9_main/sub_20E16DC_020E16DC.c
- vm_model/src/kart/moving_cylinder.rs:1 Moving-terrain cylinder contacts (
sub_20E0764, edge casesub_20E16DC, result writer - vm_model/src/kart/moving_cylinder.rs:90 beyond the radius and past the end: the rim edge (
sub_20E16DC) - vm_model/src/kart/moving_terrain.rs:1 Moving-terrain box contacts (
sub_20E0BAC,sub_20E16DC,sub_20E1A80). - vm_model/src/kart/platform_motion.rs:2 (
sub_20E0680, called fromsub_20E1A80/sub_20E16DCfor floor contacts). - docs/function_notes.md:529 moving-box two-axis edge contact; sum world-space axis separations, scale1024, SDK normalize+length, reject distance>radius1024, push=normalradius-separation; floor if either eligible signed face y exceeds object+288 and flags0x60 clear. Port replay includes tilted edges.
- docs/function_notes/NEEDS_REVIEW.md:678 Kart plane/edge contact helper (932 bytes): builds a normal from two vectors a13/a14 scaled by a2/a3, normalizes it to length a1 (sub_20D70AC, sub_21482CC), updates min/max accumulators in a15/a16, sets status *a7, optionally writes a normal to a17, calls sub_20E0680; returns 1 when within range. [REVIEW]
- docs/function_notes/hk_21.md:28 Kart plane/edge contact helper (932 bytes): builds a normal from two vectors a13/a14 scaled by a2/a3, normalizes it to length a1 (sub_20D70AC, sub_21482CC), updates min/max accumulators in a15/a16, sets status *a7, optionally writes a normal to a17, calls sub_20E0680; returns 1 when within range. [REVIEW]
sub_20E1A80
export/plan0/arm9_main/sub_20E1A80_020E1A80.c
- vm_model/src/kart/movement.rs:624 sub_20E1A80 -> sub_20E0680: the object carries the kart (the last floor
- vm_model/src/kart/moving_cylinder.rs:2
sub_20E1A80): the cylinder counterpart of [super::moving_terrain::TerrainBox], used by - vm_model/src/kart/moving_cylinder.rs:53 sub_20E1A80 with the cap: push along the axis, normal ± the axis
- vm_model/src/kart/moving_terrain.rs:1 Moving-terrain box contacts (
sub_20E0BAC,sub_20E16DC,sub_20E1A80). - vm_model/src/kart/platform_motion.rs:2 (
sub_20E0680, called fromsub_20E1A80/sub_20E16DCfor floor contacts). - docs/function_notes.md:513 moving-terrain box face contact accumulator; a7 permits floor classification when signed face normal y exceeds object+288 threshold, otherwise type8 wall. Surface type0 or type18 selected for floor, per-axis maximum/minimum push, deepest floor/wall normal, lowest contact; floor contact calls sub_20E0680 for platform motion output.
- docs/function_notes/NEEDS_REVIEW.md:679 Per-axis contact accumulator (656 bytes): projects direction a10 with offset a2, updates min/max arrays a11[0..5] and status *a6, writes displacement to a13 when set, calls sub_20E0680 when flagged. [REVIEW]
- docs/function_notes/hk_21.md:29 Per-axis contact accumulator (656 bytes): projects direction a10 with offset a2, updates min/max arrays a11[0..5] and status *a6, writes displacement to a13 when set, calls sub_20E0680 when flagged. [REVIEW]
sub_20E1D10
export/plan0/arm9_main/sub_20E1D10_020E1D10.c
- vm_model/src/kart/movement.rs:369 A moving terrain object's shape (object +0x134;
sub_20E1D10): 0 an oriented box with half - vm_model/src/kart/movement.rs:527 dispatcher (
sub_20E1D10) uses oriented box/cylinder face, edge and corner - vm_model/src/kart/moving_cylinder.rs:3
sub_20E1D10for objects whose shape word (+308) is 1. - game/src/objects.rs:72 Moving terrain (
sub_1FFDEE4/sub_20E1D10): the lava blocks 0xCA (box,sub_20DFD64: - docs/function_notes.md:511 moving terrain shape dispatcher used by sub_1FFDEE4 at 0x01FFEF14; object+308 shape 0 calls oriented box sub_20E0BAC, shape 1 calls cylinder sub_20E0764, other values reject. Separate from kart/map-object damage collision.
- docs/function_notes.md:534 moving terrain shape dispatch by object +0x134: 0 oriented box sub_20E0BAC, 1 cylinder sub_20E0764
- docs/function_notes/hk_21.md:30 Dispatcher: reads mode a1[77]; mode 0 calls sub_20E0BAC, mode 1 calls sub_20E0764, otherwise returns 0.
sub_20E1DC0
export/plan0/arm9_main/sub_20E1DC0_020E1DC0.c
- docs/function_notes/hk_21.md:31 Loops over the 16-bit count at result+4 of object pointers and sets each object's field +320 to a2.
sub_20E1DEC
export/plan0/arm9_main/sub_20E1DEC_020E1DEC.c
- docs/function_notes/NEEDS_REVIEW.md:680 Stores a1[1..3] shifted right by 4 into a1[19..21], then calls sub_20EA8A8 with a1[80], a1+10, a1+7, a3. [REVIEW]
- docs/function_notes/hk_21.md:32 Stores a1[1..3] shifted right by 4 into a1[19..21], then calls sub_20EA8A8 with a1[80], a1+10, a1+7, a3. [REVIEW]
- docs/function_notes/review_haiku1.md:71 Scales coordinates, calls sub_20EA8A8 for rendering
sub_20E1E38
export/plan0/arm9_main/sub_20E1E38_020E1E38.c
- docs/function_notes/hk_21.md:33 Iterates the object list at result (count at result+4); for each object with flags (word +2) & 0x12 clear and word +102 nonzero, calls callback a3.
sub_20E1E98
export/plan0/arm9_main/sub_20E1E98_020E1E98.c
- vm_model/src/mapobj/presentation.rs:14 sub_20E2630 / sub_20E1E98: rounded binary heading from fx12 radians.
- vm_model/src/mapobj/vehicle.rs:157 sub_20E1E98: restore the configured starting path point after falling below zero.
- docs/function_notes.md:214 traffic path/reset setup: initializes travel direction, heading quaternion, transform, timers and surface-effect state
sub_20E1F54
export/plan0/arm9_main/sub_20E1F54_020E1F54.c
- vm_model/src/obj_collision.rs:417 sub_20E1F54 type-record collision extents, scaled independently per axis.
- vm_model/src/mapobj/presentation.rs:86 sub_20E1F54 converts the two translations to model units (>>4).
- vm_model/src/mapobj/vehicle.rs:2 (init
sub_20E1F54). They drive their path at a constant 12288 x setting 0's low half / 100 - vm_model/src/mapobj/vehicle.rs:76 sub_20E1F54 type-record height multiplied by the map object's Y scale.
- docs/function_notes.md:215 traffic init: type record at object +340; render width +256, height +260 and axle spacing +264 (translations shifted >>4), tire scale +272; scale-adjusted values +276..288 are collision extents, not tire transforms; setting 1 selects body pattern +304
sub_20E20A8
export/plan0/arm9_main/sub_20E20A8_020E20A8.c
- docs/function_notes.md:211 traffic renderer setup: loads body, tire, shadow and pattern resources; binds per-body texture-pattern wrappers and configures material rendering
sub_20E230C
export/plan0/arm9_main/sub_20E230C_020E230C.c
- docs/function_notes.md:217 traffic route preprocessing: visits each used route once, converts signed path-point setting +14 into turn/easing parameter +18, clears +14, and assigns each traffic object an index at +212
sub_20E2400
export/plan0/arm9_main/sub_20E2400_020E2400.c
- vm_model/src/obj_collision.rs:26
sub_20E2400) uses asymmetric oriented extents; the others (clock hand, - docs/function_notes.md:239 traffic custom contact callback passes scale-adjusted extents +276/+280/+284 and secondary extents [+276,0,+288] plus object basis to sub_20EAFC4; native traffic now uses this exact contact test; scaled extents and all 293 original bus/car/truck callback results match
sub_20E246C
export/plan0/arm9_main/sub_20E246C_020E246C.c
- docs/function_notes.md:233 traffic item-hit callback: own-reaction byte 1 invokes sub_20E24D0 with item position +80, returns kart/item response byte; item dispatch is not yet wired natively
sub_20E2494
export/plan0/arm9_main/sub_20E2494_020E2494.c
- docs/function_notes.md:234 traffic kart-hit callback: own-reaction byte 1 invokes sub_20E24D0 with kart position +128, then collision sound helper sub_20D26F8; native Star/shrunk overlaps now invoke the hit physics
sub_20E24D0
export/plan0/arm9_main/sub_20E24D0_020E24D0.c
- vm_model/src/mapobj/vehicle.rs:7 Hit flight, rebound and recovery follow
sub_20E24D0/sub_20E2630. - vm_model/src/mapobj/vehicle.rs:82 sub_20E24D0: original own-object reaction to a qualifying kart/item hit.
- docs/function_notes.md:232 traffic own-object hit: project object-minus-hitter onto right/forward basis, choose signed 2:1 lateral/longitudinal tilt and height-dependent up component, SDK-normalize, convert to tilt quaternion; set easing 900, add 28672 upward velocity (retain positive Y only when timer <=15), set bounce bit and timer 20; exact original hit capture replayed
sub_20E2630
export/plan0/arm9_main/sub_20E2630_020E2630.c
- vm_model/src/mapobj/presentation.rs:14 sub_20E2630 / sub_20E1E98: rounded binary heading from fx12 radians.
- vm_model/src/mapobj/presentation.rs:60 sub_20E2630: traffic tire rotation advances by a fixed angle per object tick,
- vm_model/src/mapobj/vehicle.rs:7 Hit flight, rebound and recovery follow
sub_20E24D0/sub_20E2630. - vm_model/src/mapobj/vehicle.rs:104 sub_20E2630: flight probes every tick; normal driving probes one of eight slots.
- game/src/traffic_animation.rs:1 Separate traffic axle meshes, driven by sub_20E2630's simulation clock.
- docs/function_notes.md:213 traffic tick includes orientation easing and tire angle +268 increment of 1536 units each tick; normal driving matches 899 original bus transitions; hit flight/rebound/recovery additionally matches 300 controlled original bus updates
- docs/function_notes.md:236 traffic flight uses timer >15, gravity 1434 and path X/Z; probes every flight tick at Y+61440; first floor landing rebounds by 1843+(height-81920)/512 and reverses/eases impact tilt, second sets timer 15 and Y velocity zero; following 15 updates restore normal easing; all 300 original bus updates reproduced including full basis
sub_20E2A74
export/plan0/arm9_main/sub_20E2A74_020E2A74.c
- vm_model/src/mapobj/presentation.rs:62 sub_20E2A74 reads this clock separately from the path follower.
- vm_model/src/mapobj/presentation.rs:90 sub_20E2A74 + sub_2147230: DS row-vector 4x3 matrices, front/rear.
- docs/function_notes.md:212 traffic draw: publishes body pattern frame from object +304, draws body/shadow and separate tire model twice with mirrored axle offset; tire angle from +268
sub_20E2CCC
export/plan0/arm9_main/sub_20E2CCC_020E2CCC.c
- docs/function_notes/NEEDS_REVIEW.md:681 Reads the current player index byte from the global at off_20E2D54[0]+98; if a1[14] is set and index < 8, looks up a table entry (sub_20F3678, sub_20E6B14), stores the dot-product sign in a1[15]; otherwise returns index<<16 or 0. [REVIEW]
- docs/function_notes/hk_21.md:34 Reads the current player index byte from the global at off_20E2D54[0]+98; if a1[14] is set and index < 8, looks up a table entry (sub_20F3678, sub_20E6B14), stores the dot-product sign in a1[15]; otherwise returns index<<16 or 0. [REVIEW]
- docs/function_notes/review_haiku1.md:72 Checks type, looks up visibility in table, stores result at +15
sub_20E2D5C
export/plan0/arm9_main/sub_20E2D5C_020E2D5C.c
- docs/function_notes/hk_21.md:35 Heap-allocates 40 bytes, copies a 40-byte template from off_20E2DB4, stores pointer in off_20E2DB0, calls sub_20E6F50, returns the pointer.
sub_20E2DB8
export/plan0/arm9_main/sub_20E2DB8_020E2DB8.c
- docs/function_notes/hk_21.md:36 Heap-allocates 64 bytes, copies a 16-word table from off_20E2E18, stores pointer in off_20E2E14, calls sub_20D49D8, returns the pointer.
sub_20E2E1C
export/plan0/arm9_main/sub_20E2E1C_020E2E1C.c
- docs/function_notes/hk_21.md:37 Heap-allocates 64 bytes, copies a 16-word table from off_20E2E68 and returns the new block.
sub_20E2E6C
export/plan0/arm9_main/sub_20E2E6C_020E2E6C.c
- docs/function_notes/hk_21.md:38 Heap-allocates 64 bytes, copies a 16-word table from off_20E2EB8 and returns the new block.
sub_20E2EBC
export/plan0/arm9_main/sub_20E2EBC_020E2EBC.c
- docs/function_notes/hk_21.md:39 Heap-allocates 64 bytes, copies a 16-word table from off_20E2F08 and returns the new block.
sub_20E2F0C
export/plan0/arm9_main/sub_20E2F0C_020E2F0C.c
- vm_model/src/mapobj/monty.rs:1 Monty Mole (0x199): init
sub_20E2F0C, eight states at0x0216C0C8. Height only, around its hole (18 units below where it is put): - docs/function_notes.md:295 Monty Mole init (hole 18 below, bottom 24 below; hide times from setting 0)
- docs/function_notes/NEEDS_REVIEW.md:682 Object init: sub_2046BE8 with table off_20E2F98, sets timers a1+168/172/176 from a1+8 and globals, copies a2+40/+42 into a1+160/164, sets state a1+144=0 and a1+146=1, calls sub_20E516C with a scaled sub_2133048 value, ORs a flag from off_20E2FA8 into a1+2. [REVIEW]
- docs/function_notes/hk_21.md:40 Object init: sub_2046BE8 with table off_20E2F98, sets timers a1+168/172/176 from a1+8 and globals, copies a2+40/+42 into a1+160/164, sets state a1+144=0 and a1+146=1, calls sub_20E516C with a scaled sub_2133048 value, ORs a flag from off_20E2FA8 into a1+2. [REVIEW]
sub_20E2FAC
export/plan0/arm9_main/sub_20E2FAC_020E2FAC.c
- docs/function_notes/NEEDS_REVIEW.md:683 Loads two resources via sub_20D21EC (existing guess: choropu.nsbmd and choropu.nsbtp), builds a model object with sub_20E6488 and returns sub_20E6AB8 on it. [REVIEW]
- docs/function_notes/hk_21.md:41 Loads two resources via sub_20D21EC (existing guess: choropu.nsbmd and choropu.nsbtp), builds a model object with sub_20E6488 and returns sub_20E6AB8 on it. [REVIEW]
- docs/function_notes/review_haiku1.md:73 Processes parameters via sub_20D21EC, calls sub_20E6488 and returns sub_20E6AB8
sub_20E2FE4
export/plan0/arm9_main/sub_20E2FE4_020E2FE4.c
- docs/function_notes.md:1623 event handler for the code *a3 == 1: when a2 is set computes the direction from sub_21484D0 and stores the sign into +180, sets +20 = 0x4000, +144 = 6, +146 = 1, ORs the flag at off_20E3114 and calls sub_20F8DDC; otherwise the same with the object's own position
- docs/function_notes/NEEDS_REVIEW.md:684 Event handler for code a3==1: when a2 is set, stores a direction sign from a vector transform of a1+4 vs a2+80 in a1+180, sets a1+20=0x4000, state a1+144=6, flag bits, calls sub_20F8DDC(a2); otherwise uses the same logic with a1 and globals off_20E3118. Returns a4. [REVIEW]
- docs/function_notes/hk_21.md:42 Event handler for code a3==1: when a2 is set, stores a direction sign from a vector transform of a1+4 vs a2+80 in a1+180, sets a1+20=0x4000, state a1+144=6, flag bits, calls sub_20F8DDC(a2); otherwise uses the same logic with a1 and globals off_20E3118. Returns a4. [REVIEW]
sub_20E311C
export/plan0/arm9_main/sub_20E311C_020E311C.c
- vm_model/src/mapobj/monty.rs:5 6 knocked away by a star (
sub_20E311Ccode 1): up at 4 a tick, falling 0.25 a tick, rolling - vm_model/src/mapobj/monty.rs:57
sub_20E311C: a kart touched it with own-reactioncode(1: star, 2: plain hit). - docs/function_notes.md:389 Monty Mole kart callback: code 1 (star) -> state 6 knocked up 0x4000 rolling, code 2 -> state 7 (unless ghost racer, race config +112 == 2)
- docs/function_notes/NEEDS_REVIEW.md:685 Event handler: code 1 computes a direction sign from a2+128 vs a2+164/172, sets a1+20=0x4000, state 6, flag bits, calls sub_20D26F8 (existing guess: crash sound); code 2 sets state 7 and calls sub_20D26F8 unless the state is already 7 or the table entry at a2 is 2. Returns *a4. [REVIEW]
- docs/function_notes/hk_21.md:43 Event handler: code 1 computes a direction sign from a2+128 vs a2+164/172, sets a1+20=0x4000, state 6, flag bits, calls sub_20D26F8 (existing guess: crash sound); code 2 sets state 7 and calls sub_20D26F8 unless the state is already 7 or the table entry at a2 is 2. Returns *a4. [REVIEW]
sub_20E3238
export/plan0/arm9_main/sub_20E3238_020E3238.c
- docs/function_notes.md:391 Monty state 7 update: vy -= 614, below bottom -> state 5, roll +-1024
- docs/function_notes/hk_21.md:44 Per-frame update: a1+20 -= global dword_20E329C (velocity), a1+8 += a1+20, sets state a1+144=5 if a1+8 < a1+176, and steps the 16-bit rotation a1+184 by +/-1024 depending on a1+180.
sub_20E32A4
export/plan0/arm9_main/sub_20E32A4_020E32A4.c
- docs/function_notes.md:390 Monty state 6 update: roll +-1024, vy -= 1024, below bottom -> state 5
- docs/function_notes/hk_21.md:46 Per-frame variant of sub_20E3238: steps rotation a1+184 by +/-1024, decrements a1+20 by a constant 1024, updates a1+8, and sets state 5 if a1+8 < a1+176.
sub_20E3300
export/plan0/arm9_main/sub_20E3300_020E3300.c
- docs/function_notes.md:392 Monty state 6 enter: no-contact flag
- docs/function_notes/hk_21.md:47 Thin helper: ORs the flag word from *off_20E3318 into a1+2 and returns a1.
sub_20E331C
export/plan0/arm9_main/sub_20E331C_020E331C.c
- docs/function_notes.md:301 Monty Mole state 5 (hidden, wait)
- docs/function_notes/hk_21.md:48 State check: if a1+132 >= a1+164, sets state a1+144=1.
sub_20E3338
export/plan0/arm9_main/sub_20E3338_020E3338.c
- docs/function_notes/hk_21.md:49 Reset: a1+8 = a1+172, a1+20 = 0 (velocity), ORs flag words from off_20E3374 / off_20E3378 into a1+2.
sub_20E337C
export/plan0/arm9_main/sub_20E337C_020E337C.c
- docs/function_notes.md:300 Monty Mole state 4 (jump 18432, gravity 614)
- docs/function_notes/hk_21.md:50 Per-frame motion: a1+20 -= global dword_20E33BC, a1+8 += a1+20, sets state 5 if a1+8 < a1+176.
sub_20E33C0
export/plan0/arm9_main/sub_20E33C0_020E33C0.c
- docs/function_notes/hk_21.md:51 Reset: a1+8 = a1+172, a1+20 = 18432, clears bit 0 of a1+2, and spawns particle effect 48 via sub_208B7BC on a1+156 (gated by a1+120 & 3 and sub_203C5E4).
sub_20E3414
export/plan0/arm9_main/sub_20E3414_020E3414.c
- docs/function_notes.md:299 Monty Mole state 3 (duck back)
- docs/function_notes/hk_21.md:52 Per-frame: a1+8 += a1+20; when a1+8 < a1+172 and a1+120 bit 2 is clear, plays sound 296 via sub_210B7A8 (channel chosen from object type a1+112, position from sub_20D4EF4); sets state 4.
sub_20E34C0
export/plan0/arm9_main/sub_20E34C0_020E34C0.c
- docs/function_notes/hk_21.md:53 Sets a1+20 = -4096 (velocity constant).
sub_20E34D0
export/plan0/arm9_main/sub_20E34D0_020E34D0.c
- docs/function_notes.md:298 Monty Mole state 2 (hold 20 ticks)
- docs/function_notes/hk_21.md:54 State check: if a1+132 >= 20, sets state 3.
sub_20E34EC
export/plan0/arm9_main/sub_20E34EC_020E34EC.c
- docs/function_notes/hk_21.md:55 Sets a1+20 = 0.
sub_20E34F8
export/plan0/arm9_main/sub_20E34F8_020E34F8.c
- docs/function_notes.md:297 Monty Mole state 1 (peek up 1/tick to 17.1)
- docs/function_notes/hk_21.md:56 a1+8 += a1+20, clamped to a1+172 + global dword_20E3534; when clamped, sets state 2.
sub_20E3538
export/plan0/arm9_main/sub_20E3538_020E3538.c
- docs/function_notes.md:393 Monty state 1 enter: back to the hole, roll reset
- docs/function_notes/hk_21.md:57 Reset: a1+8 = a1+172, a1+20 = 4096, a1+184 = 0, ORs flag words from off_20E357C / off_20E3580 into a1+2.
sub_20E3584
export/plan0/arm9_main/sub_20E3584_020E3584.c
- docs/function_notes.md:296 Monty Mole state 0 (hidden, first wait)
- docs/function_notes/hk_21.md:58 State check: if a1+132 >= a1+160, sets state 1.
sub_20E35A0
export/plan0/arm9_main/sub_20E35A0_020E35A0.c
- docs/function_notes/hk_21.md:59 Reset: a1+8 = a1+172, a1+20 = 0, ORs flag words from off_20E35DC / off_20E35E0 into a1+2.
sub_20E360C
export/plan0/arm9_main/sub_20E360C_020E360C.c
- docs/function_notes/hk_21.md:60 Thunk: tail-jumps through function pointer off_20E3614.
sub_20E3618
export/plan0/arm9_main/sub_20E3618_020E3618.c
- docs/function_notes/NEEDS_REVIEW.md:686 Render dispatch on the 16-bit state a2+142: case 4 and default call sub_20E67C4 (default clears *off_20E3720+24), cases 6/7 call sub_20E66E4 with a2+184, case 5 does nothing; matrix from sub_20E6CF8(a2+4). [REVIEW]
- docs/function_notes/hk_21.md:61 Render dispatch on the 16-bit state a2+142: case 4 and default call sub_20E67C4 (default clears *off_20E3720+24), cases 6/7 call sub_20E66E4 with a2+184, case 5 does nothing; matrix from sub_20E6CF8(a2+4). [REVIEW]
- docs/function_notes/review_haiku1.md:74 Switches on object type at +142, calls collision/rendering functions
sub_20E373C
export/plan0/arm9_main/sub_20E373C_020E373C.c
- docs/function_notes/hk_21.md:62 Heap-allocates 40 bytes, copies a 40-byte template from off_20E3794, stores pointer in off_20E3790, calls sub_20E6F50, returns it.
sub_20E3798
export/plan0/arm9_main/sub_20E3798_020E3798.c
- docs/function_notes/hk_21.md:63 Heap-allocates 44 bytes, copies a 44-byte template from off_20E37F0, stores pointer in off_20E37EC, calls sub_20D49D8, returns it.
sub_20E37F4
export/plan0/arm9_main/sub_20E37F4_020E37F4.c
- docs/function_notes/hk_21.md:64 Heap-allocates 44 bytes, copies a 44-byte template from off_20E384C, stores pointer in off_20E3848, calls sub_20D49D8, returns it.
sub_20E3850
export/plan0/arm9_main/sub_20E3850_020E3850.c
- docs/function_notes/hk_21.md:65 Heap-allocates 64 bytes, copies a 16-word table from off_20E389C and returns the new block.
sub_20E38A0
export/plan0/arm9_main/sub_20E38A0_020E38A0.c
- vm_model/src/mapobj/drawbridge.rs:1 Delfino Square's drawbridge (object 0xCC): init
sub_20E38A0, ticksub_20E3BC0. - game/src/objects.rs:32 raising and lowering,
sub_20E38A0and its tick, is not ported). - docs/function_notes.md:302 Delfino drawbridge (0xCC) init (amp = deg*65536/360/2, step = 65536/ticks/2, waits from settings 1)
sub_20E3A7C
export/plan0/arm9_main/sub_20E3A7C_020E3A7C.c
- docs/function_notes.md:304 Delfino drawbridge model/resource load
- docs/function_notes/NEEDS_REVIEW.md:687 Loads two resources via sub_20D21EC (existing guess: bridge.nsbca and bridge.nsbmd), creates the object with sub_20EA588 / sub_20EA4BC, sets a field at +44 from sub_2087D0C, runs sub_2084968, then registers it with sub_20E1DC0. [REVIEW]
- docs/function_notes/hk_21.md:66 Loads two resources via sub_20D21EC (existing guess: bridge.nsbca and bridge.nsbmd), creates the object with sub_20EA588 / sub_20EA4BC, sets a field at +44 from sub_2087D0C, runs sub_2084968, then registers it with sub_20E1DC0. [REVIEW]
sub_20E3AF0
export/plan0/arm9_main/sub_20E3AF0_020E3AF0.c
- docs/function_notes.md:305 object-id test (id == 204, the drawbridge)
- docs/function_notes.md:517 is id 204
- docs/function_notes/hk_21.md:67 Predicate: returns a1 == 204 (object type check).
sub_20E3B08
export/plan0/arm9_main/sub_20E3B08_020E3B08.c
- vm_model/src/mapobj/drawbridge.rs:13 clamp of the angle to the model's extent (
sub_20E3B08reads the same value back for the - docs/function_notes.md:306 drawbridge deck angle getter (+0x154 >> 12, whole degrees)
- docs/function_notes/hk_21.md:68 Returns the field at +340 of the object referenced by **off_20E3B24, shifted right by 12 (fixed point to integer).
sub_20E3B28
export/plan0/arm9_main/sub_20E3B28_020E3B28.c
- docs/function_notes.md:307 drawbridge object create wrapper
- docs/function_notes/NEEDS_REVIEW.md:688 Thin wrapper: calls the function pointer off_20E3B44 with *off_20E3B40, a1 and off_20E3B48. [REVIEW]
- docs/function_notes/hk_21.md:69 Thin wrapper: calls the function pointer off_20E3B44 with *off_20E3B40, a1 and off_20E3B48. [REVIEW]
sub_20E3B4C
export/plan0/arm9_main/sub_20E3B4C_020E3B4C.c
- docs/function_notes.md:308 drawbridge collision-transform update (copies pos>>4, publishes angle +0x154)
- docs/function_notes/NEEDS_REVIEW.md:689 Object position update: a1[19..21] = a1[1..3] >> 4, stores a1[85] into a list record (+12) and registers it in the list at +26/+28, then calls sub_20EA8A8(a1[80], a1+10, a1+7, a3). [REVIEW]
- docs/function_notes/hk_21.md:70 Object position update: a1[19..21] = a1[1..3] >> 4, stores a1[85] into a list record (+12) and registers it in the list at +26/+28, then calls sub_20EA8A8(a1[80], a1+10, a1+7, a3). [REVIEW]
sub_20E3BC0
export/plan0/arm9_main/sub_20E3BC0_020E3BC0.c
- vm_model/src/mapobj/drawbridge.rs:1 Delfino Square's drawbridge (object 0xCC): init
sub_20E38A0, ticksub_20E3BC0. - docs/function_notes.md:303 Delfino drawbridge tick (phase eased angle, wait timer at phase 0x4000 / 0xC000, angle at +0x154)
- docs/function_notes/NEEDS_REVIEW.md:690 Kart/vehicle per-frame physics (544 bytes): computes a new 16-bit heading from a2+324/+328 via sine table off_20E3DE0, derives angle delta v4 against a2+330, scales velocity vectors a2+40..+52 into a2+292..+300, shifts history copies into a2+160..+192, rebuilds the matrix (sub_2146D28, sub_2146DFC, sub_2147FD8), handles timer a2+336 and calls sub_20D275C when a2+148 is set, and clamps speed a2+340 to [0, limit at *off_20E3DE8+44]. Existing guess says roll of the model. [REVIEW]
- docs/function_notes/hk_21.md:71 Kart/vehicle per-frame physics (544 bytes): computes a new 16-bit heading from a2+324/+328 via sine table off_20E3DE0, derives angle delta v4 against a2+330, scales velocity vectors a2+40..+52 into a2+292..+300, shifts history copies into a2+160..+192, rebuilds the matrix (sub_2146D28, sub_2146DFC, sub_2147FD8), handles timer a2+336 and calls sub_20D275C when a2+148 is set, and clamps speed a2+340 to [0, limit at *off_20E3DE8+44]. Existing guess says roll of the model. [REVIEW]
sub_20E3DEC
export/plan0/arm9_main/sub_20E3DEC_020E3DEC.c
- docs/function_notes.md:309 drawbridge static allocation/setup
- docs/function_notes/hk_21.md:72 Heap-allocates 40 bytes, copies a 40-byte template from off_20E3E44, stores pointer in off_20E3E40, calls sub_20E6F50, returns it.
sub_20E3E48
export/plan0/arm9_main/sub_20E3E48_020E3E48.c
- docs/function_notes/hk_21.md:73 Heap-allocates 48 bytes, copies a 48-byte template from off_20E3EA0, stores pointer in off_20E3E9C, calls sub_20D49D8, returns it.
sub_20E3EA4
export/plan0/arm9_main/sub_20E3EA4_020E3EA4.c
- docs/function_notes/hk_21.md:74 Heap-allocates 64 bytes, copies a 16-word table from *off_20E3EF0 and returns the new block.
sub_20E3EF4
export/plan0/arm9_main/sub_20E3EF4_020E3EF4.c
- vm_model/src/mapobj/turner.rs:2 bridge 0xD0/0xD1): init
sub_20E3EF4, four states at0x020E40A8's table. - game/src/objects.rs:74 (cylinders,
sub_20E3EF4with their type table at 0x02158D5C..: radius x scale x, half - game/src/objects.rs:122 Turning platforms (
sub_20E3EF4): Tick-Tock Clock's gears (0xCB) and Bowser's Castle's - docs/function_notes.md:446 turning platform init (gears 0xCB/0xCE, rotary room/bridge): speed s0lo*128/100 (neg if s2lo), ramp s1lo (step 0x1000/ramp), run s0hi, rest s1hi; 4 states
sub_20E410C
export/plan0/arm9_main/sub_20E410C_020E410C.c
- docs/function_notes/NEEDS_REVIEW.md:691 Walks the object list (count at +4); for each object of type 203, computes the length of the vector between it and the previous type-203 object (sub_21482CC) and stores it, minus a field +88, at an offset from dword_20E4180. [REVIEW]
- docs/function_notes/hk_21.md:75 Walks the object list (count at +4); for each object of type 203, computes the length of the vector between it and the previous type-203 object (sub_21482CC) and stores it, minus a field +88, at an offset from dword_20E4180. [REVIEW]
- docs/function_notes/review_haiku1.md:75 Iterates items type 203, computes and stores distance via sub_21482CC
sub_20E4184
export/plan0/arm9_main/sub_20E4184_020E4184.c
- docs/function_notes/NEEDS_REVIEW.md:692 Loads up to five model resources by object sub-type (sub_20D21EC, sub_20EA588, sub_2084968; existing guess: gear_black, gear_white, rotary_bridge .nsbmd), caches them once per type, then copies the matching model pointer into each object's field at dword_20E431C. [REVIEW]
- docs/function_notes/hk_21.md:76 Loads up to five model resources by object sub-type (sub_20D21EC, sub_20EA588, sub_2084968; existing guess: gear_black, gear_white, rotary_bridge .nsbmd), caches them once per type, then copies the matching model pointer into each object's field at dword_20E431C. [REVIEW]
- docs/function_notes/review_haiku1.md:76 Large initialization function with switch cases for 5 collision/physics types
sub_20E4320
export/plan0/arm9_main/sub_20E4320_020E4320.c
- docs/function_notes.md:515 is a turning platform (ids 203, 206, 208, 209)
- docs/function_notes/hk_21.md:77 Predicate: returns 1 for object types 203, 206, 208, 209; otherwise 0.
sub_20E435C
export/plan0/arm9_main/sub_20E435C_020E435C.c
- docs/function_notes/NEEDS_REVIEW.md:693 Thin indirect wrapper: calls function pointer off_20E4378 with *off_20E4374, a1 and off_20E437C. [REVIEW]
- docs/function_notes/hk_21.md:78 Thin indirect wrapper: calls function pointer off_20E4378 with *off_20E4374, a1 and off_20E437C. [REVIEW]
- docs/function_notes/review_haiku1.md:77 Calls off_20E4378 with table pointer and parameter
sub_20E4380
export/plan0/arm9_main/sub_20E4380_020E4380.c
- vm_model/src/mapobj/turner.rs:8 same ramp, then reverses its direction; 3 (
sub_20E4380) rests for setting 1's high half - docs/function_notes.md:452 turning platform state 3: rest; after rest ticks -> 0
- docs/function_notes/hk_21.md:79 State check: if a1+132 > (u16) a1+328, sets state a1+144=0.
sub_20E43A8
export/plan0/arm9_main/sub_20E43A8_020E43A8.c
- vm_model/src/mapobj/turner.rs:7 half ticks if set (else for ever); 2 (
sub_20E4428/sub_20E43A8) slows to rest over the - docs/function_notes.md:451 turning platform state 2: factor -= step, yaw += factor*speed; after ramp: speed reversed -> 3
- docs/function_notes/hk_21.md:81 Per-frame oscillation: a1+332 -= a1+336, angle a1+126 += (a1+332 * a1+330) >> 12; when a1+132 > (u16) a1+324, negates the angular step a1+330 and sets state 3.
sub_20E4428
export/plan0/arm9_main/sub_20E4428_020E4428.c
- vm_model/src/mapobj/turner.rs:7 half ticks if set (else for ever); 2 (
sub_20E4428/sub_20E43A8) slows to rest over the - docs/function_notes.md:450 turning platform state 2 enter: factor 4096
- docs/function_notes/hk_21.md:82 Sets a1+332 = 4096.
sub_20E4434
export/plan0/arm9_main/sub_20E4434_020E4434.c
- vm_model/src/mapobj/turner.rs:6 over setting 1's low half ticks; 1 (
sub_20E4434) turns at full speed, for setting 0's high - docs/function_notes.md:449 turning platform state 1: yaw += speed; after run ticks (if set) -> 2
- docs/function_notes/hk_21.md:83 Angle step: a1+126 += a1+330; when a1+326 is nonzero and a1+132 > a1+326, sets state 2.
sub_20E4474
export/plan0/arm9_main/sub_20E4474_020E4474.c
- vm_model/src/mapobj/turner.rs:5 setting 2's low half is set). State 0 (
sub_20E44D8/sub_20E4474) speeds up from rest - docs/function_notes.md:448 turning platform state 0: factor += step, yaw += factor*speed; after ramp -> 1
- docs/function_notes/hk_21.md:85 Per-frame oscillation (counterpart of sub_20E43A8): a1+332 += a1+336, angle a1+126 += (a1+332 * a1+330) >> 12; when a1+132 > (u16) a1+324, sets state 1.
sub_20E44D8
export/plan0/arm9_main/sub_20E44D8_020E44D8.c
- vm_model/src/mapobj/turner.rs:5 setting 2's low half is set). State 0 (
sub_20E44D8/sub_20E4474) speeds up from rest - docs/function_notes.md:447 turning platform state 0 enter: speed factor 0
- docs/function_notes/hk_21.md:86 Sets a1+332 = 0.
sub_20E44E4
export/plan0/arm9_main/sub_20E44E4_020E44E4.c
- game/src/objects.rs:181 Each turning platform's tick (
sub_20E44E4): its axes become RotY(yaw) x its NKM matrix and - game/src/objects.rs:208 about its own y (
sub_20E44E4: RotY(yaw) x its NKM matrix) - docs/function_notes.md:520 turning platform tick: state machine, yaw delta x up axis as angular velocity (+0x124), matrix = RotY(yaw) x NKM matrix, position along -y by +0x104
- docs/function_notes/NEEDS_REVIEW.md:694 Per-frame object update like sub_20E3BC0: angle delta from a2+126 via state helper sub_2046B40, velocity/history copies, matrix rebuild with sine table off_20E460C (sub_2146D44, sub_2146DFC, sub_2147FD8), then calls sub_20D275C(a2, a2+348) when state a2+142 is not 3 and that value is not -1. [REVIEW]
- docs/function_notes/hk_21.md:87 Per-frame object update like sub_20E3BC0: angle delta from a2+126 via state helper sub_2046B40, velocity/history copies, matrix rebuild with sine table off_20E460C (sub_2146D44, sub_2146DFC, sub_2147FD8), then calls sub_20D275C(a2, a2+348) when state a2+142 is not 3 and that value is not -1. [REVIEW]
sub_20E4610
export/plan0/arm9_main/sub_20E4610_020E4610.c
- docs/function_notes/hk_21.md:88 Heap-allocates 40 bytes, copies a 40-byte template from off_20E4668, stores pointer in off_20E4664, calls sub_20E6F50, returns it.
sub_20E466C
export/plan0/arm9_main/sub_20E466C_020E466C.c
- docs/function_notes/hk_21.md:89 Heap-allocates 44 bytes, copies a 44-byte template from off_20E46C4, stores pointer in off_20E46C0, calls sub_20D49D8, returns it.
sub_20E46C8
export/plan0/arm9_main/sub_20E46C8_020E46C8.c
- docs/function_notes/hk_21.md:90 Heap-allocates 64 bytes, copies a 16-word table from *off_20E4714 and returns the new block.
sub_20E4718
export/plan0/arm9_main/sub_20E4718_020E4718.c
- docs/function_notes/hk_21.md:91 Heap-allocates 64 bytes, copies a 16-word table from *off_20E4764 and returns the new block.
sub_20E4768
export/plan0/arm9_main/sub_20E4768_020E4768.c
- docs/function_notes/hk_21.md:92 Heap-allocates 64 bytes, copies a 16-word table from *off_20E47C4, overwrites word 14 with constant 2867200, returns the block.
sub_20E47C8
export/plan0/arm9_main/sub_20E47C8_020E47C8.c
- vm_model/src/mapobj/cheep.rs:1 Cheep Cheep (0x19B, Cheep Cheep Beach / SNES Koopa Beach): init
sub_20E47C8, hopping - docs/function_notes/NEEDS_REVIEW.md:695 Object init: sub_2046BE8 with table off_20E4890, adds a scaled sub_2133048 value to a1+8, copies position into a1+184..192, sets a1+196=4, zeroes a1+16/20/24, calls sub_20EC854 with timing constants, state a1+144=0, sub_20E516C with a2, stores angles from sub_2147F34 into a1+252 and dword_20E48AC / dword_20E48B0 offsets. [REVIEW]
- docs/function_notes/hk_21.md:93 Object init: sub_2046BE8 with table off_20E4890, adds a scaled sub_2133048 value to a1+8, copies position into a1+184..192, sets a1+196=4, zeroes a1+16/20/24, calls sub_20EC854 with timing constants, state a1+144=0, sub_20E516C with a2, stores angles from sub_2147F34 into a1+252 and dword_20E48AC / dword_20E48B0 offsets. [REVIEW]
sub_20E48B4
export/plan0/arm9_main/sub_20E48B4_020E48B4.c
- docs/function_notes/NEEDS_REVIEW.md:696 Loads a model resource via sub_20D21EC (existing guess: pukupuku.nsbmd), builds it with sub_20E6488 and returns sub_20E6AB8 on it. [REVIEW]
- docs/function_notes/hk_21.md:94 Loads a model resource via sub_20D21EC (existing guess: pukupuku.nsbmd), builds it with sub_20E6488 and returns sub_20E6AB8 on it. [REVIEW]
- docs/function_notes/review_haiku1.md:78 Processes parameter via sub_20D21EC, calls sub_20E6488 and sub_20E6AB8
sub_20E48E0
export/plan0/arm9_main/sub_20E48E0_020E48E0.c
- docs/function_notes/hk_21.md:95 Event handler: when a3==1, calls sub_20EC538, ORs off_20E4930 into a1[1], sets a1[72]=1 and a1[73]=1. Returns *a4.
sub_20E4934
export/plan0/arm9_main/sub_20E4934_020E4934.c
- vm_model/src/mapobj/cheep.rs:9 States (
0x0216C1CC): 0 hopping; 1 knocked away by a star kart (sub_20E4934, the shared - vm_model/src/mapobj/cheep.rs:56
sub_20E4934: a kart touched it with own-reactioncode(1: knocked away). - docs/function_notes.md:36 Cheep Cheep (0x19B) class callback
- docs/function_notes.md:403 Cheep Cheep kart callback: code 1 -> launch + state 1
sub_20E4990
export/plan0/arm9_main/sub_20E4990_020E4990.c
- docs/function_notes.md:409 Cheep state 3 update: rise until above home -> state 0
- docs/function_notes/hk_21.md:96 Per-frame: a1+8 += a1+20; when a1+8 > a1+188, sets state 0.
sub_20E49C0
export/plan0/arm9_main/sub_20E49C0_020E49C0.c
- vm_model/src/mapobj/cheep.rs:83 sub_20E49C0
- docs/function_notes.md:408 Cheep state 3 enter: back to home x/z, rise 0x3199, flags cleared
- docs/function_notes/hk_21.md:97 Reset/respawn: copies a1+184 to a1+4 and a1+192 to a1+12, zeroes a1+16 and a1+24, sets a1+20 = dword_20E4A14, clears flag bits 1, 2 and 8 in a1+2, sets word a1+102 = 31.
sub_20E4A18
export/plan0/arm9_main/sub_20E4A18_020E4A18.c
- docs/function_notes.md:407 Cheep state 2 update: after 300 ticks -> state 3
- docs/function_notes/hk_21.md:98 State check: if a1+132 > 300, sets state a1+144=3.
sub_20E4A34
export/plan0/arm9_main/sub_20E4A34_020E4A34.c
- docs/function_notes.md:406 Cheep state 2 enter: hidden, no contact
- docs/function_notes/hk_21.md:99 ORs flag words from off_20E4A60 / off_20E4A64 into a1+2.
sub_20E4A68
export/plan0/arm9_main/sub_20E4A68_020E4A68.c
- docs/function_notes.md:405 Cheep state 1 update: knocked flight; below bottom: removed if NKM setting0 lo set, else state 2
- docs/function_notes/hk_21.md:100 If sub_20EC7E8() returns nonzero: calls sub_20D2398(a1) when the object at a1+156 has a nonzero field +40, otherwise sets state 2 and returns 1.
sub_20E4AB4
export/plan0/arm9_main/sub_20E4AB4_020E4AB4.c
- docs/function_notes.md:404 Cheep state 1 enter: no-contact flag
- docs/function_notes/hk_21.md:101 ORs the flag word from off_20E4ACC into a1+2.
sub_20E4AD0
export/plan0/arm9_main/sub_20E4AD0_020E4AD0.c
- vm_model/src/mapobj/cheep.rs:2
sub_20E4AD0. - vm_model/src/mapobj/cheep.rs:115
sub_20E4AD0, state 0. - docs/function_notes/NEEDS_REVIEW.md:697 Per-frame kart-effect update (768 bytes): decrements a1+20 by dword_20E4DD0, applies sub_2148504 to a1+4, computes a1+256 from two dot products of position deltas, plays sound dword_20E4DD8 via sub_210B7A8 when a1+8 crosses a1+188+a1+256, re-randomizes velocity a1+20 and jitter offsets a1+16/a1+24 with sub_20D22D0 and distance thresholds of 81920. [REVIEW]
- docs/function_notes/hk_21.md:102 Per-frame kart-effect update (768 bytes): decrements a1+20 by dword_20E4DD0, applies sub_2148504 to a1+4, computes a1+256 from two dot products of position deltas, plays sound dword_20E4DD8 via sub_210B7A8 when a1+8 crosses a1+188+a1+256, re-randomizes velocity a1+20 and jitter offsets a1+16/a1+24 with sub_20D22D0 and distance thresholds of 81920. [REVIEW]
sub_20E4DEC
export/plan0/arm9_main/sub_20E4DEC_020E4DEC.c
- docs/function_notes.md:410 Cheep state 0 enter: roll reset
- docs/function_notes/hk_21.md:103 Sets the 16-bit field a1+172 = 0.
sub_20E4DF8
export/plan0/arm9_main/sub_20E4DF8_020E4DF8.c
- docs/function_notes/NEEDS_REVIEW.md:698 Thin indirect wrapper: calls function pointer off_20E4E04 with a2+128. [REVIEW]
- docs/function_notes/hk_21.md:104 Thin indirect wrapper: calls function pointer off_20E4E04 with a2+128. [REVIEW]
- docs/function_notes/review_haiku1.md:79 Returns result of function at off_20E4E04 at a2+128
sub_20E4E08
export/plan0/arm9_main/sub_20E4E08_020E4E08.c
- docs/function_notes/NEEDS_REVIEW.md:699 If a2+142 is 0 or 1: computes an alpha value from a2+8 minus a2+188 (>>6), calls sub_20E5634 on a2+200 with the position, then draws through sub_20E54E4; otherwise returns the state unchanged. [REVIEW]
- docs/function_notes/hk_21.md:105 If a2+142 is 0 or 1: computes an alpha value from a2+8 minus a2+188 (>>6), calls sub_20E5634 on a2+200 with the position, then draws through sub_20E54E4; otherwise returns the state unchanged. [REVIEW]
- docs/function_notes/review_haiku1.md:80 Checks object type, conditionally computes opacity, calls sub_20E5634 and sub_20E54E4
sub_20E4E9C
export/plan0/arm9_main/sub_20E4E9C_020E4E9C.c
- docs/function_notes/hk_21.md:106 Thunk: tail-jumps through function pointer off_20E4EA4.
sub_20E4EA8
export/plan0/arm9_main/sub_20E4EA8_020E4EA8.c
- docs/function_notes.md:1617 render dispatch on a2+142: when nonzero it calls sub_20E66E4 with the state at a2+172 and the sprite data (sign flipped by bit 0 of +100); otherwise the second branch with sub_20E6CF8 of a2+4
- docs/function_notes/NEEDS_REVIEW.md:700 Render dispatch on a2+142: nonzero state uses sub_20E66E4 with a2+172, zero state uses sub_20E67C4; the direction vector a2+28..36 is negated when a2+100 bit 0 is set, and flag 0xC0 is ORed into the model's +20. [REVIEW]
- docs/function_notes/hk_21.md:107 Render dispatch on a2+142: nonzero state uses sub_20E66E4 with a2+172, zero state uses sub_20E67C4; the direction vector a2+28..36 is negated when a2+100 bit 0 is set, and flag 0xC0 is ORed into the model's +20. [REVIEW]
sub_20E4FC8
export/plan0/arm9_main/sub_20E4FC8_020E4FC8.c
- docs/function_notes/hk_21.md:108 Heap-allocates 40 bytes, copies a 40-byte template from off_20E5020, stores pointer in off_20E501C, calls sub_20E6F50, returns it.
sub_20E5024
export/plan0/arm9_main/sub_20E5024_020E5024.c
- docs/function_notes/hk_21.md:109 Heap-allocates 44 bytes, copies a 44-byte template from off_20E507C, stores pointer in off_20E5078, calls sub_20D49D8, returns it.
sub_20E5080
export/plan0/arm9_main/sub_20E5080_020E5080.c
- docs/function_notes/hk_21.md:110 Heap-allocates 44 bytes, copies a 44-byte template from off_20E50D8, stores pointer in off_20E50D4, calls sub_20D49D8, returns it.
sub_20E50DC
export/plan0/arm9_main/sub_20E50DC_020E50DC.c
- docs/function_notes/hk_21.md:111 Heap-allocates 64 bytes, copies a 16-word table from off_20E5128 and returns the new block.
sub_20E512C
export/plan0/arm9_main/sub_20E512C_020E512C.c
- docs/function_notes/NEEDS_REVIEW.md:701 Collision query: calls sub_1FFDEE4 with dword_20E5164 and returns its result masked by dword_20E5168. [REVIEW]
- docs/function_notes/hk_21.md:112 Collision query: calls sub_1FFDEE4 with dword_20E5164 and returns its result masked by dword_20E5168. [REVIEW]
- docs/function_notes/review_haiku1.md:81 Collision query via sub_1FFDEE4, masks result with dword_20E5168
sub_20E516C
export/plan0/arm9_main/sub_20E516C_020E516C.c
- vm_model/src/mapobj/cheep.rs:5 the ground there (
sub_20E516Cfits it; here: the course's floor normal under the spawn). - vm_model/src/mapobj/pinball.rs:33 Not ported: the flag bits, sounds, the splash effect (
sub_20E516C), the draw. The - docs/function_notes/NEEDS_REVIEW.md:702 Collision/ground-snap helper (328 bytes): builds a query point from a2 (y offset dword_20E52B4), calls sub_1FFDEE4; on hit computes a normal (sub_20D7B88, sub_1FFCCD0) and scales the 9 values in a1 by a3 (sub_2133048 / sub_2133068); on miss resets a1 (sub_2146CBC); stores the position into a1[9..11] and a4 into a word at a1+48; returns the hit flag. [REVIEW]
- docs/function_notes/hk_21.md:113 Collision/ground-snap helper (328 bytes): builds a query point from a2 (y offset dword_20E52B4), calls sub_1FFDEE4; on hit computes a normal (sub_20D7B88, sub_1FFCCD0) and scales the 9 values in a1 by a3 (sub_2133048 / sub_2133068); on miss resets a1 (sub_2146CBC); stores the position into a1[9..11] and a4 into a word at a1+48; returns the hit flag. [REVIEW]
sub_20E52BC
export/plan0/arm9_main/sub_20E52BC_020E52BC.c
- docs/function_notes/NEEDS_REVIEW.md:703 Loads shadow models via sub_20D2210 (existing guess: jg_shadow.nsbmd, obj_shadow.nsbmd), creates the model with sub_20EA588 and sub_20849C0 / sub_20849B0, resolves three sub-resource pointers from the model's chunk table, and when the state at +12 is not 6 calls sub_204799C and sub_20EA55C. [REVIEW]
- docs/function_notes/hk_21.md:114 Loads shadow models via sub_20D2210 (existing guess: jg_shadow.nsbmd, obj_shadow.nsbmd), creates the model with sub_20EA588 and sub_20849C0 / sub_20849B0, resolves three sub-resource pointers from the model's chunk table, and when the state at +12 is not 6 calls sub_204799C and sub_20EA55C. [REVIEW]
- docs/function_notes/review_haiku1.md:82 Sets up 3D graphics state via sub_20D2210, sub_20EA588, sub_20849C0/sub_20849B0
sub_20E5348
export/plan0/arm9_main/sub_20E5348_020E5348.c
- docs/function_notes/NEEDS_REVIEW.md:704 Clamps the 16-bit value a1 to a2 (minimum), stores it at +110 of the object *off_20E5368, then tail-calls function pointer off_20E536C on that object. [REVIEW]
- docs/function_notes/hk_21.md:115 Clamps the 16-bit value a1 to a2 (minimum), stores it at +110 of the object *off_20E5368, then tail-calls function pointer off_20E536C on that object. [REVIEW]
- docs/function_notes/review_haiku1.md:83 Clamps parameter to max, sets value at offset +110, calls function pointer
sub_20E5370
export/plan0/arm9_main/sub_20E5370_020E5370.c
- docs/function_notes/NEEDS_REVIEW.md:705 Clamps a3 to a4 (minimum), stores it at +110 of the object *off_20E53A8, then returns sub_207AEC8(object, a2, a1). [REVIEW]
- docs/function_notes/hk_21.md:116 Clamps a3 to a4 (minimum), stores it at +110 of the object *off_20E53A8, then returns sub_207AEC8(object, a2, a1). [REVIEW]
- docs/function_notes/review_haiku1.md:84 Clamps parameter, sets value at offset +110, calls sub_207AEC8
sub_20E53AC
export/plan0/arm9_main/sub_20E53AC_020E53AC.c
- docs/function_notes/NEEDS_REVIEW.md:706 Draw submit (304 bytes): sends geometry FIFO commands (sub_1FF9048 IDs 43, 42, 48, 49, 20, 25, 27, 41) using fields of the object at off_20E54DC[0], clamps a4 to the 16-bit value at a1+48 into the color/alpha word, then sends a display-list block from off_20E54E0 via sub_1FF9144. [REVIEW]
- docs/function_notes/hk_21.md:117 Draw submit (304 bytes): sends geometry FIFO commands (sub_1FF9048 IDs 43, 42, 48, 49, 20, 25, 27, 41) using fields of the object at off_20E54DC[0], clamps a4 to the 16-bit value at a1+48 into the color/alpha word, then sends a display-list block from off_20E54E0 via sub_1FF9144. [REVIEW]
- docs/function_notes/review_haiku1.md:85 Sends 3D graphics commands via sub_1FF9048 for model parameters and rendering
sub_20E54E4
export/plan0/arm9_main/sub_20E54E4_020E54E4.c
- docs/function_notes/NEEDS_REVIEW.md:707 Draw submit variant (200 bytes): same command sequence (IDs 20, 25, 27, 41) using object off_20E55AC[0] and display list at off_20E55B0, without the 43/42/48/49 setup. [REVIEW]
- docs/function_notes/hk_21.md:118 Draw submit variant (200 bytes): same command sequence (IDs 20, 25, 27, 41) using object off_20E55AC[0] and display list at off_20E55B0, without the 43/42/48/49 setup. [REVIEW]
- docs/function_notes/review_haiku1.md:86 Sends 3D graphics commands for position/scale/rendering
sub_20E55B4
export/plan0/arm9_main/sub_20E55B4_020E55B4.c
- docs/function_notes/NEEDS_REVIEW.md:708 Sends geometry FIFO commands 43, 42, 48 and 49 with fields of the object at *off_20E5630 (+28, +20, +4, +8) and returns the last command's result. [REVIEW]
- docs/function_notes/hk_21.md:119 Sends geometry FIFO commands 43, 42, 48 and 49 with fields of the object at *off_20E5630 (+28, +20, +4, +8) and returns the last command's result. [REVIEW]
- docs/function_notes/review_haiku1.md:87 Sends 3D graphics parameters via sub_1FF9048
sub_20E5634
export/plan0/arm9_main/sub_20E5634_020E5634.c
- docs/function_notes/hk_22.md:3 copies 3-word vector from a2 into result+36..+44 (each >>4, Y offset from dword_20E5664); position-to-render-coord helper.
sub_20E5668
export/plan0/arm9_main/sub_20E5668_020E5668.c
- docs/function_notes/hk_22.md:4 copies X and Z (>>4) of a2 into result+36 and +44, Y skipped; two-axis position setter.
sub_20E5684
export/plan0/arm9_main/sub_20E5684_020E5684.c
- vm_model/src/mapobj/clock_hand.rs:1 Tick-Tock Clock's hands (0xCD): init
sub_20E5684, turningsub_20E5854. - docs/function_notes/hk_22.md:5 thumb object init from spawn record a2: timer +92, state machine (sub_2046BE8), vectors +160..+188, u16 params +192..+198, timers +200/+204, state reset.
sub_20E576C
export/plan0/arm9_main/sub_20E576C_020E576C.c
- docs/function_notes/NEEDS_REVIEW.md:709 thin wrapper: loads resource (sub_20D21EC), creates model object (sub_20EA588), anim init (sub_2084968); second_hand model setup. [REVIEW]
- docs/function_notes/hk_22.md:6 thin wrapper: loads resource (sub_20D21EC), creates model object (sub_20EA588), anim init (sub_2084968); second_hand model setup. [REVIEW]
- docs/function_notes/review_haiku1.md:88 Processes parameter via sub_20D21EC, calls sub_20EA588 and sub_2084968
sub_20E57A0
export/plan0/arm9_main/sub_20E57A0_020E57A0.c
- vm_model/src/obj_collision.rs:344 the clock hand's own test (
sub_20E57A0): a box from the pivot out along z - vm_model/src/mapobj/clock_hand.rs:4 way when setting 2 is set). Its collision (
sub_20E57A0) is a box from the pivot out along - docs/function_notes/hk_22.md:7 wrapper calling sub_20EAFC4 (oriented box push-out) with object fields +4, +40, +88 and local vector {+88,+92,0}.
sub_20E57F4
export/plan0/arm9_main/sub_20E57F4_020E57F4.c
- docs/function_notes/hk_22.md:8 returns byte *a4; trivial callback stub.
sub_20E57FC
export/plan0/arm9_main/sub_20E57FC_020E57FC.c
- docs/function_notes/hk_22.md:9 if a2->+668 is 1 or 3 sets flag bits (off_20E582C) in a1+120; returns byte a4 (callback stub).
sub_20E5830
export/plan0/arm9_main/sub_20E5830_020E5830.c
- docs/function_notes/hk_22.md:10 if timer +132 exceeds u16 +196 resets state (+144=0, +146=1); small expiry check.
sub_20E5854
export/plan0/arm9_main/sub_20E5854_020E5854.c
- vm_model/src/mapobj/clock_hand.rs:1 Tick-Tock Clock's hands (0xCD): init
sub_20E5684, turningsub_20E5854. - docs/function_notes/hk_22.md:12 per-frame oscillator tick: timer +200 -= +204; angle +126 += scaled velocity (+198); when +132 > limit +192 flips velocity sign and sets state 3.
sub_20E58B8
export/plan0/arm9_main/sub_20E58B8_020E58B8.c
- docs/function_notes/hk_22.md:13 sets timer +200 to 0x4000; trivial init.
sub_20E58C4
export/plan0/arm9_main/sub_20E58C4_020E58C4.c
- docs/function_notes/hk_22.md:14 per-frame: angle +126 += +198; if +194 nonzero and +132 exceeds it, sets state 2.
sub_20E5900
export/plan0/arm9_main/sub_20E5900_020E5900.c
- docs/function_notes/hk_22.md:16 per-frame: timer +200 += +204; angle +126 += scaled velocity; when +132 > +192 sets state 1.
sub_20E5950
export/plan0/arm9_main/sub_20E5950_020E5950.c
- docs/function_notes/hk_22.md:17 clears timer +200; trivial reset.
sub_20E595C
export/plan0/arm9_main/sub_20E595C_020E595C.c
- docs/function_notes/hk_22.md:18 per-frame update: ticks state machine (sub_2046B40 on +128), builds rotation vector from angle +126 (sub_20D77E0), converts to matrix at +40 (sub_1FFCCD0).
sub_20E5990
export/plan0/arm9_main/sub_20E5990_020E5990.c
- docs/function_notes/hk_22.md:19 copies a2[1..3] >>4 into a2[19..21], then sub_20EA8A8 with object at off_20E59E0; position-to-render update.
sub_20E59E4
export/plan0/arm9_main/sub_20E59E4_020E59E4.c
- docs/function_notes/hk_22.md:20 heap-allocates 40-byte object, fills from template off_20E5A3C, stores pointer in off_20E5A38, calls sub_20E6F50 (back-link).
sub_20E5A40
export/plan0/arm9_main/sub_20E5A40_020E5A40.c
- docs/function_notes/hk_22.md:21 heap-allocates 44-byte object from template off_20E5A98, stores at off_20E5A94, init via sub_20D49D8.
sub_20E5A9C
export/plan0/arm9_main/sub_20E5A9C_020E5A9C.c
- docs/function_notes/hk_22.md:22 heap-allocates 64-byte object copied from 16-word template off_20E5AE8 and returns it.
sub_20E5AEC
export/plan0/arm9_main/sub_20E5AEC_020E5AEC.c
- vm_model/src/mapobj/knock.rs:57 Used by the Piranha Plant (0x1A6,
sub_20E5AEC) and 0x197 (sub_20DE3E0). - vm_model/src/mapobj/knock.rs:72 The Piranha Plant (
sub_20E5AEC):positionalready raised by its size. - docs/function_notes.md:402 Piranha Plant init: raise 10*scale, knock (bottom -24, gravity 0x400, roll 0x800, rise 0x4000, speed 0x1800)
- docs/function_notes/NEEDS_REVIEW.md:710 thumb per-frame: a1+8 += scaled a1+32 (sub_2133048 with dword_20E5B38); clears u16 +184; calls sub_20EC854 then sub_20EC884. [REVIEW]
- docs/function_notes/hk_22.md:23 thumb per-frame: a1+8 += scaled a1+32 (sub_2133048 with dword_20E5B38); clears u16 +184; calls sub_20EC854 then sub_20EC884. [REVIEW]
sub_20E5B50
export/plan0/arm9_main/sub_20E5B50_020E5B50.c
- docs/function_notes/NEEDS_REVIEW.md:711 creates model/anim object from two resources (sub_20D21EC on off_20E5B7C[0], off_20E5B80) via sub_20E6488, then sub_20E6AB8 render attrs. Pakkun guess. [REVIEW]
- docs/function_notes/hk_22.md:24 creates model/anim object from two resources (sub_20D21EC on off_20E5B7C[0], off_20E5B80) via sub_20E6488, then sub_20E6AB8 render attrs. Pakkun guess. [REVIEW]
- docs/function_notes/review_haiku1.md:89 Processes two parameters via sub_20D21EC, calls sub_20E6488 and returns result
sub_20E5B88
export/plan0/arm9_main/sub_20E5B88_020E5B88.c
- docs/function_notes/hk_22.md:25 calls sub_20EC41C() and returns byte *a4; callback stub.
sub_20E5BA0
export/plan0/arm9_main/sub_20E5BA0_020E5BA0.c
- docs/function_notes.md:37 Piranha Plant (0x1A6) class callback
sub_20E5BD4
export/plan0/arm9_main/sub_20E5BD4_020E5BD4.c
- docs/function_notes/hk_22.md:26 per-frame: frame counter +184; every 32 frames (if +120 bit 2 clear) plays effect 2/3/4 chosen from +112 vs table off_20E5C64 (sub_210B7A8); ticks state.
sub_20E5C6C
export/plan0/arm9_main/sub_20E5C6C_020E5C6C.c
- docs/function_notes/hk_22.md:27 draw dispatcher: sets flag at *off_20E5D08+24 from a2[92] bit 4; computes matrix via sub_20E6CBC and draws via sub_20E66E4 (animated) or sub_20E67C4.
sub_20E5D24
export/plan0/arm9_main/sub_20E5D24_020E5D24.c
- docs/function_notes/hk_22.md:28 heap-allocates 40-byte object from template off_20E5D74, stores pointer at off_20E5D70; allocation init.
sub_20E5D78
export/plan0/arm9_main/sub_20E5D78_020E5D78.c
- docs/function_notes/hk_22.md:29 heap-allocates 44-byte object from template off_20E5DD0, stores at off_20E5DCC, init via sub_20D49D8.
sub_20E5DD4
export/plan0/arm9_main/sub_20E5DD4_020E5DD4.c
- docs/function_notes/hk_22.md:30 heap-allocates 64-byte object copied from 16-word template off_20E5E20 and returns it.
sub_20E5E24
export/plan0/arm9_main/sub_20E5E24_020E5E24.c
- vm_model/src/mapobj/pendulum.rs:1 Tick-Tock Clock's pendulum (0xCF): init
sub_20E5E24, ticksub_20E61A8. - vm_model/src/mapobj/pendulum.rs:57 The bob's size from the object's scale x and z (
sub_20E5E24). - docs/function_notes.md:488 pendulum init: arm 500 x scale y below the pivot, amplitude, step, bob radius/thickness
- docs/function_notes/NEEDS_REVIEW.md:712 thumb spawn/init of moving object from record a2: scaled speed, copies position/state blocks, sub_2133274 random values, sub_2147FD8 transform. [REVIEW]
- docs/function_notes/hk_22.md:31 thumb spawn/init of moving object from record a2: scaled speed, copies position/state blocks, sub_2133274 random values, sub_2147FD8 transform. [REVIEW]
sub_20E5F68
export/plan0/arm9_main/sub_20E5F68_020E5F68.c
- docs/function_notes/NEEDS_REVIEW.md:713 thin wrapper: loads two resources (off_20E5FA0, off_20E5FA8), creates model objs (sub_20EA588, sub_20EA55C), anim init. Pendulum guess. [REVIEW]
- docs/function_notes/hk_22.md:32 thin wrapper: loads two resources (off_20E5FA0, off_20E5FA8), creates model objs (sub_20EA588, sub_20EA55C), anim init. Pendulum guess. [REVIEW]
- docs/function_notes/review_haiku1.md:90 Processes parameters, calls sub_20EA588 and sub_20EA55C for setup
sub_20E5FB4
export/plan0/arm9_main/sub_20E5FB4_020E5FB4.c
- vm_model/src/mapobj/pendulum.rs:10 Its collision (shape 5,
sub_20E5FB4) is the bob: a disc 100 x scale x units round and 50 x - vm_model/src/mapobj/pendulum.rs:71
sub_20E5FB4: the push out of the bob for a sphere atpof radiusr, if it touches. - game/src/objects.rs:1604 the pendulum's bob tests itself too (
sub_20E5FB4); its handler blows karts away - docs/function_notes.md:487 pendulum collision (shape 5): the bob as a disc facing the arm's z axis (+0x40), radius +0x104 (100 x scale x), half thickness +0x108 (50 x scale z); pushed out along the face, or radially (never down) past the rim
- docs/function_notes/NEEDS_REVIEW.md:714 collision probe: sub_21484D0 transform, distance vs radius sum (a1[65]+a3) via sub_2039828; writes push-out vector to a4, contact flag a1[67]. [REVIEW]
- docs/function_notes/hk_22.md:33 collision probe: sub_21484D0 transform, distance vs radius sum (a1[65]+a3) via sub_2039828; writes push-out vector to a4, contact flag a1[67]. [REVIEW]
sub_20E61A8
export/plan0/arm9_main/sub_20E61A8_020E61A8.c
- vm_model/src/mapobj/pendulum.rs:1 Tick-Tock Clock's pendulum (0xCF): init
sub_20E5E24, ticksub_20E61A8. - docs/function_notes/NEEDS_REVIEW.md:715 per-frame: advances u16 phase +256 by step +254 (table off_20E62FC); plays effect 2/3/4 when phase crosses thresholds; matrix/position update. [REVIEW]
- docs/function_notes/hk_22.md:34 per-frame: advances u16 phase +256 by step +254 (table off_20E62FC); plays effect 2/3/4 when phase crosses thresholds; matrix/position update. [REVIEW]
sub_20E630C
export/plan0/arm9_main/sub_20E630C_020E630C.c
- docs/function_notes/hk_22.md:35 writes a2[19..21] from a2[47..49]>>4, then draws via sub_20EA8A8 and sub_20EA868; position-to-render draw wrapper.
sub_20E6380
export/plan0/arm9_main/sub_20E6380_020E6380.c
- docs/function_notes/hk_22.md:36 heap-allocates 40-byte object from template off_20E63D8, stores at off_20E63D4, back-links via sub_20E6F50.
sub_20E63DC
export/plan0/arm9_main/sub_20E63DC_020E63DC.c
- docs/function_notes/hk_22.md:37 heap-allocates 44-byte object from template off_20E6434, stores at off_20E6430, init via sub_20D49D8.
sub_20E6438
export/plan0/arm9_main/sub_20E6438_020E6438.c
- docs/function_notes/hk_22.md:38 heap-allocates 64-byte object copied from 16-word template at *off_20E6484 and returns it.
sub_20E6488
export/plan0/arm9_main/sub_20E6488_020E6488.c
- docs/function_notes/hk_22.md:39 heap-allocates 44-byte struct into *a1 and calls sub_20E64B8 (model-instance constructor) with resource a2.
sub_20E64B8
export/plan0/arm9_main/sub_20E64B8_020E64B8.c
- docs/function_notes/hk_22.md:40 builds model instance: 108-byte record at a1+36 (sub_2084E28 with a2), optional 56-byte anim record at a1+40 via sub_20EA514, then sub_20E6514.
sub_20E6514
export/plan0/arm9_main/sub_20E6514_020E6514.c
- docs/function_notes.md:1620 fills a render-instance record from the resource header at a1+4 (two section pointers, the header words at a3+0..+24, and the attribute mask 0xFFFFFFF0); when a2 is set adds the value from sub_2087D0C
- docs/function_notes/NEEDS_REVIEW.md:716 fills render-instance record from resource header a1+4 (pointers, flags); with a2 allocates per-joint arrays and sets per-frame values (sub_2015B9C). [REVIEW]
- docs/function_notes/hk_22.md:41 fills render-instance record from resource header a1+4 (pointers, flags); with a2 allocates per-joint arrays and sets per-frame values (sub_2015B9C). [REVIEW]
sub_20E662C
export/plan0/arm9_main/sub_20E662C_020E662C.c
- docs/function_notes/NEEDS_REVIEW.md:717 allocates eight 48-byte buffers and one 36-byte buffer from a pool into global slots, then sub_21471BC. Work-buffer init. [REVIEW]
- docs/function_notes/hk_22.md:42 allocates eight 48-byte buffers and one 36-byte buffer from a pool into global slots, then sub_21471BC. Work-buffer init. [REVIEW]
- docs/function_notes/review_haiku1.md:91 Allocates 7 animation track buffers (48 bytes each)
sub_20E66E4
export/plan0/arm9_main/sub_20E66E4_020E66E4.c
- vm_model/src/mapobj/monty.rs:23 +0xB8 roll about the model's z (drawn by
sub_20E66E4), +0xB4 its direction. - game/src/objects.rs:1165 knocked away: it rolls about its own z (
sub_20E66E4) - docs/function_notes.md:394 object draw with a roll about the model's z (MTX_RotZ from the u16 angle)
- docs/function_notes/hk_22.md:43 draw submit: sends GX FIFO commands via sub_1FF9048 (cmd 20 mode, 25 matrix, 26 texture matrix from off_20E67C0 if a3, 27 color), then sub_20E6854.
sub_20E67C4
export/plan0/arm9_main/sub_20E67C4_020E67C4.c
- docs/function_notes/hk_22.md:44 draw submit like sub_20E66E4 without texture matrix; sends color (cmd 27) from a3, then sub_20E6854.
sub_20E6854
export/plan0/arm9_main/sub_20E6854_020E6854.c
- docs/function_notes/hk_22.md:45 core model draw: sends GX cmds 27/41 (polygon attrs, alpha/LOD from a1+20, depth via sub_20E69BC), 42/43 buffers if a1+26 != 1, then sub_1FF9144 submit.
sub_20E69BC
export/plan0/arm9_main/sub_20E69BC_020E69BC.c
- docs/function_notes/hk_22.md:46 returns depth-like scalar: dot of vector a1 with a row of camera matrix (*off_20E6A14), >>9.
sub_20E6A18
export/plan0/arm9_main/sub_20E6A18_020E6A18.c
- docs/function_notes/hk_22.md:47 sends GX cmds 42/43 (buffer ptrs) if a1+26 == 1, then 48 and 49 with a1+12 and a1+16 vectors.
sub_20E6A74
export/plan0/arm9_main/sub_20E6A74_020E6A74.c
- docs/function_notes/NEEDS_REVIEW.md:718 sends GX cmd 23 (matrix from *off_20E6AB4) then cmd 19 (begin, mode 30). [REVIEW]
- docs/function_notes/hk_22.md:48 sends GX cmd 23 (matrix from *off_20E6AB4) then cmd 19 (begin, mode 30). [REVIEW]
- docs/function_notes/review_haiku1.md:92 Sends 3D graphics camera and viewport setup commands
sub_20E6AB8
export/plan0/arm9_main/sub_20E6AB8_020E6AB8.c
- docs/function_notes/hk_22.md:49 sets render attributes in object +16/+20 from constants dword_20E6B0C/dword_20E6B10 (alpha 63, mode bits). Attribute setter.
sub_20E6B14
export/plan0/arm9_main/sub_20E6B14_020E6B14.c
- docs/function_notes/hk_22.md:50 returns *off_20E6B24 + 24 (getter).
sub_20E6B28
export/plan0/arm9_main/sub_20E6B28_020E6B28.c
- docs/function_notes/hk_22.md:51 returns *off_20E6B34 (global getter).
sub_20E6B38
export/plan0/arm9_main/sub_20E6B38_020E6B38.c
- docs/function_notes/hk_22.md:52 returns *off_20E6B44 (global getter).
sub_20E6B48
export/plan0/arm9_main/sub_20E6B48_020E6B48.c
- docs/function_notes/hk_22.md:53 returns *off_20E6B54 (global getter).
sub_20E6B58
export/plan0/arm9_main/sub_20E6B58_020E6B58.c
- docs/function_notes/hk_22.md:54 writes vector a1 (>>4) to +36/+40/+44 of struct at *off_20E6B90; returns off_20E6B90 value. Position setter for a shared object.
sub_20E6B94
export/plan0/arm9_main/sub_20E6B94_020E6B94.c
- docs/function_notes/hk_22.md:55 same as sub_20E6B58 for global struct off_20E6BCC.
sub_20E6BD0
export/plan0/arm9_main/sub_20E6BD0_020E6BD0.c
- docs/function_notes/hk_22.md:56 same as sub_20E6B58 for global struct off_20E6C08.
sub_20E6C0C
export/plan0/arm9_main/sub_20E6C0C_020E6C0C.c
- docs/function_notes/hk_22.md:57 resets global transform struct off_20E6C38: +20=0, +12=+20, +16=4096 (unit scale).
sub_20E6C3C
export/plan0/arm9_main/sub_20E6C3C_020E6C3C.c
- docs/function_notes/NEEDS_REVIEW.md:719 updates global struct off_20E6CB8 from scalars a2, a3 (+12/+20 scaled, +16 = a3+4096) and copies position a1 (>>4) to +36. [REVIEW]
- docs/function_notes/hk_22.md:58 updates global struct off_20E6CB8 from scalars a2, a3 (+12/+20 scaled, +16 = a3+4096) and copies position a1 (>>4) to +36. [REVIEW]
- docs/function_notes/review_haiku1.md:93 Scales coordinates, sets graphics parameters for viewing transformation
sub_20E6CBC
export/plan0/arm9_main/sub_20E6CBC_020E6CBC.c
- game/src/objects.rs:234 (
sub_20E6CBC/sub_20E6CF8load a billboard matrix, then only the object's position). - docs/function_notes.md:29 object matrix with the global billboard rotation and position / 16
sub_20E6CF8
export/plan0/arm9_main/sub_20E6CF8_020E6CF8.c
- vm_model/src/mapobj/boo.rs:45 [
Boo::flip] =(slot / 2) & 1), drawn withsub_20E6CF8(the position with the second - game/src/objects.rs:234 (
sub_20E6CBC/sub_20E6CF8load a billboard matrix, then only the object's position). - docs/function_notes.md:30 object matrix with the second billboard rotation and position / 16
sub_20E6D34
export/plan0/arm9_main/sub_20E6D34_020E6D34.c
- docs/function_notes/hk_22.md:59 builds vector from a1 cross global direction (*off_20E6D84 +24..+32) via sub_20397A8, normalizes (sub_2039860) into a2. Kart guess.
sub_20E6D88
export/plan0/arm9_main/sub_20E6D88_020E6D88.c
- docs/function_notes/hk_22.md:60 same as sub_20E6D34 but writes into struct *off_20E6DE8[0] and uses global off_20E6DEC as direction.
sub_20E6DF0
export/plan0/arm9_main/sub_20E6DF0_020E6DF0.c
- docs/function_notes.md:1625 builds the camera/billboard matrix from a1: fills the 3x3 block at *off_20E6F3C (4096 diagonal, a1[4] and a1[5] terms), calls sub_2146D0C and sub_2146DFC, and copies the result rows into the output table at off_20E6F48
- docs/function_notes/NEEDS_REVIEW.md:720 camera/billboard matrix from a1 via sub_2146D0C, sub_2146DFC, cross and normalize; copies two 4-word blocks to *off_20E6F4C. [REVIEW]
- docs/function_notes/hk_22.md:61 camera/billboard matrix from a1 via sub_2146D0C, sub_2146DFC, cross and normalize; copies two 4-word blocks to *off_20E6F4C. [REVIEW]
sub_20E6F50
export/plan0/arm9_main/sub_20E6F50_020E6F50.c
- docs/function_notes/hk_22.md:62 writes its argument pointer into *(result)+36 (back-link to owner); trivial setter.
sub_20E6F58
export/plan0/arm9_main/sub_20E6F58_020E6F58.c
- docs/function_notes/hk_22.md:63 appends pointer a2 to list a1 (count u16 at +4); sets list +24/+28 from a2+152; when +32 == 3 calls sub_20D6910(6, a2).
sub_20E6F9C
export/plan0/arm9_main/sub_20E6F9C_020E6F9C.c
- docs/function_notes/hk_22.md:64 initialises a pointer list: heap-allocates 4*capacity bytes (capacity u16 at +4), count=0, sets +24/+32 = 3 and +28 = 0.
sub_20E6FC4
export/plan0/arm9_main/sub_20E6FC4_020E6FC4.c
- docs/function_notes/hk_22.md:65 adds a2 to the u16 count at +4 of a list struct; trivial.
sub_20E6FCC
export/plan0/arm9_main/sub_20E6FCC_020E6FCC.c
- docs/function_notes/hk_22.md:66 sets u16 count at +4 to 0; trivial reset.
sub_20E6FD4
export/plan0/arm9_main/sub_20E6FD4_020E6FD4.c
- docs/function_notes/hk_22.md:67 iterates list (count u16 +4) and calls callback a1[7] on each entry whose flags (+2) lack bits 0x88; returns a1[8].
sub_20E705C
export/plan0/arm9_main/sub_20E705C_020E705C.c
- docs/function_notes.md:1624 iterates the object list (count at +4 of the list struct) and calls the callback at +16 for each entry without flag 4; in state 2 passes the entry's three vectors through a temporary array
- docs/function_notes/NEEDS_REVIEW.md:721 iterates object list with callback at +16 per entry (state 2 path transforms via sub_21484D0), then sub_20E71A0 on entries with +148. [REVIEW]
- docs/function_notes/hk_22.md:68 iterates object list with callback at +16 per entry (state 2 path transforms via sub_21484D0), then sub_20E71A0 on entries with +148. [REVIEW]
sub_20E71A0
export/plan0/arm9_main/sub_20E71A0_020E71A0.c
- docs/function_notes/NEEDS_REVIEW.md:722 syncs emitter flags: a1+2 bit 1 uses sub_20D4EF4/sub_20D4D60 to set a1+120 bit from off_20E72C8; else masks a1+120 into v2+64; sub_210CFBC on change. [REVIEW]
- docs/function_notes/hk_22.md:69 syncs emitter flags: a1+2 bit 1 uses sub_20D4EF4/sub_20D4D60 to set a1+120 bit from off_20E72C8; else masks a1+120 into v2+64; sub_210CFBC on change. [REVIEW]
- docs/function_notes/review_haiku1.md:94 Calculates visibility, updates flags at +120 based on distance and out-of-bounds checks
sub_20E730C
export/plan0/arm9_main/sub_20E730C_020E730C.c
- docs/function_notes/NEEDS_REVIEW.md:723 builds two parallel arrays (pointers and u16) sized from list count, indexed by element field +160 (u16). Index table rebuild. [REVIEW]
- docs/function_notes/hk_22.md:70 builds two parallel arrays (pointers and u16) sized from list count, indexed by element field +160 (u16). Index table rebuild. [REVIEW]
- docs/function_notes/review_haiku1.md:95 Allocates buffers for character data, indexes items by ID at +160
sub_20E7388
export/plan0/arm9_main/sub_20E7388_020E7388.c
- docs/function_notes/hk_22.md:71 returns u16 from table at *off_20E739C indexed by a1. Lookup getter.
sub_20E73A0
export/plan0/arm9_main/sub_20E73A0_020E73A0.c
- docs/function_notes/hk_22.md:72 returns word from table *off_20E73B0 indexed by a1. Lookup getter.
sub_20E73B4
export/plan0/arm9_main/sub_20E73B4_020E73B4.c
- docs/function_notes/hk_22.md:73 heap-allocates 40-byte object from template off_20E740C, stores at off_20E7408, init via sub_20E6F50.
sub_20E7410
export/plan0/arm9_main/sub_20E7410_020E7410.c
- docs/function_notes/hk_22.md:74 heap-allocates 64-byte object copied from 16-word template *off_20E745C and returns it.
sub_20E7460
export/plan0/arm9_main/sub_20E7460_020E7460.c
- docs/function_notes.md:1640 scene init (644 bytes): model instances via sub_204799C and sub_20E64B8, sub_20E6AB8, the flag +0xC0 on each instance, and two 120-byte tables from sub_2036BEC
- docs/function_notes/NEEDS_REVIEW.md:724 scene init (644 B): model instances via sub_20E64B8, five 120-byte tables, 60-entry sine-like table (off_20E7710). jg_* guess. [REVIEW]
- docs/function_notes/hk_22.md:75 scene init (644 B): model instances via sub_20E64B8, five 120-byte tables, 60-entry sine-like table (off_20E7710). jg_* guess. [REVIEW]
sub_20E7760
export/plan0/arm9_main/sub_20E7760_020E7760.c
- docs/function_notes.md:1632 racer state init: finds the entry for the racer slot (sub_207A974 of the id at off_20E793C) and sets the pointer off_20E7938 and the table off_20E7944; clears the vector words at off_20E7948; when the state is 3 or the id test fails clears off_20E7938 instead
- docs/function_notes/NEEDS_REVIEW.md:725 racer state init: finds entry by slot (sub_207A974), zeroes vectors, speed limit 80/60/45 by +16 type, calls sub_20EA37C, starts state machine. [REVIEW]
- docs/function_notes/hk_22.md:76 racer state init: finds entry by slot (sub_207A974), zeroes vectors, speed limit 80/60/45 by +16 type, calls sub_20EA37C, starts state machine. [REVIEW]
sub_20E79C4
export/plan0/arm9_main/sub_20E79C4_020E79C4.c
- docs/function_notes/NEEDS_REVIEW.md:726 if state (+12) != 6: gets sound handle via sub_2108E6C(4), sets it via sub_212C6F0(h,1), clears flag off_20E7A14. [REVIEW]
- docs/function_notes/hk_22.md:77 if state (+12) != 6: gets sound handle via sub_2108E6C(4), sets it via sub_212C6F0(h,1), clears flag off_20E7A14. [REVIEW]
- docs/function_notes/review_haiku1.md:96 Checks graphics mode, conditionally allocates viewport via sub_2108E6C
sub_20E7A18
export/plan0/arm9_main/sub_20E7A18_020E7A18.c
- docs/function_notes/hk_22.md:78 if state != 6, sets timer off_20E7A3C to 20 (small timer arm).
sub_20E7A40
export/plan0/arm9_main/sub_20E7A40_020E7A40.c
- docs/function_notes/hk_22.md:79 if state (+12) != 6, requests state 4 via sub_2046BCC on off_20E7A80; otherwise returns state.
sub_20E7A84
export/plan0/arm9_main/sub_20E7A84_020E7A84.c
- docs/function_notes/NEEDS_REVIEW.md:727 airborne tick: sub_2147288 integrate; vertical velocity down by dword_20E7B64 clamped at -12288; on landing requests state 2/3/5 by type. [REVIEW]
- docs/function_notes/hk_22.md:80 airborne tick: sub_2147288 integrate; vertical velocity down by dword_20E7B64 clamped at -12288; on landing requests state 2/3/5 by type. [REVIEW]
- docs/function_notes/review_haiku1.md:97 Adjusts camera height via sub_2147288, applies -12288 lower bound constraint
sub_20E7B7C
export/plan0/arm9_main/sub_20E7B7C_020E7B7C.c
- docs/function_notes.md:1630 init/reset of a racer-state record: sets off_20E7D28 = 1 and off_20E7D2C = 0, clears the sub-records for the current state (sub_2147288 on the three vectors off_20E7D38..40), and resets the timers of the state tables off_20E7D30 / off_20E7D34
- docs/function_notes/NEEDS_REVIEW.md:728 init/reset of a racer-state record: resets flags, sums a 30-step velocity decay (clamp -12288) into position, copies vectors, zeroes sub-pointers. [REVIEW]
- docs/function_notes/hk_22.md:81 init/reset of a racer-state record: resets flags, sums a 30-step velocity decay (clamp -12288) into position, copies vectors, zeroes sub-pointers. [REVIEW]
sub_20E7D90
export/plan0/arm9_main/sub_20E7D90_020E7D90.c
- docs/function_notes/NEEDS_REVIEW.md:729 moving-object tick: integrate (sub_2147288); speed +0x2000 or +2048 by +72 bit 0; past dword_20E7E4C plays sound and requests state 0. [REVIEW]
- docs/function_notes/hk_22.md:82 moving-object tick: integrate (sub_2147288); speed +0x2000 or +2048 by +72 bit 0; past dword_20E7E4C plays sound and requests state 0. [REVIEW]
- docs/function_notes/review_haiku1.md:98 Calculates physics acceleration, updates Y position, checks bounds for event triggers
sub_20E7E58
export/plan0/arm9_main/sub_20E7E58_020E7E58.c
- docs/function_notes/NEEDS_REVIEW.md:730 init of a moving object: sets flag, sub_2147288 init, sets word at off_20E7ECC to dword_20E7EC8 unless +72 bit 0 is set. [REVIEW]
- docs/function_notes/hk_22.md:83 init of a moving object: sets flag, sub_2147288 init, sets word at off_20E7ECC to dword_20E7EC8 unless +72 bit 0 is set. [REVIEW]
- docs/function_notes/review_haiku1.md:99 Initializes physics acceleration based on game mode flag at +72
sub_20E7ED0
export/plan0/arm9_main/sub_20E7ED0_020E7ED0.c
- docs/function_notes/NEEDS_REVIEW.md:731 follow-target update: countdown off_20E7F88 requests state 5 at zero; else saves target pos (+128..+136); sub_203C5E4 gate copies sub_20E6B48 pos. [REVIEW]
- docs/function_notes/hk_22.md:84 follow-target update: countdown off_20E7F88 requests state 5 at zero; else saves target pos (+128..+136); sub_203C5E4 gate copies sub_20E6B48 pos. [REVIEW]
- docs/function_notes/review_haiku1.md:100 Manages countdown timer, decrements if nonzero, triggers end-of-race event
sub_20E7FA8
export/plan0/arm9_main/sub_20E7FA8_020E7FA8.c
- docs/function_notes.md:1638 large racer-like init: clears the flag and vector words, sets the constants 4, 1 and 31 into the state words, resets the sub-object at off_20E8218, and initialises the child records
- docs/function_notes/NEEDS_REVIEW.md:732 large racer-like init: resets flags/vectors, constants 4/1/31, copies positions, starts/stops sounds (sub_2108E6C, sub_212C6F0, sub_212ECC0). [REVIEW]
- docs/function_notes/hk_22.md:85 large racer-like init: resets flags/vectors, constants 4/1/31, copies positions, starts/stops sounds (sub_2108E6C, sub_212C6F0, sub_212ECC0). [REVIEW]
sub_20E827C
export/plan0/arm9_main/sub_20E827C_020E827C.c
- docs/function_notes/NEEDS_REVIEW.md:733 per-frame path advance via sub_20EA1D4 on curve data; requests state 5 if object flag +72 has bit 0x800 set. Path follower. [REVIEW]
- docs/function_notes/hk_22.md:86 per-frame path advance via sub_20EA1D4 on curve data; requests state 5 if object flag +72 has bit 0x800 set. Path follower. [REVIEW]
- docs/function_notes/review_haiku1.md:101 Checks physics flag at +72, conditionally triggers race event
sub_20E82DC
export/plan0/arm9_main/sub_20E82DC_020E82DC.c
- docs/function_notes/NEEDS_REVIEW.md:734 curve-follower init: sets pointers to tables, builds a 492-unit curve via sub_20D7D18, then sub_20EA1D4 to start. [REVIEW]
- docs/function_notes/hk_22.md:87 curve-follower init: sets pointers to tables, builds a 492-unit curve via sub_20D7D18, then sub_20EA1D4 to start. [REVIEW]
- docs/function_notes/review_haiku1.md:102 Sets up collision/tracking data structure with callbacks
sub_20E8368
export/plan0/arm9_main/sub_20E8368_020E8368.c
- docs/function_notes/NEEDS_REVIEW.md:735 timed follower tick: offset added to position, sub_2147288 integrate, counter off_20E8408 vs u16 limit or flag 0x800 requests state 5. [REVIEW]
- docs/function_notes/hk_22.md:88 timed follower tick: offset added to position, sub_2147288 integrate, counter off_20E8408 vs u16 limit or flag 0x800 requests state 5. [REVIEW]
- docs/function_notes/review_haiku1.md:103 Updates progress counter, checks against maximum, triggers race events
sub_20E8418
export/plan0/arm9_main/sub_20E8418_020E8418.c
- docs/function_notes/NEEDS_REVIEW.md:736 per-frame: updates field +24 of global struct to value-2 when counts differ; position = source + offset, then sub_2147288. [REVIEW]
- docs/function_notes/hk_22.md:89 per-frame: updates field +24 of global struct to value-2 when counts differ; position = source + offset, then sub_2147288. [REVIEW]
- docs/function_notes/review_haiku1.md:104 Checks race progress, updates graphics Y scale value
sub_20E84B0
export/plan0/arm9_main/sub_20E84B0_020E84B0.c
- docs/function_notes.md:1641 racer path-follow tick: the progress at *off_20E873C selects a pair of 16-bit entries from table off_20E8748 (index progress >> 4), interpolates the position, and calls sub_20EA1D4 at the end of the path (progress >= 0x10000)
- docs/function_notes/NEEDS_REVIEW.md:737 racer path-follow tick: table off_20E8748 by progress (>>4), interpolates position, plays effect 10/40, requests state 5 on finish (sub_203C880). [REVIEW]
- docs/function_notes/hk_22.md:90 racer path-follow tick: table off_20E8748 by progress (>>4), interpolates position, plays effect 10/40, requests state 5 on finish (sub_203C880). [REVIEW]
sub_20E8790
export/plan0/arm9_main/sub_20E8790_020E8790.c
- docs/function_notes.md:1639 curve-follower init like sub_20E82DC: sets the state word 2 at off_20E89E4, the flags at off_20E89E8..F8 to 1 and 0, and resets the sub-record at +12 of the child at off_20E89FC
- docs/function_notes/NEEDS_REVIEW.md:738 curve-follower init like sub_20E82DC: state/flags, builds 492-unit curve (sub_20D7D18), initial speed from dot products, zeroes vectors. [REVIEW]
- docs/function_notes/hk_22.md:91 curve-follower init like sub_20E82DC: state/flags, builds 492-unit curve (sub_20D7D18), initial speed from dot products, zeroes vectors. [REVIEW]
sub_20E8A78
export/plan0/arm9_main/sub_20E8A78_020E8A78.c
- docs/function_notes/hk_22.md:93 resets five global state words (first set to 4, others 0); trivial init.
sub_20E8AC8
export/plan0/arm9_main/sub_20E8AC8_020E8AC8.c
- docs/function_notes.md:1647 2.8 KB per-frame kart physics and course collision: runs KCL sphere probes on the kart and applies the wall, floor and item-box responses; skipped when the state at off_20E95BC +14 is 4
- docs/function_notes/NEEDS_REVIEW.md:739 2.8 KB per-frame kart physics and course collision: KCL sphere probes (sub_1FFD648, sub_1FFDEE4) push position, update speed/position vectors, effects. [REVIEW]
- docs/function_notes/hk_22.md:94 2.8 KB per-frame kart physics and course collision: KCL sphere probes (sub_1FFD648, sub_1FFDEE4) push position, update speed/position vectors, effects. [REVIEW]
sub_20E9658
export/plan0/arm9_main/sub_20E9658_020E9658.c
- docs/function_notes/NEEDS_REVIEW.md:740 camera/follow update: target from object +80 or sub_20E6B38 (sub_203C5E4 gate), cross/normalize, matrices via sub_2146D0C/sub_2146D78. [REVIEW]
- docs/function_notes/hk_22.md:95 camera/follow update: target from object +80 or sub_20E6B38 (sub_203C5E4 gate), cross/normalize, matrices via sub_2146D0C/sub_2146D78. [REVIEW]
- docs/function_notes/review_haiku1.md:105 Transforms coordinate system matrices, copies 12 values from source data
sub_20E9810
export/plan0/arm9_main/sub_20E9810_020E9810.c
- docs/function_notes.md:1644 racer draw: picks the object list by the mode at off_20E9CB8, sets the render priority bits, and draws each racer part through the sub-object records v27..v34
- docs/function_notes/NEEDS_REVIEW.md:741 racer draw: picks object list by mode, sets render priority bits +20, GX cmds 16,17,20,25-28, draws parts via sub_20E6A18/sub_20E6854. [REVIEW]
- docs/function_notes/hk_22.md:96 racer draw: picks object list by mode, sets render priority bits +20, GX cmds 16,17,20,25-28, draws parts via sub_20E6A18/sub_20E6854. [REVIEW]
sub_20E9D10
export/plan0/arm9_main/sub_20E9D10_020E9D10.c
- docs/function_notes.md:1643 racer state tick: when the object at off_20EA180 is not state 6 and the flag at off_20EA184 is set, advances the frame counter at off_20EA18C and wraps it at 60, then steps the racer's camera state (sub_20E9658)
- docs/function_notes/NEEDS_REVIEW.md:742 racer state tick: frame counter wraps at 60; runs camera (sub_20E9658) and physics (sub_20E8AC8); finish checks (sub_203C880); sets states 1/3/6. [REVIEW]
- docs/function_notes/hk_22.md:97 racer state tick: frame counter wraps at 60; runs camera (sub_20E9658) and physics (sub_20E8AC8); finish checks (sub_203C880); sets states 1/3/6. [REVIEW]
sub_20EA1D4
export/plan0/arm9_main/sub_20EA1D4_020EA1D4.c
- docs/function_notes.md:1629 moves an object along a precomputed curve: while sub_20D849C reports more curve nodes, advances each of the four progress values by 12 (wrapping at the curve length) and steps the curve with sub_20D7C84; then sub_20D8488 gives the position, written to the output at off_20EA368 / off_20EA36C
- docs/function_notes/NEEDS_REVIEW.md:743 moves an object along a precomputed curve (sub_20D849C, sub_20D7C84 advance), scales with table off_20EA36C, then sub_2147288 transform. [REVIEW]
- docs/function_notes/hk_22.md:98 moves an object along a precomputed curve (sub_20D849C, sub_20D7C84 advance), scales with table off_20EA36C, then sub_2147288 transform. [REVIEW]
sub_20EA37C
export/plan0/arm9_main/sub_20EA37C_020EA37C.c
- docs/function_notes/NEEDS_REVIEW.md:744 per-frame camera/anchor update: copies two vectors, adds dword_20EA49C each frame, picks source via sub_203C5E4, flips signs by flag. [REVIEW]
- docs/function_notes/hk_22.md:99 per-frame camera/anchor update: copies two vectors, adds dword_20EA49C each frame, picks source via sub_203C5E4, flips signs by flag. [REVIEW]
- docs/function_notes/review_haiku1.md:106 Transforms coordinate system, conditionally negates values for directional handling
sub_20EA4BC
export/plan0/arm9_main/sub_20EA4BC_020EA4BC.c
- docs/function_notes/hk_22.md:100 thumb; allocates 56-byte record, inits animation (sub_208823C), sub_208805C, then starts it via sub_2087F84.
sub_20EA514
export/plan0/arm9_main/sub_20EA514_020EA514.c
- docs/function_notes/hk_22.md:101 thumb; selects joint clip immediately for object a3 (sub_208823C mode 1), sub_208805C, then sub_2087F84.
sub_20EA55C
export/plan0/arm9_main/sub_20EA55C_020EA55C.c
- docs/function_notes/hk_22.md:102 thumb; allocates 116-byte record into *a1 and inits it via sub_207AFA8(a2, a3).
sub_20EA588
export/plan0/arm9_main/sub_20EA588_020EA588.c
- docs/function_notes/hk_22.md:103 thumb; allocates 108-byte model-instance record into *a1 and inits it from resource a2 via sub_2084E28.
sub_20EA5B0
export/plan0/arm9_main/sub_20EA5B0_020EA5B0.c
- docs/function_notes/hk_22.md:104 draw wrapper: sub_20E6854 with a3 vector (>>4) or NULL, plus flags a2.
sub_20EA618
export/plan0/arm9_main/sub_20EA618_020EA618.c
- docs/function_notes/hk_22.md:105 draws via sub_207AD88 with temporarily overridden u16 fields +108/+110 (random id and cap), restored afterwards.
sub_20EA670
export/plan0/arm9_main/sub_20EA670_020EA670.c
- docs/function_notes/NEEDS_REVIEW.md:745 animation play with frame clamp: frame count via sub_2013344, state in off_20EA734, sub_20109C4 and sub_20849D0 draw, then restore. [REVIEW]
- docs/function_notes/hk_22.md:106 animation play with frame clamp: frame count via sub_2013344, state in off_20EA734, sub_20109C4 and sub_20849D0 draw, then restore. [REVIEW]
- docs/function_notes/review_haiku1.md:107 Initializes item rendering with animation state
sub_20EA740
export/plan0/arm9_main/sub_20EA740_020EA740.c
- docs/function_notes/NEEDS_REVIEW.md:746 animation advance with frame clamp via sub_201290C; saves and restores frame index. [REVIEW]
- docs/function_notes/hk_22.md:107 animation advance with frame clamp via sub_201290C; saves and restores frame index. [REVIEW]
- docs/function_notes/review_haiku1.md:108 Similar to 670 - initializes item visualization
sub_20EA7CC
export/plan0/arm9_main/sub_20EA7CC_020EA7CC.c
- docs/function_notes/hk_22.md:108 animation draw with frame clamp via sub_20849D0; saves and restores frame index.
sub_20EA84C
export/plan0/arm9_main/sub_20EA84C_020EA84C.c
- docs/function_notes/hk_22.md:109 thin wrapper calling function pointer off_20EA860 with cmd 41 (polygon attributes) and off_20EA864.
sub_20EA868
export/plan0/arm9_main/sub_20EA868_020EA868.c
- docs/function_notes/hk_22.md:110 draw wrapper: temporarily sets u16 +110 limit to a4, calls sub_207AEC8, restores.
sub_20EA8A8
export/plan0/arm9_main/sub_20EA8A8_020EA8A8.c
- docs/function_notes/hk_22.md:111 draws animated model: if frame index a4 >= frame count (sub_2013344) calls sub_20849F8 directly; else temporarily sets frame index, then draws.
sub_20EA94C
export/plan0/arm9_main/sub_20EA94C_020EA94C.c
- vm_model/src/shine.rs:67
sub_20EA94C/sub_20EAA14: velocity after sliding along a surface normal. - docs/function_notes/NEEDS_REVIEW.md:747 vector helper: if a2[1] > 0 delegates to sub_20EAA14; else normalizes a2 when long enough and delegates; otherwise copies a1 to a6. [REVIEW]
- docs/function_notes/hk_22.md:112 vector helper: if a2[1] > 0 delegates to sub_20EAA14; else normalizes a2 when long enough and delegates; otherwise copies a1 to a6. [REVIEW]
- docs/function_notes/review_haiku1.md:109 Validates vector magnitude, conditionally normalizes via sub_2039860
sub_20EAA14
export/plan0/arm9_main/sub_20EAA14_020EAA14.c
- vm_model/src/shine.rs:67
sub_20EA94C/sub_20EAA14: velocity after sliding along a surface normal. - vm_model/src/kart/banana.rs:22 Wall hits in flight (
sub_20F92E8->sub_20EAA14): the part along the wall keeps 0.7, the part into it - vm_model/src/kart/banana.rs:260
sub_20EAA14with the item wall constants: the velocity along the wall keeps 0.7; the part into - vm_model/src/kart/mushroom.rs:247
sub_20F92E8/sub_20EAA14: slide damping and a minimum outward bounce. - game/src/shine.rs:180
sub_20EAA14: slide damping and a minimum outward bounce - docs/function_notes/NEEDS_REVIEW.md:748 pushes position a1 out along direction a2 by sub_214848C depth, scales by a3, clamps to min length a5; writes result to a6. Collision response slide. [REVIEW]
- docs/function_notes/hk_22.md:113 pushes position a1 out along direction a2 by sub_214848C depth, scales by a3, clamps to min length a5; writes result to a6. Collision response slide. [REVIEW]
sub_20EAC20
export/plan0/arm9_main/sub_20EAC20_020EAC20.c
- vm_model/src/kart/fxmath.rs:65
sub_20EAC20: ease a stored floor normal toward straight up byrate(the generic item tick - vm_model/src/kart/fxmath.rs:418
sub_20EAC20: a tilted floor normal eases back to straight up, never overshooting. - vm_model/src/kart/shell.rs:10
sub_20EAC20in the generic tick, is not ported.)
sub_20EACC0
export/plan0/arm9_main/sub_20EACC0_020EACC0.c
- vm_model/src/kart/red_shell.rs:353
sub_20EACC0: turn unit vectoratoward unit vectorbbyrate(more when they differ a
sub_20EAD80
export/plan0/arm9_main/sub_20EAD80_020EAD80.c
- vm_model/src/obj_collision.rs:368 sub_20EAD80 with the radius and the half height both ways
- vm_model/src/mapobj/pinball.rs:386
sub_20EAD80: contact with an upright (along axis 1) cylinder of radiusradius, reaching - docs/function_notes.md:18 tilted cylinder push-out
sub_20EAFC4
export/plan0/arm9_main/sub_20EAFC4_020EAFC4.c
- vm_model/src/obj_collision.rs:429
sub_20EAFC4: asymmetric oriented box contact. Radius expands each plane; - vm_model/src/mapobj/pinball.rs:345
sub_20EAFC4: contact of a sphere (centrep, radiusr) with an oriented box centred on - docs/function_notes.md:19 asymmetric oriented box push-out: strict per-plane radius-expanded bounds, separate positive/negative extents, least penetration with X-before-Z ties, upward response only for positive up projection; horizontal pushes zero world Y; matches 293 original traffic callback results
sub_20EB2A0
export/plan0/arm9_main/sub_20EB2A0_020EB2A0.c
- vm_model/src/obj_collision.rs:400
sub_20EB2A0: out of an upright cylinder sideways, the push per axis capped by how deep - docs/function_notes.md:17 upright cylinder push-out (sideways, capped by vertical depth)
sub_20EB3F0
export/plan0/arm9_main/sub_20EB3F0_020EB3F0.c
- vm_model/src/obj_collision.rs:323 sub_20EB3F0: out to the surface along the centre line
- vm_model/src/kart/traffic.rs:211 sub_20EB3F0: the overlap along the line between the centres
- docs/function_notes.md:16 sphere push-out
sub_20EB498
export/plan0/arm9_main/sub_20EB498_020EB498.c
- docs/function_notes.md:1637 object init and tick: runs the KCL floor probe sub_1FFDEE4 on the position at a1+4 and, on success, copies the floor normal into +188..+196; advances the height by +88, copies the position into +176..+184 and clears the velocity words +16..+24
- docs/function_notes/NEEDS_REVIEW.md:749 object init and tick: KCL floor probe sub_1FFDEE4 sets position; direction from speed (sub_20D7A3C); state machine off_20EB714; spawn via sub_20E516C. [REVIEW]
- docs/function_notes/hk_22.md:114 object init and tick: KCL floor probe sub_1FFDEE4 sets position; direction from speed (sub_20D7A3C); state machine off_20EB714; spawn via sub_20E516C. [REVIEW]
sub_20EB720
export/plan0/arm9_main/sub_20EB720_020EB720.c
- docs/function_notes/hk_22.md:115 clears global pointer off_20EB728 and returns it; trivial reset.
sub_20EB72C
export/plan0/arm9_main/sub_20EB72C_020EB72C.c
- docs/function_notes/NEEDS_REVIEW.md:750 loads one resource (off_20EB754) and creates a model object via sub_20EA588 with anim init sub_2084968. Static model (woodbox1 guess). [REVIEW]
- docs/function_notes/hk_22.md:116 loads one resource (off_20EB754) and creates a model object via sub_20EA588 with anim init sub_2084968. Static model (woodbox1 guess). [REVIEW]
- docs/function_notes/review_haiku1.md:110 Processes parameter via sub_20D21EC, calls 3D graphics setup
sub_20EB760
export/plan0/arm9_main/sub_20EB760_020EB760.c
- docs/function_notes/NEEDS_REVIEW.md:751 if type a3 is 1 or 2: detaches object (sub_20EBEF8), clears global if equal, sets state 1, plays effects 49 and 50 via sub_208B7BC unless flags 3 set. [REVIEW]
- docs/function_notes/hk_22.md:117 if type a3 is 1 or 2: detaches object (sub_20EBEF8), clears global if equal, sets state 1, plays effects 49 and 50 via sub_208B7BC unless flags 3 set. [REVIEW]
- docs/function_notes/review_haiku1.md:111 Checks item status, conditionally plays collision sounds
sub_20EB7E0
export/plan0/arm9_main/sub_20EB7E0_020EB7E0.c
- docs/function_notes.md:1619 kart-triggered variant of sub_20EB760: when the type word at a3 is 3 and the mode is not 1 calls sub_20EBEF8, sets the timers at +144/+146, calls sub_20D26EC and sub_20D26F8, and when +120 & 3 is zero plays the effect pair 49/50 (sub_208B7BC or sub_208B498 by the flag at a4)
- docs/function_notes/NEEDS_REVIEW.md:752 kart-triggered variant of sub_20EB760 (type 3, kart flag/speed over 12288): detach, state 1, sub_20D26EC/sub_20D26F8, effects 49/50 scaled by a2+116. [REVIEW]
- docs/function_notes/hk_22.md:118 kart-triggered variant of sub_20EB760 (type 3, kart flag/speed over 12288): detach, state 1, sub_20D26EC/sub_20D26F8, effects 49/50 scaled by a2+116. [REVIEW]
sub_20EB8F8
export/plan0/arm9_main/sub_20EB8F8_020EB8F8.c
- docs/function_notes.md:1631 floating-object physics: calls sub_20EBC2C (wall response), damps the velocities at +204 and +212 by 164 >> 12, damps the angular term at +240 toward 0x10000, subtracts dword_20EBAA8 from +20, then integrates the positions with sub_2148504 (+204/+16, +176/+204 -> +4, +188/+216 -> +160), and normalises when the squared speed is at least 16
- docs/function_notes/NEEDS_REVIEW.md:753 floating-object physics: damps velocities, integrates position (sub_2148504), decays rotation +240, gravity dword_20EBAA8, resets at timer >= 90. [REVIEW]
- docs/function_notes/hk_22.md:119 floating-object physics: damps velocities, integrates position (sub_2148504), decays rotation +240, gravity dword_20EBAA8, resets at timer >= 90. [REVIEW]
sub_20EBAB0
export/plan0/arm9_main/sub_20EBAB0_020EBAB0.c
- docs/function_notes/NEEDS_REVIEW.md:754 per-frame object step: if sub_20EBC2C() hits, sets state a1+144=3,a1+146=1; a1+20 -= 492, adds to a1+208, integrates via sub_2148504 [REVIEW]
- docs/function_notes/hk_23.md:3 per-frame object step: if sub_20EBC2C() hits, sets state a1+144=3,a1+146=1; a1+20 -= 492, adds to a1+208, integrates via sub_2148504 [REVIEW]
- docs/function_notes/review_haiku1.md:112 Updates velocity, conditionally triggers status change at speed threshold
sub_20EBB04
export/plan0/arm9_main/sub_20EBB04_020EBB04.c
- docs/function_notes/NEEDS_REVIEW.md:755 object init/reset: picks one of two 3-vectors (a1+244 or a1+256) by sub_2061FB8 flags, copies to a1+216..224, builds rotation at a1+40 [REVIEW]
- docs/function_notes/hk_23.md:4 object init/reset: picks one of two 3-vectors (a1+244 or a1+256) by sub_2061FB8 flags, copies to a1+216..224, builds rotation at a1+40 [REVIEW]
- docs/function_notes/review_haiku1.md:113 Initializes velocity based on track orientation, resets acceleration
sub_20EBC2C
export/plan0/arm9_main/sub_20EBC2C_020EBC2C.c
- docs/function_notes.md:1635 wall/ground collision response: projects the vectors at a1+10/13/16 onto the normal a1+47 with sub_2039828 and sub_2147FD8, scaled by the speed at a1[22] and the sign of the dot product
- docs/function_notes/NEEDS_REVIEW.md:756 wall/ground collision response: projects a1+10/13/16 onto normal a1+47, bounces a1[5] on penetration, updates a1[52], a1[4], a1[6], a1[57..59] [REVIEW]
- docs/function_notes/hk_23.md:5 wall/ground collision response: projects a1+10/13/16 onto normal a1+47, bounces a1[5] on penetration, updates a1[52], a1[4], a1[6], a1[57..59] [REVIEW]
sub_20EBE68
export/plan0/arm9_main/sub_20EBE68_020EBE68.c
- docs/function_notes/hk_23.md:6 claims global slot off_20EBEA8 once when a1+132 >= 0x384 and sub-object flag clear; sets state a1+144=2, a1+146=1. Returns its argument.
sub_20EBEAC
export/plan0/arm9_main/sub_20EBEAC_020EBEAC.c
- docs/function_notes/hk_23.md:7 ORs three 16-bit flag masks (tables off_20EBEEC/EBEF0/EBEF4) into object flag word a1+2.
sub_20EBEF8
export/plan0/arm9_main/sub_20EBEF8_020EBEF8.c
- docs/function_notes.md:1642 effect emitter: sets flag bits from off_20EC188 into a1+2, runs the state hook sub_218173C when the state of object off_20EC184 is 4, takes a random draw from sub_20D22C0, and emits the particles with sub_20F8A04 while the count at +272 allows
- docs/function_notes/NEEDS_REVIEW.md:757 effect emitter: ORs flag into a1+2, RNG/timer check (sub_20D22C0), picks entry (sub_20F8A04), allocates table entry, sets pos/vel, sub_20F6630 [REVIEW]
- docs/function_notes/hk_23.md:8 effect emitter: ORs flag into a1+2, RNG/timer check (sub_20D22C0), picks entry (sub_20F8A04), allocates table entry, sets pos/vel, sub_20F6630 [REVIEW]
sub_20EC194
export/plan0/arm9_main/sub_20EC194_020EC194.c
- docs/function_notes/NEEDS_REVIEW.md:758 object reset from position: zeroes a1+16/20/24, copies a1+176..184 to a1+4..12, builds rotation at a1+40 via sub_20D7A3C + sub_1FFCCD0 [REVIEW]
- docs/function_notes/hk_23.md:9 object reset from position: zeroes a1+16/20/24, copies a1+176..184 to a1+4..12, builds rotation at a1+40 via sub_20D7A3C + sub_1FFCCD0 [REVIEW]
- docs/function_notes/review_haiku1.md:114 Resets velocity to zero, copies stored rotation
sub_20EC1EC
export/plan0/arm9_main/sub_20EC1EC_020EC1EC.c
- docs/function_notes/hk_23.md:10 thin wrapper; tail-calls function pointer off_20EC1F8 with a2+128.
sub_20EC1FC
export/plan0/arm9_main/sub_20EC1FC_020EC1FC.c
- docs/function_notes/NEEDS_REVIEW.md:759 per-frame object update: a2+4/8/12 >>4 into a2+76..84, calls sub_20EA8A8 with off_20EC310; if a2+142 set, drag via sub_20E5634/sub_20E53AC [REVIEW]
- docs/function_notes/hk_23.md:11 per-frame object update: a2+4/8/12 >>4 into a2+76..84, calls sub_20EA8A8 with off_20EC310; if a2+142 set, drag via sub_20E5634/sub_20E53AC [REVIEW]
- docs/function_notes/review_haiku1.md:115 Sets up rendering, conditionally handles special trail effects
sub_20EC314
export/plan0/arm9_main/sub_20EC314_020EC314.c
- docs/function_notes/NEEDS_REVIEW.md:760 heap-allocates a 40-byte object, copies a 10-word template from off_20EC36C, stores pointer in global off_20EC368, calls sub_20E6F50 [REVIEW]
- docs/function_notes/hk_23.md:12 heap-allocates a 40-byte object, copies a 10-word template from off_20EC36C, stores pointer in global off_20EC368, calls sub_20E6F50 [REVIEW]
- docs/function_notes/review_haiku1.md:116 Allocates and copies item transform data (40 bytes)
sub_20EC370
export/plan0/arm9_main/sub_20EC370_020EC370.c
- docs/function_notes/NEEDS_REVIEW.md:761 same pattern as sub_20EC314 but 44-byte object, template off_20EC3C8, global off_20EC3C4, init via sub_20D49D8 [REVIEW]
- docs/function_notes/hk_23.md:13 same pattern as sub_20EC314 but 44-byte object, template off_20EC3C8, global off_20EC3C4, init via sub_20D49D8 [REVIEW]
- docs/function_notes/review_haiku1.md:117 Allocates and copies item effect transform data (44 bytes)
sub_20EC3CC
export/plan0/arm9_main/sub_20EC3CC_020EC3CC.c
- docs/function_notes/hk_23.md:14 allocates a 64-byte object and copies a 16-word constant template from off_20EC418 into it; returns it (constructor).
sub_20EC41C
export/plan0/arm9_main/sub_20EC41C_020EC41C.c
- docs/function_notes/hk_23.md:15 event handler: if *a3==1 calls sub_20EC538, sets a1+144=1, a1+146=1, returns 1; otherwise returns 0.
sub_20EC450
export/plan0/arm9_main/sub_20EC450_020EC450.c
- vm_model/src/mapobj/knock.rs:77
sub_20EC450: own-reaction 1 (a star kart) knocks it away. - docs/function_notes.md:401 shared knock kart callback: code 1 -> launch + state 1 (Piranha Plant)
- docs/function_notes/hk_23.md:16 same as sub_20EC41C but calls sub_20EC6E4 for the alternate direction setup.
sub_20EC484
export/plan0/arm9_main/sub_20EC484_020EC484.c
- docs/function_notes/hk_23.md:17 thunk; tail-calls function pointer off_20EC48C with a1.
sub_20EC490
export/plan0/arm9_main/sub_20EC490_020EC490.c
- vm_model/src/mapobj/knock.rs:56 table): 0 standing, 1 knocked flying (
sub_20EC504/sub_20EC490, no contact), 2 removed. - docs/function_notes.md:400 knocked state update: step, below bottom -> state 2 (removed)
- docs/function_notes/NEEDS_REVIEW.md:762 per-frame move-along-axis step: a1+172 +/-= a1+174 (sign from a1+168), a1+20 -= a1+164, integrates a1+4; if a1+8 < a1+160 sets state 2 [REVIEW]
- docs/function_notes/hk_23.md:18 per-frame move-along-axis step: a1+172 +/-= a1+174 (sign from a1+168), a1+20 -= a1+164, integrates a1+4; if a1+8 < a1+160 sets state 2 [REVIEW]
sub_20EC504
export/plan0/arm9_main/sub_20EC504_020EC504.c
- vm_model/src/mapobj/knock.rs:56 table): 0 standing, 1 knocked flying (
sub_20EC504/sub_20EC490, no contact), 2 removed. - docs/function_notes.md:399 knocked state enter: no-contact flag, drop shadow
- docs/function_notes/hk_23.md:19 ORs flag word from off_20EC534 into a1+2, then maps 16-bit ID a1+100 through sub_20D5344 and stores it back.
sub_20EC538
export/plan0/arm9_main/sub_20EC538_020EC538.c
- docs/function_notes/NEEDS_REVIEW.md:763 side/direction of object a1 vs reference vector, normal from off_20EC6DC/6E0, sets a1[42], writes scaled a1+4..6 [REVIEW]
- docs/function_notes/hk_23.md:20 side/direction of object a1 vs reference vector, normal from off_20EC6DC/6E0, sets a1[42], writes scaled a1+4..6 [REVIEW]
- docs/function_notes/review_haiku1.md:118 Computes collision response direction from cross products
sub_20EC6E4
export/plan0/arm9_main/sub_20EC6E4_020EC6E4.c
- vm_model/src/mapobj/knock.rs:2 +0xA0..+0xB4 set by
sub_20EC854, launched bysub_20EC6E4when a star kart hits, stepped - vm_model/src/mapobj/knock.rs:27
sub_20EC6E4: the object's velocity when a kart (position, velocity, facing +0x50) - docs/function_notes.md:396 knock-away launch: sideways off the kart's facing (+0x50) on the side it passed, plus half the kart velocity, rise up
- docs/function_notes/NEEDS_REVIEW.md:764 alternate-side variant of sub_20EC538 using a2+20/22/41/43 for the normal; sets a1[42], writes a1+4..6 scaled by a1[45] [REVIEW]
- docs/function_notes/hk_23.md:21 alternate-side variant of sub_20EC538 using a2+20/22/41/43 for the normal; sets a1[42], writes a1+4..6 scaled by a1[45] [REVIEW]
sub_20EC7E8
export/plan0/arm9_main/sub_20EC7E8_020EC7E8.c
- vm_model/src/mapobj/knock.rs:3 by
sub_20EC7E8until the object drops below its floor. - vm_model/src/mapobj/knock.rs:46
sub_20EC7E8: one tick of flight; true once below the floor. - docs/function_notes.md:397 knock-away step: roll, gravity, move; true once below bottom
- docs/function_notes/hk_23.md:22 same step as sub_20EC490 but returns bool a1+8 < a1+160 without changing state.
sub_20EC854
export/plan0/arm9_main/sub_20EC854_020EC854.c
- vm_model/src/mapobj/knock.rs:2 +0xA0..+0xB4 set by
sub_20EC854, launched bysub_20EC6E4when a star kart hits, stepped - vm_model/src/mapobj/knock.rs:22
sub_20EC854. - docs/function_notes.md:395 knock-away init (+0xA0 bottom, +0xA4 gravity, +0xA8 side, +0xAC roll, +0xAE roll speed, +0xB0 rise, +0xB4 speed)
- docs/function_notes/hk_23.md:23 setter for a 1-D step record: stores a2 at +160, a3 at +164, sets +168=1, +172=0, +174=a4, +176=a5, +180=a6.
sub_20EC884
export/plan0/arm9_main/sub_20EC884_020EC884.c
- vm_model/src/mapobj/knock.rs:55 An object run by the shared knock state machine (
sub_20EC884, states at0x020EC8B8's - docs/function_notes.md:398 shared knock state machine init (3 states: stand, knocked sub_20EC504/sub_20EC490, removed sub_20EC484)
- docs/function_notes/hk_23.md:24 registers callback table off_20EC8B8 via sub_2046BE8 (count 3, owner a1+128); sets a1+144=0, a1+146=1; returns 1.
sub_20EC8BC
export/plan0/arm9_main/sub_20EC8BC_020EC8BC.c
- docs/function_notes/hk_23.md:25 init for a 137-word object: flag from a5 into sub_20F1EA4(a1,-a2,a6), stores a1[133]=a2, a1[134]=a3, inits sub-object a1+135; returns 0.
sub_20EC918
export/plan0/arm9_main/sub_20EC918_020EC918.c
- vm_model/src/kart/blue_shell.rs:632 The route-run part shared by states 1 and 2 (
sub_20EC918). - vm_model/src/kart/blue_shell.rs:643
sub_20EC918: steer like a red shell while the countdown runs, then lay the spline - vm_model/src/kart/blue_shell.rs:649 (
sub_20EC918: the countdown also runs in the air because the shell hugs the ground) - vm_model/src/kart/red_shell.rs:43 The route run eases the path speed toward the cruise speed by 41/4096 (
sub_20F5978:sub_20EC918(item, 0xD000, 0x29, ...)). - vm_model/src/kart/red_shell.rs:140 State 3 (
sub_20F5978/sub_20EC918). - docs/function_notes.md:508 route run step shared by red and blue shells: while the +532 countdown is >= 0 call sub_20ECE1C (route steering) and decrement (also in the air for ground-hugging shells); at 0 call sub_20ED0F4 (lay the spline) and set -1
sub_20EC9C0
export/plan0/arm9_main/sub_20EC9C0_020EC9C0.c
- vm_model/src/kart/blue_shell.rs:79 spline (
sub_20EC9C0); only its timing and speed are modelled. - vm_model/src/kart/blue_shell.rs:84 The route spline (
sub_20EC9C0): a Bezier segment through a ring of four points, progress in - vm_model/src/kart/blue_shell.rs:727
sub_20EC9C0(spline mode): progress along the segment, onto the next node when it ends, the - vm_model/src/kart/blue_shell.rs:1013
sub_20EC9C0's progress: along the segment, onto the next node when it ends (sub_20F371Cchasingchase - vm_model/src/kart/red_shell.rs:17 Not ported: the end of the route countdown (
sub_20ED0F4/sub_20EC9C0, reached only if - vm_model/src/kart/red_shell.rs:236
sub_20EC9C0in a race shell (free-flight flag 0, walls break it): the speed eases, the spline moves on
sub_20ECE1C
export/plan0/arm9_main/sub_20ECE1C_020ECE1C.c
- vm_model/src/kart/blue_shell.rs:223 route steering (
sub_20ECE1C) runs these first ticks. - vm_model/src/kart/blue_shell.rs:662 The first ticks of the route run: the red shell's route steering (
sub_20ECE1C) with this - vm_model/src/kart/red_shell.rs:33 Route steering (
sub_20ECE1C): turn rate, and when the target node is behind. - vm_model/src/kart/red_shell.rs:228
sub_20ECE1C: move, then steer toward the next route node. - vm_model/src/kart/red_shell.rs:282 30 units above it (
sub_20ECE1C's first lines). - docs/function_notes.md:509 route steering: move (sub_20F2228), lift a ground-hugging airborne shell to owner y (+0x9C) + 30 units, advance the route cursor (sub_20F3BB4/sub_20F371C), turn the heading toward the next node with sub_20EACC0 (rate 328, 614 if the node is behind, scaled by 4096 - countdown*scale) and set direction/velocity with sub_20F1D70
sub_20ED0F4
export/plan0/arm9_main/sub_20ED0F4_020ED0F4.c
- vm_model/src/kart/blue_shell.rs:219 once the steering is over (
sub_20ED0F4). - vm_model/src/kart/blue_shell.rs:720
sub_20ED0F4+sub_20F4020: the spline starts at the shell with the current heading, leaning - vm_model/src/kart/red_shell.rs:17 Not ported: the end of the route countdown (
sub_20ED0F4/sub_20EC9C0, reached only if - vm_model/src/kart/red_shell.rs:107 The route spline (+0x170..) laid when the steering countdown ends (
sub_20ED0F4). - vm_model/src/kart/red_shell.rs:147
sub_20ED0F4: the spline is laid once the heading is within 0.866 of the node's direction
sub_20ED268
export/plan0/arm9_main/sub_20ED268_020ED268.c
- vm_model/src/kart/blue_shell.rs:87 The countdown of route steering before the spline takes over (
sub_20ED268arg 3). - vm_model/src/kart/hand.rs:103 Red shell route setup (
sub_20F5D6Cviasub_20ED268): route countdown and its turn ramp. - game/src/items.rs:64 A thrown blue shell starts at 6 units a tick (
sub_20ED268's lean speed 24576).
sub_20ED490
export/plan0/arm9_main/sub_20ED490_020ED490.c
- docs/function_notes/hk_23.md:26 Thumb, heap-allocates a 108-byte object, fills it from resource lookup sub_20ED548(a1) via sub_2084E28, then sub_2084968 with dword_20ED4CC.
sub_20ED4D0
export/plan0/arm9_main/sub_20ED4D0_020ED4D0.c
- docs/function_notes.md:1609 heap-allocates a 44-byte object, initialises it from two resources (sub_20ED548 of a1 and a2) via sub_20E64B8, then sets the flag words at +16 and +20 from the constants
- docs/function_notes/NEEDS_REVIEW.md:765 Thumb, heap-allocates a 44-byte object, initialises from two resource IDs via sub_20ED548 and sub_20E64B8, sets flag bits in +20 and +16 [REVIEW]
- docs/function_notes/hk_23.md:27 Thumb, heap-allocates a 44-byte object, initialises from two resource IDs via sub_20ED548 and sub_20E64B8, sets flag bits in +20 and +16 [REVIEW]
sub_20ED548
export/plan0/arm9_main/sub_20ED548_020ED548.c
- docs/function_notes.md:1607 Thumb resource lookup: index 0 returns 0; otherwise fills a 264-byte buffer with sub_2135048 (table dword_20ED570 / off_20ED574) and returns sub_2047B08 of it
- docs/function_notes/NEEDS_REVIEW.md:766 Thumb, resource lookup: index 0 returns 0, else sub_2135048 on table dword_20ED570/off_20ED574, then sub_2047B08 [REVIEW]
- docs/function_notes/hk_23.md:28 Thumb, resource lookup: index 0 returns 0, else sub_2135048 on table dword_20ED570/off_20ED574, then sub_2047B08 [REVIEW]
sub_20ED578
export/plan0/arm9_main/sub_20ED578_020ED578.c
- docs/function_notes/hk_23.md:29 table lookup returning off_20ED584[a1] (thin accessor).
sub_20ED588
export/plan0/arm9_main/sub_20ED588_020ED588.c
- docs/function_notes/hk_23.md:30 thin wrapper: calls sub_20E6A18(a2) then sub_20E6854(a2, a1+80, 1, 0x1F).
sub_20ED5C0
export/plan0/arm9_main/sub_20ED5C0_020ED5C0.c
- game/src/items.rs:1465 sub_20ED5C0: full camera billboard on level ground; the sloped
- docs/function_notes.md:259 shared item draw with alpha +216 and animated scale +104..112; floor normal Y <4014 or actor flag 0x80 selects normal/camera cross-product billboard basis, otherwise shared camera billboard with translated position
- docs/function_notes/NEEDS_REVIEW.md:767 per-object draw/update: sets bits 16-20 of a2+20 from a1+216, updates a1+172 velocity and a1+184..192, then sub_20E67C4 draw [REVIEW]
- docs/function_notes/hk_23.md:31 per-object draw/update: sets bits 16-20 of a2+20 from a1+216, updates a1+172 velocity and a1+184..192, then sub_20E67C4 draw [REVIEW]
sub_20ED718
export/plan0/arm9_main/sub_20ED718_020ED718.c
- docs/function_notes/hk_23.md:32 loops object list (v3[1], count v3[16]), skips flag 0x10000, calls sub_208AB4C on a sub-pointer, then callback a3 with off_20ED798 entry.
sub_20ED79C
export/plan0/arm9_main/sub_20ED79C_020ED79C.c
- docs/function_notes.md:1633 batch version of sub_20ED5C0 over an object list (count at a1[4], array at a1[1]): sets the object flags at off_20ED984[*a1]+20 (bits 0xC0FFFFFF and 0x4000000) and runs the per-object update for entries without flag 0x10000
- docs/function_notes/NEEDS_REVIEW.md:768 batch version of sub_20ED5C0 over an object list (a1[1], count a1[4]); binds model via off_20ED984[*a1], then tail-calls a callback [REVIEW]
- docs/function_notes/hk_23.md:33 batch version of sub_20ED5C0 over an object list (a1[1], count a1[4]); binds model via off_20ED984[*a1], then tail-calls a callback [REVIEW]
sub_20ED98C
export/plan0/arm9_main/sub_20ED98C_020ED98C.c
- docs/function_notes.md:1615 update core of sub_20ED5C0 without drawing: returns sub_20E6B94 early when +244 >= dword_20EDA58; otherwise copies the vector a2 into +172..+180, computes +240 with sub_20397A8, normalises +148 when its squared length is at least 16, and writes the scaled values (>> 4) at +184..+192
- docs/function_notes/NEEDS_REVIEW.md:769 update core of sub_20ED5C0 without draw: early return sub_20E6B94 when a1+244 >= dword_20EDA58; else sets a1+172 from a2, normalises a1+148/160 [REVIEW]
- docs/function_notes/hk_23.md:34 update core of sub_20ED5C0 without draw: early return sub_20E6B94 when a1+244 >= dword_20EDA58; else sets a1+172 from a2, normalises a1+148/160 [REVIEW]
sub_20EDA5C
export/plan0/arm9_main/sub_20EDA5C_020EDA5C.c
- game/src/items.rs:1371 a destroyed held item leaves its kart's hand (
sub_20EDA5C): the last ones first so the indices stay valid - docs/function_notes.md:1610 searches the member list a1+20 (count at +32) for object a2; when found calls the callback off_20EDAD4[+8]; when the count reaches zero returns sub_20EE6A8(a1)
- docs/function_notes/NEEDS_REVIEW.md:770 searches member list a1+20 (count a1[8]) for object a2; if found runs state handler off_20EDAD4[a1[2]], then sub_20EE6A8 when list empties [REVIEW]
- docs/function_notes/hk_23.md:35 searches member list a1+20 (count a1[8]) for object a2; if found runs state handler off_20EDAD4[a1[2]], then sub_20EE6A8 when list empties [REVIEW]
sub_20EDAD8
export/plan0/arm9_main/sub_20EDAD8_020EDAD8.c
- docs/function_notes/hk_23.md:36 sets a1[9]=10 (timer); if a1[92] set, writes owner state 19 to a1[3]+20 and clears a1[92].
sub_20EDB00
export/plan0/arm9_main/sub_20EDB00_020EDB00.c
- docs/function_notes.md:1612 cleanup: removes every member via sub_20F0F70, calls sub_20EE6A8(a1), and when a1[92] is set sets the owner state to 19 and clears a1[92]
- docs/function_notes/NEEDS_REVIEW.md:771 cleanup: removes all members (sub_20F0F70 on 68-byte entries from off_20EDB88), resets via sub_20EE6A8, clears a1[92], sets owner state 19 [REVIEW]
- docs/function_notes/hk_23.md:37 cleanup: removes all members (sub_20F0F70 on 68-byte entries from off_20EDB88), resets via sub_20EE6A8, clears a1[92], sets owner state 19 [REVIEW]
sub_20EDB8C
export/plan0/arm9_main/sub_20EDB8C_020EDB8C.c
- vm_model/src/kart/hand.rs:76 kart's movement (
sub_20EDC9C); backward base speed and lean (sub_20EDB8C). - vm_model/src/kart/hand.rs:397
sub_20EDC9C(forward, base speedbase) /sub_20EDB8C(backward): the speed and the flat unit - vm_model/src/kart/hand.rs:524 sub_20EDB8C
sub_20EDC9C
export/plan0/arm9_main/sub_20EDC9C_020EDC9C.c
- vm_model/src/kart/hand.rs:61 Forward throws weight the kart's forward axis by 7 when aiming (
sub_20EDC9C:28672 x forward >> 12), add 1.7 x the - vm_model/src/kart/hand.rs:76 kart's movement (
sub_20EDC9C); backward base speed and lean (sub_20EDB8C). - vm_model/src/kart/hand.rs:397
sub_20EDC9C(forward, base speedbase) /sub_20EDB8C(backward): the speed and the flat unit - game/src/items.rs:929
sub_20F2B94->sub_20EDC9C(kart, 24576, ...): the kart's motion adds to the base speed and bends the direction
sub_20EDDB4
export/plan0/arm9_main/sub_20EDDB4_020EDDB4.c
- docs/function_notes.md:1627 per-frame state machine for a member-list object: when sub_20EE528 passes applies sub_20F9F08 to each member; calls the state callback off_20EDF08[state] and sub_20EDF10; when the count is zero calls sub_20EE6A8; then counts down a1[9] and drops members when it reaches 8, 4 or 0
- docs/function_notes/NEEDS_REVIEW.md:772 per-frame state machine for a member-list object: optional sub_20F9F08 on members, dispatch off_20EDF08[0][a1[2]], sub_20EDF10, timer a1[9] pops last member [REVIEW]
- docs/function_notes/hk_23.md:38 per-frame state machine for a member-list object: optional sub_20F9F08 on members, dispatch off_20EDF08[0][a1[2]], sub_20EDF10, timer a1[9] pops last member [REVIEW]
sub_20EDF10
export/plan0/arm9_main/sub_20EDF10_020EDF10.c
- vm_model/src/kart/item_contact.rs:1 Item-versus-item contact (
sub_20EDF10->sub_20EE160->sub_20F77F8): every item a slot owns is tested - game/src/items.rs:1272 Item versus item (
sub_20EDF10->sub_20EE160): shells, bananas, fake boxes, bombs and diving blue shells that - docs/function_notes.md:1636 per-frame proximity/collision pass over the members: for each member increments its counter at +284, transforms its position (sub_21484D0 with a2 at +80), and updates its flags and the speed fields from sub_206C0A8 / sub_206C094 of the owner
- docs/function_notes/NEEDS_REVIEW.md:773 per-frame proximity/collision pass over members: updates flags (0x80/0x40000/0x10000) in +29, tests members vs off_20EE150/154/158, calls sub_20EE160 [REVIEW]
- docs/function_notes/hk_23.md:39 per-frame proximity/collision pass over members: updates flags (0x80/0x40000/0x10000) in +29, tests members vs off_20EE150/154/158, calls sub_20EE160 [REVIEW]
sub_20EE160
export/plan0/arm9_main/sub_20EE160_020EE160.c
- vm_model/src/kart/item_contact.rs:1 Item-versus-item contact (
sub_20EDF10->sub_20EE160->sub_20F77F8): every item a slot owns is tested - vm_model/src/kart/item_contact.rs:77
sub_20EE160's test: the hit spheres overlap now, or each item is within reach of the other's previous position. - vm_model/src/kart/item_contact.rs:156 Both sides of one overlapping pair (
sub_20EE160): each side's response to the other.Nonewhen the items do - game/src/items.rs:1272 Item versus item (
sub_20EDF10->sub_20EE160): shells, bananas, fake boxes, bombs and diving blue shells that - docs/function_notes.md:1622 pairwise collision resolve of objects a1 and a2: when the flag 0x1000 test passes and sub_20EE284 hits either sphere of a2, computes the two contact indices with sub_20F7EA8 and calls sub_20F77F8 on each object; for a2 state 1 also calls sub_20F5614
- docs/function_notes.md:1680 > sub_20F77F8: this is ITEM-vs-ITEM pairwise contact (two item objects overlap, a2 = contact index from sub_20F7EA8), not kart contact; its +292 callback (banana: sub_20F6830 wobble) fires when another item touches a banana from outside. Karts hit items through sub_20FA4C8 / sub_206D18C (already ported). Banana::nudge therefore belongs to a future item-item collision port (shells/bananas/bombs destroying each other)
- docs/function_notes/NEEDS_REVIEW.md:774 pairwise collision resolve of objects a1/a2: sphere test sub_20EE284, relative velocities via sub_20F7EA8, impulses via sub_20F77F8, optional sub_20F5614 [REVIEW]
- docs/function_notes/hk_23.md:40 pairwise collision resolve of objects a1/a2: sphere test sub_20EE284, relative velocities via sub_20F7EA8, impulses via sub_20F77F8, optional sub_20F5614 [REVIEW]
sub_20EE284
export/plan0/arm9_main/sub_20EE284_020EE284.c
- docs/function_notes/hk_23.md:41 sphere-overlap test: squared distance between a1+20..22 and a2 vs (a3+a1[56])^2; returns bool.
sub_20EE2E4
export/plan0/arm9_main/sub_20EE2E4_020EE2E4.c
- vm_model/src/kart/hand.rs:6 (
sub_20EE2E4) places it behind the kart (sub_20EF9A8) with the kart's velocity; while held, - vm_model/src/kart/hand.rs:270
sub_20EE2E4/sub_20EF9A8: take a new item, straight behind the kart, moving with it.
sub_20EE528
export/plan0/arm9_main/sub_20EE528_020EE528.c
- vm_model/src/kart/hand.rs:5 Each tick the slot refreshes its view of the kart (
sub_20EE528). Picking up an item - vm_model/src/kart/hand.rs:107 What the item slot reads from its kart each tick (
sub_20EE528). - vm_model/src/kart/hand.rs:246
sub_20EE528: refresh from the kart.
sub_20EE684
export/plan0/arm9_main/sub_20EE684_020EE684.c
- docs/function_notes/hk_23.md:42 init: stores a2 at a1+12, a2[508] at a1+16, 16-bit a2[504] at a1+40, then tail-calls off_20EE6A4(a1).
sub_20EE6A8
export/plan0/arm9_main/sub_20EE6A8_020EE6A8.c
- docs/function_notes/hk_23.md:43 reset of member-list object: a[0]=15, a[1]=19, a[2]=5, zeroes a[5..7], a[8]=0, a[9]=0.
sub_20EE6E8
export/plan0/arm9_main/sub_20EE6E8_020EE6E8.c
- docs/function_notes/hk_23.md:44 removes list entry a2 by swapping it with the last member (pointer array +20, 16-bit array +396), then calls sub_20EFA48.
sub_20EE748
export/plan0/arm9_main/sub_20EE748_020EE748.c
- vm_model/src/kart/hand.rs:164 Triple shells orbit the kart (
sub_20EE748): the angle (+0x174) and its speed (+0x176), the orbit's radius (+0x178), - vm_model/src/kart/hand.rs:365
sub_20EE748/sub_20EEA6C: triple shells circle the kart. The angle turns by a speed that ramps up to 1400 plus - game/src/items.rs:693 triple shells circle the kart (
sub_20EE748) - docs/function_notes.md:558 orbiting triple-shell handler: angle +0x174 += spin (+0x176, +70 a tick up to 1400, 0 while the kart is damaged) + min(480speed>>16, 300); bob +0x17C spring; radius +0x178 eases 0.2 toward reach + 3size; centre +0x180 = position + up(bob - bounce + 4.2size); then sub_20EEA6C; throws on (record+492 & 0x244)==0x244
- docs/function_notes/NEEDS_REVIEW.md:775 per-frame update for a kart-like object: speed/timer +372/+374 (cap 300), integrates +376/+380, sub_2147FD8 into +384, sub_20EEA6C [REVIEW]
- docs/function_notes/hk_23.md:45 per-frame update for a kart-like object: speed/timer +372/+374 (cap 300), integrates +376/+380, sub_2147FD8 into +384, sub_20EEA6C [REVIEW]
sub_20EE9B0
export/plan0/arm9_main/sub_20EE9B0_020EE9B0.c
- docs/function_notes.md:1614 init of a kart-like object: zeroes the words at +376 and +380, sets the sub-struct +116 = 0 and +118 = 600, sets the three ids at +396.. to 0..2, applies sub_2147FD8 to the vectors a1+56 / a1+80 / a1+384, calls sub_20EEA6C, and sets state 23 via sub_20719BC when the id at +40 matches
- docs/function_notes/NEEDS_REVIEW.md:776 init of kart-like object: zeroes +372/+376/+380, sets ids 0..2 at +396, sub_2147FD8 on +384, sub_20EEA6C, sub_20719BC(...,231) [REVIEW]
- docs/function_notes/hk_23.md:46 init of kart-like object: zeroes +372/+376/+380, sets ids 0..2 at +396, sub_2147FD8 on +384, sub_20EEA6C, sub_20719BC(...,231) [REVIEW]
sub_20EEA6C
export/plan0/arm9_main/sub_20EEA6C_020EEA6C.c
- vm_model/src/kart/hand.rs:365
sub_20EE748/sub_20EEA6C: triple shells circle the kart. The angle turns by a speed that ramps up to 1400 plus - vm_model/src/kart/hand.rs:386 (
sub_20EEA6C: -1/2 and 0.866 = 3547/4096 of the offset's two parts) - docs/function_notes.md:559 places the orbiting shells: shell 0 at centre + forward(Rcos a) + side(Rsin a); shells 1/2 use mode word +0x18C+2i: forward scale (-Rc>>1) -/+ (Rs3547>>12), side scale (-Rs>>1) +/- (Rc*3547>>12) (a third of a turn either way)
- docs/function_notes/NEEDS_REVIEW.md:777 recomputes member transforms: scale from off_20EEC40 (index a1+372>>4), sub_2147FD8 per member offset from +384 and +80, tail-calls callback [REVIEW]
- docs/function_notes/hk_23.md:47 recomputes member transforms: scale from off_20EEC40 (index a1+372>>4), sub_2147FD8 per member offset from +384 and +80, tail-calls callback [REVIEW]
sub_20EEC48
export/plan0/arm9_main/sub_20EEC48_020EEC48.c
- docs/function_notes.md:1613 pops members down to a2 + 1 through sub_20EFA60(a1, 0), giving each removed member after the first a sub_2147FD8 impulse; returns sub_20EFA48(a1, a3)
- docs/function_notes/NEEDS_REVIEW.md:778 pops members down to a2+1 via sub_20EFA60(a1,0), offsetting removed members with sub_2147FD8 (step dword_20EECD8), then sub_20EFA48 [REVIEW]
- docs/function_notes/hk_23.md:48 pops members down to a2+1 via sub_20EFA60(a1,0), offsetting removed members with sub_2147FD8 (step dword_20EECD8), then sub_20EFA48 [REVIEW]
sub_20EECDC
export/plan0/arm9_main/sub_20EECDC_020EECDC.c
- vm_model/src/kart/hand.rs:7 a single item trails behind on a spring (
sub_20EF65C, fromsub_20EECDC) and its velocity - vm_model/src/kart/hand.rs:13 Two or three held items hang in a chain (
sub_20EECDC,ItemHand::hold_chain, replayed against a triple banana recording). - vm_model/src/kart/hand.rs:36 A chain (
sub_20EECDC): how far apart followers hang at most (3 sizes), the sway scale per follower - vm_model/src/kart/hand.rs:151 Chains of held items (
sub_20EECDC): how many items are held (+0x20), whether their velocities add up (+0x24), - vm_model/src/kart/hand.rs:298
sub_20EECDC: hold two or three items. The first hangs as a single item does (with the chain's softer bob); - game/src/items.rs:703 two or three items hang in a chain (
sub_20EECDC) - docs/function_notes.md:551 held-item chain update (called each tick for a kart's item hand when 1+ items are held): first item via sub_20EF65C, then each follower (2nd, 3rd) hangs from its own point: kart push (+0x1FC) added, sway from the change of the behind direction (x speed^2, x 6144i), a stretch counter (+0xCC) pushes it along the kart's movement, kept at least reach+4size (minus 2 sizes per follower) behind the kart, pulled to the previous point's height (x0.4), bobbing with the bob history 6 (12) ticks old, and clamped to 3size from the previous point; positions = point + up(swing + 4.2*size)
sub_20EF1CC
export/plan0/arm9_main/sub_20EF1CC_020EF1CC.c
- docs/function_notes.md:1628 (re)initialises the ~228-byte object record from the source objects a1+20 / a1+24: copies the vectors at a1+68/72/76 into +144..+152, their negations into +156..+164, and applies sub_2147FD8 / the rotate step to +168 and the next fields
- docs/function_notes/NEEDS_REVIEW.md:779 (re)initialises a ~228-byte object record from source objects a1+20/24/28: copies pos/vel, scaled offsets, zeroes a1+236..300 [REVIEW]
- docs/function_notes/hk_23.md:49 (re)initialises a ~228-byte object record from source objects a1+20/24/28: copies pos/vel, scaled offsets, zeroes a1+236..300 [REVIEW]
sub_20EF350
export/plan0/arm9_main/sub_20EF350_020EF350.c
- docs/function_notes.md:1626 per-frame wrapper: calls sub_20EF4A0; when the owner flag 0x1000 is set computes the scaled vector from a1[39..41] with sub_2148504 and the normalise step, stores its negation at v2[43..45] and the position at v2[40..42], then sub_20397A8
- docs/function_notes/NEEDS_REVIEW.md:780 per-frame wrapper: calls sub_20EF4A0; if owner flag 0x1000 set integrates a1[39..41] into owner orientation; tail-calls off_20EF49C handler [REVIEW]
- docs/function_notes/hk_23.md:50 per-frame wrapper: calls sub_20EF4A0; if owner flag 0x1000 set integrates a1[39..41] into owner orientation; tail-calls off_20EF49C handler [REVIEW]
sub_20EF4A0
export/plan0/arm9_main/sub_20EF4A0_020EF4A0.c
- docs/function_notes.md:553 per-item update of a held item (spring via sub_20EF65C, size growth, release on the button, finishing when +368 is set)
- docs/function_notes/NEEDS_REVIEW.md:781 per-frame update for a kart-like object: sub_20EF65C on a1+168, sub_20F9F08 when speed >12, sub_20719BC on counter threshold, ORs flags into owner +492 [REVIEW]
- docs/function_notes/hk_23.md:51 per-frame update for a kart-like object: sub_20EF65C on a1+168, sub_20F9F08 when speed >12, sub_20719BC on counter threshold, ORs flags into owner +492 [REVIEW]
sub_20EF65C
export/plan0/arm9_main/sub_20EF65C_020EF65C.c
- vm_model/src/kart/hand.rs:7 a single item trails behind on a spring (
sub_20EF65C, fromsub_20EECDC) and its velocity - vm_model/src/kart/hand.rs:279
sub_20EF65Cfor a single item (in the kart's item update): lean back with the kart's - docs/function_notes.md:552 single-item hold spring (anchor behind the kart, bob spring 0.82/0.41, or 0.2/0.15 when 2+ items are held); the hand struct is the item record at +0x58
sub_20EF8C4
export/plan0/arm9_main/sub_20EF8C4_020EF8C4.c
- docs/function_notes.md:1616 updates the object transform: copies a1[17..19] into a1[36..38] (negated into a1[39..41]), applies sub_2147FD8 twice, writes a1[14..16] and the negated vectors into the matrix at v2[40..45], and returns sub_20397A8 of the result
- docs/function_notes/NEEDS_REVIEW.md:782 updates object transform: copies a1[17..19] to a1[36..38] (negated to a1[39..41]), integrates via sub_2147FD8, writes owner+160 via sub_20397A8 [REVIEW]
- docs/function_notes/hk_23.md:52 updates object transform: copies a1[17..19] to a1[36..38] (negated to a1[39..41]), integrates via sub_2147FD8, writes owner+160 via sub_20397A8 [REVIEW]
sub_20EF9A8
export/plan0/arm9_main/sub_20EF9A8_020EF9A8.c
- vm_model/src/kart/hand.rs:6 (
sub_20EE2E4) places it behind the kart (sub_20EF9A8) with the kart's velocity; while held, - vm_model/src/kart/hand.rs:270
sub_20EE2E4/sub_20EF9A8: take a new item, straight behind the kart, moving with it.
sub_20EFA48
export/plan0/arm9_main/sub_20EFA48_020EFA48.c
- docs/function_notes/hk_23.md:53 decrements member count a1+32 and tail-calls off_20EFA5C(a1,a2).
sub_20EFA60
export/plan0/arm9_main/sub_20EFA60_020EFA60.c
- vm_model/src/kart/hand.rs:8 is the change in position. Releasing it (
sub_20EFA60) runs the type's throw: green shells - game/src/items.rs:765 the oldest of a triple leaves first (
sub_20EFA60pops the last of the chain) - docs/function_notes.md:560 release one held item: pops the LAST of the hand's objects (the oldest), runs the type's throw/drop handler (item table +36), re-arms the slot; triple items are released one per button PRESS, single items on release
sub_20EFB84
export/plan0/arm9_main/sub_20EFB84_020EFB84.c
- docs/function_notes/hk_23.md:54 detaches object a2: sub_20F0EA0 on its 68-byte table entry (off_20EFBD0), sub_20EFD1C(owner,a2), clears bit 0x1000 in a2+116.
sub_20EFBD4
export/plan0/arm9_main/sub_20EFBD4_020EFBD4.c
- docs/function_notes.md:1611 constructor for a per-kart object: stores the id a2, sub_207A974(a2) at dword_20EFC50, initialises three sub-objects (sub_20F89B0, sub_20F4B20, sub_20EE684) and clears the state words
- docs/function_notes/NEEDS_REVIEW.md:783 Thumb, constructor for a per-kart object: stores id, fields from sub_207A974 and table off_20EFC54; calls sub_20F89B0, sub_20F4B20, sub_20EE684 [REVIEW]
- docs/function_notes/hk_23.md:55 Thumb, constructor for a per-kart object: stores id, fields from sub_207A974 and table off_20EFC54; calls sub_20F89B0, sub_20F4B20, sub_20EE684 [REVIEW]
sub_20EFC74
export/plan0/arm9_main/sub_20EFC74_020EFC74.c
- vm_model/src/kart/blue_shell.rs:1475 The leader's route node follows
Route::trackonce every 8 frames (sub_20EFC74, kart 4's turn is - vm_model/src/kart/route.rs:151
sub_20EFC74: one update of a kart's route node (item record +496): the nearby search, then the walk - game/src/items.rs:166 The item route node the kart is on (item record +496), updated every 8th tick (
sub_20EFC74). - game/src/items.rs:437 each kart's route node: its own turn once every 8 ticks (
sub_20EFC74), the nearest node to start with - docs/function_notes.md:539 per-kart item route node update (item record +496/+500; once every 8 frames per kart): override from sub_20F4090, else sub_20F3C54 (nearest node within two links), then sub_20F3A58 (walk ahead) if the kart is more than 1200 units flat from the node
- docs/function_notes/NEEDS_REVIEW.md:784 nearest-target update: sub_20F4090(a2) fills a1[124]; if valid, compares squared distance to a1[127]+152 vs dword_20EFD18, may call sub_20F3A58 [REVIEW]
- docs/function_notes/hk_23.md:56 nearest-target update: sub_20F4090(a2) fills a1[124]; if valid, compares squared distance to a1[127]+152 vs dword_20EFD18, may call sub_20F3A58 [REVIEW]
sub_20EFD1C
export/plan0/arm9_main/sub_20EFD1C_020EFD1C.c
- docs/function_notes.md:1608 sets up object a2 from the owner a1 (kart at +508): uses the path table at owner+348 when the owner flag 1 is set, else off_20EFD80; calls sub_20F98A0 with sub_206C0A8(owner), sets flag 0x40000000 on a2 when the owner flag 1 is set
- docs/function_notes/NEEDS_REVIEW.md:785 sets up object a2 from owner a1 (+508): path table owner+348 or off_20EFD80 by flag bit 0, sub_20F98A0; ORs 0x40000000 into a2+116 [REVIEW]
- docs/function_notes/hk_23.md:57 sets up object a2 from owner a1 (+508): path table owner+348 or off_20EFD80 by flag bit 0, sub_20F98A0; ORs 0x40000000 into a2+116 [REVIEW]
sub_20EFD84
export/plan0/arm9_main/sub_20EFD84_020EFD84.c
- docs/function_notes.md:1621 state transition helper for entry a1 to status a2: returns 1 when a2 == 19; otherwise sets a1[5] = 19 and, depending on the old status, either returns after decrementing the count at the slot table or calls sub_20F8418 and sub_20F47E4; finishes with sub_20F4754 and returns whether the status is 19
- docs/function_notes/NEEDS_REVIEW.md:786 state transition helper for entry a1 to status a2: returns 1 if a2==19; sets a1[5]=19; may decrement a table counter; calls sub_20F4754 [REVIEW]
- docs/function_notes/hk_23.md:58 state transition helper for entry a1 to status a2: returns 1 if a2==19; sets a1[5]=19; may decrement a table counter; calls sub_20F4754 [REVIEW]
sub_20EFEA4
export/plan0/arm9_main/sub_20EFEA4_020EFEA4.c
- docs/function_notes/hk_23.md:59 if owner state (+668) not in 2..3 or 5, a1[22]!=15, a1[31]==0 and a1[24] is 1 or 2, calls sub_20EDAD8(a1+22); otherwise returns a1.
sub_20EFF40
export/plan0/arm9_main/sub_20EFF40_020EFF40.c
- docs/function_notes.md:1618 per-frame state update for an entry under owner a1: reads the owner's record at a1[127] (flag 0x400 at +124, state at +668); when the owner's mode is not 5 calls sub_20F81C0, then updates the item fields +22 and +31
- docs/function_notes/NEEDS_REVIEW.md:787 per-frame state update for an entry under owner a1[127]: if owner flag 0x400 clear and state not 2..3, runs sub_20F41B0 / sub_20F81C0 / sub_20EDAD8 [REVIEW]
- docs/function_notes/hk_23.md:60 per-frame state update for an entry under owner a1[127]: if owner flag 0x400 clear and state not 2..3, runs sub_20F41B0 / sub_20F81C0 / sub_20EDAD8 [REVIEW]
sub_20F0044
export/plan0/arm9_main/sub_20F0044_020F0044.c
- docs/function_notes.md:740 per-frame racer-item update: when owner flag 0x400 is clear, calls sub_20F45F0 when a1[12] != 19, sub_20F81C0 when a1[0] is set, sets a1[5] = 19, then sub_20EDB00(a1+22) (skipped in game state 5)
- docs/function_notes/NEEDS_REVIEW.md:788 per-frame: if owner flag 0x400 clear, sub_20F45F0 when a1[12]!=19, sub_20F81C0 when a1[0] set, sets a1[5]=19, then sub_20EDB00(a1+22) [REVIEW]
- docs/function_notes/hk_23.md:61 per-frame: if owner flag 0x400 clear, sub_20F45F0 when a1[12]!=19, sub_20F81C0 when a1[0] set, sets a1[5]=19, then sub_20EDB00(a1+22) [REVIEW]
sub_20F00F0
export/plan0/arm9_main/sub_20F00F0_020F00F0.c
- docs/function_notes/hk_23.md:62 conditional release: if owner flag 0x400 clear, state not 5 and a1[0] set, tail-calls sub_20F81C0(a1); otherwise returns a1.
sub_20F0154
export/plan0/arm9_main/sub_20F0154_020F0154.c
- docs/function_notes.md:741 availability check: returns 0 when sub_2061FEC fails, when the owner (kart +508) has +384 set, or owner +76 has flag 0x20000000; otherwise ORs status bits into a1+492 and returns 1
- docs/function_notes/NEEDS_REVIEW.md:789 availability/flags check: returns 0 if sub_2061FEC fails, owner+384 set, or owner+76 bit 0x20000000; else ORs status bits into a1+492; returns 1 [REVIEW]
- docs/function_notes/hk_23.md:63 availability/flags check: returns 0 if sub_2061FEC fails, owner+384 set, or owner+76 bit 0x20000000; else ORs status bits into a1+492; returns 1 [REVIEW]
sub_20F02C0
export/plan0/arm9_main/sub_20F02C0_020F02C0.c
- docs/function_notes.md:742 constructor for a pooled object group from table off_20F03B8 (stride 168): allocates the pointer array (count at +12) and the members, copies the parameters into the group
- docs/function_notes/NEEDS_REVIEW.md:790 Thumb, constructor for a pooled object group from type table off_20F03B8 (stride 168): allocates pointer array and members, copies params to +3..+15 [REVIEW]
- docs/function_notes/hk_23.md:64 Thumb, constructor for a pooled object group from type table off_20F03B8 (stride 168): allocates pointer array and members, copies params to +3..+15 [REVIEW]
sub_20F03BC
export/plan0/arm9_main/sub_20F03BC_020F03BC.c
- docs/function_notes/hk_23.md:65 if a1+20 > 0 calls sub_20F0F70(a1) and returns 1; otherwise returns 0 (remove-one helper).
sub_20F03F8
export/plan0/arm9_main/sub_20F03F8_020F03F8.c
- docs/function_notes.md:743 per-frame slot/item update over the list a1[1] (count a1[5]): when near full runs sub_2061F90 and the sub_20F0684 reorder; in state 5 applies the timed flags
- docs/function_notes/NEEDS_REVIEW.md:791 per-frame slot/item update over list a1[1] (count a1[5]): near-full case runs sub_2061F90 / sub_20F0684 reorder; state 5 applies timed flags [REVIEW]
- docs/function_notes/hk_23.md:66 per-frame slot/item update over list a1[1] (count a1[5]): near-full case runs sub_2061F90 / sub_20F0684 reorder; state 5 applies timed flags [REVIEW]
sub_20F0684
export/plan0/arm9_main/sub_20F0684_020F0684.c
- docs/function_notes.md:744 priority reorder of a pointer list between indices a2 and a3 (step a4), swapping entries by the masks in off_20F0754 and the tests of sub_20F9C08
- docs/function_notes/NEEDS_REVIEW.md:792 priority reorder of a pointer list between indices a2 and a3 (step a4), swapping entries by masks in off_20F0754 and sub_20F9C08 tests [REVIEW]
- docs/function_notes/hk_23.md:67 priority reorder of a pointer list between indices a2 and a3 (step a4), swapping entries by masks in off_20F0754 and sub_20F9C08 tests [REVIEW]
sub_20F0758
export/plan0/arm9_main/sub_20F0758_020F0758.c
- docs/function_notes.md:745 event router on type a2: 0 and 1 call sub_20F0B00 (type 0 with state checks), 2 calls sub_20F0950, 3 calls sub_20F0898, others call sub_20FE56C
- docs/function_notes/NEEDS_REVIEW.md:793 event router on type a2 (0..3): 0 -> sub_20F0B00 with state checks; 1 -> sub_20F0B00; 2 -> sub_20F0950; 3 -> sub_20F0898, else sub_20FE56C [REVIEW]
- docs/function_notes/hk_23.md:68 event router on type a2 (0..3): 0 -> sub_20F0B00 with state checks; 1 -> sub_20F0B00; 2 -> sub_20F0950; 3 -> sub_20F0898, else sub_20FE56C [REVIEW]
sub_20F0898
export/plan0/arm9_main/sub_20F0898_020F0898.c
- docs/function_notes.md:746 loops the list a1[1] (count a1[5]); entries whose +78 equals a2[1] are dispatched by type *a1 (1 -> sub_20F5CC4, 5 -> sub_20FC8EC, 11 -> sub_21003E8, and others)
- docs/function_notes/NEEDS_REVIEW.md:794 loops list a1[1] (count a1[5]); entries with +78 == a2[1] dispatch by type *a1: 1->sub_20F5CC4, 5->sub_20FC8EC, 11->sub_21003E8 [REVIEW]
- docs/function_notes/hk_23.md:69 loops list a1[1] (count a1[5]); entries with +78 == a2[1] dispatch by type *a1: 1->sub_20F5CC4, 5->sub_20FC8EC, 11->sub_21003E8 [REVIEW]
sub_20F0950
export/plan0/arm9_main/sub_20F0950_020F0950.c
- docs/function_notes.md:747 loops the list for entries with +78 == a3; scales their velocity +92..+100 by dword_20F0AFC, then switches on the low nibble of a2 and calls sub_20F710
- docs/function_notes.md:1653 > sub_20F5324: red shell state 5 (final approach, sub_20F572C) is entered only from this item-event router (network message type 3), never from local play
- docs/function_notes/NEEDS_REVIEW.md:795 loops list (count a1[5]) for entries with +78 == a3; scales velocity +92..100 by dword_20F0AFC, then switch on low nibble calling sub_20F7104..sub_20F7430 [REVIEW]
- docs/function_notes/hk_23.md:70 loops list (count a1[5]) for entries with +78 == a3; scales velocity +92..100 by dword_20F0AFC, then switch on low nibble calling sub_20F7104..sub_20F7430 [REVIEW]
sub_20F0B00
export/plan0/arm9_main/sub_20F0B00_020F0B00.c
- docs/function_notes.md:748 activates entry a2 from pool a1: moves it into the active section (a1[5]++), calls sub_20F9054, increments a1[7], sets flags 0x2000 and 0x20000000 in +116, and runs the type callback
- docs/function_notes/NEEDS_REVIEW.md:796 activates entry a2 from pool a1: moves it into the active section (a1[5]++), sub_20F9054, sets bits 0x2000/0x20000000 in +116, runs type callbacks [REVIEW]
- docs/function_notes/hk_23.md:71 activates entry a2 from pool a1: moves it into the active section (a1[5]++), sub_20F9054, sets bits 0x2000/0x20000000 in +116, runs type callbacks [REVIEW]
sub_20F0D04
export/plan0/arm9_main/sub_20F0D04_020F0D04.c
- docs/function_notes.md:749 deactivates entry a1: when +120 & 0xF00 is set runs sub_20FE4C0/sub_20FE4B4 and the effect teardown (sub_20F70F0 for 0x800, sub_20F705C for 0x400, sub_20F7600 for 0x200); otherwise runs the type callbacks in off_20F0DF4; sets flag 0x20000000
- docs/function_notes/NEEDS_REVIEW.md:797 deactivates entry a1: if +120 & 0xF00 runs sub_20FE4C0/sub_20FE4B4 and effect teardown; else type callbacks off_20F0DF4; sets bit 0x20000000 [REVIEW]
- docs/function_notes/hk_23.md:72 deactivates entry a1: if +120 & 0xF00 runs sub_20FE4C0/sub_20FE4B4 and effect teardown; else type callbacks off_20F0DF4; sets bit 0x20000000 [REVIEW]
sub_20F0DF8
export/plan0/arm9_main/sub_20F0DF8_020F0DF8.c
- docs/function_notes/hk_23.md:73 dispatcher: if a1[9] callback is set calls sub_20ED718(a1,a2,cb), else sub_20ED79C(a1,a2).
sub_20F0E2C
export/plan0/arm9_main/sub_20F0E2C_020F0E2C.c
- docs/function_notes/hk_23.md:74 appends object a2 to active list a1[1] at index a1[6] (swap into place), incrementing a1[6] if not already present.
sub_20F0EA0
export/plan0/arm9_main/sub_20F0EA0_020F0EA0.c
- docs/function_notes.md:750 moves object a2 into the inactive region (swap at a1[5], a1[5]++), sets flag 0x2000 in +116 and calls the type callback off_20F0F6C
- docs/function_notes/NEEDS_REVIEW.md:798 deactivates/moves object a2 into the inactive region (swap at a1[5], a1[5]++), sets bit 0x2000 in +116, calls type callback off_20F0F6C (+28) [REVIEW]
- docs/function_notes/hk_23.md:75 deactivates/moves object a2 into the inactive region (swap at a1[5], a1[5]++), sets bit 0x2000 in +116, calls type callback off_20F0F6C (+28) [REVIEW]
sub_20F0F70
export/plan0/arm9_main/sub_20F0F70_020F0F70.c
- docs/function_notes/hk_23.md:76 removes object a2 from list a1[1]: finds index, shifts entries, updates counts a1[4..6], calls sub_20F992C(a2), decrements a1[7].
sub_20F1048
export/plan0/arm9_main/sub_20F1048_020F1048.c
- docs/function_notes.md:751 pool allocate: while count + a2 exceeds capacity a1[2] removes the first entry with sub_20F0F70; pops a2 objects into the array a3, initialising each
- docs/function_notes/NEEDS_REVIEW.md:799 pool allocate: while count+a2 exceeds capacity a1[2], removes first entry via sub_20F0F70; pops a2 objects into array a3, initialising each via sub_20F99B8 [REVIEW]
- docs/function_notes/hk_23.md:77 pool allocate: while count+a2 exceeds capacity a1[2], removes first entry via sub_20F0F70; pops a2 objects into array a3, initialising each via sub_20F99B8 [REVIEW]
sub_20F1104
export/plan0/arm9_main/sub_20F1104_020F1104.c
- docs/function_notes.md:577 update step: sub_2148504(a1+556, a1+92, a1+92), then tail-calls sub_20F29E8(a1)
- docs/function_notes/NEEDS_REVIEW.md:800 update step: sub_2148504 on a1+556 with a1+92, then tail-calls sub_20F29E8(a1) [REVIEW]
- docs/function_notes/hk_23.md:78 update step: sub_2148504 on a1+556 with a1+92, then tail-calls sub_20F29E8(a1) [REVIEW]
sub_20F112C
export/plan0/arm9_main/sub_20F112C_020F112C.c
- docs/function_notes/hk_23.md:79 sets record pointer a1+552 = table off_20F114C[0] + 528*a2 and clears a1+568 (select-record setter).
sub_20F1150
export/plan0/arm9_main/sub_20F1150_020F1150.c
- docs/function_notes/hk_23.md:80 sets a1[138] = off_20F117C + 528*a2 and zeroes a1[139..142] (record select plus clear).
sub_20F1180
export/plan0/arm9_main/sub_20F1180_020F1180.c
- vm_model/src/kart/red_shell.rs:177 sub_20F1180: every kart, keeping the nearest acceptable one
sub_20F11F0
export/plan0/arm9_main/sub_20F11F0_020F11F0.c
- vm_model/src/kart/red_shell.rs:174 sub_20F11F0: only the kart the round-robin slot points at
sub_20F1258
export/plan0/arm9_main/sub_20F1258_020F1258.c
- vm_model/src/kart/red_shell.rs:47 Targeting (
sub_20F1258): range (400 units, squared, in units), height window (50 units). - vm_model/src/kart/red_shell.rs:190
sub_20F1258: whether kartkcan be targeted (ahead of the thrower, in range, in front - game/src/items.rs:1088 a Boo ghost cannot be targeted (+0x7C bit 0x2000:
sub_206C0E0,sub_20F1258)
sub_20F14A0
export/plan0/arm9_main/sub_20F14A0_020F14A0.c
- vm_model/src/kart/shell.rs:47 Homing (
sub_20F14A0): squared height (in units) above which a target counts as on another - vm_model/src/kart/shell.rs:336
sub_20F14A0: one tick of homing on a kart. On steering ticks (every other tick, by the
sub_20F1A14
export/plan0/arm9_main/sub_20F1A14_020F1A14.c
- docs/function_notes/hk_23.md:81 clears record pointer a1+552 and a1+568.
sub_20F1A24
export/plan0/arm9_main/sub_20F1A24_020F1A24.c
- docs/function_notes/hk_23.md:82 Thumb, calls sub_20F1B10() then tail-calls sub_20F1A38(result); init wrapper.
sub_20F1A38
export/plan0/arm9_main/sub_20F1A38_020F1A38.c
- docs/function_notes.md:752 recomputes priority counters for the 14 slots (stride 168, fields +4/+12/+16) from an 18-entry maximum table built from off_20F1B04
- docs/function_notes/NEEDS_REVIEW.md:801 Thumb, recomputes priority counters for 14 slots (stride 168, +4/+12/+16) from an 18-entry max table built from off_20F1B04 [REVIEW]
- docs/function_notes/hk_23.md:83 Thumb, recomputes priority counters for 14 slots (stride 168, +4/+12/+16) from an 18-entry max table built from off_20F1B04 [REVIEW]
sub_20F1B10
export/plan0/arm9_main/sub_20F1B10_020F1B10.c
- docs/function_notes.md:1581 initialiser (430 bytes): allocates a 14-entry table (stride 168) and copies 21-word blocks from the constant tables
- docs/function_notes/NEEDS_REVIEW.md:802 Thumb, initialiser: allocates a 14-entry (stride 168) table and copies 21-word blocks from about a dozen constant tables (off_20F1CC8..off_20F1D28) [REVIEW]
- docs/function_notes/hk_23.md:84 Thumb, initialiser: allocates a 14-entry (stride 168) table and copies 21-word blocks from about a dozen constant tables (off_20F1CC8..off_20F1D28) [REVIEW]
sub_20F1D40
export/plan0/arm9_main/sub_20F1D40_020F1D40.c
- docs/function_notes/hk_23.md:85 Thumb, queries callback at off_20F1D6C[a1]+72 with (0,0,1); returns its result or 0.
sub_20F1D70
export/plan0/arm9_main/sub_20F1D70_020F1D70.c
- vm_model/src/kart/red_shell.rs:307 sub_20F1D70: new heading (flat part), direction along the floor, flat velocity
sub_20F1EA4
export/plan0/arm9_main/sub_20F1EA4_020F1EA4.c
- docs/function_notes.md:753 initialises a physics record: normalises a1[23..25] into a1[76..78] when the squared length >= 16 (sign-flipped when a3 is set), builds the basis a1[79..84], sets a1[73] = off_20F1F94
- docs/function_notes/NEEDS_REVIEW.md:803 initialises a physics record: normalises a1[23..25] into a1[76..78] (sign-flipped if a3), builds basis a1[79..84], sets a1[73]=off_20F1F94 [REVIEW]
- docs/function_notes/hk_23.md:86 initialises a physics record: normalises a1[23..25] into a1[76..78] (sign-flipped if a3), builds basis a1[79..84], sets a1[73]=off_20F1F94 [REVIEW]
sub_20F1F98
export/plan0/arm9_main/sub_20F1F98_020F1F98.c
- docs/function_notes.md:642 sets velocity a1[23..25] = a1[79..81] scaled by a1[75]/4096, after sub_20F2768 on the input vector a3 (a3 with y forced to 0 when a3[1] <= 0)
- docs/function_notes/NEEDS_REVIEW.md:804 sets velocity a1[23..25] = basis a1[79..81] scaled by a1[75]/4096, after sub_20F2768 on input vector a3 [REVIEW]
- docs/function_notes/hk_23.md:87 sets velocity a1[23..25] = basis a1[79..81] scaled by a1[75]/4096, after sub_20F2768 on input vector a3 [REVIEW]
sub_20F2028
export/plan0/arm9_main/sub_20F2028_020F2028.c
- vm_model/src/kart/shell.rs:314
sub_20F2028: pressed into the floor on the ground, gravity in the air.
sub_20F2150
export/plan0/arm9_main/sub_20F2150_020F2150.c
- vm_model/src/kart/blue_shell.rs:91 Gravity of a free-flying item (
sub_20F2150): falling, rising, and how rising is damped when airborne. - vm_model/src/kart/blue_shell.rs:767
sub_20F2150: vertical speed under gravity; airborne it is capped falling and damped rising. - vm_model/src/kart/shell.rs:294
sub_20F2150: vertical speed under gravity (falling is capped and rising damped while airborne); - docs/function_notes/NEEDS_REVIEW.md:805 per-frame vertical-speed step: a1+96 decremented by dword_20F221C or dword_20F2224; clamps to -40960 when flag 0x20000 set [REVIEW]
- docs/function_notes/hk_23.md:88 per-frame vertical-speed step: a1+96 decremented by dword_20F221C or dword_20F2224; clamps to -40960 when flag 0x20000 set [REVIEW]
sub_20F2228
export/plan0/arm9_main/sub_20F2228_020F2228.c
- vm_model/src/kart/shell.rs:1 Thrown shells moving over the course (
sub_20F2228, shared by green and red shells; the green - vm_model/src/kart/shell.rs:211
sub_20F2228at the type's cruise speed. - vm_model/src/kart/shell.rs:216
sub_20F2228: move, collide with the course, follow floors, bounce off walls; speed
sub_20F2768
export/plan0/arm9_main/sub_20F2768_020F2768.c
- vm_model/src/kart/shell.rs:415
sub_20F2768: slide (or reflect) the flat heading off a wall.
sub_20F288C
export/plan0/arm9_main/sub_20F288C_020F288C.c
- vm_model/src/kart/shell.rs:429
sub_20F288C: the same in 3D, for floors followed in 3D.
sub_20F29E8
export/plan0/arm9_main/sub_20F29E8_020F29E8.c
- vm_model/src/kart/red_shell.rs:342
sub_20F29E8: continue in a straight line with the current velocity.
sub_20F2A6C
export/plan0/arm9_main/sub_20F2A6C_020F2A6C.c
- vm_model/src/kart/shell.rs:446
sub_20F2A6C: the flat heading tilted onto a floor with normaln.
sub_20F2B94
export/plan0/arm9_main/sub_20F2B94_020F2B94.c
- vm_model/src/kart/hand.rs:9
sub_20F6150, red shellssub_20F5D6C, both throughsub_20F2B94. - vm_model/src/kart/hand.rs:75 Throw speeds (
sub_20F2B94callers): base speed forward, and the forward lean added to the - vm_model/src/kart/hand.rs:422
sub_20F2B94: releaseitemas a shell ofkind. Forward throws start ahead of the hold - game/src/items.rs:929
sub_20F2B94->sub_20EDC9C(kart, 24576, ...): the kart's motion adds to the base speed and bends the direction
sub_20F2D98
export/plan0/arm9_main/sub_20F2D98_020F2D98.c
- docs/function_notes/hk_23.md:89 setter: a1+300 = a2 and a1+292 = callback off_20F2DA8.
sub_20F2DAC
export/plan0/arm9_main/sub_20F2DAC_020F2DAC.c
- docs/function_notes/hk_23.md:90 calls sub_20F92E8(a1+23, a3); on first call sets flag 0x1000000 in a1[29] and zeroes a1[66..68].
sub_20F2DF0
export/plan0/arm9_main/sub_20F2DF0_020F2DF0.c
- vm_model/src/kart/banana.rs:1 Dropped bananas: a short flight behind the kart (
sub_20F518Cthroughsub_20F2DF0), a - vm_model/src/kart/banana.rs:13 Sphere test query flags for items in flight and on the ground (
sub_20F2DF0,sub_20F9334). - vm_model/src/kart/banana.rs:181
sub_20F518C/sub_20F2DF0: move, collide, fall; settle once landed. - vm_model/src/kart/bomb.rs:5 next tick): 0 flight (
sub_20FE16C, built on the flight functionsub_20F2DF0that bananas - vm_model/src/kart/bomb.rs:317 State 0 (
sub_20FE16C->sub_20F2DF0): move, collide, bounce or land, fall.
sub_20F30EC
export/plan0/arm9_main/sub_20F30EC_020F30EC.c
- docs/function_notes.md:643 object init: copies the optional vector a3 into +92..+100, raises +104..+112 to dword_20F3148 when +112 is smaller, sets +300 = a2 and +292 = off_20F314C, clears bits 24..26 of +116
- docs/function_notes/NEEDS_REVIEW.md:806 object init: copies optional vector a3 into a1[23..25], raises a1[26..28] to dword_20F3148, sets a1[75]=a2, a1[73]=off_20F314C [REVIEW]
- docs/function_notes/hk_23.md:91 object init: copies optional vector a3 into a1[23..25], raises a1[26..28] to dword_20F3148, sets a1[75]=a2, a1[73]=off_20F314C [REVIEW]
sub_20F3150
export/plan0/arm9_main/sub_20F3150_020F3150.c
- vm_model/src/kart/bomb.rs:11 of fuse, the explosion. Not ported: the throw itself (
sub_20F3150forward form), wall hits in - vm_model/src/kart/hand.rs:11 Dropping a banana behind the kart is
sub_20F5240throughsub_20F3150. - vm_model/src/kart/hand.rs:44 How a bob-omb (or any
sub_20F3150user) leaves the kart: forward or dropped behind, the base speed (p5), the upward - vm_model/src/kart/hand.rs:89 Dropping (
sub_20F3150fromsub_20F5240): the least speed and the share of the kart's - vm_model/src/kart/hand.rs:469
sub_20F5240with the throw input held (kart+492 & 0x10):sub_20F3150forward form with speed - vm_model/src/kart/hand.rs:509
sub_20F5240/sub_20F3150, dropped behind: a banana that leaves at a share of the - vm_model/src/kart/hand.rs:570
sub_20F3150for a bob-omb: where it starts (sstart) and its velocity. Forward throws start at the kart's hold point - game/src/items.rs:801
sub_20FE268->sub_20F3150: dropped behind (Down), thrown hard (Up) or thrown (replayed against a driving kart) - docs/function_notes.md:586 place and launch a thrown/dropped item (stack args base speed p5, upward p6, lift p7): forward (a4=1) from the hold point +0x1B8, aim = normalize(flat(7forward + displacement)) at p5 + 1.7|displacement| (+1.3bounce) plus up(p6 + speed/8 + 2*dy); backward (a4=0) = the banana drop with lift p7; speed < 3 units adds two RNG draws of +-123 to the aim; drops add the kart push
sub_20F357C
export/plan0/arm9_main/sub_20F357C_020F357C.c
- docs/function_notes.md:754 per-frame: indexes 40-byte entries (off_20F366C+172, count +88) into a 4-slot priority table off_20F3670 and packs their normalised directions
- docs/function_notes/NEEDS_REVIEW.md:807 Thumb, per-frame: indexes 40-byte entries (off_20F366C+172, count +88) into a 4-slot priority table off_20F3670, packs normalised directions into +33..35 [REVIEW]
- docs/function_notes/hk_23.md:92 Thumb, per-frame: indexes 40-byte entries (off_20F366C+172, count +88) into a 4-slot priority table off_20F3670, packs normalised directions into +33..35 [REVIEW]
sub_20F3678
export/plan0/arm9_main/sub_20F3678_020F3678.c
- docs/function_notes/hk_23.md:93 unpacks three bytes a1[33..35] into fixed-point a2[0..2] (value << 6).
sub_20F36A0
export/plan0/arm9_main/sub_20F36A0_020F36A0.c
- docs/function_notes/hk_23.md:94 returns the 40-byte record at index a1 from table off_20F36D4+176 (NULL if a1 >= 0xFF); sets a2[1]=1.
sub_20F36D8
export/plan0/arm9_main/sub_20F36D8_020F36D8.c
- docs/function_notes/hk_23.md:95 inverse of sub_20F36A0: converts a record pointer to a byte index (scaled by dword_20F3718 >> 4), 255 if NULL.
sub_20F371C
export/plan0/arm9_main/sub_20F371C_020F371C.c
- vm_model/src/kart/blue_shell.rs:1013
sub_20EC9C0's progress: along the segment, onto the next node when it ends (sub_20F371Cchasingchase - vm_model/src/kart/route.rs:164
sub_20F371C: the next node to head for fromcurrent. At a fork, the branch whose
sub_20F3A44
export/plan0/arm9_main/sub_20F3A44_020F3A44.c
- docs/function_notes/hk_23.md:96 trivial thunk; calls an unresolved function pointer with no arguments (stub).
sub_20F3A58
export/plan0/arm9_main/sub_20F3A58_020F3A58.c
- vm_model/src/kart/route.rs:125
sub_20F3A58: when the local search left the kart far from its node, walk the route forward, each step to - docs/function_notes.md:541 from a node walk along the nearest next node each step (at most route-length steps) until a node nearer to the position than the start is found
- docs/function_notes/NEEDS_REVIEW.md:808 nearest-neighbour search over the node list of a1 (neighbour arrays at +36/+4*i, up to 8 hops) by 2D distance to a3; writes best node to a2 [REVIEW]
- docs/function_notes/hk_23.md:97 nearest-neighbour search over the node list of a1 (neighbour arrays at +36/+4*i, up to 8 hops) by 2D distance to a3; writes best node to a2 [REVIEW]
sub_20F3BB4
export/plan0/arm9_main/sub_20F3BB4_020F3BB4.c
- vm_model/src/kart/route.rs:66
sub_20F3BB4: move the cursor on totargetoncepis nearer to it than to the
sub_20F3C54
export/plan0/arm9_main/sub_20F3C54_020F3C54.c
- vm_model/src/kart/route.rs:89
sub_20F3C54: the node nearest topamongnode, the nodes next to it and the ones next to - docs/function_notes.md:540 nearest route node to a position among the current node, its next/previous nodes and theirs (two links, strict-less ties)
- docs/function_notes/NEEDS_REVIEW.md:809 wider nearest-node search over neighbour lists at +36/+38; writes best node to a2[0], returns whether it changed [REVIEW]
- docs/function_notes/hk_23.md:98 wider nearest-node search over neighbour lists at +36/+38; writes best node to a2[0], returns whether it changed [REVIEW]
sub_20F3FA8
export/plan0/arm9_main/sub_20F3FA8_020F3FA8.c
- vm_model/src/kart/blue_shell.rs:1014 at forks), the overshoot carried into the new segment (
sub_20F3FA8/sub_20D7C84). - docs/function_notes/NEEDS_REVIEW.md:810 pushes vector a2 into a 4-entry history ring at a1+29.. (index a1[24] &3), rotates a1[25..28], calls sub_20D7C84 [REVIEW]
- docs/function_notes/hk_23.md:99 pushes vector a2 into a 4-entry history ring at a1+29.. (index a1[24] &3), rotates a1[25..28], calls sub_20D7C84 [REVIEW]
sub_20F4020
export/plan0/arm9_main/sub_20F4020_020F4020.c
- vm_model/src/kart/blue_shell.rs:720
sub_20ED0F4+sub_20F4020: the spline starts at the shell with the current heading, leaning - docs/function_notes/NEEDS_REVIEW.md:811 initialises 4 sub-vector slots (a1+116 + 12*i) from array a2, fills a 4-pointer table at a1+100, zeroes a1[96], tail-calls sub_20D7D18 [REVIEW]
- docs/function_notes/hk_23.md:100 initialises 4 sub-vector slots (a1+116 + 12*i) from array a2, fills a 4-pointer table at a1+100, zeroes a1[96], tail-calls sub_20D7D18 [REVIEW]
sub_20F4090
export/plan0/arm9_main/sub_20F4090_020F4090.c
- docs/function_notes/hk_23.md:101 returns pointer-table entry off_20F409C[a1] (thin accessor).
sub_20F40A0
export/plan0/arm9_main/sub_20F40A0_020F40A0.c
- docs/function_notes/hk_23.md:102 subtracts a2 from the usage counter at +28 of the 68-byte entry (off_20F40D8) selected by type record a1; returns new value.
sub_20F40DC
export/plan0/arm9_main/sub_20F40DC_020F40DC.c
- docs/function_notes/hk_23.md:103 init of a request record a1: stores a2 (type) at +0 and a3 at +8, zeroes +32, calls sub_206C14C on owner, sets +12 from off_20F4138[a2]+16.
sub_20F413C
export/plan0/arm9_main/sub_20F413C_020F413C.c
- docs/function_notes/hk_23.md:104 releases record a1: copies type +0 to a2 and count +8 to a3, then resets record to idle (state 19) and clears counts.
sub_20F4188
export/plan0/arm9_main/sub_20F4188_020F4188.c
- docs/function_notes/hk_23.md:105 sets 16-bit timer a1+18 = a1+16 - a2 (countdown helper).
sub_20F4198
export/plan0/arm9_main/sub_20F4198_020F4198.c
- docs/function_notes/hk_23.md:106 start-timer helper: if 16-bit a1+16 is zero stores a2 there and returns 1; otherwise returns 0.
sub_20F41B0
export/plan0/arm9_main/sub_20F41B0_020F41B0.c
- docs/function_notes.md:755 sets a1+32 = 10 and tail-calls the large dispatcher off_20F41C0
- docs/function_notes/NEEDS_REVIEW.md:812 sets a1+32 = 10 and tail-calls the large dispatcher off_20F41C0 [REVIEW]
- docs/function_notes/hk_23.md:107 sets a1+32 = 10 and tail-calls the large dispatcher off_20F41C0 [REVIEW]
sub_20F45F0
export/plan0/arm9_main/sub_20F45F0_020F45F0.c
- docs/function_notes.md:756 releases record a1: for an owner of type 5 runs sub_20FE828 per member; when a1+32 is set removes members via sub_20F0F70, else decrements the usage counter off_20F4714
- docs/function_notes/NEEDS_REVIEW.md:813 releases record a1: optional sub_20FE828 loop (type-5 owner), removes members via sub_20F0F70 if a1+32 set, else decrements off_20F4714 usage; resets idle [REVIEW]
- docs/function_notes/hk_23.md:108 releases record a1: optional sub_20FE828 loop (type-5 owner), removes members via sub_20F0F70 if a1+32 set, else decrements off_20F4714 usage; resets idle [REVIEW]
sub_20F4718
export/plan0/arm9_main/sub_20F4718_020F4718.c
- docs/function_notes/hk_23.md:109 resets record a1 to idle: state = 19, counts and timers zeroed.
sub_20F4754
export/plan0/arm9_main/sub_20F4754_020F4754.c
- docs/function_notes/hk_23.md:110 decrements count a1+8 and the usage counter at +28 of the type table entry by a2; at count 0 resets record to idle (state 19).
sub_20F47E4
export/plan0/arm9_main/sub_20F47E4_020F47E4.c
- docs/function_notes.md:644 acquires an item record for type a2: type at +0, pool amount (table +12) at +8, zeroes +32, calls sub_206C14C on the kart(+4)->+508, sets +12 from table +16, clears +16/+18, and adds the amount to the pool counter at +28
- docs/function_notes/NEEDS_REVIEW.md:814 acquires record a1 for type a2: stores type at +0, count (table off_20F487C +12) at +8, zeroes +32, calls sub_206C14C, increments usage counter off_20F4880 [REVIEW]
- docs/function_notes/hk_23.md:111 acquires record a1 for type a2: stores type at +0, count (table off_20F487C +12) at +8, zeroes +32, calls sub_206C14C, increments usage counter off_20F4880 [REVIEW]
sub_20F4884
export/plan0/arm9_main/sub_20F4884_020F4884.c
- docs/function_notes.md:757 per-frame countdown for record a1: calls sub_20F49BC, decrements the timer +16; when it reaches zero may call sub_20FE958, decrements the count +8 and the usage counter
- docs/function_notes/NEEDS_REVIEW.md:815 per-frame countdown for record a1: calls sub_20F49BC, decrements timer +16; on zero may call sub_20FE958, decrements count +8 and usage counter [REVIEW]
- docs/function_notes/hk_23.md:112 per-frame countdown for record a1: calls sub_20F49BC, decrements timer +16; on zero may call sub_20FE958, decrements count +8 and usage counter [REVIEW]
sub_20F49BC
export/plan0/arm9_main/sub_20F49BC_020F49BC.c
- docs/function_notes.md:758 per-frame release step: when a1+32 is 7, 5 or 3 pops the last member into its pool entry (sub_20F0EA0), then calls sub_20EFD1C and sub_20F6630
- docs/function_notes/NEEDS_REVIEW.md:816 per-frame release step: when a1+32 is 7, 5 or 3 pops the last member into its pool entry (sub_20F0EA0), sub_20EFD1C, sub_20F6630, then callback off_20F4B1C+56 [REVIEW]
- docs/function_notes/hk_23.md:113 per-frame release step: when a1+32 is 7, 5 or 3 pops the last member into its pool entry (sub_20F0EA0), sub_20EFD1C, sub_20F6630, then callback off_20F4B1C+56 [REVIEW]
sub_20F4B20
export/plan0/arm9_main/sub_20F4B20_020F4B20.c
- docs/function_notes/hk_23.md:114 constructor for record a1 bound to owner a2: state 19, counts zeroed, a1+36 = 1 when table off_20F4B88[a2+504] +112 == 3.
sub_20F4B8C
export/plan0/arm9_main/sub_20F4B8C_020F4B8C.c
- docs/function_notes.md:759 global initialiser: allocates a table of dword_20F4D88 bytes and copies about 20 constant 3-vector blocks into it
- docs/function_notes/NEEDS_REVIEW.md:817 Thumb, global initialiser: allocates a table of dword_20F4D88 bytes, copies about 20 constant 3-vector blocks (off_20F4D90..off_20F4DF0) into it [REVIEW]
- docs/function_notes/hk_23.md:115 Thumb, global initialiser: allocates a table of dword_20F4D88 bytes, copies about 20 constant 3-vector blocks (off_20F4D90..off_20F4DF0) into it [REVIEW]
sub_20F4DFC
export/plan0/arm9_main/sub_20F4DFC_020F4DFC.c
- docs/function_notes.md:645 wrapper: ORs the mask off_20F4E70 into +120 of a1, calls sub_20F9CA8, sub_20F9114, sub_20F30EC(a1, 0, a2); sets +288 = off_20F4E74 when +116 has no 0x180000 bits; sets +304 = a3; zeroes a1
- docs/function_notes/NEEDS_REVIEW.md:818 wrapper: ORs flag mask off_20F4E70 into +120 of *a1, calls sub_20F9CA8, sub_20F9114, sub_20F30EC; sets callback +288 and +304 = a3 [REVIEW]
- docs/function_notes/hk_23.md:116 wrapper: ORs flag mask off_20F4E70 into +120 of *a1, calls sub_20F9CA8, sub_20F9114, sub_20F30EC; sets callback +288 and +304 = a3 [REVIEW]
sub_20F4E78
export/plan0/arm9_main/sub_20F4E78_020F4E78.c
- docs/function_notes.md:646 setter: +308 = 1, sub_208AD74 on +124; when a2 is given copies it to +240..+248 and sets +116 bit 0x80; when a3 is given copies it to +80..+88 and returns sub_21484D0(a1+80, a1+228, a1+92)
- docs/function_notes/NEEDS_REVIEW.md:819 setter: sets +308=1, sub_208AD74 on +124, optionally copies a2 into +240..248 (flag 0x80), optionally copies a3 into +80..88 [REVIEW]
- docs/function_notes/hk_23.md:117 setter: sets +308=1, sub_208AD74 on +124, optionally copies a2 into +240..248 (flag 0x80), optionally copies a3 into +80..88 [REVIEW]
sub_20F4EE8
export/plan0/arm9_main/sub_20F4EE8_020F4EE8.c
- docs/function_notes/hk_23.md:118 object constructor: allocates via sub_20FA3D0(3, 8, off_20F4F40, ...), clears +72 unless flag 0x180000 set, calls sub_20F9C40; NULL on failure.
sub_20F4FD0
export/plan0/arm9_main/sub_20F4FD0_020F4FD0.c
- docs/function_notes.md:578 per-frame: decrements the counter at +304; when it goes negative calls sub_20F7658(a1, 0); returns sub_20F68B0(a1)
- docs/function_notes/NEEDS_REVIEW.md:820 per-frame: decrements counter +304; when it goes negative calls sub_20F7658(a1,0); then returns sub_20F68B0(a1) [REVIEW]
- docs/function_notes/hk_23.md:119 per-frame: decrements counter +304; when it goes negative calls sub_20F7658(a1,0); then returns sub_20F68B0(a1) [REVIEW]
sub_20F5008
export/plan0/arm9_main/sub_20F5008_020F5008.c
- docs/function_notes.md:258 mushroom item draw gated by +308, delegates to shared billboard/model helper sub_20ED5C0
- docs/function_notes/NEEDS_REVIEW.md:821 if object flag +0x134 is set, forwards to sub_20ED5C0(obj, a3, a2); otherwise returns its first argument unchanged [REVIEW]
- docs/function_notes/hk_24.md:2 if object flag +0x134 is set, forwards to sub_20ED5C0(obj, a3, a2); otherwise returns its first argument unchanged [REVIEW]
sub_20F5040
export/plan0/arm9_main/sub_20F5040_020F5040.c
- docs/function_notes.md:257 mushroom item initialization enables draw field +308 = 1
- docs/function_notes/hk_24.md:3 setter, sets object flag +0x134 (offset 308) to 1
sub_20F504C
export/plan0/arm9_main/sub_20F504C_020F504C.c
- docs/function_notes.md:579 racer state-change handler: sub_2069DB8 on the racer at (a2+4)->+508, sub_20F4754(a2, 1), sets +516 of *(a1+12) to 1; returns the state byte at off_20F50B0+8, or sub_20FE958(3) when that state is 5
- docs/function_notes/NEEDS_REVIEW.md:822 racer state-change handler: calls sub_2069DB8 and sub_20F4754 on the racer (via a2+4 -> +508), sets +516=1 [REVIEW]
- docs/function_notes/hk_24.md:4 racer state-change handler: calls sub_2069DB8 and sub_20F4754 on the racer (via a2+4 -> +508), sets +516=1 [REVIEW]
sub_20F50B4
export/plan0/arm9_main/sub_20F50B4_020F50B4.c
- docs/function_notes.md:589 calls sub_20F8E78 and sub_20F2D98(a1, 0); if +116 bit 0x10000000 is set and +304 is nonzero, plays kart sound 218 via sub_21090C4(a1, 218, 127, 0)
- docs/function_notes/NEEDS_REVIEW.md:823 calls sub_20F8E78 and sub_20F2D98; if object flag +116 bit 0x10000000 and +304 are set, plays kart sound 218 via sub_21090C4 [REVIEW]
- docs/function_notes/hk_24.md:5 calls sub_20F8E78 and sub_20F2D98; if object flag +116 bit 0x10000000 and +304 are set, plays kart sound 218 via sub_21090C4 [REVIEW]
sub_20F5108
export/plan0/arm9_main/sub_20F5108_020F5108.c
- docs/function_notes.md:647 enter/leave wrapper: on enter calls sub_20FF1B8(a2[76], a2+24); calls sub_20FECDC; on leave calls sub_20FF1A0(a2[24], a2+76); on enter returns sub_20FE8AC(a2[17])
- docs/function_notes/NEEDS_REVIEW.md:824 enter/leave wrapper: on enter calls sub_20FF1B8 on a2 sub-fields, calls sub_20FECDC, on leave calls sub_20FF1A0; returns sub_20FE8AC(a2[17]) on enter [REVIEW]
- docs/function_notes/hk_24.md:6 enter/leave wrapper: on enter calls sub_20FF1B8 on a2 sub-fields, calls sub_20FECDC, on leave calls sub_20FF1A0; returns sub_20FE8AC(a2[17]) on enter [REVIEW]
sub_20F518C
export/plan0/arm9_main/sub_20F518C_020F518C.c
- vm_model/src/kart/banana.rs:1 Dropped bananas: a short flight behind the kart (
sub_20F518Cthroughsub_20F2DF0), a - vm_model/src/kart/banana.rs:19 A banana thrown forward (
sub_20F518Cwith +0x130 set) falls and slows differently. - vm_model/src/kart/banana.rs:181
sub_20F518C/sub_20F2DF0: move, collide, fall; settle once landed. - vm_model/src/kart/banana.rs:217 (
sub_20F518C) a thrown banana doubles its vertical speed on landing, which sets the wobble
sub_20F5240
export/plan0/arm9_main/sub_20F5240_020F5240.c
- vm_model/src/kart/hand.rs:11 Dropping a banana behind the kart is
sub_20F5240throughsub_20F3150. - vm_model/src/kart/hand.rs:89 Dropping (
sub_20F3150fromsub_20F5240): the least speed and the share of the kart's - vm_model/src/kart/hand.rs:469
sub_20F5240with the throw input held (kart+492 & 0x10):sub_20F3150forward form with speed - vm_model/src/kart/hand.rs:509
sub_20F5240/sub_20F3150, dropped behind: a banana that leaves at a share of the - game/src/items.rs:787 thrown forward when the throw input is held (
sub_20F5240, kart +492 & 0x10): SE 218 - docs/function_notes.md:1656 banana release: with kart +492 & 0x10 thrown forward (sub_20F3150 forward 0x4000/0x3000/1434, SE 218, +304 = 1: gravity 492, damping 4076, vertical speed doubled on landing) else dropped (ItemHand::throw_banana)
sub_20F5324
export/plan0/arm9_main/sub_20F5324_020F5324.c
- docs/function_notes.md:760 range check: returns 1 when the squared XZ distance to the target (sub_207A974) is inside 1.5 times the racer radius +224, or when collision id +218 is -1; otherwise resets the racer timers (+588 = 5, +590 = 1), calls sub_20F112C and returns 0
- docs/function_notes/NEEDS_REVIEW.md:825 range check: returns 1 if squared XZ distance to target (sub_207A974 object) is inside 1.5*(+224) radius or id +218 is -1 [REVIEW]
- docs/function_notes/hk_24.md:7 range check: returns 1 if squared XZ distance to target (sub_207A974 object) is inside 1.5*(+224) radius or id +218 is -1 [REVIEW]
sub_20F53D0
export/plan0/arm9_main/sub_20F53D0_020F53D0.c
- docs/function_notes.md:761 state entry for a kart-related object: sub_20F8E78, resets the timer sub_210B850(+600), sets +48 = off_20F5540 and calls sub_2046BE8 with the state table off_20F5544
- docs/function_notes/NEEDS_REVIEW.md:826 state entry for a kart-related object: resets timer sub_210B850(+600), sets handler, calls sub_2046BE8 [REVIEW]
- docs/function_notes/hk_24.md:8 state entry for a kart-related object: resets timer sub_210B850(+600), sets handler, calls sub_2046BE8 [REVIEW]
sub_20F5550
export/plan0/arm9_main/sub_20F5550_020F5550.c
- docs/function_notes.md:762 enter/leave wrapper like sub_20F5108, with an extra dot-product sign test (sub_2039828) on enter and sub_20FF040 on object +540
- docs/function_notes/NEEDS_REVIEW.md:827 enter/leave wrapper like sub_20F5108 with an extra sub_2039828 (dot product) sign test and sub_20FF040 on object +540 [REVIEW]
- docs/function_notes/hk_24.md:9 enter/leave wrapper like sub_20F5108 with an extra sub_2039828 (dot product) sign test and sub_20FF040 on object +540 [REVIEW]
sub_20F5614
export/plan0/arm9_main/sub_20F5614_020F5614.c
- docs/function_notes.md:590 state 1/2 conditional dispatcher: when the racer id (+120, 8 if negative) matches the id at kart(+552)+508 and flag 0x1000 is set (or 0x2000 with +120&0x1000 and +284 < 120), calls sub_210A598 on (kart+508, +972) and tail-calls through a stack pointer the decompiler could not resolve; otherwise returns its argument
- docs/function_notes/NEEDS_REVIEW.md:828 thin conditional dispatcher: if state is 1 or 2 and racer id (+120) matches object +508 id and flag bits set [REVIEW]
- docs/function_notes/hk_24.md:10 thin conditional dispatcher: if state is 1 or 2 and racer id (+120) matches object +508 id and flag bits set [REVIEW]
sub_20F56D0
export/plan0/arm9_main/sub_20F56D0_020F56D0.c
- vm_model/src/kart/red_shell.rs:15 | 6 |
sub_20F56D0| target lost: fly free (cruise 49152) |
sub_20F572C
export/plan0/arm9_main/sub_20F572C_020F572C.c
- vm_model/src/kart/red_shell.rs:14 | 5 |
sub_20F572C| final approach (not ported) |
sub_20F5824
export/plan0/arm9_main/sub_20F5824_020F5824.c
- vm_model/src/kart/red_shell.rs:13 | 4 |
sub_20F5824| home on the target ([Shell::home]) | - vm_model/src/kart/red_shell.rs:319 State 4 (
sub_20F5824). - vm_model/src/kart/shell.rs:409 A red shell homing on its target (state 4,
sub_20F5824in a race): strength 18432,
sub_20F5968
export/plan0/arm9_main/sub_20F5968_020F5968.c
- docs/function_notes/hk_24.md:11 setter, stores handler pointer off_20F5974 into object +292 (offset 0x124)
sub_20F5978
export/plan0/arm9_main/sub_20F5978_020F5978.c
- vm_model/src/kart/red_shell.rs:12 | 3 |
sub_20F5978| follow the item route (cruise 53248) and look for a target | - vm_model/src/kart/red_shell.rs:43 The route run eases the path speed toward the cruise speed by 41/4096 (
sub_20F5978:sub_20EC918(item, 0xD000, 0x29, ...)). - vm_model/src/kart/red_shell.rs:140 State 3 (
sub_20F5978/sub_20EC918). - docs/function_notes.md:1659 red route state calls sub_20EC918(item, cruise 0xD000, ease 41, kart one place ahead of the thrower, 0); when the steering countdown reaches 0 sub_20ED0F4 lays the route spline only once heading . dir-to-node > 0.866 (3547), until then the shell keeps steering; then sub_20EC9C0 rides it (RedShell::run_spline: x/z from the curve, y from its own vertical speed, push out, wall = break at 573/4096, gravity sub_20F2150). Shape-tested only (no recording)
sub_20F5B74
export/plan0/arm9_main/sub_20F5B74_020F5B74.c
- docs/function_notes/hk_24.md:12 setter, stores handler pointer off_20F5B80 into object +292
sub_20F5B84
export/plan0/arm9_main/sub_20F5B84_020F5B84.c
- vm_model/src/kart/red_shell.rs:11 | 2 |
sub_20F5B84| fly free and look for a target | - vm_model/src/kart/red_shell.rs:131 State 2 (
sub_20F5B84).
sub_20F5CC4
export/plan0/arm9_main/sub_20F5CC4_020F5CC4.c
- docs/function_notes/hk_24.md:13 if object +218 is not -1, calls sub_20F1150, sets state +588=4, +590=1, and returns object+512; otherwise returns the object pointer unchanged
sub_20F5D00
export/plan0/arm9_main/sub_20F5D00_020F5D00.c
- vm_model/src/kart/red_shell.rs:10 | 0, 1 |
sub_20F5D00| fly free (cruise 34816) | - vm_model/src/kart/shell.rs:81 Same table values as green shells; cruise speed 34816 while flying free (
sub_20F5D00).
sub_20F5D5C
export/plan0/arm9_main/sub_20F5D5C_020F5D5C.c
- docs/function_notes.md:580 thin wrapper: tail-calls the function pointer at off_20F5D68 with a1+572 (sub-object dispatch)
- docs/function_notes/NEEDS_REVIEW.md:829 thin wrapper, tail-calls the function pointer off_20F5D68 with object+572 (sub-object dispatch) [REVIEW]
- docs/function_notes/hk_24.md:14 thin wrapper, tail-calls the function pointer off_20F5D68 with object+572 (sub-object dispatch) [REVIEW]
sub_20F5D6C
export/plan0/arm9_main/sub_20F5D6C_020F5D6C.c
- vm_model/src/kart/hand.rs:9
sub_20F6150, red shellssub_20F5D6C, both throughsub_20F2B94. - vm_model/src/kart/hand.rs:103 Red shell route setup (
sub_20F5D6Cviasub_20ED268): route countdown and its turn ramp. - vm_model/src/kart/hand.rs:643
sub_20F5D6Cwithout the route run: thrown backward (kart+492 & 0x20: state 1, flies free) or - vm_model/src/kart/hand.rs:664
sub_20F5D6C(race, thrown forward with a route position): a red shell that sets off - vm_model/src/kart/hand.rs:881 first tick enters it (
sub_20F5D6C). - vm_model/src/kart/red_shell.rs:2 on it (
sub_20F5D6Csets up the state machine at +0x23C; table at0x0216C628). - game/src/items.rs:770 a red shell thrown backward flies free in state 1 (
sub_20F5D6C, kart +492 & 0x20) - game/src/items.rs:779
sub_20F5D6C: at route forks the shell leans toward the kart one place ahead (the last place when first) - docs/function_notes.md:1650 red shell launch: +492&0x20 or race type 2 or no route cursor -> state 2 straight; else route run toward the kart one place ahead (last place when first) via sub_20ED268(45, 91, ...)
sub_20F5F7C
export/plan0/arm9_main/sub_20F5F7C_020F5F7C.c
- docs/function_notes/hk_24.md:15 state entry: calls sub_20F29E8 and sub_20F1F98, sets state +588=1, +590=1, returns object+512
sub_20F5FB8
export/plan0/arm9_main/sub_20F5FB8_020F5FB8.c
- docs/function_notes/hk_24.md:16 if object flag +116 bit 0x400000 is set, restarts timer sub_210B7EC(+600) and plays sound 216 at volume 127 via sub_2109078; else returns 0
sub_20F5FFC
export/plan0/arm9_main/sub_20F5FFC_020F5FFC.c
- docs/function_notes/hk_24.md:17 state entry: calls sub_20F8E78, clears timer sub_210B850(+364), sets handler word from dword_20F6034, calls sub_20F1EA4 with state 9
sub_20F6038
export/plan0/arm9_main/sub_20F6038_020F6038.c
- docs/function_notes.md:648 enter/leave wrapper like sub_20F5108, but enter passes the sign of sub_2039828(a2+23, a2+76) to sub_20FF1B8 and leave calls sub_20FF1A0(a2[24], a2+90)
- docs/function_notes/NEEDS_REVIEW.md:830 enter/leave wrapper like sub_20F5550 (dot product sign into sub_20FF1B8, sub_20FF1A0 on leave to +360); returns sub_20FE8AC(a2[17]) on enter [REVIEW]
- docs/function_notes/hk_24.md:18 enter/leave wrapper like sub_20F5550 (dot product sign into sub_20FF1B8, sub_20FF1A0 on leave to +360); returns sub_20FE8AC(a2[17]) on enter [REVIEW]
sub_20F60D0
export/plan0/arm9_main/sub_20F60D0_020F60D0.c
- vm_model/src/kart/shell.rs:2 shell's update is
sub_20F60D0). - vm_model/src/kart/shell.rs:44 Ticks after which a green shell has no bounces left (
sub_20F60D0). - vm_model/src/kart/shell.rs:140
sub_20F60D0: one tick of a green shell.
sub_20F6150
export/plan0/arm9_main/sub_20F6150_020F6150.c
- vm_model/src/kart/hand.rs:9
sub_20F6150, red shellssub_20F5D6C, both throughsub_20F2B94. - vm_model/src/kart/hand.rs:101 Green shell bounces (
sub_20F6150: 9; 5 in battle). - vm_model/src/kart/hand.rs:638
sub_20F6150: throw a green shell (forward unless the kart's player holds back).
sub_20F6220
export/plan0/arm9_main/sub_20F6220_020F6220.c
- docs/function_notes/hk_24.md:19 same pattern as sub_20F5FB8 but uses timer +364 (offset 0x16C) and plays sound 215
sub_20F6264
export/plan0/arm9_main/sub_20F6264_020F6264.c
- docs/function_notes.md:581 racer transition handler: sub_2069C38 on the racer at (a2+4)->+508, sub_20F4754(a2, 1); returns the state at off_20F62AC+8, or sub_20FE958(4) when that state is 5
- docs/function_notes/NEEDS_REVIEW.md:831 racer transition handler: calls sub_2069C38 on the racer object, sub_20F4754(a2,1), returns state from off_20F62AC [REVIEW]
- docs/function_notes/hk_24.md:20 racer transition handler: calls sub_2069C38 on the racer object, sub_20F4754(a2,1), returns state from off_20F62AC [REVIEW]
sub_20F62B0
export/plan0/arm9_main/sub_20F62B0_020F62B0.c
- docs/function_notes.md:763 racer transition: when bit 0 of off_20F637C is set, stops a sound slot (sub_2108EA0, sub_210E128, sub_212C6F0 with 0, sub_212ECC0 with 222)
- docs/function_notes/NEEDS_REVIEW.md:832 racer transition: if off_20F637C bit 1 set, stops a sound slot (sub_2108EA0, sub_210E128, sub_212C6F0, sub_212ECC0 with 222) [REVIEW]
- docs/function_notes/hk_24.md:21 racer transition: if off_20F637C bit 1 set, stops a sound slot (sub_2108EA0, sub_210E128, sub_212C6F0, sub_212ECC0 with 222) [REVIEW]
sub_20F6388
export/plan0/arm9_main/sub_20F6388_020F6388.c
- docs/function_notes.md:256 launched pickup wall callback reflects velocity and on first wall sets flag 0x1000000 while zeroing orientation/anchor vector +264..272
- docs/function_notes/NEEDS_REVIEW.md:833 calls sub_20F92E8 on a1+23 with a3; if flag +116 bit 0x1000000 is clear, sets it and zeroes words at a1[66..68]; returns 0 when it sets [REVIEW]
- docs/function_notes/hk_24.md:22 calls sub_20F92E8 on a1+23 with a3; if flag +116 bit 0x1000000 is clear, sets it and zeroes words at a1[66..68]; returns 0 when it sets [REVIEW]
sub_20F63CC
export/plan0/arm9_main/sub_20F63CC_020F63CC.c
- vm_model/src/kart/mushroom.rs:9 Primary sphere query (
sub_20F63CC); secondary landing query is 0x24. - vm_model/src/kart/mushroom.rs:173
sub_20F63CC: move, collide, fall; settle once landed. - docs/function_notes.md:255 launched pickup flight: position += velocity, damp only X/Z by 4076/4096, primary KCL query 0x44, shared floor/side-wall responses, gravity 901 with fall cap -40960, settle on confirmed floor; mushroom static-course trajectory replay matches
- docs/function_notes/NEEDS_REVIEW.md:834 per-frame kart physics: scales velocity (+92, +100) by a constant (>>12), runs KCL sphere sweep sub_1FFDEE4 on course [REVIEW]
- docs/function_notes/hk_24.md:23 per-frame kart physics: scales velocity (+92, +100) by a constant (>>12), runs KCL sphere sweep sub_1FFDEE4 on course [REVIEW]
sub_20F65C4
export/plan0/arm9_main/sub_20F65C4_020F65C4.c
- docs/function_notes.md:649 state setter: clears +116 bit 0x8000, sets bit 0x4000, sets handler +288 from off_20F6628 when the table entry (168*id+68) is empty and no 0x180000 bits are set, sets +292 = off_20F662C, clears bits 24..26 of +116
- docs/function_notes/NEEDS_REVIEW.md:835 state setter: clears +116 bit 0x8000, sets bit 0x4000, sets handler +288 from off_20F6628 when the table entry (168*id+68) is empty [REVIEW]
- docs/function_notes/hk_24.md:24 state setter: clears +116 bit 0x8000, sets bit 0x4000, sets handler +288 from off_20F6628 when the table entry (168*id+68) is empty [REVIEW]
sub_20F6630
export/plan0/arm9_main/sub_20F6630_020F6630.c
- vm_model/src/kart/mushroom.rs:68
sub_20DA820followed bysub_20F6630, normal race branch. - docs/function_notes.md:254 shared item launch removes up component of velocity, appends clamped nonnegative hitter up speed plus 10240 for pickup-flight types or 14336 for vanishing types; chooses flight/wall callbacks by item type registry +128 and battle/actor flags
- docs/function_notes/NEEDS_REVIEW.md:836 per-frame kart ground-motion update: reads a speed/grip table entry (168*id+128), applies friction via sub_214848C [REVIEW]
- docs/function_notes/hk_24.md:25 per-frame kart ground-motion update: reads a speed/grip table entry (168*id+128), applies friction via sub_214848C [REVIEW]
sub_20F6830
export/plan0/arm9_main/sub_20F6830_020F6830.c
- vm_model/src/kart/banana.rs:7 wobble a passing kart gives a resting banana (
sub_20F6830). - vm_model/src/kart/banana.rs:27 A passing kart's wobble (
sub_20F6830): only when the size is within this (squared) of its target. - vm_model/src/kart/banana.rs:290
sub_20F6830: a kart passing a resting banana sets its wobble from the kart's motion - docs/function_notes.md:1657 passing-kart wobble: when |size - target| squared < 429025, +0x100 = (|dot(a2,a3)| * 410 >> 12) >> 1 (Banana::nudge, not wired to kart contacts yet)
sub_20F68B0
export/plan0/arm9_main/sub_20F68B0_020F68B0.c
- vm_model/src/kart/banana.rs:3 (
sub_20F6A6C, updatesub_20F68B0) while its size springs up to full and settles. - vm_model/src/kart/banana.rs:115 sub_20F68B0: stay on the contact point, raised by the radius
- vm_model/src/kart/mushroom.rs:111 sub_20F68B0: stay on the contact point, raised by the radius
sub_20F6A6C
export/plan0/arm9_main/sub_20F6A6C_020F6A6C.c
- vm_model/src/kart/banana.rs:3 (
sub_20F6A6C, updatesub_20F68B0) while its size springs up to full and settles. - vm_model/src/kart/banana.rs:250
sub_20F6A6C: lie on the ground; the landing speed sets the size wobble. - vm_model/src/kart/bomb.rs:396
sub_20F6A6C: lie on the ground; the landing speed sets the size wobble. - vm_model/src/kart/mushroom.rs:237
sub_20F6A6C: lie on the ground; the landing speed sets the size wobble.
sub_20F6BE8
export/plan0/arm9_main/sub_20F6BE8_020F6BE8.c
- docs/function_notes.md:764 kart velocity/position update: projects the velocity against the surface normal (sub_214848C), subtracts the normal component, and normalises with sub_2039860 when the squared length >= 16
- docs/function_notes/NEEDS_REVIEW.md:837 kart velocity/position update: projects velocity against a surface normal (sub_214848C), normalizes with sub_2039860 when |v|^2 >= 16 [REVIEW]
- docs/function_notes/hk_24.md:27 kart velocity/position update: projects velocity against a surface normal (sub_214848C), normalizes with sub_2039860 when |v|^2 >= 16 [REVIEW]
sub_20F6E58
export/plan0/arm9_main/sub_20F6E58_020F6E58.c
- docs/function_notes.md:765 per-frame object move: rotates the direction vector +240 by sub_20397A8 (cross product) and sub_2147FD8 scaled by +268 (sign from +264); sets flag 0x80, subtracts 1024 from +96, applies sub_2148504, decrements the timer +216 and at <= 0 calls sub_20F0F70
- docs/function_notes/NEEDS_REVIEW.md:838 per-frame object move: rotates a direction vector with sub_20397A8 (cross product) scaled by +268 (sign from +264), sets flag 0x80 [REVIEW]
- docs/function_notes/hk_24.md:28 per-frame object move: rotates a direction vector with sub_20397A8 (cross product) scaled by +268 (sign from +264), sets flag 0x80 [REVIEW]
sub_20F6F10
export/plan0/arm9_main/sub_20F6F10_020F6F10.c
- docs/function_notes.md:591 per-frame racer post-update: r = sub_20F7184(a1,0,0); if r <= 1 calls sub_20F91FC(a1, table value at off_20F6FC0 + 168*(+68) + 152); when r == 0 and +116 bit 0x8000000 is set and a2 != 0 and the racer id != 5, calls sub_20FE7A0(id, 3, a3, +78)
- docs/function_notes/NEEDS_REVIEW.md:839 per-frame racer post-update: calls sub_20F7184; if result <= 1 plays sound via sub_20F91FC with table value at 168*id+152 [REVIEW]
- docs/function_notes/hk_24.md:29 per-frame racer post-update: calls sub_20F7184; if result <= 1 plays sound via sub_20F91FC with table value at 168*id+152 [REVIEW]
sub_20F6FC4
export/plan0/arm9_main/sub_20F6FC4_020F6FC4.c
- vm_model/src/kart/shell.rs:133 Bounced once too often (
sub_20F6FC4).
sub_20F705C
export/plan0/arm9_main/sub_20F705C_020F705C.c
- docs/function_notes/hk_24.md:30 thin wrapper, tail-calls function pointer off_20F706C(a1, 1, 1)
sub_20F7070
export/plan0/arm9_main/sub_20F7070_020F7070.c
- vm_model/src/kart/bomb.rs:68 Touched an off-course surface (
sub_20F7070). - vm_model/src/kart/shell.rs:17 Collision type 15: off the course (
sub_20F7070). - vm_model/src/kart/shell.rs:135 Touched an off-course surface (
sub_20F7070).
sub_20F70F0
export/plan0/arm9_main/sub_20F70F0_020F70F0.c
- docs/function_notes/hk_24.md:31 thin wrapper, tail-calls function pointer off_20F7100(a1, 0, 1)
sub_20F7104
export/plan0/arm9_main/sub_20F7104_020F7104.c
- vm_model/src/kart/blue_shell.rs:380
sub_20F7104->sub_20FADE4: the machine resets and the explosion is requested. - vm_model/src/kart/bomb.rs:265
sub_20F7104->sub_20FD8B0: the machine resets and the explosion is requested. - docs/function_notes/NEEDS_REVIEW.md:840 racer post-update: calls sub_20F7184(a1,0,0); if the result is 0, flag 0x8000000 is set and a2 is nonzero, calls sub_20FE7A0(id,0,8,a1+78) [REVIEW]
- docs/function_notes/hk_24.md:32 racer post-update: calls sub_20F7184(a1,0,0); if the result is 0, flag 0x8000000 is set and a2 is nonzero, calls sub_20FE7A0(id,0,8,a1+78) [REVIEW]
sub_20F7184
export/plan0/arm9_main/sub_20F7184_020F7184.c
- docs/function_notes.md:766 racer movement/state dispatcher: returns 2 when flag 0x80000 is set; otherwise runs the racer type's movement callback (+52 of table entry 168*id) when the state requires it
- docs/function_notes/NEEDS_REVIEW.md:841 racer movement/state dispatcher: early-outs on flag 0x80000; in the normal branch sets speed +268 from dword_20F7390 (plus 348*sub_21482CC capped) [REVIEW]
- docs/function_notes/hk_24.md:33 racer movement/state dispatcher: early-outs on flag 0x80000; in the normal branch sets speed +268 from dword_20F7390 (plus 348*sub_21482CC capped) [REVIEW]
sub_20F73A4
export/plan0/arm9_main/sub_20F73A4_020F73A4.c
- docs/function_notes/hk_24.md:34 allocates a 12-byte block from the heap (sub_20364E8/sub_20364E0/sub_2036BEC) and stores the pointer in off_20F73D0
sub_20F73D4
export/plan0/arm9_main/sub_20F73D4_020F73D4.c
- docs/function_notes.md:592 thin wrapper: calls the function pointer at off_20F73F8 with the table entry off_20F73F4 + 68(racer id) and a1
- docs/function_notes/NEEDS_REVIEW.md:842 thin wrapper, calls function pointer off_20F73F8 with table entry 68*(a1+68) from off_20F73F4 (per-racer type dispatch) [REVIEW]
- docs/function_notes/hk_24.md:35 thin wrapper, calls function pointer off_20F73F8 with table entry 68*(a1+68) from off_20F73F4 (per-racer type dispatch) [REVIEW]
sub_20F73FC
export/plan0/arm9_main/sub_20F73FC_020F73FC.c
- docs/function_notes/hk_24.md:36 if flags 0x180000 are clear, sets handler +288 from off_20F7428 and ORs in flag dword_20F742C; returns object
sub_20F7430
export/plan0/arm9_main/sub_20F7430_020F7430.c
- docs/function_notes.md:767 racer state update keyed on flags 0x8000000, 0x10000000 and 0x20000000 and the +120 bits 0xF00; sets the handler +288 = off_20F7584 in the active branch
- docs/function_notes/NEEDS_REVIEW.md:843 racer state update keyed on flags 0x8000000/0x10000000/0x20000000 and +120 bits 0xF00 [REVIEW]
- docs/function_notes/hk_24.md:37 racer state update keyed on flags 0x8000000/0x10000000/0x20000000 and +120 bits 0xF00 [REVIEW]
sub_20F758C
export/plan0/arm9_main/sub_20F758C_020F758C.c
- docs/function_notes.md:582 per-frame racer countdown: if flag 0x8000 of +116 is set calls sub_20F68B0; decrements the 16-bit timer at +216; at <= 0 calls sub_20F0F70 on the table entry off_20F75FC + 68*(+68); at timer < 10 calls sub_20F9C40; otherwise returns the timer
- docs/function_notes/NEEDS_REVIEW.md:844 per-frame racer countdown: if flag 0x8000 calls sub_20F68B0; decrements 16-bit timer +216 [REVIEW]
- docs/function_notes/hk_24.md:38 per-frame racer countdown: if flag 0x8000 calls sub_20F68B0; decrements 16-bit timer +216 [REVIEW]
sub_20F7600
export/plan0/arm9_main/sub_20F7600_020F7600.c
- docs/function_notes/hk_24.md:39 state entry: when flags 0x180000 are clear, sets handler +288 from off_20F7650 if table entry (168*id+64) is empty, then ORs flag dword_20F7654
sub_20F7658
export/plan0/arm9_main/sub_20F7658_020F7658.c
- docs/function_notes.md:768 like sub_20F7430 but uses handler off_20F77F0, flag dword_20F77F4 and event id 4 via sub_20FE7A0
- docs/function_notes/NEEDS_REVIEW.md:845 like sub_20F7430 but uses handler off_20F77F0, flag dword_20F77F4 and event id 4 via sub_20FE7A0 [REVIEW]
- docs/function_notes/hk_24.md:40 like sub_20F7430 but uses handler off_20F77F0, flag dword_20F77F4 and event id 4 via sub_20FE7A0 [REVIEW]
sub_20F77F8
export/plan0/arm9_main/sub_20F77F8_020F77F8.c
- vm_model/src/kart/item_contact.rs:1 Item-versus-item contact (
sub_20EDF10->sub_20EE160->sub_20F77F8): every item a slot owns is tested - vm_model/src/kart/item_contact.rs:82
sub_20F77F8for contact indexidxofaagainst the other item atothermoving atother_velocity - docs/function_notes.md:769 large per-frame racer collision and motion update: wall-contact reflection via handler +292 and position clamping to radius +224
- docs/function_notes/NEEDS_REVIEW.md:846 large per-frame racer collision/motion update (456 bytes): wall-contact reflection via handler +292, position clamping to radius +224 [REVIEW]
- docs/function_notes/hk_24.md:41 large per-frame racer collision/motion update (456 bytes): wall-contact reflection via handler +292, position clamping to radius +224 [REVIEW]
sub_20F7C60
export/plan0/arm9_main/sub_20F7C60_020F7C60.c
- docs/function_notes/hk_24.md:42 sound wrapper: if a2 != 1, calls sub_21090C4(obj, a2, 127, 0) to play sound id a2 at full volume; returns obj
sub_20F7C90
export/plan0/arm9_main/sub_20F7C90_020F7C90.c
- vm_model/src/kart/hand.rs:215 One draw read as a 16-bit angle (
sub_20F7C90: the high word's top 16 bits). - vm_model/src/kart/item_contact.rs:131
sub_20F7C90: an item that has touched a wall (bit 0x1000000, not resting) overlapping another is not pushed - docs/function_notes.md:770 racer-to-track collision response: when flag 0x2000000 is set, normalises the velocity (+92) and scales it by dword_20F7E98 when its component is above 2048
- docs/function_notes/NEEDS_REVIEW.md:847 racer-to-track collision response: normalizes velocity (+92) when flag 0x2000000 is set [REVIEW]
- docs/function_notes/hk_24.md:43 racer-to-track collision response: normalizes velocity (+92) when flag 0x2000000 is set [REVIEW]
sub_20F7EA8
export/plan0/arm9_main/sub_20F7EA8_020F7EA8.c
- vm_model/src/kart/item_contact.rs:20
0x02159B78, 14 x 14 bytes: row = this item's type, column = the other's (sub_20F7EA8). - vm_model/src/kart/item_contact.rs:66 Contact index of
aagainstb(sub_20F7EA8). - docs/function_notes.md:583 returns one byte from the 14-column matrix at off_20F7EC4, row = a1+68 (racer id), column = a2+68 (other racer id)
- docs/function_notes/NEEDS_REVIEW.md:848 lookup of one byte in a 14-stride matrix (off_20F7EC4) indexed by the two racer ids (+68) [REVIEW]
- docs/function_notes/hk_24.md:44 lookup of one byte in a 14-stride matrix (off_20F7EC4) indexed by the two racer ids (+68) [REVIEW]
sub_20F7EC8
export/plan0/arm9_main/sub_20F7EC8_020F7EC8.c
- vm_model/src/item_slot.rs:2
MainRace.carc/Item/ItemSlotList.dat(loaded bysub_20F7EC8). - vm_model/src/item_slot.rs:117 (
sub_20F7EC8): races 0 (humans) / 1 (CPUs); Balloon Battle 7 / 8 and Shine Runners
sub_20F80C0
export/plan0/arm9_main/sub_20F80C0_020F80C0.c
- docs/function_notes.md:650 copies a2 rows (of 18 halfwords) from the source table off_20F8138, taken through an index permutation, into the buffer at a1+4 and zero-fills the rest up to 8 rows
- docs/function_notes/NEEDS_REVIEW.md:849 thumb routine: copies up to 8 rows of 18 halfwords from a source table (off_20F8138, index permutation) into a1+4, zero-filling the remaining rows [REVIEW]
- docs/function_notes/hk_24.md:45 thumb routine: copies up to 8 rows of 18 halfwords from a source table (off_20F8138, index permutation) into a1+4, zero-filling the remaining rows [REVIEW]
sub_20F813C
export/plan0/arm9_main/sub_20F813C_020F813C.c
- docs/function_notes.md:651 returns a1 + a1[1]*a1[0] + 2, the cursor past a compact record block
- docs/function_notes/NEEDS_REVIEW.md:850 thumb helper returning a cursor past a record: a1 + a1[1]*a1[0] + 2 [REVIEW]
- docs/function_notes/hk_24.md:46 thumb helper returning a cursor past a record: a1 + a1[1]*a1[0] + 2 [REVIEW]
sub_20F8148
export/plan0/arm9_main/sub_20F8148_020F8148.c
- docs/function_notes.md:652 loader for a compact record table: reads count (a2[0]) and row length (a2[1]), stores the count in a1[0], allocates 36*(count+1) bytes into a1[1] and copies the halfword rows
- docs/function_notes/NEEDS_REVIEW.md:851 thumb loader for a compact record table: reads count and row length, allocates 36*(n+1) bytes from the heap into a1[1] [REVIEW]
- docs/function_notes/hk_24.md:47 thumb loader for a compact record table: reads count and row length, allocates 36*(n+1) bytes from the heap into a1[1] [REVIEW]
sub_20F81B8
export/plan0/arm9_main/sub_20F81B8_020F81B8.c
- docs/function_notes/hk_24.md:48 setter, stores a2 into object +20
sub_20F81C0
export/plan0/arm9_main/sub_20F81C0_020F81C0.c
- docs/function_notes.md:593 resets a racer item slot: if the racer's id (kart +504 u16) equals the byte at +98 of *off_20F824C[0], calls sub_20BB5CC; subtracts the slot's +12 amount from the pool counter at +28 of its table entry; sets slot[0],[1],[8] = 0 and [3],[4],[5] = 19 (no item); returns 19
- docs/function_notes/NEEDS_REVIEW.md:852 resets a racer-item slot: calls sub_20BB5CC if the racer's id matches off_20F824C entry [REVIEW]
- docs/function_notes/hk_24.md:49 resets a racer-item slot: calls sub_20BB5CC if the racer's id matches off_20F824C entry [REVIEW]
sub_20F8258
export/plan0/arm9_main/sub_20F8258_020F8258.c
- docs/function_notes/hk_24.md:50 ticks three global countdown counters (off_20F8298, off_20F829C, off_20F82A0), each decremented if >0; returns the third pointer
sub_20F82A4
export/plan0/arm9_main/sub_20F82A4_020F82A4.c
- docs/function_notes/hk_24.md:51 sets global off_20F82C0 to 900, or 1200 when the argument is nonzero; returns the value
sub_20F82C4
export/plan0/arm9_main/sub_20F82C4_020F82C4.c
- docs/function_notes/hk_24.md:52 sets global off_20F82E4 to dword_20F82E0, or that plus 300 when the argument is nonzero
sub_20F82E8
export/plan0/arm9_main/sub_20F82E8_020F82E8.c
- docs/function_notes/hk_24.md:53 sets global off_20F8308 to dword_20F8304, or that plus 300 when the argument is nonzero
sub_20F830C
export/plan0/arm9_main/sub_20F830C_020F830C.c
- docs/function_notes.md:771 cycles a per-player HUD/select index: mode 1 walks a candidate table (off_20F8410, off_20F840C, off_20F8414) avoiding repeats through a shared pointer
- docs/function_notes/NEEDS_REVIEW.md:853 cycles a per-player HUD/select index: mode 1 walks a candidate table (off_20F8410/off_20F840C/off_20F8414) avoiding repeats using a shared PRNG at [REVIEW]
- docs/function_notes/hk_24.md:54 cycles a per-player HUD/select index: mode 1 walks a candidate table (off_20F8410/off_20F840C/off_20F8414) avoiding repeats using a shared PRNG at [REVIEW]
sub_20F8418
export/plan0/arm9_main/sub_20F8418_020F8418.c
- docs/function_notes.md:594 resets an item slot record: if slot[8] is zero, decrements the pool counter (+28) of the entry by the amount at +12; then clears [0],[1],[8] and sets [3],[4],[5] = 19
- docs/function_notes/NEEDS_REVIEW.md:854 resets a racer-item slot record: if result[8] is zero, decrements the table counter (+28) by the entry value at +12 [REVIEW]
- docs/function_notes/hk_24.md:55 resets a racer-item slot record: if result[8] is zero, decrements the table counter (+28) by the entry value at +12 [REVIEW]
sub_20F8498
export/plan0/arm9_main/sub_20F8498_020F8498.c
- docs/function_notes.md:653 releases an item slot: always decrements the pool counter (+28) by the amount at +12 of the slot's entry, then clears [0],[1],[8] and sets [3],[4],[5] = 19
- docs/function_notes/NEEDS_REVIEW.md:855 same as sub_20F8418 but always decrements the table counter first, then resets the record fields [REVIEW]
- docs/function_notes/hk_24.md:56 same as sub_20F8418 but always decrements the table counter first, then resets the record fields [REVIEW]
sub_20F850C
export/plan0/arm9_main/sub_20F850C_020F850C.c
- docs/function_notes.md:772 per-racer item/penalty timer state machine: state 1 counts frames (+4) and transitions on timeout or a button combination; state 2 counts frames against 2 * a1[10]
- docs/function_notes/NEEDS_REVIEW.md:856 per-racer item/penalty timer state machine: state 1 counts frames and triggers a transition on timeout or button combo (flag mask dword_20F86C0) [REVIEW]
- docs/function_notes/hk_24.md:57 per-racer item/penalty timer state machine: state 1 counts frames and triggers a transition on timeout or button combo (flag mask dword_20F86C0) [REVIEW]
sub_20F86C4
export/plan0/arm9_main/sub_20F86C4_020F86C4.c
- docs/function_notes.md:773 racer-item state setter: sets the sentinel 19 fields, decrements the table counter when *a1 was set, otherwise calls sub_20F45F0 on the sub-object
- docs/function_notes/NEEDS_REVIEW.md:857 racer-item state setter: sets sentinel 19 fields, decrements the table counter when *a1 was set, calls sub_20F45F0 on a sub-object otherwise [REVIEW]
- docs/function_notes/hk_24.md:58 racer-item state setter: sets sentinel 19 fields, decrements the table counter when *a1 was set, calls sub_20F45F0 on a sub-object otherwise [REVIEW]
sub_20F87A8
export/plan0/arm9_main/sub_20F87A8_020F87A8.c
- docs/function_notes.md:774 racer item-use entry: when the state is 5 (item chance) sets timers and values from the racer position and calls sub_20BE930
- docs/function_notes/NEEDS_REVIEW.md:858 racer item-use entry: when state is 5 (item-chance) it sets timers/values from the racer's position and calls sub_20BE930 [REVIEW]
- docs/function_notes/hk_24.md:59 racer item-use entry: when state is 5 (item-chance) it sets timers/values from the racer's position and calls sub_20BE930 [REVIEW]
sub_20F89B0
export/plan0/arm9_main/sub_20F89B0_020F89B0.c
- docs/function_notes/hk_24.md:60 constructor for a per-racer record: stores the racer pointer at +24, clears state fields to 0 or sentinel 19
sub_20F8A04
export/plan0/arm9_main/sub_20F8A04_020F8A04.c
- vm_model/src/item_slot.rs:1 The item roulette: what an item box gives (
sub_20F8A04), from the odds in - vm_model/src/item_slot.rs:11 and the alternative weighting of items 9+ (
a1ofsub_20F8A04). - vm_model/src/item_slot.rs:110
sub_20F8A04: draw an item for a kart inplace(1-based);humanpicks the player
sub_20F8D9C
export/plan0/arm9_main/sub_20F8D9C_020F8D9C.c
- docs/function_notes.md:654 sound-emitter init: stores a2 at +72, calls sub_20E0650 on (a1 + dword_20F8DD4), sub_2109110(a1, table value 168*a3+160, a1+80), returns sub_2109054(a1)
- docs/function_notes/NEEDS_REVIEW.md:859 init for a sound-emitter object: stores a2 at +72, calls sub_20E0650 on a sub-field, sub_2109110 with table value (168*a3+160) and +80 [REVIEW]
- docs/function_notes/hk_24.md:61 init for a sound-emitter object: stores a2 at +72, calls sub_20E0650 on a sub-field, sub_2109110 with table value (168*a3+160) and +80 [REVIEW]
sub_20F8DDC
export/plan0/arm9_main/sub_20F8DDC_020F8DDC.c
- docs/function_notes.md:595 when the game-state byte at *off_20F8E34+8 is 4 and the racer id (+68) is 0 or 1, calls sub_208B7BC(dword_20F8E38, a1+80) and sub_208B7BC(1088, a1+80) (two effect spawns)
- docs/function_notes/NEEDS_REVIEW.md:860 when game-state byte (off_20F8E34 +8) is 4 and racer index <= 1 [REVIEW]
- docs/function_notes/hk_24.md:62 when game-state byte (off_20F8E34 +8) is 4 and racer index <= 1 [REVIEW]
sub_20F8E3C
export/plan0/arm9_main/sub_20F8E3C_020F8E3C.c
- docs/function_notes/hk_24.md:63 if object flag +124 bit 0 is set, calls sub_20719BC(obj, a2); otherwise returns obj
sub_20F8E78
export/plan0/arm9_main/sub_20F8E78_020F8E78.c
- docs/function_notes.md:775 racer/kart init: resets the timer +112 from dword_20F9048, copies it to +104/+108, computes speed fields +220/+224 from table entry 168*id, updates collision via sub_20D5148 and calls sub_208ADC8 on +124
- docs/function_notes/NEEDS_REVIEW.md:861 racer/kart init: resets timer +112 from dword_20F9048, copies it to +104/+108, computes speed fields +220/+224 from table 168*id [REVIEW]
- docs/function_notes/hk_24.md:64 racer/kart init: resets timer +112 from dword_20F9048, copies it to +104/+108, computes speed fields +220/+224 from table 168*id [REVIEW]
sub_20F9054
export/plan0/arm9_main/sub_20F9054_020F9054.c
- docs/function_notes.md:655 state transition: picks the handler from table off_20F90B4 (a4 == 0, callback at +72 of entry a2) or off_20F90B8 (a4 != 0), calls sub_20F9A14 reset then the handler, clears +116 bit 0x400000 and sets bit 0x10000000
- docs/function_notes/NEEDS_REVIEW.md:862 state transition: picks handler (off_20F90B4 table or off_20F90B8 when a4 set), calls sub_20F9A14 reset then the handler [REVIEW]
- docs/function_notes/hk_24.md:65 state transition: picks handler (off_20F90B4 table or off_20F90B8 when a4 set), calls sub_20F9A14 reset then the handler [REVIEW]
sub_20F90BC
export/plan0/arm9_main/sub_20F90BC_020F90BC.c
- docs/function_notes.md:656 sets +64 = +212 & 0x3FFFFFE0 and tail-calls off_20F90D8(a1, a1+80, +212)
- docs/function_notes/NEEDS_REVIEW.md:863 sets +64 from flags +212 (masked 0x3FFFFFE0) and tail-calls function pointer off_20F90D8(a1, a1+80, +212) [REVIEW]
- docs/function_notes/hk_24.md:66 sets +64 from flags +212 (masked 0x3FFFFFE0) and tail-calls function pointer off_20F90D8(a1, a1+80, +212) [REVIEW]
sub_20F90DC
export/plan0/arm9_main/sub_20F90DC_020F90DC.c
- docs/function_notes/hk_24.md:67 if sound flag 0x400000 is set, calls sub_2109054 (sound stop), zeroes +48 and clears flag 0x400000
sub_20F9114
export/plan0/arm9_main/sub_20F9114_020F9114.c
- docs/function_notes/hk_24.md:68 attaches sound object: sub_2109038 with table value (168*id+160) and position a1+80, sub_210CF9C(a1,1), sets flag 0x400000
sub_20F9160
export/plan0/arm9_main/sub_20F9160_020F9160.c
- docs/function_notes.md:657 range test on the masked distance (+212 & 0x3FFFFFE0): true when it is above dword_20F91C0 and not in the low band (flag 0x10000 clear and value <= dword_20F91BC)
- docs/function_notes/NEEDS_REVIEW.md:864 range test on the masked distance metric at +212: true when it is above dword_20F91C0 and not in the flag 0x10000 low band (<= dword_20F91BC) [REVIEW]
- docs/function_notes/hk_24.md:69 range test on the masked distance metric at +212: true when it is above dword_20F91C0 and not in the flag 0x10000 low band (<= dword_20F91BC) [REVIEW]
sub_20F91C4
export/plan0/arm9_main/sub_20F91C4_020F91C4.c
- docs/function_notes/hk_24.md:70 returns whether masked +212 value exceeds a2*a2 (squared-radius threshold)
sub_20F91E0
export/plan0/arm9_main/sub_20F91E0_020F91E0.c
- docs/function_notes/hk_24.md:71 returns whether timer +112 >= dword_20F91F8
sub_20F91FC
export/plan0/arm9_main/sub_20F91FC_020F91FC.c
- docs/function_notes.md:658 plays sound a2 at the object position (+80) via sub_210B7A8 when a2 != 1 and the masked +212 distance is below the threshold at off_20F9288+0x44; returns that threshold otherwise
- docs/function_notes/NEEDS_REVIEW.md:865 plays sound effect a2 at the object position (+80) via sub_210B7A8 when the masked +212 distance is below a threshold from off_20F9288+0x44 (skipped [REVIEW]
- docs/function_notes/hk_24.md:72 plays sound effect a2 at the object position (+80) via sub_210B7A8 when the masked +212 distance is below a threshold from off_20F9288+0x44 (skipped [REVIEW]
sub_20F9290
export/plan0/arm9_main/sub_20F9290_020F9290.c
- vm_model/src/kart/banana.rs:5 Not ported: wall hits in flight (
sub_20F92E8/sub_20F9290), bouncing drops (a positive
sub_20F92E8
export/plan0/arm9_main/sub_20F92E8_020F92E8.c
- vm_model/src/kart/banana.rs:5 Not ported: wall hits in flight (
sub_20F92E8/sub_20F9290), bouncing drops (a positive - vm_model/src/kart/banana.rs:22 Wall hits in flight (
sub_20F92E8->sub_20EAA14): the part along the wall keeps 0.7, the part into it - vm_model/src/kart/bomb.rs:12 flight (
sub_20F92E8), the fuse shortening near the local player (sub_20FDE18/sub_20FDD78), - vm_model/src/kart/mushroom.rs:247
sub_20F92E8/sub_20EAA14: slide damping and a minimum outward bounce. - docs/function_notes.md:1655 item wall hit = sub_20EAA14 with keep 2867, back 1843, push 2765 (banana::wall_reflect); clears the owner shield (+120 bit 0x4000)
sub_20F9320
export/plan0/arm9_main/sub_20F9320_020F9320.c
- docs/function_notes/hk_24.md:73 clears bits a2 in flag word +252
sub_20F9334
export/plan0/arm9_main/sub_20F9334_020F9334.c
- vm_model/src/kart/banana.rs:2 landing check under the banana (
sub_20F9334), then it sits on the ground - vm_model/src/kart/banana.rs:13 Sphere test query flags for items in flight and on the ground (
sub_20F2DF0,sub_20F9334). - vm_model/src/kart/banana.rs:225
sub_20F9334: a smaller sphere half a radius lower must find floor too (or the floor - vm_model/src/kart/bomb.rs:371
sub_20F9334: a smaller sphere half a radius lower must find floor too (or the floor - vm_model/src/kart/mushroom.rs:208
sub_20F9334: a smaller sphere half a radius lower must find floor too (or the floor
sub_20F944C
export/plan0/arm9_main/sub_20F944C_020F944C.c
- docs/function_notes.md:776 racer vs course-object hit: sphere test (sub_20D3E34) of +80 against object a2, optional position snap via sub_2148504 when the object is not flagged 0x40 and sub_20D6968 passes
- docs/function_notes/NEEDS_REVIEW.md:866 racer vs course-object hit: sub_20D3E34 sphere test on +80 against object a2, optional position snap via sub_2148504 [REVIEW]
- docs/function_notes/hk_24.md:74 racer vs course-object hit: sub_20D3E34 sphere test on +80 against object a2, optional position snap via sub_2148504 [REVIEW]
sub_20F95D4
export/plan0/arm9_main/sub_20F95D4_020F95D4.c
- docs/function_notes.md:777 racer-vs-racer collision: checks ids (+218), flags 0x1000, 0x8000 and 0x10000000 and the table compare, then runs sphere overlap sub_20F9780 both ways
- docs/function_notes/NEEDS_REVIEW.md:867 racer-vs-racer collision: checks ids (+218), flags 0x1000/0x8000/0x10000000, runs sphere overlap sub_20F9780 both ways [REVIEW]
- docs/function_notes/hk_24.md:75 racer-vs-racer collision: checks ids (+218), flags 0x1000/0x8000/0x10000000, runs sphere overlap sub_20F9780 both ways [REVIEW]
sub_20F9780
export/plan0/arm9_main/sub_20F9780_020F9780.c
- docs/function_notes/hk_24.md:76 sphere-overlap test: true when squared distance between a1 position (+80..+88) and a2 is less than (a3 + a1[56])^2
sub_20F97E0
export/plan0/arm9_main/sub_20F97E0_020F97E0.c
- vm_model/src/kart/items.rs:82
sub_20FA4C8/sub_20F97E0: the first item object whose sphere overlaps the kart's contact
sub_20F9880
export/plan0/arm9_main/sub_20F9880_020F9880.c
- docs/function_notes/hk_24.md:77 getter, returns table value at 168*id+132 from off_20F989C
sub_20F98A0
export/plan0/arm9_main/sub_20F98A0_020F98A0.c
- vm_model/src/kart/hand.rs:444 sub_20F98A0: the next sphere test starts from the kart; flat floor until it lands
sub_20F992C
export/plan0/arm9_main/sub_20F992C_020F992C.c
- docs/function_notes.md:596 deactivates a racer: releases its collision slot (+218 via sub_20D5344 unless -1); if flag 0x400000 is set, calls sub_2109054, zeroes +48 and clears the flag; sets +116 bit 4; tail-calls the type callback at +60 of the table entry (168*id)
- docs/function_notes/NEEDS_REVIEW.md:868 deactivate racer: releases collision via sub_20D5344 (+218), stops sound (sub_2109054) if flag 0x400000 is set [REVIEW]
- docs/function_notes/hk_24.md:78 deactivate racer: releases collision via sub_20D5344 (+218), stops sound (sub_2109054) if flag 0x400000 is set [REVIEW]
sub_20F99B8
export/plan0/arm9_main/sub_20F99B8_020F99B8.c
- docs/function_notes.md:597 places a racer at position a4: copies a4[0..2] to +80..+88, sets +120 = a3, calls sub_20F9A14 (reset); when +116 bit 0x8000000 is set, sets +78 = sub_20FF178(a1)
- docs/function_notes/NEEDS_REVIEW.md:869 place racer at position a4 with flags a3: copies position to +80..+88, sets +120, calls sub_20F9A14 reset [REVIEW]
- docs/function_notes/hk_24.md:79 place racer at position a4 with flags a3: copies position to +80..+88, sets +120, calls sub_20F9A14 reset [REVIEW]
sub_20F9A14
export/plan0/arm9_main/sub_20F9A14_020F9A14.c
- docs/function_notes.md:778 racer object reset: sets the racer id +68, clears flags +116, the speeds and timers (+220/+224 = 123, +216 = 31), sets the collision id +218 = -1 and calls the type init callback
- docs/function_notes/NEEDS_REVIEW.md:870 racer object reset: sets id +68, clears flag and timer fields, sets sentinel 123 speeds, timer +216 = 31, collision id +218 = -1, pointer +208 [REVIEW]
- docs/function_notes/hk_24.md:80 racer object reset: sets id +68, clears flag and timer fields, sets sentinel 123 speeds, timer +216 = 31, collision id +218 = -1, pointer +208 [REVIEW]
sub_20F9B0C
export/plan0/arm9_main/sub_20F9B0C_020F9B0C.c
- docs/function_notes.md:598 per-frame racer update: if +116 bit 0x8000 is set calls sub_20F7658(a1, 1); otherwise scales velocity +92/+96/+100 by dword_20F9BA4 / 4096 and calls sub_20F6FC4(a1, 1)
- docs/function_notes/NEEDS_REVIEW.md:871 per-frame racer update: if flag 0x8000 calls sub_20F7658(a1,1); otherwise scales velocity +92..+100 by dword_20F9BA4 and calls sub_20F6FC4(a1,1) [REVIEW]
- docs/function_notes/hk_24.md:81 per-frame racer update: if flag 0x8000 calls sub_20F7658(a1,1); otherwise scales velocity +92..+100 by dword_20F9BA4 and calls sub_20F6FC4(a1,1) [REVIEW]
sub_20F9BA8
export/plan0/arm9_main/sub_20F9BA8_020F9BA8.c
- docs/function_notes.md:659 if the timer at +284 > 300, flag 0x8000 is set and handler +288 equals off_20F9C04, calls sub_20F7658(a1, 1); returns the object
- docs/function_notes/NEEDS_REVIEW.md:872 if timer +284 > 300, flag 0x8000 is set and handler +288 equals off_20F9C04, calls sub_20F7658(a1,1); returns the object [REVIEW]
- docs/function_notes/hk_24.md:82 if timer +284 > 300, flag 0x8000 is set and handler +288 equals off_20F9C04, calls sub_20F7658(a1,1); returns the object [REVIEW]
sub_20F9C08
export/plan0/arm9_main/sub_20F9C08_020F9C08.c
- docs/function_notes.md:660 predicate form of sub_20F9BA8's test, comparing handler +288 with off_20F9C3C
- docs/function_notes/NEEDS_REVIEW.md:873 boolean predicate form of the same test as sub_20F9BA8, comparing handler +288 with off_20F9C3C [REVIEW]
- docs/function_notes/hk_24.md:83 boolean predicate form of the same test as sub_20F9BA8, comparing handler +288 with off_20F9C3C [REVIEW]
sub_20F9C40
export/plan0/arm9_main/sub_20F9C40_020F9C40.c
- docs/function_notes/hk_24.md:84 refreshes collision id +218 via sub_20D5344 when it is not -1
sub_20F9C6C
export/plan0/arm9_main/sub_20F9C6C_020F9C6C.c
- vm_model/src/kart/blue_shell.rs:437 (
sub_20F9C6C: from the dive on, karts can touch it) - docs/function_notes/NEEDS_REVIEW.md:874 allocates a collision for the object when +218 is -1: sub_20D555C(pos+80, radius +224, 0x4000, obj), stores the id in +218 [REVIEW]
- docs/function_notes/hk_24.md:85 allocates a collision for the object when +218 is -1: sub_20D555C(pos+80, radius +224, 0x4000, obj), stores the id in +218 [REVIEW]
sub_20F9CA8
export/plan0/arm9_main/sub_20F9CA8_020F9CA8.c
- docs/function_notes.md:661 if the collision id at +218 is -1, allocates it with sub_20D555C(a1+80, radius +224 + 0xA000, 0x4000, a1) and stores it in +218
- docs/function_notes/NEEDS_REVIEW.md:875 same as sub_20F9C6C but uses radius +224 + 40960 (0xA000) for the collision allocation [REVIEW]
- docs/function_notes/hk_24.md:86 same as sub_20F9C6C but uses radius +224 + 40960 (0xA000) for the collision allocation [REVIEW]
sub_20F9CE8
export/plan0/arm9_main/sub_20F9CE8_020F9CE8.c
- vm_model/src/kart/blue_shell.rs:959 size eases to the dive size (
sub_20F9CE8) - docs/function_notes/NEEDS_REVIEW.md:876 smoothing step: if +256 is nonzero, moves +108 toward +256 by dword_20F9DC0, sets +104 as overshoot (2*+112 - +108) [REVIEW]
- docs/function_notes/hk_24.md:87 smoothing step: if +256 is nonzero, moves +108 toward +256 by dword_20F9DC0, sets +104 as overshoot (2*+112 - +108) [REVIEW]
sub_20F9DC8
export/plan0/arm9_main/sub_20F9DC8_020F9DC8.c
- vm_model/src/kart/banana.rs:44 Size spring (
sub_20F9DC8): stiffness, damping, and the dead zone that stops it. - vm_model/src/kart/banana.rs:160
sub_20F9DC8: the size overshoots its target and settles. - vm_model/src/kart/bomb.rs:303
sub_20F9DC8: the size overshoots its target and settles. - vm_model/src/kart/mushroom.rs:30 Size spring (
sub_20F9DC8): stiffness, damping, and the dead zone that stops it. - vm_model/src/kart/mushroom.rs:152
sub_20F9DC8: the size overshoots its target and settles. - docs/function_notes.md:262 shared item scale spring: stiffness819, damping3072, strict +/-41 deadzone, squash = 2*target - size, updates collision radii when changing; all mushroom landing spring ticks match original
sub_20F9F08
export/plan0/arm9_main/sub_20F9F08_020F9F08.c
- docs/function_notes.md:662 sets speed fields +104 = (+112a2)>>12 and +108 = (+112a3)>>12, recomputes +220/+224 from the table entry 168*id (+100/+104) and updates the collision with sub_20D5148(+218, +224 + 0xA000)
- docs/function_notes/NEEDS_REVIEW.md:877 sets speed fields +104/+108 from arguments a2/a3 scaled by +112, recomputes +220/+224 from table 168*id entries, updates collision via sub_20D5148 [REVIEW]
- docs/function_notes/hk_24.md:88 sets speed fields +104/+108 from arguments a2/a3 scaled by +112, recomputes +220/+224 from table 168*id entries, updates collision via sub_20D5148 [REVIEW]
sub_20F9FA8
export/plan0/arm9_main/sub_20F9FA8_020F9FA8.c
- docs/function_notes.md:663 resets +104/+108 to +112, sets +116 bit 0x40, recomputes +220/+224 from the table entry and calls sub_20D5148(+218, +224) (no 0xA000 offset, unlike sub_20F9F08)
- docs/function_notes/NEEDS_REVIEW.md:878 resets +104/+108 to +112, recomputes +220/+224 from table 168*id entries, updates collision via sub_20D5148 [REVIEW]
- docs/function_notes/hk_24.md:89 resets +104/+108 to +112, recomputes +220/+224 from table 168*id entries, updates collision via sub_20D5148 [REVIEW]
sub_20FA030
export/plan0/arm9_main/sub_20FA030_020FA030.c
- vm_model/src/kart/blue_shell.rs:395 Generic growth (
sub_20FA0B8/sub_20FA030): quickly to 1.0, then by 82 to full size. - vm_model/src/kart/shell.rs:193 Size growth (
sub_20FA0B8/sub_20FA030): quickly up to 1.0, then by the type's step - docs/function_notes.md:261 copies target size to both visible scale axes, updates course/hit radii from item-type multipliers, marks resized flag 0x40 and updates broadphase radius
sub_20FA0B8
export/plan0/arm9_main/sub_20FA0B8_020FA0B8.c
- vm_model/src/kart/blue_shell.rs:395 Generic growth (
sub_20FA0B8/sub_20FA030): quickly to 1.0, then by 82 to full size. - vm_model/src/kart/shell.rs:193 Size growth (
sub_20FA0B8/sub_20FA030): quickly up to 1.0, then by the type's step - docs/function_notes.md:260 grows item target size +112 by supplied step, clamps to supplied target and returns whether it changed
sub_20FA0E8
export/plan0/arm9_main/sub_20FA0E8_020FA0E8.c
- docs/function_notes.md:664 switch on a2: 0 returns the table byte (+76 of entry a1) + 1; 1 returns 18; 2 returns 3; 3 returns 4 when a1 == 11 else 3; any other a2 returns 0
- docs/function_notes/NEEDS_REVIEW.md:879 thumb lookup switch on a2 (0..3): returns a per-character/table byte (+76 of table entry for a1) or constants 18 and 3 or 3/4 depending on a1==11 [REVIEW]
- docs/function_notes/hk_24.md:90 thumb lookup switch on a2 (0..3): returns a per-character/table byte (+76 of table entry for a1) or constants 18 and 3 or 3/4 depending on a1==11 [REVIEW]
sub_20FA13C
export/plan0/arm9_main/sub_20FA13C_020FA13C.c
- docs/function_notes.md:779 race-start subsystem init: heap allocation, then sub_20F7EC8, sub_20F82E8(1), sub_20F82C4(1), sub_20F82A4(1), sub_20F4B8C, sub_20F1A24, sub_20F73A4, sub_20F357C
- docs/function_notes/NEEDS_REVIEW.md:880 race-start subsystem init: heap allocations, calls sub_20F7EC8, sub_20F82E8(1), sub_20F82C4(1), sub_20F82A4(1), sub_20F4B8C, sub_20F1A24, sub_20F73A4 [REVIEW]
- docs/function_notes/hk_24.md:91 race-start subsystem init: heap allocations, calls sub_20F7EC8, sub_20F82E8(1), sub_20F82C4(1), sub_20F82A4(1), sub_20F4B8C, sub_20F1A24, sub_20F73A4 [REVIEW]
sub_20FA294
export/plan0/arm9_main/sub_20FA294_020FA294.c
- docs/function_notes.md:780 spawner: scans the object list for type 109 entries, runs a course sphere test (sub_1FFDEE4), and spawns objects from the pool via sub_20F1048
- docs/function_notes/NEEDS_REVIEW.md:881 thumb spawner: scans the object list for type 109 entries, runs a course sphere test sub_1FFDEE4, spawns objects from the pool (sub_20F1048 [REVIEW]
- docs/function_notes/hk_24.md:92 thumb spawner: scans the object list for type 109 entries, runs a course sphere test sub_1FFDEE4, spawns objects from the pool (sub_20F1048 [REVIEW]
sub_20FA3D0
export/plan0/arm9_main/sub_20FA3D0_020FA3D0.c
- docs/function_notes.md:781 spawn helper: takes an object from pool off_20FA4AC via sub_20F1048, links it with sub_20F0EA0 and initialises it with sub_20F98A0; for type 8 ORs the flag off_20FA4B0 into +120
- docs/function_notes/NEEDS_REVIEW.md:882 spawn helper: takes an object from pool off_20FA4AC via sub_20F1048, links it with sub_20F0EA0 and initializes with sub_20F98A0 [REVIEW]
- docs/function_notes/hk_24.md:93 spawn helper: takes an object from pool off_20FA4AC via sub_20F1048, links it with sub_20F0EA0 and initializes with sub_20F98A0 [REVIEW]
sub_20FA4B4
export/plan0/arm9_main/sub_20FA4B4_020FA4B4.c
- docs/function_notes/hk_24.md:94 getter, returns the 4-byte entry at index a1 of table off_20FA4C4
sub_20FA4C8
export/plan0/arm9_main/sub_20FA4C8_020FA4C8.c
- vm_model/src/kart/items.rs:6 touch a kart (
sub_20FA4C8, broadphase flag 0x4000) is not ported yet: hits come in as - vm_model/src/kart/items.rs:82
sub_20FA4C8/sub_20F97E0: the first item object whose sphere overlaps the kart's contact
sub_20FA78C
export/plan0/arm9_main/sub_20FA78C_020FA78C.c
- docs/function_notes.md:782 item-use trigger: when the racer state (+48 of record 528id) is 19 and the rank value (48id+112) is not 3, runs the item-chance check (sub_20A1CD8)
- docs/function_notes/NEEDS_REVIEW.md:883 item-use trigger for a racer: if its state (+48) is 19 and rank-table value (48*id+112) is not 3 [REVIEW]
- docs/function_notes/hk_24.md:95 item-use trigger for a racer: if its state (+48) is 19 and rank-table value (48*id+112) is not 3 [REVIEW]
sub_20FA8AC
export/plan0/arm9_main/sub_20FA8AC_020FA8AC.c
- docs/function_notes.md:665 per-frame pass over the 14 pool objects: each with count (+16) > 0 and not flagged (+64) gets sub_20F0DF8 with the sub-object from sub_20E6B38()+24
- docs/function_notes/NEEDS_REVIEW.md:884 per-frame pass over 14 pool objects: for each with count (+16 > 0) and not flagged, calls sub_20F0DF8 with a sub-object pointer from sub_20E6B38()+24 [REVIEW]
- docs/function_notes/hk_24.md:96 per-frame pass over 14 pool objects: for each with count (+16 > 0) and not flagged, calls sub_20F0DF8 with a sub-object pointer from sub_20E6B38()+24 [REVIEW]
sub_20FA920
export/plan0/arm9_main/sub_20FA920_020FA920.c
- docs/function_notes.md:783 race object update and teardown: in game state 5 calls sub_20FEB44 on sub_20FEC30's result; then runs sub_20F03F8 on each active pool entry with count +20
- docs/function_notes/NEEDS_REVIEW.md:885 race object update and teardown: in game state 5 calls sub_20FEB44 [REVIEW]
- docs/function_notes/hk_24.md:97 race object update and teardown: in game state 5 calls sub_20FEB44 [REVIEW]
sub_20FA9E4
export/plan0/arm9_main/sub_20FA9E4_020FA9E4.c
- docs/function_notes.md:666 resets the 14 pool objects via sub_20F03BC, then runs sub_20F0044 on each race object (528-byte stride) up to the count at *off_20FAA70; returns the last loop index
- docs/function_notes/NEEDS_REVIEW.md:886 resets the 14 pool objects via sub_20F03BC and runs sub_20F0044 on each race object (stride 528); returns the last loop index [REVIEW]
- docs/function_notes/hk_24.md:98 resets the 14 pool objects via sub_20F03BC and runs sub_20F0044 on each race object (stride 528); returns the last loop index [REVIEW]
sub_20FAA78
export/plan0/arm9_main/sub_20FAA78_020FAA78.c
- docs/function_notes.md:599 item pool check for item type a1: returns 1 when the pool has at least the needed count free (+12 minus +28 of its entry); otherwise repeatedly calls sub_20F03BC to reclaim until enough are free or it fails, then returns 0
- docs/function_notes/NEEDS_REVIEW.md:887 item pool check for racer item type a1: returns 1 if the pool has enough free slots (+12 minus +28 >= needed) [REVIEW]
- docs/function_notes/hk_24.md:99 item pool check for racer item type a1: returns 1 if the pool has enough free slots (+12 minus +28 >= needed) [REVIEW]
sub_20FAB34
export/plan0/arm9_main/sub_20FAB34_020FAB34.c
- docs/function_notes.md:784 item grant check: when a1 holds an item (not 19) and the game state is 5, compares the pool's free slots with the item count times the cost (sub_20FA0E8)
- docs/function_notes/NEEDS_REVIEW.md:888 item grant check: if a1 holds an item (not 19), compares pool free slots against the item count and cost (sub_20FA0E8) [REVIEW]
- docs/function_notes/hk_24.md:100 item grant check: if a1 holds an item (not 19), compares pool free slots against the item count and cost (sub_20FA0E8) [REVIEW]
sub_20FACA4
export/plan0/arm9_main/sub_20FACA4_020FACA4.c
- docs/function_notes/hk_24.md:101 predicate: returns whether the item pool for slot a1 has at least the required free count (+12 minus +28 >= +12 of entry); false for sentinel 19
sub_20FAD00
export/plan0/arm9_main/sub_20FAD00_020FAD00.c
- docs/function_notes.md:691 module init: sets globals from dword_20FAD68 and dword_20FAD78 (sub_2147F34 fixed-point divide), stores sub_2133048 products >> 12 into two globals, squares one of them, calls sub_20ED490 on off_20FAD8C and, when the object type at *off_20FAD98 is 29, calls sub_2013044
- docs/function_notes/NEEDS_REVIEW.md:889 thumb module init: sets several globals from dword_20FAD68 and dword_20FAD78 (fixed-point via sub_2147F34, sub_2133048) [REVIEW]
- docs/function_notes/hk_24.md:102 thumb module init: sets several globals from dword_20FAD68 and dword_20FAD78 (fixed-point via sub_2147F34, sub_2133048) [REVIEW]
sub_20FAD9C
export/plan0/arm9_main/sub_20FAD9C_020FAD9C.c
- docs/function_notes.md:667 getter: a2 = a1+748, a3 = (a1+112 * *off_20FADC8) >> 12; returns a1+80
- docs/function_notes/NEEDS_REVIEW.md:890 getter: writes a2 = object +748 and a3 = scaled velocity (+112 times table constant >> 12), returns pointer to object+80 [REVIEW]
- docs/function_notes/hk_24.md:103 getter: writes a2 = object +748 and a3 = scaled velocity (+112 times table constant >> 12), returns pointer to object+80 [REVIEW]
sub_20FADCC
export/plan0/arm9_main/sub_20FADCC_020FADCC.c
- docs/function_notes/hk_24.md:104 predicate, returns whether state word +758 equals 7
sub_20FADE4
export/plan0/arm9_main/sub_20FADE4_020FADE4.c
- vm_model/src/kart/blue_shell.rs:380
sub_20F7104->sub_20FADE4: the machine resets and the explosion is requested. - docs/function_notes/NEEDS_REVIEW.md:891 enters state 7 (end/special): calls sub_2046BE8 with off_20FAE6C, sets +760=7, +762=1, sets handler +288 from off_20FAE70 when no flags [REVIEW]
- docs/function_notes/hk_24.md:105 enters state 7 (end/special): calls sub_2046BE8 with off_20FAE6C, sets +760=7, +762=1, sets handler +288 from off_20FAE70 when no flags [REVIEW]
sub_20FAE74
export/plan0/arm9_main/sub_20FAE74_020FAE74.c
- docs/function_notes.md:668 if state +758 != 7 calls sub_20FAED0; otherwise sets the sub-object +688 field +180 to 1 when flag 0x10000 is clear
- docs/function_notes/NEEDS_REVIEW.md:892 if state +758 is not 7 calls sub_20FAED0; otherwise writes flag 0x10000 inverse into sub-object +688 field +180 [REVIEW]
- docs/function_notes/hk_24.md:106 if state +758 is not 7 calls sub_20FAED0; otherwise writes flag 0x10000 inverse into sub-object +688 field +180 [REVIEW]
sub_20FAED0
export/plan0/arm9_main/sub_20FAED0_020FAED0.c
- game/src/items.rs:1455
sub_20FAED0draws it with the orientationsub_20FC2E8keeps: columns side (+148), up (+160), direction (+172) - docs/function_notes.md:785 per-frame racer visual/position update, skipped in the flag 0x2000 close-range case (sub_20F91C4); when +216 != 31 walks the model's sub-objects via sub_2013468
- docs/function_notes/NEEDS_REVIEW.md:893 per-frame racer visual/position update: when not in the flag 0x2000 close-range case [REVIEW]
- docs/function_notes/hk_24.md:107 per-frame racer visual/position update: when not in the flag 0x2000 close-range case [REVIEW]
sub_20FB038
export/plan0/arm9_main/sub_20FB038_020FB038.c
- docs/function_notes.md:786 kart enter-state init: calls sub_20F8E78; when +540 is set plays sound 204 via sub_20EC8BC and sets sub_2046BCC(+744, 1); otherwise, with flag 0x8000000 and no +552, calls sub_20FCB9C
- docs/function_notes/NEEDS_REVIEW.md:894 kart enter-state init: calls sub_20F8E78, plays sound 204 via sub_20EC8BC when +540 is set [REVIEW]
- docs/function_notes/hk_24.md:108 kart enter-state init: calls sub_20F8E78, plays sound 204 via sub_20EC8BC when +540 is set [REVIEW]
sub_20FB208
export/plan0/arm9_main/sub_20FB208_020FB208.c
- docs/function_notes.md:789 enter/leave wrapper like sub_20F5550: on enter a dot-product sign goes to sub_20FF1B8(a2+24); calls sub_20FECDC; packs a2+135 with sub_20FF040; on leave calls sub_20FF1A0(a2[24], a2+191)
- docs/function_notes/NEEDS_REVIEW.md:895 enter/leave wrapper with the same pattern as sub_20F5550 (dot sign into sub_20FF1B8, sub_20FF040, sub_20FF1A0 on a2[191] when leaving) [REVIEW]
- docs/function_notes/hk_24.md:109 enter/leave wrapper with the same pattern as sub_20F5550 (dot sign into sub_20FF1B8, sub_20FF040, sub_20FF1A0 on a2[191] when leaving) [REVIEW]
sub_20FB2B4
export/plan0/arm9_main/sub_20FB2B4_020FB2B4.c
- vm_model/src/kart/blue_shell.rs:14 | 7 |
sub_20FB35C|sub_20FB2B4| explode (blast sphere grows 1.0 to 30.0) | - vm_model/src/kart/blue_shell.rs:965 State 7 (
sub_20FB2B4): the blast grows; contact ends at tick 42 and the item is freed after 85. - docs/function_notes/NEEDS_REVIEW.md:896 per-frame racer state dispatcher on +748: calls sub_20FA0B8 with two table values and sub_20F9FA8 on success; state 22 sets +740=1 [REVIEW]
- docs/function_notes/hk_24.md:110 per-frame racer state dispatcher on +748: calls sub_20FA0B8 with two table values and sub_20F9FA8 on success; state 22 sets +740=1 [REVIEW]
sub_20FB35C
export/plan0/arm9_main/sub_20FB35C_020FB35C.c
- vm_model/src/kart/blue_shell.rs:14 | 7 |
sub_20FB35C|sub_20FB2B4| explode (blast sphere grows 1.0 to 30.0) | - docs/function_notes/NEEDS_REVIEW.md:897 racer respawn/start effect: sets flag 0x800000, copies a reset position from off_20FB460 into +104..+112 [REVIEW]
- docs/function_notes/hk_24.md:111 racer respawn/start effect: sets flag 0x800000, copies a reset position from off_20FB460 into +104..+112 [REVIEW]
sub_20FB46C
export/plan0/arm9_main/sub_20FB46C_020FB46C.c
- vm_model/src/kart/blue_shell.rs:13 | 6 |
sub_20FB5DC|sub_20FB46C| dive onto the target | - vm_model/src/kart/blue_shell.rs:940 State 6 (
sub_20FB46C). - vm_model/src/kart/blue_shell.rs:986 Dive lock gain (
sub_20FB46Cpasses it tosub_20FCCE4). - docs/function_notes/NEEDS_REVIEW.md:898 per-frame racer physics with fall handling: decrements vertical velocity +608 by 28672 [REVIEW]
- docs/function_notes/hk_24.md:112 per-frame racer physics with fall handling: decrements vertical velocity +608 by 28672 [REVIEW]
sub_20FB5DC
export/plan0/arm9_main/sub_20FB5DC_020FB5DC.c
- vm_model/src/kart/blue_shell.rs:13 | 6 |
sub_20FB5DC|sub_20FB46C| dive onto the target | - docs/function_notes/NEEDS_REVIEW.md:899 init: sets +608 = 163840 (2.5 fixed-point), sets +256 from table 168*id+116 plus 2048, then tail-calls off_20FB618(a1) [REVIEW]
- docs/function_notes/hk_24.md:113 init: sets +608 = 163840 (2.5 fixed-point), sets +256 from table 168*id+116 plus 2048, then tail-calls off_20FB618(a1) [REVIEW]
sub_20FB61C
export/plan0/arm9_main/sub_20FB61C_020FB61C.c
- vm_model/src/kart/blue_shell.rs:12 | 5 |
sub_20FB770|sub_20FB61C| rise over the target | - vm_model/src/kart/blue_shell.rs:919 State 5 (
sub_20FB61C). - vm_model/src/kart/blue_shell.rs:931 (
sub_20FB61C) the orientation follows a vector that eases toward the target's heading - docs/function_notes/NEEDS_REVIEW.md:900 per-frame airborne/jump racer integration: adds dword_20FB760 to +608, caps +612, sets state 6 above 184320, decays speed +636/+644 (floor 123) [REVIEW]
- docs/function_notes/hk_24.md:114 per-frame airborne/jump racer integration: adds dword_20FB760 to +608, caps +612, sets state 6 above 184320, decays speed +636/+644 (floor 123) [REVIEW]
sub_20FB770
export/plan0/arm9_main/sub_20FB770_020FB770.c
- vm_model/src/kart/blue_shell.rs:12 | 5 |
sub_20FB770|sub_20FB61C| rise over the target | - docs/function_notes/NEEDS_REVIEW.md:901 racer reset entry: copies saved position from +196 into +80..+88, sets +608 = 163840, +612 from dword_20FB7EC, +256 from table 168*id+116 [REVIEW]
- docs/function_notes/hk_24.md:115 racer reset entry: copies saved position from +196 into +80..+88, sets +608 = 163840, +612 from dword_20FB7EC, +256 from table 168*id+116 [REVIEW]
sub_20FB7F8
export/plan0/arm9_main/sub_20FB7F8_020FB7F8.c
- vm_model/src/kart/blue_shell.rs:11 | 4 |
sub_20FBA6C|sub_20FB7F8| spiral in around that point | - vm_model/src/kart/blue_shell.rs:799 State 4 (
sub_20FB7F8). - vm_model/src/kart/blue_shell.rs:812 (
sub_20FB7F8) the orientation follows a vector around the chase point - docs/function_notes/NEEDS_REVIEW.md:902 per-frame drift/trick motion: steers heading +636 toward 53248 by dword_20FBA5C, advances +648 by 45, decrements +608 and +644 [REVIEW]
- docs/function_notes/hk_24.md:116 per-frame drift/trick motion: steers heading +636 toward 53248 by dword_20FBA5C, advances +648 by 45, decrements +608 and +644 [REVIEW]
sub_20FBA6C
export/plan0/arm9_main/sub_20FBA6C_020FBA6C.c
- vm_model/src/kart/blue_shell.rs:11 | 4 |
sub_20FBA6C|sub_20FB7F8| spiral in around that point | - docs/function_notes/NEEDS_REVIEW.md:903 state reset: sets +612 = 20480, +648 = 1000, computes a position via sub_21484D0, releases sub-object +620 via sub_208EB10 [REVIEW]
- docs/function_notes/hk_24.md:117 state reset: sets +612 = 20480, +648 = 1000, computes a position via sub_21484D0, releases sub-object +620 via sub_208EB10 [REVIEW]
sub_20FBAE0
export/plan0/arm9_main/sub_20FBAE0_020FBAE0.c
- vm_model/src/kart/blue_shell.rs:18 (exact,
replays_first_steering). State 2 (route follow,sub_20FBAE0) is ported from the C but no recording enters it. Not ported: - vm_model/src/kart/blue_shell.rs:612 State 2 (
sub_20FBAE0): follow the route with the target locked; the speed cap oscillates - vm_model/src/kart/blue_shell.rs:1253 State 2 (
sub_20FBAE0) has no recording: it follows the route with the oscillating speed cap - docs/function_notes.md:523 blue shell state 2 (route follow with a locked target): speed cap +636 oscillates around 53248 by 3277, the route run of sub_20EC918, sub_20FC654/sub_20FC2E8 target updates, then state 3 once the shell's node is one of the target's next 4 route nodes
- docs/function_notes/NEEDS_REVIEW.md:904 per-frame racer update: steers heading +636 toward 53248 by dword_20FBC14, calls sub_20EC918, plays sound +624 via sub_2109078 when flag 1 is clear [REVIEW]
- docs/function_notes/hk_24.md:118 per-frame racer update: steers heading +636 toward 53248 by dword_20FBC14, calls sub_20EC918, plays sound +624 via sub_2109078 when flag 1 is clear [REVIEW]
sub_20FBC18
export/plan0/arm9_main/sub_20FBC18_020FBC18.c
- vm_model/src/kart/blue_shell.rs:10 | 3 |
sub_20FBD4C|sub_20FBC18| home on the point 30 units ahead of the target | - vm_model/src/kart/blue_shell.rs:788 State 3 (
sub_20FBC18). - docs/function_notes/NEEDS_REVIEW.md:905 per-frame kart update: steps a1+636 angle (wraps at 53248), sub_20FCEDC, sound via sub_2109078 if a1+116 bit0 clear, then sub_20FC2E8 on a1+92 [REVIEW]
- docs/function_notes/hk_25.md:2 per-frame kart update: steps a1+636 angle (wraps at 53248), sub_20FCEDC, sound via sub_2109078 if a1+116 bit0 clear, then sub_20FC2E8 on a1+92 [REVIEW]
sub_20FBD4C
export/plan0/arm9_main/sub_20FBD4C_020FBD4C.c
- vm_model/src/kart/blue_shell.rs:10 | 3 |
sub_20FBD4C|sub_20FBC18| home on the point 30 units ahead of the target | - docs/function_notes/NEEDS_REVIEW.md:906 sets a1[159] = length of vector a1+23 (sub_21482CC), a1[161]=122880, returns 221 and sets a1[156]=221 when racer index matches global [REVIEW]
- docs/function_notes/hk_25.md:3 sets a1[159] = length of vector a1+23 (sub_21482CC), a1[161]=122880, returns 221 and sets a1[156]=221 when racer index matches global [REVIEW]
sub_20FBD98
export/plan0/arm9_main/sub_20FBD98_020FBD98.c
- vm_model/src/kart/blue_shell.rs:9 | 1 | |
sub_20FBD98| route run (spline mode, not ported here) | - vm_model/src/kart/blue_shell.rs:452 State 1 (
sub_20FBD98): run the route toward the leader. The first 20 ticks steer along it - vm_model/src/kart/blue_shell.rs:457 (
sub_20FBD98) a downward nudge that grows with the speed - vm_model/src/kart/blue_shell.rs:509 The target search of
sub_20FBD98, once a tick while state 1 runs. - vm_model/src/kart/blue_shell.rs:1340
sub_20FBD98's target search: places in order, finished karts skipped, the owner or a spent kart - game/src/items.rs:1184 every racer as the shell's target search reads it (
sub_20FBD98,sub_20FCBB8) - docs/function_notes.md:1356 blue shell state 1 target search ported (BlueShell::search): places walked from the cursor skipping finished racers, owner/spent ends phase 1 (then first unspent place), local-player fallback if it was tried and has finished, give-up lock of place 1 after 2700 ticks; state 2 when shell flag 0x40000000 or locked kart +72&1 else 3; item flag 0x10000000 refuses all locks
- docs/function_notes/NEEDS_REVIEW.md:907 large per-frame racer logic: decrements a1+96 by speed, sound update, picks target via off_20FC25C lists and sub_203C880, sets state 2/3 at +760 [REVIEW]
- docs/function_notes/hk_25.md:4 large per-frame racer logic: decrements a1+96 by speed, sound update, picks target via off_20FC25C lists and sub_203C880, sets state 2/3 at +760 [REVIEW]
sub_20FC268
export/plan0/arm9_main/sub_20FC268_020FC268.c
- docs/function_notes/hk_25.md:5 wrapper: sub_20F2228(a1,53248), then if flag bit0 clear, sub_210B7EC on a1+192 and sound sub_2109078 with a1[156] (unless 1)
sub_20FC2C0
export/plan0/arm9_main/sub_20FC2C0_020FC2C0.c
- docs/function_notes/hk_25.md:6 calls sub_2046B40 on state-machine field a1+744 then sub_20F9320(a1, dword_20FC2E4): object tick wrapper
sub_20FC2E8
export/plan0/arm9_main/sub_20FC2E8_020FC2E8.c
- vm_model/src/kart/blue_shell.rs:102
sub_20FC2E8leaves the orientation alone while the flat velocity is shorter than this (squared). - vm_model/src/kart/blue_shell.rs:249 Orientation vectors
sub_20FC2E8keeps: direction (+172), side (+148), up (+160), the - vm_model/src/kart/blue_shell.rs:565
sub_20FC2E8: keep the display orientation.a2is the vector it follows (the velocity by - vm_model/src/kart/blue_shell.rs:1285
sub_20FC2E8on the recorded homing flight: the orientation vectors match the recording. - game/src/items.rs:1455
sub_20FAED0draws it with the orientationsub_20FC2E8keeps: columns side (+148), up (+160), direction (+172) - docs/function_notes.md:1355 blue shell orientation update (a2 = followed vector, a4 = gravity-frame normal or 0): 3D form smooths +664 by 3277/4096, side = norm((normal + 3*smooth) x dir); flat form (a4 = 0) only when flat |dir|^2 >= 1123600, smooths +664 by 328/4096 of (vel - +652 - +664) on x/z, side = norm((3sx, 1.0, 3sz) x dir) (fallback (z, 0, -x)); up = dir x side; +652 = vel. Replayed exactly through the recorded homing flight (replays_orientation_while_homing)
- docs/function_notes/NEEDS_REVIEW.md:908 vector smoothing for camera/follow: with target a4 eases a1+37..45 and a1+163..; otherwise damps via 328/3072 factors and sub_20397A8 cross/normalize [REVIEW]
- docs/function_notes/hk_25.md:7 vector smoothing for camera/follow: with target a4 eases a1+37..45 and a1+163..; otherwise damps via 328/3072 factors and sub_20397A8 cross/normalize [REVIEW]
sub_20FC654
export/plan0/arm9_main/sub_20FC654_020FC654.c
- vm_model/src/kart/blue_shell.rs:614 (
sub_20FC654hover, then the node chain from the target's +496) homing is requested. - vm_model/src/kart/blue_shell.rs:859
sub_20FC654: the display position follows the shell, easing toward it plus a bobbing height. - docs/function_notes/NEEDS_REVIEW.md:909 per-frame oscillation: advances phase a1+616 by dword_20FC78C, indexes sine table off_20FC790, updates position a1+196..204 with damping dword_20FC798 [REVIEW]
- docs/function_notes/hk_25.md:8 per-frame oscillation: advances phase a1+616 by dword_20FC78C, indexes sine table off_20FC790, updates position a1+196..204 with damping dword_20FC798 [REVIEW]
sub_20FC79C
export/plan0/arm9_main/sub_20FC79C_020FC79C.c
- docs/function_notes.md:868 state handler: calls sub_20F9114(a2); when a1[3]+496 is set runs sub_20ED268 and sub_2046BCC(a2+744, 1); otherwise sub_20FCB9C with the byte from *off_20FC8E8+1140 and sets the state (2 or 3) from flags 0x40000000 and the kart record
- docs/function_notes/NEEDS_REVIEW.md:910 state handler: if a1[3]+496 set, sub_20ED268 and sub_2046BCC; else sub_20FCB9C and state 2/3 at +760; copies a1[11..19] to a2+148..180 [REVIEW]
- docs/function_notes/hk_25.md:9 state handler: if a1[3]+496 set, sub_20ED268 and sub_2046BCC; else sub_20FCB9C and state 2/3 at +760; copies a1[11..19] to a2+148..180 [REVIEW]
sub_20FC8EC
export/plan0/arm9_main/sub_20FC8EC_020FC8EC.c
- docs/function_notes.md:600 if kart+552 is null, sets it via sub_20FCB9C(a1, a2) and sets +760 = 2 when (+116 bit 0x40000000) or (the new kart's +508 record +72 bit 0) else 3, +762 = 1; returns a1+512
- docs/function_notes/NEEDS_REVIEW.md:911 if a1+552 (racer slot ptr) is null, sets it via sub_20FCB9C(a1,a2) and state 2/3 at +760/+762; returns a1+512 [REVIEW]
- docs/function_notes/hk_25.md:10 if a1+552 (racer slot ptr) is null, sets it via sub_20FCB9C(a1,a2) and state 2/3 at +760/+762; returns a1+512 [REVIEW]
sub_20FC94C
export/plan0/arm9_main/sub_20FC94C_020FC94C.c
- game/src/items.rs:1100 the blue shell's target: the leader that has not finished (
sub_20FC94C) - docs/function_notes/NEEDS_REVIEW.md:912 racer/object reset: sub_210B850, vtable off_20FCAB4 at +48, zeroes +352, copies pos to +196..204, sub_20F9C40, start slot from off_20FCAB8, sub_208ADC8 [REVIEW]
- docs/function_notes/hk_25.md:11 racer/object reset: sub_210B850, vtable off_20FCAB4 at +48, zeroes +352, copies pos to +196..204, sub_20F9C40, start slot from off_20FCAB8, sub_208ADC8 [REVIEW]
sub_20FCAC0
export/plan0/arm9_main/sub_20FCAC0_020FCAC0.c
- docs/function_notes.md:669 object init: sub_2046BE8(a1+744, off_20FCB28, 8, a1), sub_21471BC(a1+692), +628 = 1, +630 = byte at *off_20FCB2C+1140, +632 = 0, +620 = 0, +624 = 220, +640 = 0, +740 = 0; returns 220
- docs/function_notes/NEEDS_REVIEW.md:913 object init: sub_2046BE8 state machine table off_20FCB28, sub_21471BC(a1+692), sets slot +628/630=1, zeroes flags, +624=220, returns 220 [REVIEW]
- docs/function_notes/hk_25.md:12 object init: sub_2046BE8 state machine table off_20FCB28, sub_21471BC(a1+692), sets slot +628/630=1, zeroes flags, +624=220, returns 220 [REVIEW]
sub_20FCB30
export/plan0/arm9_main/sub_20FCB30_020FCB30.c
- docs/function_notes/hk_25.md:13 sets a1+368 = 1 (counter field) and returns a1: trivial setter
sub_20FCB3C
export/plan0/arm9_main/sub_20FCB3C_020FCB3C.c
- docs/function_notes/hk_25.md:14 returns off_20FCB48[71]: constant table lookup, trivial getter
sub_20FCB4C
export/plan0/arm9_main/sub_20FCB4C_020FCB4C.c
- docs/function_notes.md:601 sub_20F4198(a2, dword_20FCB98); sub_2069DB8 on the kart at (a2+4)->+508; sets (*(a1+12))+516 = 1; returns sub_20F4188(a2, 12)
- docs/function_notes/NEEDS_REVIEW.md:914 calls sub_20F4198(a2,dword_20FCB98), sub_2069DB8 on a2+4 struct kart+508, sets *(a1+12)+516=1, returns sub_20F4188(a2,12) [REVIEW]
- docs/function_notes/hk_25.md:15 calls sub_20F4198(a2,dword_20FCB98), sub_2069DB8 on a2+4 struct kart+508, sets *(a1+12)+516=1, returns sub_20F4188(a2,12) [REVIEW]
sub_20FCB9C
export/plan0/arm9_main/sub_20FCB9C_020FCB9C.c
- docs/function_notes/hk_25.md:16 sets racer slot pointer a1+552 = racer_table + 528*a2 (528-byte racer structs); returns a1: trivial setter
sub_20FCBB8
export/plan0/arm9_main/sub_20FCBB8_020FCBB8.c
- vm_model/src/kart/blue_shell.rs:98 A target counts as reachable within 400 units flat and 50 units in height (
sub_20FCBB8). - vm_model/src/kart/blue_shell.rs:485
sub_20FCBB8: can the shell lock racerid? Yes when it stands on the node the shell heads - vm_model/src/kart/blue_shell.rs:1228 becomes the leader's (
sub_20FCBB8: leader record +496 == shell +360), not by distance. - game/src/items.rs:1184 every racer as the shell's target search reads it (
sub_20FBD98,sub_20FCBB8) - docs/function_notes.md:522 blue shell reachability of kart a2: not when the kart cannot be targeted (sub_206C0B0); reachable when the kart's item-record route node (*0x027E00C8 + 528k + 496) equals the shell's target node (+360), else within 40000 (flat, units^2 >> 24... 9.8 units^2 if the shell has +116 & 0x40000000 or the kart has +72 & 1) or 160000 flat and 2500 height^2; then stores the target record (+552 side) and its position (+580..)
- docs/function_notes/NEEDS_REVIEW.md:915 candidate slot check: rejects via sub_206C0B0 and distance thresholds dword_20FCCD8/CCDC; on accept stores slot at a1+552 and copies pos to a1+145..147 [REVIEW]
- docs/function_notes/hk_25.md:17 candidate slot check: rejects via sub_206C0B0 and distance thresholds dword_20FCCD8/CCDC; on accept stores slot at a1+552 and copies pos to a1+145..147 [REVIEW]
sub_20FCCE4
export/plan0/arm9_main/sub_20FCCE4_020FCCE4.c
- vm_model/src/kart/blue_shell.rs:897 States 5 and 6's mover (
sub_20FCCE4): the shell moves a fractiongainof the way to a - vm_model/src/kart/blue_shell.rs:986 Dive lock gain (
sub_20FB46Cpasses it tosub_20FCCE4). - docs/function_notes/NEEDS_REVIEW.md:916 builds racer offset from kart struct (+556..564, +580..588), scales, then sub_1FFDEE4 query (likely collision/ground) [REVIEW]
- docs/function_notes/hk_25.md:18 builds racer offset from kart struct (+556..564, +580..588), scales, then sub_1FFDEE4 query (likely collision/ground) [REVIEW]
sub_20FCE94
export/plan0/arm9_main/sub_20FCE94_020FCE94.c
- docs/function_notes.md:670 adds a5 to the u16 at +604 of a1, then calls sub_20FCF10(a1, a3, new +604 value)
- docs/function_notes/NEEDS_REVIEW.md:917 accumulates a5 into a1+604 (u16) then calls sub_20FCF10(a1,a3,that value): thin accumulate wrapper [REVIEW]
- docs/function_notes/hk_25.md:19 accumulates a5 into a1+604 (u16) then calls sub_20FCF10(a1,a3,that value): thin accumulate wrapper [REVIEW]
sub_20FCEDC
export/plan0/arm9_main/sub_20FCEDC_020FCEDC.c
- docs/function_notes/hk_25.md:20 thin wrapper: sub_20FCF10(a1, a3, 0)
sub_20FCF10
export/plan0/arm9_main/sub_20FCF10_020FCF10.c
- vm_model/src/kart/blue_shell.rs:256 The chase offset (+592)
sub_20FCF10computes, and the vector state 5 eases (+676). - vm_model/src/kart/blue_shell.rs:827 States 3 and 4's mover (
sub_20FCF10): the chase point is the target's position, 30 units - docs/function_notes/NEEDS_REVIEW.md:918 kart position integrator: rotates velocity by heading table off_20FD250, clamps length to a2, smooths into a1+92..100, collision query sub_1FFDEE4 [REVIEW]
- docs/function_notes/hk_25.md:21 kart position integrator: rotates velocity by heading table off_20FD250, clamps length to a2, smooths into a1+92..100, collision query sub_1FFDEE4 [REVIEW]
sub_20FD254
export/plan0/arm9_main/sub_20FD254_020FD254.c
- docs/function_notes/hk_25.md:22 clears racer slot pointer a1+552 and a1+604: trivial reset
sub_20FD264
export/plan0/arm9_main/sub_20FD264_020FD264.c
- docs/function_notes.md:1286 one-time init of speed/timing constants: stores dword_20FD2DC into off_20FD2E0, sub_2147F34(dword_20FD2E4, dword_20FD2DC) (fixed-point divide) into off_20FD2E8, dword_20FD2EC into off_20FD2F0[0]; computes sub_2133048 of the products with the table at off_20FD2F4 + dword_20FD2F8, >> 12, into off_20FD2FC; then stores (value >> 12) squared into *v2; finally sets off_20FD304 to 180 for class 0, 150 for class 1 and 120 for other classes, where the class is the word at +16 of the table entry off_20FD300[0]
- docs/function_notes/NEEDS_REVIEW.md:919 one-time init of speed/timing constants: dword_20FD2DC via sub_2147F34 divide and sub_2133048 multiply; sets off_20FD304 to 180/120/150 by class at +16 [REVIEW]
- docs/function_notes/hk_25.md:23 one-time init of speed/timing constants: dword_20FD2DC via sub_2147F34 divide and sub_2133048 multiply; sets off_20FD304 to 180/120/150 by class at +16 [REVIEW]
sub_20FD308
export/plan0/arm9_main/sub_20FD308_020FD308.c
- docs/function_notes.md:671 getter: a2 = a1+392, a3 = (a1+112 * *off_20FD334) >> 12; returns a1+80
- docs/function_notes/NEEDS_REVIEW.md:920 getter pair: a2 = a1+392; a3 = (a1+112 * off_20FD334[0])>>12; returns a1+80 [REVIEW]
- docs/function_notes/hk_25.md:24 getter pair: a2 = a1+392; a3 = (a1+112 * off_20FD334[0])>>12; returns a1+80 [REVIEW]
sub_20FD338
export/plan0/arm9_main/sub_20FD338_020FD338.c
- docs/function_notes.md:790 spawns an actor via sub_20FA3D0(9, 8, off_20FD414) and initialises it: +288 = 0 when no 0x180000 flags, sub_20F9C40, +416 = 0, sub_2046BCC(+388, 3), +372 = 0; returns 1 or 0
- docs/function_notes/NEEDS_REVIEW.md:921 spawns actor via sub_20FA3D0, init flags/state 3, ORs table bits into a1[1], links back-pointers; returns actor or 0 [REVIEW]
- docs/function_notes/hk_25.md:25 spawns actor via sub_20FA3D0, init flags/state 3, ORs table bits into a1[1], links back-pointers; returns actor or 0 [REVIEW]
sub_20FD428
export/plan0/arm9_main/sub_20FD428_020FD428.c
- docs/function_notes.md:672 spawns an actor via sub_20FA3D0(9, 8, off_20FD490) and initialises it: +288 = 0 when no 0x180000 flags, sub_20F9C40, +416 = 0, sub_2046BCC(+388, 3), +372 = 0; returns the actor or 0
- docs/function_notes/NEEDS_REVIEW.md:922 spawns actor via sub_20FA3D0(9,8,off_20FD490) and initialises it (flags, sub_20F9C40, state 3); returns actor or 0 [REVIEW]
- docs/function_notes/hk_25.md:26 spawns actor via sub_20FA3D0(9,8,off_20FD490) and initialises it (flags, sub_20F9C40, state 3); returns actor or 0 [REVIEW]
sub_20FD494
export/plan0/arm9_main/sub_20FD494_020FD494.c
- docs/function_notes.md:673 destructor: sub_2046BCC(+388, 0), releases the attached sub-object at +408 via sub_20D2398 (clearing its bit 1), returns the object to the pool via sub_20F0F70, zeroes *a1
- docs/function_notes/NEEDS_REVIEW.md:923 destructor: sub_2046BCC(a1+388,0), releases attached sub-object at +408 via sub_20D2398, returns object to pool via sub_20F0F70, zeroes a1 [REVIEW]
- docs/function_notes/hk_25.md:27 destructor: sub_2046BCC(a1+388,0), releases attached sub-object at +408 via sub_20D2398, returns object to pool via sub_20F0F70, zeroes a1 [REVIEW]
sub_20FD528
export/plan0/arm9_main/sub_20FD528_020FD528.c
- docs/function_notes/hk_25.md:28 predicate: returns (a1+402) == 2 (object state is 2)
sub_20FD540
export/plan0/arm9_main/sub_20FD540_020FD540.c
- docs/function_notes.md:869 object setup: ORs the flag from off_20FD66C into +120; when no sub-object is attached (+408 null) calls sub_20F9CA8 and sets +416 = 1; calls sub_20F9114
- docs/function_notes/NEEDS_REVIEW.md:924 object setup: flag bits from off_20FD66C, sub_20F9CA8 if no sub-object, state machine off_20FD670, timers, sub_20F30EC(v4,3,a2) [REVIEW]
- docs/function_notes/hk_25.md:29 object setup: flag bits from off_20FD66C, sub_20F9CA8 if no sub-object, state machine off_20FD670, timers, sub_20F30EC(v4,3,a2) [REVIEW]
sub_20FD684
export/plan0/arm9_main/sub_20FD684_020FD684.c
- docs/function_notes.md:791 setter: when +408 is zero sets +416 = 1 and calls sub_208AD74 on +124; copies a2 into +240..+248 and sets flag 0x80 when a2 is given; copies a3 into +80..+88 when given
- docs/function_notes/NEEDS_REVIEW.md:925 setter: if a2 copies vector into +240..248 and sets flag 0x80; if a3 copies pos to +80..88, recalc +92 and mirrors pos into attached sub-object [REVIEW]
- docs/function_notes/hk_25.md:30 setter: if a2 copies vector into +240..248 and sets flag 0x80; if a3 copies pos to +80..88, recalc +92 and mirrors pos into attached sub-object [REVIEW]
sub_20FD754
export/plan0/arm9_main/sub_20FD754_020FD754.c
- docs/function_notes.md:674 object reset: clears +116 bit 0x8000, +288 = 0 when no 0x180000 flags, sub_20F9C40, sub_2046BCC(+388, 3), zeroes +416 and +372, returns 0
- docs/function_notes/NEEDS_REVIEW.md:926 object reset: clears flag 0x8000, zeroes +288 when no flags, sub_20F9C40, state 3 via sub_2046BCC, zeroes a1[104] and a1[93]: returns 0 [REVIEW]
- docs/function_notes/hk_25.md:31 object reset: clears flag 0x8000, zeroes +288 when no flags, sub_20F9C40, state 3 via sub_2046BCC, zeroes a1[104] and a1[93]: returns 0 [REVIEW]
sub_20FD7A4
export/plan0/arm9_main/sub_20FD7A4_020FD7A4.c
- vm_model/src/mission_target.rs:272
sub_2188138(o, range, window): the first pooled object (sub_20FD7A4, position at +80) - docs/function_notes.md:675 lookup: returns entry a1 of the list at (off_20FD7EC+616) when flag 0x8000 is set, no 0x180000 bits, state +402 != 3 and +408 is null; otherwise 0
- docs/function_notes/NEEDS_REVIEW.md:927 lookup: returns entry idx a1 of list *off_20FD7EC+616 when flag 0x8000 set, no 0x180000 flags, state!=3, and no sub-object; else 0 [REVIEW]
- docs/function_notes/hk_25.md:32 lookup: returns entry idx a1 of list *off_20FD7EC+616 when flag 0x8000 set, no 0x180000 flags, state!=3, and no sub-object; else 0 [REVIEW]
sub_20FD7F0
export/plan0/arm9_main/sub_20FD7F0_020FD7F0.c
- docs/function_notes.md:676 returns field +632 of the object at off_20FD800
- docs/function_notes/NEEDS_REVIEW.md:928 getter: returns field +632 of object at off_20FD800: trivial [REVIEW]
- docs/function_notes/hk_25.md:33 getter: returns field +632 of object at off_20FD800: trivial [REVIEW]
sub_20FD804
export/plan0/arm9_main/sub_20FD804_020FD804.c
- docs/function_notes/hk_25.md:34 if attached sub-object at +408: clears its flag bit1 and calls sub_20D2398 to release it; returns that value
sub_20FD83C
export/plan0/arm9_main/sub_20FD83C_020FD83C.c
- docs/function_notes.md:677 object state init when flag 0x80000 is clear: sub_2046BE8(+388, off_20FD8A4[0], 4), sets +288 to off_20FD8A8 when no 0x180000 bits, +404 = 1, +406 = 1, +384 = dword_20FD8AC, +300 = +304 = 0
- docs/function_notes/NEEDS_REVIEW.md:929 object state init (if flag 0x80000 clear): state machine off_20FD8A4[0], sets handler +288, +404=1, +406=1, +384=dword_20FD8AC, zeroes +300/+304 [REVIEW]
- docs/function_notes/hk_25.md:35 object state init (if flag 0x80000 clear): state machine off_20FD8A4[0], sets handler +288, +404=1, +406=1, +384=dword_20FD8AC, zeroes +300/+304 [REVIEW]
sub_20FD8B0
export/plan0/arm9_main/sub_20FD8B0_020FD8B0.c
- vm_model/src/kart/bomb.rs:265
sub_20F7104->sub_20FD8B0: the machine resets and the explosion is requested. - docs/function_notes/NEEDS_REVIEW.md:930 sets object state 2 (+404=2, +406=1), state machine off_20FD930[0], flag swap 0x8000 to 0x80000, clears 0x4000 in +120; returns 1 [REVIEW]
- docs/function_notes/hk_25.md:36 sets object state 2 (+404=2, +406=1), state machine off_20FD930[0], flag swap 0x8000 to 0x80000, clears 0x4000 in +120; returns 1 [REVIEW]
sub_20FD938
export/plan0/arm9_main/sub_20FD938_020FD938.c
- docs/function_notes.md:678 if +416 is set: state +402 == 2 sets the flag +180 of sub-struct +312 (1 when flag 0x10000 is clear); otherwise sets the u16 at a3+24 to (+372 nonzero and < 6) and calls sub_20ED5C0
- docs/function_notes/NEEDS_REVIEW.md:931 if +416 set: state 2 sets flag on sub-struct +312; otherwise sets +24 = (speed in 1..5) and calls sub_20ED5C0 [REVIEW]
- docs/function_notes/hk_25.md:37 if +416 set: state 2 sets flag on sub-struct +312; otherwise sets +24 = (speed in 1..5) and calls sub_20ED5C0 [REVIEW]
sub_20FD9D8
export/plan0/arm9_main/sub_20FD9D8_020FD9D8.c
- docs/function_notes.md:679 stops an object: sub_20F8E78, sub_20F2D98(a1, 3 when +304 is set, else 2), sub_2046BE8(+388, off_20FDA4C, 4), and plays sound 218 via sub_21090C4 when flag 0x10000000 is set and +304 is nonzero
- docs/function_notes/NEEDS_REVIEW.md:932 stops object: sub_20F8E78, sub_20F2D98(a1, 3 or 2 by +304), state machine off_20FDA4C; if flag 0x10000000 and +304, plays sound 218 via sub_21090C4 [REVIEW]
- docs/function_notes/hk_25.md:38 stops object: sub_20F8E78, sub_20F2D98(a1, 3 or 2 by +304), state machine off_20FDA4C; if flag 0x10000000 and +304, plays sound 218 via sub_21090C4 [REVIEW]
sub_20FDA50
export/plan0/arm9_main/sub_20FDA50_020FDA50.c
- docs/function_notes.md:680 pack/unpack wrapper: on write calls sub_20FF1B8(a2[76], a2+24); calls sub_20FECDC, then sub_20FEFE8 on a2+77 (0 when a2 is null); on read calls sub_20FF1A0(a2[24], a2+76); returns sub_20FE8AC(a2[17]) on write
- docs/function_notes/NEEDS_REVIEW.md:933 pack/unpack wrapper: if a2&&a3 sub_20FF1B8; calls sub_20FECDC then sub_20FEFE8 on a2+77; returns sub_20FE8AC(a2[17]) on write [REVIEW]
- docs/function_notes/hk_25.md:39 pack/unpack wrapper: if a2&&a3 sub_20FF1B8; calls sub_20FECDC then sub_20FEFE8 on a2+77; returns sub_20FE8AC(a2[17]) on write [REVIEW]
sub_20FDAE8
export/plan0/arm9_main/sub_20FDAE8_020FDAE8.c
- vm_model/src/kart/bomb.rs:7 function
sub_20FDAE8runs the machine, then the fuse. - vm_model/src/kart/bomb.rs:166 One tick: the generic item tick around the machine and the fuse (
sub_20FDAE8). - vm_model/src/kart/bomb.rs:197 the fuse (
sub_20FDAE8): it goes off when it is negative at the start of a tick, and keeps - docs/function_notes.md:1683 bob-omb per-tick (after its state machine): fuse (+0x170) countdown, the blink counter (+0x174), and while bounces (+0x12C) < 3 and (thrown (+0x130) or bounces < 2) and not a remote copy (+0x78 & 0x8000) the proximity cut sub_20FDE18 then sub_20FDD78
- docs/function_notes/NEEDS_REVIEW.md:934 per-frame object tick: sub-object present -> sub_20FDC08; else state tick, timers +368/+372 countdown, sub_20FDE18 and sub_20FDD78 [REVIEW]
- docs/function_notes/hk_25.md:40 per-frame object tick: sub-object present -> sub_20FDC08; else state tick, timers +368/+372 countdown, sub_20FDE18 and sub_20FDD78 [REVIEW]
sub_20FDC08
export/plan0/arm9_main/sub_20FDC08_020FDC08.c
- docs/function_notes.md:870 per-frame update of an attached sub-object: ORs the flag from off_20FDD6C into a2[53], ticks sub_2046B40 on a1+388; when the input word at a3+2 has bit 0x100 clears a1[102] and releases the object with sub_20F0F70
- docs/function_notes/NEEDS_REVIEW.md:935 per-frame update of attached sub-object: sets flag in a2[53], state tick, copies pos to a3+4..12, counts a1[92] down, returns to pool at zero [REVIEW]
- docs/function_notes/hk_25.md:41 per-frame update of attached sub-object: sets flag in a2[53], state tick, copies pos to a3+4..12, counts a1[92] down, returns to pool at zero [REVIEW]
sub_20FDD78
export/plan0/arm9_main/sub_20FDD78_020FDD78.c
- vm_model/src/kart/bomb.rs:12 flight (
sub_20F92E8), the fuse shortening near the local player (sub_20FDE18/sub_20FDD78), - vm_model/src/kart/bomb.rs:107 the nearer the human player gets, the shorter the fuse is cut (
sub_20FDE18/sub_20FDD78). The game setslocaleach tick - vm_model/src/kart/bomb.rs:238
sub_20FDD78: a bomb that has been near the local player burns faster.PROXIMITYis 69 units squared (0x217BD38) andFUSE_CAP - docs/function_notes.md:1685 bob-omb fuse cut by closest approach (+0x17C vs 4761 = 0x217BD38): <= 64x: fuse <= 180 (0x217BD2C); <= 16x: 90; <= 4x: 45; <= 1x: fuse <= 4 and blink (+0x174) = 3
- docs/function_notes/NEEDS_REVIEW.md:936 clamps counter a1[92] to 4, 2 or 1 based on a1[95] against thresholds of off_20FDE10 (value tiers) and off_20FDE14 [REVIEW]
- docs/function_notes/hk_25.md:42 clamps counter a1[92] to 4, 2 or 1 based on a1[95] against thresholds of off_20FDE10 (value tiers) and off_20FDE14 [REVIEW]
sub_20FDE18
export/plan0/arm9_main/sub_20FDE18_020FDE18.c
- vm_model/src/kart/bomb.rs:12 flight (
sub_20F92E8), the fuse shortening near the local player (sub_20FDE18/sub_20FDD78), - vm_model/src/kart/bomb.rs:107 the nearer the human player gets, the shorter the fuse is cut (
sub_20FDE18/sub_20FDD78). The game setslocaleach tick - vm_model/src/kart/bomb.rs:221
sub_20FDE18: remember the closest the local player has been (whole units squared, each difference shifted before squaring). - docs/function_notes.md:1684 bob-omb proximity tracker: for the local player (sub_2061F90) other than the owner and not untargetable (sub_206C0E0), keep the smallest squared distance in whole units in +0x17C (and the kart id in +0x178; recomputed from that kart while the value is < 8)
- docs/function_notes/NEEDS_REVIEW.md:937 nearest-racer search over index sub_2061F90 (bound off_20FDF60+976) by squared distance to a1+80..88; best index to a1+376, dist to a1+380 [REVIEW]
- docs/function_notes/hk_25.md:43 nearest-racer search over index sub_2061F90 (bound off_20FDF60+976) by squared distance to a1+80..88; best index to a1+376, dist to a1+380 [REVIEW]
sub_20FDF64
export/plan0/arm9_main/sub_20FDF64_020FDF64.c
- vm_model/src/kart/bomb.rs:6 use too), 1 resting (
sub_20FE120), 2 explosion (sub_20FE00C/sub_20FDF64). The per-tick - vm_model/src/kart/bomb.rs:405 State 2 (
sub_20FDF64): the blast grows; spent at tick 22, contact ends at 42, freed after 85. - docs/function_notes/NEEDS_REVIEW.md:938 per-frame state dispatch on a1[98]: sub_20FA0B8 check then sub_20F9FA8; 22 sets a1[91]=1; 42 sub_20F9C40; >85 sub_20F0F70 pool return [REVIEW]
- docs/function_notes/hk_25.md:44 per-frame state dispatch on a1[98]: sub_20FA0B8 check then sub_20F9FA8; 22 sets a1[91]=1; 42 sub_20F9C40; >85 sub_20F0F70 pool return [REVIEW]
sub_20FE00C
export/plan0/arm9_main/sub_20FE00C_020FE00C.c
- vm_model/src/kart/bomb.rs:6 use too), 1 resting (
sub_20FE120), 2 explosion (sub_20FE00C/sub_20FDF64). The per-tick - docs/function_notes/NEEDS_REVIEW.md:939 object init: sets flag 0x800000, copies start vector off_20FE110, sub_208E490 creates sub-object (velocity dword_20FE114), sound clear via sub_212C6F0 [REVIEW]
- docs/function_notes/hk_25.md:45 object init: sets flag 0x800000, copies start vector off_20FE110, sub_208E490 creates sub-object (velocity dword_20FE114), sound clear via sub_212C6F0 [REVIEW]
sub_20FE120
export/plan0/arm9_main/sub_20FE120_020FE120.c
- vm_model/src/kart/bomb.rs:6 use too), 1 resting (
sub_20FE120), 2 explosion (sub_20FE00C/sub_20FDF64). The per-tick - docs/function_notes/NEEDS_REVIEW.md:940 state handler: flag 0x8000 calls sub_20F68B0; flag 0x4000 calls sub_20F63CC, sets +368=90 and +372=0 [REVIEW]
- docs/function_notes/hk_25.md:46 state handler: flag 0x8000 calls sub_20F68B0; flag 0x4000 calls sub_20F63CC, sets +368=90 and +372=0 [REVIEW]
sub_20FE16C
export/plan0/arm9_main/sub_20FE16C_020FE16C.c
- vm_model/src/kart/bomb.rs:5 next tick): 0 flight (
sub_20FE16C, built on the flight functionsub_20F2DF0that bananas - vm_model/src/kart/bomb.rs:317 State 0 (
sub_20FE16C->sub_20F2DF0): move, collide, bounce or land, fall. - docs/function_notes/NEEDS_REVIEW.md:941 calls sub_20F2DF0 with per-mode constants, sub_20F91FC on flag 0x10, sound sub_2109060 on flag 0x8 then sub_20F6A6C; handler +288 off_20FE260 [REVIEW]
- docs/function_notes/hk_25.md:48 calls sub_20F2DF0 with per-mode constants, sub_20F91FC on flag 0x10, sound sub_2109060 on flag 0x8 then sub_20F6A6C; handler +288 off_20FE260 [REVIEW]
sub_20FE268
export/plan0/arm9_main/sub_20FE268_020FE268.c
- vm_model/src/kart/hand.rs:45 speed of a forward throw (
p6) and the lift of a drop (p7).sub_20FE268passes these on the stack: a plain throw is - game/src/items.rs:801
sub_20FE268->sub_20F3150: dropped behind (Down), thrown hard (Up) or thrown (replayed against a driving kart) - docs/function_notes.md:585 bob-omb launch (item type 2/3 handler): chooses the throw by the button flags (+0xEC & 0x20 = drop, 0x10 = hard throw, else plain) and calls sub_20F3150 with three stack arguments the decompile hides: base speed, upward speed, drop lift = (0x7800/0x5000/8602 drop, 0x9800/0x5000/8602 hard, 0x6000/0x5000/1434 plain); sets the item's +0x134 to min(0.12*kart speed + 0.2, 0.8) and plays SE 218
- docs/function_notes/NEEDS_REVIEW.md:942 sets flag in a2+120, computes a2+308 from a1[26] (clamped), sub_20F3150 mode 2 or 3 (sound 218 for mode 3); returns a2+304 [REVIEW]
- docs/function_notes/hk_25.md:50 sets flag in a2+120, computes a2+308 from a1[26] (clamped), sub_20F3150 mode 2 or 3 (sound 218 for mode 3); returns a2+304 [REVIEW]
sub_20FE3D8
export/plan0/arm9_main/sub_20FE3D8_020FE3D8.c
- docs/function_notes.md:681 object init: sub_21471BC(+316), sub_2046BE8(+388, off_20FE448, 4), sub_2046BCC(+388, 0), +368 = 300, +372 = 0, +376 = 8 (u16), +380 = dword_20FE44C, +384 = 0, +364 = 0, +416 = 1, +408 = 0; returns 1
- docs/function_notes/NEEDS_REVIEW.md:943 object init: sub_21471BC(a1+316), state machine off_20FE448 state 0, timers +368=300/+372/+376=8/+380, +416=1, +408=0; returns 1 [REVIEW]
- docs/function_notes/hk_25.md:51 object init: sub_21471BC(a1+316), state machine off_20FE448 state 0, timers +368=300/+372/+376=8/+380, +416=1, +408=0; returns 1 [REVIEW]
sub_20FE450
export/plan0/arm9_main/sub_20FE450_020FE450.c
- docs/function_notes/hk_25.md:52 thin indirect call through off_20FE468 with args from data table entries
sub_20FE46C
export/plan0/arm9_main/sub_20FE46C_020FE46C.c
- docs/function_notes/hk_25.md:53 thin indirect call through off_20FE484 with args from data table entries
sub_20FE4B4
export/plan0/arm9_main/sub_20FE4B4_020FE4B4.c
- docs/function_notes/hk_25.md:54 thunk: tail-calls function pointer off_20FE4BC(a1)
sub_20FE4C0
export/plan0/arm9_main/sub_20FE4C0_020FE4C0.c
- docs/function_notes.md:792 pack wrapper: calls sub_20FECDC; on write stamps the time (sub_2061FB8) into off_20FE568 and enqueues type 1 with length 18 (sub_205A858 when there is room and sub_205AD44 passes, else sub_20FEA84); returns the record
- docs/function_notes/NEEDS_REVIEW.md:944 packs via sub_20FECDC; when a2&&a3 stamps time from sub_2061FB8 into off_20FE568 and enqueues 18-byte event via sub_205A858 or sub_20FEA84 [REVIEW]
- docs/function_notes/hk_25.md:55 packs via sub_20FECDC; when a2&&a3 stamps time from sub_2061FB8 into off_20FE568 and enqueues 18-byte event via sub_205A858 or sub_20FEA84 [REVIEW]
sub_20FE56C
export/plan0/arm9_main/sub_20FE56C_020FE56C.c
- docs/function_notes.md:682 if a5 is 0 uses the time from sub_2061FB8(), then calls sub_20FE9D0(a1, a2, a3, a4, time) to queue a delayed event
- docs/function_notes/NEEDS_REVIEW.md:945 if a5 is 0 uses time from sub_2061FB8(), then calls sub_20FE9D0 (queue delayed event) with a1..a4 [REVIEW]
- docs/function_notes/hk_25.md:56 if a5 is 0 uses time from sub_2061FB8(), then calls sub_20FE9D0 (queue delayed event) with a1..a4 [REVIEW]
sub_20FE5B8
export/plan0/arm9_main/sub_20FE5B8_020FE5B8.c
- docs/function_notes.md:793 elapsed = sub_2061FB8() minus a3 as a signed byte; negative queues the event through sub_20FE9D0 with delay, otherwise dispatches it via sub_20F0758; for racer 11 with no a2 and a set event byte calls sub_20F81B8 on record 528a4 with state 16
- docs/function_notes/NEEDS_REVIEW.md:946 elapsed = sub_2061FB8() minus *a3; negative queues via sub_20FE9D0, else dispatch via sub_20F0758; a1==11 also sub_20F81B8 on racer slot [REVIEW]
- docs/function_notes/hk_25.md:57 elapsed = sub_2061FB8() minus *a3; negative queues via sub_20FE9D0, else dispatch via sub_20F0758; a1==11 also sub_20F81B8 on racer slot [REVIEW]
sub_20FE694
export/plan0/arm9_main/sub_20FE694_020FE694.c
- docs/function_notes.md:683 writes bytes a2, a3, a4 into the shared record off_20FE714[0] (+1..+3), stamps it with sub_2061FB8, and enqueues type 3 with length 4 through sub_205A858 (when there is room and sub_205AD44 succeeds) or sub_20FEA84
- docs/function_notes/NEEDS_REVIEW.md:947 writes three bytes (a2,a3,a4) into shared event record off_20FE714[0], stamps time sub_2061FB8, enqueues type 3 (len 4) via sub_205A858 or sub_20FEA84 [REVIEW]
- docs/function_notes/hk_25.md:58 writes three bytes (a2,a3,a4) into shared event record off_20FE714[0], stamps time sub_2061FB8, enqueues type 3 (len 4) via sub_205A858 or sub_20FEA84 [REVIEW]
sub_20FE71C
export/plan0/arm9_main/sub_20FE71C_020FE71C.c
- docs/function_notes.md:684 writes a3 at +1 and a2 at +2 of the shared record off_20FE798[0], stamps it with the time, enqueues type 3 with length 3 (same fallback as sub_20FE694)
- docs/function_notes/NEEDS_REVIEW.md:948 writes event record (time, a2, a3), enqueues type 3 with length 3 via sub_205A858 or sub_20FEA84 [REVIEW]
- docs/function_notes/hk_25.md:59 writes event record (time, a2, a3), enqueues type 3 with length 3 via sub_205A858 or sub_20FEA84 [REVIEW]
sub_20FE7A0
export/plan0/arm9_main/sub_20FE7A0_020FE7A0.c
- docs/function_notes.md:685 event record: byte 1 = a4, byte 2 = a2 | (a3 << 4), stamped with sub_2061FB8, enqueued as type 2 with length 3
- docs/function_notes/NEEDS_REVIEW.md:949 event record: byte1=a4, byte2=a2|(a3<<4), stamped with sub_2061FB8; enqueues type 2 length 3 [REVIEW]
- docs/function_notes/hk_25.md:60 event record: byte1=a4, byte2=a2|(a3<<4), stamped with sub_2061FB8; enqueues type 2 length 3 [REVIEW]
sub_20FE828
export/plan0/arm9_main/sub_20FE828_020FE828.c
- docs/function_notes.md:686 event record with byte 1 = -1, stamped with sub_2061FB8, enqueued as type 0 with length 2
- docs/function_notes/NEEDS_REVIEW.md:950 event record: byte1=-1, stamped with sub_2061FB8; enqueues type 0 length 2 [REVIEW]
- docs/function_notes/hk_25.md:61 event record: byte1=-1, stamped with sub_2061FB8; enqueues type 0 length 2 [REVIEW]
sub_20FE8AC
export/plan0/arm9_main/sub_20FE8AC_020FE8AC.c
- docs/function_notes.md:602 queues an event record for racer a1 (size = byte at 168*a1+76, plus 1), stamps it with sub_2061FB8, and enqueues type 0 through sub_205A858 when there is buffer room and sub_205AD44 succeeds, else through sub_20FEA84; returns the buffer pointer
- docs/function_notes/NEEDS_REVIEW.md:951 event record sized by racer entry (168*a1+76)+1, stamped with sub_2061FB8, enqueues type 0 [REVIEW]
- docs/function_notes/hk_25.md:62 event record sized by racer entry (168*a1+76)+1, stamped with sub_2061FB8, enqueues type 0 [REVIEW]
sub_20FE958
export/plan0/arm9_main/sub_20FE958_020FE958.c
- docs/function_notes.md:687 one-byte event record stamped with sub_2061FB8, enqueued as type 0 with length 1 when the u16 at table +1828 is nonzero and sub_205AD44 succeeds, else through sub_20FEA84
- docs/function_notes/NEEDS_REVIEW.md:952 one-byte event record stamped with sub_2061FB8, enqueued type 0 when table flag nonzero [REVIEW]
- docs/function_notes/hk_25.md:63 one-byte event record stamped with sub_2061FB8, enqueued type 0 when table flag nonzero [REVIEW]
sub_20FE9D0
export/plan0/arm9_main/sub_20FE9D0_020FE9D0.c
- docs/function_notes.md:688 queues a delayed event: takes a slot from the free list at off_20FEA70 (no-op when empty), stores a1, a2 and a5 in the 32-byte slot, copies 20 bytes of payload via sub_214D1FC(a4, slot, 20), sets the delay byte to 4 when a5 is nonzero, else -a3, and links the slot into the list
- docs/function_notes/NEEDS_REVIEW.md:953 queues a delayed event: takes slot from free list off_20FEA70, stores pointers and a5, copies a4 payload (sub_214D1FC), sets delay/priority byte [REVIEW]
- docs/function_notes/hk_25.md:64 queues a delayed event: takes slot from free list off_20FEA70, stores pointers and a5, copies a4 payload (sub_214D1FC), sets delay/priority byte [REVIEW]
sub_20FEA84
export/plan0/arm9_main/sub_20FEA84_020FEA84.c
- docs/function_notes.md:794 pushes an event: pops a free entry from the list at off_20FEB30, stores the two words a1/a2, copies the a3 payload with sub_214D1FC (length a4) and links the entry at the tail
- docs/function_notes/NEEDS_REVIEW.md:954 pushes an event: pops free entry from off_20FEB30, stores a1/a2, copies a4 payload from a3, links into active list off_20FEB38 by order [REVIEW]
- docs/function_notes/hk_25.md:65 pushes an event: pops free entry from off_20FEB30, stores a1/a2, copies a4 payload from a3, links into active list off_20FEB38 by order [REVIEW]
sub_20FEB44
export/plan0/arm9_main/sub_20FEB44_020FEB44.c
- docs/function_notes.md:795 per-frame tick of the delayed event list: takes the time from sub_2061FB8, decrements the entry counters and dispatches entries that are due
- docs/function_notes/NEEDS_REVIEW.md:955 per-frame tick of delayed event list: sub_2061FB8 time, decrements entry counters, dispatches expired entries via sub_20F0758 on off_20FEC2C [REVIEW]
- docs/function_notes/hk_25.md:66 per-frame tick of delayed event list: sub_2061FB8 time, decrements entry counters, dispatches expired entries via sub_20F0758 on off_20FEC2C [REVIEW]
sub_20FEC30
export/plan0/arm9_main/sub_20FEC30_020FEC30.c
- docs/function_notes.md:692 drains the queued event list: while the head entry fits the buffer (u16 +1828 >= its length) and sub_205AD44 passes, sends it with sub_205A858 and moves it to the free list
- docs/function_notes/NEEDS_REVIEW.md:956 per-frame drain of queued events: while gate sub_205AD44 passes and version check ok, sends head entries via sub_205A858 [REVIEW]
- docs/function_notes/hk_25.md:67 per-frame drain of queued events: while gate sub_205AD44 passes and version check ok, sends head entries via sub_205A858 [REVIEW]
sub_20FECDC
export/plan0/arm9_main/sub_20FECDC_020FECDC.c
- docs/function_notes.md:796 pack/unpack of the racer state to or from a byte buffer (a3 = 1 packs): fields +78, +116, +80 and more, each via the shared helpers
- docs/function_notes/NEEDS_REVIEW.md:957 pack/unpack of racer state to/from byte buffer (a3=1 packs struct): fields +78, +116, +80..88 (>>9), +228 via sub_20FF0B0, +92, +120 [REVIEW]
- docs/function_notes/hk_25.md:68 pack/unpack of racer state to/from byte buffer (a3=1 packs struct): fields +78, +116, +80..88 (>>9), +228 via sub_20FF0B0, +92, +120 [REVIEW]
sub_20FEFE8
export/plan0/arm9_main/sub_20FEFE8_020FEFE8.c
- docs/function_notes.md:693 single-int pack/unpack: on write stores a2 >> 9 as a byte, on read restores byte << 9 into *a2; returns a1 + 1 (or a1 + 1 when a2 is null)
- docs/function_notes/NEEDS_REVIEW.md:958 single-int pack/unpack: value a2>>9 stored as byte, or byte<<9 restored when a3==0; returns a1+1 [REVIEW]
- docs/function_notes/hk_25.md:69 single-int pack/unpack: value a2>>9 stored as byte, or byte<<9 restored when a3==0; returns a1+1 [REVIEW]
sub_20FF040
export/plan0/arm9_main/sub_20FF040_020FF040.c
- docs/function_notes.md:694 single-byte pack/unpack: on write sub_20F36D8(a2) gives the byte; on read sub_20F36A0(byte, a2) restores it; returns a1 + 1
- docs/function_notes/NEEDS_REVIEW.md:959 single-byte pack/unpack via sub_20F36D8 (write) or sub_20F36A0 (read) on struct a2; returns a1+1 [REVIEW]
- docs/function_notes/hk_25.md:70 single-byte pack/unpack via sub_20F36D8 (write) or sub_20F36A0 (read) on struct a2; returns a1+1 [REVIEW]
sub_20FF0B0
export/plan0/arm9_main/sub_20FF0B0_020FF0B0.c
- docs/function_notes.md:797 three-component fixed-point vector pack/unpack (>>10, >>9, >>10 into bytes on write; the reverse on read); returns the end pointer
- docs/function_notes/NEEDS_REVIEW.md:960 three-component fixed-point vector pack/unpack (>>10, >>9, >>10 into bytes); returns end pointer, or a1+3 when a3 is null [REVIEW]
- docs/function_notes/hk_25.md:71 three-component fixed-point vector pack/unpack (>>10, >>9, >>10 into bytes); returns end pointer, or a1+3 when a3 is null [REVIEW]
sub_20FF178
export/plan0/arm9_main/sub_20FF178_020FF178.c
- docs/function_notes.md:695 returns (sign-extended u16 at +76) | (byte at +120 << 4)
- docs/function_notes/NEEDS_REVIEW.md:961 returns sign-extended (u16 at +76) | (u8 at +120 << 4): packs an id/key field from struct [REVIEW]
- docs/function_notes/hk_25.md:72 returns sign-extended (u16 at +76) | (u8 at +120 << 4): packs an id/key field from struct [REVIEW]
sub_20FF1A0
export/plan0/arm9_main/sub_20FF1A0_020FF1A0.c
- docs/function_notes/hk_25.md:73 reads flag 0x200 of a1 into *a2 (0 or 1) and returns it: bool extractor
sub_20FF1B8
export/plan0/arm9_main/sub_20FF1B8_020FF1B8.c
- docs/function_notes/hk_25.md:74 sets or clears flag 0x200 in *a2 according to a1 nonzero; returns new value: flag setter
sub_20FF1D8
export/plan0/arm9_main/sub_20FF1D8_020FF1D8.c
- docs/function_notes.md:603 racer list init: if the global object at (*off_20FF240)+84 is set, rotates the vector at off_20FF244 via sub_2146F98, assigns each list entry a sub-struct from sub_210543C, sets the list's flag word [16] = 1 and returns the list; otherwise returns the object's +84 value
- docs/function_notes/NEEDS_REVIEW.md:962 racer list init: if global object+84 set, rotates vector off_20FF244 via sub_2146F98, assigns each entry a sub-struct via sub_210543C; +64=1 [REVIEW]
- docs/function_notes/hk_25.md:75 racer list init: if global object+84 set, rotates vector off_20FF244 via sub_2146F98, assigns each entry a sub-struct via sub_210543C; +64=1 [REVIEW]
sub_20FF25C
export/plan0/arm9_main/sub_20FF25C_020FF25C.c
- docs/function_notes.md:696 stops an object: sub_20F8E78, sub_20F2D98(a1, 0); when flag 0x10000000 is set and +316 is nonzero plays sound 218 via sub_21090C4
- docs/function_notes/NEEDS_REVIEW.md:963 stops object via sub_20F8E78 and sub_20F2D98(a1,0); if flag 0x10000000 and +316, plays sound 218 via sub_21090C4 [REVIEW]
- docs/function_notes/hk_25.md:76 stops object via sub_20F8E78 and sub_20F2D98(a1,0); if flag 0x10000000 and +316, plays sound 218 via sub_21090C4 [REVIEW]
sub_20FF2B0
export/plan0/arm9_main/sub_20FF2B0_020FF2B0.c
- docs/function_notes.md:697 pack/unpack wrapper using +316 and +96 (sub_20FF1B8 on write, sub_20FF1A0 on read); write path returns sub_20FE8AC(a2+68)
- docs/function_notes/NEEDS_REVIEW.md:964 pack/unpack wrapper like sub_20FDA50 using flag at +316 and +96; write path returns sub_20FE8AC(a2[68]) [REVIEW]
- docs/function_notes/hk_25.md:77 pack/unpack wrapper like sub_20FDA50 using flag at +316 and +96; write path returns sub_20FE8AC(a2[68]) [REVIEW]
sub_20FF334
export/plan0/arm9_main/sub_20FF334_020FF334.c
- docs/function_notes/hk_25.md:78 thin indirect call through off_20FF340 with a1+320
sub_20FF3C4
export/plan0/arm9_main/sub_20FF3C4_020FF3C4.c
- docs/function_notes.md:698 normalises the vector at off_20FF430 into a1+76 when its squared length >= 16, sets (a1[80]+176) = 2, sets a1[72] = off_20FF434 when no 0x180000 flags, returns 2
- docs/function_notes/NEEDS_REVIEW.md:965 normalizes vector at off_20FF430 into a1+76 if length >=4, sets (a1[80]+176)=2, sets a1[72]=off_20FF434 when no flags; returns 2 [REVIEW]
- docs/function_notes/hk_25.md:79 normalizes vector at off_20FF430 into a1+76 if length >=4, sets (a1[80]+176)=2, sets a1[72]=off_20FF434 when no flags; returns 2 [REVIEW]
sub_20FF438
export/plan0/arm9_main/sub_20FF438_020FF438.c
- docs/function_notes.md:798 per-frame movement dispatch: when flags 0x180000 are set calls sub_20F6E58 (0x80000) or sub_20F758C (0x100000); otherwise sub_20F68B0 for 0x8000 and sub_20F63CC for 0x4000
- docs/function_notes/NEEDS_REVIEW.md:966 per-frame movement dispatch: 0x180000 -> sub_20F6E58/sub_20F758C, 0x8000 sub_20F68B0, 0x4000 sub_20F63CC, else sub_20F2DF0; then sub_2105338 [REVIEW]
- docs/function_notes/hk_25.md:80 per-frame movement dispatch: 0x180000 -> sub_20F6E58/sub_20F758C, 0x8000 sub_20F68B0, 0x4000 sub_20F63CC, else sub_20F2DF0; then sub_2105338 [REVIEW]
sub_20FF538
export/plan0/arm9_main/sub_20FF538_020FF538.c
- vm_model/src/kart/hand.rs:475 The fake item box leaves the same way (
sub_20FF538: the same forward throw and+0x13Cflag). - vm_model/src/kart/hand.rs:515 The fake item box dropped behind (
sub_20FF538backward form). - game/src/items.rs:794 the fake item box leaves like a banana (
sub_20FF538, replayed against a recording) but has its own type constants - docs/function_notes.md:799 sub-object init: ORs the flag from off_20FF62C into +120, rotates the vector at a2+148 via sub_2146DFC, zeroes +304..+312; when record +492 bit 0x10 is set calls sub_20F3150 and plays sound 218, sets +316 = 1
- docs/function_notes/NEEDS_REVIEW.md:967 sub-object init: flag from off_20FF62C into +120, rotates vector via sub_2146DFC, clears +304..312; bit 0x10 of a1[3]+492 plays sound 218, sets +316 [REVIEW]
- docs/function_notes/hk_25.md:81 sub-object init: flag from off_20FF62C into +120, rotates vector via sub_2146DFC, clears +304..312; bit 0x10 of a1[3]+492 plays sound 218, sets +316 [REVIEW]
sub_20FF638
export/plan0/arm9_main/sub_20FF638_020FF638.c
- docs/function_notes/hk_25.md:82 thin indirect call through off_20FF650 with a2+320, a2+216, a2+104
sub_20FF654
export/plan0/arm9_main/sub_20FF654_020FF654.c
- docs/function_notes/hk_25.md:83 sets *(a1+320)+176=1, then indirect call off_20FF674(a1+320, off_20FF678): thin wrapper
sub_20FF67C
export/plan0/arm9_main/sub_20FF67C_020FF67C.c
- docs/function_notes.md:699 copies the initial vectors from off_20FF6D0 into a1[37..45], calls sub_21053E4 on a1[80], sets +176 = 2 and returns sub_21052F0(a1[80], off_20FF6D4, a1)
- docs/function_notes/NEEDS_REVIEW.md:968 copies initial vectors from off_20FF6D0 into a1+37..45, calls sub_21053E4 on a1[80], sets +176=2, returns sub_21052F0(a1[80], off_20FF6D4, a1) [REVIEW]
- docs/function_notes/hk_25.md:84 copies initial vectors from off_20FF6D0 into a1+37..45, calls sub_21053E4 on a1[80], sets +176=2, returns sub_21052F0(a1[80], off_20FF6D4, a1) [REVIEW]
sub_20FF6D8
export/plan0/arm9_main/sub_20FF6D8_020FF6D8.c
- docs/function_notes.md:911 per-frame physics step: when flag 0x80000 is set and sub_20B2EC0 is false, integrates a1[37..45] with the input a1[76] and a1[78] (scaled by 164 >> 12)
- docs/function_notes/NEEDS_REVIEW.md:969 per-frame physics step: if flag 0x80000 integrates a1+37..45 with input a1[76]/a1[78] (scale 164), re-orthonormalises; writes pose to a2 [REVIEW]
- docs/function_notes/hk_25.md:85 per-frame physics step: if flag 0x80000 integrates a1+37..45 with input a1[76]/a1[78] (scale 164), re-orthonormalises; writes pose to a2 [REVIEW]
sub_20FF910
export/plan0/arm9_main/sub_20FF910_020FF910.c
- docs/function_notes.md:700 writes the 12-word pose from the vectors at a1[37..45] into the output a2, and sets a1[46..48] from the vector at a1[52] >> 4
- docs/function_notes/NEEDS_REVIEW.md:970 writes pose (12 words) from a1 vectors to a2, sets a1[46..48] from a1[52], transforms a2 via sub_2146DFC(off_20FF978) [REVIEW]
- docs/function_notes/hk_25.md:86 writes pose (12 words) from a1 vectors to a2, sets a1[46..48] from a1[52], transforms a2 via sub_2146DFC(off_20FF978) [REVIEW]
sub_20FF97C
export/plan0/arm9_main/sub_20FF97C_020FF97C.c
- docs/function_notes.md:800 resets physics state: copies four words pairs from a1+40 into a1+160 and derives the scaled values
- docs/function_notes/NEEDS_REVIEW.md:971 resets physics state: copies a1+40..48 to a1+160.., zeroes counters, derives scaled values from a1+28/32/36 via sub_2133048, sets flags [REVIEW]
- docs/function_notes/hk_25.md:87 resets physics state: copies a1+40..48 to a1+160.., zeroes counters, derives scaled values from a1+28/32/36 via sub_2133048, sets flags [REVIEW]
sub_20FFABC
export/plan0/arm9_main/sub_20FFABC_020FFABC.c
- docs/function_notes.md:518 is id 11
- docs/function_notes/hk_25.md:88 predicate: returns a1 == 11
sub_20FFACC
export/plan0/arm9_main/sub_20FFACC_020FFACC.c
- docs/function_notes.md:701 allocates a 64-byte object from the heap pool and copies a 16-word template from *off_20FFB18
- docs/function_notes/NEEDS_REVIEW.md:972 allocates 64-byte object from heap (sub_2036BEC on sub_20364E0 pool) and copies 16-word template from off_20FFB18 [REVIEW]
- docs/function_notes/hk_25.md:89 allocates 64-byte object from heap (sub_2036BEC on sub_20364E0 pool) and copies 16-word template from off_20FFB18 [REVIEW]
sub_20FFB1C
export/plan0/arm9_main/sub_20FFB1C_020FFB1C.c
- vm_model/src/mapobj/drum.rs:1 Waluigi Pinball's slot drums (0xD2): init
sub_20FFB1C, six states at0x020FFBCC's table, - docs/function_notes.md:431 pinball drum (0xD2) init: speeds s0lo128/100, s2lo128/100 and their mean, timings s0hi/s1lo/s1hi; 6 states (visual spinner)
- docs/function_notes/NEEDS_REVIEW.md:973 init speed/position controller at a1+128: state machine off_20FFBCC, a1+180/184/182 from a2[20]/[24] scaled, copies a2[21..23], state 1 at +144 [REVIEW]
- docs/function_notes/hk_25.md:90 init speed/position controller at a1+128: state machine off_20FFBCC, a1+180/184/182 from a2[20]/[24] scaled, copies a2[21..23], state 1 at +144 [REVIEW]
sub_20FFBD4
export/plan0/arm9_main/sub_20FFBD4_020FFBD4.c
- docs/function_notes.md:702 looks up a model via sub_20D21EC(off_20FFBFC), sub_20EA588 on off_20FFC00, then sub_2084968(obj, 63, 2, dword_20FFC04)
- docs/function_notes/NEEDS_REVIEW.md:974 sets up a model/resource: sub_20D21EC lookup from off_20FFBFC, sub_20EA588, then sub_2084968(obj, 63, 2, dword_20FFC04); likely init call [REVIEW]
- docs/function_notes/hk_25.md:91 sets up a model/resource: sub_20D21EC lookup from off_20FFBFC, sub_20EA588, then sub_2084968(obj, 63, 2, dword_20FFC04); likely init call [REVIEW]
sub_20FFC08
export/plan0/arm9_main/sub_20FFC08_020FFC08.c
- docs/function_notes.md:469 drum state 5: +150 a tick to the face, then idle (state 1)
- docs/function_notes/NEEDS_REVIEW.md:975 adds 150 to +166 and subtracts 150 from +188; on negative +188 adjusts +166 and sets state 1 at +144 [REVIEW]
- docs/function_notes/hk_25.md:92 adds 150 to +166 and subtracts 150 from +188; on negative +188 adjusts +166 and sets state 1 at +144 [REVIEW]
sub_20FFC4C
export/plan0/arm9_main/sub_20FFC4C_020FFC4C.c
- vm_model/src/mapobj/drum.rs:72 sub_20FFC4C: the way left to the next face
- docs/function_notes.md:468 drum state 5 enter: the way to the next of 10 faces (0x1999 each)
- docs/function_notes/NEEDS_REVIEW.md:976 sets +188 = dword_20FFC94 minus fixed-point modulo of +166 by dword_20FFC94 [REVIEW]
- docs/function_notes/hk_25.md:93 sets +188 = dword_20FFC94 minus fixed-point modulo of +166 by dword_20FFC94 [REVIEW]
sub_20FFC98
export/plan0/arm9_main/sub_20FFC98_020FFC98.c
- docs/function_notes.md:467 drum state 4: factor -= step, angle += max(factor*speed, 150); after the ramp -> 5
- docs/function_notes/NEEDS_REVIEW.md:977 +172 -= +176; adds (+172 * +168)>>12 (min 150) to +166; if +132 exceeds +160 sets state 5 [REVIEW]
- docs/function_notes/hk_25.md:94 +172 -= +176; adds (+172 * +168)>>12 (min 150) to +166; if +132 exceeds +160 sets state 5 [REVIEW]
sub_20FFCF8
export/plan0/arm9_main/sub_20FFCF8_020FFCF8.c
- docs/function_notes.md:466 drum state 4 enter: factor 4096
- docs/function_notes/hk_25.md:95 sets +172 = 4096 (1.0 in 12-bit fixed point): trivial setter
sub_20FFD04
export/plan0/arm9_main/sub_20FFD04_020FFD04.c
- docs/function_notes.md:465 drum state 3: angle += speed; after the run (setting 0 hi) -> 4
- docs/function_notes/NEEDS_REVIEW.md:978 adds +168 to +166; if +162 set and +132 exceeds it, sets state 4 [REVIEW]
- docs/function_notes/hk_25.md:96 adds +168 to +166; if +162 set and +132 exceeds it, sets state 4 [REVIEW]
sub_20FFD40
export/plan0/arm9_main/sub_20FFD40_020FFD40.c
- docs/function_notes.md:464 drum state 2: factor += step, angle += factor*speed; after the ramp -> 3
- docs/function_notes/NEEDS_REVIEW.md:979 +172 += +176; +166 += (+172 * +168)>>12; if +132 exceeds +160 sets state 3 [REVIEW]
- docs/function_notes/hk_25.md:98 +172 += +176; +166 += (+172 * +168)>>12; if +132 exceeds +160 sets state 3 [REVIEW]
sub_20FFD94
export/plan0/arm9_main/sub_20FFD94_020FFD94.c
- docs/function_notes.md:463 drum state 2 enter: speed factor 0
- docs/function_notes/hk_25.md:99 sets +172 = 0: trivial setter
sub_20FFDA0
export/plan0/arm9_main/sub_20FFDA0_020FFDA0.c
- docs/function_notes.md:462 drum state 0: wait (setting 1 hi) ticks -> 2
- docs/function_notes/NEEDS_REVIEW.md:980 if +132 exceeds +164, sets state 2 [REVIEW]
- docs/function_notes/hk_25.md:100 if +132 exceeds +164, sets state 2 [REVIEW]
sub_20FFDC4
export/plan0/arm9_main/sub_20FFDC4_020FFDC4.c
- docs/function_notes/hk_25.md:102 thin indirect call through off_20FFDD0 with a2+128
sub_20FFDD4
export/plan0/arm9_main/sub_20FFDD4_020FFDD4.c
- vm_model/src/mapobj/drum.rs:2 the course-wide manager
sub_20FFDD4, drawsub_20FFEB8(turned about x by -angle, the - vm_model/src/mapobj/drum.rs:123
sub_20FFDD4, once a tick: when every drum is idle, a new round. - game/src/objects.rs:1417 the drums' manager (
sub_20FFDD4): a new round once every drum is idle - docs/function_notes.md:470 drum manager: when every drum is idle, a random order (off_20FFEB4, 6 permutations) of the fast/middle/slow speeds, all to state 0
- docs/function_notes/NEEDS_REVIEW.md:981 for list of N objects, if none is in state 1 picks a random index (sub_20D22D0 LCG) from off_20FFEB4 table, assigns +84 and resets +72/+73 [REVIEW]
- docs/function_notes/hk_25.md:103 for list of N objects, if none is in state 1 picks a random index (sub_20D22D0 LCG) from off_20FFEB4 table, assigns +84 and resets +72/+73 [REVIEW]
sub_20FFEB8
export/plan0/arm9_main/sub_20FFEB8_020FFEB8.c
- vm_model/src/mapobj/drum.rs:2 the course-wide manager
sub_20FFDD4, drawsub_20FFEB8(turned about x by -angle, the - game/src/objects.rs:1238 drawn turned about x by -angle in place of its own rotation (
sub_20FFEB8) - docs/function_notes.md:471 drum draw: rotation about x by -angle replaces the object's matrix
- docs/function_notes/NEEDS_REVIEW.md:982 computes offset from a2+166 via table off_20FFF44, sets a2+40 vector, calls sub_20EA8A8 with off_20FFF48 object [REVIEW]
- docs/function_notes/hk_25.md:104 computes offset from a2+166 via table off_20FFF44, sets a2+40 vector, calls sub_20EA8A8 with off_20FFF48 object [REVIEW]
sub_20FFF4C
export/plan0/arm9_main/sub_20FFF4C_020FFF4C.c
- docs/function_notes.md:703 allocates a 44-byte object, copies an 11-word template from off_20FFFA4 and stores the pointer in off_20FFFA0
- docs/function_notes/NEEDS_REVIEW.md:983 allocates 44-byte object from heap, copies 11-word template from off_20FFFA4, stores pointer in off_20FFFA0, calls sub_20D49D8 [REVIEW]
- docs/function_notes/hk_25.md:105 allocates 44-byte object from heap, copies 11-word template from off_20FFFA4, stores pointer in off_20FFFA0, calls sub_20D49D8 [REVIEW]
sub_20FFFA8
export/plan0/arm9_main/sub_20FFFA8_020FFFA8.c
- docs/function_notes.md:704 allocates a 40-byte object, copies a 10-word template from off_2100000 and stores the pointer in off_20FFFFC
- docs/function_notes/NEEDS_REVIEW.md:984 allocates 40-byte object from heap, copies 10-word template from off_2100000, stores pointer in off_20FFFFC, calls sub_20E6F50 [REVIEW]
- docs/function_notes/hk_25.md:106 allocates 40-byte object from heap, copies 10-word template from off_2100000, stores pointer in off_20FFFFC, calls sub_20E6F50 [REVIEW]
sub_2100004
export/plan0/arm9_main/sub_2100004_02100004.c
- docs/function_notes/hk_25.md:107 allocates a 64-byte heap object (sub_2036BEC from pool sub_20364E0) and zeroes its 16 words; returns it
sub_2100084
export/plan0/arm9_main/sub_2100084_02100084.c
- docs/function_notes/hk_25.md:108 returns (int)a1: trivial getter
sub_210008C
export/plan0/arm9_main/sub_210008C_0210008C.c
- docs/function_notes/hk_25.md:109 returns (int)a1: trivial getter
sub_2100094
export/plan0/arm9_main/sub_2100094_02100094.c
- docs/function_notes.md:705 walks the entry count at a1+4 back while the first halfword of the last entry is 111, keeping at least 1; returns the trimmed count
- docs/function_notes/NEEDS_REVIEW.md:985 walks back from entry count a1+4 while list entry's first halfword is 111; returns the trimmed count [REVIEW]
- docs/function_notes/hk_25.md:110 walks back from entry count a1+4 while list entry's first halfword is 111; returns the trimmed count [REVIEW]
sub_21000C8
export/plan0/arm9_main/sub_21000C8_021000C8.c
- docs/function_notes/hk_25.md:111 returns u16 at a1+4: trivial getter (count field)
sub_21000D0
export/plan0/arm9_main/sub_21000D0_021000D0.c
- docs/function_notes.md:706 looks up a1 in the 12-byte record table at off_2100130 (count from sub_20D2C20); returns the byte-9 field of the matching record of off_2100134, or 0
- docs/function_notes/NEEDS_REVIEW.md:986 looks up a1 in 12-byte record table off_2100130 (count from sub_20D2C20); returns off_2100134[3*idx][9] or 0 [REVIEW]
- docs/function_notes/hk_25.md:112 looks up a1 in 12-byte record table off_2100130 (count from sub_20D2C20); returns off_2100134[3*idx][9] or 0 [REVIEW]
sub_2100138
export/plan0/arm9_main/sub_2100138_02100138.c
- docs/function_notes.md:707 same lookup over the table at off_2100198; returns the byte-12 field from off_210019C, or 0
- docs/function_notes/NEEDS_REVIEW.md:987 same lookup as sub_21000D0 over table off_2100198; returns off_210019C[3*idx][12] or 0 [REVIEW]
- docs/function_notes/hk_25.md:113 same lookup as sub_21000D0 over table off_2100198; returns off_210019C[3*idx][12] or 0 [REVIEW]
sub_21001A0
export/plan0/arm9_main/sub_21001A0_021001A0.c
- docs/function_notes/hk_25.md:114 returns dword_21001A8: trivial getter
sub_21001AC
export/plan0/arm9_main/sub_21001AC_021001AC.c
- docs/function_notes.md:871 when the timer at +216 is above 0 sends parameter blocks via sub_1FF9048 (ids 20, 25, 27 and more) built from the object's model data
- docs/function_notes/NEEDS_REVIEW.md:988 when a1+216>0 pushes parameter blocks via sub_1FF9048 (ids 20,25,27,17,28,18), channel attributes via sub_20E6854, then sub_20ED588; likely sound setup [REVIEW]
- docs/function_notes/hk_25.md:115 when a1+216>0 pushes parameter blocks via sub_1FF9048 (ids 20,25,27,17,28,18), channel attributes via sub_20E6854, then sub_20ED588; likely sound setup [REVIEW]
sub_21003E8
export/plan0/arm9_main/sub_21003E8_021003E8.c
- docs/function_notes.md:708 switch on a2: 0 stores a3 at +148 (and sets +147 = 1 when it equals the racer id byte); 1 stores a3 at +153; 2 stores a3 >> 2 at +149 and a3 & 3 at +150; 3 does the same at +151/+152
- docs/function_notes/NEEDS_REVIEW.md:989 switch on a2 0..3 setting packed fields: case 0 stores a3 at +148 (+147 if equal to table byte), 1 sets +153, 2/3 split a3 into >>2 and &3 [REVIEW]
- docs/function_notes/hk_25.md:116 switch on a2 0..3 setting packed fields: case 0 stores a3 at +148 (+147 if equal to table byte), 1 sets +153, 2/3 split a3 into >>2 and &3 [REVIEW]
sub_210045C
export/plan0/arm9_main/sub_210045C_0210045C.c
- docs/function_notes.md:604 stops a kart: sub_20F8E78(a1), sub_208ADC8(a1+124, 1), sub_2046BCC(a1+300, 0), then sub_20F81B8 on the kart record off_21004C0 + 528*(kart id, 8 if negative) with state 16
- docs/function_notes/NEEDS_REVIEW.md:990 stops object: sub_20F8E78, sub_208ADC8(a1+124), sub_2046BCC(a1+300,0), sub_20F81B8 on racer slot off_21004C0+528*v3 (v3 from +120, 8 if negative) [REVIEW]
- docs/function_notes/hk_25.md:117 stops object: sub_20F8E78, sub_208ADC8(a1+124), sub_2046BCC(a1+300,0), sub_20F81B8 on racer slot off_21004C0+528*v3 (v3 from +120, 8 if negative) [REVIEW]
sub_21004C4
export/plan0/arm9_main/sub_21004C4_021004C4.c
- docs/function_notes.md:709 wrapper: calls sub_20FECDC(a1, a2, a3); when a2 and a3 are nonzero returns sub_20FE8AC(a2+68), otherwise the packing result
- docs/function_notes/NEEDS_REVIEW.md:991 pack/unpack wrapper: calls sub_20FECDC(a1,a2,a3); when a2&&a3 returns sub_20FE8AC(a2[68]), otherwise the pack result [REVIEW]
- docs/function_notes/hk_25.md:118 pack/unpack wrapper: calls sub_20FECDC(a1,a2,a3); when a2&&a3 returns sub_20FE8AC(a2[68]), otherwise the pack result [REVIEW]
sub_210050C
export/plan0/arm9_main/sub_210050C_0210050C.c
- docs/function_notes.md:605 kart state check (528-byte records from *off_2100560 indexed by kart id): if the record state (+20) is 16, sets it to 19 when kart+344 != -64; returns -64 when kart+344 == -64 and 19 when it changed; otherwise returns its argument unchanged
- docs/function_notes/NEEDS_REVIEW.md:992 reads kart state record (528-byte stride from off_2100560, index kart+120); if state==16 and kart+344 != -64, sets state to 19; returns -64 or 19 [REVIEW]
- docs/function_notes/hk_26.md:2 reads kart state record (528-byte stride from off_2100560, index kart+120); if state==16 and kart+344 != -64, sets state to 19; returns -64 or 19 [REVIEW]
sub_2100564
export/plan0/arm9_main/sub_2100564_02100564.c
- docs/function_notes.md:872 per-frame kart tick: when +348 is zero, scales the velocity +376/+384 by dword_21006F8 >> 12 and adds it to the position at +364/+372
- docs/function_notes/NEEDS_REVIEW.md:993 per-frame kart tick: integrates velocity (+376/+384 scaled by dword_21006F8) into position (+364/+372); bumps +356; calls sub_2101618 and sub_20F0F70 [REVIEW]
- docs/function_notes/hk_26.md:3 per-frame kart tick: integrates velocity (+376/+384 scaled by dword_21006F8) into position (+364/+372); bumps +356; calls sub_2101618 and sub_20F0F70 [REVIEW]
sub_2100704
export/plan0/arm9_main/sub_2100704_02100704.c
- docs/function_notes.md:912 kart action state machine tick: takes the record for the kart id (528 stride, id 8 when negative) and switches the state (+340/+344) to the queued action
- docs/function_notes/NEEDS_REVIEW.md:994 kart action state machine tick: sub_21014A0 countdown, switches state (+340/+344) to queued action, plays sfx 248 and event 11 [REVIEW]
- docs/function_notes/hk_26.md:5 kart action state machine tick: sub_21014A0 countdown, switches state (+340/+344) to queued action, plays sfx 248 and event 11 [REVIEW]
sub_21009FC
export/plan0/arm9_main/sub_21009FC_021009FC.c
- docs/function_notes.md:873 kart state entry setup: sets +360 from the state record's +508 (record 528*id) and copies the vector pairs from the record into +388..+408
- docs/function_notes/NEEDS_REVIEW.md:995 kart state entry setup: copies vector pairs from state record (+152..+172) into +388..+408, zeroes +364/+372, tail-calls one of two handlers [REVIEW]
- docs/function_notes/hk_26.md:6 kart state entry setup: copies vector pairs from state record (+152..+172) into +388..+408, zeroes +364/+372, tail-calls one of two handlers [REVIEW]
sub_2100B54
export/plan0/arm9_main/sub_2100B54_02100B54.c
- docs/function_notes/hk_26.md:7 pops head node of an intrusive list (sentinel at this+196), copies its 3-word payload into this+80..+88, relinks sentinel
sub_2100B78
export/plan0/arm9_main/sub_2100B78_02100B78.c
- docs/function_notes/hk_26.md:8 resets list head pointer this+208 to sentinel this+196 (list init)
sub_2100B84
export/plan0/arm9_main/sub_2100B84_02100B84.c
- docs/function_notes.md:710 decrements the countdown at +616; at expiry sets +588 = 1 when flag 0x10000000 is clear, and sets sub-struct +256 fields +60 = 5, +62 = 1
- docs/function_notes/NEEDS_REVIEW.md:996 decrements countdown +616; at expiry sets +588 (bit 0x10000000 clear) and sub-struct +256 fields +60=5, +62=1 [REVIEW]
- docs/function_notes/hk_26.md:9 decrements countdown +616; at expiry sets +588 (bit 0x10000000 clear) and sub-struct +256 fields +60=5, +62=1 [REVIEW]
sub_2100BC8
export/plan0/arm9_main/sub_2100BC8_02100BC8.c
- docs/function_notes.md:711 sets the countdown +616 = (15 when flag 0x10000000 is set, else 0) minus its old value, and clears +588
- docs/function_notes/NEEDS_REVIEW.md:997 sets countdown +616 to (flag 0x10000000 ? 15 : 0) minus old value, and clears +588 [REVIEW]
- docs/function_notes/hk_26.md:10 sets countdown +616 to (flag 0x10000000 ? 15 : 0) minus old value, and clears +588 [REVIEW]
sub_2100BF0
export/plan0/arm9_main/sub_2100BF0_02100BF0.c
- docs/function_notes.md:874 per-frame update: raises the 16-bit counter at +128 by 5 up to 31, scales the velocities a1[94]/a1[96] by dword_2100DCC >> 12, and for state 18 accumulates velocity before calling sub_2101964
- docs/function_notes/NEEDS_REVIEW.md:998 per-frame update: state 18 accumulates velocity and calls sub_2101964; otherwise integrates position and calls sub_2101618 [REVIEW]
- docs/function_notes/hk_26.md:11 per-frame update: state 18 accumulates velocity and calls sub_2101964; otherwise integrates position and calls sub_2101618 [REVIEW]
sub_2100DD8
export/plan0/arm9_main/sub_2100DD8_02100DD8.c
- docs/function_notes/hk_26.md:12 sets +412 to 0
sub_2100DE4
export/plan0/arm9_main/sub_2100DE4_02100DE4.c
- docs/function_notes.md:913 kart item/state machine tick: when state +320 is 8 and +304 > 110 sets +352 = 15 and picks the next state (4 with flag 0x8000000, else 5)
- docs/function_notes/NEEDS_REVIEW.md:999 kart item/state machine tick: state 14 calls sub_2101014 (item selection) or cycles queued states +596/+600; state 15 when +304 > 110 [REVIEW]
- docs/function_notes/hk_26.md:13 kart item/state machine tick: state 14 calls sub_2101014 (item selection) or cycles queued states +596/+600; state 15 when +304 > 110 [REVIEW]
sub_2101014
export/plan0/arm9_main/sub_2101014_02101014.c
- docs/function_notes.md:914 item-use selection from the per-kart record table off_2101164 (528 stride, index +80): returns 15 when the record state is 19 or busy, 16 check, otherwise the selected item
- docs/function_notes/NEEDS_REVIEW.md:1000 item-use selection from per-kart record table (off_2101164, 528 stride) with busy/held checks; plays sound, calls sub_2068A10; returns item-table word [REVIEW]
- docs/function_notes/hk_26.md:14 item-use selection from per-kart record table (off_2101164, 528 stride) with busy/held checks; plays sound, calls sub_2068A10; returns item-table word [REVIEW]
sub_2101178
export/plan0/arm9_main/sub_2101178_02101178.c
- docs/function_notes.md:915 per-frame kart position update: takes the matrix from sub_2061808 for +364/+368 offsets and pops queued actions via the table off_2101360
- docs/function_notes/NEEDS_REVIEW.md:1001 per-frame kart position update: matrix from sub_2061808 gives +364/+368 offsets; pops queued state +208 into +80; loads state record when slot<8 [REVIEW]
- docs/function_notes/hk_26.md:15 per-frame kart position update: matrix from sub_2061808 gives +364/+368 offsets; pops queued state +208 into +80; loads state record when slot<8 [REVIEW]
sub_210136C
export/plan0/arm9_main/sub_210136C_0210136C.c
- docs/function_notes.md:606 starts a queued action at kart+592 when that is not -1 and (+588 is set or +304 >= 40): sets +616 = +304 - 40, +320 = +592, +316 = 2 (timer), +278 = 1; returns 1
- docs/function_notes/NEEDS_REVIEW.md:1002 starts queued action at +592 if valid and (+588 set or +304>=40): +320=+592, +316=2 timer, +616=+304-40; returns 1 [REVIEW]
- docs/function_notes/hk_26.md:16 starts queued action at +592 if valid and (+588 set or +304>=40): +320=+592, +316=2 timer, +616=+304-40; returns 1 [REVIEW]
sub_21013BC
export/plan0/arm9_main/sub_21013BC_021013BC.c
- docs/function_notes.md:607 if +588 is set, runs sub_2101F7C(this, -1) (item target pick), posts event 11 via sub_20FE694 with +78 and +320, moves +320 into +592 and clears +588; returns 0
- docs/function_notes/NEEDS_REVIEW.md:1003 if +588 set, runs sub_2101F7C(this,-1) (item target pick), posts event 11, moves +320 into +592, clears +588 [REVIEW]
- docs/function_notes/hk_26.md:17 if +588 set, runs sub_2101F7C(this,-1) (item target pick), posts event 11, moves +320 into +592, clears +588 [REVIEW]
sub_210140C
export/plan0/arm9_main/sub_210140C_0210140C.c
- docs/function_notes.md:712 requests sub-state 1 or 2 via sub_2101618 (1 when flag 0x8000000 is set); when that flag is set and +588 and +324 are clear, sets +324 = 1 and clears the pending value +612 when it is 0 or 7
- docs/function_notes/NEEDS_REVIEW.md:1004 requests sub-state 1 or 2 via sub_2101618; if flag 0x8000000 and +588/+324 clear, sets +81=1 and clears pending +612 when 0 or 7 [REVIEW]
- docs/function_notes/hk_26.md:18 requests sub-state 1 or 2 via sub_2101618; if flag 0x8000000 and +588/+324 clear, sets +81=1 and clears pending +612 when 0 or 7 [REVIEW]
sub_21014A0
export/plan0/arm9_main/sub_21014A0_021014A0.c
- docs/function_notes.md:876 kart motion step: when +348 is set calls sub_210174C; otherwise scales the velocity by the speed table off_2101610 indexed by +304 (the +620 branch uses the record's +364)
- docs/function_notes/NEEDS_REVIEW.md:1005 kart motion step: sub_210174C if +348, else scales velocity by speed table off_2101610 (by +304); calls sub_2101964; snapshots +376/+384 at frames 39/40 [REVIEW]
- docs/function_notes/hk_26.md:19 kart motion step: sub_210174C if +348, else scales velocity by speed table off_2101610 (by +304); calls sub_2101964; snapshots +376/+384 at frames 39/40 [REVIEW]
sub_2101618
export/plan0/arm9_main/sub_2101618_02101618.c
- docs/function_notes.md:1567 race-motion step: updates the speed (+380, +368) and calls sub_2101964
- docs/function_notes/NEEDS_REVIEW.md:1006 race-motion step: updates speed (+380, +368), calls sub_2101964, returns 0 until frame threshold (40/55), then latches +332/+336 and +316/+318 [REVIEW]
- docs/function_notes/hk_26.md:20 race-motion step: updates speed (+380, +368), calls sub_2101964, returns 0 until frame threshold (40/55), then latches +332/+336 and +316/+318 [REVIEW]
sub_210174C
export/plan0/arm9_main/sub_210174C_0210174C.c
- docs/function_notes.md:831 path/curve progress: while the step counter at a1[146] is below 11 and sub_20D849C passes, advances the counter and steps the segment over the table off_2101898
- docs/function_notes/NEEDS_REVIEW.md:1007 path/curve progress: steps up to 11 segments via sub_20D849C/sub_20F3FA8 over table off_2101898, computes position, adds to +364 via sub_21484D0/sub_2147FD8 [REVIEW]
- docs/function_notes/hk_26.md:21 path/curve progress: steps up to 11 segments via sub_20D849C/sub_20F3FA8 over table off_2101898, computes position, adds to +364 via sub_21484D0/sub_2147FD8 [REVIEW]
sub_21018A0
export/plan0/arm9_main/sub_21018A0_021018A0.c
- docs/function_notes/hk_26.md:22 kart reset on state entry: loads record sub_207A974(slot), copies vectors +152..+172 into +388..+408, sets initial +368, zeroes +364/+372/+380, sets +216=31
sub_2101964
export/plan0/arm9_main/sub_2101964_02101964.c
- docs/function_notes.md:1596 kart physics step (784 bytes): damping from the flags at +384, +124 and +76, then blends +388..+408 from the record
- docs/function_notes/NEEDS_REVIEW.md:1008 kart physics step: damping from flags (+384, +124, +76); blends +388..+408 from record or matrix; clamps velocity to +/-2048 or +/-1024 into +364/+372 [REVIEW]
- docs/function_notes/hk_26.md:23 kart physics step: damping from flags (+384, +124, +76); blends +388..+408 from record or matrix; clamps velocity to +/-2048 or +/-1024 into +364/+372 [REVIEW]
sub_2101C84
export/plan0/arm9_main/sub_2101C84_02101C84.c
- docs/function_notes.md:713 object update: runs the state machine sub_2046B40 on +300, blends the position with sub_21484D0, and when the queue is idle (+208 == +196) transforms +196 by the sub-object at +360 via sub_2146D78 and sub_2148504
- docs/function_notes/NEEDS_REVIEW.md:1009 object update: runs state machine sub_2046B40 on +300, blends position via sub_21484D0, and if queue is idle computes transform into +196 [REVIEW]
- docs/function_notes/hk_26.md:24 object update: runs state machine sub_2046B40 on +300, blends position via sub_21484D0, and if queue is idle computes transform into +196 [REVIEW]
sub_2101D18
export/plan0/arm9_main/sub_2101D18_02101D18.c
- docs/function_notes.md:714 enter state: sub_2069AA0 and sub_20F8E3C(kart, 246) on the kart at a1+16, sub_20F81B8(record, 16), sub_208ADC8 on +124, +328 = (record +492 bit 0x20 clear), sub_2046BCC(+300, 0), +588 = 1; returns 1
- docs/function_notes/NEEDS_REVIEW.md:1010 enter state: sub_2069AA0 and sub_20F8E3C(...,246) on object a1+16, sub_20F81B8, sub_208ADC8 on +124, sets +328 from record flag 0x20, sub_2046BCC, +588=1 [REVIEW]
- docs/function_notes/hk_26.md:25 enter state: sub_2069AA0 and sub_20F8E3C(...,246) on object a1+16, sub_20F81B8, sub_208ADC8 on +124, sets +328 from record flag 0x20, sub_2046BCC, +588=1 [REVIEW]
sub_2101D90
export/plan0/arm9_main/sub_2101D90_02101D90.c
- docs/function_notes.md:875 picks a random valid kart slot as an item target: advances a 32-bit LCG stored at off_2101F60+1148 and scans the kart slots for a valid one
- docs/function_notes/NEEDS_REVIEW.md:1011 picks a random valid kart slot as item target: advances LCG at off_2101F60+1148, scans slot table off_2101F70 for first valid slot != a2, stores in +320 [REVIEW]
- docs/function_notes/hk_26.md:26 picks a random valid kart slot as item target: advances LCG at off_2101F60+1148, scans slot table off_2101F70 for first valid slot != a2, stores in +320 [REVIEW]
sub_2101F7C
export/plan0/arm9_main/sub_2101F7C_02101F7C.c
- game/src/items.rs:970 Boo (
sub_2101F7C): walk outward from the user's place, one ahead then one behind, giving - docs/function_notes/NEEDS_REVIEW.md:1012 builds candidate list of eligible karts around the racer's rank (sub_203C8DC) and picks one by weighted random threshold into +320 [REVIEW]
- docs/function_notes/hk_26.md:27 builds candidate list of eligible karts around the racer's rank (sub_203C8DC) and picks one by weighted random threshold into +320 [REVIEW]
sub_21025D8
export/plan0/arm9_main/sub_21025D8_021025D8.c
- docs/function_notes.md:608 kart object init: +340 = 19, +344 = 0, +348 = 0, +352 = 14, +320 = 8, +324 = 0; calls sub_2046BE8 on +300 with off_2102664 and sub_20F9C40; sets +588 = 0, +592 = -1, +596 = 18, +600 = -1, +604 = 18, +608 = -1, +612 = -1, +616..+624 = 0; returns 18
- docs/function_notes/NEEDS_REVIEW.md:1013 kart object init: sets +340=19, +344=0, +348=0, +352=14, +320=8, +324=0, calls sub_2046BE8 and sub_20F9C40, sets defaults 18/-1 at +596..+612 [REVIEW]
- docs/function_notes/hk_26.md:28 kart object init: sets +340=19, +344=0, +348=0, +352=14, +320=8, +324=0, calls sub_2046BE8 and sub_20F9C40, sets defaults 18/-1 at +596..+612 [REVIEW]
sub_2102668
export/plan0/arm9_main/sub_2102668_02102668.c
- docs/function_notes/hk_26.md:29 sets field +368 to 1
sub_2102674
export/plan0/arm9_main/sub_2102674_02102674.c
- docs/function_notes.md:715 init: allocates 82 bytes into off_2102714, fills 41 16-bit entries from sub_2133068((40-i) << 12, 41-i), then averages neighbouring entries from index 36 to 40
- docs/function_notes/NEEDS_REVIEW.md:1014 init: allocates 82 bytes from heap into off_2102714, fills 41-entry 16-bit table from sub_2133068 ((40-i)<<12) and smooths it [REVIEW]
- docs/function_notes/hk_26.md:30 init: allocates 82 bytes from heap into off_2102714, fills 41-entry 16-bit table from sub_2133068 ((40-i)<<12) and smooths it [REVIEW]
sub_2102744
export/plan0/arm9_main/sub_2102744_02102744.c
- docs/function_notes/hk_26.md:31 wrapper: sub_20F8E78(a1) then sub_2102EB8(a1,1) (re-init kart from record)
sub_2102764
export/plan0/arm9_main/sub_2102764_02102764.c
- docs/function_notes.md:716 wrapper: calls sub_20FECDC; when a2 and a3 are nonzero returns sub_20FE8AC(a2+68)
- docs/function_notes/NEEDS_REVIEW.md:1015 wrapper: calls sub_20FECDC(a1,a2,a3); if a2 and a3 nonzero, tail-calls sub_20FE8AC on a2+68 [REVIEW]
- docs/function_notes/hk_26.md:32 wrapper: calls sub_20FECDC(a1,a2,a3); if a2 and a3 nonzero, tail-calls sub_20FE8AC on a2+68 [REVIEW]
sub_21027AC
export/plan0/arm9_main/sub_21027AC_021027AC.c
- docs/function_notes.md:877 kart render/attach: when the object at +300 and +408 are set, transforms +80 via sub_20E6CF8 and then the model
- docs/function_notes/NEEDS_REVIEW.md:1016 kart render/attach: if +300 object and +408 set, transforms +80 via sub_20E6CF8 and sub_2147FD8, applies speed scale, writes flags to object a3 [REVIEW]
- docs/function_notes/hk_26.md:33 kart render/attach: if +300 object and +408 set, transforms +80 via sub_20E6CF8 and sub_2147FD8, applies speed scale, writes flags to object a3 [REVIEW]
sub_210298C
export/plan0/arm9_main/sub_210298C_0210298C.c
- docs/function_notes.md:878 large per-frame kart physics: calls sub_21031F4 for state 63 and sub_206924C per slot for state 143, then the common update
- docs/function_notes/NEEDS_REVIEW.md:1017 large per-frame kart physics: handles state 63 (sub_21031F4) and 143 (sub_206924C per slot); interpolates +328/+332, clamps +412, builds matrix +80 [REVIEW]
- docs/function_notes/hk_26.md:34 large per-frame kart physics: handles state 63 (sub_21031F4) and 143 (sub_206924C per slot); interpolates +328/+332, clamps +412, builds matrix +80 [REVIEW]
sub_2102E8C
export/plan0/arm9_main/sub_2102E8C_02102E8C.c
- docs/function_notes/hk_26.md:35 callback wrapper: calls sub_2102EB8(a2,0) and sub_20F8E3C(...,242), returns 1
sub_2102EB8
export/plan0/arm9_main/sub_2102EB8_02102EB8.c
- docs/function_notes.md:879 kart re-init from the state record at off_2103008: copies +152..+160 into +80..+88, calls sub_20748A8 and sub_20F82A4(0), sets +300 = sub_207A974(slot)
- docs/function_notes/NEEDS_REVIEW.md:1018 kart (re)init from state record: copies +152..+160 into +80..+88, applies fixed matrix sub_2147FD8, calls sub_210300C, resets +328/+332 and +408 [REVIEW]
- docs/function_notes/hk_26.md:36 kart (re)init from state record: copies +152..+160 into +80..+88, applies fixed matrix sub_2147FD8, calls sub_210300C, resets +328/+332 and +408 [REVIEW]
sub_210300C
export/plan0/arm9_main/sub_210300C_0210300C.c
- docs/function_notes.md:832 advances the track segment index (+312, the counter at a1[78]); returns 1 at 17 or more, otherwise loads the 6-word entry of table off_2103184 into +340..+404
- docs/function_notes/NEEDS_REVIEW.md:1019 advances track segment index (+312, max 16), loads 6-word table entry from off_2103184 into +340..+404; plays sfx 241 in some cases; returns 1 at end [REVIEW]
- docs/function_notes/hk_26.md:37 advances track segment index (+312, max 16), loads 6-word table entry from off_2103184 into +340..+404; plays sfx 241 in some cases; returns 1 at end [REVIEW]
sub_21031E8
export/plan0/arm9_main/sub_21031E8_021031E8.c
- docs/function_notes/hk_26.md:38 sets field +368 to 1
sub_21031F4
export/plan0/arm9_main/sub_21031F4_021031F4.c
- game/src/items.rs:59 Blooper (
sub_21031F4,sub_206924C,sub_2069134): victims are chosen when the actor is 63 - docs/function_notes/NEEDS_REVIEW.md:1020 per-frame slot ranking: mode 2 computes weights into kart+304 byte array, else uses rank list from sub_203C8DC; sets +408=1 and +300 for flagged kart, sfx 243 [REVIEW]
- docs/function_notes/hk_26.md:39 per-frame slot ranking: mode 2 computes weights into kart+304 byte array, else uses rank list from sub_203C8DC; sets +408=1 and +300 for flagged kart, sfx 243 [REVIEW]
sub_210340C
export/plan0/arm9_main/sub_210340C_0210340C.c
- docs/function_notes.md:717 fills an 8-word descriptor at result from a2: [0] = a2, [1] = dword_2103458 & dword_210345C, [2]/[3] from the pointers at a2+28/+32, [4]/[5] from a2+12/+16, [6]/[7] = bit masks 1 << (field + 15) of [2]
- docs/function_notes/NEEDS_REVIEW.md:1021 fills an 8-word descriptor from a2 (pointers at a2+28/+32, values at +12/+16) with bitfield masks shifted into result[6]/[7] [REVIEW]
- docs/function_notes/hk_26.md:40 fills an 8-word descriptor from a2 (pointers at a2+28/+32, values at +12/+16) with bitfield masks shifted into result[6]/[7] [REVIEW]
sub_2103468
export/plan0/arm9_main/sub_2103468_02103468.c
- docs/function_notes.md:609 sound/module init: allocates 208 bytes (sub_20364E8/sub_20364E0/sub_2036BEC) into off_21034F8, sets off_2103500 from dword_21034FC, zeroes two globals, starts sound handle 6 (sub_2108E6C(6), sub_212C6F0(h, 1)), calls sub_20ED4D0 + sub_210340C, four sub_20D3C2C calls, sub_214AD4C with nine args, sets *off_2103540 = 1
- docs/function_notes/NEEDS_REVIEW.md:1022 module init: allocates 208 bytes into *off_21034F8, starts sound handle 6, calls sub_20ED4D0, sub_210340C, sub_20D3C2C and sub_214AD4C, sets off_2103540=1 [REVIEW]
- docs/function_notes/hk_26.md:41 module init: allocates 208 bytes into *off_21034F8, starts sound handle 6, calls sub_20ED4D0, sub_210340C, sub_20D3C2C and sub_214AD4C, sets off_2103540=1 [REVIEW]
sub_2103544
export/plan0/arm9_main/sub_2103544_02103544.c
- docs/function_notes/hk_26.md:42 thin wrapper: calls the fn ptr at off_2103550 with (a1, a2, 1)
sub_2103554
export/plan0/arm9_main/sub_2103554_02103554.c
- docs/function_notes.md:718 builds a 3D descriptor from sub_20D21EC(a1) via sub_20E6488 and sub_20E6AB8, then calls sub_210340C on off_2103594
- docs/function_notes/NEEDS_REVIEW.md:1023 builds a 3D descriptor from sub_20D21EC(a1) via sub_20E6488/sub_20E6AB8, then sub_210340C on off_2103594 [REVIEW]
- docs/function_notes/hk_26.md:43 builds a 3D descriptor from sub_20D21EC(a1) via sub_20E6488/sub_20E6AB8, then sub_210340C on off_2103594 [REVIEW]
sub_2103598
export/plan0/arm9_main/sub_2103598_02103598.c
- docs/function_notes.md:719 zeroes the global at off_21035A8 and returns its address
- docs/function_notes/NEEDS_REVIEW.md:1024 zeroes global off_21035A8 and returns its address [REVIEW]
- docs/function_notes/hk_26.md:44 zeroes global off_21035A8 and returns its address [REVIEW]
sub_21035AC
export/plan0/arm9_main/sub_21035AC_021035AC.c
- docs/function_notes.md:610 if the argument equals the racer id (+98 byte) of *off_2103654, clamps the counter at off_2103660 to at least off_210365C and calls sub_210366C for each 52-byte entry of the list at off_2103658 with +40 == 0 and callback +36 == off_2103664
- docs/function_notes/NEEDS_REVIEW.md:1025 if a1 is the racer index (record +98), walks 52-byte entries at off_2103658 calling sub_210366C on matching ones; clamps off_2103660 [REVIEW]
- docs/function_notes/hk_26.md:45 if a1 is the racer index (record +98), walks 52-byte entries at off_2103658 calling sub_210366C on matching ones; clamps off_2103660 [REVIEW]
sub_210366C
export/plan0/arm9_main/sub_210366C_0210366C.c
- docs/function_notes.md:1584 recomputes a 4-slot 16-bit accumulator (+16..+31) from four 16-bit pairs (460 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1026 recomputes a 4-slot 16-bit accumulator (+16..+31) from four 16-bit pairs with quadratic shaping and thresholds; sets +40=1 [REVIEW]
- docs/function_notes/hk_26.md:46 recomputes a 4-slot 16-bit accumulator (+16..+31) from four 16-bit pairs with quadratic shaping and thresholds; sets +40=1 [REVIEW]
sub_2103840
export/plan0/arm9_main/sub_2103840_02103840.c
- docs/function_notes.md:611 if the argument equals the racer id, raises the global at off_210388C to at least *off_2103888
- docs/function_notes/NEEDS_REVIEW.md:1027 if a1 is the racer index, raises global off_210388C to at least the value at off_2103888 [REVIEW]
- docs/function_notes/hk_26.md:47 if a1 is the racer index, raises global off_210388C to at least the value at off_2103888 [REVIEW]
sub_2103890
export/plan0/arm9_main/sub_2103890_02103890.c
- docs/function_notes.md:612 if the argument equals the racer id, zeroes the globals at off_21038E8 and off_21038EC and starts sound handle 6 (sub_2108E6C(6), sub_212C6F0(h, 1))
- docs/function_notes/NEEDS_REVIEW.md:1028 if a1 is the racer index, clears two globals and plays sound handle 6 via sub_2108E6C/sub_212C6F0 [REVIEW]
- docs/function_notes/hk_26.md:48 if a1 is the racer index, clears two globals and plays sound handle 6 via sub_2108E6C/sub_212C6F0 [REVIEW]
sub_21038F0
export/plan0/arm9_main/sub_21038F0_021038F0.c
- docs/function_notes/hk_26.md:49 thin wrapper: calls the fn ptr at off_21038FC with (a1, a2, 0)
sub_2103DB0
export/plan0/arm9_main/sub_2103DB0_02103DB0.c
- docs/function_notes.md:880 fills a 52-byte billboard/marker entry at off_2103FE4 + 52*a1: advances a 64-bit state at off_2103FE0+1176 and writes the derived values
- docs/function_notes/NEEDS_REVIEW.md:1029 fills a 52-byte billboard/marker entry: advances 64-bit angle at off_2103FE0+1176, computes four rotated corner words (+16..+30) via sin/cos table [REVIEW]
- docs/function_notes/hk_26.md:50 fills a 52-byte billboard/marker entry: advances 64-bit angle at off_2103FE0+1176, computes four rotated corner words (+16..+30) via sin/cos table [REVIEW]
sub_2104000
export/plan0/arm9_main/sub_2104000_02104000.c
- docs/function_notes.md:881 updates the per-cell bitmask bytes at off_2104114 around index a2 using the bit pattern (1 << a1 .. 1 << (a1+4)) from a1
- docs/function_notes/NEEDS_REVIEW.md:1030 updates per-cell bitmask bytes (off_2104114) around index a2 with bit pattern from a1; returns overlap bits [REVIEW]
- docs/function_notes/hk_26.md:51 updates per-cell bitmask bytes (off_2104114) around index a2 with bit pattern from a1; returns overlap bits [REVIEW]
sub_2104118
export/plan0/arm9_main/sub_2104118_02104118.c
- docs/function_notes.md:882 dispatcher: calls the function pointer off_2104138 with off_210413C when the flag at *off_2104134 is set, else with off_2104140
- docs/function_notes/NEEDS_REVIEW.md:1031 dispatcher: calls fn ptr at off_2104138 with off_210413C or off_2104140, chosen by flag at off_2104134 [REVIEW]
- docs/function_notes/hk_26.md:52 dispatcher: calls fn ptr at off_2104138 with off_210413C or off_2104140, chosen by flag at off_2104134 [REVIEW]
sub_2104368
export/plan0/arm9_main/sub_2104368_02104368.c
- docs/function_notes.md:883 per-frame update: when the counter at *off_210447C is nonzero calls the function pointer at +36 of each 52-byte entry from off_2104480 and ticks the counter
- docs/function_notes/NEEDS_REVIEW.md:1032 per-frame update: calls fn ptr +36 of each 52-byte entry, ticks a counter; on alternate ticks updates a 16-bit field; at zero stops and plays handle 6 [REVIEW]
- docs/function_notes/hk_26.md:53 per-frame update: calls fn ptr +36 of each 52-byte entry, ticks a counter; on alternate ticks updates a 16-bit field; at zero stops and plays handle 6 [REVIEW]
sub_210449C
export/plan0/arm9_main/sub_210449C_0210449C.c
- docs/function_notes.md:801 decrements the timer +44 (counter field); on expiry, when the entry is not a racer, plays sound 238 (or the stored id) via sub_2108EA0 and sub_210E128
- docs/function_notes/NEEDS_REVIEW.md:1033 decrements timer +44; on expiry, if not racer, plays a sound (default 238) via sub_2108EA0/sub_210E128/sub_212ECC0 [REVIEW]
- docs/function_notes/hk_26.md:54 decrements timer +44; on expiry, if not racer, plays a sound (default 238) via sub_2108EA0/sub_210E128/sub_212ECC0 [REVIEW]
sub_21045A4
export/plan0/arm9_main/sub_21045A4_021045A4.c
- docs/function_notes.md:802 animates a quad: rebuilds four vertex x/y words from the base (+32/+34) plus offsets scaled by a table value >> 12; decrements the counter at +44 and at -13 sets the handler +36
- docs/function_notes/NEEDS_REVIEW.md:1034 animates a quad: rebuilds four vertex x/y words from base (+32/+34) plus offsets scaled by a table indexed by +44; swaps fn ptr +36 on expiry [REVIEW]
- docs/function_notes/hk_26.md:55 animates a quad: rebuilds four vertex x/y words from base (+32/+34) plus offsets scaled by a table indexed by +44; swaps fn ptr +36 on expiry [REVIEW]
sub_210465C
export/plan0/arm9_main/sub_210465C_0210465C.c
- docs/function_notes.md:884 per-frame sound/effect tick: when the sequence counters match and the flag is set plays handle 6 (sub_2108E6C(6), sub_212C6F0) and sfx 239; updates four vertex words
- docs/function_notes/NEEDS_REVIEW.md:1035 per-frame sound/effect tick: plays handle 6 and sfx 239 on sequence match; updates four vertex pairs clamped to dword_210495C..dword_2104960; LCG every 16 ticks [REVIEW]
- docs/function_notes/hk_26.md:56 per-frame sound/effect tick: plays handle 6 and sfx 239 on sequence match; updates four vertex pairs clamped to dword_210495C..dword_2104960; LCG every 16 ticks [REVIEW]
sub_2104970
export/plan0/arm9_main/sub_2104970_02104970.c
- docs/function_notes/hk_26.md:57 if record off_2104998+8 == 2, resets eight entries of off_210499C to -1 and off_21049A0 to 0
sub_21049A4
export/plan0/arm9_main/sub_21049A4_021049A4.c
- docs/function_notes.md:720 when the slot at *off_21049F4 + dword_21049F8 is set, allocates entries via sub_210543C and stores back-pointers at +252; sets the list flag word [16] = 1
- docs/function_notes/NEEDS_REVIEW.md:1036 if table slot at off_21049F4 is set, allocates entries via sub_210543C and stores back-pointers at +252; sets flag +64=1 [REVIEW]
- docs/function_notes/hk_26.md:58 if table slot at off_21049F4 is set, allocates entries via sub_210543C and stores back-pointers at +252; sets flag +64=1 [REVIEW]
sub_2104A0C
export/plan0/arm9_main/sub_2104A0C_02104A0C.c
- docs/function_notes.md:916 per-frame item/kart effect dispatcher by flags at +116: 0x180000 selects sub_20F6E58 (0x80000) or sub_20F758C (0x100000), else the 0x8000 and 0x4000 handlers
- docs/function_notes/NEEDS_REVIEW.md:1037 per-frame item/kart effect dispatcher by flags +116 (sub_20F6E58/sub_20F758C, sub_20F68B0, sub_20F63CC, or sub_20F2DF0 trajectory); integrates speed +328 [REVIEW]
- docs/function_notes/hk_26.md:59 per-frame item/kart effect dispatcher by flags +116 (sub_20F6E58/sub_20F758C, sub_20F68B0, sub_20F63CC, or sub_20F2DF0 trajectory); integrates speed +328 [REVIEW]
sub_2104C68
export/plan0/arm9_main/sub_2104C68_02104C68.c
- docs/function_notes.md:885 object setup: calls sub_20F9114, ORs the bit from off_2104D70 into +120; when +312 is set sets sub-object +176 = 1; when record flag 0x10 is set calls sub_20F3150 and plays sound 218
- docs/function_notes/NEEDS_REVIEW.md:1038 object setup: calls sub_20F9114, ORs a bit from off_2104D70 into +120; if record flag 0x10 calls sub_20F3150 and sfx 218, sets +304=1 [REVIEW]
- docs/function_notes/hk_26.md:60 object setup: calls sub_20F9114, ORs a bit from off_2104D70 into +120; if record flag 0x10 calls sub_20F3150 and sfx 218, sets +304=1 [REVIEW]
sub_2104D78
export/plan0/arm9_main/sub_2104D78_02104D78.c
- docs/function_notes.md:803 per-frame transform update for an effect: when +312 is set, scales a matrix via sub_2147FD8 into a2+316, then sub_2105338 for the result
- docs/function_notes/NEEDS_REVIEW.md:1039 per-frame transform update for an effect: scaled matrix via sub_2147FD8 then sub_2105338, else copies +80..+88 to +316..+324; then sub_21052FC [REVIEW]
- docs/function_notes/hk_26.md:61 per-frame transform update for an effect: scaled matrix via sub_2147FD8 then sub_2105338, else copies +80..+88 to +316..+324; then sub_21052FC [REVIEW]
sub_2104E58
export/plan0/arm9_main/sub_2104E58_02104E58.c
- docs/function_notes.md:613 init for a kart-attached effect: +328 = dword_2104ED4, sub_21053E4(obj+308), +312 = 1 when this kart is the player (+120 matches the byte at *off_2104ED8+98), which sets obj+308 +176 = 2; stores 600 in off_2104EDC[kart id]; returns the kart id
- docs/function_notes/NEEDS_REVIEW.md:1040 init for kart-attached effect: sets +328 = dword_2104ED4, calls sub_21053E4, sets +312 and +176=2 for racer, sets off_2104EDC[slot]=600 [REVIEW]
- docs/function_notes/hk_26.md:62 init for kart-attached effect: sets +328 = dword_2104ED4, calls sub_21053E4, sets +312 and +176=2 for racer, sets off_2104EDC[slot]=600 [REVIEW]
sub_2104EE0
export/plan0/arm9_main/sub_2104EE0_02104EE0.c
- docs/function_notes/hk_26.md:63 wrapper: calls sub_20DEB2C(a1+80, a2, 0, flag 0x10000 set, 0) (item-box break effect spawn)
sub_2104F14
export/plan0/arm9_main/sub_2104F14_02104F14.c
- docs/function_notes.md:614 dispatcher: sets off_2104F54[kart id] = 1 when off_2104F4C[kart id] > 0, then tail-calls the function pointer off_2104F50 with a1+308
- docs/function_notes/NEEDS_REVIEW.md:1041 dispatcher: sets off_2104F54[slot]=1 if off_2104F4C[slot] > 0, then tail-calls fn ptr off_2104F50 with kart+308 [REVIEW]
- docs/function_notes/hk_26.md:64 dispatcher: sets off_2104F54[slot]=1 if off_2104F4C[slot] > 0, then tail-calls fn ptr off_2104F50 with kart+308 [REVIEW]
sub_2104F58
export/plan0/arm9_main/sub_2104F58_02104F58.c
- docs/function_notes.md:721 if this[78] is set, sets the sub-object +176 = 1; when no 0x180000 flags are set, sets handler +288 = off_2104F80
- docs/function_notes/NEEDS_REVIEW.md:1042 if this[78] set, sets sub-object +176=1; if flags 0x180000 clear, sets fn ptr +288 to off_2104F80 [REVIEW]
- docs/function_notes/hk_26.md:65 if this[78] set, sets sub-object +176=1; if flags 0x180000 clear, sets fn ptr +288 to off_2104F80 [REVIEW]
sub_2104F84
export/plan0/arm9_main/sub_2104F84_02104F84.c
- docs/function_notes.md:615 mode-2 only (off_2104FEC+8 == 2): when the pending entry off_2104FF0[slot] is negative, clears it and calls sub_20F0044 on kart record off_2104FF4 + 528slot
- docs/function_notes/NEEDS_REVIEW.md:1043 mode-2 only: if pending entry off_2104FF0[slot] is negative, clears it and calls sub_20F0044 on the kart record [REVIEW]
- docs/function_notes/hk_26.md:66 mode-2 only: if pending entry off_2104FF0[slot] is negative, clears it and calls sub_20F0044 on the kart record [REVIEW]
sub_2104FF8
export/plan0/arm9_main/sub_2104FF8_02104FF8.c
- docs/function_notes.md:886 mode-2 per-frame loop over 8 slots: counts down the per-slot timers for karts in state 19 and calls sub_20F0044 or the timeout handler
- docs/function_notes/NEEDS_REVIEW.md:1044 mode-2 per-frame loop over 8 slots: counts down per-slot timers for karts in state 19; at zero calls sub_20F47E4(...,17), plays sfx 63 for racer [REVIEW]
- docs/function_notes/hk_26.md:67 mode-2 per-frame loop over 8 slots: counts down per-slot timers for karts in state 19; at zero calls sub_20F47E4(...,17), plays sfx 63 for racer [REVIEW]
sub_210515C
export/plan0/arm9_main/sub_210515C_0210515C.c
- docs/function_notes.md:616 sets kart record state (+20) to 19; in mode 5 for a non-player slot calls sub_20EFD84(record, 14); returns the slot argument
- docs/function_notes/NEEDS_REVIEW.md:1045 sets kart record state (+20) to 19; in mode 5 for non-racer slots calls sub_20EFD84(...,14) [REVIEW]
- docs/function_notes/hk_26.md:68 sets kart record state (+20) to 19; in mode 5 for non-racer slots calls sub_20EFD84(...,14) [REVIEW]
sub_21051D4
export/plan0/arm9_main/sub_21051D4_021051D4.c
- docs/function_notes.md:617 callback: sub_20695C4 on the kart at (a2+4)->+508, sub_20F4754(a2, 1), then sub_20F81B8(*(a1+12), 14) (the record pointer is read from a1+12, not passed as a1+12)
- docs/function_notes/NEEDS_REVIEW.md:1046 callback: calls sub_20695C4 on kart object +508, sub_20F4754(a2,1), then sub_20F81B8(a1+12, 14) [REVIEW]
- docs/function_notes/hk_26.md:69 callback: calls sub_20695C4 on kart object +508, sub_20F4754(a2,1), then sub_20F81B8(a1+12, 14) [REVIEW]
sub_2105214
export/plan0/arm9_main/sub_2105214_02105214.c
- docs/function_notes.md:804 allocates a 4N-byte table (N from the mode record +8) via sub_2036BEC and copies two vectors into it; sets off_21052D0 from a switch on the mode (2 -> 11, 4 -> 32, 5 -> 6, default unchanged)
- docs/function_notes/NEEDS_REVIEW.md:1047 allocates a 4*N-byte table (N by mode record +8) via sub_2036BEC, copies two vectors into globals, creates N entries via sub_20D34C4 [REVIEW]
- docs/function_notes/hk_26.md:70 allocates a 4*N-byte table (N by mode record +8) via sub_2036BEC, copies two vectors into globals, creates N entries via sub_20D34C4 [REVIEW]
sub_21052F0
export/plan0/arm9_main/sub_21052F0_021052F0.c
- docs/function_notes/hk_26.md:71 setter: stores a2 and a3 into this+256 and this+260
sub_21052FC
export/plan0/arm9_main/sub_21052FC_021052FC.c
- docs/function_notes/hk_26.md:72 advances 16-bit counters at +160 (wrap at 300) and +162 (wrap at 130)
sub_2105338
export/plan0/arm9_main/sub_2105338_02105338.c
- docs/function_notes.md:722 sets the object transform: base vector from the pointer at +252 into +4..+12, +102 = max(a2, 1), +28..+36 = a3 scaled by dword_21053D4 >> 12
- docs/function_notes/NEEDS_REVIEW.md:1048 sets object transform: base vector from pointer +252 into +4..+12, +102 = max(a2,1), +28..+36 = a3 scaled by dword_21053D4 [REVIEW]
- docs/function_notes/hk_26.md:73 sets object transform: base vector from pointer +252 into +4..+12, +102 = max(a2,1), +28..+36 = a3 scaled by dword_21053D4 [REVIEW]
sub_21053D8
export/plan0/arm9_main/sub_21053D8_021053D8.c
- docs/function_notes/hk_26.md:74 thunk: calls the fn ptr at off_21053E0 with a1
sub_21053E4
export/plan0/arm9_main/sub_21053E4_021053E4.c
- docs/function_notes.md:723 resets an effect/sprite object: calls sub_20D233C, clears bits 2 and 8 of +2, +102 = 31, zeroes +28..+36, +160/+162, sets +164 = 128
- docs/function_notes/NEEDS_REVIEW.md:1049 resets an effect/sprite object: calls sub_20D233C, clears flag bits 2 and 8 at +2, sets +102=31, zeroes +28..+36, +160/+162, sets +164=128 [REVIEW]
- docs/function_notes/hk_26.md:75 resets an effect/sprite object: calls sub_20D233C, clears flag bits 2 and 8 at +2, sets +102=31, zeroes +28..+36, +160/+162, sets +164=128 [REVIEW]
sub_210543C
export/plan0/arm9_main/sub_210543C_0210543C.c
- docs/function_notes.md:724 pool allocator: returns the next entry of table off_2105460 using the counter at off_210545C
- docs/function_notes/NEEDS_REVIEW.md:1050 pool allocator: returns next entry from table off_2105460 using counter off_210545C [REVIEW]
- docs/function_notes/hk_26.md:76 pool allocator: returns next entry from table off_2105460 using counter off_210545C [REVIEW]
sub_2105464
export/plan0/arm9_main/sub_2105464_02105464.c
- docs/function_notes.md:725 places object a1 at a2 via sub_20DE6A8, then sub_20D2398(a1)
- docs/function_notes/NEEDS_REVIEW.md:1051 places object a1 at position a2 via sub_20DE6A8, then finalizes with sub_20D2398 [REVIEW]
- docs/function_notes/hk_26.md:77 places object a1 at position a2 via sub_20DE6A8, then finalizes with sub_20D2398 [REVIEW]
sub_2105480
export/plan0/arm9_main/sub_2105480_02105480.c
- docs/function_notes.md:726 allocates a 64-byte object and copies a 16-word (4x4 matrix) template from off_21054CC
- docs/function_notes/NEEDS_REVIEW.md:1052 allocates 64 bytes from heap and copies a 16-word (4x4 matrix) template from off_21054CC into it [REVIEW]
- docs/function_notes/hk_26.md:78 allocates 64 bytes from heap and copies a 16-word (4x4 matrix) template from off_21054CC into it [REVIEW]
sub_21054D0
export/plan0/arm9_main/sub_21054D0_021054D0.c
- docs/function_notes/hk_26.md:79 predicate: true when record off_2105500+8 == 4 and record+85 == 9
sub_2105504
export/plan0/arm9_main/sub_2105504_02105504.c
- docs/function_notes.md:727 predicate: true when sub_205E0A0() == 2 and the record at off_210554C+12 is 0 or 2
- docs/function_notes/NEEDS_REVIEW.md:1053 predicate: true when sub_205E0A0() == 2 and record off_210554C+12 is 0 or 2 [REVIEW]
- docs/function_notes/hk_26.md:80 predicate: true when sub_205E0A0() == 2 and record off_210554C+12 is 0 or 2 [REVIEW]
sub_2105550
export/plan0/arm9_main/sub_2105550_02105550.c
- docs/function_notes/hk_26.md:81 stops two sound handles (off_210557C[0], off_2105580) via sub_212C6F0(...,0)
sub_2105584
export/plan0/arm9_main/sub_2105584_02105584.c
- docs/function_notes.md:728 sets two sound handles (off_21055A8[0] and off_21055AC) with parameter a2 via sub_212C6F0
- docs/function_notes/NEEDS_REVIEW.md:1054 sets two sound handles (off_21055A8[0], off_21055AC) with parameter a2 via sub_212C6F0 [REVIEW]
- docs/function_notes/hk_26.md:82 sets two sound handles (off_21055A8[0], off_21055AC) with parameter a2 via sub_212C6F0 [REVIEW]
sub_21055B0
export/plan0/arm9_main/sub_21055B0_021055B0.c
- docs/function_notes.md:887 sound selector: argument 0 or 50 picks a duration from table off_21057C8 (off_21057D0 for 50) and plays the SFX via sub_212ECC0
- docs/function_notes/NEEDS_REVIEW.md:1055 sound selector: arg 0 or 50 picks a duration from a table; plays SFX via sub_212ECC0/sub_212C554, or restarts BGM via sub_210D5C0 [REVIEW]
- docs/function_notes/hk_26.md:83 sound selector: arg 0 or 50 picks a duration from a table; plays SFX via sub_212ECC0/sub_212C554, or restarts BGM via sub_210D5C0 [REVIEW]
sub_21057F0
export/plan0/arm9_main/sub_21057F0_021057F0.c
- docs/function_notes.md:917 sound-id selector: when the result is 3 maps the argument (1..7) to a sound id and runs sub_212DA38 and sub_212DA2C (sound handle setup)
- docs/function_notes/NEEDS_REVIEW.md:1056 when result==3, maps a2 (1..7) to a sound id (37..41, 23) and runs sub_212DA38/sub_212DA2C/sub_212E95C/sub_212E994 calls; else returns result [REVIEW]
- docs/function_notes/hk_26.md:84 when result==3, maps a2 (1..7) to a sound id (37..41, 23) and runs sub_212DA38/sub_212DA2C/sub_212E95C/sub_212E994 calls; else returns result [REVIEW]
sub_210593C
export/plan0/arm9_main/sub_210593C_0210593C.c
- docs/function_notes.md:618 if the argument is 4 and off_210597C[3] is zero, restarts BGM via sub_210D5C0; returns off_210597C when the branch is taken, else the argument
- docs/function_notes/NEEDS_REVIEW.md:1057 if arg is 4 and state at off_210597C[3] is zero, restarts BGM via sub_210D5C0; returns off_210597C [REVIEW]
- docs/function_notes/hk_26.md:85 if arg is 4 and state at off_210597C[3] is zero, restarts BGM via sub_210D5C0; returns off_210597C [REVIEW]
sub_2105980
export/plan0/arm9_main/sub_2105980_02105980.c
- docs/function_notes.md:729 sound tick: when *off_21059D4 - 1 <= 1 plays handle off_21059D8 with a2; when a1 == 3 also plays handle off_21059DC
- docs/function_notes/NEEDS_REVIEW.md:1058 sound tick: if off_21059D4[0]-1 <= 1 plays handle off_21059D8 with a2; if a1==3 also plays handle off_21059DC via sub_212C6F0 [REVIEW]
- docs/function_notes/hk_26.md:86 sound tick: if off_21059D4[0]-1 <= 1 plays handle off_21059D8 with a2; if a1==3 also plays handle off_21059DC via sub_212C6F0 [REVIEW]
sub_21059E0
export/plan0/arm9_main/sub_21059E0_021059E0.c
- docs/function_notes.md:619 if the handle state at off_2105A28+3 is zero and the next word is zero, restarts BGM via sub_210D5C0; returns off_2105A28 when the branch is taken, else 0
- docs/function_notes/NEEDS_REVIEW.md:1059 if handle state at off_2105A28+3 is zero and next word zero, restarts BGM via sub_210D5C0; returns off_2105A28 [REVIEW]
- docs/function_notes/hk_26.md:87 if handle state at off_2105A28+3 is zero and next word zero, restarts BGM via sub_210D5C0; returns off_2105A28 [REVIEW]
sub_2105A30
export/plan0/arm9_main/sub_2105A30_02105A30.c
- docs/function_notes.md:620 stores a1 into *off_2105AAC[0]; for a1 == 1 or 2 selects sequence 71 or 72, runs sub_212DA38, sub_212DA2C, sub_212E9CC(seq, handle), sub_212C6F0(off_2105AB8[0], 2) and starts it via sub_210D7DC(seq, 127, off_2105ABC)
- docs/function_notes/NEEDS_REVIEW.md:1060 stores a1 into off_2105AAC[0]; for a1 of 1 or 2 selects sequence 71/72 and starts it via sub_210D7DC after sub_212DA38/sub_212DA2C/sub_212E9CC [REVIEW]
- docs/function_notes/hk_26.md:88 stores a1 into off_2105AAC[0]; for a1 of 1 or 2 selects sequence 71/72 and starts it via sub_210D7DC after sub_212DA38/sub_212DA2C/sub_212E9CC [REVIEW]
sub_2105AC0
export/plan0/arm9_main/sub_2105AC0_02105AC0.c
- docs/function_notes.md:730 one-shot: when the flag at *off_2105B04 is zero, sets it to 1 and plays sound a1 via sub_212ECC0(off_2105B08, 0, a1)
- docs/function_notes/NEEDS_REVIEW.md:1061 one-shot: if flag off_2105B04[0] is zero, sets it to 1 and plays sound a1 via sub_212ECC0 [REVIEW]
- docs/function_notes/hk_26.md:89 one-shot: if flag off_2105B04[0] is zero, sets it to 1 and plays sound a1 via sub_212ECC0 [REVIEW]
sub_2105B0C
export/plan0/arm9_main/sub_2105B0C_02105B0C.c
- docs/function_notes.md:731 wrapper: calls the function pointer at off_2105B24 with (a1, u16 at off_2105B20, a2)
- docs/function_notes/NEEDS_REVIEW.md:1062 wrapper: calls the fn ptr at off_2105B24 with (a1, 16-bit value at off_2105B20, a2) [REVIEW]
- docs/function_notes/hk_26.md:90 wrapper: calls the fn ptr at off_2105B24 with (a1, 16-bit value at off_2105B20, a2) [REVIEW]
sub_2105B28
export/plan0/arm9_main/sub_2105B28_02105B28.c
- docs/function_notes.md:732 wrapper: calls the function pointer at off_2105B44 with (a1, u16 at off_2105B40, a2 as a byte)
- docs/function_notes/NEEDS_REVIEW.md:1063 wrapper: calls the fn ptr at off_2105B44 with (a1, 16-bit value at off_2105B40, a2) [REVIEW]
- docs/function_notes/hk_26.md:91 wrapper: calls the fn ptr at off_2105B44 with (a1, 16-bit value at off_2105B40, a2) [REVIEW]
sub_2105B48
export/plan0/arm9_main/sub_2105B48_02105B48.c
- docs/function_notes.md:733 returns sub_212C6AC(sub_210D960()), which pushes the master sound volume to a handle
- docs/function_notes/NEEDS_REVIEW.md:1064 returns sub_212C6AC(sub_210D960()), i.e. pushes the master sound volume to a handle [REVIEW]
- docs/function_notes/hk_26.md:92 returns sub_212C6AC(sub_210D960()), i.e. pushes the master sound volume to a handle [REVIEW]
sub_2105B64
export/plan0/arm9_main/sub_2105B64_02105B64.c
- docs/function_notes/agent_07.md:6 uncertain: sound-state reset: stops the main BGM handle, starts sequence from u16 table[a1], then stops the 12 SE handles and the handle list with a volume
sub_2105C4C
export/plan0/arm9_main/sub_2105C4C_02105C4C.c
- docs/function_notes/agent_07.md:7 uncertain: pause/mute sound: sets state+0x20=0, stops main handle, fades the 12 SE handles and list to volume 127
sub_2105D70
export/plan0/arm9_main/sub_2105D70_02105D70.c
- docs/function_notes/agent_07.md:8 uncertain: resume/unmute sound: sets state+0x20=1, restarts main sequence 17, sets 12 SE handles and list volume 0
sub_2105E98
export/plan0/arm9_main/sub_2105E98_02105E98.c
- docs/function_notes/agent_07.md:9 stops/fades one sound handle (0x217D05C) using the volume from sub_210D960
sub_2105EC0
export/plan0/arm9_main/sub_2105EC0_02105EC0.c
- docs/function_notes/agent_07.md:10 sound shutdown for a scene: clears state fields, stops the 12 SE handles, the handle list and several BGM handles to 0
sub_2105FCC
export/plan0/arm9_main/sub_2105FCC_02105FCC.c
- docs/function_notes/agent_07.md:11 uncertain: sound scene reset variant: clears state, stops 12 SE handles and handle list, sets two handles to 13
sub_21060DC
export/plan0/arm9_main/sub_21060DC_021060DC.c
- docs/function_notes/agent_07.md:12 per-frame sound manager tick: applies volume to channels 1-7, then per game mode (sub_205E0A0) runs race or menu sound update, bumps frame counter
sub_21062A8
export/plan0/arm9_main/sub_21062A8_021062A8.c
- docs/function_notes/agent_07.md:13 race BGM/jingle selector: maps game mode and frame (10/40/160) to a sequence id and restarts the BGM handle if it changed
sub_2106580
export/plan0/arm9_main/sub_2106580_02106580.c
- docs/function_notes/agent_07.md:14 race-mode sound tick: counts frames, applies channel volumes, handles fade-out at frame 60, selects BGM switch at event counters
sub_210689C
export/plan0/arm9_main/sub_210689C_0210689C.c
- docs/function_notes/agent_07.md:15 uncertain: triggers a sound change (a1 = 0/1 lap or position) once frame count over 240 in race modes 33/34, restarts BGM handle with sequence id
sub_2106AB8
export/plan0/arm9_main/sub_2106AB8_02106AB8.c
- game/src/music.rs:14 Sequence of the final-lap fanfare (
sub_2106AB8: list sequence 62), and the tempo (in 1/256) the - game/src/music.rs:234 The fanfare when the player starts the last lap (
sub_2106AB8, local kart only). - docs/function_notes/agent_07.md:16 uncertain: counts steps toward a threshold; on last step requests sound 62 and, in mode 34, restarts BGM sequence 0x1C1
sub_2106C64
export/plan0/arm9_main/sub_2106C64_02106C64.c
- docs/function_notes/agent_07.md:17 sound state set to 2 (finished): stops BGM, resets handles, fades 12 SE handles and list
sub_2106DC8
export/plan0/arm9_main/sub_2106DC8_02106DC8.c
- game/src/music.rs:45 The player's star starts (
sub_2106E78) or ends (sub_2106DC8). - docs/function_notes/agent_07.md:18 stops BGM fade handle and clears the active flag (+0x17), restarting normal playback if state was 1
sub_2106E78
export/plan0/arm9_main/sub_2106E78_02106E78.c
- game/src/music.rs:18 The star theme that replaces the course music while the player has a star (
sub_2106E78, list sequence 73). - game/src/music.rs:45 The player's star starts (
sub_2106E78) or ends (sub_2106DC8). - docs/function_notes/agent_07.md:19 if state is 1, marks +0x17 and either sets flag or fades handle and plays sound 73
sub_2106EFC
export/plan0/arm9_main/sub_2106EFC_02106EFC.c
- docs/function_notes/agent_07.md:20 sets sound state to 1 (playing), calls sub_210D65C, and in mode 34 restarts BGM sequence 448
sub_2107010
export/plan0/arm9_main/sub_2107010_02107010.c
- docs/function_notes/agent_07.md:21 sound scene init: resets state, picks the BGM sequence by game mode and course (e.g. 0x246, 0x235, 0x20E) and starts it, sets channel volumes
sub_21073EC
export/plan0/arm9_main/sub_21073EC_021073EC.c
- docs/function_notes/agent_07.md:22 init a 36-byte sound slot record (a3) then registers it with sub_210D740 and sets state 0
sub_21074AC
export/plan0/arm9_main/sub_21074AC_021074AC.c
- docs/function_notes/agent_07.md:23 main sound system frame update: picks master volume by mode, loads sound groups, chooses sequence/volumes per game mode, calls many helpers
sub_210823C
export/plan0/arm9_main/sub_210823C_0210823C.c
- docs/function_notes/agent_07.md:24 sound system per-frame update: runs scene tick, updates 7 slot records, clears BGM handle when finished
sub_2108344
export/plan0/arm9_main/sub_2108344_02108344.c
- docs/function_notes/agent_07.md:25 sound system init: allocates sound heap, sets up 12 handles and 7 slot lists, volume init, sets master volume constants
sub_2108598
export/plan0/arm9_main/sub_2108598_02108598.c
- docs/function_notes/agent_07.md:26 allocates sound work memory sized by mode (0/1/2) and sets up the sound heap
sub_2108720
export/plan0/arm9_main/sub_2108720_02108720.c
- docs/function_notes/agent_07.md:27 frees the three sound work memory blocks and resets sound heap state
sub_21087C4
export/plan0/arm9_main/sub_21087C4_021087C4.c
- docs/function_notes/agent_07.md:28 returns sound heap size for mode: 716800 if a1==2 else 50176
sub_21087D4
export/plan0/arm9_main/sub_21087D4_021087D4.c
- docs/function_notes/agent_07.md:29 returns sound heap offset difference between modes (716800 or 819200 minus 50176/716800)
sub_21087F4
export/plan0/arm9_main/sub_21087F4_021087F4.c
- docs/function_notes/agent_07.md:30 loads sound group a1 if not already loaded; returns success
sub_210887C
export/plan0/arm9_main/sub_210887C_0210887C.c
- docs/function_notes/agent_07.md:31 loads the sequence/wave archives for each set bit of a1 (13 bits) via sub_212E8F4/sub_212E924
sub_2108950
export/plan0/arm9_main/sub_2108950_02108950.c
- docs/function_notes/agent_07.md:32 getter: returns address 0x02108958 constant table
sub_210895C
export/plan0/arm9_main/sub_210895C_0210895C.c
- docs/function_notes/agent_07.md:33 stops two sound handles with fade 1
sub_2108990
export/plan0/arm9_main/sub_2108990_02108990.c
- docs/function_notes/agent_07.md:34 stops two handles then starts a jingle sequence
sub_21089F4
export/plan0/arm9_main/sub_21089F4_021089F4.c
- docs/function_notes/agent_07.md:35 stops two handles then starts a jingle sequence
sub_2108A40
export/plan0/arm9_main/sub_2108A40_02108A40.c
- docs/function_notes/agent_07.md:36 stops two handles then starts a jingle sequence
sub_2108A8C
export/plan0/arm9_main/sub_2108A8C_02108A8C.c
- docs/function_notes/agent_07.md:37 stops one handle and starts a jingle sequence
sub_2108ADC
export/plan0/arm9_main/sub_2108ADC_02108ADC.c
- docs/function_notes/agent_07.md:38 stops one handle and starts a jingle sequence
sub_2108B2C
export/plan0/arm9_main/sub_2108B2C_02108B2C.c
- docs/function_notes/agent_07.md:39 stops one handle and starts sequence 516
sub_2108B78
export/plan0/arm9_main/sub_2108B78_02108B78.c
- docs/function_notes/agent_07.md:40 stops one handle then starts a jingle sequence
sub_2108BB4
export/plan0/arm9_main/sub_2108BB4_02108BB4.c
- docs/function_notes/agent_07.md:41 stops one handle and starts a jingle sequence
sub_2108C04
export/plan0/arm9_main/sub_2108C04_02108C04.c
- docs/function_notes/agent_07.md:42 calls a function pointer with (handle, 1): stops a handle
sub_2108C1C
export/plan0/arm9_main/sub_2108C1C_02108C1C.c
- docs/function_notes/agent_07.md:43 interrupt-guarded start of sequence 8 on a handle after stopping it
sub_2108C80
export/plan0/arm9_main/sub_2108C80_02108C80.c
- docs/function_notes/agent_07.md:44 interrupt-guarded start of sequence 1 on a handle after stopping it, clears a flag
sub_2108D00
export/plan0/arm9_main/sub_2108D00_02108D00.c
- docs/function_notes/agent_07.md:45 interrupt-guarded start of sequence 1 on a second handle after stopping it, clears a flag
sub_2108D80
export/plan0/arm9_main/sub_2108D80_02108D80.c
- docs/function_notes/agent_07.md:46 interrupt-guarded: stops one handle with fade 13, clears a flag, stops another handle with fade 1
sub_2108DDC
export/plan0/arm9_main/sub_2108DDC_02108DDC.c
- docs/function_notes/agent_07.md:47 interrupt-guarded: stops two sound handles with fade 1 and sets a flag to 1
sub_2108E38
export/plan0/arm9_main/sub_2108E38_02108E38.c
- docs/function_notes/agent_07.md:48 stops sound handles 7..11 of the handle array (fade 0)
sub_2108E6C
export/plan0/arm9_main/sub_2108E6C_02108E6C.c
- docs/function_notes/agent_07.md:49 getter: address of sound handle number a1 (array base + 4*a1)
sub_2108E7C
export/plan0/arm9_main/sub_2108E7C_02108E7C.c
- docs/function_notes/agent_07.md:50 getter: returns pointer to a sound global table
sub_2108E88
export/plan0/arm9_main/sub_2108E88_02108E88.c
- docs/function_notes/agent_07.md:51 getter: returns pointer to a sound global table
sub_2108E94
export/plan0/arm9_main/sub_2108E94_02108E94.c
- docs/function_notes/agent_07.md:52 thin wrapper: calls sub_210D834(a1)
sub_2108EA0
export/plan0/arm9_main/sub_2108EA0_02108EA0.c
- docs/function_notes/agent_07.md:53 getter: address of 20-byte sound slot record number a1
sub_2108EB4
export/plan0/arm9_main/sub_2108EB4_02108EB4.c
- docs/function_notes/agent_07.md:54 setter: table[a1] = a2 (sound global array)
sub_2108EC4
export/plan0/arm9_main/sub_2108EC4_02108EC4.c
- docs/function_notes/agent_07.md:55 thin wrapper calling sub_212D5E0 with a constant (restore interrupts style)
sub_2108EDC
export/plan0/arm9_main/sub_2108EDC_02108EDC.c
- vm_model/src/mission_step.rs:60
sub_2108EDC(count, limit): the count advanced (HUD / sound hook). - docs/function_notes/agent_07.md:57 course/scene jingle chooser: depending on a1==a2 starts jingle sequence from a table (212 for course 101/201), else restarts the stored sequence if sound enabled
sub_2109038
export/plan0/arm9_main/sub_2109038_02109038.c
- docs/function_notes/agent_07.md:58 sets sound-object +0x3C to a2, +0x40 to -1, tail-calls a function pointer
sub_2109054
export/plan0/arm9_main/sub_2109054_02109054.c
- docs/function_notes/agent_07.md:59 thin wrapper: calls sub_210C1B0(a1)
sub_2109060
export/plan0/arm9_main/sub_2109060_02109060.c
- docs/function_notes/agent_07.md:60 thin wrapper: calls sub_210C558(a1, 0, a2, 0) (start sound on emitter)
sub_2109078
export/plan0/arm9_main/sub_2109078_02109078.c
- docs/function_notes/agent_07.md:61 starts sound a2 on emitter a1 via sub_210C610 if sound enabled flag bit0 set, else returns 0
sub_21090C4
export/plan0/arm9_main/sub_21090C4_021090C4.c
- vm_model/src/sound.rs:166 sounds are archive 0, entry = the id passed to
sub_21090C4). - game/src/sfx.rs:2 the entry being the id the kart code passes to
sub_21090C4(e.g. 129..141 walls by material (sub_210BAFC), 232 crash,
sub_2109110
export/plan0/arm9_main/sub_2109110_02109110.c
- docs/function_notes/agent_07.md:62 sets sound-object +0x3C to a2, +0x40 to -1, tail-calls a function pointer (same as sub_2109038)
sub_210912C
export/plan0/arm9_main/sub_210912C_0210912C.c
- docs/function_notes/agent_07.md:63 re-initialises sound parameter tables: sub_2109468, then sub_210D4A4/D040/D030/D020 setup
sub_2109184
export/plan0/arm9_main/sub_2109184_02109184.c
- docs/function_notes/agent_07.md:65 uncertain: computes two fixed-point values (>>12) from a sound emitter via sub_2073E4C/E04 after writing a hardware control reg and waiting for busy flag
sub_210920C
export/plan0/arm9_main/sub_210920C_0210920C.c
- vm_model/src/engine_sound.rs:1 Kart engine sound (
sub_2024A88) and the positioned-sound model (sub_21092B0,sub_210920C). - vm_model/src/engine_sound.rs:270 Pan from the source's camera depth and distance to the right (
sub_210920C): -128 hard left, - docs/function_notes/agent_07.md:66 stereo pan for a sound: atan2 of emitter x/z offset mapped to range -128..127
sub_21092B0
export/plan0/arm9_main/sub_21092B0_021092B0.c
- vm_model/src/engine_sound.rs:1 Kart engine sound (
sub_2024A88) and the positioned-sound model (sub_21092B0,sub_210920C). - vm_model/src/engine_sound.rs:230 Volume curve of a sound type (
sub_21092B0): zero atfar,knee_volumeatknee,maxwithin - docs/function_notes/agent_07.md:67 sound distance attenuation: piecewise volume curve by distance a1[4] using per-class 36-byte param records, lowered when behind or far
sub_2109468
export/plan0/arm9_main/sub_2109468_02109468.c
- docs/function_notes/agent_07.md:68 builds engine-sound pitch/volume curve tables: for ~16 five-int parameter records computes atan2 slopes and squared scale (special values in mode 2/2)
sub_210A53C
export/plan0/arm9_main/sub_210A53C_0210A53C.c
- docs/function_notes/agent_07.md:69 if object +0x488 != -1, starts sound id via sub_210C558(obj,0,id,0) and sets it to -1
sub_210A578
export/plan0/arm9_main/sub_210A578_0210A578.c
- docs/function_notes/agent_07.md:70 getter: returns a global value (*ptr)
sub_210A588
export/plan0/arm9_main/sub_210A588_0210A588.c
- docs/function_notes/agent_07.md:71 getter: returns a global value (*ptr)
sub_210A598
export/plan0/arm9_main/sub_210A598_0210A598.c
- docs/function_notes/agent_07.md:72 thin wrapper calling sub_210AF40(a1, a2, 8)
sub_210A63C
export/plan0/arm9_main/sub_210A63C_0210A63C.c
- docs/function_notes/agent_07.md:73 getter: object +8
sub_210A644
export/plan0/arm9_main/sub_210A644_0210A644.c
- docs/function_notes/agent_07.md:74 sound object: stores global into +0x484 and sets function pointer +0x30
sub_210A664
export/plan0/arm9_main/sub_210A664_0210A664.c
- docs/function_notes/agent_07.md:75 sound object: sets +0x484 = -1 and function pointer +0x30
sub_210A67C
export/plan0/arm9_main/sub_210A67C_0210A67C.c
- docs/function_notes/agent_07.md:76 sound param update: sets volume/pan record a2 from a1+0x308 plus a2+0x14 offset (uses sub_2105B28/B0C)
sub_210A6B4
export/plan0/arm9_main/sub_210A6B4_0210A6B4.c
- docs/function_notes/agent_07.md:77 sound param update: same as above but from a1+0x4C
sub_210A6EC
export/plan0/arm9_main/sub_210A6EC_0210A6EC.c
- docs/function_notes/agent_07.md:78 sound param update: same as above but from a1+0x4C (duplicate)
sub_210A724
export/plan0/arm9_main/sub_210A724_0210A724.c
- docs/function_notes/agent_07.md:79 jump to loc_210A880 (sound routine trampoline)
sub_210A76C
export/plan0/arm9_main/sub_210A76C_0210A76C.c
- docs/function_notes/agent_07.md:80 thin wrapper: calls sub_210A880(a1, a2, 0)
sub_210AA0C
export/plan0/arm9_main/sub_210AA0C_0210AA0C.c
- docs/function_notes/agent_07.md:81 stub: returns 0
sub_210AA14
export/plan0/arm9_main/sub_210AA14_0210AA14.c
- docs/function_notes/agent_07.md:82 starts a one-shot sound for a sound entry a2 (type from sound table +5: 2/3/6 selects a bank variant), for local player kart also sets pan bias, then adjusts volume
sub_210AB30
export/plan0/arm9_main/sub_210AB30_0210AB30.c
- docs/function_notes/agent_07.md:83 sets object +0x2C to a function pointer (sound object callback setup)
sub_210AB48
export/plan0/arm9_main/sub_210AB48_0210AB48.c
- docs/function_notes/agent_07.md:86 plays a countdown/announcer-style jingle sequence (id 12 or 13 + 14*a1) on a temp handle with volume 0x6E
sub_210ABF4
export/plan0/arm9_main/sub_210ABF4_0210ABF4.c
- docs/function_notes/agent_07.md:87 kart voice/horn sound manager: stops queued voice entries of type 2, then in race start states starts voice sequence (14*a2+13) at volume a4 or defers to sub_210C86C
sub_210AD58
export/plan0/arm9_main/sub_210AD58_0210AD58.c
- docs/function_notes/agent_07.md:88 queues a kart voice request (kart a1, voice a2) into the 8-entry queue, or plays at once if it is the local player's kart
sub_210ADD4
export/plan0/arm9_main/sub_210ADD4_0210ADD4.c
- docs/function_notes/agent_07.md:89 per-frame voice queue update: ages queued entries, plays the next voice when ready, lowers volume after each play
sub_210AEFC
export/plan0/arm9_main/sub_210AEFC_0210AEFC.c
- docs/function_notes/agent_07.md:90 clears the 8-entry voice queue, sets default volume 95 and last-voice -1
sub_210AF40
export/plan0/arm9_main/sub_210AF40_0210AF40.c
- game/src/sfx.rs:5 Character voices are archive 2, entry 14 x character + voice (
sub_210AF40): spun out, - game/src/sfx.rs:320 Character voices (archive 2, entry 14 x character + voice;
sub_210AF40callers).
sub_210B12C
export/plan0/arm9_main/sub_210B12C_0210B12C.c
- docs/function_notes/agent_07.md:91 if frame counter >= 120, plays sound via sub_210C86C and flags result entry (+0x19 |= 0x20|0x40)
sub_210B198
export/plan0/arm9_main/sub_210B198_0210B198.c
- docs/function_notes/agent_07.md:92 plays voice sequence (a2 + 14*a1) with params a4/a5 and volume a3 on a temp handle
sub_210B234
export/plan0/arm9_main/sub_210B234_0210B234.c
- game/src/sfx.rs:196 Wall sounds by the wall's collision type and variant (
sub_210B234->sub_210BAFC:
sub_210B2A8
export/plan0/arm9_main/sub_210B2A8_0210B2A8.c
- docs/function_notes.md:505 kart wading/rolling sound: only the local-bit kart (+52 & 1) without Bullet Bill; volume min(127, (+1112 >> 12) >> 2) from the speed word +0x458, SE 116 when depth a5 > 25000 with pitch drop (a5 - 25000) * 0.02 up to 900 above 70000 (+ wobble for the local kart); on land the surface group 0 sound
- docs/function_notes/agent_07.md:93 kart engine/skid sound update: derives volume from kart +0x458 (speed-ish), pitch curve by a5 and local-player status, triggers kart sound
sub_210B4E0
export/plan0/arm9_main/sub_210B4E0_0210B4E0.c
- docs/function_notes/agent_07.md:94 kart landing/hit sound: picks sound 178/185/192 by kart +0x490 type and plays it (and optional extra at volume 95)
sub_210B564
export/plan0/arm9_main/sub_210B564_0210B564.c
- docs/function_notes/agent_07.md:95 kart sound trigger: if kart sound enabled and thresholds pass, plays kart sound via sub_21090C4
sub_210B610
export/plan0/arm9_main/sub_210B610_0210B610.c
- docs/function_notes/agent_07.md:96 advances a 4.12 phase accumulator and looks up a sine-like table to produce a 589824-scaled oscillation value (engine/wind modulation)
sub_210B6A0
export/plan0/arm9_main/sub_210B6A0_0210B6A0.c
- docs/function_notes/agent_07.md:97 sound init: computes two reciprocal constants via atan2/FX_Div style call and clears two counters
sub_210B708
export/plan0/arm9_main/sub_210B708_0210B708.c
- docs/function_notes/agent_07.md:98 plays sound pair a1 {id, bank} via sub_210BEE8 with volume/param a2
sub_210B734
export/plan0/arm9_main/sub_210B734_0210B734.c
- docs/function_notes/agent_07.md:99 plays sound pair a1 {id, bank} via sub_210BCF4 with param a2
sub_210B760
export/plan0/arm9_main/sub_210B760_0210B760.c
- docs/function_notes/agent_07.md:100 like sub_210B708 but only if sound enabled flag bit0 is set
sub_210B7A8
export/plan0/arm9_main/sub_210B7A8_0210B7A8.c
- vm_model/src/mapobj/airship.rs:14 Not ported (all of them): sounds and effects (
sub_210B7A8/sub_208B7BC/sub_20D275C), - vm_model/src/mapobj/boo.rs:537
sub_208E490(3, position, 1)particle effect, and the sound id ofsub_210B7A8 - docs/function_notes/agent_07.md:101 play sound effect: plays {id, bank} pair a1 via sub_210BF24 if sound enabled
sub_210B7EC
export/plan0/arm9_main/sub_210B7EC_0210B7EC.c
- game/src/engine_audio.rs:103 Doppler tracker (
sub_210B7EC): the last squared camera distance (whole units) and the pitch rate - docs/function_notes/agent_07.md:102 smoothed delta tracker: stores new value a2, computes (old-new)>>shift as rate, discards rates beyond +/-1536
sub_210B850
export/plan0/arm9_main/sub_210B850_0210B850.c
- docs/function_notes/agent_07.md:103 resets delta tracker: values -1, rate 0, shift 6
sub_210B874
export/plan0/arm9_main/sub_210B874_0210B874.c
- docs/function_notes/agent_07.md:105 plays sound at volume 127 with pitch from a2>>12 + 5 and applies a pitch/pan tweak to the handle
sub_210B8BC
export/plan0/arm9_main/sub_210B8BC_0210B8BC.c
- docs/function_notes/agent_07.md:106 thin wrapper: tail-calls sub_21090C4 (kart sound) with a1
sub_210B8F4
export/plan0/arm9_main/sub_210B8F4_0210B8F4.c
- docs/function_notes/agent_07.md:107 thin wrapper: sub_210DDF4 call with fixed tables and (a1, a2)
sub_210B924
export/plan0/arm9_main/sub_210B924_0210B924.c
- docs/function_notes/agent_07.md:108 plays sound {global id, a1} via sub_210BF24 if enabled
sub_210B98C
export/plan0/arm9_main/sub_210B98C_0210B98C.c
- vm_model/src/shine.rs:74
sub_210B98C/sub_210BA38on the shine's own sound handle. - docs/function_notes/agent_07.md:109 kart sound variant: maps effect id 304-313 to an offset (1600, 6400, 14400, ..., 25, 25600, 57600) then calls sub_210DDF4 with kart +0x40 plus offset
sub_210BA38
export/plan0/arm9_main/sub_210BA38_0210BA38.c
- vm_model/src/shine.rs:74
sub_210B98C/sub_210BA38on the shine's own sound handle. - docs/function_notes/agent_07.md:110 kart sound variant: calls sub_210DDF4 with kart +0x40 plus a fixed offset
sub_210BA78
export/plan0/arm9_main/sub_210BA78_0210BA78.c
- docs/function_notes/agent_07.md:111 plays kart sound via sub_21090C4 and adds 10 to a global counter
sub_210BAC0
export/plan0/arm9_main/sub_210BAC0_0210BAC0.c
- docs/function_notes/agent_07.md:112 clears a global sound counter
sub_210BAD4
export/plan0/arm9_main/sub_210BAD4_0210BAD4.c
- docs/function_notes/agent_07.md:113 plays sound a2 on a1 at volume 127, param 0 via sub_2109078
sub_210BAE8
export/plan0/arm9_main/sub_210BAE8_0210BAE8.c
- docs/function_notes/agent_07.md:114 sets object +0x30 to a function pointer (sound object callback setup)
sub_210BAFC
export/plan0/arm9_main/sub_210BAFC_0210BAFC.c
- vm_model/src/kart/mod.rs:377 Collision type and variant of the wall last touched (picks its sound,
sub_210BAFC). - game/src/sfx.rs:2 the entry being the id the kart code passes to
sub_21090C4(e.g. 129..141 walls by material (sub_210BAFC), 232 crash, - game/src/sfx.rs:196 Wall sounds by the wall's collision type and variant (
sub_210B234->sub_210BAFC:
sub_210BB74
export/plan0/arm9_main/sub_210BB74_0210BB74.c
- vm_model/src/engine_sound.rs:23 Brake sound by surface (group 3,
sub_210BB74), indexed by the surface sound index. - docs/function_notes/agent_07.md:119 looks up a sound id for (a1 slot, a2 group, a3 index) in a per-kart override table, else falls back to the default id table
sub_210BBEC
export/plan0/arm9_main/sub_210BBEC_0210BBEC.c
- docs/function_notes/agent_07.md:120 setter: table[32a1 + 4a2] = a3 (per-character sound id table)
sub_210BC00
export/plan0/arm9_main/sub_210BC00_0210BC00.c
- docs/function_notes/agent_07.md:121 setter: table2[32a1 + 4a2] = a3 (second sound id table)
sub_210BC14
export/plan0/arm9_main/sub_210BC14_0210BC14.c
- docs/function_notes/agent_07.md:122 clears a 23-entry (32-byte each) sound table
sub_210BC54
export/plan0/arm9_main/sub_210BC54_0210BC54.c
- docs/function_notes/agent_07.md:123 removes node a2 from linked list a1 and clears its list-head field
sub_210BC8C
export/plan0/arm9_main/sub_210BC8C_0210BC8C.c
- docs/function_notes/agent_07.md:124 appends node a1 to list a2 if not already in one; returns 1 on success
sub_210BCE0
export/plan0/arm9_main/sub_210BCE0_0210BCE0.c
- docs/function_notes/agent_07.md:125 zeroes a 12-byte sound handle (3 words)
sub_210BCF4
export/plan0/arm9_main/sub_210BCF4_0210BCF4.c
- docs/function_notes/agent_07.md:126 starts a sound for emitter a4: if sound enabled and not mode 4, builds a start request (position/params) and plays it via NNS_Snd handle, rate limited to every 4th frame
sub_210BEE8
export/plan0/arm9_main/sub_210BEE8_0210BEE8.c
- docs/function_notes/agent_07.md:127 calls sub_210BCF4 only if the sound system is enabled
sub_210BF24
export/plan0/arm9_main/sub_210BF24_0210BF24.c
- docs/function_notes/agent_07.md:128 allocates a voice record for the emitter, removes any previous owner, resets it and starts the sound via sub_210BCF4
sub_210BFBC
export/plan0/arm9_main/sub_210BFBC_0210BFBC.c
- docs/function_notes/agent_07.md:129 recomputes an emitter's list state (0/1/3) from its voice flags and moves it between active lists
sub_210C084
export/plan0/arm9_main/sub_210C084_0210C084.c
- docs/function_notes/agent_07.md:130 stops voice a1 with fade a2 and clears its 4/8/2 flags
sub_210C0BC
export/plan0/arm9_main/sub_210C0BC_0210C0BC.c
- docs/function_notes/agent_07.md:131 releases emitter a1: stops all voices, empties voice list, removes from its active list
sub_210C134
export/plan0/arm9_main/sub_210C134_0210C134.c
- docs/function_notes/agent_07.md:132 initialises an emitter: voice list, callbacks, flags 0, owner a2, state 3, adds to the emitter list
sub_210C1B0
export/plan0/arm9_main/sub_210C1B0_0210C1B0.c
- docs/function_notes/agent_07.md:133 frees emitter: stops voices, removes it from lists, clears owner (+0x38)
sub_210C238
export/plan0/arm9_main/sub_210C238_0210C238.c
- docs/function_notes/agent_07.md:134 stops all voices flagged 4 (stopping) with fade a2, clearing flags, then recomputes emitter state
sub_210C3A8
export/plan0/arm9_main/sub_210C3A8_0210C3A8.c
- docs/function_notes/agent_07.md:135 stops every voice of the emitter, removes it from active list and frees it
sub_210C450
export/plan0/arm9_main/sub_210C450_0210C450.c
- docs/function_notes/agent_07.md:136 stops one voice a2 of emitter a1 with fade a3, removes it from the list, updates emitter state
sub_210C558
export/plan0/arm9_main/sub_210C558_0210C558.c
- docs/function_notes/agent_07.md:137 finds the voice with sound id a3 and bank a2 in emitter a1 and stops it with fade a4
sub_210C610
export/plan0/arm9_main/sub_210C610_0210C610.c
- docs/function_notes/agent_07.md:138 starts or retriggers a sound on an emitter at volume a4/pitch a5, reusing an existing voice with the same id or allocating one; flags it as playing
sub_210C86C
export/plan0/arm9_main/sub_210C86C_0210C86C.c
- docs/function_notes/agent_07.md:139 like sub_210C610 but always restarts (no stop-pending reuse); allocates a voice and starts a sound
sub_210CA4C
export/plan0/arm9_main/sub_210CA4C_0210CA4C.c
- docs/function_notes/agent_07.md:140 per-frame emitter update: calls the owner's position, volume and pan callbacks and applies the 3D positional parameters to each voice
sub_210CC3C
export/plan0/arm9_main/sub_210CC3C_0210CC3C.c
- docs/function_notes/agent_07.md:141 per-frame emitter state machine: enable/disable flags, stops voices whose sounds ended, moves emitter between lists
sub_210CF20
export/plan0/arm9_main/sub_210CF20_0210CF20.c
- docs/function_notes/agent_07.md:142 initialises an emitter (variant of sub_210C134 with different callbacks)
sub_210CF9C
export/plan0/arm9_main/sub_210CF9C_0210CF9C.c
- docs/function_notes/agent_07.md:143 sets or clears emitter enable bit0 (flag word +0x34) from a2==1
sub_210CFBC
export/plan0/arm9_main/sub_210CFBC_0210CFBC.c
- docs/function_notes/agent_07.md:144 sets or clears bit a2 of emitter flag word +0x34 depending on a3==1
sub_210CFE8
export/plan0/arm9_main/sub_210CFE8_0210CFE8.c
- docs/function_notes/agent_07.md:145 resets a voice record: clears handle, bank, id, flags, pitch, volume = 127
sub_210D020
export/plan0/arm9_main/sub_210D020_0210D020.c
- docs/function_notes/agent_07.md:146 setter: stores a1 into global (sound callback pointer)
sub_210D030
export/plan0/arm9_main/sub_210D030_0210D030.c
- docs/function_notes/agent_07.md:147 setter: stores a1 into global (sound callback pointer)
sub_210D040
export/plan0/arm9_main/sub_210D040_0210D040.c
- docs/function_notes/agent_07.md:148 setter: stores a1 into global (sound callback pointer)
sub_210D050
export/plan0/arm9_main/sub_210D050_0210D050.c
- docs/function_notes/agent_07.md:149 starts a sequence with default flags and (a2, a3) via sub_212EC04 with param a4
sub_210D078
export/plan0/arm9_main/sub_210D078_0210D078.c
- docs/function_notes/agent_07.md:150 applies a voice's volume (+0x1A) and pitch (+0x14) to its playing handle
sub_210D0B4
export/plan0/arm9_main/sub_210D0B4_0210D0B4.c
- docs/function_notes/agent_07.md:151 restarts a voice's sound from its stored bank/id via sub_212EC04
sub_210D0EC
export/plan0/arm9_main/sub_210D0EC_0210D0EC.c
- docs/function_notes/agent_07.md:152 releases all emitters in the global active emitter list
sub_210D120
export/plan0/arm9_main/sub_210D120_0210D120.c
- docs/function_notes/agent_07.md:153 stops every voice in the global voice pool with fade a1 and clears their flags
sub_210D1A4
export/plan0/arm9_main/sub_210D1A4_0210D1A4.c
- docs/function_notes/agent_07.md:154 applies a voice-handle op (sub_212C620(v, a1, a2)) to every voice in the global pool
sub_210D200
export/plan0/arm9_main/sub_210D200_0210D200.c
- docs/function_notes/agent_07.md:155 stops all voices of all emitters in the active list with fade a1 and unlinks them
sub_210D2CC
export/plan0/arm9_main/sub_210D2CC_0210D2CC.c
- docs/function_notes/agent_07.md:156 global sound per-frame update: updates pending emitters, runs update callbacks, releases finished emitters
sub_210D4A4
export/plan0/arm9_main/sub_210D4A4_0210D4A4.c
- docs/function_notes/agent_07.md:158 initialises the voice pool of a2 28-byte records at a1 and the three emitter lists
sub_210D570
export/plan0/arm9_main/sub_210D570_0210D570.c
- docs/function_notes/agent_07.md:161 releases all emitters (sub_210D0EC) and sets *a1 = 0
sub_210D590
export/plan0/arm9_main/sub_210D590_0210D590.c
- docs/function_notes/agent_07.md:163 if BGM player a1 has a valid stream id (+0xB != 0xFF) stops its handle (+0x0C) with fade a2
sub_210D5C0
export/plan0/arm9_main/sub_210D5C0_0210D5C0.c
- game/src/music.rs:92 the course music starts over, as
sub_210D5C0restarts it - docs/function_notes/agent_07.md:164 restarts the player's BGM through sub_210D7DC (uses stored id and fade) if it has a valid stream
sub_210D614
export/plan0/arm9_main/sub_210D614_0210D614.c
- docs/function_notes/agent_07.md:165 starts BGM sequence a2 on player a1 via sub_210D7DC, using default handle if a3 is null
sub_210D65C
export/plan0/arm9_main/sub_210D65C_0210D65C.c
- docs/function_notes/agent_07.md:166 sets player state to 3 (fade-out?) and, if substate is 3, restarts its sequence
sub_210D6CC
export/plan0/arm9_main/sub_210D6CC_0210D6CC.c
- docs/function_notes/agent_07.md:167 sets player state to 2 and, if substate is 2, restarts its sequence
sub_210D740
export/plan0/arm9_main/sub_210D740_0210D740.c
- docs/function_notes/agent_07.md:169 initialises a BGM player record: id, owner a2, type a3, stream a4, clears two handles, state 1
sub_210D7AC
export/plan0/arm9_main/sub_210D7AC_0210D7AC.c
- docs/function_notes/agent_07.md:170 ends sound frame: calls nullsub if flag set, then sub_212BA74 (sound update)
sub_210D7DC
export/plan0/arm9_main/sub_210D7DC_0210D7DC.c
- docs/function_notes/agent_07.md:171 starts sequence a1 on handle a3 (stops it first), selects player/bank for it and sets its volume a2
sub_210D834
export/plan0/arm9_main/sub_210D834_0210D834.c
- docs/function_notes/agent_07.md:172 initialises sound with parameter a1: calls sub_212F638 and stores a1
sub_210D854
export/plan0/arm9_main/sub_210D854_0210D854.c
- docs/function_notes/agent_07.md:173 sets up a 4096-byte sound buffer aligned to 32 bytes from heap a1 and stores a1
sub_210D894
export/plan0/arm9_main/sub_210D894_0210D894.c
- docs/function_notes/agent_07.md:175 sound system start: allocates a sound heap of a2 bytes at a1, creates NNS sound heap, optional sound-archive load, clears handle, inits event table
sub_210D960
export/plan0/arm9_main/sub_210D960_0210D960.c
- docs/function_notes/agent_07.md:176 getter: master sound volume (global)
sub_210D970
export/plan0/arm9_main/sub_210D970_0210D970.c
- docs/function_notes/agent_07.md:177 setter: master sound volume
sub_210D980
export/plan0/arm9_main/sub_210D980_0210D980.c
- docs/function_notes/agent_07.md:178 getter: global sound flag (mute/enable)
sub_210D990
export/plan0/arm9_main/sub_210D990_0210D990.c
- docs/function_notes/agent_07.md:179 setter: global sound flag
sub_210D9A0
export/plan0/arm9_main/sub_210D9A0_0210D9A0.c
- docs/function_notes/agent_07.md:180 BGM state switch: a2 = 0..5 (stop / play / pause / fade states) on player a1, stops voices, stops handles, changes volume
sub_210DC48
export/plan0/arm9_main/sub_210DC48_0210DC48.c
- docs/function_notes/agent_07.md:181 returns constant 5
sub_210DC50
export/plan0/arm9_main/sub_210DC50_0210DC50.c
- docs/function_notes/agent_07.md:182 calls sub_210D9A0(a1, a1[2]) (applies the stored state)
sub_210DC60
export/plan0/arm9_main/sub_210DC60_0210DC60.c
- docs/function_notes/agent_07.md:183 initialises a 28-byte list header: id a2, owner a3, zeros others
sub_210DC7C
export/plan0/arm9_main/sub_210DC7C_0210DC7C.c
- docs/function_notes/agent_07.md:184 releases player a1: frees its data (sub_210E434) and clears global
sub_210DCA8
export/plan0/arm9_main/sub_210DCA8_0210DCA8.c
- docs/function_notes/agent_07.md:185 thin wrapper: stops handle at a1+12 with fade a2
sub_210DCB8
export/plan0/arm9_main/sub_210DCB8_0210DCB8.c
- docs/function_notes/agent_07.md:186 starts sequence a2 for player a1 on handle a1+12 via sub_210D7DC
sub_210DCCC
export/plan0/arm9_main/sub_210DCCC_0210DCCC.c
- docs/function_notes/agent_07.md:187 loads wave/sequence archive set (a2,a3,a4) into player a5 if not already loaded; stores as current
sub_210DD44
export/plan0/arm9_main/sub_210DD44_0210DD44.c
- docs/function_notes/agent_07.md:188 runs all pending delayed sound callbacks in event table a1, then resets the entries to empty
sub_210DDF4
export/plan0/arm9_main/sub_210DDF4_0210DDF4.c
- docs/function_notes/agent_07.md:189 inserts a delayed callback (time a2, function a3, args a4/a5) into a time-ordered 16-byte-entry event table
sub_210DEAC
export/plan0/arm9_main/sub_210DEAC_0210DEAC.c
- docs/function_notes/agent_07.md:190 recursive helper: shifts event entries up to insert a new one in sorted order
sub_210E03C
export/plan0/arm9_main/sub_210E03C_0210E03C.c
- docs/function_notes/agent_07.md:191 clears an event table: sets every entry time to -1 and fields to 0
sub_210E094
export/plan0/arm9_main/sub_210E094_0210E094.c
- docs/function_notes/agent_07.md:192 allocates an event table of a2 16-byte entries from heap a3 and clears it
sub_210E128
export/plan0/arm9_main/sub_210E128_0210E128.c
- docs/function_notes/agent_07.md:193 finds a free voice slot in a pool, or the oldest/lowest-priority in-use one to steal; returns it
sub_210E280
export/plan0/arm9_main/sub_210E280_0210E280.c
- docs/function_notes/agent_07.md:194 ages a pool: increments the age counter at +4 of every in-use record
sub_210E2C4
export/plan0/arm9_main/sub_210E2C4_0210E2C4.c
- docs/function_notes/agent_07.md:195 initialises a pool of a3 records of stride a4 at a2: clears age and handle for each
sub_210E328
export/plan0/arm9_main/sub_210E328_0210E328.c
- docs/function_notes/agent_07.md:196 clears a record's age and calls a reset function pointer on it
sub_210E33C
export/plan0/arm9_main/sub_210E33C_0210E33C.c
- docs/function_notes/agent_07.md:197 loads group/archives (a2, a3, a4) via sub_212E9CC/E95C; stores ids in a1 on success
sub_210E3EC
export/plan0/arm9_main/sub_210E3EC_0210E3EC.c
- docs/function_notes/agent_07.md:198 compares three ids with a1's stored ids; true if equal
sub_210E434
export/plan0/arm9_main/sub_210E434_0210E434.c
- docs/function_notes/agent_07.md:199 unloads wave data of a1 if it differs from current: frees heap blocks and updates the stored ids
sub_210E4C8
export/plan0/arm9_main/sub_210E4C8_0210E4C8.c
- docs/function_notes/agent_07.md:200 stores a new heap allocation id (sub_212DB24) in a1+12
sub_210E4EC
export/plan0/arm9_main/sub_210E4EC_0210E4EC.c
- docs/function_notes/agent_07.md:203 copies the 3 default wave-group ids to a1 and sets a1+12 = 0xFF00
sub_210E50C
export/plan0/arm9_main/sub_210E50C_0210E50C.c
- docs/function_notes/agent_07.md:204 thin wrapper: sub_212EA04(a1, constant)
sub_210E524
export/plan0/arm9_main/sub_210E524_0210E524.c
- docs/function_notes/agent_07.md:205 loads the wave groups for the current setting read from save/game data (sub_202577C(41) -> ids) and checks success
sub_210E5E4
export/plan0/arm9_main/sub_210E5E4_0210E5E4.c
- docs/function_notes/agent_07.md:206 reads group ids from a record via sub_202553C, loads them, then applies a1 via sub_2111158
sub_210E680
export/plan0/arm9_main/sub_210E680_0210E680.c
- docs/function_notes/agent_07.md:207 opens /data/Sound/sound_data.sdat (SDAT sound archive), loads base groups and sets up the sound heap and players
sub_210E888
export/plan0/arm9_main/sub_210E888_0210E888.c
- docs/function_notes/agent_07.md:208 loads sound groups from packed id word a1 (3 bytes) with mode a2, then re-applies the character voice set
sub_210E8F8
export/plan0/arm9_main/sub_210E8F8_0210E8F8.c
- docs/function_notes/agent_07.md:209 sets up sound player 0 with a1 then stores a new heap id
sub_210E920
export/plan0/arm9_main/sub_210E920_0210E920.c
- docs/function_notes/agent_07.md:210 loads three sound groups (1, 0, 0) from the SDAT
sub_210E98C
export/plan0/arm9_main/sub_210E98C_0210E98C.c
- docs/function_notes/agent_07.md:211 loads/changes the three wave archives (a1,a2,a3) needed for a scene, freeing old ones and checking they fit
sub_210ED20
export/plan0/arm9_main/sub_210ED20_0210ED20.c
- docs/function_notes/agent_07.md:212 loads sound group 97 (character/global set) or reverts, moving wave data between heap slots
sub_210EF34
export/plan0/arm9_main/sub_210EF34_0210EF34.c
- docs/function_notes/agent_07.md:213 unloads wave data for current set (sub_210E434 on default record)
sub_210EF50
export/plan0/arm9_main/sub_210EF50_0210EF50.c
- docs/function_notes/agent_07.md:214 getter: returns address of a global (wave group record A)
sub_210EF5C
export/plan0/arm9_main/sub_210EF5C_0210EF5C.c
- docs/function_notes/agent_07.md:215 getter: returns address of a global (wave group record B)
sub_210EF68
export/plan0/arm9_main/sub_210EF68_0210EF68.c
- docs/function_notes/agent_07.md:216 frees every group in a 16-entry list (count at +64)
sub_210EFAC
export/plan0/arm9_main/sub_210EFAC_0210EFAC.c
- docs/function_notes/agent_07.md:217 clears a 16-entry group list and its count
sub_210EFCC
export/plan0/arm9_main/sub_210EFCC_0210EFCC.c
- docs/function_notes/agent_07.md:218 opens the sound archive file a2 via FS and reads it, calls sub_212D6C4 to attach it
sub_210F068
export/plan0/arm9_main/sub_210F068_0210F068.c
- docs/function_notes/agent_07.md:219 sets object +0x41C = 2 and tail-calls a function pointer
sub_210F07C
export/plan0/arm9_main/sub_210F07C_0210F07C.c
- docs/function_notes/agent_07.md:220 sets object +0x41C = 1 and tail-calls a function pointer
sub_210F090
export/plan0/arm9_main/sub_210F090_0210F090.c
- docs/function_notes/agent_07.md:221 microphone sample poll with cooldown: if counter 0 reads a sample (sub_201EC30), else counts to 30 and resets
sub_210F0D8
export/plan0/arm9_main/sub_210F0D8_0210F0D8.c
- docs/function_notes/agent_07.md:222 gets a value via sub_20203E4 and passes it to sub_214F1B0
sub_210F0F4
export/plan0/arm9_main/sub_210F0F4_0210F0F4.c
- docs/function_notes/agent_07.md:223 calls sub_214F264 on buffer+0x400 then sub_202041C
sub_210F114
export/plan0/arm9_main/sub_210F114_0210F114.c
- docs/function_notes/agent_07.md:224 gets a value via sub_20203E4 and passes it to sub_214F1B0 (same as sub_210F0D8)
sub_210F130
export/plan0/arm9_main/sub_210F130_0210F130.c
- docs/function_notes/agent_07.md:225 uncertain: microphone/recording init: clears 1024-byte buffer, builds a capture request struct (+0x400), starts sampling
sub_210F1D4
export/plan0/arm9_main/sub_210F1D4_0210F1D4.c
- docs/function_notes/agent_07.md:226 uncertain: one-time hardware init (sub_214F418, sub_21500A0, sub_214FB3C(1)), sets initialised flag
sub_210F208
export/plan0/arm9_main/sub_210F208_0210F208.c
- docs/function_notes/agent_07.md:227 initialises a 15-byte sound parameter record (a2 twice, a3, 40, 80, 127 bytes)
sub_210F230
export/plan0/arm9_main/sub_210F230_0210F230.c
- docs/function_notes/agent_07.md:228 plays a looping/ambient sound on sound handle 10 or 11 depending on a1 if flag table allows, else fades it out (10)
sub_210F35C
export/plan0/arm9_main/sub_210F35C_0210F35C.c
- docs/function_notes/agent_07.md:229 like sub_210F230: starts sound a2 on handle 10/11 when its table flag is set
sub_210F458
export/plan0/arm9_main/sub_210F458_0210F458.c
- docs/function_notes/agent_07.md:230 applies a scene BGM entry a1: stops handles in mode 3/4 when needed, starts sequences from a u16 table with flags
sub_210F5D4
export/plan0/arm9_main/sub_210F5D4_0210F5D4.c
- docs/function_notes/agent_07.md:231 maps game mode a1 (28,29,32,33,34) to a sound-mode index 0-4 and resets 3 parameter records
sub_210F714
export/plan0/arm9_main/sub_210F714_0210F714.c
- docs/function_notes/agent_07.md:232 returns constant 180
sub_210F71C
export/plan0/arm9_main/sub_210F71C_0210F71C.c
- docs/function_notes/agent_07.md:233 returns 120 if a1 >= 3 else 180
sub_210F72C
export/plan0/arm9_main/sub_210F72C_0210F72C.c
- docs/function_notes/agent_07.md:234 getter: returns a constant
sub_210F738
export/plan0/arm9_main/sub_210F738_0210F738.c
- docs/function_notes/agent_07.md:235 getter: returns a constant
sub_210F744
export/plan0/arm9_main/sub_210F744_0210F744.c
- docs/function_notes/agent_07.md:236 getter: first word of 12-byte record a1
sub_210F75C
export/plan0/arm9_main/sub_210F75C_0210F75C.c
- docs/function_notes/agent_07.md:237 true if the first word of 12-byte record a1 is 0
sub_210F780
export/plan0/arm9_main/sub_210F780_0210F780.c
- docs/function_notes/agent_07.md:238 polls two 12-byte input/channel records via sub_212C400 and counts how many frames the value stayed the same
sub_210F808
export/plan0/arm9_main/sub_210F808_0210F808.c
- docs/function_notes/agent_07.md:239 initialises two 12-byte channel records to -1, with index
sub_210F858
export/plan0/arm9_main/sub_210F858_0210F858.c
- docs/function_notes/agent_07.md:240 getter: returns a global value
sub_210F868
export/plan0/arm9_main/sub_210F868_0210F868.c
- docs/function_notes/agent_07.md:241 sets flag array[a1] = a2 and sets global to 1 if any of the 2 entries == 1
sub_210F8B0
export/plan0/arm9_main/sub_210F8B0_0210F8B0.c
- docs/function_notes/agent_07.md:242 sound mode start: reloads wave data (sub_210DCCC), resets 2 channel records and flags
sub_210F9AC
export/plan0/arm9_main/sub_210F9AC_0210F9AC.c
- docs/function_notes/agent_07.md:243 schedules a delayed sound callback keyed by sub_2086080 of kart id
sub_210F9F0
export/plan0/arm9_main/sub_210F9F0_0210F9F0.c
- docs/function_notes/agent_07.md:244 increments a global counter and plays kart sound via sub_21090C4
sub_210FA28
export/plan0/arm9_main/sub_210FA28_0210FA28.c
- docs/function_notes/agent_07.md:245 clears a global sound counter
sub_210FA40
export/plan0/arm9_main/sub_210FA40_0210FA40.c
- docs/function_notes/agent_07.md:247 sets or clears bit 2 of a global flag word when a1==1 (if a2 nonzero)
sub_210FA74
export/plan0/arm9_main/sub_210FA74_0210FA74.c
- docs/function_notes/agent_07.md:250 sets or clears bit 1 of sound flag word (a1==1) and resets word+4
sub_210FAAC
export/plan0/arm9_main/sub_210FAAC_0210FAAC.c
- docs/function_notes/agent_07.md:251 sets bit 3 (0x8) in sound flag word
sub_210FAC4
export/plan0/arm9_main/sub_210FAC4_0210FAC4.c
- docs/function_notes/agent_07.md:252 getter: sound flag record +0xC
sub_210FAD4
export/plan0/arm9_main/sub_210FAD4_0210FAD4.c
- docs/function_notes/agent_07.md:253 getter: bit 2 of sound flag word
sub_210FAF4
export/plan0/arm9_main/sub_210FAF4_0210FAF4.c
- docs/function_notes/agent_07.md:254 jump trampoline into a large sound routine (sub_210FB88 / loc_210FB68 data table) invoked with 2 globals
sub_211003C
export/plan0/arm9_main/sub_211003C_0211003C.c
- docs/function_notes/agent_07.md:255 if sound enabled, stops handle a2 and starts sequence a1 on it
sub_21100D0
export/plan0/arm9_main/sub_21100D0_021100D0.c
- docs/function_notes/agent_07.md:256 thin wrapper: handle stop (a1, a2)
sub_21100DC
export/plan0/arm9_main/sub_21100DC_021100DC.c
- docs/function_notes/agent_07.md:257 true if sound handle a1's sequence id (+0x3A) equals a3 and bank (+0x38) equals a2
sub_2110100
export/plan0/arm9_main/sub_2110100_02110100.c
- docs/function_notes/agent_07.md:258 getter: true if *a1 != 0 (handle is active)
sub_2110114
export/plan0/arm9_main/sub_2110114_02110114.c
- docs/function_notes/agent_07.md:259 per-frame engine/ambient volume fade: computes target volume from a position-based factor depending on mode, applies via sub_212C524/C678
sub_2110324
export/plan0/arm9_main/sub_2110324_02110324.c
- docs/function_notes/agent_07.md:260 true if sound-mode index is 0, 2 or 5 (bitmask 0x25)
sub_2110350
export/plan0/arm9_main/sub_2110350_02110350.c
- docs/function_notes/agent_07.md:261 sets sound volume on emitter a1 from distance (126976 - sub_2181508) scaled, clamped 0..127, inverted
sub_21103C0
export/plan0/arm9_main/sub_21103C0_021103C0.c
- docs/function_notes/agent_07.md:262 computes 5 atan2-based sound fade/pitch tables from fixed constants (520192, 122880, 368640, 143360, 102400)
sub_2110484
export/plan0/arm9_main/sub_2110484_02110484.c
- docs/function_notes/agent_07.md:263 computes two scale constants for sound distance via atan2(x<<12, constant)
sub_21104DC
export/plan0/arm9_main/sub_21104DC_021104DC.c
- docs/function_notes/agent_07.md:264 resets sound fade state: stores a1 and sets three channel states to 3, clears flag
sub_2110534
export/plan0/arm9_main/sub_2110534_02110534.c
- docs/function_notes/agent_07.md:265 for 2 entries computes atan2(table[i], a1) into a table
sub_211057C
export/plan0/arm9_main/sub_211057C_0211057C.c
- docs/function_notes/agent_07.md:266 getter: u16 table[a1]
sub_2110590
export/plan0/arm9_main/sub_2110590_02110590.c
- docs/function_notes/agent_07.md:267 getter: u32 table[a1]
sub_21105A0
export/plan0/arm9_main/sub_21105A0_021105A0.c
- docs/function_notes/agent_07.md:268 clears the 7 sound event tables
sub_21105D8
export/plan0/arm9_main/sub_21105D8_021105D8.c
- docs/function_notes/agent_07.md:269 allocates the 7 sound event tables with sizes from a 7-entry array
sub_2110640
export/plan0/arm9_main/sub_2110640_02110640.c
- docs/function_notes/agent_07.md:270 moves value a1[1] (4.12) toward target a2 by step a1[0]; returns new integer or -1 if already there (volume fade step)
sub_2110698
export/plan0/arm9_main/sub_2110698_02110698.c
- docs/function_notes/agent_07.md:271 calls sub_2105AC0(0)
sub_21106A8
export/plan0/arm9_main/sub_21106A8_021106A8.c
- docs/function_notes/agent_07.md:272 plays announcer/jingle (id a2+2*a1, or 71/72 for a1==12) on handle with volume 100, then SE 4
sub_2110720
export/plan0/arm9_main/sub_2110720_02110720.c
- docs/function_notes/agent_07.md:273 pushes (a1, a2) onto a 14-entry circular jingle queue
sub_2110754
export/plan0/arm9_main/sub_2110754_02110754.c
- docs/function_notes/agent_07.md:274 pops next jingle from the circular queue and plays it (same selection as sub_21106A8) when none is playing
sub_2110838
export/plan0/arm9_main/sub_2110838_02110838.c
- docs/function_notes/agent_07.md:275 clears the 14-entry jingle queue (all 13 / 2)
sub_2110874
export/plan0/arm9_main/sub_2110874_02110874.c
- docs/function_notes/agent_07.md:276 advances a global voice index (7 -> 6) and plays voice via sub_21108BC, sets it to 7
sub_21108AC
export/plan0/arm9_main/sub_21108AC_021108AC.c
- docs/function_notes/agent_07.md:277 setter: stores a1 into a global
sub_21108BC
export/plan0/arm9_main/sub_21108BC_021108BC.c
- docs/function_notes/agent_07.md:278 plays race-start countdown/voice step a1 (e.g. 504 for 3..5) once the event counter reaches 2
sub_2110A60
export/plan0/arm9_main/sub_2110A60_02110A60.c
- docs/function_notes/agent_07.md:279 resets announcer state: clears 3 counters, voice index = 7
sub_2110AAC
export/plan0/arm9_main/sub_2110AAC_02110AAC.c
- docs/function_notes/agent_07.md:280 starts character voice/engine loop sequence on handle 1 depending on a1 (0, 1 = 512, or other) and fades
sub_2110C40
export/plan0/arm9_main/sub_2110C40_02110C40.c
- docs/function_notes/agent_07.md:281 returns BGM id for race mode 20 (260 or constant) or 25 (412 or constant) by player-state, else -1
sub_2110CC8
export/plan0/arm9_main/sub_2110CC8_02110CC8.c
- docs/function_notes/agent_07.md:282 starts the race BGM by mode and rank/teams, with fade, falling back to sub_2106C64 stop
sub_2110E58
export/plan0/arm9_main/sub_2110E58_02110E58.c
- docs/function_notes/agent_07.md:283 determines the race-music mood (0 normal / 1 / 2 final lap / -1) from game mode and player placement
sub_2110FB8
export/plan0/arm9_main/sub_2110FB8_02110FB8.c
- docs/function_notes/agent_07.md:284 returns sound group number (9/10/11) from rank a1 and player count (+0x3D0 of game state)
sub_2111024
export/plan0/arm9_main/sub_2111024_02111024.c
- docs/function_notes/agent_07.md:285 decides when to start the final-lap/result music by counting frames past 130/145 and sending sequence id
sub_2111118
export/plan0/arm9_main/sub_2111118_02111118.c
- docs/function_notes/agent_07.md:286 clears three sound counters
sub_2111144
export/plan0/arm9_main/sub_2111144_02111144.c
- docs/function_notes/agent_07.md:287 getter: field +0x14 of sound record
sub_2111158
export/plan0/arm9_main/sub_2111158_02111158.c
- docs/function_notes/agent_07.md:288 loads the three wave groups for scene index a1 (special case for a1==4 in mode 9), checking each loads
sub_2111250
export/plan0/arm9_main/sub_2111250_02111250.c
- docs/function_notes/agent_07.md:289 allocates sound memory (a1, a2) and stores pointer in a record, +8 = 0
sub_211127C
export/plan0/arm9_main/sub_211127C_0211127C.c
- docs/function_notes/agent_07.md:290 maps character/driver index (sub_202A360) to a sound group id (67, 68, 63, 65, 64)
sub_21112FC
export/plan0/arm9_main/sub_21112FC_021112FC.c
- docs/function_notes/agent_07.md:291 setter: stores a1 into a global at +0xC
sub_211130C
export/plan0/arm9_main/sub_211130C_0211130C.c
- docs/function_notes/agent_07.md:292 getter: returns a global (u16)
sub_2111318
export/plan0/arm9_main/sub_2111318_02111318.c
- docs/function_notes/agent_07.md:293 getter: returns a global (u16)
sub_2111324
export/plan0/arm9_main/sub_2111324_02111324.c
- docs/function_notes/agent_07.md:294 gets voice data for a driver (sub_20AE6AC / 630), stores a voice id in a1+4 if present
sub_2111368
export/plan0/arm9_main/sub_2111368_02111368.c
- docs/function_notes.md:563 fetches a handle via sub_21114B0, then returns sub_20AE5F0(off_2111384[0], off_2111388)
- docs/function_notes/NEEDS_REVIEW.md:1065 calls sub_21114B0, then sub_20AE5F0 on off_2111384[0] with off_2111388 [REVIEW]
- docs/function_notes/hk_26.md:104 calls sub_21114B0, then sub_20AE5F0 on off_2111384[0] with off_2111388 [REVIEW]
sub_211138C
export/plan0/arm9_main/sub_211138C_0211138C.c
- docs/function_notes.md:564 tears the screen down (sub_2111584), zeroes the word at off_21113A4[0] and off_21113A8, returns the pointer off_21113A8
- docs/function_notes/NEEDS_REVIEW.md:1066 calls sub_2111584, clears word at off_21113A4[0] and off_21113A8, returns off_21113A8 [REVIEW]
- docs/function_notes/hk_26.md:105 calls sub_2111584, clears word at off_21113A4[0] and off_21113A8, returns off_21113A8 [REVIEW]
sub_21113AC
export/plan0/arm9_main/sub_21113AC_021113AC.c
- docs/function_notes.md:565 gets a heap handle (sub_20364E8/sub_20364E0), allocates two blocks of dword_21113E4 bytes into the globals at off_21113E8[0] and off_21113EC, then calls sub_21115B0(heap, *a1) (the screen constructor)
- docs/function_notes/NEEDS_REVIEW.md:1067 allocates two blocks of dword_21113E4 bytes from heap into two globals, then calls sub_21115B0 with *a1 [REVIEW]
- docs/function_notes/hk_26.md:106 allocates two blocks of dword_21113E4 bytes from heap into two globals, then calls sub_21115B0 with *a1 [REVIEW]
sub_21113F0
export/plan0/arm9_main/sub_21113F0_021113F0.c
- docs/function_notes.md:566 stores the 16-bit argument into field +50 of the object at *off_21113F8
- docs/function_notes/NEEDS_REVIEW.md:1068 stores a 16-bit value into field +50 of the object at off_21113F8 [REVIEW]
- docs/function_notes/hk_26.md:107 stores a 16-bit value into field +50 of the object at off_21113F8 [REVIEW]
sub_21113FC
export/plan0/arm9_main/sub_21113FC_021113FC.c
- docs/function_notes/hk_26.md:108 stores a 16-bit value into field +48 of the object at off_2111404
sub_2111408
export/plan0/arm9_main/sub_2111408_02111408.c
- docs/function_notes/hk_26.md:109 getter: returns 16-bit field +50 of the object at off_2111414
sub_2111418
export/plan0/arm9_main/sub_2111418_02111418.c
- docs/function_notes/hk_26.md:110 getter: returns 16-bit field +48 of the object at off_2111424
sub_2111428
export/plan0/arm9_main/sub_2111428_02111428.c
- docs/function_notes.md:567 pops one link from the list at *off_211144C: if the count at +44 is > 0, decrements it and returns the head's +44 link; when that link is NULL it returns the result of the head vtable's +40 callback; returns NULL when the count is 0
- docs/function_notes/NEEDS_REVIEW.md:1069 pops from a list: if counter at +44 of off_211144C > 0, decrements it and returns next link (+44); if none, calls fn ptr at +40 [REVIEW]
- docs/function_notes/hk_26.md:111 pops from a list: if counter at +44 of off_211144C > 0, decrements it and returns next link (+44); if none, calls fn ptr at +40 [REVIEW]
sub_2111450
export/plan0/arm9_main/sub_2111450_02111450.c
- docs/function_notes/hk_26.md:112 stores a 16-bit value into field +22 of the object at off_2111458
sub_211145C
export/plan0/arm9_main/sub_211145C_0211145C.c
- docs/function_notes/hk_26.md:113 getter: returns 16-bit field +22 of the object at off_2111468
sub_211146C
export/plan0/arm9_main/sub_211146C_0211146C.c
- docs/function_notes/hk_26.md:114 getter: returns 16-bit field +20 of the object at off_2111478
sub_211147C
export/plan0/arm9_main/sub_211147C_0211147C.c
- docs/function_notes/hk_26.md:115 getter: returns 32-bit field +16 of the object at off_2111484
sub_2111488
export/plan0/arm9_main/sub_2111488_02111488.c
- docs/function_notes/hk_26.md:116 stores a 32-bit value into field +12 of the object at off_2111490
sub_2111494
export/plan0/arm9_main/sub_2111494_02111494.c
- docs/function_notes.md:568 copies five words from a1 (a1[0..4]) into the object at *off_21114AC +24..+40; returns a1[4]
- docs/function_notes/NEEDS_REVIEW.md:1070 copies a 5-word struct from a1 into the object at off_21114AC (+24..+40) [REVIEW]
- docs/function_notes/hk_26.md:117 copies a 5-word struct from a1 into the object at off_21114AC (+24..+40) [REVIEW]
sub_21114B0
export/plan0/arm9_main/sub_21114B0_021114B0.c
- docs/function_notes.md:569 gets a handle from *off_21114C8 vtable+36 and returns sub_21258F0 of it
- docs/function_notes/NEEDS_REVIEW.md:1071 calls the fn ptr at off_21114C8+36 to get a handle, then returns sub_21258F0 of it [REVIEW]
- docs/function_notes/hk_26.md:118 calls the fn ptr at off_21114C8+36 to get a handle, then returns sub_21258F0 of it [REVIEW]
sub_21114CC
export/plan0/arm9_main/sub_21114CC_021114CC.c
- docs/function_notes.md:805 per-frame state machine for the screen controller at off_2111580: when +12 is not -1 runs the vtable+28 hook, sub_2111A98, sub_2036AB0 and sub_20369FC to rebuild the state object, then dispatches on state kind (+12) through a jump table
- docs/function_notes/NEEDS_REVIEW.md:1072 per-frame state machine for the screen controller at off_2111580: runs vtable hooks, resets state fields, dispatches state kind 0-4 to callbacks, then calls sub_212A920 [REVIEW]
- docs/function_notes/hk_27.md:2 per-frame state machine for the screen controller at off_2111580: runs vtable hooks, resets state fields, dispatches state kind 0-4 to callbacks, then calls sub_212A920 [REVIEW]
sub_2111584
export/plan0/arm9_main/sub_2111584_02111584.c
- docs/function_notes.md:570 screen teardown: sub_21144B4(), then vtable+28 of *off_21115AC gives a handle fed to sub_2111A98, sub_212ABD0, sub_2125DA0; finally NULLs the global off_21115AC
- docs/function_notes/NEEDS_REVIEW.md:1073 screen teardown: calls sub_21144B4, vtable+28 on off_21115AC, sub_2111A98/sub_212ABD0/sub_2125DA0 cleanup, then NULLs the off_21115AC global [REVIEW]
- docs/function_notes/hk_27.md:3 screen teardown: calls sub_21144B4, vtable+28 on off_21115AC, sub_2111A98/sub_212ABD0/sub_2125DA0 cleanup, then NULLs the off_21115AC global [REVIEW]
sub_21115B0
export/plan0/arm9_main/sub_21115B0_021115B0.c
- docs/function_notes.md:571 screen constructor: heap-allocates a 52-byte state object into *off_2111680 (owner pointer at +0), zeroes +48/+50, sets up the 2D sub-objects (sub_21250B0, sub_212ABDC, sub_2125C2C, sub_2125DE0, sub_21143F4), stores the screen kind a2 at +20 (kind 12 sets state +16=6 and calls sub_2111AB4, other kinds set +16=5), then returns the vtable+24 callback
- docs/function_notes/NEEDS_REVIEW.md:1074 screen constructor: heap-allocates a 52-byte state object via sub_2036BEC into off_2111680, sets owner, zeroes +48/+50, sets up sub_2125C2C/sub_2125DE0, picks init state by a2==12 [REVIEW]
- docs/function_notes/hk_27.md:4 screen constructor: heap-allocates a 52-byte state object via sub_2036BEC into off_2111680, sets owner, zeroes +48/+50, sets up sub_2125C2C/sub_2125DE0, picks init state by a2==12 [REVIEW]
sub_2111684
export/plan0/arm9_main/sub_2111684_02111684.c
- docs/function_notes.md:888 accumulates a hash over about 50 table entries: sub_204799C lookups combined with sub_20B496C and sub_20B4A7C; returns the result through sub_211E074
- docs/function_notes/NEEDS_REVIEW.md:1075 accumulates a hash over ~50 table entries (sub_204799C lookups fed to sub_20B4xxx combine helpers), returns sub_211E074 of the result; likely builds a 2D resource key [REVIEW]
- docs/function_notes/hk_27.md:5 accumulates a hash over ~50 table entries (sub_204799C lookups fed to sub_20B4xxx combine helpers), returns sub_211E074 of the result; likely builds a 2D resource key [REVIEW]
sub_2111A98
export/plan0/arm9_main/sub_2111A98_02111A98.c
- docs/function_notes/hk_27.md:6 resets four fields (+24,+28,+32,+36) of the object at off_2111AB0 to 0 and returns that object
sub_2111AB4
export/plan0/arm9_main/sub_2111AB4_02111AB4.c
- docs/function_notes/hk_27.md:7 thin wrapper: copies 5 words from table off_2111AD8 into a local array and calls sub_2111494
sub_2111ADC
export/plan0/arm9_main/sub_2111ADC_02111ADC.c
- docs/function_notes.md:572 if sub_211146C()==12 writes the masked values (dword_2111B2C/B30/B38) into the registers at off_2111B28 and off_2111B34, else builds a shifted/masked value from dword_2111B3C into off_2111B28
- docs/function_notes/NEEDS_REVIEW.md:1076 display-register update: if sub_211146C()==12 writes masked values into the registers at off_2111B28/off_2111B34, otherwise shifts/masks into off_2111B28 [REVIEW]
- docs/function_notes/hk_27.md:8 display-register update: if sub_211146C()==12 writes masked values into the registers at off_2111B28/off_2111B34, otherwise shifts/masks into off_2111B28 [REVIEW]
sub_2111B40
export/plan0/arm9_main/sub_2111B40_02111B40.c
- docs/function_notes.md:573 computes two masked register values from the struct at off_2111B80 (+88, +92, +96, +100) and stores them to off_2111B8C/off_2111B90, then tail-calls sub_2111428 (list pop)
- docs/function_notes/NEEDS_REVIEW.md:1077 computes masked offset values from struct off_2111B80 (+88,+92,+96,+100) and stores them to two registers (off_2111B8C/off_2111B90), then calls sub_2111428 [REVIEW]
- docs/function_notes/hk_27.md:9 computes masked offset values from struct off_2111B80 (+88,+92,+96,+100) and stores them to two registers (off_2111B8C/off_2111B90), then calls sub_2111428 [REVIEW]
sub_2111B94
export/plan0/arm9_main/sub_2111B94_02111B94.c
- docs/function_notes.md:806 per-frame sub-state dispatcher on off_2111C74: copies the next state (+80) to the state (+76), then calls one of the sub-screen update functions (sub_2112B30, sub_2112A0C, ...) through a 12-entry switch
- docs/function_notes/NEEDS_REVIEW.md:1078 per-frame sub-state dispatcher on off_2111C74 (state at +76, next at +80): calls one of 12 sub-screen update functions (sub_2112B30..sub_2111C78), then sub_2113D84 and two sub_2124C30 draws [REVIEW]
- docs/function_notes/hk_27.md:10 per-frame sub-state dispatcher on off_2111C74 (state at +76, next at +80): calls one of 12 sub-screen update functions (sub_2112B30..sub_2111C78), then sub_2113D84 and two sub_2124C30 draws [REVIEW]
sub_2111C78
export/plan0/arm9_main/sub_2111C78_02111C78.c
- docs/function_notes.md:833 animation step on screen object off_2111D80: calls sub_21137F4, bumps the frame counter (+84), computes a 16-bit value with sub_20AE4C0 and writes it into map cells (the object's +60 table at fixed offsets and row (+6)+5 at +4)
- docs/function_notes/NEEDS_REVIEW.md:1079 animation step for screen object off_2111D80: bumps frame counter (+84), computes a 16-bit value via sub_20AE4C0 and writes it into map/cell slots (+60), special-cases counter 2 and 10 [REVIEW]
- docs/function_notes/hk_27.md:11 animation step for screen object off_2111D80: bumps frame counter (+84), computes a 16-bit value via sub_20AE4C0 and writes it into map/cell slots (+60), special-cases counter 2 and 10 [REVIEW]
sub_2111DB8
export/plan0/arm9_main/sub_2111DB8_02111DB8.c
- docs/function_notes.md:807 animation step on screen object off_2111EBC: bumps the frame counter (+84), computes a 16-bit value via sub_20AE4C0 and writes it into the map cells selected by the table entries (+60) and the row (+6 of the object) + 5 * 64
- docs/function_notes/NEEDS_REVIEW.md:1080 same pattern as sub_2111C78 for object off_2111EBC with different slot tables; counter 6 clears flags, counter>=10 calls sub_2111488 [REVIEW]
- docs/function_notes/hk_27.md:12 same pattern as sub_2111C78 for object off_2111EBC with different slot tables; counter 6 clears flags, counter>=10 calls sub_2111488 [REVIEW]
sub_2111EF4
export/plan0/arm9_main/sub_2111EF4_02111EF4.c
- docs/function_notes.md:574 short animation step on the object at off_2111F44: bumps the frame counter at +84, computes a 16-bit value with sub_20AE488 and writes it to four map cells (+60 table at dword_2111F48/4C/50 and row (state+5)<<6 +4); at counter >= 10 calls sub_2113298
- docs/function_notes/NEEDS_REVIEW.md:1081 short animation step on object off_2111F44: bumps counter, computes value via sub_20AE488, writes 4 map slots, at counter>=10 calls sub_2113298 [REVIEW]
- docs/function_notes/hk_27.md:13 short animation step on object off_2111F44: bumps counter, computes value via sub_20AE488, writes 4 map slots, at counter>=10 calls sub_2113298 [REVIEW]
sub_2111F54
export/plan0/arm9_main/sub_2111F54_02111F54.c
- docs/function_notes.md:889 animation step on object off_2112090: when sub_211145C() == -1 in state 6 calls sub_2111450(12); bumps the counter (+84), writes the sub_20AE4C0 value into the map cells (+92 and the row cells)
- docs/function_notes/NEEDS_REVIEW.md:1082 animation step on object off_2112090: if sub_211145C()==-1 in state 6 calls sub_2111450(12); bumps counter, writes computed 16-bit value to many map slots, at counter>=10 calls sub_2111488 [REVIEW]
- docs/function_notes/hk_27.md:14 animation step on object off_2112090: if sub_211145C()==-1 in state 6 calls sub_2111450(12); bumps counter, writes computed 16-bit value to many map slots, at counter>=10 calls sub_2111488 [REVIEW]
sub_211209C
export/plan0/arm9_main/sub_211209C_0211209C.c
- docs/function_notes.md:808 same animation step as sub_2111DB8 on object off_211219C with its own slot constants
- docs/function_notes/NEEDS_REVIEW.md:1083 animation step on object off_211219C, same pattern as sub_2111C78 with other slot tables; counter>=10 calls sub_21132E4, counter 6 clears flags [REVIEW]
- docs/function_notes/hk_27.md:15 animation step on object off_211219C, same pattern as sub_2111C78 with other slot tables; counter>=10 calls sub_21132E4, counter 6 clears flags [REVIEW]
sub_21121D4
export/plan0/arm9_main/sub_21121D4_021121D4.c
- docs/function_notes.md:890 animation step on object off_211237C: sub_21137F4, then a base value (0, -256 or dword_2112380) chosen from the state at +108, written into the map cells
- docs/function_notes/NEEDS_REVIEW.md:1084 animation step on object off_211237C: picks a base value (0, -256 or dword_2112380) from state +108, writes computed value into map slots (+20/+36/+60), at counter>=10 calls sub_211346C [REVIEW]
- docs/function_notes/hk_27.md:16 animation step on object off_211237C: picks a base value (0, -256 or dword_2112380) from state +108, writes computed value into map slots (+20/+36/+60), at counter>=10 calls sub_211346C [REVIEW]
sub_21123A0
export/plan0/arm9_main/sub_21123A0_021123A0.c
- docs/function_notes.md:891 mirror of sub_21121D4 on object off_2112548 with the base value from state +108 inverted
- docs/function_notes/NEEDS_REVIEW.md:1085 mirror of sub_21121D4 on object off_2112548 with the value chosen from state +108 inverted; at counter>=10 calls sub_2113420 [REVIEW]
- docs/function_notes/hk_27.md:17 mirror of sub_21121D4 on object off_2112548 with the value chosen from state +108 inverted; at counter>=10 calls sub_2113420 [REVIEW]
sub_211256C
export/plan0/arm9_main/sub_211256C_0211256C.c
- docs/function_notes.md:918 menu/selection input handler: reads the button/touch flag words at +736 of several UI objects, calls sub_21137F4 and sub_21136F8
- docs/function_notes/NEEDS_REVIEW.md:1086 menu/selection input handler: reads button/touch flag words (+736) of several UI objects, hit-tests cells with sub_201EA84, dispatches to sub_2113790/sub_2128310/sub_212ECC0/sub_21137A8/sub_21138E4/sub_2113940 [REVIEW]
- docs/function_notes/hk_27.md:18 menu/selection input handler: reads button/touch flag words (+736) of several UI objects, hit-tests cells with sub_201EA84, dispatches to sub_2113790/sub_2128310/sub_212ECC0/sub_21137A8/sub_21138E4/sub_2113940 [REVIEW]
sub_21128B4
export/plan0/arm9_main/sub_21128B4_021128B4.c
- docs/function_notes/hk_27.md:19 if sub_2128294() (button-state check) returns true, calls sub_211346C; otherwise returns the result
sub_21128CC
export/plan0/arm9_main/sub_21128CC_021128CC.c
- docs/function_notes.md:892 animation step on object off_21129D4 (same pattern as sub_2111C78); counter >= 10 calls the next handler
- docs/function_notes/NEEDS_REVIEW.md:1087 animation step on object off_21129D4 (same pattern as sub_2111C78); counter>=10 calls sub_2113480, counter 4 clears flags [REVIEW]
- docs/function_notes/hk_27.md:20 animation step on object off_21129D4 (same pattern as sub_2111C78); counter>=10 calls sub_2113480, counter 4 clears flags [REVIEW]
sub_2112A0C
export/plan0/arm9_main/sub_2112A0C_02112A0C.c
- docs/function_notes.md:893 animation step on object off_2112B24 (values at +92 and +100); counter >= 10 calls the next handler
- docs/function_notes/NEEDS_REVIEW.md:1088 animation step on object off_2112B24 (same pattern with values at +92/+100); counter>=10 calls sub_211349C [REVIEW]
- docs/function_notes/hk_27.md:21 animation step on object off_2112B24 (same pattern with values at +92/+100); counter>=10 calls sub_211349C [REVIEW]
sub_2112B30
export/plan0/arm9_main/sub_2112B30_02112B30.c
- docs/function_notes/hk_27.md:22 returns sub_2036C5C(); if nonzero calls sub_21134B8 (thin wrapper)
sub_2112B48
export/plan0/arm9_main/sub_2112B48_02112B48.c
- docs/function_notes.md:734 teardown of screen off_2112BA4: when state +144 == 4 resets the display registers from +106 and +104 (sub_21113FC, sub_21113F0), else zeroes them and masks the display control bits; clears the global and returns its address
- docs/function_notes/NEEDS_REVIEW.md:1089 teardown of screen off_2112BA4: if state +144==4 resets two display registers from +104/+106, else zeroes them and masks display control bits; clears the global and returns it [REVIEW]
- docs/function_notes/hk_27.md:23 teardown of screen off_2112BA4: if state +144==4 resets two display registers from +104/+106, else zeroes them and masks display control bits; clears the global and returns it [REVIEW]
sub_2112BB4
export/plan0/arm9_main/sub_2112BB4_02112BB4.c
- docs/function_notes.md:894 large 2D screen constructor (1438 bytes): sets the display control registers for both engines and allocates the screen objects
- docs/function_notes/NEEDS_REVIEW.md:1090 large 2D screen constructor (1438 bytes): sets display control regs for both engines, allocates a 148-byte screen object into off_2112FB0, lays out rows with sub_21243AC and sub_212426C text draws using sub_20B3F7C BMG lookups [REVIEW]
- docs/function_notes/hk_27.md:24 large 2D screen constructor (1438 bytes): sets display control regs for both engines, allocates a 148-byte screen object into off_2112FB0, lays out rows with sub_21243AC and sub_212426C text draws using sub_20B3F7C BMG lookups [REVIEW]
sub_2113174
export/plan0/arm9_main/sub_2113174_02113174.c
- docs/function_notes.md:809 setup of screen object off_2113264: state (+80) = 11, counter (+84) = 0, writes map cells with dword_211326C and -256 values from the table, then the last cell at row (+6)+5
- docs/function_notes/NEEDS_REVIEW.md:1091 setup of screen object off_2113264: state=11, counter=0, fills map slots (+60) with dword_211326C/-256 values, clears two slots, calls sub_21139B4(0) [REVIEW]
- docs/function_notes/hk_27.md:25 setup of screen object off_2113264: state=11, counter=0, fills map slots (+60) with dword_211326C/-256 values, clears two slots, calls sub_21139B4(0) [REVIEW]
sub_2113298
export/plan0/arm9_main/sub_2113298_02113298.c
- docs/function_notes/hk_27.md:26 sets state (+80) of object off_21132AC to 10, resets counter, tail-calls function pointer off_21132B0 (thin wrapper)
sub_21132B4
export/plan0/arm9_main/sub_21132B4_021132B4.c
- docs/function_notes.md:735 sets state +80 = 9 on the object at *off_21132D4, +84 = 0, the flag at (+60)+dword_21132D8 = 1, then returns off_21132E0(off_21132DC, 0, 4)
- docs/function_notes/NEEDS_REVIEW.md:1092 sets state (+80) of object off_21132D4 to 9, resets counter, sets flag dword_21132D8=1, calls off_21132E0(off_21132DC,0,4) (thin state transition) [REVIEW]
- docs/function_notes/hk_27.md:27 sets state (+80) of object off_21132D4 to 9, resets counter, sets flag dword_21132D8=1, calls off_21132E0(off_21132DC,0,4) (thin state transition) [REVIEW]
sub_21132E4
export/plan0/arm9_main/sub_21132E4_021132E4.c
- docs/function_notes.md:810 sets state (+80) = 8 on object off_21133D4, resets the counter, writes dword_21133D8 into the map cells
- docs/function_notes/NEEDS_REVIEW.md:1093 sets state (+80)=8 on object off_21133D4, resets counter, writes dword_21133D8 values to map slots and clears two entries, then calls sub_205EDF8 (fn-pointer dispatch) [REVIEW]
- docs/function_notes/hk_27.md:28 sets state (+80)=8 on object off_21133D4, resets counter, writes dword_21133D8 values to map slots and clears two entries, then calls sub_205EDF8 (fn-pointer dispatch) [REVIEW]
sub_211340C
export/plan0/arm9_main/sub_211340C_0211340C.c
- docs/function_notes/hk_27.md:29 sets state (+80)=7 on object off_211341C and resets its counter (thin state setter)
sub_2113420
export/plan0/arm9_main/sub_2113420_02113420.c
- docs/function_notes.md:811 sets state (+80) = 6 on object off_2113454, resets the counter, picks a value from +108 via sub_211398C or sub_21139A0 and calls sub_21139B4
- docs/function_notes/NEEDS_REVIEW.md:1094 sets state (+80)=6 on object off_2113454, resets counter, picks a value from +108 via sub_211398C/sub_21139A0 and calls sub_21139B4 [REVIEW]
- docs/function_notes/hk_27.md:30 sets state (+80)=6 on object off_2113454, resets counter, picks a value from +108 via sub_211398C/sub_21139A0 and calls sub_21139B4 [REVIEW]
sub_2113458
export/plan0/arm9_main/sub_2113458_02113458.c
- docs/function_notes/hk_27.md:31 sets state (+80)=5 on object off_2113468 and resets its counter (thin state setter)
sub_211346C
export/plan0/arm9_main/sub_211346C_0211346C.c
- docs/function_notes/hk_27.md:32 sets state (+80)=4 on object off_211347C and resets its counter (thin state setter)
sub_2113480
export/plan0/arm9_main/sub_2113480_02113480.c
- docs/function_notes/hk_27.md:33 sets state (+80)=3 on object off_2113494, resets counter, tail-calls function pointer off_2113498 (thin wrapper)
sub_211349C
export/plan0/arm9_main/sub_211349C_0211349C.c
- docs/function_notes/hk_27.md:34 sets state (+80)=2 on object off_21134B0, resets counter, tail-calls function pointer off_21134B4 (thin wrapper)
sub_21134B8
export/plan0/arm9_main/sub_21134B8_021134B8.c
- docs/function_notes/hk_27.md:35 sets state (+80)=1 on object off_21134CC, resets counter, tail-calls function pointer off_21134D0 (thin wrapper)
sub_21134D4
export/plan0/arm9_main/sub_21134D4_021134D4.c
- docs/function_notes.md:895 resets screen object off_21136B8: state +80 = 0, counter +84 = 0, +88 = 0, +92 = -192, +96 = 0, and blanks the map slots
- docs/function_notes/NEEDS_REVIEW.md:1095 resets screen object off_21136B8 (state, counter, offset regs to -192), blanks map slots and reinitialises entries from dword_21136C4 [REVIEW]
- docs/function_notes/hk_27.md:36 resets screen object off_21136B8 (state, counter, offset regs to -192), blanks map slots and reinitialises entries from dword_21136C4 [REVIEW]
sub_21136F8
export/plan0/arm9_main/sub_21136F8_021136F8.c
- docs/function_notes.md:812 per-frame step on object off_211378C: when sub_2113790 is set and the pending counter (+112) is 7 copies +104 to +116 and calls sub_2113A3C (detail panel); otherwise animates via sub_2116D10 (7 - counter) and stores the result at +92
- docs/function_notes/NEEDS_REVIEW.md:1096 per-frame step on object off_211378C: while pending counter (+112) is nonzero, animates via sub_2116D10 and sub_2113A3C; otherwise latches counter=7 when the selection changed [REVIEW]
- docs/function_notes/hk_27.md:37 per-frame step on object off_211378C: while pending counter (+112) is nonzero, animates via sub_2116D10 and sub_2113A3C; otherwise latches counter=7 when the selection changed [REVIEW]
sub_2113790
export/plan0/arm9_main/sub_2113790_02113790.c
- docs/function_notes/hk_27.md:38 returns whether the pending counter at off_21137A4 +112 is nonzero (getter)
sub_21137A8
export/plan0/arm9_main/sub_21137A8_021137A8.c
- docs/function_notes.md:813 toggles the friend record at index sub_2113F1C() + a1: plays sound 37 via sub_212ECC0 after sub_2114260 when the record is set, otherwise sound 36 after sub_211427C
- docs/function_notes/NEEDS_REVIEW.md:1097 toggles the flag of the friend/record at index sub_2113F1C()+a1 via sub_2114260/sub_211427C and plays sound 36 or 37 via sub_212ECC0 [REVIEW]
- docs/function_notes/hk_27.md:39 toggles the flag of the friend/record at index sub_2113F1C()+a1 via sub_2114260/sub_211427C and plays sound 36 or 37 via sub_212ECC0 [REVIEW]
sub_21137F4
export/plan0/arm9_main/sub_21137F4_021137F4.c
- docs/function_notes.md:814 per-frame animation for object off_21138D8: decrements two per-slot counters (+128, +132) via sub_20ADC64 and writes the results into map cells
- docs/function_notes/NEEDS_REVIEW.md:1098 per-frame animation for object off_21138D8: decrements two per-slot counters (+128..) and writes 0/1 visibility flags into map slots, uses sub_20ADC64 and sub_21143B4 [REVIEW]
- docs/function_notes/hk_27.md:40 per-frame animation for object off_21138D8: decrements two per-slot counters (+128..) and writes 0/1 visibility flags into map slots, uses sub_20ADC64 and sub_21143B4 [REVIEW]
sub_21138E4
export/plan0/arm9_main/sub_21138E4_021138E4.c
- docs/function_notes.md:815 cursor move up on object off_2113938 (field +104): decrements the index with wrap to 4, skipping invalid rows (sub_2113EF0), plays sound from off_211393C when the index changes
- docs/function_notes/NEEDS_REVIEW.md:1099 cursor move on off_2113938 (field +104): decrements index with wrap to 4, validity check via sub_2113EF0, modulo via sub_2133068, plays sound via sub_212ECC0 on change [REVIEW]
- docs/function_notes/hk_27.md:41 cursor move on off_2113938 (field +104): decrements index with wrap to 4, validity check via sub_2113EF0, modulo via sub_2133068, plays sound via sub_212ECC0 on change [REVIEW]
sub_2113940
export/plan0/arm9_main/sub_2113940_02113940.c
- docs/function_notes.md:816 cursor move down on object off_2113984 (field +104): increments the index, wraps to 0 when the row is invalid or the index reaches 5; plays sound from off_2113988 on change
- docs/function_notes/NEEDS_REVIEW.md:1100 cursor move right on object off_2113984 (field +104): increments index, wraps to 0 when invalid (sub_2113EF0) or >=5, plays a sound via sub_212ECC0 on change [REVIEW]
- docs/function_notes/hk_27.md:42 cursor move right on object off_2113984 (field +104): increments index, wraps to 0 when invalid (sub_2113EF0) or >=5, plays a sound via sub_212ECC0 on change [REVIEW]
sub_211398C
export/plan0/arm9_main/sub_211398C_0211398C.c
- docs/function_notes/hk_27.md:43 decrements the 16-bit scroll field (+106) of object off_211399C and returns it
sub_21139A0
export/plan0/arm9_main/sub_21139A0_021139A0.c
- docs/function_notes/hk_27.md:44 increments the 16-bit scroll field (+106) of object off_21139B0 and returns it
sub_21139B4
export/plan0/arm9_main/sub_21139B4_021139B4.c
- docs/function_notes.md:817 redraws the 5-row list: for each visible row (from sub_2113F1C) with a valid friend entry (count from sub_21143B4) copies its 32-byte name via sub_2114298 and draws it with sub_212426C
- docs/function_notes/NEEDS_REVIEW.md:1101 redraws the 5-row list view: for each visible row with a valid entry loads its 32-byte name via sub_2114298 and draws it with sub_212426C, clamps scroll via sub_2133068, then calls sub_2113A3C [REVIEW]
- docs/function_notes/hk_27.md:45 redraws the 5-row list view: for each visible row with a valid entry loads its 32-byte name via sub_2114298 and draws it with sub_212426C, clamps scroll via sub_2133068, then calls sub_2113A3C [REVIEW]
sub_2113A3C
export/plan0/arm9_main/sub_2113A3C_02113A3C.c
- docs/function_notes.md:1597 detail/info panel renderer (818 bytes): reads the record flags via sub_2114158 and draws the selected name and fields
- docs/function_notes/NEEDS_REVIEW.md:1102 detail/info panel renderer: reads record flags via sub_2114158, draws the selected name plus stats (sub_211437C..sub_21142F0, clamped to dword_2113D74), date and text rows, then a sprite/item call [REVIEW]
- docs/function_notes/hk_27.md:46 detail/info panel renderer: reads record flags via sub_2114158, draws the selected name plus stats (sub_211437C..sub_21142F0, clamped to dword_2113D74), date and text rows, then a sprite/item call [REVIEW]
sub_2113D84
export/plan0/arm9_main/sub_2113D84_02113D84.c
- docs/function_notes.md:834 refreshes the 5-row list highlight on object off_2113ED8: clears the row cells, then for each valid row sets the highlight from the friend index list
- docs/function_notes/NEEDS_REVIEW.md:1103 refreshes the 5-row list highlight state on object off_2113ED8: clears row cells, then for each valid row sets highlight cells and flags from sub_2114398 via sub_2124100 [REVIEW]
- docs/function_notes/hk_27.md:47 refreshes the 5-row list highlight state on object off_2113ED8: clears row cells, then for each valid row sets highlight cells and flags from sub_2114398 via sub_2124100 [REVIEW]
sub_2113EF0
export/plan0/arm9_main/sub_2113EF0_02113EF0.c
- docs/function_notes/hk_27.md:48 returns whether row index a1 is valid, i.e. sub_21143B4(page base) > base+a1 (count check, getter)
sub_2113F1C
export/plan0/arm9_main/sub_2113F1C_02113F1C.c
- docs/function_notes/hk_27.md:49 returns the list page base index: 5 * the 16-bit field +106 of object off_2113F30 (getter)
sub_2113F34
export/plan0/arm9_main/sub_2113F34_02113F34.c
- docs/function_notes.md:905 populates the record-list screen struct at off_2114108 from about 18 sub_204799C lookups converted with sub_20B49BC and the related helpers
- docs/function_notes/NEEDS_REVIEW.md:1104 populates the record-list screen struct at off_2114108 from ~18 lookups via sub_204799C and sub_20B4xxx converters, then draws header text rows with sub_2016468 [REVIEW]
- docs/function_notes/hk_27.md:50 populates the record-list screen struct at off_2114108 from ~18 lookups via sub_204799C and sub_20B4xxx converters, then draws header text rows with sub_2016468 [REVIEW]
sub_2114158
export/plan0/arm9_main/sub_2114158_02114158.c
- docs/function_notes.md:818 validity/flag check of a record via the function pointer off_2114170 applied to the record index byte from the table at off_211416C
- docs/function_notes/NEEDS_REVIEW.md:1105 validity/flag check of a record via function pointer off_2114170 on the byte from the index table at off_211416C (wrapper) [REVIEW]
- docs/function_notes/hk_27.md:51 validity/flag check of a record via function pointer off_2114170 on the byte from the index table at off_211416C (wrapper) [REVIEW]
sub_2114174
export/plan0/arm9_main/sub_2114174_02114174.c
- docs/function_notes.md:819 clears record a1 via sub_20607B0, polls the busy flag at off_21141C0 until clear, then rebuilds the friend index list with sub_21143F4(1)
- docs/function_notes/NEEDS_REVIEW.md:1106 clears record a1 via sub_20607B0, polls a busy flag at off_21141C0 until clear, then returns sub_21143F4(1) [REVIEW]
- docs/function_notes/hk_27.md:52 clears record a1 via sub_20607B0, polls a busy flag at off_21141C0 until clear, then returns sub_21143F4(1) [REVIEW]
sub_21141C8
export/plan0/arm9_main/sub_21141C8_021141C8.c
- docs/function_notes.md:820 loads the save block for record a1 via sub_205EC14, waits for the busy flag, then verifies the block with sub_205ECA4
- docs/function_notes/NEEDS_REVIEW.md:1107 loads the save block for record a1 via sub_205EC14, waits for the busy flag, verifies with sub_205ECA4, marks the slot dirty and calls sub_214D0A8 when needed, returns sub_20AC2FC(a2,a3,32) [REVIEW]
- docs/function_notes/hk_27.md:53 loads the save block for record a1 via sub_205EC14, waits for the busy flag, verifies with sub_205ECA4, marks the slot dirty and calls sub_214D0A8 when needed, returns sub_20AC2FC(a2,a3,32) [REVIEW]
sub_2114260
export/plan0/arm9_main/sub_2114260_02114260.c
- docs/function_notes.md:821 thin wrapper: calls off_2114278 with the record's index byte and mode 0 (set flag)
- docs/function_notes/NEEDS_REVIEW.md:1108 thin wrapper: calls off_2114278 with the record's index byte and mode 0 (set/clear flag bit, see sub_20608xx family) [REVIEW]
- docs/function_notes/hk_27.md:54 thin wrapper: calls off_2114278 with the record's index byte and mode 0 (set/clear flag bit, see sub_20608xx family) [REVIEW]
sub_211427C
export/plan0/arm9_main/sub_211427C_0211427C.c
- docs/function_notes.md:822 thin wrapper: calls off_2114294 with the record's index byte and mode 1 (clear flag)
- docs/function_notes/NEEDS_REVIEW.md:1109 thin wrapper: calls off_2114294 with the record's index byte and mode 1 (the counterpart of sub_2114260) [REVIEW]
- docs/function_notes/hk_27.md:55 thin wrapper: calls off_2114294 with the record's index byte and mode 1 (the counterpart of sub_2114260) [REVIEW]
sub_2114298
export/plan0/arm9_main/sub_2114298_02114298.c
- docs/function_notes.md:823 copies the 20-byte name of friend record a1 (index table off_21142D0 through sub_20608FC) into a2 via sub_214D168 and sub_214CFFC
- docs/function_notes/NEEDS_REVIEW.md:1110 copies the 20-byte name of friend/record index a1 (table off_21142D0) into a2 via sub_20608FC, then sets up a buffer with sub_214D168 and converts/draws it with sub_214CFFC [REVIEW]
- docs/function_notes/hk_27.md:56 copies the 20-byte name of friend/record index a1 (table off_21142D0) into a2 via sub_20608FC, then sets up a buffer with sub_214D168 and converts/draws it with sub_214CFFC [REVIEW]
sub_21142D4
export/plan0/arm9_main/sub_21142D4_021142D4.c
- docs/function_notes.md:824 thin wrapper: calls off_21142EC with the record index byte to unpack the record's packed data
- docs/function_notes/NEEDS_REVIEW.md:1111 thin wrapper: calls off_21142EC with the record index byte to unpack the record's packed date into a2 [REVIEW]
- docs/function_notes/hk_27.md:57 thin wrapper: calls off_21142EC with the record index byte to unpack the record's packed date into a2 [REVIEW]
sub_21142F0
export/plan0/arm9_main/sub_21142F0_021142F0.c
- docs/function_notes/hk_27.md:58 thin getter: returns off_2114308(record index byte), a friend-record counter field (see sub_20609C4)
sub_211430C
export/plan0/arm9_main/sub_211430C_0211430C.c
- docs/function_notes/hk_27.md:59 thin getter: returns off_2114324(record index byte), a friend-record counter field (see sub_2060A2C)
sub_2114328
export/plan0/arm9_main/sub_2114328_02114328.c
- docs/function_notes/hk_27.md:60 thin getter: returns off_2114340(record index byte), a friend-record counter field (see sub_2060A94)
sub_2114344
export/plan0/arm9_main/sub_2114344_02114344.c
- docs/function_notes/hk_27.md:61 thin getter: returns off_211435C(record index byte), a friend-record counter field (see sub_20609F8)
sub_2114360
export/plan0/arm9_main/sub_2114360_02114360.c
- docs/function_notes/hk_27.md:62 thin getter: returns off_2114378(record index byte), a friend-record counter field (see sub_2060A60)
sub_211437C
export/plan0/arm9_main/sub_211437C_0211437C.c
- docs/function_notes/hk_27.md:63 thin getter: returns off_2114394(record index byte), the friend-record first counter field (see sub_2060AC8)
sub_2114398
export/plan0/arm9_main/sub_2114398_02114398.c
- docs/function_notes/hk_27.md:64 thin getter: returns off_21143B0(record index byte), the record flag bit 3 (see sub_2060AFC)
sub_21143B4
export/plan0/arm9_main/sub_21143B4_021143B4.c
- docs/function_notes.md:825 returns the number of valid friend records: uses the cached count at *off_21143F0 when set, otherwise counts entries 0..59 with sub_2060B34
- docs/function_notes/NEEDS_REVIEW.md:1112 returns the number of valid friend records: uses the cached count at *off_21143F0 or loops over 60 records with sub_2060B34 [REVIEW]
- docs/function_notes/hk_27.md:65 returns the number of valid friend records: uses the cached count at *off_21143F0 or loops over 60 records with sub_2060B34 [REVIEW]
sub_21143F4
export/plan0/arm9_main/sub_21143F4_021143F4.c
- docs/function_notes.md:826 rebuilds the friend index list at off_21144B0: counts valid records (sub_2060B34) and flagged ones (sub_2060AFC), stores the indices and returns the count
- docs/function_notes/NEEDS_REVIEW.md:1113 rebuilds the friend index list at off_21144B0: counts valid and flagged records, stores flagged indices first, then sorts both halves via sub_2114504; returns the count [REVIEW]
- docs/function_notes/hk_27.md:66 rebuilds the friend index list at off_21144B0: counts valid and flagged records, stores flagged indices first, then sorts both halves via sub_2114504; returns the count [REVIEW]
sub_21144B4
export/plan0/arm9_main/sub_21144B4_021144B4.c
- docs/function_notes/hk_27.md:67 clears the global pointer off_21144BC to NULL and returns the old value (teardown)
sub_21144C0
export/plan0/arm9_main/sub_21144C0_021144C0.c
- docs/function_notes.md:827 allocates a 16-byte object and a 120-byte sub-object via sub_2036BEC into off_21144FC; stores sub_205EDA0 and sub_204799C results into them
- docs/function_notes/NEEDS_REVIEW.md:1114 allocates a 16-byte object and a 120-byte sub-object via sub_2036BEC into off_21144FC, sets +8 via sub_205EDA0 and +12 via sub_204799C on emblem resource off_2114500 [REVIEW]
- docs/function_notes/hk_27.md:68 allocates a 16-byte object and a 120-byte sub-object via sub_2036BEC into off_21144FC, sets +8 via sub_205EDA0 and +12 via sub_204799C on emblem resource off_2114500 [REVIEW]
sub_2114504
export/plan0/arm9_main/sub_2114504_02114504.c
- docs/function_notes.md:828 selection-style sort over the index list in off_2114580 for the range [a1, a1+a2): repeatedly picks the largest key (sub_2114584) and swaps it to the front
- docs/function_notes/NEEDS_REVIEW.md:1115 selection-style sort over the index list in off_2114580 for range [a1,a1+a2): repeatedly picks the entry with largest sub_2114584 key and swaps it into place [REVIEW]
- docs/function_notes/hk_27.md:69 selection-style sort over the index list in off_2114580 for range [a1,a1+a2): repeatedly picks the entry with largest sub_2114584 key and swaps it into place [REVIEW]
sub_2114584
export/plan0/arm9_main/sub_2114584_02114584.c
- docs/function_notes.md:835 sort key of a friend record: reads its packed date via sub_21142D4 and returns v[2] + v[0]dword_21145B0 + 32v[1]
- docs/function_notes/NEEDS_REVIEW.md:1116 sort key of a friend record: reads its packed date via sub_21142D4 and returns v[2]+v[0]dword_21145B0+32v[1] [REVIEW]
- docs/function_notes/hk_27.md:70 sort key of a friend record: reads its packed date via sub_21142D4 and returns v[2]+v[0]dword_21145B0+32v[1] [REVIEW]
sub_21145B4
export/plan0/arm9_main/sub_21145B4_021145B4.c
- docs/function_notes/hk_27.md:71 thin wrapper: copies 5 words from table off_21145D8 into a local array and calls sub_2111494 (same as sub_2111AB4)
sub_21145DC
export/plan0/arm9_main/sub_21145DC_021145DC.c
- docs/function_notes.md:836 display-control helper: masked OR of ((reg & mask) >> 8 | 9) << 8 into the register at off_21145F8; returns the value
- docs/function_notes/NEEDS_REVIEW.md:1117 display-control helper: masked OR of a shifted value (base 9) into the register at off_21145F8 [REVIEW]
- docs/function_notes/hk_27.md:72 display-control helper: masked OR of a shifted value (base 9) into the register at off_21145F8 [REVIEW]
sub_2114604
export/plan0/arm9_main/sub_2114604_02114604.c
- docs/function_notes.md:896 computes masked offset values from struct off_2114650 (+96..+112) and stores them into three registers
- docs/function_notes/NEEDS_REVIEW.md:1118 computes masked offset values from struct off_2114650 (+96..+112) into three registers (off_211465C/off_2114660/off_2114664), then calls sub_2111428 [REVIEW]
- docs/function_notes/hk_27.md:73 computes masked offset values from struct off_2114650 (+96..+112) into three registers (off_211465C/off_2114660/off_2114664), then calls sub_2111428 [REVIEW]
sub_2114668
export/plan0/arm9_main/sub_2114668_02114668.c
- docs/function_notes.md:837 per-frame sub-state dispatcher on object off_2114750: copies the next state (+88) to the state (+84), then calls one of 13 sub-screen update functions (sub_21156BC for state 0, ...)
- docs/function_notes/NEEDS_REVIEW.md:1119 per-frame sub-state dispatcher on object off_2114750 (state at +84, next at +88): calls one of 13 sub-screen update functions (sub_21156BC..sub_2114754), then sub_2116624 and two sub_2124C30 draws [REVIEW]
- docs/function_notes/hk_27.md:74 per-frame sub-state dispatcher on object off_2114750 (state at +84, next at +88): calls one of 13 sub-screen update functions (sub_21156BC..sub_2114754), then sub_2116624 and two sub_2124C30 draws [REVIEW]
sub_2114754
export/plan0/arm9_main/sub_2114754_02114754.c
- docs/function_notes.md:897 animation step on object off_2114870 (counter +92): writes sub_20AE4C0 values into the map slots and +112
- docs/function_notes/NEEDS_REVIEW.md:1120 animation step on object off_2114870 (counter +92): writes computed values to map slots, stores a value at +112, at counter>=10 calls sub_2111488(+160) [REVIEW]
- docs/function_notes/hk_27.md:75 animation step on object off_2114870 (counter +92): writes computed values to map slots, stores a value at +112, at counter>=10 calls sub_2111488(+160) [REVIEW]
sub_211489C
export/plan0/arm9_main/sub_211489C_0211489C.c
- docs/function_notes.md:898 animation step on object off_2114AA4 (counter +92): redraws a set of map slots when flag +132 is set, stores computed values
- docs/function_notes/NEEDS_REVIEW.md:1121 animation step on object off_2114AA4: if flag +132 set redraws a set of map slots, stores +112, at counter>10 and sub_2128294() calls sub_2115E0C [REVIEW]
- docs/function_notes/hk_27.md:76 animation step on object off_2114AA4: if flag +132 set redraws a set of map slots, stores +112, at counter>10 and sub_2128294() calls sub_2115E0C [REVIEW]
sub_2114AD8
export/plan0/arm9_main/sub_2114AD8_02114AD8.c
- docs/function_notes.md:838 state step on object off_2114C3C: bumps the counter at +92, computes a value with sub_20AE4C0, redraws the slots when the friend count (sub_21143B4) and flag +132 allow
- docs/function_notes/NEEDS_REVIEW.md:1122 state step on object off_2114C3C: animation counter, redraws slots when friend count and flag allow, counts down +118 and switches state to 3 via sub_2111488 at 0 or calls sub_2115CA0 [REVIEW]
- docs/function_notes/hk_27.md:77 state step on object off_2114C3C: animation counter, redraws slots when friend count and flag allow, counts down +118 and switches state to 3 via sub_2111488 at 0 or calls sub_2115CA0 [REVIEW]
sub_2114C48
export/plan0/arm9_main/sub_2114C48_02114C48.c
- docs/function_notes.md:899 if sub_2125F54() is set toggles the flag at +132, calling sub_2114174 to clear the selected record unless sub_2125F60 is set
- docs/function_notes/NEEDS_REVIEW.md:1123 if sub_2125F54() then toggles the flag at +132 (calling sub_2114174 to clear the selected record) and calls sub_2115CC4 [REVIEW]
- docs/function_notes/hk_27.md:78 if sub_2125F54() then toggles the flag at +132 (calling sub_2114174 to clear the selected record) and calls sub_2115CC4 [REVIEW]
sub_2114C98
export/plan0/arm9_main/sub_2114C98_02114C98.c
- docs/function_notes/hk_27.md:79 if sub_2125FA4() returns nonzero, calls sub_2115CEC (thin wrapper)
sub_2114CB0
export/plan0/arm9_main/sub_2114CB0_02114CB0.c
- docs/function_notes.md:900 animation step on object off_2114DD0 (counter +92): writes computed values into the map slots and +112
- docs/function_notes/NEEDS_REVIEW.md:1124 animation step on object off_2114DD0 (counter +92): writes computed values to map slots, stores +112, at counter>10 and sub_2128274() calls sub_2115D08 (BMG message) [REVIEW]
- docs/function_notes/hk_27.md:80 animation step on object off_2114DD0 (counter +92): writes computed values to map slots, stores +112, at counter>10 and sub_2128274() calls sub_2115D08 (BMG message) [REVIEW]
sub_2114DFC
export/plan0/arm9_main/sub_2114DFC_02114DFC.c
- docs/function_notes.md:901 animation step on object off_2114FD4: base value (0, -256 or the table value) chosen by +120 after sub_2116084; writes the map slots
- docs/function_notes/NEEDS_REVIEW.md:1125 animation step on object off_2114FD4 (base value chosen by flag +120), writes map slots, at counter>=10 calls sub_2115E0C [REVIEW]
- docs/function_notes/hk_27.md:81 animation step on object off_2114FD4 (base value chosen by flag +120), writes map slots, at counter>=10 calls sub_2115E0C [REVIEW]
sub_2115000
export/plan0/arm9_main/sub_2115000_02115000.c
- docs/function_notes.md:902 same as sub_2114DFC on object off_21151D8 with its own table value
- docs/function_notes/NEEDS_REVIEW.md:1126 animation step on object off_21151D8, same pattern as sub_2114DFC (base value from +120); at counter>=10 calls sub_2115DC0 [REVIEW]
- docs/function_notes/hk_27.md:82 animation step on object off_21151D8, same pattern as sub_2114DFC (base value from +120); at counter>=10 calls sub_2115DC0 [REVIEW]
sub_2115204
export/plan0/arm9_main/sub_2115204_02115204.c
- docs/function_notes.md:919 menu/selection input handler for screen off_2115514: calls sub_2116084, sub_2115FD4 and sub_2116870 for hit-testing and the selection
- docs/function_notes/NEEDS_REVIEW.md:1127 menu/selection input handler for screen off_2115514: hit-tests cells with sub_201EA84, dispatches to sub_211606C/sub_2115C8C/sub_2115DF8/sub_2116174/sub_21161D0/sub_2116844 and plays sounds via sub_212ECC0 [REVIEW]
- docs/function_notes/hk_27.md:83 menu/selection input handler for screen off_2115514: hit-tests cells with sub_201EA84, dispatches to sub_211606C/sub_2115C8C/sub_2115DF8/sub_2116174/sub_21161D0/sub_2116844 and plays sounds via sub_212ECC0 [REVIEW]
sub_211553C
export/plan0/arm9_main/sub_211553C_0211553C.c
- docs/function_notes.md:903 animation step on object off_2115660 (counter +92): writes computed values to the map slots
- docs/function_notes/NEEDS_REVIEW.md:1128 animation step on object off_2115660 (counter +92): writes computed values to map slots, stores +112, at counter>=10 and sub_2128294() calls sub_2115E0C [REVIEW]
- docs/function_notes/hk_27.md:84 animation step on object off_2115660 (counter +92): writes computed values to map slots, stores +112, at counter>=10 and sub_2128294() calls sub_2115E0C [REVIEW]
sub_211568C
export/plan0/arm9_main/sub_211568C_0211568C.c
- docs/function_notes/hk_27.md:85 if sub_2125F88() is nonzero calls sub_2115E20 (thin wrapper)
sub_21156A4
export/plan0/arm9_main/sub_21156A4_021156A4.c
- docs/function_notes/hk_27.md:86 if sub_2125F54() is nonzero calls sub_2115E44 (thin wrapper)
sub_21156BC
export/plan0/arm9_main/sub_21156BC_021156BC.c
- docs/function_notes/hk_27.md:87 if sub_2125FA4() is nonzero calls sub_2115E60 (thin wrapper)
sub_21156D4
export/plan0/arm9_main/sub_21156D4_021156D4.c
- docs/function_notes.md:839 teardown of screen object off_2115718: resets the two display registers from +118 and +116 (sub_21113FC, sub_21113F0), clears the global, masks the display control register, returns it
- docs/function_notes/NEEDS_REVIEW.md:1129 teardown of screen object off_2115718: resets two display registers from fields +116/+118, clears the global, masks display control bits [REVIEW]
- docs/function_notes/hk_27.md:88 teardown of screen object off_2115718: resets two display registers from fields +116/+118, clears the global, masks display control bits [REVIEW]
sub_2115728
export/plan0/arm9_main/sub_2115728_02115728.c
- docs/function_notes.md:904 constructor for a 164-byte 2D screen object (global off_2115B20): sets the display registers and allocates the object with sub_2036BEC
- docs/function_notes/NEEDS_REVIEW.md:1130 constructor for a 164-byte 2D screen object (global off_2115B20): sets display regs, lays out rows with sub_21243AC/sub_212426C text draws and sub_20B3F7C BMG lookups, sets state 3 [REVIEW]
- docs/function_notes/hk_27.md:89 constructor for a 164-byte 2D screen object (global off_2115B20): sets display regs, lays out rows with sub_21243AC/sub_212426C text draws and sub_20B3F7C BMG lookups, sets state 3 [REVIEW]
sub_2115C8C
export/plan0/arm9_main/sub_2115C8C_02115C8C.c
- docs/function_notes/hk_27.md:90 sets state (+88)=12 on object off_2115C9C and resets its counter (thin state setter)
sub_2115CA0
export/plan0/arm9_main/sub_2115CA0_02115CA0.c
- docs/function_notes.md:906 sets state +88 = 11 on object off_2115CC0, resets the counter (+92), calls sub_2128374 and then sub_2116244
- docs/function_notes/NEEDS_REVIEW.md:1131 sets state (+88)=11 on object off_2115CC0, resets counter, calls sub_2128374 then sub_2116244 [REVIEW]
- docs/function_notes/hk_27.md:91 sets state (+88)=11 on object off_2115CC0, resets counter, calls sub_2128374 then sub_2116244 [REVIEW]
sub_2115CC4
export/plan0/arm9_main/sub_2115CC4_02115CC4.c
- docs/function_notes.md:907 sets state +88 = 10 on object off_2115CE8, resets the counter, calls sub_2125FC0 and then sub_2125ED0(0, 5)
- docs/function_notes/NEEDS_REVIEW.md:1132 sets state (+88)=10 on object off_2115CE8, resets counter, calls sub_2125FC0 then sub_2125ED0(0,5) [REVIEW]
- docs/function_notes/hk_27.md:92 sets state (+88)=10 on object off_2115CE8, resets counter, calls sub_2125FC0 then sub_2125ED0(0,5) [REVIEW]
sub_2115CEC
export/plan0/arm9_main/sub_2115CEC_02115CEC.c
- docs/function_notes/hk_27.md:93 sets state (+88)=9 on object off_2115D00, resets counter, tail-calls function pointer off_2115D04 (thin wrapper)
sub_2115D08
export/plan0/arm9_main/sub_2115D08_02115D08.c
- docs/function_notes.md:908 sets state +88 = 8 on object off_2115D88, resets the counter, fetches the selected record name via sub_2116870 and sub_2114298
- docs/function_notes/NEEDS_REVIEW.md:1133 state (+88)=8 on object off_2115D88: fetches the selected record name via sub_2114298, looks up BMG messages with sub_20B3F7C, formats via sub_212513C and shows a message box via sub_2125FD4 [REVIEW]
- docs/function_notes/hk_27.md:94 state (+88)=8 on object off_2115D88: fetches the selected record name via sub_2114298, looks up BMG messages with sub_20B3F7C, formats via sub_212513C and shows a message box via sub_2125FD4 [REVIEW]
sub_2115D90
export/plan0/arm9_main/sub_2115D90_02115D90.c
- docs/function_notes.md:920 sets state +88 = 7 on object off_2115DB8, resets the counter (+92), calls sub_21282C8 and plays sound 5 via sub_212ECC0
- docs/function_notes/NEEDS_REVIEW.md:1134 sets state (+88)=7 on object off_2115DB8, resets counter, calls sub_21282C8 and plays sound 5 via sub_212ECC0 [REVIEW]
- docs/function_notes/hk_27.md:95 sets state (+88)=7 on object off_2115DB8, resets counter, calls sub_21282C8 and plays sound 5 via sub_212ECC0 [REVIEW]
sub_2115DC0
export/plan0/arm9_main/sub_2115DC0_02115DC0.c
- docs/function_notes.md:921 sets state +88 = 6 on object off_2115DF4, resets the counter, and picks a value from +120 (1 or the default)
- docs/function_notes/NEEDS_REVIEW.md:1135 sets state (+88)=6 on object off_2115DF4, resets counter, picks a value via sub_211621C/sub_2116230 from +120 and calls sub_2116244 [REVIEW]
- docs/function_notes/hk_27.md:96 sets state (+88)=6 on object off_2115DF4, resets counter, picks a value via sub_211621C/sub_2116230 from +120 and calls sub_2116244 [REVIEW]
sub_2115DF8
export/plan0/arm9_main/sub_2115DF8_02115DF8.c
- docs/function_notes/hk_27.md:97 sets state (+88)=5 on object off_2115E08 and resets its counter (thin state setter)
sub_2115E0C
export/plan0/arm9_main/sub_2115E0C_02115E0C.c
- docs/function_notes/hk_27.md:98 sets state (+88)=4 on object off_2115E1C and resets its counter (thin state setter)
sub_2115E20
export/plan0/arm9_main/sub_2115E20_02115E20.c
- docs/function_notes.md:922 sets state +88 = 3 on object off_2115E40, resets the counter, calls sub_2128374 and then sub_2116244
- docs/function_notes/NEEDS_REVIEW.md:1136 sets state (+88)=3 on object off_2115E40, resets counter, calls sub_2128374 then sub_2116244 [REVIEW]
- docs/function_notes/hk_27.md:99 sets state (+88)=3 on object off_2115E40, resets counter, calls sub_2128374 then sub_2116244 [REVIEW]
sub_2115E44
export/plan0/arm9_main/sub_2115E44_02115E44.c
- docs/function_notes/hk_27.md:100 sets state (+88)=2 on object off_2115E58, resets counter, tail-calls function pointer off_2115E5C (thin wrapper)
sub_2115E60
export/plan0/arm9_main/sub_2115E60_02115E60.c
- docs/function_notes/hk_27.md:101 sets state (+88)=1 on object off_2115E70 and resets its counter (thin state setter)
sub_2115E74
export/plan0/arm9_main/sub_2115E74_02115E74.c
- docs/function_notes.md:840 setup of screen object off_2115FA4: state +88 = 0, counter +92 = 0, pending counter +112 = -192, fills the map cells from dword_2115FA8
- docs/function_notes/NEEDS_REVIEW.md:1137 setup of screen object off_2115FA4: state 0, counter 0, pending counter +112=-192, fills map slots with dword_2115FA8, calls sub_21162CC and BMG text draw sub_2126138 [REVIEW]
- docs/function_notes/hk_27.md:102 setup of screen object off_2115FA4: state 0, counter 0, pending counter +112=-192, fills map slots with dword_2115FA8, calls sub_21162CC and BMG text draw sub_2126138 [REVIEW]
sub_2115FD4
export/plan0/arm9_main/sub_2115FD4_02115FD4.c
- docs/function_notes.md:923 per-frame step on object off_2116068: while sub_211606C passes and the pending counter (+124) is nonzero, sets +128 from +116 for state 7 and calls sub_21162CC
- docs/function_notes/NEEDS_REVIEW.md:1138 per-frame step on object off_2116068: while pending counter (+124) is nonzero animates via sub_2116D10 and sub_21162CC; otherwise latches counter 7 when the selection changed [REVIEW]
- docs/function_notes/hk_27.md:103 per-frame step on object off_2116068: while pending counter (+124) is nonzero animates via sub_2116D10 and sub_21162CC; otherwise latches counter 7 when the selection changed [REVIEW]
sub_211606C
export/plan0/arm9_main/sub_211606C_0211606C.c
- docs/function_notes/hk_27.md:104 returns whether the pending counter at off_2116080 +124 is nonzero (getter)
sub_2116084
export/plan0/arm9_main/sub_2116084_02116084.c
- docs/function_notes.md:1561 per-frame step for object off_2116168: updates two per-slot counters (+144, +148) and writes the cells
- docs/function_notes/NEEDS_REVIEW.md:1139 per-frame step for object off_2116168: updates two per-slot counters (+144/+148) and writes 0/1 visibility flags into map slots, uses sub_20ADC64 and sub_21143B4 [REVIEW]
- docs/function_notes/hk_27.md:105 per-frame step for object off_2116168: updates two per-slot counters (+144/+148) and writes 0/1 visibility flags into map slots, uses sub_20ADC64 and sub_21143B4 [REVIEW]
sub_2116174
export/plan0/arm9_main/sub_2116174_02116174.c
- docs/function_notes.md:841 cursor move left on object off_21161C8 (field +116): decrements with wrap to 4, skips invalid rows (sub_2116844), uses sub_21143B4 and sub_2133068 for the modulo, plays a sound on change
- docs/function_notes/NEEDS_REVIEW.md:1140 cursor move left on object off_21161C8 (field +116): wraps to 4, validity via sub_2116844, modulo via sub_2133068, plays a sound via sub_212ECC0 on change [REVIEW]
- docs/function_notes/hk_27.md:106 cursor move left on object off_21161C8 (field +116): wraps to 4, validity via sub_2116844, modulo via sub_2133068, plays a sound via sub_212ECC0 on change [REVIEW]
sub_21161D0
export/plan0/arm9_main/sub_21161D0_021161D0.c
- docs/function_notes.md:842 cursor move right on object off_2116214 (field +116): increments with the validity check and wraps to 0 at 5 or invalid rows; plays the sound from off_2116218 on change
- docs/function_notes/NEEDS_REVIEW.md:1141 cursor move right on object off_2116214 (field +116): increments with validity check and wrap to 0, plays a sound on change [REVIEW]
- docs/function_notes/hk_27.md:107 cursor move right on object off_2116214 (field +116): increments with validity check and wrap to 0, plays a sound on change [REVIEW]
sub_211621C
export/plan0/arm9_main/sub_211621C_0211621C.c
- docs/function_notes/hk_27.md:108 decrements the 16-bit scroll field (+118) of object off_211622C and returns it
sub_2116230
export/plan0/arm9_main/sub_2116230_02116230.c
- docs/function_notes/hk_27.md:109 increments the 16-bit scroll field (+118) of object off_2116240 and returns it
sub_2116244
export/plan0/arm9_main/sub_2116244_02116244.c
- docs/function_notes.md:1553 redraws the 5-row list view for object off_21162C8 from the record names
- docs/function_notes/NEEDS_REVIEW.md:1142 redraws the 5-row list view for object off_21162C8: draws names via sub_2114298/sub_212426C, clamps scroll via sub_2133068, then calls sub_21162CC [REVIEW]
- docs/function_notes/hk_27.md:110 redraws the 5-row list view for object off_21162C8: draws names via sub_2114298/sub_212426C, clamps scroll via sub_2133068, then calls sub_21162CC [REVIEW]
sub_21162CC
export/plan0/arm9_main/sub_21162CC_021162CC.c
- docs/function_notes.md:924 detail/info panel renderer for object off_2116610: same layout as sub_2113A3C (draws the selected record name and fields)
- docs/function_notes/NEEDS_REVIEW.md:1143 detail/info panel renderer for object off_2116610 (same layout as sub_2113A3C): draws selected name, stats, date and icon rows [REVIEW]
- docs/function_notes/hk_27.md:111 detail/info panel renderer for object off_2116610 (same layout as sub_2113A3C): draws selected name, stats, date and icon rows [REVIEW]
sub_2116624
export/plan0/arm9_main/sub_2116624_02116624.c
- docs/function_notes.md:925 refreshes the 5-row list highlight state on object off_2116824: clears row cells and sets the highlight from sub_2116870
- docs/function_notes/NEEDS_REVIEW.md:1144 refreshes the 5-row list highlight state on object off_2116824: clears row cells, then for valid rows sets highlight cells and flags from sub_2114398 via sub_2124100 [REVIEW]
- docs/function_notes/hk_27.md:112 refreshes the 5-row list highlight state on object off_2116824: clears row cells, then for valid rows sets highlight cells and flags from sub_2114398 via sub_2124100 [REVIEW]
sub_2116844
export/plan0/arm9_main/sub_2116844_02116844.c
- docs/function_notes/hk_27.md:113 returns whether row index a1 is valid, i.e. sub_21143B4() > page base + a1 (getter)
sub_2116870
export/plan0/arm9_main/sub_2116870_02116870.c
- docs/function_notes/hk_27.md:114 returns the list page base index: 5 * the 16-bit field +118 of object off_2116884 (getter)
sub_2116888
export/plan0/arm9_main/sub_2116888_02116888.c
- docs/function_notes.md:844 builds the record-detail screen struct at off_2116A08 from about 18 sub_204799C lookups, converted with sub_20B49BC and sub_20B48B4 into the struct fields
- docs/function_notes/NEEDS_REVIEW.md:1145 constructs the record-detail screen struct at off_2116A08 from ~18 sub_204799C lookups and sub_20B4xxx converters, allocates a sub-object via sub_2036BEC, draws text rows via sub_2016468 [REVIEW]
- docs/function_notes/hk_27.md:115 constructs the record-detail screen struct at off_2116A08 from ~18 sub_204799C lookups and sub_20B4xxx converters, allocates a sub-object via sub_2036BEC, draws text rows via sub_2016468 [REVIEW]
sub_2116A4C
export/plan0/arm9_main/sub_2116A4C_02116A4C.c
- docs/function_notes.md:926 formats a packed 3-byte date into a text buffer with '/' or '.' separators (mode from *off_2116B4C)
- docs/function_notes/NEEDS_REVIEW.md:1146 formats a packed 3-byte date into a text buffer with '/' or '.' separators (chosen by mode at off_2116B4C) using sub_2116B50 for digits [REVIEW]
- docs/function_notes/hk_27.md:116 formats a packed 3-byte date into a text buffer with '/' or '.' separators (chosen by mode at off_2116B4C) using sub_2116B50 for digits [REVIEW]
sub_2116B50
export/plan0/arm9_main/sub_2116B50_02116B50.c
- docs/function_notes.md:927 writes the number a1 as glyphs into a text buffer: values of 10 or more go to sub_2124FAC; below 10 a leading zero glyph is written first
- docs/function_notes/NEEDS_REVIEW.md:1147 writes a number a1 as glyph(s) into a text buffer: for values below 10 writes a leading zero glyph and the digit at +2, otherwise a single glyph via sub_2124FAC [REVIEW]
- docs/function_notes/hk_27.md:117 writes a number a1 as glyph(s) into a text buffer: for values below 10 writes a leading zero glyph and the digit at +2, otherwise a single glyph via sub_2124FAC [REVIEW]
sub_2116B80
export/plan0/arm9_main/sub_2116B80_02116B80.c
- docs/function_notes.md:928 thin wrapper: returns off_2116B88(a1, a2, 1)
- docs/function_notes/NEEDS_REVIEW.md:1148 thin wrapper: returns off_2116B88(a1, a2, 1) [REVIEW]
- docs/function_notes/hk_27.md:118 thin wrapper: returns off_2116B88(a1, a2, 1) [REVIEW]
sub_2116CB0
export/plan0/arm9_main/sub_2116CB0_02116CB0.c
- docs/function_notes.md:929 u16 setter: writes 48 (mode 0) or dword_2116CC8 (mode 1) to *result
- docs/function_notes/NEEDS_REVIEW.md:1149 u16 setter: writes 48 (mode 0) or dword_2116CC8 (mode 1) to *result, else unchanged; returns result. Per-mode 16-bit param. [REVIEW]
- docs/function_notes/hk_28.md:3 u16 setter: writes 48 (mode 0) or dword_2116CC8 (mode 1) to *result, else unchanged; returns result. Per-mode 16-bit param. [REVIEW]
sub_2116CCC
export/plan0/arm9_main/sub_2116CCC_02116CCC.c
- docs/function_notes.md:930 same as sub_2116CB0 with the default 58 and dword_2116CE4 for mode 1
- docs/function_notes/NEEDS_REVIEW.md:1150 same as sub_2116CB0 with default 58 and dword_2116CE4 for mode 1. [REVIEW]
- docs/function_notes/hk_28.md:4 same as sub_2116CB0 with default 58 and dword_2116CE4 for mode 1. [REVIEW]
sub_2116CE8
export/plan0/arm9_main/sub_2116CE8_02116CE8.c
- docs/function_notes/hk_28.md:5 thin mode dispatcher: mode 0 calls sub_2124FAC(result,a2,0,a4), mode 1 calls sub_2124F4C(), else returns arg.
sub_2116D10
export/plan0/arm9_main/sub_2116D10_02116D10.c
- docs/function_notes/hk_28.md:6 table lookup: returns int16 at off_2116D20[7*a2 + a1] (7-entry rows indexed by a2).
sub_2116D24
export/plan0/arm9_main/sub_2116D24_02116D24.c
- docs/function_notes.md:931 per-frame animation tick: the counter at +40 advances the frame index (+36) every 4 ticks, wrapping at 3
- docs/function_notes/NEEDS_REVIEW.md:1151 per-frame anim tick: counter +40 every 4 ticks advances frame index (+36, wraps at 3); sub_2124748 then sub_2016468 copies a 32-byte tile. [REVIEW]
- docs/function_notes/hk_28.md:7 per-frame anim tick: counter +40 every 4 ticks advances frame index (+36, wraps at 3); sub_2124748 then sub_2016468 copies a 32-byte tile. [REVIEW]
sub_2116DC8
export/plan0/arm9_main/sub_2116DC8_02116DC8.c
- docs/function_notes/hk_28.md:8 clears dword at off_2116DD0 and returns that pointer. Reset stub.
sub_2116DD4
export/plan0/arm9_main/sub_2116DD4_02116DD4.c
- docs/function_notes.md:932 allocates a 44-byte object into *off_2116E5C and fills its three sub-objects from sub_204799C lookups via sub_20B48B4 and sub_20B49BC
- docs/function_notes/NEEDS_REVIEW.md:1152 allocates 44-byte object into *off_2116E5C, fills three sub-objects from sub_204799C lookups, stores args at +16..+32, state +36=2. Constructor. [REVIEW]
- docs/function_notes/hk_28.md:9 allocates 44-byte object into *off_2116E5C, fills three sub-objects from sub_204799C lookups, stores args at +16..+32, state +36=2. Constructor. [REVIEW]
sub_2116E70
export/plan0/arm9_main/sub_2116E70_02116E70.c
- docs/function_notes.md:933 loads three values via sub_204799C lookups and sub_20B48EC / sub_20B49BC into local words
- docs/function_notes/NEEDS_REVIEW.md:1153 loads three values via sub_204799C lookups and sub_20B48EC / sub_20B49F4 / sub_20B4A7C into locals; returns last result. Param loader. [REVIEW]
- docs/function_notes/hk_28.md:10 loads three values via sub_204799C lookups and sub_20B48EC / sub_20B49F4 / sub_20B4A7C into locals; returns last result. Param loader. [REVIEW]
sub_2116EC0
export/plan0/arm9_main/sub_2116EC0_02116EC0.c
- docs/function_notes.md:843 loops 8 slots: sub_20296D4 gives an index, sub_20294E8 sets the slot to table off_2116EF4[index], sub_20294AC(slot, 1) sets its flag
- docs/function_notes/NEEDS_REVIEW.md:1154 loop over 8 slots: sub_20296D4 index, sub_20294E8 sets value from table off_2116EF4, sub_20294AC(i,1) sets flag. Initialises 8 entries. [REVIEW]
- docs/function_notes/hk_28.md:11 loop over 8 slots: sub_20296D4 index, sub_20294E8 sets value from table off_2116EF4, sub_20294AC(i,1) sets flag. Initialises 8 entries. [REVIEW]
sub_2116EF8
export/plan0/arm9_main/sub_2116EF8_02116EF8.c
- docs/function_notes.md:934 race-setup helper: popcount (sub_202056C) of a per-player byte, with the count compared to 8 and the slot result stored
- docs/function_notes/NEEDS_REVIEW.md:1155 race-setup helper: popcount count (sub_202056C) of a per-player byte, fills first count slots (sub_203BE88, sub_203BC64), clears the rest to -1. [REVIEW]
- docs/function_notes/hk_28.md:12 race-setup helper: popcount count (sub_202056C) of a per-player byte, fills first count slots (sub_203BE88, sub_203BC64), clears the rest to -1. [REVIEW]
sub_2116FB0
export/plan0/arm9_main/sub_2116FB0_02116FB0.c
- docs/function_notes.md:935 variant of sub_2116EF8 using sub_203BEA4 and sub_203BA84 and sub_20294FC
- docs/function_notes/NEEDS_REVIEW.md:1156 variant of sub_2116EF8 using sub_203BEA4 / sub_203BA84 and sub_20294FC for the slot fill and clear. [REVIEW]
- docs/function_notes/hk_28.md:13 variant of sub_2116EF8 using sub_203BEA4 / sub_203BA84 and sub_20294FC for the slot fill and clear. [REVIEW]
sub_2117060
export/plan0/arm9_main/sub_2117060_02117060.c
- docs/function_notes.md:936 sub_203BEC0 init, then a popcount count as in sub_2116EF8 and the fill of 8 slots
- docs/function_notes/NEEDS_REVIEW.md:1157 sub_203BEC0 init, popcount count as in sub_2116EF8, fills 8 slots with sub_203BEA4, clears slots from count upward. [REVIEW]
- docs/function_notes/hk_28.md:14 sub_203BEC0 init, popcount count as in sub_2116EF8, fills 8 slots with sub_203BEA4, clears slots from count upward. [REVIEW]
sub_21170F8
export/plan0/arm9_main/sub_21170F8_021170F8.c
- docs/function_notes.md:937 sub_203BEC0 init, popcount count as above, then clears the slots from the count onward
- docs/function_notes/NEEDS_REVIEW.md:1158 sub_203BEC0 init, popcount count as above, then clears slots from count to 7 with sub_20294FC(-1) and sub_20294AC(,0). [REVIEW]
- docs/function_notes/hk_28.md:15 sub_203BEC0 init, popcount count as above, then clears slots from count to 7 with sub_20294FC(-1) and sub_20294AC(,0). [REVIEW]
sub_2117170
export/plan0/arm9_main/sub_2117170_02117170.c
- docs/function_notes/hk_28.md:16 clears pointer global at off_2117178 and returns it. Reset stub.
sub_211717C
export/plan0/arm9_main/sub_211717C_0211717C.c
- docs/function_notes.md:938 allocates a 4-byte object into *off_211719C and stores the result of sub_203BEDC in it
- docs/function_notes/NEEDS_REVIEW.md:1159 allocates 4-byte object into *off_211719C (sub_2036BEC), calls sub_203BEDC(a1) and stores result in it. Constructor. [REVIEW]
- docs/function_notes/hk_28.md:17 allocates 4-byte object into *off_211719C (sub_2036BEC), calls sub_203BEDC(a1) and stores result in it. Constructor. [REVIEW]
sub_21171A0
export/plan0/arm9_main/sub_21171A0_021171A0.c
- docs/function_notes.md:1030 per-index draw helper: picks the block value (14 for a6 = 0, 30 for a6 = 1, else 18) and calls sub_2124748 with the table parameters
- docs/function_notes/NEEDS_REVIEW.md:1160 per-index draw helper: picks block 18/30/14 from a6, sub_2124748 with table params, then sub_2016468 copies a 32-byte tile. [REVIEW]
- docs/function_notes/hk_28.md:18 per-index draw helper: picks block 18/30/14 from a6, sub_2124748 with table params, then sub_2016468 copies a 32-byte tile. [REVIEW]
sub_2117218
export/plan0/arm9_main/sub_2117218_02117218.c
- docs/function_notes/hk_28.md:19 clears global pointer at off_2117220 and returns it. Reset stub.
sub_2117224
export/plan0/arm9_main/sub_2117224_02117224.c
- docs/function_notes.md:939 allocates a 24-byte object into *off_2117294 and fills its two sub-objects from sub_204799C lookups via sub_20B49BC and sub_20B48B4
- docs/function_notes/NEEDS_REVIEW.md:1161 allocates 24-byte object into *off_2117294, sets sub-objects via sub_20B49BC, sub_20B48B4 and three sub_20B4A44 entries. Constructor. [REVIEW]
- docs/function_notes/hk_28.md:20 allocates 24-byte object into *off_2117294, sets sub-objects via sub_20B49BC, sub_20B48B4 and three sub_20B4A44 entries. Constructor. [REVIEW]
sub_21172A8
export/plan0/arm9_main/sub_21172A8_021172A8.c
- docs/function_notes.md:940 same as sub_2117224 for the object at off_2117318
- docs/function_notes/NEEDS_REVIEW.md:1162 same as sub_2117224 but writes the off_2117318 object. Duplicate constructor. [REVIEW]
- docs/function_notes/hk_28.md:21 same as sub_2117224 but writes the off_2117318 object. Duplicate constructor. [REVIEW]
sub_211732C
export/plan0/arm9_main/sub_211732C_0211732C.c
- docs/function_notes.md:941 loads three values via sub_20B496C, sub_20B48EC and a 3-entry loop from sub_204799C lookups
- docs/function_notes/NEEDS_REVIEW.md:1163 loads three values via sub_20B496C, sub_20B48EC and a 3-entry loop of sub_20B4A7C; returns last result. Param loader. [REVIEW]
- docs/function_notes/hk_28.md:22 loads three values via sub_20B496C, sub_20B48EC and a 3-entry loop of sub_20B4A7C; returns last result. Param loader. [REVIEW]
sub_2117388
export/plan0/arm9_main/sub_2117388_02117388.c
- docs/function_notes.md:942 identical to sub_211732C with the off_21173D8 tables
- docs/function_notes/NEEDS_REVIEW.md:1164 identical to sub_211732C with the off_21173D8 tables. Duplicate param loader. [REVIEW]
- docs/function_notes/hk_28.md:23 identical to sub_211732C with the off_21173D8 tables. Duplicate param loader. [REVIEW]
sub_21173E4
export/plan0/arm9_main/sub_21173E4_021173E4.c
- docs/function_notes.md:943 masks two words: off_211740C = (-65536 * (object +64)) & dword_2117408, then clears bits of off_2117410 with dword_2117414
- docs/function_notes/NEEDS_REVIEW.md:1165 masks two words: off_211740C = (-65536 * obj+64) & dword_2117408, then off_2117410 &= dword_2117414. Scroll/offset update. [REVIEW]
- docs/function_notes/hk_28.md:24 masks two words: off_211740C = (-65536 * obj+64) & dword_2117408, then off_2117410 &= dword_2117414. Scroll/offset update. [REVIEW]
sub_2117418
export/plan0/arm9_main/sub_2117418_02117418.c
- docs/function_notes.md:845 per-frame state machine on off_2117560: copies +52 to +48 and dispatches states 0..11 to their sub-screen handlers (sub_2117D98 for state 0, ...)
- docs/function_notes/NEEDS_REVIEW.md:1166 per-frame state machine: copies +52 to +48, dispatches states 0..11 to sub_2117D98 ... sub_211756C, redraws background, two sub_2124C30 layers. [REVIEW]
- docs/function_notes/hk_28.md:25 per-frame state machine: copies +52 to +48, dispatches states 0..11 to sub_2117D98 ... sub_211756C, redraws background, two sub_2124C30 layers. [REVIEW]
sub_211756C
export/plan0/arm9_main/sub_211756C_0211756C.c
- docs/function_notes.md:846 per-frame cell/tile map update on off_21176D8: bumps the counter at +56, writes sub_20AE4C0 offsets into the tile map (+24) and sprite positions, skipped when the screen state is 2
- docs/function_notes/NEEDS_REVIEW.md:1167 per-frame cell/tile map update: bumps counter +56, sub_20AE4C0 offsets written to tile map +24 and sprite positions +28. Cursor/highlight animation. [REVIEW]
- docs/function_notes/hk_28.md:26 per-frame cell/tile map update: bumps counter +56, sub_20AE4C0 offsets written to tile map +24 and sprite positions +28. Cursor/highlight animation. [REVIEW]
sub_2117700
export/plan0/arm9_main/sub_2117700_02117700.c
- docs/function_notes.md:847 yes/no choice handler: gated by sub_21277AC, then sub_2127794: -1 or 0 calls sub_21181B8; 1 sets the choice field +136 = 3 and runs sub_2118024
- docs/function_notes/NEEDS_REVIEW.md:1168 yes/no choice handler: sub_21277AC gate, then sub_2127794: -1/0 calls sub_21181B8; 1 sets +136=3, sub_2118024, and sub_211F378 if input flag==2. [REVIEW]
- docs/function_notes/hk_28.md:27 yes/no choice handler: sub_21277AC gate, then sub_2127794: -1/0 calls sub_21181B8; 1 sets +136=3, sub_2118024, and sub_211F378 if input flag==2. [REVIEW]
sub_211775C
export/plan0/arm9_main/sub_211775C_0211775C.c
- docs/function_notes.md:944 choice handler: when sub_2127788 (yes/no) fires calls sub_2118038; otherwise reads off_211779C
- docs/function_notes/NEEDS_REVIEW.md:1169 choice handler: if sub_2127788 (yes/no) fires, calls sub_2118038; if state==2 and choice==1 plays sound via sub_212ECC0(off_21177A0,0,15). [REVIEW]
- docs/function_notes/hk_28.md:28 choice handler: if sub_2127788 (yes/no) fires, calls sub_2118038; if state==2 and choice==1 plays sound via sub_212ECC0(off_21177A0,0,15). [REVIEW]
sub_21177A4
export/plan0/arm9_main/sub_21177A4_021177A4.c
- docs/function_notes/hk_28.md:29 if sub_21277C8 (choice screen ready) fires, calls sub_2118054 (sets choice sound ids). Thin.
sub_21177C0
export/plan0/arm9_main/sub_21177C0_021177C0.c
- docs/function_notes.md:945 choice handler: -1 calls sub_21181B8; 0 calls sub_21185EC and sets +136 = 1; the other results follow the same pattern through sub_2127794
- docs/function_notes/NEEDS_REVIEW.md:1170 choice handler: -1 -> sub_21181B8; 0 -> sub_21185EC, +136=1, sub_2118024, sub_21282C8; 1 -> sub_21181B8. [REVIEW]
- docs/function_notes/hk_28.md:30 choice handler: -1 -> sub_21181B8; 0 -> sub_21185EC, +136=1, sub_2118024, sub_21282C8; 1 -> sub_21181B8. [REVIEW]
sub_2117814
export/plan0/arm9_main/sub_2117814_02117814.c
- docs/function_notes/hk_28.md:31 if sub_2127788 fires, tail-calls sub_21180F8. Thin.
sub_2117830
export/plan0/arm9_main/sub_2117830_02117830.c
- docs/function_notes/hk_28.md:32 if sub_21277C8 fires, tail-calls sub_2118114. Thin.
sub_211784C
export/plan0/arm9_main/sub_211784C_0211784C.c
- docs/function_notes.md:848 menu step: calls sub_21184D4 and sub_2118414, bumps the counter at +56; at 10 or more runs sub_21185D4, then the sub-step functions
- docs/function_notes/NEEDS_REVIEW.md:1171 menu step: calls sub_21184D4 and sub_2118414, bumps counter +56; at >=10 runs sub_21185D4, then sub_21185EC/+136=1/sub_2118024 or sub_2118148. [REVIEW]
- docs/function_notes/hk_28.md:33 menu step: calls sub_21184D4 and sub_2118414, bumps counter +56; at >=10 runs sub_21185D4, then sub_21185EC/+136=1/sub_2118024 or sub_2118148. [REVIEW]
sub_21178B0
export/plan0/arm9_main/sub_21178B0_021178B0.c
- docs/function_notes.md:946 main menu input handler (756 bytes): touch hit test via sub_201EA84, D-pad moves and the sub-state calls sub_21184D4 and sub_2118414
- docs/function_notes/NEEDS_REVIEW.md:1172 main menu input handler (756 bytes): touch hit test (sub_201EA84), D-pad/buttons (sub_20AE408) move selection +68; plays sounds, confirm/back by +60. [REVIEW]
- docs/function_notes/hk_28.md:34 main menu input handler (756 bytes): touch hit test (sub_201EA84), D-pad/buttons (sub_20AE408) move selection +68; plays sounds, confirm/back by +60. [REVIEW]
sub_2117BE0
export/plan0/arm9_main/sub_2117BE0_02117BE0.c
- docs/function_notes/hk_28.md:35 if sub_2128294 (return button) fires, tail-calls sub_21181B8. Thin.
sub_2117BF8
export/plan0/arm9_main/sub_2117BF8_02117BF8.c
- docs/function_notes.md:849 per-frame menu grid layout update on off_2117D70, like sub_211756C: bumps the counter at +56, writes the tile map and sprite positions, skipped when state is 2
- docs/function_notes/NEEDS_REVIEW.md:1173 per-frame menu grid layout update (374 bytes), like sub_211756C; writes tile map and sprite positions; calls sub_21181CC when counter >= 10. [REVIEW]
- docs/function_notes/hk_28.md:36 per-frame menu grid layout update (374 bytes), like sub_211756C; writes tile map and sprite positions; calls sub_21181CC when counter >= 10. [REVIEW]
sub_2117D98
export/plan0/arm9_main/sub_2117D98_02117D98.c
- docs/function_notes/hk_28.md:37 if sub_2036C5C() nonzero, tail-calls sub_21181E8. Thin.
sub_2117DB0
export/plan0/arm9_main/sub_2117DB0_02117DB0.c
- docs/function_notes.md:850 screen teardown: sets register bits at off_2117E14 from the state, calls sub_211F498 when the state is 2, else sub_211DE34 and sub_211DF38
- docs/function_notes/NEEDS_REVIEW.md:1174 screen teardown: sets register bits at off_2117E14 by state, sub_211F498 or sub_211DE34/sub_211DF38/sub_211F2AC, frees +44 via sub_2036AB0. Destructor. [REVIEW]
- docs/function_notes/hk_28.md:38 screen teardown: sets register bits at off_2117E14 by state, sub_211F498 or sub_211DE34/sub_211DF38/sub_211F2AC, frees +44 via sub_2036AB0. Destructor. [REVIEW]
sub_2117E24
export/plan0/arm9_main/sub_2117E24_02117E24.c
- docs/function_notes.md:947 screen constructor (448 bytes): sets display bits, allocates a 140-byte object, and sets the display register when sub_20CCCB4 is not 24 or 12
- docs/function_notes/NEEDS_REVIEW.md:1175 screen constructor (448 bytes): sets display bits, allocates 140-byte screen object, 4 tile draws, then sub_21188DC/sub_2118624/sub_21181FC. [REVIEW]
- docs/function_notes/hk_28.md:39 screen constructor (448 bytes): sets display bits, allocates 140-byte screen object, 4 tile draws, then sub_21188DC/sub_2118624/sub_21181FC. [REVIEW]
sub_2118024
export/plan0/arm9_main/sub_2118024_02118024.c
- docs/function_notes/hk_28.md:40 sets state +52=11 and counter +56=0, returns the object. State setter.
sub_2118038
export/plan0/arm9_main/sub_2118038_02118038.c
- docs/function_notes/hk_28.md:41 sets state +52=10, counter reset, tail-calls off_2118050. State setter.
sub_2118054
export/plan0/arm9_main/sub_2118054_02118054.c
- docs/function_notes/hk_28.md:42 sets state +52=9, counter reset, then sub_212775C(0,5), (1,15), (-1,16) to set choice sound ids. State setter plus sound config.
sub_2118088
export/plan0/arm9_main/sub_2118088_02118088.c
- docs/function_notes.md:948 sets state +52 = 8 on object off_21180F0, resets the counter (+56), and takes two BMG message ids (93/95 or 2x) via sub_20B3F7C
- docs/function_notes/NEEDS_REVIEW.md:1176 sets state +52=8, counter reset, takes two BMG message ids (93/95 or 20/21 by mode) via sub_20B3F7C, shows them with sub_21277F8. [REVIEW]
- docs/function_notes/hk_28.md:43 sets state +52=8, counter reset, takes two BMG message ids (93/95 or 20/21 by mode) via sub_20B3F7C, shows them with sub_21277F8. [REVIEW]
sub_21180F8
export/plan0/arm9_main/sub_21180F8_021180F8.c
- docs/function_notes/hk_28.md:44 sets state +52=7, counter reset, tail-calls off_2118110. State setter.
sub_2118114
export/plan0/arm9_main/sub_2118114_02118114.c
- docs/function_notes/hk_28.md:45 sets state +52=6, counter reset, sub_212775C with ids 7/16/16 for choice sounds. State setter plus sound config.
sub_2118148
export/plan0/arm9_main/sub_2118148_02118148.c
- docs/function_notes.md:949 sets state +52 = 5 on object off_2118180, resets the counter, and fetches BMG messages 4 and 2 via sub_20B3F7C
- docs/function_notes/NEEDS_REVIEW.md:1177 sets state +52=5, counter reset, BMG messages 4 and 2 via sub_20B3F7C, shows a two-option dialog with sub_21277F8. [REVIEW]
- docs/function_notes/hk_28.md:46 sets state +52=5, counter reset, BMG messages 4 and 2 via sub_20B3F7C, shows a two-option dialog with sub_21277F8. [REVIEW]
sub_2118184
export/plan0/arm9_main/sub_2118184_02118184.c
- docs/function_notes/hk_28.md:47 sets state +52=4, counter reset; if u16 at off_21181B0 != 2 plays sound 5 via sub_212ECC0. State setter.
sub_21181B8
export/plan0/arm9_main/sub_21181B8_021181B8.c
- docs/function_notes/hk_28.md:48 sets state +52=3, counter reset, returns object. State setter.
sub_21181CC
export/plan0/arm9_main/sub_21181CC_021181CC.c
- docs/function_notes/hk_28.md:49 sets state +52=2, counter reset, tail-calls off_21181E4. State setter.
sub_21181E8
export/plan0/arm9_main/sub_21181E8_021181E8.c
- docs/function_notes/hk_28.md:50 sets state +52=1, counter reset, returns object. State setter.
sub_21181FC
export/plan0/arm9_main/sub_21181FC_021181FC.c
- docs/function_notes.md:950 sets state +52 = 0 on object off_21183D8 and resets the counter; when the input flag is not 2 rebuilds the tile map from +4
- docs/function_notes/NEEDS_REVIEW.md:1178 sets state +52=0 and counter reset; if input flag != 2, rebuilds tile map +24 and sprite positions +28 (0 or -192/-224 by mode). [REVIEW]
- docs/function_notes/hk_28.md:51 sets state +52=0 and counter reset; if input flag != 2, rebuilds tile map +24 and sprite positions +28 (0 or -192/-224 by mode). [REVIEW]
sub_2118400
export/plan0/arm9_main/sub_2118400_02118400.c
- docs/function_notes/hk_28.md:52 zeroes u16 +120 and dword +116 on the object, returns it. Sub-state reset.
sub_2118414
export/plan0/arm9_main/sub_2118414_02118414.c
- docs/function_notes.md:1538 frame timer: increments the counter +116 of the object at off_2118454 and resets it at 75
- docs/function_notes/NEEDS_REVIEW.md:1179 frame timer: counter +116 increments; at 75 it resets and advances u16 +120 (wraps at 4), then calls sub_21187D4. [REVIEW]
- docs/function_notes/hk_28.md:53 frame timer: counter +116 increments; at 75 it resets and advances u16 +120 (wraps at 4), then calls sub_21187D4. [REVIEW]
sub_2118458
export/plan0/arm9_main/sub_2118458_02118458.c
- docs/function_notes.md:951 per-frame highlight for 4 cells: sets map flags at +24 and calls the cell-highlight helper when the input flag is not 2
- docs/function_notes/NEEDS_REVIEW.md:1180 per-frame highlight for 4 cells: sets map flags at +24 and calls sub_2124100 with frame 14 or 15 by whether +120 matches. [REVIEW]
- docs/function_notes/hk_28.md:54 per-frame highlight for 4 cells: sets map flags at +24 and calls sub_2124100 with frame 14 or 15 by whether +120 matches. [REVIEW]
sub_21184D4
export/plan0/arm9_main/sub_21184D4_021184D4.c
- docs/function_notes.md:1560 slide/transition step: while the sub_21185D4 timer runs it advances the slide position
- docs/function_notes/NEEDS_REVIEW.md:1181 slide/transition step: while sub_21185D4 timer (+108) runs, decrements it and rebuilds map cells at +24; at timer end resets +108=7 if +68 != +112. [REVIEW]
- docs/function_notes/hk_28.md:55 slide/transition step: while sub_21185D4 timer (+108) runs, decrements it and rebuilds map cells at +24; at timer end resets +108=7 if +68 != +112. [REVIEW]
sub_21185D4
export/plan0/arm9_main/sub_21185D4_021185D4.c
- docs/function_notes/hk_28.md:56 predicate, returns nonzero when the transition timer (+108) of the screen object is nonzero.
sub_21185EC
export/plan0/arm9_main/sub_21185EC_021185EC.c
- docs/function_notes/hk_28.md:57 loads the selected entry's resources: sub_2029590 with off_211861C[sel], then sub_2029580 with off_2118620[sel], sel = object +68. Asset swap.
sub_2118624
export/plan0/arm9_main/sub_2118624_02118624.c
- docs/function_notes.md:952 refreshes the result/card display (390 bytes): BMG text draws, clears cells, and the ranking record lookup through sub_211DE00
- docs/function_notes/NEEDS_REVIEW.md:1182 refreshes the result/card display (390 bytes): BMG text draws, clears cells, ranking record lookup (sub_2060440/sub_2060364), draws via sub_211F244. [REVIEW]
- docs/function_notes/hk_28.md:58 refreshes the result/card display (390 bytes): BMG text draws, clears cells, ranking record lookup (sub_2060440/sub_2060364), draws via sub_211F244. [REVIEW]
sub_21187D4
export/plan0/arm9_main/sub_21187D4_021187D4.c
- docs/function_notes/hk_28.md:59 if not state 2, sub_20D0EFC on a table entry picked by +68 and +120, then sets dirty flag +124=1. Marks a cell upload pending.
sub_2118814
export/plan0/arm9_main/sub_2118814_02118814.c
- docs/function_notes.md:953 rebuilds the row highlight map (188 bytes): for 8 rows clears 5 cells and sets the highlight entries
- docs/function_notes/NEEDS_REVIEW.md:1183 rebuilds the row highlight map (188 bytes): for 8 rows clears 5 cells in +28 and sets flags from +72 entries and mode +60. [REVIEW]
- docs/function_notes/hk_28.md:60 rebuilds the row highlight map (188 bytes): for 8 rows clears 5 cells in +28 and sets flags from +72 entries and mode +60. [REVIEW]
sub_21188DC
export/plan0/arm9_main/sub_21188DC_021188DC.c
- docs/function_notes.md:954 when the state at off_21189B0 is not 2, rebuilds fixed map cells (+24/+28 = 1) and draws 8 items via sub_2124A68 and sub_211DED0
- docs/function_notes/NEEDS_REVIEW.md:1184 if not state 2, rebuilds fixed map cells (+24/+28 set to 1) and draws 8 items via sub_2124A68 and sub_211DED0 (210 bytes). [REVIEW]
- docs/function_notes/hk_28.md:61 if not state 2, rebuilds fixed map cells (+24/+28 set to 1) and draws 8 items via sub_2124A68 and sub_211DED0 (210 bytes). [REVIEW]
sub_21189CC
export/plan0/arm9_main/sub_21189CC_021189CC.c
- docs/function_notes/hk_28.md:62 loop over 8 slots storing sub_21189F4(i) into the array at +72+4*i of the object at off_21189F0. Fills slot-enable flags.
sub_21189F4
export/plan0/arm9_main/sub_21189F4_021189F4.c
- docs/function_notes.md:955 per-slot availability/count check by the mode at +60 (switch 0..4) via sub_202967C
- docs/function_notes/NEEDS_REVIEW.md:1185 per-slot availability/count check (322 bytes) by mode +60: sub_202967C, sub_202969C index, sub_2056DEC or sub_205FBB8 bit tests. [REVIEW]
- docs/function_notes/hk_28.md:63 per-slot availability/count check (322 bytes) by mode +60: sub_202967C, sub_202969C index, sub_2056DEC or sub_205FBB8 bit tests. [REVIEW]
sub_2118B48
export/plan0/arm9_main/sub_2118B48_02118B48.c
- docs/function_notes.md:1582 select-screen layout loader (430 bytes): reads about nine layout parameters and builds the screen objects
- docs/function_notes/NEEDS_REVIEW.md:1186 select-screen layout loader (430 bytes): reads about nine asset parameters, allocates a sub-object, then sub_2016468 draws 7 tile blocks. [REVIEW]
- docs/function_notes/hk_28.md:64 select-screen layout loader (430 bytes): reads about nine asset parameters, allocates a sub-object, then sub_2016468 draws 7 tile blocks. [REVIEW]
sub_2118D44
export/plan0/arm9_main/sub_2118D44_02118D44.c
- docs/function_notes.md:1501 asset/screen setup (194 bytes): reads nine parameters and chains the asset loaders
- docs/function_notes/NEEDS_REVIEW.md:1187 asset/screen setup (194 bytes): reads nine parameters via sub_20B496C/4A7C/4810/49F4/48EC, chains sub_211DE98, sub_211E024, sub_211F328. [REVIEW]
- docs/function_notes/hk_28.md:65 asset/screen setup (194 bytes): reads nine parameters via sub_20B496C/4A7C/4810/49F4/48EC, chains sub_211DE98, sub_211E024, sub_211F328. [REVIEW]
sub_2118E30
export/plan0/arm9_main/sub_2118E30_02118E30.c
- docs/function_notes.md:956 sets two scroll/offset words from obj+68 and obj+72 masked with dword_2118E58 and stores them
- docs/function_notes/NEEDS_REVIEW.md:1188 sets two scroll/offset words from obj+68 and obj+72 masked with dword_2118E58. Layer offset update. [REVIEW]
- docs/function_notes/hk_28.md:66 sets two scroll/offset words from obj+68 and obj+72 masked with dword_2118E58. Layer offset update. [REVIEW]
sub_2118E64
export/plan0/arm9_main/sub_2118E64_02118E64.c
- docs/function_notes.md:851 per-frame state machine on off_2118F8C: copies +56 to +52 and dispatches states 0..8 through a jump table to their handlers
- docs/function_notes/NEEDS_REVIEW.md:1189 per-frame state machine (294 bytes): dispatches states 0..8 to sub_21196DC ... sub_2118F98, sub_211A07C, background redraw, two layer draws. [REVIEW]
- docs/function_notes/hk_28.md:67 per-frame state machine (294 bytes): dispatches states 0..8 to sub_21196DC ... sub_2118F98, sub_211A07C, background redraw, two layer draws. [REVIEW]
sub_2118F98
export/plan0/arm9_main/sub_2118F98_02118F98.c
- docs/function_notes.md:957 select-grid per-frame map update (380 bytes): bumps the counter (+60) and writes the grid cells when the input flag is not 2
- docs/function_notes/NEEDS_REVIEW.md:1190 select-grid per-frame map update (380 bytes): bumps counter +60, sub_20AE4C0 offsets, writes tile-map cells +28 and row cells when active. [REVIEW]
- docs/function_notes/hk_28.md:68 select-grid per-frame map update (380 bytes): bumps counter +60, sub_20AE4C0 offsets, writes tile-map cells +28 and row cells when active. [REVIEW]
sub_211913C
export/plan0/arm9_main/sub_211913C_0211913C.c
- docs/function_notes.md:958 choice-state handler: switches on +64 (0..3): result -1 or 1 calls the next state setter
- docs/function_notes/NEEDS_REVIEW.md:1191 choice-state handler (194 bytes) switching on +64: result -1/1 calls sub_2119BDC, 0 calls sub_2119E50, sets +108=1 and calls sub_21199F8. [REVIEW]
- docs/function_notes/hk_28.md:69 choice-state handler (194 bytes) switching on +64: result -1/1 calls sub_2119BDC, 0 calls sub_2119E50, sets +108=1 and calls sub_21199F8. [REVIEW]
sub_2119208
export/plan0/arm9_main/sub_2119208_02119208.c
- docs/function_notes.md:959 yes/no choice handler: when sub_2127788 fires calls sub_2119A38; otherwise checks the input flag at off_2119258
- docs/function_notes/NEEDS_REVIEW.md:1192 yes/no choice handler: if sub_2127788 fires, calls sub_2119A38; if state 2, result -1/1 plays sound 16, 0 plays sound 7. [REVIEW]
- docs/function_notes/hk_28.md:70 yes/no choice handler: if sub_2127788 fires, calls sub_2119A38; if state 2, result -1/1 plays sound 16, 0 plays sound 7. [REVIEW]
sub_2119260
export/plan0/arm9_main/sub_2119260_02119260.c
- docs/function_notes.md:960 choice wait: modes 0, 1 and 3 poll sub_21277C8; mode 2 waits 15 frames then polls sub_2127788
- docs/function_notes/NEEDS_REVIEW.md:1193 choice wait: mode 0/1/3 on sub_21277C8, mode 2 after 15 frames on sub_21277C8 or sub_2127788; then calls sub_2119A90. [REVIEW]
- docs/function_notes/hk_28.md:71 choice wait: mode 0/1/3 on sub_21277C8, mode 2 after 15 frames on sub_21277C8 or sub_2127788; then calls sub_2119A90. [REVIEW]
sub_21192C4
export/plan0/arm9_main/sub_21192C4_021192C4.c
- docs/function_notes.md:961 state step (118 bytes): calls sub_2119D78, bumps the counter (+60); at 5 sets +84 = 1 and advances the state
- docs/function_notes/NEEDS_REVIEW.md:1194 state step (118 bytes): calls sub_2119D78, bumps counter +60; at >=10 runs sub_2119DFC then sub_2119AC4 or sub_2119E50 + sub_21199F8. [REVIEW]
- docs/function_notes/hk_28.md:72 state step (118 bytes): calls sub_2119D78, bumps counter +60; at >=10 runs sub_2119DFC then sub_2119AC4 or sub_2119E50 + sub_21199F8. [REVIEW]
sub_2119340
export/plan0/arm9_main/sub_2119340_02119340.c
- docs/function_notes.md:962 menu cursor input handler (450 bytes): touch hit test (sub_201EA84), up/down/left/right moves through the cursor at off_2119504+736
- docs/function_notes/NEEDS_REVIEW.md:1195 menu cursor input handler (450 bytes): touch hit (sub_201EA84), up/down (sub_20AE408) moves cursor +80; confirm sets +108=2, sub_21281C8/sub_2128310. [REVIEW]
- docs/function_notes/hk_28.md:73 menu cursor input handler (450 bytes): touch hit (sub_201EA84), up/down (sub_20AE408) moves cursor +80; confirm sets +108=2, sub_21281C8/sub_2128310. [REVIEW]
sub_211952C
export/plan0/arm9_main/sub_211952C_0211952C.c
- docs/function_notes/hk_28.md:74 if sub_2128294 (return button) fires, tail-calls sub_2119BDC. Thin.
sub_2119544
export/plan0/arm9_main/sub_2119544_02119544.c
- docs/function_notes.md:852 per-frame tile/cell position update on off_21196B4: bumps the counter at +60, writes sub_20AE4C0 offsets, layout chosen by sub_20CCCB4 (mode 26)
- docs/function_notes/NEEDS_REVIEW.md:1196 per-frame tile/cell position update (366 bytes), layout chosen by sub_20CCCB4 mode 26; bumps counter +60; at >=10 tail-calls sub_2119BF0. [REVIEW]
- docs/function_notes/hk_28.md:75 per-frame tile/cell position update (366 bytes), layout chosen by sub_20CCCB4 mode 26; bumps counter +60; at >=10 tail-calls sub_2119BF0. [REVIEW]
sub_21196DC
export/plan0/arm9_main/sub_21196DC_021196DC.c
- docs/function_notes/hk_28.md:76 if sub_2036C5C() nonzero, tail-calls sub_2119C0C. Thin.
sub_21196F4
export/plan0/arm9_main/sub_21196F4_021196F4.c
- docs/function_notes.md:853 destructor for the screen object at off_211975C: ORs register bits at off_2119760 (sub_211E130 check), calls sub_211F498 when the state at +0x6C is 2, else the other teardown
- docs/function_notes/NEEDS_REVIEW.md:1197 destructor for the screen object at off_211975C (102 bytes): ORs register bits at off_2119760, sub_211F498 or sub_211DE34/sub_211DF38, frees +48. [REVIEW]
- docs/function_notes/hk_28.md:77 destructor for the screen object at off_211975C (102 bytes): ORs register bits at off_2119760, sub_211F498 or sub_211DE34/sub_211DF38, frees +48. [REVIEW]
sub_2119770
export/plan0/arm9_main/sub_2119770_02119770.c
- docs/function_notes.md:963 results/ranking screen constructor (590 bytes): sets display bits for both engines and allocates a 112-byte screen object
- docs/function_notes/NEEDS_REVIEW.md:1198 results/ranking screen constructor (590 bytes): allocates 112-byte object, draws text lines, loads tiles, then sub_211A3BC, sub_211A100, sub_2119E88. [REVIEW]
- docs/function_notes/hk_28.md:78 results/ranking screen constructor (590 bytes): allocates 112-byte object, draws text lines, loads tiles, then sub_211A3BC, sub_211A100, sub_2119E88. [REVIEW]
sub_21199F8
export/plan0/arm9_main/sub_21199F8_021199F8.c
- docs/function_notes.md:964 state setter (60 bytes): sets +56 = 8 and the counter +60 = 0 on the object, then reads the value at +64
- docs/function_notes/NEEDS_REVIEW.md:1199 state setter (60 bytes): sets +56=8 and counter +60=0; calls sub_21282C8 with +64 if set, or if +108==1 and sub_211E130(1). [REVIEW]
- docs/function_notes/hk_28.md:79 state setter (60 bytes): sets +56=8 and counter +60=0; calls sub_21282C8 with +64 if set, or if +108==1 and sub_211E130(1). [REVIEW]
sub_2119A38
export/plan0/arm9_main/sub_2119A38_02119A38.c
- docs/function_notes.md:965 state setter (80 bytes): sets +56 = 7, resets the counter (+60), then branches on the value at +64 (3 or less)
- docs/function_notes/NEEDS_REVIEW.md:1200 state setter (80 bytes): sets state +56=7, counter reset, then sub_21277E4 by +64 mode; mode 2 also sub_2125FC0 when flag set. [REVIEW]
- docs/function_notes/hk_28.md:80 state setter (80 bytes): sets state +56=7, counter reset, then sub_21277E4 by +64 mode; mode 2 also sub_2125FC0 when flag set. [REVIEW]
sub_2119A90
export/plan0/arm9_main/sub_2119A90_02119A90.c
- docs/function_notes/hk_28.md:81 state setter: +56=6, counter reset, sub_212775C with ids 7/16/16 for choice sounds. Same pattern as sub_2118114.
sub_2119AC4
export/plan0/arm9_main/sub_2119AC4_02119AC4.c
- docs/function_notes.md:966 state setter with varargs (208 bytes): sets +56 = 5, resets the counter, and fetches BMG messages through the va list
- docs/function_notes/NEEDS_REVIEW.md:1201 state setter with varargs (208 bytes): +56=5, counter reset; BMG messages 4/2 via sub_21277F8; mode 2 formats a BMG message (sub_212513C, sub_21266E4). [REVIEW]
- docs/function_notes/hk_28.md:82 state setter with varargs (208 bytes): +56=5, counter reset; BMG messages 4/2 via sub_21277F8; mode 2 formats a BMG message (sub_212513C, sub_21266E4). [REVIEW]
sub_2119BA8
export/plan0/arm9_main/sub_2119BA8_02119BA8.c
- docs/function_notes/hk_28.md:83 state setter: +56=4, counter reset; if u16 at off_2119BD4 != 2 plays sound 5 via sub_212ECC0. Same pattern as sub_2118184.
sub_2119BDC
export/plan0/arm9_main/sub_2119BDC_02119BDC.c
- docs/function_notes/hk_28.md:84 state setter: +56=3, counter reset, returns object. State setter.
sub_2119BF0
export/plan0/arm9_main/sub_2119BF0_02119BF0.c
- docs/function_notes/hk_28.md:85 state setter: +56=2, counter reset, tail-calls off_2119C08. State setter.
sub_2119C0C
export/plan0/arm9_main/sub_2119C0C_02119C0C.c
- docs/function_notes/hk_28.md:86 state setter: +56=1, counter reset, returns object. State setter.
sub_2119C20
export/plan0/arm9_main/sub_2119C20_02119C20.c
- docs/function_notes.md:969 state 0 reset (306 bytes): zeroes the counters (+56, +60) and rebuilds the tile map from the state at off_2119D58
- docs/function_notes/NEEDS_REVIEW.md:1202 state 0 reset (306 bytes): counter reset, rebuilds tile map +28 and cell positions +32 (offsets -192, or -224/-32 by sub_20CCCB4 mode 26). [REVIEW]
- docs/function_notes/hk_28.md:87 state 0 reset (306 bytes): counter reset, rebuilds tile map +28 and cell positions +32 (offsets -192, or -224/-32 by sub_20CCCB4 mode 26). [REVIEW]
sub_2119D78
export/plan0/arm9_main/sub_2119D78_02119D78.c
- docs/function_notes.md:1549 transition step (122 bytes): when the timer from sub_2119DFC is up, advances the state at *off_2119DF4
- docs/function_notes/NEEDS_REVIEW.md:1203 transition step (122 bytes): if sub_2119DFC timer (+88) runs, at 7 copies +80 to +92 and calls sub_2119E88; else writes a map cell via sub_2116D10. [REVIEW]
- docs/function_notes/hk_28.md:88 transition step (122 bytes): if sub_2119DFC timer (+88) runs, at 7 copies +80 to +92 and calls sub_2119E88; else writes a map cell via sub_2116D10. [REVIEW]
sub_2119DFC
export/plan0/arm9_main/sub_2119DFC_02119DFC.c
- docs/function_notes/hk_28.md:89 predicate, returns nonzero when the transition timer (+88) of the results screen is nonzero.
sub_2119E14
export/plan0/arm9_main/sub_2119E14_02119E14.c
- docs/function_notes.md:621 loads the selected item's resource: index from sub_202968C, table entry from off_2119E48 by the record's +80 offset, passes it to sub_211E418, then returns sub_202949C(0)
- docs/function_notes/NEEDS_REVIEW.md:1204 loads the selected item resource: index from sub_202968C, table at off_2119E48 by +80, sub_211E418, then sub_202949C(0). [REVIEW]
- docs/function_notes/hk_28.md:90 loads the selected item resource: index from sub_202968C, table at off_2119E48 by +80, sub_211E418, then sub_202949C(0). [REVIEW]
sub_2119E50
export/plan0/arm9_main/sub_2119E50_02119E50.c
- docs/function_notes.md:854 loads the selected entry's asset: index from sub_202968C into the table off_2119E80 by +80, then sub_2029580
- docs/function_notes/NEEDS_REVIEW.md:1205 loads the selected entry's asset: index from sub_202968C into off_2119E80 table by +80, then sub_2029580. Same family as sub_21185EC. [REVIEW]
- docs/function_notes/hk_28.md:91 loads the selected entry's asset: index from sub_202968C into off_2119E80 table by +80, then sub_2029580. Same family as sub_21185EC. [REVIEW]
sub_2119E88
export/plan0/arm9_main/sub_2119E88_02119E88.c
- docs/function_notes.md:970 draws the two result rows for the selected entry (470 bytes); skipped when the screen state at off_211A060 is 2
- docs/function_notes/NEEDS_REVIEW.md:1206 draws the two result rows for the selected entry (470 bytes): BMG name lookups, sub_212426C text draws, record check (sub_2060228), time (sub_2060134). [REVIEW]
- docs/function_notes/hk_28.md:92 draws the two result rows for the selected entry (470 bytes): BMG name lookups, sub_212426C text draws, record check (sub_2060228), time (sub_2060134). [REVIEW]
sub_211A07C
export/plan0/arm9_main/sub_211A07C_0211A07C.c
- docs/function_notes.md:971 per-frame loop over 4 entries: sets the map flag at +32 and calls the entry handler; skipped when the state at off_211A0F0 is 2
- docs/function_notes/NEEDS_REVIEW.md:1207 per-frame loop over 4 entries: sets map flag at +32 and calls sub_2124100 with frame 14 when active (+84) else 15. Highlight of result cells. [REVIEW]
- docs/function_notes/hk_28.md:93 per-frame loop over 4 entries: sets map flag at +32 and calls sub_2124100 with frame 14 when active (+84) else 15. Highlight of result cells. [REVIEW]
sub_211A100
export/plan0/arm9_main/sub_211A100_0211A100.c
- docs/function_notes.md:972 results/ranking screen draw (650 bytes): clears and sets the map cells and the name rows; skipped when the state at off_211A38C is 2
- docs/function_notes/NEEDS_REVIEW.md:1208 results/ranking screen draw (650 bytes): clears and sets map cells, loads cell banks (sub_211DE00, sub_211DED0), draws four BMG rows and two headers. [REVIEW]
- docs/function_notes/hk_28.md:94 results/ranking screen draw (650 bytes): clears and sets map cells, loads cell banks (sub_211DE00, sub_211DED0), draws four BMG rows and two headers. [REVIEW]
sub_211A3BC
export/plan0/arm9_main/sub_211A3BC_0211A3BC.c
- docs/function_notes.md:1592 select-course screen layout loader (656 bytes): allocates the course-select objects and their cell tables
- docs/function_notes/NEEDS_REVIEW.md:1209 select-course screen layout loader (656 bytes): allocates a sub-object into +36, reads about six parameter sets, sub_2016468 draws tile blocks. [REVIEW]
- docs/function_notes/hk_28.md:95 select-course screen layout loader (656 bytes): allocates a sub-object into +36, reads about six parameter sets, sub_2016468 draws tile blocks. [REVIEW]
sub_211A6BC
export/plan0/arm9_main/sub_211A6BC_0211A6BC.c
- docs/function_notes.md:1493 parameter loader (176 bytes): reads three parameter groups and stores them in the local struct
- docs/function_notes/NEEDS_REVIEW.md:1210 parameter loader (176 bytes): reads three parameter groups via sub_204799C and sub_20B496C/4A7C/4810/49F4/48EC, returns the last result. [REVIEW]
- docs/function_notes/hk_28.md:96 parameter loader (176 bytes): reads three parameter groups via sub_204799C and sub_20B496C/4A7C/4810/49F4/48EC, returns the last result. [REVIEW]
sub_211A794
export/plan0/arm9_main/sub_211A794_0211A794.c
- docs/function_notes.md:973 scroll/offset update (22 bytes): off_211A7B4 = (-65536 * (obj+92)) & mask, then tail-calls off_211A7B8
- docs/function_notes/NEEDS_REVIEW.md:1211 scroll/offset update (22 bytes): off_211A7B4 = (-65536 * obj+92) & dword_211A7B0, then tail-calls off_211A7B8. Same pattern as sub_2118E30. [REVIEW]
- docs/function_notes/hk_28.md:97 scroll/offset update (22 bytes): off_211A7B4 = (-65536 * obj+92) & dword_211A7B0, then tail-calls off_211A7B8. Same pattern as sub_2118E30. [REVIEW]
sub_211A7BC
export/plan0/arm9_main/sub_211A7BC_0211A7BC.c
- docs/function_notes.md:855 per-frame state machine for the course/menu screen on off_211A8FC: copies +52 to +48 and shifts the saved fields, then dispatches states 0..8 through a jump table
- docs/function_notes/NEEDS_REVIEW.md:1212 per-frame state machine for the course/menu screen (320 bytes): dispatches states 0..8 to sub_211B224 ... sub_211A9D8; runs anim, layer draws, blinks. [REVIEW]
- docs/function_notes/hk_28.md:98 per-frame state machine for the course/menu screen (320 bytes): dispatches states 0..8 to sub_211B224 ... sub_211A9D8; runs anim, layer draws, blinks. [REVIEW]
sub_211A908
export/plan0/arm9_main/sub_211A908_0211A908.c
- docs/function_notes.md:856 cell blink dispatcher for index a1: indices 3 and 4 issue paired sub_211A964 calls on the table off_211A960 entries, other indices use the table value
- docs/function_notes/NEEDS_REVIEW.md:1213 cell blink dispatcher for index a1: 3 and 4 issue paired sub_211A964 calls, other indices use table off_211A960[2*a1]. [REVIEW]
- docs/function_notes/hk_28.md:99 cell blink dispatcher for index a1: 3 and 4 issue paired sub_211A964 calls, other indices use table off_211A960[2*a1]. [REVIEW]
sub_211A964
export/plan0/arm9_main/sub_211A964_0211A964.c
- docs/function_notes.md:857 highlights one map cell: bumps the cell counter, calls sub_2124100 (frame 1), then sub_2124BC8 to draw it
- docs/function_notes/NEEDS_REVIEW.md:1214 highlights one map cell: bumps cell counter at +20, sub_2124100 frame 1, sub_2124BC8 draw, decrements, then sub_2124100 frame 0. [REVIEW]
- docs/function_notes/hk_28.md:100 highlights one map cell: bumps cell counter at +20, sub_2124100 frame 1, sub_2124BC8 draw, decrements, then sub_2124100 frame 0. [REVIEW]
sub_211A9D8
export/plan0/arm9_main/sub_211A9D8_0211A9D8.c
- docs/function_notes.md:1583 per-frame map update for the five-row menu (438 bytes): bumps the counter (+56) and writes the row cells
- docs/function_notes/NEEDS_REVIEW.md:1215 per-frame map update for the five-row menu (438 bytes): animated offset via sub_20AE4C0 and sub_2128244 (press animation), writes many cells at +20. [REVIEW]
- docs/function_notes/hk_28.md:101 per-frame map update for the five-row menu (438 bytes): animated offset via sub_20AE4C0 and sub_2128244 (press animation), writes many cells at +20. [REVIEW]
sub_211ABD0
export/plan0/arm9_main/sub_211ABD0_0211ABD0.c
- docs/function_notes.md:974 choice handler (78 bytes): gated by sub_21277AC, then sub_2127794 with a switch on -1, 0 and 1
- docs/function_notes/NEEDS_REVIEW.md:1216 choice handler (78 bytes): sub_21277AC gate, sub_2127794 -1/1 calls sub_211BA98; 0 calls sub_211B9D8, sets +184=1, sub_202B7C0(3) then sub_21282C8. [REVIEW]
- docs/function_notes/hk_28.md:102 choice handler (78 bytes): sub_21277AC gate, sub_2127794 -1/1 calls sub_211BA98; 0 calls sub_211B9D8, sets +184=1, sub_202B7C0(3) then sub_21282C8. [REVIEW]
sub_211AC24
export/plan0/arm9_main/sub_211AC24_0211AC24.c
- docs/function_notes.md:975 choice handler (72 bytes): when sub_2127788 fires calls sub_211B9EC and then sub_2127794
- docs/function_notes/NEEDS_REVIEW.md:1217 choice handler (72 bytes): if sub_2127788 fires, calls sub_211B9EC, then sub_2127794 result -1/1 plays sound 16, 0 plays sound 7. [REVIEW]
- docs/function_notes/hk_28.md:103 choice handler (72 bytes): if sub_2127788 fires, calls sub_211B9EC, then sub_2127794 result -1/1 plays sound 16, 0 plays sound 7. [REVIEW]
sub_211AC70
export/plan0/arm9_main/sub_211AC70_0211AC70.c
- docs/function_notes/hk_28.md:104 if sub_21277C8 (choice screen ready) fires, tail-calls sub_211BA08. Thin.
sub_211AC88
export/plan0/arm9_main/sub_211AC88_0211AC88.c
- docs/function_notes.md:976 state step (94 bytes): calls sub_211C818 and sub_211C14C, bumps the counter at +56 of off_211ACE8
- docs/function_notes/NEEDS_REVIEW.md:1218 state step (94 bytes): calls sub_211C818 and sub_211C14C, bumps counter +56; at >=10 calls sub_211BA1C or sub_211B9D8 with sub_202B7C0(3). [REVIEW]
- docs/function_notes/hk_28.md:105 state step (94 bytes): calls sub_211C818 and sub_211C14C, bumps counter +56; at >=10 calls sub_211BA1C or sub_211B9D8 with sub_202B7C0(3). [REVIEW]
sub_211ACEC
export/plan0/arm9_main/sub_211ACEC_0211ACEC.c
- docs/function_notes.md:977 course-select input handler (688 bytes): touch hit tests, then sub_211C818 and sub_211C14C to refresh the grid
- docs/function_notes/NEEDS_REVIEW.md:1219 course-select input handler (688 bytes): touch hits (sub_201EA84) and D-pad/buttons (sub_20AE408) move selection; calls sub_211CB6C/CCAC/CA8C/CAFC. [REVIEW]
- docs/function_notes/hk_28.md:106 course-select input handler (688 bytes): touch hits (sub_201EA84) and D-pad/buttons (sub_20AE408) move selection; calls sub_211CB6C/CCAC/CA8C/CAFC. [REVIEW]
sub_211AFD0
export/plan0/arm9_main/sub_211AFD0_0211AFD0.c
- docs/function_notes.md:978 state step (152 bytes): sub_211C818 and sub_211C14C, then bumps the counter at +56 of off_211B068
- docs/function_notes/NEEDS_REVIEW.md:1220 state step (152 bytes): sub_211C818/sub_211C14C, counter +56, press offset (sub_212825C) to cells +20; at >=10 with sub_2128294 calls sub_211BA98. [REVIEW]
- docs/function_notes/hk_28.md:107 state step (152 bytes): sub_211C818/sub_211C14C, counter +56, press offset (sub_212825C) to cells +20; at >=10 with sub_2128294 calls sub_211BA98. [REVIEW]
sub_211B07C
export/plan0/arm9_main/sub_211B07C_0211B07C.c
- docs/function_notes.md:979 per-frame map update for the course-select grid (372 bytes): sub_211C818 and sub_211C14C, bumps the counter at +56 of off_211B1F0
- docs/function_notes/NEEDS_REVIEW.md:1221 per-frame map update for the course-select grid (372 bytes): sub_20AE4C0 offset written to cells +20 across five rows; at >=10 tail-calls sub_211BAAC. [REVIEW]
- docs/function_notes/hk_28.md:108 per-frame map update for the course-select grid (372 bytes): sub_20AE4C0 offset written to cells +20 across five rows; at >=10 tail-calls sub_211BAAC. [REVIEW]
sub_211B224
export/plan0/arm9_main/sub_211B224_0211B224.c
- docs/function_notes/hk_28.md:109 if sub_2036C5C() nonzero, tail-calls sub_211BAD8. Thin.
sub_211B23C
export/plan0/arm9_main/sub_211B23C_0211B23C.c
- docs/function_notes.md:858 destructor for the course-select screen at off_211B2B0: register bits at off_211B2B4 and the flags at off_211B2C0, then sub_2116DC8
- docs/function_notes/NEEDS_REVIEW.md:1222 destructor for the course-select screen at off_211B2B0 (116 bytes): register bits at off_211B2B4, clears off_211B2C0, calls sub_2116DC8, frees +40. [REVIEW]
- docs/function_notes/hk_28.md:110 destructor for the course-select screen at off_211B2B0 (116 bytes): register bits at off_211B2B4, clears off_211B2C0, calls sub_2116DC8, frees +40. [REVIEW]
sub_211B2CC
export/plan0/arm9_main/sub_211B2CC_0211B2CC.c
- docs/function_notes.md:1603 constructor for the main course-select screen (1778 bytes): sets the display flags and allocates the cell tables and objects
- docs/function_notes/NEEDS_REVIEW.md:1223 constructor for the main course-select screen (1778 bytes): allocates 188-byte object, draws BMG label rows, race-slot and sub_202C0D4 setup. [REVIEW]
- docs/function_notes/hk_28.md:111 constructor for the main course-select screen (1778 bytes): allocates 188-byte object, draws BMG label rows, race-slot and sub_202C0D4 setup. [REVIEW]
sub_211B9D8
export/plan0/arm9_main/sub_211B9D8_0211B9D8.c
- docs/function_notes/hk_28.md:112 state setter: +52=8, counter reset, returns object. State setter.
sub_211B9EC
export/plan0/arm9_main/sub_211B9EC_0211B9EC.c
- docs/function_notes/hk_28.md:113 state setter: +52=7, counter reset, tail-calls off_211BA04. State setter.
sub_211BA08
export/plan0/arm9_main/sub_211BA08_0211BA08.c
- docs/function_notes/hk_28.md:114 state setter: +52=6, counter reset, returns object. State setter.
sub_211BA1C
export/plan0/arm9_main/sub_211BA1C_0211BA1C.c
- docs/function_notes.md:980 state setter: sets +52 = 5, resets the counter (+56), shows BMG messages 4 and others via sub_20B3F7C
- docs/function_notes/NEEDS_REVIEW.md:1224 state setter: +52=5, counter reset; shows BMG messages 4 and 2 via sub_21277F8 as a two-option dialog. [REVIEW]
- docs/function_notes/hk_28.md:115 state setter: +52=5, counter reset; shows BMG messages 4 and 2 via sub_21277F8 as a two-option dialog. [REVIEW]
sub_211BA58
export/plan0/arm9_main/sub_211BA58_0211BA58.c
- docs/function_notes.md:622 starts the message strip: sets *off_211BA8C +52 = 4 and +56 = 0, calls sub_212B7E8 unless the u16 at off_211BA90 is 2, plays sound 5 via sub_212ECC0, returns sub_211C474 of that handle
- docs/function_notes/NEEDS_REVIEW.md:1225 starts the info message strip / staff roll (50 bytes): +52=4, counter reset, sub_212B7E8 unless input flag 2, sound 5 via sub_212ECC0, sub_211C474. [REVIEW]
- docs/function_notes/hk_28.md:116 starts the info message strip / staff roll (50 bytes): +52=4, counter reset, sub_212B7E8 unless input flag 2, sound 5 via sub_212ECC0, sub_211C474. [REVIEW]
sub_211BA98
export/plan0/arm9_main/sub_211BA98_0211BA98.c
- docs/function_notes/hk_28.md:117 state setter: +52=3, counter reset, returns object. State setter.
sub_211BAAC
export/plan0/arm9_main/sub_211BAAC_0211BAAC.c
- docs/function_notes.md:981 state setter: sets +52 = 2, resets the counter; when the mode at +44 is 1 or less calls the next setup function
- docs/function_notes/NEEDS_REVIEW.md:1226 state setter: +52=2, counter reset; if mode <=1 calls sub_2128374(mode). [REVIEW]
- docs/function_notes/hk_28.md:118 state setter: +52=2, counter reset; if mode <=1 calls sub_2128374(mode). [REVIEW]
sub_211BAD8
export/plan0/arm9_main/sub_211BAD8_0211BAD8.c
- docs/function_notes/hk_28.md:119 state setter: +52=1, counter reset, returns object. State setter.
sub_211BAEC
export/plan0/arm9_main/sub_211BAEC_0211BAEC.c
- docs/function_notes.md:1588 writes the per-cell flag halfwords (+6) in the cell grid around the selected cell (484 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1227 Writes per-cell flag halfwords (+6) in the cell grid around track object off_211BCD0 from lookup tables; returns a cell pointer. [REVIEW]
- docs/function_notes/hk_29.md:3 Writes per-cell flag halfwords (+6) in the cell grid around track object off_211BCD0 from lookup tables; returns a cell pointer. [REVIEW]
sub_211BD10
export/plan0/arm9_main/sub_211BD10_0211BD10.c
- docs/function_notes.md:859 returns a pointer to the per-state word of object off_211BD78 (+172 or +86 depending on state 0..5); for states 2..5 stores the popcount
- docs/function_notes/NEEDS_REVIEW.md:1228 Returns pointer to a per-state word at +172/+86 of object off_211BD78; for states 2-5 stores popcount (sub_202056C) of a table byte into it. [REVIEW]
- docs/function_notes/hk_29.md:4 Returns pointer to a per-state word at +172/+86 of object off_211BD78; for states 2-5 stores popcount (sub_202056C) of a table byte into it. [REVIEW]
sub_211BD84
export/plan0/arm9_main/sub_211BD84_0211BD84.c
- docs/function_notes.md:982 per-frame race/result state machine (504 bytes): when sub_20CCCB4 returns 8, 9 or 15 calls sub_2029520 and sub_20295A0
- docs/function_notes/NEEDS_REVIEW.md:1229 Per-frame race/result state machine: resets sub_2029xxx displays for modes 8/9/15, tallies 8 entries into +172/+176, steps sub_211CCAC to targets. [REVIEW]
- docs/function_notes/hk_29.md:5 Per-frame race/result state machine: resets sub_2029xxx displays for modes 8/9/15, tallies 8 entries into +172/+176, steps sub_211CCAC to targets. [REVIEW]
sub_211BF94
export/plan0/arm9_main/sub_211BF94_0211BF94.c
- docs/function_notes.md:983 per-frame scan of 8 entries (92-byte stride): cell hit test, skipped when the state at off_211C0B8 +120 is 2
- docs/function_notes/NEEDS_REVIEW.md:1230 Per-frame scan of 8 entries (92-byte stride): cell hit test (sub_201EA84) and sub_20AE408 checks; sets active item via sub_211D174. [REVIEW]
- docs/function_notes/hk_29.md:6 Per-frame scan of 8 entries (92-byte stride): cell hit test (sub_201EA84) and sub_20AE408 checks; sets active item via sub_211D174. [REVIEW]
sub_211C0CC
export/plan0/arm9_main/sub_211C0CC_0211C0CC.c
- docs/function_notes.md:860 in mode 2 sets a visibility cell (row +14) and draws a BMG text label (message 20 or 21 by the state at +120) via sub_20B3F7C
- docs/function_notes/NEEDS_REVIEW.md:1231 In mode 2, sets a visibility cell (+14 row) and draws a BMG text label (msg 20 or 21 by state at +120) via sub_20B3F7C then sub_212426C. [REVIEW]
- docs/function_notes/hk_29.md:7 In mode 2, sets a visibility cell (+14 row) and draws a BMG text label (msg 20 or 21 by state at +120) via sub_20B3F7C then sub_212426C. [REVIEW]
sub_211C14C
export/plan0/arm9_main/sub_211C14C_0211C14C.c
- docs/function_notes.md:984 refreshes cell visibility for the 2-entry panel (off_211C450) when the state at off_211C44C +32 is 2
- docs/function_notes/NEEDS_REVIEW.md:1232 Refreshes cell visibility for the 2-entry panel (off_211C450): mode 2 path uses sub_211D44C and countdown +84; else flags from state. Partly unread. [REVIEW]
- docs/function_notes/hk_29.md:8 Refreshes cell visibility for the 2-entry panel (off_211C450): mode 2 path uses sub_211D44C and countdown +84; else flags from state. Partly unread. [REVIEW]
sub_211C474
export/plan0/arm9_main/sub_211C474_0211C474.c
- docs/function_notes.md:861 refreshes the 8 entry icon/palette slots: for each entry with sub_211D40C set calls sub_20294D4 and sub_202950C with the table value; sets the display state from +104..+116
- docs/function_notes/NEEDS_REVIEW.md:1233 Refreshes 8 entry icon/palette slots (sub_20294D4/sub_202950C), sets display state from +104..+116 fields, tail-calls sub_211C5AC. [REVIEW]
- docs/function_notes/hk_29.md:9 Refreshes 8 entry icon/palette slots (sub_20294D4/sub_202950C), sets display state from +104..+116 fields, tail-calls sub_211C5AC. [REVIEW]
sub_211C5AC
export/plan0/arm9_main/sub_211C5AC_0211C5AC.c
- docs/function_notes.md:985 selection-cursor navigation over 8 entries using sub_211C810 to set the per-entry flags
- docs/function_notes/NEEDS_REVIEW.md:1234 Selection-cursor navigation over 8 entries: sub_211C810 sets highlight cells, sub_211D62C/D2F0/D3F4 pick next valid entry; returns index. [REVIEW]
- docs/function_notes/hk_29.md:10 Selection-cursor navigation over 8 entries: sub_211C810 sets highlight cells, sub_211D62C/D2F0/D3F4 pick next valid entry; returns index. [REVIEW]
sub_211C810
export/plan0/arm9_main/sub_211C810_0211C810.c
- docs/function_notes/hk_29.md:11 Thunk: tail-calls the function pointer at off_211C814 with (a1, a2).
sub_211C818
export/plan0/arm9_main/sub_211C818_0211C818.c
- docs/function_notes.md:986 clears or sets the per-cell flags for the 5x2 entry areas (608 bytes); branch on the state at off_211CA78 +32 == 2
- docs/function_notes/NEEDS_REVIEW.md:1235 Clears or sets per-cell flags for the 5x2 entry areas in object off_211CA88; mode 2 zeroes them, else sets flags from counters at +60/+62 and state. [REVIEW]
- docs/function_notes/hk_29.md:12 Clears or sets per-cell flags for the 5x2 entry areas in object off_211CA88; mode 2 zeroes them, else sets flags from counters at +60/+62 and state. [REVIEW]
sub_211CA8C
export/plan0/arm9_main/sub_211CA8C_0211CA8C.c
- docs/function_notes.md:862 when state +96 is 3 and the sub-state is set, decrements the selection index (+138), redraws via sub_211D844, sets +80 = 6
- docs/function_notes/NEEDS_REVIEW.md:1236 When state +96 is 3 and sub-state set, decrements selection index, redraws via sub_211D844/910, sets +80=6, plays sound 23. [REVIEW]
- docs/function_notes/hk_29.md:13 When state +96 is 3 and sub-state set, decrements selection index, redraws via sub_211D844/910, sets +80=6, plays sound 23. [REVIEW]
sub_211CAFC
export/plan0/arm9_main/sub_211CAFC_0211CAFC.c
- docs/function_notes.md:863 mirror of sub_211CA8C: increments the selection index on off_211CB64, redraws, sets +82 = 6
- docs/function_notes/NEEDS_REVIEW.md:1237 Mirror of sub_211CA8C: increments the selection index (cursor right) on off_211CB64, redraws, sets +82=6 and plays sound 23. [REVIEW]
- docs/function_notes/hk_29.md:14 Mirror of sub_211CA8C: increments the selection index (cursor right) on off_211CB64, redraws, sets +82=6 and plays sound 23. [REVIEW]
sub_211CB6C
export/plan0/arm9_main/sub_211CB6C_0211CB6C.c
- docs/function_notes.md:864 steps the menu state at off_211CC98 backward (the counter at +104+4*state wraps to the table value minus 1), redraws the value or BMG text, then recurses while sub_211CEA8 fails
- docs/function_notes/NEEDS_REVIEW.md:1238 Steps menu state at off_211CC98 backward (wraps counter +104+4*state), redraws value or BMG text, resets counters, calls sub_211CDEC/CFD0/D09C. [REVIEW]
- docs/function_notes/hk_29.md:15 Steps menu state at off_211CC98 backward (wraps counter +104+4*state), redraws value or BMG text, resets counters, calls sub_211CDEC/CFD0/D09C. [REVIEW]
sub_211CCAC
export/plan0/arm9_main/sub_211CCAC_0211CCAC.c
- docs/function_notes.md:865 forward counterpart of sub_211CB6C on off_211CDD8: increments the step counter, wraps to 0 at the table off_211CDDC limit, redraws the same way
- docs/function_notes/NEEDS_REVIEW.md:1239 Forward counterpart of sub_211CB6C on off_211CDD8 (increments step counter, wraps at table off_211CDDC); optional sound via sub_212ECC0. [REVIEW]
- docs/function_notes/hk_29.md:16 Forward counterpart of sub_211CB6C on off_211CDD8 (increments step counter, wraps at table off_211CDDC); optional sound via sub_212ECC0. [REVIEW]
sub_211CDEC
export/plan0/arm9_main/sub_211CDEC_0211CDEC.c
- docs/function_notes.md:987 returns true when sub_211D478(0) and sub_211D478(1) are both nonzero and sub_211D3A8() != 2
- docs/function_notes/NEEDS_REVIEW.md:1240 Returns TRUE if sub_211D478(0) and sub_211D478(1) are both non-zero, sub_211D3A8()==2 and sub_211CE24() passes. Readiness/tie check. [REVIEW]
- docs/function_notes/hk_29.md:17 Returns TRUE if sub_211D478(0) and sub_211D478(1) are both non-zero, sub_211D3A8()==2 and sub_211CE24() passes. Readiness/tie check. [REVIEW]
sub_211CE24
export/plan0/arm9_main/sub_211CE24_0211CE24.c
- docs/function_notes.md:988 checks the state at +44 of off_211CE9C: states 0 and 1 need sub_211D650() == 1; states 2..5 check the value at +4 of off_211CEA0 against 8 and 9; other states return 0
- docs/function_notes/NEEDS_REVIEW.md:1241 Checks state at +44 of off_211CE9C: states 0-1 need sub_211D650()==1; states 2-5 compare table popcount with sub_211D650(); calls fn ptr. [REVIEW]
- docs/function_notes/hk_29.md:18 Checks state at +44 of off_211CE9C: states 0-1 need sub_211D650()==1; states 2-5 compare table popcount with sub_211D650(); calls fn ptr. [REVIEW]
sub_211CEA8
export/plan0/arm9_main/sub_211CEA8_0211CEA8.c
- docs/function_notes.md:1566 gate on the state object at off_211CFCC (+44 state, +96 and +24 fields): returns whether the sub-state may advance
- docs/function_notes/NEEDS_REVIEW.md:1242 Gate on state object off_211CFCC (+44 state, +24/+27/+29/+30 substates); tests sub_205FBB8(16) connected mode; returns 0/1, some tail-calls. [REVIEW]
- docs/function_notes/hk_29.md:19 Gate on state object off_211CFCC (+44 state, +24/+27/+29/+30 substates); tests sub_205FBB8(16) connected mode; returns 0/1, some tail-calls. [REVIEW]
sub_211CFD0
export/plan0/arm9_main/sub_211CFD0_0211CFD0.c
- docs/function_notes.md:989 assigns each of 8 slots a random value (sub_20AE3B4 or the 64-bit generator) after sub_211D650
- docs/function_notes/NEEDS_REVIEW.md:1243 Assigns each of 8 slots a random value (sub_20AE3B4 or 64-bit RNG sub_2133048 by state), stores via sub_211D428 and bumps counter +176. [REVIEW]
- docs/function_notes/hk_29.md:20 Assigns each of 8 slots a random value (sub_20AE3B4 or 64-bit RNG sub_2133048 by state), stores via sub_211D428 and bumps counter +176. [REVIEW]
sub_211D09C
export/plan0/arm9_main/sub_211D09C_0211D09C.c
- docs/function_notes.md:990 same random slot assignment as sub_211CFD0 over the count of entries
- docs/function_notes/NEEDS_REVIEW.md:1244 Same random-slot assignment as sub_211CFD0 but over count sub_211D650() and object off_211D168 (counters +172/+174, RNG at off_211D16C). [REVIEW]
- docs/function_notes/hk_29.md:21 Same random-slot assignment as sub_211CFD0 but over count sub_211D650() and object off_211D168 (counters +172/+174, RNG at off_211D16C). [REVIEW]
sub_211D174
export/plan0/arm9_main/sub_211D174_0211D174.c
- docs/function_notes.md:1574 moves entry a1 to group a2 when valid (360 bytes): updates the group counters and the 14-halfword group list
- docs/function_notes/NEEDS_REVIEW.md:1245 Moves entry a1 to group a2 when valid: updates group counters +172/+176, rebalances leader (sub_211D3A8), sets state +84/+86, plays sound 4. [REVIEW]
- docs/function_notes/hk_29.md:22 Moves entry a1 to group a2 when valid: updates group counters +172/+176, rebalances leader (sub_211D3A8), sets state +84/+86, plays sound 4. [REVIEW]
sub_211D2F0
export/plan0/arm9_main/sub_211D2F0_0211D2F0.c
- docs/function_notes.md:991 random pick helper: when sub_211D62C is nonzero, writes a value chosen by the state at +44 (switch 0..5)
- docs/function_notes/NEEDS_REVIEW.md:1246 Random pick helper: if sub_211D62C() non-zero writes sub_211D650()+RNG offset to *a1 and returns 1; else writes 8 and returns 0. [REVIEW]
- docs/function_notes/hk_29.md:23 Random pick helper: if sub_211D62C() non-zero writes sub_211D650()+RNG offset to *a1 and returns 1; else writes 8 and returns 0. [REVIEW]
sub_211D3A8
export/plan0/arm9_main/sub_211D3A8_0211D3A8.c
- docs/function_notes.md:992 returns 2 when the pool flag at +108 is clear, else the leading group: compares sub_211D478(0) with sub_211D478(1)
- docs/function_notes/NEEDS_REVIEW.md:1247 Returns the leading group: 2 if the pool flag at +108 is clear, else 0 or 1 by comparing sub_211D478(0) vs sub_211D478(1), 2 on tie. [REVIEW]
- docs/function_notes/hk_29.md:24 Returns the leading group: 2 if the pool flag at +108 is clear, else 0 or 1 by comparing sub_211D478(0) vs sub_211D478(1), 2 on tie. [REVIEW]
sub_211D3F4
export/plan0/arm9_main/sub_211D3F4_0211D3F4.c
- docs/function_notes/hk_29.md:25 Maps group index: 0 -> 1, 1 -> 0, other -> 2 (opposite-side index helper).
sub_211D40C
export/plan0/arm9_main/sub_211D40C_0211D40C.c
- docs/function_notes/hk_29.md:26 Returns TRUE when sub_211D650() > a1 (slot index is within the active count).
sub_211D428
export/plan0/arm9_main/sub_211D428_0211D428.c
- docs/function_notes/hk_29.md:27 Stores a2 into the per-slot array at +140 (slot a1) of object off_211D440, then tail-calls the update callback off_211D448. Trivial setter.
sub_211D44C
export/plan0/arm9_main/sub_211D44C_0211D44C.c
- docs/function_notes/hk_29.md:28 Returns TRUE when group count sub_211D478() for slot a1's group is not equal to 1.
sub_211D478
export/plan0/arm9_main/sub_211D478_0211D478.c
- docs/function_notes/hk_29.md:29 Returns the count for group a1: sum of counters +172 and +176 when the pool flag at +108 is set, else only +172.
sub_211D4A8
export/plan0/arm9_main/sub_211D4A8_0211D4A8.c
- docs/function_notes.md:993 recursive cursor step (-1) on off_211D55C: moves the index at +96 with wrap, redraws through sub_211D844
- docs/function_notes/NEEDS_REVIEW.md:1248 Recursive cursor step (-1) on off_211D55C: moves index +96 skipping entries masked by off_211D560, sets +124, blink reset, sound 0. [REVIEW]
- docs/function_notes/hk_29.md:30 Recursive cursor step (-1) on off_211D55C: moves index +96 skipping entries masked by off_211D560, sets +124, blink reset, sound 0. [REVIEW]
sub_211D56C
export/plan0/arm9_main/sub_211D56C_0211D56C.c
- docs/function_notes.md:994 recursive cursor step (+1, bound 5) on off_211D61C, same pattern as sub_211D4A8
- docs/function_notes/NEEDS_REVIEW.md:1249 Recursive cursor step (direction +1, bound 5) on off_211D61C, same logic as sub_211D4A8 with table off_211D620. [REVIEW]
- docs/function_notes/hk_29.md:31 Recursive cursor step (direction +1, bound 5) on off_211D61C, same logic as sub_211D4A8 with table off_211D620. [REVIEW]
sub_211D62C
export/plan0/arm9_main/sub_211D62C_0211D62C.c
- docs/function_notes/hk_29.md:32 Returns the sum of counters +176 and +178 when the pool flag at +108 is set (object off_211D64C), else 0.
sub_211D650
export/plan0/arm9_main/sub_211D650_0211D650.c
- docs/function_notes/hk_29.md:33 Returns the total active count: sum of 16-bit counters +172 and +174 of object off_211D668 (used as the slot count everywhere).
sub_211D66C
export/plan0/arm9_main/sub_211D66C_0211D66C.c
- docs/function_notes.md:995 redraws the 2-slot results panel for mode 2: cell flags and sub-objects, skipped unless the state at off_211D830 +32 is 2
- docs/function_notes/NEEDS_REVIEW.md:1250 Redraws the 2-slot results panel for mode 2 (cell flags, sub_211D844/910 value display) and BMG text, keyed by state +116/+120. [REVIEW]
- docs/function_notes/hk_29.md:34 Redraws the 2-slot results panel for mode 2 (cell flags, sub_211D844/910 value display) and BMG text, keyed by state +116/+120. [REVIEW]
sub_211D844
export/plan0/arm9_main/sub_211D844_0211D844.c
- docs/function_notes.md:1556 clamps a1 to 1..32, stores it at +138 of off_211D904 and redraws the option list
- docs/function_notes/NEEDS_REVIEW.md:1251 Clamps a1 to 1..32 into +138 of off_211D904 and redraws the value label (BMG 23 via sub_212513C in mode 2, else BMG 9). [REVIEW]
- docs/function_notes/hk_29.md:35 Clamps a1 to 1..32 into +138 of off_211D904 and redraws the value label (BMG 23 via sub_212513C in mode 2, else BMG 9). [REVIEW]
sub_211D910
export/plan0/arm9_main/sub_211D910_0211D910.c
- docs/function_notes.md:996 same as sub_211D844 but clamps its argument to 1..10 (values below 1 become 1) and stores it in +136
- docs/function_notes/NEEDS_REVIEW.md:1252 Same as sub_211D844 but clamps to 1..10 and stores into +136, using BMG message 22 (mode 2) or the generic label path. [REVIEW]
- docs/function_notes/hk_29.md:36 Same as sub_211D844 but clamps to 1..10 and stores into +136, using BMG message 22 (mode 2) or the generic label path. [REVIEW]
sub_211D9DC
export/plan0/arm9_main/sub_211D9DC_0211D9DC.c
- docs/function_notes.md:1570 refreshes the 5-entry option panel: calls sub_2124100 for each entry and updates the flags
- docs/function_notes/NEEDS_REVIEW.md:1253 Refresh of 5-entry option panel: sub_2124100 per entry, toggles flag cells, fills tile rows via sub_20B44A4 with sub_211DB30 values, DMA. [REVIEW]
- docs/function_notes/hk_29.md:37 Refresh of 5-entry option panel: sub_2124100 per entry, toggles flag cells, fills tile rows via sub_20B44A4 with sub_211DB30 values, DMA. [REVIEW]
sub_211DB30
export/plan0/arm9_main/sub_211DB30_0211DB30.c
- docs/function_notes.md:997 copies five colour/tile values for row a2 from the table off_211DB88 when the mode at off_211DB84 +44 is 3
- docs/function_notes/NEEDS_REVIEW.md:1254 Copies 5 colour/tile values for row a2 from table off_211DB88 (state 3) or off_211DB8C (other states) into a1[0..4]. [REVIEW]
- docs/function_notes/hk_29.md:38 Copies 5 colour/tile values for row a2 from table off_211DB88 (state 3) or off_211DB8C (other states) into a1[0..4]. [REVIEW]
sub_211DB90
export/plan0/arm9_main/sub_211DB90_0211DB90.c
- docs/function_notes.md:1575 builds the HUD/menu resources (370 bytes): values loaded via sub_204799C and the sub_20B helpers
- docs/function_notes/NEEDS_REVIEW.md:1255 Builds HUD/menu resources: values via sub_204799C loaded by sub_20B4934/47D8/4A44/49BC/48B4 into object off_211DD04, then sub_2016468 DMA. [REVIEW]
- docs/function_notes/hk_29.md:39 Builds HUD/menu resources: values via sub_204799C loaded by sub_20B4934/47D8/4A44/49BC/48B4 into object off_211DD04, then sub_2016468 DMA. [REVIEW]
sub_211DD44
export/plan0/arm9_main/sub_211DD44_0211DD44.c
- docs/function_notes.md:1031 loads a group of 2D resources via sub_204799C lookups and the sub_20B496C / sub_20B48EC helpers
- docs/function_notes/NEEDS_REVIEW.md:1256 Loads a group of 2D resources (sub_204799C + sub_20B496C/4810/4A7C/49F4/48EC) for the select-race-rule multi screen, then calls sub_2116E70. [REVIEW]
- docs/function_notes/hk_29.md:40 Loads a group of 2D resources (sub_204799C + sub_20B496C/4810/4A7C/49F4/48EC) for the select-race-rule multi screen, then calls sub_2116E70. [REVIEW]
sub_211DE00
export/plan0/arm9_main/sub_211DE00_0211DE00.c
- docs/function_notes/hk_29.md:41 Thin wrapper: calls sub_2124748 with a table entry from off_211DE30[a1] and fields of object off_211DE2C (2D resource load).
sub_211DE34
export/plan0/arm9_main/sub_211DE34_0211DE34.c
- docs/function_notes/hk_29.md:42 Returns off_211DE3C and zeroes that global pointer (take-and-clear).
sub_211DE40
export/plan0/arm9_main/sub_211DE40_0211DE40.c
- docs/function_notes.md:998 allocates a 12-byte object into *off_211DE88 and fills its three fields from sub_204799C lookups via sub_20B49BC
- docs/function_notes/NEEDS_REVIEW.md:1257 Allocates a 12-byte object into *off_211DE88 and fills 3 fields from resource loads (sub_204799C, sub_20B49BC, sub_20B48B4); cup-name setup. [REVIEW]
- docs/function_notes/hk_29.md:43 Allocates a 12-byte object into *off_211DE88 and fills 3 fields from resource loads (sub_204799C, sub_20B49BC, sub_20B48B4); cup-name setup. [REVIEW]
sub_211DE98
export/plan0/arm9_main/sub_211DE98_0211DE98.c
- docs/function_notes.md:1016 loads two resources: sub_204799C lookups fed to sub_20B49F4 and sub_20B48EC
- docs/function_notes/NEEDS_REVIEW.md:1258 Loads two resources (sub_204799C + sub_20B49F4 / sub_20B48EC) into locals and returns the second loader result. Cup-name resource helper. [REVIEW]
- docs/function_notes/hk_29.md:44 Loads two resources (sub_204799C + sub_20B49F4 / sub_20B48EC) into locals and returns the second loader result. Cup-name resource helper. [REVIEW]
sub_211DED0
export/plan0/arm9_main/sub_211DED0_0211DED0.c
- docs/function_notes.md:1547 loads a cup/choice graphic through sub_2124748 with block 14 or 30 chosen by a6
- docs/function_notes/NEEDS_REVIEW.md:1259 Loads a cup/choice graphic (sub_2124748 from off_211DF30[a1]), tile index via sub_2124A68, DMA 32 bytes; palette 14 or 30 by a6. [REVIEW]
- docs/function_notes/hk_29.md:45 Loads a cup/choice graphic (sub_2124748 from off_211DF30[a1]), tile index via sub_2124A68, DMA 32 bytes; palette 14 or 30 by a6. [REVIEW]
sub_211DF38
export/plan0/arm9_main/sub_211DF38_0211DF38.c
- docs/function_notes/hk_29.md:46 Returns off_211DF40 and zeroes it (take-and-clear).
sub_211DF44
export/plan0/arm9_main/sub_211DF44_0211DF44.c
- docs/function_notes.md:999 allocates a 16-byte object into *off_211DFA0 and fills its four fields from sub_204799C lookups
- docs/function_notes/NEEDS_REVIEW.md:1260 Allocates a 16-byte object into *off_211DFA0 and fills 4 fields from resource loads (sub_204799C with sub_20B49BC/48B4/4A44). Cup-mark setup. [REVIEW]
- docs/function_notes/hk_29.md:47 Allocates a 16-byte object into *off_211DFA0 and fills 4 fields from resource loads (sub_204799C with sub_20B49BC/48B4/4A44). Cup-mark setup. [REVIEW]
sub_211DFB4
export/plan0/arm9_main/sub_211DFB4_0211DFB4.c
- docs/function_notes.md:1000 same as sub_211DF44 for the second 16-byte cup-mark object at off_211E010
- docs/function_notes/NEEDS_REVIEW.md:1261 Same as sub_211DF44 for a second 16-byte cup-mark object at *off_211E010. [REVIEW]
- docs/function_notes/hk_29.md:48 Same as sub_211DF44 for a second 16-byte cup-mark object at *off_211E010. [REVIEW]
sub_211E024
export/plan0/arm9_main/sub_211E024_0211E024.c
- docs/function_notes.md:1001 loads three resource values from sub_204799C lookups through sub_20B496C
- docs/function_notes/NEEDS_REVIEW.md:1262 Loads three resource values (sub_204799C with sub_20B496C / 48EC / 4A7C) for the cup-mark graphics and returns the last loader result. [REVIEW]
- docs/function_notes/hk_29.md:49 Loads three resource values (sub_204799C with sub_20B496C / 48EC / 4A7C) for the cup-mark graphics and returns the last loader result. [REVIEW]
sub_211E074
export/plan0/arm9_main/sub_211E074_0211E074.c
- docs/function_notes.md:1539 same loader pattern as sub_211E024 with a different table of resource values
- docs/function_notes/NEEDS_REVIEW.md:1263 Same loader pattern as sub_211E024 with a different table (cup_mark_o palette set). [REVIEW]
- docs/function_notes/hk_29.md:50 Same loader pattern as sub_211E024 with a different table (cup_mark_o palette set). [REVIEW]
sub_211E0C4
export/plan0/arm9_main/sub_211E0C4_0211E0C4.c
- docs/function_notes.md:1002 jump dispatcher on a1 (0..4): 0 tail-jumps sub_20442D0, 1 calls its function pointer, other values follow the same switch
- docs/function_notes/NEEDS_REVIEW.md:1264 Jump dispatcher on a1: 0 tail-jumps sub_20442D0, 1 calls fn ptr on sub_204419C result, 2 calls sub_2044060, 4 calls sub_2043FB0. [REVIEW]
- docs/function_notes/hk_29.md:51 Jump dispatcher on a1: 0 tail-jumps sub_20442D0, 1 calls fn ptr on sub_204419C result, 2 calls sub_2044060, 4 calls sub_2043FB0. [REVIEW]
sub_211E130
export/plan0/arm9_main/sub_211E130_0211E130.c
- docs/function_notes.md:1533 returns TRUE when sub_211E160(0) or sub_211E160(1) is set
- docs/function_notes/NEEDS_REVIEW.md:1265 Returns TRUE when sub_211E160(0), sub_211E160(1) and sub_211E160(2) are all zero (no slot is valid). [REVIEW]
- docs/function_notes/hk_29.md:52 Returns TRUE when sub_211E160(0), sub_211E160(1) and sub_211E160(2) are all zero (no slot is valid). [REVIEW]
sub_211E160
export/plan0/arm9_main/sub_211E160_0211E160.c
- docs/function_notes.md:1003 switch on a1 (0..4): slot 0 checks the roster record through sub_204684C and sub_206174C; slot 1 checks the word at +16 != -1; slot 2 checks sub_2060228 and sub_20908D0
- docs/function_notes/NEEDS_REVIEW.md:1266 Switch on a1: 0 checks valid flag of roster record 48*sub_204684C() at off_211E1EC; 1 checks slot != -1; 2 checks sub_2060228/sub_20908D0; 4 TRUE. [REVIEW]
- docs/function_notes/hk_29.md:53 Switch on a1: 0 checks valid flag of roster record 48*sub_204684C() at off_211E1EC; 1 checks slot != -1; 2 checks sub_2060228/sub_20908D0; 4 TRUE. [REVIEW]
sub_211E1F0
export/plan0/arm9_main/sub_211E1F0_0211E1F0.c
- docs/function_notes.md:1004 switch on a1 (0..2): returns the sub_2061678 result for the record of roster slot a1, or -1
- docs/function_notes/NEEDS_REVIEW.md:1267 Switch on a1 (0,1,2): returns sub_2061678 of the record at the same roster offsets (48-byte stride, position from sub_204684C); default -1. [REVIEW]
- docs/function_notes/hk_29.md:54 Switch on a1 (0,1,2): returns sub_2061678 of the record at the same roster offsets (48-byte stride, position from sub_204684C); default -1. [REVIEW]
sub_211E274
export/plan0/arm9_main/sub_211E274_0211E274.c
- docs/function_notes.md:1005 same as sub_211E1F0 but reads the record through sub_206169C
- docs/function_notes/NEEDS_REVIEW.md:1268 Same as sub_211E1F0 but reads through sub_206169C and table off_211E2F0. [REVIEW]
- docs/function_notes/hk_29.md:55 Same as sub_211E1F0 but reads through sub_206169C and table off_211E2F0. [REVIEW]
sub_211E2F8
export/plan0/arm9_main/sub_211E2F8_0211E2F8.c
- docs/function_notes.md:1006 switch on a1 (0..2): copies a 48-byte roster record via the helper for slot a1
- docs/function_notes/NEEDS_REVIEW.md:1269 Switch on a1 (0,1,2) copies a 48-byte roster record via sub_20616C0 to a 32-byte buffer, clears a2[0..31], copies 20 bytes via sub_214CFFC. [REVIEW]
- docs/function_notes/hk_29.md:56 Switch on a1 (0,1,2) copies a 48-byte roster record via sub_20616C0 to a 32-byte buffer, clears a2[0..31], copies 20 bytes via sub_214CFFC. [REVIEW]
sub_211E38C
export/plan0/arm9_main/sub_211E38C_0211E38C.c
- docs/function_notes.md:1007 switch on a1 (0..2): picks a 48-byte roster record and calls its handler through a function pointer
- docs/function_notes/NEEDS_REVIEW.md:1270 Switch on a1 (0,1,2): picks a 48-byte roster record and calls sub_2061704 on it with a2; case 1 then calls a function pointer on the result. [REVIEW]
- docs/function_notes/hk_29.md:57 Switch on a1 (0,1,2): picks a 48-byte roster record and calls sub_2061704 on it with a2; case 1 then calls a function pointer on the result. [REVIEW]
sub_211E418
export/plan0/arm9_main/sub_211E418_0211E418.c
- docs/function_notes.md:1544 sets the target id +12 of off_211E46C to a1 and scans up to 10 entries for it
- docs/function_notes/NEEDS_REVIEW.md:1271 Sets target id +12 of off_211E46C, scans up to 10 roster entries for one with matching sub_2061654 id and valid; stores index at +16 (-1 if none). [REVIEW]
- docs/function_notes/hk_29.md:58 Sets target id +12 of off_211E46C, scans up to 10 roster entries for one with matching sub_2061654 id and valid; stores index at +16 (-1 if none). [REVIEW]
sub_211E474
export/plan0/arm9_main/sub_211E474_0211E474.c
- docs/function_notes/hk_29.md:59 Returns off_211E47C and zeroes it (take-and-clear).
sub_211E480
export/plan0/arm9_main/sub_211E480_0211E480.c
- docs/function_notes.md:1008 allocates a 20-byte record into *off_211E4E4 and fills its fields from sub_2061644(a1)
- docs/function_notes/NEEDS_REVIEW.md:1272 Allocates a 20-byte record into *off_211E4E4, fills 3 fields from sub_2061644/206152C/2061418 with sync calls; then sub_2090920. Friend record setup. [REVIEW]
- docs/function_notes/hk_29.md:60 Allocates a 20-byte record into *off_211E4E4, fills 3 fields from sub_2061644/206152C/2061418 with sync calls; then sub_2090920. Friend record setup. [REVIEW]
sub_211E4E8
export/plan0/arm9_main/sub_211E4E8_0211E4E8.c
- docs/function_notes/hk_29.md:61 Converts two fields (+60/+64 of off_211E50C) into masked 16.16 values stored at off_211E514 and off_211E518.
sub_211E51C
export/plan0/arm9_main/sub_211E51C_0211E51C.c
- docs/function_notes.md:1009 per-frame menu/results update of off_211E650: copies +48 to +44 and dispatches on that state
- docs/function_notes/NEEDS_REVIEW.md:1273 Per-frame menu/results update of off_211E650: copies +48 to +44, dispatches sub_211E65C/7C0, draws (sub_2124C30), returns 1/2 from timer +52. [REVIEW]
- docs/function_notes/hk_29.md:62 Per-frame menu/results update of off_211E650: copies +48 to +44, dispatches sub_211E65C/7C0, draws (sub_2124C30), returns 1/2 from timer +52. [REVIEW]
sub_211E65C
export/plan0/arm9_main/sub_211E65C_0211E65C.c
- docs/function_notes.md:1010 animates a background panel off_211E7A4: bumps the timer at +52 and computes two offsets, skipped when the state at off_211E7A8 is 2
- docs/function_notes/NEEDS_REVIEW.md:1274 Animates a background panel: bumps +52 timer, computes two fade values via sub_20AE4C0, writes them into cell flags of two layers. [REVIEW]
- docs/function_notes/hk_29.md:63 Animates a background panel: bumps +52 timer, computes two fade values via sub_20AE4C0, writes them into cell flags of two layers. [REVIEW]
sub_211E7C0
export/plan0/arm9_main/sub_211E7C0_0211E7C0.c
- docs/function_notes.md:1011 same as sub_211E65C for off_211E908 with the offsets (0, 192) and (-192, -32)
- docs/function_notes/NEEDS_REVIEW.md:1275 Same as sub_211E65C with offsets (0,192) and (-192,-32) for the other panel object off_211E908. [REVIEW]
- docs/function_notes/hk_29.md:64 Same as sub_211E65C with offsets (0,192) and (-192,-32) for the other panel object off_211E908. [REVIEW]
sub_211E924
export/plan0/arm9_main/sub_211E924_0211E924.c
- docs/function_notes.md:1012 destructor-like: calls sub_211F498 when the state at off_211E950 is 2, otherwise sub_211DE34
- docs/function_notes/NEEDS_REVIEW.md:1276 Destructor-like: calls sub_211F498 (if touch flag 2) or sub_211DE34, frees the object at +40 via sub_2036AB0, zeroes off_211E954 and returns it. [REVIEW]
- docs/function_notes/hk_29.md:65 Destructor-like: calls sub_211F498 (if touch flag 2) or sub_211DE34, frees the object at +40 via sub_2036AB0, zeroes off_211E954 and returns it. [REVIEW]
sub_211E958
export/plan0/arm9_main/sub_211E958_0211E958.c
- docs/function_notes.md:1580 constructor for the menu/dialog screen object off_211EB08 (414 bytes): sets the display flags and allocates the sub-objects
- docs/function_notes/NEEDS_REVIEW.md:1277 Constructor for menu/dialog screen object off_211EB08 (84 bytes): allocs, sets fields, builds layout (sub_211EFEC, text loops), calls sub_211ED80/EB28/EC54. [REVIEW]
- docs/function_notes/hk_29.md:66 Constructor for menu/dialog screen object off_211EB08 (84 bytes): allocs, sets fields, builds layout (sub_211EFEC, text loops), calls sub_211ED80/EB28/EC54. [REVIEW]
sub_211EB28
export/plan0/arm9_main/sub_211EB28_0211EB28.c
- docs/function_notes.md:1013 sets state +48 = 1 and +52 = 0 on object off_211EC38 and, when the touch flag is set, runs the touch handler
- docs/function_notes/NEEDS_REVIEW.md:1278 Sets state +48=1, +52=0 on off_211EC38 and, when touch flag is not 2, positions the panel cells at 192 and -32 (sub_211EB28 cell layout). [REVIEW]
- docs/function_notes/hk_29.md:67 Sets state +48=1, +52=0 on off_211EC38 and, when touch flag is not 2, positions the panel cells at 192 and -32 (sub_211EB28 cell layout). [REVIEW]
sub_211EC54
export/plan0/arm9_main/sub_211EC54_0211EC54.c
- docs/function_notes.md:1138 counterpart of sub_211EB28 on off_211ED64: resets the state fields (+48 = 0 and the related words)
- docs/function_notes/NEEDS_REVIEW.md:1279 Counterpart of sub_211EB28 on off_211ED64: sets +48=0, +52=0 and positions cells at 0 and -192. [REVIEW]
- docs/function_notes/hk_29.md:68 Counterpart of sub_211EB28 on off_211ED64: sets +48=0, +52=0 and positions cells at 0 and -192. [REVIEW]
sub_211ED80
export/plan0/arm9_main/sub_211ED80_0211ED80.c
- docs/function_notes.md:1139 per-frame layout of the results panel (566 bytes): clears or sets the panel cells, skipped when the state at off_211EFB8 is 2
- docs/function_notes/NEEDS_REVIEW.md:1280 Per-frame layout of the results panel: clears/sets cell flags for 16 entries, picks tiles via sub_211DE00, draws 4 BMG text entries; sets +56=1. [REVIEW]
- docs/function_notes/hk_29.md:69 Per-frame layout of the results panel: clears/sets cell flags for 16 entries, picks tiles via sub_211DE00, draws 4 BMG text entries; sets +56=1. [REVIEW]
sub_211EFEC
export/plan0/arm9_main/sub_211EFEC_0211EFEC.c
- docs/function_notes.md:1140 builds the results-screen widgets (540 bytes): loads values with sub_204799C and the sub_20B helpers into the widget structs
- docs/function_notes/NEEDS_REVIEW.md:1281 Builds results-screen widgets: loads values via sub_204799C/sub_20B4934-type loaders into off_211F218 (+4..+32), issues sub_2016468 DMA per player rect. [REVIEW]
- docs/function_notes/hk_29.md:70 Builds results-screen widgets: loads values via sub_204799C/sub_20B4934-type loaders into off_211F218 (+4..+32), issues sub_2016468 DMA per player rect. [REVIEW]
sub_211F244
export/plan0/arm9_main/sub_211F244_0211F244.c
- docs/function_notes.md:1032 wrapper: loads one 2D resource through sub_2124748 from table off_211F2A4[a1], block 14 or 30 by the a7 flag
- docs/function_notes/NEEDS_REVIEW.md:1282 Wrapper: loads 2D resource (sub_2124748) from off_211F2A4[a1], DMAs 32 bytes at 32*a6 from tile table off_211F2A8[a2]; palette 14 or 30 by a7. [REVIEW]
- docs/function_notes/hk_29.md:72 Wrapper: loads 2D resource (sub_2124748) from off_211F2A4[a1], DMAs 32 bytes at 32*a6 from tile table off_211F2A8[a2]; palette 14 or 30 by a7. [REVIEW]
sub_211F2AC
export/plan0/arm9_main/sub_211F2AC_0211F2AC.c
- docs/function_notes/hk_29.md:73 Returns off_211F2B4 and zeroes it (take-and-clear).
sub_211F2B8
export/plan0/arm9_main/sub_211F2B8_0211F2B8.c
- docs/function_notes.md:1033 allocates a 16-byte object into *off_211F314 and fills its four fields from sub_204799C lookups via sub_20B49BC
- docs/function_notes/NEEDS_REVIEW.md:1283 Allocates a 16-byte object into *off_211F314 and fills 4 fields from resource loads (sub_204799C with sub_20B49BC/48B4/4A44). Trophy icon setup. [REVIEW]
- docs/function_notes/hk_29.md:74 Allocates a 16-byte object into *off_211F314 and fills 4 fields from resource loads (sub_204799C with sub_20B49BC/48B4/4A44). Trophy icon setup. [REVIEW]
sub_211F328
export/plan0/arm9_main/sub_211F328_0211F328.c
- docs/function_notes.md:1017 loads three resource values: sub_204799C lookups fed to sub_20B496C, sub_20B48EC and a third helper
- docs/function_notes/NEEDS_REVIEW.md:1284 Loads three resource values (sub_204799C with sub_20B496C / 48EC / 4A7C) and returns the sub_20B4A7C result. Trophy-icon loader helper. [REVIEW]
- docs/function_notes/hk_29.md:75 Loads three resource values (sub_204799C with sub_20B496C / 48EC / 4A7C) and returns the sub_20B4A7C result. Trophy-icon loader helper. [REVIEW]
sub_211F378
export/plan0/arm9_main/sub_211F378_0211F378.c
- docs/function_notes/hk_29.md:76 Thunk: tail-calls the function pointer at off_211F37C.
sub_211F380
export/plan0/arm9_main/sub_211F380_0211F380.c
- docs/function_notes.md:1018 calls sub_211F598 for a value, then tail-calls sub_211F5D0 with it
- docs/function_notes/NEEDS_REVIEW.md:1285 Calls sub_211F598 to get a value, then sub_211F5D0 with it (state update on the strip object). [REVIEW]
- docs/function_notes/hk_29.md:77 Calls sub_211F598 to get a value, then sub_211F5D0 with it (state update on the strip object). [REVIEW]
sub_211F394
export/plan0/arm9_main/sub_211F394_0211F394.c
- docs/function_notes/hk_29.md:78 Thunk: tail-calls the function pointer at off_211F398 with a1.
sub_211F39C
export/plan0/arm9_main/sub_211F39C_0211F39C.c
- docs/function_notes.md:1019 refreshes the info/result strip object off_211F3E4: copies +32 to +28 and dispatches to sub_211F3E8 (state 2) or sub_211F440
- docs/function_notes/NEEDS_REVIEW.md:1286 Refresh of info/result strip object off_211F3E4: copies +32 to +28, dispatches sub_211F440 or sub_211F3E8, then sub_2116D24 and sub_2124C30 draw. [REVIEW]
- docs/function_notes/hk_29.md:79 Refresh of info/result strip object off_211F3E4: copies +32 to +28, dispatches sub_211F440 or sub_211F3E8, then sub_2116D24 and sub_2124C30 draw. [REVIEW]
sub_211F3E8
export/plan0/arm9_main/sub_211F3E8_0211F3E8.c
- docs/function_notes.md:1020 animation tick on object off_211F438: bumps +36, writes sub_20AE4C0 (192 base) into the cell rows
- docs/function_notes/NEEDS_REVIEW.md:1287 Animation tick on off_211F438: increments +36, sets cell position at row +14 from sub_20AE4C0; at count >= 10 calls sub_211F5D0 to finish. [REVIEW]
- docs/function_notes/hk_29.md:80 Animation tick on off_211F438: increments +36, sets cell position at row +14 from sub_20AE4C0; at count >= 10 calls sub_211F5D0 to finish. [REVIEW]
sub_211F440
export/plan0/arm9_main/sub_211F440_0211F440.c
- docs/function_notes.md:1021 mirror of sub_211F3E8 on off_211F490 with the 192 base on the other axis
- docs/function_notes/NEEDS_REVIEW.md:1288 Mirror of sub_211F3E8 using sub_20AE4C0(1,192,0,...) on off_211F490. [REVIEW]
- docs/function_notes/hk_29.md:81 Mirror of sub_211F3E8 using sub_20AE4C0(1,192,0,...) on off_211F490. [REVIEW]
sub_211F498
export/plan0/arm9_main/sub_211F498_0211F498.c
- docs/function_notes/hk_29.md:82 Calls sub_2116DC8, then returns off_211F4AC and zeroes it (destructor-like).
sub_211F4B0
export/plan0/arm9_main/sub_211F4B0_0211F4B0.c
- docs/function_notes.md:1141 creates a 40-byte strip/message object into off_211F58C
- docs/function_notes/NEEDS_REVIEW.md:1289 Creates a 40-byte strip/message object (off_211F58C): sets +28/+24, text layout (sub_2124ED0, sub_2148CA0, sub_21243AC), BMG 121 text, sub_211F39C. [REVIEW]
- docs/function_notes/hk_29.md:83 Creates a 40-byte strip/message object (off_211F58C): sets +28/+24, text layout (sub_2124ED0, sub_2148CA0, sub_21243AC), BMG 121 text, sub_211F39C. [REVIEW]
sub_211F598
export/plan0/arm9_main/sub_211F598_0211F598.c
- docs/function_notes.md:1022 sets state +32 = 2 and +36 = 0 on object off_211F5C8, clears the strip cells, returns 0
- docs/function_notes/NEEDS_REVIEW.md:1290 Sets state +32=2 and +36=0 on off_211F5C8 and clears the strip cell flag (dword_211F5CC and row +14). Hides the strip. [REVIEW]
- docs/function_notes/hk_29.md:84 Sets state +32=2 and +36=0 on off_211F5C8 and clears the strip cell flag (dword_211F5CC and row +14). Hides the strip. [REVIEW]
sub_211F5D0
export/plan0/arm9_main/sub_211F5D0_0211F5D0.c
- docs/function_notes/hk_29.md:85 Sets state +32=1 and +36=0 on off_211F5E0, returns that object pointer.
sub_211F5E4
export/plan0/arm9_main/sub_211F5E4_0211F5E4.c
- docs/function_notes.md:1023 sets state +32 = 0 and +36 = 0 on object off_211F614, sets the cell flags to 192 and returns the cell pointer
- docs/function_notes/NEEDS_REVIEW.md:1291 Sets state +32=0 and +36=0 on off_211F614, sets a cell flag 192 at dword_211F618 and row +14, returns the cell pointer. [REVIEW]
- docs/function_notes/hk_29.md:86 Sets state +32=0 and +36=0 on off_211F614, sets a cell flag 192 at dword_211F618 and row +14, returns the cell pointer. [REVIEW]
sub_211F61C
export/plan0/arm9_main/sub_211F61C_0211F61C.c
- docs/function_notes.md:1034 loads four values via sub_204799C lookups through sub_20B48B4, sub_20B49BC and sub_20B4A44
- docs/function_notes/NEEDS_REVIEW.md:1292 Loads 4 values (sub_204799C with sub_20B48B4/49BC/4A44, direct stores into off_211F69C), issues sub_2016468 DMA (ids 35, 30) for name/palette. [REVIEW]
- docs/function_notes/hk_29.md:87 Loads 4 values (sub_204799C with sub_20B48B4/49BC/4A44, direct stores into off_211F69C), issues sub_2016468 DMA (ids 35, 30) for name/palette. [REVIEW]
sub_211F6B0
export/plan0/arm9_main/sub_211F6B0_0211F6B0.c
- docs/function_notes/hk_29.md:88 Sets the byte flag at +7420 of off_211F6C8 to 1 and returns off_211F6C8+4096. Trivial setter.
sub_211F6CC
export/plan0/arm9_main/sub_211F6CC_0211F6CC.c
- docs/function_notes/hk_29.md:89 Stores byte a2 at *off_211F6E4 + a1 + 4096 + 3264 (per-index byte array). Trivial setter.
sub_211F6E8
export/plan0/arm9_main/sub_211F6E8_0211F6E8.c
- docs/function_notes.md:623 sends a request (sub_2060510, sub_2060C0C, sub_2060B68, sub_205EDF8), then busy-waits while the flag at (*off_211F774)+40 is set or the reply pending at +12/+16 is nonzero; returns 1
- docs/function_notes/NEEDS_REVIEW.md:1293 Starts a request via sub_2060510/sub_2060C0C/sub_2060B68/sub_205EDF8, busy-waits on off_211F774 flags, returns 1 (64-bit). [REVIEW]
- docs/function_notes/hk_29.md:90 Starts a request via sub_2060510/sub_2060C0C/sub_2060B68/sub_205EDF8, busy-waits on off_211F774 flags, returns 1 (64-bit). [REVIEW]
sub_211F77C
export/plan0/arm9_main/sub_211F77C_0211F77C.c
- docs/function_notes.md:1142 mode setter for the stage object off_211F858: when a1 is set calls sub_219C0C0 and sub_21A37A8
- docs/function_notes/NEEDS_REVIEW.md:1294 Mode setter for stage object off_211F858: a1 path sets state +7980=7; else sets +7420, loops sub_2152340 over sub_219D97C count, sets +7980=5. [REVIEW]
- docs/function_notes/hk_29.md:91 Mode setter for stage object off_211F858: a1 path sets state +7980=7; else sets +7420, loops sub_2152340 over sub_219D97C count, sets +7980=5. [REVIEW]
sub_211F864
export/plan0/arm9_main/sub_211F864_0211F864.c
- docs/function_notes.md:1143 when a1 is set sets +7980 = 6 on the state at *off_211F910 + 4096; otherwise checks sub_21525E0 first
- docs/function_notes/NEEDS_REVIEW.md:1295 If a1, sets +7980=6; else if sub_21525E0 passes, runs sub_21525A8 and a 64-byte copy (sub_214D1FC), sub_2056D40, then sets +7980=3. [REVIEW]
- docs/function_notes/hk_29.md:92 If a1, sets +7980=6; else if sub_21525E0 passes, runs sub_21525A8 and a 64-byte copy (sub_214D1FC), sub_2056D40, then sets +7980=3. [REVIEW]
sub_211F91C
export/plan0/arm9_main/sub_211F91C_0211F91C.c
- docs/function_notes.md:1144 state-machine dispatcher on off_211FA50 +7980: case 1 calls sub_211FA70 and the other states call their handlers
- docs/function_notes/NEEDS_REVIEW.md:1296 State-machine dispatcher on off_211FA50 +7980: case 1 calls sub_211FA70, case 3 waits on sub_219BDB8 and sets state 4/7, case 6 sets 7. [REVIEW]
- docs/function_notes/hk_29.md:93 State-machine dispatcher on off_211FA50 +7980: case 1 calls sub_211FA70, case 3 waits on sub_219BDB8 and sets state 4/7, case 6 sets 7. [REVIEW]
sub_211FA70
export/plan0/arm9_main/sub_211FA70_0211FA70.c
- docs/function_notes.md:624 sub-state update: when sub_21A38A4() is zero returns sub_21A3850(); if sub_21A37DC() == 4 starts sub_219BE74 and sets state word +7980 = 2; if == 7 stores sub_219C398 into +8004, runs sub_21A37A8(sub_219C0C0()) and sets +7980 = 7
- docs/function_notes/NEEDS_REVIEW.md:1297 Sub-state update: sub_21A37DC==4 starts sub_219BE74 and sets state 2; ==7 stores sub_219C398 into +8004 and sets state 7. [REVIEW]
- docs/function_notes/hk_29.md:94 Sub-state update: sub_21A37DC==4 starts sub_219BE74 and sets state 2; ==7 stores sub_219C398 into +8004 and sets state 7. [REVIEW]
sub_211FB44
export/plan0/arm9_main/sub_211FB44_0211FB44.c
- docs/function_notes.md:1145 initialises the transition/screen object off_211FCFC by zeroing its blocks (16, 848 and dword_211FD0C bytes) with sub_214D168
- docs/function_notes/NEEDS_REVIEW.md:1298 Initializes transition/screen object off_211FCFC: zeroes buffers, copies palette, sub_219C1B0 draw, clears +8004/+8008, sets state +7980=1. [REVIEW]
- docs/function_notes/hk_29.md:95 Initializes transition/screen object off_211FCFC: zeroes buffers, copies palette, sub_219C1B0 draw, clears +8004/+8008, sets state +7980=1. [REVIEW]
sub_211FD28
export/plan0/arm9_main/sub_211FD28_0211FD28.c
- docs/function_notes.md:625 calls sub_219C0C0, sub_21A37A8 and sub_2120714, sets the control at off_211FD64+8 (+16 = 0, +18 = 1) and returns 1
- docs/function_notes/NEEDS_REVIEW.md:1299 Calls sub_219C0C0, sub_21A37A8 and sub_2120714, then sets the control at off_211FD64+8 (+16=0, +18=1) and returns 1. Action start. [REVIEW]
- docs/function_notes/hk_29.md:96 Calls sub_219C0C0, sub_21A37A8 and sub_2120714, then sets the control at off_211FD64+8 (+16=0, +18=1) and returns 1. Action start. [REVIEW]
sub_211FD68
export/plan0/arm9_main/sub_211FD68_0211FD68.c
- docs/function_notes/hk_29.md:97 Polls state +7980 of off_211FDA4: returns 1 for state 5, -1 for state 7, else 0.
sub_211FDA8
export/plan0/arm9_main/sub_211FDA8_0211FDA8.c
- docs/function_notes.md:1146 returns 1 when the word at off_211FE14 +22 is zero; otherwise returns the sub_21A3748 check
- docs/function_notes/NEEDS_REVIEW.md:1300 If off_211FE14 +22 is zero returns 1; else sub_21A3748 and, if it yields an object, sub_2120714 and sets control +16=0/+18=1, returns 1; else 0. [REVIEW]
- docs/function_notes/hk_29.md:98 If off_211FE14 +22 is zero returns 1; else sub_21A3748 and, if it yields an object, sub_2120714 and sets control +16=0/+18=1, returns 1; else 0. [REVIEW]
sub_211FE18
export/plan0/arm9_main/sub_211FE18_0211FE18.c
- docs/function_notes/hk_29.md:99 Thunk: tail-calls the function pointer at off_211FE20.
sub_211FE24
export/plan0/arm9_main/sub_211FE24_0211FE24.c
- docs/function_notes/hk_29.md:100 Sets the control at *off_211FE40+8: +16=1, +18=1 and returns that pointer. Trivial setter.
sub_211FE44
export/plan0/arm9_main/sub_211FE44_0211FE44.c
- docs/function_notes.md:1147 when +7420 of *off_211FEE4 is set calls sub_2060C0C on the block at +dword_211FEE8
- docs/function_notes/NEEDS_REVIEW.md:1301 If +7420 of *off_211FEE4 is set: sub_2060C0C, sub_2060B68, sub_205EDF8, busy-waits on off_211FEEC flags, then clears +7420 (counterpart of sub_211F6E8). [REVIEW]
- docs/function_notes/hk_29.md:101 If +7420 of *off_211FEE4 is set: sub_2060C0C, sub_2060B68, sub_205EDF8, busy-waits on off_211FEEC flags, then clears +7420 (counterpart of sub_211F6E8). [REVIEW]
sub_211FEF4
export/plan0/arm9_main/sub_211FEF4_0211FEF4.c
- docs/function_notes.md:1148 when *off_211FF70 +22 == 5 and +7992 is set, calls a handler for the block
- docs/function_notes/NEEDS_REVIEW.md:1302 If *off_211FF70 +22 == 5 and +7992 is set, calls sub_219BB1C then sub_2121990 and falls back to sub_205B504(a1, a2) when it fails. Event dispatch. [REVIEW]
- docs/function_notes/hk_29.md:102 If *off_211FF70 +22 == 5 and +7992 is set, calls sub_219BB1C then sub_2121990 and falls back to sub_205B504(a1, a2) when it fails. Event dispatch. [REVIEW]
sub_211FF74
export/plan0/arm9_main/sub_211FF74_0211FF74.c
- docs/function_notes.md:1024 when the word at *off_211FFA8[0] +7992 is set, clears bit 2 of the halfword at off_211FFAC +1884 and returns the +1792 pointer
- docs/function_notes/NEEDS_REVIEW.md:1303 If +7992 of *off_211FFA8[0] is set, clears bit 2 (&= ~4) of the halfword at +1884 of off_211FFAC+1792. Flag clear. [REVIEW]
- docs/function_notes/hk_29.md:103 If +7992 of *off_211FFA8[0] is set, clears bit 2 (&= ~4) of the halfword at +1884 of off_211FFAC+1792. Flag clear. [REVIEW]
sub_211FFB0
export/plan0/arm9_main/sub_211FFB0_0211FFB0.c
- docs/function_notes.md:1025 when a2 is nonzero brackets sub_2036B30(object, a2) with sub_200FCA0 and sub_200FCB4 (lock and unlock)
- docs/function_notes/NEEDS_REVIEW.md:1304 If a2 is non-zero, brackets sub_2036B30(object, a2) with sub_200FCA0/sub_200FCB4 (lock/unlock wrapper). [REVIEW]
- docs/function_notes/hk_29.md:104 If a2 is non-zero, brackets sub_2036B30(object, a2) with sub_200FCA0/sub_200FCB4 (lock/unlock wrapper). [REVIEW]
sub_211FFFC
export/plan0/arm9_main/sub_211FFFC_0211FFFC.c
- docs/function_notes.md:1026 same lock/unlock bracket around sub_2036B74(object, a2, a3); returns its result
- docs/function_notes/NEEDS_REVIEW.md:1305 Same lock/unlock bracket as sub_211FFB0 around sub_2036B74(object, a2, a3), returning its result. [REVIEW]
- docs/function_notes/hk_29.md:105 Same lock/unlock bracket as sub_211FFB0 around sub_2036B74(object, a2, a3), returning its result. [REVIEW]
sub_2120048
export/plan0/arm9_main/sub_2120048_02120048.c
- docs/function_notes/hk_29.md:107 Thunk: tail-calls the function pointer at off_2120050.
sub_2120054
export/plan0/arm9_main/sub_2120054_02120054.c
- docs/function_notes.md:1027 calls sub_21A321C(off_212008C[0]) and sub_21A3208(off_2120090), then sets the two flag words at +16 and +18 of *off_2120094 to 1
- docs/function_notes/NEEDS_REVIEW.md:1306 Calls sub_21A321C(off_212008C[0]) and sub_21A3208(off_2120090), then sets control *off_2120094 (+16=1, +18=1) and returns it. [REVIEW]
- docs/function_notes/hk_29.md:108 Calls sub_21A321C(off_212008C[0]) and sub_21A3208(off_2120090), then sets control *off_2120094 (+16=1, +18=1) and returns it. [REVIEW]
sub_2120098
export/plan0/arm9_main/sub_2120098_02120098.c
- docs/function_notes/hk_29.md:109 Thunk: tail-calls the function pointer at off_21200A0.
sub_21200A8
export/plan0/arm9_main/sub_21200A8_021200A8.c
- docs/function_notes.md:1149 when sub_2120D14() is nonzero sets the control word and returns 1
- docs/function_notes/NEEDS_REVIEW.md:1307 If sub_2120D14() is non-zero, sets control *off_21200EC+8 to +16=4, +18=1 and returns 1. [REVIEW]
- docs/function_notes/hk_29.md:111 If sub_2120D14() is non-zero, sets control *off_21200EC+8 to +16=4, +18=1 and returns 1. [REVIEW]
sub_21200F0
export/plan0/arm9_main/sub_21200F0_021200F0.c
- docs/function_notes/hk_29.md:112 Thunk: tail-calls the function pointer at off_21200F8.
sub_21200FC
export/plan0/arm9_main/sub_21200FC_021200FC.c
- docs/function_notes.md:1150 when sub_211F91C() is nonzero sets the control and returns 1
- docs/function_notes/NEEDS_REVIEW.md:1308 If sub_211F91C() is non-zero, sets control *off_2120140+8 to +16=2, +18=1 and returns 1. [REVIEW]
- docs/function_notes/hk_29.md:113 If sub_211F91C() is non-zero, sets control *off_2120140+8 to +16=2, +18=1 and returns 1. [REVIEW]
sub_2120144
export/plan0/arm9_main/sub_2120144_02120144.c
- docs/function_notes/hk_29.md:114 Thunk: tail-calls the function pointer at off_212014C.
sub_2120150
export/plan0/arm9_main/sub_2120150_02120150.c
- docs/function_notes.md:1151 per-frame tick: when the object at *off_21201E0 has +7984 set, bumps its timer and runs the next step
- docs/function_notes/NEEDS_REVIEW.md:1309 Per-frame tick: if *off_21201E0 has +7984 set, bumps counter +3900 from +7996, and if +22 == 5 with +7992 set calls sub_205CCEC. [REVIEW]
- docs/function_notes/hk_29.md:115 Per-frame tick: if *off_21201E0 has +7984 set, bumps counter +3900 from +7996, and if +22 == 5 with +7992 set calls sub_205CCEC. [REVIEW]
sub_21201E4
export/plan0/arm9_main/sub_21201E4_021201E4.c
- docs/function_notes/hk_29.md:116 Returns the byte at off_21201FC + 580a1 + 1105 (field of a 580-byte per-racer record). Getter.
sub_2120200
export/plan0/arm9_main/sub_2120200_02120200.c
- docs/function_notes/hk_29.md:117 Stores 16-bit a2 at +1086 of the 580-byte per-racer record a1 (table off_212021C) and returns record+1024. Setter.
sub_2120220
export/plan0/arm9_main/sub_2120220_02120220.c
- docs/function_notes/hk_29.md:118 Returns the signed 16-bit field +1086 of the 580-byte per-racer record a1 (table off_212023C). Getter.
sub_2120240
export/plan0/arm9_main/sub_2120240_02120240.c
- docs/function_notes/hk_29.md:119 Returns the dword at +1112 of the 580-byte per-racer record a1 (table off_2120258). Getter.
sub_212025C
export/plan0/arm9_main/sub_212025C_0212025C.c
- docs/function_notes/hk_30.md:3 getter, returns 32-bit field at +1108 of per-slot record a1 (580-byte stride, table base via *off_2120274)
sub_2120278
export/plan0/arm9_main/sub_2120278_02120278.c
- docs/function_notes/hk_30.md:4 getter, returns byte at +1084 of per-slot record a1 (580-byte stride)
sub_2120294
export/plan0/arm9_main/sub_2120294_02120294.c
- docs/function_notes/hk_30.md:5 returns address of sub-struct +572 inside per-slot record a1 (580-byte stride)
sub_21202B0
export/plan0/arm9_main/sub_21202B0_021202B0.c
- docs/function_notes/hk_30.md:6 returns address of sub-struct +552 inside per-slot record a1 (580-byte stride)
sub_21202CC
export/plan0/arm9_main/sub_21202CC_021202CC.c
- docs/function_notes.md:626 returns the low nibble of byte +1104 of the slot record (580-byte stride from *off_21202EC) for slot a1 (the racer or character id)
- docs/function_notes/NEEDS_REVIEW.md:1310 returns low nibble of byte +1104 of per-slot record a1 (racer/character id, compared elsewhere) [REVIEW]
- docs/function_notes/hk_30.md:7 returns low nibble of byte +1104 of per-slot record a1 (racer/character id, compared elsewhere) [REVIEW]
sub_21202F0
export/plan0/arm9_main/sub_21202F0_021202F0.c
- docs/function_notes/hk_30.md:8 returns address of +1088 inside per-slot record a1 (580-byte stride)
sub_212030C
export/plan0/arm9_main/sub_212030C_0212030C.c
- docs/function_notes/hk_30.md:9 returns address of slot record a1 (+552) if bit a1 is set in byte +8021 of the base struct, else 0
sub_2120340
export/plan0/arm9_main/sub_2120340_02120340.c
- docs/function_notes/hk_30.md:10 thunk, tail-calls through function pointer off_2120348 with 4 args
sub_212034C
export/plan0/arm9_main/sub_212034C_0212034C.c
- docs/function_notes.md:1152 per-frame tick of a state object: when the pending field at off_21203F8 is set, runs its handler through off_21203FC
- docs/function_notes/NEEDS_REVIEW.md:1311 per-frame tick of a state object; if the pending flag is clear, calls sub_219BEDC, optional sub_219C398 sample into +8004, calls sub_2120404 when word +22 set, returns sub_2046B40(base+8) [REVIEW]
- docs/function_notes/hk_30.md:11 per-frame tick of a state object; if the pending flag is clear, calls sub_219BEDC, optional sub_219C398 sample into +8004, calls sub_2120404 when word +22 set, returns sub_2046B40(base+8) [REVIEW]
sub_2120404
export/plan0/arm9_main/sub_2120404_02120404.c
- docs/function_notes.md:1153 appends a sample (the sub_219DA74 result) to the 60-entry ring at +8023 of the state block, wrapping to 0 at 60
- docs/function_notes/NEEDS_REVIEW.md:1312 appends a sample (sub_219DA74 result) to a 60-entry ring buffer at +7360 (index byte +8023), then counts entries equal to 4 into byte +6477 [REVIEW]
- docs/function_notes/hk_30.md:12 appends a sample (sub_219DA74 result) to a 60-entry ring buffer at +7360 (index byte +8023), then counts entries equal to 4 into byte +6477 [REVIEW]
sub_21204D0
export/plan0/arm9_main/sub_21204D0_021204D0.c
- docs/function_notes/hk_30.md:13 init helper; calls sub_2120714 (reset), sets int +7988=1, halfwords +16=0 and +18=1 on state word +8, returns base+8
sub_2120514
export/plan0/arm9_main/sub_2120514_02120514.c
- docs/function_notes.md:1154 teardown: when the object at *off_2120554 exists calls sub_201797C on it
- docs/function_notes/NEEDS_REVIEW.md:1313 thumb teardown/stop: if object at *off_2120554 exists, calls sub_201797C and frees via sub_20364E8/sub_20364E0/sub_2036B30; clears +dword_2120558; sets state flags +16/+18; returns 1 [REVIEW]
- docs/function_notes/hk_30.md:14 thumb teardown/stop: if object at *off_2120554 exists, calls sub_201797C and frees via sub_20364E8/sub_20364E0/sub_2036B30; clears +dword_2120558; sets state flags +16/+18; returns 1 [REVIEW]
sub_212055C
export/plan0/arm9_main/sub_212055C_0212055C.c
- docs/function_notes.md:1155 creates a 32-byte object via sub_2036B74 and stores it at +4 of the object at off_212059C
- docs/function_notes/NEEDS_REVIEW.md:1314 thumb create: sub_2036B74 object (32 bytes) stored at +4, sub_2017988 result stored at base, flag word set to 1, then sub_21A3710 call [REVIEW]
- docs/function_notes/hk_30.md:15 thumb create: sub_2036B74 object (32 bytes) stored at +4, sub_2017988 result stored at base, flag word set to 1, then sub_21A3710 call [REVIEW]
sub_21205AC
export/plan0/arm9_main/sub_21205AC_021205AC.c
- docs/function_notes.md:1156 creates a 32-byte object via sub_2036B74 into off_21205E0 and sub_2046BE8(obj+8, off_21205E4, 8, 0)
- docs/function_notes/NEEDS_REVIEW.md:1315 thumb create: sub_2036B74 object stored in off_21205E0, sub_2046BE8 init on +8 with 8-byte table, sets state flags +16/+18, returns 1 [REVIEW]
- docs/function_notes/hk_30.md:16 thumb create: sub_2036B74 object stored in off_21205E0, sub_2046BE8 init on +8 with 8-byte table, sets state flags +16/+18, returns 1 [REVIEW]
sub_21205E8
export/plan0/arm9_main/sub_21205E8_021205E8.c
- docs/function_notes/hk_30.md:17 thunk, calls function pointer off_21205F0 with no args
sub_21205F4
export/plan0/arm9_main/sub_21205F4_021205F4.c
- docs/function_notes.md:1157 returns the negated int at +8008 of the state block at *off_212060C
- docs/function_notes/NEEDS_REVIEW.md:1316 returns negated int at +8008 of the base struct [REVIEW]
- docs/function_notes/hk_30.md:18 returns negated int at +8008 of the base struct [REVIEW]
sub_2120610
export/plan0/arm9_main/sub_2120610_02120610.c
- docs/function_notes/hk_30.md:19 clears base fields +8004, +8000, +8008 to 0; returns base+4096 (mode/phase reset)
sub_2120644
export/plan0/arm9_main/sub_2120644_02120644.c
- docs/function_notes.md:1158 state query: when the word at +22 is set, reads the mode at +8004 and compares it with 3, 4 and 6
- docs/function_notes/NEEDS_REVIEW.md:1317 state query; if word +22 set, mode +8004 in {3,4,6,11} returns 3, phase +8000==2 with sub_219BB34()<=1 returns 2 (and sets state), phase==1 returns 1, else 0 [REVIEW]
- docs/function_notes/hk_30.md:20 state query; if word +22 set, mode +8004 in {3,4,6,11} returns 3, phase +8000==2 with sub_219BB34()<=1 returns 2 (and sets state), phase==1 returns 1, else 0 [REVIEW]
sub_2120714
export/plan0/arm9_main/sub_2120714_02120714.c
- docs/function_notes/hk_30.md:21 full reset of the base state block: memsets many sub-buffers (offsets 28, 540, 7424, 848, 272, 16 ...) and zeroes state dwords +7988..+8008 and bytes +8012..+8023
sub_21208E8
export/plan0/arm9_main/sub_21208E8_021208E8.c
- docs/function_notes/hk_30.md:22 sets phase word +8000 = a1; if the new phase is 2, calls sub_21A2C98 and sub_219BBC8 with its result
sub_2120934
export/plan0/arm9_main/sub_2120934_02120934.c
- docs/function_notes.md:1159 phase transition: when a1 is set sets +6376 = 4 on the state at *off_2120A60 + 4096; otherwise the a2 branch
- docs/function_notes/NEEDS_REVIEW.md:1318 phase transition: a1 sets +6376=4, else a2 sets +6376=2; otherwise computes per-slot flags (sub_219BB34 count, bytes +8018/+8019, mask +8021), clears +540 block, sub_219BB1C index, sub_2056464 on slot record, sub_2123A48(0), +6376=3 [REVIEW]
- docs/function_notes/hk_30.md:23 phase transition: a1 sets +6376=4, else a2 sets +6376=2; otherwise computes per-slot flags (sub_219BB34 count, bytes +8018/+8019, mask +8021), clears +540 block, sub_219BB1C index, sub_2056464 on slot record, sub_2123A48(0), +6376=3 [REVIEW]
sub_2120A64
export/plan0/arm9_main/sub_2120A64_02120A64.c
- docs/function_notes.md:1160 candidate score for racer a1: three sub_21A2A54 lookups with the table off_2120B70 and the offsets dword_2120B74/78/7C
- docs/function_notes/NEEDS_REVIEW.md:1319 candidate score for a1 via three sub_21A2A54 lookups; returns 0 if invalid, 2000*k if type 4, 1000-|d| or 2000-|d| for type 1 when |d|<1000 (d from halfword +1086) [REVIEW]
- docs/function_notes/hk_30.md:24 candidate score for a1 via three sub_21A2A54 lookups; returns 0 if invalid, 2000*k if type 4, 1000-|d| or 2000-|d| for type 1 when |d|<1000 (d from halfword +1086) [REVIEW]
sub_2120B80
export/plan0/arm9_main/sub_2120B80_02120B80.c
- docs/function_notes.md:627 predicate: returns 0 when the first sub_21A2A54 lookup is 5 or the second is 3; otherwise true when the first lookup is 3 and the nibble of byte +1104 equals the second lookup
- docs/function_notes/NEEDS_REVIEW.md:1320 predicate; true when sub_21A2A54 lookup type==3 and the racer nibble of +1104 matches the second lookup value [REVIEW]
- docs/function_notes/hk_30.md:25 predicate; true when sub_21A2A54 lookup type==3 and the racer nibble of +1104 matches the second lookup value [REVIEW]
sub_2120C30
export/plan0/arm9_main/sub_2120C30_02120C30.c
- docs/function_notes.md:1161 score helper like sub_2120A64 with the table off_2120D04 and offsets dword_2120D08/0C/10
- docs/function_notes/NEEDS_REVIEW.md:1321 score helper like sub_2120A64: type 1 gives 2000-|d|, type 4 gives 1000-|d|, |d|<1000 using halfword +1086, else 0 [REVIEW]
- docs/function_notes/hk_30.md:26 score helper like sub_2120A64: type 1 gives 2000-|d|, type 4 gives 1000-|d|, |d|<1000 using halfword +1086, else 0 [REVIEW]
sub_2120D14
export/plan0/arm9_main/sub_2120D14_02120D14.c
- docs/function_notes/hk_30.md:27 returns 1 if phase word +6376 == 3, else 0
sub_2120D50
export/plan0/arm9_main/sub_2120D50_02120D50.c
- docs/function_notes.md:1162 big reset/loader for the state block (864 bytes): calls sub_2120610, zeroes 2320 bytes at +540 and calls sub_2056464 at +552
- docs/function_notes/NEEDS_REVIEW.md:1322 big reset/loader for the state block: calls sub_2120610, clears +540 (2320 bytes), copies static 6/5/4/6-byte tables into base, runs sub_21A2A9C/sub_21A2B68 to fill entries, sets +6400, sets a 100-byte buffer via sub_2135014, switches on mode +6404 (0 -> sub_219BC44, 1/3/4 -> sub_219BD5C), sets +6376=1 [REVIEW]
- docs/function_notes/hk_30.md:28 big reset/loader for the state block: calls sub_2120610, clears +540 (2320 bytes), copies static 6/5/4/6-byte tables into base, runs sub_21A2A9C/sub_21A2B68 to fill entries, sets +6400, sets a 100-byte buffer via sub_2135014, switches on mode +6404 (0 -> sub_219BC44, 1/3/4 -> sub_219BD5C), sets +6376=1 [REVIEW]
sub_212111C
export/plan0/arm9_main/sub_212111C_0212111C.c
- docs/function_notes/hk_30.md:29 returns -1 if (flag +6478 set and sub_219BB34()<=1) or state +8004==7; otherwise returns (sub_2121D48() != 0)
sub_2121190
export/plan0/arm9_main/sub_2121190_02121190.c
- docs/function_notes/hk_30.md:30 init helper: calls sub_219BBC8(a1), zeroes four 24-byte blocks and flag bytes +6476..+8022, zeroes a 96-byte block, stores a1 at +6404, sets +6476=4, +6368/+6369, +6372, calls sub_21A2968, sets task halfwords +16=3/+18=1, returns 1
sub_212137C
export/plan0/arm9_main/sub_212137C_0212137C.c
- docs/function_notes/hk_30.md:31 returns 1 if phase word +6376 == 2, else 0
sub_21213A0
export/plan0/arm9_main/sub_21213A0_021213A0.c
- docs/function_notes/hk_30.md:32 returns sub_21A2C30() && (state word +22 == 3)
sub_21213E8
export/plan0/arm9_main/sub_21213E8_021213E8.c
- docs/function_notes/hk_30.md:33 thunk, calls function pointer off_21213F0 with no args
sub_21213F4
export/plan0/arm9_main/sub_21213F4_021213F4.c
- docs/function_notes/hk_30.md:34 returns 1 if byte +6477 (count of type-4 entries in the sample ring) is nonzero
sub_2121418
export/plan0/arm9_main/sub_2121418_02121418.c
- docs/function_notes.md:1163 returns sub_219BB34() as an unsigned byte (the slot count)
- docs/function_notes/NEEDS_REVIEW.md:1323 returns sub_219BB34() as unsigned byte (count of active slots/players) [REVIEW]
- docs/function_notes/hk_30.md:35 returns sub_219BB34() as unsigned byte (count of active slots/players) [REVIEW]
sub_2121434
export/plan0/arm9_main/sub_2121434_02121434.c
- docs/function_notes/hk_30.md:36 returns 1 if sub_21A291C(0) returns 0, else 0
sub_212145C
export/plan0/arm9_main/sub_212145C_0212145C.c
- docs/function_notes.md:1164 per-slot consistency check over the 68-byte slot records (count byte at +8019)
- docs/function_notes/NEEDS_REVIEW.md:1324 per-slot consistency check over 68-byte slot records (fields +7452/+7436 vs +7724/+7708/+7740); on mismatch sets flag +6573, calls sub_21A2C98/sub_219BBC8, sets mode +6480=11 [REVIEW]
- docs/function_notes/hk_30.md:37 per-slot consistency check over 68-byte slot records (fields +7452/+7436 vs +7724/+7708/+7740); on mismatch sets flag +6573, calls sub_21A2C98/sub_219BBC8, sets mode +6480=11 [REVIEW]
sub_2121580
export/plan0/arm9_main/sub_2121580_02121580.c
- docs/function_notes.md:1165 scans the slot mask at +8021 against the flags at +6571 to decide the slot to use
- docs/function_notes/NEEDS_REVIEW.md:1325 scans slot mask +8021 against flags +6571 to decide whether a single pending slot remains; on failure sets flag +6573, calls sub_219BBC8 and mode=11 [REVIEW]
- docs/function_notes/hk_30.md:38 scans slot mask +8021 against flags +6571 to decide whether a single pending slot remains; on failure sets flag +6573, calls sub_219BBC8 and mode=11 [REVIEW]
sub_21216A8
export/plan0/arm9_main/sub_21216A8_021216A8.c
- docs/function_notes.md:1166 cycling iterator over the slots, using the cursor byte at +6572 of the state block
- docs/function_notes/NEEDS_REVIEW.md:1326 cycling iterator over slots using cursor byte +6553 and counter +6572; returns next active slot index or the slot count [REVIEW]
- docs/function_notes/hk_30.md:39 cycling iterator over slots using cursor byte +6553 and counter +6572; returns next active slot index or the slot count [REVIEW]
sub_21217E8
export/plan0/arm9_main/sub_21217E8_021217E8.c
- docs/function_notes/hk_30.md:40 switch gate on event id a1 (0..9): returns 1 if the current mode +6480 is in the allowed range for that event, else 0
sub_2121990
export/plan0/arm9_main/sub_2121990_02121990.c
- docs/function_notes/hk_30.md:41 predicate on an event record: count (<10) at +0, +4 == a2, byte +8 == a3, byte +9 == a4
sub_21219CC
export/plan0/arm9_main/sub_21219CC_021219CC.c
- docs/function_notes.md:1167 fills the 24-byte-entry display/result table from the state block
- docs/function_notes/NEEDS_REVIEW.md:1327 fills a 24-byte-entry display/result table (via sub_2029930) from active slot records (+7744/+7748) for slots in mask +8021; status 0 or 3 [REVIEW]
- docs/function_notes/hk_30.md:42 fills a 24-byte-entry display/result table (via sub_2029930) from active slot records (+7744/+7748) for slots in mask +8021; status 0 or 3 [REVIEW]
sub_2121AF4
export/plan0/arm9_main/sub_2121AF4_02121AF4.c
- docs/function_notes.md:1168 picks a racer index among the racers whose slot value passes the test (uses a 4-entry temporary array and an 80-byte buffer)
- docs/function_notes/NEEDS_REVIEW.md:1328 picks a racer index among those whose slot value (+7752) is the maximum (count tallied in local table), using a multiplicative RNG at off_2121C70+dword_2121C74; stores result at +208 of sub_2029930() [REVIEW]
- docs/function_notes/hk_30.md:43 picks a racer index among those whose slot value (+7752) is the maximum (count tallied in local table), using a multiplicative RNG at off_2121C70+dword_2121C74; stores result at +208 of sub_2029930() [REVIEW]
sub_2121C78
export/plan0/arm9_main/sub_2121C78_02121C78.c
- docs/function_notes/hk_30.md:44 returns 0 if mode +6480 < 5; else 2 if byte +8018 <= 1; else 1
sub_2121CD0
export/plan0/arm9_main/sub_2121CD0_02121CD0.c
- docs/function_notes/hk_30.md:45 returns 1 if mode +6480 >= 10
sub_2121D0C
export/plan0/arm9_main/sub_2121D0C_02121D0C.c
- docs/function_notes/hk_30.md:46 returns 1 if mode +6480 >= 7
sub_2121D48
export/plan0/arm9_main/sub_2121D48_02121D48.c
- docs/function_notes/hk_30.md:47 returns 1 if mode +6480 >= 5 and sub_2120644() == 0
sub_2121D94
export/plan0/arm9_main/sub_2121D94_02121D94.c
- docs/function_notes/hk_30.md:48 returns sub_2029930()+208 if nonzero, else slot +7752 value of slot sub_219BB1C(0)
sub_2121DEC
export/plan0/arm9_main/sub_2121DEC_02121DEC.c
- docs/function_notes/hk_30.md:49 sets +7760 of slot sub_219BB1C(a1) to 1 (a1 nonzero) or 2 (a1 zero); returns slot base+4096
sub_2121E24
export/plan0/arm9_main/sub_2121E24_02121E24.c
- docs/function_notes/hk_30.md:50 getter, returns int +7752 of 68-byte slot record for index a1
sub_2121E44
export/plan0/arm9_main/sub_2121E44_02121E44.c
- docs/function_notes/hk_30.md:51 getter, returns int +7748 of 68-byte slot record for index a1
sub_2121E64
export/plan0/arm9_main/sub_2121E64_02121E64.c
- docs/function_notes/hk_30.md:52 getter, returns int +7744 of 68-byte slot record for index a1
sub_2121E84
export/plan0/arm9_main/sub_2121E84_02121E84.c
- docs/function_notes/hk_30.md:53 setter, stores a1 into +7752 of slot sub_219BB1C(a1) (68-byte stride)
sub_2121EB4
export/plan0/arm9_main/sub_2121EB4_02121EB4.c
- docs/function_notes/hk_30.md:54 setter, stores a1 into +7748 of slot sub_219BB1C(a1) (68-byte stride)
sub_2121EE4
export/plan0/arm9_main/sub_2121EE4_02121EE4.c
- docs/function_notes/hk_30.md:55 setter, stores -1 into +7744 of slot sub_219BB1C(a1)
sub_2121F1C
export/plan0/arm9_main/sub_2121F1C_02121F1C.c
- docs/function_notes/hk_30.md:56 setter, stores a1 into +7744 of slot sub_219BB1C(a1)
sub_2121F4C
export/plan0/arm9_main/sub_2121F4C_02121F4C.c
- docs/function_notes.md:1270 event dispatcher for slot a1 (1624 bytes): validates the event record (mode at +6480 and slot count at +8021) before dispatching it
- docs/function_notes/NEEDS_REVIEW.md:1329 event dispatcher for slot a1: validates an event record (a2, count/id/slot match), gates via sub_21217E8, then switches on event id 0-9 to update masks +6570/+6571, copy 68-byte slot blocks, call sub_21A3230/sub_212145C [REVIEW]
- docs/function_notes/hk_30.md:57 event dispatcher for slot a1: validates an event record (a2, count/id/slot match), gates via sub_21217E8, then switches on event id 0-9 to update masks +6570/+6571, copy 68-byte slot blocks, call sub_21A3230/sub_212145C [REVIEW]
sub_21225AC
export/plan0/arm9_main/sub_21225AC_021225AC.c
- docs/function_notes.md:1169 frame-countdown gate: increments the counter at +6528 of the state block and returns the gate result
- docs/function_notes/NEEDS_REVIEW.md:1330 frame-countdown gate: increments counter +6528 and returns 0 while it is <= a1; resets it, then if mode +6480 is >2 and not 9/10 sets flag +2477, else flag +2382, calls sub_219BBC8 and sets mode 11; returns 1 [REVIEW]
- docs/function_notes/hk_30.md:58 frame-countdown gate: increments counter +6528 and returns 0 while it is <= a1; resets it, then if mode +6480 is >2 and not 9/10 sets flag +2477, else flag +2382, calls sub_219BBC8 and sets mode 11; returns 1 [REVIEW]
sub_2122684
export/plan0/arm9_main/sub_2122684_02122684.c
- docs/function_notes.md:1170 rebuilds the 4-entry slot index map at +8014 for the active slots
- docs/function_notes/NEEDS_REVIEW.md:1331 rebuilds 4-entry slot index map at +8014 for active slots in mask +8021 (sequential index, else -1), calling sub_205D0E8 on remapped entries [REVIEW]
- docs/function_notes/hk_30.md:59 rebuilds 4-entry slot index map at +8014 for active slots in mask +8021 (sequential index, else -1), calling sub_205D0E8 on remapped entries [REVIEW]
sub_2122728
export/plan0/arm9_main/sub_2122728_02122728.c
- docs/function_notes/hk_30.md:60 thunk, calls function pointer off_2122730 with no args
sub_2122734
export/plan0/arm9_main/sub_2122734_02122734.c
- docs/function_notes/hk_30.md:61 linear search of the 4-entry slot map at +8014; returns the position whose value equals a1, or -1
sub_2122778
export/plan0/arm9_main/sub_2122778_02122778.c
- docs/function_notes/hk_30.md:62 returns signed byte +8014 of slot-map entry a1 (slot index lookup)
sub_2122794
export/plan0/arm9_main/sub_2122794_02122794.c
- docs/function_notes/hk_30.md:63 looks up slot index whose slot-map entry (+8014) equals a1; returns that slot's active bit in mask +8021, or 0 if absent
sub_21227F8
export/plan0/arm9_main/sub_21227F8_021227F8.c
- docs/function_notes/hk_30.md:64 returns bit a1 of the active-slot mask +8021 in the base struct
sub_2122818
export/plan0/arm9_main/sub_2122818_02122818.c
- docs/function_notes.md:1171 per-frame timer pass for modes 3..8: sets the pending bits for the mode's slots when the mode at +6480 is 3 to 8
- docs/function_notes/NEEDS_REVIEW.md:1332 per-frame timer pass (modes 3..8): sets pending bit +8022 for active non-leader slots whose timer +6532 exceeds 300; increments timers of active slots; returns slot count [REVIEW]
- docs/function_notes/hk_30.md:65 per-frame timer pass (modes 3..8): sets pending bit +8022 for active non-leader slots whose timer +6532 exceeds 300; increments timers of active slots; returns slot count [REVIEW]
sub_2122960
export/plan0/arm9_main/sub_2122960_02122960.c
- docs/function_notes.md:1172 per-frame check for modes other than 11 and 12: resolves pending entries of the state at *off_2122AAC
- docs/function_notes/NEEDS_REVIEW.md:1333 per-frame check (mode not 11/12): resolves pending bits +8022 against leader slot; on conflict sets flag +6573, calls sub_219BBC8, mode=11; else drops slots and decrements count +8018, mode 11 if count<=1 [REVIEW]
- docs/function_notes/hk_30.md:66 per-frame check (mode not 11/12): resolves pending bits +8022 against leader slot; on conflict sets flag +6573, calls sub_219BBC8, mode=11; else drops slots and decrements count +8018, mode 11 if count<=1 [REVIEW]
sub_2122AB0
export/plan0/arm9_main/sub_2122AB0_02122AB0.c
- docs/function_notes/hk_30.md:67 clears flag +6573 on state block and sets task halfwords +16=2/+18=1; returns 1
sub_2122AE4
export/plan0/arm9_main/sub_2122AE4_02122AE4.c
- docs/function_notes/hk_30.md:68 returns 1 if flag +6573 == 1 and mode +6480 == 12, else 0
sub_2122B14
export/plan0/arm9_main/sub_2122B14_02122B14.c
- docs/function_notes.md:1173 for modes 5..8 ANDs the per-slot 68-byte field at +7706 with the mask 255
- docs/function_notes/NEEDS_REVIEW.md:1334 for modes 5..8, ANDs per-slot 68-byte field +7706 across active slots and sets pending bits +3926 for slots not in the result mask [REVIEW]
- docs/function_notes/hk_30.md:69 for modes 5..8, ANDs per-slot 68-byte field +7706 across active slots and sets pending bits +3926 for slots not in the result mask [REVIEW]
sub_2122BF0
export/plan0/arm9_main/sub_2122BF0_02122BF0.c
- docs/function_notes.md:1174 mode 9 handler: appends a type-7 event record (68-byte slot) after sub_21216A8 and the count at +8019
- docs/function_notes/NEEDS_REVIEW.md:1335 mode 9 handler: appends a type-7 event record (68-byte slot block) via sub_21A326C when a cursor is valid, starts 120-frame timer, calls sub_21A3230 per active slot, then mode=10 [REVIEW]
- docs/function_notes/hk_30.md:70 mode 9 handler: appends a type-7 event record (68-byte slot block) via sub_21A326C when a cursor is valid, starts 120-frame timer, calls sub_21A3230 per active slot, then mode=10 [REVIEW]
sub_2122D74
export/plan0/arm9_main/sub_2122D74_02122D74.c
- docs/function_notes.md:1175 mode 8 handler: appends a type-6 event record, after sub_21225AC on dword_2122F2C and the slot count at +8019
- docs/function_notes/NEEDS_REVIEW.md:1336 mode 8 handler: appends a type-6 event record, runs sub_2121580 gate, clears flags, calls sub_2122B14 and sub_2121AF4, copies per-slot link tables and sets +7740 from sub_2029930()+208, mode=9 [REVIEW]
- docs/function_notes/hk_30.md:71 mode 8 handler: appends a type-6 event record, runs sub_2121580 gate, clears flags, calls sub_2122B14 and sub_2121AF4, copies per-slot link tables and sets +7740 from sub_2029930()+208, mode=9 [REVIEW]
sub_2122F38
export/plan0/arm9_main/sub_2122F38_02122F38.c
- docs/function_notes.md:1176 mode 5 handler: appends a type-3 event record, after sub_21225AC on dword_212308C and the slot count at +8019
- docs/function_notes/NEEDS_REVIEW.md:1337 mode 5 handler: appends a type-3 event record, and when sub_2121580 passes with valid links (+7744/+7748 != -1) clears flags and sets mode=6 [REVIEW]
- docs/function_notes/hk_30.md:72 mode 5 handler: appends a type-3 event record, and when sub_2121580 passes with valid links (+7744/+7748 != -1) clears flags and sets mode=6 [REVIEW]
sub_2123098
export/plan0/arm9_main/sub_2123098_02123098.c
- docs/function_notes.md:1177 mode 4 handler: appends a type-9 event record, after sub_21225AC on dword_2123200
- docs/function_notes/NEEDS_REVIEW.md:1338 mode 4 handler: appends a type-9 event record; on completion either sets state 2 via sub_219BBC8 (count==1) or clears flags, sets mode=5 and calls sub_2029454/sub_2029440 with slot ids [REVIEW]
- docs/function_notes/hk_30.md:73 mode 4 handler: appends a type-9 event record; on completion either sets state 2 via sub_219BBC8 (count==1) or clears flags, sets mode=5 and calls sub_2029454/sub_2029440 with slot ids [REVIEW]
sub_212320C
export/plan0/arm9_main/sub_212320C_0212320C.c
- docs/function_notes.md:1178 mode 3 handler: sub_21225AC timer on dword_2123378; sets mode 11 when the slot's +7760 is 2 (via sub_219BB1C and sub_21A2C98)
- docs/function_notes/NEEDS_REVIEW.md:1339 mode 3 handler: sub_21225AC timer, sets mode 11 if slot +7760==2, else appends a type-8 event record and when sub_2121580 passes and +7760 is nonzero sets mode=4 [REVIEW]
- docs/function_notes/hk_30.md:74 mode 3 handler: sub_21225AC timer, sets mode 11 if slot +7760==2, else appends a type-8 event record and when sub_2121580 passes and +7760 is nonzero sets mode=4 [REVIEW]
sub_2123384
export/plan0/arm9_main/sub_2123384_02123384.c
- docs/function_notes.md:1179 mode 1 handler: sub_21225AC timer on dword_2123564, emits a 580-byte record through the slot iterator
- docs/function_notes/NEEDS_REVIEW.md:1340 mode 1 handler: sub_21225AC timer, emits a 580-byte type-1 record (pending bit +6570) or 12-byte type-2 record, then sums +1116 values into +6484, writes 5-word table, calls sub_205E5C4(0), mode=2 [REVIEW]
- docs/function_notes/hk_30.md:75 mode 1 handler: sub_21225AC timer, emits a 580-byte type-1 record (pending bit +6570) or 12-byte type-2 record, then sums +1116 values into +6484, writes 5-word table, calls sub_205E5C4(0), mode=2 [REVIEW]
sub_212357C
export/plan0/arm9_main/sub_212357C_0212357C.c
- docs/function_notes.md:1180 mode 0 handler: like sub_2123384 but emits type 0/1 records, timer dword_21236F0
- docs/function_notes/NEEDS_REVIEW.md:1341 mode 0 handler: like sub_2123384 but emits type-0/1 records per active slot and sets mode=1 when sub_2121580 passes [REVIEW]
- docs/function_notes/hk_30.md:76 mode 0 handler: like sub_2123384 but emits type-0/1 records per active slot and sets mode=1 when sub_2121580 passes [REVIEW]
sub_21236F8
export/plan0/arm9_main/sub_21236F8_021236F8.c
- docs/function_notes.md:1181 per-frame state-machine dispatcher (828 bytes): runs sub_2122818 and sub_2122960, then switches on the mode at +6480 of *off_2123A34
- docs/function_notes/NEEDS_REVIEW.md:1342 per-frame state-machine dispatcher: runs sub_2122818 and sub_2122960, then switches on mode 0..11 to the handlers above (sub_212357C, sub_2123384, sub_212320C, sub_2123098, sub_2122F38, sub_2122D74, sub_2122BF0) [REVIEW]
- docs/function_notes/hk_30.md:77 per-frame state-machine dispatcher: runs sub_2122818 and sub_2122960, then switches on mode 0..11 to the handlers above (sub_212357C, sub_2123384, sub_212320C, sub_2123098, sub_2122F38, sub_2122D74, sub_2122BF0) [REVIEW]
sub_2123A48
export/plan0/arm9_main/sub_2123A48_02123A48.c
- docs/function_notes.md:1182 state-block initialiser selected by a1 (1592 bytes): 0 = full reset, other values reset subsets after sub_211FE44
- docs/function_notes/NEEDS_REVIEW.md:1343 state-block initializer selected by a1: 0 = full reset of slot fields and sub_21A3208/sub_200F5AC/sub_2122684, 1/2 = recount active slots and advance mode to 7, 3 = clear slot fields and set mode 3 [REVIEW]
- docs/function_notes/hk_30.md:78 state-block initializer selected by a1: 0 = full reset of slot fields and sub_21A3208/sub_200F5AC/sub_2122684, 1/2 = recount active slots and advance mode to 7, 3 = clear slot fields and set mode 3 [REVIEW]
sub_2124094
export/plan0/arm9_main/sub_2124094_02124094.c
- docs/function_notes/hk_30.md:79 thumb; for N (*v5) 6-byte entries of a 2D sub-object resolved via (a5,a4,a1) tables, clears and sets bits 10-15 (palette bank) of halfword +4 to a2
sub_21240D4
export/plan0/arm9_main/sub_21240D4_021240D4.c
- docs/function_notes/hk_30.md:80 thumb getter; returns bits 10-15 of halfword +4 of the first entry of the same sub-object lookup as sub_2124094
sub_2124100
export/plan0/arm9_main/sub_2124100_02124100.c
- docs/function_notes.md:1537 writes a2 into bits 12..15 of the halfword cell and returns the cell's sub-record
- docs/function_notes/NEEDS_REVIEW.md:1344 thumb; like sub_2124094 but writes a2 into bits 12-15 of halfword +4 (flip/priority-style field) [REVIEW]
- docs/function_notes/hk_30.md:81 thumb; like sub_2124094 but writes a2 into bits 12-15 of halfword +4 (flip/priority-style field) [REVIEW]
sub_2124140
export/plan0/arm9_main/sub_2124140_02124140.c
- docs/function_notes.md:1183 for N 6-byte entries clears the mask dword and the entry words
- docs/function_notes/NEEDS_REVIEW.md:1345 thumb; for N 6-byte entries, clears mask dword_2124188 and sets bit dword_2124184 when a2 is nonzero (per-entry flag) [REVIEW]
- docs/function_notes/hk_30.md:82 thumb; for N 6-byte entries, clears mask dword_2124188 and sets bit dword_2124184 when a2 is nonzero (per-entry flag) [REVIEW]
sub_212418C
export/plan0/arm9_main/sub_212418C_0212418C.c
- docs/function_notes/hk_30.md:83 thumb predicate; returns 1 if bits 10-15 of the halfword +4 of the same sub-object lookup equal 1
sub_21241C0
export/plan0/arm9_main/sub_21241C0_021241C0.c
- docs/function_notes.md:1035 loads one 2D sprite/cell: sub_201EA58 lookup, a vtable call at +24, then reads the cell size at +48
- docs/function_notes/NEEDS_REVIEW.md:1346 loads one 2D sprite/cell: sub_201EA58 lookup, vtable call +24, DC flush (sub_200EE74) on buffer, then DMA via sub_2016468 with mode 35 (a1 set) or 19 [REVIEW]
- docs/function_notes/hk_30.md:84 loads one 2D sprite/cell: sub_201EA58 lookup, vtable call +24, DC flush (sub_200EE74) on buffer, then DMA via sub_2016468 with mode 35 (a1 set) or 19 [REVIEW]
sub_2124224
export/plan0/arm9_main/sub_2124224_02124224.c
- docs/function_notes/hk_30.md:85 thunk, tail-calls sub_212428C with the same 4 args
sub_2124248
export/plan0/arm9_main/sub_2124248_02124248.c
- docs/function_notes/hk_30.md:86 thunk, tail-calls sub_212428C with the same 4 args
sub_212426C
export/plan0/arm9_main/sub_212426C_0212426C.c
- docs/function_notes/hk_30.md:87 thunk, tail-calls sub_212428C with the same 4 args
sub_212428C
export/plan0/arm9_main/sub_212428C_0212428C.c
- docs/function_notes.md:1186 builds and uploads one 2D cell: entry lookup via sub_201EA58, the cell table at a6, reads the cell word at +60
- docs/function_notes/NEEDS_REVIEW.md:1347 builds and uploads one 2D cell: entry lookup via sub_201EA58, layout via sub_2125808 using 2-bit alignment fields, DC flush, then sub_2016468 DMA (mode 35 or 19) [REVIEW]
- docs/function_notes/hk_30.md:88 builds and uploads one 2D cell: entry lookup via sub_201EA58, layout via sub_2125808 using 2-bit alignment fields, DC flush, then sub_2016468 DMA (mode 35 or 19) [REVIEW]
sub_21243AC
export/plan0/arm9_main/sub_21243AC_021243AC.c
- docs/function_notes.md:1187 builds a draw object from the cell data, using a 1048-byte stack buffer for the vertex list
- docs/function_notes/NEEDS_REVIEW.md:1348 builds a draw object: allocates object (sub_2036BEC, 72 bytes) and pixel buffer, runs sub_2022EB0 to create a cell list with flip offsets, allocates 6*n+16 byte list and returns buffer size [REVIEW]
- docs/function_notes/hk_30.md:89 builds a draw object: allocates object (sub_2036BEC, 72 bytes) and pixel buffer, runs sub_2022EB0 to create a cell list with flip offsets, allocates 6*n+16 byte list and returns buffer size [REVIEW]
sub_212463C
export/plan0/arm9_main/sub_212463C_0212463C.c
- docs/function_notes.md:1036 draws a tiled block: two sub_2021F1C lookups, then a loop over the block entries
- docs/function_notes/NEEDS_REVIEW.md:1349 draws a tiled block: two sub_2021F1C lookups, loops entries with sub_200EE74 and sub_2016468 (mode 35/19) per tile, then a final sub_2016468 strip (30 or 14) [REVIEW]
- docs/function_notes/hk_30.md:90 draws a tiled block: two sub_2021F1C lookups, loops entries with sub_200EE74 and sub_2016468 (mode 35/19) per tile, then a final sub_2016468 strip (30 or 14) [REVIEW]
sub_2124748
export/plan0/arm9_main/sub_2124748_02124748.c
- docs/function_notes.md:1037 like sub_212463C but uses the table off_2124818 and a different loop
- docs/function_notes/NEEDS_REVIEW.md:1350 like sub_212463C but uses table off_2124818 and a different mask set, draws each tile via sub_2016468 (35/19) with no trailing strip [REVIEW]
- docs/function_notes/hk_30.md:91 like sub_212463C but uses table off_2124818 and a different mask set, draws each tile via sub_2016468 (35/19) with no trailing strip [REVIEW]
sub_212481C
export/plan0/arm9_main/sub_212481C_0212481C.c
- docs/function_notes.md:1271 draws a row of tiles using a 16-slot occupancy bitmap
- docs/function_notes/NEEDS_REVIEW.md:1351 draws a row of tiles with a 16-slot occupancy bitmap, then emits runs of consecutive occupied columns via sub_2016468 (30/14) as horizontal strips [REVIEW]
- docs/function_notes/hk_30.md:92 draws a row of tiles with a 16-slot occupancy bitmap, then emits runs of consecutive occupied columns via sub_2016468 (30/14) as horizontal strips [REVIEW]
sub_212497C
export/plan0/arm9_main/sub_212497C_0212497C.c
- docs/function_notes/hk_30.md:93 thumb getter; returns low 10 bits (tile index) of halfword +4 of the sub-object found by sub_2021F1C(a2, table entry a1 of a3)
sub_21249A8
export/plan0/arm9_main/sub_21249A8_021249A8.c
- docs/function_notes/hk_30.md:94 thumb; sets bits 10-15 (palette bank) of halfword +4 of N 6-byte entries of that sub-object to a2
sub_21249F0
export/plan0/arm9_main/sub_21249F0_021249F0.c
- docs/function_notes/hk_30.md:95 thumb getter; returns bits 10-15 (palette bank) of halfword +4 of the sub-object found via sub_2021F1C
sub_2124A20
export/plan0/arm9_main/sub_2124A20_02124A20.c
- docs/function_notes.md:1540 sets bits 12..15 of the halfword at +4 of N 6-byte cells selected through sub_2021F1C
- docs/function_notes/NEEDS_REVIEW.md:1352 thumb; sets bits 12-15 of halfword +4 of N 6-byte entries of that sub-object to a2 (flip/priority-style field) [REVIEW]
- docs/function_notes/hk_30.md:96 thumb; sets bits 12-15 of halfword +4 of N 6-byte entries of that sub-object to a2 (flip/priority-style field) [REVIEW]
sub_2124A68
export/plan0/arm9_main/sub_2124A68_02124A68.c
- docs/function_notes.md:1531 getter: returns bits 12..15 of the halfword at +4 of the cell found through sub_2021F1C
- docs/function_notes/NEEDS_REVIEW.md:1353 thumb getter; returns bits 12-15 of halfword +4 of that sub-object [REVIEW]
- docs/function_notes/hk_30.md:97 thumb getter; returns bits 12-15 of halfword +4 of that sub-object [REVIEW]
sub_2124A98
export/plan0/arm9_main/sub_2124A98_02124A98.c
- docs/function_notes/hk_30.md:98 thumb; for N 3-word entries of that sub-object, clears mask dword_2124AE0 and sets bit dword_2124ADC when a2 nonzero
sub_2124AE4
export/plan0/arm9_main/sub_2124AE4_02124AE4.c
- docs/function_notes/hk_30.md:99 thumb predicate; returns 1 if bits 10-15 of the first entry's halfword of the sub-object equal 1
sub_2124B1C
export/plan0/arm9_main/sub_2124B1C_02124B1C.c
- docs/function_notes.md:1038 computes a 2x2 rotation/scale matrix from the table off_2124BC4 (indexed by a2 >> 4) scaled through sub_2147F34 with dword_2124BC0
- docs/function_notes/NEEDS_REVIEW.md:1354 computes a 2x2 rotation/scale matrix from table off_2124BC4 with sine/cosine via FX_Div (sub_2147F34) and writes it into the object at +20/+36, scaled by a3 [REVIEW]
- docs/function_notes/hk_30.md:100 computes a 2x2 rotation/scale matrix from table off_2124BC4 with sine/cosine via FX_Div (sub_2147F34) and writes it into the object at +20/+36, scaled by a3 [REVIEW]
sub_2124BC8
export/plan0/arm9_main/sub_2124BC8_02124BC8.c
- docs/function_notes/hk_30.md:101 thumb wrapper; calls sub_2124C70 for one entry (a1) with flag 1
sub_2124BF0
export/plan0/arm9_main/sub_2124BF0_02124BF0.c
- docs/function_notes/hk_30.md:102 thumb; walks entries from last to first calling sub_2124C70 with flag 0 (back-to-front draw pass)
sub_2124C30
export/plan0/arm9_main/sub_2124C30_02124C30.c
- docs/function_notes.md:1272 walk like sub_2124BF0 that calls sub_2124C70 for each child entry (62 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1355 thumb; same walk as sub_2124BF0 but calls sub_2124C70 with flag 1 [REVIEW]
- docs/function_notes/hk_30.md:103 thumb; same walk as sub_2124BF0 but calls sub_2124C70 with flag 1 [REVIEW]
sub_2124C70
export/plan0/arm9_main/sub_2124C70_02124C70.c
- docs/function_notes.md:1188 recursively emits one draw/OAM-like entry, recursing through the child index at +56 until it is -1
- docs/function_notes/NEEDS_REVIEW.md:1356 recursively emits one draw/OAM-like entry: recurses into child (+56) first, computes screen position from cell size and offsets, clips to 256x192-style bounds, allocates via sub_20AE5E4, emits with sub_20224E0 [REVIEW]
- docs/function_notes/hk_30.md:104 recursively emits one draw/OAM-like entry: recurses into child (+56) first, computes screen position from cell size and offsets, clips to 256x192-style bounds, allocates via sub_20AE5E4, emits with sub_20224E0 [REVIEW]
sub_2124ED0
export/plan0/arm9_main/sub_2124ED0_02124ED0.c
- docs/function_notes/hk_30.md:105 allocates an array of 64-byte records (count = a2 entries plus optional a3 entries) via sub_2036BEC, stores pointer in *a4 and initialises it with sub_2124EFC
sub_2124EFC
export/plan0/arm9_main/sub_2124EFC_02124EFC.c
- docs/function_notes/hk_30.md:106 initialises 'count' 64-byte records: flag 1, zeroed fields, two sub_2146C98 matrix inits at +20/+36, id -1 at +56
sub_2124F4C
export/plan0/arm9_main/sub_2124F4C_02124F4C.c
- docs/function_notes.md:1039 reads up to 10 characters from a string stream (sub_2133274) into the buffer using sub_2125004
- docs/function_notes/NEEDS_REVIEW.md:1357 reads up to 10 chars from a string stream (sub_2133274) to count digits, then writes them reversed into a2 with offset dword_2124FA8; zero-terminated [REVIEW]
- docs/function_notes/hk_30.md:107 reads up to 10 chars from a string stream (sub_2133274) to count digits, then writes them reversed into a2 with offset dword_2124FA8; zero-terminated [REVIEW]
sub_2124FAC
export/plan0/arm9_main/sub_2124FAC_02124FAC.c
- docs/function_notes.md:1545 like sub_2124F4C but writes each digit as an ASCII character
- docs/function_notes/NEEDS_REVIEW.md:1358 like sub_2124F4C but writes each digit as ASCII (+48, '0'); decimal number to string helper [REVIEW]
- docs/function_notes/hk_30.md:108 like sub_2124F4C but writes each digit as ASCII (+48, '0'); decimal number to string helper [REVIEW]
sub_2125004
export/plan0/arm9_main/sub_2125004_02125004.c
- docs/function_notes.md:1040 reads up to 10 characters from the stream sub_2133274 until a zero byte; returns the count
- docs/function_notes/NEEDS_REVIEW.md:1359 reads up to 10 chars from a stream (sub_2133274) until a zero char and returns the count+1 (length helper) [REVIEW]
- docs/function_notes/hk_30.md:109 reads up to 10 chars from a stream (sub_2133274) until a zero char and returns the count+1 (length helper) [REVIEW]
sub_2125028
export/plan0/arm9_main/sub_2125028_02125028.c
- docs/function_notes.md:1273 creates a 2D text/window layer: copies a 20-halfword template into the layer object at off_21250A0
- docs/function_notes/NEEDS_REVIEW.md:1360 creates a 2D text/window layer: copies a 20-halfword template from off_21250A0, creates it via sub_2038D88, sets params via sub_2038D28/sub_2038CD8, sub_2037ABC, and ORs 0x10 into two IO registers [REVIEW]
- docs/function_notes/hk_30.md:110 creates a 2D text/window layer: copies a 20-halfword template from off_21250A0, creates it via sub_2038D88, sets params via sub_2038D28/sub_2038CD8, sub_2037ABC, and ORs 0x10 into two IO registers [REVIEW]
sub_21250B0
export/plan0/arm9_main/sub_21250B0_021250B0.c
- docs/function_notes.md:1550 same as sub_2125028 but uses the template at off_212512C
- docs/function_notes/NEEDS_REVIEW.md:1361 same as sub_2125028 but uses template off_212512C and different sub_2038CD8 params (a second text/window layer) [REVIEW]
- docs/function_notes/hk_30.md:111 same as sub_2125028 but uses template off_212512C and different sub_2038CD8 params (a second text/window layer) [REVIEW]
sub_212513C
export/plan0/arm9_main/sub_212513C_0212513C.c
- docs/function_notes.md:1189 string builder: copies the text a1 into a3 and appends the string at a2
- docs/function_notes/NEEDS_REVIEW.md:1362 string builder: copies a1 text into a3, appends the string from a2 with control-code 0x1A tails expanded via sub_214CFFC, returns byte length [REVIEW]
- docs/function_notes/hk_30.md:112 string builder: copies a1 text into a3, appends the string from a2 with control-code 0x1A tails expanded via sub_214CFFC, returns byte length [REVIEW]
sub_21251C4
export/plan0/arm9_main/sub_21251C4_021251C4.c
- docs/function_notes.md:1190 text draw loop over a character stream, using the callback at a1+4 to fetch each character
- docs/function_notes/NEEDS_REVIEW.md:1363 text draw loop over a char stream (via callback a1+4): handles 0x1A escape codes, 0x0A newline, aligns with sub_21253AC, draws glyphs with sub_2023450 [REVIEW]
- docs/function_notes/hk_30.md:113 text draw loop over a char stream (via callback a1+4): handles 0x1A escape codes, 0x0A newline, aligns with sub_21253AC, draws glyphs with sub_2023450 [REVIEW]
sub_21253AC
export/plan0/arm9_main/sub_21253AC_021253AC.c
- docs/function_notes/hk_30.md:114 computes horizontal/vertical alignment offset from flags a1 (center/right bits) and a2 (1=center, 2=bottom) given width a3 and height a4/a5
sub_21253F8
export/plan0/arm9_main/sub_21253F8_021253F8.c
- docs/function_notes.md:1599 text measure and wrap (992 bytes): walks the character stream and measures each line for the wrap width
- docs/function_notes/NEEDS_REVIEW.md:1364 text measure and wrap: walks the same char stream, writes wrapped chars to a6, per-line widths into a3[], max width into a2, line count into a4; handles 0x1A codes (incl. dynamic strings) [REVIEW]
- docs/function_notes/hk_30.md:115 text measure and wrap: walks the same char stream, writes wrapped chars to a6, per-line widths into a3[], max width into a2, line count into a4; handles 0x1A codes (incl. dynamic strings) [REVIEW]
sub_21257D8
export/plan0/arm9_main/sub_21257D8_021257D8.c
- docs/function_notes/hk_30.md:116 thunk wrapper, forwards 8 args to sub_212586C
sub_2125808
export/plan0/arm9_main/sub_2125808_02125808.c
- docs/function_notes/hk_30.md:117 thunk wrapper, forwards 8 args to sub_212586C
sub_212583C
export/plan0/arm9_main/sub_212583C_0212583C.c
- docs/function_notes/hk_30.md:118 thunk wrapper, forwards 8 args to sub_212586C
sub_212586C
export/plan0/arm9_main/sub_212586C_0212586C.c
- docs/function_notes.md:1041 text pipeline: measures and wraps the string with sub_21253F8 into a 510-halfword buffer
- docs/function_notes/NEEDS_REVIEW.md:1365 text pipeline: measures and wraps the string with sub_21253F8 into a local 510-halfword buffer, then draws it with sub_21251C4 [REVIEW]
- docs/function_notes/hk_30.md:119 text pipeline: measures and wraps the string with sub_21253F8 into a local 510-halfword buffer, then draws it with sub_21251C4 [REVIEW]
sub_21258F0
export/plan0/arm9_main/sub_21258F0_021258F0.c
- docs/function_notes.md:1535 UI/dialog per-frame tick: when the pointer at *off_2125924 is set calls sub_2126730 for the dialog
- docs/function_notes/NEEDS_REVIEW.md:1366 UI/dialog per-frame tick: if sub-object fields +0/+4/+8 of global state are set, calls sub_2126730, sub_21278F4, sub_21283BC [REVIEW]
- docs/function_notes/hk_31.md:2 UI/dialog per-frame tick: if sub-object fields +0/+4/+8 of global state are set, calls sub_2126730, sub_21278F4, sub_21283BC [REVIEW]
sub_2125928
export/plan0/arm9_main/sub_2125928_02125928.c
- docs/function_notes.md:1274 second UI/dialog per-frame tick, same pattern as the first, calling sub_2126834 when the pending flag is set
- docs/function_notes/NEEDS_REVIEW.md:1367 second UI/dialog per-frame tick, same pattern as sub_21258F0 with sub_2126834, sub_21279A0, sub_2128458 [REVIEW]
- docs/function_notes/hk_31.md:3 second UI/dialog per-frame tick, same pattern as sub_21258F0 with sub_2126834, sub_21279A0, sub_2128458 [REVIEW]
sub_2125960
export/plan0/arm9_main/sub_2125960_02125960.c
- docs/function_notes.md:1191 builds the 2D screen layout: three lookup tables indexed by the state byte at +12 of the object at off_2125B60
- docs/function_notes/NEEDS_REVIEW.md:1368 builds 2D screen layout: 3 lookup tables by a state byte fill 2 table structs, 5 sub_2016468 window/BG rect calls, 32x32 scrolled WORD map offset by a1>>5 [REVIEW]
- docs/function_notes/hk_31.md:4 builds 2D screen layout: 3 lookup tables by a state byte fill 2 table structs, 5 sub_2016468 window/BG rect calls, 32x32 scrolled WORD map offset by a1>>5 [REVIEW]
sub_2125BA4
export/plan0/arm9_main/sub_2125BA4_02125BA4.c
- docs/function_notes.md:1042 writes the BG control registers for engines A and B via masked bit merges
- docs/function_notes/NEEDS_REVIEW.md:1369 writes BG control registers for engines A and B via masked bitfield updates from dword_2125C10/14/1C/28 [REVIEW]
- docs/function_notes/hk_31.md:5 writes BG control registers for engines A and B via masked bitfield updates from dword_2125C10/14/1C/28 [REVIEW]
sub_2125C2C
export/plan0/arm9_main/sub_2125C2C_02125C2C.c
- docs/function_notes.md:1565 picks one of two paths on the word at off_2125D50 (== 2 selects the first path)
- docs/function_notes/NEEDS_REVIEW.md:1370 picks one of two paths on word at off_2125D50, accumulates ~17 table lookups combined via sub_20B496C/sub_20B4810/sub_20B4A7C (fixed-point math) [REVIEW]
- docs/function_notes/hk_31.md:6 picks one of two paths on word at off_2125D50, accumulates ~17 table lookups combined via sub_20B496C/sub_20B4810/sub_20B4A7C (fixed-point math) [REVIEW]
sub_2125DA0
export/plan0/arm9_main/sub_2125DA0_02125DA0.c
- docs/function_notes/hk_31.md:7 teardown of UI object at off_2125DDC: calls sub_21274E0, sub_212804C, sub_21287C0 for non-null sub-objects, then clears the pointer and returns it
sub_2125DE0
export/plan0/arm9_main/sub_2125DE0_02125DE0.c
- docs/function_notes.md:1558 creates a UI/dialog object via sub_2036BEC (dword_2125EAC bytes) and stores the fields
- docs/function_notes/NEEDS_REVIEW.md:1371 creates a UI/dialog object via sub_2036BEC, stores it in off_2125EB0, inits 3 slots, conditionally calls sub_21274EC/sub_2128058/sub_21287CC and sub_2125960 [REVIEW]
- docs/function_notes/hk_31.md:8 creates a UI/dialog object via sub_2036BEC, stores it in off_2125EB0, inits 3 slots, conditionally calls sub_21274EC/sub_2128058/sub_21287CC and sub_2125960 [REVIEW]
sub_2125EBC
export/plan0/arm9_main/sub_2125EBC_02125EBC.c
- docs/function_notes/hk_31.md:9 setter: stores arg into field at (*off_2125EC8)+dword_2125ECC
sub_2125ED0
export/plan0/arm9_main/sub_2125ED0_02125ED0.c
- docs/function_notes/hk_31.md:10 array setter: writes a2 into slot a1 (4-byte stride) of table at *off_2125EE0 offset dword_2125EE4; returns that offset
sub_2125EE8
export/plan0/arm9_main/sub_2125EE8_02125EE8.c
- docs/function_notes/hk_31.md:11 stores (a1,a2) clamped to [-150,150] into two int fields (X/Y offsets) of object at *off_2125F20
sub_2125F2C
export/plan0/arm9_main/sub_2125F2C_02125F2C.c
- docs/function_notes/hk_31.md:12 setter: stores arg into field at (*off_2125F38)+dword_2125F3C
sub_2125F40
export/plan0/arm9_main/sub_2125F40_02125F40.c
- docs/function_notes/hk_31.md:13 getter: returns field at (*off_2125F4C)+dword_2125F50
sub_2125F54
export/plan0/arm9_main/sub_2125F54_02125F54.c
- docs/function_notes/hk_31.md:14 getter: returns word +48 of object at *off_2125F5C
sub_2125F60
export/plan0/arm9_main/sub_2125F60_02125F60.c
- docs/function_notes/hk_31.md:15 getter: returns word +44 of object at *off_2125F68
sub_2125F6C
export/plan0/arm9_main/sub_2125F6C_02125F6C.c
- docs/function_notes/hk_31.md:16 predicate: true if obj+8==1 and obj==2 (state check on object at off_2125F84)
sub_2125F88
export/plan0/arm9_main/sub_2125F88_02125F88.c
- docs/function_notes/hk_31.md:17 predicate: true if obj==0 and obj+52==0 (object at off_2125FA0)
sub_2125FA4
export/plan0/arm9_main/sub_2125FA4_02125FA4.c
- docs/function_notes/hk_31.md:18 predicate: true if obj==2 and obj+56==0 (object at off_2125FBC)
sub_2125FC0
export/plan0/arm9_main/sub_2125FC0_02125FC0.c
- docs/function_notes/hk_31.md:19 resets obj+52=0 and sets obj+56=1 on object at *off_2125FD0, returns the object
sub_2125FD4
export/plan0/arm9_main/sub_2125FD4_02125FD4.c
- docs/function_notes/agent_08.md:4 opens message dialog with 3 text windows (message + 2 choices), sets mode 2 and callbacks/params from args
sub_212611C
export/plan0/arm9_main/sub_212611C_0212611C.c
- docs/function_notes/agent_08.md:5 wrapper of sub_2125FD4 with default flags (1,1,1,0)
sub_2126138
export/plan0/arm9_main/sub_2126138_02126138.c
- docs/function_notes/agent_08.md:6 opens message dialog with 2 text windows (message + 1 choice), sets mode 1 and params from args
sub_2126230
export/plan0/arm9_main/sub_2126230_02126230.c
- docs/function_notes/agent_08.md:7 wrapper of sub_2126138 with default flags (1,1,1,0)
sub_2126248
export/plan0/arm9_main/sub_2126248_02126248.c
- docs/function_notes/agent_08.md:8 opens message dialog with 1 text window only (message), mode 0, params from args
sub_21262F0
export/plan0/arm9_main/sub_21262F0_021262F0.c
- docs/function_notes/agent_08.md:9 wrapper of sub_2126248 with default flags
sub_212630C
export/plan0/arm9_main/sub_212630C_0212630C.c
- docs/function_notes/agent_08.md:10 variant of sub_2125FD4 (3 windows, mode 2) using a different window slot set and an extra arg stored at +32
sub_2126454
export/plan0/arm9_main/sub_2126454_02126454.c
- docs/function_notes/agent_08.md:11 wrapper of sub_212630C with default flags
sub_2126474
export/plan0/arm9_main/sub_2126474_02126474.c
- docs/function_notes/agent_08.md:12 variant of sub_2126138 (2 windows, mode 1) with different slot set and extra arg at +32
sub_2126570
export/plan0/arm9_main/sub_2126570_02126570.c
- docs/function_notes/agent_08.md:13 wrapper of sub_2126474 with default flags
sub_212658C
export/plan0/arm9_main/sub_212658C_0212658C.c
- docs/function_notes/agent_08.md:14 variant of sub_2126248 (1 window, mode 0) with two extra args stored at +32/+36
sub_2126638
export/plan0/arm9_main/sub_2126638_02126638.c
- docs/function_notes/agent_08.md:15 another 1-window (mode 0) dialog variant with extra args at +32/+36
sub_21266E4
export/plan0/arm9_main/sub_21266E4_021266E4.c
- docs/function_notes/agent_08.md:16 wrapper of sub_2126638 with default flags
sub_2126700
export/plan0/arm9_main/sub_2126700_02126700.c
- docs/function_notes/agent_08.md:17 marks the UI manager dirty: sets +56 from state at +0 and +52, then +52=1
sub_2126730
export/plan0/arm9_main/sub_2126730_02126730.c
- docs/function_notes/agent_08.md:18 writes dialog scroll offsets to BG scroll regs (engine A 0x4000018, B 0x4001010) and blend regs 0x4000050/0x4001050
sub_2126834
export/plan0/arm9_main/sub_2126834_02126834.c
- docs/function_notes/agent_08.md:19 dialog per-frame tick: runs state 0-4 handler (open/open-anim/input/confirm/close-anim), blink counter, re-uploads tilemaps
sub_21268F8
export/plan0/arm9_main/sub_21268F8_021268F8.c
- docs/function_notes/agent_08.md:20 dialog state 4 (closing animation): slides windows off-screen over 15 frames, then resets dialog state
sub_21269B8
export/plan0/arm9_main/sub_21269B8_021269B8.c
- docs/function_notes/agent_08.md:21 dialog state 3 (choice confirmed): waits 5-10 frames, updates cursor, then goes to state 2
sub_2126A00
export/plan0/arm9_main/sub_2126A00_02126A00.c
- docs/function_notes/agent_08.md:22 dialog state 2 (input): handles touch (hit-test boxes) and left/right keys to pick choice, plays select SE, goes to state 3
sub_2126C90
export/plan0/arm9_main/sub_2126C90_02126C90.c
- docs/function_notes/agent_08.md:23 dialog state 1 (opening animation): slides windows in over 15 frames then goes to state 2
sub_2126D28
export/plan0/arm9_main/sub_2126D28_02126D28.c
- docs/function_notes/agent_08.md:24 dialog state 0 (build): copies window tilemap rects into screen buffers, DMA to VRAM, then enters state 1
sub_2126EA8
export/plan0/arm9_main/sub_2126EA8_02126EA8.c
- docs/function_notes/agent_08.md:25 clears the two choice-cursor tiles in the tilemap buffer (fill 0x1F tiles) when choices exist
sub_2126EF8
export/plan0/arm9_main/sub_2126EF8_02126EF8.c
- docs/function_notes/agent_08.md:26 draws the choice cursor highlight tiles for the currently selected choice
sub_2126F78
export/plan0/arm9_main/sub_2126F78_02126F78.c
- docs/function_notes/agent_08.md:27 copies tilemap rects for the 9 dialog elements (windows, buttons) into BG tilemap buffers with tile offsets
sub_21270BC
export/plan0/arm9_main/sub_21270BC_021270BC.c
- docs/function_notes/agent_08.md:28 redraws the two window tilemap rects (animated frame) into the screen tilemap buffers
sub_212717C
export/plan0/arm9_main/sub_212717C_0212717C.c
- docs/function_notes/agent_08.md:29 dialog resource loader: loads txt_system_b_00/01.ncgr, .nclr and txt_system_bg_00 .nscr, copies tiles/palette to VRAM
sub_212745C
export/plan0/arm9_main/sub_212745C_0212745C.c
- docs/function_notes/agent_08.md:30 sets display control: engine A/B BG layer enables and BG control regs (0x4000000/0x400000C, 0x4001000/0x4001008)
sub_21274E0
export/plan0/arm9_main/sub_21274E0_021274E0.c
- docs/function_notes/agent_08.md:31 clears the pointer stored at 0x0217D3D0 (dialog manager)
sub_21274EC
export/plan0/arm9_main/sub_21274EC_021274EC.c
- docs/function_notes/agent_08.md:32 allocates and initialises the message dialog manager (0x278 block), 7 window text buffers, loads resources, resets state/positions
sub_2127734
export/plan0/arm9_main/sub_2127734_02127734.c
- docs/function_notes/agent_08.md:33 zeroes the 7 per-window flags at manager +0x2204
sub_212775C
export/plan0/arm9_main/sub_212775C_0212775C.c
- docs/function_notes/agent_08.md:34 sets a choice-sound id: index -1 sets the cancel SE (+0x8B0), else SE for choice a1 (+0x8A8)
sub_2127788
export/plan0/arm9_main/sub_2127788_02127788.c
- docs/function_notes/agent_08.md:35 getter: yes/no choice manager (0x0217D3D4) +0x1C result/selection
sub_2127794
export/plan0/arm9_main/sub_2127794_02127794.c
- docs/function_notes/agent_08.md:36 getter: selected choice (+0x18) or -1 if cancelled (+0x20 set)
sub_21277AC
export/plan0/arm9_main/sub_21277AC_021277AC.c
- docs/function_notes/agent_08.md:37 returns true when choice screen state (+4)==0 and dirty flag +0x24 is clear
sub_21277C8
export/plan0/arm9_main/sub_21277C8_021277C8.c
- docs/function_notes/agent_08.md:38 returns true when choice screen state (+4)==1 and flag +0x28 is clear
sub_21277E4
export/plan0/arm9_main/sub_21277E4_021277E4.c
- docs/function_notes/agent_08.md:39 choice screen: clears flag +0x24 and sets +0x28
sub_21277F8
export/plan0/arm9_main/sub_21277F8_021277F8.c
- docs/function_notes/agent_08.md:40 opens a 2-button choice screen (sub-screen): sets up two 216x16 windows, default selection a3, resets result
sub_21278C8
export/plan0/arm9_main/sub_21278C8_021278C8.c
- docs/function_notes/agent_08.md:41 choice screen dirty-flag update (same logic as sub_2126700 for manager 0x0217D3D4)
sub_21278F4
export/plan0/arm9_main/sub_21278F4_021278F4.c
- docs/function_notes/agent_08.md:42 choice screen: sets sub-engine blend/BG1 enable regs (0x4001010/0x4001050/0x4001000) depending on visibility
sub_21279A0
export/plan0/arm9_main/sub_21279A0_021279A0.c
- docs/function_notes/agent_08.md:43 choice screen per-frame tick: dispatches state 0/1/2 handler, blink counter, re-uploads tilemap
sub_2127A38
export/plan0/arm9_main/sub_2127A38_02127A38.c
- docs/function_notes/agent_08.md:44 choice screen state 2 (closing): after 15 frames sets result done; scrolls windows meanwhile
sub_2127A84
export/plan0/arm9_main/sub_2127A84_02127A84.c
- docs/function_notes/agent_08.md:45 choice screen state 1 (input): touch hit-test of two buttons and left/right/A keys, plays select SE
sub_2127C78
export/plan0/arm9_main/sub_2127C78_02127C78.c
- docs/function_notes/agent_08.md:46 choice screen state 0 (build): copies button tiles to VRAM and enters state 1
sub_2127D28
export/plan0/arm9_main/sub_2127D28_02127D28.c
- docs/function_notes/agent_08.md:47 choice screen: redraws with no selection highlight (selection -1) and restarts blink
sub_2127D74
export/plan0/arm9_main/sub_2127D74_02127D74.c
- docs/function_notes/agent_08.md:48 choice screen: restarts blink, redraws highlight and re-uploads tilemap
sub_2127DB8
export/plan0/arm9_main/sub_2127DB8_02127DB8.c
- docs/function_notes/agent_08.md:49 choice screen: sets palette bank (14 selected / 15 unselected) on the two button tilemap rects
sub_2127E30
export/plan0/arm9_main/sub_2127E30_02127E30.c
- docs/function_notes/agent_08.md:50 choice screen: writes button tilemap entries, selected vs unselected tile sets, depending on blink phase
sub_2127F14
export/plan0/arm9_main/sub_2127F14_02127F14.c
- docs/function_notes/agent_08.md:51 loads select_choises_s_b.ncgr/.nclr and select_choises_s_bg.nscr (yes/no buttons), uploads tiles/palette/tilemap
sub_212802C
export/plan0/arm9_main/sub_212802C_0212802C.c
- docs/function_notes/agent_08.md:52 sets sub-engine BG1 control (0x4001008) priority/size bits for choice screen
sub_212804C
export/plan0/arm9_main/sub_212804C_0212804C.c
- docs/function_notes/agent_08.md:53 clears the pointer at 0x0217D3D4 (choice screen manager)
sub_2128058
export/plan0/arm9_main/sub_2128058_02128058.c
- docs/function_notes/agent_08.md:54 allocates/initialises the choice screen manager (0x8B4 block), two 32x2 button buffers, loads resources if not skipped
sub_21281B4
export/plan0/arm9_main/sub_21281B4_021281B4.c
- docs/function_notes/agent_08.md:55 clears choice-screen flag +0x8A0
sub_21281C8
export/plan0/arm9_main/sub_21281C8_021281C8.c
- docs/function_notes/agent_08.md:56 sets the return-button manager (0x0217D3D8) sound id at +0x824
sub_21281DC
export/plan0/arm9_main/sub_21281DC_021281DC.c
- docs/function_notes/agent_08.md:57 return button: sets enable flag +0x820 unless console type 0x27FFC40 equals 2
sub_21281FC
export/plan0/arm9_main/sub_21281FC_021281FC.c
- docs/function_notes/agent_08.md:58 return button: clears enable flag +0x820
sub_2128210
export/plan0/arm9_main/sub_2128210_02128210.c
- docs/function_notes/agent_08.md:59 touch hit-test of the Return button area (x<=40, y 152..192) and button active
sub_2128244
export/plan0/arm9_main/sub_2128244_02128244.c
- docs/function_notes/agent_08.md:60 lookup of button press-animation offset from 10-entry table (clamped)
sub_212825C
export/plan0/arm9_main/sub_212825C_0212825C.c
- docs/function_notes/agent_08.md:61 lookup of button release-animation offset from 10-entry table (clamped)
sub_2128274
export/plan0/arm9_main/sub_2128274_02128274.c
- docs/function_notes/agent_08.md:62 return button: true when state (+4)==0 and pressed flag +0x810 is clear
sub_2128294
export/plan0/arm9_main/sub_2128294_02128294.c
- docs/function_notes/agent_08.md:63 return button: true when state (+4)==2 and both pressed flags (+0x818,+0x814) are clear
sub_21282C8
export/plan0/arm9_main/sub_21282C8_021282C8.c
- docs/function_notes/agent_08.md:64 return button: sets +0x818 = !(idle) and clears +0x810/+0x814 flags
sub_2128310
export/plan0/arm9_main/sub_2128310_02128310.c
- docs/function_notes/agent_08.md:65 return button: marks pressed (+0x814=1), stores arg in +0x818 and plays its SE
sub_2128374
export/plan0/arm9_main/sub_2128374_02128374.c
- docs/function_notes/agent_08.md:66 return button: sets +0x810 depending on sub_2128294, clears +0x814/+0x818
sub_21283BC
export/plan0/arm9_main/sub_21283BC_021283BC.c
- docs/function_notes/agent_08.md:67 return button: toggles sub-engine BG2 enable bit by visibility flag and writes BG scroll at 0x4001018
sub_2128458
export/plan0/arm9_main/sub_2128458_02128458.c
- docs/function_notes/agent_08.md:68 return button per-frame tick: dispatches state 0-4 handler (appear, pressed, idle, release, anim)
sub_21284C0
export/plan0/arm9_main/sub_21284C0_021284C0.c
- docs/function_notes/agent_08.md:69 return button state 4: plays 10-step scroll animation from table, then returns to idle
sub_2128508
export/plan0/arm9_main/sub_2128508_02128508.c
- docs/function_notes/agent_08.md:70 return button state 3: 9-step slide-in animation from table, then goes to state 2 or 4
sub_2128570
export/plan0/arm9_main/sub_2128570_02128570.c
- docs/function_notes/agent_08.md:71 return button state 2 (idle): on press goes to state 3, on release flag goes to state 4
sub_21285B0
export/plan0/arm9_main/sub_21285B0_021285B0.c
- docs/function_notes/agent_08.md:72 return button state 1: 10-step slide animation then idle (state 2)
sub_21285F8
export/plan0/arm9_main/sub_21285F8_021285F8.c
- docs/function_notes/agent_08.md:73 return button state 0: when shown, goes to state 1 and sets its palette
sub_2128624
export/plan0/arm9_main/sub_2128624_02128624.c
- docs/function_notes/agent_08.md:74 sets palette bank (0xC000 or 0xD000) on button tilemap rows and DMA-uploads them
sub_21286A0
export/plan0/arm9_main/sub_21286A0_021286A0.c
- docs/function_notes/agent_08.md:75 loads select_return_s_b_00.ncgr/.nclr and select_return_s_bg_00.nscr and uploads to VRAM
sub_2128778
export/plan0/arm9_main/sub_2128778_02128778.c
- docs/function_notes/agent_08.md:76 sets sub-engine BG control regs (0x4001000 / 0x400100C) for return button
sub_21287C0
export/plan0/arm9_main/sub_21287C0_021287C0.c
- docs/function_notes/agent_08.md:77 clears the pointer at 0x0217D3D8 (return button manager)
sub_21287CC
export/plan0/arm9_main/sub_21287CC_021287CC.c
- docs/function_notes/agent_08.md:78 allocates/initialises return button manager (0x828 block), loads resources unless skipped
sub_2128884
export/plan0/arm9_main/sub_2128884_02128884.c
- docs/function_notes/agent_08.md:79 getter: address of buffer at 0x0217D3DC manager +0x404
sub_2128898
export/plan0/arm9_main/sub_2128898_02128898.c
- docs/function_notes/agent_08.md:80 getter: pointer stored at 0x0217D3DC
sub_21288A4
export/plan0/arm9_main/sub_21288A4_021288A4.c
- docs/function_notes/agent_08.md:81 copies 32 bytes from a table at 0x216E8C0 to stack and calls sub_20487FC (archive/NitroFS file open with that table)
sub_21288D8
export/plan0/arm9_main/sub_21288D8_021288D8.c
- docs/function_notes/agent_08.md:82 calls sub_20AE6AC and sub_21289E0, sub_20AE630; reads result via sub_212898C, stores 16-bit into a1+4
sub_212891C
export/plan0/arm9_main/sub_212891C_0212891C.c
- docs/function_notes/agent_08.md:83 calls sub_212899C then sub_20AE5F0 on manager 0x0217D3DC (+0x404)
sub_2128940
export/plan0/arm9_main/sub_2128940_02128940.c
- docs/function_notes/agent_08.md:86 shutdown: calls sub_212A1C4, clears the pointer at 0x0217D3DC (text input buffer manager)
sub_2128958
export/plan0/arm9_main/sub_2128958_02128958.c
- docs/function_notes/agent_08.md:87 allocates the 0x808-byte text-input manager at 0x0217D3DC and inits it via sub_212A1E0
sub_212898C
export/plan0/arm9_main/sub_212898C_0212898C.c
- docs/function_notes/agent_08.md:88 getter: friend-code screen (0x0217D3E0) +0x72 signed short, the screen's result/next-step code
sub_212899C
export/plan0/arm9_main/sub_212899C_0212899C.c
- docs/function_notes/agent_08.md:89 updates screen scroll: sub-engine BG offset (0x400101C) from +0x84, then calls sub_20ABA9C and sub_21258F0
sub_21289E0
export/plan0/arm9_main/sub_21289E0_021289E0.c
- docs/function_notes/agent_08.md:90 friend-code screen per-frame update: runs state handler 0-13, then updates cursor/button cells and draws sprites for both screens
sub_2128B0C
export/plan0/arm9_main/sub_2128B0C_02128B0C.c
- docs/function_notes/agent_08.md:91 highlights the currently selected of 6 keypad-page tab cells (sets cell enable flag)
sub_2128B54
export/plan0/arm9_main/sub_2128B54_02128B54.c
- docs/function_notes/agent_08.md:92 updates the input-slot indicator cells according to how many characters are entered
sub_2128BD4
export/plan0/arm9_main/sub_2128BD4_02128BD4.c
- docs/function_notes/agent_08.md:93 selects the highlighted cell of the current keypad page from cursor position
sub_2128C40
export/plan0/arm9_main/sub_2128C40_02128C40.c
- docs/function_notes/agent_08.md:94 shows/hides the two OK/confirm-style cells depending on flags at +0x1C
sub_2128CA0
export/plan0/arm9_main/sub_2128CA0_02128CA0.c
- docs/function_notes/agent_08.md:95 shows/hides the two cell objects depending on flags at +0x14
sub_2128CFC
export/plan0/arm9_main/sub_2128CFC_02128CFC.c
- docs/function_notes/agent_08.md:96 copies per-row tile cell data into sprite OAM entries for both screens (via sub_212426C)
sub_2128DBC
export/plan0/arm9_main/sub_2128DBC_02128DBC.c
- docs/function_notes/agent_08.md:97 friend-code screen state 13: after dialog closes sets result code 0 or 3, or closes pending dialog
sub_2128E08
export/plan0/arm9_main/sub_2128E08_02128E08.c
- docs/function_notes/agent_08.md:98 friend-code screen state 12: handles dialog answer; sets result 12/7 or shows another confirmation message (BMG strings 19, 0, 1)
sub_2128ECC
export/plan0/arm9_main/sub_2128ECC_02128ECC.c
- docs/function_notes/agent_08.md:99 friend-code screen state 11: waits 90 frames after dialog, then shows a two-window message (strings 9, 4), goes to state 12
sub_2128F7C
export/plan0/arm9_main/sub_2128F7C_02128F7C.c
- docs/function_notes/agent_08.md:100 friend-code screen state 10: slides panels in, on dialog confirm either registers friend (sub_2060CB4) and shows message or shows error
sub_212913C
export/plan0/arm9_main/sub_212913C_0212913C.c
- docs/function_notes/agent_08.md:101 friend-code screen state 9: 15-frame panel slide animation, then state 10
sub_21291D4
export/plan0/arm9_main/sub_21291D4_021291D4.c
- docs/function_notes/agent_08.md:102 friend-code screen state 8: 15-frame slide animation; after dialog answer branches to confirm dialog (state 9) or back to input
sub_21293B4
export/plan0/arm9_main/sub_21293B4_021293B4.c
- docs/function_notes/agent_08.md:103 friend-code screen state 7: keypad input: touch hit-test of keys, d-pad cursor, A/B, OK/delete buttons, plays SE
sub_21295F4
export/plan0/arm9_main/sub_21295F4_021295F4.c
- docs/function_notes/agent_08.md:104 friend-code screen state 6: panel slide-in animation then state 7
sub_21296B4
export/plan0/arm9_main/sub_21296B4_021296B4.c
- docs/function_notes/agent_08.md:105 computes whether any non-space character has been entered (+0x1C) and button flags (+0x14,+0x18)
sub_2129788
export/plan0/arm9_main/sub_2129788_02129788.c
- docs/function_notes/agent_08.md:106 friend-code screen state 5: waits for sub_2036C5C then shows message 15, goes to state 6
sub_21297CC
export/plan0/arm9_main/sub_21297CC_021297CC.c
- docs/function_notes/agent_08.md:107 friend-code screen state 4: after 120 frames shows message 7 and returns to state 1
sub_212982C
export/plan0/arm9_main/sub_212982C_0212982C.c
- docs/function_notes/agent_08.md:108 friend-code screen state 3: after slide, validates friend code (sub_2061104): shows error 10/11 or proceeds with message 8
sub_2129994
export/plan0/arm9_main/sub_2129994_02129994.c
- docs/function_notes/agent_08.md:111 keyboard state 2 (input): touch hit-test of keys/buttons, OK -> state 3 with SE, cancel -> state 3 with other SE
sub_2129ACC
export/plan0/arm9_main/sub_2129ACC_02129ACC.c
- docs/function_notes/agent_08.md:112 keyboard state 1: 15-frame panel slide-in, then state 2
sub_2129B60
export/plan0/arm9_main/sub_2129B60_02129B60.c
- docs/function_notes/agent_08.md:113 updates "text complete" flag (+0x1C) when cursor is on last slot with a char, and OK/cancel highlight flags
sub_2129BDC
export/plan0/arm9_main/sub_2129BDC_02129BDC.c
- docs/function_notes/agent_08.md:114 keyboard state 0: when sub_2036C5C is true goes to state 1 and shows message 7
sub_2129C18
export/plan0/arm9_main/sub_2129C18_02129C18.c
- docs/function_notes/agent_08.md:115 sets sub-engine blend/BG control regs for the keyboard and clears blend/palette via sub_214A214/sub_214A108
sub_2129CBC
export/plan0/arm9_main/sub_2129CBC_02129CBC.c
- docs/function_notes/agent_08.md:116 loads keyboard resources: Keyboard_s_10key.bnbl/.bncl/.bnll, Keyboard_s.bnbl/.bncl/.bnll, Keyboard_s_o.nce.ncgr/.ncer and others
sub_2129E78
export/plan0/arm9_main/sub_2129E78_02129E78.c
- docs/function_notes/agent_08.md:117 DMA-uploads the current keyboard layout's tilemap to VRAM
sub_2129EA4
export/plan0/arm9_main/sub_2129EA4_02129EA4.c
- docs/function_notes/agent_08.md:118 sets palette/colour on all keyboard key sprites (normal vs pressed vs disabled) and positions the cursor sprites
sub_212A1C4
export/plan0/arm9_main/sub_212A1C4_0212A1C4.c
- docs/function_notes/agent_08.md:119 keyboard shutdown: calls sub_212ABD0 and sub_2125DA0, clears pointer 0x0217D3E0
sub_212A1E0
export/plan0/arm9_main/sub_212A1E0_0212A1E0.c
- docs/function_notes/agent_08.md:120 keyboard init: allocates 196-byte manager, loads resources, sets layout (10-key for mode 12, full otherwise), loads common.bmg
sub_212A410
export/plan0/arm9_main/sub_212A410_0212A410.c
- docs/function_notes/agent_08.md:121 copies the 12 entered 16-bit chars into a 13-byte ASCII string at +0x5C
sub_212A448
export/plan0/arm9_main/sub_212A448_0212A448.c
- docs/function_notes/agent_08.md:122 clears 22 bytes and copies 0x217A9E8 record string into keyboard text buffer
sub_212A484
export/plan0/arm9_main/sub_212A484_0212A484.c
- docs/function_notes/agent_08.md:123 clears 22 bytes and copies keyboard string (+0x44) into text buffer via sub_20AB7A4
sub_212A4BC
export/plan0/arm9_main/sub_212A4BC_0212A4BC.c
- docs/function_notes/agent_08.md:124 clears 26 bytes and copies keyboard buffer (+0x2C) into text buffer via sub_20AB7A4
sub_212A4F4
export/plan0/arm9_main/sub_212A4F4_0212A4F4.c
- docs/function_notes/agent_08.md:125 clears all keyboard sprite objects' visible flags and assigns the cell indices for each layout
sub_212A604
export/plan0/arm9_main/sub_212A604_0212A604.c
- docs/function_notes/agent_08.md:126 sets 4 key-cell sprites per screen to default state with zero offsets
sub_212A670
export/plan0/arm9_main/sub_212A670_0212A670.c
- docs/function_notes/agent_08.md:127 draws the two button label strings (BMG strings 4 and 5) into key sprites
sub_212A700
export/plan0/arm9_main/sub_212A700_0212A700.c
- docs/function_notes/agent_08.md:128 registers the keyboard's two touch hit-boxes (36,122)-(126,142) and (130,122)-(220,142) with sub_20AB910/sub_20AB8D4
sub_212A724
export/plan0/arm9_main/sub_212A724_0212A724.c
- docs/function_notes/agent_08.md:129 uncertain: computes pixel layout for key label strings (subtracts text widths from starting x), for both screens
sub_212A8D0
export/plan0/arm9_main/sub_212A8D0_0212A8D0.c
- docs/function_notes/agent_08.md:130 uncertain: returns sub_21213F4() unless bit 4 of byte +0x31 in record 0x0217A9E8 is set
sub_212A910
export/plan0/arm9_main/sub_212A910_0212A910.c
- docs/function_notes/agent_08.md:131 setter: stores a2 into array element a1 of the table at 0x0217D3E4
sub_212A920
export/plan0/arm9_main/sub_212A920_0212A920.c
- docs/function_notes/agent_08.md:132 icon-strip per-frame update: counter 0-120, picks icon frames and copies two sprite entries to OAM
sub_212A99C
export/plan0/arm9_main/sub_212A99C_0212A99C.c
- docs/function_notes/agent_08.md:133 uncertain: picks the two status icon indices (via sub_21205E8, sub_21431D8, sub_21213F4) and DMA-copies their tiles to OBJ VRAM
sub_212AAA4
export/plan0/arm9_main/sub_212AAA4_0212AAA4.c
- docs/function_notes/agent_08.md:134 loads icon cell bank positions and tile addresses for 5 icon groups, clears icon tiles in OBJ VRAM
sub_212ABD0
export/plan0/arm9_main/sub_212ABD0_0212ABD0.c
- docs/function_notes/agent_08.md:135 clears the pointer at 0x0217D3E4 (status icon strip manager)
sub_212ABDC
export/plan0/arm9_main/sub_212ABDC_0212ABDC.c
- docs/function_notes/agent_08.md:136 allocates (0x11C bytes) and inits the status icon strip manager; chooses icon set from scene id (sub_205E0A0) and mode at 0x021759B0+32
sub_212AD28
export/plan0/arm9_main/sub_212AD28_0212AD28.c
- docs/function_notes/agent_08.md:139 opens an info/explanation message window of type a1 (1-6), setting display regs and blend for it; ignores if already open
sub_212AE2C
export/plan0/arm9_main/sub_212AE2C_0212AE2C.c
- docs/function_notes/agent_08.md:140 builds a message (type 4) from sub_21205F4 value into text buffer via sub_2124FAC / sub_212513C
sub_212AE80
export/plan0/arm9_main/sub_212AE80_0212AE80.c
- docs/function_notes/agent_08.md:141 sets up the message window's tilemap/BG and clears/uploads its tile and map buffers
sub_212AFAC
export/plan0/arm9_main/sub_212AFAC_0212AFAC.c
- docs/function_notes/agent_08.md:142 picks BMG string from common.bmg (130-136 by type 0-6) for the message window title
sub_212B064
export/plan0/arm9_main/sub_212B064_0212B064.c
- docs/function_notes/agent_08.md:143 clears 0x600 bytes of the message window buffer at +0x1444
sub_212B090
export/plan0/arm9_main/sub_212B090_0212B090.c
- docs/function_notes/agent_08.md:144 getter: address of message window buffer (+0x44)
sub_212B09C
export/plan0/arm9_main/sub_212B09C_0212B09C.c
- docs/function_notes/agent_08.md:145 clears 0x1400 bytes of the message window buffer at +0x44
sub_212B0B8
export/plan0/arm9_main/sub_212B0B8_0212B0B8.c
- docs/function_notes/agent_08.md:146 message window input: A key handling closes/advances it; returns window result, -1 if closed
sub_212B144
export/plan0/arm9_main/sub_212B144_0212B144.c
- docs/function_notes/agent_08.md:147 resets message window open flag (+0xC) and result (+0x10 = -1)
sub_212B158
export/plan0/arm9_main/sub_212B158_0212B158.c
- docs/function_notes/agent_08.md:148 allocates the 0x1A44 message window manager and inits its text object, then calls sub_212B144
sub_212B1A8
export/plan0/arm9_main/sub_212B1A8_0212B1A8.c
- docs/function_notes/agent_08.md:149 staff roll scroller: sets its state to 1 (running)
sub_212B1C0
export/plan0/arm9_main/sub_212B1C0_0212B1C0.c
- docs/function_notes/agent_08.md:150 staff roll: writes the vertical BG scroll register (0x4001010) from scroll position (+8)
sub_212B204
export/plan0/arm9_main/sub_212B204_0212B204.c
- docs/function_notes/agent_08.md:151 staff roll per-frame: copies requested state to current, runs scroll update in state 1
sub_212B260
export/plan0/arm9_main/sub_212B260_0212B260.c
- docs/function_notes/agent_08.md:152 staff roll scroll update: advances scroll, parses next BMG text line (control codes 26, 10), renders it and uploads the row to VRAM
sub_212B5D8
export/plan0/arm9_main/sub_212B5D8_0212B5D8.c
- docs/function_notes/agent_08.md:153 clears pointer at 0x0217D3EC (staff roll scroller)
sub_212B5EC
export/plan0/arm9_main/sub_212B5EC_0212B5EC.c
- docs/function_notes/agent_08.md:154 allocates/inits ending staff roll scroller: loads ending_staffRoll_b_00.nclr and staffRoll.bmg
sub_212B7D8
export/plan0/arm9_main/sub_212B7D8_0212B7D8.c
- docs/function_notes/agent_08.md:155 staff roll fade helper: clears flag +4 of manager 0x0217D3F0
sub_212B7E8
export/plan0/arm9_main/sub_212B7E8_0212B7E8.c
- docs/function_notes/agent_08.md:156 manager 0x0217D3F0: resets counter to 0 and sets +4 = 1 (blink halted)
sub_212B7FC
export/plan0/arm9_main/sub_212B7FC_0212B7FC.c
- docs/function_notes/agent_08.md:157 manager 0x0217D3F0: resets blink counter to 0
sub_212B80C
export/plan0/arm9_main/sub_212B80C_0212B80C.c
- docs/function_notes/agent_08.md:158 blinking colour pulse: counter 0-90, computes fade fraction (triangle wave over 30-frame phases)
sub_212B874
export/plan0/arm9_main/sub_212B874_0212B874.c
- docs/function_notes/agent_08.md:159 blends 4 palette colours between two colour sets by fraction a1 and uploads them to palette RAM
sub_212B91C
export/plan0/arm9_main/sub_212B91C_0212B91C.c
- docs/function_notes/agent_08.md:160 clears pointer at 0x0217D3F0 (palette pulse manager)
sub_212B928
export/plan0/arm9_main/sub_212B928_0212B928.c
- docs/function_notes/agent_08.md:161 allocates palette pulse manager: copies a 16-colour palette row (index a3) and splits the first 8 colours into 5-bit R,G,B arrays
sub_212B9EC
export/plan0/arm9_main/sub_212B9EC_0212B9EC.c
- docs/function_notes/agent_08.md:164 thunk: tail-jumps through a pointer to sub_212CAD8
sub_212B9F8
export/plan0/arm9_main/sub_212B9F8_0212B9F8.c
- docs/function_notes/agent_08.md:165 sound system reset: calls sub_212CB78, SND stop-timer command, flush and wait for ARM7
sub_212BA34
export/plan0/arm9_main/sub_212BA34_0212BA34.c
- docs/function_notes/agent_08.md:166 SND command 24: stops channels (all channels if a1==0, else mask 64)
sub_212BA68
export/plan0/arm9_main/sub_212BA68_0212BA68.c
- docs/function_notes/agent_08.md:167 thunk: tail-jumps through a pointer to sub_2020964
sub_212BA74
export/plan0/arm9_main/sub_212BA74_0212BA74.c
- docs/function_notes/agent_08.md:168 sound per-frame main: drains ARM7 replies, updates active sounds (sub_212C19C, sub_212D03C, sub_212F094), flushes command queue
sub_212BAA8
export/plan0/arm9_main/sub_212BAA8_0212BAA8.c
- docs/function_notes/agent_08.md:169 sound system init (once): inits SND command queue, callback tables, pools; sets state flags 0x0217D3F4/F8
sub_212BB50
export/plan0/arm9_main/sub_212BB50_0212BB50.c
- docs/function_notes/agent_08.md:170 clears the three resource bitmasks at 0x0217D418/41C/420
sub_212BB7C
export/plan0/arm9_main/sub_212BB7C_0212BB7C.c
- docs/function_notes/agent_08.md:171 frees a player slot: clears bit a1 in slot mask 0x0217D41C
sub_212BB9C
export/plan0/arm9_main/sub_212BB9C_0212BB9C.c
- docs/function_notes/agent_08.md:172 allocates a free player slot id 0-7 from mask 0x0217D41C (returns -1 if none)
sub_212BBE0
export/plan0/arm9_main/sub_212BBE0_0212BBE0.c
- docs/function_notes/agent_08.md:173 frees channel bits a1 in mask 0x0217D418
sub_212BBFC
export/plan0/arm9_main/sub_212BBFC_0212BBFC.c
- docs/function_notes/agent_08.md:174 tries to reserve channel bits a1 in mask 0x0217D418; returns 0 if any already used
sub_212BC20
export/plan0/arm9_main/sub_212BC20_0212BC20.c
- docs/function_notes/agent_08.md:175 releases capture/resource bits (SND command 27) and clears them in mask 0x0217D420
sub_212BC58
export/plan0/arm9_main/sub_212BC58_0212BC58.c
- docs/function_notes/agent_08.md:176 reserves resource bits a1 in mask 0x0217D420 and sends SND command 26
sub_212BCAC
export/plan0/arm9_main/sub_212BCAC_0212BCAC.c
- docs/function_notes/agent_08.md:177 re-queues sound a1 in the priority-sorted active list with new priority a2
sub_212BD10
export/plan0/arm9_main/sub_212BD10_0212BD10.c
- docs/function_notes/agent_08.md:178 releases sound's bound player slot (sub_212DCAC) and returns it to its free list
sub_212BD6C
export/plan0/arm9_main/sub_212BD6C_0212BD6C.c
- docs/function_notes/agent_08.md:179 releases a sound: unlinks its handle, removes from player/active lists, marks free
sub_212BDFC
export/plan0/arm9_main/sub_212BDFC_0212BDFC.c
- docs/function_notes/agent_08.md:180 allocates a sound object with priority a1, stealing the lowest-priority one if it is lower than a1
sub_212BE78
export/plan0/arm9_main/sub_212BE78_0212BE78.c
- docs/function_notes/agent_08.md:181 stops a sound: fades (if playing state 2) and stops SND sequence, then frees it
sub_212BEB4
export/plan0/arm9_main/sub_212BEB4_0212BEB4.c
- docs/function_notes/agent_08.md:182 inserts sound a1 into the global active list sorted by priority
sub_212BF14
export/plan0/arm9_main/sub_212BF14_0212BF14.c
- docs/function_notes/agent_08.md:183 inserts sound a2 into list a1 sorted by priority and records the list as its owner
sub_212BF70
export/plan0/arm9_main/sub_212BF70_0212BF70.c
- docs/function_notes/agent_08.md:184 resets a sound's volume/pan/fade fields (volume 127, pan 127) and fade-in state
sub_212BFBC
export/plan0/arm9_main/sub_212BFBC_0212BFBC.c
- docs/function_notes/agent_08.md:185 takes a free sequence-player slot from group a1's free list and binds it to a2
sub_212C018
export/plan0/arm9_main/sub_212C018_0212C018.c
- docs/function_notes/agent_08.md:186 stops sound with fade time a2 frames (0 = immediately), else starts fade-out and requeues it
sub_212C078
export/plan0/arm9_main/sub_212C078_0212C078.c
- docs/function_notes/agent_08.md:187 starts a prepared sound: SND prepare-sequence command, allocates tracks, resets state and sets playing flags
sub_212C0D4
export/plan0/arm9_main/sub_212C0D4_0212C0D4.c
- docs/function_notes/agent_08.md:188 thunk: tail-jumps through a pointer to sub_212BD6C
sub_212C0E0
export/plan0/arm9_main/sub_212C0E0_0212C0E0.c
- docs/function_notes/agent_08.md:189 allocates a sound for player group a2 with priority a3 and binds it to handle a1 (frees old binding first)
sub_212C19C
export/plan0/arm9_main/sub_212C19C_0212C19C.c
- docs/function_notes/agent_08.md:190 per-frame update of all active sounds: sums volume layers (table lookup), applies fades, starts prepared sequences, frees finished ones
sub_212C310
export/plan0/arm9_main/sub_212C310_0212C310.c
- docs/function_notes/agent_08.md:191 initialises sound pools: 16 sound objects (68 bytes) and 32 player groups (36 bytes each)
sub_212C3C8
export/plan0/arm9_main/sub_212C3C8_0212C3C8.c
- docs/function_notes/agent_08.md:192 sound handle: SND dealloc-track command for track a2 (returns 0 if handle has no sound)
sub_212C400
export/plan0/arm9_main/sub_212C400_0212C400.c
- docs/function_notes/agent_08.md:193 sound handle: reads player variable a2 into *a3 (or -1 if sequence not started)
sub_212C450
export/plan0/arm9_main/sub_212C450_0212C450.c
- docs/function_notes/agent_08.md:194 sound handle: sets volume ramp mode 2 with target a2 and duration a3
sub_212C478
export/plan0/arm9_main/sub_212C478_0212C478.c
- docs/function_notes/agent_08.md:195 sound handle: sets volume mode 1 with value a2
sub_212C494
export/plan0/arm9_main/sub_212C494_0212C494.c
- vm_model/src/sound.rs:609 Tempo ratio in 1/256 (
sub_212C494: 300 after the final-lap fanfare speeds the music up). - game/src/music.rs:15 course music resumes at afterwards (
sub_212C494(h, 300)). - docs/function_notes/agent_08.md:196 sound handle: SND player parameter (offset 26) set to a2
sub_212C4C4
export/plan0/arm9_main/sub_212C4C4_0212C4C4.c
- docs/function_notes/agent_08.md:197 sound handle: SND track parameter (offset 25) set for track a2 to a3
sub_212C4F4
export/plan0/arm9_main/sub_212C4F4_0212C4F4.c
- docs/function_notes/agent_08.md:198 sound handle: SND track parameter (offset 9) set for track a2 to a3
sub_212C524
export/plan0/arm9_main/sub_212C524_0212C524.c
- docs/function_notes/agent_08.md:199 sound handle: SND track parameter (offset 12) set for track a2 to a3
sub_212C554
export/plan0/arm9_main/sub_212C554_0212C554.c
- docs/function_notes/agent_08.md:200 sound handle: SND track parameter (offset 10) set for track a2 from dB table entry a3
sub_212C594
export/plan0/arm9_main/sub_212C594_0212C594.c
- docs/function_notes/agent_08.md:201 sound handle: SND mute-track command for track a2 flag a3
sub_212C5C4
export/plan0/arm9_main/sub_212C5C4_0212C5C4.c
- docs/function_notes/agent_08.md:202 sound handle: SND player parameter (offset 4) set to a2
sub_212C5F4
export/plan0/arm9_main/sub_212C5F4_0212C5F4.c
- docs/function_notes/agent_08.md:203 sound handle: changes the sound's priority to a2
sub_212C620
export/plan0/arm9_main/sub_212C620_0212C620.c
- docs/function_notes/agent_08.md:204 sound handle: starts a linear volume ramp to a2<<8 over a3 frames (not while stopping)
sub_212C668
export/plan0/arm9_main/sub_212C668_0212C668.c
- docs/function_notes/agent_08.md:205 sound handle: sets volume-layer byte +64 (e.g. master volume 0-127)
sub_212C678
export/plan0/arm9_main/sub_212C678_0212C678.c
- docs/function_notes/agent_08.md:206 sound handle: sets volume-layer byte +65 (second volume layer)
sub_212C688
export/plan0/arm9_main/sub_212C688_0212C688.c
- docs/function_notes/agent_08.md:207 detaches handle from its sound (clears both back-pointers)
sub_212C6A0
export/plan0/arm9_main/sub_212C6A0_0212C6A0.c
- docs/function_notes/agent_08.md:208 initialises a sound handle (sets pointer to NULL)
sub_212C6AC
export/plan0/arm9_main/sub_212C6AC_0212C6AC.c
- docs/function_notes/agent_08.md:209 stops all 16 sounds in the pool with fade time a1
sub_212C6F0
export/plan0/arm9_main/sub_212C6F0_0212C6F0.c
- docs/function_notes/agent_08.md:210 handle wrapper: stops handle's sound with fade time a2 (tail-calls sub_212C018)
sub_212C700
export/plan0/arm9_main/sub_212C700_0212C700.c
- docs/function_notes/agent_08.md:211 creates a stream/player slot object in group a1 with buffer size a3, queues it on the group's list
sub_212C7A0
export/plan0/arm9_main/sub_212C7A0_0212C7A0.c
- docs/function_notes/agent_08.md:212 sets sound group a1 field +28 to a2 (36-byte group entry at 0x0217D87C)
sub_212C7B8
export/plan0/arm9_main/sub_212C7B8_0212C7B8.c
- docs/function_notes/agent_08.md:213 sets sound group a1 maximum simultaneous sounds (+24) to a2
sub_212C7D8
export/plan0/arm9_main/sub_212C7D8_0212C7D8.c
- docs/function_notes/agent_08.md:214 sets sound group a1 volume byte (+32) to a2
sub_212C7F0
export/plan0/arm9_main/sub_212C7F0_0212C7F0.c
- docs/function_notes/agent_08.md:215 releases a stream object: frees its slot bit, unlinks it, clears running flag
sub_212C824
export/plan0/arm9_main/sub_212C824_0212C824.c
- docs/function_notes/agent_08.md:216 stops stream: SND stop-timer, frees alarm/timer objects, flushes ARM7 and releases the object
sub_212C8A4
export/plan0/arm9_main/sub_212C8A4_0212C8A4.c
- docs/function_notes/agent_08.md:217 sets stream volume a2 and sends SND volume command for each of its channels using a dB table
sub_212C918
export/plan0/arm9_main/sub_212C918_0212C918.c
- docs/function_notes/agent_08.md:218 closes the stream if its in-use flag (bit 0) is set
sub_212C948
export/plan0/arm9_main/sub_212C948_0212C948.c
- docs/function_notes/agent_08.md:219 starts stream: SND start-timer command, activates alarm/timer, sets running flag
sub_212C9A4
export/plan0/arm9_main/sub_212C9A4_0212C9A4.c
- docs/function_notes/agent_08.md:220 releases the stream's channel resources (sub_212BC20) and clears them
sub_212C9D4
export/plan0/arm9_main/sub_212C9D4_0212C9D4.c
- docs/function_notes/agent_08.md:221 reverb/capture buffer callback: queues or directly invokes the processing of the next buffer chunk, advancing the chunk index
sub_212CAD8
export/plan0/arm9_main/sub_212CAD8_0212CAD8.c
- docs/function_notes/agent_08.md:222 reverb/capture restart: clears both buffers, cache-flushes them and starts the SND timer
sub_212CB78
export/plan0/arm9_main/sub_212CB78_0212CB78.c
- docs/function_notes/agent_08.md:223 reverb/capture: stops SND timer, flushes and waits for the ARM7
sub_212CBD8
export/plan0/arm9_main/sub_212CBD8_0212CBD8.c
- docs/function_notes/agent_08.md:224 reverb/capture full shutdown: stops timer, releases channels/slot/resource bits, clears active flag (NNS_SndCaptureStopReverb-like)
sub_212CCD4
export/plan0/arm9_main/sub_212CCD4_0212CCD4.c
- docs/function_notes/agent_08.md:225 reverb/capture start: sets up 2 PCM channels + 2 capture units with buffers a2/a3 and alarm callback sub_212C9D4 (NNS_SndCaptureStartReverb-like)
sub_212D03C
export/plan0/arm9_main/sub_212D03C_0212D03C.c
- docs/function_notes/agent_08.md:226 reverb/capture per-frame: advances volume ramp and sends new volume to ARM7, shuts down when ramp ended
sub_212D0EC
export/plan0/arm9_main/sub_212D0EC_0212D0EC.c
- docs/function_notes/hk_31.md:20 ARM stub: clears two sound-state globals (off_212D104[0] and off_212D108), returns second pointer
sub_212D10C
export/plan0/arm9_main/sub_212D10C_0212D10C.c
- docs/function_notes.md:1541 when the sound global at off_212D150 is set and its field matches, sets up the stream state
- docs/function_notes/NEEDS_REVIEW.md:1372 if sound global at off_212D150 is set and its field[1]==1, calls sub_212CBD8 (reverb/capture full shutdown) [REVIEW]
- docs/function_notes/hk_31.md:21 if sound global at off_212D150 is set and its field[1]==1, calls sub_212CBD8 (reverb/capture full shutdown) [REVIEW]
sub_212D154
export/plan0/arm9_main/sub_212D154_0212D154.c
- docs/function_notes.md:628 starts a sound/stream buffer: sub_212D10C, returns 0 if the flag at off_212D210 is set; otherwise sub_214D018(0, buf, len) and sub_200EE74(buf, len) (cache flush), then sub_212CCD4(1, buf, buf+len/2, len/2, a3, 0, 0, 1, a4, 127, 0, 127, a5, a6, a7)
- docs/function_notes/NEEDS_REVIEW.md:1373 starts a sound/stream buffer: calls sub_212D10C, bails if flag at off_212D210 set, sub_214D018 + sub_200EE74 (DC flush) on buffer, then sub_212CCD4 with 15 args [REVIEW]
- docs/function_notes/hk_31.md:22 starts a sound/stream buffer: calls sub_212D10C, bails if flag at off_212D210 set, sub_214D018 + sub_200EE74 (DC flush) on buffer, then sub_212CCD4 with 15 args [REVIEW]
sub_212D214
export/plan0/arm9_main/sub_212D214_0212D214.c
- docs/function_notes/hk_31.md:23 clears word +136 of object a3; returns 0
sub_212D220
export/plan0/arm9_main/sub_212D220_0212D220.c
- docs/function_notes/hk_31.md:24 clears word +132 of object a3; returns 0
sub_212D22C
export/plan0/arm9_main/sub_212D22C_0212D22C.c
- docs/function_notes/hk_31.md:25 clears word +140 of object a3; returns 0
sub_212D238
export/plan0/arm9_main/sub_212D238_0212D238.c
- docs/function_notes/hk_31.md:26 returns record a1 of per-object table (base *off_212D250+132, stride 16) after storing a2 in its +20 field
sub_212D254
export/plan0/arm9_main/sub_212D254_0212D254.c
- docs/function_notes/hk_31.md:27 getter: returns +20 field of record a1 in table at *off_212D278+132 if a1 < count (+8), else 0
sub_212D27C
export/plan0/arm9_main/sub_212D27C_0212D27C.c
- docs/function_notes/hk_31.md:28 seeks an FS file (sub_2004840, FS_SeekFile) to record offset+a4 and reads up to a3 bytes into a2 (sub_20048AC); returns -1 on error or bad index
sub_212D300
export/plan0/arm9_main/sub_212D300_0212D300.c
- docs/function_notes/hk_31.md:29 getter: returns +16 field of record a1 in table at *off_212D324+132 if in range, else 0
sub_212D328
export/plan0/arm9_main/sub_212D328_0212D328.c
- docs/function_notes/hk_31.md:30 lookup in sub-table at *off_212D388+140 (count +0, offset words from +28): returns pointer to entry a1 or 0
sub_212D38C
export/plan0/arm9_main/sub_212D38C_0212D38C.c
- docs/function_notes/hk_31.md:31 same lookup as sub_212D328 with offset word at +24 and global off_212D3EC
sub_212D3F0
export/plan0/arm9_main/sub_212D3F0_0212D3F0.c
- docs/function_notes/hk_31.md:32 same lookup as sub_212D328 with offset word at +20 and global off_212D450
sub_212D454
export/plan0/arm9_main/sub_212D454_0212D454.c
- docs/function_notes/hk_31.md:33 same lookup as sub_212D328 with offset word at +16 and global off_212D4B4
sub_212D4B8
export/plan0/arm9_main/sub_212D4B8_0212D4B8.c
- docs/function_notes/hk_31.md:34 same lookup as sub_212D328 with offset word at +12 and global off_212D518
sub_212D51C
export/plan0/arm9_main/sub_212D51C_0212D51C.c
- docs/function_notes/hk_31.md:35 same lookup as sub_212D328 with offset word at +8 and global off_212D57C
sub_212D580
export/plan0/arm9_main/sub_212D580_0212D580.c
- docs/function_notes/hk_31.md:36 finds entry via sub_212D4B8(a1), its id via sub_212D254, then sub_212F788 sub-record for a2; returns record+4 or 0
sub_212D5D0
export/plan0/arm9_main/sub_212D5D0_0212D5D0.c
- docs/function_notes/hk_31.md:37 getter: returns global word at off_212D5DC (trivial)
sub_212D5E0
export/plan0/arm9_main/sub_212D5E0_0212D5E0.c
- docs/function_notes/hk_31.md:38 exchanges global at off_212D5F4 with a1 and returns the old value
sub_212D5F8
export/plan0/arm9_main/sub_212D5F8_0212D5F8.c
- docs/function_notes.md:1043 initialises a 48-byte header at a1 from the loaded data at a2 (copied with sub_214D02C) and fixes up its pointers
- docs/function_notes/NEEDS_REVIEW.md:1374 initialises a 48-byte header at a1 from loaded data at a2: relocates pointers by adding base a2 and fixes an entry array; stores a1 in off_212D6C0 [REVIEW]
- docs/function_notes/hk_31.md:39 initialises a 48-byte header at a1 from loaded data at a2: relocates pointers by adding base a2 and fixes an entry array; stores a1 in off_212D6C0 [REVIEW]
sub_212D6C4
export/plan0/arm9_main/sub_212D6C4_0212D6C4.c
- docs/function_notes.md:1192 loads the 48-byte header and then up to three data blocks from the stream (sub_2004840 check, sub_20048AC read)
- docs/function_notes/NEEDS_REVIEW.md:1375 loads 48-byte header then up to three data blocks from an FS file (seek sub_2004840 / read sub_20048AC) into allocs from sub_212DB7C; returns success bool [REVIEW]
- docs/function_notes/hk_31.md:40 loads 48-byte header then up to three data blocks from an FS file (seek sub_2004840 / read sub_20048AC) into allocs from sub_212DB7C; returns success bool [REVIEW]
sub_212D8E0
export/plan0/arm9_main/sub_212D8E0_0212D8E0.c
- docs/function_notes/hk_31.md:41 opens a file by FAT entry (sub_2004B54, sub_2004A80 FS_OpenFileFast), sets a1[12]=1, calls sub_212D6C4 to load it, registers a1 in off_212D964
sub_212D968
export/plan0/arm9_main/sub_212D968_0212D968.c
- docs/function_notes.md:1044 saves the sound state from sub_2021114, sets sub_20211E4(1), then restores it through sub_2021154
- docs/function_notes/NEEDS_REVIEW.md:1376 saves sound state from sub_2021114, sets sub_20211E4(1), returns sub_2021154(saved): sound-lock/restore wrapper [REVIEW]
- docs/function_notes/hk_31.md:42 saves sound state from sub_2021114, sets sub_20211E4(1), returns sub_2021154(saved): sound-lock/restore wrapper [REVIEW]
sub_212D98C
export/plan0/arm9_main/sub_212D98C_0212D98C.c
- docs/function_notes/hk_31.md:43 allocates a 20-byte node from heap (sub_201808C, 20, 4), calls sub_212DA1C, links node into list at a1+4 via sub_20174A4; returns 1 on success
sub_212D9DC
export/plan0/arm9_main/sub_212D9DC_0212D9DC.c
- docs/function_notes/hk_31.md:44 initialises list head at a1+4 (sub_2017538, size 12), stores a2 in *a1, then calls sub_212D98C; returns bool
sub_212DA1C
export/plan0/arm9_main/sub_212DA1C_0212DA1C.c
- docs/function_notes/hk_31.md:45 thunk: calls function pointer off_212DA28 with (a1, 0)
sub_212DA2C
export/plan0/arm9_main/sub_212DA2C_0212DA2C.c
- docs/function_notes/hk_31.md:46 returns the u16 count at a1+12 minus 1 (last index)
sub_212DA38
export/plan0/arm9_main/sub_212DA38_0212DA38.c
- docs/function_notes.md:1563 dispatches a queue: walks the list nodes for index a2 and calls each node's handler
- docs/function_notes/NEEDS_REVIEW.md:1377 dispatches a queue: walks list nodes for index a2 calling each node's callback (+12) with its args, optionally calls sub_212D968, then refills via sub_212D98C [REVIEW]
- docs/function_notes/hk_31.md:47 dispatches a queue: walks list nodes for index a2 calling each node's callback (+12) with its args, optionally calls sub_212D968, then refills via sub_212D98C [REVIEW]
sub_212DB24
export/plan0/arm9_main/sub_212DB24_0212DB24.c
- docs/function_notes.md:1275 advances a queue: sub_2017FB4 check (returns -1 on failure), then sub_212D98C
- docs/function_notes/NEEDS_REVIEW.md:1378 advances a queue: sub_2017FB4 check (returns -1 on fail), refills via sub_212D98C returning count-1, else sub_2017F58 cancel and -1 [REVIEW]
- docs/function_notes/hk_31.md:48 advances a queue: sub_2017FB4 check (returns -1 on fail), refills via sub_212D98C returning count-1, else sub_2017F58 cancel and -1 [REVIEW]
sub_212DB7C
export/plan0/arm9_main/sub_212DB7C_0212DB7C.c
- docs/function_notes/hk_31.md:49 allocates a 32-byte-aligned node (size a2 rounded up, plus 32) from heap, stores a2..a5 at +8..+20, links into list at a1+4 via sub_20174A4; returns node+32
sub_212DBEC
export/plan0/arm9_main/sub_212DBEC_0212DBEC.c
- docs/function_notes.md:1276 drains a list: calls each node's callback for every sub-list entry from sub_2017328
- docs/function_notes/NEEDS_REVIEW.md:1379 drains a list: calls node callbacks for each sub-list, releases via sub_201804C(*a1,3), optionally sub_212D968, then refills via sub_212D98C [REVIEW]
- docs/function_notes/hk_31.md:50 drains a list: calls node callbacks for each sub-list, releases via sub_201804C(*a1,3), optionally sub_212D968, then refills via sub_212D98C [REVIEW]
sub_212DCAC
export/plan0/arm9_main/sub_212DCAC_0212DCAC.c
- docs/function_notes/hk_31.md:51 frees: sub_212DBEC(a1) then sub_20180D4(*a1) to free the heap block
sub_212DCC8
export/plan0/arm9_main/sub_212DCC8_0212DCC8.c
- docs/function_notes/hk_31.md:52 allocates a 4-byte-aligned block of a2 bytes in range [a1, a1+a2) via sub_20180E0, initialises it with sub_212D9DC; returns block or 0
sub_212DD64
export/plan0/arm9_main/sub_212DD64_0212DD64.c
- docs/function_notes.md:1193 iterates the SDAT sequence records via sub_20219F0 looking for a matching entry
- docs/function_notes/NEEDS_REVIEW.md:1380 iterates SDAT sequence records via sub_20219F0 looking for a record with type 1 and matching field a3, calling sub_212DE34 on each [REVIEW]
- docs/function_notes/hk_31.md:53 iterates SDAT sequence records via sub_20219F0 looking for a record with type 1 and matching field a3, calling sub_212DE34 on each [REVIEW]
sub_212DE34
export/plan0/arm9_main/sub_212DE34_0212DE34.c
- docs/function_notes.md:1045 loads and registers the sample region for record a2 of stream a1; returns 1 when sub_2021968 already has it
- docs/function_notes/NEEDS_REVIEW.md:1381 loads/registers a sample region for record a2 of stream a1: size from neighbouring offsets, node via sub_212DB7C, read via sub_212D27C, cache flush [REVIEW]
- docs/function_notes/hk_31.md:54 loads/registers a sample region for record a2 of stream a1: size from neighbouring offsets, node via sub_212DB7C, read via sub_212D27C, cache flush [REVIEW]
sub_212DF28
export/plan0/arm9_main/sub_212DF28_0212DF28.c
- docs/function_notes/hk_31.md:55 if a1 equals sub_2021968(a3,a4) clears it via sub_20219B0; then sends SND command 32 (sub_2020990) with (a1, a1+a2)
sub_212DF7C
export/plan0/arm9_main/sub_212DF7C_0212DF7C.c
- docs/function_notes/hk_31.md:56 wrapper: sub_212E04C(a1,a3,a4) then sub_2021BE8(a1) to clear the list for a1
sub_212DFA0
export/plan0/arm9_main/sub_212DFA0_0212DFA0.c
- docs/function_notes/hk_31.md:57 wrapper: sub_212E04C(a1,a3,a4), SND command 32 via sub_2020990(a1, a1+a2), then sub_2021BE8(a1)
sub_212DFDC
export/plan0/arm9_main/sub_212DFDC_0212DFDC.c
- docs/function_notes/hk_31.md:58 wrapper: sub_212E04C(a1,a3,a4), SND command 31 via sub_20209BC(a1, a1+a2), then sub_2021C34(a1) unlink
sub_212E018
export/plan0/arm9_main/sub_212E018_0212E018.c
- docs/function_notes/hk_31.md:59 wrapper: sub_212E04C(a1,a3,a4), then SND command 30 via sub_20209E8(a1, a1+a2)
sub_212E04C
export/plan0/arm9_main/sub_212E04C_0212E04C.c
- docs/function_notes/hk_31.md:60 if a2 nonzero: interrupt-protected swap of global via sub_212D5E0, clears slot via sub_212D238(a3,0) if a1 matches sub_212D254(a3); returns a1 otherwise
sub_212E0B8
export/plan0/arm9_main/sub_212E0B8_0212E0B8.c
- docs/function_notes.md:1194 get-or-create: finds the 60-byte-header stream object for an index through sub_212D254, creating it when missing
- docs/function_notes/NEEDS_REVIEW.md:1382 get-or-create a 60-byte-header stream object for index a1 (sub_212D27C read, sub_212DB7C alloc, copy/clear, cache flush); tail calls unresolved pointer v12 [REVIEW]
- docs/function_notes/hk_31.md:61 get-or-create a 60-byte-header stream object for index a1 (sub_212D27C read, sub_212DB7C alloc, copy/clear, cache flush); tail calls unresolved pointer v12 [REVIEW]
sub_212E1EC
export/plan0/arm9_main/sub_212E1EC_0212E1EC.c
- docs/function_notes/hk_31.md:62 get-or-create object for index a1 via sub_212E3DC with table off_212E264; stores it via sub_212D238 if a3 is set
sub_212E268
export/plan0/arm9_main/sub_212E268_0212E268.c
- docs/function_notes/hk_31.md:63 same as sub_212E1EC with table off_212E2E0
sub_212E2E4
export/plan0/arm9_main/sub_212E2E4_0212E2E4.c
- docs/function_notes/hk_31.md:64 same as sub_212E1EC with table off_212E35C
sub_212E360
export/plan0/arm9_main/sub_212E360_0212E360.c
- docs/function_notes/hk_31.md:65 same as sub_212E1EC with table off_212E3D8
sub_212E3DC
export/plan0/arm9_main/sub_212E3DC_0212E3DC.c
- docs/function_notes/hk_31.md:66 generic loader: size from sub_212D300(a1), alloc via sub_212DB7C, read via sub_212D27C, sub_200EE58 cache flush; returns object or 0
sub_212E490
export/plan0/arm9_main/sub_212E490_0212E490.c
- docs/function_notes/hk_31.md:67 type-2 record handler: looks up sub_212D3F0(a1); loads via sub_212E0B8 or sub_212E1EC when a2&4; returns error 5 (no entry) or 9 (load fail), outputs via a5
sub_212E538
export/plan0/arm9_main/sub_212E538_0212E538.c
- docs/function_notes/hk_31.md:68 type-1 record handler: looks up sub_212D454; loads via sub_212E268 if a2&2; loops 4 child records calling sub_212E490, sub_212DD64, sub_2021CD4; errors 4/5/8/9
sub_212E698
export/plan0/arm9_main/sub_212E698_0212E698.c
- docs/function_notes/hk_31.md:69 type-3 record handler: looks up sub_212D4B8; loads via sub_212E2E4 if a2&8; errors 3/7
sub_212E708
export/plan0/arm9_main/sub_212E708_0212E708.c
- docs/function_notes/hk_31.md:70 type-0 record handler: looks up sub_212D51C; runs sub_212E538 on its sub-entry; loads via sub_212E360 if a2&1; errors 2/6
sub_212E7B4
export/plan0/arm9_main/sub_212E7B4_0212E7B4.c
- docs/function_notes/hk_31.md:71 iterates a table of (type byte, id word) records at sub_212D328(a1), dispatching to sub_212E708/538/490/698 with preload flags; returns first error
sub_212E8F4
export/plan0/arm9_main/sub_212E8F4_0212E8F4.c
- docs/function_notes/hk_31.md:72 wrapper: returns whether sub_212E538(a1,a2,a3,1,0) succeeded
sub_212E924
export/plan0/arm9_main/sub_212E924_0212E924.c
- docs/function_notes/hk_31.md:73 wrapper: returns whether sub_212E490(a1,255,a2,1,0) succeeded
sub_212E95C
export/plan0/arm9_main/sub_212E95C_0212E95C.c
- docs/function_notes/hk_31.md:74 wrapper: returns whether sub_212E538(a1,255,a2,1,0) succeeded
sub_212E994
export/plan0/arm9_main/sub_212E994_0212E994.c
- docs/function_notes/hk_31.md:75 wrapper: returns whether sub_212E698(a1,255,a2,1,0) succeeded
sub_212E9CC
export/plan0/arm9_main/sub_212E9CC_0212E9CC.c
- docs/function_notes/hk_31.md:76 wrapper: returns whether sub_212E708(a1,255,a2,1,0) succeeded
sub_212EA04
export/plan0/arm9_main/sub_212EA04_0212EA04.c
- docs/function_notes/hk_31.md:77 wrapper: returns whether sub_212E7B4(a1,a2) succeeded
sub_212EA28
export/plan0/arm9_main/sub_212EA28_0212EA28.c
- docs/function_notes/hk_31.md:78 starts a sequence player: slot via sub_212C0E0, loads sub-sequence via sub_212E538, sets params (sub_212C078), volume/pan, sub_212C450
sub_212EAF8
export/plan0/arm9_main/sub_212EAF8_0212EAF8.c
- docs/function_notes.md:1195 like sub_212EA28 but loads with sub_212E708 and finishes the setup
- docs/function_notes/NEEDS_REVIEW.md:1383 like sub_212EA28 but loads with sub_212E708 and finishes with sub_212C478 (sound player start variant) [REVIEW]
- docs/function_notes/hk_31.md:79 like sub_212EA28 but loads with sub_212E708 and finishes with sub_212C478 (sound player start variant) [REVIEW]
sub_212EC04
export/plan0/arm9_main/sub_212EC04_0212EC04.c
- docs/function_notes/hk_31.md:80 looks up entry via sub_212D4B8/sub_212D254 and sub-record via sub_212F788; fills defaults for negative params from the record, then calls sub_212EA28
sub_212ECC0
export/plan0/arm9_main/sub_212ECC0_0212ECC0.c
- docs/function_notes/hk_31.md:81 like sub_212EC04 but passes all parameters straight from the record fields to sub_212EA28
sub_212ED58
export/plan0/arm9_main/sub_212ED58_0212ED58.c
- docs/function_notes/hk_31.md:82 looks up entry via sub_212D51C and calls sub_212EAF8 with the record's fields
sub_212EDAC
export/plan0/arm9_main/sub_212EDAC_0212EDAC.c
- docs/function_notes.md:1277 iterates the 32 channel/slot entries (via sub_212D38C) and sets their twiddle words after sub_212D5D0
- docs/function_notes/NEEDS_REVIEW.md:1400 iterates 32 channel/slot entries (sub_212D38C), sets two per-slot fields (sub_212C7B8/sub_212C7A0) and checks each with sub_212C700; returns 0 on first failure, 1 if all pass [REVIEW]
- docs/function_notes/hk_31.md:117 iterates 32 channel/slot entries (sub_212D38C), sets two per-slot fields (sub_212C7B8/sub_212C7A0) and checks each with sub_212C700; returns 0 on first failure, 1 if all pass [REVIEW]
sub_212EE54
export/plan0/arm9_main/sub_212EE54_0212EE54.c
- docs/function_notes/hk_31.md:83 IRQ-protected insert of node a1 into list off_212EE88 via sub_20174A4
sub_212EE8C
export/plan0/arm9_main/sub_212EE8C_0212EE8C.c
- docs/function_notes.md:1278 IRQ-protected removal of the list nodes in a1 whose field matches (sub_201733C)
- docs/function_notes/NEEDS_REVIEW.md:1384 IRQ-protected removal of list nodes in a1 whose field +8 equals a2 (sub_2017354 unlink, re-queued via sub_212EE54) [REVIEW]
- docs/function_notes/hk_31.md:84 IRQ-protected removal of list nodes in a1 whose field +8 equals a2 (sub_2017354 unlink, re-queued via sub_212EE54) [REVIEW]
sub_212EF00
export/plan0/arm9_main/sub_212EF00_0212EF00.c
- docs/function_notes/hk_31.md:85 decrements counter at obj+288; when it reaches 0 calls sub_212C9A4 to release channel resources; returns obj
sub_212EF48
export/plan0/arm9_main/sub_212EF48_0212EF48.c
- docs/function_notes/hk_31.md:86 if flag bit0 at obj+272 set: sub_212EF00, sub_20049E8 (FS close on obj+92), sub_212EE8C on two lists, then sub_212F058 clears flags
sub_212EFB8
export/plan0/arm9_main/sub_212EFB8_0212EFB8.c
- docs/function_notes/hk_31.md:87 teardown of a sound object: sub_200ED34 lock, sub_212C918 if flag 2, sub_20048CC (FS_CancelFile) if flag 1, sub_212EF48, sub_200ECC4 unlock
sub_212F058
export/plan0/arm9_main/sub_212F058_0212F058.c
- docs/function_notes/hk_31.md:88 clears file handle pointer at obj+332 (zeroing its target) and clears flag bits 0, 2, 1 at obj+272
sub_212F094
export/plan0/arm9_main/sub_212F094_0212F094.c
- docs/function_notes.md:1196 per-frame update of 4 sound player slots (352-byte stride)
- docs/function_notes/NEEDS_REVIEW.md:1385 per-frame update of 4 sound player slots (stride 352): handles fade/volume ramp (sub_212C948, sub_212F7E0, sub_212C8A4 volume set) and finishes via sub_212EFB8 [REVIEW]
- docs/function_notes/hk_31.md:89 per-frame update of 4 sound player slots (stride 352): handles fade/volume ramp (sub_212C948, sub_212F7E0, sub_212C8A4 volume set) and finishes via sub_212EFB8 [REVIEW]
sub_212F1AC
export/plan0/arm9_main/sub_212F1AC_0212F1AC.c
- docs/function_notes.md:1197 averages two int16 arrays, writing (a + b + 1) >> 1 into a1 for a3 / 2 entries
- docs/function_notes/NEEDS_REVIEW.md:1386 averages two int16 arrays, writing (a+b+1)>>1 into a1 for a3/2 samples, then sub_214D0A8 copy [REVIEW]
- docs/function_notes/hk_31.md:90 averages two int16 arrays, writing (a+b+1)>>1 into a1 for a3/2 samples, then sub_214D0A8 copy [REVIEW]
sub_212F1F8
export/plan0/arm9_main/sub_212F1F8_0212F1F8.c
- docs/function_notes.md:1198 audio mixing loop over int16 sample blocks, 24 at a time
- docs/function_notes/NEEDS_REVIEW.md:1387 audio mixing loop over int16 sample blocks of 24 at a time, adds 8-byte per-channel accumulators at a4, clamps to dword_212F3F4, tail-calls v31 [REVIEW]
- docs/function_notes/hk_31.md:91 audio mixing loop over int16 sample blocks of 24 at a time, adds 8-byte per-channel accumulators at a4, clamps to dword_212F3F4, tail-calls v31 [REVIEW]
sub_212F3F8
export/plan0/arm9_main/sub_212F3F8_0212F3F8.c
- docs/function_notes.md:1199 audio filter update over int16 buffers (first taps of each block)
- docs/function_notes/NEEDS_REVIEW.md:1388 audio filter update over int16 buffers: updates first two samples with saturation to dword_212F598 and writes accumulator state at a4+24 [REVIEW]
- docs/function_notes/hk_31.md:92 audio filter update over int16 buffers: updates first two samples with saturation to dword_212F598 and writes accumulator state at a4+24 [REVIEW]
sub_212F5A0
export/plan0/arm9_main/sub_212F5A0_0212F5A0.c
- docs/function_notes/hk_31.md:94 callback driver: optional callbacks at a5+8 and a5+16, calls a5+4 with (a1,a2,a3,a5), then sub_200EE74 cache flush on a1 and a2 for length a3
sub_212F638
export/plan0/arm9_main/sub_212F638_0212F638.c
- docs/function_notes.md:1559 switches the global mode (0..3, default 0), clearing the mode-specific state when it changes
- docs/function_notes/NEEDS_REVIEW.md:1401 switches a global mode (0-3, default 0): clears 192-byte state, stores mode and its handler pointer from a table; stops stream (sub_2020844) if previous mode was 1 [REVIEW]
- docs/function_notes/hk_31.md:118 switches a global mode (0-3, default 0): clears 192-byte state, stores mode and its handler pointer from a table; stops stream (sub_2020844) if previous mode was 1 [REVIEW]
sub_212F730
export/plan0/arm9_main/sub_212F730_0212F730.c
- docs/function_notes.md:629 sub_212F638(a3) sets the mode, then sub_212D154(a1, a2, 0, 32000, 2, off_212F780, off_212F784) starts a 32000 Hz stream
- docs/function_notes/NEEDS_REVIEW.md:1389 calls sub_212F638(a3) to set mode, then sub_212D154(a1, a2, 0, 32000, 2, ...) to start a 32000 Hz stream [REVIEW]
- docs/function_notes/hk_31.md:95 calls sub_212F638(a3) to set mode, then sub_212D154(a1, a2, 0, 32000, 2, ...) to start a 32000 Hz stream [REVIEW]
sub_212F788
export/plan0/arm9_main/sub_212F788_0212F788.c
- docs/function_notes/hk_31.md:96 bounds-checked getter: returns pointer to 12-byte record a2 in table a1 (count at +28, records at +32), or 0 if out of range or record id is -1
sub_212F7C8
export/plan0/arm9_main/sub_212F7C8_0212F7C8.c
- docs/function_notes/hk_31.md:97 predicate: true when counter a1+8 >= a1+12 (finished)
sub_212F7E0
export/plan0/arm9_main/sub_212F7E0_0212F7E0.c
- docs/function_notes/hk_31.md:98 increments counter at +8 saturating at limit +12
sub_212F7F8
export/plan0/arm9_main/sub_212F7F8_0212F7F8.c
- docs/function_notes/hk_31.md:99 linear interpolation: if a1[2] >= a1[3] returns a1[1], else a1[0] + sub_2133068(pos*(a1[1]-a1[0]), a1[3])
sub_212F834
export/plan0/arm9_main/sub_212F834_0212F834.c
- docs/function_notes/hk_31.md:100 initialises a 4-word interpolator state: a1[0] = sub_212F7F8(a1) (current value), a1[1]=a2 (target), a1[3]=a3 (duration), a1[2]=0 (elapsed)
sub_212F864
export/plan0/arm9_main/sub_212F864_0212F864.c
- docs/function_notes/hk_31.md:101 zeroes a 4-word interpolator state (fields 0-3)
sub_212F884
export/plan0/arm9_main/sub_212F884_0212F884.c
- docs/function_notes.md:1279 64-bit signed soft-float style arithmetic routine (1416 bytes): sign and exponent handling
- docs/function_notes/NEEDS_REVIEW.md:1390 64-bit soft-float style arithmetic routine (7948 bytes, with JUMPOUT to 0x2130CDC on sign mismatch) on two int64 args [REVIEW]
- docs/function_notes/hk_31.md:102 64-bit soft-float style arithmetic routine (7948 bytes, with JUMPOUT to 0x2130CDC on sign mismatch) on two int64 args [REVIEW]
sub_212FE20
export/plan0/arm9_main/sub_212FE20_0212FE20.c
- docs/function_notes.md:1280 unsigned 64-bit soft-float style arithmetic routine (868 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1391 unsigned 64-bit soft-float style arithmetic routine (5871 bytes, two u64 args, returns u32) [REVIEW]
- docs/function_notes/hk_31.md:103 unsigned 64-bit soft-float style arithmetic routine (5871 bytes, two u64 args, returns u32) [REVIEW]
sub_2130198
export/plan0/arm9_main/sub_2130198_02130198.c
- docs/function_notes.md:1281 soft-float int64-to-float conversion with sign handling (352 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1392 soft-float int64-to-float style conversion (sign handling, zero early-out, normalisation loop) [REVIEW]
- docs/function_notes/hk_31.md:104 soft-float int64-to-float style conversion (sign handling, zero early-out, normalisation loop) [REVIEW]
sub_2130304
export/plan0/arm9_main/sub_2130304_02130304.c
- docs/function_notes.md:1046 soft-float helper: normalises a signed 32-bit mantissa by its count of leading zeros
- docs/function_notes/NEEDS_REVIEW.md:1393 soft-float helper: normalises a signed 32-bit mantissa by clz shift and returns it shifted left 21 [REVIEW]
- docs/function_notes/hk_31.md:105 soft-float helper: normalises a signed 32-bit mantissa by clz shift and returns it shifted left 21 [REVIEW]
sub_2130340
export/plan0/arm9_main/sub_2130340_02130340.c
- docs/function_notes.md:1047 soft-float helper: absolute value of a signed 32-bit mantissa, normalised with clz
- docs/function_notes/NEEDS_REVIEW.md:1394 soft-float helper: absolute value of a signed 32-bit mantissa, normalised by clz shift and returned <<21 [REVIEW]
- docs/function_notes/hk_31.md:106 soft-float helper: absolute value of a signed 32-bit mantissa, normalised by clz shift and returned <<21 [REVIEW]
sub_2130380
export/plan0/arm9_main/sub_2130380_02130380.c
- docs/function_notes.md:1282 64-bit soft-float style arithmetic routine (1756 bytes): sign, exponent and mantissa combination
- docs/function_notes/NEEDS_REVIEW.md:1395 64-bit soft-float style arithmetic routine (9585 bytes, two int64 args, mul/div-like with normalisation) [REVIEW]
- docs/function_notes/hk_31.md:107 64-bit soft-float style arithmetic routine (9585 bytes, two int64 args, mul/div-like with normalisation) [REVIEW]
sub_2130A70
export/plan0/arm9_main/sub_2130A70_02130A70.c
- docs/function_notes.md:1283 64-bit soft-float style routine (564 bytes) with a signed compare against dword_2130CA4
- docs/function_notes/NEEDS_REVIEW.md:1396 64-bit soft-float style routine (4012 bytes, one signed int64 arg, multi-word shifts) [REVIEW]
- docs/function_notes/hk_31.md:108 64-bit soft-float style routine (4012 bytes, one signed int64 arg, multi-word shifts) [REVIEW]
sub_2130CCC
export/plan0/arm9_main/sub_2130CCC_02130CCC.c
- docs/function_notes.md:1293 64-bit soft-float arithmetic routine (1372 bytes): sign, exponent and mantissa combination
- docs/function_notes/NEEDS_REVIEW.md:1397 64-bit soft-float style arithmetic routine (7179 bytes, int64 + u64 args, add/sub-like with normalisation) [REVIEW]
- docs/function_notes/hk_31.md:109 64-bit soft-float style arithmetic routine (7179 bytes, int64 + u64 args, add/sub-like with normalisation) [REVIEW]
sub_2131234
export/plan0/arm9_main/sub_2131234_02131234.c
- vm_model/src/mission_target.rs:207
range << 12+/- 0.5 truncated back to an integer (sub_2132440,sub_2131234/ - docs/function_notes.md:1294 soft-float 32-bit arithmetic routine (1120 bytes), sign and exponent handling
- docs/function_notes/NEEDS_REVIEW.md:1398 soft-float 32-bit arithmetic routine (6601 bytes, two u32 args, multiply/divide-like with NaN/Inf checks) [REVIEW]
- docs/function_notes/hk_31.md:110 soft-float 32-bit arithmetic routine (6601 bytes, two u32 args, multiply/divide-like with NaN/Inf checks) [REVIEW]
sub_2131694
export/plan0/arm9_main/sub_2131694_02131694.c
- docs/function_notes.md:1200 soft-float single-precision compare helper (NaN and zero handling; returns 1 when a1 < a2)
- docs/function_notes/NEEDS_REVIEW.md:1399 soft-float single-precision compare: returns 1 if a1
=a2, 3 if either is NaN (exponent 0xFF check, JUMPOUT for NaN path) [REVIEW] - docs/function_notes/hk_31.md:111 soft-float single-precision compare: returns 1 if a1
=a2, 3 if either is NaN (exponent 0xFF check, JUMPOUT for NaN path) [REVIEW]
sub_2131718
export/plan0/arm9_main/sub_2131718_02131718.c
- docs/function_notes/hk_31.md:112 soft-float single-precision not-equal compare (returns nonzero when a1 != a2, with +/-0 equal; NaN path)
sub_2131750
export/plan0/arm9_main/sub_2131750_02131750.c
- docs/function_notes/hk_31.md:113 soft-float single-precision equal compare (true when a1 == a2 or both zero; NaN path)
sub_21317B0
export/plan0/arm9_main/sub_21317B0_021317B0.c
- docs/function_notes/hk_31.md:114 soft-float single-precision less-than compare on magnitudes with sign handling (NaN path)
sub_2131860
export/plan0/arm9_main/sub_2131860_02131860.c
- docs/function_notes/hk_31.md:115 soft-float single-precision greater-than compare; on NaN sets invalid-op flag via sub_2142578 and returns 0
sub_21319D8
export/plan0/arm9_main/sub_21319D8_021319D8.c
- docs/function_notes/hk_31.md:116 sets the invalid-operation flag (bit 0) in the FP status word from sub_2142578 (NaN exception helper)
sub_2131B74
export/plan0/arm9_main/sub_2131B74_02131B74.c
- docs/function_notes/hk_32.md:3 soft-float f64 "not equal" compare (a1 != a2), +0/-0 treated equal, NaN path via FP status flags; returns 0/1.
sub_2131BFC
export/plan0/arm9_main/sub_2131BFC_02131BFC.c
- docs/function_notes/hk_32.md:4 soft-float f64 "equal" compare (a1 == a2), same structure as sub_2131B74; returns 0/1.
sub_2131CE8
export/plan0/arm9_main/sub_2131CE8_02131CE8.c
- docs/function_notes/hk_32.md:5 soft-float f64 less-than compare; NaN path sets FP exception flags via sub_2142578 and may call trap handler sub_2134008.
sub_2132200
export/plan0/arm9_main/sub_2132200_02132200.c
- docs/function_notes.md:1201 soft-float f32 scaling and conversion of raw bits (mantissa and exponent handling)
- docs/function_notes/NEEDS_REVIEW.md:1402 soft-float f32 scaling/conversion of raw bits (mantissa <<9, exponent field), inf/NaN exception path via sub_2134188. [REVIEW]
- docs/function_notes/hk_32.md:6 soft-float f32 scaling/conversion of raw bits (mantissa <<9, exponent field), inf/NaN exception path via sub_2134188. [REVIEW]
sub_21322C8
export/plan0/arm9_main/sub_21322C8_021322C8.c
- vm_model/src/mission_target.rs:208
sub_21329F8,sub_21322C8), compared with the 64-bit squared distance. - docs/function_notes/hk_32.md:7 soft-float f32 -> int32 conversion (truncating, saturating to 0x7FFFFFFF / 0x80000000), sets FP flags, overflow trap via sub_2134238.
sub_21323C4
export/plan0/arm9_main/sub_21323C4_021323C4.c
- docs/function_notes.md:1048 soft-float int32 to f32 normalisation and rounding (clz, exponent base 158)
- docs/function_notes/NEEDS_REVIEW.md:1403 soft-float int32 -> f32 normalisation/rounding helper (clz, exponent 158-clz) with FP flag update via sub_2142578. [REVIEW]
- docs/function_notes/hk_32.md:8 soft-float int32 -> f32 normalisation/rounding helper (clz, exponent 158-clz) with FP flag update via sub_2142578. [REVIEW]
sub_2132440
export/plan0/arm9_main/sub_2132440_02132440.c
- vm_model/src/mission_target.rs:207
range << 12+/- 0.5 truncated back to an integer (sub_2132440,sub_2131234/ - docs/function_notes.md:1049 soft-float signed int32 to f32 conversion with sign handling
- docs/function_notes/NEEDS_REVIEW.md:1404 soft-float signed int32 -> f32 conversion with sign handling, clz normalisation and rounding; trap via sub_2134238. [REVIEW]
- docs/function_notes/hk_32.md:9 soft-float signed int32 -> f32 conversion with sign handling, clz normalisation and rounding; trap via sub_2134238. [REVIEW]
sub_213250C
export/plan0/arm9_main/sub_213250C_0213250C.c
- docs/function_notes.md:1295 soft-float f64 arithmetic core (1248 bytes), exponent from the high word and the result packing
- docs/function_notes/NEEDS_REVIEW.md:1454 soft-float f64 arithmetic core (1248 bytes), FP flags via sub_2142578 and exception returns via sub_2134238 / sub_21340D4. Operation kind unclear. [REVIEW]
- docs/function_notes/hk_32.md:117 soft-float f64 arithmetic core (1248 bytes), FP flags via sub_2142578 and exception returns via sub_2134238 / sub_21340D4. Operation kind unclear. [REVIEW]
sub_21329EC
export/plan0/arm9_main/sub_21329EC_021329EC.c
- docs/function_notes/hk_32.md:10 wrapper that swaps its two arguments and tail-calls sub_21329F8.
sub_21329F8
export/plan0/arm9_main/sub_21329F8_021329F8.c
- vm_model/src/mission_target.rs:208
sub_21329F8,sub_21322C8), compared with the 64-bit squared distance. - docs/function_notes.md:1296 soft-float f32 arithmetic core (1096 bytes), sign-dependent add/subtract
- docs/function_notes/NEEDS_REVIEW.md:1455 soft-float f32 arithmetic core (1096 bytes), sibling of sub_213250C, FP flags via sub_2142578. Operation kind unclear. [REVIEW]
- docs/function_notes/hk_32.md:118 soft-float f32 arithmetic core (1096 bytes), sibling of sub_213250C, FP flags via sub_2142578. Operation kind unclear. [REVIEW]
sub_2132E40
export/plan0/arm9_main/sub_2132E40_02132E40.c
- docs/function_notes/hk_32.md:11 unsigned 64-bit divide/modulo helper (shift-subtract loop, compiler-rt style).
sub_2133048
export/plan0/arm9_main/sub_2133048_02133048.c
- docs/function_notes/hk_32.md:12 64-bit multiply helper returning the low 64 bits of a1*a2 (__aeabi_lmul-like).
sub_2133068
export/plan0/arm9_main/sub_2133068_02133068.c
- vm_model/src/nitro_particle.rs:42 sub_2133068 preserves the numerator for a zero denominator.
- vm_model/src/nitro_particle_child.rs:63 SDK sub_2133068 returns the numerator for a zero denominator.
sub_2133274
export/plan0/arm9_main/sub_2133274_02133274.c
- docs/function_notes.md:1528 guard wrapper: when a2 is nonzero returns sub_213327C(a1, a2), the soft-float divide step
- docs/function_notes/NEEDS_REVIEW.md:1405 guard wrapper: if a2 != 0 calls sub_213327C(a1, a2), otherwise returns a1. [REVIEW]
- docs/function_notes/hk_32.md:13 guard wrapper: if a2 != 0 calls sub_213327C(a1, a2), otherwise returns a1. [REVIEW]
sub_213327C
export/plan0/arm9_main/sub_213327C_0213327C.c
- docs/function_notes.md:1297 soft-float divide helper: normalises the divisor by shifts of 28, 12, 8 and 4 before the quotient steps; returns 0 when a1 < a2
- docs/function_notes/NEEDS_REVIEW.md:1406 normalises the divisor (shift steps 28/12/8/4) then jumps into the unrolled step table sub_21332D0 to reduce a1 by a2. [REVIEW]
- docs/function_notes/hk_32.md:14 normalises the divisor (shift steps 28/12/8/4) then jumps into the unrolled step table sub_21332D0 to reduce a1 by a2. [REVIEW]
sub_21332D0
export/plan0/arm9_main/sub_21332D0_021332D0.c
- docs/function_notes.md:1202 unrolled 32-step shift/subtract table, entered at the 12-bit step: soft-float division core
- docs/function_notes/NEEDS_REVIEW.md:1407 unrolled 32-step shift/subtract table (entered at 12-byte offsets by sub_213327C), no standalone use. [REVIEW]
- docs/function_notes/hk_32.md:15 unrolled 32-step shift/subtract table (entered at 12-byte offsets by sub_213327C), no standalone use. [REVIEW]
sub_2133458
export/plan0/arm9_main/sub_2133458_02133458.c
- docs/function_notes/hk_32.md:16 64-bit funnel right shift of (a2:result) by (a3 & 63) (__aeabi_llsr-like).
sub_2133488
export/plan0/arm9_main/sub_2133488_02133488.c
- docs/function_notes.md:1298 soft-float f64 arithmetic core (2312 bytes), operand swap and the packed-result path
- docs/function_notes/NEEDS_REVIEW.md:1456 soft-float f64 arithmetic core (2312 bytes) using constant table dword_2133D90, returns through sub_213406C / sub_213412C. Operation kind unclear. [REVIEW]
- docs/function_notes/hk_32.md:119 soft-float f64 arithmetic core (2312 bytes) using constant table dword_2133D90, returns through sub_213406C / sub_213412C. Operation kind unclear. [REVIEW]
sub_2133DA8
export/plan0/arm9_main/sub_2133DA8_02133DA8.c
- docs/function_notes/hk_32.md:17 init helper: clears the FP status word from sub_2142578() and zeroes a 6-word state struct returned by sub_2142584().
sub_2133DDC
export/plan0/arm9_main/sub_2133DDC_02133DDC.c
- docs/function_notes.md:1050 read-modify-write of the word at sub_2142578(): new = (old & ~a1) ^ a2; returns the old value
- docs/function_notes/NEEDS_REVIEW.md:1408 read-modify-write of the word at sub_2142578(): new = (old & ~a1) ^ a2, returns old. Likely FP control/status update. [REVIEW]
- docs/function_notes/hk_32.md:18 read-modify-write of the word at sub_2142578(): new = (old & ~a1) ^ a2, returns old. Likely FP control/status update. [REVIEW]
sub_2133E04
export/plan0/arm9_main/sub_2133E04_02133E04.c
- docs/function_notes.md:1299 packs two 5-bit FP exception masks (bits 0-4 and 16-20) and stores them through sub_2142578
- docs/function_notes/NEEDS_REVIEW.md:1409 packs two 5-bit FP exception masks (bits 0-4 and 16-20) into status-word layout, RMW on sub_2142578() word, returns old status packed with 0x40000000. [REVIEW]
- docs/function_notes/hk_32.md:19 packs two 5-bit FP exception masks (bits 0-4 and 16-20) into status-word layout, RMW on sub_2142578() word, returns old status packed with 0x40000000. [REVIEW]
sub_2133E50
export/plan0/arm9_main/sub_2133E50_02133E50.c
- docs/function_notes.md:1300 OS deferred-callback runner: takes the mutex at off_2133F68 with sub_200EC08 and runs the queued callbacks
- docs/function_notes/NEEDS_REVIEW.md:1410 OS deferred-callback runner: takes mutex off_2133F68, bumps per-owner counter, then drains callback table off_2133F7C. [REVIEW]
- docs/function_notes/hk_32.md:20 OS deferred-callback runner: takes mutex off_2133F68, bumps per-owner counter, then drains callback table off_2133F7C. [REVIEW]
sub_2133F84
export/plan0/arm9_main/sub_2133F84_02133F84.c
- docs/function_notes/hk_32.md:21 if flag off_2133FD0 is clear, calls sub_21424E8 and runs/clears a saved callback in off_2133FD4; then tail-calls sub_2133E50.
sub_2133FD8
export/plan0/arm9_main/sub_2133FD8_02133FD8.c
- docs/function_notes/hk_32.md:22 calls sub_2139E20(1), sets flag at off_2134004 to 1, then sub_2133F84.
sub_2134008
export/plan0/arm9_main/sub_2134008_02134008.c
- docs/function_notes/hk_32.md:23 soft-float trap/exception wrapper: calls sub_213428C with 5 args and returns the 32-bit result.
sub_213406C
export/plan0/arm9_main/sub_213406C_0213406C.c
- docs/function_notes/hk_32.md:24 same as sub_2134008 but returns a 64-bit result from sub_213428C.
sub_21340D4
export/plan0/arm9_main/sub_21340D4_021340D4.c
- docs/function_notes/hk_32.md:25 thin wrapper around sub_213428C returning a 32-bit result (3 args).
sub_213412C
export/plan0/arm9_main/sub_213412C_0213412C.c
- docs/function_notes/hk_32.md:26 thin wrapper around sub_213428C returning a 64-bit result (3 args).
sub_2134188
export/plan0/arm9_main/sub_2134188_02134188.c
- docs/function_notes/hk_32.md:27 thin wrapper around sub_213428C returning a 64-bit result (2 args), used by the f32 conversions.
sub_21341E0
export/plan0/arm9_main/sub_21341E0_021341E0.c
- docs/function_notes/hk_32.md:28 thin wrapper around sub_213428C returning a 32-bit result (2 args).
sub_2134238
export/plan0/arm9_main/sub_2134238_02134238.c
- docs/function_notes/hk_32.md:29 thin wrapper around sub_213428C returning a 32-bit result (2 args), used as overflow trap path by f32->int conversions.
sub_213428C
export/plan0/arm9_main/sub_213428C_0213428C.c
- docs/function_notes.md:1203 soft-float exception dispatcher: reads the FP state through sub_2142584 and calls the matching handler
- docs/function_notes/NEEDS_REVIEW.md:1411 soft-float exception dispatcher: reads FP state (sub_2142584), merges flags from sub_2133DDC, picks handler from state table by exception class. [REVIEW]
- docs/function_notes/hk_32.md:30 soft-float exception dispatcher: reads FP state (sub_2142584), merges flags from sub_2133DDC, picks handler from state table by exception class. [REVIEW]
sub_2134398
export/plan0/arm9_main/sub_2134398_02134398.c
- docs/function_notes/hk_32.md:31 indirect call: calls function pointer off_21343AC with the value stored at off_21343A8.
sub_21343B0
export/plan0/arm9_main/sub_21343B0_021343B0.c
- docs/function_notes/hk_32.md:32 loops a 3-entry table at off_213441C (stride 19 words), calls sub_21349C4 on entries whose flag bits are set; returns -1 if any call returned nonzero, else 0.
sub_2134420
export/plan0/arm9_main/sub_2134420_02134420.c
- docs/function_notes/hk_32.md:33 int32 absolute value helper.
sub_213442C
export/plan0/arm9_main/sub_213442C_0213442C.c
- docs/function_notes/hk_32.md:34 calls sub_2135144 with global off_2134468 and the four args, then tail-calls sub_2133FD8. Thin wrapper.
sub_213446C
export/plan0/arm9_main/sub_213446C_0213446C.c
- docs/function_notes.md:1051 stream commit: delta = field at a1+36 minus a1+28, stored at a1+40 and passed to the callback
- docs/function_notes/NEEDS_REVIEW.md:1412 DMA/stream "commit": delta = field[9]-field[7], calls callback at +64, adds delta to +24 on success, then resets cursors via sub_2134508. [REVIEW]
- docs/function_notes/hk_32.md:35 DMA/stream "commit": delta = field[9]-field[7], calls callback at +64, adds delta to +24 on success, then resets cursors via sub_2134508. [REVIEW]
sub_2134508
export/plan0/arm9_main/sub_2134508_02134508.c
- docs/function_notes.md:1301 resets a cursor struct: field 9 = field 7, field 10 = field 8 minus (field 6 & field 11)
- docs/function_notes/NEEDS_REVIEW.md:1413 resets a cursor struct: field9 = field7, field10 = field8 - (field6 & field11), field13 = field6. [REVIEW]
- docs/function_notes/hk_32.md:36 resets a cursor struct: field9 = field7, field10 = field8 - (field6 & field11), field13 = field6. [REVIEW]
sub_2134540
export/plan0/arm9_main/sub_2134540_02134540.c
- docs/function_notes.md:1204 848-byte buffered transfer routine: checks the stream status with sub_213C94C (flag -1 when not ready) and computes the transfer size a2 * a3
- docs/function_notes/NEEDS_REVIEW.md:1414 848-byte buffered transfer/stream routine (checks sub_213C94C state, computes a2*a3 byte count, mode bits in struct+4 select path). Purpose unclear. [REVIEW]
- docs/function_notes/hk_32.md:38 848-byte buffered transfer/stream routine (checks sub_213C94C state, computes a2*a3 byte count, mode bits in struct+4 select path). Purpose unclear. [REVIEW]
sub_2134890
export/plan0/arm9_main/sub_2134890_02134890.c
- docs/function_notes.md:1302 per-channel OS lock-count helper (sub_200EC08 / sub_200ECxx) with a 3-way choice by the channel pointer
- docs/function_notes/NEEDS_REVIEW.md:1415 per-channel OS lock-count helper (sub_200EC08 / sub_200ED34 mutex, owner counter) selecting one of three slots (stride 20) by a4. [REVIEW]
- docs/function_notes/hk_32.md:39 per-channel OS lock-count helper (sub_200EC08 / sub_200ED34 mutex, owner counter) selecting one of three slots (stride 20) by a4. [REVIEW]
sub_21349C4
export/plan0/arm9_main/sub_21349C4_021349C4.c
- docs/function_notes.md:1205 per-handler state machine step for a 0x124-byte stream object; calls sub_21343B0 when the handler is null
- docs/function_notes/NEEDS_REVIEW.md:1416 per-handler state machine step for a 0x124-byte stream/channel struct; checks mode bits at +4, commits via sub_213446C, may return -1. [REVIEW]
- docs/function_notes/hk_32.md:40 per-handler state machine step for a 0x124-byte stream/channel struct; checks mode bits at +4, commits via sub_213446C, may return -1. [REVIEW]
sub_2134AE8
export/plan0/arm9_main/sub_2134AE8_02134AE8.c
- docs/function_notes.md:1303 thin wrapper: calls sub_21400EC(a1, a2, &tmp), adds a3 to tmp and returns sub_21401AC of the result
- docs/function_notes/NEEDS_REVIEW.md:1417 thin wrapper: calls sub_21400EC(a1,a2,&tmp), adds a3 to the out value, then finalises via sub_21401AC. [REVIEW]
- docs/function_notes/hk_32.md:41 thin wrapper: calls sub_21400EC(a1,a2,&tmp), adds a3 to the out value, then finalises via sub_21401AC. [REVIEW]
sub_2134B18
export/plan0/arm9_main/sub_2134B18_02134B18.c
- docs/function_notes.md:1206 copies a NUL-terminated 16-bit string through a 32-byte buffer
- docs/function_notes/NEEDS_REVIEW.md:1418 copies a NUL-terminated 16-bit-char string through a 32-byte temp via sub_2134C6C into byte buffer a1, bounded by a3; NUL-terminates. [REVIEW]
- docs/function_notes/hk_32.md:42 copies a NUL-terminated 16-bit-char string through a 32-byte temp via sub_2134C6C into byte buffer a1, bounded by a3; NUL-terminates. [REVIEW]
sub_2134BD4
export/plan0/arm9_main/sub_2134BD4_02134BD4.c
- docs/function_notes.md:1207 strncpy-like converter from an 8-bit string into a 16-bit buffer, the length from sub_213A434
- docs/function_notes/NEEDS_REVIEW.md:1419 strncpy-like converter from 8-bit string into 16-bit buffer, per-char conversion through sub_2134D08, returns count or -1. [REVIEW]
- docs/function_notes/hk_32.md:43 strncpy-like converter from 8-bit string into 16-bit buffer, per-char conversion through sub_2134D08, returns count or -1. [REVIEW]
sub_2134C6C
export/plan0/arm9_main/sub_2134C6C_02134C6C.c
- docs/function_notes/hk_32.md:44 thin indirect call through callback table off_2134C90[2][1] (no args). Char-conversion hook.
sub_2134C94
export/plan0/arm9_main/sub_2134C94_02134C94.c
- docs/function_notes/hk_32.md:45 byte store into word-aligned memory (read-modify-write with ROR byte-lane trick); returns 1, or 0 if pointer is null.
sub_2134CCC
export/plan0/arm9_main/sub_2134CCC_02134CCC.c
- docs/function_notes/hk_32.md:46 reads one 8-bit char from a2 into 16-bit a1; returns 0 if NUL, 1 otherwise; -1 if a3 == 0, 0 if a2 null.
sub_2134D08
export/plan0/arm9_main/sub_2134D08_02134D08.c
- docs/function_notes/hk_32.md:47 thin indirect call through callback table off_2134D2C[2] with (dst, src, n); char-copy hook used by sub_2134BD4.
sub_2134D30
export/plan0/arm9_main/sub_2134D30_02134D30.c
- docs/function_notes/hk_32.md:48 strncmp (unsigned byte compare up to a3), returns -1 / 0 / 1.
sub_2134D80
export/plan0/arm9_main/sub_2134D80_02134D80.c
- docs/function_notes/hk_32.md:49 memrchr: searches backwards from a1+a3 for byte a2 within a3 bytes; returns pointer or 0.
sub_2134DB0
export/plan0/arm9_main/sub_2134DB0_02134DB0.c
- docs/function_notes/hk_32.md:50 memchr: forward byte search for a2 within a3 bytes; returns pointer or 0.
sub_2134DE0
export/plan0/arm9_main/sub_2134DE0_02134DE0.c
- docs/function_notes.md:1304 tiny wrapper: calls sub_2134F18 and returns a1
- docs/function_notes/NEEDS_REVIEW.md:1420 tiny wrapper: calls sub_2134F18 and returns its first argument unchanged. Probably a decompile artifact of a tail call. [REVIEW]
- docs/function_notes/hk_32.md:51 tiny wrapper: calls sub_2134F18 and returns its first argument unchanged. Probably a decompile artifact of a tail call. [REVIEW]
sub_2134DF8
export/plan0/arm9_main/sub_2134DF8_02134DF8.c
- docs/function_notes.md:1305 memmove: copies with overlap handling (backward copy when the destination is above the source)
- docs/function_notes/NEEDS_REVIEW.md:1421 memmove: copies with overlap handling (backward copy when dst > src, word-aligned byte-lane stores); unusual tail call through a stack pointer. [REVIEW]
- docs/function_notes/hk_32.md:52 memmove: copies with overlap handling (backward copy when dst > src, word-aligned byte-lane stores); unusual tail call through a stack pointer. [REVIEW]
sub_2134EB8
export/plan0/arm9_main/sub_2134EB8_02134EB8.c
- docs/function_notes/hk_32.md:53 memcpy-style byte copy into word-aligned destination via ROR byte-lane stores; copies a3 bytes from a2 to result.
sub_2134F18
export/plan0/arm9_main/sub_2134F18_02134F18.c
- docs/function_notes/hk_32.md:54 memset: fills a3 bytes at result with byte a2, aligns then stores 32-byte blocks with replicated pattern.
sub_2135014
export/plan0/arm9_main/sub_2135014_02135014.c
- docs/function_notes/hk_32.md:56 variadic wrapper: forwards to sub_2135078 with size -1 (unbounded sprintf-style).
sub_2135048
export/plan0/arm9_main/sub_2135048_02135048.c
- docs/function_notes/hk_32.md:57 variadic wrapper: forwards to sub_2135078 with a size limit (snprintf-style).
sub_2135078
export/plan0/arm9_main/sub_2135078_02135078.c
- docs/function_notes/hk_32.md:58 sprintf back-end: builds an output-struct {buf, size, count}, runs format core sub_21352E0 via off_2135140, then NUL-terminates the buffer within size.
sub_2135144
export/plan0/arm9_main/sub_2135144_02135144.c
- docs/function_notes.md:1306 printf-style output on a mutex-guarded channel: returns -1 when the stream sub_213C94C reports not ready
- docs/function_notes/NEEDS_REVIEW.md:1422 printf-style output on a mutex-guarded channel (sub_200EC08 / sub_200ED34); returns -1 if busy (sub_213C94C), else calls sub_21352E0. [REVIEW]
- docs/function_notes/hk_32.md:59 printf-style output on a mutex-guarded channel (sub_200EC08 / sub_200ED34); returns -1 if busy (sub_213C94C), else calls sub_21352E0. [REVIEW]
sub_2135258
export/plan0/arm9_main/sub_2135258_02135258.c
- docs/function_notes/hk_32.md:60 stream/buffer write: copies a3 bytes (clamped to remaining capacity a1[1]-a1[2]) from a2 into buffer at a1[0]+a1[2] via sub_2134EB8, advances a1[2], returns 1.
sub_21352A8
export/plan0/arm9_main/sub_21352A8_021352A8.c
- docs/function_notes.md:1307 wrapper: calls sub_2134890(a2, 1, a3, a1) and returns 0 when the result differs from a3
- docs/function_notes/NEEDS_REVIEW.md:1423 wrapper: calls sub_2134890(a2,1,a3,a1) and returns a1 if it equals a3, else 0. [REVIEW]
- docs/function_notes/hk_32.md:61 wrapper: calls sub_2134890(a2,1,a3,a1) and returns a1 if it equals a3, else 0. [REVIEW]
sub_21352E0
export/plan0/arm9_main/sub_21352E0_021352E0.c
- docs/function_notes/hk_32.md:62 printf format core (vprintf-style): parses format and emits chars via callback a1; very large stack frame (~0x9B00 bytes of locals).
sub_2135C80
export/plan0/arm9_main/sub_2135C80_02135C80.c
- docs/function_notes.md:1308 printf numeric conversion helper for floating-point arguments (2440 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1424 printf numeric conversion helper for floating-point specifiers (handles -INF / -NAN text output). [REVIEW]
- docs/function_notes/hk_32.md:63 printf numeric conversion helper for floating-point specifiers (handles -INF / -NAN text output). [REVIEW]
sub_2136638
export/plan0/arm9_main/sub_2136638_02136638.c
- docs/function_notes.md:1309 decimal-digit rounding helper on a digit buffer (536 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1425 decimal-digit rounding helper on a digit buffer (length at +4, digits at +5), rounds half-up on a 5 digit. Used by float formatting. [REVIEW]
- docs/function_notes/hk_32.md:64 decimal-digit rounding helper on a digit buffer (length at +4, digits at +5), rounds half-up on a 5 digit. Used by float formatting. [REVIEW]
sub_2136850
export/plan0/arm9_main/sub_2136850_02136850.c
- docs/function_notes.md:1310 float formatting helper (%e, %f, %g style, 1684 bytes) with the inf/nan text handling
- docs/function_notes/NEEDS_REVIEW.md:1426 float formatting helper (%e/%f/%g style, same -INF/-NAN handling as sub_2135C80). [REVIEW]
- docs/function_notes/hk_32.md:65 float formatting helper (%e/%f/%g style, same -INF/-NAN handling as sub_2135C80). [REVIEW]
sub_2136F14
export/plan0/arm9_main/sub_2136F14_02136F14.c
- docs/function_notes.md:1208 converts a 64-bit value to a decimal digit string (repeated division by 10)
- docs/function_notes/NEEDS_REVIEW.md:1427 64-bit value to decimal digit-string conversion (repeated scaling by powers of ten), used by float/int formatting. [REVIEW]
- docs/function_notes/hk_32.md:66 64-bit value to decimal digit-string conversion (repeated scaling by powers of ten), used by float/int formatting. [REVIEW]
sub_2137358
export/plan0/arm9_main/sub_2137358_02137358.c
- docs/function_notes.md:1311 integer-to-text formatter (radix digits, sign and padding; 944 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1428 integer-to-text formatter (radix digits, padding, sign and width handling) driven by a varargs-style frame. [REVIEW]
- docs/function_notes/hk_32.md:67 integer-to-text formatter (radix digits, padding, sign and width handling) driven by a varargs-style frame. [REVIEW]
sub_213770C
export/plan0/arm9_main/sub_213770C_0213770C.c
- docs/function_notes.md:1209 text-to-number parser (strtod/strtol-like, 2964 bytes) with 64-bit results
- docs/function_notes/NEEDS_REVIEW.md:1429 text-to-number parser (strtod / strtol-like) with 64-bit scaling and a local 12-byte temp buffer. [REVIEW]
- docs/function_notes/hk_32.md:68 text-to-number parser (strtod / strtol-like) with 64-bit scaling and a local 12-byte temp buffer. [REVIEW]
sub_21382A8
export/plan0/arm9_main/sub_21382A8_021382A8.c
- docs/function_notes.md:1312 generic array sort helper (qsort-like) on 32-bit elements with a comparison callback
- docs/function_notes/NEEDS_REVIEW.md:1430 generic array sort helper (qsort-like) on 32-bit elements using comparator a4(elem, key). [REVIEW]
- docs/function_notes/hk_32.md:69 generic array sort helper (qsort-like) on 32-bit elements using comparator a4(elem, key). [REVIEW]
sub_21384C0
export/plan0/arm9_main/sub_21384C0_021384C0.c
- docs/function_notes/hk_32.md:70 indirect tail call through an uninitialised function pointer on the stack (decompiler artifact, effectively a dead/stub jump).
sub_21384CC
export/plan0/arm9_main/sub_21384CC_021384CC.c
- docs/function_notes/hk_32.md:71 setter: stores its argument into the global pointer off_21384D8 and returns it.
sub_21384DC
export/plan0/arm9_main/sub_21384DC_021384DC.c
- docs/function_notes.md:1313 LCG pseudo-random step: state = state * multiplier + increment, returns the new state
- docs/function_notes/NEEDS_REVIEW.md:1431 LCG-style pseudo-random step: state = state*mult + add (constants at dword_2138504/2138508), returns masked high half. [REVIEW]
- docs/function_notes/hk_32.md:72 LCG-style pseudo-random step: state = state*mult + add (constants at dword_2138504/2138508), returns masked high half. [REVIEW]
sub_2138510
export/plan0/arm9_main/sub_2138510_02138510.c
- docs/function_notes/hk_32.md:73 variadic sscanf wrapper, forwards to sub_2138540.
sub_2138540
export/plan0/arm9_main/sub_2138540_02138540.c
- docs/function_notes/hk_32.md:74 sscanf entry: builds a string-input record {str, eof}, calls scanf core sub_2138618 with get-char callback off_213859C; -1 if null/empty.
sub_21385A0
export/plan0/arm9_main/sub_21385A0_021385A0.c
- docs/function_notes/hk_32.md:75 string-input stream callback: mode 0 reads next char (sets EOF flag at NUL), mode 1 ungets, mode 2 returns EOF state.
sub_2138618
export/plan0/arm9_main/sub_2138618_02138618.c
- docs/function_notes/hk_32.md:76 scanf core (vsscanf-style): parses format conversions and reads chars through the stream callback. Large (0xDE4 bytes).
sub_2139400
export/plan0/arm9_main/sub_2139400_02139400.c
- docs/function_notes.md:1314 64-bit fixed-point arithmetic over the int64 table at off_2139E18 (2584 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1432 64-bit fixed-point arithmetic over an int64 table (matrix/vector-style multiply-accumulate). Purpose unclear. [REVIEW]
- docs/function_notes/hk_32.md:77 64-bit fixed-point arithmetic over an int64 table (matrix/vector-style multiply-accumulate). Purpose unclear. [REVIEW]
sub_2139E20
export/plan0/arm9_main/sub_2139E20_02139E20.c
- docs/function_notes.md:1315 OS callback slot helper: returns -1 for a slot outside 1..7, otherwise takes the callback and calls it
- docs/function_notes/NEEDS_REVIEW.md:1433 OS callback slot helper: validates slot 1..7, takes mutex off_2139F5C, updates per-slot owner counter/count (off_2139F68). Same pattern as sub_2133E50. [REVIEW]
- docs/function_notes/hk_32.md:78 OS callback slot helper: validates slot 1..7, takes mutex off_2139F5C, updates per-slot owner counter/count (off_2139F68). Same pattern as sub_2133E50. [REVIEW]
sub_2139F70
export/plan0/arm9_main/sub_2139F70_02139F70.c
- docs/function_notes.md:1210 strstr: finds the substring a2 within a1 and returns a pointer to it (or 0)
- docs/function_notes/NEEDS_REVIEW.md:1434 strstr: finds substring a2 within a1, returns pointer or 0. [REVIEW]
- docs/function_notes/hk_32.md:79 strstr: finds substring a2 within a1, returns pointer or 0. [REVIEW]
sub_2139FFC
export/plan0/arm9_main/sub_2139FFC_02139FFC.c
- docs/function_notes/hk_32.md:80 strchr: returns pointer to first occurrence of byte a2 in string a1 (a2 == 0 returns the terminator).
sub_213A038
export/plan0/arm9_main/sub_213A038_0213A038.c
- docs/function_notes/hk_32.md:81 strncmp: compares up to a3 bytes of two strings, returns the byte difference or 0.
sub_213A074
export/plan0/arm9_main/sub_213A074_0213A074.c
- docs/function_notes/hk_32.md:82 strcmp: string compare with word-aligned fast path, returns byte difference.
sub_213A1C0
export/plan0/arm9_main/sub_213A1C0_0213A1C0.c
- docs/function_notes/hk_32.md:83 strcat/strcpy-like: appends the string a2 (incl. NUL) to the end of string result using ROR byte-lane stores.
sub_213A228
export/plan0/arm9_main/sub_213A228_0213A228.c
- docs/function_notes/hk_32.md:84 strncpy: copies up to a3 bytes from a2 into result via ROR byte-lane stores, stops at NUL and zero-pads the rest.
sub_213A2D0
export/plan0/arm9_main/sub_213A2D0_0213A2D0.c
- docs/function_notes.md:1211 strcpy with a word-aligned fast path; returns the destination
- docs/function_notes/NEEDS_REVIEW.md:1435 strcpy with word-aligned fast path, returns destination. [REVIEW]
- docs/function_notes/hk_32.md:85 strcpy with word-aligned fast path, returns destination. [REVIEW]
sub_213A434
export/plan0/arm9_main/sub_213A434_0213A434.c
- docs/function_notes/hk_32.md:86 strlen: returns length of NUL-terminated byte string a1.
sub_213A450
export/plan0/arm9_main/sub_213A450_0213A450.c
- docs/function_notes.md:1212 thin wrapper: calls the function pointer off_213A45C with (a1, 0)
- docs/function_notes/NEEDS_REVIEW.md:1436 thin wrapper: calls through function pointer off_213A45C(a1, 0), likely an atoi / strtol-style parse. [REVIEW]
- docs/function_notes/hk_32.md:87 thin wrapper: calls through function pointer off_213A45C(a1, 0), likely an atoi / strtol-style parse. [REVIEW]
sub_213A550
export/plan0/arm9_main/sub_213A550_0213A550.c
- docs/function_notes.md:1316 large text-to-double (strtod-like, 6700 bytes) with the 2^52 range handling
- docs/function_notes/NEEDS_REVIEW.md:1437 large text-to-double (strtod-like) with 2^52 range checks via sub_2131B74 / sub_2131CE8; sets *a5 on range error, returns errno-style value. [REVIEW]
- docs/function_notes/hk_32.md:88 large text-to-double (strtod-like) with 2^52 range checks via sub_2131B74 / sub_2131CE8; sets *a5 on range error, returns errno-style value. [REVIEW]
sub_213BF90
export/plan0/arm9_main/sub_213BF90_0213BF90.c
- docs/function_notes.md:1213 thin wrapper: calls the function pointer off_213BFA0 with (a1, 0, 10), a base-10 parse
- docs/function_notes/NEEDS_REVIEW.md:1438 thin wrapper: calls through pointer off_213BFA0(a1, 0, 10), base-10 integer parse (atoi-like). [REVIEW]
- docs/function_notes/hk_32.md:89 thin wrapper: calls through pointer off_213BFA0(a1, 0, 10), base-10 integer parse (atoi-like). [REVIEW]
sub_213BFA4
export/plan0/arm9_main/sub_213BFA4_0213BFA4.c
- docs/function_notes.md:1052 strtol-style 32-bit integer parse with a range check (up to 0x7FFFFFFF) through sub_213C560 and the table off_213C06C
- docs/function_notes/NEEDS_REVIEW.md:1439 strtol-style 32-bit integer parse with range check (0x7FFFFFFF / 0x80000000), writes end pointer to *a2. Built on sub_213C560. [REVIEW]
- docs/function_notes/hk_32.md:90 strtol-style 32-bit integer parse with range check (0x7FFFFFFF / 0x80000000), writes end pointer to *a2. Built on sub_213C560. [REVIEW]
sub_213C074
export/plan0/arm9_main/sub_213C074_0213C074.c
- docs/function_notes.md:1214 strtol-style signed parse with ERANGE handling (errno 34 on overflow)
- docs/function_notes/NEEDS_REVIEW.md:1440 strtol-style signed parse with ERANGE (errno value 34 stored via off_213C10C) and sign handling, built on sub_213C560. [REVIEW]
- docs/function_notes/hk_32.md:91 strtol-style signed parse with ERANGE (errno value 34 stored via off_213C10C) and sign handling, built on sub_213C560. [REVIEW]
sub_213C110
export/plan0/arm9_main/sub_213C110_0213C110.c
- docs/function_notes.md:1215 64-bit integer parse core (strtoull-style) for bases 2..36, setting the end pointer and the overflow flag
- docs/function_notes/NEEDS_REVIEW.md:1441 64-bit integer parse core (strtoull-style): base 2..36 check, digits via callback a3, 64-bit accumulate via sub_2132E40. [REVIEW]
- docs/function_notes/hk_32.md:92 64-bit integer parse core (strtoull-style): base 2..36 check, digits via callback a3, 64-bit accumulate via sub_2132E40. [REVIEW]
sub_213C560
export/plan0/arm9_main/sub_213C560_0213C560.c
- docs/function_notes.md:1600 32-bit integer parse core (996 bytes), strtoul-style digit loop with the range and overflow checks
- docs/function_notes/NEEDS_REVIEW.md:1442 32-bit integer parse core (strtoul-style digit loop, base validation like sub_213C110), division via sub_2133274. [REVIEW]
- docs/function_notes/hk_32.md:93 32-bit integer parse core (strtoul-style digit loop, base validation like sub_213C110), division via sub_2133274. [REVIEW]
sub_213C94C
export/plan0/arm9_main/sub_213C94C_0213C94C.c
- docs/function_notes.md:1053 stream status query: returns 0 for a null stream, else -1 or 1 from the status bits at a1+4
- docs/function_notes/NEEDS_REVIEW.md:1443 stream status query: returns -1 / 1 from status bits at a1+4, and sets an EOF/error flag when a2 < 0. [REVIEW]
- docs/function_notes/hk_32.md:94 stream status query: returns -1 / 1 from status bits at a1+4, and sets an EOF/error flag when a2 < 0. [REVIEW]
sub_213C9C0
export/plan0/arm9_main/sub_213C9C0_0213C9C0.c
- docs/function_notes/hk_32.md:95 wmemchr: searches 16-bit string for char a2 within a3 units; returns pointer or 0.
sub_213C9E8
export/plan0/arm9_main/sub_213C9E8_0213C9E8.c
- docs/function_notes/hk_32.md:96 thin wrapper: calls through off_213C9F4(a1, a2, 2*a3), a wmemcpy-style copy (count in 16-bit units).
sub_213C9F8
export/plan0/arm9_main/sub_213C9F8_0213C9F8.c
- docs/function_notes/hk_32.md:97 wide-char sprintf back-end: runs sub_213CAE0 with off_213CA60 into a 16-bit buffer, NUL-terminates it, returns -1 on overflow.
sub_213CA64
export/plan0/arm9_main/sub_213CA64_0213CA64.c
- docs/function_notes/hk_32.md:98 thin wrapper around sub_213C9F8.
sub_213CA94
export/plan0/arm9_main/sub_213CA94_0213CA94.c
- docs/function_notes/hk_32.md:99 wide-char buffer write (16-bit analogue of sub_2135258): copies up to remaining capacity via sub_213C9E8, advances count at a1+8.
sub_213CAE0
export/plan0/arm9_main/sub_213CAE0_0213CAE0.c
- docs/function_notes.md:1317 wide-char (UTF-16) printf format core (2216 bytes), the 16-bit twin of the format loop
- docs/function_notes/NEEDS_REVIEW.md:1444 wide-char (UTF-16 style) printf format core, the 16-bit twin of sub_21352E0; very large stack frame. [REVIEW]
- docs/function_notes/hk_32.md:100 wide-char (UTF-16 style) printf format core, the 16-bit twin of sub_21352E0; very large stack frame. [REVIEW]
sub_213D398
export/plan0/arm9_main/sub_213D398_0213D398.c
- docs/function_notes.md:1318 wide-char float formatting helper (2328 bytes), the 16-bit output twin of sub_2136850
- docs/function_notes/NEEDS_REVIEW.md:1445 wide-char float formatting helper (16-bit output twin of sub_2135C80 with 64-bit args). [REVIEW]
- docs/function_notes/hk_32.md:101 wide-char float formatting helper (16-bit output twin of sub_2135C80 with 64-bit args). [REVIEW]
sub_213DCD4
export/plan0/arm9_main/sub_213DCD4_0213DCD4.c
- docs/function_notes.md:1319 wide-char digit rounding helper (536 bytes), the 16-bit twin of sub_2136638
- docs/function_notes/NEEDS_REVIEW.md:1446 wide-char digit rounding helper, 16-bit twin of sub_2136638 (round-half-up on a digit buffer). [REVIEW]
- docs/function_notes/hk_32.md:102 wide-char digit rounding helper, 16-bit twin of sub_2136638 (round-half-up on a digit buffer). [REVIEW]
sub_213DEEC
export/plan0/arm9_main/sub_213DEEC_0213DEEC.c
- docs/function_notes.md:1320 wide-char 64-bit value to decimal digit conversion (768 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1447 wide-char 64-bit value to decimal digit conversion, 16-bit twin of sub_2136F14. [REVIEW]
- docs/function_notes/hk_32.md:103 wide-char 64-bit value to decimal digit conversion, 16-bit twin of sub_2136F14. [REVIEW]
sub_213E1F0
export/plan0/arm9_main/sub_213E1F0_0213E1F0.c
- docs/function_notes.md:1321 wide-char integer-to-text formatter (628 bytes), the 16-bit twin of sub_2137358
- docs/function_notes/NEEDS_REVIEW.md:1448 wide-char integer-to-text formatter, 16-bit twin of sub_2137358. [REVIEW]
- docs/function_notes/hk_32.md:104 wide-char integer-to-text formatter, 16-bit twin of sub_2137358. [REVIEW]
sub_213E468
export/plan0/arm9_main/sub_213E468_0213E468.c
- docs/function_notes.md:1216 wide-character text-to-number parser, the 16-bit twin of sub_213770C
- docs/function_notes/NEEDS_REVIEW.md:1449 wide-char text-to-number parser, 16-bit twin of sub_213770C. [REVIEW]
- docs/function_notes/hk_32.md:105 wide-char text-to-number parser, 16-bit twin of sub_213770C. [REVIEW]
sub_213ECF8
export/plan0/arm9_main/sub_213ECF8_0213ECF8.c
- docs/function_notes/hk_32.md:106 wcschr: finds 16-bit char a2 in string a1, returns pointer or 0.
sub_213ED2C
export/plan0/arm9_main/sub_213ED2C_0213ED2C.c
- docs/function_notes/hk_32.md:107 wcsncmp: compares up to a3 16-bit chars, returns difference or 0.
sub_213ED60
export/plan0/arm9_main/sub_213ED60_0213ED60.c
- docs/function_notes/hk_32.md:108 wcsncat: appends up to a3 16-bit chars from a2 to the end of result, NUL-terminates.
sub_213EDBC
export/plan0/arm9_main/sub_213EDBC_0213EDBC.c
- docs/function_notes/hk_32.md:109 wcsncpy: copies up to a3 16-bit chars from a2 into result, zero-pads the rest.
sub_213EE30
export/plan0/arm9_main/sub_213EE30_0213EE30.c
- docs/function_notes/hk_32.md:110 wcscpy: copies 16-bit string a2 (incl. NUL) into result.
sub_213EE50
export/plan0/arm9_main/sub_213EE50_0213EE50.c
- docs/function_notes/hk_32.md:111 wcslen: length of NUL-terminated 16-bit string.
sub_213EE6C
export/plan0/arm9_main/sub_213EE6C_0213EE6C.c
- docs/function_notes.md:1648 64-bit soft-float helper (4660 bytes): returns 0 for a zero input; when either magnitude exceeds dword_213F430 it delegates to sub_212F884, otherwise runs the normalising path (only the entry checks were read; the remainder was not fully decoded)
- docs/function_notes/NEEDS_REVIEW.md:1450 large (4.6 KB) routine using helpers sub_2130380 / sub_2130CCC / sub_212F884 over table dword_213F42C. Purpose unclear. [REVIEW]
- docs/function_notes/hk_32.md:112 large (4.6 KB) routine using helpers sub_2130380 / sub_2130CCC / sub_212F884 over table dword_213F42C. Purpose unclear. [REVIEW]
sub_21457FC
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:41 switch@L299 case@L324 [external_write, conditional, calls_helper] W v49+0x0:u16; calls sub_21457FC
- vm_model/src/ir/vm_sub_209deaa.rs:393 v53 = (((int (__fastcall *)(int))sub_21457FC)(v50) * (v47 + 1)) >> 16;
sub_2146C4C
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:99 switch@L200 case@L276 [calls_helper] calls sub_2146C4C
- vm_model/src/ir/vm_sub_209deaa.rs:573 ((void (__fastcall *)(int, _DWORD))sub_2146C4C)(v10, v73);
sub_2146D28
export/plan0/arm9_main/sub_2146D28_02146D28.c
- vm_model/src/mapobj/boo.rs:579 (
sub_2146D28: a rotation about x). - vm_model/src/mapobj/boo.rs:584
sub_2146D28with [Self::shadow_tilt]: the shadow's rotation matrix (about x only, no yaw), in the - vm_model/src/mapobj/drawbridge.rs:11 Not ported: the matrix/hinge rotation of the model (
sub_2146D28/sub_2146DFC, the per-tick - docs/function_notes.md:472 MTX_RotX33 (rows 1,0,0 / 0,c,s / 0,-s,c)
sub_2146D44
export/plan0/arm9_main/sub_2146D44_02146D44.c
- vm_model/src/mapobj/pinball.rs:325
sub_2146D44: the matrix of a turn about the y axis.
sub_2146D78
export/plan0/arm9_main/sub_2146D78_02146D78.c
- vm_model/src/nitro_particle_motion.rs:145 sub_201E170 and sub_2146D78: SDK quantized sine/cosine, unrounded matrix multiply.
- vm_model/src/kart/fxmath.rs:366 Row vector times matrix, truncated (
MTX_MultVec33,sub_2146D78).
sub_2146DFC
export/plan0/arm9_main/sub_2146DFC_02146DFC.c
- vm_model/src/kart/movement.rs:1157 (
MTX_Concat33, sub_2146DFC), then one truncated vector transform is applied. - vm_model/src/kart/moving_terrain.rs:6 with truncated SDK matrix products (
sub_2146DFC). Input is fx12 degrees. - vm_model/src/mapobj/drawbridge.rs:11 Not ported: the matrix/hinge rotation of the model (
sub_2146D28/sub_2146DFC, the per-tick - vm_model/src/mapobj/pinball.rs:330
sub_2146DFC: a x b (each element a truncated sum of products).
sub_2146F98
export/plan0/arm9_main/sub_2146F98_02146F98.c
- vm_model/src/kart/fxmath.rs:337 Rotation by (
sin,cos) about a unit axis (MTX_RotAxis33,sub_2146F98).
sub_2147230
export/plan0/arm9_main/sub_2147230_02147230.c
- vm_model/src/mapobj/presentation.rs:90 sub_20E2A74 + sub_2147230: DS row-vector 4x3 matrices, front/rear.
- docs/function_notes.md:216 SDK X-axis 4x3 rotation matrix constructor: rows [4096,0,0], [0,cos,sin], [0,-sin,cos], zero translation; traffic overrides X scale and Y/Z translation for the two axle draws
sub_2147B50
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:17 switch@L388 case@L390 [ctx_write, conditional, fetches_operand, calls_helper] W v15+0x28:u32; R v15+0x24, v15+0x28; ip+=1; operands: sub_2148078(); calls sub_2147FC8, sub_2147B70, sub_2147B50, sub_2147DB8
- vm_model/src/ir/vm_sub_209deaa.rs:317 ((void (__fastcall *)(int, int))sub_2147B50)(v37, v10);
sub_2147B70
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:17 switch@L388 case@L390 [ctx_write, conditional, fetches_operand, calls_helper] W v15+0x28:u32; R v15+0x24, v15+0x28; ip+=1; operands: sub_2148078(); calls sub_2147FC8, sub_2147B70, sub_2147B50, sub_2147DB8
- vm_model/src/ir/vm_sub_209deaa.rs:311 v37 = ((int (__fastcall *)(int, int))sub_2147B70)(v10, v35);
sub_2147C5C
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:71 switch@L200 case@L226 [ctx_write, calls_helper] W v15+0x0:u8; R v15+0x0; calls sub_2147C98, sub_2147C5C
- vm_model/src/ir/vm_sub_209deaa.rs:497 ((void (__fastcall )(unsigned __int8 ))sub_2147C5C)(v15);
sub_2147C98
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:71 switch@L200 case@L226 [ctx_write, calls_helper] W v15+0x0:u8; R v15+0x0; calls sub_2147C98, sub_2147C5C
- vm_model/src/ir/vm_sub_209deaa.rs:496 ((void (__fastcall )(unsigned __int8 , int))sub_2147C98)(v15, v10);
sub_2147DB8
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:17 switch@L388 case@L390 [ctx_write, conditional, fetches_operand, calls_helper] W v15+0x28:u32; R v15+0x24, v15+0x28; ip+=1; operands: sub_2148078(); calls sub_2147FC8, sub_2147B70, sub_2147B50, sub_2147DB8
- vm_model/src/ir/vm_sub_209deaa.rs:318 ((void (__fastcall )(int, _DWORD, int))sub_2147DB8)(v38, ((_DWORD *)v15 + 9), v36);
sub_2147E8C
export/plan0/arm9_main/sub_2147E8C_02147E8C.c
- vm_model/src/kart/fxmath.rs:149
FX_Sqrt(sub_2147E8C): hardware square root ofx << 32, rounded to fx12.
sub_2147EC0
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:4 IP:
v15+0x28(u32), fetched via sub_2148078; operand readers: sub_2147EC0.
sub_2147F34
export/plan0/arm9_main/sub_2147F34_02147F34.c
- vm_model/src/mapobj/boo.rs:131
sub_2147F34is the hardware FX_Div, which rounds to nearest (BizHawk: a truncating divide gave headings 79 units off) - vm_model/src/mapobj/path.rs:40
FX_Div(sub_2147F34): the divider's (a << 32) / b, rounded to fx12.
sub_2147FC8
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:17 switch@L388 case@L390 [ctx_write, conditional, fetches_operand, calls_helper] W v15+0x28:u32; R v15+0x24, v15+0x28; ip+=1; operands: sub_2148078(); calls sub_2147FC8, sub_2147B70, sub_2147B50, sub_2147DB8
- vm_model/src/ir/vm_sub_209deaa.rs:19 switch@L388 case@L408 [control_flow, ctx_write, conditional, calls_helper] W v15+0x28:u32; R v15+0x24; calls sub_2147FC8
- vm_model/src/ir/vm_sub_209deaa.rs:21 switch@L388 case@L413 [control_flow, ctx_write, conditional, calls_helper] W v15+0x28:u32, v15+0x2c[i]:u32, v15+0x3b:u8; R v15+0x24, v15+0x28, v15+0x3b; calls sub_2147FC8
- vm_model/src/ir/vm_sub_209deaa.rs:308 v36 = ((int (__fastcall )(unsigned __int8 ))sub_2147FC8)(v15);
- vm_model/src/ir/vm_sub_209deaa.rs:326 v39 = ((int (__fastcall )(unsigned __int8 ))sub_2147FC8)(v15);
- vm_model/src/ir/vm_sub_209deaa.rs:333 v40 = ((int (__fastcall )(unsigned __int8 ))sub_2147FC8)(v15);
sub_2147FD8
export/plan0/arm9_main/sub_2147FD8_02147FD8.c
- vm_model/src/mission_target.rs:617 wall bounce along the normal (
sub_2147FD8(def+48, ..)); def+48 is 0 for the boss - vm_model/src/kart/respawn.rs:39 sub_2147FD8 truncates each scaled component (unlike FX_Mul).
- vm_model/src/mapobj/pinball.rs:168
sub_2147FD8: the centre = base + up x radius, plus the height above the base. - docs/function_notes.md:458 SDK vector scale-add: out=base+((scalar*vector)>>12) independently per signed component, truncating rather than adding an FX_Mul rounding bias; used for respawn side/forward offsets
sub_2148078
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:4 IP:
v15+0x28(u32), fetched via sub_2148078; operand readers: sub_2147EC0. - vm_model/src/ir/vm_sub_209deaa.rs:17 switch@L388 case@L390 [ctx_write, conditional, fetches_operand, calls_helper] W v15+0x28:u32; R v15+0x24, v15+0x28; ip+=1; operands: sub_2148078(); calls sub_2147FC8, sub_2147B70, sub_2147B50, sub_2147DB8
- vm_model/src/ir/vm_sub_209deaa.rs:306 v35 = ((int (__fastcall )(_DWORD))sub_2148078)(((_DWORD *)v15 + 10));
sub_21482CC
export/plan0/arm9_main/sub_21482CC_021482CC.c
- vm_model/src/kart/fxmath.rs:84 Length, rounded (
VEC_Mag,sub_21482CC).
sub_21483A0
export/plan0/arm9_main/sub_21483A0_021483A0.c
- vm_model/src/kart/fxmath.rs:54 Cross product, rounded (
sub_21483A0).
sub_214848C
export/plan0/arm9_main/sub_214848C_0214848C.c
- vm_model/src/kart/fxmath.rs:39 Dot product, rounded (
VEC_DotProduct,sub_214848C).
sub_2148538
export/plan0/arm9_main/sub_2148538_02148538.c
- vm_model/src/kart/fxmath.rs:195
FX_Atan2(y, x)in fx12 radians (sub_2148538).
sub_2148714
export/plan0/arm9_main/sub_2148714_02148714.c
- vm_model/src/mapobj/bats.rs:37 The angle the game gets from
sub_2148714(dx, dz)(FX_Atan2Idx: 65536 = a turn, 0 along +z, - vm_model/src/mapobj/boo.rs:37
+0xC8= camera heading + random +-60 degrees (`sub_2148714(target.z - eye.z, target.x - - vm_model/src/mapobj/boo.rs:61 Table of
sub_2148714(off_21488E4):atan(i / 128)in 65536 = a turn. - vm_model/src/mapobj/boo.rs:74
sub_2148714(y, x)(FX_Atan2Idx): 16 bit angle, 0 along +x, 0x4000 along +y; the ratio of - docs/function_notes.md:444 FX_Atan2Idx(x, z): 16 bit angle 0 along +z, 0x4000 along +x (table off_21488E4 indexed by ratio>>5)
sub_21503B8
(not in export)
- vm_model/src/ir/vm_sub_209deaa.rs:37 switch@L299 case@L313 [conditional, calls_helper] R v49+0x0; calls sub_21503B8
- vm_model/src/ir/vm_sub_209deaa.rs:372 v49 = ((int (__fastcall )(_DWORD, int))sub_21503B8)(*v49, v47);
sub_218050C
(not in export)
- docs/function_notes.md:1054 overlay-9 entry refresh: calls sub_21805CC and sub_20AE718, and clears the flag at a1+4 when sub_218059C reports completion
- docs/function_notes/NEEDS_REVIEW.md:1451 overlay-9 entry refresh: clears flag a1+4 when sub_218059C fails, rebuilds list at global off_2180598 via allocator sub_2133068. [REVIEW]
- docs/function_notes/hk_32.md:113 overlay-9 entry refresh: clears flag a1+4 when sub_218059C fails, rebuilds list at global off_2180598 via allocator sub_2133068. [REVIEW]
sub_218059C
(not in export)
- docs/function_notes.md:1534 entry predicate: calls the function pointer off_21805B4 with the entry at off_21805B0 + 92 * a1
- docs/function_notes/NEEDS_REVIEW.md:1452 entry predicate: calls through off_21805B4 with pointer off_21805B0 + 92*a1 (92-byte table stride). [REVIEW]
- docs/function_notes/hk_32.md:114 entry predicate: calls through off_21805B4 with pointer off_21805B0 + 92*a1 (92-byte table stride). [REVIEW]
sub_21805CC
(not in export)
- docs/function_notes/hk_32.md:115 returns constant 8 (table/slot count).
sub_21805D4
(not in export)
- docs/function_notes.md:1322 overlay-9 init wrapper: calls sub_20364E8, then sub_20CA6B8, and returns sub_21805E0 of the result
- docs/function_notes/NEEDS_REVIEW.md:1453 overlay-9 init wrapper: calls sub_20364E8, then sub_20CA6B8 (clears choice-menu global pointer), then sub_21805E0 with its result. [REVIEW]
- docs/function_notes/hk_32.md:116 overlay-9 init wrapper: calls sub_20364E8, then sub_20CA6B8 (clears choice-menu global pointer), then sub_21805E0 with its result. [REVIEW]
sub_21805E0
export/plan0/ov9_000/sub_21805E0_021805E0.c
- docs/function_notes.md:1217 thunk: clears *off_21805EC and returns sub_21805E8()
- docs/function_notes/NEEDS_REVIEW.md:1457 thunk; returns the result of an indirect call through off_21805E4 [REVIEW]
- docs/function_notes/hk_33.md:3 thunk; returns the result of an indirect call through off_21805E4 [REVIEW]
sub_21805E8
export/plan0/ov9_000/sub_21805E8_021805E8.c
- docs/function_notes.md:1527 thunk: indirect call through the function pointer at v1 with no arguments
- docs/function_notes/NEEDS_REVIEW.md:1458 predicate; true when the object at off_2180610[0] is null or its +8 word is nonzero, and the halfword at +22 of off_2180614's object is zero [REVIEW]
- docs/function_notes/hk_33.md:4 predicate; true when the object at off_2180610[0] is null or its +8 word is nonzero, and the halfword at +22 of off_2180614's object is zero [REVIEW]
sub_21805F0
(not in export)
- docs/function_notes.md:1323 init of a 3-entry HUD/minimap-style setup (264 bytes) copying the entries from off_21806F8
- docs/function_notes/NEEDS_REVIEW.md:1459 init of a 3-entry HUD/minimap-style setup: copies a 20-halfword table, creates an object into off_2180700, configures sub-objects, sets fields +12..+20 [REVIEW]
- docs/function_notes/hk_33.md:5 init of a 3-entry HUD/minimap-style setup: copies a 20-halfword table, creates an object into off_2180700, configures sub-objects, sets fields +12..+20 [REVIEW]
sub_2180708
(not in export)
- docs/function_notes/hk_33.md:6 constructor-like setter; stores four words (ptr, a3, a4, a5) into a 16-byte record and returns it
sub_2180720
(not in export)
- docs/function_notes/hk_33.md:7 thin wrapper; calls sub_2038D00 on the sub-object at a1+0x70 with six halfword args
sub_2180754
(not in export)
- docs/function_notes/hk_33.md:8 thin wrapper; calls sub_2038D00 on the sub-object at a1+0x28 with six halfword args
sub_2180788
(not in export)
- docs/function_notes/hk_33.md:9 thin wrapper; calls sub_2038D28 on the sub-object at a1+0x28 with seven halfword args
sub_21807C4
(not in export)
- docs/function_notes/hk_33.md:10 getter chain; returns sub_20364E0(sub_20364E8())
sub_21807E0
export/plan0/ov9_000/sub_21807E0_021807E0.c
- docs/function_notes.md:1324 teardown counterpart of sub_21805F0 (630 bytes), calling the matching free helpers
- docs/function_notes/NEEDS_REVIEW.md:1460 teardown counterpart of sub_21805F0; calls the function pointer at +32 of the object in off_218080C, then sub_2180BB4/sub_202BB60/sub_212ABD0/sub_2125DA0 [REVIEW]
- docs/function_notes/hk_33.md:11 teardown counterpart of sub_21805F0; calls the function pointer at +32 of the object in off_218080C, then sub_2180BB4/sub_202BB60/sub_212ABD0/sub_2125DA0 [REVIEW]
sub_2180AB0
(not in export)
- docs/function_notes/hk_33.md:12 thin wrapper; forwards six args to sub_2024340
sub_2180AD8
(not in export)
- docs/function_notes/hk_33.md:13 calls the function pointer stored at a1+0x18 with no args
sub_2180AF4
(not in export)
- docs/function_notes.md:1055 read-modify-write of the 16-bit control register at off_2180B28: keeps the 0x43 mask and ORs (a1 << 14) | (a2 << 7) | the third field
- docs/function_notes/NEEDS_REVIEW.md:1461 read-modify-write of a 16-bit control register (off_2180B28): keeps bits 0x43, packs a1<<14, a2<<7, a3<<8, a4*4, a5<<13 [REVIEW]
- docs/function_notes/hk_33.md:14 read-modify-write of a 16-bit control register (off_2180B28): keeps bits 0x43, packs a1<<14, a2<<7, a3<<8, a4*4, a5<<13 [REVIEW]
sub_2180B2C
(not in export)
- docs/function_notes/hk_33.md:15 sets or clears bit 0x40 of the halfword at off_2180B54 according to a1
sub_2180B58
(not in export)
- docs/function_notes/hk_33.md:16 sets the low two bits of the halfword at off_2180B70 to a1 (clears bits 0-1 first)
sub_2180B74
(not in export)
- docs/function_notes.md:1056 writes the word at off_2180B9C = (a1 & dword_2180B94) | (dword_2180B98 & (a2 << 16))
- docs/function_notes/NEEDS_REVIEW.md:1462 writes word at off_2180B9C = (a1 & dword_2180B94) | (dword_2180B98 & (a2<<16)); returns the pointer [REVIEW]
- docs/function_notes/hk_33.md:17 writes word at off_2180B9C = (a1 & dword_2180B94) | (dword_2180B98 & (a2<<16)); returns the pointer [REVIEW]
sub_2180BA0
(not in export)
- docs/function_notes.md:1325 same packing as sub_2180AF4 applied to the register at off_2180BD4
- docs/function_notes/NEEDS_REVIEW.md:1463 same packing as sub_2180AF4, applied to the register at off_2180BD4 [REVIEW]
- docs/function_notes/hk_33.md:18 same packing as sub_2180AF4, applied to the register at off_2180BD4 [REVIEW]
sub_2180BD8
(not in export)
- docs/function_notes/hk_33.md:19 sets or clears bit 0x40 of the halfword at off_2180C00 according to a1
sub_2180C04
(not in export)
- docs/function_notes/hk_33.md:20 sets the low two bits of the halfword at off_2180C1C to a1
sub_2180C20
(not in export)
- docs/function_notes.md:1326 same as sub_2180B74 but on off_2180C48 with the masks dword_2180C40 and dword_2180C44
- docs/function_notes/NEEDS_REVIEW.md:1464 same as sub_2180B74 but on off_2180C48 with dword_2180C40/dword_2180C44 masks [REVIEW]
- docs/function_notes/hk_33.md:21 same as sub_2180B74 but on off_2180C48 with dword_2180C40/dword_2180C44 masks [REVIEW]
sub_2180C4C
(not in export)
- docs/function_notes.md:1327 bitfield setter: clears bits 8..12 of the word at off_2180C64 and ORs in (a1 << 8)
- docs/function_notes/NEEDS_REVIEW.md:1465 bitfield setter: clears bits 8-12 of the word at off_2180C64 and ORs in a1<<8 [REVIEW]
- docs/function_notes/hk_33.md:22 bitfield setter: clears bits 8-12 of the word at off_2180C64 and ORs in a1<<8 [REVIEW]
sub_2180C68
(not in export)
- docs/function_notes.md:1328 initialises a 4-word fixed-point record to {4096, 0, 0, 4096} (identity matrix, 1.0 in 4.12 format)
- docs/function_notes/NEEDS_REVIEW.md:1466 initialises a 4-word record to {4096, 0, 0, 4096} (fixed-point 1.0 scale/identity-style values) [REVIEW]
- docs/function_notes/hk_33.md:23 initialises a 4-word record to {4096, 0, 0, 4096} (fixed-point 1.0 scale/identity-style values) [REVIEW]
sub_2180C84
(not in export)
- docs/function_notes/hk_33.md:24 getter; returns the global at off_2180C90
sub_2180C94
(not in export)
- docs/function_notes/hk_33.md:25 fills a halfword array with identity indices 0..N-1 (N = dword_2180CA8)
sub_2180CAC
(not in export)
- docs/function_notes/hk_33.md:26 zeroes a halfword array of dword_2180CC4 entries
sub_2180CC8
(not in export)
- docs/function_notes.md:1329 flood fill over the 2D cell grid (508 bytes) using the cell accessor
- docs/function_notes/NEEDS_REVIEW.md:1467 flood fill over the 2D cell grid (cells via sub_21811E0) with a coordinate stack, writing a3 into matching cells; returns whether anything changed [REVIEW]
- docs/function_notes/hk_33.md:27 flood fill over the 2D cell grid (cells via sub_21811E0) with a coordinate stack, writing a3 into matching cells; returns whether anything changed [REVIEW]
sub_2180ECC
(not in export)
- docs/function_notes.md:1330 walks a line between two 4096-unit fixed-point points (272 bytes), stepping along the longer axis
- docs/function_notes/NEEDS_REVIEW.md:1468 walks a line between two 4096-unit fixed-point points (cells = coord>>12), slope via sub_2147F34 (FX_Div), writing a5 into visited cells; returns changed flag [REVIEW]
- docs/function_notes/hk_33.md:28 walks a line between two 4096-unit fixed-point points (cells = coord>>12), slope via sub_2147F34 (FX_Div), writing a5 into visited cells; returns changed flag [REVIEW]
sub_2180FE4
(not in export)
- docs/function_notes/hk_33.md:29 returns the grid cell value at (a1,a2) via sub_21811E0, or 0 if out of range
sub_2181000
(not in export)
- docs/function_notes/hk_33.md:30 sets grid cell (a1,a2) to a3 if it differs (calls sub_21811A8 first); returns 1 if changed
sub_2181028
(not in export)
- docs/function_notes.md:1331 resets the fields +12, +16 and +20 of the owner object at off_2181048
- docs/function_notes/NEEDS_REVIEW.md:1469 resets fields +12, +16, +20 of the owner object, then re-initialises via off_218104C with an N*N grid buffer [REVIEW]
- docs/function_notes/hk_33.md:31 resets fields +12, +16, +20 of the owner object, then re-initialises via off_218104C with an N*N grid buffer [REVIEW]
sub_2181050
(not in export)
- docs/function_notes/hk_33.md:32 getter; returns field +16 of the object at off_2181058
sub_218105C
(not in export)
- docs/function_notes/hk_33.md:33 clears field +12 of the object at off_2181068 and returns that object's pointer value
sub_218106C
(not in export)
- docs/function_notes/hk_33.md:34 getter; returns field +20 of the object at off_2181074
sub_2181078
(not in export)
- docs/function_notes.md:1332 flips a double buffer: swaps the fields +32 and +36 of the object at off_2181098
- docs/function_notes/NEEDS_REVIEW.md:1470 flips a double buffer: swaps fields +32 and +36 of the object at off_2181098, stores (old +20 == 0) into +20 and returns it [REVIEW]
- docs/function_notes/hk_33.md:35 flips a double buffer: swaps fields +32 and +36 of the object at off_2181098, stores (old +20 == 0) into +20 and returns it [REVIEW]
sub_218109C
(not in export)
- docs/function_notes.md:1218 remaps each grid cell through a halfword lookup table
- docs/function_notes/NEEDS_REVIEW.md:1471 remaps each grid cell through a halfword lookup table (a2), marking dirty via sub_21811A8 on change; returns changed flag [REVIEW]
- docs/function_notes/hk_33.md:36 remaps each grid cell through a halfword lookup table (a2), marking dirty via sub_21811A8 on change; returns changed flag [REVIEW]
sub_2181104
(not in export)
- docs/function_notes/hk_33.md:37 copies a byte array (a1) into the grid buffer (field +32) of the object at off_2181150, calling sub_21811A8 on change; returns changed flag
sub_2181154
(not in export)
- docs/function_notes/hk_33.md:38 getter; returns field +32 of the object at off_218115C (grid buffer pointer)
sub_2181160
(not in export)
- docs/function_notes.md:1333 returns N * N + 64, where N is the size word of the object at off_2181170
- docs/function_notes/NEEDS_REVIEW.md:1472 returns N*N + 64 where N is the size word of the object at off_2181170 [REVIEW]
- docs/function_notes/hk_33.md:39 returns N*N + 64 where N is the size word of the object at off_2181170 [REVIEW]
sub_2181174
(not in export)
- docs/function_notes/hk_33.md:40 stub; returns 0
sub_2181178
(not in export)
- docs/function_notes.md:1334 returns s * s, where s = sub_2133068(field +4 of the object at off_2181194, 8)
- docs/function_notes/NEEDS_REVIEW.md:1473 returns s*s where s = sub_2133068(field +4 of the object at off_2181194, 8), a block-count square [REVIEW]
- docs/function_notes/hk_33.md:41 returns s*s where s = sub_2133068(field +4 of the object at off_2181194, 8), a block-count square [REVIEW]
sub_2181198
(not in export)
- docs/function_notes/hk_33.md:42 stub; returns 0
sub_218119C
(not in export)
- docs/function_notes/hk_33.md:43 getter; returns field +28 of the object at off_21811A4
sub_21811A8
(not in export)
- docs/function_notes.md:1057 marks the grid object at off_21811DC dirty: when its +12 flag is clear sets +16 = 1 and +12 = 1
- docs/function_notes/NEEDS_REVIEW.md:1474 if the grid object at off_21811DC is not already dirty (+12 == 0), sets dirty flags and calls sub_214D0A8 over the buffer (likely a cache/undo snapshot) [REVIEW]
- docs/function_notes/hk_33.md:44 if the grid object at off_21811DC is not already dirty (+12 == 0), sets dirty flags and calls sub_214D0A8 over the buffer (likely a cache/undo snapshot) [REVIEW]
sub_21811E0
(not in export)
- docs/function_notes.md:1058 grid cell address lookup: returns a pointer to the cell byte for (x, y) in the grid table at off_2181244, or 0 for a negative index
- docs/function_notes/NEEDS_REVIEW.md:1475 grid cell address lookup: pointer to the byte for (x,y) in the map at off_2181244, 8x8 tiled layout (64-byte blocks); returns 0 if out of bounds [REVIEW]
- docs/function_notes/hk_33.md:45 grid cell address lookup: pointer to the byte for (x,y) in the map at off_2181244, 8x8 tiled layout (64-byte blocks); returns 0 if out of bounds [REVIEW]
sub_2181248
(not in export)
- docs/function_notes/hk_33.md:46 getter; returns the first word of the object at *off_2181250 (grid size N)
sub_2181254
(not in export)
- docs/function_notes.md:1219 constructor for a grid/map working object: a 48-byte struct allocated with sub_2036B74 (32-byte alignment)
- docs/function_notes/NEEDS_REVIEW.md:1476 constructor for a grid/map working object (48-byte struct in off_21813D0): allocates via sub_2036B74 and fills sub-buffers and an identity index table [REVIEW]
- docs/function_notes/hk_33.md:47 constructor for a grid/map working object (48-byte struct in off_21813D0): allocates via sub_2036B74 and fills sub-buffers and an identity index table [REVIEW]
sub_21813F0
(not in export)
- docs/function_notes.md:1506 scans the object list at off_21814D8 (count from sub_20C0DB0); the unflagged entries are collected for the next step
- docs/function_notes/NEEDS_REVIEW.md:1477 scans the object list at off_21814D8; unflagged entries are bounds-tested (sub_20B5AE8); on hit allocates an 88-byte record (sub_20B83DC) [REVIEW]
- docs/function_notes/hk_33.md:48 scans the object list at off_21814D8; unflagged entries are bounds-tested (sub_20B5AE8); on hit allocates an 88-byte record (sub_20B83DC) [REVIEW]
sub_21814F0
export/plan0/ov9_000/sub_21814F0_021814F0.c
- docs/function_notes.md:1335 wrapper: returns off_2181500(off_2181504, 104)
- docs/function_notes/NEEDS_REVIEW.md:1478 wrapper around sub_2181508 with decompiler-garbled ARM flag code (effectively a tail call with args shuffled) [REVIEW]
- docs/function_notes/hk_33.md:49 wrapper around sub_2181508 with decompiler-garbled ARM flag code (effectively a tail call with args shuffled) [REVIEW]
sub_2181508
export/plan0/ov9_000/sub_2181508_02181508.c
- docs/function_notes.md:1336 classifies the id a1 into a category 0..8 by constant ranges (kart-object path when the object at off_2181534 +8 is 4)
- docs/function_notes/NEEDS_REVIEW.md:1479 classifies ID a1 into category 0-8 by constant ranges (dword_21815E8..dword_218163C); returns the a2-th halfword of that category's table or -1 [REVIEW]
- docs/function_notes/hk_33.md:50 classifies ID a1 into category 0-8 by constant ranges (dword_21815E8..dword_218163C); returns the a2-th halfword of that category's table or -1 [REVIEW]
sub_218153C
(not in export)
- docs/function_notes.md:1337 advances the timer/animation object at off_21815AC, clamping the value to the length word at +6
- docs/function_notes/NEEDS_REVIEW.md:1480 advances a timer/animation object at off_21815AC up to a1 ticks: decrements +6, increments +8 against a limit from sub_21817EC, and steps the value at +14 [REVIEW]
- docs/function_notes/hk_33.md:51 advances a timer/animation object at off_21815AC up to a1 ticks: decrements +6, increments +8 against a limit from sub_21817EC, and steps the value at +14 [REVIEW]
sub_21815B0
(not in export)
- docs/function_notes.md:1338 same tick loop as sub_218153C on the object at the next global, returning the new count
- docs/function_notes/NEEDS_REVIEW.md:1481 same tick loop as sub_218153C but on the object at off_218160C, stepping by +20 and without the decrement [REVIEW]
- docs/function_notes/hk_33.md:52 same tick loop as sub_218153C but on the object at off_218160C, stepping by +20 and without the decrement [REVIEW]
sub_2181610
(not in export)
- docs/function_notes/hk_33.md:53 adds a1 to the halfword at +6 of the object at off_218163C and clamps it to the limit from sub_21817EC; returns the value
sub_2181640
export/plan0/ov9_000/sub_2181640_02181640.c
- docs/function_notes/hk_33.md:54 thunk; tail-calls the function pointer at off_2181644
sub_2181658
(not in export)
- docs/function_notes/hk_33.md:55 adds a1 clamped to the halfword at +4 of the object at off_218166C into the halfword at +10; returns the new +10 value
sub_2181670
export/plan0/ov9_000/sub_2181670_02181670.c
- docs/function_notes/hk_33.md:56 clears the global slot off_2181678 and returns its address (singleton reset)
sub_218167C
export/plan0/ov9_000/sub_218167C_0218167C.c
- docs/function_notes/hk_33.md:57 constructor: allocates a 64-byte object (sub_2036BEC) into off_21816D4, back-links a1 at +28, calls sub_2181694
sub_2181688
(not in export)
- docs/function_notes/hk_33.md:58 sets field +24 of the object at off_2181690 to a1
sub_2181694
export/plan0/ov9_000/sub_2181694_02181694.c
- docs/function_notes.md:1059 init helper: finds the table entry sub_2100138(108) and writes a4 and ~a4 into its entries, storing a4 at +4 of a1
- docs/function_notes/NEEDS_REVIEW.md:1482 init helper: stores a4 at +4 of a1, writes a4 and ~a4 into the object at a2, looks up +56/+60 via sub_204799C/sub_2047A28, then tail-calls via sub_204F804 [REVIEW]
- docs/function_notes/hk_33.md:59 init helper: stores a4 at +4 of a1, writes a4 and ~a4 into the object at a2, looks up +56/+60 via sub_204799C/sub_2047A28, then tail-calls via sub_204F804 [REVIEW]
sub_21816DC
(not in export)
- docs/function_notes.md:1341 returns byte +47 of the object at off_21816F8; when that byte is 0 returns sub_2181A80() instead
- docs/function_notes/NEEDS_REVIEW.md:1483 returns byte +47 of the object at off_21816F8; if that byte is zero, returns sub_2181A80() instead [REVIEW]
- docs/function_notes/hk_33.md:60 returns byte +47 of the object at off_21816F8; if that byte is zero, returns sub_2181A80() instead [REVIEW]
sub_21816FC
export/plan0/ov9_000/sub_21816FC_021816FC.c
- game/src/mission.rs:177 kind 4 ("perform N power-slide turbo boosts",
sub_21816FC): each mini-turbo of the player steps - docs/function_notes.md:1220 thunk: when the state byte at +47 of the object at *off_2181718 is 4 calls sub_2181A80, otherwise the other kart step
- docs/function_notes/NEEDS_REVIEW.md:1484 thunk; indirect call through a function pointer with no args (target lost by decompiler) [REVIEW]
- docs/function_notes/hk_33.md:61 thunk; indirect call through a function pointer with no args (target lost by decompiler) [REVIEW]
sub_218171C
export/plan0/ov9_000/sub_218171C_0218171C.c
- docs/function_notes/hk_33.md:62 thunk; calls its fourth argument (function pointer) with a1
sub_218173C
export/plan0/ov9_000/sub_218173C_0218173C.c
- vm_model/src/mission_step.rs:23 When touching mission target
idcounts (sub_20D6BE0/sub_20D6A54callsub_218173C(id) - vm_model/src/mission_step.rs:140
sub_218173C(id): does touching map objectidcount as a mission hit? Only kinds 0, 3 and 7 - docs/function_notes.md:1465 dispatcher on the halfword at a1+8 over nine cases, using the mode byte at +47 of *off_21817B4
- docs/function_notes/NEEDS_REVIEW.md:1485 dispatcher on the halfword at a1+8 over nine cases (-5958..-5950) that jump to fixed addresses; decompiler jump-table output, purpose unclear [REVIEW]
- docs/function_notes/hk_33.md:63 dispatcher on the halfword at a1+8 over nine cases (-5958..-5950) that jump to fixed addresses; decompiler jump-table output, purpose unclear [REVIEW]
sub_21817C0
(not in export)
- vm_model/src/mission_target.rs:855 (
def +0); the caller runs the mission hooks (sub_21817C0before,sub_20A12B8on a kill). - docs/function_notes/hk_33.md:64 returns byte +47 of the object at off_21817DC; if it equals 7, returns sub_2181A80() instead
sub_21817E0
(not in export)
- docs/function_notes/hk_33.md:65 getter; returns halfword +6 of the object at off_21817E8
sub_21817EC
(not in export)
- vm_model/src/mission_step.rs:84
sub_21817EC: the limit (config byte +55, 1 when zero). - docs/function_notes/NEEDS_REVIEW.md:1486 returns byte +55 of the object at off_21817FC, or 1 if that byte is zero (minimum-of-1 limit helper) [REVIEW]
- docs/function_notes/hk_33.md:66 returns byte +55 of the object at off_21817FC, or 1 if that byte is zero (minimum-of-1 limit helper) [REVIEW]
sub_2181800
(not in export)
- vm_model/src/mission_step.rs:272
sub_2185B98.countis the mission count (sub_2181800, 0 outside mode 4); - docs/function_notes/hk_33.md:67 getter; returns halfword +4 of the object at off_2181808
sub_218180C
(not in export)
- docs/function_notes/hk_33.md:68 sets halfword +14 of the object at off_2181814 to result and returns it
sub_2181818
(not in export)
- docs/function_notes/hk_33.md:69 getter; returns halfword +14 of the object at off_2181820
sub_2181824
(not in export)
- docs/function_notes/hk_33.md:70 stores four halfwords (a1..a4) at +16, +18, +20, +22 of the object at off_218183C and returns that object pointer
sub_2181840
(not in export)
- vm_model/src/mission_step.rs:2 per-frame driver
sub_2181840and the MissionGate object (id 0x6E:sub_2185B98update, - vm_model/src/mission_step.rs:104 Second half of
sub_2181840(kinds 1 and 5).frozenissub_2061F90(). - vm_model/src/mission_step.rs:154 The 16-tick elimination in the first half of
sub_2181840(mode 4 while the racer manager is - docs/function_notes/NEEDS_REVIEW.md:1487 per-frame state update for the racer-state record at off_21819C4; in mode 4 runs hit/tick logic (sub_20A126C/sub_20A1084/sub_20A1154), else timers and callbacks [REVIEW]
- docs/function_notes/hk_33.md:71 per-frame state update for the racer-state record at off_21819C4; in mode 4 runs hit/tick logic (sub_20A126C/sub_20A1084/sub_20A1154), else timers and callbacks [REVIEW]
sub_21819D4
export/plan0/ov9_000/sub_21819D4_021819D4.c
- docs/function_notes.md:1458 fills three rows of a 2D halfword table from the source table after allocating a 2D working buffer (sub_20364E8 / sub_20364E0)
- docs/function_notes/NEEDS_REVIEW.md:1488 fills three rows of a 2D halfword table from the state record, then dispatches on off_2181A74's record fields via sub_2180690/sub_2181DBC/sub_20B3F7C [REVIEW]
- docs/function_notes/hk_33.md:72 fills three rows of a 2D halfword table from the state record, then dispatches on off_2181A74's record fields via sub_2180690/sub_2181DBC/sub_20B3F7C [REVIEW]
sub_2181A48
(not in export)
- docs/function_notes/hk_33.md:73 getter; returns halfword +66 of the object at off_2181A54
sub_2181A58
(not in export)
- docs/function_notes/hk_33.md:74 getter; returns halfword +64 of the object at off_2181A64
sub_2181A68
(not in export)
- docs/function_notes/hk_33.md:75 returns the address of field +52 of the object at off_2181A70
sub_2181A74
(not in export)
- docs/function_notes/hk_33.md:76 returns the address of field +40 of the object pointed to by off_2181A7C
sub_2181A80
(not in export)
- vm_model/src/mission_step.rs:1 Mission Run clock and gates (overlay 1): the per-kart mission step
sub_2181A80, the - vm_model/src/mission_step.rs:89
sub_2181A80.manager_activeismode == 4 && sub_20A126C(): the step does nothing then. - docs/function_notes.md:630 per-kart battle/mission step: in mode 4 returns early while sub_20A126C holds; otherwise bumps the counter at (*off_2181B0C)+4 up to sub_21817EC(), calls sub_2108EDC, and for kart kinds 0/1/3/5/7 at counter >= limit calls sub_203E74C with the racer id
- docs/function_notes/NEEDS_REVIEW.md:1489 per-kart battle/mission step: returns early in mode 4 when sub_20A126C holds; else bumps a counter, updates via sub_2108EDC, reports racer via sub_203E74C [REVIEW]
- docs/function_notes/hk_33.md:77 per-kart battle/mission step: returns early in mode 4 when sub_20A126C holds; else bumps a counter, updates via sub_2108EDC, reports racer via sub_203E74C [REVIEW]
sub_2181B10
(not in export)
- docs/function_notes.md:631 returns (u16)(racer +68 + byte at off_2181B2C[dword_2181B30] - 1)
- docs/function_notes/NEEDS_REVIEW.md:1490 returns a u16 index: racer field +68 plus a byte from the table at off_2181B2C (dword_2181B30 offset), minus 1 [REVIEW]
- docs/function_notes/hk_33.md:78 returns a u16 index: racer field +68 plus a byte from the table at off_2181B2C (dword_2181B30 offset), minus 1 [REVIEW]
sub_2181B34
(not in export)
- docs/function_notes/hk_33.md:79 returns a byte from the table at off_2181B40 at offset dword_2181B44
sub_2181B48
(not in export)
- docs/function_notes.md:1342 returns the word at +72 of the array entry for a1 (indexed through the table at *off_2181B60 minus the base byte)
- docs/function_notes/NEEDS_REVIEW.md:1491 returns the word at +72 of the array entry (a1 - base) of the list at off_2181B60[0], base from a byte at off_2181B64 [REVIEW]
- docs/function_notes/hk_33.md:80 returns the word at +72 of the array entry (a1 - base) of the list at off_2181B60[0], base from a byte at off_2181B64 [REVIEW]
sub_2181B6C
(not in export)
- docs/function_notes.md:632 appends a1 to the racer list (72-byte header entries, count at +68) of the object at off_2181BAC, calls sub_20A1728 on the new index, returns the new count
- docs/function_notes/NEEDS_REVIEW.md:1492 appends a1 to the racer-list array (+72 entries, count at +68) of the object at off_2181BAC; calls sub_20A1728; returns new count [REVIEW]
- docs/function_notes/hk_33.md:81 appends a1 to the racer-list array (+72 entries, count at +68) of the object at off_2181BAC; calls sub_20A1728; returns new count [REVIEW]
sub_2181C00
(not in export)
- docs/function_notes/hk_33.md:82 wrapper; returns sub_209BFA8(off_2181C18, 0, 0, 1, 1), allocating an actor-family class record
sub_2181C1C
(not in export)
- docs/function_notes.md:1221 per-frame state machine (978 bytes) dispatched by a jump table on the state word at +24
- docs/function_notes/NEEDS_REVIEW.md:1493 per-frame state machine (jump table on state word a2+248, 10 states) for a kart-attached moving object: fixed-point position/velocity, collision, sounds [REVIEW]
- docs/function_notes/hk_33.md:83 per-frame state machine (jump table on state word a2+248, 10 states) for a kart-attached moving object: fixed-point position/velocity, collision, sounds [REVIEW]
sub_2182516
(not in export)
- docs/function_notes.md:1222 thunk: indirect call through a function pointer with no arguments
- docs/function_notes/NEEDS_REVIEW.md:1494 thunk; indirect call through a function pointer with no args (target lost by decompiler) [REVIEW]
- docs/function_notes/hk_33.md:84 thunk; indirect call through a function pointer with no args (target lost by decompiler) [REVIEW]
sub_2182530
(not in export)
- docs/function_notes.md:1060 resets a list of kart-linked objects from their source records
- docs/function_notes/NEEDS_REVIEW.md:1495 resets a list of kart-linked objects from their source records at +156 (copies position/velocity, sets +8 offset, +176 timer, +160 by record flag +42) [REVIEW]
- docs/function_notes/hk_33.md:86 resets a list of kart-linked objects from their source records at +156 (copies position/velocity, sets +8 offset, +176 timer, +160 by record flag +42) [REVIEW]
sub_218261C
(not in export)
- docs/function_notes.md:633 draw routine for a kart-linked effect when +176 > 0 and +160 != 0: sub_1FF9048 sends the display data, sub_209B940/sub_209B9A4/sub_209B688 set the model fields, sub_209BBD0 and sub_209BB2C draw it
- docs/function_notes/NEEDS_REVIEW.md:1496 draw routine for a kart-linked object when +176 > 0 and +160 nonzero: sends display data via sub_1FF9048 and updates the model via sub_209B940/sub_209B9A4 [REVIEW]
- docs/function_notes/hk_33.md:87 draw routine for a kart-linked object when +176 > 0 and +160 nonzero: sends display data via sub_1FF9048 and updates the model via sub_209B940/sub_209B9A4 [REVIEW]
sub_21826DC
(not in export)
- docs/function_notes.md:1061 init of a model object: creates it with sub_219B458(a1, off_218271C), then sub_219B2C8, sub_209B940(obj, 63) and sub_209BA08(obj, 2)
- docs/function_notes/NEEDS_REVIEW.md:1497 init of a model object: creates it with sub_219B458(a1, off_218271C), sets material/animation via sub_209B940(63), sub_209BA08(2), sub_20849A0; returns 1 [REVIEW]
- docs/function_notes/hk_33.md:88 init of a model object: creates it with sub_219B458(a1, off_218271C), sets material/animation via sub_209B940(63), sub_209BA08(2), sub_20849A0; returns 1 [REVIEW]
sub_218272C
(not in export)
- docs/function_notes.md:1432 collision/hit callback: returns the byte a4 unless the flag word at a2+72 has the bit dword_218277C set
- docs/function_notes/NEEDS_REVIEW.md:1498 collision/hit callback: returns byte a4 unless flag in a2+72 is set; on *a3 == 1 with state not 3/5/6 calls sub_20D2398 and sub_21815B0 in mode 4 [REVIEW]
- docs/function_notes/hk_33.md:89 collision/hit callback: returns byte a4 unless flag in a2+72 is set; on *a3 == 1 with state not 3/5/6 calls sub_20D2398 and sub_21815B0 in mode 4 [REVIEW]
sub_2182784
(not in export)
- docs/function_notes.md:1343 scene mode setup/teardown keyed on the mode word at +8 of *off_21827C0: mode 4 runs sub_2181688 and sub_218167C on the two objects
- docs/function_notes/NEEDS_REVIEW.md:1499 scene mode setup/teardown keyed on the mode word at off_21827C0+8: mode 4 runs sub_2181688/sub_218167C to initialise, else returns the mode [REVIEW]
- docs/function_notes/hk_33.md:90 scene mode setup/teardown keyed on the mode word at off_21827C0+8: mode 4 runs sub_2181688/sub_218167C to initialise, else returns the mode [REVIEW]
sub_21827D0
(not in export)
- docs/function_notes.md:1062 walks the kart-object list from sub_2100138(104) and handles the state-9 objects that lack the flag
- docs/function_notes/NEEDS_REVIEW.md:1500 walks the kart-object list (sub_2100138(104)); state-9 unflagged objects reset to state 2 with new position and timer; then sound via sub_212C6F0/sub_212ECC0 [REVIEW]
- docs/function_notes/hk_33.md:91 walks the kart-object list (sub_2100138(104)); state-9 unflagged objects reset to state 2 with new position and timer; then sound via sub_212C6F0/sub_212ECC0 [REVIEW]
sub_21828D0
(not in export)
- docs/function_notes.md:1063 walks the same kart-object list and handles the state-0 objects that lack the flag
- docs/function_notes/NEEDS_REVIEW.md:1501 walks the same object list; state-0 objects without the flag are set to state 8 with a timer and +160=50; then sound handling as in sub_21827D0 [REVIEW]
- docs/function_notes/hk_33.md:92 walks the same object list; state-0 objects without the flag are set to state 8 with a timer and +160=50; then sound handling as in sub_21827D0 [REVIEW]
sub_218298C
(not in export)
- docs/function_notes.md:1471 walks the object list (sub_2100138(104)); for state-7 objects clears their flag word and resets the counter
- docs/function_notes/NEEDS_REVIEW.md:1502 walks the object list; for state-7 objects clears +232; for the first a1 of them calls sub_20D2398 when not flagged and sub_218153C(1) in mode 4 [REVIEW]
- docs/function_notes/hk_33.md:93 walks the object list; for state-7 objects clears +232; for the first a1 of them calls sub_20D2398 when not flagged and sub_218153C(1) in mode 4 [REVIEW]
sub_2182A1C
(not in export)
- docs/function_notes.md:1223 walks the object list (sub_2100138(104)); handles the state-7 objects before the remaining entries
- docs/function_notes/NEEDS_REVIEW.md:1503 walks the object list; first a1 state-7 objects get a new route point (sub_20D22D0), timer and state; mode 4 path from sub_2181B34/sub_2181B48 [REVIEW]
- docs/function_notes/hk_33.md:94 walks the object list; first a1 state-7 objects get a new route point (sub_20D22D0), timer and state; mode 4 path from sub_2181B34/sub_2181B48 [REVIEW]
sub_2182B9C
(not in export)
- docs/function_notes.md:1344 in mode 4 (+8 of *off_2182BB8) returns sub_2181640(a1) of the 16-bit value; otherwise returns the value unchanged
- docs/function_notes/NEEDS_REVIEW.md:1504 in mode 4 (off_2182BB8+8) returns sub_2181640(a1) (thunk), otherwise returns a1 unchanged [REVIEW]
- docs/function_notes/hk_33.md:95 in mode 4 (off_2182BB8+8) returns sub_2181640(a1) (thunk), otherwise returns a1 unchanged [REVIEW]
sub_2182BBC
(not in export)
- docs/function_notes.md:1569 spawns a state-5 kart-linked object from a free slot of the list at off_2182CF4
- docs/function_notes/NEEDS_REVIEW.md:1505 spawns a state-5 kart-linked object from a free slot (sub_209BBFC) at a route point (sub_20D22D0) with timer 30; fires a command via sub_210B7A8 [REVIEW]
- docs/function_notes/hk_33.md:96 spawns a state-5 kart-linked object from a free slot (sub_209BBFC) at a route point (sub_20D22D0) with timer 30; fires a command via sub_210B7A8 [REVIEW]
sub_2182D10
(not in export)
- docs/function_notes.md:1224 like sub_2182BBC but spawns a state-3 object with its position taken from sub_207A974
- docs/function_notes/NEEDS_REVIEW.md:1506 like sub_2182BBC but spawns a state-3 object with positions from the racer record offsets, clears flag bit 1, and fires a command via sub_210B7A8 [REVIEW]
- docs/function_notes/hk_33.md:97 like sub_2182BBC but spawns a state-3 object with positions from the racer record offsets, clears flag bit 1, and fires a command via sub_210B7A8 [REVIEW]
sub_2182E64
(not in export)
- docs/function_notes/hk_33.md:98 gets the kart by slot (off_2182E94+98), finds a free object via sub_209BBFC and initialises it with sub_2182EFC
sub_2182E98
(not in export)
- docs/function_notes.md:1449 advances the animation timer at a1+168 by a2 and updates the animation frame words
- docs/function_notes/NEEDS_REVIEW.md:1507 advances the animation timer at a1+168 by a2; each 5 units bumps frame counter a1+164, wrapped by sub_209B634 frame count [REVIEW]
- docs/function_notes/hk_33.md:99 advances the animation timer at a1+168 by a2; each 5 units bumps frame counter a1+164, wrapped by sub_209B634 frame count [REVIEW]
sub_2182EFC
(not in export)
- docs/function_notes.md:634 initialises an effect object: +172 = 30, position from a2[32..34] (+8 adds dword_2182F60) into +4..+12, +20 = dword_2182F64, +248 = 1, +176 = dword_2182F68, +160 = 31, flag OR into +2, spawns a particle via sub_208B7BC into +252, sets the word at +dword_2182F74 to 13
- docs/function_notes/NEEDS_REVIEW.md:1508 initialises an effect object: state 1, timer +176, +160=31, position from the kart record, spawns a particle via sub_208B7BC into +252 [REVIEW]
- docs/function_notes/hk_33.md:100 initialises an effect object: state 1, timer +176, +160=31, position from the kart record, spawns a particle via sub_208B7BC into +252 [REVIEW]
sub_2182F78
(not in export)
- docs/function_notes.md:1064 draw routine for object a2 when its timer (+176) and +160 are nonzero; a variant of sub_218261C with different display data
- docs/function_notes/NEEDS_REVIEW.md:1509 draw routine for object a2 (timer +176, +160 nonzero, unflagged): display commands via sub_1FF9048, rotation matrix via sub_2146D44, then sub_20E5348 [REVIEW]
- docs/function_notes/hk_33.md:101 draw routine for object a2 (timer +176, +160 nonzero, unflagged): display commands via sub_1FF9048, rotation matrix via sub_2146D44, then sub_20E5348 [REVIEW]
sub_2183070
(not in export)
- docs/function_notes/hk_33.md:102 cycles the 0..2 counter at off_2183084 (wraps at 3) and returns its pointer
sub_2183088
(not in export)
- docs/function_notes/hk_33.md:103 clears the halfword at off_2183090 and returns its pointer
sub_21830E4
(not in export)
- docs/function_notes/hk_33.md:104 wrapper; returns sub_219B4F0(off_218310C, off_2183110, off_2183114, 2, 1, dword_2183108, 0)
sub_2183118
(not in export)
- docs/function_notes.md:1345 calls sub_2186348, then returns sub_21861D4(a1, a2, 0)
- docs/function_notes/NEEDS_REVIEW.md:1510 calls sub_2186348, then returns sub_21861D4(a1, a2, 0); setup wrapper [REVIEW]
- docs/function_notes/hk_33.md:105 calls sub_2186348, then returns sub_21861D4(a1, a2, 0); setup wrapper [REVIEW]
sub_2183138
(not in export)
- docs/function_notes.md:635 per-frame update over the kart-linked list (count at +4): in mode 4 calls sub_2181B6C on each entry, then sub_21870C4, sub_2187090, sub_218873C, sub_2188884, sub_21881E0
- docs/function_notes/NEEDS_REVIEW.md:1511 per-frame update over kart-linked objects (count at +4): in mode 4 calls sub_2181B6C, then sub_21870C4/sub_2187090/sub_218873C/sub_2188884/sub_21881E0 [REVIEW]
- docs/function_notes/hk_33.md:106 per-frame update over kart-linked objects (count at +4): in mode 4 calls sub_2181B6C, then sub_21870C4/sub_2187090/sub_218873C/sub_2188884/sub_21881E0 [REVIEW]
sub_21831D0
(not in export)
- docs/function_notes.md:636 same as sub_2183138 but also sets the state word at v4+dword_2183270 to 2 per object
- docs/function_notes/NEEDS_REVIEW.md:1512 per-frame update over a list of kart-linked objects, same pattern as sub_2183138 but also sets a state word to 2 per object [REVIEW]
- docs/function_notes/hk_33.md:107 per-frame update over a list of kart-linked objects, same pattern as sub_2183138 but also sets a state word to 2 per object [REVIEW]
sub_2183274
(not in export)
- docs/function_notes/hk_33.md:108 allocates a 68-byte buffer from the heap into a1+148, initialises it with sub_2109110(…, 12), sets a1+112 from off_21832A8[20]
sub_2183275
(not in export)
- vm_model/src/mission_step.rs:174 Mission target objects 0x1F5..0x1FE (def size 0x30C, shared factory
sub_2183275, per-kind
sub_21832AC
(not in export)
- vm_model/src/mission_step.rs:175 init/update thunks): the per-object behaviour dispatcher
sub_21832AC.stateis the - vm_model/src/mission_step.rs:214 Actions
sub_21832ACruns this tick, in order (thensub_218648Calways follows). - vm_model/src/mission_target.rs:2 dispatcher
sub_21832AC, ported on a word image of the 0x30C-byte object so each setter - docs/function_notes.md:1225 per-object behaviour dispatcher: tests the racer state (+8 == 4) and the flags through sub_21871D8 and sub_20A1084
- docs/function_notes/NEEDS_REVIEW.md:1513 per-object behaviour dispatcher: tests flags via sub_21871D8, calls battle-path or flag-type handlers (sub_2183830, sub_2183860, sub_218398C, sub_2183874) [REVIEW]
- docs/function_notes/hk_33.md:109 per-object behaviour dispatcher: tests flags via sub_21871D8, calls battle-path or flag-type handlers (sub_2183830, sub_2183860, sub_218398C, sub_2183874) [REVIEW]
sub_2183430
(not in export)
- docs/function_notes.md:1460 loops over the object list (count at +4) and clears each entry's flag
- docs/function_notes/NEEDS_REVIEW.md:1514 loops over the object list (count +4): clears each record, picks sub_21834A4 or sub_2183504 via sub_2062EC4 (race-scene field), runs sub_2188D84 [REVIEW]
- docs/function_notes/hk_33.md:110 loops over the object list (count +4): clears each record, picks sub_21834A4 or sub_2183504 via sub_2062EC4 (race-scene field), runs sub_2188D84 [REVIEW]
sub_21834A4
(not in export)
- docs/function_notes.md:637 init of a kart-linked object: sub_21871F8(a1, 8, off_21834D4), sub_2188D44 with config +52/+56, then sub_2188E04 with config +60
- docs/function_notes/NEEDS_REVIEW.md:1515 init of a kart-linked object: sub_21871F8 with flag 8, sub_2188D44 with config +52/+56, sub_2188E04 with config +60 [REVIEW]
- docs/function_notes/hk_33.md:111 init of a kart-linked object: sub_21871F8 with flag 8, sub_2188D44 with config +52/+56, sub_2188E04 with config +60 [REVIEW]
sub_21834DC
(not in export)
- docs/function_notes.md:1346 init variant: sub_21871F8(a1, 8, off_2183500), then sub_2188D44 with the +160 offset 64 and the next offset
- docs/function_notes/NEEDS_REVIEW.md:1516 init variant: sub_21871F8 with flag 8, then sub_2188D44 with config +64/+68 [REVIEW]
- docs/function_notes/hk_33.md:112 init variant: sub_21871F8 with flag 8, then sub_2188D44 with config +64/+68 [REVIEW]
sub_2183504
(not in export)
- docs/function_notes.md:1347 init variant: sub_21871F8(a1, 8, off_2183534), sub_2188D44 with the +160 offset 76, then sub_2188E04 with offset 84
- docs/function_notes/NEEDS_REVIEW.md:1517 init variant: sub_21871F8 with flag 8, sub_2188D44 with config +76/+80, sub_2188E04 with config +84 [REVIEW]
- docs/function_notes/hk_33.md:113 init variant: sub_21871F8 with flag 8, sub_2188D44 with config +76/+80, sub_2188E04 with config +84 [REVIEW]
sub_218353C
(not in export)
- docs/function_notes.md:1433 init/transition using the config fields +88, +92, +96 with sub_21871F8(a1, 8, off_218358C); a2 is compared with dword_2183590
- docs/function_notes/NEEDS_REVIEW.md:1518 init/transition using config +88/+92/+96; calls sub_2188D44 + sub_2188E04 when the id matches dword_2183590, otherwise sub_2188D10 [REVIEW]
- docs/function_notes/hk_33.md:114 init/transition using config +88/+92/+96; calls sub_2188D44 + sub_2188E04 when the id matches dword_2183590, otherwise sub_2188D10 [REVIEW]
sub_2183598
(not in export)
- docs/function_notes.md:1348 init variant: sub_21871F8(a1, 8, off_21835BC), then sub_2188D44 with the +160 offset 100
- docs/function_notes/NEEDS_REVIEW.md:1519 init variant: sub_21871F8 with flag 8, then sub_2188D44 with config +100/+104 [REVIEW]
- docs/function_notes/hk_33.md:115 init variant: sub_21871F8 with flag 8, then sub_2188D44 with config +100/+104 [REVIEW]
sub_21835C0
(not in export)
- docs/function_notes.md:1469 when the object id matches dword_2183648 and sub_209B620 passes, calls sub_2187AD4 on the object
- docs/function_notes/NEEDS_REVIEW.md:1520 if the object id matches dword_2183648 and sub_209B620 (anim frame count) is 2, runs sub_2187AD4, three sub_21872C0 calls and sub_20D2774; returns 0 [REVIEW]
- docs/function_notes/hk_33.md:116 if the object id matches dword_2183648 and sub_209B620 (anim frame count) is 2, runs sub_2187AD4, three sub_21872C0 calls and sub_20D2774; returns 0 [REVIEW]
sub_2183670
(not in export)
- docs/function_notes.md:1498 id-dependent effect trigger: when the id matches dword_2183730 and sub_209B620 passes, starts the effect at dword_2183734
- docs/function_notes/NEEDS_REVIEW.md:1521 id-dependent effect trigger: dword_2183730 with anim count 2 runs sub_2187AD4, sub_21872C0 x3, sub_20D2774; dword_2183758 with anim 43/72 calls sub_21874F8 [REVIEW]
- docs/function_notes/hk_33.md:117 id-dependent effect trigger: dword_2183730 with anim count 2 runs sub_2187AD4, sub_21872C0 x3, sub_20D2774; dword_2183758 with anim 43/72 calls sub_21874F8 [REVIEW]
sub_2183760
(not in export)
- docs/function_notes.md:1484 when the id matches dword_2183800 and the animation count passes sub_209B620, runs the matching effect trigger
- docs/function_notes/NEEDS_REVIEW.md:1522 if the id matches dword_2183800 and anim count is 2 or 3, runs sub_2187AD4, sub_21872C0 x3, sub_20D2774; if sub_2061FEC() == 1 calls sub_2183B7C [REVIEW]
- docs/function_notes/hk_33.md:118 if the id matches dword_2183800 and anim count is 2 or 3, runs sub_2187AD4, sub_21872C0 x3, sub_20D2774; if sub_2061FEC() == 1 calls sub_2183B7C [REVIEW]
sub_2183828
(not in export)
- docs/function_notes/hk_33.md:119 thunk; tail-calls the function pointer at off_218382C
sub_2183830
(not in export)
- vm_model/src/mission_step.rs:181
sub_2183830: the racer's record is live, the target freezes (state 8). - vm_model/src/mission_target.rs:401
sub_2183830: freeze (state 8). - docs/function_notes.md:1065 state-8 entry: sub_21871F8(a1, 8, 0), positions the object from +160 offsets 120 via sub_2188D44, then sub_2188C70 and sub_2188CCC
- docs/function_notes/NEEDS_REVIEW.md:1523 object state-entry (state 8 via sub_21871F8), sets position from a1+160 offsets 120/124, calls sub_2188C70/sub_2188CCC; likely actor init [REVIEW]
- docs/function_notes/hk_34.md:2 object state-entry (state 8 via sub_21871F8), sets position from a1+160 offsets 120/124, calls sub_2188C70/sub_2188CCC; likely actor init [REVIEW]
sub_2183860
(not in export)
- vm_model/src/mission_step.rs:185
sub_2183860: hit reaction (sub_2183FD4,sub_2188240). - docs/function_notes/hk_34.md:3 thin wrapper: calls sub_2183FD4() then tail-calls sub_2188240(a1)
sub_2183874
(not in export)
- vm_model/src/mission_step.rs:193
sub_2183874: idle / walk choice (state 1). - vm_model/src/mission_target.rs:409
sub_2183874: idle / walk.routeis the route point (sub_2187FA0),methe object's - docs/function_notes.md:1226 per-frame state update: sub_2187FA0 gives a value, then the hit test sub_2188188 uses the +172 and +176 vector fields
- docs/function_notes/NEEDS_REVIEW.md:1524 per-frame state update; sub_2187FA0 + sub_2188188 hit test selects state-1 setup (offsets 184-200) or alt setup (156-176); tail sub_2184E4C [REVIEW]
- docs/function_notes/hk_34.md:4 per-frame state update; sub_2187FA0 + sub_2188188 hit test selects state-1 setup (offsets 184-200) or alt setup (156-176); tail sub_2184E4C [REVIEW]
sub_218398C
(not in export)
- vm_model/src/mission_step.rs:189
sub_218398C. - vm_model/src/mission_target.rs:432
sub_218398C(state 3 from state < 3): walk home.homeis the spawn position - docs/function_notes.md:1510 state-3 setup using pointer-indexed fields: when sub_2188188 passes, sub_21871F8(a1, 3, 0) and sub_2188D44 with the offsets
- docs/function_notes/NEEDS_REVIEW.md:1525 state-3 setup using pointer-indexed fields (dword_2183A94..AB0) for position/speed; hit test branch, then anim off_2183AB4 [REVIEW]
- docs/function_notes/hk_34.md:5 state-3 setup using pointer-indexed fields (dword_2183A94..AB0) for position/speed; hit test branch, then anim off_2183AB4 [REVIEW]
sub_2183AB8
(not in export)
- vm_model/src/mission_step.rs:191
sub_2183AB8. - vm_model/src/mission_target.rs:446
sub_2183AB8(state 3): turn on the player.kindis the object id (0x1F5 / 0x1F6 also - docs/function_notes.md:1491 state-3 setup for the object keyed by sub_207A974 (off_2183B64 id): sub_21871F8(a1, 3, 0) and sub_2188D44 with the +160 offsets
- docs/function_notes/NEEDS_REVIEW.md:1526 state-3 setup for object keyed by sub_207A974 index; sets pos/anim, plays effect via sub_20D2774 when a1[0] matches dword_2183B6C/B74 [REVIEW]
- docs/function_notes/hk_34.md:6 state-3 setup for object keyed by sub_207A974 index; sets pos/anim, plays effect via sub_20D2774 when a1[0] matches dword_2183B6C/B74 [REVIEW]
sub_2183B7C
(not in export)
- docs/function_notes.md:1066 state-2 setup from the +160 offsets 128..144 with the animation off_2183BE4 (sub_21871F8, sub_2188D44, sub_2188C70, sub_2188CB8)
- docs/function_notes/NEEDS_REVIEW.md:1527 state-2 setup from a1+160 offsets 128-144, anim off_2183BE4; tail sub_2184DF8 [REVIEW]
- docs/function_notes/hk_34.md:7 state-2 setup from a1+160 offsets 128-144, anim off_2183BE4; tail sub_2184DF8 [REVIEW]
sub_2183BE8
(not in export)
- vm_model/src/mission_target.rs:682
sub_2183BE8(the face-player step callback+0x20Cand the state-0 follow-up): state 2 - docs/function_notes.md:1067 state-2 setup from the offsets 232..240, then the tail call sub_2184E4C
- docs/function_notes/NEEDS_REVIEW.md:1528 state-2 setup from offsets 232-240; tail sub_2184E4C [REVIEW]
- docs/function_notes/hk_34.md:8 state-2 setup from offsets 232-240; tail sub_2184E4C [REVIEW]
sub_2183C34
(not in export)
- vm_model/src/mission_target.rs:683 walk with
def +232/+236, motion cleared, timerdef +240re-armingsub_2183C34. - vm_model/src/mission_target.rs:692
sub_2183C34: state 2 walk withdef +244/+248, turn ratedef +252/+0x100, timer - vm_model/src/mission_target.rs:1220 Frames 462 and 483 of the boss trace: state 0 -> 2 is
walk_again(timer 30 ->sub_2183C34, - docs/function_notes.md:1068 state-2 setup from the offsets 244..252 and dword_2183C98/9C, with an animation
- docs/function_notes/NEEDS_REVIEW.md:1529 state-2 setup from offsets 244-252 and dword_2183C98/9C; anim off_2183CA4; tail sub_2184DF8 [REVIEW]
- docs/function_notes/hk_34.md:9 state-2 setup from offsets 244-252 and dword_2183C98/9C; anim off_2183CA4; tail sub_2184DF8 [REVIEW]
sub_2183CA8
(not in export)
- docs/function_notes.md:1069 state-2 setup with an angle from sub_207A974 + 128 and a range check
- docs/function_notes/NEEDS_REVIEW.md:1530 state-2 setup with angle (sub_207A974 + 128) and range check against offset dword_2183D60, optional second anim; tail sub_2184DF8 [REVIEW]
- docs/function_notes/hk_34.md:10 state-2 setup with angle (sub_207A974 + 128) and range check against offset dword_2183D60, optional second anim; tail sub_2184DF8 [REVIEW]
sub_2183D74
(not in export)
- docs/function_notes.md:1426 sets the angle through sub_2188978 from sub_207A974 + 128 and tests a threshold on the stored distance
- docs/function_notes/NEEDS_REVIEW.md:1531 small update: sets angle from sub_207A974+128; if counter below limit, sets anim off_2183DC8 and calls sub_2184E4C; returns 0 [REVIEW]
- docs/function_notes/hk_34.md:11 small update: sets angle from sub_207A974+128; if counter below limit, sets anim off_2183DC8 and calls sub_2184E4C; returns 0 [REVIEW]
sub_2183DCC
(not in export)
- vm_model/src/mission_step.rs:187
sub_2183DCC: attack on a kart found in sight. - vm_model/src/mission_target.rs:461
sub_2183DCC(state 5): attack, a one-shot animation (sub_2188D10). - docs/function_notes.md:1070 state-5 setup via sub_2188D10 with the offsets dword_2183E10/E14, then the tail call sub_2188CCC
- docs/function_notes/NEEDS_REVIEW.md:1532 state-5 setup via sub_2188D10 with offsets E10/E14, tail sub_2188CCC [REVIEW]
- docs/function_notes/hk_34.md:12 state-5 setup via sub_2188D10 with offsets E10/E14, tail sub_2188CCC [REVIEW]
sub_2183E20
(not in export)
- vm_model/src/mission_target.rs:658
sub_2183E20, the attack timer callback: the jump. State 5, jump animation, motion kind 5 - docs/function_notes.md:1071 state-5 setup: builds a local vector from the offset dword_2183E84 and sets the state
- docs/function_notes/NEEDS_REVIEW.md:1533 state-5 setup; builds local vector from offset dword_2183E84, calls sub_2188930 and tail sub_2188D98 [REVIEW]
- docs/function_notes/hk_34.md:13 state-5 setup; builds local vector from offset dword_2183E84, calls sub_2188930 and tail sub_2188D98 [REVIEW]
sub_2183E9C
(not in export)
- docs/function_notes/hk_34.md:14 trivial: sub_20D275C(a1, dword_2183EB0) (effect/sound play), returns 0
sub_2183EB4
(not in export)
- docs/function_notes.md:1072 state-5 setup via sub_2188D10 with the offsets dword_2183EE4..., then sub_2188CCC
- docs/function_notes/NEEDS_REVIEW.md:1534 state-5 setup via sub_2188D10 with offsets, tail sub_2188CCC [REVIEW]
- docs/function_notes/hk_34.md:15 state-5 setup via sub_2188D10 with offsets, tail sub_2188CCC [REVIEW]
sub_2183EEC
(not in export)
- vm_model/src/mission_step.rs:183
sub_2183EEC: the target goes down with effects (state 8,sub_21874A4bursts). - docs/function_notes.md:1503 state-8 setup: spawns two effects through sub_21874A4 with the object's offsets
- docs/function_notes/NEEDS_REVIEW.md:1535 state-8 setup; spawns two sub_21874A4 effects for matching ids, computes vector via sub_20D4EF4 and sub_210B734, sets flag bits in a1[1] [REVIEW]
- docs/function_notes/hk_34.md:16 state-8 setup; spawns two sub_21874A4 effects for matching ids, computes vector via sub_20D4EF4 and sub_210B734, sets flag bits in a1[1] [REVIEW]
sub_2183FD4
(not in export)
- vm_model/src/mission_step.rs:185
sub_2183860: hit reaction (sub_2183FD4,sub_2188240). - docs/function_notes.md:1523 322-byte update: fixed-point (>> 12) position and velocity updates for the object at a1
- docs/function_notes/NEEDS_REVIEW.md:1536 322-byte update; fixed-point (>>12) position deltas via sub_2133048, state 8 setup, two sub_21874A4 spawns, sub_2187424, sub_20D2774 effect, flag bits [REVIEW]
- docs/function_notes/hk_34.md:17 322-byte update; fixed-point (>>12) position deltas via sub_2133048, state 8 setup, two sub_21874A4 spawns, sub_2187424, sub_20D2774 effect, flag bits [REVIEW]
sub_2184140
(not in export)
- docs/function_notes.md:1073 state-8 setup: sub_21871F8(a1, 8, 0), sub_2188D44 with the +160 offsets dword_21841A8 / dword_21841AC, then sub_2188C28 with the offset dword_21841B0
- docs/function_notes/NEEDS_REVIEW.md:1537 state-8 setup from offsets dword_21841A8..B8, anim off_21841BC; tail sub_2188E04 [REVIEW]
- docs/function_notes/hk_34.md:18 state-8 setup from offsets dword_21841A8..B8, anim off_21841BC; tail sub_2188E04 [REVIEW]
sub_21841C0
(not in export)
- docs/function_notes.md:1463 state-8 setup: calls sub_2188930 and sub_2188D98 with the object's config offsets, then the tail handler
- docs/function_notes/NEEDS_REVIEW.md:1538 state-8 setup with sub_2188930 and sub_2188D98 tail; sets flag bits in a1+2 from off_2184250 [REVIEW]
- docs/function_notes/hk_34.md:19 state-8 setup with sub_2188930 and sub_2188D98 tail; sets flag bits in a1+2 from off_2184250 [REVIEW]
sub_2184254
(not in export)
- docs/function_notes.md:1349 when a1 +8 >= -sub_20D3D48(0): sub_2187424(a1, 4), sub_20D2774(a1, dword_2184288) and stores off_218428C at dword_2184290; returns 0
- docs/function_notes/NEEDS_REVIEW.md:1539 if a1+8 >= -sub_20D3D48(0): sub_2187424(a1,4), effect sub_20D2774, stores off_218428C into a1 slot; returns 0 [REVIEW]
- docs/function_notes/hk_34.md:20 if a1+8 >= -sub_20D3D48(0): sub_2187424(a1,4), effect sub_20D2774, stores off_218428C into a1 slot; returns 0 [REVIEW]
sub_2184294
(not in export)
- docs/function_notes.md:1074 if the slot at a1 + dword_21842BC is negative, sets the animation off_21842C0, the slot dword_21842C4 = 7 and dword_21842C8 = 0
- docs/function_notes/NEEDS_REVIEW.md:1540 if a1 slot dword_21842BC is negative: sets anim off_21842C0, writes 7 and 0 to two slots; returns 0 [REVIEW]
- docs/function_notes/hk_34.md:21 if a1 slot dword_21842BC is negative: sets anim off_21842C0, writes 7 and 0 to two slots; returns 0 [REVIEW]
sub_21842CC
(not in export)
- docs/function_notes.md:1075 state-7 setup: sub_21871F8(a1, 7, 0), then sub_2188D10 with the offsets 350 and 354 from +160
- docs/function_notes/NEEDS_REVIEW.md:1541 state-7 setup: sub_2188D10 with offsets 350/354, two sub_21874F8 effect spawns, sub_20D2774 sound, clears flag 0x20 in a1+2 [REVIEW]
- docs/function_notes/hk_34.md:22 state-7 setup: sub_2188D10 with offsets 350/354, two sub_21874F8 effect spawns, sub_20D2774 sound, clears flag 0x20 in a1+2 [REVIEW]
sub_2184370
(not in export)
- docs/function_notes.md:1076 sets the animation off_2184388 and writes state 11 into the slot at dword_218438C
- docs/function_notes/NEEDS_REVIEW.md:1542 sets anim off_2184388 and writes state 11 into slot dword_218438C; returns that slot offset [REVIEW]
- docs/function_notes/hk_34.md:23 sets anim off_2184388 and writes state 11 into slot dword_218438C; returns that slot offset [REVIEW]
sub_2184390
(not in export)
- vm_model/src/mission_target.rs:757
sub_2184390, the contact callback armed bywalk_start(+0x2D4): likesub_2184854but - vm_model/src/mission_target.rs:1290 touched by the kart and
sub_2184390pushes it back bydef +0x19Calong its heading. - docs/function_notes.md:1602 1202-byte per-frame update: when the template flag 0x20 is set runs the sub-state transitions with the position offsets
- docs/function_notes/NEEDS_REVIEW.md:1543 1202-byte per-frame update; if template flag 0x20 and timer>0 and state 8 active: fixed-point velocity via sin/cos table off_2184788, state-7 setup, vector helpers sub_21484D0/sub_2147FD8, type-based effect spawns (sub_2109060, sub_20D2774, sub_208B7BC, sub_21874F8); ends state 13 [REVIEW]
- docs/function_notes/hk_34.md:24 1202-byte per-frame update; if template flag 0x20 and timer>0 and state 8 active: fixed-point velocity via sin/cos table off_2184788, state-7 setup, vector helpers sub_21484D0/sub_2147FD8, type-based effect spawns (sub_2109060, sub_20D2774, sub_208B7BC, sub_21874F8); ends state 13 [REVIEW]
sub_2184391
(not in export)
- vm_model/src/mission_target.rs:693
def +0x104, contact callbacksub_2184391.idle_aipickssub_2184DF8's frame events
sub_2184854
(not in export)
- vm_model/src/mission_target.rs:331 The kart touching a mission target, as
sub_2184854reads it. - vm_model/src/mission_target.rs:710
sub_2184854(object, kart): the kart-contact callback (+0x2D4).kartis the touching - vm_model/src/mission_target.rs:757
sub_2184390, the contact callback armed bywalk_start(+0x2D4): likesub_2184854but - game/src/mission.rs:234
sub_2184854: the kart bump (the kart's velocity is not read here: zero) - docs/function_notes.md:1227 956-byte variant of sub_2184390 using the vector at a2+164/172
- docs/function_notes/NEEDS_REVIEW.md:1544 956-byte variant of sub_2184390 using a2+164/172 vectors and dword_2184C10..C9C offsets; same structure, ends state 13 [REVIEW]
- docs/function_notes/hk_34.md:25 956-byte variant of sub_2184390 using a2+164/172 vectors and dword_2184C10..C9C offsets; same structure, ends state 13 [REVIEW]
sub_2184855
(not in export)
- vm_model/src/mission_target.rs:760 the push). Re-arms
+0x2D4 = sub_2184855,+0x2D8 = 13.
sub_2184CA8
(not in export)
- docs/function_notes.md:1350 wrapper: sub_21881F8, sub_2188C70(a1), then tail-calls sub_2184CD4(a1)
- docs/function_notes/NEEDS_REVIEW.md:1545 wrapper: sub_21881F8, sub_2188C70, tail-calls sub_2184CD4 [REVIEW]
- docs/function_notes/hk_34.md:26 wrapper: sub_21881F8, sub_2188C70, tail-calls sub_2184CD4 [REVIEW]
sub_2184CD4
(not in export)
- vm_model/src/mission_target.rs:668
sub_2184CD4, the landing callback: out of jumps (+180as u16 is 0) the target returns to - docs/function_notes.md:1077 when sub_21881EC() is false sets state 0 (sub_21871F8); otherwise a state-5 setup with its offsets
- docs/function_notes/NEEDS_REVIEW.md:1546 if sub_21881EC() is false sets state 0; else state-5 setup (offsets 0x..D40-D48), tail sub_2188D98 with off_2184D4C [REVIEW]
- docs/function_notes/hk_34.md:27 if sub_21881EC() is false sets state 0; else state-5 setup (offsets 0x..D40-D48), tail sub_2188D98 with off_2184D4C [REVIEW]
sub_2184D50
(not in export)
- docs/function_notes.md:1351 wrapper: sub_21881F8, sub_2188C70(a1), then tail-calls sub_2184D7C(a1)
- docs/function_notes/NEEDS_REVIEW.md:1547 wrapper: sub_21881F8, sub_2188C70, tail-calls sub_2184D7C [REVIEW]
- docs/function_notes/hk_34.md:28 wrapper: sub_21881F8, sub_2188C70, tail-calls sub_2184D7C [REVIEW]
sub_2184D7C
(not in export)
- docs/function_notes.md:1078 same as sub_2184CD4 with the offset slots dword_2184DE8..DF4
- docs/function_notes/NEEDS_REVIEW.md:1548 same as sub_2184CD4 with different offset slots (DE8-DF4) and anim off_2184DF4 [REVIEW]
- docs/function_notes/hk_34.md:29 same as sub_2184CD4 with different offset slots (DE8-DF4) and anim off_2184DF4 [REVIEW]
sub_2184DF8
(not in export)
- vm_model/src/mission_target.rs:693
def +0x104, contact callbacksub_2184391.idle_aipickssub_2184DF8's frame events - docs/function_notes.md:1352 switches on the word a1[0] against dword_2184E34 and dword_2184E40 and calls sub_2188E28 with the matching table
- docs/function_notes/NEEDS_REVIEW.md:1549 switch on a1[0] against dword_2184E34/E40; calls sub_2188E28 with anim tables, otherwise returns input unchanged [REVIEW]
- docs/function_notes/hk_34.md:30 switch on a1[0] against dword_2184E34/E40; calls sub_2188E28 with anim tables, otherwise returns input unchanged [REVIEW]
sub_2184E4C
(not in export)
- vm_model/src/mission_target.rs:393
sub_2184E4C(->sub_2188E28(o, 25, ..., 54, ...)): the idle AI parameters. - docs/function_notes/hk_34.md:31 tail helper: sub_2188E28(a1, 25, off_2184E68, 54, off_2184E64)
sub_2184E6C
(not in export)
- docs/function_notes.md:1353 plays effect dword_2184E98 via sub_20D2774, runs sub_2187AD4, then sub_21874F8 with the sound parameters
- docs/function_notes/NEEDS_REVIEW.md:1550 plays effect sub_20D2774(dword_2184E98), sub_2187AD4, spawns via sub_21874F8 with fixed ids [REVIEW]
- docs/function_notes/hk_34.md:32 plays effect sub_20D2774(dword_2184E98), sub_2187AD4, spawns via sub_21874F8 with fixed ids [REVIEW]
sub_2184EA8
(not in export)
- docs/function_notes.md:1354 same pattern as sub_2184E6C with effect dword_2184ED4 and the sub_21874F8 arguments dword_2184EDC/E0/E4
- docs/function_notes/NEEDS_REVIEW.md:1551 same pattern as sub_2184E6C (effect play, sub_2187AD4, sub_21874F8) with other ids [REVIEW]
- docs/function_notes/hk_34.md:33 same pattern as sub_2184E6C (effect play, sub_2187AD4, sub_21874F8) with other ids [REVIEW]
sub_2184EE4
(not in export)
- vm_model/src/mission_target.rs:694 by object id (0x1F5: frames 25 and 54, then effect callbacks
sub_2184F20/sub_2184EE4). - docs/function_notes.md:1390 effect play like sub_2184E6C with the effect dword_2184F10 and the sub_21874F8 arguments dword_2184F18/1C
- docs/function_notes/NEEDS_REVIEW.md:1552 same pattern as sub_2184E6C (effect play, sub_2187AD4, sub_21874F8) with other ids [REVIEW]
- docs/function_notes/hk_34.md:34 same pattern as sub_2184E6C (effect play, sub_2187AD4, sub_21874F8) with other ids [REVIEW]
sub_2184F20
(not in export)
- vm_model/src/mission_target.rs:694 by object id (0x1F5: frames 25 and 54, then effect callbacks
sub_2184F20/sub_2184EE4). - docs/function_notes.md:1391 effect play like sub_2184E6C with the effect dword_2184F4C and the sub_21874F8 arguments dword_2184F54/58
- docs/function_notes/NEEDS_REVIEW.md:1553 same pattern as sub_2184E6C (effect play, sub_2187AD4, sub_21874F8) with other ids [REVIEW]
- docs/function_notes/hk_34.md:35 same pattern as sub_2184E6C (effect play, sub_2187AD4, sub_21874F8) with other ids [REVIEW]
sub_2184F5C
(not in export)
- vm_model/src/mission_target.rs:1221 idle frame events 25 / 54 with callbacks
sub_2184F6C/sub_2184F5C). - docs/function_notes.md:1360 thunk: tail-calls the function pointer off_2184F68 with (a1, dword_2184F64)
- docs/function_notes/NEEDS_REVIEW.md:1554 thunk: tail-calls through function pointer off_2184F68 with dword_2184F64 [REVIEW]
- docs/function_notes/hk_34.md:36 thunk: tail-calls through function pointer off_2184F68 with dword_2184F64 [REVIEW]
sub_2184F6C
(not in export)
- vm_model/src/mission_target.rs:1221 idle frame events 25 / 54 with callbacks
sub_2184F6C/sub_2184F5C). - docs/function_notes.md:1361 thunk: tail-calls the function pointer off_2184F78 with (a1, dword_2184F74)
- docs/function_notes/NEEDS_REVIEW.md:1555 thunk: tail-calls through function pointer off_2184F78 with dword_2184F74 [REVIEW]
- docs/function_notes/hk_34.md:37 thunk: tail-calls through function pointer off_2184F78 with dword_2184F74 [REVIEW]
sub_2184F7C
(not in export)
- docs/function_notes/hk_34.md:38 setter: stores four args shifted <<12 (20.12 fixed point) into result[7..10]
sub_2184F90
(not in export)
- docs/function_notes/hk_34.md:39 getter: returns a1->+24 field
sub_2184F94
(not in export)
- docs/function_notes.md:1359 setter: stores a2 at +24 of a1 and returns a1
- docs/function_notes/NEEDS_REVIEW.md:1556 setter: stores a2 into a1->+24 field; area guess (menu manager) looks doubtful, this is a plain object accessor [REVIEW]
- docs/function_notes/hk_34.md:40 setter: stores a2 into a1->+24 field; area guess (menu manager) looks doubtful, this is a plain object accessor [REVIEW]
sub_2184F98
(not in export)
- docs/function_notes.md:1079 returns (a1 + 8 >> 12) + the value at *(a1+128)+20
- docs/function_notes/NEEDS_REVIEW.md:1557 returns (a1+8 >> 12) + ((a1+128)+20); integer position-style read [REVIEW]
- docs/function_notes/hk_34.md:41 returns (a1+8 >> 12) + ((a1+128)+20); integer position-style read [REVIEW]
sub_2184FA8
(not in export)
- docs/function_notes.md:1364 returns (a1 + 4 >> 12) + the word at *(a1+128)+16: the Y position in whole units
- docs/function_notes/NEEDS_REVIEW.md:1558 returns (a1+4 >> 12) + ((a1+128)+16); Y-position analog of sub_2184F98 [REVIEW]
- docs/function_notes/hk_34.md:42 returns (a1+4 >> 12) + ((a1+128)+16); Y-position analog of sub_2184F98 [REVIEW]
sub_2184FB8
(not in export)
- docs/function_notes.md:1080 setter: result[1] = (a2 - base[16]) << 12 and result[2] = (a3 - base[20]) << 12, where base = result[32]
- docs/function_notes/NEEDS_REVIEW.md:1559 setter: result[1]/[2] = (a2 - base[16]) << 12 and (a3 - base[20]) << 12; offset-relative position init [REVIEW]
- docs/function_notes/hk_34.md:43 setter: result[1]/[2] = (a2 - base[16]) << 12 and (a3 - base[20]) << 12; offset-relative position init [REVIEW]
sub_2184FD8
(not in export)
- docs/function_notes.md:1373 when a1+12 is nonzero returns sub_20220F0(a1+44); otherwise the alternative value
- docs/function_notes/NEEDS_REVIEW.md:1560 if a1+12 nonzero returns sub_20220F0(a1+44), else -5 [REVIEW]
- docs/function_notes/hk_34.md:44 if a1+12 nonzero returns sub_20220F0(a1+44), else -5 [REVIEW]
sub_2184FF8
(not in export)
- docs/function_notes.md:1476 command dispatcher on a2 (-1..-5 set the matching flag bits in a1[11..]) using the table at a1+11
- docs/function_notes/NEEDS_REVIEW.md:1561 command dispatcher on a2 (-1..-5 flag sets on a1[13]/a1[3]; >=0 calls sub_2022898 on sub-object a1+11); sub-object control [REVIEW]
- docs/function_notes/hk_34.md:45 command dispatcher on a2 (-1..-5 flag sets on a1[13]/a1[3]; >=0 calls sub_2022898 on sub-object a1+11); sub-object control [REVIEW]
sub_2185084
(not in export)
- docs/function_notes/hk_34.md:46 sets a1[33] (callback slot) = a2 and clears velocity a1[4], a1[5]
sub_2185094
(not in export)
- docs/function_notes.md:1488 hit-test lookup: scans the 136-byte entry table after converting a3 with sub_2132440 and sub_21329F8
- docs/function_notes/NEEDS_REVIEW.md:1562 hit-test lookup: scans entry table (136-byte stride, count *a1) from index a2 for first entry whose fixed-point x/y range (+7..+10) contains point; returns index or -1 [REVIEW]
- docs/function_notes/hk_34.md:47 hit-test lookup: scans entry table (136-byte stride, count *a1) from index a2 for first entry whose fixed-point x/y range (+7..+10) contains point; returns index or -1 [REVIEW]
sub_2185140
(not in export)
- docs/function_notes/hk_34.md:48 returns address of entry a2 in table at a1+4 (stride 136)
sub_218514C
(not in export)
- docs/function_notes.md:1576 per-frame sprite/billboard pass over the 136-byte entries (384 bytes), calling each entry's draw callback
- docs/function_notes/NEEDS_REVIEW.md:1563 per-frame sprite/billboard pass over 136-byte entries: runs optional callback (+132), if on-screen (x -64..dword_21852CC, y -48..240) submits via sub_20224E0 (sprite attrs written for a non-special type); caps at 128 items [REVIEW]
- docs/function_notes/hk_34.md:49 per-frame sprite/billboard pass over 136-byte entries: runs optional callback (+132), if on-screen (x -64..dword_21852CC, y -48..240) submits via sub_20224E0 (sprite attrs written for a non-special type); caps at 128 items [REVIEW]
sub_21852D8
(not in export)
- docs/function_notes.md:1228 constructor: allocates a 24-byte header and the entry array with sub_2036BEC
- docs/function_notes/NEEDS_REVIEW.md:1564 constructor: allocates header (24 bytes) and entry array (136 * count) from heap via sub_2036BEC; copies per-entry fixed-point position/extent and sprite params from source table (sub_2021DB0, sub_2022904) [REVIEW]
- docs/function_notes/hk_34.md:50 constructor: allocates header (24 bytes) and entry array (136 * count) from heap via sub_2036BEC; copies per-entry fixed-point position/extent and sprite params from source table (sub_2021DB0, sub_2022904) [REVIEW]
sub_2185418
(not in export)
- docs/function_notes.md:1387 menu-result dispatch on sub_2117418(): a switch whose case 1 selects the next screen
- docs/function_notes/NEEDS_REVIEW.md:1565 menu-result dispatch on sub_2117418(): 1 -> sub_20CCC74(29,31), 2 -> sub_20CCC74(6,31), 3 -> sub_20CCC74(0,31) + sub_2185470(0) + sub_218545C(1) [REVIEW]
- docs/function_notes/hk_34.md:51 menu-result dispatch on sub_2117418(): 1 -> sub_20CCC74(29,31), 2 -> sub_20CCC74(6,31), 3 -> sub_20CCC74(0,31) + sub_2185470(0) + sub_218545C(1) [REVIEW]
sub_218545C
(not in export)
- docs/function_notes/hk_34.md:52 ARM setter: writes result into *(off_218546C)+4 (state field)
sub_2185470
(not in export)
- docs/function_notes/hk_34.md:53 ARM setter: writes result into *(off_2185480)+8 (state field)
sub_2185484
(not in export)
- docs/function_notes.md:1081 if sub_20CCCC0() is set: sets the display/BG mode via sub_21854D4(25), sub_2148950(1, 0, 0) and sub_21854B8(22)
- docs/function_notes/NEEDS_REVIEW.md:1566 if sub_20CCCC0(): sets display/BG mode via sub_21854D4(25), sub_2148950(1,0,0), sub_21854B8(22), sub_2148934(0); tail sub_21173E4 [REVIEW]
- docs/function_notes/hk_34.md:54 if sub_20CCCC0(): sets display/BG mode via sub_21854D4(25), sub_2148950(1,0,0), sub_21854B8(22), sub_2148934(0); tail sub_21173E4 [REVIEW]
sub_21854B8
(not in export)
- docs/function_notes/hk_34.md:55 ARM: sets bits 8-12 of the shadow register at *off_21854D0 to a1 (BG select field)
sub_21854D4
(not in export)
- docs/function_notes/hk_34.md:56 ARM: sets bits 8-12 of REG_DISPCNT (0x04000000) to a1 (display mode field)
sub_21854EC
(not in export)
- docs/function_notes.md:1377 menu-result dispatch: result = sub_2028130(); when 1 calls sub_20CCC74(7, 31)
- docs/function_notes/NEEDS_REVIEW.md:1567 menu-result dispatch on sub_2028130(): 1 -> sub_20CCC74(7,31), 2 -> sub_20CCC74(5,31) [REVIEW]
- docs/function_notes/hk_34.md:57 menu-result dispatch on sub_2028130(): 1 -> sub_20CCC74(7,31), 2 -> sub_20CCC74(5,31) [REVIEW]
sub_2185518
export/plan0/ov9_000/sub_2185518_02185518.c
- docs/function_notes.md:1084 overlay-9 loader init: when sub_20CCCC0() is set calls sub_21854D4(9) and sub_2148950(1, 0, 1), then loads five files via sub_204799C
- docs/function_notes/NEEDS_REVIEW.md:1616 ov9_000 loader init: loads 5 files via sub_204799C into the state struct (+52..+72), sets up three resource objects and clears their buffers (sub_214BF04/sub_214C090) [REVIEW]
- docs/function_notes/hk_34.md:119 ov9_000 loader init: loads 5 files via sub_204799C into the state struct (+52..+72), sets up three resource objects and clears their buffers (sub_214BF04/sub_214C090) [REVIEW]
sub_218554C
(not in export)
- docs/function_notes.md:1378 menu-result dispatch: result = sub_2026120(); when 1 calls sub_20CCC74(6, 31)
- docs/function_notes/NEEDS_REVIEW.md:1569 menu-result dispatch on sub_2026120(): 1 -> sub_20CCC74(6,31), 2 -> sub_20CCC74(4,31) [REVIEW]
- docs/function_notes/hk_34.md:59 menu-result dispatch on sub_2026120(): 1 -> sub_20CCC74(6,31), 2 -> sub_20CCC74(4,31) [REVIEW]
sub_2185578
(not in export)
- docs/function_notes.md:1393 when sub_20CCCC0() is set calls sub_21854D4(11) and sub_2148950(1, 0, 1)
- docs/function_notes/NEEDS_REVIEW.md:1570 if sub_20CCCC0(): sub_21854D4(11), sub_2148950(1,0,1), sub_21854B8(8), sub_2148934(0); tail sub_2026058 [REVIEW]
- docs/function_notes/hk_34.md:60 if sub_20CCCC0(): sub_21854D4(11), sub_2148950(1,0,1), sub_21854B8(8), sub_2148934(0); tail sub_2026058 [REVIEW]
sub_21855AC
(not in export)
- docs/function_notes.md:1379 menu-result dispatch: result = sub_21A11A4(); when 1 calls sub_20CCC74(5, 31)
- docs/function_notes/NEEDS_REVIEW.md:1571 menu-result dispatch on sub_21A11A4(): 1 -> sub_20CCC74(5,31), 2 -> sub_20CCC74(0,31) [REVIEW]
- docs/function_notes/hk_34.md:61 menu-result dispatch on sub_21A11A4(): 1 -> sub_20CCC74(5,31), 2 -> sub_20CCC74(0,31) [REVIEW]
sub_21855D8
(not in export)
- docs/function_notes.md:1394 when sub_20CCCC0() is set calls sub_21854D4(27), sub_2148950(1, 0, 0), sub_21854B8(22), then sub_2148934(0); returns sub_21A1184 of that value
- docs/function_notes/NEEDS_REVIEW.md:1572 if sub_20CCCC0(): sub_21854D4(27), sub_2148950(1,0,0), sub_21854B8(22), sub_2148934(0); tail sub_21A1184 [REVIEW]
- docs/function_notes/hk_34.md:62 if sub_20CCCC0(): sub_21854D4(27), sub_2148950(1,0,0), sub_21854B8(22), sub_2148934(0); tail sub_21A1184 [REVIEW]
sub_218560C
(not in export)
- docs/function_notes.md:1380 menu-result dispatch: result = sub_211E51C(); when 1 calls sub_20CCC74(25, 31)
- docs/function_notes/NEEDS_REVIEW.md:1573 menu-result dispatch on sub_211E51C(): 1 -> sub_20CCC74(25,31), 2 -> sub_20CCC74(23,31) [REVIEW]
- docs/function_notes/hk_34.md:63 menu-result dispatch on sub_211E51C(): 1 -> sub_20CCC74(25,31), 2 -> sub_20CCC74(23,31) [REVIEW]
sub_2185638
(not in export)
- docs/function_notes.md:1395 when sub_20CCCC0() is set calls sub_2185688(25) and sub_2148950(1, 0, 0)
- docs/function_notes/NEEDS_REVIEW.md:1574 if sub_20CCCC0(): sub_2185688(25), sub_2148950(1,0,0), sub_218566C(30), sub_2148934(0); tail sub_211E4E8 [REVIEW]
- docs/function_notes/hk_34.md:64 if sub_20CCCC0(): sub_2185688(25), sub_2148950(1,0,0), sub_218566C(30), sub_2148934(0); tail sub_211E4E8 [REVIEW]
sub_218566C
(not in export)
- docs/function_notes/hk_34.md:65 ARM: sets bits 8-12 of the shadow register at *off_2185684 to a1 (BG/display select field)
sub_2185688
(not in export)
- docs/function_notes/hk_34.md:66 ARM: sets bits 8-12 of REG_DISPCNT (0x04000000) to a1 (display mode field)
sub_21856A0
(not in export)
- docs/function_notes.md:1381 menu-result dispatch: result = sub_219B554(); when 1 calls sub_20CCC74(29, 31)
- docs/function_notes/NEEDS_REVIEW.md:1575 menu-result dispatch on sub_219B554(): 1 -> sub_20CCC74(29,31), 2 -> sub_20CCC74(25,31) [REVIEW]
- docs/function_notes/hk_34.md:67 menu-result dispatch on sub_219B554(): 1 -> sub_20CCC74(29,31), 2 -> sub_20CCC74(25,31) [REVIEW]
sub_21856CC
(not in export)
- docs/function_notes.md:1438 when sub_20CCCC0() is set calls sub_2185688(25) and sub_2148950 with the flag
- docs/function_notes/NEEDS_REVIEW.md:1576 if sub_20CCCC0(): sub_2185688(25), sub_2148950, sub_21857A0(0,0), sub_2185784(0), sub_2185758(0), sub_2185720(0,0,12,0,0), sub_218566C(31), sub_2148934; tail sub_219B520 [REVIEW]
- docs/function_notes/hk_34.md:68 if sub_20CCCC0(): sub_2185688(25), sub_2148950, sub_21857A0(0,0), sub_2185784(0), sub_2185758(0), sub_2185720(0,0,12,0,0), sub_218566C(31), sub_2148934; tail sub_219B520 [REVIEW]
sub_2185720
(not in export)
- docs/function_notes.md:1085 builds a BG control register value from five bit fields (mask 0x43) and stores it at off_2185754
- docs/function_notes/NEEDS_REVIEW.md:1577 ARM: builds a BG control register value from five bit-fields (a1<<14, a2<<7, a3<<8, a4*4, a5<<13) keeping mask 0x43 [REVIEW]
- docs/function_notes/hk_34.md:69 ARM: builds a BG control register value from five bit-fields (a1<<14, a2<<7, a3<<8, a4*4, a5<<13) keeping mask 0x43 [REVIEW]
sub_2185758
(not in export)
- docs/function_notes/hk_34.md:70 ARM: sets (a1 nonzero) or clears bit 0x40 of the 16-bit register at *off_2185780
sub_2185784
export/plan0/ov9_000/sub_2185784_02185784.c
- docs/function_notes/hk_34.md:120 copies a 4-word constant block from a table to the stack and passes it to sub_21806B8 (thin wrapper)
sub_21857A0
(not in export)
- docs/function_notes.md:1086 masked write of a1 (with mask dword_21857C0) OR'd with dword_21857C4 & (a2 << 16) into off_21857C8; returns the word
- docs/function_notes/NEEDS_REVIEW.md:1579 ARM: masked write of a1 (with mask dword_21857C0) OR'd with (a2<<16) (mask dword_21857C4) into *off_21857C8; window/blend register-style setter [REVIEW]
- docs/function_notes/hk_34.md:72 ARM: masked write of a1 (with mask dword_21857C0) OR'd with (a2<<16) (mask dword_21857C4) into *off_21857C8; window/blend register-style setter [REVIEW]
sub_21857CC
(not in export)
- docs/function_notes.md:1386 menu-result dispatch: result = sub_2118E64(); when 1 and sub_211E130() passes, handles the selection
- docs/function_notes/NEEDS_REVIEW.md:1580 menu-result dispatch on sub_2118E64(): 1 -> sub_20CCC74(29,31) if sub_211E130() else sub_20CCC74(26,31); 2 -> sub_20CCC74(24,31) [REVIEW]
- docs/function_notes/hk_34.md:73 menu-result dispatch on sub_2118E64(): 1 -> sub_20CCC74(29,31) if sub_211E130() else sub_20CCC74(26,31); 2 -> sub_20CCC74(24,31) [REVIEW]
sub_2185808
export/plan0/ov9_000/sub_2185808_02185808.c
- docs/function_notes.md:1396 when sub_2036D08() succeeds sets the flag +4 = 1 on *off_21858B4, calls sub_2037288(30) and sets the control words at off_21858B8, off_21858C0 and off_21858CC
- docs/function_notes/NEEDS_REVIEW.md:1617 if sub_2036D08 succeeds, sets state flag +4=1, calls sub_2037288(30) and masks/sets several display/IO registers, then calls sub_2148950(1,0,1) [REVIEW]
- docs/function_notes/hk_34.md:121 if sub_2036D08 succeeds, sets state flag +4=1, calls sub_2037288(30) and masks/sets several display/IO registers, then calls sub_2148950(1,0,1) [REVIEW]
sub_218583C
(not in export)
- docs/function_notes.md:1388 menu-result dispatch on sub_2117418(): a switch whose case 1 selects the next screen (same as sub_2185418 for another menu)
- docs/function_notes/NEEDS_REVIEW.md:1582 menu-result dispatch on sub_2117418(): 1 -> sub_20CCC74(24,31), 2 -> sub_20CCC74(22,31), 3 -> sub_20CCC74(0,31) + sub_2185894(0) + sub_2185880(1) [REVIEW]
- docs/function_notes/hk_34.md:75 menu-result dispatch on sub_2117418(): 1 -> sub_20CCC74(24,31), 2 -> sub_20CCC74(22,31), 3 -> sub_20CCC74(0,31) + sub_2185894(0) + sub_2185880(1) [REVIEW]
sub_2185880
(not in export)
- docs/function_notes/hk_34.md:76 ARM setter: writes a1 to *(off_2185890)+4
sub_2185894
(not in export)
- docs/function_notes/hk_34.md:77 ARM setter: writes a1 to *(off_21858A4)+8
sub_21858A8
(not in export)
- docs/function_notes.md:1397 same screen-mode guard as sub_2185638 (sub_2185688(25), sub_2148950(1, 0, 0))
- docs/function_notes/NEEDS_REVIEW.md:1583 if sub_20CCCC0(): sub_2185688(25), sub_2148950(1,0,0), sub_218566C(22), sub_2148934(0); tail sub_21173E4 [REVIEW]
- docs/function_notes/hk_34.md:78 if sub_20CCCC0(): sub_2185688(25), sub_2148950(1,0,0), sub_218566C(22), sub_2148934(0); tail sub_21173E4 [REVIEW]
sub_21858DC
(not in export)
- docs/function_notes.md:1382 menu-result dispatch: result = sub_2028130(); when 1 calls sub_20CCC74(23, 31)
- docs/function_notes/NEEDS_REVIEW.md:1584 menu-result dispatch on sub_2028130(): 1 -> sub_20CCC74(23,31), 2 -> sub_20CCC74(21,31) [REVIEW]
- docs/function_notes/hk_34.md:79 menu-result dispatch on sub_2028130(): 1 -> sub_20CCC74(23,31), 2 -> sub_20CCC74(21,31) [REVIEW]
sub_2185908
(not in export)
- docs/function_notes.md:1392 when sub_20CCCC0() is set calls sub_2185688(11) and sub_2148950(1, 0, 1)
- docs/function_notes/NEEDS_REVIEW.md:1585 if sub_20CCCC0(): sub_2185688(11), sub_2148950(1,0,1); always sub_218566C(18); tail sub_2027E78 [REVIEW]
- docs/function_notes/hk_34.md:80 if sub_20CCCC0(): sub_2185688(11), sub_2148950(1,0,1); always sub_218566C(18); tail sub_2027E78 [REVIEW]
sub_2185934
(not in export)
- docs/function_notes.md:1383 menu-result dispatch: result = sub_2026120(); when 1 calls sub_20CCC74(22, 31)
- docs/function_notes/NEEDS_REVIEW.md:1586 menu-result dispatch on sub_2026120(): 1 -> sub_20CCC74(22,31), 2 -> sub_20CCC74(20,31) [REVIEW]
- docs/function_notes/hk_34.md:81 menu-result dispatch on sub_2026120(): 1 -> sub_20CCC74(22,31), 2 -> sub_20CCC74(20,31) [REVIEW]
sub_2185960
(not in export)
- docs/function_notes.md:1401 when sub_20CCCC0() is set calls sub_2185688(11) and sub_2148950(1, 0, 1)
- docs/function_notes/NEEDS_REVIEW.md:1587 if sub_20CCCC0(): sub_2185688(11), sub_2148950(1,0,1), sub_218566C(8), sub_2148934(0); always sub_218566C(18); tail sub_2026058 [REVIEW]
- docs/function_notes/hk_34.md:82 if sub_20CCCC0(): sub_2185688(11), sub_2148950(1,0,1), sub_218566C(8), sub_2148934(0); always sub_218566C(18); tail sub_2026058 [REVIEW]
sub_2185998
(not in export)
- docs/function_notes.md:1446 menu-result dispatch on sub_2197B34() (values 1..4): result 1 calls the first handler, the others the matching screens
- docs/function_notes/NEEDS_REVIEW.md:1588 menu-result dispatch on sub_2197B34() (1..4): 1 -> sub_20CCC74(21,31); 2/3 -> sub_20CCC74(28,31) + sub_21859F4(0/1); 4 -> sub_20CCC74(0,31) [REVIEW]
- docs/function_notes/hk_34.md:83 menu-result dispatch on sub_2197B34() (1..4): 1 -> sub_20CCC74(21,31); 2/3 -> sub_20CCC74(28,31) + sub_21859F4(0/1); 4 -> sub_20CCC74(0,31) [REVIEW]
sub_21859F4
(not in export)
- docs/function_notes/hk_34.md:84 ARM setter: writes a1 to *(off_2185A04)+12
sub_2185A08
(not in export)
- docs/function_notes.md:1398 when sub_20CCCC0() is set calls sub_2185688(25), sub_2148950(1, 0, 0), sub_218566C(22), then sub_2148934(0); returns sub_2197B14 of that value
- docs/function_notes/NEEDS_REVIEW.md:1589 if sub_20CCCC0(): sub_2185688(25), sub_2148950(1,0,0), sub_218566C(22), sub_2148934; tail sub_2197B14 [REVIEW]
- docs/function_notes/hk_34.md:85 if sub_20CCCC0(): sub_2185688(25), sub_2148950(1,0,0), sub_218566C(22), sub_2148934; tail sub_2197B14 [REVIEW]
sub_2185A3C
(not in export)
- docs/function_notes.md:1384 menu-result dispatch: result = sub_219F914(); when 1 calls sub_20CCC74(29, 31)
- docs/function_notes/NEEDS_REVIEW.md:1590 menu-result dispatch on sub_219F914(): 1 -> sub_20CCC74(29,31), 2 -> sub_20CCC74(18,31) [REVIEW]
- docs/function_notes/hk_34.md:86 menu-result dispatch on sub_219F914(): 1 -> sub_20CCC74(29,31), 2 -> sub_20CCC74(18,31) [REVIEW]
sub_2185A68
(not in export)
- docs/function_notes.md:1399 when sub_20CCCC0() is set calls sub_2185AB8(27) and the BG setup
- docs/function_notes/NEEDS_REVIEW.md:1591 if sub_20CCCC0(): sub_2185AB8(27), sub_2148950(1,0,0), sub_2185A9C(22), sub_2148934; tail sub_219F8CC [REVIEW]
- docs/function_notes/hk_34.md:87 if sub_20CCCC0(): sub_2185AB8(27), sub_2148950(1,0,0), sub_2185A9C(22), sub_2148934; tail sub_219F8CC [REVIEW]
sub_2185A9C
(not in export)
- docs/function_notes/hk_34.md:88 ARM: sets bits 8-12 of the shadow register at *off_2185AB4 to a1 (BG select field)
sub_2185AB8
(not in export)
- docs/function_notes/hk_34.md:89 ARM: sets bits 8-12 of REG_DISPCNT (0x04000000) to a1 (display mode field)
sub_2185AD0
(not in export)
- docs/function_notes.md:1385 menu-result dispatch: result = sub_219EAB4(); when 1 calls sub_20CCC74(19, 31)
- docs/function_notes/NEEDS_REVIEW.md:1592 menu-result dispatch on sub_219EAB4(): 1 -> sub_20CCC74(19,31), 2 -> sub_20CCC74(0,31) [REVIEW]
- docs/function_notes/hk_34.md:90 menu-result dispatch on sub_219EAB4(): 1 -> sub_20CCC74(19,31), 2 -> sub_20CCC74(0,31) [REVIEW]
sub_2185AFC
(not in export)
- docs/function_notes.md:1400 when sub_20CCCC0() is set calls sub_2185AB8(25) and the BG setup
- docs/function_notes/NEEDS_REVIEW.md:1593 if sub_20CCCC0(): sub_2185AB8(25), sub_2148950(1,0,0), sub_2185A9C(22), sub_2148934; tail sub_219EA94 [REVIEW]
- docs/function_notes/hk_34.md:91 if sub_20CCCC0(): sub_2185AB8(25), sub_2148950(1,0,0), sub_2185A9C(22), sub_2148934; tail sub_219EA94 [REVIEW]
sub_2185B30
(not in export)
- docs/function_notes/hk_34.md:92 returns (a1+168 halfword) != 0; simple state flag test
sub_2185B44
(not in export)
- docs/function_notes.md:1362 thunk: calls the function pointer off_2185B58 with (off_2185B50, off_2185B54, 0)
- docs/function_notes/NEEDS_REVIEW.md:1594 thunk: calls function pointer off_2185B58 with (off_2185B50, off_2185B54, 0) [REVIEW]
- docs/function_notes/hk_34.md:93 thunk: calls function pointer off_2185B58 with (off_2185B50, off_2185B54, 0) [REVIEW]
sub_2185B78
(not in export)
- docs/function_notes.md:1087 returns sub_209BFA8(off_2185B94, 0, 0, 0, 1): object/model lookup
- docs/function_notes/NEEDS_REVIEW.md:1595 returns sub_209BFA8(off_2185B94, 0, 0, 0, 1); object/model allocation wrapper [REVIEW]
- docs/function_notes/hk_34.md:94 returns sub_209BFA8(off_2185B94, 0, 0, 0, 1); object/model allocation wrapper [REVIEW]
sub_2185B98
(not in export)
- vm_model/src/mission_step.rs:2 per-frame driver
sub_2181840and the MissionGate object (id 0x6E:sub_2185B98update, - vm_model/src/mission_step.rs:272
sub_2185B98.countis the mission count (sub_2181800, 0 outside mode 4); - docs/function_notes.md:1474 per-frame state machine on a2+172: state 2 counts up and the others handle their transitions
- docs/function_notes/NEEDS_REVIEW.md:1596 per-frame state machine on a2+172: state 2 counts a2+168 up to a limit from sub_209B710 then switches to state 1; state 0 waits on sub_2181800() (if object type 4) vs limit at a2+156+40 then clears bit 0 of a2+2 and sets state 1 [REVIEW]
- docs/function_notes/hk_34.md:95 per-frame state machine on a2+172: state 2 counts a2+168 up to a limit from sub_209B710 then switches to state 1; state 0 waits on sub_2181800() (if object type 4) vs limit at a2+156+40 then clears bit 0 of a2+2 and sets state 1 [REVIEW]
sub_2185C2C
(not in export)
- vm_model/src/mission_step.rs:3
sub_2185C2Cinit). Pure state machines; the host feeds them kind/limit and applies events. - vm_model/src/mission_step.rs:251
sub_2185C2C: gates with a number are visible and waiting, the rest start done. - docs/function_notes.md:1430 batch flag update over an object pointer list: when the result is nonzero clears the flag word of each entry
- docs/function_notes/NEEDS_REVIEW.md:1597 batch flag update over an object pointer list (count at +4): objects with nonzero field at +156+40 get flag off_2185C7C set and state 0; others get bit 0 cleared and state 1 [REVIEW]
- docs/function_notes/hk_34.md:96 batch flag update over an object pointer list (count at +4): objects with nonzero field at +156+40 get flag off_2185C7C set and state 0; others get bit 0 cleared and state 1 [REVIEW]
sub_2185C80
(not in export)
- docs/function_notes.md:1088 setup/copy: sends parameter blocks via sub_1FF9048 (id 20 with value 30 among them) and sets +76 = (+4) >> 4 on the object
- docs/function_notes/NEEDS_REVIEW.md:1598 setup/copy: reads parameter blocks via sub_1FF9048 (ids 20, 25, 27) into a2 fields, sets a2+76/80/84 = (a2+4/8/12) >> 4, updates shared object off_2185CF4 via sub_209B688/sub_209B734, tail sub_209BB2C [REVIEW]
- docs/function_notes/hk_34.md:97 setup/copy: reads parameter blocks via sub_1FF9048 (ids 20, 25, 27) into a2 fields, sets a2+76/80/84 = (a2+4/8/12) >> 4, updates shared object off_2185CF4 via sub_209B688/sub_209B734, tail sub_209BB2C [REVIEW]
sub_2185CFC
(not in export)
- docs/function_notes.md:1542 creates a shared object via sub_219B458(a1, off_2185D40) and then sub_219B2C8
- docs/function_notes/NEEDS_REVIEW.md:1599 creates a shared object via sub_219B458(a1, off_2185D40), sub_219B2C8, sub_219B360, sub_209B940(63), sub_209BA08(2), returns sub_20849A0(obj+16, dword_2185D50) [REVIEW]
- docs/function_notes/hk_34.md:99 creates a shared object via sub_219B458(a1, off_2185D40), sub_219B2C8, sub_219B360, sub_209B940(63), sub_209BA08(2), returns sub_20849A0(obj+16, dword_2185D50) [REVIEW]
sub_2185D54
(not in export)
- vm_model/src/mission_step.rs:260
sub_2185D54, the kart-touch callback: a touch with contact type 1 starts the opening - docs/function_notes.md:1434 interaction/collision check between two actors: returns 0 when the actor flags a3 and a4 exclude the test
- docs/function_notes/NEEDS_REVIEW.md:1600 interaction/collision check: returns 0 if actor flags at +72 hit mask dword_2185DA4 or (global state 4 and sub_20A1084(id)); if a3 byte == 1 sets flag off_2185DAC in a1+2 and state a1+172 = 2; returns a4 byte [REVIEW]
- docs/function_notes/hk_34.md:100 interaction/collision check: returns 0 if actor flags at +72 hit mask dword_2185DA4 or (global state 4 and sub_20A1084(id)); if a3 byte == 1 sets flag off_2185DAC in a1+2 and state a1+172 = 2; returns a4 byte [REVIEW]
sub_2185DB0
(not in export)
- docs/function_notes.md:1229 object constructor/init: sub_20D2450(a1), derives the angle and stores it at +126
- docs/function_notes/NEEDS_REVIEW.md:1601 object constructor/init: sub_20D2450(a1), derives angle index a1+126 from a1+156+16 with dword_2185EC0/EC4, direction vector from sin/cos table off_2185EC8, positions from a1+28/32 scaled by dword_2185ECC/ED0, creates two child objects via sub_20D34D4(a1,102) stored at a1+160/164 [REVIEW]
- docs/function_notes/hk_34.md:101 object constructor/init: sub_20D2450(a1), derives angle index a1+126 from a1+156+16 with dword_2185EC0/EC4, direction vector from sin/cos table off_2185EC8, positions from a1+28/32 scaled by dword_2185ECC/ED0, creates two child objects via sub_20D34D4(a1,102) stored at a1+160/164 [REVIEW]
sub_2185EE4
(not in export)
- docs/function_notes.md:638 kart-relative per-frame update: stores *a4 in a1+dword_2185F84, takes the offset from a2+80 and a2+88; when the squared distance is >= 16 normalises it and applies sub_2147FD8 to the velocity at a1+dword_2185F88; calls and clears the callback at a1+dword_2185F8C; returns the flag
- docs/function_notes/NEEDS_REVIEW.md:1602 kart-relative per-frame update: stores *a4 in a1 field, computes offset from a2+80 and a1[3]-a2+88; if dist^2 >= 16 normalizes and applies sub_2147FD8 velocity; calls optional callback at a1+dword_2185F8C (cleared); returns flag [REVIEW]
- docs/function_notes/hk_34.md:102 kart-relative per-frame update: stores *a4 in a1 field, computes offset from a2+80 and a1[3]-a2+88; if dist^2 >= 16 normalizes and applies sub_2147FD8 velocity; calls optional callback at a1+dword_2185F8C (cleared); returns flag [REVIEW]
sub_2185F90
(not in export)
- docs/function_notes.md:1230 same shape as sub_2185EE4 but against the points at a2+128 / a2+136
- docs/function_notes/NEEDS_REVIEW.md:1603 same shape as sub_2185EE4 but against a2+128/136; when a3 == 1 computes normalized offset scaled by a1[40]+36 and applies sub_2147FD8 with a1[40]+40; default field set to 31 [REVIEW]
- docs/function_notes/hk_34.md:103 same shape as sub_2185EE4 but against a2+128/136; when a3 == 1 computes normalized offset scaled by a1[40]+36 and applies sub_2147FD8 with a1[40]+40; default field set to 31 [REVIEW]
sub_21860AC
(not in export)
- docs/function_notes.md:1511 mode dispatcher on the field at a1 + dword_21861BC: mode 1 runs one handler, the others the matching handlers
- docs/function_notes/NEEDS_REVIEW.md:1604 mode dispatcher on a1 field: mode 1 -> sub_20EAFC4, mode 2 -> sub_20EAD80, mode 0 -> squared-distance proximity test vs (a3 + radius) calling sub_20EB3F0 and returning 1 on hit [REVIEW]
- docs/function_notes/hk_34.md:104 mode dispatcher on a1 field: mode 1 -> sub_20EAFC4, mode 2 -> sub_20EAD80, mode 0 -> squared-distance proximity test vs (a3 + radius) calling sub_20EB3F0 and returning 1 on hit [REVIEW]
sub_21861D4
(not in export)
- docs/function_notes.md:1573 effect/particle emitter draw (314 bytes): picks the position source and draws the emitter's particles
- docs/function_notes/NEEDS_REVIEW.md:1605 effect/particle emitter draw: picks position source by mode field (2, 3, default with distance-based count), clamps count to 16 (or 20 - count when a3), param blocks via sub_1FF9048 ids 20/25/26/27/28, sets count via sub_209B940/sub_209B9A4 and submits sub_209BB2C [REVIEW]
- docs/function_notes/hk_34.md:105 effect/particle emitter draw: picks position source by mode field (2, 3, default with distance-based count), clamps count to 16 (or 20 - count when a3), param blocks via sub_1FF9048 ids 20/25/26/27/28, sets count via sub_209B940/sub_209B9A4 and submits sub_209BB2C [REVIEW]
sub_2186348
(not in export)
- docs/function_notes.md:1568 302-byte graphics draw: takes the item count from sub_20E69B and draws each item
- docs/function_notes/NEEDS_REVIEW.md:1606 302-byte graphics draw: item count from sub_20E69BC(position) clamped to 31, per-item setup sub_209B904, rotation from off_2186484 sin/cos table into param 26, flags via sub_209B7A0, submit via sub_209BB2C [REVIEW]
- docs/function_notes/hk_34.md:106 302-byte graphics draw: item count from sub_20E69BC(position) clamped to 31, per-item setup sub_209B904, rotation from off_2186484 sin/cos table into param 26, flags via sub_209B7A0, submit via sub_209BB2C [REVIEW]
sub_218648C
(not in export)
- vm_model/src/mission_step.rs:214 Actions
sub_21832ACruns this tick, in order (thensub_218648Calways follows). - vm_model/src/mission_target.rs:359 Offsets used by the motion engine
sub_218648C(heading control). - vm_model/src/mission_target.rs:470 The heading controller of
sub_218648C(motion kinds 1..8 for+0x184, secondary kinds - vm_model/src/mission_target.rs:538 The motion part of
sub_218648Cwithout ground collision and frame events: heading - vm_model/src/mission_target.rs:556 The whole movement part of
sub_218648C: heading, speed, gravity (+0x2C0set), velocity - vm_model/src/mission_target.rs:643 The frame timer of
sub_218648C:+176counts up; when it reaches+0x1F0both are cleared - vm_model/src/mission_target.rs:810 One whole frame of the movement part of
sub_218648C: motion, then the frame timer and its - docs/function_notes.md:1604 2700-byte per-frame kart physics update (not the collision pass): integrates the kart state and its sub-objects
- docs/function_notes/NEEDS_REVIEW.md:1615 2700-byte per-frame kart physics update (not collision-only): runs callback at a2+dword_2186804, speed/heading state machine (cases 1-8) using sub_2187054/sub_2187004/sub_2186F94 clamps, integrates position a2+4/8/12 via sin/cos table off_2186C84, ground/wall query sub_1FFDEE4 (KCL) with push via sub_2147FD8, lap/checkpoint crossing checks (sub_209B620, sub_219B230), state transitions via sub_2188E74, spawns 5 effect slots (sub_2187664, sub_208B5B0/6B0), decrements timer at +dword_2186F90 [REVIEW]
- docs/function_notes/hk_34.md:118 2700-byte per-frame kart physics update (not collision-only): runs callback at a2+dword_2186804, speed/heading state machine (cases 1-8) using sub_2187054/sub_2187004/sub_2186F94 clamps, integrates position a2+4/8/12 via sin/cos table off_2186C84, ground/wall query sub_1FFDEE4 (KCL) with push via sub_2147FD8, lap/checkpoint crossing checks (sub_209B620, sub_219B230), state transitions via sub_2188E74, spawns 5 effect slots (sub_2187664, sub_208B5B0/6B0), decrements timer at +dword_2186F90 [REVIEW]
sub_2186F94
(not in export)
- vm_model/src/mission_target.rs:321
sub_2186F94(from, to, rate, lead, heading): liketurn_towardsaiminglead(+0x4000 - docs/function_notes.md:1451 heading turn helper: the wrapped angle difference from sub_2148714 limited by a3 (sign-aware)
- docs/function_notes/NEEDS_REVIEW.md:1607 heading turn helper: wraps angle difference from sub_2148714(dx,dz) minus a5 (dword_2186FF8/FFC/2187000), clamps step to +-|a3|, returns 16-bit a5 + step [REVIEW]
- docs/function_notes/hk_34.md:107 heading turn helper: wraps angle difference from sub_2148714(dx,dz) minus a5 (dword_2186FF8/FFC/2187000), clamps step to +-|a3|, returns 16-bit a5 + step [REVIEW]
sub_2187004
(not in export)
- vm_model/src/mission_target.rs:312
sub_2187004(from, to, rate, heading): turnheading(16-bit angle) towards the direction - docs/function_notes.md:1427 heading turn-rate limiter: the angle difference from sub_2148714 clamped to the magnitude of a3
- docs/function_notes/NEEDS_REVIEW.md:1608 heading turn-rate limiter: angle diff via sub_2148714 minus a4, wraps with dword_218704C/2050, clamps to +-|a3|, returns a4 + clamped step [REVIEW]
- docs/function_notes/hk_34.md:108 heading turn-rate limiter: angle diff via sub_2148714 minus a4, wraps with dword_218704C/2050, clamps to +-|a3|, returns a4 + clamped step [REVIEW]
sub_2187054
(not in export)
- vm_model/src/mission_target.rs:289
sub_2187054(target, step, cur): movecurtowardstargetby at moststep. - docs/function_notes.md:1375 moves the value a3 toward a1 by at most a step, clamped at a1
- docs/function_notes/NEEDS_REVIEW.md:1609 clamp-approach helper: moves a3 toward a1 by step a2 without overshooting; returns clamped value [REVIEW]
- docs/function_notes/hk_34.md:109 clamp-approach helper: moves a3 toward a1 by step a2 without overshooting; returns clamped value [REVIEW]
sub_2187078
(not in export)
- docs/function_notes/hk_34.md:110 toggles the 16-bit flag at off_218708C between 0 and 1; returns its address
sub_2187090
(not in export)
- docs/function_notes.md:1532 when the pointer result is non-null and a3 is set, calls the allocator path for the object
- docs/function_notes/NEEDS_REVIEW.md:1610 if result ptr non-null and a3 set: allocates via sub_219B3F8 into a2+dword_21870BC, sub_209B940(obj,63), clears flag at off_21870C0 [REVIEW]
- docs/function_notes/hk_34.md:111 if result ptr non-null and a3 set: allocates via sub_219B3F8 into a2+dword_21870BC, sub_209B940(obj,63), clears flag at off_21870C0 [REVIEW]
sub_21870C4
(not in export)
- docs/function_notes.md:1557 object init/reset: when a1 and a3 are set loads the resource and resets the object fields
- docs/function_notes/NEEDS_REVIEW.md:1611 object init/reset: if a1 and a3 loads a resource via sub_219B458 into a2+dword_2187188 (sub_219B394 when a4); if a5 allocates a2[40] via sub_219B4B8; computes scale from a2[39]+16 with dword_2187190/218C; copies position a2[1..3] to a2 block; clears flags; sets a2 field from a2[39]+38 [REVIEW]
- docs/function_notes/hk_34.md:112 object init/reset: if a1 and a3 loads a resource via sub_219B458 into a2+dword_2187188 (sub_219B394 when a4); if a5 allocates a2[40] via sub_219B4B8; computes scale from a2[39]+16 with dword_2187190/218C; copies position a2[1..3] to a2 block; clears flags; sets a2 field from a2[39]+38 [REVIEW]
sub_21871B0
(not in export)
- vm_model/src/mission_step.rs:177 conditions (
sub_21871B0,sub_2188200,sub_21880E4,sub_2187FE0,sub_2188188) are - vm_model/src/mission_step.rs:203
sub_21871B0: hit flag set and its counter <= 0. - vm_model/src/mission_target.rs:26
sub_21871B0: flag bit (dword_21871D0). - vm_model/src/mission_target.rs:66
sub_21871B0: a hit is pending (flag set and its counter not positive). - docs/function_notes.md:1371 returns true when the word at a1 + dword_21871CC has the bits of dword_21871D0 and the second test passes
- docs/function_notes/NEEDS_REVIEW.md:1612 returns true when (a1+dword_21871CC & dword_21871D0) is set and timer at a1+dword_21871D4 <= 0; state/timer check [REVIEW]
- docs/function_notes/hk_34.md:113 returns true when (a1+dword_21871CC & dword_21871D0) is set and timer at a1+dword_21871D4 <= 0; state/timer check [REVIEW]
sub_21871D8
(not in export)
- vm_model/src/mission_step.rs:176 object's state word (
sub_21871D8(o, k)testsstate < k). The sub-behaviours' own - vm_model/src/mission_target.rs:61
sub_21871D8(o, k): the state is belowk. - docs/function_notes/hk_34.md:114 returns (a1 state field at dword_21871E8) < a2; state comparison helper
sub_21871EC
(not in export)
- vm_model/src/mission_target.rs:71
sub_21871EC. - docs/function_notes/hk_34.md:115 clears the field at result+dword_21871F4; returns the object pointer
sub_21871F8
(not in export)
- vm_model/src/mission_target.rs:92
sub_21871F8(o, state, param): enter a state. - docs/function_notes.md:1551 object state setter: writes the state a2 and the animation and parameter fields of the object
- docs/function_notes/NEEDS_REVIEW.md:1613 object state setter: writes state a2 and anim/param a3 into the object, clears a counter at +176, decrements +180 (floor 0), resets flags, and if +dword_2187288 is zero zeroes 13 fields then calls sub_2187AD4 [REVIEW]
- docs/function_notes/hk_34.md:116 object state setter: writes state a2 and anim/param a3 into the object, clears a counter at +176, decrements +180 (floor 0), resets flags, and if +dword_2187288 is zero zeroes 13 fields then calls sub_2187AD4 [REVIEW]
sub_21872C0
(not in export)
- docs/function_notes.md:1231 spawns up to 5 effect/sprite slots (24-byte entries) with a 4-word parameter list
- docs/function_notes/NEEDS_REVIEW.md:1614 spawns up to 5 effect/sprite slots (24-byte entries at a1+52): for each free slot sets state fields, sub_2187664 setup, and if a8 is set computes offset via sin/cos table off_2187404 and spawns through sub_208B748 with callback off_2187408 [REVIEW]
- docs/function_notes/hk_34.md:117 spawns up to 5 effect/sprite slots (24-byte entries at a1+52): for each free slot sets state fields, sub_2187664 setup, and if a8 is set computes offset via sin/cos table off_2187404 and spawns through sub_208B748 with callback off_2187408 [REVIEW]
sub_218740C
(not in export)
- docs/function_notes/hk_35.md:3 copies three 16-bit words from a2 into a1[40..42] (struct +80..+84) and returns pointer to the last one; small vector setter.
sub_2187424
(not in export)
- docs/function_notes.md:1552 finds a free slot in the 5-entry table (stride 24, object pointer at +2)
- docs/function_notes/NEEDS_REVIEW.md:1618 finds free slot (of 5, stride 24, object ptr at +208), fills its flag, args and position from a1 and sub_20D3D48(0), calls sub_208E490. Spawn helper. [REVIEW]
- docs/function_notes/hk_35.md:4 finds free slot (of 5, stride 24, object ptr at +208), fills its flag, args and position from a1 and sub_20D3D48(0), calls sub_208E490. Spawn helper. [REVIEW]
sub_21874A4
(not in export)
- vm_model/src/mission_step.rs:183
sub_2183EEC: the target goes down with effects (state 8,sub_21874A4bursts). - docs/function_notes/hk_35.md:5 finds first free slot in 5-entry array (ptr at +208), sets slot kind 5 at +188, then calls sub_21875F4 to finish initialisation. Thin spawn wrapper.
sub_21874F8
(not in export)
- docs/function_notes/hk_35.md:6 same as sub_21874A4 but stores slot kind 4 before calling sub_21875F4.
sub_218754C
(not in export)
- docs/function_notes/hk_35.md:7 same as sub_21874A4 but stores slot kind 2 before calling sub_21875F4.
sub_21875A0
(not in export)
- docs/function_notes/hk_35.md:8 same as sub_21874A4 but stores slot kind 1 before calling sub_21875F4.
sub_21875F4
(not in export)
- docs/function_notes/hk_35.md:9 fills slot a2 (stride 24): arg at +192, position a3-a5 scaled by 16 into +196..+204, calls sub_2187664, attaches object a6 via sub_208B7BC (frees old).
sub_2187664
(not in export)
- docs/function_notes.md:1601 switch on the slot kind (+188, values 1..5) computing a 3D position for the kart-linked object (1130 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1619 switch on slot kind (+188, 1..5) computing a 3D position into a3[0..2] from table off_2187A8C and sub_2133048 fixed-point math; kind 3 halves output. [REVIEW]
- docs/function_notes/hk_35.md:10 switch on slot kind (+188, 1..5) computing a 3D position into a3[0..2] from table off_2187A8C and sub_2133048 fixed-point math; kind 3 halves output. [REVIEW]
sub_2187AD4
(not in export)
- vm_model/src/mission_target.rs:36
sub_2187AD4->sub_208B6B0on emitter slotk(+208 + 24k was non-zero). - vm_model/src/mission_target.rs:82
sub_2187AD4: stop the five emitter slots (24 bytes apart from +208) and clear +184. - docs/function_notes/hk_35.md:11 loops over 5 slots, frees each attached object with sub_208B6B0 when present, then clears a1+184. Reset/cleanup routine.
sub_2187B0C
(not in export)
- docs/function_notes.md:1452 if the result is nonzero and a2 is non-null, builds a vector from the table off_2187B0C and stores it at a2
- docs/function_notes/NEEDS_REVIEW.md:1620 if result and a2 non-null, builds vector from off_2187B70 and calls sub_20F4E78 then sub_20F4DFC (a3 or zero vector). Vector transform wrapper. [REVIEW]
- docs/function_notes/hk_35.md:12 if result and a2 non-null, builds vector from off_2187B70 and calls sub_20F4E78 then sub_20F4DFC (a3 or zero vector). Vector transform wrapper. [REVIEW]
sub_2187B74
(not in export)
- docs/function_notes.md:1453 same pattern as sub_2187B0C using the table off_2187BD
- docs/function_notes/NEEDS_REVIEW.md:1621 same pattern as sub_2187B0C using table off_2187BD8 and callees sub_20FD684 / sub_20FD540. [REVIEW]
- docs/function_notes/hk_35.md:13 same pattern as sub_2187B0C using table off_2187BD8 and callees sub_20FD684 / sub_20FD540. [REVIEW]
sub_2187BDC
(not in export)
- docs/function_notes.md:1543 if the object at a1 + dword_2187C24 exists calls its update with a 6-word temporary array
- docs/function_notes/NEEDS_REVIEW.md:1622 if object at a1+dword_2187C24 exists: calls sub_20FD540 (a2 or zero vector) when its +84 >= dword_2187C28, else sub_20FD494. Conditional update. [REVIEW]
- docs/function_notes/hk_35.md:14 if object at a1+dword_2187C24 exists: calls sub_20FD540 (a2 or zero vector) when its +84 >= dword_2187C28, else sub_20FD494. Conditional update. [REVIEW]
sub_2187C2C
(not in export)
- docs/function_notes/hk_35.md:15 returns nonzero if the pointer at a1+dword_2187C3C is set. Trivial predicate.
sub_2187C40
(not in export)
- docs/function_notes/hk_35.md:16 frees the object at a1+dword_2187C64 via sub_20FD494 if set, stores a2 there, returns the offset value. Replace-setter.
sub_2187C68
(not in export)
- docs/function_notes.md:1414 stores a2 at a1+dword_2187CA4 and copies the vector a3 into a1+dword_2187CA8
- docs/function_notes/NEEDS_REVIEW.md:1623 stores a2, copies vector a3 into a1+dword_2187CA8, sets back-pointer, calls sub_20109C4 with off_2187CB0. Sub-object init. [REVIEW]
- docs/function_notes/hk_35.md:17 stores a2, copies vector a3 into a1+dword_2187CA8, sets back-pointer, calls sub_20109C4 with off_2187CB0. Sub-object init. [REVIEW]
sub_2187CB4
(not in export)
- docs/function_notes.md:1404 stores a2 at a1+dword_2187CE4, sets the type word to 3, sets the back-pointer and calls the list insert
- docs/function_notes/NEEDS_REVIEW.md:1624 stores a2, sets type 3, sets back-pointer, calls sub_20109C4 with off_2187CF0. Similar init to sub_2187C68. [REVIEW]
- docs/function_notes/hk_35.md:18 stores a2, sets type 3, sets back-pointer, calls sub_20109C4 with off_2187CF0. Similar init to sub_2187C68. [REVIEW]
sub_2187CF4
(not in export)
- docs/function_notes.md:1485 when the byte a1[0]+1 matches the field of dword_2187D94, builds the two vectors v7/v8 and calls the effect setup
- docs/function_notes/NEEDS_REVIEW.md:1625 if byte a1[0]+1 matches dword_2187D94 field, computes vector via sub_214755C/sub_214733C, stores 16x values, transforms and calls sub_20FD684. [REVIEW]
- docs/function_notes/hk_35.md:19 if byte a1[0]+1 matches dword_2187D94 field, computes vector via sub_214755C/sub_214733C, stores 16x values, transforms and calls sub_20FD684. [REVIEW]
sub_2187DB4
(not in export)
- docs/function_notes.md:1376 creates an object through sub_20AC524(dword_2187DDC) and returns it, or 0 on failure
- docs/function_notes/NEEDS_REVIEW.md:1626 creates object via sub_20AC524(dword_2187DDC); if non-null calls sub_20DA628 and sub_20FD338(obj,0) and returns it, else 0. [REVIEW]
- docs/function_notes/hk_35.md:20 creates object via sub_20AC524(dword_2187DDC); if non-null calls sub_20DA628 and sub_20FD338(obj,0) and returns it, else 0. [REVIEW]
sub_2187DE0
(not in export)
- docs/function_notes.md:1089 allocates a type-201 object via sub_20AC524 and on success sets its fields from the table
- docs/function_notes/NEEDS_REVIEW.md:1627 allocates type 201 object via sub_20AC524; on success sets +242/+244 to a1, +172=1, calls sub_20FD338. Failure branch garbled. [REVIEW]
- docs/function_notes/hk_35.md:21 allocates type 201 object via sub_20AC524; on success sets +242/+244 to a1, +172=1, calls sub_20FD338. Failure branch garbled. [REVIEW]
sub_2187E58
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1628 ARM-mode fragment whose decompilation is mostly flag and coprocessor noise; not a usable function as shown. [REVIEW]
- docs/function_notes/hk_35.md:22 ARM-mode fragment whose decompilation is mostly flag and coprocessor noise; not a usable function as shown. [REVIEW]
sub_2187E90
(not in export)
- docs/function_notes/hk_35.md:23 if index at +dword_2187EC0 is below entry count of table off_2187EBC, decrements counter at +dword_2187EC4, reloading it at 0. Frame tick.
sub_2187EC8
(not in export)
- docs/function_notes.md:1423 returns 0 when the index at +dword_2187F10 is out of range of the table at *off_2187F0C; otherwise the lookup result
- docs/function_notes/NEEDS_REVIEW.md:1629 if index at +dword_2187F10 is in range of table off_2187F0C, returns sub_2042044(index, next) with sub-index wrapped at entry count. Cursor advance. [REVIEW]
- docs/function_notes/hk_35.md:24 if index at +dword_2187F10 is in range of table off_2187F0C, returns sub_2042044(index, next) with sub-index wrapped at entry count. Cursor advance. [REVIEW]
sub_2187F18
(not in export)
- docs/function_notes/hk_35.md:25 returns int16 at +16 of entry from sub_2042044(dword_2187F50 index, dword_2187F58 sub-index), or 0 if out of range of off_2187F54.
sub_2187F5C
(not in export)
- docs/function_notes/hk_35.md:26 same as sub_2187F18 but returns the int16 at +14, using table off_2187F98.
sub_2187FA0
(not in export)
- vm_model/src/mission_target.rs:278
sub_2187FA0: the route point atpointof the course's PATHpathlist, whenpathis in - vm_model/src/mission_target.rs:409
sub_2183874: idle / walk.routeis the route point (sub_2187FA0),methe object's - docs/function_notes/hk_35.md:27 returns sub_2042044(index, sub-index) from the dword_2187FD4/FDC fields, or 0 if index is out of range of table off_2187FD8. Plain table lookup.
sub_2187FE0
(not in export)
- vm_model/src/mission_step.rs:177 conditions (
sub_21871B0,sub_2188200,sub_21880E4,sub_2187FE0,sub_2188188) are - vm_model/src/mission_step.rs:205
sub_2188200 >= def+..., thensub_21880E4, then a kart found bysub_2187FE0with - vm_model/src/mission_target.rs:247
sub_2187FE0(o, range, window): the player kart when it is targetable, withinrangeand - docs/function_notes.md:1548 finds an object through sub_207A974 (id from off_2188058) and checks its state flags before use
- docs/function_notes/NEEDS_REVIEW.md:1630 finds object via sub_207A974 (id from off_2188058), rejects flag 0x40, needs hit tests sub_2188EE4 (a2) / sub_2188E8C (a3) on +128; returns it or 0. [REVIEW]
- docs/function_notes/hk_35.md:28 finds object via sub_207A974 (id from off_2188058), rejects flag 0x40, needs hit tests sub_2188EE4 (a2) / sub_2188E8C (a3) on +128; returns it or 0. [REVIEW]
sub_2188064
(not in export)
- vm_model/src/mission_target.rs:260
sub_2188064(o, turn, range, window): likefind_playerwith the facingo.+0x184 + turn. - docs/function_notes.md:1090 same as sub_2187FE0 with table off_21880DC and offsets: finds the kart object for slot (+98) via sub_207A974 and checks flag 0x40 at +72
- docs/function_notes/NEEDS_REVIEW.md:1631 same as sub_2187FE0 but uses table off_21880DC and offset a1+dword_21880E0 + a2 for the second test. [REVIEW]
- docs/function_notes/hk_35.md:29 same as sub_2187FE0 but uses table off_21880DC and offset a1+dword_21880E0 + a2 for the second test. [REVIEW]
sub_21880E4
(not in export)
- vm_model/src/mission_step.rs:177 conditions (
sub_21871B0,sub_2188200,sub_21880E4,sub_2187FE0,sub_2188188) are - vm_model/src/mission_step.rs:205
sub_2188200 >= def+..., thensub_21880E4, then a kart found bysub_2187FE0with - vm_model/src/mission_step.rs:210
sub_21880E4(o, def+220, def+224). - docs/function_notes.md:1435 looks up an object via sub_207A974 (the id from off_2188134) and runs the sub_2188188 hit test on it
- docs/function_notes/NEEDS_REVIEW.md:1632 looks up object via sub_207A974 (id from off_2188134), requires sub_2188188 hit test on +128 box and flag 0x40 clear; returns object or 0. [REVIEW]
- docs/function_notes/hk_35.md:30 looks up object via sub_207A974 (id from off_2188134), requires sub_2188188 hit test on +128 box and flag 0x40 clear; returns object or 0. [REVIEW]
sub_2188138
(not in export)
- vm_model/src/mission_target.rs:272
sub_2188138(o, range, window): the first pooled object (sub_20FD7A4, position at +80) - docs/function_notes/hk_35.md:31 iterates sub_20FD7A4 items (count from sub_20FD7F0); returns first whose +80 box passes sub_2188188(a1,...,a2,a3), else 0. Search helper.
sub_2188188
(not in export)
- vm_model/src/mission_step.rs:177 conditions (
sub_21871B0,sub_2188200,sub_21880E4,sub_2187FE0,sub_2188188) are - vm_model/src/mission_step.rs:208
!sub_2188188(...). - vm_model/src/mission_target.rs:218
sub_2188188(o, pos, range, window)with the facing taken from the object: needs a range or - docs/function_notes/hk_35.md:32 boolean hit test: (a3 or a4 set) and (a3 null or sub_2188EE4 passes) and (a4 null or sub_2188E8C passes with a1+dword_21881D0).
sub_21881D4
(not in export)
- docs/function_notes/hk_35.md:33 stores a2 into the field at result+dword_21881DC. Trivial setter.
sub_21881E0
(not in export)
- docs/function_notes/hk_35.md:34 stores a2 into the field at result+dword_21881E8. Trivial setter.
sub_21881EC
(not in export)
- docs/function_notes/hk_35.md:35 returns the u16 at a1+180. Trivial getter.
sub_21881F8
(not in export)
- docs/function_notes/hk_35.md:36 stores a2 into a1+180 and returns that field's address. Trivial setter.
sub_2188200
(not in export)
- vm_model/src/mission_step.rs:177 conditions (
sub_21871B0,sub_2188200,sub_21880E4,sub_2187FE0,sub_2188188) are - vm_model/src/mission_step.rs:205
sub_2188200 >= def+..., thensub_21880E4, then a kart found bysub_2187FE0with - vm_model/src/mission_target.rs:76
sub_2188200: the magnitude of the signed 16-bit count at +172 (as u16). - docs/function_notes/hk_35.md:37 returns the absolute value of the signed field at a1+172 as u16. Magnitude getter.
sub_2188210
(not in export)
- docs/function_notes.md:1405 decrements the counter at a1+172; when it is still above -(*(a1+160)) runs the next step
- docs/function_notes/NEEDS_REVIEW.md:1633 decrements the counter at a1+172; if it is still above -(*(a1+160)) returns 0, else clamps it and returns 1. Countdown tick with limit. [REVIEW]
- docs/function_notes/hk_35.md:38 decrements the counter at a1+172; if it is still above -(*(a1+160)) returns 0, else clamps it and returns 1. Countdown tick with limit. [REVIEW]
sub_2188240
(not in export)
- vm_model/src/mission_step.rs:185
sub_2183860: hit reaction (sub_2183FD4,sub_2188240). - vm_model/src/mission_target.rs:854
sub_2188240: one more hit. Returns true when the hit count reaches the kind's limit - docs/function_notes.md:1439 increments the counter at a1+172 and calls sub_21817C0 when the racer state at *off_2188294 +8 is 4
- docs/function_notes/NEEDS_REVIEW.md:1634 increments counter at a1+172 (calls sub_21817C0/sub_20A12B8 when mode byte of off_2188294 is 4); wraps at (a1+160), returns 1 on wrap. Loop counter. [REVIEW]
- docs/function_notes/hk_35.md:39 increments counter at a1+172 (calls sub_21817C0/sub_20A12B8 when mode byte of off_2188294 is 4); wraps at (a1+160), returns 1 on wrap. Loop counter. [REVIEW]
sub_2188298
(not in export)
- docs/function_notes.md:1232 loops over the sub_2181B10 entries and initialises each record for the mode at +8 == 4
- docs/function_notes/NEEDS_REVIEW.md:1635 loops over sub_2181B10 entries, initialising each record (dword_ field offsets, table copies, sub_2133048 math), ends with sub_20A305C. Large setup. [REVIEW]
- docs/function_notes/hk_35.md:40 loops over sub_2181B10 entries, initialising each record (dword_ field offsets, table copies, sub_2133048 math), ends with sub_20A305C. Large setup. [REVIEW]
sub_2188464
(not in export)
- docs/function_notes/hk_35.md:41 sets flag +dword_21884A8 to 1, negates a2 if a flag bit is set in a1+2, stores a2..a9 into eight consecutive fields. Parameter setter.
sub_21884D0
(not in export)
- docs/function_notes.md:1479 sets the flag word at result+dword_2188568 to 1 and stores a2 (sign-flipped when the flag bit at +2 is set)
- docs/function_notes/NEEDS_REVIEW.md:1636 sets flag to 1, stores a2 (sign-flipped by flag bit) with mirrored copies, stores a3..a7, derives position sums from a1+4/8/12. Object init. [REVIEW]
- docs/function_notes/hk_35.md:42 sets flag to 1, stores a2 (sign-flipped by flag bit) with mirrored copies, stores a3..a7, derives position sums from a1+4/8/12. Object init. [REVIEW]
sub_21885B4
(not in export)
- docs/function_notes/hk_35.md:43 clears a flag field, negates a2 if flag bit set, stores a2..a9 into fields, with one constant from dword_2188614. Parameter setter.
sub_2188624
(not in export)
- docs/function_notes.md:1462 clears the word at result+dword_2188694; negates a2 when bit dword_2188698 of the flag halfword is set, then stores it
- docs/function_notes/NEEDS_REVIEW.md:1637 clears a flag, negates a2 if flag bit set, stores a2..a5 and copies to shadow fields, plus a constant from dword_21886C0 and a7. Object param init. [REVIEW]
- docs/function_notes/hk_35.md:44 clears a flag, negates a2 if flag bit set, stores a2..a5 and copies to shadow fields, plus a constant from dword_21886C0 and a7. Object param init. [REVIEW]
sub_21886D8
(not in export)
- docs/function_notes/hk_35.md:45 sets a type field to 2 if a5 else 0, clears a counter, stores a2..a6 into fields. Parameter init.
sub_218873C
(not in export)
- docs/function_notes.md:1555 sets the type field to 2 when a4 is set, else 0, and stores the three values a2..a4
- docs/function_notes/NEEDS_REVIEW.md:1638 sets a type field (2 if a4 else 0), stores a2..a4 and computes three positions as a1[1..3] plus stored offsets. Object init with position. [REVIEW]
- docs/function_notes/hk_35.md:46 sets a type field (2 if a4 else 0), stores a2..a4 and computes three positions as a1[1..3] plus stored offsets. Object init with position. [REVIEW]
sub_218881C
(not in export)
- docs/function_notes/hk_35.md:47 sets a type field to 2 if a2 else 1, stores a2..a5 and constant dword_2188874 into fields. Parameter init.
sub_2188884
(not in export)
- docs/function_notes/hk_35.md:48 sets a type field to 2 if a2 else 1, stores a2, a3 and constant dword_2188918 into fields. Parameter init.
sub_2188930
(not in export)
- vm_model/src/mission_target.rs:186
sub_2188930: copy a vector to +0x1C8. - vm_model/src/mission_target.rs:659 and an upward velocity of
def +0x154(sub_2188930writes it to +0x1C8..). - docs/function_notes/hk_35.md:49 if a2 non-null, copies the 3-word vector at a2 into a1+dword_2188944 and returns the third word. Vector copy.
sub_2188948
(not in export)
- docs/function_notes/hk_35.md:50 if a2 non-null, copies the 3-word vector at a2 into a1+dword_218895C. Vector copy.
sub_2188960
(not in export)
- docs/function_notes/hk_35.md:51 if a2 non-null, copies the 3-word vector at a2 into a1+dword_2188974. Vector copy.
sub_2188978
(not in export)
- vm_model/src/mission_target.rs:176
sub_2188978: copy a vector to +0x1AC and +0x188 (nothing when absent). - docs/function_notes/hk_35.md:52 if a2 non-null, copies the 3-word vector at a2 into two destinations (a1+dword_21889A0 and a1+dword_21889A4). Double vector copy.
sub_21889A8
(not in export)
- docs/function_notes/hk_35.md:53 zeroes four consecutive fields starting at dword_21889BC. Reset.
sub_21889CC
(not in export)
- docs/function_notes/hk_35.md:54 sets a type field to 2, stores a2, a3, zero, a type 2 and a4, a5 into fields. Object param init.
sub_2188A10
(not in export)
- docs/function_notes.md:1091 sets a mode field to 7 or 8 when it already holds 7 or 8, otherwise keeps the value
- docs/function_notes/NEEDS_REVIEW.md:1639 sets a mode field to 7 or 8 if it already holds 7 or 8, otherwise 6, then stores a2, a3, zero, type 2, a4, a5. Object param init. [REVIEW]
- docs/function_notes/hk_35.md:55 sets a mode field to 7 or 8 if it already holds 7 or 8, otherwise 6, then stores a2, a3, zero, type 2, a4, a5. Object param init. [REVIEW]
sub_2188A6C
(not in export)
- vm_model/src/mission_target.rs:803
sub_2188A6C: motion kind 5 (a,binto +0x198 / +0x19C). - docs/function_notes/hk_35.md:56 sets a type field to 5, stores a2 and a3, and zeroes five fields. Object init.
sub_2188ABC
(not in export)
- docs/function_notes/hk_35.md:57 sets type 2, stores a2 and a3, sets type 4 and zero, stores a4..a6. Object init.
sub_2188B0C
(not in export)
- vm_model/src/mission_target.rs:125
sub_2188B0C: motion kind 4 (also sets +0x1A0). - docs/function_notes/hk_35.md:58 sets type 4, stores a2..a4, sets a field to 1, zeroes three fields. Object init.
sub_2188B58
(not in export)
- docs/function_notes/hk_35.md:59 zeroes four fields, sets a type field to 3, zeroes one, stores a2 and a3. Object init.
sub_2188BA4
(not in export)
- docs/function_notes/hk_35.md:60 sets type 3, stores a2 and a3, sets a field to 1, zeroes three fields. Object init.
sub_2188BEC
(not in export)
- docs/function_notes/hk_35.md:61 sets type 2, stores a2 and a3 into two field pairs, with a second type 2 tag. Object init.
sub_2188C28
(not in export)
- vm_model/src/mission_target.rs:120
sub_2188C28: motion kind 2. - docs/function_notes/hk_35.md:62 sets type 2, stores a2 and a3, sets a field to 1, zeroes three fields. Object init.
sub_2188C70
(not in export)
- vm_model/src/mission_target.rs:131
sub_2188C70: clear the motion. - docs/function_notes/hk_35.md:63 zeroes seven fields and sets the field at dword_2188CA8 to 1. Reset.
sub_2188CB8
(not in export)
- vm_model/src/mission_target.rs:145
sub_2188CB8. - docs/function_notes/hk_35.md:64 stores a2 and a3 into two fields. Parameter setter.
sub_2188CCC
(not in export)
- vm_model/src/mission_target.rs:138
sub_2188CCC. - docs/function_notes/hk_35.md:65 stores a2 into a field and zeroes two others. Parameter setter.
sub_2188CE8
(not in export)
- docs/function_notes/hk_35.md:66 stores a2 and a3 into two fields. Parameter setter.
sub_2188CFC
(not in export)
- docs/function_notes/hk_35.md:67 stores a2 and a3 into two fields. Parameter setter.
sub_2188D10
(not in export)
- vm_model/src/mission_target.rs:461
sub_2183DCC(state 5): attack, a one-shot animation (sub_2188D10). - docs/function_notes/hk_35.md:68 calls sub_219B1E8 on the object at a1+dword_2188D38 (args a2, a3, 1), then stores callback a4 (or default off_2188D3C) at a1+dword_2188D40. Handler setter.
sub_2188D44
export/plan0/ov9_000/sub_2188D44_02188D44.c
- vm_model/src/mission_target.rs:34
sub_2188D44->sub_219B1E8(model at +0x304, a2, a3, 0): play animation. - vm_model/src/mission_target.rs:151
sub_2188D44: play an animation and clear +0x1D4. - docs/function_notes.md:1530 ov9_000 message mapper: calls sub_219B1E8 with the stored pointer from a1 + dword_2188D64 and returns dword_2188D68
- docs/function_notes/NEEDS_REVIEW.md:1640 ov9_000 message mapper: sub_2188550(16); if a1[0]==5 with a1[1] set, writes byte at +dword_2188DAC from a1[2]; if a1[0]==7 returns sub_2188C74(a1[1]). [REVIEW]
- docs/function_notes/hk_35.md:69 ov9_000 message mapper: sub_2188550(16); if a1[0]==5 with a1[1] set, writes byte at +dword_2188DAC from a1[2]; if a1[0]==7 returns sub_2188C74(a1[1]). [REVIEW]
sub_2188D6C
(not in export)
- docs/function_notes/hk_35.md:70 if a2 non-null, copies the 3-word vector at a2 into a1+dword_2188D80. Vector copy.
sub_2188D84
(not in export)
- docs/function_notes/hk_35.md:71 stores a2 (or default off_2188D90) into a1+dword_2188D94. Setter with default.
sub_2188D98
(not in export)
- docs/function_notes/hk_35.md:72 stores a2 (or default off_2188DA4) into a1+dword_2188DA8. Setter with default.
sub_2188DAC
(not in export)
- docs/function_notes/hk_35.md:73 stores a2 (or default off_2188DB8) into a1+dword_2188DBC. Setter with default.
sub_2188DC0
(not in export)
- vm_model/src/mission_target.rs:28 Default callback pointer used by
sub_2188E04/sub_2188DC0(off_2188E20). - vm_model/src/mission_target.rs:164
sub_2188DC0. - docs/function_notes/hk_35.md:74 stores a2 and a3, copies the vector at a4 if non-null into a1+dword_2188DF8, and stores callback a5 (or default off_2188DFC) at a1+dword_2188E00. Init.
sub_2188E04
(not in export)
- vm_model/src/mission_target.rs:28 Default callback pointer used by
sub_2188E04/sub_2188DC0(off_2188E20). - vm_model/src/mission_target.rs:157
sub_2188E04. - docs/function_notes/hk_35.md:75 stores a2 at a1+dword_2188E1C, zeroes +176, stores callback a3 (or default off_2188E20) at a1+dword_2188E24. Init.
sub_2188E28
(not in export)
- vm_model/src/mission_target.rs:393
sub_2184E4C(->sub_2188E28(o, 25, ..., 54, ...)): the idle AI parameters. - docs/function_notes/hk_35.md:76 stores four words a2..a5 into consecutive fields. Parameter setter.
sub_2188E54
(not in export)
- docs/function_notes/hk_35.md:77 stores a2 and a3 into two fields. Parameter setter.
sub_2188E68
(not in export)
- vm_model/src/mission_target.rs:384
sub_2188E68, the default callback (off_2188E20/off_2188DB8...): back to state 0. - docs/function_notes/hk_35.md:78 thin wrapper that calls the function pointer off_2188E70 with (a1, 0, 0). Trivial.
sub_2188E74
(not in export)
- vm_model/src/mission_target.rs:644 and the callback pointer
+0x1F4is consumed and returned (sub_2188E74). - docs/function_notes.md:1092 one-shot callback invoke: reads the function pointer at *a2, clears it, then calls it
- docs/function_notes/NEEDS_REVIEW.md:1641 one-shot callback invoke: reads the function pointer at *a2, clears the slot, and calls it if non-null. Returns uninitialised result when null. [REVIEW]
- docs/function_notes/hk_35.md:79 one-shot callback invoke: reads the function pointer at *a2, clears the slot, and calls it if non-null. Returns uninitialised result when null. [REVIEW]
sub_2188E8C
export/plan0/ov9_000/sub_2188E8C_02188E8C.c
- vm_model/src/mission_target.rs:196
sub_2188E8C: is the direction (angle, the game's 16-bit atan2 of the offset to the kart) - docs/function_notes/hk_35.md:80 ov9_000 selector: returns dword_2188EA4 when (byte at a1+dword_2188EA0 & 3) == 1, else dword_2188EA8. Trivial.
sub_2188EE4
(not in export)
- vm_model/src/mission_target.rs:206
sub_2188EE4: isa(x, z) withinrangeunits ofb(x, z)? The radius is the soft-float - docs/function_notes.md:1093 XZ-plane circle hit test: offsets from a1+4 and a1+12 to the point a2 (via sub_21484D0), compared with the radius; returns 0 when a2 is null
- docs/function_notes/NEEDS_REVIEW.md:1642 XZ-plane circle hit test: offsets from a1+4/+12 to point a2, radius via sub_2132440/sub_21329F8/sub_2131234 (dword_2188FB8); returns dist^2 < r^2. [REVIEW]
- docs/function_notes/hk_35.md:81 XZ-plane circle hit test: offsets from a1+4/+12 to point a2, radius via sub_2132440/sub_21329F8/sub_2131234 (dword_2188FB8); returns dist^2 < r^2. [REVIEW]
sub_2188FD8
(not in export)
- docs/function_notes.md:1513 iterates the entry list off_21890F0, collecting the entries that pass the collision test
- docs/function_notes/NEEDS_REVIEW.md:1643 iterates entry list off_21890F0, collects entries with flag bit0 clear passing sub_20B5AE8, writing 20-byte records (id 197, type 2/3, flag 0x20). [REVIEW]
- docs/function_notes/hk_35.md:82 iterates entry list off_21890F0, collects entries with flag bit0 clear passing sub_20B5AE8, writing 20-byte records (id 197, type 2/3, flag 0x20). [REVIEW]
sub_2189108
(not in export)
- docs/function_notes/hk_35.md:83 thin wrapper that tail-calls the function pointer off_2189118 with off_218911C and dword_2189120. Trivial.
sub_2189140
(not in export)
- docs/function_notes.md:1514 same collector as sub_2188FD8 over the list off_2189258
- docs/function_notes/NEEDS_REVIEW.md:1644 same collector as sub_2188FD8 but over the list at off_2189258. [REVIEW]
- docs/function_notes/hk_35.md:84 same collector as sub_2188FD8 but over the list at off_2189258. [REVIEW]
sub_2189270
(not in export)
- docs/function_notes/hk_35.md:85 thin wrapper that calls the function pointer off_2189280 with off_2189284 and dword_2189288. Trivial.
sub_21892A8
(not in export)
- docs/function_notes.md:1520 same collector as sub_2188FD8, for object id 197 (off_21893D8)
- docs/function_notes/NEEDS_REVIEW.md:1645 same collector as sub_2188FD8, object id 197 or 198 chosen by sub_218C770(entry) < 2, over the list at off_21893D8. [REVIEW]
- docs/function_notes/hk_35.md:86 same collector as sub_2188FD8, object id 197 or 198 chosen by sub_218C770(entry) < 2, over the list at off_21893D8. [REVIEW]
sub_21893F0
export/plan0/ov9_000/sub_21893F0_021893F0.c
- docs/function_notes.md:1365 (ov9_000, garbled fragment) returns off_2189400(off_2189404, 508)
- docs/function_notes/NEEDS_REVIEW.md:1646 ov9_000 garbled ARM register/stack restore fragment with no meaningful logic. [REVIEW]
- docs/function_notes/hk_35.md:87 ov9_000 garbled ARM register/stack restore fragment with no meaningful logic. [REVIEW]
sub_2189424
(not in export)
- docs/function_notes.md:1519 collision collector over the list off_218954C through the same hit test
- docs/function_notes/NEEDS_REVIEW.md:1647 collision collector over list off_218954C via sub_20B5AE8; hits get id 90 or 89 (sub_2185B30), type 2/3 from sub_20B4E70, value +126; stores count. [REVIEW]
- docs/function_notes/hk_35.md:88 collision collector over list off_218954C via sub_20B5AE8; hits get id 90 or 89 (sub_2185B30), type 2/3 from sub_20B4E70, value +126; stores count. [REVIEW]
sub_2189564
(not in export)
- docs/function_notes/hk_35.md:89 thin wrapper that calls the function pointer off_2189574 with off_2189578 and 110. Trivial.
sub_2189598
(not in export)
- docs/function_notes.md:1512 collision collector over the list off_21896A8 (count from sub_20C0DB0): gathers the entries that pass the hit test
- docs/function_notes/NEEDS_REVIEW.md:1648 collision collector over list off_21896A8 like sub_2189424 but with object id 91 and no sub_2185B30 check. [REVIEW]
- docs/function_notes/hk_35.md:90 collision collector over list off_21896A8 like sub_2189424 but with object id 91 and no sub_2185B30 check. [REVIEW]
sub_21896C0
export/plan0/ov9_000/sub_21896C0_021896C0.c
- docs/function_notes.md:1366 (ov9_000, garbled fragment) returns off_21896D0(off_21896D4, dword_21896D8)
- docs/function_notes/NEEDS_REVIEW.md:1649 ov9_000 garbled ARM coprocessor fragment ending in JUMPOUT to 0x21896CC. Not a usable function. [REVIEW]
- docs/function_notes/hk_35.md:91 ov9_000 garbled ARM coprocessor fragment ending in JUMPOUT to 0x21896CC. Not a usable function. [REVIEW]
sub_21896F8
(not in export)
- docs/function_notes.md:1515 same collector as sub_2188FD8 over the list off_2189810
- docs/function_notes/NEEDS_REVIEW.md:1650 same collector as sub_2188FD8 over list off_2189810 with object id 197. [REVIEW]
- docs/function_notes/hk_35.md:92 same collector as sub_2188FD8 over list off_2189810 with object id 197. [REVIEW]
sub_2189828
export/plan0/ov9_000/sub_2189828_02189828.c
- docs/function_notes/hk_35.md:93 ov9_000 JUMPOUT stub to 0x2189834 with no logic of its own. Trivial.
sub_2189860
(not in export)
- docs/function_notes.md:1516 collision collector over the list off_2189978 with the same test
- docs/function_notes/NEEDS_REVIEW.md:1651 collision collector over list off_2189978 with object id 197, same shape as sub_2188FD8. [REVIEW]
- docs/function_notes/hk_35.md:94 collision collector over list off_2189978 with object id 197, same shape as sub_2188FD8. [REVIEW]
sub_2189990
(not in export)
- docs/function_notes/hk_35.md:95 thin wrapper that calls the function pointer off_21899A0 with off_21899A4 and 504. Trivial.
sub_21899C4
(not in export)
- docs/function_notes.md:1585 collision collector over the list off_2189B9C (472 bytes): gathers the entries that pass the hit test
- docs/function_notes/NEEDS_REVIEW.md:1652 collision collector over list off_2189B9C; hits copy 16 halfwords from table off_2189BA0 entry, call sub_200EE74; id 197, type 2/3. [REVIEW]
- docs/function_notes/hk_35.md:96 collision collector over list off_2189B9C; hits copy 16 halfwords from table off_2189BA0 entry, call sub_200EE74; id 197, type 2/3. [REVIEW]
sub_2189BB8
export/plan0/ov9_000/sub_2189BB8_02189BB8.c
- docs/function_notes/hk_35.md:97 ov9_000 JUMPOUT stub to 0x2189BD0. Trivial.
sub_2189BF0
(not in export)
- docs/function_notes.md:1524 collision collector over the list off_2189D50 (352 bytes), the same hit test as the other collectors
- docs/function_notes/NEEDS_REVIEW.md:1653 collision collector over list off_2189D50; object id 197-200 chosen by sub_218F9A0 and flag bit 0x400. [REVIEW]
- docs/function_notes/hk_35.md:98 collision collector over list off_2189D50; object id 197-200 chosen by sub_218F9A0 and flag bit 0x400. [REVIEW]
sub_2189D68
export/plan0/ov9_000/sub_2189D68_02189D68.c
- docs/function_notes/hk_35.md:99 ov9_000 JUMPOUT stub to 0x2189D6C. Trivial.
sub_2189DEC
(not in export)
- docs/function_notes/hk_35.md:100 calls sub_2186348(a1, a2) then returns sub_21861D4(a1, a2, 0). Two-step wrapper.
sub_2189E0C
(not in export)
- docs/function_notes.md:1475 if a1 is non-null loops over the pointer array at *a1 and calls the entry callback for each
- docs/function_notes/NEEDS_REVIEW.md:1654 if a1 non-null, loops over pointer array at *a1 (count at +4) running per-entry setup: sub_21870C4, sub_2187090, sub_218873C, sub_2188884, sub_21881D4. [REVIEW]
- docs/function_notes/hk_35.md:101 if a1 non-null, loops over pointer array at *a1 (count at +4) running per-entry setup: sub_21870C4, sub_2187090, sub_218873C, sub_2188884, sub_21881D4. [REVIEW]
sub_2189EB8
(not in export)
- docs/function_notes.md:1094 object update: when sub_2187C2C is true resets the object with sub_2187BDC, then sets the state word at dword_2189FB0 = 2
- docs/function_notes/NEEDS_REVIEW.md:1655 object update: optional reset, sets state 2, if sub_21871D8(a1,7) passes computes fixed-point offset, stores via sub_2188930, calls sub_218A3FC. [REVIEW]
- docs/function_notes/hk_35.md:102 object update: optional reset, sets state 2, if sub_21871D8(a1,7) passes computes fixed-point offset, stores via sub_2188930, calls sub_218A3FC. [REVIEW]
sub_2189FC0
(not in export)
- docs/function_notes/hk_35.md:103 if a2 type at +68 is 9 and sub_20FD528 is false, registers callback via sub_208B748(58,...); sets dword_218A000=1 and state via sub_21881D4. Init.
sub_218A008
(not in export)
- docs/function_notes/hk_35.md:104 stores constant dword_218A010 at result+108. Trivial setter.
sub_218A014
(not in export)
- docs/function_notes.md:1417 creates a type-201 object via sub_20AC588(201, 10, a1) and resolves its heap
- docs/function_notes/NEEDS_REVIEW.md:1656 creates type 201 object via sub_20AC588, resolves sub-object into +148 via sub_20364E8/E0 and sub_2036BEC, calls sub_2109110, sets +112. [REVIEW]
- docs/function_notes/hk_35.md:105 creates type 201 object via sub_20AC588, resolves sub-object into +148 via sub_20364E8/E0 and sub_2036BEC, calls sub_2109110, sets +112. [REVIEW]
sub_218A054
(not in export)
- docs/function_notes.md:1489 per-frame state dispatch: when the racer state at *off_218A0FC +8 is 4 and sub_20A126C holds, runs the sub_21871D8 and sub_20A1084 tests
- docs/function_notes/NEEDS_REVIEW.md:1657 per-frame state dispatch: mode and sub_21871D8 checks pick sub_218A3CC/sub_218A2BC or sub_218AAE4/sub_218A73C/sub_218A5EC, ends with sub_218648C. [REVIEW]
- docs/function_notes/hk_35.md:106 per-frame state dispatch: mode and sub_21871D8 checks pick sub_218A3CC/sub_218A2BC or sub_218AAE4/sub_218A73C/sub_218A5EC, ends with sub_218648C. [REVIEW]
sub_218A100
(not in export)
- docs/function_notes.md:1464 loops over the object list; per entry copies two fields from the entry's record into the list entry
- docs/function_notes/NEEDS_REVIEW.md:1658 loops over object list; per entry copies two fields from object+160 into a vector, calls sub_2187C68 (kind 5), then sub_218A17C or sub_218A1EC. [REVIEW]
- docs/function_notes/hk_35.md:107 loops over object list; per entry copies two fields from object+160 into a vector, calls sub_2187C68 (kind 5), then sub_218A17C or sub_218A1EC. [REVIEW]
sub_218A17C
(not in export)
- docs/function_notes/hk_35.md:108 sets state 8 via sub_21871F8, calls sub_2188D44 with fields +52/+56 of a1[160], then sub_2188E04 with +60 and callback off_218A1AC. Init variant.
sub_218A1B0
(not in export)
- docs/function_notes/hk_35.md:109 sets state 8, calls sub_2188D44 with +64/+68, then sub_2188E54 with dword_218A1E4 and off_218A1E8. Init variant.
sub_218A1EC
(not in export)
- docs/function_notes/hk_35.md:110 sets state 8, calls sub_2188D44 with +76/+80, sub_2188E04 with +84 and off_218A228, then sub_20D2774 with dword_218A22C. Init variant.
sub_218A230
(not in export)
- docs/function_notes/hk_35.md:111 sets state 8, calls sub_2188D10 with +88/+92 and off_218A264, then sub_2188E54 with dword_218A268 and off_218A26C. Init variant.
sub_218A270
(not in export)
- docs/function_notes/hk_35.md:112 sets state 8 with off_218A294, then calls sub_2188D44 with +100/+104. Init variant.
sub_218A298
(not in export)
- docs/function_notes/hk_35.md:113 if sub_2061FEC() returns 1 calls sub_2188E68(a1); always returns 0. Conditional callback.
sub_218A2B4
(not in export)
- docs/function_notes/hk_35.md:114 thunk that tail-calls the function pointer off_218A2B8. Trivial.
sub_218A2BC
(not in export)
- docs/function_notes/hk_35.md:115 sets state 8, calls sub_2188D44 with +112/+116, then sub_2188E04 with constant 60 and off_218A2E8. Init variant.
sub_218A2EC
(not in export)
- docs/function_notes.md:1495 object setup: state 8 via sub_21871F8, resets with sub_2187AD4, then sub_21875A0 with the dword_218A3A8 / dword_218A3A4 parameters
- docs/function_notes/NEEDS_REVIEW.md:1659 object setup: state 8, sub_2187AD4 reset, five sub_21875A0 kind-1 spawns, transform from off_218A3BC, ORs flag bits into a1+2. [REVIEW]
- docs/function_notes/hk_35.md:116 object setup: state 8, sub_2187AD4 reset, five sub_21875A0 kind-1 spawns, transform from off_218A3BC, ORs flag bits into a1+2. [REVIEW]
sub_218A3CC
(not in export)
- docs/function_notes/hk_35.md:117 sets state 8, calls sub_2188D44 with +120/+124, then sub_2188C70 (reset) and sub_2188CCC(a1, 0). Init variant.
sub_218A3FC
(not in export)
- docs/function_notes/agent_09.md:7 actor step: if frame counter (sub_2188200) <2 run sub_218A4B0 else sub_218A424, then advance counter (sub_2188240)
sub_218A424
(not in export)
- docs/function_notes/agent_09.md:8 begins action 7: plays param-table animation, clears flag, sets update handler (variant of 218A4B0, uses table +356/+360)
sub_218A480
(not in export)
- docs/function_notes/agent_09.md:9 begins action 7 with animation from param table +112/+116 and sets a next-state callback
sub_218A4B0
(not in export)
- docs/function_notes/agent_09.md:10 begins action 7: plays param-table animation (+356/+360), clears flag, sets update handler (twin of 218A424)
sub_218A50C
(not in export)
- docs/function_notes/agent_09.md:11 begins action 7 with animation from param table +372/+376 and sets a next-state callback
sub_218A548
export/plan0/ov9_000/sub_218A548_0218A548.c
- docs/function_notes/agent_09.md:12 if actor flags (+712) match mask 0x1E3C6F, sets next-state callback (+344) to a handler; returns 0
sub_218A570
(not in export)
- docs/function_notes/agent_09.md:13 if flags match mask: when value +460 > 0x3333 spawns two effects (ids 1041,1042); if >0 plays sound/effect 571
sub_218A5EC
(not in export)
- docs/function_notes/agent_09.md:14 actor init: action 2, plays anim and sets scale/position from table, sets handler, then sets exit-state via sub_218B258
sub_218A690
(not in export)
- docs/function_notes/agent_09.md:15 random/phase test using a fixed-point LCG (sub_20D22D0 state) then picks sub_218AA8C or sub_218A950 state
sub_218A73C
(not in export)
- docs/function_notes/agent_09.md:16 finds nearby kart/object via sub_2188138, begins action 3 with animation, scale, position copied from the target, then sets exit-state
sub_218A808
(not in export)
- docs/function_notes/agent_09.md:17 finds target, links it to actor (sub_2187C40), begins action 3 anim aimed at second target or falls back to sub_218A8F0
sub_218A8F0
(not in export)
- docs/function_notes/agent_09.md:18 if actor has a linked object, begins action 3 with anim from table +212/+216, sets update handler and plays sound 572
sub_218A950
(not in export)
- docs/function_notes/agent_09.md:19 picks a target via sub_21880E4; none -> sub_2188E68 else begins action 3 (attack anim) at target position
sub_218AA14
(not in export)
- docs/function_notes/agent_09.md:20 if no linked object tries to grab one (sub_20FD428); if linked begins action 3 anim and plays sound 572
sub_218AA8C
(not in export)
- docs/function_notes/agent_09.md:21 begins action 3 with anim from table +320/+324, sets handler from +328
sub_218AAE4
export/plan0/ov9_000/sub_218AAE4_0218AAE4.c
- docs/function_notes/agent_09.md:22 spawn-style init: begins action 3, anim, scale, position, rotation from table +380..+404, then sets exit-state
sub_218AB80
(not in export)
- docs/function_notes/agent_09.md:23 begins action 3 with anim from table +408/+412, handler +416, plays sound 568
sub_218ABE4
(not in export)
- docs/function_notes/agent_09.md:24 begins action 3 with anim (+424/+428), rotation, sets handler +444, plays sound 569, ORs a flag into halfword +2
sub_218AC94
(not in export)
- docs/function_notes/agent_09.md:25 init: zeroed rotation vector, begins action 3, anim/scale/position/rotation, handler +472, clears +704
sub_218AD48
(not in export)
- docs/function_notes/agent_09.md:26 spawns 3 ring effects (sub_218AED4), begins action 3 anim (+476/+480), handler +496, clears +704
sub_218ADB0
(not in export)
- docs/function_notes/agent_09.md:27 begins action 3 with anim (+500/+504), rotation, sets +704=1, plays sound 570, sets next state
sub_218AE40
(not in export)
- docs/function_notes/agent_09.md:28 begins action 3 anim (+512/+516), spawns two effects (1041,1042), calls loc_2073FB0 (flag-masked call), clears flag bit 0x20
sub_218AED4
(not in export)
- docs/function_notes/agent_09.md:29 spawns 3 particle objects in a circle (120 degrees apart, sin/cos table 0x0215D4B4) plus one at actor centre
sub_218AFDC
export/plan0/ov9_000/sub_218AFDC_0218AFDC.c
- docs/function_notes/agent_09.md:30 spawns an effect (ids 1040/942, 8192) and plays sound 566
sub_218B014
(not in export)
- docs/function_notes/agent_09.md:31 spawns 3 particle objects around actor on a circle (radius depends on frame count), then an effect and sound 566
sub_218B1B8
(not in export)
- docs/function_notes/agent_09.md:32 if actor holds a linked object, offsets it on a circle (sin/cos of angle +424, radius table +308) via sub_2187BDC
sub_218B258
(not in export)
- docs/function_notes/agent_09.md:33 sets the actor's exit-state parameters (1, callbacks 0x218B289/0x218B279, 31) via sub_2188E28
sub_218B278
(not in export)
- docs/function_notes/agent_09.md:34 thunk: plays sound/effect 567 (sub_20D2774)
sub_218B288
(not in export)
- docs/function_notes/agent_09.md:35 thunk: plays sound/effect 567 (sub_20D2774)
sub_218B298
(not in export)
- docs/function_notes/agent_09.md:36 sets actor state byte +728 = 11 and ORs 0x40000000 into flags +120
sub_218B2B4
(not in export)
- docs/function_notes/agent_09.md:37 thunk to sub_2188200 (frame counter absolute value)
sub_218B2BC
(not in export)
- docs/function_notes/agent_09.md:38 registers a mission-enemy type with sub_209BF48 using two callbacks (0x218B5B8 draw, 0x218B3E4 update)
sub_218B2F0
(not in export)
- docs/function_notes/agent_09.md:39 registers actor class via sub_219B4F0 with three callbacks (init/update/draw 0x2185F90/0x2185EE4/0x21860AC)
sub_218B31C
(not in export)
- docs/function_notes/agent_09.md:40 calls sub_2186348 then sub_21861D4 for a (group, record) pair; group-init wrapper
sub_218B33C
(not in export)
- docs/function_notes/agent_09.md:41 King Goomba (kuriking) group init: for each actor loads kuriking.nsbmd/.nsbca/.prm, sh_circle.nsbmd, .nsbta/.nsbtp/.nsbma and starts it
sub_218B3E4
(not in export)
- docs/function_notes/agent_09.md:42 King Goomba group update: handles hit reactions by remaining HP thresholds (<100,<200), picks hurt/defeat actions, ticks animation timer
sub_218B5B8
(not in export)
- docs/function_notes/agent_09.md:43 King Goomba group draw: for each actor sets animation frame/model and selects alive or dead drawing (sub_218B750/218B7A8)
sub_218B620
(not in export)
- docs/function_notes/agent_09.md:44 King Goomba knocked-away: sets velocity from sin/cos table and param radius, state byte 13, sets state, plays sound 548 if not flagged
sub_218B6D8
(not in export)
- docs/function_notes/agent_09.md:45 sets next-state callback; plays sound 548 unless +720 is set
sub_218B70C
(not in export)
- docs/function_notes/agent_09.md:46 allocates 68-byte block (sub_2036BEC) for actor +148 and inits it (sub_2109110), registers sound 401
sub_218B750
(not in export)
- docs/function_notes/agent_09.md:47 begins action 8 with anim from param table +52/+56, handler +60
sub_218B784
(not in export)
- docs/function_notes/agent_09.md:48 begins action 8 with anim from param table +64/+68
sub_218B7A8
(not in export)
- docs/function_notes/agent_09.md:49 begins action 8 with anim from param table +76/+80, handler +84
sub_218B7DC
(not in export)
- docs/function_notes/agent_09.md:50 begins action 8 with anim +88/+92 and two callbacks
sub_218B808
(not in export)
- docs/function_notes/agent_09.md:51 begins action 8 with anim +100/+104 and a next-state callback
sub_218B830
(not in export)
- docs/function_notes/agent_09.md:52 when current animation frame (sub_209B620 of model +772) is 77 or 104, spawns effect 1067/1068 and plays sound 542/543
sub_218B8B4
(not in export)
- docs/function_notes/agent_09.md:53 if sub_2061FEC()==1 (a global state test) calls sub_2188E68 (action-finish helper); returns 0
sub_218B8D0
(not in export)
- docs/function_notes/agent_09.md:54 thunk to sub_2188298 (action helper)
sub_218B8D8
(not in export)
- docs/function_notes/agent_09.md:55 begins action 8 (death) with anim from param table +112/+116, 60-frame timer, handler
sub_218B908
(not in export)
- docs/function_notes/agent_09.md:56 begins action 8 and spawns 3 particle effects (1046..1048) and a sound at actor position; ORs three flag halfwords into +2 (defeat explosion)
sub_218B994
(not in export)
- docs/function_notes/agent_09.md:57 begins action 8 with anim (+120/+124), scale and rotation copied from the player kart's position (sub_207A974 = kart/player record)
sub_218BA14
(not in export)
- docs/function_notes/agent_09.md:58 runs sub_218BA28 then sub_2188210 (action-start wrapper)
sub_218BA28
(not in export)
- docs/function_notes/agent_09.md:59 begins action 8: anim/frame setup from table +220..+252 and (frame 0 / 1) jumps to sub_218C694 / sub_218C61C hit-size setup; spawns effect 1049/1050
sub_218BB54
(not in export)
- docs/function_notes/agent_09.md:60 per-frame sound: plays sound 544 or 545 depending on action step counter 1 or 2
sub_218BB8C
(not in export)
- docs/function_notes/agent_09.md:61 begins action 7 (stomped hurt) with anim from table +436..+464 aimed at the player kart, then sets exit-state
sub_218BC40
(not in export)
- docs/function_notes/agent_09.md:62 begins action 7 with anim (+468/+472), sets model frame, clears velocity
sub_218BCA4
(not in export)
- docs/function_notes/agent_09.md:63 begins action 7 with anim +480/+484, rotation, plays sound 550, ORs flag 0x20 into +2
sub_218BD60
(not in export)
- docs/function_notes/agent_09.md:64 begins action 7 with anim +504/+508, clears state, clears flag 0x20 in +2
sub_218BDC8
(not in export)
- docs/function_notes/agent_09.md:65 begins action 2 (chase) with anim +308/+312, speed/turn params +316..+344, aims toward player kart; sets exit-state
sub_218BEC4
(not in export)
- docs/function_notes/agent_09.md:66 begins action 2 variant: anim +388/+392, steering params, aims toward player; handler 0x218C085
sub_218BFA8
(not in export)
- docs/function_notes/agent_09.md:67 begins action 2 variant: anim +348/+352, params +356..+384, aims toward player; sets exit-state
sub_218C084
(not in export)
- docs/function_notes/agent_09.md:68 King Goomba (kuriking) shooting: spawns N projectiles in a ring around actor using sin/cos table and random angle offsets
sub_218C334
(not in export)
- docs/function_notes/agent_09.md:69 begins action 1 (idle) with anim from table +152/+156, then sub_218C38C and exit-state
sub_218C38C
(not in export)
- docs/function_notes/agent_09.md:70 picks idle anim/speed set by step counter (0,1,else) from param table and sets scale/position/handlers
sub_218C470
(not in export)
- docs/function_notes/agent_09.md:71 begins action 2 with anim +260/+264, params, aims toward player kart; sets exit-state
sub_218C53C
(not in export)
- docs/function_notes/agent_09.md:72 sets actor target vector/rotation to the model position (sub_2187FA0) then clears; returns 0
sub_218C564
(not in export)
- docs/function_notes/agent_09.md:73 identical to sub_218C53C (copies model position into two actor vectors); returns 0
sub_218C58C
(not in export)
- docs/function_notes/agent_09.md:74 same as sub_218C53C but uses the other target-vector setter (sub_2188948); returns 0
sub_218C5B4
(not in export)
- docs/function_notes/agent_09.md:75 identical to sub_218C58C; returns 0
sub_218C5DC
(not in export)
- docs/function_notes/agent_09.md:76 sets exit-state parameters (32, 64, callbacks 0x218C60D/0x218C5FD) via sub_2188E28
sub_218C5FC
(not in export)
- docs/function_notes/agent_09.md:77 thunk: plays sound/effect 547
sub_218C60C
(not in export)
- docs/function_notes/agent_09.md:78 thunk: plays sound/effect 547
sub_218C61C
(not in export)
- docs/function_notes/agent_09.md:79 sets actor collision box from param table (x3 scale) via sub_21886D8 and sets two limit values 215040/147456
sub_218C694
(not in export)
- docs/function_notes/agent_09.md:80 sets actor collision box from param table (x2 scale) via sub_21886D8 and two limit values 143360/98304
sub_218C708
(not in export)
- docs/function_notes/agent_09.md:81 sets actor collision size from param table (+8,+12,+532) and two limit values 71680/49152
sub_218C770
(not in export)
- docs/function_notes/agent_09.md:82 getter: returns sub_209B60C(model +772) (animation/model property)
sub_218C7B4
(not in export)
- docs/function_notes/agent_09.md:83 registers actor class via sub_219B4F0 with init/update/draw callbacks 0x2185F90/0x2185EE4/0x21860AC
sub_218C810
(not in export)
- docs/function_notes/agent_09.md:84 same registration as sub_218C7B4 (second enemy class sharing the same callbacks)
sub_218C83C
(not in export)
- docs/function_notes/agent_09.md:85 calls sub_2186348 then sub_21861D4 (group init wrapper)
sub_218C85C
(not in export)
- docs/function_notes/agent_09.md:86 Wiggler (hanachan) group init: loads hanachan_1/2.nsbca, hanachan_1.nsbtp, hanachan_1..4.nsbmd for the 4 body segments, links their data
sub_218CAF4
(not in export)
- docs/function_notes/agent_09.md:87 Wiggler (hanachan) head init: loads hanachan.nsbmd/.nsbca/.prm, sh_circle.nsbmd, hanachan.nsbtp for each actor
sub_218CBBC
(not in export)
- docs/function_notes/agent_09.md:88 Wiggler hit reaction: knocks the kart/actor sideways (velocity from sin/cos table by facing +-90 deg), state byte 10 or 12, plays sound 593/594
sub_218CD60
export/plan0/ov9_000/sub_218CD60_0218CD60.c
- docs/function_notes/agent_09.md:89 allocates 68-byte block for actor +148, inits it (sub_2109110, type 13), registers handler from table
sub_218CD98
(not in export)
- docs/function_notes/agent_09.md:90 creates 4 chained sub-actors (type 510) linked via +164 (Wiggler body segments), then allocates +148 block like sub_218CD60
sub_218CE10
(not in export)
- docs/function_notes/agent_09.md:91 Wiggler segment update: runs sub_218DC00/218DB88 and a collision test; plays sound 595 on result 2; then sub_218648C
sub_218CE70
(not in export)
- docs/function_notes/agent_09.md:92 Wiggler group draw: per actor picks death anim (sub_218CFFC / 218CFC8 / 218D054) depending on state
sub_218CEBC
(not in export)
- docs/function_notes/agent_09.md:93 Wiggler group update: picks action by player/state tests (sub_218D354/218D2A4/218D3CC), collision test, sound 595, sub_218648C
sub_218CF74
(not in export)
- docs/function_notes/agent_09.md:94 Wiggler group late-update: sets flag +708, then picks death anim variant (sub_218D168/218D1C0)
sub_218CFC8
(not in export)
- docs/function_notes/agent_09.md:95 begins action 8 with anim from table +100/+104, handler +84
sub_218CFFC
(not in export)
- docs/function_notes/agent_09.md:96 begins action 8 with anim +52/+56, handler +60
sub_218D030
(not in export)
- docs/function_notes/agent_09.md:97 begins action 8 with anim +64/+68
sub_218D054
(not in export)
- docs/function_notes/agent_09.md:98 begins action 8 with anim +76/+80, handler +84
sub_218D088
(not in export)
- docs/function_notes/agent_09.md:99 begins action 8 with anim +88/+92 and two callbacks
sub_218D0B4
(not in export)
- docs/function_notes/agent_09.md:100 begins action 8 with anim +100/+104 and a next-state callback
sub_218D0DC
(not in export)
- docs/function_notes/agent_09.md:101 when current anim frame is 51 or 102, spawns effect 1076 with offset -2458/+2458 (left/right foot puff)
sub_218D14C
export/plan0/ov9_000/sub_218D14C_0218D14C.c
- docs/function_notes/agent_09.md:102 if sub_2061FEC()==1 calls sub_218D930; returns 0
sub_218D168
(not in export)
- docs/function_notes/agent_09.md:103 begins action 8 with anim +52/+56, handler +60
sub_218D19C
(not in export)
- docs/function_notes/agent_09.md:104 begins action 8 with anim +64/+68
sub_218D1C0
(not in export)
- docs/function_notes/agent_09.md:105 begins action 8 with anim +76/+80, handler +84
sub_218D1F4
(not in export)
- docs/function_notes/agent_09.md:106 begins action 8 with anim +88/+92 and a handler
sub_218D21C
(not in export)
- docs/function_notes/agent_09.md:107 begins action 8 with anim +100/+104 and next-state callback
sub_218D244
export/plan0/ov9_000/sub_218D244_0218D244.c
- docs/function_notes/agent_09.md:108 if sub_2061FEC()==1 calls sub_218D4A8; returns 0
sub_218D260
(not in export)
- docs/function_notes/agent_09.md:109 Wiggler group tick: runs sub_2188298, then for each segment actor of type 510 calls sub_218DABC and sub_218DA9C
sub_218D2A4
(not in export)
- docs/function_notes/agent_09.md:110 Wiggler enters hurt state: begins action 8, anim +112/+116, also puts every body segment into action 1 with same anim; spawns an effect at the actor
sub_218D354
(not in export)
- docs/function_notes/agent_09.md:111 Wiggler enters action 8 (anim +120/+124) and sets every body segment to action 1 with the same anim
sub_218D3CC
(not in export)
- docs/function_notes/agent_09.md:112 Wiggler (re)start: speed scale from remaining-lives count (sub_20A1154) x4096 factor, begins action 1, sets anim, applies speed to head/segments
sub_218D4A8
(not in export)
- docs/function_notes/agent_09.md:113 Wiggler start variant without life scaling: action 1, anim +136/+140, speed set from sub_2187F18, then exit-state
sub_218D500
(not in export)
- docs/function_notes/agent_09.md:114 Wiggler chase/update: scales speed by lives, checks player collision to trigger hit action 3 (sound 587), angry-mode bursts, spawns effects 1016/1017, sounds 590/591
sub_218D7E0
(not in export)
- docs/function_notes/agent_09.md:115 sets +336=1 and starts animation from table +136/+140
sub_218D804
(not in export)
- docs/function_notes/agent_09.md:116 scales Wiggler turn rate and speed from param table by percent a2 (divide by 100), refreshes target position
sub_218D85C
(not in export)
- docs/function_notes/agent_09.md:117 applies percent a2 to every body segment actor: sets each segment's speed (+316) and turn-limit (+404)
sub_218D8D4
(not in export)
- docs/function_notes/agent_09.md:118 applies percent a2 to animation speed (+140 x a2/100) for the head; loops over segment list
sub_218D930
(not in export)
- docs/function_notes/agent_09.md:119 sets head animation by anim table, computes anim speed via floating-point helpers (2^(x/...) pitch) and writes it into the model's animation object
sub_218D9AC
(not in export)
- docs/function_notes/agent_09.md:120 for each Wiggler segment sets handler with timer 15*+168, then calls sub_218D9FC
sub_218D9FC
(not in export)
- docs/function_notes/agent_09.md:121 Wiggler anger burst: spawns effects 1062,1063, plays sounds 589/588, advances step counter (wraps at 3), sets model frame
sub_218DA9C
(not in export)
- docs/function_notes/agent_09.md:122 copies parent segment's heading (+388) into own heading (+388,+424)
sub_218DABC
(not in export)
- docs/function_notes/agent_09.md:123 positions a Wiggler body segment on a circle around its parent (radius by segment index 1..4 from param table), uses sin/cos table
sub_218DB88
(not in export)
- docs/function_notes/agent_09.md:124 Wiggler segment heading follow: counts down +316; then turns heading (+388) toward parent heading limited by +404 per frame
sub_218DC00
(not in export)
- docs/function_notes/agent_09.md:125 like sub_218DABC but only sets X and Z positions (keeps Y)
sub_218DCC4
(not in export)
- docs/function_notes/agent_09.md:126 sets exit-state parameters (12, 32, callbacks 0x218DD31/0x218DCE5) via sub_2188E28
sub_218DCE4
export/plan0/ov9_000/sub_218DCE4_0218DCE4.c
- docs/function_notes/agent_09.md:127 plays sound 584, 585 or 586 depending on step counter (>=2, 1, 0)
sub_218DD30
(not in export)
- docs/function_notes/agent_09.md:128 same as sub_218DCE4 (plays sound 584/585/586 by step counter)
sub_218DD7C
(not in export)
- docs/function_notes/agent_09.md:129 clears +736 and calls sub_21881D4 (clears a callback)
sub_218DDC8
(not in export)
- docs/function_notes/agent_09.md:130 registers actor class via sub_219B4F0 with the shared init/update/draw callbacks (flag 0)
sub_218DDF4
export/plan0/ov9_000/sub_218DDF4_0218DDF4.c
- docs/function_notes/agent_09.md:131 group init wrapper: sub_2186348 then sub_21861D4 with 1 if a2[42] is set else 0
sub_218DE30
(not in export)
- docs/function_notes/agent_09.md:132 King Teresa (King Boo) group init: for each actor loads king_teresa.nsbmd/.nsbca/.prm and sh_circle.nsbmd, sets scale, flags, state 3
sub_218DF00
(not in export)
- docs/function_notes/agent_09.md:133 King Teresa group update: picks attack/vanish/hurt states by phase, player flags (sub_207A974 +72), and timers; main boss AI dispatcher
sub_218E1E8
(not in export)
- docs/function_notes/agent_09.md:134 King Teresa group draw: per actor picks death anim variant (sub_218E48C/218E500) and updates camera-focus data
sub_218E278
(not in export)
- docs/function_notes/agent_09.md:135 King Teresa knocked/dying: sets velocity Y from table, state byte 12, flag-masked call, sets scale, step counter=1
sub_218E324
(not in export)
- docs/function_notes/agent_09.md:136 King Teresa phase advance: if timer ok runs sub_218EDA8, state byte 13, sets handler, plays sound 564 unless flagged
sub_218E36C
(not in export)
- docs/function_notes/agent_09.md:137 King Teresa hit reaction: pushes away from player by -param[+36] along sin/cos of angle, runs sub_218EAB0, resets phase vars, sound 556
sub_218E454
(not in export)
- docs/function_notes/agent_09.md:138 allocates 68-byte block for actor +148 (type 14) and registers handler (like sub_218CD60)
sub_218E48C
(not in export)
- docs/function_notes/agent_09.md:139 begins action 8 with anim +52/+56, handler +60; raises Y by param +128 and clears two velocity words
sub_218E4E8
(not in export)
- docs/function_notes/agent_09.md:140 begins action 8 and calls sub_218F8E0
sub_218E500
(not in export)
- docs/function_notes/agent_09.md:141 begins action 8 with anim +76/+80, handler +84, raises Y by param +128
sub_218E544
(not in export)
- docs/function_notes/agent_09.md:142 begins action 8 with anim +88/+92 and a handler
sub_218E56C
(not in export)
- docs/function_notes/agent_09.md:143 thunk to sub_2188298
sub_218E574
(not in export)
- docs/function_notes/agent_09.md:144 begins action 8 with anim +112/+116, clears target/velocity
sub_218E5A4
(not in export)
- docs/function_notes/agent_09.md:145 begins action 8 with anim +112/+116, 60-frame timer, saves old global mode (*0x217D1EC) and sets it to 7, clears flag bit 0
sub_218E630
(not in export)
- docs/function_notes/agent_09.md:146 when step timer (+176) equals 50 spawns a sound/particle at actor (0x22F effect)
sub_218E670
(not in export)
- docs/function_notes/agent_09.md:147 begins action 8 with anim +112/+116, spawns effects 1021,1022, sets global mode 7, ORs flag bits into +2
sub_218E6F0
(not in export)
- docs/function_notes/agent_09.md:148 begins action 8 with anim +120/+124, sets global mode 6, calls sub_206184C
sub_218E740
(not in export)
- docs/function_notes/agent_09.md:149 begins action 5 (aggro), sub_218F830, sets handler from +424, sets global mode 3
sub_218E790
(not in export)
- docs/function_notes/agent_09.md:150 begins action 1 and sets size to 102400 (0x19000)
sub_218E7B0
(not in export)
- docs/function_notes/agent_09.md:151 begins action 1 (idle), anim +408/+412, turn params +416/+420, sets global mode 3, ORs flag 1
sub_218E840
(not in export)
- docs/function_notes/agent_09.md:152 begins action 5, sub_218F830, handler from +424, global mode 3 (twin of sub_218E740)
sub_218E890
export/plan0/ov9_000/sub_218E890_0218E890.c
- docs/function_notes/agent_09.md:153 begins action 1, size 102400, calls sub_206184C and sub_21827D0
sub_218E8B8
(not in export)
- docs/function_notes/agent_09.md:154 begins action 5 with anim +360/+364, sound 560, calls sub_2182A1C(0)
sub_218E90C
(not in export)
- docs/function_notes/agent_09.md:155 King Teresa dive attack start: action 5, anim +368/+372, spawns effects 1072-1074, global mode 4, sets timers from param +12/2
sub_218EA78
(not in export)
- docs/function_notes/agent_09.md:156 lowers actor Y by param +136 but not below ground (+132); calls sub_2061860; returns 0
sub_218EAB0
(not in export)
- docs/function_notes/agent_09.md:157 King Teresa move to next phase position: action 5, step phase mapping 1->2,2->3,3->3,else 1, global mode 3, resets timers
sub_218EB74
(not in export)
- docs/function_notes/agent_09.md:158 King Teresa re-appear: places actor at model position with Y offset, advances random state, action 5, global mode 5
sub_218EC20
(not in export)
- docs/function_notes/agent_09.md:159 King Teresa idle by phase: action 1, picks anim and speed params for phase 1/2/3, sets global mode 5
sub_218ED98
(not in export)
- docs/function_notes/agent_09.md:160 calls sub_2061860; returns 0
sub_218EDA8
(not in export)
- docs/function_notes/agent_09.md:161 begins action 3 with anim +324/+328 and various params, positioned at player kart
sub_218EE68
(not in export)
- docs/function_notes/agent_09.md:162 positions actor at offset -param[+232] from player kart direction; sets heading toward kart; clears flag 1
sub_218EF10
(not in export)
- docs/function_notes/agent_09.md:163 begins action 3 with anim +144/+148, speed, sets global mode 0
sub_218EFA4
(not in export)
- docs/function_notes/agent_09.md:164 King Teresa chase tick: tracks player, scales speed by remaining time (float math), switches to sub_218F14C when time <= threshold else finishes
sub_218F14C
(not in export)
- docs/function_notes/agent_09.md:165 begins action 3 with anim +196/+200, places actor at offset from player, sets global mode 1
sub_218F224
(not in export)
- docs/function_notes/agent_09.md:166 if player flags allow, places actor at offset from the player and follows it; then calls sub_218F6B8
sub_218F288
(not in export)
- docs/function_notes/agent_09.md:167 King Teresa begin action 5 (swoop): anim +236/+240, position offset from player kart by param +540, global mode 2, handler 0x218E279
sub_218F38C
(not in export)
- docs/function_notes/agent_09.md:168 if player not in flagged state, copies player position into actor target, then sub_218F6B8 (camera-relative offset); returns 0
sub_218F3CC
(not in export)
- docs/function_notes/agent_09.md:169 tracks player at offset param[+540] along its heading; target pos set; sub_218F6B8; sub_2061860; returns 0
sub_218F434
(not in export)
- docs/function_notes/agent_09.md:170 begins action 5 with anim +472/+476, aims at player, sets handler +496, plays sound 553
sub_218F4FC
(not in export)
- docs/function_notes/agent_09.md:171 begins action 5 with anim +500/+504, handler; calls sub_21828D0
sub_218F55C
(not in export)
- docs/function_notes/agent_09.md:172 begins action 5 with anim +508/+512, params +516..+532, aims at player; sets exit handler
sub_218F614
(not in export)
- docs/function_notes/agent_09.md:173 copies player position to actor and rotation vectors when not in flagged state; sub_218F6B8; sub_2061860; returns 0
sub_218F668
(not in export)
- docs/function_notes/agent_09.md:174 like sub_218F614 but without sub_2061860; returns 0
sub_218F6B8
(not in export)
- docs/function_notes/agent_09.md:175 gets camera pos/target (sub_2181A68/2181A74, multiplayer-only), subtracts and sets actor movement vector with Y=0
sub_218F704
(not in export)
- docs/function_notes/agent_09.md:176 computes camera-relative offset for actor: rotates (actor pos - camera target) by camera yaw and stores correction vector via sub_2188930
sub_218F830
(not in export)
- docs/function_notes/agent_09.md:177 begins anim from table +408/+412, spawns effects 1054..1056, plays sound 557, ORs flag 1 into +2
sub_218F8E0
(not in export)
- docs/function_notes/agent_09.md:178 begins anim +408/+412, spawns effects 1051..1053, plays sound 558, clears flag 1
sub_218F988
(not in export)
- docs/function_notes/agent_09.md:179 clears +728 and calls sub_21881E0 (clears callback)
sub_218F9A0
(not in export)
- docs/function_notes/agent_09.md:180 getter: returns (actor +168 == 2)
sub_218F9B4
(not in export)
- docs/function_notes/agent_09.md:181 registers an enemy type with sub_209BF48 using callbacks 0x218FCA4 and 0x218FC2C
sub_218FA00
(not in export)
- docs/function_notes/agent_09.md:182 registers actor class via sub_219B4F0 with shared callbacks and params 538/534 (iwante class)
sub_218FA38
(not in export)
- docs/function_notes/agent_09.md:183 group init wrapper: sub_2186348 then sub_21861D4(group, rec, 0)
sub_218FA58
(not in export)
- docs/function_notes/agent_09.md:184 iwante_l group init: for each actor loads iwante_l.nsbmd/.nsbca/.prm, sh_iwante.nsbmd, iwante_l.nsbtp; sets flags per index
sub_218FB04
(not in export)
- docs/function_notes/agent_09.md:185 iwante group update: pick state by player, sub_2190DD8/2190E90, ticks animation frame up or down by +168 flag
sub_218FBC0
(not in export)
- docs/function_notes/agent_09.md:186 iwante group draw: for each actor picks anim (sub_218FED8 / 218FF44), sub_219244C, sets callback
sub_218FC2C
(not in export)
- docs/function_notes/agent_09.md:187 iwante controller update: when not in a flagged state and counter>=1 picks sub_21907FC or sub_2190448; then sub_218648C
sub_218FCA4
(not in export)
- docs/function_notes/agent_09.md:188 iwante group late init: loads iwante_l.prm per actor, sets it up (sub_2190060)
sub_218FD00
(not in export)
- docs/function_notes/agent_09.md:189 iwante hit check vs player: computes angle to player (sub_2148714 = atan2), if within allowed arc pushes the paired actors, spawns effects 1003..1005, sets state byte 2
sub_218FEC0
(not in export)
- docs/function_notes/agent_09.md:190 sets +736=2 and clears callback (sub_21881D4)
sub_218FED8
(not in export)
- docs/function_notes/agent_09.md:191 begins action 8 with anim +52/+56, handler +60, calls sub_21871EC
sub_218FF14
(not in export)
- docs/function_notes/agent_09.md:192 begins action 8 with anim +64/+68, sets callback 0x2190011
sub_218FF44
(not in export)
- docs/function_notes/agent_09.md:193 begins action 8 with anim +76/+80, handler +84
sub_218FF78
(not in export)
- docs/function_notes/agent_09.md:194 begins action 8 with anim +88/+92, calls sub_21923C0, plays sound 539
sub_218FFB4
(not in export)
- docs/function_notes/agent_09.md:195 begins action 8 with anim +100/+104 and spawns effects 1069, 1070
sub_2190010
(not in export)
- docs/function_notes/agent_09.md:196 spawns effects 1041, 1042 (smoke puffs)
sub_219004C
(not in export)
- docs/function_notes/agent_09.md:197 runs sub_219008C then advances step counter (sub_2188240)
sub_2190060
(not in export)
- docs/function_notes/agent_09.md:198 begins action 8 with a callback (via sub_21871F8)
sub_2190070
(not in export)
- docs/function_notes/agent_09.md:199 if sub_2061FEC()==1 calls sub_2190308; returns 0
sub_219008C
(not in export)
- docs/function_notes/agent_09.md:200 iwante controller: begins action 3, gets the 3 iwante sibling actors, starts sub_2191044 or sub_2190FA4 on first two depending on third's counter (<2)
sub_2190148
(not in export)
- docs/function_notes/agent_09.md:201 iwante controller wait: when both hands are idle, branches by third actor's counter (1 -> sub_2190250, 2 -> sub_2190228, else finish)
sub_2190228
(not in export)
- docs/function_notes/agent_09.md:202 sets +? via sub_21881F8 from param +492 then calls sub_2190BE8
sub_2190250
(not in export)
- docs/function_notes/agent_09.md:203 iwante controller: begins action 3, toggles +168 between 4 and 5 (left/right), starts sub_2191E70/sub_2191B20 on the two hands
sub_2190308
(not in export)
- docs/function_notes/agent_09.md:204 iwante controller: like sub_2190250 but starts sub_2191BA0/sub_2191DFC on the two hands
sub_21903C0
(not in export)
- docs/function_notes/agent_09.md:205 when both iwante hands are idle (state<3), finishes controller action
sub_2190448
(not in export)
- docs/function_notes/agent_09.md:206 iwante controller: begins action 3 aimed at player, starts sub_2192154/sub_21920BC on the two hands depending on +168 (4/5)
sub_219050C
(not in export)
- docs/function_notes/agent_09.md:207 iwante controller: while hands overlap and player collides in range, starts sub_21905D8
sub_21905D8
(not in export)
- docs/function_notes/agent_09.md:208 iwante controller: begins action 3, starts sub_21912F8/sub_2191DFC on the two hands depending on +168
sub_2190668
(not in export)
- docs/function_notes/agent_09.md:209 iwante controller swap: when active hand is idle, toggles +168 4/5, re-aims at player and starts sub_2191EAC/sub_2191F50 on hands
sub_219077C
(not in export)
- docs/function_notes/agent_09.md:210 iwante controller: when both hands are idle finish action
sub_21907FC
(not in export)
- docs/function_notes/agent_09.md:211 iwante controller: begins action 3, starts sub_2191B20 on both hands
sub_2190888
(not in export)
- docs/function_notes/agent_09.md:212 iwante controller: aims at player; when both hands idle sets counter 4 and calls sub_2190928
sub_2190928
(not in export)
- docs/function_notes/agent_09.md:213 iwante controller: if no prior hand state calls sub_2190AAC; else aims at player and starts sub_2191BF4/sub_21920BC on the two hands
sub_2190A00
(not in export)
- docs/function_notes/agent_09.md:214 iwante controller: when both hands idle toggles +168 (4/5) and calls sub_2190928
sub_2190AAC
(not in export)
- docs/function_notes/agent_09.md:215 iwante controller: begins action 3, starts sub_2191BA0 on both hands
sub_2190B38
(not in export)
- docs/function_notes/agent_09.md:216 iwante controller: aims at player; when both hands idle sets counter from param +492 and calls sub_2190BE8
sub_2190BE8
(not in export)
- docs/function_notes/agent_09.md:217 iwante controller: depending on flag starts sub_2191188 or sub_21918A8 on both hands (begins action 3)
sub_2190CE0
(not in export)
- docs/function_notes/agent_09.md:218 iwante controller: when both hands idle, calls sub_2190BE8
sub_2190D58
(not in export)
- docs/function_notes/agent_09.md:219 iwante controller: when both hands idle, finishes action
sub_2190DD0
(not in export)
- docs/function_notes/agent_09.md:220 thunk to sub_2188298
sub_2190DD8
(not in export)
- docs/function_notes/agent_09.md:221 iwante begin action by +168: 1 -> action 8 anim +120/+124; else action 3 anim +692/+696, spawns effects 1069/1070
sub_2190E90
(not in export)
- docs/function_notes/agent_09.md:222 begins action 8 with anim +112/+116, 60-frame timer
sub_2190EC0
(not in export)
- docs/function_notes/agent_09.md:223 begins action 8, spawns 5 effects, plays a 3D sound at the actor, ORs flags into +2 (defeat burst)
sub_2190FA4
(not in export)
- docs/function_notes/agent_09.md:224 iwante hand: begins action 7 with anim +572/+576, sets +704=1, sets hand motion path (sub_219224C), plays sound 534
sub_2191014
(not in export)
- docs/function_notes/agent_09.md:225 begins action 7 with anim +588/+592
sub_2191044
(not in export)
- docs/function_notes/agent_09.md:226 iwante hand: begins action 7 with anim +540/+544, +704=1, sets hand motion path (sub_219224C), plays sound 534
sub_21910B4
(not in export)
- docs/function_notes/agent_09.md:227 if actor flags (+712) match mask 0x1E3C6F sets next-state callback (+344) to a handler; returns 0
sub_21910DC
(not in export)
- docs/function_notes/agent_09.md:228 if flags match mask plays sound 536 and clears +344 callback; returns 0
sub_2191110
(not in export)
- docs/function_notes/agent_09.md:229 begins action 7 with anim +556/+560, then sets hand path via sub_21921C4
sub_219114C
export/plan0/ov9_000/sub_219114C_0219114C.c
- docs/function_notes/agent_09.md:230 begins action 7 with anim +564/+568, then sets hand path via sub_21922C0
sub_2191188
(not in export)
- docs/function_notes/agent_09.md:231 iwante hand slam: action 3, anim +460/+464, aims at player, sets turn params, handler; zeroed vector
sub_2191238
(not in export)
- docs/function_notes/agent_09.md:232 iwante hand impact: action 3, anim +528/+532, plays sound 536, spawns effects 1044/1045 (dust), flag-masked call
sub_21912F8
(not in export)
- docs/function_notes/agent_09.md:233 iwante hand: begins action 3, anim +140/+144, aims at player, turn params +148/+152, handler +168
sub_2191398
(not in export)
- docs/function_notes/agent_09.md:234 iwante hand: begins action 3 with anim +208/+212, turn params, aimed at player, sets +704=0
sub_2191450
(not in export)
- docs/function_notes/agent_09.md:235 plays sound 540 (sub_20D275C); returns 0
sub_2191468
(not in export)
- docs/function_notes/agent_09.md:236 iwante hand: begins action 3, anim +240/+244, picks handler by sibling counter, sets +704=1
sub_2191530
(not in export)
- docs/function_notes/agent_09.md:237 iwante hand impact: action 3, anim +268/+272, plays sound 536, spawns effects 1044/1045
sub_21915F8
(not in export)
- docs/function_notes/agent_09.md:238 iwante hand impact: action 3, anim +280/+284, plays sound 536, spawns effects 1044/1045
sub_21916C0
(not in export)
- docs/function_notes/agent_09.md:239 iwante hand: sets heading +-90 degrees (by flag 0x400), begins action 3, anim +296/+300, spawns effect 1075
sub_21917B0
(not in export)
- docs/function_notes/agent_09.md:240 iwante hand: begins action 3 with anim +328/+332, spawns effect 1075
sub_2191850
(not in export)
- docs/function_notes/agent_09.md:241 plays sound 537; returns 0
sub_2191868
(not in export)
- docs/function_notes/agent_09.md:242 if +372 <= 0 clears callbacks and state else plays sound 537; returns 0
sub_21918A8
(not in export)
- docs/function_notes/agent_09.md:243 iwante hand: begins action 3 with anim +356/+360, orientation/turn params, aims at actor position
sub_2191960
(not in export)
- docs/function_notes/agent_09.md:244 iwante hand: begins action 3 with anim +388/+392 and turn params, clears +704
sub_2191A1C
(not in export)
- docs/function_notes/agent_09.md:245 iwante hand: begins action 3 with anim +420/+424 and turn params, +704=1
sub_2191ABC
(not in export)
- docs/function_notes/agent_09.md:246 iwante hand: begins action 3 with anim +448/+452, clears velocity
sub_2191B20
(not in export)
- docs/function_notes/agent_09.md:247 iwante hand: begins action 3 anim +692/+696, sets hand path (sub_2192338), spawns effects 1069/1070
sub_2191BA0
(not in export)
- docs/function_notes/agent_09.md:248 iwante hand: begins action 3 anim +684/+688, sets hand path (sub_21922C0), plays sound 533
sub_2191BF4
(not in export)
- docs/function_notes/agent_09.md:249 iwante hand: begins action 3 anim +668/+672, aims at player, spawns effects 1069/1070, clears +704
sub_2191CD4
(not in export)
- docs/function_notes/agent_09.md:250 iwante hand: like sub_2191BF4 but aims opposite (negated)
sub_2191DA8
(not in export)
- docs/function_notes/agent_09.md:251 plays sound 541; returns 0
sub_2191DC0
(not in export)
- docs/function_notes/agent_09.md:252 finishes action (sub_2188E68), clears velocity, +704=1
sub_2191DFC
(not in export)
- docs/function_notes/agent_09.md:253 iwante hand: begins action 1 anim +660/+664, spawns effects 1069/1070
sub_2191E70
(not in export)
- docs/function_notes/agent_09.md:254 iwante hand: begins action 1 anim +652/+656, clears velocity
sub_2191EAC
(not in export)
- docs/function_notes/agent_09.md:255 iwante hand: begins action 3 anim +692/+696, aims at player, sets hand path, spawns effects 1069/1070
sub_2191F50
(not in export)
- docs/function_notes/agent_09.md:256 iwante hand: begins action 3 anim +684/+688, hand path via sub_21922C0, sound 533
sub_2191FC8
(not in export)
- docs/function_notes/agent_09.md:257 iwante hand: begins action 1 anim +660/+664, aims at player, spawns effects 1069/1070
sub_2192060
(not in export)
- docs/function_notes/agent_09.md:258 iwante hand: begins action 1 anim +652/+656, aims at player
sub_21920BC
(not in export)
- docs/function_notes/agent_09.md:259 iwante hand: begins action 1 anim +596/+600, aims at player, spawns effects 1069/1070
sub_2192154
(not in export)
- docs/function_notes/agent_09.md:260 iwante hand: begins action 1 anim +636/+640, aims at player
sub_21921C4
(not in export)
- docs/function_notes/agent_09.md:261 sets +168=1 and the 6 hand-motion arc constants (position keyframes) via sub_2188464/sub_21885B4
sub_219224C
(not in export)
- docs/function_notes/agent_09.md:262 sets +168=3 and hand-motion keyframes (variant)
sub_21922C0
(not in export)
- docs/function_notes/agent_09.md:263 sets +168=2 and hand-motion keyframes (variant)
sub_2192338
(not in export)
- docs/function_notes/agent_09.md:264 sets +168=1 and hand-motion keyframes (variant with callback 0x218FD01)
sub_21923C0
(not in export)
- docs/function_notes/agent_09.md:265 sets +168=1 and hand-motion keyframes (variant)
sub_219244C
(not in export)
- docs/function_notes/agent_09.md:266 sets +168=0, clears keyframes, sets final keyframe (idle hand pose)
sub_21924AC
(not in export)
- docs/function_notes/agent_09.md:267 positions both iwante hands relative to controller actor 2 along sin/cos of its heading (left/right offsets, two radii)
sub_2192674
(not in export)
- docs/function_notes/agent_09.md:268 computes a point on a circle around controller actor 2 toward the player kart and stores it as target
sub_2192774
(not in export)
- docs/function_notes/agent_09.md:269 sets state byte +728 = 11, sets callback and ORs 0x40000000 into flags +120
sub_21927A0
(not in export)
- docs/function_notes/agent_09.md:270 iwante hand knocked: if +720<=0 sets velocity from sin/cos by heading (state 13) else state 2; flag-masked call
sub_2192858
(not in export)
- docs/function_notes/agent_09.md:271 sets state byte +728 = 2 and clears callback
sub_2192870
(not in export)
- docs/function_notes/agent_09.md:272 allocates 68-byte block for actor +148 (type 12) and registers handler
sub_21928A8
(not in export)
- docs/function_notes/agent_09.md:273 key-bind test: maps button mask (A,B,...,X,Y bits) to a config entry in *0x21A9BA8 and returns whether it is bound as 1 or 15
sub_21929E4
(not in export)
- docs/function_notes/agent_09.md:274 getter: returns (halfword at 0x021758C8+34) AND mask (key state)
sub_21929F4
(not in export)
- docs/function_notes/agent_09.md:275 getter: returns (halfword at 0x021758C8+32) AND mask (key state)
sub_2192A04
(not in export)
- docs/function_notes/agent_09.md:276 getter: returns field +40 of structure at *0x021A9BA8
sub_2192A10
(not in export)
- docs/function_notes/agent_09.md:277 getter: returns field +28 of structure at *0x021A9BA8
sub_2192A1C
(not in export)
- docs/function_notes/agent_09.md:278 getter: returns field +24 of structure at *0x021A9BA8
sub_2192A28
(not in export)
- docs/function_notes/agent_09.md:281 getter: returns field +16 of input-state struct at *0x021A9BA8 (touch-down flag)
sub_2192A34
(not in export)
- docs/function_notes/agent_09.md:282 getter: returns field +8 of input-state struct (touch pressed edge)
sub_2192A40
(not in export)
- docs/function_notes/agent_09.md:283 getter: returns field +4 of input-state struct (touch Y)
sub_2192A4C
(not in export)
- docs/function_notes/agent_09.md:284 getter: returns field +0 of input-state struct (touch X)
sub_2192A58
(not in export)
- docs/function_notes/agent_09.md:285 per-frame input update: shifts previous touch coords, derives touch press/release/hold edges and 60-frame long-press, builds repeat counters for D-pad/buttons
sub_2192D08
(not in export)
- docs/function_notes/agent_09.md:286 allocates 84-byte input-state struct from heap and stores at 0x021A9BA8
sub_2192D40
(not in export)
- docs/function_notes/agent_09.md:287 creates a model/actor object via sub_209BFA8(0,0,0,0,1)
sub_2192D5C
(not in export)
- docs/function_notes/agent_09.md:288 draw callback: sends GX MTX_RESTORE (30), mult-matrix from object scale/pos (>>4) and scale, then draws model via sub_209BB2C
sub_2192DB4
(not in export)
- docs/function_notes/agent_09.md:289 loads StopSign.nsbmd into model slot 0x21A9BAC, sets render flags (63, 2) and registers a sound/anim (10570)
sub_2192DF0
(not in export)
- docs/function_notes/agent_09.md:290 StopSign update: computes spin angle from object field +16 (x 0xB60B60B / frames), builds rotation matrix into object +40
sub_2192E58
(not in export)
- docs/function_notes/agent_09.md:291 setter: menu-manager (0x21A9BB0) halfword +20 = value (current selection)
sub_2192E64
(not in export)
- docs/function_notes/agent_09.md:292 getter: menu-manager halfword +20 (selection, -1 = none)
sub_2192E74
(not in export)
- docs/function_notes/agent_09.md:293 getter: menu-manager field +16 (mode)
sub_2192E80
(not in export)
- docs/function_notes/agent_09.md:294 setter: menu-manager field +12
sub_2192E8C
(not in export)
- docs/function_notes/agent_09.md:295 copies 4-word menu descriptor into menu-manager +24..+39 (callbacks: update/exit/etc.)
sub_2192EA4
(not in export)
- docs/function_notes/agent_09.md:296 calls menu-manager callback +36 if set, then sub_21258F0
sub_2192EC4
(not in export)
- docs/function_notes/agent_09.md:297 menu-manager per-frame: calls callback +32, if next screen requested (+12) runs exit callback +28, rebuilds heap, inits screen 0..3 (sub_21932C4/2198834/2199944/219D5BC), swaps screen ids
sub_2192F6C
(not in export)
- docs/function_notes/agent_09.md:298 menu-manager shutdown: calls exit callback, clears state, frees (sub_212ABD0/2125DA0), clears 0x21A9BB0
sub_2192F98
(not in export)
- docs/function_notes/agent_09.md:299 menu-manager create: allocates 44-byte manager, sets up display (sub_219308C), picks the initial Option screen by argument (0, 3 or 14) and starts it
sub_219308C
(not in export)
- docs/function_notes/agent_09.md:300 Option-screen display setup: sets DISPCNT/BG control bits (BG0CNT/BG1CNT style) on both screens and clears two VRAM regions
sub_2193124
(not in export)
- docs/function_notes/agent_09.md:301 loads Option menu graphics: Option_top_menu_m_b/Option_select_menu_m_b NCGR/NSCR/NCLR and the _s/_o sub-screen OBJ NCGR/NCER/NCLR sets, uploading each
sub_21932A8
(not in export)
- docs/function_notes/agent_09.md:302 clears menu-manager fields +24..+39
sub_21932C4
(not in export)
- docs/function_notes/agent_09.md:303 installs the Option top-menu descriptor (4 words at 0x021A8140) via sub_2192E8C
sub_21932E8
(not in export)
- docs/function_notes/agent_09.md:304 sets up a BG control register (0x4001050 blend/scroll) and writes BG0 scroll 0x4000010 from state
sub_2193324
(not in export)
- docs/function_notes/agent_09.md:305 Option top menu per-frame: dispatch on sub-state 0..9 (sub_21939E0 .. sub_2193428), update highlights, submit sprites
sub_21933BC
(not in export)
- docs/function_notes/agent_09.md:306 updates the 3 Option top-menu buttons' highlight palettes depending on selection
sub_2193428
(not in export)
- docs/function_notes/agent_09.md:307 Option menu sub-state 9: when finished sets menu selection to 0 and starts the transition (sub_2125EBC 35)
sub_219346C
(not in export)
- docs/function_notes/agent_09.md:308 Option menu sub-state 8: waits for message box result, then plays se and goes to state 9
sub_21934F4
(not in export)
- docs/function_notes/agent_09.md:309 Option menu sub-state 7: waits for dialog; yes -> state 1, no -> state 8 with message
sub_2193558
(not in export)
- docs/function_notes/agent_09.md:310 Option menu sub-state 6: waits for dialog; yes -> state 1, else state 7
sub_21935D8
(not in export)
- docs/function_notes/agent_09.md:311 Option menu sub-state 5: slides menu out (sub_20AE4C0 interpolation), at the end goes to next screen or confirmation dialog
sub_2193710
(not in export)
- docs/function_notes/agent_09.md:312 Option menu sub-state 4: 10-frame delay, then switches to state 5
sub_2193754
(not in export)
- docs/function_notes/agent_09.md:313 Option menu sub-state 3: handles touch/D-pad selection of the top menu entries and confirm/back
sub_2193904
(not in export)
- docs/function_notes/agent_09.md:314 Option menu sub-state 2: waits for sub_2128294 then goes to state 3
sub_2193924
(not in export)
- docs/function_notes/agent_09.md:315 Option menu sub-state 1: slides the menu in over 10 frames then goes to state 2
sub_21939E0
(not in export)
- docs/function_notes/agent_09.md:316 Option menu sub-state 0: waits for load (sub_2036C5C) then goes to state 1
sub_2193A00
(not in export)
- docs/function_notes/agent_09.md:317 loads Option top-menu graphics (top_menu_m_b.ncgr/nscr/nclr, top_menu_s.bncl/bnbl, OBJ ncgr/ncer/nclr) and transfers them to VRAM
sub_2193AFC
(not in export)
- docs/function_notes/agent_09.md:318 clears state field at 0x021A9BB4
sub_2193B08
(not in export)
- docs/function_notes/agent_09.md:319 Option top menu init: allocates 64-byte state, loads option.bmg/common.bmg messages, loads graphics, builds BG tilemaps, sets initial slide positions
sub_2193C3C
export/plan0/ov9_000/sub_2193C3C_02193C3C.c
- docs/function_notes/agent_09.md:320 installs second screen descriptor (5 words at 0x021A8264) via sub_2111494
sub_2193C64
(not in export)
- docs/function_notes/agent_09.md:321 sets DISPCNT/DISPCNT-sub display-enable bits (adds BG0 / OBJ bits)
sub_2193CF4
(not in export)
- docs/function_notes/agent_09.md:322 second Option screen per-frame: dispatch on sub-state 0..6 (sub_2194670 .. sub_2193D88) then submit two sprite lists
sub_2193D88
(not in export)
- docs/function_notes/agent_09.md:323 second screen sub-state 6: slide-out step; when 10 frames reached calls sub_2111488
sub_2193DCC
(not in export)
- docs/function_notes/agent_09.md:324 second screen sub-state 5: slide-in/fade of all panel palettes over 10 frames
sub_2193F78
(not in export)
- docs/function_notes/agent_09.md:325 second screen sub-state 4: slides panels by direction, input handling (sub_2194F00)
sub_2194128
(not in export)
- docs/function_notes/agent_09.md:326 second screen sub-state 3: slides panels in the opposite direction, input handling (sub_2194F00)
sub_21942D8
(not in export)
- docs/function_notes/agent_09.md:327 second screen sub-state 2: touch/D-pad selection of entries, back button (sub_21949A0/sub_2128310)
sub_21944C0
(not in export)
- docs/function_notes/agent_09.md:328 second screen sub-state 1: slide-in transition of the panels
sub_2194670
(not in export)
- docs/function_notes/agent_09.md:329 second screen sub-state 0: slide animation, after 10 frames calls sub_2194A14
sub_21946B0
(not in export)
- docs/function_notes/agent_09.md:330 second screen exit: clears display enable bits, frees (sub_2117218, sub_211DF38), clears 0x21A9BB8
sub_2194710
(not in export)
- docs/function_notes/agent_09.md:331 second Option screen init: sets display regs, allocates 148-byte state, loads graphics, builds panels and common.bmg messages
sub_219498C
(not in export)
- docs/function_notes/agent_09.md:332 sets second-screen sub-state 6, resets timer
sub_21949A0
(not in export)
- docs/function_notes/agent_09.md:333 sets second-screen sub-state 5, resets timer
sub_21949B4
(not in export)
- docs/function_notes/agent_09.md:334 sets second-screen sub-state 4, resets timer and updates selected panel (sub_2194CF8/sub_2194D28/sub_2194D58)
sub_21949EC
(not in export)
- docs/function_notes/agent_09.md:335 sets second-screen sub-state 3, resets timer
sub_2194A00
(not in export)
- docs/function_notes/hk_35.md:118 sets +100 of the object at *off_2194A10 to 2 and its +104 to 0, returns the object pointer. Setter.
sub_2194A14
(not in export)
- docs/function_notes/hk_35.md:119 sets +100 of the object at *off_2194A28 to 1 and its +104 to 0, then tail-calls the function pointer off_2194A2C. Setter plus indirect call.
sub_2194A30
(not in export)
- docs/function_notes.md:1235 initialises the menu cell-highlight state on off_2194C44 (scroll and highlight words, +100 = 0)
- docs/function_notes/NEEDS_REVIEW.md:1660 initialises the menu cell-highlight state: sets scroll offsets (+108=-192, +112=-256) and writes a fill word into per-cell entries [REVIEW]
- docs/function_notes/hk_36.md:2 initialises the menu cell-highlight state: sets scroll offsets (+108=-192, +112=-256) and writes a fill word into per-cell entries [REVIEW]
sub_2194C7C
(not in export)
- docs/function_notes.md:1454 availability check for menu slot a1 (0..7): slots 0..7 map to rows whose flags are tested; returns 0 for a1 > 7
- docs/function_notes/NEEDS_REVIEW.md:1661 availability check for menu slot a1 (0-7): slots 0,1,4,5 always available; slots 2,3,6,7 need sub_2056DEC on three table entries OR'd with sub_2194CE4 [REVIEW]
- docs/function_notes/hk_36.md:3 availability check for menu slot a1 (0-7): slots 0,1,4,5 always available; slots 2,3,6,7 need sub_2056DEC on three table entries OR'd with sub_2194CE4 [REVIEW]
sub_2194CE4
(not in export)
- docs/function_notes/hk_36.md:4 thin wrapper: looks up (*off_2194CF0)[a1] and passes it to the function pointer off_2194CF4
sub_2194CF8
(not in export)
- docs/function_notes/hk_36.md:5 steps the selection index at state+120 backwards (wraps to 7 when negative) and recurses until sub_2194C7C reports the slot available
sub_2194D28
(not in export)
- docs/function_notes/hk_36.md:6 steps the selection index at state+120 forwards (wraps to 0 at 8) and recurses until sub_2194C7C reports the slot available
sub_2194D58
(not in export)
- docs/function_notes.md:1236 refreshes the selection display: toggles the cell flags and calls sub_2016468 when sub_2194CE4 passes
- docs/function_notes/NEEDS_REVIEW.md:1662 refreshes the selection display: toggles cell flags at +84 per availability, reloads a 2D asset (sub_2124A68/sub_211DED0), prints a BMG string [REVIEW]
- docs/function_notes/hk_36.md:7 refreshes the selection display: toggles cell flags at +84 per availability, reloads a 2D asset (sub_2124A68/sub_211DED0), prints a BMG string [REVIEW]
sub_2194F00
(not in export)
- docs/function_notes.md:1492 decrements two per-slot counters at state +128 of the object at off_2194FAC (through sub_20ADC64) and writes the cells
- docs/function_notes/NEEDS_REVIEW.md:1663 decrements two per-slot counters at state+128/+132 (floored at 0), shows their values via sub_20ADC64 and sets matching cell flags [REVIEW]
- docs/function_notes/hk_36.md:8 decrements two per-slot counters at state+128/+132 (floored at 0), shows their values via sub_20ADC64 and sets matching cell flags [REVIEW]
sub_2194FB8
(not in export)
- docs/function_notes.md:1095 clears and redraws one of four list rows (a1): resets the cell words at the row's table entry, then writes the row values
- docs/function_notes/NEEDS_REVIEW.md:1664 clears and redraws one of four list rows (a1): resets cell flags, loads row graphics (sub_2124224/sub_2124248), enables row icon [REVIEW]
- docs/function_notes/hk_36.md:9 clears and redraws one of four list rows (a1): resets cell flags, loads row graphics (sub_2124224/sub_2124248), enables row icon [REVIEW]
sub_21950DC
(not in export)
- docs/function_notes.md:1237 fills one of the four result/list rows (a1) from the per-course data (648 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1665 fills one of four result/list rows (a1) from per-course record lookups (sub_20603BC, sub_2060414, sub_2060390, sub_2060364), loads 2D tiles [REVIEW]
- docs/function_notes/hk_36.md:10 fills one of four result/list rows (a1) from per-course record lookups (sub_20603BC, sub_2060414, sub_2060390, sub_2060364), loads 2D tiles [REVIEW]
sub_21953B0
(not in export)
- docs/function_notes/hk_36.md:11 loads the results/ranking screen resources: reads resource pointers via sub_204799C
sub_21956BC
export/plan0/ov9_000/sub_21956BC_021956BC.c
- docs/function_notes.md:1238 (ov9_000, poorly decompiled) compares two type/string pairs from off_21956E0 and returns the result
- docs/function_notes/NEEDS_REVIEW.md:1666 (ov9_000, poorly decompiled) checks two strings/types with sub_213A074, grows a pointer list at v2[15]/v2[16] via sub_21A3644/sub_21A365C [REVIEW]
- docs/function_notes/hk_36.md:12 (ov9_000, poorly decompiled) checks two strings/types with sub_213A074, grows a pointer list at v2[15]/v2[16] via sub_21A3644/sub_21A365C [REVIEW]
sub_21956E4
(not in export)
- docs/function_notes.md:1096 read-modify-write of two register-like words at off_219571C from dword_2195720/24
- docs/function_notes/NEEDS_REVIEW.md:1667 read-modify-write of two register-like words at off_219571C and off_2195728: sets bits 8-15 from masked values (0x13 and 9), preserving other bits [REVIEW]
- docs/function_notes/hk_36.md:13 read-modify-write of two register-like words at off_219571C and off_2195728: sets bits 8-15 from masked values (0x13 and 9), preserving other bits [REVIEW]
sub_219572C
(not in export)
- docs/function_notes.md:1097 writes three fixed-point register words (off_2195778 and the next two) from the object at off_2195770 +92 and the constant dword_2195774
- docs/function_notes/NEEDS_REVIEW.md:1668 writes three fixed-point register words (off_2195778/80/84) from state fields +92/+96/+100/+104 with masks, then calls sub_2111428 to flush [REVIEW]
- docs/function_notes/hk_36.md:14 writes three fixed-point register words (off_2195778/80/84) from state fields +92/+96/+100/+104 with masks, then calls sub_2111428 to flush [REVIEW]
sub_2195788
(not in export)
- docs/function_notes/hk_36.md:15 per-frame dispatcher for the message/menu state machine: switches on state+80 (0-0x11) to one of the sub_21958xx-sub_2196xxx handlers
sub_2195874
(not in export)
- docs/function_notes.md:1508 animation step: increments the frame counter +88 of off_2195970 and writes sub_20AE4C0 values into the cells
- docs/function_notes/NEEDS_REVIEW.md:1669 animation step: increments the frame counter at +88, computes an eased value with sub_20AE4C0 over 10 frames [REVIEW]
- docs/function_notes/hk_36.md:16 animation step: increments the frame counter at +88, computes an eased value with sub_20AE4C0 over 10 frames [REVIEW]
sub_21959A0
(not in export)
- docs/function_notes/hk_36.md:17 thin wrapper: if sub_2125F88() reports true, calls sub_2196D58 and returns its result, else returns 0
sub_21959B8
(not in export)
- docs/function_notes.md:1456 message-box update: when the Return-button condition in off_2195A1C +368 passes, runs the close path (LABEL_10)
- docs/function_notes/NEEDS_REVIEW.md:1670 message-box update: when Return-button conditions hold (flags in off_2195A1C/A20/A28 tables) runs sub_2196D6C and sub_2128310(0) [REVIEW]
- docs/function_notes/hk_36.md:18 message-box update: when Return-button conditions hold (flags in off_2195A1C/A20/A28 tables) runs sub_2196D6C and sub_2128310(0) [REVIEW]
sub_2195A34
(not in export)
- docs/function_notes/hk_36.md:19 thin wrapper: if sub_2125FA4() is true, tail-calls sub_2196D88
sub_2195A4C
(not in export)
- docs/function_notes/hk_36.md:20 animation step: increments frame counter at +88, eases a value with sub_20AE4C0 over 10 frames, writes it to cell-table entries (+60)
sub_2195B84
(not in export)
- docs/function_notes.md:1578 animation step gated by the flag at +116: increments the counter (+88) and eases a value into the cell
- docs/function_notes/NEEDS_REVIEW.md:1671 animation step (+116 gated): eases a value into a row of cells in the +56 and +60 tables, sets a flag at frame 2 [REVIEW]
- docs/function_notes/hk_36.md:21 animation step (+116 gated): eases a value into a row of cells in the +56 and +60 tables, sets a flag at frame 2 [REVIEW]
sub_2195D44
(not in export)
- docs/function_notes.md:1499 animation step: increments the counter at +88 of off_2195E04 and, when +116 is set, eases a value into the cell
- docs/function_notes/NEEDS_REVIEW.md:1672 animation step: when +116 is set, eases a value into cells of the +56 table; at frame >=10 and sub_2125F88 true, calls sub_2196E34 [REVIEW]
- docs/function_notes/hk_36.md:22 animation step: when +116 is set, eases a value into cells of the +56 table; at frame >=10 and sub_2125F88 true, calls sub_2196E34 [REVIEW]
sub_2195E18
(not in export)
- docs/function_notes.md:1447 selection-confirm handler: when sub_2125F54 passes and no pending entry remains, confirms the selection
- docs/function_notes/NEEDS_REVIEW.md:1673 selection-confirm handler: when sub_2125F54 and not sub_2125F60, checks the selected course entry with sub_2060268, clears its ghost slots [REVIEW]
- docs/function_notes/hk_36.md:23 selection-confirm handler: when sub_2125F54 and not sub_2125F60, checks the selected course entry with sub_2060268, clears its ghost slots [REVIEW]
sub_2195E80
(not in export)
- docs/function_notes/hk_36.md:24 thin wrapper: if sub_2125FA4() is true, tail-calls sub_2196E90
sub_2195E98
(not in export)
- docs/function_notes/hk_36.md:25 animation step (same pattern as sub_2195A4C): eased cell writes, calls sub_2196EAC past frame 10 when sub_2128274 is true, clears two cells at frame 7
sub_2195FD8
(not in export)
- docs/function_notes/hk_36.md:26 animation step: frame counter at +88, eased value (sub_20AE488) written to four cells; calls sub_2196F44 at frame >=10
sub_2196038
(not in export)
- docs/function_notes/hk_36.md:27 animation step: eases a value from -192 into state +92/+100 and cell +56; at frame >=10 calls sub_2111488 with state+144
sub_2196084
(not in export)
- docs/function_notes/hk_36.md:28 animation step: eases a value into rows of cells in the +56 and +60 tables; calls sub_2196F90 at frame >=10
sub_219621C
(not in export)
- docs/function_notes/hk_36.md:29 animation step with start value chosen by state+112 (0 -> dword_2196368, 1 -> -256); calls sub_2196CB0 first, writes cell rows, calls sub_2197004 at frame >=10
sub_2196388
(not in export)
- docs/function_notes/hk_36.md:30 animation step like sub_219621C with the opposite start value; calls sub_2196CB0 first, writes cell rows, calls sub_2196FB8 at frame >=10
sub_21964F4
(not in export)
- docs/function_notes.md:1589 state machine for the message/menu box (486 bytes): cell hit tests and the state transitions
- docs/function_notes/NEEDS_REVIEW.md:1674 state machine for the message/menu box: cell hit tests (sub_201EA84, sub_2128210) on two touch areas, sets state fields +112/+120/+124/+136/+140 [REVIEW]
- docs/function_notes/hk_36.md:31 state machine for the message/menu box: cell hit tests (sub_201EA84, sub_2128210) on two touch areas, sets state fields +112/+120/+124/+136/+140 [REVIEW]
sub_2196704
(not in export)
- docs/function_notes/hk_36.md:32 animation step: eased value written into +56/+60 cell tables for a fixed cell set; calls sub_2197004 at frame >=10
sub_219689C
(not in export)
- docs/function_notes/hk_36.md:33 animation step: eases a value from 0 to -192 into state +92/+100 and cell +56; calls sub_219701C at frame >=10
sub_21968E4
(not in export)
- docs/function_notes.md:1098 calls sub_2117218, clears the flag at off_219692C, then refreshes from dword_2196934
- docs/function_notes/NEEDS_REVIEW.md:1675 calls sub_2117218, clears a flag at off_219692C, and rewrites two register-like words (off_2196930/off_219693C) with masked bits [REVIEW]
- docs/function_notes/hk_36.md:34 calls sub_2117218, clears a flag at off_219692C, and rewrites two register-like words (off_2196930/off_219693C) with masked bits [REVIEW]
sub_2196940
(not in export)
- docs/function_notes.md:1239 message/dialog box constructor (670 bytes): sets four control words and allocates the box objects
- docs/function_notes/NEEDS_REVIEW.md:1676 message/dialog box constructor: sets four control words, allocates a 148-byte object via sub_2036BEC (stored at off_2196C00), zeroes its fields [REVIEW]
- docs/function_notes/hk_36.md:35 message/dialog box constructor: sets four control words, allocates a 148-byte object via sub_2036BEC (stored at off_2196C00), zeroes its fields [REVIEW]
sub_2196C2C
(not in export)
- docs/function_notes.md:1240 input-sequence checker: compares the input mask at off_2196CA4 +368 with the expected sequence
- docs/function_notes/NEEDS_REVIEW.md:1677 input-sequence checker: compares the input mask against a sequence table (off_2196CA8) indexed by counter +128; returns 1 after six matching steps [REVIEW]
- docs/function_notes/hk_36.md:36 input-sequence checker: compares the input mask against a sequence table (off_2196CA8) indexed by counter +128; returns 1 after six matching steps [REVIEW]
sub_2196CB0
(not in export)
- docs/function_notes.md:1482 per-frame update of two countdown fields (+120 and +60 of the object at off_2196D4C) through sub_20ADC64
- docs/function_notes/NEEDS_REVIEW.md:1678 per-frame update of two countdown fields (+120/+124, floored at 0) and matching cell-flag toggles; same pattern as sub_2194F00 [REVIEW]
- docs/function_notes/hk_36.md:37 per-frame update of two countdown fields (+120/+124, floored at 0) and matching cell-flag toggles; same pattern as sub_2194F00 [REVIEW]
sub_2196D58
(not in export)
- docs/function_notes/hk_36.md:38 state transition: sets state+84 = 17, clears frame counter +88, returns the state pointer value (thin setter)
sub_2196D6C
(not in export)
- docs/function_notes/hk_36.md:39 state transition: sets state+84 = 16, clears frame counter, then tail-calls callback off_2196D84
sub_2196D88
(not in export)
- docs/function_notes/hk_36.md:40 state transition: sets state+84 = 15, clears frame counter, returns the state pointer value
sub_2196D9C
(not in export)
- docs/function_notes.md:1461 state 14 setup: fetches a course/ghost record through the table and stores its fields in the screen struct (2D buffer of 268 halfwords)
- docs/function_notes/NEEDS_REVIEW.md:1679 state 14 setup: fetches a course/ghost record via sub_205FDB4 for the entry at +108, formats up to 19 characters with a separator every 4 [REVIEW]
- docs/function_notes/hk_36.md:41 state 14 setup: fetches a course/ghost record via sub_205FDB4 for the entry at +108, formats up to 19 characters with a separator every 4 [REVIEW]
sub_2196E10
(not in export)
- docs/function_notes/hk_36.md:42 state transition: sets state+84 = 13, clears frame counter, calls callback off_2196E30 with arg 6
sub_2196E34
(not in export)
- docs/function_notes.md:1402 state 12 setup on off_2196E60: state +84 = 12 and the frame counter +88 = 0
- docs/function_notes/NEEDS_REVIEW.md:1680 state 12 setup: sets state+84 = 12, clears frame counter, calls sub_2128374 and callback loc_21972D4, clears one cell flag [REVIEW]
- docs/function_notes/hk_36.md:43 state 12 setup: sets state+84 = 12, clears frame counter, calls sub_2128374 and callback loc_21972D4, clears one cell flag [REVIEW]
sub_2196E68
(not in export)
- docs/function_notes/hk_36.md:44 state 11 setup: sets state+84 = 11, clears frame counter, calls sub_2125FC0, then sub_2125ED0(0, 5)
sub_2196E90
(not in export)
- docs/function_notes/hk_36.md:45 state transition: sets state+84 = 10, clears frame counter, tail-calls callback off_2196EA8
sub_2196EAC
(not in export)
- docs/function_notes.md:1099 state 9 setup: sets state +84 = 9 on object off_2196F38 and loads the BMG message string into a 263-halfword buffer
- docs/function_notes/NEEDS_REVIEW.md:1681 state 9 setup: sets state+84 = 9, loads BMG message strings (sub_20B3F7C x3) for the selected entry, builds text (sub_212513C) [REVIEW]
- docs/function_notes/hk_36.md:46 state 9 setup: sets state+84 = 9, loads BMG message strings (sub_20B3F7C x3) for the selected entry, builds text (sub_212513C) [REVIEW]
sub_2196F44
(not in export)
- docs/function_notes/hk_36.md:47 state transition: sets state+84 = 8, clears frame counter, tail-calls callback off_2196F5C
sub_2196F60
(not in export)
- docs/function_notes/hk_36.md:48 state 7 setup: sets state+84 = 7, clears frame counter, sets a cell flag at +60, calls callback off_2196F8C with arg 4
sub_2196F90
(not in export)
- docs/function_notes/hk_36.md:49 state transition: sets state+84 = 6, clears frame counter, returns the state pointer value
sub_2196FA4
(not in export)
- docs/function_notes/hk_36.md:50 state transition: sets state+84 = 5, clears frame counter, returns the state pointer value
sub_2196FB8
(not in export)
- docs/function_notes.md:1403 state 4 setup on off_2196FEC: state +84 = 4 and the frame counter +88 = 0
- docs/function_notes/NEEDS_REVIEW.md:1682 state 4 setup: sets state+84 = 4, clears frame counter, picks a value from state+112 via loc_2197254/loc_2197294 [REVIEW]
- docs/function_notes/hk_36.md:51 state 4 setup: sets state+84 = 4, clears frame counter, picks a value from state+112 via loc_2197254/loc_2197294 [REVIEW]
sub_2196FF0
(not in export)
- docs/function_notes/hk_36.md:52 state transition: sets state+84 = 3, clears frame counter, returns the state pointer value
sub_2197004
(not in export)
- docs/function_notes/hk_36.md:53 state 2 setup: sets state+84 = 2, clears frame counter and the flag at +116
sub_219701C
(not in export)
- docs/function_notes/hk_36.md:54 state 1 setup: sets state+84 = 1, clears frame counter, tail-calls callback off_2197034 (file is short; slice size column disagrees)
sub_21974EC
(not in export)
- docs/function_notes.md:1100 cursor/highlight refresh for selection a1: toggles the highlight cells at the table off_21975B8 when a1 is nonzero
- docs/function_notes/NEEDS_REVIEW.md:1683 cursor/highlight refresh for selection a1: toggles cell flags in the +56/+60 tables and reloads a 2D tile via sub_2124224 [REVIEW]
- docs/function_notes/hk_36.md:55 cursor/highlight refresh for selection a1: toggles cell flags in the +56/+60 tables and reloads a 2D tile via sub_2124224 [REVIEW]
sub_21975D4
(not in export)
- docs/function_notes.md:1241 fills record row a1 from a course/ghost entry lookup (664 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1684 fills record row a1: looks up a course/ghost entry (sub_20601E4, sub_20601A0), loads its icon (sub_2124748, sub_2016468), copies the 20-byte name [REVIEW]
- docs/function_notes/hk_36.md:56 fills record row a1: looks up a course/ghost entry (sub_20601E4, sub_20601A0), loads its icon (sub_2124748, sub_2016468), copies the 20-byte name [REVIEW]
sub_2197894
(not in export)
- docs/function_notes.md:1242 loads the results/ranking screen resources into the screen struct
- docs/function_notes/NEEDS_REVIEW.md:1685 loads the results/ranking screen resources into the struct at *off_2197AC4 via sub_204799C and sub_20B4xxx loaders (same family as sub_21953B0) [REVIEW]
- docs/function_notes/hk_36.md:57 loads the results/ranking screen resources into the struct at *off_2197AC4 via sub_204799C and sub_20B4xxx loaders (same family as sub_21953B0) [REVIEW]
sub_2197B14
(not in export)
- docs/function_notes.md:1101 register setter: writes (-65536 * (state +36)) masked with a constant into off_2197B30 and returns the pointer
- docs/function_notes/NEEDS_REVIEW.md:1686 register setter: writes (-65536 * state+36) masked with dword_2197B2C into off_2197B30 (scroll/affine word) [REVIEW]
- docs/function_notes/hk_36.md:58 register setter: writes (-65536 * state+36) masked with dword_2197B2C into off_2197B30 (scroll/affine word) [REVIEW]
sub_2197B34
(not in export)
- docs/function_notes/hk_36.md:59 per-frame dispatcher for the results screen: switch on state+24 (0-5) to sub_2197FF4/F4C/F34/D38/C7C/BBC, then updates via sub_2124C30
sub_2197BBC
(not in export)
- docs/function_notes.md:1102 animation step (phase 5) on off_2197C60: bumps the counter at +32 and eases the values 224 and -192 with sub_20AE4C0
- docs/function_notes/NEEDS_REVIEW.md:1687 animation step (phase 5): eases two values (224 and -192) over 10 frames, writes one to a set of cells in +12, stores the second at +36 [REVIEW]
- docs/function_notes/hk_36.md:60 animation step (phase 5): eases two values (224 and -192) over 10 frames, writes one to a set of cells in +12, stores the second at +36 [REVIEW]
sub_2197C7C
(not in export)
- docs/function_notes.md:1483 animation step (phase 4) on off_2197D1C: increments the counter at +32 and eases the value with sub_20AE488
- docs/function_notes/NEEDS_REVIEW.md:1688 animation step (phase 4): eases a value with sub_20AE488 into cells indexed by +40, calls sub_219827C at frame 5, sub_21982B4 at frame >=10 [REVIEW]
- docs/function_notes/hk_36.md:61 animation step (phase 4): eases a value with sub_20AE488 into cells indexed by +40, calls sub_219827C at frame 5, sub_21982B4 at frame >=10 [REVIEW]
sub_2197D38
(not in export)
- docs/function_notes.md:1587 input handler (phase 3, 476 bytes): cell hit tests and the selection update
- docs/function_notes/NEEDS_REVIEW.md:1689 input handler (phase 3): cell hit tests (sub_201EA84, sub_2128210) and button checks; on confirm calls sub_21281C8 and sub_21982B4, sets +52 = 4 [REVIEW]
- docs/function_notes/hk_36.md:62 input handler (phase 3): cell hit tests (sub_201EA84, sub_2128210) and button checks; on confirm calls sub_21281C8 and sub_21982B4, sets +52 = 4 [REVIEW]
sub_2197F34
(not in export)
- docs/function_notes/hk_36.md:63 thin wrapper: if sub_2128294() (Return-button state) is true, tail-calls sub_2198304
sub_2197F4C
(not in export)
- docs/function_notes.md:1477 animation step (phase 1) on off_2197FD8: increments the counter at +32 and eases a value through the sub_20AE helpers
- docs/function_notes/NEEDS_REVIEW.md:1690 animation step (phase 1): eases a value with sub_20AE488 into several cell groups, calls sub_2198318 at frame >=10 [REVIEW]
- docs/function_notes/hk_36.md:64 animation step (phase 1): eases a value with sub_20AE488 into several cell groups, calls sub_2198318 at frame >=10 [REVIEW]
sub_2197FF4
(not in export)
- docs/function_notes.md:1103 animation step (phase 0) on off_21980A4: bumps the counter at +32 and eases the values 224 -> 0 and -192 toward 0
- docs/function_notes/NEEDS_REVIEW.md:1691 animation step (phase 0): eases values 224->0 and -192->0 into cells, writes two extra cells, calls sub_2198334 at frame >=10 [REVIEW]
- docs/function_notes/hk_36.md:65 animation step (phase 0): eases values 224->0 and -192->0 into cells, writes two extra cells, calls sub_2198334 at frame >=10 [REVIEW]
sub_21980C0
export/plan0/ov9_000/sub_21980C0_021980C0.c
- docs/function_notes.md:1369 (ov9_000) calls sub_2036AB0 on the field +20 of *off_21980DC, clears the global and returns it
- docs/function_notes/NEEDS_REVIEW.md:1692 (ov9_000, poorly decompiled) stores a1+1 into a2+28, calls a function pointer, decrements a counter, then tail-calls sub_21980E0 [REVIEW]
- docs/function_notes/hk_36.md:66 (ov9_000, poorly decompiled) stores a1+1 into a2+28, calls a function pointer, decrements a counter, then tail-calls sub_21980E0 [REVIEW]
sub_21980E0
export/plan0/ov9_000/sub_21980E0_021980E0.c
- docs/function_notes.md:1521 (ov9_000) stores a1 into the control word at off_219821C and allocates a 56-byte object (sub_2036BEC)
- docs/function_notes/NEEDS_REVIEW.md:1693 (ov9_000, poorly decompiled) stores a1 into a2+28; returns 1 if the object at v3+20 is empty or v3+28 is set, else calls sub_219A3C4 and returns 0 [REVIEW]
- docs/function_notes/hk_36.md:67 (ov9_000, poorly decompiled) stores a1 into a2+28; returns 1 if the object at v3+20 is empty or v3+28 is set, else calls sub_219A3C4 and returns 0 [REVIEW]
sub_2198244
(not in export)
- docs/function_notes.md:1104 hides cell a1: clears the flag in the +12 table at off_2198270 and calls sub_2124A20 with the cell index from off_2198278
- docs/function_notes/NEEDS_REVIEW.md:1694 hides cell a1 (clears flag in +12 table via off_2198274) and reloads its 2D sprite with sub_2124A20 (id 15) [REVIEW]
- docs/function_notes/hk_36.md:68 hides cell a1 (clears flag in +12 table via off_2198274) and reloads its 2D sprite with sub_2124A20 (id 15) [REVIEW]
sub_219827C
(not in export)
- docs/function_notes.md:1105 shows cell a1: sets the flag in the +12 table at off_21982A8 and calls sub_2124A20 with the index from off_21982B0
- docs/function_notes/NEEDS_REVIEW.md:1695 shows cell a1 (sets flag in +12 table via off_21982AC) and reloads its 2D sprite with sub_2124A20 (id 14) [REVIEW]
- docs/function_notes/hk_36.md:69 shows cell a1 (sets flag in +12 table via off_21982AC) and reloads its 2D sprite with sub_2124A20 (id 14) [REVIEW]
sub_21982B4
(not in export)
- docs/function_notes/hk_36.md:70 state 5 setup: sets state+28 = 5, clears +32, returns state pointer value
sub_21982C8
(not in export)
- docs/function_notes/hk_36.md:71 state 4 setup: sets state+28 = 4, clears +32, calls sub_21282C8 if +40 is 1 or 2, then opens a dialog via sub_212ECC0 (callback arg 5)
sub_2198304
(not in export)
- docs/function_notes/hk_36.md:72 state 3 setup: sets state+28 = 3, clears +32, returns state pointer value
sub_2198318
(not in export)
- docs/function_notes/hk_36.md:73 state 2 setup: sets state+28 = 2, clears +32, tail-calls callback off_2198330
sub_2198334
(not in export)
- docs/function_notes/hk_36.md:74 state 1 setup: sets state+28 = 1, clears +32, returns state pointer value
sub_2198348
(not in export)
- docs/function_notes/hk_36.md:75 state 0 setup: sets state+28 = 0, clears +32, sets +36 = -192
sub_2198364
(not in export)
- docs/function_notes.md:1106 results/ranking screen loader: reads resource pointers and NSCR/NCLR-style data for the results screen (254 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1696 results/ranking screen loader: reads resource pointers via sub_204799C, loads them with sub_20B4934/sub_20B4A44/sub_20B47D8, allocates a heap block [REVIEW]
- docs/function_notes/hk_36.md:76 results/ranking screen loader: reads resource pointers via sub_204799C, loads them with sub_20B4934/sub_20B4A44/sub_20B47D8, allocates a heap block [REVIEW]
sub_219848C
(not in export)
- docs/function_notes.md:1107 loads the results-screen NSCR/NCLR-style data through helper calls (120 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1697 loads the results-screen NSCR/NCLR-style data via sub_20B496C, sub_20B4A7C, sub_20B4810, sub_20B49F4 and sub_20B48EC from resource pointers [REVIEW]
- docs/function_notes/hk_36.md:77 loads the results-screen NSCR/NCLR-style data via sub_20B496C, sub_20B4A7C, sub_20B4810, sub_20B49F4 and sub_20B48EC from resource pointers [REVIEW]
sub_219851C
(not in export)
- docs/function_notes/hk_36.md:78 getter: returns the signed 16-bit field at +14 of the object at *off_2198528
sub_219852C
(not in export)
- docs/function_notes/hk_36.md:79 thunk: tail-calls the function pointer off_2198530
sub_2198534
(not in export)
- docs/function_notes.md:1441 per-frame message/dialog dispatcher: calls sub_2125928 first, then the dialog step
- docs/function_notes/NEEDS_REVIEW.md:1698 per-frame message/dialog dispatcher: calls sub_2125928, advances the state word, then switches on 0-3 to sub_2198748, sub_21986C8 [REVIEW]
- docs/function_notes/hk_36.md:80 per-frame message/dialog dispatcher: calls sub_2125928, advances the state word, then switches on 0-3 to sub_2198748, sub_21986C8 [REVIEW]
sub_2198590
(not in export)
- docs/function_notes.md:1459 message handler (state 3): when sub_2125F54 passes calls sub_2125FC0, otherwise the default path
- docs/function_notes/NEEDS_REVIEW.md:1699 message handler (state 3): if sub_2125F54 calls sub_2125FC0; otherwise sets the state word at +14 to 0 or 3 depending on sub_2125F60 and the [REVIEW]
- docs/function_notes/hk_36.md:81 message handler (state 3): if sub_2125F54 calls sub_2125FC0; otherwise sets the state word at +14 to 0 or 3 depending on sub_2125F60 and the [REVIEW]
sub_2198604
(not in export)
- docs/function_notes.md:1497 message handler: when sub_2125F54 passes calls sub_2125FC0, otherwise sub_2125F88 with the state write
- docs/function_notes/NEEDS_REVIEW.md:1700 message handler: if sub_2125F60 sets state +14 = 14; else copies a 20-byte name into a record (sub_214D168/sub_214D1FC), sets display type 3 [REVIEW]
- docs/function_notes/hk_36.md:82 message handler: if sub_2125F60 sets state +14 = 14; else copies a 20-byte name into a record (sub_214D168/sub_214D1FC), sets display type 3 [REVIEW]
sub_21986C8
(not in export)
- docs/function_notes.md:1243 message handler: when sub_2125F60 is set sets state +14 = 14; otherwise runs sub_2125F88
- docs/function_notes/NEEDS_REVIEW.md:1701 message handler: if sub_2125F60 sets state +14 = 14; else sets display type 2 and shows BMG strings 13/0/1 via sub_212611C [REVIEW]
- docs/function_notes/hk_36.md:83 message handler: if sub_2125F60 sets state +14 = 14; else sets display type 2 and shows BMG strings 13/0/1 via sub_212611C [REVIEW]
sub_2198748
(not in export)
- docs/function_notes.md:1244 when sub_2036C5C() is true sets display type 1 and shows the object at off_2198798
- docs/function_notes/NEEDS_REVIEW.md:1702 if sub_2036C5C() is true, sets display type 1 and shows BMG strings 12/0/1 via sub_212611C [REVIEW]
- docs/function_notes/hk_36.md:84 if sub_2036C5C() is true, sets display type 1 and shows BMG strings 12/0/1 via sub_212611C [REVIEW]
sub_219879C
(not in export)
- docs/function_notes/hk_36.md:85 calls sub_2125DA0, clears the pointer at off_21987B0 and returns it (teardown)
sub_21987B4
(not in export)
- docs/function_notes.md:1466 constructor for a 24-byte UI object (sub_2036BEC) with its fields filled from the arguments
- docs/function_notes/NEEDS_REVIEW.md:1703 constructor for a 24-byte UI object (sub_2036BEC) stored at off_219882C: links a1, sets up a control via sub_21250B0, sub_20B403C, sub_2125C2C [REVIEW]
- docs/function_notes/hk_36.md:86 constructor for a 24-byte UI object (sub_2036BEC) stored at off_219882C: links a1, sets up a control via sub_21250B0, sub_20B403C, sub_2125C2C [REVIEW]
sub_2198834
(not in export)
- docs/function_notes/hk_36.md:87 copies a 4-word menu descriptor from off_2198854 and calls sub_2192E8C with it (same family as sub_2199944)
sub_2198858
(not in export)
- docs/function_notes.md:1108 UI refresh: sets or clears bit 1 of the control word at off_21988DC depending on the flag at *off_21988D8 +60
- docs/function_notes/NEEDS_REVIEW.md:1704 UI refresh: sets or clears bit 1 of the control word at off_21988DC from state+60, calls sub_214A40C, then writes two scroll registers from state+36 [REVIEW]
- docs/function_notes/hk_36.md:88 UI refresh: sets or clears bit 1 of the control word at off_21988DC from state+60, calls sub_214A40C, then writes two scroll registers from state+36 [REVIEW]
sub_21988F8
(not in export)
- docs/function_notes/hk_36.md:89 per-frame dispatcher for the info-message/staff-roll screen: switch on phase 0-5 to sub_21992BC/2199280/2198EA0/2198E74/2198D6C/2198D00, then runs sub_212B80C
sub_219899C
(not in export)
- docs/function_notes.md:1490 updates two cell flags per entry that match the row index, over the table at off_2198A44
- docs/function_notes/NEEDS_REVIEW.md:1705 updates two cell flags per entry matching the current row, based on remaining count at +64 (decrements it when positive) [REVIEW]
- docs/function_notes/hk_36.md:90 updates two cell flags per entry matching the current row, based on remaining count at +64 (decrements it when positive) [REVIEW]
sub_2198A4C
(not in export)
- docs/function_notes.md:1109 refreshes five display rows (214 bytes): sets the cell flags and reloads the row data from off_2198B24 / off_2198B28
- docs/function_notes/NEEDS_REVIEW.md:1706 refreshes five display rows: sets cell flags and reloads sprites (sub_2124100, sub_2124A20) with id 14 or 15 depending on the nonzero flag at +56 [REVIEW]
- docs/function_notes/hk_36.md:91 refreshes five display rows: sets cell flags and reloads sprites (sub_2124100, sub_2124A20) with id 14 or 15 depending on the nonzero flag at +56 [REVIEW]
sub_2198B38
(not in export)
- docs/function_notes.md:1444 radio-style selection: for two groups sets each cell's selected flag so only one is on
- docs/function_notes/NEEDS_REVIEW.md:1707 radio-style selection: for two groups sets each cell flag to (index == selected index at +12) [REVIEW]
- docs/function_notes/hk_36.md:92 radio-style selection: for two groups sets each cell flag to (index == selected index at +12) [REVIEW]
sub_2198B9C
(not in export)
- docs/function_notes.md:1245 writes the attribute and palette words for the info panel cells of object off_2198CE4
- docs/function_notes/NEEDS_REVIEW.md:1708 writes attribute/palette words for the info panel cells from state fields +36/+38/+40 across rows [REVIEW]
- docs/function_notes/hk_36.md:93 writes attribute/palette words for the info panel cells from state fields +36/+38/+40 across rows [REVIEW]
sub_2198D00
(not in export)
- docs/function_notes/hk_36.md:94 input handler (phase 5): on touch-free confirm with no record calls sub_2125EBC(35), sub_2125FC0, sub_2128374; if sub_2128294 (Return) is pressed
sub_2198D6C
(not in export)
- docs/function_notes.md:1509 animation step (phase 4) on off_2198E6C: eases -140 into +36 with sub_20AE4C0
- docs/function_notes/NEEDS_REVIEW.md:1709 animation step (phase 4): eases -140 into +36 and +/-250 into the +38 cell fields for two groups; at frame >=10 checks sub_2128294 [REVIEW]
- docs/function_notes/hk_36.md:95 animation step (phase 4): eases -140 into +36 and +/-250 into the +38 cell fields for two groups; at frame >=10 checks sub_2128294 [REVIEW]
sub_2198E74
(not in export)
- docs/function_notes/hk_36.md:96 timer step (phase 3): increments counter at +32; at >=5 sets flag +56 = 1; at >=10 advances phase +4 to 4 and resets counter
sub_2198EA0
(not in export)
- docs/function_notes.md:1598 input handler (phase 2, 988 bytes): cell hit tests via sub_201EA84 and the row updates
- docs/function_notes/NEEDS_REVIEW.md:1710 input handler (phase 2, large): cell hit tests via sub_201EA84/sub_2128210 and button flags; on hit advances phase +4 to 4 [REVIEW]
- docs/function_notes/hk_36.md:97 input handler (phase 2, large): cell hit tests via sub_201EA84/sub_2128210 and button flags; on hit advances phase +4 to 4 [REVIEW]
sub_2199280
(not in export)
- docs/function_notes.md:1409 animation step (phase 0 variant) on off_21992B8: counter +32, eases the value with -sub_212825C(counter)
- docs/function_notes/NEEDS_REVIEW.md:1711 animation step (phase 0 variant): counter +32, eased value via sub_212825C into +48; at >=10 sets phase +4 = 2 [REVIEW]
- docs/function_notes/hk_36.md:98 animation step (phase 0 variant): counter +32, eased value via sub_212825C into +48; at >=10 sets phase +4 = 2 [REVIEW]
sub_21992BC
(not in export)
- docs/function_notes.md:1478 animation step (phase 0) on off_219934C: increments the counter at +32 and eases -140 into +36
- docs/function_notes/NEEDS_REVIEW.md:1712 animation step (phase 0): eases -140 into +36 and 250/-250 into cell fields for two groups; at >=10 sets phase +4 = 1 [REVIEW]
- docs/function_notes/hk_36.md:99 animation step (phase 0): eases -140 into +36 and 250/-250 into cell fields for two groups; at >=10 sets phase +4 = 1 [REVIEW]
sub_2199354
(not in export)
- docs/function_notes.md:1110 getter/setter: reads a 2-bit mode from the flag byte of the object at off_2199390 and returns it
- docs/function_notes/NEEDS_REVIEW.md:1713 getter/setter: reads a 2-bit mode from the flag byte at +49 of the object at *off_2199390 and stores 0/1/2 into the field at +12 [REVIEW]
- docs/function_notes/hk_36.md:100 getter/setter: reads a 2-bit mode from the flag byte at +49 of the object at *off_2199390 and stores 0/1/2 into the field at +12 [REVIEW]
sub_2199398
(not in export)
- docs/function_notes.md:1450 inverse of sub_2199354: maps the state field +12 of the object at off_21993F8 back to its mode value
- docs/function_notes/NEEDS_REVIEW.md:1714 inverse of sub_2199354: maps the state field +12 (0/1/2) to 2-bit mode bits in the flag byte at +49 (values 6, 2, 4) [REVIEW]
- docs/function_notes/hk_36.md:101 inverse of sub_2199354: maps the state field +12 (0/1/2) to 2-bit mode bits in the flag byte at +49 (values 6, 2, 4) [REVIEW]
sub_2199400
(not in export)
- docs/function_notes.md:1111 sound helper: switches on state +12 of the object at off_2199440 and calls the sound helpers (sub_2108E9x family) for each case
- docs/function_notes/NEEDS_REVIEW.md:1715 sound helper: switches on state+12 and calls sub_2108E94 with 1, 0 or 2 (sound/BGM select) [REVIEW]
- docs/function_notes/hk_36.md:102 sound helper: switches on state+12 and calls sub_2108E94 with 1, 0 or 2 (sound/BGM select) [REVIEW]
sub_2199444
(not in export)
- docs/function_notes.md:1246 loads the ranking/results-screen resources into the struct via sub_204799C and sub_20B4934
- docs/function_notes/NEEDS_REVIEW.md:1716 loads the ranking/results-screen resources into the struct at *off_21995AC [REVIEW]
- docs/function_notes/hk_36.md:103 loads the ranking/results-screen resources into the struct at *off_21995AC [REVIEW]
sub_21995D8
export/plan0/ov9_000/sub_21995D8_021995D8.c
- docs/function_notes/hk_36.md:104 thunk: tail-calls the function pointer off_21995DC with (a1, a2) (ov9_000)
sub_2199620
(not in export)
- docs/function_notes.md:1247 constructor for a 144-byte results-screen object (sub_2036BEC)
- docs/function_notes/NEEDS_REVIEW.md:1717 constructor for a 144-byte results-screen object (sub_2036BEC, stored at off_21997A8): initialises fields, loads resources via sub_2199444 [REVIEW]
- docs/function_notes/hk_36.md:105 constructor for a 144-byte results-screen object (sub_2036BEC, stored at off_21997A8): initialises fields, loads resources via sub_2199444 [REVIEW]
sub_21997BC
(not in export)
- docs/function_notes.md:1248 results-screen per-frame update (356 bytes): subtracts counter values and redraws the rows
- docs/function_notes/NEEDS_REVIEW.md:1718 results-screen per-frame update: subtracts counter values via sub_21243AC, draws two BMG strings (sub_20B3F7C/sub_212426C) per row, calls sub_2148CA0 [REVIEW]
- docs/function_notes/hk_36.md:106 results-screen per-frame update: subtracts counter values via sub_21243AC, draws two BMG strings (sub_20B3F7C/sub_212426C) per row, calls sub_2148CA0 [REVIEW]
sub_2199944
(not in export)
- docs/function_notes/hk_36.md:107 builds a 4-word menu descriptor from off_2199964 and calls sub_2192E8C (same as sub_2198834)
sub_2199968
(not in export)
- docs/function_notes/hk_36.md:108 thin wrapper: calls sub_214A40C with fixed args (dword_2199984, 0, 2, 6, 10)
sub_2199988
(not in export)
- docs/function_notes/hk_36.md:109 per-frame dispatcher for the results-screen state machine: switch on phase 0-5 to sub_2199DFC/D68/D48/B90/B4C/A6C, then sub_2199A00 and related updates
sub_2199A00
(not in export)
- docs/function_notes.md:1112 refreshes two rows: sets the cell flag at +28 when the index matches, using off_2199A60 and off_2199A64
- docs/function_notes/NEEDS_REVIEW.md:1719 refreshes two rows: sets cell flag at +28 when the index matches and the entry at +20 is nonzero, reloads sprite id 14 or 15 via sub_2124A20 [REVIEW]
- docs/function_notes/hk_36.md:110 refreshes two rows: sets cell flag at +28 when the index matches and the entry at +20 is nonzero, reloads sprite id 14 or 15 via sub_2124A20 [REVIEW]
sub_2199A6C
(not in export)
- docs/function_notes.md:1504 phase 5 handler: when sub_2192E64() == -1 and the state at *off_2199B40 +16 is 5, advances the phase
- docs/function_notes/NEEDS_REVIEW.md:1720 phase 5 handler: when sub_2192E64() == -1, selects menu 14 or 3 via sub_2192E58 based on state+16; eases a value into cell fields over 10 frames [REVIEW]
- docs/function_notes/hk_36.md:111 phase 5 handler: when sub_2192E64() == -1, selects menu 14 or 3 via sub_2192E58 based on state+16; eases a value into cell fields over 10 frames [REVIEW]
sub_2199B4C
(not in export)
- docs/function_notes.md:1422 timer step (phase 4) on off_2199B8C: counter +12, and at 5 or more sets the phase flag
- docs/function_notes/NEEDS_REVIEW.md:1721 timer step (phase 4): counter +12; at >=5 sets flag +20 = 1; at >=10 advances phase +4 to 5 and calls sub_21282C8 when +16 == 5 [REVIEW]
- docs/function_notes/hk_36.md:112 timer step (phase 4): counter +12; at >=5 sets flag +20 = 1; at >=10 advances phase +4 to 5 and calls sub_21282C8 when +16 == 5 [REVIEW]
sub_2199B90
(not in export)
- docs/function_notes.md:1579 input handler (phase 3, 402 bytes): cell hit tests via sub_201EA84 and the selection update
- docs/function_notes/NEEDS_REVIEW.md:1722 input handler (phase 3): cell hit tests (sub_201EA84, sub_2128210) and button flags; on hit sets phase +4 = 5 and clears +16 [REVIEW]
- docs/function_notes/hk_36.md:113 input handler (phase 3): cell hit tests (sub_201EA84, sub_2128210) and button flags; on hit sets phase +4 = 5 and clears +16 [REVIEW]
sub_2199D48
(not in export)
- docs/function_notes/hk_36.md:114 phase 2 step: if sub_2128294 (Return) is pressed, sets phase +4 = 3
sub_2199D68
(not in export)
- docs/function_notes.md:1472 animation step (phase 1) on off_2199DF0: increments the counter at +12 and eases a value into the cell
- docs/function_notes/NEEDS_REVIEW.md:1723 animation step (phase 1): eases a value into cell fields (+28) with opposite signs for two groups; at >=10 sets phase +4 = 2 and calls sub_2128374 [REVIEW]
- docs/function_notes/hk_36.md:115 animation step (phase 1): eases a value into cell fields (+28) with opposite signs for two groups; at >=10 sets phase +4 = 2 and calls sub_2128374 [REVIEW]
sub_2199DFC
(not in export)
- docs/function_notes/hk_36.md:116 phase 0 step: if sub_2036C5C() is true, sets phase +4 = 1
sub_2199E1C
export/plan0/ov9_000/sub_2199E1C_02199E1C.c
- docs/function_notes.md:1505 (ov9_000) returns 1 unless the object's type word matches the table entry; uses sub_20B4934 for the lookup
- docs/function_notes/NEEDS_REVIEW.md:1724 (ov9_000) returns 1 unless the object's type at a1[3] is 5 or 6; otherwise calls sub_2197FB4 or sub_2198224 depending on sub_218DC10 [REVIEW]
- docs/function_notes/hk_36.md:117 (ov9_000) returns 1 unless the object's type at a1[3] is 5 or 6; otherwise calls sub_2197FB4 or sub_2198224 depending on sub_218DC10 [REVIEW]
sub_2199F18
(not in export)
- docs/function_notes/hk_36.md:118 clears the pointer at off_2199F20 and returns it (teardown)
sub_2199F24
(not in export)
- docs/function_notes.md:1113 screen init: heap-allocates a 52-byte state (sub_2036BEC) into off_219A020 and sets up the screen fields
- docs/function_notes/NEEDS_REVIEW.md:1725 screen init: heap-allocates 52-byte state (sub_2036BEC) into off_219A020, sets mode from sub_2192E74, loads palettes (sub_2124A98), cell +4=+/-250 [REVIEW]
- docs/function_notes/hk_37.md:3 screen init: heap-allocates 52-byte state (sub_2036BEC) into off_219A020, sets mode from sub_2192E74, loads palettes (sub_2124A98), cell +4=+/-250 [REVIEW]
sub_219A030
(not in export)
- docs/function_notes/hk_37.md:4 thin wrapper: copies 5 words from off_219A054 globals into a local array and calls sub_2111494
sub_219A058
(not in export)
- docs/function_notes.md:1114 updates two control-register-like words at off_219A090 with the masks dword_219A094 / dword_219A098
- docs/function_notes/NEEDS_REVIEW.md:1726 updates two control-register-like words (off_219A090, off_219A09C) with masked bit-field writes from dword_219A094/98 [REVIEW]
- docs/function_notes/hk_37.md:5 updates two control-register-like words (off_219A090, off_219A09C) with masked bit-field writes from dword_219A094/98 [REVIEW]
sub_219A0C8
(not in export)
- docs/function_notes/hk_37.md:6 per-frame dispatcher for the menu screen: switches on state (+48) 0..11 to sub_219A918..sub_219A184, then draws two cell sets via sub_2124C30
sub_219A184
(not in export)
- docs/function_notes/hk_37.md:7 state 11: bumps frame counter (+56), computes value via sub_20AE4C0, writes palette word into cell entries; at counter>=10 advances via sub_219AE24
sub_219A220
(not in export)
- docs/function_notes/hk_37.md:8 state 10 handler: if sub_2125F88() is true, transitions to state 11 via sub_219AD48
sub_219A238
(not in export)
- docs/function_notes.md:1249 state 9 (dialog) input: hit-tests the cell bank via sub_201EA84 at the two offsets +736
- docs/function_notes/NEEDS_REVIEW.md:1727 state 9 (dialog): hit-tests cell bank (sub_201EA84) and button flags; on confirm calls sub_219AD5C and sub_2128310(0) [REVIEW]
- docs/function_notes/hk_37.md:9 state 9 (dialog): hit-tests cell bank (sub_201EA84) and button flags; on confirm calls sub_219AD5C and sub_2128310(0) [REVIEW]
sub_219A2CC
(not in export)
- docs/function_notes/hk_37.md:10 state 8 handler: if sub_2125FA4() is true, transitions to state 9 via sub_219AD78
sub_219A2E4
(not in export)
- docs/function_notes/hk_37.md:11 state 7 handler: mirrored slide-in animation of cell palette words (like sub_219A184 with other offsets); at counter>=10 advances via sub_219AD9C
sub_219A380
(not in export)
- docs/function_notes.md:1522 state 6: lays out a 3x3 cell grid and the palette, calling sub_2111450(0) when the input state allows
- docs/function_notes/NEEDS_REVIEW.md:1728 state 6: lays out a 3x3 cell grid and palette words for menu panels; checks sub_211145C and calls sub_2111450/sub_2111488 [REVIEW]
- docs/function_notes/hk_37.md:12 state 6: lays out a 3x3 cell grid and palette words for menu panels; checks sub_211145C and calls sub_2111450/sub_2111488 [REVIEW]
sub_219A4DC
(not in export)
- docs/function_notes/hk_37.md:13 state 5: writes four cell palette words from index tables (off_219A588..594) keyed by selection (+64); next state via sub_21143B4
sub_219A59C
(not in export)
- docs/function_notes.md:1250 state 4 input (option/choice menu): hit-tests the buttons and sets the cursor
- docs/function_notes/NEEDS_REVIEW.md:1729 state 4 input (option/choice menu): hit-tests buttons, reads keys via sub_20AE408, moves selection (+64) via sub_219AF70/AFA8/ADF0/ACF0/AD1C [REVIEW]
- docs/function_notes/hk_37.md:14 state 4 input (option/choice menu): hit-tests buttons, reads keys via sub_20AE408, moves selection (+64) via sub_219AF70/AFA8/ADF0/ACF0/AD1C [REVIEW]
sub_219A744
(not in export)
- docs/function_notes/hk_37.md:15 state 3 handler: if sub_2128294() (return button) is true, transitions to state 4 via sub_219AE10
sub_219A75C
(not in export)
- docs/function_notes/hk_37.md:16 state 2 handler: like sub_219A184 but using sub_20AE488 for the timer value; at counter>=10 advances via sub_219AE24
sub_219A7EC
(not in export)
- docs/function_notes/hk_37.md:17 state 1 handler: slide-in animation with 3x3 grid layout, similar structure to sub_219A380; at counter>=10 advances via sub_219AE40
sub_219A918
(not in export)
- docs/function_notes/hk_37.md:18 state 0 handler: if sub_2036C5C() is true, transitions to state 1 via sub_219AE54
sub_219A930
(not in export)
- docs/function_notes.md:1418 clears the flag at off_219A96C and masks two control words from dword_219A974 / dword_219A978
- docs/function_notes/NEEDS_REVIEW.md:1730 clears the flag at off_219A96C and masks two control-register words (variant of sub_219A058) [REVIEW]
- docs/function_notes/hk_37.md:19 clears the flag at off_219A96C and masks two control-register words (variant of sub_219A058) [REVIEW]
sub_219A980
(not in export)
- docs/function_notes/hk_37.md:20 results/menu screen constructor: allocates 72-byte state, picks mode from sub_211147C, sets BG/palettes, labels (sub_20B3F7C), calls sub_219AC78/AE68/AFA8
sub_219AC78
(not in export)
- docs/function_notes/hk_37.md:21 scans the 8x4 ranking-record grid (sub_2060440 valid, sub_2060364 value) for the minimum, clears three flags at +24 and sets one if min>4; returns 1 if set
sub_219ACF0
(not in export)
- docs/function_notes/hk_37.md:22 selection move up: decrements counter (+64), wraps to 2 when negative, then calls off_219AD18(0,0)
sub_219AD1C
(not in export)
- docs/function_notes/hk_37.md:23 selection move down: increments counter (+64), wraps to 0 at >=3, then calls off_219AD44(0,0)
sub_219AD48
(not in export)
- docs/function_notes/hk_37.md:24 state transition to 11: sets state (+52)=11, resets counter (+56)=0, returns the object pointer
sub_219AD5C
(not in export)
- docs/function_notes/hk_37.md:25 state transition to 10: sets +52=10, resets +56, then calls off_219AD74
sub_219AD78
(not in export)
- docs/function_notes/hk_37.md:26 state transition to 9: sets +52=9, resets +56, then calls off_219AD98(obj,0,21)
sub_219AD9C
(not in export)
- docs/function_notes/hk_37.md:27 state transition to 8: sets +52=8, resets +56, then shows BMG message 118 via sub_20B3F7C and sub_21262F0
sub_219ADC8
(not in export)
- docs/function_notes/hk_37.md:28 state transition to 7: sets +52=7, resets +56
sub_219ADDC
(not in export)
- docs/function_notes/hk_37.md:29 state transition to 6: sets +52=6, resets +56
sub_219ADF0
(not in export)
- docs/function_notes/hk_37.md:30 state transition to 5: sets +52=5, resets +56, then calls off_219AE0C(obj,0,5)
sub_219AE10
(not in export)
- docs/function_notes/hk_37.md:31 state transition to 4: sets +52=4, resets +56
sub_219AE24
(not in export)
- docs/function_notes/hk_37.md:32 state transition to 3: sets +52=3, resets +56, then calls off_219AE3C
sub_219AE40
(not in export)
- docs/function_notes/hk_37.md:33 state transition to 2: sets +52=2, resets +56, returns the object pointer
sub_219AE54
(not in export)
- docs/function_notes/hk_37.md:34 state transition to 1: sets +52=1, resets +56, returns the object pointer
sub_219AE68
(not in export)
- docs/function_notes/hk_37.md:35 resets the menu-panel state (+52/+56/+60) and parks all grid cell words at x=-192 and text cells at x=224 via sub_219AF70 for each slot
sub_219AF70
(not in export)
- docs/function_notes/hk_37.md:36 clears the sprite-attribute word for slot a1 and calls sub_2124A20 with a palette-table entry (off_219AFA4) to re-show it
sub_219AFA8
(not in export)
- docs/function_notes/hk_37.md:37 sets the sprite-attribute word for slot a1 to 1 and calls sub_2124A20 with a palette-table entry (off_219AFDC) to highlight it
sub_219AFE0
(not in export)
- docs/function_notes/hk_37.md:38 loads results/ranking 2D assets: BMG/NNS lookups (sub_204799C, sub_20B4934/4A44/47D8/49BC/48B4), sets layers via sub_2016468
sub_219B1A4
(not in export)
- docs/function_notes/hk_37.md:39 sets per-clip playback (sub_2087CFC with a2, loop flag from a4==0) and stores a3 at +8 of the anim sub-object (+32) for a mission enemy actor
sub_219B1DC
(not in export)
- docs/function_notes/hk_37.md:40 thin wrapper: returns off_219B1E4(obj+40), an animation/object getter
sub_219B1E8
(not in export)
- vm_model/src/mission_target.rs:4 (
sub_219B1E8,sub_208B6B0) report the call as a [Call] for the host. - vm_model/src/mission_target.rs:34
sub_2188D44->sub_219B1E8(model at +0x304, a2, a3, 0): play animation. - docs/function_notes/hk_37.md:41 animation variant of sub_219B1A4: sets clip (sub_2087E90), stores a3 at +8 of the object at +28, then sub_2087CFC with loop flag
sub_219B220
(not in export)
- docs/function_notes/hk_37.md:42 returns true when the object at +28 has its short value at +2 not equal to 1
sub_219B230
(not in export)
- docs/function_notes/hk_37.md:43 thin wrapper: returns off_219B238(obj+28), an animation getter
sub_219B23C
(not in export)
- docs/function_notes.md:1115 allocates a 56-byte sub-object (sub_2036BEC) into a1[8]
- docs/function_notes/NEEDS_REVIEW.md:1731 allocates a 56-byte sub-object (sub_2036BEC) into a1[8] and calls sub_20EA514(2,...) to attach it to the actor [REVIEW]
- docs/function_notes/hk_37.md:44 allocates a 56-byte sub-object (sub_2036BEC) into a1[8] and calls sub_20EA514(2,...) to attach it to the actor [REVIEW]
sub_219B26C
(not in export)
- docs/function_notes/hk_37.md:45 allocates 56-byte anim/actor sub-object into +28, reads a 9-byte field from a sub-record (sub_2013A30), sets it up via sub_208823C/sub_208805C and sub_2087F84
sub_219B2C8
(not in export)
- docs/function_notes.md:1536 allocates a 56-byte sub-object into a1[8] after sub_219B4B8(a2)
- docs/function_notes/NEEDS_REVIEW.md:1732 allocates a 56-byte sub-object into a1[8] and calls sub_20EA514(2,...) with a value from sub_219B4B8 (mission enemy actor) [REVIEW]
- docs/function_notes/hk_37.md:46 allocates a 56-byte sub-object into a1[8] and calls sub_20EA514(2,...) with a value from sub_219B4B8 (mission enemy actor) [REVIEW]
sub_219B2FC
(not in export)
- docs/function_notes/hk_37.md:47 animation/actor setup variant of sub_219B26C: 56-byte object into +40, sub_208823C with slot 1, sub_208805C and sub_2087F84
sub_219B360
(not in export)
- docs/function_notes.md:1116 allocates a 56-byte sub-object into a1[9] after sub_219B4B8(a2)
- docs/function_notes/NEEDS_REVIEW.md:1733 allocates a 56-byte sub-object into a1[9] and calls sub_20EA514(4,...) with a value from sub_219B4B8 [REVIEW]
- docs/function_notes/hk_37.md:48 allocates a 56-byte sub-object into a1[9] and calls sub_20EA514(4,...) with a value from sub_219B4B8 [REVIEW]
sub_219B394
(not in export)
- docs/function_notes/hk_37.md:49 animation/actor setup like sub_219B26C with slot 0, object at +28, using sub_219B4B8 lookup and sub_2087F84
sub_219B3F8
(not in export)
- docs/function_notes.md:1117 builds a 44-byte actor object: allocates a 116-byte sub-object and the 44-byte record into the actor's fields
- docs/function_notes/NEEDS_REVIEW.md:1734 builds a 44-byte actor object: allocates a 116-byte sub-object at +20, sub_207AFA8 and sub_209B8AC; copies 3 words from off_219B454 [REVIEW]
- docs/function_notes/hk_37.md:50 builds a 44-byte actor object: allocates a 116-byte sub-object at +20, sub_207AFA8 and sub_209B8AC; copies 3 words from off_219B454 [REVIEW]
sub_219B458
(not in export)
- docs/function_notes.md:1546 builds a 44-byte object: allocates it plus a 108-byte sub-object
- docs/function_notes/NEEDS_REVIEW.md:1735 builds a 44-byte object: allocates a 108-byte sub-object (+16) via sub_2084E28, sub_209B8AC, copies 3 words from table off_219B4B4 [REVIEW]
- docs/function_notes/hk_37.md:51 builds a 44-byte object: allocates a 108-byte sub-object (+16) via sub_2084E28, sub_209B8AC, copies 3 words from table off_219B4B4 [REVIEW]
sub_219B4B8
(not in export)
- docs/function_notes/hk_37.md:52 looks up a value via sub_2135048/sub_2048590 using a 260-byte local buffer and table dword_219B4E8/off_219B4EC, returns the result
sub_219B4F0
(not in export)
- docs/function_notes/hk_37.md:53 wrapper around sub_209BFA8 (allocates a 64-byte actor-family object) that stores two u16 parameters at +36/+40 and two globals at +56/+60
sub_219B520
(not in export)
- docs/function_notes/hk_37.md:54 computes two fixed-point values (-65536 * obj+88 / +92, masked by dword_219B548) and stores them to off_219B54C and off_219B550
sub_219B554
(not in export)
- docs/function_notes/hk_37.md:55 per-frame dispatcher for the message/choice screen: switch on state (+72) 0..7 to sub_219BA1C..sub_219B62C, then draws; returns 1/2 on confirm/cancel
sub_219B62C
(not in export)
- docs/function_notes/hk_37.md:56 state 7 (choice slide-in): updates counter (+80) and writes palette words for about 15 cell positions; press-animation offset via sub_2128244
sub_219B7A8
(not in export)
- docs/function_notes.md:1431 state 6 handler: queries the choice result through sub_21277AC and advances the state on a result
- docs/function_notes/NEEDS_REVIEW.md:1736 state 6 handler: queries the choice result via sub_2127794; on 0 sets flag +108=1 and runs sub_219C388; on -1/1 calls sub_212B7D8 and sub_219C438 [REVIEW]
- docs/function_notes/hk_37.md:57 state 6 handler: queries the choice result via sub_2127794; on 0 sets flag +108=1 and runs sub_219C388; on -1/1 calls sub_212B7D8 and sub_219C438 [REVIEW]
sub_219B7FC
(not in export)
- docs/function_notes/hk_37.md:58 thin wrapper: if sub_2127788() (yes/no choice manager) is true, tail-calls loc_219C39C
sub_219B814
(not in export)
- docs/function_notes/hk_37.md:59 state 4 handler: if sub_21277C8() (choice screen state flag) is true, calls sub_219C3B8
sub_219B82C
(not in export)
- docs/function_notes/hk_37.md:60 state 3 handler: calls sub_219C284 to draw, increments counter (+80), and at >=10 calls sub_219C3CC
sub_219B854
(not in export)
- docs/function_notes.md:1251 state 2 input (yes/no/button): hit-tests via sub_201EA84 and calls sub_219C284 on a hit
- docs/function_notes/NEEDS_REVIEW.md:1737 state 2 (yes/no/button hit-test): hit-tests via sub_201EA84/sub_2128210, reads key bits (sub_20AE408); on confirm sets +108=2 and calls sub_2128310(0) [REVIEW]
- docs/function_notes/hk_37.md:61 state 2 (yes/no/button hit-test): hit-tests via sub_201EA84/sub_2128210, reads key bits (sub_20AE408); on confirm sets +108=2 and calls sub_2128310(0) [REVIEW]
sub_219B9BC
(not in export)
- docs/function_notes/hk_37.md:62 state 1 handler: draws via sub_219C284, increments counter (+80), writes a slide value from sub_212825C into two cell words, at >=10 calls sub_219C438
sub_219BA1C
(not in export)
- docs/function_notes/hk_37.md:63 state 0 handler for the choice screen: draws via sub_219C284, bumps counter (+80), writes slide values (sub_20AE4C0) into cell words; at >=10 calls sub_219C44C
sub_219BAD4
export/plan0/ov9_000/sub_219BAD4_0219BAD4.c
- docs/function_notes.md:1424 returns a UI-manager value: when the manager at *off_219BB18 +108 is 1 stores the masked value, then calls sub_212B91C
- docs/function_notes/NEEDS_REVIEW.md:1738 returns a UI-manager value: if manager set, stores a pointer in *a1 and returns sub_21A14E0 or sub_21A1558 result (tail-call) [REVIEW]
- docs/function_notes/hk_37.md:64 returns a UI-manager value: if manager set, stores a pointer in *a1 and returns sub_21A14E0 or sub_21A1558 result (tail-call) [REVIEW]
sub_219BB28
(not in export)
- docs/function_notes/hk_37.md:65 thin wrapper: returns sub_219BB34(a1)
sub_219BB34
export/plan0/ov9_000/sub_219BB34_0219BB34.c
- docs/function_notes.md:1554 returns 1 plus the result of sub_21A15C4 or sub_21A15D8 depending on the mode; stores a4 & 0xFFFC at *a2
- docs/function_notes/NEEDS_REVIEW.md:1739 returns 1 + sub_21A15C4() or sub_21A15D8() depending on a state byte (==2 or 3) in the manager object; returns 0 if the manager is unset [REVIEW]
- docs/function_notes/hk_37.md:66 returns 1 + sub_21A15C4() or sub_21A15D8() depending on a state byte (==2 or 3) in the manager object; returns 0 if the manager is unset [REVIEW]
sub_219BBC8
export/plan0/ov9_000/sub_219BBC8_0219BBC8.c
- docs/function_notes.md:1467 checks the manager state (+36 is 5 or 6) and draws two sub-objects with sub_21243AC (positions 180 and the second row)
- docs/function_notes/NEEDS_REVIEW.md:1740 checks manager state (+36 is 5 or 6) and no pending event (sub_219C368); if flag byte set runs sub_21988B4, else opens dialog via sub_219D524 [REVIEW]
- docs/function_notes/hk_37.md:67 checks manager state (+36 is 5 or 6) and no pending event (sub_219C368); if flag byte set runs sub_21988B4, else opens dialog via sub_219D524 [REVIEW]
sub_219BC44
export/plan0/ov9_000/sub_219BC44_0219BC44.c
- docs/function_notes.md:1517 result/ranking helper: in state 3 draws the result rows with sub_21243AC at the positions for rows 4 and 5 of the info table
- docs/function_notes/NEEDS_REVIEW.md:1741 result/ranking helper: in state 3 stores values at +108/+112, calls sub_219B874(5), then sub_21A2434 with a buffer, or a random-rank list (sub_21A3414) [REVIEW]
- docs/function_notes/hk_37.md:68 result/ranking helper: in state 3 stores values at +108/+112, calls sub_219B874(5), then sub_21A2434 with a buffer, or a random-rank list (sub_21A3414) [REVIEW]
sub_219BD5C
export/plan0/ov9_000/sub_219BD5C_0219BD5C.c
- docs/function_notes/hk_37.md:69 like sub_219BC44 (state 3 check via sub_219C368), stores two values at +108/+112, calls sub_219B874(5) and sub_21A25D8 with a name/text argument
sub_219BDB8
export/plan0/ov9_000/sub_219BDB8_0219BDB8.c
- docs/function_notes.md:1437 text/name input: sub_211DF44 setup, then copies up to 31 bytes through a sub_214D helper
- docs/function_notes/NEEDS_REVIEW.md:1742 text/name input: copies up to 31 bytes via sub_214D1FC into the buffer at +52, sets +100/+104, calls sub_219B874(4) and sub_219D73C [REVIEW]
- docs/function_notes/hk_37.md:70 text/name input: copies up to 31 bytes via sub_214D1FC into the buffer at +52, sets +100/+104, calls sub_219B874(4) and sub_219D73C [REVIEW]
sub_219BE3C
(not in export)
- docs/function_notes.md:1410 init for a 2D/UI object at off_219BF90: sets the flag word at *(+48) = 1 and the cell row from the +4 record
- docs/function_notes/NEEDS_REVIEW.md:1743 init for a 2D/UI object: sets several flag words in the sub-object at +48 to 1, then tail-calls sub_219BE74(1, ...) [REVIEW]
- docs/function_notes/hk_37.md:71 init for a 2D/UI object: sets several flag words in the sub-object at +48 to 1, then tail-calls sub_219BE74(1, ...) [REVIEW]
sub_219BE74
export/plan0/ov9_000/sub_219BE74_0219BE74.c
- docs/function_notes/hk_37.md:72 gated state setter: if sub_219C368 is clear and state (+36) is 0, stores values at +92/+96/+148/+152, calls sub_219B874(1) and sub_218D6B0 or sub_219C95C
sub_219BEDC
export/plan0/ov9_000/sub_219BEDC_0219BEDC.c
- docs/function_notes.md:1494 per-frame update for the message manager object at off_219BF90: runs sub_211DED0 for the current entry and sub_20B3F7C for the message 115 string
- docs/function_notes/NEEDS_REVIEW.md:1744 per-frame update for the manager object: switch on state (+36) 1..6 calling UI helpers (sub_218D540, sub_218F1E8, sub_219B748, sub_21A1EC0) [REVIEW]
- docs/function_notes/hk_37.md:73 per-frame update for the manager object: switch on state (+36) 1..6 calling UI helpers (sub_218D540, sub_218F1E8, sub_219B748, sub_21A1EC0) [REVIEW]
sub_219BFA0
(not in export)
- docs/function_notes/hk_37.md:74 returns a value after calling sub_202949C and sub_211E0C4 on an entry picked by index (+96) from a global table off_219BFD0
sub_219BFD4
(not in export)
- docs/function_notes.md:1442 menu cursor up on off_219C02C: decrements the index (+96) and wraps to 3 at the top
- docs/function_notes/NEEDS_REVIEW.md:1745 menu cursor up: decrements index (+96), wraps to 3; retries if sub_211E160 fails; sets +84=6 and calls sub_212ECC0 and sub_219C09C [REVIEW]
- docs/function_notes/hk_37.md:75 menu cursor up: decrements index (+96), wraps to 3; retries if sub_211E160 fails; sets +84=6 and calls sub_212ECC0 and sub_219C09C [REVIEW]
sub_219C038
(not in export)
- docs/function_notes/hk_37.md:76 menu cursor down: increments index (+96), wraps to 0 at >=4; same check, state +86=6, and sub_212ECC0/sub_219C09C as sub_219BFD4
sub_219C09C
(not in export)
- docs/function_notes/hk_37.md:77 fetches a BMG message (sub_20B3F7C) for the current entry index and shows it via sub_219C0C0(1)
sub_219C0C0
export/plan0/ov9_000/sub_219C0C0_0219C0C0.c
- docs/function_notes.md:1564 cleanup/free for the message/menu manager: calls sub_212426C on the saved cells and frees the object
- docs/function_notes/NEEDS_REVIEW.md:1746 cleanup/free for the message/menu manager: frees sub-objects via sub_21A4778/sub_218B618, clears flags, calls sub_2197600 and sub_218F1E8/234/26C [REVIEW]
- docs/function_notes/hk_37.md:78 cleanup/free for the message/menu manager: frees sub-objects via sub_21A4778/sub_218B618, clears flags, calls sub_2197600 and sub_218F1E8/234/26C [REVIEW]
sub_219C1B0
export/plan0/ov9_000/sub_219C1B0_0219C1B0.c
- docs/function_notes.md:1496 constructor for the message manager: stores the parameters and draws the first message through sub_2124748 with the state at off_219C268 +40
- docs/function_notes/NEEDS_REVIEW.md:1747 constructor for the message manager: stores pointer in off_219C31C, inits ~30 fields (+4..+128), calls sub_219CA78/sub_219D894/sub_21A283C [REVIEW]
- docs/function_notes/hk_37.md:79 constructor for the message manager: stores pointer in off_219C31C, inits ~30 fields (+4..+128), calls sub_219CA78/sub_219D894/sub_21A283C [REVIEW]
sub_219C284
(not in export)
- docs/function_notes/hk_37.md:80 per-frame timer decrement for the 2 choice slots: decrements counters at +84/+86 (sub_20ADC64 for display values) and sets the attribute words for the two rows
sub_219C338
(not in export)
- docs/function_notes/hk_37.md:81 sets 2-3 flag words in the menu layout table (+52) to 0/1 for the choice screen highlight
sub_219C388
(not in export)
- docs/function_notes/hk_37.md:82 state transition to 7 on the object at *sub_219C398: sets +76=7, resets +80, returns the object
sub_219C398
export/plan0/ov9_000/sub_219C398_0219C398.c
- docs/function_notes.md:1529 returns the global value at off_219C3AC and sets the state word +76 = 6 on the object at *off_219C3B0
- docs/function_notes/NEEDS_REVIEW.md:1748 returns a global value (off_219C3AC) and writes the first global pointer into *a1 if a1 is non-null [REVIEW]
- docs/function_notes/hk_37.md:83 returns a global value (off_219C3AC) and writes the first global pointer into *a1 if a1 is non-null [REVIEW]
sub_219C3B8
(not in export)
- docs/function_notes/hk_37.md:84 state transition to 5: sets +76=5, resets +80
sub_219C3CC
export/plan0/ov9_000/sub_219C3CC_0219C3CC.c
- docs/function_notes.md:1118 file/list screen input: by state +4 (3 or 4) handles the file-list selection and sets the fields +76 = 4 and +80 = 0
- docs/function_notes/NEEDS_REVIEW.md:1749 file/list screen input: by state (+4) 3 or 4 handles touch/key events via sub_218F0FC, sub_2152808, sub_213A074, callback off_219C4EC [REVIEW]
- docs/function_notes/hk_37.md:85 file/list screen input: by state (+4) 3 or 4 handles touch/key events via sub_218F0FC, sub_2152808, sub_213A074, callback off_219C4EC [REVIEW]
sub_219C408
(not in export)
- docs/function_notes/hk_37.md:86 state transition to 3: sets +76=3, resets +80, calls sub_212B7E8 and sub_212ECC0(off_219C434, 0, 5) to show a message
sub_219C438
(not in export)
- docs/function_notes/hk_37.md:87 state transition to 2: sets +76=2, resets +80, returns the object
sub_219C44C
(not in export)
- docs/function_notes/hk_37.md:88 state transition to 1: sets +76=1, resets +80, returns the object
sub_219C460
(not in export)
- docs/function_notes/hk_37.md:89 resets the choice/menu object: sets +76/+80/+88/+92, then parks cell words at x=-192 (offsets via off_219C50C/518/51C tables)
sub_219C524
(not in export)
- docs/function_notes/hk_37.md:90 loads choice/menu 2D assets: BMG and NNS lookups (sub_204799C, sub_20B4934/47D8/4A44/48B4/49BC), sub_20B4018/400C/4030/4000 params, sub_2016468 layers
sub_219C6D0
export/plan0/ov9_000/sub_219C6D0_0219C6D0.c
- docs/function_notes.md:1119 sets up a text/name buffer (zeroed locals) and calls sub_21A36E4 to allocate the entry
- docs/function_notes/NEEDS_REVIEW.md:1750 sets up a text/name buffer and calls sub_21A36E4 (allocator-like), sub_200F5AC, sub_218652C and a final function pointer from a local struct [REVIEW]
- docs/function_notes/hk_37.md:91 sets up a text/name buffer and calls sub_21A36E4 (allocator-like), sub_200F5AC, sub_218652C and a final function pointer from a local struct [REVIEW]
sub_219C764
(not in export)
- docs/function_notes.md:1252 screen/VRAM bank init: sets bits in two control registers (off_219C7C0 and off_219C7CC)
- docs/function_notes/NEEDS_REVIEW.md:1751 screen/VRAM bank init: sets bits in two control registers (off_219C7C0/7CC), sets window via sub_214A40C, computes value into off_219C7E8 [REVIEW]
- docs/function_notes/hk_37.md:92 screen/VRAM bank init: sets bits in two control registers (off_219C7C0/7CC), sets window via sub_214A40C, computes value into off_219C7E8 [REVIEW]
sub_219C7EC
export/plan0/ov9_000/sub_219C7EC_0219C7EC.c
- docs/function_notes.md:1486 selection result handler: stores four arguments in the record pointed to by off_219C890 and advances the record
- docs/function_notes/NEEDS_REVIEW.md:1752 selection result handler: stores 4 args in a struct; on state 2 or 3 calls sub_219D524/sub_219B9EC/sub_21A2734 or sub_218EFC4 and sets state +4=5 [REVIEW]
- docs/function_notes/hk_37.md:93 selection result handler: stores 4 args in a struct; on state 2 or 3 calls sub_219D524/sub_219B9EC/sub_21A2734 or sub_218EFC4 and sets state +4=5 [REVIEW]
sub_219C8A8
export/plan0/ov9_000/sub_219C8A8_0219C8A8.c
- docs/function_notes/hk_37.md:94 maps an error/result code 1..4 to a message id and offset (11/6 with -1/-2/-10/-20), then calls sub_219C95C with dword_219C904 adjustment; returns the code
sub_219C8CC
(not in export)
- docs/function_notes/hk_37.md:95 updates 6 rows of a 3-byte-stride table: sets the highlight word (+dword_219C92C) to 1 or 0 for the selected entry (+32) and the alternate cell to the inverse
sub_219C930
(not in export)
- docs/function_notes/hk_37.md:96 per-frame animation for the message/choice box: bumps counter (+12), skips on A/B (sub_2128274/sub_2128294), else writes slide values via sub_20AE4C0
sub_219CA0C
(not in export)
- docs/function_notes.md:1457 choice-result handler: on sub_2127788 true sets the state for the chosen item
- docs/function_notes/NEEDS_REVIEW.md:1753 choice-result handler: on sub_2127788 true, sets state (+4) to 2 or 6 based on sub_2127794 result and sub_21282C8, then calls sub_21277E4 [REVIEW]
- docs/function_notes/hk_37.md:97 choice-result handler: on sub_2127788 true, sets state (+4) to 2 or 6 based on sub_2127794 result and sub_21282C8, then calls sub_21277E4 [REVIEW]
sub_219CA74
(not in export)
- docs/function_notes.md:1253 when sub_2128294 (the return button) reports a press sets the state at +40 = -2
- docs/function_notes/NEEDS_REVIEW.md:1754 on sub_2128294 (return button) sets state (+40)=-2 and +4=5; shows two BMG messages (ids 20 and 21) via sub_21277F8 and sub_212775C [REVIEW]
- docs/function_notes/hk_37.md:98 on sub_2128294 (return button) sets state (+40)=-2 and +4=5; shows two BMG messages (ids 20 and 21) via sub_21277F8 and sub_212775C [REVIEW]
sub_219CAD4
(not in export)
- docs/function_notes/hk_37.md:99 animation counter (+12) bumped and cell words written via sub_20AE488; at >=10 sets state +4=5, resets counter and shows BMG messages via sub_21277F8
sub_219CB80
(not in export)
- docs/function_notes.md:1590 choice-screen input (488 bytes): hit-tests via sub_201EA84 and sub_201EA58, then selects the choice
- docs/function_notes/NEEDS_REVIEW.md:1755 choice-screen input: hit-tests via sub_201EA84/sub_2128210, key moves (sub_20AE408 masks 64/128), sets state +4=3/4/6, confirm via sub_2128310 [REVIEW]
- docs/function_notes/hk_37.md:100 choice-screen input: hit-tests via sub_201EA84/sub_2128210, key moves (sub_20AE408 masks 64/128), sets state +4=3/4/6, confirm via sub_2128310 [REVIEW]
sub_219CD94
(not in export)
- docs/function_notes/hk_37.md:101 if sub_2128294() (return button) is true, sets state (+4)=2 on the object at *off_219CDB0
sub_219CDB4
(not in export)
- docs/function_notes/hk_37.md:102 menu panel slide-in: bumps counter (+12); frames <=10 write slide values via sub_20AE4C0, later via sub_20AE488; at >20 sets state 1 and calls sub_2128374
sub_219CEA4
(not in export)
- docs/function_notes.md:1120 writes the cell position and palette words for a 3-row cursor at off_219CF24
- docs/function_notes/NEEDS_REVIEW.md:1756 writes cell position/palette words for a 3-row cursor and 6 cells from index byte tables (off_219CF34/38/3C), using object values at +20/+24/+28 [REVIEW]
- docs/function_notes/hk_37.md:103 writes cell position/palette words for a 3-row cursor and 6 cells from index byte tables (off_219CF34/38/3C), using object values at +20/+24/+28 [REVIEW]
sub_219CF40
(not in export)
- docs/function_notes.md:1121 draws a tile block: loops a tile-index rectangle from the table off_219D000 using the index at +8 of off_219CFFC
- docs/function_notes/NEEDS_REVIEW.md:1757 draws a tile block: loops a tile-index rectangle from tables (off_219D000/10), copies 16-bit words into the buffer at +48, then sub_2016468 [REVIEW]
- docs/function_notes/hk_37.md:104 draws a tile block: loops a tile-index rectangle from tables (off_219D000/10), copies 16-bit words into the buffer at +48, then sub_2016468 [REVIEW]
sub_219D01C
(not in export)
- docs/function_notes/hk_37.md:105 loads 2D assets for the info/options screen: BMG and NNS lookups (sub_204799C, sub_20B4934/47D8/4A44/48B4/49BC), sub_214CFE4 and sub_2016468 layers
sub_219D24C
export/plan0/ov9_000/sub_219D24C_0219D24C.c
- docs/function_notes.md:1411 tail-jump trampoline: sets the register bits at off_219D284 and off_219D28C and calls sub_2036AB0
- docs/function_notes/NEEDS_REVIEW.md:1758 tail-jump trampoline: calls a function pointer with no args (stack-relative call, decompiler artifact) [REVIEW]
- docs/function_notes/hk_37.md:106 tail-jump trampoline: calls a function pointer with no args (stack-relative call, decompiler artifact) [REVIEW]
sub_219D2A0
export/plan0/ov9_000/sub_219D2A0_0219D2A0.c
- docs/function_notes.md:1591 calls the callback a4(), sets *off_219D2B0 = 2, then tail-calls an indirect function (the target is not resolved by the decompiler)
- docs/function_notes/NEEDS_REVIEW.md:1759 calls a callback a4(), sets the state word at *off_219D2B0 to 2, then tail-jumps through a stack function pointer [REVIEW]
- docs/function_notes/hk_37.md:107 calls a callback a4(), sets the state word at *off_219D2B0 to 2, then tail-jumps through a stack function pointer [REVIEW]
sub_219D4EC
export/plan0/ov9_000/sub_219D4EC_0219D4EC.c
- docs/function_notes.md:1487 dispatches a state callback (the +52 function pointer) and builds its arguments from the string table off_219D590 via sub_20B496C
- docs/function_notes/NEEDS_REVIEW.md:1760 dispatches a state callback (+52 fn pointer, +56 arg) on the object at off_219D520, arg built via sub_219DA74; tail-calls a stack pointer [REVIEW]
- docs/function_notes/hk_37.md:108 dispatches a state callback (+52 fn pointer, +56 arg) on the object at off_219D520, arg built via sub_219DA74; tail-calls a stack pointer [REVIEW]
sub_219D5BC
(not in export)
- docs/function_notes/hk_37.md:109 builds a 4-word argument block from off_219D5DC globals and calls sub_2192E8C (same pattern as sub_219A030)
sub_219D5E0
(not in export)
- docs/function_notes/hk_37.md:110 thin wrapper: returns sub_214A40C(dword_219D5FC, 0, 2, 6, 10), a window/layer setup call
sub_219D600
(not in export)
- docs/function_notes/hk_37.md:111 per-frame update for the screen object: switch on state 0..6 calling sub_219DDF8/DD74/DD54/DABC/DA80/D978/D914, then sub_219D838/7F0/710/68C and sub_2124C30
sub_219D68C
(not in export)
- docs/function_notes/hk_37.md:112 updates visibility/palette flags for two rows: if state (+8)==1 and a timer (+40) is positive, decrements it and sets two cell words to 1, else sets them to 0
sub_219D710
(not in export)
- docs/function_notes/hk_37.md:113 updates highlight/selected row cell words for two rows, calling sub_2124100 and sub_2124A20 (palette 14 vs 15) for each entry in the row lists
sub_219D7F0
(not in export)
- docs/function_notes.md:1415 sets a row-selection flag in each row's +52 cell of the table at off_219D82C
- docs/function_notes/NEEDS_REVIEW.md:1761 sets a row-selection flag in each row's (+52) cell table: flag = 1 when the row index equals the row's selected index (+12) [REVIEW]
- docs/function_notes/hk_37.md:114 sets a row-selection flag in each row's (+52) cell table: flag = 1 when the row index equals the row's selected index (+12) [REVIEW]
sub_219D838
(not in export)
- docs/function_notes.md:1122 updates the header and two row text/cell positions from the object at off_219D904
- docs/function_notes/NEEDS_REVIEW.md:1762 updates header and two row text/cell positions: reads position words, applies sub_20ADC64 offsets from +40/+44, then calls sub_219D900 [REVIEW]
- docs/function_notes/hk_37.md:115 updates header and two row text/cell positions: reads position words, applies sub_20ADC64 offsets from +40/+44, then calls sub_219D900 [REVIEW]
sub_219D900
export/plan0/ov9_000/sub_219D900_0219D900.c
- docs/function_notes/hk_37.md:116 stores a result pair into the global object at off_219D910 (+68/+72) if that object is set (setter for the last computed position)
sub_219D914
export/plan0/ov9_000/sub_219D914_0219D914.c
- docs/function_notes.md:1445 text/name input callback: returns when sub_2125F54 is clear or the object at off_219D96C +40 says otherwise
- docs/function_notes/NEEDS_REVIEW.md:1763 text/name input callback: if sub_219C3B0 and sub_219C990 valid, calls sub_2152520 and sub_218EB68/sub_218EB10, clears 12 bytes via sub_214D168 [REVIEW]
- docs/function_notes/hk_37.md:117 text/name input callback: if sub_219C3B0 and sub_219C990 valid, calls sub_2152520 and sub_218EB68/sub_218EB10, clears 12 bytes via sub_214D168 [REVIEW]
sub_219D978
(not in export)
- docs/function_notes/hk_37.md:118 thin wrapper: returns sub_219D97C(a1, a2)
sub_219D97C
export/plan0/ov9_000/sub_219D97C_0219D97C.c
- docs/function_notes/hk_37.md:119 counts how many of a2 entries (12-byte stride from a1) satisfy sub_2152698(); returns that count
sub_219DA80
(not in export)
- docs/function_notes.md:1412 state step on the ov9 screen object off_219DAB8: bumps the counter at +20 and dispatches on the state
- docs/function_notes/NEEDS_REVIEW.md:1764 state step on ov9 screen object (off_219DAB8): bumps counter +20; at >=5 sets +36=1; at >=10 resets counter, sets state +4=5 and calls sub_21282C8 [REVIEW]
- docs/function_notes/hk_38.md:3 state step on ov9 screen object (off_219DAB8): bumps counter +20; at >=5 sets +36=1; at >=10 resets counter, sets state +4=5 and calls sub_21282C8 [REVIEW]
sub_219DABC
(not in export)
- docs/function_notes.md:1254 per-frame input handler for a cursor/choice screen (626 bytes): reads the touch and button words and moves the cursor
- docs/function_notes/NEEDS_REVIEW.md:1765 per-frame input handler for a cursor/choice screen: reads two halfword cursor arrays, cell hit test sub_201EA84 on touch, keypad masks via sub_20AE408 (8/16/32/64/128) move counters at +8/+12, plays sounds via sub_2105AC0 [REVIEW]
- docs/function_notes/hk_38.md:4 per-frame input handler for a cursor/choice screen: reads two halfword cursor arrays, cell hit test sub_201EA84 on touch, keypad masks via sub_20AE408 (8/16/32/64/128) move counters at +8/+12, plays sounds via sub_2105AC0 [REVIEW]
sub_219DD54
(not in export)
- docs/function_notes/hk_38.md:5 if return button (sub_2128294) is pressed, sets screen state +4=3 and returns its result
sub_219DD74
(not in export)
- docs/function_notes.md:1123 per-frame animation step on off_219DDF0: bumps the counter at +20 and writes sub_20AE4C0 values (with a random seed) into the cells
- docs/function_notes/NEEDS_REVIEW.md:1766 per-frame animation step: random value sub_20AE4C0(1,250) written as +/- halfword offsets at +24 for two slots; after 10 ticks sets state +4=2 and calls sub_2128374 [REVIEW]
- docs/function_notes/hk_38.md:6 per-frame animation step: random value sub_20AE4C0(1,250) written as +/- halfword offsets at +24 for two slots; after 10 ticks sets state +4=2 and calls sub_2128374 [REVIEW]
sub_219DDF8
(not in export)
- docs/function_notes/hk_38.md:7 if sub_2036C5C returns true, sets state +4=1 (transition trigger)
sub_219DE18
export/plan0/ov9_000/sub_219DE18_0219DE18.c
- docs/function_notes/hk_38.md:8 setter: stores a1 into object +28 and halfword a2 into +26 of the object at off_219DE24
sub_219DE38
(not in export)
- docs/function_notes.md:1124 loads five 2D resource descriptors via sub_204799C lookups and sub_20B4934
- docs/function_notes/NEEDS_REVIEW.md:1767 loads five 2D resource descriptors via sub_204799C and sub_20B4934/47D8/4A44/49BC/48B4 into object +56..+76, then issues sub_2016468 layer/param setup calls (ids 4,8,15,35,30) [REVIEW]
- docs/function_notes/hk_38.md:9 loads five 2D resource descriptors via sub_204799C and sub_20B4934/47D8/4A44/49BC/48B4 into object +56..+76, then issues sub_2016468 layer/param setup calls (ids 4,8,15,35,30) [REVIEW]
sub_219DF44
(not in export)
- docs/function_notes/hk_38.md:10 returns pointer off_219DF4C after zeroing the word it points to (take-and-clear helper)
sub_219DF50
(not in export)
- docs/function_notes.md:1255 constructor for a screen object: 88-byte heap allocation into off_219E074
- docs/function_notes/NEEDS_REVIEW.md:1768 constructor/init for a screen object: heap alloc 88 bytes (sub_2036BEC), sets fields, calls sub_219DE38, loads two resources via sub_2124A98, sets BMG message text (sub_20B3F7C id 8), then sub_21281C8(14) [REVIEW]
- docs/function_notes/hk_38.md:11 constructor/init for a screen object: heap alloc 88 bytes (sub_2036BEC), sets fields, calls sub_219DE38, loads two resources via sub_2124A98, sets BMG message text (sub_20B3F7C id 8), then sub_21281C8(14) [REVIEW]
sub_219E088
(not in export)
- docs/function_notes/hk_38.md:12 getter: returns halfword at +20 of object off_219E094
sub_219E098
export/plan0/ov9_000/sub_219E098_0219E098.c
- docs/function_notes/hk_38.md:13 thin wrapper: gets value from sub_218B440 on object+228 and tail-calls sub_219E0A4
sub_219E0A4
export/plan0/ov9_000/sub_219E0A4_0219E0A4.c
- docs/function_notes.md:1363 sets +112 = 1 on the object at off_219E0B0 and returns the pointer
- docs/function_notes/NEEDS_REVIEW.md:1769 conditional callback wrapper: if a1 nonzero calls sub_218B430 on object+228, then calls a function pointer with 1 or 0 depending on sub_218B440 result (Ghidra/IDA stack output unreliable) [REVIEW]
- docs/function_notes/hk_38.md:14 conditional callback wrapper: if a1 nonzero calls sub_218B430 on object+228, then calls a function pointer with 1 or 0 depending on sub_218B440 result (Ghidra/IDA stack output unreliable) [REVIEW]
sub_219E0B4
(not in export)
- docs/function_notes.md:1407 when the object at *off_219E0E4 +24 is set, updates the bitfield in the control register at off_219E0E8
- docs/function_notes/NEEDS_REVIEW.md:1770 if object+24 is set, updates bitfield in a control word at off_219E0E8 (masks dword_219E0F0/0EC, sets bits 0x10), then tail-calls function pointer off_219E0F4 with object+104 [REVIEW]
- docs/function_notes/hk_38.md:15 if object+24 is set, updates bitfield in a control word at off_219E0E8 (masks dword_219E0F0/0EC, sets bits 0x10), then tail-calls function pointer off_219E0F4 with object+104 [REVIEW]
sub_219E0F8
(not in export)
- docs/function_notes/hk_38.md:16 per-frame screen update: advances state (+4 into current), dispatches on state 0..7 to sub_219E32C/2F0/2D0/294/274/1D8/1B4/190, then draws via sub_2124C30 and sub_20AE630
sub_219E190
(not in export)
- docs/function_notes.md:1372 state 7 handler: increments the counter +8 of the object at off_219E1AC and runs its next step when the count is reached
- docs/function_notes/NEEDS_REVIEW.md:1771 state 7 handler: counter +8 incremented; when it exceeds halfword table value at off_219E1B0+14 it resets +20 to 0 [REVIEW]
- docs/function_notes/hk_38.md:17 state 7 handler: counter +8 incremented; when it exceeds halfword table value at off_219E1B0+14 it resets +20 to 0 [REVIEW]
sub_219E1B4
(not in export)
- docs/function_notes/hk_38.md:18 state 6 trigger: if sub_2036D08 true, sets state +4=7 and counter +8=0
sub_219E1D8
(not in export)
- docs/function_notes.md:1468 state 5 handler: counter-indexed table lookup (halfword table off_219E258) returning 8 by default
- docs/function_notes/NEEDS_REVIEW.md:1772 state 5 handler: counter/table lookup (halfword table at off_219E25C) and button mask checks; on press sets state +4=6, counter 0 and calls sub_2036F10 [REVIEW]
- docs/function_notes/hk_38.md:19 state 5 handler: counter/table lookup (halfword table at off_219E25C) and button mask checks; on press sets state +4=6, counter 0 and calls sub_2036F10 [REVIEW]
sub_219E274
(not in export)
- docs/function_notes/hk_38.md:20 if sub_2036C5C true, sets state +4=5 (transition)
sub_219E294
(not in export)
- docs/function_notes/hk_38.md:21 state 3 handler: counter +8 incremented; when it exceeds halfword table entry at off_219E2CC+6, sets state +4=4, counter 0, calls sub_20370D4 then sub_219E580
sub_219E2D0
(not in export)
- docs/function_notes/hk_38.md:22 if sub_2036D08 true, sets state +4=3 (transition)
sub_219E2F0
(not in export)
- docs/function_notes/hk_38.md:23 state 1 handler: counter +8 incremented; when it exceeds halfword table entry at off_219E328[index], sets state +4=2, counter 0, calls sub_2036F10
sub_219E32C
(not in export)
- docs/function_notes/hk_38.md:24 state 0 handler: on sub_2036C5C true, goes to state 5 and clears +112 if set, otherwise state 1
sub_219E36C
(not in export)
- docs/function_notes.md:1256 loads about 20 2D asset descriptors via sub_204799C and the sub_20B496C helper
- docs/function_notes/NEEDS_REVIEW.md:1773 loads about 20 2D asset descriptors via sub_204799C and sub_20B496C/4810/4A7C/48EC into object +36..+100, branches on mode +12, then sub_219E580 or sub_219E5B4(0) and sub_2016468(14,...) [REVIEW]
- docs/function_notes/hk_38.md:25 loads about 20 2D asset descriptors via sub_204799C and sub_20B496C/4810/4A7C/48EC into object +36..+100, branches on mode +12, then sub_219E580 or sub_219E5B4(0) and sub_2016468(14,...) [REVIEW]
sub_219E580
(not in export)
- docs/function_notes/hk_38.md:26 sets a halfword control bit field at off_219E5A8 (mask 0x43 | dword_219E5AC), calls sub_219E5B4(1), sets +24=1 on object at off_219E5B0
sub_219E5B4
(not in export)
- docs/function_notes.md:1470 per-slot layer setup: calls sub_2016468 six times for the slot's layer entries from off_219E63C
- docs/function_notes/NEEDS_REVIEW.md:1774 per-slot layer setup: calls sub_2016468 six times (ids 4,8,15,20,24,31) with width/height taken from the resource entry at index a1 of the object table [REVIEW]
- docs/function_notes/hk_38.md:27 per-slot layer setup: calls sub_2016468 six times (ids 4,8,15,20,24,31) with width/height taken from the resource entry at index a1 of the object table [REVIEW]
sub_219E640
(not in export)
- docs/function_notes.md:1436 display/IO register reset: masks and sets the words at dword_219E694 / dword_219E698
- docs/function_notes/NEEDS_REVIEW.md:1775 display/IO register reset: masks/sets words at off_219E690/69C with constants, sets low bits of halfword off_219E6A0 to 3, clears several fields and off_219E6BC [REVIEW]
- docs/function_notes/hk_38.md:28 display/IO register reset: masks/sets words at off_219E690/69C with constants, sets low bits of halfword off_219E6A0 to 3, clears several fields and off_219E6BC [REVIEW]
sub_219E6C0
(not in export)
- docs/function_notes/hk_38.md:29 take-and-clear helper: returns off_219E6C8 after zeroing the word it points to (same pattern as sub_219DF44)
sub_219E6CC
(not in export)
- docs/function_notes.md:1257 constructor for another screen object: heap allocation (dword_219E7E8 bytes) and field setup
- docs/function_notes/NEEDS_REVIEW.md:1776 constructor for another screen object: heap alloc (sub_2036BEC, size dword_219E7E8), sets fields, calls sub_219E640 and sub_219E36C, loads BMG strings (sub_20B3F7C ids 119/120), draws via sub_21243AC and sub_212426C [REVIEW]
- docs/function_notes/hk_38.md:30 constructor for another screen object: heap alloc (sub_2036BEC, size dword_219E7E8), sets fields, calls sub_219E640 and sub_219E36C, loads BMG strings (sub_20B3F7C ids 119/120), draws via sub_21243AC and sub_212426C [REVIEW]
sub_219E804
(not in export)
- docs/function_notes/hk_38.md:31 copies 32 bytes of constant table at off_219E834 to the stack and calls sub_20487FC(a1, copy); returns 0 (thin wrapper)
sub_219E838
(not in export)
- docs/function_notes.md:1419 bracketed update: sub_20AE6AC before and sub_20AE630 after sub_2198534 on the range at off_219E874
- docs/function_notes/NEEDS_REVIEW.md:1777 bracketed update: sub_20AE6AC/sub_20AE630 around sub_2198534 on range off_219E874; if a1 given, stores sub_219851C value (unless -1) as halfword at a1+4 [REVIEW]
- docs/function_notes/hk_38.md:32 bracketed update: sub_20AE6AC/sub_20AE630 around sub_2198534 on range off_219E874; if a1 given, stores sub_219851C value (unless -1) as halfword at a1+4 [REVIEW]
sub_219E87C
(not in export)
- docs/function_notes/hk_38.md:33 calls sub_219852C then sub_20AE5F0 on a range from off_219E898 (thin wrapper)
sub_219E8A0
(not in export)
- docs/function_notes/hk_38.md:34 calls sub_219879C, then take-and-clear helper returning off_219E8B4 (zeroes the word it points to)
sub_219E8B8
(not in export)
- docs/function_notes.md:1125 init: gets the current heap via sub_20364E8 / sub_20364E0 and allocates the object of size dword_219E8E4 into off_219E8E8
- docs/function_notes/NEEDS_REVIEW.md:1778 init: gets current heap object via sub_20364E8/sub_20364E0, allocates dword_219E8E4 bytes into off_219E8E8 (sub_2036BEC), then sub_21987B4(obj, a1) [REVIEW]
- docs/function_notes/hk_38.md:35 init: gets current heap object via sub_20364E8/sub_20364E0, allocates dword_219E8E4 bytes into off_219E8E8 (sub_2036BEC), then sub_21987B4(obj, a1) [REVIEW]
sub_219E8EC
(not in export)
- docs/function_notes/hk_38.md:36 getter: returns *off_219E8F8 + dword_219E8FC
sub_219E900
(not in export)
- docs/function_notes/hk_38.md:37 getter: returns the word pointed to by off_219E908
sub_219E90C
(not in export)
- docs/function_notes/hk_38.md:38 copies a 32-byte constant table at off_219E93C to the stack and calls sub_20487FC(a1, copy); returns 0 (same template as sub_219E804)
sub_219E940
(not in export)
- docs/function_notes.md:1420 bracketed update like sub_219E838 with sub_2192EC4 on the range at off_219E97C
- docs/function_notes/NEEDS_REVIEW.md:1779 bracketed update like sub_219E838 but around menu-manager calls sub_2192EC4 and sub_2192E64; stores halfword result at a1+4 when a1 given [REVIEW]
- docs/function_notes/hk_38.md:39 bracketed update like sub_219E838 but around menu-manager calls sub_2192EC4 and sub_2192E64; stores halfword result at a1+4 when a1 given [REVIEW]
sub_219E984
(not in export)
- docs/function_notes/hk_38.md:40 calls sub_2192EA4 then sub_20AE5F0 on a range from off_219E9A0 (thin wrapper)
sub_219E9A8
(not in export)
- docs/function_notes/hk_38.md:41 calls sub_2192F6C, then take-and-clear helper returning off_219E9BC
sub_219E9C0
(not in export)
- docs/function_notes.md:1126 menu init: gets the heap and allocates the object of size dword_219E9EC into off_219E9F0
- docs/function_notes/NEEDS_REVIEW.md:1780 menu init: gets heap object via sub_20364E8/E0, allocates dword_219E9EC bytes into off_219E9F0 (sub_2036BEC), then sub_2192F98(obj, a1) [REVIEW]
- docs/function_notes/hk_38.md:42 menu init: gets heap object via sub_20364E8/E0, allocates dword_219E9EC bytes into off_219E9F0 (sub_2036BEC), then sub_2192F98(obj, a1) [REVIEW]
sub_219E9F4
(not in export)
- docs/function_notes/hk_38.md:43 copies 32-byte constant table at off_219EA24 to the stack and calls sub_20487FC(a1, copy); returns 0 (template wrapper)
sub_219EA28
(not in export)
- docs/function_notes/hk_38.md:44 calls per-frame sub_219E0F8, then if a1 given stores sub_219E088 value as halfword at a1+4 (thin wrapper)
sub_219EA4C
(not in export)
- docs/function_notes/hk_38.md:45 thunk: tail-calls function pointer at off_219EA50
sub_219EA54
export/plan0/ov9_000/sub_219EA54_0219EA54.c
- docs/function_notes.md:1367 teardown: calls sub_219E6C0 (the 154 records of 12 bytes) and clears the global at off_219EA68
- docs/function_notes/NEEDS_REVIEW.md:1781 teardown loop over 154 records of 12 bytes at off_219EA8C: for each nonzero word at +4 calls sub_21A36D0(4, ptr, 0); then sub_214D018(0, table, dword_219EA90) [REVIEW]
- docs/function_notes/hk_38.md:46 teardown loop over 154 records of 12 bytes at off_219EA8C: for each nonzero word at +4 calls sub_21A36D0(4, ptr, 0); then sub_214D018(0, table, dword_219EA90) [REVIEW]
sub_219EA6C
(not in export)
- docs/function_notes.md:1127 creator: allocates a 4-byte object via sub_2036BEC into off_219EA90
- docs/function_notes/NEEDS_REVIEW.md:1782 creator: allocates a 4-byte object via sub_2036BEC into *off_219EA90 on the current heap object, then calls sub_219E6CC(obj) [REVIEW]
- docs/function_notes/hk_38.md:47 creator: allocates a 4-byte object via sub_2036BEC into *off_219EA90 on the current heap object, then calls sub_219E6CC(obj) [REVIEW]
sub_219EA94
export/plan0/ov9_000/sub_219EA94_0219EA94.c
- docs/function_notes/hk_38.md:48 searches a table of 0x9A records (12 bytes each, byte at off_219EABC) for the first free slot; returns index+100 or 0 if none
sub_219EAB4
(not in export)
- docs/function_notes.md:1128 per-frame state machine for object off_219EB3C: copies +32 to +28 and dispatches on the state
- docs/function_notes/NEEDS_REVIEW.md:1783 per-frame state machine for object off_219EB3C: copies +32 to state +28, dispatches states 0..5 to sub_219EFB0/EF04/EEE8/EC18/EBDC/EB40, then sub_219F410 and draws via sub_2124C30; returns +88 when state 5 and counter >=10 [REVIEW]
- docs/function_notes/hk_38.md:49 per-frame state machine for object off_219EB3C: copies +32 to state +28, dispatches states 0..5 to sub_219EFB0/EF04/EEE8/EC18/EBDC/EB40, then sub_219F410 and draws via sub_2124C30; returns +88 when state 5 and counter >=10 [REVIEW]
sub_219EB40
(not in export)
- docs/function_notes.md:1129 state 5 tick: increments the counter at +36 and applies random offsets to the cell values
- docs/function_notes/NEEDS_REVIEW.md:1784 state 5 tick: increments counter +36; random offsets via sub_20AE4C0 used to write a halfword into a 7-row x 11-column grid of 64-byte cells at +16 (highlight/animation) [REVIEW]
- docs/function_notes/hk_38.md:50 state 5 tick: increments counter +36; random offsets via sub_20AE4C0 used to write a halfword into a 7-row x 11-column grid of 64-byte cells at +16 (highlight/animation) [REVIEW]
sub_219EBDC
(not in export)
- docs/function_notes.md:1413 state 3 tick: increments +36 of the object at off_219EC14 and calls sub_21059E0
- docs/function_notes/NEEDS_REVIEW.md:1785 state 3 tick: increments +36, calls sub_21059E0; when counter >=5 calls sub_219F178, sets +72=-256 and +88=1 [REVIEW]
- docs/function_notes/hk_38.md:51 state 3 tick: increments +36, calls sub_21059E0; when counter >=5 calls sub_219F178, sets +72=-256 and +88=1 [REVIEW]
sub_219EC18
(not in export)
- docs/function_notes.md:1593 state-machine input handler for a grid/list cursor (662 bytes): calls sub_21059E0 and moves the cursor
- docs/function_notes/NEEDS_REVIEW.md:1786 state machine input handler for a grid/list cursor (cursor index at +76): cell hit test sub_201EA84, D-pad via sub_20AE408 masks 64/128/32/16 moving cursor through neighbor tables, sub_219F668 validity check, return button goes to sub_219F178 [REVIEW]
- docs/function_notes/hk_38.md:52 state machine input handler for a grid/list cursor (cursor index at +76): cell hit test sub_201EA84, D-pad via sub_20AE408 masks 64/128/32/16 moving cursor through neighbor tables, sub_219F668 validity check, return button goes to sub_219F178 [REVIEW]
sub_219EEE8
(not in export)
- docs/function_notes/hk_38.md:53 calls sub_21059E0; if return button (sub_2128294) is pressed, calls sub_219F210 (state 3)
sub_219EF04
(not in export)
- docs/function_notes.md:1130 state 1 tick: calls sub_21059E0 and increments the counter at +36 of off_219EFA4
- docs/function_notes/NEEDS_REVIEW.md:1787 state 1 tick: calls sub_21059E0, increments counter +36, random offsets via sub_20AE4C0 written into a 7-row grid of 64-byte cells; when counter >=10 calls sub_219F224 (state 2) [REVIEW]
- docs/function_notes/hk_38.md:54 state 1 tick: calls sub_21059E0, increments counter +36, random offsets via sub_20AE4C0 written into a 7-row grid of 64-byte cells; when counter >=10 calls sub_219F224 (state 2) [REVIEW]
sub_219EFB0
(not in export)
- docs/function_notes/hk_38.md:55 calls sub_21059E0; if sub_2036C5C is true calls sub_219F240
sub_219EFCC
export/plan0/ov9_000/sub_219EFCC_0219EFCC.c
- docs/function_notes/hk_38.md:56 thin wrapper: calls sub_219EFD8 with a3 shifted left 7 bits
sub_219F038
export/plan0/ov9_000/sub_219F038_0219F038.c
- docs/function_notes.md:1518 stack-buffer routine: loops up to a1 items, allocating a 92-byte record (sub_2036BEC) for each
- docs/function_notes/NEEDS_REVIEW.md:1788 stack-buffer routine: loops up to a1 items calling sub_21A0AB4(16,...) and sub_219FEB0; then sets a busy flag at off_219F0B4+dword_219F0BC, releases saved slots via sub_219E914 and sub_219BB78, returns via callback [REVIEW]
- docs/function_notes/hk_38.md:57 stack-buffer routine: loops up to a1 items calling sub_21A0AB4(16,...) and sub_219FEB0; then sets a busy flag at off_219F0B4+dword_219F0BC, releases saved slots via sub_219E914 and sub_219BB78, returns via callback [REVIEW]
sub_219F178
(not in export)
- docs/function_notes.md:1443 finish-transition on object off_219F1D0: sets state +32 = 5
- docs/function_notes/NEEDS_REVIEW.md:1789 finish-transition on object off_219F1D0: sets state +32=5, counter +36=0; if +88==1 plays sub_2105980(3 or 0, 10) depending on sub_219F2FC result, if +88==2 plays sub_2105980(4, 10) [REVIEW]
- docs/function_notes/hk_38.md:58 finish-transition on object off_219F1D0: sets state +32=5, counter +36=0; if +88==1 plays sub_2105980(3 or 0, 10) depending on sub_219F2FC result, if +88==2 plays sub_2105980(4, 10) [REVIEW]
sub_219F1D4
(not in export)
- docs/function_notes.md:1406 state transition to 4 on object off_219F204: +32 = 4 and +36 = 0
- docs/function_notes/NEEDS_REVIEW.md:1790 state transition to 4 on object off_219F204: sets +32=4, counter +36=0, halfword +72 = dword_219F208, calls sub_219F35C and UI call sub_212ECC0(..., 0, 5) [REVIEW]
- docs/function_notes/hk_38.md:59 state transition to 4 on object off_219F204: sets +32=4, counter +36=0, halfword +72 = dword_219F208, calls sub_219F35C and UI call sub_212ECC0(..., 0, 5) [REVIEW]
sub_219F210
(not in export)
- docs/function_notes/hk_38.md:60 state transition to 3 on object off_219F220: sets +32=3 and counter +36=0
sub_219F224
(not in export)
- docs/function_notes/hk_38.md:61 state transition to 2 on object off_219F238: sets +32=2, counter +36=0, then tail-calls function pointer off_219F23C
sub_219F240
(not in export)
- docs/function_notes/hk_38.md:62 state transition to 1 on object off_219F27C: sets +32=1, counter +36=0, sets halfword +72 to -256 if sub_20CCCB4()==19 else dword_219F280
sub_219F284
(not in export)
- docs/function_notes.md:1131 resets a 7-row x 11-cell grid on object off_219F2EC: clears the cell words for each row
- docs/function_notes/NEEDS_REVIEW.md:1791 resets a 7-row x 11-cell grid on object off_219F2EC: sets +32=0, +36=0, +68=-192, writes halfword dword_219F2F8 into 64-byte cell entries at +16 [REVIEW]
- docs/function_notes/hk_38.md:63 resets a 7-row x 11-cell grid on object off_219F2EC: sets +32=0, +36=0, +68=-192, writes halfword dword_219F2F8 into 64-byte cell entries at +16 [REVIEW]
sub_219F2FC
(not in export)
- docs/function_notes.md:1448 returns true when slots 1..8 of the current row pass the test (uses a 6-word temporary array)
- docs/function_notes/NEEDS_REVIEW.md:1792 returns true when slots 1..8 of the current row pass sub_205FD78 and slot 9 does not (record/completion check) [REVIEW]
- docs/function_notes/hk_38.md:64 returns true when slots 1..8 of the current row pass sub_205FD78 and slot 9 does not (record/completion check) [REVIEW]
sub_219F35C
(not in export)
- docs/function_notes.md:1374 calls sub_202948C(current row + 1), then returns sub_202947C(1)
- docs/function_notes/NEEDS_REVIEW.md:1793 calls sub_202948C(current row+1), then sub_202947C(1) (row select/ display update) [REVIEW]
- docs/function_notes/hk_38.md:65 calls sub_202948C(current row+1), then sub_202947C(1) (row select/ display update) [REVIEW]
sub_219F384
(not in export)
- docs/function_notes.md:1473 scans 7 rows x 9 records with sub_205FD78 and collects the values that match
- docs/function_notes/NEEDS_REVIEW.md:1794 scans 7 rows x 9 records with sub_205FD78 (values must be >=5); stores highest unlocked row into halfword +74 of off_219F40C (6 if row 5 qualifies) [REVIEW]
- docs/function_notes/hk_38.md:66 scans 7 rows x 9 records with sub_205FD78 (values must be >=5); stores highest unlocked row into halfword +74 of off_219F40C (6 if row 5 qualifies) [REVIEW]
sub_219F410
(not in export)
- docs/function_notes.md:1500 per-frame flag update for 7 rows of cells from the table off_219F4D0
- docs/function_notes/NEEDS_REVIEW.md:1795 per-frame flag update for 7 rows of cells: clears flags, then sets cell flags from slot counter +40, sub_219F668 availability and the current selection; decrements counter [REVIEW]
- docs/function_notes/hk_38.md:67 per-frame flag update for 7 rows of cells: clears flags, then sets cell flags from slot counter +40, sub_219F668 availability and the current selection; decrements counter [REVIEW]
sub_219F4D8
(not in export)
- docs/function_notes.md:1577 refreshes the 7 row highlight flags from the record state of the list at off_219F658
- docs/function_notes/NEEDS_REVIEW.md:1796 refreshes 7 row highlight flags from record state (sub_219F668, sub_219F680), calls sub_212426C and sub_2124A98 per row to redraw [REVIEW]
- docs/function_notes/hk_38.md:68 refreshes 7 row highlight flags from record state (sub_219F668, sub_219F680), calls sub_212426C and sub_2124A98 per row to redraw [REVIEW]
sub_219F668
(not in export)
- docs/function_notes/hk_38.md:69 availability test: returns (halfword +74 of off_219F67C) >= a1
sub_219F680
(not in export)
- docs/function_notes.md:1421 returns the minimum value from sub_205FD78 over the entries of the table for a1 (starting at 8)
- docs/function_notes/NEEDS_REVIEW.md:1797 returns the minimum value from sub_205FD78 over columns 1..9 for row a1+1 (default 8, or 9 when a lookup fails) [REVIEW]
- docs/function_notes/hk_38.md:70 returns the minimum value from sub_205FD78 over columns 1..9 for row a1+1 (default 8, or 9 when a lookup fails) [REVIEW]
sub_219F6C0
(not in export)
- docs/function_notes.md:1258 builds a 2D screen's resources: loads the descriptors through sub_204799C
- docs/function_notes/NEEDS_REVIEW.md:1798 builds a 2D screen's resources: loads descriptors via sub_204799C and sub_20B4934/47D8/4A44/49BC/48B4, picks one of two resource sets by +74 < 6, allocates dword_219F838 bytes (sub_2036BEC) and runs sub_2016468 layer setup [REVIEW]
- docs/function_notes/hk_38.md:71 builds a 2D screen's resources: loads descriptors via sub_204799C and sub_20B4934/47D8/4A44/49BC/48B4, picks one of two resource sets by +74 < 6, allocates dword_219F838 bytes (sub_2036BEC) and runs sub_2016468 layer setup [REVIEW]
sub_219F83C
(not in export)
- docs/function_notes.md:1132 loads six 2D resource descriptors via sub_204799C lookups and the sub_20B helpers
- docs/function_notes/NEEDS_REVIEW.md:1799 loads six 2D resource descriptors via sub_204799C and sub_20B496C/4810/4A7C/49F4/48EC into locals; no global state is written, so it is effectively a resource-probe sequence [REVIEW]
- docs/function_notes/hk_38.md:72 loads six 2D resource descriptors via sub_204799C and sub_20B496C/4810/4A7C/49F4/48EC into locals; no global state is written, so it is effectively a resource-probe sequence [REVIEW]
sub_219F8CC
(not in export)
- docs/function_notes.md:1408 computes two masked words from the object at off_219F900 (+144 and +148) into the registers at off_219F90C
- docs/function_notes/NEEDS_REVIEW.md:1800 computes two masked words from object +144/+148/+152 into off_219F90C and off_219F910 (fixed-point affine parameter extraction) [REVIEW]
- docs/function_notes/hk_38.md:73 computes two masked words from object +144/+148/+152 into off_219F90C and off_219F910 (fixed-point affine parameter extraction) [REVIEW]
sub_219F914
(not in export)
- docs/function_notes/hk_38.md:74 state dispatcher for states 0..8 on off_219F9D4: calls sub_21A00F8/219FF94/219FF6C/219FC50/219FC14/219FBE8/219FBBC/219FB3C/219F9D8, then sub_21A08B8, sub_21A0984 and two sub_2124C30 draws; returns +188 when state 8 and counter >=10
sub_219F9D8
(not in export)
- docs/function_notes.md:1259 state 8 tick: increments the counter +104 and applies random offsets to the cells
- docs/function_notes/NEEDS_REVIEW.md:1801 state 8 tick: counter +104 incremented; random offsets via sub_20AE4C0 written as halfwords into 64-byte cell grids; if state result is 5 calls sub_2016468(9,...) [REVIEW]
- docs/function_notes/hk_38.md:75 state 8 tick: counter +104 incremented; random offsets via sub_20AE4C0 written as halfwords into 64-byte cell grids; if state result is 5 calls sub_2016468(9,...) [REVIEW]
sub_219FB3C
(not in export)
- docs/function_notes.md:1133 choice-screen state: sub_21055B0 then sub_21A0600 with the sound value, then sub_21277AC gate
- docs/function_notes/NEEDS_REVIEW.md:1802 choice-screen state: sub_21055B0 + sub_21A0600, then if sub_21277AC is set reads sub_2127794: -1 or 1 goes to sub_21A048C, 0 sets +188=1, +156=-256 and calls sub_21A0380; then flags 9 cells [REVIEW]
- docs/function_notes/hk_38.md:76 choice-screen state: sub_21055B0 + sub_21A0600, then if sub_21277AC is set reads sub_2127794: -1 or 1 goes to sub_21A048C, 0 sets +188=1, +156=-256 and calls sub_21A0380; then flags 9 cells [REVIEW]
sub_219FBBC
(not in export)
- docs/function_notes/hk_38.md:77 yes/no choice state: sub_21055B0 + sub_21A0600; if sub_2127788 returns true calls sub_21A03D8
sub_219FBE8
(not in export)
- docs/function_notes/hk_38.md:78 choice-screen state: sub_21055B0 + sub_21A0600; if sub_21277C8 returns true calls sub_21A03F4
sub_219FC14
(not in export)
- docs/function_notes/hk_38.md:79 state 4 tick: sub_21055B0 + sub_21A0600, counter +104 incremented; once >=5 and sub_21A06FC is false calls sub_21A0408
sub_219FC50
(not in export)
- docs/function_notes.md:1595 state 3 input handler (738 bytes): cursor index at +158, hit tests, and the sound through sub_21055B0
- docs/function_notes/NEEDS_REVIEW.md:1803 state 3 input handler (cursor index at +158): cell hit test sub_201EA84, D-pad via sub_20AE408 masks 64/128/32/16 moving the cursor over neighbor tables, return button sets +188=2 and calls sub_21A0380 [REVIEW]
- docs/function_notes/hk_38.md:80 state 3 input handler (cursor index at +158): cell hit test sub_201EA84, D-pad via sub_20AE408 masks 64/128/32/16 moving the cursor over neighbor tables, return button sets +188=2 and calls sub_21A0380 [REVIEW]
sub_219FF6C
(not in export)
- docs/function_notes/hk_38.md:81 state 2: sub_21055B0; if return button (sub_2128294) pressed calls sub_21A048C
sub_219FF94
(not in export)
- docs/function_notes.md:1260 state 1 tick: calls sub_21055B0 with the sound entry and then advances the counter of off_21A00D0
- docs/function_notes/NEEDS_REVIEW.md:1804 state 1 tick: same structure as sub_219F9D8 for object off_21A00D0 (random offsets, cell grid writes); returns sub_21A04A0 when counter >=10 [REVIEW]
- docs/function_notes/hk_38.md:82 state 1 tick: same structure as sub_219F9D8 for object off_21A00D0 (random offsets, cell grid writes); returns sub_21A04A0 when counter >=10 [REVIEW]
sub_21A00F8
(not in export)
- docs/function_notes/hk_38.md:83 state 0: sub_21055B0; if sub_2036C5C is true calls sub_21A04BC
sub_21A0120
export/plan0/ov9_000/sub_21A0120_021A0120.c
- docs/function_notes/hk_38.md:84 trampoline: tail-calls a function pointer with no arguments (target unknown, stack-based decompile)
sub_21A0170
export/plan0/ov9_000/sub_21A0170_021A0170.c
- docs/function_notes.md:1586 callback selector (472 bytes): calls one of the stored function pointers with two arguments
- docs/function_notes/NEEDS_REVIEW.md:1805 callback selector: calls function pointer with 2 if a2 or halfword +26 of a1 is nonzero, otherwise with 4 [REVIEW]
- docs/function_notes/hk_38.md:85 callback selector: calls function pointer with 2 if a2 or halfword +26 of a1 is nonzero, otherwise with 4 [REVIEW]
sub_21A0380
(not in export)
- docs/function_notes.md:1440 screen-end handler: sets state +100 = 8 and the counter +104 on off_21A03D4
- docs/function_notes/NEEDS_REVIEW.md:1806 screen-end handler: sets state +100=8, counter +104=0, calls sub_21282C8; on +188==1 calls sub_2029608 and sub_2105584(4,10), on ==2 sub_2105584(0,10) [REVIEW]
- docs/function_notes/hk_38.md:86 screen-end handler: sets state +100=8, counter +104=0, calls sub_21282C8; on +188==1 calls sub_2029608 and sub_2105584(4,10), on ==2 sub_2105584(0,10) [REVIEW]
sub_21A03D8
(not in export)
- docs/function_notes/hk_38.md:87 state set: +100=7, counter +104=0, then tail-calls function pointer off_21A03F0
sub_21A03F4
(not in export)
- docs/function_notes/hk_38.md:88 state set: +100=6, counter +104=0
sub_21A0408
(not in export)
- docs/function_notes.md:1261 sets state +100 = 5 and counter +104 = 0 on off_21A0460; looks up two BMG strings
- docs/function_notes/NEEDS_REVIEW.md:1807 state set +100=5, counter +104=0; looks up two BMG strings (sub_20B3F7C ids 4 and 2) and shows them via sub_21277F8; clears 9 cell flags [REVIEW]
- docs/function_notes/hk_38.md:89 state set +100=5, counter +104=0; looks up two BMG strings (sub_20B3F7C ids 4 and 2) and shows them via sub_21277F8; clears 9 cell flags [REVIEW]
sub_21A0468
(not in export)
- docs/function_notes.md:1368 state set on the object at off_21A0480: +100 = 4, counter +104 = 0, then tail-calls its handler
- docs/function_notes/NEEDS_REVIEW.md:1808 state set: +100=4, counter +104=0, then tail-calls function pointer off_21A0488 with (off_21A0484, 0, 5) [REVIEW]
- docs/function_notes/hk_38.md:90 state set: +100=4, counter +104=0, then tail-calls function pointer off_21A0488 with (off_21A0484, 0, 5) [REVIEW]
sub_21A048C
(not in export)
- docs/function_notes/hk_38.md:91 state set: +100=3, counter +104=0
sub_21A04A0
(not in export)
- docs/function_notes/hk_38.md:92 state set: +100=2, counter +104=0, then tail-calls function pointer off_21A04B8
sub_21A04BC
(not in export)
- docs/function_notes/hk_38.md:93 state set: +100=1, counter +104=0
sub_21A04D0
(not in export)
- docs/function_notes.md:1262 screen init/reset for grid object off_21A05D8: zeroes the cell words and the counters
- docs/function_notes/NEEDS_REVIEW.md:1809 screen init/reset for grid object off_21A05D8: zeroes +100/+104, sets +144=dword_21A05DC, +148=0, +152=-192, writes halfword flags into 7-row and 9-row cell tables [REVIEW]
- docs/function_notes/hk_38.md:94 screen init/reset for grid object off_21A05D8: zeroes +100/+104, sets +144=dword_21A05DC, +148=0, +152=-192, writes halfword flags into 7-row and 9-row cell tables [REVIEW]
sub_21A0600
(not in export)
- docs/function_notes.md:1562 syncs the pending selection animation: when sub_21A06FC passes, takes the value at off_21A06E4
- docs/function_notes/NEEDS_REVIEW.md:1810 sync of pending selection animation: if sub_21A06FC is pending (+172 nonzero) steps the cell highlight via sub_2116D10 or sub_21A0754 and decrements +172; otherwise if +158 != +176 sets +172=7 [REVIEW]
- docs/function_notes/hk_38.md:95 sync of pending selection animation: if sub_21A06FC is pending (+172 nonzero) steps the cell highlight via sub_2116D10 or sub_21A0754 and decrements +172; otherwise if +158 != +176 sets +172=7 [REVIEW]
sub_21A06FC
(not in export)
- docs/function_notes/hk_38.md:96 returns true when the pending-step counter +172 of object off_21A0710 is nonzero
sub_21A0714
(not in export)
- docs/function_notes.md:1134 confirm/select helper: sub_202947C(row + 1), then reads the selection through sub_2029608 and sub_20295F8
- docs/function_notes/NEEDS_REVIEW.md:1811 confirm/select helper: sub_202947C(row+1), reads sub_2029608 and sub_20295F8, looks up index via sub_203B680, then sub_2029468(index-1) [REVIEW]
- docs/function_notes/hk_38.md:97 confirm/select helper: sub_202947C(row+1), reads sub_2029608 and sub_20295F8, looks up index via sub_203B680, then sub_2029468(index-1) [REVIEW]
sub_21A0754
(not in export)
- docs/function_notes.md:1263 refreshes the info panel for the selected record (330 bytes) using sub_2029608
- docs/function_notes/NEEDS_REVIEW.md:1812 refreshes the info panel for the selected record: clears and sets cell flags, reads record via sub_205FD78, looks up a BMG string (sub_20B3F7C) and draws via sub_212426C [REVIEW]
- docs/function_notes/hk_38.md:98 refreshes the info panel for the selected record: clears and sets cell flags, reads record via sub_205FD78, looks up a BMG string (sub_20B3F7C) and draws via sub_212426C [REVIEW]
sub_21A08B8
(not in export)
- docs/function_notes.md:1502 per-frame cell-flag update for 9 rows from the table off_21A097C (same pattern as sub_219F410)
- docs/function_notes/NEEDS_REVIEW.md:1813 per-frame cell-flag update for 9 rows (same pattern as sub_219F410), with per-row countdown at +108 and a special case for row 8 gated by +160 [REVIEW]
- docs/function_notes/hk_38.md:99 per-frame cell-flag update for 9 rows (same pattern as sub_219F410), with per-row countdown at +108 and a special case for row 8 gated by +160 [REVIEW]
sub_21A0984
(not in export)
- docs/function_notes.md:1264 palette fade: interpolates two 16-entry BGR555 palettes at off_21A0B10 by the fade counter
- docs/function_notes/NEEDS_REVIEW.md:1814 palette fade: interpolates two 16-entry BGR555 palettes by counter +168 (divide via sub_2133068 by 100), writes to object buffer at +32, flushes with sub_200EE74 and uploads via sub_2016468(30,...) [REVIEW]
- docs/function_notes/hk_38.md:100 palette fade: interpolates two 16-entry BGR555 palettes by counter +168 (divide via sub_2133068 by 100), writes to object buffer at +32, flushes with sub_200EE74 and uploads via sub_2016468(30,...) [REVIEW]
sub_21A0B1C
(not in export)
- docs/function_notes.md:1594 full redraw of the 9-row record grid (686 bytes): clears the cells and writes each record row
- docs/function_notes/NEEDS_REVIEW.md:1815 full redraw of the 9-row record grid: clears cell flags, sets flags from sub_205FD78 results, draws record text via sub_21A6410, sub_2124A20, sub_212426C with sub_21A0DE8 labels, then sub_2124A98 per row [REVIEW]
- docs/function_notes/hk_38.md:101 full redraw of the 9-row record grid: clears cell flags, sets flags from sub_205FD78 results, draws record text via sub_21A6410, sub_2124A20, sub_212426C with sub_21A0DE8 labels, then sub_2124A98 per row [REVIEW]
sub_21A0DE8
(not in export)
- docs/function_notes.md:1389 formats a small 2D label into buffer a2: the value from sub_2029608 through sub_2124FAC, and the separator character 45 at +2
- docs/function_notes/NEEDS_REVIEW.md:1816 formats a small 2D label into buffer a2: current index via sub_2029608 through sub_2124FAC, separator halfword 45 at +2, a1+1 at +4, zero terminator at +6 [REVIEW]
- docs/function_notes/hk_38.md:102 formats a small 2D label into buffer a2: current index via sub_2029608 through sub_2124FAC, separator halfword 45 at +2, a1+1 at +4, zero terminator at +6 [REVIEW]
sub_21A0E14
(not in export)
- docs/function_notes.md:1425 sets flag +160 of object off_21A0E58 to 1 and clears the 8 entries that follow
- docs/function_notes/NEEDS_REVIEW.md:1817 sets flag +160 of object off_21A0E58 to 1 and ANDs in sub_205FD78 results for records 1..8 of the current row, so +160 ends up as an all-records-pass flag [REVIEW]
- docs/function_notes/hk_38.md:103 sets flag +160 of object off_21A0E58 to 1 and ANDs in sub_205FD78 results for records 1..8 of the current row, so +160 ends up as an all-records-pass flag [REVIEW]
sub_21A0E5C
(not in export)
- docs/function_notes.md:1265 loads 2D screen resources via sub_204799C and the sub_20B49 helpers (486 bytes)
- docs/function_notes/NEEDS_REVIEW.md:1818 loads 2D screen resources via sub_204799C and sub_20B4934/4A44/47D8/49BC/48B4, allocates dword_21A1058 bytes into +72 (sub_2036BEC), then issues sub_2016468 layer setup calls (ids 4,15,8,9,19,14,35,30) [REVIEW]
- docs/function_notes/hk_38.md:104 loads 2D screen resources via sub_204799C and sub_20B4934/4A44/47D8/49BC/48B4, allocates dword_21A1058 bytes into +72 (sub_2036BEC), then issues sub_2016468 layer setup calls (ids 4,15,8,9,19,14,35,30) [REVIEW]
sub_21A1098
export/plan0/ov9_000/sub_21A1098_021A1098.c
- docs/function_notes.md:1266 init for a screen object at *a1: stores two words and sets the state
- docs/function_notes/NEEDS_REVIEW.md:1819 init for a screen object at *a1: stores two words and two bytes, then calls sub_21A4B50 with ids 50..54 and string table entries; tail-calls the final callback [REVIEW]
- docs/function_notes/hk_38.md:105 init for a screen object at *a1: stores two words and two bytes, then calls sub_21A4B50 with ids 50..54 and string table entries; tail-calls the final callback [REVIEW]
sub_21A1184
(not in export)
- docs/function_notes.md:1135 getter: writes (-65536 * (object +48)) masked into off_21A11A0 and returns the pointer
- docs/function_notes/NEEDS_REVIEW.md:1820 getter: writes masked word (-65536 * (object+48)) & dword_21A119C into off_21A11A0 and returns that pointer [REVIEW]
- docs/function_notes/hk_38.md:106 getter: writes masked word (-65536 * (object+48)) & dword_21A119C into off_21A11A0 and returns that pointer [REVIEW]
sub_21A11A4
(not in export)
- docs/function_notes/hk_38.md:107 state dispatcher for states 0..6 on off_21A1248 (state at +36): calls sub_21A1800/16C4/1654/163C/13B8/1378/124C, then sub_21A1C14 and two sub_2124C30 draws; returns +76 when state 6 and counter +44 >=10
sub_21A124C
(not in export)
- docs/function_notes.md:1267 state 6 tick: increments the counter +44 of off_21A1364 and writes random offsets through sub_20AE4C0
- docs/function_notes/NEEDS_REVIEW.md:1821 state 6 tick: counter +44 incremented; random offsets via sub_20AE4C0 written as halfwords into 4 rows of 3-cell highlight tables, gated by sub_2056DEC(16) [REVIEW]
- docs/function_notes/hk_38.md:108 state 6 tick: counter +44 incremented; random offsets via sub_20AE4C0 written as halfwords into 4 rows of 3-cell highlight tables, gated by sub_2056DEC(16) [REVIEW]
sub_21A1378
(not in export)
- docs/function_notes.md:1416 state 5 tick: calls sub_21A1AE8; when the state at off_21A13B4 +44 is 5 sets +56 = 1
- docs/function_notes/NEEDS_REVIEW.md:1822 state 5 tick: calls sub_21A1AE8, sets +56=1 on first tick, increments counter +44; at >=10 calls sub_21A1B80 and, if it returns 0, sub_21A1944 (state 6) [REVIEW]
- docs/function_notes/hk_38.md:109 state 5 tick: calls sub_21A1AE8, sets +56=1 on first tick, increments counter +44; at >=10 calls sub_21A1B80 and, if it returns 0, sub_21A1944 (state 6) [REVIEW]
sub_21A13B8
(not in export)
- docs/function_notes.md:1268 state 4 input handler (cursor index +52): cell hit test, then sub_21A1AE8 on a hit
- docs/function_notes/NEEDS_REVIEW.md:1823 state 4 input handler (cursor index at +52): cell hit test sub_201EA84, D-pad masks 64/128/32/16 pick a neighbor offset table (chosen by sub_2056DEC(16)), updates cursor and plays cue sub_212ECC0 [REVIEW]
- docs/function_notes/hk_38.md:110 state 4 input handler (cursor index at +52): cell hit test sub_201EA84, D-pad masks 64/128/32/16 pick a neighbor offset table (chosen by sub_2056DEC(16)), updates cursor and plays cue sub_212ECC0 [REVIEW]
sub_21A163C
(not in export)
- docs/function_notes/hk_38.md:111 state 3: if return button (sub_2128294) is pressed calls sub_21A198C
sub_21A1654
(not in export)
- docs/function_notes.md:1455 state 2 tick on off_21A16B8: counter +44 incremented, and sub_20AE488 values written to the cells
- docs/function_notes/NEEDS_REVIEW.md:1824 state 2 tick: counter +44 incremented; sub_20AE488(counter) value written into +48 and into 10 cell halfwords at +20; at >=10 calls sub_21A19A0 [REVIEW]
- docs/function_notes/hk_38.md:112 state 2 tick: counter +44 incremented; sub_20AE488(counter) value written into +48 and into 10 cell halfwords at +20; at >=10 calls sub_21A19A0 [REVIEW]
sub_21A16C4
(not in export)
- docs/function_notes.md:1269 state 1 tick: like sub_21A124C for object off_21A17EC with the 224 base
- docs/function_notes/NEEDS_REVIEW.md:1825 state 1 tick: like sub_21A124C for object off_21A17EC: random offsets via sub_20AE4C0, 4-row highlight writes; at counter >=10 calls sub_21A19BC [REVIEW]
- docs/function_notes/hk_38.md:113 state 1 tick: like sub_21A124C for object off_21A17EC: random offsets via sub_20AE4C0, 4-row highlight writes; at counter >=10 calls sub_21A19BC [REVIEW]
sub_21A1800
(not in export)
- docs/function_notes/hk_38.md:114 state 0: if sub_2036C5C is true calls sub_21A19D0
sub_21A1818
export/plan0/ov9_000/sub_21A1818_021A1818.c
- docs/function_notes.md:1370 calls sub_2036AB0 on the field +32 of *off_21A1834, clears the global and returns it
- docs/function_notes/NEEDS_REVIEW.md:1826 sets byte at a1+a2 to 3 if it was zero and calls sub_21988B4 on the object; ends in a JUMPOUT to 0x21A1874 (decompiler artifact) [REVIEW]
- docs/function_notes/hk_38.md:115 sets byte at a1+a2 to 3 if it was zero and calls sub_21988B4 on the object; ends in a JUMPOUT to 0x21A1874 (decompiler artifact) [REVIEW]
sub_21A1838
export/plan0/ov9_000/sub_21A1838_021A1838.c
- docs/function_notes.md:1507 calls sub_21A1A04(a1, dword_21A1898) and then sets the screen object flags at off_21A1920 / off_21A1924
- docs/function_notes/NEEDS_REVIEW.md:1827 calls sub_21A1A04(a1, dword_21A1898) then tail-calls callback with 1 [REVIEW]
- docs/function_notes/hk_38.md:116 calls sub_21A1A04(a1, dword_21A1898) then tail-calls callback with 1 [REVIEW]
sub_21A1944
(not in export)
- docs/function_notes/hk_38.md:117 state set: +40=6, counter +44=0
sub_21A1958
(not in export)
- docs/function_notes/hk_38.md:118 state set: +40=5, counter +44=0, +76=1, calls sub_21A1B98, then UI call sub_212ECC0(off_21A1988, 0, 5)
sub_21A198C
(not in export)
- docs/function_notes/hk_39.md:3 trivial setter: sets state field +40=4 and clears +44 on the object at off_21A199C, returns that object pointer.
sub_21A19A0
(not in export)
- docs/function_notes/hk_39.md:4 sets state +40=3 and clears +44 on object at off_21A19B4, then tail-calls off_21A19B8 (next-stage callback).
sub_21A19BC
(not in export)
- docs/function_notes/hk_39.md:5 sets state +40=2 and clears +44 on object at off_21A19CC, returns that object pointer.
sub_21A19D0
(not in export)
- docs/function_notes/hk_39.md:6 sets state +40=1 and clears +44 on object at off_21A19E0, returns that object pointer.
sub_21A19E4
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1828 probably init of a 6x4 cell grid object (off_21A1AD4): writes 192/-192 cell values, alternates -224/224 per row from index tables, keyed on sub_2056DEC(16)
- docs/function_notes/hk_39.md:7 probably init of a 6x4 cell grid object (off_21A1AD4): writes 192/-192 cell values, alternates -224/224 per row from index tables, keyed on sub_2056DEC(16)
sub_21A1AE8
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1829 probably per-frame cursor/selection blink step on object off_21A1B74: counts down +60 rewriting tile cells, resets selection via sub_21A1BD8 when countdown
- docs/function_notes/hk_39.md:8 probably per-frame cursor/selection blink step on object off_21A1B74: counts down +60 rewriting tile cells, resets selection via sub_21A1BD8 when countdown
sub_21A1B80
(not in export)
- docs/function_notes/hk_39.md:9 returns nonzero when countdown field +60 of object off_21A1B94 is nonzero (busy/animating check).
sub_21A1B98
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1830 probably selects one of 4 menu-item sprites by index +52 from table off_21A1BD4, shows it via sub_20295C0 with sub_20295A0/sub_20295B0, then sub_2029590(0).
- docs/function_notes/hk_39.md:10 probably selects one of 4 menu-item sprites by index +52 from table off_21A1BD4, shows it via sub_20295C0 with sub_20295A0/sub_20295B0, then sub_2029590(0).
sub_21A1BD8
(not in export)
- docs/function_notes/hk_39.md:11 clears 4 tile cells from table off_21A1C0C in object +20 and sets the cell indexed by object +52 to 1 (selection highlight); returns cell offset.
sub_21A1C14
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1831 probably redraws selection highlight for 4 items from 6-byte records at off_21A1C88 (layer +24); second pass clears 3 cells when sub_2056DEC(16) is false.
- docs/function_notes/hk_39.md:12 probably redraws selection highlight for 4 items from 6-byte records at off_21A1C88 (layer +24); second pass clears 3 cells when sub_2056DEC(16) is false.
sub_21A1C90
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1832 probably initializes a 4-row x 3-column highlight/text cell layout from tables off_21A1D44/48/50, then calls sub_2124A98 for each of 4 entries plus a final
- docs/function_notes/hk_39.md:13 probably initializes a 4-row x 3-column highlight/text cell layout from tables off_21A1D44/48/50, then calls sub_2124A98 for each of 4 entries plus a final
sub_21A1D58
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1833 probably builds a results/menu screen: fetches 9 resources via sub_204799C, applies them through sub_20B4xxx setters, sets fields +4/+12/+16/+28 on
- docs/function_notes/hk_39.md:14 probably builds a results/menu screen: fetches 9 resources via sub_204799C, applies them through sub_20B4xxx setters, sets fields +4/+12/+16/+28 on
sub_21A1F40
export/plan0/ov9_000/sub_21A1F40_021A1F40.c
- docs/function_notes/NEEDS_REVIEW.md:1834 probably per-frame race/lap progress tick on objects off_21A2224 and off_21A2410: timer compare via sub_200F5AC/sub_2132E40, state dispatch via JUMPOUT
- docs/function_notes/hk_39.md:15 probably per-frame race/lap progress tick on objects off_21A2224 and off_21A2410: timer compare via sub_200F5AC/sub_2132E40, state dispatch via JUMPOUT
sub_21A2028
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1835 probably spawns/updates a group of 8-12 sprite handles from dword table dword_21A21A0..F4, chosen by mode a2[39]+40 and state a2[40]; stores handle in a2[41].
- docs/function_notes/hk_39.md:16 probably spawns/updates a group of 8-12 sprite handles from dword table dword_21A21A0..F4, chosen by mode a2[39]+40 and state a2[40]; stores handle in a2[41].
sub_21A21F8
(not in export)
- docs/function_notes/hk_39.md:17 computes a 3-word screen position into a3 from object +36/+44 plus fixed-point offset (sub_2133048 >> 12) and a1+8.
sub_21A2264
(not in export)
- docs/function_notes/hk_39.md:18 decrements timer at a2+160; on underflow advances a 64-bit tick at off_21A22D4, reloads timer to about 70, and if flags allow spawns an effect via sub_208B7BC.
sub_21A22E0
(not in export)
- docs/function_notes/hk_39.md:19 iterates a pointer list (count at +4); for each non-null object resets timer +160 from the tick, clears flag bits 2 and 8 at +2, sets +102=31.
sub_21A2378
export/plan0/ov9_000/sub_21A2378_021A2378.c
- docs/function_notes/hk_39.md:20 state dispatcher stub: for state 3, 4, 6 or 11 jumps out, otherwise tail-calls sub_21A238C.
sub_21A238C
export/plan0/ov9_000/sub_21A238C_021A238C.c
- docs/function_notes/NEEDS_REVIEW.md:1836 probably state-machine step: calls sub_21A47E4 when state is 11 and flag set, then sub_219AAB8, and tail-calls sub_21A23A8 when off_21A2410+4 is nonzero.
- docs/function_notes/hk_39.md:21 probably state-machine step: calls sub_21A47E4 when state is 11 and flag set, then sub_219AAB8, and tail-calls sub_21A23A8 when off_21A2410+4 is nonzero.
sub_21A23A0
(not in export)
- docs/function_notes/hk_39.md:22 thunk that indirect-calls off_21A23A4.
sub_21A23A8
export/plan0/ov9_000/sub_21A23A8_021A23A8.c
- docs/function_notes/hk_39.md:23 calls sub_2198A58, and if state is 18 computes remaining time from sub_21A34D8(18) and tail-calls sub_21A23D4 with it.
sub_21A23D4
export/plan0/ov9_000/sub_21A23D4_021A23D4.c
- docs/function_notes/NEEDS_REVIEW.md:1837 probably picks the next screen/transition: tries sub_219F150, else chains sub_219EDE0, sub_219EAC0, sub_219E634 and tail-calls the resulting function pointer.
- docs/function_notes/hk_39.md:24 probably picks the next screen/transition: tries sub_219F150, else chains sub_219EDE0, sub_219EAC0, sub_219E634 and tail-calls the resulting function pointer.
sub_21A23E8
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1838 probably a 16-state screen/race-results state machine (jump table jpt_21A242E) updating sprite positions with fixed-point math and
- docs/function_notes/hk_39.md:25 probably a 16-state screen/race-results state machine (jump table jpt_21A242E) updating sprite positions with fixed-point math and
sub_21A291C
export/plan0/ov9_000/sub_21A291C_021A291C.c
- docs/function_notes/hk_39.md:26 returns -1 if table at off_21A2964 is empty; else stores elapsed time (sub_21A34D8 minus timestamp at +16) into a1 and returns elapsed >= threshold at +4.
sub_21A2968
export/plan0/ov9_000/sub_21A2968_021A2968.c
- docs/function_notes/NEEDS_REVIEW.md:1839 probably queues an event record: validates a2 (state 19 check, flag bytes), allocates 32-byte block via sub_21A36F8 at off_21A2A4C filled with bytes and
- docs/function_notes/hk_39.md:27 probably queues an event record: validates a2 (state 19 check, flag bytes), allocates 32-byte block via sub_21A36F8 at off_21A2A4C filled with bytes and
sub_21A2A20
(not in export)
- docs/function_notes/hk_39.md:28 advances a ring-buffer/scroll offset at off_21A2C90+dword_21A2C94 by step and wraps at dword_21A2C9C, then calls sub_20AE6AC and sub_21A2A54.
sub_21A2A54
export/plan0/ov9_000/sub_21A2A54_021A2A54.c
- docs/function_notes/hk_39.md:29 post-process hook: if object at off_21A2A98 exists and sub_219C368 is false, passes a3 through sub_218B274 using handle from sub_218B44C; else returns a3.
sub_21A2A7A
(not in export)
- docs/function_notes/hk_39.md:30 thin wrapper: returns table entry at dword_21A2CAC+(index<<9) if nonzero, else calls sub_21A2A9C(0,...) (probably get-or-create).
sub_21A2A9C
export/plan0/ov9_000/sub_21A2A9C_021A2A9C.c
- docs/function_notes/NEEDS_REVIEW.md:1840 probably allocates a 12-byte slot (base index 100) in table off_21A2B50, copies the name a2 into a new buffer via sub_21A36F8, stores a3, calls sub_21A4B50
- docs/function_notes/hk_39.md:31 probably allocates a 12-byte slot (base index 100) in table off_21A2B50, copies the name a2 into a new buffer via sub_21A36F8, stores a3, calls sub_21A4B50
sub_21A2C30
export/plan0/ov9_000/sub_21A2C30_021A2C30.c
- docs/function_notes/hk_39.md:32 readiness check: false if sub_219C368 is set; else true when object at off_21A2C70 is valid, sub_219BA80()==5, and flag at +dword_21A2C74 is zero.
sub_21A2CD0
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1841 probably menu input dispatch: calls indirect loc_20CA69C for a selection index offset +2; cases 0/2 call sub_21A4A8C, cases 3/4 set state 11 and flag on object
- docs/function_notes/hk_39.md:33 probably menu input dispatch: calls indirect loc_20CA69C for a selection index offset +2; cases 0/2 call sub_21A4A8C, cases 3/4 set state 11 and flag on object
sub_21A2D70
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1842 probably touch/button hit-test over menu list off_21A2DE4: gated by sub_2192A34, sub_2185094 finds rect hits, each hit calls sub_21A41A8(index,1); button
- docs/function_notes/hk_39.md:34 probably touch/button hit-test over menu list off_21A2DE4: gated by sub_2192A34, sub_2185094 finds rect hits, each hit calls sub_21A41A8(index,1); button
sub_21A2DEC
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1843 probably input handler for a 29-cell grid menu (list off_21A3088): d-pad via sub_20AE408 masks 32/16/64/128, buttons 1/2 pick entries, cursor wraps 0-14, text
- docs/function_notes/hk_39.md:35 probably input handler for a 29-cell grid menu (list off_21A3088): d-pad via sub_20AE408 masks 32/16/64/128, buttons 1/2 pick entries, cursor wraps 0-14, text
sub_21A30C0
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1844 probably menu input for list off_21A3464: button masks 8/4/2 and dword_21A346C map to action ids 26/25/23/42 via sub_21A41A8; otherwise refreshes cell tables
- docs/function_notes/hk_39.md:36 probably menu input for list off_21A3464: button masks 8/4/2 and dword_21A346C map to action ids 26/25/23/42 via sub_21A41A8; otherwise refreshes cell tables
sub_21A3208
export/plan0/ov9_000/sub_21A3208_021A3208.c
- docs/function_notes/hk_39.md:37 setter: stores its argument into the dword at *off_21A3214+dword_21A3218 and returns it.
sub_21A321C
export/plan0/ov9_000/sub_21A321C_021A321C.c
- docs/function_notes/hk_39.md:38 setter: stores its argument into the dword at *off_21A3228+dword_21A322C and returns it.
sub_21A3230
export/plan0/ov9_000/sub_21A3230_021A3230.c
- docs/function_notes/hk_39.md:39 gets a record via sub_21A2FA8(a1); returns 0 if sub_21A2F80(a1)==2, else sets record +4/+8 to a2/a3, active flag +29=1, clears +16/+24, returns 1.
sub_21A326C
export/plan0/ov9_000/sub_21A326C_021A326C.c
- docs/function_notes/hk_39.md:40 if sub_219C368 is clear, sub_219BA94(a1) is true and a3 is within limit at off_21A32D0+dword_21A32D4, calls sub_21A2F64(a1,a2,a3,0) then optional callback at
sub_21A3612
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1845 probably table-driven value setter: v1 = sub_21A635C(a1, 2*a1) plus off_21A388C[sub_21A637C()], stored into object off_21A386C+dword_21A3874 (partial
- docs/function_notes/hk_39.md:41 probably table-driven value setter: v1 = sub_21A635C(a1, 2*a1) plus off_21A388C[sub_21A637C()], stored into object off_21A386C+dword_21A3874 (partial
sub_21A3710
export/plan0/ov9_000/sub_21A3710_021A3710.c
- docs/function_notes/hk_39.md:42 stores a1 and a2 into two global pointer slots (off_21A371C[0], off_21A3720) and returns the old slot pointer; probably a callback registration setter.
sub_21A3748
export/plan0/ov9_000/sub_21A3748_021A3748.c
- docs/function_notes/hk_39.md:43 polls async job at off_21A37A4: state 4 becomes 5; while pending (sub_21A86B4) returns 0; when sub_21886EC reports done, clears the pointer and returns 1.
sub_21A37A8
export/plan0/ov9_000/sub_21A37A8_021A37A8.c
- docs/function_notes/hk_39.md:44 blocking take: if a pending job at off_21A37D8 exists, spins on sub_21886EC (idle via sub_200DC3C) until done, clears the pointer and returns it.
sub_21A37DC
export/plan0/ov9_000/sub_21A37DC_021A37DC.c
- docs/function_notes/hk_39.md:45 polls job at off_21A3848 via sub_2188724: 5 sets state 4 (done); >=0 returns 2 (busy); below -10 reports code 5 and state 7; else code 11 and state 8.
sub_21A3850
export/plan0/ov9_000/sub_21A3850_021A3850.c
- docs/function_notes/hk_39.md:46 state step for job at off_21A38A0: state 2 stores sub_2188798 result; state 4 with flag set calls sub_21A5BC8 and moves to state 6 unless it returns 9.
sub_21A38A4
export/plan0/ov9_000/sub_21A38A4_021A38A4.c
- docs/function_notes/hk_39.md:47 starts a poll: if job at off_21A38D8 has a nonzero first field, sets its state to 3, calls sub_21A37DC and returns 1; else 0.
sub_21A3948
export/plan0/ov9_000/sub_21A3948_021A3948.c
- docs/function_notes/hk_39.md:48 maps sentinel pointer values 0/1/2 to strings via sub_21865F4 using pointers off_21A3984/off_21A3988/off_21A398C; other values pass through.
sub_21A3990
export/plan0/ov9_000/sub_21A3990_021A3990.c
- docs/function_notes/hk_39.md:49 thin wrapper calling sub_21A39A4(a1, 3, 1, 20).
sub_21A3FFC
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1846 probably HUD number display update: splits two counters (sub_2077A5C, sub_2077A4C) into digit fields via sub_2133068 (divide by 10) and writes 8 cells of
- docs/function_notes/hk_39.md:50 probably HUD number display update: splits two counters (sub_2077A5C, sub_2077A4C) into digit fields via sub_2133068 (divide by 10) and writes 8 cells of
sub_21A41A8
export/plan0/ov9_000/sub_21A41A8_021A41A8.c
- docs/function_notes/NEEDS_REVIEW.md:1847 probably message/text emitter: encodes 16-bit characters into buffer a2 (length at +dword_21A4340) using callbacks at a1+136/140/144/148/152 by mode a3
- docs/function_notes/hk_39.md:51 probably message/text emitter: encodes 16-bit characters into buffer a2 (length at +dword_21A4340) using callbacks at a1+136/140/144/148/152 by mode a3
sub_21A4704
(not in export)
- docs/function_notes/hk_39.md:52 countdown ticker at off_21A4740+dword_21A4744 decrements by 2; on going negative clamps to 0 and resets dword_21A4748=0, dword_21A474C=8, dword_21A4750=0.
sub_21A4754
(not in export)
- docs/function_notes/hk_39.md:53 increments counter at off_21A4784+dword_21A4788 by 2; clamps to 16 and resets dword_21A478C=8 and dword_21A4790=12; returns counter pointer.
sub_21A4794
(not in export)
- docs/function_notes/hk_39.md:54 decrements counter at off_21A47D0+dword_21A47D4 by 2 with floor 0; on underflow sets fields to 4, 11, 0.
sub_21A47E4
export/plan0/ov9_000/sub_21A47E4_021A47E4.c
- docs/function_notes/hk_39.md:55 timeout gate on object a1 (default off_21A482C): if +188 is set and sub_218E890()-obj+172 >= dword_21A4830, calls sub_21A39E4(obj,1), clears +180, returns 0
sub_21A4824
(not in export)
- docs/function_notes/hk_39.md:56 sets state fields 7, 10 and 0 on object at off_21A4844, then indirect-calls off_21A4854(2,0).
sub_21A4858
(not in export)
- docs/function_notes/hk_39.md:57 sets fields 5 and 13 on object at off_21A4874, clears the dword at dword_21A4880 and returns that pointer.
sub_21A4884
(not in export)
- docs/function_notes/hk_39.md:58 per-frame slide animator: adds velocity to position, bumps timer +2; when position <= 0 clamps and resets fields; sets sprite Y = position - 192 on object
sub_21A48F4
(not in export)
- docs/function_notes/hk_39.md:59 init of UI object off_21A4964: sets fields 3, 6, 192, -32 and sets cells 1-3 to -1 (hide/reset).
sub_21A497C
(not in export)
- docs/function_notes/hk_39.md:60 per-frame slide animator, counterpart of sub_21A4884: adds velocity, clamps at 192 and sets state fields 1/3/0 on off_21A49D4; sprite Y = position - 192.
sub_21A49F0
(not in export)
- docs/function_notes/hk_39.md:61 init of two UI objects off_21A4A70: fields 2, 2, 0, 32; cell 1 cleared on one object; cells 1-3 set to -3 on the other.
sub_21A4A8C
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1848 probably menu panel reset: calls sub_20CA688(0), sets fields 0, 15, 0 on off_21A4AF4 and sets cells 1-3 to -1.
- docs/function_notes/hk_39.md:62 probably menu panel reset: calls sub_20CA688(0), sets fields 0, 15, 0 on off_21A4AF4 and sets cells 1-3 to -1.
sub_21A4B08
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1849 probably switches UI panel: calls sub_20CA6A8 and sub_20CA688(1), sets fields 10 and 14 on off_21A4B70, sets cells 1-3 to -3.
- docs/function_notes/hk_39.md:63 probably switches UI panel: calls sub_20CA6A8 and sub_20CA688(1), sets fields 10 and 14 on off_21A4B70, sets cells 1-3 to -3.
sub_21A4B80
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1850 probably clears display layers for a screen transition: sub_2148934(1), writes BG control bits at off_21A4CAC/CB8/CC0, then clear/fill helpers (sub_200EE74
- docs/function_notes/hk_39.md:64 probably clears display layers for a screen transition: sub_2148934(1), writes BG control bits at off_21A4CAC/CB8/CC0, then clear/fill helpers (sub_200EE74
sub_21A4CF0
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1851 probably screen/layer setup: sub_2148934(1) and BG register bits, sub_214A428 init, then a long series of sub_200EE74 and sub_214xxxx clear calls over about 8
- docs/function_notes/hk_39.md:65 probably screen/layer setup: sub_2148934(1) and BG register bits, sub_214A428 init, then a long series of sub_200EE74 and sub_214xxxx clear calls over about 8
sub_21A4F80
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1852 probably layer/display reset: BG control bits at off_21A50D0/E0/EC, then about 7 sub_200EE74 plus sub_214xxxx clear calls on objects from table off_21A50F4
- docs/function_notes/hk_39.md:66 probably layer/display reset: BG control bits at off_21A50D0/E0/EC, then about 7 sub_200EE74 plus sub_214xxxx clear calls on objects from table off_21A50F4
sub_21A5120
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1853 probably big UI screen constructor: creates a UI object via sub_20364E0/sub_2036BEC/sub_2038D88 with a 26-word parameter block, binds about 40 widget handles
- docs/function_notes/hk_39.md:67 probably big UI screen constructor: creates a UI object via sub_20364E0/sub_2036BEC/sub_2038D88 with a 26-word parameter block, binds about 40 widget handles
sub_21A59AC
(not in export)
- docs/function_notes/hk_39.md:68 sets or clears a flag on the widget at cell a2 of object a1: sign bit of cell 24 selects state 0 or -5, then calls sub_212ECC0 with a different id.
sub_21A5A20
(not in export)
- docs/function_notes/hk_39.md:69 thin wrapper: sub_2185140(a1,a2) then sub_2185084 with off_21A5A34 (probably sets a cell texture).
sub_21A5A38
(not in export)
- docs/function_notes/hk_39.md:70 per-frame animation step on counter a1[4]: calls sub_2184F94 init on first frame; after 10 frames calls the callback at off_21A5A88+dword_21A5A8C (clearing it)
sub_21A5A90
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1854 probably clears widget cells 14-21 via sub_21A5B2C on object off_21A5B20, then sets a cell texture from off_21A5B28 on the target widget.
- docs/function_notes/hk_39.md:71 probably clears widget cells 14-21 via sub_21A5B2C on object off_21A5B20, then sets a cell texture from off_21A5B28 on the target widget.
sub_21A5B2C
(not in export)
- docs/function_notes/hk_39.md:72 clears cell a2 of a widget: sub_2185084 with 0, sub_2184FF8 value 0, and sets +24 to dword_21A5B4C.
sub_21A5B50
(not in export)
- docs/function_notes/hk_39.md:73 per-frame ease in/out animator on counter a1[4], clamped to dword_21A5BF8; after 10 frames calls callback at off_21A5C00+dword_21A5C04 and returns 1.
sub_21A5C08
(not in export)
- docs/function_notes/hk_39.md:74 thin wrapper: sub_2185140 then sub_2185084 with off_21A5C1C (probably sets widget texture/state).
sub_21A5C20
(not in export)
- docs/function_notes/hk_39.md:75 per-frame ease in/out animator like sub_21A5B50 with step dword_21A5CD4 and clamp dword_21A5CD0; after 10 frames calls callback at off_21A5CD8+dword_21A5CDC
sub_21A5CE0
(not in export)
- docs/function_notes/hk_39.md:76 thin wrapper: sub_2185140 then sub_2185084 with off_21A5CF4.
sub_21A5CF8
(not in export)
- docs/function_notes/hk_39.md:77 per-frame 20-frame animator on counter a1[4]: frames 1-5 and 6-10 ramp by dword_21A5DC4 capped at dword_21A5DC0; frame 11 calls callback at
sub_21A5DD0
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1855 probably sets up a sprite pair: positions widget cells 9 and 10 of a1 from cell a2 via sub_2184FB8, then assigns textures off_21A5E38 and off_21A5E3C via
- docs/function_notes/hk_39.md:78 probably sets up a sprite pair: positions widget cells 9 and 10 of a1 from cell a2 via sub_2184FB8, then assigns textures off_21A5E38 and off_21A5E3C via
sub_21A5E40
(not in export)
- docs/function_notes/hk_39.md:79 per-frame fade/ease animator on counter a1[4]: frames 1-5 idle, frames 6-10 ramp by dword_21A5EC4 capped at dword_21A5EC8; after frame 10 calls callback
sub_21A5ED4
(not in export)
- docs/function_notes/hk_39.md:80 per-frame countdown animator: frames 1-5 decrement by dword_21A5F4C; returns 1 once the counter reaches 0 after frame 5, else 0.
sub_21A5F50
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1856 probably tile-collision movement for object off_21A6208: converts coordinates (20.12 fixed point, shift +12, origin +16/+20, grid size +24), tests walls via
- docs/function_notes/hk_39.md:81 probably tile-collision movement for object off_21A6208: converts coordinates (20.12 fixed point, shift +12, origin +16/+20, grid size +24), tests walls via
sub_21A6218
(not in export)
- docs/function_notes/hk_39.md:82 allocates a 68-byte object via sub_20364E0/sub_2036BEC, stores a1/a2/a3 into +16/+20/+24 of the global at off_21A6254, then tail-calls sub_2181254(a3,a4,a5).
sub_21A6258
(not in export)
- docs/function_notes/hk_39.md:83 reads terrain/tile code at the object position via sub_2180FE4; returns 0 if zero or unchanged vs byte +8, else stores the new code and returns 1 (terrain
sub_21A628C
(not in export)
- docs/function_notes/hk_39.md:84 thin wrapper: indirect call off_21A62A0 with object position (+52, +56) and terrain byte +8 of object off_21A629C.
sub_21A62A4
(not in export)
- docs/function_notes/hk_39.md:85 returns whether point (a1,a2) lies inside the grid of object off_21A62DC (shift +12, origin +16/+20, size +24).
sub_21A62E0
(not in export)
- docs/function_notes/hk_39.md:86 getter: returns +20 + (+64 << shift +12) of object off_21A62F0 (linear cell address).
sub_21A62F4
(not in export)
- docs/function_notes/hk_39.md:87 getter: returns +16 + (+60 << shift) of object off_21A6304 (linear cell address, x/y variant).
sub_21A6308
(not in export)
- docs/function_notes/hk_39.md:88 getter: returns +20 + (+56 << shift) of object off_21A6318 (linear cell address).
sub_21A631C
(not in export)
- docs/function_notes/hk_39.md:89 getter: returns +16 + (+52 << shift) of object off_21A632C (linear cell address).
sub_21A6330
(not in export)
- docs/function_notes/hk_39.md:90 sets position fields +52/+56 of object off_21A6358 from world coords (a1-origin)>>shift and (a2-origin)>>shift, then calls sub_21A63B8 to clamp.
sub_21A635C
(not in export)
- docs/function_notes/hk_39.md:91 getter: returns field +4 of object off_21A6364.
sub_21A6368
(not in export)
- docs/function_notes/hk_39.md:92 sets +4 of object off_21A6374 to a1 and tail-calls the callback at off_21A6378.
sub_21A637C
(not in export)
- docs/function_notes/hk_39.md:93 getter: returns the dword pointed to by off_21A6384.
sub_21A6388
(not in export)
- docs/function_notes/hk_39.md:94 setter: stores its argument into the dword at *off_21A6390 and returns it.
sub_21A6394
(not in export)
- docs/function_notes/hk_39.md:95 getter: returns byte +8 of object off_21A639C (probably terrain/track type).
sub_21A63A0
(not in export)
- docs/function_notes/hk_39.md:96 setter: stores byte argument into +8 of object off_21A63A8 and returns it.
sub_21A63AC
(not in export)
- docs/function_notes/hk_39.md:97 setter: stores its argument into +12 of object off_21A63B4 and returns it.
sub_21A63B8
(not in export)
- docs/function_notes/hk_39.md:98 clamps position fields +52/+56 of object off_21A640C to the valid grid range (lower bound from mode +4, upper bound from +24 minus 1 or 2); returns the upper
sub_21A6410
(not in export)
- docs/function_notes/NEEDS_REVIEW.md:1857 probably draws one glyph/tile strip: width 14 or 30 from a7, calls sub_2124748 with tile data from off_21A6474 and tables off_21A6478/off_21A647C, then
- docs/function_notes/hk_39.md:99 probably draws one glyph/tile strip: width 14 or 30 from a7, calls sub_2124748 with tile data from off_21A6474 and tables off_21A6478/off_21A647C, then
sub_21A6480
(not in export)
- docs/function_notes/hk_39.md:100 take-and-clear getter: returns off_21A6488 and sets its pointer slot to 0.
sub_21A648C
(not in export)
- docs/function_notes/hk_39.md:101 init of object at off_21A64E8: allocates 16 bytes via sub_2036BEC, fills 4 dwords from widget handles via sub_204799C and sub_20B49BC/sub_20B48B4/sub_20B4A44
sub_21A64FC
(not in export)
- docs/function_notes/hk_39.md:102 loads three values from widget handles via sub_204799C into locals v4/v5/v6 via sub_20B496C, sub_20B48EC and sub_20B4A7C; returns the result of the last setter.
sub_2245F58
(not in export)
- vm_model/src/bevy_plugin.rs:74 Deterministic LCG. The original RNG (
sub_2245F58) is mis-decompiled; swap in its exact - vm_model/src/seq.rs:14 |
sub_2245F58| RNG | [SeqRng] |
sub_22473A8
(not in export)
- vm_model/src/bevy_plugin.rs:64 Variables 16..=255, shared by every sequence (
sub_22473A8's global branch). - vm_model/src/seq.rs:13 |
sub_22473A8| variable slot (local/global) | [Vars] |
sub_224746C
(not in export)
- vm_model/src/lib.rs:8 clean copies
sub_224746C/sub_2F838CC. Those names are flat-load addresses of the - vm_model/src/seq.rs:4 twins
sub_224746C/sub_2F838CCand their helpers: - vm_model/src/ir/vm_sub_209deaa.rs:6 WARNING: suspect decompilation (jumpouts=3, neon=1, flag vars=3). Cross-checked against: sub_224746C, sub_2F838CC.
- vm_model/src/ir/vm_sub_209deaa.rs:105 NOT handled in baseline; present in twin
sub_224746C
sub_2247E44
(not in export)
- vm_model/src/seq.rs:15 |
sub_2247E44| note on (audio hardware) | [SeqEvent::NoteOn] |
sub_2248640
(not in export)
- vm_model/src/seq.rs:12 |
sub_2248640| operand by kind 0..4 | [Cursor::arg] + [Track::resolve] | - vm_model/src/seq.rs:31 How an operand is encoded (third argument of
sub_2248640).
sub_2248708
(not in export)
- vm_model/src/seq.rs:10 |
sub_2248708| fetch 7-bit varlen | [Cursor::varlen] |
sub_2248748
(not in export)
- vm_model/src/seq.rs:11 |
sub_2248748| fetch u24 LE (data offset) | [Cursor::u24] |
sub_22487A8
(not in export)
- vm_model/src/seq.rs:9 |
sub_22487A8| fetch s16 LE | [Cursor::s16] |
sub_22487F8
(not in export)
- vm_model/src/seq.rs:8 |
sub_22487F8| fetch byte at IP (16B cache) | [Cursor::u8] |
sub_2F838CC
(not in export)
- vm_model/src/lib.rs:8 clean copies
sub_224746C/sub_2F838CC. Those names are flat-load addresses of the - vm_model/src/seq.rs:4 twins
sub_224746C/sub_2F838CCand their helpers: - vm_model/src/ir/vm_sub_209deaa.rs:6 WARNING: suspect decompilation (jumpouts=3, neon=1, flag vars=3). Cross-checked against: sub_224746C, sub_2F838CC.