At a glance

In the game
Every Seru summon and every Art's mid-cast textures; the seven big summons' bespoke creatures
Where
summon.dat = extraction PROT 893 (raw TOC 0x37F); readef.DAT = extraction PROT 894 (raw TOC 0x380); CDNAME block bat_back_dat
Size / stride
Fixed 0x10800-byte slots: 103 in summon.dat, 78 in readef.DAT, both tiling their entry exactly. No magic; texture slots start with a u32 mode, art archives with 'M' 'E'
Parser
legaia_asset::summon_readef (+ summon_creatures, me_archive); CLI asset summon-readef
Confidence
Confirmed - slot math read from the battle-action state machine; a mid-cast save state's stream buffer and VRAM byte-match the disc (how we know)
Used by
battle action SM, Seru magic & summons, Arts

How a cast reaches the disc

1
Cast begins
The battle-action state machine turns the action id into a base slot byte; bit 7 picks the file.
battle overlay
2
Transfer
Opens the file by raw PROT TOC index, seeks slot × 0x10800, reads one slot into the stream buffer.
transfer SM
3
Apply
Each arriving slot is consumed: palette rows and texture pages go to VRAM, the actor record becomes a battle actor.
applier SM
4
Draw
The summon animates through the ordinary rigid-transform battle draw from its per-part keyframe streams.
monster animation decoder

Both files live inside PROT.DAT like everything else. The dev path strings are ignored - the retail file-open shim is a stub, and the fourth argument goes straight to the PROT reader as a raw TOC index. The in-RAM TOC keeps PROT.DAT's 8-byte header while the extraction strips it, so raw index = extraction entry + 2 (CDNAME numbering).

Action id to slot

The cast sequence computes a base slot byte from the actor's action id. Bit 7 selects the file (set = summon.dat, clear = readef.DAT); base & 0x7F is the first slot of the group.

id <  0x9A:  base = 3 * (id - 1)    (mod 256)
id >= 0x9A:  base = 4 * id + 0x63   (mod 256)
Action idsFileGroup shapeSlots
0x01..=0x1Areadef.DAT3 slots [texture, aux, aux]26 × 3 = 78
0x81..=0x99summon.dat3 slots [texture, texture, actor record]25 × 3 = 75
0x9A..=0xA0summon.dat4 slots [texture, texture, raw pool, actor record]7 × 4 = 28

The bands tile both files exactly. Group 0 of summon.dat (spell id 0x81, Gimard) carries the "Burning Attack" record, matching the spell table's player Seru-magic block.

group texture slotCLUT (0,488) + page (512,0) texture slotCLUT (0,490) + page (640,0) raw pool slotbig summons only actor recordname, TMD, textures, clips base + 0 base + 1 base + 2 last slot each slot = 0x10800 bytes (33 sectors); readef.DAT groups stop after base + 1
VRAM targets are positional: the group's first texture slot and second texture slot always land on the same rows and pages.

Slot formats

Texture slot

OffsetSizeFieldMeaning
+0x000u32mode0, 1 or 2 - selects CLUT row count and page width
+0x004256 × u16 per rowCLUT rowsBGR555; mode 1 carries 2 rows, modes 0 / 2 one
+0x204 / +0x4040x8000 / 0x10000texture page4bpp, 256 rows; mode 0 is 64 halfwords wide, modes 1 / 2 are 128

Actor-record slot

Consumed in place, slot-relative offsets. The TMD and texture pool route through the same installer the monster archive uses, and the creature is staged as a battle actor.

OffsetSizeFieldMeaning
+0x00u32name offsetNUL-terminated attack-name string
+0x04u32TMD offsetLegaia TMD
+0x08u32texture-pool offsetMonster-style CLUT region + page
+0x1Du8elementThe summon's element
+0x4Au8part count
+0x4Cu32[parts]per-part offsetsAnimation entries; base differs by band (below)

Big-summon raw slot

