PRO File Format

PRO files are binary prototype records. A prototype describes the default properties of an object: its PID, art FID, name and description message id, flags, script id, material, and type-specific data such as weapon damage, critter stats, or door key codes.

Map objects and inventory entries usually store per-instance state separately. The PRO file is the shared template that the engine loads when it needs the object's base data.

Location and lookup

Prototype files are stored below proto\<type>. These paths are relative to master.dat or critter.dat when packed, or to the game's data directory when unpacked. The file name is not derived directly from the PID number at runtime; it is looked up through the matching .lst file.

Object typePID high byteDirectoryList fileMessage file
Item0proto\itemsproto\items\items.lsttext\<language>\game\pro_item.msg
Critter1proto\crittersproto\critters\critters.lsttext\<language>\game\pro_crit.msg
Scenery2proto\sceneryproto\scenery\scenery.lsttext\<language>\game\pro_scen.msg
Wall3proto\wallsproto\walls\walls.lsttext\<language>\game\pro_wall.msg
Tile4proto\tilesproto\tiles\tiles.lsttext\<language>\game\pro_tile.msg
Misc5proto\miscproto\misc\misc.lsttext\<language>\game\pro_misc.msg

The low 24 bits of a PID are a 1-based line number in the relevant list file. For example, PID 0x02000031 has object type 2 (scenery) and list index 0x31 (49), so the engine reads line 49 from proto\scenery\scenery.lst and opens that file in proto\scenery.

When reading a list line, the engine cuts the line at the first space and then removes CR/LF. This allows comments after the filename, but it also means filenames cannot contain spaces.

Many vanilla PRO filenames follow an eight-digit decimal naming convention such as 00000032.pro, but the list file is authoritative. Tools should use the list entry rather than generating a filename from the PID.

PRO files stored inside save-game directories, for example data\savegame\slot##\proto, may be gzip-compressed like saved map objects. If a saved-game PRO does not parse as the binary format described here, try treating it as gzip data first. See Savegame Structure for how party-member PRO sidecars are copied into save slots.

Encoding and byte order

All numeric fields below are stored as big-endian 32-bit signed integers unless the table says uint8. The engine's file helpers write a 32-bit integer as high word first and high byte first.

There is no magic number or version field in a PRO file. The engine decides which structure to read from the high byte of the PID stored at the start of the file.

Type sizes

TypeSerialized sizeNotes
Item0x81, 0x7D, 0x7A, 0x51, 0x45, 0x41, or 0x3DDepends on item subtype: armor, drug, weapon, ammo, misc, container, or key.
Critter0x1A0 in Fallout 2, 0x19C in Fallout 1Fallout 2 adds the native damage type at the end.
Scenery0x31 or 0x2DDoor, stairs, and elevator have two subtype fields; ladders and generic scenery have one.
Wall0x24Fixed size.
Tile0x1CFixed size.
Misc0x1CFixed size.

Common header

Every PRO file starts with these three fields:

OffsetTypeFieldDescription
0x00int32pidPrototype id. High byte is the object type; low 24 bits are the list index.
0x04int32message_numBase id in the type's pro_*.msg file.
0x08int32fidArt FID. See LST File Format for the packed FID layout and FRM File Format for the art container it usually resolves to.

Prototype names and descriptions are not stored as strings in the PRO file. The engine uses message_num + 0 for the name and message_num + 1 for the description in the message file associated with the PID's object type. See MSG File Format for the message-list syntax and lookup behavior.

Shared object fields

Most object types continue with lighting, flags, extended flags, and a script id. Tiles are smaller and do not have light fields. Misc protos do not store a script id in the PRO file.

FieldUsed byDescription
light_distanceItems, critters, scenery, walls, miscLight radius emitted by the object.
light_intensityItems, critters, scenery, walls, miscLight intensity.
flagsAll six PRO typesMain object flags.
flags_extAll six PRO typesExtended flags. Some values control action availability.
sidItems, critters, scenery, walls, tilesScript id, or -1 for no script. This refers to scripts.lst.
materialItems, scenery, walls, tilesMaterial type used by engine logic and editor UI.

