LST File Format and FID Resolution

LST files are line-indexed tables. The first physical line is entry 0, the second line is entry 1, and so on. Many Fallout data structures store only an integer index; the matching LST file turns that index back into a filename, base name, script name, or other ordered entry.

This page covers generic LST rules, the art LST/FID system, critter and talking-head filename construction, and common editing hazards. scripts.lst is documented separately because its parser has script-specific metadata rules.

General Rules

RuleDescription
IndexingZero-based. Entry 0 is the first physical line in the file.
OrderingOrder is data. Reordering a list changes every reference that stores a line index.
Blank linesDo not use them as visual spacing. They still occupy an index and can produce an empty entry.
Line endingsOriginal data commonly uses CRLF. Readers should tolerate other endings, but tools should avoid needless churn.
CaseOriginal files often use uppercase names. Preserve case because loose files can be case-sensitive on modern platforms.
ExtensionsSome lists store complete filenames such as STRENGTH.FRM. Others store base names that the engine combines with a FRM extension, animation suffix, or directional suffix.
CommentsSemicolon comments are common in simple lists. Specialized lists may use other metadata syntax, so preserve trailing text unless the parser behavior is known.

Simple Example

The first five entries in skilldex.lst are entries 0 through 4. A skilldex art FID with object type 10 and index 0 resolves to the first line, STRENGTH.FRM.

STRENGTH.FRM  ; Strength     (Basic Stat)
PERCEPTN.FRM  ; Perception   (Basic Stat)
ENDUR.FRM     ; Endurance    (Basic Stat)
CHARISMA.FRM  ; Charisma     (Basic Stat)
INTEL.FRM     ; Intelligence (Basic Stat)

Art LST Parser

Fallout 2 CE loads one art list for each art object type from:

art\TYPE\TYPE.lst

The loader first counts every physical line, then rewinds and extracts the first token from each line. For art lists, token parsing stops at any space, comma, semicolon, carriage return, tab, or newline. The stored token is copied into a fixed 13-byte slot: up to 12 characters plus a trailing null byte.

Input lineStored art tokenNotes
STRENGTH.FRM ; StrengthSTRENGTH.FRMSemicolon comment is ignored by art-list tokenization.
hmjmps,0,1hmjmpsThe first pass stores the critter base name; a later critter-specific pass reads the comma metadata.
verylongfilename.frmemptyA leading space is a delimiter, so the first token is empty.
abcdefghijklmnop.frmabcdefghijklOnly the first 12 characters are stored by CE's art table.

Because line count is taken before token extraction, blank/comment-only lines still reserve indexes. A line that begins with a delimiter becomes an empty filename at that index.

Art Object Types

TypeDirectoryList fileEntry meaning
0itemsart\items\items.lstGround item FRM filename.
1crittersart\critters\critters.lstCritter animation base name plus optional alias/run metadata.
2sceneryart\scenery\scenery.lstScenery FRM filename.
3wallsart\walls\walls.lstWall FRM filename.
4tilesart\tiles\tiles.lstTile FRM filename. CE searches for grid001.frm to find the mapper blank tile index.
5miscart\misc\misc.lstMiscellaneous FRM filename.
6intrfaceart\intrface\intrface.lstInterface FRM filename.
7invenart\inven\inven.lstInventory FRM filename.
8headsart\heads\heads.lstTalking-head base name plus fidget counts.
9backgrndart\backgrnd\backgrnd.lstTalking-head background FRM filename.
10skilldexart\skilldex\skilldex.lstSkilldex/stat FRM filename.

Art FID Layout

Most art references are packed 32-bit FIDs rather than direct paths. The object type selects the art list family; the low 12 bits select the line in that list.

bits 28..30  rotation / directional selector
bits 24..27  art object type
bits 16..23  animation type
bits 12..15  weapon animation or head fidget number
bits  0..11  art LST index
fid = ((rotation << 28) & 0x70000000)
    | (objectType << 24)
    | ((animType << 16) & 0x00FF0000)
    | ((weaponCode << 12) & 0x0000F000)
    | (lstIndex & 0x00000FFF);
FieldMaskDescription
LST index0x00000FFFZero-based entry within the selected art LST. This limits normal art FIDs to entries 0..4095.
Weapon/fidget field0x0000F000Critter weapon animation code, or talking-head fidget number when the head filename pattern uses numbered fidgets.
Animation type0x00FF0000Critter animation, talking-head reaction/fidget/phoneme selector, or usually zero for simple art.
Art object type0x0F000000Selects items, critters, scenery, and so on.
Rotation0x70000000Directional selector used mainly by directional critter art.

Example FIDs

FIDMeaning
0x0A000000Object type 10 (skilldex), index 0, resolving to entry 0 of art\skilldex\skilldex.lst.
0x0700002AObject type 7 (inven), index 42, resolving to entry 42 of art\inven\inven.lst.
0x01000000Critter type 1, animation 0 stand, weapon code 0, index 0; the filename is constructed from critters.lst rather than read directly.

FID To Path Resolution

  1. Extract the art object type from bits 24..27.
  2. Extract the LST index from bits 0..11.
  3. Load the corresponding art\TYPE\TYPE.lst table.
  4. Use the LST index to get the filename or base name.
  5. For most art types, append nothing: the LST token is already the filename.
  6. For critters, append weapon/animation letters and .frm or .frN.
  7. For talking heads, append head reaction/fidget/phoneme letters and .frm.
  8. If localized art is enabled, try art\<language>\... before the normal path.

