Archiveverified

Battle model prefixes

Battle model prefixes

battle.lgp names nothing. Every model in it is addressed by a two-letter prefix, and its files are that prefix plus two more letters: the skeleton araa.hrc, its meshes arab.p, arac.p, its textures arad.tex. The prefix is the whole address.

The prefix is an index, and for an enemy the index is its enemy id

Read the two letters as base-26 with a as zero:

index = (first - 'a') * 26 + (second - 'a')

ar is 17, gi is 164, mm is 324. For any prefix in the enemy range, that index is the enemy id scene.bin declares — the same number a scene setup writes beside the record that carries the creature's stats, drops and attack table.

That matters because it means a page can claim its battle model without anybody comparing names. The claim is arithmetic against a number the corpus already stores in game_id, so it holds in any language and survives a retranslation.

How the alignment was checked

The corpus holds 342 creature pages that declare an enemy id. Resolving each battle model prefix to an index and looking up the page at that id:

Prefix index lands on a page whose name matches the model's 314
Prefix index lands on a page, and the model list has no name to compare 28
Prefix index lands on a page whose name contradicts the model's 0

Zero contradictions across 342 lookups is the measurement. The 28 are entries a community model index left as Unknown; the page names them, and nothing disagrees.

Enemy id 17 is the one page the arithmetic finds nothing at, because Guard Hound was hand-written before the seed and the importer merged the record into it by name rather than giving it a game_id. The binding is recorded there anyway, with that reason on it.

Three other ranges live in the same archive

Not every prefix is an enemy. battle.lgp also holds:

  • The playable models, at prefixes rs through sm — 21 of them, which ff7.exe's own model table names in romaji: CLOUD, EARITH, SEFIROS, DEATHGIG. The party's four Barret models and three Vincent models are separate entries, as are Vincent's four transformations and the frog a party member becomes under Frog status.
  • The battle arenas, at prefixes og through rr — 90 of them, one per battle location a scene can select. Nothing in any file names an arena in any language.
  • Models nothing names at all — 26 prefixes that either no encounter references or that a scene declares under bytes no English name table has letters for. The ten at aa through aj are test dummies.

Only the first two ranges have an entity to belong to, which is why the arenas do not appear in the model index: a battle location is not a page here, for the same reason 702 field maps are not.

The prefix is not a field model prefix

char.lgp uses four-letter names for skeletons directly — aaaa.hrc is Cloud's field model. battle.lgp uses two letters plus a two-letter member suffix. aaaa.hrc therefore exists in both archives and means different things: Cloud in one, test dummy 0 in the other. Anything resolving a member by name has to know which archive it is reading.

Facts

Source
  • measured
Status
  • verified
Targets
  • pc-1998
  • pc-steam
Updated
  • 2026-09-05

technical/archive/battle-lgp