Known shared values

Main flags

FlagNameMeaning
0x00000008FlatRendered early, just after tiles.
0x00000010NoBlockDoes not block the tile.
0x00000800MultiHexUses more than one hex.
0x00001000No HighlightDoes not draw the object highlight outline.
0x00004000TransRedRed transparency mode.
0x00008000TransNoneOpaque transparency mode.
0x00010000TransWallWall transparency mode.
0x00020000TransGlassGlass transparency mode.
0x00040000TransSteamSteam transparency mode.
0x00080000TransEnergyEnergy transparency mode.
0x10000000WallTransEndChanges wall transparency logic.
0x20000000LightThruLight passes through.
0x80000000ShootThruProjectiles can pass through.

Materials

ValueMaterial
0Glass
1Metal
2Plastic
3Wood
4Dirt
5Stone
6Cement
7Leather

Script ids

Script ids are stored as packed 32-bit values. 0xFFFFFFFF means no script. For normal object scripts the high byte is the script type and the low 16 bits are the line number in scripts\scripts.lst.

Script typeValue
System0
Spatial1
Time2
Item3
Critter4

Older format notes often describe the packed form as 0x0Y00XXXX, where Y is the script type and XXXX is the script-list index. This matches the practical values used by normal item, scenery, and critter scripts.

File layouts

The following tables list the serialized field order after the common header. They intentionally describe the file order, not the in-memory C struct padding.

Item

OrderFieldNotes
10x000C-0x001Flight_distance, light_intensity, flags, flags_ext, sid.
20x0020type. Item subtype: armor, container, drug, weapon, ammo, misc, or key.
30x0024-0x0037material, size, weight, cost, inv_fid. inv_fid is the inventory art FID, or -1.
40x0038field_80 (uint8). Older notes identify this as an item sound id.
50x0039 onwardSubtype payload. Depends on type.

Older notes split item flags_ext into lower flag bytes plus an attack-mode byte for weapons. Fallout 2 CE reads and writes it as one 32-bit flags_ext value, so this split is best treated as a UI/editor interpretation of the same four bytes.

Extended flagMeaning
0x00000100Big gun.
0x00000200Two-handed weapon.
0x00000800Can be used.
0x00001000Can be used on another object.
0x00008000Container can be picked up.
0x08000000Hidden or integral item, for example natural claws or robot weapons.
Item subtypeValueSizePayload fields
Armor00x81ac, 7 damage resistances, 7 damage thresholds, perk, male_fid, female_fid.
Container10x41max_size, open_flags.
Drug20x7D3 affected stats, 3 immediate amounts, first duration, 3 first delayed amounts, second duration, 3 second delayed amounts, addiction chance, withdrawal effect, withdrawal onset.
Weapon30x7AAnimation code, max damage, min damage, damage type, two ranges, projectile PID, minimum strength, two AP costs, critical failure type, perk, burst rounds, caliber, ammo type PID, ammo capacity, sound code byte.
Ammo40x51Caliber, quantity, AC modifier, DR modifier, damage multiplier, damage divisor.
Misc50x45Power type PID, power type, charges.
Key60x3DKey code.

Weapon attack modes are often shown in editors as two 4-bit values: 0 none, 1 punch, 2 kick, 3 swing, 4 thrust, 5 throw, 6 fire single, 7 fire burst, and 8 flame. The lower nibble is attack mode 1 and the upper nibble is attack mode 2.

Weapon animation codes select the critter weapon animation set: 0 none, 1 knife, 2 club, 3 sledgehammer, 4 spear, 5 pistol, 6 SMG, 7 rifle, 8 big gun, 9 minigun, and 10 rocket launcher.

Critter