Changing an LST line changes every FID that points to that line. Changing the token at a line preserves indexes but redirects all references to a different file. Inserting or deleting a line shifts all later references.

Critter Lists

critters.lst uses the first token as the critter base name. CE then re-reads the same file and interprets comma-separated metadata after the base name.

base_name,alias_index,should_run
FieldDescription
base_nameBase stem used to construct critter animation filenames, such as hmjmps.
alias_indexIndex into critters.lst used as an anonymous/death/effect alias for some animations.
should_runRuntime flag returned by artCritterFidShouldRun. Used by critter movement/animation behavior.

If a line has no comma, CE defaults the alias to the current native male tribal/jumpsuit fallback index and sets should_run to 1. If a line has one comma but no second comma, CE sets the alias from the first metadata value and leaves should_run at 0.

The alias is used for a small set of animations: electrify, burned-to-nothing, electrified-to-nothing, fire dance, called-shot picture, and the matching single-frame variants. The alias keeps exotic death/effect animations available even when the original critter does not provide all those art files.

Critter Filename Construction

For critter art, the LST entry is only a base stem. The final file is:

art\critters\BASE + weapon_letter + animation_letter + extension

For example, base hmjmps with stand/no-weapon suffix aa becomes art\critters\hmjmpsaa.frm. Directional knockdown/death art can become hmjmpsba.fr0, hmjmpsba.fr1, and so on.

SituationFirst letterSecond letter
Basic unarmed/no-weapon animationsaa + animation, such as aa stand, ab walk, ak magic hands ground.
Stand/walk with weapon coded..ma for stand or b for walk.
Knockdown/death animationsba..p for animation ids 20..35.
Prone/back to standingch or j.
Weapon action animationsd..mc..l for take out through continuous fire. No-weapon is invalid for this range.
Single-frame death animationsra..p for animation ids 48..63.
Called-shot picturena.

Weapon Letters

CodeLetterMeaning
0a in many non-weapon pathsNo weapon.
1dKnife.
2eClub.
3fSledgehammer.
4gSpear.
5hPistol.
6iSMG.
7jRifle/shotgun class.
8kLaser rifle / heavy ranged class in CE naming.
9lMinigun.
10mLauncher.

Throw and dodge have special cases. Throwing with a knife uses dm; throwing with a spear uses gm; other thrown attacks use as. Dodge with no weapon uses an; dodge with a weapon uses the weapon letter and e.

Directional Critter Files

A normal critter .frm can contain all six rotations internally. Some critter animations, especially knockdown/death art, are stored as directional .fr0 through .fr5 files.

In CE's path builder, a packed critter rotation value of 0 resolves to .frm. A nonzero packed rotation resolves to .frN, where N = packed_rotation - 1. The higher-level buildFid helper usually forces rotation 0 for non-critter art and for most non-death critter animations. For directional knockdown/death animations, it tries the requested rotation, then can fall back to east, then northeast.

Talking-Head Lists

heads.lst uses a base name plus three fidget counts:

base_name,good_fidgets,neutral_fidgets,bad_fidgets

The base name is combined with a head animation suffix. The good, neutral, and bad fidget counts are returned when the engine needs to choose random fidget variants.

Head animationSuffix patternMeaning
0gvVery good reaction.
1gfNGood fidget number N.
2gnGood to neutral.
3ngNeutral to good.
4nfNNeutral fidget number N.
5nbNeutral to bad.
6bnBad to neutral.
7bfNBad fidget number N.
8bvVery bad reaction.
9gpGood phonemes.
10npNeutral phonemes.
11bpBad phonemes.

For fidget suffixes, N comes from the FID's bits 12..15. Talking-head animation frame timing is coordinated with LIP files and speech audio.

Prototype And Script Lists

Prototype LST files under proto\... map PID low bits to PRO filenames. They are also line-indexed tables, but they are a different namespace from art LSTs. A PID does not directly resolve through art\...; it resolves through proto\..., then the PRO header can contain an art FID.

scripts.lst maps script indexes to compiled INT files and can carry local_vars=N metadata. Because that parser differs from simple art lists, see SCRIPTS.LST File Format for the full behavior.

Inter-File Dependencies

File/formatRelationship
FRMArt LST and FID resolution usually selects the FRM file that should be loaded.
PROPRO files store object art FIDs and inventory art FIDs; proto LST files map PIDs to PRO filenames.
MAPMAP objects store current FIDs, frame numbers, rotations, and PIDs. Visual previewers need art LSTs and FRMs.
SavegameSaved object FIDs and PIDs remain index-based, so changing LST order can affect existing saves.
SSL / INTScripts can read, test, or change object FIDs; script-list indexes are resolved through scripts.lst.
CFG/INILanguage and resource-path settings influence where resolved art paths are searched.

Editing Notes

Parser Pitfalls

Source Code Map

SourceRelevant behavior
Fallout 2 CE art.ccArt list loading, token truncation, critter/head metadata, FID-to-path construction, localized art lookup, alias handling.
Fallout 2 CE art.hWeapon animation enum and art APIs.
Fallout 2 CE obj_types.hArt object type and rotation enums, FID type macro.
Fallout 2 CE animation.hAnimation type enum and FID animation-field macro.
Fallout 2 CE scripts.ccscripts.lst parsing, script names, and local-variable metadata.

References

History

2026-05-08 - Expanded into an LST/FID resolution hub covering art-list parsing, FID fields, critter/head metadata, filename construction, dependencies, and editing hazards.

2019-12-15 - Ported from Vault-Tec Labs LST File Format by ghost

Created by Noid.