The third slot of the four-slot groups is headerless; three regions tile it exactly (0x1E0 + 0x8000 + 0x8620): a 240-entry CLUT to VRAM (0, 486), a 64×256-halfword page to (448, 256), and a part pool for the creature's animation. Those targets are monster battle slot 2's, so a big summon installs over slot 2 and the ordinary relocation reproduces its placement.

Creature meshes and animation

  • Ordinary summons (0x81..=0x99) reuse an enemy: the actor-record TMD is byte-identical to a record in the monster archive (extraction 867). Map in legaia_asset::summon_creatures.
  • Big summons (0x9A..=0xA0) carry a bespoke mesh matching no archive record; their texture pool and animation entries live in the group's raw slot.
  • Each per-part entry is a monster-animation record: a packed keyframe stream at entry +0x8C, [u8 parts][u8 frames] then nine-byte TRS records, playback rate at +0x78. No decoder of its own is needed.
  • Offsets are relative to the actor-record slot for three-slot groups and to the raw slot's part pool (+0x81E0) for four-slot groups; in both cases the streams tile contiguously.

The seven big summons

Each id is pinned by two independent reads of its own record - the inline attack-name string and the element byte - both agreeing with the curated summon table.

Spell idSummonAttack nameElement byte
0x9APalmaMeteor Cluster0 earth
0x9BMuleDeep Avalanche1 water
0x9CHornResurrector5 light
0x9DJedoDeadly Promise6 dark
0x9EMetaInferno2 fire
0x9FTerraQueen Twister3 wind
0xA0OzmaVoltagor4 thunder

All seven play in the browser on the Seru magic & summons page, decoded from your own disc.

Art "ME" archives

The aux slots of readef.DAT groups 0..3 (slots 3×char + 1 / + 2 for Vahn / Noa / Gala / Terra) hold the player art-animation archives: magic 'M' 'E', u8 count, u16 entry_sizes[count] (bit 15 = compressed), then concatenated bodies. Each decompresses through the channel-delta codec into the same packed TRS stream (see player battle files). Parser legaia_asset::me_archive.

Which slot is resident when
  • The initiative scheduler seeds the acting entity's group base per turn: party 3 × (char - 1); enemy 3 × monster_record[+0x1C]. The character's main ME archive stays resident for the turn.
  • Battle-end win-pose staging requests slot 3 × char + 2 (the base archive) directly. The win-pose pick is re-rolled onto a living party member only when the acting actor is dead - the hole behind the enemy-ally charm softlock.
  • readef groups stop after base + 1 unless bit 7 is set or base == 0x36, the one readef id with a four-slot group; the second texture upload is skipped for base < 0x0C and 0x37..=0x41.
  • The aux slots of the higher readef groups (enemy-special bands) are unattributed as content; their selection is pinned to the monster record's group byte.

How we know

FunctionAddressWhat it provesDump
Battle-action SM, case 0x32FUN_801E295CAction id → base slot byte; bit 7 file selectfuncs/overlay_battle_801e295c.txt
Transfer SMFUN_801F17F8Opens by raw TOC index via FUN_800558FC / FUN_8003E8A8; seeks slot × 0x10800; reads into *0x8007BD74funcs/overlay_battle_801f17f8.txt
Applier SMFUN_801F12D0, record consumer FUN_801F19ECSlot classes, VRAM targets, actor-record offsets, readef stop rulefuncs/overlay_muscle_dome_801f12d0.txt, _801f19ec.txt
Initiative schedulerFUN_801DABA4Per-turn group base; win-pose re-pick at 0x801E6690funcs/overlay_battle_action_801daba4.txt
Mesh / texture installerFUN_80055468Shared with the monster archivefuncs/80055468.txt
Mid-cast save statestream buffer + VRAM67 584-byte buffer equals extraction 894 at 1 × 0x10800; slot 0's CLUT row and page match VRAMsummon_readef_real, summon_creature_tmd_map_real

CLI: asset summon-readef <entry.BIN> lists every slot's class and attack name; --texture-png-dir decodes pages to PNG; --action-id resolves an id to its stream target. Source of record: docs/formats/summon-readef.md.

See also