Critter PRO files are fixed-size in normal Fallout 2 data: 0x1A0 bytes. After the common header they store:

Field groupContents
Shared fieldslight_distance, light_intensity, flags, flags_ext, sid.
Critter identityhead_fid, ai_packet, team_num.
Critter datad.flags, 35 base stats, 35 bonus stats, 18 skills, body type, experience, kill type, native damage type.

The player character has a special built-in PID, 0x01000000. For normal critter PRO files, the high PID byte is still 1.

Critter base and bonus stat arrays each contain 35 values in engine stat order: seven SPECIAL stats, hit points, action points, armor class, unarmed damage, melee damage, carry weight, sequence, healing rate, critical chance, better criticals, seven damage thresholds, nine damage resistances, age, and gender. The skill array contains 18 values in skill order from Small Guns through Outdoorsman.

The critter kill type field selects the target table used by critical hit effects. For example, men, ghouls, robots, and deathclaws each have different critical rows for the same hit location. The player character is special: incoming criticals against gDude use a separate player critical table instead of the critter PRO kill type path.

Critter data flagMeaning
0x00000002Can barter.
0x00000020Cannot be stolen from.
0x00000040Does not drop items.
0x00000080Cannot lose limbs.
0x00000100Corpse does not age away.
0x00000200Does not heal damage over time.
0x00000400Invulnerable.
0x00000800Leaves no dead body.
0x00001000Special death behavior.
0x00002000Melee attack can be used at range.
0x00004000Cannot be knocked down.

Scenery

OrderFieldNotes
1light_distance, light_intensity, flags, flags_ext, sidShared non-tile fields.
2typeScenery subtype.
3materialNamed field_2C in Fallout 2 CE.
4field_34 (uint8)Stored as one byte.
5Subtype payloadDepends on type.

The one-byte scenery field at 0x0028 is commonly treated as a sound id by older tools. Typical sound ids include 0x21, 0x23, 0x24, and values in the range 0x30 through 0x5A.

Scenery subtypeValuePayload fields
Door0open_flags, key_code.
Stairs1lower_tile, upper_tile.
Elevator2Elevator type, elevator level. The type selects the built-in or external elevator table.
Ladder up3One destination field.
Ladder down4One destination field.
Generic5One generic field.

For stairs and ladders, destination tile values are packed together with elevation in a single 32-bit value in the traditional documentation. Valid destination tiles are normal map tile numbers. Map-instance data can also carry destination map ids for some scenery objects, so do not assume every travel target is fully described by the PRO file alone.

Wall, tile, and misc

TypeFields after common headerSerialized size
Walllight_distance, light_intensity, flags, flags_ext, sid, material.0x24
Tileflags, flags_ext, sid, material.0x1C
Misclight_distance, light_intensity, flags, flags_ext.0x1C

Older format notes split wall and scenery flags_ext into two 16-bit halves: wall-light type flags and action flags. The serialized file still contains the same four bytes as the 32-bit flags_ext field used by the CE source.

Wall-light valueMeaning
0x0000North / South
0x0800East / West
0x1000North corner
0x2000South corner
0x4000East corner
0x8000West corner
Action valueMeaning
0x0001Kneel down when using.
0x0008Use.
0x0010Use on another object.
0x0020Look.
0x0040Talk.
0x0080Pick up.

Action behavior

Several common interactions are inferred from the PID type and flags rather than from a single named field:

Editing notes

Minimal parser subset

A tool that only needs to enrich MAP objects can often get useful classifications without parsing every subtype payload. The high-value subset is:

This subset is enough to distinguish many MAP object categories and script-bearing object kinds, but it is not enough to fully model item stats, critter combat data, scenery destinations, or other subtype-specific behavior.

Source References

History

2026-05-01 - Added source-backed local documentation based on Fallout 2 CE by OpenAI

Original public documentation: https://falloutmods.fandom.com/wiki/PRO_File_Format