At a glance

In the game
Per-attack code for summons and special attacks (the slot-B "stagers"), plus other mode-specific modules that expose an entry-point or dispatch table.
Magic / marker
No header - the first u32 is a pointer into the overlay window 0x801C0000..=0x801FFFFF, followed by 3..63 more
Lives in
PROT.DAT entries in the 0900..=0968 range (extraction index), 42 entries, 14-160 KB; the attack stagers load at slot-B base 0x801F69D8
Parser
legaia_overlay_images::overlay_ptr_table::detect; load bases in crates/asset/data/static-overlays.toml
Confidence
Inferred as a detector (a shape heuristic with zero overlap against named formats); the individual attack-stager identities are capture-pinned.
Used by
summon.dat / readef.DAT, Static overlay pipeline

Layout

The overlay window is the RAM region reserved for swappable code, so a run of valid pointers into it is a strong sign the blob expects to live there. The run is 4 to 64 pointers long; the first word that is not such a pointer starts the body.

+0x00 +0x04 +N*4 +(N+1)*4 ptr_0 u32 LE ptr_1 ... ptr_N-2 N = 4..64 ptr_N-1 last in range body: MIPS code or ASCII title / jr ra stub first every pointer in 0x801C0000..0x801FFFFF
The detector consumes pointers until the first out-of-window word; the smallest pointer bounds the load address from above.
+0x00ptr_0u32
+0x04ptr_1u32
…ptr_2 .. ptr_N-1N = 4..64
+N*4body: first word outside the windowrest

Every ptr is an address inside the overlay window 0x801C0000..=0x801FFFFF. The body is typically MIPS code, sometimes a jr ra; nop stub.

Tables come in three shapes:

ShapeSizeTell
Function entry-point tableSmall (5-14)Monotonic; one slot per public function
Switch dispatch tableLargerRepeating handler addresses; the C compiler's switch(x) over a dense range
Per-mode actor vtableSmallOnly 3 distinct values across N slots

Detection

Two checks produce zero overlap with already-named formats:

  1. The first u32 is in 0x801C0000..=0x801FFFFF (the overlay window).
  2. The run of consecutive overlay-pointer u32s is between 4 and 64 long.

Monotonicity is not required - switch dispatch tables legitimately repeat handler addresses.

In the port: legaia_overlay_images::overlay_ptr_table::detect returns the run's length and its first and last pointers; the recovered load bases live in crates/asset/data/static-overlays.toml.

Once the load address is known (the pointer values bound it from above: base <= min_ptr), the entry can be imported into Ghidra via scripts/ghidra-analysis/bulk-import-overlays.sh.

Where they sit

All 42 matches are in the 0900..=0968_xxx_dat range, 14 KB to 160 KB, in two pointer clusters:

EntriesPointer rangeShape
300x801F6Axx - 0x801F71xxSmall function-entry tables, monotonic, 5-14 entries - the slot-B stagers
120x801F84xx and upMixed: some monotonic, some switch dispatch with repeating handlers

Entries that open with a title

A handful of images in the same band open with a NUL-padded ASCII string instead of a pointer, so the detector does not count them. The string is the battle special-attack name the overlay stages; after it comes the pointer table (0924, 0927) or the code directly (0907). All of these load at slot-B base 0x801F69D8.

EntryTitleWhat it stagesSpell idPinned by
0907_xxx_datHell's MusicNighto's summon0x85Capture on the summon loader's 903..=913 slot; the same name in the spell table and summon.dat
0924_xxx_datUltimate RaveLippian (rare-Seru flute summon)0x96Capture mid-cast off the loader-B current id
0927_xxx_datDark EclipseJuggernaut (Evil Seru Magic)0x99Capture mid-cast off the loader-B current id
0957_xxx_dat(string table)The summon_effect_table overlay - a summon / effect / target label table, then an absolute-pointer table and code-Static overlay map

0924 and 0927 have computed rather than constant loader call sites, which is why their identities come from captures instead of a static loader constant.

How we know

The detector is a shape heuristic, so its badge stays Inferred; what is pinned is the slot-B load base and the identities of the titled stagers, each from a live capture of the summon loader.

Provenance: claim by claim
ClaimEvidenceWhere
Pointer-run shape is codeZero overlap with any named format over the corpus; bodies disassemble as MIPScrates/overlay-images/src/overlay_ptr_table.rs
Slot-B base 0x801F69D8Summon loader constant + the stager pointer clusterscrates/asset/data/static-overlays.toml
0907 = Nighto (spell 0x85)Capture of the summon loader's 903..=913 slot selectsummon.dat / readef.DAT action-id map
0924 = Lippian, 0927 = JuggernautMid-cast capture of the loader-B current idPCSX-Redux probes
0980 is not a stagerNo slot-B loader call site in the dance overlayAddress reference scan

Source of record: docs/formats/overlay-ptr-table.md.

See also